aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore56
-rw-r--r--.travis.yml10
-rw-r--r--.tx/config501
-rw-r--r--CHANGES.txt533
-rw-r--r--CODING.txt1
-rw-r--r--CONTRIBUTORS.txt30
-rw-r--r--COPYRIGHT.txt13
-rw-r--r--ChangeLog39510
-rw-r--r--INSTALL.txt113
-rw-r--r--LICENSE.txt280
-rw-r--r--README.txt24
-rw-r--r--UPGRADE.txt71
-rw-r--r--_graphics/SPRITES_LICENSE.TXT9
-rw-r--r--_graphics/admin_sprites.pngbin0 -> 2255 bytes
-rw-r--r--_graphics/ajax_loader.gifbin0 -> 2608 bytes
-rw-r--r--_graphics/ajax_loader_bw.gifbin0 -> 2608 bytes
-rw-r--r--_graphics/button_background.gifbin0 -> 786 bytes
-rw-r--r--_graphics/button_graduation.pngbin0 -> 384 bytes
-rw-r--r--_graphics/elgg_logo.pngbin0 -> 11481 bytes
-rw-r--r--_graphics/elgg_sprites.pngbin0 -> 19302 bytes
-rw-r--r--_graphics/elgg_toolbar_logo.gifbin0 -> 1525 bytes
-rw-r--r--_graphics/favicon.icobin0 -> 1150 bytes
-rw-r--r--_graphics/friendspicker.pngbin0 -> 4853 bytes
-rw-r--r--_graphics/header_shadow.pngbin0 -> 154 bytes
-rw-r--r--_graphics/icons/default/large.pngbin0 -> 2706 bytes
-rw-r--r--_graphics/icons/default/medium.pngbin0 -> 1676 bytes
-rw-r--r--_graphics/icons/default/small.pngbin0 -> 752 bytes
-rw-r--r--_graphics/icons/default/tiny.pngbin0 -> 554 bytes
-rw-r--r--_graphics/icons/default/topbar.pngbin0 -> 313 bytes
-rw-r--r--_graphics/icons/user/defaultlarge.gifbin0 -> 2924 bytes
-rw-r--r--_graphics/icons/user/defaultmaster.gifbin0 -> 43 bytes
-rw-r--r--_graphics/icons/user/defaultmedium.gifbin0 -> 2855 bytes
-rw-r--r--_graphics/icons/user/defaultsmall.gifbin0 -> 1027 bytes
-rw-r--r--_graphics/icons/user/defaulttiny.gifbin0 -> 745 bytes
-rw-r--r--_graphics/icons/user/defaulttopbar.gifbin0 -> 599 bytes
-rw-r--r--_graphics/powered_by_elgg_badge_drk_bckgnd.gifbin0 -> 947 bytes
-rw-r--r--_graphics/powered_by_elgg_badge_light_bckgnd.gifbin0 -> 740 bytes
-rw-r--r--_graphics/sidebar_background.gifbin0 -> 1354 bytes
-rw-r--r--_graphics/spacer.gifbin0 -> 43 bytes
-rw-r--r--_graphics/toptoolbar_background.gifbin0 -> 2028 bytes
-rw-r--r--_graphics/two_sidebar_background.gifbin0 -> 85 bytes
-rw-r--r--_graphics/walled_garden/one_column_bottom.pngbin0 -> 1336 bytes
-rw-r--r--_graphics/walled_garden/one_column_middle.pngbin0 -> 226 bytes
-rw-r--r--_graphics/walled_garden/one_column_top.pngbin0 -> 1345 bytes
-rw-r--r--_graphics/walled_garden/two_column_bottom.pngbin0 -> 1353 bytes
-rw-r--r--_graphics/walled_garden/two_column_middle.pngbin0 -> 231 bytes
-rw-r--r--_graphics/walled_garden/two_column_top.pngbin0 -> 1366 bytes
-rw-r--r--actions/admin/delete_admin_notice.php13
-rw-r--r--actions/admin/menu/save.php34
-rw-r--r--actions/admin/plugins/activate.php59
-rw-r--r--actions/admin/plugins/activate_all.php33
-rw-r--r--actions/admin/plugins/deactivate.php53
-rw-r--r--actions/admin/plugins/deactivate_all.php33
-rw-r--r--actions/admin/plugins/set_priority.php39
-rw-r--r--actions/admin/site/flush_cache.php10
-rw-r--r--actions/admin/site/unlock_upgrade.php10
-rw-r--r--actions/admin/site/update_advanced.php98
-rw-r--r--actions/admin/site/update_basic.php27
-rw-r--r--actions/admin/user/ban.php30
-rw-r--r--actions/admin/user/delete.php40
-rw-r--r--actions/admin/user/makeadmin.php27
-rw-r--r--actions/admin/user/removeadmin.php27
-rw-r--r--actions/admin/user/resetpassword.php43
-rw-r--r--actions/admin/user/unban.php27
-rw-r--r--actions/avatar/crop.php72
-rw-r--r--actions/avatar/remove.php34
-rw-r--r--actions/avatar/upload.php62
-rw-r--r--actions/comments/add.php62
-rw-r--r--actions/comments/delete.php23
-rw-r--r--actions/entities/delete.php22
-rw-r--r--actions/friends/add.php35
-rw-r--r--actions/friends/collections/add.php31
-rw-r--r--actions/friends/collections/delete.php23
-rw-r--r--actions/friends/collections/edit.php23
-rw-r--r--actions/friends/remove.php32
-rw-r--r--actions/import/opendd.php22
-rw-r--r--actions/login.php66
-rw-r--r--actions/logout.php18
-rw-r--r--actions/notifications/settings/usersettings/save.php29
-rw-r--r--actions/plugins/settings/save.php43
-rw-r--r--actions/plugins/usersettings/save.php58
-rw-r--r--actions/profile/edit.php109
-rw-r--r--actions/profile/fields/add.php40
-rw-r--r--actions/profile/fields/delete.php28
-rw-r--r--actions/profile/fields/edit.php20
-rw-r--r--actions/profile/fields/reorder.php12
-rw-r--r--actions/profile/fields/reset.php20
-rw-r--r--actions/register.php78
-rw-r--r--actions/river/delete.php21
-rw-r--r--actions/security/refreshtoken.php5
-rw-r--r--actions/user/passwordreset.php19
-rw-r--r--actions/user/requestnewpassword.php27
-rw-r--r--actions/user/spotlight.php19
-rw-r--r--actions/useradd.php69
-rw-r--r--actions/usersettings/save.php11
-rw-r--r--actions/widgets/add.php42
-rw-r--r--actions/widgets/delete.php20
-rw-r--r--actions/widgets/move.php24
-rw-r--r--actions/widgets/reorder.php24
-rw-r--r--actions/widgets/save.php44
-rw-r--r--actions/widgets/upgrade.php65
-rw-r--r--documentation/coding_standards/best_practices.txt60
-rw-r--r--documentation/coding_standards/css_coding_standards.txt67
-rw-r--r--documentation/coding_standards/deprecation.txt36
-rw-r--r--documentation/coding_standards/html_best_practices.txt1
-rw-r--r--documentation/coding_standards/javascript_best_practices.txt1
-rw-r--r--documentation/coding_standards/javascript_coding_standards.txt13
-rw-r--r--documentation/coding_standards/php_best_practices.txt1
-rw-r--r--documentation/coding_standards/php_coding_standards.txt55
-rw-r--r--documentation/examples/actions/basic.php22
-rw-r--r--documentation/examples/crontab.example28
-rw-r--r--documentation/examples/events/advanced.php13
-rw-r--r--documentation/examples/events/all.php30
-rw-r--r--documentation/examples/events/basic.php17
-rw-r--r--documentation/examples/events/trigger.php11
-rw-r--r--documentation/examples/hooks/advanced.php28
-rw-r--r--documentation/examples/hooks/all.php12
-rw-r--r--documentation/examples/hooks/basic.php17
-rw-r--r--documentation/examples/hooks/trigger.php14
-rw-r--r--documentation/examples/plugins/README.txt5
-rw-r--r--documentation/examples/plugins/actions/.gitignore (renamed from vendors/dokuwiki/data/attic/_dummy)0
-rw-r--r--documentation/examples/plugins/languages/en.php24
-rw-r--r--documentation/examples/plugins/manifest.xml18
-rw-r--r--documentation/examples/plugins/start.php22
-rw-r--r--documentation/examples/plugins/views/default/.gitignore (renamed from vendors/dokuwiki/data/cache/_dummy)0
-rw-r--r--documentation/info/config.php430
-rw-r--r--documentation/info/manifest.xml98
-rw-r--r--engine/classes/APIException.php11
-rw-r--r--engine/classes/CallException.php10
-rw-r--r--engine/classes/ClassException.php10
-rw-r--r--engine/classes/ClassNotFoundException.php10
-rw-r--r--engine/classes/ConfigurationException.php10
-rw-r--r--engine/classes/CronException.php10
-rw-r--r--engine/classes/DataFormatException.php9
-rw-r--r--engine/classes/DatabaseException.php10
-rw-r--r--engine/classes/ElggAccess.php66
-rw-r--r--engine/classes/ElggAnnotation.php128
-rw-r--r--engine/classes/ElggAttributeLoader.php199
-rw-r--r--engine/classes/ElggAutoP.php309
-rw-r--r--engine/classes/ElggBatch.php392
-rw-r--r--engine/classes/ElggCache.php243
-rw-r--r--engine/classes/ElggData.php305
-rw-r--r--engine/classes/ElggDiskFilestore.php399
-rw-r--r--engine/classes/ElggEntity.php1762
-rw-r--r--engine/classes/ElggExtender.php214
-rw-r--r--engine/classes/ElggFile.php427
-rw-r--r--engine/classes/ElggFileCache.php224
-rw-r--r--engine/classes/ElggFilestore.php139
-rw-r--r--engine/classes/ElggGroup.php388
-rw-r--r--engine/classes/ElggGroupItemVisibility.php93
-rw-r--r--engine/classes/ElggHMACCache.php99
-rw-r--r--engine/classes/ElggMemcache.php201
-rw-r--r--engine/classes/ElggMenuBuilder.php282
-rw-r--r--engine/classes/ElggMenuItem.php590
-rw-r--r--engine/classes/ElggMetadata.php154
-rw-r--r--engine/classes/ElggObject.php215
-rw-r--r--engine/classes/ElggPAM.php105
-rw-r--r--engine/classes/ElggPlugin.php1005
-rw-r--r--engine/classes/ElggPluginManifest.php656
-rw-r--r--engine/classes/ElggPluginManifestParser.php102
-rw-r--r--engine/classes/ElggPluginManifestParser17.php82
-rw-r--r--engine/classes/ElggPluginManifestParser18.php97
-rw-r--r--engine/classes/ElggPluginPackage.php636
-rw-r--r--engine/classes/ElggPriorityList.php358
-rw-r--r--engine/classes/ElggRelationship.php228
-rw-r--r--engine/classes/ElggRiverItem.php115
-rw-r--r--engine/classes/ElggSession.php153
-rw-r--r--engine/classes/ElggSharedMemoryCache.php40
-rw-r--r--engine/classes/ElggSite.php459
-rw-r--r--engine/classes/ElggStaticVariableCache.php96
-rw-r--r--engine/classes/ElggTranslit.php262
-rw-r--r--engine/classes/ElggUser.php585
-rw-r--r--engine/classes/ElggVolatileMetadataCache.php347
-rw-r--r--engine/classes/ElggWidget.php235
-rw-r--r--engine/classes/ElggXMLElement.php115
-rw-r--r--engine/classes/ErrorResult.php54
-rw-r--r--engine/classes/ExportException.php9
-rw-r--r--engine/classes/Exportable.php23
-rw-r--r--engine/classes/Friendable.php104
-rw-r--r--engine/classes/GenericResult.php125
-rw-r--r--engine/classes/IOException.php9
-rw-r--r--engine/classes/ImportException.php8
-rw-r--r--engine/classes/Importable.php19
-rw-r--r--engine/classes/IncompleteEntityException.php10
-rw-r--r--engine/classes/InstallationException.php9
-rw-r--r--engine/classes/InvalidClassException.php9
-rw-r--r--engine/classes/InvalidParameterException.php9
-rw-r--r--engine/classes/Locatable.php49
-rw-r--r--engine/classes/Loggable.php65
-rw-r--r--engine/classes/LoginException.php10
-rw-r--r--engine/classes/NotImplementedException.php10
-rw-r--r--engine/classes/Notable.php41
-rw-r--r--engine/classes/NotificationException.php8
-rw-r--r--engine/classes/ODD.php131
-rw-r--r--engine/classes/ODDDocument.php202
-rw-r--r--engine/classes/ODDEntity.php34
-rw-r--r--engine/classes/ODDMetaData.php39
-rw-r--r--engine/classes/ODDRelationship.php33
-rw-r--r--engine/classes/PluginException.php11
-rw-r--r--engine/classes/RegistrationException.php9
-rw-r--r--engine/classes/SecurityException.php10
-rw-r--r--engine/classes/SuccessResult.php34
-rw-r--r--engine/classes/XMLRPCArrayParameter.php56
-rw-r--r--engine/classes/XMLRPCBase64Parameter.php28
-rw-r--r--engine/classes/XMLRPCBoolParameter.php30
-rw-r--r--engine/classes/XMLRPCCall.php62
-rw-r--r--engine/classes/XMLRPCDateParameter.php33
-rw-r--r--engine/classes/XMLRPCDoubleParameter.php29
-rw-r--r--engine/classes/XMLRPCErrorResponse.php36
-rw-r--r--engine/classes/XMLRPCIntParameter.php29
-rw-r--r--engine/classes/XMLRPCParameter.php16
-rw-r--r--engine/classes/XMLRPCResponse.php71
-rw-r--r--engine/classes/XMLRPCStringParameter.php30
-rw-r--r--engine/classes/XMLRPCStructParameter.php55
-rw-r--r--engine/classes/XMLRPCSuccessResponse.php22
-rw-r--r--engine/classes/XmlElement.php20
-rw-r--r--engine/handlers/action_handler.php20
-rw-r--r--engine/handlers/cache_handler.php102
-rw-r--r--engine/handlers/export_handler.php118
-rw-r--r--engine/handlers/page_handler.php48
-rw-r--r--engine/handlers/service_handler.php27
-rw-r--r--engine/handlers/xml-rpc_handler.php44
-rw-r--r--engine/lib/access.php1067
-rw-r--r--engine/lib/actions.php490
-rw-r--r--engine/lib/admin.php648
-rw-r--r--engine/lib/annotations.php579
-rw-r--r--engine/lib/cache.php452
-rw-r--r--engine/lib/calendar.php571
-rw-r--r--engine/lib/configuration.php631
-rw-r--r--engine/lib/cron.php91
-rw-r--r--engine/lib/database.php757
-rw-r--r--engine/lib/deprecated-1.7.php1162
-rw-r--r--engine/lib/deprecated-1.8.php4774
-rw-r--r--engine/lib/deprecated-1.9.php582
-rw-r--r--engine/lib/elgglib.php2288
-rw-r--r--engine/lib/entities.php2526
-rw-r--r--engine/lib/export.php226
-rw-r--r--engine/lib/extender.php241
-rw-r--r--engine/lib/filestore.php522
-rw-r--r--engine/lib/group.php339
-rw-r--r--engine/lib/input.php513
-rw-r--r--engine/lib/languages.php350
-rw-r--r--engine/lib/location.php157
-rw-r--r--engine/lib/mb_wrapper.php233
-rw-r--r--engine/lib/memcache.php37
-rw-r--r--engine/lib/metadata.php962
-rw-r--r--engine/lib/metastrings.php904
-rw-r--r--engine/lib/navigation.php516
-rw-r--r--engine/lib/notification.php526
-rw-r--r--engine/lib/objects.php120
-rw-r--r--engine/lib/opendd.php105
-rw-r--r--engine/lib/output.php448
-rw-r--r--engine/lib/pagehandler.php150
-rw-r--r--engine/lib/pageowner.php294
-rw-r--r--engine/lib/pam.php76
-rw-r--r--engine/lib/plugins.php1129
-rw-r--r--engine/lib/private_settings.php414
-rw-r--r--engine/lib/relationships.php645
-rw-r--r--engine/lib/river.php700
-rw-r--r--engine/lib/sessions.php653
-rw-r--r--engine/lib/sites.php260
-rw-r--r--engine/lib/statistics.php121
-rw-r--r--engine/lib/system_log.php299
-rw-r--r--engine/lib/tags.php353
-rw-r--r--engine/lib/upgrade.php368
-rw-r--r--engine/lib/upgrades/2008100701.php7
-rw-r--r--engine/lib/upgrades/2008101303.php9
-rw-r--r--engine/lib/upgrades/2009022701.php7
-rw-r--r--engine/lib/upgrades/2009041701.php8
-rw-r--r--engine/lib/upgrades/2009070101.php9
-rw-r--r--engine/lib/upgrades/2009102801.php221
-rw-r--r--engine/lib/upgrades/2010010501.php8
-rw-r--r--engine/lib/upgrades/2010033101.php70
-rw-r--r--engine/lib/upgrades/2010040201.php41
-rw-r--r--engine/lib/upgrades/2010052601.php27
-rw-r--r--engine/lib/upgrades/2010060101.php16
-rw-r--r--engine/lib/upgrades/2010060401.php59
-rw-r--r--engine/lib/upgrades/2010061501.php73
-rw-r--r--engine/lib/upgrades/2010062301.php33
-rw-r--r--engine/lib/upgrades/2010062302.php33
-rw-r--r--engine/lib/upgrades/2010070301.php9
-rw-r--r--engine/lib/upgrades/2010071001.php57
-rw-r--r--engine/lib/upgrades/2010071002.php49
-rw-r--r--engine/lib/upgrades/2010111501.php33
-rw-r--r--engine/lib/upgrades/2010121601.php9
-rw-r--r--engine/lib/upgrades/2010121602.php10
-rw-r--r--engine/lib/upgrades/2010121701.php10
-rw-r--r--engine/lib/upgrades/2010123101.php9
-rw-r--r--engine/lib/upgrades/2011010101.php98
-rw-r--r--engine/lib/upgrades/2011021800-1.8_svn-goodbye_walled_garden-083121a656d06894.php34
-rw-r--r--engine/lib/upgrades/2011022000-1.8_svn-custom_profile_fields-390ac967b0bb5665.php59
-rw-r--r--engine/lib/upgrades/2011030700-1.8_svn-blog_status_metadata-4645225d7b440876.php24
-rw-r--r--engine/lib/upgrades/2011031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php54
-rw-r--r--engine/lib/upgrades/2011031600-1.8_svn-datalist_grows_up-0b8aec5a55cc1e1c.php18
-rw-r--r--engine/lib/upgrades/2011032000-1.8_svn-widgets_arent_plugins-61836261fa280a5c.php10
-rw-r--r--engine/lib/upgrades/2011032200-1.8_svn-admins_like_widgets-7f19d2783c1680d3.php13
-rw-r--r--engine/lib/upgrades/2011052801.php45
-rw-r--r--engine/lib/upgrades/2011061200-1.8b1-sites_need_a_site_guid-6d9dcbf46c0826cc.php31
-rw-r--r--engine/lib/upgrades/2011092500-1.8.0.1-forum_reply_river_view-5758ce8d86ac56ce.php12
-rw-r--r--engine/lib/upgrades/2011123100-1.8.2-fix_friend_river-b17e7ff8345c2269.php12
-rw-r--r--engine/lib/upgrades/2011123101-1.8.2-fix_blog_status-b14c2a0e7b9e7d55.php25
-rw-r--r--engine/lib/upgrades/2012012000-1.8.3-ip_in_syslog-87fe0f068cf62428.php12
-rw-r--r--engine/lib/upgrades/2012012100-1.8.3-system_cache-93100e7d55a24a11.php13
-rw-r--r--engine/lib/upgrades/2012041800-1.8.3-dont_filter_passwords-c0ca4a18b38ae2bc.php11
-rw-r--r--engine/lib/upgrades/2012041801-1.8.3-multiple_user_tokens-852225f7fd89f6c5.php13
-rw-r--r--engine/lib/upgrades/create_upgrade.php151
-rw-r--r--engine/lib/user_settings.php359
-rw-r--r--engine/lib/users.php1607
-rw-r--r--engine/lib/views.php1657
-rw-r--r--engine/lib/web_services.php1443
-rw-r--r--engine/lib/widgets.php419
-rw-r--r--engine/lib/xml-rpc.php203
-rw-r--r--engine/lib/xml.php111
-rw-r--r--engine/schema/mysql.sql454
-rw-r--r--engine/schema/upgrades/2008092301.sql100
-rw-r--r--engine/schema/upgrades/2008100601.sql14
-rw-r--r--engine/schema/upgrades/2008101601.sql11
-rw-r--r--engine/schema/upgrades/2008101701.sql7
-rw-r--r--engine/schema/upgrades/2008102101.sql9
-rw-r--r--engine/schema/upgrades/2008110301.sql17
-rw-r--r--engine/schema/upgrades/2008110601.sql3
-rw-r--r--engine/schema/upgrades/2008111901.sql8
-rw-r--r--engine/schema/upgrades/2008112001.sql24
-rw-r--r--engine/schema/upgrades/2008112002.sql29
-rw-r--r--engine/schema/upgrades/2008112501.sql10
-rw-r--r--engine/schema/upgrades/2008112601.sql27
-rw-r--r--engine/schema/upgrades/2008120501.sql9
-rw-r--r--engine/schema/upgrades/2009010801.sql5
-rw-r--r--engine/schema/upgrades/2009010901.sql3
-rw-r--r--engine/schema/upgrades/2009021201.sql19
-rw-r--r--engine/schema/upgrades/2009021301.sql2
-rw-r--r--engine/schema/upgrades/2009051401.sql5
-rw-r--r--engine/schema/upgrades/2009052201.sql5
-rw-r--r--engine/schema/upgrades/2009091901.sql3
-rw-r--r--engine/schema/upgrades/2009100701.sql2
-rw-r--r--engine/schema/upgrades/2010012901.sql1
-rw-r--r--engine/schema/upgrades/2010030101.sql1
-rw-r--r--engine/schema/upgrades/2010062401.sql1
-rw-r--r--engine/settings.example.php123
-rw-r--r--engine/start.php121
-rw-r--r--engine/tests/api/access_collections.php293
-rw-r--r--engine/tests/api/annotations.php70
-rw-r--r--engine/tests/api/entity_getter_functions.php2820
-rw-r--r--engine/tests/api/helpers.php604
-rw-r--r--engine/tests/api/metadata.php216
-rw-r--r--engine/tests/api/metadata_cache.php169
-rw-r--r--engine/tests/api/metastrings.php190
-rw-r--r--engine/tests/api/output.php74
-rw-r--r--engine/tests/api/plugins.php299
-rw-r--r--engine/tests/api/river.php21
-rw-r--r--engine/tests/elgg_unit_test.php29
-rw-r--r--engine/tests/objects/entities.php423
-rw-r--r--engine/tests/objects/filestore.php100
-rw-r--r--engine/tests/objects/objects.php306
-rw-r--r--engine/tests/objects/sites.php77
-rw-r--r--engine/tests/objects/users.php231
-rw-r--r--engine/tests/regression/trac_bugs.php237
-rw-r--r--engine/tests/services/api.php324
-rw-r--r--engine/tests/suite.php53
-rw-r--r--engine/tests/test_files/output/autop/block-a.exp.norun.html6
-rw-r--r--engine/tests/test_files/output/autop/block-a.in.norun.html9
-rw-r--r--engine/tests/test_files/output/autop/domdoc_exp.html46
-rw-r--r--engine/tests/test_files/output/autop/domdoc_in.html80
-rw-r--r--engine/tests/test_files/output/autop/typical-post.exp.html84
-rw-r--r--engine/tests/test_files/output/autop/typical-post.in.html89
-rw-r--r--engine/tests/test_files/output/autop/wp-welcome.exp.html22
-rw-r--r--engine/tests/test_files/output/autop/wp-welcome.in.html25
-rw-r--r--engine/tests/test_files/output/autop/wpautop-fails.exp.html31
-rw-r--r--engine/tests/test_files/output/autop/wpautop-fails.in.html41
-rw-r--r--engine/tests/test_files/output/autop/wysiwyg-test.exp.html51
-rw-r--r--engine/tests/test_files/output/autop/wysiwyg-test.in.html79
-rw-r--r--engine/tests/test_files/plugin_17/manifest.xml10
-rw-r--r--engine/tests/test_files/plugin_17/start.php (renamed from vendors/dokuwiki/data/index/_dummy)0
-rw-r--r--engine/tests/test_files/plugin_18/manifest.xml108
-rw-r--r--engine/tests/test_files/plugin_18/start.php (renamed from vendors/dokuwiki/data/locks/_dummy)0
-rw-r--r--engine/tests/test_skeleton.php55
-rw-r--r--htaccess_dist135
-rw-r--r--index.php43
-rw-r--r--install.php20
-rw-r--r--install/ElggInstaller.php1565
-rw-r--r--install/ElggRewriteTester.php199
-rw-r--r--install/cli/sample_installer.php65
-rw-r--r--install/css/install.css295
-rw-r--r--install/js/install.js42
-rw-r--r--install/languages/en.php160
-rw-r--r--js/classes/ElggEntity.js20
-rw-r--r--js/classes/ElggPriorityList.js92
-rw-r--r--js/classes/ElggUser.js28
-rw-r--r--js/lib/ajax.js242
-rw-r--r--js/lib/configuration.js10
-rw-r--r--js/lib/elgglib.js563
-rw-r--r--js/lib/hooks.js173
-rw-r--r--js/lib/languages.js98
-rw-r--r--js/lib/pageowner.js18
-rw-r--r--js/lib/prototypes.js66
-rw-r--r--js/lib/security.js120
-rw-r--r--js/lib/session.js125
-rw-r--r--js/lib/ui.autocomplete.js14
-rw-r--r--js/lib/ui.avatar_cropper.js76
-rw-r--r--js/lib/ui.friends_picker.js91
-rw-r--r--js/lib/ui.js293
-rw-r--r--js/lib/ui.river.js14
-rw-r--r--js/lib/ui.userpicker.js117
-rw-r--r--js/lib/ui.widgets.js209
-rw-r--r--js/tests/ElggAjaxOptionsTest.js61
-rw-r--r--js/tests/ElggAjaxTest.js59
-rw-r--r--js/tests/ElggHooksTest.js28
-rw-r--r--js/tests/ElggLanguagesTest.js45
-rw-r--r--js/tests/ElggLibTest.js129
-rw-r--r--js/tests/ElggPriorityListTest.js47
-rw-r--r--js/tests/ElggSecurityTest.js75
-rw-r--r--js/tests/ElggSessionTest.js36
-rw-r--r--js/tests/README24
-rw-r--r--js/tests/jsTestDriver.conf10
-rw-r--r--[-rwxr-xr-x]languages/en.php1397
-rw-r--r--mod/blog/actions/blog/auto_save_revision.php89
-rw-r--r--mod/blog/actions/blog/delete.php27
-rw-r--r--mod/blog/actions/blog/save.php177
-rw-r--r--mod/blog/activate.php10
-rw-r--r--mod/blog/classes/ElggBlog.php42
-rw-r--r--mod/blog/deactivate.php6
-rw-r--r--mod/blog/languages/en.php78
-rw-r--r--mod/blog/lib/blog.php474
-rw-r--r--mod/blog/manifest.xml19
-rw-r--r--mod/blog/start.php282
-rw-r--r--mod/blog/views/default/blog/css.php14
-rw-r--r--mod/blog/views/default/blog/group_module.php46
-rw-r--r--mod/blog/views/default/blog/sidebar.php30
-rw-r--r--mod/blog/views/default/blog/sidebar/archives.php34
-rw-r--r--mod/blog/views/default/blog/sidebar/revisions.php79
-rw-r--r--mod/blog/views/default/forms/blog/save.php166
-rw-r--r--mod/blog/views/default/js/blog/save_draft.php67
-rw-r--r--mod/blog/views/default/object/blog.php99
-rw-r--r--mod/blog/views/default/river/object/blog/create.php13
-rw-r--r--mod/blog/views/default/widgets/blog/content.php30
-rw-r--r--mod/blog/views/default/widgets/blog/edit.php22
-rw-r--r--mod/bookmarks/actions/bookmarks/delete.php24
-rw-r--r--mod/bookmarks/actions/bookmarks/save.php90
-rw-r--r--mod/bookmarks/graphics/bookmark.gifbin0 -> 576 bytes
-rw-r--r--mod/bookmarks/graphics/bookmarklet.gifbin0 -> 790 bytes
-rw-r--r--mod/bookmarks/languages/en.php91
-rw-r--r--mod/bookmarks/lib/bookmarks.php46
-rw-r--r--mod/bookmarks/manifest.xml19
-rw-r--r--mod/bookmarks/pages/bookmarks/add.php22
-rw-r--r--mod/bookmarks/pages/bookmarks/all.php34
-rw-r--r--mod/bookmarks/pages/bookmarks/bookmarklet.php36
-rw-r--r--mod/bookmarks/pages/bookmarks/edit.php30
-rw-r--r--mod/bookmarks/pages/bookmarks/friends.php33
-rw-r--r--mod/bookmarks/pages/bookmarks/owner.php51
-rw-r--r--mod/bookmarks/pages/bookmarks/view.php38
-rw-r--r--mod/bookmarks/start.php297
-rw-r--r--mod/bookmarks/views/default/bookmarks/bookmarklet.php35
-rw-r--r--mod/bookmarks/views/default/bookmarks/css.php3
-rw-r--r--mod/bookmarks/views/default/bookmarks/group_module.php47
-rw-r--r--mod/bookmarks/views/default/bookmarks/js.php12
-rw-r--r--mod/bookmarks/views/default/bookmarks/sidebar.php14
-rw-r--r--mod/bookmarks/views/default/forms/bookmarks/save.php59
-rw-r--r--mod/bookmarks/views/default/object/bookmarks.php127
-rw-r--r--mod/bookmarks/views/default/river/object/bookmarks/create.php15
-rw-r--r--mod/bookmarks/views/default/widgets/bookmarks/content.php32
-rw-r--r--mod/bookmarks/views/default/widgets/bookmarks/edit.php24
-rw-r--r--mod/bookmarks/views/rss/object/bookmarks.php37
-rw-r--r--mod/categories/activate.php11
-rw-r--r--mod/categories/deactivate.php6
-rw-r--r--mod/categories/languages/en.php15
-rw-r--r--mod/categories/manifest.xml17
-rw-r--r--mod/categories/pages/categories/listing.php39
-rw-r--r--mod/categories/readme.txt25
-rw-r--r--mod/categories/start.php83
-rw-r--r--mod/categories/views/default/categories.php12
-rw-r--r--mod/categories/views/default/categories/css.php12
-rw-r--r--mod/categories/views/default/categories/view.php8
-rw-r--r--mod/categories/views/default/input/categories.php56
-rw-r--r--mod/categories/views/default/output/categories.php29
-rw-r--r--mod/categories/views/default/plugins/categories/settings.php22
-rw-r--r--mod/custom_index/index.php68
-rw-r--r--mod/custom_index/languages/en.php14
-rw-r--r--mod/custom_index/manifest.xml15
-rw-r--r--mod/custom_index/start.php30
-rw-r--r--mod/custom_index/views/default/custom_index/css.php23
-rw-r--r--mod/custom_index/views/default/page/layouts/custom_index.php68
-rw-r--r--mod/dashboard/languages/en.php14
-rw-r--r--mod/dashboard/manifest.xml15
-rw-r--r--mod/dashboard/start.php83
-rw-r--r--mod/dashboard/views/default/dashboard/blurb.php17
-rw-r--r--mod/dashboard/views/default/dashboard/css.php10
-rw-r--r--mod/dashboard/views/default/widgets/group_activity/content.php36
-rw-r--r--mod/dashboard/views/default/widgets/group_activity/edit.php45
-rw-r--r--mod/developers/actions/developers/inspect.php16
-rw-r--r--mod/developers/actions/developers/settings.php35
-rw-r--r--mod/developers/classes/ElggInspector.php201
-rw-r--r--mod/developers/classes/ElggLogCache.php44
-rw-r--r--mod/developers/languages/en.php68
-rw-r--r--mod/developers/manifest.xml19
-rw-r--r--mod/developers/start.php200
-rw-r--r--mod/developers/vendors/jsTree/jquery.jstree.js4544
-rw-r--r--mod/developers/vendors/jsTree/themes/apple/bg.jpgbin0 -> 331 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/apple/d.pngbin0 -> 7765 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/apple/dot_for_ie.gifbin0 -> 43 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/apple/style.css61
-rw-r--r--mod/developers/vendors/jsTree/themes/apple/throbber.gifbin0 -> 1849 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/classic/d.gifbin0 -> 3003 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/classic/d.pngbin0 -> 7535 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/classic/dot_for_ie.gifbin0 -> 43 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/classic/style.css77
-rw-r--r--mod/developers/vendors/jsTree/themes/classic/throbber.gifbin0 -> 1849 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/default-rtl/d.gifbin0 -> 2872 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/default-rtl/d.pngbin0 -> 7459 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/default-rtl/dots.gifbin0 -> 132 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/default-rtl/style.css84
-rw-r--r--mod/developers/vendors/jsTree/themes/default-rtl/throbber.gifbin0 -> 1849 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/default/d.gifbin0 -> 2944 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/default/d.pngbin0 -> 7635 bytes
-rw-r--r--mod/developers/vendors/jsTree/themes/default/style.css74
-rw-r--r--mod/developers/vendors/jsTree/themes/default/throbber.gifbin0 -> 1849 bytes
-rw-r--r--mod/developers/views/default/admin/develop_tools/inspect.php14
-rw-r--r--mod/developers/views/default/admin/develop_tools/preview.php8
-rw-r--r--mod/developers/views/default/admin/develop_tools/unit_tests.php17
-rw-r--r--mod/developers/views/default/admin/developers/settings.php63
-rw-r--r--mod/developers/views/default/developers/css.php27
-rw-r--r--mod/developers/views/default/developers/ipsum.php7
-rw-r--r--mod/developers/views/default/developers/log.php18
-rw-r--r--mod/developers/views/default/developers/tree.php18
-rw-r--r--mod/developers/views/default/forms/developers/inspect.php23
-rw-r--r--mod/developers/views/default/forms/developers/settings.php36
-rw-r--r--mod/developers/views/default/js/developers/developers.php44
-rw-r--r--mod/developers/views/default/page/theme_preview.php43
-rw-r--r--mod/developers/views/default/theme_preview/buttons.php41
-rw-r--r--mod/developers/views/default/theme_preview/components.php25
-rw-r--r--mod/developers/views/default/theme_preview/components/image_block.php6
-rw-r--r--mod/developers/views/default/theme_preview/components/list.php19
-rw-r--r--mod/developers/views/default/theme_preview/components/messages.php5
-rw-r--r--mod/developers/views/default/theme_preview/components/table.php12
-rw-r--r--mod/developers/views/default/theme_preview/components/tagcloud.php17
-rw-r--r--mod/developers/views/default/theme_preview/components/tags.php5
-rw-r--r--mod/developers/views/default/theme_preview/forms.php138
-rw-r--r--mod/developers/views/default/theme_preview/general.php46
-rw-r--r--mod/developers/views/default/theme_preview/grid.php114
-rw-r--r--mod/developers/views/default/theme_preview/icons.php10
-rw-r--r--mod/developers/views/default/theme_preview/icons/avatars.php36
-rw-r--r--mod/developers/views/default/theme_preview/icons/loader.php1
-rw-r--r--mod/developers/views/default/theme_preview/icons/sprites.php61
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous.php22
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/lightbox.php19
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/popup.php15
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/site_menu.php15
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/system_messages.php35
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/toggle.php15
-rw-r--r--mod/developers/views/default/theme_preview/miscellaneous/user_hover_menu.php16
-rw-r--r--mod/developers/views/default/theme_preview/modules.php6
-rw-r--r--mod/developers/views/default/theme_preview/modules/modules.php23
-rw-r--r--mod/developers/views/default/theme_preview/modules/widgets.php64
-rw-r--r--mod/developers/views/default/theme_preview/navigation.php23
-rw-r--r--mod/developers/views/default/theme_preview/navigation/breadcrumbs.php10
-rw-r--r--mod/developers/views/default/theme_preview/navigation/default.php11
-rw-r--r--mod/developers/views/default/theme_preview/navigation/entity.php12
-rw-r--r--mod/developers/views/default/theme_preview/navigation/extras.php18
-rw-r--r--mod/developers/views/default/theme_preview/navigation/filter.php13
-rw-r--r--mod/developers/views/default/theme_preview/navigation/footer.php10
-rw-r--r--mod/developers/views/default/theme_preview/navigation/horizontal.php12
-rw-r--r--mod/developers/views/default/theme_preview/navigation/owner_block.php13
-rw-r--r--mod/developers/views/default/theme_preview/navigation/page.php20
-rw-r--r--mod/developers/views/default/theme_preview/navigation/pagination.php8
-rw-r--r--mod/developers/views/default/theme_preview/navigation/site.php18
-rw-r--r--mod/developers/views/default/theme_preview/navigation/tabs.php10
-rw-r--r--mod/developers/views/default/theme_preview/typography.php12
-rw-r--r--mod/developers/views/default/theme_preview/typography/fonts.php7
-rw-r--r--mod/developers/views/default/theme_preview/typography/headings.php6
-rw-r--r--mod/developers/views/default/theme_preview/typography/misc.php16
-rw-r--r--mod/developers/views/default/theme_preview/typography/paragraph.php19
-rw-r--r--mod/diagnostics/actions/download.php18
-rw-r--r--mod/diagnostics/languages/en.php45
-rw-r--r--mod/diagnostics/manifest.xml17
-rw-r--r--mod/diagnostics/start.php140
-rw-r--r--mod/diagnostics/views/default/admin/administer_utilities/diagnostics.php17
-rw-r--r--mod/dokuwiki/AUTHORS (renamed from AUTHORS)0
-rwxr-xr-xmod/dokuwiki/COPYING (renamed from COPYING)0
-rw-r--r--mod/dokuwiki/README (renamed from README)0
-rw-r--r--mod/dokuwiki/index.php17
-rw-r--r--mod/dokuwiki/languages/ca.php (renamed from languages/ca.php)0
-rwxr-xr-xmod/dokuwiki/languages/de.php (renamed from languages/de.php)0
-rwxr-xr-xmod/dokuwiki/languages/en.php32
-rw-r--r--mod/dokuwiki/languages/es.php (renamed from languages/es.php)0
-rw-r--r--mod/dokuwiki/languages/fr.php (renamed from languages/fr.php)0
-rw-r--r--mod/dokuwiki/languages/gl.php (renamed from languages/gl.php)0
-rwxr-xr-xmod/dokuwiki/languages/pl.php (renamed from languages/pl.php)0
-rw-r--r--mod/dokuwiki/languages/pt.php (renamed from languages/pt.php)0
-rw-r--r--mod/dokuwiki/lib/dokuwiki.php (renamed from lib/dokuwiki.php)0
-rw-r--r--mod/dokuwiki/manifest.xml (renamed from manifest.xml)0
-rw-r--r--mod/dokuwiki/start.php (renamed from start.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/COPYING (renamed from vendors/dokuwiki/COPYING)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/README (renamed from vendors/dokuwiki/README)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/VERSION (renamed from vendors/dokuwiki/VERSION)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/dwpage.php (renamed from vendors/dokuwiki/bin/dwpage.php)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/indexer.php (renamed from vendors/dokuwiki/bin/indexer.php)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php (renamed from vendors/dokuwiki/bin/wantedpages.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php (renamed from vendors/dokuwiki/conf/acl.auth.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist (renamed from vendors/dokuwiki/conf/acl.auth.php.dist)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf (renamed from vendors/dokuwiki/conf/acronyms.conf)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php (renamed from vendors/dokuwiki/conf/dokuwiki.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/entities.conf (renamed from vendors/dokuwiki/conf/entities.conf)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf (renamed from vendors/dokuwiki/conf/interwiki.conf)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/license.php (renamed from vendors/dokuwiki/conf/license.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/local.php (renamed from vendors/dokuwiki/conf/local.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist (renamed from vendors/dokuwiki/conf/local.php.dist)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php (renamed from vendors/dokuwiki/conf/mediameta.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mime.conf (renamed from vendors/dokuwiki/conf/mime.conf)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/msg (renamed from vendors/dokuwiki/conf/msg)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example (renamed from vendors/dokuwiki/conf/mysql.conf.php.example)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf (renamed from vendors/dokuwiki/conf/scheme.conf)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf (renamed from vendors/dokuwiki/conf/smileys.conf)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php (renamed from vendors/dokuwiki/conf/users.auth.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist (renamed from vendors/dokuwiki/conf/users.auth.php.dist)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf (renamed from vendors/dokuwiki/conf/wordblock.conf)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist (renamed from vendors/dokuwiki/conf/words.aspell.dist)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/_dummy (renamed from vendors/dokuwiki/data/_dummy)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy (renamed from vendors/dokuwiki/data/meta/_dummy)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy (renamed from vendors/dokuwiki/data/tmp/_dummy)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/index/_dummy (renamed from vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/locks/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/media/wiki/dokuwiki-128.png (renamed from vendors/dokuwiki/data/media/wiki/dokuwiki-128.png)bin33615 -> 33615 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/meta/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt (renamed from vendors/dokuwiki/data/pages/playground/playground.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt (renamed from vendors/dokuwiki/data/pages/sidebar.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt (renamed from vendors/dokuwiki/data/pages/wiki/dokuwiki.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt (renamed from vendors/dokuwiki/data/pages/wiki/syntax.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/data/tmp/_dummy0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/doku.php (renamed from vendors/dokuwiki/doku.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/feed.php (renamed from vendors/dokuwiki/feed.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php (renamed from vendors/dokuwiki/inc/DifferenceEngine.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php (renamed from vendors/dokuwiki/inc/EmailAddressValidator.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php (renamed from vendors/dokuwiki/inc/FeedParser.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php (renamed from vendors/dokuwiki/inc/HTTPClient.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php (renamed from vendors/dokuwiki/inc/IXR_Library.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/JSON.php (renamed from vendors/dokuwiki/inc/JSON.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php (renamed from vendors/dokuwiki/inc/JpegMeta.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php (renamed from vendors/dokuwiki/inc/SimplePie.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php (renamed from vendors/dokuwiki/inc/TarLib.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php (renamed from vendors/dokuwiki/inc/ZipLib.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/actions.php (renamed from vendors/dokuwiki/inc/actions.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php (renamed from vendors/dokuwiki/inc/adLDAP.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth.php (renamed from vendors/dokuwiki/inc/auth.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php (renamed from vendors/dokuwiki/inc/auth/ad.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php (renamed from vendors/dokuwiki/inc/auth/basic.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php (renamed from vendors/dokuwiki/inc/auth/elgg.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php (renamed from vendors/dokuwiki/inc/auth/ldap.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php (renamed from vendors/dokuwiki/inc/auth/mysql.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php (renamed from vendors/dokuwiki/inc/auth/pgsql.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php (renamed from vendors/dokuwiki/inc/auth/plain.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php (renamed from vendors/dokuwiki/inc/blowfish.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/cache.php (renamed from vendors/dokuwiki/inc/cache.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/changelog.php (renamed from vendors/dokuwiki/inc/changelog.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php (renamed from vendors/dokuwiki/inc/cliopts.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/common.php (renamed from vendors/dokuwiki/inc/common.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/confutils.php (renamed from vendors/dokuwiki/inc/confutils.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/events.php (renamed from vendors/dokuwiki/inc/events.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php (renamed from vendors/dokuwiki/inc/feedcreator.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/form.php (renamed from vendors/dokuwiki/inc/form.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php (renamed from vendors/dokuwiki/inc/fulltext.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi.php (renamed from vendors/dokuwiki/inc/geshi.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php (renamed from vendors/dokuwiki/inc/geshi/abap.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php (renamed from vendors/dokuwiki/inc/geshi/actionscript-french.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php (renamed from vendors/dokuwiki/inc/geshi/actionscript.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php (renamed from vendors/dokuwiki/inc/geshi/actionscript3.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php (renamed from vendors/dokuwiki/inc/geshi/ada.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php (renamed from vendors/dokuwiki/inc/geshi/apache.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php (renamed from vendors/dokuwiki/inc/geshi/applescript.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php (renamed from vendors/dokuwiki/inc/geshi/apt_sources.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php (renamed from vendors/dokuwiki/inc/geshi/asm.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php (renamed from vendors/dokuwiki/inc/geshi/asp.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php (renamed from vendors/dokuwiki/inc/geshi/autoit.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php (renamed from vendors/dokuwiki/inc/geshi/avisynth.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php (renamed from vendors/dokuwiki/inc/geshi/bash.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php (renamed from vendors/dokuwiki/inc/geshi/basic4gl.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php (renamed from vendors/dokuwiki/inc/geshi/bf.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php (renamed from vendors/dokuwiki/inc/geshi/blitzbasic.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php (renamed from vendors/dokuwiki/inc/geshi/bnf.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php (renamed from vendors/dokuwiki/inc/geshi/boo.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php (renamed from vendors/dokuwiki/inc/geshi/c.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php (renamed from vendors/dokuwiki/inc/geshi/c_mac.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php (renamed from vendors/dokuwiki/inc/geshi/caddcl.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php (renamed from vendors/dokuwiki/inc/geshi/cadlisp.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php (renamed from vendors/dokuwiki/inc/geshi/cfdg.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php (renamed from vendors/dokuwiki/inc/geshi/cfm.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php (renamed from vendors/dokuwiki/inc/geshi/cil.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php (renamed from vendors/dokuwiki/inc/geshi/cobol.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php (renamed from vendors/dokuwiki/inc/geshi/cpp-qt.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php (renamed from vendors/dokuwiki/inc/geshi/cpp.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php (renamed from vendors/dokuwiki/inc/geshi/csharp.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php (renamed from vendors/dokuwiki/inc/geshi/css.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php (renamed from vendors/dokuwiki/inc/geshi/d.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php (renamed from vendors/dokuwiki/inc/geshi/dcs.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php (renamed from vendors/dokuwiki/inc/geshi/delphi.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php (renamed from vendors/dokuwiki/inc/geshi/diff.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php (renamed from vendors/dokuwiki/inc/geshi/div.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php (renamed from vendors/dokuwiki/inc/geshi/dos.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php (renamed from vendors/dokuwiki/inc/geshi/dot.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php (renamed from vendors/dokuwiki/inc/geshi/eiffel.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php (renamed from vendors/dokuwiki/inc/geshi/email.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php (renamed from vendors/dokuwiki/inc/geshi/fortran.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php (renamed from vendors/dokuwiki/inc/geshi/freebasic.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php (renamed from vendors/dokuwiki/inc/geshi/genero.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php (renamed from vendors/dokuwiki/inc/geshi/gettext.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php (renamed from vendors/dokuwiki/inc/geshi/glsl.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php (renamed from vendors/dokuwiki/inc/geshi/gml.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php (renamed from vendors/dokuwiki/inc/geshi/gnuplot.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php (renamed from vendors/dokuwiki/inc/geshi/groovy.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php (renamed from vendors/dokuwiki/inc/geshi/haskell.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php (renamed from vendors/dokuwiki/inc/geshi/hq9plus.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php (renamed from vendors/dokuwiki/inc/geshi/html4strict.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php (renamed from vendors/dokuwiki/inc/geshi/idl.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php (renamed from vendors/dokuwiki/inc/geshi/ini.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php (renamed from vendors/dokuwiki/inc/geshi/inno.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php (renamed from vendors/dokuwiki/inc/geshi/intercal.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php (renamed from vendors/dokuwiki/inc/geshi/io.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php (renamed from vendors/dokuwiki/inc/geshi/java.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php (renamed from vendors/dokuwiki/inc/geshi/java5.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php (renamed from vendors/dokuwiki/inc/geshi/javascript.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php (renamed from vendors/dokuwiki/inc/geshi/kixtart.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php (renamed from vendors/dokuwiki/inc/geshi/klonec.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php (renamed from vendors/dokuwiki/inc/geshi/klonecpp.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php (renamed from vendors/dokuwiki/inc/geshi/latex.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php (renamed from vendors/dokuwiki/inc/geshi/lisp.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php (renamed from vendors/dokuwiki/inc/geshi/locobasic.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php (renamed from vendors/dokuwiki/inc/geshi/lolcode.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php (renamed from vendors/dokuwiki/inc/geshi/lotusformulas.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php (renamed from vendors/dokuwiki/inc/geshi/lotusscript.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php (renamed from vendors/dokuwiki/inc/geshi/lscript.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php (renamed from vendors/dokuwiki/inc/geshi/lsl2.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php (renamed from vendors/dokuwiki/inc/geshi/lua.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php (renamed from vendors/dokuwiki/inc/geshi/m68k.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php (renamed from vendors/dokuwiki/inc/geshi/make.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php (renamed from vendors/dokuwiki/inc/geshi/matlab.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php (renamed from vendors/dokuwiki/inc/geshi/mirc.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php (renamed from vendors/dokuwiki/inc/geshi/modula3.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php (renamed from vendors/dokuwiki/inc/geshi/mpasm.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php (renamed from vendors/dokuwiki/inc/geshi/mxml.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php (renamed from vendors/dokuwiki/inc/geshi/mysql.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php (renamed from vendors/dokuwiki/inc/geshi/nsis.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php (renamed from vendors/dokuwiki/inc/geshi/oberon2.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php (renamed from vendors/dokuwiki/inc/geshi/objc.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php (renamed from vendors/dokuwiki/inc/geshi/ocaml-brief.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php (renamed from vendors/dokuwiki/inc/geshi/ocaml.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php (renamed from vendors/dokuwiki/inc/geshi/oobas.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php (renamed from vendors/dokuwiki/inc/geshi/oracle11.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php (renamed from vendors/dokuwiki/inc/geshi/oracle8.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php (renamed from vendors/dokuwiki/inc/geshi/pascal.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php (renamed from vendors/dokuwiki/inc/geshi/per.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php (renamed from vendors/dokuwiki/inc/geshi/perl.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php (renamed from vendors/dokuwiki/inc/geshi/php-brief.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php (renamed from vendors/dokuwiki/inc/geshi/php.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php (renamed from vendors/dokuwiki/inc/geshi/pic16.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php (renamed from vendors/dokuwiki/inc/geshi/pixelbender.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php (renamed from vendors/dokuwiki/inc/geshi/plsql.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php (renamed from vendors/dokuwiki/inc/geshi/povray.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php (renamed from vendors/dokuwiki/inc/geshi/powershell.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php (renamed from vendors/dokuwiki/inc/geshi/progress.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php (renamed from vendors/dokuwiki/inc/geshi/prolog.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php (renamed from vendors/dokuwiki/inc/geshi/providex.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php (renamed from vendors/dokuwiki/inc/geshi/python.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php (renamed from vendors/dokuwiki/inc/geshi/qbasic.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php (renamed from vendors/dokuwiki/inc/geshi/rails.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php (renamed from vendors/dokuwiki/inc/geshi/rebol.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php (renamed from vendors/dokuwiki/inc/geshi/reg.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php (renamed from vendors/dokuwiki/inc/geshi/robots.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php (renamed from vendors/dokuwiki/inc/geshi/ruby.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php (renamed from vendors/dokuwiki/inc/geshi/sas.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php (renamed from vendors/dokuwiki/inc/geshi/scala.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php (renamed from vendors/dokuwiki/inc/geshi/scheme.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php (renamed from vendors/dokuwiki/inc/geshi/scilab.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php (renamed from vendors/dokuwiki/inc/geshi/sdlbasic.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php (renamed from vendors/dokuwiki/inc/geshi/smalltalk.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php (renamed from vendors/dokuwiki/inc/geshi/smarty.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php (renamed from vendors/dokuwiki/inc/geshi/sql.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php (renamed from vendors/dokuwiki/inc/geshi/tcl.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php (renamed from vendors/dokuwiki/inc/geshi/teraterm.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php (renamed from vendors/dokuwiki/inc/geshi/text.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php (renamed from vendors/dokuwiki/inc/geshi/thinbasic.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php (renamed from vendors/dokuwiki/inc/geshi/tsql.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php (renamed from vendors/dokuwiki/inc/geshi/typoscript.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php (renamed from vendors/dokuwiki/inc/geshi/vb.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php (renamed from vendors/dokuwiki/inc/geshi/vbnet.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php (renamed from vendors/dokuwiki/inc/geshi/verilog.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php (renamed from vendors/dokuwiki/inc/geshi/vhdl.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php (renamed from vendors/dokuwiki/inc/geshi/vim.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php (renamed from vendors/dokuwiki/inc/geshi/visualfoxpro.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php (renamed from vendors/dokuwiki/inc/geshi/visualprolog.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php (renamed from vendors/dokuwiki/inc/geshi/whitespace.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php (renamed from vendors/dokuwiki/inc/geshi/winbatch.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php (renamed from vendors/dokuwiki/inc/geshi/xml.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php (renamed from vendors/dokuwiki/inc/geshi/xorg_conf.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php (renamed from vendors/dokuwiki/inc/geshi/xpp.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php (renamed from vendors/dokuwiki/inc/geshi/z80.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/html.php (renamed from vendors/dokuwiki/inc/html.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/httputils.php (renamed from vendors/dokuwiki/inc/httputils.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/indexer.php (renamed from vendors/dokuwiki/inc/indexer.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php (renamed from vendors/dokuwiki/inc/infoutils.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/init.php (renamed from vendors/dokuwiki/inc/init.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/io.php (renamed from vendors/dokuwiki/inc/io.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php (renamed from vendors/dokuwiki/inc/lang/af/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt (renamed from vendors/dokuwiki/inc/lang/ar/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/ar/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt (renamed from vendors/dokuwiki/inc/lang/ar/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt (renamed from vendors/dokuwiki/inc/lang/ar/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt (renamed from vendors/dokuwiki/inc/lang/ar/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt (renamed from vendors/dokuwiki/inc/lang/ar/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt (renamed from vendors/dokuwiki/inc/lang/ar/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt (renamed from vendors/dokuwiki/inc/lang/ar/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt (renamed from vendors/dokuwiki/inc/lang/ar/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php (renamed from vendors/dokuwiki/inc/lang/ar/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt (renamed from vendors/dokuwiki/inc/lang/ar/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt (renamed from vendors/dokuwiki/inc/lang/ar/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/ar/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt (renamed from vendors/dokuwiki/inc/lang/ar/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt (renamed from vendors/dokuwiki/inc/lang/ar/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt (renamed from vendors/dokuwiki/inc/lang/ar/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/ar/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt (renamed from vendors/dokuwiki/inc/lang/ar/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt (renamed from vendors/dokuwiki/inc/lang/ar/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt (renamed from vendors/dokuwiki/inc/lang/ar/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/ar/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt (renamed from vendors/dokuwiki/inc/lang/ar/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/ar/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt (renamed from vendors/dokuwiki/inc/lang/ar/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/ar/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/ar/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/ar/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt (renamed from vendors/dokuwiki/inc/lang/bg/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/bg/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/bg/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt (renamed from vendors/dokuwiki/inc/lang/bg/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt (renamed from vendors/dokuwiki/inc/lang/bg/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt (renamed from vendors/dokuwiki/inc/lang/bg/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt (renamed from vendors/dokuwiki/inc/lang/bg/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt (renamed from vendors/dokuwiki/inc/lang/bg/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt (renamed from vendors/dokuwiki/inc/lang/bg/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt (renamed from vendors/dokuwiki/inc/lang/bg/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html (renamed from vendors/dokuwiki/inc/lang/bg/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php (renamed from vendors/dokuwiki/inc/lang/bg/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt (renamed from vendors/dokuwiki/inc/lang/bg/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt (renamed from vendors/dokuwiki/inc/lang/bg/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/bg/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt (renamed from vendors/dokuwiki/inc/lang/bg/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt (renamed from vendors/dokuwiki/inc/lang/bg/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt (renamed from vendors/dokuwiki/inc/lang/bg/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/bg/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt (renamed from vendors/dokuwiki/inc/lang/bg/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt (renamed from vendors/dokuwiki/inc/lang/bg/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt (renamed from vendors/dokuwiki/inc/lang/bg/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt (renamed from vendors/dokuwiki/inc/lang/bg/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/bg/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt (renamed from vendors/dokuwiki/inc/lang/bg/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/bg/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt (renamed from vendors/dokuwiki/inc/lang/bg/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/bg/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/bg/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/bg/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/bg/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/bg/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html (renamed from vendors/dokuwiki/inc/lang/ca-valencia/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php (renamed from vendors/dokuwiki/inc/lang/ca-valencia/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt (renamed from vendors/dokuwiki/inc/lang/ca/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/ca/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/ca/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt (renamed from vendors/dokuwiki/inc/lang/ca/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt (renamed from vendors/dokuwiki/inc/lang/ca/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt (renamed from vendors/dokuwiki/inc/lang/ca/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt (renamed from vendors/dokuwiki/inc/lang/ca/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt (renamed from vendors/dokuwiki/inc/lang/ca/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt (renamed from vendors/dokuwiki/inc/lang/ca/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt (renamed from vendors/dokuwiki/inc/lang/ca/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html (renamed from vendors/dokuwiki/inc/lang/ca/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php (renamed from vendors/dokuwiki/inc/lang/ca/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt (renamed from vendors/dokuwiki/inc/lang/ca/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt (renamed from vendors/dokuwiki/inc/lang/ca/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/ca/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt (renamed from vendors/dokuwiki/inc/lang/ca/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt (renamed from vendors/dokuwiki/inc/lang/ca/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt (renamed from vendors/dokuwiki/inc/lang/ca/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/ca/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt (renamed from vendors/dokuwiki/inc/lang/ca/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt (renamed from vendors/dokuwiki/inc/lang/ca/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt (renamed from vendors/dokuwiki/inc/lang/ca/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt (renamed from vendors/dokuwiki/inc/lang/ca/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/ca/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt (renamed from vendors/dokuwiki/inc/lang/ca/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/ca/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt (renamed from vendors/dokuwiki/inc/lang/ca/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/ca/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/ca/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/ca/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/ca/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/ca/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt (renamed from vendors/dokuwiki/inc/lang/cs/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/cs/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/cs/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt (renamed from vendors/dokuwiki/inc/lang/cs/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt (renamed from vendors/dokuwiki/inc/lang/cs/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt (renamed from vendors/dokuwiki/inc/lang/cs/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt (renamed from vendors/dokuwiki/inc/lang/cs/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt (renamed from vendors/dokuwiki/inc/lang/cs/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt (renamed from vendors/dokuwiki/inc/lang/cs/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt (renamed from vendors/dokuwiki/inc/lang/cs/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html (renamed from vendors/dokuwiki/inc/lang/cs/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php (renamed from vendors/dokuwiki/inc/lang/cs/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt (renamed from vendors/dokuwiki/inc/lang/cs/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt (renamed from vendors/dokuwiki/inc/lang/cs/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/cs/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt (renamed from vendors/dokuwiki/inc/lang/cs/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt (renamed from vendors/dokuwiki/inc/lang/cs/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt (renamed from vendors/dokuwiki/inc/lang/cs/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/cs/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt (renamed from vendors/dokuwiki/inc/lang/cs/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt (renamed from vendors/dokuwiki/inc/lang/cs/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt (renamed from vendors/dokuwiki/inc/lang/cs/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt (renamed from vendors/dokuwiki/inc/lang/cs/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/cs/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt (renamed from vendors/dokuwiki/inc/lang/cs/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/cs/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt (renamed from vendors/dokuwiki/inc/lang/cs/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/cs/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/cs/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/cs/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/cs/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/cs/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt (renamed from vendors/dokuwiki/inc/lang/da/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/da/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/da/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt (renamed from vendors/dokuwiki/inc/lang/da/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt (renamed from vendors/dokuwiki/inc/lang/da/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt (renamed from vendors/dokuwiki/inc/lang/da/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt (renamed from vendors/dokuwiki/inc/lang/da/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt (renamed from vendors/dokuwiki/inc/lang/da/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt (renamed from vendors/dokuwiki/inc/lang/da/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt (renamed from vendors/dokuwiki/inc/lang/da/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html (renamed from vendors/dokuwiki/inc/lang/da/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php (renamed from vendors/dokuwiki/inc/lang/da/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt (renamed from vendors/dokuwiki/inc/lang/da/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt (renamed from vendors/dokuwiki/inc/lang/da/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/da/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt (renamed from vendors/dokuwiki/inc/lang/da/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt (renamed from vendors/dokuwiki/inc/lang/da/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt (renamed from vendors/dokuwiki/inc/lang/da/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/da/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt (renamed from vendors/dokuwiki/inc/lang/da/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt (renamed from vendors/dokuwiki/inc/lang/da/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt (renamed from vendors/dokuwiki/inc/lang/da/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt (renamed from vendors/dokuwiki/inc/lang/da/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/da/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt (renamed from vendors/dokuwiki/inc/lang/da/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/da/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt (renamed from vendors/dokuwiki/inc/lang/da/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/da/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/da/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/da/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/da/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/da/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html (renamed from vendors/dokuwiki/inc/lang/de-informal/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php (renamed from vendors/dokuwiki/inc/lang/de-informal/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/de-informal/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt (renamed from vendors/dokuwiki/inc/lang/de/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/de/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/de/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt (renamed from vendors/dokuwiki/inc/lang/de/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt (renamed from vendors/dokuwiki/inc/lang/de/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt (renamed from vendors/dokuwiki/inc/lang/de/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt (renamed from vendors/dokuwiki/inc/lang/de/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt (renamed from vendors/dokuwiki/inc/lang/de/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt (renamed from vendors/dokuwiki/inc/lang/de/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt (renamed from vendors/dokuwiki/inc/lang/de/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html (renamed from vendors/dokuwiki/inc/lang/de/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php (renamed from vendors/dokuwiki/inc/lang/de/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt (renamed from vendors/dokuwiki/inc/lang/de/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt (renamed from vendors/dokuwiki/inc/lang/de/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/de/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt (renamed from vendors/dokuwiki/inc/lang/de/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt (renamed from vendors/dokuwiki/inc/lang/de/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt (renamed from vendors/dokuwiki/inc/lang/de/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/de/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt (renamed from vendors/dokuwiki/inc/lang/de/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt (renamed from vendors/dokuwiki/inc/lang/de/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt (renamed from vendors/dokuwiki/inc/lang/de/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt (renamed from vendors/dokuwiki/inc/lang/de/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/de/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt (renamed from vendors/dokuwiki/inc/lang/de/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/de/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt (renamed from vendors/dokuwiki/inc/lang/de/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/de/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/de/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/de/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/de/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/de/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt (renamed from vendors/dokuwiki/inc/lang/el/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/el/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/el/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt (renamed from vendors/dokuwiki/inc/lang/el/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt (renamed from vendors/dokuwiki/inc/lang/el/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt (renamed from vendors/dokuwiki/inc/lang/el/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt (renamed from vendors/dokuwiki/inc/lang/el/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt (renamed from vendors/dokuwiki/inc/lang/el/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt (renamed from vendors/dokuwiki/inc/lang/el/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt (renamed from vendors/dokuwiki/inc/lang/el/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html (renamed from vendors/dokuwiki/inc/lang/el/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php (renamed from vendors/dokuwiki/inc/lang/el/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt (renamed from vendors/dokuwiki/inc/lang/el/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt (renamed from vendors/dokuwiki/inc/lang/el/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/el/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt (renamed from vendors/dokuwiki/inc/lang/el/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt (renamed from vendors/dokuwiki/inc/lang/el/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt (renamed from vendors/dokuwiki/inc/lang/el/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/el/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt (renamed from vendors/dokuwiki/inc/lang/el/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt (renamed from vendors/dokuwiki/inc/lang/el/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt (renamed from vendors/dokuwiki/inc/lang/el/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt (renamed from vendors/dokuwiki/inc/lang/el/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/el/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt (renamed from vendors/dokuwiki/inc/lang/el/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/el/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt (renamed from vendors/dokuwiki/inc/lang/el/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/el/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/el/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/el/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/el/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/el/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt (renamed from vendors/dokuwiki/inc/lang/en/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/en/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/en/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt (renamed from vendors/dokuwiki/inc/lang/en/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt (renamed from vendors/dokuwiki/inc/lang/en/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt (renamed from vendors/dokuwiki/inc/lang/en/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt (renamed from vendors/dokuwiki/inc/lang/en/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt (renamed from vendors/dokuwiki/inc/lang/en/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt (renamed from vendors/dokuwiki/inc/lang/en/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt (renamed from vendors/dokuwiki/inc/lang/en/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html (renamed from vendors/dokuwiki/inc/lang/en/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php (renamed from vendors/dokuwiki/inc/lang/en/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt (renamed from vendors/dokuwiki/inc/lang/en/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt (renamed from vendors/dokuwiki/inc/lang/en/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/en/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt (renamed from vendors/dokuwiki/inc/lang/en/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt (renamed from vendors/dokuwiki/inc/lang/en/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt (renamed from vendors/dokuwiki/inc/lang/en/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/en/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt (renamed from vendors/dokuwiki/inc/lang/en/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt (renamed from vendors/dokuwiki/inc/lang/en/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt (renamed from vendors/dokuwiki/inc/lang/en/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt (renamed from vendors/dokuwiki/inc/lang/en/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/en/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt (renamed from vendors/dokuwiki/inc/lang/en/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/en/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt (renamed from vendors/dokuwiki/inc/lang/en/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/en/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/en/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/en/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/en/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/en/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt (renamed from vendors/dokuwiki/inc/lang/eo/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/eo/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/eo/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt (renamed from vendors/dokuwiki/inc/lang/eo/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt (renamed from vendors/dokuwiki/inc/lang/eo/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt (renamed from vendors/dokuwiki/inc/lang/eo/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt (renamed from vendors/dokuwiki/inc/lang/eo/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt (renamed from vendors/dokuwiki/inc/lang/eo/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt (renamed from vendors/dokuwiki/inc/lang/eo/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt (renamed from vendors/dokuwiki/inc/lang/eo/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html (renamed from vendors/dokuwiki/inc/lang/eo/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php (renamed from vendors/dokuwiki/inc/lang/eo/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt (renamed from vendors/dokuwiki/inc/lang/eo/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt (renamed from vendors/dokuwiki/inc/lang/eo/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/eo/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt (renamed from vendors/dokuwiki/inc/lang/eo/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt (renamed from vendors/dokuwiki/inc/lang/eo/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt (renamed from vendors/dokuwiki/inc/lang/eo/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/eo/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt (renamed from vendors/dokuwiki/inc/lang/eo/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt (renamed from vendors/dokuwiki/inc/lang/eo/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt (renamed from vendors/dokuwiki/inc/lang/eo/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt (renamed from vendors/dokuwiki/inc/lang/eo/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/eo/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt (renamed from vendors/dokuwiki/inc/lang/eo/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/eo/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt (renamed from vendors/dokuwiki/inc/lang/eo/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/eo/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/eo/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/eo/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/eo/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/eo/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt (renamed from vendors/dokuwiki/inc/lang/es/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/es/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/es/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt (renamed from vendors/dokuwiki/inc/lang/es/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt (renamed from vendors/dokuwiki/inc/lang/es/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt (renamed from vendors/dokuwiki/inc/lang/es/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt (renamed from vendors/dokuwiki/inc/lang/es/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt (renamed from vendors/dokuwiki/inc/lang/es/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt (renamed from vendors/dokuwiki/inc/lang/es/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt (renamed from vendors/dokuwiki/inc/lang/es/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html (renamed from vendors/dokuwiki/inc/lang/es/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php (renamed from vendors/dokuwiki/inc/lang/es/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt (renamed from vendors/dokuwiki/inc/lang/es/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt (renamed from vendors/dokuwiki/inc/lang/es/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/es/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt (renamed from vendors/dokuwiki/inc/lang/es/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt (renamed from vendors/dokuwiki/inc/lang/es/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt (renamed from vendors/dokuwiki/inc/lang/es/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/es/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt (renamed from vendors/dokuwiki/inc/lang/es/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt (renamed from vendors/dokuwiki/inc/lang/es/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt (renamed from vendors/dokuwiki/inc/lang/es/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt (renamed from vendors/dokuwiki/inc/lang/es/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/es/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt (renamed from vendors/dokuwiki/inc/lang/es/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/es/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt (renamed from vendors/dokuwiki/inc/lang/es/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/es/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/es/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/es/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/es/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/es/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt (renamed from vendors/dokuwiki/inc/lang/et/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/et/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt (renamed from vendors/dokuwiki/inc/lang/et/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt (renamed from vendors/dokuwiki/inc/lang/et/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt (renamed from vendors/dokuwiki/inc/lang/et/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt (renamed from vendors/dokuwiki/inc/lang/et/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt (renamed from vendors/dokuwiki/inc/lang/et/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt (renamed from vendors/dokuwiki/inc/lang/et/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt (renamed from vendors/dokuwiki/inc/lang/et/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php (renamed from vendors/dokuwiki/inc/lang/et/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt (renamed from vendors/dokuwiki/inc/lang/et/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt (renamed from vendors/dokuwiki/inc/lang/et/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/et/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt (renamed from vendors/dokuwiki/inc/lang/et/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt (renamed from vendors/dokuwiki/inc/lang/et/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt (renamed from vendors/dokuwiki/inc/lang/et/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/et/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt (renamed from vendors/dokuwiki/inc/lang/et/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt (renamed from vendors/dokuwiki/inc/lang/et/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt (renamed from vendors/dokuwiki/inc/lang/et/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt (renamed from vendors/dokuwiki/inc/lang/et/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/et/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt (renamed from vendors/dokuwiki/inc/lang/et/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/et/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt (renamed from vendors/dokuwiki/inc/lang/et/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/et/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/et/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/et/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/et/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt (renamed from vendors/dokuwiki/inc/lang/eu/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/eu/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt (renamed from vendors/dokuwiki/inc/lang/eu/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt (renamed from vendors/dokuwiki/inc/lang/eu/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt (renamed from vendors/dokuwiki/inc/lang/eu/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt (renamed from vendors/dokuwiki/inc/lang/eu/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt (renamed from vendors/dokuwiki/inc/lang/eu/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt (renamed from vendors/dokuwiki/inc/lang/eu/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt (renamed from vendors/dokuwiki/inc/lang/eu/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html (renamed from vendors/dokuwiki/inc/lang/eu/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php (renamed from vendors/dokuwiki/inc/lang/eu/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt (renamed from vendors/dokuwiki/inc/lang/eu/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt (renamed from vendors/dokuwiki/inc/lang/eu/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/eu/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt (renamed from vendors/dokuwiki/inc/lang/eu/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt (renamed from vendors/dokuwiki/inc/lang/eu/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt (renamed from vendors/dokuwiki/inc/lang/eu/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/eu/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt (renamed from vendors/dokuwiki/inc/lang/eu/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt (renamed from vendors/dokuwiki/inc/lang/eu/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt (renamed from vendors/dokuwiki/inc/lang/eu/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt (renamed from vendors/dokuwiki/inc/lang/eu/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/eu/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt (renamed from vendors/dokuwiki/inc/lang/eu/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/eu/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt (renamed from vendors/dokuwiki/inc/lang/eu/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/eu/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/eu/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/eu/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/eu/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/eu/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt (renamed from vendors/dokuwiki/inc/lang/fa/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/fa/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/fa/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt (renamed from vendors/dokuwiki/inc/lang/fa/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt (renamed from vendors/dokuwiki/inc/lang/fa/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt (renamed from vendors/dokuwiki/inc/lang/fa/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt (renamed from vendors/dokuwiki/inc/lang/fa/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt (renamed from vendors/dokuwiki/inc/lang/fa/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt (renamed from vendors/dokuwiki/inc/lang/fa/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt (renamed from vendors/dokuwiki/inc/lang/fa/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html (renamed from vendors/dokuwiki/inc/lang/fa/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php (renamed from vendors/dokuwiki/inc/lang/fa/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt (renamed from vendors/dokuwiki/inc/lang/fa/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt (renamed from vendors/dokuwiki/inc/lang/fa/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/fa/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt (renamed from vendors/dokuwiki/inc/lang/fa/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt (renamed from vendors/dokuwiki/inc/lang/fa/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt (renamed from vendors/dokuwiki/inc/lang/fa/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/fa/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt (renamed from vendors/dokuwiki/inc/lang/fa/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt (renamed from vendors/dokuwiki/inc/lang/fa/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt (renamed from vendors/dokuwiki/inc/lang/fa/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt (renamed from vendors/dokuwiki/inc/lang/fa/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/fa/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt (renamed from vendors/dokuwiki/inc/lang/fa/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/fa/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt (renamed from vendors/dokuwiki/inc/lang/fa/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/fa/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/fa/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/fa/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/fa/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/fa/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt (renamed from vendors/dokuwiki/inc/lang/fi/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/fi/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/fi/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt (renamed from vendors/dokuwiki/inc/lang/fi/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt (renamed from vendors/dokuwiki/inc/lang/fi/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt (renamed from vendors/dokuwiki/inc/lang/fi/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt (renamed from vendors/dokuwiki/inc/lang/fi/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt (renamed from vendors/dokuwiki/inc/lang/fi/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt (renamed from vendors/dokuwiki/inc/lang/fi/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt (renamed from vendors/dokuwiki/inc/lang/fi/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html (renamed from vendors/dokuwiki/inc/lang/fi/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php (renamed from vendors/dokuwiki/inc/lang/fi/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt (renamed from vendors/dokuwiki/inc/lang/fi/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt (renamed from vendors/dokuwiki/inc/lang/fi/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/fi/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt (renamed from vendors/dokuwiki/inc/lang/fi/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt (renamed from vendors/dokuwiki/inc/lang/fi/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt (renamed from vendors/dokuwiki/inc/lang/fi/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/fi/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt (renamed from vendors/dokuwiki/inc/lang/fi/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt (renamed from vendors/dokuwiki/inc/lang/fi/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt (renamed from vendors/dokuwiki/inc/lang/fi/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt (renamed from vendors/dokuwiki/inc/lang/fi/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/fi/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt (renamed from vendors/dokuwiki/inc/lang/fi/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/fi/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt (renamed from vendors/dokuwiki/inc/lang/fi/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/fi/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/fi/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/fi/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/fi/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/fi/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt (renamed from vendors/dokuwiki/inc/lang/fo/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/fo/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt (renamed from vendors/dokuwiki/inc/lang/fo/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt (renamed from vendors/dokuwiki/inc/lang/fo/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt (renamed from vendors/dokuwiki/inc/lang/fo/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt (renamed from vendors/dokuwiki/inc/lang/fo/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt (renamed from vendors/dokuwiki/inc/lang/fo/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt (renamed from vendors/dokuwiki/inc/lang/fo/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php (renamed from vendors/dokuwiki/inc/lang/fo/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt (renamed from vendors/dokuwiki/inc/lang/fo/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt (renamed from vendors/dokuwiki/inc/lang/fo/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/fo/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt (renamed from vendors/dokuwiki/inc/lang/fo/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt (renamed from vendors/dokuwiki/inc/lang/fo/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt (renamed from vendors/dokuwiki/inc/lang/fo/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt (renamed from vendors/dokuwiki/inc/lang/fo/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt (renamed from vendors/dokuwiki/inc/lang/fo/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt (renamed from vendors/dokuwiki/inc/lang/fo/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/fo/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt (renamed from vendors/dokuwiki/inc/lang/fo/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/fo/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt (renamed from vendors/dokuwiki/inc/lang/fo/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/fo/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/fo/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/fo/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/fo/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt (renamed from vendors/dokuwiki/inc/lang/fr/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/fr/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/fr/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt (renamed from vendors/dokuwiki/inc/lang/fr/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt (renamed from vendors/dokuwiki/inc/lang/fr/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt (renamed from vendors/dokuwiki/inc/lang/fr/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt (renamed from vendors/dokuwiki/inc/lang/fr/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt (renamed from vendors/dokuwiki/inc/lang/fr/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt (renamed from vendors/dokuwiki/inc/lang/fr/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt (renamed from vendors/dokuwiki/inc/lang/fr/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html (renamed from vendors/dokuwiki/inc/lang/fr/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php (renamed from vendors/dokuwiki/inc/lang/fr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt (renamed from vendors/dokuwiki/inc/lang/fr/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt (renamed from vendors/dokuwiki/inc/lang/fr/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/fr/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt (renamed from vendors/dokuwiki/inc/lang/fr/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt (renamed from vendors/dokuwiki/inc/lang/fr/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt (renamed from vendors/dokuwiki/inc/lang/fr/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/fr/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt (renamed from vendors/dokuwiki/inc/lang/fr/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt (renamed from vendors/dokuwiki/inc/lang/fr/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt (renamed from vendors/dokuwiki/inc/lang/fr/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt (renamed from vendors/dokuwiki/inc/lang/fr/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/fr/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt (renamed from vendors/dokuwiki/inc/lang/fr/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/fr/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt (renamed from vendors/dokuwiki/inc/lang/fr/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/fr/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/fr/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/fr/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/fr/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/fr/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt (renamed from vendors/dokuwiki/inc/lang/gl/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/gl/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/gl/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt (renamed from vendors/dokuwiki/inc/lang/gl/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt (renamed from vendors/dokuwiki/inc/lang/gl/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt (renamed from vendors/dokuwiki/inc/lang/gl/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt (renamed from vendors/dokuwiki/inc/lang/gl/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt (renamed from vendors/dokuwiki/inc/lang/gl/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt (renamed from vendors/dokuwiki/inc/lang/gl/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt (renamed from vendors/dokuwiki/inc/lang/gl/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html (renamed from vendors/dokuwiki/inc/lang/gl/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php (renamed from vendors/dokuwiki/inc/lang/gl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt (renamed from vendors/dokuwiki/inc/lang/gl/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt (renamed from vendors/dokuwiki/inc/lang/gl/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/gl/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt (renamed from vendors/dokuwiki/inc/lang/gl/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt (renamed from vendors/dokuwiki/inc/lang/gl/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt (renamed from vendors/dokuwiki/inc/lang/gl/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/gl/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt (renamed from vendors/dokuwiki/inc/lang/gl/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt (renamed from vendors/dokuwiki/inc/lang/gl/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt (renamed from vendors/dokuwiki/inc/lang/gl/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt (renamed from vendors/dokuwiki/inc/lang/gl/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/gl/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt (renamed from vendors/dokuwiki/inc/lang/gl/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/gl/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt (renamed from vendors/dokuwiki/inc/lang/gl/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/gl/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/gl/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/gl/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/gl/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/gl/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt (renamed from vendors/dokuwiki/inc/lang/he/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/he/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt (renamed from vendors/dokuwiki/inc/lang/he/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt (renamed from vendors/dokuwiki/inc/lang/he/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt (renamed from vendors/dokuwiki/inc/lang/he/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt (renamed from vendors/dokuwiki/inc/lang/he/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt (renamed from vendors/dokuwiki/inc/lang/he/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt (renamed from vendors/dokuwiki/inc/lang/he/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt (renamed from vendors/dokuwiki/inc/lang/he/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html (renamed from vendors/dokuwiki/inc/lang/he/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php (renamed from vendors/dokuwiki/inc/lang/he/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt (renamed from vendors/dokuwiki/inc/lang/he/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt (renamed from vendors/dokuwiki/inc/lang/he/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/he/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt (renamed from vendors/dokuwiki/inc/lang/he/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt (renamed from vendors/dokuwiki/inc/lang/he/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt (renamed from vendors/dokuwiki/inc/lang/he/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/he/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt (renamed from vendors/dokuwiki/inc/lang/he/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt (renamed from vendors/dokuwiki/inc/lang/he/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt (renamed from vendors/dokuwiki/inc/lang/he/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt (renamed from vendors/dokuwiki/inc/lang/he/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/he/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt (renamed from vendors/dokuwiki/inc/lang/he/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/he/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt (renamed from vendors/dokuwiki/inc/lang/he/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/he/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/he/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/he/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/he/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/he/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php (renamed from vendors/dokuwiki/inc/lang/hi/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt (renamed from vendors/dokuwiki/inc/lang/hr/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/hr/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt (renamed from vendors/dokuwiki/inc/lang/hr/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt (renamed from vendors/dokuwiki/inc/lang/hr/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt (renamed from vendors/dokuwiki/inc/lang/hr/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt (renamed from vendors/dokuwiki/inc/lang/hr/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt (renamed from vendors/dokuwiki/inc/lang/hr/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt (renamed from vendors/dokuwiki/inc/lang/hr/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php (renamed from vendors/dokuwiki/inc/lang/hr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt (renamed from vendors/dokuwiki/inc/lang/hr/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt (renamed from vendors/dokuwiki/inc/lang/hr/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/hr/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt (renamed from vendors/dokuwiki/inc/lang/hr/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt (renamed from vendors/dokuwiki/inc/lang/hr/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt (renamed from vendors/dokuwiki/inc/lang/hr/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt (renamed from vendors/dokuwiki/inc/lang/hr/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt (renamed from vendors/dokuwiki/inc/lang/hr/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt (renamed from vendors/dokuwiki/inc/lang/hr/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/hr/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt (renamed from vendors/dokuwiki/inc/lang/hr/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/hr/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt (renamed from vendors/dokuwiki/inc/lang/hr/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/hr/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/hr/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/hr/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/hr/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt (renamed from vendors/dokuwiki/inc/lang/hu/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/hu/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/hu/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt (renamed from vendors/dokuwiki/inc/lang/hu/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt (renamed from vendors/dokuwiki/inc/lang/hu/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt (renamed from vendors/dokuwiki/inc/lang/hu/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt (renamed from vendors/dokuwiki/inc/lang/hu/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt (renamed from vendors/dokuwiki/inc/lang/hu/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt (renamed from vendors/dokuwiki/inc/lang/hu/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt (renamed from vendors/dokuwiki/inc/lang/hu/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html (renamed from vendors/dokuwiki/inc/lang/hu/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php (renamed from vendors/dokuwiki/inc/lang/hu/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt (renamed from vendors/dokuwiki/inc/lang/hu/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt (renamed from vendors/dokuwiki/inc/lang/hu/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/hu/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt (renamed from vendors/dokuwiki/inc/lang/hu/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt (renamed from vendors/dokuwiki/inc/lang/hu/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt (renamed from vendors/dokuwiki/inc/lang/hu/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/hu/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt (renamed from vendors/dokuwiki/inc/lang/hu/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt (renamed from vendors/dokuwiki/inc/lang/hu/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt (renamed from vendors/dokuwiki/inc/lang/hu/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt (renamed from vendors/dokuwiki/inc/lang/hu/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/hu/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt (renamed from vendors/dokuwiki/inc/lang/hu/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/hu/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt (renamed from vendors/dokuwiki/inc/lang/hu/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/hu/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/hu/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/hu/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/hu/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/hu/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php (renamed from vendors/dokuwiki/inc/lang/id-ni/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt (renamed from vendors/dokuwiki/inc/lang/id/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/id/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt (renamed from vendors/dokuwiki/inc/lang/id/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt (renamed from vendors/dokuwiki/inc/lang/id/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt (renamed from vendors/dokuwiki/inc/lang/id/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt (renamed from vendors/dokuwiki/inc/lang/id/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt (renamed from vendors/dokuwiki/inc/lang/id/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt (renamed from vendors/dokuwiki/inc/lang/id/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt (renamed from vendors/dokuwiki/inc/lang/id/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html (renamed from vendors/dokuwiki/inc/lang/id/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php (renamed from vendors/dokuwiki/inc/lang/id/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt (renamed from vendors/dokuwiki/inc/lang/id/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt (renamed from vendors/dokuwiki/inc/lang/id/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/id/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt (renamed from vendors/dokuwiki/inc/lang/id/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt (renamed from vendors/dokuwiki/inc/lang/id/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt (renamed from vendors/dokuwiki/inc/lang/id/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/id/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt (renamed from vendors/dokuwiki/inc/lang/id/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt (renamed from vendors/dokuwiki/inc/lang/id/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt (renamed from vendors/dokuwiki/inc/lang/id/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt (renamed from vendors/dokuwiki/inc/lang/id/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/id/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt (renamed from vendors/dokuwiki/inc/lang/id/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/id/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt (renamed from vendors/dokuwiki/inc/lang/id/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/id/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/id/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/id/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/id/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/id/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/is/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt (renamed from vendors/dokuwiki/inc/lang/is/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php (renamed from vendors/dokuwiki/inc/lang/is/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt (renamed from vendors/dokuwiki/inc/lang/is/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt (renamed from vendors/dokuwiki/inc/lang/is/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/is/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/is/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt (renamed from vendors/dokuwiki/inc/lang/it/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/it/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/it/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt (renamed from vendors/dokuwiki/inc/lang/it/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt (renamed from vendors/dokuwiki/inc/lang/it/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt (renamed from vendors/dokuwiki/inc/lang/it/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt (renamed from vendors/dokuwiki/inc/lang/it/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt (renamed from vendors/dokuwiki/inc/lang/it/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt (renamed from vendors/dokuwiki/inc/lang/it/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt (renamed from vendors/dokuwiki/inc/lang/it/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html (renamed from vendors/dokuwiki/inc/lang/it/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php (renamed from vendors/dokuwiki/inc/lang/it/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt (renamed from vendors/dokuwiki/inc/lang/it/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt (renamed from vendors/dokuwiki/inc/lang/it/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/it/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt (renamed from vendors/dokuwiki/inc/lang/it/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt (renamed from vendors/dokuwiki/inc/lang/it/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt (renamed from vendors/dokuwiki/inc/lang/it/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/it/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt (renamed from vendors/dokuwiki/inc/lang/it/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt (renamed from vendors/dokuwiki/inc/lang/it/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt (renamed from vendors/dokuwiki/inc/lang/it/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt (renamed from vendors/dokuwiki/inc/lang/it/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/it/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt (renamed from vendors/dokuwiki/inc/lang/it/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/it/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt (renamed from vendors/dokuwiki/inc/lang/it/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/it/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/it/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/it/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/it/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/it/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt (renamed from vendors/dokuwiki/inc/lang/ja/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/ja/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/ja/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt (renamed from vendors/dokuwiki/inc/lang/ja/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt (renamed from vendors/dokuwiki/inc/lang/ja/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt (renamed from vendors/dokuwiki/inc/lang/ja/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt (renamed from vendors/dokuwiki/inc/lang/ja/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt (renamed from vendors/dokuwiki/inc/lang/ja/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt (renamed from vendors/dokuwiki/inc/lang/ja/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt (renamed from vendors/dokuwiki/inc/lang/ja/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html (renamed from vendors/dokuwiki/inc/lang/ja/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php (renamed from vendors/dokuwiki/inc/lang/ja/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt (renamed from vendors/dokuwiki/inc/lang/ja/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt (renamed from vendors/dokuwiki/inc/lang/ja/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/ja/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt (renamed from vendors/dokuwiki/inc/lang/ja/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt (renamed from vendors/dokuwiki/inc/lang/ja/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt (renamed from vendors/dokuwiki/inc/lang/ja/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/ja/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt (renamed from vendors/dokuwiki/inc/lang/ja/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt (renamed from vendors/dokuwiki/inc/lang/ja/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt (renamed from vendors/dokuwiki/inc/lang/ja/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt (renamed from vendors/dokuwiki/inc/lang/ja/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/ja/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt (renamed from vendors/dokuwiki/inc/lang/ja/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/ja/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt (renamed from vendors/dokuwiki/inc/lang/ja/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/ja/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/ja/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/ja/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/ja/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/ja/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt (renamed from vendors/dokuwiki/inc/lang/km/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/km/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt (renamed from vendors/dokuwiki/inc/lang/km/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt (renamed from vendors/dokuwiki/inc/lang/km/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt (renamed from vendors/dokuwiki/inc/lang/km/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt (renamed from vendors/dokuwiki/inc/lang/km/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt (renamed from vendors/dokuwiki/inc/lang/km/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php (renamed from vendors/dokuwiki/inc/lang/km/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt (renamed from vendors/dokuwiki/inc/lang/km/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt (renamed from vendors/dokuwiki/inc/lang/km/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt (renamed from vendors/dokuwiki/inc/lang/km/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/km/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt (renamed from vendors/dokuwiki/inc/lang/km/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt (renamed from vendors/dokuwiki/inc/lang/km/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt (renamed from vendors/dokuwiki/inc/lang/km/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt (renamed from vendors/dokuwiki/inc/lang/ko/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/ko/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt (renamed from vendors/dokuwiki/inc/lang/ko/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt (renamed from vendors/dokuwiki/inc/lang/ko/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt (renamed from vendors/dokuwiki/inc/lang/ko/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt (renamed from vendors/dokuwiki/inc/lang/ko/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt (renamed from vendors/dokuwiki/inc/lang/ko/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt (renamed from vendors/dokuwiki/inc/lang/ko/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt (renamed from vendors/dokuwiki/inc/lang/ko/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html (renamed from vendors/dokuwiki/inc/lang/ko/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php (renamed from vendors/dokuwiki/inc/lang/ko/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt (renamed from vendors/dokuwiki/inc/lang/ko/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt (renamed from vendors/dokuwiki/inc/lang/ko/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/ko/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt (renamed from vendors/dokuwiki/inc/lang/ko/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt (renamed from vendors/dokuwiki/inc/lang/ko/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt (renamed from vendors/dokuwiki/inc/lang/ko/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/ko/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt (renamed from vendors/dokuwiki/inc/lang/ko/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt (renamed from vendors/dokuwiki/inc/lang/ko/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt (renamed from vendors/dokuwiki/inc/lang/ko/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt (renamed from vendors/dokuwiki/inc/lang/ko/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/ko/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt (renamed from vendors/dokuwiki/inc/lang/ko/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/ko/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt (renamed from vendors/dokuwiki/inc/lang/ko/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/ko/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/ko/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/ko/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/ko/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/ko/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt (renamed from vendors/dokuwiki/inc/lang/ku/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/ku/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt (renamed from vendors/dokuwiki/inc/lang/ku/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt (renamed from vendors/dokuwiki/inc/lang/ku/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt (renamed from vendors/dokuwiki/inc/lang/ku/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt (renamed from vendors/dokuwiki/inc/lang/ku/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt (renamed from vendors/dokuwiki/inc/lang/ku/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt (renamed from vendors/dokuwiki/inc/lang/ku/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php (renamed from vendors/dokuwiki/inc/lang/ku/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt (renamed from vendors/dokuwiki/inc/lang/ku/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt (renamed from vendors/dokuwiki/inc/lang/ku/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/ku/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt (renamed from vendors/dokuwiki/inc/lang/ku/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt (renamed from vendors/dokuwiki/inc/lang/ku/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt (renamed from vendors/dokuwiki/inc/lang/ku/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt (renamed from vendors/dokuwiki/inc/lang/ku/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt (renamed from vendors/dokuwiki/inc/lang/ku/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt (renamed from vendors/dokuwiki/inc/lang/ku/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt (renamed from vendors/dokuwiki/inc/lang/ku/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/ku/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt (renamed from vendors/dokuwiki/inc/lang/ku/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/ku/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/ku/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/ku/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt (renamed from vendors/dokuwiki/inc/lang/lt/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/lt/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt (renamed from vendors/dokuwiki/inc/lang/lt/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt (renamed from vendors/dokuwiki/inc/lang/lt/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt (renamed from vendors/dokuwiki/inc/lang/lt/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt (renamed from vendors/dokuwiki/inc/lang/lt/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt (renamed from vendors/dokuwiki/inc/lang/lt/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt (renamed from vendors/dokuwiki/inc/lang/lt/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php (renamed from vendors/dokuwiki/inc/lang/lt/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt (renamed from vendors/dokuwiki/inc/lang/lt/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt (renamed from vendors/dokuwiki/inc/lang/lt/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/lt/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt (renamed from vendors/dokuwiki/inc/lang/lt/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt (renamed from vendors/dokuwiki/inc/lang/lt/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt (renamed from vendors/dokuwiki/inc/lang/lt/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt (renamed from vendors/dokuwiki/inc/lang/lt/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt (renamed from vendors/dokuwiki/inc/lang/lt/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt (renamed from vendors/dokuwiki/inc/lang/lt/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/lt/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt (renamed from vendors/dokuwiki/inc/lang/lt/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/lt/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt (renamed from vendors/dokuwiki/inc/lang/lt/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/lt/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/lt/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/lt/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt (renamed from vendors/dokuwiki/inc/lang/lv/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/lv/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/lv/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt (renamed from vendors/dokuwiki/inc/lang/lv/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt (renamed from vendors/dokuwiki/inc/lang/lv/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt (renamed from vendors/dokuwiki/inc/lang/lv/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt (renamed from vendors/dokuwiki/inc/lang/lv/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt (renamed from vendors/dokuwiki/inc/lang/lv/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt (renamed from vendors/dokuwiki/inc/lang/lv/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt (renamed from vendors/dokuwiki/inc/lang/lv/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html (renamed from vendors/dokuwiki/inc/lang/lv/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php (renamed from vendors/dokuwiki/inc/lang/lv/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt (renamed from vendors/dokuwiki/inc/lang/lv/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt (renamed from vendors/dokuwiki/inc/lang/lv/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/lv/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt (renamed from vendors/dokuwiki/inc/lang/lv/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt (renamed from vendors/dokuwiki/inc/lang/lv/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt (renamed from vendors/dokuwiki/inc/lang/lv/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/lv/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt (renamed from vendors/dokuwiki/inc/lang/lv/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt (renamed from vendors/dokuwiki/inc/lang/lv/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt (renamed from vendors/dokuwiki/inc/lang/lv/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt (renamed from vendors/dokuwiki/inc/lang/lv/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/lv/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt (renamed from vendors/dokuwiki/inc/lang/lv/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/lv/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt (renamed from vendors/dokuwiki/inc/lang/lv/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/lv/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/lv/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/lv/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/lv/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/lv/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt (renamed from vendors/dokuwiki/inc/lang/mg/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/mg/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt (renamed from vendors/dokuwiki/inc/lang/mg/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt (renamed from vendors/dokuwiki/inc/lang/mg/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt (renamed from vendors/dokuwiki/inc/lang/mg/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt (renamed from vendors/dokuwiki/inc/lang/mg/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt (renamed from vendors/dokuwiki/inc/lang/mg/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt (renamed from vendors/dokuwiki/inc/lang/mg/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php (renamed from vendors/dokuwiki/inc/lang/mg/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt (renamed from vendors/dokuwiki/inc/lang/mg/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt (renamed from vendors/dokuwiki/inc/lang/mg/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/mg/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt (renamed from vendors/dokuwiki/inc/lang/mg/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt (renamed from vendors/dokuwiki/inc/lang/mg/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt (renamed from vendors/dokuwiki/inc/lang/mg/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt (renamed from vendors/dokuwiki/inc/lang/mg/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt (renamed from vendors/dokuwiki/inc/lang/mg/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt (renamed from vendors/dokuwiki/inc/lang/mg/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt (renamed from vendors/dokuwiki/inc/lang/mg/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/mg/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt (renamed from vendors/dokuwiki/inc/lang/mg/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/mg/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt (renamed from vendors/dokuwiki/inc/lang/mr/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/mr/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt (renamed from vendors/dokuwiki/inc/lang/mr/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt (renamed from vendors/dokuwiki/inc/lang/mr/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt (renamed from vendors/dokuwiki/inc/lang/mr/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt (renamed from vendors/dokuwiki/inc/lang/mr/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt (renamed from vendors/dokuwiki/inc/lang/mr/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt (renamed from vendors/dokuwiki/inc/lang/mr/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt (renamed from vendors/dokuwiki/inc/lang/mr/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html (renamed from vendors/dokuwiki/inc/lang/mr/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php (renamed from vendors/dokuwiki/inc/lang/mr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt (renamed from vendors/dokuwiki/inc/lang/mr/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt (renamed from vendors/dokuwiki/inc/lang/mr/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/mr/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt (renamed from vendors/dokuwiki/inc/lang/mr/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt (renamed from vendors/dokuwiki/inc/lang/mr/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt (renamed from vendors/dokuwiki/inc/lang/mr/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/mr/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt (renamed from vendors/dokuwiki/inc/lang/mr/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt (renamed from vendors/dokuwiki/inc/lang/mr/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt (renamed from vendors/dokuwiki/inc/lang/mr/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt (renamed from vendors/dokuwiki/inc/lang/mr/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/mr/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt (renamed from vendors/dokuwiki/inc/lang/mr/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/mr/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt (renamed from vendors/dokuwiki/inc/lang/mr/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/mr/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/mr/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/mr/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/mr/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/mr/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt (renamed from vendors/dokuwiki/inc/lang/ne/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/ne/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt (renamed from vendors/dokuwiki/inc/lang/ne/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt (renamed from vendors/dokuwiki/inc/lang/ne/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt (renamed from vendors/dokuwiki/inc/lang/ne/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt (renamed from vendors/dokuwiki/inc/lang/ne/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt (renamed from vendors/dokuwiki/inc/lang/ne/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt (renamed from vendors/dokuwiki/inc/lang/ne/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt (renamed from vendors/dokuwiki/inc/lang/ne/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php (renamed from vendors/dokuwiki/inc/lang/ne/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt (renamed from vendors/dokuwiki/inc/lang/ne/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt (renamed from vendors/dokuwiki/inc/lang/ne/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/ne/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt (renamed from vendors/dokuwiki/inc/lang/ne/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt (renamed from vendors/dokuwiki/inc/lang/ne/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/ne/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/ne/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt (renamed from vendors/dokuwiki/inc/lang/ne/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/ne/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/ne/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/ne/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt (renamed from vendors/dokuwiki/inc/lang/nl/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/nl/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/nl/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt (renamed from vendors/dokuwiki/inc/lang/nl/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt (renamed from vendors/dokuwiki/inc/lang/nl/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt (renamed from vendors/dokuwiki/inc/lang/nl/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt (renamed from vendors/dokuwiki/inc/lang/nl/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt (renamed from vendors/dokuwiki/inc/lang/nl/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt (renamed from vendors/dokuwiki/inc/lang/nl/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt (renamed from vendors/dokuwiki/inc/lang/nl/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html (renamed from vendors/dokuwiki/inc/lang/nl/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php (renamed from vendors/dokuwiki/inc/lang/nl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt (renamed from vendors/dokuwiki/inc/lang/nl/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt (renamed from vendors/dokuwiki/inc/lang/nl/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/nl/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt (renamed from vendors/dokuwiki/inc/lang/nl/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt (renamed from vendors/dokuwiki/inc/lang/nl/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt (renamed from vendors/dokuwiki/inc/lang/nl/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/nl/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt (renamed from vendors/dokuwiki/inc/lang/nl/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt (renamed from vendors/dokuwiki/inc/lang/nl/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt (renamed from vendors/dokuwiki/inc/lang/nl/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt (renamed from vendors/dokuwiki/inc/lang/nl/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/nl/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt (renamed from vendors/dokuwiki/inc/lang/nl/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/nl/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt (renamed from vendors/dokuwiki/inc/lang/nl/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/nl/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/nl/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/nl/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/nl/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/nl/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt (renamed from vendors/dokuwiki/inc/lang/no/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/no/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/no/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt (renamed from vendors/dokuwiki/inc/lang/no/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt (renamed from vendors/dokuwiki/inc/lang/no/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt (renamed from vendors/dokuwiki/inc/lang/no/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt (renamed from vendors/dokuwiki/inc/lang/no/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt (renamed from vendors/dokuwiki/inc/lang/no/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt (renamed from vendors/dokuwiki/inc/lang/no/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt (renamed from vendors/dokuwiki/inc/lang/no/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html (renamed from vendors/dokuwiki/inc/lang/no/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php (renamed from vendors/dokuwiki/inc/lang/no/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt (renamed from vendors/dokuwiki/inc/lang/no/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt (renamed from vendors/dokuwiki/inc/lang/no/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/no/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt (renamed from vendors/dokuwiki/inc/lang/no/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt (renamed from vendors/dokuwiki/inc/lang/no/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt (renamed from vendors/dokuwiki/inc/lang/no/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/no/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt (renamed from vendors/dokuwiki/inc/lang/no/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt (renamed from vendors/dokuwiki/inc/lang/no/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt (renamed from vendors/dokuwiki/inc/lang/no/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt (renamed from vendors/dokuwiki/inc/lang/no/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/no/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt (renamed from vendors/dokuwiki/inc/lang/no/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/no/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt (renamed from vendors/dokuwiki/inc/lang/no/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/no/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/no/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/no/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/no/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/no/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt (renamed from vendors/dokuwiki/inc/lang/pl/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/pl/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/pl/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt (renamed from vendors/dokuwiki/inc/lang/pl/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt (renamed from vendors/dokuwiki/inc/lang/pl/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt (renamed from vendors/dokuwiki/inc/lang/pl/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt (renamed from vendors/dokuwiki/inc/lang/pl/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt (renamed from vendors/dokuwiki/inc/lang/pl/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt (renamed from vendors/dokuwiki/inc/lang/pl/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt (renamed from vendors/dokuwiki/inc/lang/pl/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html (renamed from vendors/dokuwiki/inc/lang/pl/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php (renamed from vendors/dokuwiki/inc/lang/pl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt (renamed from vendors/dokuwiki/inc/lang/pl/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt (renamed from vendors/dokuwiki/inc/lang/pl/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/pl/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt (renamed from vendors/dokuwiki/inc/lang/pl/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt (renamed from vendors/dokuwiki/inc/lang/pl/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt (renamed from vendors/dokuwiki/inc/lang/pl/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/pl/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt (renamed from vendors/dokuwiki/inc/lang/pl/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt (renamed from vendors/dokuwiki/inc/lang/pl/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt (renamed from vendors/dokuwiki/inc/lang/pl/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt (renamed from vendors/dokuwiki/inc/lang/pl/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/pl/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt (renamed from vendors/dokuwiki/inc/lang/pl/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/pl/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt (renamed from vendors/dokuwiki/inc/lang/pl/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/pl/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/pl/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/pl/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/pl/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/pl/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html (renamed from vendors/dokuwiki/inc/lang/pt-br/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php (renamed from vendors/dokuwiki/inc/lang/pt-br/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/pt-br/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt (renamed from vendors/dokuwiki/inc/lang/pt/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/pt/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/pt/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt (renamed from vendors/dokuwiki/inc/lang/pt/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt (renamed from vendors/dokuwiki/inc/lang/pt/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt (renamed from vendors/dokuwiki/inc/lang/pt/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt (renamed from vendors/dokuwiki/inc/lang/pt/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt (renamed from vendors/dokuwiki/inc/lang/pt/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt (renamed from vendors/dokuwiki/inc/lang/pt/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt (renamed from vendors/dokuwiki/inc/lang/pt/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html (renamed from vendors/dokuwiki/inc/lang/pt/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php (renamed from vendors/dokuwiki/inc/lang/pt/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt (renamed from vendors/dokuwiki/inc/lang/pt/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt (renamed from vendors/dokuwiki/inc/lang/pt/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/pt/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt (renamed from vendors/dokuwiki/inc/lang/pt/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt (renamed from vendors/dokuwiki/inc/lang/pt/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt (renamed from vendors/dokuwiki/inc/lang/pt/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/pt/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt (renamed from vendors/dokuwiki/inc/lang/pt/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt (renamed from vendors/dokuwiki/inc/lang/pt/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt (renamed from vendors/dokuwiki/inc/lang/pt/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt (renamed from vendors/dokuwiki/inc/lang/pt/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/pt/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt (renamed from vendors/dokuwiki/inc/lang/pt/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/pt/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt (renamed from vendors/dokuwiki/inc/lang/pt/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/pt/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/pt/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/pt/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/pt/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/pt/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt (renamed from vendors/dokuwiki/inc/lang/ro/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/ro/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/ro/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt (renamed from vendors/dokuwiki/inc/lang/ro/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt (renamed from vendors/dokuwiki/inc/lang/ro/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt (renamed from vendors/dokuwiki/inc/lang/ro/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt (renamed from vendors/dokuwiki/inc/lang/ro/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt (renamed from vendors/dokuwiki/inc/lang/ro/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt (renamed from vendors/dokuwiki/inc/lang/ro/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt (renamed from vendors/dokuwiki/inc/lang/ro/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html (renamed from vendors/dokuwiki/inc/lang/ro/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php (renamed from vendors/dokuwiki/inc/lang/ro/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt (renamed from vendors/dokuwiki/inc/lang/ro/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt (renamed from vendors/dokuwiki/inc/lang/ro/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/ro/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt (renamed from vendors/dokuwiki/inc/lang/ro/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt (renamed from vendors/dokuwiki/inc/lang/ro/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt (renamed from vendors/dokuwiki/inc/lang/ro/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/ro/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt (renamed from vendors/dokuwiki/inc/lang/ro/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt (renamed from vendors/dokuwiki/inc/lang/ro/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt (renamed from vendors/dokuwiki/inc/lang/ro/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt (renamed from vendors/dokuwiki/inc/lang/ro/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/ro/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt (renamed from vendors/dokuwiki/inc/lang/ro/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/ro/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt (renamed from vendors/dokuwiki/inc/lang/ro/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/ro/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/ro/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/ro/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/ro/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/ro/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt (renamed from vendors/dokuwiki/inc/lang/ru/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/ru/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/ru/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt (renamed from vendors/dokuwiki/inc/lang/ru/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt (renamed from vendors/dokuwiki/inc/lang/ru/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt (renamed from vendors/dokuwiki/inc/lang/ru/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt (renamed from vendors/dokuwiki/inc/lang/ru/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt (renamed from vendors/dokuwiki/inc/lang/ru/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt (renamed from vendors/dokuwiki/inc/lang/ru/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt (renamed from vendors/dokuwiki/inc/lang/ru/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html (renamed from vendors/dokuwiki/inc/lang/ru/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php (renamed from vendors/dokuwiki/inc/lang/ru/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt (renamed from vendors/dokuwiki/inc/lang/ru/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt (renamed from vendors/dokuwiki/inc/lang/ru/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/ru/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt (renamed from vendors/dokuwiki/inc/lang/ru/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt (renamed from vendors/dokuwiki/inc/lang/ru/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt (renamed from vendors/dokuwiki/inc/lang/ru/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/ru/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt (renamed from vendors/dokuwiki/inc/lang/ru/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt (renamed from vendors/dokuwiki/inc/lang/ru/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt (renamed from vendors/dokuwiki/inc/lang/ru/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt (renamed from vendors/dokuwiki/inc/lang/ru/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/ru/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt (renamed from vendors/dokuwiki/inc/lang/ru/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/ru/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt (renamed from vendors/dokuwiki/inc/lang/ru/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/ru/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/ru/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/ru/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/ru/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/ru/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt (renamed from vendors/dokuwiki/inc/lang/sk/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/sk/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt (renamed from vendors/dokuwiki/inc/lang/sk/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt (renamed from vendors/dokuwiki/inc/lang/sk/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt (renamed from vendors/dokuwiki/inc/lang/sk/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt (renamed from vendors/dokuwiki/inc/lang/sk/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt (renamed from vendors/dokuwiki/inc/lang/sk/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt (renamed from vendors/dokuwiki/inc/lang/sk/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt (renamed from vendors/dokuwiki/inc/lang/sk/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html (renamed from vendors/dokuwiki/inc/lang/sk/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php (renamed from vendors/dokuwiki/inc/lang/sk/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt (renamed from vendors/dokuwiki/inc/lang/sk/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt (renamed from vendors/dokuwiki/inc/lang/sk/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/sk/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt (renamed from vendors/dokuwiki/inc/lang/sk/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt (renamed from vendors/dokuwiki/inc/lang/sk/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt (renamed from vendors/dokuwiki/inc/lang/sk/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/sk/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt (renamed from vendors/dokuwiki/inc/lang/sk/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt (renamed from vendors/dokuwiki/inc/lang/sk/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt (renamed from vendors/dokuwiki/inc/lang/sk/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt (renamed from vendors/dokuwiki/inc/lang/sk/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/sk/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt (renamed from vendors/dokuwiki/inc/lang/sk/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/sk/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt (renamed from vendors/dokuwiki/inc/lang/sk/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/sk/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/sk/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/sk/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/sk/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/sk/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/sl/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt (renamed from vendors/dokuwiki/inc/lang/sl/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt (renamed from vendors/dokuwiki/inc/lang/sl/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt (renamed from vendors/dokuwiki/inc/lang/sl/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt (renamed from vendors/dokuwiki/inc/lang/sl/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt (renamed from vendors/dokuwiki/inc/lang/sl/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt (renamed from vendors/dokuwiki/inc/lang/sl/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php (renamed from vendors/dokuwiki/inc/lang/sl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt (renamed from vendors/dokuwiki/inc/lang/sl/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt (renamed from vendors/dokuwiki/inc/lang/sl/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/sl/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt (renamed from vendors/dokuwiki/inc/lang/sl/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt (renamed from vendors/dokuwiki/inc/lang/sl/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt (renamed from vendors/dokuwiki/inc/lang/sl/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/sl/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt (renamed from vendors/dokuwiki/inc/lang/sl/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt (renamed from vendors/dokuwiki/inc/lang/sl/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt (renamed from vendors/dokuwiki/inc/lang/sl/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt (renamed from vendors/dokuwiki/inc/lang/sl/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/sl/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt (renamed from vendors/dokuwiki/inc/lang/sl/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/sl/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt (renamed from vendors/dokuwiki/inc/lang/sl/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/sl/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt (renamed from vendors/dokuwiki/inc/lang/sr/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/sr/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt (renamed from vendors/dokuwiki/inc/lang/sr/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt (renamed from vendors/dokuwiki/inc/lang/sr/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt (renamed from vendors/dokuwiki/inc/lang/sr/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt (renamed from vendors/dokuwiki/inc/lang/sr/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt (renamed from vendors/dokuwiki/inc/lang/sr/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt (renamed from vendors/dokuwiki/inc/lang/sr/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt (renamed from vendors/dokuwiki/inc/lang/sr/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html (renamed from vendors/dokuwiki/inc/lang/sr/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php (renamed from vendors/dokuwiki/inc/lang/sr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt (renamed from vendors/dokuwiki/inc/lang/sr/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt (renamed from vendors/dokuwiki/inc/lang/sr/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/sr/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt (renamed from vendors/dokuwiki/inc/lang/sr/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt (renamed from vendors/dokuwiki/inc/lang/sr/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt (renamed from vendors/dokuwiki/inc/lang/sr/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/sr/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt (renamed from vendors/dokuwiki/inc/lang/sr/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt (renamed from vendors/dokuwiki/inc/lang/sr/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt (renamed from vendors/dokuwiki/inc/lang/sr/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt (renamed from vendors/dokuwiki/inc/lang/sr/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/sr/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt (renamed from vendors/dokuwiki/inc/lang/sr/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/sr/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt (renamed from vendors/dokuwiki/inc/lang/sr/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/sr/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/sr/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/sr/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/sr/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/sr/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt (renamed from vendors/dokuwiki/inc/lang/sv/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/sv/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/sv/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt (renamed from vendors/dokuwiki/inc/lang/sv/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt (renamed from vendors/dokuwiki/inc/lang/sv/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt (renamed from vendors/dokuwiki/inc/lang/sv/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt (renamed from vendors/dokuwiki/inc/lang/sv/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt (renamed from vendors/dokuwiki/inc/lang/sv/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt (renamed from vendors/dokuwiki/inc/lang/sv/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt (renamed from vendors/dokuwiki/inc/lang/sv/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html (renamed from vendors/dokuwiki/inc/lang/sv/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php (renamed from vendors/dokuwiki/inc/lang/sv/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt (renamed from vendors/dokuwiki/inc/lang/sv/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt (renamed from vendors/dokuwiki/inc/lang/sv/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/sv/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt (renamed from vendors/dokuwiki/inc/lang/sv/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt (renamed from vendors/dokuwiki/inc/lang/sv/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt (renamed from vendors/dokuwiki/inc/lang/sv/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/sv/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt (renamed from vendors/dokuwiki/inc/lang/sv/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt (renamed from vendors/dokuwiki/inc/lang/sv/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt (renamed from vendors/dokuwiki/inc/lang/sv/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt (renamed from vendors/dokuwiki/inc/lang/sv/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/sv/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt (renamed from vendors/dokuwiki/inc/lang/sv/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/sv/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt (renamed from vendors/dokuwiki/inc/lang/sv/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/sv/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/sv/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/sv/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/sv/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/sv/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt (renamed from vendors/dokuwiki/inc/lang/th/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/th/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/th/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt (renamed from vendors/dokuwiki/inc/lang/th/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt (renamed from vendors/dokuwiki/inc/lang/th/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt (renamed from vendors/dokuwiki/inc/lang/th/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt (renamed from vendors/dokuwiki/inc/lang/th/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt (renamed from vendors/dokuwiki/inc/lang/th/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt (renamed from vendors/dokuwiki/inc/lang/th/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt (renamed from vendors/dokuwiki/inc/lang/th/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php (renamed from vendors/dokuwiki/inc/lang/th/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt (renamed from vendors/dokuwiki/inc/lang/th/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt (renamed from vendors/dokuwiki/inc/lang/th/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/th/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt (renamed from vendors/dokuwiki/inc/lang/th/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt (renamed from vendors/dokuwiki/inc/lang/th/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt (renamed from vendors/dokuwiki/inc/lang/th/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/th/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt (renamed from vendors/dokuwiki/inc/lang/th/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt (renamed from vendors/dokuwiki/inc/lang/th/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt (renamed from vendors/dokuwiki/inc/lang/th/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt (renamed from vendors/dokuwiki/inc/lang/th/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/th/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt (renamed from vendors/dokuwiki/inc/lang/th/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/th/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt (renamed from vendors/dokuwiki/inc/lang/th/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/th/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/th/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/th/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/th/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt (renamed from vendors/dokuwiki/inc/lang/tr/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/tr/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt (renamed from vendors/dokuwiki/inc/lang/tr/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt (renamed from vendors/dokuwiki/inc/lang/tr/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt (renamed from vendors/dokuwiki/inc/lang/tr/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt (renamed from vendors/dokuwiki/inc/lang/tr/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt (renamed from vendors/dokuwiki/inc/lang/tr/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt (renamed from vendors/dokuwiki/inc/lang/tr/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt (renamed from vendors/dokuwiki/inc/lang/tr/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html (renamed from vendors/dokuwiki/inc/lang/tr/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php (renamed from vendors/dokuwiki/inc/lang/tr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt (renamed from vendors/dokuwiki/inc/lang/tr/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt (renamed from vendors/dokuwiki/inc/lang/tr/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/tr/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt (renamed from vendors/dokuwiki/inc/lang/tr/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt (renamed from vendors/dokuwiki/inc/lang/tr/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt (renamed from vendors/dokuwiki/inc/lang/tr/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/tr/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt (renamed from vendors/dokuwiki/inc/lang/tr/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt (renamed from vendors/dokuwiki/inc/lang/tr/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt (renamed from vendors/dokuwiki/inc/lang/tr/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt (renamed from vendors/dokuwiki/inc/lang/tr/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/tr/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt (renamed from vendors/dokuwiki/inc/lang/tr/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/tr/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt (renamed from vendors/dokuwiki/inc/lang/tr/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/tr/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/tr/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/tr/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/tr/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/tr/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt (renamed from vendors/dokuwiki/inc/lang/uk/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/uk/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/uk/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt (renamed from vendors/dokuwiki/inc/lang/uk/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt (renamed from vendors/dokuwiki/inc/lang/uk/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt (renamed from vendors/dokuwiki/inc/lang/uk/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt (renamed from vendors/dokuwiki/inc/lang/uk/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt (renamed from vendors/dokuwiki/inc/lang/uk/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt (renamed from vendors/dokuwiki/inc/lang/uk/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt (renamed from vendors/dokuwiki/inc/lang/uk/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html (renamed from vendors/dokuwiki/inc/lang/uk/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php (renamed from vendors/dokuwiki/inc/lang/uk/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt (renamed from vendors/dokuwiki/inc/lang/uk/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt (renamed from vendors/dokuwiki/inc/lang/uk/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/uk/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt (renamed from vendors/dokuwiki/inc/lang/uk/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt (renamed from vendors/dokuwiki/inc/lang/uk/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt (renamed from vendors/dokuwiki/inc/lang/uk/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/uk/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt (renamed from vendors/dokuwiki/inc/lang/uk/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt (renamed from vendors/dokuwiki/inc/lang/uk/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt (renamed from vendors/dokuwiki/inc/lang/uk/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt (renamed from vendors/dokuwiki/inc/lang/uk/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/uk/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt (renamed from vendors/dokuwiki/inc/lang/uk/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/uk/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt (renamed from vendors/dokuwiki/inc/lang/uk/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/uk/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/uk/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/uk/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/uk/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/uk/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt (renamed from vendors/dokuwiki/inc/lang/vi/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/vi/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt (renamed from vendors/dokuwiki/inc/lang/vi/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt (renamed from vendors/dokuwiki/inc/lang/vi/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt (renamed from vendors/dokuwiki/inc/lang/vi/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt (renamed from vendors/dokuwiki/inc/lang/vi/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt (renamed from vendors/dokuwiki/inc/lang/vi/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt (renamed from vendors/dokuwiki/inc/lang/vi/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php (renamed from vendors/dokuwiki/inc/lang/vi/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt (renamed from vendors/dokuwiki/inc/lang/vi/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt (renamed from vendors/dokuwiki/inc/lang/vi/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/vi/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt (renamed from vendors/dokuwiki/inc/lang/vi/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt (renamed from vendors/dokuwiki/inc/lang/vi/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt (renamed from vendors/dokuwiki/inc/lang/vi/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt (renamed from vendors/dokuwiki/inc/lang/vi/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt (renamed from vendors/dokuwiki/inc/lang/vi/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt (renamed from vendors/dokuwiki/inc/lang/vi/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt (renamed from vendors/dokuwiki/inc/lang/vi/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/vi/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt (renamed from vendors/dokuwiki/inc/lang/vi/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/vi/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html (renamed from vendors/dokuwiki/inc/lang/zh-tw/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php (renamed from vendors/dokuwiki/inc/lang/zh-tw/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt (renamed from vendors/dokuwiki/inc/lang/zh/admin.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt (renamed from vendors/dokuwiki/inc/lang/zh/backlinks.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt (renamed from vendors/dokuwiki/inc/lang/zh/conflict.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt (renamed from vendors/dokuwiki/inc/lang/zh/denied.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt (renamed from vendors/dokuwiki/inc/lang/zh/diff.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt (renamed from vendors/dokuwiki/inc/lang/zh/draft.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt (renamed from vendors/dokuwiki/inc/lang/zh/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt (renamed from vendors/dokuwiki/inc/lang/zh/editrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt (renamed from vendors/dokuwiki/inc/lang/zh/index.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html (renamed from vendors/dokuwiki/inc/lang/zh/install.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php (renamed from vendors/dokuwiki/inc/lang/zh/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt (renamed from vendors/dokuwiki/inc/lang/zh/locked.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt (renamed from vendors/dokuwiki/inc/lang/zh/login.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt (renamed from vendors/dokuwiki/inc/lang/zh/mailtext.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt (renamed from vendors/dokuwiki/inc/lang/zh/newpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt (renamed from vendors/dokuwiki/inc/lang/zh/norev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt (renamed from vendors/dokuwiki/inc/lang/zh/preview.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt (renamed from vendors/dokuwiki/inc/lang/zh/pwconfirm.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt (renamed from vendors/dokuwiki/inc/lang/zh/read.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt (renamed from vendors/dokuwiki/inc/lang/zh/recent.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt (renamed from vendors/dokuwiki/inc/lang/zh/register.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt (renamed from vendors/dokuwiki/inc/lang/zh/registermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt (renamed from vendors/dokuwiki/inc/lang/zh/resendpwd.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt (renamed from vendors/dokuwiki/inc/lang/zh/revisions.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt (renamed from vendors/dokuwiki/inc/lang/zh/searchpage.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt (renamed from vendors/dokuwiki/inc/lang/zh/showrev.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt (renamed from vendors/dokuwiki/inc/lang/zh/stopwords.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt (renamed from vendors/dokuwiki/inc/lang/zh/subscribermail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt (renamed from vendors/dokuwiki/inc/lang/zh/updateprofile.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt (renamed from vendors/dokuwiki/inc/lang/zh/uploadmail.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt (renamed from vendors/dokuwiki/inc/lang/zh/wordblock.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/mail.php (renamed from vendors/dokuwiki/inc/mail.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/media.php (renamed from vendors/dokuwiki/inc/media.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php (renamed from vendors/dokuwiki/inc/pageutils.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php (renamed from vendors/dokuwiki/inc/parser/code.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php (renamed from vendors/dokuwiki/inc/parser/handler.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php (renamed from vendors/dokuwiki/inc/parser/lexer.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php (renamed from vendors/dokuwiki/inc/parser/metadata.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php (renamed from vendors/dokuwiki/inc/parser/parser.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php (renamed from vendors/dokuwiki/inc/parser/renderer.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php (renamed from vendors/dokuwiki/inc/parser/xhtml.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php (renamed from vendors/dokuwiki/inc/parser/xhtmlsummary.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php (renamed from vendors/dokuwiki/inc/parserutils.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/plugin.php (renamed from vendors/dokuwiki/inc/plugin.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php (renamed from vendors/dokuwiki/inc/plugincontroller.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php (renamed from vendors/dokuwiki/inc/pluginutils.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/search.php (renamed from vendors/dokuwiki/inc/search.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/template.php (renamed from vendors/dokuwiki/inc/template.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php (renamed from vendors/dokuwiki/inc/toolbar.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/inc/utf8.php (renamed from vendors/dokuwiki/inc/utf8.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/index.php (renamed from vendors/dokuwiki/index.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/install.php (renamed from vendors/dokuwiki/install.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as (renamed from vendors/dokuwiki/lib/_fla/MultipleUpload.as)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/README (renamed from vendors/dokuwiki/lib/_fla/README)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html (renamed from vendors/dokuwiki/lib/_fla/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla (renamed from vendors/dokuwiki/lib/_fla/multipleUpload.fla)bin1812480 -> 1812480 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php (renamed from vendors/dokuwiki/lib/exe/ajax.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php (renamed from vendors/dokuwiki/lib/exe/css.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php (renamed from vendors/dokuwiki/lib/exe/detail.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php (renamed from vendors/dokuwiki/lib/exe/fetch.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html (renamed from vendors/dokuwiki/lib/exe/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php (renamed from vendors/dokuwiki/lib/exe/indexer.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php (renamed from vendors/dokuwiki/lib/exe/js.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php (renamed from vendors/dokuwiki/lib/exe/mediamanager.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf (renamed from vendors/dokuwiki/lib/exe/multipleUpload.swf)bin64561 -> 64561 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php (renamed from vendors/dokuwiki/lib/exe/opensearch.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php (renamed from vendors/dokuwiki/lib/exe/xmlrpc.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README (renamed from vendors/dokuwiki/lib/images/admin/README)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png (renamed from vendors/dokuwiki/lib/images/admin/acl.png)bin1336 -> 1336 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png (renamed from vendors/dokuwiki/lib/images/admin/config.png)bin1761 -> 1761 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png (renamed from vendors/dokuwiki/lib/images/admin/plugin.png)bin1415 -> 1415 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png (renamed from vendors/dokuwiki/lib/images/admin/popularity.png)bin1420 -> 1420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png (renamed from vendors/dokuwiki/lib/images/admin/revert.png)bin1598 -> 1598 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png (renamed from vendors/dokuwiki/lib/images/admin/usermanager.png)bin1850 -> 1850 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif (renamed from vendors/dokuwiki/lib/images/arrow_down.gif)bin273 -> 273 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif (renamed from vendors/dokuwiki/lib/images/arrow_up.gif)bin274 -> 274 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif (renamed from vendors/dokuwiki/lib/images/at.gif)bin57 -> 57 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif (renamed from vendors/dokuwiki/lib/images/blank.gif)bin42 -> 42 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/close.png (renamed from vendors/dokuwiki/lib/images/close.png)bin1345 -> 1345 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/del.png (renamed from vendors/dokuwiki/lib/images/del.png)bin433 -> 433 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png (renamed from vendors/dokuwiki/lib/images/diff.png)bin219 -> 219 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif (renamed from vendors/dokuwiki/lib/images/edit.gif)bin142 -> 142 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/error.png (renamed from vendors/dokuwiki/lib/images/error.png)bin706 -> 706 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png (renamed from vendors/dokuwiki/lib/images/fileicons/bz2.png)bin720 -> 720 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png (renamed from vendors/dokuwiki/lib/images/fileicons/c.png)bin774 -> 774 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png (renamed from vendors/dokuwiki/lib/images/fileicons/conf.png)bin717 -> 717 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png (renamed from vendors/dokuwiki/lib/images/fileicons/cpp.png)bin859 -> 859 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png (renamed from vendors/dokuwiki/lib/images/fileicons/cs.png)bin808 -> 808 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png (renamed from vendors/dokuwiki/lib/images/fileicons/css.png)bin843 -> 843 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png (renamed from vendors/dokuwiki/lib/images/fileicons/deb.png)bin716 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png (renamed from vendors/dokuwiki/lib/images/fileicons/doc.png)bin659 -> 659 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png (renamed from vendors/dokuwiki/lib/images/fileicons/file.png)bin720 -> 720 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png (renamed from vendors/dokuwiki/lib/images/fileicons/gif.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png (renamed from vendors/dokuwiki/lib/images/fileicons/gz.png)bin716 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png (renamed from vendors/dokuwiki/lib/images/fileicons/htm.png)bin748 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png (renamed from vendors/dokuwiki/lib/images/fileicons/html.png)bin748 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php (renamed from vendors/dokuwiki/lib/images/fileicons/index.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png (renamed from vendors/dokuwiki/lib/images/fileicons/java.png)bin739 -> 739 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png (renamed from vendors/dokuwiki/lib/images/fileicons/jpeg.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png (renamed from vendors/dokuwiki/lib/images/fileicons/jpg.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png (renamed from vendors/dokuwiki/lib/images/fileicons/js.png)bin809 -> 809 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png (renamed from vendors/dokuwiki/lib/images/fileicons/lua.png)bin465 -> 465 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png (renamed from vendors/dokuwiki/lib/images/fileicons/odc.png)bin749 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png (renamed from vendors/dokuwiki/lib/images/fileicons/odf.png)bin807 -> 807 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png (renamed from vendors/dokuwiki/lib/images/fileicons/odg.png)bin788 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png (renamed from vendors/dokuwiki/lib/images/fileicons/odi.png)bin788 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png (renamed from vendors/dokuwiki/lib/images/fileicons/odp.png)bin744 -> 744 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png (renamed from vendors/dokuwiki/lib/images/fileicons/ods.png)bin749 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png (renamed from vendors/dokuwiki/lib/images/fileicons/odt.png)bin577 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png (renamed from vendors/dokuwiki/lib/images/fileicons/pdf.png)bin663 -> 663 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png (renamed from vendors/dokuwiki/lib/images/fileicons/php.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png (renamed from vendors/dokuwiki/lib/images/fileicons/pl.png)bin698 -> 698 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png (renamed from vendors/dokuwiki/lib/images/fileicons/png.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png (renamed from vendors/dokuwiki/lib/images/fileicons/ppt.png)bin762 -> 762 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png (renamed from vendors/dokuwiki/lib/images/fileicons/ps.png)bin534 -> 534 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png (renamed from vendors/dokuwiki/lib/images/fileicons/py.png)bin714 -> 714 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png (renamed from vendors/dokuwiki/lib/images/fileicons/rar.png)bin631 -> 631 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png (renamed from vendors/dokuwiki/lib/images/fileicons/rb.png)bin828 -> 828 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png (renamed from vendors/dokuwiki/lib/images/fileicons/rpm.png)bin638 -> 638 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png (renamed from vendors/dokuwiki/lib/images/fileicons/rtf.png)bin474 -> 474 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png (renamed from vendors/dokuwiki/lib/images/fileicons/swf.png)bin843 -> 843 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png (renamed from vendors/dokuwiki/lib/images/fileicons/sxc.png)bin749 -> 749 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png (renamed from vendors/dokuwiki/lib/images/fileicons/sxd.png)bin788 -> 788 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png (renamed from vendors/dokuwiki/lib/images/fileicons/sxi.png)bin744 -> 744 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png (renamed from vendors/dokuwiki/lib/images/fileicons/sxw.png)bin577 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png (renamed from vendors/dokuwiki/lib/images/fileicons/tar.png)bin747 -> 747 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png (renamed from vendors/dokuwiki/lib/images/fileicons/tgz.png)bin716 -> 716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png (renamed from vendors/dokuwiki/lib/images/fileicons/txt.png)bin542 -> 542 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png (renamed from vendors/dokuwiki/lib/images/fileicons/xls.png)bin731 -> 731 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png (renamed from vendors/dokuwiki/lib/images/fileicons/xml.png)bin475 -> 475 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png (renamed from vendors/dokuwiki/lib/images/fileicons/zip.png)bin874 -> 874 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/history.png (renamed from vendors/dokuwiki/lib/images/history.png)bin202 -> 202 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/index.html (renamed from vendors/dokuwiki/lib/images/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/info.png (renamed from vendors/dokuwiki/lib/images/info.png)bin783 -> 783 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png (renamed from vendors/dokuwiki/lib/images/interwiki.png)bin1089 -> 1089 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif (renamed from vendors/dokuwiki/lib/images/interwiki/amazon.de.gif)bin882 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif (renamed from vendors/dokuwiki/lib/images/interwiki/amazon.gif)bin882 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif (renamed from vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif)bin882 -> 882 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif (renamed from vendors/dokuwiki/lib/images/interwiki/coral.gif)bin85 -> 85 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif (renamed from vendors/dokuwiki/lib/images/interwiki/doku.gif)bin257 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif (renamed from vendors/dokuwiki/lib/images/interwiki/dokubug.gif)bin166 -> 166 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif (renamed from vendors/dokuwiki/lib/images/interwiki/google.gif)bin980 -> 980 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif (renamed from vendors/dokuwiki/lib/images/interwiki/meatball.gif)bin1100 -> 1100 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif (renamed from vendors/dokuwiki/lib/images/interwiki/phpfn.gif)bin330 -> 330 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif (renamed from vendors/dokuwiki/lib/images/interwiki/sb.gif)bin886 -> 886 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif (renamed from vendors/dokuwiki/lib/images/interwiki/wiki.gif)bin909 -> 909 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif (renamed from vendors/dokuwiki/lib/images/interwiki/wp.gif)bin680 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif (renamed from vendors/dokuwiki/lib/images/interwiki/wpde.gif)bin680 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif (renamed from vendors/dokuwiki/lib/images/interwiki/wpes.gif)bin680 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif (renamed from vendors/dokuwiki/lib/images/interwiki/wpfr.gif)bin680 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif (renamed from vendors/dokuwiki/lib/images/interwiki/wpjp.gif)bin680 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif (renamed from vendors/dokuwiki/lib/images/interwiki/wpmeta.gif)bin680 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif (renamed from vendors/dokuwiki/lib/images/interwiki/wppl.gif)bin680 -> 680 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif (renamed from vendors/dokuwiki/lib/images/larger.gif)bin87 -> 87 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png (renamed from vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png)bin5281 -> 5281 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png (renamed from vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png)bin5460 -> 5460 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png (renamed from vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png)bin5145 -> 5145 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png (renamed from vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png)bin4880 -> 4880 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png (renamed from vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png)bin5083 -> 5083 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png (renamed from vendors/dokuwiki/lib/images/license/badge/cc-by.png)bin4739 -> 4739 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png (renamed from vendors/dokuwiki/lib/images/license/badge/cc.png)bin958 -> 958 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png (renamed from vendors/dokuwiki/lib/images/license/badge/gnufdl.png)bin1748 -> 1748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png (renamed from vendors/dokuwiki/lib/images/license/badge/publicdomain.png)bin4962 -> 4962 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png (renamed from vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png)bin678 -> 678 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png (renamed from vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png)bin686 -> 686 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png (renamed from vendors/dokuwiki/lib/images/license/button/cc-by-nc.png)bin663 -> 663 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png (renamed from vendors/dokuwiki/lib/images/license/button/cc-by-nd.png)bin658 -> 658 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png (renamed from vendors/dokuwiki/lib/images/license/button/cc-by-sa.png)bin661 -> 661 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png (renamed from vendors/dokuwiki/lib/images/license/button/cc-by.png)bin629 -> 629 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png (renamed from vendors/dokuwiki/lib/images/license/button/cc.png)bin728 -> 728 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png (renamed from vendors/dokuwiki/lib/images/license/button/gnufdl.png)bin839 -> 839 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png (renamed from vendors/dokuwiki/lib/images/license/button/publicdomain.png)bin621 -> 621 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif (renamed from vendors/dokuwiki/lib/images/list-minus.gif)bin64 -> 64 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif (renamed from vendors/dokuwiki/lib/images/list-plus.gif)bin67 -> 67 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif (renamed from vendors/dokuwiki/lib/images/loading.gif)bin1876 -> 1876 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png (renamed from vendors/dokuwiki/lib/images/magnifier.png)bin615 -> 615 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif (renamed from vendors/dokuwiki/lib/images/minus.gif)bin858 -> 858 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png (renamed from vendors/dokuwiki/lib/images/multiupload.png)bin698 -> 698 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png (renamed from vendors/dokuwiki/lib/images/notify.png)bin789 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png (renamed from vendors/dokuwiki/lib/images/ns.png)bin853 -> 853 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/page.png (renamed from vendors/dokuwiki/lib/images/page.png)bin635 -> 635 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png (renamed from vendors/dokuwiki/lib/images/pencil.png)bin450 -> 450 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif (renamed from vendors/dokuwiki/lib/images/plus.gif)bin860 -> 860 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif (renamed from vendors/dokuwiki/lib/images/smaller.gif)bin86 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif (renamed from vendors/dokuwiki/lib/images/smileys/delete.gif)bin1421 -> 1421 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif (renamed from vendors/dokuwiki/lib/images/smileys/fixme.gif)bin1435 -> 1435 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_arrow.gif)bin170 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif)bin172 -> 172 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_confused.gif)bin171 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_cool.gif)bin172 -> 172 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_cry.gif)bin498 -> 498 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_doubt.gif)bin990 -> 990 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif)bin992 -> 992 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_eek.gif)bin170 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_evil.gif)bin236 -> 236 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif)bin236 -> 236 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_frown.gif)bin171 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_fun.gif)bin590 -> 590 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_idea.gif)bin176 -> 176 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif)bin991 -> 991 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_lol.gif)bin336 -> 336 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif)bin349 -> 349 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_neutral.gif)bin171 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_question.gif)bin248 -> 248 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_razz.gif)bin176 -> 176 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_redface.gif)bin650 -> 650 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif)bin485 -> 485 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_sad.gif)bin171 -> 171 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_silenced.gif)bin231 -> 231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_smile.gif)bin174 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_smile2.gif)bin174 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_surprised.gif)bin174 -> 174 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_twisted.gif)bin238 -> 238 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif (renamed from vendors/dokuwiki/lib/images/smileys/icon_wink.gif)bin170 -> 170 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/success.png (renamed from vendors/dokuwiki/lib/images/success.png)bin816 -> 816 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif (renamed from vendors/dokuwiki/lib/images/throbber.gif)bin875 -> 875 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png (renamed from vendors/dokuwiki/lib/images/toolbar/bold.png)bin433 -> 433 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png (renamed from vendors/dokuwiki/lib/images/toolbar/chars.png)bin619 -> 619 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png (renamed from vendors/dokuwiki/lib/images/toolbar/h.png)bin360 -> 360 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png (renamed from vendors/dokuwiki/lib/images/toolbar/h1.png)bin420 -> 420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png (renamed from vendors/dokuwiki/lib/images/toolbar/h2.png)bin442 -> 442 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png (renamed from vendors/dokuwiki/lib/images/toolbar/h3.png)bin452 -> 452 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png (renamed from vendors/dokuwiki/lib/images/toolbar/h4.png)bin432 -> 432 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png (renamed from vendors/dokuwiki/lib/images/toolbar/h5.png)bin440 -> 440 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png (renamed from vendors/dokuwiki/lib/images/toolbar/hequal.png)bin426 -> 426 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png (renamed from vendors/dokuwiki/lib/images/toolbar/hminus.png)bin538 -> 538 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png (renamed from vendors/dokuwiki/lib/images/toolbar/hplus.png)bin520 -> 520 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png (renamed from vendors/dokuwiki/lib/images/toolbar/hr.png)bin329 -> 329 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png (renamed from vendors/dokuwiki/lib/images/toolbar/image.png)bin625 -> 625 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png (renamed from vendors/dokuwiki/lib/images/toolbar/italic.png)bin322 -> 322 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png (renamed from vendors/dokuwiki/lib/images/toolbar/link.png)bin579 -> 579 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png (renamed from vendors/dokuwiki/lib/images/toolbar/linkextern.png)bin962 -> 962 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png (renamed from vendors/dokuwiki/lib/images/toolbar/mono.png)bin385 -> 385 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png (renamed from vendors/dokuwiki/lib/images/toolbar/ol.png)bin403 -> 403 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png (renamed from vendors/dokuwiki/lib/images/toolbar/sig.png)bin569 -> 569 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png (renamed from vendors/dokuwiki/lib/images/toolbar/smiley.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png (renamed from vendors/dokuwiki/lib/images/toolbar/strike.png)bin415 -> 415 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png (renamed from vendors/dokuwiki/lib/images/toolbar/ul.png)bin383 -> 383 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png (renamed from vendors/dokuwiki/lib/images/toolbar/underline.png)bin375 -> 375 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png (renamed from vendors/dokuwiki/lib/images/trash.png)bin476 -> 476 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/up.png (renamed from vendors/dokuwiki/lib/images/up.png)bin376 -> 376 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif (renamed from vendors/dokuwiki/lib/images/wrap.gif)bin86 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/index.html (renamed from vendors/dokuwiki/lib/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php (renamed from vendors/dokuwiki/lib/plugins/acl/admin.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php (renamed from vendors/dokuwiki/lib/plugins/acl/ajax.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt (renamed from vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php (renamed from vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png (renamed from vendors/dokuwiki/lib/plugins/acl/pix/group.png)bin753 -> 753 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png (renamed from vendors/dokuwiki/lib/plugins/acl/pix/ns.png)bin853 -> 853 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png (renamed from vendors/dokuwiki/lib/plugins/acl/pix/page.png)bin635 -> 635 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png (renamed from vendors/dokuwiki/lib/plugins/acl/pix/user.png)bin706 -> 706 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js (renamed from vendors/dokuwiki/lib/plugins/acl/script.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css (renamed from vendors/dokuwiki/lib/plugins/acl/style.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php (renamed from vendors/dokuwiki/lib/plugins/action.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php (renamed from vendors/dokuwiki/lib/plugins/admin.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css (renamed from vendors/dokuwiki/lib/plugins/box/print.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css (renamed from vendors/dokuwiki/lib/plugins/box/style.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php (renamed from vendors/dokuwiki/lib/plugins/box/syntax.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html (renamed from vendors/dokuwiki/lib/plugins/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING (renamed from vendors/dokuwiki/lib/plugins/indexmenu/COPYING)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS (renamed from vendors/dokuwiki/lib/plugins/indexmenu/CREDITS)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt (renamed from vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/action.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/admin.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/ajax.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog (renamed from vendors/dokuwiki/lib/plugins/indexmenu/changelog)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js (renamed from vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js (renamed from vendors/dokuwiki/lib/plugins/indexmenu/edit.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif)bin64 -> 64 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif)bin578 -> 578 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif)bin62 -> 62 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif)bin352 -> 352 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif)bin572 -> 572 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif)bin577 -> 577 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif)bin354 -> 354 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif)bin69 -> 69 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif)bin66 -> 66 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif)bin66 -> 66 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif)bin86 -> 86 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif)bin85 -> 85 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif)bin861 -> 861 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif)bin870 -> 870 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif)bin565 -> 565 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif)bin89 -> 89 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif)bin88 -> 88 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif)bin275 -> 275 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif)bin1829 -> 1829 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif)bin420 -> 420 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif)bin81 -> 81 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif (renamed from vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif)bin74 -> 74 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js (renamed from vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js (renamed from vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js (renamed from vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js (renamed from vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js (renamed from vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js (renamed from vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js (renamed from vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js (renamed from vendors/dokuwiki/lib/plugins/indexmenu/script.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css (renamed from vendors/dokuwiki/lib/plugins/indexmenu/style.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php (renamed from vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php (renamed from vendors/dokuwiki/lib/plugins/info/syntax.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png (renamed from vendors/dokuwiki/lib/plugins/note/images/important.png)bin2250 -> 2250 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png (renamed from vendors/dokuwiki/lib/plugins/note/images/note.png)bin2520 -> 2520 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png (renamed from vendors/dokuwiki/lib/plugins/note/images/tb_important.png)bin1366 -> 1366 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png (renamed from vendors/dokuwiki/lib/plugins/note/images/tb_note.png)bin1461 -> 1461 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png (renamed from vendors/dokuwiki/lib/plugins/note/images/tb_tip.png)bin1441 -> 1441 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png (renamed from vendors/dokuwiki/lib/plugins/note/images/tb_warning.png)bin1870 -> 1870 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png (renamed from vendors/dokuwiki/lib/plugins/note/images/tip.png)bin2909 -> 2909 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png (renamed from vendors/dokuwiki/lib/plugins/note/images/warning.png)bin3249 -> 3249 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt (renamed from vendors/dokuwiki/lib/plugins/note/info.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js (renamed from vendors/dokuwiki/lib/plugins/note/script.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css (renamed from vendors/dokuwiki/lib/plugins/note/style.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php (renamed from vendors/dokuwiki/lib/plugins/note/syntax.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt (renamed from vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt (renamed from vendors/dokuwiki/lib/plugins/odt/README.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php (renamed from vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php (renamed from vendors/dokuwiki/lib/plugins/odt/action.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php (renamed from vendors/dokuwiki/lib/plugins/odt/conf/default.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php (renamed from vendors/dokuwiki/lib/plugins/odt/conf/metadata.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt (renamed from vendors/dokuwiki/lib/plugins/odt/info.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php (renamed from vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php (renamed from vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php (renamed from vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php (renamed from vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php (renamed from vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php (renamed from vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php (renamed from vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php (renamed from vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png (renamed from vendors/dokuwiki/lib/plugins/odt/odt.png)bin3320 -> 3320 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php (renamed from vendors/dokuwiki/lib/plugins/odt/renderer.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml (renamed from vendors/dokuwiki/lib/plugins/odt/styles.xml)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php (renamed from vendors/dokuwiki/lib/plugins/odt/syntax.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php (renamed from vendors/dokuwiki/lib/plugins/revert/admin.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt (renamed from vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php (renamed from vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/README)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif)bin1574 -> 1574 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3 (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3)bin2508 -> 2508 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf)bin2198 -> 2198 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png)bin10257 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif)bin2295 -> 2295 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif)bin3428 -> 3428 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif)bin591 -> 591 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png)bin27487 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png)bin10257 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif)bin10119 -> 10119 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg)bin4451 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png)bin27487 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png)bin789 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png)bin748 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png)bin10257 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg)bin4451 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png)bin27487 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png)bin16746 -> 16746 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png)bin789 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png)bin748 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png)bin10257 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png)bin27487 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png)bin757 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png)bin5999 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png)bin6487 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png)bin14135 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png)bin451 -> 451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png)bin450 -> 450 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf)bin6114 -> 6114 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png)bin92480 -> 92480 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico)bin1406 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png)bin9760 -> 9760 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png)bin460 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png)bin344 -> 344 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png)bin1004 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png)bin178955 -> 178955 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png)bin1117 -> 1117 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif)bin49 -> 49 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png)bin41109 -> 41109 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png)bin1943 -> 1943 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png)bin9215 -> 9215 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png)bin1093 -> 1093 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png)bin734 -> 734 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png)bin1071 -> 1071 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png)bin74839 -> 74839 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png)bin10257 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg)bin6779 -> 6779 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg)bin2215 -> 2215 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png)bin27487 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png)bin1117 -> 1117 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg)bin48642 -> 48642 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png)bin1004 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png)bin10257 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png)bin27487 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png)bin757 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png)bin5999 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png)bin6487 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png)bin14135 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png)bin501 -> 501 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png)bin2999 -> 2999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png)bin1824 -> 1824 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png)bin3735 -> 3735 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico)bin1406 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png)bin16331 -> 16331 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png)bin460 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png)bin247 -> 247 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif)bin1364 -> 1364 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg)bin30942 -> 30942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png)bin7144 -> 7144 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif)bin4237 -> 4237 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png)bin10257 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png)bin594 -> 594 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg)bin31239 -> 31239 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png)bin27487 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png)bin1004 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png)bin10257 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png)bin27487 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png)bin757 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png)bin5958 -> 5958 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png)bin5648 -> 5648 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png)bin11708 -> 11708 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png)bin397 -> 397 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png)bin401 -> 401 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z)bin2889 -> 2889 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png)bin27159 -> 27159 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png)bin27171 -> 27171 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico)bin1406 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png)bin11222 -> 11222 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png)bin460 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png)bin654 -> 654 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png)bin10257 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png)bin27487 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif)bin1716 -> 1716 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg)bin3571 -> 3571 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif)bin3180 -> 3180 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png)bin1004 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png)bin10257 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png)bin27487 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png)bin757 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png)bin5999 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png)bin15049 -> 15049 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png)bin6487 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png)bin14135 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png)bin389 -> 389 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png)bin373 -> 373 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png)bin9066 -> 9066 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico)bin318 -> 318 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png)bin1312 -> 1312 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png)bin460 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png)bin384 -> 384 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg)bin3648 -> 3648 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png)bin10257 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png)bin30926 -> 30926 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg)bin4451 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png)bin34238 -> 34238 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png)bin49918 -> 49918 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png)bin789 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png)bin748 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png)bin81350 -> 81350 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png)bin12943 -> 12943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png)bin41837 -> 41837 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg)bin4451 -> 4451 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png)bin62136 -> 62136 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png)bin27487 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png)bin789 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png)bin226 -> 226 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png)bin757 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png)bin748 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png)bin32851 -> 32851 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png)bin1004 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png)bin10257 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png)bin27487 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png)bin757 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png)bin5999 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png)bin6487 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png)bin14135 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png)bin604 -> 604 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png)bin605 -> 605 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png)bin51209 -> 51209 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico)bin1406 -> 1406 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png)bin14675 -> 14675 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png)bin460 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png)bin309 -> 309 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png)bin1004 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png)bin10257 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png)bin27487 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png)bin757 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png)bin1705 -> 1705 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png)bin1700 -> 1700 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png)bin358052 -> 358052 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico)bin1150 -> 1150 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png)bin13015 -> 13015 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png)bin460 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png)bin309 -> 309 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png)bin1004 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png)bin10257 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png)bin27487 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png)bin757 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png)bin5999 -> 5999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png)bin6487 -> 6487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png)bin14135 -> 14135 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png)bin451 -> 451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png)bin450 -> 450 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf)bin6114 -> 6114 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png)bin92480 -> 92480 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico)bin1406 -> 1406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg)bin7126 -> 7126 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png)bin460 -> 460 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png)bin344 -> 344 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png)bin1004 -> 1004 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png)bin10257 -> 10257 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png)bin27487 -> 27487 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico)bin3638 -> 3638 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png)bin757 -> 757 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png)bin269 -> 269 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png)bin273 -> 273 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png)bin14732 -> 14732 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png)bin670 -> 670 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png)bin422 -> 422 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png)bin2999 -> 2999 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png)bin447 -> 447 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png)bin15020 -> 15020 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png)bin993 -> 993 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg)bin9069 -> 9069 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif)bin49 -> 49 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif)bin10119 -> 10119 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif)bin5087 -> 5087 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png)bin4494 -> 4494 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png)bin789 -> 789 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png)bin748 -> 748 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png)bin1183 -> 1183 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png)bin1227 -> 1227 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png)bin1245 -> 1245 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png)bin1076 -> 1076 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png)bin1106 -> 1106 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png)bin1117 -> 1117 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png)bin10257 -> 10257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif)bin1373 -> 1373 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif)bin920 -> 920 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png)bin1943 -> 1943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png)bin867 -> 867 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png)bin877 -> 877 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png)bin1079 -> 1079 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png)bin1093 -> 1093 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg)bin4451 -> 4451 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif)bin1373 -> 1373 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png)bin27487 -> 27487 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png)bin975 -> 975 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png)bin1001 -> 1001 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png)bin908 -> 908 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png)bin1622 -> 1622 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png)bin1665 -> 1665 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png)bin1711 -> 1711 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png)bin713 -> 713 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png)bin734 -> 734 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png)bin755 -> 755 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png)bin789 -> 789 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png)bin732 -> 732 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png)bin726 -> 726 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png)bin757 -> 757 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png)bin748 -> 748 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css)0
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif)bin3143 -> 3143 bytes
-rwxr-xr-xmod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif)bin1128 -> 1128 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png)bin1039 -> 1039 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png)bin1071 -> 1071 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png)bin943 -> 943 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png)bin968 -> 968 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png (renamed from vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png)bin1004 -> 1004 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php (renamed from vendors/dokuwiki/lib/plugins/syntax.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js (renamed from vendors/dokuwiki/lib/plugins/tbt/script.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css (renamed from vendors/dokuwiki/lib/plugins/tbt/style.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php (renamed from vendors/dokuwiki/lib/plugins/tbt/syntax.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/admin.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png (renamed from vendors/dokuwiki/lib/plugins/usermanager/images/search.png)bin733 -> 733 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt (renamed from vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js (renamed from vendors/dokuwiki/lib/plugins/usermanager/script.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css (renamed from vendors/dokuwiki/lib/plugins/usermanager/style.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js (renamed from vendors/dokuwiki/lib/scripts/ajax.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js (renamed from vendors/dokuwiki/lib/scripts/cookie.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js (renamed from vendors/dokuwiki/lib/scripts/drag.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js (renamed from vendors/dokuwiki/lib/scripts/edit.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js (renamed from vendors/dokuwiki/lib/scripts/events.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js (renamed from vendors/dokuwiki/lib/scripts/helpers.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html (renamed from vendors/dokuwiki/lib/scripts/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js (renamed from vendors/dokuwiki/lib/scripts/index.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js (renamed from vendors/dokuwiki/lib/scripts/linkwiz.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js (renamed from vendors/dokuwiki/lib/scripts/media.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc (renamed from vendors/dokuwiki/lib/scripts/pngbehavior.htc)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js (renamed from vendors/dokuwiki/lib/scripts/script.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js (renamed from vendors/dokuwiki/lib/scripts/textselection.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js (renamed from vendors/dokuwiki/lib/scripts/toolbar.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js (renamed from vendors/dokuwiki/lib/scripts/tw-sack.js)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css (renamed from vendors/dokuwiki/lib/styles/feed.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html (renamed from vendors/dokuwiki/lib/styles/index.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css (renamed from vendors/dokuwiki/lib/styles/style.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php (renamed from vendors/dokuwiki/lib/tpl/default/conf/default.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php (renamed from vendors/dokuwiki/lib/tpl/default/conf/metadata.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css (renamed from vendors/dokuwiki/lib/tpl/default/design.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php (renamed from vendors/dokuwiki/lib/tpl/default/detail.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html (renamed from vendors/dokuwiki/lib/tpl/default/footer.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif (renamed from vendors/dokuwiki/lib/tpl/default/images/bullet.gif)bin50 -> 50 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif (renamed from vendors/dokuwiki/lib/tpl/default/images/button-cc.gif)bin1231 -> 1231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png (renamed from vendors/dokuwiki/lib/tpl/default/images/button-css.png)bin299 -> 299 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif (renamed from vendors/dokuwiki/lib/tpl/default/images/button-donate.gif)bin187 -> 187 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png (renamed from vendors/dokuwiki/lib/tpl/default/images/button-dw.png)bin427 -> 427 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif (renamed from vendors/dokuwiki/lib/tpl/default/images/button-php.gif)bin269 -> 269 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png (renamed from vendors/dokuwiki/lib/tpl/default/images/button-rss.png)bin280 -> 280 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png (renamed from vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png)bin321 -> 321 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png (renamed from vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png)bin257 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif (renamed from vendors/dokuwiki/lib/tpl/default/images/closed.gif)bin54 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico (renamed from vendors/dokuwiki/lib/tpl/default/images/favicon.ico)bin7406 -> 7406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png (renamed from vendors/dokuwiki/lib/tpl/default/images/inputshadow.png)bin155 -> 155 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif (renamed from vendors/dokuwiki/lib/tpl/default/images/link_icon.gif)bin942 -> 942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif (renamed from vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif)bin918 -> 918 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif (renamed from vendors/dokuwiki/lib/tpl/default/images/open.gif)bin54 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif (renamed from vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif)bin34 -> 34 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif (renamed from vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif)bin810 -> 810 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif (renamed from vendors/dokuwiki/lib/tpl/default/images/windows.gif)bin223 -> 223 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css (renamed from vendors/dokuwiki/lib/tpl/default/layout.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php (renamed from vendors/dokuwiki/lib/tpl/default/main.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php (renamed from vendors/dokuwiki/lib/tpl/default/main_index.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css (renamed from vendors/dokuwiki/lib/tpl/default/media.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php (renamed from vendors/dokuwiki/lib/tpl/default/media.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php (renamed from vendors/dokuwiki/lib/tpl/default/mediaedit.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php (renamed from vendors/dokuwiki/lib/tpl/default/mediamanager.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php (renamed from vendors/dokuwiki/lib/tpl/default/mediaref.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css (renamed from vendors/dokuwiki/lib/tpl/default/print.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css (renamed from vendors/dokuwiki/lib/tpl/default/rtl.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css (renamed from vendors/dokuwiki/lib/tpl/default/sidebar.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php (renamed from vendors/dokuwiki/lib/tpl/default/sidebar.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css (renamed from vendors/dokuwiki/lib/tpl/default/sidebar_print.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini (renamed from vendors/dokuwiki/lib/tpl/default/style.ini)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php (renamed from vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css (renamed from vendors/dokuwiki/lib/tpl/default2/_admin.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css (renamed from vendors/dokuwiki/lib/tpl/default2/_linkwiz.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css (renamed from vendors/dokuwiki/lib/tpl/default2/design.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php (renamed from vendors/dokuwiki/lib/tpl/default2/detail.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html (renamed from vendors/dokuwiki/lib/tpl/default2/footer.html)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png (renamed from vendors/dokuwiki/lib/tpl/default2/images/UWEB.png)bin1138 -> 1138 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png (renamed from vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png)bin1123 -> 1123 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif (renamed from vendors/dokuwiki/lib/tpl/default2/images/bullet.gif)bin50 -> 50 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif (renamed from vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif)bin1231 -> 1231 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png (renamed from vendors/dokuwiki/lib/tpl/default2/images/button-css.png)bin299 -> 299 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif (renamed from vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif)bin187 -> 187 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png (renamed from vendors/dokuwiki/lib/tpl/default2/images/button-dw.png)bin427 -> 427 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif (renamed from vendors/dokuwiki/lib/tpl/default2/images/button-php.gif)bin207 -> 207 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png (renamed from vendors/dokuwiki/lib/tpl/default2/images/button-rss.png)bin280 -> 280 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png (renamed from vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png)bin321 -> 321 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png (renamed from vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png)bin257 -> 257 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif (renamed from vendors/dokuwiki/lib/tpl/default2/images/closed.gif)bin54 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico (renamed from vendors/dokuwiki/lib/tpl/default2/images/favicon.ico)bin7406 -> 7406 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png (renamed from vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png)bin155 -> 155 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif (renamed from vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif)bin942 -> 942 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif (renamed from vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif)bin918 -> 918 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif (renamed from vendors/dokuwiki/lib/tpl/default2/images/open.gif)bin54 -> 54 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif (renamed from vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif)bin810 -> 810 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif (renamed from vendors/dokuwiki/lib/tpl/default2/images/windows.gif)bin223 -> 223 bytes
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css (renamed from vendors/dokuwiki/lib/tpl/default2/layout.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php (renamed from vendors/dokuwiki/lib/tpl/default2/main.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php (renamed from vendors/dokuwiki/lib/tpl/default2/main_index.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css (renamed from vendors/dokuwiki/lib/tpl/default2/media.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php (renamed from vendors/dokuwiki/lib/tpl/default2/mediamanager.php)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css (renamed from vendors/dokuwiki/lib/tpl/default2/print.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css (renamed from vendors/dokuwiki/lib/tpl/default2/rtl.css)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini (renamed from vendors/dokuwiki/lib/tpl/default2/style.ini)0
-rw-r--r--mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php (renamed from vendors/dokuwiki/lib/tpl/index.php)0
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/css.php (renamed from views/default/dokuwiki/css.php)0
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/grouppage.php (renamed from views/default/dokuwiki/grouppage.php)0
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/index.php (renamed from views/default/dokuwiki/index.php)0
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/metatags.php (renamed from views/default/dokuwiki/metatags.php)0
-rw-r--r--mod/dokuwiki/views/default/dokuwiki/sidebar.php (renamed from views/default/dokuwiki/sidebar.php)0
-rw-r--r--mod/dokuwiki/views/default/object/dokuwiki.php (renamed from views/default/object/dokuwiki.php)0
-rw-r--r--mod/dokuwiki/views/default/river/dokuwiki.php (renamed from views/default/river/dokuwiki.php)0
-rw-r--r--mod/embed/README.txt76
-rw-r--r--mod/embed/languages/en.php21
-rw-r--r--mod/embed/manifest.xml22
-rw-r--r--mod/embed/start.php153
-rw-r--r--mod/embed/views/default/embed/addcontentjs.php7
-rw-r--r--mod/embed/views/default/embed/css.php37
-rw-r--r--mod/embed/views/default/embed/item.php39
-rw-r--r--mod/embed/views/default/embed/layout.php40
-rw-r--r--mod/embed/views/default/embed/list.php58
-rw-r--r--mod/embed/views/default/js/embed/embed.php134
-rw-r--r--mod/embed/views/default/navigation/menu/embed.php18
-rw-r--r--mod/externalpages/actions/edit.php35
-rw-r--r--mod/externalpages/languages/en.php27
-rw-r--r--mod/externalpages/manifest.xml15
-rw-r--r--mod/externalpages/start.php102
-rw-r--r--mod/externalpages/views/default/admin/appearance/expages.php10
-rw-r--r--mod/externalpages/views/default/expages/menu.php23
-rw-r--r--mod/externalpages/views/default/expages/wrapper.php16
-rw-r--r--mod/externalpages/views/default/forms/expages/edit.php58
-rw-r--r--mod/file/actions/file/delete.php33
-rw-r--r--mod/file/actions/file/download.php11
-rw-r--r--mod/file/actions/file/upload.php207
-rw-r--r--mod/file/classes/FilePluginFile.php31
-rw-r--r--mod/file/download.php12
-rw-r--r--mod/file/graphics/icons/application.gifbin0 -> 2465 bytes
-rw-r--r--mod/file/graphics/icons/application_lrg.gifbin0 -> 7781 bytes
-rw-r--r--mod/file/graphics/icons/archive.gifbin0 -> 2419 bytes
-rw-r--r--mod/file/graphics/icons/archive_lrg.gifbin0 -> 7918 bytes
-rw-r--r--mod/file/graphics/icons/excel.gifbin0 -> 2509 bytes
-rw-r--r--mod/file/graphics/icons/excel_lrg.gifbin0 -> 7571 bytes
-rw-r--r--mod/file/graphics/icons/general.gifbin0 -> 1528 bytes
-rw-r--r--mod/file/graphics/icons/general_lrg.gifbin0 -> 4594 bytes
-rw-r--r--mod/file/graphics/icons/music.gifbin0 -> 2297 bytes
-rw-r--r--mod/file/graphics/icons/music_lrg.gifbin0 -> 6748 bytes
-rw-r--r--mod/file/graphics/icons/openoffice.gifbin0 -> 2313 bytes
-rw-r--r--mod/file/graphics/icons/openoffice_lrg.gifbin0 -> 6617 bytes
-rw-r--r--mod/file/graphics/icons/pages.gifbin0 -> 2766 bytes
-rw-r--r--mod/file/graphics/icons/pages_lrg.gifbin0 -> 10234 bytes
-rw-r--r--mod/file/graphics/icons/pdf.gifbin0 -> 2197 bytes
-rw-r--r--mod/file/graphics/icons/pdf_lrg.gifbin0 -> 6014 bytes
-rw-r--r--mod/file/graphics/icons/ppt.gifbin0 -> 2495 bytes
-rw-r--r--mod/file/graphics/icons/ppt_lrg.gifbin0 -> 7423 bytes
-rw-r--r--mod/file/graphics/icons/text.gifbin0 -> 2881 bytes
-rw-r--r--mod/file/graphics/icons/text_lrg.gifbin0 -> 9855 bytes
-rw-r--r--mod/file/graphics/icons/vcard.gifbin0 -> 2385 bytes
-rw-r--r--mod/file/graphics/icons/vcard_lrg.gifbin0 -> 6798 bytes
-rw-r--r--mod/file/graphics/icons/video.gifbin0 -> 2603 bytes
-rw-r--r--mod/file/graphics/icons/video_lrg.gifbin0 -> 7319 bytes
-rw-r--r--mod/file/graphics/icons/word.gifbin0 -> 2479 bytes
-rw-r--r--mod/file/graphics/icons/word_lrg.gifbin0 -> 7350 bytes
-rw-r--r--mod/file/languages/en.php118
-rw-r--r--mod/file/lib/file.php45
-rw-r--r--mod/file/manifest.xml18
-rw-r--r--mod/file/pages/file/download.php38
-rw-r--r--mod/file/pages/file/edit.php40
-rw-r--r--mod/file/pages/file/friends.php36
-rw-r--r--mod/file/pages/file/owner.php58
-rw-r--r--mod/file/pages/file/search.php99
-rw-r--r--mod/file/pages/file/upload.php37
-rw-r--r--mod/file/pages/file/view.php46
-rw-r--r--mod/file/pages/file/world.php36
-rw-r--r--mod/file/start.php416
-rw-r--r--mod/file/thumbnail.php57
-rw-r--r--mod/file/views/default/embed/file_upload/content.php17
-rw-r--r--mod/file/views/default/file/css.php15
-rw-r--r--mod/file/views/default/file/group_module.php45
-rw-r--r--mod/file/views/default/file/sidebar.php14
-rw-r--r--mod/file/views/default/file/specialcontent/image/default.php20
-rw-r--r--mod/file/views/default/file/typecloud.php50
-rw-r--r--mod/file/views/default/forms/file/upload.php68
-rw-r--r--mod/file/views/default/icon/object/file.php54
-rw-r--r--mod/file/views/default/object/file.php107
-rw-r--r--mod/file/views/default/river/object/file/create.php13
-rw-r--r--mod/file/views/default/widgets/filerepo/content.php33
-rw-r--r--mod/file/views/default/widgets/filerepo/edit.php25
-rw-r--r--mod/file/views/rss/file/enclosure.php16
-rw-r--r--mod/garbagecollector/languages/en.php25
-rw-r--r--mod/garbagecollector/manifest.xml17
-rw-r--r--mod/garbagecollector/start.php63
-rw-r--r--mod/garbagecollector/views/default/plugins/garbagecollector/settings.php28
-rw-r--r--mod/groups/actions/discussion/delete.php29
-rw-r--r--mod/groups/actions/discussion/reply/delete.php26
-rw-r--r--mod/groups/actions/discussion/reply/save.php58
-rw-r--r--mod/groups/actions/discussion/save.php75
-rw-r--r--mod/groups/actions/groups/delete.php42
-rw-r--r--mod/groups/actions/groups/edit.php207
-rw-r--r--mod/groups/actions/groups/featured.php27
-rw-r--r--mod/groups/actions/groups/membership/add.php42
-rw-r--r--mod/groups/actions/groups/membership/delete_invite.php24
-rw-r--r--mod/groups/actions/groups/membership/delete_request.php20
-rw-r--r--mod/groups/actions/groups/membership/invite.php51
-rw-r--r--mod/groups/actions/groups/membership/join.php72
-rw-r--r--mod/groups/actions/groups/membership/leave.php36
-rw-r--r--mod/groups/actions/groups/membership/remove.php31
-rw-r--r--mod/groups/graphics/defaultlarge.gifbin0 -> 4939 bytes
-rw-r--r--mod/groups/graphics/defaultmedium.gifbin0 -> 2336 bytes
-rw-r--r--mod/groups/graphics/defaultsmall.gifbin0 -> 1127 bytes
-rw-r--r--mod/groups/graphics/defaulttiny.gifbin0 -> 782 bytes
-rw-r--r--mod/groups/icon.php54
-rw-r--r--mod/groups/languages/en.php299
-rw-r--r--mod/groups/lib/discussion.php236
-rw-r--r--mod/groups/lib/groups.php580
-rw-r--r--mod/groups/manifest.xml18
-rw-r--r--mod/groups/start.php1069
-rw-r--r--mod/groups/topicposts.php19
-rw-r--r--mod/groups/upgrades/2011030101.php65
-rw-r--r--mod/groups/views/default/annotation/group_topic_post.php19
-rw-r--r--mod/groups/views/default/discussion/closed.php6
-rw-r--r--mod/groups/views/default/discussion/group_module.php48
-rw-r--r--mod/groups/views/default/discussion/replies.php28
-rw-r--r--mod/groups/views/default/forms/discussion/reply/save.php57
-rw-r--r--mod/groups/views/default/forms/discussion/save.php57
-rw-r--r--mod/groups/views/default/forms/groups/edit.php169
-rw-r--r--mod/groups/views/default/forms/groups/find.php16
-rw-r--r--mod/groups/views/default/forms/groups/invite.php22
-rw-r--r--mod/groups/views/default/forms/groups/search.php20
-rw-r--r--mod/groups/views/default/group/default.php37
-rw-r--r--mod/groups/views/default/groups/css.php80
-rw-r--r--mod/groups/views/default/groups/edit.php15
-rw-r--r--mod/groups/views/default/groups/group_sort_menu.php36
-rw-r--r--mod/groups/views/default/groups/invitationrequests.php51
-rw-r--r--mod/groups/views/default/groups/js.php13
-rw-r--r--mod/groups/views/default/groups/membershiprequests.php47
-rw-r--r--mod/groups/views/default/groups/profile/activity_module.php44
-rw-r--r--mod/groups/views/default/groups/profile/closed_membership.php16
-rw-r--r--mod/groups/views/default/groups/profile/fields.php38
-rw-r--r--mod/groups/views/default/groups/profile/layout.php13
-rw-r--r--mod/groups/views/default/groups/profile/module.php25
-rw-r--r--mod/groups/views/default/groups/profile/summary.php57
-rw-r--r--mod/groups/views/default/groups/profile/widgets.php24
-rw-r--r--mod/groups/views/default/groups/sidebar/featured.php25
-rw-r--r--mod/groups/views/default/groups/sidebar/find.php14
-rw-r--r--mod/groups/views/default/groups/sidebar/members.php32
-rw-r--r--mod/groups/views/default/groups/sidebar/my_status.php62
-rw-r--r--mod/groups/views/default/groups/sidebar/search.php15
-rw-r--r--mod/groups/views/default/object/groupforumtopic.php98
-rw-r--r--mod/groups/views/default/plugins/groups/settings.php40
-rw-r--r--mod/groups/views/default/river/annotation/group_topic_post/reply.php12
-rw-r--r--mod/groups/views/default/river/group/create.php13
-rw-r--r--mod/groups/views/default/river/object/groupforumtopic/create.php22
-rw-r--r--mod/groups/views/default/river/relationship/member/create.php8
-rw-r--r--mod/groups/views/default/widgets/a_users_groups/content.php33
-rw-r--r--mod/groups/views/default/widgets/a_users_groups/edit.php25
-rw-r--r--mod/groups/views/rss/annotation/group_topic_post.php32
-rw-r--r--mod/groups/views/rss/discussion/replies.php12
-rw-r--r--mod/groups/views/rss/groups/profile/layout.php18
-rw-r--r--mod/groups/views/rss/object/groupforumtopic.php35
-rw-r--r--mod/htmlawed/manifest.xml17
-rw-r--r--mod/htmlawed/start.php165
-rw-r--r--mod/htmlawed/tests/tags.php45
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed.php711
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawedTest.php595
-rw-r--r--mod/htmlawed/vendors/htmLawed/htmLawed_README.htm2160
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed_README.txt1701
-rwxr-xr-xmod/htmlawed/vendors/htmLawed/htmLawed_TESTCASE.txt396
-rw-r--r--mod/invitefriends/actions/invite.php88
-rw-r--r--mod/invitefriends/languages/en.php43
-rw-r--r--mod/invitefriends/manifest.xml17
-rw-r--r--mod/invitefriends/start.php50
-rw-r--r--mod/invitefriends/views/default/forms/invitefriends/invite.php35
-rw-r--r--mod/invitefriends/views/default/invitefriends/form.php8
-rw-r--r--mod/invitefriends/views/default/invitefriends/formitems.php4
-rw-r--r--mod/likes/actions/likes/add.php50
-rw-r--r--mod/likes/actions/likes/delete.php31
-rw-r--r--mod/likes/languages/en.php45
-rw-r--r--mod/likes/manifest.xml17
-rw-r--r--mod/likes/start.php171
-rw-r--r--mod/likes/views/default/annotation/likes.php49
-rw-r--r--mod/likes/views/default/likes/button.php39
-rw-r--r--mod/likes/views/default/likes/count.php36
-rw-r--r--mod/likes/views/default/likes/css.php17
-rw-r--r--mod/likes/views/default/likes/js.php26
m---------mod/linkup0
m---------mod/livestream0
-rw-r--r--mod/logbrowser/languages/en.php30
-rw-r--r--mod/logbrowser/manifest.xml17
-rw-r--r--mod/logbrowser/start.php32
-rw-r--r--mod/logbrowser/views/default/admin/administer_utilities/logbrowser.php81
-rw-r--r--mod/logbrowser/views/default/forms/logbrowser/refine.php54
-rw-r--r--mod/logbrowser/views/default/logbrowser/refine.php40
-rw-r--r--mod/logbrowser/views/default/logbrowser/table.php90
-rw-r--r--mod/logrotate/languages/en.php28
-rw-r--r--mod/logrotate/manifest.xml17
-rw-r--r--mod/logrotate/start.php121
-rw-r--r--mod/logrotate/views/default/plugins/logrotate/settings.php47
-rw-r--r--mod/members/languages/en.php16
-rw-r--r--mod/members/manifest.xml16
-rw-r--r--mod/members/pages/members/index.php36
-rw-r--r--mod/members/pages/members/search.php51
-rw-r--r--mod/members/start.php41
-rw-r--r--mod/members/views/default/members/nav.php24
-rw-r--r--mod/members/views/default/members/sidebar.php25
-rw-r--r--mod/messageboard/actions/add.php38
-rw-r--r--mod/messageboard/actions/delete.php17
-rw-r--r--mod/messageboard/languages/en.php72
-rw-r--r--mod/messageboard/manifest.xml17
-rw-r--r--mod/messageboard/pages/messageboard/owner.php58
-rw-r--r--mod/messageboard/start.php163
-rw-r--r--mod/messageboard/views/default/forms/messageboard/add.php20
-rw-r--r--mod/messageboard/views/default/messageboard/css.php10
-rw-r--r--mod/messageboard/views/default/messageboard/js.php56
-rw-r--r--mod/messageboard/views/default/river/object/messageboard/create.php12
-rw-r--r--mod/messageboard/views/default/widgets/messageboard/content.php35
-rw-r--r--mod/messageboard/views/default/widgets/messageboard/edit.php22
-rw-r--r--mod/messages/actions/messages/delete.php20
-rw-r--r--mod/messages/actions/messages/process.php35
-rw-r--r--mod/messages/actions/messages/send.php46
-rw-r--r--mod/messages/graphics/icon_notifications_site.gifbin0 -> 456 bytes
-rw-r--r--mod/messages/graphics/toolbar_messages_icon.gifbin0 -> 502 bytes
-rw-r--r--mod/messages/languages/en.php97
-rw-r--r--mod/messages/lib/messages.php32
-rw-r--r--mod/messages/manifest.xml17
-rw-r--r--mod/messages/pages/messages/inbox.php48
-rw-r--r--mod/messages/pages/messages/read.php60
-rw-r--r--mod/messages/pages/messages/send.php27
-rw-r--r--mod/messages/pages/messages/sent.php48
-rw-r--r--mod/messages/start.php434
-rw-r--r--mod/messages/views/default/forms/messages/process.php43
-rw-r--r--mod/messages/views/default/forms/messages/reply.php38
-rw-r--r--mod/messages/views/default/forms/messages/send.php54
-rw-r--r--mod/messages/views/default/messages/css.php63
-rw-r--r--mod/messages/views/default/messages/js.php7
-rw-r--r--mod/messages/views/default/object/messages.php86
-rw-r--r--mod/notifications/actions/groupsave.php49
-rw-r--r--mod/notifications/actions/save.php43
-rw-r--r--mod/notifications/graphics/icon_notifications_email.gifbin0 -> 1416 bytes
-rw-r--r--mod/notifications/graphics/icon_notifications_site.gifbin0 -> 456 bytes
-rw-r--r--mod/notifications/groups.php46
-rw-r--r--mod/notifications/index.php50
-rw-r--r--mod/notifications/languages/en.php26
-rw-r--r--mod/notifications/manifest.xml16
-rw-r--r--mod/notifications/start.php206
-rw-r--r--mod/notifications/views/default/forms/notificationsettings/groupsave.php111
-rw-r--r--mod/notifications/views/default/forms/notificationsettings/save.php21
-rw-r--r--mod/notifications/views/default/notifications/css.php87
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/collections.php164
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/form.php12
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/forminternals.php337
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/groupsform.php4
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/jsfuncs.php54
-rw-r--r--mod/notifications/views/default/notifications/subscriptions/personal.php73
-rw-r--r--mod/oauth_api/manifest.xml25
-rw-r--r--mod/oauth_api/start.php24
-rw-r--r--mod/oauth_api/vendors/oauth/LICENSE21
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/INSTALL53
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/init.php127
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/templates/inc/footer.tpl2
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/templates/inc/header.tpl2
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/templates/index.tpl13
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/templates/logon.tpl21
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/core/templates/register.tpl41
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/hello.php65
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/index.php37
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/logon.php55
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/oauth.php77
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/register.php28
-rw-r--r--mod/oauth_api/vendors/oauth/example/server/www/services.xrds.php71
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthDiscovery.php226
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthException.php50
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthRequest.php801
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthRequestLogger.php274
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthRequestSigner.php209
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthRequestVerifier.php262
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthRequester.php508
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthServer.php232
-rw-r--r--mod/oauth_api/vendors/oauth/library/OAuthStore.php86
-rw-r--r--mod/oauth_api/vendors/oauth/library/body/OAuthBodyContentDisposition.php129
-rw-r--r--mod/oauth_api/vendors/oauth/library/body/OAuthBodyMultipartFormdata.php143
-rw-r--r--mod/oauth_api/vendors/oauth/library/discovery/xrds_parse.php304
-rw-r--r--mod/oauth_api/vendors/oauth/library/discovery/xrds_parse.txt101
-rw-r--r--mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod.class.php69
-rw-r--r--mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_HMAC_SHA1.php115
-rw-r--r--mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_MD5.php95
-rw-r--r--mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_PLAINTEXT.php80
-rw-r--r--mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_RSA_SHA1.php136
-rw-r--r--mod/oauth_api/vendors/oauth/library/store/OAuthStoreAbstract.class.php149
-rw-r--r--mod/oauth_api/vendors/oauth/library/store/OAuthStoreAnyMeta.php265
-rw-r--r--mod/oauth_api/vendors/oauth/library/store/OAuthStoreMySQL.php1879
-rw-r--r--mod/oauth_api/vendors/oauth/library/store/mysql/install.php32
-rw-r--r--mod/oauth_api/vendors/oauth/library/store/mysql/mysql.sql219
-rw-r--r--mod/oauth_api/vendors/oauth/test/discovery/xrds-fireeagle.xrds78
-rw-r--r--mod/oauth_api/vendors/oauth/test/discovery/xrds-getsatisfaction.xrds73
-rw-r--r--mod/oauth_api/vendors/oauth/test/discovery/xrds-magnolia.xrds81
-rw-r--r--mod/oauth_api/vendors/oauth/test/oauth_test.php188
-rw-r--r--mod/pages/actions/pages/delete.php46
-rw-r--r--mod/pages/actions/pages/edit.php115
-rw-r--r--mod/pages/images/pages.gifbin0 -> 2766 bytes
-rw-r--r--mod/pages/images/pages_lrg.gifbin0 -> 10234 bytes
-rw-r--r--mod/pages/languages/en.php114
-rw-r--r--mod/pages/lib/pages.php147
-rw-r--r--mod/pages/manifest.xml18
-rw-r--r--mod/pages/pages/pages/edit.php43
-rw-r--r--mod/pages/pages/pages/friends.php33
-rw-r--r--mod/pages/pages/pages/history.php47
-rw-r--r--mod/pages/pages/pages/new.php37
-rw-r--r--mod/pages/pages/pages/owner.php53
-rw-r--r--mod/pages/pages/pages/revision.php53
-rw-r--r--mod/pages/pages/pages/view.php55
-rw-r--r--mod/pages/pages/pages/world.php31
-rw-r--r--mod/pages/start.php352
-rw-r--r--mod/pages/vendors/jquery-treeview/.gitignore7
-rw-r--r--mod/pages/vendors/jquery-treeview/README.md8
-rw-r--r--mod/pages/vendors/jquery-treeview/changelog.txt36
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/async.html91
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/bg.gifbin0 -> 1175 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/demo.js31
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/edit.html82
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/images.html56
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/index.html338
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/large.html561
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/prerendered.html620
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/screen.css24
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/simple.html82
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/sortable.html222
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/source.php88
-rw-r--r--mod/pages/vendors/jquery-treeview/demo/source.phps88
-rw-r--r--mod/pages/vendors/jquery-treeview/images/ajax-loader.gifbin0 -> 847 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/file.gifbin0 -> 110 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/folder-closed.gifbin0 -> 105 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/folder.gifbin0 -> 106 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/minus.gifbin0 -> 837 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/plus.gifbin0 -> 841 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-black-line.gifbin0 -> 1877 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-black.gifbin0 -> 1216 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-default-line.gifbin0 -> 1993 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-default.gifbin0 -> 1222 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-famfamfam-line.gifbin0 -> 807 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-famfamfam.gifbin0 -> 1280 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-gray-line.gifbin0 -> 1877 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-gray.gifbin0 -> 1230 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-red-line.gifbin0 -> 1877 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/images/treeview-red.gifbin0 -> 1230 bytes
-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.async.js110
-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.css74
-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.edit.js37
-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.js256
-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.min.js17
-rw-r--r--mod/pages/vendors/jquery-treeview/jquery.treeview.sortable.js378
-rw-r--r--mod/pages/vendors/jquery-treeview/lib/jquery.cookie.js92
-rw-r--r--mod/pages/vendors/jquery-treeview/lib/jquery.js6883
-rw-r--r--mod/pages/vendors/jquery-treeview/todo8
-rw-r--r--mod/pages/views/default/annotation/page.php42
-rw-r--r--mod/pages/views/default/forms/pages/edit.php77
-rw-r--r--mod/pages/views/default/input/write_access.php35
-rw-r--r--mod/pages/views/default/object/page.php8
-rw-r--r--mod/pages/views/default/object/page_top.php111
-rw-r--r--mod/pages/views/default/pages/css.php19
-rw-r--r--mod/pages/views/default/pages/group_module.php49
-rw-r--r--mod/pages/views/default/pages/icon.php25
-rw-r--r--mod/pages/views/default/pages/input/parent.php37
-rw-r--r--mod/pages/views/default/pages/sidebar.php14
-rw-r--r--mod/pages/views/default/pages/sidebar/history.php20
-rw-r--r--mod/pages/views/default/pages/sidebar/navigation.php58
-rw-r--r--mod/pages/views/default/river/object/page/create.php13
-rw-r--r--mod/pages/views/default/river/object/page_top/create.php8
-rw-r--r--mod/pages/views/default/widgets/pages/content.php32
-rw-r--r--mod/pages/views/default/widgets/pages/edit.php24
-rw-r--r--mod/profile/icondirect.php77
-rw-r--r--mod/profile/languages/en.php12
-rw-r--r--mod/profile/manifest.xml17
-rw-r--r--mod/profile/start.php188
-rw-r--r--mod/profile/views/default/profile/css.php126
-rw-r--r--mod/profile/views/default/profile/details.php54
-rw-r--r--mod/profile/views/default/profile/js.php9
-rw-r--r--mod/profile/views/default/profile/metatags.php16
-rw-r--r--mod/profile/views/default/profile/owner_block.php66
-rw-r--r--mod/profile/views/default/profile/wrapper.php12
m---------mod/purity_theme7
-rw-r--r--mod/reportedcontent/actions/reportedcontent/add.php39
-rw-r--r--mod/reportedcontent/actions/reportedcontent/archive.php27
-rw-r--r--mod/reportedcontent/actions/reportedcontent/delete.php28
-rw-r--r--mod/reportedcontent/graphics/icon_reportthis.gifbin0 -> 570 bytes
-rw-r--r--mod/reportedcontent/languages/en.php44
-rw-r--r--mod/reportedcontent/manifest.xml16
-rw-r--r--mod/reportedcontent/start.php103
-rw-r--r--mod/reportedcontent/views/default/admin/administer_utilities/reportedcontent.php13
-rw-r--r--mod/reportedcontent/views/default/forms/reportedcontent/add.php57
-rw-r--r--mod/reportedcontent/views/default/object/reported_content.php84
-rw-r--r--mod/reportedcontent/views/default/reportedcontent/admin_css.php46
-rw-r--r--mod/reportedcontent/views/default/reportedcontent/css.php14
-rw-r--r--mod/reportedcontent/views/default/widgets/reportedcontent/content.php16
-rw-r--r--mod/reportedcontent/views/default/widgets/reportedcontent/edit.php22
-rw-r--r--mod/search/README.txt276
-rw-r--r--mod/search/languages/en.php21
-rw-r--r--mod/search/manifest.xml16
-rw-r--r--mod/search/pages/search/index.php283
-rw-r--r--mod/search/search_hooks.php462
-rw-r--r--mod/search/start.php502
-rw-r--r--mod/search/views/default/search/comments/entity.php52
-rw-r--r--mod/search/views/default/search/css.php67
-rw-r--r--mod/search/views/default/search/entity.php57
-rw-r--r--mod/search/views/default/search/header.php6
-rw-r--r--mod/search/views/default/search/layout.php8
-rw-r--r--mod/search/views/default/search/list.php115
-rw-r--r--mod/search/views/default/search/no_results.php6
-rw-r--r--mod/search/views/default/search/search_box.php43
-rw-r--r--mod/search/views/default/search/startblurb.php6
-rw-r--r--mod/search/views/rss/search/comments/entity.php51
-rw-r--r--mod/search/views/rss/search/entity.php24
-rw-r--r--mod/search/views/rss/search/layout.php6
-rw-r--r--mod/search/views/rss/search/list.php25
m---------mod/simple_faq0
-rw-r--r--mod/tagcloud/languages/en.php12
-rw-r--r--mod/tagcloud/manifest.xml16
-rw-r--r--mod/tagcloud/start.php10
-rw-r--r--mod/tagcloud/views/default/widgets/tagcloud/content.php16
-rw-r--r--mod/tagcloud/views/default/widgets/tagcloud/edit.php23
-rw-r--r--mod/thewire/actions/add.php34
-rw-r--r--mod/thewire/actions/delete.php39
-rw-r--r--mod/thewire/activate.php10
-rw-r--r--mod/thewire/classes/ElggWire.php40
-rw-r--r--mod/thewire/deactivate.php6
-rw-r--r--mod/thewire/graphics/river_icon_thewire.gifbin0 -> 365 bytes
-rw-r--r--mod/thewire/graphics/thewire_speech_bubble.gifbin0 -> 278 bytes
-rw-r--r--mod/thewire/languages/en.php61
-rw-r--r--mod/thewire/manifest.xml17
-rw-r--r--mod/thewire/pages/thewire/everyone.php31
-rw-r--r--mod/thewire/pages/thewire/friends.php31
-rw-r--r--mod/thewire/pages/thewire/owner.php39
-rw-r--r--mod/thewire/pages/thewire/previous.php20
-rw-r--r--mod/thewire/pages/thewire/reply.php28
-rw-r--r--mod/thewire/pages/thewire/tag.php35
-rw-r--r--mod/thewire/pages/thewire/thread.php27
-rw-r--r--mod/thewire/pages/thewire/view.php31
-rw-r--r--mod/thewire/start.php475
-rw-r--r--mod/thewire/tests/regex.php303
-rw-r--r--mod/thewire/upgrades/2012122701-fix_entity_class.php8
-rw-r--r--mod/thewire/views/default/forms/thewire/add.php41
-rw-r--r--mod/thewire/views/default/js/thewire.php86
-rw-r--r--mod/thewire/views/default/object/thewire.php63
-rw-r--r--mod/thewire/views/default/river/object/thewire/create.php31
-rw-r--r--mod/thewire/views/default/thewire/css.php35
-rw-r--r--mod/thewire/views/default/thewire/previous.php11
-rw-r--r--mod/thewire/views/default/thewire/profile_status.php44
-rw-r--r--mod/thewire/views/default/thewire/reply.php14
-rw-r--r--mod/thewire/views/default/thewire/scripts/counter.js25
-rw-r--r--mod/thewire/views/default/thewire/sidebar.php9
-rw-r--r--mod/thewire/views/default/widgets/thewire/content.php30
-rw-r--r--mod/thewire/views/default/widgets/thewire/edit.php22
-rw-r--r--mod/thewire/views/rss/object/thewire.php36
-rw-r--r--mod/thewire/views/rss/search/object/thewire/entity.php27
-rw-r--r--mod/tinymce/README.txt10
-rw-r--r--mod/tinymce/activate.php14
-rw-r--r--mod/tinymce/css/elgg_tinymce.css5
-rw-r--r--mod/tinymce/languages/en.php15
-rw-r--r--mod/tinymce/manifest.xml17
-rw-r--r--mod/tinymce/start.php47
-rw-r--r--mod/tinymce/vendor/tinymce/changelog.txt1459
-rw-r--r--mod/tinymce/vendor/tinymce/examples/accessibility.html101
-rw-r--r--mod/tinymce/vendor/tinymce/examples/css/content.css105
-rw-r--r--mod/tinymce/vendor/tinymce/examples/css/word.css53
-rw-r--r--mod/tinymce/vendor/tinymce/examples/custom_formats.html111
-rw-r--r--mod/tinymce/vendor/tinymce/examples/full.html101
-rw-r--r--mod/tinymce/vendor/tinymce/examples/index.html10
-rw-r--r--mod/tinymce/vendor/tinymce/examples/lists/image_list.js9
-rw-r--r--mod/tinymce/vendor/tinymce/examples/lists/link_list.js10
-rw-r--r--mod/tinymce/vendor/tinymce/examples/lists/media_list.js14
-rw-r--r--mod/tinymce/vendor/tinymce/examples/lists/template_list.js9
-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/logo.jpgbin0 -> 2729 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/logo_over.jpgbin0 -> 6473 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.avibin0 -> 82944 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.dcrbin0 -> 6774 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.flvbin0 -> 88722 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.movbin0 -> 55622 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.ram1
-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.rmbin0 -> 17846 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/examples/media/sample.swfbin0 -> 6118 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/examples/menu.html18
-rw-r--r--mod/tinymce/vendor/tinymce/examples/simple.html47
-rw-r--r--mod/tinymce/vendor/tinymce/examples/skins.html216
-rw-r--r--mod/tinymce/vendor/tinymce/examples/templates/layout1.htm15
-rw-r--r--mod/tinymce/vendor/tinymce/examples/templates/snippet1.htm1
-rw-r--r--mod/tinymce/vendor/tinymce/examples/word.html72
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/license.txt504
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css5
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js57
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js43
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm58
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css13
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js50
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm235
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gifbin0 -> 1624 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js462
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css8
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js61
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js532
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm338
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js176
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js172
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js137
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js431
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js4
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js120
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js160
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js82
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js43
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm42
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gifbin0 -> 354 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gifbin0 -> 329 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gifbin0 -> 331 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gifbin0 -> 342 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gifbin0 -> 340 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gifbin0 -> 336 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gifbin0 -> 338 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gifbin0 -> 343 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gifbin0 -> 321 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gifbin0 -> 323 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gifbin0 -> 344 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gifbin0 -> 338 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gifbin0 -> 328 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gifbin0 -> 337 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gifbin0 -> 350 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gifbin0 -> 336 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js43
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm22
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js84
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/img/example.gifbin0 -> 87 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js19
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/langs/en.js3
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js3
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js50
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css143
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js405
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm259
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js232
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js159
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm110
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js54
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js699
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gifbin0 -> 810 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gifbin0 -> 272 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gifbin0 -> 1195 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gifbin0 -> 907 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gifbin0 -> 909 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gifbin0 -> 769 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gifbin0 -> 84 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css90
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm387
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js83
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js262
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js139
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js925
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/css/media.css17
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js890
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js73
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/media.js464
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/media.htm922
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/moxieplayer.swfbin0 -> 19980 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js54
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js95
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js74
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js871
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js36
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js51
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm27
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm21
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js53
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/example.html28
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js73
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/preview.html17
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js34
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js101
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css6
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js61
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js142
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm100
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js436
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gifbin0 -> 46 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/css/props.css13
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js55
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/js/props.js635
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/props.htm840
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js122
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/cell.htm180
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css17
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/row.css25
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/table.css13
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js1408
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js319
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js27
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/row.js237
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/table.js484
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm32
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/row.htm158
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/table.htm188
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/blank.htm12
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/css/template.css23
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js159
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/js/template.js106
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/template.htm31
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js83
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js114
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm142
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm142
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm149
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm142
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css11
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css9
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm162
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js132
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm162
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js28
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js28
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js111
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js28
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js53
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js229
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js53
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/about.htm52
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm26
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm55
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm74
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js1362
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/image.htm80
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpgbin0 -> 2584 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/flash.gifbin0 -> 239 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gifbin0 -> 11790 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/iframe.gifbin0 -> 600 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/pagebreak.gifbin0 -> 325 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/quicktime.gifbin0 -> 301 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/realmedia.gifbin0 -> 439 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/shockwave.gifbin0 -> 384 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/trans.gifbin0 -> 43 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/video.gifbin0 -> 597 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/windowsmedia.gifbin0 -> 415 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js73
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js43
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js363
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js329
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js251
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js153
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js56
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/link.htm57
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/shortcuts.htm47
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css50
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css117
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.pngbin0 -> 3133 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gifbin0 -> 64 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gifbin0 -> 68 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gifbin0 -> 70 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gifbin0 -> 1787 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gifbin0 -> 1322 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css214
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css24
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css105
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css102
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css48
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css117
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.pngbin0 -> 2766 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.pngbin0 -> 651 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.pngbin0 -> 2084 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css217
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css8
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css5
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm25
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js84
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gifbin0 -> 806 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css25
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css32
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css17
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.pngbin0 -> 5102 bytes
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css35
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_popup.js5
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_src.js16728
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/editable_selects.js70
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/form_utils.js210
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/mctabs.js162
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/validate.js252
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ar_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/az_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/be_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bg_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/br_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ca_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ch_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cs_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/da_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/de_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/dv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/el_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/en_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eo_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/es_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/et_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fa_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/he_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ia_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/id_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/is_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/it_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ja_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ka_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/km_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ko_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kz_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ml_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ms_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/my_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nb_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/no_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ps_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ro_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ru_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sc_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/se_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/si_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sl_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sq_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sv_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sy_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ta_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/te_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/th_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tr_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tt_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/uk_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ur_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/vi_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-cn_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-tw_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zu_dlg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ar.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/az.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/be.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bg.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/br.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ca.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ch.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cs.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/da.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/de.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/dv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/el.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/en.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/eo.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/es.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/et.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/eu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fa.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/gl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/gu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/he.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hu.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ia.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/id.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/is.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/it.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ja.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ka.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/kl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/km.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ko.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/kz.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/mk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ml.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/mn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ms.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/my.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nb.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/no.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/pl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ps.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/pt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ro.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ru.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sc.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/se.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/si.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sl.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sq.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sv.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sy.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ta.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/te.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/th.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tr.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tt.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/uk.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ur.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/vi.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh-cn.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh-tw.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh.js1
-rw-r--r--mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zu.js1
-rw-r--r--mod/tinymce/views/default/js/tinymce.php90
-rw-r--r--mod/tinymce/views/default/tinymce/css.php31
-rw-r--r--mod/tinymce/views/default/tinymce/embed_custom_insert_js.php14
-rw-r--r--mod/tinymce/views/default/tinymce/init.php7
m---------mod/translation_editor0
-rw-r--r--mod/twitter/graphics/thewire_speech_bubble.gifbin0 -> 560 bytes
-rw-r--r--mod/twitter/graphics/twitter16px.pngbin0 -> 724 bytes
-rw-r--r--mod/twitter/languages/en.php17
-rw-r--r--mod/twitter/manifest.xml16
-rw-r--r--mod/twitter/start.php14
-rw-r--r--mod/twitter/views/default/twitter/css.php63
-rw-r--r--mod/twitter/views/default/widgets/twitter/content.php42
-rw-r--r--mod/twitter/views/default/widgets/twitter/edit.php24
-rw-r--r--mod/twitter_api/actions/twitter_api/interstitial_settings.php53
-rw-r--r--mod/twitter_api/graphics/sign-in-with-twitter-d.pngbin0 -> 3306 bytes
-rw-r--r--mod/twitter_api/graphics/sign-in-with-twitter-l.pngbin0 -> 3062 bytes
-rw-r--r--mod/twitter_api/graphics/sign_in_with_twitter.gifbin0 -> 3028 bytes
-rw-r--r--mod/twitter_api/languages/en.php60
-rw-r--r--mod/twitter_api/lib/twitter_api.php370
-rw-r--r--mod/twitter_api/manifest.xml29
-rw-r--r--mod/twitter_api/pages/twitter_api/interstitial.php21
-rw-r--r--mod/twitter_api/start.php179
-rw-r--r--mod/twitter_api/vendors/twitteroauth/LICENSE22
-rw-r--r--mod/twitter_api/vendors/twitteroauth/OAuth.php518
-rw-r--r--mod/twitter_api/vendors/twitteroauth/README7
-rw-r--r--mod/twitter_api/vendors/twitteroauth/twitterOAuth.php245
-rw-r--r--mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php62
-rw-r--r--mod/twitter_api/views/default/plugins/twitter_api/settings.php50
-rw-r--r--mod/twitter_api/views/default/plugins/twitter_api/usersettings.php37
-rw-r--r--mod/twitter_api/views/default/twitter_api/css.php13
-rw-r--r--mod/twitter_api/views/default/twitter_api/js.php16
-rw-r--r--mod/twitter_api/views/default/twitter_api/login.php17
-rw-r--r--mod/twitter_api/views/default/twitter_api/metatags.php19
m---------mod/upgrade-tools0
-rw-r--r--mod/uservalidationbyemail/actions/bulk_action.php18
-rw-r--r--mod/uservalidationbyemail/actions/delete.php51
-rw-r--r--mod/uservalidationbyemail/actions/resend_validation.php51
-rw-r--r--mod/uservalidationbyemail/actions/validate.php53
-rw-r--r--mod/uservalidationbyemail/languages/en.php64
-rw-r--r--mod/uservalidationbyemail/lib/functions.php108
-rw-r--r--mod/uservalidationbyemail/manifest.xml17
-rw-r--r--mod/uservalidationbyemail/start.php255
-rw-r--r--mod/uservalidationbyemail/views/default/admin/users/unvalidated.php9
-rw-r--r--mod/uservalidationbyemail/views/default/forms/uservalidationbyemail/bulk_action.php112
-rw-r--r--mod/uservalidationbyemail/views/default/uservalidationbyemail/css.php12
-rw-r--r--mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php28
-rw-r--r--mod/uservalidationbyemail/views/default/uservalidationbyemail/unvalidated_user.php50
-rw-r--r--mod/videolist/.gitignore15
-rw-r--r--mod/videolist/CHANGES.txt14
-rw-r--r--mod/videolist/actions/videolist/delete.php39
-rw-r--r--mod/videolist/actions/videolist/edit.php107
-rw-r--r--mod/videolist/graphics/_videolist_icon_medium.pngbin0 -> 4391 bytes
-rw-r--r--mod/videolist/graphics/videolist_icon_medium.pngbin0 -> 3840 bytes
-rw-r--r--mod/videolist/graphics/videolist_icon_small.pngbin0 -> 1960 bytes
-rw-r--r--mod/videolist/graphics/videolist_icon_tiny.pngbin0 -> 1295 bytes
-rw-r--r--mod/videolist/languages/ca.php40
-rw-r--r--mod/videolist/languages/en.php78
-rw-r--r--mod/videolist/languages/es.php40
-rw-r--r--mod/videolist/languages/fr.php28
-rw-r--r--mod/videolist/languages/gl.php29
-rw-r--r--mod/videolist/languages/pt.php50
-rw-r--r--mod/videolist/lib/Videolist/Platform/Bliptv.php38
-rw-r--r--mod/videolist/lib/Videolist/Platform/Gisstv.php50
-rw-r--r--mod/videolist/lib/Videolist/Platform/Metacafe.php38
-rw-r--r--mod/videolist/lib/Videolist/Platform/Vimeo.php40
-rw-r--r--mod/videolist/lib/Videolist/Platform/Youtube.php49
-rw-r--r--mod/videolist/lib/Videolist/PlatformInterface.php23
-rw-r--r--mod/videolist/lib/videolist.php46
-rw-r--r--mod/videolist/manifest.xml18
-rw-r--r--mod/videolist/pages/videolist/add.php39
-rw-r--r--mod/videolist/pages/videolist/all.php34
-rw-r--r--mod/videolist/pages/videolist/edit.php49
-rw-r--r--mod/videolist/pages/videolist/friends.php33
-rw-r--r--mod/videolist/pages/videolist/owner.php54
-rw-r--r--mod/videolist/pages/videolist/watch.php42
-rw-r--r--mod/videolist/start.php328
-rw-r--r--mod/videolist/thumbnail.php64
-rw-r--r--mod/videolist/upgrades/2012022501.php82
-rw-r--r--mod/videolist/views/default/forms/videolist/edit.php55
-rw-r--r--mod/videolist/views/default/icon/object/videolist_item.php47
-rw-r--r--mod/videolist/views/default/object/videolist_item.php108
-rw-r--r--mod/videolist/views/default/page/elements/videolist_block.php36
-rw-r--r--mod/videolist/views/default/river/object/videolist_item/create.php15
-rw-r--r--mod/videolist/views/default/videolist/css.php23
-rw-r--r--mod/videolist/views/default/videolist/group_module.php43
-rw-r--r--mod/videolist/views/default/videolist/sidebar.php28
-rw-r--r--mod/videolist/views/default/videolist/watch.php8
-rw-r--r--mod/videolist/views/default/videolist/watch/bliptv.php6
-rw-r--r--mod/videolist/views/default/videolist/watch/gisstv.php7
-rw-r--r--mod/videolist/views/default/videolist/watch/metacafe.php6
-rw-r--r--mod/videolist/views/default/videolist/watch/vimeo.php5
-rw-r--r--mod/videolist/views/default/videolist/watch/youtube.php5
-rw-r--r--mod/videolist/views/default/widgets/videolist/content.php32
-rw-r--r--mod/videolist/views/default/widgets/videolist/edit.php24
-rw-r--r--mod/videolist/views/rss/object/videolist_item.php47
-rw-r--r--mod/zaudio/audioplayer/audio-player.js5
-rw-r--r--mod/zaudio/audioplayer/license.txt19
-rw-r--r--mod/zaudio/audioplayer/player.swfbin0 -> 10816 bytes
-rw-r--r--mod/zaudio/manifest.xml18
-rw-r--r--mod/zaudio/readme.txt9
-rw-r--r--mod/zaudio/start.php18
-rw-r--r--mod/zaudio/views/default/file/specialcontent/audio/mp3.php7
-rw-r--r--mod/zaudio/views/default/file/specialcontent/audio/mpeg.php7
-rw-r--r--mod/zaudio/views/default/file/specialcontent/audio/mpg.php7
-rw-r--r--mod/zaudio/views/default/zaudio/audioplayer.php23
-rw-r--r--mod/zaudio/views/default/zaudio/css.php10
-rw-r--r--pages/account/forgotten_password.php22
-rw-r--r--pages/account/login.php20
-rw-r--r--pages/account/register.php53
-rw-r--r--pages/account/reset_password.php35
-rw-r--r--pages/avatar/edit.php27
-rw-r--r--pages/avatar/view.php54
-rw-r--r--pages/entities/index.php56
-rw-r--r--pages/friends/collections/add.php22
-rw-r--r--pages/friends/collections/pickercallback.php59
-rw-r--r--pages/friends/collections/view.php21
-rw-r--r--pages/friends/index.php35
-rw-r--r--pages/friends/of.php35
-rw-r--r--pages/profile/edit.php32
-rw-r--r--pages/river.php60
-rw-r--r--pages/settings/account.php27
-rw-r--r--pages/settings/statistics.php27
-rw-r--r--pages/settings/tools.php28
-rw-r--r--upgrade.php67
-rw-r--r--vendors/calendarpopup/CalendarPopup.js1462
-rw-r--r--vendors/jquery/fancybox/blank.gifbin0 -> 43 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_close.pngbin0 -> 1517 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_loading.pngbin0 -> 10195 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_nav_left.pngbin0 -> 1446 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_nav_right.pngbin0 -> 1454 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_shadow_e.pngbin0 -> 107 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_shadow_n.pngbin0 -> 106 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_shadow_ne.pngbin0 -> 347 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_shadow_nw.pngbin0 -> 324 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_shadow_s.pngbin0 -> 111 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_shadow_se.pngbin0 -> 352 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_shadow_sw.pngbin0 -> 340 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_shadow_w.pngbin0 -> 103 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_title_left.pngbin0 -> 503 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_title_main.pngbin0 -> 96 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_title_over.pngbin0 -> 70 bytes
-rw-r--r--vendors/jquery/fancybox/fancy_title_right.pngbin0 -> 506 bytes
-rw-r--r--vendors/jquery/fancybox/fancybox-x.pngbin0 -> 203 bytes
-rw-r--r--vendors/jquery/fancybox/fancybox-y.pngbin0 -> 176 bytes
-rw-r--r--vendors/jquery/fancybox/fancybox.pngbin0 -> 15287 bytes
-rw-r--r--vendors/jquery/fancybox/jquery.easing-1.3.pack.js72
-rw-r--r--vendors/jquery/fancybox/jquery.fancybox-1.3.4.css359
-rw-r--r--vendors/jquery/fancybox/jquery.fancybox-1.3.4.js1156
-rw-r--r--vendors/jquery/fancybox/jquery.fancybox-1.3.4.pack.js46
-rw-r--r--vendors/jquery/fancybox/jquery.mousewheel-3.0.4.pack.js14
-rw-r--r--vendors/jquery/i18n/jquery-ui-i18n.js1646
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-af.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ar-DZ.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ar.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-az.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-bg.js24
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-bs.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ca.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-cs.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-cy-GB.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-da.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-de.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-el.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-en-AU.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-en-GB.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-en-NZ.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-eo.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-es.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-et.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-eu.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-fa.js59
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-fi.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-fo.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-fr-CH.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-fr.js25
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-gl.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-he.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-hi.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-hr.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-hu.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-hy.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-id.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-is.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-it.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ja.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ka.js21
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-kk.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-km.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ko.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-lb.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-lt.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-lv.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-mk.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ml.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ms.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-nl-BE.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-nl.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-no.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-pl.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-pt-BR.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-pt.js22
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-rm.js21
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ro.js26
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ru.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sk.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sl.js24
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sq.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sr-SR.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sr.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-sv.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-ta.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-th.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-tj.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-tr.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-uk.js24
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-vi.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-zh-CN.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-zh-HK.js23
-rw-r--r--vendors/jquery/i18n/jquery.ui.datepicker-zh-TW.js23
-rw-r--r--vendors/jquery/jquery-1.6.4.min.js4
-rw-r--r--vendors/jquery/jquery-ui-1.8.16.min.js414
-rw-r--r--vendors/jquery/jquery.autocomplete.min.js13
-rw-r--r--vendors/jquery/jquery.easing.1.3.packed.js1
-rw-r--r--vendors/jquery/jquery.form.js825
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/GPL-LICENSE.txt278
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/MIT-LICENSE.txt20
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/border-anim-h.gifbin0 -> 219 bytes
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/border-anim-v.gifbin0 -> 219 bytes
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/border-h.gifbin0 -> 72 bytes
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/border-v.gifbin0 -> 72 bytes
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-animated.css41
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-default.css41
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-deprecated.css36
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.js724
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.min.js1
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.pack.js1
-rw-r--r--vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.min.js18
-rw-r--r--vendors/jquery/jquery.jeditable.mini.js38
-rw-r--r--vendors/jquery/jquery.ui.autocomplete.html.js40
-rw-r--r--vendors/markdown/License.text36
-rw-r--r--vendors/markdown/PHP Markdown Extra Readme.text786
-rw-r--r--vendors/markdown/UPSTREAM_WARNING5
-rw-r--r--vendors/markdown/markdown.php2933
-rw-r--r--vendors/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE348
-rw-r--r--vendors/simpletest/LICENSE502
-rw-r--r--vendors/simpletest/README108
-rw-r--r--vendors/simpletest/VERSION1
-rw-r--r--vendors/simpletest/authentication.php238
-rw-r--r--vendors/simpletest/autorun.php87
-rw-r--r--vendors/simpletest/browser.php1098
-rw-r--r--vendors/simpletest/collector.php122
-rw-r--r--vendors/simpletest/compatibility.php166
-rw-r--r--vendors/simpletest/cookies.php380
-rw-r--r--vendors/simpletest/default_reporter.php133
-rw-r--r--vendors/simpletest/detached.php96
-rw-r--r--vendors/simpletest/docs/en/authentication_documentation.html355
-rw-r--r--vendors/simpletest/docs/en/browser_documentation.html447
-rw-r--r--vendors/simpletest/docs/en/docs.css121
-rw-r--r--vendors/simpletest/docs/en/expectation_documentation.html422
-rw-r--r--vendors/simpletest/docs/en/form_testing_documentation.html342
-rw-r--r--vendors/simpletest/docs/en/group_test_documentation.html386
-rw-r--r--vendors/simpletest/docs/en/index.html538
-rw-r--r--vendors/simpletest/docs/en/mock_objects_documentation.html757
-rw-r--r--vendors/simpletest/docs/en/overview.html486
-rw-r--r--vendors/simpletest/docs/en/partial_mocks_documentation.html445
-rw-r--r--vendors/simpletest/docs/en/reporter_documentation.html519
-rw-r--r--vendors/simpletest/docs/en/unit_test_documentation.html431
-rw-r--r--vendors/simpletest/docs/en/web_tester_documentation.html584
-rw-r--r--vendors/simpletest/docs/fr/authentication_documentation.html332
-rw-r--r--vendors/simpletest/docs/fr/browser_documentation.html446
-rw-r--r--vendors/simpletest/docs/fr/docs.css84
-rw-r--r--vendors/simpletest/docs/fr/expectation_documentation.html383
-rw-r--r--vendors/simpletest/docs/fr/form_testing_documentation.html349
-rw-r--r--vendors/simpletest/docs/fr/group_test_documentation.html398
-rw-r--r--vendors/simpletest/docs/fr/index.html572
-rw-r--r--vendors/simpletest/docs/fr/mock_objects_documentation.html778
-rw-r--r--vendors/simpletest/docs/fr/overview.html318
-rw-r--r--vendors/simpletest/docs/fr/partial_mocks_documentation.html460
-rw-r--r--vendors/simpletest/docs/fr/reporter_documentation.html534
-rw-r--r--vendors/simpletest/docs/fr/server_stubs_documentation.html0
-rw-r--r--vendors/simpletest/docs/fr/unit_test_documentation.html447
-rw-r--r--vendors/simpletest/docs/fr/web_tester_documentation.html566
-rw-r--r--vendors/simpletest/dumper.php360
-rw-r--r--vendors/simpletest/eclipse.php307
-rw-r--r--vendors/simpletest/encoding.php552
-rw-r--r--vendors/simpletest/errors.php288
-rw-r--r--vendors/simpletest/exceptions.php198
-rw-r--r--vendors/simpletest/expectation.php895
-rw-r--r--vendors/simpletest/extensions/pear_test_case.php198
-rw-r--r--vendors/simpletest/extensions/phpunit_test_case.php96
-rw-r--r--vendors/simpletest/extensions/testdox.php42
-rw-r--r--vendors/simpletest/extensions/testdox/test.php108
-rw-r--r--vendors/simpletest/form.php355
-rw-r--r--vendors/simpletest/frames.php596
-rw-r--r--vendors/simpletest/http.php624
-rw-r--r--vendors/simpletest/invoker.php139
-rw-r--r--vendors/simpletest/mock_objects.php1581
-rw-r--r--vendors/simpletest/page.php983
-rw-r--r--vendors/simpletest/parser.php764
-rw-r--r--vendors/simpletest/reflection_php4.php136
-rw-r--r--vendors/simpletest/reflection_php5.php380
-rw-r--r--vendors/simpletest/remote.php117
-rw-r--r--vendors/simpletest/reporter.php447
-rw-r--r--vendors/simpletest/scorer.php863
-rw-r--r--vendors/simpletest/selector.php137
-rw-r--r--vendors/simpletest/shell_tester.php333
-rw-r--r--vendors/simpletest/simpletest.php478
-rw-r--r--vendors/simpletest/socket.php216
-rw-r--r--vendors/simpletest/tag.php1418
-rw-r--r--vendors/simpletest/test/acceptance_test.php1633
-rw-r--r--vendors/simpletest/test/adapter_test.php77
-rw-r--r--vendors/simpletest/test/all_tests.php13
-rw-r--r--vendors/simpletest/test/authentication_test.php145
-rw-r--r--vendors/simpletest/test/autorun_test.php13
-rw-r--r--vendors/simpletest/test/bad_test_suite.php10
-rw-r--r--vendors/simpletest/test/browser_test.php779
-rw-r--r--vendors/simpletest/test/collector_test.php51
-rw-r--r--vendors/simpletest/test/command_line_test.php40
-rw-r--r--vendors/simpletest/test/compatibility_test.php97
-rw-r--r--vendors/simpletest/test/cookies_test.php227
-rw-r--r--vendors/simpletest/test/detached_test.php15
-rw-r--r--vendors/simpletest/test/dumper_test.php88
-rw-r--r--vendors/simpletest/test/eclipse_test.php32
-rw-r--r--vendors/simpletest/test/encoding_test.php213
-rw-r--r--vendors/simpletest/test/errors_test.php300
-rw-r--r--vendors/simpletest/test/exceptions_test.php153
-rw-r--r--vendors/simpletest/test/expectation_test.php245
-rw-r--r--vendors/simpletest/test/form_test.php323
-rw-r--r--vendors/simpletest/test/frames_test.php549
-rw-r--r--vendors/simpletest/test/http_test.php427
-rw-r--r--vendors/simpletest/test/interfaces_test.php137
-rw-r--r--vendors/simpletest/test/live_test.php47
-rw-r--r--vendors/simpletest/test/mock_objects_test.php994
-rw-r--r--vendors/simpletest/test/page_test.php903
-rw-r--r--vendors/simpletest/test/parse_error_test.php9
-rw-r--r--vendors/simpletest/test/parser_test.php551
-rw-r--r--vendors/simpletest/test/reflection_php4_test.php61
-rw-r--r--vendors/simpletest/test/reflection_php5_test.php271
-rw-r--r--vendors/simpletest/test/remote_test.php20
-rw-r--r--vendors/simpletest/test/shell_test.php38
-rw-r--r--vendors/simpletest/test/shell_tester_test.php42
-rw-r--r--vendors/simpletest/test/simpletest_test.php58
-rw-r--r--vendors/simpletest/test/socket_test.php25
-rw-r--r--vendors/simpletest/test/support/collector/collectable.10
-rw-r--r--vendors/simpletest/test/support/collector/collectable.20
-rw-r--r--vendors/simpletest/test/support/empty_test_file.php3
-rw-r--r--vendors/simpletest/test/support/latin1_sample1
-rw-r--r--vendors/simpletest/test/support/spl_examples.php15
-rw-r--r--vendors/simpletest/test/support/supplementary_upload_sample.txt1
-rw-r--r--vendors/simpletest/test/support/test1.php7
-rw-r--r--vendors/simpletest/test/support/upload_sample.txt1
-rw-r--r--vendors/simpletest/test/tag_test.php554
-rw-r--r--vendors/simpletest/test/test_with_parse_error.php8
-rw-r--r--vendors/simpletest/test/unit_tester_test.php55
-rw-r--r--vendors/simpletest/test/unit_tests.php55
-rw-r--r--vendors/simpletest/test/url_test.php443
-rw-r--r--vendors/simpletest/test/user_agent_test.php358
-rw-r--r--vendors/simpletest/test/visual_test.php495
-rw-r--r--vendors/simpletest/test/web_tester_test.php156
-rw-r--r--vendors/simpletest/test/xml_test.php187
-rw-r--r--vendors/simpletest/test_case.php708
-rw-r--r--vendors/simpletest/unit_tester.php420
-rw-r--r--vendors/simpletest/url.php528
-rw-r--r--vendors/simpletest/user_agent.php332
-rw-r--r--vendors/simpletest/web_tester.php1541
-rw-r--r--vendors/simpletest/xml.php647
-rw-r--r--vendors/sprintf.js183
-rw-r--r--version.php17
-rw-r--r--views/default/admin/appearance/default_widgets.php82
-rw-r--r--views/default/admin/appearance/menu_items.php10
-rw-r--r--views/default/admin/appearance/profile_fields.php24
-rw-r--r--views/default/admin/appearance/profile_fields/list.php55
-rw-r--r--views/default/admin/dashboard.php12
-rw-r--r--views/default/admin/footer.php9
-rw-r--r--views/default/admin/header.php27
-rw-r--r--views/default/admin/plugin_settings.php26
-rw-r--r--views/default/admin/plugins.php197
-rw-r--r--views/default/admin/settings/advanced.php9
-rw-r--r--views/default/admin/settings/basic.php9
-rw-r--r--views/default/admin/sidebar.php8
-rw-r--r--views/default/admin/statistics/overview.php13
-rw-r--r--views/default/admin/statistics/overview/basic.php19
-rw-r--r--views/default/admin/statistics/overview/numentities.php40
-rw-r--r--views/default/admin/statistics/server.php8
-rw-r--r--views/default/admin/statistics/server/php.php50
-rw-r--r--views/default/admin/statistics/server/web_server.php16
-rw-r--r--views/default/admin/users/add.php9
-rw-r--r--views/default/admin/users/admins.php12
-rw-r--r--views/default/admin/users/newest.php18
-rw-r--r--views/default/admin/users/online.php13
-rw-r--r--views/default/annotation/default.php40
-rw-r--r--views/default/annotation/generic_comment.php69
-rw-r--r--views/default/api/output.php42
-rw-r--r--views/default/core/account/login_box.php21
-rw-r--r--views/default/core/account/login_dropdown.php27
-rw-r--r--views/default/core/avatar/crop.php16
-rw-r--r--views/default/core/avatar/upload.php51
-rw-r--r--views/default/core/friends/collection.php64
-rw-r--r--views/default/core/friends/collections.php39
-rw-r--r--views/default/core/friends/collectiontabs.php62
-rw-r--r--views/default/core/friends/tablelist.php50
-rw-r--r--views/default/core/friends/tablelistcountupdate.php17
-rw-r--r--views/default/core/river/filter.php38
-rw-r--r--views/default/core/settings/account.php9
-rw-r--r--views/default/core/settings/account/default_access.php25
-rw-r--r--views/default/core/settings/account/email.php19
-rw-r--r--views/default/core/settings/account/language.php20
-rw-r--r--views/default/core/settings/account/name.php21
-rw-r--r--views/default/core/settings/account/notifications.php44
-rw-r--r--views/default/core/settings/account/password.php33
-rw-r--r--views/default/core/settings/statistics.php6
-rw-r--r--views/default/core/settings/statistics/numentities.php44
-rw-r--r--views/default/core/settings/statistics/online.php42
-rw-r--r--views/default/core/settings/tools.php34
-rw-r--r--views/default/core/walled_garden/login.php31
-rw-r--r--views/default/core/walled_garden/lost_password.php13
-rw-r--r--views/default/core/walled_garden/register.php17
-rw-r--r--views/default/css.php7
-rw-r--r--views/default/css/admin.php1652
-rw-r--r--views/default/css/elements/OOCSS_LICENSE30
-rw-r--r--views/default/css/elements/buttons.php156
-rw-r--r--views/default/css/elements/components.php286
-rw-r--r--views/default/css/elements/core.php117
-rw-r--r--views/default/css/elements/forms.php370
-rw-r--r--views/default/css/elements/grid.php54
-rw-r--r--views/default/css/elements/helpers.php144
-rw-r--r--views/default/css/elements/icons.php348
-rw-r--r--views/default/css/elements/layout.php121
-rw-r--r--views/default/css/elements/misc.php62
-rw-r--r--views/default/css/elements/modules.php194
-rw-r--r--views/default/css/elements/navigation.php559
-rw-r--r--views/default/css/elements/reset.php79
-rw-r--r--views/default/css/elements/typography.php162
-rw-r--r--views/default/css/elgg.php68
-rw-r--r--views/default/css/ie.php8
-rw-r--r--views/default/css/ie6.php12
-rw-r--r--views/default/css/ie7.php65
-rw-r--r--views/default/css/lightbox.php371
-rw-r--r--views/default/css/walled_garden.php81
-rw-r--r--views/default/errors/404.php8
-rw-r--r--views/default/errors/default.php8
-rw-r--r--views/default/export/entity.php79
-rw-r--r--views/default/export/metadata.php14
-rw-r--r--views/default/export/relationship.php21
-rw-r--r--views/default/forms/account/settings.php10
-rw-r--r--views/default/forms/admin/menu/save.php102
-rw-r--r--views/default/forms/admin/plugins/change_state.php22
-rw-r--r--views/default/forms/admin/plugins/filter.php26
-rw-r--r--views/default/forms/admin/plugins/sort.php26
-rw-r--r--views/default/forms/admin/site/update_advanced.php101
-rw-r--r--views/default/forms/admin/site/update_basic.php31
-rw-r--r--views/default/forms/avatar/crop.php42
-rw-r--r--views/default/forms/avatar/upload.php16
-rw-r--r--views/default/forms/comments/add.php37
-rw-r--r--views/default/forms/friends/collections/add.php53
-rw-r--r--views/default/forms/login.php49
-rw-r--r--views/default/forms/members/name_search.php9
-rw-r--r--views/default/forms/members/tag_search.php12
-rw-r--r--views/default/forms/plugins/settings/save.php31
-rw-r--r--views/default/forms/plugins/usersettings/save.php14
-rw-r--r--views/default/forms/profile/edit.php68
-rw-r--r--views/default/forms/profile/fields/add.php29
-rw-r--r--views/default/forms/register.php80
-rw-r--r--views/default/forms/user/passwordreset.php20
-rw-r--r--views/default/forms/user/requestnewpassword.php24
-rw-r--r--views/default/forms/useradd.php78
-rw-r--r--views/default/forms/usersettings/save.php14
-rw-r--r--views/default/forms/widgets/save.php41
-rw-r--r--views/default/graphics/ajax_loader.php32
-rw-r--r--views/default/group/default.php9
-rw-r--r--views/default/group/elements/summary.php13
-rw-r--r--views/default/group/search/finishblurb.php18
-rw-r--r--views/default/group/search/startblurb.php14
-rw-r--r--views/default/icon/default.php62
-rw-r--r--views/default/icon/user/default.php103
-rw-r--r--views/default/input/access.php38
-rw-r--r--views/default/input/autocomplete.php49
-rw-r--r--views/default/input/button.php40
-rw-r--r--views/default/input/calendar.php6
-rw-r--r--views/default/input/captcha.php8
-rw-r--r--views/default/input/checkbox.php39
-rw-r--r--views/default/input/checkboxes.php90
-rw-r--r--views/default/input/date.php56
-rw-r--r--views/default/input/datepicker.php6
-rw-r--r--views/default/input/dropdown.php71
-rw-r--r--views/default/input/email.php26
-rw-r--r--views/default/input/file.php31
-rw-r--r--views/default/input/form.php44
-rw-r--r--views/default/input/friendspicker.php319
-rw-r--r--views/default/input/hidden.php12
-rw-r--r--views/default/input/location.php27
-rw-r--r--views/default/input/longtext.php42
-rw-r--r--views/default/input/password.php28
-rw-r--r--views/default/input/plaintext.php37
-rw-r--r--views/default/input/pulldown.php9
-rw-r--r--views/default/input/radio.php76
-rw-r--r--views/default/input/reset.php14
-rw-r--r--views/default/input/securitytoken.php15
-rw-r--r--views/default/input/submit.php14
-rw-r--r--views/default/input/tag.php25
-rw-r--r--views/default/input/tags.php45
-rw-r--r--views/default/input/text.php26
-rw-r--r--views/default/input/url.php27
-rw-r--r--views/default/input/urlshortener.php8
-rw-r--r--views/default/input/userpicker.php73
-rw-r--r--views/default/js/admin.php126
-rw-r--r--views/default/js/elgg.php77
-rw-r--r--views/default/js/initialise_elgg.php4
-rw-r--r--views/default/js/initialize_elgg.php52
-rw-r--r--views/default/js/languages.php15
-rw-r--r--views/default/js/languages/en.php2
-rw-r--r--views/default/js/lightbox.php36
-rw-r--r--views/default/js/walled_garden.php57
-rw-r--r--views/default/navigation/breadcrumbs.php41
-rw-r--r--views/default/navigation/menu/default.php31
-rw-r--r--views/default/navigation/menu/elements/item.php43
-rw-r--r--views/default/navigation/menu/elements/section.php30
-rw-r--r--views/default/navigation/menu/page.php36
-rw-r--r--views/default/navigation/menu/site.php30
-rw-r--r--views/default/navigation/menu/user_hover.php60
-rw-r--r--views/default/navigation/pagination.php132
-rw-r--r--views/default/navigation/tabs.php81
-rw-r--r--views/default/navigation/topbar_tools.php9
-rw-r--r--views/default/navigation/viewtype.php11
-rw-r--r--views/default/object/admin_notice.php20
-rw-r--r--views/default/object/default.php49
-rw-r--r--views/default/object/elements/full.php37
-rw-r--r--views/default/object/elements/summary.php59
-rw-r--r--views/default/object/plugin.php20
-rw-r--r--views/default/object/plugin/elements/dependencies.php49
-rw-r--r--views/default/object/plugin/full.php308
-rw-r--r--views/default/object/plugin/invalid.php42
-rw-r--r--views/default/object/widget.php75
-rw-r--r--views/default/object/widget/elements/controls.php14
-rw-r--r--views/default/object/widget/elements/settings.php25
-rw-r--r--views/default/output/access.php42
-rw-r--r--views/default/output/calendar.php13
-rw-r--r--views/default/output/checkboxes.php13
-rw-r--r--views/default/output/confirmlink.php47
-rw-r--r--views/default/output/date.php17
-rw-r--r--views/default/output/dropdown.php13
-rw-r--r--views/default/output/email.php17
-rw-r--r--views/default/output/friendlytime.php12
-rw-r--r--views/default/output/friendlytitle.php19
-rw-r--r--views/default/output/iframe.php13
-rw-r--r--views/default/output/img.php12
-rw-r--r--views/default/output/location.php19
-rw-r--r--views/default/output/longtext.php38
-rw-r--r--views/default/output/pulldown.php14
-rw-r--r--views/default/output/radio.php13
-rw-r--r--views/default/output/tag.php34
-rw-r--r--views/default/output/tagcloud.php64
-rw-r--r--views/default/output/tags.php81
-rw-r--r--views/default/output/text.php12
-rw-r--r--views/default/output/url.php56
-rw-r--r--views/default/page/admin.php66
-rw-r--r--views/default/page/components/gallery.php77
-rw-r--r--views/default/page/components/image_block.php52
-rw-r--r--views/default/page/components/list.php75
-rw-r--r--views/default/page/components/module.php48
-rw-r--r--views/default/page/components/summary.php4
-rw-r--r--views/default/page/default.php76
-rw-r--r--views/default/page/elements/body.php8
-rw-r--r--views/default/page/elements/comments.php42
-rw-r--r--views/default/page/elements/comments_block.php45
-rw-r--r--views/default/page/elements/foot.php11
-rw-r--r--views/default/page/elements/footer.php22
-rw-r--r--views/default/page/elements/head.php81
-rw-r--r--views/default/page/elements/header.php14
-rw-r--r--views/default/page/elements/header_logo.php15
-rw-r--r--views/default/page/elements/messages.php27
-rw-r--r--views/default/page/elements/owner_block.php31
-rw-r--r--views/default/page/elements/shortcut_icon.php6
-rw-r--r--views/default/page/elements/sidebar.php32
-rw-r--r--views/default/page/elements/sidebar_alt.php12
-rw-r--r--views/default/page/elements/tagcloud_block.php58
-rw-r--r--views/default/page/elements/title.php14
-rw-r--r--views/default/page/elements/topbar.php16
-rw-r--r--views/default/page/elements/wrapper.php22
-rw-r--r--views/default/page/error.php14
-rw-r--r--views/default/page/layouts/admin.php40
-rw-r--r--views/default/page/layouts/content.php53
-rw-r--r--views/default/page/layouts/content/filter.php52
-rw-r--r--views/default/page/layouts/content/footer.php8
-rw-r--r--views/default/page/layouts/content/header.php43
-rw-r--r--views/default/page/layouts/content/sidebar.php8
-rw-r--r--views/default/page/layouts/default.php18
-rw-r--r--views/default/page/layouts/error.php12
-rw-r--r--views/default/page/layouts/one_column.php38
-rw-r--r--views/default/page/layouts/one_sidebar.php48
-rw-r--r--views/default/page/layouts/two_column_left_sidebar.php26
-rw-r--r--views/default/page/layouts/two_sidebar.php43
-rw-r--r--views/default/page/layouts/walled_garden.php16
-rw-r--r--views/default/page/layouts/widgets.php62
-rw-r--r--views/default/page/layouts/widgets/add_button.php16
-rw-r--r--views/default/page/layouts/widgets/add_panel.php62
-rw-r--r--views/default/page/upgrade.php18
-rw-r--r--views/default/page/walled_garden.php27
-rw-r--r--views/default/profile/icon.php17
-rw-r--r--views/default/river/annotation/generic_comment/create.php11
-rw-r--r--views/default/river/elements/body.php67
-rw-r--r--views/default/river/elements/image.php16
-rw-r--r--views/default/river/elements/layout.php14
-rw-r--r--views/default/river/elements/responses.php63
-rw-r--r--views/default/river/elements/summary.php53
-rw-r--r--views/default/river/item.php30
-rw-r--r--views/default/river/relationship/friend/create.php14
-rw-r--r--views/default/river/user/default/profileiconupdate.php24
-rw-r--r--views/default/river/user/default/profileupdate.php20
-rw-r--r--views/default/site/default.php17
-rw-r--r--views/default/user/default.php57
-rw-r--r--views/default/user/elements/summary.php13
-rw-r--r--views/default/user/search/finishblurb.php18
-rw-r--r--views/default/user/search/startblurb.php10
-rw-r--r--views/default/widgets/admin_welcome/content.php19
-rw-r--r--views/default/widgets/content_stats/content.php28
-rw-r--r--views/default/widgets/content_stats/edit.php23
-rw-r--r--views/default/widgets/control_panel/content.php38
-rw-r--r--views/default/widgets/friends/content.php25
-rw-r--r--views/default/widgets/friends/edit.php52
-rw-r--r--views/default/widgets/new_users/content.php11
-rw-r--r--views/default/widgets/new_users/edit.php23
-rw-r--r--views/default/widgets/online_users/content.php15
-rw-r--r--views/default/widgets/online_users/edit.php22
-rw-r--r--views/default/widgets/river_widget/content.php27
-rw-r--r--views/default/widgets/river_widget/edit.php58
-rw-r--r--views/failsafe/messages/exceptions/admin_exception.php30
-rw-r--r--views/failsafe/messages/exceptions/exception.php20
-rw-r--r--views/failsafe/page/default.php60
-rw-r--r--views/foaf/page/default.php47
-rw-r--r--views/foaf/user/default.php23
-rw-r--r--views/ical/export/entity.php33
-rw-r--r--views/ical/object/default.php10
-rw-r--r--views/ical/page/default.php19
-rw-r--r--views/installation/forms/install/template.php30
-rw-r--r--views/installation/input/access.php38
-rw-r--r--views/installation/input/button.php40
-rw-r--r--views/installation/input/checkbox.php24
-rw-r--r--views/installation/input/combo.php19
-rw-r--r--views/installation/input/dropdown.php36
-rw-r--r--views/installation/input/form.php30
-rw-r--r--views/installation/input/password.php17
-rw-r--r--views/installation/input/submit.php11
-rw-r--r--views/installation/input/text.php20
-rw-r--r--views/installation/install/js_rewrite_check.php12
-rw-r--r--views/installation/install/nav.php35
-rw-r--r--views/installation/install/pages/admin.php17
-rw-r--r--views/installation/install/pages/complete.php16
-rw-r--r--views/installation/install/pages/database.php26
-rw-r--r--views/installation/install/pages/requirements.php39
-rw-r--r--views/installation/install/pages/settings.php14
-rw-r--r--views/installation/install/pages/welcome.php8
-rw-r--r--views/installation/page/default.php57
-rw-r--r--views/installation/page/elements/footer.php10
-rw-r--r--views/installation/page/elements/header.php8
-rw-r--r--views/installation/page/elements/messages.php21
-rw-r--r--views/installation/page/elements/sidebar.php26
-rw-r--r--views/json/api/output.php17
-rw-r--r--views/json/export/entity.php25
-rw-r--r--views/json/export/metadata.php21
-rw-r--r--views/json/export/relationship.php21
-rw-r--r--views/json/group/default.php9
-rw-r--r--views/json/messages/exceptions/exception.php15
-rw-r--r--views/json/object/default.php9
-rw-r--r--views/json/page/components/list.php14
-rw-r--r--views/json/page/default.php13
-rw-r--r--views/json/river/item.php19
-rw-r--r--views/json/site/default.php9
-rw-r--r--views/json/user/default.php9
-rw-r--r--views/opendd/export/entity.php14
-rw-r--r--views/opendd/export/metadata.php18
-rw-r--r--views/opendd/export/relationship.php17
-rw-r--r--views/opendd/group/default.php12
-rw-r--r--views/opendd/messages/exceptions/exception.php21
-rw-r--r--views/opendd/object/default.php12
-rw-r--r--views/opendd/page/default.php16
-rw-r--r--views/opendd/search/entity_list.php11
-rw-r--r--views/opendd/site/default.php13
-rw-r--r--views/opendd/user/default.php12
-rw-r--r--views/php/api/output.php13
-rw-r--r--views/php/export/entity.php19
-rw-r--r--views/php/export/metadata.php19
-rw-r--r--views/php/export/relationship.php19
-rw-r--r--views/php/group/default.php9
-rw-r--r--views/php/messages/exceptions/exception.php12
-rw-r--r--views/php/object/default.php9
-rw-r--r--views/php/page/default.php9
-rw-r--r--views/php/site/default.php9
-rw-r--r--views/php/user/default.php9
-rw-r--r--views/rss/annotation/generic_comment.php33
-rw-r--r--views/rss/group/default.php37
-rw-r--r--views/rss/object/default.php36
-rw-r--r--views/rss/output/url.php6
-rw-r--r--views/rss/page/components/creator.php14
-rw-r--r--views/rss/page/components/gallery.php8
-rw-r--r--views/rss/page/components/georss.php15
-rw-r--r--views/rss/page/components/image_block.php7
-rw-r--r--views/rss/page/components/list.php14
-rw-r--r--views/rss/page/default.php46
-rw-r--r--views/rss/page/elements/comments.php13
-rw-r--r--views/rss/page/layouts/default.php5
-rw-r--r--views/rss/river/item.php35
-rw-r--r--views/rss/user/default.php34
-rw-r--r--views/xml/api/output.php14
-rw-r--r--views/xml/messages/exceptions/exception.php25
-rw-r--r--views/xml/page/default.php14
-rw-r--r--views/xml/xml-rpc/output.php11
8235 files changed, 284133 insertions, 44 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..c90f6b85b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,56 @@
+# ignore Elgg configuration
+/engine/settings.php
+/engine/handlers/views_simplecache/*
+/.htaccess
+/mod/*
+
+# don't ignore bundled plugins
+!/mod/blog/
+!/mod/bookmarks/
+!/mod/categories/
+!/mod/custom_index/
+!/mod/dashboard/
+!/mod/developers/
+!/mod/diagnostics/
+!/mod/embed/
+!/mod/externalpages/
+!/mod/file/
+!/mod/garbagecollector/
+!/mod/groups/
+!/mod/htmlawed/
+!/mod/invitefriends/
+!/mod/likes/
+!/mod/linkup/
+!/mod/logbrowser/
+!/mod/logrotate/
+!/mod/members/
+!/mod/messageboard/
+!/mod/messages/
+!/mod/notifications/
+!/mod/oauth_api/
+!/mod/pages/
+!/mod/profile/
+!/mod/reportedcontent/
+!/mod/search/
+!/mod/tagcloud/
+!/mod/thewire/
+!/mod/tinymce/
+!/mod/twitter/
+!/mod/twitter_api/
+!/mod/uservalidationbyemail/
+!/mod/zaudio/
+
+# ignore IDE/hidden/OS cache files
+.*
+*~
+/nbproject
+/nb-configuration.xml
+Session.vim
+*.tmproj
+*.tmproject
+tmtags
+Thumbs.db
+Desktop.ini
+
+# don't ignore travis config
+!/.travis.yml
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 000000000..5cc8f375a
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,10 @@
+language: php
+phps:
+ - 5.2
+ - 5.3
+
+script: phpunit --help
+
+branches:
+ only:
+ - master \ No newline at end of file
diff --git a/.tx/config b/.tx/config
new file mode 100644
index 000000000..b1600d70c
--- /dev/null
+++ b/.tx/config
@@ -0,0 +1,501 @@
+[main]
+host = https://www.transifex.com
+
+[lorea.engine]
+file_filter = languages/<lang>.php
+source_file = languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.blog]
+file_filter = mod/blog/languages/<lang>.php
+source_file = mod/blog/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.bookmarks]
+file_filter = mod/bookmarks/languages/<lang>.php
+source_file = mod/bookmarks/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.categories]
+file_filter = mod/categories/languages/<lang>.php
+source_file = mod/categories/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.ckeditor]
+file_filter = mod/ckeditor/languages/<lang>.php
+source_file = mod/ckeditor/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.custom_index]
+file_filter = mod/custom_index/languages/<lang>.php
+source_file = mod/custom_index/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.dashboard]
+file_filter = mod/dashboard/languages/<lang>.php
+source_file = mod/dashboard/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.developers]
+file_filter = mod/developers/languages/<lang>.php
+source_file = mod/developers/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.diagnostics]
+file_filter = mod/diagnostics/languages/<lang>.php
+source_file = mod/diagnostics/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.embed]
+file_filter = mod/embed/languages/<lang>.php
+source_file = mod/embed/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.externalpages]
+file_filter = mod/externalpages/languages/<lang>.php
+source_file = mod/externalpages/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.file]
+file_filter = mod/file/languages/<lang>.php
+source_file = mod/file/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.garbagecollector]
+file_filter = mod/garbagecollector/languages/<lang>.php
+source_file = mod/garbagecollector/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.groups]
+file_filter = mod/groups/languages/<lang>.php
+source_file = mod/groups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.invitefriends]
+file_filter = mod/invitefriends/languages/<lang>.php
+source_file = mod/invitefriends/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.likes]
+file_filter = mod/likes/languages/<lang>.php
+source_file = mod/likes/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.logbrowser]
+file_filter = mod/logbrowser/languages/<lang>.php
+source_file = mod/logbrowser/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.logrotate]
+file_filter = mod/logrotate/languages/<lang>.php
+source_file = mod/logrotate/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.members]
+file_filter = mod/members/languages/<lang>.php
+source_file = mod/members/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.messageboard]
+file_filter = mod/messageboard/languages/<lang>.php
+source_file = mod/messageboard/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.messages]
+file_filter = mod/messages/languages/<lang>.php
+source_file = mod/messages/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.notifications]
+file_filter = mod/notifications/languages/<lang>.php
+source_file = mod/notifications/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.pages]
+file_filter = mod/pages/languages/<lang>.php
+source_file = mod/pages/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.profile]
+file_filter = mod/profile/languages/<lang>.php
+source_file = mod/profile/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.reportedcontent]
+file_filter = mod/reportedcontent/languages/<lang>.php
+source_file = mod/reportedcontent/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.search]
+file_filter = mod/search/languages/<lang>.php
+source_file = mod/search/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.tagcloud]
+file_filter = mod/tagcloud/languages/<lang>.php
+source_file = mod/tagcloud/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.thewire]
+file_filter = mod/thewire/languages/<lang>.php
+source_file = mod/thewire/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.twitter]
+file_filter = mod/twitter/languages/<lang>.php
+source_file = mod/twitter/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.twitter_api]
+file_filter = mod/twitter_api/languages/<lang>.php
+source_file = mod/twitter_api/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.uservalidationbyemail]
+file_filter = mod/uservalidationbyemail/languages/<lang>.php
+source_file = mod/uservalidationbyemail/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.install]
+file_filter = install/languages/<lang>.php
+source_file = install/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.admins]
+file_filter = mod/admins/languages/<lang>.php
+source_file = mod/admins/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.assemblies]
+file_filter = mod/assemblies/languages/<lang>.php
+source_file = mod/assemblies/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elggman]
+file_filter = mod/elggman/languages/<lang>.php
+source_file = mod/elggman/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.autosubscribegroup]
+file_filter = mod/autosubscribegroup/languages/<lang>.php
+source_file = mod/autosubscribegroup/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.beechat]
+file_filter = mod/beechat/languages/<lang>.php
+source_file = mod/beechat/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.captcha]
+file_filter = mod/captcha/languages/<lang>.php
+source_file = mod/captcha/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.cic_theme]
+file_filter = mod/cic_theme/languages/<lang>.php
+source_file = mod/cic_theme/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.colorbox]
+file_filter = mod/colorbox/languages/<lang>.php
+source_file = mod/colorbox/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.crud]
+file_filter = mod/crud/languages/<lang>.php
+source_file = mod/crud/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.curatedgroups]
+file_filter = mod/curatedgroups/languages/<lang>.php
+source_file = mod/curatedgroups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.custom_index_widgets]
+file_filter = mod/custom_index_widgets/languages/<lang>.php
+source_file = mod/custom_index_widgets/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.dokuwiki]
+file_filter = mod/dokuwiki/languages/<lang>.php
+source_file = mod/dokuwiki/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elgg-activitystreams]
+file_filter = mod/elgg-activitystreams/languages/<lang>.php
+source_file = mod/elgg-activitystreams/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elgg-ostatus]
+file_filter = mod/elgg-ostatus/languages/<lang>.php
+source_file = mod/elgg-ostatus/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elggpg]
+file_filter = mod/elggpg/languages/<lang>.php
+source_file = mod/elggpg/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.elgg-push]
+file_filter = mod/elgg-push/languages/<lang>.php
+source_file = mod/elgg-push/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.email_revalidate]
+file_filter = mod/email_revalidate/languages/<lang>.php
+source_file = mod/email_revalidate/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.etherpad]
+file_filter = mod/etherpad/languages/<lang>.php
+source_file = mod/etherpad/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.favorites]
+file_filter = mod/favorites/languages/<lang>.php
+source_file = mod/favorites/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.federated-objects]
+file_filter = mod/federated-objects/languages/<lang>.php
+source_file = mod/federated-objects/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.friendrequest]
+file_filter = mod/friendrequest/languages/<lang>.php
+source_file = mod/friendrequest/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.gifts]
+file_filter = mod/gifts/languages/<lang>.php
+source_file = mod/gifts/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.group_alias]
+file_filter = mod/group_alias/languages/<lang>.php
+source_file = mod/group_alias/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.group_operators]
+file_filter = mod/group_operators/languages/<lang>.php
+source_file = mod/group_operators/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.identica]
+file_filter = mod/identica/languages/<lang>.php
+source_file = mod/identica/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.infinite_scroll]
+file_filter = mod/infinite_scroll/languages/<lang>.php
+source_file = mod/infinite_scroll/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.landing]
+file_filter = mod/landing/languages/<lang>.php
+source_file = mod/landing/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.lightpics]
+file_filter = mod/lightpics/languages/<lang>.php
+source_file = mod/lightpics/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.linkup]
+file_filter = mod/linkup/languages/<lang>.php
+source_file = mod/linkup/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.livestream]
+file_filter = mod/livestream/languages/<lang>.php
+source_file = mod/livestream/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.microthemes]
+file_filter = mod/microthemes/languages/<lang>.php
+source_file = mod/microthemes/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.n1_theme]
+file_filter = mod/n1_theme/languages/<lang>.php
+source_file = mod/n1_theme/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.openid_client]
+file_filter = mod/openid_client/languages/<lang>.php
+source_file = mod/openid_client/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.opensearch]
+file_filter = mod/opensearch/languages/<lang>.php
+source_file = mod/opensearch/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.profile_widgets]
+file_filter = mod/profile_widgets/languages/<lang>.php
+source_file = mod/profile_widgets/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.proposals]
+file_filter = mod/proposals/languages/<lang>.php
+source_file = mod/proposals/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.registrationterms]
+file_filter = mod/registrationterms/languages/<lang>.php
+source_file = mod/registrationterms/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.relatedgroups]
+file_filter = mod/relatedgroups/languages/<lang>.php
+source_file = mod/relatedgroups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.river_privacy]
+file_filter = mod/river_privacy/languages/<lang>.php
+source_file = mod/river_privacy/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.simple_faq]
+file_filter = mod/simple_faq/languages/<lang>.php
+source_file = mod/simple_faq/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.simplepie]
+file_filter = mod/simplepie/languages/<lang>.php
+source_file = mod/simplepie/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.spotlight]
+file_filter = mod/spotlight/languages/<lang>.php
+source_file = mod/spotlight/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.subgroups]
+file_filter = mod/subgroups/languages/<lang>.php
+source_file = mod/subgroups/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.suicide]
+file_filter = mod/suicide/languages/<lang>.php
+source_file = mod/suicide/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.tasks]
+file_filter = mod/tasks/languages/<lang>.php
+source_file = mod/tasks/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.threads]
+file_filter = mod/threads/languages/<lang>.php
+source_file = mod/threads/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.tinymce]
+file_filter = mod/tinymce/languages/<lang>.php
+source_file = mod/tinymce/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.uservalidationbyadmin]
+file_filter = mod/uservalidationbyadmin/languages/<lang>.php
+source_file = mod/uservalidationbyadmin/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.videolist]
+file_filter = mod/videolist/languages/<lang>.php
+source_file = mod/videolist/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.openid_server]
+file_filter = mod/openid_server/languages/<lang>.php
+source_file = mod/openid_server/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
+[lorea.event_calendar]
+file_filter = mod/event_calendar/languages/<lang>.php
+source_file = mod/event_calendar/languages/en.php
+source_lang = en
+type = PHP_ARRAY
+
diff --git a/CHANGES.txt b/CHANGES.txt
new file mode 100644
index 000000000..13c30ae3e
--- /dev/null
+++ b/CHANGES.txt
@@ -0,0 +1,533 @@
+Version 1.8.13
+(January 29, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Cash Costello
+ * Juho Jaakkola
+ * Kevin Jardine
+ * Krzysztof Różalski
+ * Steve Clay
+
+ Security Fixes:
+ * Added validation of Twitter usernames in Twitter widget
+
+ Bugfixes:
+ * CLI usages with walled garden fixed
+ * Upgrading from < 1.8 to 1.8 fixed
+ * Default widgets fixed
+ * Quotes in object titles no longer result in "qout" in URLs
+ * List of my groups is ordered now
+ * Language string river:comment:object:default is defined now
+ * Added language string for comments: generic_comment:on
+
+ Enhancements:
+ * Added confirm dialog for resetting profile fields (adds language string profile:resetdefault:confirm)
+
+
+Version 1.8.12
+(January 4th, 2013 from https://github.com/Elgg/Elgg/tree/1.8)
+ Contributing Developers:
+ * Brett Profitt
+ * Cash Costello
+ * Jerome Bakker
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Bugfixes:
+ * Added an AJAX workaround for the rewrite test.
+ * Code cleanup to prevent some notices and warnings.
+ * Removed "original_order" in menu item anchor tags.
+ * Site menu's selected item correctly persists through content pages.
+ * Static caches rewritten and improved to prevent stale data being returned.
+ * Installation: Invalid characters in admin username are handled correctly.
+ * Messages: Fixed inbox link in email notifications.
+ * The Wire: Fixed objects not displaying correctly when upgrading from 1.7.
+
+ Enhancements:
+ * Performance improvements and improved caching in entity loading.
+ * Added upgrade locking to prevent concurrent upgrade attempts.
+ * Replaced xml_to_object() and autop() with GPL / MIT-compatible code.
+ * Error messages (register_error()) only fade after being clicked.
+ * Groups: Added a sidebar entry to display membership status and a link to
+ group notification settings.
+ * Groups: Added pending membership and invitation requests to the sidebar.
+ * Groups: Better redirection for invisible and closed groups.
+ * Search: User profile fields are searched.
+ * Pages: Subpages can be reassigned to new parent pages.
+ * Twitter: Login with twitter supports persistent login and correctly forwards
+ after login.
+
+
+Version 1.8.11
+(December 5th, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Bugfix:
+ * Fixed fatal error in group creation form
+
+
+Version 1.8.10
+(December 4th, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Krzysztof Różalski
+ * Lars Hærvig
+ * Paweł Sroka
+ * RiverVanRain
+ * Sem
+ * Steve Clay
+
+ Security Enhancements:
+ * Cached metadata respects access restrictions to fix problems with profile
+ field display.
+ * Group RSS feeds are restricted to valid entities
+
+ Enhancements:
+ * UX: Added a list of Administrators in the admin area
+ * UX: Limiting message board activity stream entries to excerpts
+ * Performance: Prefetching river entries
+ * Performance: Plugin entities are cached
+
+ Bugfixes:
+ * Removed superfluous commas in JS files to fix IE compatibility.
+ * API: Fixed Twitter API.
+ * Performance: Outputting valid ETags and expires headers.
+
+
+Version 1.8.9
+(November 11, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Brett Profitt
+ * Cash Costello
+ * Evan Winslow
+ * Jeroen Dalsem
+ * Jerome Bakker
+ * Matt Beckett
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Security Enhancements:
+ * Sample CLI installer cannot break site
+ * Removed XSS vulnerabilities in titles and user profiles
+
+ Enhancements:
+ * UX: A group's owner can transfer ownership to another member
+ * UX: Search queries persist in the search box
+ * Several (X)HTML validation improvements
+ * Improved performance via more aggressive entity and metadata caching
+ * BC: 1.7 group profile URLs forward correctly
+
+ Bugfixes:
+ * UX: Titles containing HTML tokens are never mangled
+ * UX: Empty user profile values saved properly
+ * UX: Blog creator always mentioned in activity stream (not user who published it)
+ * UI: Fixed ordering of registered menu items in some cases
+ * UI: Embed dialog does not break file inputs
+ * UI: Datepicker now respects language
+ * UI: More reliable display of access input in widgets
+ * UI: Group edit form is sticky
+ * UI: Site categories are sticky in forms
+ * API: Language fallback works in Javascript
+ * API: Fallback to default viewtype if invalid one given
+ * API: Notices reported for missing language keys
+ * Memcache now safe to use; never bypasses access control
+ * BC: upgrade shows comments consistently in activity stream
+
+
+Version 1.8.8
+(July 11, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Cash Costello
+ * Miguel Rodriguez
+ * Sem
+
+ Enhancements:
+ * Added a delete button on river items for admins
+
+ Bugfixes:
+ * Fixed the significant bug with htmlawed plugin that caused duplicate tags
+
+
+Version 1.8.7
+(July 10, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Cash Costello
+ * Evan Winslow
+ * Ismayil Khayredinov
+ * Jeroen Dalsem
+ * Jerome Bakker
+ * Matt Beckett
+ * Miguel Rodriguez
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Enhancements:
+ * Better support for search engine friendly URLs
+ * Upgraded htmlawed (XSS filtering)
+ * Internationalization support for TinyMCE
+ * Public access not available for walled gardens
+ * Better forwarding and messages when they cannot view content because logged out
+
+ Bugfixes:
+ * Fatal errors due to type hints downgraded to warnings
+ * Group discussion reply notifications work again
+ * Sending user to inbox when deleting a message
+ * Fixed location profile information when it is an array
+ * Over 30 other bug fixes.
+
+
+Version 1.8.6
+(June 18, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Cash Costello
+ * Evan Winslow
+ * Ismayil Khayredinov
+ * Jeff Tilson
+ * Jerome Bakker
+ * Paweł Sroka
+ * Sem
+ * Steve Clay
+
+ Enhancements:
+ * New ajax spinner
+ * Detecting docx, xlsx, and pptx files in file plugin
+ * Showing ajax spinner when uploading file with embed plugin
+
+ Bugfixes:
+ * Fixed some language caching issues.
+ * Users can add sub-pages to another user's page in a group.
+ * Over 30 other bug fixes.
+
+
+Version 1.8.5
+(May 17, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Brett Profitt
+ * Evan Winslow
+ * Sem
+ * Steve Clay
+ * Jeroen Dalsem
+ * Jerome Bakker
+
+ Security Enhancements:
+ * Fixed possible XSS vulnerability if using a crafted URL.
+ * Fixed exploit to bypass new user validation if using a crafted form.
+ * Fixed incorrect caching of access lists that could allow plugins
+ to show private entities to non-admin and non-owning users. (Non-exploitable)
+
+ Bugfixes:
+ * Twitter API: New users are forwarded to the correct page after creating
+ an account with Twitter.
+ * Files: PDF files are downloaded as "inline" to display in the browser.
+ * Fixed possible duplication errors when writing metadata with multiple values.
+ * Fixed possible upgrade issue if using a plugin uses the system_log hooks.
+ * Fixed problems when enabling more than 50 metadata or annotations.
+
+ API:
+ * River entries' timestamps use elgg_view_friendly_time() and can be
+ overridden with the friendly time output view.
+
+
+Version 1.8.4
+(April 24, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Contributing Developers:
+ * Adayth Talavera
+ * Brett Profitt
+ * Cash Costello
+ * Evan Winslow
+ * Ismayil Khayredinov
+ * Janek Lasocki-Biczysko
+ * Jerome Baker
+ * Sem
+ * Steve Clay
+ * Webgalli
+
+ Security Enhancements:
+ * Fixed an issue in the web services auth.get_token endpoint that
+ would give valid auth tokens to invalid credentials. Thanks to
+ Christian for reporting this!
+ * Fixed an that could show which plugins are loaded on a site.
+
+ Enhancements:
+ * UI: All bundled plugins' list pages display a no content message if there is nothing to list.
+ * UI: Site default access is limited to core access levels.
+ * UI: Showing a system message to the admin if plugins are disabled with the "disabled"
+ magic file.
+ * UI: Added transparent backgrounds for files and pages icons.
+ * External (Site) Pages: If in Wall Garden mode, Site Pages use the Walled Garden
+ theme when logged out.
+ * UI: Database errors only show the query to admin users.
+ * UI: Cannot set the data path to a relative path in installation or site settings.
+ * UI: Cleaned up notifications for bundled plugins.
+ * UI: Hiding crop button if no avatar is uploaded.
+ * UI: Bundled plugins are displayed with a gold border in the plugin admin area.
+ * UI: Can see all the categories a plugin belongs to.
+ * Web Services: Multiple tokens allowed for users.
+ * API: More efficient entity loading.
+ * API: Added IP address to system log.
+ * API: Languages are cached.
+ * API: ElggBatch supports disabling offsets for callbacks that delete entities.
+ * API: Cleaned up the boot process.
+ * API: Fixed situation in which the cache isn't properly cleared if a file can't be unlinked.
+
+ Bugfixes:
+ * UI: Tags display in the case they were saved.
+ * UI: Friendly titles keep -s.
+ * UI: Removed pagination in friends widget.
+ * UI: Profile settings actions correctly displays error messages as errors.
+ * UI: Tag search works for tags with spaces.
+ * UI: Fixed river display for friending that happens during registration.
+ * Groups: Link for managing join requests is restored in the sidebar.
+ * Walled Garden: Cron and web services endpoints are exposed as public sites.
+ * The Wire: UTF usernames are correctly linked with @ syntax.
+ * The Wire: No longer selecting the "Mine" tab for users who aren't you.
+ * Blogs: Notifications restored.
+ * Message Board: Fixed delete.
+ * Groups: Forwarding to correct page if trying to access closed group.
+ * API: entities loaded via elgg_get_entities_from_relationship() have the correct time_created.
+ * API: Deleting entities recursively works when code is logged out.
+ * API: Fixed multiple uses of deprecated functions.
+
+
+Version 1.8.3
+(January 12, 2012 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Enhancements:
+ * Adds a white list for ajax views
+ * Improved navigation tab options
+ * Added group specific search
+ * Added button for reverting avatar
+ * Improved documentation for core class attributes
+ * Adds a server info page under administer -> statistics
+ * Improving caching of icons and js/css
+ * Deprecation notices not displayed to non-admin users
+
+ Bugfixes:
+ * Fixed upgrade scripts for blog posts and groups forum posts
+ * Can now delete invitations to invisible groups
+ * Fixed several widget bugs
+ * Fixed access level on add to group river item
+ * Fixed recursive entity enabling
+ * Fixed limit on pages in sidebar navigation
+ * Fixed deletion of large numbers of annotations
+
+
+Version 1.8.2
+(December 21, 2011 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Enhancements:
+ * Added a 404 page
+ * Widgets controls now using the menu system
+ * Admins can edit users' account information
+ * Embed uploader supports uploading into groups
+ * Add a control panel widget for easy access to cache flushing and upgrading
+ * Comments now have a unqiue URL with fragment identifier
+ * JavaScript language files are cacheable
+ * jQuery form script only loaded when required
+
+ Bugfixes:
+ * Fixed default widgets
+ * Fixed activity filtering
+ * Embedding an image now inserts a medium sized image
+ * Search plugin only uses mbstring extension if enabled
+ * Site pages links returned to footer
+ * Fixed URL creation for users with non-ASCII characters in username
+ * The wire username parsing supports periods in usernames
+ * Returned the posting area to the main wire page
+ * Fixed layout issue on pages with a fragment identifier in URL
+ * Added support for call elgg_load_js() in header and footer
+ * Fixed user picker
+ * Fixed uservalidationbyemail plugin ignoring the actions of other plugins
+ * Fixed bug preventing the creation of admin users
+ * Fixed deleting a widget with JavaScript disabled
+ * Fixed many bugs in the unit/integration tests
+
+
+Version 1.8.1
+(November 16, 2011 from https://github.com/Elgg/Elgg/tree/1.8)
+
+ Enhancements:
+ * Completed styling of user validation admin page
+ * Adding rel=nofollow for non-trusted links
+ * Added direct icon loading for profile avatars in profile plugin
+ * Improved the structure of content views to make styling easier
+ * Updated version of jQuery to 1.6.4
+ * Added basic support for icon size customization
+ * Added a toggle for gallery/list view in file plugin
+ * Added support for passing CSS classes to icon views
+ * Added support for non http URLs to Elgg's normalize functions
+ * Added better support for the 404 forward if a page handler does handle a request
+
+ Bugfixes:
+ * Fixed autocomplete and userpicker
+ * Fixed RSS and web service-related view types
+ * Fixed walled garden display issues
+ * Added work around for IE/TinyMCE/embed insert problem
+ * Implemented ElggUser.isAdmin() JavaScript method
+ * Fixed the date views and JavaScript datepicker
+ * Fixed horizontal radio buttons styling
+ * Modules only display header if there is content for it
+
+
+Version 1.8.1b
+(October 11, 2011 from git://github.com/Elgg/Elgg.git)
+
+ Enhancements:
+ * New group activity widget for user dashboard.
+ * Added more sprites.
+ * version.php information cached instead of loaded 100s of times.
+ * Added class elgg-autofocus to add focus on inputs when the page loads.
+ * Admins can edit user avatars again.
+ * Added a filter for non-bundled plugins in plugin admin.
+ * Improvements to admin area theme.
+
+ Bugfixes:
+ * Fixed site dropdown menu for IE.
+ * ElggEntity->deleteMetadata() no longer deletes all metadata ever if
+ called on an unsaved entity.
+ * Fixed Embed plugin.
+ * Fixed activate and deactivate all plugins.
+ * Fixed URL for group membership request in notification email.
+ * Fixed log browser plugin's admin area display.
+ * Fixed RSS icon not showing up on some pages.
+ * Fixed river entries for forum posts that were lost if upgrading from 1.7.
+ * Better displaying of errors when activating, deactivating, or
+ reordering plugins.
+ * Fixed Developer Plugin's inspection tool.
+ * Fixed avatar cropping on IE 7.
+ * Bookmarks plugin accepts URLs with dashes.
+ * "More" menu item on site menu hidden if items are manually specified.
+ * Fixed hover menu floating if unrestrained.
+ * JS init, system fired when DOM and languages are read.
+ * Fixed the date picker input view.
+ * Fixed stack overflow when calling elgg_view() from a pagesetup
+ event.
+ * Menu links no longer have empty titles and confirm attributes.
+ * Fixed crash when attempting to change password to an invalid value.
+ * Fixed "More groups" link for groups widget.
+ * Fixed output/confirmlink to use a default question if not specified.
+ * Added missing language strings. Also added "new", "add", and "create".
+ * Registered security token refresh page as external to avoid token refresh
+ problems on Walled Garden sites.
+ * Displaying more accurate message if uploading an avatar fails.
+ * "Leave group" button doesn't display for group owners.
+ * Request group membership button displays only when logged in.
+ * Fixed the number of displayed items for Bookmarks widget.
+ * Fixed fallback to deprecated views for widgets.
+
+ API changes:
+ * Menus names must be unique to the entire menu, not just section.
+ * Input views that encode text use the option 'encode_text'.
+ * Added ElggPlugin->getFriendlyName().
+ * elgg_view_icon() accepts a class.
+ * Added hook output:before, page.
+ * Added hook output:before, layout.
+ * elgg_get_entities() and related functions return false if passed
+ valid options with invalid values.
+ * Can disable the user hover menu by passing hover => false to
+ elgg_view_icon(). Previously it was override => true.
+ * Embed plugin uses menu system. See readme for embed plugin.
+ * Manifest attributes are no longer translated via elgg_echo().
+ * Fixed livesearch ajax endpoint.
+ * Fixed site unit test.
+ * Unit tests tidy up after themselves better.
+ * forward() throws an exception if headers are already sent.
+ * Better errors if adding a user through admin area fails.
+ * Localized profile fields.
+ * Added 'is_trusted' parameter output/url to avoid escaping and filtering.
+ Defaults to false.
+ * Added elgg_unregister_action()
+ * Fixed ElggPriorityList::rewind().
+ * Fixed forwarding after login for login-protected pages.
+ * get_site_by_url() respects class inheritance for subclassing ElggSite.
+
+ Internal changes:
+ * Updated deprecated uses of internalname/id.
+ * Using wwwroot instead of www_root because of inconsistencies.
+
+
+Version 1.8.0 (Jackie)
+(September 5th, 2011 from git://github.com/Elgg/Elgg.git)
+
+ Notes:
+ Elgg 1.8 contains the most changes in Elgg since the transition from Elgg
+ 0.9 to Elgg 1.0. The core team tried to make the transition as smooth as
+ possible, but in the interest of following standards and simplifying the
+ development process for core and third party developers, we have made
+ changes that will require updating plugins. We believe these changes
+ will help Elgg development be easier for everyone.
+
+ It is unreasonable and unhelpful to list the full details of all changes in
+ this file. Instead, we will list the high level, overarching changes to
+ systems. If you are interested in the specifics, Elgg 1.8's source code is
+ highly documented and serves as a good guide and the git commit log can
+ provide excruciating details of what has changed between 1.7 and 1.8.
+
+ Please post your feedback, questions, and comments to the community site
+ at http://community.elgg.org. As always, thank you for using Elgg!
+
+ --The Elgg Core Development Team
+
+ A tip about updating plugins:
+ It's not difficult to update 1.7 plugins for 1.8. There is a detailed
+ document outlining this process on the wiki:
+ http://docs.elgg.org/wiki/Updating_plugins_for_Elgg_1.8
+
+ The basic process is:
+ 1. Clean up the plugin to make sure it conforms to coding standards,
+ official structure, and best practices.
+ 2. Update any uses of deprecated functions. Functions deprecated in 1.7 will
+ produce visible notices in 1.8!
+ 3. Use the new manifest format.
+ 4. Use the new menu functions.
+ 5. Use the new JS features.
+ 6. Update the views to use core CSS helper functions and classes instead of
+ writing your own.
+
+ The documentation directory and the wiki has more information.
+
+ User-visible changes:
+ * New default theme.
+ * New installation.
+ * Separate and updated admin interface.
+ * Updated plugin themes.
+
+ Generic API changes:
+ * Improved the markup and CSS.
+ * Restructured and simplified the views layouts.
+ * Added a new menu system.
+ * Added new CSS and JS file registration functions.
+ * Added a JS engine.
+ * Added a breadcrumb system.
+ * Added a sticky forms system.
+
+ New plugins:
+ * Dashboard - The activity stream is now the default index page. A 1.7-style
+ dashboard is provided through the dashboard plugin.
+ * Developers Plugins - Developer tools.
+ * Likes - Allows users to "like" other users' content.
+ * oAuth API - A generic, reusable oAuth library.
+ * Tag Cloud - A widget-based tag cloud generator.
+ * Twitter API - A generic Twitter library that allows signin with Twitter
+ and pushing content to tweets. Replaces twitter_service.
+
+ Deprecated plugins:
+ * captcha - Captchas have long since stopped being useful as a deterrent
+ against spam.
+ * crontrigger - Real cron should be used.
+ * default_widgets - This functionality is now part of core.
+ * friends - This functionality is now part of core.
+ * riverdashboard - Displaying the river (activity stream) is default in
+ core. The original dashboard can be restored by the new Dashboard plugin.
+ * twitter_service - Replaced by Twitter API.
+
+ Elgg 1.8.0.1 was released immediately after 1.8.0 to correct a problem in
+ installation.
diff --git a/CODING.txt b/CODING.txt
new file mode 100644
index 000000000..1cfd58dba
--- /dev/null
+++ b/CODING.txt
@@ -0,0 +1 @@
+See documentation/coding_standards/
diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt
new file mode 100644
index 000000000..a8e74d3a4
--- /dev/null
+++ b/CONTRIBUTORS.txt
@@ -0,0 +1,30 @@
+The following have made notable contributions to the Elgg Project.
+(List in alphabetical order.)
+
+Steve Clay - http://www.mrclay.org/, https://twitter.com/mrclay_org
+
+Cash Costello - cash@elgg.org, http://cashcostello.com/
+
+Pete Harris - http://www.peteharris.co.uk/
+
+Kevin Jardine - http://radagast.biz/
+
+Jon Maul - MITRE http://www.mitre.org/
+
+Marcus Povey - http://marcuspovey.co.uk/
+
+Brett Profitt - brett@elgg.org, http://twitter.com/brettprofitt
+
+Nathan Rackliffe - MITRE http://mitre.org/
+
+Tom Read - MITRE http://mitre.org/
+
+Justin Richer - MITRE http://mitre.org/
+
+Dave Tosh - davidgtosh@gmail.com, http://twitter.com/davetosh
+
+Ben Werdmuller - http://benwerd.com/
+
+Nicholas Whitt - nick.whitt@gmail.com, http://twitter.com/nogoodnick
+
+Evan Winslow - evan@elgg.org, http://evanwinslow.com/
diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt
new file mode 100644
index 000000000..76781f25a
--- /dev/null
+++ b/COPYRIGHT.txt
@@ -0,0 +1,13 @@
+The follow individuals, companies, or entities have contributed significant
+code to the Elgg project and share the copyright. (In alphabetical order.)
+
+Organizations:
+The MITRE Corportation (jricher@mitre.org)
+Curverider Ltd (info@elgg.com)
+
+Individuals:
+Cash Costello (cash.costello@gmail.com)
+Brett Profitt (brett.profitt@gmail.com)
+Dave Tosh (davidgtosh@gmail.com)
+Ben Werdmuller (ben@benwerd.com)
+Evan Winslow (evan.b.winslow@gmail.com)
diff --git a/ChangeLog b/ChangeLog
new file mode 100644
index 000000000..6fae5746c
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,39510 @@
+2012-04-24 Brett Profitt <brett.profitt@gmail.com>
+
+ * CHANGES.txt, version.php: Version bump. Updated changes.
+
+ * mod/groups/views/default/group/default.php: Fixed group entity display in
+ full_view.
+
+ * views/default/river/elements/summary.php: Fixes #4339. Checking for
+ river:$action:$type in addition to river:$action:$type:$subtype.
+
+ * engine/lib/sessions.php, engine/lib/web_services.php: Fixed problem in web
+ services where users with incorrect passwords could gain an access token.
+
+ * actions/admin/site/update_advanced.php, languages/en.php: Fixes #4324. Not
+ allowing relative paths for dataroot in advance settings.
+
+ * engine/lib/relationships.php: Fixes #4409. Selecting distinct across
+ entities.* and entity_relationships.id instead of r.* so entities loaded via
+ elgg_get_entities_from_relationship() have the correct time_created.
+
+2012-04-22 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/thewire/pages/thewire/owner.php: Fixes #4452. Passing the correct
+ filter context in the wire's owner page.
+
+ * views/default/object/plugin.php: Fixes #4439. Redirecting if trying to
+ view a plugin object outside of admin.
+
+2012-04-18 Brett Profitt <brett.profitt@gmail.com>
+
+ * ...1.8.3-multiple_user_tokens-852225f7fd89f6c5.php, version.php: Fixes
+ #4291. Removing the unique index on user and site guids in the
+ users_apisessions table.
+
+ * actions/login.php, actions/register.php, actions/useradd.php,
+ ....8.3-dont_filter_passwords-c0ca4a18b38ae2bc.php,
+ engine/lib/user_settings.php,
+ .../actions/twitter_api/interstitial_settings.php, version.php: Fixes #1301.
+ Not filtering passwords.
+
+2012-04-16 Steve Clay <steve@mrclay.org>
+
+ * engine/lib/users.php: Fixes #4414: Corrected name of river friend create
+ view
+
+ * mod/thewire/start.php: Fixes #4413: Removes deprecated call to
+ get_loggedin_user
+
+2012-04-15 Evan Winslow <evan@elgg.org>
+
+ * mod/likes/views/default/likes/button.php: Removes superfluous array
+ declaration
+
+2012-03-25 Evan Winslow <evan@elgg.org>
+
+ * mod/pages/start.php: Fixes #4419: Pages icons now work with all sizes
+
+ * views/default/icon/default.php: Refs #1279: Specifying image dimensions in
+ icon/default view.
+
+2012-03-15 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/classes/ElggSite.php: Fixes #4394. Added cron and services URLs to
+ the default public pages list for walled garden.
+
+2012-03-02 Evan Winslow <evan@elgg.org>
+
+ * views/default/css/admin.php: Adds fixed-width font for pre + code in admin
+ area
+
+2012-02-22 Evan Winslow <evan@elgg.org>
+
+ * .travis.yml: The travis-ci build should only run against master now.
+
+2012-02-13 Evan Winslow <evan@elgg.org>
+
+ * .travis.yml: Adds trivial .travis.yml config so we can get started
+ building.
+
+2012-02-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/output.php, engine/tests/regression/trac_bugs.php: Fixes #3210.
+ Keeping -s in URL friendly titles.
+
+ * engine/classes/ElggPluginManifest.php, views/default/admin/plugins.php,
+ views/default/css/admin.php, views/default/object/plugin/full.php: Fixes
+ #3312, #3632. Added class elgg-plugin-category-<category> to the plugin div.
+ Exposed plugin categories under more. Changed border color and size for
+ bundled categories.
+
+ * mod/search/pages/search/index.php, mod/search/search_hooks.php,
+ mod/search/start.php: Fixes #3550. Merged slightly modified pull request 166
+ from sembrestels.
+
+2012-02-21 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/groups/languages/en.php, mod/groups/start.php: Refs #4335. Updated
+ discussion notifications.
+
+ * mod/blog/languages/en.php, mod/blog/start.php,
+ mod/bookmarks/languages/en.php, mod/bookmarks/start.php,
+ mod/file/languages/en.php, mod/file/start.php, mod/pages/languages/en.php,
+ mod/pages/start.php: Fixes #4335. Cleaned up the notifications for new
+ content.
+
+2012-02-11 Cash Costello <cash.costello@gmail.com>
+
+ * mod/externalpages/start.php, .../views/default/expages/wrapper.php,
+ views/default/css/walled_garden.php: external pages plugin uses walled garden
+ layout when appropriate
+
+2012-02-10 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * views/default/forms/login.php, views/default/forms/register.php: passing
+ to extending views
+
+2012-02-10 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/elgglib.php, views/default/js/walled_garden.php,
+ views/default/page/layouts/walled_garden.php: updated the walled garden js to
+ use new js lib
+
+ * engine/classes/ElggSite.php, engine/lib/elgglib.php,
+ views/default/core/walled_garden/body.php,
+ views/default/core/walled_garden/login.php,
+ views/default/core/walled_garden/lost_password.php,
+ views/default/core/walled_garden/register.php,
+ views/default/js/walled_garden.php,
+ views/default/page/layouts/walled_garden.php: new layout and ajax loading for
+ walled garden
+
+2012-02-09 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggWidget.php: Fixes #4283 moving widgets from inactive
+ plugins to the bottom of columns
+
+ * engine/lib/views.php: Fixes #2625 removed old hack from
+ elgg_view_annotation()
+
+ * engine/lib/group.php: Fixes #4361 corrects forwarding logic for closed
+ groups
+
+ * mod/groups/lib/groups.php: Fixes #4362 extra context was breaking group
+ sidebar menu logic
+
+ * languages/en.php, pages/friends/index.php, pages/friends/of.php,
+ pages/river.php: Fixes #2942 all list pages should have messages when no
+ content now
+
+2012-02-08 Cash Costello <cash.costello@gmail.com>
+
+ * mod/pages/manifest.xml: Fixes #3678 adds better description of pages
+ plugin
+
+ * actions/friends/add.php, languages/en.php: Fixes #4348 adds check for
+ missing user when friending
+
+ * .../views/default/theme_preview/components.php,
+ .../default/theme_preview/components/table.php,
+ views/default/css/elements/components.php: Fixes #4357, #4358 updates
+ .elgg-table-alt
+
+2012-02-03 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * actions/avatar/crop.php, pages/avatar/edit.php: Fixes #4350 (Edit Avatar -
+ Crop button is misleading, should be hidden if avatar hasn't been created
+ yet)
+
+2012-02-07 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/plugins.php, languages/en.php: Fixes #3613 added system message
+ for admins when plugins are disabled
+
+ * engine/lib/metadata.php: Fixes #1043 tags retain their case
+
+2012-02-04 cash <cash.costello@gmail.com>
+
+ * mod/messageboard/actions/delete.php,
+ mod/messageboard/views/default/messageboard/js.php: Fixes #4354 fixes
+ messageboard delete
+
+ * mod/thewire/start.php: removed some old code from thewire
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggObject.php, engine/classes/ElggSite.php,
+ engine/classes/ElggUser.php: Fixes #2112 not loading data from entities table
+ twice
+
+ * mod/thewire/start.php, mod/thewire/tests/regex.php: Fixes #1853 matching
+ UTF8 characters in usernames
+
+ * mod/blog/languages/en.php, mod/blog/start.php: Fixes #4310 adds missing
+ blog notification function
+
+2012-01-27 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * engine/lib/cache.php: lazy boolean expression evaluation leaves function
+ expressions unevaluated (!)
+
+ * engine/lib/configuration.php: response from insert_data needs to be
+ checked for !== FALSE
+
+2012-01-27 Team Webgalli <webgalli@gmail.com>
+
+ * views/default/widgets/friends/content.php: Removed pagination from friends
+ widget
+
+2012-02-03 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/users.php: improved documentation for get_user_by_email()
+
+2012-02-01 cash <cash.costello@gmail.com>
+
+ * engine/lib/languages.php, engine/lib/plugins.php: fixed logic that caused
+ plugin language files to not be loaded
+
+2012-01-30 cash <cash.costello@gmail.com>
+
+ * install/ElggInstaller.php, install/languages/en.php: Refs #4324 installer
+ checks for absolute path
+
+ * install/ElggInstaller.php: Fixes #4342 updated the installer based on boot
+ reorg - no longer need caching code in installer
+
+ * engine/lib/plugins.php: fixed typo in plugin code
+
+ * install/languages/en.php, views/installation/install/nav.php: added
+ language strings to installer for refresh and next
+
+2012-01-28 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/cache.php: Refs #4180 was caching extensions which was causing
+ double extensions
+
+ * mod/thewire/actions/add.php: replaced deprecated function call in the wire
+ plugin
+
+ * engine/lib/views.php: fixed typo in docs
+
+ * engine/lib/entities.php: Fixes #4329 removed old recursive delete
+ permissions override
+
+ * engine/lib/entities.php: Fixes #2646 mention ELGG_ENTITIES_NO_VALUE in
+ elgg_get_entities() documentation
+
+2012-01-27 Cash Costello <cash.costello@gmail.com>
+
+ * mod/pages/languages/en.php: Fixes #4309 added language string
+
+ * engine/settings.example.php: Fixes #3651 fixed documentation of disable db
+ cache setting and updated wiki
+
+ * engine/lib/navigation.php: Fixes #3509 added documentation to menu system
+ about confirm links
+
+ * actions/avatar/crop.php, actions/profile/fields/add.php,
+ actions/profile/fields/delete.php, actions/profile/fields/reorder.php: Fixes
+ #1808 using correct message function in profile actions
+
+2012-01-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/entities.php: Refs #4081. Correctly calling
+ setIncrementOffset(false) for deleting entities using ElggBatch.
+
+ * engine/lib/entities.php, engine/tests/api/helpers.php,
+ engine/tests/objects/objects.php: Fixes #4081. Using ElggBatch to delete
+ recursive.
+
+2012-01-25 cash <cash.costello@gmail.com>
+
+ * engine/lib/languages.php: not loading language files a second time when
+ session initialized
+
+ * engine/lib/cache.php, engine/lib/plugins.php: plugins use language cache
+ and cache is cleared properly
+
+ * engine/classes/ElggFileCache.php: implemented the clear method of the file
+ cache
+
+ * engine/lib/cache.php, engine/lib/configuration.php,
+ engine/lib/elgglib.php, engine/lib/languages.php: caching language data
+
+2012-01-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/metastrings.php: Refs #4269. Using ElggBatch to delete
+ annotations / metadata again.
+
+ * engine/classes/ElggBatch.php, engine/tests/api/helpers.php: Fixes #4288.
+ Added setIncrementOffset() to ElggBatch.
+
+2012-01-24 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/configuration.php, engine/lib/entities.php,
+ engine/lib/views.php: Fixes #4272 where an array of entity types can be used,
+ use array in config object
+
+2012-01-24 Brett Profitt <brett.profitt@gmail.com>
+
+ * upgrade.php: Fixes #4326. Disabling system log for upgrades.
+
+2012-01-23 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/configuration.php, install/ElggInstaller.php: Refs #4147.
+ Changed default site name to "My New Community."
+
+ * languages/en.php: Fixed typo in language string.
+
+ * engine/lib/entities.php, engine/tests/objects/objects.php: Fixes #1196.
+ Added elgg_set_ignore_access() calls to disable_entity() when called with
+ recursive = true.
+
+2012-01-22 Brett Profitt <brett.profitt@gmail.com>
+
+ * views/default/object/plugin/full.php,
+ views/default/object/plugin/invalid.php: Fixes #4311. Rewriting all invalid
+ CSS characters to - for plugin id in plugin admin area.
+
+ * engine/schema/mysql.sql: Refs #2222. Added schema update for system log ip
+ address column.
+
+2012-01-22 cash <cash.costello@gmail.com>
+
+ * engine/lib/access.php: Fixes #4295 using on duplicate key to not fail when
+ adding the same user more than once to an access collection
+
+2012-01-22 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/lib/metadata.php, engine/tests/api/metastrings.php: Fixes #4321. Limit
+ alone is no longer valid for batch delete operations for metadata or
+ annotations.
+
+ * engine/lib/metadata.php: Refs #4325. Restored the null vs bool return in
+ elgg_delete_metadata().
+
+2012-01-22 Cash Costello <cash.costello@gmail.com>
+
+ * mod/search/views/default/search/list.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ views/default/navigation/pagination.php,
+ views/default/page/components/list.php: Fixes #4320 updated documentation for
+ base_url in pagination and added backward compatible code
+
+ * engine/lib/metadata.php: Fixes #4318 added guid to the list of parameters
+ for elgg_delete_metadata()
+
+2012-01-22 Team Webgalli <webgalli@gmail.com>
+
+ * mod/bookmarks/actions/bookmarks/save.php: Removed unnecessary gatekeeper
+ from bookmark actions.
+
+2012-01-21 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * engine/classes/ElggUser.php: fix for deprecated use of elgg_get_objects
+
+2012-01-21 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/cache.php, engine/lib/elgglib.php, engine/lib/plugins.php:
+ moved cache loading out of plugin code
+
+ * engine/lib/cache.php, engine/lib/plugins.php: better location for system
+ cache in data directory
+
+ * documentation/info/config.php, engine/lib/cache.php,
+ engine/lib/configuration.php,
+ ...2012100-1.8.3-system_cache-93100e7d55a24a11.php,
+ install/ElggInstaller.php, .../views/default/admin/developers/settings.php,
+ version.php, views/default/forms/admin/site/update_advanced.php: Fixes #4180
+ finished conversion to system cache by converting datalist/CONFIG var name
+
+ * actions/admin/site/update_advanced.php, languages/en.php,
+ mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php,
+ .../views/default/admin/developers/settings.php,
+ views/default/forms/admin/site/update_advanced.php: updated the display to
+ show system cache language
+
+ * actions/admin/plugins/activate.php,
+ actions/admin/plugins/activate_all.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/deactivate_all.php,
+ actions/admin/plugins/set_priority.php, actions/admin/site/flush_cache.php,
+ actions/admin/site/update_advanced.php, engine/lib/cache.php,
+ engine/lib/deprecated-1.8.php, engine/lib/plugins.php,
+ engine/lib/upgrades/2011010101.php,
+ mod/developers/actions/developers/settings.php, upgrade.php: switched the
+ function names to system cache
+
+ * engine/lib/cache.php, engine/lib/configuration.php,
+ engine/lib/database.php, engine/lib/elgglib.php, engine/lib/languages.php,
+ engine/lib/sessions.php, engine/lib/sites.php, engine/lib/views.php,
+ engine/start.php: cleans up the boot process
+
+ * engine/lib/languages.php, engine/start.php: single for loop for loading
+ libraries
+
+ * engine/lib/configuration.php: updated documentation of configuration lib
+
+ * engine/start.php: improved documentation in bootstrap script
+
+2012-01-20 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/system_log.php,
+ ...2012000-1.8.3-ip_in_syslog-87fe0f068cf62428.php,
+ mod/logbrowser/languages/en.php,
+ .../admin/administer_utilities/logbrowser.php,
+ .../views/default/forms/logbrowser/refine.php,
+ mod/logbrowser/views/default/logbrowser/table.php, version.php: Fixes #2222.
+ Added IP address to system log table and log browser. Fixed problem in log
+ browser that would only show entries without an owner_guid.
+
+2012-01-20 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggUser.php, engine/lib/statistics.php,
+ mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/owner.php,
+ views/default/core/settings/tools.php: Refs #4293 removed unnecessary
+ get_input('offset') calls since elgg_list_entities() calls that
+
+ * engine/lib/entities.php, engine/lib/users.php,
+ mod/members/pages/members/search.php: Fixes #4303 passing arguments to
+ elgg_view_entity_list in options array
+
+2012-01-16 Sem <sembrestels@riseup.net>
+
+ * views/default/forms/admin/site/update_advanced.php: Fixed #3155. Limited
+ site default access to core access levels.
+
+2012-01-13 Sem <sembrestels@riseup.net>
+
+ * mod/file/graphics/icons/application.gif,
+ mod/file/graphics/icons/application_lrg.gif,
+ mod/file/graphics/icons/archive.gif, mod/file/graphics/icons/archive_lrg.gif,
+ mod/file/graphics/icons/excel.gif, mod/file/graphics/icons/excel_lrg.gif,
+ mod/file/graphics/icons/general.gif, mod/file/graphics/icons/general_lrg.gif,
+ mod/file/graphics/icons/music.gif, mod/file/graphics/icons/music_lrg.gif,
+ mod/file/graphics/icons/openoffice.gif,
+ mod/file/graphics/icons/openoffice_lrg.gif,
+ mod/file/graphics/icons/pages.gif, mod/file/graphics/icons/pages_lrg.gif,
+ mod/file/graphics/icons/pdf.gif, mod/file/graphics/icons/pdf_lrg.gif,
+ mod/file/graphics/icons/ppt.gif, mod/file/graphics/icons/ppt_lrg.gif,
+ mod/file/graphics/icons/text.gif, mod/file/graphics/icons/text_lrg.gif,
+ mod/file/graphics/icons/vcard.gif, mod/file/graphics/icons/vcard_lrg.gif,
+ mod/file/graphics/icons/video.gif, mod/file/graphics/icons/video_lrg.gif,
+ mod/file/graphics/icons/word.gif, mod/file/graphics/icons/word_lrg.gif,
+ mod/pages/images/pages.gif, mod/pages/images/pages_lrg.gif: Fixes #3911. File
+ and page icons with transparent backgrounds since now.
+
+2012-01-18 Jerome Bakker <jeabakker@coldtrick.com>
+
+ * actions/admin/site/update_advanced.php: solves part of #4307
+
+ * actions/admin/site/update_basic.php: solves part of #4307
+
+2012-01-17 adayth <aday.talavera@gmail.com>
+
+ * mod/file/start.php: Fixes #4305 added backward compatibility for file read
+ url
+
+2012-01-16 Brett Profitt <brett.profitt@gmail.com>
+
+ * .../messages/exceptions/admin_exception.php: Refs #4036. Forgot to add a
+ new view.
+
+2012-01-15 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/elgglib.php, languages/en.php,
+ views/failsafe/messages/exceptions/exception.php: Fixes #4036. Hiding
+ exceptions except for admin users.
+
+2012-01-12 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/object/widget.php: added clearfix to increase the size of
+ the area for the drag handle
+
+2012-01-11 cash <cash.costello@gmail.com>
+
+ * CHANGES.txt, version.php: updated version and changes.txt
+
+ * engine/lib/elgglib.php, engine/lib/views.php, mod/thewire/start.php: Fixes
+ #4292 added a white list for ajax views
+
+2012-01-11 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * views/default/css/elements/components.php, views/default/output/tags.php:
+ class namespacing
+
+2012-01-10 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, engine/tests/api/annotations.php,
+ engine/tests/api/metadata.php: Fixes #4269. Not using ElggBatch to delete
+ metadata / annotations. Added unit tests for deleting annotations/md. Fixed
+ an annoying inconsistency with "metastring/s" option in private functions.
+
+2012-01-09 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php: Fixes #4243. Added docs for metadata_calculation
+ option to elgg_get_metadata().
+
+2012-01-09 Jeroen Dalsem <jdalsem@coldtrick.com>
+
+ * engine/classes/ElggWidget.php: Fixes #4285 move only fetches 10 items
+
+2012-01-09 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggBatch.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggMemcache.php, engine/classes/ElggWidget.php,
+ engine/classes/XMLRPCCall.php, engine/handlers/export_handler.php,
+ engine/lib/actions.php, engine/lib/configuration.php,
+ engine/lib/filestore.php, engine/lib/metadata.php, engine/lib/navigation.php,
+ engine/lib/output.php, engine/lib/private_settings.php, engine/lib/users.php,
+ engine/lib/views.php: coding standard fixes to engine
+
+2012-01-09 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * views/default/css/elements/components.php: tags css
+
+ * views/default/output/tags.php: fixes tags html markup issues
+
+2012-01-08 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggExtender.php, engine/classes/ElggMenuBuilder.php,
+ engine/classes/ElggMenuItem.php, engine/classes/ElggMetadata.php,
+ engine/classes/ElggUser.php, engine/classes/SuccessResult.php,
+ engine/lib/annotations.php, engine/lib/cache.php, engine/lib/metadata.php,
+ engine/lib/output.php, engine/lib/pagehandler.php, engine/lib/pageowner.php,
+ engine/lib/plugins.php, engine/lib/users.php: most of the comments in the
+ engine now past the sniffer
+
+ * engine/classes/ElggCache.php, engine/classes/ElggMenuBuilder.php,
+ engine/classes/ElggMenuItem.php, engine/classes/ElggPlugin.php,
+ engine/classes/ElggPluginPackage.php, engine/classes/ElggSite.php,
+ engine/lib/access.php, engine/lib/admin.php, engine/lib/database.php,
+ engine/lib/extender.php, engine/lib/input.php, engine/lib/relationships.php,
+ engine/lib/river.php: coding standards fixes - comments
+
+ * mod/groups/actions/discussion/reply/save.php,
+ mod/groups/actions/discussion/save.php, mod/groups/lib/discussion.php: Fixes
+ #3216 passing type/subtype for group discussions
+
+ * mod/search/pages/search/index.php: Fixes #2199 can now pass entity
+ type/subtype to tag search
+
+ * mod/file/actions/file/upload.php, mod/file/start.php,
+ .../default/file/specialcontent/image/default.php: Fixes #2421 added icontime
+ to files with thumbnails
+
+ * mod/search/pages/search/index.php: Fixes #2404 not using full set of query
+ parameters for custom search types
+
+ * engine/lib/entities.php: Fixes #4234 forcing limit to be nonnegative
+
+ * mod/messages/views/default/messages/js.php: updated the messages plugin to
+ use 1.8's JS hook system
+
+ * mod/groups/views/default/groups/js.php: updated groups js to use new JS
+ hook system
+
+ * js/lib/ui.widgets.js, mod/profile/views/default/profile/js.php: Fixes
+ #4192 making the bottom of widget columns equal rather than height
+
+ * actions/login.php: Fixes #4171 login success message is now i18n friendly
+
+ * engine/handlers/cache_handler.php: Fixes #2002 adds ETag support to simple
+ cache handler
+
+ * engine/classes/ODDDocument.php: Refs #4271 integrates fix to 1.8 branch
+ for ODDDocument
+
+ * engine/lib/elgglib.php: Fixes #4278 deprecation notices ignore debug level
+ but do respect whether the admin is logged in
+
+ * engine/lib/elgglib.php: fixed some formatting
+
+2012-01-07 Cash Costello <cash.costello@gmail.com>
+
+ * mod/groups/icon.php, mod/profile/icondirect.php: added check for existance
+ of IF-NONE-MATCH header in request
+
+2012-01-03 Sem <sembrestels@riseup.net>
+
+ * mod/groups/icon.php: Refs #4142. Also added ETag in group icon.
+
+ * mod/profile/icondirect.php: Refs #4142. Added ETag header support for user
+ avatars.
+
+2012-01-07 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggRiverItem.php, mod/thewire/classes/ElggWire.php: Refs
+ #3209 fixed spacing and added options for wire method
+
+ * engine/classes/ODDEntity.php, engine/classes/ODDMetaData.php,
+ engine/classes/ODDRelationship.php: pulled ODD classes out of ODDEntity
+
+2012-01-05 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php: Fixes #4243. Added docs to explain the
+ difference between annotation_calculation and calculation.
+
+2012-01-04 cash <cash.costello@gmail.com>
+
+ * engine/lib/web_services.php: Fixes #4270 removed use of deprecated method
+
+ * mod/pages/lib/pages.php, mod/pages/pages/pages/owner.php: Fixes #4266
+ fixed limit bugs with pages plugin
+
+ * mod/embed/views/default/navigation/menu/embed.php,
+ views/default/navigation/tabs.php: updated options on navigation/tabs
+
+ * engine/lib/entities.php: fixed enabling bug, added flag for recursion,
+ removed unnecessary code in disable function
+
+ * engine/tests/objects/entities.php: added a unit test for recursive
+ enabling/disabling
+
+2012-01-03 Sem <sembrestels@riseup.net>
+
+ * engine/lib/entities.php: Refs #2051. Fixed: ElggEntity's enable does not
+ recurse.
+
+2012-01-04 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/objects.php: Fixes #3710. Returning false from update, <type>
+ event no longer deletes entity. Returning false from create, <type> still
+ deletes the entity because of the "return false to halt events" approach.
+ This will be reviewed for #3784.
+
+2012-01-02 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/admin.php, languages/en.php,
+ views/default/admin/statistics/basic.php,
+ views/default/admin/statistics/numentities.php,
+ views/default/admin/statistics/overview.php,
+ views/default/admin/statistics/overview/basic.php,
+ .../admin/statistics/overview/numentities.php,
+ views/default/admin/statistics/server.php,
+ views/default/admin/statistics/server/php.php,
+ .../default/admin/statistics/server/web_server.php: Fixes #4164 adds a server
+ statistics page to admin area
+
+2012-01-01 cash <cash.costello@gmail.com>
+
+ * mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ .../admin/administer_utilities/diagnostics.php,
+ .../admin/develop_utilities/diagnostics.php: moved diagnostics to administer
+ utilities menu area rather than developers
+
+ * mod/groups/languages/en.php, mod/groups/start.php: Fixes #2230 group acl
+ names are not i18n friendly
+
+ * engine/lib/access.php, languages/en.php, views/default/output/access.php:
+ Fixes #3939 if user does not have permissions to see the name of the access
+ collection, it is shown as "Limited"
+
+2012-01-01 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggExtender.php, engine/classes/ElggObject.php,
+ engine/classes/ElggRelationship.php, engine/classes/ElggRiverItem.php,
+ mod/blog/classes/ElggBlog.php, mod/thewire/classes/ElggWire.php: Fixes #3209
+ finished adding class properties documentation
+
+ * engine/classes/ElggCache.php: fixed copy and paste error in documentation
+ of ElggCache
+
+ * engine/classes/ElggDiskFilestore.php: Refs #2290 removes check for
+ username
+
+ * documentation/examples/plugins/start.php: Fixes #3225 added what was
+ missing from the basic init function example
+
+ * engine/lib/users.php: Fixes #690 admin editing a user no longer makes them
+ appear active
+
+ * engine/lib/admin.php: Fixes #4168 ignoring access when saving an admin
+ notice
+
+ * views/default/css/admin.php: Fixes #3981 adds a better pre and code style
+ to admin theme
+
+ * engine/lib/plugins.php: Fixes #3992 fixed notice when loading plugins for
+ first time
+
+ * mod/developers/languages/en.php, mod/developers/start.php,
+ .../default/admin/develop_tools/unit_tests.php,
+ mod/diagnostics/languages/en.php,
+ .../admin/develop_utilities/diagnostics.php: Fixes #4137 moves test UI to
+ developers plugin
+
+2011-12-31 cash <cash.costello@gmail.com>
+
+ * engine/lib/users.php: Fixes #4260 get_user_sites() now works
+
+ * engine/lib/notification.php: Fixes #4208 notifications do not use site
+ guid
+
+ * engine/classes/ElggSite.php: Fixes #4204 using only the relationship for
+ getting members of a site
+
+ * engine/classes/ElggWidget.php: Fixes #4255 new widget ordering code
+
+2011-12-31 Evan Winslow <evan@elgg.org>
+
+ * engine/classes/ElggGroup.php, engine/classes/ElggObject.php,
+ engine/classes/ElggSite.php, engine/classes/ElggUser.php: Refs #3209: Adds
+ property docs for the four main entity classes
+
+2011-12-31 cash <cash.costello@gmail.com>
+
+ * engine/classes/ElggWidget.php: Fixes #4259 using container guid for
+ widgets when moving
+
+2011-12-29 Jeroen Dalsem <jdalsem@coldtrick.com>
+
+ * engine/classes/ElggWidget.php: Small typo. Seems to work, but i prefer it
+ nice and tidy :)
+
+2011-12-31 cash <cash.costello@gmail.com>
+
+ * engine/lib/widgets.php: Fixes #4254 not registering the default widgets
+ callback more than once per event
+
+ * mod/groups/actions/groups/edit.php: Fixes #4152 setting access on group
+ creation river item
+
+ * engine/lib/river.php: Fixes #4258 fixes add_to_river escaping
+
+ * .../views/default/groups/group_sort_menu.php: Fixes #4228 group sort menu
+ view accepts selected menu item from page handler
+
+ * views/default/css/admin.php: Fixes #4257 updates admin theme for widget
+ menu changes
+
+ * mod/groups/upgrades/2011030101.php: Fixes #4256 reruns the forum topic
+ upgrade by checking the 5 oldest topics
+
+ * ...3101-1.8.2-fix_blog_status-b14c2a0e7b9e7d55.php, version.php: Fixes
+ #4239 rerun corrected blog status upgrade
+
+2011-12-31 Cash Costello <cash.costello@gmail.com>
+
+ * ...100-1.8.2-fix_friend_river-b17e7ff8345c2269.php, version.php: Fixes
+ #4248 fixed friend river text
+
+ * mod/blog/start.php: Fixes #4253 added backward compatibility for blog read
+ url
+
+2011-12-24 Cash Costello <cash.costello@gmail.com>
+
+ * actions/avatar/revert.php, engine/lib/users.php, languages/en.php,
+ views/default/core/avatar/upload.php: Fixes #3272 added button to revert
+ avatar
+
+ * engine/lib/elgglib.php: Refs #4009 registering the walled garden css and
+ js on every request
+
+2011-12-23 Cash Costello <cash.costello@gmail.com>
+
+ * mod/blog/lib/blog.php, mod/blog/start.php,
+ mod/blog/views/default/blog/sidebar.php,
+ mod/blog/views/default/blog/sidebar/archives.php: Fixes #3751 adds a group
+ blog archive page
+
+ * js/lib/ui.widgets.js, views/default/css/admin.php,
+ views/default/css/elements/modules.php, views/default/object/widget.php:
+ Fixes #4186 restricting the drag handle for widgets
+
+ * mod/groups/languages/en.php, mod/groups/lib/groups.php,
+ mod/groups/views/default/forms/groups/find.php,
+ mod/groups/views/default/forms/groups/search.php,
+ mod/groups/views/default/groups/sidebar/find.php,
+ mod/groups/views/default/groups/sidebar/search.php: Fixes #2074 adds group
+ search
+
+ * .../actions/groups/membership/delete_invite.php: Fixes #1922 can now
+ delete invites to invisible groups
+
+ * mod/externalpages/actions/edit.php,
+ mod/externalpages/views/default/expages/menu.php,
+ .../views/default/forms/expages/edit.php: Fixes #4069 reusing the previous
+ ElggObject for external pages
+
+ * engine/lib/annotations.php: Fixes #683 not deleting annotation when event
+ handlers return false on an update
+
+ * engine/lib/metadata.php: Fixes #682 not deleting metadata when update,
+ metadata event handlers return false
+
+ * engine/lib/users.php: Fixes #3716 setting the language when registering
+ new users
+
+2011-12-23 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * views/default/navigation/tabs.php: fixes spacing. add a note on text/title
+
+2011-12-23 cash <cash.costello@gmail.com>
+
+ * mod/groups/upgrades/2011030101.php: added access override to the forum
+ upgrade
+
+ * mod/blog/actions/blog/save.php, mod/blog/start.php,
+ mod/blog/views/default/object/blog.php: Fixes #4179 not setting excerpt if
+ none set
+
+ * ...8_svn-blog_status_metadata-4645225d7b440876.php,
+ ...8b1-sites_need_a_site_guid-6d9dcbf46c0826cc.php, mod/blog/start.php,
+ mod/groups/upgrades/2011030101.php: Refs #4239 fixed upgrade scripts with bad
+ limits
+
+ * engine/classes/ElggBatch.php: Refs #4239 improved the documentation on
+ ElggBatch for the limit option
+
+ * mod/blog/views/default/blog/group_module.php: Fixes #4240 not showing
+ draft blog posts in group module
+
+2011-12-23 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * views/default/navigation/tabs.php: fixes for tab rendering
+
+2011-12-19 Steve Clay <steve@mrclay.org>
+
+ * mod/tinymce/views/default/js/tinymce.php: Solves issue 4222: incorrectly
+ nested lists in Firefox
+
+2011-12-21 Cash Costello <cash.costello@gmail.com>
+
+ * CHANGES.txt, version.php: Set version to 1.8.2 and updated the changes
+ list
+
+2011-12-19 cash <cash.costello@gmail.com>
+
+ * engine/lib/widgets.php: Fixes #4184 dashboard default widgets should work
+ and widgets should be created regardless of access
+
+ * mod/oauth_api/manifest.xml: Refs #4221 added a conflict statement to
+ manifest for PECL extension
+
+ * engine/lib/pagehandler.php, views/default/css/elements/layout.php,
+ views/default/page/layouts/error.php: added more spacing to error layout
+
+2011-12-18 cash <cash.costello@gmail.com>
+
+ * js/lib/ui.widgets.js: Refs #4192 adds proper 'px' to minHeight but does
+ not solve the issue
+
+2011-12-15 Ismayil Khayredinov <ismayil.khayredinov@hypejunction.com>
+
+ * engine/lib/navigation.php, js/lib/ui.widgets.js,
+ views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php,
+ views/default/object/widget/elements/controls.php: Fix #4200: Converting
+ widgets controls into an elgg menu
+
+ * engine/lib/views.php, mod/developers/start.php, mod/embed/start.php: Fixes
+ 4209: jquery.form.js library loading
+
+2011-12-17 cash <cash.costello@gmail.com>
+
+ * engine/lib/user_settings.php, engine/lib/users.php: moved user settings
+ extensions to user_settings library
+
+2011-12-17 Cash Costello <cash.costello@gmail.com>
+
+ * mod/embed/start.php, mod/embed/views/default/embed/layout.php,
+ mod/embed/views/default/js/embed/embed.php,
+ .../views/default/embed/file_upload/content.php: Fixes #4086 handling
+ containers for embed uploading
+
+ * engine/lib/output.php: Fixes #4190 accepting full urls with non-ascii
+ characters
+
+ * mod/embed/views/default/js/embed/embed.php: Refs #3971 inserting medium
+ size thumbnails rather than small
+
+ * mod/embed/manifest.xml: embed can now be activated without the file plugin
+ as other plugins can provide content
+
+ * mod/uservalidationbyemail/start.php: Fixes #4217 user validation by email
+ now respects decisions by other plugins
+
+2011-12-15 Cash Costello <cash.costello@gmail.com>
+
+ * js/lib/ui.userpicker.js, views/default/input/userpicker.php: Fixes #4214
+ added missing dependency for userpicker
+
+2011-12-12 zcho <zcho05@gmail.com>
+
+ * engine/lib/users.php: fixes elgg_get_user_validation_status() always
+ returning null
+
+2011-12-15 Cash Costello <cash.costello@gmail.com>
+
+ * mod/uservalidationbyemail/lib/functions.php: Refs #4196 integrates fix
+ into 1.8 branch
+
+2011-12-12 hypeJunction <ismayil.khayredinov@hypejunction.com>
+
+ * mod/uservalidationbyemail/start.php: Fixed #4198 uservalidationbyemail
+ respects the return value of the register,user hook
+
+2011-12-08 cash <cash.costello@gmail.com>
+
+ * engine/lib/languages.php, js/lib/languages.js: Fixes #3181 caching
+ language js on server side with proper headers
+
+ * views/default/navigation/pagination.php: Fixes #4189 correctly getting the
+ base url in pagination view
+
+ * engine/lib/annotations.php: Fixes #4025 added a url handler for comments
+
+ * actions/admin/site/flush_cache.php, engine/lib/admin.php,
+ languages/en.php, views/default/widgets/control_panel/content.php: Fixes
+ #4185, #2111 adds control panel widget
+
+ * views/default/navigation/menu/default.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/navigation/menu/elements/section.php: added the ability to pass
+ a class to be applied to all menu item <li> elements
+
+ * engine/classes/ElggSite.php: Fixes #4182 if simplecache is empty, the
+ cache requests go through the engine and need to be white listed for the
+ walled garden
+
+2011-12-07 Cash Costello <cash.costello@gmail.com>
+
+ * mod/profile/start.php: fixed profile editing routing for profile plugin
+
+2011-12-06 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * engine/lib/entities.php: #4187 (get_entity optimization)
+
+2011-12-07 Cash Costello <cash.costello@gmail.com>
+
+ * js/lib/ui.widgets.js: simplified the JavaScript for deleteing a widget
+
+2011-12-06 Jeroen Dalsem <jdalsem@coldtrick.com>
+
+ * views/default/object/widget/elements/controls.php: delete action expects
+ widget_guid instead of guid
+
+2011-12-06 cash <cash.costello@gmail.com>
+
+ * engine/lib/output.php: Fixes #4173 removed use of \w since it is locale
+ sensitive
+
+2011-12-05 cash <cash.costello@gmail.com>
+
+ * engine/lib/pagehandler.php, languages/en.php,
+ views/default/errors/404.php, views/default/errors/default.php,
+ views/default/page/error.php, views/default/page/layouts/error.php: first
+ version of a 404 page
+
+2011-12-04 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/page/admin.php, views/default/page/default.php: Fixes #4032
+ rendering page elements before head/foot
+
+ * engine/tests/regression/trac_bugs.php,
+ mod/blog/actions/blog/auto_save_revision.php, mod/blog/actions/blog/save.php:
+ removed some usage of deprecated methods
+
+2011-12-03 cash <cash.costello@gmail.com>
+
+ * mod/search/start.php: Fixes #4046 checking offset compared to string
+ length
+
+ * engine/lib/entities.php: Refs #4176 added elgg_list_registered_entities()
+ fix to 1.8 branch
+
+2011-12-01 Ash Ward <ash@netality.com>
+
+ * mod/messages/languages/en.php, mod/messages/start.php: Fixes #4170:
+ Messages icon on top bar doesn't have a title attribute (tooltip)
+
+2011-12-01 cash <cash.costello@gmail.com>
+
+ * views/default/graphics/ajax_loader.php: added support for passing classes
+ to ajax loader
+
+2011-11-22 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * engine/classes/ElggMemcache.php: Fixes #1995 (memcache: incorrect check
+ for get() return value)
+
+2011-11-25 Jeff Tilson <jrtilson@gmail.com>
+
+ * engine/lib/views.php: Need to call
+ elgg_register_simplecache_view('css/lightbox') to register the lightbox CSS
+ with simplecache
+
+2011-11-28 cash <cash.costello@gmail.com>
+
+ * engine/lib/river.php, engine/tests/api/river.php: Fixes #3496 finished up
+ this ticket by updating unit test and using more parantheses to make it clear
+ how the OR/AND gets applied
+
+2011-11-28 Cash Costello <cash.costello@gmail.com>
+
+ * mod/search/pages/search/index.php,
+ mod/search/views/default/search/search_box.php: Fixes #4139 if no mbstring
+ extension we strip characters for display with search
+
+ * mod/likes/start.php: Fixes #4116 not liking users now since people think
+ they are liking the activity entry
+
+ * .../views/default/forms/messages/process.php: Fixes #3986 not showing
+ message buttons if no messages
+
+ * views/default/css/elements/forms.php: Fixes #4052 removed the :focus
+ styling on every input element
+
+2011-11-27 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/js/lightbox.php: Fixes #3773 added documentation hint for
+ using advanced features of fancybox
+
+ * actions/profile/edit.php, views/default/core/settings/account/name.php:
+ Fixes #3953 adds back the ability to change display name from settings page
+
+ * views/default/css/admin.php, views/default/css/elements/components.php,
+ views/default/css/elements/core.php: Fixes #3982 fixing scrolling issue with
+ elgg-body
+
+ * views/default/admin/plugins.php, views/default/js/admin.php,
+ views/default/object/plugin/full.php: Fixes #3954 using lightbox for plugin
+ screenshots
+
+ * engine/lib/entities.php: fixed some documentation related to subtypes
+
+ * views/rss/page/components/gallery.php: rss view type needed a gallery view
+
+2011-11-24 András Szepesházi <szepeshazi@gmail.com>
+
+ * actions/useradd.php: Fixed typo that prevented creating an admin user via
+ the Admin panel (user was created, but not elevated to admin).
+
+2011-11-25 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/elgglib.php, languages/en.php: added a better message for php
+ libraries that don't exist on disk
+
+ * views/default/page/components/gallery.php: returning from gallery view if
+ no items in the gallery
+
+ * .../views/default/groups/membershiprequests.php: Fixes #4151 removed
+ unnecessary $user definition
+
+2011-11-17 Danny Navarro <j@dannynavarro.net>
+
+ * engine/lib/river.php: Refs #3496 improving type/subtype handling for the
+ river
+
+2011-11-23 cash <cash.costello@gmail.com>
+
+ * engine/lib/river.php, pages/river.php: Refs #4143 adds a unit test for
+ type/subtype where sql generation
+
+ * views/default/css/elements/navigation.php: Fixes #4145 using margin rather
+ than padding for topbar menu items
+
+2011-11-22 cash <cash.costello@gmail.com>
+
+ * mod/logbrowser/start.php, .../admin/administer_utilities/logbrowser.php,
+ mod/logbrowser/views/default/logbrowser/refine.php: Fixes #3775 updates the
+ log browser link and keeps the refine area open if the page is loaded with a
+ user selected
+
+2011-11-20 Cash Costello <cash.costello@gmail.com>
+
+ * mod/groups/start.php: added check in case something goes wrong with the
+ container entity of a discussion
+
+2011-11-20 cash <cash.costello@gmail.com>
+
+ * install/languages/en.php: Fixes #4140 fixed spelling mistake
+
+ * views/default/css/elements/typography.php: fixed error in css for
+ .elgg-output ordered lists
+
+2011-11-19 cash <cash.costello@gmail.com>
+
+ * views/default/object/elements/summary.php: don't display <h3> if no title
+
+2011-11-19 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/navigation/menu/site.php: Fixes #4102 handling no menu items
+ for site menu
+
+ * actions/login.php, actions/user/requestnewpassword.php, languages/en.php,
+ views/default/forms/user/requestnewpassword.php: Fixes #641 users can submit
+ email address to reset password
+
+2011-11-18 cash <cash.costello@gmail.com>
+
+ * engine/lib/user_settings.php, engine/lib/users.php, languages/en.php:
+ Fixes #3792 admin can edit settings again
+
+ * languages/en.php: made status message a little more grammatical
+
+ * js/lib/pageowner.js: Fixes #4093 making sure elgg.page_owner is defined
+
+ * mod/profile/views/default/profile/owner_block.php: don't want hover menu
+ or link on owner block icon in profile
+
+ * views/default/forms/admin/site/update_advanced.php,
+ views/default/forms/admin/site/update_basic.php: line between settings and
+ save button not needed
+
+ * actions/admin/site/update_basic.php: Fixes #3996 displaying message when
+ basic site settings are saved
+
+ * views/default/css/elements/navigation.php: Fixes #3929 used a combination
+ of min-width/max-width and overflow hidden to provide better support for long
+ names
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggObject.php, engine/classes/ElggSite.php,
+ engine/classes/ElggUser.php: Fixes #4111 guid is now an int
+
+ * mod/thewire/start.php: Fixes #4085 accepting . in usernames for the wire
+
+ * engine/tests/api/helpers.php: Fixes #4128 better test of null passed to
+ registering external files
+
+ * engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_18/manifest.xml: Fixes #4134 improved plugin
+ manifest tests by using assertIdentical more
+
+ * engine/classes/ElggPluginManifest.php, engine/tests/api/plugins.php: Fixes
+ #4133 updated type in plugin manifest test
+
+ * engine/tests/api/metastrings.php: Fixes #4132 fixed metastring delete by
+ id test
+
+ * engine/lib/metastrings.php, engine/tests/api/metastrings.php: Fixes #4131
+ elgg_delete_metastring_based_object_by_id() should return a bool
+
+ * engine/tests/api/helpers.php: Fixes #4129 fixed priority list tests
+
+ * engine/tests/api/entity_getter_functions.php: Fixes #4126 fixed test for
+ checking relationship existence
+
+ * engine/classes/ElggGroup.php, engine/lib/relationships.php: Fixes #4118
+ returning bool from leave group functions
+
+ * engine/lib/access.php, engine/tests/api/access_collections.php: Fixes
+ #4115 returning bool from remove_user_from_access_collection()
+
+ * engine/lib/access.php: Fixes #4113 returning a bool from
+ delete_access_collection()
+
+ * engine/tests/api/entity_getter_functions.php: Fixes #4125 checking count
+ correctly
+
+ * engine/tests/api/entity_getter_functions.php: Fixes #4122, #4123, #4124
+ testing for empty arrays and added some documentation for the sanity of
+ future developers
+
+ * engine/lib/users.php: Fixes #4112 get_user_by_username() returns false if
+ no user
+
+2011-11-18 Cash Costello <cash.costello@gmail.com>
+
+ * engine/tests/api/metastrings.php, engine/tests/objects/sites.php,
+ engine/tests/objects/users.php, engine/tests/test_skeleton.php: Fixes #4109
+ remove inaccurate comment due to copy & paste
+
+ * engine/lib/entities.php, engine/tests/objects/entities.php,
+ engine/tests/objects/sites.php, engine/tests/objects/users.php: Fixes #4108
+ delete() returns bool now and updated unit tests
+
+ * engine/tests/objects/entities.php: Fixes #4104, #4105 fixed casting in
+ testElggEntityMetadata()
+
+ * engine/tests/api/access_collections.php: Fixes #4114 checking type for acl
+ test
+
+2011-11-17 Cash Costello <cash.costello@gmail.com>
+
+ * engine/tests/api/metadata.php: Fixes #4120 metadata tests now check for
+ the correct types
+
+ * engine/tests/objects/entities.php: Fixes #4094, #4095 fixes casting issues
+ in unit tests - thanks to andres.fortier
+
+ * mod/externalpages/start.php: Fixes #4101 added footer links back
+
+ * mod/thewire/pages/thewire/everyone.php: Fixes #4100 adds the wire post
+ form back to all page
+
+2011-11-16 cash <cash.costello@gmail.com>
+
+ * mod/thewire/pages/thewire/friends.php,
+ mod/thewire/pages/thewire/owner.php: removed two deprecated function calls
+ from thewire
+
+2011-11-15 Cash Costello <cash.costello@gmail.com>
+
+ * CHANGES.txt: updated release date
+
+ * documentation/examples/plugins/README.txt,
+ documentation/examples/plugins/start.php: updated the plugin skeleton with
+ some instructions
+
+ * actions/avatar/crop.php, actions/avatar/upload.php: fixed bugs in avatar
+ cropping with remembering old crop coordinates and resizing the master
+
+ * engine/lib/elgglib.php, js/lib/autocomplete.js, js/lib/avatar_cropper.js,
+ js/lib/friends_picker.js, js/lib/ui.autocomplete.js,
+ js/lib/ui.avatar_cropper.js, js/lib/ui.friends_picker.js,
+ js/lib/ui.userpicker.js, js/lib/userpicker.js: atleast renaming the ui js
+ libs
+
+ * engine/classes/ElggRelationship.php: Fixes #4089 corrects documentation of
+ ElggRelationship constructor
+
+ * engine/lib/relationships.php: Fixes #4090 removes double assignment -
+ thanks to andres.fortier
+
+2011-11-14 Cash Costello <cash.costello@gmail.com>
+
+ * mod/messages/pages/messages/send.php,
+ mod/messages/views/default/forms/messages/send.php: Refs #4083 increased
+ number of friends to 50
+
+2011-11-13 cash <cash.costello@gmail.com>
+
+ * engine/classes/ElggMenuItem.php: added the missing set/get priority
+ methods to ElggMenuItem
+
+2011-11-13 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/users.php, .../views/default/bookmarks/bookmarklet.php,
+ views/default/core/avatar/upload.php, views/default/forms/avatar/crop.php,
+ views/default/icon/default.php, views/default/icon/user/default.php,
+ views/default/output/img.php: Fixes #4082 adds output/img
+
+ * .../views/default/groups/profile/widgets.php: should be a ul rather than a
+ div
+
+ * views/default/output/confirmlink.php: need to unset the trusted link key
+
+2011-11-12 cash <cash.costello@gmail.com>
+
+ * documentation/examples/hooks/advanced.php,
+ documentation/examples/hooks/all.php, documentation/examples/hooks/basic.php,
+ documentation/examples/hooks/register/advanced.php,
+ documentation/examples/hooks/register/all.php,
+ documentation/examples/hooks/register/basic.php,
+ documentation/examples/hooks/register/emit.php,
+ documentation/examples/hooks/trigger.php,
+ documentation/examples/hooks/trigger/advanced.php,
+ documentation/examples/hooks/trigger/basic.php: cleaned up the plugin hooks
+ documentation
+
+ * documentation/examples/actions/basic.php,
+ documentation/examples/actions/manual_tokens.php,
+ documentation/examples/events/advanced.php,
+ documentation/examples/events/all.php,
+ documentation/examples/events/basic.php,
+ documentation/examples/events/emit.php,
+ documentation/examples/events/trigger.php,
+ documentation/examples/plugins/README.txt,
+ documentation/examples/plugins/languages/en.php,
+ documentation/examples/plugins/manifest.xml,
+ .../examples/plugins/manifest_options/manifest.xml,
+ .../examples/plugins/skeleton/manifest.xml, documentation/info/config.php,
+ documentation/info/manifest.xml, documentation/stubs/config.php: added better
+ plugin skeleton and added documentation to some of the examples
+
+2011-11-12 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/admin.php: added bottom margin to info modules for
+ plugin settings
+
+ * engine/lib/users.php, mod/groups/actions/groups/edit.php,
+ mod/groups/actions/groups/membership/leave.php, mod/invitefriends/start.php,
+ pages/entities/index.php, pages/settings/account.php,
+ pages/settings/statistics.php: removed uses of deprecated function for
+ setting page owner guid
+
+ * mod/invitefriends/actions/invite.php: fixed exception being thrown when no
+ site email address has been set
+
+ * views/default/css/admin.php: added a input class for text boxes so that
+ they aren't super long
+
+ * mod/messages/pages/messages/send.php: removed deprecated function from
+ messages plugin
+
+2011-11-10 cash <cash.costello@gmail.com>
+
+ * languages/en.php, mod/pages/pages/pages/edit.php: fixed WSOD when trying
+ to edit a private page
+
+ * engine/lib/database.php: Fixes #4071 hellekin was right - it was a bad
+ idea to format queries
+
+ * js/lib/ajax.js, js/lib/elgglib.js, js/lib/security.js,
+ js/tests/ElggLibTest.js, js/tests/ElggSecurityTest.js: Fixes #4010 not
+ sending naked query strings into add ajax tokens and also fixed a few related
+ bugs in JavaScript
+
+2011-11-08 Cash Costello <cash.costello@gmail.com>
+
+ * mod/likes/languages/en.php: exclamation marks are annoying in
+ notifications
+
+ * CONTRIBUTORS.txt, COPYRIGHT.txt: we rewrote default widgets from scratch
+ so updated copyright/contributors to reflect that
+
+ * .../examples/plugins/manifest_options/manifest.xml,
+ .../examples/plugins/skeleton/manifest.xml, engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_17/manifest.xml,
+ engine/tests/test_files/plugin_18/manifest.xml, mod/blog/manifest.xml,
+ mod/bookmarks/manifest.xml, mod/categories/manifest.xml,
+ mod/custom_index/manifest.xml, mod/dashboard/manifest.xml,
+ mod/developers/manifest.xml, mod/diagnostics/manifest.xml,
+ mod/embed/manifest.xml, mod/externalpages/manifest.xml,
+ mod/file/manifest.xml, mod/garbagecollector/manifest.xml,
+ mod/groups/manifest.xml, mod/htmlawed/manifest.xml,
+ mod/invitefriends/manifest.xml, mod/likes/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/members/manifest.xml, mod/messageboard/manifest.xml,
+ mod/messages/manifest.xml, mod/notifications/manifest.xml,
+ mod/oauth_api/manifest.xml, mod/pages/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/twitter_api/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: it is GPL General Public License not GPL Public
+ License
+
+ * views/rss/page/default.php: Refs #3150 can pass description to RSS page
+ shell
+
+2011-11-07 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggUser.php, views/default/js/initialize_elgg.php: Refs
+ #4007 previous solution to admin population in ElggUser was throwing warnings
+
+ * README.txt: fixed date on copyright and name of GPL
+
+ * mod/custom_index/start.php: removing deprecated functions from
+ custom_index plugin
+
+ * CHANGES.txt: Updated change log
+
+ * version.php: incremented version number
+
+ * INSTALL.txt: updated install instructions
+
+ * UPGRADE.txt: fixed wording in upgrade instructions
+
+2011-11-07 Evan Winslow <evan.b.winslow@gmail.com>
+
+ * documentation/coding_standards/best_practices.txt: Fixes #3397: Adds
+ 'positive' variable name standard to best practices file.
+
+2011-11-06 Cash Costello <cash.costello@gmail.com>
+
+ * mod/tinymce/views/default/js/tinymce.php,
+ .../default/tinymce/embed_custom_insert_js.php: Fixes #3853 caching a
+ bookmark for insert carot when embedding content into TinyMCE editor
+
+ * mod/tinymce/vendor/tinymce/changelog.txt,
+ .../tiny_mce/plugins/emotions/emotions.htm,
+ .../tiny_mce/plugins/emotions/js/emotions.js,
+ .../tiny_mce/plugins/emotions/langs/en_dlg.js,
+ .../tiny_mce/plugins/lists/editor_plugin.js,
+ .../tiny_mce/plugins/lists/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../tiny_mce/plugins/media/moxieplayer.swf,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/table.js,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../jscripts/tiny_mce/themes/advanced/charmap.htm,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../tiny_mce/themes/advanced/js/charmap.js,
+ .../tiny_mce/themes/advanced/js/color_picker.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../vendor/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_src.js: upgraded TinyMCE to 3.4.7
+
+ * mod/embed/views/default/js/embed/embed.php,
+ mod/likes/views/default/annotation/likes.php,
+ mod/messages/views/default/object/messages.php,
+ .../views/default/thewire/profile_status.php,
+ .../forms/twitter_api/interstitial_settings.php: removed uses of CSS class
+ .right from plugins
+
+ * views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php,
+ views/default/page/elements/footer.php: remove uses of the CSS class right
+ from core
+
+ * engine/lib/entities.php, mod/blog/activate.php, mod/thewire/activate.php:
+ Fixes #4068 not forcing update on adds when the subtype exists Refs #4058
+
+ * engine/lib/cron.php: $CONFIG->input is never initialized by page handling
+ so this code never did anything
+
+ * mod/blog/activate.php, mod/blog/deactivate.php, mod/search/README.txt,
+ mod/thewire/activate.php, mod/thewire/deactivate.php, mod/thewire/start.php:
+ Fixes #4067 adds activate/deactivate scripts
+
+ * views/default/icon/user/default.php: added a href override to the user
+ icon view
+
+2011-11-05 cash <cash.costello@gmail.com>
+
+ * engine/classes/ElggMenuItem.php, engine/lib/elgglib.php,
+ engine/lib/navigation.php, engine/lib/views.php, mod/blog/start.php,
+ mod/file/start.php, mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ .../views/default/object/groupforumtopic.php, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/profile/start.php,
+ mod/thewire/pages/thewire/everyone.php, pages/settings/account.php,
+ views/default/forms/login.php, views/default/input/button.php,
+ views/default/output/access.php, views/default/page/components/gallery.php,
+ views/default/page/components/list.php,
+ views/default/page/components/module.php,
+ views/default/page/layouts/one_column.php,
+ views/default/page/layouts/widgets.php: Fixes #4024 fixed a lot of notices -
+ enough for this release - found a few bugs
+
+ * .../views/default/admin/users/unvalidated.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ .../views/default/uservalidationbyemail/css.php,
+ .../views/default/uservalidationbyemail/js.php,
+ .../uservalidationbyemail/unvalidated_user.php: Fixes #3867 finished up
+ uservalidationbyemail styling after a great start by Sem
+
+ * views/default/css/admin.php, views/default/css/elements/core.php,
+ views/default/css/elements/helpers.php,
+ views/default/forms/admin/menu/save.php: cleaned up some CSS in admin theme
+
+ * mod/file/languages/en.php, mod/file/start.php,
+ views/default/navigation/listtype.php, views/default/navigation/viewtype.php,
+ views/default/page/elements/sidebar.php: Fixes #1253 added toggle for list
+ types to file plugin. It's not pretty so we may want to style/rethink in
+ future version
+
+ * engine/lib/input.php, engine/lib/views.php,
+ .../views/default/theme_preview/icons/avatars.php,
+ mod/file/views/default/icon/object/file.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../notifications/subscriptions/forminternals.php,
+ mod/profile/views/default/profile/owner_block.php,
+ views/default/icon/default.php, views/default/icon/user/default.php,
+ views/default/input/friendspicker.php, views/default/input/userpicker.php,
+ views/default/profile/icon.php, .../river/user/default/profileiconupdate.php:
+ Fixes #3567 standardized classes for icons
+
+ * mod/file/views/default/icon/object/file.php,
+ views/default/icon/default.php, views/default/icon/user/default.php: Fixes
+ #4023 escaping alt and title attributes in icon views
+
+ * mod/groups/start.php: Refs #4059 group icon handler needs to return true
+
+ * views/default/input/date.php, views/default/output/date.php: Fixes #4050
+ using ISO 8601 standard for dates
+
+ * engine/lib/entities.php: Fixes #4018 Refs #3722 merged up to 1.7.14 into
+ master
+
+ * engine/lib/entities.php: fixed spacing on two uses of unset()
+
+ * engine/lib/views.php, js/tests/jsTestDriver.conf,
+ vendors/jquery/jquery-1.6.1.min.js, vendors/jquery/jquery-1.6.2.min.js,
+ vendors/jquery/jquery-1.6.4.min.js, vendors/jquery/jquery-ui-1.8.14.min.js,
+ views/installation/page/default.php: Fixes #4057 updates jQuery version to
+ 1.6.4
+
+ * mod/file/download.php, mod/file/pages/file/download.php,
+ mod/file/pages/file/view.php, mod/file/start.php,
+ mod/file/views/rss/file/enclosure.php: Fixes #4048 using page handler for
+ file downloads
+
+ * engine/lib/database.php: Fixes #4049 casting bool to int so it doesn't
+ disappear in the cache key
+
+ * js/lib/elgglib.js, js/tests/ElggLibTest.js: Fixes #3976 fixed unit tests
+ for normalizing urls and standardized the code from the previous merge
+
+ * js/tests/README, js/tests/jsTestDriver.conf: Changed default port to a
+ common one found in tutorials. Let me know if this is an issue. Also added
+ intructions for running the unit tests.
+
+2011-11-05 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/pagehandler.php: Refs #4053 improved documentation of
+ page_handler()
+
+ * actions/avatar/upload.php: Refs #4011 forgot upload action
+
+ * mod/twitter_api/lib/twitter_api.php: Fixes #4061 getting icon sizes from
+ config for twitter plugin
+
+ * engine/lib/users.php, pages/account/login.php: Fixes #4060 combined some
+ page handlers for users lib
+
+2011-11-04 cash <cash.costello@gmail.com>
+
+ * engine/lib/admin.php, engine/lib/cron.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/pagehandler.php, engine/lib/river.php,
+ engine/lib/tags.php, engine/lib/user_settings.php, engine/lib/users.php,
+ mod/blog/start.php, mod/bookmarks/start.php, mod/categories/start.php,
+ mod/dashboard/start.php, mod/developers/start.php,
+ mod/externalpages/start.php, mod/file/start.php, mod/groups/start.php,
+ mod/invitefriends/start.php, mod/members/start.php,
+ mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/search/start.php, mod/thewire/start.php,
+ mod/twitter_api/start.php, mod/uservalidationbyemail/start.php: Fixes #4059
+ returning true when handling a page
+
+ * engine/lib/admin.php, engine/lib/deprecated-1.8.php,
+ engine/lib/elgglib.php, engine/lib/pagehandler.php, engine/lib/river.php,
+ engine/lib/tags.php, engine/lib/user_settings.php, engine/lib/users.php,
+ mod/blog/start.php, mod/bookmarks/start.php, mod/categories/start.php,
+ mod/dashboard/start.php, mod/developers/start.php, mod/diagnostics/start.php,
+ mod/externalpages/start.php, mod/file/start.php, mod/groups/start.php,
+ mod/invitefriends/start.php, mod/members/start.php,
+ mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/search/start.php, mod/thewire/start.php,
+ mod/twitter_api/start.php, mod/uservalidationbyemail/start.php: Fixes #4059
+ page handlers all return nothing
+
+ * mod/blog/start.php: fixed typo in comment for blog page handler
+
+2011-11-04 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/entities.php: Fixes #4058 updating a subtype if it already
+ exists
+
+ * mod/groups/languages/en.php,
+ .../views/rss/annotation/group_topic_post.php,
+ mod/groups/views/rss/discussion/replies.php,
+ mod/groups/views/rss/forum/topicposts.php,
+ mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/contentwrapper.php,
+ mod/groups/views/rss/groups/profile/layout.php,
+ mod/groups/views/rss/groups/profileitems.php,
+ mod/groups/views/rss/object/groupforumtopic.php: Fixes #4027 updated groups
+ RSS feeds for 1.8
+
+ * .../views/default/custom_index/css.php,
+ .../views/default/page/layouts/custom_index.php: Refs #2937 featured is
+ primary module class and highlight is extension
+
+ * views/default/core/walled_garden/login.php,
+ views/default/core/walled_garden/lost_password.php,
+ views/default/core/walled_garden/register.php,
+ views/default/page/components/module.php: Fixes #4047 header and footer
+ optional for the module view
+
+2011-11-03 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/ie7.php: updated CSS for walled garden and IE7
+
+ * views/default/forms/login.php: Fixes #3882 Remember me needed to be
+ floated before the button was added
+
+ * js/tests/jsTestDriver.conf: updated jsTest configuration for new jQuery
+ and hooks library
+
+ * js/tests/ElggLanguagesTest.js, js/tests/ElggSecurityTest.js: Fixes #4051 -
+ fixes security token unit test and language unit tests
+
+ * js/lib/elgglib.js: Fixes #4034 now using approach that exists in IE to
+ find elements in an Array
+
+ * js/lib/hooks.js: Refs #4051 hooks trigger function was returning undefined
+ when it should have been returning true
+
+ * js/classes/ElggPriorityList.js: Refs #4051 insert also needed to check for
+ undefined priorities
+
+ * js/classes/ElggPriorityList.js: Refs #4051 fixed insert for case when
+ priority is set to 0
+
+ * js/tests/ElggPriorityListTest.js: Refs #4051 fixed bad unit test for
+ ElggPriorityList.insert
+
+2011-11-03 Sem <sembrestels@riseup.net>
+
+ * .../forms/uservalidationbyemail/bulk_action.php,
+ .../views/default/uservalidationbyemail/css.php,
+ .../views/default/uservalidationbyemail/js.php,
+ .../uservalidationbyemail/unvalidated_user.php, views/default/css/admin.php:
+ Refs #3867. Unvalidated users is an unordered list now. Added right class and
+ other css helpers to admin css. Standarized css namespaces and dashes in
+ classes. Acomplishing code standards.
+
+2011-11-03 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * engine/lib/entities.php: Fixes 4041 (Deleted entities remain in memcache)
+
+2011-11-03 Cash Costello <cash.costello@gmail.com>
+
+ * mod/bookmarks/languages/en.php,
+ mod/bookmarks/views/rss/object/bookmarks.php, mod/file/start.php,
+ mod/file/views/rss/file/enclosure.php, mod/file/views/rss/object/file.php,
+ mod/search/views/rss/search/list.php,
+ mod/search/views/rss/search/listing.php, mod/thewire/languages/en.php,
+ mod/thewire/views/rss/object/thewire.php,
+ views/rss/annotation/generic_comment.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/user/default.php: Refs #4027 updated
+ all rss views except for groups
+
+ * mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/friends.php, mod/file/languages/en.php,
+ mod/file/pages/file/world.php, mod/groups/languages/en.php,
+ mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ .../views/default/discussion/group_module.php: Fixes #4042 made sure empty
+ content pages had a message about no content
+
+2011-11-03 Sem <sembrestels@riseup.net>
+
+ * js/lib/elgglib.js, js/tests/ElggLibTest.js: Fixes #3976.
+ elgg.normalize_url() js function has the fix in #3747.
+
+2011-11-02 Cash Costello <cash.costello@gmail.com>
+
+ * engine/start.php, install/ElggInstaller.php: input lib depends on
+ pageowner lib now
+
+ * .../views/default/theme_preview/forms.php: Refs #4039 updated the theming
+ sandbox for radio button classes
+
+2011-11-02 Sem <sembrestels@riseup.net>
+
+ * .../forms/uservalidationbyemail/bulk_action.php,
+ .../views/default/uservalidationbyemail/css.php,
+ .../uservalidationbyemail/unvalidated_user.php: Refs #3867.
+ elgg_view_image_block used for list users. Bulk operations as a list.
+
+ * mod/uservalidationbyemail/start.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ .../views/default/uservalidationbyemail/css.php,
+ .../views/default/uservalidationbyemail/js.php,
+ .../uservalidationbyemail/unvalidated_user.php: Fixes #3867. Rewrite and
+ style unvalidated users administration area.
+
+2011-11-02 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * views/default/css/elements/forms.php: #4039 (Incorrect CSS class set in
+ input/radio)
+
+2011-11-01 cash <cash.costello@gmail.com>
+
+ * .../views/default/admin/developers/settings.php,
+ .../admin/develop_utilities/diagnostics.php,
+ .../views/default/admin/appearance/expages.php,
+ mod/externalpages/views/default/expages/menu.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/appearance/profile_fields.php,
+ views/default/admin/plugin_settings.php,
+ views/default/admin/settings/advanced.php,
+ views/default/admin/settings/basic.php, views/default/css/admin.php: Fixes
+ #3672 added class for settings forms in admin area
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/entities.php, engine/lib/location.php, engine/lib/metadata.php,
+ engine/lib/plugins.php, engine/lib/private_settings.php,
+ engine/lib/relationships.php: standardized the elgg_get_entities* function
+ @return documentation
+
+ * mod/blog/lib/blog.php, mod/blog/views/default/object/blog.php,
+ mod/bookmarks/pages/bookmarks/view.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ views/default/object/elements/full.php: Fixes #4035 made the entity view
+ pages consistent for blog, bookmarks, file, pages, and forum posts
+
+ * js/lib/ui.js: Fixes #4022 made JS lib a little more consistent
+
+ * .../javascript_coding_standards.txt, js/lib/avatar_cropper.js,
+ js/lib/configuration.js, js/lib/elgglib.js, js/lib/hooks.js, js/lib/ui.js,
+ js/lib/ui.widgets.js, js/lib/userpicker.js,
+ mod/blog/views/default/js/blog/save_draft.php,
+ mod/bookmarks/views/default/bookmarks/js.php,
+ .../views/default/js/developers/developers.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ mod/thewire/views/default/js/thewire.php,
+ mod/tinymce/views/default/js/tinymce.php,
+ .../views/default/uservalidationbyemail/js.php: added semi-colons after
+ function expressions
+
+ * engine/classes/ElggUser.php, js/classes/ElggUser.js: Fixes #4007 merged in
+ sembrestels fix for ElggUser.isAdmin but used prototype instead of extending
+ object in constructor
+
+ * views/default/output/text.php: Fixes #4038 corrects comment for view
+ output/text
+
+2011-10-30 cash <cash.costello@gmail.com>
+
+ * engine/lib/elgglib.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/walled_garden/body.php,
+ views/default/core/walled_garden/login.php,
+ views/default/core/walled_garden/lost_password.php,
+ views/default/core/walled_garden/register.php,
+ views/default/css/walled_garden.php, views/default/forms/login.php,
+ views/default/js/walled_garden.php, views/default/page/walled_garden.php:
+ added back support for registration and forgotten passwords to walled garden
+ index
+
+ * _graphics/walled_garden/one_column_bottom.png,
+ _graphics/walled_garden/one_column_middle.png,
+ _graphics/walled_garden/one_column_top.png,
+ _graphics/walled_garden/two_column_bottom.png,
+ _graphics/walled_garden/two_column_middle.png,
+ _graphics/walled_garden/two_column_top.png,
+ _graphics/walled_garden_background_bottom.gif,
+ _graphics/walled_garden_background_extend.gif,
+ _graphics/walled_garden_background_top.gif,
+ _graphics/walled_garden_backgroundfull_bottom.gif,
+ _graphics/walled_garden_backgroundfull_top.gif, engine/lib/elgglib.php,
+ views/default/core/walled_garden/body.php,
+ views/default/css/walled_garden.php, views/default/page/walled_garden.php:
+ basic walled garden implementation for logging in
+
+ * views/default/core/account/login_box.php: added support for specifying the
+ module type to login box
+
+2011-10-30 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/plugins.php, languages/en.php, views/default/admin/plugins.php:
+ Fixes #2821. Plugins that are active and cannot be started emit an admin
+ notice.
+
+2011-10-30 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/input.php, mod/htmlawed/start.php,
+ views/default/output/longtext.php: Fixes #3370 running the anti-spam option
+ of htmlawed when filtering for output
+
+ * engine/lib/output.php: removed non-overridable insertion of inline style
+ to links
+
+ * engine/lib/configuration.php, engine/lib/pageowner.php: setting
+ $CONFIG->context earlier to avoid using the context functions before it is
+ initialized
+
+2011-10-29 Brett Profitt <brett.profitt@gmail.com>
+
+ * actions/widgets/save.php, views/default/widgets/river_widget/content.php,
+ views/default/widgets/river_widget/edit.php: Fixes #4001. Activity widget
+ passes a context so correct output is displayed upon save.
+
+ * js/lib/elgglib.js, js/lib/security.js: Fixes #4010, refs #3927. Fixed
+ elgg.security.addToken() to work with query strings, relative URLs, and full
+ URLs.
+
+ * mod/blog/lib/blog.php, mod/blog/start.php, mod/notifications/index.php,
+ mod/thewire/start.php, mod/tinymce/start.php: Refs #3859. Added
+ elgg_register_simplecache_view() to core plugins' js.
+
+ * engine/lib/cache.php: Fixes #4029, refs #3859.
+ elgg_invalidate_simplecache() resets the lastcached and lastupdate datasets.
+ Added documentation about how to use simple cache views.
+
+2011-10-29 cash <cash.costello@gmail.com>
+
+ * .../examples/plugins/full_manifest/manifest.xml,
+ .../examples/plugins/manifest_options/manifest.xml,
+ .../examples/plugins/simple_manifest/manifest.xml,
+ .../examples/plugins/skeleton/manifest.xml: better organization for the
+ manifests and plugin skeleton
+
+ * .../examples/plugins/full_manifest/manifest.xml,
+ documentation/examples/plugins/manifest.xml,
+ .../examples/plugins/simple_manifest/manifest.xml: creates a simple manifest
+ for people to copy and use
+
+ * .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ .../vendors/oauth/library/OAuthRequester.php,
+ .../vendors/oauth/library/OAuthServer.php: Refs #4028 reset the oAuth lib to
+ version r64 of oauth-php
+
+ * engine/classes/ElggEntity.php, engine/classes/Locatable.php,
+ languages/en.php, views/default/annotation/generic_comment.php,
+ views/rss/annotation/default.php, views/rss/annotation/generic_comment.php,
+ views/rss/group/default.php, views/rss/object/creator.php,
+ views/rss/object/default.php, views/rss/object/georss.php,
+ views/rss/output/url.php, views/rss/page/components/creator.php,
+ views/rss/page/components/georss.php, views/rss/page/default.php,
+ views/rss/page/elements/comments.php, views/rss/river/item.php,
+ views/rss/search/entity_list.php, views/rss/user/default.php: Fixes #3201
+ updates rss view type for core Elgg
+
+ * views/php/api/output.php, views/php/group/default.php,
+ views/php/object/default.php, views/php/page/default.php,
+ views/php/site/default.php, views/php/user/default.php: Refs #3201 updates
+ the php view type
+
+ * views/json/api/output.php, views/json/entities/entity_list.php,
+ views/json/group/default.php, views/json/object/default.php,
+ views/json/site/default.php, views/json/user/default.php,
+ views/php/search/entity_list.php: Refs #3201 this finishes the updates on the
+ JSON view
+
+ * engine/classes/ElggRiverItem.php, views/json/page/components/list.php,
+ views/json/page/default.php, views/json/river/item.php,
+ views/json/river/item/list.php, views/json/search/entity_list.php: Refs #3201
+ updates json river views and removed old search view
+
+ * engine/lib/views.php, .../views/default/river/object/blog/create.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/river/object/file/create.php,
+ .../river/annotation/group_topic_post/reply.php,
+ mod/groups/views/default/river/group/create.php,
+ .../river/object/groupforumtopic/create.php,
+ .../default/river/relationship/member/create.php,
+ .../default/river/object/messageboard/create.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/thewire/create.php,
+ .../river/annotation/generic_comment/create.php,
+ views/default/river/elements/layout.php, views/default/river/item.php,
+ views/default/river/relationship/friend/create.php,
+ .../river/user/default/profileiconupdate.php,
+ views/default/river/user/default/profileupdate.php: adds a river layout view
+ that all river views should use
+
+ * mod/search/search_hooks.php: Refs #3983 merged fix into master
+
+ * pages/avatar/view.php: Refs #3396 fixed the integration of this 1.7 fix
+ into 1.8 and also added better expires header
+
+2011-10-29 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggEntity.php, mod/profile/icon.php,
+ mod/profile/icondirect.php, mod/profile/start.php: Fixes #3920 profile plugin
+ adds a fast loading of user avatars
+
+ * mod/messages/pages/messages/read.php, mod/messages/start.php,
+ mod/messages/views/default/object/messages.php: Fixes #4015 decrementing the
+ count before adding to the topbar
+
+2011-10-28 Cash Costello <cash.costello@gmail.com>
+
+ * js/lib/ui.js, views/default/input/date.php: Fixes #4012 when using a
+ timestamp with input/date, return UTC time rather than local time
+
+ * .../views/default/theme_preview/forms.php: using correct date string now
+ in developers form sandbox
+
+2011-10-27 cash <cash.costello@gmail.com>
+
+ * actions/avatar/crop.php, engine/lib/views.php,
+ mod/groups/actions/groups/edit.php: Fixes #4011 icon sizes are configurable
+ now
+
+ * mod/externalpages/start.php, views/default/css/elements/navigation.php,
+ views/default/css/ie7.php, views/default/forms/login.php,
+ views/default/page/walled_garden.php: Fixes #3863 introduced
+ elgg-menu-general so that elgg-menu-footer can be specific to site footer
+
+ * views/default/object/plugin.php, views/default/object/plugin/advanced.php,
+ views/default/object/plugin/full.php, views/default/object/plugin/simple.php:
+ Refs #3917 removed more code from simple plugin interface
+
+ * mod/search/start.php, mod/search/views/default/search/css.php,
+ mod/search/views/default/search/header.php,
+ mod/search/views/default/search/search_box.php: Fixes #3687 added
+ .elgg-search-header for css specific to header search box
+
+ * js/lib/avatar_cropper.js: Fixes #3832 initialize avatar crop area
+
+ * mod/groups/lib/groups.php,
+ .../views/default/groups/membershiprequests.php: Refs #3296 displaying all
+ group membership requests on one page
+
+ * views/rss/page/default.php: Fixes #3150 added a blank description field so
+ RSS is valid - any better ideas?
+
+ * engine/lib/views.php, .../views/default/custom_index/css.php,
+ .../views/default/page/layouts/custom_index.php: Fixes #2937 added
+ .elgg-module-front
+
+2011-10-27 Cash Costello <cash.costello@gmail.com>
+
+ * pages/account/register.php, views/default/css/admin.php,
+ views/default/css/elements/forms.php: Refs #3672 updated account forms for
+ max width
+
+ * engine/lib/users.php: login page should not be displayed to logged in
+ users
+
+2011-10-26 Brett Profitt <brett.profitt@gmail.com>
+
+ * UPGRADE.txt: Made instructions for removing mod/profile clearer.
+
+2011-10-26 Cash Costello <cash.costello@gmail.com>
+
+ * mod/likes/start.php: Fixes #3958 added special catch for liking groups
+
+ * languages/en.php, .../admin/appearance/profile_fields/list.php,
+ views/default/forms/profile/fields/add.php: Fixes #3926 updated spacing for
+ edit profile field forms
+
+2011-10-26 Sem <sembrestels@riseup.net>
+
+ * mod/externalpages/start.php, views/default/css/walled_garden.php,
+ views/default/page/walled_garden.php: Closes #3947. External pages are now
+ viewable by visitors in walled-garden sites. Footer menu is also added into
+ walled-garden logging page.
+
+2011-10-25 cash <cash.costello@gmail.com>
+
+ * views/default/object/elements/summary.php: Fixes #2292 added
+ object/summary/extend view
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/pages/views/default/object/page_top.php,
+ views/default/object/elements/full.php: added new view for the full display
+ of objects
+
+2011-10-25 Cash Costello <cash.costello@gmail.com>
+
+ * views/ical/export/entity.php, views/ical/object/default.php,
+ views/ical/page/default.php, views/ical/search/entity_list.php: Refs #3201 a
+ working ical view type
+
+2011-10-24 cash <cash.costello@gmail.com>
+
+ * mod/profile/views/default/profile/metatags.php,
+ views/foaf/page/default.php, views/foaf/search/entity_list.php,
+ views/foaf/user/default.php: Refs #3201 updated foaf link to only be added to
+ user's pages
+
+ * views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/page/default.php: Refs #3201 updating failsafe viewtype to
+ Elgg standards for CSS
+
+ * .../admin/develop_utilities/diagnostics.php,
+ .../views/default/forms/diagnostics/download.php: Fixes #3868 removed
+ unnecessary form for downloading the diagnostics report
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ mod/pages/views/default/object/page_top.php: Fixes #3974 blog, bookmarks,
+ file, and pages plugins consistent in integration with categories plugin
+
+2011-10-23 germanazo <germanazo@phpdev>
+
+ * engine/lib/users.php: Cleanned the login failures on passwords resets,
+ this have more sense
+
+2011-10-23 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/page/components/module.php: Fixes #4003 footer in modules is
+ included by default
+
+ * views/default/input/reset.php, views/default/input/submit.php: Refs #3810
+ standardizes the button views
+
+2011-10-23 Brett Profitt <brett.profitt@gmail.com>
+
+ * .../admin/appearance/profile_fields/list.php, views/default/js/admin.php:
+ Fixes #3864. Removed old code from profile fields sorting. Name spaced IDs
+ and classes.
+
+ * engine/lib/elgglib.php, js/lib/avatar_cropper.js, js/lib/ui.js,
+ views/default/forms/avatar/crop.php: Fixes #3914. Pulled avatar code out into
+ its own library.
+
+ * js/lib/ui.js, views/default/css/elements/misc.php,
+ views/default/forms/avatar/crop.php: Fixes #3914. Moved avatar cropping to
+ ui.js.
+
+ * engine/lib/plugins.php: Fixes #3991. Populating provided_by in
+ elgg_get_plugins_provides().
+
+ * UPGRADE.txt: Fixes #3975. Added mod/profile to the list of dirs to remove
+ for an upgrade.
+
+ * mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/categories/manifest.xml, mod/custom_index/manifest.xml,
+ mod/dashboard/manifest.xml, mod/developers/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/embed/manifest.xml,
+ mod/externalpages/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/likes/manifest.xml, mod/logbrowser/manifest.xml,
+ mod/logrotate/manifest.xml, mod/members/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/oauth_api/manifest.xml,
+ mod/pages/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/twitter_api/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: Fixes #3959. Using elgg_release in core plugins.
+
+2011-10-21 Cash Costello <cash.costello@gmail.com>
+
+ * install/ElggInstaller.php, install/cli/sample_installer.php: Fixes #3995
+ the batch installer now skips the settings file creation step if settings.php
+ already exists
+
+ * install/ElggInstaller.php: Fixes #3994 cleaned up session handling for the
+ installer
+
+ * engine/lib/filestore.php: don't set default filestore if we don't have a
+ dataroot
+
+ * engine/classes/ElggSite.php: updated ElggSite::disable() to conform to
+ ElggEntity::disable()
+
+ * engine/classes/ElggMetadata.php, engine/lib/entities.php: Fixes #3988
+ correctly passing user_guid through canEdit for metadata
+
+ * engine/lib/entities.php: fixed access of non-object property in entities
+ lib
+
+ * engine/lib/access.php: Fixes #3989 fixed access of non-object property in
+ access lib
+
+ * views/installation/input/access.php, views/installation/input/button.php,
+ views/installation/input/checkbox.php, views/installation/input/dropdown.php,
+ views/installation/input/form.php, views/installation/input/password.php,
+ views/installation/input/text.php: cleaned up input views for installation so
+ that no notices are thrown
+
+2011-10-21 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * views/default/input/reset.php: #3810 (No class in input/reset view)
+
+2011-10-20 Brett Profitt <brett.profitt@gmail.com>
+
+ * views/default/admin/plugins.php: Fixes #3990 Using
+ ElggPlugin->getFriendlyName() for sorting alphabetically to avoid WSODs with
+ invalid plugins.
+
+ * engine/start.php: Fixes #3680. Explicitly connecting to db in start.php.
+
+ * languages/en.php: Fixes #3968. Added 'on' and 'off' to core language.
+
+ * views/default/forms/widgets/save.php: Fixes #3951. Added label for access
+ dropdown in widget edit view.
+
+2011-10-19 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/filestore.php, engine/lib/plugins.php: fixed minor errors in
+ the documentation in plugins and filestore lib
+
+2011-10-18 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/users.php: fixed typo in setting the default profile fields
+
+2011-10-17 cash <cash.costello@gmail.com>
+
+ * actions/useradd.php: added another check to useradd action
+
+2011-10-17 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggPluginPackage.php: added additional readme names for
+ display on plugin page
+
+2011-10-15 Brett Profitt <brett.profitt@gmail.com>
+
+ * js/lib/elgglib.js, js/lib/hooks.js: Fixes #3540. Added "instant hooks" to
+ JS hooks engine. elgg.register_instant_hook(name, type) will cause any
+ handler registering to that hook to be immediately executed if the hook has
+ been previously triggered. Open for better suggestions about the name.
+
+2011-10-14 Brett Profitt <brett.profitt@gmail.com>
+
+ * js/lib/security.js: Fixes #3927. elgg.security.addToken() works for URLs
+ without query strings.
+
+ * js/lib/elgglib.js: Refs #3927, #3976. Added elgg.parse_url() and
+ elgg.parse_str().
+
+2011-10-14 Janek Lasocki-Biczysko <j.lasocki-biczysko@intrallect.com>
+
+ * engine/classes/ElggMemcache.php: Ticket #3928 updated
+ ElggMemecache->save() to take 3rd optional parameter
+
+2011-10-14 Cash Costello <cash.costello@gmail.com>
+
+ * .../river/user/default/profileiconupdate.php: Fixes #3977 not showing
+ hover menu on avatar update in river
+
+2011-10-13 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php: Fixes #3901. Corrected typo for maxtime
+ sorting.
+
+ * actions/admin/plugins/simple_update_states.php,
+ documentation/examples/plugins/manifest.xml,
+ engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser18.php, engine/lib/admin.php,
+ engine/tests/api/plugins.php, engine/tests/test_files/plugin_18/manifest.xml,
+ languages/en.php, mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/categories/manifest.xml, mod/custom_index/manifest.xml,
+ mod/dashboard/manifest.xml, mod/developers/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/embed/manifest.xml,
+ mod/externalpages/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/likes/manifest.xml, mod/logbrowser/manifest.xml,
+ mod/logrotate/manifest.xml, mod/members/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/pages/manifest.xml,
+ mod/profile/manifest.xml, mod/reportedcontent/manifest.xml,
+ mod/search/manifest.xml, mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/uservalidationbyemail/manifest.xml, mod/zaudio/manifest.xml: Fixes #3917.
+ Removed uses of admin interface in manifests. Removed related code.
+
+2011-10-13 cash <cash.costello@gmail.com>
+
+ * js/lib/userpicker.js, views/default/input/userpicker.php: added
+ documentation for the userpicker
+
+2011-10-13 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/categories/listing.php, mod/categories/pages/categories/listing.php,
+ mod/categories/start.php: Fixes #3746. Moved the categories page handler
+ script. Updated the layout call.
+
+ * views/default/css/admin.php: Fixes #3880. Removed the too greedy CSS rule
+ for elgg-admin-notice a so only the close icon is float right.
+
+2011-10-13 cash <cash.costello@gmail.com>
+
+ * js/lib/userpicker.js: fixed bug where a removed user could not be added
+ again in userpicker
+
+2011-10-13 Brett Profitt <brett.profitt@gmail.com>
+
+ * languages/en.php: Fixes #3734. Changed "Tested value" to "Expected value"
+ in the plugin deps matrix.
+
+2011-10-13 cash <cash.costello@gmail.com>
+
+ * engine/lib/input.php, js/lib/userpicker.js,
+ views/default/css/elements/forms.php, views/default/input/userpicker.php:
+ displaying users that have been selected and added remove capability
+
+2011-10-13 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/twitter_api/languages/en.php,
+ .../default/plugins/twitter_api/usersettings.php: Fixes #3177. Don't show the
+ authorize twitter plugin setting if the admin hasn't set up the plugin.
+
+2011-10-13 cash <cash.costello@gmail.com>
+
+ * js/lib/userpicker.js, views/default/input/userpicker.php: got the friends
+ option working for user picker
+
+2011-10-12 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/output.php, engine/tests/api/helpers.php: Fixes #3747. Using
+ filter_var to check for any valid URI.
+
+2011-10-12 cash <cash.costello@gmail.com>
+
+ * engine/lib/input.php, mod/groups/views/default/group/default.php,
+ views/default/css/elements/forms.php, views/default/object/default.php,
+ views/default/user/default.php: Simple theme for autocomplete
+
+2011-10-11 Brett Profitt <brett.profitt@gmail.com>
+
+ * version.php: Setting version to 1.8.1b1 instead of 1.8.1b.
+
+ * CHANGES.txt: Fixed extra space in changes.
+
+2011-10-10 Brett Profitt <brett.profitt@gmail.com>
+
+ * CHANGES.txt: Ordered the bugfixes in a for relevance.
+
+ * CHANGES.txt: Fixed stray * in changes.
+
+ * CHANGES.txt, version.php: Version bump. Updated changes.
+
+2011-10-10 cash <cash.costello@gmail.com>
+
+ * engine/lib/user_settings.php, languages/en.php: Fixes #3952 handling
+ exceptions when password checks fail when changing password
+
+ * mod/blog/lib/blog.php, mod/bookmarks/pages/bookmarks/friends.php,
+ mod/bookmarks/pages/bookmarks/owner.php, mod/file/pages/file/friends.php,
+ mod/file/pages/file/owner.php, mod/pages/pages/pages/friends.php,
+ mod/pages/pages/pages/owner.php, mod/thewire/pages/thewire/friends.php,
+ mod/thewire/pages/thewire/owner.php: Refs #3916 added checks to all content
+ plugins in master for page owner in mine and friends pages
+
+ * mod/file/actions/file/upload.php, mod/file/languages/en.php: Refs #3919
+ merged file upload failure check to master
+
+2011-10-10 Cash Costello <cash.costello@gmail.com>
+
+ * actions/widgets/save.php: Fixes #3950 falling back to deprecated view when
+ saving a widget
+
+ * .../views/default/widgets/bookmarks/edit.php: Fixes #3949 bookmarks widget
+ fix
+
+2011-10-09 Cash Costello <cash.costello@gmail.com>
+
+ * languages/en.php, mod/messages/languages/en.php,
+ mod/notifications/languages/en.php,
+ .../core/settings/account/notifications.php: Fixes #595 separating email
+ address from email notification in language strings
+
+ * js/lib/ui.js, views/default/core/account/login_box.php,
+ views/default/forms/login.php, views/default/forms/register.php,
+ views/default/forms/user/requestnewpassword.php: Fixes #3673 added autofocus
+ class
+
+ * engine/lib/sites.php: Fixes #3796 get_site_by_url() now respects class
+ inheritance
+
+ * engine/classes/ElggSite.php: Fixes #3729 handling forwarding to page when
+ logging into a walled garden
+
+ * engine/tests/api/access_collections.php,
+ engine/tests/api/entity_getter_functions.php, engine/tests/api/helpers.php,
+ engine/tests/api/metadata.php, engine/tests/objects/entities.php: Fixes #3948
+ cleaning up stuff left behind by unit tests
+
+ * engine/classes/ElggSite.php: Fixes #3878 registering the security token
+ action as an external page
+
+2011-10-08 Cash Costello <cash.costello@gmail.com>
+
+ * engine/tests/objects/entities.php: Fixes #3946 deleting the temporary
+ entities created in entity unit tests
+
+ * engine/lib/entities.php, engine/tests/objects/sites.php: Fixes #3897 fixed
+ source of infinite regression loop in delete_entity()
+
+ * engine/classes/ElggAnnotation.php, engine/lib/access.php,
+ engine/lib/annotations.php, engine/tests/api/access_collections.php,
+ engine/tests/api/helpers.php, engine/tests/api/metadata.php,
+ engine/tests/objects/entities.php, engine/tests/objects/users.php,
+ engine/tests/regression/trac_bugs.php, mod/groups/start.php: Fixes #3942
+ fixed all the warnings and notices in the unit tests
+
+ * engine/classes/ElggPriorityList.php: Fixes #3945 using reset on the array
+
+ * engine/lib/widgets.php: Fixes #3944 fixing the default widgets
+ implementation
+
+ * engine/lib/entities.php: Fixes #3943 returning false in
+ can_write_to_container() if container does not exist
+
+ * engine/lib/elgglib.php: need to check if something exists before checking
+ its type
+
+ * engine/tests/ui/submenu.php: removed unused unit tests for old submenu
+ code
+
+ * engine/classes/ElggPlugin.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php: Fixes #3743 returning bool instead of int
+ when setting a private setting
+
+ * .../views/default/plugins/logrotate/settings.php: fixed bug with variable
+ name in log rotation
+
+ * engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/cache.php, engine/lib/calendar.php,
+ engine/lib/configuration.php, engine/lib/cron.php, engine/lib/database.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/filestore.php, engine/lib/group.php,
+ engine/lib/input.php, engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/navigation.php, engine/lib/notification.php,
+ engine/lib/objects.php, engine/lib/opendd.php, engine/lib/output.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/plugins.php, engine/lib/private_settings.php,
+ engine/lib/relationships.php, engine/lib/river.php, engine/lib/sessions.php,
+ engine/lib/sites.php, engine/lib/statistics.php, engine/lib/system_log.php,
+ engine/lib/tags.php, engine/lib/upgrade.php, engine/lib/user_settings.php,
+ engine/lib/users.php, engine/lib/views.php, engine/lib/web_services.php,
+ engine/lib/widgets.php, engine/lib/xml-rpc.php: Fixes #3936 added @access
+ private to internal functions
+
+ * engine/lib/actions.php: Fixes #3941 Refs #3936 added @access private in
+ action lib and added elgg_unregister_action()
+
+ * engine/lib/access.php, engine/lib/views.php: Fixes #3937 updated the
+ documentation for the access lib and a few minor code clean-ups
+
+ * engine/classes/ElggMenuItem.php,
+ mod/blog/views/default/blog/group_module.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/object/blog.php,
+ mod/blog/views/default/widgets/blog/content.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/widgets/bookmarks/content.php,
+ .../views/default/theme_preview/general.php,
+ .../admin/develop_utilities/diagnostics.php,
+ mod/file/views/default/file/group_module.php,
+ mod/file/views/default/icon/object/file.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/widgets/filerepo/content.php,
+ .../views/default/discussion/group_module.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/profile/summary.php,
+ .../views/default/groups/sidebar/members.php,
+ .../views/default/object/groupforumtopic.php,
+ .../default/widgets/a_users_groups/content.php,
+ mod/likes/views/default/annotation/likes.php,
+ mod/likes/views/default/likes/button.php,
+ mod/logbrowser/views/default/logbrowser/table.php,
+ .../views/default/widgets/messageboard/content.php,
+ mod/messages/views/default/object/messages.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/group_module.php,
+ mod/pages/views/default/widgets/pages/content.php,
+ .../views/default/object/reported_content.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/widgets/thewire/content.php,
+ .../forms/twitter_api/interstitial_settings.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ views/default/admin/appearance/default_widgets.php,
+ .../admin/appearance/profile_fields/list.php, views/default/admin/header.php,
+ views/default/icon/default.php, views/default/icon/user/default.php,
+ views/default/navigation/breadcrumbs.php,
+ views/default/navigation/menu/user_hover.php,
+ views/default/navigation/pagination.php, views/default/navigation/tabs.php,
+ views/default/object/admin_notice.php, views/default/object/default.php,
+ views/default/object/elements/summary.php,
+ views/default/object/plugin/advanced.php,
+ views/default/object/plugin/simple.php,
+ views/default/object/widget/elements/controls.php,
+ views/default/output/tag.php, views/default/output/url.php,
+ views/default/page/elements/footer.php,
+ views/default/page/elements/tagcloud_block.php,
+ views/default/page/layouts/widgets/add_button.php,
+ views/default/river/elements/body.php,
+ views/default/river/elements/responses.php,
+ views/default/river/elements/summary.php,
+ .../river/user/default/profileiconupdate.php,
+ views/default/river/user/default/profileupdate.php,
+ views/default/widgets/content_stats/content.php: Fixes #3411 output/url now
+ has a is_trusted parameter - defaults to false
+
+2011-10-07 Cash Costello <cash.costello@gmail.com>
+
+ * languages/en.php, .../admin/appearance/profile_fields/list.php,
+ views/default/forms/profile/fields/add.php: Fixes #3644 localized profile
+ field names
+
+2011-10-06 cash <cash.costello@gmail.com>
+
+ * engine/lib/elgglib.php, engine/lib/input.php, js/lib/autocomplete.js,
+ vendors/jquery/jquery.ui.autocomplete.html.js,
+ views/default/input/autocomplete.php, views/default/user/default.php: using
+ html extension to jquery.ui autocomplete
+
+ * engine/lib/input.php: Fixes #3932 Refs #3931 improved the livesearch
+ endpoint
+
+2011-10-05 cash <cash.costello@gmail.com>
+
+ * actions/useradd.php, engine/lib/users.php, languages/en.php: Fixes #3704
+ displaying error messages when adding users through admin interface
+
+2011-10-04 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/tinymce/vendor/tinymce/changelog.txt,
+ mod/tinymce/vendor/tinymce/examples/full.html,
+ .../vendor/tinymce/jscripts/tiny_mce/langs/en.js,
+ .../tiny_mce/plugins/advhr/langs/en_dlg.js,
+ .../tiny_mce/plugins/advimage/editor_plugin.js,
+ .../tiny_mce/plugins/advimage/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advimage/js/image.js,
+ .../tiny_mce/plugins/advimage/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlink/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlist/editor_plugin.js,
+ .../tiny_mce/plugins/advlist/editor_plugin_src.js,
+ .../tiny_mce/plugins/autolink/editor_plugin.js,
+ .../tiny_mce/plugins/autolink/editor_plugin_src.js,
+ .../tiny_mce/plugins/autoresize/editor_plugin.js,
+ .../plugins/autoresize/editor_plugin_src.js,
+ .../tiny_mce/plugins/autosave/editor_plugin.js,
+ .../tiny_mce/plugins/autosave/editor_plugin_src.js,
+ .../tiny_mce/plugins/contextmenu/editor_plugin.js,
+ .../plugins/contextmenu/editor_plugin_src.js,
+ .../plugins/emotions/img/smiley-foot-in-mouth.gif,
+ .../plugins/emotions/img/smiley-laughing.gif,
+ .../plugins/emotions/img/smiley-sealed.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-smile.gif,
+ .../plugins/emotions/img/smiley-surprised.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-wink.gif,
+ .../tiny_mce/plugins/emotions/langs/en_dlg.js,
+ .../plugins/example_dependency/editor_plugin.js,
+ .../example_dependency/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullscreen/editor_plugin.js,
+ .../plugins/fullscreen/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullscreen/fullscreen.htm,
+ .../tiny_mce/plugins/inlinepopups/editor_plugin.js,
+ .../plugins/inlinepopups/editor_plugin_src.js,
+ .../inlinepopups/skins/clearlooks2/img/alert.gif,
+ .../inlinepopups/skins/clearlooks2/img/button.gif,
+ .../inlinepopups/skins/clearlooks2/img/confirm.gif,
+ .../inlinepopups/skins/clearlooks2/img/corners.gif,
+ .../skins/clearlooks2/img/vertical.gif,
+ .../tiny_mce/plugins/layer/editor_plugin.js,
+ .../tiny_mce/plugins/layer/editor_plugin_src.js,
+ .../tiny_mce/plugins/lists/editor_plugin.js,
+ .../tiny_mce/plugins/lists/editor_plugin_src.js,
+ .../tiny_mce/plugins/media/editor_plugin.js,
+ .../tiny_mce/plugins/media/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/media/media.htm,
+ .../tiny_mce/plugins/nonbreaking/editor_plugin.js,
+ .../plugins/nonbreaking/editor_plugin_src.js,
+ .../tiny_mce/plugins/noneditable/editor_plugin.js,
+ .../plugins/noneditable/editor_plugin_src.js,
+ .../tiny_mce/plugins/paste/editor_plugin.js,
+ .../tiny_mce/plugins/paste/editor_plugin_src.js,
+ .../tiny_mce/plugins/paste/langs/en_dlg.js,
+ .../tiny_mce/plugins/searchreplace/langs/en_dlg.js,
+ .../tiny_mce/plugins/spellchecker/editor_plugin.js,
+ .../plugins/spellchecker/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/style/js/props.js,
+ .../tiny_mce/plugins/style/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/style/props.htm,
+ .../tiny_mce/plugins/tabfocus/editor_plugin.js,
+ .../tiny_mce/plugins/tabfocus/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/cell.htm,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/cell.js,
+ .../jscripts/tiny_mce/plugins/table/js/row.js,
+ .../tiny_mce/plugins/table/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/table/row.htm,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../tiny_mce/plugins/template/langs/en_dlg.js,
+ .../tiny_mce/plugins/wordcount/editor_plugin.js,
+ .../plugins/wordcount/editor_plugin_src.js,
+ .../tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../tiny_mce/themes/advanced/img/colorpicker.jpg,
+ .../tiny_mce/themes/advanced/img/flash.gif,
+ .../tiny_mce/themes/advanced/img/icons.gif,
+ .../tiny_mce/themes/advanced/img/quicktime.gif,
+ .../tiny_mce/themes/advanced/img/shockwave.gif,
+ .../jscripts/tiny_mce/themes/advanced/js/anchor.js,
+ .../jscripts/tiny_mce/themes/advanced/js/image.js,
+ .../jscripts/tiny_mce/themes/advanced/langs/en.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../themes/advanced/skins/default/content.css,
+ .../themes/advanced/skins/default/img/buttons.png,
+ .../themes/advanced/skins/default/img/items.gif,
+ .../themes/advanced/skins/default/img/tabs.gif,
+ .../tiny_mce/themes/advanced/skins/default/ui.css,
+ .../themes/advanced/skins/highcontrast/content.css,
+ .../themes/advanced/skins/highcontrast/ui.css,
+ .../themes/advanced/skins/o2k7/content.css,
+ .../themes/advanced/skins/o2k7/img/button_bg.png,
+ .../advanced/skins/o2k7/img/button_bg_black.png,
+ .../advanced/skins/o2k7/img/button_bg_silver.png,
+ .../tiny_mce/themes/advanced/skins/o2k7/ui.css,
+ .../jscripts/tiny_mce/themes/simple/img/icons.gif,
+ .../jscripts/tiny_mce/themes/simple/langs/en.js,
+ .../vendor/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_src.js,
+ .../jscripts/tiny_mce/utils/editable_selects.js: Refs #3853. Upgraded TinyMCE
+ to 3.4.6. Embed still inserts the content in the wrong place for IE 8.
+
+ * pages/avatar/view.php: Refs #3396. Added try / catch for avatar icon.
+
+2011-10-04 cash <cash.costello@gmail.com>
+
+ * mod/blog/lib/blog.php: Fixes #3793 blogs respect closed groups for main
+ index page
+
+ * .../views/default/object/reported_content.php,
+ views/default/css/admin.php: Refs #3809 implemented Evan's suggestion for
+ button spacing
+
+ * engine/lib/users.php: Fixes #3700 using different names for add friend and
+ remove friend user hover menu items
+
+ * mod/groups/lib/groups.php: Fixes #3841 not displaying leave group button
+ to group owners
+
+ * mod/groups/lib/groups.php: Fixes #3898 checking whether the viewer is
+ logged in before adding join/requet buttons
+
+ * engine/lib/entities.php: Fixes #3753 removed deprecated functions from
+ delete_entity()
+
+2011-10-03 cash <cash.costello@gmail.com>
+
+ * views/default/css/admin.php: Fixes #3866 added CSS for entity menu in
+ admin theme
+
+ * mod/embed/README.txt, mod/embed/views/default/embed/item.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/file/views/default/icon/object/file.php, views/default/icon/default.php:
+ using better insert class
+
+ * mod/embed/README.txt, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/layout.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/embed/views/default/navigation/menu/embed.php, mod/file/start.php,
+ .../views/default/embed/file_upload/content.php: removed the sections from
+ the menu to provide more flexibility in tab ordering
+
+2011-10-02 Brett Profitt <brett.profitt@gmail.com>
+
+ * pages/avatar/view.php: Fixed avatar handling for default icons if the
+ uploaded file is missing.
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/entities.php, engine/lib/metadata.php,
+ engine/lib/relationships.php: Merged docs update for getters from 1.7.
+
+ * engine/classes/ElggFile.php, mod/file/actions/file/upload.php: Merged file
+ mime type detection from 1.7.
+
+ * engine/lib/database.php: Merged fixes for delayed queries from 1.7.
+
+ * engine/tests/regression/trac_bugs.php: Merged test for
+ can_write_to_container().
+
+2011-09-10 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/tests/suite.php: Fixes #3675. Added admin gate keeper to unit
+ tests.
+
+2011-10-02 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/categories/deactivate.php: Removing admin notice for unpopulated
+ categories when disabling categories plugin.
+
+ * actions/admin/plugins/activate.php,
+ actions/admin/plugins/activate_all.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/deactivate_all.php,
+ actions/admin/plugins/set_priority.php, engine/classes/ElggPlugin.php,
+ engine/classes/ElggPluginPackage.php, languages/en.php: Fixes #3915. Added
+ ElggPlugin->getFriendlyName() to check for manifest->getName() first, then
+ for plugin ID. Added better descriptions for plugin activation errors.
+
+2011-10-01 cash <cash.costello@gmail.com>
+
+ * engine/lib/navigation.php, engine/lib/views.php: Fixes #3860 changed
+ context-sensitive to dynamic to describe menus
+
+ * mod/bookmarks/actions/bookmarks/save.php, mod/bookmarks/languages/en.php:
+ Fixes #3686 added work around for PHP bug when validating URLs with dashes
+
+2011-10-01 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/forms/avatar/crop.php: Fixes #3888 correcting initialization
+ of avatar cropping library
+
+ * engine/lib/elgglib.php, views/default/forms/avatar/crop.php: Fixes #3913
+ registering jquery.imgareaselect
+
+ * actions/avatar/upload.php: Fixes #3912 checking that the upload succeeded
+ before resizing
+
+ * languages/en.php: more was defined twice in the core language file
+
+2011-10-01 cash <cash.costello@gmail.com>
+
+ * mod/embed/README.txt, mod/embed/views/default/js/embed/embed.php: Updated
+ the instructions
+
+ * mod/embed/views/default/js/embed/embed.php,
+ mod/file/views/default/embed/file/content.php,
+ .../views/default/embed/file_upload/content.php: fixed the forwarding of an
+ embed upload form
+
+ * mod/embed/start.php, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/item.php,
+ mod/embed/views/default/js/embed/embed.php: cleaned up the embed item view
+ and removed the inline js
+
+ * mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item.php,
+ mod/embed/views/default/embed/list.php,
+ mod/embed/views/default/embed/tabs.php,
+ mod/embed/views/default/group/default/embed.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/embed/views/default/object/default/embed.php,
+ mod/embed/views/default/object/file/embed.php,
+ mod/embed/views/default/object/file/embedlist.php,
+ mod/embed/views/default/site/default/embed.php,
+ mod/embed/views/default/user/default/embed.php: removed unnecessary code
+
+ * mod/embed/languages/en.php, mod/embed/start.php,
+ mod/embed/views/default/embed/item.php,
+ mod/embed/views/default/embed/layout.php,
+ mod/embed/views/default/embed/list.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/embed/views/default/navigation/menu/embed.php, mod/file/start.php: using
+ the menu system for the embed tabs and adding a reusable select list view
+
+ * engine/lib/configuration.php: Fixes #3826 using wwwroot in 1.8.x releases
+
+2011-09-30 cash <cash.costello@gmail.com>
+
+ * views/default/forms/useradd.php: Fixes #3890 removed admin check in
+ useradd form since it is only used by admins
+
+ * engine/lib/navigation.php, mod/groups/start.php,
+ mod/likes/views/default/annotation/likes.php, mod/messageboard/start.php,
+ mod/messages/views/default/object/messages.php,
+ views/default/core/friends/collection.php,
+ views/default/output/confirmlink.php: Fixes #3904 action word should come
+ first for encode_text parameter
+
+2011-09-29 cash <cash.costello@gmail.com>
+
+ * views/default/css/elements/forms.php: Fixes #3894 ui-datepicker should
+ start out hidden
+
+ * views/default/css/elements/forms.php: Fixes #3666, #3748 distinct CSS for
+ inline vs popup date picker and fixed position bug for prev/next links in
+ header
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/metadata.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php, engine/lib/relationships.php: Fixes #3827
+ updated documentation on @return for elgg_get_entities* functions
+
+2011-09-28 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/elgglib.php, engine/lib/views.php,
+ engine/tests/api/helpers.php: Fixes #3891. elgg_register_external_file()
+ defaults priority to 500. Elgg's default CSS now at 500 instead of 1.
+
+ * .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/profile/views/default/profile/owner_block.php,
+ views/default/core/avatar/upload.php, views/default/forms/avatar/crop.php,
+ views/default/icon/user/default.php: Fixes #3879. Removed some instances of
+ deprecated views / functions.
+
+ * mod/file/pages/file/search.php: Fixes #3823. More carefully casting to int
+ for file's search.
+
+ * engine/tests/api/plugins.php: Refs #3808. Removed failing tests for
+ manifest translations.
+
+ * engine/lib/entities.php, engine/lib/metastrings.php, engine/lib/river.php,
+ engine/lib/tags.php, engine/tests/api/entity_getter_functions.php: Fixes
+ #3713. elgg_get_entities() and friends return false if passed invalid
+ options.
+
+2011-09-26 cash <cash.costello@gmail.com>
+
+ * engine/lib/output.php, views/default/input/checkboxes.php,
+ views/default/input/date.php, views/default/input/dropdown.php,
+ views/default/input/radio.php, views/default/input/userpicker.php: Fixes
+ #2921 clearing new ignore internal variables
+
+2011-09-25 cash <cash.costello@gmail.com>
+
+ * engine/lib/navigation.php, views/default/navigation/menu/site.php: Fixes
+ #3876 fixed dangling more site menu when items are manually selected - thanks
+ to JEBailey
+
+ * ...0.1-forum_reply_river_view-5758ce8d86ac56ce.php, version.php: Fixes
+ #3877 updates river db table for replying to forum topics
+
+ * languages/en.php, views/default/river/user/default/profileupdate.php: Refs
+ #3842 adding river view back so that those upgrading from earlier Elgg views
+ don't have empty river messages
+
+2011-09-24 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/admin.php, views/default/css/elements/icons.php,
+ views/default/css/ie.php, views/default/css/ie7.php: Fixes #3653 shrink
+ wrapping .elgg-avatar so that hover menu arrow is constrained to the avatar
+ image
+
+ * engine/lib/views.php, mod/embed/views/default/embed/css.php,
+ views/default/css/elements/core.php,
+ views/default/css/elements/navigation.php, views/default/css/ie.php,
+ views/default/css/ie6.php, views/default/css/ie7.php,
+ views/default/page/elements/head.php: Fixes #3845 added ie7 css view and
+ tested all current hacks for ie7
+
+2011-09-24 cash <cash.costello@gmail.com>
+
+ * mod/file/languages/en.php: Fixes #3858 added file notification string
+ translation - thanks to slyhne
+
+ * .../views/default/forms/logbrowser/refine.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/reportedcontent/admin_css.php, views/default/css/admin.php,
+ views/default/forms/admin/plugins/change_state.php,
+ views/default/forms/admin/plugins/filter.php,
+ views/default/forms/admin/plugins/sort.php: Fixes #3809 updated admin buttons
+ css
+
+ * engine/lib/deprecated-1.8.php, engine/lib/river.php, engine/lib/views.php,
+ mod/likes/views/default/likes/count.php,
+ mod/likes/views/default/likes/css.php, mod/likes/views/default/likes/js.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ views/default/css/elements/components.php: Fixes #3828 correct list classes
+
+ * .../admin/administer_utilities/logbrowser.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/logbrowser/refine.php: Fixes #3865 updated
+ logbrowser refine form
+
+ * views/default/css/admin.php: Fixes #3788 pagination highlighting updated
+ for admin theme
+
+ * views/default/admin/appearance/profile_fields.php,
+ views/default/forms/profile/fields/add.php,
+ views/default/forms/profile/fields/reset.php: Refs #3864 updated the two form
+ bodies for edit profile fields
+
+ * views/default/forms/account/settings.php, views/default/forms/login.php,
+ views/default/forms/plugins/settings/save.php,
+ views/default/forms/plugins/usersettings/save.php,
+ views/default/forms/register.php, views/default/forms/usersettings/save.php:
+ Fixes #3856 adds elgg-foot to forms missing it in /views/default/forms and
+ updated documentation
+
+2011-09-23 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/handlers/cache_handler.php: Refs #3859. Using PHP internal
+ functions to expire cache in +6 months instead of doing math manually to
+ avoid int overflow.
+
+2011-09-22 cash <cash.costello@gmail.com>
+
+ * mod/embed/views/default/embed/css.php,
+ mod/file/views/default/embed/file/content.php: Fixes #3795 not inserting the
+ file title when embeding a file and tweaked css - thanks to slyhne
+
+ * engine/classes/ElggPluginManifest.php, languages/en.php,
+ views/default/admin/plugins.php: Fixes #3808 not translating manifest fields
+ through elgg_echo()
+
+2011-09-22 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/upgrade.php: Fixes #3834 not loading version.php hundreds of
+ times - thanks to srokap
+
+2011-09-21 cash <cash.costello@gmail.com>
+
+ * js/lib/ui.js, views/default/css/elements/navigation.php,
+ views/default/css/ie.php, views/default/navigation/menu/site.php: Fixes #3770
+ CSS only site menu that works in IE7
+
+2011-09-19 Steve Clay <steve@mrclay.org>
+
+ * engine/lib/elgglib.php, engine/lib/group.php, engine/lib/sessions.php,
+ languages/en.php: forward throws Exception if headers sent. fix for
+ http://trac.elgg.org/ticket/3765
+
+ * engine/lib/views.php: don't generate false internalid deprecation notices:
+ http://trac.elgg.org/ticket/2921#comment:3
+
+2011-09-18 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggMenuItem.php: Fixes #3786 menu code was corrupting link
+ class if an additional class was passed through getContent()
+
+ * mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/admin/develop_tools/inspect.php,
+ .../views/default/admin/develop_tools/preview.php,
+ .../views/default/admin/developers/inspect.php,
+ .../views/default/admin/developers/preview.php: Fixes #3721 reorganized the
+ developer tools menu items in the admin area
+
+ * .../views/default/js/developers/developers.php: Fixes #3825 need to
+ specify the data type as json
+
+2011-09-17 cash <cash.costello@gmail.com>
+
+ * languages/en.php: Fixes #3819 added the request action words to the
+ language file
+
+ * mod/logrotate/languages/en.php, mod/logrotate/start.php,
+ .../views/default/plugins/logrotate/settings.php,
+ .../default/plugins/twitter_api/usersettings.php: Fixes #3824 fixed
+ deprecation warnings for plugin settings and usersettings
+
+ * views/default/object/plugin/advanced.php: Refs #3236 using .float-alt for
+ plugin activate button
+
+ * .../default/plugins/garbagecollector/settings.php,
+ .../default/settings/garbagecollector/edit.php,
+ .../views/default/plugins/groups/settings.php,
+ mod/groups/views/default/settings/groups/edit.php,
+ .../views/default/plugins/logrotate/settings.php,
+ .../views/default/settings/logrotate/edit.php,
+ .../views/default/plugins/twitter_api/settings.php,
+ .../default/plugins/twitter_api/usersettings.php,
+ .../views/default/settings/twitter_api/edit.php,
+ .../default/usersettings/twitter_api/edit.php: Fixes #2990 updated the
+ bundled plugins to use the new plugin/user settings structure
+
+2011-09-17 Cash Costello <cash.costello@gmail.com>
+
+ * .../views/default/settings/twitter_api/edit.php,
+ views/default/css/admin.php, views/default/object/plugin/advanced.php,
+ .../object/plugin/elements/dependencies.php,
+ views/default/object/plugin/invalid.php,
+ views/default/object/plugin/simple.php, views/default/page/admin.php: Fixes
+ #3236 finishes admin theme - open new tickets for new issues
+
+2011-09-15 cash <cash.costello@gmail.com>
+
+ * engine/lib/views.php: Fixes #3178 updated elgg_view_icon() to take an
+ optional class
+
+ * _graphics/elgg_sprites.png, mod/search/views/default/search/css.php,
+ views/default/css/elements/icons.php: Fixes #3400, #3820 added additional
+ icons to Elgg's sprite
+
+2011-09-15 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/lightbox.php: Fixes #3818 fixed short tag and extra
+ slash in URL for lightbox
+
+2011-09-14 Cash Costello <cash.costello@gmail.com>
+
+ * .../notifications/subscriptions/forminternals.php,
+ views/default/icon/user/default.php, views/default/input/friendspicker.php:
+ Fixes #3742 not including the hover menu on the personal notifications page
+
+ * engine/lib/navigation.php, languages/en.php,
+ mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ .../admin/develop_utilities/diagnostics.php,
+ .../views/default/admin/utilities/diagnostics.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ .../admin/administer_utilities/logbrowser.php,
+ .../views/default/admin/utilities/logbrowser.php,
+ mod/reportedcontent/languages/en.php, mod/reportedcontent/start.php,
+ .../admin/administer_utilities/reportedcontent.php,
+ .../default/admin/utilities/reportedcontent.php: Fixes #3681 fixed Utilities
+ menu collisions in admin section and added documentation about registering
+ more than one menu item with the same name to a menu
+
+ * views/default/forms/admin/site/update_advanced.php: Fixes #3783 using an
+ associative array for advanced settings checkboxes
+
+2011-09-13 Cash Costello <cash.costello@gmail.com>
+
+ * js/lib/elgglib.js, js/lib/languages.js, views/default/js/elgg.php: Fixes
+ #3539 two conditions for triggering init,system now - dom is ready and
+ languages loaded
+
+ * views/default/output/confirmlink.php: Fixes #3811 defaulting title to
+ confirm text if passed to output/confirmlink
+
+ * languages/en.php, views/default/admin/plugins.php: Fixes #3623 added
+ non-bundled filter option for plugins
+
+ * .../default/widgets/a_users_groups/content.php: Fixes #3803 fixed groups
+ more link in widget
+
+2011-09-12 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/admin.php, views/default/js/admin.php: Refs #3800 including
+ jeditable on more admin pages
+
+ * engine/lib/deprecated-1.8.php: Fixes #3801 fixed documentation for
+ page_owner_entity()
+
+ * mod/externalpages/manifest.xml: Fixes #3804 using Site Pages for the
+ plugin name
+
+2011-09-12 Brett Profitt <brett.profitt@gmail.com>
+
+ * .gitignore: Refs #3573. Using more specific rules in .gitignore.
+
+ * mod/embed/manifest.xml: Refs #3771. Fixed incorrect requires plugin name.
+
+2011-09-11 Brett Profitt <brett.profitt@gmail.com>
+
+ * .gitignore: Fixse #3573. Ignoring all files in /mod/ that aren't part of
+ core.
+
+ * mod/embed/manifest.xml, mod/file/views/default/embed/file/content.php,
+ .../views/default/embed/file_upload/content.php: Fixes #3771. Added missing
+ files for embed support. Added requirement for file in embed's manifest.
+
+2011-09-11 Cash Costello <cash.costello@gmail.com>
+
+ * mod/dashboard/languages/en.php, mod/dashboard/start.php,
+ .../default/widgets/group_activity/content.php,
+ .../views/default/widgets/group_activity/edit.php: Fixes #3340 adds group
+ activity widget for the user dashboard
+
+2011-09-11 Ravindra Nath Kakarla <ravindhranath@gmail.com>
+
+ * engine/lib/input.php: Livesearch handler returns proper JSON string now
+
+2011-09-11 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/users.php: Fixes #3794 fixes menu links so that admins can edit
+ avatars
+
+2011-09-10 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggMenuItem.php: Fixes #3741 fixed menu code so that all
+ links do not get empty title and confirm attributes
+
+ * engine/lib/views.php: Fixes #3665, #3660 added plugin hooks for page and
+ layouts so that rss icon for page meta menu can be registered consistently
+
+ * engine/lib/views.php: Fixes #3688 setting the page setup variable in
+ $CONFIG before trigger the event to prevent a stack overflow
+
+ * actions/admin/plugins/activate.php: Fixes #3714 also forwarding to the top
+ of the page when a plugin activation fails
+
+ * mod/groups/actions/groups/membership/join.php: Fixes #3752 corrected URL
+ for group membership requests
+
+ * engine/lib/plugins.php: made the documentation of the plugin settings code
+ a little clearer
+
+ * engine/classes/ElggEntity.php: Fixes #3782 only deleting metadata if the
+ entity has been saved
+
+ * mod/logbrowser/start.php,
+ mod/logbrowser/views/default/logbrowser/form.php: Fixes #3775 updated admin
+ area for logbrowser to utilities
+
+2011-09-05 Brett Profitt <brett.profitt@gmail.com>
+
+ * CHANGES.txt, engine/lib/access.php, version.php: Fixed a stupid problem I
+ introduced in the installation and only just caught >:O
+
+ * version.php: Version bump to 1.8.0. *whew*
+
+ * README.txt: Updated README to mention the Elgg Foundation.
+
+ * js/lib/ui.js, views/default/css/ie.php: Refs #3449, #3770. Using JS to fix
+ submenu dropdown in IE7.
+
+ * engine/lib/deprecated-1.8.php: Improved documentation for deprecated
+ functions.
+
+ * UPGRADE.txt: Added instructions to delete deprecated plugins during
+ upgrade.
+
+ * CHANGES.txt: Updated changes for 1.8.0.
+
+ * CONTRIBUTORS.txt: Updated contributors file with @elgg.org email
+ addresses.
+
+ * UPGRADE.txt: Added more explicit upgrade instructions for 1.7 -> 1.8.
+
+ * views/default/css/ie.php: Refs #3449. Some IE7 CSS fixes. I need to shower
+ now.
+
+2011-09-04 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/entities.php: Fixes #3661. Pulled in recursive delete fixes to
+ master.
+
+ * engine/classes/ElggEntity.php: Refs #3661. Merged lat/long metadata fixes
+ to master.
+
+ * engine/lib/entities.php, mod/search/search_hooks.php: Refs #3661. Merged
+ XSS fixes in search to master.
+
+ * mod/pages/pages/pages/edit.php: Refs #3661. Better filtering for
+ container_guid in pages.
+
+ * mod/file/pages/file/search.php: Refs #3661. Pulled in XSS fixes for file
+ search.
+
+ * mod/groups/lib/groups.php: Fixes #3720. Using correctly filters for tabs
+ on group landing page.
+
+ * engine/start.php: Refs #3661. Merged $CONFIG->lastcache fix to master.
+ Fixes #3530. $CONFIG->lastcache has correct value on page load when cache is
+ regenerated. Conflicts: engine/start.php
+
+2011-09-03 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/access.php: Fixed typo in call to function.
+
+2011-08-30 Brett Profitt <brett.profitt@gmail.com>
+
+ * actions/friends/collections/add.php,
+ actions/friends/collections/delete.php, actions/friends/collections/edit.php,
+ engine/lib/access.php, engine/tests/api/access_collections.php,
+ languages/en.php: Fixes #3543. Ported access collections fix to master.
+
+2011-08-29 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/views.php, views/default/css/lightbox.php: Fixes #3461: Using
+ absolute URLs for lightbox CSS.
+
+ * mod/embed/views/default/js/embed/embed.php: Removing debug string.
+
+2011-08-27 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/profile/views/default/profile/js.php: Fixes #3561. Only adding the
+ static profile block height to the widget canvas if on the profile page.
+
+ * mod/embed/languages/en.php, mod/embed/start.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/gallery.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/embed/views/default/js/embed/inline.php, mod/file/start.php: Fixes #2911.
+ Embed plugins works again. Added menu for embed sections. This plugin is
+ painfully messy.
+
+ * engine/classes/ElggPluginPackage.php, engine/lib/plugins.php,
+ languages/en.php, views/default/admin/plugins.php: Fixes #3434. Manifests are
+ checked more carefully on anything that checks deps. Disabling plugins with
+ invalid manifests from admin page.
+
+2011-08-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/views.php: Fixes #3535. elgg_view_form() automatically adds
+ elgg-form-action-name.
+
+ * mod/likes/start.php: Removed unused code for likes notification.
+
+ * mod/likes/actions/likes/add.php, mod/likes/languages/en.php,
+ mod/likes/start.php: Fixes #3131. Added generic liking notification text.
+
+ * mod/blog/start.php: Fixes #3558. Added upgrade for excerpt in blogs.
+
+ * mod/blog/start.php: Removed silly check for elgg version.
+
+ * mod/blog/start.php: Fixing blog upgrades for excerpt.
+
+ * CODING.txt: Fixes #3657. There's not a good way to ensure redirects for
+ CODING.txt because most of the code is off our servers now, so just putting a
+ placeholder.
+
+ * views/default/page/elements/head.php,
+ views/default/page/elements/shortcut_icon.php: Fixes #3662. Pulled out
+ shortcut_icon to its own view for easier overriding.
+
+2011-08-24 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/classes/ElggPriorityList.php: Checking for === false when moving
+ elements in ElggPriorityList instead of just !$priority. Fixes problems when
+ moving elements to / from 0.
+
+ * .../forms/uservalidationbyemail/bulk_action.php: Fixes #3621. Corrected
+ the URL for the unvalidated users pagination.
+
+ * mod/groups/actions/discussion/reply/save.php, mod/groups/start.php,
+ .../views/default/annotation/group_topic_post.php,
+ .../views/default/forms/discussion/reply/save.php,
+ .../views/default/annotation/messageboard.php: Fixes #3612, #3750. Added edit
+ replies back to group plugin with the annotation menu.
+
+ * mod/messageboard/start.php: Refs #3750. Messageboard using annotations
+ menu.
+
+ * engine/lib/navigation.php, views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php,
+ views/default/css/elements/navigation.php: Refs #3750. Added annotation menu
+ for generic comments (delete) and default annotations (empty).
+
+ * js/lib/hooks.js: Fixes #3589. JS "all" hook handlers called only once.
+
+ * actions/avatar/upload.php: Refs #3557: Upscaling small icons to 200x200.
+ This doesn't fix the problem if someone uploads a 100x200 image.
+
+ * mod/categories/actions/save.php, mod/categories/activate.php,
+ mod/categories/languages/en.php, mod/categories/start.php,
+ mod/categories/views/default/input/categories.php,
+ .../views/default/plugins/categories/settings.php,
+ .../views/default/settings/categories/edit.php: Refs #3746. Updated
+ categories for 1.8. Still some deprecation notices, but functional.
+
+2011-08-23 Brett Profitt <brett.profitt@gmail.com>
+
+ * .../actions/twitter_api/interstitial_settings.php,
+ mod/twitter_api/languages/en.php, mod/twitter_api/lib/twitter_api.php,
+ mod/twitter_api/pages/twitter_api/interstitial.php,
+ mod/twitter_api/start.php, .../forms/twitter_api/interstitial_settings.php,
+ .../default/usersettings/twitter_api/edit.php: Fixes #3117. Added an
+ interstitial page for twitter new users.
+
+ * views/default/navigation/menu/default.php: Rewriting more chars to - in
+ the default menu view.
+
+ * engine/classes/ElggPriorityList.php, engine/lib/elgglib.php,
+ engine/lib/views.php, engine/tests/api/helpers.php: Fixes #3355. Added
+ ElggPriorityList. Adapted the externals system to use it.
+
+2011-08-22 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/views.php, vendors/jquery/jquery-1.6.2.min.js,
+ vendors/jquery/jquery-ui-1.8.16.min.js, views/installation/page/default.php:
+ Closes #3015. jQuery updated to 1.6.2. jQuery-UI updated to 1.8.16.
+
+2011-08-21 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/groups/lib/groups.php: Fixes #3701. Removed early call to elgg_echo()
+ for group action button menu.
+
+ * engine/classes/ElggSite.php: Fixes #3606. Reset password page added to
+ public pages for walled garden mode.
+
+ * engine/lib/river.php: Fixes #3496. Using OR to concatenate unpaired type
+ and subtype clauses in elgg_get_river_type_subtype_where_sql().
+
+2011-08-18 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/views.php: Fixing priorities for jquery.
+
+2011-08-17 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/classes/ElggPriorityList.php, engine/lib/elgglib.php,
+ engine/tests/api/helpers.php: Finished ElggPriorityList. Migrated external
+ files to use it.
+
+2011-08-17 tvld <tom@lorinthe.com>
+
+ * htaccess_dist: My very first attempt to contribute...
+ http://trac.elgg.org/ticket/3601 For optimal speed, Firebug's Yslow
+ complained that the js and ico files did not have an Etag.
+
+2011-08-15 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/classes/ElggPriorityList.php, engine/tests/api/helpers.php: Refs
+ #3355. Added ElggPriorityList.
+
+ * pages/friends/collections/add.php,
+ pages/friends/collections/pickercallback.php,
+ pages/friends/collections/view.php, pages/friends/index.php,
+ pages/friends/of.php: Fixes #3715. Added the new collection button back.
+
+ * mod/search/views/default/search/list.php: Fixed pagination for search.
+
+ * mod/search/views/default/search/list.php: Fixes #3254. Removing limit for
+ "+X more Y" in search results.
+
+2011-07-27 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/classes/ElggBatch.php: Fixed some documentation.
+
+2011-07-27 Richard Loxley <richard.loxley@surevine.com>
+
+ * engine/lib/actions.php: Fixes Ticket #3709 "Embed plugin: uploading a file
+ in Firefox tries to save a JSON file in the user's browser"
+
+2011-07-10 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/views.php: Fixes #3336 functions that used elgg_view_exists()
+ were not falling back to the default views
+
+2011-07-09 cash <cash.costello@gmail.com>
+
+ * mod/file/pages/file/search.php: Refs #3685 need null for no container
+
+ * engine/lib/users.php, pages/avatar/view.php: fixed redirect for user
+ avatars if we cannot get the user
+
+2011-07-07 Brett Profitt <brett.profitt@gmail.com>
+
+ * mod/dashboard/start.php,
+ views/default/admin/appearance/default_widgets.php: Fixes #3669. Dashboard
+ now registers for default widgets.
+
+ * version.php: Version bump to 1.8.0b2
+
+2011-07-07 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/elements/components.php,
+ views/default/river/elements/body.php,
+ views/default/river/relationship/friend/create.php: fixed the float issue
+ with the friends river view
+
+ * views/default/icon/user/default.php: Refs #3567 added class extending to
+ icon/user/default
+
+2011-07-06 cash <cash.costello@gmail.com>
+
+ * views/default/input/radio.php: Refs #3624 fixed radio button value
+ detection
+
+2011-07-06 Cash Costello <cash.costello@gmail.com>
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ engine/classes/ElggPlugin.php: Fixes #2204 standardized the hooks/overrides
+ for plugin settings and usersettings
+
+ * engine/lib/river.php: $joins was not declared in elgg_get_river()
+
+ * vendors/jquery/jquery.imgareaselect-0.8.min.js,
+ .../jquery.imgareaselect-0.9.8/GPL-LICENSE.txt,
+ .../jquery.imgareaselect-0.9.8/MIT-LICENSE.txt, .../css/border-anim-h.gif,
+ .../css/border-anim-v.gif, .../jquery.imgareaselect-0.9.8/css/border-h.gif,
+ .../jquery.imgareaselect-0.9.8/css/border-v.gif,
+ .../css/imgareaselect-animated.css, .../css/imgareaselect-default.css,
+ .../css/imgareaselect-deprecated.css, .../scripts/jquery.imgareaselect.js,
+ .../scripts/jquery.imgareaselect.min.js,
+ .../scripts/jquery.imgareaselect.pack.js, .../scripts/jquery.min.js,
+ views/default/forms/avatar/crop.php: Fixes #3663 upgrades imgareaselect
+ library
+
+ * mod/likes/actions/likes/add.php,
+ .../default/river/annotation/likes/create.php: Fixes #3642 removing likes
+ river code
+
+ * engine/lib/navigation.php, mod/blog/lib/blog.php,
+ mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/friends.php,
+ mod/bookmarks/pages/bookmarks/owner.php, mod/file/pages/file/friends.php,
+ mod/file/pages/file/owner.php, mod/file/pages/file/world.php,
+ mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ mod/messages/pages/messages/inbox.php, mod/messages/pages/messages/sent.php,
+ mod/pages/pages/pages/friends.php, mod/pages/pages/pages/owner.php,
+ mod/pages/pages/pages/world.php: changed new convenience function from
+ elgg_register_add_button() to elgg_register_title_button()
+
+ * mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/js/embed/embed.php: updated the embed plugin for new
+ css class elgg-item rather than elgg-list-item
+
+2011-07-04 cash <cash.costello@gmail.com>
+
+ * views/default/css/elements/forms.php: styled the date picker for the main
+ theme
+
+ * views/default/css/admin.php: theming the date picker for the admin theme
+
+ * js/lib/ui.js, views/default/input/date.php, views/default/output/date.php:
+ Fixes #3560 input/date and output/date support ISO 8601 (YYYY-MM-DD) and Unix
+ timestamps. Need to think about how to handle alternate text formats.
+
+2011-07-03 Brett Profitt <brett.profitt@gmail.com>
+
+ * actions/friends/collections/add.php,
+ actions/friends/collections/delete.php, actions/friends/collections/edit.php,
+ engine/lib/access.php, engine/tests/api/access_collections.php,
+ languages/en.php: Merged ACL fixes from 1.7 branch.
+
+ * engine/lib/access.php, engine/tests/api/access_collections.php: Merged
+ d423aee393458d6827db from 1.7 to master. Fixes #3552. Addess ACL unit tests.
+ These currently fail because of #3522. Conflicts: engine/lib/access.php
+
+2011-07-03 cash <cash.costello@gmail.com>
+
+ * .../views/default/page/layouts/custom_index.php: removed deprecated
+ function from custom_index plugin
+
+ * views/default/page/elements/header_logo.php: reformatted the code in
+ page/elements/header_logo view due to line length
+
+ * .../views/default/page/layouts/custom_index.php: removed deprecated
+ function from custom_index plugin
+
+ * views/default/page/elements/header_logo.php: reformatted the code in
+ page/elements/header_logo view due to line length
+
+ * mod/blog/languages/en.php: Fixes #3593 defining the blog post notification
+ string
+
+ * languages/en.php: Fixes #3640 added 'none' as a language string
+
+ * engine/classes/ElggUser.php: Fixes #3650 deprecated
+ ElggUser::getCollections()
+
+ * documentation/coding_standards/best_practices.txt,
+ documentation/coding_standards/deprecation.txt: pulled deprecation guidelines
+ out of general best practices
+
+ * CODING.txt, documentation/coding_standards/best_practices.txt,
+ .../coding_standards/css_coding_standards.txt,
+ .../coding_standards/html_best_practices.txt,
+ .../coding_standards/javascript_best_practices.txt,
+ .../javascript_coding_standards.txt,
+ .../coding_standards/php_best_practices.txt,
+ .../coding_standards/php_coding_standards.txt: separate out coding standards
+
+2011-07-03 Cash Costello <cash.costello@gmail.com>
+
+ * engine/classes/ElggCache.php: Fixes #3656 updates the AccessArray
+ interface methods for ElggCache
+
+ * mod/notifications/start.php, mod/tinymce/start.php: these plugins should
+ not need special loading order
+
+ * views/default/css/admin.php: updated the admin theme for the new css
+ classes on input elements
+
+2011-07-02 cash <cash.costello@gmail.com>
+
+ * mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/admin/developers/settings.php: added logging of events and
+ plugin hooks
+
+ * mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/admin/developers/settings.php: Fixes #3152 adds wrapping of
+ views with comments
+
+ * mod/developers/classes/ElggLogCache.php: returning false to stop
+ elgg_dump() from also displaying the debugging information to the screen
+
+ * mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/admin/developers/settings.php: Fixes #3500 added setting
+ for raw string display
+
+ * mod/developers/views/default/developers/log.php: removed warning if no
+ messages in the cache
+
+ * engine/classes/ElggPlugin.php,
+ mod/developers/actions/developers/settings.php,
+ mod/developers/classes/ElggLogCache.php, mod/developers/languages/en.php,
+ mod/developers/start.php, .../views/default/admin/developers/settings.php,
+ mod/developers/views/default/developers/css.php,
+ mod/developers/views/default/developers/log.php: added logging to the web
+ page footer
+
+ * mod/developers/actions/developers/inspect.php,
+ mod/developers/classes/ElggInspector.php, mod/developers/languages/en.php,
+ mod/developers/start.php, mod/developers/vendors/jsTree/jquery.jstree.js,
+ mod/developers/vendors/jsTree/themes/apple/bg.jpg,
+ mod/developers/vendors/jsTree/themes/apple/d.png,
+ .../vendors/jsTree/themes/apple/dot_for_ie.gif,
+ .../vendors/jsTree/themes/apple/style.css,
+ .../vendors/jsTree/themes/apple/throbber.gif,
+ mod/developers/vendors/jsTree/themes/classic/d.gif,
+ mod/developers/vendors/jsTree/themes/classic/d.png,
+ .../vendors/jsTree/themes/classic/dot_for_ie.gif,
+ .../vendors/jsTree/themes/classic/style.css,
+ .../vendors/jsTree/themes/classic/throbber.gif,
+ .../vendors/jsTree/themes/default-rtl/d.gif,
+ .../vendors/jsTree/themes/default-rtl/d.png,
+ .../vendors/jsTree/themes/default-rtl/dots.gif,
+ .../vendors/jsTree/themes/default-rtl/style.css,
+ .../vendors/jsTree/themes/default-rtl/throbber.gif,
+ mod/developers/vendors/jsTree/themes/default/d.gif,
+ mod/developers/vendors/jsTree/themes/default/d.png,
+ .../vendors/jsTree/themes/default/style.css,
+ .../vendors/jsTree/themes/default/throbber.gif,
+ .../views/default/admin/developers/inspect.php,
+ mod/developers/views/default/developers/css.php,
+ mod/developers/views/default/developers/tree.php,
+ .../views/default/forms/developers/inspect.php,
+ .../views/default/js/developers/developers.php: added the inspect tool to
+ developers tool plugin
+
+ * engine/lib/river.php, pages/river.php: fixed river for #3544
+
+ * mod/embed/start.php, mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/upload/content.php: fixed embed plugin for
+ #3544
+
+ * mod/file/pages/file/search.php, mod/messages/pages/messages/send.php:
+ fixed messages and file plugins for #3544
+
+ * engine/lib/input.php: added note about preventing reflected XSS
+ vulnerabilities.
+
+2011-07-02 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/input/access.php, views/default/input/autocomplete.php,
+ views/default/input/button.php, views/default/input/calendar.php,
+ views/default/input/captcha.php, views/default/input/checkbox.php,
+ views/default/input/checkboxes.php, views/default/input/date.php,
+ views/default/input/dropdown.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/location.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/plaintext.php, views/default/input/radio.php,
+ views/default/input/tag.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Fixes #3624 input
+ views use class extending rather than overriding
+
+ * mod/blog/views/default/forms/blog/save.php: fixed the blog categories code
+ as the entity was not being passed
+
+2011-07-01 Cash Costello <cash.costello@gmail.com>
+
+ * mod/bookmarks/pages/bookmarks/bookmarklet.php: removed the add bookmark
+ button from get bookmarklet page
+
+2011-06-30 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/elgglib.php: Adds exception handling to shutdown hook from pull
+ request 50
+
+ * engine/lib/views.php, vendors/jquery/jquery-1.5.min.js,
+ vendors/jquery/jquery-1.6.1.min.js, vendors/jquery/jquery-ui-1.8.14.min.js,
+ vendors/jquery/jquery-ui-1.8.9.min.js: Refs #3015 updated jquery and
+ jquery-ui to their latest releases
+
+ * languages/en.php, views/default/object/plugin/advanced.php: Fixes #3635
+ added strings for activate and deactivate
+
+ * languages/en.php: Fixes #3636 added general language strings for sort and
+ filter
+
+2011-06-29 cash <cash.costello@gmail.com>
+
+ * .../views/default/groups/profile/widgets.php: made group widget columns
+ backward compatible so that content at least does not disappear
+
+ * engine/classes/ElggMenuItem.php: handling spaces and uppercase characters
+ when creating menu item classes
+
+ * engine/lib/views.php, views/default/page/elements/wrapper.php: added
+ backward compatibility for the view page_elements/content_wrapper
+
+ * engine/lib/group.php: added @since dates on two functions in group library
+
+2011-06-29 Cash Costello <cash.costello@gmail.com>
+
+ * mod/tinymce/views/default/js/tinymce.php,
+ mod/tinymce/views/default/tinymce/css.php: Fixes #3537 using elgg.echo() for
+ i18n of word count
+
+ * mod/tinymce/css/elgg_tinymce.css, mod/tinymce/tinymce_content.css,
+ mod/tinymce/views/default/js/tinymce.php: moved tinymce content css into its
+ own directory
+
+ * views/default/css/admin.php, views/default/css/elements/modules.php: Fixes
+ #3629 added overflow hidden to .elgg-module for both default and admin themes
+
+ * mod/thewire/pages/thewire/everyone.php,
+ mod/thewire/pages/thewire/friends.php, mod/thewire/pages/thewire/owner.php,
+ mod/thewire/pages/thewire/reply.php: Fixes #3578 added a css class to thewire
+ add form
+
+ * actions/admin/plugins/activate.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/set_priority.php,
+ views/default/object/plugin/advanced.php: Fixes #3630 using the plugin id for
+ the css id
+
+2011-06-28 Cash Costello <cash.costello@gmail.com>
+
+ * mod/thewire/views/default/forms/thewire/add.php: Fixes #3579 using
+ input/plaintext in the wire form
+
+ * views/default/css/admin.php, views/default/page/layouts/admin.php: Fixes
+ #3519 admin area now has title buttons
+
+ * engine/lib/views.php, views/default/page/layouts/content/header.php: using
+ elgg_view_title() in content layout header
+
+ * languages/en.php, views/default/widgets/content_stats/content.php: Fixes
+ #3597 defined a language string for 'more'
+
+ * languages/en.php: Fixes #3505 define language string for
+ menu:page:header:default
+
+ * .../views/default/forms/bookmarks/save.php,
+ .../views/default/forms/developers/settings.php,
+ .../views/default/forms/expages/edit.php,
+ mod/file/views/default/forms/file/upload.php,
+ .../views/default/forms/discussion/reply/save.php,
+ mod/groups/views/default/forms/discussion/save.php,
+ .../views/default/forms/invitefriends/invite.php,
+ .../views/default/forms/messages/process.php,
+ .../views/default/forms/messages/reply.php,
+ mod/messages/views/default/forms/messages/send.php,
+ .../forms/notificationsettings/groupsave.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/reportedcontent/add.php,
+ mod/thewire/views/default/forms/thewire/add.php: Fixes #3407 added elgg-foot
+ to plugin forms
+
+ * views/default/navigation/menu/elements/item.php: updated the menu item
+ view to work with the new setLinkClass/addLinkClass methods
+
+2011-06-27 Cash Costello <cash.costello@gmail.com>
+
+ * mod/blog/lib/blog.php, mod/blog/views/default/forms/blog/save.php,
+ mod/groups/lib/groups.php, mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/edit.php,
+ .../default/forms/notificationsettings/save.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ views/default/core/settings/account.php,
+ views/default/css/elements/forms.php, views/default/forms/avatar/crop.php,
+ views/default/forms/avatar/upload.php, views/default/forms/comments/add.php,
+ views/default/forms/friends/collections/add.php,
+ views/default/forms/plugins/settings/save.php,
+ views/default/forms/profile/edit.php,
+ views/default/forms/user/requestnewpassword.php,
+ views/default/forms/useradd.php, views/default/forms/usersettings/save.php,
+ views/default/forms/widgets/save.php, views/default/input/form.php: Refs
+ #3407 using elgg-form and elgg-foot in core forms. Plugins next
+
+2011-06-26 cash <cash.costello@gmail.com>
+
+ * mod/bookmarks/pages/bookmarks/add.php,
+ mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/bookmarklet.php,
+ mod/bookmarks/pages/bookmarks/edit.php,
+ mod/bookmarks/pages/bookmarks/friends.php,
+ mod/bookmarks/pages/bookmarks/owner.php, mod/file/pages/file/edit.php,
+ mod/file/pages/file/friends.php, mod/file/pages/file/owner.php,
+ mod/file/pages/file/search.php, mod/file/pages/file/upload.php,
+ mod/file/pages/file/view.php, mod/file/pages/file/world.php,
+ mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ .../views/default/groups/profile/buttons.php,
+ mod/members/pages/members/index.php,
+ mod/messageboard/pages/messageboard/owner.php,
+ mod/messages/pages/messages/inbox.php, mod/messages/pages/messages/read.php,
+ mod/messages/pages/messages/send.php, mod/messages/pages/messages/sent.php,
+ mod/messages/views/default/messages/js.php, mod/pages/pages/pages/edit.php,
+ mod/pages/pages/pages/friends.php, mod/pages/pages/pages/history.php,
+ mod/pages/pages/pages/new.php, mod/pages/pages/pages/owner.php,
+ mod/pages/pages/pages/revision.php, mod/pages/pages/pages/view.php,
+ mod/pages/pages/pages/world.php, mod/thewire/pages/thewire/everyone.php,
+ mod/thewire/pages/thewire/friends.php, mod/thewire/pages/thewire/owner.php,
+ mod/thewire/pages/thewire/previous.php, mod/thewire/pages/thewire/reply.php,
+ mod/thewire/pages/thewire/tag.php, mod/thewire/pages/thewire/thread.php,
+ pages/river.php: this should update all the core pages and plugins using
+ 'buttons'
+
+ * engine/lib/navigation.php, mod/blog/lib/blog.php,
+ views/default/page/layouts/content.php,
+ views/default/page/layouts/content/header.php: removed buttons logic from
+ content header view, created convenience function rather than copying and
+ pasting, and updated the blog plugin
+
+ * engine/classes/ElggMenuItem.php, engine/lib/navigation.php,
+ mod/groups/start.php: added a data array to ElggMenuItem. Now by default
+ options end up being passed to output/url.
+
+ * mod/embed/images/close_button.gif, mod/embed/js/embed.js,
+ mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/js/embed/embed.php: updated based on Brett's comments
+ and removed old stuff related to facebox lightbox
+
+2011-06-26 Cash Costello <cash.costello@gmail.com>
+
+ * engine/lib/relationships.php: Fixes #3585 do not need to check parameters
+ because was registered for only one event
+
+ * engine/classes/ElggMenuItem.php, engine/lib/navigation.php, js/lib/ui.js,
+ mod/groups/start.php, mod/logbrowser/views/default/logbrowser/form.php,
+ mod/profile/views/default/profile/owner_block.php,
+ .../views/default/object/reported_content.php,
+ views/default/object/plugin/advanced.php,
+ views/default/object/plugin/invalid.php,
+ views/default/object/widget/elements/controls.php,
+ views/default/page/layouts/widgets/add_button.php: Fixes #3470 using
+ rel=toggle now
+
+ * mod/thewire/languages/en.php,
+ .../views/default/river/object/thewire/create.php: provided a way to get to
+ the wire from activity page
+
+ * mod/blog/languages/en.php, mod/blog/lib/blog.php,
+ mod/bookmarks/pages/bookmarks/all.php, mod/bookmarks/start.php,
+ mod/file/languages/en.php, mod/file/pages/file/friends.php,
+ mod/file/pages/file/owner.php: made breadcrumbs consistent in content plugins
+
+ * mod/groups/start.php: not displaying the reply button for discussion
+ topics in widgets
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/object/default.php, views/default/object/elements/summary.php:
+ Fixes #3368 combining $vars with parameters for object/elements/summary view
+
+ * .../views/default/settings/logrotate/edit.php: removed use of deprecated
+ internalname key in log rotation
+
+ * engine/classes/ElggEntity.php, mod/blog/lib/blog.php,
+ mod/bookmarks/pages/bookmarks/view.php, mod/file/pages/file/view.php,
+ mod/groups/lib/discussion.php, .../views/default/groups/sidebar/featured.php,
+ mod/messages/pages/messages/read.php, mod/pages/pages/pages/view.php,
+ mod/search/views/default/search/entity.php, pages/entities/index.php,
+ views/default/page/elements/owner_block.php,
+ views/json/entities/entity_list.php: Fixes #3614 updated use of
+ elgg_view_entity() throughout core
+
+ * mod/messageboard/pages/messageboard/owner.php: better way of sorting
+ messageboard annotations
+
+2011-06-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/deprecated-1.8.php: Don't say the db was upgradeded when it
+ wasn't.
+
+ * engine/lib/upgrade.php, engine/lib/upgrades/2011010101.php: Fixes #3554.
+ Pulled 1.7->1.8 upgrade bootstrapping into a separate function. Made the
+ plugin upgrade that forwards (2011010101) set itself in the processed
+ upgrades.
+
+2011-06-25 cash <cash.costello@gmail.com>
+
+ * views/default/css/elements/layout.php,
+ views/default/page/layouts/one_column.php: one_column layout was not showing
+ title and nav
+
+ * mod/messageboard/pages/messageboard/owner.php: fixed ordering of
+ messageboard posts
+
+2011-06-25 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/configuration.php: datalist_get() was incorrectly setting
+ escaped values in the cache.
+
+2011-06-25 cash <cash.costello@gmail.com>
+
+ * engine/lib/admin.php: fixed spacing in
+ elgg_admin_add_plugin_settings_menu()
+
+ * languages/en.php, .../river/user/default/profileiconupdate.php: actually
+ read Evan's comment on pull request #48 and fixed previous
+
+ * languages/en.php, .../river/user/default/profileiconupdate.php: updates
+ the avatar update river view and closes pull request #48
+
+ * views/default/river/elements/body.php,
+ views/default/river/elements/responses.php,
+ views/default/river/elements/summary.php: added documentation to new river
+ views and improved handling of responses
+
+ * engine/classes/ElggEntity.php: Fixes #3609 removed use of deprecated
+ trigger_plugin_hook()
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/js.php,
+ mod/groups/views/default/groups/profile/module.php,
+ .../views/default/groups/profile/widgets.php: Fixes #3395 using a fluid
+ gallery for the groups profile page
+
+ * js/lib/ui.js, mod/likes/start.php,
+ mod/likes/views/default/likes/count.php,
+ mod/likes/views/default/likes/js.php: Fixes #3610 $guid was not defined
+
+2011-06-25 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/css/elements/navigation.php: Fixes #3388 put vertical-align:
+ middle back on topbar icons
+
+ * mod/likes/start.php, mod/likes/views/default/likes/button.php,
+ mod/likes/views/default/likes/count.php,
+ mod/likes/views/default/likes/css.php, views/default/river/elements/body.php:
+ Fixes #3566 separate out likes button from likes count
+
+ * mod/likes/views/default/likes/button.php,
+ mod/likes/views/default/likes/display.php,
+ views/default/css/elements/core.php,
+ views/default/css/elements/navigation.php: Refs #3388 entity menu has better
+ vertical alignment
+
+2011-06-24 cash <cash.costello@gmail.com>
+
+ * mod/groups/lib/groups.php: fixed breadcrumb on groups members page
+
+ * .../views/default/forms/messageboard/add.php: added spacing between
+ messageboard textarea and submit button
+
+ * mod/messages/pages/messages/read.php: adding some spacing between the
+ messages and the reply form
+
+ * mod/blog/views/default/blog/group_module.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ .../default/groups/profile/activity_module.php,
+ mod/groups/views/default/groups/profile/module.php,
+ mod/pages/views/default/pages/group_module.php: Fixes #3139 DRYs up group
+ modules
+
+ * mod/custom_index/index.php, .../views/default/groups/sidebar/members.php,
+ views/default/css/elements/components.php: Fixes #3559 adds
+ .elgg-gallery-users
+
+ * engine/lib/entities.php, engine/lib/views.php, mod/custom_index/index.php,
+ mod/file/views/default/file/typecloud.php,
+ .../views/default/groups/sidebar/members.php,
+ views/default/widgets/friends/content.php: Refs #1253 using 'list_type'
+ string instead of boolean 'gallery' for entity listing
+
+ * engine/lib/views.php, mod/search/views/default/search/list.php,
+ views/default/css/admin.php, views/default/css/elements/components.php,
+ views/default/object/elements/summary.php,
+ views/default/page/components/gallery.php,
+ views/default/page/components/list.php: cleaned up the list/gallery css
+ classes to use standard class naming - minor modifications only
+
+ * .../graphics/sign-in-with-twitter-d.png,
+ .../graphics/sign-in-with-twitter-l.png, mod/twitter_api/lib/twitter_api.php,
+ .../views/default/twitter_api/login.php: Fixes #2958 cleaned up user login
+ for twitter
+
+ * mod/thewire/start.php: Fixes #3204 adds hook trigger so that wire sends
+ out status updates
+
+ * mod/twitter_api/lib/twitter_api.php, mod/twitter_api/start.php: fixed the
+ post to twitter capability - was not loading the twitter oauth class
+
+ * mod/twitter_api/lib/twitter_api.php,
+ .../default/usersettings/twitter_api/edit.php: fixes the authorization to
+ post so that it does not include login
+
+ * mod/twitter_api/start.php: twitter @anywhere was causing problems - pages
+ were not loading and js errors
+
+2011-06-20 benbro <ben.browitt@gmail.com>
+
+ * engine/lib/statistics.php, engine/lib/users.php: added find_active_users
+ hook
+
+2011-06-24 Cash Costello <cash.costello@gmail.com>
+
+ * .../river/object/groupforumtopic/create.php,
+ views/default/river/elements/body.php: fixed group forum discussion inline
+ replies for activity page
+
+2011-06-23 cash <cash.costello@gmail.com>
+
+ * mod/twitter_api/languages/en.php, mod/twitter_api/start.php,
+ .../views/default/settings/twitter_api/edit.php,
+ mod/twitter_api/views/default/twitter_api/css.php: cleaned up the twitter api
+ plugin settings so instructions are correct. Need to verify that login works.
+
+ * .../views/default/settings/twitter_api/edit.php: added instructions back
+ to twitter api plugin settings
+
+ * views/default/css/admin.php: added a css class so that we can limit the
+ width of text instruction areas in admin area
+
+2011-06-23 Cash Costello <cash.costello@gmail.com>
+
+ * mod/groups/actions/groups/membership/remove.php,
+ mod/groups/languages/en.php: Refs #1867 let group owner know what user they
+ just removed
+
+ * mod/dashboard/start.php, mod/dashboard/views/default/dashboard/blurb.php,
+ mod/dashboard/views/default/dashboard/css.php: Fixes #3599 spacing of
+ dashboard blurb fixed
+
+ * views/default/css/elgg.php: Fixes #3471 moved helpers to end of css/elgg
+
+ * mod/twitter/views/default/twitter/css.php: Fixes #3603 fixes display of
+ @username in twitter widget - thanks to ManUtopiK
+
+2011-06-22 cash <cash.costello@gmail.com>
+
+ * views/default/page/default.php: backward compatibility of the admin page
+ shell was broken when we reorganized the page view directory
+
+ * mod/thewire/languages/en.php, mod/thewire/views/default/thewire/reply.php:
+ added @username in the reply text for a wire post
+
+2011-06-22 Cash Costello <cash.costello@gmail.com>
+
+ * mod/members/pages/members/search.php: Fixes #3598 sanitizing the $name
+ variable
+
+2011-06-21 Franz Liedke <franz@develophp.org>
+
+ * engine/classes/ElggMenuItem.php: Add param description to PHPDoc comments
+ of setText() function.
+
+2011-06-20 cash <cash.costello@gmail.com>
+
+ * engine/lib/actions.php: removed debug code
+
+2011-06-20 Franz Liedke <franz@develophp.org>
+
+ * engine/classes/ElggMenuItem.php: Add setText() method to ElggMenuItem
+ class. Fixes #3546.
+
+ * engine/classes/ElggMenuItem.php: Add setHref() method to ElggMenuItem
+ class. Fixes #3486.
+
+2011-06-19 cash <cash.costello@gmail.com>
+
+ * mod/thewire/start.php: fixed the wire's previous ajax - the link class for
+ the menu was lost in the conversion from plain class to link_class
+
+ * languages/en.php: fixed typo in edit profile fields instructions
+
+ * mod/file/views/default/forms/file/upload.php: we "upload" new files and
+ "save" old ones
+
+ * mod/file/pages/file/view.php, mod/file/views/default/object/file.php:
+ moved the download button for files to the action menu (which probably needs
+ to be a menu)
+
+ * mod/embed/views/default/embed/upload/content.php,
+ mod/embed/views/default/js/embed/embed.php: File uploads working now. It is
+ hard coded to only work with file plugin.
+
+ * engine/lib/actions.php: added another way for an action to be detected as
+ an Ajax action: set the request variable X-Requested-With = XMLHttpRequest.
+ This is because files cannot be uploaded with XMLHttpRequest
+
+ * mod/file/actions/file/upload.php,
+ mod/file/views/default/file/embed_upload.php,
+ mod/file/views/default/forms/file/upload.php: removed the special ajax/embed
+ code from the file plugin
+
+ * views/default/css/elements/layout.php: need the system messages to be
+ above the lightbox overlay at 1000 z-index
+
+ * mod/file/views/default/forms/file/upload.php: need a default container for
+ files if form included from outside file plugin (like the embed plugin)
+
+2011-06-19 Cash Costello <cash.costello@gmail.com>
+
+ * views/default/widgets/friends/content.php: Fixes #3581 checks that the
+ owner of a friends widget is a user
+
+2011-06-18 cash <cash.costello@gmail.com>
+
+ * mod/embed/start.php: fixed issue with embedding a file in an embedded file
+
+ * mod/embed/start.php, mod/embed/views/default/embed/tabs.php,
+ mod/embed/views/default/js/embed/embed.php: added back tab switching
+
+ * mod/embed/views/default/embed/addcontentjs.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/js/embed/embed.php: rewrote pagination for embed file
+ listing
+
+ * mod/embed/start.php, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/js/embed/embed.php,
+ mod/embed/views/default/js/embed/inline.php: rewrote the insert javascript as
+ an intermediate step. I'm sure I completely broke ECML integration and
+ uploading files.
+
+ * mod/embed/start.php, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/tabs.php,
+ views/default/css/elements/navigation.php: using the new lightbox and hacking
+ away at the complicated embed/embed view
+
+ * mod/blog/actions/blog/save.php,
+ mod/blog/views/default/forms/blog/save.php: Fixes #3580 adding blog preview
+ button that uses save action
+
+ * languages/en.php: added "Preview" as a general term defined in language
+ file
+
+ * mod/blog/actions/blog/save.php: using elgg_delete_river() rather than
+ custom SQL in blog save action
+
+ * mod/blog/views/default/forms/blog/save.php: moving the delete button in
+ blog form to right side
+
+ * mod/twitter_api/languages/en.php: Calling normal user registration
+ "manual" was confusing admin manual registration with user initiated
+ registration
+
+2011-06-18 Cash Costello <cash.costello@gmail.com>
+
+ * LICENCE.txt, LICENSE.txt: moved LICENCE.txt to LICENSE.txt to be
+ consistent with readme
+
+2011-06-13 Evan Winslow <evan@elgg.org>
+
+ * views/default/css/elements/components.php: Using tabs, not spaces for
+ indentation
+
+ * mod/groups/start.php, .../river/object/groupforumtopic/create.php,
+ views/default/river/elements/body.php,
+ views/default/river/elements/footer.php,
+ views/default/river/elements/responses.php: Renamed river footer to a more
+ semantic "responses". Fixed discussion to work inline again with this new
+ layout.
+
+ * views/default/css/elements/components.php: elgg-river-message and
+ elgg-river-attachments now get the old elgg-river-content styling
+
+2011-06-13 Jeff Tilson <jrtilson@gmail.com>
+
+ * mod/groups/actions/groups/membership/remove.php,
+ mod/groups/languages/en.php, mod/groups/start.php: Added 'remove from group'
+ link to the user hover menu (only appears when the page owner is a group)
+
+2011-06-13 Ravindra Nath Kakarla <ravindhranath@gmail.com>
+
+ * mod/thewire/views/default/js/thewire.php: textarea has to be jQuery object
+
+2011-06-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggMenuItem.php,
+ views/default/navigation/menu/elements/item.php: Fixes #3282 always using a
+ menu item's name in its class
+
+ * mod/tinymce/views/default/js/tinymce.php: Fixes #3175 toggled tinymce
+ takes full width now - thanks tomv
+
+ * languages/en.php: made some language clearer on default widgets
+ instructions
+
+ * .../views/default/forms/expages/edit.php: fixed formatting of site pages
+ creation form - longtext menu was overlapping tinymce
+
+ * views/default/css/admin.php: added the css for longtext control menu to
+ admin theme
+
+2011-06-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/reportedcontent/admin_css.php: fixing some display issues
+ with reported content - code use a little cleanup
+
+ * mod/thewire/languages/en.php: pulling in blacktooth's wire language typo
+ fix : pull request #32
+
+ * mod/likes/start.php: Fixes #3521 removed unecessary anchor tags - thanks
+ to blacktooth
+
+ * engine/classes/ElggSite.php,
+ ...8b1-sites_need_a_site_guid-6d9dcbf46c0826cc.php, version.php: Fixes #2910
+ set the site_guid of site entities
+
+ * engine/lib/elgglib.php: Fixes #3480 not requiring a timestamp when using
+ the js/css page handler
+
+ * views/default/css/elements/layout.php: Fixes #3409 fixed small viewport
+ issue with default theme
+
+ * views/default/core/settings/tools.php: adjusted the spacing between the
+ settings tools text and the surrounding elements
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/profile/fields.php: using divs for group
+ profile fields to work around html validation issues with the out/tags view
+ using a div
+
+2011-06-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/details.php: convert profile details to
+ use divs so that we don't have invalid html due to output/tags
+
+ * views/default/page/layouts/widgets/add_panel.php: need to maintain key
+ associations with widget types
+
+ * views/default/page/layouts/widgets/add_panel.php: sort widgets for add
+ widgets panel
+
+ * views/default/css/elements/navigation.php: moved the elgg logo to the left
+ by 10 pixels
+
+ * engine/lib/elgglib.php, engine/lib/users.php,
+ views/default/css/elements/navigation.php: topbar icons were pushing the site
+ title. Forced the elgg logo and avatar to behave. Adding overflow hidden to
+ the topbar div would prevent future problems but cause issues for those
+ adding drop down menus
+
+ * actions/avatar/crop.php, actions/avatar/upload.php, languages/en.php:
+ added user avatar river messages back
+
+ * engine/lib/deprecated-1.8.php, engine/lib/river.php: Fixes #3039 added
+ elgg_delete_river()
+
+ * views/default/css/elements/modules.php: made the widget edit area slightly
+ darker to provide contrast with content area
+
+ * mod/profile/views/default/profile/owner_block.php: added some spacing
+ around the profile action menu
+
+ * pages/account/forgotten_password.php, pages/account/register.php,
+ pages/account/reset_password.php, views/default/css/elements/forms.php,
+ views/default/forms/user/requestnewpassword.php: Fixes #3556 limiting width
+ of account text boxes
+
+ * index.php, mod/custom_index/index.php: Fixes #3376 added RSS feed to
+ default index page and suppressing on custom index front page
+
+ * engine/classes/ElggSite.php, engine/lib/users.php,
+ pages/account/forgotten_password.php, pages/account/reset_password.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/forms/login.php: Fixes #3515 created a unified page handler for
+ account pages
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/group/elements/summary.php, views/default/object/default.php,
+ views/default/user/default.php, views/default/user/elements/summary.php:
+ Fixes #3096 added user and group summery views an updated plugins to use the
+ new view locations
+
+ * views/default/object/elements/summary.php,
+ views/default/page/components/summary.php: Refs #3096 Moved
+ page/components/summary to object/elements/summary. Left
+ page/components/summary for backwards compatibility. Plugins will eventually
+ need to be updated to use $type/elements/summary
+
+ * mod/pages/views/default/object/page_top.php: Fixes #3523 setting public
+ write access to logged in for pages
+
+ * mod/pages/start.php, mod/pages/views/default/input/write_access.php: Refs
+ #3523 added a view for write access in pages plugin
+
+ * mod/pages/pages/pages/view.php, mod/pages/start.php: Fixes #2672 limiting
+ deleting pages and creating sub pages
+
+ * engine/classes/ElggMenuItem.php, engine/lib/admin.php: sorting plugin
+ settings menu items by text
+
+ * .../views/default/settings/categories/edit.php,
+ .../default/settings/garbagecollector/edit.php,
+ .../views/default/settings/logrotate/edit.php: Refs #2032 changed <p> to
+ <div> for plugin settings
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/groups/actions/groups/delete.php,
+ mod/groups/views/default/forms/groups/delete.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/edit.php,
+ .../views/default/forms/invitefriends/invite.php,
+ .../notifications/subscriptions/forminternals.php,
+ views/default/css/elements/forms.php, views/default/forms/avatar/crop.php,
+ views/default/forms/avatar/upload.php, views/default/forms/comments/add.php,
+ views/default/forms/usersettings/save.php: Refs #3407 adds a footer for forms
+
+
+ * install/css/install.css, views/installation/install/nav.php,
+ views/installation/install/pages/complete.php: fixed disabled button in
+ installer - css class had changed
+
+2011-06-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/languages/en.php,
+ .../views/default/theme_preview/general.php: Fixes #3394 added a landing page
+ to theme preview and break out of iframe link
+
+ * engine/lib/users.php, views/default/input/location.php,
+ views/default/input/tag.php, views/default/output/location.php,
+ views/default/output/tag.php, views/default/output/tags.php: Fixes #3489
+ added input/output views for tag and location
+
+ * mod/invitefriends/manifest.xml: added invite friends to default activated
+ plugins
+
+ * actions/admin/plugins/activate.php, actions/admin/plugins/deactivate.php:
+ Refs #2871 Forgot to update the forwarding for activate/deactivate actions
+
+ * languages/en.php, mod/diagnostics/languages/en.php,
+ mod/externalpages/languages/en.php: Refs #3410 all admin menu items have
+ consistent capitalization
+
+ * engine/lib/admin.php: Fixes #3548 the check for an admin menu's parent
+ wasn't working
+
+ * actions/admin/plugins/activate_all.php,
+ actions/admin/plugins/deactivate_all.php, views/default/admin/plugins.php,
+ views/default/css/admin.php,
+ views/default/forms/admin/plugins/change_state.php: Fixes #2871 activate
+ all/deactivate all now sensitive to filtering
+
+ * views/default/admin/plugins/simple.php,
+ .../forms/admin/plugins/simple_update_states.php: Refs #2871 removed the
+ simple plugins page
+
+ * engine/lib/admin.php, views/default/admin/plugins.php,
+ views/default/admin/plugins/advanced.php: Refs #2871 promoted advanced
+ plugins up to be a primary menu
+
+ * views/default/object/plugin/advanced.php: Refs #2871 also turning off
+ dragging when not in priority order
+
+ * views/default/admin/plugins/advanced.php,
+ views/default/object/plugin/advanced.php,
+ .../object/plugin/elements/dependencies.php: Refs #2871 only showing links
+ for changing priority when all plugins are shown in priority order
+
+ * languages/en.php, views/default/admin/plugins/advanced.php,
+ views/default/forms/admin/plugins/filter.php,
+ views/default/forms/admin/plugins/sort.php: Refs #2871 adding sorting to
+ advanced plugin page
+
+ * languages/en.php, views/default/admin/plugins/advanced.php: Refs #2871
+ filter plugins by active/inactive state
+
+ * mod/diagnostics/manifest.xml: setting correct category for diagnostics
+ plugin
+
+2011-06-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Closes #3510. Merged CHANGES.txt for 1.7.9 to trunk.
+
+ * engine/lib/deprecated-1.8.php: Refs #3510, #3366. Added warning about
+ count vs sum in egef_annotation_count() to trunk.
+
+ * mod/profile/start.php: Refs #3510, #3316. Merged
+ register_metadata_as_independent() fix in profile.
+
+2011-06-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2011052801.php, version.php: Refs #3510, #3416. Merged
+ update for making sure users have relationship member_of on site object.
+
+ * mod/messages/languages/en.php,
+ mod/messages/views/default/object/messages.php: Refs #3510, #3264. Ported fix
+ for icons of messages from deleted users to trunk.
+
+2011-06-08 Evan Winslow <evan@elgg.org>
+
+ * engine/lib/views.php, languages/en.php, mod/blog/languages/en.php,
+ .../views/default/river/object/blog/create.php,
+ mod/bookmarks/languages/en.php,
+ .../default/river/object/bookmarks/create.php, mod/file/languages/en.php,
+ .../views/default/river/object/file/create.php, mod/groups/languages/en.php,
+ .../river/annotation/group_topic_post/reply.php,
+ mod/groups/views/default/river/group/create.php,
+ .../river/object/groupforumtopic/create.php,
+ .../default/river/relationship/member/create.php,
+ .../default/river/annotation/likes/create.php,
+ mod/messageboard/languages/en.php,
+ .../default/river/object/messageboard/create.php, mod/pages/languages/en.php,
+ .../views/default/river/object/page/create.php, mod/thewire/languages/en.php,
+ .../views/default/river/object/thewire/create.php,
+ .../river/annotation/generic_comment/create.php,
+ views/default/river/elements/body.php,
+ views/default/river/elements/summary.php, views/default/river/item.php,
+ views/default/river/relationship/friend/create.php: River revamp for 1.8
+
+2011-06-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php: Refs #3510, #3414, #3536.
+ Ported https login fixes to trunk. Will need to backport changes to 1.7 for
+ #3536.
+
+ * engine/lib/group.php, engine/lib/sessions.php, languages/en.php: Refs
+ #3510, #3418. Merged fix for forwarding after output to trunk.
+
+ * mod/tinymce/vendor/tinymce/changelog.txt,
+ .../vendor/tinymce/examples/accessibility.html,
+ .../vendor/tinymce/examples/css/content.css,
+ mod/tinymce/vendor/tinymce/examples/css/word.css,
+ .../vendor/tinymce/examples/custom_formats.html,
+ mod/tinymce/vendor/tinymce/examples/full.html,
+ mod/tinymce/vendor/tinymce/examples/index.html,
+ .../vendor/tinymce/examples/lists/image_list.js,
+ .../vendor/tinymce/examples/lists/link_list.js,
+ .../vendor/tinymce/examples/lists/media_list.js,
+ .../vendor/tinymce/examples/lists/template_list.js,
+ mod/tinymce/vendor/tinymce/examples/media/logo.jpg,
+ .../vendor/tinymce/examples/media/logo_over.jpg,
+ .../vendor/tinymce/examples/media/sample.avi,
+ .../vendor/tinymce/examples/media/sample.dcr,
+ .../vendor/tinymce/examples/media/sample.flv,
+ .../vendor/tinymce/examples/media/sample.mov,
+ .../vendor/tinymce/examples/media/sample.ram,
+ .../vendor/tinymce/examples/media/sample.rm,
+ .../vendor/tinymce/examples/media/sample.swf,
+ mod/tinymce/vendor/tinymce/examples/menu.html,
+ mod/tinymce/vendor/tinymce/examples/simple.html,
+ mod/tinymce/vendor/tinymce/examples/skins.html,
+ .../vendor/tinymce/examples/templates/layout1.htm,
+ .../vendor/tinymce/examples/templates/snippet1.htm,
+ mod/tinymce/vendor/tinymce/examples/word.html,
+ .../vendor/tinymce/jscripts/tiny_mce/langs/en.js,
+ .../tiny_mce/plugins/advhr/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advhr/rule.htm,
+ .../jscripts/tiny_mce/plugins/advimage/image.htm,
+ .../jscripts/tiny_mce/plugins/advimage/js/image.js,
+ .../tiny_mce/plugins/advimage/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlink/js/advlink.js,
+ .../tiny_mce/plugins/advlink/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advlink/link.htm,
+ .../tiny_mce/plugins/advlist/editor_plugin.js,
+ .../tiny_mce/plugins/advlist/editor_plugin_src.js,
+ .../tiny_mce/plugins/autolink/editor_plugin.js,
+ .../tiny_mce/plugins/autolink/editor_plugin_src.js,
+ .../tiny_mce/plugins/autoresize/editor_plugin.js,
+ .../plugins/autoresize/editor_plugin_src.js,
+ .../tiny_mce/plugins/autosave/editor_plugin.js,
+ .../tiny_mce/plugins/autosave/editor_plugin_src.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin_src.js,
+ .../tiny_mce/plugins/contextmenu/editor_plugin.js,
+ .../plugins/contextmenu/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/emotions.htm,
+ .../tiny_mce/plugins/fullpage/css/fullpage.css,
+ .../tiny_mce/plugins/fullpage/editor_plugin.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/fullpage.htm,
+ .../tiny_mce/plugins/fullpage/js/fullpage.js,
+ .../tiny_mce/plugins/fullscreen/editor_plugin.js,
+ .../plugins/fullscreen/editor_plugin_src.js,
+ .../tiny_mce/plugins/inlinepopups/editor_plugin.js,
+ .../plugins/inlinepopups/editor_plugin_src.js,
+ .../inlinepopups/skins/clearlooks2/window.css,
+ .../tiny_mce/plugins/layer/editor_plugin.js,
+ .../tiny_mce/plugins/layer/editor_plugin_src.js,
+ .../tiny_mce/plugins/legacyoutput/editor_plugin.js,
+ .../plugins/legacyoutput/editor_plugin_src.js,
+ .../tiny_mce/plugins/lists/editor_plugin.js,
+ .../tiny_mce/plugins/lists/editor_plugin_src.js,
+ .../tiny_mce/plugins/media/css/content.css,
+ .../jscripts/tiny_mce/plugins/media/css/media.css,
+ .../tiny_mce/plugins/media/editor_plugin.js,
+ .../tiny_mce/plugins/media/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/img/flash.gif,
+ .../tiny_mce/plugins/media/img/flv_player.swf,
+ .../tiny_mce/plugins/media/img/quicktime.gif,
+ .../tiny_mce/plugins/media/img/realmedia.gif,
+ .../tiny_mce/plugins/media/img/shockwave.gif,
+ .../jscripts/tiny_mce/plugins/media/img/trans.gif,
+ .../tiny_mce/plugins/media/img/windowsmedia.gif,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/media/media.htm,
+ .../tiny_mce/plugins/media/moxieplayer.swf,
+ .../tiny_mce/plugins/nonbreaking/editor_plugin.js,
+ .../plugins/nonbreaking/editor_plugin_src.js,
+ .../tiny_mce/plugins/noneditable/editor_plugin.js,
+ .../plugins/noneditable/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/css/content.css,
+ .../tiny_mce/plugins/pagebreak/editor_plugin.js,
+ .../plugins/pagebreak/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/img/pagebreak.gif,
+ .../tiny_mce/plugins/pagebreak/img/trans.gif,
+ .../tiny_mce/plugins/paste/editor_plugin.js,
+ .../tiny_mce/plugins/paste/editor_plugin_src.js,
+ .../plugins/searchreplace/editor_plugin.js,
+ .../plugins/searchreplace/editor_plugin_src.js,
+ .../plugins/searchreplace/js/searchreplace.js,
+ .../plugins/searchreplace/searchreplace.htm,
+ .../tiny_mce/plugins/spellchecker/editor_plugin.js,
+ .../plugins/spellchecker/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/style/js/props.js,
+ .../tiny_mce/plugins/style/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/style/props.htm,
+ .../tiny_mce/plugins/tabfocus/editor_plugin.js,
+ .../tiny_mce/plugins/tabfocus/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/cell.htm,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/cell.js,
+ .../jscripts/tiny_mce/plugins/table/js/row.js,
+ .../jscripts/tiny_mce/plugins/table/js/table.js,
+ .../tiny_mce/plugins/table/langs/en_dlg.js,
+ .../tiny_mce/plugins/table/merge_cells.htm,
+ .../jscripts/tiny_mce/plugins/table/row.htm,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../tiny_mce/plugins/template/js/template.js,
+ .../tiny_mce/plugins/visualchars/editor_plugin.js,
+ .../plugins/visualchars/editor_plugin_src.js,
+ .../tiny_mce/plugins/wordcount/editor_plugin.js,
+ .../plugins/wordcount/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm,
+ .../tiny_mce/plugins/xhtmlxtras/acronym.htm,
+ .../tiny_mce/plugins/xhtmlxtras/attributes.htm,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/del.htm,
+ .../tiny_mce/plugins/xhtmlxtras/editor_plugin.js,
+ .../plugins/xhtmlxtras/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm,
+ .../tiny_mce/plugins/xhtmlxtras/js/attributes.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js,
+ .../plugins/xhtmlxtras/js/element_common.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js,
+ .../jscripts/tiny_mce/themes/advanced/about.htm,
+ .../jscripts/tiny_mce/themes/advanced/anchor.htm,
+ .../jscripts/tiny_mce/themes/advanced/charmap.htm,
+ .../tiny_mce/themes/advanced/color_picker.htm,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/advanced/image.htm,
+ .../tiny_mce/themes/advanced/img/flash.gif,
+ .../tiny_mce/themes/advanced/img/iframe.gif,
+ .../tiny_mce/themes/advanced/img/pagebreak.gif,
+ .../tiny_mce/themes/advanced/img/quicktime.gif,
+ .../tiny_mce/themes/advanced/img/realmedia.gif,
+ .../tiny_mce/themes/advanced/img/shockwave.gif,
+ .../tiny_mce/themes/advanced/img/trans.gif,
+ .../tiny_mce/themes/advanced/img/video.gif,
+ .../tiny_mce/themes/advanced/img/windowsmedia.gif,
+ .../jscripts/tiny_mce/themes/advanced/js/about.js,
+ .../jscripts/tiny_mce/themes/advanced/js/anchor.js,
+ .../tiny_mce/themes/advanced/js/charmap.js,
+ .../tiny_mce/themes/advanced/js/color_picker.js,
+ .../jscripts/tiny_mce/themes/advanced/js/image.js,
+ .../jscripts/tiny_mce/themes/advanced/js/link.js,
+ .../tiny_mce/themes/advanced/js/source_editor.js,
+ .../jscripts/tiny_mce/themes/advanced/langs/en.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/link.htm,
+ .../tiny_mce/themes/advanced/shortcuts.htm,
+ .../themes/advanced/skins/default/content.css,
+ .../tiny_mce/themes/advanced/skins/default/ui.css,
+ .../themes/advanced/skins/highcontrast/content.css,
+ .../themes/advanced/skins/highcontrast/dialog.css,
+ .../themes/advanced/skins/highcontrast/ui.css,
+ .../themes/advanced/skins/o2k7/content.css,
+ .../tiny_mce/themes/advanced/skins/o2k7/dialog.css,
+ .../tiny_mce/themes/advanced/skins/o2k7/ui.css,
+ .../themes/advanced/skins/o2k7/ui_black.css,
+ .../themes/advanced/skins/o2k7/ui_silver.css,
+ .../tiny_mce/themes/advanced/source_editor.htm,
+ .../tiny_mce/themes/simple/editor_template.js,
+ .../tiny_mce/themes/simple/editor_template_src.js,
+ .../vendor/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_popup.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_src.js,
+ .../tinymce/jscripts/tiny_mce/utils/form_utils.js,
+ .../tinymce/jscripts/tiny_mce/utils/mctabs.js,
+ .../tinymce/jscripts/tiny_mce/utils/validate.js: Refs #3510, #9113. Updated
+ tinyMCE version in trunk.
+
+ * engine/classes/ElggEntity.php: Refs #3510, #3433. Ported r9062 to trunk.
+ Fix for comment hook returning 0 comments.
+
+ * CHANGES.txt: Refs #3510: Merged r8938 to trunk. Removed exec props.
+
+ * README.txt: Merged README.txt version removal to trunk.
+
+2011-06-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php: Fixes #3520 fix check for subdirectory in
+ installer
+
+ * mod/embed/README.txt, mod/embed/start.php,
+ mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/js.php,
+ .../default/tinymce/embed_custom_insert_js.php: Refs #3360 #2911 applying
+ ashleyward's patch for embed plugin - thanks!
+
+ * vendors/jquery/jquery.form.js: Refs #3360 updating the jquery form plugin
+
+ * mod/blog/actions/blog/delete.php, mod/blog/lib/blog.php,
+ mod/blog/start.php, mod/blog/views/default/blog/group_module.php,
+ mod/bookmarks/actions/bookmarks/delete.php,
+ mod/bookmarks/pages/bookmarks/view.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/file/actions/file/delete.php, mod/file/actions/file/upload.php,
+ mod/file/pages/file/search.php, mod/file/pages/file/upload.php,
+ mod/file/pages/file/view.php, mod/file/start.php,
+ mod/file/views/default/file/group_module.php,
+ mod/messageboard/pages/messageboard/owner.php, mod/messageboard/start.php,
+ .../views/default/widgets/messageboard/content.php,
+ mod/pages/actions/pages/delete.php, mod/pages/pages/pages/history.php,
+ mod/pages/pages/pages/revision.php, mod/pages/pages/pages/view.php,
+ mod/pages/start.php, mod/pages/views/default/pages/group_module.php: Fixes
+ #3138 using 'all' for group listing urls
+
+ * mod/likes/actions/likes/add.php, mod/likes/actions/likes/delete.php,
+ mod/likes/views/default/likes/display.php: Fixes #3497 users can unlike other
+ users content
+
+2011-06-02 Russell McLoughlin <mcloughlin3@llnl.gov>
+
+ * mod/file/actions/file/upload.php: fixed embarrassing spelling mistake.
+
+2011-06-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/likes/start.php: Fixes #3499 using consistent menu name for likes
+ plugin
+
+2011-06-01 Russell McLoughlin <mcloughlin3@llnl.gov>
+
+ * mod/file/actions/file/upload.php, mod/file/download.php: Modified upload
+ script to guarentee that the directory under elgg data is created or exists.
+ Removed strange chunking code with builtin php function
+
+ * mod/file/actions/file/upload.php: Modified upload code so that it uses
+ php's built in file copy function rather than reading the entire uploaded
+ file into memory from the temporary upload directory and then saving it to
+ elgg's data dir.
+
+2011-06-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Fixes #3455 added documentation back to
+ deprecated functions
+
+2011-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginPackage.php, languages/en.php,
+ views/default/css/admin.php, views/default/object/plugin/advanced.php: Fixes
+ #3467. Fixed bugs in priority deps. Can now disable active plugins with unmet
+ dependencies.
+
+2011-05-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: Refs #3236 added some margin to the bottom of
+ the admin footer
+
+ * engine/lib/users.php, mod/dashboard/manifest.xml, mod/dashboard/start.php,
+ mod/dashboard/views/default/dashboard/blurb.php, pages/dashboard.php,
+ views/default/core/dashboard/blurb.php, views/default/css/elements/misc.php:
+ Refs #3340 pulls dashboard out as plugin
+
+ * views/default/annotation/generic_comment.php,
+ views/default/page/elements/comments_block.php: Fixes #3457 showing a snippet
+ of a comment in sidebar instead of entire comment
+
+ * views/default/input/access.php, views/default/input/tags.php,
+ views/default/output/tags.php: Fixes #3189 adds entity support to tags and
+ access views
+
+ * languages/en.php, mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/categories/manifest.xml, mod/diagnostics/manifest.xml,
+ mod/embed/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/logrotate/manifest.xml, mod/messageboard/manifest.xml,
+ mod/pages/manifest.xml, mod/tagcloud/manifest.xml, mod/tinymce/manifest.xml,
+ mod/twitter/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: Refs #2104 changed extension to enhancement and
+ added security, widget, and theme categories
+
+ * engine/lib/river.php: Fixes #3300 adds a created,river event
+
+2011-05-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: 'creating', 'river' is the plugin hook for
+ preventing or catching a river addition before it happens
+
+ * engine/lib/output.php: Fixes #3454 not stripping empty attributes
+
+ * engine/lib/admin.php, views/default/object/plugin/advanced.php: Fixes
+ #3163 plugin/<plugin id>/settings.php is now the preferred way to add
+ settings plugins
+
+ * engine/classes/ElggPlugin.php, engine/lib/elgglib.php, languages/en.php:
+ Fixes #3462 empty classes directory is no longer treated as an error
+
+2011-05-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js, views/default/output/confirmlink.php,
+ views/default/page/elements/header.php: Fixes #3385 rel now used for the
+ confirm text so that title can be used separately
+
+ * engine/lib/pagehandler.php: Fixes #3132 added 'route', $handler plugin
+ hook
+
+ * views/default/forms/register.php: Fixes #3419 removed code about admin
+ option from registration form
+
+ * mod/groups/start.php: Fixes #3464 group discussion replies work on
+ activity page
+
+2011-05-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/languages/en.php: Fixes #3453 added link to wiki about the data
+ directory
+
+ * install/css/install.css,
+ views/installation/install/pages/requirements.php: fixed display issue in
+ installation where navigation was overlapping requirements
+
+ * install/ElggInstaller.php: fixed issue introduced with the session changes
+ in the installer
+
+ * install/ElggInstaller.php: do not need to initialize globals in installer
+ because they are now declared that way in Elgg core libs
+
+ * install/ElggInstaller.php: fixed regenerating cache when installing Elgg -
+ wasn't picking up the plugins before
+
+ * views/installation/page/elements/footer.php: helpful links in installer
+ open up in new page now
+
+ * install/ElggInstaller.php: Refs #3453 added $CONFIG->data_dir_override so
+ that people can put the data directory in Elgg's root if they want to. Will
+ add instructions to the wiki on using this and protecting the directory
+
+ * install/ElggInstaller.php, install/ElggRewriteTester.php,
+ install/css/install.css, install/js/install.js, install/languages/en.php,
+ views/installation/forms/install/template.php,
+ views/installation/input/checkbox.php,
+ views/installation/input/checkboxes.php, views/installation/input/combo.php,
+ views/installation/input/form.php, views/installation/input/hidden.php,
+ views/installation/input/text.php: Refs #3453 an implementation of creating
+ the data directory. This capability is turned off due to security concerns.
+
+2011-05-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/installation/input/access.php, views/installation/input/button.php,
+ views/installation/input/checkboxes.php,
+ views/installation/input/dropdown.php, views/installation/input/form.php,
+ views/installation/input/hidden.php, views/installation/input/longtext.php,
+ views/installation/input/password.php, views/installation/input/reset.php,
+ views/installation/input/securitytoken.php,
+ views/installation/input/submit.php, views/installation/input/text.php: clean
+ up installation input views
+
+ * install/css/install.css: fixed the width of text boxes for the installer
+
+ * actions/logout.php: on logout send the user to the main page
+
+ * install/ElggInstaller.php: Fixes #3446 password is not required anymore
+ for installer
+
+ * install/js/install.js, views/installation/forms/install/template.php,
+ views/installation/page/default.php: fixed the double form submission code
+ for the installer
+
+ * engine/lib/users.php, views/default/user/default.php: Fixes #3456
+ user/default now works much like the object/<subtype> views regarding the
+ menu
+
+ * engine/lib/extender.php: not using deprecated get_annotation/get_metadata
+ functions in can_edit_extender()
+
+ * views/default/navigation/topbar_tools.php,
+ views/default/page/elements/topbar.php: only display deprecation message if
+ someone extends/overrides the deprecated tools view
+
+ * mod/developers/languages/en.php: defined
+ elgg_dev_tools:settings:explanation
+
+ * views/default/input/dropdown.php: fixes a php warning if no options are
+ passed to input/dropdown view
+
+ * engine/lib/users.php: removed a deprecated function use in users lib
+
+ * .../views/default/theme_preview/forms.php,
+ views/default/input/userpicker.php: fixed passing wrong parameters to
+ input/userpicker (which is not currently functional)
+
+ * mod/externalpages/start.php, mod/thewire/start.php, mod/twitter/start.php:
+ removed deprecated functions from these 3 plugins
+
+ * engine/lib/actions.php: improved documentation of elgg_register_action()
+
+ * mod/pages/start.php: fixed page revisions url override
+
+ * engine/lib/extender.php: improved documentation of
+ elgg_register_extender_url_handler()
+
+ * views/default/forms/admin/menu/save.php: fixed php warning when no custom
+ menu items
+
+ * languages/en.php: fixed typo in the admin welcome widget
+
+ * views/default/admin/plugins/advanced.php: sorting plugin categories before
+ display
+
+ * languages/en.php, mod/groups/manifest.xml, mod/likes/manifest.xml,
+ mod/oauth_api/manifest.xml, mod/twitter_api/manifest.xml,
+ mod/zaudio/manifest.xml: Refs #2104 more category work for bundled plugins
+
+ * engine/lib/database.php: made database query logging explicitly set to
+ NOTICE level
+
+2011-05-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/lib/blog.php: Fixes #3439 forcing months to have leading zero
+
+2011-05-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+2011-05-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/userpicker.js: Pulled in Jeff's patch to fix the user picker.
+
+ * engine/classes/ElggPluginPackage.php: Fixes 3426. Not using a horrible
+ variable name and fixing the bug created by it.
+
+2011-05-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Fixed wrapper for annotation calculations.
+
+2011-04-29 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/css/admin.php,
+ views/default/widgets/admin_welcome/content.php: Made admin welcome widget a
+ bit more semantic
+
+ * upgrade.php: comment typo
+
+ * engine/.htaccess: Bah, can't do that
+
+ * engine/.htaccess: Deny all HTTP access to the engine directory
+
+2011-04-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitter/views/default/twitter/css.php: hacking the 1.7 css for current
+ twitter widget so it looks decent for screenshots
+
+ * mod/embed/start.php: Refs #3358 fixed another instance where link_class
+ should be used now due to changes in menu code
+
+2011-04-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/security.js, js/lib/ui.js: Fixes #3408. During token refresh, only
+ touching hrefs that contain __elgg_ts and __elgg_token to avoid changing
+ selector-only hrefs since fragment-only hrefs are normalized by the browser.
+ Not sure how this didn't show up until now.
+
+2011-04-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/widgets/admin_welcome/content.php: Trying
+ to increase probability that people will read the welcome widget by making
+ the text shorter
+
+ * languages/en.php, views/default/css/admin.php,
+ views/default/forms/profile/fields/reset.php: Refs #3236 updated the button
+ css so that disable plugin button looks like a button
+
+ * mod/messages/manifest.xml: activate messages plugin on install
+
+ * views/default/css/admin.php, .../object/plugin/elements/dependencies.php:
+ Refs #3236 removed elgg-states-* from admin css since it was overaggressive
+
+ * views/default/css/admin.php: Refs #3236 cleaned up the widget css in admin
+ area
+
+2011-04-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/start.php: Refs #3358. Missed Tinymce's use of class for its
+ menu.
+
+ * views/default/css/admin.php: Fixes #3326. Added CSS for inputs in admin
+ area. No more tiny text fields!
+
+ * mod/messageboard/views/default/messageboard/js.php: Fixed a problem with
+ the ajax for deleting message board posts.
+
+ * engine/lib/actions.php: Removed unneeded else.
+
+ * engine/lib/actions.php: Fixes #3127. Normalizing the json returned by the
+ ajax action handler. Doing this in PHP.
+
+2011-04-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: Added very basic CSS for elgg-markdown in
+ admin area.
+
+ * engine/lib/admin.php: Fixed possible WSOD for plugin text file page
+ handler.
+
+ * mod/search/README.txt: Fixed typo in search's readme.
+
+ * vendors/markdown/UPSTREAM_WARNING, vendors/markdown/markdown.php: Updated
+ markdown to add support for === instead of just ### for headers. Added
+ upstream warning.
+
+ * mod/search/README.txt: Updated search's readme to markdown.
+
+ * mod/logrotate/languages/en.php, mod/logrotate/start.php,
+ .../views/default/settings/logrotate/edit.php: Fixes #3253. Merged in
+ Shashank's patch.
+
+ * engine/lib/plugins.php: Removed stray test code.
+
+ * engine/lib/plugins.php, views/default/admin/plugins/advanced.php: Refs
+ #3362. Removed use of $show_bad in elgg_get_plugins().
+
+ * actions/admin/plugins/activate.php,
+ actions/admin/plugins/activate_all.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/deactivate_all.php,
+ actions/admin/plugins/set_priority.php,
+ actions/admin/plugins/simple_update_states.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggPluginPackage.php,
+ engine/lib/admin.php, engine/lib/deprecated-1.8.php, engine/lib/plugins.php,
+ install/ElggInstaller.php, views/default/admin/plugin_settings.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/core/settings/tools.php,
+ .../forms/admin/plugins/simple_update_states.php,
+ views/default/object/plugin/advanced.php,
+ .../object/plugin/elements/dependencies.php,
+ views/default/object/plugin/simple.php: Refs #3362. Plugins don't check deps
+ upon boot. Made package and manifest private properties of ElggPlugin and
+ added ->getPackage() and ->getManifest().
+
+2011-04-26 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/icons.php: Fixes #3380: .elgg-icon-user states
+ are now consistent with other elgg-icons
+
+ * views/default/css/elements/core.php,
+ views/default/css/elements/navigation.php: Fixes #3388: .elgg-icon is now
+ middle-aligned by default
+
+ * views/default/page/components/gallery.php: Fixes #3290: Fluid gallery w/o
+ tables -- working great for fixed-width content
+
+ * views/default/css/elements/typography.php: Fixes #3389: Sandbox base
+ styles for dl, dt, dd
+
+ * engine/lib/input.php, views/default/input/autocomplete.php: Fixes #2922:
+ pg/livesearch now works with "term" parameter
+
+ * engine/lib/elgglib.php: Fixes some coding standard issues in elgglib.php
+
+2011-04-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/readme.txt: Removed inaccurate readme.txt file.
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginPackage.php,
+ engine/lib/admin.php, engine/lib/plugins.php, languages/en.php,
+ vendors/markdown/License.text, vendors/markdown/PHP Markdown Extra
+ Readme.text, vendors/markdown/markdown.php,
+ views/default/object/plugin/advanced.php,
+ views/default/object/plugin/simple.php: Fixes #2899, #2870. Added README.txt,
+ CHANGES.txt, COPYRIGHT.txt, LICENSE.txt, and INSTALL.txt as markdown files
+ for plugins. Added page handler to parse and serve them. Added links in
+ plugin admin. Refs #3236. Problems with displaying parsed markdown because of
+ missing parts of the admin theme's CSS.
+
+ * engine/classes/ElggPlugin.php: Renamed ElggPlugin->canIncludeFile() to
+ ->canReadFile() and am using is_readable() instead of file_exists().
+
+2011-04-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/forms.php: Fixes #2196. Pulled in Francisco's
+ patch for datepicker CSS.
+
+2011-04-23 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/page/theme_preview.php,
+ .../views/default/theme_preview/buttons.php,
+ .../views/default/theme_preview/components.php,
+ .../theme_preview/components/image_block.php,
+ .../default/theme_preview/components/list.php,
+ .../default/theme_preview/components/messages.php,
+ .../default/theme_preview/components/table.php,
+ .../views/default/theme_preview/forms.php,
+ .../views/default/theme_preview/general.php,
+ .../views/default/theme_preview/grid.php,
+ .../views/default/theme_preview/icons.php,
+ .../views/default/theme_preview/icons/avatars.php,
+ .../views/default/theme_preview/icons/loader.php,
+ .../views/default/theme_preview/icons/sprites.php,
+ .../views/default/theme_preview/modules.php,
+ .../default/theme_preview/modules/modules.php,
+ .../default/theme_preview/modules/widgets.php,
+ .../views/default/theme_preview/navigation.php,
+ .../theme_preview/navigation/breadcrumbs.php,
+ .../default/theme_preview/navigation/default.php,
+ .../default/theme_preview/navigation/extras.php,
+ .../default/theme_preview/navigation/filter.php,
+ .../theme_preview/navigation/horizontal.php,
+ .../theme_preview/navigation/owner_block.php,
+ .../default/theme_preview/navigation/page.php,
+ .../theme_preview/navigation/pagination.php,
+ .../default/theme_preview/navigation/site.php,
+ .../default/theme_preview/navigation/tabs.php,
+ .../views/default/theme_preview/objects.php,
+ .../views/default/theme_preview/typography.php,
+ .../default/theme_preview/typography/headings.php,
+ .../default/theme_preview/typography/misc.php,
+ .../default/theme_preview/typography/paragraph.php,
+ .../views/default/theme_preview/widgets.php: Fixes #3042: Theme preview navs
+ now match css/elements/*. Also did a major cleanup of the presentation.
+
+2011-04-22 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/forms/developers/settings.php: Fixes #3374: echo
+ developers settings explanation
+
+ * views/default/navigation/menu/elements/item.php: Fixes #3282: Added a
+ class to menu items which includes menu item name (just like ul contains a
+ class with the menu name)
+
+2011-04-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Fixed rewriting for internalid and internalname to
+ not cause false deprecation notices if passed among views.
+
+ * views/default/forms/profile/fields/add.php: Fixed deprecated call to
+ input/pulldown.
+
+ * engine/lib/elgglib.php: Added 3rd param to elgg_deprecated_notice() to
+ control how much of the stack to show.
+
+ * engine/lib/statistics.php: Fixes some deprecated notices in admin online
+ user widget.
+
+ * engine/lib/views.php: Fixed erroneous notices about full_view when passing
+ $vars directly to another view within a view.
+
+2011-04-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metastrings.php: Refs #3195.
+ Selectively joining certain tables for performance with annotation
+ calculations.
+
+ * engine/lib/annotations.php, engine/lib/metastrings.php: Reverting the
+ annotation changes because they're not ready yet.
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/lib/metastrings.php, engine/tests/api/metastrings.php: Fixed a problem
+ with the annotation batch operation test.
+
+ * engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_18/manifest.xml: Fixes #3310. Removed old
+ on_activate unit tests.
+
+2011-04-20 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/views/default/object/bookmarks.php: Fixes #3369: Bookmarks
+ now have rel=nofollow
+
+2011-04-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/groups/featured.php, mod/groups/languages/en.php,
+ mod/groups/start.php: Fixes #3364: Added action tokens and fixed guids for
+ featuring/unfeaturing groups. Cleaned up language for result messages.
+
+2011-04-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggMenuItem.php, engine/lib/navigation.php,
+ views/default/page/layouts/content/header.php: Fixes #3358. Renamed menu's
+ class to link_class and documented possible problems with passing <a> tags in
+ the text option.
+
+ * engine/lib/database.php, engine/lib/entities.php,
+ engine/lib/metastrings.php, engine/lib/river.php: Fixes #2046. Applied Franz'
+ patch for sanitize_int().
+
+ * engine/lib/cache.php: Fixes #3365. Pulled in blacktooth's patch.
+
+2011-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser18.php, languages/en.php,
+ mod/blog/manifest.xml, mod/blog/start.php, mod/categories/manifest.xml,
+ mod/categories/start.php: Fixes #3310. Applied lie2815's patch to use
+ activate.php and deactivate.php instead of manifest on_de/activate fields in
+ plugins.
+
+2011-04-16 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/metastrings.php, engine/tests/api/entity_getter_functions.php:
+ Removed debug calls.
+
+ * .gitignore, engine/classes/ElggFile.php, engine/lib/annotations.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/tests/api/entity_getter_functions.php, engine/tests/suite.php:
+ Denormalizing annotation names for calculation functions.
+
+2011-04-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Fixed problem with
+ list_entities_from_metadata() wrapper.
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php,
+ engine/lib/metastrings.php: Refs #3195. Changed the way annotation
+ calculations are performed. Seems to be working better, but will want to test
+ more before closing.
+
+ * engine/classes/ElggMenuItem.php: Refs #3023. Exposed item_class option in
+ the menu item factory. Should we change 'class' to 'link_class' to avoid
+ confusion?
+
+2011-04-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/tests/api/helpers.php: fixed filtering of
+ external files array and suppressed warning in external files unit test
+
+2011-04-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/core.php: Fixes #2972: Following elements have
+ default clearfix: elgg-inner elgg-page-header elgg-page-footer elgg-foot
+ elgg-head elgg-col elgg-image-block
+
+ * views/default/page/admin.php, views/default/page/default.php,
+ views/default/page/elements/foot.php, views/default/page/walled_garden.php:
+ Fixes #3329: Added page/elements/foot and refactored page shells to use it
+
+2011-04-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Fixes #3268 forwarding to referrer (fixed by
+ ashwanthkumar)
+
+ * engine/lib/metastrings.php: handles empty array in get_metastring_id()
+ (hellekin)
+
+ * engine/lib/sessions.php: preventing warnings with the user password
+ authorization pam (hellekin)
+
+ * engine/classes/ElggEntity.php: fixes warnings in ElggEntity::getMetadata()
+ (hellekin)
+
+ * engine/classes/ElggEntity.php: making sure ElggEntity::getAnnotations()
+ returns an array, check if temporary annotation exists before returning, and
+ added a warning about annotating unsaved entities
+
+ * engine/tests/services/api.php: suppressing warnings in web services unit
+ tests (hellekin)
+
+ * engine/classes/ElggPAM.php: checking that PAM handlers have been
+ registered for the policy being tested (hellekin)
+
+ * engine/classes/ElggUser.php: Checking that get_user_by_username() returned
+ something in ElggUser constructor to prevent notice (hellekin)
+
+2011-04-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/cache_handler.php, engine/lib/cache.php,
+ engine/lib/elgglib.php: Fixes #3331. Changed cache schema to allow for JS/CSS
+ views with slashes and dots.
+
+ * engine/lib/elgglib.php: Consolidated the css and js pagehandlers with
+ elgg_cachable_view_pagehandler() and fixed for URLs with multiple dots after
+ the last / (like /js/calendars/fullcalendar.min.123456789.js)
+
+2011-04-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixes #3347 fixes comment typo for ege
+
+2011-04-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/initialize_elgg.php: Fixing JS problems when simple cache
+ is disabled.
+
+2011-04-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/output.php: Fixes #3327 fixed typo
+
+ * views/default/css/elgg.php: Fixes #3333 removed include of chrome css
+
+ * views/default/css/admin.php: Fixes #3325 added cursor: pointer to system
+ messages in admin area
+
+ * mod/file/start.php: Fixes #3322 file link removed from owner_block if
+ disabled for a group
+
+2011-04-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php, views/default/page/elements/head.php: Fixed #3313:
+ Removed the superfluous html_head/extend view from core. Anyone following
+ trunk should extend page/elements/head instead
+
+ * js/lib/languages.js: Fixes #3182: No attempt to go through simplecache at
+ all, but any language can be exported to js now without any extra effort on
+ the part of language pack authors
+
+ * js/lib/elgglib.js, js/lib/languages.js, views/default/js/elgg.php,
+ views/default/js/initialize_elgg.php: Refs #3182: Feeding language loading
+ through /ajax/view to keep thing simpler for now. Reorganized boot process
+ so that we can ajax load the languages asap
+
+ * views/default/css/elements/buttons.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/core.php, views/default/css/elements/grid.php,
+ views/default/css/elements/helpers.php, views/default/css/elements/icons.php,
+ views/default/css/elements/layout.php,
+ views/default/css/elements/navigation.php, views/default/css/elgg.php: Refs
+ #3281: css/elements/core.php for the cross-browser/hacky/non-trivial things
+ that themes should rarely, if ever, override.
+
+2011-04-09 Brett Profitt <brett.profitt@gmail.com>
+
+ * engine/lib/annotations.php, engine/lib/metastrings.php: Running
+ egef_annotation_calculation() through elgg_get_annotations() instead of
+ elgg_get_entities().
+
+2011-04-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * ....8_svn-admins_like_widgets-7f19d2783c1680d3.php: Reopens #3224 not as
+ clever as I thought - user experiences error before seeing reminder
+
+ * mod/bookmarks/languages/en.php, mod/bookmarks/start.php: registered
+ bookmarks widget
+
+ * views/default/css/admin.php: fixed delete icon in admin css
+
+ * actions/widgets/upgrade.php,
+ ...svn-update_default_widgets-7daf5a459720d06d.php, engine/lib/widgets.php,
+ languages/en.php, views/default/admin/appearance/default_widgets.php: Fixes
+ #3193 moves default widgets upgrade to an action
+
+ * engine/lib/upgrades/2011010101.php,
+ ....8_svn-admins_like_widgets-7f19d2783c1680d3.php: Fixes #3224 Fixes #3241
+ stopping upgrade after plugin upgrade and restarting
+
+2011-04-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/entity_getter_functions.php: Fixes #2600. Applied
+ Hellekin's patch. Props to him for understanding what was going on because
+ whoa.
+
+ * mod/twitter_api/lib/twitter_api.php: Removing odd ? after docblock in
+ twitter_api.
+
+2011-04-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrade.php: Refs #3241 sorting upgrades so that upgrades from
+ old upgrade system are ordered in datalist array
+
+ * ..._svn-goodbye_walled_garden-083121a656d06894.php: Refs #3241 deleting
+ old config value in registration upgrade
+
+ * engine/lib/upgrade.php, engine/lib/upgrades/2010050701.php,
+ ..._svn-goodbye_walled_garden-083121a656d06894.php: Refs #3241 cleaned up
+ upgrade sequence so that we don't need special catch for that one upgrade
+ created during 1.7 development. It doesn't hurt running it twice so sites
+ currently using svn trunk will not be negatively affected.
+
+ * engine/lib/upgrades/2010123101.php, engine/lib/upgrades/2011010401.php:
+ Refs #3241 moved the default site access check upgrade script to before the
+ plugin upgrade so plugin upgrade is last upgrade in old upgrade system. The
+ site access script can be run multiple times without causing problems.
+
+ * engine/lib/deprecated-1.8.php, engine/lib/upgrade.php,
+ engine/lib/version.php, engine/start.php, install/ElggInstaller.php: Refs
+ #3241 upgrade.php is a much better name for the upgrade library
+
+ * engine/lib/upgrades/2008100701.php, engine/lib/upgrades/2009022701.php,
+ engine/lib/upgrades/2009041701.php, engine/lib/upgrades/2009070101.php,
+ engine/lib/upgrades/2009102801.php, engine/lib/upgrades/2010033101.php,
+ engine/lib/upgrades/2010040201.php, engine/lib/upgrades/2010061501.php: Refs
+ #3241 cleaned up comments on upgrades and removed the turning off of time
+ limit in individual upgrades since this is now handled by the upgrade
+ function
+
+ * ...11031400-1.8_svn-oauth_api-8f33ee79c3e66222.php: Refs #3241 we never
+ distributed an oauth_lib plugin so we don't need an upgrade (those following
+ svn trunk have already upgraded or can manually update this)
+
+ * engine/lib/upgrades/2010100500.php: Refs #3241 we never distributed a
+ plugin called oauth and Justin Richer has so let's not disable his plugin
+
+ * ....8_svn-admins_like_widgets-7f19d2783c1680d3.php: added a comment to
+ explain why the call to elgg_add_admin_widgets() in the upgrade script has
+ parameters like it does
+
+2011-04-09 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/chrome.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/helpers.php,
+ views/default/css/elements/typography.php, views/default/css/elgg.php: Refs
+ #3286: Removed css/elements/chrome.php, putting all the style rules into
+ sensible locations
+
+2011-04-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/sidebar_alt.php,
+ views/default/page/layouts/two_sidebar.php: Fixes #3319 alternate sidebar
+ should work now
+
+ * _graphics/admin_sprites.png, views/default/css/admin.php: Refs #3108
+ forgot the user hover menu for the admin area
+
+ * engine/lib/upgrades/2010121401.php: Fixes #3320 no longer require the
+ upgrade to disable the members plugin
+
+2011-04-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php: Fixes #3232 removed unnecessary distinct plus
+ variable in select for metastrings calculation
+
+2011-04-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Refs #3278. No more likes in login popup handler.
+
+2011-04-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/admin_sprites.png, .../admin/appearance/profile_fields/list.php,
+ views/default/css/admin.php: Fixes #3108 added admin sprites (enough for beta
+ release)
+
+2011-04-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Fixes #3278 Login popup aligned to right side of button.
+
+2011-04-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/SPRITES_LICENSE.TXT, _graphics/elgg_sprites.png,
+ mod/messages/views/default/messages/css.php,
+ mod/search/views/default/search/css.php,
+ views/default/css/elements/icons.php: Refs #3108 added more sprites and a
+ license file - no visible changes
+
+2011-04-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_sprites.png, engine/lib/views.php, mod/bookmarks/start.php,
+ mod/bookmarks/views/default/object/bookmarks.php, mod/messages/start.php,
+ views/default/css/elements/helpers.php, views/default/css/elements/icons.php,
+ views/default/river/relationship/friend/create.php: Refs #3108 frontend
+ should be done and ready for review - admin area is next
+
+ * engine/lib/deprecated-1.7.php, engine/lib/objects.php,
+ engine/lib/users.php: moved two more deprecated functions out of the main
+ libs
+
+2011-04-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/buttons.php: Fixes
+ #3289 added inline-block to buttons
+
+ * mod/groups/languages/en.php, mod/groups/start.php,
+ .../river/object/groupforumtopic/create.php,
+ views/default/css/elements/components.php,
+ views/default/river/elements/footer.php: Fixes #3275 forms in a river item
+ are not forced to be hidden
+
+2011-04-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/favicon.ico, mod/reportedcontent/graphics/icon_reportthis.gif:
+ Refs #3307 removed executable prop from core files
+
+ * engine/lib/navigation.php, languages/en.php, mod/likes/start.php,
+ views/default/css/elements/navigation.php,
+ views/default/river/elements/body.php,
+ views/default/river/elements/controls.php, views/default/river/item.php: Refs
+ #3073 first version of horizontal river menu. css still needs work for likes
+ and the comment text bubble needs to be darkened
+
+ * mod/externalpages/start.php, mod/reportedcontent/start.php,
+ views/default/css/elements/navigation.php: Fixes #3305 switched default and
+ alt sections for footer menu
+
+ * _graphics/elgg_sprites.png, engine/lib/users.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/css/elements/chrome.php, views/default/css/elements/icons.php,
+ views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php,
+ views/default/object/widget/elements/controls.php: Refs #3108 fixed widgets
+ for main site (not admin) and tweaked topbar
+
+2011-04-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/pages/file/world.php: removed unnecessary context setting
+
+ * .../views/default/groups/group_sort_menu.php: Fixes #3105 group sort menu
+ uses filter menu
+
+ * engine/lib/navigation.php, languages/en.php: better title attributes for
+ entity menu edit/delete links
+
+ * views/default/output/confirmlink.php: output/confirmlink now supports
+ title attribute
+
+ * views/default/output/access.php: cleaned up css for output/access
+
+ * mod/blog/start.php: Refs #3184 added span so that blog post status would
+ be vertically aligned
+
+ * _graphics/elgg_sprites.png, engine/lib/users.php,
+ views/default/css/elements/icons.php,
+ views/default/css/elements/navigation.php: Refs #3108 partial implementation
+ of new sprites (widgets, hover menu, search are all broken)
+
+ * mod/likes/languages/en.php, mod/likes/views/default/likes/display.php:
+ cleans up likes display which was causing issues in entity menu - less markup
+
+
+ * views/default/css/elements/navigation.php: Refs #3184 needed to set height
+ for the icons
+
+ * views/default/css/elements/navigation.php: Fixes #3184 fixed alignment
+ issues for entity menu
+
+ * views/default/css/elements/navigation.php: added spaces to standardize the
+ css statements
+
+2011-04-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/pages/search/index.php,
+ mod/search/views/default/search/search_box.php: Refs #3179 pulled fix for
+ search query encoding into trunk from 1.7 branch
+
+ * engine/lib/elgglib.php: Refs #3149 reimplemented fix for calling a handler
+ more than once in trunk
+
+ * .../views/default/uservalidationbyemail/js.php: Refs #3001 made comment
+ change in trunk from 1.7 fix
+
+ * mod/search/search_hooks.php: Refs #2994 added group search fix from 1.7
+ branch to trunk
+
+ * engine/classes/ElggRelationship.php: Refs #2988 corrected typo in trunk
+
+ * mod/invitefriends/start.php: Refs #2968 invite friends link should not be
+ available for non-logged in users
+
+ * engine/lib/extender.php: Refs #2878 fixes detect_extender_valuetype() in
+ trunk
+
+ * documentation/examples/crontab.example: updated crontab example
+ documentation
+
+ * engine/lib/entities.php: Refs #3277 merged fix for recursive delete and
+ disabled entities into trunk
+
+ * mod/groups/start.php, mod/groups/views/default/groups/side_menu.php: Fixes
+ #3104 updated groups plugin to use new menu system for sidebar
+
+ * mod/groups/lib/groups.php,
+ mod/groups/views/default/groups/profile/layout.php: moved group profile
+ layout out of page handler so that plugins can override it
+
+ * engine/classes/ElggEntity.php, engine/lib/entities.php,
+ mod/blog/actions/blog/save.php: Fixes #3208 setting time_created on update
+
+ * actions/admin/plugins/activate.php: Refs #3229 at least we can forward so
+ that user sees error message immediately
+
+ * actions/register.php, views/default/forms/register.php: Refs #3233
+ registration form should be sticky too
+
+ * actions/useradd.php, views/default/forms/useradd.php: Fixes #3233 useradd
+ form is now sticky
+
+ * engine/classes/ElggPluginManifest.php: Fixes #3244 fixed variable name in
+ ElggPluginManifest
+
+ * .../views/default/theme_preview/widgets.php: fixed typo in theme preview -
+ widgets
+
+2011-04-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/hooks.js: Returning false in JS hooks is now sent through to the
+ calling trigger. Null still returns the original value.
+
+ * js/lib/elgglib.js, js/lib/ui.js: Refs #3098. Changed elgg.getUrlFragment
+ to elgg.getSelectorFromUrlFragment to allow for better selectors.
+
+2011-04-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, languages/en.php, mod/members/languages/en.php,
+ mod/members/manifest.xml, mod/members/pages/members/index.php,
+ mod/members/pages/members/search.php, mod/members/start.php,
+ mod/members/views/default/members/nav.php,
+ mod/members/views/default/members/sidebar.php, pages/members/index.php,
+ pages/members/search.php, views/default/core/members/nav.php,
+ views/default/core/members/sidebar.php: Fixes #3231 welcome back, members
+ plugin
+
+ * engine/classes/ElggMenuItem.php: Refs #3287 setting null for menu href
+ means you want an empty <a></a> tag with no href
+
+ * engine/classes/ElggMenuItem.php, engine/lib/navigation.php: Fixes #3287
+ added documentation on non-link menu items
+
+ * engine/lib/metastrings.php: Refs #3245 pulling in
+ https://github.com/Elgg/Elgg/pull/11 and thanks also to gprasanth
+
+ * views/default/user/default.php: fixed hardcoded string in user/default
+ view
+
+ * mod/thewire/views/default/object/thewire.php: Refs #3200 any time a wire
+ post is displayed, we may need the 'previous' javascript
+
+ * mod/thewire/languages/en.php: added notification messages to the wire
+
+ * mod/bookmarks/start.php: Fixes #3044 removed bookmark link from user hover
+ menu
+
+ * engine/lib/users.php, views/default/forms/user/passwordreset.php: Fixes
+ #3207 passing code variable to form for password reset
+
+2011-03-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Refs #2940 added php settings comments into trunk
+
+2011-03-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Fixed ajax status for elgg.action().
+
+2011-03-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/js/thewire.js, mod/thewire/languages/en.php,
+ mod/thewire/start.php, mod/thewire/views/default/js/thewire.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/previous.php: Fixes #3200 ajax-based view
+ previous link works for the wire
+
+ * mod/thewire/pages/thewire/previous.php: Refs #3200 pulling in
+ e1d75071737b2ed35cf9 from anirupdutta's pull request
+
+2011-03-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, js/lib/ajax.js: Fixed auto-display of system
+ errors in ajax actions. Fixed docs for system_messages(). Blech...that needs
+ cleaned up.
+
+2011-03-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/user_settings.php, mod/notifications/groups.php,
+ mod/notifications/index.php, .../forms/notificationsettings/groupsave.php,
+ .../notifications/subscriptions/forminternals.php: Fixes #3266 let the
+ settings pages have breadcrumbs
+
+ * views/default/page/layouts/content.php,
+ views/default/page/layouts/one_sidebar.php: one_sidebar layout wants
+ breadcrumbs, too!
+
+ * views/default/css/elements/chrome.php: fixed some typos in css chrome
+
+2011-03-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Fixes #3234: Adding explicit collision param for popups.
+
+2011-03-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/lib/groups.php,
+ mod/groups/start.php, mod/groups/views/default/groups/sidebar/find.php: Fixes
+ #3243 pulled in anirupdutta's patch with some modifications (moved tag search
+ to its own page handler function)
+
+2011-03-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/css.php: made search box span sidebar in
+ default theme
+
+2011-03-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php: Fixing css/elgg instead of css/screen.
+
+2011-03-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, languages/en.php: Fixes #2591 removing newlines
+ in queries - thanks to Tachyon
+
+ * engine/lib/views.php: Refs #3085 updated elgg_view_annotation() to use
+ $vars array
+
+ * engine/lib/views.php: Refs #3085 added $vars array to
+ elgg_view_river_item()
+
+ * engine/lib/users.php, engine/lib/views.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/object/file.php, mod/groups/lib/groups.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ .../views/default/annotation/messageboard.php,
+ mod/messages/views/default/object/messages.php,
+ mod/pages/pages/pages/revision.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/annotation/generic_comment.php,
+ views/default/object/plugin.php, views/default/page/components/gallery.php,
+ views/default/page/components/list.php, views/json/entities/entity_list.php:
+ Fixes #3086 using full_view instead of full
+
+ * engine/lib/views.php: Refs #3086 adds backward compatibility code in
+ elgg_view() for full_view vs full
+
+ * mod/blog/views/default/blog/sidebar.php: Fixes #2969 turned off group blog
+ archives
+
+2011-03-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/configuration.php,
+ mod/diagnostics/start.php, mod/profile/start.php: Fixes #3250
+ elgg_get_root_path() to be consistent
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ engine/lib/actions.php: Fixes #3249 fixed name of actions exists function
+
+ * mod/messages/languages/en.php,
+ .../views/default/forms/messages/process.php,
+ mod/messages/views/default/messages/css.php: forcing a min-height on inbox
+ list in messages plugin
+
+ * views/default/css/admin.php, views/default/css/elements/layout.php: Fixes
+ #3084 added clearfix to elgg-layout
+
+ * views/default/css/elements/chrome.php: Fixes #3183 limiting size of user
+ inserted images in content
+
+ * mod/externalpages/languages/en.php, mod/externalpages/start.php,
+ .../views/default/admin/appearance/expages.php,
+ .../views/default/admin/site/expages.php,
+ mod/externalpages/views/default/expages/menu.php: Fixes #3106 putting
+ external pages under appearance - no better place
+
+ * engine/classes/ElggMenuBuilder.php, engine/lib/navigation.php,
+ engine/lib/views.php: Fixes #3026 documentation for menu system
+
+ * engine/lib/admin.php: Fixes #2233 added documentation on admin menus and
+ pages
+
+ * engine/lib/deprecated-1.8.php: Refs #3248 deprecates remove_submenu_item()
+
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggMetadata.php,
+ engine/lib/annotations.php: Refs #3238 #3246 anootations needed the same
+ fixes as metadata
+
+ * engine/lib/metadata.php: Refs #3238 fix for updating name of metadata for
+ trunk
+
+ * engine/classes/ElggMetadata.php: Fixes #3246 fixed ElggMetadata()
+ constructor
+
+ * engine/lib/pageowner.php: fixed notice in get_context() when no context is
+ set
+
+ * engine/lib/output.php, engine/lib/users.php, engine/lib/views.php,
+ engine/lib/widgets.php: some light standardization of the core libraries
+
+2011-03-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Fixes #3234, refs #3094. Added the inTarget code back to the
+ popup closing function.
+
+2011-03-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php, mod/thewire/actions/delete.php,
+ mod/thewire/classes/ElggWire.php, mod/thewire/languages/en.php,
+ mod/thewire/pages/thewire/everyone.php,
+ mod/thewire/pages/thewire/friends.php, mod/thewire/pages/thewire/owner.php,
+ mod/thewire/pages/thewire/reply.php, mod/thewire/pages/thewire/thread.php,
+ mod/thewire/start.php, mod/thewire/tests/regex.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/thewire/profile_status.php,
+ mod/thewire/views/rss/object/thewire.php: standardized thewire plugin
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/tests/api/annotations.php, engine/tests/api/metadata.php,
+ engine/tests/objects/metadata.php: Closes #3202 'count' already supported,
+ added unit tests
+
+ * mod/bookmarks/lib/bookmarks.php,
+ .../views/default/forms/bookmarks/save.php, mod/file/lib/file.php,
+ mod/groups/lib/discussion.php, mod/pages/lib/pages.php: Fixes #3239 entities
+ aren't blown away in form prepare functions any more
+
+ * mod/pages/languages/en.php: fixed language strings in pages plugin
+
+ * mod/file/actions/file/upload.php: don't allow a user to remove a title on
+ a file, must replace with another title
+
+ * engine/lib/input.php, mod/blog/lib/blog.php: Refs #3239 added a new sticky
+ forms function to grab all variables and integrated into blog plugin
+
+2011-03-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/reset.php: Refs
+ #2979 forces vertical scrollbar without breaking widget dragging
+
+ * engine/lib/navigation.php: Refs #3119 if only one item left, move it off
+ more menu (but only when nothing selected)
+
+ * actions/admin/menu/save.php, views/default/forms/admin/menu/save.php:
+ Fixes #3206 using space so that echo('none') is not passed as value
+
+ * views/default/css/admin.php: Refs #3236 removed some unused css from admin
+ theme and did some reorganizing
+
+2011-03-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/languages/en.php: added missing language string for comments on
+ file in river
+
+ * engine/lib/views.php: Fixes #3166 registering css/elgg for simplecache
+
+2011-03-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Refs #3193 rollback version number
+
+ * upgrade.php: display_errors is on for upgrades
+
+ * ...svn-update_default_widgets-7daf5a459720d06d.php, version.php: Fixes
+ #3193 converts the default widgets for 1.8 - leaves behind the default
+ widgets object
+
+ * engine/lib/admin.php, views/default/css/admin.php: Refs #3165 floating
+ admin widgets in same direction as profile widgets
+
+ * ....8_svn-admins_like_widgets-7f19d2783c1680d3.php, version.php: Fixes
+ #3165 admins get widgets on upgrade - new upgrade creation process super
+ smooth #thanksBrett
+
+ * engine/lib/admin.php, engine/lib/users.php, install/ElggInstaller.php:
+ Refs #3165 new admin users all get admin widgets
+
+ * engine/classes/ElggFile.php: Fixes #3160 just needed a small variation off
+ of [8762] to handle getting filestore before metadata is set but after the
+ guid is set
+
+ * engine/classes/ElggFile.php: Fixes #3205 reverting [8762]
+
+ * engine/lib/elgglib.php: Fixes #3180 adds ajax page handler
+
+ * mod/bookmarks/start.php, mod/thewire/start.php: added an owner block link
+ for the wire plugin
+
+ * languages/en.php, mod/blog/languages/en.php, mod/blog/lib/blog.php,
+ mod/bookmarks/pages/bookmarks/all.php, mod/bookmarks/start.php,
+ mod/file/pages/file/owner.php, mod/groups/languages/en.php,
+ mod/pages/languages/en.php, views/default/page/layouts/content/header.php:
+ Fixes #3218 group content pages now use container method to determine who can
+ add content
+
+2011-03-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/pages/views/default/forms/pages/edit.php: fixed position of longtext
+ menu when editing pages
+
+ * mod/bookmarks/languages/en.php: better names for a bookmark - got rid of
+ 'bookmark item'
+
+ * mod/bookmarks/views/default/bookmarks/sidebar.php,
+ mod/file/views/default/file/sidebar.php,
+ mod/pages/views/default/pages/sidebar.php,
+ mod/thewire/pages/thewire/everyone.php, mod/thewire/pages/thewire/owner.php,
+ mod/thewire/views/default/thewire/sidebar.php: Fixes #2091 completes sidebar
+ tagcloud for major content plugins
+
+ * engine/lib/tags.php, mod/blog/views/default/blog/sidebar.php,
+ mod/blog/views/default/blog/sidebar/tagcloud.php,
+ views/default/output/tagcloud.php,
+ views/default/page/elements/tagcloud_block.php: Refs #2091 added a tagcloud
+ block that accepts subtype
+
+ * views/default/page/elements/comments_block.php: Fixes #2090 context
+ sensitive sidebar box is added - groups off
+
+ * mod/bookmarks/views/default/bookmarks/js.php,
+ mod/groups/views/default/groups/js.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ mod/messages/views/default/messages/js.php,
+ .../views/default/uservalidationbyemail/js.php: Refs #3016 making the final
+ elgg.js more readable
+
+ * .../views/default/uservalidationbyemail/js.php: another example of an
+ extra ; in js due to lazy copy/paste jobs
+
+ * mod/file/pages/file/owner.php, mod/file/pages/file/world.php,
+ mod/file/views/default/file/sidebar.php, mod/pages/pages/pages/owner.php,
+ mod/pages/pages/pages/world.php, mod/pages/views/default/pages/sidebar.php,
+ views/default/page/elements/comments_block.php: Refs #2090 added sidebar
+ comment block to file and pages plugins
+
+ * mod/file/start.php, mod/pages/start.php: Refs #3176 missed group owner
+ page in script renaming
+
+2011-03-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, vendors/jquery/fancybox/blank.gif,
+ vendors/jquery/fancybox/fancy_close.png,
+ vendors/jquery/fancybox/fancy_loading.png,
+ vendors/jquery/fancybox/fancy_nav_left.png,
+ vendors/jquery/fancybox/fancy_nav_right.png,
+ vendors/jquery/fancybox/fancy_shadow_e.png,
+ vendors/jquery/fancybox/fancy_shadow_n.png,
+ vendors/jquery/fancybox/fancy_shadow_ne.png,
+ vendors/jquery/fancybox/fancy_shadow_nw.png,
+ vendors/jquery/fancybox/fancy_shadow_s.png,
+ vendors/jquery/fancybox/fancy_shadow_se.png,
+ vendors/jquery/fancybox/fancy_shadow_sw.png,
+ vendors/jquery/fancybox/fancy_shadow_w.png,
+ vendors/jquery/fancybox/fancy_title_left.png,
+ vendors/jquery/fancybox/fancy_title_main.png,
+ vendors/jquery/fancybox/fancy_title_over.png,
+ vendors/jquery/fancybox/fancy_title_right.png,
+ vendors/jquery/fancybox/fancybox-x.png,
+ vendors/jquery/fancybox/fancybox-y.png, vendors/jquery/fancybox/fancybox.png,
+ vendors/jquery/fancybox/jquery.easing-1.3.pack.js,
+ vendors/jquery/fancybox/jquery.fancybox-1.3.4.css,
+ vendors/jquery/fancybox/jquery.fancybox-1.3.4.js,
+ .../jquery/fancybox/jquery.fancybox-1.3.4.pack.js,
+ .../fancybox/jquery.mousewheel-3.0.4.pack.js, views/default/js/lightbox.php:
+ Refs #2882 basic lightbox
+
+2011-03-21 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: No need to document NULL as possible return value
+ here
+
+ * engine/classes/ElggEntity.php: oof -- how did that happen?
+
+ * engine/classes/ElggEntity.php: Added documentation of magic properties to
+ ElggEntity
+
+2011-03-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/views/default/logbrowser/table.php: using - in log browser
+ css class names
+
+ * mod/bookmarks/languages/en.php: added missing language string
+
+ * mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/owner.php,
+ mod/bookmarks/views/default/bookmarks/sidebar.php: Refs #2090 added latest
+ comments to bookmarks sidebar
+
+ * engine/lib/views.php, languages/en.php,
+ mod/blog/views/default/blog/sidebar.php,
+ views/default/page/elements/comments.php,
+ views/default/page/elements/comments_block.php: Refs #2090 removed
+ elgg_view_latest_comments() and replaced it with a page elements view
+
+ * mod/groups/lib/groups.php,
+ mod/groups/views/default/groups/profile/fields.php,
+ .../views/default/groups/profile/profile_block.php,
+ .../views/default/groups/profile/summary.php: Fixes #3113 pulled group
+ profile fields out of top profile area
+
+ * views/default/admin/appearance/profile_fields.php: Fixes #3099 corrected
+ view name
+
+ * mod/logbrowser/views/default/logbrowser/form.php: Fixes #3082 fixed
+ toggler in log browser
+
+ * views/default/navigation/menu/user_hover.php: Fixes #3203 not calling the
+ view menu section code once per item
+
+ * views/default/page/layouts/widgets.php: Fixes #3168 not displaying a
+ widget when handler is not available
+
+2011-03-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggObject.php, mod/blog/lib/blog.php,
+ mod/groups/actions/discussion/reply/save.php,
+ mod/groups/actions/discussion/save.php, mod/groups/languages/en.php,
+ mod/groups/lib/discussion.php, mod/groups/start.php,
+ .../river/object/groupforumtopic/create.php: Fixes #2974 using
+ canWriteToContainer() to control access to creating group content
+
+ * install/ElggInstaller.php: Fixes #3101 removed language setting from
+ installer until we provide language files besides English
+
+ * .../forms/admin/plugins/simple_update_states.php: Fixes #3102 removed
+ plugin reset button
+
+ * views/default/forms/admin/site/update_advanced.php: Fixes #3100 removed
+ viewtype from advanced settings
+
+ * install/ElggInstaller.php, install/languages/en.php: Fixes #3062 checks if
+ data directory exists
+
+2011-03-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Fixes #3094. Removed event blocking code for popups.
+
+ * ..._svn-widgets_arent_plugins-61836261fa280a5c.php, version.php: Fixes
+ #3161. Added upgrade to update object, widget to ElggWidget.
+
+2011-03-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, mod/twitter/start.php: Refs #3171 Using correct
+ widget registration method
+
+2011-03-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/version.php: Fixes #3188. We no longer store the version as the
+ key, so a standard sort will do.
+
+2011-03-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, pages/river.php, views/rss/core/river/body.php,
+ views/rss/river/item.php, views/rss/river/item/list.php: Fixes #3197 fixed
+ the RSS feed for activity (river)
+
+ * views/rss/layout/objects/image_block.php,
+ views/rss/layout/objects/list.php, views/rss/layout/shells/default.php,
+ views/rss/page/components/image_block.php,
+ views/rss/page/components/list.php, views/rss/page/layouts/default.php: Refs
+ #3197 fixed layout views for RSS viewtype
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/sites.php,
+ engine/lib/users.php, engine/lib/views.php,
+ views/default/page/elements/sidebar.php: Fixes #3114 added the rss link back
+ to pages
+
+ * engine/lib/admin.php: Refs #2892 added elgg_get_admins() function - this
+ could eventually be a wrapper around elgg_get_users()
+
+ * mod/thewire/start.php: Fixes #3025 added back thewire's entity menu items
+
+ * engine/lib/elgglib.php: Fixes #3198 handling exceptions thrown in
+ exception handler by pointing to the error log
+
+2011-03-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php: Fixes #3192, refs #650.
+ ElggEntity->getMetaData() sets the limit to 0 for array-based metadata.
+
+ * engine/lib/deprecated-1.8.php: Fixes #3190. Added elgg_count_comments() to
+ deprecated-1.8.php.
+
+ * upgrade.php: Fixes #3064. Can't use the pretty new views to display the
+ can't upgrade messages. Using the failsafe view type.
+
+2011-03-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * ...031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php: Refs #3188 removed
+ empty call for guid
+
+ * languages/en.php: Fixes #3162
+
+2011-03-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/widgets/friends/content.php,
+ views/default/widgets/new_users/content.php,
+ views/default/widgets/online_users/content.php: added documentation headers
+ to the core widgets
+
+ * engine/lib/river.php, languages/en.php,
+ views/default/widgets/river_widget/content.php,
+ views/default/widgets/river_widget/edit.php: Fixes #3171 added river widget
+ using same name as 1.7 riverdashboard plugin
+
+ * actions/friends/add.php: Fixes #3167 friending now shows up in river
+
+ * mod/twitter/manifest.xml: added "widget" to this plugin's name to
+ descrease confusion with the api plugin
+
+ * languages/en.php, mod/profile/views/default/profile/owner_block.php: Fixes
+ #3173 quote was missing from conversion to new toggler pattern
+
+ * mod/file/pages/file/index.php, mod/file/pages/file/owner.php,
+ mod/file/start.php, mod/pages/pages/pages/index.php,
+ mod/pages/pages/pages/owner.php, mod/pages/start.php,
+ mod/thewire/pages/thewire/owner.php, mod/thewire/pages/thewire/user.php,
+ mod/thewire/start.php: Fixes #3176 replaced usage of index.php where
+ appropriate
+
+ * mod/pages/edit.php, mod/pages/friends.php, mod/pages/history.php,
+ mod/pages/index.php, mod/pages/new.php, mod/pages/pages/pages/edit.php,
+ mod/pages/pages/pages/friends.php, mod/pages/pages/pages/history.php,
+ mod/pages/pages/pages/index.php, mod/pages/pages/pages/new.php,
+ mod/pages/pages/pages/revision.php, mod/pages/pages/pages/view.php,
+ mod/pages/pages/pages/world.php, mod/pages/revision.php, mod/pages/start.php,
+ mod/pages/view.php, mod/pages/world.php, mod/search/index.php,
+ mod/search/pages/search/index.php, mod/search/start.php: Fixes #3158 updated
+ search and pages plugins for page handler scripts
+
+ * mod/messages/inbox.php, mod/messages/pages/messages/inbox.php,
+ mod/messages/pages/messages/read.php, mod/messages/pages/messages/send.php,
+ mod/messages/pages/messages/sent.php, mod/messages/read.php,
+ mod/messages/send.php, mod/messages/sent.php, mod/messages/start.php: Refs
+ #3158 update messages plugin
+
+ * mod/messageboard/pages/messageboard/owner.php,
+ mod/messageboard/pages/owner.php, mod/messageboard/start.php: Refs #3158
+ Fixes #3170 namespaces messageboard plugin page scripts
+
+ * mod/file/edit.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/pages/file/edit.php, mod/file/pages/file/friends.php,
+ mod/file/pages/file/index.php, mod/file/pages/file/search.php,
+ mod/file/pages/file/upload.php, mod/file/pages/file/view.php,
+ mod/file/pages/file/world.php, mod/file/search.php, mod/file/start.php,
+ mod/file/upload.php, mod/file/view.php,
+ mod/file/views/default/file/typecloud.php, mod/file/world.php: Refs #3158
+ namespace file plugin's page scripts
+
+2011-03-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/forms/register.php: using shorthand for document ready
+ callback
+
+2011-03-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/start.php: Fixes #3164. Denormalized unread message counting
+ query because it was making things so slow I couldn't test.
+
+ * engine/classes/ElggFile.php: Fixes #3160. ElggFile->getFilehandler() is
+ less horrible.
+
+ * engine/lib/metastrings.php: Fixing pluralization of singular options for
+ elgg_get_metadata() and elgg_get_annotations().
+
+2011-03-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/pages/add.php, mod/bookmarks/pages/all.php,
+ mod/bookmarks/pages/bookmarklet.php, mod/bookmarks/pages/bookmarks/add.php,
+ mod/bookmarks/pages/bookmarks/all.php,
+ mod/bookmarks/pages/bookmarks/bookmarklet.php,
+ mod/bookmarks/pages/bookmarks/edit.php,
+ mod/bookmarks/pages/bookmarks/friends.php,
+ mod/bookmarks/pages/bookmarks/owner.php,
+ mod/bookmarks/pages/bookmarks/view.php, mod/bookmarks/pages/edit.php,
+ mod/bookmarks/pages/friends.php, mod/bookmarks/pages/owner.php,
+ mod/bookmarks/pages/view.php, mod/bookmarks/start.php,
+ mod/thewire/pages/everyone.php, mod/thewire/pages/friends.php,
+ mod/thewire/pages/previous.php, mod/thewire/pages/reply.php,
+ mod/thewire/pages/tag.php, mod/thewire/pages/thewire/everyone.php,
+ mod/thewire/pages/thewire/friends.php,
+ mod/thewire/pages/thewire/previous.php, mod/thewire/pages/thewire/reply.php,
+ mod/thewire/pages/thewire/tag.php, mod/thewire/pages/thewire/thread.php,
+ mod/thewire/pages/thewire/user.php, mod/thewire/pages/thread.php,
+ mod/thewire/pages/user.php, mod/thewire/start.php: Refs #3158 namespaced
+ pages for bookmarks and thewire
+
+2011-03-17 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/forminternals.php: Using shorthand
+ document ready initialization
+
+ * mod/embed/views/default/embed/embed.php: Switching click handler to "live"
+
+2011-03-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: fixed typo in welcome widget text
+
+ * engine/lib/system_log.php: Refs #3154 adding system log cache bug fix to
+ trunk
+
+ * engine/lib/system_log.php: Fixes #3098 catching exceptions when loading an
+ object in system log
+
+2011-03-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Fixes #3094, Refs #3111. Clicking outside a popup closes the
+ visible popups.
+
+ * views/default/css/admin.php: elgg-head is no longer the direct child of
+ elgg-state-draggable. Restoring dragger icon for plugins.
+
+ * mod/blog/languages/en.php: Added missing language string.
+
+ * install/ElggInstaller.php: Changed order of the default admin widgets.
+
+ * engine/lib/cache.php, engine/lib/configuration.php,
+ ...-1.8_svn-datalist_grows_up-0b8aec5a55cc1e1c.php, engine/schema/mysql.sql,
+ version.php: Fixes #3123. Datalists and config names can now be up to 255
+ chars long. Debug mode is disabled when caching views to avoid saving bad
+ stuff.
+
+ * mod/likes/start.php: Fixes #3153. Fixed incorrect options.
+
+ * views/default/forms/comments/add.php,
+ views/default/river/elements/body.php: Fixes #3130. Fixed river/item/footer
+ -> river/elements/footer for comments.
+
+ * mod/twitter_api/lib/twitter_api.php: Fixes #2416. Twitter API pulls in
+ avatars from twitter for new users.
+
+ * ...031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php,
+ ...11031400-1.8_svn-oauth_api-8f33ee79c3e66222.php, languages/en.php,
+ mod/oauth_api/manifest.xml, mod/twitter_api/manifest.xml: Fixes #3141.
+ Disabling twitter_api and oauth_api upon upgrade because we can't check
+ previous states. Adding an admin notice. twitter_api conflicts with
+ twitterservice and oauth_api conflicts with oauth_lib.
+
+ * views/default/object/admin_notice.php: Refs #2242: Better placement for
+ the delete button for admin notices.
+
+ * engine/lib/plugins.php: Fixed a typo that broke ignore access. That was
+ fun to track down >:O
+
+ * views/default/object/admin_notice.php: Refs #2242. Removed incorrect
+ option passed to url view.
+
+ * actions/admin/delete_admin_notice.php, engine/lib/admin.php,
+ languages/en.php, views/default/css/admin.php, views/default/js/admin.php,
+ views/default/object/admin_notice.php, views/default/page/admin.php: Fixes
+ #2242. Can now delete admin notices manually.
+
+2011-03-16 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Fixes #3066 moves setting of lastcache value up in boot
+ sequence
+
+ * engine/classes/ElggMenuBuilder.php: Fixes #3145 adds a default for menu
+ sort_by
+
+ * index.php: Fixes #3144 not using undefined $options variable
+
+2011-03-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * ...031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php,
+ ...11031400-1.8_svn-oauth_api-8f33ee79c3e66222.php: Fixes #3141. Fixed
+ twitter_api and oauth_api upgrades. Only worked on localhost because of code
+ gnomes.
+
+2011-03-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * ...11031400-1.8_svn-oauth_api-8f33ee79c3e66222.php: Fixes #3129. Fixed
+ faulty logic that broke upgrades.
+
+2011-03-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #2814 can now check if an entity exists
+ indepedent of access permissions
+
+2011-03-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ajax.js, js/lib/configuration.js, js/lib/security.js,
+ languages/en.php, views/default/js/elgg.php: Refs #2538. Loading
+ js/configuration.js again. Only updating tokens on success and showing a
+ basic warning if refresh fails.
+
+ * js/lib/languages.js: JS elgg.echo() returns the key if the string isn't
+ found. This is consistent with the PHP version.
+
+ * js/classes/ElggPriorityList.js, js/lib/elgglib.js, js/lib/hooks.js,
+ js/lib/languages.js, js/lib/prototypes.js, js/lib/security.js,
+ js/lib/session.js, js/lib/ui.js, js/lib/userpicker.js: Refs #2538: Added
+ documentation to most of the JS methods missing it.
+
+ * mod/oauth_api/manifest.xml, mod/oauth_api/start.php,
+ mod/oauth_api/vendors/oauth/LICENSE,
+ mod/oauth_api/vendors/oauth/example/server/INSTALL,
+ .../vendors/oauth/example/server/core/init.php,
+ .../example/server/core/templates/inc/footer.tpl,
+ .../example/server/core/templates/inc/header.tpl,
+ .../oauth/example/server/core/templates/index.tpl,
+ .../oauth/example/server/core/templates/logon.tpl,
+ .../example/server/core/templates/register.tpl,
+ .../vendors/oauth/example/server/www/hello.php,
+ .../vendors/oauth/example/server/www/index.php,
+ .../vendors/oauth/example/server/www/logon.php,
+ .../vendors/oauth/example/server/www/oauth.php,
+ .../vendors/oauth/example/server/www/register.php,
+ .../oauth/example/server/www/services.xrds.php,
+ .../vendors/oauth/library/OAuthDiscovery.php,
+ .../vendors/oauth/library/OAuthException.php,
+ .../vendors/oauth/library/OAuthRequest.php,
+ .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ .../vendors/oauth/library/OAuthRequester.php,
+ .../vendors/oauth/library/OAuthServer.php,
+ mod/oauth_api/vendors/oauth/library/OAuthStore.php,
+ .../library/body/OAuthBodyContentDisposition.php,
+ .../library/body/OAuthBodyMultipartFormdata.php,
+ .../vendors/oauth/library/discovery/xrds_parse.php,
+ .../vendors/oauth/library/discovery/xrds_parse.txt,
+ .../OAuthSignatureMethod.class.php, .../OAuthSignatureMethod_HMAC_SHA1.php,
+ .../signature_method/OAuthSignatureMethod_MD5.php,
+ .../OAuthSignatureMethod_PLAINTEXT.php,
+ .../OAuthSignatureMethod_RSA_SHA1.php,
+ .../library/store/OAuthStoreAbstract.class.php,
+ .../oauth/library/store/OAuthStoreAnyMeta.php,
+ .../oauth/library/store/OAuthStoreMySQL.php,
+ .../vendors/oauth/library/store/mysql/install.php,
+ .../vendors/oauth/library/store/mysql/mysql.sql,
+ .../oauth/test/discovery/xrds-fireeagle.xrds,
+ .../oauth/test/discovery/xrds-getsatisfaction.xrds,
+ .../oauth/test/discovery/xrds-magnolia.xrds,
+ mod/oauth_api/vendors/oauth/test/oauth_test.php, mod/oauth_lib/manifest.xml,
+ mod/oauth_lib/start.php, mod/oauth_lib/vendors/oauth/LICENSE,
+ mod/oauth_lib/vendors/oauth/example/server/INSTALL,
+ .../vendors/oauth/example/server/core/init.php,
+ .../example/server/core/templates/inc/footer.tpl,
+ .../example/server/core/templates/inc/header.tpl,
+ .../oauth/example/server/core/templates/index.tpl,
+ .../oauth/example/server/core/templates/logon.tpl,
+ .../example/server/core/templates/register.tpl,
+ .../vendors/oauth/example/server/www/hello.php,
+ .../vendors/oauth/example/server/www/index.php,
+ .../vendors/oauth/example/server/www/logon.php,
+ .../vendors/oauth/example/server/www/oauth.php,
+ .../vendors/oauth/example/server/www/register.php,
+ .../oauth/example/server/www/services.xrds.php,
+ .../vendors/oauth/library/OAuthDiscovery.php,
+ .../vendors/oauth/library/OAuthException.php,
+ .../vendors/oauth/library/OAuthRequest.php,
+ .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ .../vendors/oauth/library/OAuthRequester.php,
+ .../vendors/oauth/library/OAuthServer.php,
+ mod/oauth_lib/vendors/oauth/library/OAuthStore.php,
+ .../library/body/OAuthBodyContentDisposition.php,
+ .../library/body/OAuthBodyMultipartFormdata.php,
+ .../vendors/oauth/library/discovery/xrds_parse.php,
+ .../vendors/oauth/library/discovery/xrds_parse.txt,
+ .../OAuthSignatureMethod.class.php, .../OAuthSignatureMethod_HMAC_SHA1.php,
+ .../signature_method/OAuthSignatureMethod_MD5.php,
+ .../OAuthSignatureMethod_PLAINTEXT.php,
+ .../OAuthSignatureMethod_RSA_SHA1.php,
+ .../library/store/OAuthStoreAbstract.class.php,
+ .../oauth/library/store/OAuthStoreAnyMeta.php,
+ .../oauth/library/store/OAuthStoreMySQL.php,
+ .../vendors/oauth/library/store/mysql/install.php,
+ .../vendors/oauth/library/store/mysql/mysql.sql,
+ .../oauth/test/discovery/xrds-fireeagle.xrds,
+ .../oauth/test/discovery/xrds-getsatisfaction.xrds,
+ .../oauth/test/discovery/xrds-magnolia.xrds,
+ mod/oauth_lib/vendors/oauth/test/oauth_test.php,
+ mod/twitter_api/manifest.xml: Refs #3115. Moved oauth_lib to oauth_api.
+
+ * engine/lib/version.php: Refs #1433. Restored db_upgrade() call during
+ upgrades to fix issues for people upgrading from earlier versions of 1.7 than
+ 2010062401. This is why we should follow deprecation policies, Brett........
+
+2011-03-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php, mod/developers/manifest.xml,
+ mod/developers/start.php, .../views/default/admin/developers/settings.php,
+ .../views/default/forms/developers/settings.php: Fixes #3009 a bare bones
+ developer tools settings
+
+2011-03-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/js/embed.js, mod/embed/start.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/embed/lightbox_init.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/file/views/default/file/embed_upload.php, mod/groups/start.php,
+ mod/groups/views/default/groups/js.php,
+ .../views/default/groups/profile/widgets.php, mod/messages/start.php,
+ .../views/default/forms/messages/process.php,
+ .../views/default/forms/messages/reply.php,
+ mod/messages/views/default/messages/js.php, mod/profile/start.php,
+ mod/profile/views/default/profile/js.php,
+ mod/profile/views/default/profile/wrapper.php, mod/thewire/start.php,
+ mod/thewire/views/default/forms/thewire/add.php,
+ views/default/css/elements/buttons.php: Refs #3016: Removes inline javascript
+ from embed, file, groups, messages, profile, thewire
+
+ * views/default/css/admin.php, views/default/css/elements/icons.php,
+ views/default/css/elements/modules.php,
+ views/default/object/widget/elements/controls.php: Refs #3112: Pulled out
+ widget gear icon into elgg-icon-gear, which widgets now use
+
+2011-03-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginPackage.php,
+ languages/en.php, views/default/admin/plugins/advanced.php,
+ views/default/object/plugin/invalid.php: Fixes #2928: Invalid plugins are
+ shown on the advance page with details about the problem and a link to the
+ docs.
+
+2011-03-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/layout.php: Refs
+ #3109: Fixes 3 more instances of background-color being used when background
+ should be
+
+ * .../views/default/theme_preview/navigation.php,
+ mod/embed/views/default/embed/css.php,
+ mod/search/views/default/search/css.php,
+ mod/thewire/views/default/thewire/css.php, views/default/css/admin.php,
+ views/default/css/elements/buttons.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/forms.php, views/default/css/elements/icons.php,
+ views/default/css/elements/layout.php, views/default/css/elements/misc.php,
+ views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php: Refs #3109: More CSS cleanup.
+ Fixes bugs introduced by last cleanup where background-color: was being used
+ instead of background:
+
+2011-03-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, engine/lib/plugins.php: Refs #3079: Making
+ sure elgg_get_max_plugin_priority() returns 1 instead. Fixed problems when
+ bootstrapping elgg plugins. Will perform tests against MySQL 5.5 when I have
+ a real internet connection.
+
+2011-03-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CODING.txt: Using tabs instead of spaces to indent lines in CODING.txt
+
+ * install/css/install.css, .../views/default/custom_index/css.php,
+ mod/embed/views/default/embed/css.php,
+ mod/groups/views/default/groups/css.php,
+ mod/messages/views/default/messages/css.php,
+ mod/profile/views/default/profile/css.php,
+ .../views/default/reportedcontent/admin_css.php,
+ mod/search/views/default/search/css.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ mod/twitter/views/default/twitter/css.php, views/default/css/admin.php,
+ views/default/css/elements/buttons.php,
+ views/default/css/elements/chrome.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/forms.php, views/default/css/elements/icons.php,
+ views/default/css/elements/misc.php, views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php: Fixes #3109: added
+ non-vendor-prefixed css property declarations where applicable. Cleaned up
+ various other aspects of the css
+
+ * engine/handlers/page_handler.php: Fixes #3080: Move redirect code to
+ before engine inclusion
+
+2011-03-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixes #3121 array_filter() passes array elements
+ to callback
+
+2011-03-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/menu/page.php: Fixes #3103. Re-added code
+ accidentally removed in r8611 that broke page menu selected items.
+
+ * ...031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php,
+ mod/twitter_api/graphics/sign_in_with_twitter.gif,
+ mod/twitter_api/languages/en.php, mod/twitter_api/lib/twitter_api.php,
+ mod/twitter_api/manifest.xml, mod/twitter_api/start.php,
+ mod/twitter_api/vendors/twitteroauth/LICENSE,
+ mod/twitter_api/vendors/twitteroauth/OAuth.php,
+ mod/twitter_api/vendors/twitteroauth/README,
+ .../vendors/twitteroauth/twitterOAuth.php,
+ .../views/default/settings/twitter_api/edit.php,
+ mod/twitter_api/views/default/twitter_api/css.php,
+ .../views/default/twitter_api/login.php,
+ .../views/default/twitter_api/metatags.php,
+ .../default/usersettings/twitter_api/edit.php,
+ .../graphics/sign_in_with_twitter.gif, mod/twitterservice/languages/en.php,
+ mod/twitterservice/manifest.xml, mod/twitterservice/start.php,
+ mod/twitterservice/twitterservice_lib.php,
+ mod/twitterservice/vendors/twitteroauth/LICENSE,
+ mod/twitterservice/vendors/twitteroauth/OAuth.php,
+ mod/twitterservice/vendors/twitteroauth/README,
+ .../vendors/twitteroauth/twitterOAuth.php,
+ .../views/default/settings/twitterservice/edit.php,
+ .../views/default/twitterservice/css.php,
+ .../views/default/twitterservice/login.php,
+ .../views/default/twitterservice/metatags.php,
+ .../default/usersettings/twitterservice/edit.php, version.php: Refs #3115.
+ Migrated twitterservice to twitter_api. Added upgrade to migrate plugin and
+ user settings.
+
+2011-03-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/start.php: fixed WSOD because of function name change when
+ using some 1.7 themes
+
+ * engine/lib/views.php: Refs #3059 should only fallback to 1.7 pageshell
+ when asking for default page shell - otherwise breaks admin area
+
+ * engine/lib/deprecated-1.8.php: Fixes #3116 old method of getting site menu
+ works again
+
+ * engine/handlers/page_handler.php: Refs #2228 reverting [8654] so
+ forwarding works
+
+ * languages/en.php: Reverted changes made for elgg.com on Tools menu
+
+2011-03-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php: Refs #3079: Better checks in
+ ElggPlugin::setPriority() to avoid priorities of 0. Still requires testing
+ for MySQL 5.5.
+
+ * languages/en.php: Refs #3009. Fixed a few typos and inaccuracies in the
+ welcome widget.
+
+2011-03-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/likes/views/default/likes/display.php: tweaked an id so that the likes
+ html would be valid
+
+ * views/default/page/elements/footer.php: how did that get there - removing
+ some test code
+
+ * js/lib/ui.js: Fixes #3110 - checking selector before running date picker
+ js
+
+ * .../views/default/admin/utilities/diagnostics.php,
+ .../views/default/diagnostics/forms/download.php: wrapped the submit button
+ in diagnostics plugin with a <p> so the bottom doesn't get cut off
+
+ * languages/en.php: Refs #2991 restored plugin settings language string
+ needed for page title
+
+ * languages/en.php: fixed typo in site settings
+
+ * .../views/default/groups/sidebar/members.php: Fixes #3072 using
+ elgg_list_entities*() in group members sidebar view
+
+ * mod/groups/languages/en.php, mod/groups/lib/groups.php: displaying a no
+ activity message on the activity page for new groups
+
+ * mod/pages/world.php: added text to pages plugin for case where no pages
+ have been created on site
+
+ * mod/file/index.php: fixed typo in file index.php
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/object/default.php,
+ views/default/page/components/list/body.php,
+ views/default/page/components/summary.php, views/default/user/default.php:
+ Refs #3096 using 'summary' instead of list/body
+
+2011-03-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/elements/body.php,
+ views/default/river/elements/controls.php,
+ views/default/river/elements/footer.php,
+ views/default/river/elements/image.php, views/default/river/item.php,
+ views/default/river/item/body.php, views/default/river/item/controls.php,
+ views/default/river/item/footer.php, views/default/river/item/image.php:
+ somehow we forgot to use 'elements' in river views
+
+2011-03-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, upgrade.php, views/default/page/upgrade.php: Fixes
+ #3064. Checking for views/default/welcome.php and aborting upgrade if found.
+ Need to add documention for how to replace views directory to wiki. Also
+ fixed ajax loader during upgrade.
+
+2011-03-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggUser.php, mod/custom_index/index.php,
+ views/default/widgets/friends/content.php: Fixes #3045 custom index and the
+ friends widget now use the gallery view for user icons
+
+ * engine/lib/views.php, views/default/page/components/gallery.php,
+ views/default/page/components/list.php, views/default/user/default.php: Refs
+ #3045 adds a gallery context based view for users
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/views.php,
+ engine/tests/api/helpers.php, mod/blog/lib/blog.php, mod/blog/start.php,
+ .../views/default/page/theme_preview.php, mod/notifications/index.php,
+ .../notifications/subscriptions/forminternals.php, mod/pages/start.php,
+ mod/tinymce/start.php, mod/tinymce/views/default/tinymce/init.php,
+ mod/zaudio/start.php, mod/zaudio/views/default/zaudio/audioplayer.php,
+ views/default/input/autocomplete.php, views/default/input/friendspicker.php,
+ views/default/input/userpicker.php, views/default/page/elements/head.php:
+ Fixes #3091 adds load functions for js and css
+
+2011-03-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php: Fixed #3093: Admin link shows only for admin users.
+
+ * languages/en.php: Fixes #3004: Updated admin widget text to reflect menu
+ changes.
+
+ * mod/blog/views/default/blog/sidebar/revisions.php: Fixed blog revision
+ links.
+
+ * js/lib/autocomplete.js, js/lib/elgglib.js, js/lib/events.js,
+ js/lib/hooks.js, js/lib/languages.js, js/lib/security.js, js/lib/ui.js,
+ js/lib/ui.widgets.js, js/lib/userpicker.js, js/tests/ElggEventsTest.js,
+ js/tests/ElggHooksTest.js, mod/blog/views/default/js/blog/save_draft.php,
+ mod/bookmarks/views/default/bookmarks/js.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ mod/tinymce/views/default/js/tinymce.php,
+ .../views/default/uservalidationbyemail/js.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/river/filter.php, views/default/js/admin.php,
+ views/default/js/elgg.php: Fixes #3065, #3089. Merged JS events and hooks to
+ a single system. Updated plugins and core to use it. Added
+ elgg.getURLFragment() and using it elgg.ui.popsUp().
+
+2011-03-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/admin.php, views/default/page/default.php: forgot to
+ include js registered for the footer in page shells
+
+ * engine/lib/elgglib.php, engine/tests/api/helpers.php: Refs #3091
+ registering js and css support priority though does not maintain registration
+ order if items have equal priority
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/views.php,
+ engine/tests/api/helpers.php, mod/blog/lib/blog.php,
+ mod/notifications/index.php,
+ .../notifications/subscriptions/forminternals.php, mod/pages/start.php,
+ mod/tinymce/views/default/tinymce/init.php,
+ mod/zaudio/views/default/zaudio/audioplayer.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/input/autocomplete.php, views/default/input/friendspicker.php,
+ views/default/input/userpicker.php, views/default/page/components/list.php:
+ Refs #3091 rewrote the js and css register functions to require a name
+
+ * mod/blog/views/default/blog/group_module.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ mod/pages/views/default/pages/group_module.php: Fixes #3071 group "widgets"
+ check permissions now
+
+2011-03-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/widgets.php,
+ views/default/admin/appearance/default_widgets.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/appearance/profile_fields.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/admin/settings/default_widgets.php,
+ views/default/admin/settings/menu_items.php,
+ views/default/admin/settings/profile_fields.php,
+ .../default/admin/settings/profile_fields/list.php,
+ views/default/css/admin.php, views/default/js/admin.php: Refs #2991: Readded
+ the appearance menu under configure. Moved plugin settings under
+ configure/settings.
+
+ * engine/lib/admin.php, languages/en.php, views/default/admin/sidebar.php,
+ views/default/css/admin.php: Refs #2991. Using section for admin menu.
+
+ * views/default/navigation/menu/elements/section.php: Refs #3088. Wrapping
+ section headers in <h2>s.
+
+ * engine/lib/views.php: Refs #3088. Added docs for section headers to
+ elgg_view_menu().
+
+ * views/default/navigation/menu/default.php,
+ views/default/navigation/menu/elements/section.php,
+ views/default/navigation/menu/page.php: Fixes #3088: Added section header
+ support to page and default menus.
+
+2011-03-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Refs #3085 finished support for passing $vars to
+ elgg_view_entity()
+
+ * engine/lib/views.php, views/default/page/components/gallery.php,
+ views/default/page/components/list.php, views/rss/layout/objects/list.php:
+ Refs #3085 moved full_view out of elgg_view_list_item() into $vars to be
+ consistent with other elgg_view* functions
+
+ * engine/lib/views.php, views/default/page/elements/comments.php: Refs #3085
+ added $vars to elgg_view_comments()
+
+ * engine/lib/views.php: Refs #3085 improved documentation of
+ elgg_view_entity_list() which already supported $vars array
+
+ * engine/classes/ElggEntity.php, engine/lib/entities.php: improved
+ documentation of can write to container method/function
+
+2011-03-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/elgg.php: Fixes #3081: Adding a new line between
+ javascript includes.
+
+ * engine/handlers/page_handler.php, engine/lib/admin.php,
+ engine/lib/widgets.php, languages/en.php, mod/developers/languages/en.php,
+ mod/developers/start.php, mod/diagnostics/start.php,
+ mod/externalpages/start.php, mod/logbrowser/start.php,
+ mod/reportedcontent/start.php, mod/uservalidationbyemail/start.php,
+ views/default/admin/appearance/default_widgets.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/appearance/profile_fields.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/admin/settings/advanced.php,
+ views/default/admin/settings/basic.php,
+ views/default/admin/settings/default_widgets.php,
+ views/default/admin/settings/menu_items.php,
+ views/default/admin/settings/profile_fields.php,
+ .../default/admin/settings/profile_fields/list.php,
+ views/default/admin/sidebar.php, views/default/admin/site/advanced.php,
+ views/default/admin/site/basic.php, views/default/css/admin.php,
+ views/default/js/admin.php: Refs #2991. First round at rearranging and
+ grouping admin menu based upon tasks.
+
+2011-03-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/activate.php, actions/admin/plugins/deactivate.php,
+ actions/admin/user/delete.php, actions/friends/collections/add.php,
+ actions/friends/collections/delete.php, engine/classes/ElggSite.php,
+ engine/lib/admin.php, engine/lib/cache.php, engine/lib/cron.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/input.php,
+ engine/lib/navigation.php, engine/lib/output.php, engine/lib/pagehandler.php,
+ engine/lib/pageowner.php, engine/lib/plugins.php, engine/lib/river.php,
+ engine/lib/user_settings.php, engine/lib/users.php,
+ engine/tests/api/helpers.php, index.php, install/ElggInstaller.php,
+ js/lib/elgglib.js, js/lib/languages.js, js/lib/userpicker.js,
+ js/tests/ElggLibTest.js, mod/blog/actions/blog/delete.php,
+ mod/blog/actions/blog/save.php, mod/blog/lib/blog.php, mod/blog/start.php,
+ mod/blog/views/default/blog/group_module.php,
+ mod/blog/views/default/blog/sidebar/archives.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/object/blog.php,
+ mod/blog/views/default/widgets/blog/content.php,
+ mod/bookmarks/actions/bookmarks/delete.php,
+ mod/bookmarks/actions/bookmarks/save.php, mod/bookmarks/pages/friends.php,
+ mod/bookmarks/pages/view.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/widgets/bookmarks/content.php, mod/categories/start.php,
+ mod/categories/views/default/output/categories.php, mod/developers/start.php,
+ .../views/default/admin/developers/preview.php, mod/embed/start.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/externalpages/start.php,
+ mod/externalpages/views/default/expages/menu.php,
+ mod/file/actions/file/delete.php, mod/file/actions/file/upload.php,
+ mod/file/edit.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/search.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/view.php, mod/file/views/default/file/embed_upload.php,
+ mod/file/views/default/file/group_module.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/widgets/filerepo/content.php,
+ mod/groups/actions/discussion/delete.php,
+ mod/groups/actions/groups/delete.php,
+ mod/groups/actions/groups/membership/invite.php,
+ mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ mod/groups/start.php, .../views/default/discussion/group_module.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/profile/buttons.php,
+ mod/groups/views/default/groups/side_menu.php,
+ mod/groups/views/default/groups/sidebar/find.php,
+ .../views/default/groups/sidebar/members.php,
+ .../default/widgets/a_users_groups/content.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/start.php,
+ mod/logbrowser/start.php, mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/logbrowser/table.php,
+ mod/messageboard/pages/owner.php, mod/messageboard/start.php,
+ .../views/default/widgets/messageboard/content.php,
+ mod/messages/actions/messages/send.php, mod/messages/read.php,
+ mod/messages/start.php, mod/messages/views/default/object/messages.php,
+ mod/notifications/start.php, mod/pages/actions/pages/delete.php,
+ mod/pages/friends.php, mod/pages/history.php, mod/pages/revision.php,
+ mod/pages/start.php, mod/pages/view.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/group_module.php,
+ mod/pages/views/default/widgets/pages/content.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/search/index.php,
+ mod/search/views/default/search/list.php,
+ mod/search/views/default/search/search_box.php, mod/thewire/actions/add.php,
+ mod/thewire/actions/delete.php, mod/thewire/pages/friends.php,
+ mod/thewire/pages/reply.php, mod/thewire/pages/tag.php,
+ mod/thewire/pages/thread.php, mod/thewire/pages/user.php,
+ mod/thewire/start.php, mod/thewire/tests/regex.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/widgets/thewire/content.php, mod/twitterservice/start.php,
+ mod/twitterservice/twitterservice_lib.php,
+ .../views/default/twitterservice/login.php,
+ .../default/usersettings/twitterservice/edit.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ views/default/admin/appearance/default_widgets.php,
+ views/default/admin/header.php, views/default/admin/plugins/advanced.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/members/nav.php, views/default/core/members/sidebar.php,
+ views/default/forms/login.php, views/default/group/search/finishblurb.php,
+ views/default/input/autocomplete.php,
+ views/default/object/plugin/advanced.php,
+ views/default/object/plugin/simple.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/page/default.php,
+ views/default/page/layouts/content/filter.php,
+ views/default/page/layouts/content/header.php,
+ .../page/layouts/two_column_left_sidebar.php,
+ views/default/user/search/finishblurb.php,
+ views/default/widgets/content_stats/content.php, views/foaf/page/default.php,
+ views/installation/page/elements/footer.php, views/rss/core/river/body.php:
+ Fixes #2228: Major cleanup of urls -- remove leading pg/ and trailing / from
+ most urls in core and plugins
+
+ * .gitignore: Ignoring some standard eclipse files
+
+ * engine/handlers/page_handler.php, htaccess_dist: Refs #2228: Deprecated
+ use of pg/ in page handlers. Now we get to have nice clean urls like
+ "example.com/bookmarks"
+
+2011-03-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/manifest.xml: Added curl requirement to twitterservice.
+
+
+ * .../views/default/groups/sidebar/members.php: Fixes #3072: Fixed group
+ member list in sidebar. Thoughts about using the elgg-menu-hz class for this?
+ It's not exactly a menu, but that CSS does exactly what's needed.
+
+ * mod/groups/lib/groups.php: Fixes #3069. Added group activity content.
+
+ * languages/en.php, views/default/widgets/admin_welcome/content.php: Refs
+ #3004. First draft of welcome widget text.
+
+ * views/default/css/admin.php: Fixes #2948: Put specific rules in for
+ .elgg-plugin.elgg-state-active to get white backgrounds in plugins, but not
+ break the action button. The admin CSS still needs a bit of work.
+
+2011-03-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php: fixed page owner setting for sites in a
+ subdirectory
+
+ * views/default/css/admin.php, views/default/page/admin.php: Fixes #3057
+ page wrapper now sets the margin so messages don't end up in far left
+
+2011-03-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js, mod/likes/views/default/likes/display.php: Refs #3027: Using
+ the event popup, ui for advanced placement in elgg.ui.popsUp()
+
+ * engine/lib/views.php: Fixes #3059. elgg_view_layout() checks for
+ deprecated layouts in canvas/layouts/ and elgg_view_page() checks for
+ deprecated pageshells in pageshells/pageshell.
+
+ * engine/classes/ElggBatch.php: Fixed some typos in documentation of
+ ElggBatch.
+
+2011-03-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/upgrades/2011030101.php: Fixes #2679 added a script to upgrade
+ forum topics from 1.7 and earlier
+
+ * actions/likes/add.php, actions/likes/delete.php,
+ engine/classes/ElggEntity.php, engine/lib/elgglib.php,
+ engine/lib/navigation.php, engine/lib/upgrades/2010121702.php,
+ engine/lib/views.php, languages/en.php,
+ .../views/default/theme_preview/icons.php, mod/likes/actions/likes/add.php,
+ mod/likes/actions/likes/delete.php, mod/likes/languages/en.php,
+ mod/likes/manifest.xml, mod/likes/start.php,
+ mod/likes/views/default/annotation/likes.php,
+ mod/likes/views/default/likes/css.php,
+ mod/likes/views/default/likes/display.php,
+ .../default/river/annotation/likes/create.php,
+ views/default/annotation/likes.php, views/default/core/likes/display.php,
+ views/default/css/admin.php, views/default/css/elements/components.php,
+ views/default/css/elements/icons.php, views/default/css/ie.php,
+ views/default/river/annotation/likes/create.php: Fixes #3058 pulls likes out
+ as a plugin
+
+ * views/default/navigation/menu/metadata.php: removed metadata menu which
+ has been replaced by the entity menu
+
+2011-03-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/categories/manifest.xml, mod/custom_index/manifest.xml,
+ mod/developers/manifest.xml, mod/diagnostics/manifest.xml,
+ mod/embed/manifest.xml, mod/externalpages/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/oauth_lib/manifest.xml,
+ mod/twitter/manifest.xml: Refs #2104 added bundled category to all core
+ plugins
+
+ * .../views/default/theme_preview/forms.php: added padding to the display of
+ buttons in developer preview
+
+ * languages/en.php, views/default/admin/plugins/advanced.php: Refs #2871
+ advanced plugin filtering works - sorting still does odd things
+
+2011-03-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, languages/en.php, views/default/admin/footer.php,
+ views/default/css/admin.php: Fixes #3005. Added links to admin faq, admin
+ manual, blog, and community forums in the admin footer.
+
+ * mod/thewire/start.php, mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/metadata.php: Fixes #3025: The wire uses
+ core's metadata view.
+
+ * engine/lib/views.php: Added a bit more docs to elgg_view_menu().
+
+ * engine/lib/upgrades/2010050701.php: Fixes #2310. Only conditionally
+ setting the allow_registration field for users who used
+ $CONFIG->disable_registration.
+
+ * js/lib/ui.js, views/default/core/likes/display.php: Fixes #3027. Likes
+ popup uses rel='popup' and elgg.ui.popsUp() to position absolute.
+
+ * mod/blog/views/default/blog/sidebar/revisions.php: Fixes #3054: Fixed URL
+ for editing a blog revision.
+
+2011-03-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/start.php, mod/tinymce/views/default/js/tinymce.php,
+ mod/tinymce/views/default/tinymce/init.php, views/default/input/longtext.php:
+ fixed tinymce toggle
+
+2011-03-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/js/blog/save_draft.php: Fixes #3053: Fixed JS for
+ blog draft autosave.
+
+ * ...8_svn-blog_status_metadata-4645225d7b440876.php,
+ mod/blog/actions/blog/auto_save_revision.php, mod/blog/actions/blog/save.php,
+ mod/blog/classes/ElggBlog.php, mod/blog/languages/en.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/input/datetime.php,
+ mod/blog/views/default/js/blog/save_draft.php,
+ mod/blog/views/default/object/blog.php, version.php: Fixes #2229. Removed
+ published data metadata in blog. Added upgrade to set all status metadata for
+ old blog posts.
+
+ * engine/classes/ElggBatch.php: Added a bit more docs to ElggBatch.
+
+ * mod/blog/lib/blog.php, mod/blog/views/default/blog/sidebar/archives.php:
+ Refs #2229: Using time_created instead of publish_date metadata to sort.
+
+2011-03-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/longtext.php: fixed longtext menu display
+
+2011-03-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/navigation.php, engine/lib/river.php, mod/blog/start.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php, mod/groups/start.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php, mod/pages/start.php,
+ mod/pages/views/default/object/page_top.php,
+ views/default/css/elements/navigation.php: Refs #2895 entity menu uses new
+ menu system
+
+ * engine/classes/ElggMenuItem.php: added support for confirm text to
+ ElggMenuItem
+
+ * views/default/output/confirmlink.php: made encoding text default to false
+ in confirm link
+
+ * mod/blog/views/default/blog/group_module.php,
+ .../views/default/bookmarks/group_module.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ mod/groups/views/default/forms/groups/delete.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/profile/profile_block.php,
+ .../views/default/groups/profile/widgets.php,
+ mod/pages/views/default/pages/group_module.php: cleaned up the groups plugin
+ css
+
+ * views/default/css/elements/navigation.php: owner block menu items appear
+ like normal page menu items in default theme
+
+ * engine/lib/river.php: not showing river buttons when displaying in widgets
+
+
+2011-03-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Elgg's web services API is not RESTful
+
+ * mod/custom_index/start.php: custom index plugin checks return value on
+ hook now
+
+ * _graphics/walled_garden_background_top.gif, engine/lib/elgglib.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/css/walled_garden.php, views/default/page/elements/footer.php,
+ views/default/page/walled_garden.php: Refs #2693 walled garden code is
+ functional. Push back a thorough clean up until Elgg 1.9
+
+ * engine/lib/elgglib.php, languages/en.php,
+ views/default/css/walled_garden.php, views/default/page/walled_garden.php:
+ Refs #2693 pulled walled garden css out as separate view
+
+ * documentation/examples/plugins/manifest.xml, mod/blog/manifest.xml,
+ mod/bookmarks/manifest.xml, mod/developers/manifest.xml,
+ mod/file/manifest.xml, mod/pages/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitterservice/manifest.xml,
+ mod/uservalidationbyemail/manifest.xml, mod/zaudio/manifest.xml,
+ views/default/admin/plugins/advanced.php: Refs #2104 added some categories to
+ core (bundled) plugins
+
+ * mod/thewire/languages/en.php,
+ .../views/default/thewire/profile_status.php: Fixes #3024 thewire view for
+ the profile page is finished
+
+ * engine/lib/river.php, mod/groups/start.php,
+ .../views/default/forms/discussion/reply/save.php,
+ .../river/object/groupforumtopic/create.php,
+ views/default/river/item/controls.php: Refs #2679 can comment on discussion
+ forums in river now
+
+ * mod/groups/start.php: Refs #2413 registered the subtype for discussion
+ topics so search works
+
+ * mod/groups/start.php: Refs #2679 added a function for processing groups
+ plugin upgrades
+
+ * engine/lib/river.php, views/default/river/item/controls.php: Fixes #2895
+ river menu reimplemented using plugin hook
+
+ * upgrade.php: Fixes #3029 added an upgrade, system event that always fires
+
+2011-03-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggMenuBuilder.php: added a catch to menu builder for bad
+ menu items
+
+ * views/default/css/elements/navigation.php: added background to li hover
+ for filter menu to work around sliver of white showing through - probably a
+ better way to do this
+
+ * mod/messages/start.php, mod/messages/views/default/messages/css.php: fixed
+ new message indicator
+
+ * views/default/navigation/menu/default.php: forcing dashes in elgg menu
+ classes
+
+ * mod/messages/read.php, mod/pages/view.php: changed rest of title buttons
+ to an elgg-menu
+
+ * mod/groups/languages/en.php, mod/groups/lib/groups.php: fixed some group
+ page titles
+
+ * mod/thewire/languages/en.php: thewire was missing object:<subtype> string
+
+ * views/default/css/elements/navigation.php: tweaked spacing of sidebar
+ menus
+
+ * languages/en.php: adjust language on like link title
+
+ * views/default/css/elements/layout.php,
+ views/default/css/elements/navigation.php: added a amrgin to elgg-menu-title
+ so that buttons have some space
+
+ * .../views/default/groups/profile/buttons.php: groups profile buttons now
+ elgg-menu-title - still need to be registered
+
+ * .../views/default/forms/messages/process.php,
+ mod/messages/views/default/object/messages.php,
+ views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/css/elements/buttons.php,
+ views/default/input/submit.php: cleared up confusion over elgg-icon-delete
+ and elgg-button-delete
+
+ * .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php: cleaned up the group
+ invitations and membership request pages
+
+ * mod/groups/actions/groups/edit.php,
+ mod/groups/views/default/forms/groups/edit.php: fixed a bug with invisible
+ groups - saving and display both had a problem
+
+ * mod/groups/views/default/forms/groups/search.php,
+ mod/groups/views/default/groups/edit.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../default/groups/profile/activity_module.php,
+ mod/groups/views/default/groups/side_menu.php,
+ .../views/default/groups/sidebar/members.php,
+ .../river/annotation/group_topic_post/reply.php,
+ .../default/river/relationship/member/create.php,
+ mod/groups/views/default/settings/groups/edit.php: reviewed groups plugin and
+ added todo's
+
+ * mod/bookmarks/views/default/object/bookmarks.php: added owner icons to
+ bookmarks
+
+ * views/default/css/elements/misc.php: drop down button did not need to have
+ such a large z-index
+
+ * views/default/css/elements/buttons.php: removed shadow from
+ elgg-button-dropdown inherited from elgg-button
+
+ * views/default/page/elements/footer.php: make sure powered by icon does not
+ sneak up in the menu area
+
+ * .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/icon/object/file.php: fixed two validation issues with
+ ampersands in file plugin
+
+ * views/default/page/elements/footer.php: forgot to close div tag
+
+ * .../views/default/custom_index/css.php,
+ .../views/default/page/layouts/custom_index.php: updated custom index spacing
+ so it spans the width of the central area
+
+ * engine/lib/elgglib.php, mod/externalpages/start.php,
+ mod/reportedcontent/start.php, views/default/css/elements/navigation.php,
+ views/default/page/elements/footer.php: pulled power by icon out of menu in
+ footer as it serves a different purpose than other menu items
+
+2011-03-05 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js, views/default/input/date.php,
+ views/default/input/datepicker.php, views/default/output/calendar.php,
+ views/default/output/date.php: Fixes #2321: Deprecated input/datepicker and
+ output/calendar in favor of input/date and output/date
+
+2011-03-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/groups/membership/join.php, mod/groups/start.php: Fixes
+ #1926 flushing access list when adding a user to a group
+
+ * mod/groups/lib/groups.php, .../default/groups/profile/activity_module.php:
+ preventing crashes when user does not have access to the group on group
+ profile page
+
+ * engine/lib/access.php: Refs #1926 should not be ignoring the flush
+ variable
+
+ * engine/lib/access.php: updated comment on why we may want to keep access
+ cache
+
+ * mod/groups/start.php: Refs #1926 user is now being added to access
+ collection of invisible group
+
+ * engine/lib/access.php: Refs #1926 made 'access:collections:add_user',
+ 'collection' plugin hook more useful
+
+ * mod/groups/actions/groups/edit.php, mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/edit.php: trying to make support for
+ invisible groups a little saner
+
+ * mod/groups/actions/groups/membership/join.php: fixed bug in accepting
+ invitations to closed groups
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/delete.php,
+ mod/groups/actions/edit.php, mod/groups/actions/featured.php,
+ mod/groups/actions/groups/delete.php, mod/groups/actions/groups/edit.php,
+ mod/groups/actions/groups/featured.php,
+ mod/groups/actions/groups/membership/add.php,
+ .../actions/groups/membership/delete_invite.php,
+ .../actions/groups/membership/delete_request.php,
+ mod/groups/actions/groups/membership/invite.php,
+ mod/groups/actions/groups/membership/join.php,
+ mod/groups/actions/groups/membership/leave.php,
+ mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/start.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/profile/buttons.php: updated the group actions -
+ edit group needs more work
+
+ * engine/lib/entities.php: added a hint about 0 meaning no limit for ege
+
+2011-03-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Refs #2679 preventing people from commenting on a
+ discussion topic in the river
+
+ * mod/groups/actions/discussion/reply/delete.php,
+ mod/groups/actions/discussion/reply/save.php, mod/groups/languages/en.php,
+ mod/groups/lib/discussion.php, mod/groups/lib/groups.php,
+ mod/groups/start.php, .../views/default/annotation/group_topic_post.php,
+ mod/groups/views/default/discussion/replies.php,
+ .../views/default/forms/discussion/reply/save.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/object/groupforumtopic.php,
+ .../river/annotation/group_topic_post/reply.php: Refs #2679 - returning to a
+ separate annotation for discussion forum replies. For those using the latest
+ out of svn you can update with this script: https://gist.github.com/852092
+
+2011-03-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, mod/blog/views/default/forms/blog/save.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ .../notifications/subscriptions/forminternals.php,
+ views/default/css/elements/chrome.php,
+ views/default/forms/admin/site/update_advanced.php,
+ views/default/forms/admin/site/update_basic.php,
+ views/default/forms/usersettings/save.php: Fixes #3006 restores previous
+ dividers
+
+ * mod/categories/views/default/output/categories.php: not showing categories
+ label if not categories chosen
+
+ * actions/login.php: Fixes #3036 moved setting of forward url to before
+ login in case session variables are being lost
+
+ * views/default/river/item/controls.php: Refs #2895 reverting [8532] as code
+ is not working as intended. Can comment and like everything because menu
+ items are being registered. Perhaps questionable benefit of using the menu
+ system here.
+
+ * mod/groups/actions/discussion/save.php: fixed the view name for discussion
+ topic river
+
+ * .../views/default/object/groupforumtopic.php: showing the text of a forum
+ topic post
+
+2011-03-02 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/views/default/tinymce/css.php,
+ views/default/core/friends/collection.php,
+ views/default/core/friends/collections.php,
+ views/default/core/friends/collectiontabs.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php,
+ views/default/page/elements/owner_block.php,
+ views/default/page/elements/topbar.php: Addressed several miscellaneous
+ todo's
+
+ * views/default/object/widget.php,
+ views/default/object/widget/elements/controls.php: Widget collapse button
+ uses elgg-toggler pattern
+
+ * views/default/page/layouts/widgets/add_button.php: Fixed widgets add
+ button
+
+ * views/default/object/plugin/advanced.php,
+ .../object/plugin/elements/dependencies.php: Plugin admin displays
+ dependencies again
+
+ * mod/twitterservice/start.php: Removed redundant requirements checking code
+
+ * views/default/admin/statistics/basic.php,
+ views/default/admin/statistics/numentities.php,
+ views/default/admin/statistics/overview.php: Refactored admin statistics
+ views -- no longer manually building elgg-module
+
+ * engine/lib/output.php: Added comment explaining purpose of regex
+
+ * engine/lib/output.php: elgg_normalize_url leaves #target and ?query urls
+ alone
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/messages.php: Fixes #3012 added hidden li
+
+ * js/lib/elgglib.js: cleaned up appending system messages since <ul> will
+ always be there
+
+ * install/ElggInstaller.php: Fixes #2929 Installer handles private default
+ access now
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/layouts/content/filter.php: Filter tabs ordered
+ correctly
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php: fixed bug where dataroot wasn't being set when
+ regenerating cache during the install
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/modules.php,
+ views/default/css/elements/navigation.php,
+ views/default/navigation/menu/site.php: Some fixes for site menu
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/save.php: because river entry is deleted we do not
+ need to do an update
+
+ * views/default/forms/comments/add.php: put margin back between longtext and
+ submit button for comment form
+
+ * mod/blog/actions/blog/save.php: fixes saving a new blog post - was trying
+ to do an update to without a guid
+
+ * engine/lib/views.php: Fixes #3033 removed use of set_view_location() from
+ core
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/users.php,
+ mod/embed/start.php, mod/messages/start.php, mod/reportedcontent/start.php,
+ views/default/admin/footer.php, views/default/admin/sidebar.php,
+ views/default/css/admin.php, views/default/css/elements/navigation.php,
+ views/default/input/longtext.php, views/default/page/elements/footer.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/layouts/content/filter.php,
+ views/default/page/layouts/content/header.php,
+ views/default/river/item/controls.php: Fixes #3031 using 'priority' now
+
+ * engine/lib/users.php: Fixes #3010 moved topbar menu registration to page
+ setup so that the url override is registered
+
+ * mod/tinymce/views/default/js/tinymce.php: fixed tinymce js code so that at
+ least it doesn't have syntax errors and runtime exceptions
+
+ * mod/tinymce/start.php: tinymce longtext menu item also needed the longtext
+ class
+
+ * mod/tinymce/start.php: fixes tinymce longtext registration
+
+ * mod/embed/start.php: fixed embed longtext menu registration
+
+ * views/default/input/button.php, views/default/input/submit.php: added
+ better support for classes to buttons
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggMenuItem.php, js/lib/ui.js,
+ mod/profile/views/default/profile/owner_block.php,
+ .../views/default/object/reported_content.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/object/plugin/advanced.php,
+ views/default/object/widget/elements/controls.php,
+ views/default/page/layouts/widgets/add_button.php,
+ views/default/river/item/controls.php: Fixes #3032: toggler pattern is now <a
+ href="#target" class="elgg-toggler">...</a> Wow, so much nicer.
+
+ * engine/classes/ElggMenuItem.php: Added support for "rel" to ElggMenuItem
+
+ * engine/classes/ElggMenuItem.php: Fixes #3023: added support for 'class'
+ argument in elgg_register_menu_item
+
+ * views/default/css/admin.php, views/default/css/elements/navigation.php,
+ views/default/navigation/menu/default.php,
+ views/default/navigation/menu/elements/group.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/navigation/menu/elements/section.php,
+ views/default/navigation/menu/metadata.php,
+ views/default/navigation/menu/page.php,
+ views/default/navigation/menu/site.php,
+ views/default/navigation/menu/user_hover.php,
+ views/default/page/elements/footer.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/layouts/content/filter.php,
+ views/default/page/layouts/content/header.php: Refs #3021:
+ elgg-section-$section => elgg-menu-$menu-$section Added elgg-menu-hz for
+ horizontal menus
+
+ * mod/embed/start.php, mod/embed/views/default/embed/link.php: Fixes #2895:
+ Embed uses longtext menu -- I believe that covers *all* the menus we had
+ brought up!
+
+ * mod/tinymce/start.php, mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/js/tinymce.php,
+ mod/tinymce/views/default/tinymce/init.php, views/default/input/longtext.php:
+ Refs #2538: Cleaned up custom tinymce code into elgg.tinymce.*. Refs #2895:
+ TinyMCE makes use of longtext menu
+
+ * views/default/river/item/controls.php: Refs #2895: River items now emit a
+ "river" menu. Not confident on the name, just trying to keep things short
+ and sweet.
+
+ * mod/search/start.php, views/default/page/elements/header.php: Removed
+ header/extend in favor of just extending page/elements/header
+
+ * views/default/css/elements/navigation.php,
+ views/default/page/layouts/content/header.php: Refs #2895: Content header now
+ emits a "title" menu
+
+2011-03-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/save.php: Fixes #2425, #2427. Blog status for
+ published and draft correctly set the river items.
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/likes/display.php,
+ views/default/css/elements/navigation.php: core/likes/display uses
+ image-block component. ensures that the like icon is even with the "x users
+ liked this" text. Wondering if we should split the two up entirely.
+
+ * views/default/css/elements/navigation.php,
+ views/default/page/layouts/content/filter.php: Refs #2895: Converted content
+ filter to a menu, duplicated styles to mimic tabs... ick.
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/manifest.xml, mod/blog/start.php: blog plugin uses on_activate to
+ set its class or the upgrade event
+
+ * mod/groups/views/default/forms/groups/search.php,
+ mod/thewire/views/default/forms/thewire/add.php,
+ views/default/css/elements/buttons.php,
+ views/default/forms/members/name_search.php,
+ views/default/forms/members/tag_search.php,
+ views/default/forms/widgets/save.php, views/default/input/submit.php: brought
+ back the blue submit button
+
+ * views/default/css/elements/buttons.php: yuck - have to reset all the
+ styling from elgg-button for elgg-button-delete
+
+ * actions/admin/plugins/activate.php, actions/admin/plugins/deactivate.php:
+ Fixes #3013 activating/deactivating a plugin forwards to plugin page with
+ changed plugin given focus
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/pages/all.php: No need for ".=" here
+
+ * mod/groups/start.php: pg/groups/world => pg/groups/all
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/widgets.php, mod/developers/start.php,
+ mod/diagnostics/start.php, mod/externalpages/start.php,
+ mod/logbrowser/start.php, mod/reportedcontent/start.php,
+ mod/uservalidationbyemail/start.php: Fixes #3014 using more standard
+ "register" in admin convenience function
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/navigation.php: Fixes for breadcrumbs and
+ metadata menus. Added basic styles for title menu
+
+ * views/default/core/likes/display.php: false is default for encode text in
+ output/url -- no need to specify
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messageboard/start.php, .../views/default/forms/messageboard/add.php,
+ .../views/default/messageboard/css.php: cleaned up the css for messageboard
+
+ * mod/messageboard/languages/en.php,
+ .../views/default/annotation/messageboard.php,
+ .../views/default/forms/messageboard/add.php,
+ .../views/default/messageboard/messageboard.php,
+ .../default/river/object/messageboard/create.php,
+ .../views/default/widgets/messageboard/content.php,
+ .../views/default/widgets/messageboard/edit.php: cleaned up the messageboard
+ plugin further
+
+ * views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php: finished making the "default"
+ view the default view for annotation rather than generic_comment
+
+2011-03-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/river/filter.php: Convert river filter javascript to
+ new style
+
+2011-03-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/annotation/default.php: improved the default annotation view
+
+
+2011-02-28 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/topbar.php: No more reason to explicitly add
+ elgg-menu-topbar class
+
+ * views/default/css/elements/navigation.php,
+ views/default/navigation/menu/site.php: Fixes for several menu issues
+
+ * views/default/page/elements/footer.php: No more need to explicitly include
+ elgg-menu-footer class
+
+ * views/default/navigation/menu/default.php: Always include name of menu in
+ menu classes
+
+ * mod/bookmarks/start.php, views/default/page/elements/sidebar.php: Refs
+ #2895: Renamed "page_links" to "extras" -- feels more semantic (facebook's
+ menu has actions such as unfriend, share, block)
+
+2011-02-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, mod/categories/manifest.xml,
+ mod/categories/start.php: Fixes #3011. on_activate and on_deactivate work for
+ plugins now. Updated the categories plugin to use it.
+
+2011-02-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php,
+ mod/categories/views/default/output/categories.php,
+ views/default/css/elements/icons.php,
+ views/default/page/components/list/body.php: pushing categories to the next
+ line when viewing an entity
+
+ * views/default/js/admin.php: slide up system messages in admin area
+
+ * views/default/page/admin.php: fixed the AWHOL state of system messages on
+ admin pages
+
+ * .../views/default/admin/users/unvalidated.php,
+ .../forms/uservalidationbyemail/bulk_action.php: fixed bad return value in
+ unvalidated users bulk action form
+
+2011-02-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/forms/useradd.php: fixed useradd form
+
+ * engine/lib/admin.php, engine/lib/navigation.php: Fixes #2951 not
+ registering utilities menu item by default but added code to automatically
+ register a parent menu if not registered in admin menu registration function.
+ We lose the ability to set a weight on utilities.
+
+ * engine/lib/admin.php, engine/lib/widgets.php, mod/developers/start.php,
+ mod/diagnostics/start.php, mod/externalpages/start.php,
+ mod/logbrowser/start.php, mod/reportedcontent/start.php,
+ mod/uservalidationbyemail/start.php: simplified admin menu registration
+ function in preparation for adding sections
+
+ * install/ElggInstaller.php, install/languages/en.php: Fixes #2799 added
+ check for session.auto_start
+
+ * engine/lib/admin.php, views/default/css/admin.php,
+ views/default/page/admin.php: moved admin messages into admin page shell
+
+ * engine/lib/admin.php, install/ElggInstaller.php, languages/en.php,
+ views/default/css/admin.php, views/default/widgets/admin_welcome/content.php:
+ Fixes #2913 - directs the user to admin dashboard when installer finishes
+
+ * .../views/default/bookmarks/bookmarklet.php: Fixes #2977 changed title to
+ alt
+
+ * _graphics/friendspicker.png, actions/friends/collections/edit.php,
+ languages/en.php, pages/friends/collections/add.php,
+ pages/friends/collections/pickercallback.php,
+ views/default/core/friends/collections.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php,
+ views/default/forms/friends/collections/add.php,
+ views/default/forms/friends/collections/edit.php,
+ views/default/input/friendspicker.php: Fixes #2982 friends collections work
+ even if the code is convoluted and poorly written.
+
+ * .../notifications/subscriptions/forminternals.php: fixed notifications
+ plugin's hacked up friends picker...shudder
+
+ * mod/groups/lib/groups.php,
+ mod/groups/views/default/forms/groups/invite.php: fixed group invite form
+
+ * engine/lib/elgglib.php: fixed image size attributes added to "power by"
+ image
+
+2011-02-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggSite.php: Refs #2693 - Added pg/css and pg/js to the
+ list of public pages for walled garden.
+
+2011-02-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/addcollection.php, actions/friends/collections/add.php,
+ actions/friends/collections/delete.php, actions/friends/collections/edit.php,
+ actions/friends/deletecollection.php, actions/friends/editcollection.php,
+ engine/lib/users.php, pages/friends/add.php, pages/friends/collections.php,
+ pages/friends/collections/add.php,
+ pages/friends/collections/pickercallback.php,
+ pages/friends/collections/view.php, pages/friends/edit.php,
+ pages/friends/pickercallback.php, views/default/core/friends/collection.php,
+ views/default/core/friends/collections.php,
+ views/default/core/friends/collectiontabs.php,
+ views/default/forms/friends/collectionfields.php,
+ views/default/forms/friends/collections/edit.php,
+ views/default/forms/friends/edit.php: Refs #2982 adding and deleting friend
+ collections works - editing does not
+
+ * engine/lib/views.php, mod/groups/views/default/forms/groups/invite.php,
+ pages/friends/pickercallback.php, views/default/core/friends/collection.php,
+ views/default/core/friends/picker.php, views/default/forms/friends/edit.php,
+ views/default/input/friendspicker.php: fixed friends picker js include
+
+2011-02-26 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/navigation.php: Switching elgg-menu-metadata to
+ inline-block method of declaring a horizontal menu
+
+ * mod/groups/views/default/group/default.php,
+ mod/thewire/views/default/thewire/metadata.php, views/default/css/admin.php,
+ views/default/css/elements/components.php,
+ views/default/css/elements/navigation.php,
+ views/default/navigation/menu/metadata.php,
+ views/default/object/plugin/advanced.php,
+ views/default/page/components/list/body.php, views/default/user/default.php:
+ Refs #2895: .elgg-list-metadata => .elgg-menu-metadata. Still not using menu
+ system yet, though
+
+ * views/default/css/elements/navigation.php: .elgg-menu enhancement for
+ horizontal menus
+
+ * views/default/css/elements/layout.php,
+ views/default/css/elements/navigation.php,
+ views/default/navigation/breadcrumbs.php: .elgg-menu is no longer trivial
+
+ * engine/lib/elgglib.php: Added explicit height and width to powered_by_elgg
+ icon
+
+ * views/default/css/elements/icons.php: Fixes #2691: Switching elgg-icon to
+ display:inline-block -- matches behavior of <img> tag
+
+2011-02-25 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/start.php, .../views/default/reportedcontent/css.php:
+ Converted report-this icon to be compatible with elgg_view_icon
+
+ * engine/lib/elgglib.php, mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/footer_link.php,
+ views/default/page/elements/footer.php: Refs #2895: Removed footer/links
+ view. Moved report-this link into alternate footer menu
+
+ * engine/lib/elgglib.php, views/default/css/elements/layout.php,
+ views/default/css/elements/navigation.php,
+ views/default/page/elements/footer.php: Refs #2895: Added support for an
+ "alt" section in the footer menu. Put "powered by Elgg" badge in here
+
+ * js/lib/elgglib.js, js/lib/session.js: Refs #2538: Functions don't need
+ double-namespacing
+
+ * views/default/css/elements/components.php,
+ views/default/css/elements/misc.php,
+ views/default/css/elements/navigation.php: Using shorthand in css to scrunch
+ it a bit
+
+ * views/default/css/elements/layout.php,
+ views/default/css/elements/page_layout.php, views/default/css/elgg.php:
+ Converted css/elements/page_layout to layout. Now we have a bunch of nice,
+ terse, 1-word names :)
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/users.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php,
+ views/default/page/elements/topbar.php: Refs #2895: Converted topbar to one
+ menu (felt dirty using two). Fixed styles.
+
+ * engine/lib/users.php, mod/messages/start.php,
+ mod/messages/views/default/messages/topbar.php: Refs #2895: Messages now uses
+ new topbar menu
+
+ * mod/bookmarks/start.php, .../views/default/bookmarks/page_links.php,
+ views/default/page/elements/page_links.php,
+ views/default/page/elements/sidebar.php: Refs #2895: Converted page_links
+ into a menu. Bookmarks now uses it
+
+ * engine/lib/admin.php, engine/lib/users.php,
+ views/default/page/elements/topbar.php: Refs #2895: Made topbar into 2 menus.
+ CSS will have to be fixed
+
+ * engine/lib/navigation.php: Corrects bug that occurred when ElggMenuItem is
+ passed
+
+ * mod/blog/views/default/object/blog.php, mod/groups/start.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/messages/views/default/object/messages.php,
+ .../notifications/subscriptions/forminternals.php,
+ mod/profile/views/default/profile/owner_block.php,
+ views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/core/friends/picker.php,
+ views/default/core/friends/tablelist.php,
+ views/default/forms/friends/edit.php, views/default/river/item/image.php,
+ views/default/river/relationship/friend/create.php,
+ views/default/user/default.php, views/default/widgets/friends/content.php:
+ Converted all uses of profile/icon in core + plugins to elgg_view_entity_icon
+
+ * engine/lib/navigation.php: Emit a warning + debug info when an attempt to
+ register a menu item fails
+
+ * engine/classes/ElggMenuItem.php: Supporting is_action in ElggMenuItem
+
+ * views/installation/forms/install/template.php,
+ views/installation/install/pages/admin.php,
+ views/installation/install/pages/database.php,
+ views/installation/install/pages/settings.php: Cleaned up some js in the
+ installer
+
+ * views/installation/input/checkbox.php,
+ views/installation/input/checkboxes.php: Updated input/checkboxes code in
+ installation viewtype
+
+ * views/installation/install/forms/admin.php,
+ views/installation/install/forms/database.php,
+ views/installation/install/forms/settings.php,
+ views/installation/install/forms/template.php,
+ views/installation/install/pages/admin.php,
+ views/installation/install/pages/database.php,
+ views/installation/install/pages/settings.php: Converted installation forms
+ to use elgg_view_form and the /forms/ directory
+
+2011-02-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/admin.php: Fixes #2998. Updated admin JS for dnd plugin
+ reordering with new plugin layout.
+
+2011-02-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggAnnotation.php: Fixes #2960 removing river entry for
+ deleted annotation
+
+ * views/default/css/admin.php, views/default/css/elements/reset.php: fixed
+ dragging/scrolling issue caused by overflow-y on body
+
+ * engine/classes/ElggMenuItem.php: fixed typo in elgg menu updates from last
+ night
+
+ * engine/lib/users.php, languages/en.php, pages/friends/collections.php,
+ views/default/css/elements/misc.php: fixing friends collections for backward
+ compatibility
+
+ * engine/classes/ElggMenuItem.php,
+ views/default/navigation/menu/elements/item.php: finished the implementation
+ of non-links in menu system
+
+ * engine/classes/ElggMenuItem.php,
+ mod/profile/views/default/profile/owner_block.php,
+ views/default/navigation/menu/elements/item.php: using getContent() in menu
+ system in preparation for supporting non-links
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/admin.php, engine/lib/deprecated-1.8.php,
+ engine/lib/navigation.php, engine/lib/user_settings.php,
+ engine/lib/users.php, engine/lib/views.php, mod/bookmarks/start.php,
+ mod/developers/start.php, mod/file/views/default/file/typecloud.php,
+ mod/invitefriends/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/lib/pages.php: Fixes #2997 - href used
+ instead of url in menu system
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/admin.php, engine/lib/deprecated-1.8.php,
+ engine/lib/user_settings.php, engine/lib/users.php, engine/lib/views.php,
+ mod/bookmarks/start.php, mod/developers/start.php,
+ mod/file/views/default/file/typecloud.php, mod/invitefriends/start.php,
+ mod/messages/start.php, mod/notifications/start.php, mod/pages/lib/pages.php,
+ views/default/forms/admin/menu/save.php: Refs #2997 switching from title to
+ text for menu items
+
+ * views/default/core/friends/tablelist.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php:
+ moved another friends picker css section to forms css view
+
+ * views/default/core/avatar/crop.php, views/default/core/avatar/upload.php,
+ views/default/css/elements/misc.php, views/default/forms/avatar/crop.php:
+ cutting down the amount of css required for the avatar page
+
+ * views/default/core/river/body.php, views/default/core/river/controls.php,
+ views/default/core/river/footer.php, views/default/core/river/image.php,
+ views/default/river/item.php, views/default/river/item/body.php,
+ views/default/river/item/controls.php, views/default/river/item/footer.php,
+ views/default/river/item/image.php: organized the river views according to
+ the subview pattern
+
+2011-02-23 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/modules.php: Adjusting offset for dropdown
+ module
+
+ * engine/lib/admin.php: Simplify registration of jeditable library
+
+ * views/default/css/elements/components.php,
+ views/default/css/elements/layout_objects.php, views/default/css/elgg.php:
+ Refs #2993: Changed css layout_objects to components
+
+ * views/default/css/elgg.php: Refs #2995: Including css/elements/buttons in
+ css/elgg
+
+ * views/default/css/elements/buttons.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php:
+ Fixes #2995: buttons get their own css file
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/object/default.php,
+ views/default/object/elements/list_body.php,
+ views/default/page/components/list/body.php, views/default/user/default.php:
+ Fixes #2992: moved object/elements/list_body to page/components/list/body
+
+ * js/lib/ui.js: Fixes #2976: Removed second toggler implementation
+
+ * mod/blog/lib/blog.php, mod/file/index.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php, mod/messages/read.php,
+ .../views/default/forms/messages/process.php,
+ mod/messages/views/default/object/messages.php, mod/pages/view.php,
+ mod/profile/views/default/profile/owner_block.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/thewire/profile_status.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/friends/picker.php,
+ views/default/forms/profile/fields/reset.php, views/default/input/button.php,
+ views/default/object/plugin/advanced.php,
+ views/default/page/layouts/content/header.php,
+ views/default/page/layouts/widgets/add_button.php: Every occurrence of
+ elgg-button-$type needs an elgg-button base class declaration -- or should we
+ remove that requirement?
+
+ * mod/profile/views/default/profile/owner_block.php,
+ .../views/default/object/reported_content.php,
+ views/default/core/river/controls.php, views/default/core/river/footer.php,
+ views/default/object/widget/elements/controls.php,
+ views/default/object/widget/elements/settings.php,
+ views/default/page/layouts/widgets/add_button.php,
+ views/default/page/layouts/widgets/add_panel.php: Refs #2976: Converted most
+ markup to use elgg-toggler elgg-toggles-* pattern
+
+ * views/default/css/elements/page_layout.php,
+ views/default/page/default.php: Fixes #2957: elgg-page-classic =>
+ elgg-page-default
+
+ * views/default/page/admin.php, views/default/page/layouts/one_column.php,
+ views/default/page/layouts/one_sidebar.php: Moved elgg-inner out of layouts
+ and into the page shell
+
+ * mod/messageboard/views/default/messageboard/js.php,
+ mod/messages/views/default/object/messages.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/css/ie.php,
+ views/default/css/ie6.php, views/default/page/upgrade.php: Converted
+ delete-button to elgg-button-delete throughout plugins
+
+ * views/default/css/elements/forms.php, views/default/css/elements/misc.php:
+ Moved elgg-button-dropdown to forms
+
+ * views/default/css/elements/chrome.php: Cleanup of css/elements/chrome.php
+
+ * views/default/css/elements/forms.php: Converted delete-button to
+ elgg-button-delete. This breaks some things because the semantics of the two
+ are not equivalent. .delete-button just really needed to die
+
+ * views/failsafe/canvas/default.php, views/foaf/canvas/default.php,
+ views/ical/canvas/default.php, views/json/canvas/default.php,
+ views/opendd/canvas/default.php, views/php/canvas/default.php: Deleting
+ deprecated canvas/ directory from all viewtypes
+
+ * views/default/navigation/menu/default.php: DRY'ed up default menu a bit
+
+2011-02-22 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/page/shells/theme_preview.php,
+ .../views/default/page/theme_preview.php: Moved theme_preview page shell out
+ into page/
+
+ * views/default/css/elements/page_layout.php,
+ views/default/page/elements/sidebar_alt.php,
+ views/default/page/layouts/one_column.php,
+ views/default/page/layouts/one_sidebar.php,
+ views/default/page/layouts/two_sidebar.php: Trying to simplify layout css:
+ nixed elgg-aside .elgg-sidebar.elgg-alt => .elgg-sidebar-alt (similar to
+ .elgg-image-alt)
+
+ * views/default/admin/footer.php, views/default/admin/header.php,
+ views/default/page/admin.php, views/default/page/layouts/admin.php: extracted
+ admin header, footer to admin/*. Moved pageshell code from admin layout to
+ admin pageshell.
+
+ * install/css/install.css, views/installation/install/footer.php,
+ views/installation/install/header.php,
+ views/installation/install/sidebar.php, views/installation/page/default.php,
+ views/installation/page/elements/footer.php,
+ views/installation/page/elements/header.php,
+ views/installation/page/elements/sidebar.php: Move install
+ footer/header/sidebar into page/elements. Converted CSS to use more standard
+ Elgg framework objects
+
+ * views/default/page/elements/content_header.php,
+ .../page/elements/content_header_member.php: Removing holdovers from elgg.com
+
+ * views/failsafe/page/default.php, views/failsafe/page/shells/default.php,
+ views/foaf/page/default.php, views/foaf/page/shells/default.php,
+ views/ical/page/default.php, views/ical/page/shells/default.php,
+ views/installation/page/default.php,
+ views/installation/page/shells/default.php, views/json/page/default.php,
+ views/json/page/shells/default.php, views/opendd/page/default.php,
+ views/opendd/page/shells/default.php, views/php/page/default.php,
+ views/php/page/shells/default.php, views/rss/page/default.php,
+ views/rss/page/shells/default.php, views/xml/page/default.php,
+ views/xml/page/shells/default.php: Moved page/shells/* to page/*
+
+ * mod/embed/views/default/embed/css.php, views/default/css/ie.php,
+ views/default/export/entity.php: entity-listing => elgg-image-block,
+ margin-top => mtm
+
+ * mod/groups/lib/groups.php,
+ mod/groups/views/default/forms/groups/delete.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forms/groups/search.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/profile/buttons.php,
+ .../views/default/groups/profile/profile_block.php,
+ .../views/default/groups/profile/widgets.php,
+ .../views/default/groups/sidebar/members.php: Touch ups of groups plugin
+
+ * mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php,
+ mod/embed/views/default/embed/lightbox_init.php,
+ mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/embed/views/default/group/default/embed.php,
+ mod/embed/views/default/object/file/embedlist.php: Touch ups for the embed
+ plugin -- this one needs some serious work still, though...
+
+ * views/default/output/url.php: Utilizing elgg_extract in output/url
+
+ * js/lib/configuration.js: Added elgg.get_site_url(), so people don't have
+ to deal with the config object.
+
+ * mod/diagnostics/actions/download.php,
+ .../views/default/admin/utilities/diagnostics.php,
+ .../views/default/diagnostics/forms/download.php: Touch ups for diagnostics
+ plugin
+
+ * views/default/admin/plugin_settings.php,
+ views/default/core/settings/tools.php,
+ views/default/forms/plugins/settings/save.php: Deprecated
+ (user)settings/$plugin_id/edit in favor of plugins/$plugin_id/(user)settings
+
+ * mod/bookmarks/start.php: Default permissions for new actions is logged_in,
+ so no need to make that explicit
+
+ * mod/blog/lib/blog.php, mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/input/datetime.php,
+ mod/blog/views/default/js/blog/save_draft.php: Cleaned up blog js
+
+2011-02-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Fixes #2952 less silliness in Elgg now
+
+ * engine/lib/pageowner.php: Refs #2790 - fixes it for real this time
+
+ * engine/lib/pageowner.php: Fixes #2790 adds fix from 1.7 branch into trunk
+
+2011-02-22 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * crontab.example, documentation/examples/crontab.example: Moved
+ crontab.example into documentation directory
+
+2011-02-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/actions/developers/settings.php,
+ mod/developers/languages/en.php, mod/developers/manifest.xml,
+ .../views/default/admin/developers/settings.php,
+ mod/developers/views/default/developers/css.php,
+ .../views/default/forms/developers/settings.php: started adding a settings
+ page
+
+2011-02-22 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * : hmmm... how did those get there?
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/thewire/views/default/object/thewire.php,
+ views/default/object/default.php, views/default/page/layouts/content.php,
+ views/default/user/default.php: Fixes #2950: All files that were calling into
+ layout/* now use the up-to-date locations
+
+ * .../views/default/bookmarks/page_links.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/theme_preview/icons.php,
+ mod/thewire/views/default/thewire/metadata.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/core/likes/display.php, views/default/icon/user/default.php,
+ views/default/navigation/menu/metadata.php,
+ views/default/navigation/menu/site.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/page/elements/page_links.php,
+ views/default/page/elements/topbar.php,
+ views/default/river/relationship/friend/create.php: Fixes #2980: DRY'ed up
+ all plugins to use elgg_view_icon instead of generating their own html
+
+ * views/default/forms/comments/inline.php: Deprecated forms/comments/inline
+ in favor of passing inline => TRUE to forms/comments/add
+
+ * views/default/core/river/footer.php: core river footer taking advantage of
+ new DRY comment form
+
+ * engine/lib/views.php: Refs #2980: Added an elgg_view_icon function
+
+ * views/default/graphics/ajax_loader.php: Typo in ajax_loader
+
+ * views/default/navigation/listtype.php,
+ views/default/navigation/topbar_tools.php: Cleaned up some nav views
+
+ * views/default/navigation/menu/metadata.php: Refs #2950:
+ layout/objects/list/metadata => navigation/menu/metadata
+
+ * views/default/object/elements/list_body.php,
+ views/default/page/components/list/body.php,
+ views/default/page/layouts/content.php,
+ views/default/page/layouts/widgets.php: Refs #2950: update locations of
+ layout elements + moved page/components/list/body into
+ object/elements/list_body -- not sure if this will be the final location
+
+ * views/default/navigation/viewtype.php: Added appropraite @deprecated tag
+ to navigation/viewtype
+
+ * views/default/profile/icon.php: Included proper deprecation notice with
+ deprecated view
+
+ * views/default/layout/objects/list/body.php,
+ views/default/layout/objects/list/metadata.php,
+ views/default/layout/shells/content/filter.php,
+ views/default/layout/shells/content/footer.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/content/sidebar.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/layout/shells/widgets/add_panel.php,
+ views/default/page/components/list/body.php,
+ views/default/page/layouts/content/filter.php,
+ views/default/page/layouts/content/footer.php,
+ views/default/page/layouts/content/header.php,
+ views/default/page/layouts/content/sidebar.php,
+ views/default/page/layouts/widgets/add_button.php,
+ views/default/page/layouts/widgets/add_panel.php: Refs #2950: Moved /layout/
+ views into /page/ dir -- still not satisfied with page/components/list/body,
+ page/layouts/content/* and page/layouts/widgets/add_button
+
+ * views/default/forms/comments/add.php: Dry'ed up forms/comments/add a bit
+
+ * views/default/forms/comments/add.php: merged comments/inline and
+ comments/add forms
+
+ * views/default/forms/friends/edit.php: Deleted completed @todo
+
+ * pages/friends/add.php, pages/friends/edit.php,
+ views/default/forms/friends/edit.php: forms/friends/edit no longer contains
+ input/form logic
+
+ * views/default/admin/users/add.php, views/default/forms/useradd.php:
+ Extracted input/form login from forms/useradd
+
+ * engine/lib/admin.php, views/default/admin/components/invalid_plugin.php,
+ views/default/admin/components/plugin.php,
+ .../admin/components/plugin_dependencies.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugin_settings.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/core/settings/tools.php,
+ views/default/core/settings/tools/plugin.php,
+ .../forms/admin/plugins/simple_update_states.php,
+ views/default/forms/plugins/usersettings/save.php,
+ views/default/js/admin.php, views/default/object/plugin.php,
+ views/default/object/plugin/advanced.php,
+ .../object/plugin/elements/dependencies.php,
+ views/default/object/plugin/invalid.php,
+ views/default/object/plugin/simple.php: Refs #2950: Cleanup of plugin-related
+ view structure
+
+ * views/default/output/longtext.php: output/longtext can now apply arbitrary
+ html attributes to the wrapper div
+
+ * views/default/core/dashboard/blurb.php: Cleaned up core/dashboard/blurb to
+ take advantage of the new <div> wrapper around output/longtext
+
+2011-02-21 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * pages/settings/tools.php: Removed use of deprecated set_page_owner
+
+ * views/default/admin/sidebar.php, views/default/admin/sidebar/menu.php,
+ views/default/page/layouts/admin.php: Refs #2950: Cleaned up admin sidebar
+ code
+
+ * engine/lib/deprecated-1.8.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/page/elements/owner_block.php: elgg-owner-block-menu =>
+ elgg-menu-owner-block
+
+ * views/default/admin/sidebar/menu.php,
+ views/default/layout/shells/admin/menu.php,
+ views/default/page/layouts/admin.php: Refs #2950: layout/shells/admin/menu =>
+ admin/sidebar/menu
+
+ * engine/lib/views.php, views/default/page/admin.php,
+ views/default/page/default.php, views/default/page/shells/admin.php,
+ views/default/page/shells/default.php, views/default/page/shells/upgrade.php,
+ views/default/page/shells/walled_garden.php, views/default/page/upgrade.php,
+ views/default/page/walled_garden.php: Refs #2950: Move page/shells/ directly
+ under /page/ since nowhere else in views do we use a shells directory.
+
+ * views/default/layout/objects/widget/controls.php,
+ views/default/layout/objects/widget/settings.php,
+ views/default/object/widget.php,
+ views/default/object/widget/elements/controls.php,
+ views/default/object/widget/elements/settings.php,
+ views/default/page/components/widget.php: Refs #2950: Moved widget code to
+ object/widget/*
+
+2011-02-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php: Default page owner code now ignores the query.
+ Works for pages like pg/bookmarks/add/34?address=http://google.com
+
+2011-02-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: fixed caching of user avatars
+
+ * engine/lib/admin.php, engine/lib/views.php, mod/bookmarks/start.php,
+ mod/categories/start.php, mod/custom_index/start.php,
+ .../views/default/page/shells/theme_preview.php, mod/embed/start.php,
+ mod/file/start.php, mod/groups/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/search/start.php, mod/tinymce/start.php,
+ mod/twitter/start.php, mod/zaudio/start.php, views/default/css.php,
+ views/default/css/elements/layout_objects.php, views/default/css/elgg.php,
+ views/default/css/screen.php, views/default/page/shells/default.php: Fixes
+ #2934 switching to css/elgg for css view since using a print viewtype is a
+ good idea and screen would become a confusing idea
+
+ * actions/likes/add.php, engine/classes/ElggEntity.php, languages/en.php,
+ views/default/core/likes/display.php, views/default/core/river/controls.php:
+ fixes #2885 #2569 likes controlled by canAnnotate() with plugin hook
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggObject.php, engine/classes/ElggUser.php,
+ mod/blog/classes/ElggBlog.php, mod/thewire/classes/ElggWire.php,
+ mod/thewire/start.php, views/default/core/river/controls.php: Fixes #2971
+ added canComment() method and implemented it for ElggBlog
+
+2011-02-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/activate.php,
+ actions/admin/plugins/activate_all.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/deactivate_all.php,
+ actions/admin/plugins/set_priority.php,
+ actions/admin/plugins/simple_update_states.php, install/ElggInstaller.php,
+ languages/en.php: Fixes #2452. Removed the first admin installation notice.
+ It was just a reminder to his "save" on the simple plugins screen. This is
+ pretty obvious.
+
+ * engine/lib/upgrades/2010050701.php: Fixes #2310. Rewriting
+ disable_registration to allow_registration in walled garden upgrade.
+
+ * mod/bookmarks/actions/bookmarks/save.php,
+ mod/messageboard/actions/add.php,
+ mod/messageboard/views/default/messageboard/js.php: Fixes #2719. Removing
+ hack from bookmarks add. Now appends http:// to www.example.com and validates
+ that.
+
+2011-02-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/save.php, mod/blog/lib/blog.php: fixed blog sticky
+ forms
+
+ * mod/file/index.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/view.php, mod/groups/lib/discussion.php, mod/groups/start.php,
+ mod/pages/friends.php, mod/pages/index.php, mod/pages/start.php,
+ mod/thewire/start.php: Fixes #2970 updated groups, file, pages, and wire
+ plugins for automatic page owner setting
+
+ * mod/bookmarks/actions/bookmarks/save.php: fixed sticky forms for bookmarks
+
+
+ * mod/bookmarks/views/default/object/bookmarks.php: fixed copy and paste
+ error in bookmarks
+
+ * mod/blog/lib/blog.php, mod/bookmarks/pages/add.php,
+ mod/bookmarks/pages/all.php, mod/bookmarks/pages/edit.php,
+ mod/bookmarks/pages/friends.php, mod/bookmarks/pages/owner.php,
+ mod/bookmarks/pages/view.php, mod/bookmarks/start.php: Refs #2970 updated
+ blog and bookmarks plugins
+
+2011-02-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/create_upgrade.php: Fixed a few bugs with
+ create_upgrade.php. It now also automatically increments version.php.
+
+ * version.php: Refs #2049: Missed version.php.
+
+2011-02-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php: added code to figure out page owner rather than
+ explicitly setting in all the plugin page handlers
+
+2011-02-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * ..._svn-custom_profile_fields-390ac967b0bb5665.php: Fixes #2049. Created
+ migration for 1.7 custom profile fields to 1.8.
+
+ * mod/groups/actions/delete.php: Refs #2787, #2956: Merged fix for deleting
+ group icon files on group delete to trunk.
+
+ * views/default/core/river/filter.php: Refs #2697, #2956. Ported fix to show
+ users and groups in river filter to trunk.
+
+ * engine/lib/actions.php: Refs #2833, #2956. Merged 1.7's action timeout
+ changes to 1.8.
+
+ * engine/tests/regression/trac_bugs.php: Refs #2956. Merged left out merges
+ from r2799 to trunk.
+
+ * engine/lib/elgglib.php: Refs #2749, #2956. Merged elgg_depracated_notice()
+ fixes to trunk.
+
+ * engine/lib/configuration.php: Refs #2793, #2956. Ported
+ run_function_once() and datalist_get/set() changes for values > 32 chars to
+ trunk.
+
+ * engine/lib/configuration.php: Refs #2813, #2956. Ported get_config()
+ returns null to 1.8's get_config() and elgg_get_config().
+
+ * engine/lib/notification.php: Refs #2617, #2956: Merged email notification
+ exception message fix in r7926 to trunk.
+
+ * mod/file/start.php: Refs #2765, #2956. Merged r7830 fix for group files to
+ trunk.
+
+ * engine/classes/ElggEntity.php, engine/tests/objects/entities.php: Fixes
+ #2963: Rewrote ElggEntity->setMetadata() because yikes. Wrote unit tests for
+ setting metadata on saved / unsaved entities.
+
+2011-02-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/layouts/admin.php: only include footer/analytics view
+ once on admin pages
+
+2011-02-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../actions/resend_validation.php,
+ mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ .../views/default/uservalidationbyemail/js.php,
+ .../uservalidationbyemail/unvalidated_user.php: Fixes #2658. Merged
+ uservalidationbyemail changes from 1.7 to 1.8. This plugin needs cleanup.
+
+ * engine/lib/widgets.php: Fixed problems with user-self registration if
+ default widgets are set.
+
+ * js/lib/ui.js: Removing more debug code.
+
+ * js/lib/ui.js: Removing debug code from previous.
+
+ * js/lib/ui.js: Fixes #2947: User hover menu attached to body and shows
+ regardless of overflow.
+
+ * mod/bookmarks/actions/bookmarks/save.php: Fixes #2719: Addresses are
+ checked and normalized (and checked again) for bookmarks.
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/views/default/forms/messages/send.php: Can send messages to
+ non-friends.
+
+ * languages/en.php, views/default/admin/appearance/default_widgets.php:
+ Added instructions for default widgets.
+
+ * actions/widgets/add.php: No need to say the widget was added because we
+ can see it happen.
+
+ * views/default/css/admin.php: Copied all the icons into the admin theme.
+
+ * install/ElggInstaller.php: Installation loads 3 default widgets for the
+ admin dashboard.
+
+ * views/default/css/elements/icons.php: Refs #2961: Restoring old icon CSS
+ for sprites and hover menu.
+
+ * mod/messageboard/views/default/messageboard/js.php: Fixes #2962. I hate
+ ie.
+
+ * mod/messageboard/actions/add.php, mod/messageboard/actions/delete.php,
+ mod/messageboard/ajax_endpoint/load.php, mod/messageboard/history.php,
+ mod/messageboard/index.php, mod/messageboard/languages/en.php,
+ mod/messageboard/manifest.xml, mod/messageboard/pages/owner.php,
+ mod/messageboard/start.php, .../views/default/annotation/messageboard.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ .../default/messageboard/messageboard_content.php,
+ .../views/default/widgets/messageboard/content.php,
+ .../views/default/widgets/messageboard/edit.php: Refs #2916. More cleanup of
+ the messageboard widget.
+
+ * views/default/admin/appearance/default_widgets.php: Refs #2753. Missed
+ this one.
+
+ * js/lib/ajax.js: elgg.action() now supports full URLs.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/views/default/input/longtext.php: fixed tinymce "remove
+ editor" javascript
+
+ * languages/en.php: updated language string for comments
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/elgglib.js: elgg.normalize_url() JS does the same as
+ elgg_normalize_url() PHP.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/layout/shells/custom_index.php,
+ .../views/default/page/layouts/custom_index.php: updated the custom index for
+ new views layout structure
+
+ * mod/notifications/start.php: fixed the call to unextend the user settings
+ for notifications
+
+ * views/default/page/elements/messages.php: system messages use autop() for
+ formatting rather than output/longtext
+
+ * views/default/css/elements/chrome.php,
+ views/default/forms/comments/add.php,
+ views/default/page/elements/comments.php: improved the styling of the comment
+ area
+
+ * languages/en.php, mod/blog/languages/en.php, mod/blog/lib/blog.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php,
+ mod/thewire/views/default/object/thewire.php: Fixes #2824 moved byline text
+ in core language file
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js: Avatar menus use live() so they'll work with content
+ inserted into the dom.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/chrome.php,
+ views/default/css/elements/typography.php, views/default/output/longtext.php:
+ added elgg-output class for displaying user input with typical styling for
+ lists and tables
+
+ * engine/lib/views.php: fixed typo
+
+ * views/default/page/elements/comments.php: another work around to suppress
+ incorrect warnings from elgg_view()
+
+ * views/default/input/longtext.php: added a work around for injecting
+ internal* variables to handle deprecation code - this prevents warnings from
+ being emitted for no reason
+
+ * mod/bookmarks/views/default/object/bookmarks.php,
+ views/default/css/elements/icons.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php,
+ views/default/layout/objects/list/body.php,
+ views/default/output/tagcloud.php, views/default/output/tags.php: improved
+ icon css so that they do not require having display: block
+
+ * views/default/css/screen.php: removed a $CONFIG usage in css/screen view
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/annotation/generic_comment.php: Genericked up
+ annotation/generic_comment view to allow reuse in plugins.
+
+ * install/ElggInstaller.php: Fixes #2959: Removed engine/lib/install.php
+ from ElggInstaller since it's no longer required.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/likes/display.php: fixed typo on function name
+
+2011-02-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/page_layout.php,
+ views/default/css/elements/typography.php: Moving elgg-heading-main into
+ typography
+
+ * views/default/css/elements/page_layout.php: That wasn't supposed to be
+ there...
+
+ * views/default/css/elements/page_layout.php,
+ views/default/css/elements/typography.php: Moved elgg-heading-site into
+ typography
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messageboard/actions/add.php, mod/messageboard/start.php,
+ .../views/default/forms/messageboard/add.php,
+ .../views/default/messageboard/forms/add.php,
+ mod/messageboard/views/default/messageboard/js.php,
+ .../views/default/widgets/messageboard/content.php: Refs #2916: Moved
+ messageboard js into elgg.messageboard object. Moved forms into
+ forms/messageboard. Can post now, but wow this plugin needs cleaned up.
+
+2011-02-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/views/default/messages/topbar.php: More consistent way of
+ building topbar item for messages plugin
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/actions/bookmarks/save.php: sticky form wasn't being cleared
+ in bookmarks - that's fixed now
+
+ * mod/bookmarks/views/default/object/bookmarks.php: fixed display issue when
+ a bookmark has no description text
+
+2011-02-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/theme_preview/forms.php: elgg-state-selected doesn't
+ make sense for non-default buttons
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/actions/bookmarks/delete.php: fixed forward url when
+ deleting a bookmark
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixes #2905: Admin action links on user hover menu
+ asks for confirmation.
+
+ * engine/classes/ElggMenuItem.php,
+ views/default/navigation/menu/elements/item.php: Added 4 methods to
+ ElggMenuItem: get/setLinkClass() and get/setItemClass(). This allows you to
+ put classes on the a and li tags it generates.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: added documentation for the livesearch page handler
+
+2011-02-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/page/shells/theme_preview.php,
+ .../views/default/theme_preview/forms.php: More buttons in forms theme
+ preview
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js, views/default/output/confirmlink.php: Pulled the confirm
+ link output view's JS into elgg.us. Any links with elgg-requires-confirmation
+ will get a confirm box with the title of the anchor tag as the question, or
+ the default "Are you sure?" if that doesn't exist.
+
+ * views/default/input/plaintext.php: Fixed the tab that was showing up in
+ every text area.
+
+2011-02-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/search_hooks.php: removed $CONFIG usage in search hooks
+
+ * mod/pages/views/default/pages/sidebar/history.php: Fixes #2955 fixed typo
+
+ * mod/blog/lib/blog.php, mod/thewire/tests/regex.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/forms/admin/menu/save.php: Fixes #2428 last of the $CONFIG
+ removals. Anything missed can be individual tickets
+
+2011-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/wrapper.php: Fixes #2768. min-height
+ needed a little bit more for the profile widgets.
+
+ * mod/groups/start.php: Removing test group default widget code.
+
+ * actions/widgets/add.php, actions/widgets/delete.php,
+ actions/widgets/move.php, actions/widgets/save.php, engine/lib/views.php,
+ engine/lib/widgets.php, js/lib/ui.widgets.js, languages/en.php,
+ mod/defaultwidgets/actions/update.php, mod/defaultwidgets/languages/en.php,
+ mod/defaultwidgets/manifest.xml, mod/defaultwidgets/start.php,
+ .../admin/appearance/default_dashboard_widgets.php,
+ .../admin/appearance/default_profile_widgets.php,
+ .../views/default/defaultwidgets/editor.php, mod/groups/start.php,
+ mod/profile/start.php, views/default/object/plugin.php,
+ views/default/page/components/widget.php,
+ views/default/page/layouts/widgets.php: Fixes #2753: Default widgets merged
+ into core as extensible admin section and updated to work with new widgets.
+ Will need an upgrade for users running the old default widgets in 1.7.
+
+2011-02-19 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/shells/widgets/add_panel.php: clearfix > clearfloat
+
+ * mod/developers/languages/en.php, mod/developers/start.php,
+ .../views/default/page/shells/theme_preview.php,
+ .../views/default/theme_preview/header.php,
+ .../views/default/theme_preview/index.php,
+ mod/developers/views/default/theme_preview/nav.php,
+ .../views/default/theme_preview/navigation.php: theme_preview is using more
+ familiar/correct page handling practices
+
+2011-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/pageowner.js, views/default/js/elgg.php: Added stub for page owners
+ in elgg.js
+
+ * views/default/core/likes/display.php: Fixes #2953: Like button doesn't
+ show up for logged out users.
+
+ * engine/lib/entities.php: Fixing list_registered_entities() from displaying
+ things it should. You now must explicitly register object subtypes to get
+ them to display.
+
+ * views/default/forms/plugins/settings/save.php: Fixed plugin settings save
+ form.
+
+ * .../views/default/thewire/scripts/counter.js,
+ mod/twitterservice/start.php, mod/twitterservice/twitterservice_lib.php,
+ .../views/default/twitterservice/metatags.php: Removing unneeded @copyright
+ and @license tags.
+
+2011-02-18 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: Added some color to the selected state for
+ admin page menu so we can tell what page we're on
+
+ * views/default/css/admin.php, views/default/css/elements/reset.php: Added
+ overflow-y: scroll by default so that the page doesn't get jerky when an
+ animation breaks the fold
+
+ * views/default/css/admin.php: Improved the admin menu a bit
+
+2011-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/categories/manifest.xml, mod/custom_index/manifest.xml,
+ mod/defaultwidgets/manifest.xml, mod/developers/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/embed/manifest.xml,
+ mod/externalpages/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/oauth_lib/manifest.xml,
+ mod/pages/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/twitterservice/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: Updated copyright and author information in plugin
+ manifests.
+
+2011-02-18 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php, engine/start.php: Fixes #2943: Removed
+ engine/lib/install.php
+
+2011-02-18 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/twitterservice_lib.php: Adding plugin hooks for
+ authorization and login events.
+
+2011-02-18 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php, engine/lib/river.php, engine/lib/views.php,
+ .../views/default/theme_preview/objects.php,
+ views/default/core/river/body.php, views/default/layout/objects/gallery.php,
+ views/default/layout/objects/image_block.php,
+ views/default/layout/objects/list.php,
+ views/default/layout/objects/module.php,
+ views/default/layout/objects/widget.php, views/default/object/widget.php,
+ views/default/page/components/gallery.php,
+ views/default/page/components/image_block.php,
+ views/default/page/components/list.php,
+ views/default/page/components/module.php,
+ views/default/page/components/widget.php,
+ views/default/page/elements/owner_block.php, views/default/river/item.php:
+ Refs #2950: layout/objects => page/components
+
+2011-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/layouts/widgets.php: Removed unused var in widgets
+ layout.
+
+2011-02-18 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, views/default/layout/shells/admin.php,
+ views/default/layout/shells/content.php,
+ views/default/layout/shells/default.php,
+ views/default/layout/shells/one_column.php,
+ views/default/layout/shells/one_sidebar.php,
+ .../layout/shells/two_column_left_sidebar.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/layout/shells/widgets.php,
+ views/default/page/layouts/admin.php, views/default/page/layouts/content.php,
+ views/default/page/layouts/default.php,
+ views/default/page/layouts/one_column.php,
+ views/default/page/layouts/one_sidebar.php,
+ .../page/layouts/two_column_left_sidebar.php,
+ views/default/page/layouts/two_sidebar.php,
+ views/default/page/layouts/widgets.php: Refs #2950: layout/shells =>
+ page/layouts
+
+ * engine/lib/views.php, mod/search/views/default/search/list.php,
+ views/default/layout/elements/comments.php,
+ views/default/layout/elements/owner_block.php,
+ views/default/layout/elements/page_links.php,
+ views/default/layout/elements/sidebar.php,
+ views/default/layout/elements/title.php,
+ views/default/layout/shells/one_sidebar.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/page/elements/comments.php,
+ views/default/page/elements/owner_block.php,
+ views/default/page/elements/page_links.php,
+ views/default/page/elements/sidebar.php,
+ views/default/page/elements/title.php: Refs #2950: layout/elements =>
+ page/elements
+
+ * views/default/admin/statistics/overview.php: @todos for refactoring admin
+ statistics
+
+2011-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginPackage.php, languages/en.php: Fixes #2945, Refs
+ #2946. Plugins that require priority on an uninstalled plugin don't crash the
+ plugins admin.
+
+ * .../views/default/bookmarks/page_links.php: Don't show the bookmark this
+ link if you're not logged in.
+
+2011-02-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/views/default/file/css.php,
+ .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/icon/object/file.php,
+ views/default/css/elements/chrome.php,
+ views/default/css/elements/layout_objects.php: improved .elgg-gallery and
+ added .elgg-photo
+
+2011-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php: Refs #2847. Install now sets the
+ viewspath_cache_enabled.
+
+ * engine/lib/cache.php, install/ElggInstaller.php: Refs #2847. Fixed
+ simplecache settings and functionality for initial installation.
+
+ * engine/lib/database.php, engine/lib/deprecated-1.8.php,
+ engine/lib/upgrades/create_upgrade.php, engine/lib/version.php,
+ install/ElggInstaller.php, upgrade.php: Fixes #1433, #2183. Upgrades are now
+ tracked and will be run if needed regardless of version.
+
+2011-02-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/twitterservice_lib.php: Fixes faulty logic in twitter
+ services that allowed new users to register via twitter when site
+ registration was off.
+
+ * views/default/admin/components/plugin_settings.php: Fixes #2938: Restored
+ the $vars['entity'] in plugin settings for backward compatibility with
+ plugins.
+
+2011-02-17 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/components/plugin_settings.php: Cleaned up a manual
+ implementation of elgg-module
+
+2011-02-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_bookmarklet.gif, mod/bookmarks/graphics/bookmark.gif,
+ mod/bookmarks/graphics/bookmarklet.gif, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/bookmarks/js.php,
+ .../views/default/bookmarks/page_links.php: Further cleanup of bookmarks.
+ Moved bookmarklet to plugin. Pulled in the 1.7 bookmark pin and made the
+ "Bookmark this page" less ugly. Added js to append the title.
+
+ * mod/bookmarks/actions/bookmarks/edit.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/group_module.php,
+ .../default/bookmarks/groupprofile_bookmarks.php,
+ .../views/default/forms/bookmarks/save.php: Fixes #2680. Added group profile
+ bookmark widget. Fixed a problem editing bookmarks.
+
+ * mod/bookmarks/pages/owner.php: Hiding the filter tabs for bookmarks when
+ not in a filter context.
+
+ * views/default/layout/shells/content/filter.php: Fixed typo in filter nav
+ view.
+
+ * mod/bookmarks/lib/bookmarks.php, mod/bookmarks/pages/add.php,
+ mod/bookmarks/pages/edit.php, mod/bookmarks/pages/owner.php,
+ mod/bookmarks/start.php: Fixes #2680: Added group support to bookmarks
+ plugin.
+
+ * mod/bookmarks/bookmarklet.php, mod/bookmarks/languages/en.php,
+ mod/bookmarks/lib/bookmarks.php, mod/bookmarks/pages/add.php,
+ mod/bookmarks/pages/all.php, mod/bookmarks/pages/bookmarklet.php,
+ mod/bookmarks/pages/friends.php, mod/bookmarks/pages/owner.php,
+ mod/bookmarks/start.php, .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/owner_block.php,
+ mod/bookmarks/views/default/bookmarks/sharing.php,
+ .../default/river/object/bookmarks/annotate.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/edit.php: Refs #2680: Bookmarks revamp,
+ part 3: menus and bookmarklet.
+
+2011-02-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/file/views/default/object/file.php: calling the new category output view
+ in the plugins - looks like the pages plugin is missing the categories code
+
+ * mod/tinymce/start.php: added tinymce to admin css
+
+2011-02-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/widget/settings.php: Fixes #2915. Can edit
+ widget settings again.
+
+ * mod/bookmarks/actions/bookmarks/add.php,
+ mod/bookmarks/actions/bookmarks/delete.php,
+ mod/bookmarks/actions/bookmarks/save.php, mod/bookmarks/lib/bookmarks.php,
+ mod/bookmarks/pages/add.php, mod/bookmarks/pages/edit.php,
+ mod/bookmarks/pages/inbox.php, mod/bookmarks/pages/view.php,
+ mod/bookmarks/start.php, .../views/default/forms/bookmarks/save.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/widgets/bookmarks/content.php,
+ .../views/default/widgets/bookmarks/edit.php,
+ .../views/default/widgets/bookmarks/view.php: Refs #2680. Bookmarks revamp,
+ part 2.
+
+2011-02-16 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/groups/start.php, mod/messages/start.php, mod/pages/start.php,
+ mod/profile/start.php, mod/thewire/start.php: Updated
+ register_entity_url_handler => elgg_* in plugins. Used this regex:
+ ([^_a-z])register_entity_url_handler\((.*),(.*,.*)\);
+
+2011-02-15 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.7.php, engine/lib/deprecated-1.8.php,
+ engine/lib/elgglib.php, engine/lib/install.php, engine/lib/pam.php,
+ engine/lib/views.php, engine/lib/widgets.php: Moved all deprecated core
+ functions into the appropriate deprecation fine
+
+ * engine/lib/entities.php, engine/lib/users.php, mod/blog/start.php,
+ mod/bookmarks/start.php, mod/file/start.php, mod/groups/start.php,
+ mod/pages/start.php, mod/thewire/start.php: Removed all calls to deprecated
+ register_entity_type
+
+ * actions/admin/site/update_advanced.php, engine/handlers/cache_handler.php,
+ engine/lib/actions.php, engine/lib/admin.php, engine/lib/cache.php,
+ engine/lib/deprecated-1.8.php, engine/lib/upgrades/2010060101.php,
+ engine/lib/views.php, engine/start.php,
+ .../views/default/page/shells/theme_preview.php, mod/notifications/index.php,
+ mod/profile/start.php, views/default/core/friends/picker.php,
+ views/default/page/elements/head.php: Fixes #2923: Removed "view" prefix from
+ simplecache function names
+
+ * engine/lib/elgglib.php: Fixes #2695: Return false on autoload fail, rather
+ than throwing exception
+
+ * engine/lib/entities.php: Fixes #2777: delete_entity is now recursive
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php,
+ engine/lib/entities.php, engine/lib/extender.php, engine/lib/metadata.php,
+ engine/lib/relationships.php: Fixes #2860: Deprecated several registration
+ functions that were using the 'callback-first' ordering
+
+ * views/default/css/elements/grid.php: Fixes #2924: elgg-grid clearfixes
+
+ * engine/lib/entities.php: Fixes #2476: update_entity_last_action()
+ sanitizes posted time.
+
+2011-02-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Updated egef_plugin_user_settings() to accept
+ plugin_id instead of plugin_name.
+
+ * engine/lib/upgrades/2011010101.php: Fixes #2926: Fixed upgrade for plugin
+ user settings.
+
+2011-02-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/languages/en.php: added language strings for theme preview
+
+2011-02-15 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/shells/walled_garden.php: Refs #2693: Walledgarden code
+ cleanup -- Too much custom code
+
+2011-02-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/start.php,
+ mod/developers/views/default/developers/ipsum.php,
+ .../views/default/theme_preview/forms.php,
+ .../views/default/theme_preview/general.php,
+ .../views/default/theme_preview/objects.php,
+ .../views/default/theme_preview/widgets.php: moved lorem ipsum into a view
+
+2011-02-15 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/lib/blog.php, mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/input/datetime.php,
+ mod/blog/views/default/widgets/blog/edit.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ mod/bookmarks/views/default/bookmarks/sharing.php,
+ mod/categories/views/default/input/categories.php,
+ .../views/default/settings/categories/edit.php,
+ .../views/default/defaultwidgets/editor.php,
+ .../views/default/theme_preview/forms.php,
+ mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/upload/content.php,
+ .../views/default/forms/expages/edit.php,
+ mod/file/views/default/file/embed_upload.php,
+ mod/file/views/default/forms/file/upload.php,
+ mod/file/views/default/widgets/filerepo/edit.php,
+ .../default/settings/garbagecollector/edit.php,
+ mod/groups/views/default/forms/discussion/save.php,
+ mod/groups/views/default/forms/groups/delete.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forms/groups/search.php,
+ mod/groups/views/default/settings/groups/edit.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ .../views/default/settings/logrotate/edit.php, mod/messages/read.php,
+ .../views/default/forms/messages/process.php,
+ .../views/default/forms/messages/reply.php,
+ mod/messages/views/default/forms/messages/send.php,
+ .../notifications/subscriptions/forminternals.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ .../views/default/forms/reportedcontent/add.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/widgets/reportedcontent/edit.php,
+ .../views/default/widgets/tagcloud/edit.php,
+ mod/thewire/views/default/forms/thewire/add.php,
+ mod/thewire/views/default/widgets/thewire/edit.php,
+ mod/tinymce/views/default/input/longtext.php,
+ .../views/default/settings/twitterservice/edit.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ .../uservalidationbyemail/unvalidated_user.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/friends/picker.php, views/default/core/river/controls.php,
+ views/default/core/river/filter.php, views/default/core/river/footer.php,
+ .../core/settings/account/default_access.php,
+ views/default/core/settings/account/email.php,
+ views/default/core/settings/account/language.php,
+ views/default/core/settings/account/name.php,
+ .../core/settings/account/notifications.php,
+ views/default/core/settings/account/password.php,
+ views/default/forms/admin/menu/save.php,
+ views/default/forms/admin/site/update_advanced.php,
+ views/default/forms/admin/site/update_basic.php,
+ views/default/forms/avatar/crop.php, views/default/forms/avatar/upload.php,
+ views/default/forms/comments/add.php,
+ views/default/forms/comments/inline.php,
+ views/default/forms/friends/edit.php, views/default/forms/login.php,
+ views/default/forms/members/name_search.php,
+ views/default/forms/members/tag_search.php,
+ views/default/forms/plugins/settings/save.php,
+ views/default/forms/profile/edit.php,
+ views/default/forms/profile/fields/add.php, views/default/forms/register.php,
+ views/default/forms/user/passwordreset.php,
+ views/default/forms/user/requestnewpassword.php,
+ views/default/forms/useradd.php, views/default/forms/widgets/save.php,
+ views/default/graphics/ajax_loader.php, views/default/input/access.php,
+ views/default/input/checkboxes.php, views/default/input/datepicker.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/radio.php, views/default/input/securitytoken.php,
+ views/default/input/userpicker.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_panel.php,
+ views/default/navigation/tabs.php,
+ views/default/widgets/content_stats/edit.php,
+ views/default/widgets/friends/edit.php,
+ views/default/widgets/new_users/edit.php,
+ views/default/widgets/online_users/edit.php,
+ views/installation/input/access.php, views/installation/input/button.php,
+ views/installation/input/checkboxes.php,
+ views/installation/input/dropdown.php, views/installation/input/form.php,
+ views/installation/input/hidden.php, views/installation/input/longtext.php,
+ views/installation/input/password.php,
+ views/installation/input/securitytoken.php,
+ views/installation/input/text.php,
+ views/installation/install/forms/template.php: Fixes #2921: converted
+ internalname => name and internalid => id
+
+ * engine/lib/cache.php, engine/lib/views.php: Fixes #2920: Moved simplecache
+ functions into cache.php
+
+ * engine/classes/ElggBatch.php, engine/classes/ElggPluginManifest.php,
+ engine/lib/admin.php, engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/lib/metastrings.php, engine/lib/plugins.php, engine/lib/river.php,
+ engine/lib/views.php, engine/lib/xml.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/forms/file/upload.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/forms/discussion/save.php,
+ mod/groups/views/default/groups/edit.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/messages/views/default/forms/messages/send.php,
+ mod/messages/views/default/object/messages.php,
+ mod/pages/views/default/object/page_top.php,
+ .../views/default/pages/sidebar/navigation.php,
+ mod/profile/views/default/profile/owner_block.php,
+ mod/thewire/views/default/forms/thewire/add.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/metadata.php,
+ mod/uservalidationbyemail/start.php,
+ .../uservalidationbyemail/unvalidated_user.php,
+ views/default/admin/components/invalid_plugin.php,
+ .../admin/components/plugin_dependencies.php,
+ views/default/annotation/generic_comment.php,
+ views/default/forms/plugins/settings/save.php,
+ views/default/forms/widgets/save.php, views/default/icon/user/default.php,
+ views/default/input/checkboxes.php, views/default/input/radio.php,
+ views/default/layout/elements/comments.php,
+ views/default/layout/objects/gallery.php,
+ views/default/layout/objects/image_block.php,
+ views/default/layout/objects/list.php,
+ views/default/layout/objects/list/body.php,
+ views/default/layout/objects/list/metadata.php,
+ views/default/layout/objects/module.php,
+ views/default/layout/objects/widget.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/shells/content.php,
+ views/default/layout/shells/content/filter.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_panel.php,
+ views/default/navigation/breadcrumbs.php,
+ views/default/navigation/menu/elements/group.php,
+ views/default/navigation/menu/user_hover.php,
+ views/default/navigation/pagination.php, views/default/navigation/tabs.php,
+ views/default/object/plugin.php, views/default/output/confirmlink.php,
+ views/default/output/longtext.php, views/default/output/url.php,
+ views/default/page/elements/body.php, views/default/profile/icon.php,
+ views/rss/layout/objects/list.php: Fixes #2808: elgg_get_array_value =>
+ elgg_extract
+
+ * js/lib/userpicker.js, views/default/input/autocomplete.php,
+ views/default/input/userpicker.php: Refs #2102: addressing more
+ userpicker/autocomplete bugs
+
+ * views/default/input/autocomplete.php: Refs #2102: Some input/autocomplete
+ fixes
+
+ * documentation/stubs/config.php, engine/handlers/page_handler.php,
+ engine/lib/admin.php, engine/lib/cron.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/input.php, engine/lib/pagehandler.php,
+ engine/lib/river.php, engine/lib/tags.php, engine/lib/user_settings.php,
+ engine/lib/users.php, js/lib/friends_picker.js, mod/blog/start.php,
+ mod/bookmarks/start.php, mod/categories/start.php, mod/developers/start.php,
+ mod/diagnostics/start.php, mod/embed/start.php, mod/externalpages/start.php,
+ mod/file/start.php, mod/groups/start.php, mod/invitefriends/start.php,
+ mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/search/start.php, mod/thewire/start.php,
+ mod/twitterservice/start.php, mod/uservalidationbyemail/start.php: Replaced
+ all occurrences of register_page_handler in core with
+ elgg_register_page_handler
+
+ * views/default/js/friendsPickerv1.php: Friendspicker was moved to
+ js/lib/friends_picker.js
+
+ * js/lib/userpicker.js, views/default/input/userpicker.php: Refs #2102:
+ Replace input/userpicker with jQuery UI autocomplete
+
+ * htaccess_dist: Combining two rewrite rules into one
+
+2011-02-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/autocomplete.js, views/default/input/autocomplete.php: Refs #2102:
+ Replaced input/autocomplete with jQuery UI autocomplete (untested)
+
+ * engine/lib/deprecated-1.8.php, engine/lib/pagehandler.php: Prepended elgg_
+ to (un)register_page_handler() functions. Deprecated old ones
+
+ * views/default/js/initialize_elgg.php,
+ views/default/page/elements/head.php: Views in the js/ directory should not
+ contain <script> tags
+
+2011-02-14 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/twitterservice_lib.php: Saving avatar filename with
+ user GUID instead of old-style username.
+
+2011-02-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/elgg.php: Removed unnecessary deprecated javascript
+ function
+
+ * js/lib/languages.js, js/lib/session.js, js/lib/ui.widgets.js: No need for
+ double-namespacing of javascript functions
+
+ * mod/developers/views/default/developers/css.php: Give the css preview a
+ little more vertical breathing room
+
+ * engine/lib/views.php: Refs #2610: Custom template handler for views now
+ sent through call_user_func
+
+ * engine/lib/views.php: Refs #2124: Adding backwards compatibility
+ conversions for internalname/internalid
+
+ * views/default/page/elements/body.php,
+ views/default/page/elements/footer.php,
+ views/default/page/elements/header.php,
+ views/default/page/elements/messages.php,
+ views/default/page/elements/topbar.php, views/default/page/shells/admin.php,
+ views/default/page/shells/default.php: Cleaned up views/default/page/
+ directory
+
+ * engine/lib/views.php, vendors/jquery/jquery-1.4.2.min.js,
+ vendors/jquery/jquery-1.5.min.js, vendors/jquery/jquery-ui-1.7.2.min.js,
+ vendors/jquery/jquery-ui-1.8.9.min.js: Refs #2525: jQuery => 1.5, jQuery UI
+ => 1.8.9
+
+ * views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php,
+ views/default/css/elements/modules.php: More cleanup of login/forms css --
+ converted login_dropdown to use elgg-toggler pattern
+
+ * js/lib/ui.js: Fixes #2902: Added elgg-toggler pattern.
+
+2011-02-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: remove some unused css from admin theme
+
+2011-02-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggBatch.php: Clearing caches in ElggBatch.
+
+ * engine/handlers/cache_handler.php: Cache handler won't serve up cached
+ pages if caching is disabled. Refs #2758: Added call to
+ elgg_view_regenerate_simplecache() on cache misses if cache is enabled.
+ Leaving #2758 open in case Cash has a better idea since he's more familiar
+ with the simple cache changes.
+
+ * engine/classes/ElggEntity.php, engine/lib/metadata.php: Removed last of
+ deprecated metadata calls in trunk.
+
+ * actions/comments/delete.php, actions/likes/delete.php,
+ actions/profile/edit.php, engine/classes/ElggAnnotation.php,
+ engine/classes/ElggEntity.php, engine/classes/ElggRiverItem.php,
+ engine/handlers/export_handler.php, engine/lib/annotations.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/tests/api/entity_getter_functions.php,
+ engine/tests/api/metastrings.php, engine/tests/regression/trac_bugs.php,
+ mod/blog/lib/blog.php, mod/messageboard/actions/delete.php,
+ mod/pages/revision.php: Updated trunk to use new annotation functions. Added
+ checks for annotations_* options vs annotation_* options because it's so easy
+ to confuse.
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggUser.php,
+ engine/lib/entities.php: Fixes #2918. Moved annotation/metadata delete
+ functions from ElggUser to ElggEntity. When deleted, entities now correctly
+ delete metadata they own as well as metadata on them. Removed uses of
+ deprecated functions.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php: More fixes to annotations/metadata changes. Now
+ all function support getting via a metastring id.
+
+ * engine/lib/relationships.php: Fixes #2914. Merged fix for r.time_created
+ sorting to trunk.
+
+2011-02-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/developers/start.php, .../views/default/theme_preview/forms.php,
+ .../views/default/theme_preview/header.php, views/default/icon/default.php:
+ getting rid of some warnings in theme preview
+
+ * mod/developers/start.php, .../views/default/admin/developers/preview.php,
+ .../views/default/theme_preview/forms.php,
+ .../views/default/theme_preview/general.php,
+ .../views/default/theme_preview/grid.php,
+ .../views/default/theme_preview/header.php,
+ .../views/default/theme_preview/icons.php,
+ mod/developers/views/default/theme_preview/nav.php,
+ .../views/default/theme_preview/objects.php,
+ .../views/default/theme_preview/widgets.php: Refs #2903 navigation updated
+ for theme preview
+
+2011-02-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php,
+ engine/lib/elgglib.php, engine/lib/metadata.php,
+ engine/tests/api/metastrings.php,
+ mod/pages/views/default/object/page_top.php: Refs #2912. Added checks for
+ constraints in dangerous functions. Unit tests no longer remove all
+ metadata/annotations.
+
+2011-02-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/theming/preview/forms.php,
+ documentation/theming/preview/general.php,
+ documentation/theming/preview/grid.php,
+ documentation/theming/preview/head.php,
+ documentation/theming/preview/icons.php,
+ documentation/theming/preview/index.php,
+ documentation/theming/preview/nav.php,
+ documentation/theming/preview/objects.php,
+ documentation/theming/preview/widgets.php, mod/developers/start.php,
+ .../views/default/page/shells/theme_preview.php,
+ .../views/default/theme_preview/forms.php,
+ .../views/default/theme_preview/general.php,
+ .../views/default/theme_preview/grid.php,
+ .../views/default/theme_preview/icons.php,
+ .../views/default/theme_preview/index.php,
+ mod/developers/views/default/theme_preview/nav.php,
+ .../views/default/theme_preview/objects.php,
+ .../views/default/theme_preview/widgets.php: Refs #2903 moving theme preview
+ into developers plugin - navigation and titles are broken
+
+2011-02-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php, engine/lib/entities.php,
+ engine/tests/objects/entities.php: Deprecated ElggEntity->clearMetadata() by
+ ElggEntity->deleteMetadata(). Disabling entities now disables their
+ annotations and metadata. Enabling entities enables annotations and metadata.
+ Fixes #1115.
+
+ * engine/classes/ElggBatch.php: If using a callback in ElggBatch, make sure
+ there's an initial value to return.
+
+ * engine/lib/metastrings.php: Allowing metastrings_type for metastring-based
+ object functions.
+
+2011-02-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: added tabs to admin theme
+
+ * mod/externalpages/actions/add.php, mod/externalpages/actions/addfront.php,
+ mod/externalpages/actions/edit.php, mod/externalpages/index.php,
+ mod/externalpages/languages/en.php, mod/externalpages/manifest.xml,
+ mod/externalpages/read.php, mod/externalpages/start.php,
+ .../views/default/expages/analytics.php,
+ mod/externalpages/views/default/expages/css.php,
+ .../views/default/expages/footer_menu.php,
+ .../views/default/expages/forms/edit.php,
+ .../views/default/expages/forms/editfront.php,
+ .../views/default/expages/front_left.php,
+ .../views/default/expages/front_right.php,
+ mod/externalpages/views/default/expages/menu.php,
+ .../views/default/forms/expages/edit.php,
+ mod/externalpages/views/default/object/expages.php: updates externalpages to
+ 1.8
+
+2011-02-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggMetadata.php, engine/lib/annotations.php,
+ engine/lib/deprecated-1.8.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/tests/api/metastrings.php: Refs #2907. DRY'd up and abstracted out a
+ lot of metadata / annotation functions so I can implement #1115 with a clean
+ conscious.
+
+2011-02-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/externalpages/actions/add.php, mod/externalpages/actions/addfront.php,
+ mod/externalpages/index.php, mod/externalpages/languages/en.php,
+ mod/externalpages/manifest.xml, mod/externalpages/read.php,
+ mod/externalpages/start.php, .../views/default/expages/analytics.php,
+ mod/externalpages/views/default/expages/css.php,
+ .../views/default/expages/footer_menu.php,
+ .../views/default/expages/forms/edit.php,
+ .../views/default/expages/forms/editfront.php,
+ .../views/default/expages/front_left.php,
+ .../views/default/expages/front_right.php,
+ mod/externalpages/views/default/expages/menu.php,
+ mod/externalpages/views/default/object/expages.php, mod/sitepages/README.txt,
+ mod/sitepages/actions/edit_settings.php, mod/sitepages/index.php,
+ mod/sitepages/languages/en.php, mod/sitepages/manifest.xml,
+ mod/sitepages/sitepages_functions.php, mod/sitepages/start.php,
+ .../views/default/admin/site/sitepages.php,
+ .../views/default/canvas/layouts/frontpage.php,
+ mod/sitepages/views/default/sitepages/css.php,
+ .../views/default/sitepages/custom_frontpage.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ .../views/default/sitepages/keywords/sitestats.php,
+ .../views/default/sitepages/keywords/userlist.php,
+ mod/sitepages/views/default/sitepages/members.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/sitepages/views/default/sitepages/metatags.php,
+ mod/sitepages/views/default/sitepages/sidebar.php,
+ mod/sitepages/views/default/sitepages/welcome.php: swapping sitepages for
+ externalpages since the external pages is easier to integrate into 1.8 .
+ sitepages needs more work before it is ready for release (plus we would need
+ an upgrade script)
+
+ * engine/lib/entities.php: Refs #2301 demoting type:subtype warnings to
+ notices
+
+ * actions/email/save.php, actions/user/default_access.php,
+ actions/user/language.php, actions/user/name.php, actions/user/password.php,
+ engine/lib/user_settings.php, engine/lib/users.php,
+ views/default/core/settings/account/language.php,
+ views/default/forms/account/settings.php: Fixes #2848 pulls user settings
+ code out of actions into functions. We should investigate putting them in a
+ library that is only loaded on demand
+
+ * engine/lib/user_settings.php, engine/lib/usersettings.php,
+ engine/start.php, install/ElggInstaller.php: user settings library is now
+ user_settings.php
+
+ * engine/lib/admin.php: documentation update for admin functions
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/admin.php, languages/en.php,
+ views/default/layout/shells/admin/menu.php: admin menu uses weights for
+ ordering
+
+2011-02-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggBatch.php: Additional checking in ElggBatch for valid
+ key.
+
+2011-02-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/confirmlink.php, views/default/output/dropdown.php,
+ views/default/output/email.php, views/default/output/pulldown.php,
+ views/default/output/radio.php, views/default/output/text.php,
+ views/default/output/url.php: Fixed #2218 finished up the encoding issues by
+ turning of double encoding
+
+ * mod/categories/views/default/categories/css.php,
+ mod/categories/views/default/input/categories.php: categories are listed
+ horizontally
+
+2011-02-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggBatch.php: Added ability to get results of callback
+ function in ElggBatch.
+
+ * engine/classes/ElggBatch.php: Fixed ElggBatch problems when specifying a
+ limit of 0. Fixed a shoot yourself in the foot situation if passing a dumb
+ number to chunk size.
+
+ * engine/classes/ElggBatch.php: Added ElggBatch class for more efficient
+ batch operations on large sets of Elgg* objects.
+
+2011-02-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/shells/admin.php: added the footer analytics view for
+ js
+
+ * mod/custom_index/index.php, mod/custom_index/languages/en.php,
+ mod/custom_index/manifest.xml, mod/custom_index/start.php,
+ .../views/default/canvas/layouts/new_index.php,
+ .../views/default/custom_index/css.php,
+ .../views/default/layout/shells/custom_index.php: updated custom index for
+ 1.8
+
+2011-02-13 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/account/login_dropdown.php,
+ views/default/css/elements/misc.php: Renamed signin to elgg-button-dropdown
+
+ * views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/misc.php, views/default/css/elements/modules.php,
+ views/default/forms/login.php: Progress refactoring the login dropdown and
+ login forms -- not quite there yet, though Added another module: dropdown.
+
+2011-02-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/custom_index/index.php, mod/custom_index/languages/en.php,
+ mod/custom_index/manifest.xml, mod/custom_index/start.php,
+ .../views/default/canvas/layouts/new_index.php,
+ .../views/default/custom_index/css.php: moved custom_index back into core
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/layout_objects.php: Updated docs for
+ layout_objects
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php, views/default/core/river/footer.php: Refs
+ #650. Replaced count_annotations().
+
+ * mod/pages/views/default/pages/sidebar/history.php,
+ views/default/core/likes/display.php, views/default/core/river/controls.php,
+ views/default/layout/elements/comments.php: Refs #650. Replaced
+ list_annotations() by elgg_list_annotations().
+
+ * engine/classes/ElggEntity.php, engine/lib/views.php,
+ mod/messageboard/history.php: Updated a few recent calls to
+ elgg_get_annotations() to use 'reverse_order_by' => true.
+
+ * engine/lib/metastrings.php: Refs #2906. Missed a file.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php: Fixes #2906. Added
+ elgg_sql_reverse_order_by() and wired it up to ege() and ega(). Pass
+ 'reverse_order_by' => true in option arrays.
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php, mod/thewire/actions/delete.php,
+ mod/thewire/add.php, mod/thewire/everyone.php, mod/thewire/index.php,
+ mod/thewire/languages/en.php, mod/thewire/manifest.xml,
+ mod/thewire/pages/everyone.php, mod/thewire/pages/friends.php,
+ mod/thewire/pages/previous.php, mod/thewire/pages/reply.php,
+ mod/thewire/pages/tag.php, mod/thewire/pages/thread.php,
+ mod/thewire/pages/user.php, mod/thewire/readme.txt, mod/thewire/start.php,
+ mod/thewire/tests/regex.php, mod/thewire/views/default/forms/thewire/add.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/thewire/views/default/thewire/metadata.php,
+ mod/thewire/views/default/thewire/notfound.php,
+ .../views/default/thewire/profile_status.php,
+ mod/thewire/views/default/thewire/reply.php,
+ mod/thewire/views/default/thewire/view.php,
+ .../views/default/widgets/thewire/content.php,
+ mod/thewire/views/default/widgets/thewire/edit.php: a mostly completed port
+ of JHU/APL wire plugin to 1.8
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php, engine/lib/annotations.php,
+ engine/lib/views.php, engine/tests/objects/entities.php,
+ mod/messageboard/history.php, views/default/core/likes/display.php,
+ views/default/core/river/controls.php, views/default/core/river/footer.php:
+ Refs #650. Replaced calls to get_annotations() by elgg_get_annotations().
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/details.php: added the status view into
+ details on profile page
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php, engine/lib/users.php,
+ views/default/forms/profile/edit.php: Refs #650. Replaced uses for
+ get_metadata_byname() by elgg_get_metadata()
+
+ * engine/classes/ElggMetadata.php, engine/handlers/export_handler.php,
+ engine/lib/deprecated-1.8.php, engine/lib/metadata.php: Refs #650. Changed
+ elgg_get_metadata_by_id() to elgg_get_metadata_from_id() to be consistent
+ with other functions.
+
+ * engine/classes/ElggMetadata.php, engine/handlers/export_handler.php,
+ engine/lib/metadata.php: Refs #650. Replaced get_metadata() by
+ elgg_get_metadata_by_id()
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggFile.php,
+ engine/lib/metadata.php, engine/lib/notification.php,
+ views/default/export/entity.php: Refs #650: Replaced uses of
+ get_metadata_for_entity() by elgg_get_metadata().
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/list/body.php: allow plugins to decline the
+ addition of tags to their entity list view
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php, engine/lib/metadata.php: Deprecated
+ get_metadata() by elgg_get_metadata_by_id() to avoid confusion with
+ elgg_get_metadata(). Not in love with the name...had considered
+ elgg_get_metadatum(). Open to suggestions.
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php: Refs #650: Deprecated
+ find_metadata() with elgg_get_metadata(). Deprecated
+ get_metadata_for_entity() and get_metadata_byname() <twitch>. Added
+ elgg_get_metastrings_based_objects() to deal with the commonalities between
+ the metadata and annotation getter functions.
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/checkboxes.php: Label wraps checkbox for usability
+
+ * mod/minify/lib/min/.htaccess, mod/minify/lib/min/README.txt,
+ mod/minify/lib/min/builder/_index.js, mod/minify/lib/min/builder/bm.js,
+ mod/minify/lib/min/builder/index.php, mod/minify/lib/min/builder/ocCheck.php,
+ mod/minify/lib/min/builder/rewriteTest.js, mod/minify/lib/min/config.php,
+ mod/minify/lib/min/groupsConfig.php, mod/minify/lib/min/index.php,
+ mod/minify/lib/min/lib/CSS.php, mod/minify/lib/min/lib/FirePHP.php,
+ mod/minify/lib/min/lib/HTTP/ConditionalGet.php,
+ mod/minify/lib/min/lib/HTTP/Encoder.php, mod/minify/lib/min/lib/JSMin.php,
+ mod/minify/lib/min/lib/JSMinPlus.php, mod/minify/lib/min/lib/Minify.php,
+ mod/minify/lib/min/lib/Minify/Build.php,
+ mod/minify/lib/min/lib/Minify/CSS/Compressor.php,
+ mod/minify/lib/min/lib/Minify/CSS/UriRewriter.php,
+ mod/minify/lib/min/lib/Minify/Cache/APC.php,
+ mod/minify/lib/min/lib/Minify/Cache/File.php,
+ mod/minify/lib/min/lib/Minify/Cache/Memcache.php,
+ mod/minify/lib/min/lib/Minify/CommentPreserver.php,
+ mod/minify/lib/min/lib/Minify/Controller/Base.php,
+ mod/minify/lib/min/lib/Minify/Controller/Files.php,
+ .../lib/min/lib/Minify/Controller/Groups.php,
+ .../lib/min/lib/Minify/Controller/MinApp.php,
+ mod/minify/lib/min/lib/Minify/Controller/Page.php,
+ .../lib/min/lib/Minify/Controller/Version1.php,
+ mod/minify/lib/min/lib/Minify/HTML.php,
+ mod/minify/lib/min/lib/Minify/ImportProcessor.php,
+ mod/minify/lib/min/lib/Minify/Lines.php,
+ mod/minify/lib/min/lib/Minify/Logger.php,
+ mod/minify/lib/min/lib/Minify/Packer.php,
+ mod/minify/lib/min/lib/Minify/Source.php,
+ mod/minify/lib/min/lib/Minify/YUICompressor.php,
+ mod/minify/lib/min/lib/Solar/Dir.php, mod/minify/lib/min/utils.php,
+ mod/minify/manifest.xml, mod/minify/start.php: Doh, how did this get here?
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/examples/plugins/manifest.xml,
+ engine/tests/test_files/plugin_18/manifest.xml: Refs #2898: Updated docs and
+ test manifest for the xmlns changes.
+
+ * engine/classes/ElggPluginManifest.php, mod/blog/manifest.xml,
+ mod/bookmarks/manifest.xml, mod/categories/manifest.xml,
+ mod/defaultwidgets/manifest.xml, mod/developers/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/embed/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/minify/manifest.xml, mod/notifications/manifest.xml,
+ mod/oauth_lib/manifest.xml, mod/pages/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/sitepages/manifest.xml, mod/tagcloud/manifest.xml,
+ mod/thewire/manifest.xml, mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/twitterservice/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: Refs #2898: Using an XML namespace instead of
+ version attribute on plugin manifests.
+
+ * mod/twitterservice/languages/en.php,
+ mod/twitterservice/twitterservice_lib.php,
+ .../views/default/settings/twitterservice/edit.php: Cleaned up more
+ twitterservice code. Twitter usernames now have random digits appended upon
+ name collision. Added the option for admins to allow twitter sign up even if
+ site registration is disabled.
+
+ * actions/admin/user/delete.php: Deleting a user from his profile forwards
+ to the right page.
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/delete.php, mod/file/actions/file/upload.php,
+ mod/pages/actions/pages/delete.php: Fixed #2887 redirects on blog, file, and
+ pages works now - bookmarks plugin still needs plenty of work
+
+ * mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, .../actions/reportedcontent/add.php,
+ .../actions/reportedcontent/archive.php,
+ .../actions/reportedcontent/delete.php, mod/reportedcontent/start.php,
+ .../views/default/forms/reportedcontent/add.php,
+ .../views/default/reportedcontent/form.php: updated reported content to use
+ elgg_view_form
+
+ * views/default/css/admin.php,
+ views/default/forms/admin/site/update_advanced.php,
+ views/default/forms/admin/site/update_basic.php,
+ views/default/forms/avatar/crop.php, views/default/forms/avatar/upload.php,
+ views/default/forms/comments/add.php, views/default/forms/friends/edit.php,
+ views/default/forms/login.php, views/default/forms/plugins/settings/save.php,
+ views/default/forms/profile/edit.php, views/default/forms/register.php,
+ views/default/forms/user/requestnewpassword.php,
+ views/default/forms/useradd.php, views/default/forms/usersettings/save.php,
+ views/default/forms/widgets/save.php, views/default/group/default.php: Refs
+ #2032 core forms use divs
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/widgets/blog/edit.php,
+ mod/categories/views/default/input/categories.php,
+ .../views/default/forms/diagnostics/download.php,
+ mod/file/views/default/forms/file/upload.php,
+ mod/file/views/default/widgets/filerepo/edit.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ .../views/default/forms/invitefriends/invite.php,
+ .../views/default/forms/messages/reply.php,
+ mod/messages/views/default/forms/messages/send.php,
+ .../forms/notificationsettings/groupsave.php,
+ .../default/forms/notificationsettings/save.php,
+ .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/personal.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/widgets/reportedcontent/edit.php,
+ .../default/usersettings/twitterservice/edit.php: updated the plugins that
+ have already been updated to 1.8 html/css to use divs rather than p tags in
+ forms
+
+ * mod/groups/views/default/forms/groups/delete.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/edit.php: pulled delete form out of edit view
+ for groups
+
+ * mod/groups/views/default/forms/discussion/save.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ views/default/css/elements/forms.php: recommended to use <div> in forms for
+ wrapping content - added css to support that and updated all group forms
+
+ * views/default/input/form.php: moved security tokens to top of form so we
+ can use :last-child
+
+ * views/default/input/access.php: fixed another bug from last night
+
+ * views/default/input/plaintext.php, views/default/input/radio.php: fixing a
+ few bugs introduced last night in the input views
+
+ * mod/bookmarks/languages/en.php: fixed enable group bookmarks language
+ string
+
+ * views/default/input/checkboxes.php, views/default/input/radio.php: Refs
+ #1393 added work around note to checkboxes and radio inputs for integer
+ labels
+
+ * views/default/css/elements/forms.php, views/default/input/checkboxes.php,
+ views/default/input/radio.php: Fixes #972 checkboxes and radio input fields
+ support horizontal and vertical alignments
+
+ * mod/blog/lib/blog.php: blog object wasn't being passed to the form view
+
+ * engine/lib/output.php: fixed bug in elgg_format_attributes() that caused
+ none string values to be ignored
+
+ * views/default/input/form.php: reverted part of [8148] that broke all forms
+
+
+ * views/default/admin/components/plugin_settings.php,
+ views/default/forms/plugins/settings/save.php: continued cleaning up admin
+ plugin settings
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/radio.php: Fixes #2143: DRYed up input/radio -- other
+ views still should be addressed, but not because they aren't DRY, therefore
+ I'm calling this ticket closed
+
+ * views/default/input/checkbox.php, views/default/input/form.php,
+ views/default/input/password.php, views/default/input/pulldown.php: Refs
+ #2143: General cleanup of input views
+
+ * views/default/input/access.php: Refs #2143: DRYed up input/access -- wow,
+ that feels good
+
+ * views/default/input/longtext.php: Refs #2143: DRYed up input/longtext --
+ maybe I missed it, but was there a difference b/w plaintext and longtext?
+
+ * views/default/input/plaintext.php: Refs #2143: DRYed up input/plaintext
+
+ * views/default/input/dropdown.php: Refs #2143: DRYed up input/dropdown --
+ probably could be better still
+
+ * views/default/input/hidden.php: Refs #2143: DRY up input/hidden
+
+ * views/default/input/password.php: Refs #2143: DRYed up input/password
+
+ * views/default/input/file.php: Refs #2143: DRYed up input/file
+
+ * engine/lib/deprecated-1.8.php, engine/lib/entities.php:
+ register_entity_url_handler => elgg_register_entity_url_handler (because
+ every other reigstration function asks for the callback last)
+
+ * engine/lib/entities.php, engine/lib/extender.php,
+ engine/lib/relationships.php: Refs #2610: Using call_user_func in url hooks
+
+ * engine/lib/pagehandler.php: Page handler uses call_user_func (so methods
+ of classes can be used as page handlers)
+
+2011-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/start.php, mod/twitterservice/twitterservice_lib.php:
+ Twitter services now allows login with twitter properly for a single user.
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php: Added
+ elgg_get_entities_from_plugin_user_settings(). Added a name_prefix option to
+ elgg_get_entities_from_private_settings().
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/theming/preview/objects.php, engine/lib/views.php,
+ mod/blog/views/default/blog/group_module.php,
+ mod/blog/views/default/blog/sidebar/archives.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/sidebar/featured.php,
+ mod/groups/views/default/groups/sidebar/find.php,
+ .../views/default/groups/sidebar/members.php,
+ mod/pages/views/default/pages/group_module.php,
+ mod/pages/views/default/pages/sidebar/history.php,
+ .../views/default/pages/sidebar/navigation.php,
+ views/default/core/members/sidebar.php, views/default/core/river/body.php,
+ views/default/layout/elements/owner_block.php,
+ views/default/layout/shells/admin/menu.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/output/tagcloud.php: Fixes #2904: Converted most
+ elgg_view('layout/objects/module') instances to elgg_view_module()
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/head.php, views/default/page/shells/admin.php,
+ views/default/page/shells/default.php,
+ views/default/page/shells/walled_garden.php: pulled <head> out into page
+ shell also
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Added an elgg_view_module shortcut function -- now
+ to try it out!
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/topbar.php: fixed topbar html
+
+2011-02-12 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Added missing @deprecated tags to a couple
+ functions
+
+ * engine/lib/deprecated-1.8.php, engine/lib/views.php: set_view_location =>
+ elgg_set_view_location (to match elgg_get_view_location)
+
+ * views/default/spotlight/default.php: Bye bye spotlight
+
+ * engine/lib/users.php: One more conversion to elgg_view_form
+
+ * .../views/default/diagnostics/forms/download.php,
+ .../views/default/forms/diagnostics/download.php,
+ mod/file/views/default/file/embed_upload.php,
+ mod/file/views/default/forms/file/upload.php,
+ .../views/default/forms/invitefriends/invite.php,
+ .../views/default/invitefriends/form.php,
+ .../views/default/invitefriends/formitems.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/minify/lib/min/.htaccess, mod/minify/lib/min/README.txt,
+ mod/minify/lib/min/builder/_index.js, mod/minify/lib/min/builder/bm.js,
+ mod/minify/lib/min/builder/index.php, mod/minify/lib/min/builder/ocCheck.php,
+ mod/minify/lib/min/builder/rewriteTest.js, mod/minify/lib/min/config.php,
+ mod/minify/lib/min/groupsConfig.php, mod/minify/lib/min/index.php,
+ mod/minify/lib/min/lib/CSS.php, mod/minify/lib/min/lib/FirePHP.php,
+ mod/minify/lib/min/lib/HTTP/ConditionalGet.php,
+ mod/minify/lib/min/lib/HTTP/Encoder.php, mod/minify/lib/min/lib/JSMin.php,
+ mod/minify/lib/min/lib/JSMinPlus.php, mod/minify/lib/min/lib/Minify.php,
+ mod/minify/lib/min/lib/Minify/Build.php,
+ mod/minify/lib/min/lib/Minify/CSS/Compressor.php,
+ mod/minify/lib/min/lib/Minify/CSS/UriRewriter.php,
+ mod/minify/lib/min/lib/Minify/Cache/APC.php,
+ mod/minify/lib/min/lib/Minify/Cache/File.php,
+ mod/minify/lib/min/lib/Minify/Cache/Memcache.php,
+ mod/minify/lib/min/lib/Minify/CommentPreserver.php,
+ mod/minify/lib/min/lib/Minify/Controller/Base.php,
+ mod/minify/lib/min/lib/Minify/Controller/Files.php,
+ .../lib/min/lib/Minify/Controller/Groups.php,
+ .../lib/min/lib/Minify/Controller/MinApp.php,
+ mod/minify/lib/min/lib/Minify/Controller/Page.php,
+ .../lib/min/lib/Minify/Controller/Version1.php,
+ mod/minify/lib/min/lib/Minify/HTML.php,
+ mod/minify/lib/min/lib/Minify/ImportProcessor.php,
+ mod/minify/lib/min/lib/Minify/Lines.php,
+ mod/minify/lib/min/lib/Minify/Logger.php,
+ mod/minify/lib/min/lib/Minify/Packer.php,
+ mod/minify/lib/min/lib/Minify/Source.php,
+ mod/minify/lib/min/lib/Minify/YUICompressor.php,
+ mod/minify/lib/min/lib/Solar/Dir.php, mod/minify/lib/min/utils.php,
+ mod/minify/manifest.xml, mod/minify/start.php, mod/notifications/groups.php,
+ .../forms/notificationsettings/groupsave.php,
+ .../default/forms/notificationsettings/save.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../forms/uservalidationbyemail/bulk_action.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/river/footer.php, views/default/core/settings/account.php,
+ views/default/forms/admin/site/update_advanced.php,
+ views/default/forms/admin/site/update_basic.php,
+ views/default/forms/friends/edit.php,
+ views/default/forms/user/passwordreset.php, views/default/forms/useradd.php,
+ views/default/forms/usersettings/save.php,
+ views/default/forms/widgets/save.php,
+ views/default/layout/objects/widget/settings.php,
+ views/installation/install/forms/admin.php,
+ views/installation/install/forms/database.php,
+ views/installation/install/forms/settings.php: Converted most forms to use
+ elgg_view_form (therefore also moved the views to forms/*). Some views are
+ left that _only_ do elgg_view_form, so I wonder if those should even be kept
+ around.
+
+2011-02-12 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/twitterservice_lib.php: Registering forward() calls to
+ a plugin-specific reason for use in plugin hooks.
+
+2011-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php, mod/embed/start.php,
+ mod/embed/views/default/embed/addcontentjs.php,
+ mod/embed/views/default/embed/lightbox_init.php,
+ mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/metatags.php: light clean up on the embed
+ plugin which doesn't appear to work at present
+
+2011-02-11 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Typo correction: @deprecate => @deprecated
+
+ * mod/blog/views/default/js/blog/save_draft.php,
+ .../views/default/widgets/bookmarks/view.php,
+ .../views/default/defaultwidgets/editor.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/gallery.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/metatags.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/file/views/default/file/embed_upload.php,
+ .../views/default/groups/profile/widgets.php,
+ .../views/default/widgets/messageboard/content.php,
+ .../views/default/forms/messages/process.php,
+ .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/jsfuncs.php,
+ .../views/default/pages/sidebar/navigation.php,
+ mod/profile/views/default/profile/wrapper.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/tinymce/views/default/tinymce/init.php,
+ mod/zaudio/views/default/zaudio/audioplayer.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/friends/collection.php,
+ views/default/core/friends/collections.php,
+ views/default/core/friends/collectiontabs.php,
+ views/default/core/friends/picker.php,
+ .../default/core/friends/tablelistcountupdate.php,
+ views/default/core/river/filter.php, views/default/forms/avatar/crop.php,
+ views/default/forms/register.php,
+ views/default/forms/user/requestnewpassword.php,
+ views/default/input/autocomplete.php, views/default/input/datepicker.php,
+ views/default/input/userpicker.php,
+ views/installation/install/forms/template.php: Added disapproving @todo's
+ wherever I could find javascript not conforming to 1.8 conventions
+
+2011-02-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/categories/actions/save.php, mod/categories/languages/en.php,
+ mod/categories/listing.php, mod/categories/readme.txt,
+ mod/categories/start.php, mod/categories/views/default/categories.php,
+ mod/categories/views/default/categories/list.php,
+ mod/categories/views/default/categories/view.php,
+ mod/categories/views/default/input/categories.php,
+ mod/categories/views/default/output/categories.php,
+ .../views/default/settings/categories/edit.php: some clean up of the
+ categories plugin - html/css polish needed
+
+2011-02-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Fixes #2888: Plugins are checked for validity in
+ elgg_get_plugins(). It won't return broken plugins unless specifically
+ requested.
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php: Moved
+ list_entities_from_annotation_count_by_metadata() to deprecated-18.php.
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php: Refs #650.
+ Added 'annotation_calculation' to elgg_get_annotations(). Deprecated
+ list_annotations() by elgg_list_annotations(). Deprecated get_annotations_*()
+ by elgg_get_annotations() and passing annotation_calculation.
+
+ * engine/lib/entities.php: Added $viewer callback option for
+ elgg_list_entities().
+
+ * engine/lib/views.php: Fixed doc spacing that was throwing errors in PHP
+ Code Sniffer.
+
+2011-02-11 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/page_layout.php,
+ views/default/page/shells/admin.php, views/default/page/shells/default.php:
+ elgg-classic => elgg-page-classic, elgg-admin => elgg-page-admin
+
+ * views/default/css/elements/layout_objects.php,
+ views/default/css/elements/modules.php, views/default/css/screen.php: Added
+ css/elements/modules.php. Modules and widgets deserve their own space.
+
+ * views/default/admin/components/plugin.php, views/default/css/admin.php,
+ views/default/page/shells/default.php: Cleaned up admin advanced plugins view
+ a bit
+
+ * views/default/page/elements/head.php,
+ views/default/page/elements/html_begin.php,
+ views/default/page/elements/html_end.php,
+ views/default/page/shells/admin.php, views/default/page/shells/default.php,
+ views/default/page/shells/walled_garden.php: Fixes #1303: Pulled
+ html_begin/end into page shells. extracted <head> element into
+ page/elements/head
+
+ * mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/categories/manifest.xml, mod/defaultwidgets/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/embed/manifest.xml, mod/file/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/invitefriends/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/oauth_lib/manifest.xml,
+ mod/pages/manifest.xml, mod/reportedcontent/manifest.xml,
+ mod/search/manifest.xml, mod/sitepages/manifest.xml,
+ mod/tagcloud/manifest.xml, mod/thewire/manifest.xml,
+ mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/twitterservice/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: Converted all manifest files to 1.8 style
+
+2011-02-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/deprecated-1.8.php: Moved
+ get_annotations() to deprecated-1.8.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/tests/api/entity_getter_functions.php: Refs #650. Deprecated
+ get_annotations() for elgg_get_annotations().
+
+2011-02-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/diagnostics/start.php: not outputing all the plugin information in
+ diagnostics plugin due to new plugin system structure
+
+ * engine/lib/admin.php: Fixes #2872 - returned plugin settings menu to
+ working order
+
+2011-02-11 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php,
+ .../forms/admin/plugins/simple_update_states.php: Cleanup of basic plugins
+ area
+
+ * views/default/admin/components/invalid_plugin.php,
+ views/default/admin/components/plugin.php, views/default/css/admin.php,
+ .../forms/admin/plugins/simple_update_states.php, views/default/js/admin.php:
+ More cleanup of admin/plugins css
+
+ * views/default/admin/components/plugin.php,
+ .../admin/components/plugin_dependencies.php, views/default/css/admin.php:
+ elgg-$state-dependency => elgg-state-(error|success)
+
+ * views/default/output/rss_view.php: Removed unused view: output/rss_view
+
+ * .../uservalidationbyemail/unvalidated_user.php: Converted hardcoded styles
+ to css primitives
+
+2011-02-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/reset.php, views/default/input/submit.php: Removed
+ nonsensical comments
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ .../notifications/subscriptions/forminternals.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/core/settings/account.php,
+ views/default/css/elements/chrome.php,
+ views/default/page/elements/topbar.php: Added border primitives
+ "b<loc><type>" where type is "a" or "b" -- anyone want to choose better
+ names? :)
+
+ * mod/blog/views/default/forms/blog/save.php:
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/groups/views/default/groups/edit.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php: disabled =>
+ elgg-state-disabled in plugins (only found in blog and groups)
+
+ * views/default/admin/plugins/simple.php,
+ .../forms/admin/plugins/simple_update_states.php: Moved the simple plugins
+ admin form to the forms/ dir
+
+ * views/default/admin/components/plugin.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/css/admin.php, views/default/css/elements/forms.php,
+ views/default/forms/profile/fields/reset.php,
+ views/default/page/shells/walled_garden.php,
+ views/installation/install/nav.php: .disabled => .elgg-state-disabled (core
+ only)
+
+ * views/default/admin/plugins/advanced.php: Using spacing primitives rather
+ than <br/>
+
+ * views/default/css/admin.php: Corrected minor problem with admin tables
+
+ * views/default/forms/plugins/settings/save.php,
+ views/default/forms/plugins/usersettings/save.php,
+ views/default/object/plugin.php: Plugin settings forms now use the forms/
+ directory
+
+2011-02-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/navigation.php: fixed access issue on menu name
+
+2011-02-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/theming/preview/forms.php, mod/blog/lib/blog.php,
+ mod/blog/views/default/forms/blog/save.php,
+ .../views/default/admin/utilities/diagnostics.php, mod/file/index.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/edit.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/groups/profile/buttons.php, mod/messages/read.php,
+ .../views/default/forms/messages/process.php, mod/pages/view.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/owner_block.php,
+ .../views/default/object/reported_content.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/friends/picker.php, views/default/css/admin.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php,
+ views/default/forms/profile/fields/reset.php, views/default/input/button.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/page/elements/content_header.php,
+ views/installation/input/button.php: Converted buttons to elgg-object-type
+ naming convention. Added table of buttons to forms theming preview meant for
+ previewing all button types and states (still have to implement those...)
+
+2011-02-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php, mod/garbagecollector/start.php,
+ mod/groups/actions/edit.php, mod/groups/views/default/forms/groups/edit.php,
+ mod/logrotate/start.php, mod/sitepages/start.php,
+ mod/twitterservice/start.php, mod/twitterservice/twitterservice_lib.php,
+ .../views/default/twitterservice/metatags.php,
+ views/default/core/settings/tools/plugin.php: Refs #2874. Finished removing
+ calls to deprecated plugin mgmt functions in core and core plugins.
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ engine/lib/admin.php, engine/lib/deprecated-1.8.php, engine/lib/plugins.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/core/settings/tools.php,
+ views/default/core/settings/tools/plugin.php,
+ views/default/object/plugin.php: Refs #2874: More removal of deprecated
+ function user in plugins systems.
+
+ * engine/classes/ElggPlugin.php, engine/lib/deprecated-1.8.php,
+ engine/lib/plugins.php: Refs #2869, #2874. Renamed ElggPlugin::remove*
+ functions to unset*. Added ElggPlugin::getAllUserSettings() and
+ getAllSettings(). Deprecated all plugin settings and user setting functions
+ with correctly named functions.
+
+2011-02-09 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/helpers.php: Slightly more efficient way of
+ declaring spacing helpers
+
+2011-02-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/manifest.xml, mod/messages/manifest.xml, mod/pages/manifest.xml,
+ mod/search/manifest.xml: updated version number
+
+2011-02-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, engine/lib/plugins.php: Refs #2869: Fixed
+ problems when deleting user settings using wrapper function.
+
+ * engine/classes/ElggPluginPackage.php, engine/lib/admin.php,
+ mod/diagnostics/start.php, pages/settings/tools.php,
+ views/default/core/settings/tools.php,
+ views/default/core/settings/tools/plugin.php,
+ views/default/object/plugin.php: Refs #2874: Using elgg_get_plugins() instead
+ of get_installed_plugins().
+
+ * engine/classes/ElggPlugin.php: Fixed typo that break
+ ElggPlugin::isActive().
+
+ * engine/lib/input.php, engine/lib/upgrades/2010050701.php,
+ engine/lib/upgrades/2010100500.php, mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/link.php, mod/notifications/start.php,
+ mod/sitepages/index.php, mod/thewire/start.php, mod/twitterservice/start.php,
+ views/default/core/settings/tools.php: Refs #2874: Using
+ elgg_is_active_plugin() in core and bundled plugins.
+
+2011-02-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php, engine/lib/deprecated-1.8.php,
+ engine/lib/plugins.php: Fixes #2858: is_plugin_enabled() is deprecated by
+ elgg_is_active_plugin() instead of ElggPlugin::isActive().
+
+ * engine/classes/ElggPlugin.php, engine/lib/plugins.php: Fixes #2869: User
+ settings for plugins work again.
+
+2011-02-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/languages/de.php, mod/tagcloud/languages/en.php,
+ mod/tagcloud/manifest.xml, mod/tagcloud/start.php, mod/tagcloud/tagcloud.php,
+ mod/tagcloud/views/default/tagcloud/css.php,
+ .../views/default/widgets/tagcloud/content.php,
+ .../views/default/widgets/tagcloud/edit.php: cleaned up tagcloud plugin
+
+ * mod/search/start.php, .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/list.php: updated search plugin for new
+ html/css
+
+ * .../views/default/admin/utilities/diagnostics.php: ahhh...missed this one
+ too
+
+ * mod/logbrowser/views/default/logbrowser/form.php: missed this file in the
+ admin backend update last night
+
+ * engine/lib/views.php, views/default/layout/elements/title.php: added a
+ class variable to title view
+
+2011-02-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginPackage.php: Fixes #2863: Can now use all 6 dep
+ types with conflicts.
+
+ * engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser18.php,
+ engine/classes/ElggPluginPackage.php, engine/lib/plugins.php,
+ engine/tests/api/plugins.php, engine/tests/test_files/plugin_18/manifest.xml,
+ languages/en.php, views/default/admin/components/plugin.php,
+ .../admin/components/plugin_dependencies.php, views/default/css/admin.php:
+ Added suggests to the plugins deps system. It parallels the requires system,
+ but doesn't affect if the plugin can be enabled and only shows up in the deps
+ table on the advanced view.
+
+ * engine/classes/ElggPluginManifest.php: Running plugins' blurb,
+ description, name, and screenshot->description through elgg_echo().
+
+2011-02-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/layout/shells/admin.php,
+ views/default/page/shells/admin.php: rough system messages implementation for
+ admin backend
+
+ * js/lib/ui.js, views/default/admin/components/plugin_settings.php,
+ views/default/admin/statistics/overview.php,
+ views/default/admin/users/newest.php, views/default/admin/users/online.php,
+ views/default/css/admin.php, views/default/forms/admin/menu/save.php,
+ views/default/forms/useradd.php, views/default/layout/shells/admin.php,
+ views/default/layout/shells/admin/menu.php: updates for the admin css based
+ on the reworking I did to the html
+
+ * .../views/default/reportedcontent/footer_link.php,
+ views/default/annotation/generic_comment.php,
+ views/default/css/elements/forms.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/typography.php, views/default/icon/default.php,
+ views/default/input/form.php, views/default/navigation/menu/user_hover.php,
+ views/default/output/tagcloud.php: bringing us a little closer to validating
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ .../notifications/subscriptions/forminternals.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/core/settings/account.php,
+ views/default/css/elements/chrome.php: a tiny amount of progress on the css
+ chrome element view
+
+ * js/lib/ui.js, views/default/css/elements/chrome.php,
+ views/default/css/elements/forms.php, views/default/css/elements/grid.php,
+ views/default/css/elements/helpers.php, views/default/css/elements/icons.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php,
+ views/default/css/elements/typography.php,
+ views/default/layout/elements/page_links.php,
+ views/default/layout/objects/image_block.php,
+ views/default/navigation/menu/page.php,
+ views/default/navigation/menu/site.php,
+ views/default/navigation/menu/user_hover.php,
+ views/default/page/elements/footer.php: more tweaking of css - menu and
+ general clean up
+
+ * views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php,
+ views/default/layout/shells/content/header.php,
+ views/default/page/elements/header_logo.php: starting to standardize on
+ elgg-<type>-<subtype> for css such as elgg-heading-site
+
+2011-02-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/chrome.php,
+ views/default/css/elements/forms.php,
+ views/default/css/elements/page_layout.php,
+ views/default/css/elements/reset.php,
+ views/default/css/elements/typography.php: removed some old css no longer
+ supported by modern browsers
+
+2011-02-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/profile/fields/add.php, actions/profile/fields/edit.php,
+ engine/lib/admin.php, .../admin/appearance/profile_fields/list.php,
+ views/default/css/admin.php, views/default/js/admin.php: Pulled elgg-icon and
+ elgg-icon-* into the admin css. Pulled out profile field JS into elgg.admin
+ obj. Fixed editing profile field names.
+
+ * _graphics/elgg_sprites.png, documentation/theming/preview/icons.php,
+ views/default/css/elements/icons.php: Added dragger icon.
+
+2011-02-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: fixed typo in plugin library
+
+ * languages/en.php, mod/search/index.php, mod/search/start.php,
+ mod/search/views/default/search/list.php,
+ mod/search/views/default/search/listing.php: Fixes 2354 Using list instead of
+ listing for search now
+
+ * mod/search/index.php, mod/search/start.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/entity_list.php,
+ mod/search/views/default/search/gallery.php,
+ .../views/default/search/gallery_listing.php,
+ mod/search/views/default/search/layout.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/search_box.php,
+ mod/search/views/default/search/startblurb.php,
+ mod/search/views/rss/search/comments/entity.php,
+ mod/search/views/rss/search/entity.php,
+ mod/search/views/rss/search/layout.php,
+ mod/search/views/rss/search/listing.php: Fixes #2335 #2336 clean up and minor
+ standardization of search plugin - needs html/css clean up
+
+2011-02-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php, views/default/js/admin.php: Added
+ drag and drop reordering of plugins. Started pulling out admin area's js into
+ elgg.admin JS object.
+
+2011-02-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/input.php: moved sticky forms into the
+ input library
+
+2011-02-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/entity.php,
+ views/default/entities/entity_list.php,
+ views/default/entities/entity_listing.php,
+ views/default/entities/gallery.php,
+ views/default/entities/gallery_listing.php, views/default/entities/list.php,
+ views/default/entities/list_item.php, views/default/graphics/icon.php,
+ views/default/object/default.php: removing old entities views that are no
+ longer needed and did the last changes for the icon system
+
+ * mod/groups/icon.php, mod/groups/start.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/groups/profile/profile_block.php: updated the groups plugin
+ to use the new icon structure
+
+ * engine/lib/views.php, mod/file/start.php,
+ mod/file/views/default/file/icon.php,
+ .../default/file/icon/application/default.php,
+ .../views/default/file/icon/application/excel.php,
+ .../views/default/file/icon/application/msword.php,
+ .../views/default/file/icon/application/pdf.php,
+ .../default/file/icon/application/powerpoint.php,
+ .../default/file/icon/application/vnd.ms-excel.php,
+ .../file/icon/application/vnd.ms-powerpoint.php,
+ .../application/vnd.oasis.opendocument.text.php,
+ .../views/default/file/icon/application/x-gzip.php,
+ .../file/icon/application/x-rar-compressed.php,
+ .../default/file/icon/application/x-stuffit.php,
+ .../views/default/file/icon/application/zip.php,
+ mod/file/views/default/file/icon/archive.php,
+ mod/file/views/default/file/icon/audio.php,
+ mod/file/views/default/file/icon/audio/default.php,
+ mod/file/views/default/file/icon/default.php,
+ mod/file/views/default/file/icon/document.php,
+ mod/file/views/default/file/icon/text/default.php,
+ .../views/default/file/icon/text/directory.php,
+ mod/file/views/default/file/icon/text/v-card.php,
+ mod/file/views/default/file/icon/video.php,
+ mod/file/views/default/file/icon/video/default.php,
+ mod/file/views/default/object/file.php, views/default/icon/default.php:
+ updated the file plugin to use the new icon structure
+
+ * engine/classes/ElggUser.php, engine/lib/actions.php,
+ engine/lib/database.php, engine/lib/deprecated-1.7.php,
+ engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/lib/relationships.php, engine/lib/widgets.php: fixed some minor
+ documentation issues
+
+ * mod/bookmarks/views/default/object/bookmarks.php: missed this use of
+ elgg_count_comments() in change to ->countComments()
+
+2011-02-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPlugin.php: Fixed bug when trying to set a plugin's
+ priority to 1 without using "first."
+
+2011-02-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php, engine/lib/elgglib.php,
+ engine/lib/views.php, mod/blog/views/default/object/blog.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/pages/views/default/object/page_top.php,
+ views/default/core/likes/display.php: moved the count comments and likes
+ functions into the ElggEntity class
+
+ * engine/lib/views.php, mod/file/edit.php, mod/messages/read.php: Fixes
+ #2854 removing my bad idea of auto-appending action in elgg_view_form()
+
+ * mod/pages/actions/pages/delete.php, mod/pages/start.php,
+ .../views/default/icon/object/page/medium.php,
+ mod/pages/views/default/icon/object/page/small.php,
+ .../views/default/icon/object/page_top/medium.php,
+ .../views/default/icon/object/page_top/small.php,
+ mod/pages/views/default/pages/icon.php: Fixes #2853 pages plugin uses the
+ icon url plugin hook and fixes delete action
+
+ * documentation/theming/preview/objects.php, js/lib/elgglib.js,
+ .../core/settings/statistics/numentities.php,
+ views/default/core/settings/statistics/online.php,
+ views/default/css/elements/chrome.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/page_layout.php,
+ views/default/page/elements/messages.php: more css/html improvements - added
+ .elgg-table and a featured module
+
+ * views/default/input/access.php, views/default/input/checkboxes.php,
+ views/default/input/datepicker.php, views/default/input/dropdown.php,
+ views/default/input/email.php, views/default/input/hidden.php,
+ views/default/input/longtext.php, views/default/input/plaintext.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/input/userpicker.php: Fixes #2510 sticky forms is finish - Elgg
+ 1.9 could have a ElggForm class that makes it even easier to use a sticky
+ form
+
+2011-02-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/theming/preview/objects.php, engine/lib/views.php,
+ mod/blog/views/default/blog/group_module.php,
+ mod/blog/views/default/blog/sidebar/archives.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ .../default/groups/profile/activity_module.php,
+ .../views/default/groups/sidebar/featured.php,
+ mod/groups/views/default/groups/sidebar/find.php,
+ .../views/default/groups/sidebar/members.php,
+ .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/personal.php,
+ mod/pages/views/default/pages/group_module.php,
+ mod/pages/views/default/pages/sidebar/history.php,
+ .../views/default/pages/sidebar/navigation.php,
+ views/default/core/likes/display.php, views/default/core/members/sidebar.php,
+ .../core/settings/account/default_access.php,
+ views/default/core/settings/account/email.php,
+ views/default/core/settings/account/language.php,
+ .../core/settings/account/notifications.php,
+ views/default/core/settings/account/password.php,
+ .../core/settings/statistics/numentities.php,
+ views/default/core/settings/statistics/online.php,
+ views/default/core/settings/tools/plugin.php,
+ views/default/css/elements/chrome.php, views/default/css/elements/grid.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/page_layout.php,
+ views/default/css/elements/reset.php, views/default/output/tagcloud.php:
+ using elgg-module-<type>
+
+ * views/default/icon/user/default/large.php,
+ views/default/icon/user/default/master.php,
+ views/default/icon/user/default/medium.php,
+ views/default/icon/user/default/small.php,
+ views/default/icon/user/default/tiny.php,
+ views/default/icon/user/default/topbar.php, views/default/profile/hover.php:
+ a little clean up of unnecessary views
+
+ * documentation/theming/preview/icons.php, engine/classes/ElggEntity.php,
+ engine/lib/deprecated-1.8.php, engine/lib/entities.php, engine/lib/input.php,
+ engine/lib/users.php, engine/lib/views.php, js/lib/ui.js,
+ mod/pages/views/default/pages/icon.php, views/default/css/elements/icons.php,
+ views/default/input/userpicker.php, views/default/page/elements/topbar.php,
+ views/default/profile/icon.php, views/foaf/page/shells/default.php: Fixes
+ #2559 refs #2475 added ElggEntity:getIconURL() and elgg_view_entity_icon()
+
+2011-02-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php, views/default/css/admin.php: The
+ screenshot desc is now used. Small css changes.
+
+ * views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php, views/default/css/admin.php: Better
+ displaying of full screenshots in plugins admin.
+
+ * engine/classes/ElggPluginPackage.php, engine/lib/plugins.php: Fixes #2852:
+ Checking other plugins' conflicts to see if plugin is able to be activated in
+ ElggPluginPackage->checkDependencies(). Some language clarification in admin
+ panel.
+
+2011-02-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/theming/preview/widgets.php: fixed widgets theming preview
+ by overriding some javascript
+
+ * engine/classes/ElggEntity.php: supporting private settings before an
+ entity is saved
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggWidget.php,
+ engine/lib/users.php: using setPrivateSetting() and getPrivateSetting()
+ instead of procedural functions
+
+ * views/default/css/elements/icons.php,
+ views/default/graphics/ajax_loader.php: fixed ajax loader css and html
+
+ * documentation/css/preview/forms.php,
+ documentation/css/preview/general.php, documentation/css/preview/grid.php,
+ documentation/css/preview/head.php, documentation/css/preview/icons.php,
+ documentation/css/preview/index.php, documentation/css/preview/nav.php,
+ documentation/css/preview/objects.php, documentation/css/preview/widgets.php,
+ documentation/theming/preview/forms.php,
+ documentation/theming/preview/general.php,
+ documentation/theming/preview/grid.php,
+ documentation/theming/preview/head.php,
+ documentation/theming/preview/icons.php,
+ documentation/theming/preview/index.php,
+ documentation/theming/preview/nav.php,
+ documentation/theming/preview/objects.php,
+ documentation/theming/preview/widgets.php, mod/developers/languages/en.php,
+ .../views/default/admin/developers/preview.php: changed named from css
+ preview to theming preview
+
+ * documentation/css/preview/forms.php,
+ documentation/css/preview/general.php, documentation/css/preview/grid.php,
+ documentation/css/preview/icons.php, documentation/css/preview/nav.php,
+ documentation/css/preview/objects.php, documentation/css/preview/widgets.php:
+ better navigation for theming previews
+
+ * documentation/css/preview/grid.php, documentation/css/preview/icons.php,
+ js/lib/ui.js, views/default/css/elements/grid.php,
+ views/default/css/elements/icons.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/navigation.php, views/default/js/elgg.php,
+ views/default/profile/hover.php: cleaned up hover menu
+
+ * mod/blog/views/default/forms/blog/save.php,
+ views/default/css/elements/base.php, views/default/css/elements/chrome.php,
+ views/default/css/elements/core.php, views/default/css/elements/forms.php,
+ views/default/css/elements/helpers.php,
+ views/default/css/elements/layout.php,
+ views/default/css/elements/layout_objects.php,
+ views/default/css/elements/misc.php,
+ views/default/css/elements/page_layout.php,
+ views/default/css/elements/spacing.php,
+ views/default/css/elements/typography.php, views/default/css/screen.php,
+ views/default/page/elements/header_logo.php: getting back to the css - making
+ changes based on Evan's comments
+
+ * documentation/css/preview/forms.php,
+ documentation/css/preview/general.php, documentation/css/preview/grid.php,
+ documentation/css/preview/icons.php, documentation/css/preview/images.php,
+ documentation/css/preview/index.php, documentation/css/preview/nav.php,
+ documentation/css/preview/objects.php, documentation/css/preview/widgets.php:
+ cleaned up navigation of the css preview documentation
+
+ * mod/developers/start.php, .../views/default/admin/developers/preview.php,
+ mod/developers/views/default/developers/css.php: setting size for iframe for
+ css preview
+
+ * views/default/css/admin.php, views/default/layout/shells/admin.php:
+ removed unecessary inner div for .elgg-main because of switch back to
+ overflow: hidden
+
+2011-02-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Fixed a problem with detecting conflicting plugin
+ versions. Not showing a stray = when versions aren't specified in conflicts
+ and requires.
+
+2011-02-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, views/default/admin/components/plugin.php,
+ views/default/css/admin.php: Added support for screenshots in the advanced
+ plugin admin.
+
+ * engine/classes/ElggPlugin.php: Fixed typo that caused ElggPlugin->path not
+ to be correctly set when loading from a plugin id.
+
+ * documentation/examples/plugins/manifest.xml,
+ engine/classes/ElggPluginManifest.php, engine/classes/ElggPluginPackage.php,
+ engine/lib/plugins.php, engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_18/manifest.xml: Renamed 'name' to 'plugin'
+ for priority req. Updated unit tests and docs.
+
+ * documentation/examples/plugins/manifest.xml: Added priority requires to
+ example manifest.
+
+ * engine/lib/plugins.php, languages/en.php,
+ views/default/admin/components/plugin.php: Fixed problems showing detected
+ values for plugin conflicts. Clarified language for what the first value
+ column means.
+
+ * engine/classes/ElggMenuItem.php, engine/classes/ElggPlugin.php,
+ engine/classes/ElggPluginManifest.php, engine/classes/ElggPluginPackage.php,
+ engine/lib/plugins.php, languages/en.php,
+ .../admin/components/plugin_dependencies.php, views/default/css/admin.php:
+ Added new priority 'requires' for plugin dep system. You can now say that a
+ plugin is required to be after / before another plugin in the system.
+
+2011-02-04 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggData.php: I'm a dummy -- getType and getSubtype are
+ taken care of by Loggable...
+
+ * engine/classes/ElggData.php: Added type and subtype abstract functions to
+ ElggData
+
+2011-02-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Fixes #2822: Added missing language string.
+
+ * engine/classes/ElggPluginPackage.php, engine/lib/deprecated-1.8.php,
+ engine/lib/plugins.php: Fixes #2820, Fixes #2823. Using elgg_get_plugins() in
+ elgg_get_plugins_provides(). Fixed plugin conflicts system. Removed cruft
+ from ElggPluginPackage. Fixed deprecated get_installed_plugins() to honor the
+ type requested.
+
+2011-02-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/deprecated-1.8.php: Updated elgg_get_plugin_path in
+ load_plugin_manifest to elgg_get_plugins_path
+
+ * mod/profile/start.php, mod/sitepages/views/default/sitepages/css.php,
+ pages/dashboard.php, views/default/layout/shells/widgets.php: Changed widgets
+ layout "box" parameter to "content" just like the other layouts
+
+2011-02-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/css/preview/forms.php, install/ElggInstaller.php,
+ mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/input/datetime.php,
+ mod/blog/views/default/widgets/blog/edit.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/file/views/default/widgets/filerepo/edit.php,
+ .../default/settings/garbagecollector/edit.php,
+ mod/groups/views/default/forms/discussion/save.php,
+ mod/groups/views/default/settings/groups/edit.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ .../views/default/settings/logrotate/edit.php,
+ mod/messages/views/default/forms/messages/send.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ .../views/default/widgets/reportedcontent/edit.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ .../views/default/widgets/tagcloud/edit.php,
+ .../views/default/settings/twitterservice/edit.php,
+ .../views/default/admin/users/unvalidated.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/core/river/filter.php,
+ views/default/core/settings/account/language.php,
+ views/default/css/admin.php, views/default/forms/admin/menu/save.php,
+ views/default/input/access.php, views/default/input/dropdown.php,
+ views/default/input/pulldown.php, views/default/output/dropdown.php,
+ views/default/output/pulldown.php,
+ views/default/widgets/content_stats/edit.php,
+ views/default/widgets/friends/edit.php,
+ views/default/widgets/new_users/edit.php,
+ views/default/widgets/online_users/edit.php,
+ views/installation/input/access.php, views/installation/input/dropdown.php,
+ views/installation/input/pulldown.php: changed input/pulldown to
+ input/dropdown
+
+ * engine/lib/tags.php, engine/lib/views.php, engine/tests/ui/submenu.php,
+ mod/bookmarks/bookmarklet.php, mod/thewire/add.php, mod/thewire/everyone.php,
+ mod/thewire/index.php, pages/friends/edit.php,
+ .../layout/shells/one_column_with_sidebar.php: removed
+ one_column_with_sidebar layout - use one_sidebar instead
+
+ * engine/lib/views.php, mod/categories/views/default/categories.php,
+ mod/categories/views/default/categories/list.php,
+ .../views/default/sitepages/keywords/userlist.php: removed uses of
+ $vars[config] in views
+
+ * engine/lib/output.php, .../views/default/twitterservice/login.php,
+ .../views/default/admin/users/unvalidated.php: removes uses of $vars[url]
+ from core and plugins
+
+ * engine/lib/views.php: Fixes #2124 only setting $vars[user], $vars[url],
+ and $vars[config] in elgg_view() if not already set
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginPackage.php,
+ engine/lib/configuration.php, engine/lib/plugins.php, mod/blog/start.php,
+ mod/categories/start.php, mod/defaultwidgets/start.php,
+ mod/developers/start.php, mod/diagnostics/start.php,
+ mod/file/actions/file/download.php, mod/file/start.php, mod/groups/icon.php,
+ mod/groups/start.php, mod/invitefriends/start.php,
+ mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php,
+ mod/reportedcontent/start.php, mod/sitepages/start.php,
+ mod/thewire/start.php, mod/twitterservice/start.php,
+ views/default/admin/components/plugin.php: changed elgg_get_plugin_path() to
+ elgg_get_plugins_path()
+
+ * engine/lib/configuration.php, mod/categories/start.php,
+ mod/defaultwidgets/start.php, mod/diagnostics/start.php,
+ mod/groups/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/search/start.php, mod/twitterservice/languages/en.php,
+ mod/twitterservice/twitterservice_lib.php,
+ .../default/usersettings/twitterservice/edit.php: Refs #2428 just a few more
+ CONFIG uses left to be replaced
+
+ * mod/categories/actions/save.php,
+ .../views/default/settings/categories/edit.php, mod/file/start.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/delete.php,
+ mod/groups/actions/featured.php, mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/icon.php,
+ mod/invitefriends/actions/invite.php,
+ .../views/default/invitefriends/formitems.php, mod/notifications/start.php,
+ mod/pages/start.php, mod/profile/icon.php, mod/profile/start.php,
+ mod/sitepages/sitepages_functions.php, mod/twitterservice/start.php,
+ mod/twitterservice/twitterservice_lib.php,
+ .../default/usersettings/twitterservice/edit.php,
+ mod/uservalidationbyemail/lib/functions.php: Refs #2428 almost done removing
+ CONFIG access - mostly plugin start.php left
+
+2011-02-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/actions/add.php, mod/bookmarks/actions/bookmarks/add.php,
+ mod/bookmarks/actions/bookmarks/delete.php,
+ mod/bookmarks/actions/bookmarks/edit.php, mod/bookmarks/actions/delete.php,
+ mod/bookmarks/actions/edit.php, mod/bookmarks/actions/reference.php,
+ mod/bookmarks/actions/remove.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/languages/en.php, mod/bookmarks/pages/add.php,
+ mod/bookmarks/pages/all.php, mod/bookmarks/pages/friends.php,
+ mod/bookmarks/pages/inbox.php, mod/bookmarks/pages/owner.php,
+ mod/bookmarks/pages/view.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ .../default/bookmarks/groupprofile_bookmarks.php,
+ .../views/default/bookmarks/owner_block.php,
+ mod/bookmarks/views/default/bookmarks/sharing.php,
+ mod/bookmarks/views/default/bookmarks/stats.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/river/object/bookmarks/annotate.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/bookmarks/views/rss/object/bookmarks.php: Refs #2680: First pass at
+ porting the 1.7 bookmarks to 1.8. Functional, but code is still messy.
+
+ * engine/lib/actions.php: Added more info to the @params documentation for
+ elgg_register_action.
+
+2011-02-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ .../core/settings/account/default_access.php,
+ views/default/core/settings/account/language.php,
+ views/default/forms/login.php, views/default/input/button.php,
+ views/default/js/initialize_elgg.php,
+ views/default/page/elements/html_begin.php,
+ views/default/page/elements/html_end.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/rss/page/shells/default.php,
+ views/xml/messages/exceptions/exception.php: Refs #2428 removed some uses of
+ CONFIG in the views
+
+ * views/default/css/elements/navigation.php,
+ views/default/navigation/pagination.php: Fixes #2802 put state class on list
+ element rather than span
+
+ * install/ElggInstaller.php: fixes #2784 for real this time
+
+ * install/ElggInstaller.php: Fixes #2784 #2842 installer uses new plugin
+ system now
+
+2011-02-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/manifest.xml, mod/bookmarks/manifest.xml,
+ mod/defaultwidgets/manifest.xml, mod/embed/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/logbrowser/manifest.xml,
+ mod/logrotate/manifest.xml, mod/messageboard/manifest.xml,
+ mod/messages/manifest.xml, mod/notifications/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/search/manifest.xml,
+ mod/tinymce/manifest.xml, mod/uservalidationbyemail/manifest.xml,
+ mod/zaudio/manifest.xml: updated the plugin manifest files to use the new
+ variable name for activation on installation
+
+2011-02-02 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, views/default/river/item.php: Fixes #2846:
+ elgg_view_river_item calls river/item view first.
+
+ * views/default/core/river/body.php: Adding quotes to "constant" item
+
+2011-02-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Fixes #2844 setting table for access_id to fix fatal
+ error
+
+ * mod/groups/actions/edit.php, mod/groups/start.php,
+ mod/groups/views/default/forms/groups/edit.php: moved name out of
+ configurable fields for a group
+
+ * mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/edit.php: more clean up of the group edit
+ form
+
+ * mod/groups/lib/groups.php, mod/groups/start.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/edit.php: a little clean up of the groups
+ edit form
+
+ * .../layout/shells/two_column_left_sidebar.php,
+ views/default/page/shells/default.php: backward compatibility code for
+ plugins that add admin pages
+
+ * languages/en.php: added a string from 1.7 profile plugin into core for
+ backward compatibility
+
+2011-02-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page/elements/html_begin.php: Puts css before js in the
+ head, per website performance best practices
+
+ * engine/lib/views.php: Initialize global $CURRENT_SYSTEM_VIEWTYPE correctly
+
+ * engine/lib/deprecated-1.7.php, engine/lib/deprecated-1.8.php,
+ engine/lib/sessions.php, engine/lib/sites.php, engine/lib/tags.php,
+ engine/lib/users.php, engine/lib/usersettings.php, engine/lib/views.php:
+ Moved deprecated files from sessions.php - xml.php into deprecation files for
+ 1.7 and 1.8
+
+ * engine/lib/deprecated-1.7.php, engine/lib/deprecated-1.8.php,
+ engine/lib/group.php, engine/lib/location.php, engine/lib/metadata.php,
+ engine/lib/navigation.php, engine/lib/objects.php, engine/lib/output.php,
+ engine/lib/pageowner.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php, engine/lib/relationships.php,
+ engine/lib/river.php: Moved functions from export.php - river.php into
+ deprecated files
+
+ * engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/deprecated-1.7.php,
+ engine/lib/deprecated-1.8.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/start.php: Moving deprecated functions out of
+ files access.php - entities.php. This time into two files based on version
+ deprecated and maintaining documentation
+
+ * engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/deprecated.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/install.php, engine/lib/location.php, engine/lib/mb_wrapper.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/navigation.php, engine/lib/objects.php, engine/lib/output.php,
+ engine/lib/pageowner.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php: Reversing 7975
+
+ * engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/deprecated.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/install.php, engine/lib/location.php, engine/lib/mb_wrapper.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/navigation.php, engine/lib/objects.php, engine/lib/output.php,
+ engine/lib/pageowner.php, engine/lib/plugins.php,
+ engine/lib/private_settings.php, engine/start.php: Refs #2839: moved
+ deprecated functions from access.php - private_settings.php to
+ deprecated.php. Still have to do relationships.php - xml.php. Deleted
+ documentation for these functions since 1) it was using up precious bytes,
+ and 2) documentation should not be needed since people should not be trying
+ to use these if they are using 1.8, and 3) I assume the documentation will
+ exist as archived 1.7 docs.
+
+2011-01-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/group_module.php,
+ mod/file/views/default/file/group_module.php,
+ .../views/default/discussion/group_module.php,
+ mod/groups/views/default/groups/css.php,
+ .../default/groups/profile/activity_module.php,
+ mod/pages/views/default/pages/group_module.php,
+ views/default/css/elements/core.php: fixed css for group module headers
+
+ * engine/lib/output.php: supporting 'javascript:' when normalizing urls
+
+ * engine/lib/pageowner.php: fixed typo in deprecation notice
+
+ * .../layout/shells/two_column_left_sidebar.php: made
+ two_column_left_sidebar layout also handle $vars['content']
+
+ * engine/lib/navigation.php: accidently removed the site menu set up
+ function
+
+2011-01-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/forms/blog/save.php,
+ mod/pages/views/default/annotation/page.php,
+ views/default/annotation/default.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/css/admin.php,
+ views/default/css/elements/core.php,
+ views/default/layout/objects/list/body.php: introducing elgg-subtext as
+ replacement for elgg-list-subtitle and elgg-subtitle
+
+ * engine/lib/elgglib.php, engine/lib/navigation.php,
+ engine/tests/ui/submenu.php, views/default/layout/elements/sidebar.php,
+ views/default/layout/elements/title.php,
+ views/default/navigation/sidebar_menu.php,
+ views/default/navigation/submenu_group.php,
+ views/default/navigation/submenu_item.php,
+ views/default/navigation/submenu_js.php: removed menu code introduced for
+ elgg.com that did not make it into 1.8
+
+ * views/default/annotation/default.php: using the new image block rather
+ than deprecated listing view
+
+ * views/default/navigation/tabs.php: supporting adding a class to navigation
+ tabs
+
+2011-01-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/statistics/overview.php: updated the overview
+ statistics page
+
+ * engine/lib/group.php, engine/lib/pageowner.php, engine/lib/users.php,
+ engine/lib/widgets.php, mod/blog/views/default/blog/group_module.php,
+ mod/blog/views/default/blog/sidebar/archives.php,
+ mod/blog/views/default/blog/sidebar/tagcloud.php,
+ mod/blog/views/default/widgets/blog/content.php,
+ mod/bookmarks/bookmarklet.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ .../views/default/widgets/bookmarks/view.php,
+ .../views/default/defaultwidgets/editor.php, mod/file/friends.php,
+ mod/file/index.php, mod/file/search.php, mod/file/upload.php,
+ mod/file/view.php, mod/file/views/default/file/group_module.php,
+ .../views/default/widgets/filerepo/content.php, mod/groups/lib/groups.php,
+ .../default/widgets/a_users_groups/content.php, mod/messageboard/index.php,
+ .../views/default/widgets/messageboard/content.php, mod/messages/inbox.php,
+ mod/messages/read.php, mod/messages/sent.php, mod/pages/friends.php,
+ mod/pages/index.php, mod/pages/revision.php, mod/pages/view.php,
+ mod/pages/views/default/pages/group_module.php,
+ .../views/default/pages/sidebar/navigation.php,
+ mod/pages/views/default/widgets/pages/content.php, mod/profile/icon.php,
+ mod/profile/views/default/profile/details.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/owner_block.php, mod/thewire/index.php,
+ .../views/default/widgets/thewire/content.php, pages/avatar/edit.php,
+ pages/avatar/view.php, pages/friends/index.php, pages/friends/of.php,
+ pages/friends/pickercallback.php, pages/profile/edit.php,
+ pages/settings/account.php, pages/settings/statistics.php,
+ pages/settings/tools.php, .../core/settings/account/default_access.php,
+ views/default/core/settings/account/email.php,
+ views/default/core/settings/account/language.php,
+ views/default/core/settings/account/name.php,
+ views/default/core/settings/account/password.php,
+ views/default/js/initialize_elgg.php,
+ views/default/layout/elements/owner_block.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/widgets.php,
+ views/default/page/elements/content_header.php,
+ .../page/elements/content_header_member.php,
+ views/foaf/page/shells/default.php: changed elgg_get_page_owner() to
+ elgg_get_page_owner_entity() to be more consistent
+
+ * mod/file/languages/en.php: updated language file for file plugin due to
+ change in groups
+
+ * mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/groups/css.php,
+ .../default/groups/profile/activity_module.php,
+ .../default/groups/profile/activity_widget.php,
+ .../views/default/groups/profile/widgets.php: adding activity module to
+ groups
+
+ * views/default/css/admin.php: going back to overflow:hidden on elgg-body -
+ too many issues with display: table-cell
+
+ * languages/en.php, views/default/css/admin.php,
+ views/default/widgets/content_stats/content.php,
+ views/default/widgets/content_stats/edit.php,
+ views/default/widgets/friends/edit.php,
+ views/default/widgets/new_users/edit.php,
+ views/default/widgets/online_users/edit.php: added edit views for admin
+ widgets
+
+ * mod/ecml/README.txt, mod/ecml/actions/save_permissions.php,
+ mod/ecml/ecml_functions.php, mod/ecml/graphics/dailymotion.png,
+ mod/ecml/graphics/ecml.png, mod/ecml/graphics/googlemaps.png,
+ mod/ecml/graphics/logo_bliptv.gif, mod/ecml/graphics/logo_dailymotion.gif,
+ mod/ecml/graphics/logo_googlemaps.gif, mod/ecml/graphics/logo_livevideo.gif,
+ mod/ecml/graphics/logo_redlasso.gif, mod/ecml/graphics/logo_slideshare.gif,
+ mod/ecml/graphics/logo_vimeo.gif, mod/ecml/graphics/logo_youtube.gif,
+ mod/ecml/graphics/redlasso_1.png, mod/ecml/graphics/redlasso_2.png,
+ mod/ecml/graphics/slideshare.png, mod/ecml/graphics/url_status.png,
+ mod/ecml/graphics/vimeo.png, mod/ecml/graphics/youtube.png,
+ mod/ecml/languages/en.php, mod/ecml/manifest.xml, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/help.php,
+ mod/ecml/views/default/ecml/help/blip.tv.php,
+ mod/ecml/views/default/ecml/help/dailymotion.php,
+ mod/ecml/views/default/ecml/help/googlemaps.php,
+ mod/ecml/views/default/ecml/help/livevideo.php,
+ mod/ecml/views/default/ecml/help/redlasso.php,
+ mod/ecml/views/default/ecml/help/slideshare.php,
+ mod/ecml/views/default/ecml/help/vimeo.php,
+ mod/ecml/views/default/ecml/help/youtube.php,
+ mod/ecml/views/default/ecml/input_ext.php,
+ mod/ecml/views/default/ecml/keyword_help.php,
+ mod/ecml/views/default/ecml/keywords/blip.tv.php,
+ .../views/default/ecml/keywords/dailymotion.php,
+ mod/ecml/views/default/ecml/keywords/entity.php,
+ .../views/default/ecml/keywords/googlemaps.php,
+ mod/ecml/views/default/ecml/keywords/livevideo.php,
+ mod/ecml/views/default/ecml/keywords/redlasso.php,
+ .../views/default/ecml/keywords/slideshare.php,
+ mod/ecml/views/default/ecml/keywords/user_list.php,
+ mod/ecml/views/default/ecml/keywords/vimeo.php,
+ mod/ecml/views/default/ecml/keywords/youtube.php,
+ .../views/default/embed/web_services/content.php,
+ mod/ecml/views/default/settings/ecml/edit.php: moving ecml to plugins
+ repository as it won't be a part of 1.8.0. It will be back though...
+
+ * views/default/css/admin.php, views/default/css/elements/navigation.php,
+ views/default/css/elements/reset.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/navigation/pagination.php, views/default/navigation/tabs.php:
+ adding elgg-state-* css elements
+
+ * engine/lib/views.php: fixed bug where a null passed as 2nd parameter to
+ elgg_view_layout() prevented backward compatibility
+
+ * js/lib/ui.widgets.js: one too many parents in the widget collapse code
+
+ * mod/ecml/views/default/ecml/input_ext.php,
+ mod/embed/views/default/embed/link.php, views/default/css/admin.php,
+ views/default/css/elements/forms.php: namespaced longtext-control
+
+ * mod/tinymce/graphics/ed-bg.gif, mod/tinymce/graphics/example.gif,
+ mod/tinymce/graphics/more.gif, mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ mod/tinymce/views/default/tinymce/init.php: cleaned up tinymce plugin
+
+ * mod/reportedcontent/start.php, .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/user_report.php,
+ .../default/widgets/reportedcontent/content.php,
+ .../views/default/widgets/reportedcontent/edit.php: added reported content
+ widget
+
+ * mod/reportedcontent/languages/en.php, mod/reportedcontent/start.php,
+ .../default/admin/utilities/reportedcontent.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/reportedcontent/admin_css.php, views/default/css/admin.php:
+ adding margin to admin buttons
+
+ * .../graphics/sign_in_with_twitter.gif,
+ mod/twitterservice/languages/en.php, mod/twitterservice/manifest.xml,
+ mod/twitterservice/start.php, mod/twitterservice/twitterservice_lib.php,
+ mod/twitterservice/vendors/twitteroauth/LICENSE,
+ mod/twitterservice/vendors/twitteroauth/OAuth.php,
+ mod/twitterservice/vendors/twitteroauth/README,
+ .../vendors/twitteroauth/twitterOAuth.php,
+ .../views/default/settings/twitterservice/edit.php,
+ .../views/default/twitterservice/css.php,
+ .../views/default/twitterservice/login.php,
+ .../views/default/twitterservice/metatags.php,
+ .../default/usersettings/twitterservice/edit.php: moved twitterservice into
+ core
+
+2011-01-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/chrome.php,
+ views/default/css/elements/core.php, views/default/css/elements/icons.php,
+ views/default/css/elements/navigation.php,
+ views/default/layout/objects/gallery.php,
+ views/default/layout/objects/list.php: light clean-up of the css
+
+ * js/lib/ui.widgets.js, pages/dashboard.php,
+ views/default/admin/dashboard.php, views/default/css/admin.php,
+ views/default/css/elements/core.php, views/default/layout/objects/widget.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/objects/widget/settings.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/layout/shells/widgets/add_panel.php: converted widgets to
+ modules
+
+ * engine/lib/views.php: added support for $vars to elgg_view_entity() - need
+ to clean up documentation and deprecate old usage
+
+2011-01-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/widgets.php, languages/en.php,
+ mod/developers/languages/en.php, mod/developers/start.php,
+ mod/thewire/start.php, views/default/admin/dashboard.php,
+ views/default/admin/overview/statistics.php,
+ views/default/admin/statistics/overview.php, views/default/css/admin.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_panel.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/widgets/content_stats/content.php,
+ views/default/widgets/new_users/content.php,
+ views/default/widgets/online_users/content.php: welcome to the admin
+ dashboard
+
+2011-01-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/logbrowser/start.php,
+ .../views/default/admin/utilities/logbrowser.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/logbrowser/table.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/appearance/profile_fields.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/overview/statistics.php,
+ views/default/admin/users/newest.php, views/default/admin/users/online.php,
+ views/default/css/admin.php, views/default/forms/admin/menu/save.php,
+ views/default/forms/profile/fields/add.php, views/default/forms/useradd.php,
+ views/default/layout/shells/admin.php,
+ views/default/layout/shells/admin/menu.php: updated more of the admin backend
+ to use new CSS/HTML
+
+ * views/default/admin/overview/statistics.php, views/default/css/admin.php:
+ starting to remove the old HTML/CSS in the admin backend
+
+ * views/default/css/admin.php, views/default/layout/shells/admin.php,
+ views/default/layout/shells/admin/menu.php: take two of the admin header and
+ sidebar menu - sidebar menu still needs plenty of work
+
+ * views/default/layout/objects/module.php: default elgg-inner to false in
+ module
+
+ * engine/lib/group.php, mod/groups/start.php: Refs #2557 merged fix into
+ trunk from 1.7 branch
+
+ * engine/lib/database.php, engine/lib/entities.php,
+ engine/lib/metastrings.php, engine/lib/notification.php, engine/lib/pam.php,
+ engine/lib/users.php, engine/lib/web_services.php, engine/lib/xml-rpc.php:
+ Refs #2804 #2805 pulling changes in trunk from 1.7 branch
+
+ * languages/en.php: forgot these language strings in the admin theme update
+
+ * views/default/css/admin.php, views/default/layout/shells/admin.php:
+ playing around a little with the admin theme
+
+2011-01-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ErrorResult.php: Fixes #2586 ErrorResult has PHP5
+ constructor now
+
+ * engine/lib/web_services.php: missed check for null parameters in web
+ services parameter code
+
+ * engine/lib/web_services.php: Fixes #2548 do not need include_post_data()
+ because of changes to rewrite rules
+
+ * engine/lib/sessions.php, engine/lib/web_services.php,
+ mod/uservalidationbyemail/start.php: testing for the existence of username in
+ pam credentials before using
+
+ * mod/groups/languages/en.php, mod/groups/lib/groups.php,
+ mod/groups/start.php, .../views/default/groups/sidebar/members.php: Fixes
+ #2295 added a group member list page
+
+ * views/default/css/elements/base.php,
+ .../layout/shells/one_column_with_sidebar.php: css now provides center for
+ text and centered for divs
+
+ * mod/pages/history.php, mod/pages/images/application.png,
+ mod/pages/images/code.png, mod/pages/images/css.png, mod/pages/images/db.png,
+ mod/pages/images/directory.png, mod/pages/images/doc.png,
+ mod/pages/images/file.gif, mod/pages/images/file.png,
+ mod/pages/images/film.png, mod/pages/images/flash.png,
+ mod/pages/images/folder-closed.gif, mod/pages/images/folder.gif,
+ mod/pages/images/folder_open.png, mod/pages/images/html.png,
+ mod/pages/images/java.png, mod/pages/images/linux.png,
+ mod/pages/images/minus.gif, mod/pages/images/music.png,
+ mod/pages/images/pdf.png, mod/pages/images/php.png,
+ mod/pages/images/picture.png, mod/pages/images/plus.gif,
+ mod/pages/images/ppt.png, mod/pages/images/psd.png,
+ mod/pages/images/ruby.png, mod/pages/images/script.png,
+ mod/pages/images/spinner.gif, mod/pages/images/treeview-black-line.gif,
+ mod/pages/images/treeview-black.gif,
+ mod/pages/images/treeview-default-line.gif,
+ mod/pages/images/treeview-default.gif,
+ mod/pages/images/treeview-famfamfam-line.gif,
+ mod/pages/images/treeview-famfamfam.gif,
+ mod/pages/images/treeview-gray-line.gif, mod/pages/images/treeview-gray.gif,
+ mod/pages/images/treeview-red-line.gif, mod/pages/images/treeview-red.gif,
+ mod/pages/images/txt.png, mod/pages/images/xls.png, mod/pages/images/zip.png,
+ mod/pages/index.php, mod/pages/javascript/jquery.treeview.async.js,
+ mod/pages/javascript/jquery.treeview.js, mod/pages/lib/pages.php,
+ mod/pages/new.php, mod/pages/pagesTree.php, mod/pages/revision.php,
+ mod/pages/start.php, mod/pages/vendors/jquery-treeview/.gitignore,
+ mod/pages/vendors/jquery-treeview/README.md,
+ mod/pages/vendors/jquery-treeview/changelog.txt,
+ mod/pages/vendors/jquery-treeview/demo/async.html,
+ mod/pages/vendors/jquery-treeview/demo/bg.gif,
+ mod/pages/vendors/jquery-treeview/demo/demo.js,
+ mod/pages/vendors/jquery-treeview/demo/edit.html,
+ mod/pages/vendors/jquery-treeview/demo/images.html,
+ mod/pages/vendors/jquery-treeview/demo/index.html,
+ mod/pages/vendors/jquery-treeview/demo/large.html,
+ .../vendors/jquery-treeview/demo/prerendered.html,
+ mod/pages/vendors/jquery-treeview/demo/screen.css,
+ mod/pages/vendors/jquery-treeview/demo/simple.html,
+ .../vendors/jquery-treeview/demo/sortable.html,
+ mod/pages/vendors/jquery-treeview/demo/source.php,
+ mod/pages/vendors/jquery-treeview/demo/source.phps,
+ .../vendors/jquery-treeview/images/ajax-loader.gif,
+ mod/pages/vendors/jquery-treeview/images/file.gif,
+ .../jquery-treeview/images/folder-closed.gif,
+ .../vendors/jquery-treeview/images/folder.gif,
+ mod/pages/vendors/jquery-treeview/images/minus.gif,
+ mod/pages/vendors/jquery-treeview/images/plus.gif,
+ .../jquery-treeview/images/treeview-black-line.gif,
+ .../jquery-treeview/images/treeview-black.gif,
+ .../images/treeview-default-line.gif,
+ .../jquery-treeview/images/treeview-default.gif,
+ .../images/treeview-famfamfam-line.gif,
+ .../jquery-treeview/images/treeview-famfamfam.gif,
+ .../jquery-treeview/images/treeview-gray-line.gif,
+ .../jquery-treeview/images/treeview-gray.gif,
+ .../jquery-treeview/images/treeview-red-line.gif,
+ .../jquery-treeview/images/treeview-red.gif,
+ .../jquery-treeview/jquery.treeview.async.js,
+ .../vendors/jquery-treeview/jquery.treeview.css,
+ .../jquery-treeview/jquery.treeview.edit.js,
+ .../vendors/jquery-treeview/jquery.treeview.js,
+ .../vendors/jquery-treeview/jquery.treeview.min.js,
+ .../jquery-treeview/jquery.treeview.sortable.js,
+ .../vendors/jquery-treeview/lib/jquery.cookie.js,
+ mod/pages/vendors/jquery-treeview/lib/jquery.js,
+ mod/pages/vendors/jquery-treeview/todo, mod/pages/view.php,
+ mod/pages/views/default/pages/css.php,
+ mod/pages/views/default/pages/metatags.php,
+ mod/pages/views/default/pages/sidebar/history.php,
+ .../views/default/pages/sidebar/navigation.php,
+ .../views/default/pages/sidebar/sidebarthis.php,
+ mod/pages/views/default/pages/sidebar/starter.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/sidebar/wrapper.php: finished the first pass on
+ the pages plugin for using the new HTML/CSS
+
+ * views/default/layout/shells/content/header.php: this time got the guid
+ correct for the add button
+
+ * views/default/css/elements/navigation.php: limiting the +/- additions to
+ page menus
+
+ * js/lib/ui.js: limit the collapsible menus to page menus
+
+ * actions/widgets/add.php: making sure context is set correctly when adding
+ a widget
+
+ * views/default/layout/shells/content/header.php: fixed add link for all
+ site content pages
+
+ * mod/pages/actions/pages/edit.php, mod/pages/edit.php,
+ mod/pages/friends.php, mod/pages/history.php, mod/pages/index.php,
+ mod/pages/languages/en.php, mod/pages/lib/pages.php, mod/pages/new.php,
+ mod/pages/revision.php, mod/pages/start.php,
+ mod/pages/views/default/annotation/icon.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/css.php,
+ mod/pages/views/default/pages/group_module.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/icon.php,
+ mod/pages/views/default/pages/pagegallery.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/pages/sidebar/navigation.php,
+ mod/pages/views/default/widgets/pages/content.php,
+ mod/pages/views/default/widgets/pages/edit.php, mod/pages/world.php: more
+ clean up of the pages plugin to use new HTML/CSS
+
+ * mod/blog/views/default/object/blog.php: using list metadata view rather
+ than custom code
+
+ * engine/classes/ElggPlugin.php: fixed bug with plugin settings because of
+ assignment operator confusion
+
+ * engine/lib/private_settings.php: do not need {} around quoted variables
+ surrounded by quotes
+
+ * engine/classes/ElggPlugin.php: Fixes #2812 - correct check for guid now
+
+ * engine/classes/ElggPlugin.php: fixed backward compatibility issue with
+ $CONFIG in plugins' start.php
+
+ * engine/lib/navigation.php: deprecated add_menu() and made it compatible
+ with 1.8
+
+ * .../layout/shells/two_column_left_sidebar.php: added the
+ two_column_left_sidebar layout back so that plugins from 1.7 work with 1.8
+
+2011-01-21 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php, views/default/css/elements/base.php,
+ views/default/css/elements/chrome.php, views/default/css/elements/core.php,
+ views/default/css/elements/forms.php, views/default/css/elements/grid.php,
+ views/default/css/elements/icons.php, views/default/css/elements/layout.php,
+ views/default/css/elements/misc.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/reset.php, views/default/css/elements/spacing.php,
+ views/default/css/elements/typography.php: Made a thorough pass over the css.
+ Included todo's throughout to track what still needs to be done.
+
+2011-01-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/list/metadata.php: moved likes to end of
+ metadata and added a links parameter
+
+ * views/default/layout/shells/content/header.php: using page owner rather
+ than owner for better support for groups
+
+ * engine/lib/views.php: adding 'action' to url when overriding the form
+ action
+
+2011-01-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/actions/delete.php, mod/messages/actions/messages/delete.php,
+ mod/messages/actions/messages/process.php,
+ mod/messages/actions/messages/send.php, mod/messages/actions/send.php,
+ mod/messages/inbox.php, mod/messages/index.php,
+ mod/messages/languages/en.php, mod/messages/lib/messages.php,
+ mod/messages/read.php, mod/messages/readme.txt, mod/messages/send.php,
+ mod/messages/sent.php, mod/messages/start.php,
+ .../views/default/forms/messages/process.php,
+ .../views/default/forms/messages/reply.php,
+ mod/messages/views/default/forms/messages/send.php,
+ mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php,
+ mod/messages/views/default/object/messages.php: Updated the messages plugin
+ to use the new CSS/HTML
+
+ * mod/pages/actions/pages/editwelcome.php, mod/pages/edit.php,
+ mod/pages/friends.php, mod/pages/history.php, mod/pages/index.php,
+ mod/pages/languages/en.php, mod/pages/lib/pages.php, mod/pages/new.php,
+ mod/pages/start.php, mod/pages/view.php,
+ .../views/default/forms/pages/editwelcome.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/welcome.php, mod/pages/welcome.php,
+ mod/pages/world.php: pages plugin using new layout - still need to get
+ subpages working and navigation
+
+2011-01-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/export_handler.php, index.php,
+ mod/reportedcontent/start.php, mod/sitepages/sitepages_functions.php,
+ mod/tagcloud/tagcloud.php, pages/friends/add.php,
+ pages/friends/collections.php: changed layout on pages to one_sidebar
+
+ * mod/search/index.php, mod/search/views/default/search/layout.php,
+ mod/search/views/default/search/no_results.php: using new menu system and
+ page layouts in search
+
+ * mod/groups/graphics/icon.php, mod/groups/icon.php,
+ mod/groups/languages/en.php, mod/groups/lib/discussion.php,
+ mod/groups/start.php, .../views/default/discussion/group_module.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ .../views/default/groups/profile/forum_widget.php,
+ .../views/default/groups/profile/widgets.php,
+ .../views/default/object/groupforumtopic.php: finished discussion rewrite to
+ use new html/css
+
+2011-01-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/discussion/delete.php,
+ mod/groups/actions/discussion/save.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/addtopic.php,
+ mod/groups/edittopic.php, mod/groups/forum.php, mod/groups/languages/en.php,
+ mod/groups/lib/discussion.php, mod/groups/start.php,
+ mod/groups/topicposts.php,
+ mod/groups/views/default/forms/discussion/save.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/viewposts.php,
+ .../views/default/groups/group_sort_menu.php,
+ .../views/default/groups/profile/forum_widget.php,
+ .../views/default/object/groupforumtopic.php: discussion topics using new
+ page handler
+
+ * mod/developers/languages/en.php, mod/developers/manifest.xml,
+ mod/developers/start.php, .../views/default/admin/developers/preview.php:
+ added the beginnings of a core developers tool plugin
+
+ * documentation/css/preview/general.php, documentation/css/preview/grid.php,
+ documentation/css/preview/images.php, documentation/css/preview/index.php,
+ documentation/css/preview/nav.php, documentation/css/preview/objects.php,
+ documentation/css/preview/widgets.php: Added images to css preview and
+ removed the page centering
+
+ * engine/lib/river.php: Fixes #2402 adds 'add' 'river' plugin hook
+
+ * actions/profile/edit.php: Fixes #2372 fixed the entity included in profile
+ update event
+
+ * engine/tests/suite.php: Refs #2757 merged fix into trunk
+
+ * mod/twitter/languages/en.php, mod/twitter/start.php: Refs #2791 merged fix
+ into trunk
+
+2011-01-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/list/body.php: Small typo in comment
+
+2011-01-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/invite.php, mod/groups/lib/groups.php,
+ mod/groups/membershipreq.php, mod/groups/start.php,
+ .../views/default/groups/profile/buttons.php: finished moving the group pages
+ to library - forum pages next
+
+ * mod/groups/activity.php, mod/groups/all.php, mod/groups/edit.php,
+ mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invitations.php, mod/groups/languages/en.php,
+ mod/groups/lib/groups.php, mod/groups/membership.php, mod/groups/new.php,
+ mod/groups/start.php, .../views/default/groups/group_sort_menu.php,
+ .../views/default/groups/profile/buttons.php: moved most of the groups pages
+ into its library
+
+2011-01-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, mod/diagnostics/languages/en.php,
+ mod/logbrowser/languages/en.php,
+ .../views/default/admin/utilities/logbrowser.php: finished the admin title
+ modifications
+
+ * engine/lib/system_log.php: Fixed problem where system log code would crash
+ due to new plugin code
+
+ * engine/lib/admin.php, languages/en.php, mod/defaultwidgets/start.php,
+ .../views/default/admin/utilities/diagnostics.php,
+ mod/uservalidationbyemail/languages/en.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/appearance/profile_fields.php,
+ views/default/admin/overview/numentities.php,
+ views/default/admin/overview/online.php,
+ views/default/admin/overview/statistics.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/admin/users/add.php, views/default/admin/users/newest.php,
+ views/default/admin/users/online.php, views/default/layout/shells/admin.php,
+ views/default/layout/shells/administration.php: drying up the title creation
+ in the admin backend
+
+ * mod/groups/all.php, mod/groups/languages/en.php,
+ mod/groups/views/default/group/default.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ .../views/default/groups/sidebar/featured.php,
+ mod/groups/views/default/groups/sidebar/find.php,
+ .../views/default/icon/group/default/large.php,
+ .../views/default/icon/group/default/medium.php,
+ .../views/default/icon/group/default/small.php,
+ .../views/default/icon/group/default/tiny.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/settings/groups/edit.php: cleanup of the groups
+ plugin views
+
+2011-01-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/installation/canvas/default.php: elgg_view_layout is not used in
+ installation so removing old view
+
+ * install/css/install.css, views/installation/messages/errors/error.php,
+ views/installation/messages/errors/list.php,
+ views/installation/messages/list.php,
+ views/installation/messages/messages/list.php,
+ views/installation/messages/messages/message.php,
+ views/installation/page/elements/messages.php,
+ views/installation/page/shells/default.php: Fixes #2783 - updated
+ installation message code to mirror default views
+
+2011-01-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginPackage.php: Refs #2781: Checking if a dir was
+ passed as a plugin package. Need to do this to allow packages to be loaded
+ outside of plugin_dir.
+
+ * engine/classes/ElggPlugin.php: Refs #2781: Using same technique to check
+ for full plugin path in ElggPlugin.
+
+ * views/default/admin/plugins/simple.php: Refs #2782: Fixed WSOD for simple
+ plugin admin.
+
+ * languages/en.php, views/default/admin/components/invalid_plugin.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php: Refs #2782: Fixed WSOD for invalid
+ plugins on admin screen. Needs better CSS, but holding off until admin area
+ CSS revamp.
+
+ * engine/lib/entities.php: Changed callback function option from
+ 'row_callback' to 'callback' for elgg_get_entities().
+
+2011-01-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginPackage.php: Refs #2781 path checking in
+ ElggPluginPackage constructor should work for both *nix and Windows now
+
+ * mod/groups/groupprofile.php, .../views/default/groups/activity_latest.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/members.php,
+ .../default/groups/profile/activity_widget.php,
+ .../views/default/groups/profile/buttons.php,
+ .../default/groups/profile/closed_membership.php,
+ .../views/default/groups/profile/forum_widget.php,
+ .../views/default/groups/profile/profile_block.php,
+ .../views/default/groups/profile/widgets.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/groups/sidebar/members.php: cleaned up the group profile
+
+2011-01-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php,
+ mod/file/views/default/object/file.php,
+ views/default/css/elements/chrome.php, views/default/output/tags.php: changed
+ tag display to <ul>
+
+2011-01-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixes #1242: elgg_get_data() correctly returns an
+ empty array on no results. It still returns false on error, but I consider
+ that the correct behavior. Please reopen if it needs discussion.
+
+ * engine/lib/database.php, engine/tests/objects/entities.php: Refs #1242,
+ Fixes #2775. Pulled common code between get_data() and get_data_row() into
+ elgg_query_runner(). Caching is now done in the query runner instead of
+ spread across execute_query() and get_data*(). Namespacing cache for callback
+ and single row request. I'm open to better names for that function. Not
+ closing #1242 because the elgg_get_entities*() functions can still return
+ false.
+
+2011-01-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/start.php: moved action registration into init
+
+ * mod/sitepages/sitepages_functions.php: updating the site pages class to
+ use initializeAttributes
+
+ * mod/blog/languages/en.php, mod/blog/lib/blog.php, mod/blog/start.php,
+ mod/blog/views/default/blog/group_module.php, mod/file/index.php,
+ mod/file/languages/en.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/file/group_module.php,
+ views/default/layout/shells/content/header.php: switched from new to add
+
+ * engine/lib/relationships.php: Fixes test for $relationship_guid in sql
+ generating function
+
+ * engine/classes/ElggPluginPackage.php, engine/lib/elgglib.php,
+ engine/lib/metadata.php, engine/lib/views.php, engine/lib/xml.php: Fixes
+ #2774 - fixes several E_NOTICE issues - mostly due to accessign array indexes
+
+
+ * engine/start.php: replaced deprecated load_plugins() - thanks to hellekin
+
+2011-01-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ajax.js: Refs #2770 - success messages are stoted is success array
+ now in json
+
+ * js/lib/ui.js, views/default/js/elgg.php: Refs #2676 removes old
+ elgg_system_messages() function
+
+2011-01-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/elgglib.js: Fixes #2770: Corrected markup in JS to create system
+ messages.
+
+ * mod/profile/manifest.xml: Refs #2761. Removed test dep from profile
+ manifest. Profile no longer requires a version of Elgg from the year 3009.
+
+ * actions/admin/plugins/activate.php,
+ actions/admin/plugins/activate_all.php, actions/admin/plugins/deactivate.php,
+ actions/admin/plugins/deactivate_all.php, actions/admin/plugins/disable.php,
+ actions/admin/plugins/disableall.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/enableall.php, actions/admin/plugins/reorder.php,
+ actions/admin/plugins/set_priority.php,
+ actions/admin/plugins/simple_update_states.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginPackage.php, engine/lib/plugins.php,
+ languages/en.php, mod/profile/manifest.xml,
+ views/default/admin/components/plugin.php,
+ .../admin/components/plugin_dependencies.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php: Fixes #2760. Refs #2759. Updated
+ plugin admin actions to use the new system. Added plugin dependency views in
+ admin. ElggPluginPackage->checkDependencies() now returns the detected value.
+
+
+ * engine/classes/ElggPluginManifestParser17.php: Refs #2759: Added
+ elgg_version to 1.7 manifest parser.
+
+ * mod/oauth_lib/start.php: Fixes #2764. Corrected plugin path for oauth
+ vendor libs.
+
+2011-01-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.js, views/default/js/elgg.php: Fixes #2676 system messages fade
+ out again
+
+ * engine/lib/upgrades/2011010401.php, version.php: Fixes #2458 adds upgrade
+ to set default_access on old installs
+
+2011-01-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../page/elements/content_header_member.php,
+ views/default/page/shells/admin.php: Refs #7221: Removed CRLFs.
+
+ * views/default/js/languages.php, views/default/js/languages/en.php: Refs
+ #2771: Removed CRLFs.
+
+ * engine/lib/filestore.php: Refs #2771: Removed CRLF.
+
+ * js/lib/ajax.js, js/lib/elgglib.js, js/lib/languages.js,
+ js/lib/security.js, js/lib/session.js, js/lib/ui.js, js/lib/ui.widgets.js,
+ js/tests/ElggAjaxOptionsTest.js, js/tests/ElggAjaxTest.js,
+ js/tests/ElggLanguagesTest.js, js/tests/ElggLibTest.js,
+ js/tests/ElggSecurityTest.js, js/tests/ElggSessionTest.js,
+ js/tests/jsTestDriver.conf: Refs #2771: Removing CRLFs from javascript files.
+
+
+ * engine/lib/plugins.php: Fixed problem removing plugin entities if physical
+ files were deleted.
+
+2011-01-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/start.php: Refs #2732 added link to site pages but tab menu
+ still does not work
+
+ * mod/captcha/backgrounds/bg1.jpg, mod/captcha/backgrounds/bg2.jpg,
+ mod/captcha/backgrounds/bg3.jpg, mod/captcha/backgrounds/bg4.jpg,
+ mod/captcha/backgrounds/bg5.jpg, mod/captcha/captcha.php,
+ mod/captcha/fonts/1.ttf, mod/captcha/fonts/Liberation_serif_License.txt,
+ mod/captcha/languages/en.php, mod/captcha/manifest.xml,
+ mod/captcha/start.php, mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php, mod/crontrigger/manifest.xml,
+ mod/crontrigger/start.php: moving captcha and crontrigger plugins out of core
+
+
+2011-01-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginPackage.php: Removed experimental duplicate code
+ from ElggPlugin.
+
+ * engine/classes/ElggPlugin.php: Added ElggPlugin::getPath().
+
+ * engine/lib/plugins.php: Reindexing plugin priorities after regenerating
+ entities.
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginManifest.php,
+ engine/lib/plugins.php: Fixes #2763. Better normalizing for unused 1.7
+ manifest options. Added logging when ElggPluginPackage can't be loaded.
+ Better disabling of deleted physical plugins.
+
+ * mod/oauth_lib/manifest.xml: Removing unsupported requires in 1.7 manifest
+ for oauth lib.
+
+2011-01-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/examples/plugins/manifest.xml,
+ engine/classes/ElggPlugin.php, engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser18.php,
+ engine/classes/ElggPluginPackage.php, engine/lib/plugins.php,
+ engine/lib/upgrades/2011010101.php, engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_18/manifest.xml, languages/en.php,
+ version.php: Fixes #1986, #2170, #2225, #2759. Integrated ElggPluginPackage
+ and ElggPluginManifest with ElggPlugin. System now uses ElggPlugin objects to
+ determin plugins. Order is stored in private settings. This absolutely
+ requires running upgrade.php.
+
+ * engine/lib/elgglib.php: Refs #7552, #2547. Autoloading functions return
+ bool.
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggExtender.php,
+ engine/classes/ElggRelationship.php, engine/classes/ElggWidget.php: Refs
+ #2490. Using array_key_exists() instead of isset() in get() overrides to
+ prevent a check for (invalid) metadata with the name of an attribute if that
+ attribute evaluates to !isset().
+
+ * engine/lib/private_settings.php: Added checking for real entities to other
+ private setting functions.
+
+ * engine/lib/private_settings.php: set_private_setting() checks if the guid
+ is a real entity.
+
+ * upgrade.php: Upgrade invalidates simplecache instead of regenerating it.
+
+2011-01-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/save.php, mod/groups/languages/en.php,
+ mod/groups/views/default/groups/featured.php,
+ .../default/widgets/a_users_groups/content.php,
+ .../views/default/widgets/a_users_groups/edit.php: updated group widget
+
+ * engine/lib/admin.php, views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/plugins_advanced.php,
+ views/default/admin/plugins/plugins_simple.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/admin/site/site_advanced.php,
+ views/default/admin/site/site_basic.php: revert structure of admin views and
+ fixed uniqueness of admin page menu items
+
+2011-01-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, mod/blog/views/default/blog/sidebar/archives.php,
+ mod/blog/views/default/blog/sidebar/revisions.php,
+ mod/blog/views/default/forms/blog/save.php,
+ mod/embed/views/default/object/file/embedlist.php,
+ mod/groups/views/default/forms/groups/search.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/members.php,
+ views/default/annotation/generic_comment.php,
+ views/default/core/likes/display.php, views/default/core/members/sidebar.php,
+ views/default/css/admin.php, views/default/css/elements/core.php,
+ views/default/css/elements/misc.php, views/default/output/tagcloud.php:
+ updating the sidebar boxes to use the new module classes
+
+ * engine/lib/languages.php, .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/personal.php,
+ views/default/core/dashboard/blurb.php,
+ .../core/settings/account/default_access.php,
+ views/default/core/settings/account/email.php,
+ views/default/core/settings/account/language.php,
+ .../core/settings/account/notifications.php,
+ views/default/core/settings/account/password.php,
+ .../core/settings/statistics/numentities.php,
+ views/default/core/settings/statistics/online.php,
+ views/default/core/settings/tools/plugin.php,
+ views/default/css/elements/forms.php, views/default/css/elements/misc.php,
+ views/default/css/screen.php: using the info module for user settings
+
+ * views/default/css/admin.php, views/default/css/elements/base.php,
+ views/default/css/elements/chrome.php, views/default/css/elements/core.php,
+ views/default/css/elements/icons.php, views/default/css/elements/layout.php,
+ views/default/css/elements/misc.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/skin.php, views/default/css/elements/spacing.php,
+ views/default/css/elements/typography.php, views/default/css/screen.php,
+ .../layout/shells/one_column_with_sidebar.php: Refs #2317 dividing css
+ element views into skin views and base views. The expectation is that the
+ base views would not be overridden in a theme so the admin css can depend on
+ them.
+
+ * mod/blog/views/default/object/blog.php,
+ views/default/css/elements/core.php, views/default/navigation/menu/site.php,
+ views/default/output/longtext.php: starting adding a .elgg-text class -
+ plugins need to use output/longtext when displaying text
+
+ * .../views/default/bookmarks/bookmarklet.php,
+ views/default/css/elements/core.php: added discoverable pattern to css
+
+ * mod/blog/views/default/widgets/blog/edit.php,
+ mod/file/actions/file/delete.php, mod/file/actions/file/download.php,
+ mod/file/actions/file/save.php, mod/file/actions/file/upload.php,
+ mod/file/classes/FilePluginFile.php, mod/file/edit.php, mod/file/friends.php,
+ mod/file/index.php, mod/file/languages/en.php, mod/file/lib/file.php,
+ mod/file/search.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/file/css.php,
+ mod/file/views/default/file/group_module.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/icon.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/file/upload.php,
+ mod/file/views/default/forms/file/upload.php,
+ .../views/default/widgets/filerepo/content.php,
+ mod/file/views/default/widgets/filerepo/edit.php, mod/file/world.php,
+ mod/groups/views/default/groups/css.php,
+ views/default/output/confirmlink.php: almost finished updating the file
+ plugin to work with new html/css
+
+ * engine/lib/elgglib.php: removed unnecessary variable from stick forms code
+
+
+ * engine/lib/views.php: fixed the function for viewing latest comments
+
+ * engine/lib/output.php: stop double encoding attributes in output/input
+ elements
+
+ * engine/lib/users.php, languages/en.php: Fixes #2740 - exception messages
+ using the value for minimum username and password length
+
+ * engine/lib/group.php: Fixes #2561 only triggering join, group event if the
+ add relationship succeeded
+
+ * engine/lib/metadata.php: Fixes #2698 not sanitizing strings to prevent
+ double encoding
+
+2010-12-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #2684, #2754: Merged r7701 to trunk.
+
+2010-12-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: not caching js and css when not served through
+ simple cache right now
+
+2010-12-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Refs #2583, #2754: Merged r7445-7446 to
+ trunk.
+
+2010-12-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * documentation/css/preview/grid.php: added borders to the css grid preview
+
+2010-12-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php, engine/lib/views.php: Refs #2752, #2635. Merged
+ r7299 to trunk.
+
+ * engine/lib/metadata.php: Merged r7272 from 1.7 to trunk.
+
+2010-12-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/lib/blog.php, mod/file/download.php, mod/file/index.php,
+ mod/file/start.php, mod/file/thumbnail.php, mod/file/upload.php,
+ mod/file/views/default/file/groupprofile_files.php: file index page now
+ working for both users and groups
+
+ * mod/file/download.php, mod/file/index.php, mod/file/search.php,
+ mod/file/thumbnail.php, mod/file/views/default/file/upload.php,
+ .../views/default/widgets/filerepo/content.php,
+ mod/file/views/rss/object/file.php: a little standardization of the file
+ plugin code
+
+ * mod/embed/views/default/embed/embed.php,
+ views/default/navigation/tabs.php: Fixes #2703 - added support for url ids in
+ navigation tabs
+
+ * mod/embed/views/default/embed/css.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ views/default/core/friends/collectiontabs.php, views/default/css/admin.php,
+ views/default/css/elements/navigation.php, views/default/css/ie.php,
+ views/default/navigation/tabs.php: switching to a better name for tabs in css
+
+
+ * views/default/css/admin.php, views/default/css/elements/heading.php,
+ views/default/css/screen.php: removed heading css elements view
+
+ * views/default/navigation/menu/site.php: site menu needs a clearfix
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/views.php,
+ mod/file/search.php, mod/file/views/default/file/css.php,
+ views/default/layout/objects/gallery.php: added a proper gallery view - still
+ need to wire up the elgg_view_list_item functions and remove the use of
+ context
+
+ * mod/blog/views/default/object/blog.php: updated blog plugin due to change
+ in output/confirmlink
+
+2010-12-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/search.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/object/file.php, views/default/css/elements/core.php,
+ views/default/layout/objects/list.php,
+ views/default/layout/objects/list/metadata.php: added gallery css for the
+ file plugin
+
+ * documentation/css/preview/forms.php,
+ documentation/css/preview/general.php, documentation/css/preview/grid.php,
+ documentation/css/preview/head.php, documentation/css/preview/index.php,
+ documentation/css/preview/nav.php, documentation/css/preview/objects.php,
+ documentation/css/preview/widgets.php: major addition - adding preview of CSS
+ for developers and themers
+
+ * views/default/css/elements/skin.php: added some base css for 4 different
+ modules
+
+ * views/default/layout/objects/widget.php,
+ views/default/layout/objects/widget/controls.php: allow anyone to minimize a
+ widget
+
+ * views/default/widgets/friends/content.php: put a catch in for a bad owner
+ in the friends widget
+
+ * engine/lib/entities.php: adding ability to override access regardless of
+ whether the entity is saved in the database yet
+
+ * views/default/graphics/icon.php, views/default/output/confirmlink.php,
+ views/default/profile/hover.php: more html validation cleanup
+
+ * mod/tinymce/views/default/input/longtext.php: supporting an id in tinycme
+ longtext and not using the invalid language attribute
+
+ * views/default/input/autocomplete.php, views/default/input/checkboxes.php,
+ views/default/input/datepicker.php, views/default/input/userpicker.php: fixed
+ a few minor issues in input views for validation
+
+ * views/default/layout/objects/list/metadata.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/output/access.php: updated the default object entity view
+
+ * views/default/layout/objects/list/metadata.php: let likes code handle
+ whether the user is logged in or not
+
+ * views/default/input/autocomplete.php: fixes documentation and url of
+ endpoint
+
+ * mod/file/view.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/file/icon.php,
+ .../default/file/icon/application/default.php,
+ .../views/default/file/icon/application/excel.php,
+ .../views/default/file/icon/application/msword.php,
+ .../views/default/file/icon/application/pdf.php,
+ .../default/file/icon/application/powerpoint.php,
+ .../default/file/icon/application/vnd.ms-excel.php,
+ .../file/icon/application/vnd.ms-powerpoint.php,
+ .../application/vnd.oasis.opendocument.text.php,
+ .../views/default/file/icon/application/x-gzip.php,
+ .../file/icon/application/x-rar-compressed.php,
+ .../default/file/icon/application/x-stuffit.php,
+ .../views/default/file/icon/application/zip.php,
+ mod/file/views/default/file/icon/archive.php,
+ mod/file/views/default/file/icon/audio.php,
+ mod/file/views/default/file/icon/audio/default.php,
+ mod/file/views/default/file/icon/default.php,
+ mod/file/views/default/file/icon/document.php,
+ mod/file/views/default/file/icon/text/default.php,
+ .../views/default/file/icon/text/directory.php,
+ mod/file/views/default/file/icon/text/v-card.php,
+ mod/file/views/default/file/icon/video.php,
+ mod/file/views/default/file/icon/video/default.php,
+ .../default/file/specialcontent/audio/mid.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/x-wav.php,
+ .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/object/file.php: updated the object/file view
+
+ * actions/admin/user/resetpassword.php, actions/register.php,
+ actions/user/default_access.php, actions/useradd.php,
+ pages/account/register.php, pages/avatar/view.php,
+ views/default/admin/overview/statistics.php, views/default/profile/hover.php,
+ views/installation/input/button.php: Refs #2428 removed more CONFIG uses
+
+ * mod/groups/all.php, mod/groups/views/default/group/default.php: fixed new
+ groups listing
+
+ * engine/lib/views.php: required for river rss to work
+
+ * views/rss/canvas/default.php, views/rss/core/river/body.php,
+ views/rss/layout/objects/image_block.php, views/rss/output/url.php:
+ supporting river rss
+
+ * views/rss/entities/entity_list.php, views/rss/layout/objects/list.php,
+ views/rss/layout/shells/default.php: Fixes #2113 - updated rss view type to
+ use new view structure for lists
+
+ * engine/lib/plugins.php, views/default/admin/plugins/plugins_simple.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/admin/site/site_advanced.php,
+ views/default/admin/site/site_basic.php: fixed a few issues with the admin
+ backend - need to look into better ways to structure admin sub views
+
+2010-12-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/categories/views/default/categories/css.php,
+ mod/embed/views/default/embed/css.php,
+ .../views/default/invitefriends/formitems.php,
+ .../views/default/messageboard/forms/add.php,
+ .../views/default/widgets/messageboard/content.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/messages.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ mod/tinymce/views/default/input/longtext.php,
+ .../uservalidationbyemail/unvalidated_user.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/plugins_advanced.php,
+ views/default/css/admin.php, views/default/css/elements/forms.php,
+ views/default/css/screen.php, views/default/input/access.php,
+ views/default/input/checkbox.php, views/default/input/checkboxes.php,
+ views/default/input/email.php, views/default/input/file.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/plaintext.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/page/shells/walled_garden.php,
+ views/installation/input/access.php, views/installation/input/checkboxes.php,
+ views/installation/input/longtext.php, views/installation/input/pulldown.php:
+ stage 1 in moving the forms markup to elgg- namespaced css - buttons still
+ need work
+
+ * mod/diagnostics/index.php, mod/diagnostics/start.php,
+ .../views/default/admin/utilities/diagnostics.php,
+ .../views/default/diagnostics/forms/download.php,
+ .../views/default/diagnostics/runalltests.php: updated the diagnostics plugin
+ to use the new admin backend
+
+ * engine/lib/admin.php, languages/en.php, mod/logbrowser/start.php,
+ mod/reportedcontent/start.php: added admin utilities menu item
+
+ * mod/diagnostics/index.php, mod/search/index.php,
+ mod/sitepages/sitepages_functions.php,
+ views/default/page/elements/content.php: Fixes #2241 - removed direct calls
+ to the content wrapper view and removed the view as it is been replaced by a
+ body view
+
+ * mod/blog/lib/blog.php: Refs #2077 added new blog post button to group blog
+ - can be used as module for remianing group tools
+
+ * mod/blog/lib/blog.php: Fixes #2169 - setting the blog edit page owner to
+ container
+
+ * mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/messages.php,
+ views/foaf/user/default.php: Refs #1553 - removed all hard coded profile urls
+ from core
+
+ * engine/lib/river.php, engine/lib/views.php: Fixes #2221 - rewrite of rover
+ functions has been completed with moving elgg_view_river_item() into the
+ views library. The ugly C&P functions were moved into the riverdashboard
+ plugin and new 1.7 style get/list functions were introduced
+
+ * actions/profile/edit.php, actions/profile/fields/add.php,
+ actions/profile/fields/delete.php, actions/profile/fields/reorder.php,
+ actions/profile/fields/reset.php, engine/lib/users.php,
+ mod/profile/views/default/profile/details.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/forms/profile/edit.php: Fixes #2751 profile custom fields uses
+ the config table now
+
+ * engine/lib/configuration.php: added a catch for configuration names longer
+ than 32 characters
+
+ * engine/lib/configuration.php: fixed bug where get_config was returning 0
+ because there is not not auto id on the config table
+
+ * mod/tabbed_profile/actions/addcomment.php,
+ mod/tabbed_profile/actions/deletecomment.php,
+ mod/tabbed_profile/graphics/defaultlarge.gif,
+ mod/tabbed_profile/graphics/defaultmaster.gif,
+ mod/tabbed_profile/graphics/defaultmedium.gif,
+ mod/tabbed_profile/graphics/defaultsmall.gif,
+ mod/tabbed_profile/graphics/defaulttiny.gif,
+ mod/tabbed_profile/graphics/defaulttopbar.gif,
+ mod/tabbed_profile/graphics/drag_handle.png,
+ mod/tabbed_profile/graphics/speech_bubble_tail.gif,
+ mod/tabbed_profile/graphics/twitter16px.png, mod/tabbed_profile/icon.php,
+ mod/tabbed_profile/icondirect.php, mod/tabbed_profile/languages/en.php,
+ mod/tabbed_profile/manifest.xml, mod/tabbed_profile/start.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ .../views/default/profile/content_wrapper.php,
+ mod/tabbed_profile/views/default/profile/css.php,
+ .../views/default/profile/listing.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ .../views/default/profile/menu/links.php,
+ .../views/default/profile/metatags.php,
+ .../views/default/profile/ownerblock.php,
+ .../views/default/profile/sidebar.php,
+ .../views/default/profile/tab_navigation.php,
+ .../views/default/profile/tabs/activity.php,
+ .../views/default/profile/tabs/commentwall.php,
+ .../views/default/profile/tabs/details.php,
+ .../views/default/profile/tabs/friends.php,
+ .../views/default/profile/tabs/groups.php,
+ .../views/default/profile/tabs/twitter.php: Fixes #2481 - moving
+ tabbed_profile plugin into the plugins repo from core - it needs some updates
+ to reflect changes to the core profile plugin
+
+ * mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ mod/riverdashboard/endpoint/get_comments.php,
+ mod/riverdashboard/endpoint/get_likes.php,
+ mod/riverdashboard/endpoint/ping.php,
+ mod/riverdashboard/graphics/follow_icon.png,
+ mod/riverdashboard/graphics/refresh.png, mod/riverdashboard/index.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/manifest.xml,
+ mod/riverdashboard/start.php, .../views/default/river/dashboard.php,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/ecml/activity.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/river/body.php,
+ .../views/default/riverdashboard/river/footer.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/json/riverdashboard/container.php,
+ .../views/rss/riverdashboard/container.php: Fixes #2226 moves riverdashboard
+ into secondary plugins from core plugins - most of riverdashboard
+ functionality is now in core (except for displaying who has liked stuff and
+ ajax refreshes)
+
+ * views/default/css/screen.php, views/default/forms/likes/display.php,
+ views/default/forms/likes/link.php: cleaned up left over views and css from
+ likes
+
+ * actions/likes/add.php, actions/likes/delete.php, engine/lib/elgglib.php,
+ js/lib/ui.js, languages/en.php, views/default/annotation/likes.php,
+ views/default/core/likes/display.php, views/default/core/river/controls.php,
+ views/default/css/screen.php, views/default/forms/likes/edit.php,
+ views/default/js/elgg.php: rewrote the display of likes
+
+ * engine/lib/annotations.php: updated documentation on new
+ elgg_annotation_exists() function
+
+ * mod/blog/views/default/object/blog.php: let likes code handle logged in
+ user status
+
+ * views/default/css/elements/navigation.php: forgot to remove commented css
+ statement
+
+ * views/default/css/elements/navigation.php,
+ views/default/page/elements/footer.php: styled the footer menu
+
+ * views/default/css/elements/core.php, views/default/css/elements/skin.php,
+ views/default/layout/elements/page_links.php,
+ views/default/layout/elements/sidebar.php: created a new layout element -
+ page links - holds stuff like the rss link
+
+ * mod/file/classes/FilePluginFile.php, mod/file/start.php: moved the file
+ class into a class file
+
+ * mod/blog/lib/blog.php, mod/blog/start.php: more clean up of the blog
+ plugin - removed unused functions and moved the url forwarder into library
+
+ * mod/defaultwidgets/start.php, mod/diagnostics/start.php,
+ mod/logbrowser/start.php, mod/messages/start.php,
+ mod/reportedcontent/start.php, mod/uservalidationbyemail/start.php: updating
+ plugins to use new page menu
+
+ * mod/file/view.php: forgot to add this file for the fie plugin
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/admin.php, engine/lib/navigation.php, engine/lib/users.php,
+ js/lib/ui.js, views/default/admin/overview.php,
+ views/default/admin/overview/statistics.php, views/default/css/admin.php,
+ views/default/css/elements/navigation.php,
+ views/default/layout/elements/sidebar.php,
+ views/default/navigation/menu/elements/group.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/navigation/menu/page.php: page menu using the new menu system -
+ admin menu updated
+
+ * mod/file/actions/delete.php, mod/file/actions/download.php,
+ mod/file/actions/file/delete.php, mod/file/actions/file/download.php,
+ mod/file/actions/file/save.php, mod/file/actions/file/upload.php,
+ mod/file/actions/save.php, mod/file/actions/upload.php, mod/file/edit.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/languages/en.php,
+ mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/object/file.php, mod/file/world.php: starting to
+ update the file plugin to use the new html/css
+
+ * mod/blog/languages/en.php, mod/blog/lib/blog.php, mod/blog/start.php,
+ mod/blog/views/default/blog/group_module.php,
+ views/default/layout/shells/content/header.php: new content link uses guid to
+ make supporting groups and users easier
+
+ * views/default/output/url.php: supporting anchors with a href in output/url
+
+
+ * views/default/layout/objects/list/metadata.php: added a general metadata
+ view for lists
+
+2010-12-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Cleaned up register_translations().
+
+2010-12-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Added elgg_register_viewtype().
+
+2010-12-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: merged the admin profile edit fields language strings
+ into core
+
+ * engine/lib/plugins.php: fixing merge of plugin code [7727] - it blew away
+ the plugin class loading code
+
+ * languages/en.php, mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/details.php: moved profile fields language
+ strings into core and update profile plugin details view
+
+ * engine/lib/users.php, views/default/navigation/menu/user_admin.php:
+ removed early version of admin context menu and fixed missing edit profile
+ button
+
+2010-12-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Refs #2635, #2643. Merged cache changes into
+ trunk.
+
+2010-12-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/graphics/drag_handle.png,
+ mod/profile/graphics/twitter16px.png, mod/profile/languages/en.php,
+ mod/profile/start.php, mod/profile/views/default/profile/box.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/details.php,
+ mod/profile/views/default/profile/listing.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ mod/profile/views/default/profile/menu/links.php,
+ mod/profile/views/default/profile/owner_block.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ mod/profile/views/default/profile/sidebar.php,
+ mod/profile/views/default/profile/wrapper.php: more clean up of the basic
+ profile plugin - reorged views and removed a lot of cruft
+
+2010-12-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Refs #2543: set_default_config() uses better
+ names. get_config() rewrites old names to new, but have to double up
+ assignments in $CONFIG for ppl not using get_config().
+
+2010-12-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/users.php, engine/lib/views.php, mod/blog/start.php,
+ mod/bookmarks/start.php, mod/file/start.php, mod/logbrowser/start.php,
+ mod/messages/start.php, mod/pages/start.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ views/default/navigation/menu/user_hover.php: improved menu creation for on
+ demand menus and integrated hover menu items into profile owner block
+
+ * engine/classes/ElggUser.php, engine/lib/elgglib.php, engine/lib/users.php,
+ mod/logbrowser/start.php, mod/messages/start.php,
+ views/default/css/elements/navigation.php, views/default/js/elgg.php,
+ views/default/navigation/menu/user_hover.php,
+ views/default/profile/hover.php: moved most of the code for the user hover
+ menu into the new menu system
+
+2010-12-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/icons/user/defaultlarge.gif,
+ _graphics/icons/user/defaultmaster.gif,
+ _graphics/icons/user/defaultmedium.gif,
+ _graphics/icons/user/defaultsmall.gif, _graphics/icons/user/defaulttiny.gif,
+ _graphics/icons/user/defaulttopbar.gif,
+ mod/profile/graphics/defaultlarge.gif,
+ mod/profile/graphics/defaultmaster.gif,
+ mod/profile/graphics/defaultmedium.gif,
+ mod/profile/graphics/defaultsmall.gif, mod/profile/graphics/defaulttiny.gif,
+ mod/profile/graphics/defaulttopbar.gif,
+ mod/profile/graphics/speech_bubble_tail.gif,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ views/default/icon/user/default/large.php,
+ views/default/icon/user/default/master.php,
+ views/default/icon/user/default/medium.php,
+ views/default/icon/user/default/small.php,
+ views/default/icon/user/default/tiny.php,
+ views/default/icon/user/default/topbar.php: moved default profile icons into
+ core
+
+ * mod/blog/start.php, mod/blog/views/default/blog/group_module.php,
+ mod/bookmarks/languages/en.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/groups/views/default/group/default.php, mod/pages/start.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/skin.php,
+ views/default/layout/elements/owner_block.php,
+ views/default/layout/elements/sidebar.php,
+ views/default/layout/objects/list/body.php,
+ views/default/navigation/menu/default.php, views/default/user/default.php:
+ updated owner blocks for users and groups
+
+2010-12-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, mod/blog/views/default/object/blog.php,
+ views/default/layout/elements/comments.php: supporting id for comments for in
+ page links
+
+ * mod/blog/views/default/object/blog.php,
+ views/default/layout/objects/list/body.php: fixing a few display issues in
+ the object/blog view
+
+ * mod/blog/views/default/object/blog.php,
+ views/default/css/elements/core.php,
+ views/default/layout/objects/list/body.php: creating standard list body for
+ plugins
+
+2010-12-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/profile/tabs/friends.php,
+ .../views/default/profile/tabs/groups.php: using new list methods in tabbed
+ profile plugin
+
+ * engine/classes/ElggUser.php: Added list groups and list friends class
+ methods - will be handy for federation
+
+ * engine/classes/ElggUser.php: added a class math to get a user's groups and
+ cleaned up some documentation
+
+ * engine/lib/users.php: Refs #2283 using entity_row_to_elggstar() when
+ loading user from username or code so that ElggUser can be subclassed
+
+ * views/default/layout/objects/list.php: Fixes #2730 - passing the vars
+ array into elgg_view_list_item so that eventually plugins can pass additional
+ parameters into list views
+
+ * engine/lib/elgglib.php: Fixes #2741 skipping :// when replacing // in file
+ paths so that we support URIs
+
+ * mod/tabbed_profile/manifest.xml: do not enable tabbed profile by default -
+ also need to set a conflict key in its manifest for the profile plugin
+
+2010-12-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/defaultwidgets/editor.php,
+ .../views/default/embed/web_services/content.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../views/default/riverdashboard/css.php,
+ views/default/admin/components/plugin.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/core/friends/picker.php, views/default/css/admin.php,
+ views/default/css/elements/forms.php, views/default/css/screen.php,
+ views/default/input/button.php, views/installation/input/button.php: adding
+ elgg namespace to button css classes
+
+2010-12-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: merged the fix to get access collection
+ documentation into trunk from 1.7 branch
+
+2010-12-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php, pages/entities/index.php,
+ views/default/css/elements/skin.php, views/default/css/screen.php,
+ views/default/forms/likes/edit.php, views/default/output/confirmlink.php:
+ added elgg-icon-delete and elgg-icon-likes
+
+ * engine/lib/views.php, mod/groups/views/default/groups/grouplisting.php,
+ .../views/default/profile/listing.php,
+ .../views/default/profile/tabs/activity.php,
+ .../views/default/profile/tabs/friends.php,
+ .../views/default/profile/tabs/groups.php: added the core river to the tabbed
+ profile plugin and fixed some deprecated function warnings
+
+2010-12-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/admin.php: fixed a bug I introduced in the admin css
+
+ * mod/profile/views/default/profile/box.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/details.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ mod/profile/views/default/profile/sidebar.php,
+ views/default/css/elements/skin.php: an almost done widget-based profile
+ plugin
+
+ * actions/widgets/save.php, engine/classes/ElggDiskFilestore.php,
+ js/lib/ui.js, js/lib/ui.widgets.js,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php, pages/dashboard.php,
+ views/default/css/screen.php, views/default/graphics/ajax_loader.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/objects/widget/settings.php,
+ views/default/layout/shells/widgets.php: fixed a few bugs and updated the
+ widget code
+
+ * js/lib/ui.widgets.js, views/default/css/screen.php,
+ views/default/layout/objects/widget.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/objects/widget/settings.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/layout/shells/widgets/add_panel.php: namespaced the widget code
+
+
+ * js/lib/ui.widgets.js, pages/dashboard.php,
+ views/default/core/dashboard/blurb.php, views/default/css/screen.php,
+ views/default/layout/shells/widgets.php: starting to use the grid in the
+ widget code
+
+ * engine/lib/river.php: fixed missed variable name change in river's use of
+ image block pattern
+
+ * mod/profile/views/default/profile/javascript.php,
+ .../views/default/profile/javascript.php: moved avatar drop down javascript
+ into core
+
+ * mod/file/views/default/file/css.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/icon.php, mod/profile/start.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/tabbed_profile/start.php,
+ mod/tabbed_profile/views/default/profile/css.php,
+ .../views/default/profile/javascript.php, views/default/css/screen.php,
+ views/default/js/elgg.php, views/default/profile/icon.php: using
+ elgg-user-icon instead of usericon and moving the css into core
+
+ * mod/blog/views/default/forms/blog/save.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/messages/views/default/messages/messages.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ .../views/default/object/reported_content.php,
+ mod/tabbed_profile/views/default/profile/css.php,
+ .../views/default/profile/ownerblock.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/css/admin.php, views/default/css/elements/forms.php,
+ views/default/css/elements/skin.php, views/default/css/screen.php,
+ views/default/forms/profile/fields/reset.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/page/elements/content_header.php: replacing action-button with
+ elgg-action-button
+
+ * views/default/css/elements/skin.php,
+ views/default/layout/shells/content/header.php: using more generic markup for
+ main header
+
+ * mod/search/views/default/search/css.php,
+ mod/search/views/default/search/search_box.php: updated search box css
+
+ * .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/footer_link.php, mod/sitepages/start.php,
+ .../views/default/sitepages/footer_menu.php,
+ views/default/css/elements/skin.php, views/default/page/elements/footer.php:
+ cleaning up the page footer - still need to add css for footer menu
+
+ * views/default/css/elements/skin.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/page/elements/topbar.php: refining the elgg-alt pattern
+
+ * views/default/css/admin.php, views/default/css/elements/core.php,
+ views/default/css/elements/layout.php, views/default/css/screen.php,
+ views/default/layout/objects/image_block.php: completed the media to image
+ block switch
+
+ * engine/lib/river.php, engine/lib/views.php,
+ mod/blog/views/default/object/blog.php, mod/riverdashboard/start.php,
+ views/default/annotation/generic_comment.php,
+ views/default/css/elements/layout.php,
+ views/default/layout/objects/image_block.php,
+ views/default/layout/objects/media.php: changed name from media block to
+ image block
+
+ * views/default/css/admin.php,
+ views/default/layout/shells/administration.php,
+ views/default/page/shells/admin.php: started cleaning up the admin css
+
+ * engine/lib/admin.php, engine/lib/views.php, engine/start.php: added a
+ ready,system event so that plugins can do things after the init has finished
+ but before pages are created
+
+ * views/default/navigation/menu/user_admin.php,
+ views/default/profile/hover.php, views/default/profile/icon.php: cleaned up
+ profile hover menu
+
+ * engine/lib/users.php, mod/logbrowser/start.php,
+ .../views/default/logbrowser/adminlinks.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ .../views/default/profile/admin_menu.php,
+ .../views/default/profile/hoverover.php,
+ mod/tabbed_profile/views/default/profile/icon.php,
+ .../views/default/profile/ownerblock.php,
+ views/default/navigation/menu/user_admin.php, views/default/profile/icon.php:
+ added a user admin menu that plugins can add menu items to
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/pages/start.php, mod/profile/views/default/profile/ownerblock.php: pulled
+ user owner block menu out of profile plugin with new menu code
+
+ * mod/profile/actions/addcomment.php, mod/profile/actions/deletecomment.php,
+ mod/profile/start.php, mod/profile/views/default/profile/box.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ .../views/default/profile/content_wrapper.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/details.php,
+ .../views/default/profile/tab_navigation.php,
+ .../views/default/profile/tabs/activity.php,
+ .../views/default/profile/tabs/commentwall.php,
+ mod/profile/views/default/profile/tabs/details.php,
+ mod/profile/views/default/profile/tabs/friends.php,
+ mod/profile/views/default/profile/tabs/groups.php,
+ mod/profile/views/default/profile/tabs/twitter.php,
+ mod/tabbed_profile/actions/addcomment.php,
+ mod/tabbed_profile/actions/deletecomment.php,
+ mod/tabbed_profile/graphics/defaultlarge.gif,
+ mod/tabbed_profile/graphics/defaultmaster.gif,
+ mod/tabbed_profile/graphics/defaultmedium.gif,
+ mod/tabbed_profile/graphics/defaultsmall.gif,
+ mod/tabbed_profile/graphics/defaulttiny.gif,
+ mod/tabbed_profile/graphics/defaulttopbar.gif,
+ mod/tabbed_profile/graphics/drag_handle.png,
+ mod/tabbed_profile/graphics/speech_bubble_tail.gif,
+ mod/tabbed_profile/graphics/twitter16px.png, mod/tabbed_profile/icon.php,
+ mod/tabbed_profile/icondirect.php, mod/tabbed_profile/languages/en.php,
+ mod/tabbed_profile/manifest.xml, mod/tabbed_profile/start.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ .../views/default/profile/admin_menu.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ .../views/default/profile/content_wrapper.php,
+ mod/tabbed_profile/views/default/profile/css.php,
+ .../views/default/profile/hoverover.php,
+ mod/tabbed_profile/views/default/profile/icon.php,
+ .../views/default/profile/javascript.php,
+ .../views/default/profile/listing.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ .../views/default/profile/menu/links.php,
+ .../views/default/profile/metatags.php,
+ .../views/default/profile/ownerblock.php,
+ .../views/default/profile/sidebar.php,
+ .../views/default/profile/tab_navigation.php,
+ .../views/default/profile/tabs/activity.php,
+ .../views/default/profile/tabs/commentwall.php,
+ .../views/default/profile/tabs/details.php,
+ .../views/default/profile/tabs/friends.php,
+ .../views/default/profile/tabs/groups.php,
+ .../views/default/profile/tabs/twitter.php: rough widget profile plugin
+
+ * mod/profile/javascript.php, mod/profile/start.php,
+ .../views/default/profile/content_wrapper.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/ownerblock.php,
+ .../views/default/profile/profile_content.php,
+ .../default/profile/profile_contents/activity.php,
+ .../profile/profile_contents/commentwall.php,
+ .../default/profile/profile_contents/details.php,
+ .../default/profile/profile_contents/friends.php,
+ .../default/profile/profile_contents/groups.php,
+ .../default/profile/profile_contents/twitter.php,
+ .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php,
+ mod/profile/views/default/profile/sidebar.php,
+ .../views/default/profile/tab_navigation.php,
+ .../views/default/profile/tabs/activity.php,
+ .../views/default/profile/tabs/commentwall.php,
+ mod/profile/views/default/profile/tabs/details.php,
+ mod/profile/views/default/profile/tabs/friends.php,
+ mod/profile/views/default/profile/tabs/groups.php,
+ mod/profile/views/default/profile/tabs/twitter.php: more profile clean up
+
+ * mod/profile/edit.php, mod/profile/index.php, mod/profile/profile_lib.php,
+ mod/profile/start.php: more cleanup of the profile plugin from the
+ reorganization
+
+2010-12-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/profile/fields/add.php, actions/profile/fields/delete.php,
+ actions/profile/fields/reorder.php, actions/profile/fields/reset.php,
+ engine/lib/admin.php, mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/editdefault.php, mod/profile/actions/editfield.php,
+ mod/profile/actions/reorder.php, mod/profile/actions/resetdefaultprofile.php,
+ mod/profile/start.php, mod/profile/vendor/jquery.jeditable.mini.js,
+ .../default/admin/appearance/defaultprofile.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../default/profile/editdefaultprofileitems.php,
+ vendors/jquery/jquery.jeditable.mini.js,
+ views/default/admin/appearance/profile_fields.php,
+ .../admin/appearance/profile_fields/list.php,
+ views/default/forms/profile/fields/add.php,
+ views/default/forms/profile/fields/reset.php: continuing to slash and burn
+ the profile plugin - moving the admin profile fields into core - last major
+ change
+
+ * actions/profile/edit.php, engine/lib/users.php, languages/en.php,
+ mod/profile/actions/edit.php, mod/profile/start.php, pages/avatar/edit.php,
+ pages/profile/edit.php, views/default/forms/profile/edit.php: moved profile
+ edit form into core
+
+ * engine/lib/users.php, languages/en.php, mod/profile/editicon.php,
+ .../views/default/js/jquery.imgareaselect-0.8.js,
+ .../default/js/jquery.imgareaselect-0.8.min.js,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/editicon.php,
+ .../views/default/profile/profile_ownerblock.php, pages/avatar/edit.php,
+ pages/avatar/view.php, vendors/jquery/jquery.imgareaselect-0.8.min.js,
+ views/default/core/avatar/crop.php, views/default/core/avatar/upload.php,
+ views/default/css/screen.php, views/default/forms/avatar/crop.php,
+ views/default/forms/avatar/upload.php: pulling the avatar code out of the
+ profile plugin - just some minor icon related code left
+
+ * actions/avatar/crop.php, actions/avatar/upload.php, engine/lib/users.php,
+ languages/en.php, mod/groups/start.php, mod/profile/actions/cropicon.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/views/default/profile/editicon.php,
+ views/default/forms/avatar/crop.php, views/default/forms/avatar/upload.php:
+ moved the avatar forms and actions into core from profile plugin
+
+ * engine/classes/ElggMenuItem.php, engine/lib/users.php,
+ engine/lib/usersettings.php, mod/invitefriends/index.php,
+ mod/invitefriends/start.php, .../views/default/invitefriends/formitems.php,
+ mod/notifications/groups.php, mod/notifications/index.php,
+ mod/notifications/start.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/groupsform.php,
+ views/default/css/elements/navigation.php,
+ views/default/layout/elements/sidebar.php,
+ views/default/navigation/menu/default.php: half way through converting
+ submenu to new menu code - pages and groups are the two major users left
+
+ * actions/admin/menu/save.php, actions/admin/menu_items.php,
+ engine/classes/ElggMenuItem.php, engine/lib/admin.php,
+ engine/lib/navigation.php, engine/lib/river.php, engine/lib/users.php,
+ mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/groups/start.php, mod/pages/start.php, mod/riverdashboard/start.php,
+ mod/thewire/start.php, views/default/admin/appearance/menu_items.php,
+ views/default/navigation/menu/elements/item.php,
+ views/default/navigation/menu/site.php,
+ views/default/navigation/site_nav.php,
+ views/default/page/elements/header.php: site nav menu now uses new menu code
+ (and finished the implementation of custom menu items while I was at it - not
+ backward compatible with the previous half finished version)
+
+2010-12-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * pages/account/forgotten_password.php, pages/account/register.php,
+ pages/entities/list.php, pages/friends/index.php, pages/friends/of.php,
+ pages/settings/statistics.php: updated some of the core pages based on new
+ CSS and layouts
+
+ * mod/notifications/start.php: fixed another underline to dash conversion
+ issue
+
+ * engine/lib/upgrades/2010121702.php, languages/en.php, version.php,
+ views/default/annotation/annotatelike.php,
+ views/default/river/annotation/likes/create.php: last of the river updates I
+ hope - fixes the likes river view
+
+ * engine/lib/notification.php, engine/lib/statistics.php,
+ engine/lib/users.php, engine/lib/usersettings.php,
+ mod/notifications/start.php, pages/settings/account.php,
+ pages/settings/index.php, pages/settings/plugins.php,
+ pages/settings/statistics.php, pages/settings/tools.php,
+ pages/settings/user.php, views/default/core/settings/account.php,
+ .../core/settings/account/default_access.php,
+ views/default/core/settings/account/email.php,
+ views/default/core/settings/account/language.php,
+ views/default/core/settings/account/name.php,
+ .../core/settings/account/notifications.php,
+ views/default/core/settings/account/password.php,
+ views/default/core/settings/statistics.php,
+ .../core/settings/statistics/numentities.php,
+ views/default/core/settings/statistics/online.php,
+ views/default/core/settings/tools.php,
+ views/default/core/settings/tools/plugin.php,
+ views/default/forms/account/settings.php,
+ views/default/page/elements/topbar.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php, views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/notifications.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/usersettings/user.php: reorganized the settings views and
+ updated the pages to use new layout
+
+ * .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php: removed old river code from
+ the profile plugin - profile updates no longer go to the river
+
+ * engine/lib/upgrades/2010121701.php, mod/groups/languages/en.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ .../river/object/groupforumtopic/annotate.php,
+ .../river/object/groupforumtopic/create.php,
+ .../river/object/groupforumtopic/update.php,
+ .../default/river/relationship/member/create.php, version.php: updated group
+ member and group forum topics to new river
+
+ * mod/pages/actions/pages/edit.php,
+ .../views/default/river/object/page/update.php,
+ .../views/default/river/object/page_top/update.php: removed pages update
+ river code
+
+ * mod/pages/languages/en.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/page_top/create.php,
+ mod/thewire/languages/en.php,
+ .../views/default/river/object/thewire/create.php: added pages and thewire
+ river entries
+
+ * languages/en.php, .../views/default/river/object/blog/create.php,
+ .../default/river/object/bookmarks/create.php, mod/file/languages/en.php,
+ .../views/default/river/object/file/create.php, mod/groups/languages/en.php,
+ mod/groups/views/default/river/group/create.php: supporting putting content
+ in groups in for river views and added file river code
+
+ * .../views/default/river/object/blog/create.php,
+ mod/bookmarks/languages/en.php,
+ .../default/river/object/bookmarks/create.php, views/default/css/screen.php,
+ .../river/annotation/generic_comment/create.php,
+ views/default/river/relationship/friend/create.php: updated river views for
+ content display and added new bookmarks river view code
+
+ * mod/bookmarks/start.php: bookmarks plugin needs to be rewritten - hacked
+ it to get the add functionality working
+
+ * engine/classes/ElggMenuBuilder.php, engine/classes/ElggMenuItem.php,
+ engine/lib/navigation.php, engine/lib/views.php: Refs #2320 added new menu
+ functions and classes
+
+ * mod/riverdashboard/start.php, .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/river/footer.php: fixed remaining javascript
+ for riverdashboard - it's ready to be moved out to plugins
+
+ * .../views/default/riverdashboard/css.php: fixed comment form toggle in
+ riverdashboard plugin
+
+ * mod/riverdashboard/index.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/river/body.php,
+ .../views/default/riverdashboard/river/footer.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ views/default/forms/likes/display.php: updated riverdashboard plugin to use
+ new river display code - javascript code currently broken for comments and
+ likes
+
+ * .../views/default/river/object/blog/create.php,
+ mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ mod/riverdashboard/start.php, .../views/default/river/item/list.php: updated
+ riverdashboard to load the river item class
+
+ * actions/comments/add.php, engine/lib/upgrades/2010121602.php,
+ mod/blog/languages/en.php, mod/file/languages/en.php,
+ mod/pages/languages/en.php, .../views/default/river/object/page/annotate.php,
+ .../default/river/object/page_top/annotate.php, version.php,
+ views/default/annotation/annotate.php,
+ .../river/annotation/generic_comment/create.php: updated the river
+ generic_comment view for the new river code
+
+ * _graphics/elgg_sprites.png, engine/lib/upgrades/2010121601.php,
+ languages/en.php, .../default/river/relationship/friend/create.php,
+ version.php, views/default/core/river/controls.php,
+ views/default/css/elements/skin.php, views/default/css/screen.php,
+ views/default/friends/river/create.php, views/default/river/item/list.php,
+ views/default/river/item/wrapper.php,
+ views/default/river/relationship/friend/create.php: updated the river friend
+ view for the new river code
+
+2010-12-16 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/upload_js.php: Fixes #2313, #1106 removed the last of the
+ aborted multiple file uploading code
+
+ * engine/lib/elgglib.php, js/lib/languages.js: Fixes #2725 - js page handler
+ now handles javascript views with slashes in their names
+
+ * engine/lib/elgglib.php: fixed a lot of notices being generated by the new
+ plugin hook code
+
+ * pages/members/search.php: replaced deprecated function in members search
+ page
+
+ * views/default/css/elements/skin.php,
+ views/default/layout/shells/one_column.php,
+ views/default/layout/shells/one_sidebar.php,
+ views/default/layout/shells/two_sidebar.php: adjusted page body css to use
+ top level class to determine width and centering
+
+ * pages/members/search.php, views/default/layout/shells/one_sidebar.php:
+ added title parameter to one_sidebar layout
+
+ * pages/members/search.php, views/default/layout/shells/content.php,
+ views/default/layout/shells/one_sidebar.php: layout views should use
+ 'content' to support alternate viewtypes (like rss) - updated the one_sidebar
+ view
+
+ * engine/lib/users.php, languages/en.php, mod/friends/languages/en.php,
+ mod/friends/manifest.xml, mod/friends/start.php,
+ .../views/default/widgets/friends/content.php,
+ mod/friends/views/default/widgets/friends/edit.php,
+ views/default/widgets/friends/content.php,
+ views/default/widgets/friends/edit.php: moved friends widget into core
+
+2010-12-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/widget.php,
+ views/default/layout/objects/widget/controls.php,
+ views/default/layout/objects/widget/settings.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout/shells/widgets/add_button.php,
+ views/default/layout/shells/widgets/add_panel.php,
+ views/default/object/widget.php, views/default/widgets/add_button.php,
+ views/default/widgets/add_panel.php, views/default/widgets/controls.php,
+ views/default/widgets/settings.php, views/default/widgets/wrapper.php: moved
+ widget into layout/objects as one of our core css objects
+
+ * engine/classes/ElggPluginManifestParser17.php: Fixes #2728 creating a name
+ for plugins with 1.7 manifests based on hellekin's patch
+
+ * views/default/admin/plugins/advanced.php: checking if categories are set
+ before looping (hellekin)
+
+ * engine/lib/statistics.php, mod/diagnostics/start.php,
+ mod/groups/start.php: updated to removing more deprecation warnings (from
+ hellekin)
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/friends/start.php, mod/groups/start.php, mod/messageboard/start.php,
+ mod/pages/start.php, mod/tagcloud/start.php, mod/thewire/start.php,
+ mod/twitter/start.php: replacing calls to add_widget_type() with
+ elgg_register_widget_type() (from hellekin)
+
+ * install/ElggRewriteTester.php: Ignore SSL certificate errors when testing
+ URL rewriting during installation (from hellekin)
+
+ * engine/lib/access.php, engine/lib/users.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ pages/friends/pickercallback.php, views/default/core/friends/collection.php,
+ views/default/core/friends/collections.php,
+ views/default/core/friends/collectiontabs.php,
+ views/default/core/friends/picker.php,
+ views/default/core/friends/tablelist.php,
+ .../default/core/friends/tablelistcountupdate.php,
+ views/default/forms/friends/edit.php, views/default/friends/collection.php,
+ views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php, views/default/friends/picker.php,
+ views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php: moving friends views into
+ core
+
+ * pages/friends/add.php, pages/friends/edit.php,
+ pages/friends/pickercallback.php,
+ views/default/forms/friends/collectionfields.php,
+ views/default/forms/friends/edit.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php: moved friend forms into forms directory
+
+
+ * engine/lib/elgglib.php, .../default/river/object/bookmarks/create.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/river/object/thewire/create.php,
+ views/default/annotation/annotate.php, views/default/core/river/controls.php,
+ views/default/forms/likes/display.php, views/default/forms/likes/edit.php,
+ views/default/forms/likes/link.php, views/default/likes/forms/display.php,
+ views/default/likes/forms/edit.php, views/default/likes/forms/link.php: moved
+ likes forms into forms directory
+
+ * mod/notifications/index.php: added friends picker js to notifications
+ plugin - is there a reason it isn't using the friends picker view?
+
+ * engine/lib/notification.php, mod/notifications/start.php,
+ .../notifications/settings/usersettings.php,
+ views/default/usersettings/notifications.php: moved default notification
+ settings into usersettings
+
+ * views/default/js/initialise_elgg.php,
+ views/default/js/initialize_elgg.php,
+ views/default/page/elements/html_begin.php,
+ views/default/scripts/initialize_elgg.php: last step in conversion to elgg.js
+
+
+ * engine/lib/views.php, mod/embed/start.php, mod/profile/start.php,
+ views/default/js/elgg.php, views/default/js/initialise_elgg.php: 1st step in
+ changing initialise_elgg.js to elgg.js
+
+ * views/default/upload/upload_form_content.php: upload form content view not
+ used anywhere
+
+ * views/default/settings/system.php: site settings were moved to admin views
+
+
+ * pages/account/forgotten_password.php, pages/account/register.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php, views/default/admin/users/add.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/forms/login.php, views/default/forms/register.php,
+ views/default/forms/user/requestnewpassword.php,
+ views/default/forms/useradd.php: moved account forms into forms directory
+
+2010-12-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/users.php, index.php,
+ mod/sitepages/start.php, views/default/account/login_box.php,
+ views/default/account/login_dropdown.php,
+ views/default/account/login_walled_garden.php,
+ views/default/core/account/login_box.php,
+ views/default/core/account/login_dropdown.php,
+ views/default/core/account/login_walled_garden.php,
+ views/default/page/elements/header.php: moved account views into core views -
+ account forms are next
+
+ * views/default/css/elements/core.php,
+ views/default/css/elements/layout.php,
+ views/default/css/elements/page_layout.php,
+ views/default/css/elements/skin.php,
+ views/default/css/elements/typography.php, views/default/css/screen.php:
+ moving more css into the skin view - including page layout information
+
+ * upgrade.php, views/default/page/shells/upgrade.php,
+ views/default/settings/upgrading.php: Refs #2733 added explanation on the
+ security of the upgrade script
+
+ * engine/lib/users.php: Fixes #2103 adding a site nav entry for members
+
+ * mod/members/index.php, mod/members/languages/en.php,
+ mod/members/manifest.xml, mod/members/start.php,
+ mod/members/views/default/members/css.php,
+ .../views/default/members/members_navigation.php,
+ mod/members/views/default/members/search.php: Refs #2723 removing old members
+ plugin
+
+ * engine/lib/upgrades/2010121401.php, engine/lib/users.php,
+ languages/en.php, pages/members/index.php, pages/members/search.php,
+ version.php, views/default/core/members/nav.php,
+ views/default/core/members/sidebar.php,
+ views/default/forms/members/name_search.php,
+ views/default/forms/members/tag_search.php: Fixes #2723 members listing pages
+ now in core
+
+2010-12-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: sanitise_filepath() removes double /s.
+
+ * engine/classes/ElggPluginPackage.php: Cleaned up constructor logic for
+ ElggPluginPackage. Better detection of invalid paths.
+
+2010-12-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: front page code does not depend on riverdashboard plugin
+ anymore
+
+ * .../views/default/river/object/blog/create.php: Refs #2226 need a catch in
+ river views until riverdashboard plugin is updated
+
+ * mod/blog/languages/en.php, .../views/default/river/object/blog/create.php:
+ Refs #2226 updated blog plugin to use new river view
+
+ * engine/classes/ElggRiverItem.php, engine/lib/annotations.php,
+ engine/lib/river.php, engine/lib/views.php, languages/en.php,
+ mod/riverdashboard/index.php, mod/riverdashboard/start.php,
+ .../views/default/river/item/list.php, pages/river.php,
+ views/default/core/river/body.php, views/default/core/river/controls.php,
+ views/default/core/river/filter.php, views/default/core/river/footer.php,
+ views/default/core/river/image.php, views/default/css/screen.php,
+ views/default/forms/comments/inline.php: Refs #2226 moving riverdashboard
+ into core - need to clean up riverdashboard plugin and move to plugins
+ repository and update plugins with new river views
+
+2010-12-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/core/dashboard/blurb.php, views/default/dashboard/blurb.php:
+ adding a place to put views for core pages
+
+ * js/lib/ui.js: added toggler function
+
+ * views/default/page/shells/admin.php,
+ views/default/page/shells/default.php: removed unnecessary title code in page
+ shells
+
+ * pages/dashboard/latest.php: removed unused dashboard directory
+
+ * engine/lib/users.php, pages/dashboard.php, pages/dashboard/index.php:
+ moved dashboard handler into base pages directory
+
+ * views/default/layout/objects/media.php: fixed typo
+
+2010-12-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/page_layout.php,
+ views/default/layout/objects/media.php: added alternate picture block to css
+ media object
+
+ * views/default/layout/shells/content.php,
+ views/default/layout/shells/one_column.php,
+ views/default/layout/shells/one_sidebar.php,
+ views/default/layout/shells/two_sidebar.php: supporting an additional class
+ on primary layouts
+
+ * views/default/layout/objects/list.php: added better list id's based on
+ type
+
+ * views/default/css/elements/page_layout.php,
+ views/default/layout/objects/module.php, views/default/output/tagcloud.php:
+ updated module markup and fixed a bug with its footer code
+
+ * engine/lib/entities.php: fixed spelling error in documentation
+
+ * engine/lib/tags.php: updated tags library to use new sql functions
+
+ * engine/lib/relationships.php: provided more flexibility in creating the
+ relationships join sql
+
+ * views/default/page/elements/topbar.php: fixed copy and paste error in the
+ topbar view
+
+2010-12-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/lib/blog.php, views/default/layout/shells/content/filter.php:
+ using all rather than everyone to be more consistent
+
+ * views/default/css/elements/core.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/reset.php, views/default/css/elements/skin.php,
+ views/default/css/screen.php: Refs #2317 starting create a css skin sub view
+
+ * engine/lib/views.php, views/default/css/elements/page_layout.php,
+ views/default/layout/objects/media.php: changed name of icon block to picture
+ block in media object to avoid conflicts with elgg sprites
+
+ * mod/search/views/default/search/css.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php, views/default/css/screen.php,
+ views/default/navigation/site_nav.php: a few more adjustments to the page
+ header
+
+ * views/default/css/elements/navigation.php,
+ views/default/navigation/site_nav.php: finished clean up the header css
+ (except for search box in search plugin
+
+ * _graphics/elgg_toolbar_logo.gif, mod/search/views/default/search/css.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php,
+ views/default/navigation/site_nav.php,
+ views/default/page/elements/header_logo.php: stage 1 of cleaning up page
+ header css
+
+ * views/default/css/elements/page_layout.php, views/default/css/screen.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/elements/topbar_logout.php: completed the topbar
+ modifications
+
+2010-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/css.php: Fixes #2724 fixed typo in
+ riverdashboard CSS
+
+ * views/default/input/userpicker.php: Fixes #2726 applied zcho's patch to
+ fix more errors from the "_" to "-" CSS conversion
+
+2010-12-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #1411: Can specify custom row callbacks with
+ 'row_callback' options in elgg_get_entities().
+
+2010-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php, .../views/default/profile/topbar_extend.php: topbar
+ friends should be in core, not profile plugin
+
+ * mod/embed/views/default/embed/js.php,
+ views/default/settings/upgrading.php: Fixes #2717 - fixing more errors
+ introduced by my over aggressive renaming script - thanks to zcho and
+ hellekin
+
+ * engine/classes/ElggSite.php: Fixes #2721 fixed typo - thanks for the
+ report!
+
+2010-12-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Refs #1411: Documentation fix.
+
+ * engine/lib/annotations.php: Refs #1411. Added ability to specify
+ annotation time_created lower and upper. Deprecated remaining
+ get/list_entities_from/by_annotation*() functions.
+
+2010-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/page_layout.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/elements/topbar_logout.php: cleaning up the topbar CSS
+
+2010-12-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/tests/api/entity_getter_functions.php:
+ Refs #1411. Added elgg_get_entities_from_annotation_calculation(). Deprecated
+ get_entities_from_annotations_count() and
+ get_entities_from_annotation_calculate_x().
+ elgg_get_entities_from_annotations() now runs through egef_metadata() for
+ backward compatibility support.
+
+2010-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layout/objects/list.php: added ability to include pagination
+ before and after a list
+
+ * engine/lib/views.php, views/default/layout/objects/list.php,
+ views/default/navigation/pagination.php: fixed pagination for annotations due
+ to changes in views
+
+2010-12-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: DRY'd up elgg_get_entities() where clause helper
+ functions. Added ability to specify guids in elgg_get_entity*() functions.
+
+2010-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/elements/core.php,
+ views/default/css/elements/navigation.php,
+ views/default/css/elements/page_layout.php, views/default/css/screen.php:
+ Refs #2317 pulled more css out into sub views
+
+ * views/default/css/screen.php, views/default/navigation/pagination.php:
+ Updated pagination to use semantic html
+
+2010-12-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added ability to check for empty string in
+ elgg_get_array_value().
+
+ * engine/lib/entities.php: Fixed a bug that wouldn't let you specify
+ multiple selects in get_entities().
+
+ * engine/lib/relationships.php: Refs #1411. Deprecated
+ get_entities_by_relationship_count() and
+ list_entities_by_relationship_count().
+
+ * engine/tests/api/entity_getter_functions.php: Removed the silly things I
+ was doing in the egef_relationship_count() test.
+
+2010-12-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/ajax/loader.php, views/default/graphics/ajax_loader.php:
+ moved ajax loader into the graphics view directory
+
+ * views/default/css/components/OOCSS_LICENSE,
+ views/default/css/components/forms.php,
+ views/default/css/components/grid.php,
+ views/default/css/components/heading.php,
+ views/default/css/components/reset.php,
+ views/default/css/components/spacing.php,
+ views/default/css/components/typography.php,
+ views/default/css/elements/OOCSS_LICENSE,
+ views/default/css/elements/forms.php, views/default/css/elements/grid.php,
+ views/default/css/elements/heading.php, views/default/css/elements/reset.php,
+ views/default/css/elements/spacing.php,
+ views/default/css/elements/typography.php, views/default/css/screen.php:
+ changed css/components to css/elements
+
+ * views/default/css/screen.php, views/default/page/elements/footer.php,
+ views/default/page/elements/header.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/shells/default.php: using the generic .elgg-inner class on
+ topbar, header, and footer
+
+2010-12-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/entity_getter_functions.php: D'oh. Re-enabled the other
+ getter unit tests.
+
+ * engine/lib/relationships.php,
+ engine/tests/api/entity_getter_functions.php: Refs #1411: Added
+ elgg_get_entity_from_relationship_count().
+
+2010-12-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/comments/latest.php: comment views have been moved
+
+ * engine/lib/views.php, mod/blog/views/default/blog/sidebar_menu.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/list.php, views/default/comments/list.php,
+ views/default/layout/elements/comments.php,
+ views/default/layout/objects/list.php: Fixes #2189 created the object/list
+ view with semantic markup
+
+ * engine/lib/elgglib.php, engine/lib/views.php, mod/blog/lib/blog.php,
+ mod/bookmarks/bookmarklet.php, mod/bookmarks/start.php,
+ mod/diagnostics/index.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/search.php, mod/file/world.php, mod/groups/all.php,
+ mod/groups/index.php, mod/groups/membership.php, mod/members/index.php,
+ mod/search/index.php, mod/sitepages/sitepages_functions.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/page/elements/body.php,
+ views/default/page/elements/content.php,
+ views/default/page/elements/content_header.php,
+ .../page/elements/content_header_member.php,
+ views/default/page/elements/footer.php,
+ views/default/page/elements/header.php,
+ views/default/page/elements/header_logo.php,
+ views/default/page/elements/html_begin.php,
+ views/default/page/elements/html_end.php,
+ views/default/page/elements/messages.php,
+ views/default/page/elements/topbar.php,
+ views/default/page/elements/topbar_logout.php,
+ views/default/page/shells/admin.php, views/default/page/shells/default.php,
+ views/default/page/shells/walled_garden.php,
+ views/default/page_elements/body.php,
+ views/default/page_elements/content.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_logo.php,
+ views/default/page_elements/html_begin.php,
+ views/default/page_elements/html_end.php,
+ views/default/page_elements/messages.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_elements/topbar_logout.php,
+ views/default/page_shells/admin.php, views/default/page_shells/default.php,
+ views/default/page_shells/walled_garden.php,
+ views/failsafe/page/shells/default.php,
+ views/failsafe/page_shells/default.php, views/foaf/page/shells/default.php,
+ views/foaf/page_elements/contentwrapper.php,
+ views/foaf/page_shells/default.php, views/ical/page/shells/default.php,
+ views/ical/pageshells/pageshell.php,
+ views/installation/page/shells/default.php,
+ views/installation/page_shells/default.php,
+ views/json/page/shells/default.php,
+ views/json/page_elements/contentwrapper.php,
+ views/json/page_shells/default.php, views/opendd/page/shells/default.php,
+ views/opendd/pageshells/pageshell.php, views/php/page/shells/default.php,
+ views/php/page_shells/default.php, views/rss/page/shells/default.php,
+ views/rss/page_elements/contentwrapper.php,
+ views/rss/page_shells/default.php, views/xml/page/shells/default.php,
+ views/xml/page_shells/default.php: reorganized the page views as discussed
+
+ * views/js/object/default.php, views/js/pageshells/pageshell.php,
+ views/js/user/default.php: removed unused viewtype js
+
+ * views/default/layout/elements/owner_block.php,
+ views/default/layout/elements/sidebar.php,
+ views/default/layout/elements/title.php,
+ views/default/layout/shells/administration.php,
+ .../layout/shells/one_column_with_sidebar.php,
+ views/default/layout/shells/one_sidebar.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/sidebar.php,
+ views/default/page_elements/title.php: moved a few elements to layout from
+ page
+
+ * views/default/content/filter.php, views/default/content/footer.php,
+ views/default/content/header.php, views/default/content/sidebar.php,
+ views/default/layout/shells/content.php,
+ views/default/layout/shells/content/filter.php,
+ views/default/layout/shells/content/footer.php,
+ views/default/layout/shells/content/header.php,
+ views/default/layout/shells/content/sidebar.php: moved content views into
+ layout/shells/content
+
+2010-12-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/item/wrapper.php: Refs #2700 fixed another stray
+ conversion in riverdashboard
+
+ * engine/lib/views.php, mod/blog/start.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ views/default/layout/objects/media.php,
+ views/default/layout/objects/module.php,
+ views/default/layout/shells/administration.php,
+ views/default/layout/shells/content.php,
+ views/default/layout/shells/default.php,
+ views/default/layout/shells/one_column.php,
+ .../layout/shells/one_column_with_sidebar.php,
+ views/default/layout/shells/one_sidebar.php,
+ views/default/layout/shells/two_sidebar.php,
+ views/default/layout/shells/widgets.php,
+ views/default/layout_elements/media.php,
+ views/default/layout_elements/module.php,
+ views/default/layouts/administration.php, views/default/layouts/default.php,
+ views/default/layouts/main_content.php, views/default/layouts/one_column.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/layouts/one_sidebar.php, views/default/layouts/two_sidebar.php,
+ views/default/layouts/widgets.php, views/default/output/tagcloud.php:
+ reorganized the layout views
+
+2010-12-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Refs #2220. Check that an autoload class is
+ registered before trying to include it.
+
+ * engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginPackage.php: Removed leading _ in private var names.
+
+
+2010-12-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser17.php,
+ engine/classes/ElggPluginManifestParser18.php,
+ engine/classes/ElggPluginPackage.php, engine/tests/api/plugins.php,
+ engine/tests/test_files/plugin_18/manifest.xml: Renamed 'elgg' manifest
+ requirment to 'elgg_version' to be more in line with the current options.
+ Removed assignments in if statements. 1.7 manifest files properly show
+ elgg_version as a requirement.
+
+2010-12-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/views.php,
+ views/default/messages/list.php, views/default/page_elements/messages.php,
+ views/default/page_shells/admin.php, views/default/page_shells/default.php,
+ views/default/page_shells/walled_garden.php: cleaned up system messages
+ display code
+
+ * views/default/friends/list.php,
+ views/default/messages/exceptions/exception.php: removing unused views
+
+ * views/default/css/screen.php, views/default/layout_elements/media.php,
+ views/default/layout_elements/module.php: added more options to module view
+
+ * engine/lib/views.php, languages/en.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/list.php, views/default/comments/forms/edit.php,
+ views/default/forms/comments/add.php,
+ views/default/layout_elements/media.php: comments use the media view now
+
+ * mod/blog/lib/blog.php, views/default/css/screen.php: Fixed minor display
+ issues with blog breadcrumbs and also the archives page
+
+2010-12-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/screen.php, views/default/navigation/breadcrumbs.php:
+ rewrote breadcrumbs
+
+ * languages/en.php: changed "my friends" to "friends"
+
+ * engine/lib/views.php, mod/blog/languages/en.php, mod/blog/lib/blog.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/forms/blog/save.php,
+ mod/blog/views/default/js/blog/save_draft.php, views/default/css/screen.php:
+ blog plugin now uses the new elgg_view_form() function
+
+ * engine/lib/views.php: Fixes #2616 Adds Evan's view form convenience
+ function
+
+ * engine/lib/views.php, mod/blog/views/default/object/blog.php,
+ views/default/annotation/generic_comment.php: added a convience function for
+ the media content pattern - is elgg_view_media() a good name?
+
+ * mod/blog/views/default/object/blog.php,
+ views/default/annotation/generic_comment.php, views/default/css/screen.php,
+ views/default/layout_elements/media.php: changed img | body media element to
+ icon | body
+
+ * engine/lib/views.php: moved the view functions around so that they are
+ grouped together by function
+
+ * engine/lib/views.php, languages/en.php, mod/blog/actions/blog/delete.php,
+ mod/blog/actions/blog/save.php, mod/blog/languages/en.php,
+ mod/blog/lib/blog.php, mod/blog/start.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php, views/default/content/filter.php,
+ views/default/content/header.php, views/default/css/components/forms.php:
+ Clean-up of the blog plugin - now using urls from 1.7.5
+
+ * mod/uservalidationbyemail/start.php: fixed bug in uservalidationbyemail
+ permissions hook handler - was giving everyone permission to everything
+
+2010-12-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, mod/blog/blog_lib.php, mod/blog/lib/blog.php,
+ mod/blog/start.php: Fixes #2519 we can now register and load php libraries -
+ blog plugin is using this
+
+ * engine/lib/views.php, mod/blog/views/default/object/blog.php,
+ views/default/annotation/generic_comment.php,
+ views/default/comments/latest.php, views/default/css/screen.php,
+ views/default/entities/list.php: object/blog view uses new media view - needs
+ some clean up
+
+ * engine/lib/views.php, mod/blog/views/default/blog/sidebar_menu.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/world.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/comments/latest.php, views/default/css/screen.php,
+ views/default/layout_elements/media.php,
+ views/default/layout_elements/module.php: welcome to the new media view - it
+ is being used in the new latest comments module
+
+ * views/default/css/screen.php, views/default/layouts/main_content.php,
+ views/default/layouts/one_sidebar.php, views/default/page_elements/body.php,
+ views/default/page_elements/content.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_shells/default.php: using classes for page level divs
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/object/blog.php, views/default/content/header.php,
+ views/default/css/screen.php: fitting blog object display into new html
+ structure
+
+ * mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ views/default/annotation/latest_comments.php, views/default/css/screen.php,
+ views/default/layout_elements/module.php, views/default/layouts/module.php,
+ views/default/output/tagcloud.php: blog sidebar html updates finished - uses
+ modules!
+
+ * mod/blog/blog_lib.php, mod/blog/start.php,
+ views/default/content/filter.php, views/default/content/footer.php,
+ views/default/content/header.php, views/default/content/sidebar.php,
+ views/default/css/screen.php, views/default/layouts/main_content.php: a
+ better main content view structure
+
+ * views/default/css/screen.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/page_elements/content.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_shells/default.php: striking balance between all classes
+ and giving ids on major layout elements for easy css-only theming
+
+ * engine/lib/views.php: check if there are any messages before grabbing them
+ in elgg_view_page()
+
+2010-12-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Fixes #2706 simplecache url generator was not
+ handling an empty last cache date
+
+ * install/ElggInstaller.php, install/css/install.css,
+ views/installation/install/forms/template.php,
+ views/installation/install/nav.php,
+ views/installation/install/pages/complete.php,
+ views/installation/page_shells/default.php: Refs #2706 updates display of
+ installer due to switch to dashes in CSS elements
+
+2010-12-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/cache_handler.php: Cache handler needs to support _ in
+ views
+
+ * mod/riverdashboard/index.php,
+ .../views/default/riverdashboard/ecml/activity.php: Refs #2700: Removed a few
+ stray hyphens.
+
+ * install/ElggInstaller.php: Refs #2706. Added configuration.php to
+ installation engine bootstrapping. Required because of use of
+ elgg_get_site_url().
+
+2010-12-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/components/grid.php: updated grid css - added sixths
+
+ * engine/lib/views.php, views/default/entities/list.php,
+ views/default/entities/list_item.php: Refs #2189 the beginning of semantic
+ markup for entity lists - needs some reorganization
+
+ * views/default/navigation/tabs.php: removed extra div in navigation/tabs
+
+2010-12-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/item/wrapper.php: Another stray hyphens
+
+ * .../views/default/river/item/list.php: hyphen snuck in to
+ elgg_view_river_item
+
+2010-12-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser.php,
+ engine/classes/ElggPluginManifestParser17.php,
+ engine/classes/ElggPluginManifestParser18.php,
+ engine/classes/ElggPluginPackage.php, engine/lib/plugins.php,
+ engine/tests/api/plugins.php, engine/tests/test_files/plugin_17/manifest.xml,
+ engine/tests/test_files/plugin_18/manifest.xml, languages/en.php: Refs #1986
+ #2170 #2225. Added semantic manifest.xml support and unit tests. Also added
+ plugin dependencies system. See
+ engine/tests/test_files/plugin_18/manifest.xml for examples. Not closing
+ tickets pending discussion.
+
+ * mod/oauth_lib/manifest.xml, mod/sitepages/manifest.xml: Removed more
+ incompatible 1.8 attributes in 1.7-style manifests.
+
+ * mod/ecml/manifest.xml: Removing unsupported 1.7-style manifest elements.
+
+2010-12-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php, mod/blog/start.php, views/default/css/screen.php,
+ views/default/layouts/module.php,
+ views/default/page_elements/main_header.php,
+ views/default/page_elements/main_module.php,
+ views/default/page_elements/main_nav.php: preview of what the main content
+ area looks like with a module approach
+
+ * views/default/css/screen.php, views/default/navigation/breadcrumbs.php:
+ updated breadcrumbs with elgg- namespace
+
+ * views/default/css/screen.php, views/default/layouts/one_column.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/page_elements/footer.php: adjusted the one column and two
+ column layouts
+
+ * mod/blog/views/default/object/blog.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/groups/groupprofile.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/messages/views/default/messages/messages.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php, views/default/css/screen.php,
+ views/default/js/initialise_elgg.php, views/default/likes/forms/edit.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php: Refs #2700 completed the _ to -
+ conversion for screen.css (leaves admin.css and plugin css)
+
+2010-12-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/start.php: Refs #2700. Fixed a misplaced - in
+ riverdashboard from the css _ to - conversion.
+
+2010-12-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/layouts/module.php: adding a generic module layout
+
+ * views/default/css/screen.php, views/default/page_elements/header.php:
+ cleaned up header css for new layout
+
+2010-12-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Better code and docs or previous.
+
+ * engine/lib/elgglib.php: Added 'true' as a truthy value for ini_get_bool().
+
+
+2010-12-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css/screen.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/page_elements/footer.php: more cleanup of the basic layout css
+
+ * views/default/css/screen.php, views/default/page_elements/topbar.php:
+ cleaned up the topbar css
+
+ * views/default/widgets/wrapper.php: fixed typo in widget display
+ deprecation
+
+ * views/default/page_elements/footer.php: restored the powered by badge
+ image
+
+ * js/lib/ui.js, views/default/css/components/reset.php,
+ views/default/css/screen.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/messages/errors/list.php, views/default/messages/list.php,
+ views/default/messages/messages/list.php,
+ views/default/page_elements/content.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_shells/default.php: rough implementation of Evan's page
+ layout
+
+ * engine/lib/sites.php: added a function for getting current site entity
+
+ * js/lib/ui.js, js/lib/ui.widgets.js, views/default/js/initialise_elgg.php,
+ views/default/layouts/widgets.php, views/default/widgets/add_panel.php,
+ views/default/widgets/wrapper.php: Refs #2700 fixed the widget code with the
+ new CSS element names
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php,
+ .../views/default/river/object/blog/create.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/view.php,
+ .../views/default/defaultwidgets/editor.php,
+ .../views/default/embed/web_services/content.php,
+ mod/ecml/views/default/settings/ecml/edit.php,
+ mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/object/file/embedlist.php, mod/file/friends.php,
+ mod/file/index.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/upload.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/widgets/filerepo/content.php, mod/groups/groupprofile.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../default/river/relationship/member/create.php,
+ .../views/default/invitefriends/formitems.php, mod/members/index.php,
+ mod/members/views/default/members/css.php,
+ .../views/default/members/members_navigation.php,
+ mod/members/views/default/members/search.php,
+ .../views/default/widgets/messageboard/content.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/view.php, mod/notifications/start.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../views/default/river/object/page/create.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../default/profile/editdefaultprofileitems.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/listing.php,
+ .../views/default/profile/profile_navigation.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ .../default/admin/overview/reportedcontent.php,
+ .../views/default/reportedcontent/form.php,
+ mod/riverdashboard/endpoint/get_comments.php,
+ mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ mod/riverdashboard/start.php, .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/ecml/activity.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/search_box.php,
+ .../views/default/canvas/layouts/frontpage.php,
+ mod/sitepages/views/default/sitepages/css.php,
+ mod/sitepages/views/default/sitepages/members.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ mod/thewire/views/default/thewire/css.php,
+ .../views/default/thewire/profile_status.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/account/login_dropdown.php,
+ views/default/account/login_walled_garden.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/overview.php, views/default/admin/overview/online.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/admin/users/newest.php, views/default/admin/users/online.php,
+ views/default/ajax/loader.php, views/default/annotation/annotate.php,
+ views/default/annotation/annotatelike.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/annotation/likes.php, views/default/comments/forms/edit.php,
+ views/default/css/admin.php, views/default/css/ie.php,
+ views/default/css/ie6.php, views/default/css/screen.php,
+ views/default/dashboard/blurb.php, views/default/entities/entity_listing.php,
+ views/default/export/entity.php, views/default/export/metadata.php,
+ views/default/export/relationship.php, views/default/friends/collection.php,
+ views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php, views/default/friends/picker.php,
+ views/default/input/userpicker.php, views/default/js/friendsPickerv1.php,
+ views/default/js/initialise_elgg.php,
+ views/default/layouts/administration.php,
+ views/default/layouts/one_column.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/layouts/widgets.php, views/default/likes/forms/edit.php,
+ views/default/likes/forms/link.php, views/default/messages/errors/list.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/navigation/listtype.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/site_nav.php, views/default/navigation/tabs.php,
+ .../notifications/settings/usersettings.php,
+ views/default/output/rss_view.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_logo.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_elements/topbar_logout.php,
+ views/default/page_shells/walled_garden.php,
+ views/default/river/item/wrapper.php, views/default/settings/system.php,
+ views/default/settings/upgrading.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/widgets/add_button.php, views/default/widgets/add_panel.php,
+ views/default/widgets/controls.php, views/default/widgets/settings.php,
+ views/default/widgets/wrapper.php,
+ views/installation/page_shells/default.php: Refs #2700 replaced most
+ underscores with hyphens - there may be broken display code due to extent of
+ this change
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/object/blog.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/defaultwidgets/editor.php,
+ mod/ecml/views/default/ecml/input_ext.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/link.php,
+ mod/file/views/default/object/file.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/object/groupforumtopic.php,
+ .../views/default/invitefriends/formitems.php,
+ .../views/default/messageboard/forms/add.php,
+ .../views/default/widgets/messageboard/content.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/view.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../default/admin/appearance/defaultprofile.php,
+ .../profile/commentwall/commentwall_content.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../default/profile/editdefaultprofileitems.php,
+ mod/profile/views/default/profile/editicon.php,
+ .../views/default/profile/profile_ownerblock.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/riverdashboard/css.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/twitter/views/default/twitter/css.php,
+ .../uservalidationbyemail/unvalidated_user.php,
+ views/default/account/forms/register.php,
+ views/default/account/login_walled_garden.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/css/admin.php,
+ views/default/css/components/forms.php, views/default/css/ie.php,
+ views/default/css/ie6.php, views/default/css/screen.php,
+ views/default/friends/picker.php, views/default/input/access.php,
+ views/default/input/button.php, views/default/input/checkbox.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php, views/default/input/userpicker.php,
+ views/default/js/upload_js.php, views/default/layouts/widgets.php,
+ views/default/page_elements/content_header.php,
+ views/default/page_shells/walled_garden.php,
+ views/default/usersettings/form.php, views/default/widgets/add_button.php,
+ views/installation/input/access.php, views/installation/input/button.php,
+ views/installation/input/longtext.php, views/installation/input/password.php,
+ views/installation/input/text.php: Refs #2700 changed underscores to hyphens
+ for the forms css elements
+
+ * views/default/css/admin.php, views/default/css/components/OOCSS_LICENSE,
+ views/default/css/components/forms.php,
+ views/default/css/components/grid.php,
+ views/default/css/components/heading.php,
+ views/default/css/components/reset.php,
+ views/default/css/components/spacing.php,
+ views/default/css/components/typography.php, views/default/css/screen.php:
+ Refs #2317 pulled a few sections of CSS out to try out granular CSS
+
+ * views/default/css.php, views/default/css/screen.php: moved the CSS into
+ the new css/screen view and added a check for old themes
+
+2010-12-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php, mod/blog/start.php, mod/bookmarks/start.php,
+ mod/captcha/start.php, mod/categories/start.php, mod/ecml/start.php,
+ mod/embed/start.php, mod/file/start.php, mod/groups/start.php,
+ mod/members/start.php, mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/riverdashboard/start.php,
+ mod/search/start.php, mod/sitepages/start.php, mod/tagcloud/start.php,
+ mod/thewire/start.php, mod/tinymce/start.php, mod/twitter/start.php,
+ mod/zaudio/start.php, views/default/css/elgg.php,
+ views/default/css/screen.php: screen.css is a better name for our main css
+ file
+
+2010-12-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Fixes #1457. Added optional status param for
+ get_installed_plugins()
+
+2010-12-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Fixes #2461 unsetting CONFIG variable in
+ unset_config()
+
+ * engine/lib/access.php: Fixes #2430 adds
+ get_entities_from_access_collection() into trunk
+
+ * .../views/default/widgets/filerepo/content.php,
+ mod/file/views/default/widgets/filerepo/view.php,
+ .../views/default/widgets/friends/content.php,
+ mod/friends/views/default/widgets/friends/view.php,
+ .../default/widgets/a_users_groups/content.php,
+ .../views/default/widgets/a_users_groups/view.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php,
+ .../views/default/widgets/messageboard/content.php,
+ .../views/default/widgets/messageboard/view.php,
+ mod/pages/views/default/widgets/pages/content.php,
+ mod/pages/views/default/widgets/pages/view.php,
+ .../views/default/widgets/tagcloud/content.php,
+ .../views/default/widgets/tagcloud/view.php,
+ .../views/default/widgets/thewire/content.php,
+ mod/thewire/views/default/widgets/thewire/view.php,
+ .../views/default/widgets/twitter/content.php,
+ mod/twitter/views/default/widgets/twitter/view.php,
+ views/default/widgets/wrapper.php: Fixes #2555 content.php is the new display
+ view for widgets
+
+2010-11-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Fix typo in previous.
+
+ * engine/classes/ElggPlugin.php, engine/classes/ElggPluginManifest.php,
+ engine/classes/ElggPluginManifestParser.php,
+ engine/classes/ElggPluginManifestParser17.php,
+ engine/classes/ElggPluginManifestParser18.php, engine/lib/plugins.php,
+ engine/tests/api/plugins.php: Refs #1986 #2170 #2225 Added
+ ElggPluginManifest, ElggPluginManifestParser, and its parser classes for 1.7
+ and 1.8 style manifests. Changed load_plugin_manifest() to use new parser.
+ Added initial unit tests.
+
+2010-11-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/user/passwordreset.php, actions/usersettings/save.php,
+ pages/account/register.php, pages/dashboard/latest.php,
+ pages/friends/pickercallback.php: Refs #2428 removed a few CONFIG uses in
+ core
+
+ * mod/crontrigger/start.php, mod/garbagecollector/start.php,
+ mod/invitefriends/start.php, mod/logbrowser/start.php, mod/members/start.php,
+ mod/messageboard/start.php, mod/reportedcontent/start.php,
+ mod/sitepages/start.php, mod/thewire/start.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php: Refs #2428 removed some global CONFIG
+ usage in plugins
+
+ * mod/uservalidationbyemail/start.php: fixed typo in uservalidationbyemail
+ plugin
+
+ * mod/messages/start.php, mod/messages/views/default/messages/topbar.php:
+ started cleaning up the messages plugin
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php: Refs #2428 adds
+ elgg_get_plugin_path() and elgg_get_data_path()
+
+ * mod/zaudio/manifest.xml, mod/zaudio/readme.txt, mod/zaudio/start.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/mpg.php,
+ mod/zaudio/views/default/zaudio/audioplayer.php,
+ mod/zaudio/views/default/zaudio/css.php: Updated the zaudio plugin for 1.8
+
+2010-11-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggEntity.php: Refs #2668: Deprecated
+ ElggEntity::setContainer() for setContainerGUID()
+
+2010-11-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Fixes #2694 fixed typo in join_group()
+
+ * engine/handlers/export_handler.php: fixed typo in the code that I moved
+ from /services/export
+
+ * mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php: Fixes #2508 Sending user to referrer
+ in reported content admin actions
+
+ * engine/lib/configuration.php, views/default/page_shells/admin.php,
+ views/default/page_shells/default.php,
+ views/default/page_shells/walled_garden.php: Refs #2428 added
+ elgg_get_config(), elgg_set_config(), and elgg_save_config()
+
+ * views/default/css/admin.php: removed reported content css in admin css
+ view
+
+ * mod/crontrigger/start.php, mod/garbagecollector/languages/en.php,
+ mod/garbagecollector/start.php,
+ .../default/settings/garbagecollector/edit.php,
+ mod/logrotate/languages/en.php, mod/logrotate/start.php,
+ .../views/default/settings/logrotate/edit.php, mod/tinymce/languages/en.php,
+ mod/tinymce/start.php: cleaned up some of the other smaller plugins
+
+ * mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ .../views/default/admin/overview/logbrowser.php,
+ .../views/default/logbrowser/adminlinks.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/logbrowser/table.php,
+ mod/logbrowser/views/default/object/logwrapper.php: Cleaned up the log
+ browser plugin
+
+ * mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/languages/en.php, mod/reportedcontent/start.php,
+ .../default/admin/overview/reportedcontent.php,
+ .../views/default/object/reported_content.php,
+ .../views/default/reportedcontent/admin_css.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/footer_link.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/reportedcontent/user_report.php: cleaned up the reported
+ content plugin
+
+2010-11-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/views.php,
+ views/default/friends/picker.php, views/default/page_elements/html_begin.php:
+ Fixes #2173 #2507 integrated the ie and admin stylesheets into the new
+ simplecache code
+
+ * _css/css.php, _css/js.php, engine/handlers/cache_handler.php,
+ engine/lib/views.php, engine/start.php, htaccess_dist, simplecache/view.php,
+ views/default/css/elgg.php, views/default/friends/picker.php: Fixes #2160
+ #2678 introducing a more flexible simplecache handler (this requires an
+ htaccess update)
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, views/default/css/admin.php,
+ views/default/css/ie.php, views/default/css/ie6.php,
+ views/default/css_ie.php, views/default/css_ie6.php,
+ views/default/layouts/administration.php,
+ views/default/page_elements/html_begin.php,
+ views/default/page_elements/html_begin_admin.php,
+ views/default/page_shells/admin.php: Refs #2173 #2160 #2507 added a css page
+ handler to support multiple css files
+
+ * services/export/handler.php: Refs #2681 removes services directory
+
+ * engine/handlers/export_handler.php, htaccess_dist: Fixes #2681 moves
+ export handler into handler directory - current installs need to have
+ .htaccess updated
+
+ * engine/lib/web_services.php, services/api/rest_api.php: moved rest/rpc web
+ services handler into web_services library
+
+ * engine/lib/api.php, engine/lib/web_services.php, engine/start.php,
+ install/ElggInstaller.php: moved api.php to web_services.php as it is more
+ descriptive
+
+2010-11-27 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/ajax/loader.php: Fixes #2280: ajax/loader view starts out
+ with display set to none
+
+2010-11-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: Updated contrib file.
+
+ * CONTRIBUTORS.txt, README.txt: Cleaned up some typos and formatting issues
+ in README and CONTRIB files.
+
+ * CONTRIBUTORS.txt, COPYRIGHT.txt: Fixed typos and cleaned up copyright and
+ contrib file.
+
+2010-11-24 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Fixes #2664: elgg_view_entity subtype defaults to
+ "default" rather than $type
+
+ * engine/handlers/page_handler.php, engine/handlers/pagehandler.php,
+ htaccess_dist: Fixes #2667: pagehandler.php => page_handler.php. You'll need
+ to update .htaccess to keep developing
+
+ * mod/sitepages/start.php: unnecessary declaration of global $CONFIG;
+
+ * mod/blog/blog_lib.php, mod/blog/start.php, mod/sitepages/start.php:
+ Removing superfluous calls to insert site root in urls
+
+ * engine/lib/metadata.php: Deprecated list_entities_from_metadata_multi
+
+ * languages/en.php: Added generic function deprecation translation
+
+ * mod/bookmarks/actions/add.php, mod/bookmarks/actions/edit.php,
+ mod/defaultwidgets/actions/update.php, mod/defaultwidgets/start.php,
+ mod/file/actions/upload.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/featured.php, mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/start.php,
+ mod/messages/actions/delete.php, mod/pages/actions/pages/edit.php,
+ mod/pages/actions/pages/editwelcome.php, mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/editfield.php, mod/profile/actions/iconupload.php,
+ mod/profile/actions/reorder.php, mod/profile/actions/resetdefaultprofile.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/start.php,
+ mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php:
+ Refs #2451: Removes (admin_)gatekeeper() calls from core plugin actions
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, actions/admin/site/update_advanced.php,
+ actions/admin/site/update_basic.php, actions/admin/user/ban.php,
+ actions/admin/user/delete.php, actions/admin/user/makeadmin.php,
+ actions/admin/user/removeadmin.php, actions/admin/user/resetpassword.php,
+ actions/admin/user/unban.php, actions/comments/add.php,
+ actions/email/save.php, actions/entities/delete.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/remove.php, actions/import/opendd.php, actions/likes/add.php,
+ .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php, actions/user/spotlight.php,
+ actions/useradd.php, actions/usersettings/save.php,
+ engine/lib/notification.php, engine/lib/users.php: Refs #2451: Removed
+ gatekeeper/admin_gatekeeper() calls from core actions
+
+ * engine/lib/actions.php, engine/lib/admin.php, engine/lib/elgglib.php,
+ engine/lib/export.php, engine/lib/plugins.php, engine/lib/sessions.php,
+ engine/lib/users.php, engine/lib/widgets.php, mod/blog/start.php,
+ mod/bookmarks/start.php, mod/categories/start.php,
+ mod/defaultwidgets/start.php, mod/diagnostics/start.php, mod/ecml/start.php,
+ mod/file/start.php, mod/groups/start.php, mod/invitefriends/start.php,
+ mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/sitepages/start.php,
+ mod/thewire/start.php, mod/uservalidationbyemail/start.php: Fixes #2655:
+ Converted register_action to elgg_register_action throughout core
+
+ * engine/lib/actions.php: Refs #2655: Introducing elgg_register_action() + a
+ few fixes to typos in documentation
+
+2010-11-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/cron_handler.php, engine/lib/cron.php: Fixes #2472 move
+ cron_handler.php logic into cron page handler
+
+ * mod/groups/views/default/groups/groupprofile.php: Fixes #2638 - specifying
+ the full url on the urls so we don't have this problem anymore
+
+ * mod/embed/start.php, mod/pages/start.php, mod/profile/start.php,
+ mod/sitepages/start.php, views/default/page_elements/html_begin.php: Fixes
+ #2270 - deprecates metatags view and replaces with html_head/extend
+
+ * mod/profile/actions/cropicon.php, mod/profile/actions/iconupload.php:
+ Fixes #2418 and merges [7121] into trunk
+
+ * engine/lib/widgets.php: returning an empty array when there are no widgets
+ for a context
+
+ * views/default/css.php: adjusted text color of widget titles
+
+ * views/default/input/checkbox.php, views/default/input/checkboxes.php:
+ Fixes #397 and Refs #2396 Can suppress the default value for both
+ input/checkbox and input/checkboxes
+
+2010-11-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggSite.php, engine/lib/sites.php: Fixes #2488 "return"
+ was missing in ElggSite::getObjects() (also updated some documentation)
+
+ * engine/classes/ElggSite.php, engine/lib/sites.php: updated the deprecated
+ list_site_members() to use new ElggSite::listMembers() method and updated
+ ElggSite::getMembers() to accept all the arguments from elgg_get_entities()
+
+ * engine/lib/sites.php: deprecated some sites functions that were never
+ supported or fully implemented
+
+ * engine/lib/database.php, engine/lib/plugins.php: Refs #2673 moved changes
+ into trunk from 1.7 branch
+
+2010-11-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Refs #2660: Merged r7409's
+ remove_group_tool_option() to trunk.
+
+ * mod/bookmarks/actions/add.php,
+ mod/bookmarks/views/default/object/bookmarks.php: Merged bookmarks XSS fixes
+ in r7406 to trunk.
+
+2010-11-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: widgets should not have content outside their
+ container
+
+ * engine/classes/ElggWidget.php, engine/lib/widgets.php: widget column ids
+ must be integers
+
+2010-11-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/user/password.php, languages/en.php,
+ views/default/user/settings/password.php: Refs #2669: Merged password change
+ fixes in 7404 to trunk.
+
+ * mod/members/views/default/members/search.php: Refs #2612: Merged r7402 to
+ trunk.
+
+ * mod/profile/views/default/profile/listing.php,
+ .../default/profile/profile_contents/details.php: Refs #2670: Merged XFN
+ fixes from 1.7 to 1.8. Removed unused code in profile_contents/details.php
+
+2010-11-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/index.php: removed call to deprecated page_owner()
+
+ * engine/lib/tags.php, mod/blog/views/default/blog/sidebar_menu.php,
+ mod/file/start.php, mod/tagcloud/tagcloud.php,
+ .../views/default/widgets/tagcloud/view.php: removed deprecated tag library
+ calls
+
+ * engine/classes/ElggSite.php, engine/lib/sites.php, engine/lib/views.php,
+ mod/thewire/index.php: deprecated two site functions and removed a use of
+ previously deprecated function in the wire plugin
+
+ * engine/lib/widgets.php: fix for previous
+
+ * engine/lib/widgets.php: use more Elgg standrad function names -
+ elgg_register_widget_type()
+
+2010-11-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ui.widgets.js: added hack for opera/jquery-ui bug
+
+ * js/lib/ui.widgets.js, languages/en.php, views/default/css.php,
+ views/default/widgets/controls.php, views/default/widgets/wrapper.php: added
+ collapsible state to widgets
+
+ * engine/classes/ElggData.php: Refs #2629 Brett is correct - don't need the
+ call to initializeAttributes() because all the first level subclasses call
+ initializeAttributes()
+
+ * engine/classes/ElggData.php, engine/classes/ElggFile.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggWidget.php: Refs #2629 This
+ should fix this ticket. Need to remove initialise_attributes from any class
+ updated with new method and add call to initializeAttributes in ElggData for
+ those that are not updated.
+
+ * engine/classes/ElggWidget.php, languages/en.php, views/default/css.php,
+ views/default/dashboard/blurb.php, views/default/widgets/controls.php,
+ views/default/widgets/wrapper.php: added some light styling to the widget
+ control buttons
+
+2010-11-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggGroup.php, engine/classes/ElggObject.php,
+ engine/classes/ElggSite.php, engine/classes/ElggUser.php: Fixes #2629: Pulled
+ old initialise_attributes() into ElggData and added a default param to emit a
+ deprecation notice if called.
+
+2010-11-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/widgets/settings.php: Fixes #1342 dashboard widgets do not
+ have access controls
+
+ * js/lib/ui.widgets.js, mod/friends/start.php,
+ views/default/widgets/add_panel.php, views/default/widgets/wrapper.php: Fixes
+ #472 handling interactive adding/deleting of widgets with single/multiple
+ instance constraints
+
+ * js/lib/ui.widgets.js, languages/en.php, mod/friends/start.php,
+ views/default/css.php, views/default/layouts/widgets.php,
+ views/default/widgets/add_panel.php: Refs #472 not allowing widgets to be
+ added if only single instance allowed
+
+ * actions/widgets/add.php, actions/widgets/save.php,
+ engine/classes/ElggWidget.php, engine/lib/widgets.php: moved save widget
+ settings function to ElggWidget
+
+ * engine/lib/widgets.php, views/default/layouts/widgets.php: added a plugin
+ hook for determining who can edit a widget layout
+
+ * actions/widgets/add.php, engine/classes/ElggWidget.php,
+ js/lib/ui.widgets.js: fixed bug where widgets were not saving their new
+ position
+
+ * engine/classes/ElggWidget.php: do not need special canEdit method for
+ ElggWidget
+
+ * engine/classes/ElggEntity.php, engine/tests/objects/objects.php: Refs
+ #2668 adds getContainerGUID()
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggUser.php,
+ engine/classes/Loggable.php, engine/lib/entities.php,
+ engine/lib/extender.php, engine/tests/objects/entities.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/actions/leave.php,
+ mod/thewire/actions/delete.php: Fixes #2668 adding getOwnerGUID()
+
+2010-11-20 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/helpers.php: Fixed typos in text expectations that were
+ cause elgg_normalize_url unit tests to fial
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggObject.php, engine/classes/ElggSite.php,
+ engine/classes/ElggUser.php, engine/tests/objects/entities.php,
+ engine/tests/objects/objects.php, engine/tests/objects/sites.php,
+ engine/tests/objects/users.php: Fixes #2490: attributes initialize to NULL
+ instead of empty string or 0. Updated tests to reflect this
+
+ * engine/classes/ElggPlugin.php: Marking initialise_attributes as deprecated
+ in ElggPlugin
+
+ * engine/classes/ElggGroup.php: Marking initialise_attributes as deprecated
+
+ * engine/handlers/pagehandler.php, engine/lib/actions.php,
+ engine/lib/elgglib.php, engine/lib/group.php, engine/lib/sessions.php: Fixes
+ #2237: Added 'reason' parameter to forward() to allow proper headers and more
+ flexible destinations via plugin hooks. Also made use of this in core
+ gatekeeper functions and in pagehandler.php
+
+ * views/default/input/checkbox.php, views/default/input/checkboxes.php:
+ Fixes #2396: Added a new input/checkbox view. input/checkboxes harnesses it
+
+ * engine/lib/views.php: Fixes #2615: Viewtype now included in views plugin
+ hooks
+
+ * mod/htmlawed/start.php: Fixes #2497: htmLawed now uses a plugin hook for
+ allowed_styles and htmlawed_config
+
+ * engine/lib/elgglib.php, engine/lib/users.php: Fixes #2468: Deprecated
+ call_gatekeeper() and callpath_gatekeeper()
+
+ * views/default/output/calendar.php, views/default/output/confirmlink.php,
+ views/default/output/email.php, views/default/output/friendlytime.php,
+ views/default/output/pulldown.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php: Fixes #2036: using htmlspecialchars in output
+ views
+
+ * js/lib/security.js: Fixes #2620: Security token refresh action is now
+ security/refreshtoken
+
+ * mod/messageboard/actions/add.php: Fixes #2357: messageboard post action
+ redirects to referrer
+
+ * engine/classes/ElggEntity.php, engine/lib/entities.php,
+ engine/tests/objects/entities.php: Fixes #2473: removes
+ initialise_entity_cache()
+
+ * mod/blog/views/default/blog/forms/edit.php, mod/diagnostics/index.php,
+ .../views/default/embed/web_services/content.php,
+ .../views/default/admin/users/unvalidated.php,
+ views/default/admin/plugins/advanced.php, views/default/input/button.php,
+ views/default/input/reset.php, views/default/input/submit.php,
+ views/installation/input/reset.php, views/installation/input/submit.php: Refs
+ #2143: DRY up button input views (button, reset, submit). Changed core uses
+ of button to reflect the fact that it no longer defaults to submit
+
+ * js/lib/security.js: Utilizing elgg.extend, rather than jQuery.extend
+
+ * js/lib/languages.js: Commented elgg.add_translation Utilizing elgg.extend
+ instead of $.extend
+
+ * js/lib/elgglib.js: Added an elgg.extend method for merging two or more
+ objects
+
+ * views/default/input/submit.php: Refs #2143: Cleaned up input/submit
+
+ * views/default/input/tags.php: Refs #2143: DRY up input/tags
+
+ * views/default/input/email.php: Refs #2143: DRY up input/email
+
+ * views/default/input/text.php: Refs #2143: DRY up input/text
+
+ * views/default/input/form.php: Refs #2143: DRYed up input/form
+
+ * engine/lib/output.php: Doesn't make any sense for elgg_format_attributes
+ to default to an empty array...
+
+ * engine/lib/output.php, views/default/input/url.php,
+ views/default/output/url.php: Refs #2143: Added elgg_format_attributes() for
+ generating an attribute string from an associative array. DRYed up
+ input/output url
+
+2010-11-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/add.php, engine/lib/widgets.php, js/lib/ui.widgets.js,
+ views/default/css.php, views/default/layouts/widgets.php,
+ views/default/widgets/add.php, views/default/widgets/add_panel.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/settings.php,
+ views/default/widgets/wrapper.php: improving interactions of widgets -
+ containment wasn't working due to height issues
+
+ * engine/lib/widgets.php, views/default/widgets/add.php,
+ views/default/widgets/wrapper.php: finished updated the widgets library
+
+ * actions/widgets/save.php, js/lib/ui.widgets.js,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php:
+ updating widget contents when settings are changed
+
+ * actions/widgets/save.php, engine/lib/widgets.php, js/lib/ui.widgets.js,
+ views/default/css.php, views/default/widgets/controls.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php:
+ saving widget settings
+
+ * actions/widgets/delete.php, engine/classes/ElggWidget.php,
+ engine/lib/widgets.php, js/lib/ui.widgets.js, languages/en.php,
+ views/default/css.php, views/default/widgets/controls.php,
+ views/default/widgets/wrapper.php: users can delete widgets from layout
+
+ * actions/widgets/add.php, actions/widgets/move.php,
+ engine/classes/ElggWidget.php, engine/lib/widgets.php: moved some widget
+ functionality into ElggWidget class
+
+ * mod/file/views/default/widgets/filerepo/edit.php,
+ mod/file/views/default/widgets/filerepo/view.php: updated file widget to use
+ 1.7 elgg_get_entities* APIs
+
+ * .../views/default/widgets/bookmarks/edit.php,
+ .../views/default/widgets/bookmarks/view.php: updated bookmarks widget to use
+ 1.7 APIs
+
+ * actions/register.php: Closes #2653 users are logged in on registration and
+ login exceptions are caught for unvalidated users
+
+ * engine/lib/users.php, mod/uservalidationbyemail/actions/delete.php,
+ .../actions/resend_validation.php,
+ mod/uservalidationbyemail/actions/validate.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php: Closes #617 core has get and set
+ functions for user validation status
+
+ * actions/widgets/add.php, actions/widgets/move.php, engine/lib/widgets.php,
+ js/lib/ui.widgets.js, languages/en.php, views/default/layouts/widgets.php,
+ views/default/widgets/wrapper.php: saving widget position after moving
+
+ * engine/lib/version.php: $CONFIG->path is not set up early enough for some
+ elgg deprecate notices
+
+ * engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/pagehandler.php, engine/handlers/service_handler.php,
+ engine/handlers/xml-rpc_handler.php: switching to using full paths in
+ handlers
+
+2010-11-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/add.php, engine/lib/widgets.php, js/lib/ui.widgets.js:
+ Added functions to support moving and adding widgets
+
+ * engine/lib/widgets.php, views/default/css.php,
+ views/default/layouts/widgets.php, views/default/widgets/wrapper.php: Refs
+ #1793 getting sorted widgets from elgg_get_widgets()
+
+ * actions/widgets/add.php, engine/lib/widgets.php, js/lib/ui.widgets.js,
+ languages/en.php, views/default/css.php, views/default/layouts/widgets.php,
+ views/default/widgets/add.php, views/default/widgets/add_button.php: Refs
+ #1793 added ability to add widgets to layout through ajax
+
+ * engine/lib/location.php: Refs #1411, #2165 added
+ elgg_list_entities_from_location() and deprecated in_area functions
+
+ * engine/lib/location.php, engine/tests/api/entity_getter_functions.php:
+ Refs #2165 adds elgg_get_entities_from_location()
+
+ * engine/lib/private_settings.php,
+ engine/tests/api/entity_getter_functions.php: Refs #2165 added
+ elgg_get_entities_from_private_settings()
+
+2010-11-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/url.php: Refs #2143 I need ids for urls for the
+ widget code right now
+
+ * engine/lib/widgets.php, js/lib/ui.widgets.js, languages/en.php,
+ views/default/css.php, views/default/layouts/widgets.php,
+ views/default/widgets/add.php, views/default/widgets/add_button.php: Refs
+ #1793 - added a basic add new widgets view - it is not wired up yet
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/removeadmin.php, actions/admin/user/resetpassword.php,
+ actions/admin/user/unban.php, languages/en.php: Closes #1422 admin user
+ actions now check for self before banning, deleting, or removing admin
+ privileges
+
+ * pages/friends/index.php, pages/friends/of.php: Refs #1411 using new
+ elgg_list* functions in friends page handlers
+
+ * pages/friends/index.php, pages/friends/of.php: Refs #2662 removed html
+ from friends page handlers
+
+ * js/lib/ui.widgets.js, views/default/css.php,
+ views/default/layouts/widgets.php, views/default/widgets/wrapper.php: Refs
+ #821 #1793 early widget layout - does not include edit settings, delete,
+ collapsing, reloading, or adding widgets
+
+2010-11-16 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/lib/functions.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../uservalidationbyemail/unvalidated_user.php: Refs #2573 updates the
+ uservalidationbyemail plugin to work with new validation metadata approach
+
+ * engine/lib/upgrades/2010111501.php, version.php: Fixes #2573 upgrade
+ script for new user validation approach
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/views.php,
+ install/ElggInstaller.php: Fixes #2642 changed elgg_view_page() to always
+ pick up page_shell views for the page_shells directory
+
+ * .gitignore, engine/lib/actions.php, engine/settings.example.php,
+ install/ElggInstaller.php: Pulled in hellekin's fixes from
+ https://github.com/Elgg/Elgg/pull/2
+
+ * engine/lib/views.php: made page_draw() backward compatible with 1.7
+
+ * engine/lib/install.php: just in case any plugin called the previous
+ install functions, I put them back as stubs
+
+2010-11-15 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Refs #617 put user validation functions back in
+ users lib
+
+ * mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php: Refs #2573 fixes validation issue for
+ users registered with validation turned off. Still need to write an upgrade
+ script since validation status wasn't set on unvalidated users before this
+
+ * engine/classes/ElggPAM.php, engine/lib/pam.php,
+ mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/start.php: Fixes #1417 Users get notified when
+ their accounts are not validated for any authentication attempt
+
+ * actions/register.php: #Refs 2653 removed login() call since it was
+ conflicting with user validation plugin
+
+2010-11-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, engine/classes/ElggPAM.php,
+ engine/classes/LoginException.php, engine/lib/api.php, engine/lib/pam.php,
+ engine/lib/sessions.php, engine/tests/services/api.php, languages/en.php:
+ Refs #1417 Elgg core now passes back useful messages to user when log in
+ fails - uservalidationbyemail is next
+
+ * index.php: fixed bug where the front page wasn't being populated with the
+ views
+
+ * engine/classes/ElggAccess.php: fixed typo in comment
+
+2010-11-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/entities/entity_listing.php: Refs
+ #2391: Baby steps toward getting a unified css -- haven't landed on a name
+ yet, but listing/icon/info seems to make the most sense. Do we need to be
+ worried about naming collisions, since those names are so simple?
+
+ * js/classes/ElggPriorityList.js, js/lib/elgglib.js, js/lib/events.js,
+ js/lib/languages.js, js/lib/prototypes.js, js/tests/ElggEventsTest.js,
+ js/tests/ElggLibTest.js, js/tests/jsTestDriver.conf, vendors/sprintf.js,
+ views/default/js/initialise_elgg.php: Refs #2538: Added vsprintf support to
+ elgg.echo. Added unit tests for normalize_url, added prototype definitions
+ for Array#forEach for compatibility with IE.
+
+ * js/classes/ElggPriorityList.js, js/lib/events.js: Refs #2538: Refactored
+ and cleaned up ElggPriorityList and events
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/calendar.php, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/location.php, engine/lib/metadata.php,
+ engine/lib/relationships.php, engine/lib/users.php, engine/lib/views.php,
+ mod/ecml/ecml_functions.php, mod/file/search.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/object/file.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/search/views/default/search/entity_list.php,
+ views/default/entities/entity_list.php,
+ views/default/navigation/listtype.php, views/default/navigation/viewtype.php,
+ views/default/object/default.php, views/default/user/default.php: Fixes
+ #2334: Converted viewtype => listtype and viewtypetoggle => listtypetoggle.
+ Did my best to maintain backwards compatibility but might have missed
+ something...
+
+ * engine/tests/api/helpers.php: Added some more unit tests for
+ elgg_normalize_url
+
+ * engine/classes/ElggEntity.php: No comment...
+
+ * engine/classes/ElggEntity.php: Wow, what a blunder -- what to go deleting
+ random methods, Winslow
+
+ * views/default/input/button.php: Refs #1208: Default input/button to
+ 'button' type (rather than 'submit' type).
+
+ * engine/classes/ElggEntity.php: Refs #2486: Added support for the
+ 'recursive' parameter to ElggEntity::delete()
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggData.php,
+ engine/classes/ElggEntity.php: Added comments to several undocumented methods
+
+ * mod/pages/actions/pages/editwelcome.php: Fixes #2572: Removed last
+ @license tag from pages plugin
+
+2010-11-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Fixes #2561 fixed typo - thanks for the report
+
+2010-11-13 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/objects/entities.php: Cleaning up database after new
+ ElggEntity unit test.
+
+2010-11-12 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/tests/objects/entities.php: Updating
+ ElggEntity::clearMetaData() to fail when passed a non-existent metadata name.
+ Fixes #2273
+
+2010-11-11 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Obliterated C&P in elgg_trigger_plugin_hook
+
+ * engine/lib/elgglib.php: Making CodeSniffer happy + reduced C&P in
+ elgg_trigger_event
+
+2010-11-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Refs #2641 merged [7295] into trunk
+
+ * mod/groups/views/default/groups/groupprofile.php: Fixes #2638 fixes group
+ action url problem
+
+ * mod/groups/all.php: Refs #2640 fixes a layout issue due to change in
+ elgg_view_layout()
+
+ * views/default/canvas/default.php,
+ views/default/canvas/layouts/administration.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/one_column_with_sidebar.php,
+ views/default/canvas/layouts/widgets.php: Closes #2637 good-bye canvas
+
+ * engine/lib/views.php, views/default/layouts/administration.php,
+ views/default/layouts/default.php, views/default/layouts/one_column.php,
+ views/default/layouts/one_column_with_sidebar.php,
+ views/default/layouts/widgets.php: Refs #2637 moved canvas/layouts to layouts
+
+
+ * engine/lib/admin.php, engine/lib/tags.php, engine/lib/users.php,
+ engine/lib/views.php, engine/tests/ui/submenu.php, index.php,
+ mod/blog/start.php, mod/bookmarks/bookmarklet.php, mod/bookmarks/start.php,
+ mod/diagnostics/index.php, mod/ecml/start.php, mod/file/edit.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/search.php,
+ mod/file/upload.php, mod/file/world.php, mod/groups/activity.php,
+ mod/groups/addtopic.php, mod/groups/all.php, mod/groups/edit.php,
+ mod/groups/edittopic.php, mod/groups/forum.php, mod/groups/groupprofile.php,
+ mod/groups/index.php, mod/groups/invitations.php, mod/groups/invite.php,
+ mod/groups/membership.php, mod/groups/membershipreq.php, mod/groups/new.php,
+ mod/groups/topicposts.php, mod/invitefriends/index.php,
+ mod/members/index.php, mod/messages/index.php, mod/messages/read.php,
+ mod/messages/send.php, mod/messages/sent.php, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/pages/edit.php, mod/pages/history.php,
+ mod/pages/index.php, mod/pages/new.php, mod/pages/view.php,
+ mod/pages/welcome.php, mod/pages/world.php, mod/profile/edit.php,
+ mod/profile/editicon.php, mod/profile/index.php, mod/profile/start.php,
+ mod/reportedcontent/add.php, mod/riverdashboard/index.php,
+ mod/search/index.php, mod/search/views/default/search/layout.php,
+ mod/sitepages/index.php, mod/sitepages/sitepages_functions.php,
+ mod/tagcloud/tagcloud.php, mod/thewire/add.php, mod/thewire/everyone.php,
+ mod/thewire/index.php, pages/account/forgotten_password.php,
+ pages/account/register.php, pages/dashboard/index.php,
+ pages/dashboard/latest.php, pages/entities/index.php, pages/friends/add.php,
+ pages/friends/collections.php, pages/friends/edit.php,
+ pages/friends/index.php, pages/friends/of.php, pages/settings/plugins.php,
+ pages/settings/statistics.php, pages/settings/user.php,
+ services/export/handler.php, views/default/canvas/default.php,
+ views/default/canvas/layouts/administration.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/one_column_with_sidebar.php,
+ views/default/js/initialise_elgg.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/page_elements/sidebar.php: Fixes #2640 - elgg_view_layout now
+ uses a parameter array like all the other elgg_view* functions
+
+2010-11-11 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixes #2367: Corrected plugin hook documentation
+ to maintain that the default priority is 500
+
+2010-11-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixes #2306: deprecated get/count/list_user_objects
+ as well as get_user_objects_by_metadata
+
+ * engine/lib/elgglib.php: Using max() to give priority a minimum value of 0
+ for plugin hooks
+
+ * actions/login.php, actions/plugins/settings/save.php,
+ actions/register.php, actions/usersettings/save.php,
+ documentation/examples/events/advanced.php,
+ documentation/examples/events/all.php,
+ documentation/examples/events/basic.php,
+ documentation/examples/events/emit.php,
+ documentation/examples/hooks/basic.php,
+ documentation/examples/hooks/register/advanced.php,
+ documentation/examples/hooks/register/all.php,
+ documentation/examples/hooks/register/basic.php,
+ documentation/examples/hooks/register/emit.php,
+ documentation/examples/hooks/trigger/advanced.php,
+ documentation/examples/hooks/trigger/basic.php,
+ documentation/stubs/config.php, engine/classes/ElggSession.php,
+ engine/classes/ElggSite.php, engine/handlers/cron_handler.php,
+ engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/api.php, engine/lib/configuration.php,
+ engine/lib/cron.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/filestore.php, engine/lib/group.php, engine/lib/input.php,
+ engine/lib/location.php, engine/lib/metadata.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/output.php,
+ engine/lib/pageowner.php, engine/lib/plugins.php,
+ engine/lib/relationships.php, engine/lib/sessions.php, engine/lib/sites.php,
+ engine/lib/statistics.php, engine/lib/system_log.php, engine/lib/users.php,
+ engine/lib/usersettings.php, engine/lib/version.php, engine/lib/views.php,
+ engine/lib/widgets.php, engine/start.php, engine/tests/suite.php,
+ engine/tests/test_skeleton.php, index.php, install/ElggInstaller.php,
+ mod/blog/start.php, mod/bookmarks/start.php, mod/captcha/start.php,
+ mod/categories/start.php, mod/crontrigger/start.php,
+ mod/defaultwidgets/start.php, mod/diagnostics/actions/download.php,
+ mod/diagnostics/start.php, mod/ecml/ecml_functions.php, mod/ecml/start.php,
+ mod/embed/start.php, mod/embed/views/default/embed/embed.php,
+ mod/file/start.php, mod/friends/start.php, mod/garbagecollector/start.php,
+ mod/groups/start.php, mod/htmlawed/start.php, mod/invitefriends/start.php,
+ mod/logbrowser/start.php, mod/logrotate/start.php, mod/members/index.php,
+ mod/members/start.php, mod/messageboard/start.php, mod/messages/start.php,
+ mod/notifications/start.php, mod/pages/start.php,
+ mod/profile/actions/edit.php, mod/profile/actions/iconupload.php,
+ mod/profile/start.php, mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/start.php,
+ mod/riverdashboard/start.php, mod/search/index.php, mod/search/start.php,
+ mod/sitepages/start.php, mod/tagcloud/start.php, mod/thewire/start.php,
+ mod/tinymce/start.php, mod/twitter/start.php,
+ mod/uservalidationbyemail/start.php, mod/zaudio/start.php,
+ services/api/rest_api.php, services/export/handler.php,
+ views/default/page_elements/owner_block.php: Fixes #2367: With fear and
+ trepidation, converting events/plugin hooks to use elgg_ prefixed versions
+
+ * engine/lib/views.php: Refs #2124: Removed js, page_owner, and
+ page_owner_user variables from $vars
+
+ * engine/lib/views.php: Refs #2124: Removed session variables from $vars
+
+2010-11-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/register.php: Refs #866 - registration uses
+ https if configured for login
+
+2010-11-10 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/login_box.php: No sense in calling
+ elgg_get_site_url() twice here...
+
+ * views/default/account/login_box.php: Prevent "https login" from breaking
+ login on sites that are https by default
+
+2010-11-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php: Refs #2609 - added fix to trunk
+
+ * views/default/annotation/default.php: Refs #2626 - adds default annotation
+ view to trunk
+
+ * engine/lib/metadata.php: Refs #2632 - cleaned up documentation on metadata
+
+
+ * engine/lib/elgglib.php, engine/lib/users.php, index.php,
+ mod/sitepages/start.php, views/default/account/forms/login.php,
+ views/default/account/forms/login_dropdown.php,
+ .../default/account/forms/login_walled_garden.php,
+ views/default/account/login_box.php,
+ views/default/account/login_dropdown.php,
+ views/default/account/login_walled_garden.php, views/default/css.php,
+ views/default/css_ie.php, views/default/page_elements/header.php: Refs #2506
+ reorged the login box views - css still needs to be cleaned up
+
+ * mod/diagnostics/index.php, mod/members/index.php, mod/search/index.php,
+ mod/sitepages/sitepages_functions.php,
+ views/default/canvas/layouts/administration.php,
+ .../canvas/layouts/one_column_with_sidebar.php,
+ views/default/page_elements/content.php,
+ views/default/page_elements/elgg_content.php,
+ views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/elgg_header.php,
+ views/default/page_elements/elgg_header_logo.php,
+ views/default/page_elements/elgg_sidebar.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/elgg_topbar_logout.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_logo.php,
+ views/default/page_elements/sidebar.php,
+ views/default/page_elements/topbar.php,
+ views/default/page_elements/topbar_logout.php,
+ views/default/page_shells/admin.php, views/default/page_shells/default.php:
+ Fixes #2631 removes 'elgg_' namespace from the page element views - anyone
+ working with the trunk will need to update their theme and/or flush their
+ cache
+
+2010-11-09 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/tests/ElggLibTest.js: Renamed test method appropriately. jslinted
+ ElggLibTest.
+
+ * js/tests/ElggEventsTest.js: Using nullFunction + abstractMethod reference
+ instead of new closures in EventsTest
+
+ * js/tests/ElggAjaxOptionsTest.js: Using nullFunction reference instead of
+ new closure in ajaxOptionsTest
+
+ * js/lib/ui.widgets.js: jslinted ui.widgets.js
+
+ * js/lib/ui.js: jslinted ui.js
+
+ * js/lib/session.js: jsLinted session.js, employed elgg type-checker
+ functions, and did some more miscellaneous cleanup
+
+ * js/lib/elgglib.js: Added elgg.isNumber type-checking function
+
+ * js/lib/security.js: jsLinted security.js + using elgg typecheckers rather
+ than ===
+
+ * js/lib/languages.js: jslinted languages.js
+
+ * js/lib/elgglib.js: Abstract methods are no longer nameable
+
+2010-11-07 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ajax.js: Various tweaks to coding style + comments (apologies for
+ my schizo here... trying to experiment to see what works). Using
+ type-checking helpers rather than raw typeof and === checks
+
+ * js/lib/elgglib.js: Addition of type-checking helper functions, various
+ tweaks to comments, code style, etc.
+
+2010-11-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggDiskFilestore.php: replaced usages of
+ make_file_matrix() with new method makeFileMatrix()
+
+ * views/default/css.php: added text color for warnings otherwise warnings
+ that occur in topbar end up blank
+
+ * engine/lib/entities.php, engine/lib/private_settings.php,
+ engine/start.php, install/ElggInstaller.php: pulled private settings out into
+ a separate lib
+
+ * engine/lib/relationships.php: Refs #1411 fixes bug introduced in [7213]
+ that broke listing relationships
+
+2010-11-06 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * js/lib/ajax.js: jsLinted ajax.js, removed experimental functions
+
+2010-11-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php: removed hacked in link to conversations
+ plugin in riverdashboard
+
+2010-11-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * COPYRIGHT.txt, README.txt: small tweaks to the readme and copyright pages
+
+2010-11-04 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/output.php, engine/tests/api/helpers.php: Fixes #2463: Added
+ support for forwarding to root-level files, e.g. forward('install.php')
+
+2010-11-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/output.php: Refs #2463 Added trim for leading /s to avoid //s
+ when passing elgg_normalize_url('/mod/some/file.php').
+
+2010-11-04 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/output.php, engine/tests/api/helpers.php: Fixes #2463: Added ^
+ to beginning of normalize_url regex to prevent matching on urls like
+ mod/plugin/page.php. Added unit tests to verify functionality.
+
+ * engine/lib/elgglib.php: Added @deprecated docblock tag to events()
+
+ * engine/tests/objects/objects.php: Removed requirement that object
+ container be a group
+
+2010-11-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/views.php,
+ views/default/friends/picker.php, views/default/page_elements/html_begin.php:
+ Fixes #2210 - using new functions for registering the core js and css files
+
+2010-11-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php: Moved list_entities_groups
+ to groups.php and deprecated in favor of elgg_list_entities
+
+2010-11-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/river/create.php: Fixed missing ).
+
+ * COPYRIGHT.txt: Added myself to the copyright.
+
+ * mod/blog/start.php, mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/object/blog.php,
+ .../views/default/river/object/blog/create.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ .../default/river/object/bookmarks/create.php, mod/categories/listing.php,
+ mod/categories/start.php, mod/diagnostics/actions/download.php,
+ mod/diagnostics/start.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/search.php, mod/file/start.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/river/object/file/create.php,
+ mod/garbagecollector/start.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/invite.php, mod/groups/actions/joinrequest.php,
+ mod/groups/activity.php, mod/groups/all.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../river/object/groupforumtopic/annotate.php,
+ .../river/object/groupforumtopic/create.php,
+ .../river/object/groupforumtopic/update.php,
+ .../default/river/relationship/member/create.php,
+ mod/invitefriends/actions/invite.php,
+ .../views/default/invitefriends/formitems.php, mod/members/index.php,
+ mod/messageboard/index.php, mod/messageboard/start.php,
+ .../default/river/object/messageboard/create.php, mod/messages/index.php,
+ mod/messages/read.php, mod/messages/send.php, mod/messages/sent.php,
+ mod/messages/start.php, mod/pages/history.php, mod/pages/index.php,
+ mod/pages/new.php, mod/pages/start.php, mod/pages/view.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/annotate.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/page/update.php,
+ .../default/river/object/page_top/annotate.php,
+ .../views/default/river/object/page_top/create.php,
+ .../views/default/river/object/page_top/update.php, mod/pages/welcome.php,
+ mod/pages/world.php, mod/profile/actions/addcomment.php,
+ mod/profile/actions/edit.php,
+ .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/welcome.php, mod/search/index.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/startblurb.php,
+ mod/search/views/rss/search/comments/entity.php, mod/tagcloud/tagcloud.php,
+ mod/thewire/index.php, mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/rss/object/thewire.php,
+ .../views/rss/search/object/thewire/entity.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ .../uservalidationbyemail/unvalidated_user.php: Fixes #1320: Bundled mods use
+ elgg_echo()'s internal string substitution.
+
+2010-11-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Refs #2351: deprecated get_objects_in_group() in
+ favor of elgg_get_entities(). There's nothing the former can do that the
+ latter can't, so it's not worth maintaining.
+
+2010-11-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, actions/admin/user/delete.php,
+ actions/admin/user/resetpassword.php, actions/comments/add.php,
+ actions/entities/delete.php, actions/friends/add.php,
+ actions/friends/remove.php, actions/likes/add.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, engine/classes/ElggAnnotation.php,
+ engine/classes/ElggDiskFilestore.php, engine/classes/ElggExtender.php,
+ engine/classes/ElggFile.php, engine/classes/ElggFileCache.php,
+ engine/classes/ElggGroup.php, engine/classes/ElggMemcache.php,
+ engine/classes/ElggMetadata.php, engine/classes/ElggObject.php,
+ engine/classes/ElggRelationship.php, engine/classes/ElggSite.php,
+ engine/classes/ElggUser.php, engine/handlers/cron_handler.php,
+ engine/lib/actions.php, engine/lib/api.php, engine/lib/cron.php,
+ engine/lib/database.php, engine/lib/entities.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/group.php, engine/lib/notification.php,
+ engine/lib/objects.php, engine/lib/output.php, engine/lib/plugins.php,
+ engine/lib/relationships.php, engine/lib/sites.php, engine/lib/users.php,
+ engine/lib/xml-rpc.php, index.php, install/ElggInstaller.php,
+ install/ElggRewriteTester.php, languages/en.php, pages/friends/index.php,
+ pages/friends/of.php, services/export/handler.php,
+ views/default/admin/plugins/simple.php,
+ views/default/annotation/annotate.php,
+ views/default/friends/river/create.php,
+ views/default/group/search/startblurb.php, views/default/object/default.php,
+ views/default/user/search/startblurb.php: Refs #1320. Updated core to use
+ elgg_echo()'s native string replacement.
+
+ * engine/lib/languages.php: Refs #1320: elgg_echo() has built-in sprintf
+ support.
+
+ * mod/groups/views/default/groups/find.php: Refs #2582. Merged [7224] to
+ trunk.
+
+2010-11-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, mod/blog/views/default/object/blog.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/object/file/embedlist.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/widgets/filerepo/view.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../views/default/groups/invitationrequests.php,
+ mod/groups/views/default/groups/members.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/widgets/a_users_groups/view.php,
+ .../views/default/admin/overview/logbrowser.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/view.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../views/default/profile/profile_ownerblock.php,
+ .../views/default/reportedcontent/listing.php,
+ mod/riverdashboard/endpoint/get_comments.php,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/entity.php,
+ .../views/default/canvas/layouts/frontpage.php,
+ mod/sitepages/views/default/sitepages/members.php,
+ mod/sitepages/views/default/sitepages/sidebar.php,
+ mod/sitepages/views/default/sitepages/welcome.php,
+ mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ .../default/account/forms/login_walled_garden.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/annotation/likes.php,
+ views/default/canvas/layouts/administration.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/one_column_with_sidebar.php, views/default/css.php,
+ views/default/css_ie.php, views/default/entities/entity_listing.php,
+ views/default/entities/gallery_listing.php, views/default/friends/picker.php,
+ views/default/likes/forms/edit.php, views/default/navigation/pagination.php,
+ views/default/navigation/site_nav.php, views/default/output/rss_view.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_shells/walled_garden.php: Fixes #2440: Converted
+ clearfloat to clearfix, brought back orig clearfloat
+
+ * engine/lib/entities.php: Refs #2050: Added missing docblock parameters
+
+ * engine/classes/ElggEntity.php, engine/lib/entities.php: Fixes #2050: Added
+ subtype parameter to can_write_to_container functions and hooks
+
+ * engine/lib/entities.php: Set return type of get_entity to ElggEntity
+
+ * engine/classes/ElggEntity.php, engine/classes/ElggObject.php: Fixes #2134:
+ Moved getContainerEntity() method to ElggEntity
+
+ * engine/lib/group.php: Refs #1411: Deprecated
+ get_entities_from_metadata_groups(_multi) in favor of
+ elgg_get_entities_from_metadata. Added proper deprecation for
+ delete_group_entity. Unsure of version deprecated -- set to 1.6
+
+ * engine/lib/access.php: bah! forgot to rename all variables in
+ list_entities_from_access_id
+
+ * engine/lib/access.php: Fixed regression in deprecated
+ list_entities_from_access_id -- was passing access_id as 'collection_id'
+ instead of 'access_id'
+
+2010-11-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/api.php, engine/lib/navigation.php,
+ engine/lib/users.php, engine/lib/usersettings.php, engine/lib/views.php,
+ engine/lib/widgets.php, engine/tests/ui/submenu.php, index.php,
+ mod/bookmarks/start.php, .../default/river/object/bookmarks/create.php,
+ mod/categories/listing.php, .../views/default/defaultwidgets/editor.php,
+ mod/diagnostics/index.php, mod/diagnostics/start.php, mod/ecml/start.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/search.php,
+ mod/file/start.php, mod/file/views/default/object/file.php,
+ mod/file/world.php, mod/groups/all.php, mod/groups/forum.php,
+ mod/groups/groupprofile.php, mod/groups/index.php, mod/groups/membership.php,
+ mod/groups/start.php, .../views/default/object/groupforumtopic.php,
+ mod/invitefriends/index.php, mod/invitefriends/start.php,
+ mod/members/index.php, mod/messages/start.php, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/notifications/start.php,
+ mod/pages/actions/pages/edit.php, mod/pages/index.php, mod/pages/start.php,
+ mod/pages/view.php, mod/pages/world.php, mod/profile/edit.php,
+ mod/profile/editicon.php, mod/profile/start.php,
+ mod/riverdashboard/index.php, .../views/default/river/item/wrapper.php,
+ mod/sitepages/index.php, mod/sitepages/start.php,
+ mod/sitepages/views/default/sitepages/metatags.php,
+ .../views/default/widgets/tagcloud/view.php, mod/thewire/start.php,
+ mod/uservalidationbyemail/start.php, pages/dashboard/index.php,
+ pages/dashboard/latest.php, pages/entities/index.php,
+ pages/entities/list.php, views/default/admin/overview/online.php,
+ views/default/admin/users/online.php, views/default/annotation/annotate.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/site_nav.php, views/default/output/tagcloud.php,
+ views/default/page_elements/content_header.php,
+ views/default/widgets/editwrapper.php: Fixes #2128 - replaces all uses of
+ set_context() and get_context() in core and plugins
+
+2010-11-03 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: Fixes #2151: Replaced elgg_get_viewtype()
+ implementation with @cash's much simpler version
+
+ * engine/lib/annotations.php, engine/lib/relationships.php: Refs #1411:
+ Deprecated list_entities_from_relationship() in favor of
+ elgg_list_entities_from_relationship()
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/entities.php, engine/lib/metadata.php: Fixes #2606: Abstracted
+ elgg_list_entities. Takes an optional second argument for the 'getter',
+ defaulting to 'elgg_get_entities'. Converted current elgg_list_entities*
+ functions to use it
+
+ * README.txt: Added .txt for consistency
+
+2010-11-02 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/xml-rpc_handler.php, engine/lib/admin.php,
+ engine/lib/api.php, engine/lib/elgglib.php, engine/lib/tags.php,
+ engine/lib/users.php, engine/lib/xml-rpc.php, engine/tests/ui/submenu.php,
+ index.php, install/ElggInstaller.php, mod/blog/start.php,
+ mod/bookmarks/bookmarklet.php, mod/bookmarks/start.php,
+ mod/categories/listing.php, mod/diagnostics/index.php, mod/ecml/start.php,
+ mod/file/edit.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/search.php, mod/file/upload.php, mod/file/world.php,
+ mod/groups/activity.php, mod/groups/addtopic.php, mod/groups/all.php,
+ mod/groups/edit.php, mod/groups/edittopic.php, mod/groups/forum.php,
+ mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invitations.php, mod/groups/invite.php, mod/groups/membership.php,
+ mod/groups/membershipreq.php, mod/groups/new.php, mod/groups/topicposts.php,
+ mod/invitefriends/index.php, mod/members/index.php,
+ mod/messageboard/history.php, mod/messageboard/index.php,
+ mod/messages/index.php, mod/messages/read.php, mod/messages/send.php,
+ mod/messages/sent.php, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/pages/edit.php, mod/pages/history.php,
+ mod/pages/index.php, mod/pages/new.php, mod/pages/view.php,
+ mod/pages/welcome.php, mod/pages/world.php, mod/profile/edit.php,
+ mod/profile/editicon.php, mod/profile/index.php, mod/profile/start.php,
+ mod/reportedcontent/add.php, mod/riverdashboard/index.php,
+ mod/search/index.php, mod/sitepages/index.php, mod/sitepages/start.php,
+ mod/tagcloud/tagcloud.php, mod/thewire/add.php, mod/thewire/everyone.php,
+ mod/thewire/index.php, pages/account/forgotten_password.php,
+ pages/account/register.php, pages/dashboard/index.php,
+ pages/dashboard/latest.php, pages/entities/index.php,
+ pages/entities/list.php, pages/friends/add.php,
+ pages/friends/collections.php, pages/friends/edit.php,
+ pages/friends/index.php, pages/friends/of.php, pages/settings/plugins.php,
+ pages/settings/statistics.php, pages/settings/user.php,
+ services/api/rest_api.php, services/export/handler.php: Fixes #2360:
+ page_draw => elgg_view_page in core + bundled plugins
+
+ * documentation/examples/hooks/basic.php,
+ documentation/examples/hooks/register/all.php,
+ documentation/examples/hooks/register/emit.php: Fixed several typos in
+ documentation examples
+
+ * documentation/examples/hooks/register/advanced.php, engine/lib/views.php:
+ Refs #2360: Deprecated page_draw in favor of elgg_view_page. Updated
+ packaged documentation to reflect this.
+
+ * engine/lib/elgglib.php, engine/tests/api/helpers.php: Added url
+ normalization support to elgg_register_js and elgg_register_css
+
+ * documentation/examples/hooks/register/advanced.php,
+ documentation/examples/hooks/register/basic.php: Corrected a couple typos in
+ the documentation that are being registered as php errors
+
+ * .../default/messageboard/messageboard_content.php, mod/messages/start.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/view.php, mod/pages/history.php,
+ mod/pages/new.php, mod/pages/start.php, mod/pages/view.php,
+ mod/pages/welcome.php, mod/profile/start.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ .../views/default/riverdashboard/sitemessage.php, mod/sitepages/start.php,
+ mod/thewire/start.php, mod/thewire/views/default/object/thewire.php,
+ .../uservalidationbyemail/unvalidated_user.php: Fixes #2463: Removed
+ gratuitous references to $CONFIG->url, etc. from the rest of the plugins.
+
+ * mod/blog/start.php, mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php, mod/bookmarks/start.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/diagnostics/forms/download.php, mod/file/start.php,
+ mod/file/views/default/object/file.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/join.php, mod/groups/all.php, mod/groups/index.php,
+ mod/groups/membership.php, mod/groups/start.php,
+ mod/groups/views/default/forum/maintopic.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ .../views/default/object/groupforumtopic.php: Refs #2463: Removed gratuitous
+ references to $CONFIG->url, etc. in blog - groups plugins
+
+ * engine/lib/actions.php, engine/lib/entities.php, engine/lib/extender.php:
+ Refs #2463: Added URL normalization support for entity and extender url
+ handlers
+
+ * views/default/page_elements/content_header.php: Refs #2463:
+ page_elements/content_header normalizes 'new_link'
+
+ * engine/lib/entities.php: Refs #2463: Fixed typo of elgg_normalize_url
+ function
+
+ * engine/classes/ElggSite.php, engine/lib/actions.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/navigation.php,
+ engine/lib/views.php, engine/tests/ui/submenu.php, install/ElggInstaller.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/likes.php, views/default/friends/collection.php,
+ views/default/object/default.php,
+ views/default/page_elements/content_header.php,
+ views/default/page_elements/elgg_topbar_logout.php: Refs #2463: Removed some
+ more instances of $CONFIG->url. Added support for elgg_normalize_url to
+ elgg_add_action_tokens_to_url
+
+ * engine/lib/output.php, views/default/output/confirmlink.php,
+ views/default/output/url.php: Refs #2463: Added url normalization support to
+ output/url, output/confirmlink. Enhanced normalization to take care of urls
+ like "example.com"
+
+ * engine/lib/admin.php, engine/lib/users.php, mod/bookmarks/start.php,
+ mod/diagnostics/start.php, .../views/default/diagnostics/runalltests.php,
+ mod/file/views/default/file/embed_upload.php, mod/groups/start.php,
+ mod/invitefriends/start.php, .../views/default/invitefriends/form.php,
+ mod/logbrowser/views/default/logbrowser/form.php, mod/messages/start.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/notifications/groups.php, mod/notifications/start.php,
+ .../default/notifications/subscriptions/form.php, mod/pages/index.php,
+ mod/pages/start.php, mod/pages/view.php, mod/pages/world.php,
+ mod/profile/start.php, .../default/admin/appearance/defaultprofile.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/admin/users/unvalidated.php,
+ views/default/account/forms/forgotten_password.php,
+ .../default/account/forms/login_walled_garden.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugins/simple.php,
+ views/default/comments/forms/edit.php, views/default/friends/forms/edit.php,
+ views/default/object/plugin.php, views/default/usersettings/form.php,
+ views/default/widgets/editwrapper.php: Refs #2463: Removed many more
+ graituitous calls to elgg_get_site_url(), $CONFIG->url, etc.
+
+ * views/default/input/form.php: Refs #2463: input/form now normalizes the
+ action parameter
+
+ * engine/lib/output.php: Refs #2463: Removed stay { that was causing the
+ regexp to break
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/groups/start.php, mod/pages/start.php, mod/riverdashboard/start.php,
+ mod/thewire/start.php: Refs #2463: Removed some gratuitous calls to
+ elgg_get_site_url() from core plugins
+
+ * engine/lib/elgglib.php, engine/lib/navigation.php, engine/lib/output.php:
+ Refs #2463: Added elgg_normalize_url. forward() and add_menu() make use of
+ it
+
+ * actions/admin/menu_items.php, actions/admin/plugins/disable.php,
+ actions/admin/plugins/disableall.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/enableall.php, actions/admin/plugins/reorder.php,
+ actions/admin/plugins/simple_update_states.php,
+ actions/admin/site/update_advanced.php, actions/admin/site/update_basic.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ actions/admin/user/resetpassword.php, actions/admin/user/unban.php,
+ actions/comments/add.php, actions/comments/delete.php,
+ actions/email/save.php, actions/entities/delete.php, actions/friends/add.php,
+ actions/friends/remove.php, actions/import/opendd.php, actions/likes/add.php,
+ actions/likes/delete.php, actions/login.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/user/name.php, actions/useradd.php, actions/usersettings/save.php,
+ actions/widgets/add.php, actions/widgets/reorder.php,
+ actions/widgets/save.php, mod/blog/actions/blog/delete.php,
+ mod/blog/start.php, mod/bookmarks/actions/delete.php,
+ mod/categories/actions/save.php, mod/ecml/actions/save_permissions.php,
+ mod/file/actions/upload.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/edit.php, mod/groups/actions/featured.php,
+ mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/invitefriends/actions/invite.php,
+ mod/messages/actions/delete.php, mod/notifications/actions/groupsave.php,
+ mod/notifications/actions/save.php, mod/pages/actions/pages/delete.php,
+ mod/pages/actions/pages/edit.php, mod/profile/actions/addcomment.php,
+ mod/profile/actions/cropicon.php, mod/profile/actions/deletecomment.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/actions/resetdefaultprofile.php,
+ mod/sitepages/actions/edit_settings.php: Using REFERER shorthand throughout
+ core
+
+ * js/lib/elgglib.js: Refs #2538: Removed stray 'f' from elgg.system_messages
+ that was causing fatal error
+
+ * js/tests/jsTestDriver.conf, jsTestDriver.conf: Refs #2538: Moved
+ jsTestDriver.conf to js/tests/
+
+ * engine/js/classes/ElggEntity.js, engine/js/classes/ElggPriorityList.js,
+ engine/js/classes/ElggUser.js, engine/js/lib/ajax.js,
+ engine/js/lib/configuration.js, engine/js/lib/elgglib.js,
+ engine/js/lib/events.js, engine/js/lib/languages.js,
+ engine/js/lib/security.js, engine/js/lib/session.js, engine/js/lib/ui.js,
+ engine/js/lib/ui.widgets.js, engine/js/tests/ElggAjaxOptionsTest.js,
+ engine/js/tests/ElggAjaxTest.js, engine/js/tests/ElggEventsTest.js,
+ engine/js/tests/ElggLanguagesTest.js, engine/js/tests/ElggLibTest.js,
+ engine/js/tests/ElggPriorityListTest.js, engine/js/tests/ElggSecurityTest.js,
+ engine/js/tests/ElggSessionTest.js, js/classes/ElggEntity.js,
+ js/classes/ElggPriorityList.js, js/classes/ElggUser.js, js/lib/ajax.js,
+ js/lib/configuration.js, js/lib/elgglib.js, js/lib/events.js,
+ js/lib/languages.js, js/lib/security.js, js/lib/session.js, js/lib/ui.js,
+ js/lib/ui.widgets.js, js/tests/ElggAjaxOptionsTest.js,
+ js/tests/ElggAjaxTest.js, js/tests/ElggEventsTest.js,
+ js/tests/ElggLanguagesTest.js, js/tests/ElggLibTest.js,
+ js/tests/ElggPriorityListTest.js, js/tests/ElggSecurityTest.js,
+ js/tests/ElggSessionTest.js, jsTestDriver.conf,
+ views/default/js/initialise_elgg.php: Refs #2538: Moved js directory to elgg
+ root.
+
+ * engine/js/lib/ajax.js, engine/js/lib/elgglib.js,
+ engine/js/tests/ElggLibTest.js, engine/lib/entities.php: Refs #2538: Renamed
+ elgg.extendUrl to elgg.normalize_url
+
+ * engine/js/lib/elgglib.js: Refs #2538: Added type checking to some more
+ core functions
+
+ * engine/js/classes/ElggPriorityList.js, engine/js/lib/elgglib.js,
+ engine/js/lib/events.js, engine/js/lib/languages.js,
+ engine/js/lib/security.js, engine/js/lib/ui.js, engine/js/lib/ui.widgets.js,
+ engine/js/tests/ElggEventsTest.js, engine/js/tests/ElggLibTest.js,
+ engine/js/tests/ElggPriorityListTest.js,
+ views/default/js/initialise_elgg.php: Refs #2538: Added Elggy event system.
+ Javascript boot sequence mimics PHP.
+
+2010-11-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/js/lib/elgglib.js, views/default/css.php,
+ views/default/messages/errors/list.php, views/default/messages/list.php,
+ views/default/messages/messages/list.php: Fixes #2318: Adjusted system
+ message markup + styles to work with ajax actions
+
+ * engine/lib/actions.php: Refs #2538: Pulled in support for ajax actions
+
+ * actions/security/refreshtoken.php, engine/js/classes/ElggEntity.js,
+ engine/js/classes/ElggUser.js, engine/js/lib/elgglib.js,
+ engine/js/lib/languages.js, engine/js/tests/ElggLibTest.js,
+ jsTestDriver.conf, views/default/js/initialise_elgg.php,
+ views/default/js/languages.php, views/default/js/languages/en.php,
+ views/default/page_elements/html_begin.php,
+ views/default/page_elements/html_begin_admin.php,
+ views/default/scripts/initialize_elgg.php: Refs #2538: Added some models,
+ inheritance, more bootstrapping code
+
+ * engine/js/classes/ElggUser.js, engine/js/lib/elgglib.js,
+ engine/js/lib/languages.js, engine/js/lib/session.js,
+ engine/js/tests/ElggLanguagesTest.js: Refs #2538: Pulled in some i18n
+ features
+
+ * engine/js/tests/ElggAjaxOptionsTest.js, engine/js/tests/ElggLibTest.js,
+ engine/js/tests/ElggSecurityTest.js: Commented some js Test files
+
+ * jsTestDriver.conf: Switched jsTestDriver.conf to use default jsTestDriver
+ port
+
+2010-11-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggSite.php: Fixes #2603: Corrected is_public_page() to
+ isPublicPage().
+
+2010-11-01 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/js/lib/ajax.js, engine/js/lib/configuration.js,
+ engine/js/lib/elgglib.js, engine/js/lib/security.js,
+ engine/js/lib/session.js, engine/js/lib/ui.js, engine/js/lib/ui.widgets.js,
+ engine/js/tests/ElggAjaxOptionsTest.js, engine/js/tests/ElggAjaxTest.js,
+ engine/js/tests/ElggLibTest.js, engine/js/tests/ElggSecurityTest.js,
+ engine/js/tests/ElggSessionTest.js, jsTestDriver.conf: Refs #2538: Pulled in
+ elgg JS object and unit tests
+
+2010-10-31 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php: Refs #2597: Pushed getOwner and
+ getOwnerEntity into ElggEntity and ElggExtender
+
+ * engine/classes/ElggData.php, engine/classes/Loggable.php: Refs #2597:
+ Deprecated Loggable::getObjectOwnerGUID()
+
+2010-10-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Refs #2210 - added functions for managing
+ javascript and css files
+
+ * engine/tests/regression/trac_bugs.php: Fixed bug in regression test for
+ upscaling turned off
+
+ * engine/tests/objects/sites.php, engine/tests/objects/users.php: Fixes for
+ [7165] - entity variable changed
+
+ * engine/tests/objects/filestore.php: updated unit test for file matrix to
+ reflect updates in directory structure and class method names
+
+ * engine/tests/objects/entities.php, engine/tests/objects/objects.php,
+ engine/tests/objects/sites.php, engine/tests/objects/users.php: Refs #2597 -
+ fixes some unit tests broken in the reorg of the data models
+
+ * engine/tests/suite.php: Unit tests with the system log turned on are too
+ slow
+
+2010-10-31 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggData.php,
+ engine/classes/ElggEntity.php, engine/classes/ElggMetadata.php,
+ engine/classes/ElggRelationship.php: Refs #2597: Pulled __set, __get, __isset
+ magic functions definitions into ElggData
+
+ * engine/classes/ElggEntity.php: Refs #2597: Auto-initialize temp_metadata,
+ temp_annotations, and volatile as arrays
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggRelationship.php: Refs
+ #2597: Moved "implements Exportable" up to {{{ElggData}}}
+
+ * engine/classes/ElggEntity.php: Refs #2597:
+ ElggEntity::initializeAttributes calls into parent initializeAttributes()
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggData.php,
+ engine/classes/ElggEntity.php, engine/classes/ElggExtender.php,
+ engine/classes/ElggMetadata.php, engine/classes/ElggRelationship.php:
+ Improved initializeAttributes implementations
+
+ * engine/classes/ElggGroup.php, engine/classes/ElggObject.php,
+ engine/classes/ElggUser.php: Refs #2597: Entity type constructors all use
+ initializeAttributes now
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php: Refs #2597: Added getURL(),
+ getTimeCreated(), and initializeAttributes() to {{{ElggData}}}
+
+2010-10-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php: Refs #2597: pulled getOwner and
+ getOwnerEntity functions into ElggData I thought this would be OK even
+ though relationships don't technically have owners because ElggRelationship
+ implemented the getObectOwnerGUID method
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggRelationship.php: Refs
+ #2597: Pulled Loggable functions with identical implementations into ElggData
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggRelationship.php: Refs
+ #2597: Pulled identical {{{Iterator}}} and {{{ArrayAccess}}} implementations
+ into {{{ElggData}}}
+
+2010-10-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php, engine/lib/pageowner.php: Refs #2128 - added
+ stack context functions
+
+2010-10-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggData.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggRelationship.php: Refs
+ #2597: Added a new ElggData class that ElggEntity, ElggExtender, and
+ ElggRelationship all extend
+
+ * views/default/page_elements/title.php: Changed get_submenu to
+ elgg_get_submenu
+
+ * mod/bookmarks/views/default/object/bookmarks.php,
+ mod/ecml/views/default/ecml/input_ext.php,
+ .../views/default/groups/activity_latest.php,
+ mod/groups/views/default/river/forum/create.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ .../views/default/profile/menu/adminlinks.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php:
+ Refs #2598: Converted the rest of the $vars['url'] references to
+ elgg_get_site_url()
+
+ * mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/captcha/views/default/input/captcha.php,
+ mod/categories/views/default/categories/view.php,
+ .../views/default/defaultwidgets/editor.php,
+ .../views/default/diagnostics/runalltests.php,
+ mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/help/blip.tv.php,
+ mod/ecml/views/default/ecml/help/dailymotion.php,
+ mod/ecml/views/default/ecml/help/googlemaps.php,
+ mod/ecml/views/default/ecml/help/livevideo.php,
+ mod/ecml/views/default/ecml/help/redlasso.php,
+ mod/ecml/views/default/ecml/help/slideshare.php,
+ mod/ecml/views/default/ecml/help/vimeo.php,
+ mod/ecml/views/default/ecml/help/youtube.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/js.php, mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/upload/content.php,
+ mod/file/views/default/file/css.php,
+ mod/file/views/default/file/embed_upload.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/icon.php,
+ .../default/file/specialcontent/audio/mid.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/x-wav.php,
+ .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/file/upload.php,
+ mod/file/views/default/object/file.php,
+ mod/file/views/default/widgets/filerepo/view.php,
+ mod/file/views/rss/object/file.php, mod/groups/actions/delete.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../views/default/groups/invitationrequests.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/groups/views/default/groups/side_menu.php,
+ .../views/default/icon/group/default/large.php,
+ .../views/default/icon/group/default/medium.php,
+ .../views/default/icon/group/default/small.php,
+ .../views/default/icon/group/default/tiny.php,
+ .../views/default/object/groupforumtopic.php,
+ .../views/default/river/forum/topic/create.php,
+ .../views/default/invitefriends/form.php,
+ .../views/default/logbrowser/adminlinks.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ .../views/default/members/members_navigation.php,
+ mod/members/views/default/members/search.php,
+ .../views/default/messageboard/css.php,
+ .../views/default/messageboard/forms/add.php,
+ .../default/messageboard/messageboard_content.php,
+ .../views/default/widgets/messageboard/view.php,
+ mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php,
+ .../views/default/notifications/css.php,
+ .../default/notifications/subscriptions/form.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../views/default/icon/object/page/medium.php,
+ mod/pages/views/default/icon/object/page/small.php,
+ .../views/default/icon/object/page_top/medium.php,
+ .../views/default/icon/object/page_top/small.php,
+ mod/pages/views/default/pages/css.php,
+ mod/pages/views/default/pages/metatags.php,
+ mod/pages/views/default/widgets/pages/view.php,
+ mod/profile/actions/cropicon.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../default/profile/editdefaultprofileitems.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/icon.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ .../views/default/profile/profile_ownerblock.php,
+ .../views/default/profile/topbar_extend.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/footer_link.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/search_box.php,
+ .../views/default/sitepages/footer_menu.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ mod/thewire/views/default/widgets/thewire/view.php,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/twitter/views/default/twitter/css.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../uservalidationbyemail/unvalidated_user.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/mpg.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/login_dropdown.php,
+ .../default/account/forms/login_walled_garden.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/plugins/simple.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/annotation/likes.php,
+ views/default/canvas/layouts/administration.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/comments/forms/edit.php, views/default/css.php,
+ views/default/dashboard/blurb.php, views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/forms/edit.php,
+ views/default/group/search/finishblurb.php,
+ views/default/input/autocomplete.php, views/default/input/userpicker.php,
+ views/default/likes/forms/edit.php, views/default/likes/forms/link.php,
+ views/default/object/default.php, views/default/object/plugin.php,
+ views/default/output/tagcloud.php, views/default/output/tags.php,
+ views/default/page_elements/content_header.php,
+ views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/elgg_header_logo.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/elgg_topbar_logout.php,
+ views/default/page_elements/html_begin.php,
+ views/default/page_elements/html_begin_admin.php,
+ views/default/page_shells/walled_garden.php,
+ views/default/settings/system.php, views/default/settings/upgrading.php,
+ views/default/user/search/finishblurb.php,
+ views/default/usersettings/form.php, views/default/widgets/editwrapper.php,
+ views/default/widgets/wrapper.php, views/foaf/page_shells/default.php,
+ views/foaf/user/default.php, views/installation/install/header.php,
+ views/installation/install/nav.php,
+ views/installation/install/pages/complete.php,
+ views/installation/page_shells/default.php: Refs #2598: Converted most
+ $vars['url'] to elgg_get_site_url()
+
+2010-10-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: checking if the site has any groups before looping
+ over them
+
+ * mod/blog/blog_lib.php: fixed minor issue where blog code wasn't setting
+ type when getting subtype
+
+2010-10-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php, engine/lib/relationships.php,
+ install/ElggInstaller.php, mod/blog/start.php,
+ mod/blog/views/default/blog/sidebar_menu.php, mod/bookmarks/start.php,
+ mod/diagnostics/index.php, mod/diagnostics/start.php,
+ mod/file/actions/save.php, mod/file/actions/upload.php, mod/file/start.php,
+ .../default/file/icon/application/default.php,
+ .../views/default/file/icon/application/excel.php,
+ .../views/default/file/icon/application/msword.php,
+ .../views/default/file/icon/application/pdf.php,
+ .../default/file/icon/application/powerpoint.php,
+ .../default/file/icon/application/vnd.ms-excel.php,
+ .../file/icon/application/vnd.ms-powerpoint.php,
+ .../application/vnd.oasis.opendocument.text.php,
+ mod/file/views/default/file/icon/archive.php,
+ mod/file/views/default/file/icon/audio.php,
+ mod/file/views/default/file/icon/default.php,
+ mod/file/views/default/file/icon/document.php,
+ .../views/default/file/icon/text/directory.php,
+ mod/file/views/default/file/icon/video.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/activity.php,
+ mod/groups/forum.php, mod/groups/start.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/start.php,
+ mod/members/index.php, mod/messageboard/start.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/messages/start.php, mod/notifications/groups.php,
+ mod/notifications/start.php, mod/pages/index.php, mod/pages/start.php,
+ mod/pages/view.php, mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/world.php, mod/profile/actions/addcomment.php,
+ mod/profile/start.php, .../default/admin/appearance/defaultprofile.php,
+ .../views/default/reportedcontent/user_report.php,
+ mod/riverdashboard/start.php, mod/search/index.php, mod/thewire/start.php,
+ views/default/page_elements/content_header.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/installation/input/button.php: Refs #2598: Converted virtually all uses
+ of $CONFIG->wwwroot to elgg_get_site_url()
+
+2010-10-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggFile.php, engine/tests/objects/entities.php,
+ mod/blog/classes/ElggBlog.php: finished the conversion to
+ initializeAttributes()
+
+2010-10-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixes #2598: Added elgg_get_site_url()
+
+ * .../admin/appearance/default_dashboard_widgets.php,
+ .../admin/appearance/default_profile_widgets.php, mod/file/search.php,
+ mod/file/world.php, mod/groups/actions/leave.php, mod/pages/world.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ mod/profile/views/default/profile/icon.php,
+ .../views/default/profile/menu/adminlinks.php, mod/thewire/index.php,
+ mod/thewire/start.php: Replaced $_SESSION['id'] and $_SESSION['guid'] with
+ get_loggedin_userid()
+
+2010-10-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: fixed php exception and error handlers not being
+ next to each other in elgglib
+
+ * documentation/stubs/config.php, engine/lib/configuration.php,
+ engine/lib/database.php, engine/lib/install.php, engine/lib/sessions.php,
+ engine/lib/sites.php, engine/lib/version.php, engine/start.php: ripped out
+ last remaining tentacles of old installer from core - just needs removal of
+ install.php when elgg_view() is updated
+
+2010-10-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/users.php, engine/lib/views.php,
+ mod/blog/views/default/blog/sidebar_menu.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/start.php, .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ .../views/default/widgets/bookmarks/view.php,
+ .../views/default/defaultwidgets/editor.php, mod/file/edit.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/search.php,
+ mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/file/upload.php, mod/file/world.php,
+ mod/groups/activity.php, mod/groups/addtopic.php, mod/groups/all.php,
+ mod/groups/edittopic.php, mod/groups/forum.php, mod/groups/index.php,
+ mod/groups/membership.php, mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ .../views/default/groups/activity_latest.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/object/groupforumtopic.php, mod/members/index.php,
+ mod/messageboard/index.php, .../views/default/messageboard/forms/add.php,
+ .../views/default/widgets/messageboard/view.php, mod/messages/send.php,
+ mod/pages/edit.php, mod/pages/history.php, mod/pages/index.php,
+ mod/pages/new.php, mod/pages/start.php, mod/pages/view.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php, mod/profile/edit.php, mod/profile/editicon.php,
+ mod/profile/icon.php, mod/profile/start.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/metatags.php,
+ .../default/profile/profile_contents/details.php,
+ .../views/default/profile/profile_ownerblock.php,
+ mod/reportedcontent/add.php, .../views/default/widgets/tagcloud/view.php,
+ mod/thewire/index.php, mod/thewire/start.php,
+ mod/thewire/views/default/widgets/thewire/view.php, pages/friends/index.php,
+ pages/friends/of.php, pages/friends/pickercallback.php,
+ pages/settings/index.php, pages/settings/plugins.php,
+ pages/settings/statistics.php, pages/settings/user.php,
+ views/default/canvas/layouts/widgets.php,
+ .../notifications/settings/usersettings.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/title.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php,
+ views/foaf/page_shells/default.php: Refs #1439: Using new page_owner
+ functions in all of core
+
+ * engine/lib/filestore.php, mod/bookmarks/actions/add.php,
+ mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ mod/diagnostics/actions/download.php, mod/file/actions/delete.php,
+ mod/file/actions/save.php, mod/file/world.php, mod/groups/actions/delete.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/actions/leave.php,
+ mod/groups/groupprofile.php, mod/groups/membership.php, mod/groups/start.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/side_menu.php, mod/members/index.php,
+ mod/messages/actions/delete.php, mod/messages/send.php,
+ mod/messages/sent.php, mod/messages/start.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php,
+ .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/personal.php,
+ mod/pages/actions/pages/edit.php, mod/pages/edit.php, mod/pages/new.php,
+ mod/pages/start.php, mod/pages/welcome.php, mod/pages/world.php,
+ mod/profile/actions/addcomment.php, mod/profile/actions/edit.php,
+ mod/profile/start.php, mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/icon.php,
+ .../views/default/profile/profile_ownerblock.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/add.php,
+ .../views/default/reportedcontent/form.php,
+ mod/riverdashboard/actions/add.php, mod/riverdashboard/index.php,
+ .../views/default/riverdashboard/ecml/activity.php,
+ .../views/default/riverdashboard/welcome.php, mod/thewire/index.php,
+ mod/thewire/start.php, views/default/canvas/layouts/widgets.php,
+ views/foaf/page_shells/default.php: Refs #2124: Using get_loggedin_user
+ functions instead of $vars['user'], $_SESSION['user'], etc.
+
+ * mod/pages/views/default/pages/breadcrumbs.php,
+ views/foaf/user/default.php: Refs #2124: Using elgg_get_page_owner instead of
+ $vars['page_owner'] in views
+
+2010-10-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: organized functions in elgglib by purpose - more
+ or less
+
+ * engine/lib/elgglib.php, engine/lib/navigation.php, engine/start.php,
+ install/ElggInstaller.php: pulled navigation functions out of elgglib.php
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php: moved datalist code
+ into the configuration lib
+
+ * engine/lib/plugins.php: fixed spelling mistake in comment
+
+ * engine/lib/cache.php, engine/lib/elgglib.php: moved file path cache
+ functions into the cache lib which seems to be a more logical location for
+ them
+
+2010-10-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/useradd.php, engine/lib/entities.php: Fixed an invalid call to
+ get_pageowner_guid() in can_edit_entity(). Removed the call to the validation
+ function in useradd.
+
+2010-10-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt, README.txt: Language changes for contributors and
+ readme.
+
+2010-10-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: small readme tweak.
+
+2010-10-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/mb_wrapper.php: Fixes #2544. Pulled out the eval() for creating
+ elgg_*() mb wrapper functions.
+
+ * engine/lib/filestore.php: Fixes #2150: Removed old code in filestore.
+
+ * CHANGES.txt, _css/css.php, _css/js.php, actions/admin/menu_items.php,
+ actions/admin/plugins/simple_update_states.php, actions/comments/add.php,
+ actions/email/save.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/editcollection.php, actions/friends/remove.php,
+ actions/likes/add.php, actions/likes/delete.php, actions/login.php,
+ actions/register.php, actions/user/language.php, actions/user/password.php,
+ actions/user/spotlight.php, actions/useradd.php,
+ actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php,
+ engine/classes/APIException.php, engine/classes/CallException.php,
+ engine/classes/ClassException.php, engine/classes/ClassNotFoundException.php,
+ engine/classes/ConfigurationException.php, engine/classes/CronException.php,
+ engine/classes/DataFormatException.php, engine/classes/DatabaseException.php,
+ engine/classes/ElggAccess.php, engine/classes/ElggAnnotation.php,
+ engine/classes/ElggCache.php, engine/classes/ElggDiskFilestore.php,
+ engine/classes/ElggEntity.php, engine/classes/ElggExtender.php,
+ engine/classes/ElggFile.php, engine/classes/ElggFileCache.php,
+ engine/classes/ElggFilestore.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggHMACCache.php, engine/classes/ElggMemcache.php,
+ engine/classes/ElggMetadata.php, engine/classes/ElggObject.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggRelationship.php,
+ engine/classes/ElggSession.php, engine/classes/ElggSharedMemoryCache.php,
+ engine/classes/ElggSite.php, engine/classes/ElggStaticVariableCache.php,
+ engine/classes/ElggUser.php, engine/classes/ElggWidget.php,
+ engine/classes/ErrorResult.php, engine/classes/ExportException.php,
+ engine/classes/Exportable.php, engine/classes/Friendable.php,
+ engine/classes/GenericResult.php, engine/classes/IOException.php,
+ engine/classes/ImportException.php, engine/classes/Importable.php,
+ engine/classes/InstallationException.php,
+ engine/classes/InvalidClassException.php,
+ engine/classes/InvalidParameterException.php, engine/classes/Locatable.php,
+ engine/classes/Loggable.php, engine/classes/NotImplementedException.php,
+ engine/classes/Notable.php, engine/classes/NotificationException.php,
+ engine/classes/ODD.php, engine/classes/ODDDocument.php,
+ engine/classes/ODDEntity.php, engine/classes/PluginException.php,
+ engine/classes/RegistrationException.php,
+ engine/classes/SecurityException.php, engine/classes/SuccessResult.php,
+ engine/classes/XMLRPCArrayParameter.php,
+ engine/classes/XMLRPCBase64Parameter.php,
+ engine/classes/XMLRPCBoolParameter.php, engine/classes/XMLRPCCall.php,
+ engine/classes/XMLRPCDateParameter.php,
+ engine/classes/XMLRPCDoubleParameter.php,
+ engine/classes/XMLRPCErrorResponse.php,
+ engine/classes/XMLRPCIntParameter.php, engine/classes/XMLRPCParameter.php,
+ engine/classes/XMLRPCResponse.php, engine/classes/XMLRPCStringParameter.php,
+ engine/classes/XMLRPCStructParameter.php,
+ engine/classes/XMLRPCSuccessResponse.php, engine/classes/XmlElement.php,
+ engine/handlers/xml-rpc_handler.php, engine/lib/access.php,
+ engine/lib/actions.php, engine/lib/admin.php, engine/lib/annotations.php,
+ engine/lib/api.php, engine/lib/calendar.php, engine/lib/configuration.php,
+ engine/lib/cron.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/filestore.php, engine/lib/group.php, engine/lib/input.php,
+ engine/lib/install.php, engine/lib/languages.php, engine/lib/location.php,
+ engine/lib/memcache.php, engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/opendd.php,
+ engine/lib/output.php, engine/lib/pagehandler.php, engine/lib/pageowner.php,
+ engine/lib/pam.php, engine/lib/plugins.php, engine/lib/relationships.php,
+ engine/lib/river.php, engine/lib/sessions.php, engine/lib/sites.php,
+ engine/lib/statistics.php, engine/lib/system_log.php, engine/lib/tags.php,
+ engine/lib/upgrades/2008100701.php, engine/lib/upgrades/2008101303.php,
+ engine/lib/upgrades/2009022701.php, engine/lib/upgrades/2009041701.php,
+ engine/lib/upgrades/2009070101.php, engine/lib/upgrades/2009102801.php,
+ engine/lib/upgrades/2010033101.php, engine/lib/upgrades/2010060401.php,
+ engine/lib/upgrades/2010061501.php, engine/lib/upgrades/2010062301.php,
+ engine/lib/upgrades/2010071001.php, engine/lib/upgrades/2010071002.php,
+ engine/lib/users.php, engine/lib/usersettings.php, engine/lib/version.php,
+ engine/lib/views.php, engine/lib/widgets.php, engine/lib/xml-rpc.php,
+ engine/lib/xml.php, engine/settings.example.php, engine/start.php, index.php,
+ install.php, install/ElggInstaller.php, install/ElggRewriteTester.php,
+ .../views/default/profile/profile_ownerblock.php,
+ pages/account/forgotten_password.php, pages/account/register.php,
+ pages/dashboard/index.php, pages/dashboard/latest.php,
+ pages/entities/index.php, pages/friends/add.php, pages/friends/edit.php,
+ pages/friends/index.php, pages/friends/of.php,
+ pages/friends/pickercallback.php, pages/settings/plugins.php,
+ services/api/rest_api.php, services/export/handler.php, simplecache/view.php,
+ upgrade.php: Standardized code in all of core, not including language files,
+ tests, or core mods.
+
+2010-10-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt, README.txt: Updated readme to reflect the MIT license.
+ Updated contributors to be a flat list.
+
+2010-10-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * simplecache/view.php: Fixes #2590 - simplecache now works when simplecache
+ turned off
+
+2010-10-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/AccessControlQueryComponent.php,
+ engine/classes/DeleteQueryTypeQueryComponent.php,
+ engine/classes/InsertQueryTypeQueryComponent.php,
+ engine/classes/JoinQueryComponent.php,
+ engine/classes/LimitOffsetQueryComponent.php,
+ engine/classes/OrderQueryComponent.php, engine/classes/Query.php,
+ engine/classes/QueryComponent.php,
+ engine/classes/QueryTypeQueryComponent.php,
+ engine/classes/SelectFieldQueryComponent.php,
+ engine/classes/SelectQueryTypeQueryComponent.php,
+ engine/classes/SetQueryComponent.php, engine/classes/SimpleQuery.php,
+ engine/classes/TableQueryComponent.php,
+ engine/classes/UpdateQueryTypeQueryComponent.php,
+ engine/classes/WhereQueryComponent.php,
+ engine/classes/WhereSetQueryComponent.php,
+ engine/classes/WhereStaticQueryComponent.php: Closes #2511. Query object
+ classes removed.
+
+2010-10-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * COPYRIGHT.txt, actions/admin/menu_items.php, actions/comments/add.php,
+ actions/comments/delete.php, actions/entities/delete.php,
+ actions/friends/add.php, actions/friends/addcollection.php,
+ actions/friends/deletecollection.php, actions/friends/editcollection.php,
+ actions/friends/remove.php, actions/import/opendd.php, actions/likes/add.php,
+ actions/likes/delete.php, actions/logout.php,
+ .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/spotlight.php,
+ actions/useradd.php, actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php,
+ engine/classes/ElggFile.php, engine/classes/ElggFileCache.php,
+ engine/classes/ElggFilestore.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggHMACCache.php, engine/classes/ElggMemcache.php,
+ engine/classes/ElggMetadata.php, engine/classes/ElggStaticVariableCache.php,
+ engine/classes/ErrorResult.php, engine/classes/Exportable.php,
+ engine/classes/GenericResult.php, engine/classes/IOException.php,
+ engine/classes/Importable.php,
+ engine/classes/InsertQueryTypeQueryComponent.php,
+ engine/classes/InstallationException.php,
+ engine/classes/InvalidClassException.php,
+ engine/classes/InvalidParameterException.php,
+ engine/classes/JoinQueryComponent.php,
+ engine/classes/LimitOffsetQueryComponent.php, engine/classes/Loggable.php,
+ engine/classes/NotImplementedException.php,
+ engine/classes/NotificationException.php, engine/classes/ODD.php,
+ engine/classes/ODDDocument.php, engine/classes/ODDEntity.php,
+ engine/classes/OrderQueryComponent.php, engine/classes/Query.php,
+ engine/classes/QueryComponent.php,
+ engine/classes/QueryTypeQueryComponent.php,
+ engine/classes/RegistrationException.php,
+ engine/classes/SecurityException.php,
+ engine/classes/SelectFieldQueryComponent.php,
+ engine/classes/SelectQueryTypeQueryComponent.php,
+ engine/classes/SetQueryComponent.php, engine/classes/SimpleQuery.php,
+ engine/classes/SuccessResult.php, engine/classes/TableQueryComponent.php,
+ engine/classes/UpdateQueryTypeQueryComponent.php,
+ engine/classes/WhereQueryComponent.php,
+ engine/classes/WhereSetQueryComponent.php,
+ engine/classes/WhereStaticQueryComponent.php,
+ engine/classes/XMLRPCArrayParameter.php,
+ engine/classes/XMLRPCBase64Parameter.php,
+ engine/classes/XMLRPCBoolParameter.php, engine/classes/XMLRPCCall.php,
+ engine/classes/XMLRPCDateParameter.php,
+ engine/classes/XMLRPCDoubleParameter.php,
+ engine/classes/XMLRPCErrorResponse.php,
+ engine/classes/XMLRPCIntParameter.php, engine/classes/XMLRPCParameter.php,
+ engine/classes/XMLRPCResponse.php, engine/classes/XMLRPCStringParameter.php,
+ engine/classes/XMLRPCStructParameter.php,
+ engine/classes/XMLRPCSuccessResponse.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/api.php, engine/lib/cache.php,
+ engine/lib/calendar.php, engine/lib/cron.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/filestore.php, engine/lib/group.php,
+ engine/lib/input.php, engine/lib/install.php, engine/lib/languages.php,
+ engine/lib/location.php, engine/lib/memcache.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, engine/lib/notification.php,
+ engine/lib/objects.php, engine/lib/opendd.php, engine/lib/output.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/plugins.php, engine/lib/relationships.php, engine/lib/river.php,
+ engine/lib/sessions.php, engine/lib/sites.php, engine/lib/statistics.php,
+ engine/lib/system_log.php, engine/lib/tags.php, engine/lib/users.php,
+ engine/lib/usersettings.php, engine/lib/version.php, engine/lib/widgets.php,
+ engine/lib/xml-rpc.php, engine/lib/xml.php,
+ engine/tests/api/entity_getter_functions.php, engine/tests/api/helpers.php,
+ engine/tests/objects/entities.php, engine/tests/objects/filestore.php,
+ engine/tests/objects/metadata.php, engine/tests/objects/objects.php,
+ engine/tests/objects/sites.php, engine/tests/objects/users.php,
+ engine/tests/regression/trac_bugs.php, engine/tests/services/api.php,
+ engine/tests/suite.php, engine/tests/test_skeleton.php, index.php,
+ install.php, install/ElggInstaller.php, languages/en.php,
+ mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/delete.php, mod/blog/actions/blog/save.php,
+ mod/blog/blog_lib.php, mod/blog/start.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php, mod/bookmarks/actions/add.php,
+ mod/bookmarks/actions/delete.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/start.php, .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../views/default/widgets/bookmarks/edit.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/bookmarks/views/rss/object/bookmarks.php, mod/captcha/captcha.php,
+ mod/captcha/languages/en.php, mod/captcha/start.php,
+ mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php, mod/categories/actions/save.php,
+ mod/categories/listing.php, mod/categories/start.php,
+ mod/categories/views/default/categories.php,
+ mod/categories/views/default/categories/css.php,
+ .../views/default/settings/categories/edit.php, mod/crontrigger/start.php,
+ mod/defaultwidgets/actions/update.php, mod/defaultwidgets/start.php,
+ .../admin/appearance/default_dashboard_widgets.php,
+ .../admin/appearance/default_profile_widgets.php,
+ .../views/default/defaultwidgets/editor.php,
+ mod/diagnostics/actions/download.php, mod/diagnostics/index.php,
+ mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ .../views/default/diagnostics/forms/download.php,
+ .../views/default/diagnostics/runalltests.php,
+ mod/ecml/actions/save_permissions.php, mod/ecml/ecml_functions.php,
+ mod/ecml/languages/en.php, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/help.php,
+ mod/ecml/views/default/ecml/input_ext.php,
+ mod/ecml/views/default/ecml/keywords/blip.tv.php,
+ .../views/default/ecml/keywords/dailymotion.php,
+ mod/ecml/views/default/ecml/keywords/entity.php,
+ .../views/default/ecml/keywords/googlemaps.php,
+ mod/ecml/views/default/ecml/keywords/livevideo.php,
+ mod/ecml/views/default/ecml/keywords/redlasso.php,
+ .../views/default/ecml/keywords/slideshare.php,
+ mod/ecml/views/default/ecml/keywords/user_list.php,
+ mod/ecml/views/default/ecml/keywords/vimeo.php,
+ mod/ecml/views/default/ecml/keywords/youtube.php,
+ mod/ecml/views/default/settings/ecml/edit.php, mod/embed/start.php,
+ mod/embed/views/default/embed/css.php, mod/file/actions/delete.php,
+ mod/file/actions/download.php, mod/file/actions/save.php,
+ mod/file/actions/upload.php, mod/file/download.php, mod/file/edit.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/languages/en.php,
+ mod/file/search.php, mod/file/start.php, mod/file/thumbnail.php,
+ mod/file/upload.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/file/icon.php, mod/file/views/default/file/upload.php,
+ mod/file/views/default/object/file.php, mod/file/views/rss/object/file.php,
+ mod/file/world.php, mod/friends/start.php,
+ mod/friends/views/default/widgets/friends/edit.php,
+ mod/friends/views/default/widgets/friends/view.php,
+ mod/garbagecollector/languages/en.php, mod/garbagecollector/start.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/edit.php,
+ mod/groups/actions/featured.php, mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/all.php, mod/groups/edit.php,
+ mod/groups/graphics/icon.php, mod/groups/groupprofile.php,
+ mod/groups/index.php, mod/groups/invitations.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/membership.php,
+ mod/groups/membershipreq.php, mod/groups/new.php, mod/groups/start.php,
+ mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/group/default.php,
+ .../views/default/groups/activity_latest.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ mod/groups/views/default/groups/members.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/object/groupforumtopic.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php,
+ mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/profileitems.php,
+ mod/groups/views/rss/object/groupforumtopic.php, mod/htmlawed/start.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/index.php,
+ mod/invitefriends/languages/en.php, mod/invitefriends/start.php,
+ .../views/default/invitefriends/form.php,
+ .../views/default/invitefriends/formitems.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ .../views/default/admin/overview/logbrowser.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/object/logwrapper.php,
+ mod/logrotate/languages/en.php, mod/logrotate/start.php,
+ mod/members/index.php, mod/members/languages/en.php, mod/members/start.php,
+ mod/members/views/default/members/css.php,
+ mod/members/views/default/members/search.php,
+ mod/messageboard/actions/add.php, mod/messageboard/actions/delete.php,
+ mod/messageboard/ajax_endpoint/load.php, mod/messageboard/history.php,
+ mod/messageboard/index.php, mod/messageboard/start.php,
+ .../views/default/messageboard/css.php,
+ .../views/default/messageboard/forms/add.php,
+ .../views/default/messageboard/messageboard.php,
+ .../default/messageboard/messageboard_content.php,
+ .../views/default/widgets/messageboard/edit.php,
+ .../views/default/widgets/messageboard/view.php,
+ mod/messages/actions/delete.php, mod/messages/actions/send.php,
+ mod/messages/index.php, mod/messages/languages/en.php, mod/messages/read.php,
+ mod/messages/send.php, mod/messages/sent.php, mod/messages/start.php,
+ mod/messages/views/default/messages/css.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php,
+ mod/notifications/actions/groupsave.php, mod/notifications/actions/save.php,
+ mod/notifications/groups.php, mod/notifications/index.php,
+ mod/notifications/start.php, .../views/default/notifications/css.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/groupsform.php,
+ mod/pages/actions/pages/editwelcome.php, mod/pages/history.php,
+ mod/pages/views/default/widgets/pages/view.php,
+ mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/editfield.php, mod/profile/actions/iconupload.php,
+ mod/profile/actions/reorder.php, mod/profile/actions/resetdefaultprofile.php,
+ mod/profile/edit.php, mod/profile/editicon.php, mod/profile/icon.php,
+ mod/profile/icondirect.php, mod/profile/index.php,
+ mod/profile/javascript.php, mod/profile/profile_lib.php,
+ mod/profile/start.php, .../default/admin/appearance/defaultprofile.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/listing.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/friendlinks.php,
+ mod/profile/views/default/profile/menu/links.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/sidebar.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/languages/en.php, mod/reportedcontent/start.php,
+ .../default/admin/overview/reportedcontent.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/footer_link.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/riverdashboard/ecml/activity.php,
+ .../views/default/riverdashboard/sitemessage.php, mod/search/index.php,
+ mod/search/search_hooks.php, mod/search/start.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/gallery.php,
+ .../views/default/search/gallery_listing.php,
+ mod/search/views/default/search/layout.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/startblurb.php,
+ mod/search/views/rss/search/comments/entity.php,
+ mod/search/views/rss/search/entity.php,
+ mod/search/views/rss/search/listing.php, mod/sitepages/languages/en.php,
+ mod/sitepages/sitepages_functions.php, mod/sitepages/start.php,
+ .../views/default/admin/site/sitepages.php,
+ .../views/default/sitepages/custom_frontpage.php,
+ .../views/default/sitepages/footer_menu.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ .../views/default/sitepages/keywords/sitestats.php,
+ .../views/default/sitepages/keywords/userlist.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/sitepages/views/default/sitepages/metatags.php,
+ mod/thewire/actions/add.php, mod/thewire/actions/delete.php,
+ mod/thewire/add.php, mod/thewire/everyone.php, mod/thewire/index.php,
+ mod/thewire/start.php, mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/thewire/views/default/thewire/notfound.php,
+ mod/thewire/views/default/thewire/view.php,
+ mod/thewire/views/rss/object/thewire.php,
+ .../views/rss/search/object/thewire/entity.php, mod/tinymce/start.php,
+ mod/tinymce/views/default/input/longtext.php, mod/twitter/start.php,
+ mod/twitter/views/default/twitter/css.php,
+ mod/twitter/views/default/widgets/twitter/edit.php,
+ mod/twitter/views/default/widgets/twitter/view.php, mod/zaudio/start.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/mpg.php, pages/dashboard/index.php,
+ pages/dashboard/latest.php, pages/entities/index.php,
+ pages/entities/list.php, pages/friends/add.php,
+ pages/friends/collections.php, pages/friends/edit.php,
+ pages/friends/index.php, pages/friends/of.php,
+ pages/friends/pickercallback.php, pages/settings/index.php,
+ pages/settings/plugins.php, pages/settings/statistics.php,
+ pages/settings/user.php, services/api/rest_api.php,
+ services/export/handler.php, simplecache/view.php, upgrade.php, version.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/admin/appearance/menu_items.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/overview.php,
+ views/default/admin/overview/numentities.php,
+ views/default/admin/overview/online.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/ajax/loader.php, views/default/api/output.php,
+ views/default/canvas/default.php,
+ views/default/canvas/layouts/administration.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/one_column_with_sidebar.php,
+ views/default/comments/forms/edit.php, views/default/dashboard/blurb.php,
+ views/default/entities/entity_list.php,
+ views/default/entities/entity_listing.php,
+ views/default/entities/gallery.php,
+ views/default/entities/gallery_listing.php, views/default/export/entity.php,
+ views/default/export/metadata.php, views/default/export/relationship.php,
+ views/default/friends/collection.php, views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/list.php,
+ views/default/friends/picker.php, views/default/friends/river/create.php,
+ views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php,
+ views/default/graphics/icon.php, views/default/group/default.php,
+ views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php, views/default/input/access.php,
+ views/default/input/autocomplete.php, views/default/input/button.php,
+ views/default/input/captcha.php, views/default/input/checkboxes.php,
+ views/default/input/datepicker.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/form.php,
+ views/default/input/hidden.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/reset.php, views/default/input/securitytoken.php,
+ views/default/input/submit.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/input/urlshortener.php, views/default/input/userpicker.php,
+ views/default/likes/forms/display.php, views/default/likes/forms/edit.php,
+ views/default/likes/forms/link.php, views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/breadcrumbs.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/sidebar_menu.php,
+ views/default/navigation/submenu_group.php,
+ views/default/navigation/submenu_item.php,
+ views/default/navigation/submenu_js.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/navigation/viewtype.php,
+ .../notifications/settings/usersettings.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/object/plugin.php, views/default/object/widget.php,
+ views/default/output/calendar.php, views/default/output/checkboxes.php,
+ views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/email.php, views/default/output/iframe.php,
+ views/default/output/longtext.php, views/default/output/pulldown.php,
+ views/default/output/radio.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php, views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_shells/admin.php, views/default/page_shells/default.php,
+ views/default/river/item/list.php, views/default/river/item/wrapper.php,
+ views/default/settings/system.php, views/default/settings/upgrading.php,
+ views/default/site/default.php, views/default/spotlight/default.php,
+ views/default/upload/upload_form_content.php, views/default/user/default.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php, views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/usersettings/user.php, views/default/widgets/editwrapper.php,
+ views/default/widgets/wrapper.php, views/failsafe/canvas/default.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/page_shells/default.php, views/foaf/canvas/default.php,
+ views/foaf/page_elements/contentwrapper.php,
+ views/foaf/page_shells/default.php, views/foaf/search/entity_list.php,
+ views/foaf/user/default.php, views/ical/canvas/default.php,
+ views/ical/export/entity.php, views/ical/object/default.php,
+ views/ical/pageshells/pageshell.php, views/ical/search/entity_list.php,
+ views/installation/canvas/default.php, views/installation/input/access.php,
+ views/installation/input/button.php, views/installation/input/checkboxes.php,
+ views/installation/input/form.php, views/installation/input/hidden.php,
+ views/installation/input/longtext.php, views/installation/input/password.php,
+ views/installation/input/pulldown.php, views/installation/input/reset.php,
+ views/installation/input/securitytoken.php,
+ views/installation/input/submit.php, views/installation/input/text.php,
+ views/installation/messages/errors/error.php,
+ views/installation/messages/errors/list.php,
+ views/installation/messages/list.php,
+ views/installation/messages/messages/list.php,
+ views/installation/messages/messages/message.php,
+ views/installation/page_shells/default.php, views/js/object/default.php,
+ views/js/pageshells/pageshell.php, views/js/user/default.php,
+ views/json/api/output.php, views/json/canvas/default.php,
+ views/json/export/entity.php, views/json/export/metadata.php,
+ views/json/export/relationship.php, views/json/group/default.php,
+ views/json/messages/exceptions/exception.php, views/json/object/default.php,
+ views/json/page_elements/contentwrapper.php,
+ views/json/page_shells/default.php, views/json/river/item/list.php,
+ views/json/search/entity_list.php, views/json/site/default.php,
+ views/json/user/default.php, views/opendd/canvas/default.php,
+ views/opendd/export/entity.php, views/opendd/export/metadata.php,
+ views/opendd/export/relationship.php, views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/search/entity_list.php, views/opendd/site/default.php,
+ views/opendd/user/default.php, views/php/api/output.php,
+ views/php/canvas/default.php, views/php/export/entity.php,
+ views/php/export/metadata.php, views/php/export/relationship.php,
+ views/php/group/default.php, views/php/messages/exceptions/exception.php,
+ views/php/object/default.php, views/php/page_shells/default.php,
+ views/php/search/entity_list.php, views/php/site/default.php,
+ views/php/user/default.php, views/rss/annotation/default.php,
+ views/rss/canvas/default.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/page_elements/contentwrapper.php,
+ views/rss/page_shells/default.php, views/rss/river/item/list.php,
+ views/rss/search/entity_list.php, views/rss/user/default.php,
+ views/xml/api/output.php, views/xml/messages/exceptions/exception.php,
+ views/xml/page_shells/default.php, views/xml/xml-rpc/output.php: Removed
+ @license, @copyright, and @author from files. License and copyright are
+ covered by LICENSE.txt and COPYRIGHT.txt in root.
+
+2010-10-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * pages/entities/index.php, pages/entities/list.php: Fixes #2578 - entity
+ pages should not need call to load engine
+
+ * engine/lib/elgglib.php: Fixes #733 - events now support PHP callbacks
+
+ * engine/lib/elgglib.php: better creation of event and plugin hook
+ registration arrays
+
+ * engine/lib/elgglib.php: Fixes #2466 - split events() into register and
+ trigger functions
+
+2010-10-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Refs #733 - plugin hooks now support PHP callbacks
+
+
+2010-10-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/actions/add.php, mod/bookmarks/languages/en.php,
+ mod/bookmarks/views/default/object/bookmarks.php: Refs #2551 - merged [7051]
+ and [7053] into trunk
+
+ * views/default/annotation/annotate.php: Merges [7038] into trunk from 1.7
+ branch
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php,
+ actions/admin/plugins/simple_update_states.php: Refs #2537 - merged [7026]
+ into trunk from 1.7 branch
+
+ * engine/lib/views.php, simplecache/view.php: Refs #2410 - merged [7024]
+ into trunk from 1.7 branch
+
+ * mod/profile/views/default/profile/javascript.php,
+ .../views/default/riverdashboard/js.php: Refs #2493 - merged [7008] into
+ trunk from 1.7 branch
+
+ * engine/classes/ElggMemcache.php: Refs #2465 - merged [7007] into trunk
+ from 1.7 branch
+
+ * engine/lib/filestore.php, mod/profile/actions/iconupload.php: Refs #2499 -
+ merged [6990] into trunk from 1.7 branch
+
+ * mod/groups/views/default/river/forum/create.php: Refs #2498 - merged
+ [6982] into trunk from 1.7 branch
+
+ * mod/file/start.php, mod/file/views/default/file/groupprofile_files.php:
+ Refs #2489 - manually merged [6981] from 1.7 branch to keep group file option
+ consistent across Elgg versions
+
+ * engine/lib/database.php: Refs #2474 - merged [6976] from 1.7 branch into
+ trunk
+
+ * mod/pages/actions/pages/editwelcome.php, mod/pages/index.php,
+ mod/pages/start.php, .../views/default/forms/pages/editwelcome.php,
+ mod/pages/welcome.php, mod/pages/world.php: Refs #2496 - manually merged
+ [6975] from 1.7 branch
+
+ * mod/pages/actions/pages/edit.php: fixed stray character that got into
+ pages edit action
+
+ * install/ElggInstaller.php, views/installation/install/forms/admin.php,
+ views/installation/install/forms/database.php,
+ views/installation/install/forms/settings.php: Fixes #2570 - cannot replicate
+ issue with current_page_url() so returned to using it - fixes subdirectory
+ install issue
+
+2010-10-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/languages/en.php: added a check for
+ register globals
+
+2010-10-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/input.php, engine/start.php: Fixes
+ #2563 - setup autoload in elgglib.php so exceptions and other classes are
+ available as soon as possible
+
+ * install/ElggInstaller.php: removed exceptions.php from install boot
+ loading
+
+2010-10-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, languages/en.php: Fixes #2514 - separating action
+ error messages for undefined and no action script file
+
+ * engine/lib/query.php, engine/start.php, install/ElggInstaller.php: Refs
+ #2511 - removed empty query.php lib file
+
+ * engine/lib/elgglib.php, engine/lib/output.php, engine/lib/social.php,
+ engine/start.php, install/ElggInstaller.php: Fixes #2339 - removes social
+ library and deprecates its two functions (put it output.php for lack of a
+ better location)
+
+ * engine/lib/entities.php: Fixes #2403 - adds unregister_entity_type()
+
+2010-10-14 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/exceptions.php, engine/start.php: Deprecated unnecessary
+ exceptions.php lib file
+
+ * mod/blog/classes/ElggBlog.php: Switching blog over to autoload method for
+ plugin classes
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php, engine/start.php,
+ mod/blog/blog_lib.php: Fixes #2547: Plugins can now participate in
+ autoloading classes.
+
+2010-10-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/ElggRewriteTester.php,
+ install/cli/sample_installer.php, install/languages/en.php: Fixes #2556 - one
+ step install now supported with sample cli script
+
+2010-10-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/languages/en.php: Fixes #2312 -
+ checking value of arg_separator.output during install
+
+ * views/installation/input/button.php, views/installation/input/form.php,
+ views/installation/install/forms/admin.php,
+ views/installation/install/forms/database.php,
+ views/installation/install/forms/settings.php,
+ views/installation/install/forms/template.php,
+ views/installation/install/nav.php: Fixes #2522 - disabling form submission
+ after first submission
+
+ * install/ElggRewriteTester.php, install/languages/en.php: Fixes #2521 -
+ added check for old .htaccess
+
+ * install/ElggInstaller.php, install/languages/en.php, languages/en.php:
+ better handling of settings file issues during installation
+
+ * htaccess_dist: forgot to update rewrite rule in htaccess_dist
+
+2010-10-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/ElggRewriteTester.php,
+ install/languages/en.php: Pulled rewrite test out into separate class
+
+2010-10-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/start.php: Fixes #2529 for real this time. Not
+ using made up ElggEntity attributes. Added canEdit() override for user
+ validation so it can disable users after they register.
+
+ * engine/lib/entities.php: Checking for a valid entity before using its
+ methods in update_entity().
+
+ * engine/classes/ElggEntity.php: ElggEntity::disable() and enable() now
+ update the attributes so you don't have stale data on the object.
+
+2010-10-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, engine/settings.example.php,
+ install/ElggInstaller.php, install/languages/en.php: using config variable
+ for minimum password length
+
+ * install/ElggInstaller.php, install/languages/en.php: better error messages
+ when there are already Elgg database tables in the database
+
+ * install/ElggInstaller.php: fixed issue when settings.php is filled out
+ before installation is started
+
+ * engine/lib/elgglib.php, engine/lib/install.php, languages/en.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/page_shells/default.php: handling the database being down/busy
+ or an incomplete install. Also cleaned up failsafe views
+
+ * engine/lib/database.php: removed function replaced by installer
+
+ * install/ElggInstaller.php, views/installation/install/pages/complete.php:
+ finished the auto login option for the installer
+
+2010-10-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/register.php, install/ElggInstaller.php, install/languages/en.php:
+ pulled out special exception in registration action for first admin login
+
+2010-10-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/start.php: Fixes #2529. User validation only
+ prevents logins for disabled users to avoid conflicting with alternative
+ login plugins.
+
+2010-10-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/languages/en.php: using new email
+ validation in installer
+
+ * engine/lib/input.php, engine/lib/users.php: Fixes #2161 - using
+ filter_var() in email validation and moved is_email_address() to the input
+ library
+
+2010-10-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, install/languages/en.php,
+ views/installation/install/pages/complete.php: pulled more language strings
+ out of installer into language file
+
+ * _graphics/elgg_logo.png, install/css/install.css, install/install.css,
+ views/installation/install/header.php,
+ views/installation/page_shells/default.php: added Elgg logo to installer
+ screens
+
+2010-10-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/actions/validate.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../uservalidationbyemail/unvalidated_user.php: Merged some fixes from the
+ 1.7.4 backport of uservalidationbyemail.
+
+2010-10-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, engine/lib/actions.php,
+ engine/lib/elgglib.php, engine/lib/install.php, engine/start.php,
+ install/languages/en.php, languages/en.php,
+ views/default/settings/install.php: removed several parts of the old
+ installer from the core
+
+ * .../messages/sanitisation/dbsettings_error.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/settings/install.php, views/failsafe/settings/system.php:
+ removed old views used in previous installer
+
+ * install/ElggInstaller.php, install/languages/en.php, languages/en.php,
+ views/installation/install/forms/template.php,
+ views/installation/page_shells/default.php: Pulled installation language
+ strings out of core language file into installer
+
+2010-10-05 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2010100500.php, version.php: Creating an upgrade to
+ migrate users from old oauth to new oauth_lib plugin. Closes #2532
+
+ * mod/oauth/manifest.xml, mod/oauth/start.php,
+ mod/oauth/vendors/oauth/LICENSE,
+ mod/oauth/vendors/oauth/example/server/INSTALL,
+ .../vendors/oauth/example/server/core/init.php,
+ .../example/server/core/templates/inc/footer.tpl,
+ .../example/server/core/templates/inc/header.tpl,
+ .../oauth/example/server/core/templates/index.tpl,
+ .../oauth/example/server/core/templates/logon.tpl,
+ .../example/server/core/templates/register.tpl,
+ .../vendors/oauth/example/server/www/hello.php,
+ .../vendors/oauth/example/server/www/index.php,
+ .../vendors/oauth/example/server/www/logon.php,
+ .../vendors/oauth/example/server/www/oauth.php,
+ .../vendors/oauth/example/server/www/register.php,
+ .../oauth/example/server/www/services.xrds.php,
+ mod/oauth/vendors/oauth/library/OAuthDiscovery.php,
+ mod/oauth/vendors/oauth/library/OAuthException.php,
+ mod/oauth/vendors/oauth/library/OAuthRequest.php,
+ .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ mod/oauth/vendors/oauth/library/OAuthRequester.php,
+ mod/oauth/vendors/oauth/library/OAuthServer.php,
+ mod/oauth/vendors/oauth/library/OAuthStore.php,
+ .../library/body/OAuthBodyContentDisposition.php,
+ .../library/body/OAuthBodyMultipartFormdata.php,
+ .../vendors/oauth/library/discovery/xrds_parse.php,
+ .../vendors/oauth/library/discovery/xrds_parse.txt,
+ .../OAuthSignatureMethod.class.php, .../OAuthSignatureMethod_HMAC_SHA1.php,
+ .../signature_method/OAuthSignatureMethod_MD5.php,
+ .../OAuthSignatureMethod_PLAINTEXT.php,
+ .../OAuthSignatureMethod_RSA_SHA1.php,
+ .../library/store/OAuthStoreAbstract.class.php,
+ .../oauth/library/store/OAuthStoreAnyMeta.php,
+ .../oauth/library/store/OAuthStoreMySQL.php,
+ .../vendors/oauth/library/store/mysql/install.php,
+ .../vendors/oauth/library/store/mysql/mysql.sql,
+ .../oauth/test/discovery/xrds-fireeagle.xrds,
+ .../oauth/test/discovery/xrds-getsatisfaction.xrds,
+ .../oauth/test/discovery/xrds-magnolia.xrds,
+ mod/oauth/vendors/oauth/test/oauth_test.php, mod/oauth_lib/manifest.xml,
+ mod/oauth_lib/start.php, mod/oauth_lib/vendors/oauth/LICENSE,
+ mod/oauth_lib/vendors/oauth/example/server/INSTALL,
+ .../vendors/oauth/example/server/core/init.php,
+ .../example/server/core/templates/inc/footer.tpl,
+ .../example/server/core/templates/inc/header.tpl,
+ .../oauth/example/server/core/templates/index.tpl,
+ .../oauth/example/server/core/templates/logon.tpl,
+ .../example/server/core/templates/register.tpl,
+ .../vendors/oauth/example/server/www/hello.php,
+ .../vendors/oauth/example/server/www/index.php,
+ .../vendors/oauth/example/server/www/logon.php,
+ .../vendors/oauth/example/server/www/oauth.php,
+ .../vendors/oauth/example/server/www/register.php,
+ .../oauth/example/server/www/services.xrds.php,
+ .../vendors/oauth/library/OAuthDiscovery.php,
+ .../vendors/oauth/library/OAuthException.php,
+ .../vendors/oauth/library/OAuthRequest.php,
+ .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ .../vendors/oauth/library/OAuthRequester.php,
+ .../vendors/oauth/library/OAuthServer.php,
+ mod/oauth_lib/vendors/oauth/library/OAuthStore.php,
+ .../library/body/OAuthBodyContentDisposition.php,
+ .../library/body/OAuthBodyMultipartFormdata.php,
+ .../vendors/oauth/library/discovery/xrds_parse.php,
+ .../vendors/oauth/library/discovery/xrds_parse.txt,
+ .../OAuthSignatureMethod.class.php, .../OAuthSignatureMethod_HMAC_SHA1.php,
+ .../signature_method/OAuthSignatureMethod_MD5.php,
+ .../OAuthSignatureMethod_PLAINTEXT.php,
+ .../OAuthSignatureMethod_RSA_SHA1.php,
+ .../library/store/OAuthStoreAbstract.class.php,
+ .../oauth/library/store/OAuthStoreAnyMeta.php,
+ .../oauth/library/store/OAuthStoreMySQL.php,
+ .../vendors/oauth/library/store/mysql/install.php,
+ .../vendors/oauth/library/store/mysql/mysql.sql,
+ .../oauth/test/discovery/xrds-fireeagle.xrds,
+ .../oauth/test/discovery/xrds-getsatisfaction.xrds,
+ .../oauth/test/discovery/xrds-magnolia.xrds,
+ mod/oauth_lib/vendors/oauth/test/oauth_test.php: Changing the name of the
+ oAuth plugin to reflect it's library service status. Refs #2532
+
+2010-10-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/install.css, views/installation/messages/errors/list.php,
+ views/installation/messages/messages/list.php: Fixes #2523 - errors get red
+ box during install
+
+ * install/ElggInstaller.php, views/failsafe/input/access.php,
+ views/failsafe/input/button.php, views/failsafe/input/checkboxes.php,
+ views/failsafe/input/form.php, views/failsafe/input/hidden.php,
+ views/failsafe/input/longtext.php, views/failsafe/input/password.php,
+ views/failsafe/input/pulldown.php, views/failsafe/input/reset.php,
+ views/failsafe/input/securitytoken.php, views/failsafe/input/submit.php,
+ views/failsafe/input/text.php, views/failsafe/install/footer.php,
+ views/failsafe/install/forms/admin.php,
+ views/failsafe/install/forms/database.php,
+ views/failsafe/install/forms/settings.php,
+ views/failsafe/install/forms/template.php, views/failsafe/install/header.php,
+ views/failsafe/install/nav.php, views/failsafe/install/pages/admin.php,
+ views/failsafe/install/pages/complete.php,
+ views/failsafe/install/pages/database.php,
+ views/failsafe/install/pages/requirements.php,
+ views/failsafe/install/pages/settings.php,
+ views/failsafe/install/pages/welcome.php, views/failsafe/install/sidebar.php,
+ views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php, views/failsafe/messages/list.php,
+ views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/page_shells/install.php, views/installation/input/access.php,
+ views/installation/input/button.php, views/installation/input/checkboxes.php,
+ views/installation/input/form.php, views/installation/input/hidden.php,
+ views/installation/input/longtext.php, views/installation/input/password.php,
+ views/installation/input/pulldown.php, views/installation/input/reset.php,
+ views/installation/input/securitytoken.php,
+ views/installation/input/submit.php, views/installation/input/text.php,
+ views/installation/install/footer.php,
+ views/installation/install/forms/admin.php,
+ views/installation/install/forms/database.php,
+ views/installation/install/forms/settings.php,
+ views/installation/install/forms/template.php,
+ views/installation/install/header.php, views/installation/install/nav.php,
+ views/installation/install/pages/admin.php,
+ views/installation/install/pages/complete.php,
+ views/installation/install/pages/database.php,
+ views/installation/install/pages/requirements.php,
+ views/installation/install/pages/settings.php,
+ views/installation/install/pages/welcome.php,
+ views/installation/install/sidebar.php,
+ views/installation/messages/errors/error.php,
+ views/installation/messages/errors/list.php,
+ views/installation/messages/list.php,
+ views/installation/messages/messages/list.php,
+ views/installation/messages/messages/message.php,
+ views/installation/page_shells/default.php: moved installation to its own
+ viewtype
+
+2010-10-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/lib/functions.php,
+ .../views/default/admin/users/unvalidated.php: Using more built-in API to get
+ unvalidated users.
+
+2010-10-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, languages/en.php: Refs #2129: Pulls some
+ strings out into elgg_echo() in new installation.
+
+ * languages/en.php: Refs #2129: Added missing language string for new
+ installer.
+
+ * htaccess_dist: Cleaned up tabs vs spaces in htaccess_dist.
+
+ * languages/en.php: Refs #2129: Added missing language string for new
+ installer.
+
+2010-10-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php: uservalidationbyemail is turned on by default
+ so we need to have the first admin user validated
+
+2010-10-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install/ElggInstaller.php, languages/en.php: Closes #2129 - installer now
+ works with web servers besides Apache - tested with nginx
+
+2010-10-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/actions/bulk_action.php,
+ mod/uservalidationbyemail/actions/delete.php,
+ .../actions/resend_validation.php,
+ mod/uservalidationbyemail/actions/validate.php,
+ mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php,
+ .../views/default/admin/users/unvalidated.php,
+ .../uservalidationbyemail/unvalidated_user.php: Added admin page to validate,
+ resend validation requests, or delete unvalidated users.
+
+2010-10-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login_dropdown.php: Fixes #2505 - fixes the
+ registration link on the drop down login form
+
+2010-10-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/start.php,
+ .../default/admin/overview/reportedcontent.php: Fixed incorrect echoing of an
+ array.
+
+ * simplecache/view.php: Fixes #2504. Renamed $view to $view_name in
+ simplecache/view.php to avoid var name collision with engine/start.php's
+ $view.
+
+2010-10-01 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: replacing more documentation lost in integration of
+ installer
+
+ * engine/settings.example.php, engine/start.php, htaccess_dist, install.php,
+ install/ElggInstaller.php, install/install.css, languages/en.php,
+ views/failsafe/input/password.php, views/failsafe/install/footer.php,
+ views/failsafe/install/forms/admin.php,
+ views/failsafe/install/forms/database.php,
+ views/failsafe/install/forms/settings.php,
+ views/failsafe/install/forms/template.php, views/failsafe/install/header.php,
+ views/failsafe/install/nav.php, views/failsafe/install/pages/admin.php,
+ views/failsafe/install/pages/complete.php,
+ views/failsafe/install/pages/database.php,
+ views/failsafe/install/pages/requirements.php,
+ views/failsafe/install/pages/settings.php,
+ views/failsafe/install/pages/welcome.php, views/failsafe/install/sidebar.php,
+ views/failsafe/page_shells/install.php: Refs #2129 - integrates new installer
+ code from http://github.com/cash/Elgg - does not work yet with non-Apache web
+ servers
+
+2010-09-30 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, friends/add.php, friends/collections.php,
+ friends/edit.php, friends/index.php, friends/of.php,
+ friends/pickercallback.php, pages/friends/add.php,
+ pages/friends/collections.php, pages/friends/edit.php,
+ pages/friends/index.php, pages/friends/of.php,
+ pages/friends/pickercallback.php, views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php: Closes #2344 - moves friends pages
+ into pages directory
+
+ * engine/lib/entities.php, entities/index.php, entities/list.php,
+ mod/file/start.php, pages/entities/index.php, pages/entities/list.php: Refs
+ #2344 - moves entities directory to pages directory
+
+ * admin/index.php, engine/lib/admin.php, search/index.php: Refs #2344 -
+ removed unused search and admin directories
+
+ * engine/lib/usersettings.php, pages/settings/index.php,
+ pages/settings/plugins.php, pages/settings/statistics.php,
+ pages/settings/user.php, settings/index.php, settings/plugins.php,
+ settings/statistics.php, settings/user.php: Refs #2344 - moves settings pages
+ into the pages directory
+
+ * dashboard/index.php, dashboard/latest.php, engine/lib/users.php,
+ pages/dashboard/index.php, pages/dashboard/latest.php,
+ views/default/dashboard/blurb.php: Refs #2344 - moves dashboard pages into
+ pages directory
+
+ * account/forgotten_password.php, account/register.php,
+ engine/classes/ElggSite.php, engine/lib/users.php,
+ pages/account/forgotten_password.php, pages/account/register.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/login_dropdown.php,
+ .../default/account/forms/login_walled_garden.php: Refs #2344 - move account
+ pages into pages directory
+
+2010-09-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/register.php,
+ actions/user/requestnewpassword.php, engine/lib/sessions.php,
+ engine/lib/users.php, languages/en.php,
+ mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/lib/functions.php,
+ mod/uservalidationbyemail/start.php: Fixes #617, #2271 User validation
+ removed from core to UserValidationByEmail plugin. Without a validation
+ plugin, users can login immediately. Fixes #2243 Removed "You have validated
+ your email" email. Users are logged in immediately after registration or
+ validating email. Refs #2409 Added register, user plugin hook that is called
+ only on self registration. Can be used to halt registration.
+
+2010-09-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Checking for menu items before doing a foreach().
+
+ * engine/lib/views.php: Checking for $CONFIG->view_type before accessing it
+ in elgg_is_valid_viewtype(). Prevents a notice during installation.
+
+2010-09-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/save.php: Cleaned up the file docblock.
+
+2010-09-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/save.php: Fixes #1418: Changing an email address no longer
+ invalidates an account.
+
+ * engine/classes/ElggUser.php: Refs #617: ElggUser:makeAdmin() and
+ removeAdmin() correctly set the attribute for unsaved users.
+
+ * engine/lib/api.php: Refs #2459: Merged [6927] to trunk.
+
+ * views/json/entities/entity_list.php: Merged [6923] to trunk.
+
+ * actions/register.php, languages/en.php: Refs #2454: Merged [6920] to
+ trunk.
+
+ * mod/profile/start.php: Merged [6905] to trunk.
+
+ * engine/lib/group.php: Refs #2437: Merged [6707] to trunk.
+
+ * mod/profile/start.php: Refs #2429: Merged [6889] to trunk.
+
+2010-09-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/ElggObject.php, engine/classes/ElggSite.php: Refs #2450:
+ Documented ElggSite, clarified some docs on ElggObject.
+
+2010-09-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/APIException.php,
+ engine/classes/AccessControlQueryComponent.php,
+ engine/classes/CallException.php, engine/classes/ClassException.php,
+ engine/classes/ClassNotFoundException.php,
+ engine/classes/ConfigurationException.php, engine/classes/CronException.php,
+ engine/classes/DataFormatException.php, engine/classes/DatabaseException.php,
+ engine/classes/DeleteQueryTypeQueryComponent.php,
+ engine/classes/ElggAccess.php, engine/classes/ElggAnnotation.php,
+ engine/classes/ElggCache.php, engine/classes/ElggEntity.php,
+ engine/classes/ElggExtender.php, engine/classes/ElggFileCache.php,
+ engine/classes/ElggFilestore.php, engine/classes/ElggGroup.php,
+ engine/classes/ElggHMACCache.php, engine/classes/ElggMemcache.php,
+ engine/classes/ElggMetadata.php, engine/classes/ElggObject.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggRelationship.php,
+ engine/classes/ElggSession.php, engine/classes/ElggSharedMemoryCache.php,
+ engine/classes/ElggSite.php, engine/classes/ElggStaticVariableCache.php,
+ engine/classes/ElggUser.php, engine/classes/ElggWidget.php,
+ engine/classes/ErrorResult.php, engine/classes/ExportException.php,
+ engine/classes/Exportable.php, engine/classes/GenericResult.php,
+ engine/classes/IOException.php, engine/classes/ImportException.php,
+ engine/classes/Importable.php,
+ engine/classes/InsertQueryTypeQueryComponent.php,
+ engine/classes/InstallationException.php,
+ engine/classes/InvalidClassException.php,
+ engine/classes/InvalidParameterException.php,
+ engine/classes/JoinQueryComponent.php,
+ engine/classes/LimitOffsetQueryComponent.php, engine/classes/Locatable.php,
+ engine/classes/Loggable.php, engine/classes/NotImplementedException.php,
+ engine/classes/Notable.php, engine/classes/NotificationException.php,
+ engine/classes/ODD.php, engine/classes/ODDDocument.php,
+ engine/classes/ODDEntity.php, engine/classes/OrderQueryComponent.php,
+ engine/classes/PluginException.php, engine/classes/Query.php,
+ engine/classes/QueryComponent.php,
+ engine/classes/QueryTypeQueryComponent.php,
+ engine/classes/RegistrationException.php,
+ engine/classes/SecurityException.php,
+ engine/classes/SelectFieldQueryComponent.php,
+ engine/classes/SelectQueryTypeQueryComponent.php,
+ engine/classes/SetQueryComponent.php, engine/classes/SimpleQuery.php,
+ engine/classes/SuccessResult.php, engine/classes/TableQueryComponent.php,
+ engine/classes/UpdateQueryTypeQueryComponent.php,
+ engine/classes/WhereQueryComponent.php,
+ engine/classes/WhereSetQueryComponent.php,
+ engine/classes/WhereStaticQueryComponent.php,
+ engine/classes/XMLRPCArrayParameter.php,
+ engine/classes/XMLRPCBase64Parameter.php,
+ engine/classes/XMLRPCBoolParameter.php, engine/classes/XMLRPCCall.php,
+ engine/classes/XMLRPCDateParameter.php,
+ engine/classes/XMLRPCDoubleParameter.php,
+ engine/classes/XMLRPCErrorResponse.php,
+ engine/classes/XMLRPCIntParameter.php, engine/classes/XMLRPCParameter.php,
+ engine/classes/XMLRPCResponse.php, engine/classes/XMLRPCStringParameter.php,
+ engine/classes/XMLRPCStructParameter.php,
+ engine/classes/XMLRPCSuccessResponse.php, engine/classes/XmlElement.php:
+ Converted line endings to unix.
+
+ * engine/classes/ElggAnnotation.php, engine/classes/ElggExtender.php,
+ engine/classes/ElggPlugin.php, engine/classes/ElggRelationship.php: Refs
+ #2450: Documented a few more classes.
+
+ * engine/classes/ElggObject.php: Refs #2450: Documented ElggObject.
+
+ * engine/classes/ElggEntity.php: Refs #2450: ElggEntity documented.
+
+ * engine/lib/entities.php: Refs #2450: Changed the subpackage and fixed a
+ typo.
+
+2010-09-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/APIException.php,
+ engine/classes/AccessControlQueryComponent.php,
+ engine/classes/CallException.php, engine/classes/ClassException.php,
+ engine/classes/ClassNotFoundException.php,
+ engine/classes/ConfigurationException.php, engine/classes/CronException.php,
+ engine/classes/DataFormatException.php, engine/classes/DatabaseException.php,
+ engine/classes/DeleteQueryTypeQueryComponent.php,
+ engine/classes/ElggAccess.php, engine/classes/ElggAnnotation.php,
+ engine/classes/ElggCache.php, engine/classes/ElggDiskFilestore.php: Refs
+ #2450: Documented first bit of the classes.
+
+ * engine/lib/views.php: Refs #2450: Documented views.php.
+
+2010-09-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Fixes #2479: Removed unused actions init and
+ registered "error" action.
+
+ * documentation/examples/actions/manual_tokens.php,
+ engine/handlers/action_handler.php, engine/lib/actions.php: Refs #2450: Added
+ documentation for actions.
+
+2010-09-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Refs #2450: Documented access.php.
+
+ * engine/lib/elgglib.php: Refs #2450: Changed preferred syntax for talking
+ about hooks / events because :s are used in some names. Now using $name,
+ $type.
+
+ * engine/lib/elgglib.php: Correct spaces issue in autoload function.
+
+ * engine/lib/entities.php: Refs #2450: Documented entities.php
+
+2010-09-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/pagehandler.php, engine/handlers/service_handler.php,
+ engine/handlers/xml-rpc_handler.php: Refs #2450: Documented handler files.
+
+2010-09-15 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/classes/APIException.php,
+ engine/classes/AccessControlQueryComponent.php,
+ engine/classes/CallException.php, engine/classes/ClassException.php,
+ engine/classes/ClassNotFoundException.php,
+ engine/classes/ConfigurationException.php,
+ engine/classes/DataFormatException.php, engine/classes/DatabaseException.php,
+ engine/classes/DeleteQueryTypeQueryComponent.php,
+ engine/classes/IOException.php,
+ engine/classes/InsertQueryTypeQueryComponent.php,
+ engine/classes/InstallationException.php,
+ engine/classes/InvalidClassException.php,
+ engine/classes/InvalidParameterException.php,
+ engine/classes/JoinQueryComponent.php,
+ engine/classes/LimitOffsetQueryComponent.php,
+ engine/classes/NotImplementedException.php,
+ engine/classes/NotificationException.php,
+ engine/classes/OrderQueryComponent.php, engine/classes/PluginException.php,
+ engine/classes/Query.php, engine/classes/QueryComponent.php,
+ engine/classes/QueryTypeQueryComponent.php,
+ engine/classes/RegistrationException.php,
+ engine/classes/SecurityException.php,
+ engine/classes/SelectFieldQueryComponent.php,
+ engine/classes/SelectQueryTypeQueryComponent.php,
+ engine/classes/SetQueryComponent.php, engine/classes/SimpleQuery.php,
+ engine/classes/TableQueryComponent.php,
+ engine/classes/UpdateQueryTypeQueryComponent.php,
+ engine/classes/WhereQueryComponent.php,
+ engine/classes/WhereSetQueryComponent.php,
+ engine/classes/WhereStaticQueryComponent.php, engine/lib/access.php,
+ engine/lib/actions.php, engine/lib/admin.php, engine/lib/annotations.php,
+ engine/lib/api.php, engine/lib/cache.php, engine/lib/calendar.php,
+ engine/lib/cron.php, engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/lib/exceptions.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/filestore.php, engine/lib/group.php, engine/lib/input.php,
+ engine/lib/install.php, engine/lib/location.php, engine/lib/memcache.php,
+ engine/lib/metadata.php, engine/lib/notification.php, engine/lib/objects.php,
+ engine/lib/opendd.php, engine/lib/plugins.php, engine/lib/query.php,
+ engine/lib/relationships.php, engine/lib/river.php, engine/lib/sessions.php,
+ engine/lib/sites.php, engine/lib/system_log.php, engine/lib/tags.php,
+ engine/lib/users.php, engine/lib/widgets.php, engine/lib/xml-rpc.php,
+ engine/lib/xml.php: Refs #2220: Pulled remaining classes out of lib files.
+ Core classes now autoloaded via __autoload().
+
+2010-09-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/forgotten_password.php, account/register.php: Refs #2450: Updated
+ docs for account/*
+
+ * engine/start.php: Refs #2450: Documented engine/start.php
+
+ * documentation/stubs/config.php: Refs @2450: Better documentation for
+ $CONFIG->view.
+
+ * documentation/stubs/config.php: Refs #2450: Added config.php stub to
+ document many of the $CONFIG vars.
+
+ * actions/admin/menu_items.php: Removing unused
+ 'menu_items_hide_toolbar_entries' config value.
+
+ * engine/lib/elgglib.php: Fixes #2366: Deprecated test_ip() and
+ is_ip_in_array().
+
+ * documentation/examples/events/advanced.php,
+ documentation/examples/events/all.php,
+ documentation/examples/events/basic.php,
+ documentation/examples/events/emit.php,
+ documentation/examples/hooks/basic.php,
+ documentation/examples/hooks/register/advanced.php,
+ documentation/examples/hooks/register/all.php,
+ documentation/examples/hooks/register/basic.php,
+ documentation/examples/hooks/register/emit.php,
+ documentation/examples/hooks/trigger/advanced.php,
+ documentation/examples/hooks/trigger/basic.php: Adding documentation and
+ examples.
+
+ * engine/lib/elgglib.php: Refs #2450: Added documentation to elgglib.
+
+2010-09-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Refs #2450: Really removed the @uses and @see
+ tags.
+
+ * engine/lib/database.php: Refs #2450: Removing @see and @uses. Replaced NB:
+ with English phrases.
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php,
+ actions/admin/plugins/simple_update_states.php,
+ actions/admin/site/update_advanced.php, actions/admin/site/update_basic.php,
+ actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ actions/admin/user/resetpassword.php, actions/admin/user/unban.php: Refs
+ #2450: Updated docs for core admin actions.
+
+2010-09-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Merged get_entities() is_numeric() fix to trunk.
+
+2010-09-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/settings.example.php: Updated settings.example.php docs
+
+ * engine/lib/configuration.php: Refs #2450: Documented configuration.php.
+
+2010-09-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Refs #2450: Documentation added for database
+ functions.
+
+ * engine/settings.example.php: Refs #2450: Added db_disable_query_cache to
+ settings.example.php.
+
+ * engine/settings.example.php: Refs #2450: Documented db-related $CONFIG
+ vars.
+
+2010-09-07 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, _css/js.php: Refs #2450: Fixed some typos in css/js
+ simplecache documentation
+
+2010-09-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/forgotten_password.php, account/register.php: Refs #2450:
+ Documentation for account/ files added.
+
+ * _css/js.php: Refs #2450: Added the default viewtype in the views dir for
+ the @see tag.
+
+ * _css/css.php, _css/js.php: Refs #2450: Added documentation for js and css
+ files.
+
+2010-08-31 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php: Refs #2434 - make view
+ failures spectacular rather than silent since they should only happen during
+ development
+
+ * mod/profile/start.php, .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php: Refs #2434 - made the
+ profile plugin more robust to bad urls and did a little code standardization
+
+2010-08-30 ewinslow <ewinslow@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php, mod/groups/views/default/group/default.php,
+ mod/groups/views/default/group/group.php: Fixes #2289: grouprofile.php now
+ uses elgg_view_entity and group/group has been renamed to group/default
+
+ * views/default/css.php, views/default/navigation/breadcrumbs.php: Refs
+ #2394: changed breadcrumbs from an id to a class
+
+2010-08-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/metadata.php: Merged [6875] from 1.7 branch into trunk
+
+ * mod/captcha/start.php: merged [6876] into trunk from 1.7 branch
+
+2010-08-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: added escaping to
+ get_entities_from_private_setting_multi()
+
+2010-08-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Closes #2420 Trac seems to work.
+
+ * README.txt: Refs #2420 trac test.
+
+ * README.txt: Refs #2420: Trac test.
+
+ * README.txt: Refs #2420 trac test.
+
+2010-08-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php: Refs #1439 added better page owner functions
+
+2010-08-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2010062301.php: Merged [6857] into trunk
+
+2010-08-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/captcha/captcha.php, mod/captcha/languages/en.php,
+ mod/captcha/manifest.xml, mod/captcha/start.php,
+ mod/captcha/views/default/input/captcha.php: standardized captcha plugin
+
+2010-08-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, .../views/default/object/groupforumtopic.php:
+ Merged [6819] into trunk from 1.7 branch
+
+ * mod/thewire/languages/en.php,
+ .../views/default/thewire/profile_status.php: merged [6828] into trunk from
+ 1.7 branch
+
+ * mod/thewire/languages/en.php,
+ mod/thewire/views/default/object/thewire.php: merged [6829] from 1.7 branch
+ into trunk
+
+ * .../views/default/object/groupforumtopic.php: merged [6832] into trunk
+ from 1.7 branch
+
+2010-08-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Fixed text overflow and word-breaking for base
+ theme
+
+2010-08-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, CONTRIBUTORS.txt, engine/lib/annotations.php,
+ engine/lib/entities.php, engine/lib/plugins.php,
+ engine/schema/upgrades/2009100701.sql, engine/start.php, languages/en.php,
+ mod/embed/views/default/object/default/embed.php,
+ mod/reportedcontent/languages/en.php, mod/search/start.php,
+ mod/twitter/views/default/widgets/twitter/view.php,
+ views/default/messages/errors/error.php,
+ views/default/messages/messages/message.php,
+ views/default/output/longtext.php: Merged r6812:6837 from 1.7 branch to trunk
+ (skipping some changes to plugins like groups and wire)
+
+ * CHANGES.txt, .../notifications/settings/usersettings/save.php,
+ actions/user/default_access.php, engine/lib/access.php,
+ engine/lib/actions.php, engine/lib/annotations.php, engine/lib/api.php,
+ engine/lib/cache.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/extender.php, engine/lib/filestore.php,
+ engine/lib/group.php, engine/lib/install.php, engine/lib/languages.php,
+ engine/lib/location.php, engine/lib/mb_wrapper.php, engine/lib/memcache.php,
+ engine/lib/metadata.php, engine/lib/notification.php, engine/lib/objects.php,
+ engine/lib/pam.php, engine/lib/plugins.php, engine/lib/query.php,
+ engine/lib/relationships.php, engine/lib/river.php, engine/lib/sessions.php,
+ engine/lib/sites.php, engine/lib/tags.php, engine/lib/users.php,
+ engine/lib/views.php, engine/lib/widgets.php, engine/lib/xml-rpc.php,
+ languages/en.php, mod/friends/add.php, mod/friends/collections.php,
+ mod/friends/edit.php, mod/friends/languages/en.php, mod/friends/start.php,
+ mod/friends/views/default/widgets/friends/edit.php,
+ mod/friends/views/default/widgets/friends/view.php, mod/htmlawed/start.php,
+ mod/messages/start.php, .../views/default/widgets/messages/view.php,
+ mod/pages/languages/en.php, mod/riverdashboard/languages/en.php,
+ services/export/handler.php, views/default/account/forms/useradd.php,
+ views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php,
+ views/default/input/autocomplete.php, views/default/page_elements/title.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php: Merged r6757:6810 from
+ 1.7 branch into trunk
+
+ * actions/email/save.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/remove.php, actions/plugins/usersettings/save.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php, actions/user/spotlight.php,
+ engine/lib/annotations.php, engine/lib/database.php,
+ engine/lib/filestore.php, engine/lib/group.php, engine/lib/metadata.php,
+ engine/lib/plugins.php, engine/lib/relationships.php, engine/lib/tags.php,
+ engine/tests/regression/trac_bugs.php, entities/list.php,
+ mod/categories/listing.php, mod/categories/views/default/categories/list.php,
+ mod/file/search.php, mod/groups/actions/addtogroup.php,
+ mod/groups/languages/en.php, .../views/default/groups/closedmembership.php,
+ settings/index.php, settings/plugins.php, settings/statistics.php,
+ settings/user.php, views/json/river/item/list.php: Merged r6701:6756 from 1.7
+ branch into trunk
+
+ * engine/lib/entities.php, engine/lib/relationships.php,
+ engine/lib/upgrades/2010071001.php, engine/lib/upgrades/2010071002.php,
+ mod/notifications/start.php, mod/pages/actions/pages/edit.php,
+ mod/pages/start.php, mod/pages/views/default/forms/pages/edit.php,
+ mod/profile/actions/cropicon.php, mod/profile/actions/iconupload.php,
+ mod/profile/icon.php, mod/profile/icondirect.php, mod/profile/start.php,
+ version.php: Merged r6684:6694 from 1.7 branch to trunk (pages plugin was
+ manually merged due to standardization of code in trunk but not branch)
+
+ * engine/lib/entities.php, engine/lib/metadata.php, engine/lib/output.php,
+ engine/lib/views.php, engine/lib/widgets.php, mod/file/world.php: Merged
+ r6671:6683 from 1.7 branch to trunk
+
+ * actions/admin/user/delete.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/filestore.php, engine/lib/metadata.php,
+ engine/lib/output.php, engine/lib/version.php, engine/lib/views.php,
+ htaccess_dist, languages/en.php,
+ mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/delete.php, mod/blog/actions/blog/save.php,
+ mod/bookmarks/actions/delete.php,
+ mod/embed/views/default/embed/item/gallery.php,
+ mod/embed/views/default/embed/item/list.php, mod/file/actions/delete.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/pages/actions/pages/delete.php,
+ .../views/default/river/object/page/create.php,
+ .../default/admin/overview/reportedcontent.php,
+ mod/riverdashboard/endpoint/get_comments.php,
+ .../views/default/river/item/wrapper.php, views/default/input/checkboxes.php,
+ views/default/input/radio.php, views/failsafe/input/checkboxes.php: Merged
+ r6620:6653 from 1.7 branch into trunk
+
+ * engine/lib/annotations.php, engine/lib/api.php, mod/file/start.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/sharing/invite.php: Merged r6614:6617 from 1.7
+ branch into trunk
+
+ * engine/lib/upgrades/2010070301.php, mod/groups/actions/edit.php,
+ mod/groups/actions/join.php, mod/groups/languages/en.php,
+ mod/groups/views/default/river/group/create.php,
+ .../default/river/relationship/member/create.php, version.php: Merged [6612]
+ from 1.7 into the trunk
+
+ * engine/lib/entities.php, engine/lib/export.php, engine/lib/input.php,
+ engine/lib/metadata.php, engine/tests/objects/metadata.php,
+ .../views/default/forms/forums/edittopic.php,
+ .../views/default/object/groupforumtopic.php,
+ .../views/default/river/object/group/create.php,
+ views/foaf/page_elements/title.php, views/json/page_elements/title.php,
+ views/rss/navigation/pagination.php, views/rss/page_elements/title.php:
+ Merged [6600],[6601],[6605],[6606],[6607],[6608],[6611] from 1.7 branch into
+ trunk
+
+2010-08-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/output.php, mod/blog/start.php,
+ mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php,
+ .../views/default/river/object/blog/create.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/object/file/embedlist.php, mod/file/start.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/object/file.php,
+ mod/file/views/default/widgets/filerepo/view.php, mod/groups/start.php,
+ mod/groups/views/default/forum/maintopic.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../default/messageboard/messageboard_content.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/view.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/river/object/page/create.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ .../views/default/reportedcontent/listing.php,
+ mod/riverdashboard/endpoint/get_comments.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/entity.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ .../views/default/thewire/profile_status.php,
+ views/default/annotation/annotate.php,
+ views/default/annotation/annotatelike.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/annotation/likes.php, views/default/object/default.php,
+ views/default/output/friendlytime.php, views/default/river/item/wrapper.php:
+ Merged r6586:6587 from 1.7 branch into trunk
+
+ * engine/lib/actions.php, mod/groups/views/default/forms/groups/edit.php,
+ views/default/graphics/icon.php: Merged [6573],[6574],[6582] from 1.7 branch
+ into trunk
+
+ * CODING.txt, INSTALL.txt, engine/lib/elgglib.php, engine/lib/metadata.php,
+ engine/lib/output.php, engine/lib/relationships.php,
+ engine/lib/upgrades/2010062301.php, engine/lib/upgrades/2010062302.php,
+ engine/schema/mysql.sql, engine/schema/upgrades/2010062401.sql,
+ engine/tests/api/entity_getter_functions.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/views/default/groups/grouplisting.php,
+ mod/search/search_hooks.php, mod/search/start.php, version.php,
+ views/default/friends/picker.php, views/default/input/checkboxes.php: Merged
+ r6534-6559 from 1.7 branch to trunk
+
+ * engine/lib/metadata.php, engine/lib/upgrades/2010061501.php,
+ engine/tests/api/entity_getter_functions.php, mod/search/start.php: Merging
+ r6517:6520 from 1.7 branch
+
+2010-08-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_shells/walled_garden.php: Updated walledgarden login to
+ wraplongnames
+
+2010-08-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * LICENCE.txt: cleaned up the included license, GPL v2
+
+2010-08-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/html_begin.php: Removed additional
+ header/extend view from HTML head. Moved metatags view to right before
+ </html>. Removed the check if the view exists since it's done in elgg_view()
+ anyway.
+
+2010-08-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Added optional param to sanitise_filepath() that
+ appends a / or not. Also removes any ../s
+
+2010-08-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/css.php: Updated embed css
+
+ * views/default/page_shells/walled_garden.php: Updated walled-garden login
+ input boxes - so they are not effected by any theme running
+
+2010-08-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/html_begin.php: a view inserted for plugins to
+ extend
+
+2010-08-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/overview.php: inserted a view for plugins to extend
+
+2010-07-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: correcting a mistake in the readme file.
+
+2010-07-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/nav.php: small nav tweak to the filter
+
+2010-07-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php, .../views/default/riverdashboard/nav.php:
+ Moved start conversation button
+
+2010-07-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php: missing string added
+
+ * mod/profile/index.php, .../default/profile/profile_contents/groups.php,
+ .../views/default/profile/profile_navigation.php: groups tab added to profile
+
+ * .../views/default/riverdashboard/nav.php: lang tweak on activity filter
+
+2010-07-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/activity.php, mod/riverdashboard/index.php,
+ .../views/default/riverdashboard/nav.php: Added interface elements for inline
+ conversation posting from activity stream
+
+2010-07-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php: added a view for plugins to extend the
+ activity view if required
+
+2010-07-18 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/activity.php: view for plugins to extend on group activity
+
+2010-07-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/pages/actions/pages/edit.php, mod/pages/history.php: More code cleanup
+ to pages.
+
+ * engine/lib/views.php: Added display:page plugin hook in page_draw
+ function.
+
+ * engine/lib/output.php, mod/ecml/start.php: plugin hook output:strip_tags
+ is now format:strip_tags.
+
+ * engine/lib/output.php: elgg_make_excerpt() uses elgg_strip_tags().
+
+2010-07-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Using elgg_strip_tags() for notification
+ body.
+
+ * mod/ecml/start.php: ECML removes keywords for elgg_strip_tags().
+
+ * engine/lib/output.php: Fixes #2099. Added elgg_strip_tags() to allow
+ plugins to remove extra formatting.
+
+ * mod/pages/start.php: Parsing pages views for ecml.
+
+ * mod/pages/actions/pages/delete.php, mod/pages/actions/pages/edit.php,
+ mod/pages/actions/pages/editwelcome.php, mod/pages/edit.php,
+ mod/pages/history.php, mod/pages/index.php, mod/pages/languages/en.php,
+ mod/pages/new.php, mod/pages/pagesTree.php, mod/pages/start.php,
+ mod/pages/view.php, mod/pages/views/default/annotation/icon.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../views/default/icon/object/page/medium.php,
+ mod/pages/views/default/icon/object/page/small.php,
+ .../views/default/icon/object/page_top/medium.php,
+ .../views/default/icon/object/page_top/small.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/css.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/metatags.php,
+ mod/pages/views/default/pages/pagegallery.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/pages/sidebar/sidebarthis.php,
+ mod/pages/views/default/pages/sidebar/starter.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/sidebar/wrapper.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/annotate.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/page/update.php,
+ .../default/river/object/page_top/annotate.php,
+ .../views/default/river/object/page_top/create.php,
+ .../views/default/river/object/page_top/update.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php: First pass at standardizing pages.
+
+ * mod/pages/actions/pages/editwelcome.php, mod/pages/history.php,
+ mod/pages/index.php, mod/pages/languages/en.php, mod/pages/new.php,
+ mod/pages/start.php, .../views/default/forms/pages/editwelcome.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/css.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/update.php,
+ .../views/default/river/object/page_top/update.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php: Converting spaces to tabs without the stray t.
+
+ * mod/pages/actions/pages/editwelcome.php, mod/pages/history.php,
+ mod/pages/index.php, mod/pages/languages/en.php, mod/pages/new.php,
+ mod/pages/start.php, .../views/default/forms/pages/editwelcome.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/css.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/update.php,
+ .../views/default/river/object/page_top/update.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php: Convert spaces to tabs.
+
+ * views/default/page_elements/elgg_header.php,
+ views/default/page_elements/elgg_header_logo.php: Fixes #2284. Pulled out
+ home link in elgg_header to page_elements/elgg_header_logo. Removed
+ csseditor-specific code that caused custom logos to still appear even when
+ csseditor was disabled.
+
+2010-07-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/account/forms/login_walled_garden.php: Added ugly hack to get
+ around problems with sliding in hidden images in visual captcha on login
+ pages in webkit browsers.
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/views.php: Fixes
+ #2195. 3rd and 4th params of page_draw() are now $page_shell and $vars.
+
+2010-07-14 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/invitefriends/languages/en.php,
+ .../views/default/invitefriends/formitems.php: Disabling friend invite form
+ when site has disabled new user registration.
+
+2010-07-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/join.php,
+ mod/groups/views/default/groups/groupprofile.php: Admin users can join
+ groups. Don't request to join a closed group if admin.
+
+2010-07-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css_ie.php: Added clearfloat improvement to IE7/8 CSS
+
+ * mod/ecml/graphics/logo_bliptv.gif, mod/ecml/graphics/logo_dailymotion.gif,
+ mod/ecml/graphics/logo_googlemaps.gif, mod/ecml/graphics/logo_livevideo.gif,
+ mod/ecml/graphics/logo_redlasso.gif, mod/ecml/graphics/logo_slideshare.gif,
+ mod/ecml/graphics/logo_vimeo.gif, mod/ecml/graphics/logo_youtube.gif,
+ mod/ecml/views/default/ecml/admin/css.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php: Added logos to embed web services
+ pane, and made embed nav-bar theme agnostic
+
+ * mod/embed/views/default/embed/css.php: Removed old classes from embed
+
+ * mod/ecml/graphics/url_status.png,
+ mod/ecml/views/default/ecml/admin/css.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php: Updated ecml and embed with new
+ success/failure for input code.
+
+ * views/default/css.php: Added disabled class to submit_button
+
+ * .../views/default/embed/web_services/content.php: Corrected js for preview
+ pane toggleclass
+
+2010-07-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/start.php: messages now parse ecml
+
+ * mod/groups/languages/en.php, mod/groups/start.php: ecml added to group
+ profiles
+
+2010-07-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/link.php: Web services tab now default embed
+ tab if ecml is enabled.
+
+2010-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/views/default/ecml/admin/css.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php: Updated embed/ecml modal interface
+
+2010-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/start.php: keep sitepages settings in their normal location
+
+2010-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_sprites.png: Updated elgg sprites graphic with embed modal
+ arrows
+
+ * mod/ecml/languages/en.php, mod/ecml/views/default/ecml/admin/css.php,
+ .../views/default/embed/web_services/content.php: continuation of embed modal
+ interfacing
+
+ * mod/ecml/views/default/ecml/admin/css.php,
+ .../views/default/embed/web_services/content.php,
+ mod/embed/views/default/embed/css.php: Beginnings of embed modal web-services
+ interfacing improvements.
+
+2010-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/river/group/create.php: river view tweaked
+
+ * mod/ecml/languages/en.php: missing string added
+
+2010-07-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php: Added instructions.
+
+ * mod/ecml/graphics/dailymotion.png, mod/ecml/graphics/googlemaps.png,
+ mod/ecml/graphics/redlasso_1.png, mod/ecml/graphics/redlasso_2.png,
+ mod/ecml/graphics/slideshare.png, mod/ecml/graphics/vimeo.png,
+ mod/ecml/graphics/youtube.png, mod/ecml/languages/en.php, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/help/blip.tv.php,
+ mod/ecml/views/default/ecml/help/dailymotion.php,
+ mod/ecml/views/default/ecml/help/googlemaps.php,
+ mod/ecml/views/default/ecml/help/livevideo.php,
+ mod/ecml/views/default/ecml/help/redlasso.php,
+ mod/ecml/views/default/ecml/help/slideshare.php,
+ mod/ecml/views/default/ecml/help/vimeo.php,
+ mod/ecml/views/default/ecml/help/youtube.php,
+ mod/ecml/views/default/ecml/keyword_help.php,
+ .../views/default/ecml/keywords/googlemaps.php,
+ mod/ecml/views/default/ecml/keywords/livevideo.php,
+ .../views/default/embed/web_services/content.php: Added ecml help for web
+ service embeds.
+
+2010-07-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/oauth/start.php: Adding a missed oauth library file.
+
+2010-07-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/README.txt, mod/embed/start.php,
+ mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/embed.php: Sorting tabs and upload sections
+ correctly by name instead of id. Passing internal_name to all views related
+ to embedding to allow correct calls to elggEmbedInsertContent() in overrided
+ layouts.
+
+ * .../views/default/embed/web_services/content.php: Added missing important
+ view for ECML web services embed.
+
+ * mod/ecml/README.txt, mod/ecml/ecml_functions.php, mod/ecml/start.php:
+ Pulled ECML regex into a constant. Added ecml_get_keywords(),
+ ecml_parse_string(), ecml_extract_keywords(), ecml_get_keyword_info(). Added
+ callback for resolving ECML given an embed code / URL. Removed unused page
+ setup hook. Added web services support. Updated docs.
+
+2010-07-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ .../views/default/groups/invitationrequests.php: Updated group forum forms
+ with an id
+
+ * .../views/default/river/object/blog/create.php,
+ .../default/river/object/bookmarks/create.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/river/object/thewire/create.php,
+ views/default/annotation/annotate.php: Moved all river entry metadata inside
+ span (pushed onto new line) and added relevant css
+
+2010-07-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added elgg_sort_3d_array_by_value(). I do this
+ often enough that a helper function will be nice.
+
+2010-07-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/manifest.xml: undo the last sitepages manifest change
+
+ * mod/sitepages/manifest.xml: site pages enabled
+
+ * mod/bookmarks/views/default/bookmarks/form.php: bookmark edit form access
+ options fixed for groups
+
+2010-07-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php,
+ mod/embed/views/default/embed/upload/content.php: Pulled out some language
+ strings.
+
+ * mod/file/views/default/file/embed_upload.php: Removed stray </div> that
+ broke IE and wasted 3 hours.
+
+ * mod/file/actions/upload.php, mod/file/start.php,
+ mod/file/views/default/file/embed_upload.php: Added upload support to file
+ embed.
+
+ * mod/file/start.php: Added embed support to file plugin.
+
+ * mod/embed/README.txt, mod/embed/languages/en.php, mod/embed/start.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/link.php: Updated documentation for embed.
+ Fixed bug passing internal_name for elggEmbedInsertContent(). Showing a
+ message if no embedable items are returned.
+
+2010-07-06 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Adding javascript and CSS to the walled garden
+ whitelist.
+
+2010-07-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/upload.php: Removed unused upload.php file in embed.
+
+2010-07-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Updated small button hover text
+
+ * mod/groups/activity.php: Added js to groups riverdashboard view
+
+2010-07-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php: small lang tweak
+
+2010-07-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/item/noaccess.php: removing stopgap from [3082] since
+ denied river items are now skipped
+
+ * views/default/river/dashboard.php: Removing another pre-1.5 view that is
+ no longer used
+
+ * views/default/river/relationship/friend/create.php: Closes #2121 - removed
+ view from pre-1.5 days
+
+ * views/default/river/wrapper.php: leftover view from pre-Elgg 1.5 days
+
+2010-07-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/start.php: removing navigation when editing for consistency
+
+2010-07-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/oauth/manifest.xml, mod/oauth/start.php,
+ mod/oauth/vendors/oauth/LICENSE,
+ mod/oauth/vendors/oauth/example/server/INSTALL,
+ .../vendors/oauth/example/server/core/init.php,
+ .../example/server/core/templates/inc/footer.tpl,
+ .../example/server/core/templates/inc/header.tpl,
+ .../oauth/example/server/core/templates/index.tpl,
+ .../oauth/example/server/core/templates/logon.tpl,
+ .../example/server/core/templates/register.tpl,
+ .../vendors/oauth/example/server/www/hello.php,
+ .../vendors/oauth/example/server/www/index.php,
+ .../vendors/oauth/example/server/www/logon.php,
+ .../vendors/oauth/example/server/www/oauth.php,
+ .../vendors/oauth/example/server/www/register.php,
+ .../oauth/example/server/www/services.xrds.php,
+ mod/oauth/vendors/oauth/library/OAuthDiscovery.php,
+ mod/oauth/vendors/oauth/library/OAuthException.php,
+ mod/oauth/vendors/oauth/library/OAuthRequest.php,
+ .../vendors/oauth/library/OAuthRequestLogger.php,
+ .../vendors/oauth/library/OAuthRequestSigner.php,
+ .../vendors/oauth/library/OAuthRequestVerifier.php,
+ mod/oauth/vendors/oauth/library/OAuthRequester.php,
+ mod/oauth/vendors/oauth/library/OAuthServer.php,
+ mod/oauth/vendors/oauth/library/OAuthStore.php,
+ .../library/body/OAuthBodyContentDisposition.php,
+ .../library/body/OAuthBodyMultipartFormdata.php,
+ .../vendors/oauth/library/discovery/xrds_parse.php,
+ .../vendors/oauth/library/discovery/xrds_parse.txt,
+ .../OAuthSignatureMethod.class.php, .../OAuthSignatureMethod_HMAC_SHA1.php,
+ .../signature_method/OAuthSignatureMethod_MD5.php,
+ .../OAuthSignatureMethod_PLAINTEXT.php,
+ .../OAuthSignatureMethod_RSA_SHA1.php,
+ .../library/store/OAuthStoreAbstract.class.php,
+ .../oauth/library/store/OAuthStoreAnyMeta.php,
+ .../oauth/library/store/OAuthStoreMySQL.php,
+ .../vendors/oauth/library/store/mysql/install.php,
+ .../vendors/oauth/library/store/mysql/mysql.sql,
+ .../oauth/test/discovery/xrds-fireeagle.xrds,
+ .../oauth/test/discovery/xrds-getsatisfaction.xrds,
+ .../oauth/test/discovery/xrds-magnolia.xrds,
+ mod/oauth/vendors/oauth/test/oauth_test.php: Moved oauth from plugins to core
+ since twitterservices is core and it depends upon oauth.
+
+2010-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php,
+ views/default/page_elements/html_begin_admin.php,
+ views/default/page_shells/admin.php: Updated admin area to be stand-alone.
+ Added a new html begin for admin area.
+
+2010-07-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/views.php,
+ views/default/page_shells/admin.php: added a parameter to the page_draw
+ function so you can specify a different page shell if required.
+
+2010-06-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/README.txt, mod/sitepages/start.php,
+ .../views/default/admin/site/sitepages.php,
+ .../views/default/settings/sitepages/edit.php: Updated README.txt for new
+ ECML. Moved settings to site category.
+
+ * mod/tinymce/views/default/embed/addcontentjs.php,
+ .../default/tinymce/embed_custom_insert_js.php: Embed's
+ elggEmbedInsertContent() now supports multiple losely coupled views to handle
+ custom insertion js. Plugin order no longer matters.
+
+ * mod/embed/start.php, mod/embed/views/default/embed/embed.php: Embed
+ correctly passes text area name to elggEmbedInsertContent().
+
+2010-06-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/views/default/sitepages/members.php,
+ mod/sitepages/views/default/sitepages/sidebar.php,
+ mod/sitepages/views/default/sitepages/welcome.php: Interface updates to
+ sitepages
+
+ * views/default/canvas/layouts/administration.php: Added more stand-alone
+ admin area rules
+
+ * mod/groups/start.php, mod/groups/views/default/forms/groups/edit.php,
+ views/default/page_elements/elgg_sidebar.php: Added classname to group edit
+ form, divider before edit buttons, and moved the invalid number preceding the
+ classname.
+
+ * mod/members/views/default/members/search.php: Added classnames to members
+ search form
+
+ * mod/members/views/default/members/search.php: Updated wrapper with new
+ naming
+
+2010-06-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/tagcloud.php: Added wrapper to tagcloud + title (for
+ theming)
+
+ * mod/profile/views/default/profile/admin_menu.php: Added float-clear on
+ owner-block links (for theming)
+
+2010-06-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Updated sidebar comments text overflow
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/object/blog.php: Updated the layout of a blogpost
+
+ * mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/groups/css.php: Updated the layout of a topic post
+ within group discussions
+
+2010-06-27 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/html_begin.php,
+ views/default/page_elements/owner_block.php: Closes #2307 #2308 - encoding
+ ampersands in RSS links
+
+2010-06-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/object/thewire/create.php: The wire can now have
+ comments and likes via the activity stream.
+
+2010-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css_ie.php: Updates to IE7 css
+
+ * views/default/admin/components/plugin.php: Updated advanced plugin strings
+ markup/classes
+
+2010-06-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/manifest.xml: notfications default state enabled
+
+ * mod/bookmarks/manifest.xml: changed the default state for bookmarks
+
+2010-06-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Added optional 4th argument 'class' for
+ elgg_instanceof().
+
+ * views/default/page_elements/content_header.php: Updated documentation for
+ page_elements/content_header
+
+2010-06-23 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/tabs.php: Only displaying navigation div when
+ tabs are present.
+
+2010-06-22 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/content_header.php: Allowing plugin authors to
+ override the default tabs (filters) displayed on the content header.
+
+2010-06-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, .../views/default/bookmarks/group_bookmarks.php,
+ .../views/default/groups/activity_latest.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/forum_latest.php: Added a 'view all' link to
+ group tools widgets.
+
+ * mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/groups/css.php: Updated groups/forums topic css
+
+2010-06-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/edittopic.php: forward to the correct place
+ after editing a topic
+
+ * mod/groups/actions/forums/addpost.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletepost.php,
+ mod/groups/actions/forums/editpost.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/activity.php,
+ mod/groups/addtopic.php, mod/groups/all.php, mod/groups/discussions.php,
+ mod/groups/edit.php, mod/groups/edittopic.php, mod/groups/forum.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forum/maintopic.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/object/groupforumtopic.php,
+ .../views/default/river/forum/topic/create.php: There was no point in group
+ discussions having their own comment annotations, better to use the generic
+ comments so this has been changed and a full group activity stream added. For
+ v1.8, there will need to be an upgrade script which will change
+ 'group_topic_post' -> 'generic_comment' and on all existing topics, take the
+ first annotation of type 'group_topic_post' and populate the topic's
+ description.
+
+ * .../views/default/river/item/wrapper.php: group discussion no longer needs
+ this check as it will be possible to comment on discussions from the activity
+ stream.
+
+2010-06-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php: Ref #2294 - group creation action also needs
+ page owner set
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/join.php,
+ mod/groups/actions/joinrequest.php, mod/groups/actions/leave.php: Refs #2294
+ - groups_write_acl_plugin_hook depends on page owner since [5782] and group
+ actions seem to end up with the group owner as the page owner. This is a
+ temporary fix for this issue. All group activity since [5782] on installs now
+ have corrupted group access lists. I have a script to fix this that I can
+ share.
+
+ * mod/groups/actions/join.php: Fixed broken join action for closed groups -
+ encoding issue on forward URL
+
+2010-06-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/views.php: included an option to display existing comments but
+ not show the new comment form.
+
+2010-06-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2010061501.php, engine/lib/views.php,
+ engine/start.php, mod/groups/actions/invite.php, version.php: Merged
+ r6506:6509 from 1.7 to trunk.
+
+ * engine/lib/pagehandler.php, friends/add.php, friends/collections.php,
+ friends/edit.php, friends/index.php, friends/of.php: Merged friends pages
+ fixes in r6501:6503 from 1.7 to trunk.
+
+ * engine/lib/notification.php, engine/lib/users.php, languages/en.php:
+ Merging r6497:6499 to trunk.
+
+ * mod/groups/actions/featured.php,
+ mod/groups/views/default/groups/grouplisting.php: Merged group featuring
+ fixes to trunk [6493]
+
+2010-06-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/pages/views/default/pages/breadcrumbs.php: Updated Pages breadcrumbs
+ markup to use generic breadcrumb style
+
+2010-06-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/pages/start.php: Making menu link for pages go to all pages instead of
+ owned pages.
+
+ * mod/pages/actions/pages/delete.php,
+ mod/pages/actions/pages/editwelcome.php, mod/pages/edit.php,
+ mod/pages/history.php, mod/pages/index.php, mod/pages/languages/en.php,
+ mod/pages/new.php, mod/pages/pagesTree.php, mod/pages/start.php,
+ mod/pages/view.php, mod/pages/views/default/annotation/icon.php,
+ mod/pages/views/default/annotation/page.php,
+ .../views/default/icon/object/page/medium.php,
+ mod/pages/views/default/icon/object/page/small.php,
+ .../views/default/icon/object/page_top/medium.php,
+ .../views/default/icon/object/page_top/small.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/pagegallery.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/pages/sidebar/sidebarthis.php,
+ mod/pages/views/default/pages/sidebar/starter.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/sidebar/wrapper.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/annotate.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/page/update.php,
+ .../default/river/object/page_top/annotate.php,
+ .../views/default/river/object/page_top/create.php,
+ .../views/default/river/object/page_top/update.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php: Quick and dirty changes to pages to work on 1.8's
+ layout.
+
+ * engine/start.php: Making sure to load all plugins when doing an upgrade to
+ pull in CSS changes and allow plugins to register for the upgrade hook.
+
+2010-06-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/views.php, engine/start.php: Merged
+ [6485] and [6486] to trunk.
+
+2010-06-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Merged 6482 to trunk.
+
+2010-06-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/register.php, engine/lib/access.php, engine/lib/users.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/languages/en.php:
+ Merged r6362:6366 from 1.7 to trunk.
+
+2010-06-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: Always show access level when
+ listing blogs, regardless of canEdit().
+
+ * mod/blog/blog_lib.php: Removing old time_created fudging for blogs. It
+ doens't work right.
+
+ * mod/profile/languages/en.php, mod/profile/profile_lib.php,
+ mod/profile/start.php, .../views/default/profile/profile_content.php,
+ .../default/profile/profile_contents/activity.php,
+ .../profile/profile_contents/commentwall.php,
+ .../default/profile/profile_contents/details.php,
+ .../default/profile/profile_contents/friends.php,
+ .../default/profile/profile_contents/sidebar.php,
+ .../default/profile/profile_contents/twitter.php,
+ mod/profile/views/default/profile/sidebar.php: Some code cleanup on profile
+ plugin. Added wrapper view for profile content. Added ECML for profile
+ content. Moved profile/profile_content/sidebar to profile/sidebar
+
+ * mod/groups/languages/en.php: Slight code cleanup in groups langauges.
+ Added string for group discussion ECML option.
+
+ * mod/groups/start.php: Added group forums to ECML views to parse.
+
+ * mod/bookmarks/languages/en.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php: Small code cleanup on bookmarks.
+ Added better logic for determining the username to use when adding a bookmark
+ via the bookmarklet.
+
+ * .../views/default/river/item/wrapper.php: Activity stream comments now
+ show up outside of the hidden div so you can see them when on the like tab.
+
+ * mod/riverdashboard/languages/en.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php: Added "Show less" on activity stream
+ comments.
+
+2010-06-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/css.php: Updates to embed interface to make
+ it theme agnostic in core
+
+ * .../views/default/riverdashboard/css.php: Updated inline comment form css
+ height - for a smoother slide animation
+
+2010-06-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php: Updated administration
+ area css with more styles to make it totally stand-alone
+
+ * mod/profile/views/default/profile/css.php: Small update to latest tweets
+ list style
+
+ * .../profile/profile_contents/commentwall.php: Added wrapper to profile
+ page commentwall
+
+2010-06-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php: ECML is
+ parsed on the activity stream.
+
+2010-06-10 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/endpoint/get_comments.php,
+ .../views/default/river/item/wrapper.php: Adding "twitter_anywhere" class to
+ Conversation and Riverdashboard posts.
+
+ * views/default/input/userpicker.php: Performing checks to handle empty
+ arrays and malformed values.
+
+2010-06-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/views/default/object/bookmarks.php: Moved view extend call -
+ so it's for all users (not just object owner), and added likes to bookmarks
+ (as we already have it in the activity stream)
+
+2010-06-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/bookmarks/group_bookmarks.php: group bookmarks now
+ provides a link to create if none exist
+
+ * mod/groups/views/default/groups/forum_latest.php: if there is no group
+ discussion, provide a link to create a topic
+
+2010-06-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/js.php: Added a 'show less' link. [Still
+ needs a js function adding to collapse list]
+
+ * mod/groups/all.php, .../views/default/groups/group_sort_menu.php: Updated
+ Groups tabs so you land on newest groups tab rather than discussion.
+
+2010-06-09 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: Pre-populating userpicker list when
+ values are passed.
+
+2010-06-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/upload/content.php: Updated embed modal
+ listings with timestamp and text formatting / css.
+
+2010-06-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/gallery.php,
+ mod/embed/views/default/embed/item/list.php: Embed hooks now accept icon_size
+ for displaying items in gallery / list view.
+
+ * .../views/default/riverdashboard/js.php: Removing debug call...I've been
+ very bad about this!
+
+ * mod/embed/views/default/embed/item/gallery.php: Embed default gallery list
+ uses medium icon instead of tiny.
+
+2010-06-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/views/default/ecml/keywords/entity.php,
+ mod/embed/views/default/embed/css.php: Updated embeded object links ui
+
+ * mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php,
+ mod/embed/views/default/embed/upload/content.php: Updated embed modal with
+ wrappers & classnames for each pane
+
+ * mod/embed/views/default/embed/css.php: Updated embed modal with an initial
+ default size
+
+ * mod/ecml/views/default/ecml/keywords/entity.php: Updated ecml inline
+ embeded document links to have a classname
+
+ * views/default/css.php: Updated core css download button
+
+2010-06-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/profile/profile_navigation.php: Properly extending
+ profile navigation view.
+
+2010-06-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/endpoint/get_likes.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/js.php: Ajaxified likes view on activity
+ stream.
+
+2010-06-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/groups/groupprofile.php: Cleaning up groups
+ navigation. Action buttons have replaced the submenu links, helping to
+ standardize user experience. Added a membership-dependent breadcrumb trail.
+
+2010-06-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/profile/profile_ownerblock.php: profile owmer block link
+ fixed
+
+2010-06-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/views/default/embed/embed.php: removing debug output.
+
+ * mod/embed/views/default/embed/embed.php: Fixed invalid variable name that
+ caused embed to ignore custom views for embed content.
+
+ * mod/embed/views/default/embed/embed.php: Upload tab selected when
+ uploading in embed modal.
+
+2010-06-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Updated documents. Removed large and small document
+ icons - we now just use the very small ones from the old filter directory.
+ Updated doc's list view and download button.
+
+ * .../views/default/riverdashboard/css.php: Updated riverdashboard more
+ comments link
+
+ * views/default/css.php, views/default/css_ie.php,
+ views/default/js/initialise_elgg.php: Updated display and position of likes
+ lists. Added js to dismiss list if a click outside the list is detected, also
+ added js so only one list is viewable at a time.
+
+2010-06-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_sidebar.php: Reverting [6371] because
+ Cash already took care of it.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php:
+ elgg_get_entities_from_metadata() and egef_annotations() support singular ->
+ plural rewrites. (Why didn't I add this originally?!)
+
+2010-06-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/endpoint/get_comments.php,
+ mod/riverdashboard/index.php, mod/riverdashboard/languages/en.php,
+ mod/riverdashboard/start.php, .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/js.php: Minimal attempt to bring
+ riverdashboard up to code standards. Fixed comment count in +N more string.
+ Added ajax grabbing of all comments when clicking more link.
+
+ * mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/save.php: Added metadata 'new_post' when autosaving
+ blogs to help with river / revision logic. Autosaved blogs now correctly
+ show up in river and don't create a revision upon initial save.
+
+ * mod/blog/views/default/blog/forms/edit.php: Fix for displaying auto save
+ time. HTML was changed without relevent JS updates.
+
+2010-06-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, .../views/default/widgets/a_users_groups/view.php:
+ Removing deprecated calls to get_entities_from_relationship() from core code.
+
+
+2010-06-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php: group create river action moved
+
+2010-06-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topicposts.php,
+ views/default/annotation/generic_comment.php: Added a classname to generic
+ comment and forum topic posts anchors - for theming purposes.
+
+2010-06-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/languages/en.php,
+ .../notifications/subscriptions/collections.php: Updating Notifications
+ language file.
+
+2010-06-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php, mod/groups/languages/en.php,
+ mod/groups/views/default/river/group/create.php: creating a new group now
+ displays in the activity stream.
+
+ * mod/groups/languages/en.php,
+ .../views/default/river/forum/topic/create.php: updated the group discussion
+ river view
+
+2010-06-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, views/default/admin/users/find.php: Removing user
+ "Find" from Admin area. Closes #2216
+
+2010-06-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: lang tweak
+
+ * mod/groups/actions/featured.php, mod/groups/languages/en.php,
+ mod/groups/views/default/groups/grouplisting.php: featuring and unfeaturing
+ groups now works
+
+ * mod/ecml/start.php: don't extend input fields yet with ecml as it is not
+ designed as an end user tool
+
+ * mod/blog/views/default/object/blog.php: blog tags will not display the
+ class if no tags exist
+
+ * actions/likes/add.php, languages/en.php: missing lang strings added
+
+2010-06-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_sidebar.php: Added elgg_sidebar/extend
+ view.
+
+2010-06-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php: Added missing language string for embed.
+
+ * mod/embed/start.php, mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/upload/content.php: Added first loosely coupled
+ upload support to embed.
+
+2010-06-04 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/users/find.php, views/default/css.php: Updating Find
+ User in the Admin section to use the livesearch user picker.
+
+2010-06-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2010060401.php,
+ .../views/default/widgets/a_users_groups/view.php, version.php: Merged
+ r6349:6351 from 1.7 to trunk.
+
+ * engine/lib/elgglib.php, engine/lib/upgrades/2010060101.php,
+ engine/start.php, .../views/default/defaultwidgets/editor.php,
+ mod/notifications/start.php, mod/profile/views/default/profile/icon.php,
+ simplecache/view.php, upgrade.php, version.php,
+ views/default/canvas/layouts/widgets.php: Merge r6301:6338 from 1.7 to trunk.
+
+
+2010-06-04 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/start.php: Allowing new users to validate email
+ addresses if the site is a Private Network.
+
+2010-06-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/invite.php: Added id to invite
+ friends to group form (for theming purposes).
+
+ * .../profile/profile_contents/commentwall.php: Removed profile content
+ wrapper from comment wall content.
+
+2010-06-03 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php: Updating views to no
+ longer parse usernames as this is handled directly thru Mentions.
+
+2010-06-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/README.txt, mod/ecml/ecml_functions.php, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/keywords/entity.php: Added entity keyword to
+ ECML. (NB: The old entity keyword is now entity_list)
+
+2010-06-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/views/default/input/longtext.php: Removed one unused and one
+ absent plugin from tinyMCE init that was causing problems in some browsers.
+
+2010-06-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CODING.txt: Updated CODING.txt with more best practices. Simplified some
+ of the examples.
+
+ * mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/gallery.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php: Moved most of the logic for
+ embed viewing into a single place. Added gallery support (still no CSS).
+
+2010-06-02 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Mathematical calculations on annotations will
+ return false for non-existent entity subtypes.
+
+ * engine/lib/tags.php, languages/en.php, mod/tagcloud/start.php,
+ mod/tagcloud/views/default/tagcloud/extend.php,
+ views/default/output/tagcloud.php: Moving new Site Tags functionality out of
+ Tagcloud plugin and into core.
+
+ * engine/lib/annotations.php, engine/tests/objects/entities.php: Requesting
+ annotations from a non-existent subtype will now return nothing instead of
+ everything. This functionality is required to preserve context.
+
+2010-06-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/languages/en.php: Added missing language strings for blog.
+
+ * views/default/entities/entity_listing.php,
+ views/default/entities/gallery_listing.php: Updated documentation for
+ entity_listing and gallery_listing.
+
+ * views/default/entities/gallery_listing.php: Updated gallery_listing.php
+ view. No CSS yet.
+
+ * mod/embed/embed.php, mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/media.php,
+ mod/embed/views/default/embed/pagination.php,
+ mod/embed/views/default/embed/simpletype.php,
+ mod/embed/views/default/embed/tabs.php,
+ mod/embed/views/default/embed/upload.php: Removing unused views and files
+ from embed.
+
+2010-06-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/views/default/tagcloud/extend.php: Updated tagcloud link
+
+2010-06-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/languages/en.php, mod/embed/views/default/embed/embed.php:
+ Standardized embed language file. Fixed title language string for embed
+ modal.
+
+2010-06-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/walled_garden_background_top.gif,
+ _graphics/walled_garden_backgroundfull_bottom.gif,
+ _graphics/walled_garden_backgroundfull_top.gif,
+ .../default/account/forms/login_walled_garden.php,
+ views/default/account/forms/register.php, views/default/css.php,
+ views/default/page_shells/walled_garden.php: Updated private network
+ (previously walled garden) login/register/lost password to be independent of
+ any theme running, and improved interface.
+
+2010-06-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php: removed redundant view call
+
+2010-06-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/start.php: Updated all site Tagcloud to use 2column canvas.
+
+2010-06-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/embed/README.txt, mod/embed/embed.php, mod/embed/manifest.xml,
+ mod/embed/start.php, mod/embed/views/default/embed/addcontentjs.php,
+ mod/embed/views/default/embed/embed.php,
+ mod/embed/views/default/embed/item/list.php,
+ mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/embed/layouts/gallery.php,
+ mod/embed/views/default/embed/layouts/list.php,
+ mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/media.php,
+ mod/embed/views/default/embed/upload.php: First pass at a loosely couple
+ embed plugin using ECML.
+
+2010-06-01 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/account/forms/login_walled_garden.php, views/default/css.php:
+ Adding a "Register" link to the Walled Garden login screen. This mimics
+ pre-existing "Lost Password" functionality without redirecting to an internal
+ page.
+
+2010-06-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Pagination uses
+ elgg_get_array_value().
+
+ * engine/lib/elgglib.php: Added elgg_get_array_value() helper function.
+
+ * views/default/navigation/pagination.php: Fixed bug in detecting and using
+ baseurl in navingation/pagination view.
+
+ * views/default/entities/entity_listing.php: Updated documentation for
+ entities/entity_listing view.
+
+2010-06-01 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/start.php, mod/tagcloud/views/default/tagcloud/extend.php,
+ views/default/output/tagcloud.php: Extending default tagcloud view to include
+ a link to all site tags. Also fixing a bug where errant "," was prepended to
+ tag list.
+
+2010-06-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: get_input() defaults to NULL instead of empty
+ string. Works better with isset().
+
+ * mod/tinymce/tinymce_content.css,
+ .../themes/advanced/skins/default/content.css: Forgot to svn add
+ tinymce_content.css. Added tinymce_content.css and reverted [6300] to allow
+ for easier tinymce upgrades.
+
+2010-06-01 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php, mod/blog/views/default/blog/sidebar_menu.php:
+ Restricting tag cloud display on Blogs and Documents by context.
+
+2010-06-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/start.php, mod/sitepages/views/default/sitepages/css.php,
+ mod/sitepages/views/default/sitepages/sidebar.php,
+ mod/sitepages/views/default/sitepages/welcome.php: Updated Sitepages homepage
+ markup with clearfloat, content wrappers and associated css.
+
+ * mod/profile/views/default/profile/css.php: Updated avatar user-menu
+ font-style.
+
+ * .../themes/advanced/skins/default/content.css: TinyMCE default editor
+ font-size increased to match preview and publish size.
+
+2010-05-31 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php: remove the filter header if not logged in
+
+ * mod/bookmarks/languages/en.php,
+ .../default/river/object/bookmarks/create.php: bookmarks river view altered
+ for groups
+
+2010-05-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: make sure logged out river display correctly
+
+ * engine/lib/river.php: small tweak to the new river
+
+ * mod/bookmarks/start.php: removed a breadcrumb view when on the all page
+
+ * mod/bookmarks/languages/en.php: change community to group for consistency
+
+2010-05-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/output.php: Merged r6263:6271 to trunk.
+
+
+ * engine/handlers/pagehandler.php, engine/lib/pagehandler.php,
+ mod/tinymce/views/default/input/longtext.php,
+ views/default/input/pulldown.php: Merged [6248] - [6252] into trunk.
+
+ * engine/lib/upgrades/2010052601.php, mod/groups/actions/edit.php,
+ mod/groups/views/default/forms/groups/edit.php, version.php: Merged [6223] -
+ [6228] into trunk.
+
+ * mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/editpost.php: Merging [6091] to trunk.
+
+ * mod/tinymce/languages/en.php, mod/tinymce/readme.txt,
+ mod/tinymce/start.php, mod/tinymce/tinymce/changelog.txt,
+ mod/tinymce/tinymce/jscripts/tiny_mce/langs/en.js,
+ mod/tinymce/tinymce/jscripts/tiny_mce/license.txt,
+ .../jscripts/tiny_mce/plugins/advhr/css/advhr.css,
+ .../tiny_mce/plugins/advhr/editor_plugin.js,
+ .../tiny_mce/plugins/advhr/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advhr/js/rule.js,
+ .../tiny_mce/plugins/advhr/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advhr/rule.htm,
+ .../tiny_mce/plugins/advimage/css/advimage.css,
+ .../tiny_mce/plugins/advimage/editor_plugin.js,
+ .../tiny_mce/plugins/advimage/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advimage/image.htm,
+ .../tiny_mce/plugins/advimage/img/sample.gif,
+ .../jscripts/tiny_mce/plugins/advimage/js/image.js,
+ .../tiny_mce/plugins/advimage/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlink/css/advlink.css,
+ .../tiny_mce/plugins/advlink/editor_plugin.js,
+ .../tiny_mce/plugins/advlink/editor_plugin_src.js,
+ .../tiny_mce/plugins/advlink/js/advlink.js,
+ .../tiny_mce/plugins/advlink/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advlink/link.htm,
+ .../tiny_mce/plugins/autosave/editor_plugin.js,
+ .../tiny_mce/plugins/autosave/editor_plugin_src.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin_src.js,
+ .../tiny_mce/plugins/compat2x/editor_plugin.js,
+ .../tiny_mce/plugins/compat2x/editor_plugin_src.js,
+ .../tiny_mce/plugins/contextmenu/editor_plugin.js,
+ .../plugins/contextmenu/editor_plugin_src.js,
+ .../plugins/directionality/editor_plugin.js,
+ .../plugins/directionality/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/editor_plugin.js,
+ .../tiny_mce/plugins/emotions/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/emotions.htm,
+ .../tiny_mce/plugins/emotions/img/smiley-cool.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-cry.gif,
+ .../plugins/emotions/img/smiley-embarassed.gif,
+ .../plugins/emotions/img/smiley-foot-in-mouth.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-frown.gif,
+ .../plugins/emotions/img/smiley-innocent.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-kiss.gif,
+ .../plugins/emotions/img/smiley-laughing.gif,
+ .../plugins/emotions/img/smiley-money-mouth.gif,
+ .../plugins/emotions/img/smiley-sealed.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-smile.gif,
+ .../plugins/emotions/img/smiley-surprised.gif,
+ .../plugins/emotions/img/smiley-tongue-out.gif,
+ .../plugins/emotions/img/smiley-undecided.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-wink.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-yell.gif,
+ .../tiny_mce/plugins/emotions/js/emotions.js,
+ .../tiny_mce/plugins/emotions/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/example/dialog.htm,
+ .../tiny_mce/plugins/example/editor_plugin.js,
+ .../tiny_mce/plugins/example/editor_plugin_src.js,
+ .../tiny_mce/plugins/example/img/example.gif,
+ .../jscripts/tiny_mce/plugins/example/js/dialog.js,
+ .../jscripts/tiny_mce/plugins/example/langs/en.js,
+ .../tiny_mce/plugins/example/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullpage/css/fullpage.css,
+ .../tiny_mce/plugins/fullpage/editor_plugin.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/fullpage.htm,
+ .../tiny_mce/plugins/fullpage/js/fullpage.js,
+ .../tiny_mce/plugins/fullpage/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullscreen/editor_plugin.js,
+ .../plugins/fullscreen/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullscreen/fullscreen.htm,
+ .../tiny_mce/plugins/iespell/editor_plugin.js,
+ .../tiny_mce/plugins/iespell/editor_plugin_src.js,
+ .../tiny_mce/plugins/inlinepopups/editor_plugin.js,
+ .../plugins/inlinepopups/editor_plugin_src.js,
+ .../inlinepopups/skins/clearlooks2/img/alert.gif,
+ .../inlinepopups/skins/clearlooks2/img/button.gif,
+ .../inlinepopups/skins/clearlooks2/img/buttons.gif,
+ .../inlinepopups/skins/clearlooks2/img/confirm.gif,
+ .../inlinepopups/skins/clearlooks2/img/corners.gif,
+ .../skins/clearlooks2/img/horizontal.gif,
+ .../skins/clearlooks2/img/vertical.gif,
+ .../inlinepopups/skins/clearlooks2/window.css,
+ .../tiny_mce/plugins/inlinepopups/template.htm,
+ .../plugins/insertdatetime/editor_plugin.js,
+ .../plugins/insertdatetime/editor_plugin_src.js,
+ .../tiny_mce/plugins/layer/editor_plugin.js,
+ .../tiny_mce/plugins/layer/editor_plugin_src.js,
+ .../tiny_mce/plugins/media/css/content.css,
+ .../jscripts/tiny_mce/plugins/media/css/media.css,
+ .../tiny_mce/plugins/media/editor_plugin.js,
+ .../tiny_mce/plugins/media/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/img/flash.gif,
+ .../tiny_mce/plugins/media/img/flv_player.swf,
+ .../tiny_mce/plugins/media/img/quicktime.gif,
+ .../tiny_mce/plugins/media/img/realmedia.gif,
+ .../tiny_mce/plugins/media/img/shockwave.gif,
+ .../jscripts/tiny_mce/plugins/media/img/trans.gif,
+ .../tiny_mce/plugins/media/img/windowsmedia.gif,
+ .../jscripts/tiny_mce/plugins/media/js/embed.js,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/media/media.htm,
+ .../tiny_mce/plugins/nonbreaking/editor_plugin.js,
+ .../plugins/nonbreaking/editor_plugin_src.js,
+ .../tiny_mce/plugins/noneditable/editor_plugin.js,
+ .../plugins/noneditable/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/css/content.css,
+ .../tiny_mce/plugins/pagebreak/editor_plugin.js,
+ .../plugins/pagebreak/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/img/pagebreak.gif,
+ .../tiny_mce/plugins/pagebreak/img/trans.gif,
+ .../jscripts/tiny_mce/plugins/paste/blank.htm,
+ .../jscripts/tiny_mce/plugins/paste/css/blank.css,
+ .../tiny_mce/plugins/paste/css/pasteword.css,
+ .../tiny_mce/plugins/paste/editor_plugin.js,
+ .../tiny_mce/plugins/paste/editor_plugin_src.js,
+ .../tiny_mce/plugins/paste/js/pastetext.js,
+ .../tiny_mce/plugins/paste/js/pasteword.js,
+ .../tiny_mce/plugins/paste/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/paste/pastetext.htm,
+ .../jscripts/tiny_mce/plugins/paste/pasteword.htm,
+ .../tiny_mce/plugins/preview/editor_plugin.js,
+ .../tiny_mce/plugins/preview/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/preview/example.html,
+ .../tiny_mce/plugins/preview/jscripts/embed.js,
+ .../tiny_mce/plugins/print/editor_plugin.js,
+ .../tiny_mce/plugins/print/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/safari/blank.htm,
+ .../tiny_mce/plugins/safari/editor_plugin.js,
+ .../tiny_mce/plugins/safari/editor_plugin_src.js,
+ .../tiny_mce/plugins/save/editor_plugin.js,
+ .../tiny_mce/plugins/save/editor_plugin_src.js,
+ .../plugins/searchreplace/css/searchreplace.css,
+ .../plugins/searchreplace/editor_plugin.js,
+ .../plugins/searchreplace/editor_plugin_src.js,
+ .../plugins/searchreplace/js/searchreplace.js,
+ .../tiny_mce/plugins/searchreplace/langs/en_dlg.js,
+ .../plugins/searchreplace/searchreplace.htm,
+ .../tiny_mce/plugins/spellchecker/css/content.css,
+ .../tiny_mce/plugins/spellchecker/editor_plugin.js,
+ .../plugins/spellchecker/editor_plugin_src.js,
+ .../tiny_mce/plugins/spellchecker/img/wline.gif,
+ .../jscripts/tiny_mce/plugins/style/css/props.css,
+ .../tiny_mce/plugins/style/editor_plugin.js,
+ .../tiny_mce/plugins/style/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/style/js/props.js,
+ .../tiny_mce/plugins/style/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/style/props.htm,
+ .../jscripts/tiny_mce/plugins/table/cell.htm,
+ .../jscripts/tiny_mce/plugins/table/css/cell.css,
+ .../jscripts/tiny_mce/plugins/table/css/row.css,
+ .../jscripts/tiny_mce/plugins/table/css/table.css,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/cell.js,
+ .../tiny_mce/plugins/table/js/merge_cells.js,
+ .../jscripts/tiny_mce/plugins/table/js/row.js,
+ .../jscripts/tiny_mce/plugins/table/js/table.js,
+ .../tiny_mce/plugins/table/langs/en_dlg.js,
+ .../tiny_mce/plugins/table/merge_cells.htm,
+ .../jscripts/tiny_mce/plugins/table/row.htm,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../jscripts/tiny_mce/plugins/template/blank.htm,
+ .../tiny_mce/plugins/template/css/template.css,
+ .../tiny_mce/plugins/template/editor_plugin.js,
+ .../tiny_mce/plugins/template/editor_plugin_src.js,
+ .../tiny_mce/plugins/template/js/template.js,
+ .../tiny_mce/plugins/template/langs/en_dlg.js,
+ .../tiny_mce/plugins/template/template.htm,
+ .../tiny_mce/plugins/visualchars/editor_plugin.js,
+ .../plugins/visualchars/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm,
+ .../tiny_mce/plugins/xhtmlxtras/acronym.htm,
+ .../tiny_mce/plugins/xhtmlxtras/attributes.htm,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm,
+ .../tiny_mce/plugins/xhtmlxtras/css/attributes.css,
+ .../tiny_mce/plugins/xhtmlxtras/css/popup.css,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/del.htm,
+ .../tiny_mce/plugins/xhtmlxtras/editor_plugin.js,
+ .../plugins/xhtmlxtras/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm,
+ .../tiny_mce/plugins/xhtmlxtras/js/abbr.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/acronym.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/attributes.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/cite.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js,
+ .../plugins/xhtmlxtras/js/element_common.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js,
+ .../tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/about.htm,
+ .../jscripts/tiny_mce/themes/advanced/anchor.htm,
+ .../jscripts/tiny_mce/themes/advanced/charmap.htm,
+ .../tiny_mce/themes/advanced/color_picker.htm,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/advanced/image.htm,
+ .../tiny_mce/themes/advanced/img/colorpicker.jpg,
+ .../tiny_mce/themes/advanced/img/icons.gif,
+ .../jscripts/tiny_mce/themes/advanced/js/about.js,
+ .../jscripts/tiny_mce/themes/advanced/js/anchor.js,
+ .../tiny_mce/themes/advanced/js/charmap.js,
+ .../tiny_mce/themes/advanced/js/color_picker.js,
+ .../jscripts/tiny_mce/themes/advanced/js/image.js,
+ .../jscripts/tiny_mce/themes/advanced/js/link.js,
+ .../tiny_mce/themes/advanced/js/source_editor.js,
+ .../jscripts/tiny_mce/themes/advanced/langs/en.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/link.htm,
+ .../themes/advanced/skins/default/content.css,
+ .../themes/advanced/skins/default/dialog.css,
+ .../themes/advanced/skins/default/img/buttons.png,
+ .../themes/advanced/skins/default/img/items.gif,
+ .../advanced/skins/default/img/menu_arrow.gif,
+ .../advanced/skins/default/img/menu_check.gif,
+ .../themes/advanced/skins/default/img/progress.gif,
+ .../themes/advanced/skins/default/img/tabs.gif,
+ .../tiny_mce/themes/advanced/skins/default/ui.css,
+ .../themes/advanced/skins/o2k7/content.css,
+ .../tiny_mce/themes/advanced/skins/o2k7/dialog.css,
+ .../themes/advanced/skins/o2k7/img/button_bg.png,
+ .../advanced/skins/o2k7/img/button_bg_black.png,
+ .../advanced/skins/o2k7/img/button_bg_silver.png,
+ .../tiny_mce/themes/advanced/skins/o2k7/ui.css,
+ .../themes/advanced/skins/o2k7/ui_black.css,
+ .../themes/advanced/skins/o2k7/ui_silver.css,
+ .../tiny_mce/themes/advanced/source_editor.htm,
+ .../tiny_mce/themes/simple/editor_template.js,
+ .../tiny_mce/themes/simple/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/simple/img/icons.gif,
+ .../jscripts/tiny_mce/themes/simple/langs/en.js,
+ .../themes/simple/skins/default/content.css,
+ .../tiny_mce/themes/simple/skins/default/ui.css,
+ .../tiny_mce/themes/simple/skins/o2k7/content.css,
+ .../themes/simple/skins/o2k7/img/button_bg.png,
+ .../tiny_mce/themes/simple/skins/o2k7/ui.css,
+ mod/tinymce/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_popup.js,
+ .../jscripts/tiny_mce/utils/editable_selects.js,
+ .../tinymce/jscripts/tiny_mce/utils/form_utils.js,
+ .../tinymce/jscripts/tiny_mce/utils/mctabs.js,
+ .../tinymce/jscripts/tiny_mce/utils/validate.js,
+ mod/tinymce/vendor/tinymce/changelog.txt,
+ .../vendor/tinymce/jscripts/tiny_mce/langs/en.js,
+ .../vendor/tinymce/jscripts/tiny_mce/license.txt,
+ .../jscripts/tiny_mce/plugins/advhr/css/advhr.css,
+ .../tiny_mce/plugins/advhr/editor_plugin.js,
+ .../tiny_mce/plugins/advhr/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advhr/js/rule.js,
+ .../tiny_mce/plugins/advhr/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advhr/rule.htm,
+ .../tiny_mce/plugins/advimage/css/advimage.css,
+ .../tiny_mce/plugins/advimage/editor_plugin.js,
+ .../tiny_mce/plugins/advimage/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advimage/image.htm,
+ .../tiny_mce/plugins/advimage/img/sample.gif,
+ .../jscripts/tiny_mce/plugins/advimage/js/image.js,
+ .../tiny_mce/plugins/advimage/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlink/css/advlink.css,
+ .../tiny_mce/plugins/advlink/editor_plugin.js,
+ .../tiny_mce/plugins/advlink/editor_plugin_src.js,
+ .../tiny_mce/plugins/advlink/js/advlink.js,
+ .../tiny_mce/plugins/advlink/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advlink/link.htm,
+ .../tiny_mce/plugins/advlist/editor_plugin.js,
+ .../tiny_mce/plugins/advlist/editor_plugin_src.js,
+ .../tiny_mce/plugins/autoresize/editor_plugin.js,
+ .../plugins/autoresize/editor_plugin_src.js,
+ .../tiny_mce/plugins/autosave/editor_plugin.js,
+ .../tiny_mce/plugins/autosave/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/autosave/langs/en.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin_src.js,
+ .../tiny_mce/plugins/contextmenu/editor_plugin.js,
+ .../plugins/contextmenu/editor_plugin_src.js,
+ .../plugins/directionality/editor_plugin.js,
+ .../plugins/directionality/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/editor_plugin.js,
+ .../tiny_mce/plugins/emotions/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/emotions.htm,
+ .../tiny_mce/plugins/emotions/img/smiley-cool.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-cry.gif,
+ .../plugins/emotions/img/smiley-embarassed.gif,
+ .../plugins/emotions/img/smiley-foot-in-mouth.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-frown.gif,
+ .../plugins/emotions/img/smiley-innocent.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-kiss.gif,
+ .../plugins/emotions/img/smiley-laughing.gif,
+ .../plugins/emotions/img/smiley-money-mouth.gif,
+ .../plugins/emotions/img/smiley-sealed.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-smile.gif,
+ .../plugins/emotions/img/smiley-surprised.gif,
+ .../plugins/emotions/img/smiley-tongue-out.gif,
+ .../plugins/emotions/img/smiley-undecided.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-wink.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-yell.gif,
+ .../tiny_mce/plugins/emotions/js/emotions.js,
+ .../tiny_mce/plugins/emotions/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/example/dialog.htm,
+ .../tiny_mce/plugins/example/editor_plugin.js,
+ .../tiny_mce/plugins/example/editor_plugin_src.js,
+ .../tiny_mce/plugins/example/img/example.gif,
+ .../jscripts/tiny_mce/plugins/example/js/dialog.js,
+ .../jscripts/tiny_mce/plugins/example/langs/en.js,
+ .../tiny_mce/plugins/example/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullpage/css/fullpage.css,
+ .../tiny_mce/plugins/fullpage/editor_plugin.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/fullpage.htm,
+ .../tiny_mce/plugins/fullpage/js/fullpage.js,
+ .../tiny_mce/plugins/fullpage/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullscreen/editor_plugin.js,
+ .../plugins/fullscreen/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullscreen/fullscreen.htm,
+ .../tiny_mce/plugins/iespell/editor_plugin.js,
+ .../tiny_mce/plugins/iespell/editor_plugin_src.js,
+ .../tiny_mce/plugins/inlinepopups/editor_plugin.js,
+ .../plugins/inlinepopups/editor_plugin_src.js,
+ .../inlinepopups/skins/clearlooks2/img/alert.gif,
+ .../inlinepopups/skins/clearlooks2/img/button.gif,
+ .../inlinepopups/skins/clearlooks2/img/buttons.gif,
+ .../inlinepopups/skins/clearlooks2/img/confirm.gif,
+ .../inlinepopups/skins/clearlooks2/img/corners.gif,
+ .../skins/clearlooks2/img/horizontal.gif,
+ .../skins/clearlooks2/img/vertical.gif,
+ .../inlinepopups/skins/clearlooks2/window.css,
+ .../tiny_mce/plugins/inlinepopups/template.htm,
+ .../plugins/insertdatetime/editor_plugin.js,
+ .../plugins/insertdatetime/editor_plugin_src.js,
+ .../tiny_mce/plugins/layer/editor_plugin.js,
+ .../tiny_mce/plugins/layer/editor_plugin_src.js,
+ .../tiny_mce/plugins/legacyoutput/editor_plugin.js,
+ .../plugins/legacyoutput/editor_plugin_src.js,
+ .../tiny_mce/plugins/media/css/content.css,
+ .../jscripts/tiny_mce/plugins/media/css/media.css,
+ .../tiny_mce/plugins/media/editor_plugin.js,
+ .../tiny_mce/plugins/media/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/img/flash.gif,
+ .../tiny_mce/plugins/media/img/flv_player.swf,
+ .../tiny_mce/plugins/media/img/quicktime.gif,
+ .../tiny_mce/plugins/media/img/realmedia.gif,
+ .../tiny_mce/plugins/media/img/shockwave.gif,
+ .../jscripts/tiny_mce/plugins/media/img/trans.gif,
+ .../tiny_mce/plugins/media/img/windowsmedia.gif,
+ .../jscripts/tiny_mce/plugins/media/js/embed.js,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/media/media.htm,
+ .../tiny_mce/plugins/nonbreaking/editor_plugin.js,
+ .../plugins/nonbreaking/editor_plugin_src.js,
+ .../tiny_mce/plugins/noneditable/editor_plugin.js,
+ .../plugins/noneditable/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/css/content.css,
+ .../tiny_mce/plugins/pagebreak/editor_plugin.js,
+ .../plugins/pagebreak/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/img/pagebreak.gif,
+ .../tiny_mce/plugins/pagebreak/img/trans.gif,
+ .../tiny_mce/plugins/paste/editor_plugin.js,
+ .../tiny_mce/plugins/paste/editor_plugin_src.js,
+ .../tiny_mce/plugins/paste/js/pastetext.js,
+ .../tiny_mce/plugins/paste/js/pasteword.js,
+ .../tiny_mce/plugins/paste/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/paste/pastetext.htm,
+ .../jscripts/tiny_mce/plugins/paste/pasteword.htm,
+ .../tiny_mce/plugins/preview/editor_plugin.js,
+ .../tiny_mce/plugins/preview/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/preview/example.html,
+ .../tiny_mce/plugins/preview/jscripts/embed.js,
+ .../jscripts/tiny_mce/plugins/preview/preview.html,
+ .../tiny_mce/plugins/print/editor_plugin.js,
+ .../tiny_mce/plugins/print/editor_plugin_src.js,
+ .../tiny_mce/plugins/save/editor_plugin.js,
+ .../tiny_mce/plugins/save/editor_plugin_src.js,
+ .../plugins/searchreplace/css/searchreplace.css,
+ .../plugins/searchreplace/editor_plugin.js,
+ .../plugins/searchreplace/editor_plugin_src.js,
+ .../plugins/searchreplace/js/searchreplace.js,
+ .../tiny_mce/plugins/searchreplace/langs/en_dlg.js,
+ .../plugins/searchreplace/searchreplace.htm,
+ .../tiny_mce/plugins/spellchecker/css/content.css,
+ .../tiny_mce/plugins/spellchecker/editor_plugin.js,
+ .../plugins/spellchecker/editor_plugin_src.js,
+ .../tiny_mce/plugins/spellchecker/img/wline.gif,
+ .../jscripts/tiny_mce/plugins/style/css/props.css,
+ .../tiny_mce/plugins/style/editor_plugin.js,
+ .../tiny_mce/plugins/style/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/style/js/props.js,
+ .../tiny_mce/plugins/style/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/style/props.htm,
+ .../tiny_mce/plugins/tabfocus/editor_plugin.js,
+ .../tiny_mce/plugins/tabfocus/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/cell.htm,
+ .../jscripts/tiny_mce/plugins/table/css/cell.css,
+ .../jscripts/tiny_mce/plugins/table/css/row.css,
+ .../jscripts/tiny_mce/plugins/table/css/table.css,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/cell.js,
+ .../tiny_mce/plugins/table/js/merge_cells.js,
+ .../jscripts/tiny_mce/plugins/table/js/row.js,
+ .../jscripts/tiny_mce/plugins/table/js/table.js,
+ .../tiny_mce/plugins/table/langs/en_dlg.js,
+ .../tiny_mce/plugins/table/merge_cells.htm,
+ .../jscripts/tiny_mce/plugins/table/row.htm,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../jscripts/tiny_mce/plugins/template/blank.htm,
+ .../tiny_mce/plugins/template/css/template.css,
+ .../tiny_mce/plugins/template/editor_plugin.js,
+ .../tiny_mce/plugins/template/editor_plugin_src.js,
+ .../tiny_mce/plugins/template/js/template.js,
+ .../tiny_mce/plugins/template/langs/en_dlg.js,
+ .../tiny_mce/plugins/template/template.htm,
+ .../tiny_mce/plugins/visualchars/editor_plugin.js,
+ .../plugins/visualchars/editor_plugin_src.js,
+ .../tiny_mce/plugins/wordcount/editor_plugin.js,
+ .../plugins/wordcount/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm,
+ .../tiny_mce/plugins/xhtmlxtras/acronym.htm,
+ .../tiny_mce/plugins/xhtmlxtras/attributes.htm,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm,
+ .../tiny_mce/plugins/xhtmlxtras/css/attributes.css,
+ .../tiny_mce/plugins/xhtmlxtras/css/popup.css,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/del.htm,
+ .../tiny_mce/plugins/xhtmlxtras/editor_plugin.js,
+ .../plugins/xhtmlxtras/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm,
+ .../tiny_mce/plugins/xhtmlxtras/js/abbr.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/acronym.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/attributes.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/cite.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js,
+ .../plugins/xhtmlxtras/js/element_common.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js,
+ .../tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/about.htm,
+ .../jscripts/tiny_mce/themes/advanced/anchor.htm,
+ .../jscripts/tiny_mce/themes/advanced/charmap.htm,
+ .../tiny_mce/themes/advanced/color_picker.htm,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/advanced/image.htm,
+ .../tiny_mce/themes/advanced/img/colorpicker.jpg,
+ .../tiny_mce/themes/advanced/img/icons.gif,
+ .../jscripts/tiny_mce/themes/advanced/js/about.js,
+ .../jscripts/tiny_mce/themes/advanced/js/anchor.js,
+ .../tiny_mce/themes/advanced/js/charmap.js,
+ .../tiny_mce/themes/advanced/js/color_picker.js,
+ .../jscripts/tiny_mce/themes/advanced/js/image.js,
+ .../jscripts/tiny_mce/themes/advanced/js/link.js,
+ .../tiny_mce/themes/advanced/js/source_editor.js,
+ .../jscripts/tiny_mce/themes/advanced/langs/en.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/link.htm,
+ .../themes/advanced/skins/default/content.css,
+ .../themes/advanced/skins/default/dialog.css,
+ .../themes/advanced/skins/default/img/buttons.png,
+ .../themes/advanced/skins/default/img/items.gif,
+ .../advanced/skins/default/img/menu_arrow.gif,
+ .../advanced/skins/default/img/menu_check.gif,
+ .../themes/advanced/skins/default/img/progress.gif,
+ .../themes/advanced/skins/default/img/tabs.gif,
+ .../tiny_mce/themes/advanced/skins/default/ui.css,
+ .../themes/advanced/skins/o2k7/content.css,
+ .../tiny_mce/themes/advanced/skins/o2k7/dialog.css,
+ .../themes/advanced/skins/o2k7/img/button_bg.png,
+ .../advanced/skins/o2k7/img/button_bg_black.png,
+ .../advanced/skins/o2k7/img/button_bg_silver.png,
+ .../tiny_mce/themes/advanced/skins/o2k7/ui.css,
+ .../themes/advanced/skins/o2k7/ui_black.css,
+ .../themes/advanced/skins/o2k7/ui_silver.css,
+ .../tiny_mce/themes/advanced/source_editor.htm,
+ .../tiny_mce/themes/simple/editor_template.js,
+ .../tiny_mce/themes/simple/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/simple/img/icons.gif,
+ .../jscripts/tiny_mce/themes/simple/langs/en.js,
+ .../themes/simple/skins/default/content.css,
+ .../tiny_mce/themes/simple/skins/default/ui.css,
+ .../tiny_mce/themes/simple/skins/o2k7/content.css,
+ .../themes/simple/skins/o2k7/img/button_bg.png,
+ .../tiny_mce/themes/simple/skins/o2k7/ui.css,
+ .../vendor/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_popup.js,
+ .../jscripts/tiny_mce/utils/editable_selects.js,
+ .../tinymce/jscripts/tiny_mce/utils/form_utils.js,
+ .../tinymce/jscripts/tiny_mce/utils/mctabs.js,
+ .../tinymce/jscripts/tiny_mce/utils/validate.js,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php: Upgraded TinyMCE to 3.3.6.
+
+2010-05-29 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/breadcrumbs.php: added a hint on breadcrumb usage
+
+ * views/default/page_elements/owner_block.php: removed some code made
+ unnecessary by the changes to layout in 1.8
+
+ * views/default/page_elements/elgg_sidebar.php: updated documentation on
+ optional parameters
+
+ * views/default/canvas/layouts/administration.php: updated administration
+ layout to work with new sidebar view
+
+2010-05-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/sidebar_menu.php,
+ views/default/page_elements/elgg_sidebar.php,
+ views/default/page_elements/owner_block.php: sidebar menu deserves its own
+ view
+
+2010-05-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php: Refs #2115: Added
+ elgg_is_valid_view_type(). Currently calculated at each load but will want to
+ cache like view paths. Cleaned up autoregister_views() and load_plugins()
+ code. Added spaces between function params in numerous places. C'mon
+ guys...spaces are free.
+
+2010-05-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/editdefaultprofileitems.php: Removed debug log to
+ console as it was preventing FF from executing the rest of the callback
+ function.
+
+2010-05-28 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php: when editing details, return to the details
+ tab when done.
+
+2010-05-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/appearance/menu_items.php,
+ views/default/canvas/layouts/administration.php: Updated interface for custom
+ menu items
+
+ * mod/profile/views/default/profile/css.php,
+ .../default/profile/editdefaultprofileitems.php: Updated interface for edit
+ profile fields
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/sidebar_menu.php: Updated archive list-style
+
+2010-05-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: Fixed mismatched <span></a> tags
+ in blog list status display.
+
+ * mod/blog/views/default/blog/sidebar_menu.php: Fixed typo in blog sidebar
+ menu that caused an extra LI item in archives.
+
+2010-05-27 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Registering user password request/reset as public
+ actions.
+
+2010-05-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: Fixing code for JS userpicker remove
+ function to cope with recent structure changes.
+
+2010-05-27 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cron.php, engine/lib/sites.php, mod/sitepages/start.php:
+ Updating walled garden to register public pages as regular expressions.
+
+2010-05-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php,
+ .../views/default/profile/profile_navigation.php: removed hard coded lang in
+ profile tabs
+
+2010-05-26 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/start.php, .../notifications/settings/usersettings.php:
+ Un-extending core notification view in favor of Notifications plugin.
+
+ * mod/sitepages/actions/add.php, mod/sitepages/actions/addfront.php,
+ mod/sitepages/actions/addfrontsimple.php, mod/sitepages/actions/addmeta.php,
+ mod/sitepages/actions/edit_settings.php,
+ mod/sitepages/sitepages_functions.php, mod/sitepages/start.php,
+ .../views/default/settings/sitepages/edit.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../views/default/sitepages/forms/editfront.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/menu.php: Updating Sitepages plugin
+ settings for new administration layout.
+
+2010-05-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php: Gatekeeper() added to blog edit/create pagehandler.
+
+ * engine/lib/entities.php: Fix problem rewriting type_subtype_pair ->
+ type_subtype_pairs in elgg_get_entities().
+
+2010-05-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/forums/addtopic.php: group discussion
+ access defaults to the group
+
+2010-05-26 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php, mod/groups/start.php: Ensuring Blogs and Forum links
+ display properly in the group ownerblock.
+
+2010-05-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/content_header.php: small tweak to header
+ contents
+
+ * mod/bookmarks/start.php: bookmark header bug fixed
+
+2010-05-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../page_elements/content_header_member.php: Updated content area title
+ when viewing a users objects
+
+ * .../views/default/profile/profile_ownerblock.php: Additional links to
+ tools added to profile pages ownerblock (hardcoded for phase1)
+
+2010-05-25 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/defaultwidgets/actions/update.php, mod/defaultwidgets/dashboard.php,
+ mod/defaultwidgets/profile.php, mod/defaultwidgets/start.php,
+ .../admin/appearance/default_dashboard_widgets.php,
+ .../admin/appearance/default_profile_widgets.php, mod/logbrowser/index.php,
+ mod/logbrowser/start.php, .../views/default/admin/overview/logbrowser.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/profile/defaultprofile.php, mod/profile/start.php,
+ .../default/admin/appearance/defaultprofile.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/index.php,
+ mod/reportedcontent/start.php,
+ .../default/admin/overview/reportedcontent.php: Updating administration
+ plugins with admin submenu views.
+
+2010-05-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/tabs.php: Navigation/tabs uses output/url for the
+ links.
+
+ * views/default/output/url.php: Added title to output/url. Fixed typo
+ breaking js support in output/url.
+
+ * CHANGES.txt: Added changes to CHANGES.txt.
+
+ * views/default/output/url.php: Fixed documentation for output/url view.
+
+ * views/default/output/url.php: Added title to url output.
+
+2010-05-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/start.php: change the bookmark header depending on whose
+ bookmarks are being viewed
+
+2010-05-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Updated documentation for register_plugin_hook().
+
+ * engine/lib/elgglib.php: Updated documentation and cleaned up code for
+ trigger_plugin_hook().
+
+2010-05-25 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/walled_garden_background_bottom.gif,
+ _graphics/walled_garden_background_extend.gif,
+ _graphics/walled_garden_background_top.gif, engine/lib/elgglib.php,
+ .../default/account/forms/login_walled_garden.php, views/default/css.php,
+ views/default/page_shells/walled_garden.php: Walled Garden login page is no
+ longer tied to the default page shell.
+
+2010-05-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: only display comment count if
+ there are comments
+
+ * mod/blog/blog_lib.php: check to see if comments are on or off
+
+ * mod/blog/views/default/blog/sidebar_revisions.php: blog revisions tweaked
+
+2010-05-25 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/defaultwidgets/dashboard.php, mod/defaultwidgets/profile.php,
+ mod/defaultwidgets/start.php, .../views/default/defaultwidgets/editor.php:
+ Updating Default Widgets administration to use new canvas layout.
+
+2010-05-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/css.php: Fix for blogs list view interface in
+ some browsers
+
+2010-05-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php: comment wall notification message tweaked
+
+2010-05-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_revisions.php: Updates to Blogs edit UI.
+
+2010-05-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../page_elements/content_header_member.php: content header added for use
+ when viewing another user
+
+ * mod/tagcloud/all.php, mod/tagcloud/tagcloud.php: added an all site
+ tagcloud view, tagcloud.php will be customised to run in the sidebar.
+
+2010-05-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php: UI update to avatar menu
+ list-style.
+
+2010-05-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../canvas/layouts/one_column_with_sidebar.php,
+ views/default/page_elements/elgg_sidebar.php: Refs #2114 - added elgg_sidebar
+ view
+
+2010-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/languages/en.php, mod/blog/views/default/object/blog.php: Added
+ blog author link by line on blog list.
+
+ * mod/blog/views/default/object/blog.php: Added access level in blog list.
+
+ * views/default/output/access.php: Added output/access view for displaying
+ entity access levels.
+
+2010-05-24 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/index.php, mod/logbrowser/start.php, mod/profile/start.php,
+ mod/reportedcontent/start.php, mod/sitepages/start.php: Updating multiple
+ plugins to no longer register admin menus with an event hook.
+
+2010-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/save.php, mod/blog/blog_lib.php,
+ mod/blog/views/default/object/blog.php: Blog uses elgg_make_excerpt() now
+ instead of its own.
+
+ * engine/lib/output.php: Replacing '...' with html elipse character (&#8230)
+ in elgg_make_excerpt().
+
+ * engine/lib/river.php: Copied explaination for weird str_replace() in
+ get_river_items() to the same call in elgg_get_river_items_new() so I stay
+ sane.
+
+ * mod/blog/actions/blog/save.php, mod/blog/blog_lib.php,
+ mod/blog/views/default/blog/forms/edit.php: Removing publish_date interface
+ for blogs pending better l10n for dates.
+
+ * mod/blog/start.php: Removing blogs from groups, part 2.
+
+ * mod/blog/start.php: Removing blog options from groups, part 1.
+
+2010-05-24 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php: Only notifying name change when it actually
+ changed.
+
+ * views/default/output/url.php: Ensuring text displays on URL view for both
+ "value" and "html" sent as property.
+
+2010-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php: Moved blog edit sidebar revisions to the top of the
+ sidebar.
+
+2010-05-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/object/blog/create.php,
+ .../default/river/object/bookmarks/create.php: you can no longer comment on
+ river item while logged out
+
+2010-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/forms/edit.php: Blog edit/create form displays
+ correct title.
+
+ * mod/blog/actions/blog/save.php: Blogs only show up in the river if in
+ published state.
+
+ * mod/riverdashboard/endpoint/ping.php: Added access controls to the
+ activity stream update count.
+
+ * mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/js.php: The activity stream's count uses the
+ river table instead of trying to combine entities + annotations based up on
+ time_created. Also brought small bits of code up to standards.
+
+2010-05-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php, views/default/css.php: UI
+ updates to users links and admin menu on profile pages
+
+2010-05-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/views/default/sitepages/menu.php: the correct tab now
+ highlights
+
+2010-05-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php: Saving a blog post no longer rewrites all entity
+ time_created and time_updated fields. Yikes.
+
+2010-05-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php, views/default/css.php:
+ Updated css for admin area/plugins and submenu list style
+
+ * mod/profile/views/default/profile/css.php, views/default/css.php: Added
+ missing formatting to user-generated content
+
+2010-05-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/start.php: messages now display the correct number unread
+
+2010-05-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Updated group forum link to only appear in group
+ ownerblock, and when group forum is enabled.
+
+ * mod/messages/views/default/messages/forms/send.php: Updated 'Send a
+ message to' form to display users display name rather than username.
+
+2010-05-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/invite.php: Small tweak to group
+ invite friends so it will show your friends correctly
+
+2010-05-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php: Group forum link added
+ to group ownerblock
+
+2010-05-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/index.php: sitepages river tweak
+
+ * mod/sitepages/index.php: sitepages now displays the correct river
+
+ * mod/riverdashboard/index.php,
+ .../views/default/settings/riverdashboard/edit.php: activity type toggle
+ removed as it was poorly thought out and implemented.
+
+ * mod/sitepages/actions/addfrontsimple.php, mod/sitepages/index.php,
+ mod/sitepages/languages/en.php, mod/sitepages/sitepages_functions.php,
+ mod/sitepages/start.php, .../views/default/canvas/layouts/frontpage.php,
+ mod/sitepages/views/default/sitepages/css.php,
+ .../default/sitepages/forms/editfrontsimple.php,
+ mod/sitepages/views/default/sitepages/members.php,
+ mod/sitepages/views/default/sitepages/sidebar.php,
+ mod/sitepages/views/default/sitepages/welcome.php: a simple version of the
+ sitepages index - we will need to turn this into a basic and advance
+ selection for admins.
+
+2010-05-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ views/default/page_elements/owner_block.php: Ownerblock links to users
+ objects interface updated.
+
+ * mod/groups/start.php: Group link to forum removed from sidebar submenu
+
+ * mod/blog/start.php, mod/bookmarks/start.php: Group blog and bookmarks
+ submenu removed from sidebar (links are now in the group ownerblock)
+
+2010-05-23 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/page_shells/default.php, views/foaf/pageshells/pageshell.php,
+ views/php/page_shells/default.php, views/php/pageshells/pageshell.php,
+ views/xml/page_shells/default.php, views/xml/pageshells/pageshell.php: fixed
+ page shells for xml, php, and foaf
+
+2010-05-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php,
+ .../views/default/reportedcontent/footer_link.php: added title attribute to
+ report this footer link
+
+ * mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/footer_link.php,
+ views/default/page_elements/elgg_footer.php: removing reported content
+ dependency from core code...again
+
+ * views/default/page_elements/elgg_footer.php: Fixes #2122 - footer
+ analytics view added
+
+2010-05-21 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: Using a lambda function to
+ sort the profile menu.
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ views/default/page_elements/owner_block.php: Registering new plugin hooks to
+ extend the owner block profile menu.
+
+ * views/default/page_elements/owner_block.php: Fixing a typo. Works this
+ time; no, really.
+
+ * mod/pages/start.php, mod/pages/views/default/pages/profile_extend.php:
+ Updating Pages plugin to extend profile owner block directly with
+ user-specific links.
+
+ * views/default/page_elements/owner_block.php: Cleaning up profile owner
+ blocks to allow for view extensions.
+
+2010-05-20 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/pages/start.php: Adding submenu items for standard plugins to owner
+ block.
+
+2010-05-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/entity_getter_functions.php: Fixes #2159: Updated entity
+ getter test to order by guid instead of time_created.
+
+ * engine/tests/objects/entities.php, engine/tests/objects/objects.php,
+ engine/tests/objects/sites.php, engine/tests/objects/users.php: Update unit
+ tests for last_action column.
+
+ * engine/lib/entities.php, engine/lib/river.php: create_entity() now adds a
+ default last_action set to the same as time_created. This solves a problem of
+ having to specify an order by of last_action desc, time_created desc on each
+ call. Standardized update_entity_last_action() and moved it from river.php to
+ entities.php.
+
+ * engine/lib/river.php: Properly merged old 1.8 river2.php with river.php to
+ fix last_action-based bubble ups.
+
+2010-05-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/content_header.php: small edit to header
+ contents, will need to find a better way to extend this view in the required
+ fashion.
+
+ * mod/bookmarks/start.php: small bookmark add bug fixed.
+
+2010-05-20 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/annotation/default.php, views/rss/object/creator.php,
+ views/rss/object/default.php, views/rss/object/georss.php: Updating RSS views
+ to allow for object creator and geolocation.
+
+2010-05-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/forgotten_password.php, account/register.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php: Updated Register and ForgottenLogin
+ forms to use default canvases.
+
+ * views/default/canvas/layouts/administration.php: Added a link to 'return
+ to network' from admin area.
+
+2010-05-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, languages/en.php,
+ views/default/admin/users/newest.php: Added "Newest Users" admin section.
+
+ * mod/groups/all.php, mod/groups/discussions.php, mod/groups/forum.php,
+ mod/groups/views/default/forum/topics.php: Removed legacy calls from groups.
+
+ * engine/lib/annotations.php: Refs #2165: Added
+ elgg_list_entities_from_annotations() to deprecate
+ list_entities_from_annotations().
+
+ * mod/groups/forum.php: Missed passing group_guid to forum topics.
+
+ * mod/groups/views/default/forum/topics.php: Fixed incorrect call for $vars
+ in group forum topics.
+
+ * mod/riverdashboard/manifest.xml: Riverdashboard enabled on default
+ installs.
+
+ * mod/custom_index/index.php, mod/custom_index/languages/en.php,
+ mod/custom_index/manifest.xml, mod/custom_index/start.php,
+ .../views/default/canvas/layouts/new_index.php,
+ .../views/default/custom_index/css.php: Custom index is deprecated by Site
+ pages. These two provide the same functionality but in different ways, so
+ just moving Custom Index to the plugins repo.
+
+ * mod/externalpages/actions/add.php, mod/externalpages/index.php,
+ mod/externalpages/languages/en.php, mod/externalpages/manifest.xml,
+ mod/externalpages/read.php, mod/externalpages/start.php,
+ .../views/default/expages/analytics.php,
+ mod/externalpages/views/default/expages/css.php,
+ .../views/default/expages/footer_menu.php,
+ .../views/default/expages/forms/edit.php,
+ mod/externalpages/views/default/expages/menu.php,
+ mod/externalpages/views/default/object/expages.php: The Externalpages plugin
+ is now Site Pages. Removing old plugin.
+
+2010-05-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/jquery/jquery-1.4.2.min.js, vendors/jquery/jquery-1.4.min.js,
+ views/default/page_elements/html_begin.php: jQuery updated to v1.4.2
+
+ * mod/groups/views/default/groups/css.php: Small UI update to Group activity
+ widget.
+
+ * views/default/annotation/annotatelike.php: Likes river entry timestamp
+ wrapped in span.
+
+2010-05-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Moved output.php into the pre-installation required lib
+ list to fix trunk installation.
+
+2010-05-18 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/graphics/background_bottom.gif,
+ mod/walledgarden/graphics/background_extend.gif,
+ mod/walledgarden/graphics/background_top.gif, mod/walledgarden/index.php,
+ mod/walledgarden/languages/en.php, mod/walledgarden/manifest.xml,
+ mod/walledgarden/readme.txt, mod/walledgarden/start.php,
+ .../views/default/account/forms/login.php,
+ .../default/page_shells/walled_garden_index.php,
+ .../views/default/walledgarden/css.php,
+ .../views/default/walledgarden/walledgarden.php: Removing Walled Garden
+ plugin from trunk.
+
+ * engine/lib/elgglib.php, engine/lib/sites.php: Ensuring the Walled Garden
+ hook properly exits before plugins can continue to extend view.
+
+ * views/json/canvas/default.php, views/json/page_shells/default.php,
+ views/json/pageshells/pageshell.php: Updating the core JSON views to allow
+ for proper object export.
+
+2010-05-18 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/members/index.php: browse members now working for 1.8
+
+ * languages/en.php, views/default/account/forms/login.php,
+ views/default/account/forms/login_dropdown.php: as you can login with either
+ username or email, reflect this in the lang.
+
+2010-05-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/components/plugin_settings.php,
+ views/default/canvas/layouts/administration.php: Interface updates to plugins
+ settings form.
+
+2010-05-18 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: small lang changes
+
+2010-05-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php: Admin area long-text
+ fields width updated.
+
+2010-05-17 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/river/item/list.php: Defaulting RSS view to use Elgg Entity
+ view.
+
+ * views/rss/object/default.php, views/rss/page_shells/default.php,
+ views/rss/pageshells/pageshell.php, views/rss/river/item/list.php: Updating
+ RSS feeds to use proper views called with page_shells.
+
+2010-05-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/css.php: Another UI update to individual blog
+ page.
+
+ * mod/blog/views/default/blog/css.php,
+ mod/profile/views/default/profile/css.php: ..a couple more ui tweaks.
+
+ * mod/messages/views/default/messages/forms/view.php,
+ mod/profile/graphics/speech_bubble_tail.gif,
+ mod/profile/graphics/twitter16px.png,
+ views/default/canvas/layouts/administration.php: A few UI updates.
+
+2010-05-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/css.php, views/default/css.php: Updates
+ to core css UI and riverdashboard mod.
+
+2010-05-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Fixed loading of activity and database files.
+
+ * engine/lib/actions.php, engine/lib/activity.php, engine/lib/api.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/input.php,
+ engine/lib/output.php, engine/lib/pagehandler.php, engine/lib/river.php,
+ engine/lib/river2.php, engine/lib/sessions.php, engine/start.php,
+ htaccess_dist, languages/en.php, mod/groups/invitations.php,
+ mod/groups/new.php, mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ .../views/default/river/object/page/create.php, mod/profile/actions/edit.php:
+ Merged 5928-6908 from 1.7 branch to trunk.
+
+ * actions/widgets/save.php, engine/lib/access.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/notification.php, engine/lib/river2.php,
+ engine/lib/sessions.php, engine/lib/system_log.php, engine/lib/tags.php,
+ engine/lib/users.php, mod/groups/forum.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/index.php,
+ mod/invitefriends/languages/en.php, mod/invitefriends/start.php,
+ .../views/default/invitefriends/form.php,
+ .../views/default/invitefriends/formitems.php, mod/profile/icon.php,
+ views/default/friends/river/create.php, views/rss/entities/entity_list.php:
+ merge -r5898:5928 (not excluding riverdashboard, notifications, and
+ messageboard) from 1.7 to trunk.
+
+2010-05-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php: Updated admin area css
+
+2010-05-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/actions.php, engine/lib/api.php,
+ engine/lib/elgglib.php, engine/lib/notification.php, engine/lib/river2.php,
+ mod/invitefriends/actions/invite.php, services/api/rest_api.php: merge
+ -r5832:5898 from 1.7 to trunk.
+
+ * views/foaf/pageshells/pageshell.php, views/foaf/user/default.php: merge
+ -r5822:5825 from 1.7 to trunk.
+
+ * engine/lib/xml.php, mod/file/actions/upload.php,
+ mod/groups/actions/forums/deletepost.php: Merge r5761:5788 from 1.7 to trunk.
+
+
+2010-05-14 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php: Moving login/extend view to call
+ after the login button (consistent with login dropdown).
+
+ * engine/lib/sites.php, languages/en.php: Updating language files for new
+ Walled Garden support.
+
+ * _css/css.php, _css/js.php, engine/handlers/action_handler.php,
+ engine/handlers/cron_handler.php, engine/handlers/pagehandler.php,
+ engine/handlers/service_handler.php, engine/handlers/xml-rpc_handler.php,
+ engine/lib/cron.php, engine/lib/sites.php, index.php,
+ mod/externalpages/read.php, upgrade.php: Updating core code to allow public
+ pages using new Walled Garden functionality.
+
+2010-05-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/sidebar_menu.php, mod/tagcloud/tagcloud.php,
+ mod/tagcloud/views/default/tagcloud/css.php, views/default/css.php,
+ views/default/output/tagcloud.php: Updated core tagcloud view markup/css.
+
+2010-05-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/views/default/output/tagcloud.php: Removing tagcloud output
+ view from tagcloud mod--it's in core now.
+
+2010-05-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/administration.php, views/default/css.php:
+ Update to submenu items css.
+
+ * mod/profile/defaultprofile.php, mod/reportedcontent/index.php,
+ mod/sitepages/sitepages_functions.php: Updated plugins to use new admin area
+ canvas.
+
+2010-05-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: To detect if a submenu item is selected, using
+ output from full_url() instead of $_SERVER['REQUEST_URI'] because the host
+ isn't set in REQUEST_URI.
+
+2010-05-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, views/default/canvas/layouts/administration.php,
+ views/default/css.php: Beginnings of a stand-alone admin area.
+
+ * mod/profile/views/default/profile/icon.php: Fix for @mentions mod creating
+ multiple hrefs in avatar submenu.
+
+ * views/default/admin/overview.php, views/default/admin/site/advanced.php,
+ views/default/admin/site/basic.php, views/default/admin/users/add.php,
+ views/default/admin/users/find.php, views/default/admin/users/online.php:
+ Added content titles to admin area pages.
+
+2010-05-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php: removed extra div from riverdashboard index
+ page
+
+ * mod/riverdashboard/start.php, .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php: merged [5959] from 1.7 branch into
+ trunk for riverdashboard plugin
+
+ * mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/ecml/activity.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/default/settings/riverdashboard/edit.php: attempting to standardize
+ riverdashboard plugin in similar manner as 1.7 branch revision [5943]
+
+ * mod/notifications/actions/groupsave.php,
+ mod/notifications/actions/save.php, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/notifications/languages/en.php,
+ mod/notifications/start.php, .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/jsfuncs.php,
+ .../notifications/subscriptions/personal.php: merged in notifications plugin
+ cleanup from 1.7 branch: [5962], [5978] - [5980], [6000]
+
+2010-05-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messageboard/actions/add.php, mod/messageboard/actions/delete.php,
+ mod/messageboard/ajax_endpoint/load.php, mod/messageboard/history.php,
+ mod/messageboard/index.php, mod/messageboard/languages/en.php,
+ mod/messageboard/readme.txt, mod/messageboard/start.php,
+ .../views/default/messageboard/css.php,
+ .../views/default/messageboard/forms/add.php,
+ .../default/messageboard/group_messageboard.php,
+ .../views/default/messageboard/messageboard.php,
+ .../default/messageboard/messageboard_content.php,
+ .../default/river/object/messageboard/create.php,
+ .../views/default/widgets/messageboard/edit.php,
+ .../views/default/widgets/messageboard/view.php: merging messageboard cleanup
+ from 1.7 branch [5908],[5909],[5917]
+
+2010-05-12 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/register.php, engine/lib/elgglib.php, engine/lib/sites.php,
+ mod/sitepages/start.php: Creating a hook for plugin authors to register
+ Walled Garden public sites.
+
+2010-05-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/languages/en.php: removed a duplicate lang string
+
+ * .../views/default/bookmarks/group_bookmarks.php: fix so group bookmarks
+ display on group frontpage
+
+2010-05-11 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_advanced.php,
+ actions/systemsettings/install.php, engine/lib/elgglib.php,
+ engine/lib/sites.php, engine/lib/upgrades/2010050701.php,
+ views/default/admin/site/advanced.php: Do not display site pages when in
+ Walled Garden mode, excepting system-defined whitelist.
+
+ * account/register.php: Not allowing new user registration to continue
+ action when disabled.
+
+2010-05-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Fixed a typo.
+
+ * engine/lib/admin.php, engine/lib/elgglib.php,
+ views/default/navigation/submenu_item.php: Fix admin area for overview and
+ appearance.
+
+2010-05-10 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/elgg_topbar_logout.php: Breaking logout link into
+ a separate view.
+
+2010-05-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/tests/ui/submenu.php,
+ .../default/admin/components/admin_page_layout.php,
+ views/default/admin/components/sidemenu.php,
+ views/default/navigation/submenu_item.php, views/default/output/url.php,
+ views/default/page_elements/owner_block.php: Admin area now uses standard
+ submenu tools.
+
+2010-05-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/basic_elements/welcome.php, views/default/welcome.php,
+ views/default/welcome/logged_in.php, views/default/welcome/logged_out.php:
+ removing more views that haven't been used/touched in almost 2 years
+
+ * views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php: removing some chuff that's been just sitting
+ there for a long time - these views ended up in the external pages/site pages
+ plugins
+
+2010-05-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Not setting $item->selected on a submenu item acts
+ the same as setting it to NULL for selected state guessing. Removed unused
+ code in submenu system.
+
+ * engine/lib/elgglib.php, engine/tests/ui/submenu.php,
+ views/default/canvas_header/submenu_group.php,
+ views/default/canvas_header/submenu_template.php, views/default/css.php,
+ views/default/navigation/submenu_group.php,
+ views/default/navigation/submenu_item.php,
+ views/default/navigation/submenu_js.php: Added new submenu system. Added
+ elgg_http_url_is_identical(). Moved canvas_header/submenu* to
+ navigation/submenu*. Added UI test for submenu.
+
+2010-05-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_advanced.php, actions/register.php,
+ actions/systemsettings/install.php, engine/lib/upgrades/2010050701.php,
+ version.php, views/default/account/forms/login.php,
+ views/default/account/forms/login_dropdown.php,
+ views/default/admin/site/advanced.php: Adding an option to restrict new user
+ registration in advanced site settings. This is the first step in fully
+ merging "Walled Garden" plugin into core Elgg engine.
+
+2010-05-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php,
+ actions/admin/plugins/simple_update_states.php,
+ actions/admin/site/update_advanced.php, actions/admin/site/update_basic.php,
+ actions/login.php, actions/plugins/settings/save.php, actions/register.php,
+ actions/systemsettings/install.php, admin/index.php, admin/menu_items.php,
+ admin/plugins.php, admin/site.php, admin/statistics.php, admin/user.php,
+ engine/lib/actions.php, engine/lib/admin.php, engine/lib/plugins.php,
+ engine/lib/sessions.php, languages/en.php, mod/blog/manifest.xml,
+ mod/blog/views/default/blog/forms/edit.php, mod/bookmarks/manifest.xml,
+ mod/captcha/manifest.xml, mod/categories/actions/save.php,
+ mod/categories/languages/en.php, mod/categories/manifest.xml,
+ mod/categories/settings.php, mod/categories/start.php,
+ mod/categories/views/default/categories/css.php,
+ .../views/default/categories/settings.php,
+ .../views/default/categories/settingsform.php,
+ .../views/default/settings/categories/edit.php, mod/crontrigger/manifest.xml,
+ mod/custom_index/manifest.xml, mod/defaultwidgets/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/ecml/manifest.xml, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/admin/ecml_admin.php,
+ mod/ecml/views/default/settings/ecml/edit.php, mod/embed/manifest.xml,
+ mod/externalpages/manifest.xml, mod/file/manifest.xml,
+ mod/friends/manifest.xml, mod/garbagecollector/manifest.xml,
+ mod/groups/manifest.xml, mod/htmlawed/manifest.xml,
+ mod/invitefriends/manifest.xml, mod/logbrowser/manifest.xml,
+ mod/logrotate/manifest.xml, mod/members/manifest.xml,
+ mod/messageboard/manifest.xml, mod/messages/manifest.xml,
+ mod/notifications/manifest.xml, mod/pages/manifest.xml,
+ mod/profile/manifest.xml, mod/reportedcontent/manifest.xml,
+ mod/riverdashboard/manifest.xml, mod/search/manifest.xml,
+ mod/sitepages/manifest.xml, mod/tagcloud/manifest.xml,
+ mod/thewire/manifest.xml, mod/tinymce/manifest.xml, mod/twitter/manifest.xml,
+ mod/uservalidationbyemail/manifest.xml, mod/walledgarden/manifest.xml,
+ mod/zaudio/manifest.xml, views/default/admin/appearance/menu_items.php,
+ .../default/admin/components/admin_page_layout.php,
+ views/default/admin/components/plugin.php,
+ views/default/admin/components/plugin_settings.php,
+ views/default/admin/components/sidemenu.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/menu_items.php,
+ views/default/admin/overview.php,
+ views/default/admin/overview/numentities.php,
+ views/default/admin/overview/online.php, views/default/admin/plugins.php,
+ views/default/admin/plugins/advanced.php,
+ views/default/admin/plugins/simple.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/site/advanced.php, views/default/admin/site/basic.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/search.php, views/default/admin/users/add.php,
+ views/default/admin/users/find.php, views/default/admin/users/online.php,
+ views/default/css.php, views/default/object/admin_notice.php: Merged
+ 18_new_admin branch to trunk.
+
+2010-05-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/usersettings/form.php: Added ID to submit button on user
+ settings form.
+
+ * views/default/canvas_header/submenu_group.php: Updated submenu with
+ missing groupname.
+
+ * mod/profile/views/default/profile/editicon.php: Addition of a wrapper on
+ edit avatar page for theming purposes.
+
+2010-05-04 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: Returning extended view to
+ original location in code (to preserve CSS rendering).
+
+2010-05-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php: Updated avatar sub-menu font
+ sizes.
+
+2010-05-04 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php, .../views/default/profile/topbar_extend.php:
+ Extending topbar view to include My Friends link.
+
+ * views/default/page_elements/elgg_topbar.php: Removing hard-coded plugin
+ extensions from core topbar.
+
+2010-05-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/views/default/bookmarks/form.php: Added id to bookmark edit
+ form (for use theming).
+
+ * .../default/profile/commentwall/commentwall.php: Minor update to the
+ comment wall wrapper div.
+
+2010-05-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: Fixes #1480 - not passing empty array element
+ from page_handler()
+
+2010-04-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/groupsform.php,
+ views/default/usersettings/plugins.php: Minor updates to User Settings
+ interface.
+
+ * mod/search/views/default/search/entity.php: Search results float cleared.
+
+2010-04-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/activity.php,
+ .../views/default/riverdashboard/css.php: Updated activity stream on users
+ Profile to include riverdashboard js. Added extra css rules for inline
+ comments and likes on profile activity.
+
+ * mod/profile/views/default/profile/edit.php, views/default/css_ie.php,
+ views/default/js/initialise_elgg.php: Updates to Profile edit, likes js, and
+ tools css for IE7 rendering.
+
+2010-04-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/tabs.php: Added navigation/tabs view for tabbed
+ navigation.
+
+2010-04-27 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/start.php: Restricting external user creation from
+ Facebook Services.
+
+2010-04-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: if the activity stream is enabled show on the frontpage, if
+ not, list entities.
+
+2010-04-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/css_ie.php: More fixes for IE
+ rendering (entity listings, private messages, topbar, profile, activity)
+
+2010-04-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/languages/en.php, mod/sitepages/start.php: Updated language
+ strings for site page ecml
+
+ * mod/ecml/languages/en.php, mod/ecml/start.php: Removed view and entity
+ ECML. Updated language strings.
+
+ * mod/sitepages/start.php, .../views/default/sitepages/forms/editfront.php:
+ Only admin users can view site pages. Corrected ECML default for site pages.
+ Moved view and entity ECML keywords to sitepages and restricted them.
+
+ * engine/lib/users.php, mod/blog/manifest.xml, mod/riverdashboard/index.php,
+ mod/riverdashboard/manifest.xml, mod/riverdashboard/start.php,
+ .../views/default/river/item/list.php,
+ views/default/account/forms/login_dropdown.php: Graceful degrading for non-JS
+ users on the dropdown login box.
+
+ * mod/ecml/views/default/ecml/admin/ecml_admin.php: Fixed admin area
+ language string.
+
+ * .../views/default/river/object/blog/create.php: Fixes #2098: River view
+ for blog pulls correct time.
+
+ * engine/lib/plugins.php: Plugins are *required* to have a manifest.xml
+ file.
+
+2010-04-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/item/wrapper.php, views/default/css_ie.php:
+ Updates to riverdashboard wrapper for IE rendering. Temporary IE rules for
+ riverdashboard added to css_ie.php.
+
+2010-04-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php, mod/groups/index.php, mod/groups/membership.php:
+ Updated calls to content_header to point to correct new link in groups.
+
+ * mod/bookmarks/add.php, mod/bookmarks/all.php, mod/bookmarks/friends.php,
+ mod/bookmarks/index.php, mod/bookmarks/start.php: Bookmarks work with groups
+ and use new style content header filter.
+
+2010-04-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login_dropdown.php, views/default/css.php:
+ Updates to homepage layout and drop-down login for IE.
+
+ * mod/groups/views/default/forms/groups/edit.php: Update to edit Groups page
+ for ECML and longtext controls positioning.
+
+ * .../views/default/sitepages/forms/editfront.php: Updated SitePages with
+ example homepage markup/ECML.
+
+ * .../views/default/sitepages/forms/editfront.php, views/default/css.php:
+ Update to SitePages and CSSEditor code input fields, code input (monospaced
+ style) added to base css file.
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/icon.php: Update to site user avatars to
+ use CSS3 rounding for modern browsers. Older browsers will display as square
+ avatars.
+
+2010-04-26 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Fixes #2084 - layout issue with front page
+
+2010-04-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/account/forms/login.php,
+ .../default/page_shells/walled_garden_index.php,
+ .../views/default/walledgarden/css.php: Updated WalledGarden login page for
+ correct rendering in IE.
+
+ * languages/en.php, .../views/default/account/forms/login.php,
+ .../default/page_shells/walled_garden_index.php: Updates to WalledGarden
+ login. Lost password text simplified/shortened, text spacing adjusted, rule
+ added to prevent custom css page background from showing on walledgarden
+ login page.
+
+2010-04-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/graphics/background_bottom.gif,
+ mod/walledgarden/graphics/background_extend.gif,
+ mod/walledgarden/graphics/background_top.gif,
+ .../views/default/account/forms/login.php,
+ .../default/page_shells/walled_garden_index.php,
+ .../views/default/walledgarden/css.php: Updated walledgarden login.
+
+ * mod/groups/views/default/forms/forums/addtopic.php: Completed breadcrumb
+ for addtopic (missed in 5855)
+
+ * mod/ecml/start.php, mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/input_ext.php, mod/embed/languages/en.php,
+ mod/embed/start.php, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/link.php,
+ .../views/default/expages/forms/edit.php,
+ mod/externalpages/views/default/expages/menu.php,
+ mod/file/views/default/file/upload.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/messages.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../views/default/reportedcontent/form.php, mod/tinymce/languages/en.php,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ views/default/comments/forms/edit.php, views/default/css.php,
+ views/default/upload/upload_form_content.php: Updated longtext/tinymce area
+ extra controls. Moved and updated ecml help link, 'edit/remove editor' link
+ and 'add media' links both moved and improved. Redundant css removed.
+
+2010-04-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/index.php, .../views/default/account/forms/login.php,
+ .../default/account/forms/login_walledgarden.php: small walled garden tweak
+
+ * mod/sitepages/start.php: frontpage creation respects walledgarden
+
+ * .../default/account/forms/login_walledgarden.php: included a view for
+ plugins to extend
+
+ * mod/walledgarden/index.php, mod/walledgarden/start.php,
+ .../default/account/forms/login_walledgarden.php,
+ .../default/page_shells/walled_garden_index.php: The start of a new walled
+ garden index page
+
+2010-04-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/forum.php, mod/groups/views/default/forum/viewposts.php:
+ Completed breadcrumbs for Groups Forums.
+
+2010-04-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/all.php, mod/bookmarks/index.php: Updated booksmarks to 1.7
+ API.
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/sharing/invite.php,
+ .../views/default/widgets/a_users_groups/view.php: Updated groups to 1.7 api.
+
+
+2010-04-22 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/object/groupforumtopic.php: group forum discussion view
+ updated to match the community
+
+ * .../views/default/object/groupforumtopic.php: a small tweak so latest
+ discussion shows the last user to comment.
+
+2010-04-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Cleaned up some comments about group acl hooks.
+
+ * mod/blog/views/default/blog/sidebar_revisions.php: Cleaned up code to show
+ revisions. Added ability to go to published revision.
+
+ * mod/blog/views/default/blog/forms/edit.php: Decoding html entities for
+ blog excerpts in edit form.
+
+ * mod/blog/blog_lib.php, mod/blog/views/default/object/blog.php: Blog
+ excerpts now work for MB strings and properly detect word breaks.
+
+ * mod/blog/blog_lib.php: Removing unneeded order by metadata.
+
+ * mod/blog/blog_lib.php: Rewriting time_created and time_updated instead of
+ trying to be tricky with metadata.
+
+2010-04-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/profile/profile_ownerblock.php: profile owner block can
+ now be viewed while logged out.
+
+ * mod/groups/start.php: a simple function which can be used to restrict
+ group access options
+
+ * .../default/river/object/bookmarks/create.php: bookmark activity view
+ altered to work with both the classic and new versions of activity.
+
+ * .../views/default/river/object/blog/create.php: remove likes and comments
+ from blog activity view if in classic mode
+
+ * engine/lib/river2.php, .../default/profile/profile_contents/activity.php,
+ mod/riverdashboard/index.php, mod/riverdashboard/languages/en.php,
+ .../views/default/river/item/wrapper_classic.php,
+ .../views/default/settings/riverdashboard/edit.php: let site admins toggle
+ between a classic activity stream or the new clustered version
+
+2010-04-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: cleaning up [5822] - putting elgg_format_url() in
+ the same location in elgglib.php
+
+2010-04-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/start.php,
+ .../views/default/settings/riverdashboard/edit.php: Removed toggle for
+ overriding river dashboard. If the plugin is enabled, the dashboard is
+ enabled.
+
+ * engine/lib/elgglib.php: Merge previous to trunk.
+
+2010-04-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_sprites.png, index.php,
+ views/default/account/forms/login_dropdown.php, views/default/css.php,
+ views/default/page_elements/elgg_header.php: Added the beginnings of a
+ drop-down login box for Elgg as an alternative to the front-page login box in
+ the homepage sidebar.
+
+2010-04-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/languages/en.php: Fixed missing language string in admin
+
+ * mod/ecml/views/default/ecml/admin/ecml_admin.php: Added smarter check all
+ checkboxes for ECML admin area.
+
+ * mod/search/index.php, mod/search/search_hooks.php: Merged previous to
+ trunk.
+
+2010-04-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/river/object/bookmarks/create.php: #2087 fixed
+
+2010-04-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Updated docs for types and subtypes in
+ elgg_get_entities().
+
+2010-04-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: pass the entity so other plugins
+ can extend properly
+
+ * mod/ecml/start.php: correct layout applied to ecml help page
+
+ * mod/sitepages/actions/addfront.php: missing ] added to the frontpage
+ action file
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Merged type_subtype_pair fix from 1.7 branch.
+
+2010-04-16 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/start.php: Removed attempt to hook into system index page
+ from Walled Garden. This is unnecessary at best, and conflicts entirely when
+ custom login Site Pages are used.
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Fixing a logged out problem with group access.
+
+2010-04-16 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/languages/en.php, mod/walledgarden/start.php: Registering
+ a Walled Garden hook which will not allow new user signup with Twitter
+ Services.
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Only showing group access levels within group
+ contexts. Not showing unrelated access levels within group contexts.
+
+2010-04-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/bookmarks/group_bookmarks.php,
+ mod/file/views/default/file/css.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/widgets/filerepo/view.php: Removed js drop-down
+ description on group profile tools widgets.
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/actions/save_permissions.php, mod/ecml/languages/en.php,
+ mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/admin/ecml_admin.php: ECML permissions frontend
+ presents a whitelist instead of a black list.
+
+2010-04-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_sprites.png, engine/lib/users.php, views/default/css.php,
+ views/default/page_elements/elgg_topbar.php: Friends link removed from
+ primary nav and added to top toolbar.
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/ecml/activity.php: Fixed activity stream
+ ecml view.
+
+ * mod/sitepages/languages/en.php, mod/sitepages/start.php: Removed some left
+ over code from decoupling ECML. Fixed help files for [[ -> [ transition.
+
+ * mod/ecml/README.txt, mod/ecml/languages/en.php, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/help.php: ECML now only requires a single square
+ bracket.
+
+ * mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/ecml/activity.php: Added activity ecml
+ keyword.
+
+ * mod/sitepages/actions/addfront.php: Correctly checking for logoutbox for
+ custom front pages.
+
+ * mod/thewire/actions/add.php: Fix the name of the input in the wire's add
+ action.
+
+2010-04-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/blog/views/default/blog/sidebar_menu.php: Tagcloud
+ localized and updated on blogs.
+
+ * views/default/css.php: Tweaked 'Likes' icon css.
+
+ * views/default/css.php: Updated tools menu spacing and added selected class
+ rule for tools submenu items.
+
+ * _graphics/indicator.gif: Removed unused indicator gif. Spinners across the
+ site have been updated to use elgg's ajax_loader gif, except Shared Access
+ mod which still uses indicator gif - which is now in the shared access plugin
+ bundle.
+
+2010-04-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/indicator.gif, engine/lib/elgglib.php,
+ mod/categories/actions/save.php, mod/categories/languages/en.php,
+ mod/categories/listing.php, mod/categories/settings.php,
+ mod/categories/start.php, mod/categories/views/default/categories.php,
+ mod/categories/views/default/categories/list.php,
+ .../views/default/categories/settings.php,
+ mod/categories/views/default/categories/view.php,
+ mod/profile/actions/cropicon.php, mod/profile/icondirect.php,
+ mod/profile/start.php, mod/search/search_hooks.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity.php,
+ mod/thewire/views/rss/object/thewire.php: Merged [5623]:head from 1.7 to
+ trunk.
+
+ * mod/ecml/start.php, mod/ecml/views/default/ecml/keywords/blip.tv.php,
+ .../views/default/ecml/keywords/dailymotion.php,
+ mod/ecml/views/default/ecml/keywords/livevideo.php,
+ mod/ecml/views/default/ecml/keywords/redlasso.php: Added more video sources.
+ Allowing the . character in keywords.
+
+2010-04-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/views/default/ecml/admin/ecml_admin.php: Added ability to check
+ all rows or columns in ecml permissions page.
+
+ * mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/admin/ecml_admin.php: Inverted the admin matrix
+ for ecml views / keywords.
+
+ * mod/sitepages/languages/en.php, mod/sitepages/start.php,
+ .../default/sitepages/keywords/site_stats.php,
+ .../views/default/sitepages/keywords/sitestats.php,
+ .../views/default/sitepages/keywords/user_list.php,
+ .../views/default/sitepages/keywords/userlist.php: Added usage to the
+ keywords. Restricting keywords to userlist, loginbox, and sitestats to custom
+ front page.
+
+ * mod/ecml/start.php: Correctly setting context to admin to pull in the
+ admin sidebar for ECML permissions page.
+
+ * mod/ecml/README.txt: Updated docs with a FAQ.
+
+2010-04-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/groups/activity_latest.php: Activity view added for
+ Groups profile page, based on code by Jon Maul.
+
+2010-04-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: Jon Maul added as a contributor with MITRE.
+
+ * mod/blog/blog_lib.php, mod/blog/views/default/object/blog.php: Separated
+ blog object view from comments.
+
+ * mod/ecml/ecml_functions.php,
+ mod/ecml/views/default/ecml/admin/ecml_admin.php: Added ability for ECML
+ keyword definitions to restrict themselves to specific views.
+
+2010-04-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/start.php, mod/ecml/views/default/ecml/admin/ecml_admin.php:
+ Small UI updates to ECML.
+
+ * mod/search/views/default/search/entity.php, views/default/css.php: Update
+ to search results view, and small entity list style updates.
+
+2010-04-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/README.txt, mod/ecml/actions/save_permissions.php,
+ mod/ecml/ecml_functions.php, mod/ecml/languages/en.php, mod/ecml/start.php,
+ mod/ecml/views/default/ecml/admin/css.php,
+ mod/ecml/views/default/ecml/admin/ecml_admin.php,
+ .../views/default/ecml/keywords/googlemaps.php: Added granular access for
+ views in ECML. Added 'usage' on keyword info. Updated docs.
+
+ * mod/ecml/start.php, .../views/default/ecml/keywords/googlemaps.php:
+ Googlemaps support added for ECML.
+
+ * mod/ecml/views/default/ecml/help.php: ECML keyword help page now properly
+ lists all registered keywords.
+
+ * mod/sitepages/start.php: Removed _ from Site Pages ECML keywords.
+
+ * mod/ecml/README.txt, mod/ecml/ecml_functions.php, mod/ecml/manifest.xml,
+ mod/ecml/start.php: Updated ECML docs. Removed the _ as a valid keyword
+ character (it looks funny). Added the media sites in start.php. Fixed bug
+ that prevented [[view]] from working. Consequently, [[view]] now requires a
+ src="" attribute.
+
+2010-04-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/start.php, mod/ecml/views/default/ecml/keywords/vimeo.php: Added
+ vimeo support to ECML.
+
+ * mod/ecml/ecml_functions.php, mod/ecml/start.php,
+ .../views/default/ecml/keywords/slideshare.php,
+ mod/ecml/views/default/ecml/keywords/youtube.php: Changed tokenizer for ECML
+ to support attribute quotes. Added core youtube and slideshare keywords.
+ Passing the full keyword and attribute string to views.
+
+ * mod/blog/start.php: Added ECML support in blogs.
+
+2010-04-13 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Creating a function to clear user-specific plugin
+ settings.
+
+2010-04-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/ecml/start.php: Remove unneeded check in ecml view hook.
+
+ * mod/ecml/start.php: ECML uses the brand new granular view hooks.
+
+ * mod/blog/languages/en.php: Added item:object:blog language key for stats.
+
+ * engine/lib/elgglib.php: Added granular view hook view:$view_name instead
+ of a monolithic display:view hook.
+
+ * mod/ecml/start.php: Update todo.
+
+ * mod/ecml/README.txt, mod/ecml/ecml_functions.php,
+ mod/ecml/graphics/ecml.png, mod/ecml/languages/en.php, mod/ecml/manifest.xml,
+ mod/ecml/start.php, mod/ecml/views/default/ecml/help.php,
+ mod/ecml/views/default/ecml/input_ext.php,
+ mod/ecml/views/default/ecml/keywords/user_list.php: First version of ecml.
+
+ * mod/sitepages/README.txt, mod/sitepages/languages/en.php,
+ mod/sitepages/manifest.xml, mod/sitepages/sitepages_functions.php,
+ mod/sitepages/start.php, mod/sitepages/views/default/sitepages/keywords.php,
+ .../views/default/sitepages/keywords/user_list.php: Removed ECML from Site
+ Pages.
+
+2010-04-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/bookmarks/group_bookmarks.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/groups/languages/en.php, mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/river/item/wrapper.php: Groups profile page tool widget
+ boxes updated.
+
+ * views/default/css.php, views/default/page_elements/elgg_header.php:
+ Updates to site header and css for Custom Logo mod.
+
+2010-04-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/README.txt, mod/sitepages/actions/addfront.php,
+ mod/sitepages/languages/en.php, mod/sitepages/sitepages_functions.php,
+ mod/sitepages/start.php, .../default/sitepages/keywords/site_stats.php,
+ .../views/default/sitepages/keywords/user_list.php: Updated site pages docs.
+ Added ability to pass arguments to custom keywords. Added user_list keyword.
+ Reject logged out front pages that don't have [[login_box]].
+
+ * mod/sitepages/manifest.xml, mod/sitepages/sitepages_functions.php: Added
+ 'customization' category to manifest. Cleaned up some comments.
+
+ * mod/sitepages/start.php: Checking if we need to pull in a view before
+ calling it.
+
+ * mod/sitepages/views/default/sitepages/menu.php: DRY'd up the edit code in
+ site pages.
+
+ * mod/sitepages/README.txt: Added docs for site pages.
+
+2010-04-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/defaultprofile.php, mod/profile/languages/en.php,
+ mod/profile/views/default/profile/css.php,
+ .../default/profile/editdefaultprofileitems.php: Updated custom profile
+ fields admin area / list re-ordering ui.
+
+ * _graphics/avatar_menu_arrows.gif, _graphics/elgg_sprites.png,
+ _graphics/elgg_toolbar_logout.gif, _graphics/friends_picker_arrows.gif,
+ _graphics/icon_bookmarkthis.gif, _graphics/icon_customise_drag.gif,
+ _graphics/icon_customise_info.gif, _graphics/icon_customise_remove.gif,
+ _graphics/icon_customise_remove.png, _graphics/icon_delete.png,
+ _graphics/icon_gallery.gif, _graphics/icon_like.png, _graphics/icon_odd.gif,
+ _graphics/icon_reportthis.gif, _graphics/icon_rss.gif,
+ _graphics/icon_rss.png, _graphics/icon_tag.gif, _graphics/icon_tag.png,
+ _graphics/more_sprite.png, _graphics/river_icons/river_icon_blog.gif,
+ _graphics/river_icons/river_icon_bookmarks.gif,
+ _graphics/river_icons/river_icon_comment.gif,
+ _graphics/river_icons/river_icon_feed.gif,
+ _graphics/river_icons/river_icon_files.gif,
+ _graphics/river_icons/river_icon_forum.gif,
+ _graphics/river_icons/river_icon_friends.gif,
+ _graphics/river_icons/river_icon_messageboard.gif,
+ _graphics/river_icons/river_icon_pages.gif,
+ _graphics/river_icons/river_icon_plugin.gif,
+ .../river_icons/river_icon_privatemessage.gif,
+ _graphics/river_icons/river_icon_profile.gif,
+ _graphics/river_icons/river_icon_status.gif,
+ _graphics/river_icons/river_icon_thewire.gif, _graphics/search.png,
+ _graphics/speech_bubble_tail.gif, _graphics/thewire_speech_bubble.gif,
+ _graphics/topbar_icons.png, _graphics/twitter16px.png,
+ mod/file/views/default/file/css.php,
+ mod/profile/views/default/profile/css.php, mod/twitter/graphics/twitter.png,
+ mod/twitter/graphics/twitter16px.png,
+ mod/twitter/views/default/twitter/css.php, views/default/css.php,
+ views/default/output/rss_view.php: Collected all core sprites into graphics
+ and updated css accordingly. Removed unused core graphics. Moved
+ plugin-specific graphics into respective plugins graphics directories.
+
+2010-04-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/html_begin.php: Removed custom-form-elements
+
+2010-04-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/toolbar_messages_icon.gif,
+ mod/messages/graphics/toolbar_messages_icon.gif,
+ mod/messages/views/default/messages/css.php: Messages icon removed form main
+ css and graphics and added to messages mod.
+
+ * _graphics/icon_like.png, languages/en.php, views/default/css.php,
+ views/default/js/initialise_elgg.php, views/default/likes/forms/edit.php:
+ Icon added to likes and interface tweaked. Likes list js fixed to correctly
+ get height of current list.
+
+ * languages/en.php, mod/blog/views/default/object/blog.php,
+ mod/profile/views/default/profile/css.php, views/default/css.php,
+ views/default/likes/forms/edit.php: Likes updated for plugins entity list
+ display (just icon remaining to add)
+
+2010-04-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php, views/default/page_elements/content_header.php:
+ create a new group button added
+
+ * .../views/default/bookmarks/group_bookmarks.php: change group bookmarks to
+ get from container guid
+
+2010-04-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: Updated Likes on Blog and
+ Videolist single entity pages
+
+ * .../views/default/riverdashboard/css.php, views/default/css.php,
+ views/default/js/initialise_elgg.php, views/default/likes/forms/edit.php:
+ Added a popup list of users for Likes.
+
+2010-04-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php: Allow login via email.
+
+2010-04-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_header.php: allow for a site logo
+
+2010-04-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/twitterservice/languages/en.php, mod/twitterservice/manifest.xml,
+ mod/twitterservice/start.php, mod/twitterservice/vendors/twitter/license.txt,
+ mod/twitterservice/vendors/twitter/load.php,
+ mod/twitterservice/vendors/twitter/readme.txt,
+ mod/twitterservice/vendors/twitter/send.php,
+ .../vendors/twitter/twitter.class.php,
+ .../default/usersettings/twitterservice/edit.php: Moving Twitter Service
+ plugin from core into the plugins directory.
+
+ * mod/blog/languages/en.php: Adding a language definition.
+
+2010-04-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/item/wrapper.php: conversations now use
+ generic_comments for replies so no need for the extra logic in the river
+ wrapper.
+
+2010-04-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/addcomment.php, mod/profile/actions/deletecomment.php,
+ mod/profile/actions/editfield.php, mod/profile/actions/reorder.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ .../default/profile/editdefaultprofileitems.php,
+ .../profile/profile_contents/commentwall.php: Removed windows line endings.
+
+ * mod/profile/actions/deletedefaultprofileitem.php,
+ .../default/profile/editdefaultprofileitems.php: Fixed incorrect casting to
+ int for profile ids. Fixed incorrect URL for reordering.
+
+ * mod/profile/start.php: Fixed displaying of custom profile fields on
+ profile page.
+
+ * mod/profile/start.php, .../default/profile/editdefaultprofileitems.php:
+ Fixed editable profile fields.
+
+ * mod/profile/vendor/jq.editable.min.js,
+ mod/profile/vendor/jquery.jeditable.mini.js,
+ .../default/profile/editdefaultprofileitems.php: Wrong jquery editable lib.
+
+ * mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/editdefault.php, mod/profile/actions/editfield.php,
+ mod/profile/actions/reorder.php, mod/profile/actions/resetdefaultprofile.php,
+ mod/profile/defaultprofile.php, mod/profile/graphics/drag_handle.png,
+ mod/profile/languages/en.php, mod/profile/manifest.xml,
+ mod/profile/start.php, mod/profile/vendor/jq.editable.min.js,
+ .../views/default/profile/editdefaultprofile.php,
+ .../default/profile/editdefaultprofileitems.php: First go at merging in
+ draggable profile fields. Added categories to profile plugin.
+
+ * engine/lib/elgglib.php: Added optional html_encode parameter to
+ elgg_add_action_tokens_to_url() so it can be used in ajax calls.
+
+2010-04-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php, mod/blog/languages/en.php, mod/blog/start.php:
+ Highlighting current tab in content header. Includes updates to language
+ strings.
+
+2010-04-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/index.php: mine tab selects correctly now
+
+2010-04-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php, mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/object/blog.php: Creating content for the blog posts
+ of user's friends.
+
+2010-04-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php: Fixed broken interface on
+ updated plugin list
+
+2010-04-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/views/default/blog/forms/edit.php: Updating autosave handler and
+ "Saved date" return values.
+
+ * engine/lib/metadata.php: Ensuring malformed offset/limit values are
+ ignored by elgg_list_entities_from_metadata(). Refs #2046
+
+2010-04-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, .../views/default/river/object/blog/create.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ views/default/annotation/annotate.php, views/default/annotation/likes.php,
+ views/default/css.php, views/default/js/initialise_elgg.php,
+ views/default/likes/forms/display.php, views/default/likes/forms/edit.php,
+ views/default/likes/forms/link.php: Riverdashboard refreshed, and updated
+ display of comments and likes (the loading of these needs to be moved to ajax
+ callbacks)
+
+2010-04-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/feeds.php,
+ .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php: profile feeds moved from
+ top tabs
+
+2010-04-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/settings/system.php: Removed installation usage settings.
+
+2010-04-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/css.php,
+ views/default/js/initialise_elgg.php: Added screenshots to plugins list.
+
+2010-04-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt:
+
+ * CONTRIBUTORS.txt: upon request
+
+2010-04-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Sanitise int on the offset.
+
+2010-04-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_footer.php: Footer float cleared for
+ theming purposes.
+
+2010-04-05 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/save.php, mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/input/datetime.php: Adding a datetime view for use
+ with blog publication.
+
+2010-04-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php, languages/en.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php: Added category and name as valid
+ plugin manifest keys/values.
+
+2010-04-05 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Metadata lists will default offset and limit to
+ existing url elements.
+
+2010-04-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: load_plugin_manifest() converts multiple keys with
+ the same name into assoc arrays.
+
+2010-04-05 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog.php: Ensuring generic text line breaks
+ are replaced by paragraph tags.
+
+ * engine/lib/metadata.php: Passing entity list options on to view.
+
+ * engine/lib/elgglib.php: Refs #1947: Do not require views to explicitly
+ pass in the offset.
+
+2010-04-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/input.php, engine/schema/mysql.sql,
+ mod/htmlawed/start.php, mod/messages/views/default/messages/css.php,
+ .../notifications/subscriptions/forminternals.php,
+ mod/profile/actions/edit.php, mod/search/languages/en.php,
+ mod/search/search_hooks.php, mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/rss/search/comments/entity.php,
+ views/default/account/forms/register.php, views/default/friends/picker.php,
+ views/default/output/friendlytitle.php: Merged 5605:5622 from 1.7 to trunk.
+
+ * CHANGES.txt, actions/admin/user/makeadmin.php,
+ actions/admin/user/removeadmin.php, actions/register.php,
+ actions/useradd.php, engine/lib/actions.php, engine/lib/annotations.php,
+ engine/lib/database.php, engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/lib/group.php, engine/lib/metadata.php, engine/lib/notification.php,
+ engine/lib/river2.php, engine/lib/sessions.php,
+ engine/lib/upgrades/2010033101.php, engine/lib/upgrades/2010040201.php,
+ engine/lib/users.php, engine/lib/widgets.php,
+ engine/schema/upgrades/2009100701.sql,
+ engine/tests/api/entity_getter_functions.php, engine/tests/objects/users.php,
+ languages/en.php, mod/bookmarks/index.php, mod/bookmarks/start.php,
+ .../views/default/widgets/bookmarks/edit.php, mod/file/index.php,
+ mod/file/start.php, mod/file/views/default/widgets/filerepo/edit.php,
+ mod/file/views/default/widgets/filerepo/view.php, mod/groups/discussions.php,
+ mod/pages/index.php, mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/profile/actions/edit.php,
+ mod/profile/icondirect.php, .../views/default/profile/menu/adminlinks.php,
+ mod/search/index.php, mod/thewire/actions/add.php, mod/thewire/everyone.php,
+ mod/thewire/languages/en.php, mod/thewire/start.php,
+ .../views/default/thewire/activity_view.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/widgets/thewire/edit.php,
+ mod/thewire/views/default/widgets/thewire/view.php,
+ .../views/rss/search/object/thewire/entity.php, version.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/output/friendlytime.php,
+ views/default/output/friendlytitle.php, views/default/output/url.php,
+ views/default/page_elements/elgg_topbar.php: Merged 5530:5604 from 1.7 to
+ trunk.
+
+ * engine/lib/entities.php, mod/bookmarks/actions/add.php,
+ mod/embed/views/default/embed/media.php,
+ mod/embed/views/default/embed/pagination.php, mod/file/actions/save.php,
+ mod/groups/actions/edit.php, mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/members/index.php,
+ mod/members/views/default/members/search.php, mod/messages/actions/send.php,
+ mod/pages/actions/pages/edit.php, views/default/output/url.php,
+ views/failsafe/messages/sanitisation/settings.php: Merged 5487:5525 from 1.7
+ to trunk.
+
+2010-04-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/feeds.php: count added
+
+ * mod/profile/profile_lib.php,
+ .../default/profile/profile_contents/feeds.php,
+ .../views/default/profile/profile_navigation.php: feeds options added to the
+ profile
+
+ * views/default/account/forms/login.php: return to referer added to the
+ login form
+
+2010-04-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/forminternals.php: merged [5526] - [5530]
+ into trunk from 1.7 branch - there are more changes before and after these
+ revisions to be merged
+
+ * views/default/admin/plugins.php: the disable button may be for disabling
+ plugins but it is not disabled itself
+
+ * CHANGES.txt, engine/lib/elgglib.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php: Fixes #1184 - added
+ elgg_format_url() for handling ampersands in urls
+
+ * views/default/page_elements/elgg_topbar.php: target is not allowed in
+ xhtml strict
+
+ * views/default/account/forms/login.php: fixed some markup issues with login
+ box
+
+ * views/default/navigation/site_nav.php: only display navigation if there
+ are registered nav items - cannot have ul element without li elements
+
+ * views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/html_begin.php: removed two elements not allowed
+ with xhtml strict and removed blank line at top of html sent to browser
+
+2010-04-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/site_nav.php: Fixed the empty nav item entries
+ when automatically building menu.
+
+2010-04-02 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php: Determining which content header to use based on
+ blog owner. Primary navigation tabs should not display on other users' blog
+ lists.
+
+ * mod/blog/blog_lib.php, mod/blog/languages/en.php: Allowing non-owners to
+ view published blog posts.
+
+ * mod/blog/blog_lib.php: Truncating lengthy blog excerpts on word breaks.
+
+ * mod/blog/blog_lib.php, mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/object/blog.php: Fixing breadcrumb navigation and
+ content header links for blogs.
+
+ * views/default/page_elements/content_header.php: Allowing default page
+ handler to be overridden. You can pass in full url overrides to the content
+ header view for all/mine/friend tabs.
+
+2010-04-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/activity.php: limit set for profile
+ river
+
+ * views/default/annotation/latest_comments.php: small lang tweak
+
+ * mod/groups/start.php: point the groups main nav link to the all groups
+ page
+
+ * mod/bookmarks/all.php, mod/bookmarks/languages/en.php,
+ mod/bookmarks/views/default/bookmarks/stats.php: bookmark stats now correct,
+ missing strings applied and a function call moved out of the view.
+
+ * mod/profile/start.php: hash out the profile menu option for now, this will
+ be moved to the topbar.
+
+2010-03-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/more_sprite.png, languages/en.php,
+ views/default/admin/menu_items.php, views/default/css.php,
+ views/default/css_ie.php, views/default/css_ie6.php,
+ views/default/navigation/site_nav.php: Updated site primary nav bar and
+ improved drop-down submenu and made IE compatible, also cleaned up / improved
+ menuitem admin area.
+
+2010-03-31 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/languages/en.php, .../views/default/river/object/blog/create.php:
+ blog river view altered to pull out some content
+
+2010-03-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css_ie.php, views/default/css_ie6.php,
+ views/default/page_elements/html_begin.php: Updated paths to IE specific css,
+ and triggered hasLayout for IE.
+
+2010-03-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/languages/en.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/group_bookmarks.php,
+ mod/groups/views/default/groups/css.php: Added the beginnings of a bookmark
+ view for group profile pages.
+
+ * mod/file/start.php, mod/file/views/default/file/groupprofile_files.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/profileitems.php: Added the beginnings of a
+ new method for displaying the latest content from each tool on a groups
+ profile page.
+
+ * mod/blog/views/default/blog/sidebar_menu.php: Changed blog archive header
+ tag.
+
+ * mod/profile/languages/en.php,
+ .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ mod/profile/views/default/profile/css.php: Updated UI for commentwall on
+ profile page.
+
+2010-03-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/addcomment.php, mod/profile/actions/deletecomment.php,
+ mod/profile/languages/en.php, mod/profile/profile_lib.php,
+ mod/profile/start.php, .../default/profile/commentwall/commentwall.php,
+ .../profile/commentwall/commentwall_content.php,
+ .../default/profile/commentwall/commentwalladd.php,
+ .../profile/profile_contents/commentwall.php,
+ .../views/default/profile/profile_navigation.php: simple comment wall added
+ to profiles
+
+ * .../views/default/profile/profile_navigation.php: inserted a view for
+ others to extend on profile navigation
+
+2010-03-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/object/blog/create.php: Added river item views to
+ blog.
+
+ * README.txt: Changed Ben's email addy in README.txt.
+
+2010-03-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/likes/forms/edit.php: Updated Likes link.
+
+ * languages/en.php, views/default/comments/forms/edit.php: Updated generic
+ comment submit button text.
+
+2010-03-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Bumped version in README.
+
+ * actions/likes/delete.php, mod/bookmarks/actions/edit.php,
+ mod/bookmarks/actions/reference.php, mod/bookmarks/actions/remove.php,
+ mod/bookmarks/views/default/bookmarks/stats.php,
+ .../views/default/members/members_navigation.php,
+ mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ .../views/default/riverdashboard/welcome.php,
+ mod/sitepages/actions/addmeta.php, mod/sitepages/sitepages_functions.php,
+ .../views/default/settings/sitepages/edit.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/keywords.php,
+ mod/sitepages/views/default/sitepages/metatags.php,
+ views/default/annotation/annotatelike.php,
+ views/default/annotation/likes.php, views/foaf/search/entity_list.php,
+ views/opendd/search/entity_list.php, views/rss/search/entity_list.php:
+ Converting all line endings to unix style.
+
+ * .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/rivercomment.php,
+ views/default/js/initialise_elgg.php, views/default/likes/forms/edit.php:
+ Fixed likes interface JS.
+
+ * mod/blog/actions/blog/save.php, mod/blog/blog_lib.php,
+ mod/blog/languages/en.php, mod/blog/start.php: Added river support to blog.
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php: Cleaned up the likes
+ interface a bit.
+
+ * mod/blog/blog_lib.php: Fixed weird login in blog for real.
+
+ * mod/blog/blog_lib.php: Added access controls to blog archive grabbing
+ function. Corrected weird logic for checking validity of blog entities while
+ displaying posts.
+
+2010-03-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/mpg.php: Small update to zaudio player
+ spacing for new layout.
+
+2010-03-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/search/comments/entity.php,
+ views/default/annotation/generic_comment.php: Added anchor names for
+ comments.
+
+ * actions/admin/menu_items.php, engine/lib/elgglib.php, languages/en.php,
+ views/default/admin/menu_items.php: Added ability to make arbitrary links for
+ the menu items.
+
+ * mod/blog/blog_lib.php, mod/blog/views/default/blog/sidebar_menu.php: Added
+ archive view for blogs.
+
+ * engine/lib/metadata.php: Added documentation for order_by_metadata.
+
+2010-03-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: tag cloud functions are deprecated in 1.8
+
+2010-03-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/blog_lib.php, mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/sidebar_menu.php: Added filtering by archive
+ date.
+
+ * views/default/input/datepicker.php: Corrected bug in datepicker for
+ passing in values.
+
+ * CHANGES.txt, engine/lib/entities.php: Added remove_subtype() and
+ update_subtype().
+
+ * engine/lib/elgglib.php: Added missing merge from Merge Monday.
+
+ * mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/save.php, mod/blog/blog_lib.php,
+ mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/object/blog.php: Added an ElggBlog class to override
+ the time_created field. Added extra language files.
+
+2010-03-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php, mod/riverdashboard/index.php: Minor update
+ to profile language strings, and corrected view on riverdashboard for views
+ to extend.
+
+ * views/default/input/userpicker.php: Updated userpicker to use generic
+ delete button
+
+ * views/default/page_elements/elgg_topbar.php: Reordered the top toolbar
+ items.
+
+ * views/default/css.php: Moved Shared Access css into plugin
+
+2010-03-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/site_nav.php: Added selected class in navbar
+ menu.
+
+2010-03-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/languages/en.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../views/default/sitepages/forms/editfront.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/keywords.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/sitepages/views/default/sitepages/metatags.php: Updated SitePages to new
+ code standards & UI.
+
+2010-03-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/settings/upgrading.php: Update to
+ ajax loader css and upgrade.php
+
+2010-03-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/configuration.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/input.php,
+ engine/lib/install.php, engine/lib/metadata.php, engine/lib/tags.php,
+ engine/lib/users.php, languages/en.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ mod/custom_index/languages/en.php, mod/externalpages/actions/add.php,
+ .../views/default/expages/forms/edit.php,
+ mod/groups/actions/groupskillinvitation.php, mod/groups/all.php,
+ mod/groups/languages/en.php, mod/groups/views/default/groups/find.php,
+ .../views/default/groups/invitationrequests.php,
+ mod/groups/views/rss/groups/profileitems.php,
+ mod/groups/views/rss/object/groupforumtopic.php, mod/messages/index.php,
+ mod/messages/sent.php, mod/search/views/rss/search/layout.php,
+ mod/thewire/start.php, mod/tinymce/views/default/input/longtext.php,
+ views/default/output/tagcloud.php,
+ .../messages/sanitisation/dbsettings_error.php: Merged 1.7 bugfixes back into
+ core. (5376:HEAD).
+
+2010-03-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/start.php, mod/file/views/default/file/menu.php,
+ mod/messages/start.php, mod/messages/views/default/messages/menu.php,
+ mod/pages/start.php, mod/pages/views/default/pages/menu.php,
+ mod/profile/languages/en.php, mod/profile/start.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminwrapper.php,
+ .../views/default/profile/menu/friendlinks.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ .../views/default/profile/profile_ownerblock.php,
+ mod/profile/views/default/profile/submenu.php,
+ .../views/default/reportedcontent/user_report.php: Updated avatar menu:
+ Removed links to tools, provided a view to extend menu, added @username to
+ menu, cleaned-up and simplified menu generation.
+
+ * mod/profile/index.php, mod/profile/profile_lib.php, mod/profile/start.php,
+ .../views/default/profile/profile_navigation.php: Removed widget view from
+ Profile.
+
+2010-03-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/rivercomment.php: hide the river comment
+ form - still need to add a handle to each one so the correct comment form
+ opens
+
+ * actions/comments/add.php, actions/comments/delete.php,
+ mod/riverdashboard/start.php, .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/rivercomment.php: the beginnings of a
+ mechanism to comment on river objects
+
+ * actions/likes/delete.php: after delete action, return to the correct
+ context
+
+ * views/default/annotation/likes.php: timestamp added to like action view
+
+ * .../views/default/river/item/wrapper.php,
+ views/default/likes/forms/edit.php: more tweaks to likes on the activity
+ stream
+
+ * .../views/default/river/item/wrapper.php: likes added to the activity
+ river
+
+ * mod/blog/views/default/object/blog.php: like display added to blog object
+
+ * mod/blog/views/default/object/blog.php: like added to blog posts
+
+ * actions/likes/add.php, actions/likes/delete.php,
+ engine/lib/annotations.php, engine/lib/elgglib.php, languages/en.php,
+ views/default/annotation/annotatelike.php,
+ views/default/annotation/likes.php, views/default/likes/forms/edit.php:
+ generic like this functionality added
+
+2010-03-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, languages/en.php,
+ views/default/admin/menu_items.php, views/default/css.php,
+ views/default/navigation/site_nav.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/page_elements/elgg_topbar.php: Moved toolbar dropdown menu to
+ main nav. Added CSS for main nav dropdown. Emptied navigation/topbar_tools
+ view.
+
+ * engine/start.php: Removed non-working "lightmode" option.
+
+ * engine/lib/elgglib.php, engine/start.php: Removed ui_page_setup() to fix
+ installation. Gave engine/start.php a bit of love.
+
+2010-03-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/start.php, mod/bookmarks/start.php, mod/file/start.php,
+ mod/groups/start.php, mod/riverdashboard/start.php,
+ mod/thewire/languages/en.php, mod/thewire/start.php: Default all tools' menu
+ items to "world" view. Removed "My" prefix.
+
+ * mod/tinymce/views/default/input/longtext.php: Added a space between the
+ word count colon and the number for tinymce.
+
+ * engine/lib/elgglib.php: Namespaces sticky forms. Requires more testing.
+
+2010-03-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/content_header_filter.gif,
+ vendors/jquery/custom-form-elements.js, views/default/css.php,
+ views/default/page_elements/content_header.php: Removed page content area
+ filter menu, in favor of simple tabs.
+
+ * languages/en.php, mod/blog/views/default/blog/sidebar_menu.php,
+ mod/file/friends.php, mod/file/index.php, mod/file/world.php,
+ views/default/annotation/latest_comments.php, views/default/css.php: Updated
+ latest comments to new UI and coding standards, and added to Blog and Files
+ sidebar.
+
+2010-03-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/blog/auto_save_revision.php,
+ mod/blog/actions/blog/save.php, mod/blog/actions/blog/save_draft.php,
+ mod/blog/blog_lib.php, mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/sidebar_edit.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/sidebar_revisions.php,
+ mod/blog/views/default/object/blog.php: Updated blog to support multiple
+ revisions and automatic saving of drafts.
+
+2010-03-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/object/blog.php, mod/bookmarks/add.php,
+ mod/bookmarks/all.php, mod/bookmarks/friends.php, mod/bookmarks/index.php,
+ mod/bookmarks/views/default/object/bookmarks.php: Included a view for plugins
+ to extend (on the new reworked Bookmarks and Blogs).
+
+2010-03-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/languages/en.php: Added blog languages.
+
+ * actions/admin/menu_items.php, admin/menu_items.php, engine/lib/admin.php,
+ engine/lib/elgglib.php, engine/lib/users.php, languages/en.php,
+ views/default/admin/menu_items.php, views/default/navigation/site_nav.php,
+ views/default/navigation/topbar_tools.php: Added config options for tabs and
+ menu items.
+
+2010-03-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/activity.php,
+ .../views/default/river/item/wrapper.php, views/default/css.php,
+ views/default/navigation/site_nav.php: Updates to: site nav (changed unused
+ id's to title tags), latest wire post in admin/user lists, riverdashboard
+ timestamps unified, and latest wire post on profile page.
+
+2010-03-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Updated documentation for set_config().
+ Removed unnecessary escaping of value before serializing, which broke arrays
+ anyway...
+
+ * views/default/input/pulldown.php: Documented pulldown quirks for NULL and
+ FALSE as values. Fixed bug when calling htmlentities() on the values before
+ testing them.
+
+ * views/default/input/pulldown.php: Refs #1362: Fixed a problem when
+ comparing int and string values to determin the pulldown's selected value.
+
+2010-03-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/messages/views/default/messages/css.php: Minor css update to new
+ message notification.
+
+ * views/default/navigation/site_nav.php: Addition of 'conversations' to
+ temporary site_nav.
+
+ * entities/list.php, mod/blog/start.php,
+ mod/bookmarks/views/default/bookmarks/stats.php,
+ .../views/default/widgets/bookmarks/view.php, mod/members/index.php: Replaced
+ more calls to deprecated functions.
+
+ * services/export/handler.php, views/default/export/entity.php,
+ views/default/export/metadata.php, views/default/export/relationship.php:
+ Updates to default entity views (within admin/log browser).
+
+ * mod/logbrowser/views/default/logbrowser/form.php: Minor update (form
+ spacing) to log browser.
+
+ * .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/form.php: Minor UI updates to reported
+ content.
+
+ * mod/file/views/default/widgets/filerepo/view.php,
+ views/default/navigation/viewtype.php: Minor updates to Files.
+
+ * mod/embed/embed.php, mod/embed/images/button_spacer.gif,
+ mod/embed/images/loading.gif, mod/embed/images/media_modal.png,
+ mod/embed/start.php, mod/embed/views/default/embed/css.php,
+ mod/embed/views/default/embed/js.php, mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/media.php,
+ mod/embed/views/default/embed/pagination.php,
+ mod/embed/views/default/embed/simpletype.php,
+ mod/embed/views/default/embed/tabs.php,
+ mod/embed/views/default/embed/upload.php,
+ mod/embed/views/default/group/default/embed.php,
+ mod/embed/views/default/object/default/embed.php,
+ mod/embed/views/default/object/file/embed.php,
+ mod/embed/views/default/object/file/embedlist.php,
+ mod/embed/views/default/site/default/embed.php,
+ mod/embed/views/default/user/default/embed.php: Updated Embed mod to new UI.
+
+ * views/default/css.php: Updates to generic comments
+
+2010-03-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/views/default/file/css.php,
+ mod/file/views/default/object/file.php: Further updates to files single
+ entity view.
+
+ * entities/index.php, mod/file/edit.php, mod/file/friends.php,
+ mod/file/index.php, mod/file/languages/en.php, mod/file/search.php,
+ mod/file/start.php, mod/file/upload.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/file/upload.php,
+ mod/file/views/default/object/file.php, mod/file/world.php,
+ mod/profile/views/default/profile/css.php,
+ mod/search/views/default/search/gallery.php,
+ mod/tinymce/views/default/tinymce/css.php, views/default/css.php,
+ views/default/entities/gallery.php, views/default/navigation/site_nav.php:
+ Updated File mod to new UI.
+
+ * mod/profile/defaultprofile.php: Corrected misspelt classname.
+
+2010-03-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tagcloud/start.php: Replaced extend_view() with elgg_extend_view().
+
+ * .../views/default/reportedcontent/listing.php, mod/sitepages/start.php,
+ views/default/output/confirmlink.php, views/default/output/url.php: Replaced
+ calls to deprecated elgg_validate_action_url() with
+ elgg_add_action_tokens_to_url().
+
+2010-03-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php, views/default/css.php: Update to
+ longtext/tintMCE input box ui.
+
+ * admin/plugins.php, mod/profile/defaultprofile.php,
+ mod/profile/views/default/profile/css.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../views/default/reportedcontent/listing.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ views/default/admin/plugins.php, views/default/admin/plugins_opt/plugin.php,
+ views/default/admin/site.php, views/default/admin/user.php,
+ views/default/css.php, views/default/settings/system.php: Updates to Admin
+ area UI.
+
+ * mod/captcha/captcha.php, mod/captcha/start.php,
+ mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php: Updated Captcha UI.
+
+ * mod/twitter/views/default/twitter/css.php,
+ mod/twitter/views/default/widgets/twitter/view.php,
+ mod/twitterservice/start.php,
+ .../default/usersettings/twitterservice/edit.php: Updates to Twitter and
+ TwitterService UI.
+
+ * views/default/usersettings/plugins.php: Small update to
+ user-settings/tools page.
+
+ * mod/thewire/everyone.php: …and doing it properly this time.
+
+ * mod/invitefriends/index.php, mod/invitefriends/manifest.xml,
+ mod/invitefriends/start.php, .../views/default/invitefriends/formitems.php:
+ Updated Invite Friends mod to new ui.
+
+ * .../graphics/icon_notifications_site.gif, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/notifications/languages/en.php,
+ .../views/default/notifications/css.php,
+ .../notifications/settings/usersettings.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/personal.php, views/default/css.php: Updated
+ Notifications to new UI.
+
+2010-03-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Trunk isn't 1.7.
+
+2010-03-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/search_box.php,
+ views/default/input/form.php: seems you need to wrap form inputs fields with
+ the fieldset tag for strict xhtml
+
+ * views/default/page_elements/html_begin.php: capitals not allow for strict
+ xhtml
+
+ * views/default/page_elements/html_begin.php: self close the favicon link
+
+2010-03-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/blog/sidebar_menu.php,
+ mod/tagcloud/languages/de.php, mod/tagcloud/languages/en.php,
+ mod/tagcloud/manifest.xml, mod/tagcloud/start.php, mod/tagcloud/tagcloud.php,
+ mod/tagcloud/views/default/output/tagcloud.php,
+ mod/tagcloud/views/default/tagcloud/css.php,
+ .../views/default/widgets/tagcloud/edit.php,
+ .../views/default/widgets/tagcloud/view.php, views/default/css.php: Added
+ updated tagcloud plugin and added to core mods.
+
+2010-03-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * UPGRADE.txt, admin/user.php, engine/lib/elgglib.php, index.php,
+ languages/en.php, mod/diagnostics/start.php, mod/file/friends.php,
+ mod/file/index.php, mod/file/search.php, mod/file/world.php,
+ mod/groups/all.php, mod/groups/index.php, mod/groups/membership.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/pages/actions/pages/edit.php, mod/pages/index.php,
+ mod/pages/languages/en.php, mod/pages/views/default/forms/pages/edit.php,
+ mod/pages/views/default/pages/welcome.php, mod/pages/world.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/search/search_hooks.php,
+ mod/thewire/everyone.php, mod/uservalidationbyemail/start.php: Merged Cash's
+ bugfixes from the 1.7 branch (3288:5377).
+
+2010-03-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/header_shadow.png, mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/object/blog.php,
+ views/default/annotation/annotate.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php, views/default/css.php:
+ Updated/cleaned-up generic comments with new UI.
+
+ * mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/object/blog.php,
+ views/default/annotation/generic_comment.php,
+ views/default/comments/forms/edit.php: Updated interface on new blog
+ (listings and edit/new blog pages).
+
+ * mod/bookmarks/views/default/object/bookmarks.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/groups/css.php,
+ mod/messages/views/default/messages/view.php,
+ mod/thewire/views/default/object/thewire.php, views/default/css.php: Updated
+ and simplified generic entity listings metadata block (edit, delete, access)
+ to not use tables.
+
+ * mod/blog/views/default/blog/sidebar_menu.php,
+ mod/groups/views/default/groups/side_menu.php, mod/members/index.php,
+ mod/profile/views/default/profile/submenu.php,
+ .../views/default/riverdashboard/menu.php,
+ views/default/canvas_header/submenu_group.php, views/default/css.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/title.php: Removed unneeded div from around
+ submenu lists.
+
+2010-03-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Added elgg_list_entities_from_metadata() and
+ deprecated list_entities_from_metadata().
+
+ * views/default/input/calendar.php, views/default/input/datepicker.php:
+ Added datepicker view and deprecated calendar view.
+
+ * mod/blog/actions/add.php, mod/blog/actions/blog/delete.php,
+ mod/blog/actions/blog/save.php, mod/blog/actions/blog/save_draft.php,
+ mod/blog/actions/delete.php, mod/blog/actions/edit.php, mod/blog/add.php,
+ mod/blog/all.php, mod/blog/archive.php, mod/blog/blog_lib.php,
+ mod/blog/edit.php, mod/blog/endpoint/index.php, mod/blog/everyone.php,
+ mod/blog/friends.php, mod/blog/index.php, mod/blog/languages/en.php,
+ mod/blog/manifest.xml, mod/blog/preview.php, mod/blog/read.php,
+ mod/blog/savedraft.php, mod/blog/shared.php, mod/blog/start.php,
+ mod/blog/views/default/blog/archive.php,
+ mod/blog/views/default/blog/categorylist.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/gallery.php,
+ mod/blog/views/default/blog/listing.php,
+ mod/blog/views/default/blog/menu.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/previewpane.php,
+ mod/blog/views/default/blog/sidebar_menu.php,
+ mod/blog/views/default/blog/stats.php, mod/blog/views/default/blog/view.php,
+ mod/blog/views/default/object/blog.php,
+ .../views/default/river/object/blog/annotate.php,
+ .../views/default/river/object/blog/create.php,
+ .../views/default/river/object/blog/update.php: Rough first version of a new
+ blog plugin.
+
+2010-03-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/css.php: Minor interface updates for
+ search results.
+
+2010-03-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/elgglib.php,
+ mod/tinymce/views/default/input/longtext.php, views/default/input/access.php,
+ views/default/input/calendar.php, views/default/input/checkboxes.php,
+ views/default/input/email.php, views/default/input/hidden.php,
+ views/default/input/longtext.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php, views/default/input/userpicker.php: Implemented
+ sticky forms.
+
+2010-03-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/search/comments/entity.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/listing.php, views/default/css.php,
+ views/default/entities/gallery_listing.php: Updated Search results UI.
+
+2010-03-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/elgglib.php, mod/bookmarks/add.php,
+ mod/bookmarks/index.php, mod/groups/forum.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/messages/views/default/messages/messages.php,
+ views/default/navigation/breadcrumbs.php,
+ views/default/page_elements/breadcrumbs.php,
+ views/default/page_elements/content_header.php: Added breadcrumb support and
+ updated the mods with old-style breadcrumbs.
+
+2010-03-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/user.php, mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/embed/views/default/embed/upload.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/invitefriends/formitems.php,
+ mod/tinymce/views/default/input/longtext.php, views/default/css.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php, views/failsafe/input/access.php,
+ views/failsafe/input/longtext.php, views/failsafe/input/text.php: Updates:
+ longtext editor default size added (and overridden in group/forums), more
+ updates to lists of members, remaining/previously-missed generic input
+ classes renamed to lowercase.
+
+ * friends/index.php, friends/of.php,
+ mod/members/views/default/members/css.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/thewire/views/default/thewire/css.php,
+ views/default/admin/statistics_opt/online.php, views/default/css.php: Updated
+ friends/members listings when there is a latest wire post to display.
+
+ * mod/blog/views/default/blog/menu.php,
+ mod/file/views/default/file/menu.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/pages/views/default/pages/menu.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminwrapper.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ .../views/default/reportedcontent/user_report.php: Updated avatar user menu
+ to generate an ordered list, reinstated the add/remove friend link, & cleaned
+ up css.
+
+ * .../default/river/object/bookmarks/create.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ mod/riverdashboard/endpoint/ping.php,
+ mod/riverdashboard/graphics/refresh.png,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/default/river/object/thewire/create.php,
+ mod/thewire/views/default/thewire/css.php,
+ views/default/annotation/annotate.php, views/default/css.php,
+ views/default/friends/river/create.php, views/default/river/item/wrapper.php,
+ views/default/river/wrapper.php: Riverdashboard updated to new UI. DOM
+ simplified a bit & css cleaned up.
+
+2010-03-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/tests/api/helpers.php: Added elgg_instanceof().
+
+2010-03-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/languages/en.php, mod/members/views/default/members/css.php,
+ .../views/default/notifications/css.php,
+ .../notifications/subscriptions/forminternals.php, views/default/css.php,
+ views/default/friends/collections.php, views/default/friends/picker.php,
+ views/default/js/friendsPickerv1.php: Updated Friends Picker UI and added to
+ core css.
+
+ * mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/css.php: Minor ui updates to group forms
+
+2010-03-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/profile/profile_contents/activity.php: profile activity
+ tweaked // it is still not working correctly but doesn't cause a wsod
+
+2010-03-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php, mod/groups/discussions.php, mod/groups/forum.php,
+ mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/group/group.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ .../views/default/groups/invitationrequests.php,
+ mod/groups/views/default/groups/members.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/rss/groups/profileitems.php: Updated Groups to the new
+ interface. Some view clean-up & simplification done.
+
+2010-03-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php: river time stamps added to
+ profile edits
+
+ * mod/bookmarks/views/default/object/bookmarks.php: bookmarks open in a new
+ window ticket #1965
+
+ * mod/riverdashboard/index.php: closing div applied. Note: this needs
+ cleaning up.
+
+ * mod/riverdashboard/endpoint/ping.php, mod/riverdashboard/index.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/manifest.xml,
+ mod/riverdashboard/start.php, .../views/default/river/dashboard.php,
+ .../views/default/river/item/list.php,
+ .../views/default/river/item/wrapper.php,
+ .../default/river/relationship/friend/create.php,
+ .../views/default/river/sitemessage/create.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/menu.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/default/settings/riverdashboard/edit.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php: the beginnings of a new
+ activity river with ajax notification and conversation clustering.
+
+ * engine/lib/river2.php: new activity river api functions
+
+2010-03-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed incorrect deprecated function rewrite for
+ list_entities().
+
+ * .../canvas/layouts/one_column_with_sidebar.php: Fixed documentation for
+ one_column_with_sidebar layout.
+
+2010-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/add.php, mod/blog/actions/delete.php,
+ mod/blog/actions/edit.php, mod/blog/add.php, mod/blog/edit.php,
+ mod/blog/endpoint/index.php, mod/blog/languages/en.php,
+ mod/blog/manifest.xml, mod/blog/savedraft.php, mod/blog/start.php,
+ mod/blog/views/default/blog/archive.php,
+ mod/blog/views/default/blog/categorylist.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/gallery.php,
+ mod/blog/views/default/blog/listing.php,
+ mod/blog/views/default/blog/menu.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/previewpane.php,
+ mod/blog/views/default/blog/stats.php, mod/blog/views/default/blog/view.php,
+ mod/blog/views/default/object/blog.php: Blogs updated to new UI (needs Brett
+ to look over first)
+
+ * mod/profile/profile_lib.php,
+ .../default/profile/profile_contents/sidebar.php,
+ .../views/default/profile/profile_ownerblock.php: Added large avatar to
+ Profile/details page.
+
+2010-03-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php: Forwarding to index.php after login instead of
+ pg/dashboard.
+
+2010-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/index.php, .../default/profile/profile_contents/details.php:
+ Full profile fields reinstated on profile/details page
+
+ * mod/profile/index.php, .../default/profile/profile_contents/activity.php:
+ Updated profile page calls to profile_contents.
+
+2010-03-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/sitepages_functions.php: Fixes #1956: Corrected typo for
+ filtering by owner=username.
+
+2010-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/languages/en.php, views/default/css.php,
+ views/default/navigation/main_nav.php, views/default/navigation/site_nav.php,
+ views/default/page_elements/elgg_header.php: Added basic (stage1) site-wide
+ navigation. Needs improving with a way for admin and plugin authors to decide
+ which mods display in the primary nav-bar, and which page within each tool
+ they point at.
+
+ * _graphics/icon_rss.png, languages/en.php,
+ mod/bookmarks/views/default/bookmarks/form.php, views/default/css.php,
+ views/default/page_elements/owner_block.php: Generic rss feed icon added
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/editicon.php: Edit profile icon ui fixed.
+
+2010-03-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/sitepages/forms/editmeta.php: add/edit metatags form bug
+ fixed
+
+2010-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/edit.php, mod/profile/editicon.php, mod/profile/start.php:
+ Fixed canvas layout for profile edit views
+
+2010-03-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/object/thewire.php: Ticket #1954 fixed
+
+2010-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/languages/en.php, mod/thewire/start.php: Updated 'my wire'
+ link in toolbar menu
+
+ * mod/bookmarks/all.php, mod/members/index.php: Removed users owner block
+ from 'all bookmarks', and 'all members' views.
+
+ * admin/plugins.php, admin/site.php, admin/statistics.php, admin/user.php,
+ dashboard/latest.php, friends/add.php, friends/collections.php,
+ friends/edit.php, friends/index.php, friends/of.php, index.php,
+ mod/blog/all.php, mod/blog/archive.php, mod/blog/everyone.php,
+ mod/blog/friends.php, mod/blog/index.php, mod/blog/preview.php,
+ mod/blog/read.php, mod/blog/shared.php, mod/bookmarks/add.php,
+ mod/bookmarks/all.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/friends.php, mod/bookmarks/index.php,
+ mod/diagnostics/index.php, mod/externalpages/index.php,
+ mod/externalpages/read.php, mod/groups/addtopic.php, mod/groups/all.php,
+ mod/groups/discussions.php, mod/groups/edit.php, mod/groups/edittopic.php,
+ mod/groups/forum.php, mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invitations.php, mod/groups/invite.php, mod/groups/membership.php,
+ mod/groups/membershipreq.php, mod/groups/new.php, mod/groups/topicposts.php,
+ mod/logbrowser/index.php, mod/members/index.php, mod/messages/index.php,
+ mod/messages/read.php, mod/messages/send.php, mod/messages/sent.php,
+ mod/profile/defaultprofile.php, mod/profile/edit.php,
+ mod/profile/editicon.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/index.php, mod/search/index.php,
+ mod/search/views/default/search/layout.php,
+ mod/sitepages/sitepages_functions.php, mod/thewire/add.php,
+ mod/thewire/everyone.php, mod/thewire/index.php, mod/walledgarden/index.php,
+ settings/plugins.php, settings/statistics.php, settings/user.php,
+ .../canvas/layouts/one_column_with_sidebar.php: Updated new page canvases
+ (and calls to elgg_view_layout) so that empty vars are not required.
+
+2010-03-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/actions/addfront.php, mod/sitepages/actions/addmeta.php,
+ mod/sitepages/languages/en.php, mod/sitepages/sitepages_functions.php,
+ mod/sitepages/start.php, .../views/default/settings/sitepages/edit.php,
+ .../views/default/sitepages/custom_frontpage.php,
+ .../views/default/sitepages/footer_menu.php,
+ .../views/default/sitepages/forms/editfront.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/keywords.php,
+ mod/sitepages/views/default/sitepages/metatags.php: Added dynamic keywords
+ for view and entity. Separated logged in and logged out front page views.
+ Fixed a problem with saving metatags. Added PHPDoc headers. Updated language
+ strings.
+
+ * mod/sitepages/actions/add.php, mod/sitepages/actions/addfront.php,
+ mod/sitepages/actions/addmeta.php, mod/sitepages/frontpage.php,
+ mod/sitepages/index.php, mod/sitepages/languages/en.php,
+ mod/sitepages/read.php, mod/sitepages/sitepages_functions.php,
+ mod/sitepages/start.php, .../views/default/sitepages/analytics.php,
+ mod/sitepages/views/default/sitepages/css.php,
+ .../views/default/sitepages/custom_frontpage.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../views/default/sitepages/forms/editfront.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/keywords.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/sitepages/views/default/sitepages/metatags.php: Brought sitepages up to
+ standards. Added basic static keyword/view substitution support.
+
+2010-03-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/start.php, .../views/default/page_elements/searchbox.php,
+ mod/search/views/default/search/search_box.php,
+ views/default/page_elements/elgg_header.php,
+ views/default/page_elements/html_begin.php: Removed hard-coded search box and
+ replaced with extended header/extend view from search page.
+
+2010-03-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php, mod/groups/edit.php, mod/groups/groupprofile.php,
+ mod/groups/views/default/groups/contentwrapper.php: Removed the superfluous
+ groups contentwrapper
+
+ * mod/groups/addtopic.php, mod/groups/all.php, mod/groups/discussions.php,
+ mod/groups/edit.php, mod/groups/edittopic.php, mod/groups/forum.php,
+ mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invitations.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/manifest.xml,
+ mod/groups/membership.php, mod/groups/membershipreq.php, mod/groups/new.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/css.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/side_menu.php: Beginnings of the refreshed
+ groups interface
+
+ * .../page_elements/content_header_member.php,
+ views/default/page_elements/title.php: updates to page_elements
+
+2010-03-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/html_begin.php: Commenting out old (hopefully
+ unneeded) jquery hack.
+
+2010-03-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/sitepages/actions/add.php, mod/sitepages/actions/addfront.php,
+ mod/sitepages/actions/addmeta.php, mod/sitepages/frontpage.php,
+ mod/sitepages/index.php, mod/sitepages/languages/en.php,
+ mod/sitepages/manifest.xml, mod/sitepages/read.php,
+ mod/sitepages/sitepages_functions.php, mod/sitepages/start.php,
+ .../views/default/settings/sitepages/edit.php,
+ .../views/default/sitepages/analytics.php,
+ mod/sitepages/views/default/sitepages/css.php,
+ .../views/default/sitepages/footer_menu.php,
+ .../views/default/sitepages/forms/edit.php,
+ .../views/default/sitepages/forms/editfront.php,
+ .../views/default/sitepages/forms/editmeta.php,
+ mod/sitepages/views/default/sitepages/keywords.php,
+ mod/sitepages/views/default/sitepages/menu.php,
+ mod/sitepages/views/default/sitepages/metatags.php: Site pages will
+ eventually replace the external pages and custom index plugins as well as
+ introduce a new keywords system to enable dynamic content to be displayed
+ without needing to know php or Elgg. This will be handy for frontpage
+ layout/design.
+
+2010-03-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php, mod/thewire/add.php,
+ mod/thewire/everyone.php, mod/thewire/graphics/thewire_speech_bubble.gif,
+ mod/thewire/index.php, mod/thewire/languages/en.php,
+ mod/thewire/manifest.xml, mod/thewire/views/default/object/thewire.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/thewire/scripts/counter.js: Updates to thewire interface
+
+ * mod/profile/views/default/profile/css.php, views/default/css.php,
+ views/default/page_elements/owner_block.php: Updates to Profile and
+ owner_block interface
+
+2010-03-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tinymce/graphics/ed-bg.gif, mod/tinymce/graphics/example.gif,
+ mod/tinymce/graphics/more.gif, mod/tinymce/manifest.xml,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php: Updated tinymce to new interface
+
+2010-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/profile_lib.php, mod/profile/start.php,
+ mod/profile/views/default/profile/css.php: Removed horizontal nav from avatar
+ edit view and debug string from sidebar. Added temp fix for large avatar
+ upload image scaling
+
+2010-03-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/profile_lib.php, mod/profile/start.php,
+ .../default/profile/profile_contents/activity.php,
+ .../default/profile/profile_contents/details.php,
+ .../default/profile/profile_contents/friends.php,
+ .../default/profile/profile_contents/sidebar.php,
+ .../default/profile/profile_contents/twitter.php: Pulled profile sidebar out
+ into separate view. Using one_column_with_sidebar layout for editing profile.
+
+
+ * mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/actions/resetdefaultprofile.php, mod/profile/defaultprofile.php,
+ mod/profile/edit.php, mod/profile/editicon.php, mod/profile/icon.php,
+ mod/profile/icondirect.php, mod/profile/index.php,
+ mod/profile/javascript.php, mod/profile/languages/en.php,
+ mod/profile/profile_lib.php, mod/profile/start.php,
+ mod/profile/views/default/profile/admin_menu.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/adminwrapper.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/metatags.php,
+ .../default/profile/profile_contents/activity.php,
+ .../default/profile/profile_contents/details.php,
+ .../default/profile/profile_contents/friends.php,
+ .../default/profile/profile_contents/twitter.php,
+ .../views/default/profile/profile_navigation.php,
+ .../views/default/profile/profile_ownerblock.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/userdetails.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php: Merged interface changes to
+ profile in.
+
+2010-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/bookmarks/add.php, mod/bookmarks/all.php,
+ mod/bookmarks/bookmarklet.php, mod/bookmarks/friends.php,
+ mod/bookmarks/index.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ .../default/bookmarks/bookmarklet_menu_option.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/object/bookmarks.php, views/default/css.php:
+ Updated Bookmarks interface (old sidebar nav removed, breadcrumbs fixed,
+ bookmarklet fixed & updated)
+
+ * .../default/bookmarks/bookmarklet_menu_option.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/messages/views/default/messages/messages.php,
+ .../views/default/reportedcontent/listing.php: Removed empty href in
+ elgg_slide_toggle calls to prevent page jump
+
+ * views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/register.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/input/form.php,
+ views/default/js/initialise_elgg.php: Interface updates to js, and login,
+ register, lost password
+
+ * languages/en.php: Merged EN language updates
+
+ * _graphics/favicon.ico: Added the default elgg favicon (linked from
+ html_begin)
+
+ * vendors/jquery/jquery-ui-1.7.2.custom.min.js: Removed jquery custom UI
+ package, we now provide/use the full 1.7.2 UI package
+
+ * mod/search/index.php, mod/search/views/default/search/layout.php,
+ mod/search/views/default/search/startblurb.php: Merged Search interface
+ updates
+
+ * mod/messages/graphics/icon_notifications_site.gif, mod/messages/sent.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php: Merged missing Messages
+ interface modifications
+
+ * mod/members/views/default/members/search.php: Added missing php closing
+ tag
+
+ * mod/bookmarks/add.php, mod/bookmarks/all.php, mod/bookmarks/index.php,
+ .../views/default/bookmarks/bookmarklet.php: Merged missing Bookmarks
+ interface modifications
+
+2010-03-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/walledgarden/index.php, .../views/default/account/forms/login.php,
+ .../views/default/canvas/layouts/new_index.php,
+ .../views/default/walledgarden/css.php: Merged walledgarden changes.
+
+ * mod/walledgarden/index.php, mod/walledgarden/manifest.xml,
+ mod/walledgarden/readme.txt, mod/walledgarden/start.php,
+ .../views/default/account/forms/login.php,
+ .../views/default/canvas/layouts/new_index.php,
+ .../views/default/walledgarden/css.php,
+ .../views/default/walledgarden/walledgarden.php: Moved walled garden into
+ trunk.
+
+ * mod/reportedcontent/add.php,
+ mod/reportedcontent/graphics/icon_reportthis.gif,
+ mod/reportedcontent/index.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/start.php, .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/reportedcontent/owner_block.php: Merged reported content
+ interface changes.
+
+ * mod/messages/actions/delete.php, mod/messages/actions/send.php,
+ mod/messages/index.php, mod/messages/languages/en.php, mod/messages/read.php,
+ mod/messages/readme.txt, mod/messages/send.php, mod/messages/sent.php,
+ mod/messages/start.php, mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/message.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/send.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php: Merged messages interface
+ changes.
+
+ * mod/members/index.php, mod/members/languages/en.php,
+ mod/members/start.php, mod/members/views/default/members/css.php,
+ .../views/default/members/members_navigation.php,
+ .../views/default/members/members_sort_menu.php,
+ mod/members/views/default/members/online.php,
+ mod/members/views/default/members/search.php: Merged members plugin's new
+ layout.
+
+ * mod/externalpages/actions/addfront.php, mod/externalpages/index.php,
+ mod/externalpages/read.php, mod/externalpages/start.php,
+ mod/externalpages/views/default/expages/css.php,
+ .../views/default/expages/footer_menu.php,
+ .../views/default/expages/forms/editfront.php,
+ .../views/default/expages/front_left.php,
+ .../views/default/expages/front_right.php,
+ mod/externalpages/views/default/expages/menu.php: Updated external pages to
+ new interface.
+
+2010-03-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/jquery/custom-form-elements.js,
+ vendors/jquery/jquery-1.3.2.min.js, vendors/jquery/jquery-1.4.min.js: Added
+ new version of jQuery and custom form elements.
+
+ * mod/bookmarks/actions/add.php, mod/bookmarks/actions/delete.php,
+ mod/bookmarks/actions/edit.php, mod/bookmarks/actions/reference.php,
+ mod/bookmarks/actions/remove.php, mod/bookmarks/add.php,
+ mod/bookmarks/all.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/everyone.php, mod/bookmarks/friends.php,
+ mod/bookmarks/inbox.php, mod/bookmarks/index.php,
+ mod/bookmarks/languages/en.php, mod/bookmarks/start.php,
+ .../views/default/bookmarks/bookmarklet.php,
+ .../default/bookmarks/bookmarklet_menu_option.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/owner_block.php,
+ mod/bookmarks/views/default/bookmarks/sharing.php,
+ mod/bookmarks/views/default/bookmarks/stats.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/river/object/bookmarks/annotate.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/edit.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/bookmarks/views/rss/object/bookmarks.php: Updated bookmarks with new
+ interface.
+
+ * index.php, languages/en.php, settings/plugins.php,
+ settings/statistics.php, settings/user.php: Pulling in MORE changes that
+ weren't in the patch. Apparently I fail at patching.
+
+ * _graphics/spacer.gif: Removing unneeded svn:executable properties on
+ files.
+
+ * views/default/page_shells/default.php: Merged in a lost change for the
+ interface.
+
+ * actions/systemsettings/install.php: Forward to the registration
+ pagehandler after installation.
+
+ * views/failsafe/page_shells/default.php,
+ views/failsafe/pageshells/pageshell.php: Installation uses new views system.
+
+2010-03-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/edit_layout.php,
+ views/default/canvas/layouts/sidebar_boxes.php,
+ .../canvas/layouts/two_column_right_sidebar.php: old canvases removed
+
+2010-03-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/users.php: Pulled in missing interface
+ modifications for the engine dir.
+
+2010-03-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/ajax_loader_bw.gif, _graphics/button_background.gif,
+ _graphics/button_graduation.png, _graphics/content_header_filter.gif,
+ _graphics/icon_delete.png, _graphics/icon_tag.png, _graphics/search.png,
+ _graphics/sidebar_background.gif, _graphics/speech_bubble_tail.gif,
+ _graphics/topbar_icons.png, _graphics/twitter16px.png, views/default/css.php:
+ new graphics added and css updated to reflect new location
+
+2010-03-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/forgotten_password.php, admin/plugins.php, admin/site.php,
+ admin/statistics.php, admin/user.php, dashboard/latest.php, friends/add.php,
+ friends/collections.php, friends/edit.php, friends/index.php, friends/of.php,
+ mod/blog/actions/add.php, mod/blog/actions/delete.php,
+ mod/blog/actions/edit.php, mod/blog/add.php, mod/blog/archive.php,
+ mod/blog/edit.php, mod/blog/everyone.php, mod/blog/friends.php,
+ mod/blog/index.php, mod/blog/languages/en.php, mod/blog/manifest.xml,
+ mod/blog/preview.php, mod/blog/read.php, mod/blog/savedraft.php,
+ mod/blog/start.php, mod/blog/views/default/blog/categorylist.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/gallery.php,
+ mod/blog/views/default/blog/listing.php,
+ mod/blog/views/default/blog/menu.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/previewpane.php,
+ mod/blog/views/default/blog/view.php, mod/blog/views/default/object/blog.php,
+ .../views/default/river/object/blog/annotate.php,
+ .../views/default/river/object/blog/create.php,
+ .../views/default/river/object/blog/update.php,
+ mod/bookmarks/actions/add.php, mod/bookmarks/actions/delete.php,
+ mod/bookmarks/add.php, mod/bookmarks/bookmarklet.php,
+ mod/bookmarks/everyone.php, mod/bookmarks/friends.php,
+ mod/bookmarks/inbox.php, mod/bookmarks/index.php,
+ mod/bookmarks/languages/en.php, mod/bookmarks/manifest.xml,
+ mod/bookmarks/start.php, .../views/default/bookmarks/bookmarklet.php,
+ mod/bookmarks/views/default/bookmarks/css.php,
+ mod/bookmarks/views/default/bookmarks/form.php,
+ .../views/default/bookmarks/owner_block.php,
+ mod/bookmarks/views/default/bookmarks/sharing.php,
+ mod/bookmarks/views/default/object/bookmarks.php,
+ .../default/river/object/bookmarks/annotate.php,
+ .../default/river/object/bookmarks/create.php,
+ .../views/default/widgets/bookmarks/edit.php,
+ .../views/default/widgets/bookmarks/view.php,
+ mod/bookmarks/views/rss/object/bookmarks.php,
+ mod/captcha/backgrounds/bg1.jpg, mod/captcha/backgrounds/bg2.jpg,
+ mod/captcha/backgrounds/bg3.jpg, mod/captcha/backgrounds/bg4.jpg,
+ mod/captcha/backgrounds/bg5.jpg, mod/captcha/captcha.php,
+ mod/captcha/fonts/1.ttf, mod/captcha/fonts/Liberation_serif_License.txt,
+ mod/captcha/languages/en.php, mod/captcha/manifest.xml,
+ mod/captcha/start.php, mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php, mod/categories/actions/save.php,
+ mod/categories/languages/en.php, mod/categories/manifest.xml,
+ mod/categories/readme.txt, mod/categories/settings.php,
+ mod/categories/start.php, mod/categories/views/default/categories.php,
+ mod/categories/views/default/categories/css.php,
+ mod/categories/views/default/categories/list.php,
+ .../views/default/categories/settings.php,
+ .../views/default/categories/settingsform.php,
+ mod/categories/views/default/categories/view.php, mod/custom_index/index.php,
+ mod/custom_index/languages/en.php, mod/custom_index/manifest.xml,
+ mod/custom_index/start.php, .../views/default/canvas/layouts/new_index.php,
+ .../views/default/custom_index/css.php,
+ mod/defaultwidgets/actions/update.php, mod/defaultwidgets/dashboard.php,
+ mod/defaultwidgets/languages/en.php, mod/defaultwidgets/manifest.xml,
+ mod/defaultwidgets/profile.php, mod/defaultwidgets/start.php,
+ .../views/default/defaultwidgets/editor.php, mod/diagnostics/index.php,
+ mod/diagnostics/languages/en.php, mod/embed/README.txt, mod/embed/embed.php,
+ mod/embed/images/button_spacer.gif, mod/embed/images/close_button.gif,
+ mod/embed/images/loading.gif, mod/embed/images/media_modal.png,
+ mod/embed/languages/en.php, mod/embed/manifest.xml, mod/embed/start.php,
+ mod/embed/upload.php, mod/embed/views/default/embed/addcontentjs.php,
+ mod/embed/views/default/embed/css.php, mod/embed/views/default/embed/js.php,
+ mod/embed/views/default/embed/link.php,
+ mod/embed/views/default/embed/media.php,
+ mod/embed/views/default/embed/metatags.php,
+ mod/embed/views/default/embed/pagination.php,
+ mod/embed/views/default/embed/simpletype.php,
+ mod/embed/views/default/embed/tabs.php,
+ mod/embed/views/default/embed/upload.php,
+ mod/embed/views/default/group/default/embed.php,
+ mod/embed/views/default/object/default/embed.php,
+ mod/embed/views/default/object/file/embed.php,
+ mod/embed/views/default/object/file/embedlist.php,
+ mod/embed/views/default/site/default/embed.php,
+ mod/embed/views/default/user/default/embed.php,
+ mod/externalpages/actions/add.php, mod/externalpages/actions/addfront.php,
+ mod/externalpages/index.php, mod/externalpages/languages/en.php,
+ mod/externalpages/manifest.xml, mod/externalpages/read.php,
+ mod/externalpages/start.php, .../views/default/expages/analytics.php,
+ mod/externalpages/views/default/expages/css.php,
+ .../views/default/expages/footer_menu.php,
+ .../views/default/expages/forms/edit.php,
+ .../views/default/expages/forms/editfront.php,
+ .../views/default/expages/front_left.php,
+ .../views/default/expages/front_right.php,
+ mod/externalpages/views/default/expages/menu.php,
+ mod/externalpages/views/default/object/expages.php,
+ mod/file/actions/delete.php, mod/file/actions/download.php,
+ mod/file/actions/save.php, mod/file/actions/upload.php,
+ mod/file/download.php, mod/file/edit.php, mod/file/friends.php,
+ mod/file/graphics/icons/application.gif,
+ mod/file/graphics/icons/application_lrg.gif,
+ mod/file/graphics/icons/archive.gif, mod/file/graphics/icons/archive_lrg.gif,
+ mod/file/graphics/icons/excel.gif, mod/file/graphics/icons/excel_lrg.gif,
+ mod/file/graphics/icons/general.gif, mod/file/graphics/icons/general_lrg.gif,
+ mod/file/graphics/icons/music.gif, mod/file/graphics/icons/music_lrg.gif,
+ mod/file/graphics/icons/openoffice.gif,
+ mod/file/graphics/icons/openoffice_lrg.gif,
+ mod/file/graphics/icons/pages.gif, mod/file/graphics/icons/pages_lrg.gif,
+ mod/file/graphics/icons/pdf.gif, mod/file/graphics/icons/pdf_lrg.gif,
+ mod/file/graphics/icons/ppt.gif, mod/file/graphics/icons/ppt_lrg.gif,
+ mod/file/graphics/icons/text.gif, mod/file/graphics/icons/text_lrg.gif,
+ mod/file/graphics/icons/vcard.gif, mod/file/graphics/icons/vcard_lrg.gif,
+ mod/file/graphics/icons/video.gif, mod/file/graphics/icons/video_lrg.gif,
+ mod/file/graphics/icons/word.gif, mod/file/graphics/icons/word_lrg.gif,
+ mod/file/index.php, mod/file/languages/en.php, mod/file/manifest.xml,
+ mod/file/search.php, mod/file/start.php, mod/file/thumbnail.php,
+ mod/file/upload.php, mod/file/views/default/file/css.php,
+ mod/file/views/default/file/groupprofile_files.php,
+ mod/file/views/default/file/icon.php,
+ .../default/file/icon/application/default.php,
+ .../views/default/file/icon/application/excel.php,
+ .../views/default/file/icon/application/msword.php,
+ .../views/default/file/icon/application/pdf.php,
+ .../default/file/icon/application/powerpoint.php,
+ .../default/file/icon/application/vnd.ms-excel.php,
+ .../file/icon/application/vnd.ms-powerpoint.php,
+ .../application/vnd.oasis.opendocument.text.php,
+ .../views/default/file/icon/application/x-gzip.php,
+ .../file/icon/application/x-rar-compressed.php,
+ .../default/file/icon/application/x-stuffit.php,
+ .../views/default/file/icon/application/zip.php,
+ mod/file/views/default/file/icon/archive.php,
+ mod/file/views/default/file/icon/audio.php,
+ mod/file/views/default/file/icon/audio/default.php,
+ mod/file/views/default/file/icon/default.php,
+ mod/file/views/default/file/icon/document.php,
+ mod/file/views/default/file/icon/text/default.php,
+ .../views/default/file/icon/text/directory.php,
+ mod/file/views/default/file/icon/text/v-card.php,
+ mod/file/views/default/file/icon/video.php,
+ mod/file/views/default/file/icon/video/default.php,
+ mod/file/views/default/file/menu.php,
+ .../default/file/specialcontent/audio/mid.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/x-wav.php,
+ .../default/file/specialcontent/image/default.php,
+ mod/file/views/default/file/typecloud.php,
+ mod/file/views/default/file/upload.php,
+ mod/file/views/default/object/file.php,
+ .../views/default/river/object/file/create.php,
+ mod/file/views/default/widgets/filerepo/edit.php,
+ mod/file/views/default/widgets/filerepo/view.php,
+ mod/file/views/rss/object/file.php, mod/file/world.php, mod/friends/add.php,
+ mod/friends/collections.php, mod/friends/edit.php,
+ mod/friends/languages/en.php, mod/friends/manifest.xml,
+ mod/friends/start.php, mod/friends/views/default/widgets/friends/edit.php,
+ mod/friends/views/default/widgets/friends/view.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/delete.php,
+ mod/groups/actions/edit.php, mod/groups/actions/featured.php,
+ mod/groups/actions/forums/addpost.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletepost.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/editpost.php,
+ mod/groups/actions/forums/edittopic.php,
+ mod/groups/actions/groupskillinvitation.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/addtopic.php, mod/groups/all.php,
+ mod/groups/discussions.php, mod/groups/edit.php, mod/groups/edittopic.php,
+ mod/groups/forum.php, mod/groups/graphics/defaultlarge.gif,
+ mod/groups/graphics/defaultmedium.gif, mod/groups/graphics/defaultsmall.gif,
+ mod/groups/graphics/defaulttiny.gif, mod/groups/graphics/icon.php,
+ mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invitations.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/manifest.xml,
+ mod/groups/membership.php, mod/groups/membershipreq.php, mod/groups/new.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/group/group.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/contentwrapper.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ .../views/default/groups/invitationrequests.php,
+ mod/groups/views/default/groups/members.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/groups/views/default/groups/profileitems.php,
+ mod/groups/views/default/groups/side_menu.php,
+ .../views/default/icon/group/default/large.php,
+ .../views/default/icon/group/default/medium.php,
+ .../views/default/icon/group/default/small.php,
+ .../views/default/icon/group/default/tiny.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../views/default/river/object/group/create.php,
+ .../river/object/groupforumtopic/annotate.php,
+ .../river/object/groupforumtopic/create.php,
+ .../river/object/groupforumtopic/update.php,
+ .../default/river/relationship/member/create.php,
+ mod/groups/views/default/settings/groups/edit.php,
+ mod/groups/views/default/sharing/invite.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ .../views/default/widgets/a_users_groups/view.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php,
+ mod/groups/views/rss/forum/topicposts.php,
+ mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/contentwrapper.php,
+ mod/groups/views/rss/groups/profileitems.php,
+ mod/invitefriends/actions/invite.php, mod/invitefriends/index.php,
+ mod/invitefriends/languages/en.php, mod/invitefriends/manifest.xml,
+ mod/invitefriends/start.php, .../views/default/invitefriends/form.php,
+ .../views/default/invitefriends/formitems.php, mod/logbrowser/index.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/logbrowser/form.php, mod/members/index.php,
+ mod/members/languages/en.php, mod/members/manifest.xml,
+ mod/members/start.php, mod/members/views/default/members/css.php,
+ .../views/default/members/members_sort_menu.php,
+ mod/members/views/default/members/online.php,
+ mod/members/views/default/members/search.php,
+ mod/messageboard/actions/add.php, mod/messageboard/actions/delete.php,
+ mod/messageboard/ajax_endpoint/load.php, mod/messageboard/history.php,
+ mod/messageboard/index.php, mod/messageboard/languages/en.php,
+ mod/messageboard/manifest.xml, mod/messageboard/readme.txt,
+ mod/messageboard/start.php, .../views/default/messageboard/css.php,
+ .../views/default/messageboard/forms/add.php,
+ .../default/messageboard/group_messageboard.php,
+ .../views/default/messageboard/messageboard.php,
+ .../default/messageboard/messageboard_content.php,
+ .../default/river/object/messageboard/create.php,
+ .../views/default/widgets/messageboard/edit.php,
+ .../views/default/widgets/messageboard/view.php,
+ mod/messages/actions/delete.php, mod/messages/actions/send.php,
+ mod/messages/graphics/icon_notifications_site.gif, mod/messages/index.php,
+ mod/messages/languages/en.php, mod/messages/manifest.xml,
+ mod/messages/read.php, mod/messages/readme.txt, mod/messages/send.php,
+ mod/messages/sent.php, mod/messages/start.php,
+ mod/messages/views/default/messages/css.php,
+ .../views/default/messages/forms/message.php,
+ .../views/default/messages/forms/reply.php,
+ mod/messages/views/default/messages/forms/view.php,
+ mod/messages/views/default/messages/menu.php,
+ mod/messages/views/default/messages/messages.php,
+ mod/messages/views/default/messages/topbar.php,
+ mod/messages/views/default/messages/view.php,
+ .../views/default/widgets/messages/view.php,
+ mod/notifications/actions/groupsave.php, mod/notifications/actions/save.php,
+ .../graphics/icon_notifications_email.gif, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/notifications/languages/en.php,
+ mod/notifications/manifest.xml, mod/notifications/start.php,
+ .../views/default/notifications/css.php,
+ .../notifications/settings/usersettings.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/jsfuncs.php,
+ .../notifications/subscriptions/personal.php,
+ mod/pages/actions/pages/delete.php, mod/pages/actions/pages/edit.php,
+ mod/pages/actions/pages/editwelcome.php, mod/pages/edit.php,
+ mod/pages/history.php, mod/pages/images/application.png,
+ mod/pages/images/code.png, mod/pages/images/css.png, mod/pages/images/db.png,
+ mod/pages/images/directory.png, mod/pages/images/doc.png,
+ mod/pages/images/file.gif, mod/pages/images/file.png,
+ mod/pages/images/film.png, mod/pages/images/flash.png,
+ mod/pages/images/folder-closed.gif, mod/pages/images/folder.gif,
+ mod/pages/images/folder_open.png, mod/pages/images/html.png,
+ mod/pages/images/java.png, mod/pages/images/linux.png,
+ mod/pages/images/minus.gif, mod/pages/images/music.png,
+ mod/pages/images/pages.gif, mod/pages/images/pages_lrg.gif,
+ mod/pages/images/pdf.png, mod/pages/images/php.png,
+ mod/pages/images/picture.png, mod/pages/images/plus.gif,
+ mod/pages/images/ppt.png, mod/pages/images/psd.png,
+ mod/pages/images/ruby.png, mod/pages/images/script.png,
+ mod/pages/images/spinner.gif, mod/pages/images/treeview-black-line.gif,
+ mod/pages/images/treeview-black.gif,
+ mod/pages/images/treeview-default-line.gif,
+ mod/pages/images/treeview-default.gif,
+ mod/pages/images/treeview-famfamfam-line.gif,
+ mod/pages/images/treeview-famfamfam.gif,
+ mod/pages/images/treeview-gray-line.gif, mod/pages/images/treeview-gray.gif,
+ mod/pages/images/treeview-red-line.gif, mod/pages/images/treeview-red.gif,
+ mod/pages/images/txt.png, mod/pages/images/xls.png, mod/pages/images/zip.png,
+ mod/pages/index.php, mod/pages/javascript/jquery.treeview.async.js,
+ mod/pages/javascript/jquery.treeview.js, mod/pages/languages/en.php,
+ mod/pages/manifest.xml, mod/pages/new.php, mod/pages/pagesTree.php,
+ mod/pages/start.php, mod/pages/view.php,
+ mod/pages/views/default/annotation/icon.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ .../views/default/icon/object/page/medium.php,
+ mod/pages/views/default/icon/object/page/small.php,
+ .../views/default/icon/object/page_top/medium.php,
+ .../views/default/icon/object/page_top/small.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/css.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/menu.php,
+ mod/pages/views/default/pages/metatags.php,
+ mod/pages/views/default/pages/pagegallery.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/pages/sidebar/sidebarthis.php,
+ mod/pages/views/default/pages/sidebar/starter.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/sidebar/wrapper.php,
+ mod/pages/views/default/pages/welcome.php,
+ .../views/default/river/object/page/annotate.php,
+ .../views/default/river/object/page/create.php,
+ .../views/default/river/object/page/update.php,
+ .../default/river/object/page_top/annotate.php,
+ .../views/default/river/object/page_top/create.php,
+ .../views/default/river/object/page_top/update.php,
+ mod/pages/views/default/widgets/pages/edit.php,
+ mod/pages/views/default/widgets/pages/view.php, mod/pages/welcome.php,
+ mod/pages/world.php, mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/actions/resetdefaultprofile.php, mod/profile/defaultprofile.php,
+ mod/profile/edit.php, mod/profile/editicon.php,
+ mod/profile/graphics/defaultlarge.gif,
+ mod/profile/graphics/defaultmaster.gif,
+ mod/profile/graphics/defaultmedium.gif,
+ mod/profile/graphics/defaultsmall.gif, mod/profile/graphics/defaulttiny.gif,
+ mod/profile/graphics/defaulttopbar.gif, mod/profile/icon.php,
+ mod/profile/icondirect.php, mod/profile/index.php,
+ mod/profile/javascript.php, mod/profile/languages/en.php,
+ mod/profile/manifest.xml, mod/profile/start.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ .../views/default/js/jquery.imgareaselect-0.8.js,
+ .../default/js/jquery.imgareaselect-0.8.min.js,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/adminwrapper.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/submenu.php,
+ mod/profile/views/default/profile/userdetails.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/index.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/manifest.xml, mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/reportedcontent/owner_block.php,
+ .../views/default/reportedcontent/user_report.php,
+ mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ mod/riverdashboard/graphics/follow_icon.png, mod/riverdashboard/index.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/manifest.xml,
+ mod/riverdashboard/start.php, .../views/default/river/sitemessage/create.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/default/settings/riverdashboard/edit.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../views/json/riverdashboard/container.php,
+ .../views/rss/riverdashboard/container.php,
+ mod/search/views/default/search/css.php, mod/thewire/actions/add.php,
+ mod/thewire/actions/delete.php, mod/thewire/add.php,
+ mod/thewire/everyone.php, mod/thewire/graphics/river_icon_thewire.gif,
+ mod/thewire/graphics/thewire_speech_bubble.gif, mod/thewire/index.php,
+ mod/thewire/languages/en.php, mod/thewire/manifest.xml,
+ mod/thewire/readme.txt, mod/thewire/start.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ .../views/default/thewire/activity_view.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/thewire/views/default/thewire/notfound.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/thewire/scripts/counter.js,
+ mod/thewire/views/default/thewire/view.php,
+ mod/thewire/views/default/widgets/thewire/edit.php,
+ mod/thewire/views/default/widgets/thewire/view.php,
+ mod/tinymce/languages/en.php, mod/tinymce/manifest.xml,
+ mod/tinymce/readme.txt, mod/tinymce/start.php,
+ mod/tinymce/tinymce/changelog.txt,
+ mod/tinymce/tinymce/jscripts/tiny_mce/langs/en.js,
+ mod/tinymce/tinymce/jscripts/tiny_mce/license.txt,
+ .../jscripts/tiny_mce/plugins/advhr/css/advhr.css,
+ .../tiny_mce/plugins/advhr/editor_plugin.js,
+ .../tiny_mce/plugins/advhr/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advhr/js/rule.js,
+ .../tiny_mce/plugins/advhr/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advhr/rule.htm,
+ .../tiny_mce/plugins/advimage/css/advimage.css,
+ .../tiny_mce/plugins/advimage/editor_plugin.js,
+ .../tiny_mce/plugins/advimage/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/advimage/image.htm,
+ .../tiny_mce/plugins/advimage/img/sample.gif,
+ .../jscripts/tiny_mce/plugins/advimage/js/image.js,
+ .../tiny_mce/plugins/advimage/langs/en_dlg.js,
+ .../tiny_mce/plugins/advlink/css/advlink.css,
+ .../tiny_mce/plugins/advlink/editor_plugin.js,
+ .../tiny_mce/plugins/advlink/editor_plugin_src.js,
+ .../tiny_mce/plugins/advlink/js/advlink.js,
+ .../tiny_mce/plugins/advlink/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/advlink/link.htm,
+ .../tiny_mce/plugins/autosave/editor_plugin.js,
+ .../tiny_mce/plugins/autosave/editor_plugin_src.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin.js,
+ .../tiny_mce/plugins/bbcode/editor_plugin_src.js,
+ .../tiny_mce/plugins/compat2x/editor_plugin.js,
+ .../tiny_mce/plugins/compat2x/editor_plugin_src.js,
+ .../tiny_mce/plugins/contextmenu/editor_plugin.js,
+ .../plugins/contextmenu/editor_plugin_src.js,
+ .../plugins/directionality/editor_plugin.js,
+ .../plugins/directionality/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/editor_plugin.js,
+ .../tiny_mce/plugins/emotions/editor_plugin_src.js,
+ .../tiny_mce/plugins/emotions/emotions.htm,
+ .../tiny_mce/plugins/emotions/img/smiley-cool.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-cry.gif,
+ .../plugins/emotions/img/smiley-embarassed.gif,
+ .../plugins/emotions/img/smiley-foot-in-mouth.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-frown.gif,
+ .../plugins/emotions/img/smiley-innocent.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-kiss.gif,
+ .../plugins/emotions/img/smiley-laughing.gif,
+ .../plugins/emotions/img/smiley-money-mouth.gif,
+ .../plugins/emotions/img/smiley-sealed.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-smile.gif,
+ .../plugins/emotions/img/smiley-surprised.gif,
+ .../plugins/emotions/img/smiley-tongue-out.gif,
+ .../plugins/emotions/img/smiley-undecided.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-wink.gif,
+ .../tiny_mce/plugins/emotions/img/smiley-yell.gif,
+ .../tiny_mce/plugins/emotions/js/emotions.js,
+ .../tiny_mce/plugins/emotions/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/example/dialog.htm,
+ .../tiny_mce/plugins/example/editor_plugin.js,
+ .../tiny_mce/plugins/example/editor_plugin_src.js,
+ .../tiny_mce/plugins/example/img/example.gif,
+ .../jscripts/tiny_mce/plugins/example/js/dialog.js,
+ .../jscripts/tiny_mce/plugins/example/langs/en.js,
+ .../tiny_mce/plugins/example/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullpage/css/fullpage.css,
+ .../tiny_mce/plugins/fullpage/editor_plugin.js,
+ .../tiny_mce/plugins/fullpage/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullpage/fullpage.htm,
+ .../tiny_mce/plugins/fullpage/js/fullpage.js,
+ .../tiny_mce/plugins/fullpage/langs/en_dlg.js,
+ .../tiny_mce/plugins/fullscreen/editor_plugin.js,
+ .../plugins/fullscreen/editor_plugin_src.js,
+ .../tiny_mce/plugins/fullscreen/fullscreen.htm,
+ .../tiny_mce/plugins/iespell/editor_plugin.js,
+ .../tiny_mce/plugins/iespell/editor_plugin_src.js,
+ .../tiny_mce/plugins/inlinepopups/editor_plugin.js,
+ .../plugins/inlinepopups/editor_plugin_src.js,
+ .../inlinepopups/skins/clearlooks2/img/alert.gif,
+ .../inlinepopups/skins/clearlooks2/img/button.gif,
+ .../inlinepopups/skins/clearlooks2/img/buttons.gif,
+ .../inlinepopups/skins/clearlooks2/img/confirm.gif,
+ .../inlinepopups/skins/clearlooks2/img/corners.gif,
+ .../skins/clearlooks2/img/horizontal.gif,
+ .../skins/clearlooks2/img/vertical.gif,
+ .../inlinepopups/skins/clearlooks2/window.css,
+ .../tiny_mce/plugins/inlinepopups/template.htm,
+ .../plugins/insertdatetime/editor_plugin.js,
+ .../plugins/insertdatetime/editor_plugin_src.js,
+ .../tiny_mce/plugins/layer/editor_plugin.js,
+ .../tiny_mce/plugins/layer/editor_plugin_src.js,
+ .../tiny_mce/plugins/media/css/content.css,
+ .../jscripts/tiny_mce/plugins/media/css/media.css,
+ .../tiny_mce/plugins/media/editor_plugin.js,
+ .../tiny_mce/plugins/media/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/media/img/flash.gif,
+ .../tiny_mce/plugins/media/img/flv_player.swf,
+ .../tiny_mce/plugins/media/img/quicktime.gif,
+ .../tiny_mce/plugins/media/img/realmedia.gif,
+ .../tiny_mce/plugins/media/img/shockwave.gif,
+ .../jscripts/tiny_mce/plugins/media/img/trans.gif,
+ .../tiny_mce/plugins/media/img/windowsmedia.gif,
+ .../jscripts/tiny_mce/plugins/media/js/embed.js,
+ .../jscripts/tiny_mce/plugins/media/js/media.js,
+ .../tiny_mce/plugins/media/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/media/media.htm,
+ .../tiny_mce/plugins/nonbreaking/editor_plugin.js,
+ .../plugins/nonbreaking/editor_plugin_src.js,
+ .../tiny_mce/plugins/noneditable/editor_plugin.js,
+ .../plugins/noneditable/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/css/content.css,
+ .../tiny_mce/plugins/pagebreak/editor_plugin.js,
+ .../plugins/pagebreak/editor_plugin_src.js,
+ .../tiny_mce/plugins/pagebreak/img/pagebreak.gif,
+ .../tiny_mce/plugins/pagebreak/img/trans.gif,
+ .../jscripts/tiny_mce/plugins/paste/blank.htm,
+ .../jscripts/tiny_mce/plugins/paste/css/blank.css,
+ .../tiny_mce/plugins/paste/css/pasteword.css,
+ .../tiny_mce/plugins/paste/editor_plugin.js,
+ .../tiny_mce/plugins/paste/editor_plugin_src.js,
+ .../tiny_mce/plugins/paste/js/pastetext.js,
+ .../tiny_mce/plugins/paste/js/pasteword.js,
+ .../tiny_mce/plugins/paste/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/paste/pastetext.htm,
+ .../jscripts/tiny_mce/plugins/paste/pasteword.htm,
+ .../tiny_mce/plugins/preview/editor_plugin.js,
+ .../tiny_mce/plugins/preview/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/preview/example.html,
+ .../tiny_mce/plugins/preview/jscripts/embed.js,
+ .../tiny_mce/plugins/print/editor_plugin.js,
+ .../tiny_mce/plugins/print/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/safari/blank.htm,
+ .../tiny_mce/plugins/safari/editor_plugin.js,
+ .../tiny_mce/plugins/safari/editor_plugin_src.js,
+ .../tiny_mce/plugins/save/editor_plugin.js,
+ .../tiny_mce/plugins/save/editor_plugin_src.js,
+ .../plugins/searchreplace/css/searchreplace.css,
+ .../plugins/searchreplace/editor_plugin.js,
+ .../plugins/searchreplace/editor_plugin_src.js,
+ .../plugins/searchreplace/js/searchreplace.js,
+ .../tiny_mce/plugins/searchreplace/langs/en_dlg.js,
+ .../plugins/searchreplace/searchreplace.htm,
+ .../tiny_mce/plugins/spellchecker/css/content.css,
+ .../tiny_mce/plugins/spellchecker/editor_plugin.js,
+ .../plugins/spellchecker/editor_plugin_src.js,
+ .../tiny_mce/plugins/spellchecker/img/wline.gif,
+ .../jscripts/tiny_mce/plugins/style/css/props.css,
+ .../tiny_mce/plugins/style/editor_plugin.js,
+ .../tiny_mce/plugins/style/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/style/js/props.js,
+ .../tiny_mce/plugins/style/langs/en_dlg.js,
+ .../jscripts/tiny_mce/plugins/style/props.htm,
+ .../jscripts/tiny_mce/plugins/table/cell.htm,
+ .../jscripts/tiny_mce/plugins/table/css/cell.css,
+ .../jscripts/tiny_mce/plugins/table/css/row.css,
+ .../jscripts/tiny_mce/plugins/table/css/table.css,
+ .../tiny_mce/plugins/table/editor_plugin.js,
+ .../tiny_mce/plugins/table/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/table/js/cell.js,
+ .../tiny_mce/plugins/table/js/merge_cells.js,
+ .../jscripts/tiny_mce/plugins/table/js/row.js,
+ .../jscripts/tiny_mce/plugins/table/js/table.js,
+ .../tiny_mce/plugins/table/langs/en_dlg.js,
+ .../tiny_mce/plugins/table/merge_cells.htm,
+ .../jscripts/tiny_mce/plugins/table/row.htm,
+ .../jscripts/tiny_mce/plugins/table/table.htm,
+ .../jscripts/tiny_mce/plugins/template/blank.htm,
+ .../tiny_mce/plugins/template/css/template.css,
+ .../tiny_mce/plugins/template/editor_plugin.js,
+ .../tiny_mce/plugins/template/editor_plugin_src.js,
+ .../tiny_mce/plugins/template/js/template.js,
+ .../tiny_mce/plugins/template/langs/en_dlg.js,
+ .../tiny_mce/plugins/template/template.htm,
+ .../tiny_mce/plugins/visualchars/editor_plugin.js,
+ .../plugins/visualchars/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm,
+ .../tiny_mce/plugins/xhtmlxtras/acronym.htm,
+ .../tiny_mce/plugins/xhtmlxtras/attributes.htm,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm,
+ .../tiny_mce/plugins/xhtmlxtras/css/attributes.css,
+ .../tiny_mce/plugins/xhtmlxtras/css/popup.css,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/del.htm,
+ .../tiny_mce/plugins/xhtmlxtras/editor_plugin.js,
+ .../plugins/xhtmlxtras/editor_plugin_src.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm,
+ .../tiny_mce/plugins/xhtmlxtras/js/abbr.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/acronym.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/attributes.js,
+ .../tiny_mce/plugins/xhtmlxtras/js/cite.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js,
+ .../plugins/xhtmlxtras/js/element_common.js,
+ .../jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js,
+ .../tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/about.htm,
+ .../jscripts/tiny_mce/themes/advanced/anchor.htm,
+ .../jscripts/tiny_mce/themes/advanced/charmap.htm,
+ .../tiny_mce/themes/advanced/color_picker.htm,
+ .../tiny_mce/themes/advanced/editor_template.js,
+ .../themes/advanced/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/advanced/image.htm,
+ .../tiny_mce/themes/advanced/img/colorpicker.jpg,
+ .../tiny_mce/themes/advanced/img/icons.gif,
+ .../jscripts/tiny_mce/themes/advanced/js/about.js,
+ .../jscripts/tiny_mce/themes/advanced/js/anchor.js,
+ .../tiny_mce/themes/advanced/js/charmap.js,
+ .../tiny_mce/themes/advanced/js/color_picker.js,
+ .../jscripts/tiny_mce/themes/advanced/js/image.js,
+ .../jscripts/tiny_mce/themes/advanced/js/link.js,
+ .../tiny_mce/themes/advanced/js/source_editor.js,
+ .../jscripts/tiny_mce/themes/advanced/langs/en.js,
+ .../tiny_mce/themes/advanced/langs/en_dlg.js,
+ .../jscripts/tiny_mce/themes/advanced/link.htm,
+ .../themes/advanced/skins/default/content.css,
+ .../themes/advanced/skins/default/dialog.css,
+ .../themes/advanced/skins/default/img/buttons.png,
+ .../themes/advanced/skins/default/img/items.gif,
+ .../advanced/skins/default/img/menu_arrow.gif,
+ .../advanced/skins/default/img/menu_check.gif,
+ .../themes/advanced/skins/default/img/progress.gif,
+ .../themes/advanced/skins/default/img/tabs.gif,
+ .../tiny_mce/themes/advanced/skins/default/ui.css,
+ .../themes/advanced/skins/o2k7/content.css,
+ .../tiny_mce/themes/advanced/skins/o2k7/dialog.css,
+ .../themes/advanced/skins/o2k7/img/button_bg.png,
+ .../advanced/skins/o2k7/img/button_bg_black.png,
+ .../advanced/skins/o2k7/img/button_bg_silver.png,
+ .../tiny_mce/themes/advanced/skins/o2k7/ui.css,
+ .../themes/advanced/skins/o2k7/ui_black.css,
+ .../themes/advanced/skins/o2k7/ui_silver.css,
+ .../tiny_mce/themes/advanced/source_editor.htm,
+ .../tiny_mce/themes/simple/editor_template.js,
+ .../tiny_mce/themes/simple/editor_template_src.js,
+ .../jscripts/tiny_mce/themes/simple/img/icons.gif,
+ .../jscripts/tiny_mce/themes/simple/langs/en.js,
+ .../themes/simple/skins/default/content.css,
+ .../tiny_mce/themes/simple/skins/default/ui.css,
+ .../tiny_mce/themes/simple/skins/o2k7/content.css,
+ .../themes/simple/skins/o2k7/img/button_bg.png,
+ .../tiny_mce/themes/simple/skins/o2k7/ui.css,
+ mod/tinymce/tinymce/jscripts/tiny_mce/tiny_mce.js,
+ .../tinymce/jscripts/tiny_mce/tiny_mce_popup.js,
+ .../jscripts/tiny_mce/utils/editable_selects.js,
+ .../tinymce/jscripts/tiny_mce/utils/form_utils.js,
+ .../tinymce/jscripts/tiny_mce/utils/mctabs.js,
+ .../tinymce/jscripts/tiny_mce/utils/validate.js,
+ mod/tinymce/views/default/embed/addcontentjs.php,
+ mod/tinymce/views/default/input/longtext.php,
+ mod/tinymce/views/default/tinymce/css.php,
+ mod/twitter/graphics/thewire_speech_bubble.gif,
+ mod/twitter/graphics/twitter.png, mod/twitter/languages/en.php,
+ mod/twitter/manifest.xml, mod/twitter/start.php,
+ mod/twitter/views/default/twitter/css.php,
+ mod/twitter/views/default/widgets/twitter/edit.php,
+ mod/twitter/views/default/widgets/twitter/view.php,
+ mod/twitterservice/languages/en.php, mod/twitterservice/manifest.xml,
+ mod/twitterservice/start.php, mod/twitterservice/vendors/twitter/license.txt,
+ mod/twitterservice/vendors/twitter/load.php,
+ mod/twitterservice/vendors/twitter/readme.txt,
+ mod/twitterservice/vendors/twitter/send.php,
+ .../vendors/twitter/twitter.class.php,
+ .../default/usersettings/twitterservice/edit.php,
+ mod/zaudio/audioplayer/audio-player.js, mod/zaudio/audioplayer/license.txt,
+ mod/zaudio/audioplayer/player.swf, mod/zaudio/manifest.xml,
+ mod/zaudio/readme.txt, mod/zaudio/start.php,
+ .../default/file/specialcontent/audio/mp3.php,
+ .../default/file/specialcontent/audio/mpeg.php,
+ .../default/file/specialcontent/audio/mpg.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php,
+ views/default/annotation/annotate.php,
+ views/default/annotation/generic_comment.php,
+ views/default/annotation/latest_comments.php,
+ views/default/canvas/default.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/one_column_with_sidebar.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/canvas_header/submenu_group.php,
+ views/default/comments/forms/edit.php, views/default/css.php,
+ views/default/css_ie.php, views/default/css_ie6.php,
+ views/default/entities/entity_list.php,
+ views/default/entities/entity_listing.php, views/default/friends/picker.php,
+ views/default/friends/river/create.php,
+ views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php, views/default/input/access.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php, views/default/js/initialise_elgg.php,
+ views/default/js/upload_js.php, views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/main_nav.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/topbar_tools.php,
+ .../notifications/settings/usersettings.php,
+ views/default/output/confirmlink.php, views/default/output/rss_view.php,
+ views/default/output/tags.php, views/default/output/url.php,
+ views/default/page_elements/breadcrumbs.php,
+ views/default/page_elements/content_header.php,
+ .../page_elements/content_header_member.php,
+ views/default/page_elements/contentwrapper.php,
+ views/default/page_elements/elgg_content.php,
+ views/default/page_elements/elgg_footer.php,
+ views/default/page_elements/elgg_header.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_contents.php,
+ views/default/page_elements/html_begin.php,
+ views/default/page_elements/html_end.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/spotlight.php,
+ views/default/page_elements/title.php, views/default/page_shells/default.php,
+ views/default/pageshells/pageshell.php, views/default/river/item/list.php,
+ views/default/river/item/wrapper.php, views/default/settings/system.php,
+ views/default/spotlight/default.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php, views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php: Pulled in the interface
+ changes.
+
+2010-03-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes file for 1.7 release.
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2010030101.sql,
+ version.php: Fixes #1562: Added a default value for entities.last_action in
+ the schema and as an upgraded. Bumped version number to 1.7 final.
+
+ * mod/search/search_hooks.php, mod/search/views/default/search/entity.php:
+ Updated the the default search entity view to check for users and groups and
+ properly display their profile icons.
+
+2010-03-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Fixing punctuation in upgrade strings.
+
+ * INSTALL.txt: Refs #1562: Updated requirements for Elgg.
+
+ * engine/lib/group.php: Fixes #1566: Rewriting calls to get_group_members()
+ to use 1.7's constant for site_guid.
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/tests/regression/trac_bugs.php: Fixes #1558: Applied Cash's patch.
+ Added unit tests to test for regressions for any bugs fixed in trac.
+
+ * engine/tests/objects/entities.php, engine/tests/objects/objects.php: Fixed
+ unit tests for exportable values after [3977].
+
+ * engine/lib/entities.php: Fixes #1563: Added time_updated and site_guid to
+ the export vals.
+
+ * mod/search/languages/en.php: Changed search language array variable name.
+
+2010-02-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Fixes #1540: Added site_guid to
+ get_user_access_collections().
+
+ * engine/lib/relationships.php: Refs #1553: Corrected profile link in
+ friending notification.
+
+ * engine/lib/tags.php: Fixes #1555: Added missing call to
+ elgg_get_registered_tag_metadata_names() and defined missing variable.
+
+ * engine/lib/actions.php: Added login to the list of actions not requiring a
+ security token.
+
+2010-02-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump.
+
+ * engine/lib/metadata.php, engine/tests/api/entity_getter_functions.php:
+ Fixes #1542: Pulled in Kevin's patch to add ability to sort by metadata.
+ Added unit tests for this.
+
+2010-02-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/tests/api/entity_getter_functions.php:
+ Refs #1543: Added support to have pass an array as a value in the
+ metadata_name_value_pair option of elgg_get_entities_from_metadata(). Added
+ unit tests for elgg_get_entities_from_metadata(). Cleaned up some
+ documentation for elgg_get_entities_from_metadata().
+
+2010-02-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/objects.php, engine/lib/users.php: Fixes
+ #1528: Correctly throwing exceptions for objects, groups, and users.
+
+2010-02-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: river plugin is defunct so does not
+ need to be enabled on install
+
+ * mod/diagnostics/actions/download.php, mod/diagnostics/start.php: Fixes
+ #1544: plugin hook for diagnostics now for entity "system"
+
+2010-02-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixes #1531: Correctly implemented dates for
+ friendly times. No more coding while watching the Olympics!
+
+2010-02-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/url.php: Fixes #1541: javascript now correctly
+ included in output/url view
+
+2010-02-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/xml/pageshells/pageshell.php: Fixes #1517 - let web server set
+ content length on xml files
+
+2010-02-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/elgglib.php, views/default/output/confirmlink.php,
+ views/default/output/url.php, views/default/page_elements/spotlight.php:
+ Deprecated elgg_validate_action_url() by elgg_add_action_tokens_to_url().
+ Updated elgg_deprecated_notice() to include the file & line of the caller.
+ Updated core to use elgg_add_action_tokens_to_url().
+
+2010-02-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/xml.php: Refs #1517: only encode <,>, and & for strings in xml
+
+2010-02-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, actions/admin/site/update_basic.php,
+ actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ actions/admin/user/resetpassword.php, actions/admin/user/unban.php,
+ actions/comments/add.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/remove.php,
+ actions/import/opendd.php, actions/login.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, actions/usersettings/save.php, actions/widgets/save.php:
+ Refs #1538: Removed action_gatekeeper() from action files in core.
+
+ * htaccess_dist: Fixes #1539: Removed line endings from htaccess_dist.
+
+2010-02-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, services/api/rest.php, services/api/rest_api.php:
+ Apache's MultiViews was matching the rest page handler incorrectly
+
+2010-02-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, languages/en.php: Refs #1531: Added full time and
+ dates to friendly time stamptes via acronym tags.
+
+ * mod/search/index.php, mod/search/search_hooks.php, mod/search/start.php:
+ Fixes #1523: Updated search to use ELGG_ENTITIES_NO_VALUE/ANY_VALUE and
+ removed some commented out code.
+
+2010-02-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixes #1421: Banning and unbanning users invalidates
+ the memcache entity.
+
+ * admin/user.php: Corrected fullview call in users admin section.
+
+ * views/default/js/initialise_elgg.php: Refs #1504: Removing revert option
+ from widget draggables to avoid fly away effect in IE 7.
+
+ * views/default/canvas/layouts/widgets.php: Fixed a bug in widget layouts
+ that caused the "edit page" link to not work if no widgets were defined.
+
+ * views/default/friends/picker.php: Fixes #1532: Added security tokens to
+ friend picker when in form mode.
+
+ * views/rss/pageshells/pageshell.php: Fixes #1535: Corrected double replace
+ for URL in RSS title view.
+
+ * engine/lib/access.php: Fixes #1519: Corrected site_guid in
+ create_access_collection().
+
+2010-02-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/entity_getter_functions.php: Getter API test: Moved the
+ setup and tear down into the construct and destruct methods. Fixed a few new
+ tests that were failing because of sorting by time.
+
+2010-02-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/user.php, dashboard/latest.php, engine/lib/activity.php,
+ engine/lib/admin.php, engine/lib/entities.php, engine/lib/export.php,
+ engine/lib/group.php, engine/lib/input.php, engine/lib/metadata.php,
+ engine/lib/notification.php, engine/lib/objects.php,
+ engine/lib/relationships.php, engine/lib/river2.php, engine/lib/sites.php,
+ engine/lib/users.php, index.php: Fixes #1488: Removed use of deprecated
+ functions in core.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/metadata.php,
+ engine/tests/api/entity_getter_functions.php: Refs #1523: elgg_get_entities()
+ uses the constants for defaults and conditionals. Added some tests to check
+ for no subtypes. Updated the documentation.
+
+ * engine/tests/api/entity_getter_functions.php, mod/diagnostics/index.php,
+ mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ mod/diagnostics/testreport.php, mod/diagnostics/unittester.php,
+ mod/diagnostics/views/default/diagnostics/test.php,
+ .../views/default/diagnostics/testresult.php: Fixes #1526: Big honking
+ warning added to unit tests. Getter test also deletes its subtypes now.
+
+ * mod/search/README.txt: Updated docs for search.
+
+ * engine/lib/actions.php: Fixes #1527: Logout doens't require an action
+ token. This is a temporary fix until #1509 is implemented.
+
+ * mod/search/search_hooks.php: Fixes #1499: User and group search default to
+ ignoring subtypes to return all entities.
+
+2010-02-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/index.php: Fixed incorrect variable calls in search.
+
+ * mod/search/search_hooks.php: Not using elgg_get_entities_from_metadata()
+ for tag search because of performance issues. Switched to custom WHERE /
+ JOINs with elgg_get_entities().
+
+ * engine/lib/elgglib.php: Removing embed extended view from core.
+
+2010-02-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, languages/en.php, mod/search/search_hooks.php,
+ views/default/output/tags.php: Cleaned up tag searching so you can search on
+ a specific tag. Useful in search so a tag in "Things I like" won't match a
+ tag in "Things I hate."
+
+2010-02-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Can't type hint for strings.
+
+ * CHANGES.txt, engine/lib/entities.php, engine/lib/tags.php,
+ mod/search/search_hooks.php: Closes #1506: Added
+ elgg_register_tag_metadata_name(), elgg_get_registered_tag_metadata_names(),
+ and ElggEntity::getTags(). Search on tags updated to use registered tag
+ names instead of hard-coded 'tags' metadata name.
+
+ * engine/lib/elgglib.php: Fixes #1510: Added elgg_get_file_list().
+ get_library_files() wraps to this function with a deprecation notice for any
+ plugin authors using it to auto-load files.
+
+ * engine/lib/api.php, engine/lib/elgglib.php, engine/lib/input.php,
+ engine/lib/mb_wrapper.php, engine/lib/pagehandler.php,
+ mod/search/views/default/search/listing.php: Fixes #1512: Using a helper
+ function for mb_parse_str() instead of wrapping it exactly.
+
+2010-02-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, languages/en.php: updated documentation on the REST
+ API user authentication
+
+2010-02-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/lib/elgglib.php, engine/lib/input.php,
+ engine/lib/mb_wrapper.php, engine/lib/pagehandler.php: Fixes #1501: Setting
+ ini for mbstring.internal_encoding to utf8 to work around a PHP bug. Replaced
+ calls to parse_str() with elgg_parse_str().
+
+ * views/default/navigation/pagination.php: Fixes #1507: $vars['baseurl']
+ used instead of undefined $baseurl in pagination view.
+
+2010-02-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: fixes #1505 - some lazy css was impacting opera for
+ checkboxes - overriding border and padding properties inherited from input
+ selector
+
+2010-02-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/url.php: Made the output/url view backward compatible
+ for the few plugins that used it.
+
+2010-02-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Remove version from default theme's css.
+
+2010-02-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/start.php: Fixes #1503, fixes #1474:
+ Library files are loaded using a hard-coded list to better deal with removed
+ files. Also, ~4% performance increase per page load on my server!
+
+ * mod/search/start.php: Correcting the corrected documentation.
+
+ * mod/search/start.php: Documentation correction in search.
+
+2010-02-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php, mod/crontrigger/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/garbagecollector/manifest.xml,
+ mod/htmlawed/manifest.xml, mod/logbrowser/manifest.xml,
+ mod/logrotate/manifest.xml, mod/search/manifest.xml,
+ mod/uservalidationbyemail/manifest.xml: Updated copyright for core plugin
+ manifests.
+
+ * engine/lib/access.php, engine/tests/api/entity_getter_functions.php: Fixes
+ #1496: delete_access_collection() invalidates the access collection cache
+ before attempting to delete. Removed a misplaced unset() in a unit test that
+ was causing test objects not to be properly deleted.
+
+2010-02-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/settings/system.php: finished the fix to #1492
+
+ * languages/en.php: more user friendly section title on user stats page
+
+ * languages/en.php: fixed punctuation issue on install instructions
+
+ * engine/lib/api.php, languages/en.php: tweaked some documentation on the
+ REST API
+
+2010-02-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Correcting documentation for
+ elgg_get_entities_from_metadata().
+
+2010-02-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/header.php: & replaced by &amp; in the header and
+ alt added to some header graphics
+
+ * CONTRIBUTORS.txt: updated
+
+2010-02-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/api/entity_getter_functions.php, engine/tests/suite.php: Refs
+ #1200: Added tests to test for false being returned with elgg_get_entities().
+ Disabled execution time during unit tests.
+
+ * actions/systemsettings/install.php, engine/lib/ping.php, languages/en.php,
+ views/failsafe/settings/system.php: Fixes #1492: Removed usage info
+ collecting from installation.
+
+ * engine/schema/mysql.sql: Fixes #1493: Updated schema to set auto_increment
+ IDs for access_collections to 3 to avoid overwriting default values with
+ group / shared access ACLs.
+
+ * views/default/css.php: Fixes #1491: Removed mistakingly assigned
+ input-password with input-textarea.
+
+2010-02-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/version.php: missing new on upgrade_details object creation
+
+ * engine/lib/elgglib.php: fixes #1486 - elgg_dump now works when sending to
+ server error log
+
+2010-02-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Fixes #1404: Added input-password rules in default
+ css.
+
+2010-02-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, languages/en.php: Fixes #1483: Reset password emails
+ forward to a confirmation page handler instead of directly to an action.
+
+ * engine/lib/pageowner.php: Fixes #1212: Removed unused code.
+
+ * engine/lib/elgglib.php: Fixes #1486: elgg_log() can now log arrays and
+ objects to error_log().
+
+ * engine/lib/xml-rpc.php: Fixes #1319: Applied patch for missing xml-rpc
+ <value> tag.
+
+ * CHANGES.txt, engine/lib/elgglib.php,
+ views/default/navigation/pagination.php, views/default/river/item/list.php:
+ Fixes #1481: Applie Mike's patch and created function
+ elgg_http_add_url_query_elements() to handle what the pagination view was
+ trying to do.
+
+2010-02-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: updated copyright to 2010
+
+2010-02-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/tests/api/entity_getter_functions.php: Refs #1200: Changed logic in
+ elgg_get_entity_type_subtype_where_sql() to return FALSE if there are no
+ valid subtypes passed. Ignores all invalid subtypes. Added (partial) tests
+ for elgg_get_entities() types and subtypes.
+
+2010-02-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * INSTALL.txt: updated install instructions to encourage more use of the
+ wiki instructions/troubleshooting and discourage setting data directory to
+ 777 as default
+
+ * views/rss/pageshells/pageshell.php: fixed a comment in rss pageshell
+
+2010-02-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: PHP complains about not casting the timestampt
+ to int for use in date().
+
+ * engine/lib/metadata.php: Added error checking to
+ clear_metadata_by_owner().
+
+ * engine/lib/entities.php: Fixed incorrect variable for subtype in
+ get_entity_dates().
+
+ * views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php: Fixes #1328: Removed rows and cols
+ from the installation textareas and added CSS to format width/height at 100%
+ to make it easier to read and select.
+
+ * engine/lib/elgglib.php: Fixes #340: add_menu() and make_register_object()
+ deprecated.
+
+ * engine/lib/languages.php: Fixes #1166. get_installed_translations() only
+ calculates completion if admin is logge din.
+
+ * CHANGES.txt, engine/lib/entities.php: Fixes #1406: get_entity_dates()
+ supports order by.
+
+ * engine/lib/database.php: Adding some \ns between the SQL error and the
+ query in the database exception.
+
+ * engine/lib/input.php: Fixes #1398: autop() doesn't call missing
+ clean_pre() function.
+
+ * CHANGES.txt, engine/lib/entities.php: Fixes #1376: added
+ ElggEntity::removeRelationship().
+
+ * engine/lib/elgglib.php: Fixes #1478: uh....how did that get in there?
+
+ * engine/lib/elgglib.php: Fixes: #1475. elgg_http_build_url() correctly
+ sets port number.
+
+ * engine/lib/filestore.php: Fixes #1314: Filestore opens read-only with rb
+ instead of r+b.
+
+ * actions/email/save.php: Refs #1290: Changed email addresses are checked in
+ action:email/save
+
+ * engine/lib/elgglib.php: Fixes #1261: Exceptions force an HTTP recache.
+
+ * CHANGES.txt, engine/lib/relationships.php: Fixes #1213:
+ delete_relationship() triggers delete:relationship hook.
+
+ * engine/lib/pageowner.php: Fixes #1211: page_owner() sets the page owner
+ after figuring it out.
+
+ * engine/lib/entities.php: Updated documentation for elgg_get_entities().
+
+ * CHANGES.txt, engine/lib/entities.php: Fixes #1325:
+ ElggEntities::countEntitiesFromRelationship() support inverse relationships.
+
+ * engine/lib/users.php, views/default/account/forms/login.php: Fixes #1473:
+ Simple patch to create a view for the registration page.
+
+ * engine/lib/annotations.php: Fixed incorrect deprecated warning.
+
+ * engine/lib/elgglib.php: Refs #1079: elgg_view() casts view to a string
+ before attempting to call views.
+
+ * engine/lib/users.php: Fixes #678. Friending appears in the river for
+ invited new users.
+
+ * engine/lib/entities.php: Put the can_write_to_container() plugin hook in
+ the right place after [3871].
+
+ * CHANGES.txt, engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/metadata.php, engine/lib/objects.php,
+ engine/lib/relationships.php, engine/lib/sites.php, engine/lib/users.php,
+ views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php: Add elgg_deprecated_notice() so we
+ don't have to re-write all the elgg_log() deprecated notices to
+ register_error()s. Updated current ones to use this.
+
+2010-01-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/listing.php: Removing var_dump().
+
+ * CHANGES.txt, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php,
+ mod/search/views/default/search/listing.php,
+ views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php: Deprecated old search functions and
+ views.
+
+ * CHANGES.txt, engine/lib/entities.php: Fixes #1164:
+ can_write_to_container() now sends default values through
+ container_permissions_check hook.
+
+ * mod/htmlawed/start.php: htmlawed no longer creates tags with extra spaces
+ (<p >).
+
+ * views/rss/pageshells/pageshell.php: Fixes #1289: Pragma: public header
+ added for RSS feeds.
+
+ * engine/lib/users.php: Fixes #804: A relationship is created between a new
+ user and the site it was created on.
+
+ * engine/lib/elgglib.php, views/default/navigation/pagination.php,
+ views/default/navigation/viewtype.php, views/default/river/item/list.php:
+ Fixes #959: Added elgg_http_remove_url_query_element() to remove a GET
+ element instead of using faulty regexp.
+
+2010-01-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Changed array_key_exists() to isset() in
+ elgg_validate_action_url().
+
+ * engine/lib/elgglib.php: Added checking for $query array in
+ elgg_validate_action_url().
+
+ * engine/lib/input.php: Setting a default value to avoid notices.
+
+ * mod/htmlawed/start.php, mod/htmlawed/vendors/htmLawed/htmLawed.php,
+ mod/htmlawed/vendors/htmLawed/htmLawedTest.php,
+ mod/htmlawed/vendors/htmLawed/htmLawed_README.htm,
+ mod/htmlawed/vendors/htmLawed/htmLawed_README.txt,
+ .../vendors/htmLawed/htmLawed_TESTCASE.txt: Fixes #1425, Fixes #1341:
+ Upgraded htmlawed to latest. Altered the htmlawed attribute filtering
+ function to return <attr="val"> for proper linking in parse_urls(). Added
+ background-color as a non-filtered style attribute.
+
+ * engine/lib/input.php: Refs #1425: Cleaned up regexp for parlse_urls().
+
+2010-01-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Fixes #1468: Cleaned up logic for enabling and
+ disabling plugins. Checking for arrays when metadata returns only a single
+ enabled plugin.
+
+ * admin/plugins.php, mod/diagnostics/index.php, mod/logbrowser/index.php:
+ Removed unneeded owner block icons from admin.
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2010012901.sql,
+ version.php: Added db migration 2010012901 that adds last_action column to
+ entities table. Bumped version number to 1.7b (2010012901).
+
+ * CHANGES.txt, engine/lib/relationships.php: Fixes #1472:
+ get_entity_relationships() supports inverse relationships.
+
+ * engine/lib/elgglib.php: Fixes #1470, Fixes #1471:
+ elgg_view_regenerate_simplecache() no longer triggers the pagesetup/system
+ hook. Fixes problems with creating the submenu.
+
+2010-01-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Corrected clear_plugin_setting() to only remove a
+ single plugin setting instead of all setting for a plugin. Added
+ clear_all_plugin_settings() to remove all settings for a plugin.
+
+2010-01-28 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: changed my email address to web site in contributors
+ file
+
+2010-01-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/useradd.php, engine/lib/users.php: Fixes #1049, Fixes #1435:
+ Admin-created users and first admin user are marked as validated to prevent
+ inaccurate "Please validate your account" messages and emails.
+
+2010-01-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/annotations.php, engine/lib/river2.php: Fixes
+ #1419: Added remove_from_river_by_annotation(). Deleting annotations now
+ deletes their river entry.
+
+ * CHANGES.txt: Updated changes.
+
+ * engine/lib/elgglib.php: Fixes #1465: Added unregister_event_handler() and
+ unregister_plugin_hook().
+
+ * engine/lib/sessions.php: Fixes #1464: A new session is created in logout()
+ after destorying the old session to display old $_SESSION['msg'] messages.
+
+2010-01-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes for the display name change.
+
+ * actions/user/name.php, languages/en.php,
+ views/default/user/settings/name.php: Display names are limited to 50 chars
+ and have HTML tags removed.
+
+ * README.txt: Bumped version number in README.
+
+ * views/default/css.php: Fixed a typo in css that broke everything in FF
+ 3.6.
+
+ * CHANGES.txt, engine/lib/plugins.php, languages/en.php: Fixes #1454:
+ Applied Cash's patch. Bad plugins are automatically disabled and a notice is
+ displayed instead of breaking the site.
+
+2010-01-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, engine/lib/input.php: Fixes #1450, Fixes #1461:
+ Using $_SERVER['REQUEST_URI'] to pull in GET params on apache servers.
+
+2010-01-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Correctly forwarding messages among multiple
+ forwards (action_gatekeeper() -> index -> dashboard would drop messages
+ generated in action_gatekeeper()).
+
+ * actions/systemsettings/install.php: Refs #1450, Refs #1461, Refs #1460:
+ Install now clears out views caches.
+
+ * mod/diagnostics/start.php: Masking dbpassword in dianostics file.
+
+ * engine/lib/actions.php: Fixes #1460, Fixes #1459: Tokens are not required
+ to disable a plugin or install. This allows users to disable plugins that
+ overwrite admin pages without tokens.
+
+ * views/failsafe/input/form.php, views/failsafe/input/securitytoken.php:
+ Refs #1459: Added missing security tokens for failsafe (installation) view.
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, actions/admin/user/ban.php,
+ actions/admin/user/delete.php, actions/admin/user/makeadmin.php,
+ actions/admin/user/removeadmin.php, actions/admin/user/resetpassword.php,
+ actions/admin/user/unban.php, actions/email/save.php,
+ actions/entities/delete.php, actions/register.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, actions/usersettings/save.php: Removing calls to
+ engine/start.php in action files.
+
+ * CODING.txt: Added best practices to CODING.txt.
+
+2010-01-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/object/default.php: Fixed missing ) causing a WSOD.
+
+ * views/default/admin/user_opt/search.php: Fixes #1455: Updated search URL
+ for admin user search. (The old one worked, but didn't limit to users.)
+
+2010-01-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../actions/email/confirm.php, mod/uservalidationbyemail/manifest.xml,
+ mod/uservalidationbyemail/start.php: Changed uservalidationbyemail to not use
+ an action and cleaned up some of its code.
+
+ * engine/lib/elgglib.php: Fixed a bug preventing messages and warnings from
+ passing during a forward().
+
+2010-01-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/basic_elements/welcome.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/welcome/logged_in.php: Updated views to use output/url with
+ action flag set.
+
+ * views/default/output/action_link.php, views/default/output/url.php:
+ Removed output/action_link view as it duplicated much of output/url. Improved
+ output/url view.
+
+ * engine/lib/metadata.php: Corrected a possible SQL insertion bug in
+ elgg_get_entity_metadata_where_sql().
+
+ * engine/lib/filestore.php: Fixing bug in resizing function that would
+ incorrectly attempt to crop a picture that was smaller than the target image.
+
+
+ * engine/lib/elgglib.php: Changed default declaration of $vars in
+ elgg_view() to array().
+
+ * views/default/object/default.php: Fixed a typo causing a WSOD.
+
+ * engine/lib/actions.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/basic_elements/welcome.php,
+ views/default/canvas/layouts/widgets.php, views/default/css.php,
+ views/default/object/default.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/spotlight.php,
+ views/default/welcome/logged_in.php: Fixes #750: All actions require
+ __elgg_ts and __elgg_token.
+
+ * engine/lib/elgglib.php: elgg_http_build_query() now supports ports.
+ Checking for __elgg_ts also in elgg_validate_action_url(). Fixed a spelling
+ mistake ;)
+
+ * views/default/output/action_link.php: Adding a view to generate action
+ links for single-click actions.
+
+2010-01-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/listing.php: Fixing bugs in search that
+ would break pagination.
+
+ * views/rss/navigation/pagination.php: Refs #1161: Added empty pagination
+ view for RSS feeds.
+
+ * engine/lib/filestore.php: Resetting cropping coords for images that can't
+ be cropped in filestore.
+
+ * engine/lib/filestore.php: Fixes #1445:
+ get_resized_image_from_existing_file() has an optional parameter to allow
+ upscaling if requested image is larger than original image.
+
+ * engine/lib/entities.php: Fixed documentation for time created and modified
+ params in elgg_get_entities().
+
+2010-01-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/search_hooks.php: Removing order by clause for now in search.
+
+ * CHANGES.txt: Updated CHANGES for #1414.
+
+2010-01-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/page_elements/searchbox.php: Stripping slashes on output
+ of original search query.
+
+ * mod/search/start.php: Allowing no table prefix in
+ search_get_search_where_sql()
+
+ * mod/search/start.php: Fixed incorrect order by for search sorting.
+
+ * mod/search/index.php, mod/search/search_hooks.php, mod/search/start.php:
+ Fixed an incorrect var name that caused a bug when hooking against a type but
+ not a subtype. Added first pass at results sorting.
+
+ * mod/search/README.txt, mod/search/index.php, mod/search/start.php,
+ mod/search/views/default/search/layout.php: Removed unnecessary view
+ directories. Added option of overriding the default layout for search
+ queries. Updated documentation reflecting those changes. Clarified some
+ points in the documentation.
+
+ * engine/lib/elgglib.php: Added checking and an ERROR log if elgg_view() is
+ passed a non-array $vars.
+
+2010-01-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: Updated contributors with entire MITRE team.
+
+2010-01-13 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Creating a helper function to return INI values in
+ bytes.
+
+2010-01-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixes #1414: Metadata set to a falsy value
+ (except NULL) returns TRUE for isset($obj->md).
+
+2010-01-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/metadata.php,
+ engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php,
+ engine/tests/objects/objects.php, engine/tests/objects/users.php: closes
+ #1145 - deprecated current "copy constructor" for all entities and
+ implemented a clone method. The clone copies over all metadata but not
+ annotations and private settings. It sets the guid to 0 so saving the cloned
+ entity creates a new database record. The ownership/access of metadata is set
+ during the save and will be the same as that of the entity.
+
+2010-01-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/rss/search/entity.php: Cleaned up RSS entity view for
+ search a bit.
+
+ * mod/search/index.php, mod/search/views/rss/search/entity.php,
+ mod/search/views/rss/search/listing.php: Added phpdoc header to index.php
+ Added RSS support to search. Nifty.
+
+2010-01-11 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/output/confirmlink.php: Always
+ generating action tokens with output/confirmlink. Includes a check for
+ actions already defining the tokens.
+
+2010-01-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/README.txt: Fixed a few spelling mistakes. Added descriptions
+ for the vars in 3.2
+
+ * engine/lib/relationships.php: Sanitising relationship in
+ elgg_get_entities_from_relationship();
+
+ * views/default/output/tags.php: Fixed tag output link for new search.
+
+ * mod/search/README.txt, mod/search/index.php, mod/search/start.php,
+ .../views/default/search/comments/entity.php,
+ .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/entity.php,
+ mod/search/views/default/search/listing.php: Pulling out entity views in
+ search. Adding dev documentation.
+
+2010-01-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fixes #1399: Case sensitivity was never in the
+ deprecated function, so no need to add it. Use the new functions if
+ required.
+
+ * engine/lib/metadata.php: Fixes #538. Applied Cash's patch. This is an old
+ one...jeepers.
+
+ * engine/lib/metadata.php: Fixes #1375: Metadata names and values are
+ properly escaped.
+
+2010-01-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #1400: Fixed a typo in checking the
+ site_guid. Can't duplicate #1400 now, so possible fix for that. Waiting for
+ other tests to close this one.
+
+ * languages/en.php: Updated language file to reflect default prefix change.
+
+ * views/failsafe/messages/sanitisation/settings.php: Changed default prefix
+ to 'elgg_' for table name readability.
+
+ * actions/systemsettings/install.php, engine/lib/input.php: Fixes #1172: URL
+ now checked for trailing slash upon installation.
+
+2010-01-06 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009102801.php: Fixing an upgrade issue relating from
+ invalid (non-existent) usernames
+
+2010-01-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2010010501.php, version.php: Added an upgrade to
+ enable the search plugin. Bumped internal version number.
+
+2010-01-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Set admin user's validation upon initial
+ registration. Fixes an incorrect error message if the first admin user enters
+ the wrong password.
+
+2009-12-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Closes #1424: Faulty database migrations will now
+ halt an upgrade.
+
+ * engine/lib/metadata.php: Removed debug data.
+
+ * engine/schema/upgrades/2009100701.sql: Removed lock tables from db utf8
+ migration because it fails on some (all?) servers.
+
+2009-12-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/access.php, views/default/input/button.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/tags.php, views/default/output/confirmlink.php,
+ views/default/page_elements/header.php: a little cleanup of documentation and
+ variable handling in input and output views
+
+ * entities/index.php: removed unused variable in entities index
+
+ * engine/lib/group.php: fixed #1087 - is_group_member() now returns boolean
+ values only
+
+ * engine/lib/entities.php: fixes #988 - subtype is now available on new
+ entities after being saved
+
+2009-12-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: fixed bug where array of messages passed to
+ system_messages caused execution to stop - also displaying only errors if
+ they exist rather than having success and error messages overlapping each
+ other
+
+ * engine/lib/users.php: fixes #1322 - "remember me" cookie code is cleared
+ when a user is banned
+
+ * views/default/page_elements/header.php,
+ views/failsafe/pageshells/pageshell.php: fixes #1193 - now specify charset in
+ both metatag and http header
+
+ * engine/lib/database.php: cleaned up logic on db query cache
+
+ * engine/lib/entities.php: fixed typo in list_entities()
+
+2009-12-18 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Clarified the documentation for
+ add_entity_relationship().
+
+2009-12-18 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/comments/add.php: add comment action now using get_loggedin_user()
+ rather than $_SESSION['user']
+
+ * views/default/input/form.php: added js to input/form
+
+ * engine/lib/actions.php, engine/lib/pagehandler.php: better parsing of
+ query for action and page handlers
+
+2009-12-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/mb_wrapper.php: perhaps this is what Brett intended with the
+ new mb_wrapper code
+
+ * views/default/input/button.php, views/default/input/form.php,
+ views/default/input/submit.php, views/default/input/text.php: fixed notices
+ caused by some input views
+
+ * engine/lib/database.php: fixed warning due to database query cache
+
+ * engine/lib/entities.php: when asking for a count of entities, we now
+ return an integer rather than a string
+
+ * engine/lib/elgglib.php: get_submenu was throwing out tons of notices -
+ this should be fixed now
+
+ * views/default/css.php: fixes #951 - using background-color rather than
+ background
+
+2009-12-16 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: better version of
+ get_resized_image_from_existing_file() - fixes #685 - more robust to errors,
+ and fixes a memory leak - tested with both profile photos and file plugin
+ photos - old installs will still have profile icons of the wrong size due to
+ #685
+
+ * engine/lib/input.php: added comments on get_input and set_input since they
+ do not handle nested arrays
+
+2009-12-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: Fixes #1413: New server test.
+
+2009-12-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: closes #1277 - display_tagcloud() now has same
+ parameters as get_tags()
+
+ * views/default/output/tagcloud.php: fixes #1197 - no division by zero
+ warning any longer
+
+ * views/default/account/forms/login.php,
+ views/default/account/forms/register.php: easier to extend login and
+ registration forms now
+
+ * CHANGES.txt: updated CHANGES.txt with info on river table
+
+ * engine/tests/services/api.php: fixed line endings on services api unit
+ tests
+
+ * languages/en.php: added some missing language strings
+
+2009-12-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: closes #1244 - checking whether file exists before
+ deleting it in cache
+
+ * views/default/friends/collectiontabs.php: closes #1226 - fixes eclipse
+ validation error
+
+ * languages/en.php, views/default/admin/user_opt/search.php: fixes #1230 -
+ spelling corrected
+
+ * engine/lib/access.php: using defines for ACCESS values - closes #1064
+
+ * mod/htmlawed/start.php: removes @ from include - closes #879
+
+ * actions/admin/user/ban.php: removes unused variables - closes #1129
+
+2009-12-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: minor tweak in comment - closes #1264
+
+ * views/default/css.php, views/default/page_elements/owner_block.php: fixes
+ #973 - pulls reported content and bookmark code out of core owner_block view
+ - left images in _graphics since themes probably depend on that and did not
+ want to break themes
+
+ * engine/lib/relationships.php: fixes #1323 and #1186 - PHP 5.3 requires
+ magic methods to be public
+
+2009-12-08 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/users.php,
+ engine/tests/objects/users.php: fixes #1305 - user and entity cache now
+ cleared on delete
+
+ * engine/lib/sessions.php, languages/en.php: gatekeeper functions now
+ display helpful messages - closes #1060
+
+ * engine/lib/group.php: fixes #1287 - users now removed from group acl when
+ leaving group - changed order of event and relationship removal
+
+ * .../canvas/layouts/two_column_right_sidebar.php, views/default/css.php:
+ fixes #537 - missing area3 added to two_column_right_sidebar - also added
+ enough css so that the login page works with right sidebar
+
+2009-12-07 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Adding alias ElggSession methods
+
+2009-12-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: fixes #1187
+
+ * actions/comments/add.php, languages/en.php: fixes #1018 - blank comments
+ are now rejected
+
+ * views/default/input/form.php, views/failsafe/input/form.php,
+ views/failsafe/messages/sanitisation/settings.php: fixes #1183 - correct case
+ for form method now
+
+ * engine/lib/elgglib.php: fixed issue where php notices were written to log
+ on any debug level and added a plugin hook so plugins can direct elgg_log
+ messages where they want
+
+ * actions/login.php: fixed warning on access of array index that did not
+ exist in session global
+
+ * engine/lib/access.php: removed code that wasn't doing anything in
+ access.php
+
+ * engine/lib/relationships.php: fixed typo in
+ get_entities_from_relationship()
+
+2009-12-05 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/start.php: adding more security to the user
+ validation by email code - before people could fake the validation with
+ knowledge of the code making it possible for bots to register and validate
+ without an email address
+
+ * engine/lib/annotations.php: get_entities_from_annotations was ignoring
+ group_guid - setting container_guid now
+
+ * mod/htmlawed/start.php: fixed trivial bug in htmlawed plugin. The ;
+ delimiter should only be used between sets of schemes (protocols). This is
+ due to some slightly lazy coding in htmlawed.
+
+ * engine/lib/sessions.php: if there is already a user in the session, we
+ don't need to set the code from the cookie
+
+ * engine/lib/plugins.php: fixed bug introduced in [3608]
+
+ * languages/en.php, views/default/annotation/annotate.php: fixed bug in
+ comment river view due to missing }
+
+2009-12-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: fixes #1273 - replaced previous hack with call to
+ getType
+
+ * engine/lib/api.php, engine/tests/services/api.php: fixes #1397 and updates
+ unit tests - comma was missing
+
+2009-12-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: fixes #1396 - thanks for reporting this
+
+2009-12-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/search_hooks.php: Stripping tags to remove HTML on title and
+ description for comment search.
+
+ * mod/search/search_hooks.php: Removed a line breaking description for
+ comments in search.
+
+ * mod/search/search_hooks.php: Comments' search hook now correctly trims
+ description and title.
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php: Removed pagination from top of
+ results.
+
+ * engine/lib/elgglib.php: Trimming the paths when detecting which nav item
+ to mark as selected.
+
+2009-12-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/listing.php: Search types without a
+ subtype now display properly.
+
+ * engine/lib/elgglib.php: Changed the way the sidebar nav "selected" class
+ is applied. Should yield more accurate results if the URIs aren't exactly
+ the same.
+
+ * CHANGES.txt: Removed duplicate changes entry.
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php: Changed avatar size to small in
+ search results. Fixed a bug so comment owners' avatars show up instead of
+ commented entity's owners' avatars.
+
+2009-12-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/usersettings.php, languages/en.php: closes #876 - profile
+ language strings moved to profile plugin
+
+2009-11-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/listing.php: Added pagination to comments
+ view.
+
+ * mod/search/search_hooks.php, mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/tags/listing.php: Removed tag search listing.
+ Added ability to provide extra info in searches as 'search_matched_extra'.
+ Allowing overrides for titles.
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php: If a search result returns a
+ user, make the icon be for the user and not the owner (which is no one)
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/tags/listing.php: Listings use profile/icon
+ view instead of calling icon directly.
+
+2009-11-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/entity_list.php: search results view
+ tweaked
+
+2009-11-24 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixing a bug resulting from get_loggedin_user()
+ return FALSE. This bug could throw a fatal error to non-loggedin users.
+
+ * engine/tests/test_skeleton.php: Adding documentation to the unit test
+ skeleton file.
+
+2009-11-24 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: entities can now have metadata of 0 and return
+ the correct type. Fixes #1192
+
+ * dashboard/latest.php: dashboard latest wasn't specifying fullview as false
+
+ * engine/lib/languages.php: fixes 1315 - language static now being set
+ correctly
+
+ * engine/lib/entities.php: fixes #935
+
+ * engine/lib/users.php: made the get user friends objects functions
+ consistent and added some missing documentation - no api usage changes
+
+2009-11-23 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, engine/lib/users.php,
+ engine/tests/objects/filestore.php: Deleting a user will remove all user
+ files. Fixes #607
+
+2009-11-22 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/remove.php: remove friend action, return user to the place
+ the action was triggered
+
+ * actions/friends/add.php: when friending another user, return to the page
+ you carried out the action
+
+2009-11-21 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/relationships.php: fixes #1374 - owner_guid wasn't being set
+ correctly in options array
+
+ * engine/lib/metadata.php: get_entities_from_metadata_multi() had bad option
+ keys - related to #1374.
+
+ * engine/lib/users.php: fixes #1380 - get_user_friends() was being called
+ with subtype of desired objects in get_user_friends_objects() - thanks for
+ the report
+
+2009-11-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed a bug with group by and order by in
+ elgg_get_entities. #ElggCampBA
+
+2009-11-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: updated some documentation on
+ register_page_handler(). This fixes #1373
+
+2009-11-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: updating the contributors file
+
+2009-11-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bump.
+
+2009-11-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/tags/listing.php: 'More' links on serarch
+ results moved, and link added to Tag results
+
+ * .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/tags/listing.php: Search UI cleaned up
+
+2009-11-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/views/default/search/listing.php: Fixed typo to display the
+ type of search.
+
+ * actions/systemsettings/install.php, views/default/site/default.php: Added
+ an INSTALLING constant when installing. Fixed a bug when trying to export a
+ site that causes the browser to redirect to the site's url, which caused the
+ installation process to skip past the "create your admin user" prompt when
+ "ping home" was checked.
+
+2009-11-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/start.php: Added a missing elgg_strlen() in
+ search_remove_ignored_words()
+
+ * CHANGES.txt: Updated changes file with search and user data storage info.
+
+
+2009-11-14 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: fixes #1169 as described on ticket
+
+ * CHANGES.txt, engine/lib/api.php: updated documentation of API functions -
+ perhaps ready for developer preview
+
+2009-11-13 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/jquery/jquery-ui-1.7.2.min.js: Including jQuery UI 1.7.2 in core.
+ The custom build did not contain all the features we would like to have.
+ Leaving the custom build in place for community additions.
+
+ * engine/lib/annotations.php: Properly ordering annotation objects returned
+ by Elgg methods.
+
+ * search/index.php: Creating a redirect page for legacy themes using search.
+
+
+2009-11-13 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/services/api.php: more test cases related to #1364.
+
+ * engine/lib/api.php, engine/tests/services/api.php: should fix #1364 and
+ added relevant unit test cases for this bug (yeah for unit tests)
+
+2009-11-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: fixed typo with handling web services request
+ parameters
+
+ * engine/lib/api.php: rest api parameters can now have default values
+
+2009-11-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/entities/entity_listing.php,
+ views/default/entities/gallery_listing.php: Fixes: #1356. Reverted
+ search_listing to entity_listing for theme support.
+
+2009-11-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, languages/en.php: added a nonce to hmac signature and
+ header so same call in same second does not get caught by replay check
+
+2009-11-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/mb_wrapper.php: Accidentally removed the eval with my debug
+ statements.
+
+ * engine/lib/mb_wrapper.php: Wrapped all multibyte functions that are
+ directly interchangable with non mb functions with elgg_*().
+
+2009-11-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: fixes #1286 - ElggPlugin get() wasn't handling "0"
+ and returning null instead
+
+2009-11-12 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009102801.php: Data migration: Disabled execution
+ time and clearing out caches to avoid OOM errors.
+
+2009-11-12 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river2.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2009091901.sql: fixes #1329 - schema for river is
+ fixed - was incomplete before
+
+2009-11-11 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: fixes #1339 - elgg_view_exists now handles view
+ extensions for non-default viewtypes (for one level of recursion)
+
+ * engine/lib/elgglib.php: get_views deprecated for elgg_get_views (just to
+ be consistent with views api)
+
+2009-11-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/page_elements/title.php, views/json/page_elements/title.php,
+ views/rss/page_elements/title.php: these viewtypes need an empty title view
+ or html shows up because they fallback on default view
+
+2009-11-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/start.php: Removing explicit MySQL 5.1-specific 'IN NATURAL
+ LANGUAGE MODE' option.
+
+2009-11-10 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009102801.php: Using php default functions instead of
+ ElggUser in upgrade script. Large Elgg sites could not handle the "select *
+ from users" query without hitting memory limit.
+
+2009-11-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/elgglib.php, engine/lib/usersettings.php,
+ mod/logbrowser/start.php, mod/search/start.php: elgg_extend_view() replaces
+ extend_view()
+
+ * engine/lib/elgglib.php: updated documentation of functions used in
+ creating the topbar tools dropdown menu
+
+2009-11-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/start.php, mod/search/views/default/search/css.php: Sorting
+ search contexts by longest related substring. Added more pretty highlight
+ colors.
+
+ * mod/search/start.php: Fixed displaying of ...s in search.
+
+ * mod/search/index.php: I hate you search.
+
+ * mod/search/index.php: Missed an htmlspecialchars().
+
+ * mod/search/index.php, mod/search/start.php: Removed unneeded url_encode()s
+ for links.
+
+ * mod/search/start.php: Underscores. grr.
+
+ * mod/search/start.php: Adjusted default context length to 500. Added url
+ decoding to needle string.
+
+ * mod/search/search_hooks.php, mod/search/start.php: Trying out the new
+ context grabbing function in search.
+
+2009-11-10 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/service_handler.php, engine/lib/api.php, htaccess_dist:
+ introducing a new web services handler
+
+ * engine/lib/notification.php: do not register notification rest api calls
+ by default since no other apis exposed not directly related to the api
+
+ * views/json/api/output.php: leaner json objects for web services api calls
+
+2009-11-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/search_hooks.php: For real this time.
+
+ * mod/search/search_hooks.php: Sanitising string on tag search.
+
+ * mod/search/search_hooks.php, mod/search/start.php: Sanitising strings to
+ avoid sql insertion hacks.
+
+ * mod/search/index.php, mod/search/search_hooks.php, mod/search/start.php,
+ .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php: Updated search to allow
+ filtering of results by clicking on submenu items. Fixes #1358: Using raw
+ mysql_query() / fetch() to get ft_min/max vars since they aren't set on some
+ versions of MySQL.
+
+ * engine/lib/entities.php: Ignoring empty owner_guids in elgg_get_entities.
+
+ * engine/lib/elgglib.php: Removed old code from get_submenu().
+
+ * CODING.txt: Added deprecation procedures to coding standards.
+
+2009-11-09 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: updated changes.txt
+
+ * engine/lib/api.php: REST api hmac signature encoding now compatible with
+ Amazon S3 and OAuth
+
+2009-11-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/search/comments/listing.php: Fixed the wrapper for
+ comment listing.
+
+ * mod/search/start.php: Uncommenting out the bulk of the search functions.
+
+ * mod/search/search_hooks.php, mod/search/start.php,
+ .../views/default/search/comments/listing.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/tags/listing.php: Added super-basic support
+ for searching comments.
+
+2009-11-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/lib/pam.php, engine/tests/services/api.php,
+ services/api/rest.php: combined the two different pams into one and fixed an
+ issue with hmac authentication
+
+2009-11-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/search/search_hooks.php: Reverted groups and users to LIKE instead of
+ MATCH AGAINST.
+
+ * engine/lib/group.php, engine/lib/objects.php, engine/lib/tags.php,
+ engine/lib/users.php, mod/search/index.php, mod/search/search_hooks.php,
+ mod/search/start.php, .../views/default/page_elements/searchbox.php,
+ mod/search/views/default/search/listing.php: Moved default search hooks into
+ search mod. Using MySQL's MATCH ... AGAINST instead of likes for most
+ searches. Changed 'tag' to 'q' while maintaining backward compatibility.
+
+2009-11-07 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: fixed bug in list_entities() wrapper function -
+ it was ignoring false values - there are probably similar problems in the
+ other new wrapper functions
+
+ * _graphics/icons/default/topbar.png: fixes #1324 - default topbar icon now
+ exists
+
+ * engine/lib/metastrings.php: fixes #1227 - this one has been causing nasty
+ problems for far too long
+
+2009-11-06 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: removed space which would break the schema
+ parsing routine for the next poor sucker who tried to add a table - not the
+ most robust code
+
+ * services/api/rest.php: strike previous - we need the password auth to get
+ the user token - will just need to document that pam_auth_pass does not work
+ with REST because the user credentials are not set
+
+ * engine/lib/pam.php, services/api/rest.php: removing username/password
+ authorization for REST by default - developers can add their own custom PAM
+ using the plugin hook if they require this
+
+2009-11-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Removed old group search hook.
+
+ * engine/lib/users.php: Removed old user search.
+
+ * engine/lib/group.php, engine/lib/tags.php, engine/lib/users.php: Added
+ search for group, tags, and users.
+
+ * engine/lib/entities.php: Added ability to pass 0 as a subtype meaning
+ "entities without a subtype".
+
+ * engine/lib/objects.php: Added default object search.
+
+ * engine/lib/metadata.php: Corrected documentation for
+ elgg_get_entities_from_metadata()
+
+ * actions/systemsettings/install.php: Enable search mod upon installation.
+
+ * mod/search/index.php, mod/search/start.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/startblurb.php,
+ mod/search/views/default/search/tags/listing.php: Updated search for FTS.
+
+2009-11-04 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/sessions.php: users now allowed to have multiple
+ sessions but not multiple remember me cookies (yet)
+
+2009-11-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/htmlawed/start.php: Updated htmlawed to allow the default TinyMCE
+ styles.
+
+2009-11-03 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php, engine/lib/plugins.php, engine/lib/xml-rpc.php,
+ engine/lib/xml.php: standardized xml.php and fixed output of booleans in xml
+ view
+
+2009-11-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes for deprecated functions.
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/metadata.php: Deprecated elgg_get_entities_from_annotations().
+
+ * engine/lib/access.php: Changed elgg_get_entities_from_access_id() to be
+ closer to how other functions work.
+
+ * mod/htmlawed/start.php: Updated htmlawed to disallow many style
+ attributes.
+
+2009-11-02 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/xml/pageshells/pageshell.php: setting xml version and encoding in
+ xml pageshell
+
+2009-10-30 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, engine/lib/access.php, engine/tests/objects/users.php:
+ Deprecating get_entities_from_access_id().
+
+2009-10-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: No longer using fullview for listing registered entities on
+ front page.
+
+2009-10-30 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Removing deprecated function call from
+ find_plugin_settings().
+
+2009-10-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/tests/objects/metadata.php: Namespaced
+ metadata keys for elgg_get_entities_from_metadata() so no clashes will happen
+ with annotations.
+
+2009-10-30 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updating 1.7 CHANGES file.
+
+2009-10-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes for the relationship functions.
+
+2009-10-30 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Cleaning up logic regarding view error notices.
+
+2009-10-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/lib/relationships.php: Deprecated
+ get_entities_from_relationships_and_meta().
+
+2009-10-29 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, engine/tests/objects/filestore.php: Fully
+ deprecating file matrix use with username. Plugins building the file matrix
+ with the username will still work, but a warning is logged.
+
+ * engine/tests/objects/metadata.php: Updating unit test to reflect
+ deprecated functions.
+
+2009-10-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Fixed incorrect wrapper for
+ get_entities_from_relationship() -> elgg_get_entities_from_relationship().
+
+2009-10-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Deprecated get_entities_from_relationship()
+
+ * engine/lib/metadata.php: Actually fixed the documentation for
+ elgg_get_entities_from_metadata().
+
+ * engine/lib/metadata.php: Cleaned up table prefix for
+ elgg_get_entity_metadata_where_sql(). Cleaned up some documentation.
+
+ * engine/lib/metadata.php: Updated documentation for
+ elgg_get_entity_metadata_where_sql()
+
+ * engine/schema/upgrades/2009100701.sql: Got rid of the silly conditional
+ comments in the db upgrade now that I know what they are.
+
+ * engine/schema/upgrades/2009100701.sql: Added table locking and disabling
+ keys for the UTF8 database upgrade.
+
+2009-10-28 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009102801.php, version.php: Creating an upgrade
+ script for new user filepath.
+
+2009-10-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/metadata.php: Deprecated
+ get_entities_from_metadata() and get_entities_from_metadata_multi().
+
+2009-10-27 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/objects/filestore.php: Removing local debug info from
+ filestore unit test.
+
+ * engine/lib/filestore.php, engine/tests/elgg_unit_test.php,
+ engine/tests/objects/filestore.php, engine/tests/objects/users.php: Modifying
+ user file locations to be based on guid. Previous implementations utilized
+ the owner's username to determine a file path matrix based on (up to) the
+ first five letters. To eliminate language and filesystem inconsistencies, the
+ matrix is now created from the entity's creation date and guid. This has the
+ added benefit of (potentially) allowing users to update their usernames.
+
+2009-10-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes for bug #1161 and deprecated
+ get_entities_from_metadata()
+
+ * engine/tests/objects/metadata.php: Fixed caching issue that caused
+ metadata test for get_entities_from_metadata() to fail.
+
+ * engine/lib/entities.php: Removed some commented out code.
+
+ * engine/lib/metadata.php: Fixed get_entities_from_metadata() wrapper when
+ passing case_sensitive = FALSE.
+
+ * engine/lib/elgglib.php: Fixes #1161: Views now default to 'default' if not
+ found.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/metadata.php:
+ Created elgg_get_entities_from_metadata() and made
+ get_entities_from_metadata(). Made elgg_get_entities() accept extra joins and
+ wheres in the options. Created a helper function
+ elgg_normalise_plural_options_array() to rewrite shortcut singular options to
+ plurals.
+
+2009-10-26 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php: Rewriting metastrings search query for
+ simplicity.
+
+2009-10-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updated changes to show deprecated get_entities().
+
+2009-10-25 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/tests/services/api.php, languages/en.php:
+ cleaned up the web services unit tests
+
+2009-10-25 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Corrected bug when passing container_guids or
+ owner_guids of 0. Changed the name of the $prefix to $table in sql helper
+ functions. Improved documentation.
+
+2009-10-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Created elgg_get_entities() and rewrote
+ get_entities() to pass to the new function. First go at removing
+ get_entities() calls in native functions.
+
+ * engine/lib/elgglib.php: Cleaned up some code in elgg_view().
+
+ * engine/lib/access.php: Slight code cleanup.
+
+2009-10-23 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, engine/tests/objects/users.php: Creating a unit test
+ for ElggUser
+
+2009-10-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/entities/entity_list.php,
+ views/default/entities/entity_listing.php: Standardized entity listing views.
+
+
+ * CODING.txt: Updated standards for method names.
+
+2009-10-22 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Refs #1330: Contributed autop() to Wordpress.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/search.php,
+ mod/search/index.php, mod/search/languages/en.php, mod/search/manifest.xml,
+ mod/search/start.php, .../views/default/page_elements/searchbox.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity_list.php,
+ mod/search/views/default/search/gallery.php,
+ .../views/default/search/gallery_listing.php,
+ mod/search/views/default/search/listing.php,
+ mod/search/views/default/search/startblurb.php, search/groups.php,
+ search/index.php, search/users.php, views/default/css.php,
+ views/default/entities/entity_list.php,
+ views/default/entities/entity_listing.php,
+ views/default/entities/gallery.php,
+ views/default/entities/gallery_listing.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/search/entity_list.php, views/default/search/gallery.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php,
+ views/default/search/startblurb.php: Pulling in MITRE's search core.
+ Fo'rizzle this time. Yo.
+
+2009-10-22 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt: Updating core changes file
+
+ * mod/diagnostics/index.php, mod/diagnostics/languages/en.php: Adding unit
+ testing to the GUI. Unit tests can be run from the core Diagnostics mod.
+
+2009-10-22 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/tests/services/api.php, languages/en.php: more
+ unit tests for REST api
+
+2009-10-21 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/tests/objects/metadata.php: Allowing entities to be retrieved by
+ case-insensitive search. Adding a new unit test for ElggMetadata.
+
+ * engine/lib/elgglib.php, engine/tests/suite.php: Reducing the output level
+ of log messages set to "DEBUG". Debug level messages will be logged at the
+ same level as warnings. Additionally, users will be notified when attempting
+ to run the test suite without first placing the site in debug mode.
+
+2009-10-20 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/tests/services/api.php, languages/en.php: more
+ unit tests for REST api
+
+ * CHANGES.txt: updated CHANGES.txt with services API changes
+
+2009-10-19 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Replacing a direct call to error_log() with new
+ elgg_log().
+
+ * CHANGES.txt, actions/admin/site/update_basic.php,
+ actions/systemsettings/install.php, engine/lib/elgglib.php, languages/en.php,
+ views/default/settings/system.php, views/failsafe/settings/system.php: Adding
+ debug options to admin site settings. Debugging errors and warnings to
+ screen. If notice level is enabled, output is sent to system log file.
+
+2009-10-19 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/tests/services/api.php, languages/en.php,
+ services/api/rest.php: first version of new REST api
+
+2009-10-17 cash <cash@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pam.php: updated documentation on PAMs as I will be fixing some
+ API PAM issues
+
+2009-10-16 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/group.php, engine/lib/languages.php,
+ engine/lib/memcache.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php, engine/start.php, engine/tests/suite.php,
+ views/default/messages/exceptions/exception.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/xml/messages/exceptions/exception.php: Rewriting core debug messages to
+ be more informative. Introducing the concept of levels for Elgg debugging:
+ notices, warnings and errors are displayed when the appropriate debugging
+ level is enabled. An additional level of "debug" exists to differentiate from
+ errors.
+
+2009-10-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/canvas/default.php,
+ views/foaf/page_elements/contentwrapper.php,
+ views/foaf/pageshells/pageshell.php, views/foaf/search/entity_list.php,
+ views/foaf/user/default.php, views/ical/canvas/default.php,
+ views/ical/export/entity.php, views/ical/object/default.php,
+ views/ical/pageshells/pageshell.php, views/ical/search/entity_list.php,
+ views/js/object/default.php, views/js/pageshells/pageshell.php,
+ views/js/user/default.php, views/json/api/output.php,
+ views/json/canvas/default.php, views/json/export/entity.php,
+ views/json/export/metadata.php, views/json/export/relationship.php,
+ views/json/group/default.php, views/json/messages/exceptions/exception.php,
+ views/json/object/default.php, views/json/page_elements/contentwrapper.php,
+ views/json/pageshells/pageshell.php, views/json/river/item/list.php,
+ views/json/search/entity_list.php, views/json/site/default.php,
+ views/json/user/default.php, views/opendd/canvas/default.php,
+ views/opendd/export/entity.php, views/opendd/export/metadata.php,
+ views/opendd/export/relationship.php, views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/search/entity_list.php, views/opendd/site/default.php,
+ views/opendd/user/default.php, views/php/api/output.php,
+ views/php/canvas/default.php, views/php/export/entity.php,
+ views/php/export/metadata.php, views/php/export/relationship.php,
+ views/php/group/default.php, views/php/messages/exceptions/exception.php,
+ views/php/object/default.php, views/php/pageshells/pageshell.php,
+ views/php/search/entity_list.php, views/php/site/default.php,
+ views/php/user/default.php, views/rss/annotation/default.php,
+ views/rss/canvas/default.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/page_elements/contentwrapper.php,
+ views/rss/pageshells/pageshell.php, views/rss/river/item/list.php,
+ views/rss/search/entity_list.php, views/rss/user/default.php,
+ views/xml/api/output.php, views/xml/messages/exceptions/exception.php,
+ views/xml/pageshells/pageshell.php, views/xml/xml-rpc/output.php: Finished
+ standardizing seconday views.
+
+ * views/failsafe/canvas/default.php, views/failsafe/input/access.php,
+ views/failsafe/input/button.php, views/failsafe/input/checkboxes.php,
+ views/failsafe/input/form.php, views/failsafe/input/hidden.php,
+ views/failsafe/input/longtext.php, views/failsafe/input/pulldown.php,
+ views/failsafe/input/reset.php, views/failsafe/input/submit.php,
+ views/failsafe/input/text.php, views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/list.php, views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php, views/failsafe/settings/install.php,
+ views/failsafe/settings/system.php: Standardized views/failsafe/*
+
+ * views/default/css.php, views/default/settings/install.php,
+ views/default/settings/system.php, views/default/settings/upgrading.php,
+ views/default/site/default.php, views/default/spotlight/default.php,
+ views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php,
+ views/default/upload/upload_form_content.php, views/default/user/default.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php, views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/usersettings/user.php, views/default/welcome.php,
+ views/default/welcome/logged_in.php, views/default/welcome/logged_out.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php:
+ Finish up standardizing views/default/*
+
+ * views/default/page_elements/contentwrapper.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_contents.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/spotlight.php,
+ views/default/page_elements/title.php,
+ views/default/pageshells/pageshell.php, views/default/river/dashboard.php,
+ views/default/river/item/list.php, views/default/river/item/noaccess.php,
+ views/default/river/item/wrapper.php,
+ views/default/river/relationship/friend/create.php,
+ views/default/river/wrapper.php, views/default/search/entity_list.php,
+ views/default/search/gallery.php, views/default/search/gallery_listing.php,
+ views/default/search/listing.php, views/default/search/startblurb.php: More
+ views cleanup.
+
+ * views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php,
+ views/default/graphics/icon.php, views/default/group/default.php,
+ views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php, views/default/input/access.php,
+ views/default/input/autocomplete.php, views/default/input/button.php,
+ views/default/input/calendar.php, views/default/input/captcha.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/form.php,
+ views/default/input/hidden.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/reset.php, views/default/input/securitytoken.php,
+ views/default/input/submit.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/input/urlshortener.php, views/default/input/userpicker.php,
+ views/default/js/initialise_elgg.php,
+ views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/navigation/viewtype.php,
+ .../notifications/settings/usersettings.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/object/plugin.php, views/default/object/widget.php,
+ views/default/output/calendar.php, views/default/output/checkboxes.php,
+ views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/email.php, views/default/output/iframe.php,
+ views/default/output/longtext.php, views/default/output/pulldown.php,
+ views/default/output/radio.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php: Standardizing views.`
+
+ * views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php, views/default/ajax/loader.php,
+ views/default/annotation/annotate.php,
+ views/default/annotation/generic_comment.php, views/default/api/output.php,
+ views/default/basic_elements/welcome.php, views/default/canvas/default.php,
+ views/default/canvas/layouts/edit_layout.php,
+ views/default/canvas/layouts/one_column.php,
+ views/default/canvas/layouts/sidebar_boxes.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ .../canvas/layouts/two_column_right_sidebar.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/canvas_header/submenu_group.php,
+ views/default/canvas_header/submenu_template.php,
+ views/default/comments/forms/edit.php, views/default/dashboard/blurb.php,
+ views/default/export/entity.php, views/default/export/metadata.php,
+ views/default/export/relationship.php, views/default/friends/collection.php,
+ views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/list.php,
+ views/default/friends/picker.php, views/default/friends/river/create.php:
+ Standardized more files.
+
+ * engine/tests/objects/objects.php, engine/tests/suite.php,
+ friends/index.php, friends/of.php, friends/pickercallback.php, index.php,
+ install.php, languages/en.php, search/groups.php, search/index.php,
+ search/users.php, services/api/rest.php, services/export/handler.php,
+ settings/index.php, settings/plugins.php, settings/statistics.php,
+ settings/user.php, simplecache/view.php, upgrade.php, version.php:
+ Standardized files
+
+2009-10-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/admin.php: Merged admin access override
+ hook with ignore access system override hook. get_sql_access_prefix() now
+ correctly uses elgg_check_access_overrides() instead of
+ elgg_get_ignore_access().
+
+ * friends/add.php, friends/collections.php, friends/edit.php: Standardized
+ files.
+
+ * entities/index.php, entities/list.php: Standardized files.
+
+ * engine/lib/widgets.php, engine/settings.example.php, engine/start.php:
+ Standardized files.
+
+ * engine/lib/calendar.php, engine/lib/configuration.php,
+ engine/lib/cron.php, engine/lib/exceptions.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/filestore.php, engine/lib/group.php,
+ engine/lib/input.php, engine/lib/install.php, engine/lib/languages.php,
+ engine/lib/location.php, engine/lib/mb_wrapper.php, engine/lib/memcache.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/opendd.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/ping.php, engine/lib/plugins.php, engine/lib/query.php,
+ engine/lib/relationships.php, engine/lib/river2.php, engine/lib/search.php,
+ engine/lib/sites.php, engine/lib/social.php, engine/lib/statistics.php,
+ engine/lib/system_log.php, engine/lib/tags.php, engine/lib/users.php,
+ engine/lib/usersettings.php, engine/lib/version.php, engine/lib/widgets.php:
+ Standardized gobs of files.
+
+2009-10-14 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Standardized engine/lib/cache.php
+
+ * engine/lib/api.php: Standardized engine/lib/api.php
+
+ * engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/pagehandler.php, engine/handlers/xml-rpc_handler.php:
+ Standardized engine/handlers/*
+
+ * dashboard/index.php, dashboard/latest.php: Standardized dashboard/*
+
+ * admin/index.php, admin/plugins.php, admin/site.php, admin/statistics.php,
+ admin/user.php: Standardized admin/*
+
+ * actions/email/save.php, actions/entities/delete.php,
+ actions/friends/add.php, actions/friends/addcollection.php,
+ actions/friends/deletecollection.php, actions/friends/editcollection.php,
+ actions/friends/remove.php, actions/import/opendd.php, actions/login.php,
+ actions/logout.php, .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/systemsettings/install.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ actions/user/spotlight.php, actions/useradd.php,
+ actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php: Standardized actions/*
+
+
+ * actions/comments/add.php, actions/comments/delete.php: Standardized.
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, actions/admin/site/update_basic.php,
+ actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ actions/admin/user/resetpassword.php, actions/admin/user/unban.php:
+ Standardized actions/admin/*
+
+ * account/forgotten_password.php, account/register.php: Standardized
+ account/*
+
+ * _css/css.php, _css/js.php: Standardized _css/*
+
+ * CHANGES.txt: Updated changes file for $is_admin deprecation.
+
+2009-10-13 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/objects/entities.php, engine/tests/objects/objects.php,
+ engine/tests/test_skeleton.php: Swallowing all Elgg notices within unit
+ tests. By default, SimpleTest converts PHP errors into exceptions. This is
+ restricted by adding a call to swallowErrors() within the tearDown() methods.
+ This has also been noted within the unit test skeleton.
+
+ * engine/lib/sites.php, engine/tests/objects/sites.php: Creating a generic
+ ElggSite unit test.
+
+2009-10-13 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/admin.php, engine/lib/entities.php,
+ engine/lib/users.php: Standardized users and entities. Fleshed out
+ elgg_set_ignore_access() and elgg_get_ignore_access()
+
+ * engine/lib/elgglib.php: Standardize elgglib.php
+
+ * engine/tests/suite.php: Test suite now requires admin for web-based tests.
+ Uses access overrides for cli-based tests.
+
+ * engine/lib/entities.php: Standardized entities.php.
+
+ * engine/lib/access.php: Fix typo in ElggAccess:get_ignore_access().
+
+ * engine/lib/access.php, engine/lib/admin.php, engine/lib/sessions.php:
+ First pass at removing $is_admin global.
+
+2009-10-12 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/objects/entities.php, engine/tests/objects/objects.php,
+ engine/tests/suite.php: Adding unit tests for the ElggObject class.
+ Restricting testing suite to only be run as a logged-in user. This will not
+ allow the tests to be run from the command line, but this is already the case
+ due to debug static.
+
+2009-10-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CHANGES.txt, CODING.txt: Added coding styles and changes documents.
+
+2009-10-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Standardized annotations.php.
+
+ * engine/lib/admin.php: Standardized admin.php
+
+ * engine/lib/activity.php: Standardized activity.
+
+ * engine/lib/actions.php: Standardized actions.php
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/search.php,
+ engine/schema/upgrades/2009093001.sql, mod/search/index.php,
+ mod/search/languages/en.php, mod/search/manifest.xml, mod/search/start.php,
+ .../views/default/page_elements/searchbox.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity_list.php,
+ mod/search/views/default/search/gallery.php,
+ mod/search/views/default/search/listing.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/search/entity_list.php, views/default/search/gallery.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php,
+ views/default/search/startblurb.php: Reverted back to previous copy removing
+ Justin's search because of views problems in plugins.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/search.php,
+ engine/schema/upgrades/2009093001.sql, mod/search/index.php,
+ mod/search/languages/en.php, mod/search/manifest.xml, mod/search/start.php,
+ .../views/default/page_elements/searchbox.php,
+ mod/search/views/default/search/css.php,
+ mod/search/views/default/search/entity_list.php,
+ mod/search/views/default/search/gallery.php,
+ mod/search/views/default/search/listing.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/search/entity_list.php, views/default/search/gallery.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php,
+ views/default/search/startblurb.php: Pulled in Justin's search changes from
+ github.
+
+2009-10-09 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/objects.php,
+ engine/tests/objects/entities.php, engine/tests/objects/objects.php,
+ engine/tests/test_skeleton.php: Creating an ElggObject unit test. Fixing
+ issues with the unit test plugin hooks, as well as infinite looping bugs
+ introduced by the unit test skeleton.
+
+2009-10-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/objects/entities.php: Adding unit test for ElggEntity
+ annotations.
+
+2009-10-08 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/sessions.php: Brought access.php and
+ sesssion.php up to code standards.
+
+2009-10-08 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/tests/core/entities.php,
+ engine/tests/objects/entities.php: Adding generic unit tests for ElggEntity.
+
+2009-10-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: database.php now more closely matches coding
+ standards.
+
+ * engine/lib/database.php, engine/schema/upgrades/2009100701.sql: Fixes
+ #1181: UTF8 now correctly stored in database.
+
+ * engine/lib/entities.php, engine/lib/notification.php,
+ engine/lib/users.php, engine/lib/version.php: Fixes #790: Removing unneeded
+ @s.
+
+2009-10-06 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/tests/core/entities.php,
+ engine/tests/elgg_unit_test.php, engine/tests/test_skeleton.php: Adding unit
+ test methods to the new Entities test.
+
+2009-10-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/diagnostics/start.php: Removed elgg_test entries.
+
+2009-10-06 nickw <nickw@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fixing a spacing issue with constructed SQL
+ query. Closes #1295.
+
+2009-10-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/testing.php: Removing old testing.php lib.
+
+2009-10-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/core/entities.php, engine/tests/entities.php,
+ engine/tests/suite.php, engine/tests/test_skeleton.php: Moved core tests into
+ tests/core. Fixed typo in skeleton and entities tests. Only run tests in
+ debug mode.
+
+2009-10-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/tests/entities.php, engine/tests/test_skeleton.php: Added more info
+ to the test. Added a test skeleton.
+
+ * engine/lib/entities.php: Added unit tests for entities.
+
+ * engine/tests/entities.php, engine/tests/suite.php: Added unit tests.
+
+ * engine/tests/elgg_unit_test.php, engine/tests/suite.php,
+ vendors/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE,
+ vendors/simpletest/LICENSE, vendors/simpletest/README,
+ vendors/simpletest/VERSION, vendors/simpletest/authentication.php,
+ vendors/simpletest/autorun.php, vendors/simpletest/browser.php,
+ vendors/simpletest/collector.php, vendors/simpletest/compatibility.php,
+ vendors/simpletest/cookies.php, vendors/simpletest/default_reporter.php,
+ vendors/simpletest/detached.php,
+ .../docs/en/authentication_documentation.html,
+ .../simpletest/docs/en/browser_documentation.html,
+ vendors/simpletest/docs/en/docs.css,
+ .../docs/en/expectation_documentation.html,
+ .../docs/en/form_testing_documentation.html,
+ .../docs/en/group_test_documentation.html,
+ vendors/simpletest/docs/en/index.html,
+ .../docs/en/mock_objects_documentation.html,
+ vendors/simpletest/docs/en/overview.html,
+ .../docs/en/partial_mocks_documentation.html,
+ .../simpletest/docs/en/reporter_documentation.html,
+ .../docs/en/unit_test_documentation.html,
+ .../docs/en/web_tester_documentation.html,
+ .../docs/fr/authentication_documentation.html,
+ .../simpletest/docs/fr/browser_documentation.html,
+ vendors/simpletest/docs/fr/docs.css,
+ .../docs/fr/expectation_documentation.html,
+ .../docs/fr/form_testing_documentation.html,
+ .../docs/fr/group_test_documentation.html,
+ vendors/simpletest/docs/fr/index.html,
+ .../docs/fr/mock_objects_documentation.html,
+ vendors/simpletest/docs/fr/overview.html,
+ .../docs/fr/partial_mocks_documentation.html,
+ .../simpletest/docs/fr/reporter_documentation.html,
+ .../docs/fr/unit_test_documentation.html,
+ .../docs/fr/web_tester_documentation.html, vendors/simpletest/dumper.php,
+ vendors/simpletest/eclipse.php, vendors/simpletest/encoding.php,
+ vendors/simpletest/errors.php, vendors/simpletest/exceptions.php,
+ vendors/simpletest/expectation.php,
+ vendors/simpletest/extensions/pear_test_case.php,
+ .../simpletest/extensions/phpunit_test_case.php,
+ vendors/simpletest/extensions/testdox.php,
+ vendors/simpletest/extensions/testdox/test.php, vendors/simpletest/form.php,
+ vendors/simpletest/frames.php, vendors/simpletest/http.php,
+ vendors/simpletest/invoker.php, vendors/simpletest/mock_objects.php,
+ vendors/simpletest/page.php, vendors/simpletest/parser.php,
+ vendors/simpletest/reflection_php4.php,
+ vendors/simpletest/reflection_php5.php, vendors/simpletest/remote.php,
+ vendors/simpletest/reporter.php, vendors/simpletest/scorer.php,
+ vendors/simpletest/selector.php, vendors/simpletest/shell_tester.php,
+ vendors/simpletest/simpletest.php, vendors/simpletest/socket.php,
+ vendors/simpletest/tag.php, vendors/simpletest/test/acceptance_test.php,
+ vendors/simpletest/test/adapter_test.php,
+ vendors/simpletest/test/all_tests.php,
+ vendors/simpletest/test/authentication_test.php,
+ vendors/simpletest/test/autorun_test.php,
+ vendors/simpletest/test/bad_test_suite.php,
+ vendors/simpletest/test/browser_test.php,
+ vendors/simpletest/test/collector_test.php,
+ vendors/simpletest/test/command_line_test.php,
+ vendors/simpletest/test/compatibility_test.php,
+ vendors/simpletest/test/cookies_test.php,
+ vendors/simpletest/test/detached_test.php,
+ vendors/simpletest/test/dumper_test.php,
+ vendors/simpletest/test/eclipse_test.php,
+ vendors/simpletest/test/encoding_test.php,
+ vendors/simpletest/test/errors_test.php,
+ vendors/simpletest/test/exceptions_test.php,
+ vendors/simpletest/test/expectation_test.php,
+ vendors/simpletest/test/form_test.php,
+ vendors/simpletest/test/frames_test.php,
+ vendors/simpletest/test/http_test.php,
+ vendors/simpletest/test/interfaces_test.php,
+ vendors/simpletest/test/live_test.php,
+ vendors/simpletest/test/mock_objects_test.php,
+ vendors/simpletest/test/page_test.php,
+ vendors/simpletest/test/parse_error_test.php,
+ vendors/simpletest/test/parser_test.php,
+ vendors/simpletest/test/reflection_php4_test.php,
+ vendors/simpletest/test/reflection_php5_test.php,
+ vendors/simpletest/test/remote_test.php,
+ vendors/simpletest/test/shell_test.php,
+ vendors/simpletest/test/shell_tester_test.php,
+ vendors/simpletest/test/simpletest_test.php,
+ vendors/simpletest/test/socket_test.php,
+ .../simpletest/test/support/empty_test_file.php,
+ vendors/simpletest/test/support/latin1_sample,
+ vendors/simpletest/test/support/spl_examples.php,
+ .../test/support/supplementary_upload_sample.txt,
+ vendors/simpletest/test/support/test1.php,
+ vendors/simpletest/test/support/upload_sample.txt,
+ vendors/simpletest/test/tag_test.php,
+ vendors/simpletest/test/test_with_parse_error.php,
+ vendors/simpletest/test/unit_tester_test.php,
+ vendors/simpletest/test/unit_tests.php, vendors/simpletest/test/url_test.php,
+ vendors/simpletest/test/user_agent_test.php,
+ vendors/simpletest/test/visual_test.php,
+ vendors/simpletest/test/web_tester_test.php,
+ vendors/simpletest/test/xml_test.php, vendors/simpletest/test_case.php,
+ vendors/simpletest/unit_tester.php, vendors/simpletest/url.php,
+ vendors/simpletest/user_agent.php, vendors/simpletest/web_tester.php,
+ vendors/simpletest/xml.php: Added simpletest and start of unit tests.
+
+2009-09-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php: Added autofocusing of the username
+ field on the login page.
+
+2009-09-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: new activity river - clipped overflow for long
+ urls/strings
+
+2009-09-23 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: Upped minChars to 2 for user picker.
+
+ * views/default/input/userpicker.php: Disabled matchContains in user picker.
+
+
+ * engine/lib/input.php: Updated the user picker to avoid possible mysql
+ injection attacks and to search only by leading chars.
+
+2009-09-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: collections picker - delete link given
+ classname and brackets removed from string
+
+2009-09-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/embed/addcontentjs.php, views/default/embed/js.php: Removing
+ embed view in favor of the correct views in the plugin.
+
+2009-09-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/comments/add.php, engine/lib/annotations.php,
+ engine/lib/river2.php, engine/schema/upgrades/2009091901.sql, version.php,
+ views/default/annotation/annotate.php: New river code added to allow user
+ comment to be pulled out and displayed
+
+2009-09-17 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: Updated user picker to return 25
+ results, text input to be 30 wide.
+
+2009-09-16 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Changed get_entities_from_access_collection() to
+ get_entities_from_access_id() to be more generic.
+
+ * engine/lib/extender.php: Fixes #1238: Added ElggExtender::getOwnerEntity()
+ and changed ElggExtender::getOwner() to return just the GUID. Also, this
+ fixes a bug with checking permissions on annotations.
+
+2009-09-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/index.php, friends/of.php: Fixes #1251: Correct strings applied.
+
+2009-09-10 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/sessions.php: Updated fixes for checking
+ for admin in get_access_sql_prefix()
+
+ * engine/lib/access.php: Checking against admin metadata instead of
+ $is_admin global in get_access_sql_suffix().
+
+ * engine/lib/access.php: Fixing a bug with when getting the sql suffix for
+ the non-loggedin user.
+
+2009-09-09 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Added "Only Friends" string for user picker.
+
+ * views/default/input/userpicker.php: Defaulted userpicker to all users.
+ Checkbox makes it only friends.
+
+2009-09-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: updating the version number in the readme
+
+2009-09-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/userpicker.php: Better jquery deleting of user entity
+ for user picker.
+
+ * languages/en.php, views/default/input/userpicker.php: Pulled out language
+ string to language file.
+
+ * views/default/css.php, views/default/input/userpicker.php: Added bolding
+ to term searc in user picker.
+
+ * engine/lib/input.php, views/default/css.php: Updated livesearch page
+ handler to use classes instead of hard coded css.
+
+ * views/default/css.php, views/default/input/userpicker.php: Added rough
+ version of a new user picker.
+
+ * admin/user.php, views/default/search/entity_list.php: Fixes #1207: Using
+ fullviews with proper list_entity params.
+
+2009-09-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt, version.php: Bumped version number.
+
+ * views/default/site/default.php: Fixed a potential security issue
+ concerning site views.
+
+2009-09-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Added strip_tags() to setting titles in
+ ElggEntity
+
+2009-09-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Patch submitted for ticket #886 rolled back
+ as it was causing #1205 -> #886 will need further investigating
+
+ * views/default/css.php, views/default/river/item/wrapper.php: activity
+ display toggle so site admins can choose avatars or the small icons
+
+2009-09-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/input.php: Adding additional hooks to
+ add/remove/update users for access_collections() Added autocomplete endpoint
+ in input_init()
+
+ * views/default/input/autocomplete.php: Cleaning up autocomplete view.
+
+ * vendors/jquery/jquery.autocomplete.min.js,
+ views/default/input/autocomplete.php: Added autocomplete view to core.
+
+2009-09-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: missing comma added
+
+ * views/default/search/entity_list.php: fullview hashed out for now as it
+ caused unexpected behaviour on admin user list view, needs more investigating
+
+2009-09-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: order by bug fixed in
+ get_entities_from_relationship
+
+2009-09-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: a simple function which returns a string version of
+ an entity's access level
+
+2009-08-31 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt, INSTALL.txt, README.txt, _css/css.php, _css/js.php,
+ account/register.php, actions/admin/plugins/disable.php,
+ actions/admin/plugins/disableall.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/reorder.php, actions/admin/site/update_basic.php,
+ actions/admin/user/ban.php, actions/comments/add.php,
+ actions/comments/delete.php, actions/email/save.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/editcollection.php, actions/friends/remove.php,
+ actions/login.php, actions/logout.php, actions/register.php,
+ actions/systemsettings/install.php, actions/user/default_access.php,
+ actions/user/requestnewpassword.php, actions/user/spotlight.php,
+ actions/useradd.php, actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php, admin/index.php,
+ admin/plugins.php, admin/site.php, admin/user.php, dashboard/index.php,
+ dashboard/latest.php, engine/handlers/action_handler.php,
+ engine/handlers/cron_handler.php, engine/handlers/pagehandler.php,
+ engine/handlers/xml-rpc_handler.php, engine/lib/access.php,
+ engine/lib/activity.php, engine/lib/admin.php, engine/lib/api.php,
+ engine/lib/configuration.php, engine/lib/database.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/extender.php,
+ engine/lib/input.php, engine/lib/install.php, engine/lib/languages.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/plugins.php, engine/lib/query.php, engine/lib/relationships.php,
+ engine/lib/river2.php, engine/lib/sessions.php, engine/lib/sites.php,
+ engine/lib/social.php, engine/lib/statistics.php, engine/lib/tags.php,
+ engine/lib/upgrades/2008101303.php, engine/lib/users.php,
+ engine/lib/version.php, engine/lib/widgets.php, engine/settings.example.php,
+ engine/start.php, entities/index.php, entities/list.php, friends/add.php,
+ friends/collections.php, friends/edit.php, friends/index.php, friends/of.php,
+ friends/pickercallback.php, index.php, install.php, languages/en.php,
+ mod/garbagecollector/languages/en.php, mod/logbrowser/index.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ .../views/default/logbrowser/adminlinks.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/object/logwrapper.php,
+ mod/uservalidationbyemail/start.php, settings/index.php,
+ simplecache/view.php, upgrade.php, vendors/calendarpopup/CalendarPopup.js,
+ vendors/jquery/jquery.form.js, version.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php, views/default/admin/main.php,
+ views/default/admin/plugins_opt/plugin.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php,
+ views/default/admin/user_opt/search.php, views/default/ajax/loader.php,
+ views/default/annotation/annotate.php,
+ views/default/annotation/generic_comment.php,
+ views/default/basic_elements/welcome.php, views/default/canvas/default.php,
+ views/default/canvas/layouts/edit_layout.php,
+ views/default/canvas/layouts/sidebar_boxes.php,
+ views/default/canvas_header/submenu_group.php,
+ views/default/canvas_header/submenu_template.php,
+ views/default/comments/forms/edit.php, views/default/dashboard/blurb.php,
+ views/default/embed/addcontentjs.php, views/default/embed/js.php,
+ views/default/friends/collection.php, views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/list.php,
+ views/default/friends/picker.php, views/default/friends/river/create.php,
+ views/default/friends/tablelistcountupdate.php,
+ views/default/input/access.php, views/default/input/calendar.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php, views/default/js/friendsPickerv1.php,
+ views/default/js/initialise_elgg.php, views/default/js/upload_js.php,
+ views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/viewtype.php,
+ .../notifications/settings/usersettings.php, views/default/object/widget.php,
+ views/default/output/calendar.php, views/default/output/checkboxes.php,
+ views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/email.php, views/default/output/longtext.php,
+ views/default/output/pulldown.php, views/default/output/radio.php,
+ views/default/output/tagcloud.php, views/default/output/tags.php,
+ views/default/output/text.php, views/default/output/url.php,
+ views/default/page_elements/contentwrapper.php,
+ views/default/page_elements/header_contents.php,
+ views/default/page_elements/owner_block.php,
+ views/default/river/item/list.php, views/default/river/item/noaccess.php,
+ views/default/river/item/wrapper.php, views/default/river/wrapper.php,
+ views/default/settings/install.php, views/default/settings/system.php,
+ views/default/settings/upgrading.php, views/default/spotlight/default.php,
+ views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php,
+ views/default/upload/upload_form_content.php, views/default/user/default.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php, views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ .../usersettings/statistics_opt/numentities.php, views/default/welcome.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php,
+ views/failsafe/canvas/default.php, views/failsafe/input/access.php,
+ views/failsafe/input/checkboxes.php, views/failsafe/input/longtext.php,
+ views/failsafe/input/pulldown.php, views/failsafe/input/text.php,
+ views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php, views/failsafe/messages/list.php,
+ views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/settings/install.php, views/failsafe/settings/system.php,
+ views/foaf/canvas/default.php, views/foaf/page_elements/contentwrapper.php,
+ views/foaf/pageshells/pageshell.php, views/foaf/user/default.php,
+ views/js/object/default.php, views/js/pageshells/pageshell.php,
+ views/js/user/default.php, views/json/api/output.php,
+ views/json/canvas/default.php, views/json/export/entity.php,
+ views/json/export/metadata.php, views/json/export/relationship.php,
+ views/json/messages/exceptions/exception.php,
+ views/json/page_elements/contentwrapper.php,
+ views/json/pageshells/pageshell.php, views/json/river/item/list.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/rss/annotation/default.php, views/rss/canvas/default.php,
+ views/rss/group/default.php, views/rss/object/default.php,
+ views/rss/page_elements/contentwrapper.php, views/rss/river/item/list.php,
+ views/rss/user/default.php, views/xml/messages/exceptions/exception.php: All
+ line endings are now Unix-style.
+
+2009-08-28 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/register.php, engine/lib/entities.php: Fixes #1196:
+ ElggEntity::disable() now accepts a 2nd arg for recursive. New users are not
+ recursively disabled for plugins that need to create entities owned by the
+ new user upon entity creation.
+
+2009-08-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/search.php: Fixes #1191: set_input() was never being called for
+ tag in search_page_handler().
+
+2009-08-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/annotation/annotate.php: a missing pipe added
+
+ * views/default/annotation/annotate.php: a snippet of a new comment on an
+ object will now appear in the activity river
+
+2009-08-26 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Added entity_owner_guid to get_annotations()
+
+2009-08-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: a simple solution to a css/js
+ loading bug. We need to come up with something better, long term.
+
+2009-08-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: new style added for page update action appearing in
+ the river
+
+2009-08-21 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Fixes #1180: Group join event triggered after
+ joining group. This trigger's return was never being tested so no overriding
+ could be done. If we decide to test the trigger to stop group joining,
+ groups_write_acl_plugin_hook() will need to be changed...
+
+2009-08-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/river/create.php: new friending river view applied
+
+2009-08-20 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump to 1.6.
+
+ * _css/css.php, _css/js.php, account/forgotten_password.php,
+ account/register.php, actions/admin/plugins/disable.php,
+ actions/admin/plugins/disableall.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/enableall.php, actions/admin/plugins/reorder.php,
+ actions/admin/site/update_basic.php, actions/admin/user/ban.php,
+ actions/admin/user/delete.php, actions/admin/user/makeadmin.php,
+ actions/admin/user/removeadmin.php, actions/admin/user/resetpassword.php,
+ actions/admin/user/unban.php, actions/comments/add.php,
+ actions/comments/delete.php, actions/email/save.php,
+ actions/entities/delete.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/editcollection.php, actions/friends/remove.php,
+ actions/import/opendd.php, actions/login.php, actions/logout.php,
+ .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/systemsettings/install.php,
+ actions/user/default_access.php, actions/user/language.php,
+ actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php, admin/index.php,
+ admin/plugins.php, admin/site.php, admin/statistics.php, admin/user.php,
+ dashboard/index.php, dashboard/latest.php,
+ engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/pagehandler.php, engine/handlers/xml-rpc_handler.php,
+ engine/lib/access.php, engine/lib/actions.php, engine/lib/activity.php,
+ engine/lib/admin.php, engine/lib/annotations.php, engine/lib/api.php,
+ engine/lib/cache.php, engine/lib/calendar.php, engine/lib/configuration.php,
+ engine/lib/cron.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/exceptions.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/filestore.php, engine/lib/group.php,
+ engine/lib/input.php, engine/lib/install.php, engine/lib/languages.php,
+ engine/lib/location.php, engine/lib/mb_wrapper.php, engine/lib/memcache.php,
+ engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/opendd.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/ping.php, engine/lib/plugins.php, engine/lib/query.php,
+ engine/lib/relationships.php, engine/lib/river2.php, engine/lib/search.php,
+ engine/lib/sessions.php, engine/lib/sites.php, engine/lib/social.php,
+ engine/lib/statistics.php, engine/lib/system_log.php, engine/lib/tags.php,
+ engine/lib/testing.php, engine/lib/users.php, engine/lib/usersettings.php,
+ engine/lib/version.php, engine/lib/widgets.php, engine/lib/xml-rpc.php,
+ engine/lib/xml.php, engine/schema/mysql.sql, engine/start.php,
+ entities/index.php, entities/list.php, friends/add.php,
+ friends/collections.php, friends/edit.php, friends/index.php, friends/of.php,
+ friends/pickercallback.php, index.php, install.php,
+ mod/crontrigger/start.php, mod/diagnostics/actions/download.php,
+ mod/diagnostics/index.php, mod/diagnostics/languages/en.php,
+ mod/diagnostics/start.php, mod/diagnostics/testreport.php,
+ mod/diagnostics/unittester.php,
+ .../views/default/diagnostics/forms/download.php,
+ .../views/default/diagnostics/runalltests.php,
+ mod/diagnostics/views/default/diagnostics/test.php,
+ .../views/default/diagnostics/testresult.php,
+ mod/garbagecollector/languages/en.php, mod/garbagecollector/start.php,
+ mod/htmlawed/start.php, mod/logbrowser/index.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/object/logwrapper.php,
+ mod/logrotate/languages/en.php, mod/logrotate/start.php,
+ .../actions/email/confirm.php, mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/start.php, search/groups.php, search/index.php,
+ search/users.php, services/api/rest.php, services/export/handler.php,
+ settings/index.php, settings/plugins.php, settings/statistics.php,
+ settings/user.php, simplecache/view.php, upgrade.php, version.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php, views/default/ajax/loader.php,
+ views/default/annotation/generic_comment.php, views/default/api/output.php,
+ views/default/basic_elements/welcome.php, views/default/canvas/default.php,
+ views/default/canvas/layouts/edit_layout.php,
+ views/default/canvas/layouts/one_column.php,
+ views/default/canvas/layouts/sidebar_boxes.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ .../canvas/layouts/two_column_right_sidebar.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/comments/forms/edit.php, views/default/css.php,
+ views/default/export/entity.php, views/default/export/metadata.php,
+ views/default/export/relationship.php, views/default/friends/collection.php,
+ views/default/friends/collections.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/list.php,
+ views/default/friends/picker.php, views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php,
+ views/default/graphics/icon.php, views/default/group/default.php,
+ views/default/input/access.php, views/default/input/button.php,
+ views/default/input/calendar.php, views/default/input/captcha.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/form.php,
+ views/default/input/hidden.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/plaintext.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/reset.php, views/default/input/securitytoken.php,
+ views/default/input/submit.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/input/urlshortener.php,
+ views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/navigation/viewtype.php,
+ .../notifications/settings/usersettings.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/object/plugin.php, views/default/object/widget.php,
+ views/default/output/calendar.php, views/default/output/checkboxes.php,
+ views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/email.php, views/default/output/iframe.php,
+ views/default/output/longtext.php, views/default/output/pulldown.php,
+ views/default/output/radio.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php, views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/page_elements/header_contents.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/spotlight.php,
+ views/default/page_elements/title.php,
+ views/default/pageshells/pageshell.php, views/default/river/dashboard.php,
+ views/default/river/item/wrapper.php,
+ views/default/river/relationship/friend/create.php,
+ views/default/river/wrapper.php, views/default/search/gallery.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php,
+ views/default/settings/install.php, views/default/settings/system.php,
+ views/default/site/default.php, views/default/spotlight/default.php,
+ views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php, views/default/user/default.php,
+ views/default/user/settings/default_access.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/welcome.php, views/default/welcome/logged_in.php,
+ views/default/welcome/logged_out.php, views/default/widgets/editwrapper.php,
+ views/default/widgets/wrapper.php, views/failsafe/canvas/default.php,
+ views/failsafe/input/access.php, views/failsafe/input/button.php,
+ views/failsafe/input/checkboxes.php, views/failsafe/input/form.php,
+ views/failsafe/input/hidden.php, views/failsafe/input/longtext.php,
+ views/failsafe/input/pulldown.php, views/failsafe/input/reset.php,
+ views/failsafe/input/submit.php, views/failsafe/input/text.php,
+ views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/list.php, views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php, views/failsafe/settings/install.php,
+ views/failsafe/settings/system.php, views/foaf/canvas/default.php,
+ views/foaf/pageshells/pageshell.php, views/foaf/user/default.php,
+ views/ical/canvas/default.php, views/ical/export/entity.php,
+ views/ical/object/default.php, views/ical/pageshells/pageshell.php,
+ views/ical/search/entity_list.php, views/js/object/default.php,
+ views/js/pageshells/pageshell.php, views/js/user/default.php,
+ views/json/api/output.php, views/json/canvas/default.php,
+ views/json/export/entity.php, views/json/export/metadata.php,
+ views/json/export/relationship.php, views/json/group/default.php,
+ views/json/messages/exceptions/exception.php, views/json/object/default.php,
+ views/json/pageshells/pageshell.php, views/json/search/entity_list.php,
+ views/json/site/default.php, views/json/user/default.php,
+ views/opendd/canvas/default.php, views/opendd/export/entity.php,
+ views/opendd/export/metadata.php, views/opendd/export/relationship.php,
+ views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/site/default.php, views/opendd/user/default.php,
+ views/php/api/output.php, views/php/canvas/default.php,
+ views/php/export/entity.php, views/php/export/metadata.php,
+ views/php/export/relationship.php, views/php/group/default.php,
+ views/php/messages/exceptions/exception.php, views/php/object/default.php,
+ views/php/pageshells/pageshell.php, views/php/search/entity_list.php,
+ views/php/site/default.php, views/php/user/default.php,
+ views/rss/annotation/default.php, views/rss/canvas/default.php,
+ views/rss/group/default.php, views/rss/object/default.php,
+ views/rss/pageshells/pageshell.php, views/rss/user/default.php,
+ views/xml/api/output.php, views/xml/messages/exceptions/exception.php,
+ views/xml/pageshells/pageshell.php, views/xml/xml-rpc/output.php: Whoa nelly
+ this is a big one: Removed license and copyright for files.
+
+2009-08-19 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * LICENCE.txt: Fixes #1176: Added date back to license.
+
+ * LICENCE.txt: Test
+
+2009-08-11 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixes #942: In register_user, replaced
+ sanitise_string() call with a simple trim(). Not a problem because all SQL
+ sanitation is handled elsewhere.
+
+ * engine/lib/annotations.php: Added timelower and timeupper to
+ get_annotations() and __get_annotations_calculate_x() and its helpers.
+
+2009-08-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/captcha/backgrounds/bg1.jpg, mod/captcha/backgrounds/bg2.jpg,
+ mod/captcha/backgrounds/bg3.jpg, mod/captcha/backgrounds/bg4.jpg,
+ mod/captcha/backgrounds/bg5.jpg, mod/captcha/captcha.php,
+ mod/captcha/fonts/1.ttf, mod/captcha/fonts/Liberation_serif_License.txt,
+ mod/captcha/languages/en.php, mod/captcha/manifest.xml,
+ mod/captcha/start.php, mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/delete.php,
+ mod/groups/actions/edit.php, mod/groups/actions/featured.php,
+ mod/groups/actions/forums/addpost.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletepost.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/editpost.php,
+ mod/groups/actions/forums/edittopic.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/actions/invite.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/addtopic.php, mod/groups/all.php,
+ mod/groups/discussions.php, mod/groups/edit.php, mod/groups/edittopic.php,
+ mod/groups/forum.php, mod/groups/graphics/defaultlarge.gif,
+ mod/groups/graphics/defaultmedium.gif, mod/groups/graphics/defaultsmall.gif,
+ mod/groups/graphics/defaulttiny.gif, mod/groups/graphics/icon.php,
+ mod/groups/groupprofile.php, mod/groups/index.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/manifest.xml,
+ mod/groups/membership.php, mod/groups/membershipreq.php, mod/groups/new.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/group/group.php,
+ .../views/default/groups/closedmembership.php,
+ mod/groups/views/default/groups/contentwrapper.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ mod/groups/views/default/groups/members.php,
+ .../views/default/groups/membershiprequests.php,
+ mod/groups/views/default/groups/profileitems.php,
+ mod/groups/views/default/groups/side_menu.php,
+ .../views/default/icon/group/default/large.php,
+ .../views/default/icon/group/default/medium.php,
+ .../views/default/icon/group/default/small.php,
+ .../views/default/icon/group/default/tiny.php,
+ .../views/default/object/groupforumtopic.php,
+ mod/groups/views/default/river/forum/create.php,
+ .../views/default/river/forum/topic/create.php,
+ mod/groups/views/default/river/group/create.php,
+ .../views/default/river/object/group/create.php,
+ .../river/object/groupforumtopic/annotate.php,
+ .../river/object/groupforumtopic/create.php,
+ .../river/object/groupforumtopic/update.php,
+ .../default/river/relationship/member/create.php,
+ mod/groups/views/default/settings/groups/edit.php,
+ mod/groups/views/default/sharing/invite.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ .../views/default/widgets/a_users_groups/view.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php,
+ mod/groups/views/rss/forum/topicposts.php,
+ mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/contentwrapper.php,
+ mod/groups/views/rss/groups/profileitems.php,
+ mod/notifications/actions/groupsave.php, mod/notifications/actions/save.php,
+ .../graphics/icon_notifications_email.gif, mod/notifications/groups.php,
+ mod/notifications/index.php, mod/notifications/languages/en.php,
+ mod/notifications/manifest.xml, mod/notifications/start.php,
+ .../views/default/notifications/css.php,
+ .../notifications/settings/usersettings.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/jsfuncs.php,
+ .../notifications/subscriptions/personal.php,
+ mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/actions/resetdefaultprofile.php, mod/profile/defaultprofile.php,
+ mod/profile/edit.php, mod/profile/editicon.php,
+ mod/profile/graphics/defaultlarge.gif,
+ mod/profile/graphics/defaultmaster.gif,
+ mod/profile/graphics/defaultmedium.gif,
+ mod/profile/graphics/defaultsmall.gif, mod/profile/graphics/defaulttiny.gif,
+ mod/profile/graphics/defaulttopbar.gif, mod/profile/icon.php,
+ mod/profile/icondirect.php, mod/profile/index.php,
+ mod/profile/javascript.php, mod/profile/manifest.xml, mod/profile/start.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ .../views/default/js/jquery.imgareaselect-0.8.js,
+ .../default/js/jquery.imgareaselect-0.8.min.js,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/adminwrapper.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/submenu.php,
+ mod/profile/views/default/profile/userdetails.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/index.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/manifest.xml, mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/reportedcontent/user_report.php,
+ mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ mod/riverdashboard/index.php, mod/riverdashboard/languages/en.php,
+ mod/riverdashboard/manifest.xml, mod/riverdashboard/start.php,
+ .../views/default/river/sitemessage/create.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php,
+ .../views/default/settings/riverdashboard/edit.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../views/json/riverdashboard/container.php,
+ .../views/rss/riverdashboard/container.php, mod/thewire/actions/add.php,
+ mod/thewire/actions/delete.php, mod/thewire/add.php,
+ mod/thewire/everyone.php, mod/thewire/graphics/river_icon_thewire.gif,
+ mod/thewire/graphics/thewire_speech_bubble.gif, mod/thewire/index.php,
+ mod/thewire/languages/en.php, mod/thewire/manifest.xml,
+ mod/thewire/readme.txt, mod/thewire/start.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ .../views/default/thewire/activity_view.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/thewire/views/default/thewire/notfound.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/thewire/scripts/counter.js,
+ mod/thewire/views/default/thewire/view.php,
+ mod/thewire/views/default/widgets/thewire/edit.php,
+ mod/thewire/views/default/widgets/thewire/view.php: removed all main plugins
+ from core - they now live in the plugins svn
+
+2009-08-05 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Added documentation to
+ list_entities_from_access_collection();
+
+2009-08-04 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed a security issues when simple cache is off.
+
+2009-08-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: small edit
+
+2009-08-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Added starttime and endtime for
+ get_entities_from_annotation().
+
+2009-07-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Refs #1089: Removed [B] flag from htaccess. This flag is
+ wildly inconsistent in functionality and support in Apache. Will have to
+ implement a solution in PHP.
+
+2009-07-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Added get/list_entities_from_access_collection().
+
+ * engine/lib/cache.php: Fixes #1151: Added is_dir() check before attempting
+ to create cache directory.
+
+2009-07-27 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Fixes #1148: Correctly comparing strings to
+ get OS.
+
+2009-07-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/css.php: small fix to force facebook and
+ twitter user icons to the right size in the recent members sidebar
+
+2009-07-24 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Fixes #1144: Added comma between order by fields.
+
+
+2009-07-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, version.php: Closes #1137: Setting a hidden variable
+ "returntoreferer" in a login form will now cause the action to use the
+ "referrer" address on a successful login. Version bump.
+
+ * mod/profile/views/default/profile/editicon.php: Minor bugfix on username
+
+2009-07-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * .../views/default/object/groupforumtopic.php: Closes #1131: htmlentities
+ in view around user text
+
+2009-07-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: readme tweak
+
+ * CONTRIBUTORS.txt: small tweak
+
+2009-07-15 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icondirect.php, simplecache/view.php: Forcing a new db connect
+ for simplecache/view.php and mod/profile/icondirect.php Will avoid bugs if a
+ previous connection has been created.
+
+2009-07-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Closes #1119: If post data not initially found then
+ input stream is used.
+
+2009-07-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: Removed #1100 hack
+
+2009-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: Closes #1100: Added a dummy
+ function to page shell to initialise jquery
+
+ * views/default/canvas/layouts/widgets.php: Closes #1113: Htmlentities made
+ UTF-8 and quotes safe.
+
+2009-07-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php, version.php: Closes #1111: Using substr
+ instead of parse_url.
+
+ * engine/lib/elgglib.php: Refs #427: Added $vars array to hook call.
+
+2009-07-07 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/htmlawed/start.php: Closes #956: Classes are removed by the HTML
+ filter.
+
+ * engine/lib/access.php, mod/groups/start.php: Refs #1099: Using write
+ access hook to allow group-only ACLs. Need to examine better solutions after
+ 1.7.
+
+2009-07-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/pulldown.php: Closes #1105: Value on input/pulldown
+ view now escaped.
+
+ * engine/lib/xml-rpc.php: Closes #1075: XML-RPC client behaving as per spec
+
+2009-07-06 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php, htaccess_dist: Refs #1089: Added [B] flag to
+ rewrite for tags. Won't work until apache 2.2.12. Cleaned up some query
+ code in pagehandler().
+
+2009-07-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/cropicon.php: Admin cropping of other user icons now
+ works as expected.
+
+ * mod/profile/start.php: Fixed doubling on icon edit (nb. this was not the
+ same issue as Refs #1100)
+
+ * mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php: Removed edit profile, added
+ links to own page.
+
+2009-07-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: small tweak to filestore
+
+2009-07-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/cropicon.php, mod/profile/actions/edit.php,
+ mod/profile/actions/iconupload.php, mod/profile/editicon.php,
+ mod/profile/manifest.xml, mod/profile/start.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/menu/links.php,
+ mod/profile/views/default/profile/userdetails.php, version.php: * Closes
+ #1104: Edit profile and edit icon links on pulldown menu for editable users.
+ * Closes #545: Admins are now able to edit profiles and icons of other users.
+ * CSRF protection added to icon upload and edit code. * Version bump.
+
+ * engine/lib/entities.php: Closes #742: Ability to retrieve master icon from
+ getIcon() interface.
+
+ * languages/en.php, mod/profile/views/default/profile/editicon.php: Closes
+ #1103: Profile text now has translation tag
+
+2009-07-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: added css rule for em tags to work properly with
+ htmlawed and tinyMCE editor
+
+2009-07-03 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/htmlawed/start.php: Allowing selected style attributes in htmlawed.
+
+2009-07-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Removing update client from initial
+ modules.
+
+ * actions/systemsettings/install.php: Refs #1086 & #1073: Filtering and
+ captcha have correct install defaults.
+
+2009-07-02 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Closes #859: Group forum thread-starters receive
+ same email as participants.
+
+2009-07-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: order by now works on get entities from metadata
+
+2009-07-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/htmlawed/start.php: Fixed a typo in htmlawed filtering.
+
+ * engine/lib/users.php: Refs #1058: Using validated metadata for new user
+ permission check. Correctly allows for enable() / disable(), but still not
+ ideal.
+
+2009-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009070101.php, mod/kses/manifest.xml,
+ mod/kses/start.php, mod/kses/vendors/kses/AUTHORS,
+ mod/kses/vendors/kses/COPYING, mod/kses/vendors/kses/ChangeLog,
+ mod/kses/vendors/kses/README, mod/kses/vendors/kses/TODO,
+ mod/kses/vendors/kses/docs/attribute-value-checks,
+ mod/kses/vendors/kses/docs/hooks,
+ mod/kses/vendors/kses/docs/stripping-everything,
+ mod/kses/vendors/kses/docs/supported-formats,
+ .../vendors/kses/docs/whitelisted-url-protocols,
+ mod/kses/vendors/kses/examples/filter.php,
+ mod/kses/vendors/kses/examples/test.php, mod/kses/vendors/kses/kses.php,
+ mod/kses/vendors/kses/oop/oop.kses.changelog.txt,
+ mod/kses/vendors/kses/oop/oop.simple.api.txt,
+ mod/kses/vendors/kses/oop/php4.class.kses.php,
+ mod/kses/vendors/kses/oop/php5.class.kses.php,
+ mod/kses/vendors/kses/oop/test.oop.kses.php, version.php: Refs #1086:
+ Deprecating kses and removing it from core. Version bump.
+
+2009-07-01 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/htmlawed/manifest.xml, mod/htmlawed/start.php,
+ mod/htmlawed/vendors/htmLawed/htmLawed.php,
+ mod/htmlawed/vendors/htmLawed/htmLawedTest.php,
+ mod/htmlawed/vendors/htmLawed/htmLawed_README.htm,
+ mod/htmlawed/vendors/htmLawed/htmLawed_README.txt,
+ .../vendors/htmLawed/htmLawed_TESTCASE.txt: Refs #1086: Added htmLawed plugin
+ as replacement for kses.
+
+2009-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Closes #1097: Results set by set_input are now also
+ filtered by get_input()
+
+ * engine/lib/annotations.php: Short circuit on delete annotations to avoid
+ error message
+
+ * engine/lib/metadata.php: Metadata delete now passing correct object, also
+ handles missing metadata entity.
+
+2009-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/jsfuncs.php,
+ .../views/default/js/jquery.imgareaselect-0.4.2.js,
+ .../default/js/jquery.imgareaselect-0.4.2.min.js,
+ .../views/default/js/jquery.imgareaselect-0.8.js,
+ .../default/js/jquery.imgareaselect-0.8.min.js,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/javascript.php,
+ vendors/jquery/jquery-1.2.6.pack.js, vendors/jquery/jquery-1.3.2.min.js,
+ vendors/jquery/jquery-ui-1.7.2.custom.min.js,
+ .../jquery/jquery-ui-personalized-1.5.3.packed.js,
+ vendors/jquery/jquery.form.js, views/default/embed/addcontentjs.php,
+ views/default/js/initialise_elgg.php, views/default/js/upload_js.php,
+ views/default/page_elements/header.php: update to jquery 1.3.2 and jqueryUI
+ 1.7.2 closes #941
+
+2009-06-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php: fixed wire reply button
+ (missing 'echo'), and tweaked river/dashboard reply link for the default
+ theme. Also fixed a typo in the admin area
+
+2009-06-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/groups.php, search/index.php, search/users.php: Refs #1086: Fixes
+ specific issues mentioned pending KSES fix / replacement
+
+2009-06-30 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, views/default/friends/collection.php,
+ views/default/output/confirmlink.php: Modified output/confirmlink view to
+ accept a class param. user_remove_friend() uses
+ remove_user_from_access_collection() instead of raw SQL. Deleting an access
+ collection prompts using output/confirmlink.
+
+2009-06-30 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/river/object/thewire/create.php: wire links will now
+ work in the activity river
+
+2009-06-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Fixed typo
+
+2009-06-29 brettp <brettp@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php: Ref #1015: Correctly placed the end
+ div for access collection delete link.
+
+ * views/default/friends/collection.php: Closes #1015: Added a prompt before
+ deleting an access collection. Also cleaned up some hard vs soft tab issues.
+
+
+ * engine/lib/users.php: Closes #502: Removing unfriended users from access
+ lists upon unfriending.
+
+ * engine/lib/annotations.php: Closes #337: Added checking for metastrings in
+ __get_annotations_calculate_x()
+
+ * engine/lib/entities.php, engine/lib/relationships.php: Updated get_*()
+ functions ot return false if an invalid subtype is specified.
+
+2009-06-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009050801.php: Closes #1073: Captcha off by default
+
+2009-06-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river2.php: Access levels on add_to_river() will now respect
+ ACCESS_DEFAULT level.
+
+ * views/rss/pageshells/pageshell.php: Closes #1090: Removed xml:base from
+ RSS channel tag.
+
+2009-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/captcha/manifest.xml: Minor point of clarification
+
+2009-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: tweak to input box size
+
+2009-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * engine/lib/elgglib.php: Closes #427: Original view name passed to plugin
+ hook.
+
+ * engine/lib/filestore.php: Some tidying of file download manager functions.
+
+2009-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * actions/friends/add.php, actions/friends/remove.php,
+ mod/profile/views/default/profile/menu/actions.php: Action gatekeeper added
+ to add and remove friends.
+
+2009-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump.
+
+ * views/ical/canvas/default.php, views/ical/export/entity.php,
+ views/ical/object/default.php, views/ical/pageshells/pageshell.php,
+ views/ical/search/entity_list.php: Closes #581: First draft ICAL export views
+ for Notable calendar events.
+
+2009-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump.
+
+ * engine/lib/filestore.php: Closes #601: Provides default for new
+ ElggFilestore objects to remove warning message.
+
+2009-06-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php: * Translation 'reply'
+ fixed. * Now possible to reply to wire posts from within the river.
+
+ * engine/lib/annotations.php: Closes #719: More options on annotation count
+ functions.
+
+ * views/default/input/access.php, views/default/input/button.php,
+ views/default/input/checkboxes.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/hidden.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/plaintext.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Closes #540:
+ input/* views have internalid attribute.
+
+ * engine/lib/elgglib.php: Refs #964: Correct detection of type.
+
+ * version.php: Version bump
+
+ * engine/lib/system_log.php: Refs #328: Documentation tweak.
+
+ * engine/lib/elgglib.php: Refs #964: Tidied plugin hook into framework
+ function, changed hook to entity:annotate.
+
+2009-06-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, version.php: Marcus Povey 20090616: * Closes #964:
+ Introduces a plugin hook 'annotations:view', $entity_class
+ (object/user/group/site) called elgg_view_entity on FULL view. This lets you
+ return annotations to an entity and control the order in which they're
+ displayed. Existing views remain un-effected but should probably be
+ retrofitted. * Version bump.
+
+ * engine/lib/system_log.php: Bugfix to archive logs sql
+
+2009-06-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/urlshortener.php: URL shortener view.
+
+ * htaccess_dist: Actions rewrite rule will now match against numbers as well
+ as letters.
+
+ * version.php: Version bump
+
+ * mod/thewire/views/default/thewire/forms/add.php: Call out to a url
+ shortner if one is available, through the use of the input/urlshortner view.
+
+2009-06-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * engine/lib/filestore.php, engine/lib/users.php: Refs #1041: * Speculative
+ fix, extended blacklist of invalid characters for user signup * Mapping some
+ filestore matrix characters (notable '.') to a safe char
+
+ * engine/lib/filestore.php, languages/en.php: Refs #1041: Extra debug
+
+2009-06-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Block URL unsafe characters from username
+
+2009-06-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: File cache attempts to create directory if it is not
+ present.
+
+2009-06-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/mb_wrapper.php, mod/thewire/start.php: * Introducing substr
+ wrapper function * Wire strips tags (Closes #1045)
+
+2009-06-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/mb_wrapper.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, search/index.php, version.php: Closes #639: *
+ Metastrings can be searched either case sensitive or insensitive modes. *
+ Tags now have case lowered in a UTF8 safe way (requires mbstring support). *
+ Introducing mb_wrapper.php containing multibyte wrapper functions. * Version
+ bump. * Introduces #1043 for consideration.
+
+ * engine/lib/actions.php, engine/lib/pagehandler.php: Close #1040: Limited
+ explode on action and page handler.
+
+2009-06-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/checkboxes.php: Closes #1037: Removed double pasting
+
+2009-06-04 kevin <kevin@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/js/upload_js.php: Changed a variable name that IE did not
+ like.
+
+2009-06-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Closes #998 : Operator selection on get by
+ metadata multi
+
+2009-06-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Removed some error messages
+
+2009-05-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Option to suppress visible errors in token
+ validation code.
+
+2009-05-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/upload/upload_form_content.php: hashed out folders view
+
+2009-05-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: Closes #1035: Page handler now urldecodes
+ input, necessary as vars are extracted from request_uri and not $_REQUEST
+ (which is automatically decoded)
+
+ * engine/lib/group.php: Fixed some typos in group search
+
+ * languages/en.php: Group search language correction
+
+ * languages/en.php, search/groups.php: Group search language correction
+
+ * views/default/user/search/finishblurb.php: Refs #965: Correct some search
+ links.
+
+ * views/default/group/search/finishblurb.php,
+ views/default/user/search/finishblurb.php: Refs #965: Correct some search
+ links.
+
+ * engine/lib/entities.php, engine/lib/search.php, search/index.php,
+ version.php: Refs #965: Search now correctly using page handler to make it
+ easier to replace.
+
+ * views/default/page_elements/elgg_topbar.php: Refs #965: Topbar search now
+ pointing at correct url.
+
+ * languages/en.php, views/default/page_elements/elgg_topbar.php: Closes
+ #805: Top bar search now internationalised. Refs #965
+
+2009-05-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Delete event now
+ triggered on metadata and annotation delete
+
+ * version.php: Version bump
+
+ * engine/lib/sessions.php: Admin shortcut flag set on login as well as init
+
+2009-05-27 kevin <kevin@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Removed plugin-specific references from
+ file_display_thumbnail and file_add_to_folders.
+
+2009-05-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Refs #965: Allowing upgrades to be loaded from
+ other locations.
+
+ * engine/lib/group.php, engine/lib/users.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2009052201.sql, languages/en.php, search/groups.php,
+ version.php, views/default/group/search/finishblurb.php,
+ views/default/group/search/startblurb.php: Closes #1030: Group title and
+ description search added, refs #965
+
+ * engine/lib/users.php: Closes #1031: Restored wildcard as it didn't appear
+ that slow.
+
+2009-05-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/captcha/views/default/input/captcha.php: captcha layout tweak
+
+2009-05-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * engine/lib/database.php: Refs #1027: Introducing
+ $CONFIG->db_disable_query_cache which allows disabling of query cache for
+ implementation in CLI mode
+
+ * engine/lib/actions.php: Closes #1026: Removed "@" from include statement
+
+2009-05-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Closes #1025: Using the correct variable.
+
+2009-05-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * views/rss/annotation/default.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/pageshells/pageshell.php,
+ views/rss/user/default.php: Closes #646: GeoRSS support added to Locatable
+ objects with coordinates on RSS feeds
+
+ * views/rss/annotation/default.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/pageshells/pageshell.php,
+ views/rss/user/default.php: Closes #1024: Added call to views which allow
+ extensions to be made.
+
+ * views/rss/annotation/default.php, views/rss/group/default.php,
+ views/rss/object/default.php, views/rss/pageshells/pageshell.php: Making use
+ of the Dublin Core extensions to provide owner information in RSS feeds
+
+ * engine/lib/location.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2009051401.sql, version.php: Fixed geocode stuff +
+ version bump
+
+2009-05-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ mod/diagnostics/views/default/diagnostics/test.php,
+ .../views/default/diagnostics/testresult.php: Closes #1009: Diagnostics unit
+ test with example
+
+ * engine/lib/testing.php, mod/diagnostics/index.php,
+ mod/diagnostics/languages/en.php, mod/diagnostics/start.php,
+ mod/diagnostics/testreport.php, mod/diagnostics/unittester.php,
+ .../views/default/diagnostics/runalltests.php,
+ mod/diagnostics/views/default/diagnostics/test.php,
+ .../views/default/diagnostics/testresult.php: Refs #1009: Enhancements to
+ diagnostics tool to use the test framework.
+
+ * engine/lib/testing.php: Refs #1009: Changed the method tests are
+ performed.
+
+ * engine/lib/testing.php: Refs #1009: Simple test framework outline added.
+
+2009-05-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php: Closes #1003: Using more efficient query
+
+ * engine/lib/river.php, version.php: Removed deprecated river library +
+ version bump
+
+ * engine/lib/actions.php: Closes #749: Warning message on missing token.
+
+2009-05-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php: Closes #944: Changed owner check to a
+ canEdit check on the group.
+
+ * engine/lib/river.php: Deprecated old river code
+
+ * engine/lib/system_log.php, version.php: Closes #1010: Log event now called
+ on an event of its own, this permits plugins to add additional logging or
+ replace the logging method altogether. This is only possible now that the
+ old river code has been replaced.
+
+ * engine/lib/version.php: Refs #965 & #967: Event triggered on upgrade,
+ allowing easier integration with plugins.
+
+ * views/default/spotlight/default.php: Closes #1017: Div no longer closed
+ early.
+
+ * views/default/page_elements/elgg_topbar.php: Closes #1016: Image tag
+ closed
+
+ * version.php: Version bump
+
+ * mod/captcha/start.php: Captcha list can now be extended by other plugins
+
+2009-05-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/start.php: Hard limit to string lengths.
+
+ * mod/captcha/fonts/Liberation_serif_License.txt: Added font licence, refs
+ #1011
+
+ * actions/systemsettings/install.php, engine/lib/upgrades/2009050801.php,
+ mod/captcha/backgrounds/bg1.jpg, mod/captcha/backgrounds/bg2.jpg,
+ mod/captcha/backgrounds/bg3.jpg, mod/captcha/backgrounds/bg4.jpg,
+ mod/captcha/backgrounds/bg5.jpg, mod/captcha/captcha.php,
+ mod/captcha/fonts/1.ttf, mod/captcha/languages/en.php,
+ mod/captcha/manifest.xml, mod/captcha/start.php,
+ mod/captcha/views/default/captcha/css.php,
+ mod/captcha/views/default/input/captcha.php, version.php: Closes #1011: Added
+ basic captcha support.
+
+ * actions/systemsettings/install.php: System default plugins now accepts
+ array as well as CSV
+
+ * views/default/account/forms/forgotten_password.php: Refs #1011: Correctly
+ CSSed and now using captcha if available
+
+2009-05-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * views/default/account/forms/register.php, views/default/input/captcha.php:
+ Closes #983: Introducing input/captcha view, use wherever a captcha is
+ required - override with plugins and use the actions hook to do additional
+ validation!
+
+ * engine/lib/relationships.php: Refs #975: Get entities from metadata and
+ relationship now behaves as expected
+
+2009-05-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Closes #994: elgg_view_exists will now check to
+ see if a view exists by dint of being extended.
+
+ * engine/lib/access.php, engine/lib/elgglib.php: Removing spurious error log
+ messages
+
+ * mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php: Closes #725: Typo corrected.
+
+ * languages/en.php, mod/riverdashboard/languages/en.php,
+ .../views/default/riverdashboard/welcome.php,
+ views/default/basic_elements/welcome.php,
+ views/default/welcome/logged_in.php: Closes #950: Fixed missing translations.
+
+ * mod/riverdashboard/languages/en.php,
+ .../views/default/riverdashboard/welcome.php: Closes #1004: Welcome no longer
+ hard coded.
+
+ * version.php: Version bump
+
+ * engine/lib/entities.php: Closes #1007: Private data now removed on entity
+ deletion.
+
+ * engine/lib/users.php: Closes #1008: Fixed typo
+
+2009-05-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Closes #824: Test variable to prevent error
+ message in log.
+
+2009-05-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Closes #1002: Committed missing variable code
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: Test
+
+2009-04-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * UPGRADE.txt: Closes #1001: This is a test
+
+ * UPGRADE.txt: Refs #4: This is a test
+
+ * UPGRADE.txt:
+
+ * UPGRADE.txt:
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: TEst
+
+ * UPGRADE.txt: Test
+
+ * UPGRADE.txt: Removed test
+
+ * UPGRADE.txt: Test
+
+2009-04-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Closes #927: Minimum user length no longer hard
+ coded.
+
+ * engine/lib/relationships.php: Closes #975: Now possible to search by
+ metadata and relationship
+
+ * engine/lib/users.php: Closes #943: Event triggered when banning or
+ unbanning a user.
+
+2009-04-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * mod/groups/actions/edit.php,
+ mod/groups/views/default/forms/groups/edit.php: Added security token to group
+ edit form
+
+ * views/default/input/form.php, views/default/input/securitytoken.php:
+ Introducing input/securitytoken as an intermediate step for form conversion.
+
+ * mod/groups/actions/edit.php, mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/edit.php: Closes #969: Admin option to
+ allow the setting of certain access controls on a group
+
+ * actions/useradd.php, engine/lib/users.php: Closes #856: Admin created
+ users are no longer created as being owned by the admin
+
+2009-04-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: Refs #969: Added admin menu option for
+ enabling private groups
+
+ * mod/groups/views/default/settings/groups/edit.php: Refs #969: Added admin
+ menu option for enabling private groups
+
+ * engine/lib/group.php: Closes #980: group_gatekeeper() now has an admin
+ override if the admin is logged in
+
+ * simplecache/view.php: Closes #989: Forces regenerate on next refresh when
+ cache file is missing
+
+2009-04-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php, engine/lib/users.php:
+ Deleting correct data + using correct tables
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/metadata.php, engine/lib/users.php: Closes #957: Annotations and
+ metadata owned by a deleted user are now also deleted.
+
+ * languages/en.php, mod/groups/views/default/forum/topicposts.php,
+ .../views/default/object/groupforumtopic.php: Closes #957: Groups topics now
+ handle deleted users, I recommend that people look at what I've done and
+ handle deleted users in a similar way in their plugins.
+
+2009-04-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Belts and braces checking on isloggedin()
+
+2009-04-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/sidebar_boxes.php: an extra view to extend,
+ added to sidebar boxes
+
+2009-04-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/kses/manifest.xml: Refs #833: Added manifest
+
+ * actions/systemsettings/install.php, engine/lib/input.php,
+ engine/lib/upgrades/2009041701.php, mod/kses/start.php,
+ mod/kses/vendors/kses/AUTHORS, mod/kses/vendors/kses/COPYING,
+ mod/kses/vendors/kses/ChangeLog, mod/kses/vendors/kses/README,
+ mod/kses/vendors/kses/TODO,
+ mod/kses/vendors/kses/docs/attribute-value-checks,
+ mod/kses/vendors/kses/docs/hooks,
+ mod/kses/vendors/kses/docs/stripping-everything,
+ mod/kses/vendors/kses/docs/supported-formats,
+ .../vendors/kses/docs/whitelisted-url-protocols,
+ mod/kses/vendors/kses/examples/filter.php,
+ mod/kses/vendors/kses/examples/test.php, mod/kses/vendors/kses/kses.php,
+ mod/kses/vendors/kses/oop/oop.kses.changelog.txt,
+ mod/kses/vendors/kses/oop/oop.simple.api.txt,
+ mod/kses/vendors/kses/oop/php4.class.kses.php,
+ mod/kses/vendors/kses/oop/php5.class.kses.php,
+ mod/kses/vendors/kses/oop/test.oop.kses.php, vendors/kses/AUTHORS,
+ vendors/kses/COPYING, vendors/kses/ChangeLog, vendors/kses/README,
+ vendors/kses/TODO, vendors/kses/docs/attribute-value-checks,
+ vendors/kses/docs/hooks, vendors/kses/docs/stripping-everything,
+ vendors/kses/docs/supported-formats,
+ vendors/kses/docs/whitelisted-url-protocols,
+ vendors/kses/examples/filter.php, vendors/kses/examples/test.php,
+ vendors/kses/kses.php, vendors/kses/oop/oop.kses.changelog.txt,
+ vendors/kses/oop/oop.simple.api.txt, vendors/kses/oop/php4.class.kses.php,
+ vendors/kses/oop/php5.class.kses.php, vendors/kses/oop/test.oop.kses.php,
+ version.php: Closes #833: Kses now built as module
+
+ * engine/lib/input.php: Reverted last
+
+2009-04-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: small tweak to kses input, for now.
+
+2009-04-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Removed style on code
+
+ * engine/lib/input.php: Removed columns
+
+ * engine/lib/input.php: Slightly more draconian kses rules
+
+ * engine/lib/plugins.php: Closes #982: Object limit maximum raised.
+
+2009-04-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Moved old file mime type guesser back to files
+ plugin so that there are no conflicts
+
+2009-04-16 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Passed container_guid to any quota plugins and
+ removed duplicate function definition.
+
+ * engine/lib/filestore.php: Added file_get_general_file_type() function
+
+2009-04-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, version.php: Centralised mimetype function
+
+ * engine/lib/filestore.php, views/default/js/upload_js.php,
+ views/default/upload/upload_form_content.php: Rolled in Kevin's file store
+ enhancements and upload code.
+
+ * version.php: Version bump
+
+ * engine/lib/pageowner.php, languages/en.php: Error logged on page forward
+ due to missing page owner.
+
+2009-04-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/graphics/river_icon_thewire.gif,
+ .../views/default/thewire/activity_view.php: link to the wire added to bottom
+ of latest wire post box on riverdashboard page
+
+2009-04-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: small profile custom
+ fields tweak
+
+2009-04-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/start.php: The Wire incoming SMS now uses the default access
+ level.
+
+ * mod/thewire/start.php: Moving the wire to use $SESSION instead of
+ $_SESSION
+
+ * engine/lib/elgglib.php: Removing viewtype autoforward, because it broke
+ installs.
+
+2009-04-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/actionurl.php, views/default/output/confirmlink.php,
+ views/default/output/url.php: Rolled token into url and confirmlink
+
+ * engine/lib/tags.php: Closes #977: get_tags now functional for entities
+ without subtypes.
+
+2009-04-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/actionurl.php: Introducing actionurl.php (Refs #749)
+
+ * engine/lib/pageowner.php: Forward user if a page owner is inaccessible
+ (Refs #969)
+
+ * engine/lib/elgglib.php: Non-default view types now preserved when
+ forwarding.
+
+ * engine/lib/metadata.php: Closes #974: Owner_guid may now be an array
+
+2009-04-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, engine/lib/configuration.php,
+ engine/lib/elgglib.php, languages/en.php, views/default/settings/system.php:
+ Close #968: View path cache can now be turned on and off
+
+ * engine/lib/elgglib.php: Removed unused experimental cache functions
+
+ * actions/admin/plugins/reorder.php, engine/lib/plugins.php: Refs #946:
+ Improved documentation on enable/disable/reorder plugin commands
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, engine/lib/elgglib.php,
+ engine/lib/plugins.php, upgrade.php: Refs #968 & #946: Tidied filepath cache
+ stuff by placing them in function calls.
+
+ * mod/profile/views/default/profile/userdetails.php,
+ views/default/admin/main.php, views/default/admin/plugins.php,
+ views/default/admin/site.php, views/default/admin/user.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/messages/errors/error.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/messages/message.php,
+ views/default/usersettings/main.php, views/default/usersettings/plugins.php:
+ Refs #963: Autop changed to longtext on standard views
+
+ * engine/lib/database.php, version.php: Added callback support to
+ get_data_row()
+
+2009-04-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Closes #937: Added time constraints to the tag
+ retrieval query.
+
+2009-04-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: The inclusion of a new library merits a new internal version
+ number.
+
+2009-04-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php,
+ .../views/default/riverdashboard/newestmembers.php: Closes #932: Recent
+ members string no longer hard coded
+
+2009-04-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/jquery/jquery.form.js, views/default/page_elements/header.php:
+ jQuery Form plugin, welcome to Elgg Core.
+
+2009-04-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/object/thewire.php: Closes #949: Method in "via
+ {{Method}}" now wrapped in an elgg_echo
+
+ * engine/lib/plugins.php: Closes #945: enable/disable_plugin now updates
+ $ENABLED_PLUGINS_CACHE
+
+2009-03-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/manifest.xml, version.php: Version bump
+
+ * engine/lib/metadata.php, engine/lib/users.php,
+ mod/uservalidationbyemail/start.php: Closes #896: Error thrown if user not
+ validate. Metadata physically removed rather than simply blanked when
+ validation is requested. Note: update_metadata no longer seems to support
+ anonymous metadata which is likely to have knock on issues elsewhere...
+
+2009-03-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icondirect.php: Closes #916: Icondirect now using multibyte
+ safe str_split code from filestore.php
+
+ * version.php: Version bump
+
+ * engine/lib/database.php: Closes #875: Using db link
+
+ * engine/lib/notification.php: Closes #889: Decoding html entities from
+ messages before stripping tags
+
+ * engine/lib/elgglib.php: Closes #897: Memcache datalists correctly saved on
+ first load
+
+ * views/default/css.php: Closes #903: Large <pre> and <code> blocks no
+ longer break page shell
+
+ * mod/riverdashboard/index.php: Closes #899: River dash ajax now UTF-8
+
+ * views/default/page_elements/owner_block.php: Closes #914: Removed odd line
+
+2009-03-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php: Context can now be assigned by defining a
+ constant in the page.
+
+2009-03-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php: Refs #926: Private wire posts get bumped to
+ 'logged in'
+
+2009-03-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: small lang tweak
+
+ * languages/en.php, .../views/default/profile/editdefaultprofile.php: small
+ lang tweak
+
+2009-03-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/edittopic.php: Closes #930: addtopic -> edittopic
+
+2009-03-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/river_widget/view.php: small tweak
+
+ * .../views/default/river/object/thewire/create.php: river view tweak for
+ the wire
+
+2009-03-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Different assignment.
+
+ * engine/lib/users.php: Disposed of unnecessary $result variables.
+
+ * engine/lib/api.php: Closes #844: API parameter test logic improved
+
+ * engine/lib/languages.php: Closes #883: Using different operator logic so
+ that plugins can replace existing translation entries.
+
+ * mod/groups/actions/addtogroup.php: Closes #893: Using ->join() method
+ instead to ensure that event is triggered.
+
+2009-03-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt, version.php: Oh hai Elgg 1.5
+
+ * actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ .../actions/email/confirm.php, version.php: Closes #873: Mail/password
+ reset/confirm actions forward to wwwroot rather than ref. Version bump.
+
+ * engine/lib/elgglib.php: Fixes #877: Minor typo addressed. Note: This
+ function is currently not used.
+
+2009-03-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, version.php: Fixed typo in default
+ plugins init + version bump
+
+2009-03-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * engine/lib/notification.php: Provide a From email address workaround for
+ those with windows servers. See issue http://bugs.php.net/bug.php?id=28038
+
+2009-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Profile user icon URL fix.
+
+2009-03-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/objects.php,
+ engine/lib/sites.php, engine/lib/users.php, languages/en.php, version.php:
+ Closes 868: Fixes regression introduced in [3119]. Version number bumped.
+
+2009-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Added a clause that will detect if insert_data
+ returned 0 rather than false, and returns 'true' in this case. Fixes #867
+
+ * views/default/page_elements/header.php: Javascript loaded using a safer
+ URL scheme. Fixes #862
+
+2009-03-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, .../views/default/groups/group_sort_menu.php:
+ missing lang strings fixed
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/groups/grouplisting.php: missing strings added
+
+2009-03-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: left column sidebar background color changed for
+ consistency with other pages (props to Cash for spotting it)
+
+2009-03-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Minor api tweak
+
+2009-03-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Changing version number
+
+ * version.php: Elgg 1.5 RC2. Hi!
+
+2009-03-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Closes #823: Root cause was that the Headers decl requires
+ mod_headers to be installed (and Apache had a very unhelpful failure mode for
+ instances when it wasn't). The Header def has now been IfModuled out.
+ mod_headers is still recommended for correct functioning across proxies.
+
+2009-03-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: openID river rules removed
+
+2009-03-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Refs #823: Mod_deflate htaccess def now disabled by
+ default.
+
+ * mod/groups/actions/edit.php: Admins can now change group profile picture.
+
+2009-03-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Banned users always have default icons.
+
+ * mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php: Some
+ tweaks to river dashboard, including proper language usage.
+
+ * engine/lib/notification.php: Banned users no longer get notifications
+
+ * actions/register.php, engine/lib/users.php: User validation no longer
+ occurs on first install
+
+ * engine/lib/filestore.php: Icons are now correctly resized
+
+2009-03-09 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php, mod/groups/start.php,
+ mod/groups/views/default/forms/groups/edit.php: Groups now support
+ add_group_tool_option so that any group tool can be toggled on or off via the
+ group's edit form.
+
+ * engine/lib/group.php: Introducing the add_group_tool_option function.
+
+2009-03-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/crontrigger/manifest.xml, mod/diagnostics/manifest.xml,
+ mod/garbagecollector/manifest.xml, mod/groups/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/notifications/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/riverdashboard/manifest.xml,
+ mod/thewire/manifest.xml, mod/uservalidationbyemail/manifest.xml: Bumped
+ version numbers on bundled plugins
+
+2009-03-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: css river rule added for openID user updating
+ profile
+
+2009-03-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version bump
+
+ * mod/profile/views/default/profile/userdetails.php: Closes #851: Fixed
+ regression. It is now possible for an admin to edit another user's profile
+ consistent with 1.2
+
+ * _css/css.php, _css/js.php: Closes #844 & #845: Override is now no longer
+ forced on and so will now obey view cache settings.
+
+ * mod/groups/actions/invite.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/views/default/forms/groups/invite.php:
+ Closes #843: Introducing intermediary invite action to establish invite
+ relationship but ask a user to join
+
+ * version.php: Version bump
+
+ * engine/lib/users.php: Closes #841: User request for password changes now
+ functional.
+
+2009-03-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: one column canvas padding adding
+
+2009-03-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Very minor comment tweak
+
+ * engine/lib/group.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Reversed delete procedure on entities, parent now
+ checked first before sub deleted. Any stubs left over will be handled by the
+ garbage collector.
+
+2009-03-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: river icon added for openID friend, blockquote
+ style tweaked, elgg horizontal nav bar improved
+
+2009-03-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bumped version number corresponding to the change
+
+ * engine/lib/entities.php: Added garbage collector hook to clear up orphaned
+ sub table entities.
+
+ * mod/garbagecollector/start.php: Changed 'system','gc' to 'gc','system'
+
+2009-03-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Fixed icon overrides
+
+ * engine/lib/river2.php: If you don't have any friends, the river no longer
+ returns all on the 'friends' view. Fixes #839
+
+ * mod/profile/views/default/profile/listing.php: Removed banned listing
+
+ * mod/profile/index.php: Banned profiles are now hidden
+
+ * mod/profile/views/default/profile/userdetails.php: Fixed user profile ban
+ message
+
+2009-03-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version number bump
+
+ * engine/lib/languages.php: Closes #838: Missing set from static var.
+
+2009-03-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/json/riverdashboard/container.php,
+ views/json/river/item/list.php: Improved JSON version of the dashboard
+
+2009-03-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: missing river entry style added
+
+2009-03-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php: Online users list works properly
+
+ * languages/en.php, views/default/annotation/annotate.php: Fixed generic
+ river comment view
+
+ * mod/riverdashboard/languages/en.php: Corrected a poorly formatted text
+ string
+
+ * mod/thewire/manifest.xml: New manifest description for the wire.
+
+ * version.php: Elgg 1.5 RC1 is gearing up to leave the building.
+
+ * mod/apiadmin/actions/generate.php, mod/apiadmin/actions/revokekey.php,
+ mod/apiadmin/index.php, mod/apiadmin/languages/en.php,
+ mod/apiadmin/manifest.xml, mod/apiadmin/start.php,
+ .../views/default/apiadmin/forms/add_key.php,
+ mod/apiadmin/views/default/object/api_key.php,
+ mod/guidtool/actions/delete.php, mod/guidtool/export.php,
+ mod/guidtool/format_picker.php, mod/guidtool/import.php,
+ mod/guidtool/index.php, mod/guidtool/languages/en.php,
+ mod/guidtool/manifest.xml, mod/guidtool/start.php, mod/guidtool/view.php,
+ .../views/default/forms/guidtool/export.php,
+ .../views/default/forms/guidtool/format.php,
+ .../views/default/forms/guidtool/import.php,
+ mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php,
+ mod/guidtool/views/default/guidtool/profile.php,
+ .../views/default/object/guidtoolwrapper.php: Farewell APIadmin, farewell
+ GUIDtool. We'll see you over in the plugins repo.
+
+ * mod/thewire/actions/add.php: Wire posts now save as default access level
+
+ * mod/thewire/actions/add.php: Wire posts are now default access
+
+ * UPGRADE.txt: Improved upgrade text
+
+ * engine/lib/entities.php: Error in subtype detection
+
+2009-03-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/newestmembers.php: a small layout tweak
+
+2009-03-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, htaccess_dist: Fixed search RSS
+
+2009-03-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bumped version
+
+ * mod/crontrigger/start.php: Surpressing cron output
+
+2009-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: tiny rule added to make widget layout consistent
+ across all widgets
+
+2009-03-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Private items never trigger notifications
+
+ * engine/lib/entities.php: Access fix
+
+ * engine/lib/entities.php: Let's go with the most obvious application of
+ this.
+
+ * engine/lib/entities.php, engine/lib/river2.php: River access issues
+
+ * engine/lib/river2.php, languages/en.php,
+ views/default/river/item/noaccess.php: Stopgap for when you can no longer
+ view river items.
+
+ * views/default/input/button.php: Button src isn't always required.
+
+ * mod/notifications/languages/en.php: Text changes to hopefully make friends
+ notification settings a little less confusing
+
+ * CONTRIBUTORS.txt: Addition to the contributors file
+
+2009-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/thewire/css.php: css tweak
+
+2009-03-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/forms/guidtool/export.php,
+ .../views/default/forms/guidtool/import.php: GUIDtool now uses
+ input/plaintext
+
+ * engine/lib/access.php: Access modification - owners can always see their
+ own content
+
+ * views/foaf/user/default.php: Correction to FOAF URL
+
+ * views/foaf/user/default.php: FOAF URL fix
+
+ * views/foaf/page_elements/contentwrapper.php: FOAF contentwrapper
+
+2009-03-04 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Changed notification to use
+ has_access_to_entity to move all access control checks to a single mechanism
+
+2009-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/thewire/css.php: added rule to prevent character
+ remaing field focus on thewire individual page
+
+2009-03-04 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Added has_access_to_entity function
+
+ * engine/lib/access.php: Added the ability to optionally specify the user to
+ get_access_sql_suffix
+
+2009-03-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/group/default.php, views/rss/object/default.php,
+ views/rss/river/item/list.php: URL sanitation for RSS feeds
+
+ * mod/groups/views/default/groups/contentwrapper.php: Removing extra quotes
+
+ * views/json/page_elements/contentwrapper.php: JSON contentwrapper view
+
+ * engine/lib/elgglib.php, mod/groups/all.php, mod/groups/edit.php,
+ mod/groups/groupprofile.php,
+ mod/groups/views/default/groups/contentwrapper.php,
+ mod/groups/views/rss/groups/contentwrapper.php,
+ views/default/page_elements/contentwrapper.php,
+ views/rss/page_elements/contentwrapper.php: Added contentWrapper view
+
+2009-03-04 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/query.php: AccessControlQueryComponent::__toString changed to
+ use get_access_sql_suffix
+
+2009-03-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidtool/export.php, mod/guidtool/format_picker.php,
+ mod/guidtool/import.php, mod/guidtool/index.php,
+ mod/guidtool/languages/en.php, mod/guidtool/start.php: Moved GUID tool to
+ admin menu.
+
+2009-03-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/css.php: added a rule to prevent
+ characters remaining field on thewire receiving focus/highlighting
+
+2009-03-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/river/item/list.php: Title fix.
+
+ * engine/lib/elgglib.php, views/rss/river/item/list.php: Fixed river RSS
+ views
+
+2009-03-04 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Commented out a no longer needed line of code
+
+ * engine/lib/tags.php: get_tags now uses get_access_sql_suffix for access
+ control.
+
+2009-03-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/river/item/list.php: Ampersand fix
+
+ * engine/lib/elgglib.php, .../views/rss/riverdashboard/container.php,
+ views/rss/river/item/list.php: Improvements to elgg_view, plus river
+ dashboard RSS feed
+
+ * mod/groups/start.php: The 'manage join requests' link doesn't show up if
+ the current group doesn't have public membership.
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, mod/profile/icon.php, mod/profile/icondirect.php,
+ simplecache/view.php: Moving to a smaller chunk size.
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bumping version number
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icon.php: Profile icons come in chunks.
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, simplecache/view.php: Echoing the large output
+ buffer in chunks
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icon.php, mod/profile/icondirect.php, simplecache/view.php:
+ Splitting output into chunks.
+
+ * htaccess_dist: Improved .htaccess
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Stub for experimental view caching (disabled)
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, _css/js.php: Far future expires header
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Using faster array concatination
+
+ * views/default/input/button.php: Closes #832: Internal name now handled
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: $vars is once again populated with session data
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Removed utterly pointless lines
+
+ * engine/lib/languages.php: Current language now cached per process in
+ elgg_echo.
+
+ * engine/lib/plugins.php: Minor tweaks
+
+ * engine/lib/elgglib.php: Minor tweaks
+
+ * engine/lib/languages.php: Removed directory test to languages since it's
+ probably fair to assume that this isn't going to be the case
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * simplecache/view.php: Content length on the simplecache.
+
+2009-03-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: tiny amendment to owner-block icon spacing
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/js.php: JS override.
+
+ * simplecache/view.php: Fix for previous.
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Removing the stupidly slow array_merge from lang
+ load code
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, simplecache/view.php: A quiet little CSS override update.
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Made get_library_files non-recursive and removed
+ is_dir test... makes the func <1% of total execution time
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/objects.php,
+ engine/lib/sites.php, engine/lib/users.php: Removed calls to the deprecated
+ entity cache
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/crontrigger/start.php: Suppressing output on cron trigger
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: Getting rid of needless double-trimming.
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/disableall.php,
+ actions/admin/plugins/enable.php, actions/admin/plugins/enableall.php,
+ actions/admin/plugins/reorder.php, engine/lib/elgglib.php,
+ engine/lib/plugins.php, upgrade.php: Closes #831: Plugin view location is now
+ cached in a file in dataroot and is invalidated on upgrade and plugin
+ enable/disable/reorder. This means that views no longer have to be discovered
+ on boot - reducing file IO from crazy amounts to 1. This also helps make
+ adding new plugins a linear event.
+
+2009-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * simplecache/view.php: Eliminating the content-length header
+
+2009-03-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Refs #830: Minor tweak
+
+ * engine/lib/cache.php: Cache delete now functional
+
+2009-03-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Limitless queries now supported
+
+2009-03-02 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php, mod/groups/views/default/groups/forum_latest.php:
+ Changed group forums to default to enabled.
+
+ * engine/lib/access.php: Changed the order of the access dropdown so that it
+ is in order of increasing restriction (private, friends, logged-in, public).
+
+2009-03-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ .../views/default/object/groupforumtopic.php: discussion list updated for
+ long usernames, and clearing issues fixed for pc
+
+2009-03-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Corrected unnecessarily patriotic comments.
+
+2009-03-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Removing duplicate deletion code.
+
+2009-03-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php: Minor change to previous.
+
+ * engine/lib/install.php: A different table to check db existence against.
+
+2009-03-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/object/groupforumtopic.php: small tweak to change from
+ username to name on discussion
+
+2009-03-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: mac alignment fixed on delete
+ button
+
+ * mod/groups/views/default/groups/css.php,
+ .../views/default/object/groupforumtopic.php: delete discussion button layout
+ tweaked
+
+2009-03-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bump
+
+ * engine/lib/input.php, views/default/output/longtext.php: Closes #828:
+ Quite correct - rather tired - arrays are individually trimmed - non-arrays
+ are not. Closes #714: Input filtering now triggers on a plugin hook, this
+ allows plugins to provide other filtering methods than kses (Refs #561).
+
+2009-03-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/object/groupforumtopic.php: deleting discussions added
+
+2009-03-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Closes #828: Array input values now trimmed
+ individually.
+
+2009-03-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/languages/en.php: Wire lang string tweaked
+
+2009-03-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/icon_bookmarkthis.gif, _graphics/icon_reportthis.gif: owner
+ block icons background color corrected for new theme
+
+ * .../views/default/riverdashboard/css.php: reply and delete button removed
+ on latest post on riverdashboard
+
+ * mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forum/topicposts.php,
+ .../views/default/reportedcontent/form.php,
+ views/default/comments/forms/edit.php, views/default/css.php: input/longtext
+ and remove editor link layout improved
+
+2009-02-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Closes #665: Using a bit of preg callback magic to
+ do <wbr> encoding and href encoding in one pass.
+
+ * engine/lib/languages.php: Closes #824: $language is initialised
+
+2009-02-28 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/river_widget/edit.php: activity widget default
+ tweaked
+
+ * mod/thewire/languages/en.php: the wire lang tweaked
+
+ * mod/thewire/views/default/object/thewire.php: the wire now uses name
+ rather than username
+
+2009-02-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2009022701.php: Disabling updateclient on installs as
+ part of upgrade, this is because it is no longer included and can cause
+ problems.
+
+2009-02-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/object/groupforumtopic.php: autop removed on fetching
+ group description for list view (to remove extraneous <br />)
+
+ * mod/groups/views/default/groups/forum_latest.php: clearfloat fixed
+
+ * mod/groups/views/default/groups/css.php,
+ .../views/default/object/groupforumtopic.php: groups latest discussion list
+ view timestamp moved/formatted
+
+2009-02-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php: Removed email force from notification
+ emails
+
+2009-02-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: groups widgets layout made
+ consistent
+
+2009-02-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: enable/disable mods buttons layout tweaked
+
+2009-02-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php: Corrected capitalisation, added
+ better description to 'add message' link
+
+2009-02-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/footer_back.gif, _graphics/friends_picker_arrows.gif,
+ _graphics/icons/default/topbar.png, _graphics/owner_block_back.jpg,
+ _graphics/owner_block_menu_arrow.gif, _graphics/owner_block_menu_dot.gif,
+ _graphics/page_back_linen.gif, _graphics/page_back_linen_shadow.gif,
+ _graphics/skyscraper.gif, _graphics/spotlight_back.gif,
+ _graphics/thewire_speech_bubble.gif, _graphics/toolbar_arrow.png,
+ _graphics/toolbar_arrow_ie.gif, _graphics/tools_over.png,
+ mod/groups/graphics/defaultlarge.gif, mod/groups/graphics/defaultmedium.gif,
+ mod/groups/graphics/defaultsmall.gif, mod/groups/graphics/defaulttiny.gif,
+ mod/groups/views/default/groups/css.php,
+ mod/logbrowser/views/default/logbrowser/css.php,
+ .../views/default/notifications/css.php,
+ mod/profile/graphics/defaultlarge.gif, mod/profile/graphics/defaultlarge.jpg,
+ mod/profile/graphics/defaultmaster.gif,
+ mod/profile/graphics/defaultmaster.jpg,
+ mod/profile/graphics/defaultmedium.gif,
+ mod/profile/graphics/defaultmedium.jpg,
+ mod/profile/graphics/defaultsmall.gif, mod/profile/graphics/defaultsmall.jpg,
+ mod/profile/graphics/defaulttiny.gif, mod/profile/graphics/defaulttiny.jpg,
+ mod/profile/graphics/defaulttopbar.gif,
+ mod/profile/graphics/defaulttopbar.jpg,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php,
+ mod/profile/views/default/profile/css.php,
+ .../views/default/reportedcontent/css.php,
+ .../views/default/riverdashboard/css.php,
+ mod/thewire/graphics/thewire_speech_bubble.gif,
+ mod/thewire/views/default/thewire/css.php, views/default/css.php,
+ views/default/js/friendsPickerv1.php, views/default/js/initialise_elgg.php:
+ default theme changed
+
+2009-02-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Bumped version number
+
+2009-02-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/editpost.php,
+ mod/groups/views/default/forum/topicposts.php: forum post edit bug fixed
+
+2009-02-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Deflation is now turned off by default because a version of
+ a certain majority-share browser really doesn't like it.
+
+2009-02-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins.php: buttons moved
+
+ * views/default/admin/plugins.php: class names added to enable/disable
+ buttons
+
+2009-02-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disableall.php, actions/admin/plugins/enableall.php,
+ engine/lib/plugins.php, languages/en.php, views/default/admin/plugins.php:
+ Enable all / disable all functionality added
+
+2009-02-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/widgets/thewire/view.php: set a default num of
+ wire posts to appear on a widget
+
+2009-02-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php,
+ mod/groups/actions/groupskillrequest.php, mod/groups/languages/en.php,
+ mod/groups/membershipreq.php, mod/groups/start.php,
+ .../views/default/groups/membershiprequests.php: Join request management
+ added.
+
+2009-02-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/forms/guidtool/export.php,
+ mod/profile/views/default/profile/icon.php, views/default/input/access.php,
+ views/default/input/button.php, views/default/input/checkboxes.php,
+ views/default/input/email.php, views/default/input/hidden.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/plaintext.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/output/calendar.php, views/default/output/confirmlink.php,
+ views/default/output/email.php, views/default/output/pulldown.php,
+ views/default/output/tagcloud.php, views/default/output/tags.php,
+ views/default/output/text.php, views/default/output/url.php,
+ views/failsafe/input/button.php, views/failsafe/input/checkboxes.php,
+ views/failsafe/input/hidden.php, views/failsafe/input/text.php,
+ views/failsafe/messages/exceptions/exception.php: Closes #651: I agree,
+ changed to convert both quotes.
+
+2009-02-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Added 'accept' to the language list
+
+2009-02-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topicposts.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/riverdashboard/sitemessage.php, views/default/css.php,
+ views/default/js/initialise_elgg.php: generic reusable collapsible div added
+ (replacing manifest_file which is solely for admin plugins page)
+
+2009-02-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/jsfuncs.php,
+ .../notifications/subscriptions/personal.php: Fixed checkboxes on the
+ notification screen.
+
+ * views/default/admin/plugins_opt/plugin.php: Plugin descriptions are now
+ displayed on the tool menu, for better ease of use.
+
+2009-02-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, languages/en.php: Redirect to tools on first admin
+ login.
+
+2009-02-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/newestmembers.php: members box fixed for
+ IE6&7
+
+ * mod/thewire/views/default/object/thewire.php: thewire user icon layout
+ fixed for IE / cross-browser consistency
+
+2009-02-26 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/uservalidationbyemail/start.php: Event functions should return true to
+ prevent an event from being halted. Now this one does.
+
+2009-02-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/members.php,
+ .../views/default/object/groupforumtopic.php,
+ views/default/canvas/layouts/sidebar_boxes.php: markup fixing / cleanup / ie6
+ fixes
+
+2009-02-26 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/widgets.php: Fixes to container
+ permissions and widgets to allow default widgets to work with the Elgg
+ permissions system.
+
+2009-02-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: The search endpoint can now be told to go fetch a users'
+ friends.
+
+2009-02-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php:
+ enable/disable plugin actions now support arrays as parameters
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/join.php,
+ mod/groups/actions/joinrequest.php: Closes #801, Refs #277: Group
+ join/request logic altered.
+
+2009-02-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/thewire/profile_status.php: broken wire link fixed
+
+2009-02-26 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topicposts.php: Gave each edit box a unique
+ ID
+
+2009-02-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Small access tweak for sending notifications.
+
+ * mod/groups/start.php: Fixed duplicate notifications.
+
+ * mod/groups/start.php: Fixed the first-post forum topic notification error.
+ Fixes #816
+
+2009-02-26 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Added "enemies" code to get_access_sql_suffix. This
+ implements two features: a. a user can prevent another user from seeing any
+ of his content and b. a user can filter out all the content created by
+ another user. There is no interface for this yet, but adding one should be
+ easy with this core support.
+
+2009-02-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/object/thewire.php,
+ views/default/navigation/pagination.php: markup fixed for cross-browser
+ rendering consistency
+
+2009-02-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php: Fixed pagination when filtering.
+
+2009-02-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php: Closes #822: Action file existed however the action
+ was not registered (previously called directly)
+
+ * account/forgotten_password.php, account/register.php,
+ dashboard/latest.php, engine/lib/elgglib.php, entities/list.php,
+ friends/add.php, friends/collections.php, friends/edit.php,
+ friends/index.php, friends/of.php, index.php, install.php,
+ mod/notifications/groups.php, mod/notifications/index.php,
+ mod/reportedcontent/add.php, mod/riverdashboard/index.php: Closes #807:
+ Removed echo on page_draw()
+
+2009-02-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/views/default/groups/find.php:
+ Corrected bad form action for group tag and made search label a little more
+ specific.
+
+2009-02-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Refs #808: Bug was actually fixed by not using
+ empty... register_translations has to be in the wild otherwise install won't
+ load translation.
+
+ * engine/lib/languages.php: Closes #808: Removed register_translation from
+ the wild, now called on boot so that it is always after configuration_init
+
+2009-02-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/longtext.php: output/longtext now parses URLs.
+
+2009-02-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: small lang tweak
+
+2009-02-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/js.php: Fixed river pagination issue
+
+2009-02-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/languages/en.php: lang file replaced
+
+ * mod/riverdashboard/languages/en.php: missing lang string
+
+2009-02-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Architectural version number change
+
+2009-02-25 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/elgglib.php, languages/en.php: Added
+ friends access level
+
+ * actions/admin/site/update_basic.php, engine/lib/access.php,
+ engine/lib/users.php, languages/en.php, views/default/settings/system.php:
+ Introduces user default access.
+
+2009-02-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Closes #800: Fixes typo
+
+2009-02-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/forminternals.php,
+ views/default/friends/picker.php: Unicode character fix for friends picker.
+ Fixes #281
+
+ * mod/thewire/languages/en.php: SPG fix
+
+ * .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/groupsform.php,
+ .../notifications/subscriptions/personal.php: Removing the jumps on the
+ notification pickers.
+
+ * mod/groups/start.php: Removing the membership requests link for now.
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php,
+ mod/groups/views/default/groups/groupprofile.php: Removing an infinite loop
+ in groups.
+
+ * mod/groups/views/default/forms/groups/invite.php: The group invite friends
+ picker now correctly highlights friends' tabs
+
+ * engine/lib/metadata.php: Syntax improvements for the get_metadata
+ functions
+
+ * engine/lib/relationships.php: Fix for previous, including a change to
+ check_entity_relationships that actually returns the relationship object.
+
+ * engine/lib/relationships.php: Introducing the 'delete relationship' event.
+ Fixes #779
+
+ * mod/groups/languages/en.php: Defining grouptopic:blank; fixes #809
+
+ * engine/lib/notification.php: Notifications with nonexistent handlers no
+ longer throw an exception; they now write to the error log. Refs #754
+
+ * engine/lib/sessions.php: The session initialisation order is slightly
+ altered to allow for language setup on the index page. Fixes #803
+
+ * mod/groups/start.php: Group topics now have a friendlier URL. This will
+ help a lot for notifications.
+
+ * engine/lib/notification.php: Fixed error in notification procedure
+
+ * .../graphics/icon_notifications_web.gif: Removing web notification
+ graphic; will sit elsewhere.
+
+2009-02-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../graphics/icon_notifications_web.gif: web notification icon added
+
+2009-02-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/find.php: all groups search form
+
+2009-02-24 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/user/requestnewpassword.php,
+ mod/uservalidationbyemail/languages/en.php: Attempts by unvalidated users to
+ login or request new passwords now trigger plugin hooks (if available) or
+ trigger the user validation event by default. Thus, in the default case, the
+ user will be remailed a validation link. Addresses part of
+ http://trac.elgg.org/elgg/ticket/759 .
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icondirect.php: Removing a minor simplecache debug message
+ that accidentally made it in.
+
+ * mod/profile/icon.php, mod/profile/icondirect.php: Default icons are
+ preserved.
+
+2009-02-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/settings/riverdashboard/edit.php: you can now replace the
+ default dashboard with the new activity river, if required.
+
+2009-02-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/search/startblurb.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php: search results formatted
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, _css/js.php, upgrade.php: CSS, JS, upgrade are marked as
+ external pages.
+
+2009-02-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/groupprofile.php: groups:notfound:details
+ text string formatted
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/discussions.php, mod/groups/forum.php,
+ mod/groups/membership.php, mod/groups/topicposts.php: Group gatekeeper on
+ internal group pages.
+
+ * engine/lib/xml-rpc.php: Minor variable fix. Fixes #811
+
+2009-02-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/delete.php: when deleting a group you now go back to
+ your groups
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: A further architecture update version increment.
+
+2009-02-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/invite.php: invite friends to group
+ page modified
+
+2009-02-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/widgets.php: Added fixes to
+ create_entity and add_widgets to correctly handle containers.
+
+2009-02-24 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/thewire/profile_status.php: profile update wire tweaked
+
+2009-02-24 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, engine/lib/elgglib.php,
+ mod/profile/icondirect.php: Made icon views work properly for non-default
+ icons, and introduced elgg_view_enable_simplecache and
+ elgg_view_disable_simplecache functions.
+
+2009-02-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/thewire/profile_status.php: profile status update link
+ formatted
+
+2009-02-23 kevinjardine <kevinjardine@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, engine/lib/configuration.php,
+ languages/en.php, mod/profile/icondirect.php, simplecache/view.php,
+ views/default/settings/system.php: Added the ability to turn simplecache on
+ and off.
+
+2009-02-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/thewire/forms/add.php: post to wire from thewire
+ page styled
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: You should no longer get notified of your own topic
+ posts.
+
+ * engine/lib/elgglib.php: ACCESS_DEFAULT is now defined.
+
+2009-02-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/views/default/thewire/forms/add.php: a tweak to the wire
+
+ * mod/thewire/actions/add.php, mod/thewire/everyone.php,
+ mod/thewire/index.php, mod/thewire/languages/en.php, mod/thewire/start.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ .../views/default/thewire/profile_status.php: new wire work
+
+2009-02-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/profileitems.php: right_column changed from
+ class to id to match left_column
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php, mod/groups/views/rss/groups/profileitems.php:
+ Group RSS feed.
+
+ * mod/groups/views/rss/forum/topics.php: RSS fix for groups.
+
+ * engine/handlers/pagehandler.php: Removing the external definition from the
+ page handler again.
+
+ * engine/lib/annotations.php, mod/groups/start.php,
+ mod/groups/topicposts.php, mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/rss/forum/topicposts.php,
+ mod/groups/views/rss/forum/viewposts.php, views/rss/object/default.php: RSS
+ for group topics, including fixes for annotation getURL() override
+
+2009-02-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/page_elements/elgg_topbar.php: top toolbar menu id changed to
+ class. messages div slide action in some browsers removed.
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/pagehandler.php: Further external marker on the
+ pagehandler for walledgarden
+
+2009-02-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/editpost.php, mod/groups/start.php,
+ mod/groups/views/default/forum/topicposts.php: new group edit options on
+ discussion
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/xml-rpc_handler.php, index.php: Hook for better walled garden
+
+2009-02-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/editpost.php,
+ mod/groups/views/default/forum/topicposts.php: a couple more group comment
+ edit tweaks
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topicposts.php: Translating untranslated
+ string
+
+2009-02-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/editpost.php,
+ mod/groups/views/default/forum/topicposts.php: small edit comment bug fixed
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Slight version change to represent architectural changes.
+
+2009-02-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topics.php,
+ .../views/default/object/groupforumtopic.php: groups interface details
+ cleanup
+
+2009-02-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, mod/groups/groupprofile.php: Introducing
+ group_gatekeeper()
+
+ * mod/thewire/languages/en.php: New post wire string
+
+ * views/failsafe/input/access.php: Introducing the access control to the
+ failsafe view.
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/access.php, engine/lib/widgets.php, languages/en.php,
+ mod/profile/actions/edit.php, mod/profile/views/default/profile/edit.php,
+ views/default/input/access.php, views/default/settings/system.php,
+ views/failsafe/settings/system.php: Added site default access permissions.
+ Refs #744
+
+2009-02-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topicposts.php: superfluous <p> tags
+ removed
+
+2009-02-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: missing lang tweak
+
+ * mod/groups/views/default/forum/topics.php: new group discussion layout
+ tweaked to actually work
+
+ * mod/groups/actions/forums/addtopic.php, mod/groups/languages/en.php,
+ .../views/default/river/forum/topic/create.php: topic starting included in
+ river
+
+2009-02-22 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/forum.php, mod/groups/languages/en.php,
+ .../views/default/object/groupforumtopic.php: new group discussion layout
+
+ * mod/groups/languages/en.php: tweaks to the group discussion lang
+
+ * mod/groups/forum.php: group forum posts are now displayed based on last
+ action
+
+ * mod/groups/actions/forums/deletepost.php,
+ mod/groups/actions/forums/editpost.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/views/default/forum/topicposts.php: users
+ can now edit and delete their forum comments
+
+ * mod/groups/actions/join.php, mod/groups/languages/en.php,
+ mod/groups/views/default/river/group/create.php: new join group river view
+ added
+
+ * mod/groups/actions/forums/addpost.php,
+ mod/groups/views/default/river/forum/create.php: new river view added for
+ group forum posts
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php,
+ .../views/default/riverdashboard/container.php,
+ .../views/default/riverdashboard/js.php,
+ .../views/default/riverdashboard/nav.php: Riverdashboard now loads tabs via
+ jQuery AJAX.
+
+ * .../notifications/subscriptions/forminternals.php,
+ views/default/friends/forms/edit.php, views/default/friends/picker.php: The
+ friends picker now highlights tabs when creating a collection if a user is
+ present there. Also, the separate friends picker in the notification plugin
+ is also now internationalised.
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/a_users_groups/view.php: groups widget class
+ added
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Correction for previous.
+
+ * mod/groups/start.php: Forum topic notifications fix.
+
+ * engine/lib/notification.php: Notification messages can be suppressed
+ programmatically.
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/a_users_groups/view.php: group widget tweaked
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fixes an annoying problem in countAnnotations.
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php: group email tweak to
+ include lang
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/defaultprofile.php: custom profile fields admin panel
+ formatted
+
+ * .../views/default/thewire/profile_status.php: brackets added around
+ timestamp
+
+2009-02-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: isFriend() now retrieving userid correctly
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/thewire/profile_status.php: profile status view tweaked
+
+2009-02-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php: Closes #784: Action now checks that the
+ user is the logged in user's friend before invite.
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/usersettings/plugins_opt/plugin.php: configure tools page -
+ individual tools formatted
+
+ * .../views/default/widgets/river_widget/view.php: activity widget interface
+
+ * views/default/spotlight/default.php: formatted spotlight footer
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/listing.php: status moved on member
+ listings
+
+2009-02-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/membershipreq.php,
+ mod/groups/start.php: Placeholder for future work (refs #277)
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php: tweak to the add to wire action to make sure
+ forward takes the user to the correct place
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/grouplisting.php: group details
+ containerised
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Removing unnecessary mod_rewrite rule
+
+ * languages/en.php, views/default/friends/picker.php: The friends picker can
+ now be internationalized, also allows you to view users whose usernames don't
+ begin with a letter in the char array.
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/river_widget/edit.php: riverdash activity widget
+ edit panel formatted
+
+ * mod/thewire/views/default/widgets/thewire/view.php: empty <p> tags causing
+ issues removed
+
+ * mod/groups/views/default/forms/groups/edit.php: button floated and cleared
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/spotlight/default.php: Went in to decapitalise "intranet",
+ ended up making the text hopefully more immediate.
+
+2009-02-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/edit.php: delete group button moved
+ into own area
+
+ * mod/groups/views/default/forms/forums/addtopic.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/side_menu.php: group areas interfacing
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/plugins.php, admin/site.php, admin/statistics.php, admin/user.php,
+ views/default/page_elements/owner_block.php: Removed unnecessary owner
+ blocks.
+
+2009-02-20 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/spotlight/default.php: new spotlight contents
+
+2009-02-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/messages/exceptions/exception.php: Minor improvement to
+ exception message
+
+ * views/default/messages/exceptions/exception.php: Minor improvement to
+ exception message
+
+ * engine/lib/elgglib.php, views/default/messages/exceptions/exception.php:
+ Closes #487: Removed superfluous page_draw from exception view.
+
+2009-02-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, engine/lib/river2.php: Added some documentation to
+ the river functions.
+
+2009-02-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apiadmin/manifest.xml, mod/crontrigger/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/garbagecollector/manifest.xml,
+ mod/groups/manifest.xml, mod/guidtool/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/notifications/manifest.xml, mod/profile/manifest.xml,
+ mod/reportedcontent/manifest.xml, mod/thewire/manifest.xml,
+ mod/uservalidationbyemail/manifest.xml: Updated core module manifests to
+ contain today's build number. Refs #394
+
+ * mod/riverdashboard/manifest.xml: Closes #795: Added manifest to
+ riverdashboard
+
+ * mod/groups/languages/en.php: Closes #798: Fixing language definition which
+ somehow got clobbered. Nice spot!
+
+ * engine/lib/entities.php: Fixes warning messages on disable or delete for
+ times when an entity has no sub items.
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river2.php, .../views/default/widgets/river_widget/view.php,
+ views/default/river/item/list.php: Pagination is now optional on river lists;
+ is removed on the river widget
+
+ * engine/lib/river2.php: Friends river no longer shows your own stuff.
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/edit.php: missing wrapper added
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/forum.php: Added a title to group forum topics. Fixes #603
+
+ * mod/groups/membership.php: For now, the group membership page is
+ protected, although eventually this should get its own profile dropdown menu.
+ Fixes #605
+
+2009-02-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/profileitems.php: groups interface updated
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: An alternative template handler will now be sought
+ by elgg_view by default. Fixes #768
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/find.php,
+ mod/groups/views/default/groups/side_menu.php: all groups submenu tweaked
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php: A lighter way to detect if the db has been
+ installed. Fixes #791
+
+2009-02-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/featured.php: featured groups sidebar styled
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixed parameter errors in site-related functions.
+ Fixes #793
+
+ * mod/profile/icondirect.php: Better unicode patching for icons. Fixes #789
+
+2009-02-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Updated version number to today's build
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php: small tweak to popular groups
+
+ * mod/groups/all.php: it is now possible to list groups by most popular
+
+ * views/default/page_elements/header.php,
+ views/default/page_elements/header_contents.php,
+ views/default/pageshells/pageshell.php: the header has been split out so that
+ theme authors can target the header output without worrying about overwriting
+ the whole header file.
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Introduced get / list entities by
+ relationship count
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/thewire/actions/add.php, mod/thewire/actions/delete.php,
+ mod/thewire/add.php, mod/thewire/everyone.php,
+ mod/thewire/graphics/thewire_speech_bubble.gif, mod/thewire/index.php,
+ mod/thewire/languages/en.php, mod/thewire/manifest.xml,
+ mod/thewire/readme.txt, mod/thewire/start.php,
+ mod/thewire/views/default/object/thewire.php,
+ .../views/default/river/object/thewire/create.php,
+ .../views/default/thewire/activity_view.php,
+ mod/thewire/views/default/thewire/css.php,
+ mod/thewire/views/default/thewire/forms/add.php,
+ mod/thewire/views/default/thewire/notfound.php,
+ .../views/default/thewire/profile_status.php,
+ .../views/default/thewire/scripts/counter.js,
+ mod/thewire/views/default/thewire/view.php,
+ mod/thewire/views/default/widgets/thewire/edit.php,
+ mod/thewire/views/default/widgets/thewire/view.php: the wire has been moved
+ to core as it now powers profile status and status on member search
+
+ * mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php, mod/activity/manifest.xml,
+ mod/activity/opendd.php, mod/activity/start.php,
+ mod/activity/views/default/activity/css.php,
+ mod/activity/views/default/activity/dashboard.php,
+ mod/activity/views/default/activity/offset.php,
+ mod/activity/views/default/activity/wrapper.php,
+ .../views/default/settings/activity/edit.php,
+ mod/activity/views/opendd/activity/dashboard.php, mod/river/languages/en.php,
+ mod/river/manifest.xml, mod/river/start.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/edit.php,
+ .../default/widgets/river_widget_friends/view.php: old activity and river
+ removed
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist, .../views/default/apiadmin/forms/add_key.php,
+ mod/apiadmin/views/default/object/api_key.php,
+ .../views/default/diagnostics/forms/download.php,
+ mod/groups/actions/join.php, mod/profile/defaultprofile.php,
+ .../views/default/profile/editdefaultprofile.php,
+ .../views/default/profile/menu/adminlinks.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/object/default.php: Repointed actions/ to action/ in all views
+ and removed actions/* from the action handler.
+
+2009-02-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php: Removed some bad links on
+ actions
+
+ * engine/lib/languages.php: Fixed strange infinite loop on language loading.
+
+ * engine/lib/languages.php: Removed @ from register translation include_once
+
+ * engine/lib/plugins.php, languages/en.php,
+ views/default/admin/plugins_opt/plugin.php: Closes #394: May now specify
+ elgg_version in the manifest to specify a minimum version of elgg required.
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/canvas_header/submenu_template.php:
+ delete confirmation added to delete pages
+
+ * .../views/default/riverdashboard/sitemessage.php: input view changed on
+ site messages
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/edit.php: warning applied to group
+ deletion
+
+ * mod/groups/edit.php: title tweaked
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fix for user object counting with upper and lower
+ time limits.
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: missing lang file
+
+ * views/default/page_elements/owner_block.php: ownerblock tweak
+
+2009-02-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/users.php, languages/en.php:
+ Introducing archive functionality.
+
+2009-02-19 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/river/sitemessage/create.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php: new river widget
+
+2009-02-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_toolbar_logo.gif: updated elgg toolbar logo
+
+2009-02-18 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/featured.php: missing id applied
+
+ * mod/groups/actions/featured.php, mod/groups/all.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/grouplisting.php: admins can highlight
+ featured groups
+
+2009-02-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/find.php: sidebar forms styled
+
+2009-02-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/start.php: Closes #790: Removed @ before
+ include statements.
+
+2009-02-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/item/list.php: forward and back text added
+
+ * mod/profile/defaultprofile.php: reset button wrapped
+
+ * .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ views/default/river/item/list.php: pagination on river fixed / styled, and
+ site message styled
+
+2009-02-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Helping plugin developers by no longer suppressing
+ parsing errors in plugins.
+
+2009-02-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/start.php: Fix for previous
+
+ * mod/riverdashboard/start.php: Riverdashboard registers an init event
+ handler now .....
+
+2009-02-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php, mod/groups/views/default/groups/find.php: style
+ applied
+
+2009-02-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/all.php, mod/groups/views/default/groups/side_menu.php: more
+ more all groups tweak
+
+ * mod/groups/all.php, mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/groups/featured.php,
+ mod/groups/views/default/groups/find.php,
+ .../views/default/groups/group_sort_menu.php,
+ mod/groups/views/default/groups/grouplisting.php: new all groups view
+
+ * mod/profile/views/default/profile/userdetails.php: bug fixed in profile
+ status
+
+ * views/default/river/item/wrapper.php: river view altered
+
+2009-02-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/widgets/wrapper.php: Closes #763: A
+ message is now displayed for widgets belonging to disabled plugins explaining
+ what has happened.
+
+2009-02-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/css.php: css added to sep file
+
+2009-02-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/riverdashboard/welcome.php: welcome message tweaked
+
+ * mod/riverdashboard/actions/add.php, mod/riverdashboard/actions/delete.php,
+ mod/riverdashboard/languages/en.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/sitemessage.php: simple site message added
+
+ * mod/groups/views/default/groups/profileitems.php: removed a redundant view
+
+2009-02-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php, mod/groups/languages/en.php,
+ .../views/default/groups/closedmembership.php: Closes #786: Only basic
+ profile information provided to non-joined users of closed groups.
+
+2009-02-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/listing.php: entity passed to status
+ view
+
+2009-02-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/css.php,
+ .../views/default/riverdashboard/nav.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php, views/default/css.php,
+ views/default/friends/collectiontabs.php: interface updated, markup tweaked
+ etc
+
+2009-02-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/listing.php: new status view created
+ that can be extended
+
+2009-02-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/start.php: Added some very basic page load
+ profiling.
+
+ * engine/lib/elgglib.php: Closes #785: datalists now pulls all settings on
+ first item load.
+
+ * engine/start.php: Closes #783: Initial cache write on start now checks
+ whether elgg has been fully installed before proceeding.
+
+2009-02-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: new view added to allow
+ status plugins to extend and display as part of the profile block
+
+2009-02-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icondirect.php: Icondirect now falls back on the cached
+ default view
+
+ * mod/profile/start.php: Icon default views are now registered as cached
+
+ * views/default/input/plaintext.php: Introducing input/plaintext.
+
+2009-02-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/viewtype.php: loose page elements wrapped in
+ container div
+
+2009-02-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/start.php, upgrade.php: A little more
+ flexibility for the simplecache.
+
+2009-02-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Short circuit get entity on impossible values,
+ saving two db queries per page
+
+2009-02-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, _css/js.php, engine/lib/elgglib.php, engine/start.php,
+ simplecache/view.php, views/default/page_elements/header.php: Views
+ simplecache improvements.
+
+2009-02-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/footer.php: another view added for analytics
+ which plugins can extend
+
+ * views/default/page_elements/footer.php: footer links replaced by a view
+ which plugins can extend
+
+2009-02-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Removed select_default_memcache as this was not
+ used.
+
+ * engine/lib/languages.php, engine/lib/sessions.php, engine/start.php,
+ version.php: Closes #429: Language loading now no longer loads all possible
+ translations - only english + user's preferred language/site preference
+
+2009-02-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/usersettings.php, languages/en.php,
+ mod/profile/views/default/profile/userdetails.php,
+ views/default/friends/collections.php, views/default/friends/forms/edit.php,
+ views/default/friends/tablelist.php: theme updates
+
+2009-02-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/reorder.php: Simplecache improvements.
+
+ * _css/css.php, _css/js.php, engine/lib/elgglib.php, engine/start.php,
+ mod/profile/start.php, mod/profile/views/default/profile/metatags.php,
+ simplecache/view.php, upgrade.php, views/default/page_elements/header.php:
+ Committing the simplecache for views.
+
+2009-02-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collections.php: removed broken expand all link and
+ js
+
+2009-02-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/admin/plugins_opt/plugin.php: Closes #777:
+ Plugin version now displayed under "more info" link in plugin admin settings.
+
+2009-02-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: latest activity link removed as it will be
+ replaced by a full activity stream
+
+ * views/default/admin/statistics.php: removed redundant stats info
+
+2009-02-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/usersettings/form.php: user settings style brought in line
+ with other settings pages
+
+2009-02-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/forum_latest.php: removed the dropdown
+ menu from forum latest view on group profiles
+
+ * mod/groups/start.php: allow users to put a widget of their groups on their
+ dashboard as well as profile.
+
+ * mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/profileitems.php: group homepage forum view
+ tweaked
+
+2009-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Fixes #778. Thanks!
+
+2009-02-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/apiadmin/forms/add_key.php,
+ mod/apiadmin/views/default/object/api_key.php, mod/diagnostics/index.php,
+ .../views/default/diagnostics/forms/download.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/groupsform.php,
+ mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ views/default/admin/plugins.php, views/default/admin/site.php,
+ views/default/admin/statistics.php, views/default/admin/user.php,
+ views/default/usersettings/form.php, views/default/usersettings/plugins.php:
+ css classname cleanup, prep for v1.5 default theme
+
+2009-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river2.php, views/default/river/item/list.php: Simple river
+ pagination.
+
+2009-02-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php,
+ .../views/default/riverdashboard/newestmembers.php,
+ .../views/default/riverdashboard/sitemessage.php,
+ .../views/default/riverdashboard/welcome.php: new views for riverdashboard
+
+2009-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php, views/default/css.php,
+ views/default/js/initialise_elgg.php: Moved plugin settings so they're more
+ obvious.
+
+2009-02-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Fixed logic bug in login()
+
+ * engine/schema/upgrades/2009021301.sql, mod/groups/actions/edit.php,
+ mod/groups/languages/en.php, mod/groups/views/default/forms/groups/edit.php,
+ version.php: Closes #761, #718: Group permissions now made much much simpler.
+
+2009-02-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/comments/add.php, views/default/annotation/annotate.php: new
+ annotations activity view
+
+2009-02-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/edit.php,
+ .../views/default/forms/guidtool/format.php,
+ .../views/default/forms/guidtool/import.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/comments/forms/edit.php, views/default/export/entity.php: loose
+ text strings cleaned up, extra container divs added
+
+2009-02-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/index.php: changed the activity view
+
+2009-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/riverdashboard/languages/en.php,
+ .../views/default/riverdashboard/nav.php: Language updates to river dashboard
+
+ * mod/riverdashboard/index.php, .../views/default/riverdashboard/nav.php:
+ Added better content filtering for dashboard
+
+ * mod/riverdashboard/index.php, mod/riverdashboard/start.php,
+ .../views/default/riverdashboard/nav.php: New river dashboard.
+
+ * engine/lib/river2.php: Removing an erroneous system_message call.
+
+ * engine/lib/river2.php: Data sanitisation fix.
+
+2009-02-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/sidebar_boxes.php, views/default/css.php: new
+ layout canvas
+
+2009-02-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Added lazy database connections to delay
+ establishing the db link until actually required - will allow for future
+ lite/static content endpoints that bypass db connections and session
+ creation.
+
+ * engine/lib/elgglib.php: Closes #769: Added short circuit to quit function
+ if entity is null.
+
+ * engine/lib/elgglib.php: Closes #772: $value no longer being incorrectly
+ set when memcache is enabled.
+
+2009-02-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: A correction to the way attributes are set for
+ extenders.
+
+ * languages/en.php: New base translation word: publish
+
+ * engine/schema/mysql.sql: Schema fix
+
+ * engine/lib/entities.php: Clear river items on entity delete
+
+ * engine/lib/river2.php: A minor stabilisation change for river2
+
+ * engine/lib/river2.php: A minor stabilisation change for river2
+
+2009-02-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/kses/kses.php: Refs #561: Removed &amp encoding from kses but
+ retaining script input and entities.
+
+2009-02-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river2.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2009021201.sql, version.php,
+ views/default/river/item/list.php, views/default/river/item/wrapper.php:
+ Alternative river system trial. This is a test.
+
+2009-02-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Avoiding wsod for deleted users
+
+2009-02-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/views/default/activity/offset.php: div cleared after
+ pagination for theme compatability
+
+2009-02-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/activity.php:
+
+ * mod/groups/languages/en.php: Added some missing translations
+
+ * crontab.example: Added links to better documentation
+
+ * engine/lib/input.php: Closes #684: Scratching a particular itch of mine by
+ no longer hiding urls when converting them to active links. This issue has
+ caused many a headache. The url is now preserved but with a <wbr /> inserted
+ after every /, this lets long urls be wrapped without breaking the url.
+
+2009-02-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Removing wildcard from the beginning of 'like'
+ search for user/username
+
+2009-02-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/activity.php: Filtering on type,subtype and event
+
+ * engine/lib/activity.php, engine/lib/river.php, mod/activity/start.php:
+ Relocation of activity database queries to the core.
+
+2009-02-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/plugins.php, admin/plugins/index.php, admin/site.php,
+ admin/site/index.php, admin/statistics.php, admin/statistics/index.php,
+ admin/user.php, admin/user/index.php, engine/lib/admin.php: Cleaned up the
+ admin directory using a pagehandler.
+
+ * languages/en.php, settings/plugins.php: Minor confusion clearups
+
+ * views/default/output/calendar.php, views/default/output/confirmlink.php,
+ views/default/output/email.php, views/default/output/longtext.php,
+ views/default/output/pulldown.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php: Closes #756: htmlentities on all output forms
+
+ * mod/profile/views/default/profile/userdetails.php: XSS filtering on output
+
+ * engine/lib/input.php: Refs #561: Split filtering into separate function
+
+2009-02-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icondirect.php, mod/profile/start.php: Speedy icon bypass.
+
+2009-02-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/views/default/activity/dashboard.php: add a view to site wide
+ activity that can be extended by the wire
+
+2009-02-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Further changes to the notification
+ mechanism.
+
+2009-02-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Closes #757: Removed strtolower as it is not UTF8
+ safe. See http://www.phpwact.org/php/i18n/utf-8 for further discussion.
+
+ * views/default/input/access.php, views/default/input/email.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/pulldown.php: Refs
+ #756: htmlentities on all input views
+
+ * mod/activity/all.php, mod/activity/index.php: Marcus Povey
+ <marcus@elgg.com> * Pagination not displayed when no activity present *
+ OpenDD link for your activity now functioning
+
+2009-02-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/collections.php: Fixed 'all friends'
+ button.
+
+2009-02-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/edit_layout.php: new edit canvas layout
+
+2009-02-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php, mod/groups/views/default/forms/groups/edit.php:
+ Closes #752: Delete move to edit, making it less fatal. Probably needs
+ skinning.
+
+2009-02-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/notification.php,
+ mod/groups/start.php: A single notification is now sent out on forum topic
+ creation. This also contains an update to $entity->countAnnotations, which
+ no longer requires you to specify the annotation type.
+
+ * engine/lib/notification.php: Notification fix: you no longer get
+ notifications on your own content.
+
+ * mod/groups/languages/en.php, mod/groups/start.php: Introducing group forum
+ notifications
+
+2009-02-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #640: Entity disable now recursive
+
+ * mod/groups/actions/delete.php, mod/groups/languages/en.php,
+ mod/groups/start.php: Closes #282, Refs #640: Group deletion enabled. TODO:
+ Suggested enhancement #752
+
+2009-02-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Added the 'annotate' event on entities.
+
+ * .../notifications/subscriptions/collections.php: Minor display fix.
+
+ * mod/notifications/actions/save.php: Group notification settings now save
+ properly
+
+ * engine/lib/relationships.php: Added a new filter to delete relationship
+ functions
+
+2009-02-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #640, #282: Recursive deletion of owned and
+ contained entities.
+
+ * .../views/default/profile/menu/adminlinks.php: Closes #223: Admin options
+ now use output/confirmlink
+
+ * mod/guidtool/actions/delete.php, mod/guidtool/languages/en.php,
+ mod/guidtool/start.php, mod/guidtool/views/default/guidtool/listing.php: Refs
+ #492: Export and delete links next to entity
+
+2009-02-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Extra security for object notifications.
+
+ * mod/notifications/actions/groupsave.php,
+ mod/notifications/actions/save.php, mod/notifications/groups.php,
+ mod/notifications/languages/en.php, mod/notifications/start.php,
+ .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/groupsform.php: Group notifications, all
+ friends notification option
+
+2009-02-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Couple of extra words
+
+ * languages/en.php, views/default/output/confirmlink.php: Added default to
+ confirm link.
+
+2009-02-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/views/default/activity/css.php,
+ mod/activity/views/default/activity/offset.php: pagination on activity stream
+ added
+
+2009-02-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Closes #584: Removed exception, get_user will now
+ return false if GUID exists but is not a user. This probably makes more sense
+ as Exceptions should probably be reserved for major Ooopses. The error in
+ this bug was caused by this exception being thrown and not caught in the
+ access group handler. This may have been the cause of a number of group
+ related / permission related errors.
+
+ * engine/lib/users.php: Refs #584: Fixed error message.
+
+ * engine/lib/entities.php: Closes #720: setCalendarTimeAndDuration() now
+ saves end time correctly.
+
+2009-02-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/members.php: drop down menu removed from
+ members avatars on the group home page. You can change this back by removing
+ 'override' => 'true'
+
+ * mod/groups/languages/en.php,
+ .../views/default/river/object/group/create.php,
+ .../river/object/groupforumtopic/annotate.php,
+ .../river/object/groupforumtopic/create.php,
+ .../river/object/groupforumtopic/update.php,
+ .../default/river/relationship/member/create.php: new river views added to
+ groups
+
+ * mod/activity/views/default/activity/css.php,
+ .../river/user/default/profileiconupdate.php: profile icon added to change
+ river view and css added to activity
+
+ * mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php,
+ mod/activity/views/default/activity/offset.php: small additions to the
+ activity view
+
+ * mod/notifications/manifest.xml: manifest file added to notifications
+
+2009-02-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/languages/en.php,
+ .../notifications/subscriptions/collections.php: Language and UI changes for
+ the notifications plugin.
+
+2009-02-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/notifications/css.php: styles for notifications
+
+2009-02-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../notifications/subscriptions/collections.php: Javascript just about
+ beaten into submission. Viewers of the public SVN, I apologise for clogging
+ up the history view. Here's a joke by way of penance:
+
+ * mod/notifications/actions/save.php: Save action corrections
+
+ * .../notifications/subscriptions/collections.php: An attempt at fixing the
+ toggle issue
+
+ * .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/personal.php: Notification settings. Still
+ not right though ..
+
+ * .../notifications/subscriptions/collections.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/personal.php: More notification settings
+ work.
+
+ * .../notifications/subscriptions/collections.php: Notification icons work
+ properly when selecting / deselecting a friends collection.
+
+ * mod/notifications/languages/en.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/personal.php: Friends collections work
+
+2009-02-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/river_icons/river_icon_pages.gif,
+ _graphics/river_icons/river_icon_thewire.gif: icons for river added
+
+ * mod/activity/views/default/activity/css.php: updated activity css
+
+2009-02-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Added digits to pagehandler rewrite rule. Fixes #741
+
+ * mod/notifications/actions/save.php,
+ .../notifications/subscriptions/collections.php: Friends collections
+ preferences are saved
+
+ * mod/notifications/languages/en.php,
+ .../notifications/subscriptions/collections.php: Collections titles
+
+ * .../views/default/notifications/css.php,
+ .../notifications/subscriptions/collections.php: Access collections toggle
+ beginnings
+
+ * mod/notifications/actions/save.php, mod/notifications/languages/en.php,
+ mod/notifications/start.php, .../views/default/notifications/css.php,
+ .../notifications/settings/usersettings.php,
+ .../notifications/subscriptions/collections.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php,
+ .../notifications/subscriptions/personal.php: Further notification settings
+ changes.
+
+ * mod/notifications/actions/save.php,
+ .../graphics/icon_notifications_email.gif,
+ mod/notifications/languages/en.php, mod/notifications/start.php,
+ .../views/default/notifications/css.php,
+ .../default/notifications/subscriptions/form.php,
+ .../notifications/subscriptions/forminternals.php: Fitter, happier, more
+ productive notifications plugin.
+
+ * engine/lib/notification.php: Belts and braces with notifications
+
+ * engine/lib/access.php: Minor change to access SQL. Fixes #687
+
+ * htaccess_dist: Further htaccess change
+
+ * htaccess_dist: htaccess update
+
+ * mod/profile/start.php: Added profile updates to the notification handler
+
+2009-02-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/json/api/output.php: API results now JSON export properly. Refs #716
+
+ * views/json/canvas/default.php, views/json/export/entity.php,
+ views/json/export/metadata.php, views/json/export/relationship.php,
+ views/json/group/default.php, views/json/messages/exceptions/exception.php,
+ views/json/object/default.php, views/json/pageshells/pageshell.php,
+ views/json/search/entity_list.php, views/json/site/default.php,
+ views/json/user/default.php: JSON feeds now work. Fixes #716
+
+ * engine/lib/access.php, engine/lib/notification.php: Access improvements on
+ granular notifications
+
+ * languages/en.php: DB credentials are no longer unnecessarily revealed on
+ failure to connect. Fixes #723
+
+ * CONTRIBUTORS.txt: Contributors patch
+
+ * mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/languages/en.php:
+ Added plugin hook triggers to reportedcontent plugin. Fixes #725
+
+ * views/default/input/button.php: Added class to input/button. Fixes #618
+
+ * mod/groups/views/default/forum/viewposts.php: Added pagination to group
+ topic posts. Fixes #704
+
+ * entities/index.php: Added unique title tags to the entity browser. Fixes
+ #722
+
+ * CONTRIBUTORS.txt, htaccess_dist, views/default/output/tags.php: Tag URLs
+ now conform to the microformats specification. Fixes #729
+
+ * CONTRIBUTORS.txt: Minor changes to contrib file
+
+2009-02-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: tweaks to the contributors file
+
+2009-02-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/entities.php, engine/lib/group.php,
+ engine/lib/metadata.php, engine/lib/plugins.php, engine/lib/system_log.php,
+ engine/lib/tags.php, engine/lib/users.php, engine/lib/widgets.php,
+ engine/start.php, languages/en.php, mod/apiadmin/actions/generate.php,
+ mod/groups/actions/edit.php, mod/groups/views/default/forms/groups/edit.php,
+ mod/profile/actions/edit.php, mod/profile/views/default/profile/edit.php,
+ mod/reportedcontent/actions/add.php,
+ .../views/default/reportedcontent/form.php: Moves access permissions
+ references over to using the ACCESS_* constants defined in access.php. Refs
+ #687
+
+ * engine/lib/access.php, engine/lib/elgglib.php: Moved the access constant
+ definitions from access.php to elgglib.php, so they'll be loaded initially.
+
+ * engine/lib/users.php: When a new password is generated, the salt is now
+ regenerated first. Fixes #726.
+
+2009-02-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Corrected pagination limit error.
+
+ * engine/lib/elgglib.php, views/default/embed/addcontentjs.php,
+ views/default/embed/js.php: Elgg Javascript update content function
+
+2009-02-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: ticket #728 dealt with
+
+ * mod/groups/views/default/groups/members.php: changed the number of group
+ members to display on group frontpages from 9999 to 10 (This should become
+ configurable)
+
+ * engine/lib/entities.php: patch number #724 applied
+
+2009-02-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/useradd.php, languages/en.php: Users are now notified when an
+ account has been created for them on a site.
+
+2009-02-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed bug in get_entities allowing for multiple
+ subtypes.
+
+2009-02-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/forums/addtopic.php: removed redundant post
+ options
+
+2009-01-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Moving over to use file_exists to check for
+ default entity icons, which should be lighter to load and produce fewer
+ errors.
+
+2009-01-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php: Tentatively downgraded version requirement.
+
+2009-01-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: notify_user now traps exceptions and logs
+ them.
+
+2009-01-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Change to notification object registration
+ function.
+
+2009-01-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/friends/picker.php: friendspicker /
+ collections updated to work with more than 12+ friends per pane
+
+2009-01-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: tweak to banned user
+
+ * views/default/admin/statistics.php: small admin tweak
+
+2009-01-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Added container_guid to ElggEntity->save() and
+ update_entity() functions. Fixes #711
+
+ * engine/lib/elgglib.php: Moving actions into the boot event.
+
+2009-01-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Moved actions out of init files
+
+ * engine/lib/notification.php: Added object notifications plugin hook
+ override.
+
+ * engine/lib/annotations.php: Fixed pagination issue with count annotations
+ function.
+
+2009-01-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Fixes #709: get_language() now fails correctly.
+ @ben Why is this introduced? Surely this is the same as
+ get_current_language()?
+
+2009-01-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Fixing access controls on multi-metadata
+
+2009-01-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Refs #706: Copyright in readme
+
+ * views/default/admin/plugins_opt/plugin.php: Support for people who can't
+ spell
+
+ * _css/css.php, account/forgotten_password.php, account/register.php,
+ actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ actions/admin/plugins/reorder.php, actions/admin/site/update_basic.php,
+ actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ actions/admin/user/resetpassword.php, actions/admin/user/unban.php,
+ actions/comments/add.php, actions/comments/delete.php,
+ actions/email/save.php, actions/entities/delete.php, actions/friends/add.php,
+ actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/editcollection.php, actions/friends/remove.php,
+ actions/import/opendd.php, actions/login.php, actions/logout.php,
+ .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/systemsettings/install.php,
+ actions/user/language.php, actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, actions/usersettings/save.php, actions/widgets/add.php,
+ actions/widgets/reorder.php, actions/widgets/save.php, admin/index.php,
+ admin/plugins/index.php, admin/site/index.php, admin/statistics/index.php,
+ admin/user/index.php, dashboard/index.php, dashboard/latest.php,
+ engine/handlers/action_handler.php, engine/handlers/cron_handler.php,
+ engine/handlers/pagehandler.php, engine/handlers/xml-rpc_handler.php,
+ engine/lib/access.php, engine/lib/actions.php, engine/lib/admin.php,
+ engine/lib/annotations.php, engine/lib/api.php, engine/lib/cache.php,
+ engine/lib/calendar.php, engine/lib/configuration.php, engine/lib/cron.php,
+ engine/lib/database.php, engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/lib/exceptions.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/filestore.php, engine/lib/group.php, engine/lib/input.php,
+ engine/lib/install.php, engine/lib/languages.php, engine/lib/location.php,
+ engine/lib/memcache.php, engine/lib/metadata.php, engine/lib/metastrings.php,
+ engine/lib/notification.php, engine/lib/objects.php, engine/lib/opendd.php,
+ engine/lib/pagehandler.php, engine/lib/pageowner.php, engine/lib/pam.php,
+ engine/lib/ping.php, engine/lib/plugins.php, engine/lib/query.php,
+ engine/lib/relationships.php, engine/lib/river.php, engine/lib/sessions.php,
+ engine/lib/sites.php, engine/lib/social.php, engine/lib/statistics.php,
+ engine/lib/system_log.php, engine/lib/tags.php, engine/lib/users.php,
+ engine/lib/usersettings.php, engine/lib/version.php, engine/lib/widgets.php,
+ engine/lib/xml-rpc.php, engine/lib/xml.php, engine/schema/mysql.sql,
+ engine/start.php, entities/index.php, entities/list.php, friends/add.php,
+ friends/collections.php, friends/edit.php, friends/index.php, friends/of.php,
+ friends/pickercallback.php, htaccess_dist, index.php, install.php,
+ mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php, mod/activity/manifest.xml,
+ mod/activity/opendd.php, mod/activity/start.php,
+ mod/activity/views/default/activity/css.php,
+ mod/activity/views/default/activity/wrapper.php, mod/apiadmin/index.php,
+ mod/apiadmin/languages/en.php, mod/apiadmin/manifest.xml,
+ mod/apiadmin/start.php, mod/crontrigger/manifest.xml,
+ mod/crontrigger/start.php, mod/diagnostics/actions/download.php,
+ mod/diagnostics/index.php, mod/diagnostics/languages/en.php,
+ mod/diagnostics/manifest.xml, mod/diagnostics/start.php,
+ .../views/default/diagnostics/forms/download.php,
+ mod/garbagecollector/languages/en.php, mod/garbagecollector/manifest.xml,
+ mod/garbagecollector/start.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/edit.php, mod/groups/actions/forums/addpost.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletepost.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/actions/join.php,
+ mod/groups/actions/joinrequest.php, mod/groups/actions/leave.php,
+ mod/groups/addtopic.php, mod/groups/all.php, mod/groups/discussions.php,
+ mod/groups/edit.php, mod/groups/edittopic.php, mod/groups/forum.php,
+ mod/groups/graphics/icon.php, mod/groups/groupprofile.php,
+ mod/groups/index.php, mod/groups/invite.php, mod/groups/languages/en.php,
+ mod/groups/manifest.xml, mod/groups/membership.php, mod/groups/new.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/group/group.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ mod/groups/views/default/groups/members.php,
+ mod/groups/views/default/groups/profileitems.php,
+ .../views/default/object/groupforumtopic.php,
+ .../default/river/relationship/member/create.php,
+ mod/groups/views/default/sharing/invite.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php,
+ mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/profileitems.php, mod/guidtool/export.php,
+ mod/guidtool/format_picker.php, mod/guidtool/import.php,
+ mod/guidtool/index.php, mod/guidtool/languages/en.php,
+ mod/guidtool/manifest.xml, mod/guidtool/start.php, mod/guidtool/view.php,
+ .../views/default/forms/guidtool/export.php,
+ .../views/default/forms/guidtool/format.php,
+ .../views/default/forms/guidtool/import.php,
+ mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php,
+ mod/guidtool/views/default/guidtool/profile.php,
+ .../views/default/object/guidtoolwrapper.php, mod/logbrowser/index.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/manifest.xml,
+ mod/logbrowser/start.php, mod/logbrowser/views/default/object/logwrapper.php,
+ mod/logrotate/languages/en.php, mod/logrotate/manifest.xml,
+ mod/logrotate/start.php, mod/profile/actions/cropicon.php,
+ mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/edit.php, mod/profile/actions/editdefault.php,
+ mod/profile/actions/iconupload.php,
+ mod/profile/actions/resetdefaultprofile.php, mod/profile/defaultprofile.php,
+ mod/profile/edit.php, mod/profile/editicon.php, mod/profile/icon.php,
+ mod/profile/index.php, mod/profile/javascript.php, mod/profile/manifest.xml,
+ mod/profile/start.php, mod/profile/views/default/profile/edit.php,
+ .../views/default/profile/editdefaultprofile.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/submenu.php,
+ mod/profile/views/default/profile/userdetails.php,
+ mod/reportedcontent/actions/add.php, mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/index.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/manifest.xml, mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/form.php, mod/river/manifest.xml,
+ mod/river/start.php, .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/edit.php,
+ .../default/widgets/river_widget_friends/view.php,
+ .../actions/email/confirm.php, mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/manifest.xml, mod/uservalidationbyemail/start.php,
+ search/index.php, search/users.php, services/api/rest.php,
+ services/export/handler.php, settings/index.php, settings/plugins.php,
+ settings/statistics.php, settings/user.php, upgrade.php, version.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php, views/default/ajax/loader.php,
+ views/default/annotation/generic_comment.php, views/default/api/output.php,
+ views/default/basic_elements/welcome.php, views/default/canvas/default.php,
+ views/default/canvas/layouts/one_column.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ .../canvas/layouts/two_column_right_sidebar.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/comments/forms/edit.php, views/default/css.php,
+ views/default/export/entity.php, views/default/export/metadata.php,
+ views/default/export/relationship.php, views/default/friends/collection.php,
+ views/default/friends/collections.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/list.php,
+ views/default/friends/picker.php, views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php,
+ views/default/graphics/icon.php, views/default/group/default.php,
+ views/default/input/access.php, views/default/input/button.php,
+ views/default/input/calendar.php, views/default/input/checkboxes.php,
+ views/default/input/email.php, views/default/input/file.php,
+ views/default/input/form.php, views/default/input/hidden.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/reset.php, views/default/input/submit.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php, views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php,
+ views/default/navigation/pagination.php,
+ views/default/navigation/topbar_tools.php,
+ views/default/navigation/viewtype.php,
+ .../notifications/settings/usersettings.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/object/plugin.php, views/default/object/widget.php,
+ views/default/output/calendar.php, views/default/output/checkboxes.php,
+ views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/email.php, views/default/output/iframe.php,
+ views/default/output/longtext.php, views/default/output/pulldown.php,
+ views/default/output/radio.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/url.php, views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/owner_block.php,
+ views/default/page_elements/spotlight.php,
+ views/default/page_elements/title.php,
+ views/default/pageshells/pageshell.php, views/default/river/dashboard.php,
+ views/default/river/relationship/friend/create.php,
+ views/default/river/wrapper.php, views/default/search/gallery.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php,
+ views/default/settings/install.php, views/default/settings/system.php,
+ views/default/site/default.php, views/default/spotlight/default.php,
+ views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php, views/default/user/default.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/default/welcome.php, views/default/welcome/logged_in.php,
+ views/default/welcome/logged_out.php, views/default/widgets/editwrapper.php,
+ views/default/widgets/wrapper.php, views/failsafe/canvas/default.php,
+ views/failsafe/input/button.php, views/failsafe/input/checkboxes.php,
+ views/failsafe/input/form.php, views/failsafe/input/hidden.php,
+ views/failsafe/input/longtext.php, views/failsafe/input/pulldown.php,
+ views/failsafe/input/reset.php, views/failsafe/input/submit.php,
+ views/failsafe/input/text.php, views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/list.php, views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php, views/failsafe/settings/install.php,
+ views/failsafe/settings/system.php, views/foaf/canvas/default.php,
+ views/foaf/pageshells/pageshell.php, views/foaf/user/default.php,
+ views/js/object/default.php, views/js/pageshells/pageshell.php,
+ views/js/user/default.php, views/json/api/output.php,
+ views/json/canvas/default.php, views/json/export/entity.php,
+ views/json/export/metadata.php, views/json/export/relationship.php,
+ views/json/group/default.php, views/json/messages/exceptions/exception.php,
+ views/json/object/default.php, views/json/pageshells/pageshell.php,
+ views/json/search/entity_list.php, views/json/site/default.php,
+ views/json/user/default.php, views/opendd/canvas/default.php,
+ views/opendd/export/entity.php, views/opendd/export/metadata.php,
+ views/opendd/export/relationship.php, views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/site/default.php, views/opendd/user/default.php,
+ views/php/api/output.php, views/php/canvas/default.php,
+ views/php/export/entity.php, views/php/export/metadata.php,
+ views/php/export/relationship.php, views/php/group/default.php,
+ views/php/messages/exceptions/exception.php, views/php/object/default.php,
+ views/php/pageshells/pageshell.php, views/php/search/entity_list.php,
+ views/php/site/default.php, views/php/user/default.php,
+ views/rss/annotation/default.php, views/rss/canvas/default.php,
+ views/rss/group/default.php, views/rss/object/default.php,
+ views/rss/pageshells/pageshell.php, views/rss/user/default.php,
+ views/xml/api/output.php, views/xml/messages/exceptions/exception.php,
+ views/xml/pageshells/pageshell.php, views/xml/xml-rpc/output.php: Refs #706
+
+2009-01-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/notifications/languages/en.php, mod/notifications/start.php: Menu
+ heading changes
+
+ * mod/notifications/actions/save.php: Added save action for the notification
+ subscriptions.
+
+ * mod/notifications/index.php, mod/notifications/languages/en.php,
+ mod/notifications/start.php,
+ .../default/notifications/subscriptions/form.php: Added notification
+ subscriptions page.
+
+ * engine/lib/languages.php: Moved current language detection out into the
+ function get_language();
+
+2009-01-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/js/initialise_elgg.php,
+ views/default/navigation/topbar_tools.php: new cross-browser js toolbar menu
+
+2009-01-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Refs #562: Configuration flag to disable database
+ sessions.
+
+ * languages/en.php: Fixes missing translations
+
+ * version.php: Bumped version to today
+
+2009-01-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../default/usersettings/statistics_opt/online.php: Closes #702: Correct
+ parameters fed to get_system_log
+
+2009-01-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ .../jquery/jquery-easing-compatibility.1.2.pack.js,
+ vendors/jquery/jquery-easing.1.2.pack.js,
+ .../jquery/jquery-ui-personalized-1.5.3.packed.js,
+ .../jquery/jquery-ui-personalized-1.5.packed.js,
+ vendors/jquery/jquery.easing.1.3.packed.js,
+ views/default/js/friendsPickerv1.php, views/default/js/initialise_elgg.php,
+ views/default/page_elements/header.php: jquery framework and avatar menu
+ updated
+
+2009-01-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: A further change to ensure notification
+ messages don't get changed for every method if one method needs to make a
+ change.
+
+ * engine/lib/notification.php: Slight change to notifications.
+
+ * engine/lib/notification.php: Added more granular notification hook
+
+2009-01-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/metadata.php: Closes #701: Blank tags
+ not returned by string_to_tag_array
+
+2009-01-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Granular notification: a start
+
+2009-01-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Relationships no longer double added
+
+2009-01-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Closes #700: If a plugin doesn't physically exist
+ then it is deleted.
+
+ * views/default/usersettings/plugins_opt/plugin.php: User settings
+ translated
+
+ * views/default/admin/plugins_opt/plugin.php,
+ views/default/usersettings/plugins_opt/plugin.php: Reverted.
+
+ * views/default/admin/plugins_opt/plugin.php,
+ views/default/usersettings/plugins_opt/plugin.php: Tools menus now elgg_echo
+ folder name
+
+2009-01-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Introducing a function that orders by sums of
+ an annotation AND limits by a metadata value
+
+2009-01-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php, mod/activity/manifest.xml,
+ mod/activity/opendd.php, mod/activity/start.php,
+ mod/activity/views/default/activity/css.php,
+ mod/activity/views/default/activity/dashboard.php,
+ mod/activity/views/default/activity/wrapper.php,
+ .../views/default/settings/activity/edit.php,
+ mod/activity/views/opendd/activity/dashboard.php: Added Activity stream back
+ in
+
+ * engine/lib/users.php: Closes #699: get_user_by_username now using access
+ controls. Will no longer throw exception when accessing disabled users.
+
+2009-01-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Added toggling for the annotation sum list
+ functions.
+
+ * engine/lib/annotations.php: Added to and fixed the list by annotation
+ count functions.
+
+ * engine/lib/annotations.php: Fix for previous
+
+ * engine/lib/annotations.php: Added the missing 'group by' clause to the get
+ annotations by sum SQL query.
+
+2009-01-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Added user to user settings
+
+ * engine/lib/plugins.php: Refs #697: Now using plugin hook so one can do
+ live validation of values
+
+ * engine/lib/widgets.php: Closes #698: Typo corrected - nice spot!
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ engine/lib/plugins.php: Closes #697: Events triggered when plugin settings
+ are updated.
+
+2009-01-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fix for previous.
+
+ * engine/lib/annotations.php: Added annotation sum functions
+
+2009-01-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php: Closes #691: Should have been
+ is_memcache_available()
+
+2009-01-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/save.php, actions/user/language.php, actions/user/name.php:
+ Closes #689: Email now only changed if it is different than the one
+ registered, also a number of other settings changed in this way.
+
+ * actions/widgets/add.php, actions/widgets/reorder.php: Widget save errors
+ now use correct message box
+
+2009-01-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: Elgg version info now present in
+ headers.
+
+ * mod/crontrigger/manifest.xml, mod/crontrigger/start.php: Closes #672: Poor
+ mans cron plugin enabled. This triggers events according to page load.
+
+ * engine/lib/elgglib.php:
+
+ * engine/lib/elgglib.php: Added shutdown, system event. Refs #672
+
+ * mod/groups/actions/forums/edittopic.php: Editing post no longer takes
+ ownership
+
+ * actions/email/save.php: Refs #641: Email changer now prevents changing to
+ the same as another user.
+
+2009-01-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php, languages/en.php: Closes #669: Logins rate
+ limited. Accounts are limited to 5 fails in a 5 minute period, meaning an
+ attacker can try one password per minute.
+
+2009-01-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php: Comment correction.
+
+ * engine/lib/elgglib.php: Fix for template handler override.
+
+2009-01-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Closes #676: Entity subtables now deleted on failed
+ connections.
+
+2009-01-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Better trigger_plugin_hook documentation.
+
+2009-01-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/resetpassword.php, engine/lib/users.php: Closes #675:
+ Salt changed during password reset
+
+ * engine/lib/sessions.php:
+
+2009-01-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Tag updates.
+
+2009-01-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: Added rel="nofollow" rss and
+ opendd links in ownerblock
+
+2009-01-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/makeadmin.php, actions/admin/user/removeadmin.php,
+ languages/en.php, .../views/default/profile/menu/adminlinks.php: Closes #240:
+ It is now possible to downgrade an admin user.
+
+ * engine/lib/users.php: Closes #560: Pagination parameters added.
+
+ * mod/groups/languages/en.php, .../views/default/object/groupforumtopic.php:
+ Closes #544: Logged out view now shows correct dates, also tidied up some
+ translation issues.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php: Minor variable name and
+ comment change.
+
+ * actions/admin/user/unban.php, engine/lib/api.php, engine/lib/sessions.php,
+ engine/lib/users.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2009010901.sql, languages/en.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/listing.php,
+ .../views/default/profile/menu/adminlinks.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/userdetails.php, version.php: Closes #668:
+ Banning now works through a flag in the users_entity table. Database upgrade
+ required. * Added ElggUser::isBanned(); * Added 'banned' column to
+ users_entity * Modified ban() and unban() * Modified pam functions to check
+ $user->isBanned() * Modified login() to check $user->isBanned() * Modified
+ sessions_init() to check isBanned() and destroy session accordingly *
+ Modified profile views to highlight banned users and prevent menus for
+ non-admin users.
+
+2009-01-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php: Closes #588: Don't remember adding this
+ check... but anyway, double entries regression fixed.
+
+ * engine/lib/entities.php: Minor error message improvement
+
+ * engine/lib/entities.php: Added extra belts and braces check (minor)
+
+ * engine/lib/entities.php: Added extra belts and braces check (minor)
+
+ * engine/lib/users.php: Refs #668: Building on [2546] and providing ban and
+ unban functions. Later these will be replaced with "banning" functions.
+
+ * mod/groups/views/default/forms/groups/edit.php: Closes #664: Defaults
+ added to radio buttons
+
+ * engine/lib/statistics.php: Limit max display of active users to 10.
+
+ * actions/admin/user/ban.php, engine/lib/users.php: Refs #668, #640: Cleaner
+ interface provided for banning.
+
+ * actions/admin/user/ban.php, engine/lib/entities.php, engine/lib/users.php:
+ Refs #640: Renamed and moved entities.php:disable_entities to
+ user.php:disable_user_entities
+
+ * engine/lib/entities.php: Delete replaced by disable in disable_entity
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2009010801.sql,
+ version.php: Closes #666: Added some extra indexes
+
+ * languages/en.php, mod/uservalidationbyemail/languages/en.php: Closes #546:
+ Translation moved
+
+ * engine/lib/annotations.php: Closes #663: Added access checks on entity on
+ get_entities_from_annotation and count functions.
+
+ * engine/lib/metadata.php: Closes #667: Minor tweak, an e should be an m
+
+2009-01-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php,
+ .../default/widgets/group_members_widget/view.php: Closes #410: Pagination
+ parameter now passed in relationship list view.
+
+ * engine/lib/access.php, mod/groups/groupprofile.php,
+ mod/groups/languages/en.php: Closes #286: Group access restrictions issue
+ fixed, modified from patch supplied with #315
+
+ * views/failsafe/settings/system.php: Refs #622: Missing command from
+ failsafe view
+
+ * mod/groups/views/default/groups/forum_latest.php: Closes #660: Minor text
+ tweak
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ languages/en.php, views/default/account/forms/login.php,
+ views/default/settings/system.php: Closes #662: https on login.
+
+2009-01-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Closes #587: The area of code in
+ question hasn't been coded as defencively as it could have been.
+
+ * engine/lib/annotations.php: Fixes #648: Copy and paste error corrected.
+
+2009-01-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: * Added addRelationship to ElggEntity... bit of
+ an omission!
+
+ * htaccess_dist: Closes #656: Disabled mod_deflate for all actions so that
+ active downloads will no longer be double compressed.
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php,
+ engine/lib/sites.php: Fixes #655, Refs #628: Install now working with correct
+ event chain (#628).
+
+2009-01-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/add.php: Closes #649: Added checking to report when friend
+ add fails.
+
+2009-01-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: bug #634 fixed
+
+ * mod/groups/views/default/groups/forum_latest.php: lang tweak in group
+ forums
+
+ * mod/groups/actions/edit.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/forum_latest.php: groups owners can choose if
+ they want pages/files/forum enabled or not. Still a little more to do, this
+ is just the beginning code.
+
+ * mod/groups/languages/en.php: missing group lang items added
+
+2008-12-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php, engine/settings.example.php: Closes #579:
+ Allows configurable option $CONFIG->broken_mta = true. If set, this uses "\n"
+ instead of "\r\n" in email headers.
+
+2008-12-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Closes #643: Confirmed bug, applied fix as
+ suggested.
+
+ * views/default/page_elements/owner_block.php: Closes #633: User name in
+ owner block is now link. This may require additional skinning.
+
+ * engine/lib/plugins.php: Closes #608: Placing a file called "disabled" in
+ mod now disables all plugins, allowing easier recovery of an elgg site with
+ screwed up modules.
+
+ * views/default/input/button.php: Closes #519: Typo. Well spotted.
+
+ * languages/en.php: Closes #500
+
+ * mod/reportedcontent/languages/en.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php: Closes #504
+
+2008-12-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Closes #396: Form should probably not be permitted
+ on input.
+
+2008-12-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Closes #628: Event change now terminates on false.
+ Nice spot :)
+
+2008-12-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/updateclient/index.php, mod/updateclient/languages/en.php,
+ mod/updateclient/manifest.xml, mod/updateclient/start.php,
+ .../views/default/settings/updateclient/edit.php: Removed upgrade client
+ since it doesn't really matter.
+
+ * README.txt, version.php: Ticked up version number
+
+2008-12-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008120501.sql: Fixes #615
+
+2008-12-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php: Fixes to user banning (action side).
+
+ * engine/lib/elgglib.php: Fixes to user banning.
+
+2008-12-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Prototype view caching
+
+ * engine/lib/notification.php: Closes #597: GUID must now be non-zero for
+ messages to be sent
+
+2008-12-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: unused rule removed #583
+
+2008-12-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008111901.sql,
+ engine/schema/upgrades/2008120501.sql, version.php: Closes #611: Made name
+ field longer
+
+2008-12-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Closes #421 : Catches the DB Exception, so
+ hopefully this will prevent the error from showing up in the future :)
+
+ * languages/en.php, views/default/friends/collectiontabs.php: Closes #501
+
+ * engine/lib/users.php, mod/uservalidationbyemail/start.php: Closes #609
+
+ * engine/schema/upgrades/2008112002.sql: Fixed update script
+
+ * htaccess_dist: ETag support
+
+2008-12-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/forum_latest.php: latest group discussion
+ bug fixed
+
+2008-12-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/location.php: Some location tweaks
+
+ * engine/lib/users.php: Closes #550: Code metadata now moved to private
+ storage
+
+ * mod/groups/membership.php: Closes #604
+
+2008-11-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/radio.php: Improved radio button value retention
+
+ * views/default/input/checkboxes.php: Improved checkbox value retention
+
+2008-11-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/metatags.php: FOAF header added to
+ profile
+
+ * views/foaf/user/default.php: Foaf ident on mailbox for friends
+
+ * engine/schema/upgrades/2008112601.sql: Closes #571: Widgets now use
+ private store for settings
+
+ * engine/lib/entities.php, engine/lib/widgets.php: Closes #571: Widgets now
+ use private store for settings
+
+ * engine/lib/opendd.php:
+
+2008-11-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/location.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008112501.sql, version.php: Hook for future geocoding
+ library added.
+
+ * engine/schema/mysql.sql:
+
+2008-11-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Closes #580: Fixed tagging trim and strtolower
+
+2008-11-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/calendar.php: Refs #452: Basic entity listing functions. Needs
+ canvas.
+
+ * engine/lib/users.php: Closes #554: Validation procedure now correctly
+ screening for ascii space
+
+2008-11-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php:
+
+ * engine/lib/sessions.php: Added site secret to fingerprint to make it
+ harder to guess
+
+ * engine/lib/sessions.php, engine/lib/users.php: Fixes #548: Introducing
+ set_last_login($user_guid). Called from login(), but call from any
+ authentication code where appropriate.
+
+ * engine/lib/calendar.php, engine/lib/entities.php: Refs #452: Calendar
+ interface on entities
+
+ * engine/lib/entities.php: Introducing get_entities_from_private_setting();
+
+2008-11-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php, mod/groups/topicposts.php, upgrade.php: No need to
+ trigger the init event on upgrade.
+
+2008-11-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/upgrades/2008112001.sql,
+ engine/schema/upgrades/2008112002.sql, version.php: Refs #569, #570, #571:
+ Update script for both users and plugins plugin settings
+
+ * engine/schema/upgrades/2008111901.sql,
+ engine/schema/upgrades/2008112001.sql, version.php: Migrate plugin settings
+ from plugin to new settigns store.
+
+ * engine/lib/entities.php, engine/lib/plugins.php: Refs #571. Fixes #569,
+ #570: * Plugin functions set to use private data store. * Fixed some db
+ queries * Modified plugin class overriding get/set functions
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008111901.sql: Refs #569,
+ #570, #571: Minor database schema errors corrected
+
+ * engine/lib/entities.php: Refs #569, #570, #571: Corrected and optimised
+ insert query
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008111901.sql: Refs #569,
+ #570, #571: Minor database schema errors corrected
+
+ * engine/lib/entities.php: Refs #569, #570, #571: dbprefix not prefix;
+
+ * engine/lib/entities.php: Refs #569, #570, #571: Added
+ remove_all_private_settings()
+
+ * engine/lib/entities.php: Refs #569, #570, #571: Added
+ get_all_private_settings();
+
+ * engine/lib/metadata.php: Fixes #531: Access permissions enforced
+
+2008-11-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/group.php, engine/lib/objects.php, engine/lib/relationships.php,
+ engine/lib/sites.php, engine/lib/users.php, views/default/export/entity.php,
+ views/json/export/entity.php, views/json/export/metadata.php,
+ views/json/export/relationship.php, views/php/export/entity.php,
+ views/php/export/metadata.php, views/php/export/relationship.php: Fixes #568:
+ Exportable code now inclusive not exclusive. * Added extra function
+ Exportable interface * OpenDD export modified * PHP & JSON export views
+ modified * Default export view will still show all data if you are logged in
+ as admin (since this view is used by the guidtool)
+
+2008-11-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/upgrades/2008111901.sql: Introducing the new private
+ settings table.
+
+2008-11-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/calendar.php: Added get notable enities on relationship
+
+ * engine/lib/calendar.php: Added get notable enities on metadata
+
+ * engine/lib/calendar.php: Added get notable enities
+
+2008-11-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Closes #557
+
+2008-11-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * dashboard/index.php, engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/entities.php, engine/lib/extender.php, engine/lib/filestore.php,
+ engine/lib/group.php, engine/lib/languages.php, engine/lib/metadata.php,
+ engine/lib/notification.php, engine/lib/plugins.php, engine/lib/sessions.php,
+ engine/lib/tags.php, engine/lib/users.php, engine/lib/usersettings.php: *
+ Introducing get_loggedin_user() and get_loggedin_userid() * ACLs now using
+ get_loggedin_user* * Some logic cleaned up * Some "Undefined..." messages
+ cleaned up
+
+ * views/default/search/entity_list.php:
+
+ * views/default/search/entity_list.php: Removed some "Undefined" messages
+
+ * engine/lib/elgglib.php: Removed some "Undefined" messages
+
+ * views/default/input/access.php, views/default/input/button.php,
+ views/default/input/submit.php: Removed some "Undefined" messages
+
+ * mod/profile/views/default/profile/userdetails.php: Removed some
+ "Undefined" messages
+
+ * views/default/canvas/layouts/widgets.php: Removed some "Undefined"
+ messages
+
+ * engine/lib/elgglib.php: "Undefined" messages tidied up
+
+ * engine/lib/metastrings.php: "Undefined" messages tidied up
+
+ * engine/lib/river.php: "Undefined" messages tidied up
+
+ * engine/lib/sessions.php:
+
+ * engine/lib/sessions.php: * Candidate for initial ElggSession magic class *
+ Session now properly cleared on init and logout - this has knock on effect
+ that you can no longer assume that $_SESSION['id'] or 'guid' will be integer,
+ making it necessary to cast.
+
+ * engine/lib/admin.php: Minor tidying of code
+
+2008-11-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Experimental ElggCache
+
+2008-11-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php:
+
+ * engine/lib/cache.php: No longer blanks all caches when clearing
+
+ * engine/lib/cache.php: Closes #543
+
+2008-11-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Ifdef expires
+
+ * htaccess_dist: Minor tweaks to mod_gzip config. Note that gzip can't
+ compress some things due to the way that the apache 1.3 stack works
+
+ * htaccess_dist: Simplified GZIP
+
+ * htaccess_dist: Mod deflate support added
+
+ * htaccess_dist: Turned on mod_gzip if available
+
+ * htaccess_dist: Added default expiry
+
+ * mod/groups/graphics/icon.php: Expires header added to group icons
+
+2008-11-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icon.php: Content length on images
+
+ * mod/groups/graphics/icon.php: Content length on images
+
+ * _css/css.php, engine/lib/elgglib.php: Content length headers on JS and css
+
+ * engine/lib/elgglib.php: Javascript now correctly marked as cacheable
+
+ * _css/css.php: Fixes #541: CSS Now not being cached. Error is being caused
+ somewhere in the elgg framework which prevents pragma caching from working...
+ not sure what
+
+ * languages/en.php: Refs #520
+
+ * languages/en.php, views/default/friends/collections.php: Closes #501
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/groups/forum_latest.php: Closes #507
+
+ * engine/lib/memcache.php: Tidied.
+
+2008-11-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Profiling now showing queries executed before
+ debug flag being set
+
+ * engine/lib/metadata.php: Refs #529: Experimental memcaching for metadata
+
+ * engine/lib/elgglib.php: Fixed datalists error
+
+ * engine/lib/elgglib.php: Refs #529: Experimental memcaching on datalists
+
+ * engine/start.php: Removing unnecessary call to datalists
+
+ * index.php: Fixes #530
+
+ * engine/lib/metastrings.php: Refs #529: Experimental caching of metastrings
+
+ * engine/lib/entities.php: Refs #529: Experimental object level caching
+
+2008-11-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Reverted limited caching back to array since
+ caching objects don't work so well for these.
+
+ * engine/lib/elgglib.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008110601.sql, version.php: datalists now has primary
+ key, datalist set function optimised
+
+ * engine/lib/elgglib.php: Not possible to get any more, so tell them so
+
+ * engine/lib/users.php: Last action query update delayed to avoid
+ invalidating query cache unnecessarily.
+
+ * engine/lib/database.php: * Database functions optimised and centralised a
+ bit * Caching now caches queries which return no data * Introducing
+ execute_delayed_query family for executing queries AFTER the page has loaded.
+
+ * engine/lib/cache.php: isset fixes
+
+ * engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/relationships.php: Some tidying of objects and opendd export
+
+ * engine/lib/cache.php, engine/lib/memcache.php: Added test to see if
+ memcache is available.
+
+ * engine/lib/cache.php, engine/lib/memcache.php: Class hierachy changed to
+ separate shared memory caching
+
+2008-11-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php:
+
+ * engine/lib/river.php: Minor extension to river
+
+ * engine/lib/memcache.php: Minor tweak
+
+ * engine/lib/river.php: Slight rejig in the way the river works
+
+ * engine/lib/elgglib.php: Extends elgg_view_tree to support other view
+ types.
+
+ * engine/lib/cache.php: Added "add" method to cache only if it doesn't exist
+ already.
+
+ * engine/lib/database.php: Revert use of memcache for database query cache
+
+ * engine/lib/memcache.php: Changed default timeout
+
+2008-11-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/memcache.php: Removed cache clearing for now.
+
+ * engine/lib/database.php, engine/lib/memcache.php: More tweaks
+
+ * engine/lib/memcache.php: Experimental memcache support
+
+ * engine/lib/memcache.php, languages/en.php: Closes #516: Experimental
+ memcache support
+
+ * engine/settings.example.php: Installation notes
+
+ * languages/en.php: Refs #514: Memcache error messages
+
+ * engine/settings.example.php: Refs #514: Memcache settings
+
+ * engine/lib/cache.php: Refs #514 : Using memcache if available
+
+ * engine/settings.example.php: Refs #514
+
+ * engine/lib/memcache.php: First draft memcache object. No testing yet
+ carried out, submitted 'cos I'm moving computers.
+
+ * engine/lib/cache.php:
+
+ * engine/lib/cache.php, engine/lib/database.php, engine/lib/entities.php:
+ Moved caching to function so it can be easily replaced
+
+2008-11-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Refs #514: Entity and subtype caching
+
+ * engine/lib/cache.php: Minor tweaks
+
+ * engine/lib/cache.php: back to private
+
+ * engine/lib/cache.php: Initialisation correct
+
+ * engine/lib/database.php: Database using new memory cache object
+
+ * engine/lib/api.php, engine/lib/cache.php: * ElggCache interface improved *
+ ElggStaticVariableCache introduced as a placeholder for more advanced
+ caching.
+
+ * engine/lib/database.php: Experimental database query caching, please
+ report problems asap.
+
+ * engine/lib/calendar.php: Stub added refs #452
+
+ * engine/lib/database.php: Experimental database query caching, please
+ report problems asap.
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008110301.sql,
+ version.php: Some missing keys added.
+
+ * engine/lib/access.php, engine/lib/annotations.php,
+ engine/lib/configuration.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/group.php, engine/lib/objects.php,
+ engine/lib/query.php, engine/lib/relationships.php, engine/lib/sites.php,
+ engine/lib/users.php: Minor tweaks 'cos case does matter...
+
+2008-11-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/object/groupforumtopic.php: Minor style fix.
+
+ * mod/groups/discussions.php, .../views/default/object/groupforumtopic.php:
+ Latest discussion fix
+
+2008-10-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Closes #378: Fixed incorrect relationship direction.
+
+ * engine/lib/notification.php: Closes #446: * Errant \r\n and \r chars
+ coverted to \n. * newlines stripped from subject headers. * Lines starting
+ with From are changed to >From
+
+ * engine/handlers/cron_handler.php, mod/garbagecollector/start.php: Changed
+ cron to use output buffering (letting you simply echo rather than needing to
+ pass variables around)
+
+ * mod/groups/views/default/forms/groups/edit.php: Closes #461: Localisations
+ added
+
+ * mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php: Refs #494: GUID listed
+
+ * mod/garbagecollector/start.php: Added system, gc plugin hook to garbage
+ collector
+
+ * engine/lib/notification.php: Closes #488: This is indeed a typo... well
+ spotted :)
+
+ * engine/lib/database.php, engine/lib/metastrings.php,
+ mod/garbagecollector/start.php: Closes #493: Moved database queries out of
+ module and in to core in line with best practice.
+
+2008-10-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/groupprofile.php: Closes #486
+
+2008-10-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * README.txt: Version number fail.
+
+ * version.php: Elgg 1.1 final.
+
+ * version.php: Further version update
+
+ * README.txt: Version number change in the readme file.
+
+2008-10-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: profile block layout issue in IE7 fixed
+
+2008-10-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Version number change
+
+ * languages/en.php: A better description of the RESTful API
+
+2008-10-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Reverted database access permission caching.
+
+2008-10-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: Group topic error message
+
+ * _graphics/upgrader.gif, upgrade.php, views/default/settings/upgrading.php:
+ Replacement upgrade notifier
+
+ * INSTALL.txt, UPGRADE.txt: Slight update to crontab instructions
+
+ * mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php, mod/activity/manifest.xml,
+ mod/activity/start.php, mod/activity/views/default/activity/dashboard.php,
+ mod/activity/views/default/activity/wrapper.php,
+ .../views/default/settings/activity/edit.php: Farewell, activity, we hardly
+ knew ye.
+
+2008-10-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * INSTALL.txt, UPGRADE.txt: Modification to install and upgrade text files
+ to include details about the crontab
+
+2008-10-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/settings/upgrading.php: Added upgrading screen
+
+ * _graphics/upgrader.gif, languages/en.php, upgrade.php: Visual upgrader.
+
+2008-10-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/manifest.xml, mod/apiadmin/manifest.xml,
+ mod/diagnostics/manifest.xml, mod/garbagecollector/manifest.xml,
+ mod/groups/manifest.xml, mod/guidtool/manifest.xml,
+ mod/logbrowser/manifest.xml, mod/logrotate/manifest.xml,
+ mod/profile/manifest.xml, mod/river/manifest.xml,
+ mod/updateclient/manifest.xml, mod/uservalidationbyemail/manifest.xml:
+ manifest files sync'ed
+
+2008-10-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php, views/default/css.php: persistent
+ login checkbox styled
+
+2008-10-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Menu link text change, to be more descriptive
+
+2008-10-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php, mod/profile/views/default/profile/userdetails.php:
+ Hide 'about me' on custom profiles
+
+2008-10-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Annotation pagination is now corrected where more
+ than 10 items are being displayed at once.
+
+2008-10-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js, javascript/initialise_elgg.js: remove js,
+ moved into views
+
+ * javascript/initialise_elgg.js, views/default/css.php,
+ views/default/js/initialise_elgg.php: updates for v1.1, css cleanup, removal
+ of redundant classes, redundant js removed
+
+2008-10-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php, mod/logrotate/start.php: Logrotate and archive
+ containing offset. Table still created as $now but containing < $now-period.
+
+2008-10-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/garbagecollector/languages/en.php, mod/garbagecollector/manifest.xml,
+ mod/garbagecollector/start.php,
+ .../default/settings/garbagecollector/edit.php: Introducing the Elgg garbage
+ collector.
+
+2008-10-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: layout bug when not group owner
+
+2008-10-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/toolbox.php: Removed the toolbox.
+
+ * views/default/page_elements/header.php: Removed needless comment
+
+2008-10-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: added additional styles for code, pre, blockquote,
+ dl, dt etc
+
+2008-10-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php: Views are now more
+ granular.
+
+2008-10-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, languages/en.php,
+ views/default/account/forms/login.php: Closes #306
+
+2008-10-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/messages/list.php: messages in failsafe mode moved to
+ inline ones - so they don't obscure text below
+
+2008-10-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../river/annotation/generic_comment/create.php: Hoiking out the generic
+ comment view again. Needs to be rethought.
+
+ * languages/en.php, .../river/annotation/generic_comment/create.php:
+ Committed a generic comment view.
+
+2008-10-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/social.php, languages/en.php: Closes #440
+
+ * engine/lib/access.php: Flags to prevent queries being run multiple times.
+
+ * engine/lib/access.php: Removed spurious notice
+
+ * languages/en.php, views/default/admin/plugins_opt/plugin.php: Closes #476:
+ Well spotted.
+
+2008-10-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: additional dicv added to
+ owner block for theme purposes
+
+2008-10-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * crontab.example:
+
+ * mod/groups/languages/fr.php, mod/groups/languages/it.php,
+ mod/groups/languages/ru.php, mod/groups/languages/th.php,
+ mod/groups/languages/zh.php: REMOVED LANGUAGE FILES FROM CORE. This is due to
+ a stupid and frustrating legal reason.
+
+ * languages/de.php, languages/es.php, languages/fr.php, languages/it.php,
+ languages/ru.php, languages/th.php, languages/zh.php,
+ mod/activity/languages/ru.php, mod/apiadmin/languages/ru.php,
+ mod/diagnostics/languages/fr.php, mod/diagnostics/languages/it.php,
+ mod/diagnostics/languages/ru.php, mod/diagnostics/languages/th.php,
+ mod/diagnostics/languages/zh.php, mod/guidtool/languages/it.php,
+ mod/guidtool/languages/ru.php, mod/guidtool/languages/th.php,
+ mod/guidtool/languages/zh.php, mod/logbrowser/languages/fr.php,
+ mod/logbrowser/languages/it.php, mod/logbrowser/languages/ru.php,
+ mod/logbrowser/languages/th.php, mod/logbrowser/languages/zh.php,
+ mod/reportedcontent/languages/fr.php, mod/reportedcontent/languages/it.php,
+ mod/reportedcontent/languages/ru.php, mod/reportedcontent/languages/th.php,
+ mod/reportedcontent/languages/zh.php, mod/river/languages/fr.php,
+ mod/river/languages/it.php, mod/river/languages/ru.php,
+ mod/river/languages/th.php, mod/river/languages/zh.php,
+ mod/updateclient/languages/fr.php, mod/updateclient/languages/it.php,
+ mod/updateclient/languages/ru.php, mod/updateclient/languages/th.php,
+ mod/updateclient/languages/zh.php,
+ mod/uservalidationbyemail/languages/ru.php: REMOVED LANGUAGE FILES FROM CORE.
+ This is due to a stupid and tedious legal reason.
+
+ * mod/logrotate/languages/en.php, mod/logrotate/manifest.xml,
+ mod/logrotate/start.php, .../views/default/settings/logrotate/edit.php:
+ Closes #215: Log rotation added.
+
+2008-10-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/leave.php, mod/groups/start.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ .../views/default/object/groupforumtopic.php: Removing WSOD errors in groups
+
+2008-10-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php: Refs #215: Minor tweak to logic
+
+2008-10-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Hopefully slightly friendlier token mismatch errors.
+
+2008-10-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php: Refs #215: System hook for archiving log. Cron
+ yet to be added.
+
+ * .../views/default/profile/menu/adminlinks.php: Closes #448: Functionality
+ was present, but was lacking interface. Interface provided.
+
+ * views/default/object/default.php: Closes #460: Good spot, thanks for the
+ contribution!
+
+ * languages/en.php: Closes #473: Good spot
+
+2008-10-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/register.php, actions/register.php, engine/lib/users.php,
+ views/default/account/forms/register.php: The friend invite infrastructure is
+ now secure.
+
+2008-10-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/languages/ru.php:
+
+ * mod/activity/languages/ru.php: Closes #469: Thankyou for the translation!
+
+2008-10-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/register.php, register.php: Further additions to the registration
+ form.
+
+ * views/default/account/forms/register.php: Added friend guid handling to
+ the registration form.
+
+ * engine/lib/users.php: Added the ability to add a user to a user's friends
+ list on registration.
+
+ * actions/register.php: Added the ability to add a user to a user's friends
+ list on registration.
+
+ * engine/lib/entities.php: Revert.
+
+ * engine/lib/entities.php: Improvements for container overrides.
+
+2008-10-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/radio.php: Fix for input/radio where keys aren't
+ specified
+
+2008-10-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/usersettings/plugins_opt/plugin.php: Minor tweaks to tools
+ settings
+
+ * languages/en.php: Added reply
+
+2008-10-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Small language additions for open and close.
+
+2008-10-22 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/shout_speech_bubble.gif: removed and added to thewire plugin
+
+2008-10-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cron.php: Better default forward
+
+2008-10-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: Fixed typo! Well spotted,
+ @notomodungwa
+
+2008-10-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * crontab.example, engine/lib/cron.php: Increasing sub-hour cron granularity
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008102101.sql: Removed
+ unnecessary column
+
+ * engine/lib/sessions.php: Closes #453 and #463: Completed work. Sessions
+ now stored in database.
+
+ * engine/lib/sessions.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008102101.sql: Semi-working session code. Still won't
+ permit logging in, commented out until there is time to fix. Problem seems
+ to be based around the action_gatekeeper() and the values set for the
+ __elgg_session. Removing this component from the key causes the token to be
+ valid. My feeling is that the session is not being saved or loaded
+ correctly.
+
+2008-10-21 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php: #458 fixed - IE7 conditional
+ statement bug
+
+2008-10-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008102101.sql, version.php: Database session code.
+ IMPORTANT NOTE: The trigger for this is commented out, so old session code
+ is used. There are serious problems with using the new code since it causes a
+ chicken and egg problem with the upgrade script.
+
+ * engine/lib/group.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Closes #457: Now returns $guid on success, false on
+ fail
+
+ * engine/lib/sites.php, languages/en.php: Added safety rail to prevent
+ disabling/deleting of currently viewed site.
+
+2008-10-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/checkboxes.php: Output/checkboxes now defers to
+ output/tags rather than output/text; much more sensible.
+
+ * engine/lib/input.php: The input filter now deals with two-dimensional
+ input arrays.
+
+2008-10-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apiadmin/views/default/object/api_key.php:
+
+ * mod/apiadmin/views/default/object/api_key.php: Minor tweaks to avoid
+ breaking non-admin css
+
+2008-10-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Important fix for deleted plugins.
+
+2008-10-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/checkboxes.php, views/default/output/radio.php:
+ Default output fields for radio and checkboxes
+
+ * search/users.php: Fixed double layout issue
+
+2008-10-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/usersettings.php, languages/en.php, settings/index.php,
+ settings/plugins.php, settings/statistics.php, settings/statistics/index.php,
+ settings/user.php, settings/user/index.php, views/default/object/plugin.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php: Closes #335: Marcus Povey
+ : * Per user tools settings now present again (only displays if there are
+ settings present AND the plugin is enabled - needs skinning accordingly) *
+ Re-jigged the settings code to behave like a proper page handler. * Minor
+ tweak to language
+
+ * engine/lib/system_log.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008101701.sql, version.php: Changes to access any
+ system log code. Introducing owner guid on items which is necessary for
+ access control. Requires upgrade.php to be run
+
+2008-10-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php, views/default/css.php:
+ activity stream basic style applied, and plugin reorder links adjusted
+
+2008-10-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: widget gallery more info spacing fixed
+
+2008-10-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Minor language tweak.
+
+ * actions/admin/plugins/reorder.php, admin/plugins/index.php,
+ engine/lib/plugins.php, languages/en.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php: You can now reorder plugins.
+
+2008-10-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php: gap in user menu removed
+
+2008-10-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/activity/all.php, mod/activity/friends.php, mod/activity/index.php,
+ mod/activity/languages/en.php, mod/activity/manifest.xml,
+ mod/activity/start.php, mod/activity/views/default/activity/dashboard.php,
+ mod/activity/views/default/activity/wrapper.php,
+ .../views/default/settings/activity/edit.php: Initial activity view. Missing
+ functionality: comments, tabs and drill down ability.
+
+2008-10-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php: Improved online users stats so that more than
+ 10 get displayed
+
+2008-10-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Moving internal function out of elgg_view_tree()
+ since this caused problems
+
+ * engine/lib/configuration.php: Closes #438
+
+ * engine/lib/river.php:
+
+ * engine/lib/river.php, engine/lib/system_log.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008101601.sql, version.php: Closes #442: Requires
+ schema upgrade. Side effect - friends activity rivers will be blanked.
+
+ * engine/lib/river.php: River performance tweak
+
+2008-10-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/ru.php: Committing groups translation
+
+ * .../notifications/settings/usersettings.php: Notification methods now
+ better translated
+
+ * languages/ru.php: Closes #433: Merged changes from trac and email
+ submissions. Thanks for all submissions!
+
+ * languages/ru.php: Initial core russian translation
+
+ * mod/apiadmin/languages/ru.php, mod/diagnostics/languages/ru.php,
+ mod/guidtool/languages/ru.php, mod/logbrowser/languages/ru.php,
+ mod/reportedcontent/languages/ru.php, mod/river/languages/ru.php,
+ mod/updateclient/languages/ru.php,
+ mod/uservalidationbyemail/languages/ru.php: Refs #433: Russian translations
+ for core plugins
+
+2008-10-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: view link added to en.php
+
+2008-10-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/social.php: Removed an annoying variable cast that was
+ destroying everything.
+
+ * engine/lib/social.php: The word blacklist for filter_string is now loaded
+ on init.
+
+2008-10-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Edit profile form modified
+
+2008-10-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php:
+
+ * mod/profile/actions/deletedefaultprofileitem.php,
+ mod/profile/actions/editdefault.php,
+ mod/profile/actions/resetdefaultprofile.php, mod/profile/defaultprofile.php,
+ mod/profile/start.php, .../views/default/profile/editdefaultprofile.php:
+ Closes #235: Simple profile editor in place
+
+2008-10-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/friends_picker_arrow_left.gif,
+ _graphics/friends_picker_arrow_right.gif,
+ _graphics/friends_picker_arrows.gif, _graphics/gallery_back_icon.gif,
+ _graphics/gallery_back_icon_on.gif, views/default/css.php: Friends picker
+ arrows combined into one resource, and updated with hover effect. Redundant
+ image gallery icons removed.
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php:
+
+ * engine/lib/elgglib.php: Catching error on datalists
+
+2008-10-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/avatar_menu_arrow.gif, _graphics/avatar_menu_arrow_hover.gif,
+ _graphics/avatar_menu_arrow_open.gif, _graphics/avatar_menu_arrows.gif,
+ mod/profile/views/default/profile/css.php: Avatar user menu arrows updated to
+ use one image rather than 3
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Closes #412
+
+ * engine/lib/river.php: Refs #431: Belts and braces added to river view
+
+2008-10-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/useradd.php: Adjusted spacing on add user form
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Refs #432: Typo
+
+ * mod/groups/start.php: Closes #432: Hook added as profile
+
+ * mod/profile/start.php: Minor commenting
+
+2008-10-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * INSTALL.txt, UPGRADE.txt: Updated the install and upgrade text.
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/zh.php: Refs #424: reportedcontent
+
+ * mod/groups/languages/zh.php, mod/guidtool/languages/zh.php,
+ mod/river/languages/zh.php: Refs #424: guidtool, groups, river
+
+ * mod/diagnostics/languages/zh.php, mod/logbrowser/languages/zh.php,
+ mod/updateclient/languages/zh.php: Refs #424: Diagnostics, logbrowser,
+ updateclient
+
+ * languages/zh.php: Refs #424: Core translations added.
+
+ * UPGRADE.txt, engine/lib/version.php, upgrade.php: Closes #430
+
+2008-10-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/graphics/defaultlarge.gif,
+ mod/groups/graphics/defaultmedium.gif, mod/groups/graphics/defaultsmall.gif,
+ mod/groups/graphics/defaulttiny.gif,
+ .../views/default/icon/group/default/large.php,
+ .../views/default/icon/group/default/medium.php,
+ .../views/default/icon/group/default/small.php,
+ .../views/default/icon/group/default/tiny.php,
+ mod/profile/graphics/defaultlarge.jpg,
+ mod/profile/graphics/defaultmedium.jpg,
+ mod/profile/graphics/defaultsmall.jpg, mod/profile/graphics/defaulttiny.jpg,
+ mod/profile/graphics/defaulttopbar.jpg: Groups updated to use new icon method
+ and new groups icons added. Profile updated with new default avatars
+
+2008-10-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2008101303.php, version.php: Fixed the previous user
+ login issue.
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Introducing get_current_language(). Refs #235
+
+ * mod/profile/start.php: Refs #235: Added hooks for future admin interface
+
+ * mod/profile/start.php:
+
+2008-10-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/annotation/generic_comment.php: default message styled
+
+2008-10-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Refs #235: Now possible for plugins to change
+ default profile (plugin hook 'profile:fields', 'profile'.
+
+2008-10-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: widget more info tooltip improvements
+
+ * views/default/canvas/layouts/widgets.php: further fixes to the widget
+ gallery to use css-based images
+
+ * views/default/canvas/layouts/widgets.php, views/default/css.php: Updated
+ widget picker gallery to use classes for images rather than hard-coded
+ resources.
+
+2008-10-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php: user avatar menu method
+ adjusted to avoid hard-coded image resources
+
+2008-10-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php: system message strings moved to
+ elgg_echo
+
+2008-10-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, mod/profile/icon.php,
+ .../views/default/icon/user/default/large.php,
+ .../views/default/icon/user/default/master.php,
+ .../views/default/icon/user/default/medium.php,
+ .../views/default/icon/user/default/small.php,
+ .../views/default/icon/user/default/tiny.php,
+ .../views/default/icon/user/default/topbar.php: Default icon overrides.
+
+ * engine/lib/entities.php, mod/profile/icon.php: Simple hook to allow for
+ default user and entity icons.
+
+2008-10-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php:
+
+ * engine/lib/entities.php, mod/groups/graphics/defaultlarge.jpg,
+ mod/groups/graphics/defaultmedium.jpg, mod/groups/graphics/defaultsmall.jpg,
+ mod/groups/graphics/defaulttiny.jpg, mod/groups/start.php,
+ mod/groups/views/default/groups/icon.php: Closes #417 & #418
+
+ * engine/lib/filestore.php, mod/profile/start.php: Minor optimisations.
+ Introducing exists() on filestores
+
+ * _graphics/icons/default/topbar.png, engine/lib/entities.php,
+ mod/profile/icon.php, mod/profile/start.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/icon.php,
+ views/default/page_elements/elgg_topbar.php: Closes #301: Profile icons now
+ use getIcon() API. Overrides now possible: For themes to override, create a
+ plugin hook listening to 'entity:icon:url' and object 'user'. In the hook
+ return a different url. To replace default user icons in a plugin one might
+ create a hook: function profile_usericon_hook($hook, $entity_type,
+ $returnvalue, $params) { if ((!$returnvalue) && ($params['entity'] instanceof
+ ElggUser)) { // return your default graphic here. } } And set it to priority
+ 900 (lower priority than the code that displays a pretty icon for users but
+ higher than the default object display code in entities.php)
+
+ * engine/lib/users.php: Allowing '.' in username, refs #415
+
+ * views/rss/pageshells/pageshell.php: Fixes #413: Rss feeds with GET query
+ strings now functioning. Thanks for your patch, nice spot!
+
+ * languages/en.php: Fixes #415
+
+2008-10-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/ajax/loader.php, views/default/css.php: ajax loader updated
+ to use an image from _graphics rather than a hard-coded image resource (to
+ make theming possible).
+
+2008-10-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php: Removing pagination from online users.
+
+2008-10-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Removed debug
+
+ * engine/lib/entities.php: Minor tweaks to the getIcon code: * Default now
+ running on priority 1000 * Renamed default hook to a better name Marcus Povey
+
+2008-10-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php,
+ .../views/default/widgets/a_users_groups/view.php: Removed pagination for the
+ groups widget
+
+2008-10-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql, engine/schema/upgrades/2008100601.sql: Bugfixes
+ to river script
+
+ * engine/schema/mysql.sql: Added river key to main schema
+
+2008-10-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/messages/list.php: updated failsafe message divs
+ dimensions
+
+2008-10-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/upgrades/2008100601.php, engine/lib/upgrades/2008100701.php:
+ Changed the name. Refs #409
+
+ * engine/lib/database.php, engine/lib/upgrades/2008100601.php,
+ engine/lib/version.php, languages/en.php, version.php: Closes #409: PHP
+ update script to update core added
+
+ * mod/uservalidationbyemail/start.php: removed debug
+
+ * mod/groups/languages/th.php: Removing BOM
+
+ * mod/updateclient/languages/th.php: Thai language pack
+
+ * mod/river/languages/th.php: Thai language pack
+
+ * mod/reportedcontent/languages/th.php: Thai language pack
+
+ * mod/logbrowser/languages/th.php: Thai language pack
+
+ * mod/guidtool/languages/th.php: Thai language pack
+
+ * mod/groups/languages/th.php: Thai language pack
+
+ * mod/diagnostics/languages/th.php: Thai language pack
+
+ * languages/th.php: Closes #406: Thanks for your submission
+
+2008-10-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, mod/profile/start.php: Introduced a way to either
+ tether metadata access to entities, or to make them independent - in either
+ case, explicitly.
+
+2008-10-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php:
+
+ * engine/lib/river.php: Deleted old gumpf refs #402 and #407
+
+ * engine/lib/river.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008100601.sql,
+ .../default/river/ElggRelationship/create.php,
+ .../default/river/relationship/member/create.php,
+ .../default/river/ElggUser/profileiconupdate.php,
+ .../views/default/river/ElggUser/profileupdate.php,
+ .../river/user/default/profileiconupdate.php,
+ .../default/river/user/default/profileupdate.php,
+ views/default/river/ElggRelationship/create.php,
+ views/default/river/relationship/friend/create.php: Closes #402 and #407 :
+ Right! Finally nailed this fscking issue to the wall (hopefully). Modified
+ system log to hold extra information about the class being stored, this lets
+ us pull only the required rows from the event log. This drastically
+ simplifies and speeds up the query. Requires: Database upgrade. Outstanding
+ issues: Query is using filesort despite using correct index. Still much
+ faster than the last method!
+
+ * engine/lib/elgglib.php: Removed unnecessary debug
+
+2008-10-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/metadata.php,
+ views/default/search/entity_list.php: You can now remove pagination from a
+ list
+
+ * search/users.php: User browsing is revamped.
+
+ * engine/lib/users.php: List_user_friends_objects now lets you hide the
+ toggle to gallery view
+
+2008-10-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/index.php: Refs #402 and #407: Extra fields added to
+ system_log
+
+ * engine/lib/extender.php, engine/lib/relationships.php,
+ engine/lib/system_log.php, engine/schema/mysql.sql,
+ engine/schema/upgrades/2008100601.sql, version.php: Refs #402 and #407: Extra
+ fields added to system_log
+
+2008-10-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Minor fix for previous.
+
+ * engine/lib/elgglib.php: Introducing elgg_view_tree, for getting an array
+ of views
+
+ * engine/lib/elgglib.php, views/default/js/friendsPickerv1.php,
+ views/default/js/initialise_elgg.php, views/default/page_elements/header.php:
+ Elgg Javascript now goes through the views system
+
+ * engine/lib/access.php: A massive speed increase for access permissions. :)
+
+2008-10-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Closes #405: If -> else if. Nice spot.
+
+2008-10-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/comments/forms/edit.php: removed ratings hook from comments.
+ It will now go into plugins.
+
+2008-10-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php: updated messaging system with
+ 'click to dismiss' and moved it's position to not overlap the top toolbar
+
+2008-10-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Closes #399
+
+ * engine/lib/version.php: Fixes #401
+
+ * languages/en.php, mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/start.php: Refs #311: Modified message slightly
+
+ * actions/register.php, engine/lib/users.php, .../actions/email/confirm.php,
+ mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/start.php: Fixes #311, closes #345: Validation now
+ called via event 'user', 'validate'. Email validation now a plugin.
+
+2008-10-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/messages/errors/list.php,
+ views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/messages/list.php: updated messages system
+
+2008-10-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Removed old validation code
+
+ * languages/en.php: Refs #311 : Removing old email confirmation code.
+
+ * actions/email/confirm.php: Refs #311 : Removing old email confirmation
+ code.
+
+ * engine/lib/install.php: Fixing whitescreen on settings file creation
+
+ * mod/uservalidationbyemail/languages/en.php,
+ mod/uservalidationbyemail/manifest.xml, mod/uservalidationbyemail/start.php:
+ Refs #311: Saving stub prior to relocation...
+
+ * actions/systemsettings/install.php: Refs #311: Enable email validation
+ module by default
+
+ * engine/lib/users.php: Refs #311
+
+ * engine/lib/sessions.php: Refs #311
+
+ * actions/register.php: Refs #311
+
+ * actions/email/save.php: Refs #311
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php:
+ Closes #398
+
+ * engine/lib/install.php, engine/settings.example.php: Fixing installer
+ issue.
+
+2008-10-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Fitter, happier group links
+
+ * engine/lib/admin.php: Added an admin override for container permissions
+ checking.
+
+ * mod/groups/start.php: Improved group menu items.
+
+2008-10-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * crontab.example, engine/handlers/cron_handler.php, engine/lib/cron.php,
+ htaccess_dist, languages/en.php: Improved cron support
+
+ * engine/lib/metadata.php: Closes #379
+
+ * engine/lib/metadata.php: Closes #389
+
+ * engine/lib/database.php, engine/lib/install.php: Fixes #395
+
+2008-09-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Minor tweaks
+
+ * engine/lib/actions.php: Changed to plugin hook
+
+ * engine/lib/actions.php: Closes #390: Triggers an event 'action', $action
+ before action is included. This is rather kludgy and we need to rethink this
+ a bit.
+
+ * engine/lib/plugins.php: Actually, bad idea...
+
+ * engine/lib/plugins.php: Events now triggered on plugin enable/disable
+
+ * actions/friends/remove.php, engine/lib/configuration.php,
+ engine/lib/users.php: Closes #388: Additionally the site check in
+ configuration_init() should be instanceof. Nice spot, thanks.
+
+2008-09-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php: Messages/error notification system
+ updated with dismiss button, longer delay, and sticky/fixed position (at top
+ of viewport).
+
+2008-09-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/version.php: Install now works again
+
+2008-09-30 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/comments/forms/edit.php: ratings hook added to comments
+ block
+
+2008-09-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added IP address tools, todo check licence.
+
+ * engine/lib/notification.php, languages/en.php: Set the notification
+ settings
+
+ * engine/lib/notification.php, languages/en.php: Notifications get
+ notification stuff in API form.
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ languages/en.php, views/default/settings/system.php,
+ views/failsafe/settings/system.php: Closes #383 & #384
+
+ * engine/lib/notification.php: Closes #369: For entities which are not users
+ the ->email field is used, failing that it tries to work out an address from
+ ->url and lastly from $CONFIG->site_guid. Closes #382: Fix applied as
+ suggested.
+
+2008-09-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: get_input can now be properly overridden by
+ set_input. Fixes #324
+
+2008-09-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php:
+
+ * engine/lib/api.php:
+
+ * engine/lib/api.php: Debug
+
+ * engine/lib/api.php, engine/lib/sessions.php, services/api/rest.php:
+ Committing what I have at the end of the day, api still not 100%
+
+ * engine/lib/cache.php: Caching support fixed.
+
+ * engine/lib/api.php: Fixing auth_token code
+
+ * engine/lib/pam.php: Fixed issue with pam handler, now if required method
+ throws an exception the authentication short circuits with false.
+
+2008-09-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Clear annotations now clears annotations
+ properly when no name is specified. Fixes #357
+
+ * engine/lib/annotations.php: Count annotations now fails properly if a
+ metastring is not found. Fixes #377
+
+2008-09-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Make statisics nicer
+
+ * mod/apiadmin/languages/en.php: Make statisics nicer
+
+ * engine/lib/api.php: view now set by endpoint
+
+ * engine/lib/widgets.php: Closes #326: add_widget uses the specified
+ $user_guid as $widget->owner_guid
+
+2008-09-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php:
+
+ * languages/en.php: Closes #360: Will now install on 5.1.6 or greater with a
+ warning, 5.2 with now warning.
+
+ * engine/lib/install.php: Closes #360: Will now install on 5.1.6 or greater
+ with a warning, 5.2 with now warning.
+
+ * mod/updateclient/start.php: Modified pinger to use new style endpoint
+ format. Note, this will require ping.elgg.org to be upgraded come next
+ release!
+
+ * engine/lib/ping.php: Modified pinger to use new style endpoint format.
+ Note, this will require ping.elgg.org to be upgraded come next release!
+
+ * engine/lib/ping.php, mod/diagnostics/start.php,
+ mod/updateclient/start.php, views/default/admin/statistics_opt/basic.php:
+ Closes 374: Using get_version function instead of including the version file.
+
+ * engine/lib/api.php, languages/en.php: Minor improvements to failure mode.
+
+ * engine/lib/api.php: auth_token api call now functional
+
+ * services/api/rest.php: Addapted to be called from pagehandler
+
+ * engine/lib/api.php:
+
+2008-09-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Returning cache control back to access permissions.
+
+2008-09-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apiadmin/actions/generate.php, mod/apiadmin/actions/revokekey.php,
+ mod/apiadmin/views/default/object/api_key.php: Added action_gatekeeper() code
+
+ * engine/lib/api.php:
+
+ * engine/lib/api.php: Added endpoint page handler.
+
+ * mod/apiadmin/actions/generate.php, mod/apiadmin/actions/revokekey.php,
+ mod/apiadmin/index.php, mod/apiadmin/languages/en.php,
+ mod/apiadmin/manifest.xml, mod/apiadmin/start.php,
+ .../views/default/apiadmin/forms/add_key.php,
+ mod/apiadmin/views/default/object/api_key.php: Introducing API key
+ administration panel
+
+ * engine/lib/api.php: Create keypair code added
+
+ * engine/lib/api.php: Added create_api_user
+
+ * engine/lib/api.php: Added remove_api_user function
+
+ * engine/lib/api.php: Will now handle banned users
+
+2008-09-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/metadata.php: Metadata permissions now
+ work as advertised, but had to remove caching in the process. Will attempt to
+ re-enable it shortly.
+
+2008-09-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/user/settings/name.php: Closes #362: Nice spot. Cause was
+ an omission of the user being edited being passed. No security issues
+ introduced by having this user set, since editing user must still pass a
+ canEdit() in the action itself.
+
+2008-09-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, engine/lib/version.php,
+ engine/schema/upgrades/2008092301.sql, languages/en.php, version.php: The
+ database schema will now automatically update itself on upgrade.
+
+ * engine/lib/api.php, engine/start.php: The cache library is now loaded
+ before the main library boot.
+
+2008-09-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Belts and braces
+
+2008-09-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/upgrades/2008092301.sql: Database upgrade script from 1.0 to
+ latest schema.
+
+2008-09-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: API improvement. Authentication via token now logs
+ user in for that session.
+
+ * mod/profile/index.php: Closes #367: Widgets only displayed for found
+ profiles.
+
+2008-09-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Apparently non-p connections are better in many
+ cases, see http://www.slideshare.net/techdude/how-to-kill-mysql-performance
+
+ * languages/it.php: Closes #363
+
+2008-09-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/index.php, friends/of.php: Closes #358 and #359. Well spotted.
+
+ * languages/fr.php: Closes #356: Thanks for the contribution!
+
+2008-09-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: API explanations added to language file
+
+ * engine/lib/access.php: Access permissions now cached correctly.
+
+ * engine/lib/plugins.php: Optimised plugin query.
+
+ * engine/lib/metadata.php: Short circuit added for missing values.
+
+ * engine/lib/plugins.php: Removed old gunk
+
+ * engine/lib/api.php: Load cache php
+
+ * engine/lib/api.php: Changed caching to memory.
+
+ * engine/schema/mysql.sql: Added hmac cache of hmacs we have seen before
+ (MEMORY TABLE)
+
+ * engine/schema/mysql.sql: Added hmac cache of hmacs we have seen before
+ (MEMORY TABLE)
+
+ * engine/lib/api.php: Some api improvements: * User tokens setable * List
+ api no longer requires token
+
+ * engine/schema/mysql.sql: Changed users_apisessions to use memory, since
+ there is no reason to store this forever.
+
+ * languages/de.php: Added german core from Elgg development group
+
+ * engine/lib/system_log.php: System log now using delayed writes.
+
+2008-09-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Marcus Povey: * Some missing indexes added to
+ database. * Removed privileged path table since this is no longer used.
+
+ * engine/lib/elgglib.php: Removed privileged path code since this is no
+ longer used
+
+ * engine/lib/entities.php: Closes #346: More granularity on enable/disable.
+
+ * mod/reportedcontent/languages/it.php: Italian language patch
+
+ * mod/updateclient/languages/it.php: Italian language patch
+
+ * mod/river/languages/it.php: Italian language patch
+
+ * mod/logbrowser/languages/it.php: Italian language patch
+
+ * mod/guidtool/languages/it.php: Italian language patch
+
+ * mod/groups/languages/it.php: Italian language patch
+
+ * mod/diagnostics/languages/it.php: Italian language patch
+
+2008-09-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/userdetails.php: Basic XFN support
+
+2008-09-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php: Added missing translation
+
+2008-09-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: Closes #349: We need to improve
+ detect_extender_valuetype
+
+ * languages/it.php: Closes #348: Thanks for the patch!
+
+ * languages/it.php: Closes #339 : Italian alpha core language pack applied.
+ Thanks for the contribution!
+
+ * engine/lib/languages.php: Improved language completeness algorithm.
+
+2008-09-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/fr.php: Closes #342: Thanks for the updates!
+
+ * engine/lib/languages.php: Minor tweak: Only shows percentage on things
+ less than 100% complete
+
+ * engine/lib/languages.php: Some language helper tools.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Closes #338: You're
+ quite right, this is was an error on our part. Nice spot!
+
+ * engine/lib/languages.php, languages/en.php: Introducing: Admin only
+ translation "completeness" helper.
+
+2008-09-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/es.php: Preliminary spanish translation
+
+ * engine/lib/xml-rpc.php: Refs #172: Removed line endings on spec.
+
+ * mod/diagnostics/languages/fr.php, mod/groups/languages/fr.php,
+ mod/logbrowser/languages/fr.php, mod/reportedcontent/languages/fr.php,
+ mod/river/languages/fr.php, mod/updateclient/languages/fr.php: Closes #298:
+ Thankyou for your contribution!
+
+ * languages/fr.php: Closes #300: Thanks for the translation!
+
+ * languages/en.php, mod/groups/actions/forums/edittopic.php,
+ mod/groups/languages/en.php: Closes #320: Filled in missing translations
+
+2008-09-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/checkboxes.php, views/default/input/radio.php,
+ .../notifications/settings/usersettings.php: Fixes 334: Radio buttons were
+ part of the problem, label and option were the wrong way round (compare with
+ input/checkboxes). Second part of the problem was actually with
+ views/default/notifications/settings/usersettings.php, where the value of the
+ field was incorrectly being extracted from the settings array. Thanks for
+ the spot!
+
+2008-09-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ views/default/admin/plugins_opt/plugin.php: Closes #327: Thanks for the
+ pointer. In the end I modified the fix from the patch you sent, it still uses
+ get but the generated token should make a CSRF attack much harder.
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/resetpassword.php,
+ actions/admin/user/unban.php, .../views/default/profile/menu/adminlinks.php:
+ Fixes #332: Added tokens and action_gatekeeper()
+
+ * engine/lib/database.php: Fixes #330: I implemented the changes you
+ suggested (except for quotes around the table name). What problems did you
+ encounter?
+
+ * mod/reportedcontent/languages/en.php: Refs #331: Trying this again...
+
+ * mod/reportedcontent/languages/en.php,
+ views/default/page_elements/owner_block.php: Closes 331: Removed fixed string
+ in translation. Thanks for the spot!
+
+2008-09-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Set default db to UTF 8... for what it's worth.
+
+2008-09-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Closes #305
+
+ * actions/admin/site/update_basic.php: Fixes #244
+
+ * views/default/settings/system.php: Fixes the regression introduced by
+ [2023]
+
+ * engine/lib/actions.php, engine/lib/sessions.php: Additional per-session
+ random token, additional randomness protection against CSRF. Report problems.
+
+2008-08-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, engine/lib/sessions.php: Some session
+ fingerprinting code. Requires user agent to be consistent across requests.
+
+ * engine/lib/sessions.php: Regenerates session ID on user login. This helps
+ prevent some hijacking attacks.
+
+ * engine/lib/sessions.php: Minor tweak, logout now calls session_destroy()
+
+2008-08-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php, engine/start.php: Closes #313, Fixes #274:
+ Resolved strange OSX language file browsing, including speculative windows
+ fix. Thanks for the patch!
+
+2008-08-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/canvas/layouts/widgets.php,
+ views/default/navigation/toolbox.php,
+ views/default/navigation/topbar_tools.php: Closes #304: Thanks for the patch!
+
+ * languages/en.php: Fixes #275: Thanks for the report!
+
+ * engine/lib/statistics.php, languages/en.php,
+ views/default/admin/statistics_opt/basic.php: Minor tweak to basic stats to
+ clarify number of users in the system.
+
+2008-08-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, engine/lib/users.php, languages/en.php: Closes
+ #254: If mb_string is installed then internationalised usernames are
+ supported in file system. Because of this I have raised mbstring from
+ recommended to a (non-fatal) core requirement. Because of the lack of a
+ unicode ctype_alnum function the validation occurs at username input. Because
+ of this I have improved the user registration code: This code now validates
+ for special chars etc in the username. I have also introduced the following
+ new plugin hooks (which are run after primary validation) which provide
+ plugins with the ability to add other requirements (extra security etc).
+ 'registeruser:validate:password' 'registeruser:validate:username'
+ 'registeruser:validate:email' Marcus Povey 25/8/08
+
+2008-08-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php: Committing kses fix
+
+2008-08-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Fixed ping error. Fixes #269
+
+ * engine/lib/elgglib.php, engine/lib/input.php: Fixed input for people with
+ magic quotes on.
+
+2008-08-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Actually fixes #269
+
+ * actions/systemsettings/install.php: Fixes #269
+
+2008-08-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added plugin hook to elgg_view.
+
+2008-08-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Prelude to release
+
+ * engine/lib/elgglib.php: Fixes #280
+
+ * engine/lib/sessions.php: Blanking session code on initialisation fail
+
+2008-08-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/dashboard.php: Closes #253: Patch provided by
+ edfactor. Thanks for your contribution!
+
+2008-08-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/failsafe/pageshells/pageshell.php: install process password box
+ added
+
+ * views/failsafe/messages/errors/list.php,
+ views/failsafe/pageshells/pageshell.php: increased the size of the input
+ boxes on the install pages to faciliate url checking
+
+2008-08-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Making it case insensitive...
+
+2008-08-20 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/avatar_mini.gif: removed unused image
+
+2008-08-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/input.php, languages/en.php: Refs #273: Extra sanity checking on
+ install
+
+2008-08-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Language change
+
+ * languages/en.php, views/default/settings/system.php,
+ views/failsafe/settings/system.php: Installation clarity fixes
+
+2008-08-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Refs #272: Speculative fix. Added PORT support to
+ current_page_url(). Please test to see if this solves your problem...
+
+ * version.php: Oopsy, wrong package number
+
+ * version.php: Raising point number pre-package
+
+2008-08-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Revised rewrite rules.
+
+2008-08-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Refs #266: Error given if no database has been
+ set up.
+
+ * engine/lib/database.php, engine/lib/elgglib.php, engine/lib/install.php,
+ install.php, languages/en.php,
+ views/failsafe/messages/exceptions/exception.php: Refs #256: Basic
+ installation parameters checked. Fixes #266: If the install flag isn't set
+ then elgg_view will no longer attempt to load data from the database.
+
+ * engine/lib/elgglib.php: Refs #265: If $CONFIG->view not blank then it
+ overrides the session even if the session is set.
+
+ * engine/schema/mysql.sql: Fixes #260: Done. Nice spot.
+
+2008-08-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Small access fix
+
+ * CONTRIBUTORS.txt: And again.
+
+ * CONTRIBUTORS.txt: Minor contributor file fix.
+
+ * engine/lib/access.php: Corrected minor friend collection issue
+
+2008-08-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * CONTRIBUTORS.txt: changed bens twitter account url
+
+2008-08-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php: Moving the disable_entities call
+
+ * engine/lib/elgglib.php: More submenu corrections
+
+ * actions/admin/user/ban.php: Banning a user disables their entities
+
+ * engine/lib/entities.php, engine/lib/users.php: Removing a user disables
+ their entities
+
+2008-08-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Updated for release
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed the submenu
+
+2008-08-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/graphics/defaultmaster.jpg: default image for cropper tool
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php: The top tool menu is now
+ alphabetically sorted.
+
+ * engine/lib/elgglib.php: Submenu items are now sorted.
+
+ * mod/groups/start.php: Renamed groups submenus
+
+ * mod/groups/languages/en.php: Added a missing translation string to groups.
+
+ * mod/groups/start.php: Corrected the 'your groups' link
+
+2008-08-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/spotlight/default.php: spotlight tweaks
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/picker.php: Removed the context menu in the friends
+ picker.
+
+2008-08-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: force tinyMCE editor initial width for safari
+
+ * views/default/page_elements/footer.php: footer updated to fit more links
+
+ * _graphics/spotlight_back.gif, views/default/css.php: Opera fixes and new
+ spotlight back
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * dashboard/index.php, dashboard/latest.php, engine/lib/elgglib.php,
+ languages/en.php, views/default/dashboard/blurb.php: Wired in latest
+ activity, so new users aren't as lonely as they otherwise might be.
+
+2008-08-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ .../views/default/object/groupforumtopic.php: groups listing icon changed
+ from tiny to small latest discussion listing info block styled up
+
+2008-08-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/footer.php: footer tweak
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php: Ensuring that tags are saved correctly in
+ profile
+
+2008-08-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php, views/default/css.php: avatar
+ menu fixes for IE
+
+ * mod/groups/views/default/groups/css.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/javascript.php: avatar menu fix for IE
+ groups and profile pages
+
+2008-08-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * INSTALL.txt: Updated installation instructions
+
+2008-08-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/javascript.php: avatar menu in IE, z-index
+ bug work-around
+
+ * mod/profile/views/default/profile/javascript.php, views/default/css.php:
+ tools menu removed dynamic z-index
+
+2008-08-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/userdetails.php: Removed avatar context
+ menu from large profile picture
+
+ * mod/logbrowser/start.php, .../views/default/logbrowser/adminlinks.php,
+ mod/profile/start.php, .../views/default/profile/menu/adminlinks.php,
+ .../views/default/profile/menu/adminwrapper.php: Admin links are now
+ consolidated
+
+ * engine/lib/users.php: Removing gallery on search user list function
+
+2008-08-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: menu selected item ie6 fix
+
+2008-08-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/spotlight/default.php: a little content added to the
+ spotlight
+
+ * .../views/default/reportedcontent/listing.php: reported content tweak
+
+2008-08-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php, mod/profile/start.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/metatags.php: Individual profile items can
+ now have access restrictions; also made the profile JS more cache friendly
+
+2008-08-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/listing.php, views/default/css.php:
+ reported content updates
+
+ * views/default/css.php: tools settings updated
+
+2008-08-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: lang string missing
+
+2008-08-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: groups widget fixed for ie6
+
+2008-08-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/diagnostics/languages/en.php, mod/diagnostics/start.php: Globals and
+ PHP info added to diagnostics
+
+2008-08-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php: further tweaks on admin
+ settings
+
+ * views/default/admin/plugins_opt/plugin.php: plugin settings moved to
+ hidden dropdown
+
+2008-08-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Code also useless
+
+ * engine/lib/entities.php: Salt free diet
+
+2008-08-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php, views/default/css.php: avatar
+ menu fixed in admin area, admin area h3's fixed
+
+2008-08-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/owner_block_menu_dot.gif, views/default/css.php: owner block
+ menu
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Correction for the search list users by name
+ function.
+
+ * mod/reportedcontent/languages/en.php: A rookie error.
+
+2008-08-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/joinrequest.php:
+ Closes #234: Please use brackets defensively; The statement: if ($user =
+ get_entity($foo) && $group = get_entity($bar)) Will not do what you expect
+ it to do!
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, languages/en.php, search/users.php,
+ views/default/user/search/finishblurb.php: Added proper search for users by
+ name
+
+ * mod/groups/views/rss/forum/topics.php,
+ mod/groups/views/rss/forum/viewposts.php,
+ mod/groups/views/rss/groups/profileitems.php: RSS views for forums
+
+ * views/rss/group/default.php: Group default RSS view
+
+2008-08-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: sidebar arrow position fixed for ie 6 & 7
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, mod/profile/icon.php, mod/profile/javascript.php,
+ views/default/friends/picker.php, views/default/page_elements/header.php:
+ Caching enhancements
+
+2008-08-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: screwed up profile page on ie6 fixed
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php: Added a language entry for reported
+ items (again)
+
+2008-08-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/membership.php: gallery view removed from group lists
+
+ * mod/reportedcontent/index.php: reportedcontent bug sorted
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forms/groups/invite.php: Ensured that all friends
+ come through for group invite
+
+ * mod/groups/views/default/forms/groups/invite.php: Ensured that all friends
+ come through for group invite
+
+ * views/default/page_elements/owner_block.php: Owner block defaults to
+ current logged in user.
+
+ * engine/lib/input.php: Improved the kses whitelist
+
+2008-08-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install.php, views/failsafe/canvas/default.php,
+ views/failsafe/input/button.php, views/failsafe/input/checkboxes.php,
+ views/failsafe/input/form.php, views/failsafe/input/hidden.php,
+ views/failsafe/input/longtext.php, views/failsafe/input/pulldown.php,
+ views/failsafe/input/reset.php, views/failsafe/input/submit.php,
+ views/failsafe/input/text.php, views/failsafe/messages/messages/list.php,
+ views/failsafe/messages/messages/message.php,
+ views/failsafe/pageshells/pageshell.php, views/failsafe/settings/install.php,
+ views/failsafe/settings/system.php: Closes #224: Install now using failsafe
+ views. Please test from scratch (including blanking setup) and make sure it
+ works for you!
+
+2008-08-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/membership.php: groups view tweaked
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php, views/default/navigation/pagination.php,
+ views/default/widgets/wrapper.php: Removed pagination in widgets
+
+ * engine/lib/relationships.php: Added the ability to hide the gallery view
+ on list_entities_from_relationships
+
+ * languages/en.php: Language addition to make it clearer that you need to
+ validate before you can log in.
+
+2008-08-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: group lang bug fixed
+
+ * mod/reportedcontent/actions/add.php,
+ mod/reportedcontent/actions/archive.php,
+ mod/reportedcontent/actions/delete.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/start.php, .../views/default/reportedcontent/css.php,
+ .../views/default/reportedcontent/listing.php: reported content updated
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php: Added a language entry for reported
+ items
+
+2008-08-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: owner block head - divider
+ line method changed to work in ie6
+
+ * views/default/css.php: owner block fixes and blog post tweaks
+
+2008-08-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php, mod/profile/views/default/profile/listing.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/input/checkboxes.php, views/default/search/entity_list.php:
+ Refs #249
+
+2008-08-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, index.php: The front page now only shows content
+ and groups.
+
+2008-08-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/edit.php, views/default/page_elements/owner_block.php: Refs
+ #249
+
+2008-08-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/reportedcontent/languages/en.php,
+ .../views/default/reportedcontent/listing.php: reported content tweaks
+
+2008-08-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/userdetails.php, views/default/css.php: IE
+ 6 & 7 profile page avatar menu and submenu fixed, toolbar new msg icon
+ position,
+
+2008-08-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: owner block changes
+
+2008-08-14 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/reportedcontent/listing.php: reportedcontent list tweaks
+
+2008-08-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed an issue with the submenu.
+
+2008-08-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Fixes #245: Tags now stripped from email
+ messages.
+
+2008-08-14 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/diagnostics/index.php, mod/logbrowser/index.php,
+ mod/reportedcontent/index.php: more owner blocks added
+
+ * admin/plugins/index.php, admin/site/index.php, admin/statistics/index.php,
+ admin/user/index.php: owner block added to admin pages
+
+2008-08-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: collections, friends picker, status, search items
+ updated for IE6
+
+ * views/default/friends/picker.php, views/default/friends/tablelist.php:
+ friends picker table bug fixed and spacing adjusted on collections
+
+2008-08-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Redefined the default submenu item group to 'a',
+ so most usually it will appear on top
+
+ * mod/groups/start.php, views/default/canvas_header/submenu_group.php,
+ views/default/page_elements/owner_block.php: Further submenu clustering
+
+ * engine/lib/elgglib.php, views/default/canvas_header/submenu_group.php:
+ Added the facility to group submenus
+
+2008-08-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js, views/default/css.php: friends picker
+ modified for IE 6
+
+ * _graphics/friends_picker_arrow_left.gif,
+ _graphics/friends_picker_arrow_right.gif: new picker arrows
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/confirm.php, actions/register.php, engine/lib/entities.php,
+ engine/lib/users.php: Closes #227 and #243: Hopefully this has the fscking
+ thing nailed to the wall. Please report any problems, especially is they
+ relate to access permissions (granted when you shouldn't or denied when you
+ should)
+
+ * mod/diagnostics/languages/en.php, mod/diagnostics/start.php: Added session
+ to diagnostics.
+
+ * engine/lib/sessions.php: Fixing some session blanking problems.
+
+ * actions/email/confirm.php, actions/register.php, engine/lib/entities.php,
+ engine/lib/users.php: Reverted changes so users can now register again.
+ There are critical issues with enable/disable. Primarily: 1) A number of
+ functions do not use the access controls, these throw an exception when
+ accessing a disabled entity. 2) #243 does not seem possible.
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: owner block fixed for safari
+ and ie6
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, languages/en.php: Correct menus being used
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/members.php, views/default/css.php: numerous
+ polishing and rendering fixes to groups
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php:
+
+ * actions/admin/user/unban.php, engine/lib/admin.php,
+ engine/lib/entities.php, languages/en.php,
+ .../views/default/profile/menu/adminlinks.php: Refs #237: Added option, now
+ just needs a search listing banned users. Depends #243
+
+ * actions/email/confirm.php, actions/register.php, engine/lib/entities.php:
+ Closes #227. Depends on #243 to work.
+
+ * engine/lib/access.php: Refs #237, #46 and #227: Added override code.
+
+ * engine/lib/entities.php: Actually closes #46
+
+ * views/default/admin/plugins_opt/plugin.php: placeholder for settings
+ toggle
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: login and register boxes fixed
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: Now only displays 'report
+ this' when plugin is enabled.
+
+2008-08-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: Sturdier enhancement for the
+ owner block.
+
+ * index.php, languages/en.php, mod/pages/actions/pages/delete.php,
+ mod/pages/actions/pages/edit.php, mod/pages/actions/pages/editwelcome.php,
+ mod/pages/edit.php, mod/pages/history.php, mod/pages/images/application.png,
+ mod/pages/images/code.png, mod/pages/images/css.png, mod/pages/images/db.png,
+ mod/pages/images/directory.png, mod/pages/images/doc.png,
+ mod/pages/images/file.gif, mod/pages/images/file.png,
+ mod/pages/images/film.png, mod/pages/images/flash.png,
+ mod/pages/images/folder-closed.gif, mod/pages/images/folder.gif,
+ mod/pages/images/folder_open.png, mod/pages/images/html.png,
+ mod/pages/images/java.png, mod/pages/images/linux.png,
+ mod/pages/images/minus.gif, mod/pages/images/music.png,
+ mod/pages/images/pdf.png, mod/pages/images/php.png,
+ mod/pages/images/picture.png, mod/pages/images/plus.gif,
+ mod/pages/images/ppt.png, mod/pages/images/psd.png,
+ mod/pages/images/ruby.png, mod/pages/images/script.png,
+ mod/pages/images/spinner.gif, mod/pages/images/treeview-black-line.gif,
+ mod/pages/images/treeview-black.gif,
+ mod/pages/images/treeview-default-line.gif,
+ mod/pages/images/treeview-default.gif,
+ mod/pages/images/treeview-famfamfam-line.gif,
+ mod/pages/images/treeview-famfamfam.gif,
+ mod/pages/images/treeview-gray-line.gif, mod/pages/images/treeview-gray.gif,
+ mod/pages/images/treeview-red-line.gif, mod/pages/images/treeview-red.gif,
+ mod/pages/images/txt.png, mod/pages/images/xls.png, mod/pages/images/zip.png,
+ mod/pages/index.php, mod/pages/javascript/jquery.treeview.async.js,
+ mod/pages/javascript/jquery.treeview.js, mod/pages/languages/en.php,
+ mod/pages/manifest.xml, mod/pages/new.php, mod/pages/pagesTree.php,
+ mod/pages/start.php, mod/pages/view.php,
+ mod/pages/views/default/annotation/icon.php,
+ mod/pages/views/default/annotation/page.php,
+ mod/pages/views/default/forms/pages/edit.php,
+ .../views/default/forms/pages/editwelcome.php,
+ mod/pages/views/default/object/page.php,
+ mod/pages/views/default/object/page_top.php,
+ mod/pages/views/default/pages/breadcrumbs.php,
+ mod/pages/views/default/pages/css.php,
+ .../views/default/pages/groupprofile_pages.php,
+ mod/pages/views/default/pages/menu.php,
+ mod/pages/views/default/pages/metatags.php,
+ mod/pages/views/default/pages/pagegallery.php,
+ mod/pages/views/default/pages/pagelisting.php,
+ mod/pages/views/default/pages/pageprofile.php,
+ .../views/default/pages/sidebar/sidebarthis.php,
+ mod/pages/views/default/pages/sidebar/starter.php,
+ mod/pages/views/default/pages/sidebar/tree.php,
+ mod/pages/views/default/pages/sidebar/wrapper.php,
+ mod/pages/views/default/pages/welcome.php, mod/pages/welcome.php,
+ mod/pages/world.php: Added a new latest activity title to the front page
+
+ * views/default/page_elements/owner_block.php: The owner block now doesn't
+ display at all if there's no page owner
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php, views/default/css.php: front page
+ login box
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php: Banned now gives a reason why user disabled.
+
+ * engine/lib/entities.php: Added a reason for disabled objects.
+
+ * engine/lib/entities.php: Closes #46: Method for activating an entity. No
+ hookup yet.
+
+ * engine/lib/access.php: Refs #237, #46 and #227: Added active only override
+ to get_access_sql_suffix
+
+2008-08-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/add.php, mod/blog/actions/delete.php,
+ mod/blog/actions/edit.php, mod/blog/add.php, mod/blog/edit.php,
+ mod/blog/everyone.php, mod/blog/friends.php, mod/blog/index.php,
+ mod/blog/languages/en.php, mod/blog/manifest.xml, mod/blog/read.php,
+ mod/blog/start.php, mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/gallery.php,
+ mod/blog/views/default/blog/listing.php,
+ mod/blog/views/default/blog/menu.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/view.php, mod/blog/views/default/object/blog.php,
+ mod/blog/views/default/river/blog/annotate.php,
+ mod/blog/views/default/river/blog/create.php,
+ mod/blog/views/default/river/blog/update.php: This shouldn't be here!
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/delete.php, engine/lib/group.php,
+ engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php: Fixes
+ #241: Changed order, delete user using object's delete method rather than the
+ low level function
+
+2008-08-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: Removed page handler default errors
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: widget boxes fixed for IE
+
+2008-08-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Added a page handler for the dashboard
+
+2008-08-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/useradd.php, engine/lib/sessions.php: Fixes #238: Problem was
+ caused by authenticate not having the user email validated flag set.
+ Introduced new flag ->admin_created to distinguish between the two types.
+
+2008-08-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php: A warning fix for the dashboard
+ layout.
+
+ * views/default/input/button.php, views/default/input/form.php: Some safety
+ fixes for the new form views
+
+ * engine/lib/elgglib.php: Only log warnings in debug mode.
+
+ * mod/blog/actions/add.php, mod/blog/actions/delete.php,
+ mod/blog/actions/edit.php, mod/blog/add.php, mod/blog/edit.php,
+ mod/blog/everyone.php, mod/blog/friends.php, mod/blog/index.php,
+ mod/blog/languages/en.php, mod/blog/manifest.xml, mod/blog/read.php,
+ mod/blog/start.php, mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/gallery.php,
+ mod/blog/views/default/blog/listing.php,
+ mod/blog/views/default/blog/menu.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/view.php, mod/blog/views/default/object/blog.php,
+ mod/blog/views/default/river/blog/annotate.php,
+ mod/blog/views/default/river/blog/create.php,
+ mod/blog/views/default/river/blog/update.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ .../canvas/layouts/two_column_right_sidebar.php,
+ views/default/input/form.php: Removing some messages
+
+ * engine/lib/pagehandler.php: Removing an error log entry in the page
+ handler function
+
+ * engine/lib/elgglib.php: Fixed select class issue for submenus
+
+ * search/index.php: Reinstated search label.
+
+ * mod/logbrowser/start.php, mod/profile/start.php: Admin links on profile
+ pages and in user context menus appear at the bottom.
+
+ * mod/profile/views/default/profile/userdetails.php: The profile edit button
+ is now wired up so that admins can edit any user.
+
+ * engine/lib/access.php, engine/lib/admin.php: Admins now see all!
+
+2008-08-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: extra float clear for ie6
+
+ * _graphics/icon_gallery.gif: new gallery icon
+
+ * _graphics/blockquote.png, _graphics/dummy_river_icon.gif,
+ _graphics/footer_logo.gif: removed images not used
+
+ * _graphics/icon_bookmarkthis.gif, _graphics/icon_reportthis.gif,
+ views/default/css.php: owner block additional icons
+
+2008-08-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/reportedcontent/listing.php: small tweak to reported
+ content
+
+ * mod/reportedcontent/actions/add.php, mod/reportedcontent/add.php,
+ mod/reportedcontent/index.php, mod/reportedcontent/languages/en.php,
+ mod/reportedcontent/manifest.xml, mod/reportedcontent/start.php,
+ .../views/default/reportedcontent/form.php,
+ .../views/default/reportedcontent/listing.php,
+ .../views/default/reportedcontent/user_report.php: report content added as a
+ core plugin. Still needs a couple of bits wired up.
+
+ * views/default/page_elements/owner_block.php: owner block tweaked to add
+ report this
+
+2008-08-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Removed superadmin access controls. You can't call
+ get_entity from within get_access_sql_suffix and get_access_array as it
+ causes an infinite loop. The only safe way to do this is via a plugin hook.
+
+ * actions/systemsettings/install.php: Refs #232: Diagnostics now on by
+ default on new installs.
+
+ * mod/diagnostics/actions/download.php, mod/diagnostics/index.php,
+ mod/diagnostics/languages/en.php, mod/diagnostics/manifest.xml,
+ mod/diagnostics/start.php, .../views/default/diagnostics/forms/download.php:
+ Closes #232: Produces a basic report plus checksums of all files in md5sum
+ format. To add extra information to this report add a plugin hook listening
+ to: 'diagnostics:report' And append to $returnvalue which is a simple text
+ buffer.
+
+2008-08-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: sidebar menu additions
+
+ * _graphics/icons/default/large.png, _graphics/icons/default/medium.png,
+ _graphics/icons/default/small.png, _graphics/icons/default/tiny.png: new
+ default entity icons
+
+2008-08-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Further access additions for admins.
+
+ * engine/lib/access.php: Admins can now see private data.
+
+ * mod/groups/views/default/forms/groups/invite.php: Group invites now uses
+ the friends picker.
+
+2008-08-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/owner_block.php: bookmark this and report this
+ (still to be wired up) added to the owner block
+
+2008-08-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/register.php, actions/useradd.php, engine/lib/users.php: Closes
+ #229: Admin signup now using different view + no password validation for
+ admin signup
+
+ * actions/register.php, engine/lib/exceptions.php, engine/lib/users.php,
+ languages/en.php, views/default/account/forms/register.php: Refs #229 :
+ Register now has more granular messages, dupe email checkiong, sanitisation +
+ fill in the blanks failure mode! (yay)
+
+2008-08-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/members.php, views/default/css.php: groups
+ pages interface fixes/cleanup
+
+2008-08-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Improved front page.
+
+ * mod/groups/start.php: Groups now links to a better place when you're
+ logged out.
+
+2008-08-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Slight tweak to rewrite rules.
+
+ * actions/systemsettings/install.php: Forward not gatekeeper
+
+2008-08-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: pagination display tweaked
+
+2008-08-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/views/default/logbrowser/css.php, views/default/css.php:
+ settings and admin pages cleaned
+
+2008-08-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, index.php, views/default/welcome/logged_out.php:
+ Added latest content to the front page
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/form.php: Logic error
+
+ * actions/friends/deletecollection.php: Refs #228: Will now error if
+ collection can not be deleted
+
+2008-08-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php:
+
+ * javascript/initialise_elgg.js: toggle more info button for admin panel
+ added
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/form.php: Added ability to disable security
+ enhancements on form (for certain cases)
+
+2008-08-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, search/index.php: Clearer titles for search
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/forms/edit.php:
+
+ * actions/friends/addcollection.php, views/default/friends/forms/edit.php:
+ Refs #210 & #211: Friends form moved to action_gatekeeper code.
+
+2008-08-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: Improved search submenu items
+
+ * languages/en.php: A clearer registration message.
+
+ * engine/lib/notification.php: Downgraded UTF support in the email
+ notification function to optional
+
+2008-08-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins_opt/plugin.php: plugin admin layout tweaks
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, languages/en.php: Minor bugfix to
+ actions_gatekeeper()
+
+ * engine/schema/mysql.sql: Usernames now unique
+
+2008-08-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/settings/system.php: further admin layout tweak
+
+ * views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php: further admin layout tweaks
+
+ * .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php: user settings tweaks
+
+ * .../notifications/settings/usersettings.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php: user settings tweaked
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/comments/add.php, views/default/comments/forms/edit.php: Refs #210
+ & #211 : Updated comments form
+
+ * actions/widgets/save.php, views/default/widgets/editwrapper.php: Refs #210
+ & #211 : Widgets edit now using action_gatekeeper
+
+ * views/default/input/form.php: Minor modifications to form.
+
+2008-08-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/grouplisting.php,
+ mod/profile/views/default/profile/listing.php: Added class to user and group
+ details
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ actions/usersettings/save.php, views/default/settings/system.php,
+ views/default/usersettings/form.php: Refs #210 & #211 : Some more core
+ settings / admin pages moved to use admin_gatekeeper. Install script action
+ now also refuses to be run if the site has already been installed.
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ views/default/object/plugin.php: Refs #210 & #211 : Plugins settings
+ converted.
+
+2008-08-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/toolbar_messages_icon.gif, views/default/css.php,
+ views/default/welcome/logged_in.php, views/default/welcome/logged_out.php:
+ toolbar messages icon rollover state added. Logged in/out front page wrapped
+ in paragraph tags
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/basic_elements/login.php: Removed basic_elements/login ...
+ didn't seem to be used and is duped by main login.
+
+ * actions/register.php, actions/useradd.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php: Refs #210 & #211
+
+2008-08-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/users.php,
+ search/index.php: Added a search submenu.
+
+2008-08-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/user/requestnewpassword.php, languages/en.php:
+ Refs #210 & #211
+
+2008-08-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/widgets/a_users_groups/view.php: group profile widget
+ tweaked
+
+2008-08-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Closes #223
+
+2008-08-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: top toolbar elements fixed for ie
+
+ * views/default/css.php, views/default/navigation/pagination.php: pagination
+ overlap in ie fixed
+
+ * javascript/friendsPickerv1.js, views/default/css.php:
+
+ * views/default/css.php:
+
+2008-08-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php,
+ .../views/default/widgets/a_users_groups/edit.php,
+ .../views/default/widgets/a_users_groups/view.php: a simple widget that
+ displays a users groups on their profile
+
+ * mod/groups/views/default/groups/grouplisting.php: group listings now
+ include the brief description
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/users.php,
+ mod/groups/actions/forums/addtopic.php, mod/groups/addtopic.php,
+ mod/groups/topicposts.php: Major access fix.
+
+ * engine/lib/entities.php, engine/lib/group.php: Solved write issues in
+ groups for non-admin users.
+
+ * README.txt: Slight readme update.
+
+ * CONTRIBUTORS.txt, account/forgotten_password.php,
+ actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ actions/admin/site/update_basic.php, actions/admin/user/ban.php,
+ actions/admin/user/delete.php, actions/admin/user/makeadmin.php,
+ actions/admin/user/resetpassword.php, actions/email/save.php,
+ actions/entities/delete.php, actions/import/opendd.php,
+ .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/user/language.php, actions/user/name.php, actions/user/password.php,
+ actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ actions/useradd.php, admin/plugins/index.php, admin/site/index.php,
+ admin/statistics/index.php, admin/user/index.php,
+ engine/handlers/cron_handler.php, engine/handlers/xml-rpc_handler.php,
+ engine/lib/admin.php, engine/lib/annotations.php, engine/lib/api.php,
+ engine/lib/cache.php, engine/lib/entities.php, engine/lib/exceptions.php,
+ engine/lib/export.php, engine/lib/extender.php, engine/lib/filestore.php,
+ engine/lib/group.php, engine/lib/input.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, engine/lib/notification.php,
+ engine/lib/opendd.php, engine/lib/pam.php, engine/lib/ping.php,
+ engine/lib/plugins.php, engine/lib/query.php, engine/lib/relationships.php,
+ engine/lib/river.php, engine/lib/sites.php, engine/lib/statistics.php,
+ engine/lib/system_log.php, engine/lib/tags.php, engine/lib/usersettings.php,
+ engine/lib/xml-rpc.php, engine/lib/xml.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/edit.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/groups/all.php, mod/groups/discussions.php,
+ mod/groups/edit.php, mod/groups/graphics/icon.php,
+ mod/groups/groupprofile.php, mod/groups/index.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/membership.php, mod/groups/new.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/group/group.php,
+ mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/icon.php,
+ .../default/river/ElggRelationship/create.php,
+ mod/groups/views/default/sharing/invite.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php, mod/guidtool/export.php,
+ mod/guidtool/format_picker.php, mod/guidtool/import.php,
+ mod/guidtool/index.php, mod/guidtool/languages/en.php,
+ mod/guidtool/start.php, mod/guidtool/view.php,
+ .../views/default/forms/guidtool/export.php,
+ .../views/default/forms/guidtool/format.php,
+ .../views/default/forms/guidtool/import.php,
+ mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php,
+ mod/guidtool/views/default/guidtool/profile.php,
+ .../views/default/object/guidtoolwrapper.php, mod/logbrowser/index.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ mod/logbrowser/views/default/object/logwrapper.php,
+ mod/profile/actions/cropicon.php, mod/profile/actions/edit.php,
+ mod/profile/actions/iconupload.php, mod/profile/edit.php,
+ mod/profile/editicon.php, mod/profile/icon.php, mod/profile/index.php,
+ mod/profile/javascript.php, mod/profile/start.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/userdetails.php, mod/river/start.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/edit.php,
+ .../default/widgets/river_widget_friends/view.php,
+ mod/updateclient/languages/en.php, mod/updateclient/start.php,
+ .../views/default/settings/updateclient/edit.php, services/api/rest.php,
+ services/export/handler.php, settings/statistics/index.php,
+ settings/user/index.php, views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/useradd.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/admin/plugins.php,
+ views/default/admin/plugins_opt/plugin.php, views/default/admin/site.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php, views/default/api/output.php,
+ views/default/comments/forms/edit.php, views/default/export/entity.php,
+ views/default/export/metadata.php, views/default/export/relationship.php,
+ views/default/graphics/icon.php, views/default/group/default.php,
+ views/default/input/button.php, views/default/input/form.php,
+ views/default/input/hidden.php, views/default/input/reset.php,
+ views/default/input/submit.php, .../notifications/settings/usersettings.php,
+ views/default/object/default.php, views/default/object/object.php,
+ views/default/object/plugin.php, views/default/output/iframe.php,
+ views/default/river/ElggRelationship/create.php,
+ views/default/river/dashboard.php, views/default/site/default.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php,
+ views/failsafe/pageshells/pageshell.php, views/foaf/pageshells/pageshell.php,
+ views/json/api/output.php, views/json/canvas/default.php,
+ views/json/export/entity.php, views/json/export/metadata.php,
+ views/json/export/relationship.php, views/json/group/default.php,
+ views/json/messages/exceptions/exception.php, views/json/object/default.php,
+ views/json/pageshells/pageshell.php, views/json/search/entity_list.php,
+ views/json/site/default.php, views/json/user/default.php,
+ views/opendd/canvas/default.php, views/opendd/export/entity.php,
+ views/opendd/export/metadata.php, views/opendd/export/relationship.php,
+ views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/site/default.php, views/opendd/user/default.php,
+ views/php/api/output.php, views/php/canvas/default.php,
+ views/php/export/entity.php, views/php/export/metadata.php,
+ views/php/export/relationship.php, views/php/group/default.php,
+ views/php/messages/exceptions/exception.php, views/php/object/default.php,
+ views/php/pageshells/pageshell.php, views/php/search/entity_list.php,
+ views/php/site/default.php, views/php/user/default.php,
+ views/xml/api/output.php, views/xml/messages/exceptions/exception.php,
+ views/xml/pageshells/pageshell.php, views/xml/xml-rpc/output.php: Adjusted
+ contributors file.
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/forms/guidtool/export.php,
+ mod/profile/views/default/profile/icon.php,
+ views/default/canvas/layouts/widgets.php, views/default/input/button.php,
+ views/default/messages/exceptions/exception.php,
+ views/failsafe/messages/exceptions/exception.php: Remaining htmlentities
+ calls converted to utf-8
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * INSTALL.txt: Small formatting correction to the install file.
+
+ * CONTRIBUTORS.txt, INSTALL.txt, README.txt: Added content to stub files
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/confirm.php, engine/lib/notification.php,
+ engine/lib/users.php, languages/en.php: Closes #221: Body and subject now
+ internationalised.
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: The title no longer causes a WSOD
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/checkboxes.php, views/default/input/hidden.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Refs #206:
+ Hopefully the last of it. Please remember to use htmlentities($foo, null,
+ 'UTF-8'); whenever using htmlentities!
+
+2008-08-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php:
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/icon.php: Refs #206: A better solution
+
+ * mod/profile/views/default/profile/icon.php: Refs #206; Icons title now
+ displayed correctly
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/canvas/layouts/widgets.php: Added extra
+ translation strings to the widget canvas
+
+2008-08-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/navigation/pagination.php: pagination
+ "..." fixed
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/addtopic.php, mod/groups/discussions.php,
+ mod/groups/edittopic.php, mod/groups/topicposts.php: Removing some wsod
+ issues
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php, views/default/page_elements/header.php,
+ views/default/pageshells/pageshell.php: Refs #206: Character encoding on both
+ widget and main page now UTF-8
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Group forums should work
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, views/default/input/form.php: Closes #220: Removed
+ action from hash. Timestamp should make this unpredictable enough.
+
+ * views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php, views/default/input/access.php,
+ views/default/input/button.php, views/default/input/checkboxes.php,
+ views/default/input/email.php, views/default/input/file.php,
+ views/default/input/longtext.php, views/default/input/password.php,
+ views/default/input/pulldown.php, views/default/input/radio.php,
+ views/default/input/reset.php, views/default/input/submit.php,
+ views/default/input/tags.php, views/default/input/text.php,
+ views/default/input/url.php: Refs #211: Two forms converted + extra
+ functionality to input views
+
+ * engine/lib/dummy.php: Removed dummy
+
+2008-08-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/css.php: continuation of cleanup on groups
+
+2008-08-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Friendly titles no longer have more than one
+ hyphen in a row
+
+2008-08-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php,
+ mod/groups/views/default/groups/forum_latest.php: latest discussions widget
+
+2008-08-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: Put minor fix back
+
+2008-08-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: lang tweak on groups
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php, engine/lib/sessions.php: Removed ElggDummy live
+ code for now.
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/css.php: groups css added
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/statistics.php: Elgg.org -> elgg.com
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/members.php: Group forum additions
+
+ * mod/groups/languages/en.php: Small grammar correction
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/deletepost.php, mod/groups/start.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/groups/forum_latest.php: more group tweaks
+
+2008-08-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js: updated, cleaned-up, credited, and tweaked
+ friends picker
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/group.php, engine/lib/objects.php,
+ engine/lib/sites.php, engine/lib/users.php: Centralised set and get magic
+ functions to the tlc. Added isset and unset magic methods. Report any
+ problems!
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php: Slight change to group vocabulary.
+
+ * mod/groups/topicposts.php,
+ mod/groups/views/default/groups/groupprofile.php: Wired up group member count
+ and fixed topic page title
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/addpost.php: group tweak
+
+ * .../views/default/object/groupforumtopic.php: changed the latest
+ discussion view
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: removed print_r
+
+ * engine/lib/dummy.php, engine/lib/pageowner.php, engine/lib/sessions.php,
+ views/default/page_elements/title.php: Refs #174: Introducing the ElggDummy
+ class which returns false for all methods and set variables called on it.
+ This is what the logged out $_SESSION['user'] is set to and is also what
+ page_owner_entity will return if page_owner is invalid. This means that
+ calls to things like $_SESSION['user']->getGUID() are now safe and will no
+ longer cause a parsing error. Please report any issues.
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Adjusted list_entities_from_annotations to
+ hide the gallery view by default
+
+ * .../views/default/object/groupforumtopic.php: Minor language change to
+ group topics
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/discussions.php, mod/groups/languages/en.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ .../views/default/object/groupforumtopic.php: more group profile work
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/index.php, mod/groups/languages/en.php,
+ mod/groups/membership.php, mod/groups/start.php: Added a 'member of' groups
+ page and made it default
+
+ * engine/lib/access.php, mod/groups/start.php, mod/profile/start.php: Fixed
+ access permissions wrt groups
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php: new tools menu added -
+ latest discussion
+
+ * mod/groups/languages/en.php,
+ mod/groups/views/default/groups/forum_latest.php: forum latest for group
+ profile page
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Removed an extra sanitise_string call in
+ update_annotations
+
+2008-08-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/forums/addpost.php,
+ mod/groups/actions/forums/addtopic.php,
+ mod/groups/actions/forums/deletetopic.php,
+ mod/groups/actions/forums/edittopic.php, mod/groups/addtopic.php,
+ mod/groups/edittopic.php, mod/groups/forum.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/topicposts.php,
+ mod/groups/views/default/forms/forums/addpost.php,
+ mod/groups/views/default/forms/forums/addtopic.php,
+ .../views/default/forms/forums/edittopic.php,
+ mod/groups/views/default/forum/topicposts.php,
+ mod/groups/views/default/forum/topics.php,
+ mod/groups/views/default/forum/viewposts.php,
+ mod/groups/views/default/groups/forum_latest.php,
+ mod/groups/views/default/groups/profileitems.php: groups now have forums
+
+2008-08-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/toolbar_arrow_ie.gif, views/default/css.php,
+ views/default/navigation/topbar_tools.php: new dropdown toolbar menu that
+ works corss platform. Widget page layout fixed for ie6 & 7
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Refs #210: Will trigger a plugin hook
+ 'action_gatekeeper:permissions:check'.
+
+ * views/default/page_elements/title.php: Refs #174: Checking that session
+ user exists before calling methods on it
+
+ * install.php: Install site secret
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/languages/en.php, mod/logbrowser/start.php,
+ .../views/default/logbrowser/adminlinks.php: Added explore log option to user
+ context menu, albeit in the wrong place.
+
+ * languages/en.php, views/default/admin/statistics.php: Direct link from
+ statistics through to elgg.org
+
+ * languages/en.php: Adjusted statistics message
+
+ * languages/en.php, views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php: Updated admin statistics
+
+ * engine/lib/system_log.php: You can now filter by ID.
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/graphics/icon.php: Minor tweaks to the default icon
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/views/default/object/logwrapper.php: Easy drilldown into
+ logs
+
+ * engine/lib/system_log.php: System log functions now allow searching.
+
+ * mod/logbrowser/index.php, mod/logbrowser/languages/en.php,
+ mod/logbrowser/start.php, mod/logbrowser/views/default/logbrowser/css.php,
+ mod/logbrowser/views/default/logbrowser/form.php,
+ mod/logbrowser/views/default/object/logwrapper.php: The log browser is now
+ searchable.
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, languages/en.php: Closes #218
+
+2008-08-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/index.php, mod/logbrowser/start.php,
+ .../views/default/logbrowser/gallery.php,
+ .../views/default/logbrowser/listing.php,
+ mod/logbrowser/views/default/object/logwrapper.php: Initial changes to log
+ browser
+
+2008-08-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/form.php: Todo has been done
+
+2008-08-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: collections, pages nav and numerous other fixes
+
+ * views/default/css.php: breadcrumbs sorted
+
+ * mod/groups/views/default/groups/groupprofile.php, views/default/css.php:
+ groups styles and group owner layout changed
+
+2008-08-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: title block tweaked
+
+2008-08-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/owner_block_menu_arrow.gif, views/default/css.php: owner block
+ menu 'selected' style added
+
+2008-08-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/profileitems.php: group profile layout
+ tweaked
+
+2008-08-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Edited container-related permissions.
+
+2008-08-06 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/profileitems.php: group profile tweak
+
+ * mod/groups/groupprofile.php: group profile tweak
+
+ * mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/members.php,
+ mod/groups/views/default/groups/profileitems.php: group profile layout
+ tweaked
+
+2008-08-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/opendd.php, .../views/default/forms/guidtool/import.php:
+ Example of usage (Refs #210), also refs #211.
+
+ * views/default/messages/exceptions/exception.php: Tidied up exception
+
+ * engine/lib/actions.php, languages/en.php, views/default/input/button.php,
+ views/default/input/form.php: Refs #210 and #211
+
+2008-08-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/page_elements/footer.php: footer
+ links update, changes to gallery view
+
+2008-08-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/button.php: Images and security fixes
+
+ * views/default/input/button.php, views/default/input/reset.php,
+ views/default/input/submit.php: Closes #212
+
+2008-08-06 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/navigation/topbar_tools.php: tool menu
+ slide effect removed, language file changed for dashboatrd instructions
+
+2008-08-06 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/hidden.php: Closes #209
+
+ * views/default/input/form.php: Closes #208
+
+ * account/forgotten_password.php: Fixes #207: Thanks for your report eike!
+
+2008-08-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: river additions
+
+ * views/default/css.php: toolbar fixes and register box positioning fixed
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/sessions.php: Tweaked the way
+ forwarding works.
+
+ * engine/lib/access.php, engine/lib/group.php, mod/groups/start.php: Fixed
+ group-specific access controls, and site-specific access controls
+
+2008-08-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/river_icons/river_icon_bookmarks.gif,
+ _graphics/river_icons/river_icon_shares.gif,
+ _graphics/river_icons/river_icon_status.gif,
+ _graphics/toolbar_messages_icon.gif, views/default/css.php: numerous fixes to
+ messageboard, status, river icons,
+
+2008-08-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Log though will now not store a url relating to an
+ action... it is now possible to log in again if you are logged out! :D
+
+ * engine/lib/river.php, engine/lib/system_log.php: Fixes #121 and #143.
+ Please confirm.
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/logbrowser/index.php, mod/logbrowser/start.php: The log browser is now
+ a part of the admin panel.
+
+ * engine/lib/widgets.php: Fixed an issue where the third widget column drops
+ widgets.
+
+ * views/default/canvas/layouts/widgets.php: Widget layout update
+
+2008-08-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php: Fixes #204
+
+ * actions/login.php, engine/lib/elgglib.php: Closes #196: Stores last
+ forwarded page in session, this is used by logon to forward page to correct
+ location. Also fixed current_page_url() which was introducing a superfluous
+ "/" before $_SERVER['REQUEST_URI']
+
+2008-08-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/toolbar_messages_icon.gif, views/default/css.php,
+ views/default/page_elements/elgg_topbar.php: topbar with message count and
+ icon
+
+2008-08-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php: largest avatar size changed from 600
+ to 550
+
+ * mod/profile/editicon.php: icon crop area layout tweaked
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Tagging issue on unsaved entities: solved.
+
+2008-08-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Speculative fix for metadata issue.
+
+ * engine/lib/entities.php: Actually fixes #202
+
+ * engine/lib/elgglib.php, engine/lib/entities.php: Fixes #202 : Listen to
+ plugin hook 'entity:icon:url', which passes parameters: 'entity' The entity
+ 'viewtype' The view (eg 'default') 'size' The size (eg, large, tiny etc) You
+ should return a url for the object's icon if you can.. otherwise return
+ nothing at all.
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Fixed accidental group link error
+
+ * views/default/account/forms/login.php: Removed an annoying notify error
+
+2008-08-05 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidtool/views/default/guidtool/listing.php: Using correct entity for
+ icon.
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install.php: The install script uses the one column layout
+
+2008-08-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/groupprofile.php: more group profile
+ layout tweaks
+
+ * mod/groups/views/default/groups/groupprofile.php: group profile tweaked
+
+2008-08-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php:
+
+2008-08-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/edit.php, mod/groups/index.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/groups/grouplinks.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/menu/actions.php,
+ .../views/default/groups/menu/adminlinks.php,
+ mod/groups/views/default/groups/menu/links.php,
+ .../views/default/groups/menu/ownerlinks.php: Moved group links to the
+ sidebar
+
+2008-08-05 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/powered_by_elgg_badge_drk_bckgnd.gif,
+ _graphics/powered_by_elgg_badge_light_bckgnd.gif,
+ views/default/page_elements/footer.php: powered by badge in footer
+
+2008-08-05 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php, mod/groups/views/default/groups/items.php,
+ mod/groups/views/default/groups/profileitems.php: group profile view tweaked
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/index.php, admin/plugins/index.php, admin/site/index.php,
+ admin/statistics/index.php, admin/user/index.php, engine/lib/admin.php,
+ engine/lib/entities.php, views/default/account/forms/useradd.php,
+ views/default/admin/user_opt/adduser.php,
+ views/default/admin/user_opt/search.php: Further changes to the admin panel
+
+2008-08-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/views/default/groups/items.php: groups profile page layout
+ tweak
+
+ * mod/groups/edit.php, mod/groups/groupprofile.php,
+ mod/groups/languages/en.php, mod/groups/views/default/groups/items.php,
+ mod/groups/views/default/groups/members.php: new group profile views
+
+2008-08-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php: Minor improvement to guid
+ tool
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * settings/index.php, settings/statistics/index.php,
+ settings/user/index.php, .../notifications/settings/usersettings.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php: User changes to settings
+
+ * engine/lib/users.php, engine/lib/usersettings.php, languages/en.php,
+ mod/profile/languages/en.php, mod/profile/start.php, settings/index.php,
+ settings/plugins/index.php, settings/statistics/index.php,
+ settings/user/index.php, .../notifications/settings/usersettings.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php,
+ views/default/usersettings/statistics.php,
+ .../usersettings/statistics_opt/numentities.php,
+ .../default/usersettings/statistics_opt/online.php: User settings
+
+2008-08-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/xml-rpc.php: Error message bugfix
+
+ * mod/guidtool/index.php, mod/guidtool/languages/en.php,
+ mod/guidtool/start.php: Adapted to use new menus.
+
+ * services/export/handler.php: Handler output made a little more pretty.
+
+ * mod/guidtool/export.php, mod/guidtool/format_picker.php,
+ mod/guidtool/import.php, mod/guidtool/index.php, mod/guidtool/view.php,
+ mod/logbrowser/index.php: Using the new view
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed the container_guid override.
+
+2008-08-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/navigation/topbar_tools.php,
+ views/default/page_elements/footer.php: updates to toolbar menu fixes, error
+ messages, owner block
+
+2008-08-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/entities/delete.php, languages/en.php,
+ views/default/group/default.php, views/default/object/default.php,
+ views/default/site/default.php: Fixes #199
+
+ * engine/lib/xml-rpc.php: XML-RPC helper functions suggested by Misja
+
+2008-08-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: search layout tweaked
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/metadata.php, search/index.php,
+ views/default/search/entity_list.php: Hidden viewtype toggle on search.
+
+ * views/default/page_elements/owner_block.php: Added owner_block/extend to
+ the owner block
+
+2008-08-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * LICENCE.txt: Refs #197: Added placeholders & gpl 2 licence.
+
+ * engine/lib/sessions.php, engine/lib/users.php, engine/schema/mysql.sql:
+ Closes #193: Added salt field to database and new users will be generated
+ with salted passwords. Existing users remain unchanged and should still be
+ able to log in. Requires a schema change and the following code run against
+ the database: alter table elggusers_entity add column salt varchar(8)
+ NOT NULL default '' after password;
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../canvas/layouts/narrow_right_sidebar.php,
+ views/default/canvas/layouts/two_column.php: Removed old, no-longer-necessary
+ canvas areas.
+
+2008-08-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * account/forgotten_password.php, account/register.php,
+ actions/systemsettings/install.php, languages/en.php,
+ views/default/account/forms/forgotten_password.php,
+ views/default/account/forms/login.php: Closes #195 & #191
+
+2008-08-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Altered pagination so that it
+ does display if we already have an offset.
+
+2008-08-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/edit.php: profile edit layout altered
+
+ * views/default/page_elements/title.php: tweaked the old title block - we no
+ longer need the user avatar now we have the owner block.
+
+ * mod/groups/all.php, mod/groups/groupprofile.php, mod/groups/index.php,
+ mod/groups/invite.php, mod/groups/languages/en.php, mod/groups/new.php,
+ mod/groups/start.php: some work on groups to make them work with the new
+ layout
+
+ * mod/profile/languages/en.php, mod/profile/start.php,
+ views/default/page_elements/owner_block.php: brief description added to the
+ owner block and profile
+
+ * views/default/navigation/pagination.php: pagination now only displays if
+ there is content to paginate through
+
+2008-08-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: minor interface fixes
+
+2008-08-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/annotation/default.php: Default annotation RSS view.
+
+2008-08-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/icon_odd.gif, _graphics/icon_rss.gif,
+ _graphics/owner_block_back.jpg,
+ mod/profile/views/default/profile/userdetails.php, views/default/css.php:
+ more interface fixes and improvements. Icons and background added to owner
+ block
+
+2008-08-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/canvas/default.php, views/foaf/friends/list.php,
+ views/foaf/search/entity_list.php, views/foaf/user/default.php: Fixed FOAF
+ view
+
+ * friends/index.php, friends/of.php,
+ mod/profile/views/default/user/default.php, views/default/user/default.php,
+ views/rss/user/default.php: Fixed RSS and OpenDD feeds for users
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/json/canvas/default.php, views/json/group/default.php,
+ views/json/object/default.php, views/json/search/entity_list.php,
+ views/json/site/default.php, views/json/user/default.php,
+ views/php/canvas/default.php, views/php/group/default.php,
+ views/php/object/default.php, views/php/search/entity_list.php,
+ views/php/site/default.php, views/php/user/default.php: PHP and JSON entity
+ list views... which should work.
+
+2008-08-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixed erroneous friends link issue
+
+ * views/default/page_elements/header.php,
+ views/default/page_elements/owner_block.php,
+ views/opendd/search/entity_list.php: Fixed OpenDD feeds
+
+ * languages/en.php, views/default/page_elements/owner_block.php: RSS and
+ OpenDD feeds autolink in owner block
+
+ * actions/user/spotlight.php, engine/lib/users.php,
+ views/default/page_elements/spotlight.php: Spotlight state persists.
+
+2008-08-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: friends picker modified, minor fixes and css
+ cleanup / re-sort
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/user/passwordreset.php, actions/user/requestnewpassword.php,
+ engine/lib/users.php, languages/en.php: Refs #191: Actions for resetting
+ passwords, but no front end as yet. To request a password reset access
+ http://..../actions/user/requestnewpassword/?username=username
+
+2008-08-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php, views/default/css.php: river
+ updated, widget layout fixed, page block tweaked,
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php: GUIDTool now displays some
+ generic information about entities where available.
+
+2008-08-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/reorder.php, engine/lib/widgets.php, entities/index.php,
+ views/default/canvas/layouts/widgets.php: Widgets now work in three columns
+
+ * engine/lib/elgglib.php: Introducing the new pagesetup event.
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Message changes, refs #190
+
+ * mod/guidtool/start.php: Guidtool only available to admins
+
+ * engine/lib/entities.php, engine/lib/users.php: Changed so that
+ validated_email flag written as null user. Refs #190. Also confirms fix and
+ closes #104.
+
+2008-08-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/metadata.php: The metadata permissions
+ check now passes along (optionally) the specific piece of metadata. Refs #104
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Closes #190. Note however that logins will be
+ broken until #104 has been resolved!
+
+ * actions/import/opendd.php, engine/lib/input.php: Fixes #194
+
+ * actions/import/opendd.php: Refs #194
+
+2008-08-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, entities/index.php,
+ .../canvas/layouts/two_column_left_sidebar.php,
+ views/default/page_elements/owner_block.php: Introducing the consistent owner
+ block
+
+2008-08-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Fixed what I presume was an error: namely it was
+ using $site instead of $guid in get_entity
+
+2008-07-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php: delete collection action - div
+ prevented from showing
+
+2008-07-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/deletecollection.php, languages/en.php: Collections now
+ delete successfully
+
+2008-07-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collections.php: temporarily allow h2 click to
+ propagate through to delete button
+
+2008-07-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/opendd.php: Bugfix
+
+2008-07-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/pickercallback.php, views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/tablelist.php,
+ views/default/friends/tablelistcountupdate.php: Counts now update when you
+ save a friends collection
+
+ * engine/lib/access.php, views/default/friends/picker.php: More updates for
+ collections - save now works properly.
+
+ * actions/friends/editcollection.php: Removing the reference to the
+ collection name for now
+
+ * actions/friends/editcollection.php, engine/lib/access.php,
+ friends/pickercallback.php, languages/en.php,
+ views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php,
+ views/default/friends/forms/collectionfields.php,
+ views/default/friends/forms/edit.php, views/default/friends/picker.php:
+ Picker saves correctly!
+
+2008-07-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/iframe.php: Added iframe output
+
+ * mod/guidtool/export.php, mod/guidtool/format_picker.php,
+ mod/guidtool/import.php, mod/guidtool/index.php,
+ mod/guidtool/languages/en.php, mod/guidtool/start.php, mod/guidtool/view.php,
+ .../views/default/forms/guidtool/export.php,
+ .../views/default/forms/guidtool/format.php,
+ mod/guidtool/views/default/guidtool/gallery.php,
+ mod/guidtool/views/default/guidtool/listing.php,
+ mod/guidtool/views/default/guidtool/profile.php,
+ .../views/default/object/guidtoolwrapper.php: Guid tool for import, export
+ and browsing.
+
+ * views/default/graphics/icon.php: Refs #151: graphics/icon view
+
+2008-07-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/footer_logo.gif, views/default/canvas/layouts/widgets.php,
+ views/default/css.php, views/default/navigation/pagination.php,
+ views/default/page_elements/footer.php: footer logo added, widget gallery
+ instructions changed, pagination block styles added to all pagination
+
+2008-07-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/addcollection.php, actions/friends/deletecollection.php,
+ actions/friends/editcollection.php, engine/lib/users.php, friends/add.php,
+ friends/collections.php, friends/edit.php, languages/en.php,
+ views/default/friends/forms/edit.php: Friends collections are now fully part
+ of the main core
+
+2008-07-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/icons/default/large.png, _graphics/icons/default/medium.png,
+ _graphics/icons/default/small.png, _graphics/icons/default/tiny.png,
+ engine/lib/elgglib.php, engine/lib/entities.php: Closes #151: Introducing
+ getIcon($size)
+
+ * mod/logbrowser/graphics/defaultlarge.jpg,
+ mod/logbrowser/graphics/defaultmedium.jpg,
+ mod/logbrowser/graphics/defaultsmall.jpg,
+ mod/logbrowser/graphics/defaulttiny.jpg,
+ .../views/default/logbrowser/gallery.php,
+ mod/logbrowser/views/default/logbrowser/icon.php,
+ .../views/default/logbrowser/listing.php: Logbrowser now using getIcon for
+ graphics
+
+ * mod/logbrowser/index.php: Title added
+
+ * engine/lib/elgglib.php: Introducing elgg_get_view_location()
+
+2008-07-31 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/toolbar_arrow.png, views/default/css.php: arrow icon added to
+ dropdown menu
+
+ * views/default/css.php, views/default/friends/picker.php: save and cancel
+ buttons added to collections
+
+2008-07-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/pickercallback.php, javascript/friendsPickerv1.js,
+ views/default/friends/collection.php, views/default/friends/collections.php,
+ views/default/friends/collectiontabs.php, views/default/friends/picker.php:
+ Hurrah! Made the friendspickers work
+
+2008-07-31 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidtool/import.php, mod/guidtool/index.php,
+ mod/guidtool/languages/en.php, mod/guidtool/manifest.xml,
+ mod/guidtool/start.php, .../views/default/forms/guidtool/import.php: Added
+ guidtool and switching to desktop.
+
+2008-07-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php: Friends picker tab initialisation
+ updates
+
+2008-07-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/picker.php, views/default/friends/tablelist.php:
+ small change to collection members display - as a table
+
+ * javascript/friendsPickerv1.js, views/default/friends/collectiontabs.php:
+ minor fixes from earlier today - re-instating the a-z slider, and correctly
+ switching the picker tabs
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php: Removing the members from the
+ collections content
+
+ * views/default/friends/picker.php: Picker works better on ajax load.
+
+ * views/default/friends/collectiontabs.php: Added specific numbering to tab
+ classes for the picker
+
+ * views/default/friends/picker.php: Removing js on picker load
+
+ * views/default/friends/collection.php, views/default/friends/picker.php:
+ Collections open blank (for now)
+
+ * views/default/friends/collectiontabs.php: Committing in loads
+
+2008-07-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collectiontabs.php: pete's collectiontabs code
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/odd.php, actions/import/opendd.php, engine/lib/export.php,
+ services/export/handler.php, views/odd/canvas/default.php,
+ views/odd/export/entity.php, views/odd/export/metadata.php,
+ views/odd/export/relationship.php, views/odd/group/default.php,
+ views/odd/messages/exceptions/exception.php, views/odd/object/default.php,
+ views/odd/pageshells/pageshell.php, views/odd/site/default.php,
+ views/odd/user/default.php, views/opendd/canvas/default.php,
+ views/opendd/export/entity.php, views/opendd/export/metadata.php,
+ views/opendd/export/relationship.php, views/opendd/group/default.php,
+ views/opendd/messages/exceptions/exception.php,
+ views/opendd/object/default.php, views/opendd/pageshells/pageshell.php,
+ views/opendd/site/default.php, views/opendd/user/default.php: Closes #189:
+ ODD -> OpenDD
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php, views/default/friends/picker.php:
+ AJAX improvements to picker
+
+ * engine/lib/elgglib.php, views/default/navigation/pagination.php: Lists of
+ comments etc no longer display "none found" if there aren't any.
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/odd.php: Forward to referer
+
+ * services/export/handler.php:
+
+ * actions/import/odd.php: Admin gatekeeper
+
+2008-07-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_toolbar_logout.gif, _graphics/elgg_toolbar_logout_over.gif,
+ _graphics/icon_customise_remove.png, views/default/css.php,
+ views/default/friends/collection.php: toolbar logout icon changed to work as
+ a single image resource (for caching purposes), delete icon on collections
+ changed to work as a single image rollover
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/export/entity.php: Minor improvements to
+ default entity view.
+
+ * views/default/export/metadata.php, views/default/export/relationship.php:
+ Improved views
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/pickercallback.php, views/default/friends/picker.php,
+ views/default/friends/tablelist.php: Added friends picker callback
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php, engine/lib/relationships.php: Refs #186: Get URL
+ for relationships
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php,
+ views/default/friends/collectiontabs.php, views/default/friends/picker.php:
+ Moved collection tabs out of the main picker view
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: Refs #186
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php: Introducing url handlers for extenders.
+
+ * engine/lib/export.php: Changed export uuid, refs #186
+
+ * htaccess_dist: Changed export rewrite rules.
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/collection.php, views/default/friends/picker.php,
+ views/default/friends/tablelist.php: Added friends collections members list
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Using guid_to_uuid
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/tablelist.php: Added the tablelist view
+
+2008-07-30 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js, views/default/css.php,
+ views/default/friends/collection.php, views/default/friends/picker.php: the
+ beginnings of the tabbed friends picker
+
+2008-07-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php: Extender getURL() support (no overide as of yet)
+
+ * mod/opendd/actions/opendd/feed/delete.php,
+ mod/opendd/actions/opendd/feed/subscribe.php, mod/opendd/edit.php,
+ mod/opendd/feeds.php, mod/opendd/graphics/defaultlarge.jpg,
+ mod/opendd/graphics/defaultmedium.jpg, mod/opendd/graphics/defaultsmall.jpg,
+ mod/opendd/graphics/defaulttiny.jpg, mod/opendd/index.php,
+ mod/opendd/languages/en.php, mod/opendd/manage.php, mod/opendd/manifest.xml,
+ mod/opendd/start.php, mod/opendd/viewfeed.php,
+ .../views/default/forms/opendd/subscribe.php,
+ mod/opendd/views/default/object/oddentity.php,
+ mod/opendd/views/default/object/oddfeed.php,
+ mod/opendd/views/default/object/oddmetadata.php,
+ .../views/default/object/oddrelationship.php,
+ mod/opendd/views/default/opendd/css.php,
+ mod/opendd/views/default/opendd/gallery.php,
+ mod/opendd/views/default/opendd/icon.php,
+ mod/opendd/views/default/opendd/link_logo.php,
+ mod/opendd/views/default/opendd/links.php,
+ mod/opendd/views/default/opendd/listing.php,
+ mod/opendd/views/default/opendd/metatags.php,
+ mod/opendd/views/default/opendd/profile.php,
+ mod/opendd/views/default/output/uuid.php,
+ .../widgets/opendd_friends_elsewhere/edit.php,
+ .../widgets/opendd_friends_elsewhere/view.php, mod/opendd/viewuuid.php: Moved
+ OpenDD out of the central repo.
+
+ * mod/logbrowser/index.php: Logbrowser using admin gatekeeper.
+
+2008-07-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/widgets.php: Widget state cookie is now removed on widget
+ delete.
+
+2008-07-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js, views/default/canvas/layouts/widgets.php,
+ views/default/widgets/wrapper.php: individual widgets state now saved in
+ cookies
+
+2008-07-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Default view added to export, for completeness
+
+ * engine/lib/system_log.php:
+
+ * views/odd/group/default.php, views/odd/site/default.php: OpenDD default
+ views on entities
+
+ * views/default/export/entity.php: Improvements to export view
+
+ * views/default/object/default.php, views/default/site/default.php: Added
+ some default views.
+
+ * .../views/default/logbrowser/gallery.php: And in gallery view
+
+ * .../views/default/logbrowser/listing.php: Handle anonymous events.
+
+ * actions/systemsettings/install.php,
+ mod/logbrowser/graphics/defaultlarge.jpg,
+ mod/logbrowser/graphics/defaultmedium.jpg,
+ mod/logbrowser/graphics/defaultsmall.jpg,
+ mod/logbrowser/graphics/defaulttiny.jpg, mod/logbrowser/index.php,
+ mod/logbrowser/languages/en.php, mod/logbrowser/manifest.xml,
+ mod/logbrowser/start.php, .../views/default/logbrowser/gallery.php,
+ mod/logbrowser/views/default/logbrowser/icon.php,
+ .../views/default/logbrowser/listing.php,
+ mod/logbrowser/views/default/object/logwrapper.php: Added basic log browser.
+ updateclient & logbrowser are switched on by default in new installs.
+
+ * engine/lib/system_log.php: Fixed count
+
+ * engine/lib/system_log.php: Typo
+
+ * engine/lib/system_log.php: Added some useful helper functions.
+
+ * engine/lib/system_log.php: Count support added
+
+2008-07-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php, views/default/css.php: final
+ changes to widgets - all ready to wire up now
+
+2008-07-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/opendd/start.php: Typo
+
+ * actions/register.php, languages/en.php,
+ views/default/account/forms/login.php: Registration disabled option (no admin
+ screen yet), closes #184
+
+2008-07-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * dashboard/index.php: dashboard widget tweak
+
+ * views/default/canvas/layouts/widgets.php: tweak to the profile widget
+ picker
+
+2008-07-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/updateclient/languages/en.php, mod/updateclient/start.php,
+ .../views/default/settings/updateclient/edit.php: Update client gets updates
+
+ * engine/lib/admin.php: Admin notify method added, view 'admin_message' for
+ this.
+
+2008-07-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/canvas/layouts/widgets.php: widget layout
+ help context sensitive.
+
+2008-07-29 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php: Only on install
+
+ * mod/updateclient/languages/en.php, mod/updateclient/start.php: Update
+ client
+
+2008-07-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/updateclient/languages/en.php,
+ .../views/default/settings/updateclient/edit.php: Added configuration to
+ client.
+
+ * views/default/admin/plugins_opt/plugin.php: Minor look and feel tweaks
+
+ * mod/updateclient/index.php, mod/updateclient/languages/en.php,
+ mod/updateclient/manifest.xml, mod/updateclient/start.php,
+ .../views/default/settings/updateclient/edit.php: Adding updateclient
+ (non-functional) and now switching back to base station.
+
+2008-07-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php: new start page layout/style
+
+ * views/default/css.php: fixes to toolbar and owner box ie 6 issues
+
+ * views/default/css.php: top toolbar styled up, and owner block items
+
+ * _graphics/tools_over.png, javascript/initialise_elgg.js, languages/en.php,
+ views/default/canvas/layouts/widgets.php, views/default/css.php,
+ views/default/navigation/topbar_tools.php: new 3 column widget gallery (needs
+ wiring up), profile page profile box alignment sorted, topbar menu tweaked
+ and image added,
+
+2008-07-28 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/start.php: Fixes #182
+
+2008-07-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php,
+ views/default/canvas/layouts/widgets.php, views/default/css.php: profile and
+ dashboard pages altered for 3 widget columns
+
+2008-07-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/footer.php: fixed a small footer error
+
+ * views/default/page_elements/footer.php: wired up the footer menu links
+
+ * views/default/pageshells/pageshell.php: the spotlight is now only
+ available for logged in users.
+
+2008-07-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js, views/default/css.php,
+ views/default/friends/picker.php: friends picker fixed for new page layout,
+ and hopefully I've fixed the load issue too
+
+2008-07-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php,
+ views/default/canvas/layouts/widgets.php, views/default/css.php,
+ views/default/page_elements/elgg_topbar.php,
+ views/default/pageshells/pageshell.php: canvas layout updates, ie6&7 layout
+ fixes, new 3-column widget view
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/ping.php: Some notes
+
+ * engine/lib/ping.php: Using correct ping address
+
+ * engine/lib/entities.php: User test negative non-fatal on permissions check
+
+ * engine/lib/entities.php: Actually fetching the user
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * friends/index.php, friends/of.php: friends pages altered
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/opendd/views/default/output/uuid.php: Introducing UUID view
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php, entities/list.php: changed list and entity canvas
+ layout
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/ping.php: Main pinging mechanism now functional
+
+ * engine/lib/ping.php: Temp disabled
+
+ * engine/schema/mysql.sql: Fixing access collections table
+
+2008-07-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/one_column.php, views/default/css.php,
+ views/default/page_elements/title.php: more canvas layout additions, and page
+ owner block added to sidebar
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../canvas/layouts/two_column_left_sidebar.php: tweak to the two_column
+ left to add the owner block
+
+2008-07-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php: menu fix
+
+ * views/default/css.php: new canvas layouts
+
+ * .../canvas/layouts/two_column_left_sidebar.php,
+ .../canvas/layouts/two_column_right_sidebar.php: new canvas layouts
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/ping.php: Sends url with version (to retrieve site if already
+ loaded)
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php: bug in tools fixed
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/ping.php: Set to ping ping.elgg.org
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/ping.php, languages/en.php, views/default/settings/system.php:
+ Ping now configurable.
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php: tools added to topbar
+
+ * views/default/pageshells/pageshell.php: removed toolbox from main content
+ area
+
+2008-07-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: minor tweak
+
+ * views/default/navigation/topbar_tools.php,
+ views/default/page_elements/elgg_topbar.php: tools menu item fixed and jquery
+ animation added
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/settings/system.php: Moving to laptop
+
+2008-07-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, views/default/friends/collection.php,
+ views/default/friends/picker.php: Improved friend picker.
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, engine/lib/configuration.php:
+ sitedescription now loaded into config and displayed
+
+2008-07-25 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topbar_tools.php,
+ views/default/page_elements/elgg_topbar.php: added tools to the topbar
+
+2008-07-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ languages/en.php, views/default/settings/system.php: Now possible to specify
+ a site description.
+
+ * engine/lib/ping.php:
+
+ * views/default/output/url.php: Fixed another oopsy
+
+ * engine/lib/api.php:
+
+ * engine/lib/entities.php: Support multiple metadata values on entities,
+ closes #179
+
+2008-07-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/ping.php:
+
+ * engine/lib/api.php: API Client bugfixes
+
+ * engine/lib/api.php:
+
+2008-07-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/friendsPickerv1.js, views/default/friends/picker.php: Tabs on
+ the friend picker now work.
+
+2008-07-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Fixing oopsy...
+
+2008-07-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/friends/picker.php: Fixed the friends picker.
+
+ * views/default/friends/picker.php: The picker now selects the
+ friendspickerN variable correctly.
+
+ * engine/lib/access.php, engine/lib/relationships.php,
+ engine/schema/mysql.sql, languages/en.php,
+ views/default/friends/collection.php, views/default/friends/collections.php,
+ views/default/friends/picker.php: Introducing the (still issue-packed) friend
+ picker.
+
+2008-07-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Allowing multiple
+
+ * views/default/output/url.php: Support HTTPS
+
+ * engine/lib/api.php: Api tweaks refs #149
+
+ * engine/lib/ping.php: New site pinger, refs #149
+
+ * engine/lib/entities.php: Correctly exporting site and container as opendd
+
+2008-07-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, services/api/rest.php: Updated to use pam for auth
+ token. Added anonymous function support.
+
+ * engine/lib/pam.php: PAM now supports 'required' and 'sufficient'
+
+2008-07-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/friends_picker_arrow_left.gif,
+ _graphics/friends_picker_arrow_right.gif, javascript/friendsPickerv1.js,
+ .../jquery/jquery-easing-compatibility.1.2.pack.js,
+ vendors/jquery/jquery-easing.1.2.pack.js, views/default/css.php,
+ views/default/page_elements/header.php: new files for friends picker
+
+2008-07-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Fixed typo
+
+ * engine/lib/api.php, languages/en.php: API client added to code & changed
+ order of expose_function
+
+ * engine/lib/entities.php, engine/lib/group.php: Moving canWriteToContainer
+
+2008-07-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/footer_logo.gif, views/default/page_elements/footer.php: removal
+ of the official elgg logo from the footer, this is not GPL.
+
+2008-07-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/groupprofile.php: The group profile now sets page ownership to
+ the group
+
+ * mod/groups/views/default/groups/grouplinks.php: Slight modification to
+ group links.
+
+ * engine/lib/objects.php: Yet more container refactoring.
+
+2008-07-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/access.php, views/default/input/checkboxes.php,
+ views/default/input/file.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Disabled support
+ added to forms.
+
+2008-07-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/metadata.php,
+ engine/lib/relationships.php: More owner_guid to container_guid transfer
+
+ * engine/lib/metadata.php, engine/lib/tags.php: Updated further functions to
+ work from container_guids rather than owner_guids
+
+ * mod/groups/start.php, mod/groups/views/default/groups/icon.php,
+ mod/profile/views/default/profile/icon.php: Icons now handle elegantly if you
+ try and display a non-ElggUser entity.
+
+ * engine/lib/group.php, engine/lib/pageowner.php,
+ mod/groups/languages/en.php: Groups now have usernames of a sort
+
+ * engine/lib/elgglib.php, engine/lib/group.php, engine/lib/users.php:
+ Introducing the Friendable interface
+
+ * mod/profile/views/default/user/default.php,
+ mod/profile/views/default/user/user.php: Moved the default user view from
+ user/user to user/default.
+
+2008-07-22 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php:
+
+ * engine/lib/entities.php: Saving cached annotations
+
+2008-07-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/new.php: Typo
+
+ * mod/opendd/edit.php, mod/opendd/feeds.php, mod/opendd/index.php,
+ mod/opendd/manage.php, mod/opendd/viewfeed.php, mod/opendd/viewuuid.php:
+ OpenDD using elgg_view_title
+
+ * engine/lib/entities.php: Exporting full profile
+
+ * mod/groups/all.php, mod/groups/edit.php, mod/groups/groupprofile.php,
+ mod/groups/index.php, mod/groups/invite.php, mod/groups/new.php: Groups using
+ elgg_view_title
+
+ * engine/lib/access.php: Fixes #175
+
+2008-07-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fix for can_write_to_container
+
+ * engine/lib/entities.php: Fixed the can_write_to_container function when
+ you're logged out.
+
+ * engine/lib/entities.php, engine/lib/users.php: Further fixes.
+
+ * engine/lib/entities.php: Fix for previous.
+
+ * engine/lib/entities.php: Container_guid is set intelligently for
+ get_entities when owner_guid is set.
+
+ * engine/lib/users.php: Slight fix to previous.
+
+ * engine/lib/users.php: Altered the get_user_friends_objects functions to
+ work with containers.
+
+ * engine/lib/entities.php, engine/lib/group.php: Moved
+ can_write_to_container into elgglib
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/lib/entities.php, engine/lib/group.php, engine/lib/objects.php,
+ engine/lib/pageowner.php, engine/lib/users.php, engine/schema/mysql.sql,
+ mod/groups/actions/addtogroup.php, views/default/page_elements/title.php:
+ Moved container_guid to entities, modified a bunch of functions.
+
+ * engine/lib/plugins.php: Standardised plugin loading
+
+2008-07-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, mod/groups/languages/en.php, mod/groups/start.php:
+ Closes #166
+
+2008-07-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Slight change to write access permissions function
+
+ * engine/lib/access.php: Reinstating plugin hooks for access collections.
+
+ * engine/lib/input.php, mod/profile/views/default/profile/userdetails.php,
+ views/default/admin/main.php, views/default/admin/plugins.php,
+ views/default/admin/site.php, views/default/admin/statistics.php,
+ views/default/admin/user.php, views/default/messages/errors/error.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/messages/message.php,
+ views/default/output/longtext.php, views/default/settings/install.php,
+ views/default/usersettings/main.php, views/default/usersettings/plugins.php,
+ views/default/usersettings/statistics.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/odd/messages/exceptions/exception.php, views/rss/object/default.php,
+ views/rss/user/default.php, views/xml/messages/exceptions/exception.php:
+ Added the autop function, replaced any references to nl2br
+
+ * engine/lib/access.php, engine/schema/mysql.sql: Fixed a bug with the
+ revamped access collections
+
+ * engine/lib/pageowner.php, engine/lib/plugins.php: Improvements to
+ get_context
+
+ * engine/lib/access.php: Fix for access collections
+
+ * views/default/input/text.php: Short text values are now properly escaped
+ in the input/text view.
+
+ * engine/schema/mysql.sql: Added auto increment initial val. Fixes #171
+
+2008-07-18 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: new functions added to access in order to allow
+ collections to be created
+
+2008-07-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: access_collections now auto_increment
+
+2008-07-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: access groups renamed to access collections
+
+2008-07-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: access_groups -> access_collections
+
+ * engine/lib/access.php: Fix to previous
+
+ * engine/lib/access.php: New access control hooks
+
+2008-07-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, mod/groups/groupprofile.php,
+ mod/groups/start.php: Closes #165 & #167
+
+ * services/export/handler.php:
+
+2008-07-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Added new access group control functions
+
+2008-07-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Fixes #164: Seems there is something erroniously
+ setting 'guid' to something in logged in systems (or alternatively this is
+ just a session problem on my system) either way I have modified isloggedin to
+ check both guid and id... which seems to work.
+
+ * engine/lib/entities.php, engine/lib/extender.php,
+ services/export/handler.php: Closes #160
+
+2008-07-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fixed get_entities_by_annotation
+
+ * engine/lib/annotations.php: Introducing list_entities_from_annotations
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, mod/opendd/viewuuid.php,
+ views/default/friends/list.php, views/default/search/entity_list.php,
+ views/js/object/default.php, views/js/user/default.php: Fixed numerous
+ occurrances of elgg_view_entity being called incorrectly. Fixes #163
+
+2008-07-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php: Fixed the single entity viewer
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/index.php: Fixes #162
+
+ * mod/opendd/viewuuid.php: Closes #161
+
+2008-07-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/add.php, actions/friends/remove.php: Add and remove friend
+ actions now use try / catch
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/extender.php: Closes #155: Introduces
+ 'volatile' type of metadata in odd feeds.
+
+ * engine/lib/elgglib.php: Closes #157: Introducing elgg_[get|set]_viewtype()
+
+ * engine/lib/river.php: Reversed ben's changes
+
+2008-07-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Fix for river items when the item is an annotation,
+ not an entity in itself
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Closes #158: Renamed $location to $view_location
+ within elgg_view. This seems to be a successful workaround.
+
+2008-07-16 misja <misja@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/xml-rpc_handler.php: Set the view with set_input rather
+ than via the session
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php: Closes #156 & #139
+
+2008-07-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: The friends river now grabs more friends ...
+
+2008-07-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/joinrequest.php: Fixes #154
+
+ * engine/lib/metadata.php, mod/groups/actions/join.php: Closes #116: Groups
+ join clears invite flags http://trac.elgg.org/elgg/ticket/116
+
+ * mod/profile/actions/edit.php, mod/profile/actions/iconupload.php,
+ mod/profile/languages/en.php,
+ .../default/river/ElggUser/profileiconupdate.php,
+ .../views/default/river/ElggUser/profileupdate.php,
+ .../views/default/river/ElggUser/update.php: Closes #152 and as a bonus you
+ get a river notification for icon upload as well. Aren't I nice?
+
+2008-07-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: river blog updated - added
+
+2008-07-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/opendd/start.php: Fixes #147
+
+ * mod/opendd/start.php:
+
+ * mod/opendd/start.php: Closes #150
+
+ * mod/opendd/start.php, .../widgets/opendd_friends_elsewhere/view.php,
+ mod/opendd/viewuuid.php: Closes #145: Override getURL on imported entities.
+
+2008-07-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: You can now override entity URLs with the
+ setURL($string) method.
+
+2008-07-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/edit.php,
+ mod/groups/actions/joinrequest.php, mod/groups/languages/en.php,
+ mod/groups/start.php, mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/groupgallery.php,
+ mod/groups/views/default/groups/grouplisting.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ .../default/river/ElggRelationship/create.php: Fixes #144
+
+2008-07-15 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/javascript.php: javascript menu dropdown IE
+ bug fixed for friends widget, still an issue with friends of
+
+2008-07-15 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/ElggRelationship/create.php,
+ views/default/river/wrapper.php,
+ views/json/messages/exceptions/exception.php,
+ views/php/messages/exceptions/exception.php,
+ views/xml/messages/exceptions/exception.php: Closes #140
+
+ * engine/lib/extender.php, mod/opendd/languages/en.php,
+ mod/opendd/manage.php, mod/opendd/start.php, mod/opendd/viewfeed.php,
+ .../widgets/opendd_friends_elsewhere/edit.php,
+ .../widgets/opendd_friends_elsewhere/view.php: Closes #135: First version of
+ the OpenDD friends elsewhere feed.
+
+ * engine/lib/river.php, .../default/river/ElggRelationship/create.php,
+ .../views/default/river/ElggUser/update.php: Using ElggRiverStatement. Plugin
+ writers update your views! Refs #135.
+
+ * engine/lib/entities.php: Moved temp array caching stuff to the correct
+ functions.
+
+ * engine/lib/entities.php: Entity metadata can now be saved using
+ setMetaData() interface even if guid not specified.
+
+2008-07-15 misja <misja@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/handlers/xml-rpc_handler.php, engine/lib/xml-rpc.php: Remove rogue
+ print_r() statement, rightly set the xml view and fix incorrect xml-rpc view
+ call.
+
+ * engine/lib/xml-rpc.php: Fix uninitialized XML-RPC handler value
+
+ * engine/lib/xml-rpc.php: Fixed registering of XML-RPC handlers
+
+2008-07-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: Time_created should be time_updated.
+
+ * engine/lib/opendd.php: Refs #139: Using UTF-8 encoding as a speculative
+ fix. Test and confirm.
+
+2008-07-14 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updated toolabr logout for old IE 6's
+
+ * views/default/css.php: updates to log out, pagination, search box
+
+2008-07-14 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: Introducing oddmetadata_to_elggextender(), a
+ function used for import but functionised to let you use it from elsewhere.
+
+2008-07-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Introducing oddentity_to_elggentity(), a function
+ used for import but functionised to let you use it from elsewhere.
+
+2008-07-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: and again
+
+ * views/default/css.php: river_forums_update added
+
+2008-07-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: new date and time lang
+
+2008-07-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/search/entity_list.php,
+ views/rss/search/entity_list.php: The lists now go through the
+ search/entity_list view.
+
+2008-07-11 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php: Added getNumElements()
+
+ * engine/lib/entities.php: Fixes #137: annotate and getAnnotations now
+ functions for unsaved entities. Maths functions non-functional at present.
+ Refs #135.
+
+ * engine/lib/entities.php: Added Group entity support to import.
+
+ * languages/en.php, services/export/handler.php: Better errors for attempt
+ to access a GUID you can't
+
+ * views/odd/messages/exceptions/exception.php: Exceptions in OpenDD export
+ now appear as comments for debugging.
+
+ * engine/lib/relationships.php, services/export/handler.php: relationships
+ are addressable and have working UUIDs, refs #132
+
+ * actions/comments/add.php, actions/comments/delete.php,
+ actions/email/confirm.php, actions/email/save.php, actions/friends/add.php,
+ actions/friends/remove.php, actions/import/odd.php, actions/login.php,
+ actions/logout.php, .../notifications/settings/usersettings/save.php,
+ actions/plugins/settings/save.php, actions/plugins/usersettings/save.php,
+ actions/register.php, actions/user/language.php, actions/user/name.php,
+ actions/user/password.php, actions/useradd.php, actions/widgets/save.php,
+ languages/en.php: Using register_error on errors rather than system_message.
+ Also, fixed widget save to handle arrays (Refs #135)
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php,
+ actions/admin/user/makeadmin.php, actions/admin/user/resetpassword.php: Using
+ register_error on errors rather than system_message
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ mod/groups/actions/addtogroup.php, mod/groups/actions/edit.php,
+ mod/groups/actions/join.php, mod/groups/actions/joinrequest.php,
+ mod/groups/actions/leave.php, mod/opendd/actions/opendd/feed/delete.php,
+ mod/opendd/actions/opendd/feed/subscribe.php: Using register_error on errors
+ rather than system_message
+
+2008-07-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: defaut font reset to verdana
+
+ * views/default/css.php: full list of pc names for Lucida Sans added
+
+2008-07-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/two_column.php, views/default/css.php: two
+ column layout fix
+
+ * views/default/canvas/layouts/two_column.php, views/default/css.php: two
+ column canvas layout fixed
+
+2008-07-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/page_elements/title.php:
+ elgg_view_title can now suppress the submenu
+
+2008-07-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_toolbar_logout_over.gif, views/default/css.php,
+ views/default/page_elements/elgg_topbar.php: elgg topbar logout re-done with
+ rollover
+
+2008-07-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/admin/plugins.php: Killed pagination on the plugin admin
+ page
+
+ * engine/lib/elgglib.php: Added a plugin hook for counting comments.
+
+2008-07-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/widgets.php: Working with multiple values in array
+
+2008-07-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/elgg_bookmarklet.gif: bookmarklet graphic
+
+2008-07-10 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixes #134: Using else between statements to
+ ensure that they are only ever triggered once. Please confirm that there are
+ no other issues attached.
+
+2008-07-10 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ .../views/default/profile/menu/adminlinks.php, views/default/css.php: avatar
+ submenu altered and messages div coloured up
+
+2008-07-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/messages/errors/list.php,
+ views/default/messages/messages/list.php: Error messages now have a different
+ div name
+
+ * views/default/page_elements/title.php: The submenu div doesn't appear if
+ there is no submenu.
+
+ * engine/lib/plugins.php: Fixed issue with get_plugin_name and pagehandlers.
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/comments/forms/edit.php: Fixed
+ comments!
+
+ * engine/lib/elgglib.php: Fixed submenu tab contexts
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Blocking some information from export, closes
+ #130
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: Updated the edit icon form
+ view
+
+ * mod/profile/editicon.php: Restoring old edit icon page
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, mod/opendd/actions/opendd/feed/delete.php,
+ mod/opendd/actions/opendd/feed/subscribe.php, mod/opendd/edit.php,
+ mod/opendd/feeds.php, mod/opendd/graphics/defaultlarge.jpg,
+ mod/opendd/graphics/defaultmedium.jpg, mod/opendd/graphics/defaultsmall.jpg,
+ mod/opendd/graphics/defaulttiny.jpg, mod/opendd/index.php,
+ mod/opendd/languages/en.php, mod/opendd/manage.php, mod/opendd/manifest.xml,
+ mod/opendd/start.php, mod/opendd/viewfeed.php,
+ .../views/default/forms/opendd/subscribe.php,
+ mod/opendd/views/default/object/oddentity.php,
+ mod/opendd/views/default/object/oddfeed.php,
+ mod/opendd/views/default/object/oddmetadata.php,
+ .../views/default/object/oddrelationship.php,
+ mod/opendd/views/default/opendd/css.php,
+ mod/opendd/views/default/opendd/gallery.php,
+ mod/opendd/views/default/opendd/icon.php,
+ mod/opendd/views/default/opendd/link_logo.php,
+ mod/opendd/views/default/opendd/links.php,
+ mod/opendd/views/default/opendd/listing.php,
+ mod/opendd/views/default/opendd/metatags.php,
+ mod/opendd/views/default/opendd/profile.php: Closes #81: OpenDD aggregator
+ http://trac.elgg.org/elgg/ticket/81
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Further profile text fix
+
+ * mod/profile/languages/en.php, mod/profile/start.php: Added profile submenu
+
+ * engine/lib/elgglib.php: Fixed minor profile tab issue
+
+2008-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: mini avatar in page title area fixed
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/user/index.php: The user administator page now results in an RSS
+ feed
+
+ * engine/lib/elgglib.php, views/default/canvas_header/submenu_template.php,
+ views/default/page_elements/title.php: Introducing the submenu
+
+2008-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: edit profile button moved
+
+2008-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: profile edit link moved
+
+ * friends/of.php: friends of title
+
+ * friends/index.php, friends/of.php: titles on friend list pages
+
+2008-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: css for page tabs submenu
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/rss/pageshells/pageshell.php: RSS feeds live again when you're
+ logged out!
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Fixed opendd metadata .htaccess rules
+
+ * engine/lib/elgglib.php, engine/lib/entities.php: Refs #81: Subtype can be
+ returned on a non-saved entity.
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added a comment hook so that other plugins can
+ handle comments instead
+
+ * vendors/kses/kses.php: Removed a kses warning.
+
+ * views/default/comments/forms/edit.php: The comment form only appears if
+ you are logged in.
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Removed toggle since it broke the handler
+ prototype
+
+2008-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: new view added to the canvas title
+ view.
+
+2008-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/page_elements/elgg_topbar.php: topbar
+ altered for messages and links style
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/object/object.php: Closes #129: Placeholder object default
+ view
+
+2008-07-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/editicon.php, mod/profile/languages/en.php,
+ views/default/css.php: new avatar crop page and instructions
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/languages/en.php, mod/groups/start.php,
+ .../default/widgets/group_entities_widget/edit.php,
+ .../default/widgets/group_entities_widget/view.php: Refs #129, #109 & #106
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Plugins can now override the front page
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Introducing list_entities_groups()
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: The relationship listing function wasn't
+ taking offsets properly.
+
+ * views/default/navigation/pagination.php: Further pagination change.
+
+2008-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: new topbar
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Further pagination change.
+
+ * views/default/navigation/pagination.php: Slightly more descriptive
+ pagination.
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Modified rewrite rules for page handler to support - and _
+
+2008-07-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php, vendors/kses/AUTHORS, vendors/kses/COPYING,
+ vendors/kses/ChangeLog, vendors/kses/README, vendors/kses/TODO,
+ vendors/kses/docs/attribute-value-checks, vendors/kses/docs/hooks,
+ vendors/kses/docs/stripping-everything, vendors/kses/docs/supported-formats,
+ vendors/kses/docs/whitelisted-url-protocols,
+ vendors/kses/examples/filter.php, vendors/kses/examples/test.php,
+ vendors/kses/kses.php, vendors/kses/oop/oop.kses.changelog.txt,
+ vendors/kses/oop/oop.simple.api.txt, vendors/kses/oop/php4.class.kses.php,
+ vendors/kses/oop/php5.class.kses.php, vendors/kses/oop/test.oop.kses.php:
+ Elgg 1.0, meet kses. Kses, Elgg 1.0.
+
+2008-07-09 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php: Minor tweak to OpenDD library
+
+2008-07-09 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/editicon.php, mod/profile/languages/en.php,
+ mod/profile/views/default/profile/editicon.php: new profile avatar page
+
+2008-07-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/gallery.php: users gallery view sorted
+
+2008-07-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Closes #128
+
+2008-07-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: new canvas title
+
+2008-07-08 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/river_icons/river_icon_friends.gif, views/default/css.php: river
+ icon for friends
+
+2008-07-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/vendors/calendarpopup/CalendarPopup.js,
+ engine/vendors/jquery/jquery.js, vendors/calendarpopup/CalendarPopup.js,
+ views/default/input/calendar.php: Moved the calendar popup, erased the
+ duplicate jQuery
+
+ * actions/comments/add.php, engine/lib/notification.php, languages/en.php:
+ Introducing notifications on generic comments.
+
+ * entities/list.php: Rough and ready entity list page
+
+2008-07-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: reverted the new title
+
+ * views/default/page_elements/title.php: title tweaks
+
+2008-07-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: OpenDD autodiscovery header
+
+2008-07-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: moved generic comments css from plugin to core
+
+2008-07-08 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Closes #125: get_entities_by_latest_annotation
+ function
+
+2008-07-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/widgets.php, views/default/output/tags.php: widget are now
+ logged in by default, tag output tweaked
+
+2008-07-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/metastrings.php, mod/profile/actions/iconupload.php: Removing
+ annoying warning messages
+
+2008-07-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php: Users online, not user's ...
+
+ * actions/admin/user/makeadmin.php, engine/lib/admin.php,
+ engine/lib/entities.php, engine/lib/metadata.php, engine/lib/sessions.php,
+ engine/lib/users.php, views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php: Administration tweaks; fixed
+ users online functions, as well as last_action functions, and the 'make
+ admin' functionality
+
+ * views/default/page_elements/title.php: Removed the 'your' prefix from
+ titles
+
+ * engine/lib/pageowner.php: page_owner() now works off owner_guid, not
+ owner_id
+
+ * languages/en.php: Added the word 'all' to the vocabulary
+
+2008-07-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/title.php: changes to the title view
+
+2008-07-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/wrapper.php: Relationship river items are now
+ correctly wrapped in divs
+
+ * mod/profile/graphics/defaulttopbar.jpg, mod/profile/graphics/topbar.jpg:
+ Default topbar graphic should now be included
+
+2008-07-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/graphics/topbar.jpg: default avatar added for topbar
+
+2008-07-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/metadata.php: Introducing
+ canEditMetadata
+
+2008-07-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Closes #107, this has been superceded by groups
+ functionality (#106).
+
+ * engine/lib/notification.php: Option to hide sender.
+
+2008-07-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/gallery_back_icon.gif, _graphics/gallery_back_icon_on.gif:
+ gallery overview icons
+
+ * _graphics/icon_tag.gif: piccy for tags
+
+ * views/default/css.php: tags icon and files update
+
+2008-07-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/tags.php: class wrapped around tag string.
+
+2008-07-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Closes #123
+
+2008-07-07 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/comments/forms/edit.php: removed the title from generic
+ comments
+
+2008-07-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Fixes #122
+
+2008-07-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/search/gallery.php: updated file
+ gallery
+
+2008-07-07 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php: Decode on import
+
+ * engine/lib/group.php, mod/groups/actions/edit.php,
+ mod/groups/actions/join.php, mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/edit.php,
+ mod/groups/views/default/groups/menu/actions.php: Closes #120
+
+2008-07-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed friendly_time
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/edit.php, mod/groups/languages/en.php,
+ mod/groups/views/default/forms/groups/edit.php: Closes #109: Group icons can
+ be set. Fixed recreate group on edit.
+
+ * mod/groups/graphics/defaultlarge.jpg,
+ mod/groups/graphics/defaultmedium.jpg, mod/groups/graphics/defaultsmall.jpg,
+ mod/groups/graphics/defaulttiny.jpg, mod/groups/graphics/icon.php,
+ mod/groups/views/default/groups/icon.php: Refs #109: Default graphics set.
+ Custom graphics must be in groups/{$GROUP_GUID}{$size}.jpg
+
+2008-07-04 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: changes to the icon
+ editing page.
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../views/default/profile/menu/adminlinks.php: Removed blank space on menu
+
+2008-07-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/menu/actions.php: REmoved duplicate
+ admin links
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php: Fixes #119
+
+ * languages/en.php, mod/groups/actions/addtogroup.php,
+ mod/groups/actions/edit.php, mod/groups/edit.php, mod/groups/invite.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ mod/groups/views/default/forms/groups/invite.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/icon.php,
+ mod/groups/views/default/groups/menu/actions.php,
+ mod/groups/views/default/sharing/invite.php: Refs #109: Invite support added
+
+2008-07-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updates for friends widget
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Fixed regression
+
+2008-07-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js: updated js
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/pageowner.php,
+ mod/groups/languages/en.php, mod/groups/start.php,
+ .../default/widgets/group_members_widget/edit.php,
+ .../default/widgets/group_members_widget/view.php: Refs #109: Group members
+ widget.
+
+ * mod/groups/groupprofile.php, mod/groups/languages/en.php,
+ mod/groups/start.php: Refs #109 : Widget support
+
+ * mod/groups/groupprofile.php, mod/groups/start.php,
+ mod/groups/views/default/groups/grouplinks.php,
+ mod/groups/views/default/groups/groupprofile.php,
+ mod/groups/views/default/groups/menu/actions.php,
+ .../views/default/groups/menu/ownerlinks.php: Refs #109 - Basic profile
+ layout
+
+ * mod/groups/languages/en.php,
+ .../default/river/ElggRelationship/create.php: Refs #109: River functionality
+
+2008-07-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updates to river(ie fixes), and sharing
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/ElggRelationship/create.php: Using entities rather
+ than object
+
+2008-07-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, languages/en.php, search/index.php,
+ views/default/search/startblurb.php,
+ views/default/user/search/finishblurb.php,
+ views/default/user/search/startblurb.php: First pass on user search
+
+2008-07-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: more river updates
+
+2008-07-04 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/groups/actions/addtogroup.php: Refs #109 : Private group membership
+ full exchange.
+
+ * engine/lib/notification.php: Unnecessary sanitise string causing issues on
+ some subjects
+
+ * mod/groups/actions/addtogroup.php, mod/groups/actions/joinrequest.php,
+ mod/groups/languages/en.php, mod/groups/start.php: Join requests on closed
+ groups, full loop. Refs #109
+
+2008-07-04 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: more river icon fixes
+
+2008-07-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/graphics/defaultlarge.jpg,
+ mod/profile/graphics/defaultmedium.jpg,
+ mod/profile/graphics/defaultsmall.jpg, mod/profile/graphics/defaulttiny.jpg:
+ new default avatar (your's was good Ben - just changed the blue a wee bit)
+
+ * _graphics/river_icons/river_icon_blog.gif,
+ _graphics/river_icons/river_icon_comment.gif,
+ _graphics/river_icons/river_icon_feed.gif,
+ _graphics/river_icons/river_icon_files.gif,
+ _graphics/river_icons/river_icon_forum.gif,
+ _graphics/river_icons/river_icon_messageboard.gif,
+ _graphics/river_icons/river_icon_plugin.gif,
+ .../river_icons/river_icon_privatemessage.gif,
+ _graphics/river_icons/river_icon_profile.gif,
+ _graphics/river_icons/river_icon_shares.gif,
+ _graphics/river_icons/river_icon_status.gif: icons for the river
+
+2008-07-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Refs #109
+
+2008-07-03 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: river icons added
+
+2008-07-03 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/spotlight/default.php: content added to the spotlight
+
+2008-07-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/wrapper.php: Fixed a subtype bug in the river item
+ wrapper.
+
+2008-07-03 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: It would help if I added the functions to the right
+ scope. Oops! Refs #106
+
+ * engine/lib/opendd.php: Fixes #113
+
+ * admin/user/index.php: Fixes #111
+
+ * views/default/input/access.php: Extended access to support options
+ override
+
+ * engine/lib/elgglib.php: Collection to group, refs #106
+
+2008-07-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/userdetails.php,
+ .../canvas/layouts/narrow_right_sidebar.php, views/default/css.php: profile,
+ forum and canvas updated
+
+ * views/default/css.php: status widget updates
+
+ * views/default/css.php: generic comments moved/cleaned
+
+2008-07-02 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Typo on database table
+
+2008-07-02 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ views/default/canvas/layouts/one_column.php, views/default/css.php: profile
+ menu, single view layout, and comments all updated
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/userdetails.php: avatar menu fixed for
+ non-200px wide avatars
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * dashboard/index.php, languages/en.php,
+ views/default/canvas/layouts/widgets.php: Default text for the dashboard.
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/start.php: Closes #112
+
+ * .../views/default/profile/menu/adminlinks.php,
+ mod/profile/views/default/profile/userdetails.php: Closes #112
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php: The widget layout now uses areas
+ 3 and 4 as the column content if there aren't any widgets
+
+ * views/default/canvas/layouts/widgets.php: The widget layout now uses areas
+ 3 and 4 as the column content if there aren't any widgets
+
+2008-07-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: created settings link
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/menu/actions.php,
+ mod/profile/views/default/profile/userdetails.php: Admin menus to the
+ contextual menu
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Closes #110
+
+ * actions/systemsettings/install.php: NEW - #109: Groups core plugin
+ http://trac.elgg.org/elgg/ticket/109
+
+ * actions/systemsettings/install.php: Refs #109: Groups plugin active by
+ default
+
+ * engine/lib/users.php: Closes #108
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/javascript.php,
+ views/default/widgets/wrapper.php: Fixed avatar menu on widgets
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Fixed notification subject
+
+2008-07-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: small tweak to topbar
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php: lines in avatar menu
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Correction to get_river_entities
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/page_elements/elgg_topbar.php: mini
+ avatar style and position and link
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Membership functions, and introducing
+ can_write_to_container, and its hook group_permission_check. Refs #106.
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/reset.css: unnecessary file
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Limits properly propagate to the pagination views.
+
+ * mod/profile/views/default/profile/gallery.php: Sanitising the profile
+ gallery view for now
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/pageshells/pageshell.php: pageshell /
+ logged out modification
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/search/gallery.php: Gallery view now displays 3 per row
+
+2008-07-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: further topbar tweak
+
+ * views/default/page_elements/elgg_topbar.php: topbar tweaks
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php,
+ views/default/account/forms/register.php,
+ views/default/account/forms/useradd.php,
+ views/default/canvas/layouts/one_column.php, views/default/css.php: login
+ front door tidied up
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Entity loader support for ElggGroup, refs #106
+
+ * engine/lib/group.php: Bugfix, refs #106
+
+2008-07-01 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/elgg_topbar.php: top_bar icon
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/manifest.xml: Licence in manifest
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/dashboard/index.php, mod/dashboard/manifest.xml,
+ mod/dashboard/start.php, mod/dashboard/views/default/dashboard/welcome.php:
+ No need to have the dashboard plugin. Dashboard is part of core.
+
+ * mod/profile/actions/cropicon.php, mod/profile/actions/iconupload.php,
+ mod/profile/icon.php, mod/profile/views/default/profile/icon.php: Toolbar ->
+ topbar in profile icons
+
+ * mod/profile/actions/cropicon.php, mod/profile/actions/iconupload.php,
+ mod/profile/icon.php, mod/profile/views/default/profile/icon.php: Added
+ toolbar size for the icons
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php, engine/lib/objects.php, languages/en.php: Group
+ class, refs #106
+
+ * engine/schema/mysql.sql: Added groups, refs #106
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Fix for the schema
+
+ * views/default/search/gallery.php: Gallery should probably only be three
+ squares wide for now.
+
+ * views/default/css.php: Small fix for gallery view users
+
+ * mod/profile/views/default/profile/gallery.php: Small fix for gallery view
+ users
+
+ * mod/profile/views/default/profile/gallery.php,
+ mod/profile/views/default/user/user.php,
+ views/default/search/gallery_listing.php, views/default/search/listing.php:
+ Gallery view for users
+
+ * views/default/css.php: CSS additions
+
+2008-07-01 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topmenu.php: previous top menu removed - replaced
+ by new elgg_topbar view
+
+ * _graphics/avatar_mini.gif, _graphics/elgg_toolbar_logo.gif,
+ _graphics/elgg_toolbar_logout.gif, _graphics/toptoolbar_background.gif,
+ views/default/css.php, views/default/page_elements/elgg_topbar.php,
+ views/default/page_elements/header.php: topbar menu
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: The $entity_guid on get_annotations can now be
+ an array.
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Added object in container search, refs #106.
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: get_annotations can now optionally take an
+ array as owner_guid
+
+ * actions/login.php: Users are now logged into the dashboard.
+
+ * engine/lib/elgglib.php, views/default/navigation/gallery.php,
+ views/default/search/gallery.php: Moved navigation/gallery to search/gallery,
+ which makes more sense.
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/group.php: Refs #106: Group prototype class
+
+ * engine/lib/entities.php: Added site_guid to internal db fields
+
+2008-07-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/widgets/wrapper.php: Widgets now load after the main page
+
+2008-07-01 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Refs #106: Added schema
+
+2008-06-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/widgets.php, views/default/canvas/layouts/widgets.php: Added
+ the ability to control widget contexts
+
+2008-06-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/makeadmin.php, languages/en.php,
+ mod/profile/views/default/profile/userdetails.php: Closes #105: Make admin
+ option http://trac.elgg.org/elgg/ticket/105
+
+ * actions/useradd.php, engine/lib/users.php, languages/en.php,
+ views/default/account/forms/useradd.php,
+ views/default/admin/user_opt/adduser.php: Added some user code - needs div
+ hiding
+
+2008-06-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php: Fixed entity page
+
+2008-06-30 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed minor cache counting issue
+
+ * engine/lib/plugins.php, languages/en.php: Refs #102 - Speculative fix
+
+2008-06-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php, views/default/widgets/wrapper.php: Partial fix for
+ constantly-shrinking widgets bug.
+
+2008-06-29 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/footer_logo.gif, views/default/css.php,
+ views/default/page_elements/footer.php: page footer added and msg div fixed
+ for IE
+
+ * _graphics/page_back_linen.gif, _graphics/page_back_linen_shadow.gif,
+ views/default/css.php: new page style, new floating msg box, other fixes &
+ cleanup
+
+2008-06-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/listing.php: changed the friends list
+ view order
+
+2008-06-28 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: more listings items cleanup
+
+ * views/default/css.php: fixed several listing item spacing issues
+
+ * views/default/canvas/layouts/widgets.php, views/default/css.php: cancel
+ button added to widget gallery
+
+2008-06-28 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/listing.php: added user status to the
+ friends view
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: Sanitising search
+
+ * engine/lib/widgets.php: Fixed widget saving
+
+2008-06-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js, views/default/canvas/layouts/widgets.php,
+ views/default/css.php: new widget gallery
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php:
+
+ * engine/lib/entities.php: Caching (most) subtype queries, drastically
+ reduces database queries in most use cases, refs #101
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Introducing friendly_title
+
+ * languages/en.php: Some more translations for comments
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php:
+
+ * engine/lib/metastrings.php: Metastrings now keeps a record of strings it
+ knows aren't present and so removes the need to futher look for them. Refs
+ #101
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Bug fix for previous.
+
+ * engine/lib/elgglib.php: Introducing elgg_count_comments
+
+ * views/default/annotation/generic_comment.php,
+ views/default/comments/forms/edit.php, views/default/css.php: Tweaks to
+ generic comment CSS
+
+ * actions/comments/add.php, actions/comments/delete.php,
+ engine/lib/elgglib.php, languages/en.php,
+ views/default/annotation/generic_comment.php,
+ views/default/comments/forms/edit.php: Brought generic comments into Elgg
+ core
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Using persistent db connections. This should
+ speed up pages with numerous small DB calls. Please report any issues asap.
+ Refs #101
+
+ * engine/lib/metastrings.php: Minor textual changes
+
+ * engine/lib/users.php: Added mapping to cache username => guid & code =>
+ guid. Refs #101.
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/icon.php: Icon menus now work when
+ you're logged out.
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Removed explains since these weren't much use
+
+ * engine/lib/install.php: Db installed flag on config, Refs #101
+
+ * engine/lib/elgglib.php: Caching datalists. Refs #101
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Fixed the contextual nubbin on search indices
+ (really)
+
+ * views/default/css.php: Fixed the contextual nubbin on search indices
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Short circuited query if could not possibly
+ return a value. Refs #101
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Forced search result icon sizes to be 40px
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Refs #101 - DB Profiling in debug mode
+ (recommended usage means putting $CONFIG->debug = true in settings.php)
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: Search now sets context appropriately
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Removed debug warning
+
+2008-06-27 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/metadata.php,
+ engine/lib/relationships.php, engine/lib/sites.php, engine/lib/users.php,
+ friends/index.php, friends/of.php, search/index.php: Added a 'display full
+ view' parameter to all of the listings functions
+
+ * engine/lib/elgglib.php, mod/profile/views/default/profile/listing.php,
+ views/default/search/listing.php: Introducing elgg_view_listing
+
+ * mod/profile/views/default/profile/icon.php: Minor fix to the icon code
+
+ * mod/profile/views/default/profile/icon.php: Fix to icon links, so they
+ display actions too
+
+ * mod/profile/views/default/profile/listing.php, views/default/css.php:
+ Added search listing styles
+
+ * mod/profile/views/default/profile/icon.php: Fix to previous
+
+ * mod/profile/views/default/profile/icon.php: Further contextual menu work
+
+ * mod/profile/javascript.php, mod/profile/profile.js,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/javascript.php,
+ mod/profile/views/default/profile/metatags.php,
+ views/default/navigation/topmenu.php: Initial inclusion of profile icon
+ navigation
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Fixes #100 - User not having any notification
+ method no longer a hard error.
+
+2008-06-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php: tweak to profile language
+
+2008-06-27 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/avatar_menu_arrow.gif, _graphics/avatar_menu_arrow_hover.gif,
+ _graphics/avatar_menu_arrow_open.gif, mod/profile/profile.js,
+ mod/profile/views/default/profile/css.php, views/default/css.php: avatar
+ contextual menus
+
+2008-06-27 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php: Refs #86 - Better debug
+
+ * engine/lib/metastrings.php: Closes #86
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, .../notifications/settings/usersettings.php,
+ views/default/settings/system.php, views/default/user/settings/language.php:
+ Closes #98
+
+ * views/default/input/pulldown.php: Pulldown menu view now supports passing
+ values as well as options as an associative array "value" => "option text"
+ called $vars['options_values']
+
+2008-06-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/listing.php,
+ mod/profile/views/default/user/user.php: Improved profile listings
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Added get_installed_translations() to return an
+ array of available translations together with native language translation of
+ the text. Refs #98
+
+ * languages/en.php: Added ISo-639 language codes, refs #98
+
+2008-06-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: Tweaked the title CSS now that it's going to appear
+ inline within canvases.
+
+ * engine/lib/river.php: Widget river items are now of the form
+ river/widget/handler/event.
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/resetpassword.php, engine/lib/admin.php,
+ engine/lib/users.php, languages/en.php,
+ mod/profile/views/default/profile/userdetails.php: Closes #16:
+ Administration: Reset password functionality on user admin screen
+ http://trac.elgg.org/elgg/ticket/16
+
+2008-06-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/save.php, .../notifications/settings/usersettings/save.php,
+ actions/user/language.php, actions/user/name.php, actions/user/password.php,
+ actions/usersettings/save.php, engine/lib/notification.php,
+ engine/lib/users.php, settings/user/index.php,
+ .../notifications/settings/usersettings.php,
+ views/default/user/settings/email.php,
+ views/default/user/settings/language.php,
+ views/default/user/settings/name.php,
+ views/default/user/settings/password.php,
+ views/default/usersettings/form.php: Unified user settings form
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/register.php: Closes #96: Administration: Add
+ user (with optional admin flag) http://trac.elgg.org/elgg/ticket/96
+
+ * views/default/admin/user_opt/adduser.php: Refs #96: Administration: Add
+ user (with optional admin flag) http://trac.elgg.org/elgg/ticket/96
+
+ * actions/register.php, languages/en.php,
+ views/default/account/forms/register.php, views/default/admin/user.php,
+ views/default/admin/user_opt/adduser.php: Refs #96: Administration: Add user
+ (with optional admin flag) http://trac.elgg.org/elgg/ticket/96
+
+ * actions/user/language.php, engine/lib/languages.php, engine/lib/users.php,
+ languages/en.php, views/default/user/settings/language.php: Closes #92:
+ Settings: Set user language http://trac.elgg.org/elgg/ticket/92
+
+2008-06-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/checkboxes.php: Checkboxes now work happily with
+ arrays.
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/user/name.php, actions/user/password.php, engine/lib/sessions.php,
+ engine/lib/users.php, languages/en.php,
+ views/default/user/settings/password.php: Fixes #91 and #97
+
+ * actions/email/save.php, actions/user/name.php,
+ engine/lib/notification.php, engine/lib/users.php, languages/en.php,
+ views/default/notifications/settings/email.php,
+ views/default/user/settings/email.php, views/default/user/settings/name.php:
+ Closes #90: Settings: Change name http://trac.elgg.org/elgg/ticket/90
+
+2008-06-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php: Layout update for the single entity view.
+
+2008-06-26 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Fixes #95 - Now keying off system log entries so
+ that whenever a user does something that triggers an event they are boosted.
+
+ * views/default/admin/statistics_opt/basic.php: Fixes #94
+
+ * actions/email/save.php, engine/lib/notification.php, languages/en.php,
+ views/default/notifications/settings/email.php: Closes #89: Provide
+ functionality for a user to set their email address in user settings
+ http://trac.elgg.org/elgg/ticket/89
+
+2008-06-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/confirm.php, actions/register.php,
+ engine/lib/notification.php, engine/lib/sites.php, engine/lib/users.php,
+ languages/en.php: Closes #79: Email confirmation on registration & email
+ change http://trac.elgg.org/elgg/ticket/79
+
+2008-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: river icon additions
+
+ * javascript/initialise_elgg.js, views/default/css.php: widget gallery
+ tooltip positioning and layer issue fixed
+
+2008-06-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, search/index.php: Search and metadata functions
+ now support multiple user GUIDs
+
+2008-06-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/email/confirm.php, engine/lib/users.php, languages/en.php: Refs
+ #79
+
+2008-06-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Small ownership tweak to get_tags
+
+ * search/index.php: The search page now takes more options.
+
+2008-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/shout_speech_bubble.gif: shouts bubble
+
+2008-06-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: get_tags can now take an array as owner_guid.
+
+ * engine/lib/filestore.php: Fixes for filestore.
+
+ * engine/lib/filestore.php: Added grabFile() to the filestore, for much more
+ efficient file reading.
+
+ * engine/lib/river.php, engine/lib/system_log.php: Made the friends river
+ entities functions loads more efficient.
+
+2008-06-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Fixes #87 & #88
+
+ * engine/lib/notification.php, engine/lib/relationships.php,
+ languages/en.php: Refs #78: Email notifications on friending, comments
+ http://trac.elgg.org/elgg/ticket/78
+
+2008-06-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, views/default/river/wrapper.php: The river now
+ passes entities to each river view as $vars['entity']
+
+ * engine/lib/annotations.php: Adding an annotation triggers an 'annotate'
+ event
+
+2008-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/spotlight_back.gif, _graphics/temp_spotlight.gif,
+ views/default/css.php, views/default/spotlight/default.php: default spotlight
+
+2008-06-25 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php, engine/lib/sites.php, languages/en.php: Fixes
+ #84: Method for retrieving preferences for a user and notifying accordingly
+ http://trac.elgg.org/elgg/ticket/84
+
+2008-06-25 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updated staus box
+
+ * views/default/css.php: moved message styles into plugin
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: messaging styles
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Removed the circular delete mechanism that was
+ plaguing ElggFile
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/ajax/loader.php: centred loader gif
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Caching the show_db_tables function
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php, views/default/css.php:
+ profile box fixes
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Serious memory optimisation for the photo resize
+ functions
+
+2008-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/odd/canvas/default.php, views/odd/object/default.php,
+ views/odd/user/default.php: Refs #82 - oops... forgot to add these...
+
+ * .../notifications/settings/usersettings/save.php,
+ engine/lib/notification.php, languages/en.php,
+ .../notifications/settings/usersettings.php: Closes #83 - API & Interface for
+ selecting notification methods
+
+ * actions/plugins/settings/save.php, actions/plugins/usersettings/save.php:
+ Added gatekeeper
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php, engine/lib/sites.php: Removing more notices.
+
+ * engine/lib/entities.php: Removing an annoying notice
+
+ * engine/lib/elgglib.php: Minor fix to elgg_view_entity where ElggEntities
+ are subclassed
+
+2008-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/edit.php: Fixes #69 - Clicking on profile "edit" causes crash.
+ I have retrieved the user again from $_SESSION['id'] since
+ $_SESSION['user'] is not being set. This may point to a larger problem since
+ the $_SESSION looks far from complete.
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Fix for previous river functionality
+
+ * engine/lib/river.php: Minor formatting fix
+
+ * views/default/admin/plugins.php: Update plugins list so 50 display on a
+ page
+
+ * engine/lib/river.php: A fix to the river function.
+
+2008-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php, views/odd/export/entity.php,
+ views/odd/export/metadata.php, views/odd/export/relationship.php,
+ views/odd/pageshells/pageshell.php: Closes #82: OpenDD feeds in the same vein
+ as RSS http://trac.elgg.org/elgg/ticket/82
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/widgets/editwrapper.php: Fix to edit wrapper saving
+
+ * views/default/pageshells/pageshell.php: Removing title from pageshell
+ outright
+
+ * views/default/page_elements/title.php,
+ views/default/widgets/editwrapper.php: Introducing elgg_view_title
+
+ * engine/lib/elgglib.php: Introducing elgg_view_title
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updated
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/save.php, views/default/widgets/editwrapper.php: Save
+ widget improvements.
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/userdetails.php,
+ mod/profile/views/default/user/user.php,
+ .../canvas/layouts/narrow_right_sidebar.php,
+ views/default/canvas/layouts/two_column.php,
+ views/default/canvas/layouts/widgets.php, views/default/css.php,
+ views/default/pageshells/pageshell.php: updated profile box
+
+2008-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/plugins/usersettings/save.php, engine/lib/plugins.php,
+ languages/en.php, settings/plugins/index.php,
+ views/default/object/plugin.php, views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php: Refs #76: User settings
+ page (to Elgg Classic standard)
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: River views now run off subtypes
+
+ * views/default/ajax/loader.php: Introducing the AJAX loader
+
+ * _graphics/ajax-loader.gif, _graphics/ajax_loader.gif,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php:
+ Widgets now reload properly
+
+2008-06-24 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/ajax-loader.gif: ajax loader gif
+
+2008-06-24 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php, languages/en.php,
+ .../default/usersettings/statistics_opt/online.php: Refs #76: User settings
+ page (to Elgg Classic standard)
+
+2008-06-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/cropicon.php,
+ views/default/canvas/layouts/widgets.php: Widget fixes
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/cropicon.php: Added mission crop icon action
+
+2008-06-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: container box fixes
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: No need to duplicate
+ the user's name.
+
+ * engine/lib/filestore.php, mod/profile/actions/iconupload.php,
+ mod/profile/languages/en.php, mod/profile/start.php,
+ mod/profile/views/default/profile/editicon.php: Image cropping works!
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php: rearranged the main
+ profile area
+
+ * mod/profile/views/default/profile/userdetails.php: moved the about me
+ below the other profile info
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/widgets/editwrapper.php: Some tweaks to
+ the 'saving' box
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php, languages/en.php, settings/index.php,
+ settings/plugins/index.php, settings/statistics/index.php,
+ settings/user/index.php, usersettings/index.php,
+ usersettings/plugins/index.php, usersettings/statistics/index.php,
+ usersettings/user/index.php, views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ .../usersettings/statistics_opt/numentities.php: Refs #76: User settings page
+ (to Elgg Classic standard). Committing some work before shutting down for the
+ day.
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: small bug fix on icon
+ cropper
+
+2008-06-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/dummy_river_icon.gif, views/default/css.php: river updates
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/river/dashboard.php: Removed extra divs.
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: more icon cropper tweaks,
+ form added
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * entities/index.php, views/default/widgets/editwrapper.php,
+ views/default/widgets/wrapper.php: Widgets now save on a per-widget basis.
+ TODO: get the collapsing widgets to work once they've saved ..
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php:
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: coordinates in for the
+ icon cropper
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php: Widgets are now loaded as
+ separate JS scripts
+
+ * engine/lib/elgglib.php, views/js/object/default.php,
+ views/js/pageshells/pageshell.php, views/js/user/default.php: You can now get
+ a Javascript version of any entity
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php, engine/lib/usersettings.php, engine/start.php,
+ languages/en.php, usersettings/index.php, usersettings/plugins/index.php,
+ usersettings/statistics/index.php, usersettings/user/index.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php,
+ views/default/admin/main_opt/statistics.php,
+ views/default/admin/main_opt/user.php, views/default/object/plugin.php,
+ views/default/usersettings/main.php,
+ views/default/usersettings/main_opt/plugins.php,
+ views/default/usersettings/main_opt/statistics.php,
+ views/default/usersettings/main_opt/user.php,
+ views/default/usersettings/plugins.php,
+ views/default/usersettings/plugins_opt/plugin.php,
+ views/default/usersettings/statistics.php,
+ views/default/usersettings/user.php: Refs #76: User settings page (to Elgg
+ Classic standard). Committing some work before shutting down for the day.
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/editicon.php: added coordinates to the
+ icon cropper
+
+ * .../views/default/profile/hoverover/actions.php,
+ .../views/default/profile/hoverover/links.php,
+ mod/profile/views/default/profile/menu/actions.php,
+ mod/profile/views/default/profile/menu/links.php,
+ .../views/default/profile/menu/linksownpage.php,
+ mod/profile/views/default/profile/profilelinks.php: new profile links system.
+
+2008-06-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php, views/default/css.php: css
+ updates
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php,
+ .../views/default/js/jquery.imgareaselect-0.4.2.js,
+ .../default/js/jquery.imgareaselect-0.4.2.min.js,
+ mod/profile/views/default/profile/editicon.php: beginnings of the icon
+ cropper tool
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * settings/index.php, settings/plugins/index.php: Refs #76: User settings
+ page (to Elgg Classic standard)
+
+ * settings/plugins/index.php: Refs #76: User settings page (to Elgg Classic
+ standard)
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php: Fix to icon upload
+
+ * views/default/css.php, views/default/page_elements/header.php,
+ views/default/pageshells/pageshell.php: Page title is now displayed at the
+ top of the canvas.
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * settings/index.php:
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/icon.php, mod/profile/views/default/profile/icon.php: Added
+ master icon size (part 2)
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php: Forwards to
+ http_referer
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php: Added master icon size
+
+2008-06-23 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php:
+ Forwards to http_referer
+
+ * views/default/admin/plugins.php: Pagination on admin page
+
+ * engine/handlers/cron_handler.php, htaccess_dist: Closes #77 - Cron
+ endpoint and event
+
+ * languages/en.php: Refs #75
+
+ * views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/online.php: Refs #75
+
+2008-06-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: Update for pagination, to allow
+ it to properly take a word other than 'offset' as the word to work from.
+
+2008-06-23 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/pagination.php: greater than, less than
+ pagination symbol changed
+
+2008-06-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/messages/messages/list.php: system messages now fade out
+ after 3 seconds.
+
+2008-06-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ views/default/navigation/pagination.php: Introducing the annotation listing
+ functions.
+
+ * engine/lib/elgglib.php, engine/lib/metastrings.php: Introducing
+ elgg_view_annotation
+
+2008-06-22 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/profilelinks.php,
+ mod/profile/views/default/profile/userdetails.php: added a new profile links
+ view
+
+2008-06-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php: Fixes #72
+
+2008-06-21 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/spotlight/default.php: tweaks to the
+ spotlight
+
+ * mod/profile/views/default/profile/userdetails.php: a further temp tweak to
+ the profile layout
+
+ * mod/profile/views/default/profile/userdetails.php,
+ views/default/canvas/layouts/widgets.php: a couple of small, temp, profile
+ layout tweaks.
+
+2008-06-21 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Plugin init only called on sanitised installs where
+ installation is complete.
+
+2008-06-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/page_elements/spotlight.php: Improvements
+ to spotlight
+
+ * views/default/page_elements/spotlight.php,
+ views/default/spotlight/default.php: Plugins can set their own context
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Added licence example
+
+2008-06-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php, mod/profile/edit.php,
+ mod/profile/views/default/profile/edit.php: Fixed profile, and allowed admins
+ to edit other profiles
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php: Fixes #71
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php: Additional
+ fixes to #70
+
+2008-06-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php:
+ Changed the engine reference in the action
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php:
+
+ * actions/plugins/settings/save.php, engine/lib/plugins.php,
+ languages/en.php, views/default/admin/plugins_opt/plugin.php,
+ views/default/object/plugin.php: Closes #66: Per site plugin settings
+ configuration panel. Use the same technique as edit pages on widgets, i.e.
+ 1) Create a new view in your plugins view/default called
+ settings/PLUGINNAME/edit Where PLUGINNAME is the plugin directory, eg
+ "river" or "profile". 2) Place your edit code in edit.php, fields should
+ save to params[fieldname]. 3) The view will be passed $vars['entity'] which
+ holds any configuration values already set in the metadata. Note. Settings
+ are PER SITE.
+
+ * .../views/default/widgets/river_widget/edit.php,
+ .../default/widgets/river_widget_friends/edit.php: Using a different test to
+ handle metadata better
+
+ * languages/en.php, mod/river/manifest.xml,
+ views/default/admin/plugins_opt/plugin.php: Closes #67 : Added new displayed
+ field "licence"
+
+2008-06-20 misja <misja@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/dashboard/manifest.xml, mod/profile/manifest.xml: Adding manifest
+ files to plugins
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/plugins/disable.php, actions/admin/plugins/enable.php,
+ admin/plugins/index.php, engine/lib/plugins.php, languages/en.php,
+ views/default/admin/plugins.php, views/default/admin/plugins_opt/plugin.php,
+ views/default/object/plugin.php: Closes #20: Plugin management and config
+ panel http://trac.elgg.org/elgg/ticket/20
+
+ * actions/admin/site/update_basic.php: Added admin gatekeeper
+
+2008-06-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/profile/edit.php,
+ views/default/canvas/layouts/widgets.php: Widget gallery updates -
+ internationalised and more
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Further fixes #59
+
+ * mod/river/languages/en.php, mod/river/manifest.xml, mod/river/start.php:
+ Using new manifest code (via manifest.xml)
+
+ * engine/lib/plugins.php: Bypass plugin loading disable code
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php, engine/start.php: Closes
+ #60: Enable/disable plugins on a site by site basis
+ http://trac.elgg.org/elgg/ticket/60
+
+ * engine/lib/elgglib.php: Bugfixes on privileged code execution.
+
+ * engine/lib/database.php: Removed database gatekeepers to avoid chicken and
+ egg problems with privileged codeblock execution, and because it is too
+ problematic.
+
+ * engine/lib/plugins.php: Actually closes #60: Enable/disable plugins on a
+ site by site basis http://trac.elgg.org/elgg/ticket/60
+
+ * engine/lib/metadata.php, engine/lib/plugins.php: Closes #60:
+ Enable/disable plugins on a site by site basis
+
+2008-06-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: update_data now returns true on a successful
+ update.
+
+ * mod/profile/views/default/profile/userdetails.php: Let's use a slightly
+ smaller image on the main profile page ..
+
+ * mod/profile/graphics/defaultlarge.jpg,
+ mod/profile/graphics/defaultmedium.jpg,
+ mod/profile/graphics/defaultsmall.jpg, mod/profile/graphics/defaulttiny.jpg:
+ New default profile pics
+
+2008-06-20 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/plugins.php: Refs #61 - Added ability to find settings for
+ plugins other than the one you are in.
+
+ * engine/lib/plugins.php: Closes #61: Enable plugins to store site specific
+ configurations
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/canvas/default.php,
+ views/default/page_elements/header.php, views/foaf/pageshells/pageshell.php,
+ views/rss/canvas/default.php, views/rss/object/default.php,
+ views/rss/pageshells/pageshell.php, views/rss/user/default.php: Automatic RSS
+ feeds!
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Re-enabled database gatekeepers, please report
+ problems. Refs #3, #45
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/widgettest/start.php, .../views/default/widgets/widgettest/edit.php,
+ .../views/default/widgets/widgettest/view.php: Removing widgettest, which has
+ done its job.
+
+ * mod/river/languages/en.php, mod/river/start.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/view.php,
+ views/default/widgets/wrapper.php: Put titles back in their correct place for
+ widgets.
+
+ * engine/lib/system_log.php: System_log no longer adds double entries.
+
+ * engine/lib/river.php, views/default/river/wrapper.php: Minor improvement
+ to previous - river items now are wrapped in a number of divs that make sense
+ according to what they refer to
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/river/languages/en.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/edit.php,
+ .../default/widgets/river_widget_friends/view.php: Fixes #50
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php, .../views/default/river/ElggUser/update.php,
+ views/default/river/wrapper.php: Modified river functions to use a common
+ wrapper
+
+ * mod/profile/languages/en.php, .../views/default/river/ElggUser/update.php:
+ Profile updates now show up in the river.
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php:
+
+ * engine/lib/plugins.php, languages/en.php, mod/river/languages/en.php,
+ mod/river/start.php: Closes #59: Plugin manifest. See
+ register_plugin_manifest() & register_plugin_manifest_basic(). Ref #20.
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/profile.js, mod/profile/views/default/profile/metatags.php:
+ Removing the hoverover menu. Refs #58
+
+ * mod/profile/views/default/profile/css.php: CSS update for hoverover
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php, engine/lib/users.php,
+ views/default/admin/statistics_opt/online.php: Fixes #55 : "Users online now"
+ function
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/topmenu.php: Wired up search
+
+ * mod/profile/views/default/profile/hoverover.php,
+ .../views/default/profile/hoverover/actions.php,
+ .../views/default/profile/hoverover/links.php: Sorting hoverover links into
+ actions and plain links
+
+ * mod/profile/views/default/profile/hoverover.php: Whoops! Replacing
+ 'bwerdmuller' with $vars['entity']->username
+
+ * mod/profile/profile.js, mod/profile/start.php,
+ mod/profile/views/default/profile/css.php,
+ mod/profile/views/default/profile/hoverover.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/profile/menu.php,
+ mod/profile/views/default/profile/metatags.php,
+ mod/profile/views/default/user/user.php: Added a hover-over menu, which can
+ be added to by plugins.
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Ref #57
+
+ * engine/lib/river.php, languages/en.php, mod/river/start.php,
+ .../views/default/widgets/river_widget/edit.php,
+ .../views/default/widgets/river_widget/view.php,
+ .../default/widgets/river_widget_friends/edit.php,
+ .../default/widgets/river_widget_friends/view.php,
+ views/default/river/dashboard.php: Fixed #50: River widgets
+ http://trac.elgg.org/elgg/ticket/50
+
+ * mod/profile/views/default/profile/userdetails.php: Fixes #56
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php, friends/index.php, friends/of.php: The
+ friends pages now use listing functions; also fixed a minor bug in the
+ get_entities_from_relationship function.
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: *actually* fixes #48: Elgg_view_river wrapper
+ function http://trac.elgg.org/elgg/ticket/48
+
+ * engine/lib/river.php: Fixes #48: Elgg_view_river wrapper function
+ http://trac.elgg.org/elgg/ticket/48
+
+2008-06-19 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js, views/default/canvas/layouts/widgets.php,
+ views/default/css.php: final amends to popups
+
+2008-06-19 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Fixes #54 - 'Enabled' functionality needs to be
+ added to metadata, refs #53
+
+2008-06-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Minor change to the navigation placement on list
+ view.
+
+ * engine/schema/mysql.sql: Added 'enabled' field to annotations. Refs #51
+
+2008-06-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js, views/default/canvas/layouts/widgets.php,
+ views/default/css.php: widget description popups added
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Hopefully fixed default wwwroot. refs #51 -
+ Misja, if this works for you, could you please close the ticket?
+
+2008-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php,
+ engine/lib/entities.php: Fixes #15: Ban user functionality
+
+ * engine/lib/access.php, engine/schema/mysql.sql: Fixes #12: Active variable
+ on entities table. Update db schema.
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * dashboard/index.php: Introducing the dashboard!
+
+ * engine/lib/entities.php, engine/lib/languages.php, engine/lib/sites.php,
+ engine/lib/users.php, engine/lib/widgets.php: Removing some error notices
+
+2008-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Speculative fix for mac install
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/widgets/editwrapper.php: Better access
+ control labels.
+
+ * engine/lib/database.php: Re-commented out callpath_gatekeeper. refs #37
+
+2008-06-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: added default class for submit buttons
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/reorder.php, languages/en.php: Corrected widget panel save
+ messages.
+
+ * actions/widgets/reorder.php, engine/lib/widgets.php,
+ views/default/canvas/layouts/widgets.php, views/default/input/access.php:
+ Added widget handling.
+
+2008-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/user/index.php, views/default/admin/user_opt/search.php: Minor tweak
+ to make compatible with search form
+
+ * engine/lib/sites.php: Fixes #43: Site full text search over name,
+ description and url
+
+ * engine/lib/objects.php: Fixes #42: Object full text search on description
+
+ * admin/user/index.php, engine/lib/users.php, views/default/admin/user.php:
+ Further fixes to #41 with admin panel support
+
+ * admin/user/index.php, engine/lib/users.php, engine/schema/mysql.sql: Fixes
+ #41: User full text search. See caveats in function search_for_user()
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, views/default/navigation/pagination.php: Interface
+ tweak when no results are found.
+
+ * views/default/canvas/layouts/widgets.php: Descriptions are now registered
+ in widgets as a hidden field.
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/metadata.php,
+ engine/lib/relationships.php, engine/lib/sites.php, engine/lib/users.php,
+ languages/en.php, search/index.php, views/default/navigation/pagination.php:
+ Added generic listing and pagination functions
+
+2008-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/elgglib.php, languages/en.php, views/default/settings/system.php:
+ Fixes #18: Set default view type in admin http://trac.elgg.org/elgg/ticket/18
+
+2008-06-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js, views/default/canvas/layouts/widgets.php:
+ widget drag n drop
+
+2008-06-18 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/configuration.php, languages/en.php,
+ views/default/input/checkboxes.php, views/default/settings/system.php: Fixes
+ #17 - Debug mode toggle. Introduced unset_config() which is also called
+ automatically by set_config(). Also modified the view input/checkboxes to set
+ values on the checkbox.
+
+ * actions/admin/site/update_basic.php, actions/systemsettings/install.php,
+ engine/lib/configuration.php, languages/en.php,
+ views/default/settings/system.php: Fixes #19: Default language selector
+ http://trac.elgg.org/elgg/ticket/19
+
+2008-06-18 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/account/forms/login.php,
+ views/default/account/forms/register.php, views/default/css.php: tweaked
+ login boxes n buttons
+
+2008-06-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/widgets.php: Added GUIDs and handlers to the
+ widget panel
+
+2008-06-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../canvas/layouts/narrow_right_sidebar.php, views/default/css.php:
+ updated page layout
+
+2008-06-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, languages/en.php: Fixes #24 - Added a funky
+ display function called friendly_time($timestamp).
+
+ * engine/start.php: Fixed #36 - CSS now works on the install page.
+
+ * engine/lib/sessions.php: isloggedin() doesn't touch the session if we're
+ not fully installed yet.
+
+2008-06-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * install.php: - To use main site config Marcus Povey
+
+ * install.php: CLOSED - #36: CSS broken on initial install page.
+ http://trac.elgg.org/elgg/ticket/36
+
+ * engine/lib/elgglib.php, engine/lib/input.php, engine/lib/install.php,
+ engine/settings.example.php, engine/start.php, htaccess_dist,
+ languages/en.php, views/default/messages/sanitisation/htaccess.php,
+ views/default/messages/sanitisation/settings.php,
+ views/failsafe/messages/errors/error.php,
+ views/failsafe/messages/errors/list.php,
+ views/failsafe/messages/exceptions/exception.php,
+ views/failsafe/messages/list.php,
+ views/failsafe/messages/sanitisation/htaccess.php,
+ views/failsafe/messages/sanitisation/settings.php,
+ views/failsafe/pageshells/pageshell.php: CLOSED - #34: Install process must
+ be completely graphical http://trac.elgg.org/elgg/ticket/34
+
+2008-06-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Fixed #37. It turns out callpath_gatekeeper
+ worked fine; PHP 5.2 with the Zend Optimizer 3.2 does not, which was borking
+ our OSX MAMP installation. We're going to need a great big red warning box
+ for people installing on a Mac, alerting them to the fact that they'll need
+ to switch off the Optimizer.
+
+2008-06-17 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: updated css
+
+2008-06-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Removed references to callpath_gatekeeper.
+
+ * engine/lib/database.php: Disabling the gatekeeper for now. Reopened #3
+
+ * engine/start.php: We need actions to work when the installation hasn't
+ been settled. Refs #3
+
+2008-06-17 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, views/default/river/ElggRelationship/create.php,
+ views/default/river/ElggUser/login.php,
+ views/default/river/ElggUser/logout.php, views/default/river/dashboard.php,
+ views/default/river/shell.php: CLOSED - #35: Create specific river views for
+ dashboard http://trac.elgg.org/elgg/ticket/35
+
+2008-06-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php: is_installed now returns a much more
+ representative result. Refs #3
+
+ * engine/lib/filestore.php, mod/profile/actions/iconupload.php,
+ mod/profile/languages/en.php: Fixed #33 - all profile icons except for the
+ largest size are cropped to squares. Additionally, the image resampling
+ functions now take an extra boolean parameter to specify squareness (or not).
+
+2008-06-17 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/index.php, admin/plugins/index.php, admin/site/index.php,
+ admin/statistics/index.php, admin/user/index.php: pushed the admin panel
+ through the correct canvas area
+
+ * mod/apitest/index.php, mod/apitest/start.php,
+ mod/apitest/views/default/apitest/configform.php,
+ mod/apitest/views/default/apitest/main.php, mod/exporttest/index.php,
+ mod/exporttest/start.php, mod/exporttest/views/default/exporttest/main.php,
+ .../views/default/exporttest/outputxml.php, mod/guidbrowser/index.php,
+ mod/guidbrowser/languages/en.php, mod/guidbrowser/start.php,
+ .../views/default/guidbrowser/browser.php,
+ .../views/default/guidbrowser/entity.php,
+ .../views/default/guidbrowser/entity_full.php,
+ .../views/default/guidbrowser/newentity.php,
+ .../views/default/guidbrowser/prevnext.php: removed guid exporter, exporttest
+ and apitest from core and put them into the plugins folder
+
+2008-06-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php, engine/lib/plugins.php,
+ views/default/navigation/toolbox.php: Sticky menu items, but also, much more
+ intelligent context detection. Plugin authors need not bother with
+ set_context() any more - the context should be set automatically. This is
+ overruled by page handling settings, if set, which use the first element of
+ the URL to determine context. Fixes #32
+
+ * engine/lib/plugins.php: More intelligent context detection. Refs #32
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php, mod/profile/start.php,
+ views/default/navigation/toolbox.php: Registers contexts for each menu item.
+ Refs #32
+
+2008-06-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: CLOSED - #30: $CONFIG is not populated from
+ elggconfig or datalists http://trac.elgg.org/elgg/ticket/30
+
+2008-06-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/userdetails.php: updated profile interface
+
+ * views/default/css.php: updated css
+
+2008-06-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: CLOSED - #26: Lengthing metadata fields
+ http://trac.elgg.org/elgg/ticket/26
+
+2008-06-16 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * .../canvas/layouts/narrow_right_sidebar.php,
+ views/default/canvas/layouts/one_column.php,
+ views/default/canvas/layouts/two_column.php,
+ views/default/canvas/layouts/widgets.php: new canvas area added
+
+2008-06-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: CLOSED - #5: Boolean metadata values
+ http://trac.elgg.org/elgg/ticket/5
+
+ * engine/lib/xml-rpc.php: - Minor tweak to exception report. Marcus Povey
+
+ * engine/handlers/xml-rpc_handler.php, engine/lib/xml-rpc.php,
+ htaccess_dist, languages/en.php, views/xml/xml-rpc/output.php: CLOSED - #14:
+ XML-RPC handler http://trac.elgg.org/elgg/ticket/14
+
+2008-06-16 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js: updated interface js to fix submit button
+ bug
+
+2008-06-16 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/xml/pageshells/pageshell.php: Added Content-Length to XML pageshell
+ for compatibility with most XML based formats.
+
+ * engine/lib/sessions.php: CLOSED - #27: Standard login system to go through
+ PAM http://trac.elgg.org/elgg/ticket/27
+
+2008-06-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php: Search once again displays results. Fixes #28
+
+ * views/default/widgets/wrapper.php: Widget edit controls now only appear if
+ you can edit the widget in question.
+
+2008-06-15 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/widgets/wrapper.php: small tweak to the widget wrapper
+
+2008-06-13 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _graphics/icon_customise_drag.gif, _graphics/icon_customise_info.gif,
+ _graphics/icon_customise_remove.gif, javascript/initialise_elgg.js,
+ .../jquery/jquery-ui-personalized-1.5.packed.js,
+ views/default/canvas/layouts/widgets.php, views/default/css.php,
+ views/default/navigation/toolbox.php, views/default/page_elements/header.php:
+ updated and new stuff pertaining to the customise panel, new jquery also
+
+2008-06-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/profile/userdetails.php:
+
+ * views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php: - Fixed basic statistics
+ Marcus Povey
+
+ * actions/admin/user/ban.php:
+
+2008-06-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: added $order to docs
+
+2008-06-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed typo
+
+2008-06-13 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/entities.php: getAnnotations now
+ has an extra param $order
+
+2008-06-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Metadata now inherits its parent entity's
+ permissions
+
+ * engine/lib/widgets.php: using_widgets();
+
+ * views/default/input/access.php, views/default/widgets/editwrapper.php:
+ Added access controls to widgets and fixed the access control input
+
+2008-06-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/user/ban.php, actions/admin/user/delete.php,
+ languages/en.php, mod/profile/views/default/profile/userdetails.php,
+ views/default/admin/user.php: ASSIGNED - # 2: Administration panel
+ http://trac.elgg.org/elgg/ticket/2 - Added ban template and delete
+
+2008-06-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php: Fixed
+ update/insert issue on all top-level entities
+
+ * views/default/canvas/layouts/widgets.php: Added the stub for Pete's widget
+ reorderer
+
+ * engine/lib/widgets.php: Widget fix
+
+2008-06-13 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * admin/user/index.php: - Some thoughts Marcus Povey
+
+ * engine/lib/database.php, engine/lib/entities.php, languages/en.php,
+ .../views/default/guidbrowser/entity_full.php: Marcus Povey: CLOSED - # 9:
+ FilePluginFile not found http://trac.elgg.org/ticket/9
+
+ * admin/user/index.php, languages/en.php, views/default/admin/site.php,
+ views/default/admin/statistics_opt/online.php, views/default/admin/user.php,
+ views/default/admin/user_opt/search.php: - User search box Marcus Povey
+
+2008-06-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/statistics.php,
+ views/default/admin/statistics.php,
+ views/default/admin/statistics_opt/basic.php,
+ views/default/admin/statistics_opt/numentities.php,
+ views/default/admin/statistics_opt/online.php: - Moved statistics to their
+ own component views. Yay. Marcus Povey
+
+2008-06-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apitest/index.php, mod/exporttest/index.php,
+ mod/guidbrowser/index.php: put remaining core plugins through the canvas
+ views
+
+ * mod/profile/edit.php, mod/profile/editicon.php: piped remaining profile
+ pages through the canvas system
+
+ * views/default/editmenu.php, views/default/pageshell.php: removing some old
+ views
+
+2008-06-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/widgets/add.php, actions/widgets/save.php, engine/lib/widgets.php,
+ mod/profile/index.php, mod/profile/start.php, mod/widgettest/start.php,
+ .../views/default/widgets/widgettest/edit.php,
+ .../views/default/widgets/widgettest/view.php,
+ views/default/canvas/layouts/widgets.php, views/default/widgets/wrapper.php:
+ Widgets, including a test widget plugin
+
+ * views/default/canvas/layouts/widgets.php: The widget canvas layout now
+ automatically grabs widgets.
+
+ * engine/lib/elgglib.php: We only have one pageshell.
+
+ * engine/lib/widgets.php: Extra helpful widgets functions
+
+ * actions/widgets/save.php, engine/lib/widgets.php, languages/en.php,
+ views/default/widgets/editwrapper.php: Widget API changes, as well as edit
+ and action infrastructure
+
+2008-06-12 marcus <marcus@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/statistics.php:
+
+2008-06-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/object/widget.php: Added a simple widget alias so widgets
+ display automatically.
+
+ * views/default/canvas/layouts/one_column.php,
+ views/default/canvas/layouts/two_column.php,
+ views/default/canvas/layouts/widgets.php,
+ views/default/widgets/editwrapper.php, views/default/widgets/wrapper.php:
+ Widget wrapper, widget views
+
+2008-06-12 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/pageshells/pageshell.php: logic for not displaying toolbar
+ when non-logged
+
+ * views/default/welcome/logged_in.php: updated welcome pages
+
+ * views/default/page_elements/spotlight.php: new view for page spotlight
+
+ * views/default/welcome/logged_out.php: toolbar switched off for non-logged
+ users
+
+ * _graphics/skyscraper.gif: placeholder skyscaper ad for non logged-in pages
+
+ * views/default/canvas/layouts/one_column.php,
+ views/default/canvas/layouts/two_column.php, views/default/css.php,
+ views/default/pageshells/pageshell.php: new layout using canvas view
+
+2008-06-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Further documentation fixes.
+
+ * engine/lib/entities.php: Some extra entity documentation
+
+2008-06-12 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/statistics.php,
+ views/default/admin/site.php, views/default/admin/statistics.php: Marcus
+ Povey <marcus@dushka.co.uk> * Added stub for statistics * Added stub
+ statistics library
+
+2008-06-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/widgets.php: Added use_widgets function to register a context
+ for widget use.
+
+ * engine/lib/widgets.php: Added widgets library to core.
+
+2008-06-12 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/pageshells/pageshell_loggedout.php,
+ views/default/pageshells/pageshell_sidebar.php: removed old pageshells
+
+2008-06-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/admin.php, engine/lib/entities.php: Edit permissions changes
+ for admins
+
+2008-06-11 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * javascript/initialise_elgg.js: new subdirectory added to house the init js
+ for the page - feel free to move elsewhere
+
+ * views/default/css.php, views/default/navigation/toolbox.php,
+ views/default/navigation/topmenu.php, views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/pageshells/pageshell.php: latest interface stuff
+
+ * _graphics/footer_back.gif, _graphics/spacer.gif,
+ _graphics/temp_spotlight.gif: new images added
+
+ * _graphics/pagebackground.gif, _graphics/pagebackground.jpg: old images
+ removed
+
+2008-06-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/admin/site/update_basic.php: Marcus Povey <marcus@dushka.co.uk> *
+ Removed debug
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Default of
+ can_edit_entity trigger plugin hook set to true.
+
+ * actions/admin/site/update_basic.php, engine/lib/admin.php,
+ engine/lib/entities.php, engine/lib/sites.php, languages/en.php,
+ views/default/admin/site.php: Marcus Povey <marcus@dushka.co.uk> * Basic site
+ admin
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * All queries
+ echoed in debug mode
+
+ * views/default/admin/plugins.php: Marcus Povey <marcus@dushka.co.uk> *
+ Comments
+
+ * engine/lib/admin.php: Marcus Povey <marcus@dushka.co.uk> * Documentation
+
+ * admin/index.php, admin/plugins/index.php, admin/site/index.php,
+ admin/user/index.php, engine/lib/admin.php, engine/lib/elgglib.php,
+ languages/en.php, views/default/admin/main.php,
+ views/default/admin/main_opt/plugins.php,
+ views/default/admin/main_opt/site.php, views/default/admin/main_opt/user.php,
+ views/default/admin/plugins.php, views/default/admin/site.php,
+ views/default/admin/user.php: Marcus Povey <marcus@dushka.co.uk> * Initial
+ administration panel
+
+ * engine/lib/admin.php, engine/lib/elgglib.php:
+
+ * engine/lib/sessions.php: Marcus Povey <marcus@dushka.co.uk> * actions with
+ admin only support
+
+ * engine/lib/actions.php: Marcus Povey <marcus@dushka.co.uk> * actions with
+ admin only support
+
+ * admin/index.php, admin/plugins/index.php, admin/settings/index.php,
+ admin/users/index.php, engine/lib/admin.php: Marcus Povey
+ <marcus@dushka.co.uk> * Starting admin and relocating to the garden...
+
+2008-06-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php, mod/profile/icon.php,
+ mod/profile/views/default/profile/icon.php: Fixed icon cache issue.
+
+2008-06-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Marcus Povey <marcus@dushka.co.uk> * Introducing
+ admin_gatekeeper()
+
+2008-06-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, languages/en.php: Marcus Povey
+ <marcus@dushka.co.uk> * Debug added to site installation
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Spelling
+ error
+
+2008-06-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/output/tags.php: Sorting out tag links.
+
+ * engine/schema/mysql.sql: Added an explicit conversion to MyISAM in the db
+ tables when a FULLTEXT key is used.
+
+2008-06-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php:
+
+ * engine/lib/languages.php:
+
+2008-06-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: A better fix for language pack loading ...
+
+ * mod/profile/languages/en.php: Fixed a bad header in profile
+
+ * engine/lib/languages.php: Fix for language pack loading.
+
+2008-06-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Marcus Povey <marcus@dushka.co.uk> * Modified
+ elgg_echo to return $message_key if no translations found, meaning you will
+ always get _something_ from the command and will serve to prompt people for
+ missing translations.
+
+2008-06-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Error text change.
+
+ * engine/start.php: Languages are now loaded before the main engine starts.
+
+ * engine/lib/actions.php, engine/lib/configuration.php,
+ engine/lib/database.php, engine/lib/elgglib.php, engine/lib/entities.php,
+ engine/lib/export.php, engine/lib/filestore.php, engine/lib/install.php,
+ engine/lib/languages.php, engine/lib/notification.php,
+ engine/lib/objects.php, engine/lib/sessions.php, engine/lib/sites.php,
+ engine/lib/system_log.php, engine/lib/users.php, engine/start.php,
+ mod/apitest/start.php, mod/dashboard/start.php, mod/exporttest/start.php,
+ mod/guidbrowser/start.php, mod/profile/start.php: register_event_handler and
+ trigger_event have been renamed to register_elgg_event_handler and
+ trigger_elgg_event respectively.
+
+2008-06-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, languages/en.php: Marcus Povey
+ <marcus@dushka.co.uk> * Debug added to db connect
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Bugfix on
+ filestore
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Removed
+ debug
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Bugfixed
+ canEdit and isFullyLoaded
+
+2008-06-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Caching complete
+
+ * engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php:
+
+ * engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php: Marcus
+ Povey <marcus@dushka.co.uk> * Added the code to the correct method. Doh!
+
+ * engine/lib/entities.php, engine/lib/users.php:
+
+ * engine/lib/users.php:
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php:
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Added table
+ counter
+
+2008-06-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Annoying typo bugfix
+
+ * views/default/page_elements/header.php: Moving the location of metatags so
+ that we can add jQuery plugins after jQuery gets loaded.
+
+2008-06-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php:
+
+2008-06-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Fixed class instanceof errors
+
+2008-06-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php, engine/lib/users.php: Marcus Povey
+ <marcus@dushka.co.uk> * Reverted caching error
+
+ * engine/lib/entities.php, engine/lib/sites.php, engine/lib/users.php:
+ Marcus Povey <marcus@dushka.co.uk> * Added caching to entities. Please report
+ any problems.
+
+2008-06-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/users.php: Interim fix for user saving
+
+2008-06-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/messages/exceptions/exception.php: Marcus Povey
+ <marcus@dushka.co.uk> * Updated to show improved debug in debug mode.
+
+ * views/default/messages/exceptions/exception.php: Marcus Povey
+ <marcus@dushka.co.uk> * Updated to show improved debug in debug mode.
+
+2008-06-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Fixed previously-introduced entity save issue.
+
+ * engine/lib/entities.php: There are line breaks in my query. Hrm.
+
+ * engine/lib/entities.php: Fixed issue on save
+
+2008-06-06 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, languages/en.php: Marcus Povey <marcus@dushka.co.uk> *
+ More internationalisation
+
+ * languages/en.php, services/api/rest.php: Marcus Povey
+ <marcus@dushka.co.uk> * More internationalisation
+
+ * languages/en.php, services/export/handler.php: Marcus Povey
+ <marcus@dushka.co.uk> * More internationalisation
+
+ * languages/en.php, views/default/export/entity.php: Marcus Povey
+ <marcus@dushka.co.uk> * More internationalisation
+
+ * engine/lib/query.php, languages/en.php: Marcus Povey <marcus@dushka.co.uk>
+ * More internationalisation
+
+ * actions/register.php: Marcus Povey <marcus@dushka.co.uk> * Blank passwords
+ and blank second password no longer permitted
+
+ * engine/lib/entities.php, engine/lib/extender.php,
+ engine/lib/relationships.php, engine/lib/river.php,
+ engine/lib/system_log.php: Marcus Povey <marcus@dushka.co.uk> * Limit to
+ specific users and/or relationships
+
+2008-06-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php, engine/lib/users.php, mod/profile/start.php:
+ Fixes for metadata and for the run order.
+
+2008-06-05 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php:
+
+ * engine/lib/river.php: Marcus Povey <marcus@dushka.co.uk> * River now
+ passes performed_by_guid user as an object to sub views
+
+ * engine/lib/system_log.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * System log performs the id of the user who performed
+ a given action (or 0 if no user was logged in). Update your DB schema.
+
+ * views/default/river/shell.php:
+
+ * views/default/river/ElggUser/login.php,
+ views/default/river/ElggUser/logout.php:
+
+ * views/default/river/shell.php:
+
+ * languages/en.php, views/default/river/ElggUser/login.php,
+ views/default/river/ElggUser/logout.php, views/default/river/shell.php:
+ Marcus Povey <marcus@dushka.co.uk> * Some basic river code
+
+ * mod/profile/index.php, views/default/river/ElggUser/login.php,
+ views/default/river/ElggUser/logout.php, views/default/river/shell.php:
+ Marcus Povey <marcus@dushka.co.uk> *
+
+2008-06-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php, engine/settings.example.php: Removing assorted
+ errors which will allow for excellent river operation
+
+2008-06-05 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php:
+
+2008-06-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/filestore.php,
+ views/default/pageshells/pageshell.php: Further cleanup
+
+ * views/default/page_elements/header.php, views/default/pageshell.php:
+ Further sitename fix.
+
+2008-06-05 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, engine/lib/notification.php, languages/en.php:
+ Marcus Povey <marcus@dushka.co.uk> * More text internationalised
+
+2008-06-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Fixed a foreach bug.
+
+ * views/default/page_elements/header.php: Returned the site name to the
+ header.
+
+2008-06-05 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/cache.php, engine/lib/database.php,
+ engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/export.php,
+ engine/lib/extender.php, engine/lib/filestore.php, engine/lib/metadata.php,
+ engine/lib/objects.php, engine/lib/plugins.php, engine/lib/relationships.php,
+ engine/lib/sites.php, engine/lib/users.php, languages/en.php: Marcus Povey
+ <marcus@dushka.co.uk> * Partial internationalisation of exceptions
+
+2008-06-05 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/systemsettings/install.php, engine/lib/elgglib.php, install.php,
+ views/default/account/forms/register.php, views/default/settings/system.php:
+ Installation and initial account creation should now be stable.
+
+2008-06-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: A more elegant event passthrough mechanism.
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php,
+ engine/lib/languages.php, engine/lib/sessions.php, engine/lib/sites.php:
+ Fixed the installation labels issue!
+
+2008-06-04 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/query.php: Marcus Povey <marcus@dushka.co.uk> * Documentation
+ added to query.
+
+2008-06-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, engine/lib/install.php, engine/lib/sessions.php,
+ engine/lib/users.php, views/default/account/forms/login.php: Fixed actions
+ issues
+
+ * engine/lib/elgglib.php: Fixed the callpath_gatekeeper on Windows machines.
+
+2008-06-04 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/query.php:
+
+ * engine/lib/system_log.php:
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> * Belts
+ and braces
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> * Supports
+ multiple delivery methods as an array
+
+ * engine/lib/system_log.php: Marcus Povey <marcus@dushka.co.uk> * Minor
+ documentation
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> *
+ Documentation
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Minor
+ documentation
+
+ * engine/lib/query.php:
+
+ * engine/lib/query.php: Marcus Povey <marcus@dushka.co.uk> * More
+ documentation added
+
+ * engine/lib/database.php, engine/lib/query.php: Marcus Povey
+ <marcus@dushka.co.uk> * Moved Query object et al to their own file
+
+2008-06-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Minor doc
+ tweak
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ documentation
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Removed
+ superfluous event
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Debug
+ removed
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/metadata.php, engine/lib/relationships.php: Marcus Povey
+ <marcus@dushka.co.uk> * Fixed annotations not returning anything * Access
+ control on db now disabled when run from privileged code block.
+
+ * engine/lib/access.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ restricted mode
+
+2008-06-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: Added the metatags element into
+ the page header.
+
+2008-06-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php: Marcus Povey <marcus@dushka.co.uk> * Removed and
+ because you can always add it.
+
+ * engine/lib/access.php: Marcus Povey <marcus@dushka.co.uk> * Added access
+ control shorthand function. REPLACE THIS WHEN QUERY OBJECT COMPLETE
+
+ * engine/lib/database.php:
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed set
+ ommission
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Path check no
+ longer an event, forces path check
+
+ * engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php: Marcus
+ Povey <marcus@dushka.co.uk> * Update and creates now handled separately, with
+ the appropriate events triggered.
+
+ * action_handler.php, pagehandler.php: Marcus Povey <marcus@dushka.co.uk> *
+ Moved handlers to engine/handlers/ to avoid them running foul of the
+ callpath_gatekeeper.. UPDATE YOUR .htaccess!
+
+ * engine/handlers/action_handler.php, engine/handlers/pagehandler.php,
+ htaccess_dist: Marcus Povey <marcus@dushka.co.uk> * Moved handlers to
+ engine/handlers/ to avoid them running foul of the callpath_gatekeeper..
+ UPDATE YOUR .htaccess!
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Minor bugfix
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Missing $CONFIG from insert_data
+
+ * engine/lib/elgglib.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Privileged path check to privileged function
+ execution. ... i really don't like this exception stuff. I think it would be
+ better to say that you can't access stuff you can't access.
+
+2008-05-30 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Removed debug
+
+ * engine/lib/database.php, engine/lib/elgglib.php: Marcus Povey
+ <marcus@dushka.co.uk> * Bugfix on gatekeeper and forcing data functions to
+ privileged only
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Renamed
+ limited to strict
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Improved
+ callpath_gatekeeper
+
+2008-05-29 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/export/entity.php: Marcus Povey <marcus@dushka.co.uk> * Removed
+ foaf/export since this has been superceded.
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Turns out i
+ needed reflection afterall.
+
+2008-05-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/friends/list.php, views/foaf/pageshells/pageshell.php: Added
+ FOAF
+
+ * views/default/canvas/layouts/one_column.php: Correcting one column font
+ size issue
+
+2008-05-29 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Introducing
+ callpath_gatekeeper
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Simplified
+ call_gatekeeper()
+
+ * engine/lib/elgglib.php:
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Introducing
+ call_gatekeeper()
+
+2008-05-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/friends/add.php, actions/friends/remove.php,
+ engine/lib/social.php, engine/lib/users.php, friends/index.php,
+ friends/of.php, languages/en.php, mod/profile/views/default/profile/menu.php,
+ mod/profile/views/default/profile/userdetails.php,
+ mod/profile/views/default/user/user.php, views/default/friends/list.php:
+ Added friends pages and related functionality
+
+2008-05-29 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php:
+
+2008-05-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/user/user.php: Slight change to the user view in
+ profiles, to facilitate the friends page
+
+2008-05-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Import now
+ does simple checks for failure
+
+ * engine/lib/opendd.php: Marcus Povey <marcus@dushka.co.uk> * Sanity checks
+ added to OpenDD import
+
+ * mod/exporttest/views/default/exporttest/main.php:
+
+2008-05-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Query fixes for previous.
+
+ * engine/lib/tags.php: Adding support for db prefixes to previous
+
+2008-05-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/odd.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ gatekeeper
+
+ * mod/exporttest/views/default/exporttest/main.php: Marcus Povey
+ <marcus@dushka.co.uk> * export test import set to use new import action
+
+2008-05-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php, views/default/output/tagcloud.php: Added new tagcloud
+ functions
+
+2008-05-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/import/odd.php, languages/en.php: Marcus Povey
+ <marcus@dushka.co.uk> * Importing ODD action added
+
+2008-05-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * search/index.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php: Subtypes and object types for search.
+
+2008-05-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Minor doc
+ update
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Minor doc
+ update
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed Where,
+ WhereStatic and WhereSet
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ order/limit
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed tables
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ spacing issue
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Throws
+ exception if fields are missing on a select query
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ $CONFIG->prefix now $CONFIG->dbprefix * Exception thrown on missing tables
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Fixed ACL
+ where "where" is missing * Added catch for exceptions
+
+2008-05-28 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/one_column.php: small tweak to the canvas
+ view - this is temp
+
+2008-05-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: A further fix for previous.
+
+ * engine/lib/sessions.php: Solidifying the login() function so that the
+ session data is always consistent.
+
+ * actions/login.php, engine/lib/sessions.php: Revamped the login functions
+ to separate login from authentication.
+
+ * engine/lib/sessions.php: login() can now be extended by other
+ authentication methods. TODO: wrap this up with the PAM functionality.
+
+ * engine/lib/sessions.php: Adding login and logout events.
+
+2008-05-27 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Fixed DB
+ code
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ incorrect event trigger code - problem caused by incorrect is_array clause on
+ event trigger functions
+
+2008-05-27 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/input.php, engine/lib/social.php: create a new social library
+ in the engine. Moved string parsing for links to input.php and removed
+ converting strings to tags from the shouts plugin and added them to the
+ social library.
+
+2008-05-27 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Marcus Povey <marcus@dushka.co.uk> * Offset
+ incremented each pass, will no longer get stuck in the infinite loop
+
+ * engine/lib/system_log.php: Marcus Povey <marcus@dushka.co.uk> *
+ Restrictions checked
+
+ * engine/lib/river.php: Marcus Povey <marcus@dushka.co.uk> * Views looked
+ for now river/$CLASSNAME/$EVENT
+
+2008-05-26 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: new fixed width
+
+ * views/default/css.php: fixed width page
+
+ * vendors/jquery/init.js, vendors/jquery/jquery-1.2.4a.js,
+ vendors/jquery/jquery-1.2.6.pack.js, vendors/jquery/jquery.js,
+ vendors/jquery/ui.base.js, vendors/jquery/ui.draggable.js,
+ vendors/jquery/ui.droppable.js, vendors/jquery/ui.sortable.js: new jquery,
+ removed old
+
+ * _graphics/footer.gif, _graphics/header.gif, _graphics/sidebar-bottom.gif,
+ _graphics/sidebar-top.gif: removed old graphics
+
+ * _graphics/pagebackground.gif, _graphics/pagebackground.jpg: pics needed
+
+ * views/default/css.php, views/default/navigation/toolbox.php,
+ views/default/page_elements/header.php, views/default/reset.css: simple
+ default theme as a starting point
+
+2008-05-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/canvas/layouts/one_column.php: added a new canvas area to
+ views, this is for plugins to layout their content.
+
+2008-05-26 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fix for elgg_view_layout
+
+ * engine/lib/elgglib.php: Added layout manager to elgglib
+
+2008-05-26 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: added some relationship helper functions for
+ relationship type 'attached'
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Slight tweak to the entities
+ getEntitiesFromRelationship method. We need inverse relationships!
+
+ * views/default/pageshells/pageshell.php: Sticking the sidebar somewhere for
+ now
+
+ * engine/lib/access.php, languages/en.php: Added a plugin hook and
+ translations for previous.
+
+ * engine/lib/access.php, views/default/input/access.php: Introducing a
+ visual widget for inputting access permissions.
+
+2008-05-23 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/pageshells/pageshell.php: reverted
+ back to a simple layout for now
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/views/default/user/user.php: Similar profile fix to previous
+
+2008-05-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/extender.php, engine/lib/metadata.php,
+ engine/lib/relationships.php, engine/lib/river.php,
+ engine/lib/system_log.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Support for river entries
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/languages/en.php, mod/profile/views/default/profile/edit.php:
+ You can now edit your profile again ..
+
+2008-05-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * View debug
+ messages now echoed to system log instead of to the screen. * Minor doc fix
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Removing double sanitise_string on save metadata
+
+2008-05-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Added
+ access_id
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Removing conflict over 'event' keyword in views
+
+ * engine/lib/elgglib.php: ... and again ...
+
+2008-05-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/system_log.php:
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fix for previous
+
+ * mod/profile/actions/iconupload.php, mod/profile/icon.php,
+ mod/profile/views/default/profile/icon.php: Introducing the 'tiny' profile
+ icon size
+
+2008-05-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/extender.php,
+ engine/lib/relationships.php, engine/lib/system_log.php, engine/start.php:
+ Marcus Povey <marcus@dushka.co.uk> * System log event code
+
+2008-05-23 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Similar tweak as for events, but with plugin hooks
+
+ * engine/lib/elgglib.php: trigger_event now passes the actual event details
+ on 'all'
+
+ * engine/lib/entities.php: An improvement to the clearMetadata method on
+ ElggEntities - specify a name and it only clears metadata of that type.
+
+2008-05-22 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Marcus Povey <marcus@dushka.co.uk> * Added system log to
+ prerequisite loader
+
+ * engine/lib/system_log.php: Marcus Povey <marcus@dushka.co.uk> * Can now
+ run
+
+ * engine/lib/river.php, engine/lib/system_log.php: Marcus Povey
+ <marcus@dushka.co.uk> * Moving back to desktop
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Added
+ system_log table
+
+2008-05-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Removing duplicate metastring issue
+
+2008-05-22 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * undid
+ previous as it was a dumb idea
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> *
+ Clarification: Trigger event can only be passed a context related to a
+ ElggEntity
+
+2008-05-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Rearranging events: stage 1
+
+2008-05-22 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/river.php: Marcus Povey <marcus@dushka.co.uk> * River stub for
+ the pub.
+
+2008-05-22 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pagehandler.php: The context is now set automatically when the
+ page handler is in use.
+
+ * engine/lib/pageowner.php: Plugins can now set context
+
+2008-05-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: And again
+
+ * engine/lib/entities.php: Minor fix for setting metadata
+
+2008-05-21 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Marcus Povey <marcus@dushka.co.uk> * Tag cloud for
+ files
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Introducing
+ find_metadata as a counterpart to get_entities_from_metadata
+
+2008-05-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/relationships.php: Entities now clear
+ all associated relationships on delete
+
+ * engine/lib/relationships.php: Added function to remove all entity
+ relationships of a particular kind associated with an entity
+
+ * engine/lib/access.php: Creating the constants ACCESS_PUBLIC,
+ ACCESS_PRIVATE, ACCESS_LOGGED_IN
+
+2008-05-21 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/tags.php: Marcus Povey <marcus@dushka.co.uk> * Added tag cloud
+ functions
+
+2008-05-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/iconupload.php, mod/profile/icon.php: Assorted profile
+ icon fixes
+
+ * engine/lib/entities.php: Metadata can now be added to before an entity is
+ saved. It will be added to the db on save.
+
+ * views/default/pageshells/pageshell.php: Allowing for further extension to
+ the sidebar
+
+ * engine/lib/elgglib.php, views/default/pageshells/pageshell.php: Added
+ easier sidebar population
+
+2008-05-20 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Introducing
+ get_resized_image_from_existing_file * Consolidated
+ get_resized_image_from_uploaded_file to use it
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ get_subtype_id now shortcircuits returning unmodified $subtype if $subtype is
+ ""
+
+ * engine/lib/objects.php, engine/lib/sites.php, engine/lib/users.php: Marcus
+ Povey <marcus@dushka.co.uk> * Fixed direct load by guid issue
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ strange regression in get_entities, now returns all stuff even if subtype is
+ blank.
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Revised
+ matrix generation on filestore
+
+2008-05-20 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Removing a PHP notice
+
+2008-05-20 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/atom.php, engine/lib/export.php, engine/lib/opendd.php,
+ views/atom/export/entity.php, views/atom/export/metadata.php,
+ views/atom/export/relationship.php, views/atom/pageshells/pageshell.php:
+ Marcus Povey <marcus@dushka.co.uk> * reverted previous
+
+ * engine/lib/atom.php, engine/lib/export.php, engine/lib/opendd.php,
+ views/atom/export/entity.php, views/atom/export/metadata.php,
+ views/atom/export/relationship.php, views/atom/pageshells/pageshell.php:
+ Marcus Povey <marcus@dushka.co.uk> * Committed abortive Atom wrapper... we
+ need to support different import/export
+
+ * engine/start.php: Marcus Povey <marcus@dushka.co.uk> * Debug mode now
+ lists libraries loaded
+
+ * services/export/handler.php: Marcus Povey <marcus@dushka.co.uk> *
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Introducing:
+ current_page_url()
+
+2008-05-19 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php, engine/start.php,
+ views/default/pageshells/pageshell.php: Fixing the install process, step 1.
+
+ * engine/lib/sessions.php: Session init now fails if the db hasn't been
+ installed.
+
+ * engine/start.php: Elgg will now enter light mode (no plugins are loaded,
+ system init doesn't happen) if the parameter lightmode = "true"
+
+2008-05-16 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * services/export/handler.php: Marcus Povey <marcus@dushka.co.uk> * Minor
+ clarification
+
+ * endpoints/rest.php, mod/apitest/start.php, services/api/rest.php: Marcus
+ Povey <marcus@dushka.co.uk> * Refactored API under services
+
+ * export/handler.php, htaccess_dist, services/export/handler.php: Marcus
+ Povey <marcus@dushka.co.uk> * Refactored export to services/export for future
+ expansion of other rest style endpoints
+
+2008-05-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/pageshells/pageshell.php: Removed the double body issue to
+ prevent confusion
+
+ * admin/index.php, admin/plugins/index.php, admin/settings/index.php,
+ admin/users/index.php, languages/en.php, mod/blog/actions/add.php,
+ mod/blog/actions/comments/add.php, mod/blog/actions/comments/delete.php,
+ mod/blog/actions/delete.php, mod/blog/actions/edit.php, mod/blog/add.php,
+ mod/blog/edit.php, mod/blog/everyone.php, mod/blog/index.php,
+ mod/blog/languages/en.php, mod/blog/read.php, mod/blog/start.php,
+ mod/blog/views/default/blog/css.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/blog/notfound.php,
+ mod/blog/views/default/blog/view.php,
+ mod/blog/views/default/object/blog-comment.php,
+ mod/blog/views/default/object/blog-comments.php,
+ mod/blog/views/default/object/blog.php, mod/file/actions/download.php,
+ mod/file/actions/upload.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/languages/en.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/file/file.php, mod/file/views/default/file/footer.php,
+ mod/file/views/default/file/icon.php, mod/file/views/default/file/upload.php,
+ mod/file/world.php, mod/tasklist/index.php, mod/tasklist/start.php,
+ mod/tasklist/views/default/tasklist/item.php,
+ mod/tasklist/views/default/tasklist/main.php,
+ mod/tasklist/views/default/tasklist/newtask.php,
+ views/default/admin/main.php, views/default/editmenu.php,
+ views/default/navigation/topmenu.php: Moving some stuff into the plugins
+ repo, where it belongs.
+
+ * engine/lib/users.php: Introducing getFriendsObjects to ElggUser
+
+2008-05-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Debug mode
+ causes queries that return no data to issue a warning
+
+ * engine/lib/opendd.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ ommission: setPublished
+
+2008-05-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/opendd.php: Added version
+
+ * engine/lib/opendd.php: Marcus Povey <marcus@dushka.co.uk> * Including XML
+ so it stands as a standalone lib
+
+ * engine/lib/export.php, engine/lib/opendd.php: Marcus Povey
+ <marcus@dushka.co.uk> * Moved ODD stuff to its own lib [untested]
+
+ * views/json/pageshells/pageshell.php: Marcus Povey <marcus@dushka.co.uk> *
+ Being "strictly correct" by returning application/json for json content type.
+
+2008-05-09 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * vendors/jquery/init.js, vendors/jquery/jquery-1.2.4a.js,
+ vendors/jquery/ui.base.js, vendors/jquery/ui.draggable.js,
+ vendors/jquery/ui.droppable.js, vendors/jquery/ui.sortable.js: jquery
+ framework
+
+ * views/default/css.php, views/default/navigation/topmenu.php,
+ views/default/page_elements/header.php,
+ views/default/pageshells/pageshell.php: drag n drop interface test
+
+2008-05-08 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Moved shortcut so that subtype of "" doesn't cause fail.
+
+2008-05-07 pete <pete@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php:
+
+ * views/default/css.php, views/default/navigation/toolbox.php,
+ views/default/pageshells/pageshell.php,
+ views/default/pageshells/pageshell_sidebar.php: new toolbar menu
+
+2008-05-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Removed a debug message
+
+ * engine/lib/entities.php: A fix for get_entities, which was borking if the
+ subtype of object specified didn't exist.
+
+ * engine/lib/configuration.php, engine/lib/sessions.php,
+ engine/lib/sites.php: Configuration prerequisites are now loaded on boot time
+ rathr than init
+
+ * engine/lib/filestore.php: The filestore is no longer so greedy about its
+ init function, and therefore gets the correct filestore location
+
+ * engine/lib/configuration.php: A small validation check
+
+2008-05-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: reversed my last tweak, another solution will
+ be required
+
+2008-05-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php, views/default/navigation/topmenu.php: Adding a user
+ icon to the top menu
+
+2008-05-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: small tweak to get annotations
+
+2008-05-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Minor bug fix in configuration
+
+ * engine/start.php: Update to start.php to fix bug on installation
+
+ * actions/systemsettings/install.php: Corrected an issue with actions.
+
+ * actions/systemsettings/install.php: Fixed a bug where the site was private
+ unless you were logged out ...
+
+ * actions/systemsettings/install.php, engine/lib/configuration.php,
+ engine/lib/database.php, engine/lib/entities.php, engine/lib/install.php,
+ engine/lib/languages.php, engine/lib/metadata.php,
+ engine/lib/relationships.php, engine/lib/users.php, engine/start.php,
+ install.php, languages/en.php, views/default/navigation/toolbox.php,
+ views/default/pageshells/pageshell_sidebar.php,
+ views/default/settings/install.php, views/default/settings/system.php: The
+ system now uses the site GUID to get and set entity data. Also, installation
+ is a great deal more visual.
+
+2008-05-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> * Now
+ registers email handler (oops)
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/foaf/export/entity.php: Marcus Povey <marcus@dushka.co.uk> * FOAF
+ view uses correctly formatted UUID
+
+ * views/foaf/export/entity.php, views/foaf/pageshells/pageshell.php: Marcus
+ Povey <marcus@dushka.co.uk> * Added prototype FOAF view
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Establishing $CONFIG->site
+
+ * engine/lib/install.php: Further changes to the site install procedure.
+
+ * engine/lib/elgglib.php, engine/lib/install.php, engine/lib/sites.php,
+ engine/schema/mysql.sql: Major site config changes
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/actions/upload.php: Marcus Povey <marcus@dushka.co.uk> * Uploads
+ and downloads now work.
+
+ * engine/lib/filestore.php:
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Schema update for configuration
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Bugfixing
+ my sillyness
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php: Fixed a bug in countAnnotations
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php:
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Bugfix
+
+ * mod/file/actions/download.php, mod/file/languages/en.php: Marcus Povey
+ <marcus@dushka.co.uk> * Download support
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Added tell
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Added eof
+ functionality to datastore
+
+ * mod/file/actions/download.php, mod/file/start.php,
+ mod/file/views/default/file/file.php: Marcus Povey <marcus@dushka.co.uk> *
+ Download page added
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Docs for previous
+
+ * engine/lib/actions.php: Added GET variable processing to the action
+ handler.
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/start.php, mod/file/views/default/file/file.php: Marcus Povey
+ <marcus@dushka.co.uk> * Name tweaks
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Get and set per-site configuration values
+ from the database
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/actions/upload.php: Marcus Povey <marcus@dushka.co.uk> * Minor
+ tweak
+
+ * mod/file/actions/upload.php: Marcus Povey <marcus@dushka.co.uk> * Error
+ handling
+
+ * mod/file/actions/upload.php: Marcus Povey <marcus@dushka.co.uk> * Save to
+ get the GUID
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX: Typo
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: $CONFIG->dbprefix, not $CONFIG->prefix
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php, mod/file/upload.php: Marcus Povey
+ <marcus@dushka.co.uk> * Bugfix: uses the correct filename
+
+2008-05-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Introducing gatekeeper();
+
+ * engine/lib/elgglib.php: Introducing run_function_once($functionname,
+ $timelastupdatedcheck).
+
+2008-05-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/actions/upload.php, mod/file/index.php, mod/file/start.php,
+ mod/file/views/default/file/file.php, mod/file/views/default/file/icon.php:
+ Marcus Povey <marcus@dushka.co.uk> * Using mime types
+
+ * engine/lib/database.php, engine/lib/entities.php: Marcus Povey
+ <marcus@dushka.co.uk> * Fixed regression on custom class loader
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Now
+ registers ElggFile for 'object' & 'file'
+
+2008-04-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Fix for previous fix for previous fix
+
+ * engine/lib/entities.php: Slight correction to the count entities from
+ relationship alias in ElggEntity
+
+ * engine/lib/relationships.php: Fix for previous fix
+
+ * engine/lib/relationships.php: Fix for previous
+
+ * engine/lib/entities.php, engine/lib/relationships.php: Fixing some
+ functions relating to relationships
+
+2008-04-30 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Minor tweak:
+ removed $ns references from ODD __toString()
+
+ * engine/lib/export.php, engine/lib/relationships.php: Marcus Povey
+ <marcus@dushka.co.uk> * Changed "verb" to "type" in relationship, as
+ described in ODD spec 0.5
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> * Removed
+ get_notifications... you should provide a list of guid's yourself
+
+ * mod/file/views/default/file/footer.php: Marcus Povey <marcus@dushka.co.uk>
+ * Simple footer
+
+2008-04-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: get_entities returns false if the subtype name
+ couldn't be found.
+
+2008-04-30 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/file/actions/upload.php, mod/file/friends.php, mod/file/index.php,
+ mod/file/languages/en.php, mod/file/start.php, mod/file/upload.php,
+ mod/file/views/default/file/file.php, mod/file/views/default/file/footer.php,
+ mod/file/views/default/file/upload.php, mod/file/world.php: Marcus Povey
+ <marcus@dushka.co.uk> * First draft file upload
+
+2008-04-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/relationships.php: Introducing
+ getEntitiesFromRelationship and countEntitiesFromRelationship methods on
+ ElggEntity
+
+ * mod/blog/views/default/object/blog.php: Fixed a (presumably transient)
+ comments issue in blogs.
+
+ * mod/blog/views/default/object/blog.php: Temporary style fix
+
+ * mod/blog/views/default/object/blog.php: Updating blog view to involve
+ icons
+
+2008-04-30 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> *
+ ElggDiskFilestore now uses matrix formed from username, and supports paths.
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> *
+
+2008-04-30 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Resizing images now resamples them for better
+ clarity.
+
+ * mod/profile/actions/iconupload.php: Better error reporting on previous.
+
+ * mod/profile/actions/iconupload.php: Fixed profile resizing issue
+
+ * engine/lib/filestore.php: Previous now returns false.
+
+ * engine/lib/filestore.php: Fixed image resizing issue, corrected function
+ to create a jpeg using output buffering rather than a temporary file
+
+2008-04-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/page_elements/header.php: added jquery to the main pageshell
+ header
+
+ * vendors/jquery/jquery.js: Uploaded the latest jquery into core.
+
+2008-04-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/profile/actions/iconupload.php,
+ mod/profile/editicon.php, mod/profile/graphics/defaultlarge.jpg,
+ mod/profile/graphics/defaultmedium.jpg,
+ mod/profile/graphics/defaultsmall.jpg, mod/profile/icon.php,
+ mod/profile/languages/en.php, mod/profile/start.php,
+ mod/profile/views/default/profile/editicon.php,
+ mod/profile/views/default/profile/icon.php,
+ mod/profile/views/default/user/user.php: Introducing profile icons.
+
+ * engine/lib/filestore.php: Fix for make_file_matrix
+
+ * engine/lib/filestore.php: Filenames fix
+
+ * engine/lib/filestore.php: Non-invasive fix for previous.
+
+ * engine/lib/filestore.php: Introducing get_uploaded_file and
+ get_resized_image_from_uploaded_file.
+
+ * engine/lib/extender.php: Sledgehammer tactics on can_edit_extender
+
+ * engine/lib/extender.php: Attempt at an extender canEdit fix
+
+ * engine/lib/annotations.php: Fixed typo
+
+ * engine/lib/extender.php: Added getEntity() to ElggExtender
+
+ * engine/lib/annotations.php: Fixed a minor SQL error in annotation sum
+ functions
+
+ * engine/lib/annotations.php: Minor fix involving ratings and get
+ annotations
+
+2008-04-29 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Import functionality works, removed update but no change error on update
+
+ * engine/lib/extender.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Missing name
+
+ * engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Fixed bug in
+ getOwner override
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ incorrect if condition logic
+
+2008-04-29 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/calendar.php: small tweak to the calendar input
+
+2008-04-29 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/input/calendar.php: Replacing strip_string with
+ sanitise_string in the calendar input
+
+2008-04-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/notification.php: Marcus Povey <marcus@dushka.co.uk> * Notify
+ and email notify added (not tested) ... still unsure about get_notify_list,
+ attempted a number of options ... not sure if this is as simple as it could
+ be
+
+2008-04-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/vendors/calendarpopup/CalendarPopup.js,
+ views/default/input/calendar.php, views/default/output/calendar.php: Calendar
+ popup input for dates
+
+ * views/default/output/tags.php: Removing undefined index notice
+
+ * views/default/welcome.php: Removed annoying reference to $vars['name'] in
+ the welcome view
+
+ * mod/profile/actions/edit.php, mod/profile/languages/en.php,
+ mod/profile/start.php, mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/user/user.php: The profile now has fields set in
+ start.php. TODO: make those user editable, once we have the admin panel ...
+
+ * views/default/output/tags.php: The tag output view can now use
+ $vars['value'], bringing it in line with all the others
+
+ * views/default/input/email.php, views/default/output/email.php: Email
+ address input and output fields
+
+2008-04-25 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php: Marcus Povey <marcus@dushka.co.uk> * Removed minor
+ config stuff
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Crude
+ deleteall method added
+
+ * htaccess_dist: Marcus Povey <marcus@dushka.co.uk> * JSON & PHP export
+ rewrite rules
+
+ * views/json/export/entity.php, views/json/export/metadata.php,
+ views/json/export/relationship.php, views/php/export/entity.php,
+ views/php/export/metadata.php, views/php/export/relationship.php: Marcus
+ Povey <marcus@dushka.co.uk> * JSON & PHP Export modes
+
+ * engine/lib/extender.php, engine/lib/relationships.php: Marcus Povey
+ <marcus@dushka.co.uk> * Metadata and relationships can now be accessed as
+ arrays
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Objects can
+ be accessed as arrays
+
+2008-04-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Adding get_entities_from_metadata_multi
+
+2008-04-25 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * export/handler.php, htaccess_dist, odd/handler.php: Marcus Povey
+ <marcus@dushka.co.uk> * Renamed /odd to /export since the handler can now do
+ so much more...
+
+2008-04-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/editmenu.php: Editmenu stub view
+
+2008-04-25 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Marcus Povey <marcus@dushka.co.uk> * Using ODD view by
+ default
+
+ * odd/handler.php, views/default/export/entity.php,
+ views/default/export/metadata.php, views/default/export/relationship.php,
+ views/odd/export/entity.php, views/odd/export/metadata.php,
+ views/odd/export/relationship.php, views/odd/pageshells/pageshell.php: Marcus
+ Povey <marcus@dushka.co.uk> * Updated ODD handler, now uses views * Normal
+ and ODD view for all data items... cute eh? :)
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Using common
+ attribute type var to determine ODD export type for uuid generation, now
+ attributes can support a uuid
+
+ * .../views/default/guidbrowser/entity_full.php: Marcus Povey
+ <marcus@dushka.co.uk> * Uses guid_one as well
+
+ * odd/handler.php: Marcus Povey <marcus@dushka.co.uk> * Removed session
+ debug
+
+ * action.php, engine/lib/api.php, engine/lib/elgglib.php,
+ views/default/api/output.php, views/json/api/output.php,
+ views/json/pageshells/pageshell.php, views/php/api/output.php,
+ views/php/pageshells/pageshell.php, views/xml/api/output.php,
+ views/xml/pageshells/pageshell.php: Marcus Povey <marcus@dushka.co.uk> *
+
+ * endpoints/rest.php: Marcus Povey <marcus@dushka.co.uk> * API converted to
+ use views system
+
+2008-04-25 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fix to the debug messages for elgg_view
+
+2008-04-25 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/export.php: Marcus Povey
+ <marcus@dushka.co.uk> * Removed all namespacing code
+
+2008-04-24 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Namespace
+ support added to export
+
+2008-04-24 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * version.php: Minor edit to the version number spec
+
+ * engine/lib/elgglib.php, engine/lib/version.php, engine/schema/mysql.sql,
+ version.php: The beginnings of a db upgrade system. See lib/version.php,
+ /version.php and the datalist functions in elgglib.php.
+
+2008-04-24 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Removed header
+ object
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Unhandled
+ elements issue a warning on import
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Removed ODD
+ header element
+
+ * engine/lib/entities.php:
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/extender.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Generated now published * Metadata and annotations
+ use time from db * Attributes use time from entity
+
+2008-04-23 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Improved
+ documentation
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Filesize
+ support added, now possible to get all file contents with
+ $file->read($file->size());
+
+2008-04-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/profile/actions/edit.php, mod/profile/edit.php, mod/profile/index.php,
+ mod/profile/languages/en.php, mod/profile/start.php,
+ mod/profile/views/default/profile/edit.php,
+ mod/profile/views/default/user/user.php: Introduced profile plugin
+
+ * engine/lib/entities.php, engine/lib/metadata.php, engine/lib/users.php:
+ Fixed user GUID and multiple metadata bugs
+
+ * engine/lib/sessions.php: Session init now gets priority
+
+ * engine/lib/metadata.php: Improving the metadata search in cases where
+ users have multiple tags with the same text
+
+ * mod/blog/start.php: Added doc for blog URL function
+
+ * engine/lib/entities.php: Minor update to the default entity URLs
+
+ * engine/lib/elgglib.php: Fixed an inconsistency in elgg_view_entity
+
+2008-04-21 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php:
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Numerous
+ bugs fixed
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * No longer
+ saves file automatically, this gives you the option as to how to handle files
+ - either as proper objects or adhoc file handles which still use the
+ filestore code.
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Save and
+ Load (read/write) work * TODO: Loaded can not be loaded via name, only
+ guid... correct?
+
+2008-04-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: can_edit_entity now always returns false if the
+ user is logged out
+
+2008-04-21 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Marcus Povey <marcus@dushka.co.uk> * Removed tiny
+ debug output
+
+2008-04-21 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php: Fix for lingering sessions with nonexistent users
+
+ * engine/schema/mysql.sql: Removing extraneous character from schema
+
+ * engine/schema/mysql.sql: Added site_guid to the entities table
+
+2008-04-18 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/filestore.php: Marcus Povey <marcus@dushka.co.uk> * Unfinished
+ filestore code
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * Cleaned up doc
+
+2008-04-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: If you feed an entity a metadata array, it
+ assumes multiple values are allowed
+
+ * views/default/input/tags.php: Updated input tag field to take in strings
+ as well as arrays
+
+ * mod/blog/views/default/object/blog.php: Link fix
+
+ * htaccess_dist: Minor page handler mod_rewrite fix
+
+2008-04-18 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/exporttest/index.php, mod/guidbrowser/index.php: Marcus Povey
+ <marcus@dushka.co.uk> * Hardcoded sessions no longer necessary now that login
+ works
+
+2008-04-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/views/default/object/blog-comment.php,
+ mod/blog/views/default/object/blog.php,
+ views/default/account/forms/register.php: Removing references to action.php
+
+ * action_handler.php: Searunner?!
+
+2008-04-18 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * action_handler.php, htaccess_dist: Marcus Povey <marcus@dushka.co.uk> *
+ Fixed broken actions code on linux
+
+2008-04-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Removing previous
+
+2008-04-18 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Fixed ODD mod-rewrite rules
+
+2008-04-18 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Action debug
+
+ * htaccess_dist, mod/blog/start.php: Fix for page handler bugs
+
+2008-04-17 misja <misja@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Misja Hoebe <misja@curverider.co.uk> Clean up svn cruft
+
+2008-04-16 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, search/index.php: Introducing search
+
+ * engine/lib/elgglib.php, mod/blog/views/default/object/blog.php: No need
+ for elgg_view_entity to separately load the owner entity
+
+ * engine/lib/entities.php, mod/blog/start.php: ElggEntity->getOwnerUser() ->
+ ElggEntity->getOwnerEntity()
+
+ * mod/blog/start.php, mod/blog/views/default/object/blog.php: URL handling
+ for the blog plugin
+
+ * engine/lib/entities.php: Added the getURL and getOwnerUser methods to
+ ElggEntity (gets the URL to display the current entity and the ElggUser
+ entity that represents the owner respectively)
+
+ * engine/lib/entities.php, engine/lib/users.php, entities/index.php,
+ languages/en.php: Generic entity view system
+
+ * mod/blog/start.php, mod/blog/views/default/object/blog.php: Blog plugin
+ now serves as a fancy URL example
+
+ * views/default/messages/errors/list.php, views/default/messages/list.php,
+ views/default/messages/messages/list.php: Fixing the message views
+
+ * engine/lib/input.php, engine/lib/pagehandler.php: Added better GET query
+ variable handling into the page handler mix
+
+2008-04-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * _css/css.php, _graphics/blockquote.png, _graphics/footer.gif,
+ _graphics/header.gif, _graphics/sidebar-bottom.gif,
+ _graphics/sidebar-top.gif, css/css.php, engine/lib/pagehandler.php,
+ graphics/blockquote.png, graphics/footer.gif, graphics/header.gif,
+ graphics/sidebar-bottom.gif, graphics/sidebar-top.gif, htaccess_dist,
+ pagehandler.php, views/default/css.php,
+ views/default/page_elements/header.php: Natty page handling functions. See
+ engine/lib/pagehandler.php
+
+2008-04-15 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: Marcus Povey <marcus@dushka.co.uk> * Hopefully correct
+ mod-rewrite rules
+
+2008-04-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, engine/lib/entities.php, engine/lib/users.php:
+ get_entities now allows for arrays of GUIDs to be supplied as an owner, and
+ can be asked to count entities rather than return them; as a result,
+ get_user_friends_objects and count_* functionality is also now available
+
+2008-04-15 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * odd/handler.php: Marcus Povey <marcus@dushka.co.uk> * ODD handler added,
+ still needs modrewrite rules to be specified.
+
+2008-04-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/comments/delete.php, mod/blog/languages/en.php,
+ mod/blog/start.php, mod/blog/views/default/object/blog-comment.php,
+ mod/blog/views/default/object/blog-comments.php,
+ mod/blog/views/default/object/blog.php: Blog plugin improvements, including
+ delete on comments
+
+ * languages/en.php: A couple of additions to the language file
+
+ * views/default/input/checkboxes.php, views/default/input/file.php,
+ views/default/input/gender.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Cleaning up input
+ field views
+
+ * views/default/output/confirmlink.php, views/default/output/date.php,
+ views/default/output/file.php, views/default/output/gender.php,
+ views/default/output/longtext.php, views/default/output/pulldown.php,
+ views/default/output/tagcloud.php, views/default/output/tags.php,
+ views/default/output/text.php, views/default/output/timestamp.php,
+ views/default/output/url.php: Tidied up output views
+
+2008-04-15 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Removed
+ canedit shortcut
+
+ * engine/lib/relationships.php: Marcus Povey <marcus@dushka.co.uk> *
+ Modified to not throw exception on missing verb conversion
+
+ * engine/lib/relationships.php: Marcus Povey <marcus@dushka.co.uk> *
+ Relationship import
+
+2008-04-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/extender.php: Improvement to canEdit() for extenders, which
+ takes into account the canEdit() status of entities the extender is attached
+ to
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metastrings.php: Removing the multiple slash problem on
+ metastrings in extenders
+
+2008-04-15 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/relationships.php: Marcus Povey <marcus@dushka.co.uk> *
+ Relationships export
+
+ * engine/lib/xml.php: Marcus Povey <marcus@dushka.co.uk> * Improved XML to
+ array code
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Minor tweaks
+
+ * engine/lib/extender.php: Marcus Povey <marcus@dushka.co.uk> * Extender
+ import support. * Removed Importable interface on extender, its easier to
+ just use the entity object interface.
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Blocking
+ create and update dates from ODD export, since these don't make sense to
+ export.
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ optional set multiple on metadata
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Belts and
+ braces
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Entity
+ import.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Using common detect_extender_valuetype function
+
+2008-04-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Undone last as
+ it was a bad idea.
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Exception
+ thrown on unrecognised import tag.
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Import
+ functions now deal in ODD!
+
+ * engine/lib/export.php, engine/lib/xml.php: Marcus Povey
+ <marcus@dushka.co.uk> * XML Import processor
+
+ * engine/lib/relationships.php: Marcus Povey <marcus@dushka.co.uk> *
+ Relationships export
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Relationships
+ export
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * ODD
+ relationship verb -> relationship mapping functions
+
+ * mod/guidbrowser/index.php, mod/guidbrowser/start.php,
+ .../views/default/guidbrowser/entity_full.php: Marcus Povey
+ <marcus@dushka.co.uk> * Relationships added to GUID browser
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> *
+ Relationships table brought in line with code... oops
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/extender.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * ODD Annotation and Metadata export
+
+2008-04-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Added owner
+ uuid to type
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ subclass
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Comment tweak
+
+ * engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/export.php, engine/lib/extender.php, engine/lib/metadata.php,
+ engine/lib/relationships.php: Marcus Povey <marcus@dushka.co.uk> * Entity ODD
+ export
+
+ * engine/lib/xml.php: Marcus Povey <marcus@dushka.co.uk> * Moved XML stuff
+ to xml.php
+
+ * engine/lib/exceptions.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ DataFormatException
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Minor tweak
+
+2008-04-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php, engine/lib/api.php, engine/lib/pam.php: Marcus Povey
+ <marcus@dushka.co.uk> * Created PAM library * API moved to use new PAM
+ functions
+
+2008-04-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apitest/index.php, mod/apitest/start.php,
+ mod/apitest/views/default/apitest/configform.php,
+ mod/apitest/views/default/apitest/main.php: Marcus Povey
+ <marcus@dushka.co.uk> * Package header added
+
+ * mod/tasklist/index.php, mod/tasklist/start.php,
+ mod/tasklist/views/default/tasklist/item.php,
+ mod/tasklist/views/default/tasklist/main.php,
+ mod/tasklist/views/default/tasklist/newtask.php: Marcus Povey
+ <marcus@dushka.co.uk> * Package header added
+
+ * mod/exporttest/index.php, mod/exporttest/start.php,
+ mod/exporttest/views/default/exporttest/main.php,
+ .../views/default/exporttest/outputxml.php: Marcus Povey
+ <marcus@dushka.co.uk> * Package header added
+
+ * mod/guidbrowser/languages/en.php, mod/guidbrowser/start.php,
+ .../views/default/guidbrowser/browser.php,
+ .../views/default/guidbrowser/entity.php,
+ .../views/default/guidbrowser/entity_full.php,
+ .../views/default/guidbrowser/newentity.php,
+ .../views/default/guidbrowser/prevnext.php: Marcus Povey
+ <marcus@dushka.co.uk> * Package header added
+
+2008-04-09 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/start.php: Fixed some bugs including a
+ load order patch from Rolando, and an update issue
+
+ * engine/lib/pam.php: Empty PAM include file
+
+2008-04-08 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Simplified extender types, now only supports integer
+ and text - types deamed not to be necessary (yet), also simplifies import and
+ export. * Types better detected.
+
+2008-04-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/users.php, engine/start.php:
+ Incorporating setup fixes from Rolando
+
+2008-04-08 misja <misja@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php, engine/lib/cache.php, engine/lib/database.php: Misja
+ Hoebe <misja@curverider.co.uk> More doctag fixes
+
+ * endpoints/rest.php, engine/lib/annotations.php, engine/lib/entities.php,
+ engine/lib/exceptions.php, engine/lib/export.php, engine/lib/extender.php,
+ engine/lib/metadata.php, engine/lib/objects.php, engine/lib/plugins.php,
+ engine/lib/relationships.php, engine/lib/sites.php, engine/lib/users.php:
+ Misja Hoebe <misja@curverider.co.uk> More docstring fixes
+
+ * action.php, engine/lib/annotations.php, engine/lib/sites.php,
+ engine/lib/users.php: Misja Hoebe <misja@curverider.co.uk> Fixing doctags
+
+2008-04-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Further annotation /
+ metadata fixes
+
+ * views/default/output/tags.php: Improved tag display
+
+ * engine/lib/annotations.php: Fixing undeclared error
+
+ * mod/blog/actions/delete.php, mod/blog/actions/edit.php,
+ mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/object/blog.php: CRUD for blog posts
+
+ * engine/lib/sites.php, engine/lib/users.php: Same bugfix for sites and
+ users
+
+ * engine/lib/elgglib.php, engine/lib/entities.php, engine/lib/objects.php:
+ Further adventures in getting things to delete correctly
+
+ * engine/lib/annotations.php, engine/lib/elgglib.php,
+ engine/lib/entities.php: Further delete and event trigger fixes
+
+ * engine/lib/entities.php: Triggering events on create, update and delete
+ actions on entities
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php: Properly extensible canEdit functionality for
+ metadata, annotations, and anything else that supports the ElggExtender
+ interface
+
+ * engine/lib/entities.php, engine/lib/metadata.php: Much better handling for
+ deleting entities and metadata
+
+2008-04-04 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/edit.php, mod/blog/edit.php, mod/blog/start.php,
+ mod/blog/views/default/blog/forms/edit.php,
+ mod/blog/views/default/object/blog.php: Blog edit updates
+
+ * views/default/input/tags.php: Updated the tags input field
+
+ * languages/en.php: Adding 'edit' to the language file
+
+ * engine/lib/entities.php: Added $entity->canEdit() (true|false)
+
+ * mod/blog/everyone.php, mod/blog/index.php, mod/blog/languages/en.php,
+ mod/blog/start.php: Introducing the all blog posts page.
+
+ * views/default/output/tags.php: Tweaking the output/tags view
+
+ * engine/lib/entities.php, engine/lib/metadata.php: Added better support for
+ arrays of metadata
+
+ * mod/blog/actions/add.php, mod/blog/views/default/object/blog.php: Added
+ tags to the blog plugin
+
+ * mod/blog/read.php, mod/blog/views/default/blog/notfound.php: Further blog
+ enhancements
+
+2008-04-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/relationships.php: Marcus Povey
+ <marcus@dushka.co.uk> * Relationship related code moved to relationships.php
+ * Added ElggRelationship class as wrapper (to help with import and export) *
+ Import and Export relationship code added (NOT TESTED)
+
+ * mod/exporttest/index.php:
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Minor text
+ change
+
+2008-04-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/actions/comments/add.php, mod/blog/languages/en.php,
+ mod/blog/start.php, mod/blog/views/default/object/blog-comment.php,
+ mod/blog/views/default/object/blog-comments.php,
+ mod/blog/views/default/object/blog.php: Added comments to blog
+
+ * engine/lib/database.php: Added query display to database exceptions
+
+ * engine/lib/sessions.php: Fixed session initialisation issue
+
+2008-04-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/lib/extender.php, engine/lib/metadata.php:
+ Marcus Povey <marcus@dushka.co.uk> * Annotations and metadata now imported
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Bugfixes
+
+ * mod/guidbrowser/index.php, mod/guidbrowser/start.php,
+ .../views/default/guidbrowser/browser.php,
+ .../views/default/guidbrowser/entity.php,
+ .../views/default/guidbrowser/entity_full.php,
+ .../views/default/guidbrowser/navbar.php,
+ .../views/default/guidbrowser/prevnext.php: Marcus Povey
+ <marcus@dushka.co.uk> * Basic guid browser
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ Iterator interface to override foreach behaviour
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/sites.php,
+ engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Exception thrown
+ if load fails
+
+2008-04-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/languages/en.php, mod/blog/read.php,
+ mod/blog/views/default/blog/css.php, mod/blog/views/default/object/blog.php:
+ Blog: extended comment form, etc.
+
+ * engine/lib/elgglib.php: Slight fix for previous
+
+ * engine/lib/elgglib.php: Update for elgg_view_entity
+
+ * engine/lib/database.php: Slight get_data revert
+
+ * views/default/page_elements/header.php: Changing, once again, the way
+ titles work
+
+ * engine/lib/pageowner.php: Pages can now manually override the page owner
+
+ * mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/css.php, mod/blog/views/default/object/blog.php:
+ Adding name and posted date to blog entries
+
+ * mod/blog/index.php, mod/blog/views/default/blog/view.php,
+ mod/blog/views/default/object/blog.php: Blog update: you can post and view
+ blog entries.
+
+ * engine/lib/elgglib.php: Improved elgg_view_entity
+
+2008-04-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Cut and
+ paste is a killer
+
+ * engine/lib/plugins.php: Marcus Povey <marcus@dushka.co.uk> * Fixed
+ language autoload
+
+2008-04-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/guidbrowser/index.php, mod/guidbrowser/languages/en.php,
+ mod/guidbrowser/start.php, .../views/default/guidbrowser/entity.php,
+ .../views/default/guidbrowser/entity_full.php,
+ .../views/default/guidbrowser/navbar.php,
+ .../views/default/guidbrowser/newentity.php: Marcus Povey
+ <marcus@dushka.co.uk> * End of day
+
+2008-04-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php, engine/lib/entities.php, engine/lib/users.php:
+ Assorted entity fixes
+
+ * engine/lib/plugins.php: Plugins now autoregister translations
+
+ * engine/lib/entities.php: Small fix for get_entities
+
+ * mod/blog/actions/add.php, mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/forms/edit.php: Blog posting
+
+2008-04-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Access id
+ better handled
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Subtype is
+ converted to its exportable string version
+
+2008-04-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php: Removed some unnecessary debug junk
+
+ * engine/lib/actions.php: Fixed action registration for plugins
+
+2008-04-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/exporttest/index.php: Marcus Povey <marcus@dushka.co.uk> * Minor tweak
+ to actually get the command from it all
+
+2008-04-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Modified page_draw to behave correctly depending
+ on sessions
+
+ * languages/en.php: Language updates
+
+ * action.php: Removing debug issue
+
+ * action.php: Debug message in actions
+
+ * views/default/account/forms/register.php: Changing the destination of the
+ register form
+
+ * views/default/css.php, views/default/page_elements/header.php: Separating
+ sitename and title in the header
+
+ * views/default/css.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php: Let's make the
+ classes for input elements consistent
+
+ * views/default/pageshells/pageshell.php: Reinstating the side menu
+
+2008-04-02 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * graphics/blockquote.png, graphics/footer.gif, graphics/header.gif,
+ graphics/sidebar-bottom.gif, graphics/sidebar-top.gif, views/default/css.php,
+ views/default/page_elements/footer.php,
+ views/default/pageshells/pageshell.php: basic skin added
+
+2008-04-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * BUGFIX: User creation * User import functionality
+ working
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Offset/limit
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Value to
+ value_id
+
+ * mod/exporttest/views/default/exporttest/main.php: Marcus Povey
+ <marcus@dushka.co.uk> * Now using method=post
+
+ * engine/lib/entities.php, mod/tasklist/start.php: Marcus Povey
+ <marcus@dushka.co.uk> * REMOVED DEBUG * WARNING!!! THERE IS A PHP BUG ON
+ UBUNTU/APACHE2/PHP5 that will prevent metadata from functioning. Values
+ appear to get unset. No fix known.
+
+ * engine/lib/entities.php:
+
+ * mod/tasklist/start.php:
+
+ * mod/tasklist/start.php:
+
+ * mod/tasklist/start.php:
+
+ * engine/lib/entities.php, engine/lib/metadata.php:
+
+ * engine/lib/entities.php:
+
+ * engine/lib/entities.php:
+
+ * engine/lib/entities.php:
+
+ * mod/tasklist/start.php: debug
+
+ * engine/lib/entities.php: removed debug
+
+ * engine/lib/entities.php: debug
+
+ * engine/lib/entities.php: debug
+
+ * engine/lib/metadata.php: debug
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Entity type/ subtype functional
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> *
+ get_metadata_byname better handles single/multiple return values
+
+ * mod/tasklist/start.php, mod/tasklist/views/default/tasklist/newtask.php:
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> *
+ get_metadata_byname better handles single/multiple return values
+
+2008-04-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/blog/index.php: Slight change to blogs
+
+2008-04-02 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: debug
+
+ * engine/lib/metadata.php: removed debug
+
+ * engine/lib/metadata.php: debug
+
+ * mod/tasklist/index.php, mod/tasklist/start.php: test
+
+2008-04-02 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * htaccess_dist: htaccess dist
+
+ * engine/lib/users.php: Small fix
+
+ * engine/lib/pageowner.php: Smaller version of previous
+
+ * engine/lib/pageowner.php: Introducing page_owner_entity
+
+ * engine/lib/friends.php: Removing the friends module (it's unnecessary)
+
+ * engine/lib/pageowner.php: Fix to previous
+
+ * engine/lib/pageowner.php: Reverting page_owner
+
+2008-04-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * End of day...
+
+ * engine/lib/annotations.php, engine/lib/extender.php,
+ engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Moved common
+ functionality of metadata and annotations into superclass.
+
+2008-04-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * languages/en.php, mod/blog/add.php, mod/blog/edit.php, mod/blog/index.php,
+ mod/blog/languages/en.php, mod/blog/start.php,
+ mod/blog/views/default/blog/forms/edit.php: Further adventures in blogging;
+ saving for now
+
+ * mod/blog/index.php, mod/blog/languages/en.php, mod/blog/start.php,
+ views/default/welcome/logged_in.php: Blog mod and welcome screen updates
+
+ * engine/lib/pageowner.php: Update to docs for previous
+
+ * engine/lib/pageowner.php, engine/lib/users.php: page_owner() now returns
+ an ElggUser or false
+
+ * views/default/navigation/toolbox.php: Modified toolbox to display menu
+ items correctly
+
+ * engine/lib/elgglib.php: Fixed the menu item function
+
+2008-04-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Marcus Povey <marcus@dushka.co.uk> * Removed debug
+
+2008-04-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/languages.php: Added the register_languages function, for
+ easier loading of language files from plugins
+
+ * actions/register.php, engine/lib/entities.php, engine/lib/sessions.php,
+ engine/lib/users.php: Registration, login, logout work. Victory!
+
+ * views/default/account/forms/register.php: Registration form update
+
+ * engine/lib/users.php: Updated the registration function
+
+ * languages/en.php, register.php, views/default/account/forms/login.php,
+ views/default/account/forms/register.php, views/default/login.php,
+ views/default/welcome/logged_out.php: Further adventures in registration
+
+2008-04-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Some UUID
+ functions
+
+2008-04-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/logout.php, actions/register.php,
+ engine/lib/entities.php, engine/lib/users.php, languages/en.php,
+ views/default/login.php: User registration gubbins
+
+2008-04-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Used wrong
+ function decl
+
+ * mod/exporttest/index.php,
+ mod/exporttest/views/default/exporttest/main.php: Marcus Povey
+ <marcus@dushka.co.uk> * Added import block
+
+ * engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Moved import to
+ ElggEntity
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Moved import
+ to ElggEntity
+
+2008-04-01 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php, languages/en.php,
+ views/default/navigation/topmenu.php, views/default/page_elements/header.php,
+ views/default/welcome.php, views/default/welcome/logged_in.php,
+ views/default/welcome/logged_out.php: Fixed some session stuff, modified a
+ few views
+
+2008-04-01 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Moved import
+ to ElggEntity
+
+ * engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * Moved import to
+ ElggEntity
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Entities
+ owner_guid exported as owner_uuid
+
+2008-03-31 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Tidied up
+ comments
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Somewhat more
+ robust import logic
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Owner guid converted to a uuid
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Initial xml
+ import.
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Export of
+ entities now includes uuid
+
+2008-03-31 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/test/graphics/elgg.powered.png, mod/test/graphics/leaf.jpg,
+ mod/test/graphics/logo.png, mod/test/graphics/orange_small.png,
+ mod/test/graphics/purplecrayon.gif, mod/test/index.php, mod/test/start.php,
+ mod/test/views/default/css.php, mod/test/views/default/menu.php,
+ mod/test/views/default/pageshells/pageshell.php,
+ mod/test/views/default/testplugin/pageshell.php: Removing the mod/test
+ plugin. It doesn't need to be here...
+
+2008-03-31 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php: Marcus Povey <marcus@dushka.co.uk> *
+ Reverted regression
+
+2008-03-29 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * No such entity
+ error thrown if invalid guid given for export
+
+2008-03-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/api.php, engine/lib/entities.php,
+ engine/lib/export.php, engine/lib/metadata.php, index.php: Marcus Povey
+ <marcus@dushka.co.uk> * Metadata and Annotations now exported.
+
+ * engine/start.php: Marcus Povey <marcus@dushka.co.uk> * Preloads export
+ library - todo: do this better!
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> *
+
+ * mod/exporttest/index.php, mod/exporttest/start.php,
+ mod/exporttest/views/default/exporttest/main.php,
+ .../views/default/exporttest/outputxml.php: Marcus Povey
+ <marcus@dushka.co.uk> * Export test
+
+ * engine/lib/entities.php, engine/lib/export.php: Marcus Povey
+ <marcus@dushka.co.uk> * Export functionality for ElggEntity and children
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Whitespace
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Using export()
+ instead of toStdClass()
+
+2008-03-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Corresponding fix for register_plugin_hook
+
+ * engine/lib/elgglib.php: Fix for trigger_plugin_hook
+
+ * engine/lib/configuration.php: Autoconfiguration update .. again
+
+ * engine/lib/elgglib.php: Some extra params for elgg_view_entity
+
+ * engine/lib/elgglib.php: Added elgg_view_entity(ElggEntity $entity) to
+ intelligently display entities
+
+2008-03-28 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Moved XML
+ serialisation functions to export.php
+
+2008-03-28 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added custom return values to trigger_plugin_hook
+
+ * engine/lib/elgglib.php: Some extra documentation
+
+ * engine/lib/elgglib.php: Plugin hooks
+
+2008-03-27 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/export.php: Marcus Povey <marcus@dushka.co.uk> * Sketch
+ import/export functions added, pending event handling functions
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Array
+ support added
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Add / update
+ meta from array
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Multiple
+ meta tag support (requires db schema change)
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Removed sql
+ restriction to allow multiple tag entries
+
+2008-03-26 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/apitest/index.php, mod/apitest/start.php,
+ mod/apitest/views/default/apitest/configform.php,
+ mod/apitest/views/default/apitest/main.php: Marcus Povey
+ <marcus@dushka.co.uk> * Basic API testrig
+
+2008-03-25 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Subtype subclass instantiation
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * IO Exception if
+ cache directory doesn't exist
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Removed debug.
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Array support
+ added to api
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Call method now
+ specified in api
+
+2008-03-22 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Whitespace
+ removed
+
+2008-03-21 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Tweak for
+ unrecognised output format handling
+
+2008-03-20 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/tasklist/index.php: Marcus Povey <marcus@dushka.co.uk> * tags
+
+ * engine/lib/annotations.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Annotations now using metastrings table for name_ids
+ * Stupid amounts of whitespace removed
+
+ * engine/lib/entities.php, engine/lib/metadata.php, engine/schema/mysql.sql:
+ Marcus Povey <marcus@dushka.co.uk> * Metadata now using metastrings *
+ Entities will now throw an exception when creation is attempted with no owner
+
+ * mod/tasklist/index.php, mod/tasklist/views/default/tasklist/newtask.php:
+ Marcus Povey <marcus@dushka.co.uk> * Tags
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * a/cvs/csv ...
+ oops
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * Age checking on
+ cache.
+
+2008-03-19 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Exports working
+ system.api.list
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Removed warning
+ when calling undeclaired functions
+
+ * endpoints/rest.php: Marcus Povey <marcus@dushka.co.uk> * Added some
+ default values - these should be removed!
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Using simple
+ cache for replay protection... still need to clear cache of old files etc.
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * Cache no longer
+ using matrix directory due to issues with mkdir.
+
+ * endpoints/rest.php: Marcus Povey <marcus@dushka.co.uk> * Added expose and
+ call functions.
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Added expose and
+ call functions.
+
+ * endpoints/rest.php, engine/lib/api.php, index.php: Marcus Povey
+ <marcus@dushka.co.uk> * API now uses PAM
+
+2008-03-18 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php, engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk>
+ * API now supporting pluggable output format
+
+ * mod/tasklist/index.php, mod/tasklist/start.php,
+ mod/tasklist/views/default/tasklist/item.php,
+ mod/tasklist/views/default/tasklist/main.php,
+ mod/tasklist/views/default/tasklist/newtask.php: Marcus Povey
+ <marcus@dushka.co.uk> * Added VERY simple tasklist plugin.
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Final tweaks
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Moved order
+ and limit the right way
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Get Metadata
+ now actually works
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Modified to better deal with metastrings table
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Value to
+ value_id
+
+2008-03-17 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Marcus Povey <marcus@dushka.co.uk> * getOwner now
+ consistent with class hierachy
+
+ * engine/lib/objects.php, engine/lib/users.php: Marcus Povey
+ <marcus@dushka.co.uk> * getOwner now consistent with class hierachy
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Fixed sql
+ error on clear annotaitons
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * limit/offset
+ the wrong way round
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * guid not
+ needed in subtype since this is just a label.
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ Added config
+
+ * engine/lib/sessions.php, engine/lib/users.php: Marcus Povey
+ <marcus@dushka.co.uk> * Some minor tweaks
+
+ * engine/lib/configuration.php: Marcus Povey <marcus@dushka.co.uk> *
+ Reverted regression caused by previous revision
+
+2008-03-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sessions.php, engine/lib/users.php: Session functionality,
+ hello again!
+
+2008-03-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/languages.php: Marcus Povey
+ <marcus@dushka.co.uk> * Removed error outputs * Fixed languages
+
+ * engine/lib/access.php: Marcus Povey <marcus@dushka.co.uk> * Made site test
+ conditional to remove debug message
+
+2008-03-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: A quick syntax fix for objects
+
+2008-03-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/entities.php: Marcus Povey
+ <marcus@dushka.co.uk> * Get and set annotations seem to be working
+
+ * engine/lib/annotations.php, engine/lib/entities.php: Marcus Povey
+ <marcus@dushka.co.uk> * Get annotations
+
+2008-03-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php, engine/lib/usersnew.php: Whoops, that should be
+ users.php
+
+ * engine/lib/usersnew.php: Removed a needless comment
+
+ * engine/lib/usersnew.php: New users module
+
+ * engine/lib/entities.php, engine/lib/objects.php, engine/lib/users.php:
+ Adding a couple of extra functions, deleting the old users module
+
+2008-03-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/entities.php: Marcus Povey
+ <marcus@dushka.co.uk> * Annotations added
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ average calcs
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Removed debug
+
+ * engine/lib/entities.php, engine/lib/metadata.php, index.php: Marcus Povey
+ <marcus@dushka.co.uk> * Metadata code
+
+2008-03-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Added new objects class
+
+ * engine/lib/entities.php, engine/lib/objects.php: Removing old objects
+ class
+
+2008-03-14 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metastrings.php: Marcus Povey <marcus@dushka.co.uk> *
+ Metastrings modified for new schema
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Belts and
+ braces
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Belts and
+ braces
+
+2008-03-13 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Use
+ $CONFIG->debug = true to enable query profiling
+
+ * engine/lib/entities.php, engine/lib/sites.php: Marcus Povey
+ <marcus@dushka.co.uk> * Finally got sites to load :)
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Undone
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Owner ID
+ detected if not specified.
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Now saves
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Access
+ control fields ok
+
+ * engine/lib/access.php: Marcus Povey <marcus@dushka.co.uk> * Access using
+ new schema
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Added access
+ groups
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Fixed insert
+ SQL
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Types
+ initialised for first time creation
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Bugfix:
+ getMetaData
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Bugfix:
+ setMetaData
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Made URL
+ unique
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Commented out
+ sites_init - this needs to be rewritten!
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Added ElggSite
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ relationship code
+
+ * engine/lib/entities.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Removed site_guid references, since this should be
+ handled by relationships
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Ooops...
+ forgot access controls
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Changed a
+ couple of table names
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ delete_entity
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Initial
+ framework of ElggEntity code
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * A little bit
+ of extra info.
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Made subtype
+ a unique key
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * New database
+ schema. THIS IS A FLAG DAY!
+
+2008-03-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Added the ability to set an alternative template
+ handler
+
+2008-03-12 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Multiple
+ searches.
+
+ * engine/lib/annotations.php:
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, engine/lib/sites.php, index.php: Marcus Povey
+ <marcus@dushka.co.uk> * Subtyping on annotations and metadata
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * BUGFIX:
+ get_data now catches mysql_errors
+
+2008-03-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/actions.php, mod/test/start.php: Actions fix
+
+ * engine/lib/actions.php, engine/lib/objects.php, languages/en.php,
+ mod/test/index.php, mod/test/start.php,
+ mod/test/views/default/testplugin/pageshell.php: Language updates
+
+2008-03-12 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/entities.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ get_entity_subtypes function
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * object_*
+ changed to entity_* in metadata and annotations
+
+2008-03-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Fixing incorrect primary key
+
+ * engine/schema/mysql.sql, mod/test/index.php: Fixing incorrect primary key
+
+ * engine/lib/access.php, engine/lib/objects.php, mod/test/index.php: Updates
+ to both objects (in order to be able to resave type properly) and access (to
+ add useful constants)
+
+2008-03-12 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * object_*
+ changed to entity_* in metadata and annotations
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * object_* changed to entity_*
+
+2008-03-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/test/views/default/css.php,
+ mod/test/views/default/pageshells/pageshell.php: tweak to ben's elgg 0.2
+ theme plugin
+
+2008-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * mod/test/graphics/elgg.powered.png, mod/test/graphics/leaf.jpg,
+ mod/test/graphics/logo.png, mod/test/graphics/orange_small.png,
+ mod/test/graphics/purplecrayon.gif, mod/test/views/default/css.php,
+ mod/test/views/default/menu.php,
+ mod/test/views/default/pageshells/pageshell.php,
+ views/default/navigation/toolbox.php: Adding a friendly old template to the
+ test plugin
+
+2008-03-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * File cache
+ outline
+
+2008-03-11 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/css.php: css tweak
+
+ * index.php, mod/dashboard/views/default/dashboard/welcome.php: index page
+ changes so it now logs you into the dashboard
+
+ * mod/dashboard/index.php, mod/dashboard/start.php,
+ mod/dashboard/views/default/dashboard/welcome.php, views/default/css.php,
+ views/default/navigation/topmenu.php: css, dashboard and topmenu tweaks
+
+2008-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php, mod/test/index.php: Fixes
+ for previous
+
+ * engine/lib/elgglib.php, engine/lib/plugins.php, mod/test/index.php,
+ mod/test/start.php: God bless 'em! Plugins now autoregister their own views.
+
+2008-03-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Removed subtypes until problems with tag system are
+ sorted out.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Added orderby and limits
+
+2008-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Page_draw echoes
+
+2008-03-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/cache.php: Marcus Povey <marcus@dushka.co.uk> * ElggCache
+ superclass
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Value type
+ added
+
+2008-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: user_info() ftw
+
+2008-03-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk> * Added api to list
+ apis
+
+2008-03-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/pageowner.php, engine/lib/users.php: Et voila: page ownership!
+
+ * engine/lib/elgglib.php, views/default/pageshell.php,
+ views/default/pageshells/pageshell.php: The pageshell now correctly passes
+ elements to the header, footer etc.
+
+ * mod/test/index.php: Minor test plugin fix
+
+ * engine/lib/elgglib.php, views/default/navigation/toolbox.php: Menu items
+ fix
+
+ * mod/test/start.php: Initial test plugin menu items
+
+ * views/default/navigation/toolbox.php: Toolbox navigation edit
+
+ * engine/lib/elgglib.php: Registers and menu items
+
+2008-03-11 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php, engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk>
+ * Site id specified
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Removed log
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/metastrings.php, engine/schema/mysql.sql: Marcus Povey
+ <marcus@dushka.co.uk> * Added metadata/metastrings tag stuff. Lorks.
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Fixed db
+ problems
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Removed
+ count based on this conversation: [10:05:38] … basically, if you add an
+ item, you need to create a tag entry in the metastrings table (as discussed
+ yesterday) [10:05:56] … if you then delete the item, that leaves a tag
+ [10:06:07] … if you want to delete the tag when nothing references it
+ [10:06:11] … it needs a counter [10:06:29] … which means for every add
+ and delete query you need to check for and sometimes update this counter
+ [10:06:36] … making three queries for every one [10:06:47] … but if you
+ don't do that the meta strings table grows over time [10:06:54] … making it
+ space inefficient [10:07:03] … so, which do you do? [10:10:31] … ?
+ [10:10:43] … i'd be tempted to not delete [10:10:58] … because the
+ multiple queries will be a pain for everyone all the time [10:11:05] … and
+ storage costs are cheap [10:11:32] Ben Werdmuller: I would be very tempted to
+ do the same [10:11:35] … so let's do that :) [10:11:36] Marcus Povey: maybe
+ we could write an admin script to clean up or something [10:11:45] Ben
+ Werdmuller: exactly, we could clean up on a cron if people really want
+ [10:11:59] … but for now, let's just go with the growing tag cloud
+
+2008-03-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/logout.php, engine/lib/languages.php,
+ languages/en.php, views/default/login.php,
+ views/default/navigation/topmenu.php, views/default/page_elements/footer.php,
+ views/default/welcome.php: More language integration
+
+ * actions/login.php, actions/logout.php, engine/lib/languages.php,
+ languages/en.php: Languages! There's a little more to do, but ...
+
+2008-03-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Added count
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Changed
+ metadata database to use metastrings as described (all values in metadata are
+ now storing data only once)
+
+ * endpoints/rest.php, engine/lib/api.php: Marcus Povey <marcus@dushka.co.uk>
+ * First draft api
+
+2008-03-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Updated ref to get_objects
+
+ * engine/lib/sites.php: Fixing access permissions error on site update
+
+ * engine/lib/objects.php: Updated objects with metadata and annotations
+
+2008-03-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php, engine/lib/api.php, engine/lib/users.php,
+ engine/schema/mysql.sql, index.php: Marcus Povey <marcus@dushka.co.uk> *
+ Tokens and execute code added to api
+
+2008-03-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/navigation/toolbox.php,
+ views/default/navigation/topmenu.php, views/default/page_elements/header.php:
+ top level navigation added
+
+ * views/default/text/about.php, views/default/text/privacy_view.php,
+ views/default/text/tos_view.php: changes to the text pages
+
+ * engine/lib/elgglib.php, views/default/basic_elements/login.php,
+ views/default/basic_elements/welcome.php, views/default/css.php,
+ views/default/input/checkboxes.php, views/default/input/file.php,
+ views/default/input/gender.php, views/default/input/longtext.php,
+ views/default/input/password.php, views/default/input/pulldown.php,
+ views/default/input/radio.php, views/default/input/tags.php,
+ views/default/input/text.php, views/default/input/url.php,
+ views/default/navigation/toolbox.php, views/default/navigation/topmenu.php,
+ views/default/output/date.php, views/default/output/file.php,
+ views/default/output/gender.php, views/default/output/longtext.php,
+ views/default/output/pulldown.php, views/default/output/tagcloud.php,
+ views/default/output/tags.php, views/default/output/text.php,
+ views/default/output/timestamp.php, views/default/output/url.php,
+ views/default/page_elements/footer.php,
+ views/default/page_elements/header.php,
+ views/default/pageshells/pageshell.php,
+ views/default/pageshells/pageshell_loggedout.php,
+ views/default/pageshells/pageshell_sidebar.php, views/default/text/about.php,
+ views/default/text/privacy_view.php, views/default/text/tos_view.php: some
+ new views
+
+2008-03-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, engine/lib/users.php: Adding metadata and annotations
+ for users.
+
+2008-03-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Erp
+
+2008-03-10 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * views/default/welcome.php: logout bug fix
+
+2008-03-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php:
+
+ * engine/lib/annotations.php, engine/lib/sites.php: Marcus Povey
+ <marcus@dushka.co.uk> * Simple maths functions added
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Site objects
+
+2008-03-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, actions/logout.php, engine/lib/actions.php,
+ engine/lib/elgglib.php, engine/lib/users.php,
+ views/default/messages/list.php, views/default/messages/messages/list.php,
+ views/default/pageshell.php: Messages and actions: fixed!
+
+2008-03-10 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Remove site
+ metadata
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Get user sites
+
+2008-03-10 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * actions/login.php, views/default/login.php: Fixing the login form
+
+2008-03-09 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * index.php: Marcus Povey <marcus@dushka.co.uk> * Commented out my testing
+
+ * engine/lib/annotations.php:
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Fixed copy
+ constructor
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Will now
+ return objects via metadata
+
+ * engine/schema/mysql.sql:
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Corrected
+ database fault
+
+2008-03-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/settings.example.php: add url field to settings
+
+ * views/default/css.php: css tweak
+
+ * actions/login.php, actions/logout.php, engine/lib/users.php, index.php,
+ views/default/css.php, views/default/login.php, views/default/pageshell.php,
+ views/default/welcome.php: crude login and logout functionality
+
+2008-03-08 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ get_objects_from_metadatas (untested)
+
+2008-03-08 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php, mod/test/index.php: Configuration fix
+
+2008-03-08 dave <dave@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/vendors/jquery/jquery.js: jquery added to core
+
+2008-03-07 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Add name and
+ value to get_metadatas
+
+2008-03-07 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/users.php: Log in and logout
+
+ * mod/test/start.php, mod/test/views/default/testplugin/pageshell.php: Test
+ plugin
+
+ * engine/lib/elgglib.php: Event API fix
+
+ * engine/lib/plugins.php, engine/start.php: Some extra plugins stuff
+
+ * engine/lib/users.php: Grabbing the ElggUser and sticking it in the session
+ as appropriate
+
+ * engine/lib/friends.php, engine/lib/users.php, engine/schema/mysql.sql,
+ index.php: Users and friends
+
+ * engine/lib/sites.php: Fix for ElggSites
+
+2008-03-07 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * endpoints/rest.php, engine/lib/api.php, engine/schema/mysql.sql: Marcus
+ Povey <marcus@dushka.co.uk> * Initial work on API
+
+2008-03-06 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/sites.php: Marcus Povey
+ <marcus@dushka.co.uk> * Added delete annotations, fixed error on annotation
+ search (missing params)
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Delete site
+ implemented
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Count added
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Casting done
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Updated
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Added
+ count to annotations
+
+ * engine/lib/objects.php: Marcus Povey <marcus@dushka.co.uk> * Casting takes
+ advantage of constructor
+
+ * engine/lib/annotations.php, engine/lib/metadata.php, engine/lib/sites.php,
+ index.php: Marcus Povey <marcus@dushka.co.uk> * Initial annotations and
+ metadata get/sets functional, combined with site test
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Can
+ retrieve annotations
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Metadata
+ creates and updates
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Meta now
+ updates if item already exists (if the user has permission)
+
+2008-03-06 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Objects are now cast to ElggObjects on get
+
+2008-03-06 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Marcus Povey
+ <marcus@dushka.co.uk> * Cleared up typo
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * User ID
+ detected if not provided
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Very
+ crude type detection for annotation tags, defaults to 'tag'
+
+ * engine/lib/sites.php: Marcus Povey <marcus@dushka.co.uk> * Implemented
+ update site
+
+ * engine/lib/annotations.php: Marcus Povey <marcus@dushka.co.uk> * Ability
+ to change owner
+
+ * engine/lib/metadata.php: Marcus Povey <marcus@dushka.co.uk> * Ability to
+ change owner
+
+ * engine/lib/annotations.php, engine/lib/metadata.php,
+ engine/lib/objects.php: Marcus Povey <marcus@dushka.co.uk> * Fixed get/sets
+
+ * engine/lib/objects.php: Fixed ElggObject attributes.
+
+ * engine/schema/mysql.sql:
+
+ * engine/schema/mysql.sql: Marcus Povey <marcus@dushka.co.uk> * Removed
+ write access id on sites since it seemed superfluous
+
+2008-03-05 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/annotations.php, engine/lib/metadata.php, engine/lib/sites.php,
+ index.php: End of day
+
+ * engine/lib/database.php: Marcus Povey <marcus@dushka.co.uk> * Sanitise
+ trims as well
+
+ * engine/lib/exceptions.php: Marcus Povey <marcus@dushka.co.uk> * A couple
+ more exceptions
+
+ * engine/lib/elgglib.php: Marcus Povey <marcus@dushka.co.uk> * Exceptions
+ that are handled by the default elgg error handler are now echoed to the
+ error log.
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Minor tweaks
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Switching to desktop
+
+ * engine/lib/annotations.php, engine/lib/metadata.php: Types forced on
+ $object->value
+
+ * engine/lib/metadata.php: Added metadata object and methods
+
+ * engine/schema/mysql.sql: Added owner id to metadata
+
+ * engine/lib/annotations.php, engine/lib/sites.php: Changed
+ mysql_real_escape_string to sanitise_string
+
+ * engine/lib/annotations.php: Get annotations
+
+2008-03-04 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/metadata.php: Commit so i can switch to the laptop...
+
+ * engine/lib/annotations.php: initial annotations library added (untested)
+
+ * engine/schema/mysql.sql: Added metadata and annotations, removed
+ superfluous tables.
+
+ * engine/lib/sites.php:
+
+ * engine/lib/sites.php: Get site prototype
+
+ * engine/lib/sites.php: Save
+
+ * engine/lib/sites.php: Added a basic ElggSite outline
+
+2008-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Further additions to the ElggObject, according to
+ spec
+
+2008-03-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/schema/mysql.sql: new site db
+
+ * engine/lib/database.php: Fixed get_tables so install works correctly
+
+ * engine/lib/configuration.php: Fixed wwwroot
+
+2008-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Extending stdClass is silly
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php: Removed some notices
+
+ * engine/lib/database.php: Fixed install issue
+
+2008-03-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: removed echo
+
+2008-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/configuration.php, engine/lib/database.php,
+ engine/schema/mysql.sql, engine/settings.example.php, engine/start.php:
+ Installation issues: fixed
+
+2008-03-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed short circuit comparison
+
+2008-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Some further fixes
+
+ * engine/lib/elgglib.php: Views directory fix
+
+2008-03-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Fixed file exist error
+
+ * engine/lib/elgglib.php: Removed test to see if .htaccess exists, this test
+ doesn't work on my machine. Reason unknown.
+
+ * engine/lib/database.php: Candidate for deletion
+
+2008-03-03 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Added callbacks to get_data
+
+ * engine/lib/objects.php, index.php: Some misc changes
+
+2008-03-03 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Database errors now distinct from "no data",
+ errors are hard fails
+
+2008-02-17 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/objects.php: Further metadata and ElggObject updates.
+
+ * engine/lib/objects.php: Added most of an ElggObject class
+
+ * engine/lib/objects.php: Full object and object metadata CRUD functionality
+
+2008-02-15 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/access.php, engine/lib/database.php, engine/lib/objects.php,
+ engine/lib/sites.php, engine/lib/users.php, engine/schema/mysql.sql,
+ index.php: All kinds of object and database stuff
+
+ * engine/schema/mysql.sql, engine/start.php, install.php: Added the concept
+ of a site_id to msot of the database tables. Also some extra installation
+ stuff.
+
+ * views/default/css.php: Added a CSS file
+
+ * engine/lib/actions.php, engine/lib/database.php, engine/lib/elgglib.php,
+ engine/lib/plugins.php, engine/schema/mysql.sql, engine/settings.example.php:
+ Adding more plugin-related fun
+
+ * engine/lib/configuration.php, views/default/pageshell.php: Various
+ configuration things
+
+ * engine/lib/configuration.php, engine/lib/elgglib.php,
+ engine/lib/plugins.php, engine/start.php: Simple plugin mechanism
+
+ * engine/lib/elgglib.php: Correction to previous
+
+ * engine/lib/elgglib.php: Plugins can now extend views.
+
+ * css/css.php: Importing the dynamic CSS file
+
+2008-02-14 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/install.php, install.php, views/default/pageshell.php: Some
+ further installation tweaks
+
+ * engine/lib/database.php, engine/lib/elgglib.php, install.php: A simple
+ beginning to an install script
+
+ * action.php, htaccess_dist, index.php, views/default/pageshell.php: Changes
+ to site structure
+
+ * engine/lib/actions.php, engine/lib/elgglib.php, engine/schema/mysql.sql,
+ engine/settings.example.php, index.php,
+ views/default/messages/sanitisation/htaccess.php: Actions, .htaccess, and the
+ database schema
+
+2008-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/database.php: Added more context to the database function notes
+
+ * engine/lib/database.php, engine/start.php: Added some fancy database
+ connection gubbins. If you give it loads of read or write dbs to pick from,
+ Elgg will choose one at random for each category!
+
+ * engine/lib/elgglib.php, engine/start.php, views/default/pageshell.php:
+ Messages and exceptions, working merrily together. Aww.
+
+ * views/default/messages/messages/list.php,
+ views/default/messages/messages/message.php: Standard messages are now
+ displayed.
+
+ * engine/lib/elgglib.php, engine/start.php,
+ views/default/messages/errors/exception.php,
+ views/default/messages/exceptions/exception.php,
+ views/default/messages/list.php, views/default/pageshell.php: Further message
+ handling in the template
+
+ * engine/lib/elgglib.php, engine/lib/input.php, engine/start.php,
+ views/default/messages/errors/exception.php: Exception handling
+
+2008-02-13 icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php: Moving on to explodenew
+
+ * engine/lib/exceptions.php: Updates
+
+ * engine/lib/input.php: Added input method
+
+ * engine/start.php: Start now reporting errors using exceptions...
+
+ * engine/lib/exceptions.php: Added installation exception
+
+ * engine/start.php: Loads now
+
+ * engine/lib/elgglib.php: Ooops...
+
+ * engine/start.php: Loading exceptions
+
+ * engine/lib/elgglib.php: Added error handler stuff.
+
+ * engine/lib/exceptions.php: Added exceptions
+
+ * engine/start.php: Added CVS exclude to start.php
+
+2008-02-13 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/start.php, views/default/messages/sanitisation/settings.php: A
+ slightly better no-settings error. It's probably a good idea to eventually
+ allow people to edit settings.php directly if they have the access defined.
+
+ * engine/start.php: Let's be a little more friendly.
+
+ * engine/start.php, views/default/messages/errors/error.php,
+ views/default/messages/errors/list.php, views/default/pageshell.php: Some
+ error reporting and initial (very, very basic) templating
+
+ * engine/lib/elgglib.php: A little reoirganisation in elgglib
+
+2008-02-12 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/lib/elgglib.php: Adding priority and a little more description to
+ the events API.
+
+ * engine/lib/elgglib.php, engine/start.php: Adding the events API
+
+ * engine/lib/elgglib.php, engine/start.php: Sanitisation
+
+ * engine/lib/elgglib.php, engine/start.php,
+ views/default/messages/sanitisation/settings.php: Introducing views and some
+ sanitisation
+
+ * engine/lib/elgglib.php, engine/start.php, index.php: The engine starter
+ now functions appropriately
+
+2008-02-11 ben <ben@36083f99-b078-4883-b0ff-0f9b5a30f544>
+
+ * engine/settings.example.php, engine/start.functions.php, engine/start.php:
+ Some more bootstrapping.
diff --git a/INSTALL.txt b/INSTALL.txt
new file mode 100644
index 000000000..f4ecbffe1
--- /dev/null
+++ b/INSTALL.txt
@@ -0,0 +1,113 @@
+The latest version of the installation instructions is available at:
+[http://docs.elgg.org/wiki/Installation]
+
+Installation Troubleshooting is available at:
+[http://docs.elgg.org/wiki/Troubleshooting]
+
+
+ELGG INSTALLATION INSTRUCTIONS
+
+TECHNICAL REQUIREMENTS
+
+Elgg runs on a combination of the Apache web server, MySQL database
+system and the PHP interpreted scripting language. This is the most
+popular web server environment in the world. (Elgg can also run on
+other web servers such a nginx and IIS, but requires further configuration).
+
+Due to Elgg's advanced functionality, there are some extra
+configuration requirements:
+
+ * The Apache web server needs to be installed with the following
+ modules:
+ o mod_rewrite
+ o PHP
+ * MySQL 5+.
+ * PHP 5.2+ needs to be installed as an Apache module
+ with the following libraries:
+ o GD (for graphics processing such as avatar cropping)
+ o Multibyte String support (for internationalization)
+
+It is recommended that you increase the memory available to PHP
+threads beyond the standard 8 or 12M, and increase the maximum
+uploaded filesize (which defaults to 2M). In both cases, this can be
+found in your php.ini.
+
+
+INSTALLING ELGG
+
+Before you begin, make sure you have read Elgg's technical
+requirements. If you discover problems after following these
+instructions, check out the troubleshooting page at
+[http://docs.elgg.org/wiki/Troubleshooting].
+
+
+1. Upload Elgg
+
+Unzip Elgg and upload it to your site's document root.
+
+
+2. Create a data folder
+
+Elgg needs a special folder to store uploaded files, including
+profile icons and photos. You will need to create this for it.
+
+We recommend that this folder is called data, and is stored outside
+of your document root. For example, if Elgg is installed in
+/home/elgg/html/, you might create it in /home/elgg/data.
+
+Once this folder has been created, you'll need to make sure that your
+web server has permission to write to it. This shouldn't be a problem
+on Windows-based servers, but if your server runs Linux or a UNIX variant,
+you'll need to figure out what user Apache runs under. For Debian-based
+distros, it is usually www-data and for RedHat, it is often apache. If you
+cannot figure out what the ownership and permissions should be, you can
+set the permissions for world access (though not recommended):
+
+chmod 777 /home/elgg/data/
+
+If you use a graphical client to upload files, you can usually set
+this by right or shift-clicking on the folder and selecting
+'properties'.
+
+
+3. Create a database
+
+Using your database administration tool of choice (if you're unsure
+about this, ask your system administrator), create a new database for
+Elgg. Make sure you know the username and password necessary to
+access this.
+
+
+4. Visit your Elgg site
+
+Once you've performed these steps, visit your Elgg site in your web
+browser. Elgg will take you through the rest of the installation
+process from there.
+
+
+A note on settings.php and .htaccess
+
+The Elgg installer will try and create two files for you:
+
+ * engine/settings.php, which contains the database settings for
+ your installation
+ * .htaccess, which allows Elgg to generate dynamic URLs
+
+If your web server does not have permission to create these files, you
+will need to either
+
+1. Change the permissions on the directory where you are installing
+ Elgg and the engine directory and try again. Remember to change the
+ permissions back to the original values after installation is complete.
+
+2. Copy engine/settings.example.php to engine/settings.php, open
+ it up in a text editor and fill in your database details. Then
+ copy /htaccess_dist to /.htaccess
+
+
+
+The latest version of this document is available at:
+[http://docs.elgg.org/wiki/Installation]
+
+Installation Troubleshooting is available at:
+[http://docs.elgg.org/wiki/Troubleshooting]
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 000000000..f833d881e
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,280 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS \ No newline at end of file
diff --git a/README.txt b/README.txt
new file mode 100644
index 000000000..dd604fd2b
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,24 @@
+Elgg
+Copyright (c) 2008-2013 See COPYRIGHT.txt
+
+See CONTRIBUTORS.txt for development credits.
+
+Elgg is managed by the Elgg Foundation, a nonprofit organization that was
+founded to govern, protect, and promote the Elgg open source social network
+engine. The Foundation aims to provide a stable, commercially and
+individually independent organization that operates in the best interest of Elgg
+as an open source project.
+
+The project site can be found at http://elgg.org/
+
+The Elgg project was started in 2004 by:
+Ben Werdmuller <ben@benwerd.com, http://benwerd.com> and
+Dave Tosh <davidgtosh@gmail.com>
+
+Elgg is released under the GNU General Public License (GPL) Version 2 and the
+Massachusetts Institute of Technology (MIT) License. See LICENSE.txt
+in the root of the package you downloaded.
+
+For installation instructions, see INSTALL.txt.
+
+For upgrade instructions, see UPGRADE.txt.
diff --git a/UPGRADE.txt b/UPGRADE.txt
new file mode 100644
index 000000000..e9610fe39
--- /dev/null
+++ b/UPGRADE.txt
@@ -0,0 +1,71 @@
+Elgg Upgrade Instructions
+=========================
+
+Note: Upgrades are one way--You cannot downgrade once you run the upgrade
+ script. Always back up your database, code, and data directory
+ before upgrading!
+
+
+Upgrading from Elgg 1.7 to 1.8.
+----------------------------------------------------
+
+1. Back up your Elgg database, code, and data directory.
+
+2. Download the latest version of Elgg from http://elgg.org/.
+
+3. Identify and save any changes to core files. Pay special attention to
+ the views and actions directories. You should put these changes in plugins
+ once you have installed Elgg 1.8.
+
+3. Delete the following directories in the Elgg root on your server:
+ * _css
+ * account
+ * actions
+ * admin
+ * dashboard
+ * entities
+ * friends
+ * search
+ * settings
+ * simplecache
+ * views
+
+4. Delete the following core plugins from the Elgg mod directory. Most of these
+ plugins are deprecated and no longer supported by Elgg's core developers.
+ Others have been significantly changed and need to be replaced by new versions.
+ If you modified these plugins, you will need to upgrade the plugin to work
+ in Elgg 1.8.
+ * captcha
+ * crontrigger
+ * default_widgets
+ * friends
+ * riverdashboard
+ * twitter_service
+ * profile
+
+5. Upload and overwrite your existing Elgg files with the Elgg 1.8 files.
+
+6. Copy htaccess_dist to .htaccess, replacing your existing version. Any
+ modifications to the original .htaccess should be moved to the new
+ .htaccess file.
+
+7. Visit http://your-elgg-site/upgrade.php
+
+
+Upgrading to the latest release
+-----------------------------------------
+
+1. Back up your Elgg database, code, and data directory.
+
+2. Download the latest version of Elgg from http://elgg.org/.
+
+3. Upload and overwrite your existing Elgg files. Any modifications should
+ have been written within plugins so that they are not lost. If this is
+ not the case, take care to maintain your modifications. If you have
+ modified core files, Elgg may not work correctly.
+
+4. Copy htaccess_dist to .htaccess, replacing your existing version. Any
+ modifications to the original .htaccess should be moved to the new
+ .htaccess file.
+
+5. Visit http://your-elgg-site/upgrade.php
diff --git a/_graphics/SPRITES_LICENSE.TXT b/_graphics/SPRITES_LICENSE.TXT
new file mode 100644
index 000000000..61b0daf3a
--- /dev/null
+++ b/_graphics/SPRITES_LICENSE.TXT
@@ -0,0 +1,9 @@
+The Sprites are copyright © GentleFace http://www.gentleface.com/
+
+They are licensed under Creative Commons
+Attribution-NonCommercial-NoDerivs 3.0 Unported (CC BY-NC-ND 3.0) with special
+permission to distribute and use with the Elgg open source framework. For uses
+outside of Elgg, please see the license and/or contact the author at
+design@gentleface.com
+
+http://creativecommons.org/licenses/by-nc-nd/3.0/ \ No newline at end of file
diff --git a/_graphics/admin_sprites.png b/_graphics/admin_sprites.png
new file mode 100644
index 000000000..82a66f5b2
--- /dev/null
+++ b/_graphics/admin_sprites.png
Binary files differ
diff --git a/_graphics/ajax_loader.gif b/_graphics/ajax_loader.gif
new file mode 100644
index 000000000..b55e148bb
--- /dev/null
+++ b/_graphics/ajax_loader.gif
Binary files differ
diff --git a/_graphics/ajax_loader_bw.gif b/_graphics/ajax_loader_bw.gif
new file mode 100644
index 000000000..e195e1fd8
--- /dev/null
+++ b/_graphics/ajax_loader_bw.gif
Binary files differ
diff --git a/_graphics/button_background.gif b/_graphics/button_background.gif
new file mode 100644
index 000000000..99eac3ecd
--- /dev/null
+++ b/_graphics/button_background.gif
Binary files differ
diff --git a/_graphics/button_graduation.png b/_graphics/button_graduation.png
new file mode 100644
index 000000000..4ca37bbdc
--- /dev/null
+++ b/_graphics/button_graduation.png
Binary files differ
diff --git a/_graphics/elgg_logo.png b/_graphics/elgg_logo.png
new file mode 100644
index 000000000..7a7e01f06
--- /dev/null
+++ b/_graphics/elgg_logo.png
Binary files differ
diff --git a/_graphics/elgg_sprites.png b/_graphics/elgg_sprites.png
new file mode 100644
index 000000000..02b452d94
--- /dev/null
+++ b/_graphics/elgg_sprites.png
Binary files differ
diff --git a/_graphics/elgg_toolbar_logo.gif b/_graphics/elgg_toolbar_logo.gif
new file mode 100644
index 000000000..a7c03a918
--- /dev/null
+++ b/_graphics/elgg_toolbar_logo.gif
Binary files differ
diff --git a/_graphics/favicon.ico b/_graphics/favicon.ico
new file mode 100644
index 000000000..9e1ecc699
--- /dev/null
+++ b/_graphics/favicon.ico
Binary files differ
diff --git a/_graphics/friendspicker.png b/_graphics/friendspicker.png
new file mode 100644
index 000000000..78b540397
--- /dev/null
+++ b/_graphics/friendspicker.png
Binary files differ
diff --git a/_graphics/header_shadow.png b/_graphics/header_shadow.png
new file mode 100644
index 000000000..4c07b814a
--- /dev/null
+++ b/_graphics/header_shadow.png
Binary files differ
diff --git a/_graphics/icons/default/large.png b/_graphics/icons/default/large.png
new file mode 100644
index 000000000..1c1b208a3
--- /dev/null
+++ b/_graphics/icons/default/large.png
Binary files differ
diff --git a/_graphics/icons/default/medium.png b/_graphics/icons/default/medium.png
new file mode 100644
index 000000000..aef97cb08
--- /dev/null
+++ b/_graphics/icons/default/medium.png
Binary files differ
diff --git a/_graphics/icons/default/small.png b/_graphics/icons/default/small.png
new file mode 100644
index 000000000..ae33fd096
--- /dev/null
+++ b/_graphics/icons/default/small.png
Binary files differ
diff --git a/_graphics/icons/default/tiny.png b/_graphics/icons/default/tiny.png
new file mode 100644
index 000000000..a8ffe5153
--- /dev/null
+++ b/_graphics/icons/default/tiny.png
Binary files differ
diff --git a/_graphics/icons/default/topbar.png b/_graphics/icons/default/topbar.png
new file mode 100644
index 000000000..149dfea7f
--- /dev/null
+++ b/_graphics/icons/default/topbar.png
Binary files differ
diff --git a/_graphics/icons/user/defaultlarge.gif b/_graphics/icons/user/defaultlarge.gif
new file mode 100644
index 000000000..6ea3bd4cd
--- /dev/null
+++ b/_graphics/icons/user/defaultlarge.gif
Binary files differ
diff --git a/_graphics/icons/user/defaultmaster.gif b/_graphics/icons/user/defaultmaster.gif
new file mode 100644
index 000000000..5bfd67a2d
--- /dev/null
+++ b/_graphics/icons/user/defaultmaster.gif
Binary files differ
diff --git a/_graphics/icons/user/defaultmedium.gif b/_graphics/icons/user/defaultmedium.gif
new file mode 100644
index 000000000..c6b2e6a6d
--- /dev/null
+++ b/_graphics/icons/user/defaultmedium.gif
Binary files differ
diff --git a/_graphics/icons/user/defaultsmall.gif b/_graphics/icons/user/defaultsmall.gif
new file mode 100644
index 000000000..661d72f04
--- /dev/null
+++ b/_graphics/icons/user/defaultsmall.gif
Binary files differ
diff --git a/_graphics/icons/user/defaulttiny.gif b/_graphics/icons/user/defaulttiny.gif
new file mode 100644
index 000000000..1775346bc
--- /dev/null
+++ b/_graphics/icons/user/defaulttiny.gif
Binary files differ
diff --git a/_graphics/icons/user/defaulttopbar.gif b/_graphics/icons/user/defaulttopbar.gif
new file mode 100644
index 000000000..c3616aeb5
--- /dev/null
+++ b/_graphics/icons/user/defaulttopbar.gif
Binary files differ
diff --git a/_graphics/powered_by_elgg_badge_drk_bckgnd.gif b/_graphics/powered_by_elgg_badge_drk_bckgnd.gif
new file mode 100644
index 000000000..5c2ddc4fc
--- /dev/null
+++ b/_graphics/powered_by_elgg_badge_drk_bckgnd.gif
Binary files differ
diff --git a/_graphics/powered_by_elgg_badge_light_bckgnd.gif b/_graphics/powered_by_elgg_badge_light_bckgnd.gif
new file mode 100644
index 000000000..6367ef302
--- /dev/null
+++ b/_graphics/powered_by_elgg_badge_light_bckgnd.gif
Binary files differ
diff --git a/_graphics/sidebar_background.gif b/_graphics/sidebar_background.gif
new file mode 100644
index 000000000..868012bb1
--- /dev/null
+++ b/_graphics/sidebar_background.gif
Binary files differ
diff --git a/_graphics/spacer.gif b/_graphics/spacer.gif
new file mode 100644
index 000000000..5bfd67a2d
--- /dev/null
+++ b/_graphics/spacer.gif
Binary files differ
diff --git a/_graphics/toptoolbar_background.gif b/_graphics/toptoolbar_background.gif
new file mode 100644
index 000000000..1b1166e7b
--- /dev/null
+++ b/_graphics/toptoolbar_background.gif
Binary files differ
diff --git a/_graphics/two_sidebar_background.gif b/_graphics/two_sidebar_background.gif
new file mode 100644
index 000000000..947f5cf46
--- /dev/null
+++ b/_graphics/two_sidebar_background.gif
Binary files differ
diff --git a/_graphics/walled_garden/one_column_bottom.png b/_graphics/walled_garden/one_column_bottom.png
new file mode 100644
index 000000000..bd2296896
--- /dev/null
+++ b/_graphics/walled_garden/one_column_bottom.png
Binary files differ
diff --git a/_graphics/walled_garden/one_column_middle.png b/_graphics/walled_garden/one_column_middle.png
new file mode 100644
index 000000000..f53abc123
--- /dev/null
+++ b/_graphics/walled_garden/one_column_middle.png
Binary files differ
diff --git a/_graphics/walled_garden/one_column_top.png b/_graphics/walled_garden/one_column_top.png
new file mode 100644
index 000000000..dc8de438a
--- /dev/null
+++ b/_graphics/walled_garden/one_column_top.png
Binary files differ
diff --git a/_graphics/walled_garden/two_column_bottom.png b/_graphics/walled_garden/two_column_bottom.png
new file mode 100644
index 000000000..21e076991
--- /dev/null
+++ b/_graphics/walled_garden/two_column_bottom.png
Binary files differ
diff --git a/_graphics/walled_garden/two_column_middle.png b/_graphics/walled_garden/two_column_middle.png
new file mode 100644
index 000000000..9a93f19a9
--- /dev/null
+++ b/_graphics/walled_garden/two_column_middle.png
Binary files differ
diff --git a/_graphics/walled_garden/two_column_top.png b/_graphics/walled_garden/two_column_top.png
new file mode 100644
index 000000000..cd71a4262
--- /dev/null
+++ b/_graphics/walled_garden/two_column_top.png
Binary files differ
diff --git a/actions/admin/delete_admin_notice.php b/actions/admin/delete_admin_notice.php
new file mode 100644
index 000000000..a9c3b8758
--- /dev/null
+++ b/actions/admin/delete_admin_notice.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Removes an admin notice.
+ */
+
+$guid = get_input('guid');
+$notice = get_entity($guid);
+
+if (!(elgg_instanceof($notice, 'object', 'admin_notice') && $notice->delete())) {
+ register_error(elgg_echo("admin:notices:could_not_delete"));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/menu/save.php b/actions/admin/menu/save.php
new file mode 100644
index 000000000..66ce71082
--- /dev/null
+++ b/actions/admin/menu/save.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Save menu items.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// featured menu items
+$featured_names = get_input('featured_menu_names', array());
+$featured_names = array_unique($featured_names);
+if (in_array(' ', $featured_names)) {
+ unset($featured_names[array_search(' ', $featured_names)]);
+}
+elgg_save_config('site_featured_menu_names', $featured_names);
+
+// custom menu items
+$custom_menu_titles = get_input('custom_menu_titles', array());
+$custom_menu_urls = get_input('custom_menu_urls', array());
+$num_menu_items = count($custom_menu_titles);
+$custom_menu_items = array();
+for ($i = 0; $i < $num_menu_items; $i++) {
+ if (trim($custom_menu_urls[$i]) && trim($custom_menu_titles[$i])) {
+ $url = $custom_menu_urls[$i];
+ $title = $custom_menu_titles[$i];
+ $custom_menu_items[$title] = $url;
+ }
+}
+elgg_save_config('site_custom_menu_items', $custom_menu_items);
+
+
+system_message(elgg_echo('admin:menu_items:saved'));
+
+forward(REFERER);
diff --git a/actions/admin/plugins/activate.php b/actions/admin/plugins/activate.php
new file mode 100644
index 000000000..5234a4ca5
--- /dev/null
+++ b/actions/admin/plugins/activate.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Activate a plugin or plugins.
+ *
+ * Plugins to be activated are passed via $_REQUEST['plugin_guids'] as GUIDs.
+ * After activating the plugin(s), the views cache and simplecache are invalidated.
+ *
+ * @uses mixed $_GET['plugin_guids'] The GUIDs of the plugin to activate. Can be an array.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Plugins
+ */
+
+$plugin_guids = get_input('plugin_guids');
+
+if (!is_array($plugin_guids)) {
+ $plugin_guids = array($plugin_guids);
+}
+
+$activated_guids = array();
+foreach ($plugin_guids as $guid) {
+ $plugin = get_entity($guid);
+
+ if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('admin:plugins:activate:no', array($guid)));
+ continue;
+ }
+
+ if ($plugin->activate()) {
+ $activated_guids[] = $guid;
+ } else {
+ $msg = $plugin->getError();
+ $string = ($msg) ? 'admin:plugins:activate:no_with_msg' : 'admin:plugins:activate:no';
+ register_error(elgg_echo($string, array($plugin->getFriendlyName(), $plugin->getError())));
+ }
+}
+
+// don't regenerate the simplecache because the plugin won't be
+// loaded until next run. Just invalidate and let it regenerate as needed
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+if (count($activated_guids) === 1) {
+ $url = 'admin/plugins';
+ $query = (string)parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY);
+ if ($query) {
+ $url .= "?$query";
+ }
+ $plugin = get_entity($plugin_guids[0]);
+ $id = $css_id = preg_replace('/[^a-z0-9-]/i', '-', $plugin->getID());
+ forward("$url#$id");
+} else {
+ // forward to top of page with a failure so remove any #foo
+ $url = $_SERVER['HTTP_REFERER'];
+ if (strpos($url, '#')) {
+ $url = substr(0, strpos($url, '#'));
+ }
+ forward($url);
+} \ No newline at end of file
diff --git a/actions/admin/plugins/activate_all.php b/actions/admin/plugins/activate_all.php
new file mode 100644
index 000000000..4514ccbdf
--- /dev/null
+++ b/actions/admin/plugins/activate_all.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Activates all specified installed and inactive plugins.
+ *
+ * All specified plugins in the mod/ directory are that aren't active are activated and the views
+ * cache and simplecache are invalidated.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Plugins
+ */
+
+$guids = get_input('guids');
+$guids = explode(',', $guids);
+
+foreach ($guids as $guid) {
+ $plugin = get_entity($guid);
+ if (!$plugin->isActive()) {
+ if ($plugin->activate()) {
+ //system_message(elgg_echo('admin:plugins:activate:yes', array($plugin->getManifest()->getName())));
+ } else {
+ $msg = $plugin->getError();
+ $string = ($msg) ? 'admin:plugins:activate:no_with_msg' : 'admin:plugins:activate:no';
+ register_error(elgg_echo($string, array($plugin->getFriendlyName(), $plugin->getError())));
+ }
+ }
+}
+
+// don't regenerate the simplecache because the plugin won't be
+// loaded until next run. Just invalidate and let it regnerate as needed
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/plugins/deactivate.php b/actions/admin/plugins/deactivate.php
new file mode 100644
index 000000000..354f4717d
--- /dev/null
+++ b/actions/admin/plugins/deactivate.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Deactivate a plugin or plugins.
+ *
+ * Plugins to be deactivated are passed via $_REQUEST['plugin_guids'] as GUIDs.
+ * After deactivating the plugin(s), the views cache and simplecache are invalidated.
+ *
+ * @uses mixed $_GET['plugin_guids'] The GUIDs of the plugin to deactivate. Can be an array.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Plugins
+ */
+
+$plugin_guids = get_input('plugin_guids');
+
+if (!is_array($plugin_guids)) {
+ $plugin_guids = array($plugin_guids);
+}
+
+foreach ($plugin_guids as $guid) {
+ $plugin = get_entity($guid);
+
+ if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('admin:plugins:deactivate:no', array($guid)));
+ continue;
+ }
+
+ if ($plugin->deactivate()) {
+ //system_message(elgg_echo('admin:plugins:deactivate:yes', array($plugin->getManifest()->getName())));
+ } else {
+ $msg = $plugin->getError();
+ $string = ($msg) ? 'admin:plugins:deactivate:no_with_msg' : 'admin:plugins:deactivate:no';
+ register_error(elgg_echo($string, array($plugin->getFriendlyName(), $plugin->getError())));
+ }
+}
+
+// don't regenerate the simplecache because the plugin won't be
+// loaded until next run. Just invalidate and let it regnerate as needed
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+if (count($plugin_guids) == 1) {
+ $url = 'admin/plugins';
+ $query = (string)parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY);
+ if ($query) {
+ $url .= "?$query";
+ }
+ $plugin = get_entity($plugin_guids[0]);
+ $id = preg_replace('/[^a-z0-9-]/i', '-', $plugin->getID());
+ forward("$url#$id");
+} else {
+ forward(REFERER);
+}
diff --git a/actions/admin/plugins/deactivate_all.php b/actions/admin/plugins/deactivate_all.php
new file mode 100644
index 000000000..8b347a633
--- /dev/null
+++ b/actions/admin/plugins/deactivate_all.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Disable all specified installed plugins.
+ *
+ * Specified plugins in the mod/ directory are disabled and the views cache and simplecache
+ * are reset.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Plugins
+ */
+
+$guids = get_input('guids');
+$guids = explode(',', $guids);
+
+foreach ($guids as $guid) {
+ $plugin = get_entity($guid);
+ if ($plugin->isActive()) {
+ if ($plugin->deactivate()) {
+ //system_message(elgg_echo('admin:plugins:activate:yes', array($plugin->getManifest()->getName())));
+ } else {
+ $msg = $plugin->getError();
+ $string = ($msg) ? 'admin:plugins:deactivate:no_with_msg' : 'admin:plugins:deactivate:no';
+ register_error(elgg_echo($string, array($plugin->getFriendlyName(), $plugin->getError())));
+ }
+ }
+}
+
+// don't regenerate the simplecache because the plugin won't be
+// loaded until next run. Just invalidate and let it regnerate as needed
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+forward(REFERER);
diff --git a/actions/admin/plugins/set_priority.php b/actions/admin/plugins/set_priority.php
new file mode 100644
index 000000000..edd735371
--- /dev/null
+++ b/actions/admin/plugins/set_priority.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Changes the load priority of a plugin.
+ *
+ * Plugin priority affects view, action, and page handler
+ * overriding as well as the order of view extensions. Plugins with higher
+ * priority are loaded after and override plugins with lower priorities.
+ *
+ * NOTE: When viewing the plugin admin page, plugins LOWER on the page
+ * have HIGHER priority and will override views, etc from plugins above them.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Plugins
+ */
+
+$plugin_guid = get_input('plugin_guid');
+$priority = get_input('priority');
+
+$plugin = get_entity($plugin_guid);
+
+if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('admin:plugins:set_priority:no', array($plugin_guid)));
+ forward(REFERER);
+}
+
+if ($plugin->setPriority($priority)) {
+ //system_message(elgg_echo('admin:plugins:set_priority:yes', array($plugin->getManifest()->getName())));
+} else {
+ $msg = $plugin->getError();
+ $string = ($msg) ? 'admin:plugins:set_priority:no_with_msg' : 'admin:plugins:set_priority:no';
+ register_error(elgg_echo($string, array($plugin->getFriendlyName(), $plugin->getError())));
+}
+
+// don't regenerate the simplecache because the plugin won't be
+// loaded until next run. Just invalidate and let it regnerate as needed
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/site/flush_cache.php b/actions/admin/site/flush_cache.php
new file mode 100644
index 000000000..ebb8296c7
--- /dev/null
+++ b/actions/admin/site/flush_cache.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Flush all the caches
+ */
+
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+system_message(elgg_echo('admin:cache:flushed'));
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/site/unlock_upgrade.php b/actions/admin/site/unlock_upgrade.php
new file mode 100644
index 000000000..b625b1d26
--- /dev/null
+++ b/actions/admin/site/unlock_upgrade.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Unlocks the upgrade script
+ */
+
+if (_elgg_upgrade_is_locked()) {
+ _elgg_upgrade_unlock();
+}
+system_message(elgg_echo('upgrade:unlock:success'));
+forward(REFERER);
diff --git a/actions/admin/site/update_advanced.php b/actions/admin/site/update_advanced.php
new file mode 100644
index 000000000..0fd8d1f35
--- /dev/null
+++ b/actions/admin/site/update_advanced.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * Updates the advanced settings for the primary site object.
+ *
+ * Options are saved among metadata on the site object, entries
+ * in the datalist table, and entries in the config table.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Site
+ */
+
+if ($site = elgg_get_site_entity()) {
+ if (!($site instanceof ElggSite)) {
+ throw new InstallationException(elgg_echo('InvalidParameterException:NonElggSite'));
+ }
+
+ $site->url = get_input('wwwroot');
+
+ datalist_set('path', sanitise_filepath(get_input('path')));
+ $dataroot = sanitise_filepath(get_input('dataroot'));
+
+ // check for relative paths
+ if (stripos(PHP_OS, 'win') === 0) {
+ if (strpos($dataroot, ':') !== 1) {
+ $msg = elgg_echo('admin:configuration:dataroot:relative_path', array($dataroot));
+ register_error($msg);
+ forward(REFERER);
+ }
+ } else {
+ if (strpos($dataroot, '/') !== 0) {
+ $msg = elgg_echo('admin:configuration:dataroot:relative_path', array($dataroot));
+ register_error($msg);
+ forward(REFERER);
+ }
+ }
+
+ datalist_set('dataroot', $dataroot);
+
+ if (get_input('simplecache_enabled')) {
+ elgg_enable_simplecache();
+ } else {
+ elgg_disable_simplecache();
+ }
+
+ if (get_input('system_cache_enabled')) {
+ elgg_enable_system_cache();
+ } else {
+ elgg_disable_system_cache();
+ }
+
+ set_config('default_access', get_input('default_access', ACCESS_PRIVATE), $site->getGUID());
+
+ $user_default_access = (get_input('allow_user_default_access')) ? 1 : 0;
+ set_config('allow_user_default_access', $user_default_access, $site->getGUID());
+
+ $debug = get_input('debug');
+ if ($debug) {
+ set_config('debug', $debug, $site->getGUID());
+ } else {
+ unset_config('debug', $site->getGUID());
+ }
+
+ // allow new user registration?
+ if (get_input('allow_registration', FALSE)) {
+ set_config('allow_registration', TRUE, $site->getGUID());
+ } else {
+ set_config('allow_registration', FALSE, $site->getGUID());
+ }
+
+ // setup walled garden
+ if (get_input('walled_garden', FALSE)) {
+ set_config('walled_garden', TRUE, $site->getGUID());
+ } else {
+ set_config('walled_garden', FALSE, $site->getGUID());
+ }
+
+ $https_login = get_input('https_login');
+ if ($https_login) {
+ set_config('https_login', 1, $site->getGUID());
+ } else {
+ unset_config('https_login', $site->getGUID());
+ }
+
+ $api = get_input('api');
+ if ($api) {
+ unset_config('disable_api', $site->getGUID());
+ } else {
+ set_config('disable_api', 'disabled', $site->getGUID());
+ }
+
+ if ($site->save()) {
+ system_message(elgg_echo("admin:configuration:success"));
+ } else {
+ register_error(elgg_echo("admin:configuration:fail"));
+ }
+
+ forward(REFERER);
+} \ No newline at end of file
diff --git a/actions/admin/site/update_basic.php b/actions/admin/site/update_basic.php
new file mode 100644
index 000000000..97d258b65
--- /dev/null
+++ b/actions/admin/site/update_basic.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Updates the basic settings for the primary site object.
+ *
+ * Basic site settings are saved as metadata on the site object,
+ * with the exception of the default language, which is saved in
+ * the config table.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.Site
+ */
+
+if ($site = elgg_get_site_entity()) {
+ if (!($site instanceof ElggSite)) {
+ throw new InstallationException(elgg_echo('InvalidParameterException:NonElggSite'));
+ }
+
+ $site->description = get_input('sitedescription');
+ $site->name = get_input('sitename');
+ $site->email = get_input('siteemail');
+ $site->save();
+
+ set_config('language', get_input('language'), $site->getGUID());
+}
+
+system_message(elgg_echo('admin:configuration:success'));
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/user/ban.php b/actions/admin/user/ban.php
new file mode 100644
index 000000000..209ece2a0
--- /dev/null
+++ b/actions/admin/user/ban.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Bans a user.
+ *
+ * User entities are banned by setting the 'banned' column
+ * to 'yes' in the users_entity table.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
+
+$guid = get_input('guid');
+$user = get_entity($guid);
+
+if ($guid == elgg_get_logged_in_user_guid()) {
+ register_error(elgg_echo('admin:user:self:ban:no'));
+ forward(REFERER);
+}
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ if ($user->ban('banned')) {
+ system_message(elgg_echo('admin:user:ban:yes'));
+ } else {
+ register_error(elgg_echo('admin:user:ban:no'));
+ }
+} else {
+ register_error(elgg_echo('admin:user:ban:no'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/user/delete.php b/actions/admin/user/delete.php
new file mode 100644
index 000000000..7cfbd0925
--- /dev/null
+++ b/actions/admin/user/delete.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Delete a user.
+ *
+ * The user will be deleted recursively, meaning all entities
+ * owned or contained by the user will also be removed.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
+
+// Get the user
+$guid = get_input('guid');
+$user = get_entity($guid);
+
+if ($guid == elgg_get_logged_in_user_guid()) {
+ register_error(elgg_echo('admin:user:self:delete:no'));
+ forward(REFERER);
+}
+
+$name = $user->name;
+$username = $user->username;
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ if ($user->delete()) {
+ system_message(elgg_echo('admin:user:delete:yes', array($name)));
+ } else {
+ register_error(elgg_echo('admin:user:delete:no'));
+ }
+} else {
+ register_error(elgg_echo('admin:user:delete:no'));
+}
+
+// forward to user administration if on a user's page as it no longer exists
+$forward = REFERER;
+if (strpos($_SERVER['HTTP_REFERER'], $username) != FALSE) {
+ $forward = "admin/users/newest";
+}
+
+forward($forward);
diff --git a/actions/admin/user/makeadmin.php b/actions/admin/user/makeadmin.php
new file mode 100644
index 000000000..54b0b7070
--- /dev/null
+++ b/actions/admin/user/makeadmin.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Grants admin privileges to a user.
+ *
+ * In >=1.7.1, admin is flagged by setting the admin
+ * column in the users_entity table.
+ *
+ * In <1.7.1, admin is a piece of metadata on the user object.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
+
+$guid = get_input('guid');
+$user = get_entity($guid);
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ if ($user->makeAdmin()) {
+ system_message(elgg_echo('admin:user:makeadmin:yes'));
+ } else {
+ register_error(elgg_echo('admin:user:makeadmin:no'));
+ }
+} else {
+ register_error(elgg_echo('admin:user:makeadmin:no'));
+}
+
+forward(REFERER);
diff --git a/actions/admin/user/removeadmin.php b/actions/admin/user/removeadmin.php
new file mode 100644
index 000000000..8cebc7078
--- /dev/null
+++ b/actions/admin/user/removeadmin.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Revokes admin privileges from a user.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
+
+$guid = get_input('guid');
+$user = get_entity($guid);
+
+if ($guid == elgg_get_logged_in_user_guid()) {
+ register_error(elgg_echo('admin:user:self:removeadmin:no'));
+ forward(REFERER);
+}
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ if ($user->removeAdmin()) {
+ system_message(elgg_echo('admin:user:removeadmin:yes'));
+ } else {
+ register_error(elgg_echo('admin:user:removeadmin:no'));
+ }
+} else {
+ register_error(elgg_echo('admin:user:removeadmin:no'));
+}
+
+forward(REFERER);
diff --git a/actions/admin/user/resetpassword.php b/actions/admin/user/resetpassword.php
new file mode 100644
index 000000000..d019a7f55
--- /dev/null
+++ b/actions/admin/user/resetpassword.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Reset a user's password.
+ *
+ * This is an admin action that generates a new salt and password
+ * for a user, then emails the password to the user's registered
+ * email address.
+ *
+ * NOTE: This is different to the "reset password" link users
+ * can use in that it does not first email the user asking if
+ * they want to have their password reset.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
+
+$guid = get_input('guid');
+$user = get_entity($guid);
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ $password = generate_random_cleartext_password();
+
+ // Always reset the salt before generating the user password.
+ $user->salt = generate_random_cleartext_password();
+ $user->password = generate_user_password($user, $password);
+
+ if ($user->save()) {
+ system_message(elgg_echo('admin:user:resetpassword:yes'));
+
+ notify_user($user->guid,
+ elgg_get_site_entity()->guid,
+ elgg_echo('email:resetpassword:subject'),
+ elgg_echo('email:resetpassword:body', array($user->username, $password)),
+ NULL,
+ 'email');
+ } else {
+ register_error(elgg_echo('admin:user:resetpassword:no'));
+ }
+} else {
+ register_error(elgg_echo('admin:user:resetpassword:no'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/admin/user/unban.php b/actions/admin/user/unban.php
new file mode 100644
index 000000000..7a772a0d3
--- /dev/null
+++ b/actions/admin/user/unban.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Unbans a user.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.User
+ */
+
+$access_status = access_get_show_hidden_status();
+access_show_hidden_entities(true);
+
+$guid = get_input('guid');
+$user = get_entity($guid);
+
+if (($user instanceof ElggUser) && ($user->canEdit())) {
+ if ($user->unban()) {
+ system_message(elgg_echo('admin:user:unban:yes'));
+ } else {
+ register_error(elgg_echo('admin:user:unban:no'));
+ }
+} else {
+ register_error(elgg_echo('admin:user:unban:no'));
+}
+
+access_show_hidden_entities($access_status);
+
+forward(REFERER);
diff --git a/actions/avatar/crop.php b/actions/avatar/crop.php
new file mode 100644
index 000000000..b9a80f331
--- /dev/null
+++ b/actions/avatar/crop.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Avatar crop action
+ *
+ */
+
+$guid = get_input('guid');
+$owner = get_entity($guid);
+
+if (!$owner || !($owner instanceof ElggUser) || !$owner->canEdit()) {
+ register_error(elgg_echo('avatar:crop:fail'));
+ forward(REFERER);
+}
+
+$x1 = (int) get_input('x1', 0);
+$y1 = (int) get_input('y1', 0);
+$x2 = (int) get_input('x2', 0);
+$y2 = (int) get_input('y2', 0);
+
+$filehandler = new ElggFile();
+$filehandler->owner_guid = $owner->getGUID();
+$filehandler->setFilename("profile/" . $owner->guid . "master" . ".jpg");
+$filename = $filehandler->getFilenameOnFilestore();
+
+// ensuring the avatar image exists in the first place
+if (!file_exists($filename)) {
+ register_error(elgg_echo('avatar:crop:fail'));
+ forward(REFERER);
+}
+
+$icon_sizes = elgg_get_config('icon_sizes');
+unset($icon_sizes['master']);
+
+// get the images and save their file handlers into an array
+// so we can do clean up if one fails.
+$files = array();
+foreach ($icon_sizes as $name => $size_info) {
+ $resized = get_resized_image_from_existing_file($filename, $size_info['w'], $size_info['h'], $size_info['square'], $x1, $y1, $x2, $y2, $size_info['upscale']);
+
+ if ($resized) {
+ //@todo Make these actual entities. See exts #348.
+ $file = new ElggFile();
+ $file->owner_guid = $guid;
+ $file->setFilename("profile/{$guid}{$name}.jpg");
+ $file->open('write');
+ $file->write($resized);
+ $file->close();
+ $files[] = $file;
+ } else {
+ // cleanup on fail
+ foreach ($files as $file) {
+ $file->delete();
+ }
+
+ register_error(elgg_echo('avatar:resize:fail'));
+ forward(REFERER);
+ }
+}
+
+$owner->icontime = time();
+
+$owner->x1 = $x1;
+$owner->x2 = $x2;
+$owner->y1 = $y1;
+$owner->y2 = $y2;
+
+system_message(elgg_echo('avatar:crop:success'));
+$view = 'river/user/default/profileiconupdate';
+elgg_delete_river(array('subject_guid' => $owner->guid, 'view' => $view));
+add_to_river($view, 'update', $owner->guid, $owner->guid);
+
+forward(REFERER);
diff --git a/actions/avatar/remove.php b/actions/avatar/remove.php
new file mode 100644
index 000000000..cd38e456a
--- /dev/null
+++ b/actions/avatar/remove.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Avatar remove action
+ */
+
+$guid = get_input('guid');
+$user = get_entity($guid);
+if ($user) {
+ // Delete all icons from diskspace
+ $icon_sizes = elgg_get_config('icon_sizes');
+ foreach ($icon_sizes as $name => $size_info) {
+ $file = new ElggFile();
+ $file->owner_guid = $guid;
+ $file->setFilename("profile/{$guid}{$name}.jpg");
+ $filepath = $file->getFilenameOnFilestore();
+ if (!$file->delete()) {
+ elgg_log("Avatar file remove failed. Remove $filepath manually, please.", 'WARNING');
+ }
+ }
+
+ // Remove crop coords
+ unset($user->x1);
+ unset($user->x2);
+ unset($user->y1);
+ unset($user->y2);
+
+ // Remove icon
+ unset($user->icontime);
+ system_message(elgg_echo('avatar:remove:success'));
+} else {
+ register_error(elgg_echo('avatar:remove:fail'));
+}
+
+forward(REFERER);
diff --git a/actions/avatar/upload.php b/actions/avatar/upload.php
new file mode 100644
index 000000000..0752615e0
--- /dev/null
+++ b/actions/avatar/upload.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Avatar upload action
+ */
+
+$guid = get_input('guid');
+$owner = get_entity($guid);
+
+if (!$owner || !($owner instanceof ElggUser) || !$owner->canEdit()) {
+ register_error(elgg_echo('avatar:upload:fail'));
+ forward(REFERER);
+}
+
+if ($_FILES['avatar']['error'] != 0) {
+ register_error(elgg_echo('avatar:upload:fail'));
+ forward(REFERER);
+}
+
+$icon_sizes = elgg_get_config('icon_sizes');
+
+// get the images and save their file handlers into an array
+// so we can do clean up if one fails.
+$files = array();
+foreach ($icon_sizes as $name => $size_info) {
+ $resized = get_resized_image_from_uploaded_file('avatar', $size_info['w'], $size_info['h'], $size_info['square'], $size_info['upscale']);
+
+ if ($resized) {
+ //@todo Make these actual entities. See exts #348.
+ $file = new ElggFile();
+ $file->owner_guid = $guid;
+ $file->setFilename("profile/{$guid}{$name}.jpg");
+ $file->open('write');
+ $file->write($resized);
+ $file->close();
+ $files[] = $file;
+ } else {
+ // cleanup on fail
+ foreach ($files as $file) {
+ $file->delete();
+ }
+
+ register_error(elgg_echo('avatar:resize:fail'));
+ forward(REFERER);
+ }
+}
+
+// reset crop coordinates
+$owner->x1 = 0;
+$owner->x2 = 0;
+$owner->y1 = 0;
+$owner->y2 = 0;
+
+$owner->icontime = time();
+if (elgg_trigger_event('profileiconupdate', $owner->type, $owner)) {
+ system_message(elgg_echo("avatar:upload:success"));
+
+ $view = 'river/user/default/profileiconupdate';
+ elgg_delete_river(array('subject_guid' => $owner->guid, 'view' => $view));
+ add_to_river($view, 'update', $owner->guid, $owner->guid);
+}
+
+forward(REFERER);
diff --git a/actions/comments/add.php b/actions/comments/add.php
new file mode 100644
index 000000000..5bd741413
--- /dev/null
+++ b/actions/comments/add.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Elgg add comment action
+ *
+ * @package Elgg.Core
+ * @subpackage Comments
+ */
+
+$entity_guid = (int) get_input('entity_guid');
+$comment_text = get_input('generic_comment');
+
+if (empty($comment_text)) {
+ register_error(elgg_echo("generic_comment:blank"));
+ forward(REFERER);
+}
+
+// Let's see if we can get an entity with the specified GUID
+$entity = get_entity($entity_guid);
+if (!$entity) {
+ register_error(elgg_echo("generic_comment:notfound"));
+ forward(REFERER);
+}
+
+$user = elgg_get_logged_in_user_entity();
+
+$annotation = create_annotation($entity->guid,
+ 'generic_comment',
+ $comment_text,
+ "",
+ $user->guid,
+ $entity->access_id);
+
+// tell user annotation posted
+if (!$annotation) {
+ register_error(elgg_echo("generic_comment:failure"));
+ forward(REFERER);
+}
+
+// notify if poster wasn't owner
+if ($entity->owner_guid != $user->guid) {
+
+ notify_user($entity->owner_guid,
+ $user->guid,
+ elgg_echo('generic_comment:email:subject'),
+ elgg_echo('generic_comment:email:body', array(
+ $entity->title,
+ $user->name,
+ $comment_text,
+ $entity->getURL(),
+ $user->name,
+ $user->getURL()
+ ))
+ );
+}
+
+system_message(elgg_echo("generic_comment:posted"));
+
+//add to river
+add_to_river('river/annotation/generic_comment/create', 'comment', $user->guid, $entity->guid, "", 0, $annotation);
+
+// Forward to the page the action occurred on
+forward(REFERER);
diff --git a/actions/comments/delete.php b/actions/comments/delete.php
new file mode 100644
index 000000000..f2c058ff4
--- /dev/null
+++ b/actions/comments/delete.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Elgg delete comment action
+ *
+ * @package Elgg
+ */
+
+// Ensure we're logged in
+if (!elgg_is_logged_in()) {
+ forward();
+}
+
+// Make sure we can get the comment in question
+$annotation_id = (int) get_input('annotation_id');
+$comment = elgg_get_annotation_from_id($annotation_id);
+if ($comment && $comment->canEdit()) {
+ $comment->delete();
+ system_message(elgg_echo("generic_comment:deleted"));
+} else {
+ register_error(elgg_echo("generic_comment:notdeleted"));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/entities/delete.php b/actions/entities/delete.php
new file mode 100644
index 000000000..251e1f01c
--- /dev/null
+++ b/actions/entities/delete.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Default entity delete action
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$guid = get_input('guid');
+$entity = get_entity($guid);
+
+if (($entity) && ($entity->canEdit())) {
+ if ($entity->delete()) {
+ system_message(elgg_echo('entity:delete:success', array($guid)));
+ } else {
+ register_error(elgg_echo('entity:delete:fail', array($guid)));
+ }
+} else {
+ register_error(elgg_echo('entity:delete:fail', array($guid)));
+}
+
+forward(REFERER);
diff --git a/actions/friends/add.php b/actions/friends/add.php
new file mode 100644
index 000000000..d1800ee14
--- /dev/null
+++ b/actions/friends/add.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Elgg add friend action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Management
+ */
+
+// Get the GUID of the user to friend
+$friend_guid = get_input('friend');
+$friend = get_entity($friend_guid);
+if (!$friend) {
+ register_error(elgg_echo('error:missing_data'));
+ forward(REFERER);
+}
+
+$errors = false;
+
+// Get the user
+try {
+ if (!elgg_get_logged_in_user_entity()->addFriend($friend_guid)) {
+ $errors = true;
+ }
+} catch (Exception $e) {
+ register_error(elgg_echo("friends:add:failure", array($friend->name)));
+ $errors = true;
+}
+if (!$errors) {
+ // add to river
+ add_to_river('river/relationship/friend/create', 'friend', elgg_get_logged_in_user_guid(), $friend_guid);
+ system_message(elgg_echo("friends:add:successful", array($friend->name)));
+}
+
+// Forward back to the page you friended the user on
+forward(REFERER);
diff --git a/actions/friends/collections/add.php b/actions/friends/collections/add.php
new file mode 100644
index 000000000..9dc17b37e
--- /dev/null
+++ b/actions/friends/collections/add.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Elgg collection add page
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Collections
+ */
+
+$collection_name = get_input('collection_name');
+$friends = get_input('friends_collection');
+
+if (!$collection_name) {
+ register_error(elgg_echo("friends:nocollectionname"));
+ forward(REFERER);
+}
+
+$id = create_access_collection($collection_name);
+
+if ($id) {
+ $result = update_access_collection($id, $friends);
+ if ($result) {
+ system_message(elgg_echo("friends:collectionadded"));
+ forward("collections/" . elgg_get_logged_in_user_entity()->username);
+ } else {
+ register_error(elgg_echo("friends:nocollectionname"));
+ forward(REFERER);
+ }
+} else {
+ register_error(elgg_echo("friends:nocollectionname"));
+ forward(REFERER);
+} \ No newline at end of file
diff --git a/actions/friends/collections/delete.php b/actions/friends/collections/delete.php
new file mode 100644
index 000000000..ff8f1fb55
--- /dev/null
+++ b/actions/friends/collections/delete.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Elgg friends: delete collection action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Collections
+ */
+
+$collection_id = (int) get_input('collection');
+
+// check the ACL exists and we can edit
+if (!can_edit_access_collection($collection_id)) {
+ register_error(elgg_echo("friends:collectiondeletefailed"));
+ forward(REFERER);
+}
+
+if (delete_access_collection($collection_id)) {
+ system_message(elgg_echo("friends:collectiondeleted"));
+} else {
+ register_error(elgg_echo("friends:collectiondeletefailed"));
+}
+
+forward(REFERER);
diff --git a/actions/friends/collections/edit.php b/actions/friends/collections/edit.php
new file mode 100644
index 000000000..9eb5e1eab
--- /dev/null
+++ b/actions/friends/collections/edit.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Friends collection edit action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Collections
+ */
+
+$collection_id = get_input('collection_id');
+$friends = get_input('friend');
+
+// check it exists and we can edit
+if (!can_edit_access_collection($collection_id)) {
+ system_message(elgg_echo('friends:collection:edit_failed'));
+}
+
+if (update_access_collection($collection_id, $friends)) {
+ system_message(elgg_echo('friends:collections:edited'));
+} else {
+ system_message(elgg_echo('friends:collection:edit_failed'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/friends/remove.php b/actions/friends/remove.php
new file mode 100644
index 000000000..d69d18f31
--- /dev/null
+++ b/actions/friends/remove.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Elgg remove friend action
+ *
+ * @package Elgg.Core
+ * @subpackage Friends.Management
+ */
+
+// Get the GUID of the user to friend
+$friend_guid = get_input('friend');
+$friend = get_entity($friend_guid);
+$errors = false;
+
+// Get the user
+try{
+ if ($friend instanceof ElggUser) {
+ elgg_get_logged_in_user_entity()->removeFriend($friend_guid);
+ } else {
+ register_error(elgg_echo("friends:remove:failure", array($friend->name)));
+ $errors = true;
+ }
+} catch (Exception $e) {
+ register_error(elgg_echo("friends:remove:failure", array($friend->name)));
+ $errors = true;
+}
+
+if (!$errors) {
+ system_message(elgg_echo("friends:remove:successful", array($friend->name)));
+}
+
+// Forward back to the page you made the friend on
+forward(REFERER);
diff --git a/actions/import/opendd.php b/actions/import/opendd.php
new file mode 100644
index 000000000..e63607145
--- /dev/null
+++ b/actions/import/opendd.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Elgg OpenDD import action.
+ *
+ * This action accepts data to import (in OpenDD format) and performs and import. It accepts
+ * data as $data.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$data = get_input('data', '', false);
+
+$return = import($data);
+
+if ($return) {
+ system_message(elgg_echo('importsuccess'));
+} else {
+ register_error(elgg_echo('importfail'));
+}
+
+forward(REFERER);
diff --git a/actions/login.php b/actions/login.php
new file mode 100644
index 000000000..1e5e92ede
--- /dev/null
+++ b/actions/login.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Elgg login action
+ *
+ * @package Elgg.Core
+ * @subpackage User.Authentication
+ */
+
+// set forward url
+if (!empty($_SESSION['last_forward_from'])) {
+ $forward_url = $_SESSION['last_forward_from'];
+ unset($_SESSION['last_forward_from']);
+} elseif (get_input('returntoreferer')) {
+ $forward_url = REFERER;
+} else {
+ // forward to main index page
+ $forward_url = '';
+}
+
+$username = get_input('username');
+$password = get_input('password', null, false);
+$persistent = (bool) get_input("persistent");
+$result = false;
+
+if (empty($username) || empty($password)) {
+ register_error(elgg_echo('login:empty'));
+ forward();
+}
+
+// check if logging in with email address
+if (strpos($username, '@') !== false && ($users = get_user_by_email($username))) {
+ $username = $users[0]->username;
+}
+
+$result = elgg_authenticate($username, $password);
+if ($result !== true) {
+ register_error($result);
+ forward(REFERER);
+}
+
+$user = get_user_by_username($username);
+if (!$user) {
+ register_error(elgg_echo('login:baduser'));
+ forward(REFERER);
+}
+
+try {
+ login($user, $persistent);
+ // re-register at least the core language file for users with language other than site default
+ register_translations(dirname(dirname(__FILE__)) . "/languages/");
+} catch (LoginException $e) {
+ register_error($e->getMessage());
+ forward(REFERER);
+}
+
+// elgg_echo() caches the language and does not provide a way to change the language.
+// @todo we need to use the config object to store this so that the current language
+// can be changed. Refs #4171
+if ($user->language) {
+ $message = elgg_echo('loginok', array(), $user->language);
+} else {
+ $message = elgg_echo('loginok');
+}
+
+system_message($message);
+forward($forward_url);
diff --git a/actions/logout.php b/actions/logout.php
new file mode 100644
index 000000000..c48a26b15
--- /dev/null
+++ b/actions/logout.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Elgg logout action
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// Log out
+$result = logout();
+
+// Set the system_message as appropriate
+if ($result) {
+ system_message(elgg_echo('logoutok'));
+ forward();
+} else {
+ register_error(elgg_echo('logouterror'));
+} \ No newline at end of file
diff --git a/actions/notifications/settings/usersettings/save.php b/actions/notifications/settings/usersettings/save.php
new file mode 100644
index 000000000..455a444e1
--- /dev/null
+++ b/actions/notifications/settings/usersettings/save.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Elgg notifications user preference save acion.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$method = get_input('method');
+
+$current_settings = get_user_notification_settings();
+
+$result = false;
+foreach ($method as $k => $v) {
+ // check if setting has changed and skip if not
+ if ($current_settings->$k == ($v == 'yes')) {
+ continue;
+ }
+
+ $result = set_user_notification_setting(elgg_get_logged_in_user_guid(), $k, ($v == 'yes') ? true : false);
+
+ if (!$result) {
+ register_error(elgg_echo('notifications:usersettings:save:fail'));
+ }
+}
+
+if ($result) {
+ system_message(elgg_echo('notifications:usersettings:save:ok'));
+}
diff --git a/actions/plugins/settings/save.php b/actions/plugins/settings/save.php
new file mode 100644
index 000000000..581a2f9ec
--- /dev/null
+++ b/actions/plugins/settings/save.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Saves global plugin settings.
+ *
+ * This action can be overriden for a specific plugin by creating the
+ * <plugin_id>/settings/save action in that plugin.
+ *
+ * @uses array $_REQUEST['params'] A set of key/value pairs to save to the ElggPlugin entity
+ * @uses int $_REQUEST['plugin_id'] The ID of the plugin
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
+ */
+
+$params = get_input('params');
+$plugin_id = get_input('plugin_id');
+$plugin = elgg_get_plugin_from_id($plugin_id);
+
+if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('plugins:settings:save:fail', array($plugin_id)));
+ forward(REFERER);
+}
+
+$plugin_name = $plugin->getManifest()->getName();
+
+$result = false;
+
+// allow a plugin to override the save action for their settings
+if (elgg_action_exists("$plugin_id/settings/save")) {
+ action("$plugin_id/settings/save");
+} else {
+ foreach ($params as $k => $v) {
+ $result = $plugin->setSetting($k, $v);
+ if (!$result) {
+ register_error(elgg_echo('plugins:settings:save:fail', array($plugin_name)));
+ forward(REFERER);
+ exit;
+ }
+ }
+}
+
+system_message(elgg_echo('plugins:settings:save:ok', array($plugin_name)));
+forward(REFERER); \ No newline at end of file
diff --git a/actions/plugins/usersettings/save.php b/actions/plugins/usersettings/save.php
new file mode 100644
index 000000000..f6b8ab0b6
--- /dev/null
+++ b/actions/plugins/usersettings/save.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Saves user-specific plugin settings.
+ *
+ * This action can be overriden for a specific plugin by creating the
+ * <plugin_id>/usersettings/save action in that plugin.
+ *
+ * @uses array $_REQUEST['params'] A set of key/value pairs to save to the ElggPlugin entity
+ * @uses int $_REQUEST['plugin_id'] The id of the plugin
+ * @uses int $_REQUEST['user_guid'] The GUID of the user to save settings for.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
+ */
+
+$params = get_input('params');
+$plugin_id = get_input('plugin_id');
+$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid());
+$plugin = elgg_get_plugin_from_id($plugin_id);
+$user = get_entity($user_guid);
+
+if (!($plugin instanceof ElggPlugin)) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_id)));
+ forward(REFERER);
+}
+
+if (!($user instanceof ElggUser)) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_id)));
+ forward(REFERER);
+}
+
+$plugin_name = $plugin->getManifest()->getName();
+
+// make sure we're admin or the user
+if (!$user->canEdit()) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_name)));
+ forward(REFERER);
+}
+
+$result = false;
+
+if (elgg_action_exists("$plugin_id/usersettings/save")) {
+ action("$plugin_id/usersettings/save");
+} else {
+ foreach ($params as $k => $v) {
+ // Save
+ $result = $plugin->setUserSetting($k, $v, $user->guid);
+
+ // Error?
+ if (!$result) {
+ register_error(elgg_echo('plugins:usersettings:save:fail', array($plugin_name)));
+ forward(REFERER);
+ }
+ }
+}
+
+system_message(elgg_echo('plugins:usersettings:save:ok', array($plugin_name)));
+forward(REFERER);
diff --git a/actions/profile/edit.php b/actions/profile/edit.php
new file mode 100644
index 000000000..89bf2bc0b
--- /dev/null
+++ b/actions/profile/edit.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * Elgg profile edit action
+ *
+ */
+
+$guid = get_input('guid');
+$owner = get_entity($guid);
+
+if (!$owner || !($owner instanceof ElggUser) || !$owner->canEdit()) {
+ register_error(elgg_echo('profile:edit:fail'));
+ forward(REFERER);
+}
+
+// grab the defined profile field names and their load the values from POST.
+// each field can have its own access, so sort that too.
+$input = array();
+$accesslevel = get_input('accesslevel');
+
+if (!is_array($accesslevel)) {
+ $accesslevel = array();
+}
+
+/**
+ * wrapper for recursive array walk decoding
+ */
+function profile_array_decoder(&$v) {
+ $v = _elgg_html_decode($v);
+}
+
+$profile_fields = elgg_get_config('profile_fields');
+foreach ($profile_fields as $shortname => $valuetype) {
+ // the decoding is a stop gap to prevent &amp;&amp; showing up in profile fields
+ // because it is escaped on both input (get_input()) and output (view:output/text). see #561 and #1405.
+ // must decode in utf8 or string corruption occurs. see #1567.
+ $value = get_input($shortname);
+ if (is_array($value)) {
+ array_walk_recursive($value, 'profile_array_decoder');
+ } else {
+ $value = _elgg_html_decode($value);
+ }
+
+ // limit to reasonable sizes
+ // @todo - throwing away changes due to this is dumb!
+ if (!is_array($value) && $valuetype != 'longtext' && elgg_strlen($value) > 250) {
+ $error = elgg_echo('profile:field_too_long', array(elgg_echo("profile:{$shortname}")));
+ register_error($error);
+ forward(REFERER);
+ }
+
+ if ($valuetype == 'tags') {
+ $value = string_to_tag_array($value);
+ }
+
+ $input[$shortname] = $value;
+}
+
+// display name is handled separately
+$name = strip_tags(get_input('name'));
+if ($name) {
+ if (elgg_strlen($name) > 50) {
+ register_error(elgg_echo('user:name:fail'));
+ } elseif ($owner->name != $name) {
+ $owner->name = $name;
+ $owner->save();
+ }
+}
+
+// go through custom fields
+if (sizeof($input) > 0) {
+ foreach ($input as $shortname => $value) {
+ $options = array(
+ 'guid' => $owner->guid,
+ 'metadata_name' => $shortname,
+ 'limit' => false
+ );
+ elgg_delete_metadata($options);
+
+ if(!is_null($value) && ($value !== '')){
+ // only create metadata for non empty values (0 is allowed) to prevent metadata records with empty string values #4858
+
+ if (isset($accesslevel[$shortname])) {
+ $access_id = (int) $accesslevel[$shortname];
+ } else {
+ // this should never be executed since the access level should always be set
+ $access_id = ACCESS_DEFAULT;
+ }
+ if (is_array($value)) {
+ $i = 0;
+ foreach ($value as $interval) {
+ $i++;
+ $multiple = ($i > 1) ? TRUE : FALSE;
+ create_metadata($owner->guid, $shortname, $interval, 'text', $owner->guid, $access_id, $multiple);
+ }
+ } else {
+ create_metadata($owner->getGUID(), $shortname, $value, 'text', $owner->getGUID(), $access_id);
+ }
+ }
+ }
+
+ $owner->save();
+
+ // Notify of profile update
+ elgg_trigger_event('profileupdate', $owner->type, $owner);
+
+ system_message(elgg_echo("profile:saved"));
+}
+
+forward($owner->getUrl());
diff --git a/actions/profile/fields/add.php b/actions/profile/fields/add.php
new file mode 100644
index 000000000..fce783092
--- /dev/null
+++ b/actions/profile/fields/add.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Elgg profile plugin edit default profile action
+ *
+ */
+
+$label = get_input('label');
+$type = get_input('type');
+
+$fieldlist = elgg_get_config('profile_custom_fields');
+if (!$fieldlist) {
+ $fieldlist = '';
+ $id = 1;
+} else {
+ $fieldlistarray = explode(',', $fieldlist);
+ foreach ($fieldlistarray as $key => $value) {
+ $fieldlistarray[$key] = (int)$value;
+ }
+ $id = max($fieldlistarray) + 1;
+}
+
+if (($label) && ($type)) {
+ if (!empty($fieldlist)) {
+ $fieldlist .= ',';
+ }
+ $fieldlist .= "$id";
+
+ if (elgg_save_config("admin_defined_profile_$id", $label) &&
+ elgg_save_config("admin_defined_profile_type_$id", $type) &&
+ elgg_save_config('profile_custom_fields', $fieldlist)) {
+
+ system_message(elgg_echo('profile:editdefault:success'));
+ } else {
+ register_error(elgg_echo('profile:editdefault:fail'));
+ }
+} else {
+ register_error(elgg_echo('profile:editdefault:fail'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/profile/fields/delete.php b/actions/profile/fields/delete.php
new file mode 100644
index 000000000..9879feb3f
--- /dev/null
+++ b/actions/profile/fields/delete.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Elgg profile plugin edit default profile action removal
+ *
+ */
+
+$id = get_input('id');
+
+$fieldlist = elgg_get_config('profile_custom_fields');
+if (!$fieldlist) {
+ $fieldlist = '';
+}
+
+$fieldlist = str_replace("{$id},", "", $fieldlist);
+$fieldlist = str_replace(",{$id}", "", $fieldlist);
+$fieldlist = str_replace("{$id}", "", $fieldlist);
+
+if ($id &&
+ unset_config("admin_defined_profile_$id") &&
+ unset_config("admin_defined_profile_type_$id") &&
+ elgg_save_config('profile_custom_fields', $fieldlist)) {
+
+ system_message(elgg_echo('profile:editdefault:delete:success'));
+} else {
+ register_error(elgg_echo('profile:editdefault:delete:fail'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/profile/fields/edit.php b/actions/profile/fields/edit.php
new file mode 100644
index 000000000..5fc84ff11
--- /dev/null
+++ b/actions/profile/fields/edit.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Edit a custom profile field
+ */
+
+$id = get_input('id');
+$label = get_input('label');
+
+if (!elgg_get_config("admin_defined_profile_$id")) {
+ register_error(elgg_echo('profile:editdefault:fail'));
+ forward(REFERER);
+}
+
+if (elgg_save_config("admin_defined_profile_$id", $label)) {
+ system_message(elgg_echo('profile:editdefault:success'));
+} else {
+ register_error(elgg_echo('profile:editdefault:fail'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/profile/fields/reorder.php b/actions/profile/fields/reorder.php
new file mode 100644
index 000000000..27c716749
--- /dev/null
+++ b/actions/profile/fields/reorder.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg profile plugin reorder fields
+ *
+ */
+
+$ordering = get_input('fieldorder');
+
+$result = elgg_save_config('profile_custom_fields', $ordering);
+
+// called by ajax so we exit
+exit;
diff --git a/actions/profile/fields/reset.php b/actions/profile/fields/reset.php
new file mode 100644
index 000000000..19efae479
--- /dev/null
+++ b/actions/profile/fields/reset.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Reset profile fields action
+ *
+ */
+
+$fieldlist = elgg_get_config('profile_custom_fields');
+if ($fieldlist) {
+ $fieldlistarray = explode(',', $fieldlist);
+ foreach ($fieldlistarray as $listitem) {
+ unset_config("admin_defined_profile_{$listitem}");
+ unset_config("admin_defined_profile_type_{$listitem}");
+ }
+}
+
+unset_config('profile_custom_fields');
+
+system_message(elgg_echo('profile:defaultprofile:reset'));
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/register.php b/actions/register.php
new file mode 100644
index 000000000..810ceaf27
--- /dev/null
+++ b/actions/register.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Elgg registration action
+ *
+ * @package Elgg.Core
+ * @subpackage User.Account
+ */
+
+elgg_make_sticky_form('register');
+
+// Get variables
+$username = get_input('username');
+$password = get_input('password', null, false);
+$password2 = get_input('password2', null, false);
+$email = get_input('email');
+$name = get_input('name');
+$friend_guid = (int) get_input('friend_guid', 0);
+$invitecode = get_input('invitecode');
+
+if (elgg_get_config('allow_registration')) {
+ try {
+ if (trim($password) == "" || trim($password2) == "") {
+ throw new RegistrationException(elgg_echo('RegistrationException:EmptyPassword'));
+ }
+
+ if (strcmp($password, $password2) != 0) {
+ throw new RegistrationException(elgg_echo('RegistrationException:PasswordMismatch'));
+ }
+
+ $guid = register_user($username, $password, $name, $email, false, $friend_guid, $invitecode);
+
+ if ($guid) {
+ $new_user = get_entity($guid);
+
+ // allow plugins to respond to self registration
+ // note: To catch all new users, even those created by an admin,
+ // register for the create, user event instead.
+ // only passing vars that aren't in ElggUser.
+ $params = array(
+ 'user' => $new_user,
+ 'password' => $password,
+ 'friend_guid' => $friend_guid,
+ 'invitecode' => $invitecode
+ );
+
+ // @todo should registration be allowed no matter what the plugins return?
+ if (!elgg_trigger_plugin_hook('register', 'user', $params, TRUE)) {
+ $new_user->delete();
+ // @todo this is a generic messages. We could have plugins
+ // throw a RegistrationException, but that is very odd
+ // for the plugin hooks system.
+ throw new RegistrationException(elgg_echo('registerbad'));
+ }
+
+ elgg_clear_sticky_form('register');
+ system_message(elgg_echo("registerok", array(elgg_get_site_entity()->name)));
+
+ // if exception thrown, this probably means there is a validation
+ // plugin that has disabled the user
+ try {
+ login($new_user);
+ } catch (LoginException $e) {
+ // do nothing
+ }
+
+ // Forward on success, assume everything else is an error...
+ forward();
+ } else {
+ register_error(elgg_echo("registerbad"));
+ }
+ } catch (RegistrationException $r) {
+ register_error($r->getMessage());
+ }
+} else {
+ register_error(elgg_echo('registerdisabled'));
+}
+
+forward(REFERER);
diff --git a/actions/river/delete.php b/actions/river/delete.php
new file mode 100644
index 000000000..0d8297932
--- /dev/null
+++ b/actions/river/delete.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * River item delete action
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$id = get_input('id', false);
+
+if ($id !== false && elgg_is_admin_logged_in()) {
+ if (elgg_delete_river(array('id' => $id))) {
+ system_message(elgg_echo('river:delete:success'));
+ } else {
+ register_error(elgg_echo('river:delete:fail'));
+ }
+} else {
+ register_error(elgg_echo('river:delete:fail'));
+}
+
+forward(REFERER);
diff --git a/actions/security/refreshtoken.php b/actions/security/refreshtoken.php
new file mode 100644
index 000000000..74a72c4af
--- /dev/null
+++ b/actions/security/refreshtoken.php
@@ -0,0 +1,5 @@
+<?php
+$ts = time();
+$token = generate_action_token($ts);
+
+echo json_encode(array('__elgg_ts' => $ts, '__elgg_token' => $token)); \ No newline at end of file
diff --git a/actions/user/passwordreset.php b/actions/user/passwordreset.php
new file mode 100644
index 000000000..201d6abcf
--- /dev/null
+++ b/actions/user/passwordreset.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Action to reset a password and send success email.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$user_guid = get_input('u');
+$code = get_input('c');
+
+if (execute_new_password_request($user_guid, $code)) {
+ system_message(elgg_echo('user:password:success'));
+} else {
+ register_error(elgg_echo('user:password:fail'));
+}
+
+forward();
+exit;
diff --git a/actions/user/requestnewpassword.php b/actions/user/requestnewpassword.php
new file mode 100644
index 000000000..f1d4fa43c
--- /dev/null
+++ b/actions/user/requestnewpassword.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Action to request a new password.
+ *
+ * @package Elgg.Core
+ * @subpackage User.Account
+ */
+
+$username = get_input('username');
+
+// allow email addresses
+if (strpos($username, '@') !== false && ($users = get_user_by_email($username))) {
+ $username = $users[0]->username;
+}
+
+$user = get_user_by_username($username);
+if ($user) {
+ if (send_new_password_request($user->guid)) {
+ system_message(elgg_echo('user:password:resetreq:success'));
+ } else {
+ register_error(elgg_echo('user:password:resetreq:fail'));
+ }
+} else {
+ register_error(elgg_echo('user:username:notfound', array($username)));
+}
+
+forward();
diff --git a/actions/user/spotlight.php b/actions/user/spotlight.php
new file mode 100644
index 000000000..202dde387
--- /dev/null
+++ b/actions/user/spotlight.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Close or open spotlight.
+ *
+ * @package Elgg.Core
+ * @subpackage Spotlight
+ * @todo This is deprecated in 1.8
+ */
+
+$closed = get_input('closed', 'true');
+if ($closed != 'true') {
+ $closed = false;
+} else {
+ $closed = true;
+}
+
+elgg_get_logged_in_user_entity()->spotlightclosed = $closed;
+// exit as this action is called through Ajax
+exit; \ No newline at end of file
diff --git a/actions/useradd.php b/actions/useradd.php
new file mode 100644
index 000000000..17459021b
--- /dev/null
+++ b/actions/useradd.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Elgg add action
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+elgg_make_sticky_form('useradd');
+
+// Get variables
+$username = get_input('username');
+$password = get_input('password', null, false);
+$password2 = get_input('password2', null, false);
+$email = get_input('email');
+$name = get_input('name');
+
+$admin = get_input('admin');
+if (is_array($admin)) {
+ $admin = $admin[0];
+}
+
+// no blank fields
+if ($username == '' || $password == '' || $password2 == '' || $email == '' || $name == '') {
+ register_error(elgg_echo('register:fields'));
+ forward(REFERER);
+}
+
+if (strcmp($password, $password2) != 0) {
+ register_error(elgg_echo('RegistrationException:PasswordMismatch'));
+ forward(REFERER);
+}
+
+// For now, just try and register the user
+try {
+ $guid = register_user($username, $password, $name, $email, TRUE);
+
+ if ($guid) {
+ $new_user = get_entity($guid);
+ if ($new_user && $admin && elgg_is_admin_logged_in()) {
+ $new_user->makeAdmin();
+ }
+
+ elgg_clear_sticky_form('useradd');
+
+ $new_user->admin_created = TRUE;
+ // @todo ugh, saving a guid as metadata!
+ $new_user->created_by_guid = elgg_get_logged_in_user_guid();
+
+ $subject = elgg_echo('useradd:subject');
+ $body = elgg_echo('useradd:body', array(
+ $name,
+ elgg_get_site_entity()->name,
+ elgg_get_site_entity()->url,
+ $username,
+ $password,
+ ));
+
+ notify_user($new_user->guid, elgg_get_site_entity()->guid, $subject, $body);
+
+ system_message(elgg_echo("adduser:ok", array(elgg_get_site_entity()->name)));
+ } else {
+ register_error(elgg_echo("adduser:bad"));
+ }
+} catch (RegistrationException $r) {
+ register_error($r->getMessage());
+}
+
+forward(REFERER);
diff --git a/actions/usersettings/save.php b/actions/usersettings/save.php
new file mode 100644
index 000000000..eb6cdbd5d
--- /dev/null
+++ b/actions/usersettings/save.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Aggregate action for saving settings
+ *
+ * @package Elgg.Core
+ * @subpackage UserSettings
+ */
+
+elgg_trigger_plugin_hook('usersettings:save', 'user');
+
+forward(REFERER);
diff --git a/actions/widgets/add.php b/actions/widgets/add.php
new file mode 100644
index 000000000..d7b2f291c
--- /dev/null
+++ b/actions/widgets/add.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Elgg widget add action
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ */
+
+$owner_guid = get_input('owner_guid');
+$handler = get_input('handler');
+$context = get_input('context');
+$show_access = (bool)get_input('show_access', true);
+$column = get_input('column', 1);
+$default_widgets = get_input('default_widgets', 0);
+
+elgg_push_context($context);
+if ($default_widgets) {
+ elgg_push_context('default_widgets');
+}
+elgg_push_context('widgets');
+
+if (!empty($owner_guid)) {
+ $owner = get_entity($owner_guid);
+ if ($owner && $owner->canEdit()) {
+ $guid = elgg_create_widget($owner->getGUID(), $handler, $context);
+ if ($guid) {
+ $widget = get_entity($guid);
+
+ // position the widget
+ $widget->move($column, 0);
+
+ // send widget html for insertion
+ echo elgg_view_entity($widget, array('show_access' => $show_access));
+
+ //system_message(elgg_echo('widgets:add:success'));
+ forward(REFERER);
+ }
+ }
+}
+
+register_error(elgg_echo('widgets:add:failure'));
+forward(REFERER);
diff --git a/actions/widgets/delete.php b/actions/widgets/delete.php
new file mode 100644
index 000000000..47920013d
--- /dev/null
+++ b/actions/widgets/delete.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Elgg widget delete action
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ */
+
+$widget_guid = get_input('widget_guid');
+$owner_guid = get_input('owner_guid', elgg_get_logged_in_user_guid());
+
+$widget = get_entity($widget_guid);
+$owner = get_entity($owner_guid);
+
+if ($widget && $owner->canEdit() && $widget->delete()) {
+ forward(REFERER);
+}
+
+register_error(elgg_echo('widgets:remove:failure'));
+forward(REFERER);
diff --git a/actions/widgets/move.php b/actions/widgets/move.php
new file mode 100644
index 000000000..eab650c9c
--- /dev/null
+++ b/actions/widgets/move.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg widget move action
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ */
+
+$widget_guid = get_input('widget_guid');
+$column = get_input('column', 1);
+$position = get_input('position');
+$owner_guid = get_input('owner_guid', elgg_get_logged_in_user_guid());
+
+$widget = get_entity($widget_guid);
+$owner = get_entity($owner_guid);
+
+
+if ($widget && $owner->canEdit()) {
+ $widget->move($column, $position);
+ forward(REFERER);
+}
+
+register_error(elgg_echo('widgets:move:failure'));
+forward(REFERER); \ No newline at end of file
diff --git a/actions/widgets/reorder.php b/actions/widgets/reorder.php
new file mode 100644
index 000000000..e43a0ba73
--- /dev/null
+++ b/actions/widgets/reorder.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg widget reorder action
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ */
+
+$owner = get_input('owner');
+$context = get_input('context');
+
+$maincontent = get_input('debugField1');
+$sidebar = get_input('debugField2');
+$rightbar = get_input('debugField3');
+
+$result = reorder_widgets_from_panel($maincontent, $sidebar, $rightbar, $context, $owner);
+
+if ($result) {
+ system_message(elgg_echo('widgets:panel:save:success'));
+} else {
+ register_error(elgg_echo('widgets:panel:save:failure'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/widgets/save.php b/actions/widgets/save.php
new file mode 100644
index 000000000..e15deab77
--- /dev/null
+++ b/actions/widgets/save.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Elgg save widget settings action
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ *
+ * @uses int $_REQUEST['guid'] The guid of the widget to save
+ * @uses array $_REQUEST['params'] An array of params to set on the widget.
+ * @uses int $_REQUEST['default_widgets'] Flag for if these settings are for default wigets.
+ * @uses string $_REQUEST['context'] An optional context of the widget. Used to return
+ * the correct output if widget content changes
+ * depending on context.
+ *
+ */
+
+elgg_set_context('widgets');
+
+$guid = get_input('guid');
+$params = get_input('params');
+$default_widgets = get_input('default_widgets', 0);
+$context = get_input('context');
+
+$widget = get_entity($guid);
+if ($widget && $widget->saveSettings($params)) {
+ elgg_set_page_owner_guid($widget->getContainerGUID());
+ if ($context) {
+ elgg_push_context($context);
+ }
+
+ if (!$default_widgets) {
+ if (elgg_view_exists("widgets/$widget->handler/content")) {
+ $view = "widgets/$widget->handler/content";
+ } else {
+ elgg_deprecated_notice("widgets use content as the display view", 1.8);
+ $view = "widgets/$widget->handler/view";
+ }
+ echo elgg_view($view, array('entity' => $widget));
+ }
+} else {
+ register_error(elgg_echo('widgets:save:failure'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/actions/widgets/upgrade.php b/actions/widgets/upgrade.php
new file mode 100644
index 000000000..0a5cf8d48
--- /dev/null
+++ b/actions/widgets/upgrade.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Upgrade default widgets for Elgg 1.8
+ *
+ * Pre-1.8, default widgets were stored as metadata on a defaultwidgets object.
+ * Now they are stored as widget objects owned by the site.
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets.Management
+ */
+
+$object = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'moddefaultwidgets',
+ 'limit' => 1,
+));
+
+if (!$object) {
+ forward(REFERER);
+}
+
+$object = $object[0];
+
+$site = elgg_get_site_entity();
+
+$ia = elgg_set_ignore_access(true);
+foreach (array('profile', 'dashboard') as $context) {
+ if (isset($object->$context)) {
+ elgg_push_context($context);
+ elgg_push_context('default_widgets');
+ elgg_push_context('widgets');
+
+ // deserialize the widget information
+ list($left, $middle, $right) = split('%%', $object->$context);
+ $left_widgets = split('::', $left);
+ $middle_widgets = split('::', $middle);
+ $right_widgets = split('::', $right);
+
+ // 1st column is right column in default theme
+ $widgets = array(
+ 1 => array_reverse($right_widgets),
+ 2 => array_reverse($middle_widgets),
+ 3 => array_reverse($left_widgets),
+ );
+
+ foreach ($widgets as $column => $column_widgets) {
+ foreach ($column_widgets as $handler) {
+ $guid = elgg_create_widget($site->getGUID(), $handler, $context);
+ if ($guid) {
+ $widget = get_entity($guid);
+ $widget->move($column, 0);
+ }
+ }
+ }
+
+ elgg_pop_context();
+ elgg_pop_context();
+ elgg_pop_context();
+ }
+}
+elgg_set_ignore_access($ia);
+
+$object->delete();
+system_message(elgg_echo('upgrade:core'));
+forward(REFERER);
diff --git a/documentation/coding_standards/best_practices.txt b/documentation/coding_standards/best_practices.txt
new file mode 100644
index 000000000..df04aa845
--- /dev/null
+++ b/documentation/coding_standards/best_practices.txt
@@ -0,0 +1,60 @@
+*** CODING BEST PRACTICES ***
+
+The following best practices make code easier to read, easier to maintain,
+and easier to debug. Consistent use of these guidelines means less guess
+work for developers, which means happier, more productive developers.
+
+* Adhere to "Don't Repeat Yourself" (DRY) principles of code design and
+ organization. If you are copy-and-pasting code YOU ARE DOING SOMETHING WRONG.
+ If you find a block of code that you want to use multiple times, make a
+ function. If you find views that are identical except for a single value,
+ pull it out into a generic view that takes an option.
+
+* Whitespace is free. Don't be afraid to use it to separate blocks of code.
+ Use a single space to separate function params and string concatenation.
+
+* Use self-documenting variable names. $group_guids is better than $array.
+
+* Use "positive" variable names. Prefer `$enable = true` to `$disable = false`.
+
+* Functions returning an array should return an empty array instead of FALSE
+ on no results.
+
+* Functions not throwing an exception on error should return FALSE upon
+ failure.
+
+* Functions returning only boolean should be prefaced with is_ or has_ (eg,
+ elgg_is_logged_in(), elgg_has_access_to_entity()).
+
+* Ternary syntax is acceptable for single-line, non-embedded statements.
+
+* Use comments effectively. Good comments describe the "why." Good code
+ describes the "how." Ex:
+ Not a very useful comment:
+
+ // increment $i only when the entity is marked as active.
+ foreach($entities as $entity) {
+ if ($entity->active == TRUE) {
+ $i++;
+ }
+ }
+
+ Useful comment:
+
+ // find the next index for inserting a new active entity.
+ foreach($entities as $entity) {
+ if ($entity->active == TRUE) {
+ $i++;
+ }
+ }
+
+* Use commit messages effectively. Be concise and meaningful. Ex:
+ Not meaningful:
+ Small fix to groups.
+
+ Meaningful:
+ Fixes #1234: Added missing ) that caused a WSOD on group profile page
+ when logged out.
+
+* Commit effectively: Err on the side of atomic commits. One revision with
+ many changes is scary.
diff --git a/documentation/coding_standards/css_coding_standards.txt b/documentation/coding_standards/css_coding_standards.txt
new file mode 100644
index 000000000..195ca345b
--- /dev/null
+++ b/documentation/coding_standards/css_coding_standards.txt
@@ -0,0 +1,67 @@
+*** CSS CODING STANDARDS ***
+
+* Use shorthand where possible:
+ Bad:
+ background-color: #333333;
+ background-image: url(...);
+ background-repeat: repeat-x;
+ background-position: left 10px;
+ padding: 2px 9px 2px 9px;
+
+ Good:
+ background: #333 url(...) repeat-x left 10px;
+ padding: 2px 9px;
+
+* Use hyphens as separators in classes/ids, not underscores:
+ Bad:
+ .example_class
+
+ Good:
+ .example-class
+
+* One property per line
+ Bad:
+ color: white;font-size: smaller;
+
+ Good:
+ color: white;
+ font-size: smaller;
+
+* Property declarations should be spaced like so: `property: value;`
+ Bad:
+ color:value;
+ color :value;
+ color : value;
+
+ Good:
+ color: value;
+
+* Group vendor-prefixes for the same property together:
+* Longest vendor-prefixed version first:
+* Always include non-vendor-prefixed version:
+* Put an extra newline between vendor-prefixed groups and other properties:
+ Bad:
+ -moz-border-radius: 5px;
+ border: 1px solid #999999;
+ -webkit-border-radius: 5px;
+ width: auto;
+
+ Good:
+ border: 1px solid #999999;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+ width: auto;
+
+* Group declarations of subproperties:
+ Bad:
+ background-color: white;
+ color: #0054A7;
+ background-position: 2px -257px;
+
+ Good:
+ background-color: white;
+ background-position: 2px -257px;
+ color: #0054A7;
diff --git a/documentation/coding_standards/deprecation.txt b/documentation/coding_standards/deprecation.txt
new file mode 100644
index 000000000..370090138
--- /dev/null
+++ b/documentation/coding_standards/deprecation.txt
@@ -0,0 +1,36 @@
+*** DEPRECATING APIs ***
+
+Occasionally, functions and classes must be deprecated in favor of newer
+replacements. Since 3rd party plugin authors rely on a consistent API,
+backward compatibility must be maintained, but will not be maintained
+indefinitely as plugin authors are expected to properly update their
+plugins. In order to maintain backward compatibility, deprecated APIs will
+follow these guidelines:
+
+* Incompatible API changes cannot occur between bugfix versions
+ (1.6.0 - 1.6.1).
+
+* API changes between minor versions (1.6 - 1.7) must maintain backward
+ compatibility for at least 2 minor versions. (1.7 and 1.8. See
+ procedures, below.)
+
+* Bugfixes that change the API cannot be included in bugfix versions.
+
+* API changes between major versions (1.0 - 2.0) can occur without regard to
+ backward compatibility.
+
+The procedure for deprecating an API is as follows:
+
+* The first minor version (1.7) with a deprecated API must include a wrapper
+ function/class (or otherwise appropriate means) to maintain backward
+ compatibility, including any bugs in the original function/class.
+ This compatibility layer uses elgg_deprecated_notice('...', 1.7) to log
+ that the function is deprecated.
+
+* The second minor version (1.8) maintains the backward compatibility
+ layer, but elgg_deprecated_notice() will produce a visible warning.
+
+* The third minor version (1.9) removes the compatibility layer. Any use of
+ the deprecated API should be corrected before this.
+
+The general timeline for two minor releases is 8 to 12 months.
diff --git a/documentation/coding_standards/html_best_practices.txt b/documentation/coding_standards/html_best_practices.txt
new file mode 100644
index 000000000..ac2338a77
--- /dev/null
+++ b/documentation/coding_standards/html_best_practices.txt
@@ -0,0 +1 @@
+*** HTML BEST PRACTICES ***
diff --git a/documentation/coding_standards/javascript_best_practices.txt b/documentation/coding_standards/javascript_best_practices.txt
new file mode 100644
index 000000000..9ec1d0a19
--- /dev/null
+++ b/documentation/coding_standards/javascript_best_practices.txt
@@ -0,0 +1 @@
+*** JAVASCRIPT BEST PRACTICES ***
diff --git a/documentation/coding_standards/javascript_coding_standards.txt b/documentation/coding_standards/javascript_coding_standards.txt
new file mode 100644
index 000000000..9939e80ab
--- /dev/null
+++ b/documentation/coding_standards/javascript_coding_standards.txt
@@ -0,0 +1,13 @@
+*** JAVASCRIPT CODING STANDARDS ***
+
+* Same formatting standards as PHP.
+
+* All functions should be in the elgg namespace.
+
+* Function expressions should end with a semi-colon:
+
+ elgg.ui.toggles = function(event) {
+ event.preventDefault();
+ $(target).slideToggle('medium');
+ };
+
diff --git a/documentation/coding_standards/php_best_practices.txt b/documentation/coding_standards/php_best_practices.txt
new file mode 100644
index 000000000..9e4c63483
--- /dev/null
+++ b/documentation/coding_standards/php_best_practices.txt
@@ -0,0 +1 @@
+*** PHP BEST PRACTICES ***
diff --git a/documentation/coding_standards/php_coding_standards.txt b/documentation/coding_standards/php_coding_standards.txt
new file mode 100644
index 000000000..b7adc5dd9
--- /dev/null
+++ b/documentation/coding_standards/php_coding_standards.txt
@@ -0,0 +1,55 @@
+*** PHP CODING STANDARDS ***
+
+These are the coding standards for Elgg. All core development and bundled
+plugins are required to be in this format. Plugin developers are strongly
+encouraged to adopt these standards.
+
+* Unix line endings.
+
+* Hard tabs, 4 character tab spacing.
+
+* No PHP shortcut tags ( <? or <?= or <% ).
+
+* PHPDoc comments on functions and classes (all methods; declared properties
+ when appropriate).
+
+* Mandatory wrapped {}s around any code blocks.
+ Bad:
+ if (true)
+ foreach($arr as $elem)
+ echo $elem;
+
+ Good:
+ if (true) {
+ foreach ($arr as $elem) {
+ echo $elem;
+ }
+ }
+
+* Name standalone functions using underscore_character().
+
+* Name classes using CamelCase() and methods using lowerCamelCase().
+
+* Name globals and constants in ALL_CAPS (ACCESS_FRIENDS, $CONFIG).
+
+* Use underscores / camel case to separate standard English words in
+ functions, classes, and methods. (get_default_site(), ElggUser->isLoggedIn()).
+
+* Space functions like_this($required, $optional = TRUE).
+
+* Space keywords and constructs like this: if (FALSE) { ... }.
+
+* Correctly use spaces, quotes, and {}s in strings:
+ Bad (hard to read, misuse of quotes and {}s):
+ echo 'Hello, '.$name."! How is your {$time_of_day}?";
+
+ Good:
+ echo "Hello, $name! How is your $time_of_day?";
+
+* Line lengths should be reasonable. If you are writing lines over 100
+ characters on a line, please revise the code.
+
+* Use // or /* */ when commenting.
+
+* No closing PHP tag (?>) at EOF unless after a heredoc. (Avoids problems with
+ trailing whitespace. Required after heredoc by PHP.)
diff --git a/documentation/examples/actions/basic.php b/documentation/examples/actions/basic.php
new file mode 100644
index 000000000..926e11b79
--- /dev/null
+++ b/documentation/examples/actions/basic.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Demonstrates adding an annotation through an action
+ *
+ * This action adds a rating annotation to an entity. If this was coming from
+ * a five-star rating tool, the rating would be a number between 0 and 5. The
+ * GUID of the entity being rating is also submitted to the action.
+ */
+
+$rating = get_input('rating');
+$guid = get_input('guid');
+
+$entity = get_entity($guid);
+if (!$entity) {
+ register_error(elgg_echo('rating:failure'));
+ forward(REFERER);
+}
+
+$entity->annotate('rating', $rating);
+
+system_message(elgg_echo('rating:success'));
+forward(REFERER);
diff --git a/documentation/examples/crontab.example b/documentation/examples/crontab.example
new file mode 100644
index 000000000..f25f5cb07
--- /dev/null
+++ b/documentation/examples/crontab.example
@@ -0,0 +1,28 @@
+# Crontab example.
+#
+# This file is an example of triggering Elgg cron events. It hits a URL to
+# trigger the events. For testing, you can simulate the cronjob by loading the
+# URL in a browser.
+#
+# See http://docs.elgg.org/wiki/Cron for more information
+#
+# @author Marcus Povey
+
+# Location of GET (see: http://docs.elgg.org/wiki/What_is_get)
+GET='/usr/bin/GET'
+
+# Location of your site (don't forget the trailing slash!)
+ELGG='http://www.example.com/'
+
+# The crontab
+# Don't edit below this line unless you know what you are doing
+@reboot $GET ${ELGG}cron/reboot/
+* * * * * $GET ${ELGG}cron/minute/
+*/5 * * * * $GET ${ELGG}cron/fiveminute/
+15,30,45,59 * * * * $GET ${ELGG}cron/fifteenmin/
+30,59 * * * * $GET ${ELGG}cron/halfhour/
+@hourly $GET ${ELGG}cron/hourly/
+@daily $GET ${ELGG}cron/daily/
+@weekly $GET ${ELGG}cron/weekly/
+@monthly $GET ${ELGG}cron/monthly/
+@yearly $GET ${ELGG}cron/yearly/
diff --git a/documentation/examples/events/advanced.php b/documentation/examples/events/advanced.php
new file mode 100644
index 000000000..73edea9da
--- /dev/null
+++ b/documentation/examples/events/advanced.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * This snippets demonstrates how returning false changes the normal operation
+ * of Elgg.
+ */
+
+elgg_register_event_handler('create', 'object', 'example_event_handler');
+
+function example_event_handler($event, $type, $object) {
+ // Don't allow any non-admin users to create objects
+ // Returning false from this function will halt the creation of the object.
+ return elgg_is_admin_logged_in();
+}
diff --git a/documentation/examples/events/all.php b/documentation/examples/events/all.php
new file mode 100644
index 000000000..0ad02c1d4
--- /dev/null
+++ b/documentation/examples/events/all.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * If you register an 'all' string for the event name, the handler function will
+ * be called for all events with that name, regardless of event type. The same
+ * can be done for the event type argument. Registering 'all' for both
+ * argyuments results in a handler being called for every event.
+ */
+
+elgg_register_event_handler('all', 'object', 'example_event_handler');
+
+// This function will be called for any event of type 'object'
+function example_event_handler($event, $type, $object) {
+ // check what sort of object is passed
+ if ($object instanceof ElggObject) {
+ $subtype = $object->getSubtype();
+
+ switch ($subtype) {
+ case 'blog':
+ case 'thewire':
+ case 'pages':
+ // prevent these object subtypes from being saved or changed
+ return false;
+ default:
+ return true;
+ }
+
+ }
+
+ return true;
+}
diff --git a/documentation/examples/events/basic.php b/documentation/examples/events/basic.php
new file mode 100644
index 000000000..ca2762344
--- /dev/null
+++ b/documentation/examples/events/basic.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * This snippet demonstrates how to register for an event. It dumps the
+ * parameters that the handler receives to the screen. The third argument
+ * of the handler function is an object that is related to the event. For
+ * the 'init', 'system' eveny, it is null.
+ */
+
+elgg_register_event_handler('init', 'system', 'example_event_handler');
+
+function example_event_handler($event, $type, $object) {
+ var_dump($event);
+ var_dump($type);
+ var_dump($object);
+
+ return true;
+}
diff --git a/documentation/examples/events/trigger.php b/documentation/examples/events/trigger.php
new file mode 100644
index 000000000..6ce3a76f0
--- /dev/null
+++ b/documentation/examples/events/trigger.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * These two snippets demonstrates triggering an event and how to register for
+ * that event.
+ */
+
+$object = new ElggObject();
+elgg_trigger_event('test', 'example', $object);
+
+// elsewhere a handler could be registered by saying
+elgg_register_event_handler('test', 'example', 'example_event_handler');
diff --git a/documentation/examples/hooks/advanced.php b/documentation/examples/hooks/advanced.php
new file mode 100644
index 000000000..ca036c46a
--- /dev/null
+++ b/documentation/examples/hooks/advanced.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * This snippet demonstrates how to change the value of a hook. The content
+ * passed into the hook is 'This is some Sample Content.'. After the two hook
+ * handlers are done, the new content is 'This is some $@mple Content.'.
+ */
+
+// the output:page hook is triggered by elgg_view_page().
+elgg_register_plugin_hook_handler('output', 'page', 'example_plugin_hook_handler', 600);
+elgg_register_plugin_hook_handler('output', 'page', 'example_plugin_hook_handler_2', 601);
+
+function example_plugin_hook_handler($hook, $type, $value, $params) {
+ // change a to @
+ $value = str_replace('a', '@', $value);
+
+ return $value;
+}
+
+function example_plugin_hook_handler_2($hook, $type, $value, $params) {
+ // change S to $
+ $value = str_replace('S', '$', $value);
+
+ return $value;
+}
+
+$content = 'This is some Sample Content.';
+
+echo elgg_view_page('Title', $content);
diff --git a/documentation/examples/hooks/all.php b/documentation/examples/hooks/all.php
new file mode 100644
index 000000000..76b562335
--- /dev/null
+++ b/documentation/examples/hooks/all.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * This snippet demonstrates how to register for multiple hooks with the same
+ * type.
+ */
+
+elgg_register_plugin_hook_handler('all', 'system', 'example_plugin_hook_handler');
+
+// This function will be called for any hook of type 'system'
+function example_plugin_hook_handler($hook, $type, $value, $params) {
+ // logic here.
+}
diff --git a/documentation/examples/hooks/basic.php b/documentation/examples/hooks/basic.php
new file mode 100644
index 000000000..734d9e884
--- /dev/null
+++ b/documentation/examples/hooks/basic.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * The handler for a plugin hook receives information about the hook (name and
+ * type), the current value for the hook, and parameters related to the hook.
+ */
+
+elgg_register_plugin_hook_handler('forward', '404', 'example_plugin_hook_handler');
+
+function example_plugin_hook_handler($hook, $type, $value, $params) {
+ var_dump($hook);
+ var_dump($type);
+ var_dump($value);
+ var_dump($params);
+
+ // we are not changing $value so return null
+ return null;
+}
diff --git a/documentation/examples/hooks/trigger.php b/documentation/examples/hooks/trigger.php
new file mode 100644
index 000000000..4216fd6c0
--- /dev/null
+++ b/documentation/examples/hooks/trigger.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * The current value for the hook is passed into the trigger function. Handlers
+ * can change this value. In this snippet, we check if the value of true was
+ * changed by the handler functions.
+ */
+
+$result = elgg_trigger_plugin_hook('get_status', 'example', null, true);
+
+if ($result) {
+ var_dump('Plugin hook says ok!');
+} else {
+ var_dump('Plugin hook says no.');
+}
diff --git a/documentation/examples/plugins/README.txt b/documentation/examples/plugins/README.txt
new file mode 100644
index 000000000..704f56598
--- /dev/null
+++ b/documentation/examples/plugins/README.txt
@@ -0,0 +1,5 @@
+Plugin Skeleton
+=========================
+This directory includes a plugin skeleton to be used as the starting point when
+creating a new plugin. Just create a new directory in /mod/ and copy the files
+and directories into it. Then update the manifest and start coding. \ No newline at end of file
diff --git a/vendors/dokuwiki/data/attic/_dummy b/documentation/examples/plugins/actions/.gitignore
index e69de29bb..e69de29bb 100644
--- a/vendors/dokuwiki/data/attic/_dummy
+++ b/documentation/examples/plugins/actions/.gitignore
diff --git a/documentation/examples/plugins/languages/en.php b/documentation/examples/plugins/languages/en.php
new file mode 100644
index 000000000..35f838560
--- /dev/null
+++ b/documentation/examples/plugins/languages/en.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * The core language file is in /languages/en.php and each plugin has its
+ * language files in a languages directory. To change a string, copy the
+ * mapping into this file.
+ *
+ * For example, to change the blog Tools menu item
+ * from "Blog" to "Rantings", copy this pair:
+ * 'blog' => "Blog",
+ * into the $mapping array so that it looks like:
+ * 'blog' => "Rantings",
+ *
+ * Follow this pattern for any other string you want to change. Make sure this
+ * plugin is lower in the plugin list than any plugin that it is modifying.
+ *
+ * If you want to add languages other than English, name the file according to
+ * the language's ISO 639-1 code: http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
+ */
+
+$mapping = array(
+ 'string:here' => 'Display string here',
+);
+
+add_translation('en', $mapping);
diff --git a/documentation/examples/plugins/manifest.xml b/documentation/examples/plugins/manifest.xml
new file mode 100644
index 000000000..e31624432
--- /dev/null
+++ b/documentation/examples/plugins/manifest.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>My Plugin</name>
+ <author>My Name</author>
+ <version>1.0</version>
+ <description>This is a description of my plugin and its features.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>(C) My Name or Company 2012</copyright>
+ <license>GNU General Public License version 2</license>
+
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+
+ <category>communication</category>
+
+</plugin_manifest>
diff --git a/documentation/examples/plugins/start.php b/documentation/examples/plugins/start.php
new file mode 100644
index 000000000..3af50ce38
--- /dev/null
+++ b/documentation/examples/plugins/start.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Describe plugin here
+ */
+
+elgg_register_event_handler('init', 'system', 'my_plugin_init');
+
+function my_plugin_init() {
+ // Rename this function based on the name of your plugin and update the
+ // elgg_register_event_handler() call accordingly
+
+ // Register a script to handle (usually) a POST request (an action)
+ $base_dir = elgg_get_plugins_path() . 'my_plugin/actions/my_plugin';
+ elgg_register_action('my_plugin', "$base_dir/my_action.php");
+
+ // Extend the main CSS file
+ elgg_extend_view('css/elgg', 'my_plugin/css');
+
+ // Add a menu item to the main site menu
+ $item = new ElggMenuItem('my_plugin', elgg_echo('my_plugin:menu'), 'my_url');
+ elgg_register_menu_item('site', $item);
+}
diff --git a/vendors/dokuwiki/data/cache/_dummy b/documentation/examples/plugins/views/default/.gitignore
index e69de29bb..e69de29bb 100644
--- a/vendors/dokuwiki/data/cache/_dummy
+++ b/documentation/examples/plugins/views/default/.gitignore
diff --git a/documentation/info/config.php b/documentation/info/config.php
new file mode 100644
index 000000000..b45428477
--- /dev/null
+++ b/documentation/info/config.php
@@ -0,0 +1,430 @@
+<?php
+/**
+ * Stub info for $CONFIG global options.
+ *
+ * @tip Plugins should never use the $CONFIG array directly.
+ *
+ * @package Elgg.Core
+ * @subpackage Configuration
+ */
+
+/**
+ * Event information for the events subsystem.
+ *
+ * Events are added with {@link elgg_register_event_handler()} and
+ * can be removed in >= 1.8 with {@link elgg_unregister_event_handler()}.
+ *
+ * Events are stored as a multidimensional array in the format:
+ * <code>
+ * $CONFIG->events[str $event_name][str $event_type][int priority] = str callback_function
+ * </code>
+ *
+ * @global array $CONFIG->events
+ * @name $CONFIG->events
+ * @see events()
+ * @see elgg_register_event_handler()
+ * @see elgg_unregister_event_handler()
+ * @see elgg_trigger_event()
+ */
+$CONFIG->events;
+
+/**
+ * Plugin Hook information for the plugin hooks subsystem.
+ *
+ * Hooks are added with {@link elgg_register_plugin_hook_handler()} and
+ * can be removed in >= 1.8 with {@link elgg_unregister_plugin_hook_handler()}.
+ *
+ * Hooks are stored as a multidimensional array in the format:
+ * <code>
+ * $CONFIG->hooks[str $hook_name][str $hook_type][int priority] = str callback_function
+ * </code>
+ *
+ * @global array $CONFIG->hooks
+ * @see elgg_register_plugin_hook_handler()
+ * @see elgg_unregister_plugin_hook_handler()
+ * @see elgg_trigger_plugin_hook()
+ */
+$CONFIG->hooks;
+
+/**
+ * Paths to scan for autoloading languages.
+ *
+ * Languages are automatically loaded for the site or
+ * user's default language. Plugins can extend or override strings.
+ * language_paths is an array of paths to scan for PHP files matching
+ * the default language. The order of paths is determined by the plugin load order,
+ * with later entries overriding earlier. Language files within these paths are
+ * named as the two-letter ISO 639-1 country codes for the language they represent.
+ *
+ * Language paths are stored as array keys in the format:
+ * <code>
+ * $CONFIG->language_paths[str $language_path] = true
+ * </code>
+ *
+ * @link http://en.wikipedia.org/wiki/ISO_639-1
+ * @see register_language()
+ * @global array $CONFIG->language_paths
+ */
+$CONFIG->language_paths;
+
+
+/**
+ * String translations for the current language.
+ *
+ * Elgg uses a key-based system for string internationalization, which
+ * is accessed with {@link elgg_echo()}.
+ *
+ * Translations are stored as an array in the following format:
+ * <code>
+ * $CONFIG->translations[str $language_code][str $string_key] = str 'Translated Language String';
+ * </code>
+ *
+ * @see register_translation()
+ * @see elgg_echo()
+ * @global array $CONFIG->translations
+ */
+$CONFIG->translations;
+
+/**
+ * Stores input used by {@link set_input()} and {@link get_input()}.
+ *
+ * @global array $CONFIG->input
+ */
+$CONFIG->input;
+
+/**
+ * An array of metadata names to be used as tags.
+ *
+ * Because tags are simply names of meatdata, This is used
+ * in search to prevent data exposure by searching on
+ * arbitrary metadata.
+ *
+ * @global array $CONFIG->registered_tag_metadata_names
+ */
+$CONFIG->registered_tag_metadata_names;
+
+/**
+ * An associative array of page handlers and their function names.
+ *
+ * Page handlers must be registered by {@link elgg_register_page_handler()} and
+ * will be dispatched by {@link engine/handlers/pagehandler.php} to the
+ * proper function.
+ *
+ * @global array $CONFIG->pagehandler
+ */
+$CONFIG->pagehandler;
+
+/**
+ * An object holding valid widgets and their configurations.
+ *
+ * This object stores the valid context for widgets, and the handlers
+ * registered, as well as a description of the widget.
+ *
+ * Widgets are added with {@link add_widget_type()}.
+ *
+ * @global stdClass $CONFIG->widgets
+ */
+$CONFIG->widgets;
+
+/**
+ * The full path where Elgg is installed.
+ *
+ * @global string $CONFIG->path;
+ */
+$CONFIG->path;
+
+/**
+ * The full path for core views.
+ *
+ * @global string $CONFIG->viewpath
+ */
+$CONFIG->viewpath;
+
+/**
+ * The full path where plugins are stored.
+ *
+ * @global string $CONFIG->pluginspath
+ */
+$CONFIG->pluginspath;
+
+/**
+ * The full URL where Elgg is installed
+ *
+ * @global string $CONFIG->wwwroot
+ */
+$CONFIG->wwwroot;
+
+/**
+ * The full URL where Elgg is installed
+ *
+ * @global string $CONFIG->wwwroot
+ */
+$CONFIG->url;
+
+/**
+ * The name of the site as defined in the config table.
+ *
+ * @global string $CONFIG->sitename
+ */
+$CONFIG->sitename;
+
+/**
+ * The current language for either the site or the user.
+ *
+ * @global $CONFIG->language
+ */
+$CONFIG->language;
+
+/**
+ * Is the site fully installed
+ *
+ * @global bool $CONFIG->installed
+ */
+$CONFIG->installed;
+
+/**
+ * The guid of the current site object.
+ *
+ * @global int $CONFIG->site_id
+ */
+$CONFIG->site_id;
+
+/**
+ * The guid of the current site object.
+ *
+ * @global int $CONFIG->site_id
+ */
+$CONFIG->site_guid;
+
+/**
+ * The current site object.
+ *
+ * @global ElggSite $CONFIG->site
+ */
+$CONFIG->site;
+
+/**
+ * The full path to the data directory.
+ *
+ * @global string $CONFIG->dataroot
+ */
+$CONFIG->dataroot;
+
+/**
+ * Is simplecache enabled?
+ *
+ * @global string $CONFIG->simplecache_enabled
+ */
+$CONFIG->simplecache_enabled;
+
+/**
+ * Is the system cache enabled
+ *
+ * @global string $CONFIG->system_cache_enabled
+ */
+$CONFIG->system_cache_enabled;
+
+/**
+ * The site description from the current site object.
+ *
+ * @global string $CONFIG->sitedescription
+ */
+$CONFIG->sitedescription;
+
+/**
+ * The site email from the current site object.
+ *
+ * @global string $CONFIG->siteemail
+ */
+$CONFIG->siteemail;
+
+/**
+ * The current view type
+ *
+ * View types determin the location of view files that are used to draw pages.
+ * They are set system-wide by the $_REQUEST['view']. If a view type is manually
+ * set in settings.php or through a function hooking to the {@elgg_hook
+ *
+ * @warning This is the current view type used to determine where to load views.
+ * Don't confuse this with the current view.
+ *
+ * @global string $CONFIG->view
+ */
+$CONFIG->view;
+
+/**
+ * Default access as defined in the config table for the current site.
+ *
+ * @global string $CONFIG->default_access
+ */
+$CONFIG->default_access;
+
+/**
+ * Is registration enabled?
+ *
+ * @global bool $CONFIG->allow_registration
+ */
+$CONFIG->allow_registration;
+
+/**
+ * Is current site in walled garden mode?
+ *
+ * @global bool $CONFIG->walled_garden
+ */
+$CONFIG->walled_garden;
+
+/**
+ * Are users allow to enter their own default access levels
+ *
+ * @global bool $CONFIG->allow_user_default_access
+ */
+$CONFIG->allow_user_default_access;
+
+/**
+ * A list of feature URLs for the main site menu.
+ *
+ * These links are added via the admin interface.
+ *
+ * @global string $CONFIG->menu_items_featured_urls
+ */
+$CONFIG->menu_items_featured_urls;
+
+/**
+ * The custom menu items entered in the administration.
+ *
+ * @global string $CONFIG->menu_items_custom_items
+ */
+$CONFIG->menu_items_custom_items;
+
+/**
+ * A list of registered actions, their file locations, and access permissions.
+ *
+ * @global array $CONFIG->actions
+ */
+$CONFIG->actions;
+
+/**
+ * Holds information about views.
+ *
+ * @global object $CONFIG->views
+ */
+$CONFIG->views;
+
+/**
+ * A list of views to cache in the simple cache.
+ *
+ * @global object $CONFIG->views->simplecache
+ */
+$CONFIG->views->simplecache;
+
+/**
+ * A list of views and the top level views directory to search for the view in.
+ *
+ * @note Views are stored as the key and the top level view location is stored as the value.
+ * The current viewtype {@link $CONFIG->view} is used to determin which directory under the entry
+ * in $CONFIG->views->location to search. View names are automatically appened a '.php' extension.
+ *
+ * @global object $CONFIG->views->locations
+ */
+$CONFIG->views->locations;
+
+
+/**
+ * A list of valid view types as discovered.
+ *
+ * @global array $CONFIG->view_types
+ */
+$CONFIG->view_types;
+
+/**
+ * A list of plugins and their load order
+ *
+ * @global string $CONFIG->pluginlistcache
+ */
+$CONFIG->pluginlistcache;
+
+/**
+ * Holds URL handler information for ElggExtender objects.
+ *
+ * @global array $CONFIG->extender_url_handler
+ */
+$CONFIG->extender_url_handler;
+
+/**
+ * A list of registered entities and subtypes. Used in search.
+ *
+ * @global array $CONFIG->registered_entities
+ */
+$CONFIG->registered_entities;
+
+/**
+ * A list of URL handlers for {@link ElggEntity::getURL()}
+ *
+ * @global array $CONFIG->entity_url_handler
+ */
+$CONFIG->entity_url_handler;
+
+/**
+ * A list of entity types and subtypes that have metadata whose access permission
+ * can be changed independently of the main object. {@link register_metadata_as_indepenent()}
+ *
+ * @global string $CONFIG->independents
+ */
+$CONFIG->independents;
+
+/**
+ * Holds items for all submenus.
+ *
+ * @global string $CONFIG->submenu_items
+ */
+$CONFIG->submenu_items;
+
+/**
+ * Holds the service handlers as registered by {@register_service_handler()}
+ *
+ * @global array $CONFIG->servicehandler
+ */
+$CONFIG->servicehandler;
+
+/**
+ * A list of stop works for search. Not currently used.
+ *
+ * @global array $CONFIG->wordblacklist
+ * @todo currently unused.
+ */
+$CONFIG->wordblacklist;
+
+/**
+ * A list of menu contexts for menus registered with {@link add_menu()}. Not currently used.
+ *
+ * @global array $CONFIG->menucontexts
+ */
+$CONFIG->menucontexts;
+
+/**
+ * A list of registers and their children added via {@add_to_register()}. Used only for menus.
+ *
+ * @global string $CONFIG->registers
+ */
+$CONFIG->registers;
+
+/**
+ * A list of objects that can emit notifications. {@link register_notification_object()}
+ *
+ * @global array $CONFIG->register_objects
+ */
+$CONFIG->register_objects;
+
+/**
+ * Holds available group tools options. Added with {@link add_group_tool_option()}
+ *
+ * @global array $CONFIG->group_tool_options
+ */
+$CONFIG->group_tool_options;
+
+/**
+ * The last cache time for the current viewtype. Used in the generation of CSS and JS links.
+ *
+ * @global string $CONFIG->lastcache
+ */
+$CONFIG->lastcache; \ No newline at end of file
diff --git a/documentation/info/manifest.xml b/documentation/info/manifest.xml
new file mode 100644
index 000000000..494158481
--- /dev/null
+++ b/documentation/info/manifest.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>My Plugin</name>
+ <author>Elgg</author>
+ <version>1.0</version>
+ <blurb>A concise description.</blurb>
+ <description>This is a longer, more interesting description of my plugin, its features, and other important information.</description>
+ <website>http://www.elgg.org/</website>
+ <repository>https://github.com/Elgg/Elgg</repository>
+ <bugtracker>http://trac.elgg.org</bugtracker>
+ <donations>http://elgg.org/supporter.php</donations>
+ <copyright>(C) Elgg 2011</copyright>
+ <license>GNU General Public License version 2</license>
+
+ <requires>
+ <type>elgg_version</type>
+ <version>2009030802</version>
+ </requires>
+
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+
+ <screenshot>
+ <description>An example screenshot</description>
+ <path>graphics/plugin_ss1.png</path>
+ </screenshot>
+
+ <screenshot>
+ <description>Another screenshot</description>
+ <path>graphics/plugin_ss2.png</path>
+ </screenshot>
+
+ <category>admin</category>
+ <category>api</category>
+
+ <requires>
+ <type>php_extension</type>
+ <name>gd</name>
+ </requires>
+
+ <requires>
+ <type>php_ini</type>
+ <name>short_open_tag</name>
+ <value>off</value>
+ </requires>
+
+ <requires>
+ <type>php_extension</type>
+ <name>made_up</name>
+ <version>1.0</version>
+ </requires>
+
+ <requires>
+ <type>plugin</type>
+ <name>fake_plugin</name>
+ <version>1.0</version>
+ </requires>
+
+ <requires>
+ <type>plugin</type>
+ <name>profile</name>
+ <version>1.0</version>
+ </requires>
+
+ <requires>
+ <type>plugin</type>
+ <name>profile_api</name>
+ <version>1.3</version>
+ <comparison>lt</comparison>
+ </requires>
+
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>blog</plugin>
+ </requires>
+
+ <conflicts>
+ <type>plugin</type>
+ <name>profile_api</name>
+ <version>1.0</version>
+ </conflicts>
+
+ <provides>
+ <type>plugin</type>
+ <name>profile_api</name>
+ <version>1.3</version>
+ </provides>
+
+ <provides>
+ <type>php_extension</type>
+ <name>curl</name>
+ <version>1.0</version>
+ </provides>
+
+</plugin_manifest>
diff --git a/engine/classes/APIException.php b/engine/classes/APIException.php
new file mode 100644
index 000000000..b6e1c347b
--- /dev/null
+++ b/engine/classes/APIException.php
@@ -0,0 +1,11 @@
+<?php
+
+/**
+ * API Exception Stub
+ *
+ * Generic parent class for API exceptions.
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class APIException extends Exception {}
diff --git a/engine/classes/CallException.php b/engine/classes/CallException.php
new file mode 100644
index 000000000..22b8f14f5
--- /dev/null
+++ b/engine/classes/CallException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Call Exception Stub
+ *
+ * Generic parent class for Call exceptions
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class CallException extends Exception {}
diff --git a/engine/classes/ClassException.php b/engine/classes/ClassException.php
new file mode 100644
index 000000000..7544f0ec9
--- /dev/null
+++ b/engine/classes/ClassException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Class Exception
+ *
+ * A generic parent class for Class exceptions
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class ClassException extends Exception {}
diff --git a/engine/classes/ClassNotFoundException.php b/engine/classes/ClassNotFoundException.php
new file mode 100644
index 000000000..6a9bcd327
--- /dev/null
+++ b/engine/classes/ClassNotFoundException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Class not found
+ *
+ * Thrown when trying to load a class that doesn't exist.
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions
+ */
+class ClassNotFoundException extends ClassException {}
diff --git a/engine/classes/ConfigurationException.php b/engine/classes/ConfigurationException.php
new file mode 100644
index 000000000..3ace5dd4b
--- /dev/null
+++ b/engine/classes/ConfigurationException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Configuration exception
+ *
+ * A generic parent class for Configuration exceptions
+ *
+ * @package Elgg
+ * @subpackage Exceptions.Stub
+ */
+class ConfigurationException extends Exception {}
diff --git a/engine/classes/CronException.php b/engine/classes/CronException.php
new file mode 100644
index 000000000..86370ef31
--- /dev/null
+++ b/engine/classes/CronException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Cron exception
+ *
+ * A generic parent class for cron exceptions
+ *
+ * @package Elgg
+ * @subpackage Exceptions.Stub
+ */
+class CronException extends Exception {}
diff --git a/engine/classes/DataFormatException.php b/engine/classes/DataFormatException.php
new file mode 100644
index 000000000..0f28a0902
--- /dev/null
+++ b/engine/classes/DataFormatException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Data format exception
+ * An exception thrown when there is a problem in the format of some data.
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class DataFormatException extends Exception {}
diff --git a/engine/classes/DatabaseException.php b/engine/classes/DatabaseException.php
new file mode 100644
index 000000000..6c8f57d7d
--- /dev/null
+++ b/engine/classes/DatabaseException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Database Exception
+ *
+ * A generic parent class for database exceptions
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class DatabaseException extends Exception {}
diff --git a/engine/classes/ElggAccess.php b/engine/classes/ElggAccess.php
new file mode 100644
index 000000000..6f8d9bb4b
--- /dev/null
+++ b/engine/classes/ElggAccess.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Class used to determine if access is being ignored.
+ *
+ * @package Elgg.Core
+ * @subpackage Access
+ * @access private
+ * @see elgg_get_ignore_access()
+ *
+ * @todo I don't remember why this was required beyond scope concerns.
+ */
+class ElggAccess {
+ /**
+ * Bypass Elgg's access control if true.
+ * @var bool
+ */
+ private $ignore_access;
+
+ /**
+ * Get current ignore access setting.
+ *
+ * @return bool
+ * @deprecated 1.8 Use ElggAccess::getIgnoreAccess()
+ */
+ public function get_ignore_access() {
+ elgg_deprecated_notice('ElggAccess::get_ignore_access() is deprecated by ElggAccess::getIgnoreAccess()', 1.8);
+ return $this->getIgnoreAccess();
+ }
+
+ /**
+ * Get current ignore access setting.
+ *
+ * @return bool
+ */
+ public function getIgnoreAccess() {
+ return $this->ignore_access;
+ }
+
+ /**
+ * Set ignore access.
+ *
+ * @param bool $ignore Ignore access
+ *
+ * @return bool Previous setting
+ *
+ * @deprecated 1.8 Use ElggAccess:setIgnoreAccess()
+ */
+ public function set_ignore_access($ignore = true) {
+ elgg_deprecated_notice('ElggAccess::set_ignore_access() is deprecated by ElggAccess::setIgnoreAccess()', 1.8);
+ return $this->setIgnoreAccess($ignore);
+ }
+
+ /**
+ * Set ignore access.
+ *
+ * @param bool $ignore Ignore access
+ *
+ * @return bool Previous setting
+ */
+ public function setIgnoreAccess($ignore = true) {
+ $prev = $this->ignore_access;
+ $this->ignore_access = $ignore;
+
+ return $prev;
+ }
+}
diff --git a/engine/classes/ElggAnnotation.php b/engine/classes/ElggAnnotation.php
new file mode 100644
index 000000000..511b5151f
--- /dev/null
+++ b/engine/classes/ElggAnnotation.php
@@ -0,0 +1,128 @@
+<?php
+/**
+ * Elgg Annotations
+ *
+ * Annotations allow you to attach bits of information to entities.
+ * They are essentially the same as metadata, but with additional
+ * helper functions.
+ *
+ * @internal Annotations are stored in the annotations table.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Annotations
+ * @link http://docs.elgg.org/DataModel/Annotations
+ */
+class ElggAnnotation extends ElggExtender {
+
+ /**
+ * (non-PHPdoc)
+ *
+ * @see ElggData::initializeAttributes()
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = 'annotation';
+ }
+
+ /**
+ * Construct a new annotation object
+ *
+ * @param mixed $id The annotation ID or a database row as stdClass object
+ */
+ function __construct($id = null) {
+ $this->initializeAttributes();
+
+ if (!empty($id)) {
+ // Create from db row
+ if ($id instanceof stdClass) {
+ $annotation = $id;
+
+ $objarray = (array) $annotation;
+ foreach ($objarray as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ } else {
+ // get an ElggAnnotation object and copy its attributes
+ $annotation = elgg_get_annotation_from_id($id);
+ $this->attributes = $annotation->attributes;
+ }
+ }
+ }
+
+ /**
+ * Save this instance
+ *
+ * @return int an object id
+ */
+ function save() {
+ if ($this->id > 0) {
+ return update_annotation($this->id, $this->name, $this->value, $this->value_type,
+ $this->owner_guid, $this->access_id);
+ } else {
+ $this->id = create_annotation($this->entity_guid, $this->name, $this->value,
+ $this->value_type, $this->owner_guid, $this->access_id);
+
+ if (!$this->id) {
+ throw new IOException(elgg_echo('IOException:UnableToSaveNew', array(get_class())));
+ }
+ return $this->id;
+ }
+ }
+
+ /**
+ * Delete the annotation.
+ *
+ * @return bool
+ */
+ function delete() {
+ elgg_delete_river(array('annotation_id' => $this->id));
+ return elgg_delete_metastring_based_object_by_id($this->id, 'annotations');
+ }
+
+ /**
+ * Disable the annotation.
+ *
+ * @return bool
+ * @since 1.8
+ */
+ function disable() {
+ return elgg_set_metastring_based_object_enabled_by_id($this->id, 'no', 'annotations');
+ }
+
+ /**
+ * Enable the annotation.
+ *
+ * @return bool
+ * @since 1.8
+ */
+ function enable() {
+ return elgg_set_metastring_based_object_enabled_by_id($this->id, 'yes', 'annotations');
+ }
+
+ /**
+ * Get a url for this annotation.
+ *
+ * @return string
+ */
+ public function getURL() {
+ return get_annotation_url($this->id);
+ }
+
+ // SYSTEM LOG INTERFACE
+
+ /**
+ * For a given ID, return the object associated with it.
+ * This is used by the river functionality primarily.
+ * This is useful for checking access permissions etc on objects.
+ *
+ * @param int $id An annotation ID.
+ *
+ * @return ElggAnnotation
+ */
+ public function getObjectFromID($id) {
+ return elgg_get_annotation_from_id($id);
+ }
+}
diff --git a/engine/classes/ElggAttributeLoader.php b/engine/classes/ElggAttributeLoader.php
new file mode 100644
index 000000000..602bb8bae
--- /dev/null
+++ b/engine/classes/ElggAttributeLoader.php
@@ -0,0 +1,199 @@
+<?php
+
+/**
+ * Loads ElggEntity attributes from DB or validates those passed in via constructor
+ *
+ * @access private
+ */
+class ElggAttributeLoader {
+
+ /**
+ * @var array names of attributes in all entities
+ */
+ protected static $primary_attr_names = array(
+ 'guid',
+ 'type',
+ 'subtype',
+ 'owner_guid',
+ 'container_guid',
+ 'site_guid',
+ 'access_id',
+ 'time_created',
+ 'time_updated',
+ 'last_action',
+ 'enabled'
+ );
+
+ /**
+ * @var array names of secondary attributes required for the entity
+ */
+ protected $secondary_attr_names = array();
+
+ /**
+ * @var string entity type (not class) required for fetched primaries
+ */
+ protected $required_type;
+
+ /**
+ * @var array
+ */
+ protected $initialized_attributes;
+
+ /**
+ * @var string class of object being loaded
+ */
+ protected $class;
+
+ /**
+ * @var bool should access control be considered when fetching entity?
+ */
+ public $requires_access_control = true;
+
+ /**
+ * @var callable function used to load attributes from {prefix}entities table
+ */
+ public $primary_loader = 'get_entity_as_row';
+
+ /**
+ * @var callable function used to load attributes from secondary table
+ */
+ public $secondary_loader = '';
+
+ /**
+ * @var callable function used to load all necessary attributes
+ */
+ public $full_loader = '';
+
+ /**
+ * @param string $class class of object being loaded
+ * @param string $required_type entity type this is being used to populate
+ * @param array $initialized_attrs attributes after initializeAttributes() has been run
+ * @throws InvalidArgumentException
+ */
+ public function __construct($class, $required_type, array $initialized_attrs) {
+ if (!is_string($class)) {
+ throw new InvalidArgumentException('$class must be a class name.');
+ }
+ $this->class = $class;
+
+ if (!is_string($required_type)) {
+ throw new InvalidArgumentException('$requiredType must be a system entity type.');
+ }
+ $this->required_type = $required_type;
+
+ $this->initialized_attributes = $initialized_attrs;
+ unset($initialized_attrs['tables_split'], $initialized_attrs['tables_loaded']);
+ $all_attr_names = array_keys($initialized_attrs);
+ $this->secondary_attr_names = array_diff($all_attr_names, self::$primary_attr_names);
+ }
+
+ protected function isMissingPrimaries($row) {
+ return array_diff(self::$primary_attr_names, array_keys($row)) !== array();
+ }
+
+ protected function isMissingSecondaries($row) {
+ return array_diff($this->secondary_attr_names, array_keys($row)) !== array();
+ }
+
+ protected function checkType($row) {
+ if ($row['type'] !== $this->required_type) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($row['guid'], $this->class));
+ throw new InvalidClassException($msg);
+ }
+ }
+
+ /**
+ * Get all required attributes for the entity, validating any that are passed in. Returns empty array
+ * if can't be loaded (Check $failure_reason).
+ *
+ * This function splits loading between "primary" attributes (those in {prefix}entities table) and
+ * "secondary" attributes (e.g. those in {prefix}objects_entity), but can load all at once if a
+ * combined loader is available.
+ *
+ * @param mixed $row a row loaded from DB (array or stdClass) or a GUID
+ * @return array will be empty if failed to load all attributes (access control or entity doesn't exist)
+ *
+ * @throws InvalidArgumentException|LogicException|IncompleteEntityException
+ */
+ public function getRequiredAttributes($row) {
+ if (!is_array($row) && !($row instanceof stdClass)) {
+ // assume row is the GUID
+ $row = array('guid' => $row);
+ }
+ $row = (array) $row;
+ if (empty($row['guid'])) {
+ throw new InvalidArgumentException('$row must be or contain a GUID');
+ }
+
+ // these must be present to support isFullyLoaded()
+ foreach (array('tables_split', 'tables_loaded') as $key) {
+ if (isset($this->initialized_attributes[$key])) {
+ $row[$key] = $this->initialized_attributes[$key];
+ }
+ }
+
+ $was_missing_primaries = $this->isMissingPrimaries($row);
+ $was_missing_secondaries = $this->isMissingSecondaries($row);
+
+ // some types have a function to load all attributes at once, it should be faster
+ if (($was_missing_primaries || $was_missing_secondaries) && is_callable($this->full_loader)) {
+ $fetched = (array) call_user_func($this->full_loader, $row['guid']);
+ if (!$fetched) {
+ return array();
+ }
+ $row = array_merge($row, $fetched);
+ $this->checkType($row);
+ } else {
+ if ($was_missing_primaries) {
+ if (!is_callable($this->primary_loader)) {
+ throw new LogicException('Primary attribute loader must be callable');
+ }
+ if (!$this->requires_access_control) {
+ $ignoring_access = elgg_set_ignore_access();
+ }
+ $fetched = (array) call_user_func($this->primary_loader, $row['guid']);
+ if (!$this->requires_access_control) {
+ elgg_set_ignore_access($ignoring_access);
+ }
+ if (!$fetched) {
+ return array();
+ }
+ $row = array_merge($row, $fetched);
+ }
+
+ // We must test type before trying to load the secondaries so that InvalidClassException
+ // gets thrown. Otherwise the secondary loader will fail and return false.
+ $this->checkType($row);
+
+ if ($was_missing_secondaries) {
+ if (!is_callable($this->secondary_loader)) {
+ throw new LogicException('Secondary attribute loader must be callable');
+ }
+ $fetched = (array) call_user_func($this->secondary_loader, $row['guid']);
+ if (!$fetched) {
+ if ($row['type'] === 'site') {
+ // A special case is needed for sites: When vanilla ElggEntities are created and
+ // saved, these are stored w/ type "site", but with no sites_entity row. These
+ // are probably only created in the unit tests.
+ // @todo Don't save vanilla ElggEntities with type "site"
+ $row['guid'] = (int) $row['guid'];
+ return $row;
+ }
+ throw new IncompleteEntityException("Secondary loader failed to return row for {$row['guid']}");
+ }
+ $row = array_merge($row, $fetched);
+ }
+ }
+
+ // loading complete: re-check missing and check type
+ if (($was_missing_primaries && $this->isMissingPrimaries($row))
+ || ($was_missing_secondaries && $this->isMissingSecondaries($row))) {
+ throw new LogicException('Attribute loaders failed to return proper attributes');
+ }
+
+ // guid needs to be an int http://trac.elgg.org/ticket/4111
+ $row['guid'] = (int) $row['guid'];
+
+ return $row;
+ }
+}
diff --git a/engine/classes/ElggAutoP.php b/engine/classes/ElggAutoP.php
new file mode 100644
index 000000000..89d77e583
--- /dev/null
+++ b/engine/classes/ElggAutoP.php
@@ -0,0 +1,309 @@
+<?php
+
+/**
+ * Create wrapper P and BR elements in HTML depending on newlines. Useful when
+ * users use newlines to signal line and paragraph breaks. In all cases output
+ * should be well-formed markup.
+ *
+ * In DIV elements, Ps are only added when there would be at
+ * least two of them.
+ */
+class ElggAutoP {
+
+ public $encoding = 'UTF-8';
+
+ /**
+ * @var DOMDocument
+ */
+ protected $_doc = null;
+
+ /**
+ * @var DOMXPath
+ */
+ protected $_xpath = null;
+
+ protected $_blocks = 'address article area aside blockquote caption col colgroup dd
+ details div dl dt fieldset figure figcaption footer form h1 h2 h3 h4 h5 h6 header
+ hr hgroup legend map math menu nav noscript p pre section select style summary
+ table tbody td tfoot th thead tr ul ol option li';
+
+ /**
+ * @var array
+ */
+ protected $_inlines = 'a abbr audio b button canvas caption cite code command datalist
+ del dfn em embed i iframe img input ins kbd keygen label map mark meter object
+ output progress q rp rt ruby s samp script select small source span strong style
+ sub sup textarea time var video wbr';
+
+ /**
+ * Descend into these elements to add Ps
+ *
+ * @var array
+ */
+ protected $_descendList = 'article aside blockquote body details div footer form
+ header section';
+
+ /**
+ * Add Ps inside these elements
+ *
+ * @var array
+ */
+ protected $_alterList = 'article aside blockquote body details div footer header
+ section';
+
+ protected $_unique = '';
+
+ public function __construct() {
+ $this->_blocks = preg_split('@\\s+@', $this->_blocks);
+ $this->_descendList = preg_split('@\\s+@', $this->_descendList);
+ $this->_alterList = preg_split('@\\s+@', $this->_alterList);
+ $this->_inlines = preg_split('@\\s+@', $this->_inlines);
+ $this->_unique = md5(__FILE__);
+ }
+
+ /**
+ * Intance of class for singleton pattern.
+ * @var ElggAutoP
+ */
+ private static $instance;
+
+ /**
+ * Singleton pattern.
+ * @return ElggAutoP
+ */
+ public static function getInstance() {
+ $className = __CLASS__;
+ if (!(self::$instance instanceof $className)) {
+ self::$instance = new $className();
+ }
+ return self::$instance;
+ }
+
+ /**
+ * Create wrapper P and BR elements in HTML depending on newlines. Useful when
+ * users use newlines to signal line and paragraph breaks. In all cases output
+ * should be well-formed markup.
+ *
+ * In DIV, LI, TD, and TH elements, Ps are only added when their would be at
+ * least two of them.
+ *
+ * @param string $html snippet
+ * @return string|false output or false if parse error occurred
+ */
+ public function process($html) {
+ // normalize whitespace
+ $html = str_replace(array("\r\n", "\r"), "\n", $html);
+
+ // allows preserving entities untouched
+ $html = str_replace('&', $this->_unique . 'AMP', $html);
+
+ $this->_doc = new DOMDocument();
+
+ // parse to DOM, suppressing loadHTML warnings
+ // http://www.php.net/manual/en/domdocument.loadhtml.php#95463
+ libxml_use_internal_errors(true);
+
+ if (!$this->_doc->loadHTML("<html><meta http-equiv='content-type' "
+ . "content='text/html; charset={$this->encoding}'><body>{$html}</body>"
+ . "</html>")) {
+ return false;
+ }
+
+ $this->_xpath = new DOMXPath($this->_doc);
+ // start processing recursively at the BODY element
+ $nodeList = $this->_xpath->query('//body[1]');
+ $this->_addParagraphs($nodeList->item(0));
+
+ // serialize back to HTML
+ $html = $this->_doc->saveHTML();
+
+ // split AUTOPs into multiples at /\n\n+/
+ $html = preg_replace('/(' . $this->_unique . 'NL){2,}/', '</autop><autop>', $html);
+ $html = str_replace(array($this->_unique . 'BR', $this->_unique . 'NL', '<br>'),
+ '<br />',
+ $html);
+ $html = str_replace('<br /></autop>', '</autop>', $html);
+
+ // re-parse so we can handle new AUTOP elements
+
+ if (!$this->_doc->loadHTML($html)) {
+ return false;
+ }
+ // must re-create XPath object after DOM load
+ $this->_xpath = new DOMXPath($this->_doc);
+
+ // strip AUTOPs that only have comments/whitespace
+ foreach ($this->_xpath->query('//autop') as $autop) {
+ $hasContent = false;
+ if (trim($autop->textContent) !== '') {
+ $hasContent = true;
+ } else {
+ foreach ($autop->childNodes as $node) {
+ if ($node->nodeType === XML_ELEMENT_NODE) {
+ $hasContent = true;
+ break;
+ }
+ }
+ }
+ if (!$hasContent) {
+ // strip w/ preg_replace later (faster than moving nodes out)
+ $autop->setAttribute("r", "1");
+ }
+ }
+
+ // remove a single AUTOP inside certain elements
+ foreach ($this->_xpath->query('//div') as $el) {
+ $autops = $this->_xpath->query('./autop', $el);
+ if ($autops->length === 1) {
+ // strip w/ preg_replace later (faster than moving nodes out)
+ $autops->item(0)->setAttribute("r", "1");
+ }
+ }
+
+ $html = $this->_doc->saveHTML();
+
+ // trim to the contents of BODY
+ $bodyStart = strpos($html, '<body>');
+ $bodyEnd = strpos($html, '</body>', $bodyStart + 6);
+ $html = substr($html, $bodyStart + 6, $bodyEnd - $bodyStart - 6);
+
+ // strip AUTOPs that should be removed
+ $html = preg_replace('@<autop r="1">(.*?)</autop>@', '\\1', $html);
+
+ // commit to converting AUTOPs to Ps
+ $html = str_replace('<autop>', "\n<p>", $html);
+ $html = str_replace('</autop>', "</p>\n", $html);
+
+ $html = str_replace('<br>', '<br />', $html);
+ $html = str_replace($this->_unique . 'AMP', '&', $html);
+ return $html;
+ }
+
+ /**
+ * Add P and BR elements as necessary
+ *
+ * @param DOMElement $el
+ */
+ protected function _addParagraphs(DOMElement $el) {
+ // no need to recurse, just queue up
+ $elsToProcess = array($el);
+ $inlinesToProcess = array();
+ while ($el = array_shift($elsToProcess)) {
+ // if true, we can alter all child nodes, if not, we'll just call
+ // _addParagraphs on each element in the descendInto list
+ $alterInline = in_array($el->nodeName, $this->_alterList);
+
+ // inside affected elements, we want to trim leading whitespace from
+ // the first text node
+ $ltrimFirstTextNode = true;
+
+ // should we open a new AUTOP element to move inline elements into?
+ $openP = true;
+ $autop = null;
+
+ // after BR, ignore a newline
+ $isFollowingBr = false;
+
+ $node = $el->firstChild;
+ while (null !== $node) {
+ if ($alterInline) {
+ if ($openP) {
+ $openP = false;
+ // create a P to move inline content into (this may be removed later)
+ $autop = $el->insertBefore($this->_doc->createElement('autop'), $node);
+ }
+ }
+
+ $isElement = ($node->nodeType === XML_ELEMENT_NODE);
+ if ($isElement) {
+ $elName = $node->nodeName;
+ }
+ $isBlock = ($isElement && in_array($elName, $this->_blocks));
+
+ if ($alterInline) {
+ $isInline = $isElement && ! $isBlock;
+ $isText = ($node->nodeType === XML_TEXT_NODE);
+ $isLastInline = (! $node->nextSibling
+ || ($node->nextSibling->nodeType === XML_ELEMENT_NODE
+ && in_array($node->nextSibling->nodeName, $this->_blocks)));
+ if ($isElement) {
+ $isFollowingBr = ($node->nodeName === 'br');
+ }
+
+ if ($isText) {
+ $nodeText = $node->nodeValue;
+ if ($ltrimFirstTextNode) {
+ $nodeText = ltrim($nodeText);
+ $ltrimFirstTextNode = false;
+ }
+ if ($isFollowingBr && preg_match('@^[ \\t]*\\n[ \\t]*@', $nodeText, $m)) {
+ // if a user ends a line with <br>, don't add a second BR
+ $nodeText = substr($nodeText, strlen($m[0]));
+ }
+ if ($isLastInline) {
+ $nodeText = rtrim($nodeText);
+ }
+ $nodeText = str_replace("\n", $this->_unique . 'NL', $nodeText);
+ $tmpNode = $node;
+ $node = $node->nextSibling; // move loop to next node
+
+ // alter node in place, then move into AUTOP
+ $tmpNode->nodeValue = $nodeText;
+ $autop->appendChild($tmpNode);
+
+ continue;
+ }
+ }
+ if ($isBlock || ! $node->nextSibling) {
+ if ($isBlock) {
+ if (in_array($node->nodeName, $this->_descendList)) {
+ $elsToProcess[] = $node;
+ //$this->_addParagraphs($node);
+ }
+ }
+ $openP = true;
+ $ltrimFirstTextNode = true;
+ }
+ if ($alterInline) {
+ if (! $isBlock) {
+ $tmpNode = $node;
+ if ($isElement && false !== strpos($tmpNode->textContent, "\n")) {
+ $inlinesToProcess[] = $tmpNode;
+ }
+ $node = $node->nextSibling;
+ $autop->appendChild($tmpNode);
+ continue;
+ }
+ }
+
+ $node = $node->nextSibling;
+ }
+ }
+
+ // handle inline nodes
+ // no need to recurse, just queue up
+ while ($el = array_shift($inlinesToProcess)) {
+ $ignoreLeadingNewline = false;
+ foreach ($el->childNodes as $node) {
+ if ($node->nodeType === XML_ELEMENT_NODE) {
+ if ($node->nodeValue === 'BR') {
+ $ignoreLeadingNewline = true;
+ } else {
+ $ignoreLeadingNewline = false;
+ if (false !== strpos($node->textContent, "\n")) {
+ $inlinesToProcess[] = $node;
+ }
+ }
+ continue;
+ } elseif ($node->nodeType === XML_TEXT_NODE) {
+ $text = $node->nodeValue;
+ if ($text[0] === "\n" && $ignoreLeadingNewline) {
+ $text = substr($text, 1);
+ $ignoreLeadingNewline = false;
+ }
+ $node->nodeValue = str_replace("\n", $this->_unique . 'BR', $text);
+ }
+ }
+ }
+ }
+}
diff --git a/engine/classes/ElggBatch.php b/engine/classes/ElggBatch.php
new file mode 100644
index 000000000..c1a77a0d9
--- /dev/null
+++ b/engine/classes/ElggBatch.php
@@ -0,0 +1,392 @@
+<?php
+/**
+ * Efficiently run operations on batches of results for any function
+ * that supports an options array.
+ *
+ * This is usually used with elgg_get_entities() and friends,
+ * elgg_get_annotations(), and elgg_get_metadata().
+ *
+ * If you pass a valid PHP callback, all results will be run through that
+ * callback. You can still foreach() through the result set after. Valid
+ * PHP callbacks can be a string, an array, or a closure.
+ * {@link http://php.net/manual/en/language.pseudo-types.php}
+ *
+ * The callback function must accept 3 arguments: an entity, the getter
+ * used, and the options used.
+ *
+ * Results from the callback are stored in callbackResult. If the callback
+ * returns only booleans, callbackResults will be the combined result of
+ * all calls. If no entities are processed, callbackResults will be null.
+ *
+ * If the callback returns anything else, callbackresult will be an indexed
+ * array of whatever the callback returns. If returning error handling
+ * information, you should include enough information to determine which
+ * result you're referring to.
+ *
+ * Don't combine returning bools and returning something else.
+ *
+ * Note that returning false will not stop the foreach.
+ *
+ * @warning If your callback or foreach loop deletes or disable entities
+ * you MUST call setIncrementOffset(false) or set that when instantiating.
+ * This forces the offset to stay what it was in the $options array.
+ *
+ * @example
+ * <code>
+ * // using foreach
+ * $batch = new ElggBatch('elgg_get_entities', array());
+ * $batch->setIncrementOffset(false);
+ *
+ * foreach ($batch as $entity) {
+ * $entity->disable();
+ * }
+ *
+ * // using both a callback
+ * $callback = function($result, $getter, $options) {
+ * var_dump("Looking at annotation id: $result->id");
+ * return true;
+ * }
+ *
+ * $batch = new ElggBatch('elgg_get_annotations', array('guid' => 2), $callback);
+ * </code>
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel
+ * @link http://docs.elgg.org/DataModel/ElggBatch
+ * @since 1.8
+ */
+class ElggBatch
+ implements Iterator {
+
+ /**
+ * The objects to interator over.
+ *
+ * @var array
+ */
+ private $results = array();
+
+ /**
+ * The function used to get results.
+ *
+ * @var mixed A string, array, or closure, or lamda function
+ */
+ private $getter = null;
+
+ /**
+ * The number of results to grab at a time.
+ *
+ * @var int
+ */
+ private $chunkSize = 25;
+
+ /**
+ * A callback function to pass results through.
+ *
+ * @var mixed A string, array, or closure, or lamda function
+ */
+ private $callback = null;
+
+ /**
+ * Start after this many results.
+ *
+ * @var int
+ */
+ private $offset = 0;
+
+ /**
+ * Stop after this many results.
+ *
+ * @var int
+ */
+ private $limit = 0;
+
+ /**
+ * Number of processed results.
+ *
+ * @var int
+ */
+ private $retrievedResults = 0;
+
+ /**
+ * The index of the current result within the current chunk
+ *
+ * @var int
+ */
+ private $resultIndex = 0;
+
+ /**
+ * The index of the current chunk
+ *
+ * @var int
+ */
+ private $chunkIndex = 0;
+
+ /**
+ * The number of results iterated through
+ *
+ * @var int
+ */
+ private $processedResults = 0;
+
+ /**
+ * Is the getter a valid callback
+ *
+ * @var bool
+ */
+ private $validGetter = null;
+
+ /**
+ * The result of running all entities through the callback function.
+ *
+ * @var mixed
+ */
+ public $callbackResult = null;
+
+ /**
+ * If false, offset will not be incremented. This is used for callbacks/loops that delete.
+ *
+ * @var bool
+ */
+ private $incrementOffset = true;
+
+ /**
+ * Batches operations on any elgg_get_*() or compatible function that supports
+ * an options array.
+ *
+ * Instead of returning all objects in memory, it goes through $chunk_size
+ * objects, then requests more from the server. This avoids OOM errors.
+ *
+ * @param string $getter The function used to get objects. Usually
+ * an elgg_get_*() function, but can be any valid PHP callback.
+ * @param array $options The options array to pass to the getter function. If limit is
+ * not set, 10 is used as the default. In most cases that is not
+ * what you want.
+ * @param mixed $callback An optional callback function that all results will be passed
+ * to upon load. The callback needs to accept $result, $getter,
+ * $options.
+ * @param int $chunk_size The number of entities to pull in before requesting more.
+ * You have to balance this between running out of memory in PHP
+ * and hitting the db server too often.
+ * @param bool $inc_offset Increment the offset on each fetch. This must be false for
+ * callbacks that delete rows. You can set this after the
+ * object is created with {@see ElggBatch::setIncrementOffset()}.
+ */
+ public function __construct($getter, $options, $callback = null, $chunk_size = 25,
+ $inc_offset = true) {
+
+ $this->getter = $getter;
+ $this->options = $options;
+ $this->callback = $callback;
+ $this->chunkSize = $chunk_size;
+ $this->setIncrementOffset($inc_offset);
+
+ if ($this->chunkSize <= 0) {
+ $this->chunkSize = 25;
+ }
+
+ // store these so we can compare later
+ $this->offset = elgg_extract('offset', $options, 0);
+ $this->limit = elgg_extract('limit', $options, 10);
+
+ // if passed a callback, create a new ElggBatch with the same options
+ // and pass each to the callback.
+ if ($callback && is_callable($callback)) {
+ $batch = new ElggBatch($getter, $options, null, $chunk_size, $inc_offset);
+
+ $all_results = null;
+
+ foreach ($batch as $result) {
+ if (is_string($callback)) {
+ $result = $callback($result, $getter, $options);
+ } else {
+ $result = call_user_func_array($callback, array($result, $getter, $options));
+ }
+
+ if (!isset($all_results)) {
+ if ($result === true || $result === false || $result === null) {
+ $all_results = $result;
+ } else {
+ $all_results = array();
+ }
+ }
+
+ if (($result === true || $result === false || $result === null) && !is_array($all_results)) {
+ $all_results = $result && $all_results;
+ } else {
+ $all_results[] = $result;
+ }
+ }
+
+ $this->callbackResult = $all_results;
+ }
+ }
+
+ /**
+ * Fetches the next chunk of results
+ *
+ * @return bool
+ */
+ private function getNextResultsChunk() {
+ // reset memory caches after first chunk load
+ if ($this->chunkIndex > 0) {
+ global $DB_QUERY_CACHE, $ENTITY_CACHE;
+ $DB_QUERY_CACHE = $ENTITY_CACHE = array();
+ }
+
+ // always reset results.
+ $this->results = array();
+
+ if (!isset($this->validGetter)) {
+ $this->validGetter = is_callable($this->getter);
+ }
+
+ if (!$this->validGetter) {
+ return false;
+ }
+
+ $limit = $this->chunkSize;
+
+ // if someone passed limit = 0 they want everything.
+ if ($this->limit != 0) {
+ if ($this->retrievedResults >= $this->limit) {
+ return false;
+ }
+
+ // if original limit < chunk size, set limit to original limit
+ // else if the number of results we'll fetch if greater than the original limit
+ if ($this->limit < $this->chunkSize) {
+ $limit = $this->limit;
+ } elseif ($this->retrievedResults + $this->chunkSize > $this->limit) {
+ // set the limit to the number of results remaining in the original limit
+ $limit = $this->limit - $this->retrievedResults;
+ }
+ }
+
+ if ($this->incrementOffset) {
+ $offset = $this->offset + $this->retrievedResults;
+ } else {
+ $offset = $this->offset;
+ }
+
+ $current_options = array(
+ 'limit' => $limit,
+ 'offset' => $offset
+ );
+
+ $options = array_merge($this->options, $current_options);
+ $getter = $this->getter;
+
+ if (is_string($getter)) {
+ $this->results = $getter($options);
+ } else {
+ $this->results = call_user_func_array($getter, array($options));
+ }
+
+ if ($this->results) {
+ $this->chunkIndex++;
+ $this->resultIndex = 0;
+ $this->retrievedResults += count($this->results);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Increment the offset from the original options array? Setting to
+ * false is required for callbacks that delete rows.
+ *
+ * @param bool $increment
+ */
+ public function setIncrementOffset($increment = true) {
+ $this->incrementOffset = (bool) $increment;
+ }
+
+ /**
+ * Implements Iterator
+ */
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::rewind()
+ * @return void
+ */
+ public function rewind() {
+ $this->resultIndex = 0;
+ $this->retrievedResults = 0;
+ $this->processedResults = 0;
+
+ // only grab results if we haven't yet or we're crossing chunks
+ if ($this->chunkIndex == 0 || $this->limit > $this->chunkSize) {
+ $this->chunkIndex = 0;
+ $this->getNextResultsChunk();
+ }
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::current()
+ * @return mixed
+ */
+ public function current() {
+ return current($this->results);
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::key()
+ * @return int
+ */
+ public function key() {
+ return $this->processedResults;
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::next()
+ * @return mixed
+ */
+ public function next() {
+ // if we'll be at the end.
+ if (($this->processedResults + 1) >= $this->limit && $this->limit > 0) {
+ $this->results = array();
+ return false;
+ }
+
+ // if we'll need new results.
+ if (($this->resultIndex + 1) >= $this->chunkSize) {
+ if (!$this->getNextResultsChunk()) {
+ $this->results = array();
+ return false;
+ }
+
+ $result = current($this->results);
+ } else {
+ // the function above resets the indexes, so only inc if not
+ // getting new set
+ $this->resultIndex++;
+ $result = next($this->results);
+ }
+
+ $this->processedResults++;
+ return $result;
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::valid()
+ * @return bool
+ */
+ public function valid() {
+ if (!is_array($this->results)) {
+ return false;
+ }
+ $key = key($this->results);
+ return ($key !== NULL && $key !== FALSE);
+ }
+}
diff --git a/engine/classes/ElggCache.php b/engine/classes/ElggCache.php
new file mode 100644
index 000000000..4317f4be9
--- /dev/null
+++ b/engine/classes/ElggCache.php
@@ -0,0 +1,243 @@
+<?php
+/**
+ * ElggCache The elgg cache superclass.
+ * This defines the interface for a cache (wherever that cache is stored).
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+abstract class ElggCache implements ArrayAccess {
+ /**
+ * Variables for the cache object.
+ *
+ * @var array
+ */
+ private $variables;
+
+ /**
+ * Set the constructor.
+ */
+ function __construct() {
+ $this->variables = array();
+ }
+
+ /**
+ * Set a cache variable.
+ *
+ * @param string $variable Name
+ * @param string $value Value
+ *
+ * @return void
+ *
+ * @deprecated 1.8 Use ElggCache:setVariable()
+ */
+ public function set_variable($variable, $value) {
+ elgg_deprecated_notice('ElggCache::set_variable() is deprecated by ElggCache::setVariable()', 1.8);
+ $this->setVariable($variable, $value);
+ }
+
+ /**
+ * Set a cache variable.
+ *
+ * @param string $variable Name
+ * @param string $value Value
+ *
+ * @return void
+ */
+ public function setVariable($variable, $value) {
+ if (!is_array($this->variables)) {
+ $this->variables = array();
+ }
+
+ $this->variables[$variable] = $value;
+ }
+
+ /**
+ * Get variables for this cache.
+ *
+ * @param string $variable Name
+ *
+ * @return mixed The value or null;
+ *
+ * @deprecated 1.8 Use ElggCache::getVariable()
+ */
+ public function get_variable($variable) {
+ elgg_deprecated_notice('ElggCache::get_variable() is deprecated by ElggCache::getVariable()', 1.8);
+ return $this->getVariable($variable);
+ }
+
+ /**
+ * Get variables for this cache.
+ *
+ * @param string $variable Name
+ *
+ * @return mixed The variable or null;
+ */
+ public function getVariable($variable) {
+ if (isset($this->variables[$variable])) {
+ return $this->variables[$variable];
+ }
+
+ return null;
+ }
+
+ /**
+ * Class member get overloading, returning key using $this->load defaults.
+ *
+ * @param string $key Name
+ *
+ * @return mixed
+ */
+ function __get($key) {
+ return $this->load($key);
+ }
+
+ /**
+ * Class member set overloading, setting a key using $this->save defaults.
+ *
+ * @param string $key Name
+ * @param mixed $value Value
+ *
+ * @return mixed
+ */
+ function __set($key, $value) {
+ return $this->save($key, $value);
+ }
+
+ /**
+ * Supporting isset, using $this->load() with default values.
+ *
+ * @param string $key The name of the attribute or metadata.
+ *
+ * @return bool
+ */
+ function __isset($key) {
+ return (bool)$this->load($key);
+ }
+
+ /**
+ * Supporting unsetting of magic attributes.
+ *
+ * @param string $key The name of the attribute or metadata.
+ *
+ * @return bool
+ */
+ function __unset($key) {
+ return $this->delete($key);
+ }
+
+ /**
+ * Save data in a cache.
+ *
+ * @param string $key Name
+ * @param string $data Value
+ *
+ * @return bool
+ */
+ abstract public function save($key, $data);
+
+ /**
+ * Load data from the cache using a given key.
+ *
+ * @todo $offset is a horrible variable name because it creates confusion
+ * with the ArrayAccess methods
+ *
+ * @param string $key Name
+ * @param int $offset Offset
+ * @param int $limit Limit
+ *
+ * @return mixed The stored data or false.
+ */
+ abstract public function load($key, $offset = 0, $limit = null);
+
+ /**
+ * Invalidate a key
+ *
+ * @param string $key Name
+ *
+ * @return bool
+ */
+ abstract public function delete($key);
+
+ /**
+ * Clear out all the contents of the cache.
+ *
+ * @return bool
+ */
+ abstract public function clear();
+
+ /**
+ * Add a key only if it doesn't already exist.
+ * Implemented simply here, if you extend this class and your caching engine
+ * provides a better way then override this accordingly.
+ *
+ * @param string $key Name
+ * @param string $data Value
+ *
+ * @return bool
+ */
+ public function add($key, $data) {
+ if (!isset($this[$key])) {
+ return $this->save($key, $data);
+ }
+
+ return false;
+ }
+
+ // ARRAY ACCESS INTERFACE //////////////////////////////////////////////////////////
+
+ /**
+ * Assigns a value for the specified key
+ *
+ * @see ArrayAccess::offsetSet()
+ *
+ * @param mixed $key The key (offset) to assign the value to.
+ * @param mixed $value The value to set.
+ *
+ * @return void
+ */
+ function offsetSet($key, $value) {
+ $this->save($key, $value);
+ }
+
+ /**
+ * Get the value for specified key
+ *
+ * @see ArrayAccess::offsetGet()
+ *
+ * @param mixed $key The key (offset) to retrieve.
+ *
+ * @return mixed
+ */
+ function offsetGet($key) {
+ return $this->load($key);
+ }
+
+ /**
+ * Unsets a key.
+ *
+ * @see ArrayAccess::offsetUnset()
+ *
+ * @param mixed $key The key (offset) to unset.
+ *
+ * @return void
+ */
+ function offsetUnset($key) {
+ if (isset($this->$key)) {
+ unset($this->$key);
+ }
+ }
+
+ /**
+ * Does key exist
+ *
+ * @see ArrayAccess::offsetExists()
+ *
+ * @param mixed $key A key (offset) to check for.
+ *
+ * @return bool
+ */
+ function offsetExists($key) {
+ return isset($this->$key);
+ }
+}
diff --git a/engine/classes/ElggData.php b/engine/classes/ElggData.php
new file mode 100644
index 000000000..3470ee1cf
--- /dev/null
+++ b/engine/classes/ElggData.php
@@ -0,0 +1,305 @@
+<?php
+/**
+ * A generic class that contains shared code b/w
+ * ElggExtender, ElggEntity, and ElggRelationship
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel
+ */
+abstract class ElggData implements
+ Loggable, // Can events related to this object class be logged
+ Iterator, // Override foreach behaviour
+ ArrayAccess, // Override for array access
+ Exportable
+{
+
+ /**
+ * The main attributes of an entity.
+ * Holds attributes to save to database
+ * This contains the site's main properties (id, etc)
+ * Blank entries for all database fields should be created by the constructor.
+ * Subclasses should add to this in their constructors.
+ * Any field not appearing in this will be viewed as a
+ */
+ protected $attributes = array();
+
+ /**
+ * Initialise the attributes array.
+ *
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * @param bool $pre18_api Compatibility for subclassing in 1.7 -> 1.8 change.
+ * Passing true (default) emits a deprecation notice.
+ * Passing false returns false. Core constructors always pass false.
+ * Does nothing either way since attributes are initialized by the time
+ * this is called.
+ * @return false|void False is
+ * @deprecated 1.8 Use initializeAttributes()
+ */
+ protected function initialise_attributes($pre18_api = true) {
+ if ($pre18_api) {
+ elgg_deprecated_notice('initialise_attributes() is deprecated by initializeAttributes()', 1.8);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Initialize the attributes array.
+ *
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ // Create attributes array if not already created
+ if (!is_array($this->attributes)) {
+ $this->attributes = array();
+ }
+
+ $this->attributes['time_created'] = NULL;
+ }
+
+ /**
+ * Return an attribute or a piece of metadata.
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ public function __get($name) {
+ return $this->get($name);
+ }
+
+ /**
+ * Set an attribute or a piece of metadata.
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return mixed
+ */
+ public function __set($name, $value) {
+ return $this->set($name, $value);
+ }
+
+ /**
+ * Test if property is set either as an attribute or metadata.
+ *
+ * @tip Use isset($entity->property)
+ *
+ * @param string $name The name of the attribute or metadata.
+ *
+ * @return bool
+ */
+ function __isset($name) {
+ return $this->$name !== NULL;
+ }
+
+ /**
+ * Fetch the specified attribute
+ *
+ * @param string $name The attribute to fetch
+ *
+ * @return mixed The attribute, if it exists. Otherwise, null.
+ */
+ abstract protected function get($name);
+
+ /**
+ * Set the specified attribute
+ *
+ * @param string $name The attribute to set
+ * @param mixed $value The value to set it to
+ *
+ * @return The success of your set funtion?
+ */
+ abstract protected function set($name, $value);
+
+ /**
+ * Get a URL for this object
+ *
+ * @return string
+ */
+ abstract public function getURL();
+
+ /**
+ * Save this data to the appropriate database table.
+ *
+ * @return bool
+ */
+ abstract public function save();
+
+ /**
+ * Delete this data.
+ *
+ * @return bool
+ */
+ abstract public function delete();
+
+ /**
+ * Returns the UNIX epoch time that this entity was created
+ *
+ * @return int UNIX epoch time
+ */
+ public function getTimeCreated() {
+ return $this->time_created;
+ }
+
+ /*
+ * SYSTEM LOG INTERFACE
+ */
+
+ /**
+ * Return the class name of the object.
+ *
+ * @return string
+ */
+ public function getClassName() {
+ return get_class($this);
+ }
+
+ /**
+ * Return the GUID of the owner of this object.
+ *
+ * @return int
+ * @deprecated 1.8 Use getOwnerGUID() instead
+ */
+ public function getObjectOwnerGUID() {
+ elgg_deprecated_notice("getObjectOwnerGUID() was deprecated. Use getOwnerGUID().", 1.8);
+ return $this->owner_guid;
+ }
+
+ /*
+ * ITERATOR INTERFACE
+ */
+
+ /*
+ * This lets an entity's attributes be displayed using foreach as a normal array.
+ * Example: http://www.sitepoint.com/print/php5-standard-library
+ */
+ protected $valid = FALSE;
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::rewind()
+ *
+ * @return void
+ */
+ public function rewind() {
+ $this->valid = (FALSE !== reset($this->attributes));
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::current()
+ *
+ * @return void
+ */
+ public function current() {
+ return current($this->attributes);
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::key()
+ *
+ * @return void
+ */
+ public function key() {
+ return key($this->attributes);
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::next()
+ *
+ * @return void
+ */
+ public function next() {
+ $this->valid = (FALSE !== next($this->attributes));
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::valid()
+ *
+ * @return void
+ */
+ public function valid() {
+ return $this->valid;
+ }
+
+ /*
+ * ARRAY ACCESS INTERFACE
+ */
+
+ /*
+ * This lets an entity's attributes be accessed like an associative array.
+ * Example: http://www.sitepoint.com/print/php5-standard-library
+ */
+
+ /**
+ * Array access interface
+ *
+ * @see ArrayAccess::offsetSet()
+ *
+ * @param mixed $key Name
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ public function offsetSet($key, $value) {
+ if (array_key_exists($key, $this->attributes)) {
+ $this->attributes[$key] = $value;
+ }
+ }
+
+ /**
+ * Array access interface
+ *
+ * @see ArrayAccess::offsetGet()
+ *
+ * @param mixed $key Name
+ *
+ * @return void
+ */
+ public function offsetGet($key) {
+ if (array_key_exists($key, $this->attributes)) {
+ return $this->attributes[$key];
+ }
+ }
+
+ /**
+ * Array access interface
+ *
+ * @see ArrayAccess::offsetUnset()
+ *
+ * @param mixed $key Name
+ *
+ * @return void
+ */
+ public function offsetUnset($key) {
+ if (array_key_exists($key, $this->attributes)) {
+ // Full unsetting is dangerous for our objects
+ $this->attributes[$key] = "";
+ }
+ }
+
+ /**
+ * Array access interface
+ *
+ * @see ArrayAccess::offsetExists()
+ *
+ * @param int $offset Offset
+ *
+ * @return int
+ */
+ public function offsetExists($offset) {
+ return array_key_exists($offset, $this->attributes);
+ }
+}
diff --git a/engine/classes/ElggDiskFilestore.php b/engine/classes/ElggDiskFilestore.php
new file mode 100644
index 000000000..7aace43ba
--- /dev/null
+++ b/engine/classes/ElggDiskFilestore.php
@@ -0,0 +1,399 @@
+<?php
+/**
+ * A filestore that uses disk as storage.
+ *
+ * @warning This should be used by a wrapper class
+ * like {@link ElggFile}.
+ *
+ * @package Elgg.Core
+ * @subpackage FileStore.Disk
+ * @link http://docs.elgg.org/DataModel/FileStore/Disk
+ */
+class ElggDiskFilestore extends ElggFilestore {
+ /**
+ * Directory root.
+ */
+ private $dir_root;
+
+ /**
+ * Default depth of file directory matrix
+ */
+ private $matrix_depth = 5;
+
+ /**
+ * Construct a disk filestore using the given directory root.
+ *
+ * @param string $directory_root Root directory, must end in "/"
+ */
+ public function __construct($directory_root = "") {
+ global $CONFIG;
+
+ if ($directory_root) {
+ $this->dir_root = $directory_root;
+ } else {
+ $this->dir_root = $CONFIG->dataroot;
+ }
+ }
+
+ /**
+ * Open a file for reading, writing, or both.
+ *
+ * @note All files are opened binary safe.
+ * @warning This will try to create the a directory if it doesn't exist,
+ * even in read-only mode.
+ *
+ * @param ElggFile $file The file to open
+ * @param string $mode read, write, or append.
+ *
+ * @throws InvalidParameterException
+ * @return resource File pointer resource
+ * @todo This really shouldn't try to create directories if not writing.
+ */
+ public function open(ElggFile $file, $mode) {
+ $fullname = $this->getFilenameOnFilestore($file);
+
+ // Split into path and name
+ $ls = strrpos($fullname, "/");
+ if ($ls === false) {
+ $ls = 0;
+ }
+
+ $path = substr($fullname, 0, $ls);
+ $name = substr($fullname, $ls);
+
+ // Try and create the directory
+ try {
+ $this->makeDirectoryRoot($path);
+ } catch (Exception $e) {
+
+ }
+
+ if (($mode != 'write') && (!file_exists($fullname))) {
+ return false;
+ }
+
+ switch ($mode) {
+ case "read" :
+ $mode = "rb";
+ break;
+ case "write" :
+ $mode = "w+b";
+ break;
+ case "append" :
+ $mode = "a+b";
+ break;
+ default:
+ $msg = elgg_echo('InvalidParameterException:UnrecognisedFileMode', array($mode));
+ throw new InvalidParameterException($msg);
+ }
+
+ return fopen($fullname, $mode);
+
+ }
+
+ /**
+ * Write data to a file.
+ *
+ * @param resource $f File pointer resource
+ * @param mixed $data The data to write.
+ *
+ * @return bool
+ */
+ public function write($f, $data) {
+ return fwrite($f, $data);
+ }
+
+ /**
+ * Read data from a file.
+ *
+ * @param resource $f File pointer resource
+ * @param int $length The number of bytes to read
+ * @param inf $offset The number of bytes to start after
+ *
+ * @return mixed Contents of file or false on fail.
+ */
+ public function read($f, $length, $offset = 0) {
+ if ($offset) {
+ $this->seek($f, $offset);
+ }
+
+ return fread($f, $length);
+ }
+
+ /**
+ * Close a file pointer
+ *
+ * @param resource $f A file pointer resource
+ *
+ * @return bool
+ */
+ public function close($f) {
+ return fclose($f);
+ }
+
+ /**
+ * Delete an ElggFile file.
+ *
+ * @param ElggFile $file File to delete
+ *
+ * @return bool
+ */
+ public function delete(ElggFile $file) {
+ $filename = $this->getFilenameOnFilestore($file);
+ if (file_exists($filename)) {
+ return unlink($filename);
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Seek to the specified position.
+ *
+ * @param resource $f File resource
+ * @param int $position Position in bytes
+ *
+ * @return bool
+ */
+ public function seek($f, $position) {
+ return fseek($f, $position);
+ }
+
+ /**
+ * Return the current location of the internal pointer
+ *
+ * @param resource $f File pointer resource
+ *
+ * @return int|false
+ */
+ public function tell($f) {
+ return ftell($f);
+ }
+
+ /**
+ * Tests for end of file on a file pointer
+ *
+ * @param resource $f File pointer resource
+ *
+ * @return bool
+ */
+ public function eof($f) {
+ return feof($f);
+ }
+
+ /**
+ * Returns the file size of an ElggFile file.
+ *
+ * @param ElggFile $file File object
+ *
+ * @return int The file size
+ */
+ public function getFileSize(ElggFile $file) {
+ return filesize($this->getFilenameOnFilestore($file));
+ }
+
+ /**
+ * Returns the filename as saved on disk for an ElggFile object
+ *
+ * @param ElggFile $file File object
+ *
+ * @return string The full path of where the file is stored
+ */
+ public function getFilenameOnFilestore(ElggFile $file) {
+ $owner_guid = $file->getOwnerGuid();
+ if (!$owner_guid) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+
+ if (!$owner_guid) {
+ $msg = elgg_echo('InvalidParameterException:MissingOwner',
+ array($file->getFilename(), $file->guid));
+ throw new InvalidParameterException($msg);
+ }
+
+ return $this->dir_root . $this->makefileMatrix($owner_guid) . $file->getFilename();
+ }
+
+ /**
+ * Returns the contents of the ElggFile file.
+ *
+ * @param ElggFile $file File object
+ *
+ * @return mixed
+ */
+ public function grabFile(ElggFile $file) {
+ return file_get_contents($file->getFilenameOnFilestore());
+ }
+
+ /**
+ * Tests if an ElggFile file exists.
+ *
+ * @param ElggFile $file File object
+ *
+ * @return bool
+ */
+ public function exists(ElggFile $file) {
+ return file_exists($this->getFilenameOnFilestore($file));
+ }
+
+ /**
+ * Returns the size of all data stored under a directory in the disk store.
+ *
+ * @param string $prefix Optional/ The prefix to check under.
+ * @param string $container_guid The guid of the entity whose data you want to check.
+ *
+ * @return int|false
+ */
+ public function getSize($prefix = '', $container_guid) {
+ if ($container_guid) {
+ return get_dir_size($this->dir_root . $this->makefileMatrix($container_guid) . $prefix);
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Create a directory $dirroot
+ *
+ * @param string $dirroot The full path of the directory to create
+ *
+ * @throws IOException
+ * @return true
+ * @deprecated 1.8 Use ElggDiskFilestore::makeDirectoryRoot()
+ */
+ protected function make_directory_root($dirroot) {
+ elgg_deprecated_notice('ElggDiskFilestore::make_directory_root() is deprecated by ::makeDirectoryRoot()', 1.8);
+
+ return $this->makeDirectoryRoot($dirroot);
+ }
+
+ /**
+ * Create a directory $dirroot
+ *
+ * @param string $dirroot The full path of the directory to create
+ *
+ * @throws IOException
+ * @return true
+ */
+ protected function makeDirectoryRoot($dirroot) {
+ if (!file_exists($dirroot)) {
+ if (!@mkdir($dirroot, 0700, true)) {
+ throw new IOException(elgg_echo('IOException:CouldNotMake', array($dirroot)));
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Multibyte string tokeniser.
+ *
+ * Splits a string into an array. Will fail safely if mbstring is
+ * not installed.
+ *
+ * @param string $string String
+ * @param string $charset The charset, defaults to UTF8
+ *
+ * @return array
+ * @deprecated 1.8 Files are stored by date and guid; no need for this.
+ */
+ private function mb_str_split($string, $charset = 'UTF8') {
+ elgg_deprecated_notice('ElggDiskFilestore::mb_str_split() is deprecated.', 1.8);
+
+ if (is_callable('mb_substr')) {
+ $length = mb_strlen($string);
+ $array = array();
+
+ while ($length) {
+ $array[] = mb_substr($string, 0, 1, $charset);
+ $string = mb_substr($string, 1, $length, $charset);
+
+ $length = mb_strlen($string);
+ }
+
+ return $array;
+ } else {
+ return str_split($string);
+ }
+
+ return false;
+ }
+
+ /**
+ * Construct a file path matrix for an entity.
+ *
+ * @param int $identifier The guide of the entity to store the data under.
+ *
+ * @return str The path where the entity's data will be stored.
+ * @deprecated 1.8 Use ElggDiskFilestore::makeFileMatrix()
+ */
+ protected function make_file_matrix($identifier) {
+ elgg_deprecated_notice('ElggDiskFilestore::make_file_matrix() is deprecated by ::makeFileMatrix()', 1.8);
+
+ return $this->makefileMatrix($identifier);
+ }
+
+ /**
+ * Construct a file path matrix for an entity.
+ *
+ * @param int $guid The guide of the entity to store the data under.
+ *
+ * @return str The path where the entity's data will be stored.
+ */
+ protected function makeFileMatrix($guid) {
+ $entity = get_entity($guid);
+
+ if (!($entity instanceof ElggEntity) || !$entity->time_created) {
+ return false;
+ }
+
+ $time_created = date('Y/m/d', $entity->time_created);
+
+ return "$time_created/$entity->guid/";
+ }
+
+ /**
+ * Construct a filename matrix.
+ *
+ * Generates a matrix using the entity's creation time and
+ * unique guid.
+ *
+ * File path matrixes are:
+ * YYYY/MM/DD/guid/
+ *
+ * @param int $guid The entity to contrust a matrix for
+ *
+ * @return str The
+ */
+ protected function user_file_matrix($guid) {
+ elgg_deprecated_notice('ElggDiskFilestore::user_file_matrix() is deprecated by ::makeFileMatrix()', 1.8);
+
+ return $this->makeFileMatrix($guid);
+ }
+
+ /**
+ * Returns a list of attributes to save to the database when saving
+ * the ElggFile object using this file store.
+ *
+ * @return array
+ */
+ public function getParameters() {
+ return array("dir_root" => $this->dir_root);
+ }
+
+ /**
+ * Sets parameters that should be saved to database.
+ *
+ * @param array $parameters Set parameters to save to DB for this filestore.
+ *
+ * @return bool
+ */
+ public function setParameters(array $parameters) {
+ if (isset($parameters['dir_root'])) {
+ $this->dir_root = $parameters['dir_root'];
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/engine/classes/ElggEntity.php b/engine/classes/ElggEntity.php
new file mode 100644
index 000000000..929abceb2
--- /dev/null
+++ b/engine/classes/ElggEntity.php
@@ -0,0 +1,1762 @@
+<?php
+/**
+ * The parent class for all Elgg Entities.
+ *
+ * An ElggEntity is one of the basic data models in Elgg. It is the primary
+ * means of storing and retrieving data from the database. An ElggEntity
+ * represents one row of the entities table.
+ *
+ * The ElggEntity class handles CRUD operations for the entities table.
+ * ElggEntity should always be extended by another class to handle CRUD
+ * operations on the type-specific table.
+ *
+ * ElggEntity uses magic methods for get and set, so any property that isn't
+ * declared will be assumed to be metadata and written to the database
+ * as metadata on the object. All children classes must declare which
+ * properties are columns of the type table or they will be assumed
+ * to be metadata. See ElggObject::initialise_entities() for examples.
+ *
+ * Core supports 4 types of entities: ElggObject, ElggUser, ElggGroup, and
+ * ElggSite.
+ *
+ * @tip Most plugin authors will want to extend the ElggObject class
+ * instead of this class.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Entities
+ *
+ * @property string $type object, user, group, or site (read-only after save)
+ * @property string $subtype Further clarifies the nature of the entity (read-only after save)
+ * @property int $guid The unique identifier for this entity (read only)
+ * @property int $owner_guid The GUID of the creator of this entity
+ * @property int $container_guid The GUID of the entity containing this entity
+ * @property int $site_guid The GUID of the website this entity is associated with
+ * @property int $access_id Specifies the visibility level of this entity
+ * @property int $time_created A UNIX timestamp of when the entity was created (read-only, set on first save)
+ * @property int $time_updated A UNIX timestamp of when the entity was last updated (automatically updated on save)
+ */
+abstract class ElggEntity extends ElggData implements
+ Notable, // Calendar interface
+ Locatable, // Geocoding interface
+ Importable // Allow import of data
+{
+
+ /**
+ * If set, overrides the value of getURL()
+ */
+ protected $url_override;
+
+ /**
+ * Icon override, overrides the value of getIcon().
+ */
+ protected $icon_override;
+
+ /**
+ * Holds metadata until entity is saved. Once the entity is saved,
+ * metadata are written immediately to the database.
+ */
+ protected $temp_metadata = array();
+
+ /**
+ * Holds annotations until entity is saved. Once the entity is saved,
+ * annotations are written immediately to the database.
+ */
+ protected $temp_annotations = array();
+
+ /**
+ * Holds private settings until entity is saved. Once the entity is saved,
+ * private settings are written immediately to the database.
+ */
+ protected $temp_private_settings = array();
+
+ /**
+ * Volatile data structure for this object, allows for storage of data
+ * in-memory that isn't sync'd back to the metadata table.
+ */
+ protected $volatile = array();
+
+ /**
+ * Initialize the attributes array.
+ *
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['guid'] = NULL;
+ $this->attributes['type'] = NULL;
+ $this->attributes['subtype'] = NULL;
+
+ $this->attributes['owner_guid'] = elgg_get_logged_in_user_guid();
+ $this->attributes['container_guid'] = elgg_get_logged_in_user_guid();
+
+ $this->attributes['site_guid'] = NULL;
+ $this->attributes['access_id'] = ACCESS_PRIVATE;
+ $this->attributes['time_created'] = NULL;
+ $this->attributes['time_updated'] = NULL;
+ $this->attributes['last_action'] = NULL;
+ $this->attributes['enabled'] = "yes";
+
+ // There now follows a bit of a hack
+ /* Problem: To speed things up, some objects are split over several tables,
+ * this means that it requires n number of database reads to fully populate
+ * an entity. This causes problems for caching and create events
+ * since it is not possible to tell whether a subclassed entity is complete.
+ *
+ * Solution: We have two counters, one 'tables_split' which tells whatever is
+ * interested how many tables are going to need to be searched in order to fully
+ * populate this object, and 'tables_loaded' which is how many have been
+ * loaded thus far.
+ *
+ * If the two are the same then this object is complete.
+ *
+ * Use: isFullyLoaded() to check
+ */
+ $this->attributes['tables_split'] = 1;
+ $this->attributes['tables_loaded'] = 0;
+ }
+
+ /**
+ * Clone an entity
+ *
+ * Resets the guid so that the entity can be saved as a distinct entity from
+ * the original. Creation time will be set when this new entity is saved.
+ * The owner and container guids come from the original entity. The clone
+ * method copies metadata but does not copy annotations or private settings.
+ *
+ * @note metadata will have its owner and access id set when the entity is saved
+ * and it will be the same as that of the entity.
+ *
+ * @return void
+ */
+ public function __clone() {
+ $orig_entity = get_entity($this->guid);
+ if (!$orig_entity) {
+ elgg_log("Failed to clone entity with GUID $this->guid", "ERROR");
+ return;
+ }
+
+ $metadata_array = elgg_get_metadata(array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ ));
+
+ $this->attributes['guid'] = "";
+
+ $this->attributes['subtype'] = $orig_entity->getSubtype();
+
+ // copy metadata over to new entity - slightly convoluted due to
+ // handling of metadata arrays
+ if (is_array($metadata_array)) {
+ // create list of metadata names
+ $metadata_names = array();
+ foreach ($metadata_array as $metadata) {
+ $metadata_names[] = $metadata['name'];
+ }
+ // arrays are stored with multiple enties per name
+ $metadata_names = array_unique($metadata_names);
+
+ // move the metadata over
+ foreach ($metadata_names as $name) {
+ $this->set($name, $orig_entity->$name);
+ }
+ }
+ }
+
+ /**
+ * Return the value of a property.
+ *
+ * If $name is defined in $this->attributes that value is returned, otherwise it will
+ * pull from the entity's metadata.
+ *
+ * Q: Why are we not using __get overload here?
+ * A: Because overload operators cause problems during subclassing, so we put the code here and
+ * create overloads in subclasses.
+ *
+ * @todo What problems are these?
+ *
+ * @warning Subtype is returned as an id rather than the subtype string. Use getSubtype()
+ * to get the subtype string.
+ *
+ * @param string $name Name
+ *
+ * @return mixed Returns the value of a given value, or null.
+ */
+ public function get($name) {
+ // See if its in our base attributes
+ if (array_key_exists($name, $this->attributes)) {
+ return $this->attributes[$name];
+ }
+
+ // No, so see if its in the meta data for this entity
+ $meta = $this->getMetaData($name);
+
+ // getMetaData returns NULL if $name is not found
+ return $meta;
+ }
+
+ /**
+ * Sets the value of a property.
+ *
+ * If $name is defined in $this->attributes that value is set, otherwise it is
+ * saved as metadata.
+ *
+ * @warning Metadata set this way will inherit the entity's owner and access ID. If you want
+ * to set metadata with a different owner, use create_metadata().
+ *
+ * @warning It is important that your class populates $this->attributes with keys
+ * for all base attributes, anything not in their gets set as METADATA.
+ *
+ * Q: Why are we not using __set overload here?
+ * A: Because overload operators cause problems during subclassing, so we put the code here and
+ * create overloads in subclasses.
+ *
+ * @todo What problems?
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return bool
+ */
+ public function set($name, $value) {
+ if (array_key_exists($name, $this->attributes)) {
+ // Certain properties should not be manually changed!
+ switch ($name) {
+ case 'guid':
+ case 'time_updated':
+ case 'last_action':
+ return FALSE;
+ break;
+ default:
+ $this->attributes[$name] = $value;
+ break;
+ }
+ } else {
+ return $this->setMetaData($name, $value);
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Return the value of a piece of metadata.
+ *
+ * @param string $name Name
+ *
+ * @return mixed The value, or NULL if not found.
+ */
+ public function getMetaData($name) {
+ $guid = $this->getGUID();
+
+ if (! $guid) {
+ if (isset($this->temp_metadata[$name])) {
+ // md is returned as an array only if more than 1 entry
+ if (count($this->temp_metadata[$name]) == 1) {
+ return $this->temp_metadata[$name][0];
+ } else {
+ return $this->temp_metadata[$name];
+ }
+ } else {
+ return null;
+ }
+ }
+
+ // upon first cache miss, just load/cache all the metadata and retry.
+ // if this works, the rest of this function may not be needed!
+ $cache = elgg_get_metadata_cache();
+ if ($cache->isKnown($guid, $name)) {
+ return $cache->load($guid, $name);
+ } else {
+ $cache->populateFromEntities(array($guid));
+ // in case ignore_access was on, we have to check again...
+ if ($cache->isKnown($guid, $name)) {
+ return $cache->load($guid, $name);
+ }
+ }
+
+ $md = elgg_get_metadata(array(
+ 'guid' => $guid,
+ 'metadata_name' => $name,
+ 'limit' => 0,
+ ));
+
+ $value = null;
+
+ if ($md && !is_array($md)) {
+ $value = $md->value;
+ } elseif (count($md) == 1) {
+ $value = $md[0]->value;
+ } else if ($md && is_array($md)) {
+ $value = metadata_array_to_values($md);
+ }
+
+ $cache->save($guid, $name, $value);
+
+ return $value;
+ }
+
+ /**
+ * Unset a property from metadata or attribute.
+ *
+ * @warning If you use this to unset an attribute, you must save the object!
+ *
+ * @param string $name The name of the attribute or metadata.
+ *
+ * @return void
+ */
+ function __unset($name) {
+ if (array_key_exists($name, $this->attributes)) {
+ $this->attributes[$name] = "";
+ } else {
+ $this->deleteMetadata($name);
+ }
+ }
+
+ /**
+ * Set a piece of metadata.
+ *
+ * Plugin authors should use the magic methods or create_metadata().
+ *
+ * @warning The metadata will inherit the parent entity's owner and access ID.
+ * If you want to write metadata with a different owner, use create_metadata().
+ *
+ * @access private
+ *
+ * @param string $name Name of the metadata
+ * @param mixed $value Value of the metadata (doesn't support assoc arrays)
+ * @param string $value_type Types supported: integer and string. Will auto-identify if not set
+ * @param bool $multiple Allow multiple values for a single name (doesn't support assoc arrays)
+ *
+ * @return bool
+ */
+ public function setMetaData($name, $value, $value_type = null, $multiple = false) {
+
+ // normalize value to an array that we will loop over
+ // remove indexes if value already an array.
+ if (is_array($value)) {
+ $value = array_values($value);
+ } else {
+ $value = array($value);
+ }
+
+ // saved entity. persist md to db.
+ if ($this->guid) {
+ // if overwriting, delete first.
+ if (!$multiple) {
+ $options = array(
+ 'guid' => $this->getGUID(),
+ 'metadata_name' => $name,
+ 'limit' => 0
+ );
+ // @todo in 1.9 make this return false if can't add metadata
+ // http://trac.elgg.org/ticket/4520
+ //
+ // need to remove access restrictions right now to delete
+ // because this is the expected behavior
+ $ia = elgg_set_ignore_access(true);
+ if (false === elgg_delete_metadata($options)) {
+ return false;
+ }
+ elgg_set_ignore_access($ia);
+ }
+
+ // add new md
+ $result = true;
+ foreach ($value as $value_tmp) {
+ // at this point $value should be appended because it was cleared above if needed.
+ $md_id = create_metadata($this->getGUID(), $name, $value_tmp, $value_type,
+ $this->getOwnerGUID(), $this->getAccessId(), true);
+ if (!$md_id) {
+ return false;
+ }
+ }
+
+ return $result;
+ }
+
+ // unsaved entity. store in temp array
+ // returning single entries instead of an array of 1 element is decided in
+ // getMetaData(), just like pulling from the db.
+ else {
+ // if overwrite, delete first
+ if (!$multiple || !isset($this->temp_metadata[$name])) {
+ $this->temp_metadata[$name] = array();
+ }
+
+ // add new md
+ $this->temp_metadata[$name] = array_merge($this->temp_metadata[$name], $value);
+ return true;
+ }
+ }
+
+ /**
+ * Deletes all metadata on this object (metadata.entity_guid = $this->guid).
+ * If you pass a name, only metadata matching that name will be deleted.
+ *
+ * @warning Calling this with no $name will clear all metadata on the entity.
+ *
+ * @param null|string $name The name of the metadata to remove.
+ * @return bool
+ * @since 1.8
+ */
+ public function deleteMetadata($name = null) {
+
+ if (!$this->guid) {
+ return false;
+ }
+
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['metadata_name'] = $name;
+ }
+
+ return elgg_delete_metadata($options);
+ }
+
+ /**
+ * Deletes all metadata owned by this object (metadata.owner_guid = $this->guid).
+ * If you pass a name, only metadata matching that name will be deleted.
+ *
+ * @param null|string $name The name of metadata to delete.
+ * @return bool
+ * @since 1.8
+ */
+ public function deleteOwnedMetadata($name = null) {
+ // access is turned off for this because they might
+ // no longer have access to an entity they created metadata on.
+ $ia = elgg_set_ignore_access(true);
+ $options = array(
+ 'metadata_owner_guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['metadata_name'] = $name;
+ }
+
+ $r = elgg_delete_metadata($options);
+ elgg_set_ignore_access($ia);
+ return $r;
+ }
+
+ /**
+ * Remove metadata
+ *
+ * @warning Calling this with no or empty arguments will clear all metadata on the entity.
+ *
+ * @param string $name The name of the metadata to clear
+ * @return mixed bool
+ * @deprecated 1.8 Use deleteMetadata()
+ */
+ public function clearMetaData($name = '') {
+ elgg_deprecated_notice('ElggEntity->clearMetadata() is deprecated by ->deleteMetadata()', 1.8);
+ return $this->deleteMetadata($name);
+ }
+
+ /**
+ * Disables metadata for this entity, optionally based on name.
+ *
+ * @param string $name An options name of metadata to disable.
+ * @return bool
+ * @since 1.8
+ */
+ public function disableMetadata($name = '') {
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['metadata_name'] = $name;
+ }
+
+ return elgg_disable_metadata($options);
+ }
+
+ /**
+ * Enables metadata for this entity, optionally based on name.
+ *
+ * @warning Before calling this, you must use {@link access_show_hidden_entities()}
+ *
+ * @param string $name An options name of metadata to enable.
+ * @return bool
+ * @since 1.8
+ */
+ public function enableMetadata($name = '') {
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['metadata_name'] = $name;
+ }
+
+ return elgg_enable_metadata($options);
+ }
+
+ /**
+ * Get a piece of volatile (non-persisted) data on this entity.
+ *
+ * @param string $name The name of the volatile data
+ *
+ * @return mixed The value or NULL if not found.
+ */
+ public function getVolatileData($name) {
+ if (!is_array($this->volatile)) {
+ $this->volatile = array();
+ }
+
+ if (array_key_exists($name, $this->volatile)) {
+ return $this->volatile[$name];
+ } else {
+ return NULL;
+ }
+ }
+
+ /**
+ * Set a piece of volatile (non-persisted) data on this entity
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ public function setVolatileData($name, $value) {
+ if (!is_array($this->volatile)) {
+ $this->volatile = array();
+ }
+
+ $this->volatile[$name] = $value;
+ }
+
+ /**
+ * Remove all relationships to and from this entity.
+ *
+ * @return true
+ * @todo This should actually return if it worked.
+ * @see ElggEntity::addRelationship()
+ * @see ElggEntity::removeRelationship()
+ */
+ public function deleteRelationships() {
+ remove_entity_relationships($this->getGUID());
+ remove_entity_relationships($this->getGUID(), "", true);
+ return true;
+ }
+
+ /**
+ * Remove all relationships to and from this entity.
+ *
+ * @return bool
+ * @see ElggEntity::addRelationship()
+ * @see ElggEntity::removeRelationship()
+ * @deprecated 1.8 Use ->deleteRelationship()
+ */
+ public function clearRelationships() {
+ elgg_deprecated_notice('ElggEntity->clearRelationships() is deprecated by ->deleteRelationships()', 1.8);
+ return $this->deleteRelationships();
+ }
+
+ /**
+ * Add a relationship between this an another entity.
+ *
+ * @tip Read the relationship like "$guid is a $relationship of this entity."
+ *
+ * @param int $guid Entity to link to.
+ * @param string $relationship The type of relationship.
+ *
+ * @return bool
+ * @see ElggEntity::removeRelationship()
+ * @see ElggEntity::clearRelationships()
+ */
+ public function addRelationship($guid, $relationship) {
+ return add_entity_relationship($this->getGUID(), $relationship, $guid);
+ }
+
+ /**
+ * Remove a relationship
+ *
+ * @param int $guid GUID of the entity to make a relationship with
+ * @param str $relationship Name of relationship
+ *
+ * @return bool
+ * @see ElggEntity::addRelationship()
+ * @see ElggEntity::clearRelationships()
+ */
+ public function removeRelationship($guid, $relationship) {
+ return remove_entity_relationship($this->getGUID(), $relationship, $guid);
+ }
+
+ /**
+ * Adds a private setting to this entity.
+ *
+ * Private settings are similar to metadata but will not
+ * be searched and there are fewer helper functions for them.
+ *
+ * @param string $name Name of private setting
+ * @param mixed $value Value of private setting
+ *
+ * @return bool
+ */
+ function setPrivateSetting($name, $value) {
+ if ((int) $this->guid > 0) {
+ return set_private_setting($this->getGUID(), $name, $value);
+ } else {
+ $this->temp_private_settings[$name] = $value;
+ return true;
+ }
+ }
+
+ /**
+ * Returns a private setting value
+ *
+ * @param string $name Name of the private setting
+ *
+ * @return mixed
+ */
+ function getPrivateSetting($name) {
+ if ((int) ($this->guid) > 0) {
+ return get_private_setting($this->getGUID(), $name);
+ } else {
+ if (isset($this->temp_private_settings[$name])) {
+ return $this->temp_private_settings[$name];
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Removes private setting
+ *
+ * @param string $name Name of the private setting
+ *
+ * @return bool
+ */
+ function removePrivateSetting($name) {
+ return remove_private_setting($this->getGUID(), $name);
+ }
+
+ /**
+ * Deletes all annotations on this object (annotations.entity_guid = $this->guid).
+ * If you pass a name, only annotations matching that name will be deleted.
+ *
+ * @warning Calling this with no or empty arguments will clear all annotations on the entity.
+ *
+ * @param null|string $name The annotations name to remove.
+ * @return bool
+ * @since 1.8
+ */
+ public function deleteAnnotations($name = null) {
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ return elgg_delete_annotations($options);
+ }
+
+ /**
+ * Deletes all annotations owned by this object (annotations.owner_guid = $this->guid).
+ * If you pass a name, only annotations matching that name will be deleted.
+ *
+ * @param null|string $name The name of annotations to delete.
+ * @return bool
+ * @since 1.8
+ */
+ public function deleteOwnedAnnotations($name = null) {
+ // access is turned off for this because they might
+ // no longer have access to an entity they created annotations on.
+ $ia = elgg_set_ignore_access(true);
+ $options = array(
+ 'annotation_owner_guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ $r = elgg_delete_annotations($options);
+ elgg_set_ignore_access($ia);
+ return $r;
+ }
+
+ /**
+ * Disables annotations for this entity, optionally based on name.
+ *
+ * @param string $name An options name of annotations to disable.
+ * @return bool
+ * @since 1.8
+ */
+ public function disableAnnotations($name = '') {
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ return elgg_disable_annotations($options);
+ }
+
+ /**
+ * Enables annotations for this entity, optionally based on name.
+ *
+ * @warning Before calling this, you must use {@link access_show_hidden_entities()}
+ *
+ * @param string $name An options name of annotations to enable.
+ * @return bool
+ * @since 1.8
+ */
+ public function enableAnnotations($name = '') {
+ $options = array(
+ 'guid' => $this->guid,
+ 'limit' => 0
+ );
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ return elgg_enable_annotations($options);
+ }
+
+ /**
+ * Helper function to return annotation calculation results
+ *
+ * @param string $name The annotation name.
+ * @param string $calculation A valid MySQL function to run its values through
+ * @return mixed
+ */
+ private function getAnnotationCalculation($name, $calculation) {
+ $options = array(
+ 'guid' => $this->getGUID(),
+ 'annotation_name' => $name,
+ 'annotation_calculation' => $calculation
+ );
+
+ return elgg_get_annotations($options);
+ }
+
+ /**
+ * Adds an annotation to an entity.
+ *
+ * @warning By default, annotations are private.
+ *
+ * @warning Annotating an unsaved entity more than once with the same name
+ * will only save the last annotation.
+ *
+ * @param string $name Annotation name
+ * @param mixed $value Annotation value
+ * @param int $access_id Access ID
+ * @param int $owner_id GUID of the annotation owner
+ * @param string $vartype The type of annotation value
+ *
+ * @return bool
+ */
+ function annotate($name, $value, $access_id = ACCESS_PRIVATE, $owner_id = 0, $vartype = "") {
+ if ((int) $this->guid > 0) {
+ return create_annotation($this->getGUID(), $name, $value, $vartype, $owner_id, $access_id);
+ } else {
+ $this->temp_annotations[$name] = $value;
+ }
+ return true;
+ }
+
+ /**
+ * Returns an array of annotations.
+ *
+ * @param string $name Annotation name
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order Order by time: asc or desc
+ *
+ * @return array
+ */
+ function getAnnotations($name, $limit = 50, $offset = 0, $order = "asc") {
+ if ((int) ($this->guid) > 0) {
+
+ $options = array(
+ 'guid' => $this->guid,
+ 'annotation_name' => $name,
+ 'limit' => $limit,
+ 'offset' => $offset,
+ );
+
+ if ($order != 'asc') {
+ $options['reverse_order_by'] = true;
+ }
+
+ return elgg_get_annotations($options);
+ } else if (isset($this->temp_annotations[$name])) {
+ return array($this->temp_annotations[$name]);
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * Remove an annotation or all annotations for this entity.
+ *
+ * @warning Calling this method with no or an empty argument will remove
+ * all annotations on the entity.
+ *
+ * @param string $name Annotation name
+ * @return bool
+ * @deprecated 1.8 Use ->deleteAnnotations()
+ */
+ function clearAnnotations($name = "") {
+ elgg_deprecated_notice('ElggEntity->clearAnnotations() is deprecated by ->deleteAnnotations()', 1.8);
+ return $this->deleteAnnotations($name);
+ }
+
+ /**
+ * Count annotations.
+ *
+ * @param string $name The type of annotation.
+ *
+ * @return int
+ */
+ function countAnnotations($name = "") {
+ return $this->getAnnotationCalculation($name, 'count');
+ }
+
+ /**
+ * Get the average of an integer type annotation.
+ *
+ * @param string $name Annotation name
+ *
+ * @return int
+ */
+ function getAnnotationsAvg($name) {
+ return $this->getAnnotationCalculation($name, 'avg');
+ }
+
+ /**
+ * Get the sum of integer type annotations of a given name.
+ *
+ * @param string $name Annotation name
+ *
+ * @return int
+ */
+ function getAnnotationsSum($name) {
+ return $this->getAnnotationCalculation($name, 'sum');
+ }
+
+ /**
+ * Get the minimum of integer type annotations of given name.
+ *
+ * @param string $name Annotation name
+ *
+ * @return int
+ */
+ function getAnnotationsMin($name) {
+ return $this->getAnnotationCalculation($name, 'min');
+ }
+
+ /**
+ * Get the maximum of integer type annotations of a given name.
+ *
+ * @param string $name Annotation name
+ *
+ * @return int
+ */
+ function getAnnotationsMax($name) {
+ return $this->getAnnotationCalculation($name, 'max');
+ }
+
+ /**
+ * Count the number of comments attached to this entity.
+ *
+ * @return int Number of comments
+ * @since 1.8.0
+ */
+ function countComments() {
+ $params = array('entity' => $this);
+ $num = elgg_trigger_plugin_hook('comments:count', $this->getType(), $params);
+
+ if (is_int($num)) {
+ return $num;
+ } else {
+ return $this->getAnnotationCalculation('generic_comment', 'count');
+ }
+ }
+
+ /**
+ * Gets an array of entities with a relationship to this entity.
+ *
+ * @param string $relationship Relationship type (eg "friends")
+ * @param bool $inverse Is this an inverse relationship?
+ * @param int $limit Number of elements to return
+ * @param int $offset Indexing offset
+ *
+ * @return array|false An array of entities or false on failure
+ */
+ function getEntitiesFromRelationship($relationship, $inverse = false, $limit = 50, $offset = 0) {
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => $relationship,
+ 'relationship_guid' => $this->getGUID(),
+ 'inverse_relationship' => $inverse,
+ 'limit' => $limit,
+ 'offset' => $offset
+ ));
+ }
+
+ /**
+ * Gets the number of of entities from a specific relationship type
+ *
+ * @param string $relationship Relationship type (eg "friends")
+ * @param bool $inverse_relationship Invert relationship
+ *
+ * @return int|false The number of entities or false on failure
+ */
+ function countEntitiesFromRelationship($relationship, $inverse_relationship = FALSE) {
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => $relationship,
+ 'relationship_guid' => $this->getGUID(),
+ 'inverse_relationship' => $inverse_relationship,
+ 'count' => TRUE
+ ));
+ }
+
+ /**
+ * Can a user edit this entity.
+ *
+ * @param int $user_guid The user GUID, optionally (default: logged in user)
+ *
+ * @return bool
+ */
+ function canEdit($user_guid = 0) {
+ return can_edit_entity($this->getGUID(), $user_guid);
+ }
+
+ /**
+ * Can a user edit metadata on this entity
+ *
+ * @param ElggMetadata $metadata The piece of metadata to specifically check
+ * @param int $user_guid The user GUID, optionally (default: logged in user)
+ *
+ * @return true|false
+ */
+ function canEditMetadata($metadata = null, $user_guid = 0) {
+ return can_edit_entity_metadata($this->getGUID(), $user_guid, $metadata);
+ }
+
+ /**
+ * Can a user add an entity to this container
+ *
+ * @param int $user_guid The user.
+ * @param string $type The type of entity we're looking to write
+ * @param string $subtype The subtype of the entity we're looking to write
+ *
+ * @return bool
+ */
+ public function canWriteToContainer($user_guid = 0, $type = 'all', $subtype = 'all') {
+ return can_write_to_container($user_guid, $this->guid, $type, $subtype);
+ }
+
+ /**
+ * Can a user comment on an entity?
+ *
+ * @tip Can be overridden by registering for the permissions_check:comment,
+ * <entity type> plugin hook.
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ *
+ * @return bool
+ */
+ public function canComment($user_guid = 0) {
+ if ($user_guid == 0) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ }
+ $user = get_entity($user_guid);
+
+ // By default, we don't take a position of whether commenting is allowed
+ // because it is handled by the subclasses of ElggEntity
+ $params = array('entity' => $this, 'user' => $user);
+ return elgg_trigger_plugin_hook('permissions_check:comment', $this->type, $params, null);
+ }
+
+ /**
+ * Can a user annotate an entity?
+ *
+ * @tip Can be overridden by registering for the permissions_check:annotate,
+ * <entity type> plugin hook.
+ *
+ * @tip If you want logged out users to annotate an object, do not call
+ * canAnnotate(). It's easier than using the plugin hook.
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ * @param string $annotation_name The name of the annotation (default is unspecified)
+ *
+ * @return bool
+ */
+ public function canAnnotate($user_guid = 0, $annotation_name = '') {
+ if ($user_guid == 0) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ }
+ $user = get_entity($user_guid);
+
+ $return = true;
+ if (!$user) {
+ $return = false;
+ }
+
+ $params = array(
+ 'entity' => $this,
+ 'user' => $user,
+ 'annotation_name' => $annotation_name,
+ );
+ return elgg_trigger_plugin_hook('permissions_check:annotate', $this->type, $params, $return);
+ }
+
+ /**
+ * Returns the access_id.
+ *
+ * @return int The access ID
+ */
+ public function getAccessID() {
+ return $this->get('access_id');
+ }
+
+ /**
+ * Returns the guid.
+ *
+ * @return int|null GUID
+ */
+ public function getGUID() {
+ return $this->get('guid');
+ }
+
+ /**
+ * Returns the entity type
+ *
+ * @return string Entity type
+ */
+ public function getType() {
+ return $this->get('type');
+ }
+
+ /**
+ * Returns the entity subtype string
+ *
+ * @note This returns a string. If you want the id, use ElggEntity::subtype.
+ *
+ * @return string The entity subtype
+ */
+ public function getSubtype() {
+ // If this object hasn't been saved, then return the subtype string.
+ if (!((int) $this->guid > 0)) {
+ return $this->get('subtype');
+ }
+
+ return get_subtype_from_id($this->get('subtype'));
+ }
+
+ /**
+ * Get the guid of the entity's owner.
+ *
+ * @return int The owner GUID
+ */
+ public function getOwnerGUID() {
+ return $this->owner_guid;
+ }
+
+ /**
+ * Return the guid of the entity's owner.
+ *
+ * @return int The owner GUID
+ * @deprecated 1.8 Use getOwnerGUID()
+ */
+ public function getOwner() {
+ elgg_deprecated_notice("ElggEntity::getOwner deprecated for ElggEntity::getOwnerGUID", 1.8);
+ return $this->getOwnerGUID();
+ }
+
+ /**
+ * Gets the ElggEntity that owns this entity.
+ *
+ * @return ElggEntity The owning entity
+ */
+ public function getOwnerEntity() {
+ return get_entity($this->owner_guid);
+ }
+
+ /**
+ * Set the container for this object.
+ *
+ * @param int $container_guid The ID of the container.
+ *
+ * @return bool
+ */
+ public function setContainerGUID($container_guid) {
+ $container_guid = (int)$container_guid;
+
+ return $this->set('container_guid', $container_guid);
+ }
+
+ /**
+ * Set the container for this object.
+ *
+ * @param int $container_guid The ID of the container.
+ *
+ * @return bool
+ * @deprecated 1.8 use setContainerGUID()
+ */
+ public function setContainer($container_guid) {
+ elgg_deprecated_notice("ElggObject::setContainer deprecated for ElggEntity::setContainerGUID", 1.8);
+ $container_guid = (int)$container_guid;
+
+ return $this->set('container_guid', $container_guid);
+ }
+
+ /**
+ * Gets the container GUID for this entity.
+ *
+ * @return int
+ */
+ public function getContainerGUID() {
+ return $this->get('container_guid');
+ }
+
+ /**
+ * Gets the container GUID for this entity.
+ *
+ * @return int
+ * @deprecated 1.8 Use getContainerGUID()
+ */
+ public function getContainer() {
+ elgg_deprecated_notice("ElggObject::getContainer deprecated for ElggEntity::getContainerGUID", 1.8);
+ return $this->get('container_guid');
+ }
+
+ /**
+ * Get the container entity for this object.
+ *
+ * @return ElggEntity
+ * @since 1.8.0
+ */
+ public function getContainerEntity() {
+ return get_entity($this->getContainerGUID());
+ }
+
+ /**
+ * Returns the UNIX epoch time that this entity was last updated
+ *
+ * @return int UNIX epoch time
+ */
+ public function getTimeUpdated() {
+ return $this->get('time_updated');
+ }
+
+ /**
+ * Returns the URL for this entity
+ *
+ * @return string The URL
+ * @see register_entity_url_handler()
+ * @see ElggEntity::setURL()
+ */
+ public function getURL() {
+ if (!empty($this->url_override)) {
+ return $this->url_override;
+ }
+ return get_entity_url($this->getGUID());
+ }
+
+ /**
+ * Overrides the URL returned by getURL()
+ *
+ * @warning This override exists only for the life of the object.
+ *
+ * @param string $url The new item URL
+ *
+ * @return string The URL
+ */
+ public function setURL($url) {
+ $this->url_override = $url;
+ return $url;
+ }
+
+ /**
+ * Get the URL for this entity's icon
+ *
+ * Plugins can register for the 'entity:icon:url', <type> plugin hook
+ * to customize the icon for an entity.
+ *
+ * @param string $size Size of the icon: tiny, small, medium, large
+ *
+ * @return string The URL
+ * @since 1.8.0
+ */
+ public function getIconURL($size = 'medium') {
+ $size = elgg_strtolower($size);
+
+ if (isset($this->icon_override[$size])) {
+ elgg_deprecated_notice("icon_override on an individual entity is deprecated", 1.8);
+ return $this->icon_override[$size];
+ }
+
+ $type = $this->getType();
+ $params = array(
+ 'entity' => $this,
+ 'size' => $size,
+ );
+
+ $url = elgg_trigger_plugin_hook('entity:icon:url', $type, $params, null);
+ if ($url == null) {
+ $url = "_graphics/icons/default/$size.png";
+ }
+
+ return elgg_normalize_url($url);
+ }
+
+ /**
+ * Returns a URL for the entity's icon.
+ *
+ * @param string $size Either 'large', 'medium', 'small' or 'tiny'
+ *
+ * @return string The url or false if no url could be worked out.
+ * @deprecated Use getIconURL()
+ */
+ public function getIcon($size = 'medium') {
+ elgg_deprecated_notice("getIcon() deprecated by getIconURL()", 1.8);
+ return $this->getIconURL($size);
+ }
+
+ /**
+ * Set an icon override for an icon and size.
+ *
+ * @warning This override exists only for the life of the object.
+ *
+ * @param string $url The url of the icon.
+ * @param string $size The size its for.
+ *
+ * @return bool
+ * @deprecated 1.8 See getIconURL() for the plugin hook to use
+ */
+ public function setIcon($url, $size = 'medium') {
+ elgg_deprecated_notice("icon_override on an individual entity is deprecated", 1.8);
+
+ $url = sanitise_string($url);
+ $size = sanitise_string($size);
+
+ if (!$this->icon_override) {
+ $this->icon_override = array();
+ }
+ $this->icon_override[$size] = $url;
+
+ return true;
+ }
+
+ /**
+ * Tests to see whether the object has been fully loaded.
+ *
+ * @return bool
+ */
+ public function isFullyLoaded() {
+ return ! ($this->attributes['tables_loaded'] < $this->attributes['tables_split']);
+ }
+
+ /**
+ * Save an entity.
+ *
+ * @return bool|int
+ * @throws IOException
+ */
+ public function save() {
+ $guid = $this->getGUID();
+ if ($guid > 0) {
+ cache_entity($this);
+
+ return update_entity(
+ $guid,
+ $this->get('owner_guid'),
+ $this->get('access_id'),
+ $this->get('container_guid'),
+ $this->get('time_created')
+ );
+ } else {
+ // Create a new entity (nb: using attribute array directly
+ // 'cos set function does something special!)
+ $this->attributes['guid'] = create_entity($this->attributes['type'],
+ $this->attributes['subtype'], $this->attributes['owner_guid'],
+ $this->attributes['access_id'], $this->attributes['site_guid'],
+ $this->attributes['container_guid']);
+
+ if (!$this->attributes['guid']) {
+ throw new IOException(elgg_echo('IOException:BaseEntitySaveFailed'));
+ }
+
+ // Save any unsaved metadata
+ // @todo How to capture extra information (access id etc)
+ if (sizeof($this->temp_metadata) > 0) {
+ foreach ($this->temp_metadata as $name => $value) {
+ $this->$name = $value;
+ unset($this->temp_metadata[$name]);
+ }
+ }
+
+ // Save any unsaved annotations.
+ if (sizeof($this->temp_annotations) > 0) {
+ foreach ($this->temp_annotations as $name => $value) {
+ $this->annotate($name, $value);
+ unset($this->temp_annotations[$name]);
+ }
+ }
+
+ // Save any unsaved private settings.
+ if (sizeof($this->temp_private_settings) > 0) {
+ foreach ($this->temp_private_settings as $name => $value) {
+ $this->setPrivateSetting($name, $value);
+ unset($this->temp_private_settings[$name]);
+ }
+ }
+
+ // set the subtype to id now rather than a string
+ $this->attributes['subtype'] = get_subtype_id($this->attributes['type'],
+ $this->attributes['subtype']);
+
+ cache_entity($this);
+
+ return $this->attributes['guid'];
+ }
+ }
+
+ /**
+ * Loads attributes from the entities table into the object.
+ *
+ * @param mixed $guid GUID of entity or stdClass object from entities table
+ *
+ * @return bool
+ */
+ protected function load($guid) {
+ if ($guid instanceof stdClass) {
+ $row = $guid;
+ } else {
+ $row = get_entity_as_row($guid);
+ }
+
+ if ($row) {
+ // Create the array if necessary - all subclasses should test before creating
+ if (!is_array($this->attributes)) {
+ $this->attributes = array();
+ }
+
+ // Now put these into the attributes array as core values
+ $objarray = (array) $row;
+ foreach ($objarray as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+
+ // Increment the portion counter
+ if (!$this->isFullyLoaded()) {
+ $this->attributes['tables_loaded']++;
+ }
+
+ // guid needs to be an int http://trac.elgg.org/ticket/4111
+ $this->attributes['guid'] = (int)$this->attributes['guid'];
+
+ // Cache object handle
+ if ($this->attributes['guid']) {
+ cache_entity($this);
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Disable this entity.
+ *
+ * Disabled entities are not returned by getter functions.
+ * To enable an entity, use {@link enable_entity()}.
+ *
+ * Recursively disabling an entity will disable all entities
+ * owned or contained by the parent entity.
+ *
+ * @internal Disabling an entity sets the 'enabled' column to 'no'.
+ *
+ * @param string $reason Optional reason
+ * @param bool $recursive Recursively disable all contained entities?
+ *
+ * @return bool
+ * @see enable_entity()
+ * @see ElggEntity::enable()
+ */
+ public function disable($reason = "", $recursive = true) {
+ if ($r = disable_entity($this->get('guid'), $reason, $recursive)) {
+ $this->attributes['enabled'] = 'no';
+ }
+
+ return $r;
+ }
+
+ /**
+ * Enable an entity
+ *
+ * @warning Disabled entities can't be loaded unless
+ * {@link access_show_hidden_entities(true)} has been called.
+ *
+ * @see enable_entity()
+ * @see access_show_hiden_entities()
+ * @return bool
+ */
+ public function enable() {
+ if ($r = enable_entity($this->get('guid'))) {
+ $this->attributes['enabled'] = 'yes';
+ }
+
+ return $r;
+ }
+
+ /**
+ * Is this entity enabled?
+ *
+ * @return boolean
+ */
+ public function isEnabled() {
+ if ($this->enabled == 'yes') {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Delete this entity.
+ *
+ * @param bool $recursive Whether to delete all the entities contained by this entity
+ *
+ * @return bool
+ */
+ public function delete($recursive = true) {
+ return delete_entity($this->get('guid'), $recursive);
+ }
+
+ /*
+ * LOCATABLE INTERFACE
+ */
+
+ /**
+ * Gets the 'location' metadata for the entity
+ *
+ * @return string The location
+ */
+ public function getLocation() {
+ return $this->location;
+ }
+
+ /**
+ * Sets the 'location' metadata for the entity
+ *
+ * @todo Unimplemented
+ *
+ * @param string $location String representation of the location
+ *
+ * @return bool
+ */
+ public function setLocation($location) {
+ $this->location = $location;
+ return true;
+ }
+
+ /**
+ * Set latitude and longitude metadata tags for a given entity.
+ *
+ * @param float $lat Latitude
+ * @param float $long Longitude
+ *
+ * @return bool
+ * @todo Unimplemented
+ */
+ public function setLatLong($lat, $long) {
+ $this->set('geo:lat', $lat);
+ $this->set('geo:long', $long);
+
+ return true;
+ }
+
+ /**
+ * Return the entity's latitude.
+ *
+ * @return float
+ * @todo Unimplemented
+ */
+ public function getLatitude() {
+ return (float)$this->get('geo:lat');
+ }
+
+ /**
+ * Return the entity's longitude
+ *
+ * @return float
+ */
+ public function getLongitude() {
+ return (float)$this->get('geo:long');
+ }
+
+ /*
+ * NOTABLE INTERFACE
+ */
+
+ /**
+ * Set the time and duration of an object
+ *
+ * @param int $hour If ommitted, now is assumed.
+ * @param int $minute If ommitted, now is assumed.
+ * @param int $second If ommitted, now is assumed.
+ * @param int $day If ommitted, now is assumed.
+ * @param int $month If ommitted, now is assumed.
+ * @param int $year If ommitted, now is assumed.
+ * @param int $duration Duration of event, remainder of the day is assumed.
+ *
+ * @return true
+ * @todo Unimplemented
+ */
+ public function setCalendarTimeAndDuration($hour = NULL, $minute = NULL, $second = NULL,
+ $day = NULL, $month = NULL, $year = NULL, $duration = NULL) {
+
+ $start = mktime($hour, $minute, $second, $month, $day, $year);
+ $end = $start + abs($duration);
+ if (!$duration) {
+ $end = get_day_end($day, $month, $year);
+ }
+
+ $this->calendar_start = $start;
+ $this->calendar_end = $end;
+
+ return true;
+ }
+
+ /**
+ * Returns the start timestamp.
+ *
+ * @return int
+ * @todo Unimplemented
+ */
+ public function getCalendarStartTime() {
+ return (int)$this->calendar_start;
+ }
+
+ /**
+ * Returns the end timestamp.
+ *
+ * @todo Unimplemented
+ *
+ * @return int
+ */
+ public function getCalendarEndTime() {
+ return (int)$this->calendar_end;
+ }
+
+ /*
+ * EXPORTABLE INTERFACE
+ */
+
+ /**
+ * Returns an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array(
+ 'guid',
+ 'type',
+ 'subtype',
+ 'time_created',
+ 'time_updated',
+ 'container_guid',
+ 'owner_guid',
+ 'site_guid'
+ );
+ }
+
+ /**
+ * Export this class into an array of ODD Elements containing all necessary fields.
+ * Override if you wish to return more information than can be found in
+ * $this->attributes (shouldn't happen)
+ *
+ * @return array
+ */
+ public function export() {
+ $tmp = array();
+
+ // Generate uuid
+ $uuid = guid_to_uuid($this->getGUID());
+
+ // Create entity
+ $odd = new ODDEntity(
+ $uuid,
+ $this->attributes['type'],
+ get_subtype_from_id($this->attributes['subtype'])
+ );
+
+ $tmp[] = $odd;
+
+ $exportable_values = $this->getExportableValues();
+
+ // Now add its attributes
+ foreach ($this->attributes as $k => $v) {
+ $meta = NULL;
+
+ if (in_array($k, $exportable_values)) {
+ switch ($k) {
+ case 'guid': // Dont use guid in OpenDD
+ case 'type': // Type and subtype already taken care of
+ case 'subtype':
+ break;
+
+ case 'time_created': // Created = published
+ $odd->setAttribute('published', date("r", $v));
+ break;
+
+ case 'site_guid': // Container
+ $k = 'site_uuid';
+ $v = guid_to_uuid($v);
+ $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
+ break;
+
+ case 'container_guid': // Container
+ $k = 'container_uuid';
+ $v = guid_to_uuid($v);
+ $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
+ break;
+
+ case 'owner_guid': // Convert owner guid to uuid, this will be stored in metadata
+ $k = 'owner_uuid';
+ $v = guid_to_uuid($v);
+ $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
+ break;
+
+ default:
+ $meta = new ODDMetaData($uuid . "attr/$k/", $uuid, $k, $v);
+ }
+
+ // set the time of any metadata created
+ if ($meta) {
+ $meta->setAttribute('published', date("r", $this->time_created));
+ $tmp[] = $meta;
+ }
+ }
+ }
+
+ // Now we do something a bit special.
+ /*
+ * This provides a rendered view of the entity to foreign sites.
+ */
+
+ elgg_set_viewtype('default');
+ $view = elgg_view_entity($this, array('full_view' => true));
+ elgg_set_viewtype();
+
+ $tmp[] = new ODDMetaData($uuid . "volatile/renderedentity/", $uuid,
+ 'renderedentity', $view, 'volatile');
+
+ return $tmp;
+ }
+
+ /*
+ * IMPORTABLE INTERFACE
+ */
+
+ /**
+ * Import data from an parsed ODD xml data array.
+ *
+ * @param array $data XML data
+ *
+ * @return true
+ */
+ public function import(ODD $data) {
+ if (!($data instanceof ODDEntity)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnexpectedODDClass'));
+ }
+
+ // Set type and subtype
+ $this->attributes['type'] = $data->getAttribute('class');
+ $this->attributes['subtype'] = $data->getAttribute('subclass');
+
+ // Set owner
+ $this->attributes['owner_guid'] = elgg_get_logged_in_user_guid(); // Import as belonging to importer.
+
+ // Set time
+ $this->attributes['time_created'] = strtotime($data->getAttribute('published'));
+ $this->attributes['time_updated'] = time();
+
+ return true;
+ }
+
+ /*
+ * SYSTEM LOG INTERFACE
+ */
+
+ /**
+ * Return an identification for the object for storage in the system log.
+ * This id must be an integer.
+ *
+ * @return int
+ */
+ public function getSystemLogID() {
+ return $this->getGUID();
+ }
+
+ /**
+ * For a given ID, return the object associated with it.
+ * This is used by the river functionality primarily.
+ *
+ * This is useful for checking access permissions etc on objects.
+ *
+ * @param int $id GUID.
+ *
+ * @todo How is this any different or more useful than get_entity($guid)
+ * or new ElggEntity($guid)?
+ *
+ * @return int GUID
+ */
+ public function getObjectFromID($id) {
+ return get_entity($id);
+ }
+
+ /**
+ * Returns tags for this entity.
+ *
+ * @warning Tags must be registered by {@link elgg_register_tag_metadata_name()}.
+ *
+ * @param array $tag_names Optionally restrict by tag metadata names.
+ *
+ * @return array
+ */
+ public function getTags($tag_names = NULL) {
+ global $CONFIG;
+
+ if ($tag_names && !is_array($tag_names)) {
+ $tag_names = array($tag_names);
+ }
+
+ $valid_tags = elgg_get_registered_tag_metadata_names();
+ $entity_tags = array();
+
+ foreach ($valid_tags as $tag_name) {
+ if (is_array($tag_names) && !in_array($tag_name, $tag_names)) {
+ continue;
+ }
+
+ if ($tags = $this->$tag_name) {
+ // if a single tag, metadata returns a string.
+ // if multiple tags, metadata returns an array.
+ if (is_array($tags)) {
+ $entity_tags = array_merge($entity_tags, $tags);
+ } else {
+ $entity_tags[] = $tags;
+ }
+ }
+ }
+
+ return $entity_tags;
+ }
+}
diff --git a/engine/classes/ElggExtender.php b/engine/classes/ElggExtender.php
new file mode 100644
index 000000000..d94bad837
--- /dev/null
+++ b/engine/classes/ElggExtender.php
@@ -0,0 +1,214 @@
+<?php
+/**
+ * The base class for ElggEntity extenders.
+ *
+ * Extenders allow you to attach extended information to an
+ * ElggEntity. Core supports two: ElggAnnotation and ElggMetadata.
+ *
+ * Saving the extender data to database is handled by the child class.
+ *
+ * @tip Plugin authors would probably want to extend either ElggAnnotation
+ * or ElggMetadata instead of this class.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Extender
+ * @link http://docs.elgg.org/DataModel/Extenders
+ * @see ElggAnnotation
+ * @see ElggMetadata
+ *
+ * @property string $type annotation or metadata (read-only after save)
+ * @property int $id The unique identifier (read-only)
+ * @property int $entity_guid The GUID of the entity that this extender describes
+ * @property int $access_id Specifies the visibility level of this extender
+ * @property string $name The name of this extender
+ * @property mixed $value The value of the extender (int or string)
+ * @property int $time_created A UNIX timestamp of when the extender was created (read-only, set on first save)
+ */
+abstract class ElggExtender extends ElggData {
+
+ /**
+ * (non-PHPdoc)
+ *
+ * @see ElggData::initializeAttributes()
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = NULL;
+ }
+
+ /**
+ * Returns an attribute
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ protected function get($name) {
+ if (array_key_exists($name, $this->attributes)) {
+ // Sanitise value if necessary
+ if ($name == 'value') {
+ switch ($this->attributes['value_type']) {
+ case 'integer' :
+ return (int)$this->attributes['value'];
+ break;
+
+ //case 'tag' :
+ //case 'file' :
+ case 'text' :
+ return ($this->attributes['value']);
+ break;
+
+ default :
+ $msg = elgg_echo('InstallationException:TypeNotSupported', array(
+ $this->attributes['value_type']));
+
+ throw new InstallationException($msg);
+ break;
+ }
+ }
+
+ return $this->attributes[$name];
+ }
+ return null;
+ }
+
+ /**
+ * Set an attribute
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ * @param string $value_type Value type
+ *
+ * @return boolean
+ */
+ protected function set($name, $value, $value_type = "") {
+ $this->attributes[$name] = $value;
+ if ($name == 'value') {
+ $this->attributes['value_type'] = detect_extender_valuetype($value, $value_type);
+ }
+
+ return true;
+ }
+
+ /**
+ * Get the GUID of the extender's owner entity.
+ *
+ * @return int The owner GUID
+ */
+ public function getOwnerGUID() {
+ return $this->owner_guid;
+ }
+
+ /**
+ * Return the guid of the entity's owner.
+ *
+ * @return int The owner GUID
+ * @deprecated 1.8 Use getOwnerGUID
+ */
+ public function getOwner() {
+ elgg_deprecated_notice("ElggExtender::getOwner deprecated for ElggExtender::getOwnerGUID", 1.8);
+ return $this->getOwnerGUID();
+ }
+
+ /**
+ * Get the entity that owns this extender
+ *
+ * @return ElggEntity
+ */
+ public function getOwnerEntity() {
+ return get_entity($this->owner_guid);
+ }
+
+ /**
+ * Get the entity this describes.
+ *
+ * @return ElggEntity The entity
+ */
+ public function getEntity() {
+ return get_entity($this->entity_guid);
+ }
+
+ /**
+ * Returns if a user can edit this extended data.
+ *
+ * @param int $user_guid The GUID of the user (defaults to currently logged in user)
+ *
+ * @return bool
+ */
+ public function canEdit($user_guid = 0) {
+ return can_edit_extender($this->id, $this->type, $user_guid);
+ }
+
+ /*
+ * EXPORTABLE INTERFACE
+ */
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array(
+ 'id',
+ 'entity_guid',
+ 'name',
+ 'value',
+ 'value_type',
+ 'owner_guid',
+ 'type',
+ );
+ }
+
+ /**
+ * Export this object
+ *
+ * @return array
+ */
+ public function export() {
+ $uuid = get_uuid_from_object($this);
+
+ $meta = new ODDMetadata($uuid, guid_to_uuid($this->entity_guid), $this->attributes['name'],
+ $this->attributes['value'], $this->attributes['type'], guid_to_uuid($this->owner_guid));
+ $meta->setAttribute('published', date("r", $this->time_created));
+
+ return $meta;
+ }
+
+ /*
+ * SYSTEM LOG INTERFACE
+ */
+
+ /**
+ * Return an identification for the object for storage in the system log.
+ * This id must be an integer.
+ *
+ * @return int
+ */
+ public function getSystemLogID() {
+ return $this->id;
+ }
+
+ /**
+ * Return a type of extension.
+ *
+ * @return string
+ */
+ public function getType() {
+ return $this->type;
+ }
+
+ /**
+ * Return a subtype. For metadata & annotations this is the 'name' and
+ * for relationship this is the relationship type.
+ *
+ * @return string
+ */
+ public function getSubtype() {
+ return $this->name;
+ }
+
+}
diff --git a/engine/classes/ElggFile.php b/engine/classes/ElggFile.php
new file mode 100644
index 000000000..f21621ffd
--- /dev/null
+++ b/engine/classes/ElggFile.php
@@ -0,0 +1,427 @@
+<?php
+
+/**
+ * This class represents a physical file.
+ *
+ * Create a new ElggFile object and specify a filename, and optionally a
+ * FileStore (if one isn't specified then the default is assumed.)
+ *
+ * Open the file using the appropriate mode, and you will be able to
+ * read and write to the file.
+ *
+ * Optionally, you can also call the file's save() method, this will
+ * turn the file into an entity in the system and permit you to do
+ * things like attach tags to the file etc. This is not done automatically
+ * since there are many occasions where you may want access to file data
+ * on datastores using the ElggFile interface but do not want to create
+ * an Entity reference to it in the system (temporary files for example).
+ *
+ * @class ElggFile
+ * @package Elgg.Core
+ * @subpackage DataModel.File
+ */
+class ElggFile extends ElggObject {
+ /** Filestore */
+ private $filestore;
+
+ /** File handle used to identify this file in a filestore. Created by open. */
+ private $handle;
+
+ /**
+ * Set subtype to 'file'.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['subtype'] = "file";
+ }
+
+ /**
+ * Loads an ElggFile entity.
+ *
+ * @param int $guid GUID of the ElggFile object
+ */
+ public function __construct($guid = null) {
+ parent::__construct($guid);
+
+ // Set default filestore
+ $this->filestore = $this->getFilestore();
+ }
+
+ /**
+ * Set the filename of this file.
+ *
+ * @param string $name The filename.
+ *
+ * @return void
+ */
+ public function setFilename($name) {
+ $this->filename = $name;
+ }
+
+ /**
+ * Return the filename.
+ *
+ * @return string
+ */
+ public function getFilename() {
+ return $this->filename;
+ }
+
+ /**
+ * Return the filename of this file as it is/will be stored on the
+ * filestore, which may be different to the filename.
+ *
+ * @return string
+ */
+ public function getFilenameOnFilestore() {
+ return $this->filestore->getFilenameOnFilestore($this);
+ }
+
+ /**
+ * Return the size of the filestore associated with this file
+ *
+ * @param string $prefix Storage prefix
+ * @param int $container_guid The container GUID of the checked filestore
+ *
+ * @return int
+ */
+ public function getFilestoreSize($prefix = '', $container_guid = 0) {
+ if (!$container_guid) {
+ $container_guid = $this->container_guid;
+ }
+ $fs = $this->getFilestore();
+ return $fs->getSize($prefix, $container_guid);
+ }
+
+ /**
+ * Get the mime type of the file.
+ *
+ * @return string
+ */
+ public function getMimeType() {
+ if ($this->mimetype) {
+ return $this->mimetype;
+ }
+
+ // @todo Guess mimetype if not here
+ }
+
+ /**
+ * Set the mime type of the file.
+ *
+ * @param string $mimetype The mimetype
+ *
+ * @return bool
+ */
+ public function setMimeType($mimetype) {
+ return $this->mimetype = $mimetype;
+ }
+
+ /**
+ * Detects mime types based on filename or actual file.
+ *
+ * @param mixed $file The full path of the file to check. For uploaded files, use tmp_name.
+ * @param mixed $default A default. Useful to pass what the browser thinks it is.
+ * @since 1.7.12
+ *
+ * @return mixed Detected type on success, false on failure.
+ */
+ static function detectMimeType($file = null, $default = null) {
+ if (!$file) {
+ if (isset($this) && $this->filename) {
+ $file = $this->filename;
+ } else {
+ return false;
+ }
+ }
+
+ $mime = false;
+
+ // for PHP5 folks.
+ if (function_exists('finfo_file') && defined('FILEINFO_MIME_TYPE')) {
+ $resource = finfo_open(FILEINFO_MIME_TYPE);
+ if ($resource) {
+ $mime = finfo_file($resource, $file);
+ }
+ }
+
+ // for everyone else.
+ if (!$mime && function_exists('mime_content_type')) {
+ $mime = mime_content_type($file);
+ }
+
+ // default
+ if (!$mime) {
+ return $default;
+ }
+
+ return $mime;
+ }
+
+ /**
+ * Set the optional file description.
+ *
+ * @param string $description The description.
+ *
+ * @return bool
+ */
+ public function setDescription($description) {
+ $this->description = $description;
+ }
+
+ /**
+ * Open the file with the given mode
+ *
+ * @param string $mode Either read/write/append
+ *
+ * @return resource File handler
+ */
+ public function open($mode) {
+ if (!$this->getFilename()) {
+ throw new IOException(elgg_echo('IOException:MissingFileName'));
+ }
+
+ // See if file has already been saved
+ // seek on datastore, parameters and name?
+
+ // Sanity check
+ if (
+ ($mode != "read") &&
+ ($mode != "write") &&
+ ($mode != "append")
+ ) {
+ $msg = elgg_echo('InvalidParameterException:UnrecognisedFileMode', array($mode));
+ throw new InvalidParameterException($msg);
+ }
+
+ // Get the filestore
+ $fs = $this->getFilestore();
+
+ // Ensure that we save the file details to object store
+ //$this->save();
+
+ // Open the file handle
+ $this->handle = $fs->open($this, $mode);
+
+ return $this->handle;
+ }
+
+ /**
+ * Write data.
+ *
+ * @param string $data The data
+ *
+ * @return bool
+ */
+ public function write($data) {
+ $fs = $this->getFilestore();
+
+ return $fs->write($this->handle, $data);
+ }
+
+ /**
+ * Read data.
+ *
+ * @param int $length Amount to read.
+ * @param int $offset The offset to start from.
+ *
+ * @return mixed Data or false
+ */
+ public function read($length, $offset = 0) {
+ $fs = $this->getFilestore();
+
+ return $fs->read($this->handle, $length, $offset);
+ }
+
+ /**
+ * Gets the full contents of this file.
+ *
+ * @return mixed The file contents.
+ */
+ public function grabFile() {
+ $fs = $this->getFilestore();
+ return $fs->grabFile($this);
+ }
+
+ /**
+ * Close the file and commit changes
+ *
+ * @return bool
+ */
+ public function close() {
+ $fs = $this->getFilestore();
+
+ if ($fs->close($this->handle)) {
+ $this->handle = NULL;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Delete this file.
+ *
+ * @return bool
+ */
+ public function delete() {
+ $fs = $this->getFilestore();
+ if ($fs->delete($this)) {
+ return parent::delete();
+ }
+ }
+
+ /**
+ * Seek a position in the file.
+ *
+ * @param int $position Position in bytes
+ *
+ * @return bool
+ */
+ public function seek($position) {
+ $fs = $this->getFilestore();
+
+ return $fs->seek($this->handle, $position);
+ }
+
+ /**
+ * Return the current position of the file.
+ *
+ * @return int The file position
+ */
+ public function tell() {
+ $fs = $this->getFilestore();
+
+ return $fs->tell($this->handle);
+ }
+
+ /**
+ * Return the size of the file in bytes.
+ *
+ * @return int
+ */
+ public function size() {
+ return $this->filestore->getFileSize($this);
+ }
+
+ /**
+ * Return a boolean value whether the file handle is at the end of the file
+ *
+ * @return bool
+ */
+ public function eof() {
+ $fs = $this->getFilestore();
+
+ return $fs->eof($this->handle);
+ }
+
+ /**
+ * Returns if the file exists
+ *
+ * @return bool
+ */
+ public function exists() {
+ $fs = $this->getFilestore();
+
+ return $fs->exists($this);
+ }
+
+ /**
+ * Set a filestore.
+ *
+ * @param ElggFilestore $filestore The file store.
+ *
+ * @return void
+ */
+ public function setFilestore(ElggFilestore $filestore) {
+ $this->filestore = $filestore;
+ }
+
+ /**
+ * Return a filestore suitable for saving this file.
+ * This filestore is either a pre-registered filestore,
+ * a filestore as recorded in metadata or the system default.
+ *
+ * @return ElggFilestore
+ */
+ protected function getFilestore() {
+ // Short circuit if already set.
+ if ($this->filestore) {
+ return $this->filestore;
+ }
+
+ // ask for entity specific filestore
+ // saved as filestore::className in metadata.
+ // need to get all filestore::* metadata because the rest are "parameters" that
+ // get passed to filestore::setParameters()
+ if ($this->guid) {
+ $db_prefix = elgg_get_config('dbprefix');
+ $options = array(
+ 'guid' => $this->guid,
+ 'where' => array("n.string LIKE 'filestore::%'"),
+ );
+
+ $mds = elgg_get_metadata($options);
+
+ $parameters = array();
+ foreach ($mds as $md) {
+ list($foo, $name) = explode("::", $md->name);
+ if ($name == 'filestore') {
+ $filestore = $md->value;
+ }
+ $parameters[$name] = $md->value;
+ }
+ }
+
+ // need to check if filestore is set because this entity is loaded in save()
+ // before the filestore metadata is saved.
+ if (isset($filestore)) {
+ if (!class_exists($filestore)) {
+ $msg = elgg_echo('ClassNotFoundException:NotFoundNotSavedWithFile',
+ array($filestore, $this->guid));
+ throw new ClassNotFoundException($msg);
+ }
+
+ $this->filestore = new $filestore();
+ $this->filestore->setParameters($parameters);
+ }
+
+ // this means the entity hasn't been saved so fallback to default
+ if (!$this->filestore) {
+ $this->filestore = get_default_filestore();
+ }
+
+ return $this->filestore;
+ }
+
+ /**
+ * Save the file
+ *
+ * Write the file's data to the filestore and save
+ * the corresponding entity.
+ *
+ * @see ElggObject::save()
+ *
+ * @return bool
+ */
+ public function save() {
+ if (!parent::save()) {
+ return false;
+ }
+
+ // Save datastore metadata
+ $params = $this->filestore->getParameters();
+ foreach ($params as $k => $v) {
+ $this->setMetaData("filestore::$k", $v);
+ }
+
+ // Now make a note of the filestore class
+ $this->setMetaData("filestore::filestore", get_class($this->filestore));
+
+ return true;
+ }
+}
diff --git a/engine/classes/ElggFileCache.php b/engine/classes/ElggFileCache.php
new file mode 100644
index 000000000..34178d452
--- /dev/null
+++ b/engine/classes/ElggFileCache.php
@@ -0,0 +1,224 @@
+<?php
+/**
+ * ElggFileCache
+ * Store cached data in a file store.
+ *
+ * @package Elgg.Core
+ * @subpackage Caches
+ */
+class ElggFileCache extends ElggCache {
+ /**
+ * Set the Elgg cache.
+ *
+ * @param string $cache_path The cache path.
+ * @param int $max_age Maximum age in seconds, 0 if no limit.
+ * @param int $max_size Maximum size of cache in seconds, 0 if no limit.
+ */
+ function __construct($cache_path, $max_age = 0, $max_size = 0) {
+ $this->setVariable("cache_path", $cache_path);
+ $this->setVariable("max_age", $max_age);
+ $this->setVariable("max_size", $max_size);
+
+ if ($cache_path == "") {
+ throw new ConfigurationException(elgg_echo('ConfigurationException:NoCachePath'));
+ }
+ }
+
+ /**
+ * Create and return a handle to a file.
+ *
+ * @deprecated 1.8 Use ElggFileCache::createFile()
+ *
+ * @param string $filename Filename to save as
+ * @param string $rw Write mode
+ *
+ * @return mixed
+ */
+ protected function create_file($filename, $rw = "rb") {
+ elgg_deprecated_notice('ElggFileCache::create_file() is deprecated by ::createFile()', 1.8);
+
+ return $this->createFile($filename, $rw);
+ }
+
+ /**
+ * Create and return a handle to a file.
+ *
+ * @param string $filename Filename to save as
+ * @param string $rw Write mode
+ *
+ * @return mixed
+ */
+ protected function createFile($filename, $rw = "rb") {
+ // Create a filename matrix
+ $matrix = "";
+ $depth = strlen($filename);
+ if ($depth > 5) {
+ $depth = 5;
+ }
+
+ // Create full path
+ $path = $this->getVariable("cache_path") . $matrix;
+ if (!is_dir($path)) {
+ mkdir($path, 0700, true);
+ }
+
+ // Open the file
+ if ((!file_exists($path . $filename)) && ($rw == "rb")) {
+ return false;
+ }
+
+ return fopen($path . $filename, $rw);
+ }
+
+ /**
+ * Create a sanitised filename for the file.
+ *
+ * @deprecated 1.8 Use ElggFileCache::sanitizeFilename()
+ *
+ * @param string $filename The filename
+ *
+ * @return string
+ */
+ protected function sanitise_filename($filename) {
+ // @todo : Writeme
+
+ return $filename;
+ }
+
+ /**
+ * Create a sanitised filename for the file.
+ *
+ * @param string $filename The filename
+ *
+ * @return string
+ */
+ protected function sanitizeFilename($filename) {
+ // @todo : Writeme
+
+ return $filename;
+ }
+
+ /**
+ * Save a key
+ *
+ * @param string $key Name
+ * @param string $data Value
+ *
+ * @return boolean
+ */
+ public function save($key, $data) {
+ $f = $this->createFile($this->sanitizeFilename($key), "wb");
+ if ($f) {
+ $result = fwrite($f, $data);
+ fclose($f);
+
+ return $result;
+ }
+
+ return false;
+ }
+
+ /**
+ * Load a key
+ *
+ * @param string $key Name
+ * @param int $offset Offset
+ * @param int $limit Limit
+ *
+ * @return string
+ */
+ public function load($key, $offset = 0, $limit = null) {
+ $f = $this->createFile($this->sanitizeFilename($key));
+ if ($f) {
+ if (!$limit) {
+ $limit = -1;
+ }
+
+ $data = stream_get_contents($f, $limit, $offset);
+
+ fclose($f);
+
+ return $data;
+ }
+
+ return false;
+ }
+
+ /**
+ * Invalidate a given key.
+ *
+ * @param string $key Name
+ *
+ * @return bool
+ */
+ public function delete($key) {
+ $dir = $this->getVariable("cache_path");
+
+ if (file_exists($dir . $key)) {
+ return unlink($dir . $key);
+ }
+ return TRUE;
+ }
+
+ /**
+ * Delete all files in the directory of this file cache
+ *
+ * @return void
+ */
+ public function clear() {
+ $dir = $this->getVariable("cache_path");
+
+ $exclude = array(".", "..");
+
+ $files = scandir($dir);
+ if (!$files) {
+ return;
+ }
+
+ foreach ($files as $f) {
+ if (!in_array($f, $exclude)) {
+ unlink($dir . $f);
+ }
+ }
+ }
+
+ /**
+ * Preform cleanup and invalidates cache upon object destruction
+ *
+ * @throws IOException
+ */
+ public function __destruct() {
+ // @todo Check size and age, clean up accordingly
+ $size = 0;
+ $dir = $this->getVariable("cache_path");
+
+ // Short circuit if both size and age are unlimited
+ if (($this->getVariable("max_age") == 0) && ($this->getVariable("max_size") == 0)) {
+ return;
+ }
+
+ $exclude = array(".", "..");
+
+ $files = scandir($dir);
+ if (!$files) {
+ throw new IOException(elgg_echo('IOException:NotDirectory', array($dir)));
+ }
+
+ // Perform cleanup
+ foreach ($files as $f) {
+ if (!in_array($f, $exclude)) {
+ $stat = stat($dir . $f);
+
+ // Add size
+ $size .= $stat['size'];
+
+ // Is this older than my maximum date?
+ if (($this->getVariable("max_age") > 0) && (time() - $stat['mtime'] > $this->getVariable("max_age"))) {
+ unlink($dir . $f);
+ }
+
+ // @todo Size
+ }
+ }
+ }
+}
diff --git a/engine/classes/ElggFilestore.php b/engine/classes/ElggFilestore.php
new file mode 100644
index 000000000..16430feac
--- /dev/null
+++ b/engine/classes/ElggFilestore.php
@@ -0,0 +1,139 @@
+<?php
+/**
+ * This class defines the interface for all elgg data repositories.
+ *
+ * @package Elgg.Core
+ * @subpackage DataStorage
+ * @class ElggFilestore
+ */
+abstract class ElggFilestore {
+ /**
+ * Attempt to open the file $file for storage or writing.
+ *
+ * @param ElggFile $file A file
+ * @param string $mode "read", "write", "append"
+ *
+ * @return mixed A handle to the opened file or false on error.
+ */
+ abstract public function open(ElggFile $file, $mode);
+
+ /**
+ * Write data to a given file handle.
+ *
+ * @param mixed $f The file handle - exactly what this is depends on the file system
+ * @param string $data The binary string of data to write
+ *
+ * @return int Number of bytes written.
+ */
+ abstract public function write($f, $data);
+
+ /**
+ * Read data from a filestore.
+ *
+ * @param mixed $f The file handle
+ * @param int $length Length in bytes to read.
+ * @param int $offset The optional offset.
+ *
+ * @return mixed String of data or false on error.
+ */
+ abstract public function read($f, $length, $offset = 0);
+
+ /**
+ * Seek a given position within a file handle.
+ *
+ * @param mixed $f The file handle.
+ * @param int $position The position.
+ *
+ * @return void
+ */
+ abstract public function seek($f, $position);
+
+ /**
+ * Return a whether the end of a file has been reached.
+ *
+ * @param mixed $f The file handle.
+ *
+ * @return boolean
+ */
+ abstract public function eof($f);
+
+ /**
+ * Return the current position in an open file.
+ *
+ * @param mixed $f The file handle.
+ *
+ * @return int
+ */
+ abstract public function tell($f);
+
+ /**
+ * Close a given file handle.
+ *
+ * @param mixed $f The file handle
+ *
+ * @return bool
+ */
+ abstract public function close($f);
+
+ /**
+ * Delete the file associated with a given file handle.
+ *
+ * @param ElggFile $file The file
+ *
+ * @return bool
+ */
+ abstract public function delete(ElggFile $file);
+
+ /**
+ * Return the size in bytes for a given file.
+ *
+ * @param ElggFile $file The file
+ *
+ * @return int
+ */
+ abstract public function getFileSize(ElggFile $file);
+
+ /**
+ * Return the filename of a given file as stored on the filestore.
+ *
+ * @param ElggFile $file The file
+ *
+ * @return string
+ */
+ abstract public function getFilenameOnFilestore(ElggFile $file);
+
+ /**
+ * Get the filestore's creation parameters as an associative array.
+ * Used for serialisation and for storing the creation details along side a file object.
+ *
+ * @return array
+ */
+ abstract public function getParameters();
+
+ /**
+ * Set the parameters from the associative array produced by $this->getParameters().
+ *
+ * @param array $parameters A list of parameters
+ *
+ * @return bool
+ */
+ abstract public function setParameters(array $parameters);
+
+ /**
+ * Get the contents of the whole file.
+ *
+ * @param mixed $file The file handle.
+ *
+ * @return mixed The file contents.
+ */
+ abstract public function grabFile(ElggFile $file);
+
+ /**
+ * Return whether a file physically exists or not.
+ *
+ * @param ElggFile $file The file
+ *
+ * @return bool
+ */
+ abstract public function exists(ElggFile $file);
+}
diff --git a/engine/classes/ElggGroup.php b/engine/classes/ElggGroup.php
new file mode 100644
index 000000000..ea257f368
--- /dev/null
+++ b/engine/classes/ElggGroup.php
@@ -0,0 +1,388 @@
+<?php
+
+/**
+ * Class representing a container for other elgg entities.
+ *
+ * @package Elgg.Core
+ * @subpackage Groups
+ *
+ * @property string $name A short name that captures the purpose of the group
+ * @property string $description A longer body of content that gives more details about the group
+ */
+class ElggGroup extends ElggEntity
+ implements Friendable {
+
+ /**
+ * Sets the type to group.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = "group";
+ $this->attributes['name'] = NULL;
+ $this->attributes['description'] = NULL;
+ $this->attributes['tables_split'] = 2;
+ }
+
+ /**
+ * Construct a new group entity, optionally from a given guid value.
+ *
+ * @param mixed $guid If an int, load that GUID.
+ * If an entity table db row, then will load the rest of the data.
+ *
+ * @throws Exception if there was a problem creating the group.
+ */
+ function __construct($guid = null) {
+ $this->initializeAttributes();
+
+ // compatibility for 1.7 api.
+ $this->initialise_attributes(false);
+
+ if (!empty($guid)) {
+ // Is $guid is a entity table DB row
+ if ($guid instanceof stdClass) {
+ // Load the rest
+ if (!$this->load($guid)) {
+ $msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
+ throw new IOException($msg);
+ }
+
+ // Is $guid is an ElggGroup? Use a copy constructor
+ } else if ($guid instanceof ElggGroup) {
+ elgg_deprecated_notice('This type of usage of the ElggGroup constructor was deprecated. Please use the clone method.', 1.7);
+
+ foreach ($guid->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+
+ // Is this is an ElggEntity but not an ElggGroup = ERROR!
+ } else if ($guid instanceof ElggEntity) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggGroup'));
+
+ // Is it a GUID
+ } else if (is_numeric($guid)) {
+ if (!$this->load($guid)) {
+ throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
+ }
+ } else {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnrecognisedValue'));
+ }
+ }
+ }
+
+ /**
+ * Add an ElggObject to this group.
+ *
+ * @param ElggObject $object The object.
+ *
+ * @return bool
+ */
+ public function addObjectToGroup(ElggObject $object) {
+ return add_object_to_group($this->getGUID(), $object->getGUID());
+ }
+
+ /**
+ * Remove an object from the containing group.
+ *
+ * @param int $guid The guid of the object.
+ *
+ * @return bool
+ */
+ public function removeObjectFromGroup($guid) {
+ return remove_object_from_group($this->getGUID(), $guid);
+ }
+
+ /**
+ * Returns an attribute or metadata.
+ *
+ * @see ElggEntity::get()
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ public function get($name) {
+ if ($name == 'username') {
+ return 'group:' . $this->getGUID();
+ }
+ return parent::get($name);
+ }
+
+ /**
+ * Start friendable compatibility block:
+ *
+ * public function addFriend($friend_guid);
+ public function removeFriend($friend_guid);
+ public function isFriend();
+ public function isFriendsWith($user_guid);
+ public function isFriendOf($user_guid);
+ public function getFriends($subtype = "", $limit = 10, $offset = 0);
+ public function getFriendsOf($subtype = "", $limit = 10, $offset = 0);
+ public function getObjects($subtype="", $limit = 10, $offset = 0);
+ public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0);
+ public function countObjects($subtype = "");
+ */
+
+ /**
+ * For compatibility with Friendable.
+ *
+ * Join a group when you friend ElggGroup.
+ *
+ * @param int $friend_guid The GUID of the user joining the group.
+ *
+ * @return bool
+ */
+ public function addFriend($friend_guid) {
+ return $this->join(get_entity($friend_guid));
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * Leave group when you unfriend ElggGroup.
+ *
+ * @param int $friend_guid The GUID of the user leaving.
+ *
+ * @return bool
+ */
+ public function removeFriend($friend_guid) {
+ return $this->leave(get_entity($friend_guid));
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * Friending a group adds you as a member
+ *
+ * @return bool
+ */
+ public function isFriend() {
+ return $this->isMember();
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param int $user_guid The GUID of a user to check.
+ *
+ * @return bool
+ */
+ public function isFriendsWith($user_guid) {
+ return $this->isMember($user_guid);
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param int $user_guid The GUID of a user to check.
+ *
+ * @return bool
+ */
+ public function isFriendOf($user_guid) {
+ return $this->isMember($user_guid);
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param string $subtype The GUID of a user to check.
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return bool
+ */
+ public function getFriends($subtype = "", $limit = 10, $offset = 0) {
+ return get_group_members($this->getGUID(), $limit, $offset);
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param string $subtype The GUID of a user to check.
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return bool
+ */
+ public function getFriendsOf($subtype = "", $limit = 10, $offset = 0) {
+ return get_group_members($this->getGUID(), $limit, $offset);
+ }
+
+ /**
+ * Get objects contained in this group.
+ *
+ * @param string $subtype Entity subtype
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return array|false
+ */
+ public function getObjects($subtype = "", $limit = 10, $offset = 0) {
+ return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", $limit, $offset, false);
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param string $subtype Entity subtype
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return array|false
+ */
+ public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0) {
+ return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", $limit, $offset, false);
+ }
+
+ /**
+ * For compatibility with Friendable
+ *
+ * @param string $subtype Subtype of entities
+ *
+ * @return array|false
+ */
+ public function countObjects($subtype = "") {
+ return get_objects_in_group($this->getGUID(), $subtype, 0, 0, "", 10, 0, true);
+ }
+
+ /**
+ * End friendable compatibility block
+ */
+
+ /**
+ * Get a list of group members.
+ *
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param bool $count Count
+ *
+ * @return mixed
+ */
+ public function getMembers($limit = 10, $offset = 0, $count = false) {
+ return get_group_members($this->getGUID(), $limit, $offset, 0, $count);
+ }
+
+ /**
+ * Returns whether the current group is public membership or not.
+ *
+ * @return bool
+ */
+ public function isPublicMembership() {
+ if ($this->membership == ACCESS_PUBLIC) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Return whether a given user is a member of this group or not.
+ *
+ * @param ElggUser $user The user
+ *
+ * @return bool
+ */
+ public function isMember($user = 0) {
+ if (!($user instanceof ElggUser)) {
+ $user = elgg_get_logged_in_user_entity();
+ }
+ if (!($user instanceof ElggUser)) {
+ return false;
+ }
+ return is_group_member($this->getGUID(), $user->getGUID());
+ }
+
+ /**
+ * Join an elgg user to this group.
+ *
+ * @param ElggUser $user User
+ *
+ * @return bool
+ */
+ public function join(ElggUser $user) {
+ return join_group($this->getGUID(), $user->getGUID());
+ }
+
+ /**
+ * Remove a user from the group.
+ *
+ * @param ElggUser $user User
+ *
+ * @return bool
+ */
+ public function leave(ElggUser $user) {
+ return leave_group($this->getGUID(), $user->getGUID());
+ }
+
+ /**
+ * Load the ElggGroup data from the database
+ *
+ * @param mixed $guid GUID of an ElggGroup entity or database row from entity table
+ *
+ * @return bool
+ */
+ protected function load($guid) {
+ $attr_loader = new ElggAttributeLoader(get_class(), 'group', $this->attributes);
+ $attr_loader->requires_access_control = !($this instanceof ElggPlugin);
+ $attr_loader->secondary_loader = 'get_group_entity_as_row';
+
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
+ }
+
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ cache_entity($this);
+
+ return true;
+ }
+
+ /**
+ * Override the save function.
+ *
+ * @return bool
+ */
+ public function save() {
+ // Save generic stuff
+ if (!parent::save()) {
+ return false;
+ }
+
+ // Now save specific stuff
+ return create_group_entity($this->get('guid'), $this->get('name'), $this->get('description'));
+ }
+
+ // EXPORTABLE INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array_merge(parent::getExportableValues(), array(
+ 'name',
+ 'description',
+ ));
+ }
+
+ /**
+ * Can a user comment on this group?
+ *
+ * @see ElggEntity::canComment()
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ * @return bool
+ * @since 1.8.0
+ */
+ public function canComment($user_guid = 0) {
+ $result = parent::canComment($user_guid);
+ if ($result !== null) {
+ return $result;
+ }
+ return false;
+ }
+}
diff --git a/engine/classes/ElggGroupItemVisibility.php b/engine/classes/ElggGroupItemVisibility.php
new file mode 100644
index 000000000..2c7e2abb4
--- /dev/null
+++ b/engine/classes/ElggGroupItemVisibility.php
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * Determines if otherwise visible items should be hidden from a user due to group
+ * policy or visibility.
+ *
+ * @class ElggGroupItemVisibility
+ * @package Elgg.Core
+ * @subpackage Groups
+ *
+ * @access private
+ */
+class ElggGroupItemVisibility {
+
+ const REASON_MEMBERSHIP = 'membershiprequired';
+ const REASON_LOGGEDOUT = 'loggedinrequired';
+ const REASON_NOACCESS = 'noaccess';
+
+ /**
+ * @var bool
+ */
+ public $shouldHideItems = false;
+
+ /**
+ * @var string
+ */
+ public $reasonHidden = '';
+
+ /**
+ * Determine visibility of items within a container for the current user
+ *
+ * @param int $container_guid GUID of a container (may/may not be a group)
+ *
+ * @return ElggGroupItemVisibility
+ *
+ * @todo Make this faster, considering it must run for every river item.
+ */
+ static public function factory($container_guid) {
+ // cache because this may be called repeatedly during river display, and
+ // due to need to check group visibility, cache will be disabled for some
+ // get_entity() calls
+ static $cache = array();
+
+ $ret = new ElggGroupItemVisibility();
+
+ if (!$container_guid) {
+ return $ret;
+ }
+
+ $user = elgg_get_logged_in_user_entity();
+ $user_guid = $user ? $user->guid : 0;
+
+ $container_guid = (int) $container_guid;
+
+ $cache_key = "$container_guid|$user_guid";
+ if (empty($cache[$cache_key])) {
+ // compute
+
+ $container = get_entity($container_guid);
+ $is_visible = (bool) $container;
+
+ if (!$is_visible) {
+ // see if it *really* exists...
+ $prev_access = elgg_set_ignore_access();
+ $container = get_entity($container_guid);
+ elgg_set_ignore_access($prev_access);
+ }
+
+ if ($container && $container instanceof ElggGroup) {
+ /* @var ElggGroup $container */
+
+ if ($is_visible) {
+ if (!$container->isPublicMembership()) {
+ if ($user) {
+ if (!$container->isMember($user) && !$user->isAdmin()) {
+ $ret->shouldHideItems = true;
+ $ret->reasonHidden = self::REASON_MEMBERSHIP;
+ }
+ } else {
+ $ret->shouldHideItems = true;
+ $ret->reasonHidden = self::REASON_LOGGEDOUT;
+ }
+ }
+ } else {
+ $ret->shouldHideItems = true;
+ $ret->reasonHidden = self::REASON_NOACCESS;
+ }
+ }
+ $cache[$cache_key] = $ret;
+ }
+ return $cache[$cache_key];
+ }
+}
diff --git a/engine/classes/ElggHMACCache.php b/engine/classes/ElggHMACCache.php
new file mode 100644
index 000000000..c2f468815
--- /dev/null
+++ b/engine/classes/ElggHMACCache.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * ElggHMACCache
+ * Store cached data in a temporary database, only used by the HMAC stuff.
+ *
+ * @package Elgg.Core
+ * @subpackage HMAC
+ */
+class ElggHMACCache extends ElggCache {
+ /**
+ * Set the Elgg cache.
+ *
+ * @param int $max_age Maximum age in seconds, 0 if no limit.
+ */
+ function __construct($max_age = 0) {
+ $this->setVariable("max_age", $max_age);
+ }
+
+ /**
+ * Save a key
+ *
+ * @param string $key Name
+ * @param string $data Value
+ *
+ * @return boolean
+ */
+ public function save($key, $data) {
+ global $CONFIG;
+
+ $key = sanitise_string($key);
+ $time = time();
+
+ $query = "INSERT into {$CONFIG->dbprefix}hmac_cache (hmac, ts) VALUES ('$key', '$time')";
+ return insert_data($query);
+ }
+
+ /**
+ * Load a key
+ *
+ * @param string $key Name
+ * @param int $offset Offset
+ * @param int $limit Limit
+ *
+ * @return string
+ */
+ public function load($key, $offset = 0, $limit = null) {
+ global $CONFIG;
+
+ $key = sanitise_string($key);
+
+ $row = get_data_row("SELECT * from {$CONFIG->dbprefix}hmac_cache where hmac='$key'");
+ if ($row) {
+ return $row->hmac;
+ }
+
+ return false;
+ }
+
+ /**
+ * Invalidate a given key.
+ *
+ * @param string $key Name
+ *
+ * @return bool
+ */
+ public function delete($key) {
+ global $CONFIG;
+
+ $key = sanitise_string($key);
+
+ return delete_data("DELETE from {$CONFIG->dbprefix}hmac_cache where hmac='$key'");
+ }
+
+ /**
+ * Clear out all the contents of the cache.
+ *
+ * Not currently implemented in this cache type.
+ *
+ * @return true
+ */
+ public function clear() {
+ return true;
+ }
+
+ /**
+ * Clean out old stuff.
+ *
+ */
+ public function __destruct() {
+ global $CONFIG;
+
+ $time = time();
+ $age = (int)$this->getVariable("max_age");
+
+ $expires = $time - $age;
+
+ delete_data("DELETE from {$CONFIG->dbprefix}hmac_cache where ts<$expires");
+ }
+}
diff --git a/engine/classes/ElggMemcache.php b/engine/classes/ElggMemcache.php
new file mode 100644
index 000000000..d9539b9cb
--- /dev/null
+++ b/engine/classes/ElggMemcache.php
@@ -0,0 +1,201 @@
+<?php
+/**
+ * Memcache wrapper class.
+ *
+ * @package Elgg.Core
+ * @subpackage Memcache
+ */
+class ElggMemcache extends ElggSharedMemoryCache {
+ /**
+ * Minimum version of memcached needed to run
+ *
+ */
+ private static $MINSERVERVERSION = '1.1.12';
+
+ /**
+ * Memcache object
+ */
+ private $memcache;
+
+ /**
+ * Expiry of saved items (default timeout after a day to prevent anything getting too stale)
+ */
+ private $expires = 86400;
+
+ /**
+ * The version of memcache running
+ */
+ private $version = 0;
+
+ /**
+ * Connect to memcache.
+ *
+ * @param string $namespace The namespace for this cache to write to -
+ * note, namespaces of the same name are shared!
+ */
+ function __construct($namespace = 'default') {
+ global $CONFIG;
+
+ $this->setNamespace($namespace);
+
+ // Do we have memcache?
+ if (!class_exists('Memcache')) {
+ throw new ConfigurationException('PHP memcache module not installed, you must install php5-memcache');
+ }
+
+ // Create memcache object
+ $this->memcache = new Memcache;
+
+ // Now add servers
+ if (!$CONFIG->memcache_servers) {
+ throw new ConfigurationException('No memcache servers defined, please populate the $CONFIG->memcache_servers variable');
+ }
+
+ if (is_callable(array($this->memcache, 'addServer'))) {
+ foreach ($CONFIG->memcache_servers as $server) {
+ if (is_array($server)) {
+ $this->memcache->addServer(
+ $server[0],
+ isset($server[1]) ? $server[1] : 11211,
+ isset($server[2]) ? $server[2] : FALSE,
+ isset($server[3]) ? $server[3] : 1,
+ isset($server[4]) ? $server[4] : 1,
+ isset($server[5]) ? $server[5] : 15,
+ isset($server[6]) ? $server[6] : TRUE
+ );
+
+ } else {
+ $this->memcache->addServer($server, 11211);
+ }
+ }
+ } else {
+ // don't use elgg_echo() here because most of the config hasn't been loaded yet
+ // and it caches the language, which is hard coded in $CONFIG->language as en.
+ // overriding it with real values later has no effect because it's already cached.
+ elgg_log("This version of the PHP memcache API doesn't support multiple servers.", 'ERROR');
+
+ $server = $CONFIG->memcache_servers[0];
+ if (is_array($server)) {
+ $this->memcache->connect($server[0], $server[1]);
+ } else {
+ $this->memcache->addServer($server, 11211);
+ }
+ }
+
+ // Get version
+ $this->version = $this->memcache->getVersion();
+ if (version_compare($this->version, ElggMemcache::$MINSERVERVERSION, '<')) {
+ $msg = vsprintf('Memcache needs at least version %s to run, you are running %s',
+ array(ElggMemcache::$MINSERVERVERSION,
+ $this->version
+ ));
+
+ throw new ConfigurationException($msg);
+ }
+
+ // Set some defaults
+ if (isset($CONFIG->memcache_expires)) {
+ $this->expires = $CONFIG->memcache_expires;
+ }
+ }
+
+ /**
+ * Set the default expiry.
+ *
+ * @param int $expires The lifetime as a unix timestamp or time from now. Defaults forever.
+ *
+ * @return void
+ */
+ public function setDefaultExpiry($expires = 0) {
+ $this->expires = $expires;
+ }
+
+ /**
+ * Combine a key with the namespace.
+ * Memcache can only accept <250 char key. If the given key is too long it is shortened.
+ *
+ * @param string $key The key
+ *
+ * @return string The new key.
+ */
+ private function makeMemcacheKey($key) {
+ $prefix = $this->getNamespace() . ":";
+
+ if (strlen($prefix . $key) > 250) {
+ $key = md5($key);
+ }
+
+ return $prefix . $key;
+ }
+
+ /**
+ * Saves a name and value to the cache
+ *
+ * @param string $key Name
+ * @param string $data Value
+ * @param integer $expires Expires (in seconds)
+ *
+ * @return bool
+ */
+ public function save($key, $data, $expires = null) {
+ $key = $this->makeMemcacheKey($key);
+
+ if ($expires === null) {
+ $expires = $this->expires;
+ }
+
+ $result = $this->memcache->set($key, $data, null, $expires);
+ if ($result === false) {
+ elgg_log("MEMCACHE: FAILED TO SAVE $key", 'ERROR');
+ }
+
+ return $result;
+ }
+
+ /**
+ * Retrieves data.
+ *
+ * @param string $key Name of data to retrieve
+ * @param int $offset Offset
+ * @param int $limit Limit
+ *
+ * @return mixed
+ */
+ public function load($key, $offset = 0, $limit = null) {
+ $key = $this->makeMemcacheKey($key);
+
+ $result = $this->memcache->get($key);
+ if ($result === false) {
+ elgg_log("MEMCACHE: FAILED TO LOAD $key", 'ERROR');
+ }
+
+ return $result;
+ }
+
+ /**
+ * Delete data
+ *
+ * @param string $key Name of data
+ *
+ * @return bool
+ */
+ public function delete($key) {
+ $key = $this->makeMemcacheKey($key);
+
+ return $this->memcache->delete($key, 0);
+ }
+
+ /**
+ * Clears the entire cache?
+ *
+ * @todo write or remove.
+ *
+ * @return true
+ */
+ public function clear() {
+ // DISABLE clearing for now - you must use delete on a specific key.
+ return true;
+
+ // @todo Namespaces as in #532
+ }
+}
diff --git a/engine/classes/ElggMenuBuilder.php b/engine/classes/ElggMenuBuilder.php
new file mode 100644
index 000000000..d9a704dd9
--- /dev/null
+++ b/engine/classes/ElggMenuBuilder.php
@@ -0,0 +1,282 @@
+<?php
+/**
+ * Elgg Menu Builder
+ *
+ * @package Elgg.Core
+ * @subpackage Navigation
+ * @since 1.8.0
+ */
+class ElggMenuBuilder {
+
+ protected $menu = array();
+
+ protected $selected = null;
+
+ /**
+ * ElggMenuBuilder constructor
+ *
+ * @param array $menu Array of ElggMenuItem objects
+ */
+ public function __construct(array $menu) {
+ $this->menu = $menu;
+ }
+
+ /**
+ * Get a prepared menu array
+ *
+ * @param mixed $sort_by Method to sort the menu by. @see ElggMenuBuilder::sort()
+ * @return array
+ */
+ public function getMenu($sort_by = 'text') {
+
+ $this->selectFromContext();
+
+ $this->selected = $this->findSelected();
+
+ $this->setupSections();
+
+ $this->setupTrees();
+
+ $this->sort($sort_by);
+
+ return $this->menu;
+ }
+
+ /**
+ * Get the selected menu item
+ *
+ * @return ElggMenuItem
+ */
+ public function getSelected() {
+ return $this->selected;
+ }
+
+ /**
+ * Select menu items for the current context
+ *
+ * @return void
+ */
+ protected function selectFromContext() {
+ if (!isset($this->menu)) {
+ $this->menu = array();
+ return;
+ }
+
+ // get menu items for this context
+ $selected_menu = array();
+ foreach ($this->menu as $menu_item) {
+ if (!is_object($menu_item)) {
+ elgg_log("A non-object was passed to ElggMenuBuilder", "ERROR");
+ continue;
+ }
+ if ($menu_item->inContext()) {
+ $selected_menu[] = $menu_item;
+ }
+ }
+
+ $this->menu = $selected_menu;
+ }
+
+ /**
+ * Group the menu items into sections
+ *
+ * @return void
+ */
+ protected function setupSections() {
+ $sectioned_menu = array();
+ foreach ($this->menu as $menu_item) {
+ if (!isset($sectioned_menu[$menu_item->getSection()])) {
+ $sectioned_menu[$menu_item->getSection()] = array();
+ }
+ $sectioned_menu[$menu_item->getSection()][] = $menu_item;
+ }
+ $this->menu = $sectioned_menu;
+ }
+
+ /**
+ * Create trees for each menu section
+ *
+ * @internal The tree is doubly linked (parent and children links)
+ * @return void
+ */
+ protected function setupTrees() {
+ $menu_tree = array();
+
+ foreach ($this->menu as $key => $section) {
+ $parents = array();
+ $children = array();
+ // divide base nodes from children
+ foreach ($section as $menu_item) {
+ $parent_name = $menu_item->getParentName();
+ if (!$parent_name) {
+ $parents[$menu_item->getName()] = $menu_item;
+ } else {
+ $children[] = $menu_item;
+ }
+ }
+
+ // attach children to parents
+ $iteration = 0;
+ $current_gen = $parents;
+ while (count($children) && $iteration < 5) {
+ foreach ($children as $index => $menu_item) {
+ $parent_name = $menu_item->getParentName();
+ if (array_key_exists($parent_name, $current_gen)) {
+ $next_gen[$menu_item->getName()] = $menu_item;
+ $current_gen[$parent_name]->addChild($menu_item);
+ $menu_item->setParent($current_gen[$parent_name]);
+ unset($children[$index]);
+ }
+ }
+ $current_gen = $next_gen;
+ $iteration += 1;
+ }
+
+ // convert keys to indexes for first level of tree
+ $parents = array_values($parents);
+
+ $menu_tree[$key] = $parents;
+ }
+
+ $this->menu = $menu_tree;
+ }
+
+ /**
+ * Find the menu item that is currently selected
+ *
+ * @return ElggMenuItem
+ */
+ protected function findSelected() {
+
+ // do we have a selected menu item already
+ foreach ($this->menu as $menu_item) {
+ if ($menu_item->getSelected()) {
+ return $menu_item;
+ }
+ }
+
+ // scan looking for a selected item
+ foreach ($this->menu as $menu_item) {
+ if ($menu_item->getHref()) {
+ if (elgg_http_url_is_identical(current_page_url(), $menu_item->getHref())) {
+ $menu_item->setSelected(true);
+ return $menu_item;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Sort the menu sections and trees
+ *
+ * @param mixed $sort_by Sort type as string or php callback
+ * @return void
+ */
+ protected function sort($sort_by) {
+
+ // sort sections
+ ksort($this->menu);
+
+ switch ($sort_by) {
+ case 'text':
+ $sort_callback = array('ElggMenuBuilder', 'compareByText');
+ break;
+ case 'name':
+ $sort_callback = array('ElggMenuBuilder', 'compareByName');
+ break;
+ case 'priority':
+ $sort_callback = array('ElggMenuBuilder', 'compareByWeight');
+ break;
+ case 'register':
+ // use registration order - usort breaks this
+ return;
+ break;
+ default:
+ if (is_callable($sort_by)) {
+ $sort_callback = $sort_by;
+ } else {
+ return;
+ }
+ break;
+ }
+
+ // sort each section
+ foreach ($this->menu as $index => $section) {
+ foreach ($section as $key => $node) {
+ $section[$key]->setData('original_order', $key);
+ }
+ usort($section, $sort_callback);
+ $this->menu[$index] = $section;
+
+ // depth first traversal of tree
+ foreach ($section as $root) {
+ $stack = array();
+ array_push($stack, $root);
+ while (!empty($stack)) {
+ $node = array_pop($stack);
+ $node->sortChildren($sort_callback);
+ $children = $node->getChildren();
+ if ($children) {
+ $stack = array_merge($stack, $children);
+ }
+ $p = count($stack);
+ }
+ }
+ }
+ }
+
+ /**
+ * Compare two menu items by their display text
+ *
+ * @param ElggMenuItem $a
+ * @param ElggMenuItem $b
+ * @return bool
+ */
+ public static function compareByText($a, $b) {
+ $at = $a->getText();
+ $bt = $b->getText();
+
+ $result = strnatcmp($at, $bt);
+ if ($result === 0) {
+ return $a->getData('original_order') - $b->getData('original_order');
+ }
+ return $result;
+ }
+
+ /**
+ * Compare two menu items by their identifiers
+ *
+ * @param ElggMenuItem $a
+ * @param ElggMenuItem $b
+ * @return bool
+ */
+ public static function compareByName($a, $b) {
+ $an = $a->getName();
+ $bn = $b->getName();
+
+ $result = strcmp($an, $bn);
+ if ($result === 0) {
+ return $a->getData('original_order') - $b->getData('original_order');
+ }
+ return $result;
+ }
+
+ /**
+ * Compare two menu items by their priority
+ *
+ * @param ElggMenuItem $a
+ * @param ElggMenuItem $b
+ * @return bool
+ */
+ public static function compareByWeight($a, $b) {
+ $aw = $a->getWeight();
+ $bw = $b->getWeight();
+
+ if ($aw == $bw) {
+ return $a->getData('original_order') - $b->getData('original_order');
+ }
+ return $aw - $bw;
+ }
+}
diff --git a/engine/classes/ElggMenuItem.php b/engine/classes/ElggMenuItem.php
new file mode 100644
index 000000000..81ce6c099
--- /dev/null
+++ b/engine/classes/ElggMenuItem.php
@@ -0,0 +1,590 @@
+<?php
+/**
+ * Elgg Menu Item
+ *
+ * To create a menu item that is not a link, pass false for $href.
+ *
+ * @package Elgg.Core
+ * @subpackage Navigation
+ * @since 1.8.0
+ */
+class ElggMenuItem {
+
+ /**
+ * @var array Non-rendered data about the menu item
+ */
+ protected $data = array(
+ // string Identifier of the menu
+ 'name' => '',
+
+ // array Page contexts this menu item should appear on
+ 'contexts' => array('all'),
+
+ // string Menu section identifier
+ 'section' => 'default',
+
+ // int Smaller priorities float to the top
+ 'priority' => 100,
+
+ // bool Is this the currently selected menu item
+ 'selected' => false,
+
+ // string Identifier of this item's parent
+ 'parent_name' => '',
+
+ // ElggMenuItem The parent object or null
+ 'parent' => null,
+
+ // array Array of children objects or empty array
+ 'children' => array(),
+
+ // array Classes to apply to the li tag
+ 'itemClass' => array(),
+
+ // array Classes to apply to the anchor tag
+ 'linkClass' => array(),
+ );
+
+ /**
+ * @var string The menu display string
+ */
+ protected $text;
+
+ /**
+ * @var string The menu url
+ */
+ protected $href = null;
+
+ /**
+ * @var string Tooltip
+ */
+ protected $title = false;
+
+ /**
+ * @var string The string to display if link is clicked
+ */
+ protected $confirm = '';
+
+
+ /**
+ * ElggMenuItem constructor
+ *
+ * @param string $name Identifier of the menu item
+ * @param string $text Display text of the menu item
+ * @param string $href URL of the menu item (false if not a link)
+ */
+ public function __construct($name, $text, $href) {
+ //$this->name = $name;
+ $this->text = $text;
+ if ($href) {
+ $this->href = elgg_normalize_url($href);
+ } else {
+ $this->href = $href;
+ }
+
+ $this->data['name'] = $name;
+ }
+
+ /**
+ * ElggMenuItem factory method
+ *
+ * This static method creates an ElggMenuItem from an associative array.
+ * Required keys are name, text, and href.
+ *
+ * @param array $options Option array of key value pairs
+ *
+ * @return ElggMenuItem or NULL on error
+ */
+ public static function factory($options) {
+ if (!isset($options['name']) || !isset($options['text'])) {
+ return NULL;
+ }
+ if (!isset($options['href'])) {
+ $options['href'] = '';
+ }
+
+ $item = new ElggMenuItem($options['name'], $options['text'], $options['href']);
+ unset($options['name']);
+ unset($options['text']);
+ unset($options['href']);
+
+ // special catch in case someone uses context rather than contexts
+ if (isset($options['context'])) {
+ $options['contexts'] = $options['context'];
+ unset($options['context']);
+ }
+
+ // make sure contexts is set correctly
+ if (isset($options['contexts'])) {
+ $item->setContext($options['contexts']);
+ unset($options['contexts']);
+ }
+
+ if (isset($options['link_class'])) {
+ $item->setLinkClass($options['link_class']);
+ unset($options['link_class']);
+ }
+
+ if (isset($options['item_class'])) {
+ $item->setItemClass($options['item_class']);
+ unset($options['item_class']);
+ }
+
+ if (isset($options['data']) && is_array($options['data'])) {
+ $item->setData($options['data']);
+ unset($options['data']);
+ }
+
+ foreach ($options as $key => $value) {
+ if (isset($item->data[$key])) {
+ $item->data[$key] = $value;
+ } else {
+ $item->$key = $value;
+ }
+ }
+
+ return $item;
+ }
+
+ /**
+ * Set a data key/value pair or a set of key/value pairs
+ *
+ * This method allows storage of arbitrary data with this menu item. The
+ * data can be used for sorting, custom rendering, or any other use.
+ *
+ * @param mixed $key String key or an associative array of key/value pairs
+ * @param mixed $value The value if $key is a string
+ * @return void
+ */
+ public function setData($key, $value = null) {
+ if (is_array($key)) {
+ $this->data += $key;
+ } else {
+ $this->data[$key] = $value;
+ }
+ }
+
+ /**
+ * Get stored data
+ *
+ * @param string $key The key for the requested key/value pair
+ * @return mixed
+ */
+ public function getData($key) {
+ if (isset($this->data[$key])) {
+ return $this->data[$key];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Set the identifier of the menu item
+ *
+ * @param string $name Unique identifier
+ * @return void
+ */
+ public function setName($name) {
+ $this->data['name'] = $name;
+ }
+
+ /**
+ * Get the identifier of the menu item
+ *
+ * @return string
+ */
+ public function getName() {
+ return $this->data['name'];
+ }
+
+ /**
+ * Set the display text of the menu item
+ *
+ * @param string $text The display text
+ * @return void
+ */
+ public function setText($text) {
+ $this->text = $text;
+ }
+
+ /**
+ * Get the display text of the menu item
+ *
+ * @return string
+ */
+ public function getText() {
+ return $this->text;
+ }
+
+ /**
+ * Set the URL of the menu item
+ *
+ * @param string $href URL or false if not a link
+ * @return void
+ */
+ public function setHref($href) {
+ $this->href = $href;
+ }
+
+ /**
+ * Get the URL of the menu item
+ *
+ * @return string
+ */
+ public function getHref() {
+ return $this->href;
+ }
+
+ /**
+ * Set the contexts that this menu item is available for
+ *
+ * @param array $contexts An array of context strings
+ * @return void
+ */
+ public function setContext($contexts) {
+ if (is_string($contexts)) {
+ $contexts = array($contexts);
+ }
+ $this->data['contexts'] = $contexts;
+ }
+
+ /**
+ * Get an array of context strings
+ *
+ * @return array
+ */
+ public function getContext() {
+ return $this->data['contexts'];
+ }
+
+ /**
+ * Should this menu item be used given the current context
+ *
+ * @param string $context A context string (default is empty string for
+ * current context stack).
+ * @return bool
+ */
+ public function inContext($context = '') {
+ if ($context) {
+ return in_array($context, $this->data['contexts']);
+ }
+
+ if (in_array('all', $this->data['contexts'])) {
+ return true;
+ }
+
+ foreach ($this->data['contexts'] as $context) {
+ if (elgg_in_context($context)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Set the selected flag
+ *
+ * @param bool $state Selected state (default is true)
+ * @return void
+ */
+ public function setSelected($state = true) {
+ $this->data['selected'] = $state;
+ }
+
+ /**
+ * Get selected state
+ *
+ * @return bool
+ */
+ public function getSelected() {
+ return $this->data['selected'];
+ }
+
+ /**
+ * Set the tool tip text
+ *
+ * @param string $text The text of the tool tip
+ * @return void
+ */
+ public function setTooltip($text) {
+ $this->title = $text;
+ }
+
+ /**
+ * Get the tool tip text
+ *
+ * @return string
+ */
+ public function getTooltip() {
+ return $this->title;
+ }
+
+ /**
+ * Set the confirm text shown when link is clicked
+ *
+ * @param string $text The text to show
+ * @return void
+ */
+ public function setConfirmText($text) {
+ $this->confirm = $text;
+ }
+
+ /**
+ * Get the confirm text
+ *
+ * @return string
+ */
+ public function getConfirmText() {
+ return $this->confirm;
+ }
+
+ /**
+ * Set the anchor class
+ *
+ * @param mixed $class An array of class names, or a single string class name.
+ * @return void
+ */
+ public function setLinkClass($class) {
+ if (!is_array($class)) {
+ $this->data['linkClass'] = array($class);
+ } else {
+ $this->data['linkClass'] = $class;
+ }
+ }
+
+ /**
+ * Get the anchor classes as text
+ *
+ * @return string
+ */
+ public function getLinkClass() {
+ return implode(' ', $this->data['linkClass']);
+ }
+
+ /**
+ * Add a link class
+ *
+ * @param mixed $class An array of class names, or a single string class name.
+ * @return void
+ */
+ public function addLinkClass($class) {
+ if (!is_array($class)) {
+ $this->data['linkClass'][] = $class;
+ } else {
+ $this->data['linkClass'] += $class;
+ }
+ }
+
+ /**
+ * Set the li classes
+ *
+ * @param mixed $class An array of class names, or a single string class name.
+ * @return void
+ */
+ public function setItemClass($class) {
+ if (!is_array($class)) {
+ $this->data['itemClass'] = array($class);
+ } else {
+ $this->data['itemClass'] = $class;
+ }
+ }
+
+ /**
+ * Get the li classes as text
+ *
+ * @return string
+ */
+ public function getItemClass() {
+ // allow people to specify name with underscores and colons
+ $name = strtolower($this->getName());
+ $name = str_replace('_', '-', $name);
+ $name = str_replace(':', '-', $name);
+ $name = str_replace(' ', '-', $name);
+
+ $class = implode(' ', $this->data['itemClass']);
+ if ($class) {
+ return "elgg-menu-item-$name $class";
+ } else {
+ return "elgg-menu-item-$name";
+ }
+ }
+
+ /**
+ * Set the priority of the menu item
+ *
+ * @param int $priority The smaller numbers mean higher priority (1 before 100)
+ * @return void
+ * @deprecated
+ */
+ public function setWeight($priority) {
+ $this->data['priority'] = $priority;
+ }
+
+ /**
+ * Get the priority of the menu item
+ *
+ * @return int
+ * @deprecated
+ */
+ public function getWeight() {
+ return $this->data['priority'];
+ }
+
+ /**
+ * Set the priority of the menu item
+ *
+ * @param int $priority The smaller numbers mean higher priority (1 before 100)
+ * @return void
+ */
+ public function setPriority($priority) {
+ $this->data['priority'] = $priority;
+ }
+
+ /**
+ * Get the priority of the menu item
+ *
+ * @return int
+ */
+ public function getPriority() {
+ return $this->data['priority'];
+ }
+
+ /**
+ * Set the section identifier
+ *
+ * @param string $section The identifier of the section
+ * @return void
+ */
+ public function setSection($section) {
+ $this->data['section'] = $section;
+ }
+
+ /**
+ * Get the section identifier
+ *
+ * @return string
+ */
+ public function getSection() {
+ return $this->data['section'];
+ }
+
+ /**
+ * Set the parent identifier
+ *
+ * @param string $name The identifier of the parent ElggMenuItem
+ * @return void
+ */
+ public function setParentName($name) {
+ $this->data['parent_name'] = $name;
+ }
+
+ /**
+ * Get the parent identifier
+ *
+ * @return string
+ */
+ public function getParentName() {
+ return $this->data['parent_name'];
+ }
+
+ /**
+ * Set the parent menu item
+ *
+ * @param ElggMenuItem $parent The parent of this menu item
+ * @return void
+ */
+ public function setParent($parent) {
+ $this->data['parent'] = $parent;
+ }
+
+ /**
+ * Get the parent menu item
+ *
+ * @return ElggMenuItem or null
+ */
+ public function getParent() {
+ return $this->data['parent'];
+ }
+
+ /**
+ * Add a child menu item
+ *
+ * @param ElggMenuItem $item A child menu item
+ * @return void
+ */
+ public function addChild($item) {
+ $this->data['children'][] = $item;
+ }
+
+ /**
+ * Set the menu item's children
+ *
+ * @param array $children Array of ElggMenuItems
+ * @return void
+ */
+ public function setChildren($children) {
+ $this->data['children'] = $children;
+ }
+
+ /**
+ * Get the children menu items
+ *
+ * @return array
+ */
+ public function getChildren() {
+ return $this->data['children'];
+ }
+
+ /**
+ * Sort the children
+ *
+ * @param string $sortFunction A function that is passed to usort()
+ * @return void
+ */
+ public function sortChildren($sortFunction) {
+ foreach ($this->data['children'] as $key => $node) {
+ $this->data['children'][$key]->data['original_order'] = $key;
+ }
+ usort($this->data['children'], $sortFunction);
+ }
+
+ /**
+ * Get the menu item content (usually a link)
+ *
+ * @param array $vars Options to pass to output/url if a link
+ * @return string
+ * @todo View code in a model. How do we feel about that?
+ */
+ public function getContent(array $vars = array()) {
+
+ if ($this->href === false) {
+ return $this->text;
+ }
+
+ $defaults = get_object_vars($this);
+ unset($defaults['data']);
+
+ $vars += $defaults;
+
+ if ($this->data['linkClass']) {
+ if (isset($vars['class'])) {
+ $vars['class'] = $vars['class'] . ' ' . $this->getLinkClass();
+ } else {
+ $vars['class'] = $this->getLinkClass();
+ }
+ }
+
+ if (!isset($vars['rel']) && !isset($vars['is_trusted'])) {
+ $vars['is_trusted'] = true;
+ }
+
+ if ($this->confirm) {
+ $vars['confirm'] = $this->confirm;
+ return elgg_view('output/confirmlink', $vars);
+ } else {
+ unset($vars['confirm']);
+ }
+
+ return elgg_view('output/url', $vars);
+ }
+}
diff --git a/engine/classes/ElggMetadata.php b/engine/classes/ElggMetadata.php
new file mode 100644
index 000000000..7f45dc3ea
--- /dev/null
+++ b/engine/classes/ElggMetadata.php
@@ -0,0 +1,154 @@
+<?php
+
+/**
+ * ElggMetadata
+ * This class describes metadata that can be attached to ElggEntities.
+ *
+ * @package Elgg.Core
+ * @subpackage Metadata
+ */
+class ElggMetadata extends ElggExtender {
+
+ /**
+ * (non-PHPdoc)
+ *
+ * @see ElggData::initializeAttributes()
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = "metadata";
+ }
+
+ /**
+ * Construct a metadata object
+ *
+ * @param mixed $id ID of metadata or a database row as stdClass object
+ */
+ function __construct($id = null) {
+ $this->initializeAttributes();
+
+ if (!empty($id)) {
+ // Create from db row
+ if ($id instanceof stdClass) {
+ $metadata = $id;
+
+ $objarray = (array) $metadata;
+ foreach ($objarray as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ } else {
+ // get an ElggMetadata object and copy its attributes
+ $metadata = elgg_get_metadata_from_id($id);
+ $this->attributes = $metadata->attributes;
+ }
+ }
+ }
+
+ /**
+ * Determines whether or not the user can edit this piece of metadata
+ *
+ * @param int $user_guid The GUID of the user (defaults to currently logged in user)
+ *
+ * @return bool Depending on permissions
+ */
+ function canEdit($user_guid = 0) {
+ if ($entity = get_entity($this->get('entity_guid'))) {
+ return $entity->canEditMetadata($this, $user_guid);
+ }
+ return false;
+ }
+
+ /**
+ * Save metadata object
+ *
+ * @return int|bool the metadata object id or true if updated
+ *
+ * @throws IOException
+ */
+ function save() {
+ if ($this->id > 0) {
+ return update_metadata($this->id, $this->name, $this->value,
+ $this->value_type, $this->owner_guid, $this->access_id);
+ } else {
+ $this->id = create_metadata($this->entity_guid, $this->name, $this->value,
+ $this->value_type, $this->owner_guid, $this->access_id);
+
+ if (!$this->id) {
+ throw new IOException(elgg_echo('IOException:UnableToSaveNew', array(get_class())));
+ }
+ return $this->id;
+ }
+ }
+
+ /**
+ * Delete the metadata
+ *
+ * @return bool
+ */
+ function delete() {
+ $success = elgg_delete_metastring_based_object_by_id($this->id, 'metadata');
+ if ($success) {
+ // we mark unknown here because this deletes only one value
+ // under this name, and there may be others remaining.
+ elgg_get_metadata_cache()->markUnknown($this->entity_guid, $this->name);
+ }
+ return $success;
+ }
+
+ /**
+ * Disable the metadata
+ *
+ * @return bool
+ * @since 1.8
+ */
+ function disable() {
+ $success = elgg_set_metastring_based_object_enabled_by_id($this->id, 'no', 'metadata');
+ if ($success) {
+ // we mark unknown here because this disables only one value
+ // under this name, and there may be others remaining.
+ elgg_get_metadata_cache()->markUnknown($this->entity_guid, $this->name);
+ }
+ return $success;
+ }
+
+ /**
+ * Enable the metadata
+ *
+ * @return bool
+ * @since 1.8
+ */
+ function enable() {
+ $success = elgg_set_metastring_based_object_enabled_by_id($this->id, 'yes', 'metadata');
+ if ($success) {
+ elgg_get_metadata_cache()->markUnknown($this->entity_guid, $this->name);
+ }
+ return $success;
+ }
+
+ /**
+ * Get a url for this item of metadata.
+ *
+ * @return string
+ */
+ public function getURL() {
+ return get_metadata_url($this->id);
+ }
+
+ // SYSTEM LOG INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * For a given ID, return the object associated with it.
+ * This is used by the river functionality primarily.
+ * This is useful for checking access permissions etc on objects.
+ *
+ * @param int $id Metadata ID
+ *
+ * @return ElggMetadata
+ */
+ public function getObjectFromID($id) {
+ return elgg_get_metadata_from_id($id);
+ }
+}
diff --git a/engine/classes/ElggObject.php b/engine/classes/ElggObject.php
new file mode 100644
index 000000000..6263f84f6
--- /dev/null
+++ b/engine/classes/ElggObject.php
@@ -0,0 +1,215 @@
+<?php
+/**
+ * Elgg Object
+ *
+ * Elgg objects are the most common means of storing information in the database.
+ * They are a child class of ElggEntity, so receive all the benefits of the Entities,
+ * but also include a title and description field.
+ *
+ * An ElggObject represents a row from the objects_entity table, as well
+ * as the related row in the entities table as represented by the parent
+ * ElggEntity object.
+ *
+ * @internal Title and description are stored in the objects_entity table.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Object
+ *
+ * @property string $title The title, name, or summary of this object
+ * @property string $description The body, description, or content of the object
+ * @property array $tags Array of tags that describe the object
+ */
+class ElggObject extends ElggEntity {
+
+ /**
+ * Initialise the attributes array to include the type,
+ * title, and description.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = "object";
+ $this->attributes['title'] = NULL;
+ $this->attributes['description'] = NULL;
+ $this->attributes['tables_split'] = 2;
+ }
+
+ /**
+ * Load or create a new ElggObject.
+ *
+ * If no arguments are passed, create a new entity.
+ *
+ * If an argument is passed, attempt to load a full ElggObject entity.
+ * Arguments can be:
+ * - The GUID of an object entity.
+ * - A DB result object from the entities table with a guid property
+ *
+ * @param mixed $guid If an int, load that GUID. If a db row, then will attempt to
+ * load the rest of the data.
+ *
+ * @throws IOException If passed an incorrect guid
+ * @throws InvalidParameterException If passed an Elgg* Entity that isn't an ElggObject
+ */
+ function __construct($guid = null) {
+ $this->initializeAttributes();
+
+ // compatibility for 1.7 api.
+ $this->initialise_attributes(false);
+
+ if (!empty($guid)) {
+ // Is $guid is a DB row from the entity table
+ if ($guid instanceof stdClass) {
+ // Load the rest
+ if (!$this->load($guid)) {
+ $msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
+ throw new IOException($msg);
+ }
+
+ // Is $guid is an ElggObject? Use a copy constructor
+ } else if ($guid instanceof ElggObject) {
+ elgg_deprecated_notice('This type of usage of the ElggObject constructor was deprecated. Please use the clone method.', 1.7);
+
+ foreach ($guid->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+
+ // Is this is an ElggEntity but not an ElggObject = ERROR!
+ } else if ($guid instanceof ElggEntity) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggObject'));
+
+ // Is it a GUID
+ } else if (is_numeric($guid)) {
+ if (!$this->load($guid)) {
+ throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
+ }
+ } else {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnrecognisedValue'));
+ }
+ }
+ }
+
+ /**
+ * Loads the full ElggObject when given a guid.
+ *
+ * @param mixed $guid GUID of an ElggObject or the stdClass object from entities table
+ *
+ * @return bool
+ * @throws InvalidClassException
+ */
+ protected function load($guid) {
+ $attr_loader = new ElggAttributeLoader(get_class(), 'object', $this->attributes);
+ $attr_loader->requires_access_control = !($this instanceof ElggPlugin);
+ $attr_loader->secondary_loader = 'get_object_entity_as_row';
+
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
+ }
+
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ cache_entity($this);
+
+ return true;
+ }
+
+ /**
+ * Saves object-specific attributes.
+ *
+ * @internal Object attributes are saved in the objects_entity table.
+ *
+ * @return bool
+ */
+ public function save() {
+ // Save ElggEntity attributes
+ if (!parent::save()) {
+ return false;
+ }
+
+ // Save ElggObject-specific attributes
+ return create_object_entity($this->get('guid'), $this->get('title'),
+ $this->get('description'));
+ }
+
+ /**
+ * Return sites that this object is a member of
+ *
+ * Site membership is determined by relationships and not site_guid.d
+ *
+ * @todo This should be moved to ElggEntity
+ * @todo Unimplemented
+ *
+ * @param string $subtype Optionally, the subtype of result we want to limit to
+ * @param int $limit The number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return array|false
+ */
+ function getSites($subtype = "", $limit = 10, $offset = 0) {
+ return get_site_objects($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Add this object to a site
+ *
+ * @param int $site_guid The guid of the site to add it to
+ *
+ * @return bool
+ */
+ function addToSite($site_guid) {
+ return add_site_object($this->getGUID(), $site_guid);
+ }
+
+ /*
+ * EXPORTABLE INTERFACE
+ */
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array_merge(parent::getExportableValues(), array(
+ 'title',
+ 'description',
+ ));
+ }
+
+ /**
+ * Can a user comment on this object?
+ *
+ * @see ElggEntity::canComment()
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ * @return bool
+ * @since 1.8.0
+ */
+ public function canComment($user_guid = 0) {
+ $result = parent::canComment($user_guid);
+ if ($result !== null) {
+ return $result;
+ }
+
+ if ($user_guid == 0) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ }
+
+ // must be logged in to comment
+ if (!$user_guid) {
+ return false;
+ }
+
+ // must be member of group
+ if (elgg_instanceof($this->getContainerEntity(), 'group')) {
+ if (!$this->getContainerEntity()->canWriteToContainer($user_guid)) {
+ return false;
+ }
+ }
+
+ // no checks on read access since a user cannot see entities outside his access
+ return true;
+ }
+}
diff --git a/engine/classes/ElggPAM.php b/engine/classes/ElggPAM.php
new file mode 100644
index 000000000..f07095fc1
--- /dev/null
+++ b/engine/classes/ElggPAM.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * ElggPAM Pluggable Authentication Module
+ *
+ * @package Elgg.Core
+ * @subpackage Authentication
+ */
+class ElggPAM {
+ /**
+ * @var string PAM policy type: user, api or plugin-defined policies
+ */
+ protected $policy;
+
+ /**
+ * @var array Failure mesages
+ */
+ protected $messages;
+
+ /**
+ * ElggPAM constructor
+ *
+ * @param string $policy PAM policy type: user, api, or plugin-defined policies
+ */
+ public function __construct($policy) {
+ $this->policy = $policy;
+ $this->messages = array('sufficient' => array(), 'required' => array());
+ }
+
+ /**
+ * Authenticate a set of credentials against a policy
+ * This function will process all registered PAM handlers or stop when the first
+ * handler fails. A handler fails by either returning false or throwing an
+ * exception. The advantage of throwing an exception is that it returns a message
+ * that can be passed to the user. The processing order of the handlers is
+ * determined by the order that they were registered.
+ *
+ * If $credentials are provided, the PAM handler should authenticate using the
+ * provided credentials. If not, then credentials should be prompted for or
+ * otherwise retrieved (eg from the HTTP header or $_SESSION).
+ *
+ * @param array $credentials Credentials array dependant on policy type
+ * @return bool
+ */
+ public function authenticate($credentials = array()) {
+ global $_PAM_HANDLERS;
+
+ if (!isset($_PAM_HANDLERS[$this->policy]) ||
+ !is_array($_PAM_HANDLERS[$this->policy])) {
+ return false;
+ }
+
+ $authenticated = false;
+
+ foreach ($_PAM_HANDLERS[$this->policy] as $k => $v) {
+ $handler = $v->handler;
+ if (!is_callable($handler)) {
+ continue;
+ }
+ /* @var callable $handler */
+
+ $importance = $v->importance;
+
+ try {
+ // Execute the handler
+ // @todo don't assume $handler is a global function
+ $result = call_user_func($handler, $credentials);
+ if ($result) {
+ $authenticated = true;
+ } elseif ($result === false) {
+ if ($importance == 'required') {
+ $this->messages['required'][] = "$handler:failed";
+ return false;
+ } else {
+ $this->messages['sufficient'][] = "$handler:failed";
+ }
+ }
+ } catch (Exception $e) {
+ if ($importance == 'required') {
+ $this->messages['required'][] = $e->getMessage();
+ return false;
+ } else {
+ $this->messages['sufficient'][] = $e->getMessage();
+ }
+ }
+ }
+
+ return $authenticated;
+ }
+
+ /**
+ * Get a failure message to display to user
+ *
+ * @return string
+ */
+ public function getFailureMessage() {
+ $message = elgg_echo('auth:nopams');
+ if (!empty($this->messages['required'])) {
+ $message = $this->messages['required'][0];
+ } elseif (!empty($this->messages['sufficient'])) {
+ $message = $this->messages['sufficient'][0];
+ }
+
+ return elgg_trigger_plugin_hook('fail', 'auth', $this->messages, $message);
+ }
+}
diff --git a/engine/classes/ElggPlugin.php b/engine/classes/ElggPlugin.php
new file mode 100644
index 000000000..8f71b79a8
--- /dev/null
+++ b/engine/classes/ElggPlugin.php
@@ -0,0 +1,1005 @@
+<?php
+/**
+ * Stores site-side plugin settings as private data.
+ *
+ * This class is currently a stub, allowing a plugin to
+ * save settings in an object's private settings for each site.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
+ */
+class ElggPlugin extends ElggObject {
+ private $package;
+ private $manifest;
+
+ private $path;
+ private $pluginID;
+ private $errorMsg = '';
+
+ /**
+ * Set subtype to 'plugin'
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['subtype'] = "plugin";
+
+ // plugins must be public.
+ $this->access_id = ACCESS_PUBLIC;
+ }
+
+ /**
+ * Loads the plugin by GUID or path.
+ *
+ * @warning Unlike other ElggEntity objects, you cannot null instantiate
+ * ElggPlugin. You must point it to an actual plugin GUID or location.
+ *
+ * @param mixed $plugin The GUID of the ElggPlugin object or the path of the plugin to load.
+ *
+ * @throws PluginException
+ */
+ public function __construct($plugin) {
+ if (!$plugin) {
+ throw new PluginException(elgg_echo('PluginException:NullInstantiated'));
+ }
+
+ // ElggEntity can be instantiated with a guid or an object.
+ // @todo plugins w/id 12345
+ if (is_numeric($plugin) || is_object($plugin)) {
+ parent::__construct($plugin);
+ $this->path = elgg_get_plugins_path() . $this->getID();
+ } else {
+ $plugin_path = elgg_get_plugins_path();
+
+ // not a full path, so assume an id
+ // use the default path
+ if (strpos($plugin, $plugin_path) !== 0) {
+ $plugin = $plugin_path . $plugin;
+ }
+
+ // path checking is done in the package
+ $plugin = sanitise_filepath($plugin);
+ $this->path = $plugin;
+ $path_parts = explode('/', rtrim($plugin, '/'));
+ $plugin_id = array_pop($path_parts);
+ $this->pluginID = $plugin_id;
+
+ // check if we're loading an existing plugin
+ $existing_plugin = elgg_get_plugin_from_id($this->pluginID);
+ $existing_guid = null;
+
+ if ($existing_plugin) {
+ $existing_guid = $existing_plugin->guid;
+ }
+
+ // load the rest of the plugin
+ parent::__construct($existing_guid);
+ }
+
+ _elgg_cache_plugin_by_id($this);
+ }
+
+ /**
+ * Save the plugin object. Make sure required values exist.
+ *
+ * @see ElggObject::save()
+ * @return bool
+ */
+ public function save() {
+ // own by the current site so users can be deleted without affecting plugins
+ $site = get_config('site');
+ $this->attributes['site_guid'] = $site->guid;
+ $this->attributes['owner_guid'] = $site->guid;
+ $this->attributes['container_guid'] = $site->guid;
+ $this->attributes['title'] = $this->pluginID;
+
+ if (parent::save()) {
+ // make sure we have a priority
+ $priority = $this->getPriority();
+ if ($priority === FALSE || $priority === NULL) {
+ return $this->setPriority('last');
+ }
+ } else {
+ return false;
+ }
+ }
+
+
+ // Plugin ID and path
+
+ /**
+ * Returns the ID (dir name) of this plugin
+ *
+ * @return string
+ */
+ public function getID() {
+ return $this->title;
+ }
+
+ /**
+ * Returns the manifest's name if available, otherwise the ID.
+ *
+ * @return string
+ * @since 1.8.1
+ */
+ public function getFriendlyName() {
+ $manifest = $this->getManifest();
+ if ($manifest) {
+ return $manifest->getName();
+ }
+
+ return $this->getID();
+ }
+
+ /**
+ * Returns the plugin's full path with trailing slash.
+ *
+ * @return string
+ */
+ public function getPath() {
+ return sanitise_filepath($this->path);
+ }
+
+ /**
+ * Sets the location of this plugin.
+ *
+ * @param path $id The path to the plugin's dir.
+ * @return bool
+ */
+ public function setID($id) {
+ return $this->attributes['title'] = $id;
+ }
+
+ /**
+ * Returns an array of available markdown files for this plugin
+ *
+ * @return array
+ */
+ public function getAvailableTextFiles() {
+ $filenames = $this->getPackage()->getTextFilenames();
+
+ $files = array();
+ foreach ($filenames as $filename) {
+ if ($this->canReadFile($filename)) {
+ $files[$filename] = "$this->path/$filename";
+ }
+ }
+
+ return $files;
+ }
+
+ // Load Priority
+
+ /**
+ * Gets the plugin's load priority.
+ *
+ * @return int
+ */
+ public function getPriority() {
+ $name = elgg_namespace_plugin_private_setting('internal', 'priority');
+ return $this->$name;
+ }
+
+ /**
+ * Sets the priority of the plugin
+ *
+ * @param mixed $priority The priority to set. One of +1, -1, first, last, or a number.
+ * If given a number, this will displace all plugins at that number
+ * and set their priorities +1
+ * @param mixed $site_guid Optional site GUID.
+ * @return bool
+ */
+ public function setPriority($priority, $site_guid = null) {
+ if (!$this->guid) {
+ return false;
+ }
+
+ $db_prefix = get_config('dbprefix');
+ $name = elgg_namespace_plugin_private_setting('internal', 'priority');
+ // if no priority assume a priority of 1
+ $old_priority = (int) $this->getPriority();
+ $old_priority = (!$old_priority) ? 1 : $old_priority;
+ $max_priority = elgg_get_max_plugin_priority();
+
+ // can't use switch here because it's not strict and
+ // php evaluates +1 == 1
+ if ($priority === '+1') {
+ $priority = $old_priority + 1;
+ } elseif ($priority === '-1') {
+ $priority = $old_priority - 1;
+ } elseif ($priority === 'first') {
+ $priority = 1;
+ } elseif ($priority === 'last') {
+ $priority = $max_priority;
+ }
+
+ // should be a number by now
+ if ($priority > 0) {
+ if (!is_numeric($priority)) {
+ return false;
+ }
+
+ // there's nothing above the max.
+ if ($priority > $max_priority) {
+ $priority = $max_priority;
+ }
+
+ // there's nothing below 1.
+ if ($priority < 1) {
+ $priority = 1;
+ }
+
+ if ($priority > $old_priority) {
+ $op = '-';
+ $where = "CAST(value as unsigned) BETWEEN $old_priority AND $priority";
+ } else {
+ $op = '+';
+ $where = "CAST(value as unsigned) BETWEEN $priority AND $old_priority";
+ }
+
+ // displace the ones affected by this change
+ $q = "UPDATE {$db_prefix}private_settings
+ SET value = CAST(value as unsigned) $op 1
+ WHERE entity_guid != $this->guid
+ AND name = '$name'
+ AND $where";
+
+ if (!update_data($q)) {
+ return false;
+ }
+
+ // set this priority
+ if ($this->set($name, $priority)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ return false;
+ }
+
+
+ // Plugin settings
+
+ /**
+ * Returns a plugin setting
+ *
+ * @param string $name The setting name
+ * @return mixed
+ */
+ public function getSetting($name) {
+ return $this->$name;
+ }
+
+ /**
+ * Returns an array of all settings saved for this plugin.
+ *
+ * @note Unlike user settings, plugin settings are not namespaced.
+ *
+ * @return array An array of key/value pairs.
+ */
+ public function getAllSettings() {
+ if (!$this->guid) {
+ return false;
+ }
+
+ $db_prefix = elgg_get_config('dbprefix');
+ // need to remove all namespaced private settings.
+ $us_prefix = elgg_namespace_plugin_private_setting('user_setting', '', $this->getID());
+ $is_prefix = elgg_namespace_plugin_private_setting('internal', '', $this->getID());
+
+ // Get private settings for user
+ $q = "SELECT * FROM {$db_prefix}private_settings
+ WHERE entity_guid = $this->guid
+ AND name NOT LIKE '$us_prefix%'
+ AND name NOT LIKE '$is_prefix%'";
+
+ $private_settings = get_data($q);
+
+ if ($private_settings) {
+ $return = array();
+
+ foreach ($private_settings as $setting) {
+ $return[$setting->name] = $setting->value;
+ }
+
+ return $return;
+ }
+
+ return false;
+ }
+
+ /**
+ * Set a plugin setting for the plugin
+ *
+ * @todo This will only work once the plugin has a GUID.
+ *
+ * @param string $name The name to set
+ * @param string $value The value to set
+ *
+ * @return bool
+ */
+ public function setSetting($name, $value) {
+ if (!$this->guid) {
+ return false;
+ }
+
+ return $this->set($name, $value);
+ }
+
+ /**
+ * Removes a plugin setting name and value.
+ *
+ * @param string $name The setting name to remove
+ *
+ * @return bool
+ */
+ public function unsetSetting($name) {
+ return remove_private_setting($this->guid, $name);
+ }
+
+ /**
+ * Removes all settings for this plugin.
+ *
+ * @todo Should be a better way to do this without dropping to raw SQL.
+ * @todo If we could namespace the plugin settings this would be cleaner.
+ * @return bool
+ */
+ public function unsetAllSettings() {
+ $db_prefix = get_config('dbprefix');
+ $ps_prefix = elgg_namespace_plugin_private_setting('setting', '');
+
+ $q = "DELETE FROM {$db_prefix}private_settings
+ WHERE entity_guid = $this->guid
+ AND name NOT LIKE '$ps_prefix%'";
+
+ return delete_data($q);
+ }
+
+
+ // User settings
+
+ /**
+ * Returns a user's setting for this plugin
+ *
+ * @param string $name The setting name
+ * @param int $user_guid The user GUID
+ *
+ * @return mixed The setting string value or false
+ */
+ public function getUserSetting($name, $user_guid = null) {
+ $user_guid = (int)$user_guid;
+
+ if ($user_guid) {
+ $user = get_entity($user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ if (!($user instanceof ElggUser)) {
+ return false;
+ }
+
+ $name = elgg_namespace_plugin_private_setting('user_setting', $name, $this->getID());
+ return get_private_setting($user->guid, $name);
+ }
+
+ /**
+ * Returns an array of all user settings saved for this plugin for the user.
+ *
+ * @note Plugin settings are saved with a prefix. This removes that prefix.
+ *
+ * @param int $user_guid The user GUID. Defaults to logged in.
+ * @return array An array of key/value pairs.
+ */
+ public function getAllUserSettings($user_guid = null) {
+ $user_guid = (int)$user_guid;
+
+ if ($user_guid) {
+ $user = get_entity($user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ if (!($user instanceof ElggUser)) {
+ return false;
+ }
+
+ $db_prefix = elgg_get_config('dbprefix');
+ // send an empty name so we just get the first part of the namespace
+ $ps_prefix = elgg_namespace_plugin_private_setting('user_setting', '', $this->getID());
+ $ps_prefix_len = strlen($ps_prefix);
+
+ // Get private settings for user
+ $q = "SELECT * FROM {$db_prefix}private_settings
+ WHERE entity_guid = {$user->guid}
+ AND name LIKE '$ps_prefix%'";
+
+ $private_settings = get_data($q);
+
+ if ($private_settings) {
+ $return = array();
+
+ foreach ($private_settings as $setting) {
+ $name = substr($setting->name, $ps_prefix_len);
+ $value = $setting->value;
+
+ $return[$name] = $value;
+ }
+
+ return $return;
+ }
+
+ return false;
+ }
+
+ /**
+ * Sets a user setting for a plugin
+ *
+ * @param string $name The setting name
+ * @param string $value The setting value
+ * @param int $user_guid The user GUID
+ *
+ * @return mixed The new setting ID or false
+ */
+ public function setUserSetting($name, $value, $user_guid = null) {
+ $user_guid = (int)$user_guid;
+
+ if ($user_guid) {
+ $user = get_entity($user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ if (!($user instanceof ElggUser)) {
+ return false;
+ }
+
+ // Hook to validate setting
+ // note: this doesn't pass the namespaced name
+ $value = elgg_trigger_plugin_hook('usersetting', 'plugin', array(
+ 'user' => $user,
+ 'plugin' => $this,
+ 'plugin_id' => $this->getID(),
+ 'name' => $name,
+ 'value' => $value
+ ), $value);
+
+ // set the namespaced name.
+ $name = elgg_namespace_plugin_private_setting('user_setting', $name, $this->getID());
+
+ return set_private_setting($user->guid, $name, $value);
+ }
+
+
+ /**
+ * Removes a user setting name and value.
+ *
+ * @param string $name The user setting name
+ * @param int $user_guid The user GUID
+ * @return bool
+ */
+ public function unsetUserSetting($name, $user_guid = null) {
+ $user_guid = (int)$user_guid;
+
+ if ($user_guid) {
+ $user = get_entity($user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ if (!($user instanceof ElggUser)) {
+ return false;
+ }
+
+ // set the namespaced name.
+ $name = elgg_namespace_plugin_private_setting('user_setting', $name, $this->getID());
+
+ return remove_private_setting($user->guid, $name);
+ }
+
+ /**
+ * Removes all User Settings for this plugin
+ *
+ * Use {@link removeAllUsersSettings()} to remove all user
+ * settings for all users. (Note the plural 'Users'.)
+ *
+ * @param int $user_guid The user GUID to remove user settings.
+ * @return bool
+ */
+ public function unsetAllUserSettings($user_guid) {
+ $db_prefix = get_config('dbprefix');
+ $ps_prefix = elgg_namespace_plugin_private_setting('user_setting', '', $this->getID());
+
+ $q = "DELETE FROM {$db_prefix}private_settings
+ WHERE entity_guid = $user_guid
+ AND name LIKE '$ps_prefix%'";
+
+ return delete_data($q);
+ }
+
+ /**
+ * Removes this plugin's user settings for all users.
+ *
+ * Use {@link removeAllUserSettings()} if you just want to remove
+ * settings for a single user.
+ *
+ * @return bool
+ */
+ public function unsetAllUsersSettings() {
+ $db_prefix = get_config('dbprefix');
+ $ps_prefix = elgg_namespace_plugin_private_setting('user_setting', '', $this->getID());
+
+ $q = "DELETE FROM {$db_prefix}private_settings
+ WHERE name LIKE '$ps_prefix%'";
+
+ return delete_data($q);
+ }
+
+
+ // validation
+
+ /**
+ * Returns if the plugin is complete, meaning has all required files
+ * and Elgg can read them and they make sense.
+ *
+ * @todo bad name? This could be confused with isValid() from ElggPackage.
+ *
+ * @return bool
+ */
+ public function isValid() {
+ if (!$this->getID()) {
+ $this->errorMsg = elgg_echo('ElggPlugin:NoId', array($this->guid));
+ return false;
+ }
+
+ if (!$this->getPackage() instanceof ElggPluginPackage) {
+ $this->errorMsg = elgg_echo('ElggPlugin:NoPluginPackagePackage', array($this->getID(), $this->guid));
+ return false;
+ }
+
+ if (!$this->getPackage()->isValid()) {
+ $this->errorMsg = $this->getPackage()->getError();
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Is this plugin active?
+ *
+ * @param int $site_guid Optional site guid.
+ * @return bool
+ */
+ public function isActive($site_guid = null) {
+ if (!$this->guid) {
+ return false;
+ }
+
+ if ($site_guid) {
+ $site = get_entity($site_guid);
+ } else {
+ $site = get_config('site');
+ }
+
+ if (!($site instanceof ElggSite)) {
+ return false;
+ }
+
+ return check_entity_relationship($this->guid, 'active_plugin', $site->guid);
+ }
+
+ /**
+ * Checks if this plugin can be activated on the current
+ * Elgg installation.
+ *
+ * @param mixed $site_guid Optional site guid
+ * @return bool
+ */
+ public function canActivate($site_guid = null) {
+ if ($this->getPackage()) {
+ $result = $this->getPackage()->isValid() && $this->getPackage()->checkDependencies();
+ if (!$result) {
+ $this->errorMsg = $this->getPackage()->getError();
+ }
+
+ return $result;
+ }
+
+ return false;
+ }
+
+
+ // activating and deactivating
+
+ /**
+ * Actives the plugin for the current site.
+ *
+ * @param mixed $site_guid Optional site GUID.
+ * @return bool
+ */
+ public function activate($site_guid = null) {
+ if ($this->isActive($site_guid)) {
+ return false;
+ }
+
+ if (!$this->canActivate()) {
+ return false;
+ }
+
+ // set in the db, now perform tasks and emit events
+ if ($this->setStatus(true, $site_guid)) {
+ // emit an event. returning false will make this not be activated.
+ // we need to do this after it's been fully activated
+ // or the deactivate will be confused.
+ $params = array(
+ 'plugin_id' => $this->pluginID,
+ 'plugin_entity' => $this
+ );
+
+ $return = elgg_trigger_event('activate', 'plugin', $params);
+
+ // if there are any on_enable functions, start the plugin now and run them
+ // Note: this will not run re-run the init hooks!
+ if ($return) {
+ if ($this->canReadFile('activate.php')) {
+ $flags = ELGG_PLUGIN_INCLUDE_START | ELGG_PLUGIN_REGISTER_CLASSES
+ | ELGG_PLUGIN_REGISTER_LANGUAGES | ELGG_PLUGIN_REGISTER_VIEWS;
+
+ $this->start($flags);
+
+ $return = $this->includeFile('activate.php');
+ }
+ }
+
+ if ($return === false) {
+ $this->deactivate($site_guid);
+ }
+
+ return $return;
+ }
+
+ return false;
+ }
+
+ /**
+ * Deactivates the plugin.
+ *
+ * @param mixed $site_guid Optional site GUID.
+ * @return bool
+ */
+ public function deactivate($site_guid = null) {
+ if (!$this->isActive($site_guid)) {
+ return false;
+ }
+
+ // emit an event. returning false will cause this to not be deactivated.
+ $params = array(
+ 'plugin_id' => $this->pluginID,
+ 'plugin_entity' => $this
+ );
+
+ $return = elgg_trigger_event('deactivate', 'plugin', $params);
+
+ // run any deactivate code
+ if ($return) {
+ if ($this->canReadFile('deactivate.php')) {
+ $return = $this->includeFile('deactivate.php');
+ }
+ }
+
+ if ($return === false) {
+ return false;
+ } else {
+ return $this->setStatus(false, $site_guid);
+ }
+ }
+
+ /**
+ * Start the plugin.
+ *
+ * @param int $flags Start flags for the plugin. See the constants in lib/plugins.php for details.
+ * @return true
+ * @throws PluginException
+ */
+ public function start($flags) {
+ //if (!$this->canActivate()) {
+ // return false;
+ //}
+
+ // include classes
+ if ($flags & ELGG_PLUGIN_REGISTER_CLASSES) {
+ $this->registerClasses();
+ }
+
+ // include start file
+ if ($flags & ELGG_PLUGIN_INCLUDE_START) {
+ $this->includeFile('start.php');
+ }
+
+ // include views
+ if ($flags & ELGG_PLUGIN_REGISTER_VIEWS) {
+ $this->registerViews();
+ }
+
+ // include languages
+ if ($flags & ELGG_PLUGIN_REGISTER_LANGUAGES) {
+ $this->registerLanguages();
+ }
+
+ return true;
+ }
+
+
+ // start helpers
+
+ /**
+ * Includes one of the plugins files
+ *
+ * @param string $filename The name of the file
+ *
+ * @throws PluginException
+ * @return mixed The return value of the included file (or 1 if there is none)
+ */
+ protected function includeFile($filename) {
+ // This needs to be here to be backwards compatible for 1.0-1.7.
+ // They expect the global config object to be available in start.php.
+ if ($filename == 'start.php') {
+ global $CONFIG;
+ }
+
+ $filepath = "$this->path/$filename";
+
+ if (!$this->canReadFile($filename)) {
+ $msg = elgg_echo('ElggPlugin:Exception:CannotIncludeFile',
+ array($filename, $this->getID(), $this->guid, $this->path));
+ throw new PluginException($msg);
+ }
+
+ return include $filepath;
+ }
+
+ /**
+ * Checks whether a plugin file with the given name exists
+ *
+ * @param string $filename The name of the file
+ * @return bool
+ */
+ protected function canReadFile($filename) {
+ return is_readable($this->path . '/' . $filename);
+ }
+
+ /**
+ * Registers the plugin's views
+ *
+ * @throws PluginException
+ * @return true
+ */
+ protected function registerViews() {
+ $view_dir = "$this->path/views/";
+
+ // plugins don't have to have views.
+ if (!is_dir($view_dir)) {
+ return true;
+ }
+
+ // but if they do, they have to be readable
+ $handle = opendir($view_dir);
+ if (!$handle) {
+ $msg = elgg_echo('ElggPlugin:Exception:CannotRegisterViews',
+ array($this->getID(), $this->guid, $view_dir));
+ throw new PluginException($msg);
+ }
+
+ while (FALSE !== ($view_type = readdir($handle))) {
+ $view_type_dir = $view_dir . $view_type;
+
+ if ('.' !== substr($view_type, 0, 1) && is_dir($view_type_dir)) {
+ if (autoregister_views('', $view_type_dir, $view_dir, $view_type)) {
+ elgg_register_viewtype($view_type);
+ } else {
+ $msg = elgg_echo('ElggPlugin:Exception:CannotRegisterViews',
+ array($this->getID(), $view_type_dir));
+ throw new PluginException($msg);
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Registers the plugin's languages
+ *
+ * @throws PluginException
+ * @return true
+ */
+ protected function registerLanguages() {
+ $languages_path = "$this->path/languages";
+
+ // don't need to have classes
+ if (!is_dir($languages_path)) {
+ return true;
+ }
+
+ // but need to have working ones.
+ if (!register_translations($languages_path)) {
+ $msg = elgg_echo('ElggPlugin:Exception:CannotRegisterLanguages',
+ array($this->getID(), $this->guid, $languages_path));
+ throw new PluginException($msg);
+ }
+
+ return true;
+ }
+
+ /**
+ * Registers the plugin's classes
+ *
+ * @throws PluginException
+ * @return true
+ */
+ protected function registerClasses() {
+ $classes_path = "$this->path/classes";
+
+ // don't need to have classes
+ if (!is_dir($classes_path)) {
+ return true;
+ }
+
+ elgg_register_classes($classes_path);
+
+ return true;
+ }
+
+
+ // generic helpers and overrides
+
+ /**
+ * Get a value from private settings.
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ public function get($name) {
+ // rewrite for old and inaccurate plugin:setting
+ if (strstr($name, 'plugin:setting:')) {
+ $msg = 'Direct access of user settings is deprecated. Use ElggPlugin->getUserSetting()';
+ elgg_deprecated_notice($msg, 1.8);
+ $name = str_replace('plugin:setting:', '', $name);
+ $name = elgg_namespace_plugin_private_setting('user_setting', $name);
+ }
+
+ // See if its in our base attribute
+ if (array_key_exists($name, $this->attributes)) {
+ return $this->attributes[$name];
+ }
+
+ // No, so see if its in the private data store.
+ // get_private_setting() returns false if it doesn't exist
+ $meta = $this->getPrivateSetting($name);
+
+ if ($meta === false) {
+ // Can't find it, so return null
+ return NULL;
+ }
+
+ return $meta;
+ }
+
+ /**
+ * Save a value as private setting or attribute.
+ *
+ * Attributes include title and description.
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return bool
+ */
+ public function set($name, $value) {
+ if (array_key_exists($name, $this->attributes)) {
+ // Check that we're not trying to change the guid!
+ if ((array_key_exists('guid', $this->attributes)) && ($name == 'guid')) {
+ return false;
+ }
+
+ $this->attributes[$name] = $value;
+
+ return true;
+ } else {
+ // Hook to validate setting
+ $value = elgg_trigger_plugin_hook('setting', 'plugin', array(
+ 'plugin_id' => $this->pluginID,
+ 'plugin' => $this,
+ 'name' => $name,
+ 'value' => $value
+ ), $value);
+
+ return $this->setPrivateSetting($name, $value);
+ }
+ }
+
+ /**
+ * Sets the plugin to active or inactive for $site_guid.
+ *
+ * @param bool $active Set to active or inactive
+ * @param mixed $site_guid Int for specific site, null for current site.
+ *
+ * @return bool
+ */
+ private function setStatus($active, $site_guid = null) {
+ if (!$this->guid) {
+ return false;
+ }
+
+ if ($site_guid) {
+ $site = get_entity($site_guid);
+
+ if (!($site instanceof ElggSite)) {
+ return false;
+ }
+ } else {
+ $site = get_config('site');
+ }
+
+ if ($active) {
+ return add_entity_relationship($this->guid, 'active_plugin', $site->guid);
+ } else {
+ return remove_entity_relationship($this->guid, 'active_plugin', $site->guid);
+ }
+ }
+
+ /**
+ * Returns the last error message registered.
+ *
+ * @return string|null
+ */
+ public function getError() {
+ return $this->errorMsg;
+ }
+
+ /**
+ * Returns this plugin's ElggPluginManifest object
+ *
+ * @return ElggPluginManifest
+ */
+ public function getManifest() {
+ if ($this->manifest instanceof ElggPluginManifest) {
+ return $this->manifest;
+ }
+
+ try {
+ $this->manifest = $this->getPackage()->getManifest();
+ } catch (Exception $e) {
+ elgg_log("Failed to load manifest for plugin $this->guid. " . $e->getMessage(), 'WARNING');
+ $this->errorMsg = $e->getmessage();
+ }
+
+ return $this->manifest;
+ }
+
+ /**
+ * Returns this plugin's ElggPluginPackage object
+ *
+ * @return ElggPluginPackage
+ */
+ public function getPackage() {
+ if ($this->package instanceof ElggPluginPackage) {
+ return $this->package;
+ }
+
+ try {
+ $this->package = new ElggPluginPackage($this->path, false);
+ } catch (Exception $e) {
+ elgg_log("Failed to load package for $this->guid. " . $e->getMessage(), 'WARNING');
+ $this->errorMsg = $e->getmessage();
+ }
+
+ return $this->package;
+ }
+}
diff --git a/engine/classes/ElggPluginManifest.php b/engine/classes/ElggPluginManifest.php
new file mode 100644
index 000000000..6912c2b08
--- /dev/null
+++ b/engine/classes/ElggPluginManifest.php
@@ -0,0 +1,656 @@
+<?php
+/**
+ * Parses Elgg manifest.xml files.
+ *
+ * Normalizes the values from the ElggManifestParser object.
+ *
+ * This requires an ElggPluginManifestParser class implementation
+ * as $this->parser.
+ *
+ * To add new parser versions, name them ElggPluginManifestParserXX
+ * where XX is the version specified in the top-level <plugin_manifest>
+ * tag's XML namespace.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ * @since 1.8
+ */
+class ElggPluginManifest {
+
+ /**
+ * The parser object
+ */
+ protected $parser;
+
+ /**
+ * The root for plugin manifest namespaces.
+ * This is in the format http://www.elgg.org/plugin_manifest/<version>
+ */
+ protected $namespace_root = 'http://www.elgg.org/plugin_manifest/';
+
+ /**
+ * The expected structure of a plugins requires element
+ */
+ private $depsStructPlugin = array(
+ 'type' => '',
+ 'name' => '',
+ 'version' => '',
+ 'comparison' => 'ge'
+ );
+
+ /**
+ * The expected structure of a priority element
+ */
+ private $depsStructPriority = array(
+ 'type' => '',
+ 'priority' => '',
+ 'plugin' => ''
+ );
+
+ /*
+ * The expected structure of elgg_version and elgg_release requires element
+ */
+ private $depsStructElgg = array(
+ 'type' => '',
+ 'version' => '',
+ 'comparison' => 'ge'
+ );
+
+ /**
+ * The expected structure of a requires php_ini dependency element
+ */
+ private $depsStructPhpIni = array(
+ 'type' => '',
+ 'name' => '',
+ 'value' => '',
+ 'comparison' => '='
+ );
+
+ /**
+ * The expected structure of a requires php_extension dependency element
+ */
+ private $depsStructPhpExtension = array(
+ 'type' => '',
+ 'name' => '',
+ 'version' => '',
+ 'comparison' => '='
+ );
+
+ /**
+ * The expected structure of a conflicts depedency element
+ */
+ private $depsConflictsStruct = array(
+ 'type' => '',
+ 'name' => '',
+ 'version' => '',
+ 'comparison' => '='
+ );
+
+ /**
+ * The expected structure of a provides dependency element.
+ */
+ private $depsProvidesStruct = array(
+ 'type' => '',
+ 'name' => '',
+ 'version' => ''
+ );
+
+ /**
+ * The expected structure of a screenshot element
+ */
+ private $screenshotStruct = array(
+ 'description' => '',
+ 'path' => ''
+ );
+
+ /**
+ * The API version of the manifest.
+ *
+ * @var int
+ */
+ protected $apiVersion;
+
+ /**
+ * The optional plugin id this manifest belongs to.
+ *
+ * @var string
+ */
+ protected $pluginID;
+
+ /**
+ * Load a manifest file, XmlElement or path to manifest.xml file
+ *
+ * @param mixed $manifest A string, XmlElement, or path of a manifest file.
+ * @param string $plugin_id Optional ID of the owning plugin. Used to
+ * fill in some values automatically.
+ */
+ public function __construct($manifest, $plugin_id = null) {
+ if ($plugin_id) {
+ $this->pluginID = $plugin_id;
+ }
+
+ // see if we need to construct the xml object.
+ if ($manifest instanceof ElggXMLElement) {
+ $manifest_obj = $manifest;
+ } else {
+ if (substr(trim($manifest), 0, 1) == '<') {
+ // this is a string
+ $raw_xml = $manifest;
+ } elseif (is_file($manifest)) {
+ // this is a file
+ $raw_xml = file_get_contents($manifest);
+ }
+
+ $manifest_obj = xml_to_object($raw_xml);
+ }
+
+ if (!$manifest_obj) {
+ throw new PluginException(elgg_echo('PluginException:InvalidManifest',
+ array($this->getPluginID())));
+ }
+
+ // set manifest api version
+ if (isset($manifest_obj->attributes['xmlns'])) {
+ $namespace = $manifest_obj->attributes['xmlns'];
+ $version = str_replace($this->namespace_root, '', $namespace);
+ } else {
+ $version = 1.7;
+ }
+
+ $this->apiVersion = $version;
+
+ $parser_class_name = 'ElggPluginManifestParser' . str_replace('.', '', $this->apiVersion);
+
+ // @todo currently the autoloader freaks out if a class doesn't exist.
+ try {
+ $class_exists = class_exists($parser_class_name);
+ } catch (Exception $e) {
+ $class_exists = false;
+ }
+
+ if ($class_exists) {
+ $this->parser = new $parser_class_name($manifest_obj, $this);
+ } else {
+ throw new PluginException(elgg_echo('PluginException:NoAvailableParser',
+ array($this->apiVersion, $this->getPluginID())));
+ }
+
+ if (!$this->parser->parse()) {
+ throw new PluginException(elgg_echo('PluginException:ParserError',
+ array($this->apiVersion, $this->getPluginID())));
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns the API version in use.
+ *
+ * @return int
+ */
+ public function getApiVersion() {
+ return $this->apiVersion;
+ }
+
+ /**
+ * Returns the plugin ID.
+ *
+ * @return string
+ */
+ public function getPluginID() {
+ if ($this->pluginID) {
+ return $this->pluginID;
+ } else {
+ return elgg_echo('unknown');
+ }
+ }
+
+ /**
+ * Returns the manifest array.
+ *
+ * Used for backward compatibility. Specific
+ * methods should be called instead.
+ *
+ * @return array
+ */
+ public function getManifest() {
+ return $this->parser->getManifest();
+ }
+
+ /***************************************
+ * Parsed and Normalized Manifest Data *
+ ***************************************/
+
+ /**
+ * Returns the plugin name
+ *
+ * @return string
+ */
+ public function getName() {
+ $name = $this->parser->getAttribute('name');
+
+ if (!$name && $this->pluginID) {
+ $name = ucwords(str_replace('_', ' ', $this->pluginID));
+ }
+
+ return $name;
+ }
+
+
+ /**
+ * Return the description
+ *
+ * @return string
+ */
+ public function getDescription() {
+ return $this->parser->getAttribute('description');
+ }
+
+ /**
+ * Return the short description
+ *
+ * @return string
+ */
+ public function getBlurb() {
+ $blurb = $this->parser->getAttribute('blurb');
+
+ if (!$blurb) {
+ $blurb = elgg_get_excerpt($this->getDescription());
+ }
+
+ return $blurb;
+ }
+
+ /**
+ * Returns the license
+ *
+ * @return string
+ */
+ public function getLicense() {
+ // license vs licence. Use license.
+ $en_us = $this->parser->getAttribute('license');
+ if ($en_us) {
+ return $en_us;
+ } else {
+ return $this->parser->getAttribute('licence');
+ }
+ }
+
+ /**
+ * Returns the repository url
+ *
+ * @return string
+ */
+ public function getRepositoryURL() {
+ return $this->parser->getAttribute('repository');
+ }
+
+ /**
+ * Returns the bug tracker page
+ *
+ * @return string
+ */
+ public function getBugTrackerURL() {
+ return $this->parser->getAttribute('bugtracker');
+ }
+
+ /**
+ * Returns the donations page
+ *
+ * @return string
+ */
+ public function getDonationsPageURL() {
+ return $this->parser->getAttribute('donations');
+ }
+
+ /**
+ * Returns the version of the plugin.
+ *
+ * @return float
+ */
+ public function getVersion() {
+ return $this->parser->getAttribute('version');
+ }
+
+ /**
+ * Returns the plugin author.
+ *
+ * @return string
+ */
+ public function getAuthor() {
+ return $this->parser->getAttribute('author');
+ }
+
+ /**
+ * Return the copyright
+ *
+ * @return string
+ */
+ public function getCopyright() {
+ return $this->parser->getAttribute('copyright');
+ }
+
+ /**
+ * Return the website
+ *
+ * @return string
+ */
+ public function getWebsite() {
+ return $this->parser->getAttribute('website');
+ }
+
+ /**
+ * Return the categories listed for this plugin
+ *
+ * @return array
+ */
+ public function getCategories() {
+ $bundled_plugins = array('blog', 'bookmarks', 'categories',
+ 'custom_index', 'dashboard', 'developers', 'diagnostics',
+ 'embed', 'externalpages', 'file', 'garbagecollector',
+ 'groups', 'htmlawed', 'invitefriends', 'likes',
+ 'logbrowser', 'logrotate', 'members', 'messageboard',
+ 'messages', 'notifications', 'oauth_api', 'pages', 'profile',
+ 'reportedcontent', 'search', 'tagcloud', 'thewire', 'tinymce',
+ 'twitter', 'twitter_api', 'uservalidationbyemail', 'zaudio',
+ );
+
+ $cats = $this->parser->getAttribute('category');
+
+ if (!$cats) {
+ $cats = array();
+ }
+
+ if (in_array('bundled', $cats) && !in_array($this->getPluginID(), $bundled_plugins)) {
+ unset($cats[array_search('bundled', $cats)]);
+ }
+
+ return $cats;
+ }
+
+ /**
+ * Return the screenshots listed.
+ *
+ * @return array
+ */
+ public function getScreenshots() {
+ $ss = $this->parser->getAttribute('screenshot');
+
+ if (!$ss) {
+ $ss = array();
+ }
+
+ $normalized = array();
+ foreach ($ss as $s) {
+ $normalized[] = $this->buildStruct($this->screenshotStruct, $s);
+ }
+
+ return $normalized;
+ }
+
+ /**
+ * Return the list of provides by this plugin.
+ *
+ * @return array
+ */
+ public function getProvides() {
+ // normalize for 1.7
+ if ($this->getApiVersion() < 1.8) {
+ $provides = array();
+ } else {
+ $provides = $this->parser->getAttribute('provides');
+ }
+
+ if (!$provides) {
+ $provides = array();
+ }
+
+ // always provide ourself if we can
+ if ($this->pluginID) {
+ $provides[] = array(
+ 'type' => 'plugin',
+ 'name' => $this->getPluginID(),
+ 'version' => $this->getVersion()
+ );
+ }
+
+ $normalized = array();
+ foreach ($provides as $provide) {
+ $normalized[] = $this->buildStruct($this->depsProvidesStruct, $provide);
+ }
+
+ return $normalized;
+ }
+
+ /**
+ * Returns the dependencies listed.
+ *
+ * @return array
+ */
+ public function getRequires() {
+ // rewrite the 1.7 style elgg_version as a real requires.
+ if ($this->apiVersion < 1.8) {
+ $elgg_version = $this->parser->getAttribute('elgg_version');
+ if ($elgg_version) {
+ $reqs = array(
+ array(
+ 'type' => 'elgg_version',
+ 'version' => $elgg_version,
+ 'comparison' => 'ge'
+ )
+ );
+ } else {
+ $reqs = array();
+ }
+ } else {
+ $reqs = $this->parser->getAttribute('requires');
+ }
+
+ if (!$reqs) {
+ $reqs = array();
+ }
+
+ $normalized = array();
+ foreach ($reqs as $req) {
+ $normalized[] = $this->normalizeDep($req);
+ }
+
+ return $normalized;
+ }
+
+ /**
+ * Returns the suggests elements.
+ *
+ * @return array
+ */
+ public function getSuggests() {
+ $suggests = $this->parser->getAttribute('suggests');
+
+ if (!$suggests) {
+ $suggests = array();
+ }
+
+ $normalized = array();
+ foreach ($suggests as $suggest) {
+ $normalized[] = $this->normalizeDep($suggest);
+ }
+
+ return $normalized;
+ }
+
+ /**
+ * Normalizes a dependency array using the defined structs.
+ * Can be used with either requires or suggests.
+ *
+ * @param array $dep A dependency array.
+ * @return array The normalized deps array.
+ */
+ private function normalizeDep($dep) {
+ switch ($dep['type']) {
+ case 'elgg_version':
+ case 'elgg_release':
+ $struct = $this->depsStructElgg;
+ break;
+
+ case 'plugin':
+ $struct = $this->depsStructPlugin;
+ break;
+
+ case 'priority':
+ $struct = $this->depsStructPriority;
+ break;
+
+ case 'php_extension':
+ $struct = $this->depsStructPhpExtension;
+ break;
+
+ case 'php_ini':
+ $struct = $this->depsStructPhpIni;
+
+ // also normalize boolean values
+ if (isset($dep['value'])) {
+ switch (strtolower($dep['value'])) {
+ case 'yes':
+ case 'true':
+ case 'on':
+ case 1:
+ $dep['value'] = 1;
+ break;
+
+ case 'no':
+ case 'false':
+ case 'off':
+ case 0:
+ case '':
+ $dep['value'] = 0;
+ break;
+ }
+ }
+ break;
+ default:
+ // unrecognized so we just return the raw dependency
+ return $dep;
+ }
+
+ $normalized_dep = $this->buildStruct($struct, $dep);
+
+ // normalize comparison operators
+ if (isset($normalized_dep['comparison'])) {
+ switch ($normalized_dep['comparison']) {
+ case '<':
+ $normalized_dep['comparison'] = 'lt';
+ break;
+
+ case '<=':
+ $normalized_dep['comparison'] = 'le';
+ break;
+
+ case '>':
+ $normalized_dep['comparison'] = 'gt';
+ break;
+
+ case '>=':
+ $normalized_dep['comparison'] = 'ge';
+ break;
+
+ case '==':
+ case 'eq':
+ $normalized_dep['comparison'] = '=';
+ break;
+
+ case '<>':
+ case 'ne':
+ $normalized_dep['comparison'] = '!=';
+ break;
+ }
+ }
+
+ return $normalized_dep;
+ }
+
+ /**
+ * Returns the conflicts listed
+ *
+ * @return array
+ */
+ public function getConflicts() {
+ // normalize for 1.7
+ if ($this->getApiVersion() < 1.8) {
+ $conflicts = array();
+ } else {
+ $conflicts = $this->parser->getAttribute('conflicts');
+ }
+
+ if (!$conflicts) {
+ $conflicts = array();
+ }
+
+ $normalized = array();
+
+ foreach ($conflicts as $conflict) {
+ $normalized[] = $this->buildStruct($this->depsConflictsStruct, $conflict);
+ }
+
+ return $normalized;
+ }
+
+ /**
+ * Should this plugin be activated when Elgg is installed
+ *
+ * @return bool
+ */
+ public function getActivateOnInstall() {
+ $activate = $this->parser->getAttribute('activate_on_install');
+ switch (strtolower($activate)) {
+ case 'yes':
+ case 'true':
+ case 'on':
+ case 1:
+ return true;
+
+ case 'no':
+ case 'false':
+ case 'off':
+ case 0:
+ case '':
+ return false;
+ }
+ }
+
+ /**
+ * Normalizes an array into the structure specified
+ *
+ * @param array $struct The struct to normalize $element to.
+ * @param array $array The array
+ *
+ * @return array
+ */
+ protected function buildStruct(array $struct, array $array) {
+ $return = array();
+
+ foreach ($struct as $index => $default) {
+ $return[$index] = elgg_extract($index, $array, $default);
+ }
+
+ return $return;
+ }
+
+ /**
+ * Returns a category's friendly name. This can be localized by
+ * defining the string 'admin:plugins:category:<category>'. If no
+ * localization is found, returns the category with _ and - converted to ' '
+ * and then ucwords()'d.
+ *
+ * @param str $category The category as defined in the manifest.
+ * @return str A human-readable category
+ */
+ static public function getFriendlyCategory($category) {
+ $cat_raw_string = "admin:plugins:category:$category";
+ $cat_display_string = elgg_echo($cat_raw_string);
+ if ($cat_display_string == $cat_raw_string) {
+ $category = str_replace(array('-', '_'), ' ', $category);
+ $cat_display_string = ucwords($category);
+ }
+ return $cat_display_string;
+ }
+}
diff --git a/engine/classes/ElggPluginManifestParser.php b/engine/classes/ElggPluginManifestParser.php
new file mode 100644
index 000000000..af152b561
--- /dev/null
+++ b/engine/classes/ElggPluginManifestParser.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Parent class for manifest parsers.
+ *
+ * Converts manifest.xml files or strings to an array.
+ *
+ * This should be extended by a class that does the actual work
+ * to convert based on the manifest.xml version.
+ *
+ * This class only parses XML to an XmlEntity object and
+ * an array. The array should be used primarily to extract
+ * information since it is quicker to parse once and store
+ * values from the XmlElement object than to parse the object
+ * each time.
+ *
+ * The array should be an exact representation of the manifest.xml
+ * file or string. Any normalization needs to be done in the
+ * calling class / function.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ * @since 1.8
+ */
+abstract class ElggPluginManifestParser {
+ /**
+ * The XmlElement object
+ *
+ * @var XmlElement
+ */
+ protected $manifestObject;
+
+ /**
+ * The manifest array
+ *
+ * @var array
+ */
+ protected $manifest;
+
+ /**
+ * All valid manifest attributes with default values.
+ *
+ * @var array
+ */
+ protected $validAttributes;
+
+ /**
+ * The object we're doing parsing for.
+ *
+ * @var object
+ */
+ protected $caller;
+
+ /**
+ * Loads the manifest XML to be parsed.
+ *
+ * @param ElggXmlElement $xml The Manifest XML object to be parsed
+ * @param object $caller The object calling this parser.
+ */
+ public function __construct(ElggXMLElement $xml, $caller) {
+ $this->manifestObject = $xml;
+ $this->caller = $caller;
+ }
+
+ /**
+ * Returns the manifest XML object
+ *
+ * @return XmlElement
+ */
+ public function getManifestObject() {
+ return $this->manifestObject;
+ }
+
+ /**
+ * Return the parsed manifest array
+ *
+ * @return array
+ */
+ public function getManifest() {
+ return $this->manifest;
+ }
+
+ /**
+ * Return an attribute in the manifest.
+ *
+ * @param string $name Attribute name
+ * @return mixed
+ */
+ public function getAttribute($name) {
+ if (in_array($name, $this->validAttributes) && isset($this->manifest[$name])) {
+ return $this->manifest[$name];
+ }
+
+ return false;
+ }
+
+ /**
+ * Parse the XML object into an array
+ *
+ * @return bool
+ */
+ abstract public function parse();
+}
diff --git a/engine/classes/ElggPluginManifestParser17.php b/engine/classes/ElggPluginManifestParser17.php
new file mode 100644
index 000000000..5658ee804
--- /dev/null
+++ b/engine/classes/ElggPluginManifestParser17.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Plugin manifest.xml parser for Elgg 1.7 and lower.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ * @since 1.8
+ */
+class ElggPluginManifestParser17 extends ElggPluginManifestParser {
+ /**
+ * The valid top level attributes and defaults for a 1.7 manifest
+ */
+ protected $validAttributes = array(
+ 'author', 'version', 'description', 'website',
+ 'copyright', 'license', 'licence', 'elgg_version',
+
+ // were never really used and not enforced in code.
+ 'requires', 'recommends', 'conflicts',
+
+ // not a 1.7 field, but we need it
+ 'name',
+ );
+
+ /**
+ * Parse a manifest object from 1.7 or earlier.
+ *
+ * @return void
+ */
+ public function parse() {
+ if (!isset($this->manifestObject->children)) {
+ return false;
+ }
+
+ $elements = array();
+
+ foreach ($this->manifestObject->children as $element) {
+ $key = $element->attributes['key'];
+ $value = $element->attributes['value'];
+
+ // create arrays if multiple fields are set
+ if (array_key_exists($key, $elements)) {
+ if (!is_array($elements[$key])) {
+ $orig = $elements[$key];
+ $elements[$key] = array($orig);
+ }
+
+ $elements[$key][] = $value;
+ } else {
+ $elements[$key] = $value;
+ }
+ }
+
+ if ($elements && !array_key_exists('name', $elements)) {
+ $elements['name'] = $this->caller->getName();
+ }
+
+ $this->manifest = $elements;
+
+ if (!$this->manifest) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Return an attribute in the manifest.
+ *
+ * Overrides ElggPluginManifestParser::getAttribute() because before 1.8
+ * there were no rules...weeeeeeeee!
+ *
+ * @param string $name Attribute name
+ * @return mixed
+ */
+ public function getAttribute($name) {
+ if (isset($this->manifest[$name])) {
+ return $this->manifest[$name];
+ }
+
+ return false;
+ }
+}
diff --git a/engine/classes/ElggPluginManifestParser18.php b/engine/classes/ElggPluginManifestParser18.php
new file mode 100644
index 000000000..3b753f17b
--- /dev/null
+++ b/engine/classes/ElggPluginManifestParser18.php
@@ -0,0 +1,97 @@
+<?php
+/**
+ * Plugin manifest.xml parser for Elgg 1.8 and above.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ * @since 1.8
+ */
+class ElggPluginManifestParser18 extends ElggPluginManifestParser {
+ /**
+ * The valid top level attributes and defaults for a 1.8 manifest array.
+ *
+ * @var array
+ */
+ protected $validAttributes = array(
+ 'name', 'author', 'version', 'blurb', 'description','website',
+ 'repository', 'bugtracker', 'donations', 'copyright', 'license',
+ 'requires', 'suggests', 'conflicts', 'provides',
+ 'screenshot', 'category', 'activate_on_install'
+ );
+
+ /**
+ * Required attributes for a valid 1.8 manifest
+ *
+ * @var array
+ */
+ protected $requiredAttributes = array(
+ 'name', 'author', 'version', 'description', 'requires'
+ );
+
+ /**
+ * Parse a manifest object from 1.8 and later
+ *
+ * @return void
+ */
+ public function parse() {
+ $parsed = array();
+ foreach ($this->manifestObject->children as $element) {
+ switch ($element->name) {
+ // single elements
+ case 'blurb':
+ case 'description':
+ case 'name':
+ case 'author':
+ case 'version':
+ case 'website':
+ case 'copyright':
+ case 'license':
+ case 'repository':
+ case 'bugtracker':
+ case 'donations':
+ case 'activate_on_install':
+ $parsed[$element->name] = $element->content;
+ break;
+
+ // arrays
+ case 'category':
+ $parsed[$element->name][] = $element->content;
+ break;
+
+ // 3d arrays
+ case 'screenshot':
+ case 'provides':
+ case 'conflicts':
+ case 'requires':
+ case 'suggests':
+ if (!isset($element->children)) {
+ return false;
+ }
+
+ $info = array();
+ foreach ($element->children as $child_element) {
+ $info[$child_element->name] = $child_element->content;
+ }
+
+ $parsed[$element->name][] = $info;
+ break;
+ }
+ }
+
+ // check we have all the required fields
+ foreach ($this->requiredAttributes as $attr) {
+ if (!array_key_exists($attr, $parsed)) {
+ throw new PluginException(elgg_echo('PluginException:ParserErrorMissingRequiredAttribute',
+ array($attr, $this->caller->getPluginID())));
+ }
+ }
+
+ $this->manifest = $parsed;
+
+ if (!$this->manifest) {
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/engine/classes/ElggPluginPackage.php b/engine/classes/ElggPluginPackage.php
new file mode 100644
index 000000000..2dc4bdb3d
--- /dev/null
+++ b/engine/classes/ElggPluginPackage.php
@@ -0,0 +1,636 @@
+<?php
+/**
+ * Manages plugin packages under mod.
+ *
+ * @todo This should eventually be merged into ElggPlugin.
+ * Currently ElggPlugin objects are only used to get and save
+ * plugin settings and user settings, so not every plugin
+ * has an ElggPlugin object. It's not implemented in ElggPlugin
+ * right now because of conflicts with at least the constructor,
+ * enable(), disable(), and private settings.
+ *
+ * Around 1.9 or so we should each plugin over to using
+ * ElggPlugin and merge ElggPluginPackage and ElggPlugin.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ * @since 1.8
+ */
+class ElggPluginPackage {
+
+ /**
+ * The required files in the package
+ *
+ * @var array
+ */
+ private $requiredFiles = array(
+ 'start.php', 'manifest.xml'
+ );
+
+ /**
+ * The optional files that can be read and served through the markdown page handler
+ * @var array
+ */
+ private $textFiles = array(
+ 'README.txt', 'CHANGES.txt',
+ 'INSTALL.txt', 'COPYRIGHT.txt', 'LICENSE.txt',
+
+ 'README', 'README.md', 'README.markdown'
+ );
+
+ /**
+ * Valid types for provides.
+ *
+ * @var array
+ */
+ private $providesSupportedTypes = array(
+ 'plugin', 'php_extension'
+ );
+
+ /**
+ * The type of requires/conflicts supported
+ *
+ * @var array
+ */
+ private $depsSupportedTypes = array(
+ 'elgg_version', 'elgg_release', 'php_extension', 'php_ini', 'plugin', 'priority',
+ );
+
+ /**
+ * An invalid plugin error.
+ */
+ private $errorMsg = '';
+
+ /**
+ * Any dependencies messages
+ */
+ private $depsMsgs = array();
+
+ /**
+ * The plugin's manifest object
+ *
+ * @var ElggPluginManifest
+ */
+ protected $manifest;
+
+ /**
+ * The plugin's full path
+ *
+ * @var string
+ */
+ protected $path;
+
+ /**
+ * Is the plugin valid?
+ *
+ * @var mixed Bool after validation check, null before.
+ */
+ protected $valid = null;
+
+ /**
+ * The plugin ID (dir name)
+ *
+ * @var string
+ */
+ protected $id;
+
+ /**
+ * Load a plugin package from mod/$id or by full path.
+ *
+ * @param string $plugin The ID (directory name) or full path of the plugin.
+ * @param bool $validate Automatically run isValid()?
+ *
+ * @return true
+ * @throws PluginException
+ */
+ public function __construct($plugin, $validate = true) {
+ $plugin_path = elgg_get_plugins_path();
+ // @todo wanted to avoid another is_dir() call here.
+ // should do some profiling to see how much it affects
+ if (strpos($plugin, $plugin_path) === 0 || is_dir($plugin)) {
+ // this is a path
+ $path = sanitise_filepath($plugin);
+
+ // the id is the last element of the array
+ $path_array = explode('/', trim($path, '/'));
+ $id = array_pop($path_array);
+ } else {
+ // this is a plugin id
+ // strict plugin names
+ if (preg_match('/[^a-z0-9\.\-_]/i', $plugin)) {
+ throw new PluginException(elgg_echo('PluginException:InvalidID', array($plugin)));
+ }
+
+ $path = "{$plugin_path}$plugin/";
+ $id = $plugin;
+ }
+
+ if (!is_dir($path)) {
+ throw new PluginException(elgg_echo('PluginException:InvalidPath', array($path)));
+ }
+
+ $this->path = $path;
+ $this->id = $id;
+
+ if ($validate && !$this->isValid()) {
+ if ($this->errorMsg) {
+ throw new PluginException(elgg_echo('PluginException:InvalidPlugin:Details',
+ array($plugin, $this->errorMsg)));
+ } else {
+ throw new PluginException(elgg_echo('PluginException:InvalidPlugin', array($plugin)));
+ }
+ }
+
+ return true;
+ }
+
+ /********************************
+ * Validation and sanity checks *
+ ********************************/
+
+ /**
+ * Checks if this is a valid Elgg plugin.
+ *
+ * Checks for requires files as defined at the start of this
+ * class. Will check require manifest fields via ElggPluginManifest
+ * for Elgg 1.8 plugins.
+ *
+ * @note This doesn't check dependencies or conflicts.
+ * Use {@link ElggPluginPackage::canActivate()} or
+ * {@link ElggPluginPackage::checkDependencies()} for that.
+ *
+ * @return bool
+ */
+ public function isValid() {
+ if (isset($this->valid)) {
+ return $this->valid;
+ }
+
+ // check required files.
+ $have_req_files = true;
+ foreach ($this->requiredFiles as $file) {
+ if (!is_readable($this->path . $file)) {
+ $have_req_files = false;
+ $this->errorMsg =
+ elgg_echo('ElggPluginPackage:InvalidPlugin:MissingFile', array($file));
+ break;
+ }
+ }
+
+ // check required files
+ if (!$have_req_files) {
+ return $this->valid = false;
+ }
+
+ // check for valid manifest.
+ if (!$this->loadManifest()) {
+ return $this->valid = false;
+ }
+
+ // can't require or conflict with yourself or something you provide.
+ // make sure provides are all valid.
+ if (!$this->isSaneDeps()) {
+ return $this->valid = false;
+ }
+
+ return $this->valid = true;
+ }
+
+ /**
+ * Check the plugin doesn't require or conflict with itself
+ * or something provides. Also check that it only list
+ * valid provides. Deps are checked in checkDependencies()
+ *
+ * @note Plugins always provide themselves.
+ *
+ * @todo Don't let them require and conflict the same thing
+ *
+ * @return bool
+ */
+ private function isSaneDeps() {
+ // protection against plugins with no manifest file
+ if (!$this->getManifest()) {
+ return false;
+ }
+
+ $conflicts = $this->getManifest()->getConflicts();
+ $requires = $this->getManifest()->getRequires();
+ $provides = $this->getManifest()->getProvides();
+
+ foreach ($provides as $provide) {
+ // only valid provide types
+ if (!in_array($provide['type'], $this->providesSupportedTypes)) {
+ $this->errorMsg =
+ elgg_echo('ElggPluginPackage:InvalidPlugin:InvalidProvides', array($provide['type']));
+ return false;
+ }
+
+ // doesn't conflict or require any of its provides
+ $name = $provide['name'];
+ foreach (array('conflicts', 'requires') as $dep_type) {
+ foreach (${$dep_type} as $dep) {
+ if (!in_array($dep['type'], $this->depsSupportedTypes)) {
+ $this->errorMsg =
+ elgg_echo('ElggPluginPackage:InvalidPlugin:InvalidDependency', array($dep['type']));
+ return false;
+ }
+
+ // make sure nothing is providing something it conflicts or requires.
+ if (isset($dep['name']) && $dep['name'] == $name) {
+ $version_compare = version_compare($provide['version'], $dep['version'], $dep['comparison']);
+
+ if ($version_compare) {
+ $this->errorMsg =
+ elgg_echo('ElggPluginPackage:InvalidPlugin:CircularDep',
+ array($dep['type'], $dep['name'], $this->id));
+
+ return false;
+ }
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+
+ /************
+ * Manifest *
+ ************/
+
+ /**
+ * Returns a parsed manifest file.
+ *
+ * @return ElggPluginManifest
+ */
+ public function getManifest() {
+ if (!$this->manifest) {
+ if (!$this->loadManifest()) {
+ return false;
+ }
+ }
+
+ return $this->manifest;
+ }
+
+ /**
+ * Loads the manifest into this->manifest as an
+ * ElggPluginManifest object.
+ *
+ * @return bool
+ */
+ private function loadManifest() {
+ $file = $this->path . 'manifest.xml';
+
+ try {
+ $this->manifest = new ElggPluginManifest($file, $this->id);
+ } catch (Exception $e) {
+ $this->errorMsg = $e->getMessage();
+ return false;
+ }
+
+ if ($this->manifest instanceof ElggPluginManifest) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /****************
+ * Readme Files *
+ ***************/
+
+ /**
+ * Returns an array of present and readable text files
+ *
+ * @return array
+ */
+ public function getTextFilenames() {
+ return $this->textFiles;
+ }
+
+ /***********************
+ * Dependencies system *
+ ***********************/
+
+ /**
+ * Returns if the Elgg system meets the plugin's dependency
+ * requirements. This includes both requires and conflicts.
+ *
+ * Full reports can be requested. The results are returned
+ * as an array of arrays in the form array(
+ * 'type' => requires|conflicts,
+ * 'dep' => array( dependency array ),
+ * 'status' => bool if depedency is met,
+ * 'comment' => optional comment to display to the user.
+ * )
+ *
+ * @param bool $full_report Return a full report.
+ * @return bool|array
+ */
+ public function checkDependencies($full_report = false) {
+ $requires = $this->getManifest()->getRequires();
+ $conflicts = $this->getManifest()->getConflicts();
+ $enabled_plugins = elgg_get_plugins('active');
+ $this_id = $this->getID();
+ $report = array();
+
+ // first, check if any active plugin conflicts with us.
+ foreach ($enabled_plugins as $plugin) {
+ $temp_conflicts = array();
+ $temp_manifest = $plugin->getManifest();
+ if ($temp_manifest instanceof ElggPluginManifest) {
+ $temp_conflicts = $plugin->getManifest()->getConflicts();
+ }
+ foreach ($temp_conflicts as $conflict) {
+ if ($conflict['type'] == 'plugin' && $conflict['name'] == $this_id) {
+ $result = $this->checkDepPlugin($conflict, $enabled_plugins, false);
+
+ // rewrite the conflict to show the originating plugin
+ $conflict['name'] = $plugin->getManifest()->getName();
+
+ if (!$full_report && !$result['status']) {
+ $this->errorMsg = "Conflicts with plugin \"{$plugin->getManifest()->getName()}\".";
+ return $result['status'];
+ } else {
+ $report[] = array(
+ 'type' => 'conflicted',
+ 'dep' => $conflict,
+ 'status' => $result['status'],
+ 'value' => $this->getManifest()->getVersion()
+ );
+ }
+ }
+ }
+ }
+
+ $check_types = array('requires', 'conflicts');
+
+ if ($full_report) {
+ $suggests = $this->getManifest()->getSuggests();
+ $check_types[] = 'suggests';
+ }
+
+ foreach ($check_types as $dep_type) {
+ $inverse = ($dep_type == 'conflicts') ? true : false;
+
+ foreach (${$dep_type} as $dep) {
+ switch ($dep['type']) {
+ case 'elgg_version':
+ $result = $this->checkDepElgg($dep, get_version(), $inverse);
+ break;
+
+ case 'elgg_release':
+ $result = $this->checkDepElgg($dep, get_version(true), $inverse);
+ break;
+
+ case 'plugin':
+ $result = $this->checkDepPlugin($dep, $enabled_plugins, $inverse);
+ break;
+
+ case 'priority':
+ $result = $this->checkDepPriority($dep, $enabled_plugins, $inverse);
+ break;
+
+ case 'php_extension':
+ $result = $this->checkDepPhpExtension($dep, $inverse);
+ break;
+
+ case 'php_ini':
+ $result = $this->checkDepPhpIni($dep, $inverse);
+ break;
+ }
+
+ // unless we're doing a full report, break as soon as we fail.
+ if (!$full_report && !$result['status']) {
+ $this->errorMsg = "Missing dependencies.";
+ return $result['status'];
+ } else {
+ // build report element and comment
+ $report[] = array(
+ 'type' => $dep_type,
+ 'dep' => $dep,
+ 'status' => $result['status'],
+ 'value' => $result['value']
+ );
+ }
+ }
+ }
+
+ if ($full_report) {
+ // add provides to full report
+ $provides = $this->getManifest()->getProvides();
+
+ foreach ($provides as $provide) {
+ $report[] = array(
+ 'type' => 'provides',
+ 'dep' => $provide,
+ 'status' => true,
+ 'value' => ''
+ );
+ }
+
+ return $report;
+ }
+
+ return true;
+ }
+
+ /**
+ * Checks if $plugins meets the requirement by $dep.
+ *
+ * @param array $dep An Elgg manifest.xml deps array
+ * @param array $plugins A list of plugins as returned by elgg_get_plugins();
+ * @param bool $inverse Inverse the results to use as a conflicts.
+ * @return bool
+ */
+ private function checkDepPlugin(array $dep, array $plugins, $inverse = false) {
+ $r = elgg_check_plugins_provides('plugin', $dep['name'], $dep['version'], $dep['comparison']);
+
+ if ($inverse) {
+ $r['status'] = !$r['status'];
+ }
+
+ return $r;
+ }
+
+ /**
+ * Checks if $plugins meets the requirement by $dep.
+ *
+ * @param array $dep An Elgg manifest.xml deps array
+ * @param array $plugins A list of plugins as returned by elgg_get_plugins();
+ * @param bool $inverse Inverse the results to use as a conflicts.
+ * @return bool
+ */
+ private function checkDepPriority(array $dep, array $plugins, $inverse = false) {
+ // grab the ElggPlugin using this package.
+ $plugin_package = elgg_get_plugin_from_id($this->getID());
+ $plugin_priority = $plugin_package->getPriority();
+ $test_plugin = elgg_get_plugin_from_id($dep['plugin']);
+
+ // If this isn't a plugin or the plugin isn't installed or active
+ // priority doesn't matter. Use requires to check if a plugin is active.
+ if (!$plugin_package || !$test_plugin || !$test_plugin->isActive()) {
+ return array(
+ 'status' => true,
+ 'value' => 'uninstalled'
+ );
+ }
+
+ $test_plugin_priority = $test_plugin->getPriority();
+
+ switch ($dep['priority']) {
+ case 'before':
+ $status = $plugin_priority < $test_plugin_priority;
+ break;
+
+ case 'after':
+ $status = $plugin_priority > $test_plugin_priority;
+ break;
+
+ default;
+ $status = false;
+ }
+
+ // get the current value
+ if ($plugin_priority < $test_plugin_priority) {
+ $value = 'before';
+ } else {
+ $value = 'after';
+ }
+
+ if ($inverse) {
+ $status = !$status;
+ }
+
+ return array(
+ 'status' => $status,
+ 'value' => $value
+ );
+ }
+
+ /**
+ * Checks if $elgg_version meets the requirement by $dep.
+ *
+ * @param array $dep An Elgg manifest.xml deps array
+ * @param array $elgg_version An Elgg version (either YYYYMMDDXX or X.Y.Z)
+ * @param bool $inverse Inverse the result to use as a conflicts.
+ * @return bool
+ */
+ private function checkDepElgg(array $dep, $elgg_version, $inverse = false) {
+ $status = version_compare($elgg_version, $dep['version'], $dep['comparison']);
+
+ if ($inverse) {
+ $status = !$status;
+ }
+
+ return array(
+ 'status' => $status,
+ 'value' => $elgg_version
+ );
+ }
+
+ /**
+ * Checks if the PHP extension in $dep is loaded.
+ *
+ * @todo Can this be merged with the plugin checker?
+ *
+ * @param array $dep An Elgg manifest.xml deps array
+ * @param bool $inverse Inverse the result to use as a conflicts.
+ * @return array An array in the form array(
+ * 'status' => bool
+ * 'value' => string The version provided
+ * )
+ */
+ private function checkDepPhpExtension(array $dep, $inverse = false) {
+ $name = $dep['name'];
+ $version = $dep['version'];
+ $comparison = $dep['comparison'];
+
+ // not enabled.
+ $status = extension_loaded($name);
+
+ // enabled. check version.
+ $ext_version = phpversion($name);
+
+ if ($status) {
+ // some extensions (like gd) don't provide versions. neat.
+ // don't check version info and return a lie.
+ if ($ext_version && $version) {
+ $status = version_compare($ext_version, $version, $comparison);
+ }
+
+ if (!$ext_version) {
+ $ext_version = '???';
+ }
+ }
+
+ // some php extensions can be emulated, so check provides.
+ if ($status == false) {
+ $provides = elgg_check_plugins_provides('php_extension', $name, $version, $comparison);
+ $status = $provides['status'];
+ $ext_version = $provides['value'];
+ }
+
+ if ($inverse) {
+ $status = !$status;
+ }
+
+ return array(
+ 'status' => $status,
+ 'value' => $ext_version
+ );
+ }
+
+ /**
+ * Check if the PHP ini setting satisfies $dep.
+ *
+ * @param array $dep An Elgg manifest.xml deps array
+ * @param bool $inverse Inverse the result to use as a conflicts.
+ * @return bool
+ */
+ private function checkDepPhpIni($dep, $inverse = false) {
+ $name = $dep['name'];
+ $value = $dep['value'];
+ $comparison = $dep['comparison'];
+
+ // ini_get() normalizes truthy values to 1 but falsey values to 0 or ''.
+ // version_compare() considers '' < 0, so normalize '' to 0.
+ // ElggPluginManifest normalizes all bool values and '' to 1 or 0.
+ $setting = ini_get($name);
+
+ if ($setting === '') {
+ $setting = 0;
+ }
+
+ $status = version_compare($setting, $value, $comparison);
+
+ if ($inverse) {
+ $status = !$status;
+ }
+
+ return array(
+ 'status' => $status,
+ 'value' => $setting
+ );
+ }
+
+ /**
+ * Returns the Plugin ID
+ *
+ * @return string
+ */
+ public function getID() {
+ return $this->id;
+ }
+
+ /**
+ * Returns the last error message.
+ *
+ * @return string
+ */
+ public function getError() {
+ return $this->errorMsg;
+ }
+}
diff --git a/engine/classes/ElggPriorityList.php b/engine/classes/ElggPriorityList.php
new file mode 100644
index 000000000..8a3b836a8
--- /dev/null
+++ b/engine/classes/ElggPriorityList.php
@@ -0,0 +1,358 @@
+<?php
+/**
+ * Iterate over elements in a specific priority.
+ *
+ * $pl = new ElggPriorityList();
+ * $pl->add('Element 0');
+ * $pl->add('Element 10', 10);
+ * $pl->add('Element -10', -10);
+ *
+ * foreach ($pl as $priority => $element) {
+ * var_dump("$priority => $element");
+ * }
+ *
+ * Yields:
+ * -10 => Element -10
+ * 0 => Element 0
+ * 10 => Element 10
+ *
+ * Collisions on priority are handled by inserting the element at or as close to the
+ * requested priority as possible:
+ *
+ * $pl = new ElggPriorityList();
+ * $pl->add('Element 5', 5);
+ * $pl->add('Colliding element 5', 5);
+ * $pl->add('Another colliding element 5', 5);
+ *
+ * foreach ($pl as $priority => $element) {
+ * var_dump("$priority => $element");
+ * }
+ *
+ * Yields:
+ * 5 => 'Element 5',
+ * 6 => 'Colliding element 5',
+ * 7 => 'Another colliding element 5'
+ *
+ * You can do priority lookups by element:
+ *
+ * $pl = new ElggPriorityList();
+ * $pl->add('Element 0');
+ * $pl->add('Element -5', -5);
+ * $pl->add('Element 10', 10);
+ * $pl->add('Element -10', -10);
+ *
+ * $priority = $pl->getPriority('Element -5');
+ *
+ * Or element lookups by priority.
+ * $element = $pl->getElement(-5);
+ *
+ * To remove elements, pass the element.
+ * $pl->remove('Element -10');
+ *
+ * To check if an element exists:
+ * $pl->contains('Element -5');
+ *
+ * To move an element:
+ * $pl->move('Element -5', -3);
+ *
+ * ElggPriorityList only tracks priority. No checking is done in ElggPriorityList for duplicates or
+ * updating. If you need to track this use objects and an external map:
+ *
+ * function elgg_register_something($id, $display_name, $location, $priority = 500) {
+ * // $id => $element.
+ * static $map = array();
+ * static $list;
+ *
+ * if (!$list) {
+ * $list = new ElggPriorityList();
+ * }
+ *
+ * // update if already registered.
+ * if (isset($map[$id])) {
+ * $element = $map[$id];
+ * // move it first because we have to pass the original element.
+ * if (!$list->move($element, $priority)) {
+ * return false;
+ * }
+ * $element->display_name = $display_name;
+ * $element->location = $location;
+ * } else {
+ * $element = new stdClass();
+ * $element->display_name = $display_name;
+ * $element->location = $location;
+ * if (!$list->add($element, $priority)) {
+ * return false;
+ * }
+ * $map[$id] = $element;
+ * }
+ *
+ * return true;
+ * }
+ *
+ * @package Elgg.Core
+ * @subpackage Helpers
+ */
+class ElggPriorityList
+ implements Iterator, Countable {
+
+ /**
+ * The list of elements
+ *
+ * @var array
+ */
+ private $elements = array();
+
+ /**
+ * Create a new priority list.
+ *
+ * @param array $elements An optional array of priorities => element
+ */
+ public function __construct(array $elements = array()) {
+ if ($elements) {
+ foreach ($elements as $priority => $element) {
+ $this->add($element, $priority);
+ }
+ }
+ }
+
+ /**
+ * Adds an element to the list.
+ *
+ * @warning This returns the priority at which the element was added, which can be 0. Use
+ * !== false to check for success.
+ *
+ * @param mixed $element The element to add to the list.
+ * @param mixed $priority Priority to add the element. In priority collisions, the original element
+ * maintains its priority and the new element is to the next available
+ * slot, taking into consideration all previously registered elements.
+ * Negative elements are accepted.
+ * @return int The priority of the added element.
+ */
+ public function add($element, $priority = null, $exact = false) {
+ if ($priority !== null && !is_numeric($priority)) {
+ return false;
+ } else {
+ $priority = $this->getNextPriority($priority);
+ }
+
+ $this->elements[$priority] = $element;
+ $this->sorted = false;
+ return $priority;
+ }
+
+ /**
+ * Removes an element from the list.
+ *
+ * @warning The element must have the same attributes / values. If using $strict, it must have
+ * the same types. array(10) will fail in strict against array('10') (str vs int).
+ *
+ * @param type $element
+ * @return bool
+ */
+ public function remove($element, $strict = false) {
+ $index = array_search($element, $this->elements, $strict);
+ if ($index !== false) {
+ unset($this->elements[$index]);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Move an existing element to a new priority.
+ *
+ * @param mixed $current_priority
+ * @param int $new_priority
+ *
+ * @return int The new priority.
+ */
+ public function move($element, $new_priority, $strict = false) {
+ $new_priority = (int) $new_priority;
+
+ $current_priority = $this->getPriority($element, $strict);
+ if ($current_priority === false) {
+ return false;
+ }
+
+ if ($current_priority == $new_priority) {
+ return true;
+ }
+
+ // move the actual element so strict operations still work
+ $element = $this->getElement($current_priority);
+ unset($this->elements[$current_priority]);
+ return $this->add($element, $new_priority);
+ }
+
+ /**
+ * Returns the elements
+ *
+ * @return array
+ */
+ public function getElements() {
+ $this->sortIfUnsorted();
+ return $this->elements;
+ }
+
+ /**
+ * Sort the elements optionally by a callback function.
+ *
+ * If no user function is provided the elements are sorted by priority registered.
+ *
+ * The callback function should accept the array of elements as the first argument and should
+ * return a sorted array.
+ *
+ * This function can be called multiple times.
+ *
+ * @param type $callback
+ * @return bool
+ */
+ public function sort($callback = null) {
+ if (!$callback) {
+ ksort($this->elements, SORT_NUMERIC);
+ } else {
+ $sorted = call_user_func($callback, $this->elements);
+
+ if (!$sorted) {
+ return false;
+ }
+
+ $this->elements = $sorted;
+ }
+
+ $this->sorted = true;
+ return true;
+ }
+
+ /**
+ * Sort the elements if they haven't been sorted yet.
+ *
+ * @return bool
+ */
+ private function sortIfUnsorted() {
+ if (!$this->sorted) {
+ return $this->sort();
+ }
+ }
+
+ /**
+ * Returns the next priority available.
+ *
+ * @param int $near Make the priority as close to $near as possible.
+ * @return int
+ */
+ public function getNextPriority($near = 0) {
+ $near = (int) $near;
+
+ while (array_key_exists($near, $this->elements)) {
+ $near++;
+ }
+
+ return $near;
+ }
+
+ /**
+ * Returns the priority of an element if it exists in the list.
+ *
+ * @warning This can return 0 if the element's priority is 0.
+ *
+ * @param mixed $element The element to check for.
+ * @param bool $strict Use strict checking?
+ * @return mixed False if the element doesn't exists, the priority if it does.
+ */
+ public function getPriority($element, $strict = false) {
+ return array_search($element, $this->elements, $strict);
+ }
+
+ /**
+ * Returns the element at $priority.
+ *
+ * @param int $priority
+ * @return mixed The element or false on fail.
+ */
+ public function getElement($priority) {
+ return (isset($this->elements[$priority])) ? $this->elements[$priority] : false;
+ }
+
+ /**
+ * Returns if the list contains $element.
+ *
+ * @param mixed $element The element to check.
+ * @param bool $strict Use strict checking?
+ * @return bool
+ */
+ public function contains($element, $strict = false) {
+ return $this->getPriority($element, $strict) !== false;
+ }
+
+
+ /**********************
+ * Interface methods *
+ **********************/
+
+ /**
+ * Iterator
+ */
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::rewind()
+ * @return void
+ */
+ public function rewind() {
+ $this->sortIfUnsorted();
+ return reset($this->elements);
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::current()
+ * @return mixed
+ */
+ public function current() {
+ $this->sortIfUnsorted();
+ return current($this->elements);
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::key()
+ * @return int
+ */
+ public function key() {
+ $this->sortIfUnsorted();
+ return key($this->elements);
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::next()
+ * @return mixed
+ */
+ public function next() {
+ $this->sortIfUnsorted();
+ return next($this->elements);
+ }
+
+ /**
+ * PHP Iterator Interface
+ *
+ * @see Iterator::valid()
+ * @return bool
+ */
+ public function valid() {
+ $this->sortIfUnsorted();
+ $key = key($this->elements);
+ return ($key !== NULL && $key !== FALSE);
+ }
+
+ // Countable
+ public function count() {
+ return count($this->elements);
+ }
+} \ No newline at end of file
diff --git a/engine/classes/ElggRelationship.php b/engine/classes/ElggRelationship.php
new file mode 100644
index 000000000..efc0f7eff
--- /dev/null
+++ b/engine/classes/ElggRelationship.php
@@ -0,0 +1,228 @@
+<?php
+/**
+ * Relationship class.
+ *
+ * @package Elgg.Core
+ * @subpackage Core
+ *
+ * @property int $id The unique identifier (read-only)
+ * @property int $guid_one The GUID of the subject of the relationship
+ * @property string $relationship The name of the relationship
+ * @property int $guid_two The GUID of the object of the relationship
+ * @property int $time_created A UNIX timestamp of when the relationship was created (read-only, set on first save)
+ */
+class ElggRelationship extends ElggData implements
+ Importable
+{
+
+ /**
+ * Create a relationship object, optionally from a given id value or row.
+ *
+ * @param mixed $id ElggRelationship id, database row, or null for new relationship
+ */
+ function __construct($id = null) {
+ $this->initializeAttributes();
+
+ if (!empty($id)) {
+ if ($id instanceof stdClass) {
+ $relationship = $id; // Create from db row
+ } else {
+ $relationship = get_relationship($id);
+ }
+
+ if ($relationship) {
+ $objarray = (array) $relationship;
+ foreach ($objarray as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ }
+ }
+ }
+
+ /**
+ * Class member get overloading
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ function get($name) {
+ if (array_key_exists($name, $this->attributes)) {
+ return $this->attributes[$name];
+ }
+
+ return null;
+ }
+
+ /**
+ * Class member set overloading
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return mixed
+ */
+ function set($name, $value) {
+ $this->attributes[$name] = $value;
+ return true;
+ }
+
+ /**
+ * Save the relationship
+ *
+ * @return int the relationship id
+ */
+ public function save() {
+ if ($this->id > 0) {
+ delete_relationship($this->id);
+ }
+
+ $this->id = add_entity_relationship($this->guid_one, $this->relationship, $this->guid_two);
+ if (!$this->id) {
+ throw new IOException(elgg_echo('IOException:UnableToSaveNew', array(get_class())));
+ }
+
+ return $this->id;
+ }
+
+ /**
+ * Delete a given relationship.
+ *
+ * @return bool
+ */
+ public function delete() {
+ return delete_relationship($this->id);
+ }
+
+ /**
+ * Get a URL for this relationship.
+ *
+ * @return string
+ */
+ public function getURL() {
+ return get_relationship_url($this->id);
+ }
+
+ // EXPORTABLE INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array(
+ 'id',
+ 'guid_one',
+ 'relationship',
+ 'guid_two'
+ );
+ }
+
+ /**
+ * Export this relationship
+ *
+ * @return array
+ */
+ public function export() {
+ $uuid = get_uuid_from_object($this);
+ $relationship = new ODDRelationship(
+ guid_to_uuid($this->guid_one),
+ $this->relationship,
+ guid_to_uuid($this->guid_two)
+ );
+
+ $relationship->setAttribute('uuid', $uuid);
+
+ return $relationship;
+ }
+
+ // IMPORTABLE INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * Import a relationship
+ *
+ * @param ODD $data ODD data
+
+ * @return bool
+ * @throws ImportException
+ */
+ public function import(ODD $data) {
+ if (!($data instanceof ODDRelationship)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnexpectedODDClass'));
+ }
+
+ $uuid_one = $data->getAttribute('uuid1');
+ $uuid_two = $data->getAttribute('uuid2');
+
+ // See if this entity has already been imported, if so then we need to link to it
+ $entity1 = get_entity_from_uuid($uuid_one);
+ $entity2 = get_entity_from_uuid($uuid_two);
+ if (($entity1) && ($entity2)) {
+ // Set the item ID
+ $this->attributes['guid_one'] = $entity1->getGUID();
+ $this->attributes['guid_two'] = $entity2->getGUID();
+
+ // Map verb to relationship
+ //$verb = $data->getAttribute('verb');
+ //$relationship = get_relationship_from_verb($verb);
+ $relationship = $data->getAttribute('type');
+
+ if ($relationship) {
+ $this->attributes['relationship'] = $relationship;
+ // save
+ $result = $this->save();
+ if (!$result) {
+ throw new ImportException(elgg_echo('ImportException:ProblemSaving', array(get_class())));
+ }
+
+ return true;
+ }
+ }
+ }
+
+ // SYSTEM LOG INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * Return an identification for the object for storage in the system log.
+ * This id must be an integer.
+ *
+ * @return int
+ */
+ public function getSystemLogID() {
+ return $this->id;
+ }
+
+ /**
+ * For a given ID, return the object associated with it.
+ * This is used by the river functionality primarily.
+ * This is useful for checking access permissions etc on objects.
+ *
+ * @param int $id ID
+ *
+ * @return ElggRelationship
+ */
+ public function getObjectFromID($id) {
+ return get_relationship($id);
+ }
+
+ /**
+ * Return a type of the object - eg. object, group, user, relationship, metadata, annotation etc
+ *
+ * @return string 'relationship'
+ */
+ public function getType() {
+ return 'relationship';
+ }
+
+ /**
+ * Return a subtype. For metadata & annotations this is the 'name' and for relationship this
+ * is the relationship type.
+ *
+ * @return string
+ */
+ public function getSubtype() {
+ return $this->relationship;
+ }
+
+}
diff --git a/engine/classes/ElggRiverItem.php b/engine/classes/ElggRiverItem.php
new file mode 100644
index 000000000..d3d09cd91
--- /dev/null
+++ b/engine/classes/ElggRiverItem.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * River item class.
+ *
+ * @package Elgg.Core
+ * @subpackage Core
+ *
+ * @property int $id The unique identifier (read-only)
+ * @property int $subject_guid The GUID of the actor
+ * @property int $object_guid The GUID of the object
+ * @property int $annotation_id The ID of the annotation involved in the action
+ * @property string $type The type of one of the entities involved in the action
+ * @property string $subtype The subtype of one of the entities involved in the action
+ * @property string $action_type The name of the action
+ * @property string $view The view for displaying this river item
+ * @property int $access_id The visibility of the river item
+ * @property int $posted UNIX timestamp when the action occurred
+ */
+class ElggRiverItem {
+ public $id;
+ public $subject_guid;
+ public $object_guid;
+ public $annotation_id;
+ public $type;
+ public $subtype;
+ public $action_type;
+ public $access_id;
+ public $view;
+ public $posted;
+
+ /**
+ * Construct a river item object given a database row.
+ *
+ * @param stdClass $object Object obtained from database
+ */
+ function __construct($object) {
+ if (!($object instanceof stdClass)) {
+ // throw exception
+ }
+
+ // the casting is to support typed serialization like json
+ $int_types = array('id', 'subject_guid', 'object_guid', 'annotation_id', 'access_id', 'posted');
+ foreach ($object as $key => $value) {
+ if (in_array($key, $int_types)) {
+ $this->$key = (int)$value;
+ } else {
+ $this->$key = $value;
+ }
+ }
+ }
+
+ /**
+ * Get the subject of this river item
+ *
+ * @return ElggEntity
+ */
+ public function getSubjectEntity() {
+ return get_entity($this->subject_guid);
+ }
+
+ /**
+ * Get the object of this river item
+ *
+ * @return ElggEntity
+ */
+ public function getObjectEntity() {
+ return get_entity($this->object_guid);
+ }
+
+ /**
+ * Get the Annotation for this river item
+ *
+ * @return ElggAnnotation
+ */
+ public function getAnnotation() {
+ return elgg_get_annotation_from_id($this->annotation_id);
+ }
+
+ /**
+ * Get the view used to display this river item
+ *
+ * @return string
+ */
+ public function getView() {
+ return $this->view;
+ }
+
+ /**
+ * Get the time this activity was posted
+ *
+ * @return int
+ */
+ public function getPostedTime() {
+ return (int)$this->posted;
+ }
+
+ /**
+ * Get the type of the object
+ *
+ * @return string 'river'
+ */
+ public function getType() {
+ return 'river';
+ }
+
+ /**
+ * Get the subtype of the object
+ *
+ * @return string 'item'
+ */
+ public function getSubtype() {
+ return 'item';
+ }
+
+}
diff --git a/engine/classes/ElggSession.php b/engine/classes/ElggSession.php
new file mode 100644
index 000000000..9750f063e
--- /dev/null
+++ b/engine/classes/ElggSession.php
@@ -0,0 +1,153 @@
+<?php
+/**
+ * Magic session class.
+ * This class is intended to extend the $_SESSION magic variable by providing an API hook
+ * to plug in other values.
+ *
+ * Primarily this is intended to provide a way of supplying "logged in user"
+ * details without touching the session (which can cause problems when
+ * accessed server side).
+ *
+ * If a value is present in the session then that value is returned, otherwise
+ * a plugin hook 'session:get', '$var' is called, where $var is the variable
+ * being requested.
+ *
+ * Setting values will store variables in the session in the normal way.
+ *
+ * LIMITATIONS: You can not access multidimensional arrays
+ *
+ * @package Elgg.Core
+ * @subpackage Sessions
+ */
+class ElggSession implements ArrayAccess {
+ /** Local cache of trigger retrieved variables */
+ private static $__localcache;
+
+ /**
+ * Test if property is set either as an attribute or metadata.
+ *
+ * @param string $key The name of the attribute or metadata.
+ *
+ * @return bool
+ */
+ function __isset($key) {
+ return $this->offsetExists($key);
+ }
+
+ /**
+ * Set a value, go straight to session.
+ *
+ * @param string $key Name
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ function offsetSet($key, $value) {
+ $_SESSION[$key] = $value;
+ }
+
+ /**
+ * Get a variable from either the session, or if its not in the session
+ * attempt to get it from an api call.
+ *
+ * @see ArrayAccess::offsetGet()
+ *
+ * @param mixed $key Name
+ *
+ * @return mixed
+ */
+ function offsetGet($key) {
+ if (!ElggSession::$__localcache) {
+ ElggSession::$__localcache = array();
+ }
+
+ if (isset($_SESSION[$key])) {
+ return $_SESSION[$key];
+ }
+
+ if (isset(ElggSession::$__localcache[$key])) {
+ return ElggSession::$__localcache[$key];
+ }
+
+ $value = NULL;
+ $value = elgg_trigger_plugin_hook('session:get', $key, NULL, $value);
+
+ ElggSession::$__localcache[$key] = $value;
+
+ return ElggSession::$__localcache[$key];
+ }
+
+ /**
+ * Unset a value from the cache and the session.
+ *
+ * @see ArrayAccess::offsetUnset()
+ *
+ * @param mixed $key Name
+ *
+ * @return void
+ */
+ function offsetUnset($key) {
+ unset(ElggSession::$__localcache[$key]);
+ unset($_SESSION[$key]);
+ }
+
+ /**
+ * Return whether the value is set in either the session or the cache.
+ *
+ * @see ArrayAccess::offsetExists()
+ *
+ * @param int $offset Offset
+ *
+ * @return bool
+ */
+ function offsetExists($offset) {
+ if (isset(ElggSession::$__localcache[$offset])) {
+ return true;
+ }
+
+ if (isset($_SESSION[$offset])) {
+ return true;
+ }
+
+ if ($this->offsetGet($offset)) {
+ return true;
+ }
+
+ return false;
+ }
+
+
+ /**
+ * Alias to ::offsetGet()
+ *
+ * @param string $key Name
+ *
+ * @return mixed
+ */
+ function get($key) {
+ return $this->offsetGet($key);
+ }
+
+ /**
+ * Alias to ::offsetSet()
+ *
+ * @param string $key Name
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ function set($key, $value) {
+ $this->offsetSet($key, $value);
+ }
+
+ /**
+ * Alias to offsetUnset()
+ *
+ * @param string $key Name
+ *
+ * @return void
+ */
+ function del($key) {
+ $this->offsetUnset($key);
+ }
+}
diff --git a/engine/classes/ElggSharedMemoryCache.php b/engine/classes/ElggSharedMemoryCache.php
new file mode 100644
index 000000000..f5f11d2c7
--- /dev/null
+++ b/engine/classes/ElggSharedMemoryCache.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Shared memory cache description.
+ * Extends ElggCache with functions useful to shared memory
+ * style caches (static variables, memcache etc)
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+abstract class ElggSharedMemoryCache extends ElggCache {
+ /**
+ * Namespace variable used to keep various bits of the cache
+ * separate.
+ *
+ * @var string
+ */
+ private $namespace;
+
+ /**
+ * Set the namespace of this cache.
+ * This is useful for cache types (like memcache or static variables) where there is one large
+ * flat area of memory shared across all instances of the cache.
+ *
+ * @param string $namespace Namespace for cache
+ *
+ * @return void
+ */
+ public function setNamespace($namespace = "default") {
+ $this->namespace = $namespace;
+ }
+
+ /**
+ * Get the namespace currently defined.
+ *
+ * @return string
+ */
+ public function getNamespace() {
+ return $this->namespace;
+ }
+}
diff --git a/engine/classes/ElggSite.php b/engine/classes/ElggSite.php
new file mode 100644
index 000000000..1fe49b85c
--- /dev/null
+++ b/engine/classes/ElggSite.php
@@ -0,0 +1,459 @@
+<?php
+/**
+ * A Site entity.
+ *
+ * ElggSite represents a single site entity.
+ *
+ * An ElggSite object is an ElggEntity child class with the subtype
+ * of "site." It is created upon installation and hold all the
+ * information about a site:
+ * - name
+ * - description
+ * - url
+ *
+ * Every ElggEntity (except ElggSite) belongs to a site.
+ *
+ * @internal ElggSite represents a single row from the sites_entity
+ * table, as well as the corresponding ElggEntity row from the entities table.
+ *
+ * @warning Multiple site support isn't fully developed.
+ *
+ * @package Elgg.Core
+ * @subpackage DataMode.Site
+ * @link http://docs.elgg.org/DataModel/Sites
+ *
+ * @property string $name The name or title of the website
+ * @property string $description A motto, mission statement, or description of the website
+ * @property string $url The root web address for the site, including trailing slash
+ */
+class ElggSite extends ElggEntity {
+
+ /**
+ * Initialise the attributes array.
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * Place your base parameters here.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = "site";
+ $this->attributes['name'] = NULL;
+ $this->attributes['description'] = NULL;
+ $this->attributes['url'] = NULL;
+ $this->attributes['tables_split'] = 2;
+ }
+
+ /**
+ * Load or create a new ElggSite.
+ *
+ * If no arguments are passed, create a new entity.
+ *
+ * If an argument is passed attempt to load a full Site entity. Arguments
+ * can be:
+ * - The GUID of a site entity.
+ * - A URL as stored in ElggSite->url
+ * - A DB result object with a guid property
+ *
+ * @param mixed $guid If an int, load that GUID. If a db row then will
+ * load the rest of the data.
+ *
+ * @throws IOException If passed an incorrect guid
+ * @throws InvalidParameterException If passed an Elgg* Entity that isn't an ElggSite
+ */
+ function __construct($guid = null) {
+ $this->initializeAttributes();
+
+ // compatibility for 1.7 api.
+ $this->initialise_attributes(false);
+
+ if (!empty($guid)) {
+ // Is $guid is a DB entity table row
+ if ($guid instanceof stdClass) {
+ // Load the rest
+ if (!$this->load($guid)) {
+ $msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
+ throw new IOException($msg);
+ }
+
+ // Is $guid is an ElggSite? Use a copy constructor
+ } else if ($guid instanceof ElggSite) {
+ elgg_deprecated_notice('This type of usage of the ElggSite constructor was deprecated. Please use the clone method.', 1.7);
+
+ foreach ($guid->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+
+ // Is this is an ElggEntity but not an ElggSite = ERROR!
+ } else if ($guid instanceof ElggEntity) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggSite'));
+
+ // See if this is a URL
+ } else if (strpos($guid, "http") !== false) {
+ $guid = get_site_by_url($guid);
+ foreach ($guid->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+
+ // Is it a GUID
+ } else if (is_numeric($guid)) {
+ if (!$this->load($guid)) {
+ throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
+ }
+ } else {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnrecognisedValue'));
+ }
+ }
+ }
+
+ /**
+ * Loads the full ElggSite when given a guid.
+ *
+ * @param mixed $guid GUID of ElggSite entity or database row object
+ *
+ * @return bool
+ * @throws InvalidClassException
+ */
+ protected function load($guid) {
+ $attr_loader = new ElggAttributeLoader(get_class(), 'site', $this->attributes);
+ $attr_loader->requires_access_control = !($this instanceof ElggPlugin);
+ $attr_loader->secondary_loader = 'get_site_entity_as_row';
+
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
+ }
+
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ cache_entity($this);
+
+ return true;
+ }
+
+ /**
+ * Saves site-specific attributes.
+ *
+ * @internal Site attributes are saved in the sites_entity table.
+ *
+ * @return bool
+ */
+ public function save() {
+ global $CONFIG;
+
+ // Save generic stuff
+ if (!parent::save()) {
+ return false;
+ }
+
+ // make sure the site guid is set (if not, set to self)
+ if (!$this->get('site_guid')) {
+ $guid = $this->get('guid');
+ update_data("UPDATE {$CONFIG->dbprefix}entities SET site_guid=$guid
+ WHERE guid=$guid");
+ }
+
+ // Now save specific stuff
+ return create_site_entity($this->get('guid'), $this->get('name'),
+ $this->get('description'), $this->get('url'));
+ }
+
+ /**
+ * Delete the site.
+ *
+ * @note You cannot delete the current site.
+ *
+ * @return bool
+ * @throws SecurityException
+ */
+ public function delete() {
+ global $CONFIG;
+ if ($CONFIG->site->getGUID() == $this->guid) {
+ throw new SecurityException('SecurityException:deletedisablecurrentsite');
+ }
+
+ return parent::delete();
+ }
+
+ /**
+ * Disable the site
+ *
+ * @note You cannot disable the current site.
+ *
+ * @param string $reason Optional reason for disabling
+ * @param bool $recursive Recursively disable all contained entities?
+ *
+ * @return bool
+ * @throws SecurityException
+ */
+ public function disable($reason = "", $recursive = true) {
+ global $CONFIG;
+
+ if ($CONFIG->site->getGUID() == $this->guid) {
+ throw new SecurityException('SecurityException:deletedisablecurrentsite');
+ }
+
+ return parent::disable($reason, $recursive);
+ }
+
+ /**
+ * Gets an array of ElggUser entities who are members of the site.
+ *
+ * @param array $options An associative array for key => value parameters
+ * accepted by elgg_get_entities(). Common parameters
+ * include 'limit', and 'offset'.
+ * Note: this was $limit before version 1.8
+ * @param int $offset Offset @deprecated parameter
+ *
+ * @todo remove $offset in 2.0
+ *
+ * @return array of ElggUsers
+ */
+ public function getMembers($options = array(), $offset = 0) {
+ if (!is_array($options)) {
+ elgg_deprecated_notice("ElggSite::getMembers uses different arguments!", 1.8);
+ $options = array(
+ 'limit' => $options,
+ 'offset' => $offset,
+ );
+ }
+
+ $defaults = array(
+ 'site_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'relationship' => 'member_of_site',
+ 'relationship_guid' => $this->getGUID(),
+ 'inverse_relationship' => TRUE,
+ 'type' => 'user',
+ );
+
+ $options = array_merge($defaults, $options);
+
+ return elgg_get_entities_from_relationship($options);
+ }
+
+ /**
+ * List the members of this site
+ *
+ * @param array $options An associative array for key => value parameters
+ * accepted by elgg_list_entities(). Common parameters
+ * include 'full_view', 'limit', and 'offset'.
+ *
+ * @return string
+ * @since 1.8.0
+ */
+ public function listMembers($options = array()) {
+ $defaults = array(
+ 'site_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'relationship' => 'member_of_site',
+ 'relationship_guid' => $this->getGUID(),
+ 'inverse_relationship' => TRUE,
+ 'type' => 'user',
+ );
+
+ $options = array_merge($defaults, $options);
+
+ return elgg_list_entities_from_relationship($options);
+ }
+
+ /**
+ * Adds a user to the site.
+ *
+ * @param int $user_guid GUID
+ *
+ * @return bool
+ */
+ public function addUser($user_guid) {
+ return add_site_user($this->getGUID(), $user_guid);
+ }
+
+ /**
+ * Removes a user from the site.
+ *
+ * @param int $user_guid GUID
+ *
+ * @return bool
+ */
+ public function removeUser($user_guid) {
+ return remove_site_user($this->getGUID(), $user_guid);
+ }
+
+ /**
+ * Returns an array of ElggObject entities that belong to the site.
+ *
+ * @warning This only returns objects that have been explicitly added to the
+ * site through addObject()
+ *
+ * @param string $subtype Entity subtype
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return array
+ */
+ public function getObjects($subtype = "", $limit = 10, $offset = 0) {
+ return get_site_objects($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Adds an object to the site.
+ *
+ * @param int $object_guid GUID
+ *
+ * @return bool
+ */
+ public function addObject($object_guid) {
+ return add_site_object($this->getGUID(), $object_guid);
+ }
+
+ /**
+ * Remvoes an object from the site.
+ *
+ * @param int $object_guid GUID
+ *
+ * @return bool
+ */
+ public function removeObject($object_guid) {
+ return remove_site_object($this->getGUID(), $object_guid);
+ }
+
+ /**
+ * Get the collections associated with a site.
+ *
+ * @param string $subtype Subtype
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return unknown
+ * @deprecated 1.8 Was never implemented
+ */
+ public function getCollections($subtype = "", $limit = 10, $offset = 0) {
+ elgg_deprecated_notice("ElggSite::getCollections() is deprecated", 1.8);
+ get_site_collections($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /*
+ * EXPORTABLE INTERFACE
+ */
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array_merge(parent::getExportableValues(), array(
+ 'name',
+ 'description',
+ 'url',
+ ));
+ }
+
+ /**
+ * Halts bootup and redirects to the site front page
+ * if site is in walled garden mode, no user is logged in,
+ * and the URL is not a public page.
+ *
+ * @link http://docs.elgg.org/Tutorials/WalledGarden
+ *
+ * @return void
+ * @since 1.8.0
+ */
+ public function checkWalledGarden() {
+ global $CONFIG;
+
+ // command line calls should not invoke the walled garden check
+ if (PHP_SAPI === 'cli') {
+ return;
+ }
+
+ if ($CONFIG->walled_garden) {
+ if ($CONFIG->default_access == ACCESS_PUBLIC) {
+ $CONFIG->default_access = ACCESS_LOGGED_IN;
+ }
+ elgg_register_plugin_hook_handler(
+ 'access:collections:write',
+ 'user',
+ '_elgg_walled_garden_remove_public_access');
+
+ if (!elgg_is_logged_in()) {
+ // hook into the index system call at the highest priority
+ elgg_register_plugin_hook_handler('index', 'system', 'elgg_walled_garden_index', 1);
+
+ if (!$this->isPublicPage()) {
+ $_SESSION['last_forward_from'] = current_page_url();
+ register_error(elgg_echo('loggedinrequired'));
+ forward();
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns if a URL is public for this site when in Walled Garden mode.
+ *
+ * Pages are registered to be public by {@elgg_plugin_hook public_pages walled_garden}.
+ *
+ * @param string $url Defaults to the current URL.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+ public function isPublicPage($url = '') {
+ global $CONFIG;
+
+ if (empty($url)) {
+ $url = current_page_url();
+
+ // do not check against URL queries
+ if ($pos = strpos($url, '?')) {
+ $url = substr($url, 0, $pos);
+ }
+ }
+
+ // always allow index page
+ if ($url == elgg_get_site_url($this->guid)) {
+ return TRUE;
+ }
+
+ // default public pages
+ $defaults = array(
+ 'walled_garden/.*',
+ 'login',
+ 'action/login',
+ 'register',
+ 'action/register',
+ 'forgotpassword',
+ 'resetpassword',
+ 'action/user/requestnewpassword',
+ 'action/user/passwordreset',
+ 'action/security/refreshtoken',
+ 'ajax/view/js/languages',
+ 'upgrade\.php',
+ 'xml-rpc\.php',
+ 'mt/mt-xmlrpc\.cgi',
+ 'css/.*',
+ 'js/.*',
+ 'cache/css/.*',
+ 'cache/js/.*',
+ 'cron/.*',
+ 'services/.*',
+ );
+
+ // include a hook for plugin authors to include public pages
+ $plugins = elgg_trigger_plugin_hook('public_pages', 'walled_garden', NULL, array());
+
+ // lookup admin-specific public pages
+
+ // allow public pages
+ foreach (array_merge($defaults, $plugins) as $public) {
+ $pattern = "`^{$CONFIG->url}$public/*$`i";
+ if (preg_match($pattern, $url)) {
+ return TRUE;
+ }
+ }
+
+ // non-public page
+ return FALSE;
+ }
+}
diff --git a/engine/classes/ElggStaticVariableCache.php b/engine/classes/ElggStaticVariableCache.php
new file mode 100644
index 000000000..17d849400
--- /dev/null
+++ b/engine/classes/ElggStaticVariableCache.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * ElggStaticVariableCache
+ * Dummy cache which stores values in a static array. Using this makes future
+ * replacements to other caching back ends (eg memcache) much easier.
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+class ElggStaticVariableCache extends ElggSharedMemoryCache {
+ /**
+ * The cache.
+ *
+ * @var unknown_type
+ */
+ private static $__cache;
+
+ /**
+ * Create the variable cache.
+ *
+ * This function creates a variable cache in a static variable in
+ * memory, optionally with a given namespace (to avoid overlap).
+ *
+ * @param string $namespace The namespace for this cache to write to.
+ * @note namespaces of the same name are shared!
+ */
+ function __construct($namespace = 'default') {
+ $this->setNamespace($namespace);
+ $this->clear();
+ }
+
+ /**
+ * Save a key
+ *
+ * @param string $key Name
+ * @param string $data Value
+ *
+ * @return boolean
+ */
+ public function save($key, $data) {
+ $namespace = $this->getNamespace();
+
+ ElggStaticVariableCache::$__cache[$namespace][$key] = $data;
+
+ return true;
+ }
+
+ /**
+ * Load a key
+ *
+ * @param string $key Name
+ * @param int $offset Offset
+ * @param int $limit Limit
+ *
+ * @return string
+ */
+ public function load($key, $offset = 0, $limit = null) {
+ $namespace = $this->getNamespace();
+
+ if (isset(ElggStaticVariableCache::$__cache[$namespace][$key])) {
+ return ElggStaticVariableCache::$__cache[$namespace][$key];
+ }
+
+ return false;
+ }
+
+ /**
+ * Invalidate a given key.
+ *
+ * @param string $key Name
+ *
+ * @return bool
+ */
+ public function delete($key) {
+ $namespace = $this->getNamespace();
+
+ unset(ElggStaticVariableCache::$__cache[$namespace][$key]);
+
+ return true;
+ }
+
+ /**
+ * This was probably meant to delete everything?
+ *
+ * @return void
+ */
+ public function clear() {
+ $namespace = $this->getNamespace();
+
+ if (!isset(ElggStaticVariableCache::$__cache)) {
+ ElggStaticVariableCache::$__cache = array();
+ }
+
+ ElggStaticVariableCache::$__cache[$namespace] = array();
+ }
+}
diff --git a/engine/classes/ElggTranslit.php b/engine/classes/ElggTranslit.php
new file mode 100644
index 000000000..676c59fc8
--- /dev/null
+++ b/engine/classes/ElggTranslit.php
@@ -0,0 +1,262 @@
+<?php
+/**
+ * Elgg Transliterate
+ *
+ * For creating "friendly titles" for URLs
+ *
+ * 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.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the LGPL. For more information, see
+ * <http://www.doctrine-project.org>.
+ *
+ * @author Konsta Vesterinen <kvesteri@cc.hut.fi>
+ * @author Jonathan H. Wage <jonwage@gmail.com>
+ *
+ * @author Steve Clay <steve@mrclay.org>
+ * @package Elgg.Core
+ *
+ * @access private Plugin authors should not use this directly
+ */
+class ElggTranslit {
+
+ /**
+ * Create a version of a string for embedding in a URL
+ * @param string $string a UTF-8 string
+ * @param string $separator
+ * @return string
+ */
+ static public function urlize($string, $separator = '-') {
+ // Iñtërnâtiônàlizætiøn, AND 日本語!
+
+ // try to force combined chars because the translit map and others expect it
+ if (self::hasNormalizerSupport()) {
+ $nfc = normalizer_normalize($string);
+ if (is_string($nfc)) {
+ $string = $nfc;
+ }
+ }
+ // Internationalization, AND 日本語!
+ $string = self::transliterateAscii($string);
+
+ // more translation
+ $string = strtr($string, array(
+ // Euro/GBP
+ "\xE2\x82\xAC" /* € */ => 'E', "\xC2\xA3" /* £ */ => 'GBP',
+ ));
+
+ // remove all ASCII except 0-9a-zA-Z, hyphen, underscore, and whitespace
+ // note: "x" modifier did not work with this pattern.
+ $string = preg_replace('~['
+ . '\x00-\x08' # control chars
+ . '\x0b\x0c' # vert tab, form feed
+ . '\x0e-\x1f' # control chars
+ . '\x21-\x2c' # ! ... ,
+ . '\x2e\x2f' # . slash
+ . '\x3a-\x40' # : ... @
+ . '\x5b-\x5e' # [ ... ^
+ . '\x60' # `
+ . '\x7b-\x7f' # { ... DEL
+ . ']~', '', $string);
+ $string = strtr($string, '', '');
+
+ // internationalization, and 日本語!
+ // note: not using elgg_strtolower to keep this class portable
+ $string = is_callable('mb_strtolower')
+ ? mb_strtolower($string, 'UTF-8')
+ : strtolower($string);
+
+ // split by ASCII chars not in 0-9a-zA-Z
+ // note: we cannot use [^0-9a-zA-Z] because that matches multibyte chars.
+ // note: "x" modifier did not work with this pattern.
+ $pattern = '~['
+ . '\x00-\x2f' # controls ... slash
+ . '\x3a-\x40' # : ... @
+ . '\x5b-\x60' # [ ... `
+ . '\x7b-\x7f' # { ... DEL
+ . ']+~x';
+
+ // ['internationalization', 'and', '日本語']
+ $words = preg_split($pattern, $string, -1, PREG_SPLIT_NO_EMPTY);
+
+ // ['internationalization', 'and', '%E6%97%A5%E6%9C%AC%E8%AA%9E']
+ $words = array_map('urlencode', $words);
+
+ // internationalization-and-%E6%97%A5%E6%9C%AC%E8%AA%9E
+ return implode($separator, $words);
+ }
+
+ /**
+ * Transliterate Western multibyte chars to ASCII
+ * @param string $utf8 a UTF-8 string
+ * @return string
+ */
+ static public function transliterateAscii($utf8) {
+ static $map = null;
+ if (!preg_match('/[\x80-\xff]/', $utf8)) {
+ return $utf8;
+ }
+ if (null === $map) {
+ $map = self::getAsciiTranslitMap();
+ }
+ return strtr($utf8, $map);
+ }
+
+ /**
+ * Get array of UTF-8 (NFC) character replacements.
+ *
+ * @return array
+ */
+ static public function getAsciiTranslitMap() {
+ return array(
+ // Decompositions for Latin-1 Supplement
+ "\xC2\xAA" /* ª */ => 'a', "\xC2\xBA" /* º */ => 'o', "\xC3\x80" /* À */ => 'A',
+ "\xC3\x81" /* à */ => 'A', "\xC3\x82" /* Â */ => 'A', "\xC3\x83" /* Ã */ => 'A',
+ "\xC3\x84" /* Ä */ => 'A', "\xC3\x85" /* Å */ => 'A', "\xC3\x86" /* Æ */ => 'AE',
+ "\xC3\x87" /* Ç */ => 'C', "\xC3\x88" /* È */ => 'E', "\xC3\x89" /* É */ => 'E',
+ "\xC3\x8A" /* Ê */ => 'E', "\xC3\x8B" /* Ë */ => 'E', "\xC3\x8C" /* Ì */ => 'I',
+ "\xC3\x8D" /* Ã */ => 'I', "\xC3\x8E" /* ÃŽ */ => 'I', "\xC3\x8F" /* Ã */ => 'I',
+ "\xC3\x90" /* à */ => 'D', "\xC3\x91" /* Ñ */ => 'N', "\xC3\x92" /* Ò */ => 'O',
+ "\xC3\x93" /* Ó */ => 'O', "\xC3\x94" /* Ô */ => 'O', "\xC3\x95" /* Õ */ => 'O',
+ "\xC3\x96" /* Ö */ => 'O', "\xC3\x99" /* Ù */ => 'U', "\xC3\x9A" /* Ú */ => 'U',
+ "\xC3\x9B" /* Û */ => 'U', "\xC3\x9C" /* Ü */ => 'U', "\xC3\x9D" /* à */ => 'Y',
+ "\xC3\x9E" /* Þ */ => 'TH', "\xC3\x9F" /* ß */ => 'ss', "\xC3\xA0" /* à */ => 'a',
+ "\xC3\xA1" /* á */ => 'a', "\xC3\xA2" /* â */ => 'a', "\xC3\xA3" /* ã */ => 'a',
+ "\xC3\xA4" /* ä */ => 'a', "\xC3\xA5" /* å */ => 'a', "\xC3\xA6" /* æ */ => 'ae',
+ "\xC3\xA7" /* ç */ => 'c', "\xC3\xA8" /* è */ => 'e', "\xC3\xA9" /* é */ => 'e',
+ "\xC3\xAA" /* ê */ => 'e', "\xC3\xAB" /* ë */ => 'e', "\xC3\xAC" /* ì */ => 'i',
+ "\xC3\xAD" /* í */ => 'i', "\xC3\xAE" /* î */ => 'i', "\xC3\xAF" /* ï */ => 'i',
+ "\xC3\xB0" /* ð */ => 'd', "\xC3\xB1" /* ñ */ => 'n', "\xC3\xB2" /* ò */ => 'o',
+ "\xC3\xB3" /* ó */ => 'o', "\xC3\xB4" /* ô */ => 'o', "\xC3\xB5" /* õ */ => 'o',
+ "\xC3\xB6" /* ö */ => 'o', "\xC3\xB8" /* ø */ => 'o', "\xC3\xB9" /* ù */ => 'u',
+ "\xC3\xBA" /* ú */ => 'u', "\xC3\xBB" /* û */ => 'u', "\xC3\xBC" /* ü */ => 'u',
+ "\xC3\xBD" /* ý */ => 'y', "\xC3\xBE" /* þ */ => 'th', "\xC3\xBF" /* ÿ */ => 'y',
+ "\xC3\x98" /* Ø */ => 'O',
+ // Decompositions for Latin Extended-A
+ "\xC4\x80" /* Ä€ */ => 'A', "\xC4\x81" /* Ä */ => 'a', "\xC4\x82" /* Ä‚ */ => 'A',
+ "\xC4\x83" /* ă */ => 'a', "\xC4\x84" /* Ą */ => 'A', "\xC4\x85" /* ą */ => 'a',
+ "\xC4\x86" /* Ć */ => 'C', "\xC4\x87" /* ć */ => 'c', "\xC4\x88" /* Ĉ */ => 'C',
+ "\xC4\x89" /* ĉ */ => 'c', "\xC4\x8A" /* Ċ */ => 'C', "\xC4\x8B" /* ċ */ => 'c',
+ "\xC4\x8C" /* ÄŒ */ => 'C', "\xC4\x8D" /* Ä */ => 'c', "\xC4\x8E" /* ÄŽ */ => 'D',
+ "\xC4\x8F" /* Ä */ => 'd', "\xC4\x90" /* Ä */ => 'D', "\xC4\x91" /* Ä‘ */ => 'd',
+ "\xC4\x92" /* Ä’ */ => 'E', "\xC4\x93" /* Ä“ */ => 'e', "\xC4\x94" /* Ä” */ => 'E',
+ "\xC4\x95" /* Ä• */ => 'e', "\xC4\x96" /* Ä– */ => 'E', "\xC4\x97" /* Ä— */ => 'e',
+ "\xC4\x98" /* Ę */ => 'E', "\xC4\x99" /* ę */ => 'e', "\xC4\x9A" /* Ě */ => 'E',
+ "\xC4\x9B" /* Ä› */ => 'e', "\xC4\x9C" /* Äœ */ => 'G', "\xC4\x9D" /* Ä */ => 'g',
+ "\xC4\x9E" /* Äž */ => 'G', "\xC4\x9F" /* ÄŸ */ => 'g', "\xC4\xA0" /* Ä  */ => 'G',
+ "\xC4\xA1" /* ġ */ => 'g', "\xC4\xA2" /* Ģ */ => 'G', "\xC4\xA3" /* ģ */ => 'g',
+ "\xC4\xA4" /* Ĥ */ => 'H', "\xC4\xA5" /* ĥ */ => 'h', "\xC4\xA6" /* Ħ */ => 'H',
+ "\xC4\xA7" /* ħ */ => 'h', "\xC4\xA8" /* Ĩ */ => 'I', "\xC4\xA9" /* ĩ */ => 'i',
+ "\xC4\xAA" /* Ī */ => 'I', "\xC4\xAB" /* ī */ => 'i', "\xC4\xAC" /* Ĭ */ => 'I',
+ "\xC4\xAD" /* ĭ */ => 'i', "\xC4\xAE" /* Į */ => 'I', "\xC4\xAF" /* į */ => 'i',
+ "\xC4\xB0" /* İ */ => 'I', "\xC4\xB1" /* ı */ => 'i', "\xC4\xB2" /* IJ */ => 'IJ',
+ "\xC4\xB3" /* ij */ => 'ij', "\xC4\xB4" /* Ĵ */ => 'J', "\xC4\xB5" /* ĵ */ => 'j',
+ "\xC4\xB6" /* Ķ */ => 'K', "\xC4\xB7" /* ķ */ => 'k', "\xC4\xB8" /* ĸ */ => 'k',
+ "\xC4\xB9" /* Ĺ */ => 'L', "\xC4\xBA" /* ĺ */ => 'l', "\xC4\xBB" /* Ļ */ => 'L',
+ "\xC4\xBC" /* ļ */ => 'l', "\xC4\xBD" /* Ľ */ => 'L', "\xC4\xBE" /* ľ */ => 'l',
+ "\xC4\xBF" /* Ŀ */ => 'L', "\xC5\x80" /* ŀ */ => 'l', "\xC5\x81" /* Š*/ => 'L',
+ "\xC5\x82" /* ł */ => 'l', "\xC5\x83" /* Ń */ => 'N', "\xC5\x84" /* ń */ => 'n',
+ "\xC5\x85" /* Ņ */ => 'N', "\xC5\x86" /* ņ */ => 'n', "\xC5\x87" /* Ň */ => 'N',
+ "\xC5\x88" /* ň */ => 'n', "\xC5\x89" /* ʼn */ => 'N', "\xC5\x8A" /* Ŋ */ => 'n',
+ "\xC5\x8B" /* ŋ */ => 'N', "\xC5\x8C" /* Ō */ => 'O', "\xC5\x8D" /* Š*/ => 'o',
+ "\xC5\x8E" /* ÅŽ */ => 'O', "\xC5\x8F" /* Å */ => 'o', "\xC5\x90" /* Å */ => 'O',
+ "\xC5\x91" /* Å‘ */ => 'o', "\xC5\x92" /* Å’ */ => 'OE', "\xC5\x93" /* Å“ */ => 'oe',
+ "\xC5\x94" /* Å” */ => 'R', "\xC5\x95" /* Å• */ => 'r', "\xC5\x96" /* Å– */ => 'R',
+ "\xC5\x97" /* ŗ */ => 'r', "\xC5\x98" /* Ř */ => 'R', "\xC5\x99" /* ř */ => 'r',
+ "\xC5\x9A" /* Ś */ => 'S', "\xC5\x9B" /* ś */ => 's', "\xC5\x9C" /* Ŝ */ => 'S',
+ "\xC5\x9D" /* Å */ => 's', "\xC5\x9E" /* Åž */ => 'S', "\xC5\x9F" /* ÅŸ */ => 's',
+ "\xC5\xA0" /* Š */ => 'S', "\xC5\xA1" /* š */ => 's', "\xC5\xA2" /* Ţ */ => 'T',
+ "\xC5\xA3" /* ţ */ => 't', "\xC5\xA4" /* Ť */ => 'T', "\xC5\xA5" /* ť */ => 't',
+ "\xC5\xA6" /* Ŧ */ => 'T', "\xC5\xA7" /* ŧ */ => 't', "\xC5\xA8" /* Ũ */ => 'U',
+ "\xC5\xA9" /* ũ */ => 'u', "\xC5\xAA" /* Ū */ => 'U', "\xC5\xAB" /* ū */ => 'u',
+ "\xC5\xAC" /* Ŭ */ => 'U', "\xC5\xAD" /* ŭ */ => 'u', "\xC5\xAE" /* Ů */ => 'U',
+ "\xC5\xAF" /* ů */ => 'u', "\xC5\xB0" /* Ű */ => 'U', "\xC5\xB1" /* ű */ => 'u',
+ "\xC5\xB2" /* Ų */ => 'U', "\xC5\xB3" /* ų */ => 'u', "\xC5\xB4" /* Ŵ */ => 'W',
+ "\xC5\xB5" /* ŵ */ => 'w', "\xC5\xB6" /* Ŷ */ => 'Y', "\xC5\xB7" /* ŷ */ => 'y',
+ "\xC5\xB8" /* Ÿ */ => 'Y', "\xC5\xB9" /* Ź */ => 'Z', "\xC5\xBA" /* ź */ => 'z',
+ "\xC5\xBB" /* Ż */ => 'Z', "\xC5\xBC" /* ż */ => 'z', "\xC5\xBD" /* Ž */ => 'Z',
+ "\xC5\xBE" /* ž */ => 'z', "\xC5\xBF" /* ſ */ => 's',
+ // Decompositions for Latin Extended-B
+ "\xC8\x98" /* Ș */ => 'S', "\xC8\x99" /* ș */ => 's',
+ "\xC8\x9A" /* Èš */ => 'T', "\xC8\x9B" /* È› */ => 't',
+ // unmarked
+ "\xC6\xA0" /* Æ  */ => 'O', "\xC6\xA1" /* Æ¡ */ => 'o',
+ "\xC6\xAF" /* Ư */ => 'U', "\xC6\xB0" /* ư */ => 'u',
+ // grave accent
+ "\xE1\xBA\xA6" /* Ầ */ => 'A', "\xE1\xBA\xA7" /* ầ */ => 'a',
+ "\xE1\xBA\xB0" /* Ằ */ => 'A', "\xE1\xBA\xB1" /* ằ */ => 'a',
+ "\xE1\xBB\x80" /* Ề */ => 'E', "\xE1\xBB\x81" /* Ỡ*/ => 'e',
+ "\xE1\xBB\x92" /* Ồ */ => 'O', "\xE1\xBB\x93" /* ồ */ => 'o',
+ "\xE1\xBB\x9C" /* Ờ */ => 'O', "\xE1\xBB\x9D" /* Ỡ*/ => 'o',
+ "\xE1\xBB\xAA" /* Ừ */ => 'U', "\xE1\xBB\xAB" /* ừ */ => 'u',
+ "\xE1\xBB\xB2" /* Ỳ */ => 'Y', "\xE1\xBB\xB3" /* ỳ */ => 'y',
+ // hook
+ "\xE1\xBA\xA2" /* Ả */ => 'A', "\xE1\xBA\xA3" /* ả */ => 'a',
+ "\xE1\xBA\xA8" /* Ẩ */ => 'A', "\xE1\xBA\xA9" /* ẩ */ => 'a',
+ "\xE1\xBA\xB2" /* Ẳ */ => 'A', "\xE1\xBA\xB3" /* ẳ */ => 'a',
+ "\xE1\xBA\xBA" /* Ẻ */ => 'E', "\xE1\xBA\xBB" /* ẻ */ => 'e',
+ "\xE1\xBB\x82" /* Ể */ => 'E', "\xE1\xBB\x83" /* ể */ => 'e',
+ "\xE1\xBB\x88" /* Ỉ */ => 'I', "\xE1\xBB\x89" /* ỉ */ => 'i',
+ "\xE1\xBB\x8E" /* Ỏ */ => 'O', "\xE1\xBB\x8F" /* Ỡ*/ => 'o',
+ "\xE1\xBB\x94" /* Ổ */ => 'O', "\xE1\xBB\x95" /* ổ */ => 'o',
+ "\xE1\xBB\x9E" /* Ở */ => 'O', "\xE1\xBB\x9F" /* ở */ => 'o',
+ "\xE1\xBB\xA6" /* Ủ */ => 'U', "\xE1\xBB\xA7" /* ủ */ => 'u',
+ "\xE1\xBB\xAC" /* Ử */ => 'U', "\xE1\xBB\xAD" /* ử */ => 'u',
+ "\xE1\xBB\xB6" /* Ỷ */ => 'Y', "\xE1\xBB\xB7" /* ỷ */ => 'y',
+ // tilde
+ "\xE1\xBA\xAA" /* Ẫ */ => 'A', "\xE1\xBA\xAB" /* ẫ */ => 'a',
+ "\xE1\xBA\xB4" /* Ẵ */ => 'A', "\xE1\xBA\xB5" /* ẵ */ => 'a',
+ "\xE1\xBA\xBC" /* Ẽ */ => 'E', "\xE1\xBA\xBD" /* ẽ */ => 'e',
+ "\xE1\xBB\x84" /* Ễ */ => 'E', "\xE1\xBB\x85" /* ễ */ => 'e',
+ "\xE1\xBB\x96" /* á»– */ => 'O', "\xE1\xBB\x97" /* á»— */ => 'o',
+ "\xE1\xBB\xA0" /* Ỡ */ => 'O', "\xE1\xBB\xA1" /* ỡ */ => 'o',
+ "\xE1\xBB\xAE" /* Ữ */ => 'U', "\xE1\xBB\xAF" /* ữ */ => 'u',
+ "\xE1\xBB\xB8" /* Ỹ */ => 'Y', "\xE1\xBB\xB9" /* ỹ */ => 'y',
+ // acute accent
+ "\xE1\xBA\xA4" /* Ấ */ => 'A', "\xE1\xBA\xA5" /* ấ */ => 'a',
+ "\xE1\xBA\xAE" /* Ắ */ => 'A', "\xE1\xBA\xAF" /* ắ */ => 'a',
+ "\xE1\xBA\xBE" /* Ế */ => 'E', "\xE1\xBA\xBF" /* ế */ => 'e',
+ "\xE1\xBB\x90" /* Ỡ*/ => 'O', "\xE1\xBB\x91" /* ố */ => 'o',
+ "\xE1\xBB\x9A" /* Ớ */ => 'O', "\xE1\xBB\x9B" /* ớ */ => 'o',
+ "\xE1\xBB\xA8" /* Ứ */ => 'U', "\xE1\xBB\xA9" /* ứ */ => 'u',
+ // dot below
+ "\xE1\xBA\xA0" /* Ạ */ => 'A', "\xE1\xBA\xA1" /* ạ */ => 'a',
+ "\xE1\xBA\xAC" /* Ậ */ => 'A', "\xE1\xBA\xAD" /* ậ */ => 'a',
+ "\xE1\xBA\xB6" /* Ặ */ => 'A', "\xE1\xBA\xB7" /* ặ */ => 'a',
+ "\xE1\xBA\xB8" /* Ẹ */ => 'E', "\xE1\xBA\xB9" /* ẹ */ => 'e',
+ "\xE1\xBB\x86" /* Ệ */ => 'E', "\xE1\xBB\x87" /* ệ */ => 'e',
+ "\xE1\xBB\x8A" /* Ị */ => 'I', "\xE1\xBB\x8B" /* ị */ => 'i',
+ "\xE1\xBB\x8C" /* Ọ */ => 'O', "\xE1\xBB\x8D" /* Ỡ*/ => 'o',
+ "\xE1\xBB\x98" /* Ộ */ => 'O', "\xE1\xBB\x99" /* ộ */ => 'o',
+ "\xE1\xBB\xA2" /* Ợ */ => 'O', "\xE1\xBB\xA3" /* ợ */ => 'o',
+ "\xE1\xBB\xA4" /* Ụ */ => 'U', "\xE1\xBB\xA5" /* ụ */ => 'u',
+ "\xE1\xBB\xB0" /* á»° */ => 'U', "\xE1\xBB\xB1" /* á»± */ => 'u',
+ "\xE1\xBB\xB4" /* Ỵ */ => 'Y', "\xE1\xBB\xB5" /* ỵ */ => 'y',
+ );
+ }
+
+ /**
+ * Tests that "normalizer_normalize" exists and works
+ * @return bool
+ */
+ static public function hasNormalizerSupport() {
+ static $ret = null;
+ if (null === $ret) {
+ $form_c = "\xC3\x85"; // 'LATIN CAPITAL LETTER A WITH RING ABOVE' (U+00C5)
+ $form_d = "A\xCC\x8A"; // A followed by 'COMBINING RING ABOVE' (U+030A)
+ $ret = (function_exists('normalizer_normalize')
+ && $form_c === normalizer_normalize($form_d));
+ }
+ return $ret;
+ }
+}
diff --git a/engine/classes/ElggUser.php b/engine/classes/ElggUser.php
new file mode 100644
index 000000000..6c1cdc1de
--- /dev/null
+++ b/engine/classes/ElggUser.php
@@ -0,0 +1,585 @@
+<?php
+/**
+ * ElggUser
+ *
+ * Representation of a "user" in the system.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.User
+ *
+ * @property string $name The display name that the user will be known by in the network
+ * @property string $username The short, reference name for the user in the network
+ * @property string $email The email address to which Elgg will send email notifications
+ * @property string $language The language preference of the user (ISO 639-1 formatted)
+ * @property string $banned 'yes' if the user is banned from the network, 'no' otherwise
+ * @property string $admin 'yes' if the user is an administrator of the network, 'no' otherwise
+ * @property string $password The hashed password of the user
+ * @property string $salt The salt used to secure the password before hashing
+ */
+class ElggUser extends ElggEntity
+ implements Friendable {
+
+ /**
+ * Initialise the attributes array.
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * Place your base parameters here.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['type'] = "user";
+ $this->attributes['name'] = NULL;
+ $this->attributes['username'] = NULL;
+ $this->attributes['password'] = NULL;
+ $this->attributes['salt'] = NULL;
+ $this->attributes['email'] = NULL;
+ $this->attributes['language'] = NULL;
+ $this->attributes['code'] = NULL;
+ $this->attributes['banned'] = "no";
+ $this->attributes['admin'] = 'no';
+ $this->attributes['tables_split'] = 2;
+ }
+
+ /**
+ * Construct a new user entity, optionally from a given id value.
+ *
+ * @param mixed $guid If an int, load that GUID.
+ * If an entity table db row then will load the rest of the data.
+ *
+ * @throws Exception if there was a problem creating the user.
+ */
+ function __construct($guid = null) {
+ $this->initializeAttributes();
+
+ // compatibility for 1.7 api.
+ $this->initialise_attributes(false);
+
+ if (!empty($guid)) {
+ // Is $guid is a DB entity row
+ if ($guid instanceof stdClass) {
+ // Load the rest
+ if (!$this->load($guid)) {
+ $msg = elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid->guid));
+ throw new IOException($msg);
+ }
+
+ // See if this is a username
+ } else if (is_string($guid)) {
+ $user = get_user_by_username($guid);
+ if ($user) {
+ foreach ($user->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+ }
+
+ // Is $guid is an ElggUser? Use a copy constructor
+ } else if ($guid instanceof ElggUser) {
+ elgg_deprecated_notice('This type of usage of the ElggUser constructor was deprecated. Please use the clone method.', 1.7);
+
+ foreach ($guid->attributes as $key => $value) {
+ $this->attributes[$key] = $value;
+ }
+
+ // Is this is an ElggEntity but not an ElggUser = ERROR!
+ } else if ($guid instanceof ElggEntity) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonElggUser'));
+
+ // Is it a GUID
+ } else if (is_numeric($guid)) {
+ if (!$this->load($guid)) {
+ throw new IOException(elgg_echo('IOException:FailedToLoadGUID', array(get_class(), $guid)));
+ }
+ } else {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:UnrecognisedValue'));
+ }
+ }
+ }
+
+ /**
+ * Load the ElggUser data from the database
+ *
+ * @param mixed $guid ElggUser GUID or stdClass database row from entity table
+ *
+ * @return bool
+ */
+ protected function load($guid) {
+ $attr_loader = new ElggAttributeLoader(get_class(), 'user', $this->attributes);
+ $attr_loader->secondary_loader = 'get_user_entity_as_row';
+
+ $attrs = $attr_loader->getRequiredAttributes($guid);
+ if (!$attrs) {
+ return false;
+ }
+
+ $this->attributes = $attrs;
+ $this->attributes['tables_loaded'] = 2;
+ cache_entity($this);
+
+ return true;
+ }
+
+ /**
+ * Saves this user to the database.
+ *
+ * @return bool
+ */
+ public function save() {
+ // Save generic stuff
+ if (!parent::save()) {
+ return false;
+ }
+
+ // Now save specific stuff
+ return create_user_entity($this->get('guid'), $this->get('name'), $this->get('username'),
+ $this->get('password'), $this->get('salt'), $this->get('email'), $this->get('language'),
+ $this->get('code'));
+ }
+
+ /**
+ * User specific override of the entity delete method.
+ *
+ * @return bool
+ */
+ public function delete() {
+ global $USERNAME_TO_GUID_MAP_CACHE, $CODE_TO_GUID_MAP_CACHE;
+
+ // clear cache
+ if (isset($USERNAME_TO_GUID_MAP_CACHE[$this->username])) {
+ unset($USERNAME_TO_GUID_MAP_CACHE[$this->username]);
+ }
+ if (isset($CODE_TO_GUID_MAP_CACHE[$this->code])) {
+ unset($CODE_TO_GUID_MAP_CACHE[$this->code]);
+ }
+
+ clear_user_files($this);
+
+ // Delete entity
+ return parent::delete();
+ }
+
+ /**
+ * Ban this user.
+ *
+ * @param string $reason Optional reason
+ *
+ * @return bool
+ */
+ public function ban($reason = "") {
+ return ban_user($this->guid, $reason);
+ }
+
+ /**
+ * Unban this user.
+ *
+ * @return bool
+ */
+ public function unban() {
+ return unban_user($this->guid);
+ }
+
+ /**
+ * Is this user banned or not?
+ *
+ * @return bool
+ */
+ public function isBanned() {
+ return $this->banned == 'yes';
+ }
+
+ /**
+ * Is this user admin?
+ *
+ * @return bool
+ */
+ public function isAdmin() {
+
+ // for backward compatibility we need to pull this directly
+ // from the attributes instead of using the magic methods.
+ // this can be removed in 1.9
+ // return $this->admin == 'yes';
+ return $this->attributes['admin'] == 'yes';
+ }
+
+ /**
+ * Make the user an admin
+ *
+ * @return bool
+ */
+ public function makeAdmin() {
+ // If already saved, use the standard function.
+ if ($this->guid && !make_user_admin($this->guid)) {
+ return FALSE;
+ }
+
+ // need to manually set attributes since they've already been loaded.
+ $this->attributes['admin'] = 'yes';
+
+ return TRUE;
+ }
+
+ /**
+ * Remove the admin flag for user
+ *
+ * @return bool
+ */
+ public function removeAdmin() {
+ // If already saved, use the standard function.
+ if ($this->guid && !remove_user_admin($this->guid)) {
+ return FALSE;
+ }
+
+ // need to manually set attributes since they've already been loaded.
+ $this->attributes['admin'] = 'no';
+
+ return TRUE;
+ }
+
+ /**
+ * Get sites that this user is a member of
+ *
+ * @param string $subtype Optionally, the subtype of result we want to limit to
+ * @param int $limit The number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return array
+ */
+ function getSites($subtype = "", $limit = 10, $offset = 0) {
+ return get_user_sites($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Add this user to a particular site
+ *
+ * @param int $site_guid The guid of the site to add it to
+ *
+ * @return bool
+ */
+ function addToSite($site_guid) {
+ return add_site_user($site_guid, $this->getGUID());
+ }
+
+ /**
+ * Remove this user from a particular site
+ *
+ * @param int $site_guid The guid of the site to remove it from
+ *
+ * @return bool
+ */
+ function removeFromSite($site_guid) {
+ return remove_site_user($site_guid, $this->getGUID());
+ }
+
+ /**
+ * Adds a user as a friend
+ *
+ * @param int $friend_guid The GUID of the user to add
+ *
+ * @return bool
+ */
+ function addFriend($friend_guid) {
+ return user_add_friend($this->getGUID(), $friend_guid);
+ }
+
+ /**
+ * Removes a user as a friend
+ *
+ * @param int $friend_guid The GUID of the user to remove
+ *
+ * @return bool
+ */
+ function removeFriend($friend_guid) {
+ return user_remove_friend($this->getGUID(), $friend_guid);
+ }
+
+ /**
+ * Determines whether or not this user is a friend of the currently logged in user
+ *
+ * @return bool
+ */
+ function isFriend() {
+ return $this->isFriendOf(elgg_get_logged_in_user_guid());
+ }
+
+ /**
+ * Determines whether this user is friends with another user
+ *
+ * @param int $user_guid The GUID of the user to check against
+ *
+ * @return bool
+ */
+ function isFriendsWith($user_guid) {
+ return user_is_friend($this->getGUID(), $user_guid);
+ }
+
+ /**
+ * Determines whether or not this user is another user's friend
+ *
+ * @param int $user_guid The GUID of the user to check against
+ *
+ * @return bool
+ */
+ function isFriendOf($user_guid) {
+ return user_is_friend($user_guid, $this->getGUID());
+ }
+
+ /**
+ * Gets this user's friends
+ *
+ * @param string $subtype Optionally, the user subtype (leave blank for all)
+ * @param int $limit The number of users to retrieve
+ * @param int $offset Indexing offset, if any
+ *
+ * @return array|false Array of ElggUser, or false, depending on success
+ */
+ function getFriends($subtype = "", $limit = 10, $offset = 0) {
+ return get_user_friends($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Gets users who have made this user a friend
+ *
+ * @param string $subtype Optionally, the user subtype (leave blank for all)
+ * @param int $limit The number of users to retrieve
+ * @param int $offset Indexing offset, if any
+ *
+ * @return array|false Array of ElggUser, or false, depending on success
+ */
+ function getFriendsOf($subtype = "", $limit = 10, $offset = 0) {
+ return get_user_friends_of($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Lists the user's friends
+ *
+ * @param string $subtype Optionally, the user subtype (leave blank for all)
+ * @param int $limit The number of users to retrieve
+ * @param array $vars Display variables for the user view
+ *
+ * @return string Rendered list of friends
+ * @since 1.8.0
+ */
+ function listFriends($subtype = "", $limit = 10, array $vars = array()) {
+ $defaults = array(
+ 'type' => 'user',
+ 'relationship' => 'friend',
+ 'relationship_guid' => $this->guid,
+ 'limit' => $limit,
+ 'full_view' => false,
+ );
+
+ $options = array_merge($defaults, $vars);
+
+ if ($subtype) {
+ $options['subtype'] = $subtype;
+ }
+
+ return elgg_list_entities_from_relationship($options);
+ }
+
+ /**
+ * Gets the user's groups
+ *
+ * @param string $subtype Optionally, the subtype of user to filter to (leave blank for all)
+ * @param int $limit The number of groups to retrieve
+ * @param int $offset Indexing offset, if any
+ *
+ * @return array|false Array of ElggGroup, or false, depending on success
+ */
+ function getGroups($subtype = "", $limit = 10, $offset = 0) {
+ $options = array(
+ 'type' => 'group',
+ 'relationship' => 'member',
+ 'relationship_guid' => $this->guid,
+ 'limit' => $limit,
+ 'offset' => $offset,
+ );
+
+ if ($subtype) {
+ $options['subtype'] = $subtype;
+ }
+
+ return elgg_get_entities_from_relationship($options);
+ }
+
+ /**
+ * Lists the user's groups
+ *
+ * @param string $subtype Optionally, the user subtype (leave blank for all)
+ * @param int $limit The number of users to retrieve
+ * @param int $offset Indexing offset, if any
+ *
+ * @return string
+ */
+ function listGroups($subtype = "", $limit = 10, $offset = 0) {
+ $options = array(
+ 'type' => 'group',
+ 'relationship' => 'member',
+ 'relationship_guid' => $this->guid,
+ 'limit' => $limit,
+ 'offset' => $offset,
+ 'full_view' => false,
+ );
+
+ if ($subtype) {
+ $options['subtype'] = $subtype;
+ }
+
+ return elgg_list_entities_from_relationship($options);
+ }
+
+ /**
+ * Get an array of ElggObject owned by this user.
+ *
+ * @param string $subtype The subtype of the objects, if any
+ * @param int $limit Number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return array|false
+ */
+ public function getObjects($subtype = "", $limit = 10, $offset = 0) {
+ $params = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'owner_guid' => $this->getGUID(),
+ 'limit' => $limit,
+ 'offset' => $offset
+ );
+ return elgg_get_entities($params);
+ }
+
+ /**
+ * Get an array of ElggObjects owned by this user's friends.
+ *
+ * @param string $subtype The subtype of the objects, if any
+ * @param int $limit Number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return array|false
+ */
+ public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0) {
+ return get_user_friends_objects($this->getGUID(), $subtype, $limit, $offset);
+ }
+
+ /**
+ * Counts the number of ElggObjects owned by this user
+ *
+ * @param string $subtype The subtypes of the objects, if any
+ *
+ * @return int The number of ElggObjects
+ */
+ public function countObjects($subtype = "") {
+ return count_user_objects($this->getGUID(), $subtype);
+ }
+
+ /**
+ * Get the collections associated with a user.
+ *
+ * @param string $subtype Optionally, the subtype of result we want to limit to
+ * @param int $limit The number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return array|false
+ */
+ public function getCollections($subtype = "", $limit = 10, $offset = 0) {
+ elgg_deprecated_notice("ElggUser::getCollections() has been deprecated", 1.8);
+ return false;
+ }
+
+ /**
+ * Get a user's owner GUID
+ *
+ * Returns it's own GUID if the user is not owned.
+ *
+ * @return int
+ */
+ function getOwnerGUID() {
+ if ($this->owner_guid == 0) {
+ return $this->guid;
+ }
+
+ return $this->owner_guid;
+ }
+
+ /**
+ * If a user's owner is blank, return its own GUID as the owner
+ *
+ * @return int User GUID
+ * @deprecated 1.8 Use getOwnerGUID()
+ */
+ function getOwner() {
+ elgg_deprecated_notice("ElggUser::getOwner deprecated for ElggUser::getOwnerGUID", 1.8);
+ $this->getOwnerGUID();
+ }
+
+ // EXPORTABLE INTERFACE ////////////////////////////////////////////////////////////
+
+ /**
+ * Return an array of fields which can be exported.
+ *
+ * @return array
+ */
+ public function getExportableValues() {
+ return array_merge(parent::getExportableValues(), array(
+ 'name',
+ 'username',
+ 'language',
+ ));
+ }
+
+ /**
+ * Need to catch attempts to make a user an admin. Remove for 1.9
+ *
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return bool
+ */
+ public function __set($name, $value) {
+ if ($name == 'admin' || $name == 'siteadmin') {
+ elgg_deprecated_notice('The admin/siteadmin metadata are not longer used. Use ElggUser->makeAdmin() and ElggUser->removeAdmin().', 1.7);
+
+ if ($value == 'yes' || $value == '1') {
+ $this->makeAdmin();
+ } else {
+ $this->removeAdmin();
+ }
+ }
+ return parent::__set($name, $value);
+ }
+
+ /**
+ * Need to catch attempts to test user for admin. Remove for 1.9
+ *
+ * @param string $name Name
+ *
+ * @return bool
+ */
+ public function __get($name) {
+ if ($name == 'admin' || $name == 'siteadmin') {
+ elgg_deprecated_notice('The admin/siteadmin metadata are not longer used. Use ElggUser->isAdmin().', 1.7);
+ return $this->isAdmin();
+ }
+
+ return parent::__get($name);
+ }
+
+ /**
+ * Can a user comment on this user?
+ *
+ * @see ElggEntity::canComment()
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ * @return bool
+ * @since 1.8.0
+ */
+ public function canComment($user_guid = 0) {
+ $result = parent::canComment($user_guid);
+ if ($result !== null) {
+ return $result;
+ }
+ return false;
+ }
+}
diff --git a/engine/classes/ElggVolatileMetadataCache.php b/engine/classes/ElggVolatileMetadataCache.php
new file mode 100644
index 000000000..8a33c198d
--- /dev/null
+++ b/engine/classes/ElggVolatileMetadataCache.php
@@ -0,0 +1,347 @@
+<?php
+/**
+ * ElggVolatileMetadataCache
+ * In memory cache of known metadata values stored by entity.
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ *
+ * @access private
+ */
+class ElggVolatileMetadataCache {
+
+ /**
+ * The cached values (or null for known to be empty). If the portion of the cache
+ * is synchronized, missing values are assumed to indicate that values do not
+ * exist in storage, otherwise, we don't know what's there.
+ *
+ * @var array
+ */
+ protected $values = array();
+
+ /**
+ * Does the cache know that it contains all names fetch-able from storage?
+ * The keys are entity GUIDs and either the value exists (true) or it's not set.
+ *
+ * @var array
+ */
+ protected $isSynchronized = array();
+
+ /**
+ * @var null|bool
+ */
+ protected $ignoreAccess = null;
+
+ /**
+ * @param int $entity_guid
+ *
+ * @param array $values
+ */
+ public function saveAll($entity_guid, array $values) {
+ if (!$this->getIgnoreAccess()) {
+ $this->values[$entity_guid] = $values;
+ $this->isSynchronized[$entity_guid] = true;
+ }
+ }
+
+ /**
+ * @param int $entity_guid
+ *
+ * @return array
+ */
+ public function loadAll($entity_guid) {
+ if (isset($this->values[$entity_guid])) {
+ return $this->values[$entity_guid];
+ } else {
+ return array();
+ }
+ }
+
+ /**
+ * Declare that there may be fetch-able metadata names in storage that this
+ * cache doesn't know about
+ *
+ * @param int $entity_guid
+ */
+ public function markOutOfSync($entity_guid) {
+ unset($this->isSynchronized[$entity_guid]);
+ }
+
+ /**
+ * @param $entity_guid
+ *
+ * @return bool
+ */
+ public function isSynchronized($entity_guid) {
+ return isset($this->isSynchronized[$entity_guid]);
+ }
+
+ /**
+ * @param int $entity_guid
+ *
+ * @param string $name
+ *
+ * @param array|int|string|null $value null means it is known that there is no
+ * fetch-able metadata under this name
+ * @param bool $allow_multiple
+ */
+ public function save($entity_guid, $name, $value, $allow_multiple = false) {
+ if ($this->getIgnoreAccess()) {
+ // we don't know if what gets saves here will be available to user once
+ // access control returns, hence it's best to forget :/
+ $this->markUnknown($entity_guid, $name);
+ } else {
+ if ($allow_multiple) {
+ if ($this->isKnown($entity_guid, $name)) {
+ $existing = $this->load($entity_guid, $name);
+ if ($existing !== null) {
+ $existing = (array) $existing;
+ $existing[] = $value;
+ $value = $existing;
+ }
+ } else {
+ // we don't know whether there are unknown values, so it's
+ // safest to leave that assumption
+ $this->markUnknown($entity_guid, $name);
+ return;
+ }
+ }
+ $this->values[$entity_guid][$name] = $value;
+ }
+ }
+
+ /**
+ * Warning: You should always call isKnown() beforehand to verify that this
+ * function's return value should be trusted (otherwise a null return value
+ * is ambiguous).
+ *
+ * @param int $entity_guid
+ *
+ * @param string $name
+ *
+ * @return array|string|int|null null = value does not exist
+ */
+ public function load($entity_guid, $name) {
+ if (isset($this->values[$entity_guid]) && array_key_exists($name, $this->values[$entity_guid])) {
+ return $this->values[$entity_guid][$name];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Forget about this metadata entry. We don't want to try to guess what the
+ * next fetch from storage will return
+ *
+ * @param int $entity_guid
+ *
+ * @param string $name
+ */
+ public function markUnknown($entity_guid, $name) {
+ unset($this->values[$entity_guid][$name]);
+ $this->markOutOfSync($entity_guid);
+ }
+
+ /**
+ * If true, load() will return an accurate value for this name
+ *
+ * @param int $entity_guid
+ *
+ * @param string $name
+ *
+ * @return bool
+ */
+ public function isKnown($entity_guid, $name) {
+ if (isset($this->isSynchronized[$entity_guid])) {
+ return true;
+ } else {
+ return (isset($this->values[$entity_guid]) && array_key_exists($name, $this->values[$entity_guid]));
+ }
+
+ }
+
+ /**
+ * Declare that metadata under this name is known to be not fetch-able from storage
+ *
+ * @param int $entity_guid
+ *
+ * @param string $name
+ *
+ * @return array
+ */
+ public function markEmpty($entity_guid, $name) {
+ $this->values[$entity_guid][$name] = null;
+ }
+
+ /**
+ * Forget about all metadata for an entity
+ *
+ * @param int $entity_guid
+ */
+ public function clear($entity_guid) {
+ $this->values[$entity_guid] = array();
+ $this->markOutOfSync($entity_guid);
+ }
+
+ /**
+ * Clear entire cache and mark all entities as out of sync
+ */
+ public function flush() {
+ $this->values = array();
+ $this->isSynchronized = array();
+ }
+
+ /**
+ * Use this value instead of calling elgg_get_ignore_access(). By default that
+ * function will be called.
+ *
+ * This setting makes this component a little more loosely-coupled.
+ *
+ * @param bool $ignore
+ */
+ public function setIgnoreAccess($ignore) {
+ $this->ignoreAccess = (bool) $ignore;
+ }
+
+ /**
+ * Tell the cache to call elgg_get_ignore_access() to determing access status.
+ */
+ public function unsetIgnoreAccess() {
+ $this->ignoreAccess = null;
+ }
+
+ /**
+ * @return bool
+ */
+ protected function getIgnoreAccess() {
+ if (null === $this->ignoreAccess) {
+ return elgg_get_ignore_access();
+ } else {
+ return $this->ignoreAccess;
+ }
+ }
+
+ /**
+ * Invalidate based on options passed to the global *_metadata functions
+ *
+ * @param string $action Action performed on metadata. "delete", "disable", or "enable"
+ *
+ * @param array $options Options passed to elgg_(delete|disable|enable)_metadata
+ *
+ * "guid" if given, invalidation will be limited to this entity
+ *
+ * "metadata_name" if given, invalidation will be limited to metadata with this name
+ */
+ public function invalidateByOptions($action, array $options) {
+ // remove as little as possible, optimizing for common cases
+ if (empty($options['guid'])) {
+ // safest to clear everything unless we want to make this even more complex :(
+ $this->flush();
+ } else {
+ if (empty($options['metadata_name'])) {
+ // safest to clear the whole entity
+ $this->clear($options['guid']);
+ } else {
+ switch ($action) {
+ case 'delete':
+ $this->markEmpty($options['guid'], $options['metadata_name']);
+ break;
+ default:
+ $this->markUnknown($options['guid'], $options['metadata_name']);
+ }
+ }
+ }
+ }
+
+ /**
+ * @param int|array $guids
+ */
+ public function populateFromEntities($guids) {
+ if (empty($guids)) {
+ return;
+ }
+ if (!is_array($guids)) {
+ $guids = array($guids);
+ }
+ $guids = array_unique($guids);
+
+ // could be useful at some point in future
+ //$guids = $this->filterMetadataHeavyEntities($guids);
+
+ $db_prefix = elgg_get_config('dbprefix');
+ $options = array(
+ 'guids' => $guids,
+ 'limit' => 0,
+ 'callback' => false,
+ 'joins' => array(
+ "JOIN {$db_prefix}metastrings v ON n_table.value_id = v.id",
+ "JOIN {$db_prefix}metastrings n ON n_table.name_id = n.id",
+ ),
+ 'selects' => array('n.string AS name', 'v.string AS value'),
+ 'order_by' => 'n_table.entity_guid, n_table.time_created ASC',
+
+ // @todo don't know why this is necessary
+ 'wheres' => array(get_access_sql_suffix('n_table')),
+ );
+ $data = elgg_get_metadata($options);
+
+ // build up metadata for each entity, save when GUID changes (or data ends)
+ $last_guid = null;
+ $metadata = array();
+ $last_row_idx = count($data) - 1;
+ foreach ($data as $i => $row) {
+ $name = $row->name;
+ $value = ($row->value_type === 'text') ? $row->value : (int) $row->value;
+ $guid = $row->entity_guid;
+ if ($guid !== $last_guid) {
+ if ($last_guid) {
+ $this->saveAll($last_guid, $metadata);
+ }
+ $metadata = array();
+ }
+ if (isset($metadata[$name])) {
+ $metadata[$name] = (array) $metadata[$name];
+ $metadata[$name][] = $value;
+ } else {
+ $metadata[$name] = $value;
+ }
+ if (($i == $last_row_idx)) {
+ $this->saveAll($guid, $metadata);
+ }
+ $last_guid = $guid;
+ }
+ }
+
+ /**
+ * Filter out entities whose concatenated metadata values (INTs casted as string)
+ * exceed a threshold in characters. This could be used to avoid overpopulating the
+ * cache if RAM usage becomes an issue.
+ *
+ * @param array $guids GUIDs of entities to examine
+ *
+ * @param int $limit Limit in characters of all metadata (with ints casted to strings)
+ *
+ * @return array
+ */
+ public function filterMetadataHeavyEntities(array $guids, $limit = 1024000) {
+ $db_prefix = elgg_get_config('dbprefix');
+
+ $options = array(
+ 'guids' => $guids,
+ 'limit' => 0,
+ 'callback' => false,
+ 'joins' => "JOIN {$db_prefix}metastrings v ON n_table.value_id = v.id",
+ 'selects' => array('SUM(LENGTH(v.string)) AS bytes'),
+ 'order_by' => 'n_table.entity_guid, n_table.time_created ASC',
+ 'group_by' => 'n_table.entity_guid',
+ );
+ $data = elgg_get_metadata($options);
+ // don't cache if metadata for entity is over 10MB (or rolled INT)
+ foreach ($data as $row) {
+ if ($row->bytes > $limit || $row->bytes < 0) {
+ array_splice($guids, array_search($row->entity_guid, $guids), 1);
+ }
+ }
+ return $guids;
+ }
+}
diff --git a/engine/classes/ElggWidget.php b/engine/classes/ElggWidget.php
new file mode 100644
index 000000000..99708f66a
--- /dev/null
+++ b/engine/classes/ElggWidget.php
@@ -0,0 +1,235 @@
+<?php
+
+/**
+ * ElggWidget
+ *
+ * Stores metadata in private settings rather than as ElggMetadata
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets
+ */
+class ElggWidget extends ElggObject {
+
+ /**
+ * Set subtype to widget.
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['subtype'] = "widget";
+ }
+
+ /**
+ * Override entity get and sets in order to save data to private data store.
+ *
+ * @param string $name Name
+ *
+ * @return mixed
+ */
+ public function get($name) {
+ // See if its in our base attribute
+ if (array_key_exists($name, $this->attributes)) {
+ return $this->attributes[$name];
+ }
+
+ // No, so see if its in the private data store.
+ $meta = $this->getPrivateSetting($name);
+ if ($meta) {
+ return $meta;
+ }
+
+ // Can't find it, so return null
+ return null;
+ }
+
+ /**
+ * Override entity get and sets in order to save data to private data store.
+ *
+ * @param string $name Name
+ * @param string $value Value
+ *
+ * @return bool
+ */
+ public function set($name, $value) {
+ if (array_key_exists($name, $this->attributes)) {
+ // Check that we're not trying to change the guid!
+ if ((array_key_exists('guid', $this->attributes)) && ($name == 'guid')) {
+ return false;
+ }
+
+ $this->attributes[$name] = $value;
+ } else {
+ return $this->setPrivateSetting($name, $value);
+ }
+
+ return true;
+ }
+
+ /**
+ * Set the widget context
+ *
+ * @param string $context The widget context
+ * @return bool
+ * @since 1.8.0
+ */
+ public function setContext($context) {
+ return $this->setPrivateSetting('context', $context);
+ }
+
+ /**
+ * Get the widget context
+ *
+ * @return string
+ * @since 1.8.0
+ */
+ public function getContext() {
+ return $this->getPrivateSetting('context');
+ }
+
+ /**
+ * Get the title of the widget
+ *
+ * @return string
+ * @since 1.8.0
+ */
+ public function getTitle() {
+ $title = $this->title;
+ if (!$title) {
+ global $CONFIG;
+ $title = $CONFIG->widgets->handlers[$this->handler]->name;
+ }
+ return $title;
+ }
+
+ /**
+ * Move the widget
+ *
+ * @param int $column The widget column
+ * @param int $rank Zero-based rank from the top of the column
+ * @return void
+ * @since 1.8.0
+ */
+ public function move($column, $rank) {
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'widget',
+ 'container_guid' => $this->container_guid,
+ 'limit' => false,
+ 'private_setting_name_value_pairs' => array(
+ array('name' => 'context', 'value' => $this->getContext()),
+ array('name' => 'column', 'value' => $column)
+ )
+ );
+ $widgets = elgg_get_entities_from_private_settings($options);
+ if (!$widgets) {
+ $this->column = (int)$column;
+ $this->order = 0;
+ return;
+ }
+
+ usort($widgets, create_function('$a,$b','return (int)$a->order > (int)$b->order;'));
+
+ // remove widgets from inactive plugins
+ $widget_types = elgg_get_widget_types($this->context);
+ $inactive_widgets = array();
+ foreach ($widgets as $index => $widget) {
+ if (!array_key_exists($widget->handler, $widget_types)) {
+ $inactive_widgets[] = $widget;
+ unset($widgets[$index]);
+ }
+ }
+
+ if ($rank == 0) {
+ // top of the column
+ $this->order = reset($widgets)->order - 10;
+ } elseif ($rank == (count($widgets) - 1)) {
+ // bottom of the column of active widgets
+ $this->order = end($widgets)->order + 10;
+ } else {
+ // reorder widgets
+
+ // remove the widget that's being moved from the array
+ foreach ($widgets as $index => $widget) {
+ if ($widget->guid == $this->guid) {
+ unset($widgets[$index]);
+ }
+ }
+
+ // split the array in two and recombine with the moved widget in middle
+ $before = array_slice($widgets, 0, $rank);
+ array_push($before, $this);
+ $after = array_slice($widgets, $rank);
+ $widgets = array_merge($before, $after);
+ ksort($widgets);
+ $order = 0;
+ foreach ($widgets as $widget) {
+ $widget->order = $order;
+ $order += 10;
+ }
+ }
+
+ // put inactive widgets at the bottom
+ if ($inactive_widgets) {
+ $bottom = 0;
+ foreach ($widgets as $widget) {
+ if ($widget->order > $bottom) {
+ $bottom = $widget->order;
+ }
+ }
+ $bottom += 10;
+ foreach ($inactive_widgets as $widget) {
+ $widget->order = $bottom;
+ $bottom += 10;
+ }
+ }
+
+ $this->column = $column;
+ }
+
+ /**
+ * Saves the widget's settings
+ *
+ * Plugins can override the save mechanism using the plugin hook:
+ * 'widget_settings', <widget handler identifier>. The widget and
+ * the parameters are passed. The plugin hook handler should return
+ * true to indicate that it has successfully saved the settings.
+ *
+ * @warning The values in the parameter array cannot be arrays
+ *
+ * @param array $params An array of name => value parameters
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+ public function saveSettings($params) {
+ if (!$this->canEdit()) {
+ return false;
+ }
+
+ // plugin hook handlers should return true to indicate the settings have
+ // been saved so that default code does not run
+ $hook_params = array(
+ 'widget' => $this,
+ 'params' => $params
+ );
+ if (elgg_trigger_plugin_hook('widget_settings', $this->handler, $hook_params, false) == true) {
+ return true;
+ }
+
+ if (is_array($params) && count($params) > 0) {
+ foreach ($params as $name => $value) {
+ if (is_array($value)) {
+ // private settings cannot handle arrays
+ return false;
+ } else {
+ $this->$name = $value;
+ }
+ }
+ $this->save();
+ }
+
+ return true;
+ }
+}
diff --git a/engine/classes/ElggXMLElement.php b/engine/classes/ElggXMLElement.php
new file mode 100644
index 000000000..65a13912c
--- /dev/null
+++ b/engine/classes/ElggXMLElement.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * A parser for XML that uses SimpleXMLElement
+ *
+ * @package Elgg.Core
+ * @subpackage XML
+ */
+class ElggXMLElement {
+ /**
+ * @var SimpleXMLElement
+ */
+ private $_element;
+
+ /**
+ * Creates an ElggXMLParser from a string or existing SimpleXMLElement
+ *
+ * @param string|SimpleXMLElement $xml The XML to parse
+ */
+ public function __construct($xml) {
+ if ($xml instanceof SimpleXMLElement) {
+ $this->_element = $xml;
+ } else {
+ $this->_element = new SimpleXMLElement($xml);
+ }
+ }
+
+ /**
+ * @return string The name of the element
+ */
+ public function getName() {
+ return $this->_element->getName();
+ }
+
+ /**
+ * @return array:string The attributes
+ */
+ public function getAttributes() {
+ //include namespace declarations as attributes
+ $xmlnsRaw = $this->_element->getNamespaces();
+ $xmlns = array();
+ foreach ($xmlnsRaw as $key => $val) {
+ $label = 'xmlns' . ($key ? ":$key" : $key);
+ $xmlns[$label] = $val;
+ }
+ //get attributes and merge with namespaces
+ $attrRaw = $this->_element->attributes();
+ $attr = array();
+ foreach ($attrRaw as $key => $val) {
+ $attr[$key] = $val;
+ }
+ $attr = array_merge((array) $xmlns, (array) $attr);
+ $result = array();
+ foreach ($attr as $key => $val) {
+ $result[$key] = (string) $val;
+ }
+ return $result;
+ }
+
+ /**
+ * @return string CData
+ */
+ public function getContent() {
+ return (string) $this->_element;
+ }
+
+ /**
+ * @return array:ElggXMLElement Child elements
+ */
+ public function getChildren() {
+ $children = $this->_element->children();
+ $result = array();
+ foreach ($children as $val) {
+ $result[] = new ElggXMLElement($val);
+ }
+
+ return $result;
+ }
+
+ function __get($name) {
+ switch ($name) {
+ case 'name':
+ return $this->getName();
+ break;
+ case 'attributes':
+ return $this->getAttributes();
+ break;
+ case 'content':
+ return $this->getContent();
+ break;
+ case 'children':
+ return $this->getChildren();
+ break;
+ }
+ return null;
+ }
+
+ function __isset($name) {
+ switch ($name) {
+ case 'name':
+ return $this->getName() !== null;
+ break;
+ case 'attributes':
+ return $this->getAttributes() !== null;
+ break;
+ case 'content':
+ return $this->getContent() !== null;
+ break;
+ case 'children':
+ return $this->getChildren() !== null;
+ break;
+ }
+ return false;
+ }
+
+} \ No newline at end of file
diff --git a/engine/classes/ErrorResult.php b/engine/classes/ErrorResult.php
new file mode 100644
index 000000000..afad4c740
--- /dev/null
+++ b/engine/classes/ErrorResult.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * ErrorResult
+ * The error result class.
+ *
+ * @package Elgg.Core
+ * @subpackage WebServicesAPI
+ */
+class ErrorResult extends GenericResult {
+ // Fail with no specific code
+ public static $RESULT_FAIL = -1 ;
+
+ public static $RESULT_FAIL_APIKEY_DISABLED = -30;
+ public static $RESULT_FAIL_APIKEY_INACTIVE = -31;
+ public static $RESULT_FAIL_APIKEY_INVALID = -32;
+
+ // Invalid, expired or missing auth token
+ public static $RESULT_FAIL_AUTHTOKEN = -20;
+
+ /**
+ * A new error result
+ *
+ * @param string $message Message
+ * @param int $code Error Code
+ * @param Exception $exception Exception object
+ *
+ * @return void
+ */
+ public function __construct($message, $code = "", Exception $exception = NULL) {
+ if ($code == "") {
+ $code = ErrorResult::$RESULT_FAIL;
+ }
+
+ if ($exception != NULL) {
+ $this->setResult($exception->__toString());
+ }
+
+ $this->setStatusCode($code, $message);
+ }
+
+ /**
+ * Get a new instance of the ErrorResult.
+ *
+ * @param string $message Message
+ * @param int $code Code
+ * @param Exception $exception Optional exception for generating a stack trace.
+ *
+ * @return ErrorResult
+ */
+ public static function getInstance($message, $code = "", Exception $exception = NULL) {
+ // Return a new error object.
+ return new ErrorResult($message, $code, $exception);
+ }
+}
diff --git a/engine/classes/ExportException.php b/engine/classes/ExportException.php
new file mode 100644
index 000000000..ae8a8e41b
--- /dev/null
+++ b/engine/classes/ExportException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Export exception
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ *
+ */
+class ExportException extends DataFormatException {}
diff --git a/engine/classes/Exportable.php b/engine/classes/Exportable.php
new file mode 100644
index 000000000..0c1ea5282
--- /dev/null
+++ b/engine/classes/Exportable.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Define an interface for all ODD exportable objects.
+ *
+ * @package Elgg.Core
+ * @subpackage ODD
+ */
+interface Exportable {
+ /**
+ * This must take the contents of the object and convert it to exportable ODD
+ *
+ * @return object or array of objects.
+ */
+ public function export();
+
+ /**
+ * Return a list of all fields that can be exported.
+ * This should be used as the basis for the values returned by export()
+ *
+ * @return array
+ */
+ public function getExportableValues();
+}
diff --git a/engine/classes/Friendable.php b/engine/classes/Friendable.php
new file mode 100644
index 000000000..c308b4598
--- /dev/null
+++ b/engine/classes/Friendable.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * An interface for objects that behave as elements within a social network that have a profile.
+ *
+ * @package Elgg.Core
+ * @subpackage SocialModel.Friendable
+ */
+interface Friendable {
+ /**
+ * Adds a user as a friend
+ *
+ * @param int $friend_guid The GUID of the user to add
+ *
+ * @return bool
+ */
+ public function addFriend($friend_guid);
+
+ /**
+ * Removes a user as a friend
+ *
+ * @param int $friend_guid The GUID of the user to remove
+ *
+ * @return bool
+ */
+ public function removeFriend($friend_guid);
+
+ /**
+ * Determines whether or not the current user is a friend of this entity
+ *
+ * @return bool
+ */
+ public function isFriend();
+
+ /**
+ * Determines whether or not this entity is friends with a particular entity
+ *
+ * @param int $user_guid The GUID of the entity this entity may or may not be friends with
+ *
+ * @return bool
+ */
+ public function isFriendsWith($user_guid);
+
+ /**
+ * Determines whether or not a foreign entity has made this one a friend
+ *
+ * @param int $user_guid The GUID of the foreign entity
+ *
+ * @return bool
+ */
+ public function isFriendOf($user_guid);
+
+ /**
+ * Returns this entity's friends
+ *
+ * @param string $subtype The subtype of entity to return
+ * @param int $limit The number of entities to return
+ * @param int $offset Indexing offset
+ *
+ * @return array|false
+ */
+ public function getFriends($subtype = "", $limit = 10, $offset = 0);
+
+ /**
+ * Returns entities that have made this entity a friend
+ *
+ * @param string $subtype The subtype of entity to return
+ * @param int $limit The number of entities to return
+ * @param int $offset Indexing offset
+ *
+ * @return array|false
+ */
+ public function getFriendsOf($subtype = "", $limit = 10, $offset = 0);
+
+ /**
+ * Returns objects in this entity's container
+ *
+ * @param string $subtype The subtype of entity to return
+ * @param int $limit The number of entities to return
+ * @param int $offset Indexing offset
+ *
+ * @return array|false
+ */
+ public function getObjects($subtype = "", $limit = 10, $offset = 0);
+
+ /**
+ * Returns objects in the containers of this entity's friends
+ *
+ * @param string $subtype The subtype of entity to return
+ * @param int $limit The number of entities to return
+ * @param int $offset Indexing offset
+ *
+ * @return array|false
+ */
+ public function getFriendsObjects($subtype = "", $limit = 10, $offset = 0);
+
+ /**
+ * Returns the number of object entities in this entity's container
+ *
+ * @param string $subtype The subtype of entity to count
+ *
+ * @return int
+ */
+ public function countObjects($subtype = "");
+}
diff --git a/engine/classes/GenericResult.php b/engine/classes/GenericResult.php
new file mode 100644
index 000000000..e42e924d1
--- /dev/null
+++ b/engine/classes/GenericResult.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * GenericResult Result superclass.
+ *
+ * @package Elgg.Core
+ * @subpackage WebServicesAPI
+ */
+abstract class GenericResult {
+ /**
+ * The status of the result.
+ * @var int
+ */
+ private $status_code;
+
+ /**
+ * Message returned along with the status which is almost always an error message.
+ * This must be human readable, understandable and localised.
+ * @var string
+ */
+ private $message;
+
+ /**
+ * Result store.
+ * Attach result specific informaton here.
+ *
+ * @var mixed. Should probably be an object of some sort.
+ */
+ private $result;
+
+ /**
+ * Set a status code and optional message.
+ *
+ * @param int $status The status code.
+ * @param string $message The message.
+ *
+ * @return void
+ */
+ protected function setStatusCode($status, $message = "") {
+ $this->status_code = $status;
+ $this->message = $message;
+ }
+
+ /**
+ * Set the result.
+ *
+ * @param mixed $result The result
+ *
+ * @return void
+ */
+ protected function setResult($result) {
+ $this->result = $result;
+ }
+
+ /**
+ * Return the current status code
+ *
+ * @return string
+ */
+ protected function getStatusCode() {
+ return $this->status_code;
+ }
+
+ /**
+ * Return the current status message
+ *
+ * @return string
+ */
+ protected function getStatusMessage() {
+ return $this->message;
+ }
+
+ /**
+ * Return the current result
+ *
+ * @return string
+ */
+ protected function getResult() {
+ return $this->result;
+ }
+
+ /**
+ * Serialise to a standard class.
+ *
+ * DEVNOTE: The API is only interested in data, we can not easily serialise
+ * custom classes without the need for 1) the other side being PHP, 2) you need to have the class
+ * definition installed, 3) its the right version!
+ *
+ * Therefore, I'm not bothering.
+ *
+ * Override this to include any more specific information, however api results
+ * should be attached to the class using setResult().
+ *
+ * if $CONFIG->debug is set then additional information about the runtime environment and
+ * authentication will be returned.
+ *
+ * @return stdClass Object containing the serialised result.
+ */
+ public function export() {
+ global $ERRORS, $CONFIG, $_PAM_HANDLERS_MSG;
+
+ $result = new stdClass;
+
+ $result->status = $this->getStatusCode();
+ if ($this->getStatusMessage() != "") {
+ $result->message = $this->getStatusMessage();
+ }
+
+ $resultdata = $this->getResult();
+ if (isset($resultdata)) {
+ $result->result = $resultdata;
+ }
+
+ if (isset($CONFIG->debug)) {
+ if (count($ERRORS)) {
+ $result->runtime_errors = $ERRORS;
+ }
+
+ if (count($_PAM_HANDLERS_MSG)) {
+ $result->pam = $_PAM_HANDLERS_MSG;
+ }
+ }
+
+ return $result;
+ }
+}
diff --git a/engine/classes/IOException.php b/engine/classes/IOException.php
new file mode 100644
index 000000000..57403f44c
--- /dev/null
+++ b/engine/classes/IOException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * IOException
+ * An IO Exception, throw when an IO Exception occurs. Subclass for specific IO Exceptions.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class IOException extends Exception {}
diff --git a/engine/classes/ImportException.php b/engine/classes/ImportException.php
new file mode 100644
index 000000000..909c599d5
--- /dev/null
+++ b/engine/classes/ImportException.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Import exception
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class ImportException extends DataFormatException {}
diff --git a/engine/classes/Importable.php b/engine/classes/Importable.php
new file mode 100644
index 000000000..23b2ce2c8
--- /dev/null
+++ b/engine/classes/Importable.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Define an interface for all ODD importable objects.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Importable
+ */
+interface Importable {
+ /**
+ * Accepts an array of data to import, this data is parsed from the XML produced by export.
+ * The function should return the constructed object data, or NULL.
+ *
+ * @param ODD $data Data in ODD format
+ *
+ * @return bool
+ * @throws ImportException if there was a critical error importing data.
+ */
+ public function import(ODD $data);
+}
diff --git a/engine/classes/IncompleteEntityException.php b/engine/classes/IncompleteEntityException.php
new file mode 100644
index 000000000..8c86edcc6
--- /dev/null
+++ b/engine/classes/IncompleteEntityException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * IncompleteEntityException
+ * Thrown when constructing an entity that is missing its secondary entity table
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ * @access private
+ */
+class IncompleteEntityException extends Exception {}
diff --git a/engine/classes/InstallationException.php b/engine/classes/InstallationException.php
new file mode 100644
index 000000000..1dad6c1e5
--- /dev/null
+++ b/engine/classes/InstallationException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * InstallationException
+ * Thrown when there is a major problem with the installation.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class InstallationException extends ConfigurationException {}
diff --git a/engine/classes/InvalidClassException.php b/engine/classes/InvalidClassException.php
new file mode 100644
index 000000000..12f353b9a
--- /dev/null
+++ b/engine/classes/InvalidClassException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * InvalidClassException
+ * An invalid class Exception, throw when a class is invalid.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class InvalidClassException extends ClassException {}
diff --git a/engine/classes/InvalidParameterException.php b/engine/classes/InvalidParameterException.php
new file mode 100644
index 000000000..fbc9bffc9
--- /dev/null
+++ b/engine/classes/InvalidParameterException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * InvalidParameterException
+ * A parameter is invalid.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class InvalidParameterException extends CallException {}
diff --git a/engine/classes/Locatable.php b/engine/classes/Locatable.php
new file mode 100644
index 000000000..7287d9798
--- /dev/null
+++ b/engine/classes/Locatable.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Define an interface for geo-tagging entities.
+ *
+ * @package Elgg.Core
+ * @subpackage SocialModel.Locatable
+ */
+interface Locatable {
+ /**
+ * Set a location text
+ *
+ * @param string $location Textual representation of location
+ *
+ * @return bool
+ */
+ public function setLocation($location);
+
+ /**
+ * Set latitude and longitude tags for a given entity.
+ *
+ * @param float $lat Latitude
+ * @param float $long Longitude
+ *
+ * @return bool
+ */
+ public function setLatLong($lat, $long);
+
+ /**
+ * Get the contents of the ->geo:lat field.
+ *
+ * @return int
+ */
+ public function getLatitude();
+
+ /**
+ * Get the contents of the ->geo:lat field.
+ *
+ * @return int
+ */
+ public function getLongitude();
+
+ /**
+ * Get the ->location metadata.
+ *
+ * @return string
+ */
+ public function getLocation();
+}
diff --git a/engine/classes/Loggable.php b/engine/classes/Loggable.php
new file mode 100644
index 000000000..b9e8bf26b
--- /dev/null
+++ b/engine/classes/Loggable.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Interface that provides an interface which must be implemented by all objects wishing to be
+ * recorded in the system log (and by extension the river).
+ *
+ * This interface defines a set of methods that permit the system log functions to
+ * hook in and retrieve the necessary information and to identify what events can
+ * actually be logged.
+ *
+ * To have events involving your object to be logged simply implement this interface.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Loggable
+ */
+interface Loggable {
+ /**
+ * Return an identification for the object for storage in the system log.
+ * This id must be an integer.
+ *
+ * @return int
+ */
+ public function getSystemLogID();
+
+ /**
+ * Return the class name of the object.
+ * Added as a function because get_class causes errors for some reason.
+ *
+ * @return string
+ */
+ public function getClassName();
+
+ /**
+ * Return the type of the object - eg. object, group, user, relationship, metadata, annotation etc
+ *
+ * @return string
+ */
+ public function getType();
+
+ /**
+ * Return a subtype. For metadata & annotations this is the 'name' and for relationship this is the
+ * relationship type.
+ *
+ * @return string
+ */
+ public function getSubtype();
+
+ /**
+ * For a given ID, return the object associated with it.
+ * This is used by the river functionality primarily.
+ * This is useful for checking access permissions etc on objects.
+ *
+ * @param int $id GUID of an entity
+ *
+ * @return ElggEntity
+ */
+ public function getObjectFromID($id);
+
+ /**
+ * Return the GUID of the owner of this object.
+ *
+ * @return int
+ * @deprecated 1.8 Use getOwnerGUID() instead
+ */
+ public function getObjectOwnerGUID();
+}
diff --git a/engine/classes/LoginException.php b/engine/classes/LoginException.php
new file mode 100644
index 000000000..7546fa36f
--- /dev/null
+++ b/engine/classes/LoginException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Login Exception Stub
+ *
+ * Generic parent class for login exceptions.
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions.Stub
+ */
+class LoginException extends Exception {}
diff --git a/engine/classes/NotImplementedException.php b/engine/classes/NotImplementedException.php
new file mode 100644
index 000000000..d1decf75c
--- /dev/null
+++ b/engine/classes/NotImplementedException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * NotImplementedException
+ * Thrown when a method or function has not been implemented, primarily used
+ * in development... you should not see these!
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class NotImplementedException extends CallException {}
diff --git a/engine/classes/Notable.php b/engine/classes/Notable.php
new file mode 100644
index 000000000..0c21af27d
--- /dev/null
+++ b/engine/classes/Notable.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Calendar interface for events.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Notable
+ *
+ * @todo Implement or remove.
+ */
+interface Notable {
+ /**
+ * Calendar functionality.
+ * This function sets the time of an object on a calendar listing.
+ *
+ * @param int $hour If ommitted, now is assumed.
+ * @param int $minute If ommitted, now is assumed.
+ * @param int $second If ommitted, now is assumed.
+ * @param int $day If ommitted, now is assumed.
+ * @param int $month If ommitted, now is assumed.
+ * @param int $year If ommitted, now is assumed.
+ * @param int $duration Duration of event, remainder of the day is assumed.
+ *
+ * @return bool
+ */
+ public function setCalendarTimeAndDuration($hour = NULL, $minute = NULL, $second = NULL,
+ $day = NULL, $month = NULL, $year = NULL, $duration = NULL);
+
+ /**
+ * Return the start timestamp.
+ *
+ * @return int
+ */
+ public function getCalendarStartTime();
+
+ /**
+ * Return the end timestamp.
+ *
+ * @return int
+ */
+ public function getCalendarEndTime();
+}
diff --git a/engine/classes/NotificationException.php b/engine/classes/NotificationException.php
new file mode 100644
index 000000000..71c742f17
--- /dev/null
+++ b/engine/classes/NotificationException.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Notification exception.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class NotificationException extends Exception {}
diff --git a/engine/classes/ODD.php b/engine/classes/ODD.php
new file mode 100644
index 000000000..fa5b616fc
--- /dev/null
+++ b/engine/classes/ODD.php
@@ -0,0 +1,131 @@
+<?php
+/**
+ * Open Data Definition (ODD) superclass.
+ *
+ * @package Elgg.Core
+ * @subpackage ODD
+ */
+abstract class ODD {
+ /**
+ * Attributes.
+ */
+ private $attributes = array();
+
+ /**
+ * Optional body.
+ */
+ private $body;
+
+ /**
+ * Construct an ODD document with initial values.
+ */
+ public function __construct() {
+ $this->body = "";
+ }
+
+ /**
+ * Returns an array of attributes
+ *
+ * @return array
+ */
+ public function getAttributes() {
+ return $this->attributes;
+ }
+
+ /**
+ * Sets an attribute
+ *
+ * @param string $key Name
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ public function setAttribute($key, $value) {
+ $this->attributes[$key] = $value;
+ }
+
+ /**
+ * Returns an attribute
+ *
+ * @param string $key Name
+ *
+ * @return mixed
+ */
+ public function getAttribute($key) {
+ if (isset($this->attributes[$key])) {
+ return $this->attributes[$key];
+ }
+
+ return NULL;
+ }
+
+ /**
+ * Sets the body of the ODD.
+ *
+ * @param mixed $value Value
+ *
+ * @return void
+ */
+ public function setBody($value) {
+ $this->body = $value;
+ }
+
+ /**
+ * Gets the body of the ODD.
+ *
+ * @return mixed
+ */
+ public function getBody() {
+ return $this->body;
+ }
+
+ /**
+ * Set the published time.
+ *
+ * @param int $time Unix timestamp
+ *
+ * @return void
+ */
+ public function setPublished($time) {
+ $this->attributes['published'] = date("r", $time);
+ }
+
+ /**
+ * Return the published time as a unix timestamp.
+ *
+ * @return int or false on failure.
+ */
+ public function getPublishedAsTime() {
+ return strtotime($this->attributes['published']);
+ }
+
+ /**
+ * For serialisation, implement to return a string name of the tag eg "header" or "metadata".
+ *
+ * @return string
+ */
+ abstract protected function getTagName();
+
+ /**
+ * Magic function to generate valid ODD XML for this item.
+ *
+ * @return string
+ */
+ public function __toString() {
+ // Construct attributes
+ $attr = "";
+ foreach ($this->attributes as $k => $v) {
+ $attr .= ($v != "") ? "$k=\"$v\" " : "";
+ }
+
+ $body = $this->getBody();
+ $tag = $this->getTagName();
+
+ $end = "/>";
+ if ($body != "") {
+ $end = "><![CDATA[$body]]></{$tag}>";
+ }
+
+ return "<{$tag} $attr" . $end . "\n";
+ }
+}
diff --git a/engine/classes/ODDDocument.php b/engine/classes/ODDDocument.php
new file mode 100644
index 000000000..540c35a3b
--- /dev/null
+++ b/engine/classes/ODDDocument.php
@@ -0,0 +1,202 @@
+<?php
+/**
+ * This class is used during import and export to construct.
+ *
+ * @package Elgg.Core
+ * @subpackage ODD
+ */
+class ODDDocument implements Iterator {
+ /**
+ * ODD Version
+ *
+ * @var string
+ */
+ private $ODDSupportedVersion = "1.0";
+
+ /**
+ * Elements of the document.
+ */
+ private $elements;
+
+ /**
+ * Optional wrapper factory.
+ */
+ private $wrapperfactory;
+
+ /**
+ * Create a new ODD Document.
+ *
+ * @param array $elements Elements to add
+ *
+ * @return void
+ */
+ public function __construct(array $elements = NULL) {
+ if ($elements) {
+ if (is_array($elements)) {
+ $this->elements = $elements;
+ } else {
+ $this->addElement($elements);
+ }
+ } else {
+ $this->elements = array();
+ }
+ }
+
+ /**
+ * Return the version of ODD being used.
+ *
+ * @return string
+ */
+ public function getVersion() {
+ return $this->ODDSupportedVersion;
+ }
+
+ /**
+ * Returns the number of elements
+ *
+ * @return int
+ */
+ public function getNumElements() {
+ return count($this->elements);
+ }
+
+ /**
+ * Add an element
+ *
+ * @param ODD $element An ODD element
+ *
+ * @return void
+ */
+ public function addElement(ODD $element) {
+ if (!is_array($this->elements)) {
+ $this->elements = array();
+ }
+ $this->elements[] = $element;
+ }
+
+ /**
+ * Add multiple elements at once
+ *
+ * @param array $elements Array of ODD elements
+ *
+ * @return void
+ */
+ public function addElements(array $elements) {
+ foreach ($elements as $element) {
+ $this->addElement($element);
+ }
+ }
+
+ /**
+ * Return all elements
+ *
+ * @return array
+ */
+ public function getElements() {
+ return $this->elements;
+ }
+
+ /**
+ * Set an optional wrapper factory to optionally embed the ODD document in another format.
+ *
+ * @param ODDWrapperFactory $factory The factory
+ *
+ * @return void
+ */
+ public function setWrapperFactory(ODDWrapperFactory $factory) {
+ $this->wrapperfactory = $factory;
+ }
+
+ /**
+ * Magic function to generate valid ODD XML for this item.
+ *
+ * @return string
+ */
+ public function __toString() {
+ $xml = "";
+
+ if ($this->wrapperfactory) {
+ // A wrapper has been provided
+ $wrapper = $this->wrapperfactory->getElementWrapper($this); // Get the wrapper for this element
+
+ $xml = $wrapper->wrap($this); // Wrap this element (and subelements)
+ } else {
+ // Output begin tag
+ $generated = date("r");
+ $xml .= "<odd version=\"{$this->ODDSupportedVersion}\" generated=\"$generated\">\n";
+
+ // Get XML for elements
+ foreach ($this->elements as $element) {
+ $xml .= "$element";
+ }
+
+ // Output end tag
+ $xml .= "</odd>\n";
+ }
+
+ return $xml;
+ }
+
+ // ITERATOR INTERFACE //////////////////////////////////////////////////////////////
+ /*
+ * This lets an entity's attributes be displayed using foreach as a normal array.
+ * Example: http://www.sitepoint.com/print/php5-standard-library
+ */
+
+ private $valid = FALSE;
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::rewind()
+ *
+ * @return void
+ */
+ function rewind() {
+ $this->valid = (FALSE !== reset($this->elements));
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::current()
+ *
+ * @return void
+ */
+ function current() {
+ return current($this->elements);
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::key()
+ *
+ * @return void
+ */
+ function key() {
+ return key($this->elements);
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::next()
+ *
+ * @return void
+ */
+ function next() {
+ $this->valid = (FALSE !== next($this->elements));
+ }
+
+ /**
+ * Iterator interface
+ *
+ * @see Iterator::valid()
+ *
+ * @return void
+ */
+ function valid() {
+ return $this->valid;
+ }
+}
diff --git a/engine/classes/ODDEntity.php b/engine/classes/ODDEntity.php
new file mode 100644
index 000000000..e9bb5da6a
--- /dev/null
+++ b/engine/classes/ODDEntity.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * ODD Entity class.
+ *
+ * @package Elgg.Core
+ * @subpackage ODD
+ */
+class ODDEntity extends ODD {
+
+ /**
+ * New ODD Entity
+ *
+ * @param string $uuid A universally unique ID
+ * @param string $class Class
+ * @param string $subclass Subclass
+ */
+ function __construct($uuid, $class, $subclass = "") {
+ parent::__construct();
+
+ $this->setAttribute('uuid', $uuid);
+ $this->setAttribute('class', $class);
+ $this->setAttribute('subclass', $subclass);
+ }
+
+ /**
+ * Returns entity.
+ *
+ * @return 'entity'
+ */
+ protected function getTagName() {
+ return "entity";
+ }
+}
diff --git a/engine/classes/ODDMetaData.php b/engine/classes/ODDMetaData.php
new file mode 100644
index 000000000..58862e0fb
--- /dev/null
+++ b/engine/classes/ODDMetaData.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * ODD Metadata class.
+ *
+ * @package Elgg.Core
+ * @subpackage ODD
+ */
+class ODDMetaData extends ODD {
+
+ /**
+ * New ODD metadata
+ *
+ * @param unknown_type $uuid Unique ID
+ * @param unknown_type $entity_uuid Another unique ID
+ * @param unknown_type $name Name
+ * @param unknown_type $value Value
+ * @param unknown_type $type Type
+ * @param unknown_type $owner_uuid Owner ID
+ */
+ function __construct($uuid, $entity_uuid, $name, $value, $type = "", $owner_uuid = "") {
+ parent::__construct();
+
+ $this->setAttribute('uuid', $uuid);
+ $this->setAttribute('entity_uuid', $entity_uuid);
+ $this->setAttribute('name', $name);
+ $this->setAttribute('type', $type);
+ $this->setAttribute('owner_uuid', $owner_uuid);
+ $this->setBody($value);
+ }
+
+ /**
+ * Returns 'metadata'
+ *
+ * @return 'metadata'
+ */
+ protected function getTagName() {
+ return "metadata";
+ }
+}
diff --git a/engine/classes/ODDRelationship.php b/engine/classes/ODDRelationship.php
new file mode 100644
index 000000000..2906b1c73
--- /dev/null
+++ b/engine/classes/ODDRelationship.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * ODD Relationship class.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+class ODDRelationship extends ODD {
+
+ /**
+ * New ODD Relationship
+ *
+ * @param unknown_type $uuid1 First UUID
+ * @param unknown_type $type Type of telationship
+ * @param unknown_type $uuid2 Second UUId
+ */
+ function __construct($uuid1, $type, $uuid2) {
+ parent::__construct();
+
+ $this->setAttribute('uuid1', $uuid1);
+ $this->setAttribute('type', $type);
+ $this->setAttribute('uuid2', $uuid2);
+ }
+
+ /**
+ * Returns 'relationship'
+ *
+ * @return 'relationship'
+ */
+ protected function getTagName() {
+ return "relationship";
+ }
+}
diff --git a/engine/classes/PluginException.php b/engine/classes/PluginException.php
new file mode 100644
index 000000000..a74303695
--- /dev/null
+++ b/engine/classes/PluginException.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * PluginException
+ *
+ * A plugin Exception, thrown when an Exception occurs relating to the plugin mechanism.
+ * Subclass for specific plugin Exceptions.
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class PluginException extends Exception {}
diff --git a/engine/classes/RegistrationException.php b/engine/classes/RegistrationException.php
new file mode 100644
index 000000000..5246efc25
--- /dev/null
+++ b/engine/classes/RegistrationException.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * RegistrationException
+ * Could not register a new user for whatever reason.
+ *
+ * @package Elgg.Core
+ * @subpackage Exceptions
+ */
+class RegistrationException extends InstallationException {}
diff --git a/engine/classes/SecurityException.php b/engine/classes/SecurityException.php
new file mode 100644
index 000000000..3b6382f9e
--- /dev/null
+++ b/engine/classes/SecurityException.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * SecurityException
+ * An Security Exception, throw when a Security Exception occurs. Subclass for
+ * specific Security Execeptions (access problems etc)
+ *
+ * @package Elgg.Core
+ * @subpackage Exception
+ */
+class SecurityException extends Exception {}
diff --git a/engine/classes/SuccessResult.php b/engine/classes/SuccessResult.php
new file mode 100644
index 000000000..ab5468ad8
--- /dev/null
+++ b/engine/classes/SuccessResult.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * SuccessResult
+ * Generic success result class, extend if you want to do something special.
+ *
+ * @package Elgg.Core
+ * @subpackage WebServicesAPI
+ */
+class SuccessResult extends GenericResult {
+ // Do not change this from 0
+ public static $RESULT_SUCCESS = 0;
+
+ /**
+ * A new success result
+ *
+ * @param string $result The result
+ */
+ public function __construct($result) {
+ $this->setResult($result);
+ $this->setStatusCode(SuccessResult::$RESULT_SUCCESS);
+ }
+
+ /**
+ * Returns a new instance of this class
+ *
+ * @param unknown $result A result of some kind?
+ *
+ * @return SuccessResult
+ */
+ public static function getInstance($result) {
+ // Return a new error object.
+ return new SuccessResult($result);
+ }
+}
diff --git a/engine/classes/XMLRPCArrayParameter.php b/engine/classes/XMLRPCArrayParameter.php
new file mode 100644
index 000000000..a8edccba7
--- /dev/null
+++ b/engine/classes/XMLRPCArrayParameter.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * An array containing other XMLRPCParameter objects.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ *
+ */
+class XMLRPCArrayParameter extends XMLRPCParameter
+{
+ /**
+ * Construct an array.
+ *
+ * @param array $parameters Optional array of parameters, if not provided
+ * then addField must be used.
+ */
+ function __construct($parameters = NULL) {
+ parent::__construct();
+
+ if (is_array($parameters)) {
+ foreach ($parameters as $v) {
+ $this->addField($v);
+ }
+ }
+ }
+
+ /**
+ * Add a field to the container.
+ *
+ * @param XMLRPCParameter $value The value.
+ *
+ * @return void
+ */
+ public function addField(XMLRPCParameter $value) {
+ if (!is_array($this->value)) {
+ $this->value = array();
+ }
+
+ $this->value[] = $value;
+ }
+
+ /**
+ * Converts XML array to string
+ *
+ * @return string
+ */
+ function __toString() {
+ $params = "";
+ foreach ($this->value as $value) {
+ $params .= "$value";
+ }
+
+ return "<array><data>$params</data></array>";
+ }
+}
diff --git a/engine/classes/XMLRPCBase64Parameter.php b/engine/classes/XMLRPCBase64Parameter.php
new file mode 100644
index 000000000..7db0a761c
--- /dev/null
+++ b/engine/classes/XMLRPCBase64Parameter.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * A base 64 encoded blob of binary.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCBase64Parameter extends XMLRPCParameter {
+ /**
+ * Construct a base64 encoded block
+ *
+ * @param string $blob Unencoded binary blob
+ */
+ function __construct($blob) {
+ parent::__construct();
+
+ $this->value = base64_encode($blob);
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ return "<value><base64>{$value}</base64></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCBoolParameter.php b/engine/classes/XMLRPCBoolParameter.php
new file mode 100644
index 000000000..607841cb8
--- /dev/null
+++ b/engine/classes/XMLRPCBoolParameter.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * A boolean.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCBoolParameter extends XMLRPCParameter {
+
+ /**
+ * New bool parameter
+ *
+ * @param bool $value Value
+ */
+ function __construct($value) {
+ parent::__construct();
+
+ $this->value = (bool)$value;
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ $code = ($this->value) ? "1" : "0";
+ return "<value><boolean>{$code}</boolean></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCCall.php b/engine/classes/XMLRPCCall.php
new file mode 100644
index 000000000..fd28f1e3e
--- /dev/null
+++ b/engine/classes/XMLRPCCall.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * An XMLRPC call
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCCall {
+ /** Method name */
+ private $methodname;
+
+ /** Parameters */
+ private $params;
+
+ /**
+ * Construct a new XML RPC Call
+ *
+ * @param string $xml XML
+ */
+ function __construct($xml) {
+ $this->parse($xml);
+ }
+
+ /**
+ * Return the method name associated with the call.
+ *
+ * @return string
+ */
+ public function getMethodName() { return $this->methodname; }
+
+ /**
+ * Return the parameters.
+ * Returns a nested array of XmlElement.
+ *
+ * @see XmlElement
+ * @return array
+ */
+ public function getParameters() { return $this->params; }
+
+ /**
+ * Parse the xml into its components according to spec.
+ * This first version is a little primitive.
+ *
+ * @param string $xml XML
+ *
+ * @return void
+ */
+ private function parse($xml) {
+ $xml = xml_to_object($xml);
+
+ // sanity check
+ if ((isset($xml->name)) && (strcasecmp($xml->name, "methodCall") != 0)) {
+ throw new CallException(elgg_echo('CallException:NotRPCCall'));
+ }
+
+ // method name
+ $this->methodname = $xml->children[0]->content;
+
+ // parameters
+ $this->params = $xml->children[1]->children;
+ }
+}
diff --git a/engine/classes/XMLRPCDateParameter.php b/engine/classes/XMLRPCDateParameter.php
new file mode 100644
index 000000000..93bbbd8f5
--- /dev/null
+++ b/engine/classes/XMLRPCDateParameter.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * An ISO8601 data and time.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCDateParameter extends XMLRPCParameter {
+ /**
+ * Construct a date
+ *
+ * @param int $timestamp The unix timestamp, or blank for "now".
+ */
+ function __construct($timestamp = 0) {
+ parent::__construct();
+
+ $this->value = $timestamp;
+
+ if (!$timestamp) {
+ $this->value = time();
+ }
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ $value = date('c', $this->value);
+ return "<value><dateTime.iso8601>{$value}</dateTime.iso8601></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCDoubleParameter.php b/engine/classes/XMLRPCDoubleParameter.php
new file mode 100644
index 000000000..b7834650e
--- /dev/null
+++ b/engine/classes/XMLRPCDoubleParameter.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * A double precision signed floating point number.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCDoubleParameter extends XMLRPCParameter {
+
+ /**
+ * New XML Double
+ *
+ * @param int $value Value
+ */
+ function __construct($value) {
+ parent::__construct();
+
+ $this->value = (float)$value;
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ return "<value><double>{$this->value}</double></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCErrorResponse.php b/engine/classes/XMLRPCErrorResponse.php
new file mode 100644
index 000000000..425c075cc
--- /dev/null
+++ b/engine/classes/XMLRPCErrorResponse.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * XMLRPC Error Response
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCErrorResponse extends XMLRPCResponse {
+ /**
+ * Set the error response and error code.
+ *
+ * @param string $message The message
+ * @param int $code Error code (default = system error as defined by
+ * http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php)
+ */
+ function __construct($message, $code = -32400) {
+ $this->addParameter(
+ new XMLRPCStructParameter(
+ array (
+ 'faultCode' => new XMLRPCIntParameter($code),
+ 'faultString' => new XMLRPCStringParameter($message)
+ )
+ )
+ );
+ }
+
+ /**
+ * Output to XML.
+ *
+ * @return string
+ */
+ public function __toString() {
+ return "<methodResponse><fault><value>{$this->parameters[0]}</value></fault></methodResponse>";
+ }
+}
diff --git a/engine/classes/XMLRPCIntParameter.php b/engine/classes/XMLRPCIntParameter.php
new file mode 100644
index 000000000..0fc146165
--- /dev/null
+++ b/engine/classes/XMLRPCIntParameter.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * An Integer.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCIntParameter extends XMLRPCParameter {
+
+ /**
+ * A new XML int
+ *
+ * @param int $value Value
+ */
+ function __construct($value) {
+ parent::__construct();
+
+ $this->value = (int)$value;
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ return "<value><i4>{$this->value}</i4></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCParameter.php b/engine/classes/XMLRPCParameter.php
new file mode 100644
index 000000000..ffbad8082
--- /dev/null
+++ b/engine/classes/XMLRPCParameter.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Superclass for all RPC parameters.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+abstract class XMLRPCParameter {
+ protected $value;
+
+ /**
+ * Set initial values
+ */
+ function __construct() { }
+
+}
diff --git a/engine/classes/XMLRPCResponse.php b/engine/classes/XMLRPCResponse.php
new file mode 100644
index 000000000..a6256d385
--- /dev/null
+++ b/engine/classes/XMLRPCResponse.php
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * XML-RPC Response.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+abstract class XMLRPCResponse {
+ /** An array of parameters */
+ protected $parameters = array();
+
+ /**
+ * Add a parameter here.
+ *
+ * @param XMLRPCParameter $param The parameter.
+ *
+ * @return void
+ */
+ public function addParameter(XMLRPCParameter $param) {
+ if (!is_array($this->parameters)) {
+ $this->parameters = array();
+ }
+
+ $this->parameters[] = $param;
+ }
+
+ /**
+ * Add an integer
+ *
+ * @param int $value Value
+ *
+ * @return void
+ */
+ public function addInt($value) {
+ $this->addParameter(new XMLRPCIntParameter($value));
+ }
+
+ /**
+ * Add a string
+ *
+ * @param string $value Value
+ *
+ * @return void
+ */
+ public function addString($value) {
+ $this->addParameter(new XMLRPCStringParameter($value));
+ }
+
+ /**
+ * Add a double
+ *
+ * @param int $value Value
+ *
+ * @return void
+ */
+ public function addDouble($value) {
+ $this->addParameter(new XMLRPCDoubleParameter($value));
+ }
+
+ /**
+ * Add a boolean
+ *
+ * @param bool $value Value
+ *
+ * @return void
+ */
+ public function addBoolean($value) {
+ $this->addParameter(new XMLRPCBoolParameter($value));
+ }
+}
diff --git a/engine/classes/XMLRPCStringParameter.php b/engine/classes/XMLRPCStringParameter.php
new file mode 100644
index 000000000..35b28214b
--- /dev/null
+++ b/engine/classes/XMLRPCStringParameter.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * A string.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCStringParameter extends XMLRPCParameter {
+
+ /**
+ * A new XML string
+ *
+ * @param string $value Value
+ */
+ function __construct($value) {
+ parent::__construct();
+
+ $this->value = $value;
+ }
+
+ /**
+ * Convert to XML string
+ *
+ * @return string
+ */
+ function __toString() {
+ $value = htmlentities($this->value);
+ return "<value><string>{$value}</string></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCStructParameter.php b/engine/classes/XMLRPCStructParameter.php
new file mode 100644
index 000000000..694ddf5df
--- /dev/null
+++ b/engine/classes/XMLRPCStructParameter.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * A structure containing other XMLRPCParameter objects.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCStructParameter extends XMLRPCParameter {
+ /**
+ * Construct a struct.
+ *
+ * @param array $parameters Optional associated array of parameters, if
+ * not provided then addField must be used.
+ */
+ function __construct($parameters = NULL) {
+ parent::__construct();
+
+ if (is_array($parameters)) {
+ foreach ($parameters as $k => $v) {
+ $this->addField($k, $v);
+ }
+ }
+ }
+
+ /**
+ * Add a field to the container.
+ *
+ * @param string $name The name of the field.
+ * @param XMLRPCParameter $value The value.
+ *
+ * @return void
+ */
+ public function addField($name, XMLRPCParameter $value) {
+ if (!is_array($this->value)) {
+ $this->value = array();
+ }
+
+ $this->value[$name] = $value;
+ }
+
+ /**
+ * Convert to string
+ *
+ * @return string
+ */
+ function __toString() {
+ $params = "";
+ foreach ($this->value as $k => $v) {
+ $params .= "<member><name>$k</name>$v</member>";
+ }
+
+ return "<value><struct>$params</struct></value>";
+ }
+}
diff --git a/engine/classes/XMLRPCSuccessResponse.php b/engine/classes/XMLRPCSuccessResponse.php
new file mode 100644
index 000000000..e02e82c5c
--- /dev/null
+++ b/engine/classes/XMLRPCSuccessResponse.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Success Response
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+class XMLRPCSuccessResponse extends XMLRPCResponse {
+ /**
+ * Output to XML.
+ *
+ * @return string
+ */
+ public function __toString() {
+ $params = "";
+ foreach ($this->parameters as $param) {
+ $params .= "<param>$param</param>\n";
+ }
+
+ return "<methodResponse><params>$params</params></methodResponse>";
+ }
+}
diff --git a/engine/classes/XmlElement.php b/engine/classes/XmlElement.php
new file mode 100644
index 000000000..280bba664
--- /dev/null
+++ b/engine/classes/XmlElement.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * A class representing an XML element for import.
+ *
+ * @package Elgg.Core
+ * @subpackage XML
+ */
+class XmlElement {
+ /** The name of the element */
+ public $name;
+
+ /** The attributes */
+ public $attributes;
+
+ /** CData */
+ public $content;
+
+ /** Child elements */
+ public $children;
+};
diff --git a/engine/handlers/action_handler.php b/engine/handlers/action_handler.php
new file mode 100644
index 000000000..bcad110b2
--- /dev/null
+++ b/engine/handlers/action_handler.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Action handler.
+ *
+ * This file dispatches actions. It is called via a URL rewrite in .htaccess
+ * from http://site/action/. Anything after 'action/' is considered the action
+ * and will be passed to {@link action()}.
+ *
+ * @warning This sets the input named 'action' to the current action. When calling
+ * an action, get_input('action') will always return the action name.
+ *
+ * @package Elgg.Core
+ * @subpackage Actions
+ * @link http://docs.elgg.org/Tutorials/Actions
+ */
+
+require_once(dirname(dirname(__FILE__)) . "/start.php");
+
+$action = get_input("action");
+action($action);
diff --git a/engine/handlers/cache_handler.php b/engine/handlers/cache_handler.php
new file mode 100644
index 000000000..7706c2c92
--- /dev/null
+++ b/engine/handlers/cache_handler.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Cache handler.
+ *
+ * External access to cached CSS and JavaScript views. The cached file URLS
+ * should be of the form: cache/<type>/<viewtype>/<name/of/view>.<unique_id>.<type> where
+ * type is either css or js, view is the name of the cached view, and
+ * unique_id is an identifier that is updated every time the cache is flushed.
+ * The simplest way to maintain a unique identifier is to use the lastcache
+ * variable in Elgg's config object.
+ *
+ * @see elgg_register_simplecache_view()
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+
+// Get dataroot
+require_once(dirname(dirname(__FILE__)) . '/settings.php');
+$mysql_dblink = mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, true);
+if (!$mysql_dblink) {
+ echo 'Cache error: unable to connect to database server';
+ exit;
+}
+
+if (!mysql_select_db($CONFIG->dbname, $mysql_dblink)) {
+ echo 'Cache error: unable to connect to Elgg database';
+ exit;
+}
+
+$query = "select name, value from {$CONFIG->dbprefix}datalists
+ where name in ('dataroot', 'simplecache_enabled')";
+
+$result = mysql_query($query, $mysql_dblink);
+if (!$result) {
+ echo 'Cache error: unable to get the data root';
+ exit;
+}
+while ($row = mysql_fetch_object($result)) {
+ ${$row->name} = $row->value;
+}
+mysql_free_result($result);
+
+
+$dirty_request = $_GET['request'];
+// only alphanumeric characters plus /, ., and _ and no '..'
+$filter = array("options" => array("regexp" => "/^(\.?[_a-zA-Z0-9\/]+)+$/"));
+$request = filter_var($dirty_request, FILTER_VALIDATE_REGEXP, $filter);
+if (!$request || !$simplecache_enabled) {
+ echo 'Cache error: bad request';
+ exit;
+}
+
+// testing showed regex to be marginally faster than array / string functions over 100000 reps
+// it won't make a difference in real life and regex is easier to read.
+// <type>/<viewtype>/<name/of/view.and.dots>.<ts>.<type>
+$regex = '|([^/]+)/([^/]+)/(.+)\.([^\.]+)\.([^.]+)$|';
+preg_match($regex, $request, $matches);
+
+$type = $matches[1];
+$viewtype = $matches[2];
+$view = $matches[3];
+$ts = $matches[4];
+
+// If is the same ETag, content didn't changed.
+$etag = $ts;
+if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) == "\"$etag\"") {
+ header("HTTP/1.1 304 Not Modified");
+ exit;
+}
+
+switch ($type) {
+ case 'css':
+ header("Content-type: text/css", true);
+ $view = "css/$view";
+ break;
+ case 'js':
+ header('Content-type: text/javascript', true);
+ $view = "js/$view";
+ break;
+}
+
+header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+6 months")), true);
+header("Pragma: public", true);
+header("Cache-Control: public", true);
+header("ETag: \"$etag\"");
+
+$filename = $dataroot . 'views_simplecache/' . md5($viewtype . $view);
+
+if (file_exists($filename)) {
+ $contents = file_get_contents($filename);
+} else {
+ // someone trying to access a non-cached file or a race condition with cache flushing
+ mysql_close($mysql_dblink);
+ require_once(dirname(dirname(__FILE__)) . "/start.php");
+ elgg_regenerate_simplecache();
+
+ elgg_set_viewtype($viewtype);
+ $contents = elgg_view($view);
+}
+
+echo $contents;
diff --git a/engine/handlers/export_handler.php b/engine/handlers/export_handler.php
new file mode 100644
index 000000000..aa5214c23
--- /dev/null
+++ b/engine/handlers/export_handler.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ * Export handler.
+ *
+ * @package Elgg.Core
+ * @subpackage Export
+ */
+
+require_once(dirname(dirname(__FILE__)) . "/start.php");
+
+
+// Get input values, these will be mapped via modrewrite
+$guid = get_input("guid"); // guid of the entity
+
+// For attributes eg http://example.com/odd/73/attr/owner_uuid/
+// or http://example.com/odd/73/metadata/86/
+$type = get_input("type"); // attr, metadata, annotation, relationship
+$id_or_name = get_input("idname"); // Either a number or the key name (if attribute)
+
+$body = "";
+$title = "";
+
+// Only export the GUID
+if (($guid != "") && ($type == "") && ($id_or_name == "")) {
+ $entity = get_entity($guid);
+
+ if (!$entity) {
+ $query = elgg_echo('InvalidParameterException:GUIDNotFound', array($guid));
+ throw new InvalidParameterException($query);
+ }
+
+ $title = "GUID:$guid";
+ $body = elgg_view("export/entity", array("entity" => $entity, "uuid" => guid_to_uuid($guid)));
+
+ // Export an individual attribute
+} else if (($guid != "") && ($type != "") && ($id_or_name != "")) {
+ // Get a uuid
+ $entity = get_entity($guid);
+ if (!$entity) {
+ $msg = elgg_echo('InvalidParameterException:GUIDNotFound', array($guid));
+ throw new InvalidParameterException($msg);
+ }
+
+ $uuid = guid_to_uuid($entity->getGUID()) . "$type/$id_or_name/";
+
+ switch ($type) {
+ case 'attr' : // @todo: Do this better? - This is a bit of a hack...
+ $v = $entity->get($id_or_name);
+ if (!$v) {
+ $msg = elgg_echo('InvalidParameterException:IdNotExistForGUID', array($id_or_name, $guid));
+ throw new InvalidParameterException($msg);
+ }
+
+ $m = new ElggMetadata();
+
+ $m->value = $v;
+ $m->name = $id_or_name;
+ $m->entity_guid = $guid;
+ $m->time_created = $entity->time_created;
+ $m->time_updated = $entity->time_updated;
+ $m->owner_guid = $entity->owner_guid;
+ $m->id = $id_or_name;
+ $m->type = "attr";
+ break;
+ case 'metadata' :
+ $m = elgg_get_metadata_from_id($id_or_name);
+ break;
+ case 'annotation' :
+ $m = elgg_get_annotation_from_id($id_or_name);
+ break;
+ case 'relationship' :
+ $r = get_relationship($id_or_name);
+ break;
+ case 'volatile' :
+ $m = elgg_trigger_plugin_hook('volatile', 'metadata', array(
+ 'guid' => $guid,
+ 'varname' => $id_or_name,
+ ));
+ break;
+
+ default :
+ $msg = elgg_echo('InvalidParameterException:CanNotExportType', array($type));
+ throw new InvalidParameterException($msg);
+ }
+
+ // Render metadata or relationship
+ if ((!$m) && (!$r)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NoDataFound'));
+ }
+
+ // Exporting metadata?
+ if ($m) {
+ if ($m->entity_guid != $entity->guid) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:DoesNotBelong'));
+ }
+
+ $title = "$type:$id_or_name";
+ $body = elgg_view("export/metadata", array("metadata" => $m, "uuid" => $uuid));
+ }
+
+ // Exporting relationship
+ if ($r) {
+ if (($r->guid_one != $entity->guid) && ($r->guid_two != $entity->guid)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:DoesNotBelongOrRefer'));
+ }
+
+ $title = "$type:$id_or_name";
+ $body = elgg_view("export/relationship", array("relationship" => $r, "uuid" => $uuid));
+ }
+
+ // Something went wrong
+} else {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:MissingParameter'));
+}
+
+$content = elgg_view_title($title) . $body;
+$body = elgg_view_layout('one_sidebar', array('content' => $content));
+echo elgg_view_page($title, $body);
diff --git a/engine/handlers/page_handler.php b/engine/handlers/page_handler.php
new file mode 100644
index 000000000..1ed295b7d
--- /dev/null
+++ b/engine/handlers/page_handler.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Pages handler.
+ *
+ * This file dispatches pages. It is called via a URL rewrite in .htaccess
+ * from http://site/handler/page1/page2. The first element after site/ is
+ * the page handler name as registered by {@link elgg_register_page_handler()}.
+ * The rest of the string is sent to {@link page_handler()}.
+ *
+ * Note that the following handler names are reserved by elgg and should not be
+ * registered by any plugins:
+ * * action
+ * * cache
+ * * services
+ * * export
+ * * mt
+ * * xml-rpc.php
+ * * rewrite.php
+ * * tag (deprecated, reserved for backwards compatibility)
+ * * pg (deprecated, reserved for backwards compatibility)
+ *
+ * {@link page_handler()} explodes the pages string by / and sends it to
+ * the page handler function as registered by {@link elgg_register_page_handler()}.
+ * If a valid page handler isn't found, plugins have a chance to provide a 404.
+ *
+ * @package Elgg.Core
+ * @subpackage PageHandler
+ * @link http://docs.elgg.org/Tutorials/PageHandlers
+ */
+
+
+// Permanent redirect to pg-less urls
+$url = $_SERVER['REQUEST_URI'];
+$new_url = preg_replace('#/pg/#', '/', $url, 1);
+
+if ($url !== $new_url) {
+ header("HTTP/1.1 301 Moved Permanently");
+ header("Location: $new_url");
+}
+
+require_once(dirname(dirname(__FILE__)) . "/start.php");
+
+$handler = get_input('handler');
+$page = get_input('page');
+
+if (!page_handler($handler, $page)) {
+ forward('', '404');
+}
diff --git a/engine/handlers/service_handler.php b/engine/handlers/service_handler.php
new file mode 100644
index 000000000..9cfcd230f
--- /dev/null
+++ b/engine/handlers/service_handler.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Services handler.
+ *
+ * This file dispatches requests to web services. It is called via a URL rewrite
+ * in .htaccess from http://site/services/api/handler/response_format/request.
+ * The first element after 'services/api/' is the service handler name as
+ * registered by {@link register_service_handler()}.
+ *
+ * The remaining string is then passed to the {@link service_handler()}
+ * which explodes by /, extracts the first element as the response format
+ * (viewtype), and then passes the remaining array to the service handler
+ * function registered by {@link register_service_handler()}.
+ *
+ * If a service handler isn't found, a 404 header is sent.
+ *
+ * @package Elgg.Core
+ * @subpackage WebServices
+ * @link http://docs.elgg.org/Tutorials/WebServices
+ */
+
+require_once(dirname(dirname(__FILE__)) . "/start.php");
+
+$handler = get_input('handler');
+$request = get_input('request');
+
+service_handler($handler, $request);
diff --git a/engine/handlers/xml-rpc_handler.php b/engine/handlers/xml-rpc_handler.php
new file mode 100644
index 000000000..2ee29e5b7
--- /dev/null
+++ b/engine/handlers/xml-rpc_handler.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * XML-RPC handler.
+ *
+ * @warning This is very old code. Does it work at all?
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ * @link http://docs.elgg.org/Tutorials/XMLRPC
+ * @todo Does this work?
+ */
+
+require_once(dirname(dirname(__FILE__)) . "/start.php");
+
+// Register the error handler
+error_reporting(E_ALL);
+set_error_handler('_php_xmlrpc_error_handler');
+
+// Register a default exception handler
+set_exception_handler('_php_xmlrpc_exception_handler');
+
+// Set some defaults
+$result = null;
+set_input('view', 'xml'); // Set default view regardless
+
+// Get the post data
+$input = get_post_data();
+
+if ($input) {
+ // Parse structures from xml
+ $call = new XMLRPCCall($input);
+
+ // Process call
+ $result = trigger_xmlrpc_handler($call);
+} else {
+ throw new CallException(elgg_echo('xmlrpc:noinputdata'));
+}
+
+if (!($result instanceof XMLRPCResponse)) {
+ throw new APIException(elgg_echo('APIException:ApiResultUnknown'));
+}
+
+// Output result
+echo elgg_view_page("XML-RPC", elgg_view("xml-rpc/output", array('result' => $result)));
diff --git a/engine/lib/access.php b/engine/lib/access.php
new file mode 100644
index 000000000..f7d3bf7ea
--- /dev/null
+++ b/engine/lib/access.php
@@ -0,0 +1,1067 @@
+<?php
+/**
+ * Functions for Elgg's access system for entities, metadata, and annotations.
+ *
+ * Access is generally saved in the database as access_id. This corresponds to
+ * one of the ACCESS_* constants defined in {@link elgglib.php} or the ID of an
+ * access collection.
+ *
+ * @package Elgg.Core
+ * @subpackage Access
+ * @link http://docs.elgg.org/Access
+ */
+
+/**
+ * Return an ElggCache static variable cache for the access caches
+ *
+ * @staticvar ElggStaticVariableCache $access_cache
+ * @return \ElggStaticVariableCache
+ * @access private
+ */
+function _elgg_get_access_cache() {
+ /**
+ * A default filestore cache using the dataroot.
+ */
+ static $access_cache;
+
+ if (!$access_cache) {
+ $access_cache = new ElggStaticVariableCache('access');
+ }
+
+ return $access_cache;
+}
+
+/**
+ * Return a string of access_ids for $user_id appropriate for inserting into an SQL IN clause.
+ *
+ * @uses get_access_array
+ *
+ * @link http://docs.elgg.org/Access
+ * @see get_access_array()
+ *
+ * @param int $user_id User ID; defaults to currently logged in user
+ * @param int $site_id Site ID; defaults to current site
+ * @param bool $flush If set to true, will refresh the access list from the
+ * database rather than using this function's cache.
+ *
+ * @return string A list of access collections suitable for using in an SQL call
+ * @access private
+ */
+function get_access_list($user_id = 0, $site_id = 0, $flush = false) {
+ global $CONFIG, $init_finished;
+ $cache = _elgg_get_access_cache();
+
+ if ($flush) {
+ $cache->clear();
+ }
+
+ if ($user_id == 0) {
+ $user_id = elgg_get_logged_in_user_guid();
+ }
+
+ if (($site_id == 0) && (isset($CONFIG->site_id))) {
+ $site_id = $CONFIG->site_id;
+ }
+ $user_id = (int) $user_id;
+ $site_id = (int) $site_id;
+
+ $hash = $user_id . $site_id . 'get_access_list';
+
+ if ($cache[$hash]) {
+ return $cache[$hash];
+ }
+
+ $access_array = get_access_array($user_id, $site_id, $flush);
+ $access = "(" . implode(",", $access_array) . ")";
+
+ if ($init_finished) {
+ $cache[$hash] = $access;
+ }
+
+ return $access;
+}
+
+/**
+ * Returns an array of access IDs a user is permitted to see.
+ *
+ * Can be overridden with the 'access:collections:read', 'user' plugin hook.
+ *
+ * This returns a list of all the collection ids a user owns or belongs
+ * to plus public and logged in access levels. If the user is an admin, it includes
+ * the private access level.
+ *
+ * @internal this is only used in core for creating the SQL where clause when
+ * retrieving content from the database. The friends access level is handled by
+ * get_access_sql_suffix().
+ *
+ * @see get_write_access_array() for the access levels that a user can write to.
+ *
+ * @param int $user_id User ID; defaults to currently logged in user
+ * @param int $site_id Site ID; defaults to current site
+ * @param bool $flush If set to true, will refresh the access ids from the
+ * database rather than using this function's cache.
+ *
+ * @return array An array of access collections ids
+ */
+function get_access_array($user_id = 0, $site_id = 0, $flush = false) {
+ global $CONFIG, $init_finished;
+
+ $cache = _elgg_get_access_cache();
+
+ if ($flush) {
+ $cache->clear();
+ }
+
+ if ($user_id == 0) {
+ $user_id = elgg_get_logged_in_user_guid();
+ }
+
+ if (($site_id == 0) && (isset($CONFIG->site_guid))) {
+ $site_id = $CONFIG->site_guid;
+ }
+
+ $user_id = (int) $user_id;
+ $site_id = (int) $site_id;
+
+ $hash = $user_id . $site_id . 'get_access_array';
+
+ if ($cache[$hash]) {
+ $access_array = $cache[$hash];
+ } else {
+ $access_array = array(ACCESS_PUBLIC);
+
+ // The following can only return sensible data if the user is logged in.
+ if (elgg_is_logged_in()) {
+ $access_array[] = ACCESS_LOGGED_IN;
+
+ // Get ACL memberships
+ $query = "SELECT am.access_collection_id"
+ . " FROM {$CONFIG->dbprefix}access_collection_membership am"
+ . " LEFT JOIN {$CONFIG->dbprefix}access_collections ag ON ag.id = am.access_collection_id"
+ . " WHERE am.user_guid = $user_id AND (ag.site_guid = $site_id OR ag.site_guid = 0)";
+
+ $collections = get_data($query);
+ if ($collections) {
+ foreach ($collections as $collection) {
+ if (!empty($collection->access_collection_id)) {
+ $access_array[] = (int)$collection->access_collection_id;
+ }
+ }
+ }
+
+ // Get ACLs owned.
+ $query = "SELECT ag.id FROM {$CONFIG->dbprefix}access_collections ag ";
+ $query .= "WHERE ag.owner_guid = $user_id AND (ag.site_guid = $site_id OR ag.site_guid = 0)";
+
+ $collections = get_data($query);
+ if ($collections) {
+ foreach ($collections as $collection) {
+ if (!empty($collection->id)) {
+ $access_array[] = (int)$collection->id;
+ }
+ }
+ }
+
+ $ignore_access = elgg_check_access_overrides($user_id);
+
+ if ($ignore_access == true) {
+ $access_array[] = ACCESS_PRIVATE;
+ }
+ }
+
+ if ($init_finished) {
+ $cache[$hash] = $access_array;
+ }
+ }
+
+ $options = array(
+ 'user_id' => $user_id,
+ 'site_id' => $site_id
+ );
+
+ return elgg_trigger_plugin_hook('access:collections:read', 'user', $options, $access_array);
+}
+
+/**
+ * Gets the default access permission.
+ *
+ * This returns the default access level for the site or optionally for the user.
+ *
+ * @param ElggUser $user Get the user's default access. Defaults to logged in user.
+ *
+ * @return int default access id (see ACCESS defines in elgglib.php)
+ * @link http://docs.elgg.org/Access
+ */
+function get_default_access(ElggUser $user = null) {
+ global $CONFIG;
+
+ if (!$CONFIG->allow_user_default_access) {
+ return $CONFIG->default_access;
+ }
+
+ if (!($user) && (!$user = elgg_get_logged_in_user_entity())) {
+ return $CONFIG->default_access;
+ }
+
+ if (false !== ($default_access = $user->getPrivateSetting('elgg_default_access'))) {
+ return $default_access;
+ } else {
+ return $CONFIG->default_access;
+ }
+}
+
+/**
+ * Allow disabled entities and metadata to be returned by getter functions
+ *
+ * @todo Replace this with query object!
+ * @global bool $ENTITY_SHOW_HIDDEN_OVERRIDE
+ * @access private
+ */
+$ENTITY_SHOW_HIDDEN_OVERRIDE = false;
+
+/**
+ * Show or hide disabled entities.
+ *
+ * @param bool $show_hidden Show disabled entities.
+ * @return void
+ * @access private
+ */
+function access_show_hidden_entities($show_hidden) {
+ global $ENTITY_SHOW_HIDDEN_OVERRIDE;
+ $ENTITY_SHOW_HIDDEN_OVERRIDE = $show_hidden;
+}
+
+/**
+ * Return current status of showing disabled entities.
+ *
+ * @return bool
+ * @access private
+ */
+function access_get_show_hidden_status() {
+ global $ENTITY_SHOW_HIDDEN_OVERRIDE;
+ return $ENTITY_SHOW_HIDDEN_OVERRIDE;
+}
+
+/**
+ * Returns the SQL where clause for a table with a access_id and enabled columns.
+ *
+ * This handles returning where clauses for ACCESS_FRIENDS and the currently
+ * unused block and filter lists in addition to using get_access_list() for
+ * access collections and the standard access levels.
+ *
+ * @param string $table_prefix Optional table. prefix for the access code.
+ * @param int $owner The guid to check access for. Defaults to logged in user.
+ *
+ * @return string The SQL for a where clause
+ * @access private
+ */
+function get_access_sql_suffix($table_prefix = '', $owner = null) {
+ global $ENTITY_SHOW_HIDDEN_OVERRIDE, $CONFIG;
+
+ $sql = "";
+ $friends_bit = "";
+ $enemies_bit = "";
+
+ if ($table_prefix) {
+ $table_prefix = sanitise_string($table_prefix) . ".";
+ }
+
+ if (!isset($owner)) {
+ $owner = elgg_get_logged_in_user_guid();
+ }
+
+ if (!$owner) {
+ $owner = -1;
+ }
+
+ $ignore_access = elgg_check_access_overrides($owner);
+ $access = get_access_list($owner);
+
+ if ($ignore_access) {
+ $sql = " (1 = 1) ";
+ } else if ($owner != -1) {
+ // we have an entity's guid and auto check for friend relationships
+ $friends_bit = "{$table_prefix}access_id = " . ACCESS_FRIENDS . "
+ AND {$table_prefix}owner_guid IN (
+ SELECT guid_one FROM {$CONFIG->dbprefix}entity_relationships
+ WHERE relationship='friend' AND guid_two=$owner
+ )";
+
+ $friends_bit = '(' . $friends_bit . ') OR ';
+
+ // @todo untested and unsupported at present
+ if ((isset($CONFIG->user_block_and_filter_enabled)) && ($CONFIG->user_block_and_filter_enabled)) {
+ // check to see if the user is in the entity owner's block list
+ // or if the entity owner is in the user's filter list
+ // if so, disallow access
+ $enemies_bit = get_access_restriction_sql('elgg_block_list', "{$table_prefix}owner_guid", $owner, false);
+ $enemies_bit = '('
+ . $enemies_bit
+ . ' AND ' . get_access_restriction_sql('elgg_filter_list', $owner, "{$table_prefix}owner_guid", false)
+ . ')';
+ }
+ }
+
+ if (empty($sql)) {
+ $sql = " $friends_bit ({$table_prefix}access_id IN {$access}
+ OR ({$table_prefix}owner_guid = {$owner})
+ OR (
+ {$table_prefix}access_id = " . ACCESS_PRIVATE . "
+ AND {$table_prefix}owner_guid = $owner
+ )
+ )";
+ }
+
+ if ($enemies_bit) {
+ $sql = "$enemies_bit AND ($sql)";
+ }
+
+ if (!$ENTITY_SHOW_HIDDEN_OVERRIDE) {
+ $sql .= " and {$table_prefix}enabled='yes'";
+ }
+
+ return '(' . $sql . ')';
+}
+
+/**
+ * Get the where clause for an access restriction based on annotations
+ *
+ * Returns an SQL fragment that is true (or optionally false) if the given user has
+ * added an annotation with the given name to the given entity.
+ *
+ * @warning this is a private function for an untested capability and will likely
+ * be removed from a future version of Elgg.
+ *
+ * @param string $annotation_name Name of the annotation
+ * @param string $entity_guid SQL GUID of entity the annotation is attached to.
+ * @param string $owner_guid SQL string that evaluates to the GUID of the annotation owner
+ * @param boolean $exists If true, returns BOOL if the annotation exists
+ *
+ * @return string An SQL fragment suitable for inserting into a WHERE clause
+ * @access private
+ */
+function get_access_restriction_sql($annotation_name, $entity_guid, $owner_guid, $exists) {
+ global $CONFIG;
+
+ if ($exists) {
+ $not = '';
+ } else {
+ $not = 'NOT';
+ }
+
+ $sql = <<<END
+$not EXISTS (SELECT * FROM {$CONFIG->dbprefix}annotations a
+INNER JOIN {$CONFIG->dbprefix}metastrings ms ON (a.name_id = ms.id)
+WHERE ms.string = '$annotation_name'
+AND a.entity_guid = $entity_guid
+AND a.owner_guid = $owner_guid)
+END;
+ return $sql;
+}
+
+/**
+ * Can a user access an entity.
+ *
+ * @warning If a logged in user doesn't have access to an entity, the
+ * core engine will not load that entity.
+ *
+ * @tip This is mostly useful for checking if a user other than the logged in
+ * user has access to an entity that is currently loaded.
+ *
+ * @todo This function would be much more useful if we could pass the guid of the
+ * entity to test access for. We need to be able to tell whether the entity exists
+ * and whether the user has access to the entity.
+ *
+ * @param ElggEntity $entity The entity to check access for.
+ * @param ElggUser $user Optionally user to check access for. Defaults to
+ * logged in user (which is a useless default).
+ *
+ * @return bool
+ * @link http://docs.elgg.org/Access
+ */
+function has_access_to_entity($entity, $user = null) {
+ global $CONFIG;
+
+ if (!isset($user)) {
+ $access_bit = get_access_sql_suffix("e");
+ } else {
+ $access_bit = get_access_sql_suffix("e", $user->getGUID());
+ }
+
+ $query = "SELECT guid from {$CONFIG->dbprefix}entities e WHERE e.guid = " . $entity->getGUID();
+ // Add access controls
+ $query .= " AND " . $access_bit;
+ if (get_data($query)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Returns an array of access permissions that the user is allowed to save content with.
+ * Permissions returned are of the form (id => 'name').
+ *
+ * Example return value in English:
+ * array(
+ * 0 => 'Private',
+ * -2 => 'Friends',
+ * 1 => 'Logged in users',
+ * 2 => 'Public',
+ * 34 => 'My favorite friends',
+ * );
+ *
+ * Plugin hook of 'access:collections:write', 'user'
+ *
+ * @warning this only returns access collections that the user owns plus the
+ * standard access levels. It does not return access collections that the user
+ * belongs to such as the access collection for a group.
+ *
+ * @param int $user_id The user's GUID.
+ * @param int $site_id The current site.
+ * @param bool $flush If this is set to true, this will ignore a cached access array
+ *
+ * @return array List of access permissions
+ * @link http://docs.elgg.org/Access
+ */
+function get_write_access_array($user_id = 0, $site_id = 0, $flush = false) {
+ global $CONFIG, $init_finished;
+ $cache = _elgg_get_access_cache();
+
+ if ($flush) {
+ $cache->clear();
+ }
+
+ if ($user_id == 0) {
+ $user_id = elgg_get_logged_in_user_guid();
+ }
+
+ if (($site_id == 0) && (isset($CONFIG->site_id))) {
+ $site_id = $CONFIG->site_id;
+ }
+
+ $user_id = (int) $user_id;
+ $site_id = (int) $site_id;
+
+ $hash = $user_id . $site_id . 'get_write_access_array';
+
+ if ($cache[$hash]) {
+ $access_array = $cache[$hash];
+ } else {
+ // @todo is there such a thing as public write access?
+ $access_array = array(
+ ACCESS_PRIVATE => elgg_echo("PRIVATE"),
+ ACCESS_FRIENDS => elgg_echo("access:friends:label"),
+ ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"),
+ ACCESS_PUBLIC => elgg_echo("PUBLIC")
+ );
+
+ $query = "SELECT ag.* FROM {$CONFIG->dbprefix}access_collections ag ";
+ $query .= " WHERE (ag.site_guid = $site_id OR ag.site_guid = 0)";
+ $query .= " AND (ag.owner_guid = $user_id)";
+
+ $collections = get_data($query);
+ if ($collections) {
+ foreach ($collections as $collection) {
+ $access_array[$collection->id] = $collection->name;
+ }
+ }
+
+ if ($init_finished) {
+ $cache[$hash] = $access_array;
+ }
+ }
+
+ $options = array(
+ 'user_id' => $user_id,
+ 'site_id' => $site_id
+ );
+ return elgg_trigger_plugin_hook('access:collections:write', 'user',
+ $options, $access_array);
+}
+
+/**
+ * Can the user change this access collection?
+ *
+ * Use the plugin hook of 'access:collections:write', 'user' to change this.
+ * @see get_write_access_array() for details on the hook.
+ *
+ * Respects access control disabling for admin users and {@see elgg_set_ignore_access()}
+ *
+ * @see get_write_access_array()
+ *
+ * @param int $collection_id The collection id
+ * @param mixed $user_guid The user GUID to check for. Defaults to logged in user.
+ * @return bool
+ */
+function can_edit_access_collection($collection_id, $user_guid = null) {
+ if ($user_guid) {
+ $user = get_entity((int) $user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ $collection = get_access_collection($collection_id);
+
+ if (!($user instanceof ElggUser) || !$collection) {
+ return false;
+ }
+
+ $write_access = get_write_access_array($user->getGUID(), 0, true);
+
+ // don't ignore access when checking users.
+ if ($user_guid) {
+ return array_key_exists($collection_id, $write_access);
+ } else {
+ return elgg_get_ignore_access() || array_key_exists($collection_id, $write_access);
+ }
+}
+
+/**
+ * Creates a new access collection.
+ *
+ * Access colletions allow plugins and users to create granular access
+ * for entities.
+ *
+ * Triggers plugin hook 'access:collections:addcollection', 'collection'
+ *
+ * @internal Access collections are stored in the access_collections table.
+ * Memberships to collections are in access_collections_membership.
+ *
+ * @param string $name The name of the collection.
+ * @param int $owner_guid The GUID of the owner (default: currently logged in user).
+ * @param int $site_guid The GUID of the site (default: current site).
+ *
+ * @return int|false The collection ID if successful and false on failure.
+ * @link http://docs.elgg.org/Access/Collections
+ * @see update_access_collection()
+ * @see delete_access_collection()
+ */
+function create_access_collection($name, $owner_guid = 0, $site_guid = 0) {
+ global $CONFIG;
+
+ $name = trim($name);
+ if (empty($name)) {
+ return false;
+ }
+
+ if ($owner_guid == 0) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+ if (($site_guid == 0) && (isset($CONFIG->site_guid))) {
+ $site_guid = $CONFIG->site_guid;
+ }
+ $name = sanitise_string($name);
+
+ $q = "INSERT INTO {$CONFIG->dbprefix}access_collections
+ SET name = '{$name}',
+ owner_guid = {$owner_guid},
+ site_guid = {$site_guid}";
+ $id = insert_data($q);
+ if (!$id) {
+ return false;
+ }
+
+ $params = array(
+ 'collection_id' => $id
+ );
+
+ if (!elgg_trigger_plugin_hook('access:collections:addcollection', 'collection', $params, true)) {
+ return false;
+ }
+
+ return $id;
+}
+
+/**
+ * Updates the membership in an access collection.
+ *
+ * @warning Expects a full list of all members that should
+ * be part of the access collection
+ *
+ * @note This will run all hooks associated with adding or removing
+ * members to access collections.
+ *
+ * @param int $collection_id The ID of the collection.
+ * @param array $members Array of member GUIDs
+ *
+ * @return bool
+ * @link http://docs.elgg.org/Access/Collections
+ * @see add_user_to_access_collection()
+ * @see remove_user_from_access_collection()
+ */
+function update_access_collection($collection_id, $members) {
+ $acl = get_access_collection($collection_id);
+
+ if (!$acl) {
+ return false;
+ }
+ $members = (is_array($members)) ? $members : array();
+
+ $cur_members = get_members_of_access_collection($collection_id, true);
+ $cur_members = (is_array($cur_members)) ? $cur_members : array();
+
+ $remove_members = array_diff($cur_members, $members);
+ $add_members = array_diff($members, $cur_members);
+
+ $result = true;
+
+ foreach ($add_members as $guid) {
+ $result = $result && add_user_to_access_collection($guid, $collection_id);
+ }
+
+ foreach ($remove_members as $guid) {
+ $result = $result && remove_user_from_access_collection($guid, $collection_id);
+ }
+
+ return $result;
+}
+
+/**
+ * Deletes a specified access collection and its membership.
+ *
+ * @param int $collection_id The collection ID
+ *
+ * @return bool
+ * @link http://docs.elgg.org/Access/Collections
+ * @see create_access_collection()
+ * @see update_access_collection()
+ */
+function delete_access_collection($collection_id) {
+ global $CONFIG;
+
+ $collection_id = (int) $collection_id;
+ $params = array('collection_id' => $collection_id);
+
+ if (!elgg_trigger_plugin_hook('access:collections:deletecollection', 'collection', $params, true)) {
+ return false;
+ }
+
+ // Deleting membership doesn't affect result of deleting ACL.
+ $q = "DELETE FROM {$CONFIG->dbprefix}access_collection_membership
+ WHERE access_collection_id = {$collection_id}";
+ delete_data($q);
+
+ $q = "DELETE FROM {$CONFIG->dbprefix}access_collections
+ WHERE id = {$collection_id}";
+ $result = delete_data($q);
+
+ return (bool)$result;
+}
+
+/**
+ * Get a specified access collection
+ *
+ * @note This doesn't return the members of an access collection,
+ * just the database row of the actual collection.
+ *
+ * @see get_members_of_access_collection()
+ *
+ * @param int $collection_id The collection ID
+ *
+ * @return object|false
+ */
+function get_access_collection($collection_id) {
+ global $CONFIG;
+ $collection_id = (int) $collection_id;
+
+ $query = "SELECT * FROM {$CONFIG->dbprefix}access_collections WHERE id = {$collection_id}";
+ $get_collection = get_data_row($query);
+
+ return $get_collection;
+}
+
+/**
+ * Adds a user to an access collection.
+ *
+ * Triggers the 'access:collections:add_user', 'collection' plugin hook.
+ *
+ * @param int $user_guid The GUID of the user to add
+ * @param int $collection_id The ID of the collection to add them to
+ *
+ * @return bool
+ * @see update_access_collection()
+ * @see remove_user_from_access_collection()
+ * @link http://docs.elgg.org/Access/Collections
+ */
+function add_user_to_access_collection($user_guid, $collection_id) {
+ global $CONFIG;
+
+ $collection_id = (int) $collection_id;
+ $user_guid = (int) $user_guid;
+ $user = get_user($user_guid);
+
+ $collection = get_access_collection($collection_id);
+
+ if (!($user instanceof Elgguser) || !$collection) {
+ return false;
+ }
+
+ $params = array(
+ 'collection_id' => $collection_id,
+ 'user_guid' => $user_guid
+ );
+
+ $result = elgg_trigger_plugin_hook('access:collections:add_user', 'collection', $params, true);
+ if ($result == false) {
+ return false;
+ }
+
+ // if someone tries to insert the same data twice, we do a no-op on duplicate key
+ $q = "INSERT INTO {$CONFIG->dbprefix}access_collection_membership
+ SET access_collection_id = $collection_id, user_guid = $user_guid
+ ON DUPLICATE KEY UPDATE user_guid = user_guid";
+ $result = insert_data($q);
+
+ return $result !== false;
+}
+
+/**
+ * Removes a user from an access collection.
+ *
+ * Triggers the 'access:collections:remove_user', 'collection' plugin hook.
+ *
+ * @param int $user_guid The user GUID
+ * @param int $collection_id The access collection ID
+ *
+ * @return bool
+ * @see update_access_collection()
+ * @see remove_user_from_access_collection()
+ * @link http://docs.elgg.org/Access/Collections
+ */
+function remove_user_from_access_collection($user_guid, $collection_id) {
+ global $CONFIG;
+
+ $collection_id = (int) $collection_id;
+ $user_guid = (int) $user_guid;
+ $user = get_user($user_guid);
+
+ $collection = get_access_collection($collection_id);
+
+ if (!($user instanceof Elgguser) || !$collection) {
+ return false;
+ }
+
+ $params = array(
+ 'collection_id' => $collection_id,
+ 'user_guid' => $user_guid
+ );
+
+ if (!elgg_trigger_plugin_hook('access:collections:remove_user', 'collection', $params, true)) {
+ return false;
+ }
+
+ $q = "DELETE FROM {$CONFIG->dbprefix}access_collection_membership
+ WHERE access_collection_id = {$collection_id}
+ AND user_guid = {$user_guid}";
+
+ return (bool)delete_data($q);
+}
+
+/**
+ * Returns an array of database row objects of the access collections owned by $owner_guid.
+ *
+ * @param int $owner_guid The entity guid
+ * @param int $site_guid The GUID of the site (default: current site).
+ *
+ * @return array|false
+ * @see add_access_collection()
+ * @see get_members_of_access_collection()
+ * @link http://docs.elgg.org/Access/Collections
+ */
+function get_user_access_collections($owner_guid, $site_guid = 0) {
+ global $CONFIG;
+ $owner_guid = (int) $owner_guid;
+ $site_guid = (int) $site_guid;
+
+ if (($site_guid == 0) && (isset($CONFIG->site_guid))) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ $query = "SELECT * FROM {$CONFIG->dbprefix}access_collections
+ WHERE owner_guid = {$owner_guid}
+ AND site_guid = {$site_guid}";
+
+ $collections = get_data($query);
+
+ return $collections;
+}
+
+/**
+ * Get all of members of an access collection
+ *
+ * @param int $collection The collection's ID
+ * @param bool $idonly If set to true, will only return the members' GUIDs (default: false)
+ *
+ * @return array ElggUser guids or entities if successful, false if not
+ * @see add_user_to_access_collection()
+ * @see http://docs.elgg.org/Access/Collections
+ */
+function get_members_of_access_collection($collection, $idonly = FALSE) {
+ global $CONFIG;
+ $collection = (int)$collection;
+
+ if (!$idonly) {
+ $query = "SELECT e.* FROM {$CONFIG->dbprefix}access_collection_membership m"
+ . " JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.user_guid"
+ . " WHERE m.access_collection_id = {$collection}";
+ $collection_members = get_data($query, "entity_row_to_elggstar");
+ } else {
+ $query = "SELECT e.guid FROM {$CONFIG->dbprefix}access_collection_membership m"
+ . " JOIN {$CONFIG->dbprefix}entities e ON e.guid = m.user_guid"
+ . " WHERE m.access_collection_id = {$collection}";
+ $collection_members = get_data($query);
+ if (!$collection_members) {
+ return FALSE;
+ }
+ foreach ($collection_members as $key => $val) {
+ $collection_members[$key] = $val->guid;
+ }
+ }
+
+ return $collection_members;
+}
+
+/**
+ * Return entities based upon access id.
+ *
+ * @param array $options Any options accepted by {@link elgg_get_entities()} and
+ * access_id => int The access ID of the entity.
+ *
+ * @see elgg_get_entities()
+ * @return mixed If count, int. If not count, array. false on errors.
+ * @since 1.7.0
+ */
+function elgg_get_entities_from_access_id(array $options = array()) {
+ // restrict the resultset to access collection provided
+ if (!isset($options['access_id'])) {
+ return FALSE;
+ }
+
+ // @todo add support for an array of collection_ids
+ $where = "e.access_id = '{$options['access_id']}'";
+ if (isset($options['wheres'])) {
+ if (is_array($options['wheres'])) {
+ $options['wheres'][] = $where;
+ } else {
+ $options['wheres'] = array($options['wheres'], $where);
+ }
+ } else {
+ $options['wheres'] = array($where);
+ }
+
+ // return entities with the desired options
+ return elgg_get_entities($options);
+}
+
+/**
+ * Lists entities from an access collection
+ *
+ * @param array $options See elgg_list_entities() and elgg_get_entities_from_access_id()
+ *
+ * @see elgg_list_entities()
+ * @see elgg_get_entities_from_access_id()
+ *
+ * @return string
+ */
+function elgg_list_entities_from_access_id(array $options = array()) {
+ return elgg_list_entities($options, 'elgg_get_entities_from_access_id');
+}
+
+/**
+ * Return the name of an ACCESS_* constant or a access collection,
+ * but only if the user has write access on that ACL.
+ *
+ * @warning This function probably doesn't work how it's meant to.
+ *
+ * @param int $entity_access_id The entity's access id
+ *
+ * @return string 'Public', 'Private', etc.
+ * @since 1.7.0
+ * @todo I think this probably wants get_access_array() instead of get_write_access_array(),
+ * but those two functions return different types of arrays.
+ */
+function get_readable_access_level($entity_access_id) {
+ $access = (int) $entity_access_id;
+
+ //get the access level for object in readable string
+ $options = get_write_access_array();
+
+ if (array_key_exists($access, $options)) {
+ return $options[$access];
+ }
+
+ // return 'Limited' if the user does not have access to the access collection
+ return elgg_echo('access:limited:label');
+}
+
+/**
+ * Set if entity access system should be ignored.
+ *
+ * The access system will not return entities in any getter
+ * functions if the user doesn't have access.
+ *
+ * @internal For performance reasons this is done at the database access clause level.
+ *
+ * @tip Use this to access entities in automated scripts
+ * when no user is logged in.
+ *
+ * @note This clears the access cache.
+ *
+ * @warning This will not show disabled entities.
+ * Use {@link access_show_hidden_entities()} to access disabled entities.
+ *
+ * @param bool $ignore If true, disables all access checks.
+ *
+ * @return bool Previous ignore_access setting.
+ * @since 1.7.0
+ * @see http://docs.elgg.org/Access/IgnoreAccess
+ * @see elgg_get_ignore_access()
+ */
+function elgg_set_ignore_access($ignore = true) {
+ $cache = _elgg_get_access_cache();
+ $cache->clear();
+ $elgg_access = elgg_get_access_object();
+ return $elgg_access->setIgnoreAccess($ignore);
+}
+
+/**
+ * Get current ignore access setting.
+ *
+ * @return bool
+ * @since 1.7.0
+ * @see http://docs.elgg.org/Access/IgnoreAccess
+ * @see elgg_set_ignore_access()
+ */
+function elgg_get_ignore_access() {
+ return elgg_get_access_object()->getIgnoreAccess();
+}
+
+/**
+ * Decides if the access system should be ignored for a user.
+ *
+ * Returns true (meaning ignore access) if either of these 2 conditions are true:
+ * 1) an admin user guid is passed to this function.
+ * 2) {@link elgg_get_ignore_access()} returns true.
+ *
+ * @see elgg_set_ignore_access()
+ *
+ * @param int $user_guid The user to check against.
+ *
+ * @return bool
+ * @since 1.7.0
+ */
+function elgg_check_access_overrides($user_guid = 0) {
+ if (!$user_guid || $user_guid <= 0) {
+ $is_admin = false;
+ } else {
+ $is_admin = elgg_is_admin_user($user_guid);
+ }
+
+ return ($is_admin || elgg_get_ignore_access());
+}
+
+/**
+ * Returns the ElggAccess object.
+ *
+ * // @todo comment is incomplete
+ * This is used to
+ *
+ * @return ElggAccess
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_access_object() {
+ static $elgg_access;
+
+ if (!$elgg_access) {
+ $elgg_access = new ElggAccess();
+ }
+
+ return $elgg_access;
+}
+
+/**
+ * A flag to set if Elgg's access initialization is finished.
+ *
+ * @global bool $init_finished
+ * @access private
+ * @todo This is required to tell the access system to start caching because
+ * calls are made while in ignore access mode and before the user is logged in.
+ */
+$init_finished = false;
+
+/**
+ * A quick and dirty way to make sure the access permissions have been correctly set up
+ *
+ * @elgg_event_handler init system
+ * @todo Invesigate
+ *
+ * @return void
+ */
+function access_init() {
+ global $init_finished;
+ $init_finished = true;
+}
+
+/**
+ * Overrides the access system if appropriate.
+ *
+ * Allows admin users and calls after {@link elgg_set_ignore_access} to
+ * bypass the access system.
+ *
+ * Registered for the 'permissions_check', 'all' and the
+ * 'container_permissions_check', 'all' plugin hooks.
+ *
+ * Returns true to override the access system or null if no change is needed.
+ *
+ * @return true|null
+ * @access private
+ */
+function elgg_override_permissions($hook, $type, $value, $params) {
+ $user = elgg_extract('user', $params);
+ if ($user) {
+ $user_guid = $user->getGUID();
+ } else {
+ $user_guid = elgg_get_logged_in_user_guid();
+ }
+
+ // don't do this so ignore access still works with no one logged in
+ //if (!$user instanceof ElggUser) {
+ // return false;
+ //}
+
+ // check for admin
+ if ($user_guid && elgg_is_admin_user($user_guid)) {
+ return true;
+ }
+
+ // check access overrides
+ if ((elgg_check_access_overrides($user_guid))) {
+ return true;
+ }
+
+ // consult other hooks
+ return NULL;
+}
+
+/**
+ * Runs unit tests for the entities object.
+ * @access private
+ */
+function access_test($hook, $type, $value, $params) {
+ global $CONFIG;
+
+ $value[] = $CONFIG->path . 'engine/tests/api/access_collections.php';
+ return $value;
+}
+
+// Tell the access functions the system has booted, plugins are loaded,
+// and the user is logged in so it can start caching
+elgg_register_event_handler('ready', 'system', 'access_init');
+
+// For overrided permissions
+elgg_register_plugin_hook_handler('permissions_check', 'all', 'elgg_override_permissions');
+elgg_register_plugin_hook_handler('container_permissions_check', 'all', 'elgg_override_permissions');
+
+elgg_register_plugin_hook_handler('unit_test', 'system', 'access_test'); \ No newline at end of file
diff --git a/engine/lib/actions.php b/engine/lib/actions.php
new file mode 100644
index 000000000..53b185dea
--- /dev/null
+++ b/engine/lib/actions.php
@@ -0,0 +1,490 @@
+<?php
+/**
+ * Elgg Actions
+ *
+ * Actions are one of the primary controllers (The C in MVC) in Elgg. They are
+ * registered by {@link register_elgg_action()} and are called by URL
+ * http://elggsite.org/action/action_name. For URLs, a rewrite rule in
+ * .htaccess passes the action name to engine/handlers/action_handler.php,
+ * which dispatches the request for the action.
+ *
+ * An action name must be registered to a file in the system. Core actions are
+ * found in /actions/ and plugin actions are usually under /mod/<plugin>/actions/.
+ * It is recommended that actions be namespaced to avoid collisions.
+ *
+ * All actions require security tokens. Using the {@elgg_view input/form} view
+ * will automatically add tokens as hidden inputs as will the elgg_view_form()
+ * function. To manually add hidden inputs, use the {@elgg_view input/securitytoken} view.
+ *
+ * To include security tokens for actions called via GET, use
+ * {@link elgg_add_security_tokens_to_url()} or specify is_action as true when
+ * using {@lgg_view output/url}.
+ *
+ * Action tokens can be manually generated by using {@link generate_action_token()}.
+ *
+ * @tip When registered, actions can be restricted to logged in or admin users.
+ *
+ * @tip Action URLs should be called with a trailing / to prevent 301 redirects.
+ *
+ * @package Elgg.Core
+ * @subpackage Actions
+ * @link http://docs.elgg.org/Actions
+ * @link http://docs.elgg.org/Actions/Tokens
+ */
+
+/**
+ * Perform an action.
+ *
+ * This function executes the action with name $action as registered
+ * by {@link elgg_register_action()}.
+ *
+ * The plugin hook 'action', $action_name will be triggered before the action
+ * is executed. If a handler returns false, it will prevent the action script
+ * from being called.
+ *
+ * @note If an action isn't registered in the system or is registered
+ * to an unavailable file the user will be forwarded to the site front
+ * page and an error will be emitted via {@link register_error()}.
+ *
+ * @warning All actions require {@link http://docs.elgg.org/Actions/Tokens Action Tokens}.
+ *
+ * @param string $action The requested action
+ * @param string $forwarder Optionally, the location to forward to
+ *
+ * @link http://docs.elgg.org/Actions
+ * @see elgg_register_action()
+ *
+ * @return void
+ * @access private
+ */
+function action($action, $forwarder = "") {
+ global $CONFIG;
+
+ $action = rtrim($action, '/');
+
+ // @todo REMOVE THESE ONCE #1509 IS IN PLACE.
+ // Allow users to disable plugins without a token in order to
+ // remove plugins that are incompatible.
+ // Login and logout are for convenience.
+ // file/download (see #2010)
+ $exceptions = array(
+ 'admin/plugins/disable',
+ 'logout',
+ 'login',
+ 'file/download',
+ );
+
+ if (!in_array($action, $exceptions)) {
+ // All actions require a token.
+ action_gatekeeper();
+ }
+
+ $forwarder = str_replace(elgg_get_site_url(), "", $forwarder);
+ $forwarder = str_replace("http://", "", $forwarder);
+ $forwarder = str_replace("@", "", $forwarder);
+ if (substr($forwarder, 0, 1) == "/") {
+ $forwarder = substr($forwarder, 1);
+ }
+
+ if (!isset($CONFIG->actions[$action])) {
+ register_error(elgg_echo('actionundefined', array($action)));
+ } elseif (!elgg_is_admin_logged_in() && ($CONFIG->actions[$action]['access'] === 'admin')) {
+ register_error(elgg_echo('actionunauthorized'));
+ } elseif (!elgg_is_logged_in() && ($CONFIG->actions[$action]['access'] !== 'public')) {
+ register_error(elgg_echo('actionloggedout'));
+ } else {
+ // Returning falsy doesn't produce an error
+ // We assume this will be handled in the hook itself.
+ if (elgg_trigger_plugin_hook('action', $action, null, true)) {
+ if (!include($CONFIG->actions[$action]['file'])) {
+ register_error(elgg_echo('actionnotfound', array($action)));
+ }
+ }
+ }
+
+ $forwarder = empty($forwarder) ? REFERER : $forwarder;
+ forward($forwarder);
+}
+
+/**
+ * Registers an action.
+ *
+ * Actions are registered to a script in the system and are executed
+ * either by the URL http://elggsite.org/action/action_name/.
+ *
+ * $filename must be the full path of the file to register, or a path relative
+ * to the core actions/ dir.
+ *
+ * Actions should be namedspaced for your plugin. Example:
+ * <code>
+ * elgg_register_action('myplugin/save_settings', ...);
+ * </code>
+ *
+ * @tip Put action files under the actions/<plugin_name> directory of your plugin.
+ *
+ * @tip You don't need to include engine/start.php in your action files.
+ *
+ * @internal Actions are saved in $CONFIG->actions as an array in the form:
+ * <code>
+ * array(
+ * 'file' => '/location/to/file.php',
+ * 'access' => 'public', 'logged_in', or 'admin'
+ * )
+ * </code>
+ *
+ * @param string $action The name of the action (eg "register", "account/settings/save")
+ * @param string $filename Optionally, the filename where this action is located. If not specified,
+ * will assume the action is in elgg/actions/<action>.php
+ * @param string $access Who is allowed to execute this action: public, logged_in, admin.
+ * (default: logged_in)
+ *
+ * @see action()
+ * @see http://docs.elgg.org/Actions
+ *
+ * @return bool
+ */
+function elgg_register_action($action, $filename = "", $access = 'logged_in') {
+ global $CONFIG;
+
+ // plugins are encouraged to call actions with a trailing / to prevent 301
+ // redirects but we store the actions without it
+ $action = rtrim($action, '/');
+
+ if (!isset($CONFIG->actions)) {
+ $CONFIG->actions = array();
+ }
+
+ if (empty($filename)) {
+ $path = "";
+ if (isset($CONFIG->path)) {
+ $path = $CONFIG->path;
+ }
+
+ $filename = $path . "actions/" . $action . ".php";
+ }
+
+ $CONFIG->actions[$action] = array(
+ 'file' => $filename,
+ 'access' => $access,
+ );
+ return true;
+}
+
+/**
+ * Unregisters an action
+ *
+ * @param string $action Action name
+ * @return bool
+ * @since 1.8.1
+ */
+function elgg_unregister_action($action) {
+ global $CONFIG;
+
+ if (isset($CONFIG->actions[$action])) {
+ unset($CONFIG->actions[$action]);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Validate an action token.
+ *
+ * Calls to actions will automatically validate tokens. If tokens are not
+ * present or invalid, the action will be denied and the user will be redirected.
+ *
+ * Plugin authors should never have to manually validate action tokens.
+ *
+ * @param bool $visibleerrors Emit {@link register_error()} errors on failure?
+ * @param mixed $token The token to test against. Default: $_REQUEST['__elgg_token']
+ * @param mixed $ts The time stamp to test against. Default: $_REQUEST['__elgg_ts']
+ *
+ * @return bool
+ * @see generate_action_token()
+ * @link http://docs.elgg.org/Actions/Tokens
+ * @access private
+ */
+function validate_action_token($visibleerrors = TRUE, $token = NULL, $ts = NULL) {
+ global $CONFIG;
+
+ if (!$token) {
+ $token = get_input('__elgg_token');
+ }
+
+ if (!$ts) {
+ $ts = get_input('__elgg_ts');
+ }
+
+ if (!isset($CONFIG->action_token_timeout)) {
+ // default to 2 hours
+ $timeout = 2;
+ } else {
+ $timeout = $CONFIG->action_token_timeout;
+ }
+
+ $session_id = session_id();
+
+ if (($token) && ($ts) && ($session_id)) {
+ // generate token, check with input and forward if invalid
+ $generated_token = generate_action_token($ts);
+
+ // Validate token
+ if ($token == $generated_token) {
+ $hour = 60 * 60;
+ $timeout = $timeout * $hour;
+ $now = time();
+
+ // Validate time to ensure its not crazy
+ if ($timeout == 0 || ($ts > $now - $timeout) && ($ts < $now + $timeout)) {
+ // We have already got this far, so unless anything
+ // else says something to the contry we assume we're ok
+ $returnval = true;
+
+ $returnval = elgg_trigger_plugin_hook('action_gatekeeper:permissions:check', 'all', array(
+ 'token' => $token,
+ 'time' => $ts
+ ), $returnval);
+
+ if ($returnval) {
+ return true;
+ } else if ($visibleerrors) {
+ register_error(elgg_echo('actiongatekeeper:pluginprevents'));
+ }
+ } else if ($visibleerrors) {
+ register_error(elgg_echo('actiongatekeeper:timeerror'));
+ }
+ } else if ($visibleerrors) {
+ register_error(elgg_echo('actiongatekeeper:tokeninvalid'));
+ }
+ } else {
+ if (! empty($_SERVER['CONTENT_LENGTH']) && empty($_POST)) {
+ // The size of $_POST or uploaded file has exceed the size limit
+ $error_msg = elgg_trigger_plugin_hook('action_gatekeeper:upload_exceeded_msg', 'all', array(
+ 'post_size' => $_SERVER['CONTENT_LENGTH'],
+ 'visible_errors' => $visibleerrors,
+ ), elgg_echo('actiongatekeeper:uploadexceeded'));
+ } else {
+ $error_msg = elgg_echo('actiongatekeeper:missingfields');
+ }
+ if ($visibleerrors) {
+ register_error($error_msg);
+ }
+ }
+
+ return FALSE;
+}
+
+/**
+ * Validates the presence of action tokens.
+ *
+ * This function is called for all actions. If action tokens are missing,
+ * the user will be forwarded to the site front page and an error emitted.
+ *
+ * This function verifies form input for security features (like a generated token),
+ * and forwards if they are invalid.
+ *
+ * @return mixed True if valid or redirects.
+ * @access private
+ */
+function action_gatekeeper() {
+ if (validate_action_token()) {
+ return TRUE;
+ }
+
+ forward(REFERER, 'csrf');
+}
+
+/**
+ * Generate an action token.
+ *
+ * Action tokens are based on timestamps as returned by {@link time()}.
+ * They are valid for one hour.
+ *
+ * Action tokens should be passed to all actions name __elgg_ts and __elgg_token.
+ *
+ * @warning Action tokens are required for all actions.
+ *
+ * @param int $timestamp Unix timestamp
+ *
+ * @see @elgg_view input/securitytoken
+ * @see @elgg_view input/form
+ * @example actions/manual_tokens.php
+ *
+ * @return string|false
+ * @access private
+ */
+function generate_action_token($timestamp) {
+ $site_secret = get_site_secret();
+ $session_id = session_id();
+ // Session token
+ $st = $_SESSION['__elgg_session'];
+
+ if (($site_secret) && ($session_id)) {
+ return md5($site_secret . $timestamp . $session_id . $st);
+ }
+
+ return FALSE;
+}
+
+/**
+ * Initialise the site secret hash.
+ *
+ * Used during installation and saves as a datalist.
+ *
+ * @return mixed The site secret hash or false
+ * @access private
+ * @todo Move to better file.
+ */
+function init_site_secret() {
+ $secret = md5(rand() . microtime());
+ if (datalist_set('__site_secret__', $secret)) {
+ return $secret;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Returns the site secret.
+ *
+ * Used to generate difficult to guess hashes for sessions and action tokens.
+ *
+ * @return string Site secret.
+ * @access private
+ * @todo Move to better file.
+ */
+function get_site_secret() {
+ $secret = datalist_get('__site_secret__');
+ if (!$secret) {
+ $secret = init_site_secret();
+ }
+
+ return $secret;
+}
+
+/**
+ * Check if an action is registered and its script exists.
+ *
+ * @param string $action Action name
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_action_exists($action) {
+ global $CONFIG;
+
+ return (isset($CONFIG->actions[$action]) && file_exists($CONFIG->actions[$action]['file']));
+}
+
+/**
+ * Checks whether the request was requested via ajax
+ *
+ * @return bool whether page was requested via ajax
+ * @since 1.8.0
+ */
+function elgg_is_xhr() {
+ return isset($_SERVER['HTTP_X_REQUESTED_WITH'])
+ && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ||
+ get_input('X-Requested-With') === 'XMLHttpRequest';
+}
+
+/**
+ * Catch calls to forward() in ajax request and force an exit.
+ *
+ * Forces response is json of the following form:
+ * <pre>
+ * {
+ * "current_url": "the.url.we/were/coming/from",
+ * "forward_url": "the.url.we/were/going/to",
+ * "system_messages": {
+ * "messages": ["msg1", "msg2", ...],
+ * "errors": ["err1", "err2", ...]
+ * },
+ * "status": -1 //or 0 for success if there are no error messages present
+ * }
+ * </pre>
+ * where "system_messages" is all message registers at the point of forwarding
+ *
+ * @param string $hook
+ * @param string $type
+ * @param string $reason
+ * @param array $params
+ * @return void
+ * @access private
+ */
+function ajax_forward_hook($hook, $type, $reason, $params) {
+ if (elgg_is_xhr()) {
+ // always pass the full structure to avoid boilerplate JS code.
+ $params = array(
+ 'output' => '',
+ 'status' => 0,
+ 'system_messages' => array(
+ 'error' => array(),
+ 'success' => array()
+ )
+ );
+
+ //grab any data echo'd in the action
+ $output = ob_get_clean();
+
+ //Avoid double-encoding in case data is json
+ $json = json_decode($output);
+ if (isset($json)) {
+ $params['output'] = $json;
+ } else {
+ $params['output'] = $output;
+ }
+
+ //Grab any system messages so we can inject them via ajax too
+ $system_messages = system_messages(NULL, "");
+
+ if (isset($system_messages['success'])) {
+ $params['system_messages']['success'] = $system_messages['success'];
+ }
+
+ if (isset($system_messages['error'])) {
+ $params['system_messages']['error'] = $system_messages['error'];
+ $params['status'] = -1;
+ }
+
+ // Check the requester can accept JSON responses, if not fall back to
+ // returning JSON in a plain-text response. Some libraries request
+ // JSON in an invisible iframe which they then read from the iframe,
+ // however some browsers will not accept the JSON MIME type.
+ if (stripos($_SERVER['HTTP_ACCEPT'], 'application/json') === FALSE) {
+ header("Content-type: text/plain");
+ } else {
+ header("Content-type: application/json");
+ }
+
+ echo json_encode($params);
+ exit;
+ }
+}
+
+/**
+ * Buffer all output echo'd directly in the action for inclusion in the returned JSON.
+ * @return void
+ * @access private
+ */
+function ajax_action_hook() {
+ if (elgg_is_xhr()) {
+ ob_start();
+ }
+}
+
+/**
+ * Initialize some ajaxy actions features
+ * @access private
+ */
+function actions_init() {
+ elgg_register_action('security/refreshtoken', '', 'public');
+
+ elgg_register_simplecache_view('js/languages/en');
+
+ elgg_register_plugin_hook_handler('action', 'all', 'ajax_action_hook');
+ elgg_register_plugin_hook_handler('forward', 'all', 'ajax_forward_hook');
+}
+
+elgg_register_event_handler('init', 'system', 'actions_init');
diff --git a/engine/lib/admin.php b/engine/lib/admin.php
new file mode 100644
index 000000000..35ab5599d
--- /dev/null
+++ b/engine/lib/admin.php
@@ -0,0 +1,648 @@
+<?php
+/**
+ * Elgg admin functions.
+ *
+ * Admin menu items
+ * Elgg has a convenience function for adding menu items to the sidebar of the
+ * admin area. @see elgg_register_admin_menu_item()
+ *
+ * Admin pages
+ * Plugins no not need to provide their own page handler to add a page to the
+ * admin area. A view placed at admin/<section>/<subsection> can be access
+ * at http://example.org/admin/<section>/<subsection>. The title of the page
+ * will be elgg_echo('admin:<section>:<subsection>'). For an example of how to
+ * add a page to the admin area, see the diagnostics plugin.
+ *
+ * Admin notices
+ * System messages (success and error messages) are used in both the main site
+ * and the admin area. There is a special presistent message for the admin area
+ * called an admin notice. It should be used when a plugin requires an
+ * administrator to take an action. An example is the categories plugin
+ * requesting that the administrator set site categories after the plugin has
+ * been activated. @see elgg_add_admin_notice()
+ *
+ *
+ * @package Elgg.Core
+ * @subpackage Admin
+ */
+
+/**
+ * Get the admin users
+ *
+ * @param array $options Options array, @see elgg_get_entities() for parameters
+ *
+ * @return mixed Array of admin users or false on failure. If a count, returns int.
+ * @since 1.8.0
+ */
+function elgg_get_admins(array $options = array()) {
+ global $CONFIG;
+
+ if (isset($options['joins'])) {
+ if (!is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ }
+ $options['joins'][] = "join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid";
+ } else {
+ $options['joins'] = array("join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid");
+ }
+
+ if (isset($options['wheres'])) {
+ if (!is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ }
+ $options['wheres'][] = "u.admin = 'yes'";
+ } else {
+ $options['wheres'][] = "u.admin = 'yes'";
+ }
+
+ return elgg_get_entities($options);
+}
+
+/**
+ * Write a persistent message to the admin view.
+ * Useful to alert the admin to take a certain action.
+ * The id is a unique ID that can be cleared once the admin
+ * completes the action.
+ *
+ * eg: add_admin_notice('twitter_services_no_api',
+ * 'Before your users can use Twitter services on this site, you must set up
+ * the Twitter API key in the <a href="link">Twitter Services Settings</a>');
+ *
+ * @param string $id A unique ID that your plugin can remember
+ * @param string $message Body of the message
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_add_admin_notice($id, $message) {
+ if ($id && $message) {
+ if (elgg_admin_notice_exists($id)) {
+ return false;
+ }
+
+ // need to handle when no one is logged in
+ $old_ia = elgg_set_ignore_access(true);
+
+ $admin_notice = new ElggObject();
+ $admin_notice->subtype = 'admin_notice';
+ // admins can see ACCESS_PRIVATE but no one else can.
+ $admin_notice->access_id = ACCESS_PRIVATE;
+ $admin_notice->admin_notice_id = $id;
+ $admin_notice->description = $message;
+
+ $result = $admin_notice->save();
+
+ elgg_set_ignore_access($old_ia);
+
+ return (bool)$result;
+ }
+
+ return false;
+}
+
+/**
+ * Remove an admin notice by ID.
+ *
+ * eg In actions/twitter_service/save_settings:
+ * if (is_valid_twitter_api_key()) {
+ * delete_admin_notice('twitter_services_no_api');
+ * }
+ *
+ * @param string $id The unique ID assigned in add_admin_notice()
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_delete_admin_notice($id) {
+ if (!$id) {
+ return FALSE;
+ }
+ $result = TRUE;
+ $notices = elgg_get_entities_from_metadata(array(
+ 'metadata_name' => 'admin_notice_id',
+ 'metadata_value' => $id
+ ));
+
+ if ($notices) {
+ // in case a bad plugin adds many, let it remove them all at once.
+ foreach ($notices as $notice) {
+ $result = ($result && $notice->delete());
+ }
+ return $result;
+ }
+ return FALSE;
+}
+
+/**
+ * List all admin messages.
+ *
+ * @param int $limit Limit
+ *
+ * @return array List of admin notices
+ * @since 1.8.0
+ */
+function elgg_get_admin_notices($limit = 10) {
+ return elgg_get_entities_from_metadata(array(
+ 'type' => 'object',
+ 'subtype' => 'admin_notice',
+ 'limit' => $limit
+ ));
+}
+
+/**
+ * Check if an admin notice is currently active.
+ *
+ * @param string $id The unique ID used to register the notice.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_admin_notice_exists($id) {
+ $notice = elgg_get_entities_from_metadata(array(
+ 'type' => 'object',
+ 'subtype' => 'admin_notice',
+ 'metadata_name_value_pair' => array('name' => 'admin_notice_id', 'value' => $id)
+ ));
+
+ return ($notice) ? TRUE : FALSE;
+}
+
+/**
+ * Add an admin area section or child section.
+ * This is a wrapper for elgg_register_menu_item().
+ *
+ * Used in conjuction with http://elgg.org/admin/section_id/child_section style
+ * page handler. See the documentation at the top of this file for more details
+ * on that.
+ *
+ * The text of the menu item is obtained from elgg_echo(admin:$parent_id:$menu_id)
+ *
+ * This function handles registering the parent if it has not been registered.
+ *
+ * @param string $section The menu section to add to
+ * @param string $menu_id The unique ID of section
+ * @param string $parent_id If a child section, the parent section id
+ * @param int $priority The menu item priority
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_register_admin_menu_item($section, $menu_id, $parent_id = NULL, $priority = 100) {
+
+ // make sure parent is registered
+ if ($parent_id && !elgg_is_menu_item_registered('page', $parent_id)) {
+ elgg_register_admin_menu_item($section, $parent_id);
+ }
+
+ // in the admin section parents never have links
+ if ($parent_id) {
+ $href = "admin/$parent_id/$menu_id";
+ } else {
+ $href = NULL;
+ }
+
+ $name = $menu_id;
+ if ($parent_id) {
+ $name = "$parent_id:$name";
+ }
+
+ return elgg_register_menu_item('page', array(
+ 'name' => $name,
+ 'href' => $href,
+ 'text' => elgg_echo("admin:$name"),
+ 'context' => 'admin',
+ 'parent_name' => $parent_id,
+ 'priority' => $priority,
+ 'section' => $section
+ ));
+}
+
+/**
+ * Initialize the admin backend.
+ * @return void
+ * @access private
+ */
+function admin_init() {
+ elgg_register_action('admin/user/ban', '', 'admin');
+ elgg_register_action('admin/user/unban', '', 'admin');
+ elgg_register_action('admin/user/delete', '', 'admin');
+ elgg_register_action('admin/user/resetpassword', '', 'admin');
+ elgg_register_action('admin/user/makeadmin', '', 'admin');
+ elgg_register_action('admin/user/removeadmin', '', 'admin');
+
+ elgg_register_action('admin/site/update_basic', '', 'admin');
+ elgg_register_action('admin/site/update_advanced', '', 'admin');
+ elgg_register_action('admin/site/flush_cache', '', 'admin');
+ elgg_register_action('admin/site/unlock_upgrade', '', 'admin');
+
+ elgg_register_action('admin/menu/save', '', 'admin');
+
+ elgg_register_action('admin/delete_admin_notice', '', 'admin');
+
+ elgg_register_action('profile/fields/reset', '', 'admin');
+ elgg_register_action('profile/fields/add', '', 'admin');
+ elgg_register_action('profile/fields/edit', '', 'admin');
+ elgg_register_action('profile/fields/delete', '', 'admin');
+ elgg_register_action('profile/fields/reorder', '', 'admin');
+
+ elgg_register_simplecache_view('css/admin');
+ elgg_register_simplecache_view('js/admin');
+ $url = elgg_get_simplecache_url('js', 'admin');
+ elgg_register_js('elgg.admin', $url);
+ elgg_register_js('jquery.jeditable', 'vendors/jquery/jquery.jeditable.mini.js');
+
+ // administer
+ // dashboard
+ elgg_register_menu_item('page', array(
+ 'name' => 'dashboard',
+ 'href' => 'admin/dashboard',
+ 'text' => elgg_echo('admin:dashboard'),
+ 'context' => 'admin',
+ 'priority' => 10,
+ 'section' => 'administer'
+ ));
+ // statistics
+ elgg_register_admin_menu_item('administer', 'statistics', null, 20);
+ elgg_register_admin_menu_item('administer', 'overview', 'statistics');
+ elgg_register_admin_menu_item('administer', 'server', 'statistics');
+
+ // users
+ elgg_register_admin_menu_item('administer', 'users', null, 20);
+ elgg_register_admin_menu_item('administer', 'online', 'users', 10);
+ elgg_register_admin_menu_item('administer', 'admins', 'users', 20);
+ elgg_register_admin_menu_item('administer', 'newest', 'users', 30);
+ elgg_register_admin_menu_item('administer', 'add', 'users', 40);
+
+ // configure
+ // plugins
+ elgg_register_menu_item('page', array(
+ 'name' => 'plugins',
+ 'href' => 'admin/plugins',
+ 'text' => elgg_echo('admin:plugins'),
+ 'context' => 'admin',
+ 'priority' => 75,
+ 'section' => 'configure'
+ ));
+
+ // settings
+ elgg_register_admin_menu_item('configure', 'appearance', null, 50);
+ elgg_register_admin_menu_item('configure', 'settings', null, 100);
+ elgg_register_admin_menu_item('configure', 'basic', 'settings', 10);
+ elgg_register_admin_menu_item('configure', 'advanced', 'settings', 20);
+ elgg_register_admin_menu_item('configure', 'menu_items', 'appearance', 30);
+ elgg_register_admin_menu_item('configure', 'profile_fields', 'appearance', 40);
+ // default widgets is added via an event handler elgg_default_widgets_init() in widgets.php
+ // because it requires additional setup.
+
+ // plugin settings are added in elgg_admin_add_plugin_settings_menu() via the admin page handler
+ // for performance reasons.
+
+ // we want plugin settings menu items to be sorted alphabetical
+ if (elgg_in_context('admin')) {
+ elgg_register_plugin_hook_handler('prepare', 'menu:page', 'elgg_admin_sort_page_menu');
+ }
+
+ if (elgg_is_admin_logged_in()) {
+ elgg_register_menu_item('topbar', array(
+ 'name' => 'administration',
+ 'href' => 'admin',
+ 'text' => elgg_view_icon('settings') . elgg_echo('admin'),
+ 'priority' => 100,
+ 'section' => 'alt',
+ ));
+ }
+
+ // widgets
+ $widgets = array('online_users', 'new_users', 'content_stats', 'admin_welcome', 'control_panel');
+ foreach ($widgets as $widget) {
+ elgg_register_widget_type(
+ $widget,
+ elgg_echo("admin:widget:$widget"),
+ elgg_echo("admin:widget:$widget:help"),
+ 'admin'
+ );
+ }
+
+ // automatic adding of widgets for admin
+ elgg_register_event_handler('make_admin', 'user', 'elgg_add_admin_widgets');
+
+ elgg_register_page_handler('admin', 'admin_page_handler');
+ elgg_register_page_handler('admin_plugin_screenshot', 'admin_plugin_screenshot_page_handler');
+ elgg_register_page_handler('admin_plugin_text_file', 'admin_markdown_page_handler');
+}
+
+/**
+ * Create the plugin settings page menu.
+ *
+ * This is done in a separate function called from the admin
+ * page handler because of performance concerns.
+ *
+ * @return void
+ * @access private
+ * @since 1.8.0
+ */
+function elgg_admin_add_plugin_settings_menu() {
+
+ $active_plugins = elgg_get_plugins('active');
+ if (!$active_plugins) {
+ // nothing added because no items
+ return FALSE;
+ }
+
+ foreach ($active_plugins as $plugin) {
+ $plugin_id = $plugin->getID();
+ $settings_view_old = 'settings/' . $plugin_id . '/edit';
+ $settings_view_new = 'plugins/' . $plugin_id . '/settings';
+ if (elgg_view_exists($settings_view_new) || elgg_view_exists($settings_view_old)) {
+ elgg_register_menu_item('page', array(
+ 'name' => $plugin_id,
+ 'href' => "admin/plugin_settings/$plugin_id",
+ 'text' => $plugin->getManifest()->getName(),
+ 'parent_name' => 'settings',
+ 'context' => 'admin',
+ 'section' => 'configure',
+ ));
+ }
+ }
+}
+
+/**
+ * Sort the plugin settings menu items
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @param array $params
+ *
+ * @return void
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_admin_sort_page_menu($hook, $type, $return, $params) {
+ $configure_items = $return['configure'];
+ foreach ($configure_items as $menu_item) {
+ if ($menu_item->getName() == 'settings') {
+ $settings = $menu_item;
+ }
+ }
+
+ // keep the basic and advanced settings at the top
+ $children = $settings->getChildren();
+ $site_settings = array_splice($children, 0, 2);
+ usort($children, array('ElggMenuBuilder', 'compareByText'));
+ array_splice($children, 0, 0, $site_settings);
+ $settings->setChildren($children);
+}
+
+/**
+ * Handles any set up required for administration pages
+ *
+ * @return void
+ * @access private
+ */
+function admin_pagesetup() {
+ if (elgg_in_context('admin')) {
+ $url = elgg_get_simplecache_url('css', 'admin');
+ elgg_register_css('elgg.admin', $url);
+ elgg_load_css('elgg.admin');
+ elgg_unregister_css('elgg');
+
+ // setup footer menu
+ elgg_register_menu_item('admin_footer', array(
+ 'name' => 'faq',
+ 'text' => elgg_echo('admin:footer:faq'),
+ 'href' => 'http://docs.elgg.org/wiki/Category:Administration_FAQ',
+ ));
+
+ elgg_register_menu_item('admin_footer', array(
+ 'name' => 'manual',
+ 'text' => elgg_echo('admin:footer:manual'),
+ 'href' => 'http://docs.elgg.org/wiki/Administration_Manual',
+ ));
+
+ elgg_register_menu_item('admin_footer', array(
+ 'name' => 'community_forums',
+ 'text' => elgg_echo('admin:footer:community_forums'),
+ 'href' => 'http://community.elgg.org/groups/all/',
+ ));
+
+ elgg_register_menu_item('admin_footer', array(
+ 'name' => 'blog',
+ 'text' => elgg_echo('admin:footer:blog'),
+ 'href' => 'http://blog.elgg.org/',
+ ));
+ }
+}
+
+/**
+ * Handle admin pages. Expects corresponding views as admin/section/subsection
+ *
+ * @param array $page Array of pages
+ *
+ * @return bool
+ * @access private
+ */
+function admin_page_handler($page) {
+
+ admin_gatekeeper();
+ elgg_admin_add_plugin_settings_menu();
+ elgg_set_context('admin');
+
+ elgg_unregister_css('elgg');
+ elgg_load_js('elgg.admin');
+ elgg_load_js('jquery.jeditable');
+
+ // default to dashboard
+ if (!isset($page[0]) || empty($page[0])) {
+ $page = array('dashboard');
+ }
+
+ // was going to fix this in the page_handler() function but
+ // it's commented to explicitly return a string if there's a trailing /
+ if (empty($page[count($page) - 1])) {
+ array_pop($page);
+ }
+
+ $vars = array('page' => $page);
+
+ // special page for plugin settings since we create the form for them
+ if ($page[0] == 'plugin_settings' && isset($page[1]) &&
+ (elgg_view_exists("settings/{$page[1]}/edit") || elgg_view_exists("plugins/{$page[1]}/settings"))) {
+
+ $view = 'admin/plugin_settings';
+ $plugin = elgg_get_plugin_from_id($page[1]);
+ $vars['plugin'] = $plugin;
+
+ $title = elgg_echo("admin:{$page[0]}");
+ } else {
+ $view = 'admin/' . implode('/', $page);
+ $title = elgg_echo("admin:{$page[0]}");
+ if (count($page) > 1) {
+ $title .= ' : ' . elgg_echo('admin:' . implode(':', $page));
+ }
+ }
+
+ // gets content and prevents direct access to 'components' views
+ if ($page[0] == 'components' || !($content = elgg_view($view, $vars))) {
+ $title = elgg_echo('admin:unknown_section');
+ $content = elgg_echo('admin:unknown_section');
+ }
+
+ $body = elgg_view_layout('admin', array('content' => $content, 'title' => $title));
+ echo elgg_view_page($title, $body, 'admin');
+ return true;
+}
+
+/**
+ * Serves up screenshots for plugins from
+ * admin_plugin_screenshot/<plugin_id>/<size>/<ss_name>.<ext>
+ *
+ * @param array $pages The pages array
+ * @return bool
+ * @access private
+ */
+function admin_plugin_screenshot_page_handler($pages) {
+ // only admins can use this for security
+ admin_gatekeeper();
+
+ $plugin_id = elgg_extract(0, $pages);
+ // only thumbnail or full.
+ $size = elgg_extract(1, $pages, 'thumbnail');
+
+ // the rest of the string is the filename
+ $filename_parts = array_slice($pages, 2);
+ $filename = implode('/', $filename_parts);
+ $filename = sanitise_filepath($filename, false);
+
+ $plugin = new ElggPlugin($plugin_id);
+ if (!$plugin) {
+ $file = elgg_get_root_path() . '_graphics/icons/default/medium.png';
+ } else {
+ $file = $plugin->getPath() . $filename;
+ if (!file_exists($file)) {
+ $file = elgg_get_root_path() . '_graphics/icons/default/medium.png';
+ }
+ }
+
+ header("Content-type: image/jpeg");
+
+ // resize to 100x100 for thumbnails
+ switch ($size) {
+ case 'thumbnail':
+ echo get_resized_image_from_existing_file($file, 100, 100, true);
+ break;
+
+ case 'full':
+ default:
+ echo file_get_contents($file);
+ break;
+ }
+ return true;
+}
+
+/**
+ * Formats and serves out markdown files from plugins.
+ *
+ * URLs in format like admin_plugin_text_file/<plugin_id>/filename.ext
+ *
+ * The only valid files are:
+ * * README.txt
+ * * CHANGES.txt
+ * * INSTALL.txt
+ * * COPYRIGHT.txt
+ * * LICENSE.txt
+ *
+ * @param type $page
+ * @return bool
+ * @access private
+ */
+function admin_markdown_page_handler($pages) {
+ admin_gatekeeper();
+
+ elgg_set_context('admin');
+
+ elgg_unregister_css('elgg');
+ elgg_load_js('elgg.admin');
+ elgg_load_js('jquery.jeditable');
+ elgg_load_library('elgg:markdown');
+
+ $plugin_id = elgg_extract(0, $pages);
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+ $filename = elgg_extract(1, $pages);
+
+ $error = false;
+ if (!$plugin) {
+ $error = elgg_echo('admin:plugins:markdown:unknown_plugin');
+ $body = elgg_view_layout('admin', array('content' => $error, 'title' => $error));
+ echo elgg_view_page($error, $body, 'admin');
+ return true;
+ }
+
+ $text_files = $plugin->getAvailableTextFiles();
+
+ if (!array_key_exists($filename, $text_files)) {
+ $error = elgg_echo('admin:plugins:markdown:unknown_file');
+ }
+
+ $file = $text_files[$filename];
+ $file_contents = file_get_contents($file);
+
+ if (!$file_contents) {
+ $error = elgg_echo('admin:plugins:markdown:unknown_file');
+ }
+
+ if ($error) {
+ $title = $error;
+ $body = elgg_view_layout('admin', array('content' => $error, 'title' => $title));
+ echo elgg_view_page($title, $body, 'admin');
+ return true;
+ }
+
+ $title = $plugin->getManifest()->getName() . ": $filename";
+ $text = Markdown($file_contents);
+
+ $body = elgg_view_layout('admin', array(
+ // setting classes here because there's no way to pass classes
+ // to the layout
+ 'content' => '<div class="elgg-markdown">' . $text . '</div>',
+ 'title' => $title
+ ));
+
+ echo elgg_view_page($title, $body, 'admin');
+ return true;
+}
+
+/**
+ * Adds default admin widgets to the admin dashboard.
+ *
+ * @return void
+ * @access private
+ */
+function elgg_add_admin_widgets($event, $type, $user) {
+ elgg_set_ignore_access(true);
+
+ // check if the user already has widgets
+ if (elgg_get_widgets($user->getGUID(), 'admin')) {
+ return true;
+ }
+
+ // In the form column => array of handlers in order, top to bottom
+ $adminWidgets = array(
+ 1 => array('control_panel', 'admin_welcome'),
+ 2 => array('online_users', 'new_users', 'content_stats'),
+ );
+
+ foreach ($adminWidgets as $column => $handlers) {
+ foreach ($handlers as $position => $handler) {
+ $guid = elgg_create_widget($user->getGUID(), $handler, 'admin');
+ if ($guid) {
+ $widget = get_entity($guid);
+ $widget->move($column, $position);
+ }
+ }
+ }
+ elgg_set_ignore_access(false);
+}
+
+elgg_register_event_handler('init', 'system', 'admin_init');
+elgg_register_event_handler('pagesetup', 'system', 'admin_pagesetup', 1000);
diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php
new file mode 100644
index 000000000..3b9f84703
--- /dev/null
+++ b/engine/lib/annotations.php
@@ -0,0 +1,579 @@
+<?php
+/**
+ * Elgg annotations
+ * Functions to manage object annotations.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+/**
+ * Convert a database row to a new ElggAnnotation
+ *
+ * @param stdClass $row Db row result object
+ *
+ * @return ElggAnnotation
+ * @access private
+ */
+function row_to_elggannotation($row) {
+ if (!($row instanceof stdClass)) {
+ return $row;
+ }
+
+ return new ElggAnnotation($row);
+}
+
+/**
+ * Get a specific annotation by its id.
+ * If you want multiple annotation objects, use
+ * {@link elgg_get_annotations()}.
+ *
+ * @param int $id The id of the annotation object being retrieved.
+ *
+ * @return false|ElggAnnotation
+ */
+function elgg_get_annotation_from_id($id) {
+ return elgg_get_metastring_based_object_from_id($id, 'annotations');
+}
+
+/**
+ * Deletes an annotation using its ID.
+ *
+ * @param int $id The annotation ID to delete.
+ * @return bool
+ */
+function elgg_delete_annotation_by_id($id) {
+ $annotation = elgg_get_annotation_from_id($id);
+ if (!$annotation) {
+ return false;
+ }
+ return $annotation->delete();
+}
+
+/**
+ * Create a new annotation.
+ *
+ * @param int $entity_guid Entity Guid
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value (default is auto detection)
+ * @param int $owner_guid Owner of annotation (default is logged in user)
+ * @param int $access_id Access level of annotation
+ *
+ * @return int|bool id on success or false on failure
+ */
+function create_annotation($entity_guid, $name, $value, $value_type = '',
+$owner_guid = 0, $access_id = ACCESS_PRIVATE) {
+ global $CONFIG;
+
+ $result = false;
+
+ $entity_guid = (int)$entity_guid;
+ //$name = sanitise_string(trim($name));
+ //$value = sanitise_string(trim($value));
+ $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
+
+ $owner_guid = (int)$owner_guid;
+ if ($owner_guid == 0) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+
+ $access_id = (int)$access_id;
+ $time = time();
+
+ // Add the metastring
+ $value = add_metastring($value);
+ if (!$value) {
+ return false;
+ }
+
+ $name = add_metastring($name);
+ if (!$name) {
+ return false;
+ }
+
+ $entity = get_entity($entity_guid);
+
+ if (elgg_trigger_event('annotate', $entity->type, $entity)) {
+ // If ok then add it
+ $result = insert_data("INSERT into {$CONFIG->dbprefix}annotations
+ (entity_guid, name_id, value_id, value_type, owner_guid, time_created, access_id) VALUES
+ ($entity_guid,'$name',$value,'$value_type', $owner_guid, $time, $access_id)");
+
+ if ($result !== false) {
+ $obj = elgg_get_annotation_from_id($result);
+ if (elgg_trigger_event('create', 'annotation', $obj)) {
+ return $result;
+ } else {
+ // plugin returned false to reject annotation
+ elgg_delete_annotation_by_id($result);
+ return FALSE;
+ }
+ }
+ }
+
+ return $result;
+}
+
+/**
+ * Update an annotation.
+ *
+ * @param int $annotation_id Annotation ID
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid Owner of annotation
+ * @param int $access_id Access level of annotation
+ *
+ * @return bool
+ */
+function update_annotation($annotation_id, $name, $value, $value_type, $owner_guid, $access_id) {
+ global $CONFIG;
+
+ $annotation_id = (int)$annotation_id;
+ $name = (trim($name));
+ $value = (trim($value));
+ $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
+
+ $owner_guid = (int)$owner_guid;
+ if ($owner_guid == 0) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+
+ $access_id = (int)$access_id;
+
+ $access = get_access_sql_suffix();
+
+ // Add the metastring
+ $value = add_metastring($value);
+ if (!$value) {
+ return false;
+ }
+
+ $name = add_metastring($name);
+ if (!$name) {
+ return false;
+ }
+
+ // If ok then add it
+ $result = update_data("UPDATE {$CONFIG->dbprefix}annotations
+ set name_id='$name', value_id='$value', value_type='$value_type', access_id=$access_id, owner_guid=$owner_guid
+ where id=$annotation_id and $access");
+
+ if ($result !== false) {
+ // @todo add plugin hook that sends old and new annotation information before db access
+ $obj = elgg_get_annotation_from_id($annotation_id);
+ elgg_trigger_event('update', 'annotation', $obj);
+ }
+
+ return $result;
+}
+
+/**
+ * Returns annotations. Accepts all elgg_get_entities() options for entity
+ * restraints.
+ *
+ * @see elgg_get_entities
+ *
+ * @param array $options Array in format:
+ *
+ * annotation_names => NULL|ARR Annotation names
+ * annotation_values => NULL|ARR Annotation values
+ * annotation_ids => NULL|ARR annotation ids
+ * annotation_case_sensitive => BOOL Overall Case sensitive
+ * annotation_owner_guids => NULL|ARR guids for annotation owners
+ * annotation_created_time_lower => INT Lower limit for created time.
+ * annotation_created_time_upper => INT Upper limit for created time.
+ * annotation_calculation => STR Perform the MySQL function on the annotation values returned.
+ * Do not confuse this "annotation_calculation" option with the
+ * "calculation" option to elgg_get_entities_from_annotation_calculation().
+ * The "annotation_calculation" option causes this function to
+ * return the result of performing a mathematical calculation on
+ * all annotations that match the query instead of ElggAnnotation
+ * objects.
+ * See the docs for elgg_get_entities_from_annotation_calculation()
+ * for the proper use of the "calculation" option.
+ *
+ *
+ * @return mixed
+ * @since 1.8.0
+ */
+function elgg_get_annotations(array $options = array()) {
+ $options['metastring_type'] = 'annotations';
+ return elgg_get_metastring_based_objects($options);
+}
+
+/**
+ * Deletes annotations based on $options.
+ *
+ * @warning Unlike elgg_get_annotations() this will not accept an empty options array!
+ * This requires at least one constraint: annotation_owner_guid(s),
+ * annotation_name(s), annotation_value(s), or guid(s) must be set.
+ *
+ * @param array $options An options array. {@See elgg_get_annotations()}
+ * @return mixed Null if the metadata name is invalid. Bool on success or fail.
+ * @since 1.8.0
+ */
+function elgg_delete_annotations(array $options) {
+ if (!elgg_is_valid_options_for_batch_operation($options, 'annotations')) {
+ return false;
+ }
+
+ $options['metastring_type'] = 'annotations';
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_delete_callback', false);
+}
+
+/**
+ * Disables annotations based on $options.
+ *
+ * @warning Unlike elgg_get_annotations() this will not accept an empty options array!
+ *
+ * @param array $options An options array. {@See elgg_get_annotations()}
+ * @return mixed
+ * @since 1.8.0
+ */
+function elgg_disable_annotations(array $options) {
+ if (!elgg_is_valid_options_for_batch_operation($options, 'annotations')) {
+ return false;
+ }
+
+ $options['metastring_type'] = 'annotations';
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_disable_callback', false);
+}
+
+/**
+ * Enables annotations based on $options.
+ *
+ * @warning Unlike elgg_get_annotations() this will not accept an empty options array!
+ *
+ * @param array $options An options array. {@See elgg_get_annotations()}
+ * @return mixed
+ * @since 1.8.0
+ */
+function elgg_enable_annotations(array $options) {
+ if (!$options || !is_array($options)) {
+ return false;
+ }
+
+ $options['metastring_type'] = 'annotations';
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_enable_callback');
+}
+
+/**
+ * Returns a rendered list of annotations with pagination.
+ *
+ * @param array $options Annotation getter and display options.
+ * {@see elgg_get_annotations()} and {@see elgg_list_entities()}.
+ *
+ * @return string The list of entities
+ * @since 1.8.0
+ */
+function elgg_list_annotations($options) {
+ $defaults = array(
+ 'limit' => 25,
+ 'offset' => (int) max(get_input('annoff', 0), 0),
+ );
+
+ $options = array_merge($defaults, $options);
+
+ return elgg_list_entities($options, 'elgg_get_annotations', 'elgg_view_annotation_list');
+}
+
+/**
+ * Entities interfaces
+ */
+
+/**
+ * Returns entities based upon annotations. Also accepts all options available
+ * to elgg_get_entities() and elgg_get_entities_from_metadata().
+ *
+ * Entity creation time is selected as maxtime. To sort based upon
+ * this, pass 'order_by' => 'maxtime asc' || 'maxtime desc'
+ *
+ * @see elgg_get_entities
+ * @see elgg_get_entities_from_metadata
+ *
+ * @param array $options Array in format:
+ *
+ * annotation_names => NULL|ARR annotations names
+ *
+ * annotation_values => NULL|ARR annotations values
+ *
+ * annotation_name_value_pairs => NULL|ARR (name = 'name', value => 'value',
+ * 'operator' => '=', 'case_sensitive' => TRUE) entries.
+ * Currently if multiple values are sent via an array (value => array('value1', 'value2')
+ * the pair's operator will be forced to "IN".
+ *
+ * annotation_name_value_pairs_operator => NULL|STR The operator to use for combining
+ * (name = value) OPERATOR (name = value); default AND
+ *
+ * annotation_case_sensitive => BOOL Overall Case sensitive
+ *
+ * order_by_annotation => NULL|ARR (array('name' => 'annotation_text1', 'direction' => ASC|DESC,
+ * 'as' => text|integer),
+ *
+ * Also supports array('name' => 'annotation_text1')
+ *
+ * annotation_owner_guids => NULL|ARR guids for annotaiton owners
+ *
+ * @return mixed If count, int. If not count, array. false on errors.
+ * @since 1.7.0
+ */
+function elgg_get_entities_from_annotations(array $options = array()) {
+ $defaults = array(
+ 'annotation_names' => ELGG_ENTITIES_ANY_VALUE,
+ 'annotation_values' => ELGG_ENTITIES_ANY_VALUE,
+ 'annotation_name_value_pairs' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'annotation_name_value_pairs_operator' => 'AND',
+ 'annotation_case_sensitive' => TRUE,
+ 'order_by_annotation' => array(),
+
+ 'annotation_created_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'annotation_created_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'annotation_owner_guids' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'order_by' => 'maxtime desc',
+ 'group_by' => 'a.entity_guid'
+ );
+
+ $options = array_merge($defaults, $options);
+
+ $singulars = array('annotation_name', 'annotation_value',
+ 'annotation_name_value_pair', 'annotation_owner_guid');
+
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+ $options = elgg_entities_get_metastrings_options('annotation', $options);
+
+ if (!$options) {
+ return false;
+ }
+
+ // special sorting for annotations
+ //@todo overrides other sorting
+ $options['selects'][] = "max(n_table.time_created) as maxtime";
+ $options['group_by'] = 'n_table.entity_guid';
+
+ $time_wheres = elgg_get_entity_time_where_sql('a', $options['annotation_created_time_upper'],
+ $options['annotation_created_time_lower']);
+
+ if ($time_wheres) {
+ $options['wheres'] = array_merge($options['wheres'], $time_wheres);
+ }
+
+ return elgg_get_entities_from_metadata($options);
+}
+
+/**
+ * Returns a viewable list of entities from annotations.
+ *
+ * @param array $options Options array
+ *
+ * @see elgg_get_entities_from_annotations()
+ * @see elgg_list_entities()
+ *
+ * @return string
+ */
+function elgg_list_entities_from_annotations($options = array()) {
+ return elgg_list_entities($options, 'elgg_get_entities_from_annotations');
+}
+
+/**
+ * Get entities ordered by a mathematical calculation on annotation values
+ *
+ * @param array $options An options array:
+ * 'calculation' => The calculation to use. Must be a valid MySQL function.
+ * Defaults to sum. Result selected as 'annotation_calculation'.
+ * Don't confuse this "calculation" option with the
+ * "annotation_calculation" option to elgg_get_annotations().
+ * This "calculation" option is applied to each entity's set of
+ * annotations and is selected as annotation_calculation for that row.
+ * See the docs for elgg_get_annotations() for proper use of the
+ * "annotation_calculation" option.
+ * 'order_by' => The order for the sorting. Defaults to 'annotation_calculation desc'.
+ * 'annotation_names' => The names of annotations on the entity.
+ * 'annotation_values' => The values of annotations on the entity.
+ *
+ * 'metadata_names' => The name of metadata on the entity.
+ * 'metadata_values' => The value of metadata on the entitiy.
+ *
+ * @return mixed If count, int. If not count, array. false on errors.
+ */
+function elgg_get_entities_from_annotation_calculation($options) {
+ $db_prefix = elgg_get_config('dbprefix');
+ $defaults = array(
+ 'calculation' => 'sum',
+ 'order_by' => 'annotation_calculation desc'
+ );
+
+ $options = array_merge($defaults, $options);
+
+ $function = sanitize_string(elgg_extract('calculation', $options, 'sum', false));
+
+ // you must cast this as an int or it sorts wrong.
+ $options['selects'][] = 'e.*';
+ $options['selects'][] = "$function(cast(a_msv.string as signed)) as annotation_calculation";
+
+ // need our own join to get the values because the lower level functions don't
+ // add all the joins if it's a different callback.
+ $options['joins'][] = "JOIN {$db_prefix}metastrings a_msv ON n_table.value_id = a_msv.id";
+
+ // don't need access control because it's taken care of by elgg_get_annotations.
+ $options['group_by'] = 'n_table.entity_guid';
+
+ $options['callback'] = 'entity_row_to_elggstar';
+
+ return elgg_get_annotations($options);
+}
+
+/**
+ * List entities from an annotation calculation.
+ *
+ * @see elgg_get_entities_from_annotation_calculation()
+ *
+ * @param array $options An options array.
+ *
+ * @return string
+ */
+function elgg_list_entities_from_annotation_calculation($options) {
+ return elgg_list_entities($options, 'elgg_get_entities_from_annotation_calculation');
+}
+
+/**
+ * Handler called by trigger_plugin_hook on the "export" event.
+ *
+ * @param string $hook 'export'
+ * @param string $entity_type 'all'
+ * @param mixed $returnvalue Default return value
+ * @param mixed $params List of params to export
+ *
+ * @elgg_plugin_hook export all
+ *
+ * @return mixed
+ * @access private
+ */
+function export_annotation_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ // Sanity check values
+ if ((!is_array($params)) && (!isset($params['guid']))) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
+ }
+
+ if (!is_array($returnvalue)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonArrayReturnValue'));
+ }
+
+ $guid = (int)$params['guid'];
+ $name = $params['name'];
+
+ $result = elgg_get_annotations(array(
+ 'guid' => $guid,
+ 'limit' => 0
+ ));
+
+ if ($result) {
+ foreach ($result as $r) {
+ $returnvalue[] = $r->export();
+ }
+ }
+
+ return $returnvalue;
+}
+
+/**
+ * Get the URL for this item of metadata, by default this links to the
+ * export handler in the current view.
+ *
+ * @param int $id Annotation id
+ *
+ * @return mixed
+ */
+function get_annotation_url($id) {
+ $id = (int)$id;
+
+ if ($extender = elgg_get_annotation_from_id($id)) {
+ return get_extender_url($extender);
+ }
+ return false;
+}
+
+/**
+ * Check to see if a user has already created an annotation on an object
+ *
+ * @param int $entity_guid Entity guid
+ * @param string $annotation_type Type of annotation
+ * @param int $owner_guid Defaults to logged in user.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_annotation_exists($entity_guid, $annotation_type, $owner_guid = NULL) {
+ global $CONFIG;
+
+ if (!$owner_guid && !($owner_guid = elgg_get_logged_in_user_guid())) {
+ return FALSE;
+ }
+
+ $entity_guid = (int)$entity_guid;
+ $annotation_type = sanitise_string($annotation_type);
+
+ $sql = "select a.id" .
+ " FROM {$CONFIG->dbprefix}annotations a, {$CONFIG->dbprefix}metastrings m " .
+ " WHERE a.owner_guid={$owner_guid} AND a.entity_guid={$entity_guid} " .
+ " AND a.name_id=m.id AND m.string='{$annotation_type}'";
+
+ if ($check_annotation = get_data_row($sql)) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Return the URL for a comment
+ *
+ * @param ElggAnnotation $comment The comment object
+ * @return string
+ * @access private
+ */
+function elgg_comment_url_handler(ElggAnnotation $comment) {
+ $entity = $comment->getEntity();
+ if ($entity) {
+ return $entity->getURL() . '#item-annotation-' . $comment->id;
+ }
+}
+
+/**
+ * Register an annotation url handler.
+ *
+ * @param string $extender_name The name, default 'all'.
+ * @param string $function_name The function.
+ *
+ * @return string
+ */
+function elgg_register_annotation_url_handler($extender_name = "all", $function_name) {
+ return elgg_register_extender_url_handler('annotation', $extender_name, $function_name);
+}
+
+/**
+ * Register annotation unit tests
+ * @access private
+ */
+function annotations_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/annotations.php';
+ return $value;
+}
+
+/**
+ * Initialize the annotation library
+ * @access private
+ */
+function elgg_annotations_init() {
+ elgg_register_annotation_url_handler('generic_comment', 'elgg_comment_url_handler');
+
+ elgg_register_plugin_hook_handler("export", "all", "export_annotation_plugin_hook", 2);
+ elgg_register_plugin_hook_handler('unit_test', 'system', 'annotations_test');
+}
+
+elgg_register_event_handler('init', 'system', 'elgg_annotations_init');
diff --git a/engine/lib/cache.php b/engine/lib/cache.php
new file mode 100644
index 000000000..be1c43e14
--- /dev/null
+++ b/engine/lib/cache.php
@@ -0,0 +1,452 @@
+<?php
+/**
+ * Elgg cache
+ * Cache file interface for caching data.
+ *
+ * @package Elgg.Core
+ * @subpackage Cache
+ */
+
+/* Filepath Cache */
+
+/**
+ * Returns an ElggCache object suitable for caching system information
+ *
+ * @todo Can this be done in a cleaner way?
+ * @todo Swap to memcache etc?
+ *
+ * @return ElggFileCache
+ */
+function elgg_get_system_cache() {
+ global $CONFIG;
+
+ /**
+ * A default filestore cache using the dataroot.
+ */
+ static $FILE_PATH_CACHE;
+
+ if (!$FILE_PATH_CACHE) {
+ $FILE_PATH_CACHE = new ElggFileCache($CONFIG->dataroot . 'system_cache/');
+ }
+
+ return $FILE_PATH_CACHE;
+}
+
+/**
+ * Reset the system cache by deleting the caches
+ *
+ * @return void
+ */
+function elgg_reset_system_cache() {
+ $cache = elgg_get_system_cache();
+ $cache->clear();
+}
+
+/**
+ * Saves a system cache.
+ *
+ * @param string $type The type or identifier of the cache
+ * @param string $data The data to be saved
+ * @return bool
+ */
+function elgg_save_system_cache($type, $data) {
+ global $CONFIG;
+
+ if ($CONFIG->system_cache_enabled) {
+ $cache = elgg_get_system_cache();
+ return $cache->save($type, $data);
+ }
+
+ return false;
+}
+
+/**
+ * Retrieve the contents of a system cache.
+ *
+ * @param string $type The type of cache to load
+ * @return string
+ */
+function elgg_load_system_cache($type) {
+ global $CONFIG;
+
+ if ($CONFIG->system_cache_enabled) {
+ $cache = elgg_get_system_cache();
+ $cached_data = $cache->load($type);
+
+ if ($cached_data) {
+ return $cached_data;
+ }
+ }
+
+ return NULL;
+}
+
+/**
+ * Enables the system disk cache.
+ *
+ * Uses the 'system_cache_enabled' datalist with a boolean value.
+ * Resets the system cache.
+ *
+ * @return void
+ */
+function elgg_enable_system_cache() {
+ global $CONFIG;
+
+ datalist_set('system_cache_enabled', 1);
+ $CONFIG->system_cache_enabled = 1;
+ elgg_reset_system_cache();
+}
+
+/**
+ * Disables the system disk cache.
+ *
+ * Uses the 'system_cache_enabled' datalist with a boolean value.
+ * Resets the system cache.
+ *
+ * @return void
+ */
+function elgg_disable_system_cache() {
+ global $CONFIG;
+
+ datalist_set('system_cache_enabled', 0);
+ $CONFIG->system_cache_enabled = 0;
+ elgg_reset_system_cache();
+}
+
+/** @todo deprecate in Elgg 1.9 **/
+
+/**
+ * @access private
+ */
+function elgg_get_filepath_cache() {
+ return elgg_get_system_cache();
+}
+/**
+ * @access private
+ */
+function elgg_filepath_cache_reset() {
+ return elgg_reset_system_cache();
+}
+/**
+ * @access private
+ */
+function elgg_filepath_cache_save($type, $data) {
+ return elgg_save_system_cache($type, $data);
+}
+/**
+ * @access private
+ */
+function elgg_filepath_cache_load($type) {
+ return elgg_load_system_cache($type);
+}
+/**
+ * @access private
+ */
+function elgg_enable_filepath_cache() {
+ return elgg_enable_system_cache();
+}
+/**
+ * @access private
+ */
+function elgg_disable_filepath_cache() {
+ return elgg_disable_system_cache();
+}
+
+/* Simplecache */
+
+/**
+ * Registers a view to simple cache.
+ *
+ * Simple cache is a caching mechanism that saves the output of
+ * views and its extensions into a file. If the view is called
+ * by the {@link simplecache/view.php} file, the Elgg framework will
+ * not be loaded and the contents of the view will returned
+ * from file.
+ *
+ * @warning Simple cached views must take no parameters and return
+ * the same content no matter who is logged in.
+ *
+ * @example
+ * $blog_js = elgg_get_simplecache_url('js', 'blog/save_draft');
+ * elgg_register_simplecache_view('js/blog/save_draft');
+ * elgg_register_js('elgg.blog', $blog_js);
+ * elgg_load_js('elgg.blog');
+ *
+ * @param string $viewname View name
+ *
+ * @return void
+ * @link http://docs.elgg.org/Views/Simplecache
+ * @see elgg_regenerate_simplecache()
+ * @since 1.8.0
+ */
+function elgg_register_simplecache_view($viewname) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->views)) {
+ $CONFIG->views = new stdClass;
+ }
+
+ if (!isset($CONFIG->views->simplecache)) {
+ $CONFIG->views->simplecache = array();
+ }
+
+ $CONFIG->views->simplecache[] = $viewname;
+}
+
+/**
+ * Get the URL for the cached file
+ *
+ * @warning You must register the view with elgg_register_simplecache_view()
+ * for caching to work. See elgg_register_simplecache_view() for a full example.
+ *
+ * @param string $type The file type: css or js
+ * @param string $view The view name
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_get_simplecache_url($type, $view) {
+ global $CONFIG;
+ $lastcache = (int)$CONFIG->lastcache;
+ $viewtype = elgg_get_viewtype();
+ if (elgg_is_simplecache_enabled()) {
+ $url = elgg_get_site_url() . "cache/$type/$viewtype/$view.$lastcache.$type";
+ } else {
+ $url = elgg_get_site_url() . "$type/$view.$lastcache.$type";
+ $elements = array("view" => $viewtype);
+ $url = elgg_http_add_url_query_elements($url, $elements);
+ }
+
+ return $url;
+}
+
+/**
+ * Regenerates the simple cache.
+ *
+ * @warning This does not invalidate the cache, but actively resets it.
+ *
+ * @param string $viewtype Optional viewtype to regenerate. Defaults to all valid viewtypes.
+ *
+ * @return void
+ * @see elgg_register_simplecache_view()
+ * @since 1.8.0
+ */
+function elgg_regenerate_simplecache($viewtype = NULL) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->views->simplecache) || !is_array($CONFIG->views->simplecache)) {
+ return;
+ }
+
+ $lastcached = time();
+
+ // @todo elgg_view() checks if the page set is done (isset($CONFIG->pagesetupdone)) and
+ // triggers an event if it's not. Calling elgg_view() here breaks submenus
+ // (at least) because the page setup hook is called before any
+ // contexts can be correctly set (since this is called before page_handler()).
+ // To avoid this, lie about $CONFIG->pagehandlerdone to force
+ // the trigger correctly when the first view is actually being output.
+ $CONFIG->pagesetupdone = TRUE;
+
+ if (!file_exists($CONFIG->dataroot . 'views_simplecache')) {
+ mkdir($CONFIG->dataroot . 'views_simplecache');
+ }
+
+ if (isset($viewtype)) {
+ $viewtypes = array($viewtype);
+ } else {
+ $viewtypes = $CONFIG->view_types;
+ }
+
+ $original_viewtype = elgg_get_viewtype();
+
+ // disable error reporting so we don't cache problems
+ $old_debug = elgg_get_config('debug');
+ elgg_set_config('debug', null);
+
+ foreach ($viewtypes as $viewtype) {
+ elgg_set_viewtype($viewtype);
+ foreach ($CONFIG->views->simplecache as $view) {
+ $viewcontents = elgg_view($view);
+ $viewname = md5(elgg_get_viewtype() . $view);
+ if ($handle = fopen($CONFIG->dataroot . 'views_simplecache/' . $viewname, 'w')) {
+ fwrite($handle, $viewcontents);
+ fclose($handle);
+ }
+ }
+
+ datalist_set("simplecache_lastupdate_$viewtype", $lastcached);
+ datalist_set("simplecache_lastcached_$viewtype", $lastcached);
+ }
+
+ elgg_set_config('debug', $old_debug);
+ elgg_set_viewtype($original_viewtype);
+
+ // needs to be set for links in html head
+ $CONFIG->lastcache = $lastcached;
+
+ unset($CONFIG->pagesetupdone);
+}
+
+/**
+ * Is simple cache enabled
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_is_simplecache_enabled() {
+ if (elgg_get_config('simplecache_enabled')) {
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Enables the simple cache.
+ *
+ * @access private
+ * @see elgg_register_simplecache_view()
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_enable_simplecache() {
+ global $CONFIG;
+
+ datalist_set('simplecache_enabled', 1);
+ $CONFIG->simplecache_enabled = 1;
+ elgg_regenerate_simplecache();
+}
+
+/**
+ * Disables the simple cache.
+ *
+ * @warning Simplecache is also purged when disabled.
+ *
+ * @access private
+ * @see elgg_register_simplecache_view()
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_disable_simplecache() {
+ global $CONFIG;
+ if ($CONFIG->simplecache_enabled) {
+ datalist_set('simplecache_enabled', 0);
+ $CONFIG->simplecache_enabled = 0;
+
+ // purge simple cache
+ if ($handle = opendir($CONFIG->dataroot . 'views_simplecache')) {
+ while (false !== ($file = readdir($handle))) {
+ if ($file != "." && $file != "..") {
+ unlink($CONFIG->dataroot . 'views_simplecache/' . $file);
+ }
+ }
+ closedir($handle);
+ }
+ }
+}
+
+/**
+ * Deletes all cached views in the simplecache and sets the lastcache and
+ * lastupdate time to 0 for every valid viewtype.
+ *
+ * @return bool
+ * @since 1.7.4
+ */
+function elgg_invalidate_simplecache() {
+ global $CONFIG;
+
+ if (!isset($CONFIG->views->simplecache) || !is_array($CONFIG->views->simplecache)) {
+ return false;
+ }
+
+ $handle = opendir($CONFIG->dataroot . 'views_simplecache');
+
+ if (!$handle) {
+ return false;
+ }
+
+ // remove files.
+ $return = true;
+ while (false !== ($file = readdir($handle))) {
+ if ($file != "." && $file != "..") {
+ $return &= unlink($CONFIG->dataroot . 'views_simplecache/' . $file);
+ }
+ }
+ closedir($handle);
+
+ // reset cache times
+ $viewtypes = $CONFIG->view_types;
+
+ if (!is_array($viewtypes)) {
+ return false;
+ }
+
+ foreach ($viewtypes as $viewtype) {
+ $return &= datalist_set("simplecache_lastupdate_$viewtype", 0);
+ $return &= datalist_set("simplecache_lastcached_$viewtype", 0);
+ }
+
+ return $return;
+}
+
+/**
+ * @see elgg_reset_system_cache()
+ * @access private
+ */
+function _elgg_load_cache() {
+ global $CONFIG;
+
+ $CONFIG->system_cache_loaded = false;
+
+ $CONFIG->views = new stdClass();
+ $data = elgg_load_system_cache('view_locations');
+ if (!is_string($data)) {
+ return;
+ }
+ $CONFIG->views->locations = unserialize($data);
+
+ $data = elgg_load_system_cache('view_types');
+ if (!is_string($data)) {
+ return;
+ }
+ $CONFIG->view_types = unserialize($data);
+
+ $CONFIG->system_cache_loaded = true;
+}
+
+/**
+ * @access private
+ */
+function _elgg_cache_init() {
+ global $CONFIG;
+
+ $viewtype = elgg_get_viewtype();
+
+ // Regenerate the simple cache if expired.
+ // Don't do it on upgrade because upgrade does it itself.
+ // @todo - move into function and perhaps run off init system event
+ if (!defined('UPGRADING')) {
+ $lastupdate = datalist_get("simplecache_lastupdate_$viewtype");
+ $lastcached = datalist_get("simplecache_lastcached_$viewtype");
+ if ($lastupdate == 0 || $lastcached < $lastupdate) {
+ elgg_regenerate_simplecache($viewtype);
+ $lastcached = datalist_get("simplecache_lastcached_$viewtype");
+ }
+ $CONFIG->lastcache = $lastcached;
+ }
+
+ // cache system data if enabled and not loaded
+ if ($CONFIG->system_cache_enabled && !$CONFIG->system_cache_loaded) {
+ elgg_save_system_cache('view_locations', serialize($CONFIG->views->locations));
+ elgg_save_system_cache('view_types', serialize($CONFIG->view_types));
+ }
+
+ if ($CONFIG->system_cache_enabled && !$CONFIG->i18n_loaded_from_cache) {
+ reload_all_translations();
+ foreach ($CONFIG->translations as $lang => $map) {
+ elgg_save_system_cache("$lang.php", serialize($map));
+ }
+ }
+}
+
+elgg_register_event_handler('ready', 'system', '_elgg_cache_init');
diff --git a/engine/lib/calendar.php b/engine/lib/calendar.php
new file mode 100644
index 000000000..9a06c5292
--- /dev/null
+++ b/engine/lib/calendar.php
@@ -0,0 +1,571 @@
+<?php
+/**
+ * Elgg calendar / entity / event functions.
+ *
+ * @package Elgg.Core
+ * @subpackage Calendar
+ *
+ * @todo Implement or remove
+ */
+
+/**
+ * Return a timestamp for the start of a given day (defaults today).
+ *
+ * @param int $day Day
+ * @param int $month Month
+ * @param int $year Year
+ *
+ * @return int
+ * @access private
+ */
+function get_day_start($day = null, $month = null, $year = null) {
+ return mktime(0, 0, 0, $month, $day, $year);
+}
+
+/**
+ * Return a timestamp for the end of a given day (defaults today).
+ *
+ * @param int $day Day
+ * @param int $month Month
+ * @param int $year Year
+ *
+ * @return int
+ * @access private
+ */
+function get_day_end($day = null, $month = null, $year = null) {
+ return mktime(23, 59, 59, $month, $day, $year);
+}
+
+/**
+ * Return the notable entities for a given time period.
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count Set to true to get a count instead of entities. Defaults to false.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param mixed $container_guid Container or containers to get entities from (default: any).
+ *
+ * @return array|false
+ * @access private
+ */
+function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "asc", $limit = 10, $offset = 0, $count = false, $site_guid = 0,
+$container_guid = null) {
+ global $CONFIG;
+
+ if ($subtype === false || $subtype === null || $subtype === 0) {
+ return false;
+ }
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $order_by = sanitise_string($order_by);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ $where = array();
+
+ if (is_array($type)) {
+ $tempwhere = "";
+ if (sizeof($type)) {
+ foreach ($type as $typekey => $subtypearray) {
+ foreach ($subtypearray as $subtypeval) {
+ $typekey = sanitise_string($typekey);
+ if (!empty($subtypeval)) {
+ $subtypeval = (int) get_subtype_id($typekey, $subtypeval);
+ } else {
+ $subtypeval = 0;
+ }
+ if (!empty($tempwhere)) {
+ $tempwhere .= " or ";
+ }
+ $tempwhere .= "(e.type = '{$typekey}' and e.subtype = {$subtypeval})";
+ }
+ }
+ }
+ if (!empty($tempwhere)) {
+ $where[] = "({$tempwhere})";
+ }
+ } else {
+ $type = sanitise_string($type);
+ $subtype = get_subtype_id($type, $subtype);
+
+ if ($type != "") {
+ $where[] = "e.type='$type'";
+ }
+
+ if ($subtype !== "") {
+ $where[] = "e.subtype=$subtype";
+ }
+ }
+
+ if ($owner_guid != "") {
+ if (!is_array($owner_guid)) {
+ $owner_array = array($owner_guid);
+ $owner_guid = (int) $owner_guid;
+ $where[] = "e.owner_guid = '$owner_guid'";
+ } else if (sizeof($owner_guid) > 0) {
+ $owner_array = array_map('sanitise_int', $owner_guid);
+ // Cast every element to the owner_guid array to int
+ $owner_guid = implode(",", $owner_guid);
+ $where[] = "e.owner_guid in ({$owner_guid})";
+ }
+ if (is_null($container_guid)) {
+ $container_guid = $owner_array;
+ }
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if (!is_null($container_guid)) {
+ if (is_array($container_guid)) {
+ foreach ($container_guid as $key => $val) {
+ $container_guid[$key] = (int) $val;
+ }
+ $where[] = "e.container_guid in (" . implode(",", $container_guid) . ")";
+ } else {
+ $container_guid = (int) $container_guid;
+ $where[] = "e.container_guid = {$container_guid}";
+ }
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+
+ if (!$count) {
+ $query = "SELECT e.* from {$CONFIG->dbprefix}entities e $cal_join where ";
+ } else {
+ $query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e $cal_join where ";
+ }
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ $query .= get_access_sql_suffix('e'); // Add access controls
+
+ if (!$count) {
+ $query .= " order by n.calendar_start $order_by";
+ // Add order and limit
+ if ($limit) {
+ $query .= " limit $offset, $limit";
+ }
+ $dt = get_data($query, "entity_row_to_elggstar");
+
+ return $dt;
+ } else {
+ $total = get_data_row($query);
+ return $total->total;
+ }
+}
+
+/**
+ * Return the notable entities for a given time period based on an item of metadata.
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param bool $count If true, returns count instead of entities. (Default: false)
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ * @access private
+ */
+function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, $meta_value = "",
+$entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "",
+$site_guid = 0, $count = false) {
+
+ global $CONFIG;
+
+ $meta_n = get_metastring_id($meta_name);
+ $meta_v = get_metastring_id($meta_value);
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $entity_type = sanitise_string($entity_type);
+ $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $site_guid = (int) $site_guid;
+ if ((is_array($owner_guid) && (count($owner_guid)))) {
+ foreach ($owner_guid as $key => $guid) {
+ $owner_guid[$key] = (int) $guid;
+ }
+ } else {
+ $owner_guid = (int) $owner_guid;
+ }
+
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ //$access = get_access_list();
+
+ $where = array();
+
+ if ($entity_type != "") {
+ $where[] = "e.type='$entity_type'";
+ }
+
+ if ($entity_subtype) {
+ $where[] = "e.subtype=$entity_subtype";
+ }
+
+ if ($meta_name != "") {
+ $where[] = "m.name_id='$meta_n'";
+ }
+
+ if ($meta_value != "") {
+ $where[] = "m.value_id='$meta_v'";
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if (is_array($owner_guid)) {
+ $where[] = "e.container_guid in (" . implode(",", $owner_guid) . ")";
+ } else if ($owner_guid > 0) {
+ $where[] = "e.container_guid = {$owner_guid}";
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+ if (!$count) {
+ $query = "SELECT distinct e.* ";
+ } else {
+ $query = "SELECT count(distinct e.guid) as total ";
+ }
+
+ $query .= "from {$CONFIG->dbprefix}entities e"
+ . " JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid $cal_join where";
+
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix("e");
+ $query .= ' and ' . get_access_sql_suffix("m");
+
+ if (!$count) {
+ // Add order and limit
+ $query .= " order by $order_by limit $offset, $limit";
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($row = get_data_row($query)) {
+ return $row->total;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Return the notable entities for a given time period based on their relationship.
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Reverse the normal function of the query to say
+ * "give me all entities for whom $relationship_guid is a
+ * $relationship of"
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param string $order_by Optional Order by
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ * @access private
+ */
+function get_noteable_entities_from_relationship($start_time, $end_time, $relationship,
+$relationship_guid, $inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+
+ global $CONFIG;
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $relationship = sanitise_string($relationship);
+ $relationship_guid = (int)$relationship_guid;
+ $inverse_relationship = (bool)$inverse_relationship;
+ $type = sanitise_string($type);
+ $subtype = get_subtype_id($type, $subtype);
+ $owner_guid = (int)$owner_guid;
+ if ($order_by == "") {
+ $order_by = "time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ //$access = get_access_list();
+
+ $where = array();
+
+ if ($relationship != "") {
+ $where[] = "r.relationship='$relationship'";
+ }
+ if ($relationship_guid) {
+ $where[] = $inverse_relationship ?
+ "r.guid_two='$relationship_guid'" : "r.guid_one='$relationship_guid'";
+ }
+ if ($type != "") {
+ $where[] = "e.type='$type'";
+ }
+ if ($subtype) {
+ $where[] = "e.subtype=$subtype";
+ }
+ if ($owner_guid != "") {
+ $where[] = "e.container_guid='$owner_guid'";
+ }
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+ // Select what we're joining based on the options
+ $joinon = "e.guid = r.guid_one";
+ if (!$inverse_relationship) {
+ $joinon = "e.guid = r.guid_two";
+ }
+
+ if ($count) {
+ $query = "SELECT count(distinct e.guid) as total ";
+ } else {
+ $query = "SELECT distinct e.* ";
+ }
+ $query .= " from {$CONFIG->dbprefix}entity_relationships r"
+ . " JOIN {$CONFIG->dbprefix}entities e on $joinon $cal_join where ";
+
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+ // Add access controls
+ $query .= get_access_sql_suffix("e");
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * Get all entities for today.
+ *
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ * @param mixed $container_guid Container(s) to get entities from (default: any).
+ *
+ * @return array|false
+ * @access private
+ */
+function get_todays_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "",
+$limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null) {
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $order_by,
+ $limit, $offset, $count, $site_guid, $container_guid);
+}
+
+/**
+ * Get entities for today from metadata.
+ *
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param bool $count If true, returns count instead of entities. (Default: false)
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ * @access private
+ */
+function get_todays_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "",
+$entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0,
+$count = false) {
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities_from_metadata($day_start, $day_end, $meta_name, $meta_value,
+ $entity_type, $entity_subtype, $owner_guid, $limit, $offset, $order_by, $site_guid, $count);
+}
+
+/**
+ * Get entities for today from a relationship
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Reverse the normal function of the query to say
+ * "give me all entities for whom $relationship_guid is a
+ * $relationship of"
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param string $order_by Optional Order by
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ * @access private
+ */
+function get_todays_entities_from_relationship($relationship, $relationship_guid,
+$inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities_from_relationship($day_start, $day_end, $relationship,
+ $relationship_guid, $inverse_relationship, $type, $subtype, $owner_guid, $order_by,
+ $limit, $offset, $count, $site_guid);
+}
+
+/**
+ * Returns a viewable list of entities for a given time period.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to return; 10 by default
+ * @param boolean $fullview Whether or not to display the full view (default: true)
+ * @param boolean $listtypetoggle Whether or not to allow gallery view
+ * @param boolean $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @access private
+ */
+function list_notable_entities($start_time, $end_time, $type= "", $subtype = "", $owner_guid = 0,
+$limit = 10, $fullview = true, $listtypetoggle = false, $navigation = true) {
+
+ $offset = (int) get_input('offset');
+ $count = get_notable_entities($start_time, $end_time, $type, $subtype,
+ $owner_guid, "", $limit, $offset, true);
+
+ $entities = get_notable_entities($start_time, $end_time, $type, $subtype,
+ $owner_guid, "", $limit, $offset);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit,
+ $fullview, $listtypetoggle, $navigation);
+}
+
+/**
+ * Return a list of today's entities.
+ *
+ * @see list_notable_entities
+ *
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to return; 10 by default
+ * @param boolean $fullview Whether or not to display the full view (default: true)
+ * @param boolean $listtypetoggle Whether or not to allow gallery view
+ * @param boolean $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @access private
+ */
+function list_todays_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10,
+$fullview = true, $listtypetoggle = false, $navigation = true) {
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return list_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $limit,
+ $fullview, $listtypetoggle, $navigation);
+}
diff --git a/engine/lib/configuration.php b/engine/lib/configuration.php
new file mode 100644
index 000000000..b10e51130
--- /dev/null
+++ b/engine/lib/configuration.php
@@ -0,0 +1,631 @@
+<?php
+/**
+ * Elgg configuration procedural code.
+ *
+ * Includes functions for manipulating the configuration values stored in the database
+ * Plugin authors should use the {@link elgg_get_config()}, {@link elgg_set_config()},
+ * {@link elgg_save_config()}, and {@unset_config()} functions to access or update
+ * config values.
+ *
+ * Elgg's configuration is split among 2 tables and 1 file:
+ * - dbprefix_config
+ * - dbprefix_datalists
+ * - engine/settings.php (See {@link settings.example.php})
+ *
+ * Upon system boot, all values in dbprefix_config are read into $CONFIG.
+ *
+ * @package Elgg.Core
+ * @subpackage Configuration
+ */
+
+/**
+ * Get the URL for the current (or specified) site
+ *
+ * @param int $site_guid The GUID of the site whose URL we want to grab
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_get_site_url($site_guid = 0) {
+ if ($site_guid == 0) {
+ global $CONFIG;
+ return $CONFIG->wwwroot;
+ }
+
+ $site = get_entity($site_guid);
+
+ if (!$site instanceof ElggSite) {
+ return false;
+ }
+
+ return $site->url;
+}
+
+/**
+ * Get the plugin path for this installation
+ *
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_get_plugins_path() {
+ global $CONFIG;
+ return $CONFIG->pluginspath;
+}
+
+/**
+ * Get the data directory path for this installation
+ *
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_get_data_path() {
+ global $CONFIG;
+ return $CONFIG->dataroot;
+}
+
+/**
+ * Get the root directory path for this installation
+ *
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_get_root_path() {
+ global $CONFIG;
+ return $CONFIG->path;
+}
+
+/**
+ * Get an Elgg configuration value
+ *
+ * @param string $name Name of the configuration value
+ * @param int $site_guid NULL for installation setting, 0 for default site
+ *
+ * @return mixed Configuration value or null if it does not exist
+ * @since 1.8.0
+ */
+function elgg_get_config($name, $site_guid = 0) {
+ global $CONFIG;
+
+ $name = trim($name);
+
+ if (isset($CONFIG->$name)) {
+ return $CONFIG->$name;
+ }
+
+ if ($site_guid === null) {
+ // installation wide setting
+ $value = datalist_get($name);
+ } else {
+ // hit DB only if we're not sure if value exists or not
+ if (!isset($CONFIG->site_config_loaded)) {
+ // site specific setting
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_id;
+ }
+ $value = get_config($name, $site_guid);
+ } else {
+ $value = null;
+ }
+ }
+
+ // @todo document why we don't cache false
+ if ($value === false) {
+ return null;
+ }
+
+ $CONFIG->$name = $value;
+ return $value;
+}
+
+/**
+ * Set an Elgg configuration value
+ *
+ * @warning This does not persist the configuration setting. Use elgg_save_config()
+ *
+ * @param string $name Name of the configuration value
+ * @param mixed $value Value
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_set_config($name, $value) {
+ global $CONFIG;
+
+ $name = trim($name);
+
+ $CONFIG->$name = $value;
+}
+
+/**
+ * Save a configuration setting
+ *
+ * @param string $name Configuration name (cannot be greater than 32 characters)
+ * @param mixed $value Configuration value. Should be string for installation setting
+ * @param int $site_guid NULL for installation setting, 0 for default site
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_save_config($name, $value, $site_guid = 0) {
+ global $CONFIG;
+
+ $name = trim($name);
+
+ if (strlen($name) > 255) {
+ elgg_log("The name length for configuration variables cannot be greater than 255", "ERROR");
+ return false;
+ }
+
+ elgg_set_config($name, $value);
+
+ if ($site_guid === NULL) {
+ if (is_array($value) || is_object($value)) {
+ return false;
+ }
+ return datalist_set($name, $value);
+ } else {
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_id;
+ }
+ return set_config($name, $value, $site_guid);
+ }
+}
+
+/**
+ * Check that installation has completed and the database is populated.
+ *
+ * @throws InstallationException
+ * @return void
+ * @access private
+ */
+function verify_installation() {
+ global $CONFIG;
+
+ if (isset($CONFIG->installed)) {
+ return $CONFIG->installed;
+ }
+
+ try {
+ $dblink = get_db_link('read');
+ if (!$dblink) {
+ throw new DatabaseException();
+ }
+
+ mysql_query("SELECT value FROM {$CONFIG->dbprefix}datalists WHERE name = 'installed'", $dblink);
+ if (mysql_errno($dblink) > 0) {
+ throw new DatabaseException();
+ }
+
+ $CONFIG->installed = true;
+
+ } catch (DatabaseException $e) {
+ throw new InstallationException(elgg_echo('InstallationException:SiteNotInstalled'));
+ }
+}
+
+/**
+ * An array of key value pairs from the datalists table.
+ *
+ * Used as a cache in datalist functions.
+ *
+ * @global array $DATALIST_CACHE
+ */
+$DATALIST_CACHE = array();
+
+/**
+ * Get the value of a datalist element.
+ *
+ * @internal Datalists are stored in the datalist table.
+ *
+ * @tip Use datalists to store information common to a full installation.
+ *
+ * @param string $name The name of the datalist
+ * @return string|null|false String if value exists, null if doesn't, false on error
+ * @access private
+ */
+function datalist_get($name) {
+ global $CONFIG, $DATALIST_CACHE;
+
+ $name = trim($name);
+
+ // cannot store anything longer than 32 characters in db, so catch here
+ if (elgg_strlen($name) > 32) {
+ elgg_log("The name length for configuration variables cannot be greater than 32", "ERROR");
+ return false;
+ }
+
+ $name = sanitise_string($name);
+ if (isset($DATALIST_CACHE[$name])) {
+ return $DATALIST_CACHE[$name];
+ }
+
+ // If memcache enabled then cache value in memcache
+ $value = null;
+ static $datalist_memcache;
+ if ((!$datalist_memcache) && (is_memcache_available())) {
+ $datalist_memcache = new ElggMemcache('datalist_memcache');
+ }
+ if ($datalist_memcache) {
+ $value = $datalist_memcache->load($name);
+ }
+ if ($value) {
+ return $value;
+ }
+
+ // [Marcus Povey 20090217 : Now retrieving all datalist values on first
+ // load as this saves about 9 queries per page]
+ // This also causes OOM problems when the datalists table is large
+ // @todo make a list of datalists that we want to get in one grab
+ $result = get_data("SELECT * from {$CONFIG->dbprefix}datalists");
+ if ($result) {
+ foreach ($result as $row) {
+ $DATALIST_CACHE[$row->name] = $row->value;
+
+ // Cache it if memcache is available
+ if ($datalist_memcache) {
+ $datalist_memcache->save($row->name, $row->value);
+ }
+ }
+
+ if (isset($DATALIST_CACHE[$name])) {
+ return $DATALIST_CACHE[$name];
+ }
+ }
+
+ return null;
+}
+
+/**
+ * Set the value for a datalist element.
+ *
+ * @param string $name The name of the datalist
+ * @param string $value The new value
+ *
+ * @return bool
+ * @access private
+ */
+function datalist_set($name, $value) {
+ global $CONFIG, $DATALIST_CACHE;
+
+ // cannot store anything longer than 32 characters in db, so catch before we set
+ if (elgg_strlen($name) > 255) {
+ elgg_log("The name length for configuration variables cannot be greater than 255", "ERROR");
+ return false;
+ }
+
+ $sanitised_name = sanitise_string($name);
+ $sanitised_value = sanitise_string($value);
+
+ // If memcache is available then invalidate the cached copy
+ static $datalist_memcache;
+ if ((!$datalist_memcache) && (is_memcache_available())) {
+ $datalist_memcache = new ElggMemcache('datalist_memcache');
+ }
+
+ if ($datalist_memcache) {
+ $datalist_memcache->delete($name);
+ }
+
+ $success = insert_data("INSERT into {$CONFIG->dbprefix}datalists"
+ . " set name = '{$sanitised_name}', value = '{$sanitised_value}'"
+ . " ON DUPLICATE KEY UPDATE value='{$sanitised_value}'");
+
+ if ($success !== FALSE) {
+ $DATALIST_CACHE[$name] = $value;
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Run a function one time per installation.
+ *
+ * If you pass a timestamp as the second argument, it will run the function
+ * only if (i) it has never been run before or (ii) the timestamp is >=
+ * the last time it was run.
+ *
+ * @warning Functions are determined by their name. If you change the name of a function
+ * it will be run again.
+ *
+ * @tip Use $timelastupdatedcheck in your plugins init function to perform automated
+ * upgrades. Schedule a function to run once and pass the timestamp of the new release.
+ * This will cause the run once function to be run on all installations. To perform
+ * additional upgrades, create new functions for each release.
+ *
+ * @warning The function name cannot be longer than 32 characters long due to
+ * the current schema for the datalist table.
+ *
+ * @internal A datalist entry $functioname is created with the value of time().
+ *
+ * @param string $functionname The name of the function you want to run.
+ * @param int $timelastupdatedcheck A UNIX timestamp. If time() is > than this,
+ * this function will be run again.
+ *
+ * @return bool
+ */
+function run_function_once($functionname, $timelastupdatedcheck = 0) {
+ $lastupdated = datalist_get($functionname);
+ if ($lastupdated) {
+ $lastupdated = (int) $lastupdated;
+ } elseif ($lastupdated !== false) {
+ $lastupdated = 0;
+ } else {
+ // unable to check datalist
+ return false;
+ }
+ if (is_callable($functionname) && $lastupdated <= $timelastupdatedcheck) {
+ $functionname();
+ datalist_set($functionname, time());
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Removes a config setting.
+ *
+ * @internal
+ * These settings are stored in the dbprefix_config table and read during system
+ * boot into $CONFIG.
+ *
+ * @param string $name The name of the field.
+ * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default).
+ *
+ * @return int|false The number of affected rows or false on error.
+ *
+ * @see get_config()
+ * @see set_config()
+ */
+function unset_config($name, $site_guid = 0) {
+ global $CONFIG;
+
+ if (isset($CONFIG->$name)) {
+ unset($CONFIG->$name);
+ }
+
+ $name = sanitise_string($name);
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_id;
+ }
+
+ $query = "delete from {$CONFIG->dbprefix}config where name='$name' and site_guid=$site_guid";
+ return delete_data($query);
+}
+
+/**
+ * Add or update a config setting.
+ *
+ * If the config name already exists, it will be updated to the new value.
+ *
+ * @internal
+ * These settings are stored in the dbprefix_config table and read during system
+ * boot into $CONFIG.
+ *
+ * @param string $name The name of the configuration value
+ * @param string $value Its value
+ * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default)
+ *
+ * @return 0
+ * @todo The config table doens't have numeric primary keys so insert_data returns 0.
+ * @todo Use "INSERT ... ON DUPLICATE KEY UPDATE" instead of trying to delete then add.
+ * @see unset_config()
+ * @see get_config()
+ * @access private
+ */
+function set_config($name, $value, $site_guid = 0) {
+ global $CONFIG;
+
+ $name = trim($name);
+
+ // cannot store anything longer than 32 characters in db, so catch before we set
+ if (elgg_strlen($name) > 32) {
+ elgg_log("The name length for configuration variables cannot be greater than 32", "ERROR");
+ return false;
+ }
+
+ // Unset existing
+ unset_config($name, $site_guid);
+
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_id;
+ }
+ $CONFIG->$name = $value;
+ $value = sanitise_string(serialize($value));
+
+ $query = "insert into {$CONFIG->dbprefix}config"
+ . " set name = '{$name}', value = '{$value}', site_guid = {$site_guid}";
+ $result = insert_data($query);
+ return $result !== false;
+}
+
+/**
+ * Gets a configuration value
+ *
+ * @internal
+ * These settings are stored in the dbprefix_config table and read during system
+ * boot into $CONFIG.
+ *
+ * @param string $name The name of the config value
+ * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default)
+ *
+ * @return mixed|null
+ * @see set_config()
+ * @see unset_config()
+ * @access private
+ */
+function get_config($name, $site_guid = 0) {
+ global $CONFIG;
+
+ $name = sanitise_string($name);
+ $site_guid = (int) $site_guid;
+
+ // check for deprecated values.
+ // @todo might be a better spot to define this?
+ $new_name = false;
+ switch($name) {
+ case 'viewpath':
+ $new_name = 'view_path';
+ $dep_version = 1.8;
+ break;
+
+ case 'pluginspath':
+ $new_name = 'plugins_path';
+ $dep_version = 1.8;
+ break;
+
+ case 'sitename':
+ $new_name = 'site_name';
+ $dep_version = 1.8;
+ break;
+ }
+
+ // @todo these haven't really been implemented in Elgg 1.8. Complete in 1.9.
+ // show dep message
+ if ($new_name) {
+ // $msg = "Config value $name has been renamed as $new_name";
+ $name = $new_name;
+ // elgg_deprecated_notice($msg, $dep_version);
+ }
+
+ // decide from where to return the value
+ if (isset($CONFIG->$name)) {
+ return $CONFIG->$name;
+ }
+
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_id;
+ }
+
+ $result = get_data_row("SELECT value FROM {$CONFIG->dbprefix}config
+ WHERE name = '{$name}' and site_guid = {$site_guid}");
+
+ if ($result) {
+ $result = $result->value;
+ $result = unserialize($result->value);
+ $CONFIG->$name = $result;
+ return $result;
+ }
+
+ return null;
+}
+
+/**
+ * Loads all configuration values from the dbprefix_config table into $CONFIG.
+ *
+ * @param int $site_guid Optionally, the GUID of the site (current site is assumed by default)
+ *
+ * @return bool
+ * @access private
+ */
+function get_all_config($site_guid = 0) {
+ global $CONFIG;
+
+ $site_guid = (int) $site_guid;
+
+ if ($site_guid == 0) {
+ $site_guid = (int) $CONFIG->site_guid;
+ }
+
+ if ($result = get_data("SELECT * FROM {$CONFIG->dbprefix}config WHERE site_guid = $site_guid")) {
+ foreach ($result as $r) {
+ $name = $r->name;
+ $value = $r->value;
+ $CONFIG->$name = unserialize($value);
+ }
+
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Loads configuration related to this site
+ *
+ * This loads from the config database table and the site entity
+ * @access private
+ */
+function _elgg_load_site_config() {
+ global $CONFIG;
+
+ $CONFIG->site_guid = (int) datalist_get('default_site');
+ $CONFIG->site_id = $CONFIG->site_guid;
+ $CONFIG->site = get_entity($CONFIG->site_guid);
+ if (!$CONFIG->site) {
+ throw new InstallationException(elgg_echo('InstallationException:SiteNotInstalled'));
+ }
+
+ $CONFIG->wwwroot = $CONFIG->site->url;
+ $CONFIG->sitename = $CONFIG->site->name;
+ $CONFIG->sitedescription = $CONFIG->site->description;
+ $CONFIG->siteemail = $CONFIG->site->email;
+ $CONFIG->url = $CONFIG->wwwroot;
+
+ get_all_config();
+ // gives hint to elgg_get_config function how to approach missing values
+ $CONFIG->site_config_loaded = true;
+}
+
+/**
+ * Loads configuration related to Elgg as an application
+ *
+ * This loads from the datalists database table
+ * @access private
+ */
+function _elgg_load_application_config() {
+ global $CONFIG;
+
+ $install_root = str_replace("\\", "/", dirname(dirname(dirname(__FILE__))));
+ $defaults = array(
+ 'path' => "$install_root/",
+ 'view_path' => "$install_root/views/",
+ 'plugins_path' => "$install_root/mod/",
+ 'language' => 'en',
+
+ // compatibility with old names for plugins not using elgg_get_config()
+ 'viewpath' => "$install_root/views/",
+ 'pluginspath' => "$install_root/mod/",
+ );
+
+ foreach ($defaults as $name => $value) {
+ if (empty($CONFIG->$name)) {
+ $CONFIG->$name = $value;
+ }
+ }
+
+ $path = datalist_get('path');
+ if (!empty($path)) {
+ $CONFIG->path = $path;
+ }
+ $dataroot = datalist_get('dataroot');
+ if (!empty($dataroot)) {
+ $CONFIG->dataroot = $dataroot;
+ }
+ $simplecache_enabled = datalist_get('simplecache_enabled');
+ if ($simplecache_enabled !== false) {
+ $CONFIG->simplecache_enabled = $simplecache_enabled;
+ } else {
+ $CONFIG->simplecache_enabled = 1;
+ }
+ $system_cache_enabled = datalist_get('system_cache_enabled');
+ if ($system_cache_enabled !== false) {
+ $CONFIG->system_cache_enabled = $system_cache_enabled;
+ } else {
+ $CONFIG->system_cache_enabled = 1;
+ }
+
+ // initialize context here so it is set before the get_input call
+ $CONFIG->context = array();
+
+ // needs to be set before system, init for links in html head
+ $viewtype = get_input('view', 'default');
+ $lastcached = datalist_get("simplecache_lastcached_$viewtype");
+ $CONFIG->lastcache = $lastcached;
+
+ $CONFIG->i18n_loaded_from_cache = false;
+
+ // this must be synced with the enum for the entities table
+ $CONFIG->entity_types = array('group', 'object', 'site', 'user');
+}
diff --git a/engine/lib/cron.php b/engine/lib/cron.php
new file mode 100644
index 000000000..f7a032f4a
--- /dev/null
+++ b/engine/lib/cron.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Elgg cron library.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+/**
+ * Cron initialization
+ *
+ * @return void
+ * @access private
+ */
+function cron_init() {
+ // Register a pagehandler for cron
+ elgg_register_page_handler('cron', 'cron_page_handler');
+
+ // register a hook for Walled Garden public pages
+ elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'cron_public_pages');
+}
+
+/**
+ * Cron handler
+ *
+ * @param array $page Pages
+ *
+ * @return bool
+ * @access private
+ */
+function cron_page_handler($page) {
+ global $CONFIG;
+
+ if (!isset($page[0])) {
+ forward();
+ }
+
+ $period = strtolower($page[0]);
+
+ $allowed_periods = array(
+ 'minute', 'fiveminute', 'fifteenmin', 'halfhour', 'hourly',
+ 'daily', 'weekly', 'monthly', 'yearly', 'reboot'
+ );
+
+ if (!in_array($period, $allowed_periods)) {
+ throw new CronException(elgg_echo('CronException:unknownperiod', array($period)));
+ }
+
+ // Get a list of parameters
+ $params = array();
+ $params['time'] = time();
+
+ // Data to return to
+ $std_out = "";
+ $old_stdout = "";
+ ob_start();
+
+ $old_stdout = elgg_trigger_plugin_hook('cron', $period, $params, $old_stdout);
+ $std_out = ob_get_clean();
+
+ echo $std_out . $old_stdout;
+ return true;
+}
+
+/**
+ * Register cron's pages as public in case we're in Walled Garden mode
+ *
+ * @param string $hook public_pages
+ * @param string $type system
+ * @param array $return_value Array of pages to allow
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function cron_public_pages($hook, $type, $return_value, $params) {
+ $return_value[] = 'cron/minute';
+ $return_value[] = 'cron/fiveminute';
+ $return_value[] = 'cron/fifteenmin';
+ $return_value[] = 'cron/halfhour';
+ $return_value[] = 'cron/hourly';
+ $return_value[] = 'cron/daily';
+ $return_value[] = 'cron/weekly';
+ $return_value[] = 'cron/monthly';
+ $return_value[] = 'cron/yearly';
+ $return_value[] = 'cron/reboot';
+
+ return $return_value;
+}
+
+elgg_register_event_handler('init', 'system', 'cron_init');
diff --git a/engine/lib/database.php b/engine/lib/database.php
new file mode 100644
index 000000000..7d90b30b8
--- /dev/null
+++ b/engine/lib/database.php
@@ -0,0 +1,757 @@
+<?php
+/**
+ * Elgg database procedural code.
+ *
+ * Includes functions for establishing and retrieving a database link,
+ * reading data, writing data, upgrading DB schemas, and sanitizing input.
+ *
+ * @package Elgg.Core
+ * @subpackage Database
+ */
+
+/**
+ * Query cache for all queries.
+ *
+ * Each query and its results are stored in this array as:
+ * <code>
+ * $DB_QUERY_CACHE[$query] => array(result1, result2, ... resultN)
+ * </code>
+ *
+ * @global array $DB_QUERY_CACHE
+ */
+global $DB_QUERY_CACHE;
+$DB_QUERY_CACHE = array();
+
+/**
+ * Queries to be executed upon shutdown.
+ *
+ * These queries are saved to an array and executed using
+ * a function registered by register_shutdown_function().
+ *
+ * Queries are saved as an array in the format:
+ * <code>
+ * $DB_DELAYED_QUERIES[] = array(
+ * 'q' => str $query,
+ * 'l' => resource $dblink,
+ * 'h' => str $handler // a callback function
+ * );
+ * </code>
+ *
+ * @global array $DB_DELAYED_QUERIES
+ */
+global $DB_DELAYED_QUERIES;
+$DB_DELAYED_QUERIES = array();
+
+/**
+ * Database connection resources.
+ *
+ * Each database link created with establish_db_link($name) is stored in
+ * $dblink as $dblink[$name] => resource. Use get_db_link($name) to retrieve it.
+ *
+ * @global array $dblink
+ */
+global $dblink;
+$dblink = array();
+
+/**
+ * Database call count
+ *
+ * Each call to the database increments this counter.
+ *
+ * @global integer $dbcalls
+ */
+global $dbcalls;
+$dbcalls = 0;
+
+/**
+ * Establish a connection to the database servser
+ *
+ * Connect to the database server and use the Elgg database for a particular database link
+ *
+ * @param string $dblinkname The type of database connection. Used to identify the
+ * resource. eg "read", "write", or "readwrite".
+ *
+ * @return void
+ * @access private
+ */
+function establish_db_link($dblinkname = "readwrite") {
+ // Get configuration, and globalise database link
+ global $CONFIG, $dblink, $DB_QUERY_CACHE, $dbcalls;
+
+ if ($dblinkname != "readwrite" && isset($CONFIG->db[$dblinkname])) {
+ if (is_array($CONFIG->db[$dblinkname])) {
+ $index = rand(0, sizeof($CONFIG->db[$dblinkname]));
+ $dbhost = $CONFIG->db[$dblinkname][$index]->dbhost;
+ $dbuser = $CONFIG->db[$dblinkname][$index]->dbuser;
+ $dbpass = $CONFIG->db[$dblinkname][$index]->dbpass;
+ $dbname = $CONFIG->db[$dblinkname][$index]->dbname;
+ } else {
+ $dbhost = $CONFIG->db[$dblinkname]->dbhost;
+ $dbuser = $CONFIG->db[$dblinkname]->dbuser;
+ $dbpass = $CONFIG->db[$dblinkname]->dbpass;
+ $dbname = $CONFIG->db[$dblinkname]->dbname;
+ }
+ } else {
+ $dbhost = $CONFIG->dbhost;
+ $dbuser = $CONFIG->dbuser;
+ $dbpass = $CONFIG->dbpass;
+ $dbname = $CONFIG->dbname;
+ }
+
+ // Connect to database
+ if (!$dblink[$dblinkname] = mysql_connect($dbhost, $dbuser, $dbpass, true)) {
+ $msg = elgg_echo('DatabaseException:WrongCredentials',
+ array($dbuser, $dbhost, "****"));
+ throw new DatabaseException($msg);
+ }
+
+ if (!mysql_select_db($dbname, $dblink[$dblinkname])) {
+ $msg = elgg_echo('DatabaseException:NoConnect', array($dbname));
+ throw new DatabaseException($msg);
+ }
+
+ // Set DB for UTF8
+ mysql_query("SET NAMES utf8");
+
+ $db_cache_off = FALSE;
+ if (isset($CONFIG->db_disable_query_cache)) {
+ $db_cache_off = $CONFIG->db_disable_query_cache;
+ }
+
+ // Set up cache if global not initialized and query cache not turned off
+ if ((!$DB_QUERY_CACHE) && (!$db_cache_off)) {
+ $DB_QUERY_CACHE = new ElggStaticVariableCache('db_query_cache');
+ }
+}
+
+/**
+ * Establish database connections
+ *
+ * If the configuration has been set up for multiple read/write databases, set those
+ * links up separately; otherwise just create the one database link.
+ *
+ * @return void
+ * @access private
+ */
+function setup_db_connections() {
+ global $CONFIG, $dblink;
+
+ if (!empty($CONFIG->db->split)) {
+ establish_db_link('read');
+ establish_db_link('write');
+ } else {
+ establish_db_link('readwrite');
+ }
+}
+
+/**
+ * Display profiling information about db at NOTICE debug level upon shutdown.
+ *
+ * @return void
+ * @access private
+ */
+function db_profiling_shutdown_hook() {
+ global $dbcalls;
+
+ // demoted to NOTICE as it corrupts javasript at DEBUG
+ elgg_log("DB Queries for this page: $dbcalls", 'NOTICE');
+}
+
+/**
+ * Execute any delayed queries upon shutdown.
+ *
+ * @return void
+ * @access private
+ */
+function db_delayedexecution_shutdown_hook() {
+ global $DB_DELAYED_QUERIES;
+
+ foreach ($DB_DELAYED_QUERIES as $query_details) {
+ try {
+ $link = $query_details['l'];
+
+ if ($link == 'read' || $link == 'write') {
+ $link = get_db_link($link);
+ } elseif (!is_resource($link)) {
+ elgg_log("Link for delayed query not valid resource or db_link type. Query: {$query_details['q']}", 'WARNING');
+ }
+
+ $result = execute_query($query_details['q'], $link);
+
+ if ((isset($query_details['h'])) && (is_callable($query_details['h']))) {
+ $query_details['h']($result);
+ }
+ } catch (Exception $e) {
+ // Suppress all errors since these can't be dealt with here
+ elgg_log($e, 'WARNING');
+ }
+ }
+}
+
+/**
+ * Returns (if required, also creates) a database link resource.
+ *
+ * Database link resources are stored in the {@link $dblink} global. These
+ * resources are created by {@link setup_db_connections()}, which is called if
+ * no links exist.
+ *
+ * @param string $dblinktype The type of link we want: "read", "write" or "readwrite".
+ *
+ * @return object Database link
+ * @access private
+ */
+function get_db_link($dblinktype) {
+ global $dblink;
+
+ if (isset($dblink[$dblinktype])) {
+ return $dblink[$dblinktype];
+ } else if (isset($dblink['readwrite'])) {
+ return $dblink['readwrite'];
+ } else {
+ setup_db_connections();
+ return get_db_link($dblinktype);
+ }
+}
+
+/**
+ * Execute an EXPLAIN for $query.
+ *
+ * @param str $query The query to explain
+ * @param mixed $link The database link resource to user.
+ *
+ * @return mixed An object of the query's result, or FALSE
+ * @access private
+ */
+function explain_query($query, $link) {
+ if ($result = execute_query("explain " . $query, $link)) {
+ return mysql_fetch_object($result);
+ }
+
+ return FALSE;
+}
+
+/**
+ * Execute a query.
+ *
+ * $query is executed via {@link mysql_query()}. If there is an SQL error,
+ * a {@link DatabaseException} is thrown.
+ *
+ * @internal
+ * {@link $dbcalls} is incremented and the query is saved into the {@link $DB_QUERY_CACHE}.
+ *
+ * @param string $query The query
+ * @param link $dblink The DB link
+ *
+ * @return The result of mysql_query()
+ * @throws DatabaseException
+ * @access private
+ */
+function execute_query($query, $dblink) {
+ global $CONFIG, $dbcalls;
+
+ if ($query == NULL) {
+ throw new DatabaseException(elgg_echo('DatabaseException:InvalidQuery'));
+ }
+
+ if (!is_resource($dblink)) {
+ throw new DatabaseException(elgg_echo('DatabaseException:InvalidDBLink'));
+ }
+
+ $dbcalls++;
+
+ $result = mysql_query($query, $dblink);
+
+ if (mysql_errno($dblink)) {
+ throw new DatabaseException(mysql_error($dblink) . "\n\n QUERY: " . $query);
+ }
+
+ return $result;
+}
+
+/**
+ * Queue a query for execution upon shutdown.
+ *
+ * You can specify a handler function if you care about the result. This function will accept
+ * the raw result from {@link mysql_query()}.
+ *
+ * @param string $query The query to execute
+ * @param resource $dblink The database link to use or the link type (read | write)
+ * @param string $handler A callback function to pass the results array to
+ *
+ * @return true
+ * @access private
+ */
+function execute_delayed_query($query, $dblink, $handler = "") {
+ global $DB_DELAYED_QUERIES;
+
+ if (!isset($DB_DELAYED_QUERIES)) {
+ $DB_DELAYED_QUERIES = array();
+ }
+
+ if (!is_resource($dblink) && $dblink != 'read' && $dblink != 'write') {
+ return false;
+ }
+
+ // Construct delayed query
+ $delayed_query = array();
+ $delayed_query['q'] = $query;
+ $delayed_query['l'] = $dblink;
+ $delayed_query['h'] = $handler;
+
+ $DB_DELAYED_QUERIES[] = $delayed_query;
+
+ return TRUE;
+}
+
+/**
+ * Write wrapper for execute_delayed_query()
+ *
+ * @param string $query The query to execute
+ * @param string $handler The handler if you care about the result.
+ *
+ * @return true
+ * @uses execute_delayed_query()
+ * @uses get_db_link()
+ * @access private
+ */
+function execute_delayed_write_query($query, $handler = "") {
+ return execute_delayed_query($query, 'write', $handler);
+}
+
+/**
+ * Read wrapper for execute_delayed_query()
+ *
+ * @param string $query The query to execute
+ * @param string $handler The handler if you care about the result.
+ *
+ * @return true
+ * @uses execute_delayed_query()
+ * @uses get_db_link()
+ * @access private
+ */
+function execute_delayed_read_query($query, $handler = "") {
+ return execute_delayed_query($query, 'read', $handler);
+}
+
+/**
+ * Retrieve rows from the database.
+ *
+ * Queries are executed with {@link execute_query()} and results
+ * are retrieved with {@link mysql_fetch_object()}. If a callback
+ * function $callback is defined, each row will be passed as the single
+ * argument to $callback. If no callback function is defined, the
+ * entire result set is returned as an array.
+ *
+ * @param mixed $query The query being passed.
+ * @param string $callback Optionally, the name of a function to call back to on each row
+ *
+ * @return array An array of database result objects or callback function results. If the query
+ * returned nothing, an empty array.
+ * @access private
+ */
+function get_data($query, $callback = "") {
+ return elgg_query_runner($query, $callback, false);
+}
+
+/**
+ * Retrieve a single row from the database.
+ *
+ * Similar to {@link get_data()} but returns only the first row
+ * matched. If a callback function $callback is specified, the row will be passed
+ * as the only argument to $callback.
+ *
+ * @param mixed $query The query to execute.
+ * @param string $callback A callback function
+ *
+ * @return mixed A single database result object or the result of the callback function.
+ * @access private
+ */
+function get_data_row($query, $callback = "") {
+ return elgg_query_runner($query, $callback, true);
+}
+
+/**
+ * Handles returning data from a query, running it through a callback function,
+ * and caching the results. This is for R queries (from CRUD).
+ *
+ * @access private
+ *
+ * @param string $query The query to execute
+ * @param string $callback An optional callback function to run on each row
+ * @param bool $single Return only a single result?
+ *
+ * @return array An array of database result objects or callback function results. If the query
+ * returned nothing, an empty array.
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_query_runner($query, $callback = null, $single = false) {
+ global $CONFIG, $DB_QUERY_CACHE;
+
+ // Since we want to cache results of running the callback, we need to
+ // need to namespace the query with the callback and single result request.
+ // http://trac.elgg.org/ticket/4049
+ $hash = (string)$callback . (int)$single . $query;
+
+ // Is cached?
+ if ($DB_QUERY_CACHE) {
+ $cached_query = $DB_QUERY_CACHE[$hash];
+
+ if ($cached_query !== FALSE) {
+ elgg_log("DB query $query results returned from cache (hash: $hash)", 'NOTICE');
+ return $cached_query;
+ }
+ }
+
+ $dblink = get_db_link('read');
+ $return = array();
+
+ if ($result = execute_query("$query", $dblink)) {
+
+ // test for callback once instead of on each iteration.
+ // @todo check profiling to see if this needs to be broken out into
+ // explicit cases instead of checking in the interation.
+ $is_callable = is_callable($callback);
+ while ($row = mysql_fetch_object($result)) {
+ if ($is_callable) {
+ $row = $callback($row);
+ }
+
+ if ($single) {
+ $return = $row;
+ break;
+ } else {
+ $return[] = $row;
+ }
+ }
+ }
+
+ if (empty($return)) {
+ elgg_log("DB query $query returned no results.", 'NOTICE');
+ }
+
+ // Cache result
+ if ($DB_QUERY_CACHE) {
+ $DB_QUERY_CACHE[$hash] = $return;
+ elgg_log("DB query $query results cached (hash: $hash)", 'NOTICE');
+ }
+
+ return $return;
+}
+
+/**
+ * Insert a row into the database.
+ *
+ * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
+ *
+ * @param mixed $query The query to execute.
+ *
+ * @return int|false The database id of the inserted row if a AUTO_INCREMENT field is
+ * defined, 0 if not, and false on failure.
+ * @access private
+ */
+function insert_data($query) {
+ global $CONFIG, $DB_QUERY_CACHE;
+
+ elgg_log("DB query $query", 'NOTICE');
+
+ $dblink = get_db_link('write');
+
+ // Invalidate query cache
+ if ($DB_QUERY_CACHE) {
+ $DB_QUERY_CACHE->clear();
+ }
+
+ elgg_log("Query cache invalidated", 'NOTICE');
+
+ if (execute_query("$query", $dblink)) {
+ return mysql_insert_id($dblink);
+ }
+
+ return FALSE;
+}
+
+/**
+ * Update a row in the database.
+ *
+ * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
+ *
+ * @param string $query The query to run.
+ *
+ * @return bool
+ * @access private
+ */
+function update_data($query) {
+ global $CONFIG, $DB_QUERY_CACHE;
+
+ elgg_log("DB query $query", 'NOTICE');
+
+ $dblink = get_db_link('write');
+
+ // Invalidate query cache
+ if ($DB_QUERY_CACHE) {
+ $DB_QUERY_CACHE->clear();
+ elgg_log("Query cache invalidated", 'NOTICE');
+ }
+
+ if (execute_query("$query", $dblink)) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Remove a row from the database.
+ *
+ * @note Altering the DB invalidates all queries in {@link $DB_QUERY_CACHE}.
+ *
+ * @param string $query The SQL query to run
+ *
+ * @return int|false The number of affected rows or false on failure
+ * @access private
+ */
+function delete_data($query) {
+ global $CONFIG, $DB_QUERY_CACHE;
+
+ elgg_log("DB query $query", 'NOTICE');
+
+ $dblink = get_db_link('write');
+
+ // Invalidate query cache
+ if ($DB_QUERY_CACHE) {
+ $DB_QUERY_CACHE->clear();
+ elgg_log("Query cache invalidated", 'NOTICE');
+ }
+
+ if (execute_query("$query", $dblink)) {
+ return mysql_affected_rows($dblink);
+ }
+
+ return FALSE;
+}
+
+
+/**
+ * Return tables matching the database prefix {@link $CONFIG->dbprefix}% in the currently
+ * selected database.
+ *
+ * @return array|false List of tables or false on failure
+ * @static array $tables Tables found matching the database prefix
+ * @access private
+ */
+function get_db_tables() {
+ global $CONFIG;
+ static $tables;
+
+ if (isset($tables)) {
+ return $tables;
+ }
+
+ try{
+ $result = get_data("show tables like '" . $CONFIG->dbprefix . "%'");
+ } catch (DatabaseException $d) {
+ // Likely we can't handle an exception here, so just return false.
+ return FALSE;
+ }
+
+ $tables = array();
+
+ if (is_array($result) && !empty($result)) {
+ foreach ($result as $row) {
+ $row = (array) $row;
+ if (is_array($row) && !empty($row)) {
+ foreach ($row as $element) {
+ $tables[] = $element;
+ }
+ }
+ }
+ } else {
+ return FALSE;
+ }
+
+ return $tables;
+}
+
+/**
+ * Optimise a table.
+ *
+ * Executes an OPTIMIZE TABLE query on $table. Useful after large DB changes.
+ *
+ * @param string $table The name of the table to optimise
+ *
+ * @return bool
+ * @access private
+ */
+function optimize_table($table) {
+ $table = sanitise_string($table);
+ return update_data("optimize table $table");
+}
+
+/**
+ * Get the last database error for a particular database link
+ *
+ * @param resource $dblink The DB link
+ *
+ * @return string Database error message
+ * @access private
+ */
+function get_db_error($dblink) {
+ return mysql_error($dblink);
+}
+
+/**
+ * Runs a full database script from disk.
+ *
+ * The file specified should be a standard SQL file as created by
+ * mysqldump or similar. Statements must be terminated with ;
+ * and a newline character (\n or \r\n) with only one statement per line.
+ *
+ * The special string 'prefix_' is replaced with the database prefix
+ * as defined in {@link $CONFIG->dbprefix}.
+ *
+ * @warning Errors do not halt execution of the script. If a line
+ * generates an error, the error message is saved and the
+ * next line is executed. After the file is run, any errors
+ * are displayed as a {@link DatabaseException}
+ *
+ * @param string $scriptlocation The full path to the script
+ *
+ * @return void
+ * @throws DatabaseException
+ * @access private
+ */
+function run_sql_script($scriptlocation) {
+ if ($script = file_get_contents($scriptlocation)) {
+ global $CONFIG;
+
+ $errors = array();
+
+ // Remove MySQL -- style comments
+ $script = preg_replace('/\-\-.*\n/', '', $script);
+
+ // Statements must end with ; and a newline
+ $sql_statements = preg_split('/;[\n\r]+/', $script);
+
+ foreach ($sql_statements as $statement) {
+ $statement = trim($statement);
+ $statement = str_replace("prefix_", $CONFIG->dbprefix, $statement);
+ if (!empty($statement)) {
+ try {
+ $result = update_data($statement);
+ } catch (DatabaseException $e) {
+ $errors[] = $e->getMessage();
+ }
+ }
+ }
+ if (!empty($errors)) {
+ $errortxt = "";
+ foreach ($errors as $error) {
+ $errortxt .= " {$error};";
+ }
+
+ $msg = elgg_echo('DatabaseException:DBSetupIssues') . $errortxt;
+ throw new DatabaseException($msg);
+ }
+ } else {
+ $msg = elgg_echo('DatabaseException:ScriptNotFound', array($scriptlocation));
+ throw new DatabaseException($msg);
+ }
+}
+
+/**
+ * Format a query string for logging
+ *
+ * @param string $query Query string
+ * @return string
+ * @access private
+ */
+function elgg_format_query($query) {
+ // remove newlines and extra spaces so logs are easier to read
+ return preg_replace('/\s\s+/', ' ', $query);
+}
+
+/**
+ * Sanitise a string for database use, but with the option of escaping extra characters.
+ *
+ * @param string $string The string to sanitise
+ * @param string $extra_escapeable Extra characters to escape with '\\'
+ *
+ * @return string The escaped string
+ */
+function sanitise_string_special($string, $extra_escapeable = '') {
+ $string = sanitise_string($string);
+
+ for ($n = 0; $n < strlen($extra_escapeable); $n++) {
+ $string = str_replace($extra_escapeable[$n], "\\" . $extra_escapeable[$n], $string);
+ }
+
+ return $string;
+}
+
+/**
+ * Sanitise a string for database use.
+ *
+ * @param string $string The string to sanitise
+ *
+ * @return string Sanitised string
+ */
+function sanitise_string($string) {
+ // @todo does this really need the trim?
+ // there are times when you might want trailing / preceeding white space.
+ return mysql_real_escape_string(trim($string));
+}
+
+/**
+ * Wrapper function for alternate English spelling
+ *
+ * @param string $string The string to sanitise
+ *
+ * @return string Sanitised string
+ */
+function sanitize_string($string) {
+ return sanitise_string($string);
+}
+
+/**
+ * Sanitises an integer for database use.
+ *
+ * @param int $int Value to be sanitized
+ * @param bool $signed Whether negative values should be allowed (true)
+ * @return int
+ */
+function sanitise_int($int, $signed = true) {
+ $int = (int) $int;
+
+ if ($signed === false) {
+ if ($int < 0) {
+ $int = 0;
+ }
+ }
+
+ return (int) $int;
+}
+
+/**
+ * Sanitizes an integer for database use.
+ * Wrapper function for alternate English spelling (@see sanitise_int)
+ *
+ * @param int $int Value to be sanitized
+ * @param bool $signed Whether negative values should be allowed (true)
+ * @return int
+ */
+function sanitize_int($int, $signed = true) {
+ return sanitise_int($int, $signed);
+}
+
+/**
+ * Registers shutdown functions for database profiling and delayed queries.
+ *
+ * @access private
+ */
+function init_db() {
+ register_shutdown_function('db_delayedexecution_shutdown_hook');
+ register_shutdown_function('db_profiling_shutdown_hook');
+}
+
+elgg_register_event_handler('init', 'system', 'init_db');
diff --git a/engine/lib/deprecated-1.7.php b/engine/lib/deprecated-1.7.php
new file mode 100644
index 000000000..519eea89d
--- /dev/null
+++ b/engine/lib/deprecated-1.7.php
@@ -0,0 +1,1162 @@
+<?php
+/**
+ * Get entities with the specified access collection id.
+ *
+ * @deprecated 1.7. Use elgg_get_entities_from_access_id()
+ *
+ * @param int $collection_id ID of collection
+ * @param string $entity_type Type of entities
+ * @param string $entity_subtype Subtype of entities
+ * @param int $owner_guid Guid of owner
+ * @param int $limit Limit of number of entities to return
+ * @param int $offset Skip this many entities
+ * @param string $order_by Column to order by
+ * @param int $site_guid The site guid
+ * @param bool $count Return a count or entities
+ *
+ * @return array
+ */
+function get_entities_from_access_id($collection_id, $entity_type = "", $entity_subtype = "",
+ $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) {
+ // log deprecated warning
+ elgg_deprecated_notice('get_entities_from_access_id() was deprecated by elgg_get_entities()', 1.7);
+
+ if (!$collection_id) {
+ return FALSE;
+ }
+
+ // build the options using given parameters
+ $options = array();
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+ $options['count'] = $count;
+
+ if ($entity_type) {
+ $options['type'] = sanitise_string($entity_type);
+ }
+
+ if ($entity_subtype) {
+ $options['subtype'] = $entity_subtype;
+ }
+
+ if ($site_guid) {
+ $options['site_guid'] = $site_guid;
+ }
+
+ if ($order_by) {
+ $options['order_by'] = sanitise_string("e.time_created, $order_by");
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($site_guid) {
+ $options['site_guid'] = $site_guid;
+ }
+
+ $options['access_id'] = $collection_id;
+
+ return elgg_get_entities_from_access_id($options);
+}
+
+/**
+ * @deprecated 1.7
+ */
+function get_entities_from_access_collection($collection_id, $entity_type = "", $entity_subtype = "",
+ $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) {
+
+ elgg_deprecated_notice('get_entities_from_access_collection() was deprecated by elgg_get_entities()', 1.7);
+
+ return get_entities_from_access_id($collection_id, $entity_type, $entity_subtype,
+ $owner_guid, $limit, $offset, $order_by, $site_guid, $count);
+}
+
+/**
+ * Get entities from annotations
+ *
+ * No longer used.
+ *
+ * @deprecated 1.7 Use elgg_get_entities_from_annotations()
+ *
+ * @param mixed $entity_type Type of entity
+ * @param mixed $entity_subtype Subtype of entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param int $owner_guid Guid of owner of annotation
+ * @param int $group_guid Guid of group
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by SQL order by string
+ * @param bool $count Count or return entities
+ * @param int $timelower Lower time limit
+ * @param int $timeupper Upper time limit
+ *
+ * @return unknown_type
+ */
+function get_entities_from_annotations($entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $owner_guid = 0, $group_guid = 0, $limit = 10, $offset = 0, $order_by = "asc",
+$count = false, $timelower = 0, $timeupper = 0) {
+ $msg = 'get_entities_from_annotations() is deprecated by elgg_get_entities_from_annotations().';
+ elgg_deprecated_notice($msg, 1.7);
+
+ $options = array();
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ $options['annotation_names'] = $name;
+
+ if ($value) {
+ $options['annotation_values'] = $value;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['annotation_owner_guids'] = $owner_guid;
+ } else {
+ $options['annotation_owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($group_guid) {
+ $options['container_guid'] = $group_guid;
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'] = "maxtime $order_by";
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ if ($timelower) {
+ $options['annotation_created_time_lower'] = $timelower;
+ }
+
+ if ($timeupper) {
+ $options['annotation_created_time_upper'] = $timeupper;
+ }
+
+ return elgg_get_entities_from_annotations($options);
+}
+
+/**
+ * Lists entities
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param string $entity_type Type of entity.
+ * @param string $entity_subtype Subtype of entity.
+ * @param string $name Name of annotation.
+ * @param string $value Value of annotation.
+ * @param int $limit Maximum number of results to return.
+ * @param int $owner_guid Owner.
+ * @param int $group_guid Group container. Currently only supported if entity_type is object
+ * @param boolean $asc Whether to list in ascending or descending order (default: desc)
+ * @param boolean $fullview Whether to display the entities in full
+ * @param boolean $listtypetoggle Can 'gallery' view can be displayed (default: no)
+ *
+ * @deprecated 1.7 Use elgg_list_entities_from_annotations()
+ * @return string Formatted entity list
+ */
+function list_entities_from_annotations($entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true,
+$listtypetoggle = false) {
+
+ $msg = 'list_entities_from_annotations is deprecated by elgg_list_entities_from_annotations';
+ elgg_deprecated_notice($msg, 1.8);
+
+ $options = array();
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ if ($name) {
+ $options['annotation_names'] = $name;
+ }
+
+ if ($value) {
+ $options['annotation_values'] = $value;
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($owner_guid) {
+ $options['annotation_owner_guid'] = $owner_guid;
+ }
+
+ if ($group_guid) {
+ $options['container_guid'] = $group_guid;
+ }
+
+ if ($asc) {
+ $options['order_by'] = 'maxtime desc';
+ }
+
+ if ($offset = sanitise_int(get_input('offset', null))) {
+ $options['offset'] = $offset;
+ }
+
+ $options['full_view'] = $fullview;
+ $options['list_type_toggle'] = $listtypetoggle;
+ $options['pagination'] = $pagination;
+
+ return elgg_list_entities_from_annotations($options);
+}
+
+/**
+ * Returns all php files in a directory.
+ *
+ * @deprecated 1.7 Use elgg_get_file_list() instead
+ *
+ * @param string $directory Directory to look in
+ * @param array $exceptions Array of extensions (with .!) to ignore
+ * @param array $list A list files to include in the return
+ *
+ * @return array
+ */
+function get_library_files($directory, $exceptions = array(), $list = array()) {
+ elgg_deprecated_notice('get_library_files() deprecated by elgg_get_file_list()', 1.7);
+ return elgg_get_file_list($directory, $exceptions, $list, array('.php'));
+}
+
+/**
+ * Add action tokens to URL.
+ *
+ * @param string $url URL
+ *
+ * @return string
+ *
+ * @deprecated 1.7 final
+ */
+function elgg_validate_action_url($url) {
+ elgg_deprecated_notice('elgg_validate_action_url() deprecated by elgg_add_action_tokens_to_url().',
+ 1.7);
+
+ return elgg_add_action_tokens_to_url($url);
+}
+
+/**
+ * Does nothing.
+ *
+ * @deprecated 1.7
+ * @return 0
+ */
+function test_ip() {
+ elgg_deprecated_notice('test_ip() was removed because of licensing issues.', 1.7);
+
+ return 0;
+}
+
+/**
+ * Does nothing.
+ *
+ * @return bool
+ * @deprecated 1.7
+ */
+function is_ip_in_array() {
+ elgg_deprecated_notice('is_ip_in_array() was removed because of licensing issues.', 1.7);
+
+ return false;
+}
+
+/**
+ * Returns entities.
+ *
+ * @deprecated 1.7. Use elgg_get_entities().
+ *
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param string $order_by Order by clause
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param bool $count Return a count or an array of entities
+ * @param int $site_guid Site GUID
+ * @param int $container_guid Container GUID
+ * @param int $timelower Lower time limit
+ * @param int $timeupper Upper time limit
+ *
+ * @return array
+ */
+function get_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10,
+$offset = 0, $count = false, $site_guid = 0, $container_guid = null, $timelower = 0,
+$timeupper = 0) {
+
+ elgg_deprecated_notice('get_entities() was deprecated by elgg_get_entities().', 1.7);
+
+ // rewrite owner_guid to container_guid to emulate old functionality
+ if ($owner_guid != "") {
+ if (is_null($container_guid)) {
+ $container_guid = $owner_guid;
+ $owner_guid = NULL;
+ }
+ }
+
+ $options = array();
+ if ($type) {
+ if (is_array($type)) {
+ $options['types'] = $type;
+ } else {
+ $options['type'] = $type;
+ }
+ }
+
+ if ($subtype) {
+ if (is_array($subtype)) {
+ $options['subtypes'] = $subtype;
+ } else {
+ $options['subtype'] = $subtype;
+ }
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($order_by) {
+ $options['order_by'] = $order_by;
+ }
+
+ // need to pass 0 for all option
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ if ($site_guid) {
+ $options['site_guids'] = $site_guid;
+ }
+
+ if ($container_guid) {
+ $options['container_guids'] = $container_guid;
+ }
+
+ if ($timeupper) {
+ $options['created_time_upper'] = $timeupper;
+ }
+
+ if ($timelower) {
+ $options['created_time_lower'] = $timelower;
+ }
+
+ $r = elgg_get_entities($options);
+ return $r;
+}
+
+/**
+ * Delete multiple entities that match a given query.
+ * This function iterates through and calls delete_entity on
+ * each one, this is somewhat inefficient but lets
+ * the 'delete' event be called for each entity.
+ *
+ * @deprecated 1.7. This is a dangerous function as it defaults to deleting everything.
+ *
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ *
+ * @return false
+ */
+function delete_entities($type = "", $subtype = "", $owner_guid = 0) {
+ elgg_deprecated_notice('delete_entities() was deprecated because no one should use it.', 1.7);
+ return false;
+}
+
+/**
+ * Lists entities.
+ *
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param bool $fullview Show entity full views
+ * @param bool $listtypetoggle Show list type toggle
+ * @param bool $allowedtypes A string of the allowed types
+ *
+ * @return string
+ * @deprecated 1.7. Use elgg_list_registered_entities().
+ */
+function list_registered_entities($owner_guid = 0, $limit = 10, $fullview = true,
+$listtypetoggle = false, $allowedtypes = true) {
+
+ elgg_deprecated_notice('list_registered_entities() was deprecated by elgg_list_registered_entities().', 1.7);
+
+ $options = array();
+
+ // don't want to send anything if not being used.
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($allowedtypes) {
+ $options['allowed_types'] = $allowedtypes;
+ }
+
+ // need to send because might be BOOL
+ $options['full_view'] = $fullview;
+ $options['list_type_toggle'] = $listtypetoggle;
+
+ $options['offset'] = get_input('offset', 0);
+
+ return elgg_list_registered_entities($options);
+}
+
+/**
+ * Lists entities
+ *
+ * @deprecated 1.7. Use elgg_list_entities().
+ *
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param bool $fullview Display entity full views?
+ * @param bool $listtypetoggle Allow switching to gallery mode?
+ * @param bool $pagination Show pagination?
+ *
+ * @return string
+ */
+function list_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true,
+$listtypetoggle = false, $pagination = true) {
+
+ elgg_deprecated_notice('list_entities() was deprecated by elgg_list_entities()!', 1.7);
+
+ $options = array();
+
+ // rewrite owner_guid to container_guid to emulate old functionality
+ if ($owner_guid) {
+ $options['container_guids'] = $owner_guid;
+ }
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($offset = sanitise_int(get_input('offset', null))) {
+ $options['offset'] = $offset;
+ }
+
+ $options['full_view'] = $fullview;
+ $options['list_type_toggle'] = $listtypetoggle;
+ $options['pagination'] = $pagination;
+
+ return elgg_list_entities($options);
+}
+
+/**
+ * Searches for a group based on a complete or partial name or description
+ *
+ * @param string $criteria The partial or full name or description
+ * @param int $limit Limit of the search.
+ * @param int $offset Offset.
+ * @param string $order_by The order.
+ * @param boolean $count Whether to return the count of results or just the results.
+ *
+ * @return mixed
+ * @deprecated 1.7
+ */
+function search_for_group($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) {
+ elgg_deprecated_notice('search_for_group() was deprecated by new search plugin.', 1.7);
+ global $CONFIG;
+
+ $criteria = sanitise_string($criteria);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $order_by = sanitise_string($order_by);
+
+ $access = get_access_sql_suffix("e");
+
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+
+ if ($count) {
+ $query = "SELECT count(e.guid) as total ";
+ } else {
+ $query = "SELECT e.* ";
+ }
+ $query .= "from {$CONFIG->dbprefix}entities e"
+ . " JOIN {$CONFIG->dbprefix}groups_entity g on e.guid=g.guid where ";
+
+ $query .= "(g.name like \"%{$criteria}%\" or g.description like \"%{$criteria}%\")";
+ $query .= " and $access";
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * Returns a formatted list of groups suitable for injecting into search.
+ *
+ * @deprecated 1.7
+ *
+ * @param string $hook Hook name
+ * @param string $user User
+ * @param mixed $returnvalue Previous hook's return value
+ * @param string $tag Tag to search on
+ *
+ * @return string
+ */
+function search_list_groups_by_name($hook, $user, $returnvalue, $tag) {
+ elgg_deprecated_notice('search_list_groups_by_name() was deprecated by new search plugin', 1.7);
+ // Change this to set the number of groups that display on the search page
+ $threshold = 4;
+
+ $object = get_input('object');
+
+ if (!get_input('offset') && (empty($object) || $object == 'group')) {
+ if ($groups = search_for_group($tag, $threshold)) {
+ $countgroups = search_for_group($tag, 0, 0, "", true);
+
+ $return = elgg_view('group/search/startblurb', array('count' => $countgroups, 'tag' => $tag));
+ foreach ($groups as $group) {
+ $return .= elgg_view_entity($group);
+ }
+ $vars = array('count' => $countgroups, 'threshold' => $threshold, 'tag' => $tag);
+ $return .= elgg_view('group/search/finishblurb', $vars);
+ return $return;
+ }
+ }
+}
+
+/**
+ * Displays a list of group objects that have been searched for.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param string $tag Search criteria
+ * @param int $limit The number of entities to display on a page
+ *
+ * @return string The list in a form suitable to display
+ * @deprecated 1.7
+ */
+function list_group_search($tag, $limit = 10) {
+ elgg_deprecated_notice('list_group_search() was deprecated by new search plugin.', 1.7);
+ $offset = (int) get_input('offset');
+ $limit = (int) $limit;
+ $count = (int) search_for_group($tag, 10, 0, '', true);
+ $entities = search_for_group($tag, $limit, $offset);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, false);
+
+}
+
+/**
+ * Return a list of entities based on the given search criteria.
+ *
+ * @deprecated 1.7 use elgg_get_entities_from_metadata().
+ *
+ * @param mixed $meta_name Metadat name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site GUID. 0 for current, -1 for any.
+ * @param bool $count Return a count instead of entities
+ * @param bool $case_sensitive Metadata names case sensitivity
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ */
+function get_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "",
+$entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "",
+$site_guid = 0, $count = FALSE, $case_sensitive = TRUE) {
+
+ elgg_deprecated_notice('get_entities_from_metadata() was deprecated by elgg_get_entities_from_metadata()!', 1.7);
+
+ $options = array();
+
+ $options['metadata_names'] = $meta_name;
+
+ if ($meta_value) {
+ $options['metadata_values'] = $meta_value;
+ }
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ // need to be able to pass false
+ $options['metadata_case_sensitive'] = $case_sensitive;
+
+ return elgg_get_entities_from_metadata($options);
+}
+
+/**
+ * Return entities from metadata
+ *
+ * @deprecated 1.7. Use elgg_get_entities_from_metadata().
+ *
+ * @param mixed $meta_array Metadata name
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site GUID. 0 for current, -1 for any.
+ * @param bool $count Return a count instead of entities
+ * @param bool $meta_array_operator Operator for metadata values
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ */
+function get_entities_from_metadata_multi($meta_array, $entity_type = "", $entity_subtype = "",
+$owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0,
+$count = false, $meta_array_operator = 'and') {
+
+ elgg_deprecated_notice('get_entities_from_metadata_multi() was deprecated by elgg_get_entities_from_metadata()!', 1.7);
+
+ if (!is_array($meta_array) || sizeof($meta_array) == 0) {
+ return false;
+ }
+
+ $options = array();
+
+ $options['metadata_name_value_pairs'] = $meta_array;
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ $options['metadata_name_value_pairs_operator'] = $meta_array_operator;
+
+ return elgg_get_entities_from_metadata($options);
+}
+
+/**
+ * Returns a menu item for use in the children section of add_menu()
+ * This is not currently used in the Elgg core.
+ *
+ * @param string $menu_name The name of the menu item
+ * @param string $menu_url Its URL
+ *
+ * @return stdClass|false Depending on success
+ * @deprecated 1.7
+ */
+function menu_item($menu_name, $menu_url) {
+ elgg_deprecated_notice('menu_item() is deprecated by add_submenu_item', 1.7);
+ return make_register_object($menu_name, $menu_url);
+}
+
+/**
+ * Searches for an object based on a complete or partial title
+ * or description using full text searching.
+ *
+ * IMPORTANT NOTE: With MySQL's default setup:
+ * 1) $criteria must be 4 or more characters long
+ * 2) If $criteria matches greater than 50% of results NO RESULTS ARE RETURNED!
+ *
+ * @param string $criteria The partial or full name or username.
+ * @param int $limit Limit of the search.
+ * @param int $offset Offset.
+ * @param string $order_by The order.
+ * @param boolean $count Whether to return the count of results or just the results.
+ *
+ * @return int|false
+ * @deprecated 1.7
+ */
+function search_for_object($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) {
+ elgg_deprecated_notice('search_for_object() was deprecated by new search plugin.', 1.7);
+ global $CONFIG;
+
+ $criteria = sanitise_string($criteria);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $order_by = sanitise_string($order_by);
+ $container_guid = (int)$container_guid;
+
+ $access = get_access_sql_suffix("e");
+
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+
+ if ($count) {
+ $query = "SELECT count(e.guid) as total ";
+ } else {
+ $query = "SELECT e.* ";
+ }
+ $query .= "from {$CONFIG->dbprefix}entities e
+ join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid
+ where match(o.title,o.description) against ('$criteria') and $access";
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * Returns a formatted list of objects suitable for injecting into search.
+ *
+ * @deprecated 1.7
+ *
+ * @param sting $hook Hook
+ * @param string $user user
+ * @param mixed $returnvalue Previous return value
+ * @param mixed $tag Search term
+ *
+ * @return array
+ */
+function search_list_objects_by_name($hook, $user, $returnvalue, $tag) {
+ elgg_deprecated_notice('search_list_objects_by_name was deprecated by new search plugin.', 1.7);
+
+ // Change this to set the number of users that display on the search page
+ $threshold = 4;
+
+ $object = get_input('object');
+
+ if (!get_input('offset') && (empty($object) || $object == 'user')) {
+ if ($users = search_for_user($tag, $threshold)) {
+ $countusers = search_for_user($tag, 0, 0, "", true);
+
+ $return = elgg_view('user/search/startblurb', array('count' => $countusers, 'tag' => $tag));
+ foreach ($users as $user) {
+ $return .= elgg_view_entity($user);
+ }
+ $return .= elgg_view('user/search/finishblurb',
+ array('count' => $countusers, 'threshold' => $threshold, 'tag' => $tag));
+
+ return $return;
+
+ }
+ }
+}
+
+/**
+ * Return entities from relationships
+ *
+ * @deprecated 1.7 Use elgg_get_entities_from_relationship()
+ *
+ * @param string $relationship The relationship type
+ * @param int $relationship_guid The GUID of the relationship owner
+ * @param bool $inverse_relationship Invert relationship?
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Entity owner GUID
+ * @param string $order_by Order by clause
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param bool $count Return a count instead of entities?
+ * @param int $site_guid Site GUID
+ *
+ * @return mixed
+ */
+function get_entities_from_relationship($relationship, $relationship_guid,
+$inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+
+ elgg_deprecated_notice('get_entities_from_relationship() was deprecated by elgg_get_entities_from_relationship()!', 1.7);
+
+ $options = array();
+
+ $options['relationship'] = $relationship;
+ $options['relationship_guid'] = $relationship_guid;
+ $options['inverse_relationship'] = $inverse_relationship;
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_relationship($options);
+}
+
+/**
+ * Searches for a site based on a complete or partial name
+ * or description or url using full text searching.
+ *
+ * IMPORTANT NOTE: With MySQL's default setup:
+ * 1) $criteria must be 4 or more characters long
+ * 2) If $criteria matches greater than 50% of results NO RESULTS ARE RETURNED!
+ *
+ * @param string $criteria The partial or full name or username.
+ * @param int $limit Limit of the search.
+ * @param int $offset Offset.
+ * @param string $order_by The order.
+ * @param boolean $count Whether to return the count of results or just the results.
+ *
+ * @return mixed
+ * @deprecated 1.7
+ */
+function search_for_site($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) {
+ elgg_deprecated_notice('search_for_site() was deprecated by new search plugin.', 1.7);
+ global $CONFIG;
+
+ $criteria = sanitise_string($criteria);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $order_by = sanitise_string($order_by);
+
+ $access = get_access_sql_suffix("e");
+
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+
+ if ($count) {
+ $query = "SELECT count(e.guid) as total ";
+ } else {
+ $query = "SELECT e.* ";
+ }
+ $query .= "from {$CONFIG->dbprefix}entities e
+ join {$CONFIG->dbprefix}sites_entity s on e.guid=s.guid
+ where match(s.name, s.description, s.url) against ('$criteria') and $access";
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * Searches for a user based on a complete or partial name or username.
+ *
+ * @param string $criteria The partial or full name or username.
+ * @param int $limit Limit of the search.
+ * @param int $offset Offset.
+ * @param string $order_by The order.
+ * @param boolean $count Whether to return the count of results or just the results.
+ *
+ * @return mixed
+ * @deprecated 1.7
+ */
+function search_for_user($criteria, $limit = 10, $offset = 0, $order_by = "", $count = false) {
+ elgg_deprecated_notice('search_for_user() was deprecated by new search.', 1.7);
+ global $CONFIG;
+
+ $criteria = sanitise_string($criteria);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $order_by = sanitise_string($order_by);
+
+ $access = get_access_sql_suffix("e");
+
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+
+ if ($count) {
+ $query = "SELECT count(e.guid) as total ";
+ } else {
+ $query = "SELECT e.* ";
+ }
+ $query .= "from {$CONFIG->dbprefix}entities e
+ join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid where ";
+
+ $query .= "(u.name like \"%{$criteria}%\" or u.username like \"%{$criteria}%\")";
+ $query .= " and $access";
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit";
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * Displays a list of user objects that have been searched for.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param string $tag Search criteria
+ * @param int $limit The number of entities to display on a page
+ *
+ * @return string The list in a form suitable to display
+ *
+ * @deprecated 1.7
+ */
+function list_user_search($tag, $limit = 10) {
+ elgg_deprecated_notice('list_user_search() deprecated by new search', 1.7);
+ $offset = (int) get_input('offset');
+ $limit = (int) $limit;
+ $count = (int) search_for_user($tag, 10, 0, '', true);
+ $entities = search_for_user($tag, $limit, $offset);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, false);
+}
+
+/**
+ * Returns a formatted list of users suitable for injecting into search.
+ *
+ * @deprecated 1.7
+ *
+ * @param string $hook Hook name
+ * @param string $user User?
+ * @param mixed $returnvalue Previous hook's return value
+ * @param mixed $tag Tag to search against
+ *
+ * @return void
+ */
+function search_list_users_by_name($hook, $user, $returnvalue, $tag) {
+ elgg_deprecated_notice('search_list_users_by_name() was deprecated by new search', 1.7);
+ // Change this to set the number of users that display on the search page
+ $threshold = 4;
+
+ $object = get_input('object');
+
+ if (!get_input('offset') && (empty($object) || $object == 'user')) {
+ if ($users = search_for_user($tag, $threshold)) {
+ $countusers = search_for_user($tag, 0, 0, "", true);
+
+ $return = elgg_view('user/search/startblurb', array('count' => $countusers, 'tag' => $tag));
+ foreach ($users as $user) {
+ $return .= elgg_view_entity($user);
+ }
+
+ $vars = array('count' => $countusers, 'threshold' => $threshold, 'tag' => $tag);
+ $return .= elgg_view('user/search/finishblurb', $vars);
+ return $return;
+
+ }
+ }
+}
+
+/**
+ * Extend a view
+ *
+ * @deprecated 1.7. Use elgg_extend_view().
+ *
+ * @param string $view The view to extend.
+ * @param string $view_name This view is added to $view
+ * @param int $priority The priority, from 0 to 1000,
+ * to add at (lowest numbers displayed first)
+ * @param string $viewtype Not used
+ *
+ * @return void
+ */
+function extend_view($view, $view_name, $priority = 501, $viewtype = '') {
+ elgg_deprecated_notice('extend_view() was deprecated by elgg_extend_view()!', 1.7);
+ elgg_extend_view($view, $view_name, $priority, $viewtype);
+}
+
+/**
+ * Get views in a dir
+ *
+ * @deprecated 1.7. Use elgg_get_views().
+ *
+ * @param string $dir Dir
+ * @param string $base Base view
+ *
+ * @return array
+ */
+function get_views($dir, $base) {
+ elgg_deprecated_notice('get_views() was deprecated by elgg_get_views()!', 1.7);
+ elgg_get_views($dir, $base);
+}
+
+/**
+ * Constructs and returns a register object.
+ *
+ * @param string $register_name The name of the register
+ * @param mixed $register_value The value of the register
+ * @param array $children_array Optionally, an array of children
+ *
+ * @return false|stdClass Depending on success
+ * @deprecated 1.7 Use {@link add_submenu_item()}
+ */
+function make_register_object($register_name, $register_value, $children_array = array()) {
+ elgg_deprecated_notice('make_register_object() is deprecated by add_submenu_item()', 1.7);
+ if (empty($register_name) || empty($register_value)) {
+ return false;
+ }
+
+ $register = new stdClass;
+ $register->name = $register_name;
+ $register->value = $register_value;
+ $register->children = $children_array;
+
+ return $register;
+}
+
+/**
+ * THIS FUNCTION IS DEPRECATED.
+ *
+ * Delete a object's extra data.
+ *
+ * @todo - this should be removed - was deprecated in 1.5 or earlier
+ *
+ * @param int $guid GUID
+ *
+ * @return 1
+ */
+function delete_object_entity($guid) {
+ system_message(elgg_echo('deprecatedfunction', array('delete_user_entity')));
+
+ return 1; // Always return that we have deleted one row in order to not break existing code.
+}
+
+/**
+ * THIS FUNCTION IS DEPRECATED.
+ *
+ * Delete a user's extra data.
+ *
+ * @todo remove
+ *
+ * @param int $guid User GUID
+ *
+ * @return 1
+ */
+function delete_user_entity($guid) {
+ system_message(elgg_echo('deprecatedfunction', array('delete_user_entity')));
+
+ return 1; // Always return that we have deleted one row in order to not break existing code.
+} \ No newline at end of file
diff --git a/engine/lib/deprecated-1.8.php b/engine/lib/deprecated-1.8.php
new file mode 100644
index 000000000..4b9d41543
--- /dev/null
+++ b/engine/lib/deprecated-1.8.php
@@ -0,0 +1,4774 @@
+<?php
+/**
+ * ***************************************************************************
+ * NOTE: If this is ever removed from Elgg, sites lose the ability to upgrade
+ * from 1.7.x and earlier to the latest version of Elgg without upgrading to
+ * 1.8 first.
+ * ***************************************************************************
+ *
+ * Upgrade the database schema in an ordered sequence.
+ *
+ * Executes all upgrade files in elgg/engine/schema/upgrades/ in sequential order.
+ * Upgrade files must be in the standard Elgg release format of YYYYMMDDII.sql
+ * where II is an incrementor starting from 01.
+ *
+ * Files that are < $version will be ignored.
+ *
+ * @warning Plugin authors should not call this function directly.
+ *
+ * @param int $version The version you are upgrading from in the format YYYYMMDDII.
+ * @param string $fromdir Optional directory to load upgrades from. default: engine/schema/upgrades/
+ * @param bool $quiet If true, suppress all error messages. Only use for the upgrade from <=1.6.
+ *
+ * @return int The number of upgrades run.
+ * @see upgrade.php
+ * @see version.php
+ * @deprecated 1.8 Use PHP upgrades for sql changes.
+ */
+function db_upgrade($version, $fromdir = "", $quiet = FALSE) {
+ global $CONFIG;
+
+ elgg_deprecated_notice('db_upgrade() is deprecated by using PHP upgrades.', 1.8);
+
+ $version = (int) $version;
+
+ if (!$fromdir) {
+ $fromdir = $CONFIG->path . 'engine/schema/upgrades/';
+ }
+
+ $i = 0;
+
+ if ($handle = opendir($fromdir)) {
+ $sqlupgrades = array();
+
+ while ($sqlfile = readdir($handle)) {
+ if (!is_dir($fromdir . $sqlfile)) {
+ if (preg_match('/^([0-9]{10})\.(sql)$/', $sqlfile, $matches)) {
+ $sql_version = (int) $matches[1];
+ if ($sql_version > $version) {
+ $sqlupgrades[] = $sqlfile;
+ }
+ }
+ }
+ }
+
+ asort($sqlupgrades);
+
+ if (sizeof($sqlupgrades) > 0) {
+ foreach ($sqlupgrades as $sqlfile) {
+
+ // hide all errors.
+ if ($quiet) {
+ try {
+ run_sql_script($fromdir . $sqlfile);
+ } catch (DatabaseException $e) {
+ error_log($e->getmessage());
+ }
+ } else {
+ run_sql_script($fromdir . $sqlfile);
+ }
+ $i++;
+ }
+ }
+ }
+
+ return $i;
+}
+
+/**
+ * Lists entities from an access collection
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_access_id()
+ *
+ * @return str
+ */
+function list_entities_from_access_id($access_id, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = true, $pagination = true) {
+
+ elgg_deprecated_notice("All list_entities* functions were deprecated in 1.8. Use elgg_list_entities* instead.", 1.8);
+
+ echo elgg_list_entities_from_access_id(array('access_id' => $access_id,
+ 'types' => $entity_type, 'subtypes' => $entity_subtype, 'owner_guids' => $owner_guid,
+ 'limit' => $limit, 'full_view' => $fullview, 'list_type_toggle' => $listtypetoggle,
+ 'pagination' => $pagination,));
+}
+
+/**
+ * Registers a particular action in memory
+ *
+ * @deprecated 1.8 Use {@link elgg_register_action()} instead
+ *
+ * @param string $action The name of the action (eg "register", "account/settings/save")
+ * @param boolean $public Can this action be accessed by people not logged into the system?
+ * @param string $filename Optionally, the filename where this action is located
+ * @param boolean $admin_only Whether this action is only available to admin users.
+ */
+function register_action($action, $public = false, $filename = "", $admin_only = false) {
+ elgg_deprecated_notice("register_action() was deprecated by elgg_register_action()", 1.8);
+
+ if ($admin_only) {
+ $access = 'admin';
+ } elseif ($public) {
+ $access = 'public';
+ } else {
+ $access = 'logged_in';
+ }
+
+ return elgg_register_action($action, $filename, $access);
+}
+
+/**
+ * Register an admin page with the admin panel.
+ * This function extends the view "admin/main" with the provided view.
+ * This view should provide a description and either a control or a link to.
+ *
+ * @deprecated 1.8 Extend admin views manually
+ *
+ * Usage:
+ * - To add a control to the main admin panel then extend admin/main
+ * - To add a control to a new page create a page which renders a view admin/subpage
+ * (where subpage is your new page -
+ * nb. some pages already exist that you can extend), extend the main view to point to it,
+ * and add controls to your new view.
+ *
+ * At the moment this is essentially a wrapper around elgg_extend_view().
+ *
+ * @param string $new_admin_view The view associated with the control you're adding
+ * @param string $view The view to extend, by default this is 'admin/main'.
+ * @param int $priority Optional priority to govern the appearance in the list.
+ *
+ * @return void
+ */
+function extend_elgg_admin_page($new_admin_view, $view = 'admin/main', $priority = 500) {
+ elgg_deprecated_notice('extend_elgg_admin_page() does nothing. Extend admin views manually.', 1.8);
+}
+
+/**
+ * Get entities ordered by a mathematical calculation
+ *
+ * @deprecated 1.8 Use elgg_get_entities_from_annotation_calculation()
+ *
+ * @param string $sum What sort of calculation to perform
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $mdname Metadata name
+ * @param string $mdvalue Metadata value
+ * @param int $owner_guid GUID of owner of annotation
+ * @param int $limit Limit of results
+ * @param int $offset Offset of results
+ * @param string $orderdir Order of results
+ * @param bool $count Return count or entities
+ *
+ * @return mixed
+ */
+function get_entities_from_annotations_calculate_x($sum = "sum", $entity_type = "", $entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $owner_guid = 0, $limit = 10, $offset = 0, $orderdir = 'desc', $count = false) {
+
+ $msg = 'get_entities_from_annotations_calculate_x() is deprecated by elgg_get_entities_from_annotation_calculation().';
+
+ elgg_deprecated_notice($msg, 1.8);
+
+ $options = array();
+
+ $options['calculation'] = $sum;
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ $options['annotation_names'] = $name;
+
+ if ($mdname) {
+ $options['metadata_names'] = $mdname;
+ }
+
+ if ($mdvalue) {
+ $options['metadata_values'] = $mdvalue;
+ }
+
+ // original function rewrote this to container guid.
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['container_guids'] = $owner_guid;
+ } else {
+ $options['container_guid'] = $owner_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+
+ $options['order_by'] = "annotation_calculation $orderdir";
+
+ $options['count'] = $count;
+
+ return elgg_get_entities_from_annotation_calculation($options);
+}
+
+/**
+ * Returns entities ordered by the sum of an annotation
+ *
+ * @warning This is function uses sum instead of count. THIS IS SLOW. See #3366.
+ * This should be used when you have annotations with different values and you
+ * want a list of entities ordered by the sum of all of those values.
+ * If you want a list of entities ordered by the number of annotations on each entity,
+ * use __get_entities_from_annotations_calculate_x() and pass 'count' as the first param.
+ *
+ * @deprecated 1.8 Use elgg_get_entities_from_annotation_calculation()
+ *
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $mdname Metadata name
+ * @param string $mdvalue Metadata value
+ * @param int $owner_guid GUID of owner of annotation
+ * @param int $limit Limit of results
+ * @param int $offset Offset of results
+ * @param string $orderdir Order of results
+ * @param bool $count Return count or entities
+ *
+ * @return unknown
+ */
+function get_entities_from_annotation_count($entity_type = "", $entity_subtype = "", $name = "", $mdname = '', $mdvalue = '', $owner_guid = 0, $limit = 10, $offset = 0, $orderdir = 'desc', $count = false) {
+
+ $msg = 'get_entities_from_annotation_count() is deprecated by elgg_get_entities_from_annotation_calculation().';
+
+ elgg_deprecated_notice($msg, 1.8);
+
+ $options = array();
+
+ $options['calculation'] = 'sum';
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ $options['annotation_names'] = $name;
+
+ if ($mdname) {
+ $options['metadata_names'] = $mdname;
+ }
+
+ if ($mdvalue) {
+ $options['metadata_values'] = $mdvalue;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+
+ $options['order_by'] = "annotation_calculation $orderdir";
+
+ $options['count'] = $count;
+
+ return elgg_get_entities_from_annotation_calculation($options);
+}
+
+/**
+ * Lists entities by the totals of a particular kind of annotation
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_annotation_calculation()
+ *
+ * @param string $entity_type Type of entity.
+ * @param string $entity_subtype Subtype of entity.
+ * @param string $name Name of annotation.
+ * @param int $limit Maximum number of results to return.
+ * @param int $owner_guid Owner.
+ * @param int $group_guid Group container. Currently only supported if entity_type is object
+ * @param boolean $asc Whether to list in ascending or descending order (default: desc)
+ * @param boolean $fullview Whether to display the entities in full
+ * @param boolean $listtypetoggle Can the 'gallery' view can be displayed (default: no)
+ * @param boolean $pagination Add pagination
+ * @param string $orderdir Order desc or asc
+ *
+ * @return string Formatted entity list
+ */
+function list_entities_from_annotation_count($entity_type = "", $entity_subtype = "", $name = "", $limit = 10, $owner_guid = 0, $group_guid = 0, $asc = false, $fullview = true, $listtypetoggle = false, $pagination = true, $orderdir = 'desc') {
+
+ $msg = 'list_entities_from_annotation_count() is deprecated by elgg_list_entities_from_annotation_calculation().';
+
+ elgg_deprecated_notice($msg, 1.8);
+
+ $options = array();
+
+ $options['calculation'] = 'sum';
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ $options['annotation_names'] = $name;
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ $options['full_view'] = $fullview;
+
+ $options['list_type_toggle'] = $listtypetoggle;
+
+ $options['pagination'] = $pagination;
+
+ $options['limit'] = $limit;
+
+ $options['order_by'] = "annotation_calculation $orderdir";
+
+ return elgg_get_entities_from_annotation_calculation($options);
+}
+
+/**
+ * Adds an entry in $CONFIG[$register_name][$subregister_name].
+ *
+ * @deprecated 1.8 Use the new menu system.
+ *
+ * This is only used for the site-wide menu. See {@link add_menu()}.
+ *
+ * @param string $register_name The name of the top-level register
+ * @param string $subregister_name The name of the subregister
+ * @param mixed $subregister_value The value of the subregister
+ * @param array $children_array Optionally, an array of children
+ *
+ * @return true|false Depending on success
+ */
+function add_to_register($register_name, $subregister_name, $subregister_value, $children_array = array()) {
+ elgg_deprecated_notice("add_to_register() has been deprecated", 1.8);
+ global $CONFIG;
+
+ if (empty($register_name) || empty($subregister_name)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->registers)) {
+ $CONFIG->registers = array();
+ }
+
+ if (!isset($CONFIG->registers[$register_name])) {
+ $CONFIG->registers[$register_name] = array();
+ }
+
+ $subregister = new stdClass;
+ $subregister->name = $subregister_name;
+ $subregister->value = $subregister_value;
+
+ if (is_array($children_array)) {
+ $subregister->children = $children_array;
+ }
+
+ $CONFIG->registers[$register_name][$subregister_name] = $subregister;
+ return true;
+}
+
+/**
+ * Removes a register entry from $CONFIG[register_name][subregister_name]
+ *
+ * @deprecated 1.8 Use the new menu system.
+ *
+ * This is used to by {@link remove_menu()} to remove site-wide menu items.
+ *
+ * @param string $register_name The name of the top-level register
+ * @param string $subregister_name The name of the subregister
+ *
+ * @return true|false Depending on success
+ * @since 1.7.0
+ */
+function remove_from_register($register_name, $subregister_name) {
+ elgg_deprecated_notice("remove_from_register() has been deprecated", 1.8);
+ global $CONFIG;
+
+ if (empty($register_name) || empty($subregister_name)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->registers)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->registers[$register_name])) {
+ return false;
+ }
+
+ if (isset($CONFIG->registers[$register_name][$subregister_name])) {
+ unset($CONFIG->registers[$register_name][$subregister_name]);
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * If it exists, returns a particular register as an array
+ *
+ * @deprecated 1.8 Use the new menu system
+ *
+ * @param string $register_name The name of the register
+ *
+ * @return array|false Depending on success
+ */
+function get_register($register_name) {
+ elgg_deprecated_notice("get_register() has been deprecated", 1.8);
+ global $CONFIG;
+
+ if ($register_name == 'menu') {
+ // backward compatible code for site menu
+ $menu = $CONFIG->menus['site'];
+ $builder = new ElggMenuBuilder($menu);
+ $menu_items = $builder->getMenu('text');
+ $menu_items = $menu_items['default'];
+
+ $menu = array();
+ foreach ($menu_items as $item) {
+ $subregister = new stdClass;
+ $subregister->name = $item->getText();
+ $subregister->value = $item->getHref();
+ $menu[$subregister->name] = $subregister;
+ }
+ return $menu;
+ }
+
+ if (isset($CONFIG->registers[$register_name])) {
+ return $CONFIG->registers[$register_name];
+ }
+
+ return false;
+}
+
+/**
+ * Deprecated events core function. Code divided between elgg_register_event_handler()
+ * and trigger_elgg_event().
+ *
+ * @deprecated 1.8 Use explicit register/trigger event functions
+ *
+ * @param string $event The type of event (eg 'init', 'update', 'delete')
+ * @param string $object_type The type of object (eg 'system', 'blog', 'user')
+ * @param string $function The name of the function that will handle the event
+ * @param int $priority Priority to call handler. Lower numbers called first (default 500)
+ * @param boolean $call Set to true to call the event rather than add to it (default false)
+ * @param mixed $object Optionally, the object the event is being performed on (eg a user)
+ *
+ * @return true|false Depending on success
+ */
+function events($event = "", $object_type = "", $function = "", $priority = 500, $call = false, $object = null) {
+
+ elgg_deprecated_notice('events() has been deprecated.', 1.8);
+
+ // leaving this here just in case someone was directly calling this internal function
+ if (!$call) {
+ return elgg_register_event_handler($event, $object_type, $function, $priority);
+ } else {
+ return trigger_elgg_event($event, $object_type, $object);
+ }
+}
+
+/**
+ * Alias function for events, that registers a function to a particular kind of event
+ *
+ * @deprecated 1.8 Use elgg_register_event_handler() instead
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $function The function name
+ * @return true|false Depending on success
+ */
+function register_elgg_event_handler($event, $object_type, $callback, $priority = 500) {
+ elgg_deprecated_notice("register_elgg_event_handler() was deprecated by elgg_register_event_handler()", 1.8);
+ return elgg_register_event_handler($event, $object_type, $callback, $priority);
+}
+
+/**
+ * Unregisters a function to a particular kind of event
+ *
+ * @deprecated 1.8 Use elgg_unregister_event_handler instead
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $function The function name
+ * @since 1.7.0
+ */
+function unregister_elgg_event_handler($event, $object_type, $callback) {
+ elgg_deprecated_notice('unregister_elgg_event_handler => elgg_unregister_event_handler', 1.8);
+ elgg_unregister_event_handler($event, $object_type, $callback);
+}
+
+/**
+ * Alias function for events, that triggers a particular kind of event
+ *
+ * @deprecated 1.8 Use elgg_trigger_event() instead
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $function The function name
+ * @return true|false Depending on success
+ */
+function trigger_elgg_event($event, $object_type, $object = null) {
+ elgg_deprecated_notice('trigger_elgg_event() was deprecated by elgg_trigger_event()', 1.8);
+ return elgg_trigger_event($event, $object_type, $object);
+}
+
+/**
+ * Register a function to a plugin hook for a particular entity type, with a given priority.
+ *
+ * @deprecated 1.8 Use elgg_register_plugin_hook_handler() instead
+ *
+ * eg if you want the function "export_user" to be called when the hook "export" for "user" entities
+ * is run, use:
+ *
+ * register_plugin_hook("export", "user", "export_user");
+ *
+ * "all" is a valid value for both $hook and $entity_type. "none" is a valid value for $entity_type.
+ *
+ * The export_user function would then be defined as:
+ *
+ * function export_user($hook, $entity_type, $returnvalue, $params);
+ *
+ * Where $returnvalue is the return value returned by the last function returned by the hook, and
+ * $params is an array containing a set of parameters (or nothing).
+ *
+ * @param string $hook The name of the hook
+ * @param string $entity_type The name of the type of entity (eg "user", "object" etc)
+ * @param string $function The name of a valid function to be run
+ * @param string $priority The priority - 0 is first, 1000 last, default is 500
+ * @return true|false Depending on success
+ */
+function register_plugin_hook($hook, $type, $callback, $priority = 500) {
+ elgg_deprecated_notice("register_plugin_hook() was deprecated by elgg_register_plugin_hook_handler()", 1.8);
+ return elgg_register_plugin_hook_handler($hook, $type, $callback, $priority);
+}
+
+/**
+ * Unregister a function to a plugin hook for a particular entity type
+ *
+ * @deprecated 1.8 Use elgg_unregister_plugin_hook_handler() instead
+ *
+ * @param string $hook The name of the hook
+ * @param string $entity_type The name of the type of entity (eg "user", "object" etc)
+ * @param string $function The name of a valid function to be run
+ * @since 1.7.0
+ */
+function unregister_plugin_hook($hook, $entity_type, $callback) {
+ elgg_deprecated_notice("unregister_plugin_hook() was deprecated by elgg_unregister_plugin_hook_handler()", 1.8);
+ elgg_unregister_plugin_hook_handler($hook, $entity_type, $callback);
+}
+
+/**
+ * Triggers a plugin hook, with various parameters as an array. For example, to provide
+ * a 'foo' hook that concerns an entity of type 'bar', with a parameter called 'param1'
+ * with value 'value1', that by default returns true, you'd call:
+ *
+ * @deprecated 1.8 Use elgg_trigger_plugin_hook() instead
+ *
+ * trigger_plugin_hook('foo', 'bar', array('param1' => 'value1'), true);
+ *
+ * @see register_plugin_hook
+ * @param string $hook The name of the hook to trigger
+ * @param string $entity_type The name of the entity type to trigger it for (or "all", or "none")
+ * @param array $params Any parameters. It's good practice to name the keys, i.e. by using array('name' => 'value', 'name2' => 'value2')
+ * @param mixed $returnvalue An initial return value
+ * @return mixed|null The cumulative return value for the plugin hook functions
+ */
+function trigger_plugin_hook($hook, $type, $params = null, $returnvalue = null) {
+ elgg_deprecated_notice("trigger_plugin_hook() was deprecated by elgg_trigger_plugin_hook()", 1.8);
+ return elgg_trigger_plugin_hook($hook, $type, $params, $returnvalue);
+}
+
+/**
+ * Checks if code is being called from a certain function.
+ *
+ * To use, call this function with the function name (and optional
+ * file location) that it has to be called from, it will either
+ * return true or false.
+ *
+ * e.g.
+ *
+ * function my_secure_function()
+ * {
+ * if (!call_gatekeeper("my_call_function"))
+ * return false;
+ *
+ * ... do secure stuff ...
+ * }
+ *
+ * function my_call_function()
+ * {
+ * // will work
+ * my_secure_function();
+ * }
+ *
+ * function bad_function()
+ * {
+ * // Will not work
+ * my_secure_function();
+ * }
+ *
+ * @param mixed $function The function that this function must have in its call stack,
+ * to test against a method pass an array containing a class and
+ * method name.
+ * @param string $file Optional file that the function must reside in.
+ *
+ * @return bool
+ *
+ * @deprecated 1.8 A neat but pointless function
+ */
+function call_gatekeeper($function, $file = "") {
+ elgg_deprecated_notice("call_gatekeeper() is neat but pointless", 1.8);
+ // Sanity check
+ if (!$function) {
+ return false;
+ }
+
+ // Check against call stack to see if this is being called from the correct location
+ $callstack = debug_backtrace();
+ $stack_element = false;
+
+ foreach ($callstack as $call) {
+ if (is_array($function)) {
+ if ((strcmp($call['class'], $function[0]) == 0) && (strcmp($call['function'], $function[1]) == 0)) {
+ $stack_element = $call;
+ }
+ } else {
+ if (strcmp($call['function'], $function) == 0) {
+ $stack_element = $call;
+ }
+ }
+ }
+
+ if (!$stack_element) {
+ return false;
+ }
+
+ // If file then check that this it is being called from this function
+ if ($file) {
+ $mirror = null;
+
+ if (is_array($function)) {
+ $mirror = new ReflectionMethod($function[0], $function[1]);
+ } else {
+ $mirror = new ReflectionFunction($function);
+ }
+
+ if ((!$mirror) || (strcmp($file, $mirror->getFileName()) != 0)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/**
+ * This function checks to see if it is being called at somepoint by a function defined somewhere
+ * on a given path (optionally including subdirectories).
+ *
+ * This function is similar to call_gatekeeper() but returns true if it is being called
+ * by a method or function which has been defined on a given path or by a specified file.
+ *
+ * @param string $path The full path and filename that this function must have
+ * in its call stack If a partial path is given and
+ * $include_subdirs is true, then the function will return
+ * true if called by any function in or below the specified path.
+ * @param bool $include_subdirs Are subdirectories of the path ok, or must you specify an
+ * absolute path and filename.
+ * @param bool $strict_mode If true then the calling method or function must be directly
+ * called by something on $path, if false the whole call stack is
+ * searched.
+ *
+ * @return void
+ *
+ * @deprecated 1.8 A neat but pointless function
+ */
+function callpath_gatekeeper($path, $include_subdirs = true, $strict_mode = false) {
+ elgg_deprecated_notice("callpath_gatekeeper() is neat but pointless", 1.8);
+
+ global $CONFIG;
+
+ $path = sanitise_string($path);
+
+ if ($path) {
+ $callstack = debug_backtrace();
+
+ foreach ($callstack as $call) {
+ $call['file'] = str_replace("\\", "/", $call['file']);
+
+ if ($include_subdirs) {
+ if (strpos($call['file'], $path) === 0) {
+
+ if ($strict_mode) {
+ $callstack[1]['file'] = str_replace("\\", "/", $callstack[1]['file']);
+ if ($callstack[1] === $call) {
+ return true;
+ }
+ } else {
+ return true;
+ }
+ }
+ } else {
+ if (strcmp($path, $call['file']) == 0) {
+ if ($strict_mode) {
+ if ($callstack[1] === $call) {
+ return true;
+ }
+ } else {
+ return true;
+ }
+ }
+ }
+
+ }
+ return false;
+ }
+
+ if (isset($CONFIG->debug)) {
+ system_message("Gatekeeper'd function called from {$callstack[1]['file']}:" . "{$callstack[1]['line']}\n\nStack trace:\n\n" . print_r($callstack, true));
+ }
+
+ return false;
+}
+
+/**
+ * Returns SQL where clause for owner and containers.
+ *
+ * @deprecated 1.8 Use elgg_get_guid_based_where_sql();
+ *
+ * @param string $table Entity table prefix as defined in SELECT...FROM entities $table
+ * @param NULL|array $owner_guids Owner GUIDs
+ *
+ * @return FALSE|str
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_owner_where_sql($table, $owner_guids) {
+ elgg_deprecated_notice('elgg_get_entity_owner_where_sql() is deprecated by elgg_get_guid_based_where_sql().', 1.8);
+
+ return elgg_get_guid_based_where_sql("{$table}.owner_guid", $owner_guids);
+}
+
+/**
+ * Returns SQL where clause for containers.
+ *
+ * @deprecated 1.8 Use elgg_get_guid_based_where_sql();
+ *
+ * @param string $table Entity table prefix as defined in
+ * SELECT...FROM entities $table
+ * @param NULL|array $container_guids Array of container guids
+ *
+ * @return FALSE|string
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_container_where_sql($table, $container_guids) {
+ elgg_deprecated_notice('elgg_get_entity_container_where_sql() is deprecated by elgg_get_guid_based_where_sql().', 1.8);
+
+ return elgg_get_guid_based_where_sql("{$table}.container_guid", $container_guids);
+}
+
+/**
+ * Returns SQL where clause for site entities
+ *
+ * @deprecated 1.8 Use elgg_get_guid_based_where_sql()
+ *
+ * @param string $table Entity table prefix as defined in SELECT...FROM entities $table
+ * @param NULL|array $site_guids Array of site guids
+ *
+ * @return FALSE|string
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_site_where_sql($table, $site_guids) {
+ elgg_deprecated_notice('elgg_get_entity_site_where_sql() is deprecated by elgg_get_guid_based_where_sql().', 1.8);
+
+ return elgg_get_guid_based_where_sql("{$table}.site_guid", $site_guids);
+}
+
+/**
+ * Return an array of objects in a given container.
+ *
+ * @see get_entities()
+ *
+ * @param int $group_guid The container (defaults to current page owner)
+ * @param string $subtype The subtype
+ * @param int $owner_guid Owner
+ * @param int $site_guid The site
+ * @param string $order_by Order
+ * @param int $limit Limit on number of elements to return, by default 10.
+ * @param int $offset Where to start, by default 0.
+ * @param bool $count Whether to return the entities or a count of them.
+ *
+ * @return array|false
+ * @deprecated 1.8 Use elgg_get_entities() instead
+ */
+function get_objects_in_group($group_guid, $subtype = "", $owner_guid = 0, $site_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = FALSE) {
+ elgg_deprecated_notice("get_objects_in_group was deprected in 1.8. Use elgg_get_entities() instead", 1.8);
+
+ global $CONFIG;
+
+ if ($subtype === FALSE || $subtype === null || $subtype === 0) {
+ return FALSE;
+ }
+
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $site_guid = (int)$site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ $container_guid = (int)$group_guid;
+ if ($container_guid == 0) {
+ $container_guid = elgg_get_page_owner_guid();
+ }
+
+ $where = array();
+
+ $where[] = "e.type='object'";
+
+ if (!empty($subtype)) {
+ if (!$subtype = get_subtype_id('object', $subtype)) {
+ return FALSE;
+ }
+ $where[] = "e.subtype=$subtype";
+ }
+ if ($owner_guid != "") {
+ if (!is_array($owner_guid)) {
+ $owner_guid = (int)$owner_guid;
+ $where[] = "e.container_guid = '$owner_guid'";
+ } else if (sizeof($owner_guid) > 0) {
+ // Cast every element to the owner_guid array to int
+ $owner_guid = array_map("sanitise_int", $owner_guid);
+ $owner_guid = implode(",", $owner_guid);
+ $where[] = "e.container_guid in ({$owner_guid})";
+ }
+ }
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if ($container_guid > 0) {
+ $where[] = "e.container_guid = {$container_guid}";
+ }
+
+ if (!$count) {
+ $query = "SELECT * from {$CONFIG->dbprefix}entities e" . " join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where ";
+ } else {
+ $query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e" . " join {$CONFIG->dbprefix}objects_entity o on e.guid=o.guid where ";
+ }
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix('e');
+ if (!$count) {
+ $query .= " order by $order_by";
+
+ // Add order and limit
+ if ($limit) {
+ $query .= " limit $offset, $limit";
+ }
+
+ $dt = get_data($query, "entity_row_to_elggstar");
+ return $dt;
+ } else {
+ $total = get_data_row($query);
+ return $total->total;
+ }
+}
+
+/**
+ * Lists entities that belong to a group.
+ *
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $container_guid The GUID of the containing group
+ * @param int $limit The number of entities to display per page (default: 10)
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ * @param bool $listtypetoggle Whether or not to allow gallery view (default: true)
+ * @param bool $pagination Whether to display pagination (default: true)
+ *
+ * @return string List of parsed entities
+ *
+ * @see elgg_list_entities()
+ * @deprecated 1.8 Use elgg_list_entities() instead
+ */
+function list_entities_groups($subtype = "", $owner_guid = 0, $container_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = true, $pagination = true) {
+ elgg_deprecated_notice("list_entities_groups was deprecated in 1.8. Use elgg_list_entities() instead.", 1.8);
+ $offset = (int)get_input('offset');
+ $count = get_objects_in_group($container_guid, $subtype, $owner_guid, 0, "", $limit, $offset, true);
+ $entities = get_objects_in_group($container_guid, $subtype, $owner_guid, 0, "", $limit, $offset);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $listtypetoggle, $pagination);
+}
+
+/**
+ * Get all the entities from metadata from a group.
+ *
+ * @param int $group_guid The ID of the group.
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner guid
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site GUID. 0 for current, -1 for any
+ * @param bool $count Return count instead of entities
+ *
+ * @return array|false
+ * @deprecated 1.8 Use elgg_get_entities_from_metadata()
+ */
+function get_entities_from_metadata_groups($group_guid, $meta_name, $meta_value = "", $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) {
+ elgg_deprecated_notice("get_entities_from_metadata_groups was deprecated in 1.8.", 1.8);
+ global $CONFIG;
+
+ $meta_n = get_metastring_id($meta_name);
+ $meta_v = get_metastring_id($meta_value);
+
+ $entity_type = sanitise_string($entity_type);
+ $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $site_guid = (int)$site_guid;
+ if (is_array($owner_guid)) {
+ foreach ($owner_guid as $key => $guid) {
+ $owner_guid[$key] = (int)$guid;
+ }
+ } else {
+ $owner_guid = (int)$owner_guid;
+ }
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ $container_guid = (int)$group_guid;
+ if ($container_guid == 0) {
+ $container_guid = elgg_get_page_owner_guid();
+ }
+
+ $where = array();
+
+ if ($entity_type != "") {
+ $where[] = "e.type='$entity_type'";
+ }
+ if ($entity_subtype) {
+ $where[] = "e.subtype=$entity_subtype";
+ }
+ if ($meta_name != "") {
+ $where[] = "m.name_id='$meta_n'";
+ }
+ if ($meta_value != "") {
+ $where[] = "m.value_id='$meta_v'";
+ }
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+ if ($container_guid > 0) {
+ $where[] = "e.container_guid = {$container_guid}";
+ }
+
+ if (is_array($owner_guid)) {
+ $where[] = "e.container_guid in (" . implode(",", $owner_guid) . ")";
+ } else if ($owner_guid > 0) {
+ $where[] = "e.container_guid = {$owner_guid}";
+ }
+
+ if (!$count) {
+ $query = "SELECT distinct e.* ";
+ } else {
+ $query = "SELECT count(e.guid) as total ";
+ }
+
+ $query .= "from {$CONFIG->dbprefix}entities e" . " JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid " . " JOIN {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid where";
+
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix("e");
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($row = get_data_row($query)) {
+ return $row->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * As get_entities_from_metadata_groups() but with multiple entities.
+ *
+ * @param int $group_guid The ID of the group.
+ * @param array $meta_array Array of 'name' => 'value' pairs
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site GUID. 0 for current, -1 for any
+ * @param bool $count Return count of entities instead of entities
+ *
+ * @return int|array List of ElggEntities, or the total number if count is set to false
+ * @deprecated 1.8 Use elgg_get_entities_from_metadata()
+ */
+function get_entities_from_metadata_groups_multi($group_guid, $meta_array, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0, $count = false) {
+ elgg_deprecated_notice("get_entities_from_metadata_groups_multi was deprecated in 1.8.", 1.8);
+
+ global $CONFIG;
+
+ if (!is_array($meta_array) || sizeof($meta_array) == 0) {
+ return false;
+ }
+
+ $where = array();
+
+ $mindex = 1;
+ $join = "";
+ foreach ($meta_array as $meta_name => $meta_value) {
+ $meta_n = get_metastring_id($meta_name);
+ $meta_v = get_metastring_id($meta_value);
+ $join .= " JOIN {$CONFIG->dbprefix}metadata m{$mindex} on e.guid = m{$mindex}.entity_guid" . " JOIN {$CONFIG->dbprefix}objects_entity o on e.guid = o.guid ";
+
+ if ($meta_name != "") {
+ $where[] = "m{$mindex}.name_id='$meta_n'";
+ }
+
+ if ($meta_value != "") {
+ $where[] = "m{$mindex}.value_id='$meta_v'";
+ }
+
+ $mindex++;
+ }
+
+ $entity_type = sanitise_string($entity_type);
+ $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $owner_guid = (int)$owner_guid;
+
+ $site_guid = (int)$site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ //$access = get_access_list();
+
+ if ($entity_type != "") {
+ $where[] = "e.type = '{$entity_type}'";
+ }
+
+ if ($entity_subtype) {
+ $where[] = "e.subtype = {$entity_subtype}";
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if ($owner_guid > 0) {
+ $where[] = "e.owner_guid = {$owner_guid}";
+ }
+
+ if ($container_guid > 0) {
+ $where[] = "e.container_guid = {$container_guid}";
+ }
+
+ if ($count) {
+ $query = "SELECT count(e.guid) as total ";
+ } else {
+ $query = "SELECT distinct e.* ";
+ }
+
+ $query .= " from {$CONFIG->dbprefix}entities e {$join} where";
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+ $query .= get_access_sql_suffix("e"); // Add access controls
+
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * List items within a given geographic area.
+ *
+ * @param real $lat Latitude
+ * @param real $long Longitude
+ * @param real $radius The radius
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to display per page (default: 10)
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ * @param bool $listtypetoggle Whether or not to allow gallery view
+ * @param bool $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @deprecated 1.8 Use elgg_get_entities_from_location()
+ */
+function list_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = false, $navigation = true) {
+ elgg_deprecated_notice('list_entities_in_area() was deprecated. Use elgg_list_entities_from_location()', 1.8);
+
+ $options = array();
+
+ $options['latitude'] = $lat;
+ $options['longitude'] = $long;
+ $options['distance'] = $radius;
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+
+ $options['full_view'] = $fullview;
+ $options['list_type_toggle'] = $listtypetoggle;
+ $options['pagination'] = $pagination;
+
+ return elgg_list_entities_from_location($options);
+}
+
+/**
+ * List entities in a given location
+ *
+ * @param string $location Location
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to display per page (default: 10)
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ * @param bool $listtypetoggle Whether or not to allow gallery view
+ * @param bool $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @deprecated 1.8 Use elgg_list_entities_from_location()
+ */
+function list_entities_location($location, $type = "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = false, $navigation = true) {
+ elgg_deprecated_notice('list_entities_location() was deprecated. Use elgg_list_entities_from_metadata()', 1.8);
+
+ return list_entities_from_metadata('location', $location, $type, $subtype, $owner_guid, $limit, $fullview, $listtypetoggle, $navigation);
+}
+
+/**
+ * Return entities within a given geographic area.
+ *
+ * @param float $lat Latitude
+ * @param float $long Longitude
+ * @param float $radius The radius
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count Count entities
+ * @param int $site_guid Site GUID. 0 for current, -1 for any
+ * @param int|array $container_guid Container GUID
+ *
+ * @return array A list of entities.
+ * @deprecated 1.8 Use elgg_get_entities_from_location()
+ */
+function get_entities_in_area($lat, $long, $radius, $type = "", $subtype = "", $owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = NULL) {
+ elgg_deprecated_notice('get_entities_in_area() was deprecated by elgg_get_entities_from_location()!', 1.8);
+
+ $options = array();
+
+ $options['latitude'] = $lat;
+ $options['longitude'] = $long;
+ $options['distance'] = $radius;
+
+ // set container_guid to owner_guid to emulate old functionality
+ if ($owner_guid != "") {
+ if (is_null($container_guid)) {
+ $container_guid = $owner_guid;
+ }
+ }
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($container_guid) {
+ if (is_array($container_guid)) {
+ $options['container_guids'] = $container_guid;
+ } else {
+ $options['container_guid'] = $container_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_location($options);
+}
+
+/**
+ * Return a list of entities suitable for display based on the given search criteria.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_metadata
+ *
+ * @param mixed $meta_name Metadata name to search on
+ * @param mixed $meta_value The value to match, optionally
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Number of entities to display per page
+ * @param bool $fullview WDisplay the full view (default: true)
+ * @param bool $listtypetoggle Allow users to toggle to the gallery view. Default: true
+ * @param bool $pagination Display pagination? Default: true
+ * @param bool $case_sensitive Case sensitive metadata names?
+ *
+ * @return string
+ *
+ * @return string A list of entities suitable for display
+ */
+function list_entities_from_metadata($meta_name, $meta_value = "", $entity_type = ELGG_ENTITIES_ANY_VALUE, $entity_subtype = ELGG_ENTITIES_ANY_VALUE, $owner_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = true, $pagination = true, $case_sensitive = true) {
+
+ elgg_deprecated_notice('list_entities_from_metadata() was deprecated by elgg_list_entities_from_metadata()!', 1.8);
+
+ $offset = (int)get_input('offset');
+ $limit = (int)$limit;
+ $options = array(
+ 'metadata_name' => $meta_name,
+ 'metadata_value' => $meta_value,
+ 'types' => $entity_type,
+ 'subtypes' => $entity_subtype,
+ 'limit' => $limit,
+ 'offset' => $offset,
+ 'count' => TRUE,
+ 'metadata_case_sensitive' => $case_sensitive
+ );
+
+ // previous function allowed falsy $owner_guid for anything
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ $count = elgg_get_entities_from_metadata($options);
+
+ $options['count'] = FALSE;
+ $entities = elgg_get_entities_from_metadata($options);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $listtypetoggle, $pagination);
+}
+
+/**
+ * Returns a viewable list of entities based on the given search criteria.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param array $meta_array Array of 'name' => 'value' pairs
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param bool $fullview WDisplay the full view (default: true)
+ * @param bool $listtypetoggle Allow users to toggle to the gallery view. Default: true
+ * @param bool $pagination Display pagination? Default: true
+ *
+ * @return string List of ElggEntities suitable for display
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_metadata() instead
+ */
+function list_entities_from_metadata_multi($meta_array, $entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $fullview = true, $listtypetoggle = true, $pagination = true) {
+ elgg_deprecated_notice(elgg_echo('deprecated:function', array(
+ 'list_entities_from_metadata_multi', 'elgg_get_entities_from_metadata')), 1.8);
+
+ $offset = (int)get_input('offset');
+ $limit = (int)$limit;
+ $count = get_entities_from_metadata_multi($meta_array, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", $site_guid, true);
+ $entities = get_entities_from_metadata_multi($meta_array, $entity_type, $entity_subtype, $owner_guid, $limit, $offset, "", $site_guid, false);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $listtypetoggle, $pagination);
+}
+
+/**
+ * Deprecated by elgg_register_menu_item(). Set $menu_name to 'page'.
+ *
+ * @see elgg_register_menu_item()
+ * @deprecated 1.8 Use the new menu system
+ *
+ * @param string $label The label
+ * @param string $link The link
+ * @param string $group The group to store item in
+ * @param boolean $onclick Add a confirmation when clicked?
+ * @param boolean $selected Is menu item selected
+ *
+ * @return bool
+ */
+function add_submenu_item($label, $link, $group = 'default', $onclick = false, $selected = NULL) {
+ elgg_deprecated_notice('add_submenu_item was deprecated by elgg_register_menu_item', 1.8);
+
+ // submenu items were added in the page setup hook usually by checking
+ // the context. We'll pass in the current context here, which will
+ // emulate that effect.
+ // if context == 'main' (default) it probably means they always wanted
+ // the menu item to show up everywhere.
+ $context = elgg_get_context();
+
+ if ($context == 'main') {
+ $context = 'all';
+ }
+
+ $item = array('name' => $label, 'text' => $label, 'href' => $link, 'context' => $context,
+ 'section' => $group,);
+
+ if ($selected) {
+ $item['selected'] = true;
+ }
+
+ if ($onclick) {
+ $js = "onclick=\"javascript:return confirm('" . elgg_echo('deleteconfirm') . "')\"";
+ $item['vars'] = array('js' => $js);
+ }
+
+ return elgg_register_menu_item('page', $item);
+}
+
+/**
+ * Remove an item from submenu by label
+ *
+ * @deprecated 1.8 Use the new menu system
+ * @see elgg_unregister_menu_item()
+ *
+ * @param string $label The item label
+ * @param string $group The submenu group (default "a")
+ * @return bool whether the item was removed or not
+ * @since 1.7.8
+ */
+function remove_submenu_item($label, $group = 'a') {
+ elgg_deprecated_notice('remove_submenu_item was deprecated by elgg_unregister_menu_item', 1.8);
+
+ return elgg_unregister_menu_item('page', $label);
+}
+
+/**
+ * Use elgg_view_menu(). Set $menu_name to 'owner_block'.
+ *
+ * @see elgg_view_menu()
+ * @deprecated 1.8 Use the new menu system. elgg_view_menu()
+ *
+ * @return string
+ */
+function get_submenu() {
+ elgg_deprecated_notice("get_submenu() has been deprecated by elgg_view_menu()", 1.8);
+ return elgg_view_menu('owner_block', array('entity' => $owner,
+ 'class' => 'elgg-menu-owner-block',));
+}
+
+/**
+ * Adds an item to the site-wide menu.
+ *
+ * You can obtain the menu array by calling {@link get_register('menu')}
+ *
+ * @param string $menu_name The name of the menu item
+ * @param string $menu_url The URL of the page
+ * @param array $menu_children Optionally, an array of submenu items (not used)
+ * @param string $context (not used)
+ *
+ * @return true|false Depending on success
+ * @deprecated 1.8 use elgg_register_menu_item() for the menu 'site'
+ */
+function add_menu($menu_name, $menu_url, $menu_children = array(), $context = "") {
+ elgg_deprecated_notice('add_menu() deprecated by elgg_register_menu_item()', 1.8);
+
+ return elgg_register_menu_item('site', array('name' => $menu_name, 'text' => $menu_name,
+ 'href' => $menu_url,));
+}
+
+/**
+ * Removes an item from the menu register
+ *
+ * @param string $menu_name The name of the menu item
+ *
+ * @return true|false Depending on success
+ * @deprecated 1.8 Use the new menu system
+ */
+function remove_menu($menu_name) {
+ elgg_deprecated_notice("remove_menu() deprecated by elgg_unregister_menu_item()", 1.8);
+ return elgg_unregister_menu_item('site', $menu_name);
+}
+
+/**
+ * When given a title, returns a version suitable for inclusion in a URL
+ *
+ * @param string $title The title
+ *
+ * @return string The optimised title
+ * @deprecated 1.8 Use elgg_get_friendly_title()
+ */
+function friendly_title($title) {
+ elgg_deprecated_notice('friendly_title was deprecated by elgg_get_friendly_title', 1.8);
+ return elgg_get_friendly_title($title);
+}
+
+/**
+ * Displays a UNIX timestamp in a friendly way (eg "less than a minute ago")
+ *
+ * @param int $time A UNIX epoch timestamp
+ *
+ * @return string The friendly time
+ * @deprecated 1.8 Use elgg_view_friendly_time()
+ */
+function friendly_time($time) {
+ elgg_deprecated_notice('friendly_time was deprecated by elgg_view_friendly_time', 1.8);
+ return elgg_view_friendly_time($time);
+}
+
+/**
+ * Filters a string into an array of significant words
+ *
+ * @deprecated 1.8 Don't use this.
+ *
+ * @param string $string A string
+ *
+ * @return array
+ */
+function filter_string($string) {
+ elgg_deprecated_notice('filter_string() was deprecated!', 1.8);
+
+ // Convert it to lower and trim
+ $string = strtolower($string);
+ $string = trim($string);
+
+ // Remove links and email addresses
+ // match protocol://address/path/file.extension?some=variable&another=asf%
+ $string = preg_replace("/\s([a-zA-Z]+:\/\/[a-z][a-z0-9\_\.\-]*[a-z]{2,6}" . "[a-zA-Z0-9\/\*\-\?\&\%\=]*)([\s|\.|\,])/iu", " ", $string);
+
+ // match www.something.domain/path/file.extension?some=variable&another=asf%
+ $string = preg_replace("/\s(www\.[a-z][a-z0-9\_\.\-]*[a-z]{2,6}" . "[a-zA-Z0-9\/\*\-\?\&\%\=]*)([\s|\.|\,])/iu", " ", $string);
+
+ // match name@address
+ $string = preg_replace("/\s([a-zA-Z][a-zA-Z0-9\_\.\-]*[a-zA-Z]" . "*\@[a-zA-Z][a-zA-Z0-9\_\.\-]*[a-zA-Z]{2,6})([\s|\.|\,])/iu", " ", $string);
+
+ // Sanitise the string; remove unwanted characters
+ $string = preg_replace('/\W/ui', ' ', $string);
+
+ // Explode it into an array
+ $terms = explode(' ', $string);
+
+ // Remove any blacklist terms
+ //$terms = array_filter($terms, 'remove_blacklist');
+
+ return $terms;
+}
+
+/**
+ * Returns true if the word in $input is considered significant
+ *
+ * @deprecated 1.8 Don't use this.
+ *
+ * @param string $input A word
+ *
+ * @return true|false
+ */
+function remove_blacklist($input) {
+ elgg_deprecated_notice('remove_blacklist() was deprecated!', 1.8);
+
+ global $CONFIG;
+
+ if (!is_array($CONFIG->wordblacklist)) {
+ return $input;
+ }
+
+ if (strlen($input) < 3 || in_array($input, $CONFIG->wordblacklist)) {
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Gets the guid of the entity that owns the current page.
+ *
+ * @deprecated 1.8 Use elgg_get_page_owner_guid()
+ *
+ * @return int The current page owner guid (0 if none).
+ */
+function page_owner() {
+ elgg_deprecated_notice('page_owner() was deprecated by elgg_get_page_owner_guid().', 1.8);
+ return elgg_get_page_owner_guid();
+}
+
+/**
+ * Gets the owner entity for the current page.
+ *
+ * @deprecated 1.8 Use elgg_get_page_owner_entity()
+ * @return ElggEntity|false The current page owner or false if none.
+ */
+function page_owner_entity() {
+ elgg_deprecated_notice('page_owner_entity() was deprecated by elgg_get_page_owner_entity().', 1.8);
+ return elgg_get_page_owner_entity();
+}
+
+/**
+ * Registers a page owner handler function
+ *
+ * @param string $functionname The callback function
+ *
+ * @deprecated 1.8 Use the 'page_owner', 'system' plugin hook
+ * @return void
+ */
+function add_page_owner_handler($functionname) {
+ elgg_deprecated_notice("add_page_owner_handler() was deprecated by the plugin hook 'page_owner', 'system'.", 1.8);
+}
+
+/**
+ * Set a page owner entity
+ *
+ * @param int $entitytoset The GUID of the entity
+ *
+ * @deprecated 1.8 Use elgg_set_page_owner_guid()
+ * @return void
+ */
+function set_page_owner($entitytoset = -1) {
+ elgg_deprecated_notice('set_page_owner() was deprecated by elgg_set_page_owner_guid().', 1.8);
+ elgg_set_page_owner_guid($entitytoset);
+}
+
+/**
+ * Sets the functional context of a page
+ *
+ * @deprecated 1.8 Use elgg_set_context()
+ *
+ * @param string $context The context of the page
+ *
+ * @return mixed Either the context string, or false on failure
+ */
+function set_context($context) {
+ elgg_deprecated_notice('set_context() was deprecated by elgg_set_context().', 1.8);
+ elgg_set_context($context);
+ if (empty($context)) {
+ return false;
+ }
+ return $context;
+}
+
+/**
+ * Returns the functional context of a page
+ *
+ * @deprecated 1.8 Use elgg_get_context()
+ *
+ * @return string The context, or 'main' if no context has been provided
+ */
+function get_context() {
+ elgg_deprecated_notice('get_context() was deprecated by elgg_get_context().', 1.8);
+ return elgg_get_context();
+
+ // @todo - used to set context based on calling script
+ // $context = get_plugin_name(true)
+}
+
+/**
+ * Returns a list of plugins to load, in the order that they should be loaded.
+ *
+ * @deprecated 1.8 Use elgg_get_plugin_ids_in_dir() or elgg_get_plugins()
+ *
+ * @return array List of plugins
+ */
+function get_plugin_list() {
+ elgg_deprecated_notice('get_plugin_list() is deprecated by elgg_get_plugin_ids_in_dir() or elgg_get_plugins()', 1.8);
+
+ $plugins = elgg_get_plugins('any');
+
+ $list = array();
+ if ($plugins) {
+ foreach ($plugins as $i => $plugin) {
+ // in <=1.7 this returned indexed by multiples of 10.
+ // uh...sure...why not.
+ $index = ($i + 1) * 10;
+ $list[$index] = $plugin->getID();
+ }
+ }
+
+ return $list;
+}
+
+/**
+ * Regenerates the list of known plugins and saves it to the current site
+ *
+ * Important: You should regenerate simplecache and the viewpath cache after executing this function
+ * otherwise you may experience view display artifacts. Do this with the following code:
+ *
+ * elgg_regenerate_simplecache();
+ * elgg_reset_system_cache();
+ *
+ * @deprecated 1.8 Use elgg_generate_plugin_entities() and elgg_set_plugin_priorities()
+ *
+ * @param array $pluginorder Optionally, a list of existing plugins and their orders
+ *
+ * @return array The new list of plugins and their orders
+ */
+function regenerate_plugin_list($pluginorder = FALSE) {
+ $msg = 'regenerate_plugin_list() is (sorta) deprecated by elgg_generate_plugin_entities() and'
+ . ' elgg_set_plugin_priorities().';
+ elgg_deprecated_notice($msg, 1.8);
+
+ // they're probably trying to set it?
+ if ($pluginorder) {
+ if (elgg_generate_plugin_entities()) {
+ // sort the plugins by the index numerically since we used
+ // weird indexes in the old system.
+ ksort($pluginorder, SORT_NUMERIC);
+ return elgg_set_plugin_priorities($pluginorder);
+ }
+ return false;
+ } else {
+ // they're probably trying to regenerate from disk?
+ return elgg_generate_plugin_entities();
+ }
+}
+
+/**
+ * Get the name of the most recent plugin to be called in the
+ * call stack (or the plugin that owns the current page, if any).
+ *
+ * i.e., if the last plugin was in /mod/foobar/, get_plugin_name would return foo_bar.
+ *
+ * @deprecated 1.8 Use elgg_get_calling_plugin_id()
+ *
+ * @param boolean $mainfilename If set to true, this will instead determine the
+ * context from the main script filename called by
+ * the browser. Default = false.
+ *
+ * @return string|false Plugin name, or false if no plugin name was called
+ */
+function get_plugin_name($mainfilename = false) {
+ elgg_deprecated_notice('get_plugin_name() is deprecated by elgg_get_calling_plugin_id()', 1.8);
+
+ return elgg_get_calling_plugin_id($mainfilename);
+}
+
+/**
+ * Load and parse a plugin manifest from a plugin XML file.
+ *
+ * @example plugins/manifest.xml Example 1.8-style manifest file.
+ *
+ * @deprecated 1.8 Use ElggPlugin->getManifest()
+ *
+ * @param string $plugin Plugin name.
+ * @return array of values
+ */
+function load_plugin_manifest($plugin) {
+ elgg_deprecated_notice('load_plugin_manifest() is deprecated by ElggPlugin->getManifest()', 1.8);
+
+ $xml_file = elgg_get_plugins_path() . "$plugin/manifest.xml";
+
+ try {
+ $manifest = new ElggPluginManifest($xml_file, $plugin);
+ } catch(Exception $e) {
+ return false;
+ }
+
+ return $manifest->getManifest();
+}
+
+/**
+ * This function checks a plugin manifest 'elgg_version' value against the current install
+ * returning TRUE if the elgg_version is >= the current install's version.
+ *
+ * @deprecated 1.8 Use ElggPlugin->canActivate()
+ *
+ * @param string $manifest_elgg_version_string The build version (eg 2009010201).
+ * @return bool
+ */
+function check_plugin_compatibility($manifest_elgg_version_string) {
+ elgg_deprecated_notice('check_plugin_compatibility() is deprecated by ElggPlugin->canActivate()', 1.8);
+
+ $version = get_version();
+
+ if (strpos($manifest_elgg_version_string, '.') === false) {
+ // Using version
+ $req_version = (int)$manifest_elgg_version_string;
+
+ return ($version >= $req_version);
+ }
+
+ return false;
+}
+
+/**
+ * Shorthand function for finding the plugin settings.
+ *
+ * @deprecated 1.8 Use elgg_get_calling_plugin_entity() or elgg_get_plugin_from_id()
+ *
+ * @param string $plugin_id Optional plugin id, if not specified
+ * then it is detected from where you are calling.
+ *
+ * @return mixed
+ */
+function find_plugin_settings($plugin_id = null) {
+ elgg_deprecated_notice('find_plugin_setting() is deprecated by elgg_get_calling_plugin_entity() or elgg_get_plugin_from_id()', 1.8);
+ if ($plugin_id) {
+ return elgg_get_plugin_from_id($plugin_id);
+ } else {
+ return elgg_get_calling_plugin_entity();
+ }
+}
+
+/**
+ * Return an array of installed plugins.
+ *
+ * @deprecated 1.8 use elgg_get_plugins()
+ *
+ * @param string $status any|enabled|disabled
+ * @return array
+ */
+function get_installed_plugins($status = 'all') {
+ global $CONFIG;
+
+ elgg_deprecated_notice('get_installed_plugins() was deprecated by elgg_get_plugins()', 1.8);
+
+ $plugins = elgg_get_plugins($status);
+
+ if (!$plugins) {
+ return array();
+ }
+
+ $installed_plugins = array();
+
+ foreach ($plugins as $plugin) {
+ if (!$plugin->isValid()) {
+ continue;
+ }
+
+ $include = true;
+
+ if ($status == 'enabled' && !$plugin->isActive()) {
+ $include = false;
+ } elseif ($status == 'disabled' && $plugin->isActive()) {
+ $include = true;
+ }
+
+ if ($include) {
+ $installed_plugins[$plugin->getID()] = array(
+ 'active' => $plugin->isActive(),
+ 'manifest' => $plugin->getManifest()->getManifest()
+ );
+ }
+ }
+
+ return $installed_plugins;
+}
+
+/**
+ * Enable a plugin for a site (default current site)
+ *
+ * Important: You should regenerate simplecache and the viewpath cache after executing this function
+ * otherwise you may experience view display artifacts. Do this with the following code:
+ *
+ * elgg_regenerate_simplecache();
+ * elgg_reset_system_cache();
+ *
+ * @deprecated 1.8 Use ElggPlugin->activate()
+ *
+ * @param string $plugin The plugin name.
+ * @param int $site_guid The site id, if not specified then this is detected.
+ *
+ * @return array
+ * @throws InvalidClassException
+ */
+function enable_plugin($plugin, $site_guid = null) {
+ elgg_deprecated_notice('enable_plugin() was deprecated by ElggPlugin->activate()', 1.8);
+
+ $plugin = sanitise_string($plugin);
+
+ $site_guid = (int) $site_guid;
+ if (!$site_guid) {
+ $site = get_config('site');
+ $site_guid = $site->guid;
+ }
+
+ try {
+ $plugin = new ElggPlugin($plugin);
+ } catch(Exception $e) {
+ return false;
+ }
+
+ if (!$plugin->canActivate($site_guid)) {
+ return false;
+ }
+
+ return $plugin->activate($site_guid);
+}
+
+/**
+ * Disable a plugin for a site (default current site)
+ *
+ * Important: You should regenerate simplecache and the viewpath cache after executing this function
+ * otherwise you may experience view display artifacts. Do this with the following code:
+ *
+ * elgg_regenerate_simplecache();
+ * elgg_reset_system_cache();
+ *
+ * @deprecated 1.8 Use ElggPlugin->deactivate()
+ *
+ * @param string $plugin The plugin name.
+ * @param int $site_guid The site id, if not specified then this is detected.
+ *
+ * @return bool
+ * @throws InvalidClassException
+ */
+function disable_plugin($plugin, $site_guid = 0) {
+ elgg_deprecated_notice('disable_plugin() was deprecated by ElggPlugin->deactivate()', 1.8);
+
+ $plugin = sanitise_string($plugin);
+
+ $site_guid = (int) $site_guid;
+ if (!$site_guid) {
+ $site = get_config('site');
+ $site_guid = $site->guid;
+ }
+
+ try {
+ $plugin = new ElggPlugin($plugin);
+ } catch(Exception $e) {
+ return false;
+ }
+
+ return $plugin->deactivate($site_guid);
+}
+
+/**
+ * Return whether a plugin is enabled or not.
+ *
+ * @deprecated 1.8 Use elgg_is_active_plugin()
+ *
+ * @param string $plugin The plugin name.
+ * @param int $site_guid The site id, if not specified then this is detected.
+ *
+ * @return bool
+ */
+function is_plugin_enabled($plugin, $site_guid = 0) {
+ elgg_deprecated_notice('is_plugin_enabled() was deprecated by elgg_is_active_plugin()', 1.8);
+ return elgg_is_active_plugin($plugin, $site_guid);
+}
+
+/**
+ * Get entities based on their private data.
+ *
+ * @param string $name The name of the setting
+ * @param string $value The value of the setting
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count Return a count of entities
+ * @param int $site_guid The site to get entities for. 0 for current, -1 for any
+ * @param mixed $container_guid The container(s) GUIDs
+ *
+ * @return array A list of entities.
+ * @deprecated 1.8 Use elgg_get_entities_from_private_settings()
+ */
+function get_entities_from_private_setting($name = "", $value = "", $type = "", $subtype = "",
+$owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0,
+$container_guid = null) {
+ elgg_deprecated_notice('get_entities_from_private_setting() was deprecated by elgg_get_entities_from_private_setting()!', 1.8);
+
+ $options = array();
+
+ $options['private_setting_name'] = $name;
+ $options['private_setting_value'] = $value;
+
+ // set container_guid to owner_guid to emulate old functionality
+ if ($owner_guid != "") {
+ if (is_null($container_guid)) {
+ $container_guid = $owner_guid;
+ }
+ }
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($container_guid) {
+ if (is_array($container_guid)) {
+ $options['container_guids'] = $container_guid;
+ } else {
+ $options['container_guid'] = $container_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_private_settings($options);
+}
+
+/**
+ * Get entities based on their private data by multiple keys.
+ *
+ * @param string $name The name of the setting
+ * @param mixed $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param bool $count Count entities
+ * @param int $site_guid Site GUID. 0 for current, -1 for any.
+ * @param mixed $container_guid Container GUID
+ *
+ * @return array A list of entities.
+ * @deprecated 1.8 Use elgg_get_entities_from_private_settings()
+ */
+function get_entities_from_private_setting_multi(array $name, $type = "", $subtype = "",
+$owner_guid = 0, $order_by = "", $limit = 10, $offset = 0, $count = false,
+$site_guid = 0, $container_guid = null) {
+
+ elgg_deprecated_notice('get_entities_from_private_setting_multi() was deprecated by elgg_get_entities_from_private_settings()!', 1.8);
+
+ $options = array();
+
+ $pairs = array();
+ foreach ($name as $setting_name => $setting_value) {
+ $pairs[] = array('name' => $setting_name, 'value' => $setting_value);
+ }
+ $options['private_setting_name_value_pairs'] = $pairs;
+
+ // set container_guid to owner_guid to emulate old functionality
+ if ($owner_guid != "") {
+ if (is_null($container_guid)) {
+ $container_guid = $owner_guid;
+ }
+ }
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ if ($container_guid) {
+ if (is_array($container_guid)) {
+ $options['container_guids'] = $container_guid;
+ } else {
+ $options['container_guid'] = $container_guid;
+ }
+ }
+
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_private_settings($options);
+}
+
+/**
+ * Returns a viewable list of entities by relationship
+ *
+ * @see elgg_view_entity_list
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_relationship()
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Reverse the normal function of the query to instead say "give me all entities for whome $relationship_guid is a $relationship of"
+ * @param string $type The type of entity (eg 'object')
+ * @param string $subtype The entity subtype
+ * @param int $owner_guid The owner (default: all)
+ * @param int $limit The number of entities to display on a page
+ * @param true|false $fullview Whether or not to display the full view (default: true)
+ * @param true|false $viewtypetoggle Whether or not to allow gallery view
+ * @param true|false $pagination Whether to display pagination (default: true)
+ * @param bool $order_by SQL order by clause
+ * @return string The viewable list of entities
+ */
+function list_entities_from_relationship($relationship, $relationship_guid,
+$inverse_relationship = false, $type = ELGG_ENTITIES_ANY_VALUE,
+$subtype = ELGG_ENTITIES_ANY_VALUE, $owner_guid = 0, $limit = 10,
+$fullview = true, $listtypetoggle = false, $pagination = true, $order_by = '') {
+
+ elgg_deprecated_notice("list_entities_from_relationship was deprecated by elgg_list_entities_from_relationship()!", 1.8);
+ return elgg_list_entities_from_relationship(array(
+ 'relationship' => $relationship,
+ 'relationship_guid' => $relationship_guid,
+ 'inverse_relationship' => $inverse_relationship,
+ 'types' => $type,
+ 'subtypes' => $subtype,
+ 'owner_guid' => $owner_guid,
+ 'order_by' => $order_by,
+ 'limit' => $limit,
+ 'full_view' => $fullview,
+ 'list_type_toggle' => $listtypetoggle,
+ 'pagination' => $pagination,
+ ));
+}
+
+/**
+ * Gets the number of entities by a the number of entities related to them in a particular way.
+ * This is a good way to get out the users with the most friends, or the groups with the
+ * most members.
+ *
+ * @deprecated 1.8 Use elgg_get_entities_from_relationship_count()
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param bool $inverse_relationship Inverse relationship owners
+ * @param string $type The type of entity (default: all)
+ * @param string $subtype The entity subtype (default: all)
+ * @param int $owner_guid The owner of the entities (default: none)
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param bool $count Return a count instead of entities
+ * @param int $site_guid Site GUID
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ */
+function get_entities_by_relationship_count($relationship, $inverse_relationship = true, $type = "",
+$subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+ elgg_deprecated_notice('get_entities_by_relationship_count() is deprecated by elgg_get_entities_from_relationship_count()', 1.8);
+
+ $options = array();
+
+ $options['relationship'] = $relationship;
+
+ // this used to default to true, which is wrong.
+ // flip it for the new function
+ $options['inverse_relationship'] = !$inverse_relationship;
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ $options['limit'] = $limit;
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_relationship_count($options);
+}
+
+/**
+ * Displays a human-readable list of entities
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_relationship_count()
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param bool $inverse_relationship Inverse relationship owners
+ * @param string $type The type of entity (eg 'object')
+ * @param string $subtype The entity subtype
+ * @param int $owner_guid The owner (default: all)
+ * @param int $limit The number of entities to display on a page
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ * @param bool $listtypetoggle Whether or not to allow gallery view
+ * @param bool $pagination Whether to display pagination (default: true)
+ *
+ * @return string The viewable list of entities
+ */
+function list_entities_by_relationship_count($relationship, $inverse_relationship = true,
+$type = "", $subtype = "", $owner_guid = 0, $limit = 10, $fullview = true,
+$listtypetoggle = false, $pagination = true) {
+
+ elgg_deprecated_notice('list_entities_by_relationship_count() was deprecated by elgg_list_entities_from_relationship_count()', 1.8);
+
+ $options = array();
+
+ $options['relationship'] = $relationship;
+
+ // this used to default to true, which is wrong.
+ // flip it for the new function
+ $options['inverse_relationship'] = !$inverse_relationship;
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ $options['limit'] = $limit;
+
+ $options['full_view'] = $fullview;
+
+ return elgg_list_entities_from_relationship_count($options);
+}
+
+/**
+ * Gets the number of entities by a the number of entities related to
+ * them in a particular way also constrained by metadata.
+ *
+ * @deprecated 1.8 Use elgg_get_entities_from_relationship()
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Inverse relationship owner
+ * @param String $meta_name The metadata name
+ * @param String $meta_value The metadata value
+ * @param string $type The type of entity (default: all)
+ * @param string $subtype The entity subtype (default: all)
+ * @param int $owner_guid The owner of the entities (default: none)
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param bool $count Return a count instead of entities
+ * @param int $site_guid Site GUID
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ */
+function get_entities_from_relationships_and_meta($relationship, $relationship_guid,
+$inverse_relationship = false, $meta_name = "", $meta_value = "", $type = "",
+$subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+
+ elgg_deprecated_notice('get_entities_from_relationship_and_meta() was deprecated by elgg_get_entities_from_relationship()!', 1.7);
+
+ $options = array();
+
+ $options['relationship'] = $relationship;
+ $options['relationship_guid'] = $relationship_guid;
+ $options['inverse_relationship'] = $inverse_relationship;
+
+ if ($meta_value) {
+ $options['values'] = $meta_value;
+ }
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($type) {
+ $options['types'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtypes'] = $subtype;
+ }
+
+ if ($owner_guid) {
+ $options['owner_guid'] = $owner_guid;
+ }
+
+ if ($limit) {
+ $options['limit'] = $limit;
+ }
+
+ if ($offset) {
+ $options['offset'] = $offset;
+ }
+
+ if ($order_by) {
+ $options['order_by'];
+ }
+
+ if ($site_guid) {
+ $options['site_guid'];
+ }
+
+ if ($count) {
+ $options['count'] = $count;
+ }
+
+ return elgg_get_entities_from_relationship($options);
+}
+
+
+/**
+ * Retrieves items from the river. All parameters are optional.
+ *
+ * @param int|array $subject_guid Acting entity to restrict to. Default: all
+ * @param int|array $object_guid Entity being acted on to restrict to. Default: all
+ * @param string $subject_relationship If set to a relationship type, this will use
+ * $subject_guid as the starting point and set the
+ * subjects to be all users this
+ * entity has this relationship with (eg 'friend').
+ * Default: blank
+ * @param string $type The type of entity to restrict to. Default: all
+ * @param string $subtype The subtype of entity to restrict to. Default: all
+ * @param string $action_type The type of river action to restrict to. Default: all
+ * @param int $limit The number of items to retrieve. Default: 20
+ * @param int $offset The page offset. Default: 0
+ * @param int $posted_min The minimum time period to look at. Default: none
+ * @param int $posted_max The maximum time period to look at. Default: none
+ *
+ * @return array|false Depending on success
+ * @deprecated 1.8 Use elgg_get_river()
+ */
+function get_river_items($subject_guid = 0, $object_guid = 0, $subject_relationship = '',
+$type = '', $subtype = '', $action_type = '', $limit = 20, $offset = 0, $posted_min = 0,
+$posted_max = 0) {
+ elgg_deprecated_notice("get_river_items deprecated by elgg_get_river", 1.8);
+
+ $options = array();
+
+ if ($subject_guid) {
+ $options['subject_guid'] = $subject_guid;
+ }
+
+ if ($object_guid) {
+ $options['object_guid'] = $object_guid;
+ }
+
+ if ($subject_relationship) {
+ $options['relationship'] = $subject_relationship;
+ unset($options['subject_guid']);
+ $options['relationship_guid'] = $subject_guid;
+ }
+
+ if ($type) {
+ $options['type'] = $type;
+ }
+
+ if ($subtype) {
+ $options['subtype'] = $subtype;
+ }
+
+ if ($action_type) {
+ $options['action_type'] = $action_type;
+ }
+
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+
+ if ($posted_min) {
+ $options['posted_time_lower'] = $posted_min;
+ }
+
+ if ($posted_max) {
+ $options['posted_time_upper'] = $posted_max;
+ }
+
+ return elgg_get_river($options);
+}
+
+/**
+ * Returns a human-readable version of the river.
+ *
+ * @param int|array $subject_guid Acting entity to restrict to. Default: all
+ * @param int|array $object_guid Entity being acted on to restrict to. Default: all
+ * @param string $subject_relationship If set to a relationship type, this will use
+ * $subject_guid as the starting point and set
+ * the subjects to be all users this entity has this
+ * relationship with (eg 'friend'). Default: blank
+ * @param string $type The type of entity to restrict to. Default: all
+ * @param string $subtype The subtype of entity to restrict to. Default: all
+ * @param string $action_type The type of river action to restrict to. Default: all
+ * @param int $limit The number of items to retrieve. Default: 20
+ * @param int $posted_min The minimum time period to look at. Default: none
+ * @param int $posted_max The maximum time period to look at. Default: none
+ * @param bool $pagination Show pagination?
+ *
+ * @return string Human-readable river.
+ * @deprecated 1.8 Use elgg_list_river()
+ */
+function elgg_view_river_items($subject_guid = 0, $object_guid = 0, $subject_relationship = '',
+$type = '', $subtype = '', $action_type = '', $limit = 20, $posted_min = 0,
+$posted_max = 0, $pagination = true) {
+ elgg_deprecated_notice("elgg_view_river_items deprecated for elgg_list_river", 1.8);
+
+ $river_items = get_river_items($subject_guid, $object_guid, $subject_relationship,
+ $type, $subtype, $action_type, $limit + 1, $posted_min, $posted_max);
+
+ // Get input from outside world and sanitise it
+ $offset = (int) get_input('offset', 0);
+
+ // view them
+ $params = array(
+ 'items' => $river_items,
+ 'count' => count($river_items),
+ 'offset' => $offset,
+ 'limit' => $limit,
+ 'pagination' => $pagination,
+ 'list-class' => 'elgg-list-river',
+ );
+
+ return elgg_view('page/components/list', $params);
+}
+
+/**
+ * Construct and execute the query required for the activity stream.
+ *
+ * @deprecated 1.8 This is outdated and uses the systemlog table instead of the river table.
+ * Don't use it.
+ */
+function get_activity_stream_data($limit = 10, $offset = 0, $type = "", $subtype = "",
+$owner_guid = "", $owner_relationship = "") {
+ elgg_deprecated_notice("get_activity_stream_data was deprecated", 1.8);
+
+ global $CONFIG;
+
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+
+ if ($type) {
+ if (!is_array($type)) {
+ $type = array(sanitise_string($type));
+ } else {
+ foreach ($type as $k => $v) {
+ $type[$k] = sanitise_string($v);
+ }
+ }
+ }
+
+ if ($subtype) {
+ if (!is_array($subtype)) {
+ $subtype = array(sanitise_string($subtype));
+ } else {
+ foreach ($subtype as $k => $v) {
+ $subtype[$k] = sanitise_string($v);
+ }
+ }
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ foreach ($owner_guid as $k => $v) {
+ $owner_guid[$k] = (int)$v;
+ }
+ } else {
+ $owner_guid = array((int)$owner_guid);
+ }
+ }
+
+ $owner_relationship = sanitise_string($owner_relationship);
+
+ // Get a list of possible views
+ $activity_events = array();
+ $activity_views = array_merge(elgg_view_tree('activity', 'default'),
+ elgg_view_tree('river', 'default'));
+
+ $done = array();
+
+ foreach ($activity_views as $view) {
+ $fragments = explode('/', $view);
+ $tmp = explode('/', $view, 2);
+ $tmp = $tmp[1];
+
+ if ((isset($fragments[0])) && (($fragments[0] == 'river') || ($fragments[0] == 'activity'))
+ && (!in_array($tmp, $done))) {
+
+ if (isset($fragments[1])) {
+ $f = array();
+ for ($n = 1; $n < count($fragments); $n++) {
+ $val = sanitise_string($fragments[$n]);
+ switch($n) {
+ case 1: $key = 'type'; break;
+ case 2: $key = 'subtype'; break;
+ case 3: $key = 'event'; break;
+ }
+ $f[$key] = $val;
+ }
+
+ // Filter result based on parameters
+ $add = true;
+ if ($type) {
+ if (!in_array($f['type'], $type)) {
+ $add = false;
+ }
+ }
+ if (($add) && ($subtype)) {
+ if (!in_array($f['subtype'], $subtype)) {
+ $add = false;
+ }
+ }
+ if (($add) && ($event)) {
+ if (!in_array($f['event'], $event)) {
+ $add = false;
+ }
+ }
+
+ if ($add) {
+ $activity_events[] = $f;
+ }
+ }
+
+ $done[] = $tmp;
+ }
+ }
+
+ $n = 0;
+ foreach ($activity_events as $details) {
+ // Get what we're talking about
+ if ($details['subtype'] == 'default') {
+ $details['subtype'] = '';
+ }
+
+ if (($details['type']) && ($details['event'])) {
+ if ($n > 0) {
+ $obj_query .= " or ";
+ }
+
+ $access = "";
+ if ($details['type'] != 'relationship') {
+ $access = " and " . get_access_sql_suffix('sl');
+ }
+
+ $obj_query .= "( sl.object_type='{$details['type']}'
+ AND sl.object_subtype='{$details['subtype']}'
+ AND sl.event='{$details['event']}' $access )";
+
+ $n++;
+ }
+ }
+
+ // User
+ if ((count($owner_guid)) && ($owner_guid[0] != 0)) {
+ $user = " and sl.performed_by_guid in (" . implode(',', $owner_guid) . ")";
+
+ if ($owner_relationship) {
+ $friendsarray = "";
+ if ($friends = elgg_get_entities_from_relationship(array(
+ 'relationship' => $owner_relationship,
+ 'relationship_guid' => $owner_guid[0],
+ 'inverse_relationship' => FALSE,
+ 'types' => 'user',
+ 'subtypes' => $subtype,
+ 'limit' => 9999))
+ ) {
+
+ $friendsarray = array();
+ foreach ($friends as $friend) {
+ $friendsarray[] = $friend->getGUID();
+ }
+
+ $user = " and sl.performed_by_guid in (" . implode(',', $friendsarray) . ")";
+ }
+ }
+ }
+
+ $query = "SELECT sl.* FROM {$CONFIG->dbprefix}system_log sl
+ WHERE 1 $user AND ($obj_query)
+ ORDER BY sl.time_created desc limit $offset, $limit";
+ return get_data($query);
+}
+
+/**
+ * Perform standard authentication with a given username and password.
+ * Returns an ElggUser object for use with login.
+ *
+ * @see login
+ *
+ * @param string $username The username, optionally (for standard logins)
+ * @param string $password The password, optionally (for standard logins)
+ *
+ * @return ElggUser|false The authenticated user object, or false on failure.
+ *
+ * @deprecated 1.8 Use elgg_authenticate
+ */
+function authenticate($username, $password) {
+ elgg_deprecated_notice('authenticate() has been deprecated for elgg_authenticate()', 1.8);
+ $pam = new ElggPAM('user');
+ $credentials = array('username' => $username, 'password' => $password);
+ $result = $pam->authenticate($credentials);
+ if ($result) {
+ return get_user_by_username($username);
+ }
+ return false;
+}
+
+
+/**
+ * Get the members of a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param int $limit User GUID
+ * @param int $offset Offset
+ *
+ * @return mixed
+ * @deprecated 1.8 Use ElggSite::getMembers()
+ */
+function get_site_members($site_guid, $limit = 10, $offset = 0) {
+ elgg_deprecated_notice("get_site_members() deprecated.
+ Use ElggSite::getMembers()", 1.8);
+
+ $site = get_entity($site_guid);
+ if ($site) {
+ return $site->getMembers($limit, $offset);
+ }
+
+ return false;
+}
+
+/**
+ * Display a list of site members
+ *
+ * @param int $site_guid The GUID of the site
+ * @param int $limit The number of members to display on a page
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ *
+ * @return string A displayable list of members
+ * @deprecated 1.8 Use ElggSite::listMembers()
+ */
+function list_site_members($site_guid, $limit = 10, $fullview = true) {
+ elgg_deprecated_notice("list_site_members() deprecated.
+ Use ElggSite::listMembers()", 1.8);
+
+ $options = array(
+ 'limit' => $limit,
+ 'full_view' => $full_view,
+ );
+
+ $site = get_entity($site_guid);
+ if ($site) {
+ return $site->listMembers($options);
+ }
+
+ return '';
+}
+
+
+/**
+ * Add a collection to a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param int $collection_guid Collection GUID
+ *
+ * @return mixed
+ * @deprecated 1.8 Don't use this.
+ */
+function add_site_collection($site_guid, $collection_guid) {
+ elgg_deprecated_notice("add_site_collection has been deprecated", 1.8);
+ global $CONFIG;
+
+ $site_guid = (int)$site_guid;
+ $collection_guid = (int)$collection_guid;
+
+ return add_entity_relationship($collection_guid, "member_of_site", $site_guid);
+}
+
+/**
+ * Remove a collection from a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param int $collection_guid Collection GUID
+ *
+ * @return mixed
+ * @deprecated 1.8 Don't use this.
+ */
+function remove_site_collection($site_guid, $collection_guid) {
+ elgg_deprecated_notice("remove_site_collection has been deprecated", 1.8);
+ $site_guid = (int)$site_guid;
+ $collection_guid = (int)$collection_guid;
+
+ return remove_entity_relationship($collection_guid, "member_of_site", $site_guid);
+}
+
+/**
+ * Get the collections belonging to a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param string $subtype Subtype
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return mixed
+ * @deprecated 1.8 Don't use this.
+ */
+function get_site_collections($site_guid, $subtype = "", $limit = 10, $offset = 0) {
+ elgg_deprecated_notice("get_site_collections has been deprecated", 1.8);
+ $site_guid = (int)$site_guid;
+ $subtype = sanitise_string($subtype);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+
+ // collection isn't a valid type. This won't work.
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => 'member_of_site',
+ 'relationship_guid' => $site_guid,
+ 'inverse_relationship' => TRUE,
+ 'types' => 'collection',
+ 'subtypes' => $subtype,
+ 'limit' => $limit,
+ 'offset' => $offset
+ ));
+}
+
+/**
+ * Get an array of tags with weights for use with the output/tagcloud view.
+ *
+ * @deprecated 1.8 Use elgg_get_tags().
+ *
+ * @param int $threshold Get the threshold of minimum number of each tags to
+ * bother with (ie only show tags where there are more
+ * than $threshold occurances)
+ * @param int $limit Number of tags to return
+ * @param string $metadata_name Optionally, the name of the field you want to grab for
+ * @param string $entity_type Optionally, the entity type ('object' etc)
+ * @param string $entity_subtype The entity subtype, optionally
+ * @param int $owner_guid The GUID of the tags owner, optionally
+ * @param int $site_guid Optionally, the site to restrict to (default is the current site)
+ * @param int $start_ts Optionally specify a start timestamp for tags used to
+ * generate cloud.
+ * @param int $end_ts Optionally specify an end timestamp for tags used to generate cloud
+ *
+ * @return array|false Array of objects with ->tag and ->total values, or false on failure
+ */
+function get_tags($threshold = 1, $limit = 10, $metadata_name = "", $entity_type = "object",
+$entity_subtype = "", $owner_guid = "", $site_guid = -1, $start_ts = "", $end_ts = "") {
+
+ elgg_deprecated_notice('get_tags() has been replaced by elgg_get_tags()', 1.8);
+
+ if (is_array($metadata_name)) {
+ return false;
+ }
+
+ $options = array();
+ if ($metadata_name === '') {
+ $options['tag_names'] = array();
+ } else {
+ $options['tag_names'] = array($metadata_name);
+ }
+
+ $options['threshold'] = $threshold;
+ $options['limit'] = $limit;
+
+ // rewrite owner_guid to container_guid to emulate old functionality
+ $container_guid = $owner_guid;
+ if ($container_guid) {
+ $options['container_guids'] = $container_guid;
+ }
+
+ if ($entity_type) {
+ $options['type'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtype'] = $entity_subtype;
+ }
+
+ if ($site_guid != -1) {
+ $options['site_guids'] = $site_guid;
+ }
+
+ if ($end_ts) {
+ $options['created_time_upper'] = $end_ts;
+ }
+
+ if ($start_ts) {
+ $options['created_time_lower'] = $start_ts;
+ }
+
+ $r = elgg_get_tags($options);
+ return $r;
+}
+
+/**
+ * Loads and displays a tagcloud given particular criteria.
+ *
+ * @deprecated 1.8 use elgg_view_tagcloud()
+ *
+ * @param int $threshold Get the threshold of minimum number of each tags
+ * to bother with (ie only show tags where there are
+ * more than $threshold occurances)
+ * @param int $limit Number of tags to return
+ * @param string $metadata_name Optionally, the name of the field you want to grab for
+ * @param string $entity_type Optionally, the entity type ('object' etc)
+ * @param string $entity_subtype The entity subtype, optionally
+ * @param int $owner_guid The GUID of the tags owner, optionally
+ * @param int $site_guid Optionally, the site to restrict to (default is the current site)
+ * @param int $start_ts Optionally specify a start timestamp for tags used to
+ * generate cloud.
+ * @param int $end_ts Optionally specify an end timestamp for tags used to generate
+ * cloud.
+ *
+ * @return string The HTML (or other, depending on view type) of the tagcloud.
+ */
+function display_tagcloud($threshold = 1, $limit = 10, $metadata_name = "", $entity_type = "object",
+$entity_subtype = "", $owner_guid = "", $site_guid = -1, $start_ts = "", $end_ts = "") {
+
+ elgg_deprecated_notice('display_tagcloud() was deprecated by elgg_view_tagcloud()!', 1.8);
+
+ $tags = get_tags($threshold, $limit, $metadata_name, $entity_type,
+ $entity_subtype, $owner_guid, $site_guid, $start_ts, $end_ts);
+
+ return elgg_view('output/tagcloud', array(
+ 'value' => $tags,
+ 'type' => $entity_type,
+ 'subtype' => $entity_subtype,
+ ));
+}
+
+
+/**
+ * Obtains a list of objects owned by a user
+ *
+ * @param int $user_guid The GUID of the owning user
+ * @param string $subtype Optionally, the subtype of objects
+ * @param int $limit The number of results to return (default 10)
+ * @param int $offset Indexing offset, if any
+ * @param int $timelower The earliest time the entity can have been created. Default: all
+ * @param int $timeupper The latest time the entity can have been created. Default: all
+ *
+ * @return false|array An array of ElggObjects or false, depending on success
+ * @deprecated 1.8 Use elgg_get_entities() instead
+ */
+function get_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,
+$offset = 0, $timelower = 0, $timeupper = 0) {
+ elgg_deprecated_notice("get_user_objects() was deprecated in favor of elgg_get_entities()", 1.8);
+ $ntt = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'owner_guid' => $user_guid,
+ 'limit' => $limit,
+ 'offset' => $offset,
+ 'container_guid' => $user_guid,
+ 'created_time_lower' => $timelower,
+ 'created_time_upper' => $timeupper
+ ));
+ return $ntt;
+}
+
+/**
+ * Counts the objects (optionally of a particular subtype) owned by a user
+ *
+ * @param int $user_guid The GUID of the owning user
+ * @param string $subtype Optionally, the subtype of objects
+ * @param int $timelower The earliest time the entity can have been created. Default: all
+ * @param int $timeupper The latest time the entity can have been created. Default: all
+ *
+ * @return int The number of objects the user owns (of this subtype)
+ * @deprecated 1.8 Use elgg_get_entities() instead
+ */
+function count_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $timelower = 0,
+$timeupper = 0) {
+ elgg_deprecated_notice("count_user_objects() was deprecated in favor of elgg_get_entities()", 1.8);
+ $total = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'owner_guid' => $user_guid,
+ 'count' => TRUE,
+ 'container_guid' => $user_guid,
+ 'created_time_lower' => $timelower,
+ 'created_time_upper' => $timeupper
+ ));
+ return $total;
+}
+
+/**
+ * Displays a list of user objects of a particular subtype, with navigation.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param int $user_guid The GUID of the user
+ * @param string $subtype The object subtype
+ * @param int $limit The number of entities to display on a page
+ * @param bool $fullview Whether or not to display the full view (default: true)
+ * @param bool $listtypetoggle Whether or not to allow gallery view (default: true)
+ * @param bool $pagination Whether to display pagination (default: true)
+ * @param int $timelower The earliest time the entity can have been created. Default: all
+ * @param int $timeupper The latest time the entity can have been created. Default: all
+ *
+ * @return string The list in a form suitable to display
+ * @deprecated 1.8 Use elgg_list_entities() instead
+ */
+function list_user_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,
+$fullview = true, $listtypetoggle = true, $pagination = true, $timelower = 0, $timeupper = 0) {
+ elgg_deprecated_notice("list_user_objects() was deprecated in favor of elgg_list_entities()", 1.8);
+
+ $offset = (int) get_input('offset');
+ $limit = (int) $limit;
+ $count = (int) count_user_objects($user_guid, $subtype, $timelower, $timeupper);
+ $entities = get_user_objects($user_guid, $subtype, $limit, $offset, $timelower, $timeupper);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit, $fullview, $listtypetoggle,
+ $pagination);
+}
+
+
+/**
+ * Get user objects by an array of metadata
+ *
+ * @param int $user_guid The GUID of the owning user
+ * @param string $subtype Optionally, the subtype of objects
+ * @param array $metadata An array of metadata
+ * @param int $limit The number of results to return (default 10)
+ * @param int $offset Indexing offset, if any
+ *
+ * @return false|array An array of ElggObjects or false, depending on success
+ * @deprecated 1.8 Use elgg_get_entities_from_metadata() instead
+ */
+function get_user_objects_by_metadata($user_guid, $subtype = "", $metadata = array(),
+$limit = 0, $offset = 0) {
+ elgg_deprecated_notice("get_user_objects_by_metadata() was deprecated in favor of elgg_get_entities_from_metadata()", 1.8);
+ return get_entities_from_metadata_multi($metadata, "object", $subtype, $user_guid,
+ $limit, $offset);
+}
+
+/**
+ * Set the validation status for a user.
+ *
+ * @param bool $status Validated (true) or false
+ * @param string $method Optional method to say how a user was validated
+ * @return bool
+ * @deprecated 1.8 Use elgg_set_user_validation_status()
+ */
+function set_user_validation_status($user_guid, $status, $method = '') {
+ elgg_deprecated_notice("set_user_validation_status() is deprecated", 1.8);
+ return elgg_set_user_validation_status($user_guid, $status, $method);
+}
+
+/**
+ * Trigger an event requesting that a user guid be validated somehow - either by email address or some other way.
+ *
+ * This function invalidates any existing validation value.
+ *
+ * @param int $user_guid User's GUID
+ * @deprecated 1.8 Hook into the register, user plugin hook and request validation.
+ */
+function request_user_validation($user_guid) {
+ elgg_deprecated_notice("request_user_validation() is deprecated.
+ Plugins should register for the 'register, user' plugin hook", 1.8);
+ $user = get_entity($user_guid);
+
+ if (($user) && ($user instanceof ElggUser)) {
+ // invalidate any existing validations
+ set_user_validation_status($user_guid, false);
+
+ // request validation
+ trigger_elgg_event('validate', 'user', $user);
+ }
+}
+
+/**
+ * Register a user settings page with the admin panel.
+ * This function extends the view "usersettings/main" with the provided view.
+ * This view should provide a description and either a control or a link to.
+ *
+ * Usage:
+ * - To add a control to the main admin panel then extend usersettings/main
+ * - To add a control to a new page create a page which renders a view
+ * usersettings/subpage (where subpage is your new page -
+ * nb. some pages already exist that you can extend), extend the main view
+ * to point to it, and add controls to your new view.
+ *
+ * At the moment this is essentially a wrapper around elgg_extend_view().
+ *
+ * @param string $new_settings_view The view associated with the control you're adding
+ * @param string $view The view to extend, by default this is 'usersettings/main'.
+ * @param int $priority Optional priority to govern the appearance in the list.
+ *
+ * @return bool
+ * @deprecated 1.8 Extend one of the views in core/settings
+ */
+function extend_elgg_settings_page($new_settings_view, $view = 'usersettings/main',
+$priority = 500) {
+ // see views: /core/settings
+ elgg_deprecated_notice("extend_elgg_settings_page has been deprecated. Extend one of the settings views instead", 1.8);
+
+ return elgg_extend_view($view, $new_settings_view, $priority);
+}
+
+/**
+ * Returns a representation of a full 'page' (which might be an HTML page,
+ * RSS file, etc, depending on the current viewtype)
+ *
+ * @param string $title
+ * @param string $body
+ * @return string
+ *
+ * @deprecated 1.8 Use elgg_view_page()
+ */
+function page_draw($title, $body, $sidebar = "") {
+ elgg_deprecated_notice("page_draw() was deprecated in favor of elgg_view_page() in 1.8.", 1.8);
+
+ $vars = array(
+ 'sidebar' => $sidebar
+ );
+ echo elgg_view_page($title, $body, 'default', $vars);
+}
+
+/**
+ * Wrapper function to display search listings.
+ *
+ * @param string $icon The icon for the listing
+ * @param string $info Any information that needs to be displayed.
+ *
+ * @return string The HTML (etc) representing the listing
+ * @deprecated 1.8 use elgg_view_image_block()
+ */
+function elgg_view_listing($icon, $info) {
+ elgg_deprecated_notice('elgg_view_listing deprecated by elgg_view_image_block', 1.8);
+ return elgg_view('page/components/image_block', array('image' => $icon, 'body' => $info));
+}
+
+/**
+ * Return the icon URL for an entity.
+ *
+ * @tip Can be overridden by registering a plugin hook for entity:icon:url, $entity_type.
+ *
+ * @internal This is passed an entity rather than a guid to handle non-created entities.
+ *
+ * @param ElggEntity $entity The entity
+ * @param string $size Icon size
+ *
+ * @return string URL to the entity icon.
+ * @deprecated 1.8 Use $entity->getIconURL()
+ */
+function get_entity_icon_url(ElggEntity $entity, $size = 'medium') {
+ elgg_deprecated_notice("get_entity_icon_url() deprecated for getIconURL()", 1.8);
+ global $CONFIG;
+
+ $size = sanitise_string($size);
+ switch (strtolower($size)) {
+ case 'master':
+ $size = 'master';
+ break;
+
+ case 'large' :
+ $size = 'large';
+ break;
+
+ case 'topbar' :
+ $size = 'topbar';
+ break;
+
+ case 'tiny' :
+ $size = 'tiny';
+ break;
+
+ case 'small' :
+ $size = 'small';
+ break;
+
+ case 'medium' :
+ default:
+ $size = 'medium';
+ }
+
+ $url = false;
+
+ $viewtype = elgg_get_viewtype();
+
+ // Step one, see if anyone knows how to render this in the current view
+ $params = array('entity' => $entity, 'viewtype' => $viewtype, 'size' => $size);
+ $url = elgg_trigger_plugin_hook('entity:icon:url', $entity->getType(), $params, $url);
+
+ // Fail, so use default
+ if (!$url) {
+ $type = $entity->getType();
+ $subtype = $entity->getSubtype();
+
+ if (!empty($subtype)) {
+ $overrideurl = elgg_view("icon/{$type}/{$subtype}/{$size}", array('entity' => $entity));
+ if (!empty($overrideurl)) {
+ return $overrideurl;
+ }
+ }
+
+ $overrideurl = elgg_view("icon/{$type}/default/{$size}", array('entity' => $entity));
+ if (!empty($overrideurl)) {
+ return $overrideurl;
+ }
+
+ $url = "_graphics/icons/default/$size.png";
+ }
+
+ return elgg_normalize_url($url);
+}
+
+/**
+ * Return the current logged in user, or NULL if no user is logged in.
+ *
+ * If no user can be found in the current session, a plugin
+ * hook - 'session:get' 'user' to give plugin authors another
+ * way to provide user details to the ACL system without touching the session.
+ *
+ * @deprecated 1.8 Use elgg_get_logged_in_user_entity()
+ * @return ElggUser|NULL
+ */
+function get_loggedin_user() {
+ elgg_deprecated_notice('get_loggedin_user() is deprecated by elgg_get_logged_in_user_entity()', 1.8);
+ return elgg_get_logged_in_user_entity();
+}
+
+/**
+ * Return the current logged in user by id.
+ *
+ * @deprecated 1.8 Use elgg_get_logged_in_user_guid()
+ * @see elgg_get_logged_in_user_entity()
+ * @return int
+ */
+function get_loggedin_userid() {
+ elgg_deprecated_notice('get_loggedin_userid() is deprecated by elgg_get_logged_in_user_guid()', 1.8);
+ return elgg_get_logged_in_user_guid();
+}
+
+
+/**
+ * Returns whether or not the user is currently logged in
+ *
+ * @deprecated 1.8 Use elgg_is_logged_in();
+ * @return bool
+ */
+function isloggedin() {
+ elgg_deprecated_notice('isloggedin() is deprecated by elgg_is_logged_in()', 1.8);
+ return elgg_is_logged_in();
+}
+
+/**
+ * Returns whether or not the user is currently logged in and that they are an admin user.
+ *
+ * @deprecated 1.8 Use elgg_is_admin_logged_in()
+ * @return bool
+ */
+function isadminloggedin() {
+ elgg_deprecated_notice('isadminloggedin() is deprecated by elgg_is_admin_logged_in()', 1.8);
+ return elgg_is_admin_logged_in();
+}
+
+
+/**
+ * Loads plugins
+ *
+ * @deprecated 1.8 Use elgg_load_plugins()
+ *
+ * @return bool
+ */
+function load_plugins() {
+ elgg_deprecated_notice('load_plugins() is deprecated by elgg_load_plugins()', 1.8);
+ return elgg_load_plugins();
+}
+
+/**
+ * Find the plugin settings for a user.
+ *
+ * @param string $plugin_id Plugin name.
+ * @param int $user_guid The guid who's settings to retrieve.
+ *
+ * @deprecated 1.8 Use elgg_get_all_plugin_user_settings() or ElggPlugin->getAllUserSettings()
+ * @return StdClass Object with all user settings.
+ */
+function find_plugin_usersettings($plugin_id = null, $user_guid = 0) {
+ elgg_deprecated_notice('find_plugin_usersettings() is deprecated by elgg_get_all_plugin_user_settings()', 1.8);
+ return elgg_get_all_plugin_user_settings($user_guid, $plugin_id, true);
+}
+
+/**
+ * Set a user specific setting for a plugin.
+ *
+ * @param string $name The name - note, can't be "title".
+ * @param mixed $value The value.
+ * @param int $user_guid Optional user.
+ * @param string $plugin_id Optional plugin name, if not specified then it
+ * is detected from where you are calling from.
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_set_plugin_user_setting() or ElggPlugin->setUserSetting()
+ */
+function set_plugin_usersetting($name, $value, $user_guid = 0, $plugin_id = "") {
+ elgg_deprecated_notice('find_plugin_usersettings() is deprecated by elgg_get_all_plugin_user_settings()', 1.8);
+ return elgg_set_plugin_user_setting($name, $value, $user_guid, $plugin_id);
+}
+
+/**
+ * Clears a user-specific plugin setting
+ *
+ * @param str $name Name of the plugin setting
+ * @param int $user_guid Defaults to logged in user
+ * @param str $plugin_id Defaults to contextual plugin name
+ *
+ * @deprecated 1.8 Use elgg_unset_plugin_user_setting or ElggPlugin->unsetUserSetting().
+ * @return bool Success
+ */
+function clear_plugin_usersetting($name, $user_guid = 0, $plugin_id = '') {
+ elgg_deprecated_notice('clear_plugin_usersetting() is deprecated by elgg_unset_plugin_usersetting()', 1.8);
+ return elgg_unset_plugin_user_setting($name, $user_guid, $plugin_id);
+}
+
+/**
+ * Get a user specific setting for a plugin.
+ *
+ * @param string $name The name.
+ * @param int $user_guid Guid of owning user
+ * @param string $plugin_id Optional plugin name, if not specified
+ * it is detected from where you are calling.
+ *
+ * @deprecated 1.8 Use elgg_get_plugin_user_setting() or ElggPlugin->getUserSetting()
+ * @return mixed
+ */
+function get_plugin_usersetting($name, $user_guid = 0, $plugin_id = "") {
+ elgg_deprecated_notice('get_plugin_usersetting() is deprecated by elgg_get_plugin_user_setting()', 1.8);
+ return elgg_get_plugin_user_setting($name, $user_guid, $plugin_id);
+}
+
+/**
+ * Set a setting for a plugin.
+ *
+ * @param string $name The name - note, can't be "title".
+ * @param mixed $value The value.
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @deprecated 1.8 Use elgg_set_plugin_setting() or ElggPlugin->setSetting()
+ * @return int|false
+ */
+function set_plugin_setting($name, $value, $plugin_id = null) {
+ elgg_deprecated_notice('set_plugin_setting() is deprecated by elgg_set_plugin_setting()', 1.8);
+ return elgg_set_plugin_setting($name, $value, $plugin_id);
+}
+
+/**
+ * Get setting for a plugin.
+ *
+ * @param string $name The name.
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @deprecated 1.8 Use elgg_get_plugin_setting() or ElggPlugin->getSetting()
+ * @return mixed
+ */
+function get_plugin_setting($name, $plugin_id = "") {
+ elgg_deprecated_notice('get_plugin_setting() is deprecated by elgg_get_plugin_setting()', 1.8);
+ return elgg_get_plugin_setting($name, $plugin_id);
+}
+
+/**
+ * Clear a plugin setting.
+ *
+ * @param string $name The name.
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @deprecated 1.8 Use elgg_unset_plugin_setting() or ElggPlugin->unsetSetting()
+ * @return bool
+ */
+function clear_plugin_setting($name, $plugin_id = "") {
+ elgg_deprecated_notice('clear_plugin_setting() is deprecated by elgg_unset_plugin_setting()', 1.8);
+ return elgg_unset_plugin_setting($name, $plugin_id);
+}
+
+/**
+ * Unsets all plugin settings for a plugin.
+ *
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_unset_all_plugin_settings() or ElggPlugin->unsetAllSettings()
+ * @since 1.7.0
+ */
+function clear_all_plugin_settings($plugin_id = "") {
+ elgg_deprecated_notice('clear_all_plugin_settings() is deprecated by elgg_unset_all_plugin_setting()', 1.8);
+ return elgg_unset_all_plugin_settings($plugin_id);
+}
+
+
+/**
+ * Get a list of annotations for a given object/user/annotation type.
+ *
+ * @param int|array $entity_guid GUID to return annotations of (falsey for any)
+ * @param string $entity_type Type of entity
+ * @param string $entity_subtype Subtype of entity
+ * @param string $name Name of annotation
+ * @param mixed $value Value of annotation
+ * @param int|array $owner_guid Owner(s) of annotation
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Order annotations by SQL
+ * @param int $timelower Lower time limit
+ * @param int $timeupper Upper time limit
+ * @param int $entity_owner_guid Owner guid for the entity
+ *
+ * @return array
+ * @deprecated 1.8 Use elgg_get_annotations()
+ */
+function get_annotations($entity_guid = 0, $entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "asc", $timelower = 0,
+$timeupper = 0, $entity_owner_guid = 0) {
+
+ elgg_deprecated_notice('get_annotations() is deprecated by elgg_get_annotations()', 1.8);
+ $options = array();
+
+ if ($entity_guid) {
+ $options['guid'] = $entity_guid;
+ }
+
+ if ($entity_type) {
+ $options['type'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtype'] = $entity_subtype;
+ }
+
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ if ($value) {
+ $options['annotation_value'] = $value;
+ }
+
+ if ($owner_guid) {
+ $options['annotation_owner_guid'] = $owner_guid;
+ }
+
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+
+ if ($order_by == 'desc') {
+ $options['order_by'] = 'n_table.time_created desc';
+ }
+
+ if ($timelower) {
+ $options['annotation_time_lower'] = $timelower;
+ }
+
+ if ($timeupper) {
+ $options['annotation_time_upper'] = $timeupper;
+ }
+
+ if ($entity_owner_guid) {
+ $options['owner_guid'] = $entity_owner_guid;
+ }
+
+ return elgg_get_annotations($options);
+}
+
+
+/**
+ * Returns a human-readable list of annotations on a particular entity.
+ *
+ * @param int $entity_guid The entity GUID
+ * @param string $name The name of the kind of annotation
+ * @param int $limit The number of annotations to display at once
+ * @param true|false $asc Display annotations in ascending order. (Default: true)
+ *
+ * @return string HTML (etc) version of the annotation list
+ * @deprecated 1.8 Use elgg_list_annotations()
+ */
+function list_annotations($entity_guid, $name = "", $limit = 25, $asc = true) {
+ elgg_deprecated_notice('list_annotations() is deprecated by elgg_list_annotations()', 1.8);
+
+ if ($asc) {
+ $asc = "asc";
+ } else {
+ $asc = "desc";
+ }
+
+ $options = array(
+ 'guid' => $entity_guid,
+ 'limit' => $limit,
+ 'order_by' => "n_table.time_created $asc"
+ );
+
+ return elgg_list_annotations($options);
+}
+
+/**
+ * Helper function to deprecate annotation calculation functions. Don't use.
+ *
+ * @param unknown_type $entity_guid
+ * @param unknown_type $entity_type
+ * @param unknown_type $entity_subtype
+ * @param unknown_type $name
+ * @param unknown_type $value
+ * @param unknown_type $value_type
+ * @param unknown_type $owner_guid
+ * @param unknown_type $timelower
+ * @param unknown_type $timeupper
+ * @param unknown_type $calculation
+ * @internal Don't use this at all.
+ */
+function elgg_deprecated_annotation_calculation($entity_guid = 0, $entity_type = "", $entity_subtype = "",
+$name = "", $value = "", $value_type = "", $owner_guid = 0, $timelower = 0,
+$timeupper = 0, $calculation = '') {
+
+ $options = array('annotation_calculation' => $calculation);
+
+ if ($entity_guid) {
+ $options['guid'] = $entity_guid;
+ }
+
+ if ($entity_type) {
+ $options['type'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtype'] = $entity_subtype;
+ }
+
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ if ($value) {
+ $options['annotation_value'] = $value;
+ }
+
+ if ($owner_guid) {
+ $options['annotation_owner_guid'] = $owner_guid;
+ }
+
+ if ($order_by == 'desc') {
+ $options['order_by'] = 'n_table.time_created desc';
+ }
+
+ if ($timelower) {
+ $options['annotation_time_lower'] = $timelower;
+ }
+
+ if ($timeupper) {
+ $options['annotation_time_upper'] = $timeupper;
+ }
+
+ return elgg_get_annotations($options);
+}
+
+/**
+ * Count the number of annotations based on search parameters
+ *
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ * @param int $timelower Lower time limit
+ * @param int $timeupper Upper time limit
+ *
+ * @deprecated 1.8 Use elgg_get_annotations() and pass 'count' => true
+ * @return int
+ */
+function count_annotations($entity_guid = 0, $entity_type = "", $entity_subtype = "",
+$name = "", $value = "", $value_type = "", $owner_guid = 0, $timelower = 0,
+$timeupper = 0) {
+ elgg_deprecated_notice('count_annotations() is deprecated by elgg_get_annotations() and passing "count" => true', 1.8);
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, 'count');
+}
+
+/**
+ * Return the sum of a given integer annotation.
+ *
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ *
+ * @deprecated 1.8 Use elgg_get_annotations() and pass 'annotation_calculation' => 'sum'
+ * @return int
+ */
+function get_annotations_sum($entity_guid, $entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $value_type = "", $owner_guid = 0) {
+ elgg_deprecated_notice('get_annotations_sum() is deprecated by elgg_get_annotations() and passing "annotation_calculation" => "sum"', 1.8);
+
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, 'sum');
+}
+
+/**
+ * Return the max of a given integer annotation.
+ *
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ *
+ * @deprecated 1.8 Use elgg_get_annotations() and pass 'annotation_calculation' => 'max'
+ * @return int
+ */
+function get_annotations_max($entity_guid, $entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $value_type = "", $owner_guid = 0) {
+ elgg_deprecated_notice('get_annotations_max() is deprecated by elgg_get_annotations() and passing "annotation_calculation" => "max"', 1.8);
+
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, 'max');
+}
+
+
+/**
+ * Return the minumum of a given integer annotation.
+ *
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ *
+ * @deprecated 1.8 Use elgg_get_annotations() and pass 'annotation_calculation' => 'min'
+ * @return int
+ */
+function get_annotations_min($entity_guid, $entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $value_type = "", $owner_guid = 0) {
+ elgg_deprecated_notice('get_annotations_min() is deprecated by elgg_get_annotations() and passing "annotation_calculation" => "min"', 1.8);
+
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, 'min');
+}
+
+
+/**
+ * Return the average of a given integer annotation.
+ *
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ *
+ * @deprecated 1.8 Use elgg_get_annotations() and pass 'annotation_calculation' => 'min'
+ *
+ * @return int
+ */
+function get_annotations_avg($entity_guid, $entity_type = "", $entity_subtype = "", $name = "",
+$value = "", $value_type = "", $owner_guid = 0) {
+ elgg_deprecated_notice('get_annotations_avg() is deprecated by elgg_get_annotations() and passing "annotation_calculation" => "avg"', 1.8);
+
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, 'avg');
+}
+
+
+/**
+ * Perform a mathmatical calculation on integer annotations.
+ *
+ * @param string $sum What sort of calculation to perform
+ * @param int $entity_guid Guid of Entity
+ * @param string $entity_type Type of Entity
+ * @param string $entity_subtype Subtype of Entity
+ * @param string $name Name of annotation
+ * @param string $value Value of annotation
+ * @param string $value_type Type of value
+ * @param int $owner_guid GUID of owner of annotation
+ * @param int $timelower Lower time limit
+ * @param int $timeupper Upper time limit
+ *
+ * @return int
+ * @deprecated 1.8 Use elgg_get_annotations() and pass anntoation_calculation => <calculation>
+ */
+function get_annotations_calculate_x($sum = "avg", $entity_guid, $entity_type = "",
+$entity_subtype = "", $name = "", $value = "", $value_type = "", $owner_guid = 0,
+$timelower = 0, $timeupper = 0) {
+ elgg_deprecated_notice('get_annotations_calculate_x() is deprecated by elgg_get_annotations() and passing "annotation_calculation" => "calculation"', 1.8);
+
+ return elgg_deprecated_annotation_calculation($entity_guid, $entity_type, $entity_subtype,
+ $name, $value, $value_type, $owner_guid, $timelower, $timeupper, $sum);
+}
+
+
+/**
+ * Lists entities by the totals of a particular kind of annotation AND
+ * the value of a piece of metadata
+ *
+ * @param string $entity_type Type of entity.
+ * @param string $entity_subtype Subtype of entity.
+ * @param string $name Name of annotation.
+ * @param string $mdname Metadata name
+ * @param string $mdvalue Metadata value
+ * @param int $limit Maximum number of results to return.
+ * @param int $owner_guid Owner.
+ * @param int $group_guid Group container. Currently only supported if entity_type is object
+ * @param boolean $asc Whether to list in ascending or descending order (default: desc)
+ * @param boolean $fullview Whether to display the entities in full
+ * @param boolean $listtypetoggle Can the 'gallery' view can be displayed (default: no)
+ * @param boolean $pagination Display pagination
+ * @param string $orderdir 'desc' or 'asc'
+ *
+ * @deprecated 1.8 Use elgg_list_entities_from_annotation_calculation().
+ *
+ * @return string Formatted entity list
+ */
+function list_entities_from_annotation_count_by_metadata($entity_type = "", $entity_subtype = "",
+$name = "", $mdname = '', $mdvalue = '', $limit = 10, $owner_guid = 0, $group_guid = 0,
+$asc = false, $fullview = true, $listtypetoggle = false, $pagination = true, $orderdir = 'desc') {
+
+ $msg = 'list_entities_from_annotation_count_by_metadata() is deprecated by elgg_list_entities_from_annotation_calculation().';
+
+ elgg_deprecated_notice($msg, 1.8);
+
+ $options = array();
+
+ $options['calculation'] = 'sum';
+
+ if ($entity_type) {
+ $options['types'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtypes'] = $entity_subtype;
+ }
+
+ $options['annotation_names'] = $name;
+
+ if ($mdname) {
+ $options['metadata_name'] = $mdname;
+ }
+
+ if ($mdvalue) {
+ $options['metadata_value'] = $mdvalue;
+ }
+
+ if ($owner_guid) {
+ if (is_array($owner_guid)) {
+ $options['owner_guids'] = $owner_guid;
+ } else {
+ $options['owner_guid'] = $owner_guid;
+ }
+ }
+
+ $options['full_view'] = $fullview;
+
+ $options['list_type_toggle'] = $listtypetoggle;
+
+ $options['pagination'] = $pagination;
+
+ $options['limit'] = $limit;
+
+ $options['order_by'] = "annotation_calculation $orderdir";
+
+ return elgg_get_entities_from_annotation_calculation($options);
+}
+
+/**
+ * Set an alternative base location for a view (as opposed to the default of $CONFIG->viewpath)
+ *
+ * @param string $view The name of the view
+ * @param string $location The base location path
+ *
+ * @deprecated 1.8 Use elgg_set_view_location()
+ */
+function set_view_location($view, $location, $viewtype = '') {
+ elgg_deprecated_notice("set_view_location() was deprecated by elgg_set_view_location()", 1.8);
+ return elgg_set_view_location($view, $location, $viewtype);
+}
+
+/**
+ * Sets the URL handler for a particular entity type and subtype
+ *
+ * @param string $function_name The function to register
+ * @param string $entity_type The entity type
+ * @param string $entity_subtype The entity subtype
+ * @return true|false Depending on success
+ *
+ * @deprecated 1.8 Use elgg_register_entity_url_handler()
+ */
+function register_entity_url_handler($function_name, $entity_type = "all", $entity_subtype = "all") {
+ elgg_deprecated_notice("register_entity_url_handler() was deprecated by elgg_register_entity_url_handler()", 1.8);
+ return elgg_register_entity_url_handler($entity_type, $entity_subtype, $function_name);
+}
+
+
+/**
+ * Get the metadata where the entities they are referring to match a given criteria.
+ *
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site GUID. 0 for current, -1 for any
+ *
+ * @return mixed
+ * @deprecated 1.8 Use elgg_get_metadata()
+ */
+function find_metadata($meta_name = "", $meta_value = "", $entity_type = "", $entity_subtype = "",
+ $limit = 10, $offset = 0, $order_by = "", $site_guid = 0) {
+
+ elgg_deprecated_notice('get_metadata() is deprecated by elgg_get_metadata()', 1.8);
+
+ $options = array();
+
+ if ($meta_name) {
+ $options['annotation_name'] = $meta_name;
+ }
+
+ if ($meta_value) {
+ $options['annotation_value'] = $meta_value;
+ }
+
+ if ($entity_type) {
+ $options['type'] = $entity_type;
+ }
+
+ if ($entity_subtype) {
+ $options['subtype'] = $entity_subtype;
+ }
+
+ $options['limit'] = $limit;
+ $options['offset'] = $offset;
+
+ if ($order_by == 'desc') {
+ $options['order_by'] = 'n_table.time_created desc';
+ }
+
+ if ($site_guid) {
+ $options['site_guid'] = $site_guid;
+ }
+
+ return elgg_get_metadata($options);
+}
+
+/**
+ * Get metadata objects by name.
+ *
+ * @param int $entity_guid Entity GUID
+ * @param string $meta_name Metadata name
+ *
+ * @return mixed ElggMetadata object, an array of ElggMetadata or false.
+ * @deprecated 1.8 Use elgg_get_metadata()
+ */
+function get_metadata_byname($entity_guid, $meta_name) {
+ elgg_deprecated_notice('get_metadata_byname() is deprecated by elgg_get_metadata()', 1.8);
+
+ if (!$entity_guid || !$meta_name) {
+ return false;
+ }
+
+ $options = array(
+ 'guid' => $entity_guid,
+ 'metadata_name' => $meta_name,
+ 'limit' => 0
+ );
+
+ $md = elgg_get_metadata($options);
+
+ if ($md && count($md) == 1) {
+ return $md[0];
+ }
+
+ return $md;
+}
+
+/**
+ * Return all the metadata for a given GUID.
+ *
+ * @param int $entity_guid Entity GUID
+ *
+ * @return mixed
+ * @deprecated 1.8 Use elgg_get_metadata()
+ */
+function get_metadata_for_entity($entity_guid) {
+ elgg_deprecated_notice('get_metadata_for_entity() is deprecated by elgg_get_metadata()', 1.8);
+
+ if (!$entity_guid) {
+ return false;
+ }
+
+ $options = array(
+ 'guid' => $entity_guid,
+ 'limit' => 0
+ );
+
+ return elgg_get_metadata($options);
+}
+
+/**
+ * Get a specific metadata object.
+ *
+ * @param int $id The id of the metadata being retrieved.
+ *
+ * @return mixed False on failure or ElggMetadata
+ * @deprecated 1.8 Use elgg_get_metadata_from_id()
+ */
+function get_metadata($id) {
+ elgg_deprecated_notice('get_metadata() is deprecated by elgg_get_metadata_from_id()', 1.8);
+ return elgg_get_metadata_from_id($id);
+}
+
+/**
+ * Clear all the metadata for a given entity, assuming you have access to that entity.
+ *
+ * @param int $guid Entity GUID
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_delete_metadata()
+ */
+function clear_metadata($guid) {
+ elgg_deprecated_notice('clear_metadata() is deprecated by elgg_delete_metadata()', 1.8);
+ if (!$guid) {
+ return false;
+ }
+ return elgg_delete_metadata(array('guid' => $guid, 'limit' => 0));
+}
+
+/**
+ * Clear all metadata belonging to a given owner_guid
+ *
+ * @param int $owner_guid The owner
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_delete_metadata()
+ */
+function clear_metadata_by_owner($owner_guid) {
+ elgg_deprecated_notice('clear_metadata() is deprecated by elgg_delete_metadata()', 1.8);
+ if (!$owner_guid) {
+ return false;
+ }
+ return elgg_delete_metadata(array('metadata_owner_guid' => $owner_guid, 'limit' => 0));
+}
+
+/**
+ * Delete a piece of metadata, where the current user has access.
+ *
+ * @param int $id The id of metadata to delete.
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_delete_metadata()
+ */
+function delete_metadata($id) {
+ elgg_deprecated_notice('delete_metadata() is deprecated by elgg_delete_metadata()', 1.8);
+ if (!$id) {
+ return false;
+ }
+ return elgg_delete_metadata(array('metadata_id' => $id));
+}
+
+/**
+ * Removes metadata on an entity with a particular name, optionally with a given value.
+ *
+ * @param int $guid The entity GUID
+ * @param string $name The name of the metadata
+ * @param string $value The value of the metadata (useful to remove a single item of a set)
+ *
+ * @return bool Depending on success
+ * @deprecated 1.8 Use elgg_delete_metadata()
+ */
+function remove_metadata($guid, $name, $value = "") {
+ elgg_deprecated_notice('delete_metadata() is deprecated by elgg_delete_metadata()', 1.8);
+
+ // prevent them from deleting everything
+ if (!$guid) {
+ return false;
+ }
+
+ $options = array(
+ 'guid' => $guid,
+ 'metadata_name' => $name,
+ 'limit' => 0
+ );
+
+ if ($value) {
+ $options['metadata_value'] = $value;
+ }
+
+ return elgg_delete_metadata($options);
+}
+
+/**
+ * Get a specific annotation.
+ *
+ * @param int $annotation_id Annotation ID
+ *
+ * @return ElggAnnotation
+ * @deprecated 1.8 Use elgg_get_annotation_from_id()
+ */
+function get_annotation($annotation_id) {
+ elgg_deprecated_notice('get_annotation() is deprecated by elgg_get_annotation_from_id()', 1.8);
+ return elgg_get_annotation_from_id($annotation_id);
+}
+
+/**
+ * Delete a given annotation.
+ *
+ * @param int $id The annotation id
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_delete_annotations()
+ */
+function delete_annotation($id) {
+ elgg_deprecated_notice('delete_annotation() is deprecated by elgg_delete_annotations()', 1.8);
+ if (!$id) {
+ return false;
+ }
+ return elgg_delete_annotations(array('annotation_id' => $annotation_id));
+}
+
+/**
+ * Clear all the annotations for a given entity, assuming you have access to that metadata.
+ *
+ * @param int $guid The entity guid
+ * @param string $name The name of the annotation to delete.
+ *
+ * @return int Number of annotations deleted or false if an error
+ * @deprecated 1.8 Use elgg_delete_annotations()
+ */
+function clear_annotations($guid, $name = "") {
+ elgg_deprecated_notice('clear_annotations() is deprecated by elgg_delete_annotations()', 1.8);
+
+ if (!$guid) {
+ return false;
+ }
+
+ $options = array(
+ 'guid' => $guid,
+ 'limit' => 0
+ );
+
+ if ($name) {
+ $options['annotation_name'] = $name;
+ }
+
+ return elgg_delete_annotations($options);
+}
+
+/**
+ * Clear all annotations belonging to a given owner_guid
+ *
+ * @param int $owner_guid The owner
+ *
+ * @return int Number of annotations deleted
+ * @deprecated 1.8 Use elgg_delete_annotations()
+ */
+function clear_annotations_by_owner($owner_guid) {
+ elgg_deprecated_notice('clear_annotations_by_owner() is deprecated by elgg_delete_annotations()', 1.8);
+
+ if (!$owner_guid) {
+ return false;
+ }
+
+ $options = array(
+ 'annotation_owner_guid' => $guid,
+ 'limit' => 0
+ );
+
+ return elgg_delete_annotations($options);
+}
+
+/**
+ * Registers a page handler for a particular identifier
+ *
+ * For example, you can register a function called 'blog_page_handler' for handler type 'blog'
+ * Now for all URLs of type http://yoururl/pg/blog/*, the blog_page_handler() function will be called.
+ * The part of the URL marked with * above will be exploded on '/' characters and passed as an
+ * array to that function.
+ * For example, the URL http://yoururl/blog/username/friends/ would result in the call:
+ * blog_page_handler(array('username','friends'), blog);
+ *
+ * Page handler functions should return true or the default page handler will be called.
+ *
+ * A request to register a page handler with the same identifier as previously registered
+ * handler will replace the previous one.
+ *
+ * The context is set to the page handler identifier before the registered
+ * page handler function is called. For the above example, the context is set to 'blog'.
+ *
+ * @param string $handler The page type to handle
+ * @param string $function Your function name
+ * @return true|false Depending on success
+ *
+ * @deprecated 1.8 Use {@link elgg_register_page_handler()}
+ */
+function register_page_handler($handler, $function){
+ elgg_deprecated_notice("register_page_handler() was deprecated by elgg_register_page_handler()", 1.8);
+ return elgg_register_page_handler($handler, $function);
+}
+
+/**
+ * Unregister a page handler for an identifier
+ *
+ * Note: to replace a page handler, call register_page_handler()
+ *
+ * @param string $handler The page type identifier
+ * @since 1.7.2
+ *
+ * @deprecated 1.8 Use {@link elgg_unregister_page_handler()}
+ */
+function unregister_page_handler($handler) {
+ elgg_deprecated_notice("unregister_page_handler() was deprecated by elgg_unregister_page_handler()", 1.8);
+ return elgg_unregister_page_handler($handler);
+}
+
+/**
+ * Register an annotation url handler.
+ *
+ * @param string $function_name The function.
+ * @param string $extender_name The name, default 'all'.
+ *
+ * @deprecated 1.8 Use {@link elgg_register_annotation_url_handler()}
+ */
+function register_annotation_url_handler($function, $extender_name) {
+ elgg_deprecated_notice("register_annotation_url_handler() was deprecated by elgg_register_annotation_url_handler()", 1.8);
+ return elgg_register_annotation_url_handler($extender_name, $function);
+}
+
+/**
+ * Sets the URL handler for a particular extender type and name.
+ * It is recommended that you do not call this directly, instead use one of the wrapper functions in the
+ * subtype files.
+ *
+ * @param string $function_name The function to register
+ * @param string $extender_type Extender type
+ * @param string $extender_name The name of the extender
+ * @return true|false Depending on success
+ *
+ * @deprecated 1.8 Use {@link elgg_register_extender_url_handler()}
+ */
+function register_extender_url_handler($function, $type = "all", $name = "all") {
+ elgg_deprecated_notice("register_extender_url_handler() was deprecated by elgg_register_extender_url_handler()", 1.8);
+ return elgg_register_extender_url_handler($type, $name, $function);
+}
+
+/**
+ * Registers and entity type and subtype to return in search and other places.
+ * A description in the elgg_echo languages file of the form item:type:subtype
+ * is also expected.
+ *
+ * @param string $type The type of entity (object, site, user, group)
+ * @param string $subtype The subtype to register (may be blank)
+ * @return true|false Depending on success
+ *
+ * @deprecated 1.8 Use {@link elgg_register_entity_type()}
+ */
+function register_entity_type($type, $subtype = null) {
+ elgg_deprecated_notice("register_entity_type() was deprecated by elgg_register_entity_type()", 1.8);
+ return elgg_register_entity_type($type, $subtype);
+}
+
+/**
+ * Register a metadata url handler.
+ *
+ * @param string $function_name The function.
+ * @param string $extender_name The name, default 'all'.
+ *
+ * @deprecated 1.8 Use {@link elgg_register_metadata_url_handler()}
+ */
+function register_metadata_url_handler($function, $extender_name = "all") {
+ return elgg_register_metadata_url_handler($extender_name, $function);
+}
+
+/**
+ * Sets the URL handler for a particular relationship type
+ *
+ * @param string $function_name The function to register
+ * @param string $relationship_type The relationship type.
+ * @return true|false Depending on success
+ *
+ * @deprecated 1.8 Use {@link elgg_register_relationship_url_handler()}
+ */
+function register_relationship_url_handler($function_name, $relationship_type = "all") {
+ elgg_deprecated_notice("register_relationship_url_handler() was deprecated by elgg_register_relationship_url_handler()", 1.8);
+ return elgg_register_relationship_url_handler($relationship_type, $function_name);
+}
+
+/**
+ * Registers a view to be simply cached
+ *
+ * Views cached in this manner must take no parameters and be login agnostic -
+ * that is to say, they look the same no matter who is logged in (or logged out).
+ *
+ * CSS and the basic jS views are automatically cached like this.
+ *
+ * @param string $viewname View name
+ *
+ * @deprecated 1.8 Use {@link elgg_register_simplecache_view()}
+ */
+function elgg_view_register_simplecache($viewname) {
+ elgg_deprecated_notice("elgg_view_register_simplecache() was deprecated by elgg_register_simplecache_view()", 1.8);
+ return elgg_register_simplecache_view($viewname);
+}
+
+/**
+ * Regenerates the simple cache.
+ *
+ * @param string $viewtype Optional viewtype to regenerate
+ * @see elgg_view_register_simplecache()
+ *
+ * @deprecated 1.8 Use {@link elgg_regenerate_simplecache()}
+ */
+function elgg_view_regenerate_simplecache($viewtype = NULL) {
+ elgg_deprecated_notice("elgg_view_regenerate_simplecache() was deprecated by elgg_regenerate_simplecache()", 1.8);
+ return elgg_regenerate_simplecache($viewtype);
+}
+
+/**
+ * Enables the simple cache.
+ *
+ * @see elgg_view_register_simplecache()
+ *
+ * @deprecated 1.8 Use {@link elgg_enable_simplecache()}
+ */
+function elgg_view_enable_simplecache() {
+ elgg_deprecated_notice("elgg_view_enable_simplecache() was deprecated by elgg_enable_simplecache()", 1.8);
+ return elgg_enable_simplecache();
+}
+
+/**
+ * Disables the simple cache.
+ *
+ * @see elgg_view_register_simplecache()
+ *
+ * @deprecated 1.8 Use {@link elgg_disable_simplecache()}
+ */
+function elgg_view_disable_simplecache() {
+ elgg_deprecated_notice("elgg_view_disable_simplecache() was deprecated by elgg_disable_simplecache()", 1.8);
+ return elgg_disable_simplecache();
+}
+
+// these were internal functions that perhaps can be removed rather than deprecated
+/**
+ * @deprecated 1.8
+ */
+function is_db_installed() {
+ elgg_deprecated_notice('is_db_installed() has been deprecated', 1.8);
+ return true;
+}
+
+/**
+ * @deprecated 1.8
+ */
+function is_installed() {
+ elgg_deprecated_notice('is_installed() has been deprecated', 1.8);
+ return true;
+}
+
+/**
+ * Attempt to authenticate.
+ * This function will process all registered PAM handlers or stop when the first
+ * handler fails. A handler fails by either returning false or throwing an
+ * exception. The advantage of throwing an exception is that it returns a message
+ * through the global $_PAM_HANDLERS_MSG which can be used in communication with
+ * a user. The order that handlers are processed is determined by the order that
+ * they were registered.
+ *
+ * If $credentials are provided the PAM handler should authenticate using the
+ * provided credentials, if not then credentials should be prompted for or
+ * otherwise retrieved (eg from the HTTP header or $_SESSION).
+ *
+ * @param mixed $credentials Mixed PAM handler specific credentials (e.g. username, password)
+ * @param string $policy - the policy type, default is "user"
+ * @return bool true if authenticated, false if not.
+ *
+ * @deprecated 1.8 See {@link ElggPAM}
+ */
+function pam_authenticate($credentials = NULL, $policy = "user") {
+ elgg_deprecated_notice('pam_authenticate has been deprecated for ElggPAM', 1.8);
+ global $_PAM_HANDLERS, $_PAM_HANDLERS_MSG;
+
+ $_PAM_HANDLERS_MSG = array();
+
+ $authenticated = false;
+
+ foreach ($_PAM_HANDLERS[$policy] as $k => $v) {
+ $handler = $v->handler;
+ $importance = $v->importance;
+
+ try {
+ // Execute the handler
+ if ($handler($credentials)) {
+ // Explicitly returned true
+ $_PAM_HANDLERS_MSG[$k] = "Authenticated!";
+
+ $authenticated = true;
+ } else {
+ $_PAM_HANDLERS_MSG[$k] = "Not Authenticated.";
+
+ // If this is required then abort.
+ if ($importance == 'required') {
+ return false;
+ }
+ }
+ } catch (Exception $e) {
+ $_PAM_HANDLERS_MSG[$k] = "$e";
+
+ // If this is required then abort.
+ if ($importance == 'required') {
+ return false;
+ }
+ }
+ }
+
+ return $authenticated;
+}
+
+
+/**
+ * When given a widget entity and a new requested location, saves the new location
+ * and also provides a sensible ordering for all widgets in that column
+ *
+ * @param ElggObject $widget The widget entity
+ * @param int $order The order within the column
+ * @param int $column The column (1, 2 or 3)
+ *
+ * @return bool Depending on success
+ * @deprecated 1.8 use ElggWidget::move()
+ */
+function save_widget_location(ElggObject $widget, $order, $column) {
+ elgg_deprecated_notice('save_widget_location() is deprecated', 1.8);
+ if ($widget instanceof ElggObject) {
+ if ($widget->subtype == "widget") {
+ // If you can't move the widget, don't save a new location
+ if (!$widget->draggable) {
+ return false;
+ }
+
+ // Sanitise the column value
+ if ($column != 1 || $column != 2 || $column != 3) {
+ $column = 1;
+ }
+
+ $widget->column = (int) $column;
+
+ $ordertmp = array();
+ $params = array(
+ 'context' => $widget->context,
+ 'column' => $column,
+ );
+
+ if ($entities = get_entities_from_metadata_multi($params, 'object', 'widget')) {
+ foreach ($entities as $entity) {
+ $entityorder = $entity->order;
+ if ($entityorder < $order) {
+ $ordertmp[$entityorder] = $entity;
+ }
+ if ($entityorder >= $order) {
+ $ordertmp[$entityorder + 10000] = $entity;
+ }
+ }
+ }
+
+ $ordertmp[$order] = $widget;
+ ksort($ordertmp);
+
+ $orderticker = 10;
+ foreach ($ordertmp as $orderval => $entity) {
+ $entity->order = $orderticker;
+ $orderticker += 10;
+ }
+
+ return true;
+ } else {
+ register_error($widget->subtype);
+ }
+
+ }
+
+ return false;
+}
+
+/**
+ * Get widgets for a particular context and column, in order of display
+ *
+ * @param int $user_guid The owner user GUID
+ * @param string $context The context (profile, dashboard etc)
+ * @param int $column The column (1 or 2)
+ *
+ * @return array|false An array of widget ElggObjects, or false
+ * @deprecated 1.8 Use elgg_get_widgets()
+ */
+function get_widgets($user_guid, $context, $column) {
+ elgg_deprecated_notice('get_widgets is depecated for elgg_get_widgets', 1.8);
+ $params = array(
+ 'column' => $column,
+ 'context' => $context
+ );
+ $widgets = get_entities_from_private_setting_multi($params, "object",
+ "widget", $user_guid, "", 10000);
+
+ if ($widgets) {
+ $widgetorder = array();
+ foreach ($widgets as $widget) {
+ $order = $widget->order;
+ while (isset($widgetorder[$order])) {
+ $order++;
+ }
+ $widgetorder[$order] = $widget;
+ }
+
+ ksort($widgetorder);
+
+ return $widgetorder;
+ }
+
+ return false;
+}
+
+/**
+ * Add a new widget instance
+ *
+ * @param int $entity_guid GUID of entity that owns this widget
+ * @param string $handler The handler for this widget
+ * @param string $context The page context for this widget
+ * @param int $order The order to display this widget in
+ * @param int $column The column to display this widget in (1, 2 or 3)
+ * @param int $access_id If not specified, it is set to the default access level
+ *
+ * @return int|false Widget GUID or false on failure
+ * @deprecated 1.8 use elgg_create_widget()
+ */
+function add_widget($entity_guid, $handler, $context, $order = 0, $column = 1, $access_id = null) {
+ elgg_deprecated_notice('add_widget has been deprecated for elgg_create_widget', 1.8);
+ if (empty($entity_guid) || empty($context) || empty($handler) || !widget_type_exists($handler)) {
+ return false;
+ }
+
+ if ($entity = get_entity($entity_guid)) {
+ $widget = new ElggWidget;
+ $widget->owner_guid = $entity_guid;
+ $widget->container_guid = $entity_guid;
+ if (isset($access_id)) {
+ $widget->access_id = $access_id;
+ } else {
+ $widget->access_id = get_default_access();
+ }
+
+ $guid = $widget->save();
+
+ // private settings cannot be set until ElggWidget saved
+ $widget->handler = $handler;
+ $widget->context = $context;
+ $widget->column = $column;
+ $widget->order = $order;
+
+ return $guid;
+ }
+
+ return false;
+}
+
+/**
+ * Define a new widget type
+ *
+ * @param string $handler The identifier for the widget handler
+ * @param string $name The name of the widget type
+ * @param string $description A description for the widget type
+ * @param string $context A comma-separated list of contexts where this
+ * widget is allowed (default: 'all')
+ * @param bool $multiple Whether or not multiple instances of this widget
+ * are allowed on a single dashboard (default: false)
+ * @param string $positions A comma-separated list of positions on the page
+ * (side or main) where this widget is allowed (default: "side,main")
+ *
+ * @return bool Depending on success
+ * @deprecated 1.8 Use elgg_register_widget_type
+ */
+function add_widget_type($handler, $name, $description, $context = "all",
+$multiple = false, $positions = "side,main") {
+ elgg_deprecated_notice("add_widget_type deprecated for elgg_register_widget_type", 1.8);
+
+ return elgg_register_widget_type($handler, $name, $description, $context, $multiple);
+}
+
+/**
+ * Remove a widget type
+ *
+ * @param string $handler The identifier for the widget handler
+ *
+ * @return void
+ * @since 1.7.1
+ * @deprecated 1.8 Use elgg_unregister_widget_type
+ */
+function remove_widget_type($handler) {
+ elgg_deprecated_notice("remove_widget_type deprecated for elgg_unregister_widget_type", 1.8);
+ return elgg_unregister_widget_type($handler);
+}
+
+/**
+ * Determines whether or not widgets with the specified handler have been defined
+ *
+ * @param string $handler The widget handler identifying string
+ *
+ * @return bool Whether or not those widgets exist
+ * @deprecated 1.8 Use elgg_is_widget_type
+ */
+function widget_type_exists($handler) {
+ elgg_deprecated_notice("widget_type_exists deprecated for elgg_is_widget_type", 1.8);
+ return elgg_is_widget_type($handler);
+}
+
+/**
+ * Returns an array of stdClass objects representing the defined widget types
+ *
+ * @return array A list of types defined (if any)
+ * @deprecated 1.8 Use elgg_get_widget_types
+ */
+function get_widget_types() {
+ elgg_deprecated_notice("get_widget_types deprecrated for elgg_get_widget_types", 1.8);
+ return elgg_get_widget_types();
+}
+
+/**
+ * Saves a widget's settings (by passing an array of
+ * (name => value) pairs to save_{$handler}_widget)
+ *
+ * @param int $widget_guid The GUID of the widget we're saving to
+ * @param array $params An array of name => value parameters
+ *
+ * @return bool
+ * @deprecated 1.8 Use elgg_save_widget_settings
+ */
+function save_widget_info($widget_guid, $params) {
+ elgg_deprecated_notice("save_widget_info() is deprecated for elgg_save_widget_settings", 1.8);
+ if ($widget = get_entity($widget_guid)) {
+
+ $subtype = $widget->getSubtype();
+
+ if ($subtype != "widget") {
+ return false;
+ }
+ $handler = $widget->handler;
+ if (empty($handler) || !widget_type_exists($handler)) {
+ return false;
+ }
+
+ if (!$widget->canEdit()) {
+ return false;
+ }
+
+ // Save the params to the widget
+ if (is_array($params) && sizeof($params) > 0) {
+ foreach ($params as $name => $value) {
+
+ if (!empty($name) && !in_array($name, array(
+ 'guid', 'owner_guid', 'site_guid'
+ ))) {
+ if (is_array($value)) {
+ // @todo Handle arrays securely
+ $widget->setMetaData($name, $value, "", true);
+ } else {
+ $widget->$name = $value;
+ }
+ }
+ }
+ $widget->save();
+ }
+
+ $function = "save_{$handler}_widget";
+ if (is_callable($function)) {
+ return $function($params);
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Reorders the widgets from a widget panel
+ *
+ * @param string $panelstring1 String of guids of ElggWidget objects separated by ::
+ * @param string $panelstring2 String of guids of ElggWidget objects separated by ::
+ * @param string $panelstring3 String of guids of ElggWidget objects separated by ::
+ * @param string $context Profile or dashboard
+ * @param int $owner Owner guid
+ *
+ * @return void
+ * @deprecated 1.8 Don't use.
+ */
+function reorder_widgets_from_panel($panelstring1, $panelstring2, $panelstring3, $context, $owner) {
+ elgg_deprecated_notice("reorder_widgets_from_panel() is deprecated", 1.8);
+ $return = true;
+
+ $mainwidgets = explode('::', $panelstring1);
+ $sidewidgets = explode('::', $panelstring2);
+ $rightwidgets = explode('::', $panelstring3);
+
+ $handlers = array();
+ $guids = array();
+
+ if (is_array($mainwidgets) && sizeof($mainwidgets) > 0) {
+ foreach ($mainwidgets as $widget) {
+
+ $guid = (int) $widget;
+
+ if ("{$guid}" == "{$widget}") {
+ $guids[1][] = $widget;
+ } else {
+ $handlers[1][] = $widget;
+ }
+ }
+ }
+ if (is_array($sidewidgets) && sizeof($sidewidgets) > 0) {
+ foreach ($sidewidgets as $widget) {
+
+ $guid = (int) $widget;
+
+ if ("{$guid}" == "{$widget}") {
+ $guids[2][] = $widget;
+ } else {
+ $handlers[2][] = $widget;
+ }
+
+ }
+ }
+ if (is_array($rightwidgets) && sizeof($rightwidgets) > 0) {
+ foreach ($rightwidgets as $widget) {
+
+ $guid = (int) $widget;
+
+ if ("{$guid}" == "{$widget}") {
+ $guids[3][] = $widget;
+ } else {
+ $handlers[3][] = $widget;
+ }
+
+ }
+ }
+
+ // Reorder existing widgets or delete ones that have vanished
+ foreach (array(1, 2, 3) as $column) {
+ if ($dbwidgets = get_widgets($owner, $context, $column)) {
+
+ foreach ($dbwidgets as $dbwidget) {
+ if (in_array($dbwidget->getGUID(), $guids[1])
+ || in_array($dbwidget->getGUID(), $guids[2]) || in_array($dbwidget->getGUID(), $guids[3])) {
+
+ if (in_array($dbwidget->getGUID(), $guids[1])) {
+ $pos = array_search($dbwidget->getGUID(), $guids[1]);
+ $col = 1;
+ } else if (in_array($dbwidget->getGUID(), $guids[2])) {
+ $pos = array_search($dbwidget->getGUID(), $guids[2]);
+ $col = 2;
+ } else {
+ $pos = array_search($dbwidget->getGUID(), $guids[3]);
+ $col = 3;
+ }
+ $pos = ($pos + 1) * 10;
+ $dbwidget->column = $col;
+ $dbwidget->order = $pos;
+ } else {
+ $dbguid = $dbwidget->getGUID();
+ if (!$dbwidget->delete()) {
+ $return = false;
+ } else {
+ // Remove state cookie
+ setcookie('widget' + $dbguid, null);
+ }
+ }
+ }
+
+ }
+ // Add new ones
+ if (sizeof($guids[$column]) > 0) {
+ foreach ($guids[$column] as $key => $guid) {
+ if ($guid == 0) {
+ $pos = ($key + 1) * 10;
+ $handler = $handlers[$column][$key];
+ if (!add_widget($owner, $handler, $context, $pos, $column)) {
+ $return = false;
+ }
+ }
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Register a particular context for use with widgets.
+ *
+ * @param string $context The context we wish to enable context for
+ *
+ * @return void
+ * @deprecated 1.8 Don't use.
+ */
+function use_widgets($context) {
+ elgg_deprecated_notice("use_widgets is deprecated", 1.8);
+ global $CONFIG;
+
+ if (!isset($CONFIG->widgets)) {
+ $CONFIG->widgets = new stdClass;
+ }
+
+ if (!isset($CONFIG->widgets->contexts)) {
+ $CONFIG->widgets->contexts = array();
+ }
+
+ if (!empty($context)) {
+ $CONFIG->widgets->contexts[] = $context;
+ }
+}
+
+/**
+ * Determines whether or not the current context is using widgets
+ *
+ * @return bool Depending on widget status
+ * @deprecated 1.8 Don't use.
+ */
+function using_widgets() {
+ elgg_deprecated_notice("using_widgets is deprecated", 1.8);
+ global $CONFIG;
+
+ $context = elgg_get_context();
+ if (isset($CONFIG->widgets->contexts) && is_array($CONFIG->widgets->contexts)) {
+ if (in_array($context, $CONFIG->widgets->contexts)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Displays a particular widget
+ *
+ * @param ElggObject $widget The widget to display
+ * @return string The HTML for the widget, including JavaScript wrapper
+ *
+ * @deprecated 1.8 Use elgg_view_entity()
+ */
+function display_widget(ElggObject $widget) {
+ elgg_deprecated_notice("display_widget() was been deprecated. Use elgg_view_entity().", 1.8);
+ return elgg_view_entity($widget);
+}
+
+/**
+ * Count the number of comments attached to an entity
+ *
+ * @param ElggEntity $entity
+ * @return int Number of comments
+ */
+function elgg_count_comments($entity) {
+ elgg_deprecated_notice('elgg_count_comments() is deprecated by ElggEntity->countComments()', 1.8);
+
+ if ($entity instanceof ElggEntity) {
+ return $entity->countComments();
+ }
+
+ return 0;
+}
+
+/**
+ * Removes all items relating to a particular acting entity from the river
+ *
+ * @param int $subject_guid The GUID of the entity
+ *
+ * @return bool Depending on success
+ * @deprecated 1.8 Use elgg_delete_river()
+ */
+function remove_from_river_by_subject($subject_guid) {
+ elgg_deprecated_notice("remove_from_river_by_subject() deprecated by elgg_delete_river()", 1.8);
+
+ return elgg_delete_river(array('subject_guid' => $subject_guid));
+}
+
+/**
+ * Removes all items relating to a particular entity being acted upon from the river
+ *
+ * @param int $object_guid The GUID of the entity
+ *
+ * @return bool Depending on success
+ * @deprecated 1.8 Use elgg_delete_river()
+ */
+function remove_from_river_by_object($object_guid) {
+ elgg_deprecated_notice("remove_from_river_by_object() deprecated by elgg_delete_river()", 1.8);
+
+ return elgg_delete_river(array('object_guid' => $object_guid));
+}
+
+/**
+ * Removes all items relating to a particular annotation being acted upon from the river
+ *
+ * @param int $annotation_id The ID of the annotation
+ *
+ * @return bool Depending on success
+ * @since 1.7.0
+ * @deprecated 1.8 Use elgg_delete_river()
+ */
+function remove_from_river_by_annotation($annotation_id) {
+ elgg_deprecated_notice("remove_from_river_by_annotation() deprecated by elgg_delete_river()", 1.8);
+
+ return elgg_delete_river(array('annotation_id' => $annotation_id));
+}
+
+/**
+ * Removes a single river entry
+ *
+ * @param int $id The ID of the river entry
+ *
+ * @return bool Depending on success
+ * @since 1.7.2
+ * @deprecated 1.8 Use elgg_delete_river()
+ */
+function remove_from_river_by_id($id) {
+ elgg_deprecated_notice("remove_from_river_by_id() deprecated by elgg_delete_river()", 1.8);
+
+ return elgg_delete_river(array('id' => $id));
+}
+
+/**
+ * A default page handler
+ * Tries to locate a suitable file to include. Only works for core pages, not plugins.
+ *
+ * @param array $page The page URL elements
+ * @param string $handler The base handler
+ *
+ * @return true|false Depending on success
+ * @deprecated 1.8
+ */
+function default_page_handler($page, $handler) {
+ global $CONFIG;
+
+ elgg_deprecated_notice("default_page_handler is deprecated", "1.8");
+
+ $page = implode('/', $page);
+
+ // protect against including arbitary files
+ $page = str_replace("..", "", $page);
+
+ $callpath = $CONFIG->path . $handler . "/" . $page;
+ if (is_dir($callpath)) {
+ $callpath = sanitise_filepath($callpath);
+ $callpath .= "index.php";
+ if (file_exists($callpath)) {
+ if (include($callpath)) {
+ return TRUE;
+ }
+ }
+ } else if (file_exists($callpath)) {
+ include($callpath);
+ return TRUE;
+ }
+
+ return FALSE;
+}
diff --git a/engine/lib/deprecated-1.9.php b/engine/lib/deprecated-1.9.php
new file mode 100644
index 000000000..31d03428f
--- /dev/null
+++ b/engine/lib/deprecated-1.9.php
@@ -0,0 +1,582 @@
+<?php
+/**
+ * Return a timestamp for the start of a given day (defaults today).
+ *
+ * @param int $day Day
+ * @param int $month Month
+ * @param int $year Year
+ *
+ * @return int
+ * @access private
+ * @deprecated 1.9
+ */
+function get_day_start($day = null, $month = null, $year = null) {
+ elgg_deprecated_notice('get_day_start() has been deprecated', 1.9);
+ return mktime(0, 0, 0, $month, $day, $year);
+}
+
+/**
+ * Return a timestamp for the end of a given day (defaults today).
+ *
+ * @param int $day Day
+ * @param int $month Month
+ * @param int $year Year
+ *
+ * @return int
+ * @access private
+ * @deprecated 1.9
+ */
+function get_day_end($day = null, $month = null, $year = null) {
+ elgg_deprecated_notice('get_day_end() has been deprecated', 1.9);
+ return mktime(23, 59, 59, $month, $day, $year);
+}
+
+/**
+ * Return the notable entities for a given time period.
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count Set to true to get a count instead of entities. Defaults to false.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param mixed $container_guid Container or containers to get entities from (default: any).
+ *
+ * @return array|false
+ * @access private
+ * @deprecated 1.9
+ */
+function get_notable_entities($start_time, $end_time, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "asc", $limit = 10, $offset = 0, $count = false, $site_guid = 0,
+$container_guid = null) {
+ elgg_deprecated_notice('get_notable_entities() has been deprecated', 1.9);
+ global $CONFIG;
+
+ if ($subtype === false || $subtype === null || $subtype === 0) {
+ return false;
+ }
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $order_by = sanitise_string($order_by);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ $where = array();
+
+ if (is_array($type)) {
+ $tempwhere = "";
+ if (sizeof($type)) {
+ foreach ($type as $typekey => $subtypearray) {
+ foreach ($subtypearray as $subtypeval) {
+ $typekey = sanitise_string($typekey);
+ if (!empty($subtypeval)) {
+ $subtypeval = (int) get_subtype_id($typekey, $subtypeval);
+ } else {
+ $subtypeval = 0;
+ }
+ if (!empty($tempwhere)) {
+ $tempwhere .= " or ";
+ }
+ $tempwhere .= "(e.type = '{$typekey}' and e.subtype = {$subtypeval})";
+ }
+ }
+ }
+ if (!empty($tempwhere)) {
+ $where[] = "({$tempwhere})";
+ }
+ } else {
+ $type = sanitise_string($type);
+ $subtype = get_subtype_id($type, $subtype);
+
+ if ($type != "") {
+ $where[] = "e.type='$type'";
+ }
+
+ if ($subtype !== "") {
+ $where[] = "e.subtype=$subtype";
+ }
+ }
+
+ if ($owner_guid != "") {
+ if (!is_array($owner_guid)) {
+ $owner_array = array($owner_guid);
+ $owner_guid = (int) $owner_guid;
+ $where[] = "e.owner_guid = '$owner_guid'";
+ } else if (sizeof($owner_guid) > 0) {
+ $owner_array = array_map('sanitise_int', $owner_guid);
+ // Cast every element to the owner_guid array to int
+ $owner_guid = implode(",", $owner_guid);
+ $where[] = "e.owner_guid in ({$owner_guid})";
+ }
+ if (is_null($container_guid)) {
+ $container_guid = $owner_array;
+ }
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if (!is_null($container_guid)) {
+ if (is_array($container_guid)) {
+ foreach ($container_guid as $key => $val) {
+ $container_guid[$key] = (int) $val;
+ }
+ $where[] = "e.container_guid in (" . implode(",", $container_guid) . ")";
+ } else {
+ $container_guid = (int) $container_guid;
+ $where[] = "e.container_guid = {$container_guid}";
+ }
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+
+ if (!$count) {
+ $query = "SELECT e.* from {$CONFIG->dbprefix}entities e $cal_join where ";
+ } else {
+ $query = "SELECT count(e.guid) as total from {$CONFIG->dbprefix}entities e $cal_join where ";
+ }
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ $query .= get_access_sql_suffix('e'); // Add access controls
+
+ if (!$count) {
+ $query .= " order by n.calendar_start $order_by";
+ // Add order and limit
+ if ($limit) {
+ $query .= " limit $offset, $limit";
+ }
+ $dt = get_data($query, "entity_row_to_elggstar");
+
+ return $dt;
+ } else {
+ $total = get_data_row($query);
+ return $total->total;
+ }
+}
+
+/**
+ * Return the notable entities for a given time period based on an item of metadata.
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param bool $count If true, returns count instead of entities. (Default: false)
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ * @access private
+ * @deprecated 1.9
+ */
+function get_notable_entities_from_metadata($start_time, $end_time, $meta_name, $meta_value = "",
+$entity_type = "", $entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "",
+$site_guid = 0, $count = false) {
+ elgg_deprecated_notice('get_notable_entities_from_metadata() has been deprecated', 1.9);
+
+ global $CONFIG;
+
+ $meta_n = get_metastring_id($meta_name);
+ $meta_v = get_metastring_id($meta_value);
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $entity_type = sanitise_string($entity_type);
+ $entity_subtype = get_subtype_id($entity_type, $entity_subtype);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ if ($order_by == "") {
+ $order_by = "e.time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $site_guid = (int) $site_guid;
+ if ((is_array($owner_guid) && (count($owner_guid)))) {
+ foreach ($owner_guid as $key => $guid) {
+ $owner_guid[$key] = (int) $guid;
+ }
+ } else {
+ $owner_guid = (int) $owner_guid;
+ }
+
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ //$access = get_access_list();
+
+ $where = array();
+
+ if ($entity_type != "") {
+ $where[] = "e.type='$entity_type'";
+ }
+
+ if ($entity_subtype) {
+ $where[] = "e.subtype=$entity_subtype";
+ }
+
+ if ($meta_name != "") {
+ $where[] = "m.name_id='$meta_n'";
+ }
+
+ if ($meta_value != "") {
+ $where[] = "m.value_id='$meta_v'";
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ if (is_array($owner_guid)) {
+ $where[] = "e.container_guid in (" . implode(",", $owner_guid) . ")";
+ } else if ($owner_guid > 0) {
+ $where[] = "e.container_guid = {$owner_guid}";
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+ if (!$count) {
+ $query = "SELECT distinct e.* ";
+ } else {
+ $query = "SELECT count(distinct e.guid) as total ";
+ }
+
+ $query .= "from {$CONFIG->dbprefix}entities e"
+ . " JOIN {$CONFIG->dbprefix}metadata m on e.guid = m.entity_guid $cal_join where";
+
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix("e");
+ $query .= ' and ' . get_access_sql_suffix("m");
+
+ if (!$count) {
+ // Add order and limit
+ $query .= " order by $order_by limit $offset, $limit";
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($row = get_data_row($query)) {
+ return $row->total;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Return the notable entities for a given time period based on their relationship.
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Reverse the normal function of the query to say
+ * "give me all entities for whom $relationship_guid is a
+ * $relationship of"
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param string $order_by Optional Order by
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ * @access private
+ * @deprecated 1.9
+ */
+function get_noteable_entities_from_relationship($start_time, $end_time, $relationship,
+$relationship_guid, $inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+ elgg_deprecated_notice('get_noteable_entities_from_relationship() has been deprecated', 1.9);
+
+ global $CONFIG;
+
+ $start_time = (int)$start_time;
+ $end_time = (int)$end_time;
+ $relationship = sanitise_string($relationship);
+ $relationship_guid = (int)$relationship_guid;
+ $inverse_relationship = (bool)$inverse_relationship;
+ $type = sanitise_string($type);
+ $subtype = get_subtype_id($type, $subtype);
+ $owner_guid = (int)$owner_guid;
+ if ($order_by == "") {
+ $order_by = "time_created desc";
+ }
+ $order_by = sanitise_string($order_by);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+
+ //$access = get_access_list();
+
+ $where = array();
+
+ if ($relationship != "") {
+ $where[] = "r.relationship='$relationship'";
+ }
+ if ($relationship_guid) {
+ $where[] = $inverse_relationship ?
+ "r.guid_two='$relationship_guid'" : "r.guid_one='$relationship_guid'";
+ }
+ if ($type != "") {
+ $where[] = "e.type='$type'";
+ }
+ if ($subtype) {
+ $where[] = "e.subtype=$subtype";
+ }
+ if ($owner_guid != "") {
+ $where[] = "e.container_guid='$owner_guid'";
+ }
+ if ($site_guid > 0) {
+ $where[] = "e.site_guid = {$site_guid}";
+ }
+
+ // Add the calendar stuff
+ $cal_join = "
+ JOIN {$CONFIG->dbprefix}metadata cal_start on e.guid=cal_start.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_name on cal_start.name_id=cal_start_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_start_value on cal_start.value_id=cal_start_value.id
+
+ JOIN {$CONFIG->dbprefix}metadata cal_end on e.guid=cal_end.entity_guid
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_name on cal_end.name_id=cal_end_name.id
+ JOIN {$CONFIG->dbprefix}metastrings cal_end_value on cal_end.value_id=cal_end_value.id
+ ";
+ $where[] = "cal_start_name.string='calendar_start'";
+ $where[] = "cal_start_value.string>=$start_time";
+ $where[] = "cal_end_name.string='calendar_end'";
+ $where[] = "cal_end_value.string <= $end_time";
+
+ // Select what we're joining based on the options
+ $joinon = "e.guid = r.guid_one";
+ if (!$inverse_relationship) {
+ $joinon = "e.guid = r.guid_two";
+ }
+
+ if ($count) {
+ $query = "SELECT count(distinct e.guid) as total ";
+ } else {
+ $query = "SELECT distinct e.* ";
+ }
+ $query .= " from {$CONFIG->dbprefix}entity_relationships r"
+ . " JOIN {$CONFIG->dbprefix}entities e on $joinon $cal_join where ";
+
+ foreach ($where as $w) {
+ $query .= " $w and ";
+ }
+ // Add access controls
+ $query .= get_access_sql_suffix("e");
+ if (!$count) {
+ $query .= " order by $order_by limit $offset, $limit"; // Add order and limit
+ return get_data($query, "entity_row_to_elggstar");
+ } else {
+ if ($count = get_data_row($query)) {
+ return $count->total;
+ }
+ }
+ return false;
+}
+
+/**
+ * Get all entities for today.
+ *
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param string $order_by The field to order by; by default, time_created desc
+ * @param int $limit The number of entities to return; 10 by default
+ * @param int $offset The indexing offset, 0 by default
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ * @param mixed $container_guid Container(s) to get entities from (default: any).
+ *
+ * @return array|false
+ * @access private
+ * @deprecated 1.9
+ */
+function get_todays_entities($type = "", $subtype = "", $owner_guid = 0, $order_by = "",
+$limit = 10, $offset = 0, $count = false, $site_guid = 0, $container_guid = null) {
+ elgg_deprecated_notice('get_todays_entities() has been deprecated', 1.9);
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $order_by,
+ $limit, $offset, $count, $site_guid, $container_guid);
+}
+
+/**
+ * Get entities for today from metadata.
+ *
+ * @param mixed $meta_name Metadata name
+ * @param mixed $meta_value Metadata value
+ * @param string $entity_type The type of entity to look for, eg 'site' or 'object'
+ * @param string $entity_subtype The subtype of the entity.
+ * @param int $owner_guid Owner GUID
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param string $order_by Optional ordering.
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any.
+ * @param bool $count If true, returns count instead of entities. (Default: false)
+ *
+ * @return int|array A list of entities, or a count if $count is set to true
+ * @access private
+ * @deprecated 1.9
+ */
+function get_todays_entities_from_metadata($meta_name, $meta_value = "", $entity_type = "",
+$entity_subtype = "", $owner_guid = 0, $limit = 10, $offset = 0, $order_by = "", $site_guid = 0,
+$count = false) {
+ elgg_deprecated_notice('get_todays_entities_from_metadata() has been deprecated', 1.9);
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities_from_metadata($day_start, $day_end, $meta_name, $meta_value,
+ $entity_type, $entity_subtype, $owner_guid, $limit, $offset, $order_by, $site_guid, $count);
+}
+
+/**
+ * Get entities for today from a relationship
+ *
+ * @param string $relationship The relationship eg "friends_of"
+ * @param int $relationship_guid The guid of the entity to use query
+ * @param bool $inverse_relationship Reverse the normal function of the query to say
+ * "give me all entities for whom $relationship_guid is a
+ * $relationship of"
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param int $owner_guid Owner GUID
+ * @param string $order_by Optional Order by
+ * @param int $limit Limit
+ * @param int $offset Offset
+ * @param boolean $count If true returns a count of entities (default false)
+ * @param int $site_guid Site to get entities for. Default 0 = current site. -1 = any
+ *
+ * @return array|int|false An array of entities, or the number of entities, or false on failure
+ * @access private
+ * @deprecated 1.9
+ */
+function get_todays_entities_from_relationship($relationship, $relationship_guid,
+$inverse_relationship = false, $type = "", $subtype = "", $owner_guid = 0,
+$order_by = "", $limit = 10, $offset = 0, $count = false, $site_guid = 0) {
+ elgg_deprecated_notice('get_todays_entities_from_relationship() has been deprecated', 1.9);
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return get_notable_entities_from_relationship($day_start, $day_end, $relationship,
+ $relationship_guid, $inverse_relationship, $type, $subtype, $owner_guid, $order_by,
+ $limit, $offset, $count, $site_guid);
+}
+
+/**
+ * Returns a viewable list of entities for a given time period.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param int $start_time The start time as a unix timestamp.
+ * @param int $end_time The end time as a unix timestamp.
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to return; 10 by default
+ * @param boolean $fullview Whether or not to display the full view (default: true)
+ * @param boolean $listtypetoggle Whether or not to allow gallery view
+ * @param boolean $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @access private
+ * @deprecated 1.9
+ */
+function list_notable_entities($start_time, $end_time, $type= "", $subtype = "", $owner_guid = 0,
+$limit = 10, $fullview = true, $listtypetoggle = false, $navigation = true) {
+ elgg_deprecated_notice('list_notable_entities() has been deprecated', 1.9);
+
+ $offset = (int) get_input('offset');
+ $count = get_notable_entities($start_time, $end_time, $type, $subtype,
+ $owner_guid, "", $limit, $offset, true);
+
+ $entities = get_notable_entities($start_time, $end_time, $type, $subtype,
+ $owner_guid, "", $limit, $offset);
+
+ return elgg_view_entity_list($entities, $count, $offset, $limit,
+ $fullview, $listtypetoggle, $navigation);
+}
+
+/**
+ * Return a list of today's entities.
+ *
+ * @see list_notable_entities
+ *
+ * @param string $type The type of entity (eg "user", "object" etc)
+ * @param string $subtype The arbitrary subtype of the entity
+ * @param int $owner_guid The GUID of the owning user
+ * @param int $limit The number of entities to return; 10 by default
+ * @param boolean $fullview Whether or not to display the full view (default: true)
+ * @param boolean $listtypetoggle Whether or not to allow gallery view
+ * @param boolean $navigation Display pagination? Default: true
+ *
+ * @return string A viewable list of entities
+ * @access private
+ * @deprecated 1.9
+ */
+function list_todays_entities($type= "", $subtype = "", $owner_guid = 0, $limit = 10,
+$fullview = true, $listtypetoggle = false, $navigation = true) {
+ elgg_deprecated_notice('list_todays_entities() has been deprecated', 1.9);
+
+ $day_start = get_day_start();
+ $day_end = get_day_end();
+
+ return list_notable_entities($day_start, $day_end, $type, $subtype, $owner_guid, $limit,
+ $fullview, $listtypetoggle, $navigation);
+}
diff --git a/engine/lib/elgglib.php b/engine/lib/elgglib.php
new file mode 100644
index 000000000..540605876
--- /dev/null
+++ b/engine/lib/elgglib.php
@@ -0,0 +1,2288 @@
+<?php
+/**
+ * Bootstrapping and helper procedural code available for use in Elgg core and plugins.
+ *
+ * @package Elgg.Core
+ * @todo These functions can't be subpackaged because they cover a wide mix of
+ * purposes and subsystems. Many of them should be moved to more relevant files.
+ */
+
+// prep core classes to be autoloadable
+spl_autoload_register('_elgg_autoload');
+elgg_register_classes(dirname(dirname(__FILE__)) . '/classes');
+
+/**
+ * Autoload classes
+ *
+ * @param string $class The name of the class
+ *
+ * @return void
+ * @throws Exception
+ * @access private
+ */
+function _elgg_autoload($class) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->classes[$class]) || !include($CONFIG->classes[$class])) {
+ return false;
+ }
+}
+
+/**
+ * Register all files found in $dir as classes
+ * Need to be named MyClass.php
+ *
+ * @param string $dir The dir to look in
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_register_classes($dir) {
+ $classes = elgg_get_file_list($dir, array(), array(), array('.php'));
+
+ foreach ($classes as $class) {
+ elgg_register_class(basename($class, '.php'), $class);
+ }
+}
+
+/**
+ * Register a classname to a file.
+ *
+ * @param string $class The name of the class
+ * @param string $location The location of the file
+ *
+ * @return true
+ * @since 1.8.0
+ */
+function elgg_register_class($class, $location) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->classes)) {
+ $CONFIG->classes = array();
+ }
+
+ $CONFIG->classes[$class] = $location;
+
+ return true;
+}
+
+/**
+ * Register a php library.
+ *
+ * @param string $name The name of the library
+ * @param string $location The location of the file
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_register_library($name, $location) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->libraries)) {
+ $CONFIG->libraries = array();
+ }
+
+ $CONFIG->libraries[$name] = $location;
+}
+
+/**
+ * Load a php library.
+ *
+ * @param string $name The name of the library
+ *
+ * @return void
+ * @throws InvalidParameterException
+ * @since 1.8.0
+ */
+function elgg_load_library($name) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->libraries)) {
+ $CONFIG->libraries = array();
+ }
+
+ if (!isset($CONFIG->libraries[$name])) {
+ $error = elgg_echo('InvalidParameterException:LibraryNotRegistered', array($name));
+ throw new InvalidParameterException($error);
+ }
+
+ if (!include_once($CONFIG->libraries[$name])) {
+ $error = elgg_echo('InvalidParameterException:LibraryNotFound', array(
+ $name,
+ $CONFIG->libraries[$name])
+ );
+ throw new InvalidParameterException($error);
+ }
+}
+
+/**
+ * Forward to $location.
+ *
+ * Sends a 'Location: $location' header and exists. If headers have
+ * already been sent, returns FALSE.
+ *
+ * @param string $location URL to forward to browser to. Can be path relative to the network's URL.
+ * @param string $reason Short explanation for why we're forwarding
+ *
+ * @return False False if headers have been sent. Terminates execution if forwarding.
+ */
+function forward($location = "", $reason = 'system') {
+ global $CONFIG;
+
+ if (!headers_sent()) {
+ if ($location === REFERER) {
+ $location = $_SERVER['HTTP_REFERER'];
+ }
+
+ $location = elgg_normalize_url($location);
+
+ // return new forward location or false to stop the forward or empty string to exit
+ $current_page = current_page_url();
+ $params = array('current_url' => $current_page, 'forward_url' => $location);
+ $location = elgg_trigger_plugin_hook('forward', $reason, $params, $location);
+
+ if ($location) {
+ header("Location: {$location}");
+ exit;
+ } else if ($location === '') {
+ exit;
+ }
+ } else {
+ throw new SecurityException(elgg_echo('SecurityException:ForwardFailedToRedirect'));
+ }
+}
+
+/**
+ * Register a JavaScript file for inclusion
+ *
+ * This function handles adding JavaScript to a web page. If multiple
+ * calls are made to register the same JavaScript file based on the $id
+ * variable, only the last file is included. This allows a plugin to add
+ * JavaScript from a view that may be called more than once. It also handles
+ * more than one plugin adding the same JavaScript.
+ *
+ * jQuery plugins often have filenames such as jquery.rating.js. A best practice
+ * is to base $name on the filename: "jquery.rating". It is recommended to not
+ * use version numbers in the name.
+ *
+ * The JavaScript files can be local to the server or remote (such as
+ * Google's CDN).
+ *
+ * @param string $name An identifier for the JavaScript library
+ * @param string $url URL of the JavaScript file
+ * @param string $location Page location: head or footer. (default: head)
+ * @param int $priority Priority of the JS file (lower numbers load earlier)
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_register_js($name, $url, $location = 'head', $priority = null) {
+ return elgg_register_external_file('js', $name, $url, $location, $priority);
+}
+
+/**
+ * Unregister a JavaScript file
+ *
+ * @param string $name The identifier for the JavaScript library
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unregister_js($name) {
+ return elgg_unregister_external_file('js', $name);
+}
+
+/**
+ * Load a JavaScript resource on this page
+ *
+ * This must be called before elgg_view_page(). It can be called before the
+ * script is registered. If you do not want a script loaded, unregister it.
+ *
+ * @param string $name Identifier of the JavaScript resource
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_load_js($name) {
+ elgg_load_external_file('js', $name);
+}
+
+/**
+ * Get the JavaScript URLs that are loaded
+ *
+ * @param string $location 'head' or 'footer'
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_loaded_js($location = 'head') {
+ return elgg_get_loaded_external_files('js', $location);
+}
+
+/**
+ * Register a CSS file for inclusion in the HTML head
+ *
+ * @param string $name An identifier for the CSS file
+ * @param string $url URL of the CSS file
+ * @param int $priority Priority of the CSS file (lower numbers load earlier)
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_register_css($name, $url, $priority = null) {
+ return elgg_register_external_file('css', $name, $url, 'head', $priority);
+}
+
+/**
+ * Unregister a CSS file
+ *
+ * @param string $name The identifier for the CSS file
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unregister_css($name) {
+ return elgg_unregister_external_file('css', $name);
+}
+
+/**
+ * Load a CSS file for this page
+ *
+ * This must be called before elgg_view_page(). It can be called before the
+ * CSS file is registered. If you do not want a CSS file loaded, unregister it.
+ *
+ * @param string $name Identifier of the CSS file
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_load_css($name) {
+ elgg_load_external_file('css', $name);
+}
+
+/**
+ * Get the loaded CSS URLs
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_loaded_css() {
+ return elgg_get_loaded_external_files('css', 'head');
+}
+
+/**
+ * Core registration function for external files
+ *
+ * @param string $type Type of external resource (js or css)
+ * @param string $name Identifier used as key
+ * @param string $url URL
+ * @param string $location Location in the page to include the file
+ * @param int $priority Loading priority of the file
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_register_external_file($type, $name, $url, $location, $priority = 500) {
+ global $CONFIG;
+
+ if (empty($name) || empty($url)) {
+ return false;
+ }
+
+ $url = elgg_format_url($url);
+ $url = elgg_normalize_url($url);
+
+ elgg_bootstrap_externals_data_structure($type);
+
+ $name = trim(strtolower($name));
+
+ // normalize bogus priorities, but allow empty, null, and false to be defaults.
+ if (!is_numeric($priority)) {
+ $priority = 500;
+ }
+
+ // no negative priorities right now.
+ $priority = max((int)$priority, 0);
+
+ $item = elgg_extract($name, $CONFIG->externals_map[$type]);
+
+ if ($item) {
+ // updating a registered item
+ // don't update loaded because it could already be set
+ $item->url = $url;
+ $item->location = $location;
+
+ // if loaded before registered, that means it hasn't been added to the list yet
+ if ($CONFIG->externals[$type]->contains($item)) {
+ $priority = $CONFIG->externals[$type]->move($item, $priority);
+ } else {
+ $priority = $CONFIG->externals[$type]->add($item, $priority);
+ }
+ } else {
+ $item = new stdClass();
+ $item->loaded = false;
+ $item->url = $url;
+ $item->location = $location;
+
+ $priority = $CONFIG->externals[$type]->add($item, $priority);
+ }
+
+ $CONFIG->externals_map[$type][$name] = $item;
+
+ return $priority !== false;
+}
+
+/**
+ * Unregister an external file
+ *
+ * @param string $type Type of file: js or css
+ * @param string $name The identifier of the file
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unregister_external_file($type, $name) {
+ global $CONFIG;
+
+ elgg_bootstrap_externals_data_structure($type);
+
+ $name = trim(strtolower($name));
+ $item = elgg_extract($name, $CONFIG->externals_map[$type]);
+
+ if ($item) {
+ unset($CONFIG->externals_map[$type][$name]);
+ return $CONFIG->externals[$type]->remove($item);
+ }
+
+ return false;
+}
+
+/**
+ * Load an external resource for use on this page
+ *
+ * @param string $type Type of file: js or css
+ * @param string $name The identifier for the file
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_load_external_file($type, $name) {
+ global $CONFIG;
+
+ elgg_bootstrap_externals_data_structure($type);
+
+ $name = trim(strtolower($name));
+
+ $item = elgg_extract($name, $CONFIG->externals_map[$type]);
+
+ if ($item) {
+ // update a registered item
+ $item->loaded = true;
+ } else {
+ $item = new stdClass();
+ $item->loaded = true;
+ $item->url = '';
+ $item->location = '';
+
+ $priority = $CONFIG->externals[$type]->add($item);
+ $CONFIG->externals_map[$type][$name] = $item;
+ }
+}
+
+/**
+ * Get external resource descriptors
+ *
+ * @param string $type Type of file: js or css
+ * @param string $location Page location
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_loaded_external_files($type, $location) {
+ global $CONFIG;
+
+ if (isset($CONFIG->externals) && $CONFIG->externals[$type] instanceof ElggPriorityList) {
+ $items = $CONFIG->externals[$type]->getElements();
+
+ $callback = "return \$v->loaded == true && \$v->location == '$location';";
+ $items = array_filter($items, create_function('$v', $callback));
+ if ($items) {
+ array_walk($items, create_function('&$v,$k', '$v = $v->url;'));
+ }
+ return $items;
+ }
+ return array();
+}
+
+/**
+ * Bootstraps the externals data structure in $CONFIG.
+ *
+ * @param string $type The type of external, js or css.
+ * @access private
+ */
+function elgg_bootstrap_externals_data_structure($type) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->externals)) {
+ $CONFIG->externals = array();
+ }
+
+ if (!isset($CONFIG->externals[$type]) || !$CONFIG->externals[$type] instanceof ElggPriorityList) {
+ $CONFIG->externals[$type] = new ElggPriorityList();
+ }
+
+ if (!isset($CONFIG->externals_map)) {
+ $CONFIG->externals_map = array();
+ }
+
+ if (!isset($CONFIG->externals_map[$type])) {
+ $CONFIG->externals_map[$type] = array();
+ }
+}
+
+/**
+ * Returns a list of files in $directory.
+ *
+ * Only returns files. Does not recurse into subdirs.
+ *
+ * @param string $directory Directory to look in
+ * @param array $exceptions Array of filenames to ignore
+ * @param array $list Array of files to append to
+ * @param mixed $extensions Array of extensions to allow, NULL for all. Use a dot: array('.php').
+ *
+ * @return array Filenames in $directory, in the form $directory/filename.
+ */
+function elgg_get_file_list($directory, $exceptions = array(), $list = array(),
+$extensions = NULL) {
+
+ $directory = sanitise_filepath($directory);
+ if ($handle = opendir($directory)) {
+ while (($file = readdir($handle)) !== FALSE) {
+ if (!is_file($directory . $file) || in_array($file, $exceptions)) {
+ continue;
+ }
+
+ if (is_array($extensions)) {
+ if (in_array(strrchr($file, '.'), $extensions)) {
+ $list[] = $directory . $file;
+ }
+ } else {
+ $list[] = $directory . $file;
+ }
+ }
+ closedir($handle);
+ }
+
+ return $list;
+}
+
+/**
+ * Sanitise file paths ensuring that they begin and end with slashes etc.
+ *
+ * @param string $path The path
+ * @param bool $append_slash Add tailing slash
+ *
+ * @return string
+ */
+function sanitise_filepath($path, $append_slash = TRUE) {
+ // Convert to correct UNIX paths
+ $path = str_replace('\\', '/', $path);
+ $path = str_replace('../', '/', $path);
+ // replace // with / except when preceeded by :
+ $path = preg_replace("/([^:])\/\//", "$1/", $path);
+
+ // Sort trailing slash
+ $path = trim($path);
+ // rtrim defaults plus /
+ $path = rtrim($path, " \n\t\0\x0B/");
+
+ if ($append_slash) {
+ $path = $path . '/';
+ }
+
+ return $path;
+}
+
+/**
+ * Queues a message to be displayed.
+ *
+ * Messages will not be displayed immediately, but are stored in
+ * for later display, usually upon next page load.
+ *
+ * The method of displaying these messages differs depending upon plugins and
+ * viewtypes. The core default viewtype retrieves messages in
+ * {@link views/default/page/shells/default.php} and displays messages as
+ * javascript popups.
+ *
+ * @internal Messages are stored as strings in the $_SESSION['msg'][$register] array.
+ *
+ * @warning This function is used to both add to and clear the message
+ * stack. If $messages is null, $register will be returned and cleared.
+ * If $messages is null and $register is empty, all messages will be
+ * returned and removed.
+ *
+ * @important This function handles the standard {@link system_message()} ($register =
+ * 'messages') as well as {@link register_error()} messages ($register = 'errors').
+ *
+ * @param mixed $message Optionally, a single message or array of messages to add, (default: null)
+ * @param string $register Types of message: "error", "success" (default: success)
+ * @param bool $count Count the number of messages (default: false)
+ *
+ * @return true|false|array Either the array of messages, or a response regarding
+ * whether the message addition was successful.
+ * @todo Clean up. Separate registering messages and retrieving them.
+ */
+function system_messages($message = null, $register = "success", $count = false) {
+ if (!isset($_SESSION['msg'])) {
+ $_SESSION['msg'] = array();
+ }
+ if (!isset($_SESSION['msg'][$register]) && !empty($register)) {
+ $_SESSION['msg'][$register] = array();
+ }
+ if (!$count) {
+ if (!empty($message) && is_array($message)) {
+ $_SESSION['msg'][$register] = array_merge($_SESSION['msg'][$register], $message);
+ return true;
+ } else if (!empty($message) && is_string($message)) {
+ $_SESSION['msg'][$register][] = $message;
+ return true;
+ } else if (is_null($message)) {
+ if ($register != "") {
+ $returnarray = array();
+ $returnarray[$register] = $_SESSION['msg'][$register];
+ $_SESSION['msg'][$register] = array();
+ } else {
+ $returnarray = $_SESSION['msg'];
+ $_SESSION['msg'] = array();
+ }
+ return $returnarray;
+ }
+ } else {
+ if (!empty($register)) {
+ return sizeof($_SESSION['msg'][$register]);
+ } else {
+ $count = 0;
+ foreach ($_SESSION['msg'] as $register => $submessages) {
+ $count += sizeof($submessages);
+ }
+ return $count;
+ }
+ }
+ return false;
+}
+
+/**
+ * Counts the number of messages, either globally or in a particular register
+ *
+ * @param string $register Optionally, the register
+ *
+ * @return integer The number of messages
+ */
+function count_messages($register = "") {
+ return system_messages(null, $register, true);
+}
+
+/**
+ * Display a system message on next page load.
+ *
+ * @see system_messages()
+ *
+ * @param string|array $message Message or messages to add
+ *
+ * @return bool
+ */
+function system_message($message) {
+ return system_messages($message, "success");
+}
+
+/**
+ * Display an error on next page load.
+ *
+ * @see system_messages()
+ *
+ * @param string|array $error Error or errors to add
+ *
+ * @return bool
+ */
+function register_error($error) {
+ return system_messages($error, "error");
+}
+
+/**
+ * Register a callback as an Elgg event handler.
+ *
+ * Events are emitted by Elgg when certain actions occur. Plugins
+ * can respond to these events or halt them completely by registering a handler
+ * as a callback to an event. Multiple handlers can be registered for
+ * the same event and will be executed in order of $priority. Any handler
+ * returning false will halt the execution chain.
+ *
+ * This function is called with the event name, event type, and handler callback name.
+ * Setting the optional $priority allows plugin authors to specify when the
+ * callback should be run. Priorities for plugins should be 1-1000.
+ *
+ * The callback is passed 3 arguments when called: $event, $type, and optional $params.
+ *
+ * $event is the name of event being emitted.
+ * $type is the type of event or object concerned.
+ * $params is an optional parameter passed that can include a related object. See
+ * specific event documentation for details on which events pass what parameteres.
+ *
+ * @tip If a priority isn't specified it is determined by the order the handler was
+ * registered relative to the event and type. For plugins, this generally means
+ * the earlier the plugin is in the load order, the earlier the priorities are for
+ * any event handlers.
+ *
+ * @tip $event and $object_type can use the special keyword 'all'. Handler callbacks registered
+ * with $event = all will be called for all events of type $object_type. Similarly,
+ * callbacks registered with $object_type = all will be called for all events of type
+ * $event, regardless of $object_type. If $event and $object_type both are 'all', the
+ * handler callback will be called for all events.
+ *
+ * @tip Event handler callbacks are considered in the follow order:
+ * - Specific registration where 'all' isn't used.
+ * - Registration where 'all' is used for $event only.
+ * - Registration where 'all' is used for $type only.
+ * - Registration where 'all' is used for both.
+ *
+ * @warning If you use the 'all' keyword, you must have logic in the handler callback to
+ * test the passed parameters before taking an action.
+ *
+ * @tip When referring to events, the preferred syntax is "event, type".
+ *
+ * @internal Events are stored in $CONFIG->events as:
+ * <code>
+ * $CONFIG->events[$event][$type][$priority] = $callback;
+ * </code>
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $callback The handler callback
+ * @param int $priority The priority - 0 is default, negative before, positive after
+ *
+ * @return bool
+ * @link http://docs.elgg.org/Tutorials/Plugins/Events
+ * @example events/basic.php Basic example of registering an event handler callback.
+ * @example events/advanced.php Advanced example of registering an event handler
+ * callback and halting execution.
+ * @example events/all.php Example of how to use the 'all' keyword.
+ */
+function elgg_register_event_handler($event, $object_type, $callback, $priority = 500) {
+ global $CONFIG;
+
+ if (empty($event) || empty($object_type)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->events)) {
+ $CONFIG->events = array();
+ }
+ if (!isset($CONFIG->events[$event])) {
+ $CONFIG->events[$event] = array();
+ }
+ if (!isset($CONFIG->events[$event][$object_type])) {
+ $CONFIG->events[$event][$object_type] = array();
+ }
+
+ if (!is_callable($callback, true)) {
+ return false;
+ }
+
+ $priority = max((int) $priority, 0);
+
+ while (isset($CONFIG->events[$event][$object_type][$priority])) {
+ $priority++;
+ }
+ $CONFIG->events[$event][$object_type][$priority] = $callback;
+ ksort($CONFIG->events[$event][$object_type]);
+ return true;
+}
+
+/**
+ * Unregisters a callback for an event.
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $callback The callback
+ *
+ * @return void
+ * @since 1.7
+ */
+function elgg_unregister_event_handler($event, $object_type, $callback) {
+ global $CONFIG;
+
+ if (isset($CONFIG->events[$event]) && isset($CONFIG->events[$event][$object_type])) {
+ foreach ($CONFIG->events[$event][$object_type] as $key => $event_callback) {
+ if ($event_callback == $callback) {
+ unset($CONFIG->events[$event][$object_type][$key]);
+ }
+ }
+ }
+}
+
+/**
+ * Trigger an Elgg Event and run all handler callbacks registered to that event, type.
+ *
+ * This function runs all handlers registered to $event, $object_type or
+ * the special keyword 'all' for either or both.
+ *
+ * $event is usually a verb: create, update, delete, annotation.
+ *
+ * $object_type is usually a noun: object, group, user, annotation, relationship, metadata.
+ *
+ * $object is usually an Elgg* object assciated with the event.
+ *
+ * @warning Elgg events should only be triggered by core. Plugin authors should use
+ * {@link trigger_elgg_plugin_hook()} instead.
+ *
+ * @tip When referring to events, the preferred syntax is "event, type".
+ *
+ * @internal Only rarely should events be changed, added, or removed in core.
+ * When making changes to events, be sure to first create a ticket in trac.
+ *
+ * @internal @tip Think of $object_type as the primary namespace element, and
+ * $event as the secondary namespace.
+ *
+ * @param string $event The event type
+ * @param string $object_type The object type
+ * @param string $object The object involved in the event
+ *
+ * @return bool The result of running all handler callbacks.
+ * @link http://docs.elgg.org/Tutorials/Core/Events
+ * @internal @example events/emit.php Basic emitting of an Elgg event.
+ */
+function elgg_trigger_event($event, $object_type, $object = null) {
+ global $CONFIG;
+
+ $events = array();
+ if (isset($CONFIG->events[$event][$object_type])) {
+ $events[] = $CONFIG->events[$event][$object_type];
+ }
+ if (isset($CONFIG->events['all'][$object_type])) {
+ $events[] = $CONFIG->events['all'][$object_type];
+ }
+ if (isset($CONFIG->events[$event]['all'])) {
+ $events[] = $CONFIG->events[$event]['all'];
+ }
+ if (isset($CONFIG->events['all']['all'])) {
+ $events[] = $CONFIG->events['all']['all'];
+ }
+
+ $args = array($event, $object_type, $object);
+
+ foreach ($events as $callback_list) {
+ if (is_array($callback_list)) {
+ foreach ($callback_list as $callback) {
+ if (is_callable($callback) && (call_user_func_array($callback, $args) === false)) {
+ return false;
+ }
+ }
+ }
+ }
+
+ return true;
+}
+
+/**
+ * Register a callback as a plugin hook handler.
+ *
+ * Plugin hooks allow developers to losely couple plugins and features by
+ * repsonding to and emitting {@link elgg_trigger_plugin_hook()} customizable hooks.
+ * Handler callbacks can respond to the hook, change the details of the hook, or
+ * ignore it.
+ *
+ * Multiple handlers can be registered for a plugin hook, and each callback
+ * is called in order of priority. If the return value of a handler is not
+ * null, that value is passed to the next callback in the call stack. When all
+ * callbacks have been run, the final value is passed back to the caller
+ * via {@link elgg_trigger_plugin_hook()}.
+ *
+ * Similar to Elgg Events, plugin hook handler callbacks are registered by passing
+ * a hook, a type, and a priority.
+ *
+ * The callback is passed 4 arguments when called: $hook, $type, $value, and $params.
+ *
+ * - str $hook The name of the hook.
+ * - str $type The type of hook.
+ * - mixed $value The return value of the last handler or the default
+ * value if no other handlers have been called.
+ * - mixed $params An optional array of parameters. Used to provide additional
+ * information to plugins.
+ *
+ * @internal Plugin hooks are stored in $CONFIG->hooks as:
+ * <code>
+ * $CONFIG->hooks[$hook][$type][$priority] = $callback;
+ * </code>
+ *
+ * @tip Plugin hooks are similar to Elgg Events in that Elgg emits
+ * a plugin hook when certain actions occur, but a plugin hook allows you to alter the
+ * parameters, as well as halt execution.
+ *
+ * @tip If a priority isn't specified it is determined by the order the handler was
+ * registered relative to the event and type. For plugins, this generally means
+ * the earlier the plugin is in the load order, the earlier the priorities are for
+ * any event handlers.
+ *
+ * @tip Like Elgg Events, $hook and $type can use the special keyword 'all'.
+ * Handler callbacks registered with $hook = all will be called for all hooks
+ * of type $type. Similarly, handlers registered with $type = all will be
+ * called for all hooks of type $event, regardless of $object_type. If $hook
+ * and $type both are 'all', the handler will be called for all hooks.
+ *
+ * @tip Plugin hooks are sometimes used to gather lists from plugins. This is
+ * usually done by pushing elements into an array passed in $params. Be sure
+ * to append to and then return $value so you don't overwrite other plugin's
+ * values.
+ *
+ * @warning Unlike Elgg Events, a handler that returns false will NOT halt the
+ * execution chain.
+ *
+ * @param string $hook The name of the hook
+ * @param string $type The type of the hook
+ * @param callback $callback The name of a valid function or an array with object and method
+ * @param int $priority The priority - 500 is default, lower numbers called first
+ *
+ * @return bool
+ *
+ * @example hooks/register/basic.php Registering for a plugin hook and examining the variables.
+ * @example hooks/register/advanced.php Registering for a plugin hook and changing the params.
+ * @link http://docs.elgg.org/Tutorials/Plugins/Hooks
+ * @since 1.8.0
+ */
+function elgg_register_plugin_hook_handler($hook, $type, $callback, $priority = 500) {
+ global $CONFIG;
+
+ if (empty($hook) || empty($type)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->hooks)) {
+ $CONFIG->hooks = array();
+ }
+ if (!isset($CONFIG->hooks[$hook])) {
+ $CONFIG->hooks[$hook] = array();
+ }
+ if (!isset($CONFIG->hooks[$hook][$type])) {
+ $CONFIG->hooks[$hook][$type] = array();
+ }
+
+ if (!is_callable($callback, true)) {
+ return false;
+ }
+
+ $priority = max((int) $priority, 0);
+
+ while (isset($CONFIG->hooks[$hook][$type][$priority])) {
+ $priority++;
+ }
+ $CONFIG->hooks[$hook][$type][$priority] = $callback;
+ ksort($CONFIG->hooks[$hook][$type]);
+ return true;
+}
+
+/**
+ * Unregister a callback as a plugin hook.
+ *
+ * @param string $hook The name of the hook
+ * @param string $entity_type The name of the type of entity (eg "user", "object" etc)
+ * @param callback $callback The PHP callback to be removed
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_unregister_plugin_hook_handler($hook, $entity_type, $callback) {
+ global $CONFIG;
+
+ if (isset($CONFIG->hooks[$hook]) && isset($CONFIG->hooks[$hook][$entity_type])) {
+ foreach ($CONFIG->hooks[$hook][$entity_type] as $key => $hook_callback) {
+ if ($hook_callback == $callback) {
+ unset($CONFIG->hooks[$hook][$entity_type][$key]);
+ }
+ }
+ }
+}
+
+/**
+ * Trigger a Plugin Hook and run all handler callbacks registered to that hook:type.
+ *
+ * This function runs all handlers regsitered to $hook, $type or
+ * the special keyword 'all' for either or both.
+ *
+ * Use $params to send additional information to the handler callbacks.
+ *
+ * $returnvalue Is the initial value to pass to the handlers, which can
+ * then change it. It is useful to use $returnvalue to set defaults.
+ * If no handlers are registered, $returnvalue is immediately returned.
+ *
+ * $hook is usually a verb: import, get_views, output.
+ *
+ * $type is usually a noun: user, ecml, page.
+ *
+ * @tip Like Elgg Events, $hook and $type can use the special keyword 'all'.
+ * Handler callbacks registered with $hook = all will be called for all hooks
+ * of type $type. Similarly, handlers registered with $type = all will be
+ * called for all hooks of type $event, regardless of $object_type. If $hook
+ * and $type both are 'all', the handler will be called for all hooks.
+ *
+ * @internal The checks for $hook and/or $type not being equal to 'all' is to
+ * prevent a plugin hook being registered with an 'all' being called more than
+ * once if the trigger occurs with an 'all'. An example in core of this is in
+ * actions.php:
+ * elgg_trigger_plugin_hook('action_gatekeeper:permissions:check', 'all', ...)
+ *
+ * @see elgg_register_plugin_hook_handler()
+ *
+ * @param string $hook The name of the hook to trigger ("all" will
+ * trigger for all $types regardless of $hook value)
+ * @param string $type The type of the hook to trigger ("all" will
+ * trigger for all $hooks regardless of $type value)
+ * @param mixed $params Additional parameters to pass to the handlers
+ * @param mixed $returnvalue An initial return value
+ *
+ * @return mixed|null The return value of the last handler callback called
+ *
+ * @example hooks/trigger/basic.php Trigger a hook that determins if execution
+ * should continue.
+ * @example hooks/trigger/advanced.php Trigger a hook with a default value and use
+ * the results to populate a menu.
+ * @example hooks/basic.php Trigger and respond to a basic plugin hook.
+ * @link http://docs.elgg.org/Tutorials/Plugins/Hooks
+ *
+ * @since 1.8.0
+ */
+function elgg_trigger_plugin_hook($hook, $type, $params = null, $returnvalue = null) {
+ global $CONFIG;
+
+ $hooks = array();
+ if (isset($CONFIG->hooks[$hook][$type])) {
+ if ($hook != 'all' && $type != 'all') {
+ $hooks[] = $CONFIG->hooks[$hook][$type];
+ }
+ }
+ if (isset($CONFIG->hooks['all'][$type])) {
+ if ($type != 'all') {
+ $hooks[] = $CONFIG->hooks['all'][$type];
+ }
+ }
+ if (isset($CONFIG->hooks[$hook]['all'])) {
+ if ($hook != 'all') {
+ $hooks[] = $CONFIG->hooks[$hook]['all'];
+ }
+ }
+ if (isset($CONFIG->hooks['all']['all'])) {
+ $hooks[] = $CONFIG->hooks['all']['all'];
+ }
+
+ foreach ($hooks as $callback_list) {
+ if (is_array($callback_list)) {
+ foreach ($callback_list as $hookcallback) {
+ if (is_callable($hookcallback)) {
+ $args = array($hook, $type, $returnvalue, $params);
+ $temp_return_value = call_user_func_array($hookcallback, $args);
+ if (!is_null($temp_return_value)) {
+ $returnvalue = $temp_return_value;
+ }
+ }
+ }
+ }
+ }
+
+ return $returnvalue;
+}
+
+/**
+ * Intercepts, logs, and displays uncaught exceptions.
+ *
+ * @warning This function should never be called directly.
+ *
+ * @see http://www.php.net/set-exception-handler
+ *
+ * @param Exception $exception The exception being handled
+ *
+ * @return void
+ * @access private
+ */
+function _elgg_php_exception_handler($exception) {
+ $timestamp = time();
+ error_log("Exception #$timestamp: $exception");
+
+ // Wipe any existing output buffer
+ ob_end_clean();
+
+ // make sure the error isn't cached
+ header("Cache-Control: no-cache, must-revalidate", true);
+ header('Expires: Fri, 05 Feb 1982 00:00:00 -0500', true);
+ // @note Do not send a 500 header because it is not a server error
+
+ try {
+ // we don't want the 'pagesetup', 'system' event to fire
+ global $CONFIG;
+ $CONFIG->pagesetupdone = true;
+
+ elgg_set_viewtype('failsafe');
+ if (elgg_is_admin_logged_in()) {
+ $body = elgg_view("messages/exceptions/admin_exception", array(
+ 'object' => $exception,
+ 'ts' => $timestamp
+ ));
+ } else {
+ $body = elgg_view("messages/exceptions/exception", array(
+ 'object' => $exception,
+ 'ts' => $timestamp
+ ));
+ }
+ echo elgg_view_page(elgg_echo('exception:title'), $body);
+ } catch (Exception $e) {
+ $timestamp = time();
+ $message = $e->getMessage();
+ echo "Fatal error in exception handler. Check log for Exception #$timestamp";
+ error_log("Exception #$timestamp : fatal error in exception handler : $message");
+ }
+}
+
+/**
+ * Intercepts catchable PHP errors.
+ *
+ * @warning This function should never be called directly.
+ *
+ * @internal
+ * For catchable fatal errors, throws an Exception with the error.
+ *
+ * For non-fatal errors, depending upon the debug settings, either
+ * log the error or ignore it.
+ *
+ * @see http://www.php.net/set-error-handler
+ *
+ * @param int $errno The level of the error raised
+ * @param string $errmsg The error message
+ * @param string $filename The filename the error was raised in
+ * @param int $linenum The line number the error was raised at
+ * @param array $vars An array that points to the active symbol table where error occurred
+ *
+ * @return true
+ * @access private
+ * @todo Replace error_log calls with elgg_log calls.
+ */
+function _elgg_php_error_handler($errno, $errmsg, $filename, $linenum, $vars) {
+ $error = date("Y-m-d H:i:s (T)") . ": \"$errmsg\" in file $filename (line $linenum)";
+
+ switch ($errno) {
+ case E_USER_ERROR:
+ error_log("PHP ERROR: $error");
+ register_error("ERROR: $error");
+
+ // Since this is a fatal error, we want to stop any further execution but do so gracefully.
+ throw new Exception($error);
+ break;
+
+ case E_WARNING :
+ case E_USER_WARNING :
+ case E_RECOVERABLE_ERROR: // (e.g. type hint violation)
+
+ // check if the error wasn't suppressed by the error control operator (@)
+ if (error_reporting()) {
+ error_log("PHP WARNING: $error");
+ }
+ break;
+
+ default:
+ global $CONFIG;
+ if (isset($CONFIG->debug) && $CONFIG->debug === 'NOTICE') {
+ error_log("PHP NOTICE: $error");
+ }
+ }
+
+ return true;
+}
+
+/**
+ * Display or log a message.
+ *
+ * If $level is >= to the debug setting in {@link $CONFIG->debug}, the
+ * message will be sent to {@link elgg_dump()}. Messages with lower
+ * priority than {@link $CONFIG->debug} are ignored.
+ *
+ * {@link elgg_dump()} outputs all levels but NOTICE to screen by default.
+ *
+ * @note No messages will be displayed unless debugging has been enabled.
+ *
+ * @param string $message User message
+ * @param string $level NOTICE | WARNING | ERROR | DEBUG
+ *
+ * @return bool
+ * @since 1.7.0
+ * @todo This is complicated and confusing. Using int constants for debug levels will
+ * make things easier.
+ */
+function elgg_log($message, $level = 'NOTICE') {
+ global $CONFIG;
+
+ // only log when debugging is enabled
+ if (isset($CONFIG->debug)) {
+ // debug to screen or log?
+ $to_screen = !($CONFIG->debug == 'NOTICE');
+
+ switch ($level) {
+ case 'ERROR':
+ // always report
+ elgg_dump("$level: $message", $to_screen, $level);
+ break;
+ case 'WARNING':
+ case 'DEBUG':
+ // report except if user wants only errors
+ if ($CONFIG->debug != 'ERROR') {
+ elgg_dump("$level: $message", $to_screen, $level);
+ }
+ break;
+ case 'NOTICE':
+ default:
+ // only report when lowest level is desired
+ if ($CONFIG->debug == 'NOTICE') {
+ elgg_dump("$level: $message", FALSE, $level);
+ }
+ break;
+ }
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Logs or displays $value.
+ *
+ * If $to_screen is true, $value is displayed to screen. Else,
+ * it is handled by PHP's {@link error_log()} function.
+ *
+ * A {@elgg_plugin_hook debug log} is called. If a handler returns
+ * false, it will stop the default logging method.
+ *
+ * @param mixed $value The value
+ * @param bool $to_screen Display to screen?
+ * @param string $level The debug level
+ *
+ * @return void
+ * @since 1.7.0
+ */
+function elgg_dump($value, $to_screen = TRUE, $level = 'NOTICE') {
+ global $CONFIG;
+
+ // plugin can return false to stop the default logging method
+ $params = array(
+ 'level' => $level,
+ 'msg' => $value,
+ 'to_screen' => $to_screen,
+ );
+ if (!elgg_trigger_plugin_hook('debug', 'log', $params, true)) {
+ return;
+ }
+
+ // Do not want to write to screen before page creation has started.
+ // This is not fool-proof but probably fixes 95% of the cases when logging
+ // results in data sent to the browser before the page is begun.
+ if (!isset($CONFIG->pagesetupdone)) {
+ $to_screen = FALSE;
+ }
+
+ if ($to_screen == TRUE) {
+ echo '<pre>';
+ print_r($value);
+ echo '</pre>';
+ } else {
+ error_log(print_r($value, TRUE));
+ }
+}
+
+/**
+ * Sends a notice about deprecated use of a function, view, etc.
+ *
+ * This function either displays or logs the deprecation message,
+ * depending upon the deprecation policies in {@link CODING.txt}.
+ * Logged messages are sent with the level of 'WARNING'. Only admins
+ * get visual deprecation notices. When non-admins are logged in, the
+ * notices are sent to PHP's log through elgg_dump().
+ *
+ * A user-visual message will be displayed if $dep_version is greater
+ * than 1 minor releases lower than the current Elgg version, or at all
+ * lower than the current Elgg major version.
+ *
+ * @note This will always at least log a warning. Don't use to pre-deprecate things.
+ * This assumes we are releasing in order and deprecating according to policy.
+ *
+ * @see CODING.txt
+ *
+ * @param string $msg Message to log / display.
+ * @param string $dep_version Human-readable *release* version: 1.7, 1.8, ...
+ * @param int $backtrace_level How many levels back to display the backtrace.
+ * Useful if calling from functions that are called
+ * from other places (like elgg_view()). Set to -1
+ * for a full backtrace.
+ *
+ * @return bool
+ * @since 1.7.0
+ */
+function elgg_deprecated_notice($msg, $dep_version, $backtrace_level = 1) {
+ // if it's a major release behind, visual and logged
+ // if it's a 1 minor release behind, visual and logged
+ // if it's for current minor release, logged.
+ // bugfixes don't matter because we are not deprecating between them
+
+ if (!$dep_version) {
+ return false;
+ }
+
+ $elgg_version = get_version(true);
+ $elgg_version_arr = explode('.', $elgg_version);
+ $elgg_major_version = (int)$elgg_version_arr[0];
+ $elgg_minor_version = (int)$elgg_version_arr[1];
+
+ $dep_major_version = (int)$dep_version;
+ $dep_minor_version = 10 * ($dep_version - $dep_major_version);
+
+ $visual = false;
+
+ if (($dep_major_version < $elgg_major_version) ||
+ ($dep_minor_version < $elgg_minor_version)) {
+ $visual = true;
+ }
+
+ $msg = "Deprecated in $dep_major_version.$dep_minor_version: $msg";
+
+ if ($visual && elgg_is_admin_logged_in()) {
+ register_error($msg);
+ }
+
+ // Get a file and line number for the log. Never show this in the UI.
+ // Skip over the function that sent this notice and see who called the deprecated
+ // function itself.
+ $msg .= " Called from ";
+ $stack = array();
+ $backtrace = debug_backtrace();
+ // never show this call.
+ array_shift($backtrace);
+ $i = count($backtrace);
+
+ foreach ($backtrace as $trace) {
+ $stack[] = "[#$i] {$trace['file']}:{$trace['line']}";
+ $i--;
+
+ if ($backtrace_level > 0) {
+ if ($backtrace_level <= 1) {
+ break;
+ }
+ $backtrace_level--;
+ }
+ }
+
+ $msg .= implode("<br /> -> ", $stack);
+
+ elgg_log($msg, 'WARNING');
+
+ return true;
+}
+
+/**
+ * Returns the current page's complete URL.
+ *
+ * The current URL is assembled using the network's wwwroot and the request URI
+ * in $_SERVER as populated by the web server. This function will include
+ * any schemes, usernames and passwords, and ports.
+ *
+ * @return string The current page URL.
+ */
+function current_page_url() {
+ global $CONFIG;
+
+ $url = parse_url(elgg_get_site_url());
+
+ $page = $url['scheme'] . "://";
+
+ // user/pass
+ if ((isset($url['user'])) && ($url['user'])) {
+ $page .= $url['user'];
+ }
+ if ((isset($url['pass'])) && ($url['pass'])) {
+ $page .= ":" . $url['pass'];
+ }
+ if ((isset($url['user']) && $url['user']) ||
+ (isset($url['pass']) && $url['pass'])) {
+ $page .= "@";
+ }
+
+ $page .= $url['host'];
+
+ if ((isset($url['port'])) && ($url['port'])) {
+ $page .= ":" . $url['port'];
+ }
+
+ $page = trim($page, "/");
+
+ $page .= $_SERVER['REQUEST_URI'];
+
+ return $page;
+}
+
+/**
+ * Return the full URL of the current page.
+ *
+ * @return string The URL
+ * @todo Combine / replace with current_page_url()
+ */
+function full_url() {
+ $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : "";
+ $protocol = substr(strtolower($_SERVER["SERVER_PROTOCOL"]), 0,
+ strpos(strtolower($_SERVER["SERVER_PROTOCOL"]), "/")) . $s;
+
+ $port = ($_SERVER["SERVER_PORT"] == "80" || $_SERVER["SERVER_PORT"] == "443") ?
+ "" : (":" . $_SERVER["SERVER_PORT"]);
+
+ // This is here to prevent XSS in poorly written browsers used by 80% of the population.
+ // {@trac [5813]}
+ $quotes = array('\'', '"');
+ $encoded = array('%27', '%22');
+
+ return $protocol . "://" . $_SERVER['SERVER_NAME'] . $port .
+ str_replace($quotes, $encoded, $_SERVER['REQUEST_URI']);
+}
+
+/**
+ * Builds a URL from the a parts array like one returned by {@link parse_url()}.
+ *
+ * @note If only partial information is passed, a partial URL will be returned.
+ *
+ * @param array $parts Associative array of URL components like parse_url() returns
+ * @param bool $html_encode HTML Encode the url?
+ *
+ * @return str Full URL
+ * @since 1.7.0
+ */
+function elgg_http_build_url(array $parts, $html_encode = TRUE) {
+ // build only what's given to us.
+ $scheme = isset($parts['scheme']) ? "{$parts['scheme']}://" : '';
+ $host = isset($parts['host']) ? "{$parts['host']}" : '';
+ $port = isset($parts['port']) ? ":{$parts['port']}" : '';
+ $path = isset($parts['path']) ? "{$parts['path']}" : '';
+ $query = isset($parts['query']) ? "?{$parts['query']}" : '';
+
+ $string = $scheme . $host . $port . $path . $query;
+
+ if ($html_encode) {
+ return elgg_format_url($string);
+ } else {
+ return $string;
+ }
+}
+
+/**
+ * Adds action tokens to URL
+ *
+ * As of 1.7.0 action tokens are required on all actions.
+ * Use this function to append action tokens to a URL's GET parameters.
+ * This will preserve any existing GET parameters.
+ *
+ * @note If you are using {@elgg_view input/form} you don't need to
+ * add tokens to the action. The form view automatically handles
+ * tokens.
+ *
+ * @param str $url Full action URL
+ * @param bool $html_encode HTML encode the url? (default: false)
+ *
+ * @return str URL with action tokens
+ * @since 1.7.0
+ * @link http://docs.elgg.org/Tutorials/Actions
+ */
+function elgg_add_action_tokens_to_url($url, $html_encode = FALSE) {
+ $components = parse_url(elgg_normalize_url($url));
+
+ if (isset($components['query'])) {
+ $query = elgg_parse_str($components['query']);
+ } else {
+ $query = array();
+ }
+
+ if (isset($query['__elgg_ts']) && isset($query['__elgg_token'])) {
+ return $url;
+ }
+
+ // append action tokens to the existing query
+ $query['__elgg_ts'] = time();
+ $query['__elgg_token'] = generate_action_token($query['__elgg_ts']);
+ $components['query'] = http_build_query($query);
+
+ // rebuild the full url
+ return elgg_http_build_url($components, $html_encode);
+}
+
+/**
+ * Removes an element from a URL's query string.
+ *
+ * @note You can send a partial URL string.
+ *
+ * @param string $url Full URL
+ * @param string $element The element to remove
+ *
+ * @return string The new URL with the query element removed.
+ * @since 1.7.0
+ */
+function elgg_http_remove_url_query_element($url, $element) {
+ $url_array = parse_url($url);
+
+ if (isset($url_array['query'])) {
+ $query = elgg_parse_str($url_array['query']);
+ } else {
+ // nothing to remove. Return original URL.
+ return $url;
+ }
+
+ if (array_key_exists($element, $query)) {
+ unset($query[$element]);
+ }
+
+ $url_array['query'] = http_build_query($query);
+ $string = elgg_http_build_url($url_array);
+ return $string;
+}
+
+/**
+ * Adds an element or elements to a URL's query string.
+ *
+ * @param str $url The URL
+ * @param array $elements Key/value pairs to add to the URL
+ *
+ * @return str The new URL with the query strings added
+ * @since 1.7.0
+ */
+function elgg_http_add_url_query_elements($url, array $elements) {
+ $url_array = parse_url($url);
+
+ if (isset($url_array['query'])) {
+ $query = elgg_parse_str($url_array['query']);
+ } else {
+ $query = array();
+ }
+
+ foreach ($elements as $k => $v) {
+ $query[$k] = $v;
+ }
+
+ $url_array['query'] = http_build_query($query);
+ $string = elgg_http_build_url($url_array, false);
+
+ return $string;
+}
+
+/**
+ * Test if two URLs are functionally identical.
+ *
+ * @tip If $ignore_params is used, neither the name nor its value will be considered when comparing.
+ *
+ * @tip The order of GET params doesn't matter.
+ *
+ * @param string $url1 First URL
+ * @param string $url2 Second URL
+ * @param array $ignore_params GET params to ignore in the comparison
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_http_url_is_identical($url1, $url2, $ignore_params = array('offset', 'limit')) {
+ global $CONFIG;
+
+ // if the server portion is missing but it starts with / then add the url in.
+ // @todo use elgg_normalize_url()
+ if (elgg_substr($url1, 0, 1) == '/') {
+ $url1 = elgg_get_site_url() . ltrim($url1, '/');
+ }
+
+ if (elgg_substr($url1, 0, 1) == '/') {
+ $url2 = elgg_get_site_url() . ltrim($url2, '/');
+ }
+
+ // @todo - should probably do something with relative URLs
+
+ if ($url1 == $url2) {
+ return TRUE;
+ }
+
+ $url1_info = parse_url($url1);
+ $url2_info = parse_url($url2);
+
+ if (isset($url1_info['path'])) {
+ $url1_info['path'] = trim($url1_info['path'], '/');
+ }
+ if (isset($url2_info['path'])) {
+ $url2_info['path'] = trim($url2_info['path'], '/');
+ }
+
+ // compare basic bits
+ $parts = array('scheme', 'host', 'path');
+
+ foreach ($parts as $part) {
+ if ((isset($url1_info[$part]) && isset($url2_info[$part]))
+ && $url1_info[$part] != $url2_info[$part]) {
+ return FALSE;
+ } elseif (isset($url1_info[$part]) && !isset($url2_info[$part])) {
+ return FALSE;
+ } elseif (!isset($url1_info[$part]) && isset($url2_info[$part])) {
+ return FALSE;
+ }
+ }
+
+ // quick compare of get params
+ if (isset($url1_info['query']) && isset($url2_info['query'])
+ && $url1_info['query'] == $url2_info['query']) {
+ return TRUE;
+ }
+
+ // compare get params that might be out of order
+ $url1_params = array();
+ $url2_params = array();
+
+ if (isset($url1_info['query'])) {
+ if ($url1_info['query'] = html_entity_decode($url1_info['query'])) {
+ $url1_params = elgg_parse_str($url1_info['query']);
+ }
+ }
+
+ if (isset($url2_info['query'])) {
+ if ($url2_info['query'] = html_entity_decode($url2_info['query'])) {
+ $url2_params = elgg_parse_str($url2_info['query']);
+ }
+ }
+
+ // drop ignored params
+ foreach ($ignore_params as $param) {
+ if (isset($url1_params[$param])) {
+ unset($url1_params[$param]);
+ }
+ if (isset($url2_params[$param])) {
+ unset($url2_params[$param]);
+ }
+ }
+
+ // array_diff_assoc only returns the items in arr1 that aren't in arrN
+ // but not the items that ARE in arrN but NOT in arr1
+ // if arr1 is an empty array, this function will return 0 no matter what.
+ // since we only care if they're different and not how different,
+ // add the results together to get a non-zero (ie, different) result
+ $diff_count = count(array_diff_assoc($url1_params, $url2_params));
+ $diff_count += count(array_diff_assoc($url2_params, $url1_params));
+ if ($diff_count > 0) {
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+/**
+ * Checks for $array[$key] and returns its value if it exists, else
+ * returns $default.
+ *
+ * Shorthand for $value = (isset($array['key'])) ? $array['key'] : 'default';
+ *
+ * @param string $key The key to check.
+ * @param array $array The array to check against.
+ * @param mixed $default Default value to return if nothing is found.
+ * @param bool $strict Return array key if it's set, even if empty. If false,
+ * return $default if the array key is unset or empty.
+ *
+ * @return mixed
+ * @since 1.8.0
+ */
+function elgg_extract($key, array $array, $default = null, $strict = true) {
+ if (!is_array($array)) {
+ return $default;
+ }
+
+ if ($strict) {
+ return (isset($array[$key])) ? $array[$key] : $default;
+ } else {
+ return (isset($array[$key]) && !empty($array[$key])) ? $array[$key] : $default;
+ }
+}
+
+/**
+ * Sorts a 3d array by specific element.
+ *
+ * @warning Will re-index numeric indexes.
+ *
+ * @note This operates the same as the built-in sort functions.
+ * It sorts the array and returns a bool for success.
+ *
+ * Do this: elgg_sort_3d_array_by_value($my_array);
+ * Not this: $my_array = elgg_sort_3d_array_by_value($my_array);
+ *
+ * @param array &$array Array to sort
+ * @param string $element Element to sort by
+ * @param int $sort_order PHP sort order
+ * {@see http://us2.php.net/array_multisort}
+ * @param int $sort_type PHP sort type
+ * {@see http://us2.php.net/sort}
+ *
+ * @return bool
+ */
+function elgg_sort_3d_array_by_value(&$array, $element, $sort_order = SORT_ASC,
+$sort_type = SORT_LOCALE_STRING) {
+
+ $sort = array();
+
+ foreach ($array as $k => $v) {
+ if (isset($v[$element])) {
+ $sort[] = strtolower($v[$element]);
+ } else {
+ $sort[] = NULL;
+ }
+ };
+
+ return array_multisort($sort, $sort_order, $sort_type, $array);
+}
+
+/**
+ * Return the state of a php.ini setting as a bool
+ *
+ * @warning Using this on ini settings that are not boolean
+ * will be inaccurate!
+ *
+ * @param string $ini_get_arg The INI setting
+ *
+ * @return true|false Depending on whether it's on or off
+ */
+function ini_get_bool($ini_get_arg) {
+ $temp = strtolower(ini_get($ini_get_arg));
+
+ if ($temp == '1' || $temp == 'on' || $temp == 'true') {
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Returns a PHP INI setting in bytes.
+ *
+ * @tip Use this for arithmetic when determining if a file can be uploaded.
+ *
+ * @param str $setting The php.ini setting
+ *
+ * @return int
+ * @since 1.7.0
+ * @link http://www.php.net/manual/en/function.ini-get.php
+ */
+function elgg_get_ini_setting_in_bytes($setting) {
+ // retrieve INI setting
+ $val = ini_get($setting);
+
+ // convert INI setting when shorthand notation is used
+ $last = strtolower($val[strlen($val) - 1]);
+ switch($last) {
+ case 'g':
+ $val *= 1024;
+ case 'm':
+ $val *= 1024;
+ case 'k':
+ $val *= 1024;
+ }
+
+ // return byte value
+ return $val;
+}
+
+/**
+ * Returns true is string is not empty, false, or null.
+ *
+ * Function to be used in array_filter which returns true if $string is not null.
+ *
+ * @param string $string The string to test
+ *
+ * @return bool
+ * @todo This is used once in metadata.php. Use a lambda function instead.
+ */
+function is_not_null($string) {
+ if (($string === '') || ($string === false) || ($string === null)) {
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Normalise the singular keys in an options array to plural keys.
+ *
+ * Used in elgg_get_entities*() functions to support shortcutting plural
+ * names by singular names.
+ *
+ * @param array $options The options array. $options['keys'] = 'values';
+ * @param array $singulars A list of singular words to pluralize by adding 's'.
+ *
+ * @return array
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_normalise_plural_options_array($options, $singulars) {
+ foreach ($singulars as $singular) {
+ $plural = $singular . 's';
+
+ if (array_key_exists($singular, $options)) {
+ if ($options[$singular] === ELGG_ENTITIES_ANY_VALUE) {
+ $options[$plural] = $options[$singular];
+ } else {
+ // Test for array refs #2641
+ if (!is_array($options[$singular])) {
+ $options[$plural] = array($options[$singular]);
+ } else {
+ $options[$plural] = $options[$singular];
+ }
+ }
+ }
+
+ unset($options[$singular]);
+ }
+
+ return $options;
+}
+
+/**
+ * Emits a shutdown:system event upon PHP shutdown, but before database connections are dropped.
+ *
+ * @tip Register for the shutdown:system event to perform functions at the end of page loads.
+ *
+ * @warning Using this event to perform long-running functions is not very
+ * useful. Servers will hold pages until processing is done before sending
+ * them out to the browser.
+ *
+ * @see http://www.php.net/register-shutdown-function
+ *
+ * @return void
+ * @see register_shutdown_hook()
+ * @access private
+ */
+function _elgg_shutdown_hook() {
+ global $START_MICROTIME;
+
+ try {
+ elgg_trigger_event('shutdown', 'system');
+
+ $time = (float)(microtime(TRUE) - $START_MICROTIME);
+ // demoted to NOTICE from DEBUG so javascript is not corrupted
+ elgg_log("Page {$_SERVER['REQUEST_URI']} generated in $time seconds", 'NOTICE');
+ } catch (Exception $e) {
+ $message = 'Error: ' . get_class($e) . ' thrown within the shutdown handler. ';
+ $message .= "Message: '{$e->getMessage()}' in file {$e->getFile()} (line {$e->getLine()})";
+ error_log($message);
+ error_log("Exception trace stack: {$e->getTraceAsString()}");
+ }
+}
+
+/**
+ * Serve javascript pages.
+ *
+ * Searches for views under js/ and outputs them with special
+ * headers for caching control.
+ *
+ * @param array $page The page array
+ *
+ * @return bool
+ * @elgg_pagehandler js
+ * @access private
+ */
+function elgg_js_page_handler($page) {
+ return elgg_cacheable_view_page_handler($page, 'js');
+}
+
+/**
+ * Serve individual views for Ajax.
+ *
+ * /ajax/view/<name of view>?<key/value params>
+ *
+ * @param array $page The page array
+ *
+ * @return bool
+ * @elgg_pagehandler ajax
+ * @access private
+ */
+function elgg_ajax_page_handler($page) {
+ if (is_array($page) && sizeof($page)) {
+ // throw away 'view' and form the view name
+ unset($page[0]);
+ $view = implode('/', $page);
+
+ $allowed_views = elgg_get_config('allowed_ajax_views');
+ if (!array_key_exists($view, $allowed_views)) {
+ header('HTTP/1.1 403 Forbidden');
+ exit;
+ }
+
+ // pull out GET parameters through filter
+ $vars = array();
+ foreach ($_GET as $name => $value) {
+ $vars[$name] = get_input($name);
+ }
+
+ if (isset($vars['guid'])) {
+ $vars['entity'] = get_entity($vars['guid']);
+ }
+
+ echo elgg_view($view, $vars);
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Serve CSS
+ *
+ * Serves CSS from the css views directory with headers for caching control
+ *
+ * @param array $page The page array
+ *
+ * @return void
+ * @elgg_pagehandler css
+ * @access private
+ */
+function elgg_css_page_handler($page) {
+ if (!isset($page[0])) {
+ // default css
+ $page[0] = 'elgg';
+ }
+
+ return elgg_cacheable_view_page_handler($page, 'css');
+}
+
+/**
+ * Serves a JS or CSS view with headers for caching.
+ *
+ * /<css||js>/name/of/view.<last_cache>.<css||js>
+ *
+ * @param array $page The page array
+ * @param string $type The type: js or css
+ *
+ * @return bool
+ * @access private
+ */
+function elgg_cacheable_view_page_handler($page, $type) {
+
+ switch ($type) {
+ case 'js':
+ $content_type = 'text/javascript';
+ break;
+
+ case 'css':
+ $content_type = 'text/css';
+ break;
+
+ default:
+ return false;
+ break;
+ }
+
+ if ($page) {
+ // the view file names can have multiple dots
+ // eg: views/default/js/calendars/jquery.fullcalendar.min.php
+ // translates to the url /js/calendars/jquery.fullcalendar.min.<ts>.js
+ // and the view js/calendars/jquery.fullcalendar.min
+ // we ignore the last two dots for the ts and the ext.
+ // Additionally, the timestamp is optional.
+ $page = implode('/', $page);
+ $regex = '|(.+?)\.([\d]+\.)?\w+$|';
+ preg_match($regex, $page, $matches);
+ $view = $matches[1];
+ $return = elgg_view("$type/$view");
+
+ header("Content-type: $content_type");
+
+ // @todo should js be cached when simple cache turned off
+ //header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+10 days")), true);
+ //header("Pragma: public");
+ //header("Cache-Control: public");
+ //header("Content-Length: " . strlen($return));
+
+ echo $return;
+ return true;
+ }
+}
+
+/**
+ * Reverses the ordering in an ORDER BY clause. This is achived by replacing
+ * asc with desc, or appending desc to the end of the clause.
+ *
+ * This is used mostly for elgg_get_entities() and other similar functions.
+ *
+ * @param string $order_by An order by clause
+ * @access private
+ * @return string
+ * @access private
+ */
+function elgg_sql_reverse_order_by_clause($order_by) {
+ $order_by = strtolower($order_by);
+
+ if (strpos($order_by, ' asc') !== false) {
+ $return = str_replace(' asc', ' desc', $order_by);
+ } elseif (strpos($order_by, ' desc') !== false) {
+ $return = str_replace(' desc', ' asc', $order_by);
+ } else {
+ // no order specified, so default to desc since mysql defaults to asc
+ $return = $order_by . ' desc';
+ }
+
+ return $return;
+}
+
+/**
+ * Enable objects with an enable() method.
+ *
+ * Used as a callback for ElggBatch.
+ *
+ * @todo why aren't these static methods on ElggBatch?
+ *
+ * @param object $object The object to enable
+ * @return bool
+ * @access private
+ */
+function elgg_batch_enable_callback($object) {
+ // our db functions return the number of rows affected...
+ return $object->enable() ? true : false;
+}
+
+/**
+ * Disable objects with a disable() method.
+ *
+ * Used as a callback for ElggBatch.
+ *
+ * @param object $object The object to disable
+ * @return bool
+ * @access private
+ */
+function elgg_batch_disable_callback($object) {
+ // our db functions return the number of rows affected...
+ return $object->disable() ? true : false;
+}
+
+/**
+ * Delete objects with a delete() method.
+ *
+ * Used as a callback for ElggBatch.
+ *
+ * @param object $object The object to disable
+ * @return bool
+ * @access private
+ */
+function elgg_batch_delete_callback($object) {
+ // our db functions return the number of rows affected...
+ return $object->delete() ? true : false;
+}
+
+/**
+ * Checks if there are some constraints on the options array for
+ * potentially dangerous operations.
+ *
+ * @param array $options Options array
+ * @param string $type Options type: metadata or annotations
+ * @return bool
+ * @access private
+ */
+function elgg_is_valid_options_for_batch_operation($options, $type) {
+ if (!$options || !is_array($options)) {
+ return false;
+ }
+
+ // at least one of these is required.
+ $required = array(
+ // generic restraints
+ 'guid', 'guids'
+ );
+
+ switch ($type) {
+ case 'metadata':
+ $metadata_required = array(
+ 'metadata_owner_guid', 'metadata_owner_guids',
+ 'metadata_name', 'metadata_names',
+ 'metadata_value', 'metadata_values'
+ );
+
+ $required = array_merge($required, $metadata_required);
+ break;
+
+ case 'annotations':
+ case 'annotation':
+ $annotations_required = array(
+ 'annotation_owner_guid', 'annotation_owner_guids',
+ 'annotation_name', 'annotation_names',
+ 'annotation_value', 'annotation_values'
+ );
+
+ $required = array_merge($required, $annotations_required);
+ break;
+
+ default:
+ return false;
+ }
+
+ foreach ($required as $key) {
+ // check that it exists and is something.
+ if (isset($options[$key]) && $options[$key]) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Intercepts the index page when Walled Garden mode is enabled.
+ *
+ * @link http://docs.elgg.org/Tutorials/WalledGarden
+ * @elgg_plugin_hook index system
+ *
+ * @param string $hook The name of the hook
+ * @param string $type The type of hook
+ * @param bool $value Has a plugin already rendered an index page?
+ * @param array $params Array of parameters (should be empty)
+ * @return bool
+ * @access private
+ */
+function elgg_walled_garden_index($hook, $type, $value, $params) {
+ if ($value) {
+ // do not create a second index page so return
+ return;
+ }
+
+ elgg_load_css('elgg.walled_garden');
+ elgg_load_js('elgg.walled_garden');
+
+ $content = elgg_view('core/walled_garden/login');
+
+ $params = array(
+ 'content' => $content,
+ 'class' => 'elgg-walledgarden-double',
+ 'id' => 'elgg-walledgarden-login',
+ );
+ $body = elgg_view_layout('walled_garden', $params);
+ echo elgg_view_page('', $body, 'walled_garden');
+
+ // return true to prevent other plugins from adding a front page
+ return true;
+}
+
+/**
+ * Serve walled garden sections
+ *
+ * @param array $page Array of URL segments
+ * @return string
+ * @access private
+ */
+function _elgg_walled_garden_ajax_handler($page) {
+ $view = $page[0];
+ $params = array(
+ 'content' => elgg_view("core/walled_garden/$view"),
+ 'class' => 'elgg-walledgarden-single hidden',
+ 'id' => str_replace('_', '-', "elgg-walledgarden-$view"),
+ );
+ echo elgg_view_layout('walled_garden', $params);
+ return true;
+}
+
+/**
+ * Checks the status of the Walled Garden and forwards to a login page
+ * if required.
+ *
+ * If the site is in Walled Garden mode, all page except those registered as
+ * plugin pages by {@elgg_hook public_pages walled_garden} will redirect to
+ * a login page.
+ *
+ * @since 1.8.0
+ * @elgg_event_handler init system
+ * @link http://docs.elgg.org/Tutorials/WalledGarden
+ * @return void
+ * @access private
+ */
+function elgg_walled_garden() {
+ global $CONFIG;
+
+ elgg_register_css('elgg.walled_garden', '/css/walled_garden.css');
+ elgg_register_js('elgg.walled_garden', '/js/walled_garden.js');
+
+ elgg_register_page_handler('walled_garden', '_elgg_walled_garden_ajax_handler');
+
+ // check for external page view
+ if (isset($CONFIG->site) && $CONFIG->site instanceof ElggSite) {
+ $CONFIG->site->checkWalledGarden();
+ }
+}
+
+/**
+ * Remove public access for walled gardens
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $accesses
+ * @return array
+ * @access private
+ */
+function _elgg_walled_garden_remove_public_access($hook, $type, $accesses) {
+ if (isset($accesses[ACCESS_PUBLIC])) {
+ unset($accesses[ACCESS_PUBLIC]);
+ }
+ return $accesses;
+}
+
+/**
+ * Boots the engine
+ *
+ * 1. sets error handlers
+ * 2. connects to database
+ * 3. verifies the installation suceeded
+ * 4. loads application configuration
+ * 5. loads i18n data
+ * 6. loads site configuration
+ *
+ * @access private
+ */
+function _elgg_engine_boot() {
+ // Register the error handlers
+ set_error_handler('_elgg_php_error_handler');
+ set_exception_handler('_elgg_php_exception_handler');
+
+ setup_db_connections();
+
+ verify_installation();
+
+ _elgg_load_application_config();
+
+ _elgg_load_site_config();
+
+ _elgg_session_boot();
+
+ _elgg_load_cache();
+
+ _elgg_load_translations();
+}
+
+/**
+ * Elgg's main init.
+ *
+ * Handles core actions for comments, the JS pagehandler, and the shutdown function.
+ *
+ * @elgg_event_handler init system
+ * @return void
+ * @access private
+ */
+function elgg_init() {
+ global $CONFIG;
+
+ elgg_register_action('comments/add');
+ elgg_register_action('comments/delete');
+
+ elgg_register_page_handler('js', 'elgg_js_page_handler');
+ elgg_register_page_handler('css', 'elgg_css_page_handler');
+ elgg_register_page_handler('ajax', 'elgg_ajax_page_handler');
+
+ elgg_register_js('elgg.autocomplete', 'js/lib/ui.autocomplete.js');
+ elgg_register_js('jquery.ui.autocomplete.html', 'vendors/jquery/jquery.ui.autocomplete.html.js');
+ elgg_register_js('elgg.userpicker', 'js/lib/ui.userpicker.js');
+ elgg_register_js('elgg.friendspicker', 'js/lib/ui.friends_picker.js');
+ elgg_register_js('jquery.easing', 'vendors/jquery/jquery.easing.1.3.packed.js');
+ elgg_register_js('elgg.avatar_cropper', 'js/lib/ui.avatar_cropper.js');
+ elgg_register_js('jquery.imgareaselect', 'vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.min.js');
+ elgg_register_js('elgg.ui.river', 'js/lib/ui.river.js');
+
+ elgg_register_css('jquery.imgareaselect', 'vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-deprecated.css');
+
+ // Trigger the shutdown:system event upon PHP shutdown.
+ register_shutdown_function('_elgg_shutdown_hook');
+
+ $logo_url = elgg_get_site_url() . "_graphics/elgg_toolbar_logo.gif";
+ elgg_register_menu_item('topbar', array(
+ 'name' => 'elgg_logo',
+ 'href' => 'http://www.elgg.org/',
+ 'text' => "<img src=\"$logo_url\" alt=\"Elgg logo\" width=\"38\" height=\"20\" />",
+ 'priority' => 1,
+ 'link_class' => 'elgg-topbar-logo',
+ ));
+
+ // Sets a blacklist of words in the current language.
+ // This is a comma separated list in word:blacklist.
+ // @todo possibly deprecate
+ $CONFIG->wordblacklist = array();
+ $list = explode(',', elgg_echo('word:blacklist'));
+ if ($list) {
+ foreach ($list as $l) {
+ $CONFIG->wordblacklist[] = trim($l);
+ }
+ }
+}
+
+/**
+ * Adds unit tests for the general API.
+ *
+ * @param string $hook unit_test
+ * @param string $type system
+ * @param array $value array of test files
+ * @param array $params empty
+ *
+ * @elgg_plugin_hook unit_tests system
+ * @return void
+ * @access private
+ */
+function elgg_api_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/entity_getter_functions.php';
+ $value[] = $CONFIG->path . 'engine/tests/api/helpers.php';
+ $value[] = $CONFIG->path . 'engine/tests/regression/trac_bugs.php';
+ return $value;
+}
+
+/**#@+
+ * Controlls access levels on ElggEntity entities, metadata, and annotations.
+ *
+ * @var int
+ */
+define('ACCESS_DEFAULT', -1);
+define('ACCESS_PRIVATE', 0);
+define('ACCESS_LOGGED_IN', 1);
+define('ACCESS_PUBLIC', 2);
+define('ACCESS_FRIENDS', -2);
+/**#@-*/
+
+/**
+ * Constant to request the value of a parameter be ignored in elgg_get_*() functions
+ *
+ * @see elgg_get_entities()
+ * @var NULL
+ * @since 1.7
+ */
+define('ELGG_ENTITIES_ANY_VALUE', NULL);
+
+/**
+ * Constant to request the value of a parameter be nothing in elgg_get_*() functions.
+ *
+ * @see elgg_get_entities()
+ * @var int 0
+ * @since 1.7
+ */
+define('ELGG_ENTITIES_NO_VALUE', 0);
+
+/**
+ * Used in calls to forward() to specify the browser should be redirected to the
+ * referring page.
+ *
+ * @see forward
+ * @var unknown_type
+ */
+define('REFERRER', -1);
+
+/**
+ * Alternate spelling for REFERRER. Included because of some bad documentation
+ * in the original HTTP spec.
+ *
+ * @see forward()
+ * @link http://en.wikipedia.org/wiki/HTTP_referrer#Origin_of_the_term_referer
+ * @var int -1
+ */
+define('REFERER', -1);
+
+elgg_register_event_handler('init', 'system', 'elgg_init');
+elgg_register_event_handler('boot', 'system', '_elgg_engine_boot', 1);
+elgg_register_plugin_hook_handler('unit_test', 'system', 'elgg_api_test');
+
+elgg_register_event_handler('init', 'system', 'add_custom_menu_items', 1000);
+elgg_register_event_handler('init', 'system', 'elgg_walled_garden', 1000);
diff --git a/engine/lib/entities.php b/engine/lib/entities.php
new file mode 100644
index 000000000..ce736ce05
--- /dev/null
+++ b/engine/lib/entities.php
@@ -0,0 +1,2526 @@
+<?php
+/**
+ * Procedural code for creating, loading, and modifying ElggEntity objects.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Entities
+ * @link http://docs.elgg.org/DataModel/Entities
+ */
+
+/**
+ * Cache entities in memory once loaded.
+ *
+ * @global array $ENTITY_CACHE
+ * @access private
+ */
+global $ENTITY_CACHE;
+$ENTITY_CACHE = array();
+
+/**
+ * Cache subtypes and related class names.
+ *
+ * @global array|null $SUBTYPE_CACHE array once populated from DB, initially null
+ * @access private
+ */
+global $SUBTYPE_CACHE;
+$SUBTYPE_CACHE = null;
+
+/**
+ * Invalidate this class's entry in the cache.
+ *
+ * @param int $guid The entity guid
+ *
+ * @return null
+ * @access private
+ */
+function invalidate_cache_for_entity($guid) {
+ global $ENTITY_CACHE;
+
+ $guid = (int)$guid;
+
+ unset($ENTITY_CACHE[$guid]);
+
+ elgg_get_metadata_cache()->clear($guid);
+}
+
+/**
+ * Cache an entity.
+ *
+ * Stores an entity in $ENTITY_CACHE;
+ *
+ * @param ElggEntity $entity Entity to cache
+ *
+ * @return null
+ * @see retrieve_cached_entity()
+ * @see invalidate_cache_for_entity()
+ * @access private
+ * TODO(evan): Use an ElggCache object
+ */
+function cache_entity(ElggEntity $entity) {
+ global $ENTITY_CACHE;
+
+ // Don't cache non-plugin entities while access control is off, otherwise they could be
+ // exposed to users who shouldn't see them when control is re-enabled.
+ if (!($entity instanceof ElggPlugin) && elgg_get_ignore_access()) {
+ return;
+ }
+
+ // Don't store too many or we'll have memory problems
+ // TODO(evan): Pick a less arbitrary limit
+ if (count($ENTITY_CACHE) > 256) {
+ $random_guid = array_rand($ENTITY_CACHE);
+
+ unset($ENTITY_CACHE[$random_guid]);
+
+ // Purge separate metadata cache. Original idea was to do in entity destructor, but that would
+ // have caused a bunch of unnecessary purges at every shutdown. Doing it this way we have no way
+ // to know that the expunged entity will be GCed (might be another reference living), but that's
+ // OK; the metadata will reload if necessary.
+ elgg_get_metadata_cache()->clear($random_guid);
+ }
+
+ $ENTITY_CACHE[$entity->guid] = $entity;
+}
+
+/**
+ * Retrieve a entity from the cache.
+ *
+ * @param int $guid The guid
+ *
+ * @return ElggEntity|bool false if entity not cached, or not fully loaded
+ * @see cache_entity()
+ * @see invalidate_cache_for_entity()
+ * @access private
+ */
+function retrieve_cached_entity($guid) {
+ global $ENTITY_CACHE;
+
+ if (isset($ENTITY_CACHE[$guid])) {
+ if ($ENTITY_CACHE[$guid]->isFullyLoaded()) {
+ return $ENTITY_CACHE[$guid];
+ }
+ }
+
+ return false;
+}
+
+/**
+ * As retrieve_cached_entity, but returns the result as a stdClass
+ * (compatible with load functions that expect a database row.)
+ *
+ * @param int $guid The guid
+ *
+ * @return mixed
+ * @todo unused
+ * @access private
+ */
+function retrieve_cached_entity_row($guid) {
+ $obj = retrieve_cached_entity($guid);
+ if ($obj) {
+ $tmp = new stdClass;
+
+ foreach ($obj as $k => $v) {
+ $tmp->$k = $v;
+ }
+
+ return $tmp;
+ }
+
+ return false;
+}
+
+/**
+ * Return the id for a given subtype.
+ *
+ * ElggEntity objects have a type and a subtype. Subtypes
+ * are defined upon creation and cannot be changed.
+ *
+ * Plugin authors generally don't need to use this function
+ * unless writing their own SQL queries. Use {@link ElggEntity::getSubtype()}
+ * to return the string subtype.
+ *
+ * @warning {@link ElggEntity::subtype} returns the ID. You probably want
+ * {@link ElggEntity::getSubtype()} instead!
+ *
+ * @internal Subtypes are stored in the entity_subtypes table. There is a foreign
+ * key in the entities table.
+ *
+ * @param string $type Type
+ * @param string $subtype Subtype
+ *
+ * @return int Subtype ID
+ * @link http://docs.elgg.org/DataModel/Entities/Subtypes
+ * @see get_subtype_from_id()
+ * @access private
+ */
+function get_subtype_id($type, $subtype) {
+ global $SUBTYPE_CACHE;
+
+ if (!$subtype) {
+ return false;
+ }
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ // use the cache before hitting database
+ $result = _elgg_retrieve_cached_subtype($type, $subtype);
+ if ($result !== null) {
+ return $result->id;
+ }
+
+ return false;
+}
+
+/**
+ * Return string name for a given subtype ID.
+ *
+ * @param int $subtype_id Subtype ID
+ *
+ * @return string|false Subtype name, false if subtype not found
+ * @link http://docs.elgg.org/DataModel/Entities/Subtypes
+ * @see get_subtype_from_id()
+ * @access private
+ */
+function get_subtype_from_id($subtype_id) {
+ global $SUBTYPE_CACHE;
+
+ if (!$subtype_id) {
+ return false;
+ }
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ if (isset($SUBTYPE_CACHE[$subtype_id])) {
+ return $SUBTYPE_CACHE[$subtype_id]->subtype;
+ }
+
+ return false;
+}
+
+/**
+ * Retrieve subtype from the cache.
+ *
+ * @param string $type
+ * @param string $subtype
+ * @return stdClass|null
+ *
+ * @access private
+ */
+function _elgg_retrieve_cached_subtype($type, $subtype) {
+ global $SUBTYPE_CACHE;
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ foreach ($SUBTYPE_CACHE as $obj) {
+ if ($obj->type === $type && $obj->subtype === $subtype) {
+ return $obj;
+ }
+ }
+ return null;
+}
+
+/**
+ * Fetch all suptypes from DB to local cache.
+ *
+ * @access private
+ */
+function _elgg_populate_subtype_cache() {
+ global $CONFIG, $SUBTYPE_CACHE;
+
+ $results = get_data("SELECT * FROM {$CONFIG->dbprefix}entity_subtypes");
+
+ $SUBTYPE_CACHE = array();
+ foreach ($results as $row) {
+ $SUBTYPE_CACHE[$row->id] = $row;
+ }
+}
+
+/**
+ * Return the class name for a registered type and subtype.
+ *
+ * Entities can be registered to always be loaded as a certain class
+ * with add_subtype() or update_subtype(). This function returns the class
+ * name if found and NULL if not.
+ *
+ * @param string $type The type
+ * @param string $subtype The subtype
+ *
+ * @return string|null a class name or null
+ * @see get_subtype_from_id()
+ * @see get_subtype_class_from_id()
+ * @access private
+ */
+function get_subtype_class($type, $subtype) {
+ global $SUBTYPE_CACHE;
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ // use the cache before going to the database
+ $obj = _elgg_retrieve_cached_subtype($type, $subtype);
+ if ($obj) {
+ return $obj->class;
+ }
+
+ return null;
+}
+
+/**
+ * Returns the class name for a subtype id.
+ *
+ * @param int $subtype_id The subtype id
+ *
+ * @return string|null
+ * @see get_subtype_class()
+ * @see get_subtype_from_id()
+ * @access private
+ */
+function get_subtype_class_from_id($subtype_id) {
+ global $SUBTYPE_CACHE;
+
+ if (!$subtype_id) {
+ return null;
+ }
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ if (isset($SUBTYPE_CACHE[$subtype_id])) {
+ return $SUBTYPE_CACHE[$subtype_id]->class;
+ }
+
+ return null;
+}
+
+/**
+ * Register ElggEntities with a certain type and subtype to be loaded as a specific class.
+ *
+ * By default entities are loaded as one of the 4 parent objects: site, user, object, or group.
+ * If you subclass any of these you can register the classname with add_subtype() so
+ * it will be loaded as that class automatically when retrieved from the database with
+ * {@link get_entity()}.
+ *
+ * @warning This function cannot be used to change the class for a type-subtype pair.
+ * Use update_subtype() for that.
+ *
+ * @param string $type The type you're subtyping (site, user, object, or group)
+ * @param string $subtype The subtype
+ * @param string $class Optional class name for the object
+ *
+ * @return int
+ * @link http://docs.elgg.org/Tutorials/Subclasses
+ * @link http://docs.elgg.org/DataModel/Entities
+ * @see update_subtype()
+ * @see remove_subtype()
+ * @see get_entity()
+ */
+function add_subtype($type, $subtype, $class = "") {
+ global $CONFIG, $SUBTYPE_CACHE;
+
+ if (!$subtype) {
+ return 0;
+ }
+
+ $id = get_subtype_id($type, $subtype);
+
+ if (!$id) {
+ // In cache we store non-SQL-escaped strings because that's what's returned by query
+ $cache_obj = (object) array(
+ 'type' => $type,
+ 'subtype' => $subtype,
+ 'class' => $class,
+ );
+
+ $type = sanitise_string($type);
+ $subtype = sanitise_string($subtype);
+ $class = sanitise_string($class);
+
+ $id = insert_data("INSERT INTO {$CONFIG->dbprefix}entity_subtypes"
+ . " (type, subtype, class) VALUES ('$type', '$subtype', '$class')");
+
+ // add entry to cache
+ $cache_obj->id = $id;
+ $SUBTYPE_CACHE[$id] = $cache_obj;
+ }
+
+ return $id;
+}
+
+/**
+ * Removes a registered ElggEntity type, subtype, and classname.
+ *
+ * @warning You do not want to use this function. If you want to unregister
+ * a class for a subtype, use update_subtype(). Using this function will
+ * permanently orphan all the objects created with the specified subtype.
+ *
+ * @param string $type Type
+ * @param string $subtype Subtype
+ *
+ * @return bool
+ * @see add_subtype()
+ * @see update_subtype()
+ */
+function remove_subtype($type, $subtype) {
+ global $CONFIG;
+
+ $type = sanitise_string($type);
+ $subtype = sanitise_string($subtype);
+
+ return delete_data("DELETE FROM {$CONFIG->dbprefix}entity_subtypes"
+ . " WHERE type = '$type' AND subtype = '$subtype'");
+}
+
+/**
+ * Update a registered ElggEntity type, subtype, and class name
+ *
+ * @param string $type Type
+ * @param string $subtype Subtype
+ * @param string $class Class name to use when loading this entity
+ *
+ * @return bool
+ */
+function update_subtype($type, $subtype, $class = '') {
+ global $CONFIG, $SUBTYPE_CACHE;
+
+ $id = get_subtype_id($type, $subtype);
+ if (!$id) {
+ return false;
+ }
+
+ if ($SUBTYPE_CACHE === null) {
+ _elgg_populate_subtype_cache();
+ }
+
+ $unescaped_class = $class;
+
+ $type = sanitise_string($type);
+ $subtype = sanitise_string($subtype);
+ $class = sanitise_string($class);
+
+ $success = update_data("UPDATE {$CONFIG->dbprefix}entity_subtypes
+ SET type = '$type', subtype = '$subtype', class = '$class'
+ WHERE id = $id
+ ");
+
+ if ($success && isset($SUBTYPE_CACHE[$id])) {
+ $SUBTYPE_CACHE[$id]->class = $unescaped_class;
+ }
+
+ return $success;
+}
+
+/**
+ * Update an entity in the database.
+ *
+ * There are 4 basic entity types: site, user, object, and group.
+ * All entities are split between two tables: the entities table and their type table.
+ *
+ * @warning Plugin authors should never call this directly. Use ->save() instead.
+ *
+ * @param int $guid The guid of the entity to update
+ * @param int $owner_guid The new owner guid
+ * @param int $access_id The new access id
+ * @param int $container_guid The new container guid
+ * @param int $time_created The time creation timestamp
+ *
+ * @return bool
+ * @link http://docs.elgg.org/DataModel/Entities
+ * @access private
+ */
+function update_entity($guid, $owner_guid, $access_id, $container_guid = null, $time_created = null) {
+ global $CONFIG, $ENTITY_CACHE;
+
+ $guid = (int)$guid;
+ $owner_guid = (int)$owner_guid;
+ $access_id = (int)$access_id;
+ $container_guid = (int) $container_guid;
+ if (is_null($container_guid)) {
+ $container_guid = $owner_guid;
+ }
+ $time = time();
+
+ $entity = get_entity($guid);
+
+ if ($time_created == null) {
+ $time_created = $entity->time_created;
+ } else {
+ $time_created = (int) $time_created;
+ }
+
+ if ($entity && $entity->canEdit()) {
+ if (elgg_trigger_event('update', $entity->type, $entity)) {
+ $ret = update_data("UPDATE {$CONFIG->dbprefix}entities
+ set owner_guid='$owner_guid', access_id='$access_id',
+ container_guid='$container_guid', time_created='$time_created',
+ time_updated='$time' WHERE guid=$guid");
+
+ if ($entity instanceof ElggObject) {
+ update_river_access_by_object($guid, $access_id);
+ }
+
+ // If memcache is available then delete this entry from the cache
+ static $newentity_cache;
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+ if ($newentity_cache) {
+ $newentity_cache->delete($guid);
+ }
+
+ // Handle cases where there was no error BUT no rows were updated!
+ if ($ret === false) {
+ return false;
+ }
+
+ return true;
+ }
+ }
+}
+
+/**
+ * Determine if a given user can write to an entity container.
+ *
+ * An entity can be a container for any other entity by setting the
+ * container_guid. container_guid can differ from owner_guid.
+ *
+ * A plugin hook container_permissions_check:$entity_type is emitted to allow granular
+ * access controls in plugins.
+ *
+ * @param int $user_guid The user guid, or 0 for logged in user
+ * @param int $container_guid The container, or 0 for the current page owner.
+ * @param string $type The type of entity we're looking to write
+ * @param string $subtype The subtype of the entity we're looking to write
+ *
+ * @return bool
+ * @link http://docs.elgg.org/DataModel/Containers
+ */
+function can_write_to_container($user_guid = 0, $container_guid = 0, $type = 'all', $subtype = 'all') {
+ $user_guid = (int)$user_guid;
+ $user = get_entity($user_guid);
+ if (!$user) {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ $container_guid = (int)$container_guid;
+ if (!$container_guid) {
+ $container_guid = elgg_get_page_owner_guid();
+ }
+
+ $return = false;
+
+ if (!$container_guid) {
+ $return = true;
+ }
+
+ $container = get_entity($container_guid);
+
+ if ($container) {
+ // If the user can edit the container, they can also write to it
+ if ($container->canEdit($user_guid)) {
+ $return = true;
+ }
+
+ // If still not approved, see if the user is a member of the group
+ // @todo this should be moved to the groups plugin/library
+ if (!$return && $user && $container instanceof ElggGroup) {
+ if ($container->isMember($user)) {
+ $return = true;
+ }
+ }
+ }
+
+ // See if anyone else has anything to say
+ return elgg_trigger_plugin_hook(
+ 'container_permissions_check',
+ $type,
+ array(
+ 'container' => $container,
+ 'user' => $user,
+ 'subtype' => $subtype
+ ),
+ $return);
+}
+
+/**
+ * Create a new entry in the entities table.
+ *
+ * Saves the base information in the entities table for the entity. Saving
+ * the type information is handled in the calling class method.
+ *
+ * @warning Plugin authors should never call this directly. Always use entity objects.
+ *
+ * @warning Entities must have an entry in both the entities table and their type table
+ * or they will throw an exception when loaded.
+ *
+ * @param string $type The type of the entity (site, user, object, group).
+ * @param string $subtype The subtype of the entity.
+ * @param int $owner_guid The GUID of the object's owner.
+ * @param int $access_id The access control group to create the entity with.
+ * @param int $site_guid The site to add this entity to. 0 for current.
+ * @param int $container_guid The container GUID
+ *
+ * @return int|false The new entity's GUID, or false on failure
+ * @throws InvalidParameterException
+ * @link http://docs.elgg.org/DataModel/Entities
+ * @access private
+ */
+function create_entity($type, $subtype, $owner_guid, $access_id, $site_guid = 0,
+$container_guid = 0) {
+
+ global $CONFIG;
+
+ $type = sanitise_string($type);
+ $subtype_id = add_subtype($type, $subtype);
+ $owner_guid = (int)$owner_guid;
+ $access_id = (int)$access_id;
+ $time = time();
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+ $site_guid = (int) $site_guid;
+ if ($container_guid == 0) {
+ $container_guid = $owner_guid;
+ }
+
+ $user_guid = elgg_get_logged_in_user_guid();
+ if (!can_write_to_container($user_guid, $owner_guid, $type, $subtype)) {
+ return false;
+ }
+ if ($owner_guid != $container_guid) {
+ if (!can_write_to_container($user_guid, $container_guid, $type, $subtype)) {
+ return false;
+ }
+ }
+ if ($type == "") {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:EntityTypeNotSet'));
+ }
+
+ return insert_data("INSERT into {$CONFIG->dbprefix}entities
+ (type, subtype, owner_guid, site_guid, container_guid,
+ access_id, time_created, time_updated, last_action)
+ values
+ ('$type',$subtype_id, $owner_guid, $site_guid, $container_guid,
+ $access_id, $time, $time, $time)");
+}
+
+/**
+ * Returns a database row from the entities table.
+ *
+ * @tip Use get_entity() to return the fully loaded entity.
+ *
+ * @warning This will only return results if a) it exists, b) you have access to it.
+ * see {@link get_access_sql_suffix()}.
+ *
+ * @param int $guid The GUID of the object to extract
+ *
+ * @return stdClass|false
+ * @link http://docs.elgg.org/DataModel/Entities
+ * @see entity_row_to_elggstar()
+ * @access private
+ */
+function get_entity_as_row($guid) {
+ global $CONFIG;
+
+ if (!$guid) {
+ return false;
+ }
+
+ $guid = (int) $guid;
+ $access = get_access_sql_suffix();
+
+ return get_data_row("SELECT * from {$CONFIG->dbprefix}entities where guid=$guid and $access");
+}
+
+/**
+ * Create an Elgg* object from a given entity row.
+ *
+ * Handles loading all tables into the correct class.
+ *
+ * @param stdClass $row The row of the entry in the entities table.
+ *
+ * @return ElggEntity|false
+ * @link http://docs.elgg.org/DataModel/Entities
+ * @see get_entity_as_row()
+ * @see add_subtype()
+ * @see get_entity()
+ * @access private
+ *
+ * @throws ClassException|InstallationException
+ */
+function entity_row_to_elggstar($row) {
+ if (!($row instanceof stdClass)) {
+ return $row;
+ }
+
+ if ((!isset($row->guid)) || (!isset($row->subtype))) {
+ return $row;
+ }
+
+ $new_entity = false;
+
+ // Create a memcache cache if we can
+ static $newentity_cache;
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+ if ($newentity_cache) {
+ $new_entity = $newentity_cache->load($row->guid);
+ }
+ if ($new_entity) {
+ return $new_entity;
+ }
+
+ // load class for entity if one is registered
+ $classname = get_subtype_class_from_id($row->subtype);
+ if ($classname != "") {
+ if (class_exists($classname)) {
+ $new_entity = new $classname($row);
+
+ if (!($new_entity instanceof ElggEntity)) {
+ $msg = elgg_echo('ClassException:ClassnameNotClass', array($classname, 'ElggEntity'));
+ throw new ClassException($msg);
+ }
+ } else {
+ error_log(elgg_echo('ClassNotFoundException:MissingClass', array($classname)));
+ }
+ }
+
+ if (!$new_entity) {
+ //@todo Make this into a function
+ switch ($row->type) {
+ case 'object' :
+ $new_entity = new ElggObject($row);
+ break;
+ case 'user' :
+ $new_entity = new ElggUser($row);
+ break;
+ case 'group' :
+ $new_entity = new ElggGroup($row);
+ break;
+ case 'site' :
+ $new_entity = new ElggSite($row);
+ break;
+ default:
+ $msg = elgg_echo('InstallationException:TypeNotSupported', array($row->type));
+ throw new InstallationException($msg);
+ }
+ }
+
+ // Cache entity if we have a cache available
+ if (($newentity_cache) && ($new_entity)) {
+ $newentity_cache->save($new_entity->guid, $new_entity);
+ }
+
+ return $new_entity;
+}
+
+/**
+ * Loads and returns an entity object from a guid.
+ *
+ * @param int $guid The GUID of the entity
+ *
+ * @return ElggEntity The correct Elgg or custom object based upon entity type and subtype
+ * @link http://docs.elgg.org/DataModel/Entities
+ */
+function get_entity($guid) {
+ // This should not be a static local var. Notice that cache writing occurs in a completely
+ // different instance outside this function.
+ // @todo We need a single Memcache instance with a shared pool of namespace wrappers. This function would pull an instance from the pool.
+ static $shared_cache;
+
+ // We could also use: if (!(int) $guid) { return FALSE },
+ // but that evaluates to a false positive for $guid = TRUE.
+ // This is a bit slower, but more thorough.
+ if (!is_numeric($guid) || $guid === 0 || $guid === '0') {
+ return false;
+ }
+
+ // Check local cache first
+ $new_entity = retrieve_cached_entity($guid);
+ if ($new_entity) {
+ return $new_entity;
+ }
+
+ // Check shared memory cache, if available
+ if (null === $shared_cache) {
+ if (is_memcache_available()) {
+ $shared_cache = new ElggMemcache('new_entity_cache');
+ } else {
+ $shared_cache = false;
+ }
+ }
+
+ // until ACLs in memcache, DB query is required to determine access
+ $entity_row = get_entity_as_row($guid);
+ if (!$entity_row) {
+ return false;
+ }
+
+ if ($shared_cache) {
+ $cached_entity = $shared_cache->load($guid);
+ // @todo store ACLs in memcache http://trac.elgg.org/ticket/3018#comment:3
+ if ($cached_entity) {
+ // @todo use ACL and cached entity access_id to determine if user can see it
+ return $cached_entity;
+ }
+ }
+
+ // don't let incomplete entities cause fatal exceptions
+ try {
+ $new_entity = entity_row_to_elggstar($entity_row);
+ } catch (IncompleteEntityException $e) {
+ return false;
+ }
+
+ if ($new_entity) {
+ cache_entity($new_entity);
+ }
+ return $new_entity;
+}
+
+/**
+ * Does an entity exist?
+ *
+ * This function checks for the existence of an entity independent of access
+ * permissions. It is useful for situations when a user cannot access an entity
+ * and it must be determined whether entity has been deleted or the access level
+ * has changed.
+ *
+ * @param int $guid The GUID of the entity
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_entity_exists($guid) {
+ global $CONFIG;
+
+ $guid = sanitize_int($guid);
+
+ $query = "SELECT count(*) as total FROM {$CONFIG->dbprefix}entities WHERE guid = $guid";
+ $result = get_data_row($query);
+ if ($result->total == 0) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+/**
+ * Returns an array of entities with optional filtering.
+ *
+ * Entities are the basic unit of storage in Elgg. This function
+ * provides the simplest way to get an array of entities. There
+ * are many options available that can be passed to filter
+ * what sorts of entities are returned.
+ *
+ * @tip To output formatted strings of entities, use {@link elgg_list_entities()} and
+ * its cousins.
+ *
+ * @tip Plural arguments can be written as singular if only specifying a
+ * single element. ('type' => 'object' vs 'types' => array('object')).
+ *
+ * @param array $options Array in format:
+ *
+ * types => NULL|STR entity type (type IN ('type1', 'type2')
+ * Joined with subtypes by AND. See below)
+ *
+ * subtypes => NULL|STR entity subtype (SQL: subtype IN ('subtype1', 'subtype2))
+ * Use ELGG_ENTITIES_NO_VALUE for no subtype.
+ *
+ * type_subtype_pairs => NULL|ARR (array('type' => 'subtype'))
+ * (type = '$type' AND subtype = '$subtype') pairs
+ *
+ * guids => NULL|ARR Array of entity guids
+ *
+ * owner_guids => NULL|ARR Array of owner guids
+ *
+ * container_guids => NULL|ARR Array of container_guids
+ *
+ * site_guids => NULL (current_site)|ARR Array of site_guid
+ *
+ * order_by => NULL (time_created desc)|STR SQL order by clause
+ *
+ * reverse_order_by => BOOL Reverse the default order by clause
+ *
+ * limit => NULL (10)|INT SQL limit clause (0 means no limit)
+ *
+ * offset => NULL (0)|INT SQL offset clause
+ *
+ * created_time_lower => NULL|INT Created time lower boundary in epoch time
+ *
+ * created_time_upper => NULL|INT Created time upper boundary in epoch time
+ *
+ * modified_time_lower => NULL|INT Modified time lower boundary in epoch time
+ *
+ * modified_time_upper => NULL|INT Modified time upper boundary in epoch time
+ *
+ * count => TRUE|FALSE return a count instead of entities
+ *
+ * wheres => array() Additional where clauses to AND together
+ *
+ * joins => array() Additional joins
+ *
+ * callback => string A callback function to pass each row through
+ *
+ * @return mixed If count, int. If not count, array. false on errors.
+ * @since 1.7.0
+ * @see elgg_get_entities_from_metadata()
+ * @see elgg_get_entities_from_relationship()
+ * @see elgg_get_entities_from_access_id()
+ * @see elgg_get_entities_from_annotations()
+ * @see elgg_list_entities()
+ * @link http://docs.elgg.org/DataModel/Entities/Getters
+ */
+function elgg_get_entities(array $options = array()) {
+ global $CONFIG;
+
+ $defaults = array(
+ 'types' => ELGG_ENTITIES_ANY_VALUE,
+ 'subtypes' => ELGG_ENTITIES_ANY_VALUE,
+ 'type_subtype_pairs' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'owner_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'container_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'site_guids' => $CONFIG->site_guid,
+
+ 'modified_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'modified_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+ 'created_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'created_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'reverse_order_by' => false,
+ 'order_by' => 'e.time_created desc',
+ 'group_by' => ELGG_ENTITIES_ANY_VALUE,
+ 'limit' => 10,
+ 'offset' => 0,
+ 'count' => FALSE,
+ 'selects' => array(),
+ 'wheres' => array(),
+ 'joins' => array(),
+
+ 'callback' => 'entity_row_to_elggstar',
+ );
+
+ $options = array_merge($defaults, $options);
+
+ // can't use helper function with type_subtype_pair because
+ // it's already an array...just need to merge it
+ if (isset($options['type_subtype_pair'])) {
+ if (isset($options['type_subtype_pairs'])) {
+ $options['type_subtype_pairs'] = array_merge($options['type_subtype_pairs'],
+ $options['type_subtype_pair']);
+ } else {
+ $options['type_subtype_pairs'] = $options['type_subtype_pair'];
+ }
+ }
+
+ $singulars = array('type', 'subtype', 'guid', 'owner_guid', 'container_guid', 'site_guid');
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ // evaluate where clauses
+ if (!is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ }
+
+ $wheres = $options['wheres'];
+
+ $wheres[] = elgg_get_entity_type_subtype_where_sql('e', $options['types'],
+ $options['subtypes'], $options['type_subtype_pairs']);
+
+ $wheres[] = elgg_get_guid_based_where_sql('e.guid', $options['guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.owner_guid', $options['owner_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.container_guid', $options['container_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.site_guid', $options['site_guids']);
+
+ $wheres[] = elgg_get_entity_time_where_sql('e', $options['created_time_upper'],
+ $options['created_time_lower'], $options['modified_time_upper'], $options['modified_time_lower']);
+
+ // see if any functions failed
+ // remove empty strings on successful functions
+ foreach ($wheres as $i => $where) {
+ if ($where === FALSE) {
+ return FALSE;
+ } elseif (empty($where)) {
+ unset($wheres[$i]);
+ }
+ }
+
+ // remove identical where clauses
+ $wheres = array_unique($wheres);
+
+ // evaluate join clauses
+ if (!is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ }
+
+ // remove identical join clauses
+ $joins = array_unique($options['joins']);
+
+ foreach ($joins as $i => $join) {
+ if ($join === FALSE) {
+ return FALSE;
+ } elseif (empty($join)) {
+ unset($joins[$i]);
+ }
+ }
+
+ // evalutate selects
+ if ($options['selects']) {
+ $selects = '';
+ foreach ($options['selects'] as $select) {
+ $selects .= ", $select";
+ }
+ } else {
+ $selects = '';
+ }
+
+ if (!$options['count']) {
+ $query = "SELECT DISTINCT e.*{$selects} FROM {$CONFIG->dbprefix}entities e ";
+ } else {
+ $query = "SELECT count(DISTINCT e.guid) as total FROM {$CONFIG->dbprefix}entities e ";
+ }
+
+ // add joins
+ foreach ($joins as $j) {
+ $query .= " $j ";
+ }
+
+ // add wheres
+ $query .= ' WHERE ';
+
+ foreach ($wheres as $w) {
+ $query .= " $w AND ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix('e');
+
+ // reverse order by
+ if ($options['reverse_order_by']) {
+ $options['order_by'] = elgg_sql_reverse_order_by_clause($options['order_by']);
+ }
+
+ if (!$options['count']) {
+ if ($options['group_by']) {
+ $query .= " GROUP BY {$options['group_by']}";
+ }
+
+ if ($options['order_by']) {
+ $query .= " ORDER BY {$options['order_by']}";
+ }
+
+ if ($options['limit']) {
+ $limit = sanitise_int($options['limit'], false);
+ $offset = sanitise_int($options['offset'], false);
+ $query .= " LIMIT $offset, $limit";
+ }
+
+ if ($options['callback'] === 'entity_row_to_elggstar') {
+ $dt = _elgg_fetch_entities_from_sql($query);
+ } else {
+ $dt = get_data($query, $options['callback']);
+ }
+
+ if ($dt) {
+ // populate entity and metadata caches
+ $guids = array();
+ foreach ($dt as $item) {
+ // A custom callback could result in items that aren't ElggEntity's, so check for them
+ if ($item instanceof ElggEntity) {
+ cache_entity($item);
+ // plugins usually have only settings
+ if (!$item instanceof ElggPlugin) {
+ $guids[] = $item->guid;
+ }
+ }
+ }
+ // @todo Without this, recursive delete fails. See #4568
+ reset($dt);
+
+ if ($guids) {
+ elgg_get_metadata_cache()->populateFromEntities($guids);
+ }
+ }
+ return $dt;
+ } else {
+ $total = get_data_row($query);
+ return (int)$total->total;
+ }
+}
+
+/**
+ * Return entities from an SQL query generated by elgg_get_entities.
+ *
+ * @param string $sql
+ * @return ElggEntity[]
+ *
+ * @access private
+ * @throws LogicException
+ */
+function _elgg_fetch_entities_from_sql($sql) {
+ static $plugin_subtype;
+ if (null === $plugin_subtype) {
+ $plugin_subtype = get_subtype_id('object', 'plugin');
+ }
+
+ // Keys are types, values are columns that, if present, suggest that the secondary
+ // table is already JOINed
+ $types_to_optimize = array(
+ 'object' => 'title',
+ 'user' => 'password',
+ 'group' => 'name',
+ );
+
+ $rows = get_data($sql);
+
+ // guids to look up in each type
+ $lookup_types = array();
+ // maps GUIDs to the $rows key
+ $guid_to_key = array();
+
+ if (isset($rows[0]->type, $rows[0]->subtype)
+ && $rows[0]->type === 'object'
+ && $rows[0]->subtype == $plugin_subtype) {
+ // Likely the entire resultset is plugins, which have already been optimized
+ // to JOIN the secondary table. In this case we allow retrieving from cache,
+ // but abandon the extra queries.
+ $types_to_optimize = array();
+ }
+
+ // First pass: use cache where possible, gather GUIDs that we're optimizing
+ foreach ($rows as $i => $row) {
+ if (empty($row->guid) || empty($row->type)) {
+ throw new LogicException('Entity row missing guid or type');
+ }
+ if ($entity = retrieve_cached_entity($row->guid)) {
+ $rows[$i] = $entity;
+ continue;
+ }
+ if (isset($types_to_optimize[$row->type])) {
+ // check if row already looks JOINed.
+ if (isset($row->{$types_to_optimize[$row->type]})) {
+ // Row probably already contains JOINed secondary table. Don't make another query just
+ // to pull data that's already there
+ continue;
+ }
+ $lookup_types[$row->type][] = $row->guid;
+ $guid_to_key[$row->guid] = $i;
+ }
+ }
+ // Do secondary queries and merge rows
+ if ($lookup_types) {
+ $dbprefix = elgg_get_config('dbprefix');
+ }
+ foreach ($lookup_types as $type => $guids) {
+ $set = "(" . implode(',', $guids) . ")";
+ $sql = "SELECT * FROM {$dbprefix}{$type}s_entity WHERE guid IN $set";
+ $secondary_rows = get_data($sql);
+ if ($secondary_rows) {
+ foreach ($secondary_rows as $secondary_row) {
+ $key = $guid_to_key[$secondary_row->guid];
+ // cast to arrays to merge then cast back
+ $rows[$key] = (object)array_merge((array)$rows[$key], (array)$secondary_row);
+ }
+ }
+ }
+ // Second pass to finish conversion
+ foreach ($rows as $i => $row) {
+ if ($row instanceof ElggEntity) {
+ continue;
+ } else {
+ try {
+ $rows[$i] = entity_row_to_elggstar($row);
+ } catch (IncompleteEntityException $e) {
+ // don't let incomplete entities throw fatal errors
+ unset($rows[$i]);
+ }
+ }
+ }
+ return $rows;
+}
+
+/**
+ * Returns SQL where clause for type and subtype on main entity table
+ *
+ * @param string $table Entity table prefix as defined in SELECT...FROM entities $table
+ * @param NULL|array $types Array of types or NULL if none.
+ * @param NULL|array $subtypes Array of subtypes or NULL if none
+ * @param NULL|array $pairs Array of pairs of types and subtypes
+ *
+ * @return FALSE|string
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_type_subtype_where_sql($table, $types, $subtypes, $pairs) {
+ // subtype depends upon type.
+ if ($subtypes && !$types) {
+ elgg_log("Cannot set subtypes without type.", 'WARNING');
+ return FALSE;
+ }
+
+ // short circuit if nothing is requested
+ if (!$types && !$subtypes && !$pairs) {
+ return '';
+ }
+
+ // these are the only valid types for entities in elgg
+ $valid_types = elgg_get_config('entity_types');
+
+ // pairs override
+ $wheres = array();
+ if (!is_array($pairs)) {
+ if (!is_array($types)) {
+ $types = array($types);
+ }
+
+ if ($subtypes && !is_array($subtypes)) {
+ $subtypes = array($subtypes);
+ }
+
+ // decrementer for valid types. Return FALSE if no valid types
+ $valid_types_count = count($types);
+ $valid_subtypes_count = 0;
+ // remove invalid types to get an accurate count of
+ // valid types for the invalid subtype detection to use
+ // below.
+ // also grab the count of ALL subtypes on valid types to decrement later on
+ // and check against.
+ //
+ // yes this is duplicating a foreach on $types.
+ foreach ($types as $type) {
+ if (!in_array($type, $valid_types)) {
+ $valid_types_count--;
+ unset($types[array_search($type, $types)]);
+ } else {
+ // do the checking (and decrementing) in the subtype section.
+ $valid_subtypes_count += count($subtypes);
+ }
+ }
+
+ // return false if nothing is valid.
+ if (!$valid_types_count) {
+ return FALSE;
+ }
+
+ // subtypes are based upon types, so we need to look at each
+ // type individually to get the right subtype id.
+ foreach ($types as $type) {
+ $subtype_ids = array();
+ if ($subtypes) {
+ foreach ($subtypes as $subtype) {
+ // check that the subtype is valid (with ELGG_ENTITIES_NO_VALUE being a valid subtype)
+ if (ELGG_ENTITIES_NO_VALUE === $subtype || $subtype_id = get_subtype_id($type, $subtype)) {
+ $subtype_ids[] = (ELGG_ENTITIES_NO_VALUE === $subtype) ? ELGG_ENTITIES_NO_VALUE : $subtype_id;
+ } else {
+ $valid_subtypes_count--;
+ elgg_log("Type-subtype '$type:$subtype' does not exist!", 'NOTICE');
+ continue;
+ }
+ }
+
+ // return false if we're all invalid subtypes in the only valid type
+ if ($valid_subtypes_count <= 0) {
+ return FALSE;
+ }
+ }
+
+ if (is_array($subtype_ids) && count($subtype_ids)) {
+ $subtype_ids_str = implode(',', $subtype_ids);
+ $wheres[] = "({$table}.type = '$type' AND {$table}.subtype IN ($subtype_ids_str))";
+ } else {
+ $wheres[] = "({$table}.type = '$type')";
+ }
+ }
+ } else {
+ // using type/subtype pairs
+ $valid_pairs_count = count($pairs);
+ $valid_pairs_subtypes_count = 0;
+
+ // same deal as above--we need to know how many valid types
+ // and subtypes we have before hitting the subtype section.
+ // also normalize the subtypes into arrays here.
+ foreach ($pairs as $paired_type => $paired_subtypes) {
+ if (!in_array($paired_type, $valid_types)) {
+ $valid_pairs_count--;
+ unset($pairs[array_search($paired_type, $pairs)]);
+ } else {
+ if ($paired_subtypes && !is_array($paired_subtypes)) {
+ $pairs[$paired_type] = array($paired_subtypes);
+ }
+ $valid_pairs_subtypes_count += count($paired_subtypes);
+ }
+ }
+
+ if ($valid_pairs_count <= 0) {
+ return FALSE;
+ }
+ foreach ($pairs as $paired_type => $paired_subtypes) {
+ // this will always be an array because of line 2027, right?
+ // no...some overly clever person can say pair => array('object' => null)
+ if (is_array($paired_subtypes)) {
+ $paired_subtype_ids = array();
+ foreach ($paired_subtypes as $paired_subtype) {
+ if (ELGG_ENTITIES_NO_VALUE === $paired_subtype
+ || ($paired_subtype_id = get_subtype_id($paired_type, $paired_subtype))) {
+
+ $paired_subtype_ids[] = (ELGG_ENTITIES_NO_VALUE === $paired_subtype) ?
+ ELGG_ENTITIES_NO_VALUE : $paired_subtype_id;
+ } else {
+ $valid_pairs_subtypes_count--;
+ elgg_log("Type-subtype '$paired_type:$paired_subtype' does not exist!", 'NOTICE');
+ // return false if we're all invalid subtypes in the only valid type
+ continue;
+ }
+ }
+
+ // return false if there are no valid subtypes.
+ if ($valid_pairs_subtypes_count <= 0) {
+ return FALSE;
+ }
+
+
+ if ($paired_subtype_ids_str = implode(',', $paired_subtype_ids)) {
+ $wheres[] = "({$table}.type = '$paired_type'"
+ . " AND {$table}.subtype IN ($paired_subtype_ids_str))";
+ }
+ } else {
+ $wheres[] = "({$table}.type = '$paired_type')";
+ }
+ }
+ }
+
+ // pairs override the above. return false if they don't exist.
+ if (is_array($wheres) && count($wheres)) {
+ $where = implode(' OR ', $wheres);
+ return "($where)";
+ }
+
+ return '';
+}
+
+/**
+ * Returns SQL where clause for owner and containers.
+ *
+ * @param string $column Column name the guids should be checked against. Usually
+ * best to provide in table.column format.
+ * @param NULL|array $guids Array of GUIDs.
+ *
+ * @return false|string
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_guid_based_where_sql($column, $guids) {
+ // short circuit if nothing requested
+ // 0 is a valid guid
+ if (!$guids && $guids !== 0) {
+ return '';
+ }
+
+ // normalize and sanitise owners
+ if (!is_array($guids)) {
+ $guids = array($guids);
+ }
+
+ $guids_sanitized = array();
+ foreach ($guids as $guid) {
+ if ($guid !== ELGG_ENTITIES_NO_VALUE) {
+ $guid = sanitise_int($guid);
+
+ if (!$guid) {
+ return false;
+ }
+ }
+ $guids_sanitized[] = $guid;
+ }
+
+ $where = '';
+ $guid_str = implode(',', $guids_sanitized);
+
+ // implode(',', 0) returns 0.
+ if ($guid_str !== FALSE && $guid_str !== '') {
+ $where = "($column IN ($guid_str))";
+ }
+
+ return $where;
+}
+
+/**
+ * Returns SQL where clause for entity time limits.
+ *
+ * @param string $table Entity table prefix as defined in
+ * SELECT...FROM entities $table
+ * @param NULL|int $time_created_upper Time created upper limit
+ * @param NULL|int $time_created_lower Time created lower limit
+ * @param NULL|int $time_updated_upper Time updated upper limit
+ * @param NULL|int $time_updated_lower Time updated lower limit
+ *
+ * @return FALSE|string FALSE on fail, string on success.
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_time_where_sql($table, $time_created_upper = NULL,
+$time_created_lower = NULL, $time_updated_upper = NULL, $time_updated_lower = NULL) {
+
+ $wheres = array();
+
+ // exploit PHP's loose typing (quack) to check that they are INTs and not str cast to 0
+ if ($time_created_upper && $time_created_upper == sanitise_int($time_created_upper)) {
+ $wheres[] = "{$table}.time_created <= $time_created_upper";
+ }
+
+ if ($time_created_lower && $time_created_lower == sanitise_int($time_created_lower)) {
+ $wheres[] = "{$table}.time_created >= $time_created_lower";
+ }
+
+ if ($time_updated_upper && $time_updated_upper == sanitise_int($time_updated_upper)) {
+ $wheres[] = "{$table}.time_updated <= $time_updated_upper";
+ }
+
+ if ($time_updated_lower && $time_updated_lower == sanitise_int($time_updated_lower)) {
+ $wheres[] = "{$table}.time_updated >= $time_updated_lower";
+ }
+
+ if (is_array($wheres) && count($wheres) > 0) {
+ $where_str = implode(' AND ', $wheres);
+ return "($where_str)";
+ }
+
+ return '';
+}
+
+/**
+ * Returns a string of parsed entities.
+ *
+ * Displays list of entities with formatting specified
+ * by the entity view.
+ *
+ * @tip Pagination is handled automatically.
+ *
+ * @internal This also provides the views for elgg_view_annotation().
+ *
+ * @param array $options Any options from $getter options plus:
+ * full_view => BOOL Display full view entities
+ * list_type => STR 'list' or 'gallery'
+ * list_type_toggle => BOOL Display gallery / list switch
+ * pagination => BOOL Display pagination links
+ *
+ * @param mixed $getter The entity getter function to use to fetch the entities
+ * @param mixed $viewer The function to use to view the entity list.
+ *
+ * @return string
+ * @since 1.7
+ * @see elgg_get_entities()
+ * @see elgg_view_entity_list()
+ * @link http://docs.elgg.org/Entities/Output
+ */
+function elgg_list_entities(array $options = array(), $getter = 'elgg_get_entities',
+ $viewer = 'elgg_view_entity_list') {
+
+ global $autofeed;
+ $autofeed = true;
+
+ $defaults = array(
+ 'offset' => (int) max(get_input('offset', 0), 0),
+ 'limit' => (int) max(get_input('limit', 10), 0),
+ 'full_view' => TRUE,
+ 'list_type_toggle' => FALSE,
+ 'pagination' => TRUE,
+ );
+
+ $options = array_merge($defaults, $options);
+
+ //backwards compatibility
+ if (isset($options['view_type_toggle'])) {
+ $options['list_type_toggle'] = $options['view_type_toggle'];
+ }
+
+ $options['count'] = TRUE;
+ $count = $getter($options);
+
+ $options['count'] = FALSE;
+ $entities = $getter($options);
+
+ $options['count'] = $count;
+
+ return $viewer($entities, $options);
+}
+
+/**
+ * Returns a list of months in which entities were updated or created.
+ *
+ * @tip Use this to generate a list of archives by month for when entities were added or updated.
+ *
+ * @warning Months are returned in the form YYYYMM.
+ *
+ * @param string $type The type of entity
+ * @param string $subtype The subtype of entity
+ * @param int $container_guid The container GUID that the entinties belong to
+ * @param int $site_guid The site GUID
+ * @param string $order_by Order_by SQL order by clause
+ *
+ * @return array|false Either an array months as YYYYMM, or false on failure
+ */
+function get_entity_dates($type = '', $subtype = '', $container_guid = 0, $site_guid = 0,
+$order_by = 'time_created') {
+
+ global $CONFIG;
+
+ $site_guid = (int) $site_guid;
+ if ($site_guid == 0) {
+ $site_guid = $CONFIG->site_guid;
+ }
+ $where = array();
+
+ if ($type != "") {
+ $type = sanitise_string($type);
+ $where[] = "type='$type'";
+ }
+
+ if (is_array($subtype)) {
+ $tempwhere = "";
+ if (sizeof($subtype)) {
+ foreach ($subtype as $typekey => $subtypearray) {
+ foreach ($subtypearray as $subtypeval) {
+ $typekey = sanitise_string($typekey);
+ if (!empty($subtypeval)) {
+ if (!$subtypeval = (int) get_subtype_id($typekey, $subtypeval)) {
+ return false;
+ }
+ } else {
+ $subtypeval = 0;
+ }
+ if (!empty($tempwhere)) {
+ $tempwhere .= " or ";
+ }
+ $tempwhere .= "(type = '{$typekey}' and subtype = {$subtypeval})";
+ }
+ }
+ }
+ if (!empty($tempwhere)) {
+ $where[] = "({$tempwhere})";
+ }
+ } else {
+ if ($subtype) {
+ if (!$subtype_id = get_subtype_id($type, $subtype)) {
+ return FALSE;
+ } else {
+ $where[] = "subtype=$subtype_id";
+ }
+ }
+ }
+
+ if ($container_guid !== 0) {
+ if (is_array($container_guid)) {
+ foreach ($container_guid as $key => $val) {
+ $container_guid[$key] = (int) $val;
+ }
+ $where[] = "container_guid in (" . implode(",", $container_guid) . ")";
+ } else {
+ $container_guid = (int) $container_guid;
+ $where[] = "container_guid = {$container_guid}";
+ }
+ }
+
+ if ($site_guid > 0) {
+ $where[] = "site_guid = {$site_guid}";
+ }
+
+ $where[] = get_access_sql_suffix();
+
+ $sql = "SELECT DISTINCT EXTRACT(YEAR_MONTH FROM FROM_UNIXTIME(time_created)) AS yearmonth
+ FROM {$CONFIG->dbprefix}entities where ";
+
+ foreach ($where as $w) {
+ $sql .= " $w and ";
+ }
+
+ $sql .= "1=1 ORDER BY $order_by";
+ if ($result = get_data($sql)) {
+ $endresult = array();
+ foreach ($result as $res) {
+ $endresult[] = $res->yearmonth;
+ }
+ return $endresult;
+ }
+ return false;
+}
+
+/**
+ * Disable an entity.
+ *
+ * Disabled entities do not show up in list or elgg_get_entity()
+ * calls, but still exist in the database.
+ *
+ * Entities are disabled by setting disabled = yes in the
+ * entities table.
+ *
+ * You can ignore the disabled field by using {@link access_show_hidden_entities()}.
+ *
+ * @note Use ElggEntity::disable() instead.
+ *
+ * @param int $guid The guid
+ * @param string $reason Optional reason
+ * @param bool $recursive Recursively disable all entities owned or contained by $guid?
+ *
+ * @return bool
+ * @see access_show_hidden_entities()
+ * @link http://docs.elgg.org/Entities
+ * @access private
+ */
+function disable_entity($guid, $reason = "", $recursive = true) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ $reason = sanitise_string($reason);
+
+ if ($entity = get_entity($guid)) {
+ if (elgg_trigger_event('disable', $entity->type, $entity)) {
+ if ($entity->canEdit()) {
+ if ($reason) {
+ create_metadata($guid, 'disable_reason', $reason, '', 0, ACCESS_PUBLIC);
+ }
+
+ if ($recursive) {
+ $hidden = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+ $ia = elgg_set_ignore_access(true);
+
+ $sub_entities = get_data("SELECT * FROM {$CONFIG->dbprefix}entities
+ WHERE (
+ container_guid = $guid
+ OR owner_guid = $guid
+ OR site_guid = $guid
+ ) AND enabled='yes'", 'entity_row_to_elggstar');
+
+ if ($sub_entities) {
+ foreach ($sub_entities as $e) {
+ add_entity_relationship($e->guid, 'disabled_with', $entity->guid);
+ $e->disable($reason);
+ }
+ }
+ access_show_hidden_entities($hidden);
+ elgg_set_ignore_access($ia);
+ }
+
+ $entity->disableMetadata();
+ $entity->disableAnnotations();
+ invalidate_cache_for_entity($guid);
+
+ $res = update_data("UPDATE {$CONFIG->dbprefix}entities
+ SET enabled = 'no'
+ WHERE guid = $guid");
+
+ return $res;
+ }
+ }
+ }
+ return false;
+}
+
+/**
+ * Enable an entity.
+ *
+ * @warning In order to enable an entity using ElggEntity::enable(),
+ * you must first use {@link access_show_hidden_entities()}.
+ *
+ * @param int $guid GUID of entity to enable
+ * @param bool $recursive Recursively enable all entities disabled with the entity?
+ *
+ * @return bool
+ */
+function enable_entity($guid, $recursive = true) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+
+ // Override access only visible entities
+ $old_access_status = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+
+ $result = false;
+ if ($entity = get_entity($guid)) {
+ if (elgg_trigger_event('enable', $entity->type, $entity)) {
+ if ($entity->canEdit()) {
+
+ $result = update_data("UPDATE {$CONFIG->dbprefix}entities
+ SET enabled = 'yes'
+ WHERE guid = $guid");
+
+ $entity->deleteMetadata('disable_reason');
+ $entity->enableMetadata();
+ $entity->enableAnnotations();
+
+ if ($recursive) {
+ $disabled_with_it = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'disabled_with',
+ 'relationship_guid' => $entity->guid,
+ 'inverse_relationship' => true,
+ 'limit' => 0,
+ ));
+
+ foreach ($disabled_with_it as $e) {
+ $e->enable();
+ remove_entity_relationship($e->guid, 'disabled_with', $entity->guid);
+ }
+ }
+ }
+ }
+ }
+
+ access_show_hidden_entities($old_access_status);
+ return $result;
+}
+
+/**
+ * Delete an entity.
+ *
+ * Removes an entity and its metadata, annotations, relationships, river entries,
+ * and private data.
+ *
+ * Optionally can remove entities contained and owned by $guid.
+ *
+ * @tip Use ElggEntity::delete() instead.
+ *
+ * @warning If deleting recursively, this bypasses ownership of items contained by
+ * the entity. That means that if the container_guid = $guid, the item will be deleted
+ * regardless of who owns it.
+ *
+ * @param int $guid The guid of the entity to delete
+ * @param bool $recursive If true (default) then all entities which are
+ * owned or contained by $guid will also be deleted.
+ *
+ * @return bool
+ * @access private
+ */
+function delete_entity($guid, $recursive = true) {
+ global $CONFIG, $ENTITY_CACHE;
+
+ $guid = (int)$guid;
+ if ($entity = get_entity($guid)) {
+ if (elgg_trigger_event('delete', $entity->type, $entity)) {
+ if ($entity->canEdit()) {
+
+ // delete cache
+ if (isset($ENTITY_CACHE[$guid])) {
+ invalidate_cache_for_entity($guid);
+ }
+
+ // If memcache is available then delete this entry from the cache
+ static $newentity_cache;
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+ if ($newentity_cache) {
+ $newentity_cache->delete($guid);
+ }
+
+ // Delete contained owned and otherwise releated objects (depth first)
+ if ($recursive) {
+ // Temporary token overriding access controls
+ // @todo Do this better.
+ static $__RECURSIVE_DELETE_TOKEN;
+ // Make it slightly harder to guess
+ $__RECURSIVE_DELETE_TOKEN = md5(elgg_get_logged_in_user_guid());
+
+ $entity_disable_override = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+ $ia = elgg_set_ignore_access(true);
+
+ // @todo there was logic in the original code that ignored
+ // entities with owner or container guids of themselves.
+ // this should probably be prevented in ElggEntity instead of checked for here
+ $options = array(
+ 'wheres' => array(
+ "((container_guid = $guid OR owner_guid = $guid OR site_guid = $guid)"
+ . " AND guid != $guid)"
+ ),
+ 'limit' => 0
+ );
+
+ $batch = new ElggBatch('elgg_get_entities', $options);
+ $batch->setIncrementOffset(false);
+
+ foreach ($batch as $e) {
+ $e->delete(true);
+ }
+
+ access_show_hidden_entities($entity_disable_override);
+ $__RECURSIVE_DELETE_TOKEN = null;
+ elgg_set_ignore_access($ia);
+ }
+
+ // Now delete the entity itself
+ $entity->deleteMetadata();
+ $entity->deleteOwnedMetadata();
+ $entity->deleteAnnotations();
+ $entity->deleteOwnedAnnotations();
+ $entity->deleteRelationships();
+
+ elgg_delete_river(array('subject_guid' => $guid));
+ elgg_delete_river(array('object_guid' => $guid));
+ remove_all_private_settings($guid);
+
+ $res = delete_data("DELETE from {$CONFIG->dbprefix}entities where guid={$guid}");
+ if ($res) {
+ $sub_table = "";
+
+ // Where appropriate delete the sub table
+ switch ($entity->type) {
+ case 'object' :
+ $sub_table = $CONFIG->dbprefix . 'objects_entity';
+ break;
+ case 'user' :
+ $sub_table = $CONFIG->dbprefix . 'users_entity';
+ break;
+ case 'group' :
+ $sub_table = $CONFIG->dbprefix . 'groups_entity';
+ break;
+ case 'site' :
+ $sub_table = $CONFIG->dbprefix . 'sites_entity';
+ break;
+ }
+
+ if ($sub_table) {
+ delete_data("DELETE from $sub_table where guid={$guid}");
+ }
+ }
+
+ return (bool)$res;
+ }
+ }
+ }
+ return false;
+
+}
+
+/**
+ * Exports attributes generated on the fly (volatile) about an entity.
+ *
+ * @param string $hook volatile
+ * @param string $entity_type metadata
+ * @param string $returnvalue Return value from previous hook
+ * @param array $params The parameters, passed 'guid' and 'varname'
+ *
+ * @return ElggMetadata|null
+ * @elgg_plugin_hook_handler volatile metadata
+ * @todo investigate more.
+ * @access private
+ * @todo document
+ */
+function volatile_data_export_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ $guid = (int)$params['guid'];
+ $variable_name = sanitise_string($params['varname']);
+
+ if (($hook == 'volatile') && ($entity_type == 'metadata')) {
+ if (($guid) && ($variable_name)) {
+ switch ($variable_name) {
+ case 'renderedentity' :
+ elgg_set_viewtype('default');
+ $view = elgg_view_entity(get_entity($guid));
+ elgg_set_viewtype();
+
+ $tmp = new ElggMetadata();
+ $tmp->type = 'volatile';
+ $tmp->name = 'renderedentity';
+ $tmp->value = $view;
+ $tmp->entity_guid = $guid;
+
+ return $tmp;
+
+ break;
+ }
+ }
+ }
+}
+
+/**
+ * Exports all attributes of an entity.
+ *
+ * @warning Only exports fields in the entity and entity type tables.
+ *
+ * @param string $hook export
+ * @param string $entity_type all
+ * @param mixed $returnvalue Previous hook return value
+ * @param array $params Parameters
+ *
+ * @elgg_event_handler export all
+ * @return mixed
+ * @access private
+ *
+ * @throws InvalidParameterException|InvalidClassException
+ */
+function export_entity_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ // Sanity check values
+ if ((!is_array($params)) && (!isset($params['guid']))) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
+ }
+
+ if (!is_array($returnvalue)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonArrayReturnValue'));
+ }
+
+ $guid = (int)$params['guid'];
+
+ // Get the entity
+ $entity = get_entity($guid);
+ if (!($entity instanceof ElggEntity)) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($guid, get_class()));
+ throw new InvalidClassException($msg);
+ }
+
+ $export = $entity->export();
+
+ if (is_array($export)) {
+ foreach ($export as $e) {
+ $returnvalue[] = $e;
+ }
+ } else {
+ $returnvalue[] = $export;
+ }
+
+ return $returnvalue;
+}
+
+/**
+ * Utility function used by import_entity_plugin_hook() to
+ * process an ODDEntity into an unsaved ElggEntity.
+ *
+ * @param ODDEntity $element The OpenDD element
+ *
+ * @return ElggEntity the unsaved entity which should be populated by items.
+ * @todo Remove this.
+ * @access private
+ *
+ * @throws ClassException|InstallationException|ImportException
+ */
+function oddentity_to_elggentity(ODDEntity $element) {
+ $class = $element->getAttribute('class');
+ $subclass = $element->getAttribute('subclass');
+
+ // See if we already have imported this uuid
+ $tmp = get_entity_from_uuid($element->getAttribute('uuid'));
+
+ if (!$tmp) {
+ // Construct new class with owner from session
+ $classname = get_subtype_class($class, $subclass);
+ if ($classname) {
+ if (class_exists($classname)) {
+ $tmp = new $classname();
+
+ if (!($tmp instanceof ElggEntity)) {
+ $msg = elgg_echo('ClassException:ClassnameNotClass', array($classname, get_class()));
+ throw new ClassException($msg);
+ }
+ } else {
+ error_log(elgg_echo('ClassNotFoundException:MissingClass', array($classname)));
+ }
+ } else {
+ switch ($class) {
+ case 'object' :
+ $tmp = new ElggObject($row);
+ break;
+ case 'user' :
+ $tmp = new ElggUser($row);
+ break;
+ case 'group' :
+ $tmp = new ElggGroup($row);
+ break;
+ case 'site' :
+ $tmp = new ElggSite($row);
+ break;
+ default:
+ $msg = elgg_echo('InstallationException:TypeNotSupported', array($class));
+ throw new InstallationException($msg);
+ }
+ }
+ }
+
+ if ($tmp) {
+ if (!$tmp->import($element)) {
+ $msg = elgg_echo('ImportException:ImportFailed', array($element->getAttribute('uuid')));
+ throw new ImportException($msg);
+ }
+
+ return $tmp;
+ }
+
+ return NULL;
+}
+
+/**
+ * Import an entity.
+ *
+ * This function checks the passed XML doc (as array) to see if it is
+ * a user, if so it constructs a new elgg user and returns "true"
+ * to inform the importer that it's been handled.
+ *
+ * @param string $hook import
+ * @param string $entity_type all
+ * @param mixed $returnvalue Value from previous hook
+ * @param mixed $params Array of params
+ *
+ * @return mixed
+ * @elgg_plugin_hook_handler import all
+ * @todo document
+ * @access private
+ *
+ * @throws ImportException
+ */
+function import_entity_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ $element = $params['element'];
+
+ $tmp = null;
+
+ if ($element instanceof ODDEntity) {
+ $tmp = oddentity_to_elggentity($element);
+
+ if ($tmp) {
+ // Make sure its saved
+ if (!$tmp->save()) {
+ $msg = elgg_echo('ImportException:ProblemSaving', array($element->getAttribute('uuid')));
+ throw new ImportException($msg);
+ }
+
+ // Belts and braces
+ if (!$tmp->guid) {
+ throw new ImportException(elgg_echo('ImportException:NoGUID'));
+ }
+
+ // We have saved, so now tag
+ add_uuid_to_guid($tmp->guid, $element->getAttribute('uuid'));
+
+ return $tmp;
+ }
+ }
+}
+
+/**
+ * Returns if $user_guid is able to edit $entity_guid.
+ *
+ * @tip Can be overridden by by registering for the permissions_check
+ * plugin hook.
+ *
+ * @warning If a $user_guid is not passed it will default to the logged in user.
+ *
+ * @tip Use ElggEntity::canEdit() instead.
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param int $user_guid The GUID of the user
+ *
+ * @return bool
+ * @link http://docs.elgg.org/Entities/AccessControl
+ */
+function can_edit_entity($entity_guid, $user_guid = 0) {
+ $user_guid = (int)$user_guid;
+ $user = get_entity($user_guid);
+ if (!$user) {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ $return = false;
+ if ($entity = get_entity($entity_guid)) {
+
+ // Test user if possible - should default to false unless a plugin hook says otherwise
+ if ($user) {
+ if ($entity->getOwnerGUID() == $user->getGUID()) {
+ $return = true;
+ }
+ if ($entity->container_guid == $user->getGUID()) {
+ $return = true;
+ }
+ if ($entity->type == "user" && $entity->getGUID() == $user->getGUID()) {
+ $return = true;
+ }
+ if ($container_entity = get_entity($entity->container_guid)) {
+ if ($container_entity->canEdit($user->getGUID())) {
+ $return = true;
+ }
+ }
+ }
+ }
+
+ return elgg_trigger_plugin_hook('permissions_check', $entity->type,
+ array('entity' => $entity, 'user' => $user), $return);
+}
+
+/**
+ * Returns if $user_guid can edit the metadata on $entity_guid.
+ *
+ * @tip Can be overridden by by registering for the permissions_check:metadata
+ * plugin hook.
+ *
+ * @warning If a $user_guid isn't specified, the currently logged in user is used.
+ *
+ * @param int $entity_guid The GUID of the entity
+ * @param int $user_guid The GUID of the user
+ * @param ElggMetadata $metadata The metadata to specifically check (if any; default null)
+ *
+ * @return bool
+ * @see elgg_register_plugin_hook_handler()
+ */
+function can_edit_entity_metadata($entity_guid, $user_guid = 0, $metadata = null) {
+ if ($entity = get_entity($entity_guid)) {
+
+ $return = null;
+
+ if ($metadata->owner_guid == 0) {
+ $return = true;
+ }
+ if (is_null($return)) {
+ $return = can_edit_entity($entity_guid, $user_guid);
+ }
+
+ if ($user_guid) {
+ $user = get_entity($user_guid);
+ } else {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ $params = array('entity' => $entity, 'user' => $user, 'metadata' => $metadata);
+ $return = elgg_trigger_plugin_hook('permissions_check:metadata', $entity->type, $params, $return);
+ return $return;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Returns the URL for an entity.
+ *
+ * @tip Can be overridden with {@link register_entity_url_handler()}.
+ *
+ * @param int $entity_guid The GUID of the entity
+ *
+ * @return string The URL of the entity
+ * @see register_entity_url_handler()
+ */
+function get_entity_url($entity_guid) {
+ global $CONFIG;
+
+ if ($entity = get_entity($entity_guid)) {
+ $url = "";
+
+ if (isset($CONFIG->entity_url_handler[$entity->getType()][$entity->getSubType()])) {
+ $function = $CONFIG->entity_url_handler[$entity->getType()][$entity->getSubType()];
+ if (is_callable($function)) {
+ $url = call_user_func($function, $entity);
+ }
+ } elseif (isset($CONFIG->entity_url_handler[$entity->getType()]['all'])) {
+ $function = $CONFIG->entity_url_handler[$entity->getType()]['all'];
+ if (is_callable($function)) {
+ $url = call_user_func($function, $entity);
+ }
+ } elseif (isset($CONFIG->entity_url_handler['all']['all'])) {
+ $function = $CONFIG->entity_url_handler['all']['all'];
+ if (is_callable($function)) {
+ $url = call_user_func($function, $entity);
+ }
+ }
+
+ if ($url == "") {
+ $url = "view/" . $entity_guid;
+ }
+
+ return elgg_normalize_url($url);
+ }
+
+ return false;
+}
+
+/**
+ * Sets the URL handler for a particular entity type and subtype
+ *
+ * @param string $entity_type The entity type
+ * @param string $entity_subtype The entity subtype
+ * @param string $function_name The function to register
+ *
+ * @return bool Depending on success
+ * @see get_entity_url()
+ * @see ElggEntity::getURL()
+ * @since 1.8.0
+ */
+function elgg_register_entity_url_handler($entity_type, $entity_subtype, $function_name) {
+ global $CONFIG;
+
+ if (!is_callable($function_name, true)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->entity_url_handler)) {
+ $CONFIG->entity_url_handler = array();
+ }
+
+ if (!isset($CONFIG->entity_url_handler[$entity_type])) {
+ $CONFIG->entity_url_handler[$entity_type] = array();
+ }
+
+ $CONFIG->entity_url_handler[$entity_type][$entity_subtype] = $function_name;
+
+ return true;
+}
+
+/**
+ * Registers an entity type and subtype as a public-facing entity that should
+ * be shown in search and by {@link elgg_list_registered_entities()}.
+ *
+ * @warning Entities that aren't registered here will not show up in search.
+ *
+ * @tip Add a language string item:type:subtype to make sure the items are display properly.
+ *
+ * @param string $type The type of entity (object, site, user, group)
+ * @param string $subtype The subtype to register (may be blank)
+ *
+ * @return bool Depending on success
+ * @see get_registered_entity_types()
+ * @link http://docs.elgg.org/Search
+ * @link http://docs.elgg.org/Tutorials/Search
+ */
+function elgg_register_entity_type($type, $subtype = null) {
+ global $CONFIG;
+
+ $type = strtolower($type);
+ if (!in_array($type, $CONFIG->entity_types)) {
+ return FALSE;
+ }
+
+ if (!isset($CONFIG->registered_entities)) {
+ $CONFIG->registered_entities = array();
+ }
+
+ if (!isset($CONFIG->registered_entities[$type])) {
+ $CONFIG->registered_entities[$type] = array();
+ }
+
+ if ($subtype) {
+ $CONFIG->registered_entities[$type][] = $subtype;
+ }
+
+ return TRUE;
+}
+
+/**
+ * Unregisters an entity type and subtype as a public-facing entity.
+ *
+ * @warning With a blank subtype, it unregisters that entity type including
+ * all subtypes. This must be called after all subtypes have been registered.
+ *
+ * @param string $type The type of entity (object, site, user, group)
+ * @param string $subtype The subtype to register (may be blank)
+ *
+ * @return bool Depending on success
+ * @see elgg_register_entity_type()
+ */
+function unregister_entity_type($type, $subtype) {
+ global $CONFIG;
+
+ $type = strtolower($type);
+ if (!in_array($type, $CONFIG->entity_types)) {
+ return FALSE;
+ }
+
+ if (!isset($CONFIG->registered_entities)) {
+ return FALSE;
+ }
+
+ if (!isset($CONFIG->registered_entities[$type])) {
+ return FALSE;
+ }
+
+ if ($subtype) {
+ if (in_array($subtype, $CONFIG->registered_entities[$type])) {
+ $key = array_search($subtype, $CONFIG->registered_entities[$type]);
+ unset($CONFIG->registered_entities[$type][$key]);
+ } else {
+ return FALSE;
+ }
+ } else {
+ unset($CONFIG->registered_entities[$type]);
+ }
+
+ return TRUE;
+}
+
+/**
+ * Returns registered entity types and subtypes
+ *
+ * @param string $type The type of entity (object, site, user, group) or blank for all
+ *
+ * @return array|false Depending on whether entities have been registered
+ * @see elgg_register_entity_type()
+ */
+function get_registered_entity_types($type = null) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->registered_entities)) {
+ return false;
+ }
+ if ($type) {
+ $type = strtolower($type);
+ }
+ if (!empty($type) && empty($CONFIG->registered_entities[$type])) {
+ return false;
+ }
+
+ if (empty($type)) {
+ return $CONFIG->registered_entities;
+ }
+
+ return $CONFIG->registered_entities[$type];
+}
+
+/**
+ * Returns if the entity type and subtype have been registered with {@see elgg_register_entity_type()}.
+ *
+ * @param string $type The type of entity (object, site, user, group)
+ * @param string $subtype The subtype (may be blank)
+ *
+ * @return bool Depending on whether or not the type has been registered
+ */
+function is_registered_entity_type($type, $subtype = null) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->registered_entities)) {
+ return false;
+ }
+
+ $type = strtolower($type);
+
+ // @todo registering a subtype implicitly registers the type.
+ // see #2684
+ if (!isset($CONFIG->registered_entities[$type])) {
+ return false;
+ }
+
+ if ($subtype && !in_array($subtype, $CONFIG->registered_entities[$type])) {
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Page handler for generic entities view system
+ *
+ * @param array $page Page elements from pain page handler
+ *
+ * @return bool
+ * @elgg_page_handler view
+ * @access private
+ */
+function entities_page_handler($page) {
+ if (isset($page[0])) {
+ global $CONFIG;
+ set_input('guid', $page[0]);
+ include($CONFIG->path . "pages/entities/index.php");
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Returns a viewable list of entities based on the registered types.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param array $options Any elgg_get_entity() options plus:
+ *
+ * full_view => BOOL Display full view entities
+ *
+ * list_type_toggle => BOOL Display gallery / list switch
+ *
+ * allowed_types => TRUE|ARRAY True to show all types or an array of valid types.
+ *
+ * pagination => BOOL Display pagination links
+ *
+ * @return string A viewable list of entities
+ * @since 1.7.0
+ */
+function elgg_list_registered_entities(array $options = array()) {
+ global $autofeed;
+ $autofeed = true;
+
+ $defaults = array(
+ 'full_view' => TRUE,
+ 'allowed_types' => TRUE,
+ 'list_type_toggle' => FALSE,
+ 'pagination' => TRUE,
+ 'offset' => 0,
+ 'types' => array(),
+ 'type_subtype_pairs' => array()
+ );
+
+ $options = array_merge($defaults, $options);
+
+ //backwards compatibility
+ if (isset($options['view_type_toggle'])) {
+ $options['list_type_toggle'] = $options['view_type_toggle'];
+ }
+
+ $types = get_registered_entity_types();
+
+ foreach ($types as $type => $subtype_array) {
+ if (in_array($type, $options['allowed_types']) || $options['allowed_types'] === TRUE) {
+ // you must explicitly register types to show up in here and in search for objects
+ if ($type == 'object') {
+ if (is_array($subtype_array) && count($subtype_array)) {
+ $options['type_subtype_pairs'][$type] = $subtype_array;
+ }
+ } else {
+ if (is_array($subtype_array) && count($subtype_array)) {
+ $options['type_subtype_pairs'][$type] = $subtype_array;
+ } else {
+ $options['type_subtype_pairs'][$type] = ELGG_ENTITIES_ANY_VALUE;
+ }
+ }
+ }
+ }
+
+ if (!empty($options['type_subtype_pairs'])) {
+ $count = elgg_get_entities(array_merge(array('count' => TRUE), $options));
+ $entities = elgg_get_entities($options);
+ } else {
+ $count = 0;
+ $entities = array();
+ }
+
+ $options['count'] = $count;
+ return elgg_view_entity_list($entities, $options);
+}
+
+/**
+ * Checks if $entity is an ElggEntity and optionally for type and subtype.
+ *
+ * @tip Use this function in actions and views to check that you are dealing
+ * with the correct type of entity.
+ *
+ * @param mixed $entity Entity
+ * @param string $type Entity type
+ * @param string $subtype Entity subtype
+ * @param string $class Class name
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_instanceof($entity, $type = NULL, $subtype = NULL, $class = NULL) {
+ $return = ($entity instanceof ElggEntity);
+
+ if ($type) {
+ $return = $return && ($entity->getType() == $type);
+ }
+
+ if ($subtype) {
+ $return = $return && ($entity->getSubtype() == $subtype);
+ }
+
+ if ($class) {
+ $return = $return && ($entity instanceof $class);
+ }
+
+ return $return;
+}
+
+/**
+ * Update the last_action column in the entities table for $guid.
+ *
+ * @warning This is different to time_updated. Time_updated is automatically set,
+ * while last_action is only set when explicitly called.
+ *
+ * @param int $guid Entity annotation|relationship action carried out on
+ * @param int $posted Timestamp of last action
+ *
+ * @return bool
+ * @access private
+ */
+function update_entity_last_action($guid, $posted = NULL) {
+ global $CONFIG;
+ $guid = (int)$guid;
+ $posted = (int)$posted;
+
+ if (!$posted) {
+ $posted = time();
+ }
+
+ if ($guid) {
+ //now add to the river updated table
+ $query = "UPDATE {$CONFIG->dbprefix}entities SET last_action = {$posted} WHERE guid = {$guid}";
+ $result = update_data($query);
+ if ($result) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+ } else {
+ return FALSE;
+ }
+}
+
+/**
+ * Garbage collect stub and fragments from any broken delete/create calls
+ *
+ * @return void
+ * @elgg_plugin_hook_handler gc system
+ * @access private
+ */
+function entities_gc() {
+ global $CONFIG;
+
+ $tables = array ('sites_entity', 'objects_entity', 'groups_entity', 'users_entity');
+
+ foreach ($tables as $table) {
+ delete_data("DELETE from {$CONFIG->dbprefix}{$table}
+ where guid NOT IN (SELECT guid from {$CONFIG->dbprefix}entities)");
+ }
+}
+
+/**
+ * Runs unit tests for the entity objects.
+ *
+ * @param string $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function entities_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/objects/entities.php';
+ return $value;
+}
+
+/**
+ * Entities init function; establishes the default entity page handler
+ *
+ * @return void
+ * @elgg_event_handler init system
+ * @access private
+ */
+function entities_init() {
+ elgg_register_page_handler('view', 'entities_page_handler');
+
+ elgg_register_plugin_hook_handler('unit_test', 'system', 'entities_test');
+
+ elgg_register_plugin_hook_handler('gc', 'system', 'entities_gc');
+}
+
+/** Register the import hook */
+elgg_register_plugin_hook_handler("import", "all", "import_entity_plugin_hook", 0);
+
+/** Register the hook, ensuring entities are serialised first */
+elgg_register_plugin_hook_handler("export", "all", "export_entity_plugin_hook", 0);
+
+/** Hook to get certain named bits of volatile data about an entity */
+elgg_register_plugin_hook_handler('volatile', 'metadata', 'volatile_data_export_plugin_hook');
+
+/** Register init system event **/
+elgg_register_event_handler('init', 'system', 'entities_init');
+
diff --git a/engine/lib/export.php b/engine/lib/export.php
new file mode 100644
index 000000000..ae9be95ce
--- /dev/null
+++ b/engine/lib/export.php
@@ -0,0 +1,226 @@
+<?php
+/**
+ * Elgg Data import export functionality.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Export
+ */
+
+/**
+ * Get a UUID from a given object.
+ *
+ * @param mixed $object The object either an ElggEntity, ElggRelationship or ElggExtender
+ *
+ * @return the UUID or false
+ */
+function get_uuid_from_object($object) {
+ if ($object instanceof ElggEntity) {
+ return guid_to_uuid($object->guid);
+ } else if ($object instanceof ElggExtender) {
+ $type = $object->type;
+ if ($type == 'volatile') {
+ $uuid = guid_to_uuid($object->entity_guid) . $type . "/{$object->name}/";
+ } else {
+ $uuid = guid_to_uuid($object->entity_guid) . $type . "/{$object->id}/";
+ }
+
+ return $uuid;
+ } else if ($object instanceof ElggRelationship) {
+ return guid_to_uuid($object->guid_one) . "relationship/{$object->id}/";
+ }
+
+ return false;
+}
+
+/**
+ * Generate a UUID from a given GUID.
+ *
+ * @param int $guid The GUID of an object.
+ *
+ * @return string
+ */
+function guid_to_uuid($guid) {
+ global $CONFIG;
+
+ return elgg_get_site_url() . "export/opendd/$guid/";
+}
+
+/**
+ * Test to see if a given uuid is for this domain, returning true if so.
+ *
+ * @param string $uuid A unique ID
+ *
+ * @return bool
+ */
+function is_uuid_this_domain($uuid) {
+ global $CONFIG;
+
+ if (strpos($uuid, elgg_get_site_url()) === 0) {
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * This function attempts to retrieve a previously imported entity via its UUID.
+ *
+ * @param string $uuid A unique ID
+ *
+ * @return mixed
+ */
+function get_entity_from_uuid($uuid) {
+ $uuid = sanitise_string($uuid);
+
+ $options = array('metadata_name' => 'import_uuid', 'metadata_value' => $uuid);
+ $entities = elgg_get_entities_from_metadata($options);
+
+ if ($entities) {
+ return $entities[0];
+ }
+
+ return false;
+}
+
+/**
+ * Tag a previously created guid with the uuid it was imported on.
+ *
+ * @param int $guid A GUID
+ * @param string $uuid A Unique ID
+ *
+ * @return bool
+ */
+function add_uuid_to_guid($guid, $uuid) {
+ $guid = (int)$guid;
+ $uuid = sanitise_string($uuid);
+
+ $result = create_metadata($guid, "import_uuid", $uuid);
+ return (bool)$result;
+}
+
+
+$IMPORTED_DATA = array();
+$IMPORTED_OBJECT_COUNTER = 0;
+
+/**
+ * This function processes an element, passing elements to the plugin stack to see if someone will
+ * process it.
+ *
+ * If nobody processes the top level element, the sub level elements are processed.
+ *
+ * @param ODD $odd The odd element to process
+ *
+ * @return bool
+ * @access private
+ */
+function _process_element(ODD $odd) {
+ global $IMPORTED_DATA, $IMPORTED_OBJECT_COUNTER;
+
+ // See if anyone handles this element, return true if it is.
+ if ($odd) {
+ $handled = elgg_trigger_plugin_hook("import", "all", array("element" => $odd), $to_be_serialised);
+ }
+
+ // If not, then see if any of its sub elements are handled
+ if ($handled) {
+ // Increment validation counter
+ $IMPORTED_OBJECT_COUNTER ++;
+ // Return the constructed object
+ $IMPORTED_DATA[] = $handled;
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Exports an entity as an array
+ *
+ * @param int $guid Entity GUID
+ *
+ * @return array
+ * @throws ExportException
+ * @access private
+ */
+function exportAsArray($guid) {
+ $guid = (int)$guid;
+
+ // Trigger a hook to
+ $to_be_serialised = elgg_trigger_plugin_hook("export", "all", array("guid" => $guid), array());
+
+ // Sanity check
+ if ((!is_array($to_be_serialised)) || (count($to_be_serialised) == 0)) {
+ throw new ExportException(elgg_echo('ExportException:NoSuchEntity', array($guid)));
+ }
+
+ return $to_be_serialised;
+}
+
+/**
+ * Export a GUID.
+ *
+ * This function exports a GUID and all information related to it in an XML format.
+ *
+ * This function makes use of the "serialise" plugin hook, which is passed an array to which plugins
+ * should add data to be serialised to.
+ *
+ * @param int $guid The GUID.
+ *
+ * @return xml
+ * @see ElggEntity for an example of its usage.
+ * @access private
+ */
+function export($guid) {
+ $odd = new ODDDocument(exportAsArray($guid));
+
+ return ODD_Export($odd);
+}
+
+/**
+ * Import an XML serialisation of an object.
+ * This will make a best attempt at importing a given xml doc.
+ *
+ * @param string $xml XML string
+ *
+ * @return bool
+ * @throws Exception if there was a problem importing the data.
+ * @access private
+ */
+function import($xml) {
+ global $IMPORTED_DATA, $IMPORTED_OBJECT_COUNTER;
+
+ $IMPORTED_DATA = array();
+ $IMPORTED_OBJECT_COUNTER = 0;
+
+ $document = ODD_Import($xml);
+ if (!$document) {
+ throw new ImportException(elgg_echo('ImportException:NoODDElements'));
+ }
+
+ foreach ($document as $element) {
+ _process_element($element);
+ }
+
+ if ($IMPORTED_OBJECT_COUNTER != count($IMPORTED_DATA)) {
+ throw new ImportException(elgg_echo('ImportException:NotAllImported'));
+ }
+
+ return true;
+}
+
+
+/**
+ * Register the OpenDD import action
+ *
+ * @return void
+ * @access private
+ */
+function export_init() {
+ global $CONFIG;
+
+ elgg_register_action("import/opendd");
+}
+
+// Register a startup event
+elgg_register_event_handler('init', 'system', 'export_init', 100);
diff --git a/engine/lib/extender.php b/engine/lib/extender.php
new file mode 100644
index 000000000..538f601e1
--- /dev/null
+++ b/engine/lib/extender.php
@@ -0,0 +1,241 @@
+<?php
+/**
+ * Elgg Entity Extender.
+ * This file contains ways of extending an Elgg entity in custom ways.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Extender
+ */
+
+/**
+ * Detect the value_type for a given value.
+ * Currently this is very crude.
+ *
+ * @todo Make better!
+ *
+ * @param mixed $value The value
+ * @param string $value_type If specified, overrides the detection.
+ *
+ * @return string
+ */
+function detect_extender_valuetype($value, $value_type = "") {
+ if ($value_type != "" && ($value_type == 'integer' || $value_type == 'text')) {
+ return $value_type;
+ }
+
+ // This is crude
+ if (is_int($value)) {
+ return 'integer';
+ }
+ // Catch floating point values which are not integer
+ if (is_numeric($value)) {
+ return 'text';
+ }
+
+ return 'text';
+}
+
+/**
+ * Utility function used by import_extender_plugin_hook() to process
+ * an ODDMetaData and add it to an entity. This function does not
+ * hit ->save() on the entity (this lets you construct in memory)
+ *
+ * @param ElggEntity $entity The entity to add the data to.
+ * @param ODDMetaData $element The OpenDD element
+ *
+ * @return bool
+ * @access private
+ */
+function oddmetadata_to_elggextender(ElggEntity $entity, ODDMetaData $element) {
+ // Get the type of extender (metadata, type, attribute etc)
+ $type = $element->getAttribute('type');
+ $attr_name = $element->getAttribute('name');
+ $attr_val = $element->getBody();
+
+ switch ($type) {
+ // Ignore volatile items
+ case 'volatile' :
+ break;
+ case 'annotation' :
+ $entity->annotate($attr_name, $attr_val);
+ break;
+ case 'metadata' :
+ $entity->setMetaData($attr_name, $attr_val, "", true);
+ break;
+ default : // Anything else assume attribute
+ $entity->set($attr_name, $attr_val);
+ }
+
+ // Set time if appropriate
+ $attr_time = $element->getAttribute('published');
+ if ($attr_time) {
+ $entity->set('time_updated', $attr_time);
+ }
+
+ return true;
+}
+
+/**
+ * Handler called by trigger_plugin_hook on the "import" event.
+ *
+ * @param string $hook volatile
+ * @param string $entity_type metadata
+ * @param string $returnvalue Return value from previous hook
+ * @param array $params The parameters
+ *
+ * @return null
+ * @elgg_plugin_hook_handler volatile metadata
+ * @todo investigate more.
+ * @access private
+ */
+function import_extender_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ $element = $params['element'];
+
+ $tmp = NULL;
+
+ if ($element instanceof ODDMetaData) {
+ // Recall entity
+ $entity_uuid = $element->getAttribute('entity_uuid');
+ $entity = get_entity_from_uuid($entity_uuid);
+ if (!$entity) {
+ throw new ImportException(elgg_echo('ImportException:GUIDNotFound', array($entity_uuid)));
+ }
+
+ oddmetadata_to_elggextender($entity, $element);
+
+ // Save
+ if (!$entity->save()) {
+ $attr_name = $element->getAttribute('name');
+ $msg = elgg_echo('ImportException:ProblemUpdatingMeta', array($attr_name, $entity_uuid));
+ throw new ImportException($msg);
+ }
+
+ return true;
+ }
+}
+
+/**
+ * Determines whether or not the specified user can edit the specified piece of extender
+ *
+ * @param int $extender_id The ID of the piece of extender
+ * @param string $type 'metadata' or 'annotation'
+ * @param int $user_guid The GUID of the user
+ *
+ * @return bool
+ */
+function can_edit_extender($extender_id, $type, $user_guid = 0) {
+ if (!elgg_is_logged_in()) {
+ return false;
+ }
+
+ $user_guid = (int)$user_guid;
+ $user = get_entity($user_guid);
+ if (!$user) {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ $functionname = "elgg_get_{$type}_from_id";
+ if (is_callable($functionname)) {
+ $extender = call_user_func($functionname, $extender_id);
+ } else {
+ return false;
+ }
+
+ if (!($extender instanceof ElggExtender)) {
+ return false;
+ }
+ /* @var ElggExtender $extender */
+
+ // If the owner is the specified user, great! They can edit.
+ if ($extender->getOwnerGUID() == $user->getGUID()) {
+ return true;
+ }
+
+ // If the user can edit the entity this is attached to, great! They can edit.
+ if (can_edit_entity($extender->entity_guid, $user->getGUID())) {
+ return true;
+ }
+
+ // Trigger plugin hooks
+ $params = array('entity' => $extender->getEntity(), 'user' => $user);
+ return elgg_trigger_plugin_hook('permissions_check', $type, $params, false);
+}
+
+/**
+ * Sets the URL handler for a particular extender type and name.
+ * It is recommended that you do not call this directly, instead use
+ * one of the wrapper functions such as elgg_register_annotation_url_handler().
+ *
+ * @param string $extender_type Extender type ('annotation', 'metadata')
+ * @param string $extender_name The name of the extender
+ * @param string $function_name The function to register
+ *
+ * @return bool
+ */
+function elgg_register_extender_url_handler($extender_type, $extender_name, $function_name) {
+
+ global $CONFIG;
+
+ if (!is_callable($function_name, true)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->extender_url_handler)) {
+ $CONFIG->extender_url_handler = array();
+ }
+ if (!isset($CONFIG->extender_url_handler[$extender_type])) {
+ $CONFIG->extender_url_handler[$extender_type] = array();
+ }
+ $CONFIG->extender_url_handler[$extender_type][$extender_name] = $function_name;
+
+ return true;
+}
+
+/**
+ * Get the URL of a given elgg extender.
+ * Used by get_annotation_url and get_metadata_url.
+ *
+ * @param ElggExtender $extender An extender object
+ *
+ * @return string
+ */
+function get_extender_url(ElggExtender $extender) {
+ global $CONFIG;
+
+ $view = elgg_get_viewtype();
+
+ $guid = $extender->entity_guid;
+ $type = $extender->type;
+
+ $url = "";
+
+ $function = "";
+ if (isset($CONFIG->extender_url_handler[$type][$extender->name])) {
+ $function = $CONFIG->extender_url_handler[$type][$extender->name];
+ }
+
+ if (isset($CONFIG->extender_url_handler[$type]['all'])) {
+ $function = $CONFIG->extender_url_handler[$type]['all'];
+ }
+
+ if (isset($CONFIG->extender_url_handler['all']['all'])) {
+ $function = $CONFIG->extender_url_handler['all']['all'];
+ }
+
+ if (is_callable($function)) {
+ $url = call_user_func($function, $extender);
+ }
+
+ if ($url == "") {
+ $nameid = $extender->id;
+ if ($type == 'volatile') {
+ $nameid = $extender->name;
+ }
+ $url = "export/$view/$guid/$type/$nameid/";
+ }
+
+ return elgg_normalize_url($url);
+}
+
+/** Register the hook */
+elgg_register_plugin_hook_handler("import", "all", "import_extender_plugin_hook", 2);
diff --git a/engine/lib/filestore.php b/engine/lib/filestore.php
new file mode 100644
index 000000000..93a127257
--- /dev/null
+++ b/engine/lib/filestore.php
@@ -0,0 +1,522 @@
+<?php
+/**
+ * Elgg filestore.
+ * This file contains classes, interfaces and functions for
+ * saving and retrieving data to various file stores.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.FileStorage
+ */
+
+/**
+ * Get the size of the specified directory.
+ *
+ * @param string $dir The full path of the directory
+ * @param int $totalsize Add to current dir size
+ *
+ * @return int The size of the directory.
+ */
+function get_dir_size($dir, $totalsize = 0) {
+ $handle = @opendir($dir);
+ while ($file = @readdir($handle)) {
+ if (eregi("^\.{1,2}$", $file)) {
+ continue;
+ }
+ if (is_dir($dir . $file)) {
+ $totalsize = get_dir_size($dir . $file . "/", $totalsize);
+ } else {
+ $totalsize += filesize($dir . $file);
+ }
+ }
+ @closedir($handle);
+
+ return($totalsize);
+}
+
+/**
+ * Get the contents of an uploaded file.
+ * (Returns false if there was an issue.)
+ *
+ * @param string $input_name The name of the file input field on the submission form
+ *
+ * @return mixed|false The contents of the file, or false on failure.
+ */
+function get_uploaded_file($input_name) {
+ // If the file exists ...
+ if (isset($_FILES[$input_name]) && $_FILES[$input_name]['error'] == 0) {
+ return file_get_contents($_FILES[$input_name]['tmp_name']);
+ }
+ return false;
+}
+
+/**
+ * Gets the jpeg contents of the resized version of an uploaded image
+ * (Returns false if the uploaded file was not an image)
+ *
+ * @param string $input_name The name of the file input field on the submission form
+ * @param int $maxwidth The maximum width of the resized image
+ * @param int $maxheight The maximum height of the resized image
+ * @param bool $square If set to true, will take the smallest
+ * of maxwidth and maxheight and use it to set the
+ * dimensions on all size; the image will be cropped.
+ * @param bool $upscale Resize images smaller than $maxwidth x $maxheight?
+ *
+ * @return false|mixed The contents of the resized image, or false on failure
+ */
+function get_resized_image_from_uploaded_file($input_name, $maxwidth, $maxheight,
+$square = false, $upscale = false) {
+
+ // If our file exists ...
+ if (isset($_FILES[$input_name]) && $_FILES[$input_name]['error'] == 0) {
+ return get_resized_image_from_existing_file($_FILES[$input_name]['tmp_name'], $maxwidth,
+ $maxheight, $square, 0, 0, 0, 0, $upscale);
+ }
+
+ return false;
+}
+
+/**
+ * Gets the jpeg contents of the resized version of an already uploaded image
+ * (Returns false if the file was not an image)
+ *
+ * @param string $input_name The name of the file on the disk
+ * @param int $maxwidth The desired width of the resized image
+ * @param int $maxheight The desired height of the resized image
+ * @param bool $square If set to true, takes the smallest of maxwidth and
+ * maxheight and use it to set the dimensions on the new image.
+ * If no crop parameters are set, the largest square that fits
+ * in the image centered will be used for the resize. If square,
+ * the crop must be a square region.
+ * @param int $x1 x coordinate for top, left corner
+ * @param int $y1 y coordinate for top, left corner
+ * @param int $x2 x coordinate for bottom, right corner
+ * @param int $y2 y coordinate for bottom, right corner
+ * @param bool $upscale Resize images smaller than $maxwidth x $maxheight?
+ *
+ * @return false|mixed The contents of the resized image, or false on failure
+ */
+function get_resized_image_from_existing_file($input_name, $maxwidth, $maxheight, $square = FALSE,
+$x1 = 0, $y1 = 0, $x2 = 0, $y2 = 0, $upscale = FALSE) {
+
+ // Get the size information from the image
+ $imgsizearray = getimagesize($input_name);
+ if ($imgsizearray == FALSE) {
+ return FALSE;
+ }
+
+ $width = $imgsizearray[0];
+ $height = $imgsizearray[1];
+
+ $accepted_formats = array(
+ 'image/jpeg' => 'jpeg',
+ 'image/pjpeg' => 'jpeg',
+ 'image/png' => 'png',
+ 'image/x-png' => 'png',
+ 'image/gif' => 'gif'
+ );
+
+ // make sure the function is available
+ $load_function = "imagecreatefrom" . $accepted_formats[$imgsizearray['mime']];
+ if (!is_callable($load_function)) {
+ return FALSE;
+ }
+
+ // get the parameters for resizing the image
+ $options = array(
+ 'maxwidth' => $maxwidth,
+ 'maxheight' => $maxheight,
+ 'square' => $square,
+ 'upscale' => $upscale,
+ 'x1' => $x1,
+ 'y1' => $y1,
+ 'x2' => $x2,
+ 'y2' => $y2,
+ );
+ $params = get_image_resize_parameters($width, $height, $options);
+ if ($params == FALSE) {
+ return FALSE;
+ }
+
+ // load original image
+ $original_image = $load_function($input_name);
+ if (!$original_image) {
+ return FALSE;
+ }
+
+ // allocate the new image
+ $new_image = imagecreatetruecolor($params['newwidth'], $params['newheight']);
+ if (!$new_image) {
+ return FALSE;
+ }
+
+ // color transparencies white (default is black)
+ imagefilledrectangle(
+ $new_image, 0, 0, $params['newwidth'], $params['newheight'],
+ imagecolorallocate($new_image, 255, 255, 255)
+ );
+
+ $rtn_code = imagecopyresampled( $new_image,
+ $original_image,
+ 0,
+ 0,
+ $params['xoffset'],
+ $params['yoffset'],
+ $params['newwidth'],
+ $params['newheight'],
+ $params['selectionwidth'],
+ $params['selectionheight']);
+ if (!$rtn_code) {
+ return FALSE;
+ }
+
+ // grab a compressed jpeg version of the image
+ ob_start();
+ imagejpeg($new_image, NULL, 90);
+ $jpeg = ob_get_clean();
+
+ imagedestroy($new_image);
+ imagedestroy($original_image);
+
+ return $jpeg;
+}
+
+/**
+ * Calculate the parameters for resizing an image
+ *
+ * @param int $width Width of the original image
+ * @param int $height Height of the original image
+ * @param array $options See $defaults for the options
+ *
+ * @return array or FALSE
+ * @since 1.7.2
+ */
+function get_image_resize_parameters($width, $height, $options) {
+
+ $defaults = array(
+ 'maxwidth' => 100,
+ 'maxheight' => 100,
+
+ 'square' => FALSE,
+ 'upscale' => FALSE,
+
+ 'x1' => 0,
+ 'y1' => 0,
+ 'x2' => 0,
+ 'y2' => 0,
+ );
+
+ $options = array_merge($defaults, $options);
+
+ extract($options);
+
+ // crop image first?
+ $crop = TRUE;
+ if ($x1 == 0 && $y1 == 0 && $x2 == 0 && $y2 == 0) {
+ $crop = FALSE;
+ }
+
+ // how large a section of the image has been selected
+ if ($crop) {
+ $selection_width = $x2 - $x1;
+ $selection_height = $y2 - $y1;
+ } else {
+ // everything selected if no crop parameters
+ $selection_width = $width;
+ $selection_height = $height;
+ }
+
+ // determine cropping offsets
+ if ($square) {
+ // asking for a square image back
+
+ // detect case where someone is passing crop parameters that are not for a square
+ if ($crop == TRUE && $selection_width != $selection_height) {
+ return FALSE;
+ }
+
+ // size of the new square image
+ $new_width = $new_height = min($maxwidth, $maxheight);
+
+ // find largest square that fits within the selected region
+ $selection_width = $selection_height = min($selection_width, $selection_height);
+
+ // set offsets for crop
+ if ($crop) {
+ $widthoffset = $x1;
+ $heightoffset = $y1;
+ $width = $x2 - $x1;
+ $height = $width;
+ } else {
+ // place square region in the center
+ $widthoffset = floor(($width - $selection_width) / 2);
+ $heightoffset = floor(($height - $selection_height) / 2);
+ }
+ } else {
+ // non-square new image
+ $new_width = $maxwidth;
+ $new_height = $maxheight;
+
+ // maintain aspect ratio of original image/crop
+ if (($selection_height / (float)$new_height) > ($selection_width / (float)$new_width)) {
+ $new_width = floor($new_height * $selection_width / (float)$selection_height);
+ } else {
+ $new_height = floor($new_width * $selection_height / (float)$selection_width);
+ }
+
+ // by default, use entire image
+ $widthoffset = 0;
+ $heightoffset = 0;
+
+ if ($crop) {
+ $widthoffset = $x1;
+ $heightoffset = $y1;
+ }
+ }
+
+ if (!$upscale && ($selection_height < $new_height || $selection_width < $new_width)) {
+ // we cannot upscale and selected area is too small so we decrease size of returned image
+ if ($square) {
+ $new_height = $selection_height;
+ $new_width = $selection_width;
+ } else {
+ if ($selection_height < $new_height && $selection_width < $new_width) {
+ $new_height = $selection_height;
+ $new_width = $selection_width;
+ }
+ }
+ }
+
+ $params = array(
+ 'newwidth' => $new_width,
+ 'newheight' => $new_height,
+ 'selectionwidth' => $selection_width,
+ 'selectionheight' => $selection_height,
+ 'xoffset' => $widthoffset,
+ 'yoffset' => $heightoffset,
+ );
+
+ return $params;
+}
+
+/**
+ * Delete an ElggFile file
+ *
+ * @param int $guid ElggFile GUID
+ *
+ * @return bool
+ */
+function file_delete($guid) {
+ if ($file = get_entity($guid)) {
+ if ($file->canEdit()) {
+ $container = get_entity($file->container_guid);
+
+ $thumbnail = $file->thumbnail;
+ $smallthumb = $file->smallthumb;
+ $largethumb = $file->largethumb;
+ if ($thumbnail) {
+ $delfile = new ElggFile();
+ $delfile->owner_guid = $file->owner_guid;
+ $delfile->setFilename($thumbnail);
+ $delfile->delete();
+ }
+ if ($smallthumb) {
+ $delfile = new ElggFile();
+ $delfile->owner_guid = $file->owner_guid;
+ $delfile->setFilename($smallthumb);
+ $delfile->delete();
+ }
+ if ($largethumb) {
+ $delfile = new ElggFile();
+ $delfile->owner_guid = $file->owner_guid;
+ $delfile->setFilename($largethumb);
+ $delfile->delete();
+ }
+
+ return $file->delete();
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Returns an overall file type from the mimetype
+ *
+ * @param string $mimetype The MIME type
+ *
+ * @return string The overall type
+ */
+function file_get_general_file_type($mimetype) {
+ switch($mimetype) {
+
+ case "application/msword":
+ return "document";
+ break;
+ case "application/pdf":
+ return "document";
+ break;
+ }
+
+ if (substr_count($mimetype, 'text/')) {
+ return "document";
+ }
+
+ if (substr_count($mimetype, 'audio/')) {
+ return "audio";
+ }
+
+ if (substr_count($mimetype, 'image/')) {
+ return "image";
+ }
+
+ if (substr_count($mimetype, 'video/')) {
+ return "video";
+ }
+
+ if (substr_count($mimetype, 'opendocument')) {
+ return "document";
+ }
+
+ return "general";
+}
+
+/**
+ * Delete a directory and all its contents
+ *
+ * @param str $directory Directory to delete
+ *
+ * @return bool
+ */
+function delete_directory($directory) {
+ // sanity check: must be a directory
+ if (!$handle = opendir($directory)) {
+ return FALSE;
+ }
+
+ // loop through all files
+ while (($file = readdir($handle)) !== FALSE) {
+ if (in_array($file, array('.', '..'))) {
+ continue;
+ }
+
+ $path = "$directory/$file";
+ if (is_dir($path)) {
+ // recurse down through directory
+ if (!delete_directory($path)) {
+ return FALSE;
+ }
+ } else {
+ // delete file
+ unlink($path);
+ }
+ }
+
+ // remove empty directory
+ closedir($handle);
+ return rmdir($directory);
+}
+
+/**
+ * Removes all user files
+ *
+ * @warning This only deletes the physical files and not their entities.
+ * This will result in FileExceptions being thrown. Don't use this function.
+ *
+ * @param ElggUser $user And ElggUser
+ *
+ * @return void
+ */
+function clear_user_files($user) {
+ global $CONFIG;
+
+ $time_created = date('Y/m/d', (int)$user->time_created);
+ $file_path = "$CONFIG->dataroot$time_created/$user->guid";
+ if (file_exists($file_path)) {
+ delete_directory($file_path);
+ }
+}
+
+
+/// Variable holding the default datastore
+$DEFAULT_FILE_STORE = NULL;
+
+/**
+ * Return the default filestore.
+ *
+ * @return ElggFilestore
+ */
+function get_default_filestore() {
+ global $DEFAULT_FILE_STORE;
+
+ return $DEFAULT_FILE_STORE;
+}
+
+/**
+ * Set the default filestore for the system.
+ *
+ * @param ElggFilestore $filestore An ElggFilestore object.
+ *
+ * @return true
+ */
+function set_default_filestore(ElggFilestore $filestore) {
+ global $DEFAULT_FILE_STORE;
+
+ $DEFAULT_FILE_STORE = $filestore;
+
+ return true;
+}
+
+/**
+ * Register entity type objects, subtype file as
+ * ElggFile.
+ *
+ * @return void
+ * @access private
+ */
+function filestore_run_once() {
+ // Register a class
+ add_subtype("object", "file", "ElggFile");
+}
+
+/**
+ * Initialise the file modules.
+ * Listens to system init and configures the default filestore
+ *
+ * @return void
+ * @access private
+ */
+function filestore_init() {
+ global $CONFIG;
+
+ // Now register a default filestore
+ if (isset($CONFIG->dataroot)) {
+ set_default_filestore(new ElggDiskFilestore($CONFIG->dataroot));
+ }
+
+ // Now run this stuff, but only once
+ run_function_once("filestore_run_once");
+}
+
+/**
+ * Unit tests for files
+ *
+ * @param sting $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function filestore_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = "{$CONFIG->path}engine/tests/objects/filestore.php";
+ return $value;
+}
+
+
+// Register a startup event
+elgg_register_event_handler('init', 'system', 'filestore_init', 100);
+
+// Unit testing
+elgg_register_plugin_hook_handler('unit_test', 'system', 'filestore_test');
diff --git a/engine/lib/group.php b/engine/lib/group.php
new file mode 100644
index 000000000..5a38e1ea6
--- /dev/null
+++ b/engine/lib/group.php
@@ -0,0 +1,339 @@
+<?php
+/**
+ * Elgg Groups.
+ * Groups contain other entities, or rather act as a placeholder for other entities to
+ * mark any given container as their container.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Group
+ */
+
+/**
+ * Get the group entity.
+ *
+ * @param int $guid GUID for a group
+ *
+ * @return array|false
+ * @access private
+ */
+function get_group_entity_as_row($guid) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+
+ return get_data_row("SELECT * from {$CONFIG->dbprefix}groups_entity where guid=$guid");
+}
+
+/**
+ * Create or update the entities table for a given group.
+ * Call create_entity first.
+ *
+ * @param int $guid GUID
+ * @param string $name Name
+ * @param string $description Description
+ *
+ * @return bool
+ * @access private
+ */
+function create_group_entity($guid, $name, $description) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ $name = sanitise_string($name);
+ $description = sanitise_string($description);
+
+ $row = get_entity_as_row($guid);
+
+ if ($row) {
+ // Exists and you have access to it
+ $exists = get_data_row("SELECT guid from {$CONFIG->dbprefix}groups_entity WHERE guid = {$guid}");
+ if ($exists) {
+ $query = "UPDATE {$CONFIG->dbprefix}groups_entity set"
+ . " name='$name', description='$description' where guid=$guid";
+ $result = update_data($query);
+ if ($result != false) {
+ // Update succeeded, continue
+ $entity = get_entity($guid);
+ if (elgg_trigger_event('update', $entity->type, $entity)) {
+ return $guid;
+ } else {
+ $entity->delete();
+ }
+ }
+ } else {
+ // Update failed, attempt an insert.
+ $query = "INSERT into {$CONFIG->dbprefix}groups_entity"
+ . " (guid, name, description) values ($guid, '$name', '$description')";
+
+ $result = insert_data($query);
+ if ($result !== false) {
+ $entity = get_entity($guid);
+ if (elgg_trigger_event('create', $entity->type, $entity)) {
+ return $guid;
+ } else {
+ $entity->delete();
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Add an object to the given group.
+ *
+ * @param int $group_guid The group to add the object to.
+ * @param int $object_guid The guid of the elgg object (must be ElggObject or a child thereof)
+ *
+ * @return bool
+ * @throws InvalidClassException
+ */
+function add_object_to_group($group_guid, $object_guid) {
+ $group_guid = (int)$group_guid;
+ $object_guid = (int)$object_guid;
+
+ $group = get_entity($group_guid);
+ $object = get_entity($object_guid);
+
+ if ((!$group) || (!$object)) {
+ return false;
+ }
+
+ if (!($group instanceof ElggGroup)) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($group_guid, 'ElggGroup'));
+ throw new InvalidClassException($msg);
+ }
+
+ if (!($object instanceof ElggObject)) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($object_guid, 'ElggObject'));
+ throw new InvalidClassException($msg);
+ }
+
+ $object->container_guid = $group_guid;
+ return $object->save();
+}
+
+/**
+ * Remove an object from the given group.
+ *
+ * @param int $group_guid The group to remove the object from
+ * @param int $object_guid The object to remove
+ *
+ * @return bool
+ * @throws InvalidClassException
+ */
+function remove_object_from_group($group_guid, $object_guid) {
+ $group_guid = (int)$group_guid;
+ $object_guid = (int)$object_guid;
+
+ $group = get_entity($group_guid);
+ $object = get_entity($object_guid);
+
+ if ((!$group) || (!$object)) {
+ return false;
+ }
+
+ if (!($group instanceof ElggGroup)) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($group_guid, 'ElggGroup'));
+ throw new InvalidClassException($msg);
+ }
+
+ if (!($object instanceof ElggObject)) {
+ $msg = elgg_echo('InvalidClassException:NotValidElggStar', array($object_guid, 'ElggObject'));
+ throw new InvalidClassException($msg);
+ }
+
+ $object->container_guid = $object->owner_guid;
+ return $object->save();
+}
+
+/**
+ * Return a list of this group's members.
+ *
+ * @param int $group_guid The ID of the container/group.
+ * @param int $limit The limit
+ * @param int $offset The offset
+ * @param int $site_guid The site
+ * @param bool $count Return the users (false) or the count of them (true)
+ *
+ * @return mixed
+ */
+function get_group_members($group_guid, $limit = 10, $offset = 0, $site_guid = 0, $count = false) {
+
+ // in 1.7 0 means "not set." rewrite to make sense.
+ if (!$site_guid) {
+ $site_guid = ELGG_ENTITIES_ANY_VALUE;
+ }
+
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => 'member',
+ 'relationship_guid' => $group_guid,
+ 'inverse_relationship' => TRUE,
+ 'types' => 'user',
+ 'limit' => $limit,
+ 'offset' => $offset,
+ 'count' => $count,
+ 'site_guid' => $site_guid
+ ));
+}
+
+/**
+ * Return whether a given user is a member of the group or not.
+ *
+ * @param int $group_guid The group ID
+ * @param int $user_guid The user guid
+ *
+ * @return bool
+ */
+function is_group_member($group_guid, $user_guid) {
+ $object = check_entity_relationship($user_guid, 'member', $group_guid);
+ if ($object) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Join a user to a group.
+ *
+ * @param int $group_guid The group GUID.
+ * @param int $user_guid The user GUID.
+ *
+ * @return bool
+ */
+function join_group($group_guid, $user_guid) {
+ $result = add_entity_relationship($user_guid, 'member', $group_guid);
+
+ if ($result) {
+ $params = array('group' => get_entity($group_guid), 'user' => get_entity($user_guid));
+ elgg_trigger_event('join', 'group', $params);
+ }
+
+ return $result;
+}
+
+/**
+ * Remove a user from a group.
+ *
+ * @param int $group_guid The group.
+ * @param int $user_guid The user.
+ *
+ * @return bool
+ */
+function leave_group($group_guid, $user_guid) {
+ // event needs to be triggered while user is still member of group to have access to group acl
+ $params = array('group' => get_entity($group_guid), 'user' => get_entity($user_guid));
+
+ elgg_trigger_event('leave', 'group', $params);
+ $result = remove_entity_relationship($user_guid, 'member', $group_guid);
+ return $result;
+}
+
+/**
+ * Return all groups a user is a member of.
+ *
+ * @param int $user_guid GUID of user
+ *
+ * @return array|false
+ */
+function get_users_membership($user_guid) {
+ $options = array(
+ 'relationship' => 'member',
+ 'relationship_guid' => $user_guid,
+ 'inverse_relationship' => FALSE
+ );
+ return elgg_get_entities_from_relationship($options);
+}
+
+/**
+ * May the current user access item(s) on this page? If the page owner is a group,
+ * membership, visibility, and logged in status are taken into account.
+ *
+ * @param boolean $forward If set to true (default), will forward the page;
+ * if set to false, will return true or false.
+ *
+ * @return bool If $forward is set to false.
+ */
+function group_gatekeeper($forward = true) {
+
+ $page_owner_guid = elgg_get_page_owner_guid();
+ if (!$page_owner_guid) {
+ return true;
+ }
+ $visibility = ElggGroupItemVisibility::factory($page_owner_guid);
+
+ if (!$visibility->shouldHideItems) {
+ return true;
+ }
+ if ($forward) {
+ // only forward to group if user can see it
+ $group = get_entity($page_owner_guid);
+ $forward_url = $group ? $group->getURL() : '';
+
+ if (!elgg_is_logged_in()) {
+ $_SESSION['last_forward_from'] = current_page_url();
+ $forward_reason = 'login';
+ } else {
+ $forward_reason = 'member';
+ }
+
+ register_error(elgg_echo($visibility->reasonHidden));
+ forward($forward_url, $forward_reason);
+ }
+
+ return false;
+}
+
+/**
+ * Adds a group tool option
+ *
+ * @see remove_group_tool_option().
+ *
+ * @param string $name Name of the group tool option
+ * @param string $label Used for the group edit form
+ * @param bool $default_on True if this option should be active by default
+ *
+ * @return void
+ * @since 1.5.0
+ */
+function add_group_tool_option($name, $label, $default_on = true) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->group_tool_options)) {
+ $CONFIG->group_tool_options = array();
+ }
+
+ $group_tool_option = new stdClass;
+
+ $group_tool_option->name = $name;
+ $group_tool_option->label = $label;
+ $group_tool_option->default_on = $default_on;
+
+ $CONFIG->group_tool_options[] = $group_tool_option;
+}
+
+/**
+ * Removes a group tool option based on name
+ *
+ * @see add_group_tool_option()
+ *
+ * @param string $name Name of the group tool option
+ *
+ * @return void
+ * @since 1.7.5
+ */
+function remove_group_tool_option($name) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->group_tool_options)) {
+ return;
+ }
+
+ foreach ($CONFIG->group_tool_options as $i => $option) {
+ if ($option->name == $name) {
+ unset($CONFIG->group_tool_options[$i]);
+ }
+ }
+}
diff --git a/engine/lib/input.php b/engine/lib/input.php
new file mode 100644
index 000000000..6d1646e1a
--- /dev/null
+++ b/engine/lib/input.php
@@ -0,0 +1,513 @@
+<?php
+/**
+ * Parameter input functions.
+ * This file contains functions for getting input from get/post variables.
+ *
+ * @package Elgg.Core
+ * @subpackage Input
+ */
+
+/**
+ * Get some input from variables passed submitted through GET or POST.
+ *
+ * If using any data obtained from get_input() in a web page, please be aware that
+ * it is a possible vector for a reflected XSS attack. If you are expecting an
+ * integer, cast it to an int. If it is a string, escape quotes.
+ *
+ * Note: this function does not handle nested arrays (ex: form input of param[m][n])
+ * because of the filtering done in htmlawed from the filter_tags call.
+ * @todo Is this ^ still true?
+ *
+ * @param string $variable The variable name we want.
+ * @param mixed $default A default value for the variable if it is not found.
+ * @param bool $filter_result If true, then the result is filtered for bad tags.
+ *
+ * @return mixed
+ */
+function get_input($variable, $default = NULL, $filter_result = TRUE) {
+
+ global $CONFIG;
+
+ $result = $default;
+
+ elgg_push_context('input');
+
+ if (isset($CONFIG->input[$variable])) {
+ $result = $CONFIG->input[$variable];
+
+ if ($filter_result) {
+ $result = filter_tags($result);
+ }
+ } elseif (isset($_REQUEST[$variable])) {
+ if (is_array($_REQUEST[$variable])) {
+ $result = $_REQUEST[$variable];
+ } else {
+ $result = trim($_REQUEST[$variable]);
+ }
+
+ if ($filter_result) {
+ $result = filter_tags($result);
+ }
+ }
+
+ elgg_pop_context();
+
+ return $result;
+}
+
+/**
+ * Sets an input value that may later be retrieved by get_input
+ *
+ * Note: this function does not handle nested arrays (ex: form input of param[m][n])
+ *
+ * @param string $variable The name of the variable
+ * @param string $value The value of the variable
+ *
+ * @return void
+ */
+function set_input($variable, $value) {
+ global $CONFIG;
+ if (!isset($CONFIG->input)) {
+ $CONFIG->input = array();
+ }
+
+ if (is_array($value)) {
+ array_walk_recursive($value, create_function('&$v, $k', '$v = trim($v);'));
+ $CONFIG->input[trim($variable)] = $value;
+ } else {
+ $CONFIG->input[trim($variable)] = trim($value);
+ }
+}
+
+/**
+ * Filter tags from a given string based on registered hooks.
+ *
+ * @param mixed $var Anything that does not include an object (strings, ints, arrays)
+ * This includes multi-dimensional arrays.
+ *
+ * @return mixed The filtered result - everything will be strings
+ */
+function filter_tags($var) {
+ return elgg_trigger_plugin_hook('validate', 'input', null, $var);
+}
+
+/**
+ * Validates an email address.
+ *
+ * @param string $address Email address.
+ *
+ * @return bool
+ */
+function is_email_address($address) {
+ return filter_var($address, FILTER_VALIDATE_EMAIL) === $address;
+}
+
+/**
+ * Load all the REQUEST variables into the sticky form cache
+ *
+ * Call this from an action when you want all your submitted variables
+ * available if the submission fails validation and is sent back to the form
+ *
+ * @param string $form_name Name of the sticky form
+ *
+ * @return void
+ * @link http://docs.elgg.org/Tutorials/UI/StickyForms
+ * @since 1.8.0
+ */
+function elgg_make_sticky_form($form_name) {
+
+ elgg_clear_sticky_form($form_name);
+
+ if (!isset($_SESSION['sticky_forms'])) {
+ $_SESSION['sticky_forms'] = array();
+ }
+ $_SESSION['sticky_forms'][$form_name] = array();
+
+ foreach ($_REQUEST as $key => $var) {
+ // will go through XSS filtering on the get function
+ $_SESSION['sticky_forms'][$form_name][$key] = $var;
+ }
+}
+
+/**
+ * Clear the sticky form cache
+ *
+ * Call this if validation is successful in the action handler or
+ * when they sticky values have been used to repopulate the form
+ * after a validation error.
+ *
+ * @param string $form_name Form namespace
+ *
+ * @return void
+ * @link http://docs.elgg.org/Tutorials/UI/StickyForms
+ * @since 1.8.0
+ */
+function elgg_clear_sticky_form($form_name) {
+ unset($_SESSION['sticky_forms'][$form_name]);
+}
+
+/**
+ * Has this form been made sticky?
+ *
+ * @param string $form_name Form namespace
+ *
+ * @return boolean
+ * @link http://docs.elgg.org/Tutorials/UI/StickyForms
+ * @since 1.8.0
+ */
+function elgg_is_sticky_form($form_name) {
+ return isset($_SESSION['sticky_forms'][$form_name]);
+}
+
+/**
+ * Get a specific sticky variable
+ *
+ * @param string $form_name The name of the form
+ * @param string $variable The name of the variable
+ * @param mixed $default Default value if the variable does not exist in sticky cache
+ * @param boolean $filter_result Filter for bad input if true
+ *
+ * @return mixed
+ *
+ * @todo should this filter the default value?
+ * @link http://docs.elgg.org/Tutorials/UI/StickyForms
+ * @since 1.8.0
+ */
+function elgg_get_sticky_value($form_name, $variable = '', $default = NULL, $filter_result = true) {
+ if (isset($_SESSION['sticky_forms'][$form_name][$variable])) {
+ $value = $_SESSION['sticky_forms'][$form_name][$variable];
+ if ($filter_result) {
+ // XSS filter result
+ $value = filter_tags($value);
+ }
+ return $value;
+ }
+ return $default;
+}
+
+/**
+ * Get all the values in a sticky form in an array
+ *
+ * @param string $form_name The name of the form
+ * @param bool $filter_result Filter for bad input if true
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_sticky_values($form_name, $filter_result = true) {
+ if (!isset($_SESSION['sticky_forms'][$form_name])) {
+ return array();
+ }
+
+ $values = $_SESSION['sticky_forms'][$form_name];
+ if ($filter_result) {
+ foreach ($values as $key => $value) {
+ // XSS filter result
+ $values[$key] = filter_tags($value);
+ }
+ }
+ return $values;
+}
+
+/**
+ * Clear a specific sticky variable
+ *
+ * @param string $form_name The name of the form
+ * @param string $variable The name of the variable to clear
+ *
+ * @return void
+ * @link http://docs.elgg.org/Tutorials/UI/StickyForms
+ * @since 1.8.0
+ */
+function elgg_clear_sticky_value($form_name, $variable) {
+ unset($_SESSION['sticky_forms'][$form_name][$variable]);
+}
+
+/**
+ * Page handler for autocomplete endpoint.
+ *
+ * /livesearch?q=<query>
+ *
+ * Other options include:
+ * match_on string all or array(groups|users|friends)
+ * match_owner int 0/1
+ * limit int default is 10
+ *
+ * @return string JSON string is returned and then exit
+ * @access private
+ */
+function input_livesearch_page_handler($page) {
+ global $CONFIG;
+
+ // only return results to logged in users.
+ if (!$user = elgg_get_logged_in_user_entity()) {
+ exit;
+ }
+
+ if (!$q = get_input('term', get_input('q'))) {
+ exit;
+ }
+
+ $q = sanitise_string($q);
+
+ // replace mysql vars with escaped strings
+ $q = str_replace(array('_', '%'), array('\_', '\%'), $q);
+
+ $match_on = get_input('match_on', 'all');
+
+ if (!is_array($match_on)) {
+ $match_on = array($match_on);
+ }
+
+ // all = users and groups
+ if (in_array('all', $match_on)) {
+ $match_on = array('users', 'groups');
+ }
+
+ if (get_input('match_owner', false)) {
+ $owner_guid = $user->getGUID();
+ $owner_where = 'AND e.owner_guid = ' . $user->getGUID();
+ } else {
+ $owner_guid = null;
+ $owner_where = '';
+ }
+
+ $limit = sanitise_int(get_input('limit', 10));
+
+ // grab a list of entities and send them in json.
+ $results = array();
+ foreach ($match_on as $match_type) {
+ switch ($match_type) {
+ case 'users':
+ $query = "SELECT * FROM {$CONFIG->dbprefix}users_entity as ue, {$CONFIG->dbprefix}entities as e
+ WHERE e.guid = ue.guid
+ AND e.enabled = 'yes'
+ AND ue.banned = 'no'
+ AND (ue.name LIKE '$q%' OR ue.name LIKE '% $q%' OR ue.username LIKE '$q%')
+ LIMIT $limit
+ ";
+
+ if ($entities = get_data($query)) {
+ foreach ($entities as $entity) {
+ $entity = get_entity($entity->guid);
+ if (!$entity) {
+ continue;
+ }
+
+ if (in_array('groups', $match_on)) {
+ $value = $entity->guid;
+ } else {
+ $value = $entity->username;
+ }
+
+ $output = elgg_view_list_item($entity, array(
+ 'use_hover' => false,
+ 'class' => 'elgg-autocomplete-item',
+ ));
+
+ $icon = elgg_view_entity_icon($entity, 'tiny', array(
+ 'use_hover' => false,
+ ));
+
+ $result = array(
+ 'type' => 'user',
+ 'name' => $entity->name,
+ 'desc' => $entity->username,
+ 'guid' => $entity->guid,
+ 'label' => $output,
+ 'value' => $value,
+ 'icon' => $icon,
+ 'url' => $entity->getURL(),
+ );
+ $results[$entity->name . rand(1, 100)] = $result;
+ }
+ }
+ break;
+
+ case 'groups':
+ // don't return results if groups aren't enabled.
+ if (!elgg_is_active_plugin('groups')) {
+ continue;
+ }
+ $query = "SELECT * FROM {$CONFIG->dbprefix}groups_entity as ge, {$CONFIG->dbprefix}entities as e
+ WHERE e.guid = ge.guid
+ AND e.enabled = 'yes'
+ $owner_where
+ AND (ge.name LIKE '$q%' OR ge.name LIKE '% $q%' OR ge.description LIKE '% $q%')
+ LIMIT $limit
+ ";
+ if ($entities = get_data($query)) {
+ foreach ($entities as $entity) {
+ $entity = get_entity($entity->guid);
+ if (!$entity) {
+ continue;
+ }
+
+ $output = elgg_view_list_item($entity, array(
+ 'use_hover' => false,
+ 'class' => 'elgg-autocomplete-item',
+ ));
+
+ $icon = elgg_view_entity_icon($entity, 'tiny', array(
+ 'use_hover' => false,
+ ));
+
+ $result = array(
+ 'type' => 'group',
+ 'name' => $entity->name,
+ 'desc' => strip_tags($entity->description),
+ 'guid' => $entity->guid,
+ 'label' => $output,
+ 'value' => $entity->guid,
+ 'icon' => $icon,
+ 'url' => $entity->getURL(),
+ );
+
+ $results[$entity->name . rand(1, 100)] = $result;
+ }
+ }
+ break;
+
+ case 'friends':
+ $query = "SELECT * FROM
+ {$CONFIG->dbprefix}users_entity as ue,
+ {$CONFIG->dbprefix}entity_relationships as er,
+ {$CONFIG->dbprefix}entities as e
+ WHERE er.relationship = 'friend'
+ AND er.guid_one = {$user->getGUID()}
+ AND er.guid_two = ue.guid
+ AND e.guid = ue.guid
+ AND e.enabled = 'yes'
+ AND ue.banned = 'no'
+ AND (ue.name LIKE '$q%' OR ue.name LIKE '% $q%' OR ue.username LIKE '$q%')
+ LIMIT $limit
+ ";
+
+ if ($entities = get_data($query)) {
+ foreach ($entities as $entity) {
+ $entity = get_entity($entity->guid);
+ if (!$entity) {
+ continue;
+ }
+
+ $output = elgg_view_list_item($entity, array(
+ 'use_hover' => false,
+ 'class' => 'elgg-autocomplete-item',
+ ));
+
+ $icon = elgg_view_entity_icon($entity, 'tiny', array(
+ 'use_hover' => false,
+ ));
+
+ $result = array(
+ 'type' => 'user',
+ 'name' => $entity->name,
+ 'desc' => $entity->username,
+ 'guid' => $entity->guid,
+ 'label' => $output,
+ 'value' => $entity->username,
+ 'icon' => $icon,
+ 'url' => $entity->getURL(),
+ );
+ $results[$entity->name . rand(1, 100)] = $result;
+ }
+ }
+ break;
+
+ default:
+ header("HTTP/1.0 400 Bad Request", true);
+ echo "livesearch: unknown match_on of $match_type";
+ exit;
+ break;
+ }
+ }
+
+ ksort($results);
+ header("Content-Type: application/json");
+ echo json_encode(array_values($results));
+ exit;
+}
+
+/**
+ * Register input functions and sanitize input
+ *
+ * @return void
+ * @access private
+ */
+function input_init() {
+ // register an endpoint for live search / autocomplete.
+ elgg_register_page_handler('livesearch', 'input_livesearch_page_handler');
+
+ if (ini_get_bool('magic_quotes_gpc')) {
+
+ /**
+ * do keys as well, cos array_map ignores them
+ *
+ * @param array $array Array of values
+ *
+ * @return array Sanitized array
+ */
+ function stripslashes_arraykeys($array) {
+ if (is_array($array)) {
+ $array2 = array();
+ foreach ($array as $key => $data) {
+ if ($key != stripslashes($key)) {
+ $array2[stripslashes($key)] = $data;
+ } else {
+ $array2[$key] = $data;
+ }
+ }
+ return $array2;
+ } else {
+ return $array;
+ }
+ }
+
+ /**
+ * Strip slashes on everything
+ *
+ * @param mixed $value The value to remove slashes from
+ *
+ * @return mixed
+ */
+ function stripslashes_deep($value) {
+ if (is_array($value)) {
+ $value = stripslashes_arraykeys($value);
+ $value = array_map('stripslashes_deep', $value);
+ } else {
+ $value = stripslashes($value);
+ }
+ return $value;
+ }
+
+ $_POST = stripslashes_arraykeys($_POST);
+ $_GET = stripslashes_arraykeys($_GET);
+ $_COOKIE = stripslashes_arraykeys($_COOKIE);
+ $_REQUEST = stripslashes_arraykeys($_REQUEST);
+
+ $_POST = array_map('stripslashes_deep', $_POST);
+ $_GET = array_map('stripslashes_deep', $_GET);
+ $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
+ $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
+ if (!empty($_SERVER['REQUEST_URI'])) {
+ $_SERVER['REQUEST_URI'] = stripslashes($_SERVER['REQUEST_URI']);
+ }
+ if (!empty($_SERVER['QUERY_STRING'])) {
+ $_SERVER['QUERY_STRING'] = stripslashes($_SERVER['QUERY_STRING']);
+ }
+ if (!empty($_SERVER['HTTP_REFERER'])) {
+ $_SERVER['HTTP_REFERER'] = stripslashes($_SERVER['HTTP_REFERER']);
+ }
+ if (!empty($_SERVER['PATH_INFO'])) {
+ $_SERVER['PATH_INFO'] = stripslashes($_SERVER['PATH_INFO']);
+ }
+ if (!empty($_SERVER['PHP_SELF'])) {
+ $_SERVER['PHP_SELF'] = stripslashes($_SERVER['PHP_SELF']);
+ }
+ if (!empty($_SERVER['PATH_TRANSLATED'])) {
+ $_SERVER['PATH_TRANSLATED'] = stripslashes($_SERVER['PATH_TRANSLATED']);
+ }
+ }
+}
+
+elgg_register_event_handler('init', 'system', 'input_init');
diff --git a/engine/lib/languages.php b/engine/lib/languages.php
new file mode 100644
index 000000000..98006f7cd
--- /dev/null
+++ b/engine/lib/languages.php
@@ -0,0 +1,350 @@
+<?php
+/**
+ * Elgg language module
+ * Functions to manage language and translations.
+ *
+ * @package Elgg.Core
+ * @subpackage Languages
+ */
+
+/**
+ * Given a message key, returns an appropriately translated full-text string
+ *
+ * @param string $message_key The short message code
+ * @param array $args An array of arguments to pass through vsprintf().
+ * @param string $language Optionally, the standard language code
+ * (defaults to site/user default, then English)
+ *
+ * @return string Either the translated string, the English string,
+ * or the original language string.
+ */
+function elgg_echo($message_key, $args = array(), $language = "") {
+ global $CONFIG;
+
+ static $CURRENT_LANGUAGE;
+
+ // old param order is deprecated
+ if (!is_array($args)) {
+ elgg_deprecated_notice(
+ 'As of Elgg 1.8, the 2nd arg to elgg_echo() is an array of string replacements and the 3rd arg is the language.',
+ 1.8
+ );
+
+ $language = $args;
+ $args = array();
+ }
+
+ if (!isset($CONFIG->translations)) {
+ // this means we probably had an exception before translations were initialized
+ register_translations(dirname(dirname(dirname(__FILE__))) . "/languages/");
+ }
+
+ if (!$CURRENT_LANGUAGE) {
+ $CURRENT_LANGUAGE = get_language();
+ }
+ if (!$language) {
+ $language = $CURRENT_LANGUAGE;
+ }
+
+ if (isset($CONFIG->translations[$language][$message_key])) {
+ $string = $CONFIG->translations[$language][$message_key];
+ } else if (isset($CONFIG->translations["en"][$message_key])) {
+ $string = $CONFIG->translations["en"][$message_key];
+ $lang = $CONFIG->translations["en"][$language];
+ elgg_log(sprintf('Missing %s translation for "%s" language key', $lang, $message_key), 'NOTICE');
+ } else {
+ $string = $message_key;
+ elgg_log(sprintf('Missing English translation for "%s" language key', $message_key), 'NOTICE');
+ }
+
+ // only pass through if we have arguments to allow backward compatibility
+ // with manual sprintf() calls.
+ if ($args) {
+ $string = vsprintf($string, $args);
+ }
+
+ return $string;
+}
+
+/**
+ * Add a translation.
+ *
+ * Translations are arrays in the Zend Translation array format, eg:
+ *
+ * $english = array('message1' => 'message1', 'message2' => 'message2');
+ * $german = array('message1' => 'Nachricht1','message2' => 'Nachricht2');
+ *
+ * @param string $country_code Standard country code (eg 'en', 'nl', 'es')
+ * @param array $language_array Formatted array of strings
+ *
+ * @return true|false Depending on success
+ */
+function add_translation($country_code, $language_array) {
+ global $CONFIG;
+ if (!isset($CONFIG->translations)) {
+ $CONFIG->translations = array();
+ }
+
+ $country_code = strtolower($country_code);
+ $country_code = trim($country_code);
+ if (is_array($language_array) && sizeof($language_array) > 0 && $country_code != "") {
+ if (!isset($CONFIG->translations[$country_code])) {
+ $CONFIG->translations[$country_code] = $language_array;
+ } else {
+ $CONFIG->translations[$country_code] = $language_array + $CONFIG->translations[$country_code];
+ }
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Detect the current language being used by the current site or logged in user.
+ *
+ * @return string The language code for the site/user or "en" if not set
+ */
+function get_current_language() {
+ global $CONFIG;
+
+ $language = get_language();
+
+ if (!$language) {
+ $language = 'en';
+ }
+
+ return $language;
+}
+
+/**
+ * Gets the current language in use by the system or user.
+ *
+ * @return string The language code (eg "en") or false if not set
+ */
+function get_language() {
+ global $CONFIG;
+
+ $user = elgg_get_logged_in_user_entity();
+ $language = false;
+
+ if (($user) && ($user->language)) {
+ $language = $user->language;
+ }
+
+ if ((!$language) && (isset($CONFIG->language)) && ($CONFIG->language)) {
+ $language = $CONFIG->language;
+ }
+
+ if ($language) {
+ return $language;
+ }
+
+ return false;
+}
+
+function _elgg_load_translations() {
+ global $CONFIG;
+
+ if ($CONFIG->system_cache_enabled) {
+ $loaded = true;
+ $languages = array_unique(array('en', get_current_language()));
+ foreach ($languages as $language) {
+ $data = elgg_load_system_cache("$language.php");
+ if ($data) {
+ add_translation($language, unserialize($data));
+ } else {
+ $loaded = false;
+ }
+ }
+
+ if ($loaded) {
+ $CONFIG->i18n_loaded_from_cache = true;
+ // this is here to force
+ $CONFIG->language_paths[dirname(dirname(dirname(__FILE__))) . "/languages/"] = true;
+ return;
+ }
+ }
+
+ // load core translations from languages directory
+ register_translations(dirname(dirname(dirname(__FILE__))) . "/languages/");
+}
+
+
+
+/**
+ * When given a full path, finds translation files and loads them
+ *
+ * @param string $path Full path
+ * @param bool $load_all If true all languages are loaded, if
+ * false only the current language + en are loaded
+ *
+ * @return void
+ */
+function register_translations($path, $load_all = false) {
+ global $CONFIG;
+
+ $path = sanitise_filepath($path);
+
+ // Make a note of this path just incase we need to register this language later
+ if (!isset($CONFIG->language_paths)) {
+ $CONFIG->language_paths = array();
+ }
+ $CONFIG->language_paths[$path] = true;
+
+ // Get the current language based on site defaults and user preference
+ $current_language = get_current_language();
+ elgg_log("Translations loaded from: $path");
+
+ // only load these files unless $load_all is true.
+ $load_language_files = array(
+ 'en.php',
+ "$current_language.php"
+ );
+
+ $load_language_files = array_unique($load_language_files);
+
+ $handle = opendir($path);
+ if (!$handle) {
+ elgg_log("Could not open language path: $path", 'ERROR');
+ return false;
+ }
+
+ $return = true;
+ while (false !== ($language = readdir($handle))) {
+ // ignore bad files
+ if (substr($language, 0, 1) == '.' || substr($language, -4) !== '.php') {
+ continue;
+ }
+
+ if (in_array($language, $load_language_files) || $load_all) {
+ if (!include_once($path . $language)) {
+ $return = false;
+ continue;
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Reload all translations from all registered paths.
+ *
+ * This is only called by functions which need to know all possible translations, namely the
+ * statistic gathering ones.
+ *
+ * @todo Better on demand loading based on language_paths array
+ *
+ * @return bool
+ */
+function reload_all_translations() {
+ global $CONFIG;
+
+ static $LANG_RELOAD_ALL_RUN;
+ if ($LANG_RELOAD_ALL_RUN) {
+ return null;
+ }
+
+ foreach ($CONFIG->language_paths as $path => $dummy) {
+ register_translations($path, true);
+ }
+
+ $LANG_RELOAD_ALL_RUN = true;
+}
+
+/**
+ * Return an array of installed translations as an associative
+ * array "two letter code" => "native language name".
+ *
+ * @return array
+ */
+function get_installed_translations() {
+ global $CONFIG;
+
+ // Ensure that all possible translations are loaded
+ reload_all_translations();
+
+ $installed = array();
+
+ foreach ($CONFIG->translations as $k => $v) {
+ $installed[$k] = elgg_echo($k, array(), $k);
+ if (elgg_is_admin_logged_in()) {
+ $completeness = get_language_completeness($k);
+ if (($completeness < 100) && ($k != 'en')) {
+ $installed[$k] .= " (" . $completeness . "% " . elgg_echo('complete') . ")";
+ }
+ }
+ }
+
+ return $installed;
+}
+
+/**
+ * Return the level of completeness for a given language code (compared to english)
+ *
+ * @param string $language Language
+ *
+ * @return int
+ */
+function get_language_completeness($language) {
+ global $CONFIG;
+
+ // Ensure that all possible translations are loaded
+ reload_all_translations();
+
+ $language = sanitise_string($language);
+
+ $en = count($CONFIG->translations['en']);
+
+ $missing = get_missing_language_keys($language);
+ if ($missing) {
+ $missing = count($missing);
+ } else {
+ $missing = 0;
+ }
+
+ //$lang = count($CONFIG->translations[$language]);
+ $lang = $en - $missing;
+
+ return round(($lang / $en) * 100, 2);
+}
+
+/**
+ * Return the translation keys missing from a given language,
+ * or those that are identical to the english version.
+ *
+ * @param string $language The language
+ *
+ * @return mixed
+ */
+function get_missing_language_keys($language) {
+ global $CONFIG;
+
+ // Ensure that all possible translations are loaded
+ reload_all_translations();
+
+ $missing = array();
+
+ foreach ($CONFIG->translations['en'] as $k => $v) {
+ if ((!isset($CONFIG->translations[$language][$k]))
+ || ($CONFIG->translations[$language][$k] == $CONFIG->translations['en'][$k])) {
+ $missing[] = $k;
+ }
+ }
+
+ if (count($missing)) {
+ return $missing;
+ }
+
+ return false;
+}
+
+/**
+ * Initialize the language library
+ * @access private
+ */
+function elgg_languages_init() {
+ $lang = get_current_language();
+ elgg_register_simplecache_view("js/languages/$lang");
+}
+
+elgg_register_event_handler('init', 'system', 'elgg_languages_init');
diff --git a/engine/lib/location.php b/engine/lib/location.php
new file mode 100644
index 000000000..5b889509b
--- /dev/null
+++ b/engine/lib/location.php
@@ -0,0 +1,157 @@
+<?php
+/**
+ * Elgg geo-location tagging library.
+ *
+ * @package Elgg.Core
+ * @subpackage Location
+ */
+
+/**
+ * Encode a location into a latitude and longitude, caching the result.
+ *
+ * Works by triggering the 'geocode' 'location' plugin
+ * hook, and requires a geocoding plugin to be installed.
+ *
+ * @param string $location The location, e.g. "London", or "24 Foobar Street, Gotham City"
+ * @return string|false
+ */
+function elgg_geocode_location($location) {
+ global $CONFIG;
+
+ if (is_array($location)) {
+ return false;
+ }
+
+ $location = sanitise_string($location);
+
+ // Look for cached version
+ $query = "SELECT * from {$CONFIG->dbprefix}geocode_cache WHERE location='$location'";
+ $cached_location = get_data_row($query);
+
+ if ($cached_location) {
+ return array('lat' => $cached_location->lat, 'long' => $cached_location->long);
+ }
+
+ // Trigger geocode event if not cached
+ $return = false;
+ $return = elgg_trigger_plugin_hook('geocode', 'location', array('location' => $location), $return);
+
+ // If returned, cache and return value
+ if (($return) && (is_array($return))) {
+ $lat = (float)$return['lat'];
+ $long = (float)$return['long'];
+
+ // Put into cache at the end of the page since we don't really care that much
+ $query = "INSERT DELAYED INTO {$CONFIG->dbprefix}geocode_cache "
+ . " (location, lat, `long`) VALUES ('$location', '{$lat}', '{$long}')"
+ . " ON DUPLICATE KEY UPDATE lat='{$lat}', `long`='{$long}'";
+ execute_delayed_write_query($query);
+ }
+
+ return $return;
+}
+
+/**
+ * Return entities within a given geographic area.
+ *
+ * Also accepts all options available to elgg_get_entities().
+ *
+ * @see elgg_get_entities
+ *
+ * @param array $options Array in format:
+ *
+ * latitude => FLOAT Latitude of the location
+ *
+ * longitude => FLOAT Longitude of the location
+ *
+ * distance => FLOAT/ARR (
+ * latitude => float,
+ * longitude => float,
+ * )
+ * The distance in degrees that determines the search box. A
+ * single float will result in a square in degrees.
+ * @warning The Earth is round.
+ *
+ * @see ElggEntity::setLatLong()
+ *
+ * @return mixed If count, int. If not count, array. false on errors.
+ * @since 1.8.0
+ */
+function elgg_get_entities_from_location(array $options = array()) {
+
+ global $CONFIG;
+
+ if (!isset($options['latitude']) || !isset($options['longitude']) ||
+ !isset($options['distance'])) {
+ return false;
+ }
+
+ if (!is_array($options['distance'])) {
+ $lat_distance = (float)$options['distance'];
+ $long_distance = (float)$options['distance'];
+ } else {
+ $lat_distance = (float)$options['distance']['latitude'];
+ $long_distance = (float)$options['distance']['longitude'];
+ }
+
+ $lat = (float)$options['latitude'];
+ $long = (float)$options['longitude'];
+ $lat_min = $lat - $lat_distance;
+ $lat_max = $lat + $lat_distance;
+ $long_min = $long - $long_distance;
+ $long_max = $long + $long_distance;
+
+ $where = array();
+ $wheres[] = "lat_name.string='geo:lat'";
+ $wheres[] = "lat_value.string >= $lat_min";
+ $wheres[] = "lat_value.string <= $lat_max";
+ $wheres[] = "lon_name.string='geo:long'";
+ $wheres[] = "lon_value.string >= $long_min";
+ $wheres[] = "lon_value.string <= $long_max";
+
+ $joins = array();
+ $joins[] = "JOIN {$CONFIG->dbprefix}metadata lat on e.guid=lat.entity_guid";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metastrings lat_name on lat.name_id=lat_name.id";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metastrings lat_value on lat.value_id=lat_value.id";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metadata lon on e.guid=lon.entity_guid";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metastrings lon_name on lon.name_id=lon_name.id";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metastrings lon_value on lon.value_id=lon_value.id";
+
+ // merge wheres to pass to get_entities()
+ if (isset($options['wheres']) && !is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ } elseif (!isset($options['wheres'])) {
+ $options['wheres'] = array();
+ }
+ $options['wheres'] = array_merge($options['wheres'], $wheres);
+
+ // merge joins to pass to get_entities()
+ if (isset($options['joins']) && !is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ } elseif (!isset($options['joins'])) {
+ $options['joins'] = array();
+ }
+ $options['joins'] = array_merge($options['joins'], $joins);
+
+ return elgg_get_entities_from_relationship($options);
+}
+
+/**
+ * Returns a viewable list of entities from location
+ *
+ * @param array $options
+ *
+ * @see elgg_list_entities()
+ * @see elgg_get_entities_from_location()
+ *
+ * @return string The viewable list of entities
+ * @since 1.8.0
+ */
+function elgg_list_entities_from_location(array $options = array()) {
+ return elgg_list_entities($options, 'elgg_get_entities_from_location');
+}
+
+// Some distances in degrees (approximate)
+// @todo huh? see warning on elgg_get_entities_from_location()
+define("MILE", 0.01515);
+define("KILOMETER", 0.00932);
diff --git a/engine/lib/mb_wrapper.php b/engine/lib/mb_wrapper.php
new file mode 100644
index 000000000..c2f5503e0
--- /dev/null
+++ b/engine/lib/mb_wrapper.php
@@ -0,0 +1,233 @@
+<?php
+
+// if mb functions are available, set internal encoding to UTF8
+if (is_callable('mb_internal_encoding')) {
+ mb_internal_encoding("UTF-8");
+ ini_set("mbstring.internal_encoding", 'UTF-8');
+}
+
+/**
+ * Parses a string using mb_parse_str() if available.
+ * NOTE: This differs from parse_str() by returning the results
+ * instead of placing them in the local scope!
+ *
+ * @param str $str The string
+ *
+ * @return array
+ * @since 1.7.0
+ */
+function elgg_parse_str($str) {
+ if (is_callable('mb_parse_str')) {
+ mb_parse_str($str, $results);
+ } else {
+ parse_str($str, $results);
+ }
+
+ return $results;
+}
+
+
+
+/**
+ * Wrapper function for mb_split(). Falls back to split() if
+ * mb_split() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_split() {
+ $args = func_get_args();
+ if (is_callable('mb_split')) {
+ return call_user_func_array('mb_split', $args);
+ }
+ return call_user_func_array('split', $args);
+}
+
+/**
+ * Wrapper function for mb_stristr(). Falls back to stristr() if
+ * mb_stristr() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_stristr() {
+ $args = func_get_args();
+ if (is_callable('mb_stristr')) {
+ return call_user_func_array('mb_stristr', $args);
+ }
+ return call_user_func_array('stristr', $args);
+}
+
+/**
+ * Wrapper function for mb_strlen(). Falls back to strlen() if
+ * mb_strlen() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_strlen() {
+ $args = func_get_args();
+ if (is_callable('mb_strlen')) {
+ return call_user_func_array('mb_strlen', $args);
+ }
+ return call_user_func_array('strlen', $args);
+}
+
+/**
+ * Wrapper function for mb_strpos(). Falls back to strpos() if
+ * mb_strpos() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_strpos() {
+ $args = func_get_args();
+ if (is_callable('mb_strpos')) {
+ return call_user_func_array('mb_strpos', $args);
+ }
+ return call_user_func_array('strpos', $args);
+}
+
+/**
+ * Wrapper function for mb_strrchr(). Falls back to strrchr() if
+ * mb_strrchr() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_strrchr() {
+ $args = func_get_args();
+ if (is_callable('mb_strrchr')) {
+ return call_user_func_array('mb_strrchr', $args);
+ }
+ return call_user_func_array('strrchr', $args);
+}
+
+/**
+ * Wrapper function for mb_strripos(). Falls back to strripos() if
+ * mb_strripos() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return int
+ * @since 1.7.0
+ */
+function elgg_strripos() {
+ $args = func_get_args();
+ if (is_callable('mb_strripos')) {
+ return call_user_func_array('mb_strripos', $args);
+ }
+ return call_user_func_array('strripos', $args);
+}
+
+/**
+ * Wrapper function for mb_strrpos(). Falls back to strrpos() if
+ * mb_strrpos() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return int
+ * @since 1.7.0
+ */
+function elgg_strrpos() {
+ $args = func_get_args();
+ if (is_callable('mb_strrpos')) {
+ return call_user_func_array('mb_strrpos', $args);
+ }
+ return call_user_func_array('strrpos', $args);
+}
+
+/**
+ * Wrapper function for mb_strstr(). Falls back to strstr() if
+ * mb_strstr() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return bool
+ * @since 1.7.0
+ */
+function elgg_strstr() {
+ $args = func_get_args();
+ if (is_callable('mb_strstr')) {
+ return call_user_func_array('mb_strstr', $args);
+ }
+ return call_user_func_array('strstr', $args);
+}
+
+/**
+ * Wrapper function for mb_strtolower(). Falls back to strtolower() if
+ * mb_strtolower() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_strtolower() {
+ $args = func_get_args();
+ if (is_callable('mb_strtolower')) {
+ return call_user_func_array('mb_strtolower', $args);
+ }
+ return call_user_func_array('strtolower', $args);
+}
+
+/**
+ * Wrapper function for mb_strtoupper(). Falls back to strtoupper() if
+ * mb_strtoupper() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_strtoupper() {
+ $args = func_get_args();
+ if (is_callable('mb_strtoupper')) {
+ return call_user_func_array('mb_strtoupper', $args);
+ }
+ return call_user_func_array('strtoupper', $args);
+}
+
+/**
+ * Wrapper function for mb_substr_count(). Falls back to substr_count() if
+ * mb_substr_count() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return int
+ * @since 1.7.0
+ */
+function elgg_substr_count() {
+ $args = func_get_args();
+ if (is_callable('mb_substr_count')) {
+ return call_user_func_array('mb_substr_count', $args);
+ }
+ return call_user_func_array('substr_count', $args);
+}
+
+/**
+ * Wrapper function for mb_substr(). Falls back to substr() if
+ * mb_substr() isn't available. Parameters are passed to the
+ * wrapped function in the same order they are passed to this
+ * function.
+ *
+ * @return string
+ * @since 1.7.0
+ */
+function elgg_substr() {
+ $args = func_get_args();
+ if (is_callable('mb_substr')) {
+ return call_user_func_array('mb_substr', $args);
+ }
+ return call_user_func_array('substr', $args);
+}
diff --git a/engine/lib/memcache.php b/engine/lib/memcache.php
new file mode 100644
index 000000000..f79fba4a9
--- /dev/null
+++ b/engine/lib/memcache.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Elgg memcache support.
+ *
+ * Requires php5-memcache to work.
+ *
+ * @package Elgg.Core
+ * @subpackage Cache.Memcache
+ */
+
+/**
+ * Return true if memcache is available and configured.
+ *
+ * @return bool
+ */
+function is_memcache_available() {
+ global $CONFIG;
+
+ static $memcache_available;
+
+ if ((!isset($CONFIG->memcache)) || (!$CONFIG->memcache)) {
+ return false;
+ }
+
+ // If we haven't set variable to something
+ if (($memcache_available !== true) && ($memcache_available !== false)) {
+ try {
+ $tmp = new ElggMemcache();
+ // No exception thrown so we have memcache available
+ $memcache_available = true;
+ } catch (Exception $e) {
+ $memcache_available = false;
+ }
+ }
+
+ return $memcache_available;
+}
diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php
new file mode 100644
index 000000000..f76c20f24
--- /dev/null
+++ b/engine/lib/metadata.php
@@ -0,0 +1,962 @@
+<?php
+/**
+ * Elgg metadata
+ * Functions to manage entity metadata.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Metadata
+ */
+
+/**
+ * Convert a database row to a new ElggMetadata
+ *
+ * @param stdClass $row An object from the database
+ *
+ * @return stdClass|ElggMetadata
+ * @access private
+ */
+function row_to_elggmetadata($row) {
+ if (!($row instanceof stdClass)) {
+ return $row;
+ }
+
+ return new ElggMetadata($row);
+}
+
+/**
+ * Get a specific metadata object by its id.
+ * If you want multiple metadata objects, use
+ * {@link elgg_get_metadata()}.
+ *
+ * @param int $id The id of the metadata object being retrieved.
+ *
+ * @return ElggMetadata|false FALSE if not found
+ */
+function elgg_get_metadata_from_id($id) {
+ return elgg_get_metastring_based_object_from_id($id, 'metadata');
+}
+
+/**
+ * Deletes metadata using its ID.
+ *
+ * @param int $id The metadata ID to delete.
+ * @return bool
+ */
+function elgg_delete_metadata_by_id($id) {
+ $metadata = elgg_get_metadata_from_id($id);
+ if (!$metadata) {
+ return false;
+ }
+ return $metadata->delete();
+}
+
+/**
+ * Create a new metadata object, or update an existing one.
+ *
+ * Metadata can be an array by setting allow_multiple to TRUE, but it is an
+ * indexed array with no control over the indexing.
+ *
+ * @param int $entity_guid The entity to attach the metadata to
+ * @param string $name Name of the metadata
+ * @param string $value Value of the metadata
+ * @param string $value_type 'text', 'integer', or '' for automatic detection
+ * @param int $owner_guid GUID of entity that owns the metadata
+ * @param int $access_id Default is ACCESS_PRIVATE
+ * @param bool $allow_multiple Allow multiple values for one key. Default is FALSE
+ *
+ * @return int|false id of metadata or FALSE if failure
+ */
+function create_metadata($entity_guid, $name, $value, $value_type = '', $owner_guid = 0,
+ $access_id = ACCESS_PRIVATE, $allow_multiple = false) {
+
+ global $CONFIG;
+
+ $entity_guid = (int)$entity_guid;
+ // name and value are encoded in add_metastring()
+ //$name = sanitise_string(trim($name));
+ //$value = sanitise_string(trim($value));
+ $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
+ $time = time();
+ $owner_guid = (int)$owner_guid;
+ $allow_multiple = (boolean)$allow_multiple;
+
+ if (!isset($value)) {
+ return FALSE;
+ }
+
+ if ($owner_guid == 0) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+
+ $access_id = (int)$access_id;
+
+ $query = "SELECT * from {$CONFIG->dbprefix}metadata"
+ . " WHERE entity_guid = $entity_guid and name_id=" . add_metastring($name) . " limit 1";
+
+ $existing = get_data_row($query);
+ if ($existing && !$allow_multiple) {
+ $id = (int)$existing->id;
+ $result = update_metadata($id, $name, $value, $value_type, $owner_guid, $access_id);
+
+ if (!$result) {
+ return false;
+ }
+ } else {
+ // Support boolean types
+ if (is_bool($value)) {
+ $value = (int) $value;
+ }
+
+ // Add the metastrings
+ $value_id = add_metastring($value);
+ if (!$value_id) {
+ return false;
+ }
+
+ $name_id = add_metastring($name);
+ if (!$name_id) {
+ return false;
+ }
+
+ // If ok then add it
+ $query = "INSERT into {$CONFIG->dbprefix}metadata"
+ . " (entity_guid, name_id, value_id, value_type, owner_guid, time_created, access_id)"
+ . " VALUES ($entity_guid, '$name_id','$value_id','$value_type', $owner_guid, $time, $access_id)";
+
+ $id = insert_data($query);
+
+ if ($id !== false) {
+ $obj = elgg_get_metadata_from_id($id);
+ if (elgg_trigger_event('create', 'metadata', $obj)) {
+
+ elgg_get_metadata_cache()->save($entity_guid, $name, $value, $allow_multiple);
+
+ return $id;
+ } else {
+ elgg_delete_metadata_by_id($id);
+ }
+ }
+ }
+
+ return $id;
+}
+
+/**
+ * Update a specific piece of metadata.
+ *
+ * @param int $id ID of the metadata to update
+ * @param string $name Metadata name
+ * @param string $value Metadata value
+ * @param string $value_type Value type
+ * @param int $owner_guid Owner guid
+ * @param int $access_id Access ID
+ *
+ * @return bool
+ */
+function update_metadata($id, $name, $value, $value_type, $owner_guid, $access_id) {
+ global $CONFIG;
+
+ $id = (int)$id;
+
+ if (!$md = elgg_get_metadata_from_id($id)) {
+ return false;
+ }
+ if (!$md->canEdit()) {
+ return false;
+ }
+
+ // If memcached then we invalidate the cache for this entry
+ static $metabyname_memcache;
+ if ((!$metabyname_memcache) && (is_memcache_available())) {
+ $metabyname_memcache = new ElggMemcache('metabyname_memcache');
+ }
+
+ if ($metabyname_memcache) {
+ // @todo fix memcache (name_id is not a property of ElggMetadata)
+ $metabyname_memcache->delete("{$md->entity_guid}:{$md->name_id}");
+ }
+
+ $value_type = detect_extender_valuetype($value, sanitise_string(trim($value_type)));
+
+ $owner_guid = (int)$owner_guid;
+ if ($owner_guid == 0) {
+ $owner_guid = elgg_get_logged_in_user_guid();
+ }
+
+ $access_id = (int)$access_id;
+
+ // Support boolean types (as integers)
+ if (is_bool($value)) {
+ $value = (int) $value;
+ }
+
+ // Add the metastring
+ $value = add_metastring($value);
+ if (!$value) {
+ return false;
+ }
+
+ $name = add_metastring($name);
+ if (!$name) {
+ return false;
+ }
+
+ // If ok then add it
+ $query = "UPDATE {$CONFIG->dbprefix}metadata"
+ . " set name_id='$name', value_id='$value', value_type='$value_type', access_id=$access_id,"
+ . " owner_guid=$owner_guid where id=$id";
+
+ $result = update_data($query);
+ if ($result !== false) {
+
+ elgg_get_metadata_cache()->save($md->entity_guid, $name, $value);
+
+ // @todo this event tells you the metadata has been updated, but does not
+ // let you do anything about it. What is needed is a plugin hook before
+ // the update that passes old and new values.
+ $obj = elgg_get_metadata_from_id($id);
+ elgg_trigger_event('update', 'metadata', $obj);
+ }
+
+ return $result;
+}
+
+/**
+ * This function creates metadata from an associative array of "key => value" pairs.
+ *
+ * To achieve an array for a single key, pass in the same key multiple times with
+ * allow_multiple set to TRUE. This creates an indexed array. It does not support
+ * associative arrays and there is no guarantee on the ordering in the array.
+ *
+ * @param int $entity_guid The entity to attach the metadata to
+ * @param array $name_and_values Associative array - a value can be a string, number, bool
+ * @param string $value_type 'text', 'integer', or '' for automatic detection
+ * @param int $owner_guid GUID of entity that owns the metadata
+ * @param int $access_id Default is ACCESS_PRIVATE
+ * @param bool $allow_multiple Allow multiple values for one key. Default is FALSE
+ *
+ * @return bool
+ */
+function create_metadata_from_array($entity_guid, array $name_and_values, $value_type, $owner_guid,
+$access_id = ACCESS_PRIVATE, $allow_multiple = false) {
+
+ foreach ($name_and_values as $k => $v) {
+ $result = create_metadata($entity_guid, $k, $v, $value_type, $owner_guid,
+ $access_id, $allow_multiple);
+ if (!$result) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/**
+ * Returns metadata. Accepts all elgg_get_entities() options for entity
+ * restraints.
+ *
+ * @see elgg_get_entities
+ *
+ * @warning 1.7's find_metadata() didn't support limits and returned all metadata.
+ * This function defaults to a limit of 25. There is probably not a reason
+ * for you to return all metadata unless you're exporting an entity,
+ * have other restraints in place, or are doing something horribly
+ * wrong in your code.
+ *
+ * @param array $options Array in format:
+ *
+ * metadata_names => NULL|ARR metadata names
+ * metadata_values => NULL|ARR metadata values
+ * metadata_ids => NULL|ARR metadata ids
+ * metadata_case_sensitive => BOOL Overall Case sensitive
+ * metadata_owner_guids => NULL|ARR guids for metadata owners
+ * metadata_created_time_lower => INT Lower limit for created time.
+ * metadata_created_time_upper => INT Upper limit for created time.
+ * metadata_calculation => STR Perform the MySQL function on the metadata values returned.
+ * The "metadata_calculation" option causes this function to
+ * return the result of performing a mathematical calculation on
+ * all metadata that match the query instead of returning
+ * ElggMetadata objects.
+ *
+ * @return mixed
+ * @since 1.8.0
+ */
+function elgg_get_metadata(array $options = array()) {
+ $options['metastring_type'] = 'metadata';
+ return elgg_get_metastring_based_objects($options);
+}
+
+/**
+ * Deletes metadata based on $options.
+ *
+ * @warning Unlike elgg_get_metadata() this will not accept an empty options array!
+ * This requires at least one constraint: metadata_owner_guid(s),
+ * metadata_name(s), metadata_value(s), or guid(s) must be set.
+ *
+ * @warning This returns null on no ops.
+ *
+ * @param array $options An options array. {@see elgg_get_metadata()}
+ * @return mixed Null if the metadata name is invalid. Bool on success or fail.
+ * @since 1.8.0
+ */
+function elgg_delete_metadata(array $options) {
+ if (!elgg_is_valid_options_for_batch_operation($options, 'metadata')) {
+ return false;
+ }
+
+ elgg_get_metadata_cache()->invalidateByOptions('delete', $options);
+
+ $options['metastring_type'] = 'metadata';
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_delete_callback', false);
+}
+
+/**
+ * Disables metadata based on $options.
+ *
+ * @warning Unlike elgg_get_metadata() this will not accept an empty options array!
+ *
+ * @warning This returns null on no ops.
+ *
+ * @param array $options An options array. {@See elgg_get_metadata()}
+ * @return mixed
+ * @since 1.8.0
+ */
+function elgg_disable_metadata(array $options) {
+ if (!elgg_is_valid_options_for_batch_operation($options, 'metadata')) {
+ return false;
+ }
+
+ elgg_get_metadata_cache()->invalidateByOptions('disable', $options);
+
+ $options['metastring_type'] = 'metadata';
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_disable_callback', false);
+}
+
+/**
+ * Enables metadata based on $options.
+ *
+ * @warning Unlike elgg_get_metadata() this will not accept an empty options array!
+ *
+ * @warning This returns null on no ops.
+ *
+ * @param array $options An options array. {@See elgg_get_metadata()}
+ * @return mixed
+ * @since 1.8.0
+ */
+function elgg_enable_metadata(array $options) {
+ if (!$options || !is_array($options)) {
+ return false;
+ }
+
+ elgg_get_metadata_cache()->invalidateByOptions('enable', $options);
+
+ $options['metastring_type'] = 'metadata';
+ return elgg_batch_metastring_based_objects($options, 'elgg_batch_enable_callback');
+}
+
+/**
+ * ElggEntities interfaces
+ */
+
+/**
+ * Returns entities based upon metadata. Also accepts all
+ * options available to elgg_get_entities(). Supports
+ * the singular option shortcut.
+ *
+ * @note Using metadata_names and metadata_values results in a
+ * "names IN (...) AND values IN (...)" clause. This is subtly
+ * differently than default multiple metadata_name_value_pairs, which use
+ * "(name = value) AND (name = value)" clauses.
+ *
+ * When in doubt, use name_value_pairs.
+ *
+ * To ask for entities that do not have a metadata value, use a custom
+ * where clause like this:
+ *
+ * $options['wheres'][] = "NOT EXISTS (
+ * SELECT 1 FROM {$dbprefix}metadata md
+ * WHERE md.entity_guid = e.guid
+ * AND md.name_id = $name_metastring_id
+ * AND md.value_id = $value_metastring_id)";
+ *
+ * Note the metadata name and value has been denormalized in the above example.
+ *
+ * @see elgg_get_entities
+ *
+ * @param array $options Array in format:
+ *
+ * metadata_names => NULL|ARR metadata names
+ *
+ * metadata_values => NULL|ARR metadata values
+ *
+ * metadata_name_value_pairs => NULL|ARR (
+ * name => 'name',
+ * value => 'value',
+ * 'operand' => '=',
+ * 'case_sensitive' => TRUE
+ * )
+ * Currently if multiple values are sent via
+ * an array (value => array('value1', 'value2')
+ * the pair's operand will be forced to "IN".
+ *
+ * metadata_name_value_pairs_operator => NULL|STR The operator to use for combining
+ * (name = value) OPERATOR (name = value); default AND
+ *
+ * metadata_case_sensitive => BOOL Overall Case sensitive
+ *
+ * order_by_metadata => NULL|ARR array(
+ * 'name' => 'metadata_text1',
+ * 'direction' => ASC|DESC,
+ * 'as' => text|integer
+ * )
+ * Also supports array('name' => 'metadata_text1')
+ *
+ * metadata_owner_guids => NULL|ARR guids for metadata owners
+ *
+ * @return mixed If count, int. If not count, array. false on errors.
+ * @since 1.7.0
+ */
+function elgg_get_entities_from_metadata(array $options = array()) {
+ $defaults = array(
+ 'metadata_names' => ELGG_ENTITIES_ANY_VALUE,
+ 'metadata_values' => ELGG_ENTITIES_ANY_VALUE,
+ 'metadata_name_value_pairs' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'metadata_name_value_pairs_operator' => 'AND',
+ 'metadata_case_sensitive' => TRUE,
+ 'order_by_metadata' => array(),
+
+ 'metadata_owner_guids' => ELGG_ENTITIES_ANY_VALUE,
+ );
+
+ $options = array_merge($defaults, $options);
+
+ $singulars = array('metadata_name', 'metadata_value',
+ 'metadata_name_value_pair', 'metadata_owner_guid');
+
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ if (!$options = elgg_entities_get_metastrings_options('metadata', $options)) {
+ return FALSE;
+ }
+
+ return elgg_get_entities($options);
+}
+
+/**
+ * Returns metadata name and value SQL where for entities.
+ * NB: $names and $values are not paired. Use $pairs for this.
+ * Pairs default to '=' operand.
+ *
+ * This function is reused for annotations because the tables are
+ * exactly the same.
+ *
+ * @param string $e_table Entities table name
+ * @param string $n_table Normalized metastrings table name (Where entities,
+ * values, and names are joined. annotations / metadata)
+ * @param array|null $names Array of names
+ * @param array|null $values Array of values
+ * @param array|null $pairs Array of names / values / operands
+ * @param string $pair_operator ("AND" or "OR") Operator to use to join the where clauses for pairs
+ * @param bool $case_sensitive Case sensitive metadata names?
+ * @param array|null $order_by_metadata Array of names / direction
+ * @param array|null $owner_guids Array of owner GUIDs
+ *
+ * @return FALSE|array False on fail, array('joins', 'wheres')
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_metadata_where_sql($e_table, $n_table, $names = NULL, $values = NULL,
+$pairs = NULL, $pair_operator = 'AND', $case_sensitive = TRUE, $order_by_metadata = NULL,
+$owner_guids = NULL) {
+
+ global $CONFIG;
+
+ // short circuit if nothing requested
+ // 0 is a valid (if not ill-conceived) metadata name.
+ // 0 is also a valid metadata value for FALSE, NULL, or 0
+ // 0 is also a valid(ish) owner_guid
+ if ((!$names && $names !== 0)
+ && (!$values && $values !== 0)
+ && (!$pairs && $pairs !== 0)
+ && (!$owner_guids && $owner_guids !== 0)
+ && !$order_by_metadata) {
+ return '';
+ }
+
+ // join counter for incremental joins.
+ $i = 1;
+
+ // binary forces byte-to-byte comparision of strings, making
+ // it case- and diacritical-mark- sensitive.
+ // only supported on values.
+ $binary = ($case_sensitive) ? ' BINARY ' : '';
+
+ $access = get_access_sql_suffix('n_table');
+
+ $return = array (
+ 'joins' => array (),
+ 'wheres' => array(),
+ 'orders' => array()
+ );
+
+ // will always want to join these tables if pulling metastrings.
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table on
+ {$e_table}.guid = n_table.entity_guid";
+
+ $wheres = array();
+
+ // get names wheres and joins
+ $names_where = '';
+ if ($names !== NULL) {
+ if (!is_array($names)) {
+ $names = array($names);
+ }
+
+ $sanitised_names = array();
+ foreach ($names as $name) {
+ // normalise to 0.
+ if (!$name) {
+ $name = '0';
+ }
+ $sanitised_names[] = '\'' . sanitise_string($name) . '\'';
+ }
+
+ if ($names_str = implode(',', $sanitised_names)) {
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn on n_table.name_id = msn.id";
+ $names_where = "(msn.string IN ($names_str))";
+ }
+ }
+
+ // get values wheres and joins
+ $values_where = '';
+ if ($values !== NULL) {
+ if (!is_array($values)) {
+ $values = array($values);
+ }
+
+ $sanitised_values = array();
+ foreach ($values as $value) {
+ // normalize to 0
+ if (!$value) {
+ $value = 0;
+ }
+ $sanitised_values[] = '\'' . sanitise_string($value) . '\'';
+ }
+
+ if ($values_str = implode(',', $sanitised_values)) {
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv on n_table.value_id = msv.id";
+ $values_where = "({$binary}msv.string IN ($values_str))";
+ }
+ }
+
+ if ($names_where && $values_where) {
+ $wheres[] = "($names_where AND $values_where AND $access)";
+ } elseif ($names_where) {
+ $wheres[] = "($names_where AND $access)";
+ } elseif ($values_where) {
+ $wheres[] = "($values_where AND $access)";
+ }
+
+ // add pairs
+ // pairs must be in arrays.
+ if (is_array($pairs)) {
+ // check if this is an array of pairs or just a single pair.
+ if (isset($pairs['name']) || isset($pairs['value'])) {
+ $pairs = array($pairs);
+ }
+
+ $pair_wheres = array();
+
+ // @todo when the pairs are > 3 should probably split the query up to
+ // denormalize the strings table.
+
+ foreach ($pairs as $index => $pair) {
+ // @todo move this elsewhere?
+ // support shortcut 'n' => 'v' method.
+ if (!is_array($pair)) {
+ $pair = array(
+ 'name' => $index,
+ 'value' => $pair
+ );
+ }
+
+ // must have at least a name and value
+ if (!isset($pair['name']) || !isset($pair['value'])) {
+ // @todo should probably return false.
+ continue;
+ }
+
+ // case sensitivity can be specified per pair.
+ // default to higher level setting.
+ if (isset($pair['case_sensitive'])) {
+ $pair_binary = ($pair['case_sensitive']) ? ' BINARY ' : '';
+ } else {
+ $pair_binary = $binary;
+ }
+
+ if (isset($pair['operand'])) {
+ $operand = sanitise_string($pair['operand']);
+ } else {
+ $operand = ' = ';
+ }
+
+ // for comparing
+ $trimmed_operand = trim(strtolower($operand));
+
+ $access = get_access_sql_suffix("n_table{$i}");
+ // if the value is an int, don't quote it because str '15' < str '5'
+ // if the operand is IN don't quote it because quoting should be done already.
+ if (is_numeric($pair['value'])) {
+ $value = sanitise_string($pair['value']);
+ } else if (is_array($pair['value'])) {
+ $values_array = array();
+
+ foreach ($pair['value'] as $pair_value) {
+ if (is_numeric($pair_value)) {
+ $values_array[] = sanitise_string($pair_value);
+ } else {
+ $values_array[] = "'" . sanitise_string($pair_value) . "'";
+ }
+ }
+
+ if ($values_array) {
+ $value = '(' . implode(', ', $values_array) . ')';
+ }
+
+ // @todo allow support for non IN operands with array of values.
+ // will have to do more silly joins.
+ $operand = 'IN';
+ } else if ($trimmed_operand == 'in') {
+ $value = "({$pair['value']})";
+ } else {
+ $value = "'" . sanitise_string($pair['value']) . "'";
+ }
+
+ $name = sanitise_string($pair['name']);
+
+ // @todo The multiple joins are only needed when the operator is AND
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table{$i}
+ on {$e_table}.guid = n_table{$i}.entity_guid";
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn{$i}
+ on n_table{$i}.name_id = msn{$i}.id";
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv{$i}
+ on n_table{$i}.value_id = msv{$i}.id";
+
+ $pair_wheres[] = "(msn{$i}.string = '$name' AND {$pair_binary}msv{$i}.string
+ $operand $value AND $access)";
+
+ $i++;
+ }
+
+ if ($where = implode(" $pair_operator ", $pair_wheres)) {
+ $wheres[] = "($where)";
+ }
+ }
+
+ // add owner_guids
+ if ($owner_guids) {
+ if (is_array($owner_guids)) {
+ $sanitised = array_map('sanitise_int', $owner_guids);
+ $owner_str = implode(',', $sanitised);
+ } else {
+ $owner_str = sanitise_int($owner_guids);
+ }
+
+ $wheres[] = "(n_table.owner_guid IN ($owner_str))";
+ }
+
+ if ($where = implode(' AND ', $wheres)) {
+ $return['wheres'][] = "($where)";
+ }
+
+ if (is_array($order_by_metadata)) {
+ if ((count($order_by_metadata) > 0) && !isset($order_by_metadata[0])) {
+ // singleton, so fix
+ $order_by_metadata = array($order_by_metadata);
+ }
+ foreach ($order_by_metadata as $order_by) {
+ if (is_array($order_by) && isset($order_by['name'])) {
+ $name = sanitise_string($order_by['name']);
+ if (isset($order_by['direction'])) {
+ $direction = sanitise_string($order_by['direction']);
+ } else {
+ $direction = 'ASC';
+ }
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}{$n_table} n_table{$i}
+ on {$e_table}.guid = n_table{$i}.entity_guid";
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msn{$i}
+ on n_table{$i}.name_id = msn{$i}.id";
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}metastrings msv{$i}
+ on n_table{$i}.value_id = msv{$i}.id";
+
+ $access = get_access_sql_suffix("n_table{$i}");
+
+ $return['wheres'][] = "(msn{$i}.string = '$name' AND $access)";
+ if (isset($order_by['as']) && $order_by['as'] == 'integer') {
+ $return['orders'][] = "CAST(msv{$i}.string AS SIGNED) $direction";
+ } else {
+ $return['orders'][] = "msv{$i}.string $direction";
+ }
+ $i++;
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Returns a list of entities filtered by provided metadata.
+ *
+ * @see elgg_get_entities_from_metadata
+ *
+ * @param array $options Options array
+ *
+ * @return array
+ * @since 1.7.0
+ */
+function elgg_list_entities_from_metadata($options) {
+ return elgg_list_entities($options, 'elgg_get_entities_from_metadata');
+}
+
+/**
+ * Other functions
+ */
+
+/**
+ * Handler called by trigger_plugin_hook on the "export" event.
+ *
+ * @param string $hook export
+ * @param string $entity_type all
+ * @param mixed $returnvalue Value returned from previous hook
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ *
+ * @throws InvalidParameterException
+ */
+function export_metadata_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ // Sanity check values
+ if ((!is_array($params)) && (!isset($params['guid']))) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
+ }
+
+ if (!is_array($returnvalue)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonArrayReturnValue'));
+ }
+
+ $result = elgg_get_metadata(array(
+ 'guid' => (int)$params['guid'],
+ 'limit' => 0,
+ ));
+
+ if ($result) {
+ /* @var ElggMetadata[] $result */
+ foreach ($result as $r) {
+ $returnvalue[] = $r->export();
+ }
+ }
+
+ return $returnvalue;
+}
+
+/**
+ * Takes in a comma-separated string and returns an array of tags
+ * which have been trimmed
+ *
+ * @param string $string Comma-separated tag string
+ *
+ * @return array|false An array of strings, or false on failure
+ */
+function string_to_tag_array($string) {
+ if (is_string($string)) {
+ $ar = explode(",", $string);
+ $ar = array_map('trim', $ar);
+ $ar = array_filter($ar, 'is_not_null');
+ return $ar;
+ }
+ return false;
+
+}
+
+/**
+ * Takes a metadata array (which has all kinds of properties)
+ * and turns it into a simple array of strings
+ *
+ * @param array $array Metadata array
+ *
+ * @return array Array of strings
+ */
+function metadata_array_to_values($array) {
+ $valuearray = array();
+
+ if (is_array($array)) {
+ foreach ($array as $element) {
+ $valuearray[] = $element->value;
+ }
+ }
+
+ return $valuearray;
+}
+
+/**
+ * Get the URL for this metadata
+ *
+ * By default this links to the export handler in the current view.
+ *
+ * @param int $id Metadata ID
+ *
+ * @return mixed
+ */
+function get_metadata_url($id) {
+ $id = (int)$id;
+
+ if ($extender = elgg_get_metadata_from_id($id)) {
+ return get_extender_url($extender);
+ }
+ return false;
+}
+
+/**
+ * Mark entities with a particular type and subtype as having access permissions
+ * that can be changed independently from their parent entity
+ *
+ * @param string $type The type - object, user, etc
+ * @param string $subtype The subtype; all subtypes by default
+ *
+ * @return void
+ */
+function register_metadata_as_independent($type, $subtype = '*') {
+ global $CONFIG;
+ if (!isset($CONFIG->independents)) {
+ $CONFIG->independents = array();
+ }
+ $CONFIG->independents[$type][$subtype] = true;
+}
+
+/**
+ * Determines whether entities of a given type and subtype should not change
+ * their metadata in line with their parent entity
+ *
+ * @param string $type The type - object, user, etc
+ * @param string $subtype The entity subtype
+ *
+ * @return bool
+ */
+function is_metadata_independent($type, $subtype) {
+ global $CONFIG;
+ if (empty($CONFIG->independents)) {
+ return false;
+ }
+ if (!empty($CONFIG->independents[$type][$subtype])
+ || !empty($CONFIG->independents[$type]['*'])) {
+ return true;
+ }
+ return false;
+}
+
+/**
+ * When an entity is updated, resets the access ID on all of its child metadata
+ *
+ * @param string $event The name of the event
+ * @param string $object_type The type of object
+ * @param ElggEntity $object The entity itself
+ *
+ * @return true
+ */
+function metadata_update($event, $object_type, $object) {
+ if ($object instanceof ElggEntity) {
+ if (!is_metadata_independent($object->getType(), $object->getSubtype())) {
+ $db_prefix = elgg_get_config('dbprefix');
+ $access_id = (int) $object->access_id;
+ $guid = (int) $object->getGUID();
+ $query = "update {$db_prefix}metadata set access_id = {$access_id} where entity_guid = {$guid}";
+ update_data($query);
+ }
+ }
+ return true;
+}
+
+/**
+ * Register a metadata url handler.
+ *
+ * @param string $extender_name The name, default 'all'.
+ * @param string $function The function name.
+ *
+ * @return bool
+ */
+function elgg_register_metadata_url_handler($extender_name, $function) {
+ return elgg_register_extender_url_handler('metadata', $extender_name, $function);
+}
+
+/**
+ * Get the global metadata cache instance
+ *
+ * @return ElggVolatileMetadataCache
+ *
+ * @access private
+ */
+function elgg_get_metadata_cache() {
+ global $CONFIG;
+ if (empty($CONFIG->local_metadata_cache)) {
+ $CONFIG->local_metadata_cache = new ElggVolatileMetadataCache();
+ }
+ return $CONFIG->local_metadata_cache;
+}
+
+/**
+ * Invalidate the metadata cache based on options passed to various *_metadata functions
+ *
+ * @param string $action Action performed on metadata. "delete", "disable", or "enable"
+ *
+ * @param array $options Options passed to elgg_(delete|disable|enable)_metadata
+ */
+function elgg_invalidate_metadata_cache($action, array $options) {
+ // remove as little as possible, optimizing for common cases
+ $cache = elgg_get_metadata_cache();
+ if (empty($options['guid'])) {
+ // safest to clear everything unless we want to make this even more complex :(
+ $cache->flush();
+ } else {
+ if (empty($options['metadata_name'])) {
+ // safest to clear the whole entity
+ $cache->clear($options['guid']);
+ } else {
+ switch ($action) {
+ case 'delete':
+ $cache->markEmpty($options['guid'], $options['metadata_name']);
+ break;
+ default:
+ $cache->markUnknown($options['guid'], $options['metadata_name']);
+ }
+ }
+ }
+}
+
+/** Register the hook */
+elgg_register_plugin_hook_handler("export", "all", "export_metadata_plugin_hook", 2);
+
+/** Call a function whenever an entity is updated **/
+elgg_register_event_handler('update', 'all', 'metadata_update');
+
+// unit testing
+elgg_register_plugin_hook_handler('unit_test', 'system', 'metadata_test');
+
+/**
+ * Metadata unit test
+ *
+ * @param string $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of other tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function metadata_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/metadata.php';
+ $value[] = $CONFIG->path . 'engine/tests/api/metadata_cache.php';
+ return $value;
+}
diff --git a/engine/lib/metastrings.php b/engine/lib/metastrings.php
new file mode 100644
index 000000000..cf6dd4d98
--- /dev/null
+++ b/engine/lib/metastrings.php
@@ -0,0 +1,904 @@
+<?php
+/**
+ * Elgg metastrngs
+ * Functions to manage object metastrings.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.MetaStrings
+ */
+
+/** Cache metastrings for a page */
+global $METASTRINGS_CACHE;
+$METASTRINGS_CACHE = array();
+
+/** Keep a record of strings we know don't exist */
+global $METASTRINGS_DEADNAME_CACHE;
+$METASTRINGS_DEADNAME_CACHE = array();
+
+
+
+/**
+ * Return the meta string id for a given tag, or false.
+ *
+ * @param string $string The value to store
+ * @param bool $case_sensitive Do we want to make the query case sensitive?
+ * If not there may be more than one result
+ *
+ * @return int|array|false meta string id, array of ids or false if none found
+ */
+function get_metastring_id($string, $case_sensitive = TRUE) {
+ global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
+
+ $string = sanitise_string($string);
+
+ // caching doesn't work for case insensitive searches
+ if ($case_sensitive) {
+ $result = array_search($string, $METASTRINGS_CACHE, true);
+
+ if ($result !== false) {
+ elgg_log("** Returning id for string:$string from cache.");
+ return $result;
+ }
+
+ // See if we have previously looked for this and found nothing
+ if (in_array($string, $METASTRINGS_DEADNAME_CACHE, true)) {
+ return false;
+ }
+
+ // Experimental memcache
+ $msfc = null;
+ static $metastrings_memcache;
+ if ((!$metastrings_memcache) && (is_memcache_available())) {
+ $metastrings_memcache = new ElggMemcache('metastrings_memcache');
+ }
+ if ($metastrings_memcache) {
+ $msfc = $metastrings_memcache->load($string);
+ }
+ if ($msfc) {
+ return $msfc;
+ }
+ }
+
+ // Case sensitive
+ if ($case_sensitive) {
+ $query = "SELECT * from {$CONFIG->dbprefix}metastrings where string= BINARY '$string' limit 1";
+ } else {
+ $query = "SELECT * from {$CONFIG->dbprefix}metastrings where string = '$string'";
+ }
+
+ $row = FALSE;
+ $metaStrings = get_data($query, "entity_row_to_elggstar");
+ if (is_array($metaStrings)) {
+ if (sizeof($metaStrings) > 1) {
+ $ids = array();
+ foreach ($metaStrings as $metaString) {
+ $ids[] = $metaString->id;
+ }
+ return $ids;
+ } else if (isset($metaStrings[0])) {
+ $row = $metaStrings[0];
+ }
+ }
+
+ if ($row) {
+ $METASTRINGS_CACHE[$row->id] = $row->string; // Cache it
+
+ // Attempt to memcache it if memcache is available
+ if ($metastrings_memcache) {
+ $metastrings_memcache->save($row->string, $row->id);
+ }
+
+ elgg_log("** Cacheing string '{$row->string}'");
+
+ return $row->id;
+ } else {
+ $METASTRINGS_DEADNAME_CACHE[$string] = $string;
+ }
+
+ return false;
+}
+
+/**
+ * When given an ID, returns the corresponding metastring
+ *
+ * @param int $id Metastring ID
+ *
+ * @return string Metastring
+ */
+function get_metastring($id) {
+ global $CONFIG, $METASTRINGS_CACHE;
+
+ $id = (int) $id;
+
+ if (isset($METASTRINGS_CACHE[$id])) {
+ elgg_log("** Returning string for id:$id from cache.");
+
+ return $METASTRINGS_CACHE[$id];
+ }
+
+ $row = get_data_row("SELECT * from {$CONFIG->dbprefix}metastrings where id='$id' limit 1");
+ if ($row) {
+ $METASTRINGS_CACHE[$id] = $row->string; // Cache it
+ elgg_log("** Cacheing string '{$row->string}'");
+
+ return $row->string;
+ }
+
+ return false;
+}
+
+/**
+ * Add a metastring.
+ * It returns the id of the tag, whether by creating it or updating it.
+ *
+ * @param string $string The value (whatever that is) to be stored
+ * @param bool $case_sensitive Do we want to make the query case sensitive?
+ *
+ * @return mixed Integer tag or false.
+ */
+function add_metastring($string, $case_sensitive = true) {
+ global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
+
+ $sanstring = sanitise_string($string);
+
+ $id = get_metastring_id($string, $case_sensitive);
+ if ($id) {
+ return $id;
+ }
+
+ $result = insert_data("INSERT into {$CONFIG->dbprefix}metastrings (string) values ('$sanstring')");
+ if ($result) {
+ $METASTRINGS_CACHE[$result] = $string;
+ if (isset($METASTRINGS_DEADNAME_CACHE[$string])) {
+ unset($METASTRINGS_DEADNAME_CACHE[$string]);
+ }
+ }
+
+ return $result;
+}
+
+/**
+ * Delete any orphaned entries in metastrings. This is run by the garbage collector.
+ *
+ * @return bool
+ * @access private
+ */
+function delete_orphaned_metastrings() {
+ global $CONFIG;
+
+ // If memcache is enabled then we need to flush it of deleted values
+ if (is_memcache_available()) {
+ $select_query = "
+ SELECT *
+ from {$CONFIG->dbprefix}metastrings where
+ (
+ (id not in (select name_id from {$CONFIG->dbprefix}metadata)) AND
+ (id not in (select value_id from {$CONFIG->dbprefix}metadata)) AND
+ (id not in (select name_id from {$CONFIG->dbprefix}annotations)) AND
+ (id not in (select value_id from {$CONFIG->dbprefix}annotations))
+ )";
+
+ $dead = get_data($select_query);
+ if ($dead) {
+ static $metastrings_memcache;
+ if (!$metastrings_memcache) {
+ $metastrings_memcache = new ElggMemcache('metastrings_memcache');
+ }
+
+ foreach ($dead as $d) {
+ $metastrings_memcache->delete($d->string);
+ }
+ }
+ }
+
+ $query = "
+ DELETE
+ from {$CONFIG->dbprefix}metastrings where
+ (
+ (id not in (select name_id from {$CONFIG->dbprefix}metadata)) AND
+ (id not in (select value_id from {$CONFIG->dbprefix}metadata)) AND
+ (id not in (select name_id from {$CONFIG->dbprefix}annotations)) AND
+ (id not in (select value_id from {$CONFIG->dbprefix}annotations))
+ )";
+
+ return delete_data($query);
+}
+
+/**
+ * Returns an array of either ElggAnnotation or ElggMetadata objects.
+ * Accepts all elgg_get_entities() options for entity restraints.
+ *
+ * @see elgg_get_entities
+ *
+ * @param array $options Array in format:
+ *
+ * metastring_names => NULL|ARR metastring names
+ *
+ * metastring_values => NULL|ARR metastring values
+ *
+ * metastring_ids => NULL|ARR metastring ids
+ *
+ * metastring_case_sensitive => BOOL Overall Case sensitive
+ *
+ * metastring_owner_guids => NULL|ARR Guids for metadata owners
+ *
+ * metastring_created_time_lower => INT Lower limit for created time.
+ *
+ * metastring_created_time_upper => INT Upper limit for created time.
+ *
+ * metastring_calculation => STR Perform the MySQL function on the metastring values
+ * returned.
+ * This differs from egef_annotation_calculation in that
+ * it returns only the calculation of all annotation values.
+ * You can sum, avg, count, etc. egef_annotation_calculation()
+ * returns ElggEntities ordered by a calculation on their
+ * annotation values.
+ *
+ * metastring_type => STR metadata or annotation(s)
+ *
+ * @return mixed
+ * @access private
+ */
+function elgg_get_metastring_based_objects($options) {
+ $options = elgg_normalize_metastrings_options($options);
+
+ switch ($options['metastring_type']) {
+ case 'metadata':
+ $type = 'metadata';
+ $callback = 'row_to_elggmetadata';
+ break;
+
+ case 'annotations':
+ case 'annotation':
+ $type = 'annotations';
+ $callback = 'row_to_elggannotation';
+ break;
+
+ default:
+ return false;
+ }
+
+ $defaults = array(
+ // entities
+ 'types' => ELGG_ENTITIES_ANY_VALUE,
+ 'subtypes' => ELGG_ENTITIES_ANY_VALUE,
+ 'type_subtype_pairs' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'owner_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'container_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'site_guids' => get_config('site_guid'),
+
+ 'modified_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'modified_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+ 'created_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'created_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+
+ // options are normalized to the plural in case we ever add support for them.
+ 'metastring_names' => ELGG_ENTITIES_ANY_VALUE,
+ 'metastring_values' => ELGG_ENTITIES_ANY_VALUE,
+ //'metastring_name_value_pairs' => ELGG_ENTITIES_ANY_VALUE,
+ //'metastring_name_value_pairs_operator' => 'AND',
+
+ 'metastring_case_sensitive' => TRUE,
+ //'order_by_metastring' => array(),
+ 'metastring_calculation' => ELGG_ENTITIES_NO_VALUE,
+
+ 'metastring_created_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'metastring_created_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'metastring_owner_guids' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'metastring_ids' => ELGG_ENTITIES_ANY_VALUE,
+
+ // sql
+ 'order_by' => 'n_table.time_created asc',
+ 'limit' => 10,
+ 'offset' => 0,
+ 'count' => FALSE,
+ 'selects' => array(),
+ 'wheres' => array(),
+ 'joins' => array(),
+
+ 'callback' => $callback
+ );
+
+ // @todo Ignore site_guid right now because of #2910
+ $options['site_guid'] = ELGG_ENTITIES_ANY_VALUE;
+
+ $options = array_merge($defaults, $options);
+
+ // can't use helper function with type_subtype_pair because
+ // it's already an array...just need to merge it
+ if (isset($options['type_subtype_pair'])) {
+ if (isset($options['type_subtype_pairs'])) {
+ $options['type_subtype_pairs'] = array_merge($options['type_subtype_pairs'],
+ $options['type_subtype_pair']);
+ } else {
+ $options['type_subtype_pairs'] = $options['type_subtype_pair'];
+ }
+ }
+
+ $singulars = array(
+ 'type', 'subtype', 'type_subtype_pair',
+ 'guid', 'owner_guid', 'container_guid', 'site_guid',
+ 'metastring_name', 'metastring_value',
+ 'metastring_owner_guid', 'metastring_id',
+ 'select', 'where', 'join'
+ );
+
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ if (!$options) {
+ return false;
+ }
+
+ $db_prefix = elgg_get_config('dbprefix');
+
+ // evaluate where clauses
+ if (!is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ }
+
+ $wheres = $options['wheres'];
+
+ // entities
+ $wheres[] = elgg_get_entity_type_subtype_where_sql('e', $options['types'],
+ $options['subtypes'], $options['type_subtype_pairs']);
+
+ $wheres[] = elgg_get_guid_based_where_sql('e.guid', $options['guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.owner_guid', $options['owner_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.container_guid', $options['container_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.site_guid', $options['site_guids']);
+
+ $wheres[] = elgg_get_entity_time_where_sql('e', $options['created_time_upper'],
+ $options['created_time_lower'], $options['modified_time_upper'], $options['modified_time_lower']);
+
+
+ $wheres[] = elgg_get_entity_time_where_sql('n_table', $options['metastring_created_time_upper'],
+ $options['metastring_created_time_lower'], null, null);
+
+ $wheres[] = elgg_get_guid_based_where_sql('n_table.owner_guid',
+ $options['metastring_owner_guids']);
+
+ // see if any functions failed
+ // remove empty strings on successful functions
+ foreach ($wheres as $i => $where) {
+ if ($where === FALSE) {
+ return FALSE;
+ } elseif (empty($where)) {
+ unset($wheres[$i]);
+ }
+ }
+
+ // remove identical where clauses
+ $wheres = array_unique($wheres);
+
+ // evaluate join clauses
+ if (!is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ }
+
+ $joins = $options['joins'];
+ $joins[] = "JOIN {$db_prefix}entities e ON n_table.entity_guid = e.guid";
+
+ // evaluate selects
+ if (!is_array($options['selects'])) {
+ $options['selects'] = array($options['selects']);
+ }
+
+ $selects = $options['selects'];
+
+ // allow count shortcut
+ if ($options['count']) {
+ $options['metastring_calculation'] = 'count';
+ }
+
+ // For performance reasons we don't want the joins required for metadata / annotations
+ // unless we're going through one of their callbacks.
+ // this means we expect the functions passing different callbacks to pass their required joins.
+ // If we're doing a calculation
+ $custom_callback = ($options['callback'] == 'row_to_elggmetadata'
+ || $options['callback'] == 'row_to_elggannotation');
+ $is_calculation = $options['metastring_calculation'] ? true : false;
+
+ if ($custom_callback || $is_calculation) {
+ $joins[] = "JOIN {$db_prefix}metastrings n on n_table.name_id = n.id";
+ $joins[] = "JOIN {$db_prefix}metastrings v on n_table.value_id = v.id";
+
+ $selects[] = 'n.string as name';
+ $selects[] = 'v.string as value';
+ }
+
+ foreach ($joins as $i => $join) {
+ if ($join === FALSE) {
+ return FALSE;
+ } elseif (empty($join)) {
+ unset($joins[$i]);
+ }
+ }
+
+ // metastrings
+ $metastring_clauses = elgg_get_metastring_sql('n_table', $options['metastring_names'],
+ $options['metastring_values'], null, $options['metastring_ids'],
+ $options['metastring_case_sensitive']);
+
+ if ($metastring_clauses) {
+ $wheres = array_merge($wheres, $metastring_clauses['wheres']);
+ $joins = array_merge($joins, $metastring_clauses['joins']);
+ }
+
+ if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE) {
+ $selects = array_unique($selects);
+ // evalutate selects
+ $select_str = '';
+ if ($selects) {
+ foreach ($selects as $select) {
+ $select_str .= ", $select";
+ }
+ }
+
+ $query = "SELECT DISTINCT n_table.*{$select_str} FROM {$db_prefix}$type n_table";
+ } else {
+ $query = "SELECT {$options['metastring_calculation']}(v.string) as calculation FROM {$db_prefix}$type n_table";
+ }
+
+ // remove identical join clauses
+ $joins = array_unique($joins);
+
+ // add joins
+ foreach ($joins as $j) {
+ $query .= " $j ";
+ }
+
+ // add wheres
+ $query .= ' WHERE ';
+
+ foreach ($wheres as $w) {
+ $query .= " $w AND ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix('e');
+
+ // reverse order by
+ if (isset($options['reverse_order_by']) && $options['reverse_order_by']) {
+ $options['order_by'] = elgg_sql_reverse_order_by_clause($options['order_by'],
+ $defaults['order_by']);
+ }
+
+ if ($options['metastring_calculation'] === ELGG_ENTITIES_NO_VALUE) {
+ if (isset($options['group_by'])) {
+ $options['group_by'] = sanitise_string($options['group_by']);
+ $query .= " GROUP BY {$options['group_by']}";
+ }
+
+ if (isset($options['order_by']) && $options['order_by']) {
+ $options['order_by'] = sanitise_string($options['order_by']);
+ $query .= " ORDER BY {$options['order_by']}, n_table.id";
+ }
+
+ if ($options['limit']) {
+ $limit = sanitise_int($options['limit']);
+ $offset = sanitise_int($options['offset'], false);
+ $query .= " LIMIT $offset, $limit";
+ }
+
+ $dt = get_data($query, $options['callback']);
+ return $dt;
+ } else {
+ $result = get_data_row($query);
+ return $result->calculation;
+ }
+}
+
+/**
+ * Returns an array of joins and wheres for use in metastrings.
+ *
+ * @note The $pairs is reserved for name/value pairs if we want to implement those.
+ *
+ * @param string $table The annotation or metadata table name or alias
+ * @param array $names An array of names
+ * @param array $values An array of values
+ * @param array $pairs Name / value pairs. Not currently used.
+ * @param array $ids Metastring IDs
+ * @param bool $case_sensitive Should name and values be case sensitive?
+ *
+ * @return array
+ * @access private
+ */
+function elgg_get_metastring_sql($table, $names = null, $values = null,
+ $pairs = null, $ids = null, $case_sensitive = false) {
+
+ if ((!$names && $names !== 0)
+ && (!$values && $values !== 0)
+ && !$ids
+ && (!$pairs && $pairs !== 0)) {
+
+ return '';
+ }
+
+ $db_prefix = elgg_get_config('dbprefix');
+
+ // join counter for incremental joins.
+ $i = 1;
+
+ // binary forces byte-to-byte comparision of strings, making
+ // it case- and diacritical-mark- sensitive.
+ // only supported on values.
+ $binary = ($case_sensitive) ? ' BINARY ' : '';
+
+ $access = get_access_sql_suffix($table);
+
+ $return = array (
+ 'joins' => array (),
+ 'wheres' => array()
+ );
+
+ $wheres = array();
+
+ // get names wheres and joins
+ $names_where = '';
+ if ($names !== NULL) {
+ if (!is_array($names)) {
+ $names = array($names);
+ }
+
+ $sanitised_names = array();
+ foreach ($names as $name) {
+ // normalise to 0.
+ if (!$name) {
+ $name = '0';
+ }
+ $sanitised_names[] = '\'' . sanitise_string($name) . '\'';
+ }
+
+ if ($names_str = implode(',', $sanitised_names)) {
+ $return['joins'][] = "JOIN {$db_prefix}metastrings msn on $table.name_id = msn.id";
+ $names_where = "(msn.string IN ($names_str))";
+ }
+ }
+
+ // get values wheres and joins
+ $values_where = '';
+ if ($values !== NULL) {
+ if (!is_array($values)) {
+ $values = array($values);
+ }
+
+ $sanitised_values = array();
+ foreach ($values as $value) {
+ // normalize to 0
+ if (!$value) {
+ $value = 0;
+ }
+ $sanitised_values[] = '\'' . sanitise_string($value) . '\'';
+ }
+
+ if ($values_str = implode(',', $sanitised_values)) {
+ $return['joins'][] = "JOIN {$db_prefix}metastrings msv on $table.value_id = msv.id";
+ $values_where = "({$binary}msv.string IN ($values_str))";
+ }
+ }
+
+ if ($ids !== NULL) {
+ if (!is_array($ids)) {
+ $ids = array($ids);
+ }
+
+ $ids_str = implode(',', $ids);
+
+ if ($ids_str) {
+ $wheres[] = "n_table.id IN ($ids_str)";
+ }
+ }
+
+ if ($names_where && $values_where) {
+ $wheres[] = "($names_where AND $values_where AND $access)";
+ } elseif ($names_where) {
+ $wheres[] = "($names_where AND $access)";
+ } elseif ($values_where) {
+ $wheres[] = "($values_where AND $access)";
+ }
+
+ if ($where = implode(' AND ', $wheres)) {
+ $return['wheres'][] = "($where)";
+ }
+
+ return $return;
+}
+
+/**
+ * Normalizes metadata / annotation option names to their corresponding metastrings name.
+ *
+ * @param array $options An options array
+ * @since 1.8.0
+ * @return array
+ * @access private
+ */
+function elgg_normalize_metastrings_options(array $options = array()) {
+
+ // support either metastrings_type or metastring_type
+ // because I've made this mistake many times and hunting it down is a pain...
+ $type = elgg_extract('metastring_type', $options, null);
+ $type = elgg_extract('metastrings_type', $options, $type);
+
+ $options['metastring_type'] = $type;
+
+ // support annotation_ and annotations_ because they're way too easy to confuse
+ $prefixes = array('metadata_', 'annotation_', 'annotations_');
+
+ // map the metadata_* options to metastring_* options
+ $map = array(
+ 'names' => 'metastring_names',
+ 'values' => 'metastring_values',
+ 'case_sensitive' => 'metastring_case_sensitive',
+ 'owner_guids' => 'metastring_owner_guids',
+ 'created_time_lower' => 'metastring_created_time_lower',
+ 'created_time_upper' => 'metastring_created_time_upper',
+ 'calculation' => 'metastring_calculation',
+ 'ids' => 'metastring_ids'
+ );
+
+ foreach ($prefixes as $prefix) {
+ $singulars = array("{$prefix}name", "{$prefix}value", "{$prefix}owner_guid", "{$prefix}id");
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ foreach ($map as $specific => $normalized) {
+ $key = $prefix . $specific;
+ if (isset($options[$key])) {
+ $options[$normalized] = $options[$key];
+ }
+ }
+ }
+
+ return $options;
+}
+
+/**
+ * Enables or disables a metastrings-based object by its id.
+ *
+ * @warning To enable disabled metastrings you must first use
+ * {@link access_show_hidden_entities()}.
+ *
+ * @param int $id The object's ID
+ * @param string $enabled Value to set to: yes or no
+ * @param string $type The type of table to use: metadata or anntations
+ *
+ * @return bool
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_set_metastring_based_object_enabled_by_id($id, $enabled, $type) {
+ $id = (int)$id;
+ $db_prefix = elgg_get_config('dbprefix');
+
+ $object = elgg_get_metastring_based_object_from_id($id, $type);
+
+ switch($type) {
+ case 'annotation':
+ case 'annotations':
+ $table = "{$db_prefix}annotations";
+ break;
+
+ case 'metadata':
+ $table = "{$db_prefix}metadata";
+ break;
+ }
+
+ if ($enabled === 'yes' || $enabled === 1 || $enabled === true) {
+ $enabled = 'yes';
+ $event = 'enable';
+ } elseif ($enabled === 'no' || $enabled === 0 || $enabled === false) {
+ $enabled = 'no';
+ $event = 'disable';
+ } else {
+ return false;
+ }
+
+ $return = false;
+
+ if ($object) {
+ // don't set it if it's already set.
+ if ($object->enabled == $enabled) {
+ $return = false;
+ } elseif ($object->canEdit() && (elgg_trigger_event($event, $type, $object))) {
+ $return = update_data("UPDATE $table SET enabled = '$enabled' where id = $id");
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Runs metastrings-based objects found using $options through $callback
+ *
+ * @warning Unlike elgg_get_metastring_based_objects() this will not accept an
+ * empty options array!
+ *
+ * @warning This returns null on no ops.
+ *
+ * @param array $options An options array. {@See elgg_get_metastring_based_objects()}
+ * @param string $callback The callback to pass each result through
+ * @param bool $inc_offset Increment the offset? Pass false for callbacks that delete / disable
+ *
+ * @return bool|null true on success, false on failure, null if no objects are found.
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_batch_metastring_based_objects(array $options, $callback, $inc_offset = true) {
+ if (!$options || !is_array($options)) {
+ return false;
+ }
+
+ $batch = new ElggBatch('elgg_get_metastring_based_objects', $options, $callback, 50, $inc_offset);
+ return $batch->callbackResult;
+}
+
+/**
+ * Returns a singular metastring-based object by its ID.
+ *
+ * @param int $id The metastring-based object's ID
+ * @param string $type The type: annotation or metadata
+ * @return mixed
+ *
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_metastring_based_object_from_id($id, $type) {
+ $id = (int)$id;
+ if (!$id) {
+ return false;
+ }
+
+ $options = array(
+ 'metastring_type' => $type,
+ 'metastring_id' => $id
+ );
+
+ $obj = elgg_get_metastring_based_objects($options);
+
+ if ($obj && count($obj) == 1) {
+ return $obj[0];
+ }
+
+ return false;
+}
+
+/**
+ * Deletes a metastring-based object by its id
+ *
+ * @param int $id The object's ID
+ * @param string $type The object's metastring type: annotation or metadata
+ * @return bool
+ *
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_delete_metastring_based_object_by_id($id, $type) {
+ $id = (int)$id;
+ $db_prefix = elgg_get_config('dbprefix');
+
+ switch ($type) {
+ case 'annotation':
+ case 'annotations':
+ $type = 'annotations';
+ break;
+
+ case 'metadata':
+ $type = 'metadata';
+ break;
+
+ default:
+ return false;
+ }
+
+ $obj = elgg_get_metastring_based_object_from_id($id, $type);
+ $table = $db_prefix . $type;
+
+ if ($obj) {
+ // Tidy up if memcache is enabled.
+ // @todo only metadata is supported
+ if ($type == 'metadata') {
+ static $metabyname_memcache;
+ if ((!$metabyname_memcache) && (is_memcache_available())) {
+ $metabyname_memcache = new ElggMemcache('metabyname_memcache');
+ }
+
+ if ($metabyname_memcache) {
+ $metabyname_memcache->delete("{$obj->entity_guid}:{$obj->name_id}");
+ }
+ }
+
+ if (($obj->canEdit()) && (elgg_trigger_event('delete', $type, $obj))) {
+ return (bool)delete_data("DELETE from $table where id=$id");
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Entities interface helpers
+ */
+
+/**
+ * Returns options to pass to elgg_get_entities() for metastrings operations.
+ *
+ * @param string $type Metastring type: annotations or metadata
+ * @param array $options Options
+ *
+ * @return array
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_entities_get_metastrings_options($type, $options) {
+ $valid_types = array('metadata', 'annotation');
+ if (!in_array($type, $valid_types)) {
+ return FALSE;
+ }
+
+ // the options for annotations are singular (annotation_name) but the table
+ // is plural (elgg_annotations) so rewrite for the table name.
+ $n_table = ($type == 'annotation') ? 'annotations' : $type;
+
+ $singulars = array("{$type}_name", "{$type}_value",
+ "{$type}_name_value_pair", "{$type}_owner_guid");
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ $clauses = elgg_get_entity_metadata_where_sql('e', $n_table, $options["{$type}_names"],
+ $options["{$type}_values"], $options["{$type}_name_value_pairs"],
+ $options["{$type}_name_value_pairs_operator"], $options["{$type}_case_sensitive"],
+ $options["order_by_{$type}"], $options["{$type}_owner_guids"]);
+
+ if ($clauses) {
+ // merge wheres to pass to get_entities()
+ if (isset($options['wheres']) && !is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ } elseif (!isset($options['wheres'])) {
+ $options['wheres'] = array();
+ }
+
+ $options['wheres'] = array_merge($options['wheres'], $clauses['wheres']);
+
+ // merge joins to pass to get_entities()
+ if (isset($options['joins']) && !is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ } elseif (!isset($options['joins'])) {
+ $options['joins'] = array();
+ }
+
+ $options['joins'] = array_merge($options['joins'], $clauses['joins']);
+
+ if ($clauses['orders']) {
+ $order_by_metadata = implode(", ", $clauses['orders']);
+ if (isset($options['order_by']) && $options['order_by']) {
+ $options['order_by'] = "$order_by_metadata, {$options['order_by']}";
+ } else {
+ $options['order_by'] = "$order_by_metadata, e.time_created DESC";
+ }
+ }
+ }
+
+ return $options;
+}
+
+// unit testing
+elgg_register_plugin_hook_handler('unit_test', 'system', 'metastrings_test');
+
+/**
+ * Metadata unit test
+ *
+ * @param string $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of other tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function metastrings_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/metastrings.php';
+ return $value;
+}
diff --git a/engine/lib/navigation.php b/engine/lib/navigation.php
new file mode 100644
index 000000000..86624cd7c
--- /dev/null
+++ b/engine/lib/navigation.php
@@ -0,0 +1,516 @@
+<?php
+/**
+ * Elgg navigation library
+ * Functions for managing menus and other navigational elements
+ *
+ * Breadcrumbs
+ * Elgg uses a breadcrumb stack. The page handlers (controllers in MVC terms)
+ * push the breadcrumb links onto the stack. @see elgg_push_breadcrumb()
+ *
+ *
+ * Pagination
+ * Automatically handled by Elgg when using elgg_list_entities* functions.
+ * @see elgg_list_entities()
+ *
+ *
+ * Tabs
+ * @see navigation/tabs view
+ *
+ *
+ * Menus
+ * Elgg uses a single interface to manage its menus. Menu items are added with
+ * {@link elgg_register_menu_item()}. This is generally used for menus that
+ * appear only once per page. For dynamic menus (such as the hover
+ * menu for user's avatar), a plugin hook is emitted when the menu is being
+ * created. The hook is 'register', 'menu:<menu_name>'. For more details on this,
+ * @see elgg_view_menu().
+ *
+ * Menus supported by the Elgg core
+ * Standard menus:
+ * site Site navigation shown on every page.
+ * page Page menu usually shown in a sidebar. Uses Elgg's context.
+ * topbar Topbar menu shown on every page. The default has two sections.
+ * footer Like the topbar but in the footer.
+ * extras Links about content on the page. The RSS link is added to this.
+ *
+ * Dynamic menus (also called just-in-time menus):
+ * user_hover Avatar hover menu. The user entity is passed as a parameter.
+ * entity The set of links shown in the summary of an entity.
+ * river Links shown on river items.
+ * owner_block Links shown for a user or group in their owner block.
+ * filter The tab filter for content (all, mine, friends)
+ * title The buttons shown next to a content title.
+ * long-text The links shown above the input/longtext view.
+ *
+ * @package Elgg.Core
+ * @subpackage Navigation
+ */
+
+/**
+ * Register an item for an Elgg menu
+ *
+ * @warning Generally you should not use this in response to the plugin hook:
+ * 'register', 'menu:<menu_name>'. If you do, you may end up with many incorrect
+ * links on a dynamic menu.
+ *
+ * @warning A menu item's name must be unique per menu. If more than one menu
+ * item with the same name are registered, the last menu item takes priority.
+ *
+ * @see elgg_view_menu() for the plugin hooks available for modifying a menu as
+ * it is being rendered.
+ *
+ * @param string $menu_name The name of the menu: site, page, userhover,
+ * userprofile, groupprofile, or any custom menu
+ * @param mixed $menu_item A ElggMenuItem object or an array of options in format:
+ * name => STR Menu item identifier (required)
+ * text => STR Menu item display text (required)
+ * href => STR Menu item URL (required) (false for non-links.
+ * @warning If you disable the href the <a> tag will
+ * not appear, so the link_class will not apply. If you
+ * put <a> tags in manually through the 'text' option
+ * the default CSS selector .elgg-menu-$menu > li > a
+ * may affect formatting. Wrap in a <span> if it does.)
+ * contexts => ARR Page context strings
+ * section => STR Menu section identifier
+ * title => STR Menu item tooltip
+ * selected => BOOL Is this menu item currently selected
+ * parent_name => STR Identifier of the parent menu item
+ * link_class => STR A class or classes for the <a> tag
+ * item_class => STR A class or classes for the <li> tag
+ *
+ * Additional options that the view output/url takes can be
+ * passed in the array. If the 'confirm' key is passed, the
+ * menu link uses the 'output/confirmlink' view. Custom
+ * options can be added by using the 'data' key with the
+ * value being an associative array.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_register_menu_item($menu_name, $menu_item) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->menus[$menu_name])) {
+ $CONFIG->menus[$menu_name] = array();
+ }
+
+ if (is_array($menu_item)) {
+ $item = ElggMenuItem::factory($menu_item);
+ if (!$item) {
+ elgg_log("Unable to add menu item '{$menu_item['name']}' to '$menu_name' menu", 'WARNING');
+ elgg_log(print_r($menu_item, true), 'DEBUG');
+ return false;
+ }
+ } else {
+ $item = $menu_item;
+ }
+
+ $CONFIG->menus[$menu_name][] = $item;
+ return true;
+}
+
+/**
+ * Remove an item from a menu
+ *
+ * @param string $menu_name The name of the menu
+ * @param string $item_name The unique identifier for this menu item
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unregister_menu_item($menu_name, $item_name) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->menus[$menu_name])) {
+ return false;
+ }
+
+ foreach ($CONFIG->menus[$menu_name] as $index => $menu_object) {
+ if ($menu_object->getName() == $item_name) {
+ unset($CONFIG->menus[$menu_name][$index]);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Check if a menu item has been registered
+ *
+ * @param string $menu_name The name of the menu
+ * @param string $item_name The unique identifier for this menu item
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_is_menu_item_registered($menu_name, $item_name) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->menus[$menu_name])) {
+ return false;
+ }
+
+ foreach ($CONFIG->menus[$menu_name] as $index => $menu_object) {
+ if ($menu_object->getName() == $item_name) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Convenience function for registering a button to title menu
+ *
+ * The URL must be $handler/$name/$guid where $guid is the guid of the page owner.
+ * The label of the button is "$handler:$name" so that must be defined in a
+ * language file.
+ *
+ * This is used primarily to support adding an add content button
+ *
+ * @param string $handler The handler to use or null to autodetect from context
+ * @param string $name Name of the button
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_register_title_button($handler = null, $name = 'add') {
+ if (elgg_is_logged_in()) {
+
+ if (!$handler) {
+ $handler = elgg_get_context();
+ }
+
+ $owner = elgg_get_page_owner_entity();
+ if (!$owner) {
+ // no owns the page so this is probably an all site list page
+ $owner = elgg_get_logged_in_user_entity();
+ }
+ if ($owner && $owner->canWriteToContainer()) {
+ $guid = $owner->getGUID();
+ elgg_register_menu_item('title', array(
+ 'name' => $name,
+ 'href' => "$handler/$name/$guid",
+ 'text' => elgg_echo("$handler:$name"),
+ 'link_class' => 'elgg-button elgg-button-action',
+ ));
+ }
+ }
+}
+
+/**
+ * Adds a breadcrumb to the breadcrumbs stack.
+ *
+ * @param string $title The title to display
+ * @param string $link Optional. The link for the title.
+ *
+ * @return void
+ * @since 1.8.0
+ *
+ * @link http://docs.elgg.org/Tutorials/UI/Breadcrumbs
+ */
+function elgg_push_breadcrumb($title, $link = NULL) {
+ global $CONFIG;
+ if (!isset($CONFIG->breadcrumbs)) {
+ $CONFIG->breadcrumbs = array();
+ }
+
+ // avoid key collisions.
+ $CONFIG->breadcrumbs[] = array('title' => $title, 'link' => $link);
+}
+
+/**
+ * Removes last breadcrumb entry.
+ *
+ * @return array popped item.
+ * @since 1.8.0
+ * @link http://docs.elgg.org/Tutorials/UI/Breadcrumbs
+ */
+function elgg_pop_breadcrumb() {
+ global $CONFIG;
+
+ if (is_array($CONFIG->breadcrumbs)) {
+ return array_pop($CONFIG->breadcrumbs);
+ }
+
+ return FALSE;
+}
+
+/**
+ * Returns all breadcrumbs as an array of array('title' => 'Readable Title', 'link' => 'URL')
+ *
+ * @return array Breadcrumbs
+ * @since 1.8.0
+ * @link http://docs.elgg.org/Tutorials/UI/Breadcrumbs
+ */
+function elgg_get_breadcrumbs() {
+ global $CONFIG;
+
+ if (isset($CONFIG->breadcrumbs) && is_array($CONFIG->breadcrumbs)) {
+ return $CONFIG->breadcrumbs;
+ }
+
+ return array();
+}
+
+/**
+ * Set up the site menu
+ *
+ * Handles default, featured, and custom menu items
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return Menu array
+ * @param array $params
+ * @return array
+ * @access private
+ */
+function elgg_site_menu_setup($hook, $type, $return, $params) {
+
+ $featured_menu_names = elgg_get_config('site_featured_menu_names');
+ $custom_menu_items = elgg_get_config('site_custom_menu_items');
+ if ($featured_menu_names || $custom_menu_items) {
+ // we have featured or custom menu items
+
+ $registered = $return['default'];
+
+ // set up featured menu items
+ $featured = array();
+ foreach ($featured_menu_names as $name) {
+ foreach ($registered as $index => $item) {
+ if ($item->getName() == $name) {
+ $featured[] = $item;
+ unset($registered[$index]);
+ }
+ }
+ }
+
+ // add custom menu items
+ $n = 1;
+ foreach ($custom_menu_items as $title => $url) {
+ $item = new ElggMenuItem("custom$n", $title, $url);
+ $featured[] = $item;
+ $n++;
+ }
+
+ $return['default'] = $featured;
+ if (count($registered) > 0) {
+ $return['more'] = $registered;
+ }
+ } else {
+ // no featured menu items set
+ $max_display_items = 5;
+
+ // the first n are shown, rest added to more list
+ // if only one item on more menu, stick it with the rest
+ $num_menu_items = count($return['default']);
+ if ($num_menu_items > ($max_display_items + 1)) {
+ $return['more'] = array_splice($return['default'], $max_display_items);
+ }
+ }
+
+ // check if we have anything selected
+ $selected = false;
+ foreach ($return as $section_name => $section) {
+ foreach ($section as $key => $item) {
+ if ($item->getSelected()) {
+ $selected = true;
+ break 2;
+ }
+ }
+ }
+
+ if (!$selected) {
+ // nothing selected, match name to context
+ foreach ($return as $section_name => $section) {
+ foreach ($section as $key => $item) {
+ // only highlight internal links
+ if (strpos($item->getHref(), elgg_get_site_url()) === 0) {
+ if ($item->getName() == elgg_get_context()) {
+ $return[$section_name][$key]->setSelected(true);
+ break 2;
+ }
+ }
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Add the comment and like links to river actions menu
+ * @access private
+ */
+function elgg_river_menu_setup($hook, $type, $return, $params) {
+ if (elgg_is_logged_in()) {
+ $item = $params['item'];
+ $object = $item->getObjectEntity();
+ // comments and non-objects cannot be commented on or liked
+ if (!elgg_in_context('widgets') && $item->annotation_id == 0) {
+ // comments
+ if ($object->canComment()) {
+ $options = array(
+ 'name' => 'comment',
+ 'href' => "#comments-add-$object->guid",
+ 'text' => elgg_view_icon('speech-bubble'),
+ 'title' => elgg_echo('comment:this'),
+ 'rel' => 'toggle',
+ 'priority' => 50,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+ }
+
+ if (elgg_is_admin_logged_in()) {
+ $options = array(
+ 'name' => 'delete',
+ 'href' => elgg_add_action_tokens_to_url("action/river/delete?id=$item->id"),
+ 'text' => elgg_view_icon('delete'),
+ 'title' => elgg_echo('delete'),
+ 'confirm' => elgg_echo('deleteconfirm'),
+ 'priority' => 200,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Entity menu is list of links and info on any entity
+ * @access private
+ */
+function elgg_entity_menu_setup($hook, $type, $return, $params) {
+ if (elgg_in_context('widgets')) {
+ return $return;
+ }
+
+ $entity = $params['entity'];
+ $handler = elgg_extract('handler', $params, false);
+
+ // access
+ $access = elgg_view('output/access', array('entity' => $entity));
+ $options = array(
+ 'name' => 'access',
+ 'text' => $access,
+ 'href' => false,
+ 'priority' => 100,
+ );
+ $return[] = ElggMenuItem::factory($options);
+
+ if ($entity->canEdit() && $handler) {
+ // edit link
+ $options = array(
+ 'name' => 'edit',
+ 'text' => elgg_echo('edit'),
+ 'title' => elgg_echo('edit:this'),
+ 'href' => "$handler/edit/{$entity->getGUID()}",
+ 'priority' => 200,
+ );
+ $return[] = ElggMenuItem::factory($options);
+
+ // delete link
+ $options = array(
+ 'name' => 'delete',
+ 'text' => elgg_view_icon('delete'),
+ 'title' => elgg_echo('delete:this'),
+ 'href' => "action/$handler/delete?guid={$entity->getGUID()}",
+ 'confirm' => elgg_echo('deleteconfirm'),
+ 'priority' => 300,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+
+ return $return;
+}
+
+/**
+ * Widget menu is a set of widget controls
+ * @access private
+ */
+function elgg_widget_menu_setup($hook, $type, $return, $params) {
+
+ $widget = $params['entity'];
+ $show_edit = elgg_extract('show_edit', $params, true);
+
+ $collapse = array(
+ 'name' => 'collapse',
+ 'text' => ' ',
+ 'href' => "#elgg-widget-content-$widget->guid",
+ 'class' => 'elgg-widget-collapse-button',
+ 'rel' => 'toggle',
+ 'priority' => 1
+ );
+ $return[] = ElggMenuItem::factory($collapse);
+
+ if ($widget->canEdit()) {
+ $delete = array(
+ 'name' => 'delete',
+ 'text' => elgg_view_icon('delete-alt'),
+ 'title' => elgg_echo('widget:delete', array($widget->getTitle())),
+ 'href' => "action/widgets/delete?widget_guid=$widget->guid",
+ 'is_action' => true,
+ 'class' => 'elgg-widget-delete-button',
+ 'id' => "elgg-widget-delete-button-$widget->guid",
+ 'priority' => 900
+ );
+ $return[] = ElggMenuItem::factory($delete);
+
+ if ($show_edit) {
+ $edit = array(
+ 'name' => 'settings',
+ 'text' => elgg_view_icon('settings-alt'),
+ 'title' => elgg_echo('widget:edit'),
+ 'href' => "#widget-edit-$widget->guid",
+ 'class' => "elgg-widget-edit-button",
+ 'rel' => 'toggle',
+ 'priority' => 800,
+ );
+ $return[] = ElggMenuItem::factory($edit);
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Adds a delete link to "generic_comment" annotations
+ * @access private
+ */
+function elgg_annotation_menu_setup($hook, $type, $return, $params) {
+ $annotation = $params['annotation'];
+
+ if ($annotation->name == 'generic_comment' && $annotation->canEdit()) {
+ $url = elgg_http_add_url_query_elements('action/comments/delete', array(
+ 'annotation_id' => $annotation->id,
+ ));
+
+ $options = array(
+ 'name' => 'delete',
+ 'href' => $url,
+ 'text' => "<span class=\"elgg-icon elgg-icon-delete\"></span>",
+ 'confirm' => elgg_echo('deleteconfirm'),
+ 'encode_text' => false
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+
+ return $return;
+}
+
+
+/**
+ * Navigation initialization
+ * @access private
+ */
+function elgg_nav_init() {
+ elgg_register_plugin_hook_handler('prepare', 'menu:site', 'elgg_site_menu_setup');
+ elgg_register_plugin_hook_handler('register', 'menu:river', 'elgg_river_menu_setup');
+ elgg_register_plugin_hook_handler('register', 'menu:entity', 'elgg_entity_menu_setup');
+ elgg_register_plugin_hook_handler('register', 'menu:widget', 'elgg_widget_menu_setup');
+ elgg_register_plugin_hook_handler('register', 'menu:annotation', 'elgg_annotation_menu_setup');
+}
+
+elgg_register_event_handler('init', 'system', 'elgg_nav_init');
diff --git a/engine/lib/notification.php b/engine/lib/notification.php
new file mode 100644
index 000000000..9e3c075a8
--- /dev/null
+++ b/engine/lib/notification.php
@@ -0,0 +1,526 @@
+<?php
+/**
+ * Notifications
+ * This file contains classes and functions which allow plugins to register and send notifications.
+ *
+ * There are notification methods which are provided out of the box
+ * (see notification_init() ). Each method is identified by a string, e.g. "email".
+ *
+ * To register an event use register_notification_handler() and pass the method name and a
+ * handler function.
+ *
+ * To send a notification call notify() passing it the method you wish to use combined with a
+ * number of method specific addressing parameters.
+ *
+ * Catch NotificationException to trap errors.
+ *
+ * @package Elgg.Core
+ * @subpackage Notifications
+ */
+
+/** Notification handlers */
+global $NOTIFICATION_HANDLERS;
+$NOTIFICATION_HANDLERS = array();
+
+/**
+ * This function registers a handler for a given notification type (eg "email")
+ *
+ * @param string $method The method
+ * @param string $handler The handler function, in the format
+ * "handler(ElggEntity $from, ElggUser $to, $subject,
+ * $message, array $params = NULL)". This function should
+ * return false on failure, and true/a tracking message ID on success.
+ * @param array $params An associated array of other parameters for this handler
+ * defining some properties eg. supported msg length or rich text support.
+ *
+ * @return bool
+ */
+function register_notification_handler($method, $handler, $params = NULL) {
+ global $NOTIFICATION_HANDLERS;
+
+ if (is_callable($handler, true)) {
+ $NOTIFICATION_HANDLERS[$method] = new stdClass;
+
+ $NOTIFICATION_HANDLERS[$method]->handler = $handler;
+ if ($params) {
+ foreach ($params as $k => $v) {
+ $NOTIFICATION_HANDLERS[$method]->$k = $v;
+ }
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * This function unregisters a handler for a given notification type (eg "email")
+ *
+ * @param string $method The method
+ *
+ * @return void
+ * @since 1.7.1
+ */
+function unregister_notification_handler($method) {
+ global $NOTIFICATION_HANDLERS;
+
+ if (isset($NOTIFICATION_HANDLERS[$method])) {
+ unset($NOTIFICATION_HANDLERS[$method]);
+ }
+}
+
+/**
+ * Notify a user via their preferences.
+ *
+ * @param mixed $to Either a guid or an array of guid's to notify.
+ * @param int $from GUID of the sender, which may be a user, site or object.
+ * @param string $subject Message subject.
+ * @param string $message Message body.
+ * @param array $params Misc additional parameters specific to various methods.
+ * @param mixed $methods_override A string, or an array of strings specifying the delivery
+ * methods to use - or leave blank for delivery using the
+ * user's chosen delivery methods.
+ *
+ * @return array Compound array of each delivery user/delivery method's success or failure.
+ * @throws NotificationException
+ */
+function notify_user($to, $from, $subject, $message, array $params = NULL, $methods_override = "") {
+ global $NOTIFICATION_HANDLERS, $CONFIG;
+
+ // Sanitise
+ if (!is_array($to)) {
+ $to = array((int)$to);
+ }
+ $from = (int)$from;
+ //$subject = sanitise_string($subject);
+
+ // Get notification methods
+ if (($methods_override) && (!is_array($methods_override))) {
+ $methods_override = array($methods_override);
+ }
+
+ $result = array();
+
+ foreach ($to as $guid) {
+ // Results for a user are...
+ $result[$guid] = array();
+
+ if ($guid) { // Is the guid > 0?
+ // Are we overriding delivery?
+ $methods = $methods_override;
+ if (!$methods) {
+ $tmp = (array)get_user_notification_settings($guid);
+ $methods = array();
+ foreach ($tmp as $k => $v) {
+ // Add method if method is turned on for user!
+ if ($v) {
+ $methods[] = $k;
+ }
+ }
+ }
+
+ if ($methods) {
+ // Deliver
+ foreach ($methods as $method) {
+
+ if (!isset($NOTIFICATION_HANDLERS[$method])) {
+ continue;
+ }
+
+ // Extract method details from list
+ $details = $NOTIFICATION_HANDLERS[$method];
+ $handler = $details->handler;
+ /* @var callable $handler */
+
+ if ((!$NOTIFICATION_HANDLERS[$method]) || (!$handler) || (!is_callable($handler))) {
+ error_log(elgg_echo('NotificationException:NoHandlerFound', array($method)));
+ }
+
+ elgg_log("Sending message to $guid using $method");
+
+ // Trigger handler and retrieve result.
+ try {
+ $result[$guid][$method] = call_user_func($handler,
+ $from ? get_entity($from) : NULL, // From entity
+ get_entity($guid), // To entity
+ $subject, // The subject
+ $message, // Message
+ $params // Params
+ );
+ } catch (Exception $e) {
+ error_log($e->getMessage());
+ }
+
+ }
+ }
+ }
+ }
+
+ return $result;
+}
+
+/**
+ * Get the notification settings for a given user.
+ *
+ * @param int $user_guid The user id
+ *
+ * @return stdClass
+ */
+function get_user_notification_settings($user_guid = 0) {
+ $user_guid = (int)$user_guid;
+
+ if ($user_guid == 0) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ }
+
+ // @todo: holy crap, really?
+ $all_metadata = elgg_get_metadata(array(
+ 'guid' => $user_guid,
+ 'limit' => 0
+ ));
+ if ($all_metadata) {
+ $prefix = "notification:method:";
+ $return = new stdClass;
+
+ foreach ($all_metadata as $meta) {
+ $name = substr($meta->name, strlen($prefix));
+ $value = $meta->value;
+
+ if (strpos($meta->name, $prefix) === 0) {
+ $return->$name = $value;
+ }
+ }
+
+ return $return;
+ }
+
+ return false;
+}
+
+/**
+ * Set a user notification pref.
+ *
+ * @param int $user_guid The user id.
+ * @param string $method The delivery method (eg. email)
+ * @param bool $value On(true) or off(false).
+ *
+ * @return bool
+ */
+function set_user_notification_setting($user_guid, $method, $value) {
+ $user_guid = (int)$user_guid;
+ $method = sanitise_string($method);
+
+ $user = get_entity($user_guid);
+ if (!$user) {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ if (($user) && ($user instanceof ElggUser)) {
+ $prefix = "notification:method:$method";
+ $user->$prefix = $value;
+ $user->save();
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Send a notification via email.
+ *
+ * @param ElggEntity $from The from user/site/object
+ * @param ElggUser $to To which user?
+ * @param string $subject The subject of the message.
+ * @param string $message The message body
+ * @param array $params Optional parameters (none taken in this instance)
+ *
+ * @return bool
+ * @access private
+ */
+function email_notify_handler(ElggEntity $from, ElggUser $to, $subject, $message,
+array $params = NULL) {
+
+ global $CONFIG;
+
+ if (!$from) {
+ $msg = elgg_echo('NotificationException:MissingParameter', array('from'));
+ throw new NotificationException($msg);
+ }
+
+ if (!$to) {
+ $msg = elgg_echo('NotificationException:MissingParameter', array('to'));
+ throw new NotificationException($msg);
+ }
+
+ if ($to->email == "") {
+ $msg = elgg_echo('NotificationException:NoEmailAddress', array($to->guid));
+ throw new NotificationException($msg);
+ }
+
+ // To
+ $to = $to->email;
+
+ // From
+ $site = get_entity($CONFIG->site_guid);
+ // If there's an email address, use it - but only if its not from a user.
+ if (!($from instanceof ElggUser) && $from->email) {
+ $from = $from->email;
+ } else if ($site && $site->email) {
+ // Use email address of current site if we cannot use sender's email
+ $from = $site->email;
+ } else {
+ // If all else fails, use the domain of the site.
+ $from = 'noreply@' . get_site_domain($CONFIG->site_guid);
+ }
+
+ return elgg_send_email($from, $to, $subject, $message);
+}
+
+/**
+ * Send an email to any email address
+ *
+ * @param string $from Email address or string: "name <email>"
+ * @param string $to Email address or string: "name <email>"
+ * @param string $subject The subject of the message
+ * @param string $body The message body
+ * @param array $params Optional parameters (none used in this function)
+ *
+ * @return bool
+ * @since 1.7.2
+ */
+function elgg_send_email($from, $to, $subject, $body, array $params = NULL) {
+ global $CONFIG;
+
+ if (!$from) {
+ $msg = elgg_echo('NotificationException:MissingParameter', array('from'));
+ throw new NotificationException($msg);
+ }
+
+ if (!$to) {
+ $msg = elgg_echo('NotificationException:MissingParameter', array('to'));
+ throw new NotificationException($msg);
+ }
+
+ // return TRUE/FALSE to stop elgg_send_email() from sending
+ $mail_params = array(
+ 'to' => $to,
+ 'from' => $from,
+ 'subject' => $subject,
+ 'body' => $body,
+ 'params' => $params
+ );
+
+ $result = elgg_trigger_plugin_hook('email', 'system', $mail_params, NULL);
+ if ($result !== NULL) {
+ return $result;
+ }
+
+ $header_eol = "\r\n";
+ if (isset($CONFIG->broken_mta) && $CONFIG->broken_mta) {
+ // Allow non-RFC 2822 mail headers to support some broken MTAs
+ $header_eol = "\n";
+ }
+
+ // Windows is somewhat broken, so we use just address for to and from
+ if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
+ // strip name from to and from
+ if (strpos($to, '<')) {
+ preg_match('/<(.*)>/', $to, $matches);
+ $to = $matches[1];
+ }
+ if (strpos($from, '<')) {
+ preg_match('/<(.*)>/', $from, $matches);
+ $from = $matches[1];
+ }
+ }
+
+ $headers = "From: $from{$header_eol}"
+ . "Content-Type: text/plain; charset=UTF-8; format=flowed{$header_eol}"
+ . "MIME-Version: 1.0{$header_eol}"
+ . "Content-Transfer-Encoding: 8bit{$header_eol}";
+
+
+ // Sanitise subject by stripping line endings
+ $subject = preg_replace("/(\r\n|\r|\n)/", " ", $subject);
+ if (is_callable('mb_encode_mimeheader')) {
+ $subject = mb_encode_mimeheader($subject, "UTF-8", "B");
+ }
+
+ // Format message
+ $body = html_entity_decode($body, ENT_COMPAT, 'UTF-8'); // Decode any html entities
+ $body = elgg_strip_tags($body); // Strip tags from message
+ $body = preg_replace("/(\r\n|\r)/", "\n", $body); // Convert to unix line endings in body
+ $body = preg_replace("/^From/", ">From", $body); // Change lines starting with From to >From
+
+ return mail($to, $subject, wordwrap($body), $headers);
+}
+
+/**
+ * Correctly initialise notifications and register the email handler.
+ *
+ * @return void
+ * @access private
+ */
+function notification_init() {
+ // Register a notification handler for the default email method
+ register_notification_handler("email", "email_notify_handler");
+
+ // Add settings view to user settings & register action
+ elgg_extend_view('forms/account/settings', 'core/settings/account/notifications');
+
+ elgg_register_plugin_hook_handler('usersettings:save', 'user', 'notification_user_settings_save');
+}
+
+/**
+ * Includes the action to save user notifications
+ *
+ * @return void
+ * @todo why can't this call action(...)?
+ * @access private
+ */
+function notification_user_settings_save() {
+ global $CONFIG;
+ //@todo Wha??
+ include($CONFIG->path . "actions/notifications/settings/usersettings/save.php");
+}
+
+/**
+ * Register an entity type and subtype to be eligible for notifications
+ *
+ * @param string $entity_type The type of entity
+ * @param string $object_subtype Its subtype
+ * @param string $language_name Its localized notification string (eg "New blog post")
+ *
+ * @return void
+ */
+function register_notification_object($entity_type, $object_subtype, $language_name) {
+ global $CONFIG;
+
+ if ($entity_type == '') {
+ $entity_type = '__BLANK__';
+ }
+ if ($object_subtype == '') {
+ $object_subtype = '__BLANK__';
+ }
+
+ if (!isset($CONFIG->register_objects)) {
+ $CONFIG->register_objects = array();
+ }
+
+ if (!isset($CONFIG->register_objects[$entity_type])) {
+ $CONFIG->register_objects[$entity_type] = array();
+ }
+
+ $CONFIG->register_objects[$entity_type][$object_subtype] = $language_name;
+}
+
+/**
+ * Establish a 'notify' relationship between the user and a content author
+ *
+ * @param int $user_guid The GUID of the user who wants to follow a user's content
+ * @param int $author_guid The GUID of the user whose content the user wants to follow
+ *
+ * @return true|false Depending on success
+ */
+function register_notification_interest($user_guid, $author_guid) {
+ return add_entity_relationship($user_guid, 'notify', $author_guid);
+}
+
+/**
+ * Remove a 'notify' relationship between the user and a content author
+ *
+ * @param int $user_guid The GUID of the user who is following a user's content
+ * @param int $author_guid The GUID of the user whose content the user wants to unfollow
+ *
+ * @return true|false Depending on success
+ */
+function remove_notification_interest($user_guid, $author_guid) {
+ return remove_entity_relationship($user_guid, 'notify', $author_guid);
+}
+
+/**
+ * Automatically triggered notification on 'create' events that looks at registered
+ * objects and attempts to send notifications to anybody who's interested
+ *
+ * @see register_notification_object
+ *
+ * @param string $event create
+ * @param string $object_type mixed
+ * @param mixed $object The object created
+ *
+ * @return void
+ * @access private
+ */
+function object_notifications($event, $object_type, $object) {
+ // We only want to trigger notification events for ElggEntities
+ if ($object instanceof ElggEntity) {
+
+ // Get config data
+ global $CONFIG, $SESSION, $NOTIFICATION_HANDLERS;
+
+ $hookresult = elgg_trigger_plugin_hook('object:notifications', $object_type, array(
+ 'event' => $event,
+ 'object_type' => $object_type,
+ 'object' => $object,
+ ), false);
+ if ($hookresult === true) {
+ return true;
+ }
+
+ // Have we registered notifications for this type of entity?
+ $object_type = $object->getType();
+ if (empty($object_type)) {
+ $object_type = '__BLANK__';
+ }
+
+ $object_subtype = $object->getSubtype();
+ if (empty($object_subtype)) {
+ $object_subtype = '__BLANK__';
+ }
+
+ if (isset($CONFIG->register_objects[$object_type][$object_subtype])) {
+ $subject = $CONFIG->register_objects[$object_type][$object_subtype];
+ $string = $subject . ": " . $object->getURL();
+
+ // Get users interested in content from this person and notify them
+ // (Person defined by container_guid so we can also subscribe to groups if we want)
+ foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+ $interested_users = elgg_get_entities_from_relationship(array(
+ 'site_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'relationship' => 'notify' . $method,
+ 'relationship_guid' => $object->container_guid,
+ 'inverse_relationship' => TRUE,
+ 'types' => 'user',
+ 'limit' => 99999
+ ));
+
+ if ($interested_users && is_array($interested_users)) {
+ foreach ($interested_users as $user) {
+ if ($user instanceof ElggUser && !$user->isBanned()) {
+ if (($user->guid != $SESSION['user']->guid) && has_access_to_entity($object, $user)
+ && $object->access_id != ACCESS_PRIVATE) {
+ $body = elgg_trigger_plugin_hook('notify:entity:message', $object->getType(), array(
+ 'entity' => $object,
+ 'to_entity' => $user,
+ 'method' => $method), $string);
+ if (empty($body) && $body !== false) {
+ $body = $string;
+ }
+ if ($body !== false) {
+ notify_user($user->guid, $object->container_guid, $subject, $body,
+ null, array($method));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+// Register a startup event
+elgg_register_event_handler('init', 'system', 'notification_init', 0);
+elgg_register_event_handler('create', 'object', 'object_notifications');
diff --git a/engine/lib/objects.php b/engine/lib/objects.php
new file mode 100644
index 000000000..e5e8f67c4
--- /dev/null
+++ b/engine/lib/objects.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * Elgg objects
+ * Functions to manage multiple or single objects in an Elgg install
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+/**
+ * Return the object specific details of a object by a row.
+ *
+ * @param int $guid The guid to retreive
+ *
+ * @return bool
+ * @access private
+ */
+function get_object_entity_as_row($guid) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ return get_data_row("SELECT * from {$CONFIG->dbprefix}objects_entity where guid=$guid");
+}
+
+/**
+ * Create or update the extras table for a given object.
+ * Call create_entity first.
+ *
+ * @param int $guid The guid of the entity you're creating (as obtained by create_entity)
+ * @param string $title The title of the object
+ * @param string $description The object's description
+ *
+ * @return bool
+ * @access private
+ */
+function create_object_entity($guid, $title, $description) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ $title = sanitise_string($title);
+ $description = sanitise_string($description);
+
+ $row = get_entity_as_row($guid);
+
+ if ($row) {
+ // Core entities row exists and we have access to it
+ $query = "SELECT guid from {$CONFIG->dbprefix}objects_entity where guid = {$guid}";
+ if ($exists = get_data_row($query)) {
+ $query = "UPDATE {$CONFIG->dbprefix}objects_entity
+ set title='$title', description='$description' where guid=$guid";
+
+ $result = update_data($query);
+ if ($result != false) {
+ // Update succeeded, continue
+ $entity = get_entity($guid);
+ elgg_trigger_event('update', $entity->type, $entity);
+ return $guid;
+ }
+ } else {
+ // Update failed, attempt an insert.
+ $query = "INSERT into {$CONFIG->dbprefix}objects_entity
+ (guid, title, description) values ($guid, '$title','$description')";
+
+ $result = insert_data($query);
+ if ($result !== false) {
+ $entity = get_entity($guid);
+ if (elgg_trigger_event('create', $entity->type, $entity)) {
+ return $guid;
+ } else {
+ $entity->delete();
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Get the sites this object is part of
+ *
+ * @param int $object_guid The object's GUID
+ * @param int $limit Number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return false|array On success, an array of ElggSites
+ */
+function get_object_sites($object_guid, $limit = 10, $offset = 0) {
+ $object_guid = (int)$object_guid;
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => 'member_of_site',
+ 'relationship_guid' => $object_guid,
+ 'types' => 'site',
+ 'limit' => $limit,
+ 'offset' => $offset
+ ));
+}
+
+/**
+ * Runs unit tests for ElggObject
+ *
+ * @param sting $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function objects_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = "{$CONFIG->path}engine/tests/objects/objects.php";
+ return $value;
+}
+
+elgg_register_event_handler('init', 'system', 'objects_init', 0);
+elgg_register_plugin_hook_handler('unit_test', 'system', 'objects_test');
diff --git a/engine/lib/opendd.php b/engine/lib/opendd.php
new file mode 100644
index 000000000..f00ea6aab
--- /dev/null
+++ b/engine/lib/opendd.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * OpenDD PHP Library.
+ *
+ * @package Elgg.Core
+ * @subpackage ODD
+ * @version 0.4
+ */
+
+/**
+ * Attempt to construct an ODD object out of a XmlElement or sub-elements.
+ *
+ * @param XmlElement $element The element(s)
+ *
+ * @return mixed An ODD object if the element can be handled, or false.
+ * @access private
+ */
+function ODD_factory (XmlElement $element) {
+ $name = $element->name;
+ $odd = false;
+
+ switch ($name) {
+ case 'entity' :
+ $odd = new ODDEntity("", "", "");
+ break;
+ case 'metadata' :
+ $odd = new ODDMetaData("", "", "", "");
+ break;
+ case 'relationship' :
+ $odd = new ODDRelationship("", "", "");
+ break;
+ }
+
+ // Now populate values
+ if ($odd) {
+ // Attributes
+ foreach ($element->attributes as $k => $v) {
+ $odd->setAttribute($k, $v);
+ }
+
+ // Body
+ $body = $element->content;
+ $a = stripos($body, "<![CDATA");
+ $b = strripos($body, "]]>");
+ if (($body) && ($a !== false) && ($b !== false)) {
+ $body = substr($body, $a + 8, $b - ($a + 8));
+ }
+
+ $odd->setBody($body);
+ }
+
+ return $odd;
+}
+
+/**
+ * Import an ODD document.
+ *
+ * @param string $xml The XML ODD.
+ *
+ * @return ODDDocument
+ * @access private
+ */
+function ODD_Import($xml) {
+ // Parse XML to an array
+ $elements = xml_to_object($xml);
+
+ // Sanity check 1, was this actually XML?
+ if ((!$elements) || (!$elements->children)) {
+ return false;
+ }
+
+ // Create ODDDocument
+ $document = new ODDDocument();
+
+ // Itterate through array of elements and construct ODD document
+ $cnt = 0;
+
+ foreach ($elements->children as $child) {
+ $odd = ODD_factory($child);
+
+ if ($odd) {
+ $document->addElement($odd);
+ $cnt++;
+ }
+ }
+
+ // Check that we actually found something
+ if ($cnt == 0) {
+ return false;
+ }
+
+ return $document;
+}
+
+/**
+ * Export an ODD Document.
+ *
+ * @param ODDDocument $document The Document.
+ *
+ * @return string
+ * @access private
+ */
+function ODD_Export(ODDDocument $document) {
+ return "$document";
+}
diff --git a/engine/lib/output.php b/engine/lib/output.php
new file mode 100644
index 000000000..9295f2173
--- /dev/null
+++ b/engine/lib/output.php
@@ -0,0 +1,448 @@
+<?php
+/**
+ * Output functions
+ * Processing text for output such as pulling out URLs and extracting excerpts
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+/**
+ * Takes a string and turns any URLs into formatted links
+ *
+ * @param string $text The input string
+ *
+ * @return string The output stirng with formatted links
+ **/
+function parse_urls($text) {
+ // @todo this causes problems with <attr = "val">
+ // must be in <attr="val"> format (no space).
+ // By default htmlawed rewrites tags to this format.
+ // if PHP supported conditional negative lookbehinds we could use this:
+ // $r = preg_replace_callback('/(?<!=)(?<![ ])?(?<!["\'])((ht|f)tps?:\/\/[^\s\r\n\t<>"\'\!\(\),]+)/i',
+ //
+ // we can put , in the list of excluded char but need to keep . because of domain names.
+ // it is removed in the callback.
+ $r = preg_replace_callback('/(?<!=)(?<!["\'])((ht|f)tps?:\/\/[^\s\r\n\t<>"\'\!\(\),]+)/i',
+ create_function(
+ '$matches',
+ '
+ $url = $matches[1];
+ $period = \'\';
+ if (substr($url, -1, 1) == \'.\') {
+ $period = \'.\';
+ $url = trim($url, \'.\');
+ }
+ $urltext = str_replace("/", "/<wbr />", $url);
+ return "<a href=\"$url\">$urltext</a>$period";
+ '
+ ), $text);
+
+ return $r;
+}
+
+/**
+ * Create paragraphs from text with line spacing
+ *
+ * @param string $pee The string
+ * @deprecated Use elgg_autop instead
+ * @todo Add deprecation warning in 1.9
+ *
+ * @return string
+ **/
+function autop($pee) {
+ return elgg_autop($pee);
+}
+
+/**
+ * Create paragraphs from text with line spacing
+ *
+ * @param string $string The string
+ *
+ * @return string
+ **/
+function elgg_autop($string) {
+ return ElggAutoP::getInstance()->process($string);
+}
+
+/**
+ * Returns an excerpt.
+ * Will return up to n chars stopping at the nearest space.
+ * If no spaces are found (like in Japanese) will crop off at the
+ * n char mark. Adds ... if any text was chopped.
+ *
+ * @param string $text The full text to excerpt
+ * @param int $num_chars Return a string up to $num_chars long
+ *
+ * @return string
+ * @since 1.7.2
+ */
+function elgg_get_excerpt($text, $num_chars = 250) {
+ $text = trim(elgg_strip_tags($text));
+ $string_length = elgg_strlen($text);
+
+ if ($string_length <= $num_chars) {
+ return $text;
+ }
+
+ // handle cases
+ $excerpt = elgg_substr($text, 0, $num_chars);
+ $space = elgg_strrpos($excerpt, ' ', 0);
+
+ // don't crop if can't find a space.
+ if ($space === FALSE) {
+ $space = $num_chars;
+ }
+ $excerpt = trim(elgg_substr($excerpt, 0, $space));
+
+ if ($string_length != elgg_strlen($excerpt)) {
+ $excerpt .= '...';
+ }
+
+ return $excerpt;
+}
+
+/**
+ * Handles formatting of ampersands in urls
+ *
+ * @param string $url The URL
+ *
+ * @return string
+ * @since 1.7.1
+ */
+function elgg_format_url($url) {
+ return preg_replace('/&(?!amp;)/', '&amp;', $url);
+}
+
+/**
+ * Converts an associative array into a string of well-formed attributes
+ *
+ * @note usually for HTML, but could be useful for XML too...
+ *
+ * @param array $attrs An associative array of attr => val pairs
+ *
+ * @return string HTML attributes to be inserted into a tag (e.g., <tag $attrs>)
+ */
+function elgg_format_attributes(array $attrs) {
+ $attrs = elgg_clean_vars($attrs);
+ $attributes = array();
+
+ if (isset($attrs['js'])) {
+ //@todo deprecated notice?
+
+ if (!empty($attrs['js'])) {
+ $attributes[] = $attrs['js'];
+ }
+
+ unset($attrs['js']);
+ }
+
+ foreach ($attrs as $attr => $val) {
+ $attr = strtolower($attr);
+
+ if ($val === TRUE) {
+ $val = $attr; //e.g. checked => TRUE ==> checked="checked"
+ }
+
+ // ignore $vars['entity'] => ElggEntity stuff
+ if ($val !== NULL && $val !== false && (is_array($val) || !is_object($val))) {
+
+ // allow $vars['class'] => array('one', 'two');
+ // @todo what about $vars['style']? Needs to be semi-colon separated...
+ if (is_array($val)) {
+ $val = implode(' ', $val);
+ }
+
+ $val = htmlspecialchars($val, ENT_QUOTES, 'UTF-8', false);
+ $attributes[] = "$attr=\"$val\"";
+ }
+ }
+
+ return implode(' ', $attributes);
+}
+
+/**
+ * Preps an associative array for use in {@link elgg_format_attributes()}.
+ *
+ * Removes all the junk that {@link elgg_view()} puts into $vars.
+ * Maintains backward compatibility with attributes like 'internalname' and 'internalid'
+ *
+ * @note This function is called automatically by elgg_format_attributes(). No need to
+ * call it yourself before using elgg_format_attributes().
+ *
+ * @param array $vars The raw $vars array with all it's dirtiness (config, url, etc.)
+ *
+ * @return array The array, ready to be used in elgg_format_attributes().
+ * @access private
+ */
+function elgg_clean_vars(array $vars = array()) {
+ unset($vars['config']);
+ unset($vars['url']);
+ unset($vars['user']);
+
+ // backwards compatibility code
+ if (isset($vars['internalname'])) {
+ $vars['name'] = $vars['internalname'];
+ unset($vars['internalname']);
+ }
+
+ if (isset($vars['internalid'])) {
+ $vars['id'] = $vars['internalid'];
+ unset($vars['internalid']);
+ }
+
+ if (isset($vars['__ignoreInternalid'])) {
+ unset($vars['__ignoreInternalid']);
+ }
+
+ if (isset($vars['__ignoreInternalname'])) {
+ unset($vars['__ignoreInternalname']);
+ }
+
+ return $vars;
+}
+
+/**
+ * Converts shorthand urls to absolute urls.
+ *
+ * If the url is already absolute or protocol-relative, no change is made.
+ *
+ * @example
+ * elgg_normalize_url(''); // 'http://my.site.com/'
+ * elgg_normalize_url('dashboard'); // 'http://my.site.com/dashboard'
+ * elgg_normalize_url('http://google.com/'); // no change
+ * elgg_normalize_url('//google.com/'); // no change
+ *
+ * @param string $url The URL to normalize
+ *
+ * @return string The absolute url
+ */
+function elgg_normalize_url($url) {
+ // see https://bugs.php.net/bug.php?id=51192
+ // from the bookmarks save action.
+ $php_5_2_13_and_below = version_compare(PHP_VERSION, '5.2.14', '<');
+ $php_5_3_0_to_5_3_2 = version_compare(PHP_VERSION, '5.3.0', '>=') &&
+ version_compare(PHP_VERSION, '5.3.3', '<');
+
+ $validated = false;
+ if ($php_5_2_13_and_below || $php_5_3_0_to_5_3_2) {
+ $tmp_address = str_replace("-", "", $url);
+ $validated = filter_var($tmp_address, FILTER_VALIDATE_URL);
+ } else {
+ $validated = filter_var($url, FILTER_VALIDATE_URL);
+ }
+
+ // work around for handling absoluate IRIs (RFC 3987) - see #4190
+ if (!$validated && (strpos($url, 'http:') === 0) || (strpos($url, 'https:') === 0)) {
+ $validated = true;
+ }
+
+ if ($validated) {
+ // all normal URLs including mailto:
+ return $url;
+
+ } elseif (preg_match("#^(\#|\?|//)#i", $url)) {
+ // '//example.com' (Shortcut for protocol.)
+ // '?query=test', #target
+ return $url;
+
+ } elseif (stripos($url, 'javascript:') === 0 || stripos($url, 'mailto:') === 0) {
+ // 'javascript:' and 'mailto:'
+ // Not covered in FILTER_VALIDATE_URL
+ return $url;
+
+ } elseif (preg_match("#^[^/]*\.php(\?.*)?$#i", $url)) {
+ // 'install.php', 'install.php?step=step'
+ return elgg_get_site_url() . $url;
+
+ } elseif (preg_match("#^[^/]*\.#i", $url)) {
+ // 'example.com', 'example.com/subpage'
+ return "http://$url";
+
+ } else {
+ // 'page/handler', 'mod/plugin/file.php'
+
+ // trim off any leading / because the site URL is stored
+ // with a trailing /
+ return elgg_get_site_url() . ltrim($url, '/');
+ }
+}
+
+/**
+ * When given a title, returns a version suitable for inclusion in a URL
+ *
+ * @param string $title The title
+ *
+ * @return string The optimised title
+ * @since 1.7.2
+ */
+function elgg_get_friendly_title($title) {
+
+ // return a URL friendly title to short circuit normal title formatting
+ $params = array('title' => $title);
+ $result = elgg_trigger_plugin_hook('format', 'friendly:title', $params, NULL);
+ if ($result) {
+ return $result;
+ }
+
+ // handle some special cases
+ $title = str_replace('&amp;', 'and', $title);
+ // quotes and angle brackets stored in the database as html encoded
+ $title = htmlspecialchars_decode($title);
+
+ $title = ElggTranslit::urlize($title);
+
+ return $title;
+}
+
+/**
+ * Formats a UNIX timestamp in a friendly way (eg "less than a minute ago")
+ *
+ * @see elgg_view_friendly_time()
+ *
+ * @param int $time A UNIX epoch timestamp
+ *
+ * @return string The friendly time string
+ * @since 1.7.2
+ */
+function elgg_get_friendly_time($time) {
+
+ // return a time string to short circuit normal time formatting
+ $params = array('time' => $time);
+ $result = elgg_trigger_plugin_hook('format', 'friendly:time', $params, NULL);
+ if ($result) {
+ return $result;
+ }
+
+ $diff = time() - (int)$time;
+
+ $minute = 60;
+ $hour = $minute * 60;
+ $day = $hour * 24;
+
+ if ($diff < $minute) {
+ return elgg_echo("friendlytime:justnow");
+ } else if ($diff < $hour) {
+ $diff = round($diff / $minute);
+ if ($diff == 0) {
+ $diff = 1;
+ }
+
+ if ($diff > 1) {
+ return elgg_echo("friendlytime:minutes", array($diff));
+ } else {
+ return elgg_echo("friendlytime:minutes:singular", array($diff));
+ }
+ } else if ($diff < $day) {
+ $diff = round($diff / $hour);
+ if ($diff == 0) {
+ $diff = 1;
+ }
+
+ if ($diff > 1) {
+ return elgg_echo("friendlytime:hours", array($diff));
+ } else {
+ return elgg_echo("friendlytime:hours:singular", array($diff));
+ }
+ } else {
+ $diff = round($diff / $day);
+ if ($diff == 0) {
+ $diff = 1;
+ }
+
+ if ($diff > 1) {
+ return elgg_echo("friendlytime:days", array($diff));
+ } else {
+ return elgg_echo("friendlytime:days:singular", array($diff));
+ }
+ }
+}
+
+/**
+ * Strip tags and offer plugins the chance.
+ * Plugins register for output:strip_tags plugin hook.
+ * Original string included in $params['original_string']
+ *
+ * @param string $string Formatted string
+ *
+ * @return string String run through strip_tags() and any plugin hooks.
+ */
+function elgg_strip_tags($string) {
+ $params['original_string'] = $string;
+
+ $string = strip_tags($string);
+ $string = elgg_trigger_plugin_hook('format', 'strip_tags', $params, $string);
+
+ return $string;
+}
+
+/**
+ * Apply html_entity_decode() to a string while re-entitising HTML
+ * special char entities to prevent them from being decoded back to their
+ * unsafe original forms.
+ *
+ * This relies on html_entity_decode() not translating entities when
+ * doing so leaves behind another entity, e.g. &amp;gt; if decoded would
+ * create &gt; which is another entity itself. This seems to escape the
+ * usual behaviour where any two paired entities creating a HTML tag are
+ * usually decoded, i.e. a lone &gt; is not decoded, but &lt;foo&gt; would
+ * be decoded to <foo> since it creates a full tag.
+ *
+ * Note: This function is poorly explained in the manual - which is really
+ * bad given its potential for misuse on user input already escaped elsewhere.
+ * Stackoverflow is littered with advice to use this function in the precise
+ * way that would lead to user input being capable of injecting arbitrary HTML.
+ *
+ * @param string $string
+ *
+ * @return string
+ *
+ * @author Pádraic Brady
+ * @copyright Copyright (c) 2010 Pádraic Brady (http://blog.astrumfutura.com)
+ * @license Released under dual-license GPL2/MIT by explicit permission of Pádraic Brady
+ *
+ * @access private
+ */
+function _elgg_html_decode($string) {
+ $string = str_replace(
+ array('&gt;', '&lt;', '&amp;', '&quot;', '&#039;'),
+ array('&amp;gt;', '&amp;lt;', '&amp;amp;', '&amp;quot;', '&amp;#039;'),
+ $string
+ );
+ $string = html_entity_decode($string, ENT_NOQUOTES, 'UTF-8');
+ $string = str_replace(
+ array('&amp;gt;', '&amp;lt;', '&amp;amp;', '&amp;quot;', '&amp;#039;'),
+ array('&gt;', '&lt;', '&amp;', '&quot;', '&#039;'),
+ $string
+ );
+ return $string;
+}
+
+/**
+ * Unit tests for Output
+ *
+ * @param sting $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function output_unit_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/output.php';
+ return $value;
+}
+
+/**
+ * Initialise the Output subsystem.
+ *
+ * @return void
+ * @access private
+ */
+function output_init() {
+ elgg_register_plugin_hook_handler('unit_test', 'system', 'output_unit_test');
+}
+
+elgg_register_event_handler('init', 'system', 'output_init');
diff --git a/engine/lib/pagehandler.php b/engine/lib/pagehandler.php
new file mode 100644
index 000000000..0cf99b6fe
--- /dev/null
+++ b/engine/lib/pagehandler.php
@@ -0,0 +1,150 @@
+<?php
+/**
+ * Elgg page handler functions
+ *
+ * @package Elgg.Core
+ * @subpackage Routing
+ */
+
+/**
+ * Routes the request to a registered page handler
+ *
+ * This function sets the context based on the handler name (first segment of the
+ * URL). It also triggers a plugin hook 'route', $handler so that plugins can
+ * modify the routing or handle a request.
+ *
+ * @param string $handler The name of the handler type (eg 'blog')
+ * @param array $page The parameters to the page, as an array (exploded by '/' slashes)
+ *
+ * @return bool
+ * @access private
+ */
+function page_handler($handler, $page) {
+ global $CONFIG;
+
+ elgg_set_context($handler);
+
+ $page = explode('/', $page);
+ // remove empty array element when page url ends in a / (see #1480)
+ if ($page[count($page) - 1] === '') {
+ array_pop($page);
+ }
+
+ // return false to stop processing the request (because you handled it)
+ // return a new $request array if you want to route the request differently
+ $request = array(
+ 'handler' => $handler,
+ 'segments' => $page,
+ );
+ $request = elgg_trigger_plugin_hook('route', $handler, null, $request);
+ if ($request === false) {
+ return true;
+ }
+
+ $handler = $request['handler'];
+ $page = $request['segments'];
+
+ $result = false;
+ if (isset($CONFIG->pagehandler)
+ && !empty($handler)
+ && isset($CONFIG->pagehandler[$handler])
+ && is_callable($CONFIG->pagehandler[$handler])) {
+ $function = $CONFIG->pagehandler[$handler];
+ $result = call_user_func($function, $page, $handler);
+ }
+
+ return $result || headers_sent();
+}
+
+/**
+ * Registers a page handler for a particular identifier
+ *
+ * For example, you can register a function called 'blog_page_handler' for handler type 'blog'
+ * For all URLs http://yoururl/blog/*, the blog_page_handler() function will be called.
+ * The part of the URL marked with * above will be exploded on '/' characters and passed as an
+ * array to that function.
+ * For example, the URL http://yoururl/blog/username/friends/ would result in the call:
+ * blog_page_handler(array('username','friends'), blog);
+ *
+ * A request to register a page handler with the same identifier as previously registered
+ * handler will replace the previous one.
+ *
+ * The context is set to the page handler identifier before the registered
+ * page handler function is called. For the above example, the context is set to 'blog'.
+ *
+ * Page handlers should return true to indicate that they handled the request.
+ * Requests not handled are forwarded to the front page with a reason of 404.
+ * Plugins can register for the 'forward', '404' plugin hook. @see forward()
+ *
+ * @param string $handler The page type to handle
+ * @param string $function Your function name
+ *
+ * @return bool Depending on success
+ */
+function elgg_register_page_handler($handler, $function) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->pagehandler)) {
+ $CONFIG->pagehandler = array();
+ }
+ if (is_callable($function, true)) {
+ $CONFIG->pagehandler[$handler] = $function;
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Unregister a page handler for an identifier
+ *
+ * Note: to replace a page handler, call elgg_register_page_handler()
+ *
+ * @param string $handler The page type identifier
+ *
+ * @since 1.7.2
+ * @return void
+ */
+function elgg_unregister_page_handler($handler) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->pagehandler)) {
+ return;
+ }
+
+ unset($CONFIG->pagehandler[$handler]);
+}
+
+/**
+ * Serve an error page
+ *
+ * @todo not sending status codes yet
+ *
+ * @param string $hook The name of the hook
+ * @param string $type The type of the hook
+ * @param bool $result The current value of the hook
+ * @param array $params Parameters related to the hook
+ * @return void
+ */
+function elgg_error_page_handler($hook, $type, $result, $params) {
+ if (elgg_view_exists("errors/$type")) {
+ $content = elgg_view("errors/$type", $params);
+ } else {
+ $content = elgg_view("errors/default", $params);
+ }
+ $body = elgg_view_layout('error', array('content' => $content));
+ echo elgg_view_page('', $body, 'error');
+ exit;
+}
+
+/**
+ * Initializes the page handler/routing system
+ *
+ * @return void
+ * @access private
+ */
+function page_handler_init() {
+ elgg_register_plugin_hook_handler('forward', '404', 'elgg_error_page_handler');
+}
+
+elgg_register_event_handler('init', 'system', 'page_handler_init');
diff --git a/engine/lib/pageowner.php b/engine/lib/pageowner.php
new file mode 100644
index 000000000..94765feee
--- /dev/null
+++ b/engine/lib/pageowner.php
@@ -0,0 +1,294 @@
+<?php
+/**
+ * Elgg page owner library
+ * Contains functions for managing page ownership and context
+ *
+ * @package Elgg.Core
+ * @subpackage PageOwner
+ */
+
+/**
+ * Gets the guid of the entity that owns the current page.
+ *
+ * @param int $guid Optional parameter used by elgg_set_page_owner_guid().
+ *
+ * @return int The current page owner guid (0 if none).
+ * @since 1.8.0
+ */
+function elgg_get_page_owner_guid($guid = 0) {
+ static $page_owner_guid;
+
+ if ($guid) {
+ $page_owner_guid = $guid;
+ }
+
+ if (isset($page_owner_guid)) {
+ return $page_owner_guid;
+ }
+
+ // return guid of page owner entity
+ $guid = elgg_trigger_plugin_hook('page_owner', 'system', NULL, 0);
+
+ $page_owner_guid = $guid;
+
+ return $guid;
+}
+
+/**
+ * Gets the owner entity for the current page.
+ *
+ * @note Access is disabled when getting the page owner entity.
+ *
+ * @return ElggEntity|false The current page owner or false if none.
+ *
+ * @since 1.8.0
+ */
+function elgg_get_page_owner_entity() {
+ $guid = elgg_get_page_owner_guid();
+ if ($guid > 0) {
+ $ia = elgg_set_ignore_access(true);
+ $owner = get_entity($guid);
+ elgg_set_ignore_access($ia);
+
+ return $owner;
+ }
+
+ return false;
+}
+
+/**
+ * Set the guid of the entity that owns this page
+ *
+ * @param int $guid The guid of the page owner
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_set_page_owner_guid($guid) {
+ elgg_get_page_owner_guid($guid);
+}
+
+/**
+ * Sets the page owner based on request
+ *
+ * Tries to figure out the page owner by looking at the URL or a request
+ * parameter. The request parameters used are 'username' and 'owner_guid'. If
+ * the page request is going through the page handling system, this function
+ * attempts to figure out the owner if the url fits the patterns of:
+ * <handler>/owner/<username>
+ * <handler>/friends/<username>
+ * <handler>/view/<entity guid>
+ * <handler>/add/<container guid>
+ * <handler>/edit/<entity guid>
+ * <handler>/group/<group guid>
+ *
+ * @note Access is disabled while finding the page owner for the group gatekeeper functions.
+ *
+ *
+ * @param string $hook 'page_owner'
+ * @param string $entity_type 'system'
+ * @param int $returnvalue Previous function's return value
+ * @param array $params no parameters
+ *
+ * @return int GUID
+ * @access private
+ */
+function default_page_owner_handler($hook, $entity_type, $returnvalue, $params) {
+
+ if ($returnvalue) {
+ return $returnvalue;
+ }
+
+ $ia = elgg_set_ignore_access(true);
+
+ $username = get_input("username");
+ if ($username) {
+ // @todo using a username of group:<guid> is deprecated
+ if (substr_count($username, 'group:')) {
+ preg_match('/group\:([0-9]+)/i', $username, $matches);
+ $guid = $matches[1];
+ if ($entity = get_entity($guid)) {
+ elgg_set_ignore_access($ia);
+ return $entity->getGUID();
+ }
+ }
+
+ if ($user = get_user_by_username($username)) {
+ return $user->getGUID();
+ }
+ }
+
+ $owner = get_input("owner_guid");
+ if ($owner) {
+ if ($user = get_entity($owner)) {
+ elgg_set_ignore_access($ia);
+ return $user->getGUID();
+ }
+ }
+
+ // ignore root and query
+ $uri = current_page_url();
+ $path = str_replace(elgg_get_site_url(), '', $uri);
+ $path = trim($path, "/");
+ if (strpos($path, "?")) {
+ $path = substr($path, 0, strpos($path, "?"));
+ }
+
+ // @todo feels hacky
+ if (get_input('page', FALSE)) {
+ $segments = explode('/', $path);
+ if (isset($segments[1]) && isset($segments[2])) {
+ switch ($segments[1]) {
+ case 'owner':
+ case 'friends':
+ $user = get_user_by_username($segments[2]);
+ if ($user) {
+ elgg_set_ignore_access($ia);
+ return $user->getGUID();
+ }
+ break;
+ case 'view':
+ case 'edit':
+ $entity = get_entity($segments[2]);
+ if ($entity) {
+ elgg_set_ignore_access($ia);
+ return $entity->getContainerGUID();
+ }
+ break;
+ case 'add':
+ case 'group':
+ $entity = get_entity($segments[2]);
+ if ($entity) {
+ elgg_set_ignore_access($ia);
+ return $entity->getGUID();
+ }
+ break;
+ }
+ }
+ }
+
+ elgg_set_ignore_access($ia);
+}
+
+/**
+ * Sets the page context
+ *
+ * Views can modify their output based on the local context. You may want to
+ * display a list of blogs on a blog page or in a small widget. The rendered
+ * output could be different for those two contexts ('blog' vs 'widget').
+ *
+ * Pages that pass through the page handling system set the context to the
+ * first string after the root url. Example: http://example.org/elgg/bookmarks/
+ * results in the initial context being set to 'bookmarks'.
+ *
+ * The context is a stack so that for a widget on a profile, the context stack
+ * may contain first 'profile' and then 'widget'.
+ *
+ * If no context was been set, the default context returned is 'main'.
+ *
+ * @warning The context is not available until the page_handler runs (after
+ * the 'init, system' event processing has completed).
+ *
+ * @param string $context The context of the page
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_set_context($context) {
+ global $CONFIG;
+
+ $context = trim($context);
+
+ if (empty($context)) {
+ return false;
+ }
+
+ $context = strtolower($context);
+
+ array_pop($CONFIG->context);
+ array_push($CONFIG->context, $context);
+
+ return true;
+}
+
+/**
+ * Get the current context.
+ *
+ * Since context is a stack, this is equivalent to a peek.
+ *
+ * @return string|NULL
+ * @since 1.8.0
+ */
+function elgg_get_context() {
+ global $CONFIG;
+
+ if (!$CONFIG->context) {
+ return null;
+ }
+
+ return $CONFIG->context[count($CONFIG->context) - 1];
+}
+
+/**
+ * Push a context onto the top of the stack
+ *
+ * @param string $context The context string to add to the context stack
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_push_context($context) {
+ global $CONFIG;
+
+ array_push($CONFIG->context, $context);
+}
+
+/**
+ * Removes and returns the top context string from the stack
+ *
+ * @return string|NULL
+ * @since 1.8.0
+ */
+function elgg_pop_context() {
+ global $CONFIG;
+
+ return array_pop($CONFIG->context);
+}
+
+/**
+ * Check if this context exists anywhere in the stack
+ *
+ * This is useful for situations with more than one element in the stack. For
+ * example, a widget has a context of 'widget'. If a widget view needs to render
+ * itself differently based on being on the dashboard or profile pages, it
+ * can check the stack.
+ *
+ * @param string $context The context string to check for
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_in_context($context) {
+ global $CONFIG;
+
+ return in_array($context, $CONFIG->context);
+}
+
+/**
+ * Initializes the page owner functions
+ *
+ * @note This is on the 'boot, system' event so that the context is set up quickly.
+ *
+ * @return void
+ * @access private
+ */
+function page_owner_boot() {
+
+ elgg_register_plugin_hook_handler('page_owner', 'system', 'default_page_owner_handler');
+
+ // Bootstrap the context stack by setting its first entry to the handler.
+ // This is the first segment of the URL and the handler is set by the rewrite rules.
+ // @todo this does not work for actions
+ $handler = get_input('handler', FALSE);
+ if ($handler) {
+ elgg_set_context($handler);
+ }
+}
+
+elgg_register_event_handler('boot', 'system', 'page_owner_boot');
diff --git a/engine/lib/pam.php b/engine/lib/pam.php
new file mode 100644
index 000000000..1c9c3bfe1
--- /dev/null
+++ b/engine/lib/pam.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Elgg Simple PAM library
+ * Contains functions for managing authentication.
+ * This is not a full implementation of PAM. It supports a single facility
+ * (authentication) and allows multiple policies (user authentication is the
+ * default). There are two control flags possible for each module: sufficient
+ * or required. The entire chain for a policy is processed (or until a
+ * required module fails). A module fails by returning false or throwing an
+ * exception. The order that modules are processed is determined by the order
+ * they are registered. For an example of a PAM, see pam_auth_userpass() in
+ * sessions.php.
+ *
+ * For more information on PAMs see:
+ * http://www.freebsd.org/doc/en/articles/pam/index.html
+ *
+ * @see ElggPAM
+ *
+ * @package Elgg.Core
+ * @subpackage Authentication.PAM
+ */
+
+global $_PAM_HANDLERS;
+$_PAM_HANDLERS = array();
+
+/**
+ * Register a PAM handler.
+ *
+ * A PAM handler should return true if the authentication attempt passed. For a
+ * failure, return false or throw an exception. Returning nothing indicates that
+ * the handler wants to be skipped.
+ *
+ * Note, $handler must be string callback (not an array/Closure).
+ *
+ * @param string $handler Callable global handler function in the format ()
+ * pam_handler($credentials = NULL);
+ * @param string $importance The importance - "sufficient" (default) or "required"
+ * @param string $policy The policy type, default is "user"
+ *
+ * @return bool
+ */
+function register_pam_handler($handler, $importance = "sufficient", $policy = "user") {
+ global $_PAM_HANDLERS;
+
+ // setup array for this type of pam if not already set
+ if (!isset($_PAM_HANDLERS[$policy])) {
+ $_PAM_HANDLERS[$policy] = array();
+ }
+
+ // @todo remove requirement that $handle be a global function
+ if (is_string($handler) && is_callable($handler, true)) {
+ $_PAM_HANDLERS[$policy][$handler] = new stdClass;
+
+ $_PAM_HANDLERS[$policy][$handler]->handler = $handler;
+ $_PAM_HANDLERS[$policy][$handler]->importance = strtolower($importance);
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Unregisters a PAM handler.
+ *
+ * @param string $handler The PAM handler function name
+ * @param string $policy The policy type, default is "user"
+ *
+ * @return void
+ * @since 1.7.0
+ */
+function unregister_pam_handler($handler, $policy = "user") {
+ global $_PAM_HANDLERS;
+
+ unset($_PAM_HANDLERS[$policy][$handler]);
+}
diff --git a/engine/lib/plugins.php b/engine/lib/plugins.php
new file mode 100644
index 000000000..94aff277e
--- /dev/null
+++ b/engine/lib/plugins.php
@@ -0,0 +1,1129 @@
+<?php
+/**
+ * Elgg plugins library
+ * Contains functions for managing plugins
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ */
+
+/**
+ * Tells ElggPlugin::start() to include the start.php file.
+ */
+define('ELGG_PLUGIN_INCLUDE_START', 1);
+
+/**
+ * Tells ElggPlugin::start() to automatically register the plugin's views.
+ */
+define('ELGG_PLUGIN_REGISTER_VIEWS', 2);
+
+/**
+ * Tells ElggPlugin::start() to automatically register the plugin's languages.
+ */
+define('ELGG_PLUGIN_REGISTER_LANGUAGES', 4);
+
+/**
+ * Tells ElggPlugin::start() to automatically register the plugin's classes.
+ */
+define('ELGG_PLUGIN_REGISTER_CLASSES', 8);
+
+/**
+ * Prefix for plugin setting names
+ *
+ * @todo Can't namespace these because many plugins directly call
+ * private settings via $entity->$name.
+ */
+//define('ELGG_PLUGIN_SETTING_PREFIX', 'plugin:setting:');
+
+/**
+ * Prefix for plugin user setting names
+ */
+define('ELGG_PLUGIN_USER_SETTING_PREFIX', 'plugin:user_setting:');
+
+/**
+ * Internal settings prefix
+ *
+ * @todo This could be resolved by promoting ElggPlugin to a 5th type.
+ */
+define('ELGG_PLUGIN_INTERNAL_PREFIX', 'elgg:internal:');
+
+
+/**
+ * Returns a list of plugin IDs (dir names) from a dir.
+ *
+ * @param string $dir A dir to scan for plugins. Defaults to config's plugins_path.
+ *
+ * @return array
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_plugin_ids_in_dir($dir = null) {
+ if (!$dir) {
+ $dir = elgg_get_plugins_path();
+ }
+
+ $plugin_ids = array();
+ $handle = opendir($dir);
+
+ if ($handle) {
+ while ($plugin_id = readdir($handle)) {
+ // must be directory and not begin with a .
+ if (substr($plugin_id, 0, 1) !== '.' && is_dir($dir . $plugin_id)) {
+ $plugin_ids[] = $plugin_id;
+ }
+ }
+ }
+
+ sort($plugin_ids);
+
+ return $plugin_ids;
+}
+
+/**
+ * Discovers plugins in the plugins_path setting and creates ElggPlugin
+ * entities for them if they don't exist. If there are plugins with entities
+ * but not actual files, will disable the ElggPlugin entities and mark as inactive.
+ * The ElggPlugin object holds config data, so don't delete.
+ *
+ * @todo Crappy name?
+ * @return bool
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_generate_plugin_entities() {
+ $site = get_config('site');
+ $dir = elgg_get_plugins_path();
+ $db_prefix = elgg_get_config('dbprefix');
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'plugin',
+ 'selects' => array('plugin_oe.*'),
+ 'joins' => array("JOIN {$db_prefix}objects_entity plugin_oe on plugin_oe.guid = e.guid"),
+ 'limit' => ELGG_ENTITIES_NO_VALUE
+ );
+
+ $old_ia = elgg_set_ignore_access(true);
+ $old_access = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+ $known_plugins = elgg_get_entities_from_relationship($options);
+
+ if (!$known_plugins) {
+ $known_plugins = array();
+ }
+
+ // map paths to indexes
+ $id_map = array();
+ foreach ($known_plugins as $i => $plugin) {
+ // if the ID is wrong, delete the plugin because we can never load it.
+ $id = $plugin->getID();
+ if (!$id) {
+ $plugin->delete();
+ unset($known_plugins[$i]);
+ continue;
+ }
+ $id_map[$plugin->getID()] = $i;
+ }
+
+ $physical_plugins = elgg_get_plugin_ids_in_dir($dir);
+
+ if (!$physical_plugins) {
+ return false;
+ }
+
+ // check real plugins against known ones
+ foreach ($physical_plugins as $plugin_id) {
+ // is this already in the db?
+ if (array_key_exists($plugin_id, $id_map)) {
+ $index = $id_map[$plugin_id];
+ $plugin = $known_plugins[$index];
+ // was this plugin deleted and its entity disabled?
+ if ($plugin->enabled != 'yes') {
+ $plugin->enable();
+ $plugin->deactivate();
+ $plugin->setPriority('last');
+ }
+
+ // remove from the list of plugins to disable
+ unset($known_plugins[$index]);
+ } else {
+ // add new plugins
+ // priority is force to last in save() if not set.
+ $plugin = new ElggPlugin($plugin_id);
+ $plugin->save();
+ }
+ }
+
+ // everything remaining in $known_plugins needs to be disabled
+ // because they are entities, but their dirs were removed.
+ // don't delete the entities because they hold settings.
+ foreach ($known_plugins as $plugin) {
+ if ($plugin->isActive()) {
+ $plugin->deactivate();
+ }
+ // remove the priority.
+ $name = elgg_namespace_plugin_private_setting('internal', 'priority');
+ remove_private_setting($plugin->guid, $name);
+ $plugin->disable();
+ }
+
+ access_show_hidden_entities($old_access);
+ elgg_set_ignore_access($old_ia);
+
+ elgg_reindex_plugin_priorities();
+
+ return true;
+}
+
+/**
+ * Cache a reference to this plugin by its ID
+ *
+ * @param ElggPlugin $plugin
+ *
+ * @access private
+ */
+function _elgg_cache_plugin_by_id(ElggPlugin $plugin) {
+ $map = (array) elgg_get_config('plugins_by_id_map');
+ $map[$plugin->getID()] = $plugin;
+ elgg_set_config('plugins_by_id_map', $map);
+}
+
+/**
+ * Returns an ElggPlugin object with the path $path.
+ *
+ * @param string $plugin_id The id (dir name) of the plugin. NOT the guid.
+ * @return mixed ElggPlugin or false.
+ * @since 1.8.0
+ */
+function elgg_get_plugin_from_id($plugin_id) {
+ $map = (array) elgg_get_config('plugins_by_id_map');
+ if (isset($map[$plugin_id])) {
+ return $map[$plugin_id];
+ }
+
+ $plugin_id = sanitize_string($plugin_id);
+ $db_prefix = get_config('dbprefix');
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'plugin',
+ 'joins' => array("JOIN {$db_prefix}objects_entity oe on oe.guid = e.guid"),
+ 'selects' => array("oe.title", "oe.description"),
+ 'wheres' => array("oe.title = '$plugin_id'"),
+ 'limit' => 1
+ );
+
+ $plugins = elgg_get_entities($options);
+
+ if ($plugins) {
+ return $plugins[0];
+ }
+
+ return false;
+}
+
+/**
+ * Returns if a plugin exists in the system.
+ *
+ * @warning This checks only plugins that are registered in the system!
+ * If the plugin cache is outdated, be sure to regenerate it with
+ * {@link elgg_generate_plugin_objects()} first.
+ *
+ * @param string $id The plugin ID.
+ * @since 1.8.0
+ * @return bool
+ */
+function elgg_plugin_exists($id) {
+ $plugin = elgg_get_plugin_from_id($id);
+
+ return ($plugin) ? true : false;
+}
+
+/**
+ * Returns the highest priority of the plugins
+ *
+ * @return int
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_max_plugin_priority() {
+ $db_prefix = get_config('dbprefix');
+ $priority = elgg_namespace_plugin_private_setting('internal', 'priority');
+ $plugin_subtype = get_subtype_id('object', 'plugin');
+
+ $q = "SELECT MAX(CAST(ps.value AS unsigned)) as max
+ FROM {$db_prefix}entities e, {$db_prefix}private_settings ps
+ WHERE ps.name = '$priority'
+ AND ps.entity_guid = e.guid
+ AND e.type = 'object' and e.subtype = $plugin_subtype";
+
+ $data = get_data($q);
+ if ($data) {
+ $max = $data[0]->max;
+ }
+
+ // can't have a priority of 0.
+ return ($max) ? $max : 1;
+}
+
+/**
+ * Returns if a plugin is active for a current site.
+ *
+ * @param string $plugin_id The plugin ID
+ * @param int $site_guid The site guid
+ * @since 1.8.0
+ * @return bool
+ */
+function elgg_is_active_plugin($plugin_id, $site_guid = null) {
+ if ($site_guid) {
+ $site = get_entity($site_guid);
+ } else {
+ $site = elgg_get_site_entity();
+ }
+
+ if (!($site instanceof ElggSite)) {
+ return false;
+ }
+
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+
+ if (!$plugin) {
+ return false;
+ }
+
+ return $plugin->isActive($site->guid);
+}
+
+/**
+ * Loads all active plugins in the order specified in the tool admin panel.
+ *
+ * @note This is called on every page load. If a plugin is active and problematic, it
+ * will be disabled and a visible error emitted. This does not check the deps system because
+ * that was too slow.
+ *
+ * @return bool
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_load_plugins() {
+ global $CONFIG;
+
+ $plugins_path = elgg_get_plugins_path();
+ $start_flags = ELGG_PLUGIN_INCLUDE_START
+ | ELGG_PLUGIN_REGISTER_VIEWS
+ | ELGG_PLUGIN_REGISTER_LANGUAGES
+ | ELGG_PLUGIN_REGISTER_CLASSES;
+
+ if (!$plugins_path) {
+ return false;
+ }
+
+ // temporary disable all plugins if there is a file called 'disabled' in the plugin dir
+ if (file_exists("$plugins_path/disabled")) {
+ if (elgg_is_admin_logged_in() && elgg_in_context('admin')) {
+ system_message(elgg_echo('plugins:disabled'));
+ }
+ return false;
+ }
+
+ if (elgg_get_config('system_cache_loaded')) {
+ $start_flags = $start_flags & ~ELGG_PLUGIN_REGISTER_VIEWS;
+ }
+
+ if (elgg_get_config('i18n_loaded_from_cache')) {
+ $start_flags = $start_flags & ~ELGG_PLUGIN_REGISTER_LANGUAGES;
+ }
+
+ $return = true;
+ $plugins = elgg_get_plugins('active');
+ if ($plugins) {
+ foreach ($plugins as $plugin) {
+ try {
+ $plugin->start($start_flags);
+ } catch (Exception $e) {
+ $plugin->deactivate();
+ $msg = elgg_echo('PluginException:CannotStart',
+ array($plugin->getID(), $plugin->guid, $e->getMessage()));
+ elgg_add_admin_notice('cannot_start' . $plugin->getID(), $msg);
+ $return = false;
+
+ continue;
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Returns an ordered list of plugins
+ *
+ * @param string $status The status of the plugins. active, inactive, or all.
+ * @param mixed $site_guid Optional site guid
+ * @return array
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_plugins($status = 'active', $site_guid = null) {
+ $db_prefix = get_config('dbprefix');
+ $priority = elgg_namespace_plugin_private_setting('internal', 'priority');
+
+ if (!$site_guid) {
+ $site = get_config('site');
+ $site_guid = $site->guid;
+ }
+
+ // grab plugins
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'plugin',
+ 'limit' => ELGG_ENTITIES_NO_VALUE,
+ 'selects' => array('plugin_oe.*'),
+ 'joins' => array(
+ "JOIN {$db_prefix}private_settings ps on ps.entity_guid = e.guid",
+ "JOIN {$db_prefix}objects_entity plugin_oe on plugin_oe.guid = e.guid"
+ ),
+ 'wheres' => array("ps.name = '$priority'"),
+ 'order_by' => "CAST(ps.value as unsigned), e.guid"
+ );
+
+ switch ($status) {
+ case 'active':
+ $options['relationship'] = 'active_plugin';
+ $options['relationship_guid'] = $site_guid;
+ $options['inverse_relationship'] = true;
+ break;
+
+ case 'inactive':
+ $options['wheres'][] = "NOT EXISTS (
+ SELECT 1 FROM {$db_prefix}entity_relationships active_er
+ WHERE active_er.guid_one = e.guid
+ AND active_er.relationship = 'active_plugin'
+ AND active_er.guid_two = $site_guid)";
+ break;
+
+ case 'all':
+ default:
+ break;
+ }
+
+ $old_ia = elgg_set_ignore_access(true);
+ $plugins = elgg_get_entities_from_relationship($options);
+ elgg_set_ignore_access($old_ia);
+
+ return $plugins;
+}
+
+/**
+ * Reorder plugins to an order specified by the array.
+ * Plugins not included in this array will be appended to the end.
+ *
+ * @note This doesn't use the ElggPlugin->setPriority() method because
+ * all plugins are being changed and we don't want it to automatically
+ * reorder plugins.
+ *
+ * @param array $order An array of plugin ids in the order to set them
+ * @return bool
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_set_plugin_priorities(array $order) {
+ $name = elgg_namespace_plugin_private_setting('internal', 'priority');
+
+ $plugins = elgg_get_plugins('any');
+ if (!$plugins) {
+ return false;
+ }
+
+ $return = true;
+
+ // reindex to get standard counting. no need to increment by 10.
+ // though we do start with 1
+ $order = array_values($order);
+
+ foreach ($plugins as $plugin) {
+ $plugin_id = $plugin->getID();
+
+ if (!in_array($plugin_id, $order)) {
+ $missing_plugins[] = $plugin;
+ continue;
+ }
+
+ $priority = array_search($plugin_id, $order) + 1;
+
+ if (!$plugin->set($name, $priority)) {
+ $return = false;
+ break;
+ }
+ }
+
+ // set the missing plugins' priorities
+ if ($return && $missing_plugins) {
+ if (!isset($priority)) {
+ $priority = 0;
+ }
+ foreach ($missing_plugins as $plugin) {
+ $priority++;
+ if (!$plugin->set($name, $priority)) {
+ $return = false;
+ break;
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Reindexes all plugin priorities starting at 1.
+ *
+ * @todo Can this be done in a single sql command?
+ * @return bool
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_reindex_plugin_priorities() {
+ return elgg_set_plugin_priorities(array());
+}
+
+/**
+ * Namespaces a string to be used as a private setting for a plugin.
+ *
+ * @param string $type The type of value: user_setting or internal.
+ * @param string $name The name to namespace.
+ * @param string $id The plugin's ID to namespace with. Required for user_setting.
+ * @return string
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_namespace_plugin_private_setting($type, $name, $id = null) {
+ switch ($type) {
+ // commented out because it breaks $plugin->$name access to variables
+ //case 'setting':
+ // $name = ELGG_PLUGIN_SETTING_PREFIX . $name;
+ // break;
+
+ case 'user_setting':
+ if (!$id) {
+ $id = elgg_get_calling_plugin_id();
+ }
+ $name = ELGG_PLUGIN_USER_SETTING_PREFIX . "$id:$name";
+ break;
+
+ case 'internal':
+ $name = ELGG_PLUGIN_INTERNAL_PREFIX . $name;
+ break;
+ }
+
+ return $name;
+}
+
+/**
+ * Get the name of the most recent plugin to be called in the
+ * call stack (or the plugin that owns the current page, if any).
+ *
+ * i.e., if the last plugin was in /mod/foobar/, this would return foo_bar.
+ *
+ * @param boolean $mainfilename If set to true, this will instead determine the
+ * context from the main script filename called by
+ * the browser. Default = false.
+ *
+ * @return string|false Plugin name, or false if no plugin name was called
+ * @since 1.8.0
+ * @access private
+ *
+ * @todo get rid of this
+ */
+function elgg_get_calling_plugin_id($mainfilename = false) {
+ if (!$mainfilename) {
+ if ($backtrace = debug_backtrace()) {
+ foreach ($backtrace as $step) {
+ $file = $step['file'];
+ $file = str_replace("\\", "/", $file);
+ $file = str_replace("//", "/", $file);
+ if (preg_match("/mod\/([a-zA-Z0-9\-\_]*)\/start\.php$/", $file, $matches)) {
+ return $matches[1];
+ }
+ }
+ }
+ } else {
+ //@todo this is a hack -- plugins do not have to match their page handler names!
+ if ($handler = get_input('handler', FALSE)) {
+ return $handler;
+ } else {
+ $file = $_SERVER["SCRIPT_NAME"];
+ $file = str_replace("\\", "/", $file);
+ $file = str_replace("//", "/", $file);
+ if (preg_match("/mod\/([a-zA-Z0-9\-\_]*)\//", $file, $matches)) {
+ return $matches[1];
+ }
+ }
+ }
+ return false;
+}
+
+/**
+ * Returns an array of all provides from all active plugins.
+ *
+ * Array in the form array(
+ * 'provide_type' => array(
+ * 'provided_name' => array(
+ * 'version' => '1.8',
+ * 'provided_by' => 'provider_plugin_id'
+ * )
+ * )
+ * )
+ *
+ * @param string $type The type of provides to return
+ * @param string $name A specific provided name to return. Requires $provide_type.
+ *
+ * @return array
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_plugins_provides($type = null, $name = null) {
+ static $provides = null;
+ $active_plugins = elgg_get_plugins('active');
+
+ if (!isset($provides)) {
+ $provides = array();
+
+ foreach ($active_plugins as $plugin) {
+ $plugin_provides = array();
+ $manifest = $plugin->getManifest();
+ if ($manifest instanceof ElggPluginManifest) {
+ $plugin_provides = $plugin->getManifest()->getProvides();
+ }
+ if ($plugin_provides) {
+ foreach ($plugin_provides as $provided) {
+ $provides[$provided['type']][$provided['name']] = array(
+ 'version' => $provided['version'],
+ 'provided_by' => $plugin->getID()
+ );
+ }
+ }
+ }
+ }
+
+ if ($type && $name) {
+ if (isset($provides[$type][$name])) {
+ return $provides[$type][$name];
+ } else {
+ return false;
+ }
+ } elseif ($type) {
+ if (isset($provides[$type])) {
+ return $provides[$type];
+ } else {
+ return false;
+ }
+ }
+
+ return $provides;
+}
+
+/**
+ * Checks if a plugin is currently providing $type and $name, and optionally
+ * checking a version.
+ *
+ * @param string $type The type of the provide
+ * @param string $name The name of the provide
+ * @param string $version A version to check against
+ * @param string $comparison The comparison operator to use in version_compare()
+ *
+ * @return array An array in the form array(
+ * 'status' => bool Does the provide exist?,
+ * 'value' => string The version provided
+ * )
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_check_plugins_provides($type, $name, $version = null, $comparison = 'ge') {
+ if (!$provided = elgg_get_plugins_provides($type, $name)) {
+ return array(
+ 'status' => false,
+ 'version' => ''
+ );
+ }
+
+ if ($provided) {
+ if ($version) {
+ $status = version_compare($provided['version'], $version, $comparison);
+ } else {
+ $status = true;
+ }
+ }
+
+ return array(
+ 'status' => $status,
+ 'value' => $provided['version']
+ );
+}
+
+/**
+ * Returns an array of parsed strings for a dependency in the
+ * format: array(
+ * 'type' => requires, conflicts, or provides.
+ * 'name' => The name of the requirement / conflict
+ * 'value' => A string representing the expected value: <1, >=3, !=enabled
+ * 'local_value' => The current value, ("Not installed")
+ * 'comment' => Free form text to help resovle the problem ("Enable / Search for plugin <link>")
+ * )
+ *
+ * @param array $dep An ElggPluginPackage dependency array
+ * @return array
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_plugin_dependency_strings($dep) {
+ $dep_system = elgg_extract('type', $dep);
+ $info = elgg_extract('dep', $dep);
+ $type = elgg_extract('type', $info);
+
+ if (!$dep_system || !$info || !$type) {
+ return false;
+ }
+
+ // rewrite some of these to be more readable
+ switch($info['comparison']) {
+ case 'lt':
+ $comparison = '<';
+ break;
+ case 'gt':
+ $comparison = '>';
+ break;
+ case 'ge':
+ $comparison = '>=';
+ break;
+ case 'le':
+ $comparison = '<=';
+ break;
+ default;
+ $comparison = $info['comparison'];
+ break;
+ }
+
+ /*
+ 'requires' 'plugin oauth_lib' <1.3 1.3 'downgrade'
+ 'requires' 'php setting bob' >3 3 'change it'
+ 'conflicts' 'php setting' >3 4 'change it'
+ 'conflicted''plugin profile' any 1.8 'disable profile'
+ 'provides' 'plugin oauth_lib' 1.3 -- --
+ 'priority' 'before blog' -- after 'move it'
+ */
+ $strings = array();
+ $strings['type'] = elgg_echo('ElggPlugin:Dependencies:' . ucwords($dep_system));
+
+ switch ($type) {
+ case 'elgg_version':
+ case 'elgg_release':
+ // 'Elgg Version'
+ $strings['name'] = elgg_echo('ElggPlugin:Dependencies:Elgg');
+ $strings['expected_value'] = "$comparison {$info['version']}";
+ $strings['local_value'] = $dep['value'];
+ $strings['comment'] = '';
+ break;
+
+ case 'php_extension':
+ // PHP Extension %s [version]
+ $strings['name'] = elgg_echo('ElggPlugin:Dependencies:PhpExtension', array($info['name']));
+ if ($info['version']) {
+ $strings['expected_value'] = "$comparison {$info['version']}";
+ $strings['local_value'] = $dep['value'];
+ } else {
+ $strings['expected_value'] = '';
+ $strings['local_value'] = '';
+ }
+ $strings['comment'] = '';
+ break;
+
+ case 'php_ini':
+ $strings['name'] = elgg_echo('ElggPlugin:Dependencies:PhpIni', array($info['name']));
+ $strings['expected_value'] = "$comparison {$info['value']}";
+ $strings['local_value'] = $dep['value'];
+ $strings['comment'] = '';
+ break;
+
+ case 'plugin':
+ $strings['name'] = elgg_echo('ElggPlugin:Dependencies:Plugin', array($info['name']));
+ $expected = $info['version'] ? "$comparison {$info['version']}" : elgg_echo('any');
+ $strings['expected_value'] = $expected;
+ $strings['local_value'] = $dep['value'] ? $dep['value'] : '--';
+ $strings['comment'] = '';
+ break;
+
+ case 'priority':
+ $expected_priority = ucwords($info['priority']);
+ $real_priority = ucwords($dep['value']);
+ $strings['name'] = elgg_echo('ElggPlugin:Dependencies:Priority');
+ $strings['expected_value'] = elgg_echo("ElggPlugin:Dependencies:Priority:$expected_priority", array($info['plugin']));
+ $strings['local_value'] = elgg_echo("ElggPlugin:Dependencies:Priority:$real_priority", array($info['plugin']));
+ $strings['comment'] = '';
+ break;
+ }
+
+ if ($dep['type'] == 'suggests') {
+ if ($dep['status']) {
+ $strings['comment'] = elgg_echo('ok');
+ } else {
+ $strings['comment'] = elgg_echo('ElggPlugin:Dependencies:Suggests:Unsatisfied');
+ }
+ } else {
+ if ($dep['status']) {
+ $strings['comment'] = elgg_echo('ok');
+ } else {
+ $strings['comment'] = elgg_echo('error');
+ }
+ }
+
+ return $strings;
+}
+
+/**
+ * Returns the ElggPlugin entity of the last plugin called.
+ *
+ * @return mixed ElggPlugin or false
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_calling_plugin_entity() {
+ $plugin_id = elgg_get_calling_plugin_id();
+
+ if ($plugin_id) {
+ return elgg_get_plugin_from_id($plugin_id);
+ }
+
+ return false;
+}
+
+/**
+ * Returns an array of all plugin settings for a user.
+ *
+ * @param mixed $user_guid The user GUID or null for the currently logged in user.
+ * @param string $plugin_id The plugin ID
+ * @param bool $return_obj Return settings as an object? This can be used to in reusable
+ * views where the settings are passed as $vars['entity'].
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_all_plugin_user_settings($user_guid = null, $plugin_id = null, $return_obj = false) {
+ if ($plugin_id) {
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+ } else {
+ $plugin = elgg_get_calling_plugin_entity();
+ }
+
+ if (!$plugin instanceof ElggPlugin) {
+ return false;
+ }
+
+ $settings = $plugin->getAllUserSettings($user_guid);
+
+ if ($settings && $return_obj) {
+ $return = new stdClass;
+
+ foreach ($settings as $k => $v) {
+ $return->$k = $v;
+ }
+
+ return $return;
+ } else {
+ return $settings;
+ }
+}
+
+/**
+ * Set a user specific setting for a plugin.
+ *
+ * @param string $name The name - note, can't be "title".
+ * @param mixed $value The value.
+ * @param int $user_guid Optional user.
+ * @param string $plugin_id Optional plugin name, if not specified then it
+ * is detected from where you are calling from.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_set_plugin_user_setting($name, $value, $user_guid = null, $plugin_id = null) {
+ if ($plugin_id) {
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+ } else {
+ $plugin = elgg_get_calling_plugin_entity();
+ }
+
+ if (!$plugin) {
+ return false;
+ }
+
+ return $plugin->setUserSetting($name, $value, $user_guid);
+}
+
+/**
+ * Unsets a user-specific plugin setting
+ *
+ * @param str $name Name of the setting
+ * @param int $user_guid Defaults to logged in user
+ * @param str $plugin_id Defaults to contextual plugin name
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unset_plugin_user_setting($name, $user_guid = null, $plugin_id = null) {
+ if ($plugin_id) {
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+ } else {
+ $plugin = elgg_get_calling_plugin_entity();
+ }
+
+ if (!$plugin) {
+ return false;
+ }
+
+ return $plugin->unsetUserSetting($name, $user_guid);
+}
+
+/**
+ * Get a user specific setting for a plugin.
+ *
+ * @param string $name The name of the setting.
+ * @param int $user_guid Guid of owning user
+ * @param string $plugin_id Optional plugin name, if not specified
+ * it is detected from where you are calling.
+ *
+ * @return mixed
+ * @since 1.8.0
+ */
+function elgg_get_plugin_user_setting($name, $user_guid = null, $plugin_id = null) {
+ if ($plugin_id) {
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+ } else {
+ $plugin = elgg_get_calling_plugin_entity();
+ }
+
+ if (!$plugin) {
+ return false;
+ }
+
+ return $plugin->getUserSetting($name, $user_guid);
+}
+
+/**
+ * Set a setting for a plugin.
+ *
+ * @param string $name The name of the setting - note, can't be "title".
+ * @param mixed $value The value.
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_set_plugin_setting($name, $value, $plugin_id = null) {
+ if ($plugin_id) {
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+ } else {
+ $plugin = elgg_get_calling_plugin_entity();
+ }
+
+ if (!$plugin) {
+ return false;
+ }
+
+ return $plugin->setSetting($name, $value);
+}
+
+/**
+ * Get setting for a plugin.
+ *
+ * @param string $name The name of the setting.
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @return mixed
+ * @since 1.8.0
+ * @todo make $plugin_id required in future version
+ */
+function elgg_get_plugin_setting($name, $plugin_id = null) {
+ if ($plugin_id) {
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+ } else {
+ $plugin = elgg_get_calling_plugin_entity();
+ }
+
+ if (!$plugin) {
+ return false;
+ }
+
+ return $plugin->getSetting($name);
+}
+
+/**
+ * Unsets a plugin setting.
+ *
+ * @param string $name The name of the setting.
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unset_plugin_setting($name, $plugin_id = null) {
+ if ($plugin_id) {
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+ } else {
+ $plugin = elgg_get_calling_plugin_entity();
+ }
+
+ if (!$plugin) {
+ return false;
+ }
+
+ return $plugin->unsetSetting($name);
+}
+
+/**
+ * Unsets all plugin settings for a plugin.
+ *
+ * @param string $plugin_id Optional plugin name, if not specified
+ * then it is detected from where you are calling from.
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_unset_all_plugin_settings($plugin_id = null) {
+ if ($plugin_id) {
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+ } else {
+ $plugin = elgg_get_calling_plugin_entity();
+ }
+
+ if (!$plugin) {
+ return false;
+ }
+
+ return $plugin->unsetAllSettings();
+}
+
+/**
+ * Returns entities based upon plugin settings.
+ * Takes all the options for {@see elgg_get_entities_from_private_settings()}
+ * in addition to the ones below.
+ *
+ * @param array $options Array in the format:
+ *
+ * plugin_id => NULL|STR The plugin id. Defaults to calling plugin
+ *
+ * plugin_user_setting_names => NULL|ARR private setting names
+ *
+ * plugin_user_setting_values => NULL|ARR metadata values
+ *
+ * plugin_user_setting_name_value_pairs => NULL|ARR (
+ * name => 'name',
+ * value => 'value',
+ * 'operand' => '=',
+ * )
+ * Currently if multiple values are sent via
+ * an array (value => array('value1', 'value2')
+ * the pair's operand will be forced to "IN".
+ *
+ * plugin_user_setting_name_value_pairs_operator => NULL|STR The operator to use for combining
+ * (name = value) OPERATOR (name = value); default AND
+ *
+ * @return mixed int If count, int. If not count, array. false on errors.
+ */
+function elgg_get_entities_from_plugin_user_settings(array $options = array()) {
+ // if they're passing it don't bother
+ if (!isset($options['plugin_id'])) {
+ $options['plugin_id'] = elgg_get_calling_plugin_id();
+ }
+
+ $singulars = array('plugin_user_setting_name', 'plugin_user_setting_value',
+ 'plugin_user_setting_name_value_pair');
+
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ // rewrite plugin_user_setting_name_* to the right PS ones.
+ $map = array(
+ 'plugin_user_setting_names' => 'private_setting_names',
+ 'plugin_user_setting_values' => 'private_setting_values',
+ 'plugin_user_setting_name_value_pairs' => 'private_setting_name_value_pairs',
+ 'plugin_user_setting_name_value_pairs_operator' => 'private_setting_name_value_pairs_operator'
+ );
+
+ foreach ($map as $plugin => $private) {
+ if (!isset($options[$plugin])) {
+ continue;
+ }
+
+ if (isset($options[$private])) {
+ if (!is_array($options[$private])) {
+ $options[$private] = array($options[$private]);
+ }
+
+ $options[$private] = array_merge($options[$private], $options[$plugin]);
+ } else {
+ $options[$private] = $options[$plugin];
+ }
+ }
+
+
+ $plugin_id = $options['plugin_id'];
+ $prefix = elgg_namespace_plugin_private_setting('user_setting', '', $plugin_id);
+ $options['private_setting_name_prefix'] = $prefix;
+
+ return elgg_get_entities_from_private_settings($options);
+}
+
+/**
+ * Register object, plugin entities as ElggPlugin classes
+ *
+ * @return void
+ * @access private
+ */
+function plugin_run_once() {
+ add_subtype("object", "plugin", "ElggPlugin");
+}
+
+/**
+ * Runs unit tests for the entity objects.
+ *
+ * @param sting $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function plugins_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/plugins.php';
+ return $value;
+}
+
+/**
+ * Initialize the plugin system
+ * Listens to system init and registers actions
+ *
+ * @return void
+ * @access private
+ */
+function plugin_init() {
+ run_function_once("plugin_run_once");
+
+ elgg_register_plugin_hook_handler('unit_test', 'system', 'plugins_test');
+
+ elgg_register_action("plugins/settings/save", '', 'admin');
+ elgg_register_action("plugins/usersettings/save");
+
+ elgg_register_action('admin/plugins/activate', '', 'admin');
+ elgg_register_action('admin/plugins/deactivate', '', 'admin');
+ elgg_register_action('admin/plugins/activate_all', '', 'admin');
+ elgg_register_action('admin/plugins/deactivate_all', '', 'admin');
+
+ elgg_register_action('admin/plugins/set_priority', '', 'admin');
+
+ elgg_register_library('elgg:markdown', elgg_get_root_path() . 'vendors/markdown/markdown.php');
+}
+
+elgg_register_event_handler('init', 'system', 'plugin_init');
diff --git a/engine/lib/private_settings.php b/engine/lib/private_settings.php
new file mode 100644
index 000000000..7541f7b3b
--- /dev/null
+++ b/engine/lib/private_settings.php
@@ -0,0 +1,414 @@
+<?php
+/**
+ * Private settings for entities
+ * Private settings provide metadata like storage of settings for plugins
+ * and users.
+ *
+ * @package Elgg.Core
+ * @subpackage PrivateSettings
+ */
+
+/**
+ * Returns entities based upon private settings. Also accepts all
+ * options available to elgg_get_entities(). Supports
+ * the singular option shortcut.
+ *
+ * @see elgg_get_entities
+ *
+ * @param array $options Array in format:
+ *
+ * private_setting_names => NULL|ARR private setting names
+ *
+ * private_setting_values => NULL|ARR metadata values
+ *
+ * private_setting_name_value_pairs => NULL|ARR (
+ * name => 'name',
+ * value => 'value',
+ * 'operand' => '=',
+ * )
+ * Currently if multiple values are sent via
+ * an array (value => array('value1', 'value2')
+ * the pair's operand will be forced to "IN".
+ *
+ * private_setting_name_value_pairs_operator => NULL|STR The operator to use for combining
+ * (name = value) OPERATOR (name = value); default AND
+ *
+ * private_setting_name_prefix => STR A prefix to apply to all private settings. Used to
+ * namespace plugin user settings or by plugins to namespace
+ * their own settings.
+ *
+ *
+ * @return mixed int If count, int. If not count, array. false on errors.
+ * @since 1.8.0
+ */
+function elgg_get_entities_from_private_settings(array $options = array()) {
+ $defaults = array(
+ 'private_setting_names' => ELGG_ENTITIES_ANY_VALUE,
+ 'private_setting_values' => ELGG_ENTITIES_ANY_VALUE,
+ 'private_setting_name_value_pairs' => ELGG_ENTITIES_ANY_VALUE,
+ 'private_setting_name_value_pairs_operator' => 'AND',
+ 'private_setting_name_prefix' => '',
+ );
+
+ $options = array_merge($defaults, $options);
+
+ $singulars = array('private_setting_name', 'private_setting_value',
+ 'private_setting_name_value_pair');
+
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ $clauses = elgg_get_entity_private_settings_where_sql('e', $options['private_setting_names'],
+ $options['private_setting_values'], $options['private_setting_name_value_pairs'],
+ $options['private_setting_name_value_pairs_operator'], $options['private_setting_name_prefix']);
+
+ if ($clauses) {
+ // merge wheres to pass to get_entities()
+ if (isset($options['wheres']) && !is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ } elseif (!isset($options['wheres'])) {
+ $options['wheres'] = array();
+ }
+
+ $options['wheres'] = array_merge($options['wheres'], $clauses['wheres']);
+
+ // merge joins to pass to get_entities()
+ if (isset($options['joins']) && !is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ } elseif (!isset($options['joins'])) {
+ $options['joins'] = array();
+ }
+
+ $options['joins'] = array_merge($options['joins'], $clauses['joins']);
+ }
+
+ return elgg_get_entities($options);
+}
+
+/**
+ * Returns private setting name and value SQL where/join clauses for entities.
+ *
+ * @param string $table Entities table name
+ * @param array|null $names Array of names
+ * @param array|null $values Array of values
+ * @param array|null $pairs Array of names / values / operands
+ * @param string $pair_operator Operator for joining pairs where clauses
+ * @param string $name_prefix A string to prefix all names with
+ * @return array
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_entity_private_settings_where_sql($table, $names = NULL, $values = NULL,
+$pairs = NULL, $pair_operator = 'AND', $name_prefix = '') {
+
+ global $CONFIG;
+
+ // @todo short circuit test
+
+ $return = array (
+ 'joins' => array (),
+ 'wheres' => array(),
+ );
+
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}private_settings ps on
+ {$table}.guid = ps.entity_guid";
+
+ $wheres = array();
+
+ // get names wheres
+ $names_where = '';
+ if ($names !== NULL) {
+ if (!is_array($names)) {
+ $names = array($names);
+ }
+
+ $sanitised_names = array();
+ foreach ($names as $name) {
+ $name = $name_prefix . $name;
+ $sanitised_names[] = '\'' . sanitise_string($name) . '\'';
+ }
+
+ $names_str = implode(',', $sanitised_names);
+ if ($names_str) {
+ $names_where = "(ps.name IN ($names_str))";
+ }
+ }
+
+ // get values wheres
+ $values_where = '';
+ if ($values !== NULL) {
+ if (!is_array($values)) {
+ $values = array($values);
+ }
+
+ $sanitised_values = array();
+ foreach ($values as $value) {
+ // normalize to 0
+ if (!$value) {
+ $value = 0;
+ }
+ $sanitised_values[] = '\'' . sanitise_string($value) . '\'';
+ }
+
+ $values_str = implode(',', $sanitised_values);
+ if ($values_str) {
+ $values_where = "(ps.value IN ($values_str))";
+ }
+ }
+
+ if ($names_where && $values_where) {
+ $wheres[] = "($names_where AND $values_where)";
+ } elseif ($names_where) {
+ $wheres[] = "($names_where)";
+ } elseif ($values_where) {
+ $wheres[] = "($values_where)";
+ }
+
+ // add pairs which must be in arrays.
+ if (is_array($pairs)) {
+ // join counter for incremental joins in pairs
+ $i = 1;
+
+ // check if this is an array of pairs or just a single pair.
+ if (isset($pairs['name']) || isset($pairs['value'])) {
+ $pairs = array($pairs);
+ }
+
+ $pair_wheres = array();
+
+ foreach ($pairs as $index => $pair) {
+ // @todo move this elsewhere?
+ // support shortcut 'n' => 'v' method.
+ if (!is_array($pair)) {
+ $pair = array(
+ 'name' => $index,
+ 'value' => $pair
+ );
+ }
+
+ // must have at least a name and value
+ if (!isset($pair['name']) || !isset($pair['value'])) {
+ // @todo should probably return false.
+ continue;
+ }
+
+ if (isset($pair['operand'])) {
+ $operand = sanitise_string($pair['operand']);
+ } else {
+ $operand = ' = ';
+ }
+
+ // for comparing
+ $trimmed_operand = trim(strtolower($operand));
+
+ // if the value is an int, don't quote it because str '15' < str '5'
+ // if the operand is IN don't quote it because quoting should be done already.
+ if (is_numeric($pair['value'])) {
+ $value = sanitise_string($pair['value']);
+ } else if (is_array($pair['value'])) {
+ $values_array = array();
+
+ foreach ($pair['value'] as $pair_value) {
+ if (is_numeric($pair_value)) {
+ $values_array[] = sanitise_string($pair_value);
+ } else {
+ $values_array[] = "'" . sanitise_string($pair_value) . "'";
+ }
+ }
+
+ if ($values_array) {
+ $value = '(' . implode(', ', $values_array) . ')';
+ }
+
+ // @todo allow support for non IN operands with array of values.
+ // will have to do more silly joins.
+ $operand = 'IN';
+ } else if ($trimmed_operand == 'in') {
+ $value = "({$pair['value']})";
+ } else {
+ $value = "'" . sanitise_string($pair['value']) . "'";
+ }
+
+ $name = sanitise_string($name_prefix . $pair['name']);
+
+ // @todo The multiple joins are only needed when the operator is AND
+ $return['joins'][] = "JOIN {$CONFIG->dbprefix}private_settings ps{$i}
+ on {$table}.guid = ps{$i}.entity_guid";
+
+ $pair_wheres[] = "(ps{$i}.name = '$name' AND ps{$i}.value
+ $operand $value)";
+
+ $i++;
+ }
+
+ $where = implode(" $pair_operator ", $pair_wheres);
+ if ($where) {
+ $wheres[] = "($where)";
+ }
+ }
+
+ $where = implode(' AND ', $wheres);
+ if ($where) {
+ $return['wheres'][] = "($where)";
+ }
+
+ return $return;
+}
+
+/**
+ * Gets a private setting for an entity.
+ *
+ * Plugin authors can set private data on entities. By default
+ * private data will not be searched or exported.
+ *
+ * @internal Private data is used to store settings for plugins
+ * and user settings.
+ *
+ * @param int $entity_guid The entity GUID
+ * @param string $name The name of the setting
+ *
+ * @return mixed The setting value, or false on failure
+ * @see set_private_setting()
+ * @see get_all_private_settings()
+ * @see remove_private_setting()
+ * @see remove_all_private_settings()
+ * @link http://docs.elgg.org/DataModel/Entities/PrivateSettings
+ */
+function get_private_setting($entity_guid, $name) {
+ global $CONFIG;
+ $entity_guid = (int) $entity_guid;
+ $name = sanitise_string($name);
+
+ $entity = get_entity($entity_guid);
+ if (!$entity instanceof ElggEntity) {
+ return false;
+ }
+
+ $query = "SELECT value from {$CONFIG->dbprefix}private_settings
+ where name = '{$name}' and entity_guid = {$entity_guid}";
+ $setting = get_data_row($query);
+
+ if ($setting) {
+ return $setting->value;
+ }
+ return false;
+}
+
+/**
+ * Return an array of all private settings.
+ *
+ * @param int $entity_guid The entity GUID
+ *
+ * @return array|false
+ * @see set_private_setting()
+ * @see get_private_settings()
+ * @see remove_private_setting()
+ * @see remove_all_private_settings()
+ * @link http://docs.elgg.org/DataModel/Entities/PrivateSettings
+ */
+function get_all_private_settings($entity_guid) {
+ global $CONFIG;
+
+ $entity_guid = (int) $entity_guid;
+ $entity = get_entity($entity_guid);
+ if (!$entity instanceof ElggEntity) {
+ return false;
+ }
+
+ $query = "SELECT * from {$CONFIG->dbprefix}private_settings where entity_guid = {$entity_guid}";
+ $result = get_data($query);
+ if ($result) {
+ $return = array();
+ foreach ($result as $r) {
+ $return[$r->name] = $r->value;
+ }
+
+ return $return;
+ }
+
+ return false;
+}
+
+/**
+ * Sets a private setting for an entity.
+ *
+ * @param int $entity_guid The entity GUID
+ * @param string $name The name of the setting
+ * @param string $value The value of the setting
+ *
+ * @return bool
+ * @see get_private_setting()
+ * @see get_all_private_settings()
+ * @see remove_private_setting()
+ * @see remove_all_private_settings()
+ * @link http://docs.elgg.org/DataModel/Entities/PrivateSettings
+ */
+function set_private_setting($entity_guid, $name, $value) {
+ global $CONFIG;
+
+ $entity_guid = (int) $entity_guid;
+ $name = sanitise_string($name);
+ $value = sanitise_string($value);
+
+ $result = insert_data("INSERT into {$CONFIG->dbprefix}private_settings
+ (entity_guid, name, value) VALUES
+ ($entity_guid, '$name', '$value')
+ ON DUPLICATE KEY UPDATE value='$value'");
+
+ return $result !== false;
+}
+
+/**
+ * Deletes a private setting for an entity.
+ *
+ * @param int $entity_guid The Entity GUID
+ * @param string $name The name of the setting
+ *
+ * @return bool
+ * @see get_private_setting()
+ * @see get_all_private_settings()
+ * @see set_private_setting()
+ * @see remove_all_private_settings()
+ * @link http://docs.elgg.org/DataModel/Entities/PrivateSettings
+ */
+function remove_private_setting($entity_guid, $name) {
+ global $CONFIG;
+
+ $entity_guid = (int) $entity_guid;
+
+ $entity = get_entity($entity_guid);
+ if (!$entity instanceof ElggEntity) {
+ return false;
+ }
+
+ $name = sanitise_string($name);
+
+ return delete_data("DELETE from {$CONFIG->dbprefix}private_settings
+ WHERE name = '{$name}'
+ AND entity_guid = {$entity_guid}");
+}
+
+/**
+ * Deletes all private settings for an entity.
+ *
+ * @param int $entity_guid The Entity GUID
+ *
+ * @return bool
+ * @see get_private_setting()
+ * @see get_all_private_settings()
+ * @see set_private_setting()
+ * @see remove_private_settings()
+ * @link http://docs.elgg.org/DataModel/Entities/PrivateSettings
+ */
+function remove_all_private_settings($entity_guid) {
+ global $CONFIG;
+
+ $entity_guid = (int) $entity_guid;
+
+ $entity = get_entity($entity_guid);
+ if (!$entity instanceof ElggEntity) {
+ return false;
+ }
+
+ return delete_data("DELETE from {$CONFIG->dbprefix}private_settings
+ WHERE entity_guid = {$entity_guid}");
+}
diff --git a/engine/lib/relationships.php b/engine/lib/relationships.php
new file mode 100644
index 000000000..01654b1ce
--- /dev/null
+++ b/engine/lib/relationships.php
@@ -0,0 +1,645 @@
+<?php
+/**
+ * Elgg relationships.
+ * Stub containing relationship functions, making import and export easier.
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Relationship
+ */
+
+/**
+ * Convert a database row to a new ElggRelationship
+ *
+ * @param stdClass $row Database row from the relationship table
+ *
+ * @return stdClass or ElggMetadata
+ * @access private
+ */
+function row_to_elggrelationship($row) {
+ if (!($row instanceof stdClass)) {
+ return $row;
+ }
+
+ return new ElggRelationship($row);
+}
+
+/**
+ * Return a relationship.
+ *
+ * @param int $id The ID of a relationship
+ *
+ * @return mixed
+ */
+function get_relationship($id) {
+ global $CONFIG;
+
+ $id = (int)$id;
+
+ $query = "SELECT * from {$CONFIG->dbprefix}entity_relationships where id=$id";
+ return row_to_elggrelationship(get_data_row($query));
+}
+
+/**
+ * Delete a specific relationship.
+ *
+ * @param int $id The relationship ID
+ *
+ * @return bool
+ */
+function delete_relationship($id) {
+ global $CONFIG;
+
+ $id = (int)$id;
+
+ $relationship = get_relationship($id);
+
+ if (elgg_trigger_event('delete', 'relationship', $relationship)) {
+ return delete_data("delete from {$CONFIG->dbprefix}entity_relationships where id=$id");
+ }
+
+ return FALSE;
+}
+
+/**
+ * Define an arbitrary relationship between two entities.
+ * This relationship could be a friendship, a group membership or a site membership.
+ *
+ * This function lets you make the statement "$guid_one is a $relationship of $guid_two".
+ *
+ * @param int $guid_one First GUID
+ * @param string $relationship Relationship name
+ * @param int $guid_two Second GUID
+ *
+ * @return bool
+ */
+function add_entity_relationship($guid_one, $relationship, $guid_two) {
+ global $CONFIG;
+
+ $guid_one = (int)$guid_one;
+ $relationship = sanitise_string($relationship);
+ $guid_two = (int)$guid_two;
+ $time = time();
+
+ // Check for duplicates
+ if (check_entity_relationship($guid_one, $relationship, $guid_two)) {
+ return false;
+ }
+
+ $result = insert_data("INSERT into {$CONFIG->dbprefix}entity_relationships
+ (guid_one, relationship, guid_two, time_created)
+ values ($guid_one, '$relationship', $guid_two, $time)");
+
+ if ($result !== false) {
+ $obj = get_relationship($result);
+ if (elgg_trigger_event('create', $relationship, $obj)) {
+ return true;
+ } else {
+ delete_relationship($result);
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Determine if a relationship between two entities exists
+ * and returns the relationship object if it does
+ *
+ * @param int $guid_one The GUID of the entity "owning" the relationship
+ * @param string $relationship The type of relationship
+ * @param int $guid_two The GUID of the entity the relationship is with
+ *
+ * @return object|false Depending on success
+ */
+function check_entity_relationship($guid_one, $relationship, $guid_two) {
+ global $CONFIG;
+
+ $guid_one = (int)$guid_one;
+ $relationship = sanitise_string($relationship);
+ $guid_two = (int)$guid_two;
+
+ $query = "SELECT * FROM {$CONFIG->dbprefix}entity_relationships
+ WHERE guid_one=$guid_one
+ AND relationship='$relationship'
+ AND guid_two=$guid_two limit 1";
+
+ $row = get_data_row($query);
+ if ($row) {
+ return $row;
+ }
+
+ return false;
+}
+
+/**
+ * Remove an arbitrary relationship between two entities.
+ *
+ * @param int $guid_one First GUID
+ * @param string $relationship Relationship name
+ * @param int $guid_two Second GUID
+ *
+ * @return bool
+ */
+function remove_entity_relationship($guid_one, $relationship, $guid_two) {
+ global $CONFIG;
+
+ $guid_one = (int)$guid_one;
+ $relationship = sanitise_string($relationship);
+ $guid_two = (int)$guid_two;
+
+ $obj = check_entity_relationship($guid_one, $relationship, $guid_two);
+ if ($obj == false) {
+ return false;
+ }
+
+ if (elgg_trigger_event('delete', $relationship, $obj)) {
+ $query = "DELETE from {$CONFIG->dbprefix}entity_relationships
+ where guid_one=$guid_one
+ and relationship='$relationship'
+ and guid_two=$guid_two";
+
+ return (bool)delete_data($query);
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Removes all arbitrary relationships originating from a particular entity
+ *
+ * @param int $guid_one The GUID of the entity
+ * @param string $relationship The name of the relationship (optional)
+ * @param bool $inverse Whether we're deleting inverse relationships (default false)
+ * @param string $type The type of entity to the delete to (defaults to all)
+ *
+ * @return bool Depending on success
+ */
+function remove_entity_relationships($guid_one, $relationship = "", $inverse = false, $type = '') {
+ global $CONFIG;
+
+ $guid_one = (int) $guid_one;
+
+ if (!empty($relationship)) {
+ $relationship = sanitise_string($relationship);
+ $where = "and er.relationship='$relationship'";
+ } else {
+ $where = "";
+ }
+
+ if (!empty($type)) {
+ $type = sanitise_string($type);
+ if (!$inverse) {
+ $join = " join {$CONFIG->dbprefix}entities e on e.guid = er.guid_two ";
+ } else {
+ $join = " join {$CONFIG->dbprefix}entities e on e.guid = er.guid_one ";
+ $where .= " and ";
+ }
+ $where .= " and e.type = '{$type}' ";
+ } else {
+ $join = "";
+ }
+
+ if (!$inverse) {
+ $sql = "DELETE er from {$CONFIG->dbprefix}entity_relationships as er
+ {$join}
+ where guid_one={$guid_one} {$where}";
+
+ return delete_data($sql);
+ } else {
+ $sql = "DELETE er from {$CONFIG->dbprefix}entity_relationships as er
+ {$join} where
+ guid_two={$guid_one} {$where}";
+
+ return delete_data($sql);
+ }
+}
+
+/**
+ * Get all the relationships for a given guid.
+ *
+ * @param int $guid The GUID of the relationship owner
+ * @param bool $inverse_relationship Inverse relationship owners?
+ *
+ * @return mixed
+ */
+function get_entity_relationships($guid, $inverse_relationship = FALSE) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+
+ $where = ($inverse_relationship ? "guid_two='$guid'" : "guid_one='$guid'");
+
+ $query = "SELECT * from {$CONFIG->dbprefix}entity_relationships where {$where}";
+
+ return get_data($query, "row_to_elggrelationship");
+}
+
+/**
+ * Return entities matching a given query joining against a relationship.
+ * Also accepts all options available to elgg_get_entities() and
+ * elgg_get_entities_from_metadata().
+ *
+ * To ask for entities that do not have a particulat relationship to an entity,
+ * use a custom where clause like the following:
+ *
+ * $options['wheres'][] = "NOT EXISTS (
+ * SELECT 1 FROM {$db_prefix}entity_relationships
+ * WHERE guid_one = e.guid
+ * AND relationship = '$relationship'
+ * )";
+ *
+ * @see elgg_get_entities
+ * @see elgg_get_entities_from_metadata
+ *
+ * @param array $options Array in format:
+ *
+ * relationship => NULL|STR relationship
+ *
+ * relationship_guid => NULL|INT Guid of relationship to test
+ *
+ * inverse_relationship => BOOL Inverse the relationship
+ *
+ * @return mixed If count, int. If not count, array. false on errors.
+ * @since 1.7.0
+ */
+function elgg_get_entities_from_relationship($options) {
+ $defaults = array(
+ 'relationship' => NULL,
+ 'relationship_guid' => NULL,
+ 'inverse_relationship' => FALSE
+ );
+
+ $options = array_merge($defaults, $options);
+
+ $clauses = elgg_get_entity_relationship_where_sql('e.guid', $options['relationship'],
+ $options['relationship_guid'], $options['inverse_relationship']);
+
+ if ($clauses) {
+ // merge wheres to pass to get_entities()
+ if (isset($options['wheres']) && !is_array($options['wheres'])) {
+ $options['wheres'] = array($options['wheres']);
+ } elseif (!isset($options['wheres'])) {
+ $options['wheres'] = array();
+ }
+
+ $options['wheres'] = array_merge($options['wheres'], $clauses['wheres']);
+
+ // merge joins to pass to get_entities()
+ if (isset($options['joins']) && !is_array($options['joins'])) {
+ $options['joins'] = array($options['joins']);
+ } elseif (!isset($options['joins'])) {
+ $options['joins'] = array();
+ }
+
+ $options['joins'] = array_merge($options['joins'], $clauses['joins']);
+
+ if (isset($options['selects']) && !is_array($options['selects'])) {
+ $options['selects'] = array($options['selects']);
+ } elseif (!isset($options['selects'])) {
+ $options['selects'] = array();
+ }
+
+ $select = array('r.id');
+
+ $options['selects'] = array_merge($options['selects'], $select);
+ }
+
+ return elgg_get_entities_from_metadata($options);
+}
+
+/**
+ * Returns sql appropriate for relationship joins and wheres
+ *
+ * @todo add support for multiple relationships and guids.
+ *
+ * @param string $column Column name the guid should be checked against.
+ * Provide in table.column format.
+ * @param string $relationship Relationship string
+ * @param int $relationship_guid Entity guid to check
+ * @param string $inverse_relationship Inverse relationship check?
+ *
+ * @return mixed
+ * @since 1.7.0
+ * @access private
+ */
+function elgg_get_entity_relationship_where_sql($column, $relationship = NULL,
+$relationship_guid = NULL, $inverse_relationship = FALSE) {
+
+ if ($relationship == NULL && $relationship_guid == NULL) {
+ return '';
+ }
+
+ global $CONFIG;
+
+ $wheres = array();
+ $joins = array();
+
+ if ($inverse_relationship) {
+ $joins[] = "JOIN {$CONFIG->dbprefix}entity_relationships r on r.guid_one = $column";
+ } else {
+ $joins[] = "JOIN {$CONFIG->dbprefix}entity_relationships r on r.guid_two = $column";
+ }
+
+ if ($relationship) {
+ $wheres[] = "r.relationship = '" . sanitise_string($relationship) . "'";
+ }
+
+ if ($relationship_guid) {
+ if ($inverse_relationship) {
+ $wheres[] = "r.guid_two = '$relationship_guid'";
+ } else {
+ $wheres[] = "r.guid_one = '$relationship_guid'";
+ }
+ }
+
+ if ($where_str = implode(' AND ', $wheres)) {
+
+ return array('wheres' => array("($where_str)"), 'joins' => $joins);
+ }
+
+ return '';
+}
+
+/**
+ * Returns a viewable list of entities by relationship
+ *
+ * @param array $options
+ *
+ * @see elgg_list_entities()
+ * @see elgg_get_entities_from_relationship()
+ *
+ * @return string The viewable list of entities
+ */
+function elgg_list_entities_from_relationship(array $options = array()) {
+ return elgg_list_entities($options, 'elgg_get_entities_from_relationship');
+}
+
+/**
+ * Gets the number of entities by a the number of entities related to them in a particular way.
+ * This is a good way to get out the users with the most friends, or the groups with the
+ * most members.
+ *
+ * @param array $options An options array compatible with
+ * elgg_get_entities_from_relationship()
+ * @return mixed int If count, int. If not count, array. false on errors.
+ * @since 1.8.0
+ */
+function elgg_get_entities_from_relationship_count(array $options = array()) {
+ $options['selects'][] = "COUNT(e.guid) as total";
+ $options['group_by'] = 'r.guid_two';
+ $options['order_by'] = 'total desc';
+ return elgg_get_entities_from_relationship($options);
+}
+
+/**
+ * Returns a list of entities by relationship count
+ *
+ * @see elgg_get_entities_from_relationship_count()
+ *
+ * @param array $options Options array
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_list_entities_from_relationship_count($options) {
+ return elgg_list_entities($options, 'elgg_get_entities_from_relationship_count');
+}
+
+/**
+ * Sets the URL handler for a particular relationship type
+ *
+ * @param string $relationship_type The relationship type.
+ * @param string $function_name The function to register
+ *
+ * @return bool Depending on success
+ */
+function elgg_register_relationship_url_handler($relationship_type, $function_name) {
+ global $CONFIG;
+
+ if (!is_callable($function_name, true)) {
+ return false;
+ }
+
+ if (!isset($CONFIG->relationship_url_handler)) {
+ $CONFIG->relationship_url_handler = array();
+ }
+
+ $CONFIG->relationship_url_handler[$relationship_type] = $function_name;
+
+ return true;
+}
+
+/**
+ * Get the url for a given relationship.
+ *
+ * @param int $id Relationship ID
+ *
+ * @return string
+ */
+function get_relationship_url($id) {
+ global $CONFIG;
+
+ $id = (int)$id;
+
+ if ($relationship = get_relationship($id)) {
+ $view = elgg_get_viewtype();
+
+ $guid = $relationship->guid_one;
+ $type = $relationship->relationship;
+
+ $url = "";
+
+ $function = "";
+ if (isset($CONFIG->relationship_url_handler[$type])) {
+ $function = $CONFIG->relationship_url_handler[$type];
+ }
+ if (isset($CONFIG->relationship_url_handler['all'])) {
+ $function = $CONFIG->relationship_url_handler['all'];
+ }
+
+ if (is_callable($function)) {
+ $url = call_user_func($function, $relationship);
+ }
+
+ if ($url == "") {
+ $nameid = $relationship->id;
+
+ $url = elgg_get_site_url() . "export/$view/$guid/relationship/$nameid/";
+ }
+
+ return $url;
+ }
+
+ return false;
+}
+
+/**** HELPER FUNCTIONS FOR RELATIONSHIPS OF TYPE 'ATTACHED' ****/
+// @todo what is this?
+
+/**
+ * Function to determine if the object trying to attach to other, has already done so
+ *
+ * @param int $guid_one This is the target object
+ * @param int $guid_two This is the object trying to attach to $guid_one
+ *
+ * @return bool
+ * @access private
+ */
+function already_attached($guid_one, $guid_two) {
+ if ($attached = check_entity_relationship($guid_one, "attached", $guid_two)) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Function to get all objects attached to a particular object
+ *
+ * @param int $guid Entity GUID
+ * @param string $type The type of object to return e.g. 'file', 'friend_of' etc
+ *
+ * @return an array of objects
+ * @access private
+ */
+function get_attachments($guid, $type = "") {
+ $options = array(
+ 'relationship' => 'attached',
+ 'relationship_guid' => $guid,
+ 'inverse_relationship' => false,
+ 'types' => $type,
+ 'subtypes' => '',
+ 'owner_guid' => 0,
+ 'order_by' => 'time_created desc',
+ 'limit' => 10,
+ 'offset' => 0,
+ 'count' => false,
+ 'site_guid' => 0
+ );
+ $attached = elgg_get_entities_from_relationship($options);
+ return $attached;
+}
+
+/**
+ * Function to remove a particular attachment between two objects
+ *
+ * @param int $guid_one This is the target object
+ * @param int $guid_two This is the object to remove from $guid_one
+ *
+ * @return void
+ * @access private
+ */
+function remove_attachment($guid_one, $guid_two) {
+ if (already_attached($guid_one, $guid_two)) {
+ remove_entity_relationship($guid_one, "attached", $guid_two);
+ }
+}
+
+/**
+ * Function to start the process of attaching one object to another
+ *
+ * @param int $guid_one This is the target object
+ * @param int $guid_two This is the object trying to attach to $guid_one
+ *
+ * @return true|void
+ * @access private
+ */
+function make_attachment($guid_one, $guid_two) {
+ if (!(already_attached($guid_one, $guid_two))) {
+ if (add_entity_relationship($guid_one, "attached", $guid_two)) {
+ return true;
+ }
+ }
+}
+
+/**
+ * Handler called by trigger_plugin_hook on the "import" event.
+ *
+ * @param string $hook import
+ * @param string $entity_type all
+ * @param mixed $returnvalue Value from previous hook
+ * @param mixed $params Array of params
+ *
+ * @return mixed
+ * @access private
+ */
+function import_relationship_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ $element = $params['element'];
+
+ $tmp = NULL;
+
+ if ($element instanceof ODDRelationship) {
+ $tmp = new ElggRelationship();
+ $tmp->import($element);
+
+ return $tmp;
+ }
+}
+
+/**
+ * Handler called by trigger_plugin_hook on the "export" event.
+ *
+ * @param string $hook export
+ * @param string $entity_type all
+ * @param mixed $returnvalue Previous hook return value
+ * @param array $params Parameters
+ *
+ * @elgg_event_handler export all
+ * @return mixed
+ * @access private
+ */
+function export_relationship_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ global $CONFIG;
+
+ // Sanity check values
+ if ((!is_array($params)) && (!isset($params['guid']))) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:GUIDNotForExport'));
+ }
+
+ if (!is_array($returnvalue)) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NonArrayReturnValue'));
+ }
+
+ $guid = (int)$params['guid'];
+
+ $result = get_entity_relationships($guid);
+
+ if ($result) {
+ foreach ($result as $r) {
+ $returnvalue[] = $r->export();
+ }
+ }
+
+ return $returnvalue;
+}
+
+/**
+ * Notify user that someone has friended them
+ *
+ * @param string $event Event name
+ * @param string $type Object type
+ * @param mixed $object Object
+ *
+ * @return bool
+ * @access private
+ */
+function relationship_notification_hook($event, $type, $object) {
+
+ $user_one = get_entity($object->guid_one);
+ $user_two = get_entity($object->guid_two);
+
+ return notify_user($object->guid_two,
+ $object->guid_one,
+ elgg_echo('friend:newfriend:subject', array($user_one->name)),
+ elgg_echo("friend:newfriend:body", array($user_one->name, $user_one->getURL()))
+ );
+}
+
+// Register the import hook
+elgg_register_plugin_hook_handler("import", "all", "import_relationship_plugin_hook", 3);
+
+// Register the hook, ensuring entities are serialised first
+elgg_register_plugin_hook_handler("export", "all", "export_relationship_plugin_hook", 3);
+
+// Register event to listen to some events
+elgg_register_event_handler('create', 'friend', 'relationship_notification_hook');
diff --git a/engine/lib/river.php b/engine/lib/river.php
new file mode 100644
index 000000000..33f34360e
--- /dev/null
+++ b/engine/lib/river.php
@@ -0,0 +1,700 @@
+<?php
+/**
+ * Elgg river.
+ * Activity stream functions.
+ *
+ * @package Elgg.Core
+ * @subpackage SocialModel.River
+ */
+
+/**
+ * Adds an item to the river.
+ *
+ * @param string $view The view that will handle the river item (must exist)
+ * @param string $action_type An arbitrary string to define the action (eg 'comment', 'create')
+ * @param int $subject_guid The GUID of the entity doing the action
+ * @param int $object_guid The GUID of the entity being acted upon
+ * @param int $access_id The access ID of the river item (default: same as the object)
+ * @param int $posted The UNIX epoch timestamp of the river item (default: now)
+ * @param int $annotation_id The annotation ID associated with this river entry
+ *
+ * @return int/bool River ID or false on failure
+ */
+function add_to_river($view, $action_type, $subject_guid, $object_guid, $access_id = "",
+$posted = 0, $annotation_id = 0) {
+
+ global $CONFIG;
+
+ // use default viewtype for when called from web services api
+ if (!elgg_view_exists($view, 'default')) {
+ return false;
+ }
+ if (!($subject = get_entity($subject_guid))) {
+ return false;
+ }
+ if (!($object = get_entity($object_guid))) {
+ return false;
+ }
+ if (empty($action_type)) {
+ return false;
+ }
+ if ($posted == 0) {
+ $posted = time();
+ }
+ if ($access_id === "") {
+ $access_id = $object->access_id;
+ }
+ $type = $object->getType();
+ $subtype = $object->getSubtype();
+
+ $view = sanitise_string($view);
+ $action_type = sanitise_string($action_type);
+ $subject_guid = sanitise_int($subject_guid);
+ $object_guid = sanitise_int($object_guid);
+ $access_id = sanitise_int($access_id);
+ $posted = sanitise_int($posted);
+ $annotation_id = sanitise_int($annotation_id);
+
+ $values = array(
+ 'type' => $type,
+ 'subtype' => $subtype,
+ 'action_type' => $action_type,
+ 'access_id' => $access_id,
+ 'view' => $view,
+ 'subject_guid' => $subject_guid,
+ 'object_guid' => $object_guid,
+ 'annotation_id' => $annotation_id,
+ 'posted' => $posted,
+ );
+
+ // return false to stop insert
+ $values = elgg_trigger_plugin_hook('creating', 'river', null, $values);
+ if ($values == false) {
+ // inserting did not fail - it was just prevented
+ return true;
+ }
+
+ extract($values);
+
+ // Attempt to save river item; return success status
+ $id = insert_data("insert into {$CONFIG->dbprefix}river " .
+ " set type = '$type', " .
+ " subtype = '$subtype', " .
+ " action_type = '$action_type', " .
+ " access_id = $access_id, " .
+ " view = '$view', " .
+ " subject_guid = $subject_guid, " .
+ " object_guid = $object_guid, " .
+ " annotation_id = $annotation_id, " .
+ " posted = $posted");
+
+ // update the entities which had the action carried out on it
+ // @todo shouldn't this be down elsewhere? Like when an annotation is saved?
+ if ($id) {
+ update_entity_last_action($object_guid, $posted);
+
+ $river_items = elgg_get_river(array('id' => $id));
+ if ($river_items) {
+ elgg_trigger_event('created', 'river', $river_items[0]);
+ }
+ return $id;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Delete river items
+ *
+ * @warning not checking access (should we?)
+ *
+ * @param array $options Parameters:
+ * ids => INT|ARR River item id(s)
+ * subject_guids => INT|ARR Subject guid(s)
+ * object_guids => INT|ARR Object guid(s)
+ * annotation_ids => INT|ARR The identifier of the annotation(s)
+ * action_types => STR|ARR The river action type(s) identifier
+ * views => STR|ARR River view(s)
+ *
+ * types => STR|ARR Entity type string(s)
+ * subtypes => STR|ARR Entity subtype string(s)
+ * type_subtype_pairs => ARR Array of type => subtype pairs where subtype
+ * can be an array of subtype strings
+ *
+ * posted_time_lower => INT The lower bound on the time posted
+ * posted_time_upper => INT The upper bound on the time posted
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_delete_river(array $options = array()) {
+ global $CONFIG;
+
+ $defaults = array(
+ 'ids' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'subject_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'object_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'annotation_ids' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'views' => ELGG_ENTITIES_ANY_VALUE,
+ 'action_types' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'types' => ELGG_ENTITIES_ANY_VALUE,
+ 'subtypes' => ELGG_ENTITIES_ANY_VALUE,
+ 'type_subtype_pairs' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'posted_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'posted_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'wheres' => array(),
+ 'joins' => array(),
+
+ );
+
+ $options = array_merge($defaults, $options);
+
+ $singulars = array('id', 'subject_guid', 'object_guid', 'annotation_id', 'action_type', 'view', 'type', 'subtype');
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ $wheres = $options['wheres'];
+
+ $wheres[] = elgg_get_guid_based_where_sql('rv.id', $options['ids']);
+ $wheres[] = elgg_get_guid_based_where_sql('rv.subject_guid', $options['subject_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('rv.object_guid', $options['object_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('rv.annotation_id', $options['annotation_ids']);
+ $wheres[] = elgg_river_get_action_where_sql($options['action_types']);
+ $wheres[] = elgg_river_get_view_where_sql($options['views']);
+ $wheres[] = elgg_get_river_type_subtype_where_sql('rv', $options['types'],
+ $options['subtypes'], $options['type_subtype_pairs']);
+
+ if ($options['posted_time_lower'] && is_int($options['posted_time_lower'])) {
+ $wheres[] = "rv.posted >= {$options['posted_time_lower']}";
+ }
+
+ if ($options['posted_time_upper'] && is_int($options['posted_time_upper'])) {
+ $wheres[] = "rv.posted <= {$options['posted_time_upper']}";
+ }
+
+ // see if any functions failed
+ // remove empty strings on successful functions
+ foreach ($wheres as $i => $where) {
+ if ($where === FALSE) {
+ return FALSE;
+ } elseif (empty($where)) {
+ unset($wheres[$i]);
+ }
+ }
+
+ // remove identical where clauses
+ $wheres = array_unique($wheres);
+
+ $query = "DELETE rv.* FROM {$CONFIG->dbprefix}river rv ";
+
+ // remove identical join clauses
+ $joins = array_unique($options['joins']);
+
+ // add joins
+ foreach ($joins as $j) {
+ $query .= " $j ";
+ }
+
+ // add wheres
+ $query .= ' WHERE ';
+
+ foreach ($wheres as $w) {
+ $query .= " $w AND ";
+ }
+ $query .= "1=1";
+
+ return delete_data($query);
+}
+
+/**
+ * Get river items
+ *
+ * @note If using types and subtypes in a query, they are joined with an AND.
+ *
+ * @param array $options Parameters:
+ * ids => INT|ARR River item id(s)
+ * subject_guids => INT|ARR Subject guid(s)
+ * object_guids => INT|ARR Object guid(s)
+ * annotation_ids => INT|ARR The identifier of the annotation(s)
+ * action_types => STR|ARR The river action type(s) identifier
+ * posted_time_lower => INT The lower bound on the time posted
+ * posted_time_upper => INT The upper bound on the time posted
+ *
+ * types => STR|ARR Entity type string(s)
+ * subtypes => STR|ARR Entity subtype string(s)
+ * type_subtype_pairs => ARR Array of type => subtype pairs where subtype
+ * can be an array of subtype strings
+ *
+ * relationship => STR Relationship identifier
+ * relationship_guid => INT|ARR Entity guid(s)
+ * inverse_relationship => BOOL Subject or object of the relationship (false)
+ *
+ * limit => INT Number to show per page (20)
+ * offset => INT Offset in list (0)
+ * count => BOOL Count the river items? (false)
+ * order_by => STR Order by clause (rv.posted desc)
+ * group_by => STR Group by clause
+ *
+ * @return array|int
+ * @since 1.8.0
+ */
+function elgg_get_river(array $options = array()) {
+ global $CONFIG;
+
+ $defaults = array(
+ 'ids' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'subject_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'object_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'annotation_ids' => ELGG_ENTITIES_ANY_VALUE,
+ 'action_types' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'relationship' => NULL,
+ 'relationship_guid' => NULL,
+ 'inverse_relationship' => FALSE,
+
+ 'types' => ELGG_ENTITIES_ANY_VALUE,
+ 'subtypes' => ELGG_ENTITIES_ANY_VALUE,
+ 'type_subtype_pairs' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'posted_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'posted_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'limit' => 20,
+ 'offset' => 0,
+ 'count' => FALSE,
+
+ 'order_by' => 'rv.posted desc',
+ 'group_by' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'wheres' => array(),
+ 'joins' => array(),
+ );
+
+ $options = array_merge($defaults, $options);
+
+ $singulars = array('id', 'subject_guid', 'object_guid', 'annotation_id', 'action_type', 'type', 'subtype');
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ $wheres = $options['wheres'];
+
+ $wheres[] = elgg_get_guid_based_where_sql('rv.id', $options['ids']);
+ $wheres[] = elgg_get_guid_based_where_sql('rv.subject_guid', $options['subject_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('rv.object_guid', $options['object_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('rv.annotation_id', $options['annotation_ids']);
+ $wheres[] = elgg_river_get_action_where_sql($options['action_types']);
+ $wheres[] = elgg_get_river_type_subtype_where_sql('rv', $options['types'],
+ $options['subtypes'], $options['type_subtype_pairs']);
+
+ if ($options['posted_time_lower'] && is_int($options['posted_time_lower'])) {
+ $wheres[] = "rv.posted >= {$options['posted_time_lower']}";
+ }
+
+ if ($options['posted_time_upper'] && is_int($options['posted_time_upper'])) {
+ $wheres[] = "rv.posted <= {$options['posted_time_upper']}";
+ }
+
+ $joins = $options['joins'];
+
+ if ($options['relationship_guid']) {
+ $clauses = elgg_get_entity_relationship_where_sql(
+ 'rv.subject_guid',
+ $options['relationship'],
+ $options['relationship_guid'],
+ $options['inverse_relationship']);
+ if ($clauses) {
+ $wheres = array_merge($wheres, $clauses['wheres']);
+ $joins = array_merge($joins, $clauses['joins']);
+ }
+ }
+
+ // see if any functions failed
+ // remove empty strings on successful functions
+ foreach ($wheres as $i => $where) {
+ if ($where === FALSE) {
+ return FALSE;
+ } elseif (empty($where)) {
+ unset($wheres[$i]);
+ }
+ }
+
+ // remove identical where clauses
+ $wheres = array_unique($wheres);
+
+ if (!$options['count']) {
+ $query = "SELECT DISTINCT rv.* FROM {$CONFIG->dbprefix}river rv ";
+ } else {
+ $query = "SELECT count(DISTINCT rv.id) as total FROM {$CONFIG->dbprefix}river rv ";
+ }
+
+ // add joins
+ foreach ($joins as $j) {
+ $query .= " $j ";
+ }
+
+ // add wheres
+ $query .= ' WHERE ';
+
+ foreach ($wheres as $w) {
+ $query .= " $w AND ";
+ }
+
+ $query .= elgg_river_get_access_sql();
+
+ if (!$options['count']) {
+ $options['group_by'] = sanitise_string($options['group_by']);
+ if ($options['group_by']) {
+ $query .= " GROUP BY {$options['group_by']}";
+ }
+
+ $options['order_by'] = sanitise_string($options['order_by']);
+ $query .= " ORDER BY {$options['order_by']}";
+
+ if ($options['limit']) {
+ $limit = sanitise_int($options['limit']);
+ $offset = sanitise_int($options['offset'], false);
+ $query .= " LIMIT $offset, $limit";
+ }
+
+ $river_items = get_data($query, 'elgg_row_to_elgg_river_item');
+ _elgg_prefetch_river_entities($river_items);
+
+ return $river_items;
+ } else {
+ $total = get_data_row($query);
+ return (int)$total->total;
+ }
+}
+
+/**
+ * Prefetch entities that will be displayed in the river.
+ *
+ * @param ElggRiverItem[] $river_items
+ * @access private
+ */
+function _elgg_prefetch_river_entities(array $river_items) {
+ // prefetch objects and subjects
+ $guids = array();
+ foreach ($river_items as $item) {
+ if ($item->subject_guid && !retrieve_cached_entity($item->subject_guid)) {
+ $guids[$item->subject_guid] = true;
+ }
+ if ($item->object_guid && !retrieve_cached_entity($item->object_guid)) {
+ $guids[$item->object_guid] = true;
+ }
+ }
+ if ($guids) {
+ // avoid creating oversized query
+ // @todo how to better handle this?
+ $guids = array_slice($guids, 0, 300, true);
+ // return value unneeded, just priming cache
+ elgg_get_entities(array(
+ 'guids' => array_keys($guids),
+ 'limit' => 0,
+ ));
+ }
+
+ // prefetch object containers
+ $guids = array();
+ foreach ($river_items as $item) {
+ $object = $item->getObjectEntity();
+ if ($object->container_guid && !retrieve_cached_entity($object->container_guid)) {
+ $guids[$object->container_guid] = true;
+ }
+ }
+ if ($guids) {
+ $guids = array_slice($guids, 0, 300, true);
+ elgg_get_entities(array(
+ 'guids' => array_keys($guids),
+ 'limit' => 0,
+ ));
+ }
+}
+
+/**
+ * List river items
+ *
+ * @param array $options Any options from elgg_get_river() plus:
+ * pagination => BOOL Display pagination links (true)
+ *
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_list_river(array $options = array()) {
+ global $autofeed;
+ $autofeed = true;
+
+ $defaults = array(
+ 'offset' => (int) max(get_input('offset', 0), 0),
+ 'limit' => (int) max(get_input('limit', 20), 0),
+ 'pagination' => TRUE,
+ 'list_class' => 'elgg-list-river elgg-river', // @todo remove elgg-river in Elgg 1.9
+ );
+
+ $options = array_merge($defaults, $options);
+
+ $options['count'] = TRUE;
+ $count = elgg_get_river($options);
+
+ $options['count'] = FALSE;
+ $items = elgg_get_river($options);
+
+ $options['count'] = $count;
+ $options['items'] = $items;
+ return elgg_view('page/components/list', $options);
+}
+
+/**
+ * Convert a database row to a new ElggRiverItem
+ *
+ * @param stdClass $row Database row from the river table
+ *
+ * @return ElggRiverItem
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_row_to_elgg_river_item($row) {
+ if (!($row instanceof stdClass)) {
+ return NULL;
+ }
+
+ return new ElggRiverItem($row);
+}
+
+/**
+ * Get the river's access where clause
+ *
+ * @return string
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_river_get_access_sql() {
+ // rewrite default access where clause to work with river table
+ return str_replace("and enabled='yes'", '',
+ str_replace('owner_guid', 'rv.subject_guid',
+ str_replace('access_id', 'rv.access_id', get_access_sql_suffix())));
+}
+
+/**
+ * Returns SQL where clause for type and subtype on river table
+ *
+ * @internal This is a simplified version of elgg_get_entity_type_subtype_where_sql()
+ * which could be used for all queries once the subtypes have been denormalized.
+ *
+ * @param string $table 'rv'
+ * @param NULL|array $types Array of types or NULL if none.
+ * @param NULL|array $subtypes Array of subtypes or NULL if none
+ * @param NULL|array $pairs Array of pairs of types and subtypes
+ *
+ * @return string
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_river_type_subtype_where_sql($table, $types, $subtypes, $pairs) {
+ // short circuit if nothing is requested
+ if (!$types && !$subtypes && !$pairs) {
+ return '';
+ }
+
+ $types_wheres = array();
+ $subtypes_wheres = array();
+
+ // if no pairs, use types and subtypes
+ if (!is_array($pairs)) {
+ if ($types) {
+ if (!is_array($types)) {
+ $types = array($types);
+ }
+ foreach ($types as $type) {
+ $type = sanitise_string($type);
+ $types_wheres[] = "({$table}.type = '$type')";
+ }
+ }
+
+ if ($subtypes) {
+ if (!is_array($subtypes)) {
+ $subtypes = array($subtypes);
+ }
+ foreach ($subtypes as $subtype) {
+ $subtype = sanitise_string($subtype);
+ $subtypes_wheres[] = "({$table}.subtype = '$subtype')";
+ }
+ }
+
+ if (is_array($types_wheres) && count($types_wheres)) {
+ $types_wheres = array(implode(' OR ', $types_wheres));
+ }
+
+ if (is_array($subtypes_wheres) && count($subtypes_wheres)) {
+ $subtypes_wheres = array('(' . implode(' OR ', $subtypes_wheres) . ')');
+ }
+
+ $wheres = array(implode(' AND ', array_merge($types_wheres, $subtypes_wheres)));
+
+ } else {
+ // using type/subtype pairs
+ foreach ($pairs as $paired_type => $paired_subtypes) {
+ $paired_type = sanitise_string($paired_type);
+ if (is_array($paired_subtypes)) {
+ $paired_subtypes = array_map('sanitise_string', $paired_subtypes);
+ $paired_subtype_str = implode("','", $paired_subtypes);
+ if ($paired_subtype_str) {
+ $wheres[] = "({$table}.type = '$paired_type'"
+ . " AND {$table}.subtype IN ('$paired_subtype_str'))";
+ }
+ } else {
+ $paired_subtype = sanitise_string($paired_subtypes);
+ $wheres[] = "({$table}.type = '$paired_type'"
+ . " AND {$table}.subtype = '$paired_subtype')";
+ }
+ }
+ }
+
+ if (is_array($wheres) && count($wheres)) {
+ $where = implode(' OR ', $wheres);
+ return "($where)";
+ }
+
+ return '';
+}
+
+/**
+ * Get the where clause based on river action type strings
+ *
+ * @param array $types Array of action type strings
+ *
+ * @return string
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_river_get_action_where_sql($types) {
+ if (!$types) {
+ return '';
+ }
+
+ if (!is_array($types)) {
+ $types = sanitise_string($types);
+ return "(rv.action_type = '$types')";
+ }
+
+ // sanitize types array
+ $types_sanitized = array();
+ foreach ($types as $type) {
+ $types_sanitized[] = sanitise_string($type);
+ }
+
+ $type_str = implode("','", $types_sanitized);
+ return "(rv.action_type IN ('$type_str'))";
+}
+
+/**
+ * Get the where clause based on river view strings
+ *
+ * @param array $views Array of view strings
+ *
+ * @return string
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_river_get_view_where_sql($views) {
+ if (!$views) {
+ return '';
+ }
+
+ if (!is_array($views)) {
+ $views = sanitise_string($views);
+ return "(rv.view = '$views')";
+ }
+
+ // sanitize views array
+ $views_sanitized = array();
+ foreach ($views as $view) {
+ $views_sanitized[] = sanitise_string($view);
+ }
+
+ $view_str = implode("','", $views_sanitized);
+ return "(rv.view IN ('$view_str'))";
+}
+
+/**
+ * Sets the access ID on river items for a particular object
+ *
+ * @param int $object_guid The GUID of the entity
+ * @param int $access_id The access ID
+ *
+ * @return bool Depending on success
+ */
+function update_river_access_by_object($object_guid, $access_id) {
+ // Sanitise
+ $object_guid = (int) $object_guid;
+ $access_id = (int) $access_id;
+
+ // Load config
+ global $CONFIG;
+
+ // Remove
+ $query = "update {$CONFIG->dbprefix}river
+ set access_id = {$access_id}
+ where object_guid = {$object_guid}";
+ return update_data($query);
+}
+
+/**
+ * Page handler for activiy
+ *
+ * @param array $page
+ * @return bool
+ * @access private
+ */
+function elgg_river_page_handler($page) {
+ global $CONFIG;
+
+ elgg_set_page_owner_guid(elgg_get_logged_in_user_guid());
+
+ // make a URL segment available in page handler script
+ $page_type = elgg_extract(0, $page, 'all');
+ $page_type = preg_replace('[\W]', '', $page_type);
+ if ($page_type == 'owner') {
+ $page_type = 'mine';
+ }
+ set_input('page_type', $page_type);
+
+ // content filter code here
+ $entity_type = '';
+ $entity_subtype = '';
+
+ require_once("{$CONFIG->path}pages/river.php");
+ return true;
+}
+
+/**
+ * Register river unit tests
+ * @access private
+ */
+function elgg_river_test($hook, $type, $value) {
+ global $CONFIG;
+ $value[] = $CONFIG->path . 'engine/tests/api/river.php';
+ return $value;
+}
+
+/**
+ * Initialize river library
+ * @access private
+ */
+function elgg_river_init() {
+ elgg_register_page_handler('activity', 'elgg_river_page_handler');
+ $item = new ElggMenuItem('activity', elgg_echo('activity'), 'activity');
+ elgg_register_menu_item('site', $item);
+
+ elgg_register_widget_type('river_widget', elgg_echo('river:widget:title'), elgg_echo('river:widget:description'));
+
+ elgg_register_action('river/delete', '', 'admin');
+
+ elgg_register_plugin_hook_handler('unit_test', 'system', 'elgg_river_test');
+}
+
+elgg_register_event_handler('init', 'system', 'elgg_river_init');
diff --git a/engine/lib/sessions.php b/engine/lib/sessions.php
new file mode 100644
index 000000000..72ca0a1c2
--- /dev/null
+++ b/engine/lib/sessions.php
@@ -0,0 +1,653 @@
+<?php
+
+/**
+ * Elgg session management
+ * Functions to manage logins
+ *
+ * @package Elgg.Core
+ * @subpackage Session
+ */
+
+/** Elgg magic session */
+global $SESSION;
+
+/**
+ * Return the current logged in user, or NULL if no user is logged in.
+ *
+ * If no user can be found in the current session, a plugin
+ * hook - 'session:get' 'user' to give plugin authors another
+ * way to provide user details to the ACL system without touching the session.
+ *
+ * @return ElggUser
+ */
+function elgg_get_logged_in_user_entity() {
+ global $SESSION;
+
+ if (isset($SESSION)) {
+ return $SESSION['user'];
+ }
+
+ return NULL;
+}
+
+/**
+ * Return the current logged in user by id.
+ *
+ * @see elgg_get_logged_in_user_entity()
+ * @return int
+ */
+function elgg_get_logged_in_user_guid() {
+ $user = elgg_get_logged_in_user_entity();
+ if ($user) {
+ return $user->guid;
+ }
+
+ return 0;
+}
+
+/**
+ * Returns whether or not the user is currently logged in
+ *
+ * @return bool
+ */
+function elgg_is_logged_in() {
+ $user = elgg_get_logged_in_user_entity();
+
+ if ((isset($user)) && ($user instanceof ElggUser) && ($user->guid > 0)) {
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Returns whether or not the user is currently logged in and that they are an admin user.
+ *
+ * @return bool
+ */
+function elgg_is_admin_logged_in() {
+ $user = elgg_get_logged_in_user_entity();
+
+ if ((elgg_is_logged_in()) && $user->isAdmin()) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Check if the given user has full access.
+ *
+ * @todo: Will always return full access if the user is an admin.
+ *
+ * @param int $user_guid The user to check
+ *
+ * @return bool
+ * @since 1.7.1
+ */
+function elgg_is_admin_user($user_guid) {
+ global $CONFIG;
+ // cannot use magic metadata here because of recursion
+
+ // must support the old way of getting admin from metadata
+ // in order to run the upgrade to move it into the users table.
+ $version = (int) datalist_get('version');
+
+ if ($version < 2010040201) {
+ $admin = get_metastring_id('admin');
+ $yes = get_metastring_id('yes');
+ $one = get_metastring_id('1');
+
+ $query = "SELECT * FROM {$CONFIG->dbprefix}users_entity as e,
+ {$CONFIG->dbprefix}metadata as md
+ WHERE (
+ md.name_id = '$admin'
+ AND md.value_id IN ('$yes', '$one')
+ AND e.guid = md.entity_guid
+ AND e.guid = {$user_guid}
+ AND e.banned = 'no'
+ )";
+ } else {
+ $query = "SELECT * FROM {$CONFIG->dbprefix}users_entity as e
+ WHERE (
+ e.guid = {$user_guid}
+ AND e.admin = 'yes'
+ )";
+ }
+
+ // normalizing the results from get_data()
+ // See #1242
+ $info = get_data($query);
+ if (!((is_array($info) && count($info) < 1) || $info === FALSE)) {
+ return TRUE;
+ }
+ return FALSE;
+}
+
+/**
+ * Perform user authentication with a given username and password.
+ *
+ * @warning This returns an error message on failure. Use the identical operator to check
+ * for access: if (true === elgg_authenticate()) { ... }.
+ *
+ *
+ * @see login
+ *
+ * @param string $username The username
+ * @param string $password The password
+ *
+ * @return true|string True or an error message on failure
+ * @access private
+ */
+function elgg_authenticate($username, $password) {
+ $pam = new ElggPAM('user');
+ $credentials = array('username' => $username, 'password' => $password);
+ $result = $pam->authenticate($credentials);
+ if (!$result) {
+ return $pam->getFailureMessage();
+ }
+ return true;
+}
+
+/**
+ * Hook into the PAM system which accepts a username and password and attempts to authenticate
+ * it against a known user.
+ *
+ * @param array $credentials Associated array of credentials passed to
+ * Elgg's PAM system. This function expects
+ * 'username' and 'password' (cleartext).
+ *
+ * @return bool
+ * @throws LoginException
+ * @access private
+ */
+function pam_auth_userpass(array $credentials = array()) {
+
+ if (!isset($credentials['username']) || !isset($credentials['password'])) {
+ return false;
+ }
+
+ $user = get_user_by_username($credentials['username']);
+ if (!$user) {
+ throw new LoginException(elgg_echo('LoginException:UsernameFailure'));
+ }
+
+ if (check_rate_limit_exceeded($user->guid)) {
+ throw new LoginException(elgg_echo('LoginException:AccountLocked'));
+ }
+
+ if ($user->password !== generate_user_password($user, $credentials['password'])) {
+ log_login_failure($user->guid);
+ throw new LoginException(elgg_echo('LoginException:PasswordFailure'));
+ }
+
+ return true;
+}
+
+/**
+ * Log a failed login for $user_guid
+ *
+ * @param int $user_guid User GUID
+ *
+ * @return bool
+ */
+function log_login_failure($user_guid) {
+ $user_guid = (int)$user_guid;
+ $user = get_entity($user_guid);
+
+ if (($user_guid) && ($user) && ($user instanceof ElggUser)) {
+ $fails = (int)$user->getPrivateSetting("login_failures");
+ $fails++;
+
+ $user->setPrivateSetting("login_failures", $fails);
+ $user->setPrivateSetting("login_failure_$fails", time());
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Resets the fail login count for $user_guid
+ *
+ * @param int $user_guid User GUID
+ *
+ * @return bool true on success (success = user has no logged failed attempts)
+ */
+function reset_login_failure_count($user_guid) {
+ $user_guid = (int)$user_guid;
+ $user = get_entity($user_guid);
+
+ if (($user_guid) && ($user) && ($user instanceof ElggUser)) {
+ $fails = (int)$user->getPrivateSetting("login_failures");
+
+ if ($fails) {
+ for ($n = 1; $n <= $fails; $n++) {
+ $user->removePrivateSetting("login_failure_$n");
+ }
+
+ $user->removePrivateSetting("login_failures");
+
+ return true;
+ }
+
+ // nothing to reset
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Checks if the rate limit of failed logins has been exceeded for $user_guid.
+ *
+ * @param int $user_guid User GUID
+ *
+ * @return bool on exceeded limit.
+ */
+function check_rate_limit_exceeded($user_guid) {
+ // 5 failures in 5 minutes causes temporary block on logins
+ $limit = 5;
+ $user_guid = (int)$user_guid;
+ $user = get_entity($user_guid);
+
+ if (($user_guid) && ($user) && ($user instanceof ElggUser)) {
+ $fails = (int)$user->getPrivateSetting("login_failures");
+ if ($fails >= $limit) {
+ $cnt = 0;
+ $time = time();
+ for ($n = $fails; $n > 0; $n--) {
+ $f = $user->getPrivateSetting("login_failure_$n");
+ if ($f > $time - (60 * 5)) {
+ $cnt++;
+ }
+
+ if ($cnt == $limit) {
+ // Limit reached
+ return true;
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Logs in a specified ElggUser. For standard registration, use in conjunction
+ * with elgg_authenticate.
+ *
+ * @see elgg_authenticate
+ *
+ * @param ElggUser $user A valid Elgg user object
+ * @param boolean $persistent Should this be a persistent login?
+ *
+ * @return true or throws exception
+ * @throws LoginException
+ */
+function login(ElggUser $user, $persistent = false) {
+ global $CONFIG;
+
+ // User is banned, return false.
+ if ($user->isBanned()) {
+ throw new LoginException(elgg_echo('LoginException:BannedUser'));
+ }
+
+ $_SESSION['user'] = $user;
+ $_SESSION['guid'] = $user->getGUID();
+ $_SESSION['id'] = $_SESSION['guid'];
+ $_SESSION['username'] = $user->username;
+ $_SESSION['name'] = $user->name;
+
+ // if remember me checked, set cookie with token and store token on user
+ if (($persistent)) {
+ $code = (md5($user->name . $user->username . time() . rand()));
+ $_SESSION['code'] = $code;
+ $user->code = md5($code);
+ setcookie("elggperm", $code, (time() + (86400 * 30)), "/");
+ }
+
+ if (!$user->save() || !elgg_trigger_event('login', 'user', $user)) {
+ unset($_SESSION['username']);
+ unset($_SESSION['name']);
+ unset($_SESSION['code']);
+ unset($_SESSION['guid']);
+ unset($_SESSION['id']);
+ unset($_SESSION['user']);
+ setcookie("elggperm", "", (time() - (86400 * 30)), "/");
+ throw new LoginException(elgg_echo('LoginException:Unknown'));
+ }
+
+ // Users privilege has been elevated, so change the session id (prevents session fixation)
+ session_regenerate_id();
+
+ // Update statistics
+ set_last_login($_SESSION['guid']);
+ reset_login_failure_count($user->guid); // Reset any previous failed login attempts
+
+ return true;
+}
+
+/**
+ * Log the current user out
+ *
+ * @return bool
+ */
+function logout() {
+ global $CONFIG;
+
+ if (isset($_SESSION['user'])) {
+ if (!elgg_trigger_event('logout', 'user', $_SESSION['user'])) {
+ return false;
+ }
+ $_SESSION['user']->code = "";
+ $_SESSION['user']->save();
+ }
+
+ unset($_SESSION['username']);
+ unset($_SESSION['name']);
+ unset($_SESSION['code']);
+ unset($_SESSION['guid']);
+ unset($_SESSION['id']);
+ unset($_SESSION['user']);
+
+ setcookie("elggperm", "", (time() - (86400 * 30)), "/");
+
+ // pass along any messages
+ $old_msg = $_SESSION['msg'];
+
+ session_destroy();
+
+ // starting a default session to store any post-logout messages.
+ _elgg_session_boot(NULL, NULL, NULL);
+ $_SESSION['msg'] = $old_msg;
+
+ return TRUE;
+}
+
+/**
+ * Initialises the system session and potentially logs the user in
+ *
+ * This function looks for:
+ *
+ * 1. $_SESSION['id'] - if not present, we're logged out, and this is set to 0
+ * 2. The cookie 'elggperm' - if present, checks it for an authentication
+ * token, validates it, and potentially logs the user in
+ *
+ * @uses $_SESSION
+ *
+ * @return bool
+ * @access private
+ */
+function _elgg_session_boot() {
+ global $DB_PREFIX, $CONFIG;
+
+ // Use database for sessions
+ // HACK to allow access to prefix after object destruction
+ $DB_PREFIX = $CONFIG->dbprefix;
+ if ((!isset($CONFIG->use_file_sessions))) {
+ session_set_save_handler("_elgg_session_open",
+ "_elgg_session_close",
+ "_elgg_session_read",
+ "_elgg_session_write",
+ "_elgg_session_destroy",
+ "_elgg_session_gc");
+ }
+
+ session_name('Elgg');
+ session_start();
+
+ // Generate a simple token (private from potentially public session id)
+ if (!isset($_SESSION['__elgg_session'])) {
+ $_SESSION['__elgg_session'] = md5(microtime() . rand());
+ }
+
+ // test whether we have a user session
+ if (empty($_SESSION['guid'])) {
+
+ // clear session variables before checking cookie
+ unset($_SESSION['user']);
+ unset($_SESSION['id']);
+ unset($_SESSION['guid']);
+ unset($_SESSION['code']);
+
+ // is there a remember me cookie
+ if (isset($_COOKIE['elggperm'])) {
+ // we have a cookie, so try to log the user in
+ $code = $_COOKIE['elggperm'];
+ $code = md5($code);
+ if ($user = get_user_by_code($code)) {
+ // we have a user, log him in
+ $_SESSION['user'] = $user;
+ $_SESSION['id'] = $user->getGUID();
+ $_SESSION['guid'] = $_SESSION['id'];
+ $_SESSION['code'] = $_COOKIE['elggperm'];
+ }
+ }
+ } else {
+ // we have a session and we have already checked the fingerprint
+ // reload the user object from database in case it has changed during the session
+ if ($user = get_user($_SESSION['guid'])) {
+ $_SESSION['user'] = $user;
+ $_SESSION['id'] = $user->getGUID();
+ $_SESSION['guid'] = $_SESSION['id'];
+ } else {
+ // user must have been deleted with a session active
+ unset($_SESSION['user']);
+ unset($_SESSION['id']);
+ unset($_SESSION['guid']);
+ unset($_SESSION['code']);
+ }
+ }
+
+ if (isset($_SESSION['guid'])) {
+ set_last_action($_SESSION['guid']);
+ }
+
+ elgg_register_action('login', '', 'public');
+ elgg_register_action('logout');
+
+ // Register a default PAM handler
+ register_pam_handler('pam_auth_userpass');
+
+ // Initialise the magic session
+ global $SESSION;
+ $SESSION = new ElggSession();
+
+ // Finally we ensure that a user who has been banned with an open session is kicked.
+ if ((isset($_SESSION['user'])) && ($_SESSION['user']->isBanned())) {
+ session_destroy();
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Used at the top of a page to mark it as logged in users only.
+ *
+ * @return void
+ */
+function gatekeeper() {
+ if (!elgg_is_logged_in()) {
+ $_SESSION['last_forward_from'] = current_page_url();
+ register_error(elgg_echo('loggedinrequired'));
+ forward('', 'login');
+ }
+}
+
+/**
+ * Used at the top of a page to mark it as logged in admin or siteadmin only.
+ *
+ * @return void
+ */
+function admin_gatekeeper() {
+ gatekeeper();
+
+ if (!elgg_is_admin_logged_in()) {
+ $_SESSION['last_forward_from'] = current_page_url();
+ register_error(elgg_echo('adminrequired'));
+ forward('', 'admin');
+ }
+}
+
+/**
+ * Handles opening a session in the DB
+ *
+ * @param string $save_path The path to save the sessions
+ * @param string $session_name The name of the session
+ *
+ * @return true
+ * @todo Document
+ * @access private
+ */
+function _elgg_session_open($save_path, $session_name) {
+ global $sess_save_path;
+ $sess_save_path = $save_path;
+
+ return true;
+}
+
+/**
+ * Closes a session
+ *
+ * @todo implement
+ * @todo document
+ *
+ * @return true
+ * @access private
+ */
+function _elgg_session_close() {
+ return true;
+}
+
+/**
+ * Read the session data from DB failing back to file.
+ *
+ * @param string $id The session ID
+ *
+ * @return string
+ * @access private
+ */
+function _elgg_session_read($id) {
+ global $DB_PREFIX;
+
+ $id = sanitise_string($id);
+
+ try {
+ $result = get_data_row("SELECT * from {$DB_PREFIX}users_sessions where session='$id'");
+
+ if ($result) {
+ return (string)$result->data;
+ }
+
+ } catch (DatabaseException $e) {
+
+ // Fall back to file store in this case, since this likely means
+ // that the database hasn't been upgraded
+ global $sess_save_path;
+
+ $sess_file = "$sess_save_path/sess_$id";
+ return (string) @file_get_contents($sess_file);
+ }
+
+ return '';
+}
+
+/**
+ * Write session data to the DB falling back to file.
+ *
+ * @param string $id The session ID
+ * @param mixed $sess_data Session data
+ *
+ * @return bool
+ * @access private
+ */
+function _elgg_session_write($id, $sess_data) {
+ global $DB_PREFIX;
+
+ $id = sanitise_string($id);
+ $time = time();
+
+ try {
+ $sess_data_sanitised = sanitise_string($sess_data);
+
+ $q = "REPLACE INTO {$DB_PREFIX}users_sessions
+ (session, ts, data) VALUES
+ ('$id', '$time', '$sess_data_sanitised')";
+
+ if (insert_data($q) !== false) {
+ return true;
+ }
+ } catch (DatabaseException $e) {
+ // Fall back to file store in this case, since this likely means
+ // that the database hasn't been upgraded
+ global $sess_save_path;
+
+ $sess_file = "$sess_save_path/sess_$id";
+ if ($fp = @fopen($sess_file, "w")) {
+ $return = fwrite($fp, $sess_data);
+ fclose($fp);
+ return $return;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Destroy a DB session, falling back to file.
+ *
+ * @param string $id Session ID
+ *
+ * @return bool
+ * @access private
+ */
+function _elgg_session_destroy($id) {
+ global $DB_PREFIX;
+
+ $id = sanitise_string($id);
+
+ try {
+ return (bool)delete_data("DELETE from {$DB_PREFIX}users_sessions where session='$id'");
+ } catch (DatabaseException $e) {
+ // Fall back to file store in this case, since this likely means that
+ // the database hasn't been upgraded
+ global $sess_save_path;
+
+ $sess_file = "$sess_save_path/sess_$id";
+ return(@unlink($sess_file));
+ }
+
+ return false;
+}
+
+/**
+ * Perform garbage collection on session table / files
+ *
+ * @param int $maxlifetime Max age of a session
+ *
+ * @return bool
+ * @access private
+ */
+function _elgg_session_gc($maxlifetime) {
+ global $DB_PREFIX;
+
+ $life = time() - $maxlifetime;
+
+ try {
+ return (bool)delete_data("DELETE from {$DB_PREFIX}users_sessions where ts<'$life'");
+ } catch (DatabaseException $e) {
+ // Fall back to file store in this case, since this likely means that the database
+ // hasn't been upgraded
+ global $sess_save_path;
+
+ foreach (glob("$sess_save_path/sess_*") as $filename) {
+ if (filemtime($filename) < $life) {
+ @unlink($filename);
+ }
+ }
+ }
+
+ return true;
+}
diff --git a/engine/lib/sites.php b/engine/lib/sites.php
new file mode 100644
index 000000000..d9eb2d25e
--- /dev/null
+++ b/engine/lib/sites.php
@@ -0,0 +1,260 @@
+<?php
+/**
+ * Elgg sites
+ * Functions to manage multiple or single sites in an Elgg install
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.Site
+ */
+
+/**
+ * Get an ElggSite entity (default is current site)
+ *
+ * @param int $site_guid Optional. Site GUID.
+ *
+ * @return ElggSite
+ * @since 1.8.0
+ */
+function elgg_get_site_entity($site_guid = 0) {
+ global $CONFIG;
+
+ $result = false;
+
+ if ($site_guid == 0) {
+ $site = $CONFIG->site;
+ } else {
+ $site = get_entity($site_guid);
+ }
+
+ if($site instanceof ElggSite){
+ $result = $site;
+ }
+
+ return $result;
+}
+
+/**
+ * Return the site specific details of a site by a row.
+ *
+ * @param int $guid The site GUID
+ *
+ * @return mixed
+ * @access private
+ */
+function get_site_entity_as_row($guid) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ return get_data_row("SELECT * from {$CONFIG->dbprefix}sites_entity where guid=$guid");
+}
+
+/**
+ * Create or update the entities table for a given site.
+ * Call create_entity first.
+ *
+ * @param int $guid Site GUID
+ * @param string $name Site name
+ * @param string $description Site Description
+ * @param string $url URL of the site
+ *
+ * @return bool
+ * @access private
+ */
+function create_site_entity($guid, $name, $description, $url) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ $name = sanitise_string($name);
+ $description = sanitise_string($description);
+ $url = sanitise_string($url);
+
+ $row = get_entity_as_row($guid);
+
+ if ($row) {
+ // Exists and you have access to it
+ $query = "SELECT guid from {$CONFIG->dbprefix}sites_entity where guid = {$guid}";
+ if ($exists = get_data_row($query)) {
+ $query = "UPDATE {$CONFIG->dbprefix}sites_entity
+ set name='$name', description='$description', url='$url' where guid=$guid";
+ $result = update_data($query);
+
+ if ($result != false) {
+ // Update succeeded, continue
+ $entity = get_entity($guid);
+ if (elgg_trigger_event('update', $entity->type, $entity)) {
+ return $guid;
+ } else {
+ $entity->delete();
+ //delete_entity($guid);
+ }
+ }
+ } else {
+ // Update failed, attempt an insert.
+ $query = "INSERT into {$CONFIG->dbprefix}sites_entity
+ (guid, name, description, url) values ($guid, '$name', '$description', '$url')";
+ $result = insert_data($query);
+
+ if ($result !== false) {
+ $entity = get_entity($guid);
+ if (elgg_trigger_event('create', $entity->type, $entity)) {
+ return $guid;
+ } else {
+ $entity->delete();
+ //delete_entity($guid);
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Add a user to a site.
+ *
+ * @param int $site_guid Site guid
+ * @param int $user_guid User guid
+ *
+ * @return bool
+ */
+function add_site_user($site_guid, $user_guid) {
+ global $CONFIG;
+
+ $site_guid = (int)$site_guid;
+ $user_guid = (int)$user_guid;
+
+ return add_entity_relationship($user_guid, "member_of_site", $site_guid);
+}
+
+/**
+ * Remove a user from a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param int $user_guid User GUID
+ *
+ * @return bool
+ */
+function remove_site_user($site_guid, $user_guid) {
+ $site_guid = (int)$site_guid;
+ $user_guid = (int)$user_guid;
+
+ return remove_entity_relationship($user_guid, "member_of_site", $site_guid);
+}
+
+/**
+ * Add an object to a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param int $object_guid Object GUID
+ *
+ * @return mixed
+ */
+function add_site_object($site_guid, $object_guid) {
+ global $CONFIG;
+
+ $site_guid = (int)$site_guid;
+ $object_guid = (int)$object_guid;
+
+ return add_entity_relationship($object_guid, "member_of_site", $site_guid);
+}
+
+/**
+ * Remove an object from a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param int $object_guid Object GUID
+ *
+ * @return bool
+ */
+function remove_site_object($site_guid, $object_guid) {
+ $site_guid = (int)$site_guid;
+ $object_guid = (int)$object_guid;
+
+ return remove_entity_relationship($object_guid, "member_of_site", $site_guid);
+}
+
+/**
+ * Get the objects belonging to a site.
+ *
+ * @param int $site_guid Site GUID
+ * @param string $subtype Subtype
+ * @param int $limit Limit
+ * @param int $offset Offset
+ *
+ * @return mixed
+ */
+function get_site_objects($site_guid, $subtype = "", $limit = 10, $offset = 0) {
+ $site_guid = (int)$site_guid;
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => 'member_of_site',
+ 'relationship_guid' => $site_guid,
+ 'inverse_relationship' => TRUE,
+ 'types' => 'object',
+ 'subtypes' => $subtype,
+ 'limit' => $limit,
+ 'offset' => $offset
+ ));
+}
+
+/**
+ * Return the site via a url.
+ *
+ * @param string $url The URL of a site
+ *
+ * @return mixed
+ */
+function get_site_by_url($url) {
+ global $CONFIG;
+
+ $url = sanitise_string($url);
+
+ $row = get_data_row("SELECT * from {$CONFIG->dbprefix}sites_entity where url='$url'");
+
+ if ($row) {
+ return get_entity($row->guid);
+ }
+
+ return false;
+}
+
+/**
+ * Retrieve a site and return the domain portion of its url.
+ *
+ * @param int $guid ElggSite GUID
+ *
+ * @return string
+ */
+function get_site_domain($guid) {
+ $guid = (int)$guid;
+
+ $site = get_entity($guid);
+ if ($site instanceof ElggSite) {
+ $breakdown = parse_url($site->url);
+ return $breakdown['host'];
+ }
+
+ return false;
+}
+
+/**
+ * Unit tests for sites
+ *
+ * @param sting $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function sites_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = "{$CONFIG->path}engine/tests/objects/sites.php";
+ return $value;
+}
+
+// Register with unit test
+elgg_register_plugin_hook_handler('unit_test', 'system', 'sites_test');
diff --git a/engine/lib/statistics.php b/engine/lib/statistics.php
new file mode 100644
index 000000000..5ee640549
--- /dev/null
+++ b/engine/lib/statistics.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Elgg statistics library.
+ *
+ * This file contains a number of functions for obtaining statistics about the running system.
+ * These statistics are mainly used by the administration pages, and is also where the basic
+ * views for statistics are added.
+ *
+ * @package Elgg.Core
+ * @subpackage Statistics
+ */
+
+/**
+ * Return an array reporting the number of various entities in the system.
+ *
+ * @param int $owner_guid Optional owner of the statistics
+ *
+ * @return array
+ */
+function get_entity_statistics($owner_guid = 0) {
+ global $CONFIG;
+
+ $entity_stats = array();
+ $owner_guid = (int)$owner_guid;
+
+ $query = "SELECT distinct e.type,s.subtype,e.subtype as subtype_id
+ from {$CONFIG->dbprefix}entities e left
+ join {$CONFIG->dbprefix}entity_subtypes s on e.subtype=s.id";
+
+ $owner_query = "";
+ if ($owner_guid) {
+ $query .= " where owner_guid=$owner_guid";
+ $owner_query = "and owner_guid=$owner_guid ";
+ }
+
+ // Get a list of major types
+
+ $types = get_data($query);
+ foreach ($types as $type) {
+ // assume there are subtypes for now
+ if (!is_array($entity_stats[$type->type])) {
+ $entity_stats[$type->type] = array();
+ }
+
+ $query = "SELECT count(*) as count
+ from {$CONFIG->dbprefix}entities where type='{$type->type}' $owner_query";
+
+ if ($type->subtype) {
+ $query .= " and subtype={$type->subtype_id}";
+ }
+
+ $subtype_cnt = get_data_row($query);
+
+ if ($type->subtype) {
+ $entity_stats[$type->type][$type->subtype] = $subtype_cnt->count;
+ } else {
+ $entity_stats[$type->type]['__base__'] = $subtype_cnt->count;
+ }
+ }
+
+ return $entity_stats;
+}
+
+/**
+ * Return the number of users registered in the system.
+ *
+ * @param bool $show_deactivated Count not enabled users?
+ *
+ * @return int
+ */
+function get_number_users($show_deactivated = false) {
+ global $CONFIG;
+
+ $access = "";
+
+ if (!$show_deactivated) {
+ $access = "and " . get_access_sql_suffix();
+ }
+
+ $query = "SELECT count(*) as count
+ from {$CONFIG->dbprefix}entities where type='user' $access";
+
+ $result = get_data_row($query);
+
+ if ($result) {
+ return $result->count;
+ }
+
+ return false;
+}
+
+/**
+ * Return a list of how many users are currently online, rendered as a view.
+ *
+ * @return string
+ */
+function get_online_users() {
+ $count = find_active_users(600, 10, 0, true);
+ $objects = find_active_users(600, 10);
+
+ if ($objects) {
+ return elgg_view_entity_list($objects, array(
+ 'count' => $count,
+ 'limit' => 10
+ ));
+ }
+}
+
+/**
+ * Initialise the statistics admin page.
+ *
+ * @return void
+ * @access private
+ */
+function statistics_init() {
+ elgg_extend_view('core/settings/statistics', 'core/settings/statistics/online');
+ elgg_extend_view('core/settings/statistics', 'core/settings/statistics/numentities');
+}
+
+/// Register init function
+elgg_register_event_handler('init', 'system', 'statistics_init');
diff --git a/engine/lib/system_log.php b/engine/lib/system_log.php
new file mode 100644
index 000000000..53fa24557
--- /dev/null
+++ b/engine/lib/system_log.php
@@ -0,0 +1,299 @@
+<?php
+/**
+ * Elgg system log.
+ * Listens to events and writes crud events into the system log database.
+ *
+ * @package Elgg.Core
+ * @subpackage Logging
+ */
+
+/**
+ * Retrieve the system log based on a number of parameters.
+ *
+ * @param int|array $by_user The guid(s) of the user(s) who initiated the event.
+ * Use 0 for unowned entries. Anything else falsey means anyone.
+ * @param string $event The event you are searching on.
+ * @param string $class The class of object it effects.
+ * @param string $type The type
+ * @param string $subtype The subtype.
+ * @param int $limit Maximum number of responses to return.
+ * @param int $offset Offset of where to start.
+ * @param bool $count Return count or not
+ * @param int $timebefore Lower time limit
+ * @param int $timeafter Upper time limit
+ * @param int $object_id GUID of an object
+ * @param str $ip_address The IP address.
+ * @return mixed
+ */
+function get_system_log($by_user = "", $event = "", $class = "", $type = "", $subtype = "",
+$limit = 10, $offset = 0, $count = false, $timebefore = 0, $timeafter = 0, $object_id = 0,
+$ip_address = false) {
+
+ global $CONFIG;
+
+ $by_user_orig = $by_user;
+ if (is_array($by_user) && sizeof($by_user) > 0) {
+ foreach ($by_user as $key => $val) {
+ $by_user[$key] = (int) $val;
+ }
+ } else {
+ $by_user = (int)$by_user;
+ }
+
+ $event = sanitise_string($event);
+ $class = sanitise_string($class);
+ $type = sanitise_string($type);
+ $subtype = sanitise_string($subtype);
+ $ip_address = sanitise_string($ip_address);
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+
+ $where = array();
+
+ if ($by_user_orig !== "" && $by_user_orig !== false && $by_user_orig !== null) {
+ if (is_int($by_user)) {
+ $where[] = "performed_by_guid=$by_user";
+ } else if (is_array($by_user)) {
+ $where [] = "performed_by_guid in (" . implode(",", $by_user) . ")";
+ }
+ }
+ if ($event != "") {
+ $where[] = "event='$event'";
+ }
+ if ($class !== "") {
+ $where[] = "object_class='$class'";
+ }
+ if ($type != "") {
+ $where[] = "object_type='$type'";
+ }
+ if ($subtype !== "") {
+ $where[] = "object_subtype='$subtype'";
+ }
+
+ if ($timebefore) {
+ $where[] = "time_created < " . ((int) $timebefore);
+ }
+ if ($timeafter) {
+ $where[] = "time_created > " . ((int) $timeafter);
+ }
+ if ($object_id) {
+ $where[] = "object_id = " . ((int) $object_id);
+ }
+ if ($ip_address) {
+ $where[] = "ip_address = '$ip_address'";
+ }
+
+ $select = "*";
+ if ($count) {
+ $select = "count(*) as count";
+ }
+ $query = "SELECT $select from {$CONFIG->dbprefix}system_log where 1 ";
+ foreach ($where as $w) {
+ $query .= " and $w";
+ }
+
+ if (!$count) {
+ $query .= " order by time_created desc";
+ $query .= " limit $offset, $limit"; // Add order and limit
+ }
+
+ if ($count) {
+ $numrows = get_data_row($query);
+ if ($numrows) {
+ return $numrows->count;
+ }
+ } else {
+ return get_data($query);
+ }
+
+ return false;
+}
+
+/**
+ * Return a specific log entry.
+ *
+ * @param int $entry_id The log entry
+ *
+ * @return mixed
+ */
+function get_log_entry($entry_id) {
+ global $CONFIG;
+
+ $entry_id = (int)$entry_id;
+
+ return get_data_row("SELECT * from {$CONFIG->dbprefix}system_log where id=$entry_id");
+}
+
+/**
+ * Return the object referred to by a given log entry
+ *
+ * @param int $entry_id The log entry
+ *
+ * @return mixed
+ */
+function get_object_from_log_entry($entry_id) {
+ $entry = get_log_entry($entry_id);
+
+ if ($entry) {
+ $class = $entry->object_class;
+ // surround with try/catch because object could be disabled
+ try {
+ $object = new $class($entry->object_id);
+ } catch (Exception $e) {
+
+ }
+ if ($object) {
+ return $object;
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Log a system event related to a specific object.
+ *
+ * This is called by the event system and should not be called directly.
+ *
+ * @param object $object The object you're talking about.
+ * @param string $event The event being logged
+ * @return void
+ */
+function system_log($object, $event) {
+ global $CONFIG;
+ static $log_cache;
+ static $cache_size = 0;
+
+ if ($object instanceof Loggable) {
+
+ if (datalist_get('version') < 2012012000) {
+ // this is a site that doesn't have the ip_address column yet
+ return;
+ }
+
+ // reset cache if it has grown too large
+ if (!is_array($log_cache) || $cache_size > 500) {
+ $log_cache = array();
+ $cache_size = 0;
+ }
+
+ // Has loggable interface, extract the necessary information and store
+ $object_id = (int)$object->getSystemLogID();
+ $object_class = $object->getClassName();
+ $object_type = $object->getType();
+ $object_subtype = $object->getSubtype();
+ $event = sanitise_string($event);
+ $time = time();
+ $ip_address = sanitise_string($_SERVER['REMOTE_ADDR']);
+ $performed_by = elgg_get_logged_in_user_guid();
+
+ if (isset($object->access_id)) {
+ $access_id = $object->access_id;
+ } else {
+ $access_id = ACCESS_PUBLIC;
+ }
+ if (isset($object->enabled)) {
+ $enabled = $object->enabled;
+ } else {
+ $enabled = 'yes';
+ }
+
+ if (isset($object->owner_guid)) {
+ $owner_guid = $object->owner_guid;
+ } else {
+ $owner_guid = 0;
+ }
+
+ // Create log if we haven't already created it
+ if (!isset($log_cache[$time][$object_id][$event])) {
+ $query = "INSERT DELAYED into {$CONFIG->dbprefix}system_log
+ (object_id, object_class, object_type, object_subtype, event,
+ performed_by_guid, owner_guid, access_id, enabled, time_created, ip_address)
+ VALUES
+ ('$object_id','$object_class','$object_type', '$object_subtype', '$event',
+ $performed_by, $owner_guid, $access_id, '$enabled', '$time', '$ip_address')";
+
+ insert_data($query);
+
+ $log_cache[$time][$object_id][$event] = true;
+ $cache_size += 1;
+ }
+ }
+}
+
+/**
+ * This function creates an archive copy of the system log.
+ *
+ * @param int $offset An offset in seconds from now to archive (useful for log rotation)
+ *
+ * @return bool
+ */
+function archive_log($offset = 0) {
+ global $CONFIG;
+
+ $offset = (int)$offset;
+ $now = time(); // Take a snapshot of now
+
+ $ts = $now - $offset;
+
+ // create table
+ $query = "CREATE TABLE {$CONFIG->dbprefix}system_log_$now as
+ SELECT * from {$CONFIG->dbprefix}system_log WHERE time_created<$ts";
+
+ if (!update_data($query)) {
+ return false;
+ }
+
+ // delete
+ // Don't delete on time since we are running in a concurrent environment
+ if (delete_data("DELETE from {$CONFIG->dbprefix}system_log WHERE time_created<$ts") === false) {
+ return false;
+ }
+
+ // alter table to engine
+ if (!update_data("ALTER TABLE {$CONFIG->dbprefix}system_log_$now engine=archive")) {
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Default system log handler, allows plugins to override, extend or disable logging.
+ *
+ * @param string $event Event name
+ * @param string $object_type Object type
+ * @param Loggable $object Object to log
+ *
+ * @return true
+ */
+function system_log_default_logger($event, $object_type, $object) {
+ system_log($object['object'], $object['event']);
+
+ return true;
+}
+
+/**
+ * System log listener.
+ * This function listens to all events in the system and logs anything appropriate.
+ *
+ * @param String $event Event name
+ * @param String $object_type Type of object
+ * @param Loggable $object Object to log
+ *
+ * @return true
+ * @access private
+ */
+function system_log_listener($event, $object_type, $object) {
+ if (($object_type != 'systemlog') && ($event != 'log')) {
+ elgg_trigger_event('log', 'systemlog', array('object' => $object, 'event' => $event));
+ }
+
+ return true;
+}
+
+/** Register event to listen to all events **/
+elgg_register_event_handler('all', 'all', 'system_log_listener', 400);
+
+/** Register a default system log handler */
+elgg_register_event_handler('log', 'systemlog', 'system_log_default_logger', 999);
diff --git a/engine/lib/tags.php b/engine/lib/tags.php
new file mode 100644
index 000000000..a0887d0f3
--- /dev/null
+++ b/engine/lib/tags.php
@@ -0,0 +1,353 @@
+<?php
+/**
+ * Elgg tags
+ * Functions for managing tags and tag clouds.
+ *
+ * @package Elgg.Core
+ * @subpackage Tags
+ */
+
+/**
+ * The algorithm working out the size of font based on the number of tags.
+ * This is quick and dirty.
+ *
+ * @param int $min Min size
+ * @param int $max Max size
+ * @param int $number_of_tags The number of tags
+ * @param int $buckets The number of buckets
+ *
+ * @return int
+ * @access private
+ */
+function calculate_tag_size($min, $max, $number_of_tags, $buckets = 6) {
+ $delta = (($max - $min) / $buckets);
+ $thresholds = array();
+
+ for ($n = 1; $n <= $buckets; $n++) {
+ $thresholds[$n - 1] = ($min + $n) * $delta;
+ }
+
+ // Correction
+ if ($thresholds[$buckets - 1] > $max) {
+ $thresholds[$buckets - 1] = $max;
+ }
+
+ $size = 0;
+ for ($n = 0; $n < count($thresholds); $n++) {
+ if ($number_of_tags >= $thresholds[$n]) {
+ $size = $n;
+ }
+ }
+
+ return $size;
+}
+
+/**
+ * This function generates an array of tags with a weighting.
+ *
+ * @param array $tags The array of tags.
+ * @param int $buckets The number of buckets
+ *
+ * @return An associated array of tags with a weighting, this can then be mapped to a display class.
+ * @access private
+ */
+function generate_tag_cloud(array $tags, $buckets = 6) {
+ $cloud = array();
+
+ $min = 65535;
+ $max = 0;
+
+ foreach ($tags as $tag) {
+ $cloud[$tag]++;
+
+ if ($cloud[$tag] > $max) {
+ $max = $cloud[$tag];
+ }
+
+ if ($cloud[$tag] < $min) {
+ $min = $cloud[$tag];
+ }
+ }
+
+ foreach ($cloud as $k => $v) {
+ $cloud[$k] = calculate_tag_size($min, $max, $v, $buckets);
+ }
+
+ return $cloud;
+}
+
+/**
+ * Get popular tags and their frequencies
+ *
+ * Supports similar arguments as elgg_get_entities()
+ *
+ * @param array $options Array in format:
+ *
+ * threshold => INT minimum tag count
+ *
+ * tag_names => array() metadata tag names - must be registered tags
+ *
+ * limit => INT number of tags to return
+ *
+ * types => NULL|STR entity type (SQL: type = '$type')
+ *
+ * subtypes => NULL|STR entity subtype (SQL: subtype = '$subtype')
+ *
+ * type_subtype_pairs => NULL|ARR (array('type' => 'subtype'))
+ * (SQL: type = '$type' AND subtype = '$subtype') pairs
+ *
+ * owner_guids => NULL|INT entity guid
+ *
+ * container_guids => NULL|INT container_guid
+ *
+ * site_guids => NULL (current_site)|INT site_guid
+ *
+ * created_time_lower => NULL|INT Created time lower boundary in epoch time
+ *
+ * created_time_upper => NULL|INT Created time upper boundary in epoch time
+ *
+ * modified_time_lower => NULL|INT Modified time lower boundary in epoch time
+ *
+ * modified_time_upper => NULL|INT Modified time upper boundary in epoch time
+ *
+ * wheres => array() Additional where clauses to AND together
+ *
+ * joins => array() Additional joins
+ *
+ * @return false/array - if no tags or error, false
+ * otherwise, array of objects with ->tag and ->total values
+ * @since 1.7.1
+ */
+function elgg_get_tags(array $options = array()) {
+ global $CONFIG;
+
+ $defaults = array(
+ 'threshold' => 1,
+ 'tag_names' => array(),
+ 'limit' => 10,
+
+ 'types' => ELGG_ENTITIES_ANY_VALUE,
+ 'subtypes' => ELGG_ENTITIES_ANY_VALUE,
+ 'type_subtype_pairs' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'owner_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'container_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'site_guids' => $CONFIG->site_guid,
+
+ 'modified_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'modified_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+ 'created_time_lower' => ELGG_ENTITIES_ANY_VALUE,
+ 'created_time_upper' => ELGG_ENTITIES_ANY_VALUE,
+
+ 'joins' => array(),
+ 'wheres' => array(),
+ );
+
+
+ $options = array_merge($defaults, $options);
+
+ $singulars = array('type', 'subtype', 'owner_guid', 'container_guid', 'site_guid', 'tag_name');
+ $options = elgg_normalise_plural_options_array($options, $singulars);
+
+ $registered_tags = elgg_get_registered_tag_metadata_names();
+
+ if (!is_array($options['tag_names'])) {
+ return false;
+ }
+
+ // empty array so use all registered tag names
+ if (count($options['tag_names']) == 0) {
+ $options['tag_names'] = $registered_tags;
+ }
+
+ $diff = array_diff($options['tag_names'], $registered_tags);
+ if (count($diff) > 0) {
+ elgg_deprecated_notice('Tag metadata names must be registered by elgg_register_tag_metadata_name()', 1.7);
+ // return false;
+ }
+
+
+ $wheres = $options['wheres'];
+
+ // catch for tags that were spaces
+ $wheres[] = "msv.string != ''";
+
+ foreach ($options['tag_names'] as $tag) {
+ $sanitised_tags[] = '"' . sanitise_string($tag) . '"';
+ }
+ $tags_in = implode(',', $sanitised_tags);
+ $wheres[] = "(msn.string IN ($tags_in))";
+
+ $wheres[] = elgg_get_entity_type_subtype_where_sql('e', $options['types'],
+ $options['subtypes'], $options['type_subtype_pairs']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.site_guid', $options['site_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.owner_guid', $options['owner_guids']);
+ $wheres[] = elgg_get_guid_based_where_sql('e.container_guid', $options['container_guids']);
+ $wheres[] = elgg_get_entity_time_where_sql('e', $options['created_time_upper'],
+ $options['created_time_lower'], $options['modified_time_upper'], $options['modified_time_lower']);
+
+ // see if any functions failed
+ // remove empty strings on successful functions
+ foreach ($wheres as $i => $where) {
+ if ($where === FALSE) {
+ return FALSE;
+ } elseif (empty($where)) {
+ unset($wheres[$i]);
+ }
+ }
+
+ // remove identical where clauses
+ $wheres = array_unique($wheres);
+
+ $joins = $options['joins'];
+
+ $joins[] = "JOIN {$CONFIG->dbprefix}metadata md on md.entity_guid = e.guid";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metastrings msv on msv.id = md.value_id";
+ $joins[] = "JOIN {$CONFIG->dbprefix}metastrings msn on md.name_id = msn.id";
+
+ // remove identical join clauses
+ $joins = array_unique($joins);
+
+ foreach ($joins as $i => $join) {
+ if ($join === FALSE) {
+ return FALSE;
+ } elseif (empty($join)) {
+ unset($joins[$i]);
+ }
+ }
+
+
+ $query = "SELECT msv.string as tag, count(msv.id) as total ";
+ $query .= "FROM {$CONFIG->dbprefix}entities e ";
+
+ // add joins
+ foreach ($joins as $j) {
+ $query .= " $j ";
+ }
+
+ // add wheres
+ $query .= ' WHERE ';
+
+ foreach ($wheres as $w) {
+ $query .= " $w AND ";
+ }
+
+ // Add access controls
+ $query .= get_access_sql_suffix('e');
+
+ $threshold = sanitise_int($options['threshold']);
+ $query .= " GROUP BY msv.string HAVING total >= {$threshold} ";
+ $query .= " ORDER BY total DESC ";
+
+ $limit = sanitise_int($options['limit']);
+ $query .= " LIMIT {$limit} ";
+
+ return get_data($query);
+}
+
+/**
+ * Returns viewable tagcloud
+ *
+ * @see elgg_get_tags
+ *
+ * @param array $options Any elgg_get_tags() options except:
+ *
+ * type => must be single entity type
+ *
+ * subtype => must be single entity subtype
+ *
+ * @return string
+ * @since 1.7.1
+ */
+function elgg_view_tagcloud(array $options = array()) {
+
+ $type = $subtype = '';
+ if (isset($options['type'])) {
+ $type = $options['type'];
+ }
+ if (isset($options['subtype'])) {
+ $subtype = $options['subtype'];
+ }
+
+ $tag_data = elgg_get_tags($options);
+ return elgg_view("output/tagcloud", array(
+ 'value' => $tag_data,
+ 'type' => $type,
+ 'subtype' => $subtype,
+ ));
+}
+
+/**
+ * Registers a metadata name as containing tags for an entity.
+ * This is required if you are using a non-standard metadata name
+ * for your tags.
+ *
+ * @param string $name Tag name
+ *
+ * @return bool
+ * @since 1.7.0
+ */
+function elgg_register_tag_metadata_name($name) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->registered_tag_metadata_names)) {
+ $CONFIG->registered_tag_metadata_names = array();
+ }
+
+ if (!in_array($name, $CONFIG->registered_tag_metadata_names)) {
+ $CONFIG->registered_tag_metadata_names[] = $name;
+ }
+
+ return TRUE;
+}
+
+/**
+ * Returns an array of valid metadata names for tags.
+ *
+ * @return array
+ * @since 1.7.0
+ */
+function elgg_get_registered_tag_metadata_names() {
+ global $CONFIG;
+
+ $names = (isset($CONFIG->registered_tag_metadata_names))
+ ? $CONFIG->registered_tag_metadata_names : array();
+
+ return $names;
+}
+
+/**
+ * Page hander for tags
+ *
+ * @param array $page Page array
+ *
+ * @return bool
+ * @access private
+ */
+function elgg_tagcloud_page_handler($page) {
+
+ $title = elgg_view_title(elgg_echo('tags:site_cloud'));
+ $options = array(
+ 'threshold' => 0,
+ 'limit' => 100,
+ 'tag_name' => 'tags',
+ );
+ $tags = elgg_view_tagcloud($options);
+ $content = $title . $tags;
+ $body = elgg_view_layout('one_sidebar', array('content' => $content));
+
+ echo elgg_view_page(elgg_echo('tags:site_cloud'), $body);
+ return true;
+}
+
+/**
+ * @access private
+ */
+function elgg_tags_init() {
+ // register the standard tags metadata name
+ elgg_register_tag_metadata_name('tags');
+
+ elgg_register_page_handler('tags', 'elgg_tagcloud_page_handler');
+}
+
+elgg_register_event_handler('init', 'system', 'elgg_tags_init'); \ No newline at end of file
diff --git a/engine/lib/upgrade.php b/engine/lib/upgrade.php
new file mode 100644
index 000000000..f4f4b16f5
--- /dev/null
+++ b/engine/lib/upgrade.php
@@ -0,0 +1,368 @@
+<?php
+/**
+ * Elgg upgrade library.
+ * Contains code for handling versioning and upgrades.
+ *
+ * @package Elgg.Core
+ * @subpackage Upgrade
+ */
+
+/**
+ * Run any php upgrade scripts which are required
+ *
+ * @param int $version Version upgrading from.
+ * @param bool $quiet Suppress errors. Don't use this.
+ *
+ * @return bool
+ * @access private
+ */
+function upgrade_code($version, $quiet = FALSE) {
+ global $CONFIG;
+
+ $version = (int) $version;
+ $upgrade_path = elgg_get_config('path') . 'engine/lib/upgrades/';
+ $processed_upgrades = elgg_get_processed_upgrades();
+
+ // upgrading from 1.7 to 1.8. Need to bootstrap.
+ if (!$processed_upgrades) {
+ elgg_upgrade_bootstrap_17_to_18();
+
+ // grab accurate processed upgrades
+ $processed_upgrades = elgg_get_processed_upgrades();
+ }
+
+ $upgrade_files = elgg_get_upgrade_files($upgrade_path);
+
+ if ($upgrade_files === false) {
+ return false;
+ }
+
+ $upgrades = elgg_get_unprocessed_upgrades($upgrade_files, $processed_upgrades);
+
+ // Sort and execute
+ sort($upgrades);
+
+ foreach ($upgrades as $upgrade) {
+ $upgrade_version = elgg_get_upgrade_file_version($upgrade);
+ $success = true;
+
+ // hide all errors.
+ if ($quiet) {
+ // hide include errors as well as any exceptions that might happen
+ try {
+ if (!@include("$upgrade_path/$upgrade")) {
+ $success = false;
+ error_log("Could not include $upgrade_path/$upgrade");
+ }
+ } catch (Exception $e) {
+ $success = false;
+ error_log($e->getmessage());
+ }
+ } else {
+ if (!include("$upgrade_path/$upgrade")) {
+ $success = false;
+ error_log("Could not include $upgrade_path/$upgrade");
+ }
+ }
+
+ if ($success) {
+ // incrementally set upgrade so we know where to start if something fails.
+ $processed_upgrades[] = $upgrade;
+
+ // don't set the version to a lower number in instances where an upgrade
+ // has been merged from a lower version of Elgg
+ if ($upgrade_version > $version) {
+ datalist_set('version', $upgrade_version);
+ }
+
+ elgg_set_processed_upgrades($processed_upgrades);
+ } else {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/**
+ * Saves the processed upgrades to a dataset.
+ *
+ * @param array $processed_upgrades An array of processed upgrade filenames
+ * (not the path, just the file)
+ * @return bool
+ * @access private
+ */
+function elgg_set_processed_upgrades(array $processed_upgrades) {
+ $processed_upgrades = array_unique($processed_upgrades);
+ return datalist_set('processed_upgrades', serialize($processed_upgrades));
+}
+
+/**
+ * Gets a list of processes upgrades
+ *
+ * @return mixed Array of processed upgrade filenames or false
+ * @access private
+ */
+function elgg_get_processed_upgrades() {
+ $upgrades = datalist_get('processed_upgrades');
+ $unserialized = unserialize($upgrades);
+ return $unserialized;
+}
+
+/**
+ * Returns the version of the upgrade filename.
+ *
+ * @param string $filename The upgrade filename. No full path.
+ * @return int|false
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_get_upgrade_file_version($filename) {
+ preg_match('/^([0-9]{10})([\.a-z0-9-_]+)?\.(php)$/i', $filename, $matches);
+
+ if (isset($matches[1])) {
+ return (int) $matches[1];
+ }
+
+ return false;
+}
+
+/**
+ * Returns a list of upgrade files relative to the $upgrade_path dir.
+ *
+ * @param string $upgrade_path The up
+ * @return array|false
+ * @access private
+ */
+function elgg_get_upgrade_files($upgrade_path = null) {
+ if (!$upgrade_path) {
+ $upgrade_path = elgg_get_config('path') . 'engine/lib/upgrades/';
+ }
+ $upgrade_path = sanitise_filepath($upgrade_path);
+ $handle = opendir($upgrade_path);
+
+ if (!$handle) {
+ return false;
+ }
+
+ $upgrade_files = array();
+
+ while ($upgrade_file = readdir($handle)) {
+ // make sure this is a wellformed upgrade.
+ if (is_dir($upgrade_path . '$upgrade_file')) {
+ continue;
+ }
+ $upgrade_version = elgg_get_upgrade_file_version($upgrade_file);
+ if (!$upgrade_version) {
+ continue;
+ }
+ $upgrade_files[] = $upgrade_file;
+ }
+
+ sort($upgrade_files);
+
+ return $upgrade_files;
+}
+
+/**
+ * Get the current Elgg version information
+ *
+ * @param bool $humanreadable Whether to return a human readable version (default: false)
+ *
+ * @return string|false Depending on success
+ */
+function get_version($humanreadable = false) {
+ global $CONFIG;
+
+ static $version, $release;
+
+ if (isset($CONFIG->path)) {
+ if (!isset($version) || !isset($release)) {
+ if (!include($CONFIG->path . "version.php")) {
+ return false;
+ }
+ }
+ return (!$humanreadable) ? $version : $release;
+ }
+
+ return false;
+}
+
+/**
+ * Checks if any upgrades need to be run.
+ *
+ * @param null|array $upgrade_files Optional upgrade files
+ * @param null|array $processed_upgrades Optional processed upgrades
+ *
+ * @return array
+ * @access private
+ */
+function elgg_get_unprocessed_upgrades($upgrade_files = null, $processed_upgrades = null) {
+ if ($upgrade_files === null) {
+ $upgrade_files = elgg_get_upgrade_files();
+ }
+
+ if ($processed_upgrades === null) {
+ $processed_upgrades = unserialize(datalist_get('processed_upgrades'));
+ if (!is_array($processed_upgrades)) {
+ $processed_upgrades = array();
+ }
+ }
+
+ $unprocessed = array_diff($upgrade_files, $processed_upgrades);
+ return $unprocessed;
+}
+
+/**
+ * Determines whether or not the database needs to be upgraded.
+ *
+ * @return bool Depending on whether or not the db version matches the code version
+ * @access private
+ */
+function version_upgrade_check() {
+ $dbversion = (int) datalist_get('version');
+ $version = get_version();
+
+ if ($version > $dbversion) {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Upgrades Elgg Database and code
+ *
+ * @return bool
+ * @access private
+ */
+function version_upgrade() {
+ // It's possible large upgrades could exceed the max execution time.
+ set_time_limit(0);
+
+ $dbversion = (int) datalist_get('version');
+
+ // No version number? Oh snap...this is an upgrade from a clean installation < 1.7.
+ // Run all upgrades without error reporting and hope for the best.
+ // See http://trac.elgg.org/elgg/ticket/1432 for more.
+ $quiet = !$dbversion;
+
+ // Note: Database upgrades are deprecated as of 1.8. Use code upgrades. See #1433
+ if (db_upgrade($dbversion, '', $quiet)) {
+ system_message(elgg_echo('upgrade:db'));
+ }
+
+ if (upgrade_code($dbversion, $quiet)) {
+ system_message(elgg_echo('upgrade:core'));
+
+ // Now we trigger an event to give the option for plugins to do something
+ $upgrade_details = new stdClass;
+ $upgrade_details->from = $dbversion;
+ $upgrade_details->to = get_version();
+
+ elgg_trigger_event('upgrade', 'upgrade', $upgrade_details);
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Boot straps into 1.8 upgrade system from 1.7
+ *
+ * This runs all the 1.7 upgrades, then sets the processed_upgrades to all existing 1.7 upgrades.
+ * Control is then passed back to the main upgrade function which detects and runs the
+ * 1.8 upgrades, regardless of filename convention.
+ *
+ * @return bool
+ * @access private
+ */
+function elgg_upgrade_bootstrap_17_to_18() {
+ $db_version = (int) datalist_get('version');
+
+ // the 1.8 upgrades before the upgrade system change that are interspersed with 1.7 upgrades.
+ $upgrades_18 = array(
+ '2010111501.php',
+ '2010121601.php',
+ '2010121602.php',
+ '2010121701.php',
+ '2010123101.php',
+ '2011010101.php',
+ );
+
+ $upgrades_17 = array();
+ $upgrade_files = elgg_get_upgrade_files();
+ $processed_upgrades = array();
+
+ foreach ($upgrade_files as $upgrade_file) {
+ // ignore if not in 1.7 format or if it's a 1.8 upgrade
+ if (in_array($upgrade_file, $upgrades_18) || !preg_match("/[0-9]{10}\.php/", $upgrade_file)) {
+ continue;
+ }
+
+ $upgrade_version = elgg_get_upgrade_file_version($upgrade_file);
+
+ // this has already been run in a previous 1.7.X -> 1.7.X upgrade
+ if ($upgrade_version < $db_version) {
+ $processed_upgrades[] = $upgrade_file;
+ }
+ }
+
+ return elgg_set_processed_upgrades($processed_upgrades);
+}
+
+/**
+ * Creates a table {prefix}upgrade_lock that is used as a mutex for upgrades.
+ *
+ * @see _elgg_upgrade_lock()
+ *
+ * @return bool
+ * @access private
+ */
+function _elgg_upgrade_lock() {
+ global $CONFIG;
+
+ if (!_elgg_upgrade_is_locked()) {
+ // lock it
+ insert_data("create table {$CONFIG->dbprefix}upgrade_lock (id INT)");
+ elgg_log('Locked for upgrade.', 'NOTICE');
+ return true;
+ }
+
+ elgg_log('Cannot lock for upgrade: already locked.', 'WARNING');
+ return false;
+}
+
+/**
+ * Unlocks upgrade.
+ *
+ * @see _elgg_upgrade_lock()
+ *
+ * @access private
+ */
+function _elgg_upgrade_unlock() {
+ global $CONFIG;
+ delete_data("drop table {$CONFIG->dbprefix}upgrade_lock");
+ elgg_log('Upgrade unlocked.', 'NOTICE');
+}
+
+/**
+ * Checks if upgrade is locked
+ *
+ * @return bool
+ * @access private
+ */
+function _elgg_upgrade_is_locked() {
+ global $CONFIG, $DB_QUERY_CACHE;
+
+ $is_locked = count(get_data("show tables like '{$CONFIG->dbprefix}upgrade_lock'"));
+
+ // Invalidate query cache
+ if ($DB_QUERY_CACHE) {
+ $DB_QUERY_CACHE->clear();
+ elgg_log("Query cache invalidated", 'NOTICE');
+ }
+
+ return $is_locked;
+}
diff --git a/engine/lib/upgrades/2008100701.php b/engine/lib/upgrades/2008100701.php
new file mode 100644
index 000000000..b8d4dfdbc
--- /dev/null
+++ b/engine/lib/upgrades/2008100701.php
@@ -0,0 +1,7 @@
+<?php
+
+/**
+ * Because Elgg now has a plugable account activation process we need to activate
+ * the email account activation plugin for existing installs.
+ */
+enable_plugin('uservalidationbyemail', $CONFIG->site->guid);
diff --git a/engine/lib/upgrades/2008101303.php b/engine/lib/upgrades/2008101303.php
new file mode 100644
index 000000000..69e44e3a0
--- /dev/null
+++ b/engine/lib/upgrades/2008101303.php
@@ -0,0 +1,9 @@
+<?php
+
+// Upgrade to solve login issue
+
+if ($users = get_entities_from_metadata('validated_email', '', 'user', '', 0, 9999)) {
+ foreach ($users as $user) {
+ set_user_validation_status($user->guid, true, 'email');
+ }
+}
diff --git a/engine/lib/upgrades/2009022701.php b/engine/lib/upgrades/2009022701.php
new file mode 100644
index 000000000..54083a34d
--- /dev/null
+++ b/engine/lib/upgrades/2009022701.php
@@ -0,0 +1,7 @@
+<?php
+global $CONFIG;
+
+/**
+ * Disable update client since this has now been removed.
+ */
+disable_plugin('updateclient', $CONFIG->site->guid);
diff --git a/engine/lib/upgrades/2009041701.php b/engine/lib/upgrades/2009041701.php
new file mode 100644
index 000000000..7b31a3bc9
--- /dev/null
+++ b/engine/lib/upgrades/2009041701.php
@@ -0,0 +1,8 @@
+<?php
+
+global $CONFIG;
+
+/**
+ * Elgg now has kses tag filtering built as a plugin. This needs to be enabled.
+ */
+enable_plugin('kses', $CONFIG->site->guid);
diff --git a/engine/lib/upgrades/2009070101.php b/engine/lib/upgrades/2009070101.php
new file mode 100644
index 000000000..d0eae9b91
--- /dev/null
+++ b/engine/lib/upgrades/2009070101.php
@@ -0,0 +1,9 @@
+<?php
+
+global $CONFIG;
+
+/**
+ * Kses appears to be a dead project so we are deprecating it in favour of htmlawed.
+ */
+disable_plugin('kses', $CONFIG->site->guid);
+enable_plugin('htmlawed', $CONFIG->site->guid);
diff --git a/engine/lib/upgrades/2009102801.php b/engine/lib/upgrades/2009102801.php
new file mode 100644
index 000000000..cab9a6835
--- /dev/null
+++ b/engine/lib/upgrades/2009102801.php
@@ -0,0 +1,221 @@
+<?php
+
+/**
+ * Move user's data directories from using username to registration date
+ */
+
+/**
+ * Generates a file matrix like Elgg 1.0 did
+ *
+ * @param string $username Username of user
+ *
+ * @return string File matrix path
+ */
+function file_matrix_1_0($username) {
+ $matrix = "";
+
+ $len = strlen($username);
+ if ($len > 5) {
+ $len = 5;
+ }
+
+ for ($n = 0; $n < $len; $n++) {
+ if (ctype_alnum($username[$n])) {
+ $matrix .= $username[$n] . "/";
+ }
+ }
+
+ return $matrix . $username . "/";
+}
+
+
+/**
+ * Generate a file matrix like Elgg 1.1, 1.2 and 1.5
+ *
+ * @param string $filename The filename
+ *
+ * @return string
+ */
+function file_matrix_1_1($filename) {
+ $matrix = "";
+
+ $name = $filename;
+ $filename = mb_str_split($filename);
+ if (!$filename) {
+ return false;
+ }
+
+ $len = count($filename);
+ if ($len > 5) {
+ $len = 5;
+ }
+
+ for ($n = 0; $n < $len; $n++) {
+ $matrix .= $filename[$n] . "/";
+ }
+
+ return $matrix . $name . "/";
+}
+
+/**
+ * Handle splitting multibyte strings
+ *
+ * @param string $string String to split.
+ * @param string $charset Charset to use.
+ *
+ * @return array|false
+ */
+function mb_str_split($string, $charset = 'UTF8') {
+ if (is_callable('mb_substr')) {
+ $length = mb_strlen($string);
+ $array = array();
+
+ while ($length) {
+ $array[] = mb_substr($string, 0, 1, $charset);
+ $string = mb_substr($string, 1, $length, $charset);
+
+ $length = mb_strlen($string);
+ }
+
+ return $array;
+ } else {
+ return str_split($string);
+ }
+
+ return false;
+}
+
+
+/**
+ * 1.6 style file matrix
+ *
+ * @param string $filename The filename
+ *
+ * @return string
+ */
+function file_matrix_1_6($filename) {
+ $invalid_fs_chars = '*\'\\/"!$%^&*.%(){}[]#~?<>;|¬`@-+=';
+
+ $matrix = "";
+
+ $name = $filename;
+ $filename = mb_str_split($filename);
+ if (!$filename) {
+ return false;
+ }
+
+ $len = count($filename);
+ if ($len > 5) {
+ $len = 5;
+ }
+
+ for ($n = 0; $n < $len; $n++) {
+
+ // Prevent a matrix being formed with unsafe characters
+ $char = $filename[$n];
+ if (strpos($invalid_fs_chars, $char) !== false) {
+ $char = '_';
+ }
+
+ $matrix .= $char . "/";
+ }
+
+ return $matrix . $name . "/";
+}
+
+
+/**
+ * Scans a directory and moves any files from $from to $to
+ * preserving structure and handling existing paths.
+ * Will no overwrite files in $to.
+ *
+ * TRAILING SLASHES REQUIRED.
+ *
+ * @param string $from From dir.
+ * @param string $to To dir.
+ * @param bool $move True to move, false to copy.
+ * @param string $preference to|from If file collisions, which dir has preference.
+ *
+ * @return bool
+ */
+function merge_directories($from, $to, $move = false, $preference = 'to') {
+ if (!$entries = scandir($from)) {
+ return false;
+ }
+
+ // character filtering needs to be elsewhere.
+ if (!is_dir($to)) {
+ mkdir($to, 0700, true);
+ }
+
+ if ($move === true) {
+ $f = 'rename';
+ } else {
+ $f = 'copy';
+ }
+
+ foreach ($entries as $entry) {
+ if ($entry == '.' || $entry == '..') {
+ continue;
+ }
+
+ $from_path = $from . $entry;
+ $to_path = $to . $entry;
+
+ // check to see if the path exists and is a dir, if so, recurse.
+ if (is_dir($from_path) && is_dir($to_path)) {
+ $from_path .= '/';
+ $to_path .= '/';
+ merge_directories($from_path, $to_path, $move, $preference);
+
+ // since it's a dir that already exists we don't need to move it
+ continue;
+ }
+
+ // only move if target doesn't exist or if preference is for the from dir
+ if (!file_exists($to_path) || $preference == 'from') {
+
+ if ($f($from_path, $to_path)) {
+ //elgg_dump("Moved/Copied $from_path to $to_path");
+ }
+ } else {
+ //elgg_dump("Ignoring $from_path -> $to_path");
+ }
+ }
+}
+
+/**
+ * Create a 1.7 style user file matrix based upon date.
+ *
+ * @param int $guid Guid of owner
+ *
+ * @return string File matrix path
+ */
+function user_file_matrix($guid) {
+ // lookup the entity
+ $user = get_entity($guid);
+ if ($user->type != 'user') {
+ // only to be used for user directories
+ return FALSE;
+ }
+
+ $time_created = date('Y/m/d', $user->time_created);
+ return "$time_created/$user->guid/";
+}
+
+global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE;
+/**
+ * Upgrade file locations
+ */
+$users = mysql_query("SELECT guid, username
+ FROM {$CONFIG->dbprefix}users_entity WHERE username != ''");
+while ($user = mysql_fetch_object($users)) {
+ $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+
+ $to = $CONFIG->dataroot . user_file_matrix($user->guid);
+ foreach (array('1_0', '1_1', '1_6') as $version) {
+ $function = "file_matrix_$version";
+ $from = $CONFIG->dataroot . $function($user->username);
+ merge_directories($from, $to, $move = TRUE, $preference = 'from');
+ }
+}
diff --git a/engine/lib/upgrades/2010010501.php b/engine/lib/upgrades/2010010501.php
new file mode 100644
index 000000000..1e83caa55
--- /dev/null
+++ b/engine/lib/upgrades/2010010501.php
@@ -0,0 +1,8 @@
+<?php
+
+global $CONFIG;
+
+/**
+ * Enable the search plugin
+ */
+enable_plugin('search', $CONFIG->site->guid);
diff --git a/engine/lib/upgrades/2010033101.php b/engine/lib/upgrades/2010033101.php
new file mode 100644
index 000000000..0bffee001
--- /dev/null
+++ b/engine/lib/upgrades/2010033101.php
@@ -0,0 +1,70 @@
+<?php
+
+/**
+ * Conditional upgrade for UTF8 as described in http://trac.elgg.org/ticket/1928
+ */
+
+// get_version() returns the code version.
+// we want the DB version.
+$dbversion = (int) datalist_get('version');
+
+// 2009100701 was the utf8 upgrade for 1.7.
+// if we've already upgraded, don't try again.
+if ($dbversion < 2009100701) {
+ // if the default client connection is utf8 there is no reason
+ // to run this upgrade because the strings are already stored correctly.
+
+ // start a new link to the DB to see what its defaults are.
+ $link = mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, TRUE);
+ mysql_select_db($CONFIG->dbname, $link);
+
+ $q = "SHOW VARIABLES LIKE 'character_set_client'";
+ $r = mysql_query($q);
+ $client = mysql_fetch_assoc($r);
+
+ $q = "SHOW VARIABLES LIKE 'character_set_connection'";
+ $r = mysql_query($q);
+ $connection = mysql_fetch_assoc($r);
+
+ // only run upgrade if not already talking utf8.
+ if ($client['Value'] != 'utf8' && $connection['Value'] != 'utf8') {
+ $qs = array();
+ $qs[] = "SET NAMES utf8";
+
+ $qs[] = "ALTER TABLE {$CONFIG->dbprefix}metastrings DISABLE KEYS";
+ $qs[] = "REPLACE INTO {$CONFIG->dbprefix}metastrings (id, string)
+ SELECT id, unhex(hex(convert(string using latin1)))
+ FROM {$CONFIG->dbprefix}metastrings";
+ $qs[] = "ALTER TABLE {$CONFIG->dbprefix}metastrings ENABLE KEYS";
+
+ $qs[] = "ALTER TABLE {$CONFIG->dbprefix}groups_entity DISABLE KEYS";
+ $qs[] = "REPLACE INTO {$CONFIG->dbprefix}groups_entity (guid, name, description)
+ SELECT guid, unhex(hex(convert(name using latin1))),
+ unhex(hex(convert(description using latin1)))
+ FROM {$CONFIG->dbprefix}groups_entity";
+ $qs[] = "ALTER TABLE {$CONFIG->dbprefix}groups_entity ENABLE KEYS";
+
+ $qs[] = "ALTER TABLE {$CONFIG->dbprefix}objects_entity DISABLE KEYS";
+ $qs[] = "REPLACE INTO {$CONFIG->dbprefix}objects_entity (guid, title, description)
+ SELECT guid, unhex(hex(convert(title using latin1))),
+ unhex(hex(convert(description using latin1)))
+ FROM {$CONFIG->dbprefix}objects_entity";
+ $qs[] = "ALTER TABLE {$CONFIG->dbprefix}objects_entity ENABLE KEYS";
+
+ $qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity DISABLE KEYS";
+ $qs[] = "REPLACE INTO {$CONFIG->dbprefix}users_entity
+ (guid, name, username, password, salt, email, language, code,
+ banned, last_action, prev_last_action, last_login, prev_last_login)
+ SELECT guid, unhex(hex(convert(name using latin1))),
+ username, password, salt, email, language, code,
+ banned, last_action, prev_last_action, last_login, prev_last_login
+ FROM {$CONFIG->dbprefix}users_entity";
+ $qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity ENABLE KEYS";
+
+ foreach ($qs as $q) {
+ if (!update_data($q)) {
+ throw new Exception('Couldn\'t execute upgrade query: ' . $q);
+ }
+ }
+ }
+}
diff --git a/engine/lib/upgrades/2010040201.php b/engine/lib/upgrades/2010040201.php
new file mode 100644
index 000000000..789bf5dfc
--- /dev/null
+++ b/engine/lib/upgrades/2010040201.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * Pull admin metadata setting into users_entity table column
+ */
+
+$siteadmin = get_metastring_id('siteadmin');
+$admin = get_metastring_id('admin');
+$yes = get_metastring_id('yes');
+$one = get_metastring_id('1');
+
+$qs = array();
+
+$qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity DISABLE KEYS";
+
+$qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity
+ ADD admin ENUM('yes', 'no') NOT NULL DEFAULT 'no' AFTER `banned`";
+
+$qs[] = "UPDATE {$CONFIG->dbprefix}users_entity SET admin = 'yes' where guid IN (select x.guid FROM(
+SELECT * FROM {$CONFIG->dbprefix}users_entity as e,
+ {$CONFIG->dbprefix}metadata as md
+ WHERE (
+ md.name_id IN ('$admin', '$siteadmin')
+ AND md.value_id IN ('$yes', '$one')
+ AND e.guid = md.entity_guid
+ AND e.banned = 'no'
+ )) as x)";
+
+$qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity ADD KEY admin (admin)";
+
+$qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity ENABLE KEYS";
+
+$qs[] = "DELETE FROM {$CONFIG->dbprefix}metadata
+ WHERE (
+ name_id IN ('$admin', '$siteadmin')
+ AND value_id IN ('$yes', '$one')
+ )";
+
+foreach ($qs as $q) {
+ update_data($q);
+}
diff --git a/engine/lib/upgrades/2010052601.php b/engine/lib/upgrades/2010052601.php
new file mode 100644
index 000000000..a9cca6dc5
--- /dev/null
+++ b/engine/lib/upgrades/2010052601.php
@@ -0,0 +1,27 @@
+<?php
+
+// Upgrade to fix encoding issues on group data: #1963
+
+elgg_set_ignore_access(TRUE);
+
+$params = array('type' => 'group',
+ 'limit' => 0);
+$groups = elgg_get_entities($params);
+if ($groups) {
+ foreach ($groups as $group) {
+ $group->name = _elgg_html_decode($group->name);
+ $group->description = _elgg_html_decode($group->description);
+ $group->briefdescription = _elgg_html_decode($group->briefdescription);
+ $group->website = _elgg_html_decode($group->website);
+ if ($group->interests) {
+ $tags = $group->interests;
+ foreach ($tags as $index => $tag) {
+ $tags[$index] = _elgg_html_decode($tag);
+ }
+ $group->interests = $tags;
+ }
+
+ $group->save();
+ }
+}
+elgg_set_ignore_access(FALSE);
diff --git a/engine/lib/upgrades/2010060101.php b/engine/lib/upgrades/2010060101.php
new file mode 100644
index 000000000..bb7f7c1a6
--- /dev/null
+++ b/engine/lib/upgrades/2010060101.php
@@ -0,0 +1,16 @@
+<?php
+
+/**
+ * Clears old simplecache variables out of database
+ */
+
+$query = "DELETE FROM {$CONFIG->dbprefix}datalists WHERE name LIKE 'simplecache%'";
+
+delete_data($query);
+
+if ($CONFIG->simplecache_enabled) {
+ datalist_set('simplecache_enabled', 1);
+ elgg_regenerate_simplecache();
+} else {
+ datalist_set('simplecache_enabled', 0);
+}
diff --git a/engine/lib/upgrades/2010060401.php b/engine/lib/upgrades/2010060401.php
new file mode 100644
index 000000000..6d628b8eb
--- /dev/null
+++ b/engine/lib/upgrades/2010060401.php
@@ -0,0 +1,59 @@
+<?php
+
+/**
+ * Get each user's notify* relationships and confirm that they have a friend
+ * or member relationship depending on type. This fixes the notify relationships
+ * that were not updated to due to #1837
+ */
+
+$count = 0;
+
+$user_guids = mysql_query("SELECT guid FROM {$CONFIG->dbprefix}users_entity");
+while ($user = mysql_fetch_object($user_guids)) {
+
+ $query = "SELECT * FROM {$CONFIG->dbprefix}entity_relationships
+ WHERE guid_one=$user->guid AND relationship LIKE 'notify%'";
+ $relationships = mysql_query($query);
+ if (mysql_num_rows($relationships) == 0) {
+ // no notify relationships for this user
+ continue;
+ }
+
+ while ($obj = mysql_fetch_object($relationships)) {
+ $query = "SELECT type FROM {$CONFIG->dbprefix}entities WHERE guid=$obj->guid_two";
+ $results = mysql_query($query);
+ if (mysql_num_rows($results) == 0) {
+ // entity doesn't exist - shouldn't be possible
+ continue;
+ }
+
+ $entity = mysql_fetch_object($results);
+
+ switch ($entity->type) {
+ case 'user':
+ $relationship_type = 'friend';
+ break;
+ case 'group':
+ $relationship_type = 'member';
+ break;
+ }
+
+ if (isset($relationship_type)) {
+ $query = "SELECT * FROM {$CONFIG->dbprefix}entity_relationships
+ WHERE guid_one=$user->guid AND relationship='$relationship_type'
+ AND guid_two=$obj->guid_two";
+ $results = mysql_query($query);
+
+ if (mysql_num_rows($results) == 0) {
+ $query = "DELETE FROM {$CONFIG->dbprefix}entity_relationships WHERE id=$obj->id";
+ mysql_query($query);
+ $count++;
+ }
+ }
+ }
+
+}
+
+if (is_callable('error_log')) {
+ error_log("Deleted $count notify relationships in upgrade");
+}
diff --git a/engine/lib/upgrades/2010061501.php b/engine/lib/upgrades/2010061501.php
new file mode 100644
index 000000000..9ff7d3102
--- /dev/null
+++ b/engine/lib/upgrades/2010061501.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * utf8 database conversion and file merging for usernames with multibyte chars
+ *
+ */
+
+
+// check that we need to do the utf8 conversion
+// C&P logic from 2010033101
+$dbversion = (int) datalist_get('version');
+
+if ($dbversion < 2009100701) {
+ // start a new link to the DB to see what its defaults are.
+ $link = mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, TRUE);
+ mysql_select_db($CONFIG->dbname, $link);
+
+ $q = "SHOW VARIABLES LIKE 'character_set_client'";
+ $r = mysql_query($q);
+ $client = mysql_fetch_assoc($r);
+
+ $q = "SHOW VARIABLES LIKE 'character_set_connection'";
+ $r = mysql_query($q);
+ $connection = mysql_fetch_assoc($r);
+
+ // only run upgrade if not already talking utf8
+ if ($client['Value'] != 'utf8' && $connection['Value'] != 'utf8') {
+ $qs = array();
+ $qs[] = "SET NAMES utf8";
+
+ $qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity DISABLE KEYS";
+ $qs[] = "REPLACE INTO {$CONFIG->dbprefix}users_entity
+ (guid, name, username, password, salt, email, language, code,
+ banned, admin, last_action, prev_last_action, last_login, prev_last_login)
+
+ SELECT guid, name, unhex(hex(convert(username using latin1))),
+ password, salt, email, language, code,
+ banned, admin, last_action, prev_last_action, last_login, prev_last_login
+ FROM {$CONFIG->dbprefix}users_entity";
+
+ $qs[] = "ALTER TABLE {$CONFIG->dbprefix}users_entity ENABLE KEYS";
+
+ foreach ($qs as $q) {
+ if (!update_data($q)) {
+ throw new Exception('Couldn\'t execute upgrade query: ' . $q);
+ }
+ }
+
+ global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE;
+
+ /**
+ Upgrade file locations
+ */
+ // new connection to force into utf8 mode to get the old name
+ $link = mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, TRUE);
+ mysql_select_db($CONFIG->dbname, $link);
+
+ // must be the first command
+ mysql_query("SET NAMES utf8");
+
+ $users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity
+ WHERE username != ''", $link);
+ while ($user = mysql_fetch_object($users)) {
+ $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+
+ $to = $CONFIG->dataroot . user_file_matrix($user->guid);
+ foreach (array('1_0', '1_1', '1_6') as $version) {
+ $function = "file_matrix_$version";
+ $from = $CONFIG->dataroot . $function($user->username);
+ merge_directories($from, $to, $move = TRUE, $preference = 'from');
+ }
+ }
+ }
+}
diff --git a/engine/lib/upgrades/2010062301.php b/engine/lib/upgrades/2010062301.php
new file mode 100644
index 000000000..f679fa46d
--- /dev/null
+++ b/engine/lib/upgrades/2010062301.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * Change ownership of group ACLs to group entity
+ */
+
+elgg_set_ignore_access(TRUE);
+
+$params = array('type' => 'group',
+ 'limit' => 0);
+$groups = elgg_get_entities($params);
+if ($groups) {
+ foreach ($groups as $group) {
+ $acl = $group->group_acl;
+
+ try {
+ $query = "UPDATE {$CONFIG->dbprefix}access_collections
+ SET owner_guid = $group->guid WHERE id = $acl";
+ update_data($query);
+ } catch (Exception $e) {
+ // no acl so create one
+ $ac_name = elgg_echo('groups:group') . ": " . $group->name;
+ $group_acl = create_access_collection($ac_name, $group->guid);
+ if ($group_acl) {
+ create_metadata($group->guid, 'group_acl', $group_acl, 'integer', $group->owner_guid);
+ $object->group_acl = $group_id;
+ }
+ }
+
+ }
+}
+elgg_set_ignore_access(FALSE);
+
diff --git a/engine/lib/upgrades/2010062302.php b/engine/lib/upgrades/2010062302.php
new file mode 100644
index 000000000..fe33e12ea
--- /dev/null
+++ b/engine/lib/upgrades/2010062302.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * Make sure that everyone who belongs to a group is a member of the group's access collection
+ */
+
+
+elgg_set_ignore_access(TRUE);
+
+$params = array('type' => 'group', 'limit' => 0);
+$groups = elgg_get_entities($params);
+if ($groups) {
+ foreach ($groups as $group) {
+ $acl = $group->group_acl;
+
+ $query = "SELECT u.guid FROM {$CONFIG->dbprefix}users_entity u
+ JOIN {$CONFIG->dbprefix}entity_relationships r
+ ON u.guid = r.guid_one AND r.relationship = 'member' AND r.guid_two = $group->guid
+ LEFT JOIN {$CONFIG->dbprefix}access_collection_membership a
+ ON u.guid = a.user_guid AND a.access_collection_id = $acl
+ WHERE a.user_guid IS NULL";
+
+ $results = get_data($query);
+ if ($results != FALSE) {
+ foreach ($results as $user) {
+ $insert = "INSERT INTO {$CONFIG->dbprefix}access_collection_membership
+ (user_guid, access_collection_id) VALUES ($user->guid, $acl)";
+ insert_data($insert);
+ }
+ }
+ }
+}
+elgg_set_ignore_access(FALSE);
diff --git a/engine/lib/upgrades/2010070301.php b/engine/lib/upgrades/2010070301.php
new file mode 100644
index 000000000..af5c80419
--- /dev/null
+++ b/engine/lib/upgrades/2010070301.php
@@ -0,0 +1,9 @@
+<?php
+
+/**
+ * Group join river view has been renamed
+ */
+
+$query = "UPDATE {$CONFIG->dbprefix}river SET view='river/relationship/member/create'
+ WHERE view='river/group/create' AND action_type='join'";
+update_data($query);
diff --git a/engine/lib/upgrades/2010071001.php b/engine/lib/upgrades/2010071001.php
new file mode 100644
index 000000000..1b5d379d8
--- /dev/null
+++ b/engine/lib/upgrades/2010071001.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Change profile image names to use guid rather than username
+ */
+
+/**
+ * Need the same function to generate a user matrix, but can't call it
+ * the same thing as the previous update.
+ *
+ * @param int $guid User guid.
+ *
+ * @return string File matrix
+ */
+function user_file_matrix_2010071001($guid) {
+ // lookup the entity
+ $user = get_entity($guid);
+ if ($user->type != 'user') {
+ // only to be used for user directories
+ return FALSE;
+ }
+
+ if (!$user->time_created) {
+ // no idea where this user has its files
+ return FALSE;
+ }
+
+ $time_created = date('Y/m/d', $user->time_created);
+ return "$time_created/$user->guid/";
+}
+
+$sizes = array('large', 'medium', 'small', 'tiny', 'master', 'topbar');
+
+global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG;
+$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity
+ WHERE username != ''");
+while ($user = mysql_fetch_object($users)) {
+ $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+
+ $user_directory = user_file_matrix_2010071001($user->guid);
+ if (!$user_directory) {
+ continue;
+ }
+ $profile_directory = $CONFIG->dataroot . $user_directory . "profile/";
+ if (!file_exists($profile_directory)) {
+ continue;
+ }
+
+ foreach ($sizes as $size) {
+ $old_filename = "$profile_directory{$user->username}{$size}.jpg";
+ $new_filename = "$profile_directory{$user->guid}{$size}.jpg";
+ if (file_exists($old_filename)) {
+ if (!rename($old_filename, $new_filename)) {
+ error_log("Failed to rename profile photo for $user->username");
+ }
+ }
+ }
+}
diff --git a/engine/lib/upgrades/2010071002.php b/engine/lib/upgrades/2010071002.php
new file mode 100644
index 000000000..30bd6538c
--- /dev/null
+++ b/engine/lib/upgrades/2010071002.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Update the notifications based on all friends and access collections
+ */
+
+// loop through all users checking collections and notifications
+global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG;
+global $NOTIFICATION_HANDLERS;
+$users = mysql_query("SELECT guid, username FROM {$CONFIG->dbprefix}users_entity
+ WHERE username != ''");
+while ($user = mysql_fetch_object($users)) {
+ $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+
+ $user = get_entity($user->guid);
+ foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+ $notify = "notify$method";
+ $metaname = "collections_notifications_preferences_$method";
+ $collections_preferences = $user->$metaname;
+ if (!$collections_preferences) {
+ continue;
+ }
+ if (!is_array($collections_preferences)) {
+ $collections_preferences = array($collections_preferences);
+ }
+ foreach ($collections_preferences as $collection_id) {
+ // check the all friends notifications
+ if ($collection_id == -1) {
+ $options = array(
+ 'relationship' => 'friend',
+ 'relationship_guid' => $user->guid,
+ 'limit' => 0
+ );
+ $friends = elgg_get_entities_from_relationship($options);
+ foreach ($friends as $friend) {
+ if (!check_entity_relationship($user->guid, $notify, $friend->guid)) {
+ add_entity_relationship($user->guid, $notify, $friend->guid);
+ }
+ }
+ } else {
+ $members = get_members_of_access_collection($collection_id, TRUE);
+ foreach ($members as $member) {
+ if (!check_entity_relationship($user->guid, $notify, $members)) {
+ add_entity_relationship($user->guid, $notify, $member);
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/engine/lib/upgrades/2010111501.php b/engine/lib/upgrades/2010111501.php
new file mode 100644
index 000000000..15e4a7d35
--- /dev/null
+++ b/engine/lib/upgrades/2010111501.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Set validation metadata on unvalidated users to false rather than
+ * not existing. This is needed because of the change in how validation is
+ * being handled.
+ */
+
+// turn off system log because of all the metadata this can create
+elgg_unregister_event_handler('all', 'all', 'system_log_listener');
+elgg_unregister_event_handler('log', 'systemlog', 'system_log_default_logger');
+
+$ia = elgg_set_ignore_access(TRUE);
+$hidden_entities = access_get_show_hidden_status();
+access_show_hidden_entities(TRUE);
+
+$validated_id = get_metastring_id('validated');
+$one_id = get_metastring_id(1);
+
+$query = "SELECT guid FROM {$CONFIG->dbprefix}entities e
+ WHERE e.type = 'user' AND e.enabled = 'no' AND
+ NOT EXISTS (
+ SELECT 1 FROM {$CONFIG->dbprefix}metadata md
+ WHERE md.entity_guid = e.guid
+ AND md.name_id = $validated_id
+ AND md.value_id = $one_id)";
+
+$user_guids = mysql_query($query);
+while ($user_guid = mysql_fetch_object($user_guids)) {
+ create_metadata($user_guid->guid, 'validated', false, '', 0, ACCESS_PUBLIC, false);
+}
+
+access_show_hidden_entities($hidden_entities);
+elgg_set_ignore_access($ia);
diff --git a/engine/lib/upgrades/2010121601.php b/engine/lib/upgrades/2010121601.php
new file mode 100644
index 000000000..ad7d26adb
--- /dev/null
+++ b/engine/lib/upgrades/2010121601.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Create friends river view has been changed
+ */
+
+$query = "UPDATE {$CONFIG->dbprefix}river
+ SET view='river/relationship/friend/create', action_type='create'
+ WHERE view='friends/river/create' AND action_type='friend'";
+update_data($query);
diff --git a/engine/lib/upgrades/2010121602.php b/engine/lib/upgrades/2010121602.php
new file mode 100644
index 000000000..5b0996b5e
--- /dev/null
+++ b/engine/lib/upgrades/2010121602.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Create comment river view has been changed
+ */
+
+$query = "UPDATE {$CONFIG->dbprefix}river
+ SET view='river/annotation/generic_comment/create'
+ WHERE view='annotation/annotate' AND action_type='comment'";
+update_data($query);
+
diff --git a/engine/lib/upgrades/2010121701.php b/engine/lib/upgrades/2010121701.php
new file mode 100644
index 000000000..375654bac
--- /dev/null
+++ b/engine/lib/upgrades/2010121701.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Create group forum topic river view has been changed
+ */
+
+$query = "UPDATE {$CONFIG->dbprefix}river
+ SET view='river/object/groupforumtopic/create'
+ WHERE view='river/forum/topic/create' AND action_type='create'";
+update_data($query);
+
diff --git a/engine/lib/upgrades/2010123101.php b/engine/lib/upgrades/2010123101.php
new file mode 100644
index 000000000..f4befd1a8
--- /dev/null
+++ b/engine/lib/upgrades/2010123101.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Set default access for older sites
+ */
+
+$access = elgg_get_config('default_access');
+if ($access == false) {
+ elgg_save_config('default_access', ACCESS_LOGGED_IN);
+}
diff --git a/engine/lib/upgrades/2011010101.php b/engine/lib/upgrades/2011010101.php
new file mode 100644
index 000000000..f4411ee20
--- /dev/null
+++ b/engine/lib/upgrades/2011010101.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * Migrate plugins to the new system using ElggPlugin and private settings
+ */
+
+$old_ia = elgg_set_ignore_access(true);
+
+$site = get_config('site');
+$old_plugin_order = unserialize($site->pluginorder);
+$old_enabled_plugins = $site->enabled_plugins;
+
+$db_prefix = get_config('dbprefix');
+$plugin_subtype_id = get_subtype_id('object', 'plugin');
+
+// easy one first: make sure the the site owns all plugin entities.
+$q = "UPDATE {$db_prefix}entities e
+ SET owner_guid = $site->guid, container_guid = $site->guid
+ WHERE e.type = 'object' AND e.subtype = $plugin_subtype_id";
+
+$r = update_data($q);
+
+// rewrite all plugin:setting:* to ELGG_PLUGIN_USER_SETTING_PREFIX . *
+$q = "UPDATE {$db_prefix}private_settings
+ SET name = replace(name, 'plugin:settings:', '" . ELGG_PLUGIN_USER_SETTING_PREFIX . "')
+ WHERE name LIKE 'plugin:settings:%'";
+
+$r = update_data($q);
+
+// grab current plugin GUIDs to add a temp priority
+$q = "SELECT * FROM {$db_prefix}entities e
+ JOIN {$db_prefix}objects_entity oe ON e.guid = oe.guid
+ WHERE e.type = 'object' AND e.subtype = $plugin_subtype_id";
+
+$plugins = get_data($q);
+
+foreach ($plugins as $plugin) {
+ $priority = elgg_namespace_plugin_private_setting('internal', 'priority');
+ set_private_setting($plugin->guid, $priority, 0);
+}
+
+// force regenerating plugin entities
+elgg_generate_plugin_entities();
+
+// set the priorities for all plugins
+// this function rewrites it to a normal index so use the current one.
+elgg_set_plugin_priorities($old_plugin_order);
+
+// add relationships for enabled plugins
+if ($old_enabled_plugins) {
+ // they might only have one plugin enabled.
+ if (!is_array($old_enabled_plugins)) {
+ $old_enabled_plugins = array($old_enabled_plugins);
+ }
+
+ // sometimes there were problems and you'd get 1000s of enabled plugins.
+ $old_enabled_plugins = array_unique($old_enabled_plugins);
+
+ foreach ($old_enabled_plugins as $plugin_id) {
+ $plugin = elgg_get_plugin_from_id($plugin_id);
+
+ if ($plugin) {
+ $plugin->activate();
+ }
+ }
+}
+
+// invalidate caches
+elgg_invalidate_simplecache();
+elgg_reset_system_cache();
+
+// clean up.
+remove_metadata($site->guid, 'pluginorder');
+remove_metadata($site->guid, 'enabled_plugins');
+
+elgg_set_ignore_access($old_id);
+
+/**
+ * @hack
+ *
+ * We stop the upgrade at this point because plugins weren't given the chance to
+ * load due to the new plugin code introduced with Elgg 1.8. Instead, we manually
+ * set the version and start the upgrade process again.
+ *
+ * The variables from upgrade_code() are available because this script was included
+ */
+if ($upgrade_version > $version) {
+ datalist_set('version', $upgrade_version);
+}
+
+// add ourselves to the processed_upgrades.
+$processed_upgrades[] = '2011010101.php';
+
+$processed_upgrades = array_unique($processed_upgrades);
+elgg_set_processed_upgrades($processed_upgrades);
+
+_elgg_upgrade_unlock();
+
+forward('upgrade.php');
diff --git a/engine/lib/upgrades/2011021800-1.8_svn-goodbye_walled_garden-083121a656d06894.php b/engine/lib/upgrades/2011021800-1.8_svn-goodbye_walled_garden-083121a656d06894.php
new file mode 100644
index 000000000..40b2c71d5
--- /dev/null
+++ b/engine/lib/upgrades/2011021800-1.8_svn-goodbye_walled_garden-083121a656d06894.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Elgg 1.8-svn upgrade 2011021800
+ * goodbye_walled_garden
+ *
+ * Removes the Walled Garden plugin in favor of new system settings
+ */
+
+global $CONFIG;
+
+$access = elgg_set_ignore_access(TRUE);
+
+if (elgg_is_active_plugin('walledgarden')) {
+ disable_plugin('walledgarden');
+ set_config('allow_registration', FALSE);
+ set_config('walled_garden', TRUE);
+} else {
+ set_config('allow_registration', TRUE);
+ set_config('walled_garden', FALSE);
+}
+
+// this was for people who manually set the config option
+$disable_registration = elgg_get_config('disable_registration');
+if ($disable_registration !== null) {
+ $allow_registration = !$disable_registration;
+ elgg_save_config('allow_registration', $allow_registration);
+
+ $site = elgg_get_site_entity();
+ $query = "DELETE FROM {$CONFIG->dbprefix}config
+ WHERE name = 'disable_registration' AND site_guid = $site->guid";
+ delete_data($query);
+}
+
+elgg_set_ignore_access($access);
diff --git a/engine/lib/upgrades/2011022000-1.8_svn-custom_profile_fields-390ac967b0bb5665.php b/engine/lib/upgrades/2011022000-1.8_svn-custom_profile_fields-390ac967b0bb5665.php
new file mode 100644
index 000000000..7561b84ba
--- /dev/null
+++ b/engine/lib/upgrades/2011022000-1.8_svn-custom_profile_fields-390ac967b0bb5665.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Elgg 2011010401 upgrade 00
+ * custom_profile_fields
+ *
+ * Migrate 1.7 style custom profile fields to 1.8
+ */
+
+$plugin = elgg_get_plugin_from_id('profile');
+
+// plugin not installed
+if (!$plugin) {
+ return true;
+}
+
+$settings = $plugin->getAllSettings();
+// no fields to migrate
+if (!$settings['user_defined_fields']) {
+ return true;
+}
+
+$order = array();
+$remove_settings = array();
+
+// make sure we have a name and type
+foreach ($settings as $k => $v) {
+ if (!preg_match('/admin_defined_profile_([0-9]+)/i', $k, $matches)) {
+ continue;
+ }
+
+ $i = $matches[1];
+ $type_name = "admin_defined_profile_type_$i";
+ $type = elgg_extract($type_name, $settings, null);
+
+ if ($type) {
+ // field name
+ elgg_save_config($k, $v);
+ // field value
+ elgg_save_config($type_name, $type);
+
+ $order[] = $i;
+ $remove_settings[] = $k;
+ $remove_settings[] = $type_name;
+ }
+}
+
+if ($order) {
+ // these will always need to be in order, but there might be gaps
+ ksort($order);
+
+ $order_str = implode(',', $order);
+ elgg_save_config('profile_custom_fields', $order_str);
+
+ foreach ($remove_settings as $name) {
+ $plugin->unsetSetting($name);
+ }
+
+ $plugin->unsetSetting('user_defined_fields');
+} \ No newline at end of file
diff --git a/engine/lib/upgrades/2011030700-1.8_svn-blog_status_metadata-4645225d7b440876.php b/engine/lib/upgrades/2011030700-1.8_svn-blog_status_metadata-4645225d7b440876.php
new file mode 100644
index 000000000..fe2af9928
--- /dev/null
+++ b/engine/lib/upgrades/2011030700-1.8_svn-blog_status_metadata-4645225d7b440876.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg 1.8-svn upgrade 2011030700
+ * blog_status_metadata
+ *
+ * Add a "status" metadata entry to every blog entity because in 1.8 you can have status = draft or
+ * status = published
+ */
+$ia = elgg_set_ignore_access(true);
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'blog',
+ 'limit' => 0,
+);
+$batch = new ElggBatch('elgg_get_entities', $options);
+
+foreach ($batch as $entity) {
+ if (!$entity->status) {
+ // create metadata owned by the original owner
+ create_metadata($entity->getGUID(), 'status', 'published', '', $entity->owner_guid,
+ $entity->access_id);
+ }
+}
+elgg_set_ignore_access($ia); \ No newline at end of file
diff --git a/engine/lib/upgrades/2011031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php b/engine/lib/upgrades/2011031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php
new file mode 100644
index 000000000..df60892a6
--- /dev/null
+++ b/engine/lib/upgrades/2011031300-1.8_svn-twitter_api-12b832a5a7a3e1bd.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Elgg 1.8-svn upgrade 2011031300
+ * twitter_api
+ *
+ * Updates the database for twitterservice to twitter_api changes.
+ */
+
+
+$ia = elgg_set_ignore_access(true);
+
+// make sure we have updated plugins
+elgg_generate_plugin_entities();
+
+$show_hidden = access_get_show_hidden_status();
+access_show_hidden_entities(true);
+
+$db_prefix = elgg_get_config('dbprefix');
+$site_guid = elgg_get_site_entity()->getGUID();
+$old = elgg_get_plugin_from_id('twitterservice');
+$new = elgg_get_plugin_from_id('twitter_api');
+$has_settings = false;
+
+// if not loaded, don't bother.
+if (!$old || !$new) {
+ return true;
+}
+
+$settings = array('consumer_key', 'consumer_secret', 'sign_on', 'new_users');
+
+foreach ($settings as $setting) {
+ $value = $old->getSetting($setting);
+ if ($value) {
+ $has_settings = true;
+ $new->setSetting($setting, $value);
+ }
+}
+
+// update the user settings
+$q = "UPDATE {$db_prefix}private_settings
+ SET name = replace(name, 'twitterservice', 'twitter_api')
+ WHERE name like '%twitterservice%'";
+
+update_data($q);
+
+// if there were settings, emit a notice to re-enable twitter_api
+if ($has_settings) {
+ elgg_add_admin_notice('twitter_api:disabled', elgg_echo('update:twitter_api:deactivated'));
+}
+
+$old->delete();
+
+access_show_hidden_entities($show_hidden);
+elgg_set_ignore_access($ia); \ No newline at end of file
diff --git a/engine/lib/upgrades/2011031600-1.8_svn-datalist_grows_up-0b8aec5a55cc1e1c.php b/engine/lib/upgrades/2011031600-1.8_svn-datalist_grows_up-0b8aec5a55cc1e1c.php
new file mode 100644
index 000000000..379244b36
--- /dev/null
+++ b/engine/lib/upgrades/2011031600-1.8_svn-datalist_grows_up-0b8aec5a55cc1e1c.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Elgg 1.8-svn upgrade 2011031600
+ * datalist_grows_up
+ *
+ * Ups the varchar to 256 for the datalist and config table.
+ *
+ * Keeping it as a varchar because of the trailing whitespace trimming it apparently does:
+ * http://dev.mysql.com/doc/refman/5.0/en/char.html
+ */
+
+$db_prefix = elgg_get_config('dbprefix');
+
+$q = "ALTER TABLE {$db_prefix}datalists CHANGE name name VARCHAR(255)";
+update_data($q);
+
+$q = "ALTER TABLE {$db_prefix}config CHANGE name name VARCHAR(255)";
+update_data($q);
diff --git a/engine/lib/upgrades/2011032000-1.8_svn-widgets_arent_plugins-61836261fa280a5c.php b/engine/lib/upgrades/2011032000-1.8_svn-widgets_arent_plugins-61836261fa280a5c.php
new file mode 100644
index 000000000..a20970d79
--- /dev/null
+++ b/engine/lib/upgrades/2011032000-1.8_svn-widgets_arent_plugins-61836261fa280a5c.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Elgg 1.8-svn upgrade 2011031800
+ * widgets_arent_plugins
+ *
+ * At some point in Elgg's history subtype widget was registered with class ElggPlugin.
+ * Fix that.
+ */
+
+update_subtype('object', 'widget', 'ElggWidget');
diff --git a/engine/lib/upgrades/2011032200-1.8_svn-admins_like_widgets-7f19d2783c1680d3.php b/engine/lib/upgrades/2011032200-1.8_svn-admins_like_widgets-7f19d2783c1680d3.php
new file mode 100644
index 000000000..592adb403
--- /dev/null
+++ b/engine/lib/upgrades/2011032200-1.8_svn-admins_like_widgets-7f19d2783c1680d3.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg 1.8-svn upgrade 2011032200
+ * admins_like_widgets
+ *
+ * Give current admins widgets for those pre-1.8
+ */
+
+$admins = elgg_get_admins(array('limit' => 0));
+foreach ($admins as $admin) {
+ // call the admin handler for the make_admin event
+ elgg_add_admin_widgets('make_admin', 'user', $admin);
+}
diff --git a/engine/lib/upgrades/2011052801.php b/engine/lib/upgrades/2011052801.php
new file mode 100644
index 000000000..8084bc06c
--- /dev/null
+++ b/engine/lib/upgrades/2011052801.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Make sure all users have the relationship member_of_site
+ */
+global $DB_QUERY_CACHE, $DB_PROFILE, $ENTITY_CACHE, $CONFIG;
+$db_prefix = get_config('dbprefix');
+
+$limit = 100;
+
+$q = "SELECT e.* FROM {$db_prefix}entities e
+ WHERE e.type = 'user' AND e.guid NOT IN (
+ SELECT guid_one FROM {$db_prefix}entity_relationships
+ WHERE guid_two = 1 AND relationship = 'member_of_site'
+ )
+ LIMIT $limit";
+
+$users = get_data($q);
+
+while ($users) {
+ $DB_QUERY_CACHE = $DB_PROFILE = $ENTITY_CACHE = array();
+
+ // do manually to not trigger any events because these aren't new users.
+ foreach ($users as $user) {
+ $rel_q = "INSERT INTO {$db_prefix}entity_relationships VALUES (
+ '',
+ '$user->guid',
+ 'member_of_site',
+ '$user->site_guid',
+ '$user->time_created'
+ )";
+
+ insert_data($rel_q);
+ }
+
+ // every time we run this query we've just reduced the rows it returns by $limit
+ // so don't pass an offset.
+ $q = "SELECT e.* FROM {$db_prefix}entities e
+ WHERE e.type = 'user' AND e.guid NOT IN (
+ SELECT guid_one FROM {$db_prefix}entity_relationships
+ WHERE guid_two = 1 AND relationship = 'member_of_site'
+ )
+ LIMIT $limit";
+
+ $users = get_data($q);
+} \ No newline at end of file
diff --git a/engine/lib/upgrades/2011061200-1.8b1-sites_need_a_site_guid-6d9dcbf46c0826cc.php b/engine/lib/upgrades/2011061200-1.8b1-sites_need_a_site_guid-6d9dcbf46c0826cc.php
new file mode 100644
index 000000000..41ab29998
--- /dev/null
+++ b/engine/lib/upgrades/2011061200-1.8b1-sites_need_a_site_guid-6d9dcbf46c0826cc.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Elgg 1.8b1 upgrade 2011061200
+ * sites_need_a_site_guid
+ *
+ * Sites did not have a site guid. This causes problems with getting
+ * metadata on site objects since we default to the current site.
+ */
+
+global $CONFIG;
+
+$ia = elgg_set_ignore_access(true);
+$access_status = access_get_show_hidden_status();
+access_show_hidden_entities(true);
+
+$options = array(
+ 'type' => 'site',
+ 'site_guid' => 0,
+ 'limit' => 0,
+);
+$batch = new ElggBatch('elgg_get_entities', $options);
+
+foreach ($batch as $entity) {
+ if (!$entity->site_guid) {
+ update_data("UPDATE {$CONFIG->dbprefix}entities SET site_guid=$entity->guid
+ WHERE guid=$entity->guid");
+ }
+}
+
+access_show_hidden_entities($access_status);
+elgg_set_ignore_access($ia);
diff --git a/engine/lib/upgrades/2011092500-1.8.0.1-forum_reply_river_view-5758ce8d86ac56ce.php b/engine/lib/upgrades/2011092500-1.8.0.1-forum_reply_river_view-5758ce8d86ac56ce.php
new file mode 100644
index 000000000..3a9200b51
--- /dev/null
+++ b/engine/lib/upgrades/2011092500-1.8.0.1-forum_reply_river_view-5758ce8d86ac56ce.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg 1.8.0.1 upgrade 2011092500
+ * forum_reply_river_view
+ *
+ * The forum reply river view is in a new location in Elgg 1.8
+ */
+
+$query = "UPDATE {$CONFIG->dbprefix}river SET view='river/annotation/group_topic_post/reply',
+ action_type='reply'
+ WHERE view='river/forum/create' AND action_type='create'";
+update_data($query);
diff --git a/engine/lib/upgrades/2011123100-1.8.2-fix_friend_river-b17e7ff8345c2269.php b/engine/lib/upgrades/2011123100-1.8.2-fix_friend_river-b17e7ff8345c2269.php
new file mode 100644
index 000000000..4dc43cd32
--- /dev/null
+++ b/engine/lib/upgrades/2011123100-1.8.2-fix_friend_river-b17e7ff8345c2269.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg 1.8.2 upgrade 2011123100
+ * fix_friend_river
+ *
+ * Action type was incorrect due to previoud friends river upgrade
+ */
+
+$query = "UPDATE {$CONFIG->dbprefix}river
+ SET action_type='friend'
+ WHERE view='river/relationship/friend/create' AND action_type='create'";
+update_data($query);
diff --git a/engine/lib/upgrades/2011123101-1.8.2-fix_blog_status-b14c2a0e7b9e7d55.php b/engine/lib/upgrades/2011123101-1.8.2-fix_blog_status-b14c2a0e7b9e7d55.php
new file mode 100644
index 000000000..e351c6ac9
--- /dev/null
+++ b/engine/lib/upgrades/2011123101-1.8.2-fix_blog_status-b14c2a0e7b9e7d55.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Elgg 1.8.2 upgrade 2011123101
+ * fix_blog_status
+ *
+ * Most blog posts did not have their status properly set with 1.8 upgrade so we run
+ * the blog status upgrade again
+ */
+
+$ia = elgg_set_ignore_access(true);
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'blog',
+ 'limit' => 0,
+);
+$batch = new ElggBatch('elgg_get_entities', $options);
+
+foreach ($batch as $entity) {
+ if (!$entity->status) {
+ // create metadata owned by the original owner
+ create_metadata($entity->getGUID(), 'status', 'published', '', $entity->owner_guid,
+ $entity->access_id);
+ }
+}
+elgg_set_ignore_access($ia); \ No newline at end of file
diff --git a/engine/lib/upgrades/2012012000-1.8.3-ip_in_syslog-87fe0f068cf62428.php b/engine/lib/upgrades/2012012000-1.8.3-ip_in_syslog-87fe0f068cf62428.php
new file mode 100644
index 000000000..b9514e156
--- /dev/null
+++ b/engine/lib/upgrades/2012012000-1.8.3-ip_in_syslog-87fe0f068cf62428.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg 1.8.3 upgrade 2012012000
+ * ip_in_syslog
+ *
+ * Adds a field for an IP address in the system log table
+ */
+
+$db_prefix = elgg_get_config('dbprefix');
+$q = "ALTER TABLE {$db_prefix}system_log ADD ip_address VARCHAR(15) NOT NULL AFTER time_created";
+
+update_data($q); \ No newline at end of file
diff --git a/engine/lib/upgrades/2012012100-1.8.3-system_cache-93100e7d55a24a11.php b/engine/lib/upgrades/2012012100-1.8.3-system_cache-93100e7d55a24a11.php
new file mode 100644
index 000000000..3a9aae2a1
--- /dev/null
+++ b/engine/lib/upgrades/2012012100-1.8.3-system_cache-93100e7d55a24a11.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg 1.8.3 upgrade 2012012100
+ * system_cache
+ *
+ * Convert viewpath cache to system cache
+ */
+
+$value = datalist_get('viewpath_cache_enabled');
+datalist_set('system_cache_enabled', $value);
+
+$query = "DELETE FROM {$CONFIG->dbprefix}datalists WHERE name='viewpath_cache_enabled'";
+delete_data($query);
diff --git a/engine/lib/upgrades/2012041800-1.8.3-dont_filter_passwords-c0ca4a18b38ae2bc.php b/engine/lib/upgrades/2012041800-1.8.3-dont_filter_passwords-c0ca4a18b38ae2bc.php
new file mode 100644
index 000000000..b82ffbebf
--- /dev/null
+++ b/engine/lib/upgrades/2012041800-1.8.3-dont_filter_passwords-c0ca4a18b38ae2bc.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Elgg 1.8.3 upgrade 2012041800
+ * dont_filter_passwords
+ *
+ * Add admin notice that password handling has changed and if
+ * users can't login to have them reset their passwords.
+ */
+elgg_add_admin_notice('dont_filter_passwords', 'Password handling has been updated to be more secure and flexible. '
+ . 'This change may prevent a small number of users from logging in with their existing passwords. '
+ . 'If a user is unable to log in, please advise him or her to reset their password, or reset it as an admin user.');
diff --git a/engine/lib/upgrades/2012041801-1.8.3-multiple_user_tokens-852225f7fd89f6c5.php b/engine/lib/upgrades/2012041801-1.8.3-multiple_user_tokens-852225f7fd89f6c5.php
new file mode 100644
index 000000000..07732f261
--- /dev/null
+++ b/engine/lib/upgrades/2012041801-1.8.3-multiple_user_tokens-852225f7fd89f6c5.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg 1.8.3 upgrade 2012041801
+ * multiple_user_tokens
+ *
+ * Fixes http://trac.elgg.org/ticket/4291
+ * Removes the unique index on users_apisessions for user_guid and site_guid
+ */
+
+$db_prefix = elgg_get_config('dbprefix');
+$q = "ALTER TABLE {$db_prefix}users_apisessions DROP INDEX user_guid,
+ ADD INDEX user_guid (user_guid, site_guid)";
+update_data($q); \ No newline at end of file
diff --git a/engine/lib/upgrades/create_upgrade.php b/engine/lib/upgrades/create_upgrade.php
new file mode 100644
index 000000000..3652e18a2
--- /dev/null
+++ b/engine/lib/upgrades/create_upgrade.php
@@ -0,0 +1,151 @@
+<?php
+/**
+ * Creates an upgrade file for Elgg.
+ *
+ * Run this from the command line:
+ * php create_upgrade.php upgrade_name
+ */
+
+error_reporting(E_NOTICE);
+
+// only allow from the command line.
+if (php_sapi_name() != 'cli') {
+ die('Upgrades can only be created from the command line.');
+}
+
+if (count($argv) < 2) {
+ elgg_create_upgrade_show_usage('No upgrade name.');
+}
+
+$name = $argv[1];
+
+if (strlen($name) > 24) {
+ elgg_create_upgrade_show_usage('Upgrade names cannot be longer than 24 characters.');
+}
+
+require_once '../../../version.php';
+require_once '../elgglib.php';
+$upgrade_path = dirname(__FILE__);
+
+$upgrade_name = strtolower($name);
+$upgrade_name = str_replace(array(' ', '-'), '_', $upgrade_name);
+$upgrade_release = str_replace(array(' ', '-'), '_', $release);
+$time = time();
+$upgrade_rnd = substr(md5($time), 0, 16);
+$upgrade_date = date('Ymd', $time);
+
+// determine the inc count
+$upgrade_inc = 0;
+$files = elgg_get_file_list($upgrade_path);
+sort($files);
+
+foreach ($files as $filename) {
+ $filename = basename($filename);
+ $date = (int)substr($filename, 0, 8);
+ $inc = (int)substr($filename, 8, 2);
+
+ if ($upgrade_date == $date) {
+ if ($inc >= $upgrade_inc) {
+ $upgrade_inc = $inc + 1;
+ }
+ }
+}
+
+// zero-pad
+// if there are more than 10 upgrades in a day, someone needs talking to.
+if ($upgrade_inc < 10) {
+ $upgrade_inc = "0$upgrade_inc";
+}
+
+$upgrade_version = $upgrade_date . $upgrade_inc;
+
+// make filename
+if (substr($release, 0, 3) == '1.7') {
+ // 1.7 upgrades are YYYYMMDDXX
+ $upgrade_name = $upgrade_version . '.php';
+} else {
+ // 1.8+ upgrades are YYYYMMDDXX-release-friendly_name-rnd
+ $upgrade_name = $upgrade_version . "-$upgrade_release-$name-$upgrade_rnd.php";
+}
+
+$upgrade_file = $upgrade_path . '/' . $upgrade_name;
+
+if (is_file($upgrade_file)) {
+ elgg_create_upgrade_show_usage("Upgrade file $upgrade_file already exists. This script has failed you.");
+}
+
+$upgrade_code = <<<___UPGRADE
+<?php
+/**
+ * Elgg $release upgrade $upgrade_version
+ * $name
+ *
+ * Description
+ */
+
+// upgrade code here.
+
+___UPGRADE;
+
+$h = fopen($upgrade_file, 'wb');
+
+if (!$h) {
+ die("Could not open file $upgrade_file");
+}
+
+if (!fputs($h, $upgrade_code)) {
+ die("Could not write to $upgrade_file");
+} else {
+ elgg_set_version_dot_php_version($upgrade_version);
+ echo <<<___MSG
+
+Created upgrade file and updated version.php.
+
+Upgrade file: $upgrade_name
+Version: $upgrade_version
+
+___MSG;
+}
+
+fclose($h);
+
+
+function elgg_set_version_dot_php_version($version) {
+ $file = '../../../version.php';
+ $h = fopen($file, 'r+b');
+
+ if (!$h) {
+ return false;
+ }
+
+ $out = '';
+
+ while (($line = fgets($h)) !== false) {
+ $find = "/\\\$version[ ]?=[ ]?[0-9]{10};/";
+ $replace = "\$version = $version;";
+ $out .= preg_replace($find, $replace, $line);
+ }
+
+ rewind($h);
+
+ fputs($h, $out);
+ fclose($h);
+}
+
+/**
+ * Shows the usage for the create_upgrade script and dies().
+ *
+ * @param string $msg Optional message to display
+ * @return void
+ */
+function elgg_create_upgrade_show_usage($msg = '') {
+ $text = <<<___MSG
+$msg
+
+Example:
+ php create_upgrade.php my_upgrade
+
+___MSG;
+
+ die($text);
+}
diff --git a/engine/lib/user_settings.php b/engine/lib/user_settings.php
new file mode 100644
index 000000000..e4069fb53
--- /dev/null
+++ b/engine/lib/user_settings.php
@@ -0,0 +1,359 @@
+<?php
+/**
+ * Elgg user settings functions.
+ * Functions for adding and manipulating options on the user settings panel.
+ *
+ * @package Elgg.Core
+ * @subpackage Settings.User
+ */
+
+/**
+ * Saves user settings.
+ *
+ * @todo this assumes settings are coming in on a GET/POST request
+ *
+ * @note This is a handler for the 'usersettings:save', 'user' plugin hook
+ *
+ * @return void
+ * @access private
+ */
+function users_settings_save() {
+ elgg_set_user_language();
+ elgg_set_user_password();
+ elgg_set_user_default_access();
+ elgg_set_user_name();
+ elgg_set_user_email();
+}
+
+/**
+ * Set a user's password
+ *
+ * @return bool
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_set_user_password() {
+ $current_password = get_input('current_password', null, false);
+ $password = get_input('password', null, false);
+ $password2 = get_input('password2', null, false);
+ $user_guid = get_input('guid');
+
+ if (!$user_guid) {
+ $user = elgg_get_logged_in_user_entity();
+ } else {
+ $user = get_entity($user_guid);
+ }
+
+ if ($user && $password) {
+ // let admin user change anyone's password without knowing it except his own.
+ if (!elgg_is_admin_logged_in() || elgg_is_admin_logged_in() && $user->guid == elgg_get_logged_in_user_guid()) {
+ $credentials = array(
+ 'username' => $user->username,
+ 'password' => $current_password
+ );
+
+ try {
+ pam_auth_userpass($credentials);
+ } catch (LoginException $e) {
+ register_error(elgg_echo('LoginException:ChangePasswordFailure'));
+ return false;
+ }
+ }
+
+ try {
+ $result = validate_password($password);
+ } catch (RegistrationException $e) {
+ register_error($e->getMessage());
+ return false;
+ }
+
+ if ($result) {
+ if ($password == $password2) {
+ $user->salt = generate_random_cleartext_password(); // Reset the salt
+ $user->password = generate_user_password($user, $password);
+ if ($user->save()) {
+ system_message(elgg_echo('user:password:success'));
+ return true;
+ } else {
+ register_error(elgg_echo('user:password:fail'));
+ }
+ } else {
+ register_error(elgg_echo('user:password:fail:notsame'));
+ }
+ } else {
+ register_error(elgg_echo('user:password:fail:tooshort'));
+ }
+ } else {
+ // no change
+ return null;
+ }
+
+ return false;
+}
+
+/**
+ * Set a user's display name
+ *
+ * @return bool
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_set_user_name() {
+ $name = strip_tags(get_input('name'));
+ $user_id = get_input('guid');
+
+ if (!$user_id) {
+ $user = elgg_get_logged_in_user_entity();
+ } else {
+ $user = get_entity($user_id);
+ }
+
+ if (elgg_strlen($name) > 50) {
+ register_error(elgg_echo('user:name:fail'));
+ return false;
+ }
+
+ if (($user) && ($user->canEdit()) && ($name)) {
+ if ($name != $user->name) {
+ $user->name = $name;
+ if ($user->save()) {
+ system_message(elgg_echo('user:name:success'));
+ return true;
+ } else {
+ register_error(elgg_echo('user:name:fail'));
+ }
+ } else {
+ // no change
+ return null;
+ }
+ } else {
+ register_error(elgg_echo('user:name:fail'));
+ }
+ return false;
+}
+
+/**
+ * Set a user's language
+ *
+ * @return bool
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_set_user_language() {
+ $language = get_input('language');
+ $user_id = get_input('guid');
+
+ if (!$user_id) {
+ $user = elgg_get_logged_in_user_entity();
+ } else {
+ $user = get_entity($user_id);
+ }
+
+ if (($user) && ($language)) {
+ if (strcmp($language, $user->language) != 0) {
+ $user->language = $language;
+ if ($user->save()) {
+ system_message(elgg_echo('user:language:success'));
+ return true;
+ } else {
+ register_error(elgg_echo('user:language:fail'));
+ }
+ } else {
+ // no change
+ return null;
+ }
+ } else {
+ register_error(elgg_echo('user:language:fail'));
+ }
+ return false;
+}
+
+/**
+ * Set a user's email address
+ *
+ * @return bool
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_set_user_email() {
+ $email = get_input('email');
+ $user_id = get_input('guid');
+
+ if (!$user_id) {
+ $user = elgg_get_logged_in_user_entity();
+ } else {
+ $user = get_entity($user_id);
+ }
+
+ if (!is_email_address($email)) {
+ register_error(elgg_echo('email:save:fail'));
+ return false;
+ }
+
+ if ($user) {
+ if (strcmp($email, $user->email) != 0) {
+ if (!get_user_by_email($email)) {
+ if ($user->email != $email) {
+
+ $user->email = $email;
+ if ($user->save()) {
+ system_message(elgg_echo('email:save:success'));
+ return true;
+ } else {
+ register_error(elgg_echo('email:save:fail'));
+ }
+ }
+ } else {
+ register_error(elgg_echo('registration:dupeemail'));
+ }
+ } else {
+ // no change
+ return null;
+ }
+ } else {
+ register_error(elgg_echo('email:save:fail'));
+ }
+ return false;
+}
+
+/**
+ * Set a user's default access level
+ *
+ * @return bool
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_set_user_default_access() {
+
+ if (!elgg_get_config('allow_user_default_access')) {
+ return false;
+ }
+
+ $default_access = get_input('default_access');
+ $user_id = get_input('guid');
+
+ if (!$user_id) {
+ $user = elgg_get_logged_in_user_entity();
+ } else {
+ $user = get_entity($user_id);
+ }
+
+ if ($user) {
+ $current_default_access = $user->getPrivateSetting('elgg_default_access');
+ if ($default_access !== $current_default_access) {
+ if ($user->setPrivateSetting('elgg_default_access', $default_access)) {
+ system_message(elgg_echo('user:default_access:success'));
+ return true;
+ } else {
+ register_error(elgg_echo('user:default_access:fail'));
+ }
+ } else {
+ // no change
+ return null;
+ }
+ } else {
+ register_error(elgg_echo('user:default_access:fail'));
+ }
+
+ return false;
+}
+
+/**
+ * Set up the menu for user settings
+ *
+ * @return void
+ * @access private
+ */
+function usersettings_pagesetup() {
+ if (elgg_get_context() == "settings") {
+ $user = elgg_get_page_owner_entity();
+
+ $params = array(
+ 'name' => '1_account',
+ 'text' => elgg_echo('usersettings:user:opt:linktext'),
+ 'href' => "settings/user/{$user->username}",
+ );
+ elgg_register_menu_item('page', $params);
+ $params = array(
+ 'name' => '1_plugins',
+ 'text' => elgg_echo('usersettings:plugins:opt:linktext'),
+ 'href' => "settings/plugins/{$user->username}",
+ );
+ elgg_register_menu_item('page', $params);
+ $params = array(
+ 'name' => '1_statistics',
+ 'text' => elgg_echo('usersettings:statistics:opt:linktext'),
+ 'href' => "settings/statistics/{$user->username}",
+ );
+ elgg_register_menu_item('page', $params);
+ }
+}
+
+/**
+ * Page handler for user settings
+ *
+ * @param array $page Pages array
+ *
+ * @return bool
+ * @access private
+ */
+function usersettings_page_handler($page) {
+ global $CONFIG;
+
+ if (!isset($page[0])) {
+ $page[0] = 'user';
+ }
+
+ if (isset($page[1])) {
+ $user = get_user_by_username($page[1]);
+ elgg_set_page_owner_guid($user->guid);
+ } else {
+ $user = elgg_get_logged_in_user_guid();
+ elgg_set_page_owner_guid($user->guid);
+ }
+
+ elgg_push_breadcrumb(elgg_echo('settings'), "settings/user/$user->username");
+
+ switch ($page[0]) {
+ case 'statistics':
+ elgg_push_breadcrumb(elgg_echo('usersettings:statistics:opt:linktext'));
+ $path = $CONFIG->path . "pages/settings/statistics.php";
+ break;
+ case 'plugins':
+ elgg_push_breadcrumb(elgg_echo('usersettings:plugins:opt:linktext'));
+ $path = $CONFIG->path . "pages/settings/tools.php";
+ break;
+ case 'user':
+ $path = $CONFIG->path . "pages/settings/account.php";
+ break;
+ }
+
+ if (isset($path)) {
+ require $path;
+ return true;
+ }
+}
+
+/**
+ * Initialize the user settings library
+ *
+ * @return void
+ * @access private
+ */
+function usersettings_init() {
+ elgg_register_page_handler('settings', 'usersettings_page_handler');
+
+ elgg_register_plugin_hook_handler('usersettings:save', 'user', 'users_settings_save');
+
+ elgg_register_action("usersettings/save");
+
+ // extend the account settings form
+ elgg_extend_view('forms/account/settings', 'core/settings/account/name', 100);
+ elgg_extend_view('forms/account/settings', 'core/settings/account/password', 100);
+ elgg_extend_view('forms/account/settings', 'core/settings/account/email', 100);
+ elgg_extend_view('forms/account/settings', 'core/settings/account/language', 100);
+ elgg_extend_view('forms/account/settings', 'core/settings/account/default_access', 100);
+}
+
+elgg_register_event_handler('init', 'system', 'usersettings_init');
+elgg_register_event_handler('pagesetup', 'system', 'usersettings_pagesetup');
diff --git a/engine/lib/users.php b/engine/lib/users.php
new file mode 100644
index 000000000..95ef9d176
--- /dev/null
+++ b/engine/lib/users.php
@@ -0,0 +1,1607 @@
+<?php
+/**
+ * Elgg users
+ * Functions to manage multiple or single users in an Elgg install
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel.User
+ */
+
+/// Map a username to a cached GUID
+global $USERNAME_TO_GUID_MAP_CACHE;
+$USERNAME_TO_GUID_MAP_CACHE = array();
+
+/// Map a user code to a cached GUID
+global $CODE_TO_GUID_MAP_CACHE;
+$CODE_TO_GUID_MAP_CACHE = array();
+
+/**
+ * Return the user specific details of a user by a row.
+ *
+ * @param int $guid The ElggUser guid
+ *
+ * @return mixed
+ * @access private
+ */
+function get_user_entity_as_row($guid) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ return get_data_row("SELECT * from {$CONFIG->dbprefix}users_entity where guid=$guid");
+}
+
+/**
+ * Create or update the entities table for a given user.
+ * Call create_entity first.
+ *
+ * @param int $guid The user's GUID
+ * @param string $name The user's display name
+ * @param string $username The username
+ * @param string $password The password
+ * @param string $salt A salt for the password
+ * @param string $email The user's email address
+ * @param string $language The user's default language
+ * @param string $code A code
+ *
+ * @return bool
+ * @access private
+ */
+function create_user_entity($guid, $name, $username, $password, $salt, $email, $language, $code) {
+ global $CONFIG;
+
+ $guid = (int)$guid;
+ $name = sanitise_string($name);
+ $username = sanitise_string($username);
+ $password = sanitise_string($password);
+ $salt = sanitise_string($salt);
+ $email = sanitise_string($email);
+ $language = sanitise_string($language);
+ $code = sanitise_string($code);
+
+ $row = get_entity_as_row($guid);
+ if ($row) {
+ // Exists and you have access to it
+ $query = "SELECT guid from {$CONFIG->dbprefix}users_entity where guid = {$guid}";
+ if ($exists = get_data_row($query)) {
+ $query = "UPDATE {$CONFIG->dbprefix}users_entity
+ SET name='$name', username='$username', password='$password', salt='$salt',
+ email='$email', language='$language', code='$code'
+ WHERE guid = $guid";
+
+ $result = update_data($query);
+ if ($result != false) {
+ // Update succeeded, continue
+ $entity = get_entity($guid);
+ if (elgg_trigger_event('update', $entity->type, $entity)) {
+ return $guid;
+ } else {
+ $entity->delete();
+ }
+ }
+ } else {
+ // Exists query failed, attempt an insert.
+ $query = "INSERT into {$CONFIG->dbprefix}users_entity
+ (guid, name, username, password, salt, email, language, code)
+ values ($guid, '$name', '$username', '$password', '$salt', '$email', '$language', '$code')";
+
+ $result = insert_data($query);
+ if ($result !== false) {
+ $entity = get_entity($guid);
+ if (elgg_trigger_event('create', $entity->type, $entity)) {
+ return $guid;
+ } else {
+ $entity->delete();
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Disables all of a user's entities
+ *
+ * @param int $owner_guid The owner GUID
+ *
+ * @return bool Depending on success
+ */
+function disable_user_entities($owner_guid) {
+ global $CONFIG;
+ $owner_guid = (int) $owner_guid;
+ if ($entity = get_entity($owner_guid)) {
+ if (elgg_trigger_event('disable', $entity->type, $entity)) {
+ if ($entity->canEdit()) {
+ $query = "UPDATE {$CONFIG->dbprefix}entities
+ set enabled='no' where owner_guid={$owner_guid}
+ or container_guid = {$owner_guid}";
+
+ $res = update_data($query);
+ return $res;
+ }
+ }
+ }
+
+ return false;
+}
+
+/**
+ * Ban a user
+ *
+ * @param int $user_guid The user guid
+ * @param string $reason A reason
+ *
+ * @return bool
+ */
+function ban_user($user_guid, $reason = "") {
+ global $CONFIG;
+
+ $user_guid = (int)$user_guid;
+
+ $user = get_entity($user_guid);
+
+ if (($user) && ($user->canEdit()) && ($user instanceof ElggUser)) {
+ if (elgg_trigger_event('ban', 'user', $user)) {
+ // Add reason
+ if ($reason) {
+ create_metadata($user_guid, 'ban_reason', $reason, '', 0, ACCESS_PUBLIC);
+ }
+
+ // clear "remember me" cookie code so user cannot login in using it
+ $user->code = "";
+ $user->save();
+
+ // invalidate memcache for this user
+ static $newentity_cache;
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+
+ if ($newentity_cache) {
+ $newentity_cache->delete($user_guid);
+ }
+
+ // Set ban flag
+ $query = "UPDATE {$CONFIG->dbprefix}users_entity set banned='yes' where guid=$user_guid";
+ return update_data($query);
+ }
+
+ return FALSE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Unban a user.
+ *
+ * @param int $user_guid Unban a user.
+ *
+ * @return bool
+ */
+function unban_user($user_guid) {
+ global $CONFIG;
+
+ $user_guid = (int)$user_guid;
+
+ $user = get_entity($user_guid);
+
+ if (($user) && ($user->canEdit()) && ($user instanceof ElggUser)) {
+ if (elgg_trigger_event('unban', 'user', $user)) {
+ create_metadata($user_guid, 'ban_reason', '', '', 0, ACCESS_PUBLIC);
+
+ // invalidate memcache for this user
+ static $newentity_cache;
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+
+ if ($newentity_cache) {
+ $newentity_cache->delete($user_guid);
+ }
+
+
+ $query = "UPDATE {$CONFIG->dbprefix}users_entity set banned='no' where guid=$user_guid";
+ return update_data($query);
+ }
+
+ return FALSE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Makes user $guid an admin.
+ *
+ * @param int $user_guid User guid
+ *
+ * @return bool
+ */
+function make_user_admin($user_guid) {
+ global $CONFIG;
+
+ $user = get_entity((int)$user_guid);
+
+ if (($user) && ($user instanceof ElggUser) && ($user->canEdit())) {
+ if (elgg_trigger_event('make_admin', 'user', $user)) {
+
+ // invalidate memcache for this user
+ static $newentity_cache;
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+
+ if ($newentity_cache) {
+ $newentity_cache->delete($user_guid);
+ }
+
+ $r = update_data("UPDATE {$CONFIG->dbprefix}users_entity set admin='yes' where guid=$user_guid");
+ invalidate_cache_for_entity($user_guid);
+ return $r;
+ }
+
+ return FALSE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Removes user $guid's admin flag.
+ *
+ * @param int $user_guid User GUID
+ *
+ * @return bool
+ */
+function remove_user_admin($user_guid) {
+ global $CONFIG;
+
+ $user = get_entity((int)$user_guid);
+
+ if (($user) && ($user instanceof ElggUser) && ($user->canEdit())) {
+ if (elgg_trigger_event('remove_admin', 'user', $user)) {
+
+ // invalidate memcache for this user
+ static $newentity_cache;
+ if ((!$newentity_cache) && (is_memcache_available())) {
+ $newentity_cache = new ElggMemcache('new_entity_cache');
+ }
+
+ if ($newentity_cache) {
+ $newentity_cache->delete($user_guid);
+ }
+
+ $r = update_data("UPDATE {$CONFIG->dbprefix}users_entity set admin='no' where guid=$user_guid");
+ invalidate_cache_for_entity($user_guid);
+ return $r;
+ }
+
+ return FALSE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Get the sites this user is part of
+ *
+ * @param int $user_guid The user's GUID
+ * @param int $limit Number of results to return
+ * @param int $offset Any indexing offset
+ *
+ * @return false|array On success, an array of ElggSites
+ */
+function get_user_sites($user_guid, $limit = 10, $offset = 0) {
+ $user_guid = (int)$user_guid;
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+
+ return elgg_get_entities_from_relationship(array(
+ 'site_guids' => ELGG_ENTITIES_ANY_VALUE,
+ 'relationship' => 'member_of_site',
+ 'relationship_guid' => $user_guid,
+ 'inverse_relationship' => FALSE,
+ 'types' => 'site',
+ 'limit' => $limit,
+ 'offset' => $offset,
+ ));
+}
+
+/**
+ * Adds a user to another user's friends list.
+ *
+ * @param int $user_guid The GUID of the friending user
+ * @param int $friend_guid The GUID of the user to friend
+ *
+ * @return bool Depending on success
+ */
+function user_add_friend($user_guid, $friend_guid) {
+ $user_guid = (int) $user_guid;
+ $friend_guid = (int) $friend_guid;
+ if ($user_guid == $friend_guid) {
+ return false;
+ }
+ if (!$friend = get_entity($friend_guid)) {
+ return false;
+ }
+ if (!$user = get_entity($user_guid)) {
+ return false;
+ }
+ if ((!($user instanceof ElggUser)) || (!($friend instanceof ElggUser))) {
+ return false;
+ }
+ return add_entity_relationship($user_guid, "friend", $friend_guid);
+}
+
+/**
+ * Removes a user from another user's friends list.
+ *
+ * @param int $user_guid The GUID of the friending user
+ * @param int $friend_guid The GUID of the user on the friends list
+ *
+ * @return bool Depending on success
+ */
+function user_remove_friend($user_guid, $friend_guid) {
+ global $CONFIG;
+
+ $user_guid = (int) $user_guid;
+ $friend_guid = (int) $friend_guid;
+
+ // perform cleanup for access lists.
+ $collections = get_user_access_collections($user_guid);
+ if ($collections) {
+ foreach ($collections as $collection) {
+ remove_user_from_access_collection($friend_guid, $collection->id);
+ }
+ }
+
+ return remove_entity_relationship($user_guid, "friend", $friend_guid);
+}
+
+/**
+ * Determines whether or not a user is another user's friend.
+ *
+ * @param int $user_guid The GUID of the user
+ * @param int $friend_guid The GUID of the friend
+ *
+ * @return bool
+ */
+function user_is_friend($user_guid, $friend_guid) {
+ return check_entity_relationship($user_guid, "friend", $friend_guid) !== false;
+}
+
+/**
+ * Obtains a given user's friends
+ *
+ * @param int $user_guid The user's GUID
+ * @param string $subtype The subtype of users, if any
+ * @param int $limit Number of results to return (default 10)
+ * @param int $offset Indexing offset, if any
+ *
+ * @return false|array Either an array of ElggUsers or false, depending on success
+ */
+function get_user_friends($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,
+$offset = 0) {
+
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => 'friend',
+ 'relationship_guid' => $user_guid,
+ 'types' => 'user',
+ 'subtypes' => $subtype,
+ 'limit' => $limit,
+ 'offset' => $offset
+ ));
+}
+
+/**
+ * Obtains the people who have made a given user a friend
+ *
+ * @param int $user_guid The user's GUID
+ * @param string $subtype The subtype of users, if any
+ * @param int $limit Number of results to return (default 10)
+ * @param int $offset Indexing offset, if any
+ *
+ * @return false|array Either an array of ElggUsers or false, depending on success
+ */
+function get_user_friends_of($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,
+$offset = 0) {
+
+ return elgg_get_entities_from_relationship(array(
+ 'relationship' => 'friend',
+ 'relationship_guid' => $user_guid,
+ 'inverse_relationship' => TRUE,
+ 'types' => 'user',
+ 'subtypes' => $subtype,
+ 'limit' => $limit,
+ 'offset' => $offset
+ ));
+}
+
+/**
+ * Obtains a list of objects owned by a user's friends
+ *
+ * @param int $user_guid The GUID of the user to get the friends of
+ * @param string $subtype Optionally, the subtype of objects
+ * @param int $limit The number of results to return (default 10)
+ * @param int $offset Indexing offset, if any
+ * @param int $timelower The earliest time the entity can have been created. Default: all
+ * @param int $timeupper The latest time the entity can have been created. Default: all
+ *
+ * @return false|array An array of ElggObjects or false, depending on success
+ */
+function get_user_friends_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE, $limit = 10,
+$offset = 0, $timelower = 0, $timeupper = 0) {
+
+ if ($friends = get_user_friends($user_guid, "", 999999, 0)) {
+ $friendguids = array();
+ foreach ($friends as $friend) {
+ $friendguids[] = $friend->getGUID();
+ }
+ return elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'owner_guids' => $friendguids,
+ 'limit' => $limit,
+ 'offset' => $offset,
+ 'container_guids' => $friendguids,
+ 'created_time_lower' => $timelower,
+ 'created_time_upper' => $timeupper
+ ));
+ }
+ return FALSE;
+}
+
+/**
+ * Counts the number of objects owned by a user's friends
+ *
+ * @param int $user_guid The GUID of the user to get the friends of
+ * @param string $subtype Optionally, the subtype of objects
+ * @param int $timelower The earliest time the entity can have been created. Default: all
+ * @param int $timeupper The latest time the entity can have been created. Default: all
+ *
+ * @return int The number of objects
+ */
+function count_user_friends_objects($user_guid, $subtype = ELGG_ENTITIES_ANY_VALUE,
+$timelower = 0, $timeupper = 0) {
+
+ if ($friends = get_user_friends($user_guid, "", 999999, 0)) {
+ $friendguids = array();
+ foreach ($friends as $friend) {
+ $friendguids[] = $friend->getGUID();
+ }
+ return elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'owner_guids' => $friendguids,
+ 'count' => TRUE,
+ 'container_guids' => $friendguids,
+ 'created_time_lower' => $timelower,
+ 'created_time_upper' => $timeupper
+ ));
+ }
+ return 0;
+}
+
+/**
+ * Displays a list of a user's friends' objects of a particular subtype, with navigation.
+ *
+ * @see elgg_view_entity_list
+ *
+ * @param int $user_guid The GUID of the user
+ * @param string $subtype The object subtype
+ * @param int $limit The number of entities to display on a page
+ * @param bool $full_view Whether or not to display the full view (default: true)
+ * @param bool $listtypetoggle Whether or not to allow you to flip to gallery mode (default: true)
+ * @param bool $pagination Whether to display pagination (default: true)
+ * @param int $timelower The earliest time the entity can have been created. Default: all
+ * @param int $timeupper The latest time the entity can have been created. Default: all
+ *
+ * @return string
+ */
+function list_user_friends_objects($user_guid, $subtype = "", $limit = 10, $full_view = true,
+$listtypetoggle = true, $pagination = true, $timelower = 0, $timeupper = 0) {
+
+ $offset = (int)get_input('offset');
+ $limit = (int)$limit;
+ $count = (int)count_user_friends_objects($user_guid, $subtype, $timelower, $timeupper);
+
+ $entities = get_user_friends_objects($user_guid, $subtype, $limit, $offset,
+ $timelower, $timeupper);
+
+ return elgg_view_entity_list($entities, array(
+ 'count' => $count,
+ 'offset' => $offset,
+ 'limit' => $limit,
+ 'full_view' => $full_view,
+ 'list_type_toggle' => $listtypetoggle,
+ 'pagination' => $pagination,
+ ));
+}
+
+/**
+ * Get a user object from a GUID.
+ *
+ * This function returns an ElggUser from a given GUID.
+ *
+ * @param int $guid The GUID
+ *
+ * @return ElggUser|false
+ */
+function get_user($guid) {
+ // Fixes "Exception thrown without stack frame" when db_select fails
+ if (!empty($guid)) {
+ $result = get_entity($guid);
+ }
+
+ if ((!empty($result)) && (!($result instanceof ElggUser))) {
+ return false;
+ }
+
+ if (!empty($result)) {
+ return $result;
+ }
+
+ return false;
+}
+
+/**
+ * Get user by username
+ *
+ * @param string $username The user's username
+ *
+ * @return ElggUser|false Depending on success
+ */
+function get_user_by_username($username) {
+ global $CONFIG, $USERNAME_TO_GUID_MAP_CACHE;
+
+ $username = sanitise_string($username);
+ $access = get_access_sql_suffix('e');
+
+ // Caching
+ if ((isset($USERNAME_TO_GUID_MAP_CACHE[$username]))
+ && (retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]))) {
+ return retrieve_cached_entity($USERNAME_TO_GUID_MAP_CACHE[$username]);
+ }
+
+ $query = "SELECT e.* from {$CONFIG->dbprefix}users_entity u
+ join {$CONFIG->dbprefix}entities e on e.guid=u.guid
+ where u.username='$username' and $access ";
+
+ $entity = get_data_row($query, 'entity_row_to_elggstar');
+ if ($entity) {
+ $USERNAME_TO_GUID_MAP_CACHE[$username] = $entity->guid;
+ } else {
+ $entity = false;
+ }
+
+ return $entity;
+}
+
+/**
+ * Get user by session code
+ *
+ * @param string $code The session code
+ *
+ * @return ElggUser|false Depending on success
+ */
+function get_user_by_code($code) {
+ global $CONFIG, $CODE_TO_GUID_MAP_CACHE;
+
+ $code = sanitise_string($code);
+
+ $access = get_access_sql_suffix('e');
+
+ // Caching
+ if ((isset($CODE_TO_GUID_MAP_CACHE[$code]))
+ && (retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]))) {
+
+ return retrieve_cached_entity($CODE_TO_GUID_MAP_CACHE[$code]);
+ }
+
+ $query = "SELECT e.* from {$CONFIG->dbprefix}users_entity u
+ join {$CONFIG->dbprefix}entities e on e.guid=u.guid
+ where u.code='$code' and $access";
+
+ $entity = get_data_row($query, 'entity_row_to_elggstar');
+ if ($entity) {
+ $CODE_TO_GUID_MAP_CACHE[$code] = $entity->guid;
+ }
+
+ return $entity;
+}
+
+/**
+ * Get an array of users from an email address
+ *
+ * @param string $email Email address.
+ *
+ * @return array
+ */
+function get_user_by_email($email) {
+ global $CONFIG;
+
+ $email = sanitise_string($email);
+
+ $access = get_access_sql_suffix('e');
+
+ $query = "SELECT e.* from {$CONFIG->dbprefix}entities e
+ join {$CONFIG->dbprefix}users_entity u on e.guid=u.guid
+ where email='$email' and $access";
+
+ return get_data($query, 'entity_row_to_elggstar');
+}
+
+/**
+ * A function that returns a maximum of $limit users who have done something within the last
+ * $seconds seconds or the total count of active users.
+ *
+ * @param int $seconds Number of seconds (default 600 = 10min)
+ * @param int $limit Limit, default 10.
+ * @param int $offset Offset, default 0.
+ * @param bool $count Count, default false.
+ *
+ * @return mixed
+ */
+function find_active_users($seconds = 600, $limit = 10, $offset = 0, $count = false) {
+ $seconds = (int)$seconds;
+ $limit = (int)$limit;
+ $offset = (int)$offset;
+ $params = array('seconds' => $seconds, 'limit' => $limit, 'offset' => $offset, 'count' => $count);
+ $data = elgg_trigger_plugin_hook('find_active_users', 'system', $params, NULL);
+ if (!$data) {
+ global $CONFIG;
+
+ $time = time() - $seconds;
+
+ $data = elgg_get_entities(array(
+ 'type' => 'user',
+ 'limit' => $limit,
+ 'offset' => $offset,
+ 'count' => $count,
+ 'joins' => array("join {$CONFIG->dbprefix}users_entity u on e.guid = u.guid"),
+ 'wheres' => array("u.last_action >= {$time}"),
+ 'order_by' => "u.last_action desc"
+ ));
+ }
+ return $data;
+}
+
+/**
+ * Generate and send a password request email to a given user's registered email address.
+ *
+ * @param int $user_guid User GUID
+ *
+ * @return bool
+ */
+function send_new_password_request($user_guid) {
+ global $CONFIG;
+
+ $user_guid = (int)$user_guid;
+
+ $user = get_entity($user_guid);
+ if ($user) {
+ // generate code
+ $code = generate_random_cleartext_password();
+ $user->setPrivateSetting('passwd_conf_code', $code);
+
+
+ // generate link
+ $link = $CONFIG->site->url . "resetpassword?u=$user_guid&c=$code";
+
+ // generate email
+ $email = elgg_echo('email:resetreq:body', array($user->name, $_SERVER['REMOTE_ADDR'], $link));
+
+ return notify_user($user->guid, $CONFIG->site->guid,
+ elgg_echo('email:resetreq:subject'), $email, NULL, 'email');
+ }
+
+ return false;
+}
+
+/**
+ * Low level function to reset a given user's password.
+ *
+ * This can only be called from execute_new_password_request().
+ *
+ * @param int $user_guid The user.
+ * @param string $password Text (which will then be converted into a hash and stored)
+ *
+ * @return bool
+ */
+function force_user_password_reset($user_guid, $password) {
+ global $CONFIG;
+
+ $user = get_entity($user_guid);
+
+ if ($user) {
+ $salt = generate_random_cleartext_password(); // Reset the salt
+ $user->salt = $salt;
+
+ $hash = generate_user_password($user, $password);
+
+ $query = "UPDATE {$CONFIG->dbprefix}users_entity
+ set password='$hash', salt='$salt' where guid=$user_guid";
+ return update_data($query);
+ }
+
+ return false;
+}
+
+/**
+ * Validate and execute a password reset for a user.
+ *
+ * @param int $user_guid The user id
+ * @param string $conf_code Confirmation code as sent in the request email.
+ *
+ * @return mixed
+ */
+function execute_new_password_request($user_guid, $conf_code) {
+ global $CONFIG;
+
+ $user_guid = (int)$user_guid;
+ $user = get_entity($user_guid);
+
+ if ($user) {
+ $saved_code = $user->getPrivateSetting('passwd_conf_code');
+
+ if ($saved_code && $saved_code == $conf_code) {
+ $password = generate_random_cleartext_password();
+
+ if (force_user_password_reset($user_guid, $password)) {
+ remove_private_setting($user_guid, 'passwd_conf_code');
+ // clean the logins failures
+ reset_login_failure_count($user_guid);
+
+ $email = elgg_echo('email:resetpassword:body', array($user->name, $password));
+
+ return notify_user($user->guid, $CONFIG->site->guid,
+ elgg_echo('email:resetpassword:subject'), $email, NULL, 'email');
+ }
+ }
+ }
+
+ return FALSE;
+}
+
+/**
+ * Simple function that will generate a random clear text password
+ * suitable for feeding into generate_user_password().
+ *
+ * @see generate_user_password
+ *
+ * @return string
+ */
+function generate_random_cleartext_password() {
+ return substr(md5(microtime() . rand()), 0, 8);
+}
+
+/**
+ * Generate a password for a user, currently uses MD5.
+ *
+ * @param ElggUser $user The user this is being generated for.
+ * @param string $password Password in clear text
+ *
+ * @return string
+ */
+function generate_user_password(ElggUser $user, $password) {
+ return md5($password . $user->salt);
+}
+
+/**
+ * Simple function which ensures that a username contains only valid characters.
+ *
+ * This should only permit chars that are valid on the file system as well.
+ *
+ * @param string $username Username
+ *
+ * @return bool
+ * @throws RegistrationException on invalid
+ */
+function validate_username($username) {
+ global $CONFIG;
+
+ // Basic, check length
+ if (!isset($CONFIG->minusername)) {
+ $CONFIG->minusername = 4;
+ }
+
+ if (strlen($username) < $CONFIG->minusername) {
+ $msg = elgg_echo('registration:usernametooshort', array($CONFIG->minusername));
+ throw new RegistrationException($msg);
+ }
+
+ // username in the database has a limit of 128 characters
+ if (strlen($username) > 128) {
+ $msg = elgg_echo('registration:usernametoolong', array(128));
+ throw new RegistrationException($msg);
+ }
+
+ // Blacklist for bad characters (partially nicked from mediawiki)
+ $blacklist = '/[' .
+ '\x{0080}-\x{009f}' . // iso-8859-1 control chars
+ '\x{00a0}' . // non-breaking space
+ '\x{2000}-\x{200f}' . // various whitespace
+ '\x{2028}-\x{202f}' . // breaks and control chars
+ '\x{3000}' . // ideographic space
+ '\x{e000}-\x{f8ff}' . // private use
+ ']/u';
+
+ if (
+ preg_match($blacklist, $username)
+ ) {
+ // @todo error message needs work
+ throw new RegistrationException(elgg_echo('registration:invalidchars'));
+ }
+
+ // Belts and braces
+ // @todo Tidy into main unicode
+ $blacklist2 = '\'/\\"*& ?#%^(){}[]~?<>;|¬`@-+=';
+
+ for ($n = 0; $n < strlen($blacklist2); $n++) {
+ if (strpos($username, $blacklist2[$n]) !== false) {
+ $msg = elgg_echo('registration:invalidchars', array($blacklist2[$n], $blacklist2));
+ $msg = htmlentities($msg, ENT_COMPAT, 'UTF-8');
+ throw new RegistrationException($msg);
+ }
+ }
+
+ $result = true;
+ return elgg_trigger_plugin_hook('registeruser:validate:username', 'all',
+ array('username' => $username), $result);
+}
+
+/**
+ * Simple validation of a password.
+ *
+ * @param string $password Clear text password
+ *
+ * @return bool
+ * @throws RegistrationException on invalid
+ */
+function validate_password($password) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->min_password_length)) {
+ $CONFIG->min_password_length = 6;
+ }
+
+ if (strlen($password) < $CONFIG->min_password_length) {
+ $msg = elgg_echo('registration:passwordtooshort', array($CONFIG->min_password_length));
+ throw new RegistrationException($msg);
+ }
+
+ $result = true;
+ return elgg_trigger_plugin_hook('registeruser:validate:password', 'all',
+ array('password' => $password), $result);
+}
+
+/**
+ * Simple validation of a email.
+ *
+ * @param string $address Email address
+ *
+ * @throws RegistrationException on invalid
+ * @return bool
+ */
+function validate_email_address($address) {
+ if (!is_email_address($address)) {
+ throw new RegistrationException(elgg_echo('registration:notemail'));
+ }
+
+ // Got here, so lets try a hook (defaulting to ok)
+ $result = true;
+ return elgg_trigger_plugin_hook('registeruser:validate:email', 'all',
+ array('email' => $address), $result);
+}
+
+/**
+ * Registers a user, returning false if the username already exists
+ *
+ * @param string $username The username of the new user
+ * @param string $password The password
+ * @param string $name The user's display name
+ * @param string $email Their email address
+ * @param bool $allow_multiple_emails Allow the same email address to be
+ * registered multiple times?
+ * @param int $friend_guid GUID of a user to friend once fully registered
+ * @param string $invitecode An invite code from a friend
+ *
+ * @return int|false The new user's GUID; false on failure
+ */
+function register_user($username, $password, $name, $email,
+$allow_multiple_emails = false, $friend_guid = 0, $invitecode = '') {
+
+ // Load the configuration
+ global $CONFIG;
+
+ // no need to trim password.
+ $username = trim($username);
+ $name = trim(strip_tags($name));
+ $email = trim($email);
+
+ // A little sanity checking
+ if (empty($username)
+ || empty($password)
+ || empty($name)
+ || empty($email)) {
+ return false;
+ }
+
+ // Make sure a user with conflicting details hasn't registered and been disabled
+ $access_status = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+
+ if (!validate_email_address($email)) {
+ throw new RegistrationException(elgg_echo('registration:emailnotvalid'));
+ }
+
+ if (!validate_password($password)) {
+ throw new RegistrationException(elgg_echo('registration:passwordnotvalid'));
+ }
+
+ if (!validate_username($username)) {
+ throw new RegistrationException(elgg_echo('registration:usernamenotvalid'));
+ }
+
+ if ($user = get_user_by_username($username)) {
+ throw new RegistrationException(elgg_echo('registration:userexists'));
+ }
+
+ if ((!$allow_multiple_emails) && (get_user_by_email($email))) {
+ throw new RegistrationException(elgg_echo('registration:dupeemail'));
+ }
+
+ access_show_hidden_entities($access_status);
+
+ // Create user
+ $user = new ElggUser();
+ $user->username = $username;
+ $user->email = $email;
+ $user->name = $name;
+ $user->access_id = ACCESS_PUBLIC;
+ $user->salt = generate_random_cleartext_password(); // Note salt generated before password!
+ $user->password = generate_user_password($user, $password);
+ $user->owner_guid = 0; // Users aren't owned by anyone, even if they are admin created.
+ $user->container_guid = 0; // Users aren't contained by anyone, even if they are admin created.
+ $user->language = get_current_language();
+ $user->save();
+
+ // If $friend_guid has been set, make mutual friends
+ if ($friend_guid) {
+ if ($friend_user = get_user($friend_guid)) {
+ if ($invitecode == generate_invite_code($friend_user->username)) {
+ $user->addFriend($friend_guid);
+ $friend_user->addFriend($user->guid);
+
+ // @todo Should this be in addFriend?
+ add_to_river('river/relationship/friend/create', 'friend', $user->getGUID(), $friend_guid);
+ add_to_river('river/relationship/friend/create', 'friend', $friend_guid, $user->getGUID());
+ }
+ }
+ }
+
+ // Turn on email notifications by default
+ set_user_notification_setting($user->getGUID(), 'email', true);
+
+ return $user->getGUID();
+}
+
+/**
+ * Generates a unique invite code for a user
+ *
+ * @param string $username The username of the user sending the invitation
+ *
+ * @return string Invite code
+ */
+function generate_invite_code($username) {
+ $secret = datalist_get('__site_secret__');
+ return md5($username . $secret);
+}
+
+/**
+ * Set the validation status for a user.
+ *
+ * @param int $user_guid The user's GUID
+ * @param bool $status Validated (true) or unvalidated (false)
+ * @param string $method Optional method to say how a user was validated
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_set_user_validation_status($user_guid, $status, $method = '') {
+ $result1 = create_metadata($user_guid, 'validated', $status, '', 0, ACCESS_PUBLIC, false);
+ $result2 = create_metadata($user_guid, 'validated_method', $method, '', 0, ACCESS_PUBLIC, false);
+ if ($result1 && $result2) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Gets the validation status of a user.
+ *
+ * @param int $user_guid The user's GUID
+ * @return bool|null Null means status was not set for this user.
+ * @since 1.8.0
+ */
+function elgg_get_user_validation_status($user_guid) {
+ $md = elgg_get_metadata(array(
+ 'guid' => $user_guid,
+ 'metadata_name' => 'validated'
+ ));
+ if ($md == false) {
+ return;
+ }
+
+ if ($md[0]->value) {
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Adds collection submenu items
+ *
+ * @return void
+ * @access private
+ */
+function collections_submenu_items() {
+
+ $user = elgg_get_logged_in_user_entity();
+
+ elgg_register_menu_item('page', array(
+ 'name' => 'friends:view:collections',
+ 'text' => elgg_echo('friends:collections'),
+ 'href' => "collections/$user->username",
+ ));
+}
+
+/**
+ * Page handler for friends-related pages
+ *
+ * @param array $segments URL segments
+ * @param string $handler The first segment in URL used for routing
+ *
+ * @return bool
+ * @access private
+ */
+function friends_page_handler($page_elements, $handler) {
+ elgg_set_context('friends');
+
+ if (isset($page_elements[0]) && $user = get_user_by_username($page_elements[0])) {
+ elgg_set_page_owner_guid($user->getGUID());
+ }
+ if (elgg_get_logged_in_user_guid() == elgg_get_page_owner_guid()) {
+ collections_submenu_items();
+ }
+
+ switch ($handler) {
+ case 'friends':
+ require_once(dirname(dirname(dirname(__FILE__))) . "/pages/friends/index.php");
+ break;
+ case 'friendsof':
+ require_once(dirname(dirname(dirname(__FILE__))) . "/pages/friends/of.php");
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Page handler for friends collections
+ *
+ * @param array $page_elements Page elements
+ *
+ * @return bool
+ * @access private
+ */
+function collections_page_handler($page_elements) {
+ elgg_set_context('friends');
+ $base = elgg_get_config('path');
+ if (isset($page_elements[0])) {
+ if ($page_elements[0] == "add") {
+ elgg_set_page_owner_guid(elgg_get_logged_in_user_guid());
+ collections_submenu_items();
+ require_once "{$base}pages/friends/collections/add.php";
+ return true;
+ } else {
+ $user = get_user_by_username($page_elements[0]);
+ if ($user) {
+ elgg_set_page_owner_guid($user->getGUID());
+ if (elgg_get_logged_in_user_guid() == elgg_get_page_owner_guid()) {
+ collections_submenu_items();
+ }
+ require_once "{$base}pages/friends/collections/view.php";
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+/**
+ * Page handler for account related pages
+ *
+ * @param array $page_elements Page elements
+ * @param string $handler The handler string
+ *
+ * @return bool
+ * @access private
+ */
+function elgg_user_account_page_handler($page_elements, $handler) {
+
+ $base_dir = elgg_get_root_path() . 'pages/account';
+ switch ($handler) {
+ case 'login':
+ require_once("$base_dir/login.php");
+ break;
+ case 'forgotpassword':
+ require_once("$base_dir/forgotten_password.php");
+ break;
+ case 'resetpassword':
+ require_once("$base_dir/reset_password.php");
+ break;
+ case 'register':
+ require_once("$base_dir/register.php");
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Sets the last action time of the given user to right now.
+ *
+ * @param int $user_guid The user GUID
+ *
+ * @return void
+ */
+function set_last_action($user_guid) {
+ $user_guid = (int) $user_guid;
+ global $CONFIG;
+ $time = time();
+
+ $query = "UPDATE {$CONFIG->dbprefix}users_entity
+ set prev_last_action = last_action,
+ last_action = {$time} where guid = {$user_guid}";
+
+ execute_delayed_write_query($query);
+}
+
+/**
+ * Sets the last logon time of the given user to right now.
+ *
+ * @param int $user_guid The user GUID
+ *
+ * @return void
+ */
+function set_last_login($user_guid) {
+ $user_guid = (int) $user_guid;
+ global $CONFIG;
+ $time = time();
+
+ $query = "UPDATE {$CONFIG->dbprefix}users_entity
+ set prev_last_login = last_login, last_login = {$time} where guid = {$user_guid}";
+
+ execute_delayed_write_query($query);
+}
+
+/**
+ * Creates a relationship between this site and the user.
+ *
+ * @param string $event create
+ * @param string $object_type user
+ * @param ElggUser $object User object
+ *
+ * @return bool
+ * @access private
+ */
+function user_create_hook_add_site_relationship($event, $object_type, $object) {
+ global $CONFIG;
+
+ add_entity_relationship($object->getGUID(), 'member_of_site', $CONFIG->site->getGUID());
+}
+
+/**
+ * Serves the user's avatar
+ *
+ * @param string $hook
+ * @param string $entity_type
+ * @param string $returnvalue
+ * @param array $params
+ * @return string
+ * @access private
+ */
+function user_avatar_hook($hook, $entity_type, $returnvalue, $params) {
+ $user = $params['entity'];
+ $size = $params['size'];
+
+ if (isset($user->icontime)) {
+ return "avatar/view/$user->username/$size/$user->icontime";
+ } else {
+ return "_graphics/icons/user/default{$size}.gif";
+ }
+}
+
+/**
+ * Setup the default user hover menu
+ * @access private
+ */
+function elgg_user_hover_menu($hook, $type, $return, $params) {
+ $user = $params['entity'];
+
+ if (elgg_is_logged_in()) {
+ if (elgg_get_logged_in_user_guid() != $user->guid) {
+ if ($user->isFriend()) {
+ $url = "action/friends/remove?friend={$user->guid}";
+ $text = elgg_echo('friend:remove');
+ $name = 'remove_friend';
+ } else {
+ $url = "action/friends/add?friend={$user->guid}";
+ $text = elgg_echo('friend:add');
+ $name = 'add_friend';
+ }
+ $url = elgg_add_action_tokens_to_url($url);
+ $item = new ElggMenuItem($name, $text, $url);
+ $item->setSection('action');
+ $return[] = $item;
+ } else {
+ $url = "profile/$user->username/edit";
+ $item = new ElggMenuItem('profile:edit', elgg_echo('profile:edit'), $url);
+ $item->setSection('action');
+ $return[] = $item;
+
+ $url = "avatar/edit/$user->username";
+ $item = new ElggMenuItem('avatar:edit', elgg_echo('avatar:edit'), $url);
+ $item->setSection('action');
+ $return[] = $item;
+ }
+ }
+
+ // prevent admins from banning or deleting themselves
+ if (elgg_get_logged_in_user_guid() == $user->guid) {
+ return $return;
+ }
+
+ if (elgg_is_admin_logged_in()) {
+ $actions = array();
+ if (!$user->isBanned()) {
+ $actions[] = 'ban';
+ } else {
+ $actions[] = 'unban';
+ }
+ $actions[] = 'delete';
+ $actions[] = 'resetpassword';
+ if (!$user->isAdmin()) {
+ $actions[] = 'makeadmin';
+ } else {
+ $actions[] = 'removeadmin';
+ }
+
+ foreach ($actions as $action) {
+ $url = "action/admin/user/$action?guid={$user->guid}";
+ $url = elgg_add_action_tokens_to_url($url);
+ $item = new ElggMenuItem($action, elgg_echo($action), $url);
+ $item->setSection('admin');
+ $item->setLinkClass('elgg-requires-confirmation');
+
+ $return[] = $item;
+ }
+
+ $url = "profile/$user->username/edit";
+ $item = new ElggMenuItem('profile:edit', elgg_echo('profile:edit'), $url);
+ $item->setSection('admin');
+ $return[] = $item;
+
+ $url = "settings/user/$user->username";
+ $item = new ElggMenuItem('settings:edit', elgg_echo('settings:edit'), $url);
+ $item->setSection('admin');
+ $return[] = $item;
+ }
+
+ return $return;
+}
+
+/**
+ * Setup the menu shown with an entity
+ *
+ * @return array
+ * @access private
+ */
+function elgg_users_setup_entity_menu($hook, $type, $return, $params) {
+ if (elgg_in_context('widgets')) {
+ return $return;
+ }
+
+ $entity = $params['entity'];
+ if (!elgg_instanceof($entity, 'user')) {
+ return $return;
+ }
+
+ if ($entity->isBanned()) {
+ $banned = elgg_echo('banned');
+ $options = array(
+ 'name' => 'banned',
+ 'text' => "<span>$banned</span>",
+ 'href' => false,
+ 'priority' => 0,
+ );
+ $return = array(ElggMenuItem::factory($options));
+ } else {
+ $return = array();
+ if (isset($entity->location)) {
+ $options = array(
+ 'name' => 'location',
+ 'text' => "<span>$entity->location</span>",
+ 'href' => false,
+ 'priority' => 150,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * This function loads a set of default fields into the profile, then triggers a hook letting other plugins to edit
+ * add and delete fields.
+ *
+ * Note: This is a secondary system:init call and is run at a super low priority to guarantee that it is called after all
+ * other plugins have initialised.
+ * @access private
+ */
+function elgg_profile_fields_setup() {
+ global $CONFIG;
+
+ $profile_defaults = array (
+ 'description' => 'longtext',
+ 'briefdescription' => 'text',
+ 'location' => 'location',
+ 'interests' => 'tags',
+ 'skills' => 'tags',
+ 'contactemail' => 'email',
+ 'phone' => 'text',
+ 'mobile' => 'text',
+ 'website' => 'url',
+ 'twitter' => 'text'
+ );
+
+ $loaded_defaults = array();
+ if ($fieldlist = elgg_get_config('profile_custom_fields')) {
+ if (!empty($fieldlist)) {
+ $fieldlistarray = explode(',', $fieldlist);
+ foreach ($fieldlistarray as $listitem) {
+ if ($translation = elgg_get_config("admin_defined_profile_{$listitem}")) {
+ $type = elgg_get_config("admin_defined_profile_type_{$listitem}");
+ $loaded_defaults["admin_defined_profile_{$listitem}"] = $type;
+ add_translation(get_current_language(), array("profile:admin_defined_profile_{$listitem}" => $translation));
+ }
+ }
+ }
+ }
+
+ if (count($loaded_defaults)) {
+ $CONFIG->profile_using_custom = true;
+ $profile_defaults = $loaded_defaults;
+ }
+
+ $CONFIG->profile_fields = elgg_trigger_plugin_hook('profile:fields', 'profile', NULL, $profile_defaults);
+
+ // register any tag metadata names
+ foreach ($CONFIG->profile_fields as $name => $type) {
+ if ($type == 'tags' || $type == 'location' || $type == 'tag') {
+ elgg_register_tag_metadata_name($name);
+ // register a tag name translation
+ add_translation(get_current_language(), array("tag_names:$name" => elgg_echo("profile:$name")));
+ }
+ }
+}
+
+/**
+ * Avatar page handler
+ *
+ * /avatar/edit/<username>
+ * /avatar/view/<username>/<size>/<icontime>
+ *
+ * @param array $page
+ * @return bool
+ * @access private
+ */
+function elgg_avatar_page_handler($page) {
+ global $CONFIG;
+
+ $user = get_user_by_username($page[1]);
+ if ($user) {
+ elgg_set_page_owner_guid($user->getGUID());
+ }
+
+ if ($page[0] == 'edit') {
+ require_once("{$CONFIG->path}pages/avatar/edit.php");
+ return true;
+ } else {
+ set_input('size', $page[2]);
+ require_once("{$CONFIG->path}pages/avatar/view.php");
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Profile page handler
+ *
+ * @param array $page
+ * @return bool
+ * @access private
+ */
+function elgg_profile_page_handler($page) {
+ global $CONFIG;
+
+ $user = get_user_by_username($page[0]);
+ elgg_set_page_owner_guid($user->guid);
+
+ if ($page[1] == 'edit') {
+ require_once("{$CONFIG->path}pages/profile/edit.php");
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Sets up user-related menu items
+ *
+ * @return void
+ * @access private
+ */
+function users_pagesetup() {
+
+ $owner = elgg_get_page_owner_entity();
+ $viewer = elgg_get_logged_in_user_entity();
+
+ if ($owner) {
+ $params = array(
+ 'name' => 'friends',
+ 'text' => elgg_echo('friends'),
+ 'href' => 'friends/' . $owner->username,
+ 'contexts' => array('friends')
+ );
+ elgg_register_menu_item('page', $params);
+
+ $params = array(
+ 'name' => 'friends:of',
+ 'text' => elgg_echo('friends:of'),
+ 'href' => 'friendsof/' . $owner->username,
+ 'contexts' => array('friends')
+ );
+ elgg_register_menu_item('page', $params);
+
+ elgg_register_menu_item('page', array(
+ 'name' => 'edit_avatar',
+ 'href' => "avatar/edit/{$owner->username}",
+ 'text' => elgg_echo('avatar:edit'),
+ 'contexts' => array('profile_edit'),
+ ));
+
+ elgg_register_menu_item('page', array(
+ 'name' => 'edit_profile',
+ 'href' => "profile/{$owner->username}/edit",
+ 'text' => elgg_echo('profile:edit'),
+ 'contexts' => array('profile_edit'),
+ ));
+ }
+
+ // topbar
+ if ($viewer) {
+ elgg_register_menu_item('topbar', array(
+ 'name' => 'profile',
+ 'href' => $viewer->getURL(),
+ 'text' => elgg_view('output/img', array(
+ 'src' => $viewer->getIconURL('topbar'),
+ 'alt' => $viewer->name,
+ 'title' => elgg_echo('profile'),
+ 'class' => 'elgg-border-plain elgg-transition',
+ )),
+ 'priority' => 100,
+ 'link_class' => 'elgg-topbar-avatar',
+ ));
+
+ elgg_register_menu_item('topbar', array(
+ 'name' => 'friends',
+ 'href' => "friends/{$viewer->username}",
+ 'text' => elgg_view_icon('users'),
+ 'title' => elgg_echo('friends'),
+ 'priority' => 300,
+ ));
+
+ elgg_register_menu_item('topbar', array(
+ 'name' => 'usersettings',
+ 'href' => "settings/user/{$viewer->username}",
+ 'text' => elgg_view_icon('settings') . elgg_echo('settings'),
+ 'priority' => 500,
+ 'section' => 'alt',
+ ));
+
+ elgg_register_menu_item('topbar', array(
+ 'name' => 'logout',
+ 'href' => "action/logout",
+ 'text' => elgg_echo('logout'),
+ 'is_action' => TRUE,
+ 'priority' => 1000,
+ 'section' => 'alt',
+ ));
+ }
+}
+
+/**
+ * Users initialisation function, which establishes the page handler
+ *
+ * @return void
+ * @access private
+ */
+function users_init() {
+
+ elgg_register_page_handler('friends', 'friends_page_handler');
+ elgg_register_page_handler('friendsof', 'friends_page_handler');
+ elgg_register_page_handler('register', 'elgg_user_account_page_handler');
+ elgg_register_page_handler('forgotpassword', 'elgg_user_account_page_handler');
+ elgg_register_page_handler('resetpassword', 'elgg_user_account_page_handler');
+ elgg_register_page_handler('login', 'elgg_user_account_page_handler');
+ elgg_register_page_handler('avatar', 'elgg_avatar_page_handler');
+ elgg_register_page_handler('profile', 'elgg_profile_page_handler');
+ elgg_register_page_handler('collections', 'collections_page_handler');
+
+ elgg_register_plugin_hook_handler('register', 'menu:user_hover', 'elgg_user_hover_menu');
+
+ elgg_register_action('register', '', 'public');
+ elgg_register_action('useradd', '', 'admin');
+ elgg_register_action('friends/add');
+ elgg_register_action('friends/remove');
+ elgg_register_action('avatar/upload');
+ elgg_register_action('avatar/crop');
+ elgg_register_action('avatar/remove');
+ elgg_register_action('profile/edit');
+
+ elgg_register_action('friends/collections/add');
+ elgg_register_action('friends/collections/delete');
+ elgg_register_action('friends/collections/edit');
+
+ elgg_register_plugin_hook_handler('entity:icon:url', 'user', 'user_avatar_hook');
+
+ elgg_register_action('user/passwordreset', '', 'public');
+ elgg_register_action('user/requestnewpassword', '', 'public');
+
+ elgg_register_widget_type('friends', elgg_echo('friends'), elgg_echo('friends:widget:description'));
+
+ // Register the user type
+ elgg_register_entity_type('user', '');
+
+ elgg_register_plugin_hook_handler('register', 'menu:entity', 'elgg_users_setup_entity_menu', 501);
+
+ elgg_register_event_handler('create', 'user', 'user_create_hook_add_site_relationship');
+}
+
+/**
+ * Runs unit tests for ElggObject
+ *
+ * @param sting $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function users_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = "{$CONFIG->path}engine/tests/objects/users.php";
+ return $value;
+}
+
+elgg_register_event_handler('init', 'system', 'users_init', 0);
+elgg_register_event_handler('init', 'system', 'elgg_profile_fields_setup', 10000); // Ensure this runs after other plugins
+elgg_register_event_handler('pagesetup', 'system', 'users_pagesetup', 0);
+elgg_register_plugin_hook_handler('unit_test', 'system', 'users_test');
diff --git a/engine/lib/views.php b/engine/lib/views.php
new file mode 100644
index 000000000..01291b889
--- /dev/null
+++ b/engine/lib/views.php
@@ -0,0 +1,1657 @@
+<?php
+/**
+ * Elgg's view system.
+ *
+ * The view system is the primary templating engine in Elgg and renders
+ * all output. Views are short, parameterised PHP scripts for displaying
+ * output that can be regsitered, overridden, or extended. The view type
+ * determines the output format and location of the files that renders the view.
+ *
+ * Elgg uses a two step process to render full output: first
+ * content-specific elements are rendered, then the resulting
+ * content is inserted into a layout and displayed. This makes it
+ * easy to maintain a consistent look on all pages.
+ *
+ * A view corresponds to a single file on the filesystem and the views
+ * name is its directory structure. A file in
+ * <code>mod/plugins/views/default/myplugin/example.php</code>
+ * is called by saying (with the default viewtype):
+ * <code>echo elgg_view('myplugin/example');</code>
+ *
+ * View names that are registered later override those that are
+ * registered earlier. For plugins this corresponds directly
+ * to their load order: views in plugins lower in the list override
+ * those higher in the list.
+ *
+ * Plugin views belong in the views/ directory under an appropriate
+ * viewtype. Views are automatically registered.
+ *
+ * Views can be embedded-you can call a view from within a view.
+ * Views can also be prepended or extended by any other view.
+ *
+ * Any view can extend any other view if registered with
+ * {@link elgg_extend_view()}.
+ *
+ * View types are set by passing $_REQUEST['view']. The view type
+ * 'default' is a standard HTML view. Types can be defined on the fly
+ * and you can get the current view type with {@link get_current_view()}.
+ *
+ * @internal Plugin views are autoregistered before their init functions
+ * are called, so the init order doesn't affect views.
+ *
+ * @internal The file that determines the output of the view is the last
+ * registered by {@link elgg_set_view_location()}.
+ *
+ * @package Elgg.Core
+ * @subpackage Views
+ * @link http://docs.elgg.org/Views
+ */
+
+/**
+ * The view type override.
+ *
+ * @global string $CURRENT_SYSTEM_VIEWTYPE
+ * @see elgg_set_viewtype()
+ */
+global $CURRENT_SYSTEM_VIEWTYPE;
+$CURRENT_SYSTEM_VIEWTYPE = "";
+
+/**
+ * Manually set the viewtype.
+ *
+ * View types are detected automatically. This function allows
+ * you to force subsequent views to use a different viewtype.
+ *
+ * @tip Call elgg_set_viewtype() with no parameter to reset.
+ *
+ * @param string $viewtype The view type, e.g. 'rss', or 'default'.
+ *
+ * @return bool
+ * @link http://docs.elgg.org/Views/Viewtype
+ * @example views/viewtype.php
+ */
+function elgg_set_viewtype($viewtype = "") {
+ global $CURRENT_SYSTEM_VIEWTYPE;
+
+ $CURRENT_SYSTEM_VIEWTYPE = $viewtype;
+
+ return true;
+}
+
+/**
+ * Return the current view type.
+ *
+ * View types are automatically detected and can be set with $_REQUEST['view']
+ * or {@link elgg_set_viewtype()}.
+ *
+ * @internal View type is determined in this order:
+ * - $CURRENT_SYSTEM_VIEWTYPE Any overrides by {@link elgg_set_viewtype()}
+ * - $CONFIG->view The default view as saved in the DB.
+ * - $_SESSION['view']
+ *
+ * @return string The view.
+ * @see elgg_set_viewtype()
+ * @link http://docs.elgg.org/Views
+ * @todo This function's sessions stuff needs rewritten, removed, or explained.
+ */
+function elgg_get_viewtype() {
+ global $CURRENT_SYSTEM_VIEWTYPE, $CONFIG;
+
+ if ($CURRENT_SYSTEM_VIEWTYPE != "") {
+ return $CURRENT_SYSTEM_VIEWTYPE;
+ }
+
+ $viewtype = get_input('view', '', false);
+ if (is_string($viewtype) && $viewtype !== '') {
+ // only word characters allowed.
+ if (!preg_match('/\W/', $viewtype)) {
+ return $viewtype;
+ }
+ }
+
+ if (!empty($CONFIG->view)) {
+ return $CONFIG->view;
+ }
+
+ return 'default';
+}
+
+/**
+ * Register a view type as valid.
+ *
+ * @param string $view_type The view type to register
+ * @return bool
+ */
+function elgg_register_viewtype($view_type) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->view_types) || !is_array($CONFIG->view_types)) {
+ $CONFIG->view_types = array();
+ }
+
+ if (!in_array($view_type, $CONFIG->view_types)) {
+ $CONFIG->view_types[] = $view_type;
+ }
+
+ return true;
+}
+
+/**
+ * Checks if $view_type is valid on this installation.
+ *
+ * @param string $view_type View type
+ *
+ * @return bool
+ * @since 1.7.2
+ * @access private
+ */
+function elgg_is_valid_view_type($view_type) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->view_types) || !is_array($CONFIG->view_types)) {
+ return FALSE;
+ }
+
+ return in_array($view_type, $CONFIG->view_types);
+}
+
+/**
+ * Register a viewtype to fall back to a default view if a view isn't
+ * found for that viewtype.
+ *
+ * @tip This is useful for alternate html viewtypes (such as for mobile devices).
+ *
+ * @param string $viewtype The viewtype to register
+ *
+ * @return void
+ * @since 1.7.2
+ * @example views/viewtype_fallback.php Fallback from mobile to default.
+ */
+function elgg_register_viewtype_fallback($viewtype) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->viewtype)) {
+ $CONFIG->viewtype = new stdClass;
+ }
+
+ if (!isset($CONFIG->viewtype->fallback)) {
+ $CONFIG->viewtype->fallback = array();
+ }
+
+ $CONFIG->viewtype->fallback[] = $viewtype;
+}
+
+/**
+ * Checks if a viewtype falls back to default.
+ *
+ * @param string $viewtype Viewtype
+ *
+ * @return boolean
+ * @since 1.7.2
+ */
+function elgg_does_viewtype_fallback($viewtype) {
+ global $CONFIG;
+
+ if (isset($CONFIG->viewtype) && isset($CONFIG->viewtype->fallback)) {
+ return in_array($viewtype, $CONFIG->viewtype->fallback);
+ }
+
+ return FALSE;
+}
+
+/**
+ * Register a view to be available for ajax calls
+ *
+ * @param string $view The view name
+ * @return void
+ * @since 1.8.3
+ */
+function elgg_register_ajax_view($view) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->allowed_ajax_views)) {
+ $CONFIG->allowed_ajax_views = array();
+ }
+
+ $CONFIG->allowed_ajax_views[$view] = true;
+}
+
+/**
+ * Unregister a view for ajax calls
+ *
+ * @param string $view The view name
+ * @return void
+ * @since 1.8.3
+ */
+function elgg_unregister_ajax_view($view) {
+ global $CONFIG;
+
+ if (isset($CONFIG->allowed_ajax_views[$view])) {
+ unset($CONFIG->allowed_ajax_views[$view]);
+ }
+}
+
+/**
+ * Returns the file location for a view.
+ *
+ * @warning This doesn't check if the file exists, but only
+ * constructs (or extracts) the path and returns it.
+ *
+ * @param string $view The view.
+ * @param string $viewtype The viewtype
+ *
+ * @return string
+ */
+function elgg_get_view_location($view, $viewtype = '') {
+ global $CONFIG;
+
+ if (empty($viewtype)) {
+ $viewtype = elgg_get_viewtype();
+ }
+
+ if (!isset($CONFIG->views->locations[$viewtype][$view])) {
+ if (!isset($CONFIG->viewpath)) {
+ return dirname(dirname(dirname(__FILE__))) . "/views/";
+ } else {
+ return $CONFIG->viewpath;
+ }
+ } else {
+ return $CONFIG->views->locations[$viewtype][$view];
+ }
+}
+
+/**
+ * Set an alternative base location for a view.
+ *
+ * Views are expected to be in plugin_name/views/. This function can
+ * be used to change that location.
+ *
+ * @internal Core view locations are stored in $CONFIG->viewpath.
+ *
+ * @tip This is useful to optionally register views in a plugin.
+ *
+ * @param string $view The name of the view
+ * @param string $location The base location path
+ * @param string $viewtype The view type
+ *
+ * @return void
+ */
+function elgg_set_view_location($view, $location, $viewtype = '') {
+ global $CONFIG;
+
+ if (empty($viewtype)) {
+ $viewtype = 'default';
+ }
+
+ if (!isset($CONFIG->views)) {
+ $CONFIG->views = new stdClass;
+ }
+
+ if (!isset($CONFIG->views->locations)) {
+ $CONFIG->views->locations = array($viewtype => array($view => $location));
+
+ } else if (!isset($CONFIG->views->locations[$viewtype])) {
+ $CONFIG->views->locations[$viewtype] = array($view => $location);
+
+ } else {
+ $CONFIG->views->locations[$viewtype][$view] = $location;
+ }
+}
+
+/**
+ * Returns whether the specified view exists
+ *
+ * @note If $recurse is true, also checks if a view exists only as an extension.
+ *
+ * @param string $view The view name
+ * @param string $viewtype If set, forces the viewtype
+ * @param bool $recurse If false, do not check extensions
+ *
+ * @return bool
+ */
+function elgg_view_exists($view, $viewtype = '', $recurse = true) {
+ global $CONFIG;
+
+ // Detect view type
+ if (empty($viewtype)) {
+ $viewtype = elgg_get_viewtype();
+ }
+
+ if (!isset($CONFIG->views->locations[$viewtype][$view])) {
+ if (!isset($CONFIG->viewpath)) {
+ $location = dirname(dirname(dirname(__FILE__))) . "/views/";
+ } else {
+ $location = $CONFIG->viewpath;
+ }
+ } else {
+ $location = $CONFIG->views->locations[$viewtype][$view];
+ }
+
+ if (file_exists("{$location}{$viewtype}/{$view}.php")) {
+ return true;
+ }
+
+ // If we got here then check whether this exists as an extension
+ // We optionally recursively check whether the extended view exists also for the viewtype
+ if ($recurse && isset($CONFIG->views->extensions[$view])) {
+ foreach ($CONFIG->views->extensions[$view] as $view_extension) {
+ // do not recursively check to stay away from infinite loops
+ if (elgg_view_exists($view_extension, $viewtype, false)) {
+ return true;
+ }
+ }
+ }
+
+ // Now check if the default view exists if the view is registered as a fallback
+ if ($viewtype != 'default' && elgg_does_viewtype_fallback($viewtype)) {
+ return elgg_view_exists($view, 'default');
+ }
+
+ return false;
+}
+
+/**
+ * Return a parsed view.
+ *
+ * Views are rendered by a template handler and returned as strings.
+ *
+ * Views are called with a special $vars variable set,
+ * which includes any variables passed as the second parameter.
+ * For backward compatbility, the following variables are also set but we
+ * recommend that you do not use them:
+ * - $vars['config'] The $CONFIG global. (Use {@link elgg_get_config()} instead).
+ * - $vars['url'] The site URL. (use {@link elgg_get_site_url()} instead).
+ * - $vars['user'] The logged in user. (use {@link elgg_get_logged_in_user_entity()} instead).
+ *
+ * Custom template handlers can be set with {@link set_template_handler()}.
+ *
+ * The output of views can be intercepted by registering for the
+ * view, $view_name plugin hook.
+ *
+ * @warning Any variables in $_SESSION will override passed vars
+ * upon name collision. See {@trac #2124}.
+ *
+ * @param string $view The name and location of the view to use
+ * @param array $vars Variables to pass to the view.
+ * @param boolean $bypass If set to true, elgg_view will bypass any specified
+ * alternative template handler; by default, it will
+ * hand off to this if requested (see set_template_handler)
+ * @param boolean $ignored This argument is ignored and will be removed eventually
+ * @param string $viewtype If set, forces the viewtype for the elgg_view call to be
+ * this value (default: standard detection)
+ *
+ * @return string The parsed view
+ * @see set_template_handler()
+ * @example views/elgg_view.php
+ * @link http://docs.elgg.org/View
+ */
+function elgg_view($view, $vars = array(), $bypass = false, $ignored = false, $viewtype = '') {
+ global $CONFIG;
+
+ if (!is_string($view) || !is_string($viewtype)) {
+ elgg_log("View and Viewtype in views must be a strings: $view", 'NOTICE');
+ return '';
+ }
+ // basic checking for bad paths
+ if (strpos($view, '..') !== false) {
+ return '';
+ }
+
+ if (!is_array($vars)) {
+ elgg_log("Vars in views must be an array: $view", 'ERROR');
+ $vars = array();
+ }
+
+ // Get the current viewtype
+ if ($viewtype === '') {
+ $viewtype = elgg_get_viewtype();
+ } elseif (preg_match('/\W/', $viewtype)) {
+ // Viewtypes can only be alphanumeric
+ return '';
+ }
+
+ $view_orig = $view;
+
+ // Trigger the pagesetup event
+ if (!isset($CONFIG->pagesetupdone) && $CONFIG->boot_complete) {
+ $CONFIG->pagesetupdone = true;
+ elgg_trigger_event('pagesetup', 'system');
+ }
+
+ // @warning - plugin authors: do not expect user, config, and url to be
+ // set by elgg_view() in the future. Instead, use elgg_get_logged_in_user_entity(),
+ // elgg_get_config(), and elgg_get_site_url() in your views.
+ if (!isset($vars['user'])) {
+ $vars['user'] = elgg_get_logged_in_user_entity();
+ }
+ if (!isset($vars['config'])) {
+ $vars['config'] = $CONFIG;
+ }
+ if (!isset($vars['url'])) {
+ $vars['url'] = elgg_get_site_url();
+ }
+
+ // full_view is the new preferred key for full view on entities @see elgg_view_entity()
+ // check if full_view is set because that means we've already rewritten it and this is
+ // coming from another view passing $vars directly.
+ if (isset($vars['full']) && !isset($vars['full_view'])) {
+ elgg_deprecated_notice("Use \$vars['full_view'] instead of \$vars['full']", 1.8, 2);
+ $vars['full_view'] = $vars['full'];
+ }
+ if (isset($vars['full_view'])) {
+ $vars['full'] = $vars['full_view'];
+ }
+
+ // internalname => name (1.8)
+ if (isset($vars['internalname']) && !isset($vars['__ignoreInternalname']) && !isset($vars['name'])) {
+ elgg_deprecated_notice('You should pass $vars[\'name\'] now instead of $vars[\'internalname\']', 1.8, 2);
+ $vars['name'] = $vars['internalname'];
+ } elseif (isset($vars['name'])) {
+ if (!isset($vars['internalname'])) {
+ $vars['__ignoreInternalname'] = '';
+ }
+ $vars['internalname'] = $vars['name'];
+ }
+
+ // internalid => id (1.8)
+ if (isset($vars['internalid']) && !isset($vars['__ignoreInternalid']) && !isset($vars['name'])) {
+ elgg_deprecated_notice('You should pass $vars[\'id\'] now instead of $vars[\'internalid\']', 1.8, 2);
+ $vars['id'] = $vars['internalid'];
+ } elseif (isset($vars['id'])) {
+ if (!isset($vars['internalid'])) {
+ $vars['__ignoreInternalid'] = '';
+ }
+ $vars['internalid'] = $vars['id'];
+ }
+
+ // If it's been requested, pass off to a template handler instead
+ if ($bypass == false && isset($CONFIG->template_handler) && !empty($CONFIG->template_handler)) {
+ $template_handler = $CONFIG->template_handler;
+ if (is_callable($template_handler)) {
+ return call_user_func($template_handler, $view, $vars);
+ }
+ }
+
+ // Set up any extensions to the requested view
+ if (isset($CONFIG->views->extensions[$view])) {
+ $viewlist = $CONFIG->views->extensions[$view];
+ } else {
+ $viewlist = array(500 => $view);
+ }
+
+ // Start the output buffer, find the requested view file, and execute it
+ ob_start();
+
+ foreach ($viewlist as $priority => $view) {
+
+ $view_location = elgg_get_view_location($view, $viewtype);
+ $view_file = "$view_location$viewtype/$view.php";
+
+ // try to include view
+ if (!file_exists($view_file) || !include($view_file)) {
+ // requested view does not exist
+ $error = "$viewtype/$view view does not exist.";
+
+ // attempt to load default view
+ if ($viewtype !== 'default' && elgg_does_viewtype_fallback($viewtype)) {
+
+ $default_location = elgg_get_view_location($view, 'default');
+ $default_view_file = "{$default_location}default/$view.php";
+
+ if (file_exists($default_view_file) && include($default_view_file)) {
+ // default view found
+ $error .= " Using default/$view instead.";
+ } else {
+ // no view found at all
+ $error = "Neither $viewtype/$view nor default/$view view exists.";
+ }
+ }
+
+ // log warning
+ elgg_log($error, 'NOTICE');
+ }
+ }
+
+ // Save the output buffer into the $content variable
+ $content = ob_get_clean();
+
+ // Plugin hook
+ $params = array('view' => $view_orig, 'vars' => $vars, 'viewtype' => $viewtype);
+ $content = elgg_trigger_plugin_hook('view', $view_orig, $params, $content);
+
+ // backward compatibility with less granular hook will be gone in 2.0
+ $content_tmp = elgg_trigger_plugin_hook('display', 'view', $params, $content);
+
+ if ($content_tmp !== $content) {
+ $content = $content_tmp;
+ elgg_deprecated_notice('The display:view plugin hook is deprecated by view:view_name', 1.8);
+ }
+
+ return $content;
+}
+
+/**
+ * Extends a view with another view.
+ *
+ * The output of any view can be prepended or appended to any other view.
+ *
+ * The default action is to append a view. If the priority is less than 500,
+ * the output of the extended view will be appended to the original view.
+ *
+ * Priority can be specified and affects the order in which extensions
+ * are appended or prepended.
+ *
+ * @internal View extensions are stored in
+ * $CONFIG->views->extensions[$view][$priority] = $view_extension
+ *
+ * @param string $view The view to extend.
+ * @param string $view_extension This view is added to $view
+ * @param int $priority The priority, from 0 to 1000,
+ * to add at (lowest numbers displayed first)
+ *
+ * @return void
+ * @since 1.7.0
+ * @link http://docs.elgg.org/Views/Extend
+ * @example views/extend.php
+ */
+function elgg_extend_view($view, $view_extension, $priority = 501) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->views)) {
+ $CONFIG->views = (object) array(
+ 'extensions' => array(),
+ );
+ $CONFIG->views->extensions[$view][500] = (string)$view;
+ } else {
+ if (!isset($CONFIG->views->extensions[$view])) {
+ $CONFIG->views->extensions[$view][500] = (string)$view;
+ }
+ }
+
+ // raise priority until it doesn't match one already registered
+ while (isset($CONFIG->views->extensions[$view][$priority])) {
+ $priority++;
+ }
+
+ $CONFIG->views->extensions[$view][$priority] = (string)$view_extension;
+ ksort($CONFIG->views->extensions[$view]);
+}
+
+/**
+ * Unextends a view.
+ *
+ * @param string $view The view that was extended.
+ * @param string $view_extension This view that was added to $view
+ *
+ * @return bool
+ * @since 1.7.2
+ */
+function elgg_unextend_view($view, $view_extension) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->views->extensions[$view])) {
+ return FALSE;
+ }
+
+ $priority = array_search($view_extension, $CONFIG->views->extensions[$view]);
+ if ($priority === FALSE) {
+ return FALSE;
+ }
+
+ unset($CONFIG->views->extensions[$view][$priority]);
+
+ return TRUE;
+}
+
+/**
+ * Assembles and outputs a full page.
+ *
+ * A "page" in Elgg is determined by the current view type and
+ * can be HTML for a browser, RSS for a feed reader, or
+ * Javascript, PHP and a number of other formats.
+ *
+ * @param string $title Title
+ * @param string $body Body
+ * @param string $page_shell Optional page shell to use. See page/shells view directory
+ * @param array $vars Optional vars array to pass to the page
+ * shell. Automatically adds title, body, and sysmessages
+ *
+ * @return string The contents of the page
+ * @since 1.8
+ */
+function elgg_view_page($title, $body, $page_shell = 'default', $vars = array()) {
+
+ $messages = null;
+ if (count_messages()) {
+ // get messages - try for errors first
+ $messages = system_messages(NULL, "error");
+ if (count($messages["error"]) == 0) {
+ // no errors so grab rest of messages
+ $messages = system_messages(null, "");
+ } else {
+ // we have errors - clear out remaining messages
+ system_messages(null, "");
+ }
+ }
+
+ $vars['title'] = $title;
+ $vars['body'] = $body;
+ $vars['sysmessages'] = $messages;
+
+ $vars = elgg_trigger_plugin_hook('output:before', 'page', null, $vars);
+
+ // check for deprecated view
+ if ($page_shell == 'default' && elgg_view_exists('pageshells/pageshell')) {
+ elgg_deprecated_notice("pageshells/pageshell is deprecated by page/$page_shell", 1.8);
+ $output = elgg_view('pageshells/pageshell', $vars);
+ } else {
+ $output = elgg_view("page/$page_shell", $vars);
+ }
+
+ $vars['page_shell'] = $page_shell;
+
+ // Allow plugins to mod output
+ return elgg_trigger_plugin_hook('output', 'page', $vars, $output);
+}
+
+/**
+ * Displays a layout with optional parameters.
+ *
+ * Layouts provide consistent organization of pages and other blocks of content.
+ * There are a few default layouts in core:
+ * - admin A special layout for the admin area.
+ * - one_column A single content column.
+ * - one_sidebar A content column with sidebar.
+ * - two_sidebar A content column with two sidebars.
+ * - widgets A widget canvas.
+ *
+ * The layout views take the form page/layouts/$layout_name
+ * See the individual layouts for what options are supported. The three most
+ * common layouts have these parameters:
+ * one_column
+ * content => string
+ * one_sidebar
+ * content => string
+ * sidebar => string (optional)
+ * content
+ * content => string
+ * sidebar => string (optional)
+ * buttons => string (override the default add button)
+ * title => string (override the default title)
+ * filter_context => string (selected content filter)
+ * See the content layout view for more parameters
+ *
+ * @param string $layout_name The name of the view in page/layouts/.
+ * @param array $vars Associative array of parameters for the layout view
+ *
+ * @return string The layout
+ */
+function elgg_view_layout($layout_name, $vars = array()) {
+
+ if (is_string($vars) || $vars === null) {
+ elgg_deprecated_notice("The use of unlimited optional string arguments in elgg_view_layout() was deprecated in favor of an options array", 1.8);
+ $arg = 1;
+ $param_array = array();
+ while ($arg < func_num_args()) {
+ $param_array['area' . $arg] = func_get_arg($arg);
+ $arg++;
+ }
+ } else {
+ $param_array = $vars;
+ }
+
+ $params = elgg_trigger_plugin_hook('output:before', 'layout', null, $param_array);
+
+ // check deprecated location
+ if (elgg_view_exists("canvas/layouts/$layout_name")) {
+ elgg_deprecated_notice("canvas/layouts/$layout_name is deprecated by page/layouts/$layout_name", 1.8);
+ $output = elgg_view("canvas/layouts/$layout_name", $params);
+ } elseif (elgg_view_exists("page/layouts/$layout_name")) {
+ $output = elgg_view("page/layouts/$layout_name", $params);
+ } else {
+ $output = elgg_view("page/layouts/default", $params);
+ }
+
+ return elgg_trigger_plugin_hook('output:after', 'layout', $params, $output);
+}
+
+/**
+ * Render a menu
+ *
+ * @see elgg_register_menu_item() for documentation on adding menu items and
+ * navigation.php for information on the different menus available.
+ *
+ * This function triggers a 'register', 'menu:<menu name>' plugin hook that enables
+ * plugins to add menu items just before a menu is rendered. This is used by
+ * dynamic menus (menus that change based on some input such as the user hover
+ * menu). Using elgg_register_menu_item() in response to the hook can cause
+ * incorrect links to show up. See the blog plugin's blog_owner_block_menu()
+ * for an example of using this plugin hook.
+ *
+ * An additional hook is the 'prepare', 'menu:<menu name>' which enables plugins
+ * to modify the structure of the menu (sort it, remove items, set variables on
+ * the menu items).
+ *
+ * elgg_view_menu() uses views in navigation/menu
+ *
+ * @param string $menu_name The name of the menu
+ * @param array $vars An associative array of display options for the menu.
+ * Options include:
+ * sort_by => string or php callback
+ * string options: 'name', 'priority', 'title' (default),
+ * 'register' (registration order) or a
+ * php callback (a compare function for usort)
+ * handler: string the page handler to build action URLs
+ * entity: ElggEntity to use to build action URLs
+ * class: string the class for the entire menu.
+ * show_section_headers: bool show headers before menu sections.
+ *
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_view_menu($menu_name, array $vars = array()) {
+ global $CONFIG;
+
+ $vars['name'] = $menu_name;
+
+ $sort_by = elgg_extract('sort_by', $vars, 'text');
+
+ if (isset($CONFIG->menus[$menu_name])) {
+ $menu = $CONFIG->menus[$menu_name];
+ } else {
+ $menu = array();
+ }
+
+ // Give plugins a chance to add menu items just before creation.
+ // This supports dynamic menus (example: user_hover).
+ $menu = elgg_trigger_plugin_hook('register', "menu:$menu_name", $vars, $menu);
+
+ $builder = new ElggMenuBuilder($menu);
+ $vars['menu'] = $builder->getMenu($sort_by);
+ $vars['selected_item'] = $builder->getSelected();
+
+ // Let plugins modify the menu
+ $vars['menu'] = elgg_trigger_plugin_hook('prepare', "menu:$menu_name", $vars, $vars['menu']);
+
+ if (elgg_view_exists("navigation/menu/$menu_name")) {
+ return elgg_view("navigation/menu/$menu_name", $vars);
+ } else {
+ return elgg_view("navigation/menu/default", $vars);
+ }
+}
+
+/**
+ * Returns a string of a rendered entity.
+ *
+ * Entity views are either determined by setting the view property on the entity
+ * or by having a view named after the entity $type/$subtype. Entities that have
+ * neither a view property nor a defined $type/$subtype view will fall back to
+ * using the $type/default view.
+ *
+ * The entity view is called with the following in $vars:
+ * - ElggEntity 'entity' The entity being viewed
+ *
+ * Other common view $vars paramters:
+ * - bool 'full_view' Whether to show a full or condensed view.
+ *
+ * @tip This function can automatically appends annotations to entities if in full
+ * view and a handler is registered for the entity:annotate. See {@trac 964} and
+ * {@link elgg_view_entity_annotations()}.
+ *
+ * @param ElggEntity $entity The entity to display
+ * @param array $vars Array of variables to pass to the entity view.
+ * In Elgg 1.7 and earlier it was the boolean $full_view
+ * @param boolean $bypass If false, will not pass to a custom template handler.
+ * {@see set_template_handler()}
+ * @param boolean $debug Complain if views are missing
+ *
+ * @return string HTML to display or false
+ * @link http://docs.elgg.org/Views/Entity
+ * @link http://docs.elgg.org/Entities
+ * @todo The annotation hook might be better as a generic plugin hook to append content.
+ */
+function elgg_view_entity(ElggEntity $entity, $vars = array(), $bypass = true, $debug = false) {
+
+ // No point continuing if entity is null
+ if (!$entity || !($entity instanceof ElggEntity)) {
+ return false;
+ }
+
+ global $autofeed;
+ $autofeed = true;
+
+ $defaults = array(
+ 'full_view' => false,
+ );
+
+ if (is_array($vars)) {
+ $vars = array_merge($defaults, $vars);
+ } else {
+ elgg_deprecated_notice("Update your use of elgg_view_entity()", 1.8);
+ $vars = array(
+ 'full_view' => $vars,
+ );
+ }
+
+ $vars['entity'] = $entity;
+
+
+ // if this entity has a view defined, use it
+ $view = $entity->view;
+ if (is_string($view)) {
+ return elgg_view($view, $vars, $bypass, $debug);
+ }
+
+ $entity_type = $entity->getType();
+
+ $subtype = $entity->getSubtype();
+ if (empty($subtype)) {
+ $subtype = 'default';
+ }
+
+ $contents = '';
+ if (elgg_view_exists("$entity_type/$subtype")) {
+ $contents = elgg_view("$entity_type/$subtype", $vars, $bypass, $debug);
+ }
+ if (empty($contents)) {
+ $contents = elgg_view("$entity_type/default", $vars, $bypass, $debug);
+ }
+
+ // Marcus Povey 20090616 : Speculative and low impact approach for fixing #964
+ if ($vars['full_view']) {
+ $annotations = elgg_view_entity_annotations($entity, $vars['full_view']);
+
+ if ($annotations) {
+ $contents .= $annotations;
+ }
+ }
+ return $contents;
+}
+
+/**
+ * View the icon of an entity
+ *
+ * Entity views are determined by having a view named after the entity $type/$subtype.
+ * Entities that do not have a defined icon/$type/$subtype view will fall back to using
+ * the icon/$type/default view.
+ *
+ * @param ElggEntity $entity The entity to display
+ * @param string $size The size: tiny, small, medium, large
+ * @param array $vars An array of variables to pass to the view. Some possible
+ * variables are img_class and link_class. See the
+ * specific icon view for more parameters.
+ *
+ * @return string HTML to display or false
+ */
+function elgg_view_entity_icon(ElggEntity $entity, $size = 'medium', $vars = array()) {
+
+ // No point continuing if entity is null
+ if (!$entity || !($entity instanceof ElggEntity)) {
+ return false;
+ }
+
+ $vars['entity'] = $entity;
+ $vars['size'] = $size;
+
+ $entity_type = $entity->getType();
+
+ $subtype = $entity->getSubtype();
+ if (empty($subtype)) {
+ $subtype = 'default';
+ }
+
+ $contents = '';
+ if (elgg_view_exists("icon/$entity_type/$subtype")) {
+ $contents = elgg_view("icon/$entity_type/$subtype", $vars);
+ }
+ if (empty($contents)) {
+ $contents = elgg_view("icon/$entity_type/default", $vars);
+ }
+ if (empty($contents)) {
+ $contents = elgg_view("icon/default", $vars);
+ }
+
+ return $contents;
+}
+
+/**
+ * Returns a string of a rendered annotation.
+ *
+ * Annotation views are expected to be in annotation/$annotation_name.
+ * If a view is not found for $annotation_name, the default annotation/default
+ * will be used.
+ *
+ * @warning annotation/default is not currently defined in core.
+ *
+ * The annotation view is called with the following in $vars:
+ * - ElggEntity 'annotation' The annotation being viewed.
+ *
+ * @param ElggAnnotation $annotation The annotation to display
+ * @param array $vars Variable array for view.
+ * @param bool $bypass If false, will not pass to a custom
+ * template handler. {@see set_template_handler()}
+ * @param bool $debug Complain if views are missing
+ *
+ * @return string/false Rendered annotation
+ */
+function elgg_view_annotation(ElggAnnotation $annotation, array $vars = array(), $bypass = true, $debug = false) {
+ global $autofeed;
+ $autofeed = true;
+
+ $defaults = array(
+ 'full_view' => true,
+ );
+
+ $vars = array_merge($defaults, $vars);
+ $vars['annotation'] = $annotation;
+
+ // @todo setting the view on an annotation is not advertised anywhere
+ // do we want to keep this?
+ $view = $annotation->view;
+ if (is_string($view)) {
+ return elgg_view($view, $vars, $bypass, $debug);
+ }
+
+ $name = $annotation->name;
+ if (empty($name)) {
+ return false;
+ }
+
+ if (elgg_view_exists("annotation/$name")) {
+ return elgg_view("annotation/$name", $vars, $bypass, $debug);
+ } else {
+ return elgg_view("annotation/default", $vars, $bypass, $debug);
+ }
+}
+
+/**
+ * Returns a rendered list of entities with pagination. This function should be
+ * called by wrapper functions.
+ *
+ * @see elgg_list_entities()
+ * @see list_user_friends_objects()
+ * @see elgg_list_entities_from_metadata()
+ * @see elgg_list_entities_from_relationships()
+ * @see elgg_list_entities_from_annotations()
+ *
+ * @param array $entities Array of entities
+ * @param array $vars Display variables
+ * 'count' The total number of entities across all pages
+ * 'offset' The current indexing offset
+ * 'limit' The number of entities to display per page
+ * 'full_view' Display the full view of the entities?
+ * 'list_class' CSS class applied to the list
+ * 'item_class' CSS class applied to the list items
+ * 'pagination' Display pagination?
+ * 'list_type' List type: 'list' (default), 'gallery'
+ * 'list_type_toggle' Display the list type toggle?
+ *
+ * @return string The rendered list of entities
+ * @access private
+ */
+function elgg_view_entity_list($entities, $vars = array(), $offset = 0, $limit = 10, $full_view = true,
+$list_type_toggle = true, $pagination = true) {
+
+ if (!is_int($offset)) {
+ $offset = (int)get_input('offset', 0);
+ }
+
+ // list type can be passed as request parameter
+ $list_type = get_input('list_type', 'list');
+ if (get_input('listtype')) {
+ elgg_deprecated_notice("'listtype' has been deprecated by 'list_type' for lists", 1.8);
+ $list_type = get_input('listtype');
+ }
+
+ if (is_array($vars)) {
+ // new function
+ $defaults = array(
+ 'items' => $entities,
+ 'list_class' => 'elgg-list-entity',
+ 'full_view' => true,
+ 'pagination' => true,
+ 'list_type' => $list_type,
+ 'list_type_toggle' => false,
+ 'offset' => $offset,
+ );
+
+ $vars = array_merge($defaults, $vars);
+
+ } else {
+ // old function parameters
+ elgg_deprecated_notice("Please update your use of elgg_view_entity_list()", 1.8);
+
+ $vars = array(
+ 'items' => $entities,
+ 'count' => (int) $vars, // the old count parameter
+ 'offset' => $offset,
+ 'limit' => (int) $limit,
+ 'full_view' => $full_view,
+ 'pagination' => $pagination,
+ 'list_type' => $list_type,
+ 'list_type_toggle' => $list_type_toggle,
+ 'list_class' => 'elgg-list-entity',
+ );
+ }
+
+ if ($vars['list_type'] != 'list') {
+ return elgg_view('page/components/gallery', $vars);
+ } else {
+ return elgg_view('page/components/list', $vars);
+ }
+}
+
+/**
+ * Returns a rendered list of annotations, plus pagination. This function
+ * should be called by wrapper functions.
+ *
+ * @param array $annotations Array of annotations
+ * @param array $vars Display variables
+ * 'count' The total number of annotations across all pages
+ * 'offset' The current indexing offset
+ * 'limit' The number of annotations to display per page
+ * 'full_view' Display the full view of the annotation?
+ * 'list_class' CSS Class applied to the list
+ * 'offset_key' The url parameter key used for offset
+ *
+ * @return string The list of annotations
+ * @access private
+ */
+function elgg_view_annotation_list($annotations, array $vars = array()) {
+ $defaults = array(
+ 'items' => $annotations,
+ 'list_class' => 'elgg-list-annotation elgg-annotation-list', // @todo remove elgg-annotation-list in Elgg 1.9
+ 'full_view' => true,
+ 'offset_key' => 'annoff',
+ );
+
+ $vars = array_merge($defaults, $vars);
+
+ return elgg_view('page/components/list', $vars);
+}
+
+/**
+ * Display a plugin-specified rendered list of annotations for an entity.
+ *
+ * This displays the output of functions registered to the entity:annotation,
+ * $entity_type plugin hook.
+ *
+ * This is called automatically by the framework from {@link elgg_view_entity()}
+ *
+ * @param ElggEntity $entity Entity
+ * @param bool $full_view Display full view?
+ *
+ * @return mixed string or false on failure
+ * @todo Change the hook name.
+ */
+function elgg_view_entity_annotations(ElggEntity $entity, $full_view = true) {
+ if (!($entity instanceof ElggEntity)) {
+ return false;
+ }
+
+ $entity_type = $entity->getType();
+
+ $annotations = elgg_trigger_plugin_hook('entity:annotate', $entity_type,
+ array(
+ 'entity' => $entity,
+ 'full_view' => $full_view,
+ )
+ );
+
+ return $annotations;
+}
+
+/**
+ * Renders a title.
+ *
+ * This is a shortcut for {@elgg_view page/elements/title}.
+ *
+ * @param string $title The page title
+ * @param array $vars View variables (was submenu be displayed? (deprecated))
+ *
+ * @return string The HTML (etc)
+ */
+function elgg_view_title($title, $vars = array()) {
+ if (!is_array($vars)) {
+ elgg_deprecated_notice('setting $submenu in elgg_view_title() is deprecated', 1.8);
+ $vars = array('submenu' => $vars);
+ }
+
+ $vars['title'] = $title;
+
+ return elgg_view('page/elements/title', $vars);
+}
+
+/**
+ * Displays a UNIX timestamp in a friendly way
+ *
+ * @see elgg_get_friendly_time()
+ *
+ * @param int $time A UNIX epoch timestamp
+ *
+ * @return string The friendly time HTML
+ * @since 1.7.2
+ */
+function elgg_view_friendly_time($time) {
+ return elgg_view('output/friendlytime', array('time' => $time));
+}
+
+
+/**
+ * Returns rendered comments and a comment form for an entity.
+ *
+ * @tip Plugins can override the output by registering a handler
+ * for the comments, $entity_type hook. The handler is responsible
+ * for formatting the comments and the add comment form.
+ *
+ * @param ElggEntity $entity The entity to view comments of
+ * @param bool $add_comment Include a form to add comments?
+ * @param array $vars Variables to pass to comment view
+ *
+ * @return string|false Rendered comments or false on failure
+ * @link http://docs.elgg.org/Entities/Comments
+ * @link http://docs.elgg.org/Annotations/Comments
+ */
+function elgg_view_comments($entity, $add_comment = true, array $vars = array()) {
+ if (!($entity instanceof ElggEntity)) {
+ return false;
+ }
+
+ $vars['entity'] = $entity;
+ $vars['show_add_form'] = $add_comment;
+ $vars['class'] = elgg_extract('class', $vars, "{$entity->getSubtype()}-comments");
+
+ $output = elgg_trigger_plugin_hook('comments', $entity->getType(), $vars, false);
+ if ($output) {
+ return $output;
+ } else {
+ return elgg_view('page/elements/comments', $vars);
+ }
+}
+
+/**
+ * Wrapper function for the image block display pattern.
+ *
+ * Fixed width media on the side (image, icon, flash, etc.).
+ * Descriptive content filling the rest of the column.
+ *
+ * This is a shortcut for {@elgg_view page/components/image_block}.
+ *
+ * @param string $image The icon and other information
+ * @param string $body Description content
+ * @param array $vars Additional parameters for the view
+ *
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_view_image_block($image, $body, $vars = array()) {
+ $vars['image'] = $image;
+ $vars['body'] = $body;
+ return elgg_view('page/components/image_block', $vars);
+}
+
+/**
+ * Wrapper function for the module display pattern.
+ *
+ * Box with header, body, footer
+ *
+ * This is a shortcut for {@elgg_view page/components/module}.
+ *
+ * @param string $type The type of module (main, info, popup, aside, etc.)
+ * @param string $title A title to put in the header
+ * @param string $body Content of the module
+ * @param array $vars Additional parameters for the module
+ *
+ * @return string
+ * @since 1.8.0
+ */
+function elgg_view_module($type, $title, $body, array $vars = array()) {
+ $vars['class'] = elgg_extract('class', $vars, '') . " elgg-module-$type";
+ $vars['title'] = $title;
+ $vars['body'] = $body;
+ return elgg_view('page/components/module', $vars);
+}
+
+/**
+ * Renders a human-readable representation of a river item
+ *
+ * @param ElggRiverItem $item A river item object
+ * @param array $vars An array of variables for the view
+ *
+ * @return string returns empty string if could not be rendered
+ */
+function elgg_view_river_item($item, array $vars = array()) {
+ if (!($item instanceof ElggRiverItem)) {
+ return '';
+ }
+ // checking default viewtype since some viewtypes do not have unique views per item (rss)
+ $view = $item->getView();
+ if (!$view || !elgg_view_exists($view, 'default')) {
+ return '';
+ }
+
+ $subject = $item->getSubjectEntity();
+ $object = $item->getObjectEntity();
+ if (!$subject || !$object) {
+ // subject is disabled or subject/object deleted
+ return '';
+ }
+ // Don't hide objects in closed groups that a user can see.
+ // see http://trac.elgg.org/ticket/4789
+// else {
+// // hide based on object's container
+// $visibility = ElggGroupItemVisibility::factory($object->container_guid);
+// if ($visibility->shouldHideItems) {
+// return '';
+// }
+// }
+
+ $vars['item'] = $item;
+
+ return elgg_view('river/item', $vars);
+}
+
+/**
+ * Convenience function for generating a form from a view in a standard location.
+ *
+ * This function assumes that the body of the form is located at "forms/$action" and
+ * sets the action by default to "action/$action". Automatically wraps the forms/$action
+ * view with a <form> tag and inserts the anti-csrf security tokens.
+ *
+ * @tip This automatically appends elgg-form-action-name to the form's class. It replaces any
+ * slashes with dashes (blog/save becomes elgg-form-blog-save)
+ *
+ * @example
+ * <code>echo elgg_view_form('login');</code>
+ *
+ * This would assume a "login" form body to be at "forms/login" and would set the action
+ * of the form to "http://yoursite.com/action/login".
+ *
+ * If elgg_view('forms/login') is:
+ * <input type="text" name="username" />
+ * <input type="password" name="password" />
+ *
+ * Then elgg_view_form('login') generates:
+ * <form action="http://yoursite.com/action/login" method="post">
+ * ...security tokens...
+ * <input type="text" name="username" />
+ * <input type="password" name="password" />
+ * </form>
+ *
+ * @param string $action The name of the action. An action name does not include
+ * the leading "action/". For example, "login" is an action name.
+ * @param array $form_vars $vars environment passed to the "input/form" view
+ * @param array $body_vars $vars environment passed to the "forms/$action" view
+ *
+ * @return string The complete form
+ */
+function elgg_view_form($action, $form_vars = array(), $body_vars = array()) {
+ global $CONFIG;
+
+ $defaults = array(
+ 'action' => $CONFIG->wwwroot . "action/$action",
+ 'body' => elgg_view("forms/$action", $body_vars)
+ );
+
+ $form_class = 'elgg-form-' . preg_replace('/[^a-z0-9]/i', '-', $action);
+
+ // append elgg-form class to any class options set
+ if (isset($form_vars['class'])) {
+ $form_vars['class'] = $form_vars['class'] . " $form_class";
+ } else {
+ $form_vars['class'] = $form_class;
+ }
+
+ return elgg_view('input/form', array_merge($defaults, $form_vars));
+}
+
+/**
+ * View an item in a list
+ *
+ * @param object $item ElggEntity or ElggAnnotation
+ * @param array $vars Additional parameters for the rendering
+ *
+ * @return string
+ * @since 1.8.0
+ * @access private
+ */
+function elgg_view_list_item($item, array $vars = array()) {
+ global $CONFIG;
+
+ $type = $item->getType();
+ if (in_array($type, $CONFIG->entity_types)) {
+ return elgg_view_entity($item, $vars);
+ } else if ($type == 'annotation') {
+ return elgg_view_annotation($item, $vars);
+ } else if ($type == 'river') {
+ return elgg_view_river_item($item, $vars);
+ }
+
+ return '';
+}
+
+/**
+ * View one of the elgg sprite icons
+ *
+ * Shorthand for <span class="elgg-icon elgg-icon-$name"></span>
+ *
+ * @param string $name The specific icon to display
+ * @param string $class Additional class: float, float-alt, or custom class
+ *
+ * @return string The html for displaying an icon
+ */
+function elgg_view_icon($name, $class = '') {
+ // @todo deprecate boolean in Elgg 1.9
+ if ($class === true) {
+ $class = 'float';
+ }
+ return "<span class=\"elgg-icon elgg-icon-$name $class\"></span>";
+}
+
+/**
+ * Displays a user's access collections, using the core/friends/collections view
+ *
+ * @param int $owner_guid The GUID of the owning user
+ *
+ * @return string A formatted rendition of the collections
+ * @todo Move to the friends/collection.php page.
+ * @access private
+ */
+function elgg_view_access_collections($owner_guid) {
+ if ($collections = get_user_access_collections($owner_guid)) {
+ foreach ($collections as $key => $collection) {
+ $collections[$key]->members = get_members_of_access_collection($collection->id, true);
+ $collections[$key]->entities = get_user_friends($owner_guid, "", 9999);
+ }
+ }
+
+ return elgg_view('core/friends/collections', array('collections' => $collections));
+}
+
+/**
+ * Registers a function to handle templates.
+ *
+ * Alternative template handlers can be registered to handle
+ * all output functions. By default, {@link elgg_view()} will
+ * simply include the view file. If an alternate template handler
+ * is registered, the view name and passed $vars will be passed to the
+ * registered function, which is then responsible for generating and returning
+ * output.
+ *
+ * Template handlers need to accept two arguments: string $view_name and array
+ * $vars.
+ *
+ * @warning This is experimental.
+ *
+ * @param string $function_name The name of the function to pass to.
+ *
+ * @return bool
+ * @see elgg_view()
+ * @link http://docs.elgg.org/Views/TemplateHandlers
+ */
+function set_template_handler($function_name) {
+ global $CONFIG;
+
+ if (is_callable($function_name)) {
+ $CONFIG->template_handler = $function_name;
+ return true;
+ }
+ return false;
+}
+
+/**
+ * Returns the name of views for in a directory.
+ *
+ * Use this to get all namespaced views under the first element.
+ *
+ * @param string $dir The main directory that holds the views. (mod/profile/views/)
+ * @param string $base The root name of the view to use, without the viewtype. (profile)
+ *
+ * @return array
+ * @since 1.7.0
+ * @todo Why isn't this used anywhere else but in elgg_view_tree()?
+ * Seems like a useful function for autodiscovery.
+ * @access private
+ */
+function elgg_get_views($dir, $base) {
+ $return = array();
+ if (file_exists($dir) && is_dir($dir)) {
+ if ($handle = opendir($dir)) {
+ while ($view = readdir($handle)) {
+ if (!in_array($view, array('.', '..', '.svn', 'CVS'))) {
+ if (is_dir($dir . '/' . $view)) {
+ if ($val = elgg_get_views($dir . '/' . $view, $base . '/' . $view)) {
+ $return = array_merge($return, $val);
+ }
+ } else {
+ $view = str_replace('.php', '', $view);
+ $return[] = $base . '/' . $view;
+ }
+ }
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Returns all views below a partial view.
+ *
+ * Settings $view_root = 'profile' will show all available views under
+ * the "profile" namespace.
+ *
+ * @param string $view_root The root view
+ * @param string $viewtype Optionally specify a view type
+ * other than the current one.
+ *
+ * @return array A list of view names underneath that root view
+ * @todo This is used once in the deprecated get_activity_stream_data() function.
+ * @access private
+ */
+function elgg_view_tree($view_root, $viewtype = "") {
+ global $CONFIG;
+ static $treecache;
+
+ // Get viewtype
+ if (!$viewtype) {
+ $viewtype = elgg_get_viewtype();
+ }
+
+ // Has the treecache been initialised?
+ if (!isset($treecache)) {
+ $treecache = array();
+ }
+ // A little light internal caching
+ if (!empty($treecache[$view_root])) {
+ return $treecache[$view_root];
+ }
+
+ // Examine $CONFIG->views->locations
+ if (isset($CONFIG->views->locations[$viewtype])) {
+ foreach ($CONFIG->views->locations[$viewtype] as $view => $path) {
+ $pos = strpos($view, $view_root);
+ if ($pos === 0) {
+ $treecache[$view_root][] = $view;
+ }
+ }
+ }
+
+ // Now examine core
+ $location = $CONFIG->viewpath;
+ $viewtype = elgg_get_viewtype();
+ $root = $location . $viewtype . '/' . $view_root;
+
+ if (file_exists($root) && is_dir($root)) {
+ $val = elgg_get_views($root, $view_root);
+ if (!is_array($treecache[$view_root])) {
+ $treecache[$view_root] = array();
+ }
+ $treecache[$view_root] = array_merge($treecache[$view_root], $val);
+ }
+
+ return $treecache[$view_root];
+}
+
+/**
+ * Auto-registers views from a location.
+ *
+ * @note Views in plugin/views/ are automatically registered for active plugins.
+ * Plugin authors would only need to call this if optionally including
+ * an entire views structure.
+ *
+ * @param string $view_base Optional The base of the view name without the view type.
+ * @param string $folder Required The folder to begin looking in
+ * @param string $base_location_path The base views directory to use with elgg_set_view_location()
+ * @param string $viewtype The type of view we're looking at (default, rss, etc)
+ *
+ * @return bool returns false if folder can't be read
+ * @since 1.7.0
+ * @see elgg_set_view_location()
+ * @todo This seems overly complicated.
+ * @access private
+ */
+function autoregister_views($view_base, $folder, $base_location_path, $viewtype) {
+ if ($handle = opendir($folder)) {
+ while ($view = readdir($handle)) {
+ if (!in_array($view, array('.', '..', '.svn', 'CVS')) && !is_dir($folder . "/" . $view)) {
+ // this includes png files because some icons are stored within view directories.
+ // See commit [1705]
+ if ((substr_count($view, ".php") > 0) || (substr_count($view, ".png") > 0)) {
+ if (!empty($view_base)) {
+ $view_base_new = $view_base . "/";
+ } else {
+ $view_base_new = "";
+ }
+
+ elgg_set_view_location($view_base_new . str_replace('.php', '', $view),
+ $base_location_path, $viewtype);
+ }
+ } else if (!in_array($view, array('.', '..', '.svn', 'CVS')) && is_dir($folder . "/" . $view)) {
+ if (!empty($view_base)) {
+ $view_base_new = $view_base . "/";
+ } else {
+ $view_base_new = "";
+ }
+ autoregister_views($view_base_new . $view, $folder . "/" . $view,
+ $base_location_path, $viewtype);
+ }
+ }
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Add the rss link to the extras when if needed
+ *
+ * @return void
+ * @access private
+ */
+function elgg_views_add_rss_link() {
+ global $autofeed;
+ if (isset($autofeed) && $autofeed == true) {
+ $url = current_page_url();
+ if (substr_count($url, '?')) {
+ $url .= "&view=rss";
+ } else {
+ $url .= "?view=rss";
+ }
+
+ $url = elgg_format_url($url);
+ elgg_register_menu_item('extras', array(
+ 'name' => 'rss',
+ 'text' => elgg_view_icon('rss'),
+ 'href' => $url,
+ 'title' => elgg_echo('feed:rss'),
+ ));
+ }
+}
+
+/**
+ * Registers deprecated views to avoid making some pages from older plugins
+ * completely empty.
+ *
+ * @access private
+ */
+function elgg_views_handle_deprecated_views() {
+ $location = elgg_get_view_location('page_elements/contentwrapper');
+ if ($location === "/var/www/views/") {
+ elgg_extend_view('page_elements/contentwrapper', 'page/elements/wrapper');
+ }
+}
+
+/**
+ * Initialize viewtypes on system boot event
+ * This ensures simplecache is cleared during upgrades. See #2252
+ *
+ * @return void
+ * @access private
+ * @elgg_event_handler boot system
+ */
+function elgg_views_boot() {
+ global $CONFIG;
+
+ elgg_register_simplecache_view('css/ie');
+ elgg_register_simplecache_view('css/ie6');
+ elgg_register_simplecache_view('css/ie7');
+
+ elgg_register_js('jquery', '/vendors/jquery/jquery-1.6.4.min.js', 'head');
+ elgg_register_js('jquery-ui', '/vendors/jquery/jquery-ui-1.8.16.min.js', 'head');
+ elgg_register_js('jquery.form', '/vendors/jquery/jquery.form.js');
+
+ elgg_register_simplecache_view('js/elgg');
+ $elgg_js_url = elgg_get_simplecache_url('js', 'elgg');
+ elgg_register_js('elgg', $elgg_js_url, 'head');
+
+ elgg_load_js('jquery');
+ elgg_load_js('jquery-ui');
+ elgg_load_js('elgg');
+
+ elgg_register_simplecache_view('js/lightbox');
+ $lightbox_js_url = elgg_get_simplecache_url('js', 'lightbox');
+ elgg_register_js('lightbox', $lightbox_js_url);
+
+ elgg_register_simplecache_view('css/lightbox');
+ $lightbox_css_url = elgg_get_simplecache_url('css', 'lightbox');
+ elgg_register_css('lightbox', $lightbox_css_url);
+
+ elgg_register_simplecache_view('css/elgg');
+ $elgg_css_url = elgg_get_simplecache_url('css', 'elgg');
+ elgg_register_css('elgg', $elgg_css_url);
+
+ elgg_load_css('elgg');
+
+ elgg_register_ajax_view('js/languages');
+
+ elgg_register_plugin_hook_handler('output:before', 'layout', 'elgg_views_add_rss_link');
+
+ // discover the built-in view types
+ // @todo the cache is loaded in load_plugins() but we need to know view_types earlier
+ $view_path = $CONFIG->viewpath;
+
+ $views = scandir($view_path);
+
+ foreach ($views as $view) {
+ if ($view[0] !== '.' && is_dir($view_path . $view)) {
+ elgg_register_viewtype($view);
+ }
+ }
+
+ // set default icon sizes - can be overridden in settings.php or with plugin
+ if (!$CONFIG->icon_sizes) {
+ $icon_sizes = array(
+ 'topbar' => array('w' => 16, 'h' => 16, 'square' => TRUE, 'upscale' => TRUE),
+ 'tiny' => array('w' => 25, 'h' => 25, 'square' => TRUE, 'upscale' => TRUE),
+ 'small' => array('w' => 40, 'h' => 40, 'square' => TRUE, 'upscale' => TRUE),
+ 'medium' => array('w' => 100, 'h' => 100, 'square' => TRUE, 'upscale' => TRUE),
+ 'large' => array('w' => 200, 'h' => 200, 'square' => FALSE, 'upscale' => FALSE),
+ 'master' => array('w' => 550, 'h' => 550, 'square' => FALSE, 'upscale' => FALSE),
+ );
+ elgg_set_config('icon_sizes', $icon_sizes);
+ }
+}
+
+elgg_register_event_handler('boot', 'system', 'elgg_views_boot');
+elgg_register_event_handler('init', 'system', 'elgg_views_handle_deprecated_views');
diff --git a/engine/lib/web_services.php b/engine/lib/web_services.php
new file mode 100644
index 000000000..c8e4a13cc
--- /dev/null
+++ b/engine/lib/web_services.php
@@ -0,0 +1,1443 @@
+<?php
+/**
+ * Elgg web services API
+ * Functions and objects for exposing custom web services.
+ *
+ * @package Elgg.Core
+ * @subpackage WebServicesAPI
+ */
+
+// Primary Services API Server functions
+
+/**
+ * A global array holding API methods.
+ * The structure of this is
+ * $API_METHODS = array (
+ * $method => array (
+ * "description" => "Some human readable description"
+ * "function" = 'my_function_callback'
+ * "parameters" = array (
+ * "variable" = array ( // the order should be the same as the function callback
+ * type => 'int' | 'bool' | 'float' | 'string'
+ * required => true (default) | false
+ * default => value // optional
+ * )
+ * )
+ * "call_method" = 'GET' | 'POST'
+ * "require_api_auth" => true | false (default)
+ * "require_user_auth" => true | false (default)
+ * )
+ * )
+ */
+global $API_METHODS;
+$API_METHODS = array();
+
+/**
+ * Expose a function as a services api call.
+ *
+ * Limitations: Currently cannot expose functions which expect objects.
+ * It also cannot handle arrays of bools or arrays of arrays.
+ * Also, input will be filtered to protect against XSS attacks through the API.
+ *
+ * @param string $method The api name to expose - for example "myapi.dosomething"
+ * @param string $function Your function callback.
+ * @param array $parameters (optional) List of parameters in the same order as in
+ * your function. Default values may be set for parameters which
+ * allow REST api users flexibility in what parameters are passed.
+ * Generally, optional parameters should be after required
+ * parameters.
+ *
+ * This array should be in the format
+ * "variable" = array (
+ * type => 'int' | 'bool' | 'float' | 'string' | 'array'
+ * required => true (default) | false
+ * default => value (optional)
+ * )
+ * @param string $description (optional) human readable description of the function.
+ * @param string $call_method (optional) Define what http method must be used for
+ * this function. Default: GET
+ * @param bool $require_api_auth (optional) (default is false) Does this method
+ * require API authorization? (example: API key)
+ * @param bool $require_user_auth (optional) (default is false) Does this method
+ * require user authorization?
+ *
+ * @return bool
+ */
+function expose_function($method, $function, array $parameters = NULL, $description = "",
+$call_method = "GET", $require_api_auth = false, $require_user_auth = false) {
+
+ global $API_METHODS;
+
+ if (($method == "") || ($function == "")) {
+ $msg = elgg_echo('InvalidParameterException:APIMethodOrFunctionNotSet');
+ throw new InvalidParameterException($msg);
+ }
+
+ // does not check whether this method has already been exposed - good idea?
+ $API_METHODS[$method] = array();
+
+ $API_METHODS[$method]["description"] = $description;
+
+ // does not check whether callable - done in execute_method()
+ $API_METHODS[$method]["function"] = $function;
+
+ if ($parameters != NULL) {
+ if (!is_array($parameters)) {
+ $msg = elgg_echo('InvalidParameterException:APIParametersArrayStructure', array($method));
+ throw new InvalidParameterException($msg);
+ }
+
+ // catch common mistake of not setting up param array correctly
+ $first = current($parameters);
+ if (!is_array($first)) {
+ $msg = elgg_echo('InvalidParameterException:APIParametersArrayStructure', array($method));
+ throw new InvalidParameterException($msg);
+ }
+ }
+
+ if ($parameters != NULL) {
+ // ensure the required flag is set correctly in default case for each parameter
+ foreach ($parameters as $key => $value) {
+ // check if 'required' was specified - if not, make it true
+ if (!array_key_exists('required', $value)) {
+ $parameters[$key]['required'] = true;
+ }
+ }
+
+ $API_METHODS[$method]["parameters"] = $parameters;
+ }
+
+ $call_method = strtoupper($call_method);
+ switch ($call_method) {
+ case 'POST' :
+ $API_METHODS[$method]["call_method"] = 'POST';
+ break;
+ case 'GET' :
+ $API_METHODS[$method]["call_method"] = 'GET';
+ break;
+ default :
+ $msg = elgg_echo('InvalidParameterException:UnrecognisedHttpMethod',
+ array($call_method, $method));
+
+ throw new InvalidParameterException($msg);
+ }
+
+ $API_METHODS[$method]["require_api_auth"] = $require_api_auth;
+
+ $API_METHODS[$method]["require_user_auth"] = $require_user_auth;
+
+ return true;
+}
+
+/**
+ * Unregister an API method
+ *
+ * @param string $method The api name that was exposed
+ *
+ * @since 1.7.0
+ *
+ * @return void
+ */
+function unexpose_function($method) {
+ global $API_METHODS;
+
+ if (isset($API_METHODS[$method])) {
+ unset($API_METHODS[$method]);
+ }
+}
+
+/**
+ * Check that the method call has the proper API and user authentication
+ *
+ * @param string $method The api name that was exposed
+ *
+ * @return true or throws an exception
+ * @throws APIException
+ * @since 1.7.0
+ * @access private
+ */
+function authenticate_method($method) {
+ global $API_METHODS;
+
+ // method must be exposed
+ if (!isset($API_METHODS[$method])) {
+ throw new APIException(elgg_echo('APIException:MethodCallNotImplemented', array($method)));
+ }
+
+ // check API authentication if required
+ if ($API_METHODS[$method]["require_api_auth"] == true) {
+ $api_pam = new ElggPAM('api');
+ if ($api_pam->authenticate() !== true) {
+ throw new APIException(elgg_echo('APIException:APIAuthenticationFailed'));
+ }
+ }
+
+ $user_pam = new ElggPAM('user');
+ $user_auth_result = $user_pam->authenticate(array());
+
+ // check if user authentication is required
+ if ($API_METHODS[$method]["require_user_auth"] == true) {
+ if ($user_auth_result == false) {
+ throw new APIException($user_pam->getFailureMessage());
+ }
+ }
+
+ return true;
+}
+
+/**
+ * Executes a method.
+ * A method is a function which you have previously exposed using expose_function.
+ *
+ * @param string $method Method, e.g. "foo.bar"
+ *
+ * @return GenericResult The result of the execution.
+ * @throws APIException, CallException
+ * @access private
+ */
+function execute_method($method) {
+ global $API_METHODS, $CONFIG;
+
+ // method must be exposed
+ if (!isset($API_METHODS[$method])) {
+ $msg = elgg_echo('APIException:MethodCallNotImplemented', array($method));
+ throw new APIException($msg);
+ }
+
+ // function must be callable
+ if (!(isset($API_METHODS[$method]["function"]))
+ || !(is_callable($API_METHODS[$method]["function"]))) {
+
+ $msg = elgg_echo('APIException:FunctionDoesNotExist', array($method));
+ throw new APIException($msg);
+ }
+
+ // check http call method
+ if (strcmp(get_call_method(), $API_METHODS[$method]["call_method"]) != 0) {
+ $msg = elgg_echo('CallException:InvalidCallMethod', array($method,
+ $API_METHODS[$method]["call_method"]));
+
+ throw new CallException($msg);
+ }
+
+ $parameters = get_parameters_for_method($method);
+
+ if (verify_parameters($method, $parameters) == false) {
+ // if verify_parameters fails, it throws exception which is not caught here
+ }
+
+ $serialised_parameters = serialise_parameters($method, $parameters);
+
+ // Execute function: Construct function and calling parameters
+ $function = $API_METHODS[$method]["function"];
+ $serialised_parameters = trim($serialised_parameters, ", ");
+
+ // @todo document why we cannot use call_user_func_array here
+ $result = eval("return $function($serialised_parameters);");
+
+ // Sanity check result
+ // If this function returns an api result itself, just return it
+ if ($result instanceof GenericResult) {
+ return $result;
+ }
+
+ if ($result === false) {
+ $msg = elgg_echo('APIException:FunctionParseError', array($function, $serialised_parameters));
+ throw new APIException($msg);
+ }
+
+ if ($result === NULL) {
+ // If no value
+ $msg = elgg_echo('APIException:FunctionNoReturn', array($function, $serialised_parameters));
+ throw new APIException($msg);
+ }
+
+ // Otherwise assume that the call was successful and return it as a success object.
+ return SuccessResult::getInstance($result);
+}
+
+/**
+ * Get the request method.
+ *
+ * @return string HTTP request method
+ * @access private
+ */
+function get_call_method() {
+ return $_SERVER['REQUEST_METHOD'];
+}
+
+/**
+ * This function analyses all expected parameters for a given method
+ *
+ * This function sanitizes the input parameters and returns them in
+ * an associated array.
+ *
+ * @param string $method The method
+ *
+ * @return array containing parameters as key => value
+ * @access private
+ */
+function get_parameters_for_method($method) {
+ global $API_METHODS;
+
+ $sanitised = array();
+
+ // if there are parameters, sanitize them
+ if (isset($API_METHODS[$method]['parameters'])) {
+ foreach ($API_METHODS[$method]['parameters'] as $k => $v) {
+ $param = get_input($k); // Make things go through the sanitiser
+ if ($param !== '' && $param !== null) {
+ $sanitised[$k] = $param;
+ } else {
+ // parameter wasn't passed so check for default
+ if (isset($v['default'])) {
+ $sanitised[$k] = $v['default'];
+ }
+ }
+ }
+ }
+
+ return $sanitised;
+}
+
+/**
+ * Get POST data
+ * Since this is called through a handler, we need to manually get the post data
+ *
+ * @return POST data as string encoded as multipart/form-data
+ * @access private
+ */
+function get_post_data() {
+
+ $postdata = file_get_contents('php://input');
+
+ return $postdata;
+}
+
+/**
+ * Verify that the required parameters are present
+ *
+ * @param string $method Method name
+ * @param array $parameters List of expected parameters
+ *
+ * @return true on success or exception
+ * @throws APIException
+ * @since 1.7.0
+ * @access private
+ */
+function verify_parameters($method, $parameters) {
+ global $API_METHODS;
+
+ // are there any parameters for this method
+ if (!(isset($API_METHODS[$method]["parameters"]))) {
+ return true; // no so return
+ }
+
+ // check that the parameters were registered correctly and all required ones are there
+ foreach ($API_METHODS[$method]['parameters'] as $key => $value) {
+ // this tests the expose structure: must be array to describe parameter and type must be defined
+ if (!is_array($value) || !isset($value['type'])) {
+
+ $msg = elgg_echo('APIException:InvalidParameter', array($key, $method));
+ throw new APIException($msg);
+ }
+
+ // Check that the variable is present in the request if required
+ if ($value['required'] && !array_key_exists($key, $parameters)) {
+ $msg = elgg_echo('APIException:MissingParameterInMethod', array($key, $method));
+ throw new APIException($msg);
+ }
+ }
+
+ return true;
+}
+
+/**
+ * Serialize an array of parameters for an API method call
+ *
+ * @param string $method API method name
+ * @param array $parameters Array of parameters
+ *
+ * @return string or exception
+ * @throws APIException
+ * @since 1.7.0
+ * @access private
+ */
+function serialise_parameters($method, $parameters) {
+ global $API_METHODS;
+
+ // are there any parameters for this method
+ if (!(isset($API_METHODS[$method]["parameters"]))) {
+ return ''; // if not, return
+ }
+
+ $serialised_parameters = "";
+ foreach ($API_METHODS[$method]['parameters'] as $key => $value) {
+
+ // avoid warning on parameters that are not required and not present
+ if (!isset($parameters[$key])) {
+ continue;
+ }
+
+ // Set variables casting to type.
+ switch (strtolower($value['type']))
+ {
+ case 'int':
+ case 'integer' :
+ $serialised_parameters .= "," . (int)trim($parameters[$key]);
+ break;
+ case 'bool':
+ case 'boolean':
+ // change word false to boolean false
+ if (strcasecmp(trim($parameters[$key]), "false") == 0) {
+ $serialised_parameters .= ',false';
+ } else if ($parameters[$key] == 0) {
+ $serialised_parameters .= ',false';
+ } else {
+ $serialised_parameters .= ',true';
+ }
+
+ break;
+ case 'string':
+ $serialised_parameters .= ",'" . addcslashes(trim($parameters[$key]), "'") . "'";
+ break;
+ case 'float':
+ $serialised_parameters .= "," . (float)trim($parameters[$key]);
+ break;
+ case 'array':
+ // we can handle an array of strings, maybe ints, definitely not booleans or other arrays
+ if (!is_array($parameters[$key])) {
+ $msg = elgg_echo('APIException:ParameterNotArray', array($key));
+ throw new APIException($msg);
+ }
+
+ $array = "array(";
+
+ foreach ($parameters[$key] as $k => $v) {
+ $k = sanitise_string($k);
+ $v = sanitise_string($v);
+
+ $array .= "'$k'=>'$v',";
+ }
+
+ $array = trim($array, ",");
+
+ $array .= ")";
+ $array = ",$array";
+
+ $serialised_parameters .= $array;
+ break;
+ default:
+ $msg = elgg_echo('APIException:UnrecognisedTypeCast', array($value['type'], $key, $method));
+ throw new APIException($msg);
+ }
+ }
+
+ return $serialised_parameters;
+}
+
+// API authorization handlers /////////////////////////////////////////////////////////////////////
+
+/**
+ * PAM: Confirm that the call includes a valid API key
+ *
+ * @return true if good API key - otherwise throws exception
+ *
+ * @return mixed
+ * @throws APIException
+ * @since 1.7.0
+ * @access private
+ */
+function api_auth_key() {
+ global $CONFIG;
+
+ // check that an API key is present
+ $api_key = get_input('api_key');
+ if ($api_key == "") {
+ throw new APIException(elgg_echo('APIException:MissingAPIKey'));
+ }
+
+ // check that it is active
+ $api_user = get_api_user($CONFIG->site_id, $api_key);
+ if (!$api_user) {
+ // key is not active or does not exist
+ throw new APIException(elgg_echo('APIException:BadAPIKey'));
+ }
+
+ // can be used for keeping stats
+ // plugin can also return false to fail this authentication method
+ return elgg_trigger_plugin_hook('api_key', 'use', $api_key, true);
+}
+
+
+/**
+ * PAM: Confirm the HMAC signature
+ *
+ * @return true if success - otherwise throws exception
+ *
+ * @throws SecurityException
+ * @since 1.7.0
+ * @access private
+ */
+function api_auth_hmac() {
+ global $CONFIG;
+
+ // Get api header
+ $api_header = get_and_validate_api_headers();
+
+ // Pull API user details
+ $api_user = get_api_user($CONFIG->site_id, $api_header->api_key);
+
+ if (!$api_user) {
+ throw new SecurityException(elgg_echo('SecurityException:InvalidAPIKey'),
+ ErrorResult::$RESULT_FAIL_APIKEY_INVALID);
+ }
+
+ // Get the secret key
+ $secret_key = $api_user->secret;
+
+ // get the query string
+ $query = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['REQUEST_URI'], '?') + 1);
+
+ // calculate expected HMAC
+ $hmac = calculate_hmac( $api_header->hmac_algo,
+ $api_header->time,
+ $api_header->nonce,
+ $api_header->api_key,
+ $secret_key,
+ $query,
+ $api_header->method == 'POST' ? $api_header->posthash : "");
+
+
+ if ($api_header->hmac !== $hmac) {
+ throw new SecurityException("HMAC is invalid. {$api_header->hmac} != [calc]$hmac");
+ }
+
+ // Now make sure this is not a replay
+ if (cache_hmac_check_replay($hmac)) {
+ throw new SecurityException(elgg_echo('SecurityException:DupePacket'));
+ }
+
+ // Validate post data
+ if ($api_header->method == "POST") {
+ $postdata = get_post_data();
+ $calculated_posthash = calculate_posthash($postdata, $api_header->posthash_algo);
+
+ if (strcmp($api_header->posthash, $calculated_posthash) != 0) {
+ $msg = elgg_echo('SecurityException:InvalidPostHash',
+ array($calculated_posthash, $api_header->posthash));
+
+ throw new SecurityException($msg);
+ }
+ }
+
+ return true;
+}
+
+// HMAC /////////////////////////////////////////////////////////////////////
+
+/**
+ * This function looks at the super-global variable $_SERVER and extracts the various
+ * header variables needed for the HMAC PAM
+ *
+ * @return stdClass Containing all the values.
+ * @throws APIException Detailing any error.
+ * @access private
+ */
+function get_and_validate_api_headers() {
+ $result = new stdClass;
+
+ $result->method = get_call_method();
+ // Only allow these methods
+ if (($result->method != "GET") && ($result->method != "POST")) {
+ throw new APIException(elgg_echo('APIException:NotGetOrPost'));
+ }
+
+ $result->api_key = $_SERVER['HTTP_X_ELGG_APIKEY'];
+ if ($result->api_key == "") {
+ throw new APIException(elgg_echo('APIException:MissingAPIKey'));
+ }
+
+ $result->hmac = $_SERVER['HTTP_X_ELGG_HMAC'];
+ if ($result->hmac == "") {
+ throw new APIException(elgg_echo('APIException:MissingHmac'));
+ }
+
+ $result->hmac_algo = $_SERVER['HTTP_X_ELGG_HMAC_ALGO'];
+ if ($result->hmac_algo == "") {
+ throw new APIException(elgg_echo('APIException:MissingHmacAlgo'));
+ }
+
+ $result->time = $_SERVER['HTTP_X_ELGG_TIME'];
+ if ($result->time == "") {
+ throw new APIException(elgg_echo('APIException:MissingTime'));
+ }
+
+ // Must have been sent within 25 hour period.
+ // 25 hours is more than enough to handle server clock drift.
+ // This values determines how long the HMAC cache needs to store previous
+ // signatures. Heavy use of HMAC is better handled with a shorter sig lifetime.
+ // See cache_hmac_check_replay()
+ if (($result->time < (time() - 90000)) || ($result->time > (time() + 90000))) {
+ throw new APIException(elgg_echo('APIException:TemporalDrift'));
+ }
+
+ $result->nonce = $_SERVER['HTTP_X_ELGG_NONCE'];
+ if ($result->nonce == "") {
+ throw new APIException(elgg_echo('APIException:MissingNonce'));
+ }
+
+ if ($result->method == "POST") {
+ $result->posthash = $_SERVER['HTTP_X_ELGG_POSTHASH'];
+ if ($result->posthash == "") {
+ throw new APIException(elgg_echo('APIException:MissingPOSTHash'));
+ }
+
+ $result->posthash_algo = $_SERVER['HTTP_X_ELGG_POSTHASH_ALGO'];
+ if ($result->posthash_algo == "") {
+ throw new APIException(elgg_echo('APIException:MissingPOSTAlgo'));
+ }
+
+ $result->content_type = $_SERVER['CONTENT_TYPE'];
+ if ($result->content_type == "") {
+ throw new APIException(elgg_echo('APIException:MissingContentType'));
+ }
+ }
+
+ return $result;
+}
+
+/**
+ * Map various algorithms to their PHP equivs.
+ * This also gives us an easy way to disable algorithms.
+ *
+ * @param string $algo The algorithm
+ *
+ * @return string The php algorithm
+ * @throws APIException if an algorithm is not supported.
+ * @access private
+ */
+function map_api_hash($algo) {
+ $algo = strtolower(sanitise_string($algo));
+ $supported_algos = array(
+ "md5" => "md5", // @todo Consider phasing this out
+ "sha" => "sha1", // alias for sha1
+ "sha1" => "sha1",
+ "sha256" => "sha256"
+ );
+
+ if (array_key_exists($algo, $supported_algos)) {
+ return $supported_algos[$algo];
+ }
+
+ throw new APIException(elgg_echo('APIException:AlgorithmNotSupported', array($algo)));
+}
+
+/**
+ * Calculate the HMAC for the http request.
+ * This function signs an api request using the information provided. The signature returned
+ * has been base64 encoded and then url encoded.
+ *
+ * @param string $algo The HMAC algorithm used
+ * @param string $time String representation of unix time
+ * @param string $nonce Nonce
+ * @param string $api_key Your api key
+ * @param string $secret_key Your private key
+ * @param string $get_variables URLEncoded string representation of the get variable parameters,
+ * eg "method=user&guid=2"
+ * @param string $post_hash Optional sha1 hash of the post data.
+ *
+ * @return string The HMAC signature
+ * @access private
+ */
+function calculate_hmac($algo, $time, $nonce, $api_key, $secret_key,
+$get_variables, $post_hash = "") {
+
+ global $CONFIG;
+
+ elgg_log("HMAC Parts: $algo, $time, $api_key, $secret_key, $get_variables, $post_hash");
+
+ $ctx = hash_init(map_api_hash($algo), HASH_HMAC, $secret_key);
+
+ hash_update($ctx, trim($time));
+ hash_update($ctx, trim($nonce));
+ hash_update($ctx, trim($api_key));
+ hash_update($ctx, trim($get_variables));
+ if (trim($post_hash) != "") {
+ hash_update($ctx, trim($post_hash));
+ }
+
+ return urlencode(base64_encode(hash_final($ctx, true)));
+}
+
+/**
+ * Calculate a hash for some post data.
+ *
+ * @todo Work out how to handle really large bits of data.
+ *
+ * @param string $postdata The post data.
+ * @param string $algo The algorithm used.
+ *
+ * @return string The hash.
+ * @access private
+ */
+function calculate_posthash($postdata, $algo) {
+ $ctx = hash_init(map_api_hash($algo));
+
+ hash_update($ctx, $postdata);
+
+ return hash_final($ctx);
+}
+
+/**
+ * This function will do two things. Firstly it verifies that a HMAC signature
+ * hasn't been seen before, and secondly it will add the given hmac to the cache.
+ *
+ * @param string $hmac The hmac string.
+ *
+ * @return bool True if replay detected, false if not.
+ * @access private
+ */
+function cache_hmac_check_replay($hmac) {
+ // cache lifetime is 25 hours (this should be related to the time drift
+ // allowed in get_and_validate_headers
+ $cache = new ElggHMACCache(90000);
+
+ if (!$cache->load($hmac)) {
+ $cache->save($hmac, $hmac);
+
+ return false;
+ }
+
+ return true;
+}
+
+// API key functions /////////////////////////////////////////////////////////////////////
+
+/**
+ * Generate a new API user for a site, returning a new keypair on success.
+ *
+ * @param int $site_guid The GUID of the site. (default is current site)
+ *
+ * @return stdClass object or false
+ */
+function create_api_user($site_guid) {
+ global $CONFIG;
+
+ if (!isset($site_guid)) {
+ $site_guid = $CONFIG->site_id;
+ }
+
+ $site_guid = (int)$site_guid;
+
+ $public = sha1(rand() . $site_guid . microtime());
+ $secret = sha1(rand() . $site_guid . microtime() . $public);
+
+ $insert = insert_data("INSERT into {$CONFIG->dbprefix}api_users
+ (site_guid, api_key, secret) values
+ ($site_guid, '$public', '$secret')");
+
+ if ($insert) {
+ return get_api_user($site_guid, $public);
+ }
+
+ return false;
+}
+
+/**
+ * Find an API User's details based on the provided public api key.
+ * These users are not users in the traditional sense.
+ *
+ * @param int $site_guid The GUID of the site.
+ * @param string $api_key The API Key
+ *
+ * @return mixed stdClass representing the database row or false.
+ */
+function get_api_user($site_guid, $api_key) {
+ global $CONFIG;
+
+ $api_key = sanitise_string($api_key);
+ $site_guid = (int)$site_guid;
+
+ $query = "SELECT * from {$CONFIG->dbprefix}api_users"
+ . " where api_key='$api_key' and site_guid=$site_guid and active=1";
+
+ return get_data_row($query);
+}
+
+/**
+ * Revoke an api user key.
+ *
+ * @param int $site_guid The GUID of the site.
+ * @param string $api_key The API Key (public).
+ *
+ * @return bool
+ */
+function remove_api_user($site_guid, $api_key) {
+ global $CONFIG;
+
+ $keypair = get_api_user($site_guid, $api_key);
+ if ($keypair) {
+ return delete_data("DELETE from {$CONFIG->dbprefix}api_users where id={$keypair->id}");
+ }
+
+ return false;
+}
+
+
+// User Authorization functions
+
+/**
+ * Check the user token
+ * This examines whether an authentication token is present and returns true if
+ * it is present and is valid. The user gets logged in so with the current
+ * session code of Elgg, that user will be logged out of all other sessions.
+ *
+ * @return bool
+ * @access private
+ */
+function pam_auth_usertoken() {
+ global $CONFIG;
+
+ $token = get_input('auth_token');
+ if (!$token) {
+ return false;
+ }
+
+ $validated_userid = validate_user_token($token, $CONFIG->site_id);
+
+ if ($validated_userid) {
+ $u = get_entity($validated_userid);
+
+ // Could we get the user?
+ if (!$u) {
+ return false;
+ }
+
+ // Not an elgg user
+ if ((!$u instanceof ElggUser)) {
+ return false;
+ }
+
+ // User is banned
+ if ($u->isBanned()) {
+ return false;
+ }
+
+ // Fail if we couldn't log the user in
+ if (!login($u)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * See if the user has a valid login sesson
+ *
+ * @return bool
+ * @access private
+ */
+function pam_auth_session() {
+ return elgg_is_logged_in();
+}
+
+// user token functions
+
+/**
+ * Obtain a token for a user.
+ *
+ * @param string $username The username
+ * @param int $expire Minutes until token expires (default is 60 minutes)
+ *
+ * @return bool
+ */
+function create_user_token($username, $expire = 60) {
+ global $CONFIG;
+
+ $site_guid = $CONFIG->site_id;
+ $user = get_user_by_username($username);
+ $time = time();
+ $time += 60 * $expire;
+ $token = md5(rand() . microtime() . $username . $time . $site_guid);
+
+ if (!$user) {
+ return false;
+ }
+
+ if (insert_data("INSERT into {$CONFIG->dbprefix}users_apisessions
+ (user_guid, site_guid, token, expires) values
+ ({$user->guid}, $site_guid, '$token', '$time')
+ on duplicate key update token='$token', expires='$time'")) {
+ return $token;
+ }
+
+ return false;
+}
+
+/**
+ * Get all tokens attached to a user
+ *
+ * @param int $user_guid The user GUID
+ * @param int $site_guid The ID of the site (default is current site)
+ *
+ * @return false if none available or array of stdClass objects
+ * (see users_apisessions schema for available variables in objects)
+ * @since 1.7.0
+ */
+function get_user_tokens($user_guid, $site_guid) {
+ global $CONFIG;
+
+ if (!isset($site_guid)) {
+ $site_guid = $CONFIG->site_id;
+ }
+
+ $site_guid = (int)$site_guid;
+ $user_guid = (int)$user_guid;
+
+ $tokens = get_data("SELECT * from {$CONFIG->dbprefix}users_apisessions
+ where user_guid=$user_guid and site_guid=$site_guid");
+
+ return $tokens;
+}
+
+/**
+ * Validate a token against a given site.
+ *
+ * A token registered with one site can not be used from a
+ * different apikey(site), so be aware of this during development.
+ *
+ * @param string $token The Token.
+ * @param int $site_guid The ID of the site (default is current site)
+ *
+ * @return mixed The user id attached to the token if not expired or false.
+ */
+function validate_user_token($token, $site_guid) {
+ global $CONFIG;
+
+ if (!isset($site_guid)) {
+ $site_guid = $CONFIG->site_id;
+ }
+
+ $site_guid = (int)$site_guid;
+ $token = sanitise_string($token);
+
+ $time = time();
+
+ $user = get_data_row("SELECT * from {$CONFIG->dbprefix}users_apisessions
+ where token='$token' and site_guid=$site_guid and $time < expires");
+
+ if ($user) {
+ return $user->user_guid;
+ }
+
+ return false;
+}
+
+/**
+ * Remove user token
+ *
+ * @param string $token The toekn
+ * @param int $site_guid The ID of the site (default is current site)
+ *
+ * @return bool
+ * @since 1.7.0
+ */
+function remove_user_token($token, $site_guid) {
+ global $CONFIG;
+
+ if (!isset($site_guid)) {
+ $site_guid = $CONFIG->site_id;
+ }
+
+ $site_guid = (int)$site_guid;
+ $token = sanitise_string($token);
+
+ return delete_data("DELETE from {$CONFIG->dbprefix}users_apisessions
+ where site_guid=$site_guid and token='$token'");
+}
+
+/**
+ * Remove expired tokens
+ *
+ * @return bool
+ * @since 1.7.0
+ */
+function remove_expired_user_tokens() {
+ global $CONFIG;
+
+ $site_guid = $CONFIG->site_id;
+
+ $time = time();
+
+ return delete_data("DELETE from {$CONFIG->dbprefix}users_apisessions
+ where site_guid=$site_guid and expires < $time");
+}
+
+// Client api functions
+
+/**
+ * Utility function to serialise a header array into its text representation.
+ *
+ * @param array $headers The array of headers "key" => "value"
+ *
+ * @return string
+ * @access private
+ */
+function serialise_api_headers(array $headers) {
+ $headers_str = "";
+
+ foreach ($headers as $k => $v) {
+ $headers_str .= trim($k) . ": " . trim($v) . "\r\n";
+ }
+
+ return trim($headers_str);
+}
+
+/**
+ * Send a raw API call to an elgg api endpoint.
+ *
+ * @param array $keys The api keys.
+ * @param string $url URL of the endpoint.
+ * @param array $call Associated array of "variable" => "value"
+ * @param string $method GET or POST
+ * @param string $post_data The post data
+ * @param string $content_type The content type
+ *
+ * @return string
+ */
+function send_api_call(array $keys, $url, array $call, $method = 'GET', $post_data = '',
+$content_type = 'application/octet-stream') {
+
+ global $CONFIG;
+
+ $headers = array();
+ $encoded_params = array();
+
+ $method = strtoupper($method);
+ switch (strtoupper($method)) {
+ case 'GET' :
+ case 'POST' :
+ break;
+ default:
+ $msg = elgg_echo('NotImplementedException:CallMethodNotImplemented', array($method));
+ throw new NotImplementedException($msg);
+ }
+
+ // Time
+ $time = time();
+
+ // Nonce
+ $nonce = uniqid('');
+
+ // URL encode all the parameters
+ foreach ($call as $k => $v) {
+ $encoded_params[] = urlencode($k) . '=' . urlencode($v);
+ }
+
+ $params = implode('&', $encoded_params);
+
+ // Put together the query string
+ $url = $url . "?" . $params;
+
+ // Construct headers
+ $posthash = "";
+ if ($method == 'POST') {
+ $posthash = calculate_posthash($post_data, 'md5');
+ }
+
+ if ((isset($keys['public'])) && (isset($keys['private']))) {
+ $headers['X-Elgg-apikey'] = $keys['public'];
+ $headers['X-Elgg-time'] = $time;
+ $headers['X-Elgg-nonce'] = $nonce;
+ $headers['X-Elgg-hmac-algo'] = 'sha1';
+ $headers['X-Elgg-hmac'] = calculate_hmac('sha1',
+ $time,
+ $nonce,
+ $keys['public'],
+ $keys['private'],
+ $params,
+ $posthash
+ );
+ }
+ if ($method == 'POST') {
+ $headers['X-Elgg-posthash'] = $posthash;
+ $headers['X-Elgg-posthash-algo'] = 'md5';
+
+ $headers['Content-type'] = $content_type;
+ $headers['Content-Length'] = strlen($post_data);
+ }
+
+ // Opt array
+ $http_opts = array(
+ 'method' => $method,
+ 'header' => serialise_api_headers($headers)
+ );
+ if ($method == 'POST') {
+ $http_opts['content'] = $post_data;
+ }
+
+ $opts = array('http' => $http_opts);
+
+ // Send context
+ $context = stream_context_create($opts);
+
+ // Send the query and get the result and decode.
+ elgg_log("APICALL: $url");
+ $results = file_get_contents($url, false, $context);
+
+ return $results;
+}
+
+/**
+ * Send a GET call
+ *
+ * @param string $url URL of the endpoint.
+ * @param array $call Associated array of "variable" => "value"
+ * @param array $keys The keys dependant on chosen authentication method
+ *
+ * @return string
+ */
+function send_api_get_call($url, array $call, array $keys) {
+ return send_api_call($keys, $url, $call);
+}
+
+/**
+ * Send a GET call
+ *
+ * @param string $url URL of the endpoint.
+ * @param array $call Associated array of "variable" => "value"
+ * @param array $keys The keys dependant on chosen authentication method
+ * @param string $post_data The post data
+ * @param string $content_type The content type
+ *
+ * @return string
+ */
+function send_api_post_call($url, array $call, array $keys, $post_data,
+$content_type = 'application/octet-stream') {
+
+ return send_api_call($keys, $url, $call, 'POST', $post_data, $content_type);
+}
+
+/**
+ * Return a key array suitable for the API client using the standard
+ * authentication method based on api-keys and secret keys.
+ *
+ * @param string $secret_key Your secret key
+ * @param string $api_key Your api key
+ *
+ * @return array
+ */
+function get_standard_api_key_array($secret_key, $api_key) {
+ return array('public' => $api_key, 'private' => $secret_key);
+}
+
+// System functions
+
+/**
+ * Simple api to return a list of all api's installed on the system.
+ *
+ * @return array
+ * @access private
+ */
+function list_all_apis() {
+ global $API_METHODS;
+
+ // sort first
+ ksort($API_METHODS);
+
+ return $API_METHODS;
+}
+
+/**
+ * The auth.gettoken API.
+ * This API call lets a user log in, returning an authentication token which can be used
+ * to authenticate a user for a period of time. It is passed in future calls as the parameter
+ * auth_token.
+ *
+ * @param string $username Username
+ * @param string $password Clear text password
+ *
+ * @return string Token string or exception
+ * @throws SecurityException
+ * @access private
+ */
+function auth_gettoken($username, $password) {
+ if (true === elgg_authenticate($username, $password)) {
+ $token = create_user_token($username);
+ if ($token) {
+ return $token;
+ }
+ }
+
+ throw new SecurityException(elgg_echo('SecurityException:authenticationfailed'));
+}
+
+// Error handler functions
+
+/** Define a global array of errors */
+$ERRORS = array();
+
+/**
+ * API PHP Error handler function.
+ * This function acts as a wrapper to catch and report PHP error messages.
+ *
+ * @see http://uk3.php.net/set-error-handler
+ *
+ * @param int $errno Error number
+ * @param string $errmsg Human readable message
+ * @param string $filename Filename
+ * @param int $linenum Line number
+ * @param array $vars Vars
+ *
+ * @return void
+ * @access private
+ *
+ * @throws Exception
+ */
+function _php_api_error_handler($errno, $errmsg, $filename, $linenum, $vars) {
+ global $ERRORS;
+
+ $error = date("Y-m-d H:i:s (T)") . ": \"" . $errmsg . "\" in file "
+ . $filename . " (line " . $linenum . ")";
+
+ switch ($errno) {
+ case E_USER_ERROR:
+ error_log("ERROR: " . $error);
+ $ERRORS[] = "ERROR: " . $error;
+
+ // Since this is a fatal error, we want to stop any further execution but do so gracefully.
+ throw new Exception("ERROR: " . $error);
+ break;
+
+ case E_WARNING :
+ case E_USER_WARNING :
+ error_log("WARNING: " . $error);
+ $ERRORS[] = "WARNING: " . $error;
+ break;
+
+ default:
+ error_log("DEBUG: " . $error);
+ $ERRORS[] = "DEBUG: " . $error;
+ }
+}
+
+/**
+ * API PHP Exception handler.
+ * This is a generic exception handler for PHP exceptions. This will catch any
+ * uncaught exception, end API execution and return the result to the requestor
+ * as an ErrorResult in the requested format.
+ *
+ * @param Exception $exception Exception
+ *
+ * @return void
+ * @access private
+ */
+function _php_api_exception_handler($exception) {
+
+ error_log("*** FATAL EXCEPTION (API) *** : " . $exception);
+
+ $code = $exception->getCode() == 0 ? ErrorResult::$RESULT_FAIL : $exception->getCode();
+ $result = new ErrorResult($exception->getMessage(), $code, NULL);
+
+ echo elgg_view_page($exception->getMessage(), elgg_view("api/output", array("result" => $result)));
+}
+
+
+// Services handler
+
+/**
+ * Services handler - turns request over to the registered handler
+ * If no handler is found, this returns a 404 error
+ *
+ * @param string $handler Handler name
+ * @param array $request Request string
+ *
+ * @return void
+ * @access private
+ */
+function service_handler($handler, $request) {
+ global $CONFIG;
+
+ elgg_set_context('api');
+
+ $request = explode('/', $request);
+
+ // after the handler, the first identifier is response format
+ // ex) http://example.org/services/api/rest/xml/?method=test
+ $reponse_format = array_shift($request);
+ // Which view - xml, json, ...
+ if ($reponse_format) {
+ elgg_set_viewtype($reponse_format);
+ } else {
+ // default to xml
+ elgg_set_viewtype("xml");
+ }
+
+ if (!isset($CONFIG->servicehandler) || empty($handler)) {
+ // no handlers set or bad url
+ header("HTTP/1.0 404 Not Found");
+ exit;
+ } else if (isset($CONFIG->servicehandler[$handler]) && is_callable($CONFIG->servicehandler[$handler])) {
+ $function = $CONFIG->servicehandler[$handler];
+ call_user_func($function, $request, $handler);
+ } else {
+ // no handler for this web service
+ header("HTTP/1.0 404 Not Found");
+ exit;
+ }
+}
+
+/**
+ * Registers a web services handler
+ *
+ * @param string $handler Web services type
+ * @param string $function Your function name
+ *
+ * @return bool Depending on success
+ * @since 1.7.0
+ */
+function register_service_handler($handler, $function) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->servicehandler)) {
+ $CONFIG->servicehandler = array();
+ }
+ if (is_callable($function, true)) {
+ $CONFIG->servicehandler[$handler] = $function;
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Remove a web service
+ * To replace a web service handler, register the desired handler over the old on
+ * with register_service_handler().
+ *
+ * @param string $handler web services type
+ *
+ * @return void
+ * @since 1.7.0
+ */
+function unregister_service_handler($handler) {
+ global $CONFIG;
+
+ if (isset($CONFIG->servicehandler, $CONFIG->servicehandler[$handler])) {
+ unset($CONFIG->servicehandler[$handler]);
+ }
+}
+
+/**
+ * REST API handler
+ *
+ * @return void
+ * @access private
+ *
+ * @throws SecurityException|APIException
+ */
+function rest_handler() {
+ global $CONFIG;
+
+ // Register the error handler
+ error_reporting(E_ALL);
+ set_error_handler('_php_api_error_handler');
+
+ // Register a default exception handler
+ set_exception_handler('_php_api_exception_handler');
+
+ // Check to see if the api is available
+ if ((isset($CONFIG->disable_api)) && ($CONFIG->disable_api == true)) {
+ throw new SecurityException(elgg_echo('SecurityException:APIAccessDenied'));
+ }
+
+ // plugins should return true to control what API and user authentication handlers are registered
+ if (elgg_trigger_plugin_hook('rest', 'init', null, false) == false) {
+ // for testing from a web browser, you can use the session PAM
+ // do not use for production sites!!
+ //register_pam_handler('pam_auth_session');
+
+ // user token can also be used for user authentication
+ register_pam_handler('pam_auth_usertoken');
+
+ // simple API key check
+ register_pam_handler('api_auth_key', "sufficient", "api");
+ // hmac
+ register_pam_handler('api_auth_hmac', "sufficient", "api");
+ }
+
+ // Get parameter variables
+ $method = get_input('method');
+ $result = null;
+
+ // this will throw an exception if authentication fails
+ authenticate_method($method);
+
+ $result = execute_method($method);
+
+
+ if (!($result instanceof GenericResult)) {
+ throw new APIException(elgg_echo('APIException:ApiResultUnknown'));
+ }
+
+ // Output the result
+ echo elgg_view_page($method, elgg_view("api/output", array("result" => $result)));
+}
+
+// Initialization
+
+/**
+ * Unit tests for API
+ *
+ * @param string $hook unit_test
+ * @param string $type system
+ * @param mixed $value Array of tests
+ * @param mixed $params Params
+ *
+ * @return array
+ * @access private
+ */
+function api_unit_test($hook, $type, $value, $params) {
+ global $CONFIG;
+
+ $value[] = $CONFIG->path . 'engine/tests/services/api.php';
+ return $value;
+}
+
+/**
+ * Initialise the API subsystem.
+ *
+ * @return void
+ * @access private
+ */
+function api_init() {
+ // Register a page handler, so we can have nice URLs
+ register_service_handler('rest', 'rest_handler');
+
+ elgg_register_plugin_hook_handler('unit_test', 'system', 'api_unit_test');
+
+ // expose the list of api methods
+ expose_function("system.api.list", "list_all_apis", NULL,
+ elgg_echo("system.api.list"), "GET", false, false);
+
+ // The authentication token api
+ expose_function(
+ "auth.gettoken",
+ "auth_gettoken",
+ array(
+ 'username' => array ('type' => 'string'),
+ 'password' => array ('type' => 'string'),
+ ),
+ elgg_echo('auth.gettoken'),
+ 'POST',
+ false,
+ false
+ );
+}
+
+
+elgg_register_event_handler('init', 'system', 'api_init');
diff --git a/engine/lib/widgets.php b/engine/lib/widgets.php
new file mode 100644
index 000000000..d73dd6330
--- /dev/null
+++ b/engine/lib/widgets.php
@@ -0,0 +1,419 @@
+<?php
+/**
+ * Elgg widgets library.
+ * Contains code for handling widgets.
+ *
+ * @package Elgg.Core
+ * @subpackage Widgets
+ */
+
+/**
+ * Get widgets for a particular context
+ *
+ * The widgets are ordered for display and grouped in columns.
+ * $widgets = elgg_get_widgets(elgg_get_logged_in_user_guid(), 'dashboard');
+ * $first_column_widgets = $widgets[1];
+ *
+ * @param int $user_guid The owner user GUID
+ * @param string $context The context (profile, dashboard, etc)
+ *
+ * @return array An 2D array of ElggWidget objects
+ * @since 1.8.0
+ */
+function elgg_get_widgets($user_guid, $context) {
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'widget',
+ 'owner_guid' => $user_guid,
+ 'private_setting_name' => 'context',
+ 'private_setting_value' => $context,
+ 'limit' => 0
+ );
+ $widgets = elgg_get_entities_from_private_settings($options);
+ if (!$widgets) {
+ return array();
+ }
+
+ $sorted_widgets = array();
+ foreach ($widgets as $widget) {
+ if (!isset($sorted_widgets[(int)$widget->column])) {
+ $sorted_widgets[(int)$widget->column] = array();
+ }
+ $sorted_widgets[(int)$widget->column][$widget->order] = $widget;
+ }
+
+ foreach ($sorted_widgets as $col => $widgets) {
+ ksort($sorted_widgets[$col]);
+ }
+
+ return $sorted_widgets;
+}
+
+/**
+ * Create a new widget instance
+ *
+ * @param int $owner_guid GUID of entity that owns this widget
+ * @param string $handler The handler for this widget
+ * @param string $context The context for this widget
+ * @param int $access_id If not specified, it is set to the default access level
+ *
+ * @return int|false Widget GUID or false on failure
+ * @since 1.8.0
+ */
+function elgg_create_widget($owner_guid, $handler, $context, $access_id = null) {
+ if (empty($owner_guid) || empty($handler) || !elgg_is_widget_type($handler)) {
+ return false;
+ }
+
+ $owner = get_entity($owner_guid);
+ if (!$owner) {
+ return false;
+ }
+
+ $widget = new ElggWidget;
+ $widget->owner_guid = $owner_guid;
+ $widget->container_guid = $owner_guid; // @todo - will this work for group widgets
+ if (isset($access_id)) {
+ $widget->access_id = $access_id;
+ } else {
+ $widget->access_id = get_default_access();
+ }
+
+ if (!$widget->save()) {
+ return false;
+ }
+
+ // private settings cannot be set until ElggWidget saved
+ $widget->handler = $handler;
+ $widget->context = $context;
+
+ return $widget->getGUID();
+}
+
+/**
+ * Can the user edit the widget layout
+ *
+ * Triggers a 'permissions_check', 'widget_layout' plugin hook
+ *
+ * @param string $context The widget context
+ * @param int $user_guid The GUID of the user (0 for logged in user)
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_can_edit_widget_layout($context, $user_guid = 0) {
+
+ $user = get_entity((int)$user_guid);
+ if (!$user) {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ $return = false;
+ if (elgg_is_admin_logged_in()) {
+ $return = true;
+ }
+ if (elgg_get_page_owner_guid() == $user->guid) {
+ $return = true;
+ }
+
+ $params = array(
+ 'user' => $user,
+ 'context' => $context,
+ 'page_owner' => elgg_get_page_owner_entity()
+ );
+ return elgg_trigger_plugin_hook('permissions_check', 'widget_layout', $params, $return);
+}
+
+/**
+ * Regsiter a widget type
+ *
+ * This should be called by plugins in their init function.
+ *
+ * @param string $handler The identifier for the widget handler
+ * @param string $name The name of the widget type
+ * @param string $description A description for the widget type
+ * @param string $context A comma-separated list of contexts where this
+ * widget is allowed (default: 'all')
+ * @param bool $multiple Whether or not multiple instances of this widget
+ * are allowed in a single layout (default: false)
+ *
+ * @return bool
+ * @since 1.8.0
+ */
+function elgg_register_widget_type($handler, $name, $description, $context = "all", $multiple = false) {
+
+ if (!$handler || !$name) {
+ return false;
+ }
+
+ global $CONFIG;
+
+ if (!isset($CONFIG->widgets)) {
+ $CONFIG->widgets = new stdClass;
+ }
+ if (!isset($CONFIG->widgets->handlers)) {
+ $CONFIG->widgets->handlers = array();
+ }
+
+ $handlerobj = new stdClass;
+ $handlerobj->name = $name;
+ $handlerobj->description = $description;
+ $handlerobj->context = explode(",", $context);
+ $handlerobj->multiple = $multiple;
+
+ $CONFIG->widgets->handlers[$handler] = $handlerobj;
+
+ return true;
+}
+
+/**
+ * Remove a widget type
+ *
+ * @param string $handler The identifier for the widget
+ *
+ * @return void
+ * @since 1.8.0
+ */
+function elgg_unregister_widget_type($handler) {
+ global $CONFIG;
+
+ if (!isset($CONFIG->widgets)) {
+ return;
+ }
+
+ if (!isset($CONFIG->widgets->handlers)) {
+ return;
+ }
+
+ if (isset($CONFIG->widgets->handlers[$handler])) {
+ unset($CONFIG->widgets->handlers[$handler]);
+ }
+}
+
+/**
+ * Has a widget type with the specified handler been registered
+ *
+ * @param string $handler The widget handler identifying string
+ *
+ * @return bool Whether or not that widget type exists
+ * @since 1.8.0
+ */
+function elgg_is_widget_type($handler) {
+ global $CONFIG;
+
+ if (!empty($CONFIG->widgets) &&
+ !empty($CONFIG->widgets->handlers) &&
+ is_array($CONFIG->widgets->handlers) &&
+ array_key_exists($handler, $CONFIG->widgets->handlers)) {
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Get the widget types for a context
+ *
+ * The widget types are stdClass objects.
+ *
+ * @param string $context The widget context or empty string for current context
+ * @param bool $exact Only return widgets registered for this context (false)
+ *
+ * @return array
+ * @since 1.8.0
+ */
+function elgg_get_widget_types($context = "", $exact = false) {
+ global $CONFIG;
+
+ if (empty($CONFIG->widgets) ||
+ empty($CONFIG->widgets->handlers) ||
+ !is_array($CONFIG->widgets->handlers)) {
+ // no widgets
+ return array();
+ }
+
+ if (!$context) {
+ $context = elgg_get_context();
+ }
+
+ $widgets = array();
+ foreach ($CONFIG->widgets->handlers as $key => $handler) {
+ if ($exact) {
+ if (in_array($context, $handler->context)) {
+ $widgets[$key] = $handler;
+ }
+ } else {
+ if (in_array('all', $handler->context) || in_array($context, $handler->context)) {
+ $widgets[$key] = $handler;
+ }
+ }
+ }
+
+ return $widgets;
+}
+
+/**
+ * Regsiter entity of object, widget as ElggWidget objects
+ *
+ * @return void
+ * @access private
+ */
+function elgg_widget_run_once() {
+ add_subtype("object", "widget", "ElggWidget");
+}
+
+/**
+ * Function to initialize widgets functionality
+ *
+ * @return void
+ * @access private
+ */
+function elgg_widgets_init() {
+ elgg_register_action('widgets/save');
+ elgg_register_action('widgets/add');
+ elgg_register_action('widgets/move');
+ elgg_register_action('widgets/delete');
+ elgg_register_action('widgets/upgrade', '', 'admin');
+
+ run_function_once("elgg_widget_run_once");
+}
+
+/**
+ * Gets a list of events to create default widgets for and
+ * register menu items for default widgets with the admin section.
+ *
+ * A plugin that wants to register a new context for default widgets should
+ * register for the plugin hook 'get_list', 'default_widgets'. The handler
+ * can register the new type of default widgets by adding an associate array to
+ * the return value array like this:
+ * array(
+ * 'name' => elgg_echo('profile'),
+ * 'widget_context' => 'profile',
+ * 'widget_columns' => 3,
+ *
+ * 'event' => 'create',
+ * 'entity_type' => 'user',
+ * 'entity_subtype' => ELGG_ENTITIES_ANY_VALUE,
+ * );
+ *
+ * The first set of keys define information about the new type of default
+ * widgets and the second set determine what event triggers the creation of the
+ * new widgets.
+ *
+ * @return void
+ * @access private
+ */
+function elgg_default_widgets_init() {
+ global $CONFIG;
+ $default_widgets = elgg_trigger_plugin_hook('get_list', 'default_widgets', null, array());
+
+ $CONFIG->default_widget_info = $default_widgets;
+
+ if ($default_widgets) {
+ elgg_register_admin_menu_item('configure', 'default_widgets', 'appearance');
+
+ // override permissions for creating widget on logged out / just created entities
+ elgg_register_plugin_hook_handler('container_permissions_check', 'object', 'elgg_default_widgets_permissions_override');
+
+ // only register the callback once per event
+ $events = array();
+ foreach ($default_widgets as $info) {
+ $events[$info['event'] . ',' . $info['entity_type']] = $info;
+ }
+ foreach ($events as $info) {
+ elgg_register_event_handler($info['event'], $info['entity_type'], 'elgg_create_default_widgets');
+ }
+ }
+}
+
+/**
+ * Creates default widgets
+ *
+ * This plugin hook handler is registered for events based on what kinds of
+ * default widgets have been registered. See elgg_default_widgets_init() for
+ * information on registering new default widget contexts.
+ *
+ * @param string $event The event
+ * @param string $type The type of object
+ * @param object $entity The entity being created
+ * @return void
+ * @access private
+ */
+function elgg_create_default_widgets($event, $type, $entity) {
+ $default_widget_info = elgg_get_config('default_widget_info');
+
+ if (!$default_widget_info || !$entity) {
+ return;
+ }
+
+ $type = $entity->getType();
+ $subtype = $entity->getSubtype();
+
+ // event is already guaranteed by the hook registration.
+ // need to check subtype and type.
+ foreach ($default_widget_info as $info) {
+ if ($info['entity_type'] == $type) {
+ if ($info['entity_subtype'] == ELGG_ENTITIES_ANY_VALUE || $info['entity_subtype'] == $subtype) {
+
+ // need to be able to access everything
+ $old_ia = elgg_set_ignore_access(true);
+ elgg_push_context('create_default_widgets');
+
+ // pull in by widget context with widget owners as the site
+ // not using elgg_get_widgets() because it sorts by columns and we don't care right now.
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'widget',
+ 'owner_guid' => elgg_get_site_entity()->guid,
+ 'private_setting_name' => 'context',
+ 'private_setting_value' => $info['widget_context'],
+ 'limit' => 0
+ );
+
+ $widgets = elgg_get_entities_from_private_settings($options);
+
+ foreach ($widgets as $widget) {
+ // change the container and owner
+ $new_widget = clone $widget;
+ $new_widget->container_guid = $entity->guid;
+ $new_widget->owner_guid = $entity->guid;
+
+ // pull in settings
+ $settings = get_all_private_settings($widget->guid);
+
+ foreach ($settings as $name => $value) {
+ $new_widget->$name = $value;
+ }
+
+ $new_widget->save();
+ }
+
+ elgg_set_ignore_access($old_ia);
+ elgg_pop_context();
+ }
+ }
+ }
+}
+
+/**
+ * Overrides permissions checks when creating widgets for logged out users.
+ *
+ * @param string $hook The permissions hook.
+ * @param string $type The type of entity being created.
+ * @param string $return Value
+ * @param mixed $params Params
+ * @return true|null
+ * @access private
+ */
+function elgg_default_widgets_permissions_override($hook, $type, $return, $params) {
+ if ($type == 'object' && $params['subtype'] == 'widget') {
+ return elgg_in_context('create_default_widgets') ? true : null;
+ }
+
+ return null;
+}
+
+elgg_register_event_handler('init', 'system', 'elgg_widgets_init');
+// register default widget hooks from plugins
+elgg_register_event_handler('ready', 'system', 'elgg_default_widgets_init');
diff --git a/engine/lib/xml-rpc.php b/engine/lib/xml-rpc.php
new file mode 100644
index 000000000..bfe1a8645
--- /dev/null
+++ b/engine/lib/xml-rpc.php
@@ -0,0 +1,203 @@
+<?php
+/**
+ * Elgg XML-RPC library.
+ * Contains functions and classes to handle XML-RPC services, currently only server only.
+ *
+ * @package Elgg.Core
+ * @subpackage XMLRPC
+ */
+
+/**
+ * parse XMLRPCCall parameters
+ *
+ * Convert an XMLRPCCall result array into native data types
+ *
+ * @param array $parameters An array of params
+ *
+ * @return array
+ * @access private
+ */
+function xmlrpc_parse_params($parameters) {
+ $result = array();
+
+ foreach ($parameters as $parameter) {
+ $result[] = xmlrpc_scalar_value($parameter);
+ }
+
+ return $result;
+}
+
+/**
+ * Extract the scalar value of an XMLObject type result array
+ *
+ * @param XMLObject $object And object
+ *
+ * @return mixed
+ * @access private
+ */
+function xmlrpc_scalar_value($object) {
+ if ($object->name == 'param') {
+ $object = $object->children[0]->children[0];
+ }
+
+ switch ($object->name) {
+ case 'string':
+ return $object->content;
+
+ case 'array':
+ foreach ($object->children[0]->children as $child) {
+ $value[] = xmlrpc_scalar_value($child);
+ }
+ return $value;
+
+ case 'struct':
+ foreach ($object->children as $child) {
+ if (isset($child->children[1]->children[0])) {
+ $value[$child->children[0]->content] = xmlrpc_scalar_value($child->children[1]->children[0]);
+ } else {
+ $value[$child->children[0]->content] = $child->children[1]->content;
+ }
+ }
+ return $value;
+
+ case 'boolean':
+ return (boolean) $object->content;
+
+ case 'i4':
+ case 'int':
+ return (int) $object->content;
+
+ case 'double':
+ return (double) $object->content;
+
+ case 'dateTime.iso8601':
+ return (int) strtotime($object->content);
+
+ case 'base64':
+ return base64_decode($object->content);
+
+ case 'value':
+ return xmlrpc_scalar_value($object->children[0]);
+
+ default:
+ // @todo unsupported, throw an error
+ return false;
+ }
+}
+
+// Functions for adding handlers //////////////////////////////////////////////////////////
+
+/** XML-RPC Handlers */
+global $XML_RPC_HANDLERS;
+$XML_RPC_HANDLERS = array();
+
+/**
+ * Register a method handler for a given XML-RPC method.
+ *
+ * @param string $method Method parameter.
+ * @param string $handler The handler function. This function accepts
+ * one XMLRPCCall object and must return a XMLRPCResponse object.
+ *
+ * @return bool
+ */
+function register_xmlrpc_handler($method, $handler) {
+ global $XML_RPC_HANDLERS;
+
+ $XML_RPC_HANDLERS[$method] = $handler;
+}
+
+/**
+ * Trigger a method call and pass the relevant parameters to the funciton.
+ *
+ * @param XMLRPCCall $parameters The call and parameters.
+ *
+ * @return XMLRPCCall
+ * @access private
+ */
+function trigger_xmlrpc_handler(XMLRPCCall $parameters) {
+ global $XML_RPC_HANDLERS;
+
+ // Go through and see if we have a handler
+ if (isset($XML_RPC_HANDLERS[$parameters->getMethodName()])) {
+ $handler = $XML_RPC_HANDLERS[$parameters->getMethodName()];
+ $result = $handler($parameters);
+
+ if (!($result instanceof XMLRPCResponse)) {
+ $msg = elgg_echo('InvalidParameterException:UnexpectedReturnFormat',
+ array($parameters->getMethodName()));
+ throw new InvalidParameterException($msg);
+ }
+
+ // Result in right format, return it.
+ return $result;
+ }
+
+ // if no handler then throw exception
+ $msg = elgg_echo('NotImplementedException:XMLRPCMethodNotImplemented',
+ array($parameters->getMethodName()));
+ throw new NotImplementedException($msg);
+}
+
+/**
+ * PHP Error handler function.
+ * This function acts as a wrapper to catch and report PHP error messages.
+ *
+ * @see http://uk3.php.net/set-error-handler
+ *
+ * @param int $errno Error number
+ * @param string $errmsg Human readable message
+ * @param string $filename Filename
+ * @param int $linenum Line number
+ * @param array $vars Vars
+ *
+ * @return void
+ * @access private
+ */
+function _php_xmlrpc_error_handler($errno, $errmsg, $filename, $linenum, $vars) {
+ $error = date("Y-m-d H:i:s (T)") . ": \"" . $errmsg . "\" in file "
+ . $filename . " (line " . $linenum . ")";
+
+ switch ($errno) {
+ case E_USER_ERROR:
+ error_log("ERROR: " . $error);
+
+ // Since this is a fatal error, we want to stop any further execution but do so gracefully.
+ throw new Exception("ERROR: " . $error);
+ break;
+
+ case E_WARNING :
+ case E_USER_WARNING :
+ error_log("WARNING: " . $error);
+ break;
+
+ default:
+ error_log("DEBUG: " . $error);
+ }
+}
+
+/**
+ * PHP Exception handler for XMLRPC.
+ *
+ * @param Exception $exception The exception
+ *
+ * @return void
+ * @access private
+ */
+function _php_xmlrpc_exception_handler($exception) {
+
+ error_log("*** FATAL EXCEPTION (XML-RPC) *** : " . $exception);
+
+ $code = $exception->getCode();
+
+ if ($code == 0) {
+ $code = -32400;
+ }
+
+ $result = new XMLRPCErrorResponse($exception->getMessage(), $code);
+
+ $vars = array('result' => $result);
+
+ $content = elgg_view("xml-rpc/output", $vars);
+
+ echo elgg_view_page($exception->getMessage(), $content);
+}
diff --git a/engine/lib/xml.php b/engine/lib/xml.php
new file mode 100644
index 000000000..ff82d7e8a
--- /dev/null
+++ b/engine/lib/xml.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Elgg XML library.
+ * Contains functions for generating and parsing XML.
+ *
+ * @package Elgg.Core
+ * @subpackage XML
+ */
+
+/**
+ * This function serialises an object recursively into an XML representation.
+ *
+ * The function attempts to call $data->export() which expects a stdClass in return,
+ * otherwise it will attempt to get the object variables using get_object_vars (which
+ * will only return public variables!)
+ *
+ * @param mixed $data The object to serialise.
+ * @param string $name The name?
+ * @param int $n Level, only used for recursion.
+ *
+ * @return string The serialised XML output.
+ */
+function serialise_object_to_xml($data, $name = "", $n = 0) {
+ $classname = ($name == "" ? get_class($data) : $name);
+
+ $vars = method_exists($data, "export") ? get_object_vars($data->export()) : get_object_vars($data);
+
+ $output = "";
+
+ if (($n == 0) || ( is_object($data) && !($data instanceof stdClass))) {
+ $output = "<$classname>";
+ }
+
+ foreach ($vars as $key => $value) {
+ $output .= "<$key type=\"" . gettype($value) . "\">";
+
+ if (is_object($value)) {
+ $output .= serialise_object_to_xml($value, $key, $n + 1);
+ } else if (is_array($value)) {
+ $output .= serialise_array_to_xml($value, $n + 1);
+ } else if (gettype($value) == "boolean") {
+ $output .= $value ? "true" : "false";
+ } else {
+ $output .= htmlspecialchars($value, ENT_NOQUOTES, 'UTF-8');
+ }
+
+ $output .= "</$key>\n";
+ }
+
+ if (($n == 0) || (is_object($data) && !($data instanceof stdClass))) {
+ $output .= "</$classname>\n";
+ }
+
+ return $output;
+}
+
+/**
+ * Serialise an array.
+ *
+ * @param array $data The data to serialize
+ * @param int $n Used for recursion
+ *
+ * @return string
+ */
+function serialise_array_to_xml(array $data, $n = 0) {
+ $output = "";
+
+ if ($n == 0) {
+ $output = "<array>\n";
+ }
+
+ foreach ($data as $key => $value) {
+ $item = "array_item";
+
+ if (is_numeric($key)) {
+ $output .= "<$item name=\"$key\" type=\"" . gettype($value) . "\">";
+ } else {
+ $item = $key;
+ $output .= "<$item type=\"" . gettype($value) . "\">";
+ }
+
+ if (is_object($value)) {
+ $output .= serialise_object_to_xml($value, "", $n + 1);
+ } else if (is_array($value)) {
+ $output .= serialise_array_to_xml($value, $n + 1);
+ } else if (gettype($value) == "boolean") {
+ $output .= $value ? "true" : "false";
+ } else {
+ $output .= htmlspecialchars($value, ENT_NOQUOTES, 'UTF-8');
+ }
+
+ $output .= "</$item>\n";
+ }
+
+ if ($n == 0) {
+ $output .= "</array>\n";
+ }
+
+ return $output;
+}
+
+/**
+ * Parse an XML file into an object.
+ *
+ * @param string $xml The XML
+ *
+ * @return object
+ */
+function xml_to_object($xml) {
+ return new ElggXMLElement($xml);
+}
diff --git a/engine/schema/mysql.sql b/engine/schema/mysql.sql
new file mode 100644
index 000000000..6c6e9db89
--- /dev/null
+++ b/engine/schema/mysql.sql
@@ -0,0 +1,454 @@
+-- MySQL dump 10.13 Distrib 5.1.37, for debian-linux-gnu (i486)
+--
+-- Host: localhost Database: elgg
+-- ------------------------------------------------------
+-- Server version 5.1.37-1ubuntu5
+
+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
+/*!40101 SET NAMES utf8 */;
+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
+/*!40103 SET TIME_ZONE='+00:00' */;
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+
+--
+-- Table structure for table `prefix_access_collection_membership`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_access_collection_membership` (
+ `user_guid` int(11) NOT NULL,
+ `access_collection_id` int(11) NOT NULL,
+ PRIMARY KEY (`user_guid`,`access_collection_id`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_access_collections`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_access_collections` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `name` text NOT NULL,
+ `owner_guid` bigint(20) unsigned NOT NULL,
+ `site_guid` bigint(20) unsigned NOT NULL DEFAULT '0',
+ PRIMARY KEY (`id`),
+ KEY `owner_guid` (`owner_guid`),
+ KEY `site_guid` (`site_guid`)
+) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_annotations`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_annotations` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `entity_guid` bigint(20) unsigned NOT NULL,
+ `name_id` int(11) NOT NULL,
+ `value_id` int(11) NOT NULL,
+ `value_type` enum('integer','text') NOT NULL,
+ `owner_guid` bigint(20) unsigned NOT NULL,
+ `access_id` int(11) NOT NULL,
+ `time_created` int(11) NOT NULL,
+ `enabled` enum('yes','no') NOT NULL DEFAULT 'yes',
+ PRIMARY KEY (`id`),
+ KEY `entity_guid` (`entity_guid`),
+ KEY `name_id` (`name_id`),
+ KEY `value_id` (`value_id`),
+ KEY `owner_guid` (`owner_guid`),
+ KEY `access_id` (`access_id`)
+) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_api_users`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_api_users` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `site_guid` bigint(20) unsigned DEFAULT NULL,
+ `api_key` varchar(40) DEFAULT NULL,
+ `secret` varchar(40) NOT NULL,
+ `active` int(1) DEFAULT '1',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `api_key` (`api_key`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_config`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_config` (
+ `name` varchar(255) NOT NULL,
+ `value` text NOT NULL,
+ `site_guid` int(11) NOT NULL,
+ PRIMARY KEY (`name`,`site_guid`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_datalists`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_datalists` (
+ `name` varchar(255) NOT NULL,
+ `value` text NOT NULL,
+ PRIMARY KEY (`name`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_entities`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_entities` (
+ `guid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+ `type` enum('object','user','group','site') NOT NULL,
+ `subtype` int(11) DEFAULT NULL,
+ `owner_guid` bigint(20) unsigned NOT NULL,
+ `site_guid` bigint(20) unsigned NOT NULL,
+ `container_guid` bigint(20) unsigned NOT NULL,
+ `access_id` int(11) NOT NULL,
+ `time_created` int(11) NOT NULL,
+ `time_updated` int(11) NOT NULL,
+ `last_action` int(11) NOT NULL DEFAULT '0',
+ `enabled` enum('yes','no') NOT NULL DEFAULT 'yes',
+ PRIMARY KEY (`guid`),
+ KEY `type` (`type`),
+ KEY `subtype` (`subtype`),
+ KEY `owner_guid` (`owner_guid`),
+ KEY `site_guid` (`site_guid`),
+ KEY `container_guid` (`container_guid`),
+ KEY `access_id` (`access_id`),
+ KEY `time_created` (`time_created`),
+ KEY `time_updated` (`time_updated`)
+) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_entity_relationships`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_entity_relationships` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `guid_one` bigint(20) unsigned NOT NULL,
+ `relationship` varchar(50) NOT NULL,
+ `guid_two` bigint(20) unsigned NOT NULL,
+ `time_created` int(11) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `guid_one` (`guid_one`,`relationship`,`guid_two`),
+ KEY `relationship` (`relationship`),
+ KEY `guid_two` (`guid_two`)
+) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_entity_subtypes`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_entity_subtypes` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `type` enum('object','user','group','site') NOT NULL,
+ `subtype` varchar(50) NOT NULL,
+ `class` varchar(50) NOT NULL DEFAULT '',
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `type` (`type`,`subtype`)
+) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_geocode_cache`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_geocode_cache` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `location` varchar(128) DEFAULT NULL,
+ `lat` varchar(20) DEFAULT NULL,
+ `long` varchar(20) DEFAULT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `location` (`location`)
+) ENGINE=MEMORY DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_groups_entity`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_groups_entity` (
+ `guid` bigint(20) unsigned NOT NULL,
+ `name` text NOT NULL,
+ `description` text NOT NULL,
+ PRIMARY KEY (`guid`),
+ KEY `name` (`name`(50)),
+ KEY `description` (`description`(50)),
+ FULLTEXT KEY `name_2` (`name`,`description`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_hmac_cache`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_hmac_cache` (
+ `hmac` varchar(255) NOT NULL,
+ `ts` int(11) NOT NULL,
+ PRIMARY KEY (`hmac`),
+ KEY `ts` (`ts`)
+) ENGINE=MEMORY DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_metadata`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_metadata` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `entity_guid` bigint(20) unsigned NOT NULL,
+ `name_id` int(11) NOT NULL,
+ `value_id` int(11) NOT NULL,
+ `value_type` enum('integer','text') NOT NULL,
+ `owner_guid` bigint(20) unsigned NOT NULL,
+ `access_id` int(11) NOT NULL,
+ `time_created` int(11) NOT NULL,
+ `enabled` enum('yes','no') NOT NULL DEFAULT 'yes',
+ PRIMARY KEY (`id`),
+ KEY `entity_guid` (`entity_guid`),
+ KEY `name_id` (`name_id`),
+ KEY `value_id` (`value_id`),
+ KEY `owner_guid` (`owner_guid`),
+ KEY `access_id` (`access_id`)
+) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_metastrings`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_metastrings` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `string` text NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `string` (`string`(50))
+) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_objects_entity`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_objects_entity` (
+ `guid` bigint(20) unsigned NOT NULL,
+ `title` text NOT NULL,
+ `description` text NOT NULL,
+ PRIMARY KEY (`guid`),
+ FULLTEXT KEY `title` (`title`,`description`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_private_settings`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_private_settings` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `entity_guid` int(11) NOT NULL,
+ `name` varchar(128) NOT NULL,
+ `value` text NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `entity_guid` (`entity_guid`,`name`),
+ KEY `name` (`name`),
+ KEY `value` (`value`(50))
+) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_river`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_river` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `type` varchar(8) NOT NULL,
+ `subtype` varchar(32) NOT NULL,
+ `action_type` varchar(32) NOT NULL,
+ `access_id` int(11) NOT NULL,
+ `view` text NOT NULL,
+ `subject_guid` int(11) NOT NULL,
+ `object_guid` int(11) NOT NULL,
+ `annotation_id` int(11) NOT NULL,
+ `posted` int(11) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `type` (`type`),
+ KEY `action_type` (`action_type`),
+ KEY `access_id` (`access_id`),
+ KEY `subject_guid` (`subject_guid`),
+ KEY `object_guid` (`object_guid`),
+ KEY `annotation_id` (`annotation_id`),
+ KEY `posted` (`posted`)
+) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_sites_entity`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_sites_entity` (
+ `guid` bigint(20) unsigned NOT NULL,
+ `name` text NOT NULL,
+ `description` text NOT NULL,
+ `url` varchar(255) NOT NULL,
+ PRIMARY KEY (`guid`),
+ UNIQUE KEY `url` (`url`),
+ FULLTEXT KEY `name` (`name`,`description`,`url`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_system_log`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_system_log` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `object_id` int(11) NOT NULL,
+ `object_class` varchar(50) NOT NULL,
+ `object_type` varchar(50) NOT NULL,
+ `object_subtype` varchar(50) NOT NULL,
+ `event` varchar(50) NOT NULL,
+ `performed_by_guid` int(11) NOT NULL,
+ `owner_guid` int(11) NOT NULL,
+ `access_id` int(11) NOT NULL,
+ `enabled` enum('yes','no') NOT NULL DEFAULT 'yes',
+ `time_created` int(11) NOT NULL,
+ `ip_address` varchar(15) NOT NULL,
+ PRIMARY KEY (`id`),
+ KEY `object_id` (`object_id`),
+ KEY `object_class` (`object_class`),
+ KEY `object_type` (`object_type`),
+ KEY `object_subtype` (`object_subtype`),
+ KEY `event` (`event`),
+ KEY `performed_by_guid` (`performed_by_guid`),
+ KEY `access_id` (`access_id`),
+ KEY `time_created` (`time_created`),
+ KEY `river_key` (`object_type`,`object_subtype`,`event`)
+) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_users_apisessions`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_users_apisessions` (
+ `id` int(11) NOT NULL AUTO_INCREMENT,
+ `user_guid` bigint(20) unsigned NOT NULL,
+ `site_guid` bigint(20) unsigned NOT NULL,
+ `token` varchar(40) DEFAULT NULL,
+ `expires` int(11) NOT NULL,
+ PRIMARY KEY (`id`),
+ UNIQUE KEY `user_guid` (`user_guid`,`site_guid`),
+ KEY `token` (`token`)
+) ENGINE=MEMORY DEFAULT CHARSET=latin1;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_users_entity`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_users_entity` (
+ `guid` bigint(20) unsigned NOT NULL,
+ `name` text NOT NULL,
+ `username` varchar(128) NOT NULL DEFAULT '',
+ `password` varchar(32) NOT NULL DEFAULT '',
+ `salt` varchar(8) NOT NULL DEFAULT '',
+ `email` text NOT NULL,
+ `language` varchar(6) NOT NULL DEFAULT '',
+ `code` varchar(32) NOT NULL DEFAULT '',
+ `banned` enum('yes','no') NOT NULL DEFAULT 'no',
+ `admin` enum('yes','no') NOT NULL DEFAULT 'no',
+ `last_action` int(11) NOT NULL DEFAULT '0',
+ `prev_last_action` int(11) NOT NULL DEFAULT '0',
+ `last_login` int(11) NOT NULL DEFAULT '0',
+ `prev_last_login` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`guid`),
+ UNIQUE KEY `username` (`username`),
+ KEY `password` (`password`),
+ KEY `email` (`email`(50)),
+ KEY `code` (`code`),
+ KEY `last_action` (`last_action`),
+ KEY `last_login` (`last_login`),
+ KEY `admin` (`admin`),
+ FULLTEXT KEY `name` (`name`),
+ FULLTEXT KEY `name_2` (`name`,`username`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `prefix_users_sessions`
+--
+
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!40101 SET character_set_client = utf8 */;
+CREATE TABLE `prefix_users_sessions` (
+ `session` varchar(255) NOT NULL,
+ `ts` int(11) unsigned NOT NULL DEFAULT '0',
+ `data` mediumblob,
+ PRIMARY KEY (`session`),
+ KEY `ts` (`ts`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+/*!40101 SET character_set_client = @saved_cs_client */;
+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
+
+-- Dump completed on 2010-01-29 14:28:11
diff --git a/engine/schema/upgrades/2008092301.sql b/engine/schema/upgrades/2008092301.sql
new file mode 100644
index 000000000..2ae52e0c9
--- /dev/null
+++ b/engine/schema/upgrades/2008092301.sql
@@ -0,0 +1,100 @@
+--- Ensure default character set is UTF8
+
+ALTER TABLE `prefix_config` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_entities` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_entity_subtypes` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_entity_relationships` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_access_collections` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_access_collection_membership` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_objects_entity` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_sites_entity` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_users_entity` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_groups_entity` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_annotations` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_metadata` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_metastrings` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_api_users` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_users_apisessions` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_datalists` DEFAULT CHARACTER SET utf8;
+ALTER TABLE `prefix_system_log` DEFAULT CHARACTER SET utf8;
+
+-- Drop keys to avoid errors (grr)
+
+ALTER TABLE `prefix_entities` DROP KEY `type`;
+ALTER TABLE `prefix_entities` DROP KEY `subtype`;
+ALTER TABLE `prefix_entities` DROP KEY `owner_guid`;
+ALTER TABLE `prefix_entities` DROP KEY `container_guid`;
+ALTER TABLE `prefix_entities` DROP KEY `access_id`;
+ALTER TABLE `prefix_entities` DROP KEY `time_created`;
+ALTER TABLE `prefix_entities` DROP KEY `time_updated`;
+
+ALTER TABLE `prefix_users_entity` DROP KEY `email`;
+ALTER TABLE `prefix_users_entity` DROP KEY `code`;
+
+ALTER TABLE `prefix_annotations` DROP KEY `entity_guid`;
+ALTER TABLE `prefix_annotations` DROP KEY `name_id`;
+ALTER TABLE `prefix_annotations` DROP KEY `value_id`;
+ALTER TABLE `prefix_annotations` DROP KEY `owner_guid`;
+ALTER TABLE `prefix_annotations` DROP KEY `access_id`;
+
+ALTER TABLE `prefix_metadata` DROP KEY `entity_guid`;
+ALTER TABLE `prefix_metadata` DROP KEY `name_id`;
+ALTER TABLE `prefix_metadata` DROP KEY `value_id`;
+ALTER TABLE `prefix_metadata` DROP KEY `owner_guid`;
+ALTER TABLE `prefix_metadata` DROP KEY `access_id`;
+
+ALTER TABLE `prefix_users_apisessions` DROP KEY `token`;
+
+ALTER TABLE `prefix_system_log` DROP KEY `object_id`;
+ALTER TABLE `prefix_system_log` DROP KEY `object_class`;
+ALTER TABLE `prefix_system_log` DROP KEY `event`;
+ALTER TABLE `prefix_system_log` DROP KEY `performed_by_guid`;
+ALTER TABLE `prefix_system_log` DROP KEY `time_created`;
+
+-- New keys
+
+ALTER TABLE `prefix_entities` ADD KEY `type` (`type`);
+ALTER TABLE `prefix_entities` ADD KEY `subtype` (`subtype`);
+ALTER TABLE `prefix_entities` ADD KEY `owner_guid` (`owner_guid`);
+ALTER TABLE `prefix_entities` ADD KEY `container_guid` (`container_guid`);
+ALTER TABLE `prefix_entities` ADD KEY `access_id` (`access_id`);
+ALTER TABLE `prefix_entities` ADD KEY `time_created` (`time_created`);
+ALTER TABLE `prefix_entities` ADD KEY `time_updated` (`time_updated`);
+
+ALTER TABLE `prefix_users_entity` ADD KEY `email` (`email`(50));
+ALTER TABLE `prefix_users_entity` ADD KEY `code` (`code`(50));
+
+ALTER TABLE `prefix_annotations` ADD KEY `entity_guid` (`entity_guid`);
+ALTER TABLE `prefix_annotations` ADD KEY `name_id` (`name_id`);
+ALTER TABLE `prefix_annotations` ADD KEY `value_id` (`value_id`);
+ALTER TABLE `prefix_annotations` ADD KEY `owner_guid` (`owner_guid`);
+ALTER TABLE `prefix_annotations` ADD KEY `access_id` (`access_id`);
+
+ALTER TABLE `prefix_metadata` ADD KEY `entity_guid` (`entity_guid`);
+ALTER TABLE `prefix_metadata` ADD KEY `name_id` (`name_id`);
+ALTER TABLE `prefix_metadata` ADD KEY `value_id` (`value_id`);
+ALTER TABLE `prefix_metadata` ADD KEY `owner_guid` (`owner_guid`);
+ALTER TABLE `prefix_metadata` ADD KEY `access_id` (`access_id`);
+
+ALTER TABLE `prefix_metastrings` DROP KEY `string`;
+ALTER TABLE `prefix_metastrings` ADD KEY `string` (`string`(50));
+
+ALTER TABLE `prefix_users_apisessions` ADD KEY `token` (`token`);
+
+ALTER TABLE `prefix_system_log` ADD KEY `object_id` (`object_id`);
+ALTER TABLE `prefix_system_log` ADD KEY `object_class` (`object_class`);
+ALTER TABLE `prefix_system_log` ADD KEY `event` (`event`);
+ALTER TABLE `prefix_system_log` ADD KEY `performed_by_guid` (`performed_by_guid`);
+ALTER TABLE `prefix_system_log` ADD KEY `time_created` (`time_created`);
+
+DROP TABLE `prefix_privileged_paths`;
+
+-- HMAC Cache protecting against Replay attacks
+
+CREATE TABLE IF NOT EXISTS `prefix_hmac_cache` (
+ `hmac` varchar(255) NOT NULL,
+ `ts` int(11) NOT NULL,
+
+ PRIMARY KEY (`hmac`),
+ KEY `ts` (`ts`)
+) ENGINE=MEMORY; \ No newline at end of file
diff --git a/engine/schema/upgrades/2008100601.sql b/engine/schema/upgrades/2008100601.sql
new file mode 100644
index 000000000..d02dd9f6c
--- /dev/null
+++ b/engine/schema/upgrades/2008100601.sql
@@ -0,0 +1,14 @@
+ALTER TABLE `prefix_system_log` ADD COLUMN `object_type` varchar(50) NOT NULL AFTER `object_class`;
+ALTER TABLE `prefix_system_log` ADD COLUMN `object_subtype` varchar(50) NOT NULL AFTER `object_type`;
+ALTER TABLE `prefix_system_log` MODIFY `object_event` varchar(50) NOT NULL;
+ALTER TABLE `prefix_system_log` MODIFY `object_class` varchar(50) NOT NULL;
+
+
+ALTER TABLE `prefix_system_log` DROP KEY `object_type`;
+ALTER TABLE `prefix_system_log` DROP KEY `object_subtype`;
+ALTER TABLE `prefix_system_log` DROP KEY `river_key`;
+
+ALTER TABLE `prefix_system_log` ADD KEY `object_type` (`object_type`);
+ALTER TABLE `prefix_system_log` ADD KEY `object_subtype` (`object_subtype`);
+
+ALTER TABLE `prefix_system_log` ADD KEY `river_key` (`object_type`, `object_subtype`, `event`); \ No newline at end of file
diff --git a/engine/schema/upgrades/2008101601.sql b/engine/schema/upgrades/2008101601.sql
new file mode 100644
index 000000000..cd10eb024
--- /dev/null
+++ b/engine/schema/upgrades/2008101601.sql
@@ -0,0 +1,11 @@
+ALTER TABLE `prefix_system_log` ADD COLUMN `access_id` int(11) NOT NULL AFTER `performed_by_guid`;
+ALTER TABLE `prefix_system_log` ADD COLUMN `enabled` enum ('yes', 'no') NOT NULL default 'yes' AFTER `access_id`;
+
+ALTER TABLE `prefix_system_log` DROP KEY `access_id`;
+ALTER TABLE `prefix_system_log` ADD KEY `access_id` (`access_id`);
+
+ALTER TABLE `prefix_system_log` DROP KEY `enabled`;
+ALTER TABLE `prefix_system_log` ADD KEY `enabled` (`enabled`);
+
+ALTER TABLE `prefix_system_log` DROP KEY `river_key`;
+ALTER TABLE `prefix_system_log` ADD KEY `river_key` (`object_type`, `object_subtype`, `event`, `access_id`, `enabled`); \ No newline at end of file
diff --git a/engine/schema/upgrades/2008101701.sql b/engine/schema/upgrades/2008101701.sql
new file mode 100644
index 000000000..3e6fc9653
--- /dev/null
+++ b/engine/schema/upgrades/2008101701.sql
@@ -0,0 +1,7 @@
+ALTER TABLE `prefix_system_log` ADD COLUMN `owner_guid` int(11) NOT NULL AFTER `performed_by_guid`;
+
+ALTER TABLE `prefix_system_log` DROP KEY `owner_guid`;
+ALTER TABLE `prefix_system_log` ADD KEY `owner_guid` (`owner_guid`);
+
+ALTER TABLE `prefix_system_log` DROP KEY `river_key`;
+ALTER TABLE `prefix_system_log` ADD KEY `river_key` (`object_type`, `object_subtype`, `event`, `access_id`);
diff --git a/engine/schema/upgrades/2008102101.sql b/engine/schema/upgrades/2008102101.sql
new file mode 100644
index 000000000..544f28d2f
--- /dev/null
+++ b/engine/schema/upgrades/2008102101.sql
@@ -0,0 +1,9 @@
+
+CREATE TABLE IF NOT EXISTS `prefix_users_sessions` (
+ `session` varchar(255) NOT NULL,
+ `ts` int(11) unsigned NOT NULL default '0',
+ `data` mediumblob,
+
+ PRIMARY KEY `session` (`session`),
+ KEY `ts` (`ts`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8; \ No newline at end of file
diff --git a/engine/schema/upgrades/2008110301.sql b/engine/schema/upgrades/2008110301.sql
new file mode 100644
index 000000000..8fd0539d2
--- /dev/null
+++ b/engine/schema/upgrades/2008110301.sql
@@ -0,0 +1,17 @@
+
+-- Based on slow query table feedback
+ALTER TABLE `prefix_entity_relationships` DROP KEY `relationship`;
+ALTER TABLE `prefix_entity_relationships` ADD KEY `relationship` (`relationship`);
+
+ALTER TABLE `prefix_entity_relationships` DROP KEY `guid_two`;
+ALTER TABLE `prefix_entity_relationships` ADD KEY `guid_two` (`guid_two`);
+
+-- The following seemed to have been missed off upgrade
+ALTER TABLE `prefix_users_entity` DROP KEY `code`;
+ALTER TABLE `prefix_users_entity` ADD KEY `code` (`code`);
+
+-- Access collections missing keys
+ALTER TABLE `prefix_access_collections` DROP KEY `site_guid`;
+ALTER TABLE `prefix_access_collections` ADD KEY `site_guid` (`site_guid`);
+ALTER TABLE `prefix_access_collections` DROP KEY `owner_guid`;
+ALTER TABLE `prefix_access_collections` ADD KEY `owner_guid` (`owner_guid`);
diff --git a/engine/schema/upgrades/2008110601.sql b/engine/schema/upgrades/2008110601.sql
new file mode 100644
index 000000000..ddd80a91b
--- /dev/null
+++ b/engine/schema/upgrades/2008110601.sql
@@ -0,0 +1,3 @@
+-- Alter datalists to have a primary key
+ALTER TABLE `prefix_datalists` DROP KEY `name`;
+ALTER TABLE `prefix_datalists` ADD PRIMARY KEY `name` (`name`);
diff --git a/engine/schema/upgrades/2008111901.sql b/engine/schema/upgrades/2008111901.sql
new file mode 100644
index 000000000..617678bb6
--- /dev/null
+++ b/engine/schema/upgrades/2008111901.sql
@@ -0,0 +1,8 @@
+CREATE TABLE IF NOT EXISTS `prefix_private_settings` (
+ `id` INT NOT NULL auto_increment,
+ `entity_guid` INT NOT NULL ,
+ `name` VARCHAR( 128 ) NOT NULL ,
+ `value` TEXT NOT NULL ,
+ PRIMARY KEY ( `id` ) ,
+ UNIQUE KEY ( `entity_guid` , `name` )
+) ENGINE = MYISAM DEFAULT CHARSET=utf8; \ No newline at end of file
diff --git a/engine/schema/upgrades/2008112001.sql b/engine/schema/upgrades/2008112001.sql
new file mode 100644
index 000000000..9159e6c6f
--- /dev/null
+++ b/engine/schema/upgrades/2008112001.sql
@@ -0,0 +1,24 @@
+-- Move plugin settings to private store
+INSERT INTO `prefix_private_settings` (entity_guid, name, `value`)
+ SELECT e.guid as guid, name_string.string as name, value_string.string as `value` FROM `prefix_entities` e
+ JOIN `prefix_metadata` name_val ON e.guid=name_val.entity_guid
+ JOIN `prefix_metastrings` name_string ON name_val.name_id = name_string.id
+ JOIN `prefix_metastrings` value_string ON name_val.value_id = value_string.id
+ WHERE
+ e.type='object' AND
+ e.subtype in (SELECT id from `prefix_entity_subtypes` WHERE subtype='plugin' and type='object');
+
+-- Delete previous settings
+CREATE TEMPORARY TABLE __upgrade_2008112001_1 (
+ SELECT distinct meta.id as id from `prefix_metadata` meta
+ JOIN `prefix_private_settings` settings ON meta.entity_guid = settings.entity_guid
+ JOIN `prefix_entities` e ON e.guid = meta.entity_guid
+ JOIN `prefix_entity_subtypes` subtypes ON subtypes.id = e.subtype
+ WHERE
+ e.type='object' AND
+ subtypes.subtype = 'plugin'
+);
+
+DELETE FROM `prefix_metadata` WHERE id in (SELECT id from __upgrade_2008112001_1);
+
+DROP TABLE __upgrade_2008112001_1; \ No newline at end of file
diff --git a/engine/schema/upgrades/2008112002.sql b/engine/schema/upgrades/2008112002.sql
new file mode 100644
index 000000000..cdd308fe0
--- /dev/null
+++ b/engine/schema/upgrades/2008112002.sql
@@ -0,0 +1,29 @@
+-- Move user plugins settings to new data store
+INSERT INTO `prefix_private_settings` (entity_guid, name, `value`)
+ SELECT e.guid as guid, name_string.string as name, value_string.string as value FROM `prefix_entities` e
+ JOIN `prefix_metadata` name_val ON e.guid=name_val.entity_guid
+ JOIN `prefix_metastrings` name_string ON name_val.name_id = name_string.id
+ JOIN `prefix_metastrings` value_string ON name_val.value_id = value_string.id
+ WHERE
+ e.type='user' AND
+ name_string.string like 'plugin:settings:%';
+
+-- Delete previous settings
+CREATE TEMPORARY TABLE __upgrade_2008112002_1 (
+ SELECT distinct meta.id as id from `prefix_metadata` meta
+ JOIN `prefix_private_settings` settings ON meta.entity_guid = settings.entity_guid
+
+ JOIN `prefix_entities` e ON e.guid = meta.entity_guid
+ JOIN `prefix_metadata` name_val ON e.guid=name_val.entity_guid
+
+ JOIN `prefix_metastrings` name_string ON name_val.name_id = name_string.id
+ JOIN `prefix_metastrings` value_string ON name_val.value_id = value_string.id
+ WHERE
+ e.type='user' AND
+ name_string.string like 'plugin:settings:%' AND
+ meta.name_id = name_string.id
+);
+
+DELETE FROM `prefix_metadata` WHERE id in (SELECT id from __upgrade_2008112002_1);
+
+DROP TABLE __upgrade_2008112002_1; \ No newline at end of file
diff --git a/engine/schema/upgrades/2008112501.sql b/engine/schema/upgrades/2008112501.sql
new file mode 100644
index 000000000..41e41f93e
--- /dev/null
+++ b/engine/schema/upgrades/2008112501.sql
@@ -0,0 +1,10 @@
+CREATE TABLE IF NOT EXISTS `prefix_geocode_cache` (
+ id int(11) auto_increment,
+ location varchar(128),
+ `lat` varchar(20),
+ `long` varchar(20),
+
+ PRIMARY KEY (`id`),
+ KEY `location` (`location`)
+
+) ENGINE=MEMORY; \ No newline at end of file
diff --git a/engine/schema/upgrades/2008112601.sql b/engine/schema/upgrades/2008112601.sql
new file mode 100644
index 000000000..9ca9657de
--- /dev/null
+++ b/engine/schema/upgrades/2008112601.sql
@@ -0,0 +1,27 @@
+-- We now are using a extended class to handle this
+UPDATE `prefix_entity_subtypes` SET class='ElggPlugin' where type='object' and subtype='widget';
+
+-- Move widget settings to private store
+INSERT INTO `prefix_private_settings` (entity_guid, name, `value`)
+ SELECT e.guid as guid, name_string.string as name, value_string.string as `value` FROM `prefix_entities` e
+ JOIN `prefix_metadata` name_val ON e.guid=name_val.entity_guid
+ JOIN `prefix_metastrings` name_string ON name_val.name_id = name_string.id
+ JOIN `prefix_metastrings` value_string ON name_val.value_id = value_string.id
+ WHERE
+ e.type='object' AND
+ e.subtype in (SELECT id from `prefix_entity_subtypes` WHERE subtype='widget' and type='object');
+
+-- Delete previous settings
+CREATE TEMPORARY TABLE __upgrade_2008112601 (
+ SELECT distinct meta.id as id from `prefix_metadata` meta
+ JOIN `prefix_private_settings` settings ON meta.entity_guid = settings.entity_guid
+ JOIN `prefix_entities` e ON e.guid = meta.entity_guid
+ JOIN `prefix_entity_subtypes` subtypes ON subtypes.id = e.subtype
+ WHERE
+ e.type='object' AND
+ subtypes.subtype = 'widget'
+);
+
+DELETE FROM `prefix_metadata` WHERE id in (SELECT id from __upgrade_2008112601);
+
+DROP TABLE __upgrade_2008112001; \ No newline at end of file
diff --git a/engine/schema/upgrades/2008120501.sql b/engine/schema/upgrades/2008120501.sql
new file mode 100644
index 000000000..dd44b96b0
--- /dev/null
+++ b/engine/schema/upgrades/2008120501.sql
@@ -0,0 +1,9 @@
+-- Modify field length in private settings (for people who upgraded while #611 present)
+ALTER TABLE `prefix_private_settings` MODIFY `name` varchar(128) NOT NULL;
+
+-- While we're at it, add some more keys
+ALTER TABLE `prefix_private_settings` DROP KEY `name`;
+ALTER TABLE `prefix_private_settings` ADD KEY `name` (`name`);
+
+ALTER TABLE `prefix_private_settings` DROP KEY `value`;
+ALTER TABLE `prefix_private_settings` ADD KEY `value` (`value` (50)); \ No newline at end of file
diff --git a/engine/schema/upgrades/2009010801.sql b/engine/schema/upgrades/2009010801.sql
new file mode 100644
index 000000000..1e7c020e8
--- /dev/null
+++ b/engine/schema/upgrades/2009010801.sql
@@ -0,0 +1,5 @@
+ALTER TABLE `prefix_users_entity` DROP KEY `last_action`;
+ALTER TABLE `prefix_users_entity` ADD KEY `last_action` (`last_action`);
+
+ALTER TABLE `prefix_users_entity` DROP KEY `last_login`;
+ALTER TABLE `prefix_users_entity` ADD KEY `last_login` (`last_login`); \ No newline at end of file
diff --git a/engine/schema/upgrades/2009010901.sql b/engine/schema/upgrades/2009010901.sql
new file mode 100644
index 000000000..29eb68f29
--- /dev/null
+++ b/engine/schema/upgrades/2009010901.sql
@@ -0,0 +1,3 @@
+-- Add banned column refs #668
+ALTER TABLE `prefix_users_entity` ADD COLUMN `banned` enum ('yes', 'no') NOT NULL default 'no' AFTER `code`;
+
diff --git a/engine/schema/upgrades/2009021201.sql b/engine/schema/upgrades/2009021201.sql
new file mode 100644
index 000000000..e3edf66ba
--- /dev/null
+++ b/engine/schema/upgrades/2009021201.sql
@@ -0,0 +1,19 @@
+-- River
+ CREATE TABLE IF NOT EXISTS `prefix_river` (
+ `id` INT NOT NULL AUTO_INCREMENT ,
+ `type` VARCHAR( 8 ) NOT NULL ,
+ `subtype` VARCHAR( 32 ) NOT NULL ,
+ `action_type` VARCHAR( 32 ) NOT NULL ,
+ `access_id` INT NOT NULL ,
+ `view` TEXT NOT NULL ,
+ `subject_guid` INT NOT NULL ,
+ `object_guid` INT NOT NULL ,
+ `posted` INT NOT NULL ,
+ PRIMARY KEY ( `id` ) ,
+ KEY `type` (`type`),
+ KEY `action_type` (`action_type`),
+ KEY `access_id` (`access_id`),
+ KEY `subject_guid` (`subject_guid`),
+ KEY `object_guid` (`object_guid`),
+ KEY `posted` (`posted`)
+) ENGINE = MYISAM DEFAULT CHARSET=utf8; \ No newline at end of file
diff --git a/engine/schema/upgrades/2009021301.sql b/engine/schema/upgrades/2009021301.sql
new file mode 100644
index 000000000..efec52b93
--- /dev/null
+++ b/engine/schema/upgrades/2009021301.sql
@@ -0,0 +1,2 @@
+-- Changing the ACLs on existing groups
+UPDATE `prefix_entities` SET access_id=2 WHERE type='group'; \ No newline at end of file
diff --git a/engine/schema/upgrades/2009051401.sql b/engine/schema/upgrades/2009051401.sql
new file mode 100644
index 000000000..57348968e
--- /dev/null
+++ b/engine/schema/upgrades/2009051401.sql
@@ -0,0 +1,5 @@
+-- Fix error in geocode cache table
+DELETE FROM `prefix_geocode_cache`;
+
+ALTER TABLE `prefix_geocode_cache` DROP KEY `location`;
+ALTER TABLE `prefix_geocode_cache` ADD UNIQUE KEY `location` (`location`);
diff --git a/engine/schema/upgrades/2009052201.sql b/engine/schema/upgrades/2009052201.sql
new file mode 100644
index 000000000..b825f9936
--- /dev/null
+++ b/engine/schema/upgrades/2009052201.sql
@@ -0,0 +1,5 @@
+ALTER TABLE `prefix_groups_entity` DROP KEY `name`;
+ALTER TABLE `prefix_groups_entity` ADD KEY `name` (`name`(50));
+
+ALTER TABLE `prefix_groups_entity` DROP KEY `description`;
+ALTER TABLE `prefix_groups_entity` ADD KEY `description` (`description`(50));
diff --git a/engine/schema/upgrades/2009091901.sql b/engine/schema/upgrades/2009091901.sql
new file mode 100644
index 000000000..074d042c3
--- /dev/null
+++ b/engine/schema/upgrades/2009091901.sql
@@ -0,0 +1,3 @@
+-- add an additional column to the river table
+ALTER TABLE `prefix_river` ADD COLUMN `annotation_id` int(11) NOT NULL AFTER `object_guid`;
+ALTER TABLE `prefix_river` ADD KEY `annotation_id` (`annotation_id`); \ No newline at end of file
diff --git a/engine/schema/upgrades/2009100701.sql b/engine/schema/upgrades/2009100701.sql
new file mode 100644
index 000000000..74249e901
--- /dev/null
+++ b/engine/schema/upgrades/2009100701.sql
@@ -0,0 +1,2 @@
+-- Previously was the UTF8 migration that is now in code at engine/lib/upgrades/2010033101.php
+-- Keeping this file to force an overwrite and to avoid confusion with missing migrations.
diff --git a/engine/schema/upgrades/2010012901.sql b/engine/schema/upgrades/2010012901.sql
new file mode 100644
index 000000000..fe5cb6849
--- /dev/null
+++ b/engine/schema/upgrades/2010012901.sql
@@ -0,0 +1 @@
+ALTER TABLE `prefix_entities` ADD `last_action` INT( 11 ) NOT NULL AFTER `time_updated`
diff --git a/engine/schema/upgrades/2010030101.sql b/engine/schema/upgrades/2010030101.sql
new file mode 100644
index 000000000..cc7af98c9
--- /dev/null
+++ b/engine/schema/upgrades/2010030101.sql
@@ -0,0 +1 @@
+ALTER TABLE `prefix_entities` CHANGE `last_action` `last_action` INT( 11 ) NOT NULL DEFAULT '0'
diff --git a/engine/schema/upgrades/2010062401.sql b/engine/schema/upgrades/2010062401.sql
new file mode 100644
index 000000000..fbb49bfcf
--- /dev/null
+++ b/engine/schema/upgrades/2010062401.sql
@@ -0,0 +1 @@
+ALTER TABLE `prefix_entity_relationships` ADD COLUMN `time_created` int(11) NOT NULL AFTER `guid_two`; \ No newline at end of file
diff --git a/engine/settings.example.php b/engine/settings.example.php
new file mode 100644
index 000000000..3b139d710
--- /dev/null
+++ b/engine/settings.example.php
@@ -0,0 +1,123 @@
+<?php
+/**
+ * Defines database credentials.
+ *
+ * Most of Elgg's configuration is stored in the database. This file contains the
+ * credentials to connect to the database, as well as a few optional configuration
+ * values.
+ *
+ * The Elgg installation attempts to populate this file with the correct settings
+ * and then rename it to settings.php.
+ *
+ * @todo Turn this into something we handle more automatically.
+ * @package Elgg.Core
+ * @subpackage Configuration
+ */
+
+global $CONFIG;
+if (!isset($CONFIG)) {
+ $CONFIG = new stdClass;
+}
+
+/*
+ * Standard configuration
+ *
+ * You will use the same database connection for reads and writes.
+ * This is the easiest configuration, and will suit 99.99% of setups. However, if you're
+ * running a really popular site, you'll probably want to spread out your database connections
+ * and implement database replication. That's beyond the scope of this configuration file
+ * to explain, but if you know you need it, skip past this section.
+ */
+
+/**
+ * The database username
+ *
+ * @global string $CONFIG->dbuser
+ * @name $CONFIG->dbuser
+ */
+$CONFIG->dbuser = '{{dbuser}}';
+
+/**
+ * The database password
+ *
+ * @global string $CONFIG->dbpass
+ */
+$CONFIG->dbpass = '{{dbpassword}}';
+
+/**
+ * The database name
+ *
+ * @global string $CONFIG->dbname
+ */
+$CONFIG->dbname = '{{dbname}}';
+
+/**
+ * The database host.
+ *
+ * For most installations, this is 'localhost'
+ *
+ * @global string $CONFIG->dbhost
+ */
+$CONFIG->dbhost = '{{dbhost}}';
+
+/**
+ * The database prefix
+ *
+ * This prefix will be appended to all Elgg tables. If you're sharing
+ * a database with other applications, use a database prefix to namespace tables
+ * in order to avoid table name collisions.
+ *
+ * @global string $CONFIG->dbprefix
+ */
+$CONFIG->dbprefix = '{{dbprefix}}';
+
+
+/**
+ * Memcache setup (optional)
+ * This is where you may optionally set up memcache.
+ *
+ * Requirements:
+ * 1) One or more memcache servers (http://www.danga.com/memcached/)
+ * 2) PHP memcache wrapper (http://uk.php.net/manual/en/memcache.setup.php)
+ *
+ * Note: Multiple server support is only available on server 1.2.1
+ * or higher with PECL library > 2.0.0
+ */
+//$CONFIG->memcache = true;
+//
+//$CONFIG->memcache_servers = array (
+// array('server1', 11211),
+// array('server2', 11211)
+//);
+
+
+/**
+ * Use non-standard headers for broken MTAs.
+ *
+ * The default header EOL for headers is \r\n. This causes problems
+ * on some broken MTAs. Setting this to TRUE will cause Elgg to use
+ * \n, which will fix some problems sending email on broken MTAs.
+ *
+ * @global bool $CONFIG->broken_mta
+ */
+$CONFIG->broken_mta = FALSE;
+
+/**
+ * Disable the database query cache
+ *
+ * Elgg stores each query and its results in a query cache.
+ * On large sites or long-running scripts, this cache can grow to be
+ * large. To disable query caching, set this to TRUE.
+ *
+ * @global bool $CONFIG->db_disable_query_cache
+ */
+$CONFIG->db_disable_query_cache = FALSE;
+
+/**
+ * Minimum password length
+ *
+ * This value is used when validating a user's password during registration.
+ *
+ * @global int $CONFIG->min_password_length
+ */
+$CONFIG->min_password_length = 6;
diff --git a/engine/start.php b/engine/start.php
new file mode 100644
index 000000000..55b8ffa5b
--- /dev/null
+++ b/engine/start.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Bootstraps the Elgg engine.
+ *
+ * This file loads the full Elgg engine, checks the installation
+ * state, and triggers a series of events to finish booting Elgg:
+ * - {@elgg_event boot system}
+ * - {@elgg_event init system}
+ * - {@elgg_event ready system}
+ *
+ * If Elgg is fully uninstalled, the browser will be redirected to an
+ * installation page.
+ *
+ * @see install.php
+ * @package Elgg.Core
+ * @subpackage Core
+ */
+
+/*
+ * No settings means a fresh install
+ */
+if (!file_exists(dirname(__FILE__) . '/settings.php')) {
+ header("Location: install.php");
+ exit;
+}
+
+/**
+ * The time with microseconds when the Elgg engine was started.
+ *
+ * @global float
+ */
+global $START_MICROTIME;
+$START_MICROTIME = microtime(true);
+
+/**
+ * Configuration values.
+ *
+ * The $CONFIG global contains configuration values required
+ * for running Elgg as defined in the settings.php file.
+ *
+ * Plugin authors are encouraged to use elgg_get_config() instead of accessing
+ * the global directly.
+ *
+ * @see elgg_get_config()
+ * @see engine/settings.php
+ * @global stdClass $CONFIG
+ */
+global $CONFIG;
+if (!isset($CONFIG)) {
+ $CONFIG = new stdClass;
+}
+$CONFIG->boot_complete = false;
+
+$lib_dir = dirname(__FILE__) . '/lib/';
+
+// Load the bootstrapping library
+$path = $lib_dir . 'elgglib.php';
+if (!include_once($path)) {
+ echo "Could not load file '$path'. Please check your Elgg installation for all required files.";
+ exit;
+}
+
+// Load the system settings
+if (!include_once(dirname(__FILE__) . "/settings.php")) {
+ $msg = 'Elgg could not load the settings file. It does not exist or there is a file permissions issue.';
+ throw new InstallationException($msg);
+}
+
+
+// load the rest of the library files from engine/lib/
+$lib_files = array(
+ 'access.php', 'actions.php', 'admin.php', 'annotations.php', 'cache.php',
+ 'calendar.php', 'configuration.php', 'cron.php', 'database.php',
+ 'entities.php', 'export.php', 'extender.php', 'filestore.php', 'group.php',
+ 'input.php', 'languages.php', 'location.php', 'mb_wrapper.php',
+ 'memcache.php', 'metadata.php', 'metastrings.php', 'navigation.php',
+ 'notification.php', 'objects.php', 'opendd.php', 'output.php',
+ 'pagehandler.php', 'pageowner.php', 'pam.php', 'plugins.php',
+ 'private_settings.php', 'relationships.php', 'river.php', 'sessions.php',
+ 'sites.php', 'statistics.php', 'system_log.php', 'tags.php',
+ 'user_settings.php', 'users.php', 'upgrade.php', 'views.php',
+ 'web_services.php', 'widgets.php', 'xml.php', 'xml-rpc.php',
+
+ // backward compatibility
+ 'deprecated-1.7.php', 'deprecated-1.8.php',
+);
+
+foreach ($lib_files as $file) {
+ $file = $lib_dir . $file;
+ elgg_log("Loading $file...");
+ if (!include_once($file)) {
+ $msg = "Could not load $file";
+ throw new InstallationException($msg);
+ }
+}
+
+// Connect to database, load language files, load configuration, init session
+// Plugins can't use this event because they haven't been loaded yet.
+elgg_trigger_event('boot', 'system');
+
+// Load the plugins that are active
+elgg_load_plugins();
+
+// @todo move loading plugins into a single boot function that replaces 'boot', 'system' event
+// and then move this code in there.
+// This validates the view type - first opportunity to do it is after plugins load.
+$view_type = elgg_get_viewtype();
+if (!elgg_is_valid_view_type($view_type)) {
+ elgg_set_viewtype('default');
+}
+
+// @todo deprecate as plugins can use 'init', 'system' event
+elgg_trigger_event('plugins_boot', 'system');
+
+// Complete the boot process for both engine and plugins
+elgg_trigger_event('init', 'system');
+
+$CONFIG->boot_complete = true;
+
+// System loaded and ready
+elgg_trigger_event('ready', 'system');
diff --git a/engine/tests/api/access_collections.php b/engine/tests/api/access_collections.php
new file mode 100644
index 000000000..ebcd7d318
--- /dev/null
+++ b/engine/tests/api/access_collections.php
@@ -0,0 +1,293 @@
+<?php
+/**
+ * Access Collections tests
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreAccessCollectionsTest extends ElggCoreUnitTest {
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ parent::__construct();
+
+ $this->dbPrefix = get_config("dbprefix");
+
+ $user = new ElggUser();
+ $user->username = 'test_user_' . rand();
+ $user->email = 'fake_email@fake.com' . rand();
+ $user->name = 'fake user';
+ $user->access_id = ACCESS_PUBLIC;
+ $user->salt = generate_random_cleartext_password();
+ $user->password = generate_user_password($user, rand());
+ $user->owner_guid = 0;
+ $user->container_guid = 0;
+ $user->save();
+
+ $this->user = $user;
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ // all __destruct() code should go above here
+ $this->user->delete();
+ parent::__destruct();
+ }
+
+ public function testCreateGetDeleteACL() {
+ global $DB_QUERY_CACHE;
+
+ $acl_name = 'test access collection';
+ $acl_id = create_access_collection($acl_name);
+
+ $this->assertTrue(is_int($acl_id));
+
+ $q = "SELECT * FROM {$this->dbPrefix}access_collections WHERE id = $acl_id";
+ $acl = get_data_row($q);
+
+ $this->assertEqual($acl->id, $acl_id);
+
+ if ($acl) {
+ $DB_QUERY_CACHE = array();
+
+ $this->assertEqual($acl->name, $acl_name);
+
+ $result = delete_access_collection($acl_id);
+ $this->assertTrue($result);
+
+ $q = "SELECT * FROM {$this->dbPrefix}access_collections WHERE id = $acl_id";
+ $data = get_data($q);
+ $this->assertIdentical(array(), $data);
+ }
+ }
+
+ public function testAddRemoveUserToACL() {
+ $acl_id = create_access_collection('test acl');
+
+ $result = add_user_to_access_collection($this->user->guid, $acl_id);
+ $this->assertTrue($result);
+
+ if ($result) {
+ $result = remove_user_from_access_collection($this->user->guid, $acl_id);
+ $this->assertIdentical(true, $result);
+ }
+
+ delete_access_collection($acl_id);
+ }
+
+ public function testUpdateACL() {
+ // another fake user to test with
+ $user = new ElggUser();
+ $user->username = 'test_user_' . rand();
+ $user->email = 'fake_email@fake.com' . rand();
+ $user->name = 'fake user';
+ $user->access_id = ACCESS_PUBLIC;
+ $user->salt = generate_random_cleartext_password();
+ $user->password = generate_user_password($user, rand());
+ $user->owner_guid = 0;
+ $user->container_guid = 0;
+ $user->save();
+
+ $acl_id = create_access_collection('test acl');
+
+ $member_lists = array(
+ // adding
+ array(
+ $this->user->guid,
+ $user->guid
+ ),
+ // removing one, keeping one.
+ array(
+ $user->guid
+ ),
+ // removing one, adding one
+ array(
+ $this->user->guid,
+ ),
+ // removing all.
+ array()
+ );
+
+ foreach ($member_lists as $members) {
+ $result = update_access_collection($acl_id, $members);
+ $this->assertTrue($result);
+
+ if ($result) {
+ $q = "SELECT * FROM {$this->dbPrefix}access_collection_membership
+ WHERE access_collection_id = $acl_id";
+ $data = get_data($q);
+
+ if (count($members) == 0) {
+ $this->assertFalse($data);
+ } else {
+ $this->assertEqual(count($members), count($data));
+ }
+ foreach ($data as $row) {
+ $this->assertTrue(in_array($row->user_guid, $members));
+ }
+ }
+ }
+
+ delete_access_collection($acl_id);
+ $user->delete();
+ }
+
+ public function testCanEditACL() {
+ $acl_id = create_access_collection('test acl', $this->user->guid);
+
+ // should be true since it's the owner
+ $result = can_edit_access_collection($acl_id, $this->user->guid);
+ $this->assertTrue($result);
+
+ // should be true since IA is on.
+ $ia = elgg_set_ignore_access(true);
+ $result = can_edit_access_collection($acl_id);
+ $this->assertTrue($result);
+ elgg_set_ignore_access($ia);
+
+ // should be false since IA is off
+ $ia = elgg_set_ignore_access(false);
+ $result = can_edit_access_collection($acl_id);
+ $this->assertFalse($result);
+ elgg_set_ignore_access($ia);
+
+ delete_access_collection($acl_id);
+ }
+
+ public function testCanEditACLHook() {
+ // if only we supported closures!
+ global $acl_test_info;
+
+ $acl_id = create_access_collection('test acl');
+
+ $acl_test_info = array(
+ 'acl_id' => $acl_id,
+ 'user' => $this->user
+ );
+
+ function test_acl_access_hook($hook, $type, $value, $params) {
+ global $acl_test_info;
+ if ($params['user_id'] == $acl_test_info['user']->guid) {
+ $acl = get_access_collection($acl_test_info['acl_id']);
+ $value[$acl->id] = $acl->name;
+ }
+
+ return $value;
+ }
+
+ elgg_register_plugin_hook_handler('access:collections:write', 'all', 'test_acl_access_hook');
+
+ // enable security since we usually run as admin
+ $ia = elgg_set_ignore_access(false);
+ $result = can_edit_access_collection($acl_id, $this->user->guid);
+ $this->assertTrue($result);
+ $ia = elgg_set_ignore_access($ia);
+
+ elgg_unregister_plugin_hook_handler('access:collections:write', 'all', 'test_acl_access_hook');
+
+ delete_access_collection($acl_id);
+ }
+
+ // groups interface
+ // only runs if the groups plugin is enabled because implementation is split between
+ // core and the plugin.
+ public function testCreateDeleteGroupACL() {
+ if (!elgg_is_active_plugin('groups')) {
+ return;
+ }
+
+ $group = new ElggGroup();
+ $group->name = 'Test group';
+ $group->save();
+ $acl = get_access_collection($group->group_acl);
+
+ // ACLs are owned by groups
+ $this->assertEqual($acl->owner_guid, $group->guid);
+
+ // removing group and acl
+ $this->assertTrue($group->delete());
+
+ $acl = get_access_collection($group->group_acl);
+ $this->assertFalse($acl);
+
+ $group->delete();
+ }
+
+ public function testJoinLeaveGroupACL() {
+ if (!elgg_is_active_plugin('groups')) {
+ return;
+ }
+
+ $group = new ElggGroup();
+ $group->name = 'Test group';
+ $group->save();
+
+ $result = $group->join($this->user);
+ $this->assertTrue($result);
+
+ // disable security since we run as admin
+ $ia = elgg_set_ignore_access(false);
+
+ // need to set the page owner to emulate being in a group context.
+ // this is kinda hacky.
+ elgg_set_page_owner_guid($group->getGUID());
+
+ if ($result) {
+ $can_edit = can_edit_access_collection($group->group_acl, $this->user->guid);
+ $this->assertTrue($can_edit);
+ }
+
+ $result = $group->leave($this->user);
+ $this->assertTrue($result);
+
+ if ($result) {
+ $can_edit = can_edit_access_collection($group->group_acl, $this->user->guid);
+ $this->assertFalse($can_edit);
+ }
+
+ elgg_set_ignore_access($ia);
+
+ $group->delete();
+ }
+
+ public function testAccessCaching() {
+ // create a new user to check against
+ $user = new ElggUser();
+ $user->username = 'access_test_user';
+ $user->save();
+
+ foreach (array('get_access_list', 'get_access_array') as $func) {
+ $cache = _elgg_get_access_cache();
+ $cache->clear();
+
+ // admin users run tests, so disable access
+ elgg_set_ignore_access(true);
+ $access = $func($user->getGUID());
+
+ elgg_set_ignore_access(false);
+ $access2 = $func($user->getGUID());
+ $this->assertNotEqual($access, $access2, "Access test for $func");
+ }
+
+ $user->delete();
+ }
+}
diff --git a/engine/tests/api/annotations.php b/engine/tests/api/annotations.php
new file mode 100644
index 000000000..947292970
--- /dev/null
+++ b/engine/tests/api/annotations.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Elgg Test annotation api
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreAnnotationAPITest extends ElggCoreUnitTest {
+ protected $metastrings;
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+ $this->object = new ElggObject();
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+
+ unset($this->object);
+ }
+
+ public function testElggGetAnnotationsCount() {
+ $this->object->title = 'Annotation Unit Test';
+ $this->object->save();
+
+ $guid = $this->object->getGUID();
+ create_annotation($guid, 'tested', 'tested1', 'text', 0, ACCESS_PUBLIC);
+ create_annotation($guid, 'tested', 'tested2', 'text', 0, ACCESS_PUBLIC);
+
+ $count = (int)elgg_get_annotations(array(
+ 'annotation_names' => array('tested'),
+ 'guid' => $guid,
+ 'count' => true,
+ ));
+
+ $this->assertIdentical($count, 2);
+
+ $this->object->delete();
+ }
+
+ public function testElggDeleteAnnotations() {
+ $e = new ElggObject();
+ $e->save();
+
+ for ($i=0; $i<30; $i++) {
+ $e->annotate('test_annotation', rand(0,10000));
+ }
+
+ $options = array(
+ 'guid' => $e->getGUID(),
+ 'limit' => 0
+ );
+
+ $annotations = elgg_get_annotations($options);
+ $this->assertIdentical(30, count($annotations));
+
+ $this->assertTrue(elgg_delete_annotations($options));
+
+ $annotations = elgg_get_annotations($options);
+ $this->assertTrue(empty($annotations));
+
+ $this->assertTrue($e->delete());
+ }
+}
diff --git a/engine/tests/api/entity_getter_functions.php b/engine/tests/api/entity_getter_functions.php
new file mode 100644
index 000000000..9db248de9
--- /dev/null
+++ b/engine/tests/api/entity_getter_functions.php
@@ -0,0 +1,2820 @@
+<?php
+
+/**
+ * Elgg Test Entity Getter Functions
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreEntityGetterFunctionsTest extends ElggCoreUnitTest {
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ elgg_set_ignore_access(TRUE);
+ $this->entities = array();
+ $this->subtypes = array(
+ 'object' => array(),
+ 'user' => array(),
+ 'group' => array(),
+ //'site' => array()
+ );
+
+ // sites are a bit wonky. Don't use them just now.
+ $this->types = array('object', 'user', 'group');
+
+ // create some fun objects to play with.
+ // 5 with random subtypes
+ for ($i=0; $i<5; $i++) {
+ $subtype = 'test_object_subtype_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->save();
+
+ $this->entities[] = $e;
+ $this->subtypes['object'][] = $subtype;
+ }
+
+ // and users
+ for ($i=0; $i<5; $i++) {
+ $subtype = "test_user_subtype_" . rand();
+ $e = new ElggUser();
+ $e->username = "test_user_" . rand();
+ $e->subtype = $subtype;
+ $e->save();
+
+ $this->entities[] = $e;
+ $this->subtypes['user'][] = $subtype;
+ }
+
+ // and groups
+ for ($i=0; $i<5; $i++) {
+ $subtype = "test_group_subtype_" . rand();
+ $e = new ElggGroup();
+ $e->subtype = $subtype;
+ $e->save();
+
+ $this->entities[] = $e;
+ $this->subtypes['group'][] = $subtype;
+ }
+
+ parent::__construct();
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function setUp() {
+ return TRUE;
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ return TRUE;
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ global $CONFIG;
+
+ $this->swallowErrors();
+ foreach ($this->entities as $e) {
+ $e->delete();
+ }
+
+ // manually remove subtype entries since there is no way
+ // to using the API.
+ $subtype_arr = array();
+ foreach ($this->subtypes as $type => $subtypes) {
+ foreach ($subtypes as $subtype) {
+ $subtype_arr[] = "'$subtype'";
+ }
+ }
+
+ $subtype_str = implode(',', $subtype_arr);
+ $q = "DELETE FROM {$CONFIG->dbprefix}entity_subtypes WHERE subtype IN ($subtype_str)";
+ delete_data($q);
+
+ parent::__destruct();
+ }
+
+
+ /*************************************************
+ * Helpers for getting random types and subtypes *
+ *************************************************/
+
+ /**
+ * Get a random valid subtype
+ *
+ * @param int $num
+ * @return array
+ */
+ public function getRandomValidTypes($num = 1) {
+ $r = array();
+
+ for ($i=1; $i<=$num; $i++) {
+ do {
+ $t = $this->types[array_rand($this->types)];
+ } while (in_array($t, $r) && count($r) < count($this->types));
+
+ $r[] = $t;
+ }
+
+ shuffle($r);
+ return $r;
+ }
+
+ /**
+ * Get a random valid subtype (that we just created)
+ *
+ * @param array $type Type of objects to return valid subtypes for.
+ * @param int $num of subtypes.
+ *
+ * @return array
+ */
+ public function getRandomValidSubtypes(array $types, $num = 1) {
+ $r = array();
+
+ for ($i=1; $i<=$num; $i++) {
+ do {
+ // make sure at least one subtype of each type is returned.
+ if ($i-1 < count($types)) {
+ $type = $types[$i-1];
+ } else {
+ $type = $types[array_rand($types)];
+ }
+
+ $k = array_rand($this->subtypes[$type]);
+ $t = $this->subtypes[$type][$k];
+ } while (in_array($t, $r));
+
+ $r[] = $t;
+ }
+
+ shuffle($r);
+ return $r;
+ }
+
+ /**
+ * Return an array of invalid strings for type or subtypes.
+ *
+ * @param int $num
+ * @return arr
+ */
+ public function getRandomInvalids($num = 1) {
+ $r = array();
+
+ for ($i=1; $i<=$num; $i++) {
+ $r[] = 'random_invalid_' . rand();
+ }
+
+ return $r;
+ }
+
+ /**
+ * Get a mix of valid and invalid types
+ *
+ * @param int $num
+ * @return array
+ */
+ public function getRandomMixedTypes($num = 2) {
+ $have_valid = $have_invalid = false;
+ $r = array();
+
+ // need at least one of each type.
+ $valid_n = rand(1, $num-1);
+ $r = array_merge($r, $this->getRandomValidTypes($valid_n));
+ $r = array_merge($r, $this->getRandomInvalids($num - $valid_n));
+
+ shuffle($r);
+ return $r;
+ }
+
+ /**
+ * Get random mix of valid and invalid subtypes for types given.
+ *
+ * @param array $types
+ * @param int $num
+ * @return array
+ */
+ public function getRandomMixedSubtypes(array $types, $num = 2) {
+ $types_c = count($types);
+ $r = array();
+
+ // this can be more efficient but I'm very sleepy...
+
+ // want at least one of valid and invalid of each type sent.
+ for ($i=0; $i < $types_c && $num > 0; $i++) {
+ // make sure we have a valid and invalid for each type
+ if (true) {
+ $type = $types[$i];
+ $r = array_merge($r, $this->getRandomValidSubtypes(array($type), 1));
+ $r = array_merge($r, $this->getRandomInvalids(1));
+
+ $num -= 2;
+ }
+ }
+
+ if ($num > 0) {
+ $valid_n = rand(1, $num);
+ $r = array_merge($r, $this->getRandomValidSubtypes($types, $valid_n));
+ $r = array_merge($r, $this->getRandomInvalids($num - $valid_n));
+ }
+
+ //shuffle($r);
+ return $r;
+ }
+
+ /**
+ * Creates random annotations on $entity
+ *
+ * @param ElggEntity $entity
+ * @param int $max
+ */
+ public function createRandomAnnotations($entity, $max = 1) {
+ $annotations = array();
+ for ($i=0; $i<$max; $i++) {
+ $name = 'test_annotation_name_' . rand();
+ $value = rand();
+ $id = create_annotation($entity->getGUID(), $name, $value, 'integer', $entity->getGUID());
+ $annotations[] = elgg_get_annotation_from_id($id);
+ }
+
+ return $annotations;
+ }
+
+
+ /***********************************
+ * TYPE TESTS
+ ***********************************
+ * check for getting a valid type in all ways we can.
+ * note that these aren't wonderful tests as there will be
+ * existing entities so we can't test against the ones we just created.
+ * So these just test that some are returned and match the type(s) requested.
+ * It could definitely be the case that the first 10 entities retrieved are all
+ * objects. Maybe best to limit to 4 and group by type.
+ */
+ public function testElggAPIGettersValidTypeUsingType() {
+ $type_arr = $this->getRandomValidTypes();
+ $type = $type_arr[0];
+ $options = array(
+ 'type' => $type,
+ 'group_by' => 'e.type'
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ // should only ever return one object because of group by
+ $this->assertIdentical(count($es), 1);
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $type_arr));
+ }
+ }
+
+ public function testElggAPIGettersValidTypeUsingTypesAsString() {
+ $type_arr = $this->getRandomValidTypes();
+ $type = $type_arr[0];
+ $options = array(
+ 'types' => $type,
+ 'group_by' => 'e.type'
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ // should only ever return one object because of group by
+ $this->assertIdentical(count($es), 1);
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $type_arr));
+ }
+ }
+
+ public function testElggAPIGettersValidTypeUsingTypesAsArray() {
+ $type_arr = $this->getRandomValidTypes();
+ $type = $type_arr[0];
+ $options = array(
+ 'types' => $type_arr,
+ 'group_by' => 'e.type'
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ // should only ever return one object because of group by
+ $this->assertIdentical(count($es), 1);
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $type_arr));
+ }
+ }
+
+ public function testElggAPIGettersValidTypeUsingTypesAsArrayPlural() {
+ $num = 2;
+ $types = $this->getRandomValidTypes($num);
+ $options = array(
+ 'types' => $types,
+ 'group_by' => 'e.type'
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ // one of object and one of group
+ $this->assertIdentical(count($es), $num);
+
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $types));
+ }
+ }
+
+
+
+ /*
+ * Test mixed valid and invalid types.
+ */
+
+
+ public function testElggAPIGettersValidAndInvalidTypes() {
+ //@todo replace this with $this->getRandomMixedTypes().
+ $t = $this->getRandomValidTypes();
+ $valid = $t[0];
+
+ $t = $this->getRandomInvalids();
+ $invalid = $t[0];
+ $options = array(
+ 'types' => array($invalid, $valid),
+ 'group_by' => 'e.type'
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ // should only ever return one object because of group by
+ $this->assertIdentical(count($es), 1);
+ $this->assertIdentical($es[0]->getType(), $valid);
+ }
+
+ public function testElggAPIGettersValidAndInvalidTypesPlural() {
+ $valid_num = 2;
+ $invalid_num = 3;
+ $valid = $this->getRandomValidTypes($valid_num);
+ $invalid = $this->getRandomInvalids($invalid_num);
+
+ $types = array();
+ foreach ($valid as $t) {
+ $types[] = $t;
+ }
+
+ foreach ($invalid as $t) {
+ $types[] = $t;
+ }
+
+ shuffle($types);
+ $options = array(
+ 'types' => $types,
+ 'group_by' => 'e.type'
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ // should only ever return one object because of group by
+ $this->assertIdentical(count($es), $valid_num);
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $valid));
+ }
+ }
+
+
+
+ /**************************************
+ * SUBTYPE TESTS
+ **************************************
+ *
+ * Here we can use the subtypes we created to test more finely.
+ * Subtypes are bound to types, so we must pass a type.
+ * This is where the fun logic starts.
+ */
+
+ public function testElggAPIGettersValidSubtypeUsingSubtypeSingularType() {
+ $types = $this->getRandomValidTypes();
+ $subtypes = $this->getRandomValidSubtypes($types);
+ $subtype = $subtypes[0];
+
+ $options = array(
+ 'types' => $types,
+ 'subtype' => $subtype
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ $this->assertIdentical(count($es), 1);
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $types));
+ $this->assertTrue(in_array($e->getSubtype(), $subtypes));
+ }
+ }
+
+ public function testElggAPIGettersValidSubtypeUsingSubtypesAsStringSingularType() {
+ $types = $this->getRandomValidTypes();
+ $subtypes = $this->getRandomValidSubtypes($types);
+ $subtype = $subtypes[0];
+
+ $options = array(
+ 'types' => $types,
+ 'subtypes' => $subtype
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ $this->assertIdentical(count($es), 1);
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $types));
+ $this->assertTrue(in_array($e->getSubtype(), $subtypes));
+ }
+ }
+
+ public function testElggAPIGettersValidSubtypeUsingSubtypesAsArraySingularType() {
+ $types = $this->getRandomValidTypes();
+ $subtypes = $this->getRandomValidSubtypes($types);
+
+ $options = array(
+ 'types' => $types,
+ 'subtypes' => $subtypes
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ $this->assertIdentical(count($es), 1);
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $types));
+ $this->assertTrue(in_array($e->getSubtype(), $subtypes));
+ }
+ }
+
+ public function testElggAPIGettersValidSubtypeUsingPluralSubtypesSingularType() {
+ $subtype_num = 2;
+ $types = $this->getRandomValidTypes();
+ $subtypes = $this->getRandomValidSubtypes($types, $subtype_num);
+
+ $options = array(
+ 'types' => $types,
+ 'subtypes' => $subtypes
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ $this->assertIdentical(count($es), $subtype_num);
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $types));
+ $this->assertTrue(in_array($e->getSubtype(), $subtypes));
+ }
+ }
+
+
+ /*
+ Because we're looking for type OR subtype (sorta)
+ it's possible that we've pulled in entities that aren't
+ of the subtype we've requested.
+ THIS COMBINATION MAKES LITTLE SENSE.
+ There is no mechanism in elgg to retrieve a subtype without a type, so
+ this combo gets trimmed down to only including subtypes that are valid to
+ each particular type.
+ FOR THE LOVE OF ALL GOOD PLEASE JUST USE TYPE_SUBTYPE_PAIRS!
+ */
+ public function testElggAPIGettersValidSubtypeUsingPluralSubtypesPluralTypes() {
+ $type_num = 2;
+ $subtype_num = 2;
+ $types = $this->getRandomValidTypes($type_num);
+ $subtypes = $this->getRandomValidSubtypes($types, $subtype_num);
+
+ $options = array(
+ 'types' => $types,
+ 'subtypes' => $subtypes
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ // this will unset all invalid subtypes for each type that that only
+ // one entity exists of each.
+ $this->assertIdentical(count($es), $subtype_num);
+ foreach ($es as $e) {
+ // entities must at least be in the type.
+ $this->assertTrue(in_array($e->getType(), $types));
+
+ // test that this is a valid subtype for the entity type.
+ $this->assertTrue(in_array($e->getSubtype(), $this->subtypes[$e->getType()]));
+ }
+ }
+
+ /*
+ * This combination will remove all invalid subtypes for this type.
+ */
+ public function testElggAPIGettersValidSubtypeUsingPluralMixedSubtypesSingleType() {
+ $type_num = 1;
+ $subtype_num = 2;
+ $types = $this->getRandomValidTypes($type_num);
+
+
+ //@todo replace this with $this->getRandomMixedSubtypes()
+ // we want this to return an invalid subtype for the returned type.
+ $subtype_types = $types;
+ $i = 1;
+ while ($i <= $subtype_num) {
+ $type = $this->types[$i-1];
+
+ if (!in_array($type, $subtype_types)) {
+ $subtype_types[] = $type;
+ }
+ $i++;
+ }
+
+ $subtypes = $this->getRandomValidSubtypes($subtype_types, $type_num);
+
+ $options = array(
+ 'types' => $types,
+ 'subtypes' => $subtypes
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ // this will unset all invalid subtypes for each type that that only
+ // one entity exists of each.
+ $this->assertIdentical(count($es), $type_num);
+ foreach ($es as $e) {
+ // entities must at least be in the type.
+ $this->assertTrue(in_array($e->getType(), $types));
+
+ // test that this is a valid subtype for the entity type.
+ $this->assertTrue(in_array($e->getSubtype(), $this->subtypes[$e->getType()]));
+ }
+ }
+
+
+ /***************************
+ * TYPE_SUBTYPE_PAIRS
+ ***************************/
+
+ /**
+ * Valid type, valid subtype pairs
+ */
+ public function testElggAPIGettersTSPValidTypeValidSubtype() {
+ $type_num = 1;
+ $subtype_num = 1;
+ $types = $this->getRandomValidTypes($type_num);
+ $subtypes = $this->getRandomValidSubtypes($types, $subtype_num);
+
+ $pair = array($types[0] => $subtypes[0]);
+
+ $options = array(
+ 'type_subtype_pairs' => $pair
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ $this->assertIdentical(count($es), $type_num);
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $types));
+ $this->assertTrue(in_array($e->getSubtype(), $subtypes));
+ }
+ }
+
+ /**
+ * Valid type, multiple valid subtypes
+ */
+ public function testElggAPIGettersTSPValidTypeValidPluralSubtype() {
+ $type_num = 1;
+ $subtype_num = 3;
+ $types = $this->getRandomValidTypes($type_num);
+ $subtypes = $this->getRandomValidSubtypes($types, $subtype_num);
+
+ $pair = array($types[0] => $subtypes);
+
+ $options = array(
+ 'type_subtype_pairs' => $pair
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ $this->assertIdentical(count($es), $subtype_num);
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $types));
+ $this->assertTrue(in_array($e->getSubtype(), $subtypes));
+ }
+ }
+
+ /**
+ * Valid type, both valid and invalid subtypes
+ */
+ public function testElggAPIGettersTSPValidTypeMixedPluralSubtype() {
+ $type_num = 1;
+ $valid_subtype_num = 2;
+ $types = $this->getRandomValidTypes($type_num);
+ $valid = $this->getRandomValidSubtypes($types, $valid_subtype_num);
+ $invalid = $this->getRandomInvalids();
+
+ $subtypes = array_merge($valid, $invalid);
+ shuffle($subtypes);
+
+ $pair = array($types[0] => $subtypes);
+
+ $options = array(
+ 'type_subtype_pairs' => $pair
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertIsA($es, 'array');
+
+ $this->assertIdentical(count($es), $valid_subtype_num);
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->getType(), $types));
+ $this->assertTrue(in_array($e->getSubtype(), $valid));
+ }
+ }
+
+
+ /****************************
+ * FALSE-RETURNING TESTS
+ ****************************
+ * The original bug corrected returned
+ * all entities when invalid subtypes were passed.
+ * Because there's a huge numer of combinations that
+ * return entities, I'm only writing tests for
+ * things that should return false.
+ *
+ * I'm leaving the above in case anyone is inspired to
+ * write out the rest of the possible combinations
+ */
+
+
+ /**
+ * Test invalid types with singular 'type'.
+ */
+ public function testElggApiGettersInvalidTypeUsingType() {
+ $type_arr = $this->getRandomInvalids();
+ $type = $type_arr[0];
+
+ $options = array(
+ 'type' => $type
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ /**
+ * Test invalid types with plural 'types'.
+ */
+ public function testElggApiGettersInvalidTypeUsingTypesAsString() {
+ $type_arr = $this->getRandomInvalids();
+ $type = $type_arr[0];
+
+ $options = array(
+ 'types' => $type
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ /**
+ * Test invalid types with plural 'types' and an array of a single type
+ */
+ public function testElggApiGettersInvalidTypeUsingTypesAsArray() {
+ $type_arr = $this->getRandomInvalids(1);
+
+ $options = array(
+ 'types' => $type_arr
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ /**
+ * Test invalid types with plural 'types' and an array of a two types
+ */
+ public function testElggApiGettersInvalidTypes() {
+ $type_arr = $this->getRandomInvalids(2);
+
+ $options = array(
+ 'types' => $type_arr
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ public function testElggApiGettersInvalidSubtypeValidType() {
+ $type_num = 1;
+ $subtype_num = 1;
+ $types = $this->getRandomValidTypes($type_num);
+ $subtypes = $this->getRandomInvalids($subtype_num);
+
+ $options = array(
+ 'types' => $types,
+ 'subtypes' => $subtypes
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ public function testElggApiGettersInvalidSubtypeValidTypes() {
+ $type_num = 2;
+ $subtype_num = 1;
+ $types = $this->getRandomValidTypes($type_num);
+ $subtypes = $this->getRandomInvalids($subtype_num);
+
+ $options = array(
+ 'types' => $types,
+ 'subtypes' => $subtypes
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ public function testElggApiGettersInvalidSubtypesValidType() {
+ $type_num = 1;
+ $subtype_num = 2;
+ $types = $this->getRandomValidTypes($type_num);
+ $subtypes = $this->getRandomInvalids($subtype_num);
+
+ $options = array(
+ 'types' => $types,
+ 'subtypes' => $subtypes
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ public function testElggApiGettersInvalidSubtypesValidTypes() {
+ $type_num = 2;
+ $subtype_num = 2;
+ $types = $this->getRandomValidTypes($type_num);
+ $subtypes = $this->getRandomInvalids($subtype_num);
+
+ $options = array(
+ 'types' => $types,
+ 'subtypes' => $subtypes
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ public function testElggApiGettersTSPInvalidType() {
+ $type_num = 1;
+ $types = $this->getRandomInvalids($type_num);
+
+ $pair = array();
+
+ foreach ($types as $type) {
+ $pair[$type] = NULL;
+ }
+
+ $options = array(
+ 'type_subtype_pairs' => $pair
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ public function testElggApiGettersTSPInvalidTypes() {
+ $type_num = 2;
+ $types = $this->getRandomInvalids($type_num);
+
+ $pair = array();
+ foreach ($types as $type) {
+ $pair[$type] = NULL;
+ }
+
+ $options = array(
+ 'type_subtype_pairs' => $pair
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ public function testElggApiGettersTSPValidTypeInvalidSubtype() {
+ $type_num = 1;
+ $subtype_num = 1;
+ $types = $this->getRandomValidTypes($type_num);
+ $subtypes = $this->getRandomInvalids($subtype_num);
+
+ $pair = array($types[0] => $subtypes[0]);
+
+ $options = array(
+ 'type_subtype_pairs' => $pair
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ public function testElggApiGettersTSPValidTypeInvalidSubtypes() {
+ $type_num = 1;
+ $subtype_num = 2;
+ $types = $this->getRandomValidTypes($type_num);
+ $subtypes = $this->getRandomInvalids($subtype_num);
+
+ $pair = array($types[0] => array($subtypes[0], $subtypes[0]));
+
+ $options = array(
+ 'type_subtype_pairs' => $pair
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+ public function testElggApiGettersTSPValidTypesInvalidSubtypes() {
+ $type_num = 2;
+ $subtype_num = 2;
+ $types = $this->getRandomValidTypes($type_num);
+ $subtypes = $this->getRandomInvalids($subtype_num);
+
+ $pair = array();
+ foreach ($types as $type) {
+ $pair[$type] = $subtypes;
+ }
+
+ $options = array(
+ 'type_subtype_pairs' => $pair
+ );
+
+ $es = elgg_get_entities($options);
+ $this->assertFalse($es);
+ }
+
+
+
+
+
+
+ public function testElggApiGettersEntityNoSubtype() {
+ // create an entity we can later delete.
+ // order by guid and limit by 1 should == this entity.
+
+ $e = new ElggObject();
+ $e->save();
+
+ $options = array(
+ 'type' => 'object',
+ 'limit' => 1,
+ 'order_by' => 'guid desc'
+ );
+
+ // grab ourself again to fill out attributes.
+ $e = get_entity($e->getGUID());
+
+ $entities = elgg_get_entities($options);
+
+ $this->assertEqual(count($entities), 1);
+
+ foreach ($entities as $entity) {
+ $this->assertIdentical($e->getGUID(), $entity->getGUID());
+ }
+
+ $e->delete();
+ }
+
+ public function testElggApiGettersEntityNoValueSubtypeNotSet() {
+ // create an entity we can later delete.
+ // order by time created and limit by 1 should == this entity.
+
+ $e = new ElggObject();
+ $e->save();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => ELGG_ENTITIES_NO_VALUE,
+ 'limit' => 1,
+ 'order_by' => 'guid desc'
+ );
+
+ // grab ourself again to fill out attributes.
+ $e = get_entity($e->getGUID());
+
+ $entities = elgg_get_entities($options);
+
+ $this->assertEqual(count($entities), 1);
+
+ foreach ($entities as $entity) {
+ $this->assertIdentical($e->getGUID(), $entity->getGUID());
+ }
+
+ $e->delete();
+ }
+
+ public function testElggApiGettersEntityNoValueSubtypeSet() {
+ global $CONFIG;
+ // create an entity we can later delete.
+ // order by time created and limit by 1 should == this entity.
+
+ $subtype = 'subtype_' . rand();
+
+ $e_subtype = new ElggObject();
+ $e_subtype->subtype = $subtype;
+ $e_subtype->save();
+
+ $e = new ElggObject();
+ $e->save();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => ELGG_ENTITIES_NO_VALUE,
+ 'limit' => 1,
+ 'order_by' => 'guid desc'
+ );
+
+ // grab ourself again to fill out attributes.
+ $e = get_entity($e->getGUID());
+
+ $entities = elgg_get_entities($options);
+
+ $this->assertEqual(count($entities), 1);
+
+ // this entity should NOT be the entity we just created
+ // and should have no subtype
+ foreach ($entities as $entity) {
+ $this->assertEqual($entity->subtype_id, 0);
+ }
+
+ $e_subtype->delete();
+ $e->delete();
+
+ $q = "DELETE FROM {$CONFIG->dbprefix}entity_subtypes WHERE subtype = '$subtype'";
+ delete_data($q);
+ }
+
+
+
+ /************
+ * METADATA
+ ************/
+
+ //names
+
+ function testElggApiGettersEntityMetadataNameValidSingle() {
+ // create a new entity with a subtype we know
+ // use an existing type so it will clean up automatically
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_name' => $md_name
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 1);
+
+ foreach ($entities as $entity) {
+ $this->assertEqual($entity->getGUID(), $e->getGUID());
+ $this->assertEqual($entity->$md_name, $md_value);
+ }
+
+ $e->delete();
+ }
+
+ function testElggApiGettersEntityMetadataNameValidMultiple() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_names = array();
+
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+ $md_names[] = $md_name;
+ $e_guids = array();
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+ $e_guids[] = $e->getGUID();
+
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+ $md_names[] = $md_name;
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+ $e_guids[] = $e->getGUID();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_names' => $md_names
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 2);
+
+ foreach ($entities as $entity) {
+ $this->assertTrue(in_array($entity->getGUID(), $e_guids));
+ $entity->delete();
+ }
+ }
+
+ function testElggApiGettersEntityMetadataNameInvalidSingle() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+
+ $md_invalid_name = 'test_metadata_name_' . rand();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_name' => $md_invalid_name
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIdentical(array(), $entities);
+
+ $e->delete();
+ }
+
+ function testElggApiGettersEntityMetadataNameInvalidMultiple() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+
+ $md_invalid_names = array();
+ $md_invalid_names[] = 'test_metadata_name_' . rand();
+ $md_invalid_names[] = 'test_metadata_name_' . rand();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_names' => $md_invalid_names
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIdentical(array(), $entities);
+
+ $e->delete();
+ }
+
+
+ function testElggApiGettersEntityMetadataNameMixedMultiple() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_names = array();
+
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+ $md_names[] = $md_name;
+ $e_guids = array();
+
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->$md_name = $md_value;
+ $valid->save();
+ $e_guids[] = $valid->getGUID();
+
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+
+ // add a random invalid name.
+ $md_names[] = 'test_metadata_name_' . rand();
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+ $e_guids[] = $e->getGUID();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_names' => $md_names
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 1);
+
+ foreach ($entities as $entity) {
+ $this->assertEqual($entity->getGUID(), $valid->getGUID());
+ }
+
+ foreach ($e_guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+
+ // values
+ function testElggApiGettersEntityMetadataValueValidSingle() {
+ // create a new entity with a subtype we know
+ // use an existing type so it will clean up automatically
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_value' => $md_value
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 1);
+
+ foreach ($entities as $entity) {
+ $this->assertEqual($entity->getGUID(), $e->getGUID());
+ $this->assertEqual($entity->$md_name, $md_value);
+ }
+
+ $e->delete();
+ }
+
+ function testElggApiGettersEntityMetadataValueValidMultiple() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_values = array();
+
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+ $md_values[] = $md_value;
+ $e_guids = array();
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+ $e_guids[] = $e->getGUID();
+
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+ $md_values[] = $md_value;
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+ $e_guids[] = $e->getGUID();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_values' => $md_values
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 2);
+
+ foreach ($entities as $entity) {
+ $this->assertTrue(in_array($entity->getGUID(), $e_guids));
+ $entity->delete();
+ }
+ }
+
+ function testElggApiGettersEntityMetadataValueInvalidSingle() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+
+ $md_invalid_value = 'test_metadata_value_' . rand();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_value' => $md_invalid_value
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIdentical(array(), $entities);
+
+ $e->delete();
+ }
+
+ function testElggApiGettersEntityMetadataValueInvalidMultiple() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+
+ $md_invalid_values = array();
+ $md_invalid_values[] = 'test_metadata_value_' . rand();
+ $md_invalid_values[] = 'test_metadata_value_' . rand();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_values' => $md_invalid_values
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIdentical(array(), $entities);
+
+ $e->delete();
+ }
+
+
+ function testElggApiGettersEntityMetadataValueMixedMultiple() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_values = array();
+
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+ $md_values[] = $md_value;
+ $e_guids = array();
+
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->$md_name = $md_value;
+ $valid->save();
+ $e_guids[] = $valid->getGUID();
+
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+
+ // add a random invalid value.
+ $md_values[] = 'test_metadata_value_' . rand();
+
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $md_value;
+ $e->save();
+ $e_guids[] = $e->getGUID();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_values' => $md_values
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 1);
+
+ foreach ($entities as $entity) {
+ $this->assertEqual($entity->getGUID(), $valid->getGUID());
+ }
+
+ foreach ($e_guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+
+ // name_value_pairs
+
+
+ function testElggApiGettersEntityMetadataNVPValidNValidVEquals() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+ $guids = array();
+
+ // our target
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->$md_name = $md_value;
+ $valid->save();
+ $guids[] = $valid->getGUID();
+
+ // make some bad ones
+ $invalid_md_name = 'test_metadata_name_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$invalid_md_name = $md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $invalid_md_value = 'test_metadata_value_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $invalid_md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $md_invalid_names = array();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_name_value_pairs' => array(array(
+ 'name' => $md_name,
+ 'value' => $md_value
+ ))
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 1);
+
+ foreach ($entities as $entity) {
+ $this->assertEqual($entity->getGUID(), $valid->getGUID());
+ $this->assertEqual($entity->$md_name, $md_value);
+ $entity->delete();
+ }
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+ function testElggApiGettersEntityMetadataNVPValidNValidVEqualsTriple() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+
+ $md_name2 = 'test_metadata_name_' . rand();
+ $md_value2 = 'test_metadata_value_' . rand();
+
+ $md_name3 = 'test_metadata_name_' . rand();
+ $md_value3 = 'test_metadata_value_' . rand();
+
+ $guids = array();
+
+ // our target
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->$md_name = $md_value;
+ $valid->$md_name2 = $md_value2;
+ $valid->$md_name3 = $md_value3;
+ $valid->save();
+ $guids[] = $valid->getGUID();
+
+ // make some bad ones
+ $invalid_md_name = 'test_metadata_name_' . rand();
+ $invalid_md_name2 = 'test_metadata_name_' . rand();
+ $invalid_md_name3 = 'test_metadata_name_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$invalid_md_name = $md_value;
+ $e->$invalid_md_name2 = $md_value2;
+ $e->$invalid_md_name3 = $md_value3;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $invalid_md_value = 'test_metadata_value_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $invalid_md_value;
+ $e->$md_name2 = $invalid_md_value;
+ $e->$md_name3 = $invalid_md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $md_invalid_names = array();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_name_value_pairs' => array(
+ array(
+ 'name' => $md_name,
+ 'value' => $md_value
+ ),
+ array(
+ 'name' => $md_name2,
+ 'value' => $md_value2
+ ),
+ array(
+ 'name' => $md_name3,
+ 'value' => $md_value3
+ )
+ )
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 1);
+
+ foreach ($entities as $entity) {
+ $this->assertEqual($entity->getGUID(), $valid->getGUID());
+ $this->assertEqual($entity->$md_name, $md_value);
+ $entity->delete();
+ }
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+ function testElggApiGettersEntityMetadataNVPValidNValidVEqualsDouble() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+
+ $md_name2 = 'test_metadata_name_' . rand();
+ $md_value2 = 'test_metadata_value_' . rand();
+
+ $guids = array();
+
+ // our target
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->$md_name = $md_value;
+ $valid->$md_name2 = $md_value2;
+ $valid->save();
+ $guids[] = $valid->getGUID();
+
+ // make some bad ones
+ $invalid_md_name = 'test_metadata_name_' . rand();
+ $invalid_md_name2 = 'test_metadata_name_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$invalid_md_name = $md_value;
+ $e->$invalid_md_name2 = $md_value2;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $invalid_md_value = 'test_metadata_value_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $invalid_md_value;
+ $e->$md_name2 = $invalid_md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $md_invalid_names = array();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_name_value_pairs' => array(
+ array(
+ 'name' => $md_name,
+ 'value' => $md_value
+ ),
+ array(
+ 'name' => $md_name2,
+ 'value' => $md_value2
+ )
+ )
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 1);
+
+ foreach ($entities as $entity) {
+ $this->assertEqual($entity->getGUID(), $valid->getGUID());
+ $this->assertEqual($entity->$md_name, $md_value);
+ $entity->delete();
+ }
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+ // this keeps locking up my database...
+ function xtestElggApiGettersEntityMetadataNVPValidNValidVEqualsStupid() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+
+ $md_name2 = 'test_metadata_name_' . rand();
+ $md_value2 = 'test_metadata_value_' . rand();
+
+ $md_name3 = 'test_metadata_name_' . rand();
+ $md_value3 = 'test_metadata_value_' . rand();
+
+ $md_name3 = 'test_metadata_name_' . rand();
+ $md_value3 = 'test_metadata_value_' . rand();
+
+ $md_name4 = 'test_metadata_name_' . rand();
+ $md_value4 = 'test_metadata_value_' . rand();
+
+ $md_name5 = 'test_metadata_name_' . rand();
+ $md_value5 = 'test_metadata_value_' . rand();
+
+ $guids = array();
+
+ // our target
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->$md_name = $md_value;
+ $valid->$md_name2 = $md_value2;
+ $valid->$md_name3 = $md_value3;
+ $valid->$md_name4 = $md_value4;
+ $valid->$md_name5 = $md_value5;
+ $valid->save();
+ $guids[] = $valid->getGUID();
+
+ // make some bad ones
+ $invalid_md_name = 'test_metadata_name_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$invalid_md_name = $md_value;
+ $e->$md_name2 = $md_value2;
+ $e->$md_name3 = $md_value3;
+ $e->$md_name4 = $md_value4;
+ $e->$md_name5 = $md_value5;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $invalid_md_value = 'test_metadata_value_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $invalid_md_value;
+ $e->$md_name2 = $invalid_md_value;
+ $e->$md_name3 = $invalid_md_value;
+ $e->$md_name4 = $invalid_md_value;
+ $e->$md_name5 = $invalid_md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $md_invalid_names = array();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_name_value_pairs' => array(
+ array(
+ 'name' => $md_name,
+ 'value' => $md_value
+ ),
+ array(
+ 'name' => $md_name2,
+ 'value' => $md_value2
+ ),
+ array(
+ 'name' => $md_name3,
+ 'value' => $md_value3
+ ),
+ array(
+ 'name' => $md_name4,
+ 'value' => $md_value4
+ ),
+ array(
+ 'name' => $md_name5,
+ 'value' => $md_value5
+ ),
+ )
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 1);
+
+ foreach ($entities as $entity) {
+ $this->assertEqual($entity->getGUID(), $valid->getGUID());
+ $this->assertEqual($entity->$md_name, $md_value);
+ $entity->delete();
+ }
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+ /**
+ * Name value pair with valid name and invalid value
+ */
+ function testElggApiGettersEntityMetadataNVPValidNInvalidV() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+ $guids = array();
+
+ // make some bad ones
+ $invalid_md_name = 'test_metadata_name_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$invalid_md_name = $md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $invalid_md_value = 'test_metadata_value_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $invalid_md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $md_invalid_names = array();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_name_value_pairs' => array(array(
+ 'name' => $md_name,
+ 'value' => 'test_metadata_value_' . rand()
+ ))
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIdentical(array(), $entities);
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+ /**
+ * Name value pair with invalid name and valid value
+ */
+ function testElggApiGettersEntityMetadataNVPInvalidNValidV() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+ $guids = array();
+
+ // make some bad ones
+ $invalid_md_name = 'test_metadata_name_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$invalid_md_name = $md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $invalid_md_value = 'test_metadata_value_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $invalid_md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $md_invalid_names = array();
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_name_value_pairs' => array(array(
+ 'name' => 'test_metadata_name_' . rand(),
+ 'value' => $md_value
+ ))
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIdentical(array(), $entities);
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+
+ function testElggApiGettersEntityMetadataNVPValidNValidVOperandIn() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+ $guids = array();
+ $valid_guids = array();
+
+ // our targets
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->$md_name = $md_value;
+ $valid->save();
+ $guids[] = $valid->getGUID();
+ $valid_guids[] = $valid->getGUID();
+
+ $md_name2 = 'test_metadata_name_' . rand();
+ $md_value2 = 'test_metadata_value_' . rand();
+
+ $valid2 = new ElggObject();
+ $valid2->subtype = $subtype;
+ $valid2->$md_name2 = $md_value2;
+ $valid2->save();
+ $guids[] = $valid->getGUID();
+ $valid_guids[] = $valid2->getGUID();
+
+ // make some bad ones
+ $invalid_md_name = 'test_metadata_name_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$invalid_md_name = $md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $invalid_md_value = 'test_metadata_value_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $invalid_md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $md_valid_values = "'$md_value', '$md_value2'";
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_name_value_pairs' => array(
+ array(
+ 'name' => $md_name,
+ 'value' => $md_valid_values,
+ 'operand' => 'IN'
+ ),
+ array(
+ 'name' => $md_name2,
+ 'value' => $md_valid_values,
+ 'operand' => 'IN'
+ ),
+ ),
+ 'metadata_name_value_pairs_operator' => 'OR'
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 2);
+
+ foreach ($entities as $entity) {
+ $this->assertTrue(in_array($entity->getGUID(), $valid_guids));
+ $entity->delete();
+ }
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+ function testElggApiGettersEntityMetadataNVPValidNValidVPlural() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $md_value = 'test_metadata_value_' . rand();
+ $guids = array();
+ $valid_guids = array();
+
+ // our targets
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->$md_name = $md_value;
+ $valid->save();
+ $guids[] = $valid->getGUID();
+ $valid_guids[] = $valid->getGUID();
+
+ $md_name2 = 'test_metadata_name_' . rand();
+ $md_value2 = 'test_metadata_value_' . rand();
+
+ $valid2 = new ElggObject();
+ $valid2->subtype = $subtype;
+ $valid2->$md_name2 = $md_value2;
+ $valid2->save();
+ $guids[] = $valid->getGUID();
+ $valid_guids[] = $valid2->getGUID();
+
+ // make some bad ones
+ $invalid_md_name = 'test_metadata_name_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$invalid_md_name = $md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $invalid_md_value = 'test_metadata_value_' . rand();
+ $e = new ElggObject();
+ $e->subtype = $subtype;
+ $e->$md_name = $invalid_md_value;
+ $e->save();
+ $guids[] = $e->getGUID();
+
+ $md_valid_values = array($md_value, $md_value2);
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_name_value_pairs' => array(
+ array(
+ 'name' => $md_name,
+ 'value' => $md_valid_values,
+ 'operand' => 'IN'
+ ),
+ array(
+ 'name' => $md_name2,
+ 'value' => $md_valid_values,
+ 'operand' => 'IN'
+ ),
+ ),
+ 'metadata_name_value_pairs_operator' => 'OR'
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 2);
+
+ foreach ($entities as $entity) {
+ $this->assertTrue(in_array($entity->getGUID(), $valid_guids));
+ $entity->delete();
+ }
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+ function testElggApiGettersEntityMetadataNVPOrderByMDText() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $guids = array();
+ $valid_guids = array();
+
+ // our targets
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->$md_name = 1;
+ $valid->save();
+ $guids[] = $valid->getGUID();
+ $valid_guids[] = $valid->getGUID();
+
+ $valid2 = new ElggObject();
+ $valid2->subtype = $subtype;
+ $valid2->$md_name = 2;
+ $valid2->save();
+ $guids[] = $valid->getGUID();
+ $valid_guids[] = $valid2->getGUID();
+
+ $valid3 = new ElggObject();
+ $valid3->subtype = $subtype;
+ $valid3->$md_name = 3;
+ $valid3->save();
+ $guids[] = $valid->getGUID();
+ $valid_guids[] = $valid3->getGUID();
+
+ $md_valid_values = array(1, 2, 3);
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ //'metadata_name' => $md_name,
+ 'order_by_metadata' => array('name' => $md_name, 'as' => 'integer')
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 3);
+
+ $i = 1;
+ foreach ($entities as $entity) {
+ $this->assertTrue(in_array($entity->getGUID(), $valid_guids));
+ $this->assertEqual($entity->$md_name, $i);
+ $i++;
+ $entity->delete();
+ }
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+ function testElggApiGettersEntityMetadataNVPOrderByMDString() {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $md_name = 'test_metadata_name_' . rand();
+ $guids = array();
+ $valid_guids = array();
+
+ // our targets
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->$md_name = 'a';
+ $valid->save();
+ $guids[] = $valid->getGUID();
+ $valid_guids[] = $valid->getGUID();
+
+ $valid2 = new ElggObject();
+ $valid2->subtype = $subtype;
+ $valid2->$md_name = 'b';
+ $valid2->save();
+ $guids[] = $valid->getGUID();
+ $valid_guids[] = $valid2->getGUID();
+
+ $valid3 = new ElggObject();
+ $valid3->subtype = $subtype;
+ $valid3->$md_name = 'c';
+ $valid3->save();
+ $guids[] = $valid->getGUID();
+ $valid_guids[] = $valid3->getGUID();
+
+ $md_valid_values = array('a', 'b', 'c');
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'metadata_name' => $md_name,
+ 'order_by_metadata' => array('name' => $md_name, 'as' => 'text')
+ );
+
+ $entities = elgg_get_entities_from_metadata($options);
+
+ $this->assertIsa($entities, 'array');
+ $this->assertEqual(count($entities), 3);
+
+ $alpha = array('a', 'b', 'c');
+
+ $i = 0;
+ foreach ($entities as $entity) {
+ $this->assertTrue(in_array($entity->getGUID(), $valid_guids));
+ $this->assertEqual($entity->$md_name, $alpha[$i]);
+ $i++;
+ $entity->delete();
+ }
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+ /**
+ * Annotations
+ */
+ public function testElggApiGettersEntitiesFromAnnotation() {
+
+ // grab a few different users to annotation
+ // there will always be at least 2 here because of the construct.
+ $users = elgg_get_entities(array('type' => 'user', 'limit' => 2));
+
+ // create some test annotations
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $annotation_name = 'test_annotation_name_' . rand();
+ $annotation_value = rand(1000, 9999);
+ $annotation_name2 = 'test_annotation_name_' . rand();
+ $annotation_value2 = rand(1000, 9999);
+ $guids = array();
+
+ // our targets
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->save();
+ $guids[] = $valid->getGUID();
+ create_annotation($valid->getGUID(), $annotation_name, $annotation_value, 'integer', $users[0]->getGUID());
+
+ $valid2 = new ElggObject();
+ $valid2->subtype = $subtype;
+ $valid2->save();
+ $guids[] = $valid2->getGUID();
+ create_annotation($valid2->getGUID(), $annotation_name2, $annotation_value2, 'integer', $users[1]->getGUID());
+
+ $options = array(
+ 'annotation_owner_guid' => $users[0]->getGUID(),
+ 'annotation_name' => $annotation_name
+ );
+
+ $entities = elgg_get_entities_from_annotations($options);
+
+ foreach ($entities as $entity) {
+ $this->assertTrue(in_array($entity->getGUID(), $guids));
+ $annotations = $entity->getAnnotations($annotation_name);
+ $this->assertEqual(count($annotations), 1);
+
+ $this->assertEqual($annotations[0]->name, $annotation_name);
+ $this->assertEqual($annotations[0]->value, $annotation_value);
+ $this->assertEqual($annotations[0]->owner_guid, $users[0]->getGUID());
+ }
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+ // Make sure metadata doesn't affect getting entities by relationship. See #2274
+ public function testElggApiGettersEntityRelationshipWithMetadata() {
+ $guids = array();
+
+ $obj1 = new ElggObject();
+ $obj1->test_md = 'test';
+ $obj1->save();
+ $guids[] = $obj1->guid;
+
+ $obj2 = new ElggObject();
+ $obj2->test_md = 'test';
+ $obj2->save();
+ $guids[] = $obj2->guid;
+
+ add_entity_relationship($guids[0], 'test', $guids[1]);
+
+ $options = array(
+ 'relationship' => 'test',
+ 'relationship_guid' => $guids[0]
+ );
+
+ $es = elgg_get_entities_from_relationship($options);
+ $this->assertTrue(is_array($es));
+ $this->assertIdentical(count($es), 1);
+
+ foreach ($es as $e) {
+ $this->assertEqual($guids[1], $e->guid);
+ }
+
+ foreach ($guids as $guid) {
+ $e = get_entity($guid);
+ $e->delete();
+ }
+ }
+
+ public function testElggApiGettersEntityRelationshipWithOutMetadata() {
+ $guids = array();
+
+ $obj1 = new ElggObject();
+ $obj1->save();
+ $guids[] = $obj1->guid;
+
+ $obj2 = new ElggObject();
+ $obj2->save();
+ $guids[] = $obj2->guid;
+
+ add_entity_relationship($guids[0], 'test', $guids[1]);
+
+ $options = array(
+ 'relationship' => 'test',
+ 'relationship_guid' => $guids[0]
+ );
+
+ $es = elgg_get_entities_from_relationship($options);
+ $this->assertTrue(is_array($es));
+ $this->assertIdentical(count($es), 1);
+
+ foreach ($es as $e) {
+ $this->assertEqual($guids[1], $e->guid);
+ }
+
+ foreach ($guids as $guid) {
+ $e = get_entity($guid);
+ $e->delete();
+ }
+ }
+
+ public function testElggApiGettersEntityRelationshipWithMetadataIncludingRealMetadata() {
+ $guids = array();
+
+ $obj1 = new ElggObject();
+ $obj1->test_md = 'test';
+ $obj1->save();
+ $guids[] = $obj1->guid;
+
+ $obj2 = new ElggObject();
+ $obj2->test_md = 'test';
+ $obj2->save();
+ $guids[] = $obj2->guid;
+
+ add_entity_relationship($guids[0], 'test', $guids[1]);
+
+ $options = array(
+ 'relationship' => 'test',
+ 'relationship_guid' => $guids[0],
+ 'metadata_name' => 'test_md',
+ 'metadata_value' => 'test',
+ );
+
+ $es = elgg_get_entities_from_relationship($options);
+ $this->assertTrue(is_array($es));
+ $this->assertIdentical(count($es), 1);
+
+ foreach ($es as $e) {
+ $this->assertEqual($guids[1], $e->guid);
+ }
+
+ foreach ($guids as $guid) {
+ $e = get_entity($guid);
+ $e->delete();
+ }
+ }
+
+ public function testElggApiGettersEntityRelationshipWithMetadataIncludingFakeMetadata() {
+ $guids = array();
+
+ $obj1 = new ElggObject();
+ $obj1->test_md = 'test';
+ $obj1->save();
+ $guids[] = $obj1->guid;
+
+ $obj2 = new ElggObject();
+ $obj2->test_md = 'test';
+ $obj2->save();
+ $guids[] = $obj2->guid;
+
+ add_entity_relationship($guids[0], 'test', $guids[1]);
+
+ $options = array(
+ 'relationship' => 'test',
+ 'relationship_guid' => $guids[0],
+ 'metadata_name' => 'test_md',
+ 'metadata_value' => 'invalid',
+ );
+
+ $es = elgg_get_entities_from_relationship($options);
+
+ $this->assertTrue(empty($es));
+
+ foreach ($guids as $guid) {
+ $e = get_entity($guid);
+ $e->delete();
+ }
+ }
+
+ public function testElggApiGettersEntitySiteSingular() {
+ global $CONFIG;
+
+ $guids = array();
+
+ $obj1 = new ElggObject();
+ $obj1->test_md = 'test';
+ // luckily this is never checked.
+ $obj1->site_guid = 2;
+ $obj1->save();
+ $guids[] = $obj1->guid;
+ $right_guid = $obj1->guid;
+
+ $obj2 = new ElggObject();
+ $obj2->test_md = 'test';
+ $obj2->site_guid = $CONFIG->site->guid;
+ $obj2->save();
+ $guids[] = $obj2->guid;
+
+ $options = array(
+ 'metadata_name' => 'test_md',
+ 'metadata_value' => 'test',
+ 'site_guid' => 2
+ );
+
+ $es = elgg_get_entities_from_metadata($options);
+ $this->assertTrue(is_array($es));
+ $this->assertEqual(1, count($es));
+ $this->assertEqual($right_guid, $es[0]->guid);
+
+ foreach ($guids as $guid) {
+ get_entity($guid)->delete();
+ }
+ }
+
+ public function testElggApiGettersEntitySiteSingularAny() {
+ global $CONFIG;
+
+ $guids = array();
+
+ $obj1 = new ElggObject();
+ $obj1->test_md = 'test';
+ // luckily this is never checked.
+ $obj1->site_guid = 2;
+ $obj1->save();
+ $guids[] = $obj1->guid;
+
+ $obj2 = new ElggObject();
+ $obj2->test_md = 'test';
+ $obj2->site_guid = $CONFIG->site->guid;
+ $obj2->save();
+ $guids[] = $obj2->guid;
+
+ $options = array(
+ 'metadata_name' => 'test_md',
+ 'metadata_value' => 'test',
+ 'site_guid' => ELGG_ENTITIES_ANY_VALUE,
+ 'limit' => 2,
+ 'order_by' => 'e.guid DESC'
+ );
+
+ $es = elgg_get_entities_from_metadata($options);
+ $this->assertTrue(is_array($es));
+ $this->assertEqual(2, count($es));
+
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->guid, $guids));
+ }
+
+ foreach ($guids as $guid) {
+ get_entity($guid)->delete();
+ }
+ }
+
+ public function testElggApiGettersEntitySitePlural() {
+ global $CONFIG;
+
+ $guids = array();
+
+ $obj1 = new ElggObject();
+ $obj1->test_md = 'test';
+ // luckily this is never checked.
+ $obj1->site_guid = 2;
+ $obj1->save();
+ $guids[] = $obj1->guid;
+
+ $obj2 = new ElggObject();
+ $obj2->test_md = 'test';
+ $obj2->site_guid = $CONFIG->site->guid;
+ $obj2->save();
+ $guids[] = $obj2->guid;
+
+ $options = array(
+ 'metadata_name' => 'test_md',
+ 'metadata_value' => 'test',
+ 'site_guids' => array($CONFIG->site->guid, 2),
+ 'limit' => 2,
+ 'order_by' => 'e.guid DESC'
+ );
+
+ $es = elgg_get_entities_from_metadata($options);
+ $this->assertTrue(is_array($es));
+ $this->assertEqual(2, count($es));
+
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->guid, $guids));
+ }
+
+ foreach ($guids as $guid) {
+ get_entity($guid)->delete();
+ }
+ }
+
+ public function testElggApiGettersEntitySitePluralSomeInvalid() {
+ global $CONFIG;
+
+ $guids = array();
+
+ $obj1 = new ElggObject();
+ $obj1->test_md = 'test';
+ // luckily this is never checked.
+ $obj1->site_guid = 2;
+ $obj1->save();
+ $guids[] = $obj1->guid;
+
+ $obj2 = new ElggObject();
+ $obj2->test_md = 'test';
+ $obj2->save();
+ $guids[] = $obj2->guid;
+ $right_guid = $obj2->guid;
+
+ $options = array(
+ 'metadata_name' => 'test_md',
+ 'metadata_value' => 'test',
+ // just created the first entity so nothing will be "sited" by it.
+ 'site_guids' => array($CONFIG->site->guid, $guids[0]),
+ 'limit' => 2,
+ 'order_by' => 'e.guid DESC'
+ );
+
+ $es = elgg_get_entities_from_metadata($options);
+
+ $this->assertTrue(is_array($es));
+ $this->assertEqual(1, count($es));
+ $this->assertEqual($es[0]->guid, $right_guid);
+
+ foreach ($guids as $guid) {
+ get_entity($guid)->delete();
+ }
+ }
+
+ public function testElggApiGettersEntitySitePluralAllInvalid() {
+ global $CONFIG;
+
+ $guids = array();
+
+ $obj1 = new ElggObject();
+ $obj1->test_md = 'test';
+ // luckily this is never checked.
+ $obj1->site_guid = 2;
+ $obj1->save();
+ $guids[] = $obj1->guid;
+
+ $obj2 = new ElggObject();
+ $obj2->test_md = 'test';
+ $obj2->save();
+ $guids[] = $obj2->guid;
+ $right_guid = $obj2->guid;
+
+ $options = array(
+ 'metadata_name' => 'test_md',
+ 'metadata_value' => 'test',
+ // just created the first entity so nothing will be "sited" by it.
+ 'site_guids' => array($guids[0], $guids[1]),
+ 'limit' => 2,
+ 'order_by' => 'e.guid DESC'
+ );
+
+ $es = elgg_get_entities_from_metadata($options);
+
+ $this->assertTrue(empty($es));
+
+ foreach ($guids as $guid) {
+ get_entity($guid)->delete();
+ }
+ }
+
+ /**
+ * Private settings
+ */
+ public function testElggApiGettersEntitiesFromPrivateSettings() {
+
+ // create some test private settings
+ $setting_name = 'test_setting_name_' . rand();
+ $setting_value = rand(1000, 9999);
+ $setting_name2 = 'test_setting_name_' . rand();
+ $setting_value2 = rand(1000, 9999);
+
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $guids = array();
+
+ // our targets
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->save();
+ $guids[] = $valid->getGUID();
+ set_private_setting($valid->getGUID(), $setting_name, $setting_value);
+ set_private_setting($valid->getGUID(), $setting_name2, $setting_value2);
+
+ $valid2 = new ElggObject();
+ $valid2->subtype = $subtype;
+ $valid2->save();
+ $guids[] = $valid2->getGUID();
+ set_private_setting($valid2->getGUID(), $setting_name, $setting_value);
+ set_private_setting($valid2->getGUID(), $setting_name2, $setting_value2);
+
+ // simple test with name
+ $options = array(
+ 'private_setting_name' => $setting_name
+ );
+
+ $entities = elgg_get_entities_from_private_settings($options);
+
+ foreach ($entities as $entity) {
+ $this->assertTrue(in_array($entity->getGUID(), $guids));
+ $value = get_private_setting($entity->getGUID(), $setting_name);
+ $this->assertEqual($value, $setting_value);
+ }
+
+ // simple test with value
+ $options = array(
+ 'private_setting_value' => $setting_value
+ );
+
+ $entities = elgg_get_entities_from_private_settings($options);
+
+ foreach ($entities as $entity) {
+ $this->assertTrue(in_array($entity->getGUID(), $guids));
+ $value = get_private_setting($entity->getGUID(), $setting_name);
+ $this->assertEqual($value, $setting_value);
+ }
+
+ // test pairs
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => $subtype,
+ 'private_setting_name_value_pairs' => array(
+ array(
+ 'name' => $setting_name,
+ 'value' => $setting_value
+ ),
+ array(
+ 'name' => $setting_name2,
+ 'value' => $setting_value2
+ )
+ )
+ );
+
+ $entities = elgg_get_entities_from_private_settings($options);
+ $this->assertEqual(2, count($entities));
+ foreach ($entities as $entity) {
+ $this->assertTrue(in_array($entity->getGUID(), $guids));
+ }
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+ /**
+ * Location
+ */
+ public function testElggApiGettersEntitiesFromLocation() {
+
+ // a test location that is out of this world
+ $lat = 500;
+ $long = 500;
+ $delta = 5;
+
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 1);
+ $subtype = $subtypes[0];
+ $guids = array();
+
+ // our objects
+ $valid = new ElggObject();
+ $valid->subtype = $subtype;
+ $valid->save();
+ $guids[] = $valid->getGUID();
+ $valid->setLatLong($lat, $long);
+
+ $valid2 = new ElggObject();
+ $valid2->subtype = $subtype;
+ $valid2->save();
+ $guids[] = $valid2->getGUID();
+ $valid2->setLatLong($lat + 2 * $delta, $long + 2 * $delta);
+
+ // limit to first object
+ $options = array(
+ 'latitude' => $lat,
+ 'longitude' => $long,
+ 'distance' => $delta
+ );
+
+ //global $CONFIG;
+ //$CONFIG->debug = 'NOTICE';
+ $entities = elgg_get_entities_from_location($options);
+ //unset($CONFIG->debug);
+
+ $this->assertEqual(1, count($entities));
+ $this->assertEqual($entities[0]->getGUID(), $valid->getGUID());
+
+ // get both objects
+ $options = array(
+ 'latitude' => $lat,
+ 'longitude' => $long,
+ 'distance' => array('latitude' => 2 * $delta, 'longitude' => 2 * $delta)
+ );
+
+ $entities = elgg_get_entities_from_location($options);
+
+ $this->assertEqual(2, count($entities));
+ foreach ($entities as $entity) {
+ $this->assertTrue(in_array($entity->getGUID(), $guids));
+ }
+
+ foreach ($guids as $guid) {
+ if ($e = get_entity($guid)) {
+ $e->delete();
+ }
+ }
+ }
+
+
+ public function testElggGetEntitiesFromRelationshipCount() {
+ $entities = $this->entities;
+ $relationships = array();
+ $count = count($entities);
+ $max = $count - 1;
+ $relationship_name = 'test_relationship_' . rand(0, 1000);
+
+ for ($i = 0; $i < $count; $i++) {
+ do {
+ $popular_entity = $entities[array_rand($entities)];
+ } while (array_key_exists($popular_entity->guid, $relationships));
+
+ $relationships[$popular_entity->guid] = array();
+
+ for ($c = 0; $c < $max; $c++) {
+ do {
+ $fan_entity = $entities[array_rand($entities)];
+ } while ($fan_entity->guid == $popular_entity->guid || in_array($fan_entity->guid, $relationships[$popular_entity->guid]));
+
+ $relationships[$popular_entity->guid][] = $fan_entity->guid;
+ add_entity_relationship($fan_entity->guid, $relationship_name, $popular_entity->guid);
+ }
+
+ $max--;
+ }
+
+ $options = array(
+ 'relationship' => $relationship_name,
+ 'limit' => $count
+ );
+
+ $entities = elgg_get_entities_from_relationship_count($options);
+
+ foreach ($entities as $e) {
+ $options = array(
+ 'relationship' => $relationship_name,
+ 'limit' => 100,
+ 'relationship_guid' => $e->guid,
+ 'inverse_relationship' => true
+ );
+
+ $fan_entities = elgg_get_entities_from_relationship($options);
+
+ $this->assertEqual(count($fan_entities), count($relationships[$e->guid]));
+
+ foreach ($fan_entities as $fan_entity) {
+ $this->assertTrue(in_array($fan_entity->guid, $relationships[$e->guid]));
+ $this->assertNotIdentical(false, check_entity_relationship($fan_entity->guid, $relationship_name, $e->guid));
+ }
+ }
+ }
+
+ public function testElggGetEntitiesByGuidSingular() {
+ foreach ($this->entities as $e) {
+ $options = array(
+ 'guid' => $e->guid
+ );
+ $es = elgg_get_entities($options);
+
+ $this->assertEqual(count($es), 1);
+ $this->assertEqual($es[0]->guid, $e->guid);
+ }
+ }
+
+ public function testElggGetEntitiesByGuidPlural() {
+ $guids = array();
+
+ foreach ($this->entities as $e) {
+ $guids[] = $e->guid;
+ }
+
+ $options = array(
+ 'guids' => $guids,
+ 'limit' => 100
+ );
+
+ $es = elgg_get_entities($options);
+
+ $this->assertEqual(count($es), count($this->entities));
+
+ foreach ($es as $e) {
+ $this->assertTrue(in_array($e->guid, $guids));
+ }
+ }
+
+ public function testElggGetEntitiesFromAnnotationsCalculateX() {
+ $types = array(
+ 'sum',
+ 'avg',
+ 'min',
+ 'max'
+ );
+
+ foreach ($types as $type) {
+ $subtypes = $this->getRandomValidSubtypes(array('object'), 5);
+ $name = 'test_annotation_' . rand(0, 9999);
+ $values = array();
+ $options = array(
+ 'types' => 'object',
+ 'subtypes' => $subtypes,
+ 'limit' => 5
+ );
+
+ $es = elgg_get_entities($options);
+
+ foreach ($es as $e) {
+ $value = rand(0,9999);
+ $e->annotate($name, $value);
+
+ $value2 = rand(0,9999);
+ $e->annotate($name, $value2);
+
+ switch ($type) {
+ case 'sum':
+ $calc_value = $value + $value2;
+ break;
+
+ case 'avg':
+ $calc_value = ($value + $value2) / 2;
+ break;
+
+ case 'min':
+ $calc_value = min(array($value, $value2));
+ break;
+
+ case 'max':
+ $calc_value = max(array($value, $value2));
+ break;
+ }
+
+ $values[$e->guid] = $calc_value;
+ }
+
+ arsort($values);
+ $order = array_keys($values);
+
+ $options = array(
+ 'types' => 'object',
+ 'subtypes' => $subtypes,
+ 'limit' => 5,
+ 'annotation_name' => $name,
+ 'calculation' => $type
+ );
+
+ $es = elgg_get_entities_from_annotation_calculation($options);
+
+ foreach ($es as $i => $e) {
+ $value = 0;
+ $as = $e->getAnnotations($name);
+ // should only ever be 2
+ $this->assertEqual(2, count($as));
+
+ $value = $as[0]->value;
+ $value2 = $as[1]->value;
+
+ switch ($type) {
+ case 'sum':
+ $calc_value = $value + $value2;
+ break;
+
+ case 'avg':
+ $calc_value = ($value + $value2) / 2;
+ break;
+
+ case 'min':
+ $calc_value = min(array($value, $value2));
+ break;
+
+ case 'max':
+ $calc_value = max(array($value, $value2));
+ break;
+ }
+
+ $this->assertEqual($e->guid, $order[$i]);
+ $this->assertEqual($values[$e->guid], $calc_value);
+ }
+ }
+ }
+
+ public function testElggGetAnnotationsAnnotationNames() {
+ $options = array('annotation_names' => array());
+ $a_e_map = array();
+
+ // create test annotations on a few entities.
+ for ($i=0; $i<3; $i++) {
+ do {
+ $e = $this->entities[array_rand($this->entities)];
+ } while(in_array($e->guid, $a_e_map));
+ $annotations = $this->createRandomAnnotations($e);
+
+ foreach($annotations as $a) {
+ $options['annotation_names'][] = $a->name;
+ $a_e_map[$a->id] = $e->guid;
+ }
+ }
+
+ $as = elgg_get_annotations($options);
+
+ $this->assertEqual(count($a_e_map), count($as));
+
+ foreach ($as as $a) {
+ $this->assertEqual($a_e_map[$a->id], $a->entity_guid);
+ }
+ }
+
+ public function testElggGetAnnotationsAnnotationValues() {
+ $options = array('annotation_values' => array());
+ $a_e_map = array();
+
+ // create test annotations on a few entities.
+ for ($i=0; $i<3; $i++) {
+ do {
+ $e = $this->entities[array_rand($this->entities)];
+ } while(in_array($e->guid, $a_e_map));
+ $annotations = $this->createRandomAnnotations($e);
+
+ foreach($annotations as $a) {
+ $options['annotation_values'][] = $a->value;
+ $a_e_map[$a->id] = $e->guid;
+ }
+ }
+
+ $as = elgg_get_annotations($options);
+
+ $this->assertEqual(count($a_e_map), count($as));
+
+ foreach ($as as $a) {
+ $this->assertEqual($a_e_map[$a->id], $a->entity_guid);
+ }
+ }
+
+ public function testElggGetAnnotationsAnnotationOwnerGuids() {
+ $options = array('annotation_owner_guids' => array());
+ $a_e_map = array();
+
+ // create test annotations on a single entity
+ for ($i=0; $i<3; $i++) {
+ do {
+ $e = $this->entities[array_rand($this->entities)];
+ } while(in_array($e->guid, $a_e_map));
+
+ // remove annotations left over from previous tests.
+ elgg_delete_annotations(array('annotation_owner_guid' => $e->guid));
+ $annotations = $this->createRandomAnnotations($e);
+
+ foreach($annotations as $a) {
+ $options['annotation_owner_guids'][] = $e->guid;
+ $a_e_map[$a->id] = $e->guid;
+ }
+ }
+
+ $as = elgg_get_annotations($options);
+ $this->assertEqual(count($a_e_map), count($as));
+
+ foreach ($as as $a) {
+ $this->assertEqual($a_e_map[$a->id], $a->owner_guid);
+ }
+ }
+
+ public function testElggGetEntitiesBadWheres() {
+ $options = array(
+ 'container_guid' => 'abc'
+ );
+
+ $entities = elgg_get_entities($options);
+ $this->assertFalse($entities);
+ }
+}
diff --git a/engine/tests/api/helpers.php b/engine/tests/api/helpers.php
new file mode 100644
index 000000000..62e4471e0
--- /dev/null
+++ b/engine/tests/api/helpers.php
@@ -0,0 +1,604 @@
+<?php
+/**
+ * Elgg Test helper functions
+ *
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreHelpersTest extends ElggCoreUnitTest {
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ parent::__construct();
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+
+ global $CONFIG;
+ unset($CONFIG->externals);
+ unset($CONFIG->externals_map);
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ // all __destruct() code should go above here
+ parent::__destruct();
+ }
+
+ /**
+ * Test elgg_instanceof()
+ */
+ public function testElggInstanceOf() {
+ $entity = new ElggObject();
+ $entity->subtype = 'test_subtype';
+ $entity->save();
+
+ $this->assertTrue(elgg_instanceof($entity));
+ $this->assertTrue(elgg_instanceof($entity, 'object'));
+ $this->assertTrue(elgg_instanceof($entity, 'object', 'test_subtype'));
+
+ $this->assertFalse(elgg_instanceof($entity, 'object', 'invalid_subtype'));
+ $this->assertFalse(elgg_instanceof($entity, 'user', 'test_subtype'));
+
+ $entity->delete();
+
+ $bad_entity = FALSE;
+ $this->assertFalse(elgg_instanceof($bad_entity));
+ $this->assertFalse(elgg_instanceof($bad_entity, 'object'));
+ $this->assertFalse(elgg_instanceof($bad_entity, 'object', 'test_subtype'));
+
+ remove_subtype('object', 'test_subtype');
+ }
+
+ /**
+ * Test elgg_normalize_url()
+ */
+ public function testElggNormalizeURL() {
+ $conversions = array(
+ 'http://example.com' => 'http://example.com',
+ 'https://example.com' => 'https://example.com',
+ 'http://example-time.com' => 'http://example-time.com',
+
+ '//example.com' => '//example.com',
+ 'ftp://example.com/file' => 'ftp://example.com/file',
+ 'mailto:brett@elgg.org' => 'mailto:brett@elgg.org',
+ 'javascript:alert("test")' => 'javascript:alert("test")',
+ 'app://endpoint' => 'app://endpoint',
+
+ 'example.com' => 'http://example.com',
+ 'example.com/subpage' => 'http://example.com/subpage',
+
+ 'page/handler' => elgg_get_site_url() . 'page/handler',
+ 'page/handler?p=v&p2=v2' => elgg_get_site_url() . 'page/handler?p=v&p2=v2',
+ 'mod/plugin/file.php' => elgg_get_site_url() . 'mod/plugin/file.php',
+ 'mod/plugin/file.php?p=v&p2=v2' => elgg_get_site_url() . 'mod/plugin/file.php?p=v&p2=v2',
+ 'rootfile.php' => elgg_get_site_url() . 'rootfile.php',
+ 'rootfile.php?p=v&p2=v2' => elgg_get_site_url() . 'rootfile.php?p=v&p2=v2',
+
+ '/page/handler' => elgg_get_site_url() . 'page/handler',
+ '/page/handler?p=v&p2=v2' => elgg_get_site_url() . 'page/handler?p=v&p2=v2',
+ '/mod/plugin/file.php' => elgg_get_site_url() . 'mod/plugin/file.php',
+ '/mod/plugin/file.php?p=v&p2=v2' => elgg_get_site_url() . 'mod/plugin/file.php?p=v&p2=v2',
+ '/rootfile.php' => elgg_get_site_url() . 'rootfile.php',
+ '/rootfile.php?p=v&p2=v2' => elgg_get_site_url() . 'rootfile.php?p=v&p2=v2',
+ );
+
+ foreach ($conversions as $input => $output) {
+ $this->assertIdentical($output, elgg_normalize_url($input));
+ }
+ }
+
+
+ /**
+ * Test elgg_register_js()
+ */
+ public function testElggRegisterJS() {
+ global $CONFIG;
+
+ // specify name
+ $result = elgg_register_js('key', 'http://test1.com', 'footer');
+ $this->assertTrue($result);
+ $this->assertTrue(isset($CONFIG->externals_map['js']['key']));
+
+ $item = $CONFIG->externals_map['js']['key'];
+ $this->assertTrue($CONFIG->externals['js']->contains($item));
+
+ $priority = $CONFIG->externals['js']->getPriority($item);
+ $this->assertTrue($priority !== false);
+
+ $item = $CONFIG->externals['js']->getElement($priority);
+ $this->assertIdentical('http://test1.com', $item->url);
+
+ // send a bad url
+ $result = elgg_register_js('bad', null);
+ $this->assertFalse($result);
+ }
+
+ /**
+ * Test elgg_register_css()
+ */
+ public function testElggRegisterCSS() {
+ global $CONFIG;
+
+ // specify name
+ $result = elgg_register_css('key', 'http://test1.com');
+ $this->assertTrue($result);
+ $this->assertTrue(isset($CONFIG->externals_map['css']['key']));
+
+ $item = $CONFIG->externals_map['css']['key'];
+ $this->assertTrue($CONFIG->externals['css']->contains($item));
+
+ $priority = $CONFIG->externals['css']->getPriority($item);
+ $this->assertTrue($priority !== false);
+
+ $item = $CONFIG->externals['css']->getElement($priority);
+ $this->assertIdentical('http://test1.com', $item->url);
+ }
+
+ /**
+ * Test elgg_unregister_js()
+ */
+ public function testElggUnregisterJS() {
+ global $CONFIG;
+
+ $base = trim(elgg_get_site_url(), "/");
+
+ $urls = array('id1' => "$base/urla", 'id2' => "$base/urlb", 'id3' => "$base/urlc");
+
+ foreach ($urls as $id => $url) {
+ elgg_register_js($id, $url);
+ }
+
+ $result = elgg_unregister_js('id1');
+ $this->assertTrue($result);
+
+ $js = $CONFIG->externals['js'];
+ $elements = $js->getElements();
+ $this->assertFalse(isset($CONFIG->externals_map['js']['id1']));
+
+ foreach ($elements as $element) {
+ if (isset($element->name)) {
+ $this->assertFalse($element->name == 'id1');
+ }
+ }
+
+ $result = elgg_unregister_js('id1');
+ $this->assertFalse($result);
+
+ $result = elgg_unregister_js('', 'does_not_exist');
+ $this->assertFalse($result);
+
+ $result = elgg_unregister_js('id2');
+ $elements = $js->getElements();
+
+ $this->assertFalse(isset($CONFIG->externals_map['js']['id2']));
+ foreach ($elements as $element) {
+ if (isset($element->name)) {
+ $this->assertFalse($element->name == 'id2');
+ }
+ }
+
+ $this->assertTrue(isset($CONFIG->externals_map['js']['id3']));
+
+ $priority = $CONFIG->externals['js']->getPriority($CONFIG->externals_map['js']['id3']);
+ $this->assertTrue($priority !== false);
+
+ $item = $CONFIG->externals['js']->getElement($priority);
+ $this->assertIdentical($urls['id3'], $item->url);
+ }
+
+ /**
+ * Test elgg_load_js()
+ */
+ public function testElggLoadJS() {
+ global $CONFIG;
+
+ // load before register
+ elgg_load_js('key');
+ $result = elgg_register_js('key', 'http://test1.com', 'footer');
+ $this->assertTrue($result);
+
+ $js_urls = elgg_get_loaded_js('footer');
+ $this->assertIdentical(array(500 => 'http://test1.com'), $js_urls);
+ }
+
+ /**
+ * Test elgg_get_loaded_js()
+ */
+ public function testElggGetJS() {
+ global $CONFIG;
+
+ $base = trim(elgg_get_site_url(), "/");
+
+ $urls = array(
+ 'id1' => "$base/urla",
+ 'id2' => "$base/urlb",
+ 'id3' => "$base/urlc"
+ );
+
+ foreach ($urls as $id => $url) {
+ elgg_register_js($id, $url);
+ elgg_load_js($id);
+ }
+
+ $js_urls = elgg_get_loaded_js('head');
+
+ $this->assertIdentical($js_urls[500], $urls['id1']);
+ $this->assertIdentical($js_urls[501], $urls['id2']);
+ $this->assertIdentical($js_urls[502], $urls['id3']);
+
+ $js_urls = elgg_get_loaded_js('footer');
+ $this->assertIdentical(array(), $js_urls);
+ }
+
+ // test ElggPriorityList
+ public function testElggPriorityListAdd() {
+ $pl = new ElggPriorityList();
+ $elements = array(
+ 'Test value',
+ 'Test value 2',
+ 'Test value 3'
+ );
+
+ shuffle($elements);
+
+ foreach ($elements as $element) {
+ $this->assertTrue($pl->add($element) !== false);
+ }
+
+ $test_elements = $pl->getElements();
+
+ $this->assertTrue(is_array($test_elements));
+
+ foreach ($test_elements as $i => $element) {
+ // should be in the array
+ $this->assertTrue(in_array($element, $elements));
+
+ // should be the only element, so priority 0
+ $this->assertEqual($i, array_search($element, $elements));
+ }
+ }
+
+ public function testElggPriorityListAddWithPriority() {
+ $pl = new ElggPriorityList();
+
+ $elements = array(
+ 10 => 'Test Element 10',
+ 5 => 'Test Element 5',
+ 0 => 'Test Element 0',
+ 100 => 'Test Element 100',
+ -1 => 'Test Element -1',
+ -5 => 'Test Element -5'
+ );
+
+ foreach ($elements as $priority => $element) {
+ $pl->add($element, $priority);
+ }
+
+ $test_elements = $pl->getElements();
+
+ // should be sorted by priority
+ $elements_sorted = array(
+ -5 => 'Test Element -5',
+ -1 => 'Test Element -1',
+ 0 => 'Test Element 0',
+ 5 => 'Test Element 5',
+ 10 => 'Test Element 10',
+ 100 => 'Test Element 100',
+ );
+
+ $this->assertIdentical($elements_sorted, $test_elements);
+
+ foreach ($test_elements as $priority => $element) {
+ $this->assertIdentical($elements[$priority], $element);
+ }
+ }
+
+ public function testElggPriorityListGetNextPriority() {
+ $pl = new ElggPriorityList();
+
+ $elements = array(
+ 2 => 'Test Element',
+ 0 => 'Test Element 2',
+ -2 => 'Test Element 3',
+ );
+
+ foreach ($elements as $priority => $element) {
+ $pl->add($element, $priority);
+ }
+
+ // we're not specifying a priority so it should be the next consecutive to 0.
+ $this->assertEqual(1, $pl->getNextPriority());
+
+ // add another one at priority 1
+ $pl->add('Test Element 1');
+
+ // next consecutive to 0 is now 3.
+ $this->assertEqual(3, $pl->getNextPriority());
+ }
+
+ public function testElggPriorityListRemove() {
+ $pl = new ElggPriorityList();
+
+ $elements = array();
+ for ($i=0; $i<3; $i++) {
+ $element = new stdClass();
+ $element->name = "Test Element $i";
+ $element->someAttribute = rand(0, 9999);
+ $elements[] = $element;
+ $pl->add($element);
+ }
+
+ $pl->remove($elements[1]);
+
+ $test_elements = $pl->getElements();
+
+ // make sure it's gone.
+ $this->assertEqual(2, count($test_elements));
+ $this->assertIdentical($elements[0], $test_elements[0]);
+ $this->assertIdentical($elements[2], $test_elements[2]);
+ }
+
+ public function testElggPriorityListMove() {
+ $pl = new ElggPriorityList();
+
+ $elements = array(
+ -5 => 'Test Element -5',
+ 0 => 'Test Element 0',
+ 5 => 'Test Element 5',
+ );
+
+ foreach ($elements as $priority => $element) {
+ $pl->add($element, $priority);
+ }
+
+ $this->assertEqual($pl->move($elements[-5], 10), 10);
+
+ // check it's at the new place
+ $this->assertIdentical($elements[-5], $pl->getElement(10));
+
+ // check it's not at the old
+ $this->assertFalse($pl->getElement(-5));
+ }
+
+ public function testElggPriorityListConstructor() {
+ $elements = array(
+ 10 => 'Test Element 10',
+ 5 => 'Test Element 5',
+ 0 => 'Test Element 0',
+ 100 => 'Test Element 100',
+ -1 => 'Test Element -1',
+ -5 => 'Test Element -5'
+ );
+
+ $pl = new ElggPriorityList($elements);
+ $test_elements = $pl->getElements();
+
+ $elements_sorted = array(
+ -5 => 'Test Element -5',
+ -1 => 'Test Element -1',
+ 0 => 'Test Element 0',
+ 5 => 'Test Element 5',
+ 10 => 'Test Element 10',
+ 100 => 'Test Element 100',
+ );
+
+ $this->assertIdentical($elements_sorted, $test_elements);
+ }
+
+ public function testElggPriorityListGetPriority() {
+ $pl = new ElggPriorityList();
+
+ $elements = array(
+ 'Test element 0',
+ 'Test element 1',
+ 'Test element 2',
+ );
+
+ foreach ($elements as $element) {
+ $pl->add($element);
+ }
+
+ $this->assertIdentical(0, $pl->getPriority($elements[0]));
+ $this->assertIdentical(1, $pl->getPriority($elements[1]));
+ $this->assertIdentical(2, $pl->getPriority($elements[2]));
+ }
+
+ public function testElggPriorityListGetElement() {
+ $pl = new ElggPriorityList();
+ $priorities = array();
+
+ $elements = array(
+ 'Test element 0',
+ 'Test element 1',
+ 'Test element 2',
+ );
+
+ foreach ($elements as $element) {
+ $priorities[] = $pl->add($element);
+ }
+
+ $this->assertIdentical($elements[0], $pl->getElement($priorities[0]));
+ $this->assertIdentical($elements[1], $pl->getElement($priorities[1]));
+ $this->assertIdentical($elements[2], $pl->getElement($priorities[2]));
+ }
+
+ public function testElggPriorityListPriorityCollision() {
+ $pl = new ElggPriorityList();
+
+ $elements = array(
+ 5 => 'Test element 5',
+ 6 => 'Test element 6',
+ 0 => 'Test element 0',
+ );
+
+ foreach ($elements as $priority => $element) {
+ $pl->add($element, $priority);
+ }
+
+ // add at a colliding priority
+ $pl->add('Colliding element', 5);
+
+ // should float to the top closest to 5, so 7
+ $this->assertEqual(7, $pl->getPriority('Colliding element'));
+ }
+
+ public function testElggPriorityListIterator() {
+ $elements = array(
+ -5 => 'Test element -5',
+ 0 => 'Test element 0',
+ 5 => 'Test element 5'
+ );
+
+ $pl = new ElggPriorityList($elements);
+
+ foreach ($pl as $priority => $element) {
+ $this->assertIdentical($elements[$priority], $element);
+ }
+ }
+
+ public function testElggPriorityListCountable() {
+ $pl = new ElggPriorityList();
+
+ $this->assertEqual(0, count($pl));
+
+ $pl->add('Test element 0');
+ $this->assertEqual(1, count($pl));
+
+ $pl->add('Test element 1');
+ $this->assertEqual(2, count($pl));
+
+ $pl->add('Test element 2');
+ $this->assertEqual(3, count($pl));
+ }
+
+ public function testElggPriorityListUserSort() {
+ $elements = array(
+ 'A',
+ 'B',
+ 'C',
+ 'D',
+ 'E',
+ );
+
+ $elements_sorted_string = $elements;
+
+ shuffle($elements);
+ $pl = new ElggPriorityList($elements);
+
+ // will sort by priority
+ $test_elements = $pl->getElements();
+ $this->assertIdentical($elements, $test_elements);
+
+ function test_sort($elements) {
+ sort($elements, SORT_LOCALE_STRING);
+ return $elements;
+ }
+
+ // force a new sort using our function
+ $pl->sort('test_sort');
+ $test_elements = $pl->getElements();
+
+ $this->assertIdentical($elements_sorted_string, $test_elements);
+ }
+
+ // see http://trac.elgg.org/ticket/4288
+ public function testElggBatchIncOffset() {
+ // normal increment
+ $options = array(
+ 'offset' => 0,
+ 'limit' => 11
+ );
+ $batch = new ElggBatch(array('ElggCoreHelpersTest', 'elgg_batch_callback_test'), $options,
+ null, 5);
+ $j = 0;
+ foreach ($batch as $e) {
+ $offset = floor($j / 5) * 5;
+ $this->assertEqual($offset, $e['offset']);
+ $this->assertEqual($j + 1, $e['index']);
+ $j++;
+ }
+
+ $this->assertEqual(11, $j);
+
+ // no increment, 0 start
+ ElggCoreHelpersTest::elgg_batch_callback_test(array(), true);
+ $options = array(
+ 'offset' => 0,
+ 'limit' => 11
+ );
+ $batch = new ElggBatch(array('ElggCoreHelpersTest', 'elgg_batch_callback_test'), $options,
+ null, 5);
+ $batch->setIncrementOffset(false);
+
+ $j = 0;
+ foreach ($batch as $e) {
+ $this->assertEqual(0, $e['offset']);
+ // should always be the same 5
+ $this->assertEqual($e['index'], $j + 1 - (floor($j / 5) * 5));
+ $j++;
+ }
+ $this->assertEqual(11, $j);
+
+ // no increment, 3 start
+ ElggCoreHelpersTest::elgg_batch_callback_test(array(), true);
+ $options = array(
+ 'offset' => 3,
+ 'limit' => 11
+ );
+ $batch = new ElggBatch(array('ElggCoreHelpersTest', 'elgg_batch_callback_test'), $options,
+ null, 5);
+ $batch->setIncrementOffset(false);
+
+ $j = 0;
+ foreach ($batch as $e) {
+ $this->assertEqual(3, $e['offset']);
+ // same 5 results
+ $this->assertEqual($e['index'], $j + 4 - (floor($j / 5) * 5));
+ $j++;
+ }
+
+ $this->assertEqual(11, $j);
+ }
+
+ static function elgg_batch_callback_test($options, $reset = false) {
+ static $count = 1;
+
+ if ($reset) {
+ $count = 1;
+ return true;
+ }
+
+ if ($count > 20) {
+ return false;
+ }
+
+ for ($j = 0; ($options['limit'] < 5) ? $j < $options['limit'] : $j < 5; $j++) {
+ $return[] = array(
+ 'offset' => $options['offset'],
+ 'limit' => $options['limit'],
+ 'count' => $count++,
+ 'index' => 1 + $options['offset'] + $j
+ );
+ }
+
+ return $return;
+ }
+} \ No newline at end of file
diff --git a/engine/tests/api/metadata.php b/engine/tests/api/metadata.php
new file mode 100644
index 000000000..825290d80
--- /dev/null
+++ b/engine/tests/api/metadata.php
@@ -0,0 +1,216 @@
+<?php
+/**
+ * Elgg Test metadata API
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreMetadataAPITest extends ElggCoreUnitTest {
+ protected $metastrings;
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+ $this->metastrings = array();
+ $this->object = new ElggObject();
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+
+ unset($this->object);
+ }
+
+ public function testGetMetastringById() {
+ foreach (array('metaUnitTest', 'metaunittest', 'METAUNITTEST') as $string) {
+ // since there is no guarantee that metastrings are garbage collected
+ // between unit test runs, we delete before testing
+ $this->delete_metastrings($string);
+ $this->create_metastring($string);
+ }
+
+ // lookup metastring id
+ $cs_ids = get_metastring_id('metaUnitTest', TRUE);
+ $this->assertEqual($cs_ids, $this->metastrings['metaUnitTest']);
+
+ // lookup all metastrings, ignoring case
+ $cs_ids = get_metastring_id('metaUnitTest', FALSE);
+ $this->assertEqual(count($cs_ids), 3);
+ $this->assertEqual(count($cs_ids), count($this->metastrings));
+ foreach ($cs_ids as $string )
+ {
+ $this->assertTrue(in_array($string, $this->metastrings));
+ }
+ }
+
+ public function testElggGetEntitiesFromMetadata() {
+ global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
+ $METASTRINGS_CACHE = $METASTRINGS_DEADNAME_CACHE = array();
+
+ $this->object->title = 'Meta Unit Test';
+ $this->object->save();
+ $this->create_metastring('metaUnitTest');
+ $this->create_metastring('tested');
+
+ // create_metadata returns id of metadata on success
+ $this->assertNotEqual(false, create_metadata($this->object->guid, 'metaUnitTest', 'tested'));
+
+ // check value with improper case
+ $options = array('metadata_names' => 'metaUnitTest', 'metadata_values' => 'Tested', 'limit' => 10, 'metadata_case_sensitive' => TRUE);
+ $this->assertIdentical(array(), elgg_get_entities_from_metadata($options));
+
+ // compare forced case with ignored case
+ $options = array('metadata_names' => 'metaUnitTest', 'metadata_values' => 'tested', 'limit' => 10, 'metadata_case_sensitive' => TRUE);
+ $case_true = elgg_get_entities_from_metadata($options);
+ $this->assertIsA($case_true, 'array');
+
+ $options = array('metadata_names' => 'metaUnitTest', 'metadata_values' => 'Tested', 'limit' => 10, 'metadata_case_sensitive' => FALSE);
+ $case_false = elgg_get_entities_from_metadata($options);
+ $this->assertIsA($case_false, 'array');
+
+ $this->assertIdentical($case_true, $case_false);
+
+ // clean up
+ $this->object->delete();
+ }
+
+ public function testElggGetMetadataCount() {
+ $this->object->title = 'Meta Unit Test';
+ $this->object->save();
+
+ $guid = $this->object->getGUID();
+ create_metadata($guid, 'tested', 'tested1', 'text', 0, ACCESS_PUBLIC, true);
+ create_metadata($guid, 'tested', 'tested2', 'text', 0, ACCESS_PUBLIC, true);
+
+ $count = (int)elgg_get_metadata(array(
+ 'metadata_names' => array('tested'),
+ 'guid' => $guid,
+ 'count' => true,
+ ));
+
+ $this->assertIdentical($count, 2);
+
+ $this->object->delete();
+ }
+
+ public function testElggDeleteMetadata() {
+ $e = new ElggObject();
+ $e->save();
+
+ for ($i = 0; $i < 30; $i++) {
+ $name = "test_metadata$i";
+ $e->$name = rand(0, 10000);
+ }
+
+ $options = array(
+ 'guid' => $e->getGUID(),
+ 'limit' => 0,
+ );
+
+ $md = elgg_get_metadata($options);
+ $this->assertIdentical(30, count($md));
+
+ $this->assertTrue(elgg_delete_metadata($options));
+
+ $md = elgg_get_metadata($options);
+ $this->assertTrue(empty($md));
+
+ $e->delete();
+ }
+
+ // Make sure metadata with multiple values is correctly deleted when re-written
+ // by another user
+ // http://trac.elgg.org/ticket/2776
+ public function test_elgg_metadata_multiple_values() {
+ $u1 = new ElggUser();
+ $u1->username = rand();
+ $u1->save();
+
+ $u2 = new ElggUser();
+ $u2->username = rand();
+ $u2->save();
+
+ $obj = new ElggObject();
+ $obj->owner_guid = $u1->guid;
+ $obj->container_guid = $u1->guid;
+ $obj->access_id = ACCESS_PUBLIC;
+ $obj->save();
+
+ $md_values = array(
+ 'one',
+ 'two',
+ 'three'
+ );
+
+ // need to fake different logins.
+ // good times without mocking.
+ $original_user = elgg_get_logged_in_user_entity();
+ $_SESSION['user'] = $u1;
+
+ elgg_set_ignore_access(false);
+
+ // add metadata as one user
+ $obj->test = $md_values;
+
+ // check only these md exists
+ $db_prefix = elgg_get_config('dbprefix');
+ $q = "SELECT * FROM {$db_prefix}metadata WHERE entity_guid = $obj->guid";
+ $data = get_data($q);
+
+ $this->assertEqual(count($md_values), count($data));
+ foreach ($data as $md_row) {
+ $md = elgg_get_metadata_from_id($md_row->id);
+ $this->assertTrue(in_array($md->value, $md_values));
+ $this->assertEqual('test', $md->name);
+ }
+
+ // add md w/ same name as a different user
+ $_SESSION['user'] = $u2;
+ $md_values2 = array(
+ 'four',
+ 'five',
+ 'six',
+ 'seven'
+ );
+
+ $obj->test = $md_values2;
+
+ $q = "SELECT * FROM {$db_prefix}metadata WHERE entity_guid = $obj->guid";
+ $data = get_data($q);
+
+ $this->assertEqual(count($md_values2), count($data));
+ foreach ($data as $md_row) {
+ $md = elgg_get_metadata_from_id($md_row->id);
+ $this->assertTrue(in_array($md->value, $md_values2));
+ $this->assertEqual('test', $md->name);
+ }
+
+ $_SESSION['user'] = $original_user;
+
+ $obj->delete();
+ $u1->delete();
+ $u2->delete();
+ }
+
+ protected function delete_metastrings($string) {
+ global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
+ $METASTRINGS_CACHE = $METASTRINGS_DEADNAME_CACHE = array();
+
+ $string = sanitise_string($string);
+ mysql_query("DELETE FROM {$CONFIG->dbprefix}metastrings WHERE string = BINARY '$string'");
+ }
+
+ protected function create_metastring($string) {
+ global $CONFIG, $METASTRINGS_CACHE, $METASTRINGS_DEADNAME_CACHE;
+ $METASTRINGS_CACHE = $METASTRINGS_DEADNAME_CACHE = array();
+
+ $string = sanitise_string($string);
+ mysql_query("INSERT INTO {$CONFIG->dbprefix}metastrings (string) VALUES ('$string')");
+ $this->metastrings[$string] = mysql_insert_id();
+ }
+}
diff --git a/engine/tests/api/metadata_cache.php b/engine/tests/api/metadata_cache.php
new file mode 100644
index 000000000..846116a7b
--- /dev/null
+++ b/engine/tests/api/metadata_cache.php
@@ -0,0 +1,169 @@
+<?php
+/**
+ * Elgg Test metadata cache
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreMetadataCacheTest extends ElggCoreUnitTest {
+
+ /**
+ * @var ElggVolatileMetadataCache
+ */
+ protected $cache;
+
+ /**
+ * @var ElggObject
+ */
+ protected $obj1;
+
+ /**
+ * @var int
+ */
+ protected $guid1;
+
+ /**
+ * @var ElggObject
+ */
+ protected $obj2;
+
+ /**
+ * @var int
+ */
+ protected $guid2;
+
+ protected $name = 'test';
+ protected $value = 'test';
+ protected $ignoreAccess;
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+ $this->ignoreAccess = elgg_set_ignore_access(false);
+
+ $this->cache = elgg_get_metadata_cache();
+
+ $this->obj1 = new ElggObject();
+ $this->obj1->save();
+ $this->guid1 = $this->obj1->guid;
+
+ $this->obj2 = new ElggObject();
+ $this->obj2->save();
+ $this->guid2 = $this->obj2->guid;
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ $this->obj1->delete();
+ $this->obj2->delete();
+
+ elgg_set_ignore_access($this->ignoreAccess);
+ }
+
+ public function testBasicApi() {
+ // test de-coupled instance
+ $cache = new ElggVolatileMetadataCache();
+ $cache->setIgnoreAccess(false);
+ $guid = 1;
+
+ $this->assertFalse($cache->isKnown($guid, $this->name));
+
+ $cache->markEmpty($guid, $this->name);
+ $this->assertTrue($cache->isKnown($guid, $this->name));
+ $this->assertNull($cache->load($guid, $this->name));
+
+ $cache->markUnknown($guid, $this->name);
+ $this->assertFalse($cache->isKnown($guid, $this->name));
+
+ $cache->save($guid, $this->name, $this->value);
+ $this->assertIdentical($cache->load($guid, $this->name), $this->value);
+
+ $cache->save($guid, $this->name, 1, true);
+ $this->assertIdentical($cache->load($guid, $this->name), array($this->value, 1));
+
+ $cache->clear($guid);
+ $this->assertFalse($cache->isKnown($guid, $this->name));
+ }
+
+ public function testReadsAreCached() {
+ // test that reads fill cache
+ $this->obj1->setMetaData($this->name, $this->value);
+ $this->cache->flush();
+
+ $this->obj1->getMetaData($this->name);
+ $this->assertIdentical($this->cache->load($this->guid1, $this->name), $this->value);
+ }
+
+ public function testWritesAreCached() {
+ // delete should mark cache as known to be empty
+ $this->obj1->deleteMetadata($this->name);
+ $this->assertTrue($this->cache->isKnown($this->guid1, $this->name));
+ $this->assertNull($this->cache->load($this->guid1, $this->name));
+
+ // without name, delete should invalidate the entire entity
+ $this->cache->save($this->guid1, $this->name, $this->value);
+ elgg_delete_metadata(array(
+ 'guid' => $this->guid1,
+ ));
+ $this->assertFalse($this->cache->isKnown($this->guid1, $this->name));
+
+ // test set
+ $this->obj1->setMetaData($this->name, $this->value);
+ $this->assertIdentical($this->cache->load($this->guid1, $this->name), $this->value);
+
+ // test set multiple
+ $this->obj1->setMetaData($this->name, 1, 'integer', true);
+ $this->assertIdentical($this->cache->load($this->guid1, $this->name), array($this->value, 1));
+
+ // writes when access is ignore should invalidate
+ $tmp_ignore = elgg_set_ignore_access(true);
+ $this->obj1->setMetaData($this->name, $this->value);
+ $this->assertFalse($this->cache->isKnown($this->guid1, $this->name));
+ elgg_set_ignore_access($tmp_ignore);
+ }
+
+ public function testDisableAndEnable() {
+ // both should mark cache unknown
+ $this->obj1->setMetaData($this->name, $this->value);
+ $this->obj1->disableMetadata($this->name);
+ $this->assertFalse($this->cache->isKnown($this->guid1, $this->name));
+
+ $this->cache->save($this->guid1, $this->name, $this->value);
+ $this->obj1->enableMetadata($this->name);
+ $this->assertFalse($this->cache->isKnown($this->guid1, $this->name));
+ }
+
+ public function testPopulateFromEntities() {
+ // test populating cache from set of entities
+ $this->obj1->setMetaData($this->name, $this->value);
+ $this->obj1->setMetaData($this->name, 4, 'integer', true);
+ $this->obj1->setMetaData("{$this->name}-2", "{$this->value}-2");
+ $this->obj2->setMetaData($this->name, $this->value);
+
+ $this->cache->flush();
+ $this->cache->populateFromEntities(array($this->guid1, $this->guid2));
+
+ $expected = array();
+ $expected[$this->name][] = $this->value;
+ $expected[$this->name][] = 4;
+ $expected["{$this->name}-2"] = "{$this->value}-2";
+ $this->assertIdentical($this->cache->loadAll($this->guid1), $expected);
+
+ $expected = array();
+ $expected[$this->name] = $this->value;
+ $this->assertIdentical($this->cache->loadAll($this->guid2), $expected);
+ }
+
+ public function testFilterHeavyEntities() {
+ $big_str = str_repeat('-', 5000);
+ $this->obj2->setMetaData($this->name, array($big_str, $big_str));
+
+ $guids = array($this->guid1, $this->guid2);
+ $expected = array($this->guid1);
+ $actual = $this->cache->filterMetadataHeavyEntities($guids, 6000);
+ $this->assertIdentical($actual, $expected);
+ }
+}
diff --git a/engine/tests/api/metastrings.php b/engine/tests/api/metastrings.php
new file mode 100644
index 000000000..0a8945084
--- /dev/null
+++ b/engine/tests/api/metastrings.php
@@ -0,0 +1,190 @@
+<?php
+/**
+ * Elgg Metastrings test
+ *
+ * @package Elgg.Core
+ * @subpackage Metastrings.Test
+ */
+class ElggCoreMetastringsTest extends ElggCoreUnitTest {
+
+ public $metastringTypes = array('metadata', 'annotations');
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ parent::__construct();
+
+ $this->metastrings = array();
+ $this->object = new ElggObject();
+ $this->object->save();
+ }
+
+ public function createAnnotations($max = 1) {
+ $annotations = array();
+ for ($i=0; $i<$max; $i++) {
+ $name = 'test_annotation_name' . rand();
+ $value = 'test_annotation_value' . rand();
+ $id = create_annotation($this->object->guid, $name, $value);
+ $annotations[] = $id;
+ }
+
+ return $annotations;
+ }
+
+ public function createMetadata($max = 1) {
+ $metadata = array();
+ for ($i=0; $i<$max; $i++) {
+ $name = 'test_metadata_name' . rand();
+ $value = 'test_metadata_value' . rand();
+ $id = create_metadata($this->object->guid, $name, $value);
+ $metadata[] = $id;
+ }
+
+ return $metadata;
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ $this->object->delete();
+
+ parent::__destruct();
+ }
+
+ public function testDeleteByID() {
+ $db_prefix = elgg_get_config('dbprefix');
+ $annotations = $this->createAnnotations(1);
+ $metadata = $this->createMetadata(1);
+
+ foreach ($this->metastringTypes as $type) {
+ $id = ${$type}[0];
+ $table = $db_prefix . $type;
+ $q = "SELECT * FROM $table WHERE id = $id";
+ $test = get_data($q);
+
+ $this->assertEqual($test[0]->id, $id);
+ $this->assertIdentical(true, elgg_delete_metastring_based_object_by_id($id, $type));
+ $this->assertIdentical(array(), get_data($q));
+ }
+ }
+
+ public function testGetMetastringObjectFromID() {
+ $db_prefix = elgg_get_config('dbprefix');
+ $annotations = $this->createAnnotations(1);
+ $metadata = $this->createMetadata(1);
+
+ foreach ($this->metastringTypes as $type) {
+ $id = ${$type}[0];
+ $test = elgg_get_metastring_based_object_from_id($id, $type);
+
+ $this->assertEqual($id, $test->id);
+ }
+ }
+
+ public function testEnableDisableByID() {
+ $db_prefix = elgg_get_config('dbprefix');
+ $annotations = $this->createAnnotations(1);
+ $metadata = $this->createMetadata(1);
+
+ foreach ($this->metastringTypes as $type) {
+ $id = ${$type}[0];
+ $table = $db_prefix . $type;
+ $q = "SELECT * FROM $table WHERE id = $id";
+ $test = get_data($q);
+
+ // disable
+ $this->assertEqual($test[0]->enabled, 'yes');
+ $this->assertTrue(elgg_set_metastring_based_object_enabled_by_id($id, 'no', $type));
+
+ $test = get_data($q);
+ $this->assertEqual($test[0]->enabled, 'no');
+
+ // enable
+ $ashe = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+ flush();
+ $this->assertTrue(elgg_set_metastring_based_object_enabled_by_id($id, 'yes', $type));
+
+ $test = get_data($q);
+ $this->assertEqual($test[0]->enabled, 'yes');
+
+ access_show_hidden_entities($ashe);
+ }
+ }
+
+ public function testKeepMeFromDeletingEverything() {
+ foreach ($this->metastringTypes as $type) {
+ $required = array(
+ 'guid', 'guids'
+ );
+
+ switch ($type) {
+ case 'metadata':
+ $metadata_required = array(
+ 'metadata_owner_guid', 'metadata_owner_guids',
+ 'metadata_name', 'metadata_names',
+ 'metadata_value', 'metadata_values'
+ );
+
+ $required = array_merge($required, $metadata_required);
+ break;
+
+ case 'annotations':
+ $annotations_required = array(
+ 'annotation_owner_guid', 'annotation_owner_guids',
+ 'annotation_name', 'annotation_names',
+ 'annotation_value', 'annotation_values'
+ );
+
+ $required = array_merge($required, $annotations_required);
+ break;
+ }
+
+ $options = array();
+ $this->assertFalse(elgg_is_valid_options_for_batch_operation($options, $type));
+
+ // limit alone isn't valid:
+ $options = array('limit' => 10);
+ $this->assertFalse(elgg_is_valid_options_for_batch_operation($options, $type));
+
+ foreach ($required as $key) {
+ $options = array();
+
+ $options[$key] = ELGG_ENTITIES_ANY_VALUE;
+ $this->assertFalse(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = ELGG_ENTITIES_ANY_VALUE");
+
+ $options[$key] = ELGG_ENTITIES_NO_VALUE;
+ $this->assertFalse(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = ELGG_ENTITIES_NO_VALUE");
+
+ $options[$key] = false;
+ $this->assertFalse(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = bool false");
+
+ $options[$key] = true;
+ $this->assertTrue(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = bool true");
+
+ $options[$key] = 'test';
+ $this->assertTrue(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = 'test'");
+
+ $options[$key] = array('test');
+ $this->assertTrue(elgg_is_valid_options_for_batch_operation($options, $type), "Sent $key = array('test')");
+ }
+ }
+ }
+}
diff --git a/engine/tests/api/output.php b/engine/tests/api/output.php
new file mode 100644
index 000000000..c3d5aa8c6
--- /dev/null
+++ b/engine/tests/api/output.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * Test case for ElggAutoP functionality.
+ */
+class ElggCoreOutputAutoPTest extends ElggCoreUnitTest {
+
+ /**
+ * @var ElggAutoP
+ */
+ protected $_autop;
+
+ public function setUp() {
+ $this->_autop = new ElggAutoP();
+ }
+
+ public function testDomRoundtrip() {
+ $d = dir(dirname(dirname(__FILE__)) . '/test_files/output/autop');
+ $in = file_get_contents($d->path . "/domdoc_in.html");
+ $exp = file_get_contents($d->path . "/domdoc_exp.html");
+ $exp = $this->flattenString($exp);
+
+ $doc = new DOMDocument();
+ libxml_use_internal_errors(true);
+ $doc->loadHTML("<html><meta http-equiv='content-type' content='text/html; charset=utf-8'><body>"
+ . $in . '</body></html>');
+ $serialized = $doc->saveHTML();
+ list(,$out) = explode('<body>', $serialized, 2);
+ list($out) = explode('</body>', $out, 2);
+ $out = $this->flattenString($out);
+
+ $this->assertEqual($exp, $out, "DOMDocument's parsing/serialization roundtrip");
+ }
+
+ public function testProcess() {
+ $data = $this->provider();
+ foreach ($data as $row) {
+ list($test, $in, $exp) = $row;
+ $exp = $this->flattenString($exp);
+ $out = $this->_autop->process($in);
+ $out = $this->flattenString($out);
+
+ $this->assertEqual($exp, $out, "Equality case {$test}");
+ }
+ }
+
+ public function provider() {
+ $d = dir(dirname(dirname(__FILE__)) . '/test_files/output/autop');
+ $tests = array();
+ while (false !== ($entry = $d->read())) {
+ if (preg_match('/^([a-z\\-]+)\.in\.html$/i', $entry, $m)) {
+ $tests[] = $m[1];
+ }
+ }
+
+ $data = array();
+ foreach ($tests as $test) {
+ $data[] = array(
+ $test,
+ file_get_contents($d->path . '/' . "{$test}.in.html"),
+ file_get_contents($d->path . '/' . "{$test}.exp.html"),
+ );
+ }
+ return $data;
+ }
+
+ /**
+ * Different versions of PHP return different whitespace between tags.
+ * Removing all line breaks normalizes that.
+ */
+ public function flattenString($string) {
+ $r = preg_replace('/[\n\r]+/', '', $string);
+ return $r;
+ }
+} \ No newline at end of file
diff --git a/engine/tests/api/plugins.php b/engine/tests/api/plugins.php
new file mode 100644
index 000000000..114f3991b
--- /dev/null
+++ b/engine/tests/api/plugins.php
@@ -0,0 +1,299 @@
+<?php
+/**
+ * Elgg Plugins Test
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Test
+ */
+class ElggCorePluginsAPITest extends ElggCoreUnitTest {
+ // 1.8 manifest object
+ var $manifest18;
+
+ // 1.8 package at test_files/plugin_18/
+ var $package18;
+
+ // 1.7 manifest object
+ var $manifest17;
+
+ // 1.7 package at test_files/plugin_17/
+ var $package17;
+
+ public function __construct() {
+ parent::__construct();
+
+ $this->manifest18 = new ElggPluginManifest(get_config('path') . 'engine/tests/test_files/plugin_18/manifest.xml', 'plugin_test_18');
+ $this->manifest17 = new ElggPluginManifest(get_config('path') . 'engine/tests/test_files/plugin_17/manifest.xml', 'plugin_test_17');
+
+ $this->package18 = new ElggPluginPackage(get_config('path') . 'engine/tests/test_files/plugin_18');
+ $this->package17 = new ElggPluginPackage(get_config('path') . 'engine/tests/test_files/plugin_17');
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+ }
+
+ // generic tests
+ public function testElggPluginManifestFromString() {
+ $manifest_file = file_get_contents(get_config('path') . 'engine/tests/test_files/plugin_17/manifest.xml');
+ $manifest = new ElggPluginManifest($manifest_file);
+
+ $this->assertIsA($manifest, 'ElggPluginManifest');
+ }
+
+ public function testElggPluginManifestFromFile() {
+ $file = get_config('path') . 'engine/tests/test_files/plugin_17/manifest.xml';
+ $manifest = new ElggPluginManifest($file);
+
+ $this->assertIsA($manifest, 'ElggPluginManifest');
+ }
+
+ public function testElggPluginManifestFromXMLEntity() {
+ $xml = xml_to_object($manifest_file = file_get_contents(get_config('path') . 'engine/tests/test_files/plugin_17/manifest.xml'));
+ $manifest = new ElggPluginManifest($xml);
+
+ $this->assertIsA($manifest, 'ElggPluginManifest');
+ }
+
+ // exact manifest values
+ // 1.8 interface
+ public function testElggPluginManifest18() {
+ $manifest_array = array(
+ 'name' => 'Test Manifest',
+ 'author' => 'Anyone',
+ 'version' => '1.0',
+ 'blurb' => 'A concise description.',
+ 'description' => 'A longer, more interesting description.',
+ 'website' => 'http://www.elgg.org/',
+ 'repository' => 'https://github.com/Elgg/Elgg',
+ 'bugtracker' => 'http://trac.elgg.org',
+ 'donations' => 'http://elgg.org/supporter.php',
+ 'copyright' => '(C) Elgg Foundation 2011',
+ 'license' => 'GNU General Public License version 2',
+
+ 'requires' => array(
+ array('type' => 'elgg_version', 'version' => '3009030802', 'comparison' => 'lt'),
+ array('type' => 'elgg_release', 'version' => '1.8-svn'),
+ array('type' => 'php_extension', 'name' => 'gd'),
+ array('type' => 'php_ini', 'name' => 'short_open_tag', 'value' => 'off'),
+ array('type' => 'php_extension', 'name' => 'made_up', 'version' => '1.0'),
+ array('type' => 'plugin', 'name' => 'fake_plugin', 'version' => '1.0'),
+ array('type' => 'plugin', 'name' => 'profile', 'version' => '1.0'),
+ array('type' => 'plugin', 'name' => 'profile_api', 'version' => '1.3', 'comparison' => 'lt'),
+ array('type' => 'priority', 'priority' => 'after', 'plugin' => 'profile'),
+ ),
+
+ 'screenshot' => array(
+ array('description' => 'Fun things to do 1', 'path' => 'graphics/plugin_ss1.png'),
+ array('description' => 'Fun things to do 2', 'path' => 'graphics/plugin_ss2.png'),
+ ),
+
+ 'category' => array(
+ 'Admin', 'ServiceAPI'
+ ),
+
+ 'conflicts' => array(
+ array('type' => 'plugin', 'name' => 'profile_api', 'version' => '1.0')
+ ),
+
+ 'provides' => array(
+ array('type' => 'plugin', 'name' => 'profile_api', 'version' => '1.3'),
+ array('type' => 'php_extension', 'name' => 'big_math', 'version' => '1.0')
+ ),
+
+ 'suggests' => array(
+ array('type' => 'plugin', 'name' => 'facebook_connect', 'version' => '1.0'),
+ ),
+
+ // string because we are reading from a file
+ 'activate_on_install' => 'true',
+ );
+
+ $this->assertIdentical($this->manifest18->getManifest(), $manifest_array);
+ }
+
+ public function testElggPluginManifest17() {
+ $manifest_array = array(
+ 'author' => 'Anyone',
+ 'version' => '1.0',
+ 'description' => 'A 1.7-style manifest.',
+ 'website' => 'http://www.elgg.org/',
+ 'copyright' => '(C) Elgg Foundation 2011',
+ 'license' => 'GNU General Public License version 2',
+ 'elgg_version' => '2009030702',
+ 'name' => 'Plugin Test 17',
+ );
+
+ $this->assertIdentical($this->manifest17->getManifest(), $manifest_array);
+ }
+
+
+ public function testElggPluginManifestGetApiVersion() {
+ $this->assertEqual($this->manifest18->getApiVersion(), 1.8);
+ $this->assertEqual($this->manifest17->getApiVersion(), 1.7);
+ }
+
+ public function testElggPluginManifestGetPluginID() {
+ $this->assertEqual($this->manifest18->getPluginID(), 'plugin_test_18');
+ $this->assertEqual($this->manifest17->getPluginID(), 'plugin_test_17');
+ }
+
+
+ // normalized attributes
+ public function testElggPluginManifestGetName() {
+ $this->assertEqual($this->manifest18->getName(), 'Test Manifest');
+ $this->assertEqual($this->manifest17->getName(), 'Plugin Test 17');
+ }
+
+ public function testElggPluginManifestGetAuthor() {
+ $this->assertEqual($this->manifest18->getAuthor(), 'Anyone');
+ $this->assertEqual($this->manifest17->getAuthor(), 'Anyone');
+ }
+
+ public function testElggPluginManifestGetVersion() {
+ $this->assertEqual($this->manifest18->getVersion(), 1.0);
+ $this->assertEqual($this->manifest17->getVersion(), 1.0);
+ }
+
+ public function testElggPluginManifestGetBlurb() {
+ $this->assertEqual($this->manifest18->getBlurb(), 'A concise description.');
+ $this->assertEqual($this->manifest17->getBlurb(), 'A 1.7-style manifest.');
+ }
+
+ public function testElggPluginManifestGetWebsite() {
+ $this->assertEqual($this->manifest18->getWebsite(), 'http://www.elgg.org/');
+ $this->assertEqual($this->manifest17->getWebsite(), 'http://www.elgg.org/');
+ }
+
+ public function testElggPluginManifestGetRepository() {
+ $this->assertEqual($this->manifest18->getRepositoryURL(), 'https://github.com/Elgg/Elgg');
+ $this->assertEqual($this->manifest17->getRepositoryURL(), '');
+ }
+
+ public function testElggPluginManifestGetBugtracker() {
+ $this->assertEqual($this->manifest18->getBugTrackerURL(), 'http://trac.elgg.org');
+ $this->assertEqual($this->manifest17->getBugTrackerURL(), '');
+ }
+
+ public function testElggPluginManifestGetDonationsPage() {
+ $this->assertEqual($this->manifest18->getDonationsPageURL(), 'http://elgg.org/supporter.php');
+ $this->assertEqual($this->manifest17->getDonationsPageURL(), '');
+ }
+
+ public function testElggPluginManifestGetCopyright() {
+ $this->assertEqual($this->manifest18->getCopyright(), '(C) Elgg Foundation 2011');
+ $this->assertEqual($this->manifest18->getCopyright(), '(C) Elgg Foundation 2011');
+ }
+
+ public function testElggPluginManifestGetLicense() {
+ $this->assertEqual($this->manifest18->getLicense(), 'GNU General Public License version 2');
+ $this->assertEqual($this->manifest17->getLicense(), 'GNU General Public License version 2');
+ }
+
+
+ public function testElggPluginManifestGetRequires() {
+ $requires = array(
+ array('type' => 'elgg_version', 'version' => '3009030802', 'comparison' => 'lt'),
+ array('type' => 'elgg_release', 'version' => '1.8-svn', 'comparison' => 'ge'),
+ array('type' => 'php_extension', 'name' => 'gd', 'version' => '', 'comparison' => '='),
+ array('type' => 'php_ini', 'name' => 'short_open_tag', 'value' => 0, 'comparison' => '='),
+ array('type' => 'php_extension', 'name' => 'made_up', 'version' => '1.0', 'comparison' => '='),
+ array('type' => 'plugin', 'name' => 'fake_plugin', 'version' => '1.0', 'comparison' => 'ge'),
+ array('type' => 'plugin', 'name' => 'profile', 'version' => '1.0', 'comparison' => 'ge'),
+ array('type' => 'plugin', 'name' => 'profile_api', 'version' => '1.3', 'comparison' => 'lt'),
+ array('type' => 'priority', 'priority' => 'after', 'plugin' => 'profile'),
+ );
+
+ $this->assertIdentical($this->package18->getManifest()->getRequires(), $requires);
+
+ $requires = array(
+ array('type' => 'elgg_version', 'version' => '2009030702', 'comparison' => 'ge')
+ );
+
+ $this->assertIdentical($this->package17->getManifest()->getRequires(), $requires);
+ }
+
+ public function testElggPluginManifestGetSuggests() {
+ $suggests = array(
+ array('type' => 'plugin', 'name' => 'facebook_connect', 'version' => '1.0', 'comparison' => 'ge'),
+ );
+
+ $this->assertIdentical($this->package18->getManifest()->getSuggests(), $suggests);
+
+ $suggests = array();
+
+ $this->assertIdentical($this->package17->getManifest()->getSuggests(), $suggests);
+ }
+
+ public function testElggPluginManifestGetDescription() {
+ $this->assertEqual($this->package18->getManifest()->getDescription(), 'A longer, more interesting description.');
+ $this->assertEqual($this->package17->getManifest()->getDescription(), 'A 1.7-style manifest.');
+ }
+
+ public function testElggPluginManifestGetCategories() {
+ $categories = array(
+ 'Admin', 'ServiceAPI'
+ );
+
+ $this->assertIdentical($this->package18->getManifest()->getCategories(), $categories);
+ $this->assertIdentical($this->package17->getManifest()->getCategories(), array());
+ }
+
+ public function testElggPluginManifestGetScreenshots() {
+ $screenshots = array(
+ array('description' => 'Fun things to do 1', 'path' => 'graphics/plugin_ss1.png'),
+ array('description' => 'Fun things to do 2', 'path' => 'graphics/plugin_ss2.png'),
+ );
+
+ $this->assertIdentical($this->package18->getManifest()->getScreenshots(), $screenshots);
+ $this->assertIdentical($this->package17->getManifest()->getScreenshots(), array());
+ }
+
+ public function testElggPluginManifestGetProvides() {
+ $provides = array(
+ array('type' => 'plugin', 'name' => 'profile_api', 'version' => '1.3'),
+ array('type' => 'php_extension', 'name' => 'big_math', 'version' => '1.0'),
+ array('type' => 'plugin', 'name' => 'plugin_18', 'version' => '1.0')
+ );
+
+ $this->assertIdentical($this->package18->getManifest()->getProvides(), $provides);
+
+
+ $provides = array(
+ array('type' => 'plugin', 'name' => 'plugin_17', 'version' => '1.0')
+ );
+
+ $this->assertIdentical($this->package17->getManifest()->getProvides(), $provides);
+ }
+
+ public function testElggPluginManifestGetConflicts() {
+ $conflicts = array(
+ array(
+ 'type' => 'plugin',
+ 'name' => 'profile_api',
+ 'version' => '1.0',
+ 'comparison' => '='
+ )
+ );
+
+ $this->assertIdentical($this->manifest18->getConflicts(), $conflicts);
+ $this->assertIdentical($this->manifest17->getConflicts(), array());
+ }
+
+ public function testElggPluginManifestGetActivateOnInstall() {
+ $this->assertIdentical($this->manifest18->getActivateOnInstall(), true);
+ }
+
+ // ElggPluginPackage
+ public function testElggPluginPackageDetectIDFromPath() {
+ $this->assertEqual($this->package18->getID(), 'plugin_18');
+ }
+
+ public function testElggPluginPackageDetectIDFromPluginID() {
+ $package = new ElggPluginPackage('profile');
+ $this->assertEqual($package->getID(), 'profile');
+ }
+}
diff --git a/engine/tests/api/river.php b/engine/tests/api/river.php
new file mode 100644
index 000000000..6931b9f41
--- /dev/null
+++ b/engine/tests/api/river.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Elgg Test river api
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreRiverAPITest extends ElggCoreUnitTest {
+
+ public function testElggTypeSubtypeWhereSQL() {
+ $types = array('object');
+ $subtypes = array('blog');
+ $result = elgg_get_river_type_subtype_where_sql('rv', $types, $subtypes, null);
+ $this->assertIdentical($result, "((rv.type = 'object') AND ((rv.subtype = 'blog')))");
+
+ $types = array('object');
+ $subtypes = array('blog', 'file');
+ $result = elgg_get_river_type_subtype_where_sql('rv', $types, $subtypes, null);
+ $this->assertIdentical($result, "((rv.type = 'object') AND ((rv.subtype = 'blog') OR (rv.subtype = 'file')))");
+ }
+}
diff --git a/engine/tests/elgg_unit_test.php b/engine/tests/elgg_unit_test.php
new file mode 100644
index 000000000..70f8788a0
--- /dev/null
+++ b/engine/tests/elgg_unit_test.php
@@ -0,0 +1,29 @@
+<?php
+
+/**
+ * Elgg Core Unit Tester
+ *
+ * This class is to be extended by all Elgg unit tests. As such, any method here
+ * will be available to the tests.
+ */
+abstract class ElggCoreUnitTest extends UnitTestCase
+{
+ /**
+ * Class constructor.
+ *
+ * A simple wrapper to call the parent constructor.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+ }
+
+ /**
+ * Class destructor.
+ *
+ * The parent does not provide a destructor, so including an explicit one here.
+ */
+ public function __destruct()
+ {
+ }
+}
diff --git a/engine/tests/objects/entities.php b/engine/tests/objects/entities.php
new file mode 100644
index 000000000..248b85c9e
--- /dev/null
+++ b/engine/tests/objects/entities.php
@@ -0,0 +1,423 @@
+<?php
+/**
+ * Elgg Test ElggEntities
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreEntityTest extends ElggCoreUnitTest {
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+ $this->entity = new ElggEntityTest();
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ $this->swallowErrors();
+ unset($this->entity);
+ }
+
+ /**
+ * Tests the protected attributes
+ */
+ public function testElggEntityAttributes() {
+ $test_attributes = array();
+ $test_attributes['guid'] = NULL;
+ $test_attributes['type'] = NULL;
+ $test_attributes['subtype'] = NULL;
+ $test_attributes['owner_guid'] = elgg_get_logged_in_user_guid();
+ $test_attributes['container_guid'] = elgg_get_logged_in_user_guid();
+ $test_attributes['site_guid'] = NULL;
+ $test_attributes['access_id'] = ACCESS_PRIVATE;
+ $test_attributes['time_created'] = NULL;
+ $test_attributes['time_updated'] = NULL;
+ $test_attributes['last_action'] = NULL;
+ $test_attributes['enabled'] = 'yes';
+ $test_attributes['tables_split'] = 1;
+ $test_attributes['tables_loaded'] = 0;
+ ksort($test_attributes);
+
+ $entity_attributes = $this->entity->expose_attributes();
+ ksort($entity_attributes);
+
+ $this->assertIdentical($entity_attributes, $test_attributes);
+ }
+
+ public function testElggEntityGetAndSetBaseAttributes() {
+ // explicitly set and get access_id
+ $this->assertIdentical($this->entity->get('access_id'), ACCESS_PRIVATE);
+ $this->assertTrue($this->entity->set('access_id', ACCESS_PUBLIC));
+ $this->assertIdentical($this->entity->get('access_id'), ACCESS_PUBLIC);
+
+ // check internal attributes array
+ $attributes = $this->entity->expose_attributes();
+ $this->assertIdentical($attributes['access_id'], ACCESS_PUBLIC);
+
+ // implicitly set and get access_id
+ $this->entity->access_id = ACCESS_PRIVATE;
+ $this->assertIdentical($this->entity->access_id, ACCESS_PRIVATE);
+
+ // unset access_id
+ unset($this->entity->access_id);
+ $this->assertIdentical($this->entity->access_id, '');
+
+ // unable to directly set guid
+ $this->assertFalse($this->entity->set('guid', 'error'));
+ $this->entity->guid = 'error';
+ $this->assertNotEqual($this->entity->guid, 'error');
+
+ // fail on non-attribute
+ $this->assertNull($this->entity->get('non_existent'));
+
+ // consider helper methods
+ $this->assertIdentical($this->entity->getGUID(), $this->entity->guid );
+ $this->assertIdentical($this->entity->getType(), $this->entity->type );
+ $this->assertIdentical($this->entity->getSubtype(), $this->entity->subtype );
+ $this->assertIdentical($this->entity->getOwnerGUID(), $this->entity->owner_guid );
+ $this->assertIdentical($this->entity->getAccessID(), $this->entity->access_id );
+ $this->assertIdentical($this->entity->getTimeCreated(), $this->entity->time_created );
+ $this->assertIdentical($this->entity->getTimeUpdated(), $this->entity->time_updated );
+ }
+
+ public function testElggEntityGetAndSetMetaData() {
+ // ensure metadata not set
+ $this->assertNull($this->entity->get('non_existent'));
+ $this->assertFalse(isset($this->entity->non_existent));
+
+ // create metadata
+ $this->entity->existent = 'testing';
+ $this->assertIdentical($this->entity->existent, 'testing');
+
+ // check metadata set
+ $this->assertTrue(isset($this->entity->existent));
+ $this->assertIdentical($this->entity->getMetaData('existent'), 'testing');
+
+ // check internal metadata array
+ $metadata = $this->entity->expose_metadata();
+ $this->assertIdentical($metadata['existent'], array('testing'));
+ }
+
+ public function testElggEnityGetAndSetAnnotations() {
+ $this->assertFalse(array_key_exists('non_existent', $this->entity->expose_annotations()));
+ $this->assertIdentical($this->entity->getAnnotations('non_existent'), array());
+
+ // set and check temp annotation
+ $this->assertTrue($this->entity->annotate('non_existent', 'testing'));
+ $this->assertIdentical($this->entity->getAnnotations('non_existent'), array('testing'));
+ $this->assertTrue(array_key_exists('non_existent', $this->entity->expose_annotations()));
+
+ // save entity and check for annotation
+ $this->entity->subtype = 'testing';
+ $this->save_entity();
+ $this->assertFalse(array_key_exists('non_existent', $this->entity->expose_annotations()));
+ $annotations = $this->entity->getAnnotations('non_existent');
+ $this->assertIsA($annotations[0], 'ElggAnnotation');
+ $this->assertIdentical($annotations[0]->name, 'non_existent');
+ $this->assertEqual($this->entity->countAnnotations('non_existent'), 1);
+
+ $this->assertIdentical($annotations, elgg_get_annotations(array('guid' => $this->entity->getGUID())));
+ $this->assertIdentical($annotations, elgg_get_annotations(array('guid' => $this->entity->getGUID(), 'type' => 'site')));
+ $this->assertIdentical($annotations, elgg_get_annotations(array('guid' => $this->entity->getGUID(), 'type' => 'site', 'subtype' => 'testing')));
+ $this->assertIdentical(FALSE, elgg_get_annotations(array('guid' => $this->entity->getGUID(), 'type' => 'site', 'subtype' => 'fail')));
+
+ // clear annotation
+ $this->assertTrue($this->entity->deleteAnnotations());
+ $this->assertEqual($this->entity->countAnnotations('non_existent'), 0);
+
+ $this->assertIdentical(array(), elgg_get_annotations(array('guid' => $this->entity->getGUID())));
+ $this->assertIdentical(array(), elgg_get_annotations(array('guid' => $this->entity->getGUID(), 'type' => 'site')));
+ $this->assertIdentical(array(), elgg_get_annotations(array('guid' => $this->entity->getGUID(), 'type' => 'site', 'subtype' => 'testing')));
+
+ // clean up
+ $this->assertTrue($this->entity->delete());
+ remove_subtype('site', 'testing');
+ }
+
+ public function testElggEntityCache() {
+ global $ENTITY_CACHE;
+ $this->assertIsA($ENTITY_CACHE, 'array');
+ }
+
+ public function testElggEntitySaveAndDelete() {
+ global $ENTITY_CACHE;
+
+ // unable to delete with no guid
+ $this->assertFalse($this->entity->delete());
+
+ // error on save
+ try {
+ $this->entity->save();
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidParameterException');
+ $this->assertIdentical($e->getMessage(), elgg_echo('InvalidParameterException:EntityTypeNotSet'));
+ }
+
+ // set elements
+ $this->entity->type = 'site';
+ $this->entity->non_existent = 'testing';
+
+ // save
+ $this->AssertEqual($this->entity->getGUID(), 0);
+ $guid = $this->entity->save();
+ $this->AssertNotEqual($guid, 0);
+
+ // check guid
+ $this->AssertEqual($this->entity->getGUID(), $guid);
+ $attributes = $this->entity->expose_attributes();
+ $this->AssertEqual($attributes['guid'], $guid);
+ $this->AssertIdentical($ENTITY_CACHE[$guid], $this->entity);
+
+ // check metadata
+ $metadata = $this->entity->expose_metadata();
+ $this->AssertFalse(in_array('non_existent', $metadata));
+ $this->AssertEqual($this->entity->get('non_existent'), 'testing');
+
+ // clean up with delete
+ $this->assertIdentical(true, $this->entity->delete());
+ }
+
+ public function testElggEntityDisableAndEnable() {
+ global $CONFIG;
+
+ // ensure enabled
+ $this->assertTrue($this->entity->isEnabled());
+
+ // false on disable because it's not saved yet.
+ $this->assertFalse($this->entity->disable());
+
+ // save and disable
+ $this->save_entity();
+
+ // add annotations and metadata to check if they're disabled.
+ $annotation_id = create_annotation($this->entity->guid, 'test_annotation_' . rand(), 'test_value_' . rand());
+ $metadata_id = create_metadata($this->entity->guid, 'test_metadata_' . rand(), 'test_value_' . rand());
+
+ $this->assertTrue($this->entity->disable());
+
+ // ensure disabled by comparing directly with database
+ $entity = get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid = '{$this->entity->guid}'");
+ $this->assertIdentical($entity->enabled, 'no');
+
+ $annotation = get_data_row("SELECT * FROM {$CONFIG->dbprefix}annotations WHERE id = '$annotation_id'");
+ $this->assertIdentical($annotation->enabled, 'no');
+
+ $metadata = get_data_row("SELECT * FROM {$CONFIG->dbprefix}metadata WHERE id = '$metadata_id'");
+ $this->assertIdentical($metadata->enabled, 'no');
+
+ // re-enable for deletion to work
+ $this->assertTrue($this->entity->enable());
+
+ // check enabled
+ // check annotations and metadata enabled.
+ $entity = get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid = '{$this->entity->guid}'");
+ $this->assertIdentical($entity->enabled, 'yes');
+
+ $annotation = get_data_row("SELECT * FROM {$CONFIG->dbprefix}annotations WHERE id = '$annotation_id'");
+ $this->assertIdentical($annotation->enabled, 'yes');
+
+ $metadata = get_data_row("SELECT * FROM {$CONFIG->dbprefix}metadata WHERE id = '$metadata_id'");
+ $this->assertIdentical($metadata->enabled, 'yes');
+
+ $this->assertTrue($this->entity->delete());
+ }
+
+ public function testElggEntityRecursiveDisableAndEnable() {
+ global $CONFIG;
+
+ $this->save_entity();
+ $obj1 = new ElggObject();
+ $obj1->container_guid = $this->entity->getGUID();
+ $obj1->save();
+ $obj2 = new ElggObject();
+ $obj2->container_guid = $this->entity->getGUID();
+ $obj2->save();
+
+ // disable $obj2 before disabling the container
+ $this->assertTrue($obj2->disable());
+
+ // disable entities container by $this->entity
+ $this->assertTrue($this->entity->disable());
+ $entity = get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid = '{$obj1->guid}'");
+ $this->assertIdentical($entity->enabled, 'no');
+
+ // enable entities that were disabled with the container (but not $obj2)
+ $this->assertTrue($this->entity->enable());
+ $entity = get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid = '{$obj1->guid}'");
+ $this->assertIdentical($entity->enabled, 'yes');
+ $entity = get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid = '{$obj2->guid}'");
+ $this->assertIdentical($entity->enabled, 'no');
+
+ // cleanup
+ $this->assertTrue($obj2->enable());
+ $this->assertTrue($obj2->delete());
+ $this->assertTrue($obj1->delete());
+ $this->assertTrue($this->entity->delete());
+ }
+
+ public function testElggEntityMetadata() {
+ // let's delete a non-existent metadata
+ $this->assertFalse($this->entity->deleteMetadata('important'));
+
+ // let's add the metadata
+ $this->entity->important = 'indeed!';
+ $this->assertIdentical('indeed!', $this->entity->important);
+ $this->entity->less_important = 'true, too!';
+ $this->assertIdentical('true, too!', $this->entity->less_important);
+ $this->save_entity();
+
+ // test deleting incorrectly
+ // @link http://trac.elgg.org/ticket/2273
+ $this->assertNull($this->entity->deleteMetadata('impotent'));
+ $this->assertEqual($this->entity->important, 'indeed!');
+
+ // get rid of one metadata
+ $this->assertEqual($this->entity->important, 'indeed!');
+ $this->assertTrue($this->entity->deleteMetadata('important'));
+ $this->assertNull($this->entity->important);
+
+ // get rid of all metadata
+ $this->assertTrue($this->entity->deleteMetadata());
+ $this->assertNull($this->entity->less_important);
+
+ // clean up database
+ $this->assertTrue($this->entity->delete());
+ }
+
+ public function testElggEntityExportables() {
+ $exportables = array(
+ 'guid',
+ 'type',
+ 'subtype',
+ 'time_created',
+ 'time_updated',
+ 'container_guid',
+ 'owner_guid',
+ 'site_guid'
+ );
+
+ $this->assertIdentical($exportables, $this->entity->getExportableValues());
+ }
+
+ public function testElggEntityMultipleMetadata() {
+ foreach (array(false, true) as $save) {
+ if ($save) {
+ $this->save_entity();
+ }
+ $md = array('brett', 'bryan', 'brad');
+ $name = 'test_md_' . rand();
+
+ $this->entity->$name = $md;
+
+ $this->assertEqual($md, $this->entity->$name);
+
+ if ($save) {
+ $this->assertTrue($this->entity->delete());
+ }
+ }
+ }
+
+ public function testElggEntitySingleElementArrayMetadata() {
+ foreach (array(false, true) as $save) {
+ if ($save) {
+ $this->save_entity();
+ }
+ $md = array('test');
+ $name = 'test_md_' . rand();
+
+ $this->entity->$name = $md;
+
+ $this->assertEqual($md[0], $this->entity->$name);
+
+ if ($save) {
+ $this->assertTrue($this->entity->delete());
+ }
+ }
+ }
+
+ public function testElggEntityAppendMetadata() {
+ foreach (array(false, true) as $save) {
+ if ($save) {
+ $this->save_entity();
+ }
+ $md = 'test';
+ $name = 'test_md_' . rand();
+
+ $this->entity->$name = $md;
+ $this->entity->setMetaData($name, 'test2', '', true);
+
+ $this->assertEqual(array('test', 'test2'), $this->entity->$name);
+
+ if ($save) {
+ $this->assertTrue($this->entity->delete());
+ }
+ }
+ }
+
+ public function testElggEntitySingleElementArrayAppendMetadata() {
+ foreach (array(false, true) as $save) {
+ if ($save) {
+ $this->save_entity();
+ }
+ $md = 'test';
+ $name = 'test_md_' . rand();
+
+ $this->entity->$name = $md;
+ $this->entity->setMetaData($name, array('test2'), '', true);
+
+ $this->assertEqual(array('test', 'test2'), $this->entity->$name);
+
+ if ($save) {
+ $this->assertTrue($this->entity->delete());
+ }
+ }
+ }
+
+ public function testElggEntityArrayAppendMetadata() {
+ foreach (array(false, true) as $save) {
+ if ($save) {
+ $this->save_entity();
+ }
+ $md = array('brett', 'bryan', 'brad');
+ $md2 = array('test1', 'test2', 'test3');
+ $name = 'test_md_' . rand();
+
+ $this->entity->$name = $md;
+ $this->entity->setMetaData($name, $md2, '', true);
+
+ $this->assertEqual(array_merge($md, $md2), $this->entity->$name);
+
+ if ($save) {
+ $this->assertTrue($this->entity->delete());
+ }
+ }
+ }
+
+ protected function save_entity($type='site') {
+ $this->entity->type = $type;
+ $this->assertNotEqual($this->entity->save(), 0);
+ }
+}
+
+// ElggEntity is an abstract class with no abstact methods.
+class ElggEntityTest extends ElggEntity {
+ public function __construct() {
+ $this->initializeAttributes();
+ }
+
+ public function expose_attributes() {
+ return $this->attributes;
+ }
+
+ public function expose_metadata() {
+ return $this->temp_metadata;
+ }
+
+ public function expose_annotations() {
+ return $this->temp_annotations;
+ }
+}
diff --git a/engine/tests/objects/filestore.php b/engine/tests/objects/filestore.php
new file mode 100644
index 000000000..9732f0af4
--- /dev/null
+++ b/engine/tests/objects/filestore.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Elgg Test Skeleton
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreFilestoreTest extends ElggCoreUnitTest {
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ parent::__construct();
+
+ // all code should come after here
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+ $this->filestore = new ElggDiskFilestoreTest();
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+
+ unset($this->filestore);
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ // all code should go above here
+ parent::__destruct();
+ }
+
+ public function testFileMatrix() {
+ global $CONFIG;
+
+ // create a test user
+ $user = $this->createTestUser();
+ $created = date('Y/m/d', $user->time_created);
+
+ // check matrix with guid
+ $guid_dir = $this->filestore->makeFileMatrix($user->guid);
+ $this->assertIdentical($guid_dir, "$created/$user->guid/");
+
+ // clean up user
+ $user->delete();
+ }
+
+ public function testFilenameOnFilestore() {
+ global $CONFIG;
+
+ // create a user to own the file
+ $user = $this->createTestUser();
+ $created = date('Y/m/d', $user->time_created);
+
+ // setup a test file
+ $file = new ElggFile();
+ $file->owner_guid = $user->guid;
+ $file->setFilename('testing/filestore.txt');
+ $file->open('write');
+ $file->write('Testing!');
+ $this->assertTrue($file->close());
+
+ // ensure filename and path is expected
+ $filename = $file->getFilenameOnFilestore($file);
+ $filepath = "$CONFIG->dataroot$created/$user->guid/testing/filestore.txt";
+ $this->assertIdentical($filename, $filepath);
+ $this->assertTrue(file_exists($filepath));
+
+ // ensure file removed on user delete
+ $user->delete();
+ $this->assertFalse(file_exists($filepath));
+ }
+
+
+ protected function createTestUser($username = 'fileTest') {
+ $user = new ElggUser();
+ $user->username = $username;
+ $guid = $user->save();
+
+ // load user to have access to creation time
+ return get_entity($guid);
+ }
+}
+
+class ElggDiskFilestoreTest extends ElggDiskFilestore {
+ public function makeFileMatrix($guid) {
+ return parent::makeFileMatrix($guid);
+ }
+}
diff --git a/engine/tests/objects/objects.php b/engine/tests/objects/objects.php
new file mode 100644
index 000000000..915594e0a
--- /dev/null
+++ b/engine/tests/objects/objects.php
@@ -0,0 +1,306 @@
+<?php
+/**
+ * Elgg Test ElggObject
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreObjectTest extends ElggCoreUnitTest {
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ parent::__construct();
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+ $this->entity = new ElggObjectTest();
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ $this->swallowErrors();
+ unset($this->entity);
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ parent::__destruct();
+ }
+
+ public function testElggObjectConstructor() {
+ $attributes = array();
+ $attributes['guid'] = NULL;
+ $attributes['type'] = 'object';
+ $attributes['subtype'] = NULL;
+ $attributes['owner_guid'] = elgg_get_logged_in_user_guid();
+ $attributes['container_guid'] = elgg_get_logged_in_user_guid();
+ $attributes['site_guid'] = NULL;
+ $attributes['access_id'] = ACCESS_PRIVATE;
+ $attributes['time_created'] = NULL;
+ $attributes['time_updated'] = NULL;
+ $attributes['last_action'] = NULL;
+ $attributes['enabled'] = 'yes';
+ $attributes['tables_split'] = 2;
+ $attributes['tables_loaded'] = 0;
+ $attributes['title'] = NULL;
+ $attributes['description'] = NULL;
+ ksort($attributes);
+
+ $entity_attributes = $this->entity->expose_attributes();
+ ksort($entity_attributes);
+
+ $this->assertIdentical($entity_attributes, $attributes);
+ }
+
+ public function testElggObjectSave() {
+ // new object
+ $this->AssertEqual($this->entity->getGUID(), 0);
+ $guid = $this->entity->save();
+ $this->AssertNotEqual($guid, 0);
+
+ $entity_row = $this->get_entity_row($guid);
+ $this->assertIsA($entity_row, 'stdClass');
+
+ // update existing object
+ $this->entity->title = 'testing';
+ $this->entity->description = 'ElggObject';
+ $this->assertEqual($this->entity->save(), $guid);
+
+ $object_row = $this->get_object_row($guid);
+ $this->assertIsA($object_row, 'stdClass');
+ $this->assertIdentical($object_row->title, 'testing');
+ $this->assertIdentical($object_row->description, 'ElggObject');
+
+ // clean up
+ $this->entity->delete();
+ }
+
+ public function testElggObjectLoad() {
+ // fail on wrong type
+ try {
+ $error = new ElggObjectTest(elgg_get_logged_in_user_guid());
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidClassException');
+ $message = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), elgg_get_logged_in_user_guid(), 'ElggObject');
+ $this->assertIdentical($e->getMessage(), $message);
+ }
+ }
+
+ public function testElggObjectConstructorByGUID() {
+ $guid = $this->entity->save();
+
+ // load a new object using guid
+ $entity = new ElggObjectTest($guid);
+ $this->assertIdentical($this->entity, $entity);
+
+ // clean up
+ $this->entity->delete();
+ }
+
+ public function testElggObjectClone() {
+ $this->entity->title = 'testing';
+ $this->entity->description = 'ElggObject';
+ $this->entity->var1 = "test";
+ $this->entity->var2 = 1;
+ $this->entity->var3 = true;
+ $this->entity->save();
+
+ // add tag array
+ $tag_string = 'tag1, tag2, tag3';
+ $tagarray = string_to_tag_array($tag_string);
+ $this->entity->tags = $tagarray;
+
+ // a cloned ElggEntity has the guid reset
+ $object = clone $this->entity;
+ $this->assertIdentical(0, (int)$object->guid);
+
+ // make sure attributes were copied over
+ $this->assertIdentical($object->title, 'testing');
+ $this->assertIdentical($object->description, 'ElggObject');
+
+ $guid = $object->save();
+ $this->assertTrue($guid !== 0);
+ $this->assertTrue($guid !== $this->entity->guid);
+
+ // test that metadata was transfered
+ $this->assertIdentical($this->entity->var1, $object->var1);
+ $this->assertIdentical($this->entity->var2, $object->var2);
+ $this->assertIdentical($this->entity->var3, $object->var3);
+ $this->assertIdentical($this->entity->tags, $object->tags);
+
+ // clean up
+ $object->delete();
+ $this->entity->delete();
+ }
+
+ public function testElggObjectContainer() {
+ $this->assertEqual($this->entity->getContainerGUID(), elgg_get_logged_in_user_guid());
+
+ // create and save to group
+ $group = new ElggGroup();
+ $guid = $group->save();
+ $this->assertTrue($this->entity->setContainerGUID($guid));
+
+ // check container
+ $this->assertEqual($this->entity->getContainerGUID(), $guid);
+ $this->assertIdentical($group, $this->entity->getContainerEntity());
+
+ // clean up
+ $group->delete();
+ }
+
+ public function testElggObjectExportables() {
+ $exportables = array(
+ 'guid',
+ 'type',
+ 'subtype',
+ 'time_created',
+ 'time_updated',
+ 'container_guid',
+ 'owner_guid',
+ 'site_guid',
+ 'title',
+ 'description'
+ );
+
+ $this->assertIdentical($exportables, $this->entity->getExportableValues());
+ }
+
+ public function xtestElggObjectAccessOverrides() {
+ // set entity to private access with no owner.
+ $entity = $this->entity;
+ $entity->access_id = ACCESS_PRIVATE;
+ $entity->owner_guid = 0;
+ $this->assertTrue($entity->save());
+ $guid = $entity->getGUID();
+
+ var_dump($guid);
+ // try to grab entity
+ $entity = false;
+ $entity = get_entity($guid);
+ var_dump($entity);
+ $this->assertFalse($entity);
+
+ $old = elgg_set_ignore_access(true);
+ }
+
+ // see http://trac.elgg.org/ticket/1196
+ public function testElggEntityRecursiveDisableWhenLoggedOut() {
+ $e1 = new ElggObject();
+ $e1->access_id = ACCESS_PUBLIC;
+ $e1->owner_guid = 0;
+ $e1->container_guid = 0;
+ $e1->save();
+ $guid1 = $e1->getGUID();
+
+ $e2 = new ElggObject();
+ $e2->container_guid = $guid1;
+ $e2->access_id = ACCESS_PUBLIC;
+ $e2->owner_guid = 0;
+ $e2->save();
+ $guid2 = $e2->getGUID();
+
+ // fake being logged out
+ $user = $_SESSION['user'];
+ unset($_SESSION['user']);
+ $ia = elgg_set_ignore_access(true);
+
+ $this->assertTrue(disable_entity($guid1, null, true));
+
+ // "log in" original user
+ $_SESSION['user'] = $user;
+ elgg_set_ignore_access($ia);
+
+ $this->assertFalse(get_entity($guid1));
+ $this->assertFalse(get_entity($guid2));
+
+ $db_prefix = get_config('dbprefix');
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $guid1";
+ $r = get_data_row($q);
+ $this->assertEqual('no', $r->enabled);
+
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $guid2";
+ $r = get_data_row($q);
+ $this->assertEqual('no', $r->enabled);
+
+ access_show_hidden_entities(true);
+ delete_entity($guid1);
+ delete_entity($guid2);
+ access_show_hidden_entities(false);
+ }
+
+ public function testElggRecursiveDelete() {
+ $types = array('ElggGroup', 'ElggObject', 'ElggUser', 'ElggSite');
+ $db_prefix = elgg_get_config('dbprefix');
+
+ foreach ($types as $type) {
+ $parent = new $type();
+ $this->assertTrue($parent->save());
+
+ $child = new ElggObject();
+ $child->container_guid = $parent->guid;
+ $this->assertTrue($child->save());
+
+ $grandchild = new ElggObject();
+ $grandchild->container_guid = $child->guid;
+ $this->assertTrue($grandchild->save());
+
+ $this->assertTrue($parent->delete(true));
+
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $parent->guid";
+ $r = get_data($q);
+ $this->assertFalse($r);
+
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $child->guid";
+ $r = get_data($q);
+ $this->assertFalse($r);
+
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $grandchild->guid";
+ $r = get_data($q);
+ $this->assertFalse($r);
+ }
+
+ // object that owns itself
+ // can't check container_guid because of infinite loops in can_edit_entity()
+ $obj = new ElggObject();
+ $obj->save();
+ $obj->owner_guid = $obj->guid;
+ $obj->save();
+
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $obj->guid";
+ $r = get_data_row($q);
+ $this->assertEqual($obj->guid, $r->owner_guid);
+
+ $this->assertTrue($obj->delete(true));
+
+ $q = "SELECT * FROM {$db_prefix}entities WHERE guid = $obj->guid";
+ $r = get_data_row($q);
+ $this->assertFalse($r);
+ }
+
+ protected function get_object_row($guid) {
+ global $CONFIG;
+ return get_data_row("SELECT * FROM {$CONFIG->dbprefix}objects_entity WHERE guid='$guid'");
+ }
+
+ protected function get_entity_row($guid) {
+ global $CONFIG;
+ return get_data_row("SELECT * FROM {$CONFIG->dbprefix}entities WHERE guid='$guid'");
+ }
+}
+
+class ElggObjectTest extends ElggObject {
+ public function expose_attributes() {
+ return $this->attributes;
+ }
+}
diff --git a/engine/tests/objects/sites.php b/engine/tests/objects/sites.php
new file mode 100644
index 000000000..a01a661e3
--- /dev/null
+++ b/engine/tests/objects/sites.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Elgg Test ElggSite
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreSiteTest extends ElggCoreUnitTest {
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ parent::__construct();
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+ $this->site = new ElggSiteTest();
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ $this->swallowErrors();
+ unset($this->site);
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ parent::__destruct();
+ }
+
+ public function testElggSiteConstructor() {
+ $attributes = array();
+ $attributes['guid'] = NULL;
+ $attributes['type'] = 'site';
+ $attributes['subtype'] = NULL;
+ $attributes['owner_guid'] = elgg_get_logged_in_user_guid();
+ $attributes['container_guid'] = elgg_get_logged_in_user_guid();
+ $attributes['site_guid'] = NULL;
+ $attributes['access_id'] = ACCESS_PRIVATE;
+ $attributes['time_created'] = NULL;
+ $attributes['time_updated'] = NULL;
+ $attributes['last_action'] = NULL;
+ $attributes['enabled'] = 'yes';
+ $attributes['tables_split'] = 2;
+ $attributes['tables_loaded'] = 0;
+ $attributes['name'] = NULL;
+ $attributes['description'] = NULL;
+ $attributes['url'] = NULL;
+ ksort($attributes);
+
+ $entity_attributes = $this->site->expose_attributes();
+ ksort($entity_attributes);
+
+ $this->assertIdentical($entity_attributes, $attributes);
+ }
+
+ public function testElggSiteSaveAndDelete() {
+ $guid = $this->site->save();
+ $this->assertIsA($guid, 'int');
+ $this->assertTrue($guid > 0);
+ $this->assertIdentical(true, $this->site->delete());
+ }
+}
+
+class ElggSiteTest extends ElggSite {
+ public function expose_attributes() {
+ return $this->attributes;
+ }
+}
diff --git a/engine/tests/objects/users.php b/engine/tests/objects/users.php
new file mode 100644
index 000000000..a3573acb6
--- /dev/null
+++ b/engine/tests/objects/users.php
@@ -0,0 +1,231 @@
+<?php
+/**
+ * Elgg Test ElggUser
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreUserTest extends ElggCoreUnitTest {
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ parent::__construct();
+
+ // all code should come after here
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+ $this->user = new ElggUserTest();
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+
+ unset($this->user);
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ // all code should go above here
+ parent::__destruct();
+ }
+
+ public function testElggUserConstructor() {
+ $attributes = array();
+ $attributes['guid'] = NULL;
+ $attributes['type'] = 'user';
+ $attributes['subtype'] = NULL;
+ $attributes['owner_guid'] = elgg_get_logged_in_user_guid();
+ $attributes['container_guid'] = elgg_get_logged_in_user_guid();
+ $attributes['site_guid'] = NULL;
+ $attributes['access_id'] = ACCESS_PRIVATE;
+ $attributes['time_created'] = NULL;
+ $attributes['time_updated'] = NULL;
+ $attributes['last_action'] = NULL;
+ $attributes['enabled'] = 'yes';
+ $attributes['tables_split'] = 2;
+ $attributes['tables_loaded'] = 0;
+ $attributes['name'] = NULL;
+ $attributes['username'] = NULL;
+ $attributes['password'] = NULL;
+ $attributes['salt'] = NULL;
+ $attributes['email'] = NULL;
+ $attributes['language'] = NULL;
+ $attributes['code'] = NULL;
+ $attributes['banned'] = 'no';
+ $attributes['admin'] = 'no';
+ ksort($attributes);
+
+ $entity_attributes = $this->user->expose_attributes();
+ ksort($entity_attributes);
+
+ $this->assertIdentical($entity_attributes, $attributes);
+ }
+
+ public function testElggUserLoad() {
+ // new object
+ $object = new ElggObject();
+ $this->AssertEqual($object->getGUID(), 0);
+ $guid = $object->save();
+ $this->AssertNotEqual($guid, 0);
+
+ // fail on wrong type
+ try {
+ $error = new ElggUserTest($guid);
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidClassException');
+ $message = sprintf(elgg_echo('InvalidClassException:NotValidElggStar'), $guid, 'ElggUser');
+ $this->assertIdentical($e->getMessage(), $message);
+ }
+
+ // clean up
+ $object->delete();
+ }
+
+ public function testElggUserConstructorByGuid() {
+ $user = new ElggUser(elgg_get_logged_in_user_guid());
+ $this->assertIdentical($user, $_SESSION['user']);
+
+ // fail with garbage
+ try {
+ $error = new ElggUserTest(array('invalid'));
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidParameterException');
+ $message = sprintf(elgg_echo('InvalidParameterException:UnrecognisedValue'));
+ $this->assertIdentical($e->getMessage(), $message);
+ }
+ }
+
+ public function testElggUserConstructorByDbRow() {
+ $row = $this->fetchUser(elgg_get_logged_in_user_guid());
+ $user = new ElggUser($row);
+ $this->assertIdentical($user, $_SESSION['user']);
+ }
+
+ public function testElggUserConstructorByUsername() {
+ $row = $this->fetchUser(elgg_get_logged_in_user_guid());
+ $user = new ElggUser($row->username);
+ $this->assertIdentical($user, $_SESSION['user']);
+ }
+
+ public function testElggUserSave() {
+ // new object
+ $this->AssertEqual($this->user->getGUID(), 0);
+ $guid = $this->user->save();
+ $this->AssertNotEqual($guid, 0);
+
+ // clean up
+ $this->user->delete();
+ }
+
+ public function testElggUserDelete() {
+ $guid = $this->user->save();
+
+ // delete object
+ $this->assertIdentical(true, $this->user->delete());
+
+ // check GUID not in database
+ $this->assertFalse($this->fetchUser($guid));
+ }
+
+ public function testElggUserNameCache() {
+ // Trac #1305
+
+ // very unlikely a user would have this username
+ $name = (string)time();
+ $this->user->username = $name;
+
+ $guid = $this->user->save();
+
+ $user = get_user_by_username($name);
+ $user->delete();
+ $user = get_user_by_username($name);
+ $this->assertFalse($user);
+ }
+
+
+ public function testElggUserMakeAdmin() {
+ global $CONFIG;
+
+ // need to save user to have a guid
+ $guid = $this->user->save();
+
+ $this->assertTrue($this->user->makeAdmin());
+
+ $q = "SELECT admin FROM {$CONFIG->dbprefix}users_entity WHERE guid = $guid";
+ $r = mysql_query($q);
+
+ $admin = mysql_fetch_assoc($r);
+ $this->assertEqual($admin['admin'], 'yes');
+
+ $this->user->delete();
+ }
+
+ public function testElggUserRemoveAdmin() {
+ global $CONFIG;
+
+ // need to save user to have a guid
+ $guid = $this->user->save();
+
+ $this->assertTrue($this->user->removeAdmin());
+
+ $q = "SELECT admin FROM {$CONFIG->dbprefix}users_entity WHERE guid = $guid";
+ $r = mysql_query($q);
+
+ $admin = mysql_fetch_assoc($r);
+ $this->assertEqual($admin['admin'], 'no');
+
+ $this->user->delete();
+ }
+
+ public function testElggUserIsAdmin() {
+ // need to grab a real user with a guid and everything.
+ $guid = $this->user->save();
+
+ $this->assertTrue($this->user->makeAdmin());
+
+ // this is testing the function, not the SQL.
+ // that's been tested above.
+ $this->assertTrue($this->user->isAdmin());
+
+ $this->user->delete();
+ }
+
+ public function testElggUserIsNotAdmin() {
+ // need to grab a real user with a guid and everything.
+ $guid = $this->user->save();
+
+ $this->assertTrue($this->user->removeAdmin());
+
+ // this is testing the function, not the SQL.
+ // that's been tested above.
+ $this->assertFalse($this->user->isAdmin());
+
+ $this->user->delete();
+ }
+
+ protected function fetchUser($guid) {
+ global $CONFIG;
+
+ return get_data_row("SELECT * FROM {$CONFIG->dbprefix}users_entity WHERE guid = '$guid'");
+ }
+}
+
+class ElggUserTest extends ElggUser {
+ public function expose_attributes() {
+ return $this->attributes;
+ }
+}
diff --git a/engine/tests/regression/trac_bugs.php b/engine/tests/regression/trac_bugs.php
new file mode 100644
index 000000000..691433a41
--- /dev/null
+++ b/engine/tests/regression/trac_bugs.php
@@ -0,0 +1,237 @@
+<?php
+/**
+ * Elgg Regression Tests -- Trac Bugfixes
+ * Any bugfixes from Trac that require testing belong here.
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreRegressionBugsTest extends ElggCoreUnitTest {
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ $this->ia = elgg_set_ignore_access(TRUE);
+ parent::__construct();
+
+ // all __construct() code should come after here
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ elgg_set_ignore_access($this->ia);
+ // all __destruct() code should go above here
+ parent::__destruct();
+ }
+
+ /**
+ * #1558
+ */
+ public function testElggObjectDeleteAnnotations() {
+ $this->entity = new ElggObject();
+ $guid = $this->entity->save();
+
+ $this->entity->annotate('test', 'hello', ACCESS_PUBLIC);
+
+ $this->entity->deleteAnnotations('does not exist');
+
+ $num = $this->entity->countAnnotations('test');
+
+ //$this->assertIdentical($num, 1);
+ $this->assertEqual($num, 1);
+
+ // clean up
+ $this->entity->delete();
+ }
+
+ /**
+ * #2063 - get_resized_image_from_existing_file() fails asked for image larger than selection and not scaling an image up
+ * Test get_image_resize_parameters().
+ */
+ public function testElggResizeImage() {
+ $orig_width = 100;
+ $orig_height = 150;
+
+ // test against selection > max
+ $options = array(
+ 'maxwidth' => 50,
+ 'maxheight' => 50,
+ 'square' => TRUE,
+ 'upscale' => FALSE,
+
+ 'x1' => 25,
+ 'y1' => 75,
+ 'x2' => 100,
+ 'y2' => 150
+ );
+
+ // should get back the same x/y offset == x1, y1 and an image of 50x50
+ $params = get_image_resize_parameters($orig_width, $orig_height, $options);
+
+ $this->assertEqual($params['newwidth'], $options['maxwidth']);
+ $this->assertEqual($params['newheight'], $options['maxheight']);
+ $this->assertEqual($params['xoffset'], $options['x1']);
+ $this->assertEqual($params['yoffset'], $options['y1']);
+
+ // test against selection < max
+ $options = array(
+ 'maxwidth' => 50,
+ 'maxheight' => 50,
+ 'square' => TRUE,
+ 'upscale' => FALSE,
+
+ 'x1' => 75,
+ 'y1' => 125,
+ 'x2' => 100,
+ 'y2' => 150
+ );
+
+ // should get back the same x/y offset == x1, y1 and an image of 25x25 because no upscale
+ $params = get_image_resize_parameters($orig_width, $orig_height, $options);
+
+ $this->assertEqual($params['newwidth'], 25);
+ $this->assertEqual($params['newheight'], 25);
+ $this->assertEqual($params['xoffset'], $options['x1']);
+ $this->assertEqual($params['yoffset'], $options['y1']);
+ }
+
+ // #3722 Check canEdit() works for contains regardless of groups
+ function test_can_write_to_container() {
+ $user = new ElggUser();
+ $user->username = 'test_user_' . rand();
+ $user->name = 'test_user_name_' . rand();
+ $user->email = 'test@user.net';
+ $user->container_guid = 0;
+ $user->owner_guid = 0;
+ $user->save();
+
+ $object = new ElggObject();
+ $object->save();
+
+ $group = new ElggGroup();
+ $group->save();
+
+ // disable access overrides because we're admin.
+ $ia = elgg_set_ignore_access(false);
+
+ $this->assertFalse(can_write_to_container($user->guid, $object->guid));
+
+ global $elgg_test_user;
+ $elgg_test_user = $user;
+
+ // register hook to allow access
+ function can_write_to_container_test_hook($hook, $type, $value, $params) {
+ global $elgg_test_user;
+
+ if ($params['user']->getGUID() == $elgg_test_user->getGUID()) {
+ return true;
+ }
+ }
+
+ elgg_register_plugin_hook_handler('container_permissions_check', 'all', 'can_write_to_container_test_hook');
+ $this->assertTrue(can_write_to_container($user->guid, $object->guid));
+ elgg_unregister_plugin_hook_handler('container_permissions_check', 'all', 'can_write_to_container_test_hook');
+
+ $this->assertFalse(can_write_to_container($user->guid, $group->guid));
+ $group->join($user);
+ $this->assertTrue(can_write_to_container($user->guid, $group->guid));
+
+ elgg_set_ignore_access($ia);
+
+ $user->delete();
+ $object->delete();
+ $group->delete();
+ }
+
+ function test_db_shutdown_links() {
+ global $DB_DELAYED_QUERIES, $test_results;
+ $DB_DELAYED_QUERIES = array();
+
+ function test_delayed_results($results) {
+ global $test_results;
+ $test_results = $results;
+ }
+
+ $q = 'SELECT 1 as test';
+
+ $links = array('read', 'write', get_db_link('read'), get_db_link('write'));
+
+ foreach ($links as $link) {
+ $DB_DELAYED_QUERIES = array();
+
+ $result = execute_delayed_query($q, $link, 'test_delayed_results');
+
+ $this->assertTrue($result, "Failed with link = $link");
+ $this->assertEqual(count($DB_DELAYED_QUERIES), 1);
+ $this->assertEqual($DB_DELAYED_QUERIES[0]['q'], $q);
+ $this->assertEqual($DB_DELAYED_QUERIES[0]['l'], $link);
+ $this->assertEqual($DB_DELAYED_QUERIES[0]['h'], 'test_delayed_results');
+
+ db_delayedexecution_shutdown_hook();
+
+ $num_rows = mysql_num_rows($test_results);
+ $this->assertEqual($num_rows, 1);
+ $row = mysql_fetch_assoc($test_results);
+ $this->assertEqual($row['test'], 1);
+ }
+
+ // test bad case
+ $DB_DELAYED_QUERIES = array();
+ $result = execute_delayed_query($q, 'not_a_link', 'test_delayed_results');
+ $this->assertFalse($result);
+ $this->assertEqual(array(), $DB_DELAYED_QUERIES);
+ }
+
+ /**
+ * http://trac.elgg.org/ticket/3210 - Don't remove -s in friendly titles
+ * http://trac.elgg.org/ticket/2276 - improve char encoding
+ */
+ public function test_friendly_title() {
+ $cases = array(
+ // hyphen, underscore and ASCII whitespace replaced by separator,
+ // other non-alphanumeric ASCII removed
+ "a-a_a a\na\ra\ta\va!a\"a#a\$a%a&a'a(a)a*a+a,a.a/a:a;a<a=a>a?a@a[a\\a]a^a`a{a|a}a~a"
+ => "a-a-a-a-a-a-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+
+ // separators trimmed
+ "-_ hello _-" => "hello",
+
+ // accents removed, lower case, other multibyte chars are URL encoded
+ "I\xC3\xB1t\xC3\xABrn\xC3\xA2ti\xC3\xB4n\xC3\xA0liz\xC3\xA6ti\xC3\xB8n, AND \xE6\x97\xA5\xE6\x9C\xAC\xE8\xAA\x9E"
+ // Iñtërnâtiônàlizætiøn, AND 日本語
+ => 'internationalizaetion-and-%E6%97%A5%E6%9C%AC%E8%AA%9E',
+
+ // some HTML entity replacements
+ "Me &amp; You" => 'me-and-you',
+ );
+
+ // where available, string is converted to NFC before transliteration
+ if (ElggTranslit::hasNormalizerSupport()) {
+ $form_d = "A\xCC\x8A"; // A followed by 'COMBINING RING ABOVE' (U+030A)
+ $cases[$form_d] = "a";
+ }
+
+ foreach ($cases as $case => $expected) {
+ $friendly_title = elgg_get_friendly_title($case);
+ $this->assertIdentical($expected, $friendly_title);
+ }
+ }
+}
diff --git a/engine/tests/services/api.php b/engine/tests/services/api.php
new file mode 100644
index 000000000..3d07c0bbb
--- /dev/null
+++ b/engine/tests/services/api.php
@@ -0,0 +1,324 @@
+<?php
+/**
+ * Elgg Test Services - General API and REST
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreServicesApiTest extends ElggCoreUnitTest {
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ global $API_METHODS;
+ $this->swallowErrors();
+ $API_METHODS = array();
+ }
+
+// expose_function
+ public function testExposeFunctionNoMethod() {
+ try {
+ @expose_function();
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidParameterException');
+ $this->assertIdentical($e->getMessage(), elgg_echo('InvalidParameterException:APIMethodOrFunctionNotSet'));
+ }
+ }
+
+ public function testExposeFunctionNoFunction() {
+ try {
+ @expose_function('test');
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidParameterException');
+ $this->assertIdentical($e->getMessage(), elgg_echo('InvalidParameterException:APIMethodOrFunctionNotSet'));
+ }
+ }
+
+ public function testExposeFunctionBadParameters() {
+ try {
+ @expose_function('test', 'test', 'BAD');
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidParameterException');
+ $this->assertIdentical($e->getMessage(), sprintf(elgg_echo('InvalidParameterException:APIParametersArrayStructure'), 'test'));
+ }
+ }
+
+ public function testExposeFunctionParametersBadArray() {
+ try {
+ expose_function('test', 'test', array('param1' => 'string'));
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidParameterException');
+ $this->assertIdentical($e->getMessage(), sprintf(elgg_echo('InvalidParameterException:APIParametersArrayStructure'), 'test'));
+ }
+ }
+
+ public function testExposeFunctionBadHttpMethod() {
+ try {
+ @expose_function('test', 'test', null, '', 'BAD');
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'InvalidParameterException');
+ $this->assertIdentical($e->getMessage(), sprintf(elgg_echo('InvalidParameterException:UnrecognisedHttpMethod'), 'BAD', 'test'));
+ }
+ }
+
+ public function testExposeFunctionSuccess() {
+ global $API_METHODS;
+ // this is a general test but also tests specifically for setting 'required' correctly
+ $parameters = array('param1' => array('type' => 'int', 'required' => true),
+ 'param2' => array('type' => 'bool'),
+ 'param3' => array('type' => 'string', 'required' => false), );
+
+ $this->assertTrue(expose_function('test', 'foo', $parameters));
+
+ $parameters = array('param1' => array('type' => 'int', 'required' => true),
+ 'param2' => array('type' => 'bool', 'required' => true),
+ 'param3' => array('type' => 'string', 'required' => false), );
+ $method['description'] = '';
+ $method['function'] = 'foo';
+ $method['parameters'] = $parameters;
+ $method['call_method'] = 'GET';
+ $method['require_api_auth'] = false;
+ $method['require_user_auth'] = false;
+
+ $this->assertIdentical($method, $API_METHODS['test']);
+ }
+
+// unexpose_function
+ public function testUnexposeFunction() {
+ global $API_METHODS;
+
+ $this->registerFunction();
+
+ unexpose_function('test');
+ $this->assertIdentical(array(), $API_METHODS);
+ }
+
+// authenticate_method
+ public function testAuthenticateMethodNotImplemented() {
+ try {
+ authenticate_method('BAD');
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'APIException');
+ $this->assertIdentical($e->getMessage(), sprintf(elgg_echo('APIException:MethodCallNotImplemented'), 'BAD'));
+ }
+ }
+
+ public function testAuthenticateMethodApiAuth() {
+ $this->registerFunction(true);
+ try {
+ authenticate_method('test');
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'APIException');
+ $this->assertIdentical($e->getMessage(), elgg_echo('APIException:APIAuthenticationFailed'));
+ }
+ }
+
+ public function testAuthenticateMethodUserAuth() {
+ $this->registerFunction(false, true);
+ try {
+ authenticate_method('test');
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'APIException');
+ }
+ }
+
+ public function testAuthenticateMethod() {
+ $this->registerFunction(false, false);
+ // anonymous with no user authentication
+ $this->assertTrue(authenticate_method('test'));
+ }
+
+// execute_method
+ public function testExecuteMethodNotImplemented() {
+ try {
+ execute_method('BAD');
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'APIException');
+ $this->assertIdentical($e->getMessage(), sprintf(elgg_echo('APIException:MethodCallNotImplemented'), 'BAD'));
+ }
+ }
+
+ public function testExecuteMethodNonCallable() {
+ expose_function('test', 'foo');
+
+ try {
+ execute_method('test');
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'APIException');
+ $this->assertIdentical($e->getMessage(), sprintf(elgg_echo('APIException:FunctionDoesNotExist'), 'test'));
+ }
+ }
+
+ public function testExecuteMethodWrongMethod() {
+ $this->registerFunction();
+
+ try {
+ // GET when it should be a POST
+ execute_method('test');
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'CallException');
+ $this->assertIdentical($e->getMessage(), sprintf(elgg_echo('CallException:InvalidCallMethod'), 'test', 'POST'));
+ }
+ }
+
+// verify parameters
+ public function testVerifyParametersTypeNotSet() {
+ $params = array('param1' => array('required' => true));
+ expose_function('test', 'elgg_echo', $params);
+
+ try {
+ verify_parameters('test', array());
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'APIException');
+ $this->assertIdentical($e->getMessage(), sprintf(elgg_echo('APIException:InvalidParameter'), 'param1', 'test'));
+ }
+ }
+
+ public function testVerifyParametersMissing() {
+ $params = array('param1' => array('type' => 'int', 'required' => true));
+ expose_function('test', 'elgg_echo', $params);
+
+ try {
+ verify_parameters('test', array());
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'APIException');
+ $this->assertIdentical($e->getMessage(), sprintf(elgg_echo('APIException:MissingParameterInMethod'), 'param1', 'test'));
+ }
+ }
+
+ public function testVerifyParameters() {
+ $this->registerFunction();
+
+ $parameters = array('param1' => 0);
+ $this->assertTrue(verify_parameters('test', $parameters));
+ }
+
+ public function testSerialiseParameters() {
+
+ // int and bool
+ $this->registerFunction();
+ $parameters = array('param1' => 1, 'param2' => 0);
+ $s = serialise_parameters('test', $parameters);
+ $this->assertIdentical($s, ',1,false');
+
+ // string
+ $this->registerFunction(false, false, array('param1' => array('type' => 'string')));
+ $parameters = array('param1' => 'testing');
+ $s = serialise_parameters('test', $parameters);
+ $this->assertIdentical($s, ",'testing'");
+
+ // test string with " in it
+ $this->registerFunction(false, false, array('param1' => array('type' => 'string')));
+ $parameters = array('param1' => 'test"ing');
+ $s = serialise_parameters('test', $parameters);
+ $this->assertIdentical($s, ',\'test"ing\'');
+
+ // test string with ' in it
+ $this->registerFunction(false, false, array('param1' => array('type' => 'string')));
+ $parameters = array('param1' => 'test\'ing');
+ $s = serialise_parameters('test', $parameters);
+ $this->assertIdentical($s, ",'test\'ing'");
+
+ // test string with \ in it
+ $this->registerFunction(false, false, array('param1' => array('type' => 'string')));
+ $parameters = array('param1' => 'test\ing');
+ $s = serialise_parameters('test', $parameters);
+ $this->assertIdentical($s, ",'test\\ing'");
+
+ // test string with \' in it
+ $this->registerFunction(false, false, array('param1' => array('type' => 'string')));
+ $parameters = array('param1' => "test\'ing");
+ $s = serialise_parameters('test', $parameters);
+ $this->assertIdentical($s, ",'test\\\\'ing'"); // test\\'ing
+
+ // test string reported by twall in #1364
+ $this->registerFunction(false, false, array('param1' => array('type' => 'string')));
+ $parameters = array('param1' => '{"html":"<div><img src=\\"http://foo.com\\"/>Blah Blah</div>"}');
+ $s = serialise_parameters('test', $parameters);
+ $this->assertIdentical($s, ",'{\"html\":\"<div><img src=\\\"http://foo.com\\\"/>Blah Blah</div>\"}'");
+
+ // float
+ $this->registerFunction(false, false, array('param1' => array('type' => 'float')));
+ $parameters = array('param1' => 2.5);
+ $s = serialise_parameters('test', $parameters);
+ $this->assertIdentical($s, ',2.5');
+
+ // indexed array of strings
+ $this->registerFunction(false, false, array('param1' => array('type' => 'array')));
+ $parameters = array('param1' => array('one', 'two'));
+ $s = serialise_parameters('test', $parameters);
+ $this->assertIdentical($s, ",array('0'=>'one','1'=>'two')");
+
+ // associative array of strings
+ $this->registerFunction(false, false, array('param1' => array('type' => 'array')));
+ $parameters = array('param1' => array('first' => 'one', 'second' => 'two'));
+ $s = serialise_parameters('test', $parameters);
+ $this->assertIdentical($s, ",array('first'=>'one','second'=>'two')");
+
+ // indexed array of strings
+ $this->registerFunction(false, false, array('param1' => array('type' => 'array')));
+ $parameters = array('param1' => array(1, 2));
+ $s = serialise_parameters('test', $parameters);
+ $this->assertIdentical($s, ",array('0'=>'1','1'=>'2')");
+
+ // test unknown type
+ $this->registerFunction(false, false, array('param1' => array('type' => 'bad')));
+ $parameters = array('param1' => 'test');
+ $this->expectException('APIException');
+ $s = serialise_parameters('test', $parameters);
+ }
+
+// api key methods
+ //public function testApiAuthenticate() {
+ // $this->assertFalse(pam_authenticate(null, "api"));
+ //}
+
+ public function testApiAuthKeyNoKey() {
+ try {
+ api_auth_key();
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'APIException');
+ $this->assertIdentical($e->getMessage(), elgg_echo('APIException:MissingAPIKey'));
+ }
+ }
+
+ public function testApiAuthKeyBadKey() {
+ global $CONFIG;
+
+ $CONFIG->input['api_key'] = 'BAD';
+ try {
+ api_auth_key();
+ $this->assertTrue(FALSE);
+ } catch (Exception $e) {
+ $this->assertIsA($e, 'APIException');
+ $this->assertIdentical($e->getMessage(), elgg_echo('APIException:BadAPIKey'));
+ }
+ }
+
+ protected function registerFunction($api_auth = false, $user_auth = false, $params = null) {
+ $parameters = array('param1' => array('type' => 'int', 'required' => true),
+ 'param2' => array('type' => 'bool', 'required' => false), );
+
+ if ($params == null) {
+ $params = $parameters;
+ }
+
+ expose_function('test', 'elgg_echo', $params, '', 'POST', $api_auth, $user_auth);
+ }
+
+}
diff --git a/engine/tests/suite.php b/engine/tests/suite.php
new file mode 100644
index 000000000..4203bc5d6
--- /dev/null
+++ b/engine/tests/suite.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Runs unit tests.
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+
+
+require_once(dirname( __FILE__ ) . '/../start.php');
+
+admin_gatekeeper();
+
+$vendor_path = "$CONFIG->path/vendors/simpletest";
+$test_path = "$CONFIG->path/engine/tests";
+
+require_once("$vendor_path/unit_tester.php");
+require_once("$vendor_path/mock_objects.php");
+require_once("$vendor_path/reporter.php");
+require_once("$test_path/elgg_unit_test.php");
+
+// turn off system log
+elgg_unregister_event_handler('all', 'all', 'system_log_listener');
+elgg_unregister_event_handler('log', 'systemlog', 'system_log_default_logger');
+
+// Disable maximum execution time.
+// Tests take a while...
+set_time_limit(0);
+
+$suite = new TestSuite('Elgg Core Unit Tests');
+
+// emit a hook to pull in all tests
+$test_files = elgg_trigger_plugin_hook('unit_test', 'system', null, array());
+foreach ($test_files as $file) {
+ $suite->addTestFile($file);
+}
+
+// Only run tests in debug mode.
+if (!isset($CONFIG->debug)) {
+ exit ('The site must be in debug mode to run unit tests.');
+}
+
+if (TextReporter::inCli()) {
+ // In CLI error codes are returned: 0 is success
+ elgg_set_ignore_access(TRUE);
+ exit ($suite->Run(new TextReporter()) ? 0 : 1 );
+}
+
+// Ensure that only logged-in users can see this page
+//admin_gatekeeper();
+$old = elgg_set_ignore_access(TRUE);
+$suite->Run(new HtmlReporter('utf-8'));
+elgg_set_ignore_access($old);
diff --git a/engine/tests/test_files/output/autop/block-a.exp.norun.html b/engine/tests/test_files/output/autop/block-a.exp.norun.html
new file mode 100644
index 000000000..addf29dec
--- /dev/null
+++ b/engine/tests/test_files/output/autop/block-a.exp.norun.html
@@ -0,0 +1,6 @@
+
+<p>HTML5 allows A to contain block-level content</p>
+<a href="foo"><h3>A treated as block</h3>
+<p>Read more</p>
+</a>
+<p><a href="foo">A treated as<br /> inline</a></p>
diff --git a/engine/tests/test_files/output/autop/block-a.in.norun.html b/engine/tests/test_files/output/autop/block-a.in.norun.html
new file mode 100644
index 000000000..fc2dac43a
--- /dev/null
+++ b/engine/tests/test_files/output/autop/block-a.in.norun.html
@@ -0,0 +1,9 @@
+HTML5 allows A to contain block-level content
+<a href="foo">
+
+ <h3>A treated as block</h3>
+
+ Read more
+</a>
+<a href="foo">A treated as
+ inline</a>
diff --git a/engine/tests/test_files/output/autop/domdoc_exp.html b/engine/tests/test_files/output/autop/domdoc_exp.html
new file mode 100644
index 000000000..8480c1083
--- /dev/null
+++ b/engine/tests/test_files/output/autop/domdoc_exp.html
@@ -0,0 +1,46 @@
+›
+ 
+Vietnamese - Tiếng Việt
+
+<h1>h1</h1>
+<p>Paragraph <a href="http://google.com/">link</a> <strong>Bold</strong> <em>italic</em> <em><strong>bolditalic</strong></em> <span style="background-color: #ffff00; "></span></p>
+<h2>h2</h2>
+<p>Paragraph <span style="font-size: xx-small;">size1</span> <span style="font-size: x-small;">size2</span> <span style="font-size: medium;">size4</span></p>
+<h3>h3</h3>
+<p>Paragraph <span style="text-decoration: underline;">underline</span> <span style="text-decoration: line-through;">strikethrough</span> <span style="color: #ff0000;">color</span> <span style="background-color: #ffff00; ">background</span></p>
+<blockquote>
+ <p>Blockquoted paragraph</p>
+</blockquote>
+<p>Paragraph following blockquote</p>
+<ul><li>Unordered</li>
+ <li>List</li>
+</ul><p>Paragraph between lists</p>
+<ol><li>Ordered</li>
+ <li>List</li>
+</ol><p>Paragraph between lists</p>
+<ul><li>OL list</li>
+ <li>nested<ol><li>inside a</li>
+ <li>UL list</li>
+ </ol></li>
+</ul><p>Paragraph between lists</p>
+<table border="0"><tbody><tr><td>Table with</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>border=0</td>
+ </tr></tbody></table><p>Paragraph</p>
+<ol><li>UL list</li>
+ <li>nested
+ <ul><li>inside a</li>
+ <li>OL list</li>
+ </ul></li>
+</ol><p>Paragraph between tables</p>
+<table border="1" cellpadding="5"><tbody><tr><td>Table with border=1</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>cellpadding = 5</td>
+ </tr></tbody></table><p>Paragraph between tables</p>
+<table border="2"><tbody><tr><td>Table with</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>border=2</td>
+ </tr></tbody></table> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/domdoc_in.html b/engine/tests/test_files/output/autop/domdoc_in.html
new file mode 100644
index 000000000..4c465b435
--- /dev/null
+++ b/engine/tests/test_files/output/autop/domdoc_in.html
@@ -0,0 +1,80 @@
+&#8250;
+&nbsp;
+Vietnamese - Tiếng Việt
+
+<h1>h1</h1>
+<p>Paragraph <a href="http://google.com/">link</a> <strong>Bold</strong> <em>italic</em> <em><strong>bolditalic</strong></em>&nbsp;<span style="background-color: #ffff00; "></span></p>
+<h2>h2</h2>
+<p>Paragraph <span style="font-size: xx-small;">size1</span> <span style="font-size: x-small;">size2</span> <span style="font-size: medium;">size4</span></p>
+<h3>h3</h3>
+<p>Paragraph <span style="text-decoration: underline;">underline</span> <span style="text-decoration: line-through;">strikethrough</span> <span style="color: #ff0000;">color</span> <span style="background-color: #ffff00; ">background</span></p>
+<blockquote>
+ <p>Blockquoted paragraph</p>
+</blockquote>
+<p>Paragraph following blockquote</p>
+<ul>
+ <li>Unordered</li>
+ <li>List</li>
+</ul>
+<p>Paragraph between lists</p>
+<ol>
+ <li>Ordered</li>
+ <li>List</li>
+</ol>
+<p>Paragraph between lists</p>
+<ul>
+ <li>OL list</li>
+ <li>nested<ol>
+ <li>inside a</li>
+ <li>UL list</li>
+ </ol></li>
+</ul>
+<p>Paragraph between lists</p>
+<table border="0">
+ <tbody>
+ <tr>
+ <td>Table with</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>border=0</td>
+ </tr>
+ </tbody>
+</table>
+<p>Paragraph</p>
+<ol>
+ <li>UL list</li>
+ <li>nested
+ <ul>
+ <li>inside a</li>
+ <li>OL list</li>
+ </ul>
+ </li>
+</ol>
+<p>Paragraph between tables</p>
+<table border="1" cellpadding="5">
+ <tbody>
+ <tr>
+ <td>Table with border=1</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>cellpadding = 5</td>
+ </tr>
+ </tbody>
+</table>
+<p>Paragraph between tables</p>
+<table border="2">
+ <tbody>
+ <tr>
+ <td>Table with</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>border=2</td>
+ </tr>
+ </tbody>
+</table> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/typical-post.exp.html b/engine/tests/test_files/output/autop/typical-post.exp.html
new file mode 100644
index 000000000..f9d75a114
--- /dev/null
+++ b/engine/tests/test_files/output/autop/typical-post.exp.html
@@ -0,0 +1,84 @@
+<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h2>
+<p><img class="alignright size-thumbnail wp-image-905" title="Surest Things mixing session in Adobe Audition" src="http://www.mrclay.org/wp-content/uploads/2010/09/surestThings_audition-150x150.png" alt="screenshot of Audition mixing session" width="150" height="150">Vivamus enim ante, <em>mattis eget imperdiet nec, pharetra vel velit.</em> Sed at euismod nibh. Praesent lacus tellus, <a href="http://google.com/">posuere et convallis</a> a, <strong>mollis et tellus. Suspendisse potenti</strong>. Phasellus tincidunt dignissim est eget mattis. Vestibulum lacinia <del>condimentum tellus, non vestibulum erat dapibus</del> quis. Aliquam arcu nibh, viverra adipiscing eleifend quis, pretium vitae ipsum.</p>
+
+<p>Curabitur turpis ante, <span style="color: #993300;">congue ac dapibus quis, vehicula ac orci.</span> Nunc luctus neque non massa porta sed pharetra ante accumsan. <a href="http://google.com/">Nam suscipit</a> risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor.</p>
+<h3>Donec at massa ante, sagittis fermentum urna.</h3><blockquote>
+<p>Mauris volutpat est id massa volutpat lacinia. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In in nisl mauris. In aliquet pretium nisl, vel convallis neque cursus vitae. Curabitur id mauris in urna gravida ornare.</p>
+
+<p>[caption id="attachment_719" align="alignleft" width="150" caption="Ibanez AGB140 Bass"]<img class="size-thumbnail wp-image-719" title="Ibanez AGB140 Bass" src="http://www.mrclay.org/wp-content/uploads/2010/04/agb140-e1271773766573-150x150.jpg" alt="Ibanez AGB140 Bass" width="150" height="150">[/caption]</p>
+
+<p>Aenean <a href="http://google.com/">aliquet cursus purus sed gravida. Cras auctor euismod justo, ac dictum purus facilisis dignissim.</a> Quisque facilisis porta sem, ac suscipit quam molestie nec. Pellentesque quis hendrerit enim. Vivamus tempor erat diam. Sed eu felis nunc. Cras posuere lorem commodo turpis mollis sagittis. Mauris lobortis nunc felis.</p>
+
+<p>Maecenas elit lorem, varius sed condimentum ac, cursus et magna. Nam ut massa id augue consectetur porttitor eleifend in nunc. Curabitur cursus varius dictum. Vestibulum vel justo et neque tempus placerat a vel sapien.</p>
+</blockquote>
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus enim ante, mattis eget imperdiet nec, <a href="http://google.com/">pharetra </a>vel velit. Sed at euismod nibh. Praesent lacus tellus, posuere et convallis a, mollis et tellus.</p>
+<pre><code>&lt;?php
+class DataTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider provider
+ */
+ public function testAdd($a, $b, $c)
+ {
+ $this-&gt;assertEquals($c, $a + $b);
+ }
+
+ public function provider()
+ {
+ return array(
+ array(0, 0, 0),
+ array(0, 1, 1),
+ array(1, 0, 1),
+ array(1, 1, 3)
+ );
+ }
+}</code></pre><ul><li>Suspendisse potenti. Phasellus tincidunt dignissim est eget mattis.</li>
+ <li>Vestibulum lacinia condimentum tellus, non vestibulum erat dapibus quis.</li>
+ <li>Aliquam arcu nibh, <a href="http://google.com/">viverra</a> adipiscing eleifend quis, pretium vitae ipsum.</li>
+ <li>Curabitur turpis ante, congue ac <a href="http://google.com/">dapibus quis</a>, vehicula ac orci.</li>
+</ul>
+<p>Nunc luctus neque non massa porta sed pharetra ante accumsan. Nam suscipit risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor. Donec at massa ante, sagittis fermentum urna.</p>
+
+<p><object width="480" height="390"><param name="movie" value="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed type="application/x-shockwave-flash" width="480" height="390" src="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
+<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h2>
+<p><img class="alignright size-thumbnail wp-image-905" title="Surest Things mixing session in Adobe Audition" src="http://www.mrclay.org/wp-content/uploads/2010/09/surestThings_audition-150x150.png" alt="screenshot of Audition mixing session" width="150" height="150">Vivamus enim ante, <em>mattis eget imperdiet nec, pharetra vel velit.</em> Sed at euismod nibh. Praesent lacus tellus, <a href="http://google.com/">posuere et convallis</a> a, <strong>mollis et tellus. Suspendisse potenti</strong>. Phasellus tincidunt dignissim est eget mattis. Vestibulum lacinia <del>condimentum tellus, non vestibulum erat dapibus</del> quis. Aliquam arcu nibh, viverra adipiscing eleifend quis, pretium vitae ipsum.</p>
+
+<p>Curabitur turpis ante, <span style="color: #993300;">congue ac dapibus quis, vehicula ac orci.</span> Nunc luctus neque non massa porta sed pharetra ante accumsan. <a href="http://google.com/">Nam suscipit</a> risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor.</p>
+<h3>Donec at massa ante, sagittis fermentum urna.</h3><blockquote>
+<p>Mauris volutpat est id massa volutpat lacinia. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In in nisl mauris. In aliquet pretium nisl, vel convallis neque cursus vitae. Curabitur id mauris in urna gravida ornare.</p>
+
+<p>[caption id="attachment_719" align="alignleft" width="150" caption="Ibanez AGB140 Bass"]<img class="size-thumbnail wp-image-719" title="Ibanez AGB140 Bass" src="http://www.mrclay.org/wp-content/uploads/2010/04/agb140-e1271773766573-150x150.jpg" alt="Ibanez AGB140 Bass" width="150" height="150">[/caption]</p>
+
+<p>Aenean <a href="http://google.com/">aliquet cursus purus sed gravida. Cras auctor euismod justo, ac dictum purus facilisis dignissim.</a> Quisque facilisis porta sem, ac suscipit quam molestie nec. Pellentesque quis hendrerit enim. Vivamus tempor erat diam. Sed eu felis nunc. Cras posuere lorem commodo turpis mollis sagittis. Mauris lobortis nunc felis.</p>
+
+<p>Maecenas elit lorem, varius sed condimentum ac, cursus et magna. Nam ut massa id augue consectetur porttitor eleifend in nunc. Curabitur cursus varius dictum. Vestibulum vel justo et neque tempus placerat a vel sapien.</p>
+</blockquote>
+<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus enim ante, mattis eget imperdiet nec, <a href="http://google.com/">pharetra </a>vel velit. Sed at euismod nibh. Praesent lacus tellus, posuere et convallis a, mollis et tellus.</p>
+<pre><code>&lt;?php
+class DataTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider provider
+ */
+ public function testAdd($a, $b, $c)
+ {
+ $this-&gt;assertEquals($c, $a + $b);
+ }
+
+ public function provider()
+ {
+ return array(
+ array(0, 0, 0),
+ array(0, 1, 1),
+ array(1, 0, 1),
+ array(1, 1, 3)
+ );
+ }
+}</code></pre><ul><li>Suspendisse potenti. Phasellus tincidunt dignissim est eget mattis.</li>
+ <li>Vestibulum lacinia condimentum tellus, non vestibulum erat dapibus quis.</li>
+ <li>Aliquam arcu nibh, <a href="http://google.com/">viverra</a> adipiscing eleifend quis, pretium vitae ipsum.</li>
+ <li>Curabitur turpis ante, congue ac <a href="http://google.com/">dapibus quis</a>, vehicula ac orci.</li>
+</ul>
+<p>Nunc luctus neque non massa porta sed pharetra ante accumsan. Nam suscipit risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor. Donec at massa ante, sagittis fermentum urna.</p>
+
+<p><object width="480" height="390"><param name="movie" value="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed type="application/x-shockwave-flash" width="480" height="390" src="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
diff --git a/engine/tests/test_files/output/autop/typical-post.in.html b/engine/tests/test_files/output/autop/typical-post.in.html
new file mode 100644
index 000000000..6e4984cc4
--- /dev/null
+++ b/engine/tests/test_files/output/autop/typical-post.in.html
@@ -0,0 +1,89 @@
+<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h2>
+<img class="alignright size-thumbnail wp-image-905" title="Surest Things mixing session in Adobe Audition" src="http://www.mrclay.org/wp-content/uploads/2010/09/surestThings_audition-150x150.png" alt="screenshot of Audition mixing session" width="150" height="150" />Vivamus enim ante, <em>mattis eget imperdiet nec, pharetra vel velit.</em> Sed at euismod nibh. Praesent lacus tellus, <a href="http://google.com/">posuere et convallis</a> a, <strong>mollis et tellus. Suspendisse potenti</strong>. Phasellus tincidunt dignissim est eget mattis. Vestibulum lacinia <del>condimentum tellus, non vestibulum erat dapibus</del> quis. Aliquam arcu nibh, viverra adipiscing eleifend quis, pretium vitae ipsum.
+
+Curabitur turpis ante, <span style="color: #993300;">congue ac dapibus quis, vehicula ac orci.</span> Nunc luctus neque non massa porta sed pharetra ante accumsan. <a href="http://google.com/">Nam suscipit</a> risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor.
+<h3>Donec at massa ante, sagittis fermentum urna.</h3>
+<blockquote>Mauris volutpat est id massa volutpat lacinia. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In in nisl mauris. In aliquet pretium nisl, vel convallis neque cursus vitae. Curabitur id mauris in urna gravida ornare.
+
+[caption id="attachment_719" align="alignleft" width="150" caption="Ibanez AGB140 Bass"]<img class="size-thumbnail wp-image-719" title="Ibanez AGB140 Bass" src="http://www.mrclay.org/wp-content/uploads/2010/04/agb140-e1271773766573-150x150.jpg" alt="Ibanez AGB140 Bass" width="150" height="150" />[/caption]
+
+Aenean <a href="http://google.com/">aliquet cursus purus sed gravida. Cras auctor euismod justo, ac dictum purus facilisis dignissim.</a> Quisque facilisis porta sem, ac suscipit quam molestie nec. Pellentesque quis hendrerit enim. Vivamus tempor erat diam. Sed eu felis nunc. Cras posuere lorem commodo turpis mollis sagittis. Mauris lobortis nunc felis.
+
+Maecenas elit lorem, varius sed condimentum ac, cursus et magna. Nam ut massa id augue consectetur porttitor eleifend in nunc. Curabitur cursus varius dictum. Vestibulum vel justo et neque tempus placerat a vel sapien.</blockquote>
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus enim ante, mattis eget imperdiet nec, <a href="http://google.com/">pharetra </a>vel velit. Sed at euismod nibh. Praesent lacus tellus, posuere et convallis a, mollis et tellus.
+
+<pre><code>&lt;?php
+class DataTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider provider
+ */
+ public function testAdd($a, $b, $c)
+ {
+ $this-&gt;assertEquals($c, $a + $b);
+ }
+
+ public function provider()
+ {
+ return array(
+ array(0, 0, 0),
+ array(0, 1, 1),
+ array(1, 0, 1),
+ array(1, 1, 3)
+ );
+ }
+}</code></pre>
+<ul>
+ <li>Suspendisse potenti. Phasellus tincidunt dignissim est eget mattis.</li>
+ <li>Vestibulum lacinia condimentum tellus, non vestibulum erat dapibus quis.</li>
+ <li>Aliquam arcu nibh, <a href="http://google.com/">viverra</a> adipiscing eleifend quis, pretium vitae ipsum.</li>
+ <li>Curabitur turpis ante, congue ac <a href="http://google.com/">dapibus quis</a>, vehicula ac orci.</li>
+</ul>
+Nunc luctus neque non massa porta sed pharetra ante accumsan. Nam suscipit risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor. Donec at massa ante, sagittis fermentum urna.
+
+<object width="480" height="390"><param name="movie" value="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="480" height="390" src="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" allowfullscreen="true" allowscriptaccess="always"></embed></object>
+
+<h2>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</h2>
+<img class="alignright size-thumbnail wp-image-905" title="Surest Things mixing session in Adobe Audition" src="http://www.mrclay.org/wp-content/uploads/2010/09/surestThings_audition-150x150.png" alt="screenshot of Audition mixing session" width="150" height="150" />Vivamus enim ante, <em>mattis eget imperdiet nec, pharetra vel velit.</em> Sed at euismod nibh. Praesent lacus tellus, <a href="http://google.com/">posuere et convallis</a> a, <strong>mollis et tellus. Suspendisse potenti</strong>. Phasellus tincidunt dignissim est eget mattis. Vestibulum lacinia <del>condimentum tellus, non vestibulum erat dapibus</del> quis. Aliquam arcu nibh, viverra adipiscing eleifend quis, pretium vitae ipsum.
+
+Curabitur turpis ante, <span style="color: #993300;">congue ac dapibus quis, vehicula ac orci.</span> Nunc luctus neque non massa porta sed pharetra ante accumsan. <a href="http://google.com/">Nam suscipit</a> risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor.
+<h3>Donec at massa ante, sagittis fermentum urna.</h3>
+<blockquote>Mauris volutpat est id massa volutpat lacinia. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. In in nisl mauris. In aliquet pretium nisl, vel convallis neque cursus vitae. Curabitur id mauris in urna gravida ornare.
+
+[caption id="attachment_719" align="alignleft" width="150" caption="Ibanez AGB140 Bass"]<img class="size-thumbnail wp-image-719" title="Ibanez AGB140 Bass" src="http://www.mrclay.org/wp-content/uploads/2010/04/agb140-e1271773766573-150x150.jpg" alt="Ibanez AGB140 Bass" width="150" height="150" />[/caption]
+
+Aenean <a href="http://google.com/">aliquet cursus purus sed gravida. Cras auctor euismod justo, ac dictum purus facilisis dignissim.</a> Quisque facilisis porta sem, ac suscipit quam molestie nec. Pellentesque quis hendrerit enim. Vivamus tempor erat diam. Sed eu felis nunc. Cras posuere lorem commodo turpis mollis sagittis. Mauris lobortis nunc felis.
+
+Maecenas elit lorem, varius sed condimentum ac, cursus et magna. Nam ut massa id augue consectetur porttitor eleifend in nunc. Curabitur cursus varius dictum. Vestibulum vel justo et neque tempus placerat a vel sapien.</blockquote>
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus enim ante, mattis eget imperdiet nec, <a href="http://google.com/">pharetra </a>vel velit. Sed at euismod nibh. Praesent lacus tellus, posuere et convallis a, mollis et tellus.
+
+<pre><code>&lt;?php
+class DataTest extends PHPUnit_Framework_TestCase
+{
+ /**
+ * @dataProvider provider
+ */
+ public function testAdd($a, $b, $c)
+ {
+ $this-&gt;assertEquals($c, $a + $b);
+ }
+
+ public function provider()
+ {
+ return array(
+ array(0, 0, 0),
+ array(0, 1, 1),
+ array(1, 0, 1),
+ array(1, 1, 3)
+ );
+ }
+}</code></pre>
+<ul>
+ <li>Suspendisse potenti. Phasellus tincidunt dignissim est eget mattis.</li>
+ <li>Vestibulum lacinia condimentum tellus, non vestibulum erat dapibus quis.</li>
+ <li>Aliquam arcu nibh, <a href="http://google.com/">viverra</a> adipiscing eleifend quis, pretium vitae ipsum.</li>
+ <li>Curabitur turpis ante, congue ac <a href="http://google.com/">dapibus quis</a>, vehicula ac orci.</li>
+</ul>
+Nunc luctus neque non massa porta sed pharetra ante accumsan. Nam suscipit risus quis libero convallis viverra. Ut at arcu enim, vel pharetra dolor. Donec at massa ante, sagittis fermentum urna.
+
+<object width="480" height="390"><param name="movie" value="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed type="application/x-shockwave-flash" width="480" height="390" src="http://www.youtube.com/v/zW9YOMaVTFI?fs=1&amp;hl=en_US" allowfullscreen="true" allowscriptaccess="always"></embed></object> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/wp-welcome.exp.html b/engine/tests/test_files/output/autop/wp-welcome.exp.html
new file mode 100644
index 000000000..2f612e3dd
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wp-welcome.exp.html
@@ -0,0 +1,22 @@
+
+<p>Welcome to WordPress! This post contains important information. After you read it, you can make it private to hide it from visitors but still have the information handy for future reference.</p>
+
+<p>First things first:</p>
+<ul><li><a href="%1%24s" title="Subscribe to the WordPress mailing list for Release Notifications">Subscribe to the WordPress mailing list for release notifications</a></li>
+</ul>
+<p>As a subscriber, you will receive an email every time an update is available (and only then). This will make it easier to keep your site up to date, and secure from evildoers.<br />When a new version is released, <a href="%2%24s" title="If you are already logged in, this will take you directly to the Dashboard">log in to the Dashboard</a> and follow the instructions.<br />Upgrading is a couple of clicks!</p>
+
+<p>Then you can start enjoying the WordPress experience:</p>
+<ul><li>Edit your personal information at <a href="%3%24s" title="Edit settings like your password, your display name and your contact information">Users &#8250; Your Profile</a></li>
+ <li>Start publishing at <a href="%4%24s" title="Create a new post">Posts &#8250; Add New</a> and at <a href="%5%24s" title="Create a new page">Pages &#8250; Add New</a></li>
+ <li>Browse and install plugins at <a href="%6%24s" title="Browse and install plugins at the official WordPress repository directly from your Dashboard">Plugins &#8250; Add New</a></li>
+ <li>Browse and install themes at <a href="%7%24s" title="Browse and install themes at the official WordPress repository directly from your Dashboard">Appearance &#8250; Add New Themes</a></li>
+ <li>Modify and prettify your website&#8217;s links at <a href="%8%24s" title="For example, select a link structure like: http://example.com/1999/12/post-name">Settings &#8250; Permalinks</a></li>
+ <li>Import content from another system or WordPress site at <a href="%9%24s" title="WordPress comes with importers for the most common publishing systems">Tools &#8250; Import</a></li>
+ <li>Find answers to your questions at the <a href="%10%24s" title="The official WordPress documentation, maintained by the WordPress community">WordPress Codex</a></li>
+</ul>
+<p>To keep this post for reference, <a href="%11%24s" title="Click to edit the content and settings of this post">click to edit it</a>, go to the Publish box and change its Visibility from Public to Private.</p>
+
+<p>Thank you for selecting WordPress. We wish you happy publishing!</p>
+
+<p>PS. Not yet subscribed for update notifications? <a href="%1%24s" title="Subscribe to the WordPress mailing list for Release Notifications">Do it now!</a></p>
diff --git a/engine/tests/test_files/output/autop/wp-welcome.in.html b/engine/tests/test_files/output/autop/wp-welcome.in.html
new file mode 100644
index 000000000..338ede73f
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wp-welcome.in.html
@@ -0,0 +1,25 @@
+Welcome to WordPress! This post contains important information. After you read it, you can make it private to hide it from visitors but still have the information handy for future reference.
+
+First things first:
+<ul>
+ <li><a href="%1$s" title="Subscribe to the WordPress mailing list for Release Notifications">Subscribe to the WordPress mailing list for release notifications</a></li>
+</ul>
+As a subscriber, you will receive an email every time an update is available (and only then). This will make it easier to keep your site up to date, and secure from evildoers.
+When a new version is released, <a href="%2$s" title="If you are already logged in, this will take you directly to the Dashboard">log in to the Dashboard</a> and follow the instructions.
+Upgrading is a couple of clicks!
+
+Then you can start enjoying the WordPress experience:
+<ul>
+ <li>Edit your personal information at <a href="%3$s" title="Edit settings like your password, your display name and your contact information">Users &#8250; Your Profile</a></li>
+ <li>Start publishing at <a href="%4$s" title="Create a new post">Posts &#8250; Add New</a> and at <a href="%5$s" title="Create a new page">Pages &#8250; Add New</a></li>
+ <li>Browse and install plugins at <a href="%6$s" title="Browse and install plugins at the official WordPress repository directly from your Dashboard">Plugins &#8250; Add New</a></li>
+ <li>Browse and install themes at <a href="%7$s" title="Browse and install themes at the official WordPress repository directly from your Dashboard">Appearance &#8250; Add New Themes</a></li>
+ <li>Modify and prettify your website&#8217;s links at <a href="%8$s" title="For example, select a link structure like: http://example.com/1999/12/post-name">Settings &#8250; Permalinks</a></li>
+ <li>Import content from another system or WordPress site at <a href="%9$s" title="WordPress comes with importers for the most common publishing systems">Tools &#8250; Import</a></li>
+ <li>Find answers to your questions at the <a href="%10$s" title="The official WordPress documentation, maintained by the WordPress community">WordPress Codex</a></li>
+</ul>
+To keep this post for reference, <a href="%11$s" title="Click to edit the content and settings of this post">click to edit it</a>, go to the Publish box and change its Visibility from Public to Private.
+
+Thank you for selecting WordPress. We wish you happy publishing!
+
+PS. Not yet subscribed for update notifications? <a href="%1$s" title="Subscribe to the WordPress mailing list for Release Notifications">Do it now!</a>
diff --git a/engine/tests/test_files/output/autop/wpautop-fails.exp.html b/engine/tests/test_files/output/autop/wpautop-fails.exp.html
new file mode 100644
index 000000000..d018db4ff
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wpautop-fails.exp.html
@@ -0,0 +1,31 @@
+
+<p>paragraph</p>
+
+<p>paragraph</p>
+<div class="whatever"><blockquote>
+<p>paragraph</p>
+</blockquote>
+<p>line</p>
+</div>
+<p>paragraph</p>
+<ul><li>line</li>
+<li>paragraph
+
+paragraph</li>
+</ul>
+<p>paragraph<br />line<br />line</p>
+<pre>Honor
+this whitespace
+</pre>
+<p>paragraph</p>
+<style><!--
+Do not alter!
+--></style>
+<p>paragraph <!-- do not alter --></p>
+<dl><dt>term</dt> <dd>paragraph
+
+<a href="xx"> <img src="yy"></a>
+
+paragraph</dd> </dl><div><a href="xx"> <img src="yy"></a></div>
+<p>Hello <a href="link"><br /><br />World</a></p>
+<p id="abc">Paragraph</p><div>Line</div> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/wpautop-fails.in.html b/engine/tests/test_files/output/autop/wpautop-fails.in.html
new file mode 100644
index 000000000..9aa24be59
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wpautop-fails.in.html
@@ -0,0 +1,41 @@
+
+paragraph
+
+paragraph <div class="whatever"><blockquote>
+ paragraph
+ </blockquote>
+ line
+</div>
+
+paragraph
+<ul>
+<li>line</li>
+<li>paragraph
+
+paragraph</li>
+</ul>
+paragraph
+line<br>
+ line
+<pre>Honor
+this whitespace
+</pre>
+paragraph
+<style><!--
+Do not alter!
+--></style>
+paragraph <!-- do not alter -->
+<dl> <dt>term</dt> <dd>paragraph
+
+<a href="xx"> <img src="yy" /> </a>
+
+paragraph</dd> </dl>
+<div><a href="xx"> <img src="yy" /> </a></div>
+
+Hello <a href="link">
+
+World</a>
+
+<p id="abc">Paragraph</p>
+
+<div>Line</div> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/wysiwyg-test.exp.html b/engine/tests/test_files/output/autop/wysiwyg-test.exp.html
new file mode 100644
index 000000000..1f23d6154
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wysiwyg-test.exp.html
@@ -0,0 +1,51 @@
+
+<p>&nbps;<br />&#8820;</p>
+<h1>h1</h1>
+<p>Paragraph <a href="http://google.com/">link</a> <strong>Bold</strong> <em>italic</em> <em><strong>bolditalic</strong></em>&nbsp;<span style="background-color: #ffff00; "></span></p>
+<h2>h2</h2>
+<p>Paragraph <span style="font-size: xx-small;">size1</span> <span style="font-size: x-small;">size2</span> <span style="font-size: medium;">size4</span></p>
+<h3>h3</h3>
+<p>Paragraph <span style="text-decoration: underline;">underline</span> <span style="text-decoration: line-through;">strikethrough</span> <span style="color: #ff0000;">color</span> <span style="background-color: #ffff00; ">background</span></p>
+<blockquote>
+<p>Blockquoted paragraph</p>
+</blockquote>
+<p>Paragraph following blockquote</p>
+<ul><li>Unordered</li>
+ <li>List</li>
+</ul>
+<p>Paragraph between lists</p>
+<ol><li>Ordered</li>
+ <li>List</li>
+</ol>
+<p>Paragraph between lists</p>
+<ul><li>OL list</li>
+ <li>nested
+ <ol><li>inside a</li>
+ <li>UL list</li>
+ </ol></li>
+</ul>
+<p>Paragraph between lists</p>
+<table border="0"><tbody><tr></tr><tr><td>Table with</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>border=0</td>
+ </tr></tbody></table>
+<p>Paragraph</p>
+<ol><li>UL list</li>
+ <li>nested
+ <ul><li>inside a</li>
+ <li>OL list</li>
+ </ul></li>
+</ol>
+<p>Paragraph between tables</p>
+<table border="1" cellpadding="5"><tbody><tr><td>Table with border=1</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>cellpadding = 5</td>
+ </tr></tbody></table>
+<p>Paragraph between tables</p>
+<table border="2"><tbody><tr><td>Table with</td>
+ <td></td>
+ </tr><tr><td></td>
+ <td>border=2</td>
+ </tr></tbody></table> \ No newline at end of file
diff --git a/engine/tests/test_files/output/autop/wysiwyg-test.in.html b/engine/tests/test_files/output/autop/wysiwyg-test.in.html
new file mode 100644
index 000000000..733b0e2ec
--- /dev/null
+++ b/engine/tests/test_files/output/autop/wysiwyg-test.in.html
@@ -0,0 +1,79 @@
+&nbps;
+&#8820;
+<h1>h1</h1>
+Paragraph <a href="http://google.com/">link</a> <strong>Bold</strong> <em>italic</em> <em><strong>bolditalic</strong></em>&nbsp;<span style="background-color: #ffff00; "></span>
+<h2>h2</h2>
+Paragraph <span style="font-size: xx-small;">size1</span> <span style="font-size: x-small;">size2</span> <span style="font-size: medium;">size4</span>
+<h3>h3</h3>
+Paragraph <span style="text-decoration: underline;">underline</span> <span style="text-decoration: line-through;">strikethrough</span> <span style="color: #ff0000;">color</span> <span style="background-color: #ffff00; ">background</span>
+<blockquote>Blockquoted paragraph</blockquote>
+Paragraph following blockquote
+<ul>
+ <li>Unordered</li>
+ <li>List</li>
+</ul>
+Paragraph between lists
+<ol>
+ <li>Ordered</li>
+ <li>List</li>
+</ol>
+Paragraph between lists
+<ul>
+ <li>OL list</li>
+ <li>nested
+ <ol>
+ <li>inside a</li>
+ <li>UL list</li>
+ </ol></li>
+</ul>
+Paragraph between lists
+<table border="0">
+ <tbody>
+ <tr>
+ </tr>
+ <tr>
+ <td>Table with</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>border=0</td>
+ </tr>
+ </tbody>
+</table>
+Paragraph
+<ol>
+ <li>UL list</li>
+ <li>nested
+ <ul>
+ <li>inside a</li>
+ <li>OL list</li>
+ </ul>
+ </li>
+</ol>
+Paragraph between tables
+<table border="1" cellpadding="5">
+ <tbody>
+ <tr>
+ <td>Table with border=1</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>cellpadding = 5</td>
+ </tr>
+ </tbody>
+</table>
+Paragraph between tables
+<table border="2">
+ <tbody>
+ <tr>
+ <td>Table with</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td>border=2</td>
+ </tr>
+ </tbody>
+</table> \ No newline at end of file
diff --git a/engine/tests/test_files/plugin_17/manifest.xml b/engine/tests/test_files/plugin_17/manifest.xml
new file mode 100644
index 000000000..706734265
--- /dev/null
+++ b/engine/tests/test_files/plugin_17/manifest.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest>
+ <field key="author" value="Anyone" />
+ <field key="version" value="1.0" />
+ <field key="description" value="A 1.7-style manifest." />
+ <field key="website" value="http://www.elgg.org/" />
+ <field key="copyright" value="(C) Elgg Foundation 2011" />
+ <field key="license" value="GNU General Public License version 2" />
+ <field key="elgg_version" value="2009030702" />
+</plugin_manifest> \ No newline at end of file
diff --git a/vendors/dokuwiki/data/index/_dummy b/engine/tests/test_files/plugin_17/start.php
index e69de29bb..e69de29bb 100644
--- a/vendors/dokuwiki/data/index/_dummy
+++ b/engine/tests/test_files/plugin_17/start.php
diff --git a/engine/tests/test_files/plugin_18/manifest.xml b/engine/tests/test_files/plugin_18/manifest.xml
new file mode 100644
index 000000000..5d788616a
--- /dev/null
+++ b/engine/tests/test_files/plugin_18/manifest.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Test Manifest</name>
+ <author>Anyone</author>
+ <version>1.0</version>
+ <blurb>A concise description.</blurb>
+ <description>A longer, more interesting description.</description>
+ <website>http://www.elgg.org/</website>
+ <repository>https://github.com/Elgg/Elgg</repository>
+ <bugtracker>http://trac.elgg.org</bugtracker>
+ <donations>http://elgg.org/supporter.php</donations>
+ <copyright>(C) Elgg Foundation 2011</copyright>
+ <license>GNU General Public License version 2</license>
+
+ <requires>
+ <type>elgg_version</type>
+ <version>3009030802</version>
+ <comparison>lt</comparison>
+ </requires>
+
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8-svn</version>
+ </requires>
+
+ <screenshot>
+ <description>Fun things to do 1</description>
+ <path>graphics/plugin_ss1.png</path>
+ </screenshot>
+
+ <screenshot>
+ <description>Fun things to do 2</description>
+ <path>graphics/plugin_ss2.png</path>
+ </screenshot>
+
+ <category>Admin</category>
+
+ <category>ServiceAPI</category>
+
+ <requires>
+ <type>php_extension</type>
+ <name>gd</name>
+ </requires>
+
+ <requires>
+ <type>php_ini</type>
+ <name>short_open_tag</name>
+ <value>off</value>
+ </requires>
+
+ <requires>
+ <type>php_extension</type>
+ <name>made_up</name>
+ <version>1.0</version>
+ </requires>
+
+ <requires>
+ <type>plugin</type>
+ <name>fake_plugin</name>
+ <version>1.0</version>
+ </requires>
+
+ <requires>
+ <type>plugin</type>
+ <name>profile</name>
+ <version>1.0</version>
+ </requires>
+
+ <requires>
+ <type>plugin</type>
+ <name>profile_api</name>
+ <version>1.3</version>
+ <comparison>lt</comparison>
+ </requires>
+
+ <requires>
+ <type>priority</type>
+ <priority>after</priority>
+ <plugin>profile</plugin>
+ </requires>
+
+ <conflicts>
+ <type>plugin</type>
+ <name>profile_api</name>
+ <version>1.0</version>
+ </conflicts>
+
+ <provides>
+ <type>plugin</type>
+ <name>profile_api</name>
+ <version>1.3</version>
+ </provides>
+
+ <provides>
+ <type>php_extension</type>
+ <name>big_math</name>
+ <version>1.0</version>
+ </provides>
+
+ <suggests>
+ <type>plugin</type>
+ <name>facebook_connect</name>
+ <version>1.0</version>
+ </suggests>
+
+ <activate_on_install>true</activate_on_install>
+
+</plugin_manifest>
diff --git a/vendors/dokuwiki/data/locks/_dummy b/engine/tests/test_files/plugin_18/start.php
index e69de29bb..e69de29bb 100644
--- a/vendors/dokuwiki/data/locks/_dummy
+++ b/engine/tests/test_files/plugin_18/start.php
diff --git a/engine/tests/test_skeleton.php b/engine/tests/test_skeleton.php
new file mode 100644
index 000000000..5a5de89bb
--- /dev/null
+++ b/engine/tests/test_skeleton.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Elgg Test Skeleton
+ *
+ * Plugin authors: copy this file to your plugin's test directory. Register an Elgg
+ * plugin hook and function similar to:
+ *
+ * elgg_register_plugin_hook_handler('unit_test', 'system', 'my_new_unit_test');
+ *
+ * function my_new_unit_test($hook, $type, $value, $params) {
+ * $value[] = "path/to/my/unit_test.php";
+ * return $value;
+ * }
+ *
+ * @package Elgg
+ * @subpackage Test
+ */
+class ElggCoreSkeletonTest extends ElggCoreUnitTest {
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ parent::__construct();
+
+ // all __construct() code should come after here
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ // all __destruct() code should go above here
+ parent::__destruct();
+ }
+
+ public function testFailure() {
+ $this->assertTrue(FALSE);
+ }
+}
diff --git a/htaccess_dist b/htaccess_dist
new file mode 100644
index 000000000..4c888e70a
--- /dev/null
+++ b/htaccess_dist
@@ -0,0 +1,135 @@
+# Elgg htaccess directives
+# Copyright Curverider Ltd 2008-2009
+# License http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+# Link http://elgg.org/
+
+<Files "htaccess_dist">
+ order allow,deny
+ deny from all
+</Files>
+
+# Don't listing directory
+Options -Indexes
+
+# Follow symbolic links
+Options +FollowSymLinks
+
+# Default handler
+DirectoryIndex index.php
+
+# Turn on expiry
+<IfModule mod_expires.c>
+ ExpiresActive On
+ ExpiresDefault "access plus 10 years"
+</IfModule>
+
+# php 5, apache 1 and 2
+<IfModule mod_php5.c>
+ # limit the maximum memory consumed by the php script to 64 MB
+ php_value memory_limit 64M
+ # register_globals is deprecated as of PHP 5.3.0 - disable it for security reasons.
+ php_value register_globals 0
+ # post_max_size is the maximum size of ALL the data that is POST'ed to php at a time (8 MB)
+ php_value post_max_size 8388608
+ # upload_max_filesize is the maximum size of a single uploaded file (5 MB)
+ php_value upload_max_filesize 5242880
+ # on development servers, set to 1 to display errors. Set to 0 on production servers.
+ php_value display_errors 0
+</IfModule>
+
+# Turn on mod_gzip if available
+<IfModule mod_gzip.c>
+ mod_gzip_on yes
+ mod_gzip_dechunk yes
+ mod_gzip_keep_workfiles No
+ mod_gzip_minimum_file_size 1000
+ mod_gzip_maximum_file_size 1000000
+ mod_gzip_maximum_inmem_size 1000000
+ mod_gzip_item_include mime ^text/.*
+ mod_gzip_item_include mime ^application/javascript$
+ mod_gzip_item_include mime ^application/x-javascript$
+ # Exclude old browsers and images since IE has trouble with this
+ mod_gzip_item_exclude reqheader "User-Agent: .*Mozilla/4\..*\["
+ mod_gzip_item_exclude mime ^image/.*
+</IfModule>
+
+## Apache2 deflate support if available
+##
+## Important note: mod_headers is required for correct functioning across proxies.
+##
+<IfModule mod_deflate.c>
+ AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript
+ BrowserMatch ^Mozilla/4 gzip-only-text/html
+ BrowserMatch ^Mozilla/4\.[0678] no-gzip
+ BrowserMatch \bMSIE !no-gzip
+
+<IfModule mod_headers.c>
+ Header append Vary User-Agent env=!dont-vary
+</IfModule>
+
+ # The following is to disable compression for actions. The reason being is that these
+ # may offer direct downloads which (since the initial request comes in as text/html and headers
+ # get changed in the script) get double compressed and become unusable when downloaded by IE.
+ SetEnvIfNoCase Request_URI action\/* no-gzip dont-vary
+ SetEnvIfNoCase Request_URI actions\/* no-gzip dont-vary
+
+</IfModule>
+
+# Configure ETags
+<FilesMatch "\.(jpg|jpeg|gif|png|mp3|flv|mov|avi|3pg|html|htm|swf|js|ico)$">
+ FileETag MTime Size
+</FilesMatch>
+
+# Add Proper MIME-Type for Favicon to allow expires to work
+AddType image/vnd.microsoft.icon .ico
+
+<IfModule mod_rewrite.c>
+
+RewriteEngine on
+
+# If Elgg is in a subdirectory on your site, you might need to add a RewriteBase line
+# containing the path from your site root to elgg's root. e.g. If your site is
+# http://example.com/ and Elgg is in http://example.com/sites/elgg/, you might need
+#
+#RewriteBase /sites/elgg/
+#
+# here, only without the # in front.
+#
+# If you're not running Elgg in a subdirectory on your site, but still getting lots
+# of 404 errors beyond the front page, you could instead try:
+#
+#RewriteBase /
+
+# In for backwards compatibility
+RewriteRule ^pg\/([A-Za-z0-9\_\-]+)$ engine/handlers/page_handler.php?handler=$1&%{QUERY_STRING} [L]
+RewriteRule ^pg\/([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/page_handler.php?handler=$1&page=$2&%{QUERY_STRING} [L]
+RewriteRule ^tag\/(.+)\/?$ engine/handlers/page_handler.php?handler=search&page=$1 [L]
+
+
+RewriteRule ^action\/([A-Za-z0-9\_\-\/]+)$ engine/handlers/action_handler.php?action=$1&%{QUERY_STRING} [L]
+
+RewriteRule ^cache\/(.*)$ engine/handlers/cache_handler.php?request=$1&%{QUERY_STRING} [L]
+
+RewriteRule ^services\/api\/([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/service_handler.php?handler=$1&request=$2&%{QUERY_STRING} [L]
+
+RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/?$ engine/handlers/export_handler.php?view=$1&guid=$2 [L]
+RewriteRule ^export\/([A-Za-z]+)\/([0-9]+)\/([A-Za-z]+)\/([A-Za-z0-9\_]+)\/$ engine/handlers/export_handler.php?view=$1&guid=$2&type=$3&idname=$4 [L]
+
+RewriteRule xml-rpc.php engine/handlers/xml-rpc_handler.php [L]
+RewriteRule mt/mt-xmlrpc.cgi engine/handlers/xml-rpc_handler.php [L]
+
+
+# rule for rewrite module test during install - can be removed after installation
+RewriteRule ^rewrite.php$ install.php [L]
+
+# Everything else that isn't a file gets routed through the page handler
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteRule ^([A-Za-z0-9\_\-]+)$ engine/handlers/page_handler.php?handler=$1 [QSA,L]
+
+RewriteCond %{REQUEST_FILENAME} !-d
+RewriteCond %{REQUEST_FILENAME} !-f
+RewriteRule ^([A-Za-z0-9\_\-]+)\/(.*)$ engine/handlers/page_handler.php?handler=$1&page=$2 [QSA,L]
+
+
+</IfModule>
diff --git a/index.php b/index.php
index e4e039f51..708e38ec9 100644
--- a/index.php
+++ b/index.php
@@ -1,17 +1,36 @@
<?php
+/**
+ * Elgg index page for web-based applications
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
- elgg_push_breadcrumb(elgg_echo('dokuwiki'));
- $offset = (int)get_input('offset', 0);
- $title = elgg_echo("dokuwiki:title");
- $content = elgg_list_entities(array('subtype'=>'dokuwiki', 'offset'=>$offset, 'types'=>'object','full_view'=>false));
- $body = elgg_view_layout('content', array(
- 'content' => $content,
- 'title' => $title,
- 'filter' => '',
- ));
+/**
+ * Start the Elgg engine
+ */
+require_once(dirname(__FILE__) . "/engine/start.php");
+
+elgg_set_context('main');
+
+// allow plugins to override the front page (return true to stop this front page code)
+if (elgg_trigger_plugin_hook('index', 'system', null, FALSE) != FALSE) {
+ exit;
+}
- // Finally draw the page
- echo elgg_view_page($title, $body);
+if (elgg_is_logged_in()) {
+ forward('activity');
+}
-?>
+$content = elgg_view_title(elgg_echo('content:latest'));
+$content .= elgg_list_river();
+
+$login_box = elgg_view('core/account/login_box');
+
+$params = array(
+ 'content' => $content,
+ 'sidebar' => $login_box
+);
+$body = elgg_view_layout('one_sidebar', $params);
+echo elgg_view_page(null, $body);
diff --git a/install.php b/install.php
new file mode 100644
index 000000000..a93298216
--- /dev/null
+++ b/install.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Elgg install script
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// check for PHP 4 before we do anything else
+if (version_compare(PHP_VERSION, '5.0.0', '<')) {
+ echo "Your server's version of PHP (" . PHP_VERSION . ") is too old to run Elgg.\n";
+ exit;
+}
+
+require_once(dirname(__FILE__) . "/install/ElggInstaller.php");
+
+$installer = new ElggInstaller();
+
+$step = get_input('step', 'welcome');
+$installer->run($step);
diff --git a/install/ElggInstaller.php b/install/ElggInstaller.php
new file mode 100644
index 000000000..775bbf5b6
--- /dev/null
+++ b/install/ElggInstaller.php
@@ -0,0 +1,1565 @@
+<?php
+
+/**
+ * Elgg Installer.
+ * Controller for installing Elgg. Supports both web-based on CLI installation.
+ *
+ * This controller steps the user through the install process. The method for
+ * each step handles both the GET and POST requests. There is no XSS/CSRF protection
+ * on the POST processing since the installer is only run once by the administrator.
+ *
+ * The installation process can be resumed by hitting the first page. The installer
+ * will try to figure out where to pick up again.
+ *
+ * All the logic for the installation process is in this class, but it depends on
+ * the core libraries. To do this, we selectively load a subset of the core libraries
+ * for the first few steps and then load the entire engine once the database and
+ * site settings are configured. In addition, this controller does its own session
+ * handling until the database is setup.
+ *
+ * There is an aborted attempt in the code at creating the data directory for
+ * users as a subdirectory of Elgg's root. The idea was to protect this directory
+ * through a .htaccess file. The problem is that a malicious user can upload a
+ * .htaccess of his own that overrides the protection for his user directory. The
+ * best solution is server level configuration that turns off AllowOverride for the
+ * data directory. See ticket #3453 for discussion on this.
+ *
+ * @package Elgg.Core
+ * @subpackage Installer
+ */
+class ElggInstaller {
+
+ protected $steps = array(
+ 'welcome',
+ 'requirements',
+ 'database',
+ 'settings',
+ 'admin',
+ 'complete',
+ );
+
+ protected $status = array(
+ 'config' => FALSE,
+ 'database' => FALSE,
+ 'settings' => FALSE,
+ 'admin' => FALSE,
+ );
+
+ protected $isAction = FALSE;
+
+ protected $autoLogin = TRUE;
+
+ /**
+ * Constructor bootstraps the Elgg engine
+ */
+ public function __construct() {
+ // load ElggRewriteTester as we depend on it
+ require_once(dirname(__FILE__) . "/ElggRewriteTester.php");
+
+ $this->isAction = $_SERVER['REQUEST_METHOD'] === 'POST';
+
+ $this->bootstrapConfig();
+
+ $this->bootstrapEngine();
+
+ elgg_set_viewtype('installation');
+
+ set_error_handler('_elgg_php_error_handler');
+ set_exception_handler('_elgg_php_exception_handler');
+
+ register_translations(dirname(__FILE__) . '/languages/', TRUE);
+ }
+
+ /**
+ * Dispatches a request to one of the step controllers
+ *
+ * @param string $step The installation step to run
+ *
+ * @return void
+ */
+ public function run($step) {
+
+ // check if this is a URL rewrite test coming in
+ $this->processRewriteTest();
+
+ if (!in_array($step, $this->getSteps())) {
+ $msg = elgg_echo('InstallationException:UnknownStep', array($step));
+ throw new InstallationException($msg);
+ }
+
+ $this->setInstallStatus();
+
+ $this->checkInstallCompletion($step);
+
+ // check if this is an install being resumed
+ $this->resumeInstall($step);
+
+ $this->finishBootstraping($step);
+
+ $params = $this->getPostVariables();
+ $this->$step($params);
+ }
+
+ /**
+ * Set the auto login flag
+ *
+ * @param bool $flag Auto login
+ *
+ * @return void
+ */
+ public function setAutoLogin(bool $flag) {
+ $this->autoLogin = $value;
+ }
+
+ /**
+ * A batch install of Elgg
+ *
+ * All required parameters must be passed in as an associative array. See
+ * $requiredParams for a list of them. This creates the necessary files,
+ * loads the database, configures the site settings, and creates the admin
+ * account. If it fails, an exception is thrown. It does not check any of
+ * the requirements as the multiple step web installer does.
+ *
+ * If the settings.php file exists, it will use that rather than the parameters
+ * passed to this function.
+ *
+ * @param array $params Array of key value pairs
+ * @param bool $createHtaccess Should .htaccess be created
+ *
+ * @return void
+ * @throws InstallationException
+ */
+ public function batchInstall(array $params, $createHtaccess = FALSE) {
+ global $CONFIG;
+
+ restore_error_handler();
+ restore_exception_handler();
+
+ $defaults = array(
+ 'dbhost' => 'localhost',
+ 'dbprefix' => 'elgg_',
+ 'path' => $CONFIG->path,
+ 'language' => 'en',
+ 'siteaccess' => ACCESS_PUBLIC,
+ );
+ $params = array_merge($defaults, $params);
+
+ $requiredParams = array(
+ 'dbuser',
+ 'dbpassword',
+ 'dbname',
+ 'sitename',
+ 'wwwroot',
+ 'dataroot',
+ 'displayname',
+ 'email',
+ 'username',
+ 'password',
+ );
+ foreach ($requiredParams as $key) {
+ if (empty($params[$key])) {
+ $msg = elgg_echo('install:error:requiredfield', array($key));
+ throw new InstallationException($msg);
+ }
+ }
+
+ // password is passed in once
+ $params['password1'] = $params['password2'] = $params['password'];
+
+ if ($createHtaccess) {
+ $rewriteTester = new ElggRewriteTester();
+ if (!$rewriteTester->createHtaccess($CONFIG->path)) {
+ throw new InstallationException(elgg_echo('install:error:htaccess'));
+ }
+ }
+
+ $this->setInstallStatus();
+
+ if (!$this->status['config']) {
+ if (!$this->createSettingsFile($params)) {
+ throw new InstallationException(elgg_echo('install:error:settings'));
+ }
+ }
+
+ if (!$this->connectToDatabase()) {
+ throw new InstallationException(elgg_echo('install:error:databasesettings'));
+ }
+
+ if (!$this->status['database']) {
+ if (!$this->installDatabase()) {
+ throw new InstallationException(elgg_echo('install:error:cannotloadtables'));
+ }
+ }
+
+ // load remaining core libraries
+ $this->finishBootstraping('settings');
+
+ if (!$this->saveSiteSettings($params)) {
+ throw new InstallationException(elgg_echo('install:error:savesitesettings'));
+ }
+
+ if (!$this->createAdminAccount($params)) {
+ throw new InstallationException(elgg_echo('install:admin:cannot_create'));
+ }
+ }
+
+ /**
+ * Renders the data passed by a controller
+ *
+ * @param string $step The current step
+ * @param array $vars Array of vars to pass to the view
+ *
+ * @return void
+ */
+ protected function render($step, $vars = array()) {
+
+ $vars['next_step'] = $this->getNextStep($step);
+
+ $title = elgg_echo("install:$step");
+ $body = elgg_view("install/pages/$step", $vars);
+ echo elgg_view_page(
+ $title,
+ $body,
+ 'default',
+ array(
+ 'step' => $step,
+ 'steps' => $this->getSteps(),
+ )
+ );
+ exit;
+ }
+
+ /**
+ * Step controllers
+ */
+
+ /**
+ * Welcome controller
+ *
+ * @param array $vars Not used
+ *
+ * @return void
+ */
+ protected function welcome($vars) {
+ $this->render('welcome');
+ }
+
+ /**
+ * Requirements controller
+ *
+ * Checks version of php, libraries, permissions, and rewrite rules
+ *
+ * @param array $vars Vars
+ *
+ * @return void
+ */
+ protected function requirements($vars) {
+
+ $report = array();
+
+ // check PHP parameters and libraries
+ $this->checkPHP($report);
+
+ // check URL rewriting
+ $this->checkRewriteRules($report);
+
+ // check for existence of settings file
+ if ($this->checkSettingsFile($report) != TRUE) {
+ // no file, so check permissions on engine directory
+ $this->checkEngineDir($report);
+ }
+
+ // check the database later
+ $report['database'] = array(array(
+ 'severity' => 'info',
+ 'message' => elgg_echo('install:check:database')
+ ));
+
+ // any failures?
+ $numFailures = $this->countNumConditions($report, 'failure');
+
+ // any warnings
+ $numWarnings = $this->countNumConditions($report, 'warning');
+
+
+ $params = array(
+ 'report' => $report,
+ 'num_failures' => $numFailures,
+ 'num_warnings' => $numWarnings,
+ );
+
+ $this->render('requirements', $params);
+ }
+
+ /**
+ * Database set up controller
+ *
+ * Creates the settings.php file and creates the database tables
+ *
+ * @param array $submissionVars Submitted form variables
+ *
+ * @return void
+ */
+ protected function database($submissionVars) {
+
+ $formVars = array(
+ 'dbuser' => array(
+ 'type' => 'text',
+ 'value' => '',
+ 'required' => TRUE,
+ ),
+ 'dbpassword' => array(
+ 'type' => 'password',
+ 'value' => '',
+ 'required' => FALSE,
+ ),
+ 'dbname' => array(
+ 'type' => 'text',
+ 'value' => '',
+ 'required' => TRUE,
+ ),
+ 'dbhost' => array(
+ 'type' => 'text',
+ 'value' => 'localhost',
+ 'required' => TRUE,
+ ),
+ 'dbprefix' => array(
+ 'type' => 'text',
+ 'value' => 'elgg_',
+ 'required' => TRUE,
+ ),
+ );
+
+ if ($this->checkSettingsFile()) {
+ // user manually created settings file so we fake out action test
+ $this->isAction = TRUE;
+ }
+
+ if ($this->isAction) {
+ do {
+ // only create settings file if it doesn't exist
+ if (!$this->checkSettingsFile()) {
+ if (!$this->validateDatabaseVars($submissionVars, $formVars)) {
+ // error so we break out of action and serve same page
+ break;
+ }
+
+ if (!$this->createSettingsFile($submissionVars)) {
+ break;
+ }
+ }
+
+ // check db version and connect
+ if (!$this->connectToDatabase()) {
+ break;
+ }
+
+ if (!$this->installDatabase()) {
+ break;
+ }
+
+ system_message(elgg_echo('install:success:database'));
+
+ $this->continueToNextStep('database');
+ } while (FALSE); // PHP doesn't support breaking out of if statements
+ }
+
+ $formVars = $this->makeFormSticky($formVars, $submissionVars);
+
+ $params = array('variables' => $formVars,);
+
+ if ($this->checkSettingsFile()) {
+ // settings file exists and we're here so failed to create database
+ $params['failure'] = TRUE;
+ }
+
+ $this->render('database', $params);
+ }
+
+ /**
+ * Site settings controller
+ *
+ * Sets the site name, URL, data directory, etc.
+ *
+ * @param array $submissionVars Submitted vars
+ *
+ * @return void
+ */
+ protected function settings($submissionVars) {
+ global $CONFIG;
+
+ $formVars = array(
+ 'sitename' => array(
+ 'type' => 'text',
+ 'value' => 'My New Community',
+ 'required' => TRUE,
+ ),
+ 'siteemail' => array(
+ 'type' => 'text',
+ 'value' => '',
+ 'required' => FALSE,
+ ),
+ 'wwwroot' => array(
+ 'type' => 'text',
+ 'value' => elgg_get_site_url(),
+ 'required' => TRUE,
+ ),
+ 'path' => array(
+ 'type' => 'text',
+ 'value' => $CONFIG->path,
+ 'required' => TRUE,
+ ),
+ 'dataroot' => array(
+ 'type' => 'text',
+ 'value' => '',
+ 'required' => TRUE,
+ ),
+ 'siteaccess' => array(
+ 'type' => 'access',
+ 'value' => ACCESS_PUBLIC,
+ 'required' => TRUE,
+ ),
+ );
+
+ // if Apache, we give user option of having Elgg create data directory
+ //if (ElggRewriteTester::guessWebServer() == 'apache') {
+ // $formVars['dataroot']['type'] = 'combo';
+ // $CONFIG->translations['en']['install:settings:help:dataroot'] =
+ // $CONFIG->translations['en']['install:settings:help:dataroot:apache'];
+ //}
+
+ if ($this->isAction) {
+ do {
+ //if (!$this->createDataDirectory($submissionVars, $formVars)) {
+ // break;
+ //}
+
+ if (!$this->validateSettingsVars($submissionVars, $formVars)) {
+ break;
+ }
+
+ if (!$this->saveSiteSettings($submissionVars)) {
+ break;
+ }
+
+ system_message(elgg_echo('install:success:settings'));
+
+ $this->continueToNextStep('settings');
+
+ } while (FALSE); // PHP doesn't support breaking out of if statements
+ }
+
+ $formVars = $this->makeFormSticky($formVars, $submissionVars);
+
+ $this->render('settings', array('variables' => $formVars));
+ }
+
+ /**
+ * Admin account controller
+ *
+ * Creates an admin user account
+ *
+ * @param array $submissionVars Submitted vars
+ *
+ * @return void
+ */
+ protected function admin($submissionVars) {
+ $formVars = array(
+ 'displayname' => array(
+ 'type' => 'text',
+ 'value' => '',
+ 'required' => TRUE,
+ ),
+ 'email' => array(
+ 'type' => 'text',
+ 'value' => '',
+ 'required' => TRUE,
+ ),
+ 'username' => array(
+ 'type' => 'text',
+ 'value' => '',
+ 'required' => TRUE,
+ ),
+ 'password1' => array(
+ 'type' => 'password',
+ 'value' => '',
+ 'required' => TRUE,
+ ),
+ 'password2' => array(
+ 'type' => 'password',
+ 'value' => '',
+ 'required' => TRUE,
+ ),
+ );
+
+ if ($this->isAction) {
+ do {
+ if (!$this->validateAdminVars($submissionVars, $formVars)) {
+ break;
+ }
+
+ if (!$this->createAdminAccount($submissionVars, $this->autoLogin)) {
+ break;
+ }
+
+ system_message(elgg_echo('install:success:admin'));
+
+ $this->continueToNextStep('admin');
+
+ } while (FALSE); // PHP doesn't support breaking out of if statements
+ }
+
+ // bit of a hack to get the password help to show right number of characters
+ global $CONFIG;
+ $lang = get_current_language();
+ $CONFIG->translations[$lang]['install:admin:help:password1'] =
+ sprintf($CONFIG->translations[$lang]['install:admin:help:password1'],
+ $CONFIG->min_password_length);
+
+ $formVars = $this->makeFormSticky($formVars, $submissionVars);
+
+ $this->render('admin', array('variables' => $formVars));
+ }
+
+ /**
+ * Controller for last step
+ *
+ * @return void
+ */
+ protected function complete() {
+
+ $params = array();
+ if ($this->autoLogin) {
+ $params['destination'] = 'admin';
+ } else {
+ $params['destination'] = 'index.php';
+ }
+
+ $this->render('complete', $params);
+ }
+
+ /**
+ * Step management
+ */
+
+ /**
+ * Get an array of steps
+ *
+ * @return array
+ */
+ protected function getSteps() {
+ return $this->steps;
+ }
+
+ /**
+ * Forwards the browser to the next step
+ *
+ * @param string $currentStep Current installation step
+ *
+ * @return void
+ */
+ protected function continueToNextStep($currentStep) {
+ $this->isAction = FALSE;
+ forward($this->getNextStepUrl($currentStep));
+ }
+
+ /**
+ * Get the next step as a string
+ *
+ * @param string $currentStep Current installation step
+ *
+ * @return string
+ */
+ protected function getNextStep($currentStep) {
+ $index = 1 + array_search($currentStep, $this->steps);
+ if (isset($this->steps[$index])) {
+ return $this->steps[$index];
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Get the URL of the next step
+ *
+ * @param string $currentStep Current installation step
+ *
+ * @return string
+ */
+ protected function getNextStepUrl($currentStep) {
+ global $CONFIG;
+ $nextStep = $this->getNextStep($currentStep);
+ return elgg_get_site_url() . "install.php?step=$nextStep";
+ }
+
+ /**
+ * Check the different install steps for completion
+ *
+ * @return void
+ */
+ protected function setInstallStatus() {
+ global $CONFIG;
+
+ if (!is_readable("{$CONFIG->path}engine/settings.php")) {
+ return;
+ }
+
+ $this->loadSettingsFile();
+
+ $this->status['config'] = TRUE;
+
+ // must be able to connect to database to jump install steps
+ $dbSettingsPass = $this->checkDatabaseSettings(
+ $CONFIG->dbuser,
+ $CONFIG->dbpass,
+ $CONFIG->dbname,
+ $CONFIG->dbhost
+ );
+ if ($dbSettingsPass == FALSE) {
+ return;
+ }
+
+ if (!include_once("{$CONFIG->path}engine/lib/database.php")) {
+ $msg = elgg_echo('InstallationException:MissingLibrary', array('database.php'));
+ throw new InstallationException($msg);
+ }
+
+ // check that the config table has been created
+ $query = "show tables";
+ $result = get_data($query);
+ if ($result) {
+ foreach ($result as $table) {
+ $table = (array) $table;
+ if (in_array("{$CONFIG->dbprefix}config", $table)) {
+ $this->status['database'] = TRUE;
+ }
+ }
+ if ($this->status['database'] == FALSE) {
+ return;
+ }
+ } else {
+ // no tables
+ return;
+ }
+
+ // check that the config table has entries
+ $query = "SELECT COUNT(*) AS total FROM {$CONFIG->dbprefix}config";
+ $result = get_data($query);
+ if ($result && $result[0]->total > 0) {
+ $this->status['settings'] = TRUE;
+ } else {
+ return;
+ }
+
+ // check that the users entity table has an entry
+ $query = "SELECT COUNT(*) AS total FROM {$CONFIG->dbprefix}users_entity";
+ $result = get_data($query);
+ if ($result && $result[0]->total > 0) {
+ $this->status['admin'] = TRUE;
+ } else {
+ return;
+ }
+ }
+
+ /**
+ * Security check to ensure the installer cannot be run after installation
+ * has finished. If this is detected, the viewer is sent to the front page.
+ *
+ * @param string $step Installation step to check against
+ *
+ * @return void
+ */
+ protected function checkInstallCompletion($step) {
+ if ($step != 'complete') {
+ if (!in_array(FALSE, $this->status)) {
+ // install complete but someone is trying to view an install page
+ forward();
+ }
+ }
+ }
+
+ /**
+ * Check if this is a case of a install being resumed and figure
+ * out where to continue from. Returns the best guess on the step.
+ *
+ * @param string $step Installation step to resume from
+ *
+ * @return string
+ */
+ protected function resumeInstall($step) {
+ global $CONFIG;
+
+ // only do a resume from the first step
+ if ($step !== 'welcome') {
+ return;
+ }
+
+ if ($this->status['database'] == FALSE) {
+ return;
+ }
+
+ if ($this->status['settings'] == FALSE) {
+ forward("install.php?step=settings");
+ }
+
+ if ($this->status['admin'] == FALSE) {
+ forward("install.php?step=admin");
+ }
+
+ // everything appears to be set up
+ forward("install.php?step=complete");
+ }
+
+ /**
+ * Bootstraping
+ */
+
+ /**
+ * Load the essential libraries of the engine
+ *
+ * @return void
+ */
+ protected function bootstrapEngine() {
+ global $CONFIG;
+
+ $lib_dir = $CONFIG->path . 'engine/lib/';
+
+ // bootstrapping with required files in a required order
+ $required_files = array(
+ 'elgglib.php', 'views.php', 'access.php', 'system_log.php', 'export.php',
+ 'configuration.php', 'sessions.php', 'languages.php', 'pageowner.php',
+ 'input.php', 'cache.php', 'output.php',
+ );
+
+ foreach ($required_files as $file) {
+ $path = $lib_dir . $file;
+ if (!include($path)) {
+ echo "Could not load file '$path'. "
+ . 'Please check your Elgg installation for all required files.';
+ exit;
+ }
+ }
+ }
+
+ /**
+ * Load remaining engine libraries and complete bootstraping (see start.php)
+ *
+ * @param string $step Which step to boot strap for. Required because
+ * boot strapping is different until the DB is populated.
+ *
+ * @return void
+ */
+ protected function finishBootstraping($step) {
+
+ $dbIndex = array_search('database', $this->getSteps());
+ $settingsIndex = array_search('settings', $this->getSteps());
+ $adminIndex = array_search('admin', $this->getSteps());
+ $completeIndex = array_search('complete', $this->getSteps());
+ $stepIndex = array_search($step, $this->getSteps());
+
+ // To log in the user, we need to use the Elgg core session handling.
+ // Otherwise, use default php session handling
+ $useElggSession = ($stepIndex == $adminIndex && $this->isAction) ||
+ $stepIndex == $completeIndex;
+ if (!$useElggSession) {
+ session_name('Elgg_install');
+ session_start();
+ elgg_unregister_event_handler('boot', 'system', 'session_init');
+ }
+
+ if ($stepIndex > $dbIndex) {
+ // once the database has been created, load rest of engine
+ global $CONFIG;
+ $lib_dir = $CONFIG->path . 'engine/lib/';
+
+ $this->loadSettingsFile();
+
+ $lib_files = array(
+ // these want to be loaded first apparently?
+ 'database.php', 'actions.php',
+
+ 'admin.php', 'annotations.php',
+ 'calendar.php', 'cron.php', 'entities.php',
+ 'extender.php', 'filestore.php', 'group.php',
+ 'location.php', 'mb_wrapper.php',
+ 'memcache.php', 'metadata.php', 'metastrings.php',
+ 'navigation.php', 'notification.php',
+ 'objects.php', 'opendd.php', 'pagehandler.php',
+ 'pam.php', 'plugins.php',
+ 'private_settings.php', 'relationships.php', 'river.php',
+ 'sites.php', 'statistics.php', 'tags.php', 'user_settings.php',
+ 'users.php', 'upgrade.php', 'web_services.php',
+ 'widgets.php', 'xml.php', 'xml-rpc.php',
+ 'deprecated-1.7.php', 'deprecated-1.8.php',
+ );
+
+ foreach ($lib_files as $file) {
+ $path = $lib_dir . $file;
+ if (!include_once($path)) {
+ $msg = elgg_echo('InstallationException:MissingLibrary', array($file));
+ throw new InstallationException($msg);
+ }
+ }
+
+ setup_db_connections();
+ register_translations(dirname(dirname(__FILE__)) . "/languages/");
+
+ if ($stepIndex > $settingsIndex) {
+ $CONFIG->site_guid = (int) datalist_get('default_site');
+ $CONFIG->site_id = $CONFIG->site_guid;
+ $CONFIG->site = get_entity($CONFIG->site_guid);
+ $CONFIG->dataroot = datalist_get('dataroot');
+ _elgg_session_boot(NULL, NULL, NULL);
+ }
+
+ elgg_trigger_event('init', 'system');
+ }
+ }
+
+ /**
+ * Set up configuration variables
+ *
+ * @return void
+ */
+ protected function bootstrapConfig() {
+ global $CONFIG;
+ if (!isset($CONFIG)) {
+ $CONFIG = new stdClass;
+ }
+
+ $CONFIG->wwwroot = $this->getBaseUrl();
+ $CONFIG->url = $CONFIG->wwwroot;
+ $CONFIG->path = dirname(dirname(__FILE__)) . '/';
+ $CONFIG->viewpath = $CONFIG->path . 'views/';
+ $CONFIG->pluginspath = $CONFIG->path . 'mod/';
+ $CONFIG->context = array();
+ $CONFIG->entity_types = array('group', 'object', 'site', 'user');
+ }
+
+ /**
+ * Get the best guess at the base URL
+ *
+ * @note Cannot use current_page_url() because it depends on $CONFIG->wwwroot
+ * @todo Should this be a core function?
+ *
+ * @return string
+ */
+ protected function getBaseUrl() {
+ $protocol = 'http';
+ if (!empty($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") {
+ $protocol = 'https';
+ }
+ $port = ':' . $_SERVER["SERVER_PORT"];
+ if ($port == ':80' || $port == ':443') {
+ $port = '';
+ }
+ $uri = $_SERVER['REQUEST_URI'];
+ $cutoff = strpos($uri, 'install.php');
+ $uri = substr($uri, 0, $cutoff);
+
+ $url = "$protocol://{$_SERVER['SERVER_NAME']}$port{$uri}";
+ return $url;
+ }
+
+ /**
+ * Load settings.php
+ *
+ * @return void
+ * @throws InstallationException
+ */
+ protected function loadSettingsFile() {
+ global $CONFIG;
+
+ if (!include_once("{$CONFIG->path}engine/settings.php")) {
+ $msg = elgg_echo('InstallationException:CannotLoadSettings');
+ throw new InstallationException($msg);
+ }
+ }
+
+ /**
+ * Action handling methods
+ */
+
+ /**
+ * Return an associative array of post variables
+ * (could be selective based on expected variables)
+ *
+ * Does not filter as person installing the site should not be attempting
+ * XSS attacks. If filtering is added, it should not be done for passwords.
+ *
+ * @return array
+ */
+ protected function getPostVariables() {
+ $vars = array();
+ foreach ($_POST as $k => $v) {
+ $vars[$k] = $v;
+ }
+ return $vars;
+ }
+
+ /**
+ * If form is reshown, remember previously submitted variables
+ *
+ * @param array $formVars Vars int he form
+ * @param array $submissionVars Submitted vars
+ *
+ * @return array
+ */
+ protected function makeFormSticky($formVars, $submissionVars) {
+ foreach ($submissionVars as $field => $value) {
+ $formVars[$field]['value'] = $value;
+ }
+ return $formVars;
+ }
+
+ /**
+ * Requirement checks support methods
+ */
+
+ /**
+ * Check that the engine dir is writable
+ *
+ * @param array &$report The requirements report object
+ *
+ * @return bool
+ */
+ protected function checkEngineDir(&$report) {
+ global $CONFIG;
+
+ $writable = is_writable("{$CONFIG->path}engine");
+ if (!$writable) {
+ $report['settings'] = array(
+ array(
+ 'severity' => 'failure',
+ 'message' => elgg_echo('install:check:enginedir'),
+ )
+ );
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Check that the settings file exists
+ *
+ * @param array &$report The requirements report array
+ *
+ * @return bool
+ */
+ protected function checkSettingsFile(&$report = array()) {
+ global $CONFIG;
+
+ if (!file_exists("{$CONFIG->path}engine/settings.php")) {
+ return FALSE;
+ }
+
+ if (!is_readable("{$CONFIG->path}engine/settings.php")) {
+ $report['settings'] = array(
+ array(
+ 'severity' => 'failure',
+ 'message' => elgg_echo('install:check:readsettings'),
+ )
+ );
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Check version of PHP, extensions, and variables
+ *
+ * @param array &$report The requirements report array
+ *
+ * @return void
+ */
+ protected function checkPHP(&$report) {
+ $phpReport = array();
+
+ $elgg_php_version = '5.2.0';
+ if (version_compare(PHP_VERSION, $elgg_php_version, '<')) {
+ $phpReport[] = array(
+ 'severity' => 'failure',
+ 'message' => elgg_echo('install:check:php:version', array($elgg_php_version, PHP_VERSION))
+ );
+ }
+
+ $this->checkPhpExtensions($phpReport);
+
+ $this->checkPhpDirectives($phpReport);
+
+ if (count($phpReport) == 0) {
+ $phpReport[] = array(
+ 'severity' => 'pass',
+ 'message' => elgg_echo('install:check:php:success')
+ );
+ }
+
+ $report['php'] = $phpReport;
+ }
+
+ /**
+ * Check the server's PHP extensions
+ *
+ * @param array &$phpReport The PHP requirements report array
+ *
+ * @return void
+ */
+ protected function checkPhpExtensions(&$phpReport) {
+ $extensions = get_loaded_extensions();
+ $requiredExtensions = array(
+ 'mysql',
+ 'json',
+ 'xml',
+ 'gd',
+ );
+ foreach ($requiredExtensions as $extension) {
+ if (!in_array($extension, $extensions)) {
+ $phpReport[] = array(
+ 'severity' => 'failure',
+ 'message' => elgg_echo('install:check:php:extension', array($extension))
+ );
+ }
+ }
+
+ $recommendedExtensions = array(
+ 'mbstring',
+ );
+ foreach ($recommendedExtensions as $extension) {
+ if (!in_array($extension, $extensions)) {
+ $phpReport[] = array(
+ 'severity' => 'warning',
+ 'message' => elgg_echo('install:check:php:extension:recommend', array($extension))
+ );
+ }
+ }
+ }
+
+ /**
+ * Check PHP parameters
+ *
+ * @param array &$phpReport The PHP requirements report array
+ *
+ * @return void
+ */
+ protected function checkPhpDirectives(&$phpReport) {
+ if (ini_get('open_basedir')) {
+ $phpReport[] = array(
+ 'severity' => 'warning',
+ 'message' => elgg_echo("install:check:php:open_basedir")
+ );
+ }
+
+ if (ini_get('safe_mode')) {
+ $phpReport[] = array(
+ 'severity' => 'warning',
+ 'message' => elgg_echo("install:check:php:safe_mode")
+ );
+ }
+
+ if (ini_get('arg_separator.output') !== '&') {
+ $separator = htmlspecialchars(ini_get('arg_separator.output'));
+ $msg = elgg_echo("install:check:php:arg_separator", array($separator));
+ $phpReport[] = array(
+ 'severity' => 'failure',
+ 'message' => $msg,
+ );
+ }
+
+ if (ini_get('register_globals')) {
+ $phpReport[] = array(
+ 'severity' => 'failure',
+ 'message' => elgg_echo("install:check:php:register_globals")
+ );
+ }
+
+ if (ini_get('session.auto_start')) {
+ $phpReport[] = array(
+ 'severity' => 'failure',
+ 'message' => elgg_echo("install:check:php:session.auto_start")
+ );
+ }
+ }
+
+ /**
+ * Confirm that the rewrite rules are firing
+ *
+ * @param array &$report The requirements report array
+ *
+ * @return void
+ */
+ protected function checkRewriteRules(&$report) {
+ global $CONFIG;
+
+ $tester = new ElggRewriteTester();
+ $url = elgg_get_site_url() . "rewrite.php";
+ $report['rewrite'] = array($tester->run($url, $CONFIG->path));
+ }
+
+ /**
+ * Check if the request is coming from the URL rewrite test on the
+ * requirements page.
+ *
+ * @return void
+ */
+ protected function processRewriteTest() {
+ if (strpos($_SERVER['REQUEST_URI'], 'rewrite.php') !== FALSE) {
+ echo 'success';
+ exit;
+ }
+ }
+
+ /**
+ * Count the number of failures in the requirements report
+ *
+ * @param array $report The requirements report array
+ * @param string $condition 'failure' or 'warning'
+ *
+ * @return int
+ */
+ protected function countNumConditions($report, $condition) {
+ $count = 0;
+ foreach ($report as $category => $checks) {
+ foreach ($checks as $check) {
+ if ($check['severity'] === $condition) {
+ $count++;
+ }
+ }
+ }
+
+ return $count;
+ }
+
+
+ /**
+ * Database support methods
+ */
+
+ /**
+ * Validate the variables for the database step
+ *
+ * @param array $submissionVars Submitted vars
+ * @param array $formVars Vars in the form
+ *
+ * @return bool
+ */
+ protected function validateDatabaseVars($submissionVars, $formVars) {
+
+ foreach ($formVars as $field => $info) {
+ if ($info['required'] == TRUE && !$submissionVars[$field]) {
+ $name = elgg_echo("install:database:label:$field");
+ register_error("$name is required");
+ return FALSE;
+ }
+ }
+
+ return $this->checkDatabaseSettings(
+ $submissionVars['dbuser'],
+ $submissionVars['dbpassword'],
+ $submissionVars['dbname'],
+ $submissionVars['dbhost']
+ );
+ }
+
+ /**
+ * Confirm the settings for the database
+ *
+ * @param string $user Username
+ * @param string $password Password
+ * @param string $dbname Database name
+ * @param string $host Host
+ *
+ * @return bool
+ */
+ protected function checkDatabaseSettings($user, $password, $dbname, $host) {
+ $mysql_dblink = mysql_connect($host, $user, $password, true);
+ if ($mysql_dblink == FALSE) {
+ register_error(elgg_echo('install:error:databasesettings'));
+ return $FALSE;
+ }
+
+ $result = mysql_select_db($dbname, $mysql_dblink);
+
+ // check MySQL version - must be 5.0 or >
+ $required_version = 5.0;
+ $version = mysql_get_server_info();
+ $points = explode('.', $version);
+ if ($points[0] < $required_version) {
+ register_error(elgg_echo('install:error:oldmysql', array($version)));
+ return FALSE;
+ }
+
+ mysql_close($mysql_dblink);
+
+ if (!$result) {
+ register_error(elgg_echo('install:error:nodatabase', array($dbname)));
+ }
+
+ return $result;
+ }
+
+ /**
+ * Writes the settings file to the engine directory
+ *
+ * @param array $params Array of inputted params from the user
+ *
+ * @return bool
+ */
+ protected function createSettingsFile($params) {
+ global $CONFIG;
+
+ $templateFile = "{$CONFIG->path}engine/settings.example.php";
+ $template = file_get_contents($templateFile);
+ if (!$template) {
+ register_error(elgg_echo('install:error:readsettingsphp'));
+ return FALSE;
+ }
+
+ foreach ($params as $k => $v) {
+ $template = str_replace("{{" . $k . "}}", $v, $template);
+ }
+
+ $settingsFilename = "{$CONFIG->path}engine/settings.php";
+ $result = file_put_contents($settingsFilename, $template);
+ if (!$result) {
+ register_error(elgg_echo('install:error:writesettingphp'));
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Bootstrap database connection before entire engine is available
+ *
+ * @return bool
+ */
+ protected function connectToDatabase() {
+ global $CONFIG;
+
+ if (!include_once("{$CONFIG->path}engine/settings.php")) {
+ register_error(elgg_echo('InstallationException:CannotLoadSettings'));
+ return FALSE;
+ }
+
+ if (!include_once("{$CONFIG->path}engine/lib/database.php")) {
+ $msg = elgg_echo('InstallationException:MissingLibrary', array('database.php'));
+ register_error($msg);
+ return FALSE;
+ }
+
+ try {
+ setup_db_connections();
+ } catch (Exception $e) {
+ register_error($e->getMessage());
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Create the database tables
+ *
+ * @return bool
+ */
+ protected function installDatabase() {
+ global $CONFIG;
+
+ try {
+ run_sql_script("{$CONFIG->path}engine/schema/mysql.sql");
+ } catch (Exception $e) {
+ $msg = $e->getMessage();
+ if (strpos($msg, 'already exists')) {
+ $msg = elgg_echo('install:error:tables_exist');
+ }
+ register_error($msg);
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Site settings support methods
+ */
+
+ /**
+ * Create the data directory if requested
+ *
+ * @param array $submissionVars Submitted vars
+ * @param array $formVars Variables in the form
+ * @return bool
+ */
+ protected function createDataDirectory(&$submissionVars, $formVars) {
+ // did the user have option of Elgg creating the data directory
+ if ($formVars['dataroot']['type'] != 'combo') {
+ return TRUE;
+ }
+
+ // did the user select the option
+ if ($submissionVars['dataroot'] != 'dataroot-checkbox') {
+ return TRUE;
+ }
+
+ $dir = sanitise_filepath($submissionVars['path']) . 'data';
+ if (file_exists($dir) || mkdir($dir, 0700)) {
+ $submissionVars['dataroot'] = $dir;
+ if (!file_exists("$dir/.htaccess")) {
+ $htaccess = "Order Deny,Allow\nDeny from All\n";
+ if (!file_put_contents("$dir/.htaccess", $htaccess)) {
+ return FALSE;
+ }
+ }
+ return TRUE;
+ }
+
+ return FALSE;
+ }
+
+ /**
+ * Validate the site settings form variables
+ *
+ * @param array $submissionVars Submitted vars
+ * @param array $formVars Vars in the form
+ *
+ * @return bool
+ */
+ protected function validateSettingsVars($submissionVars, $formVars) {
+ global $CONFIG;
+
+ foreach ($formVars as $field => $info) {
+ $submissionVars[$field] = trim($submissionVars[$field]);
+ if ($info['required'] == TRUE && $submissionVars[$field] === '') {
+ $name = elgg_echo("install:settings:label:$field");
+ register_error(elgg_echo('install:error:requiredfield', array($name)));
+ return FALSE;
+ }
+ }
+
+ // check that data root is absolute path
+ if (stripos(PHP_OS, 'win') === 0) {
+ if (strpos($submissionVars['dataroot'], ':') !== 1) {
+ $msg = elgg_echo('install:error:relative_path', array($submissionVars['dataroot']));
+ register_error($msg);
+ return FALSE;
+ }
+ } else {
+ if (strpos($submissionVars['dataroot'], '/') !== 0) {
+ $msg = elgg_echo('install:error:relative_path', array($submissionVars['dataroot']));
+ register_error($msg);
+ return FALSE;
+ }
+ }
+
+ // check that data root exists
+ if (!file_exists($submissionVars['dataroot'])) {
+ $msg = elgg_echo('install:error:datadirectoryexists', array($submissionVars['dataroot']));
+ register_error($msg);
+ return FALSE;
+ }
+
+ // check that data root is writable
+ if (!is_writable($submissionVars['dataroot'])) {
+ $msg = elgg_echo('install:error:writedatadirectory', array($submissionVars['dataroot']));
+ register_error($msg);
+ return FALSE;
+ }
+
+ if (!isset($CONFIG->data_dir_override) || !$CONFIG->data_dir_override) {
+ // check that data root is not subdirectory of Elgg root
+ if (stripos($submissionVars['dataroot'], $submissionVars['path']) === 0) {
+ $msg = elgg_echo('install:error:locationdatadirectory', array($submissionVars['dataroot']));
+ register_error($msg);
+ return FALSE;
+ }
+ }
+
+ // check that email address is email address
+ if ($submissionVars['siteemail'] && !is_email_address($submissionVars['siteemail'])) {
+ $msg = elgg_echo('install:error:emailaddress', array($submissionVars['siteemail']));
+ register_error($msg);
+ return FALSE;
+ }
+
+ // @todo check that url is a url
+ // @note filter_var cannot be used because it doesn't work on international urls
+
+ return TRUE;
+ }
+
+ /**
+ * Initialize the site including site entity, plugins, and configuration
+ *
+ * @param array $submissionVars Submitted vars
+ *
+ * @return bool
+ */
+ protected function saveSiteSettings($submissionVars) {
+ global $CONFIG;
+
+ // ensure that file path, data path, and www root end in /
+ $submissionVars['path'] = sanitise_filepath($submissionVars['path']);
+ $submissionVars['dataroot'] = sanitise_filepath($submissionVars['dataroot']);
+ $submissionVars['wwwroot'] = sanitise_filepath($submissionVars['wwwroot']);
+
+ $site = new ElggSite();
+ $site->name = $submissionVars['sitename'];
+ $site->url = $submissionVars['wwwroot'];
+ $site->access_id = ACCESS_PUBLIC;
+ $site->email = $submissionVars['siteemail'];
+ $guid = $site->save();
+
+ if (!$guid) {
+ register_error(elgg_echo('install:error:createsite'));
+ return FALSE;
+ }
+
+ // bootstrap site info
+ $CONFIG->site_guid = $guid;
+ $CONFIG->site = $site;
+
+ datalist_set('installed', time());
+ datalist_set('path', $submissionVars['path']);
+ datalist_set('dataroot', $submissionVars['dataroot']);
+ datalist_set('default_site', $site->getGUID());
+ datalist_set('version', get_version());
+ datalist_set('simplecache_enabled', 1);
+ datalist_set('system_cache_enabled', 1);
+
+ // new installations have run all the upgrades
+ $upgrades = elgg_get_upgrade_files($submissionVars['path'] . 'engine/lib/upgrades/');
+ datalist_set('processed_upgrades', serialize($upgrades));
+
+ set_config('view', 'default', $site->getGUID());
+ set_config('language', 'en', $site->getGUID());
+ set_config('default_access', $submissionVars['siteaccess'], $site->getGUID());
+ set_config('allow_registration', TRUE, $site->getGUID());
+ set_config('walled_garden', FALSE, $site->getGUID());
+ set_config('allow_user_default_access', '', $site->getGUID());
+
+ $this->enablePlugins();
+
+ return TRUE;
+ }
+
+ /**
+ * Enable a set of default plugins
+ *
+ * @return void
+ */
+ protected function enablePlugins() {
+ elgg_generate_plugin_entities();
+ $plugins = elgg_get_plugins('any');
+ foreach ($plugins as $plugin) {
+ if ($plugin->getManifest()) {
+ if ($plugin->getManifest()->getActivateOnInstall()) {
+ $plugin->activate();
+ }
+ }
+ }
+ }
+
+ /**
+ * Admin account support methods
+ */
+
+ /**
+ * Validate account form variables
+ *
+ * @param array $submissionVars Submitted vars
+ * @param array $formVars Form vars
+ *
+ * @return bool
+ */
+ protected function validateAdminVars($submissionVars, $formVars) {
+
+ foreach ($formVars as $field => $info) {
+ if ($info['required'] == TRUE && !$submissionVars[$field]) {
+ $name = elgg_echo("install:admin:label:$field");
+ register_error(elgg_echo('install:error:requiredfield', array($name)));
+ return FALSE;
+ }
+ }
+
+ if ($submissionVars['password1'] !== $submissionVars['password2']) {
+ register_error(elgg_echo('install:admin:password:mismatch'));
+ return FALSE;
+ }
+
+ if (trim($submissionVars['password1']) == "") {
+ register_error(elgg_echo('install:admin:password:empty'));
+ return FALSE;
+ }
+
+ $minLength = get_config('min_password_length');
+ if (strlen($submissionVars['password1']) < $minLength) {
+ register_error(elgg_echo('install:admin:password:tooshort'));
+ return FALSE;
+ }
+
+ // check that email address is email address
+ if ($submissionVars['email'] && !is_email_address($submissionVars['email'])) {
+ $msg = elgg_echo('install:error:emailaddress', array($submissionVars['email']));
+ register_error($msg);
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Create a user account for the admin
+ *
+ * @param array $submissionVars Submitted vars
+ * @param bool $login Login in the admin user?
+ *
+ * @return bool
+ */
+ protected function createAdminAccount($submissionVars, $login = FALSE) {
+ global $CONFIG;
+
+ try {
+ $guid = register_user(
+ $submissionVars['username'],
+ $submissionVars['password1'],
+ $submissionVars['displayname'],
+ $submissionVars['email']
+ );
+ } catch (Exception $e) {
+ register_error($e->getMessage());
+ return false;
+ }
+
+ if (!$guid) {
+ register_error(elgg_echo('install:admin:cannot_create'));
+ return false;
+ }
+
+ $user = get_entity($guid);
+ if (!$user) {
+ register_error(elgg_echo('install:error:loadadmin'));
+ return false;
+ }
+
+ elgg_set_ignore_access(TRUE);
+ if ($user->makeAdmin() == FALSE) {
+ register_error(elgg_echo('install:error:adminaccess'));
+ } else {
+ datalist_set('admin_registered', 1);
+ }
+ elgg_set_ignore_access(false);
+
+ // add validation data to satisfy user validation plugins
+ create_metadata($guid, 'validated', TRUE, '', 0, ACCESS_PUBLIC);
+ create_metadata($guid, 'validated_method', 'admin_user', '', 0, ACCESS_PUBLIC);
+
+ if ($login) {
+ if (login($user) == FALSE) {
+ register_error(elgg_echo('install:error:adminlogin'));
+ }
+ }
+
+ return TRUE;
+ }
+}
diff --git a/install/ElggRewriteTester.php b/install/ElggRewriteTester.php
new file mode 100644
index 000000000..ab68da2b7
--- /dev/null
+++ b/install/ElggRewriteTester.php
@@ -0,0 +1,199 @@
+<?php
+
+/**
+ * Elgg RewriteTester.
+ * Test if URL rewriting is working.
+ *
+ * @package Elgg.Core
+ * @subpackage Installer
+ */
+class ElggRewriteTester {
+ protected $webserver;
+ protected $serverSupportsRemoteRead;
+ protected $rewriteTestPassed;
+ protected $htaccessIssue;
+
+ /**
+ * Set the webserver as unknown.
+ */
+ public function __construct() {
+ $this->webserver = 'unknown';
+ }
+
+ /**
+ * Run the rewrite test and return a status array
+ *
+ * @param string $url URL of rewrite test
+ * @param string $path Root directory of Elgg with trailing slash
+ *
+ * @return array
+ */
+ public function run($url, $path) {
+
+ $this->webserver = ElggRewriteTester::guessWebServer();
+
+ $this->rewriteTestPassed = $this->runRewriteTest($url);
+
+ if ($this->rewriteTestPassed == FALSE) {
+ if ($this->webserver == 'apache' || $this->webserver == 'unknown') {
+ if ($this->createHtaccess($path)) {
+ $this->rewriteTestPassed = $this->runRewriteTest($url);
+ }
+ }
+ }
+
+ return $this->returnStatus($url);
+ }
+
+ /**
+ * Guess the web server from $_SERVER['SERVER_SOFTWARE']
+ *
+ * @return string
+ */
+ public static function guessWebServer() {
+ $serverString = strtolower($_SERVER['SERVER_SOFTWARE']);
+ $possibleServers = array('apache', 'nginx', 'lighttpd', 'iis');
+ foreach ($possibleServers as $server) {
+ if (strpos($serverString, $server) !== FALSE) {
+ return $server;
+ }
+ }
+ return 'unknown';
+ }
+
+ /**
+ * Hit the rewrite test URL to determine if the rewrite rules are working
+ *
+ * @param string $url Rewrite test URL
+ *
+ * @return bool
+ */
+ protected function runRewriteTest($url) {
+
+ $this->serverSupportsRemoteRead = TRUE;
+
+ if (function_exists('curl_init')) {
+ // try curl if installed
+ $ch = curl_init();
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_TIMEOUT, 10);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
+ $response = curl_exec($ch);
+ curl_close($ch);
+ return $response === 'success';
+ } else if (ini_get('allow_url_fopen')) {
+ // use file_get_contents as fallback
+ $response = file_get_contents($url);
+ return $response === 'success';
+ } else {
+ $this->serverSupportsRemoteRead = FALSE;
+ return FALSE;
+ }
+ }
+
+ /**
+ * Create Elgg's .htaccess file or confirm that it exists
+ *
+ * @param string $path Elgg's root directory with trailing slash
+ *
+ * @return bool
+ */
+ public function createHtaccess($path) {
+ $filename = "{$path}.htaccess";
+ if (file_exists($filename)) {
+ // check that this is the Elgg .htaccess
+ $data = file_get_contents($filename);
+ if ($data === FALSE) {
+ // don't have permission to read the file
+ $this->htaccessIssue = 'read_permission';
+ return FALSE;
+ }
+ if (strpos($data, 'Elgg') === FALSE) {
+ $this->htaccessIssue = 'non_elgg_htaccess';
+ return FALSE;
+ } else {
+ // check if this is an old Elgg htaccess
+ if (strpos($data, 'RewriteRule ^rewrite.php$ install.php') == FALSE) {
+ $this->htaccessIssue = 'old_elgg_htaccess';
+ return FALSE;
+ }
+ return TRUE;
+ }
+ }
+
+ if (!is_writable($path)) {
+ $this->htaccessIssue = 'write_permission';
+ return FALSE;
+ }
+
+ // create the .htaccess file
+ $result = copy("{$path}htaccess_dist", $filename);
+ if (!$result) {
+ $this->htaccessIssue = 'cannot_copy';
+ return FALSE;
+ }
+
+ return TRUE;
+ }
+
+ /**
+ * Create the status array required by the ElggInstaller
+ *
+ * @param string $url Rewrite test URL
+ *
+ * @return array
+ */
+ protected function returnStatus($url) {
+ if ($this->rewriteTestPassed) {
+ return array(
+ 'severity' => 'pass',
+ 'message' => elgg_echo('install:check:rewrite:success'),
+ );
+ }
+
+ if ($this->serverSupportsRemoteRead == FALSE) {
+ $msg = elgg_echo('install:warning:rewrite:unknown', array($url));
+ $msg .= elgg_view('install/js_rewrite_check', array('url' => $url));
+
+ return array(
+ 'severity' => 'warning',
+ 'message' => $msg,
+ );
+ }
+
+ if ($this->webserver == 'apache') {
+ $serverString = elgg_echo('install:error:rewrite:apache');
+ $msg = "$serverString\n\n";
+ if (!isset($this->htaccessIssue)) {
+ $msg .= elgg_echo('install:error:rewrite:allowoverride');
+ $msg .= elgg_view('install/js_rewrite_check', array('url' => $url));
+
+ return array(
+ 'severity' => 'failure',
+ 'message' => $msg,
+ );
+ }
+ $msg .= elgg_echo("install:error:rewrite:htaccess:{$this->htaccessIssue}");
+ return array(
+ 'severity' => 'failure',
+ 'message' => $msg,
+ );
+ }
+
+ if ($this->webserver != 'unknown') {
+ $serverString = elgg_echo("install:error:rewrite:{$this->webserver}");
+ $msg = "$serverString\n\n";
+ $msg .= elgg_echo("install:error:rewrite:altserver");
+ return array(
+ 'severity' => 'failure',
+ 'message' => $msg,
+ );
+ }
+
+ return array(
+ 'severity' => 'failure',
+ 'message' => elgg_echo('install:error:rewrite:unknown'),
+ );
+ }
+} \ No newline at end of file
diff --git a/install/cli/sample_installer.php b/install/cli/sample_installer.php
new file mode 100644
index 000000000..0bae0cd23
--- /dev/null
+++ b/install/cli/sample_installer.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Sample cli installer script
+ */
+
+$enabled = false;
+
+// Do not edit below this line. //////////////////////////////
+
+
+if (!$enabled) {
+ echo "To enable this script, change \$enabled to true.\n";
+ echo "You *must* disable this script after a successful installation.\n";
+ exit;
+}
+
+if (PHP_SAPI !== 'cli') {
+ echo "You must use the command line to run this script.";
+ exit;
+}
+
+require_once(dirname(dirname(__FILE__)) . "/ElggInstaller.php");
+
+$installer = new ElggInstaller();
+
+// none of the following may be empty
+$params = array(
+ // database parameters
+ 'dbuser' => '',
+ 'dbpassword' => '',
+ 'dbname' => '',
+
+ // site settings
+ 'sitename' => '',
+ 'siteemail' => '',
+ 'wwwroot' => '',
+ 'dataroot' => '',
+
+ // admin account
+ 'displayname' => '',
+ 'email' => '',
+ 'username' => '',
+ 'password' => '',
+);
+
+// install and create the .htaccess file
+$installer->batchInstall($params, TRUE);
+
+// at this point installation has completed (otherwise an exception halted execution).
+
+// try to rewrite the script to disable it.
+if (is_writable(__FILE__)) {
+ $code = file_get_contents(__FILE__);
+ if (preg_match('~\\$enabled\\s*=\\s*(true|1)\\s*;~i', $code)) {
+ // looks safe to rewrite
+ $code = preg_replace('~\\$enabled\\s*=\\s*(true|1)\\s*;~i', '$enabled = false;', $code);
+ file_put_contents(__FILE__, $code);
+
+ echo "\nNote: This script has been disabled for your safety.\n";
+ exit;
+ }
+}
+
+echo "\nWarning: You *must* disable this script by setting \$enabled = false;.\n";
+echo "Leaving this script enabled could endanger your installation.\n";
diff --git a/install/css/install.css b/install/css/install.css
new file mode 100644
index 000000000..e7290c130
--- /dev/null
+++ b/install/css/install.css
@@ -0,0 +1,295 @@
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+}
+
+body {
+ color: #333333;
+ background: #4690d6;
+ font-size: 80%;
+ font-family: "Lucida Grande",Arial,Tahoma,Verdana,sans-serif;
+ text-align: left;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: bold;
+}
+h1 { font-size: 1.8em; }
+h2 { font-size: 1.5em; }
+h3 { font-size: 1.2em; }
+h4 { font-size: 1.0em; }
+h5 { font-size: 0.9em; }
+h6 { font-size: 0.8em; }
+
+a {
+ color: #4690d6;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #0054a7;
+ text-decoration: underline;
+}
+
+p {
+ margin: 0px 0px 15px 0;
+}
+
+img {
+ border: none;
+}
+
+h2 {
+ border-bottom: 1px solid #555555;
+ margin-bottom: 20px;
+}
+
+ul {
+ list-style: none;
+}
+
+.elgg-page {
+ width: 880px;
+ margin: auto;
+ margin-top: 20px;
+}
+.elgg-page-header {
+ border-right: 1px solid #666666;
+ padding: 15px 50px 10px;
+ background: white;
+}
+.elgg-page-body {
+ border-bottom: 1px solid #666666;
+ border-right: 1px solid #666666;
+ padding: 0 40px 5px;
+ background: white;
+}
+
+.elgg-page-body:after,
+.elgg-page-header:after {
+ display: block;
+ content: '.';
+ line-height: 0;
+ height: 0;
+ visibility: hidden;
+ clear: both;
+}
+
+.elgg-sidebar {
+ float: left;
+ width: 250px;
+}
+.elgg-body {
+ overflow: hidden;
+ min-height: 320px;
+ padding-bottom: 10px;
+ position: relative;
+}
+.elgg-page-footer {
+ width: 800px;
+ height: 20px;
+ clear: both;
+ padding: 10px 20px 0 20px;
+ margin: auto;
+ margin-bottom: 40px;
+}
+
+.elgg-install-nav {
+ width: 100%;
+ text-align: right;
+ position: absolute;
+ bottom: 0px;
+}
+
+.elgg-page-footer a {
+ color: white;
+}
+
+.elgg-page-footer li {
+ float: left;
+ list-style: none;
+ margin-right: 20px;
+}
+
+.elgg-sidebar ol {
+ padding-left: 30px;
+}
+
+.elgg-sidebar li {
+ font-size: 1.2em;
+ margin-bottom: 5px;
+}
+
+.past {
+ text-decoration: line-through;
+}
+.present {
+ font-weight: bold;
+}
+
+.future {
+ color: #cccccc;
+}
+
+h3 {
+ margin: 15px 0 5px;
+}
+
+form > div {
+ margin-bottom: 15px;
+}
+label {
+ font-weight: bold;
+ color: #333333;
+ font-size: 140%;
+}
+.elgg-combo-label {
+ font-size: 120%;
+}
+input[type="text"],
+input[type="password"] {
+ font: 120% Arial, Helvetica, sans-serif;
+ padding: 5px;
+ border: 1px solid #cccccc;
+ color: #666666;
+ width: 96%;
+}
+.database-settings input[type="text"],
+.database-settings input[type="password"] {
+ width: 220px;
+}
+input[type="password"]:focus, input[type="text"]:focus {
+ border: solid 1px #4690d6;
+ background: #e4ecf5;
+ color: #333333;
+}
+input[type="submit"] {
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 16px;
+ font-weight: bold;
+ color: #fff;
+ background: #4690d6;
+ border: 4px solid #4690d6;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+
+ width: auto;
+ height: 35px;
+ padding: 2px 6px;
+ margin: 10px 0;
+ cursor: pointer;
+ float: right;
+}
+input[type="submit"]:hover {
+ background: #0054a7;
+ border: 4px solid #0054a7;
+}
+select {
+ display: block;
+ padding: 5px;
+}
+
+.install-help {
+ font-size: 90%;
+}
+
+.elgg-require-database {
+ padding-bottom: 50px;
+}
+
+.elgg-install-nav a {
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 16px;
+ font-weight: bold;
+ color: #ffffff;
+ background: #4690d6;
+ border: 4px solid #4690d6;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+
+ padding: 2px 9px;
+ margin: 10px;
+ cursor: pointer;
+ float: right;
+}
+
+.elgg-install-nav a:hover {
+ text-decoration: none;
+ background: #0054a7;
+ border: 4px solid #0054a7;
+}
+.elgg-install-nav .elgg-state-disabled,
+.elgg-install-nav .elgg-state-disabled:hover {
+ background: #555555;
+ border-color: #555555;
+ cursor: default;
+}
+
+.elgg-system-messages li {
+ padding: 3px 10px 3px 10px;
+ margin-bottom: 20px;
+}
+
+.elgg-state-success {
+ border: 1px solid #00cc00;
+ background: #ccffcc;
+}
+
+.elgg-state-error {
+ border: 1px solid #D3322A;
+ background: #F7DAD8;
+}
+
+.elgg-state-warning {
+ border: 1px solid #ded0a9;
+ background: #FEF5AA;
+}
+
+.elgg-body li {
+ margin-top: 5px;
+ padding: 5px;
+}
+
+.pass {
+ border: 1px solid #00cc00;
+ background: #ccffcc;
+}
+
+.warning {
+ border: 1px solid #ded0a9;
+ background: #FEF5AA;
+}
+
+.failure {
+ border: 1px solid #D3322A;
+ background: #F7DAD8;
+}
+
+.info {
+ border: 1px solid #aaaaaa;
+ background: #ffffff;
+}
+
+.messages {
+ padding: 3px 10px 3px 10px;
+ margin: 20px 0px 10px 0px;
+ width: 95%;
+} \ No newline at end of file
diff --git a/install/js/install.js b/install/js/install.js
new file mode 100644
index 000000000..37e5b0dc3
--- /dev/null
+++ b/install/js/install.js
@@ -0,0 +1,42 @@
+
+$(function() {
+ // prevent double-submission of forms
+ $('form').submit(function() {
+ if ($(this).data('submitted')) {
+ return false;
+ }
+ $(this).data('submitted', true);
+ return true;
+ });
+
+ // toggle the disable attribute of text box based on checkbox
+ $('.elgg-combo-checkbox').click(function() {
+ if ($(this).is(':checked')) {
+ $(this).prev().attr('disabled', true);
+ $(this).prev().val('');
+ } else {
+ $(this).prev().attr('disabled', false);
+ }
+ });
+});
+
+elgg = {
+ installer: {}
+};
+
+/**
+ * Check the rewrite address for "success" and then allows the installation to proceed.
+ */
+elgg.installer.rewriteTest = function(url, success_msg, nextURL) {
+ $.ajax(url, {
+ success: function(data, status, xhr) {
+ if (data == 'success') {
+ $('.elgg-require-rewrite li').attr('class', 'pass');
+ $('.elgg-require-rewrite li').html('<p>' + success_msg + '</p>');
+ $('.elgg-install-nav a.elgg-state-disabled')
+ .removeClass('elgg-state-disabled')
+ .attr('href', nextURL);
+ }
+ }
+ });
+}
diff --git a/install/languages/en.php b/install/languages/en.php
new file mode 100644
index 000000000..b2583fbc9
--- /dev/null
+++ b/install/languages/en.php
@@ -0,0 +1,160 @@
+<?php
+/**
+ * Installer English Language
+ *
+ * @package ElggLanguage
+ * @subpackage Installer
+ */
+
+$english = array(
+ 'install:title' => 'Elgg Install',
+ 'install:welcome' => 'Welcome',
+ 'install:requirements' => 'Requirements check',
+ 'install:database' => 'Database installation',
+ 'install:settings' => 'Configure site',
+ 'install:admin' => 'Create admin account',
+ 'install:complete' => 'Finished',
+
+ 'install:next' => 'Next',
+ 'install:refresh' => 'Refresh',
+
+ 'install:welcome:instructions' => "Installing Elgg has 6 simple steps and reading this welcome is the first one!
+
+If you haven't already, read through the installation instructions included with Elgg (or click the instructions link at the bottom of the page).
+
+If you are ready to proceed, click the Next button.",
+ 'install:requirements:instructions:success' => "Your server passed the requirement checks.",
+ 'install:requirements:instructions:failure' => "Your server failed the requirements check. After you have fixed the below issues, refresh this page. Check the troubleshooting links at the bottom of this page if you need further assistance.",
+ 'install:requirements:instructions:warning' => "Your server passed the requirements check, but there is at least one warning. We recommend that you check the install troubleshooting page for more details.",
+
+ 'install:require:php' => 'PHP',
+ 'install:require:rewrite' => 'Web server',
+ 'install:require:settings' => 'Settings file',
+ 'install:require:database' => 'Database',
+
+ 'install:check:root' => 'Your web server does not have permission to create an .htaccess file in the root directory of Elgg. You have two choices:
+
+ 1. Change the permissions on the root directory
+
+ 2. Copy the file htaccess_dist to .htaccess',
+
+ 'install:check:php:version' => 'Elgg requires PHP %s or above. This server is using version %s.',
+ 'install:check:php:extension' => 'Elgg requires the PHP extension %s.',
+ 'install:check:php:extension:recommend' => 'It is recommended that the PHP extension %s is installed.',
+ 'install:check:php:open_basedir' => 'The open_basedir PHP directive may prevent Elgg from saving files to its data directory.',
+ 'install:check:php:safe_mode' => 'Running PHP in safe mode is not recommened and may cause problems with Elgg.',
+ 'install:check:php:arg_separator' => 'arg_separator.output must be & for Elgg to work and your server\'s value is %s',
+ 'install:check:php:register_globals' => 'Register globals must be turned off.',
+ 'install:check:php:session.auto_start' => "session.auto_start must be off for Elgg to work. Either change the configuration of your server or add this directive to Elgg's .htaccess file.",
+
+ 'install:check:enginedir' => 'Your web server does not have permission to create the settings.php file in the engine directory. You have two choices:
+
+ 1. Change the permissions on the engine directory
+
+ 2. Copy the file settings.example.php to settings.php and follow the instructions in it for setting your database parameters.',
+ 'install:check:readsettings' => 'A settings file exists in the engine directory, but the web server cannot read it. You can delete the file or change the read permissions on it.',
+
+ 'install:check:php:success' => "Your server's PHP satisfies all of Elgg's requirements.",
+ 'install:check:rewrite:success' => 'The test of the rewrite rules was successful.',
+ 'install:check:database' => 'The database requirements are checked when Elgg loads its database.',
+
+ 'install:database:instructions' => "If you haven't already created a database for Elgg, do that now. Then fill in the values below to initialize the Elgg database.",
+ 'install:database:error' => 'There was an error creating the Elgg database and installation cannot continue. Review the message above and correct any problems. If you need more help, visit the Install troubleshooting link below or post to the Elgg community forums.',
+
+ 'install:database:label:dbuser' => 'Database Username',
+ 'install:database:label:dbpassword' => 'Database Password',
+ 'install:database:label:dbname' => 'Database Name',
+ 'install:database:label:dbhost' => 'Database Host',
+ 'install:database:label:dbprefix' => 'Database Table Prefix',
+
+ 'install:database:help:dbuser' => 'User that has full privileges to the MySQL database that you created for Elgg',
+ 'install:database:help:dbpassword' => 'Password for the above database user account',
+ 'install:database:help:dbname' => 'Name of the Elgg database',
+ 'install:database:help:dbhost' => 'Hostname of the MySQL server (usually localhost)',
+ 'install:database:help:dbprefix' => "The prefix given to all of Elgg's tables (usually elgg_)",
+
+ 'install:settings:instructions' => 'We need some information about the site as we configure Elgg. If you haven\'t <a href="http://docs.elgg.org/wiki/Data_directory" target="_blank">created a data directory</a> for Elgg, you need to do so now.',
+
+ 'install:settings:label:sitename' => 'Site Name',
+ 'install:settings:label:siteemail' => 'Site Email Address',
+ 'install:settings:label:wwwroot' => 'Site URL',
+ 'install:settings:label:path' => 'Elgg Install Directory',
+ 'install:settings:label:dataroot' => 'Data Directory',
+ 'install:settings:label:language' => 'Site Language',
+ 'install:settings:label:siteaccess' => 'Default Site Access',
+ 'install:label:combo:dataroot' => 'Elgg creates data directory',
+
+ 'install:settings:help:sitename' => 'The name of your new Elgg site',
+ 'install:settings:help:siteemail' => 'Email address used by Elgg for communication with users',
+ 'install:settings:help:wwwroot' => 'The address of the site (Elgg usually guesses this correctly)',
+ 'install:settings:help:path' => 'The directory where you put the Elgg code (Elgg usually guesses this correctly)',
+ 'install:settings:help:dataroot' => 'The directory that you created for Elgg to save files (the permissions on this directory are checked when you click Next). It must be an absolute path.',
+ 'install:settings:help:dataroot:apache' => 'You have the option of Elgg creating the data directory or entering the directory that you already created for storing user files (the permissions on this directory are checked when you click Next)',
+ 'install:settings:help:language' => 'The default language for the site',
+ 'install:settings:help:siteaccess' => 'The default access level for new user created content',
+
+ 'install:admin:instructions' => "It is now time to create an administrator's account.",
+
+ 'install:admin:label:displayname' => 'Display Name',
+ 'install:admin:label:email' => 'Email Address',
+ 'install:admin:label:username' => 'Username',
+ 'install:admin:label:password1' => 'Password',
+ 'install:admin:label:password2' => 'Password Again',
+
+ 'install:admin:help:displayname' => 'The name that is displayed on the site for this account',
+ 'install:admin:help:email' => '',
+ 'install:admin:help:username' => 'Account username used for logging in',
+ 'install:admin:help:password1' => "Account password must be at least %u characters long",
+ 'install:admin:help:password2' => 'Retype password to confirm',
+
+ 'install:admin:password:mismatch' => 'Password must match.',
+ 'install:admin:password:empty' => 'Password cannot be empty.',
+ 'install:admin:password:tooshort' => 'Your password was too short',
+ 'install:admin:cannot_create' => 'Unable to create an admin account.',
+
+ 'install:complete:instructions' => 'Your Elgg site is now ready to be used. Click the button below to be taken to your site.',
+ 'install:complete:gotosite' => 'Go to site',
+
+ 'InstallationException:UnknownStep' => '%s is an unknown installation step.',
+
+ 'install:success:database' => 'Database has been installed.',
+ 'install:success:settings' => 'Site settings have been saved.',
+ 'install:success:admin' => 'Admin account has been created.',
+
+ 'install:error:htaccess' => 'Unable to create an .htaccess',
+ 'install:error:settings' => 'Unable to create the settings file',
+ 'install:error:databasesettings' => 'Unable to connect to the database with these settings.',
+ 'install:error:oldmysql' => 'MySQL must be version 5.0 or above. Your server is using %s.',
+ 'install:error:nodatabase' => 'Unable to use database %s. It may not exist.',
+ 'install:error:cannotloadtables' => 'Cannot load the database tables',
+ 'install:error:tables_exist' => 'There are already Elgg tables in the database. You need to either drop those tables or restart the installer and we will attempt to use them. To restart the installer, remove \'?step=database\' from the URL in your browser\'s address bar and press Enter.',
+ 'install:error:readsettingsphp' => 'Unable to read engine/settings.example.php',
+ 'install:error:writesettingphp' => 'Unable to write engine/settings.php',
+ 'install:error:requiredfield' => '%s is required',
+ 'install:error:relative_path' => 'We don\'t think "%s" is an absoluate path for your data directory',
+ 'install:error:datadirectoryexists' => 'Your data directory %s does not exist.',
+ 'install:error:writedatadirectory' => 'Your data directory %s is not writable by the web server.',
+ 'install:error:locationdatadirectory' => 'Your data directory %s must be outside of your install path for security.',
+ 'install:error:emailaddress' => '%s is not a valid email address',
+ 'install:error:createsite' => 'Unable to create the site.',
+ 'install:error:savesitesettings' => 'Unable to save site settings',
+ 'install:error:loadadmin' => 'Unable to load admin user.',
+ 'install:error:adminaccess' => 'Unable to give new user account admin privileges.',
+ 'install:error:adminlogin' => 'Unable to login the new admin user automatically.',
+ 'install:error:rewrite:apache' => 'We think your server is running the Apache web server.',
+ 'install:error:rewrite:nginx' => 'We think your server is running the Nginx web server.',
+ 'install:error:rewrite:lighttpd' => 'We think your server is running the Lighttpd web server.',
+ 'install:error:rewrite:iis' => 'We think your server is running the IIS web server.',
+ 'install:error:rewrite:allowoverride' => "The rewrite test failed and the most likely cause is that AllowOverride is not set to All for Elgg's directory. This prevents Apache from processing the .htaccess file which contains the rewrite rules.
+ \n\nA less likely cause is Apache is configured with an alias for your Elgg directory and you need to set the RewriteBase in your .htaccess. There are further instructions in the .htaccess file in your Elgg directory.",
+ 'install:error:rewrite:htaccess:write_permission' => 'Your web server does not have permission to create the .htaccess file in Elgg\'s directory. You need to manually copy htaccess_dist to .htaccess or change the permissions on the directory.',
+ 'install:error:rewrite:htaccess:read_permission' => 'There is an .htaccess file in Elgg\'s directory, but your web server does not have permission to read it.',
+ 'install:error:rewrite:htaccess:non_elgg_htaccess' => 'There is an .htaccess file in Elgg\'s directory that was not not created by Elgg. Please remove it.',
+ 'install:error:rewrite:htaccess:old_elgg_htaccess' => 'There appears to be an old Elgg .htaccess file in Elgg\'s directory. It does not contain the rewrite rule for testing the web server.',
+ 'install:error:rewrite:htaccess:cannot_copy' => 'A unknown error occurred while creating the .htaccess file. You need to manually copy htaccess_dist to .htaccess in Elgg\'s directory.',
+ 'install:error:rewrite:altserver' => 'The rewrite rules test failed. You need to configure your web server with Elgg\'s rewrite rules and try again.',
+ 'install:error:rewrite:unknown' => 'Oof. We couldn\'t figure out what kind of web server is running on your server and it failed the rewrite rules. We cannot offer any specific advice. Please check the troubleshooting link.',
+ 'install:warning:rewrite:unknown' => 'Your server does not support automatic testing of the rewrite rules and your browser does not support checking via JavaScript. You can continue the installation, but you may experience problems with your site. You can manually test the rewrite rules by clicking this link: <a href="%s" target="_blank">test</a>. You will see the word success if the rules are working.',
+);
+
+add_translation("en", $english);
diff --git a/js/classes/ElggEntity.js b/js/classes/ElggEntity.js
new file mode 100644
index 000000000..9461a463f
--- /dev/null
+++ b/js/classes/ElggEntity.js
@@ -0,0 +1,20 @@
+/**
+ * Create a new ElggEntity
+ *
+ * @class Represents an ElggEntity
+ * @property {number} guid
+ * @property {string} type
+ * @property {string} subtype
+ * @property {number} owner_guid
+ * @property {number} site_guid
+ * @property {number} container_guid
+ * @property {number} access_id
+ * @property {number} time_created
+ * @property {number} time_updated
+ * @property {number} last_action
+ * @property {string} enabled
+ *
+ */
+elgg.ElggEntity = function(o) {
+ $.extend(this, o);
+}; \ No newline at end of file
diff --git a/js/classes/ElggPriorityList.js b/js/classes/ElggPriorityList.js
new file mode 100644
index 000000000..b4cec5044
--- /dev/null
+++ b/js/classes/ElggPriorityList.js
@@ -0,0 +1,92 @@
+/**
+ * Priority lists allow you to create an indexed list that can be iterated through in a specific
+ * order.
+ */
+elgg.ElggPriorityList = function() {
+ this.length = 0;
+ this.priorities_ = [];
+};
+
+/**
+ * Inserts an element into the priority list at the priority specified.
+ *
+ * @param {Object} obj The object to insert
+ * @param {Number} opt_priority An optional priority to insert at.
+ *
+ * @return {Void}
+ */
+elgg.ElggPriorityList.prototype.insert = function(obj, opt_priority) {
+ var priority = 500;
+ if (arguments.length == 2 && opt_priority != undefined) {
+ priority = parseInt(opt_priority, 10);
+ }
+
+ priority = Math.max(priority, 0);
+
+ if (elgg.isUndefined(this.priorities_[priority])) {
+ this.priorities_[priority] = [];
+ }
+
+ this.priorities_[priority].push(obj);
+ this.length++;
+};
+
+/**
+ * Iterates through each element in order.
+ *
+ * Unlike every, this ignores the return value of the callback.
+ *
+ * @param {Function} callback The callback function to pass each element through. See
+ * Array.prototype.every() for details.
+ * @return {Object}
+ */
+elgg.ElggPriorityList.prototype.forEach = function(callback) {
+ elgg.assertTypeOf('function', callback);
+
+ var index = 0;
+
+ this.priorities_.forEach(function(elems) {
+ elems.forEach(function(elem) {
+ callback(elem, index++);
+ });
+ });
+
+ return this;
+};
+
+/**
+ * Iterates through each element in order.
+ *
+ * Unlike forEach, this returns the value of the callback and will break on false.
+ *
+ * @param {Function} callback The callback function to pass each element through. See
+ * Array.prototype.every() for details.
+ * @return {Object}
+ */
+elgg.ElggPriorityList.prototype.every = function(callback) {
+ elgg.assertTypeOf('function', callback);
+
+ var index = 0;
+
+ return this.priorities_.every(function(elems) {
+ return elems.every(function(elem) {
+ return callback(elem, index++);
+ });
+ });
+};
+
+/**
+ * Removes an element from the priority list
+ *
+ * @param {Object} obj The object to remove.
+ * @return {Void}
+ */
+elgg.ElggPriorityList.prototype.remove = function(obj) {
+ this.priorities_.forEach(function(elems) {
+ var index;
+ while ((index = elems.indexOf(obj)) !== -1) {
+ elems.splice(index, 1);
+ this.length--;
+ }
+ });
+}; \ No newline at end of file
diff --git a/js/classes/ElggUser.js b/js/classes/ElggUser.js
new file mode 100644
index 000000000..b8a976fba
--- /dev/null
+++ b/js/classes/ElggUser.js
@@ -0,0 +1,28 @@
+/**
+ * Create a new ElggUser
+ *
+ * @param {Object} o
+ * @extends ElggEntity
+ * @class Represents an ElggUser
+ * @property {string} name
+ * @property {string} username
+ * @property {string} language
+ * @property {boolean} admin
+ */
+elgg.ElggUser = function(o) {
+ elgg.ElggEntity.call(this, o);
+};
+
+elgg.inherit(elgg.ElggUser, elgg.ElggEntity);
+
+/**
+ * Is this user an admin?
+ *
+ * @warning The admin state of the user should be checked on the server for any
+ * actions taken that require admin privileges.
+ *
+ * @return {boolean}
+ */
+elgg.ElggUser.prototype.isAdmin = function() {
+ return this.admin;
+}; \ No newline at end of file
diff --git a/js/lib/ajax.js b/js/lib/ajax.js
new file mode 100644
index 000000000..b3f39cc42
--- /dev/null
+++ b/js/lib/ajax.js
@@ -0,0 +1,242 @@
+/*globals elgg, $*/
+elgg.provide('elgg.ajax');
+
+/**
+ * @author Evan Winslow
+ * Provides a bunch of useful shortcut functions for making ajax calls
+ */
+
+/**
+ * Wrapper function for jQuery.ajax which ensures that the url being called
+ * is relative to the elgg site root.
+ *
+ * You would most likely use elgg.get or elgg.post, rather than this function
+ *
+ * @param {string} url Optionally specify the url as the first argument
+ * @param {Object} options Optional. {@see jQuery#ajax}
+ * @return {XmlHttpRequest}
+ */
+elgg.ajax = function(url, options) {
+ options = elgg.ajax.handleOptions(url, options);
+
+ options.url = elgg.normalize_url(options.url);
+ return $.ajax(options);
+};
+/**
+ * @const
+ */
+elgg.ajax.SUCCESS = 0;
+
+/**
+ * @const
+ */
+elgg.ajax.ERROR = -1;
+
+/**
+ * Handle optional arguments and return the resulting options object
+ *
+ * @param url
+ * @param options
+ * @return {Object}
+ * @private
+ */
+elgg.ajax.handleOptions = function(url, options) {
+ var data_only = true,
+ data,
+ member;
+
+ //elgg.ajax('example/file.php', {...});
+ if (elgg.isString(url)) {
+ options = options || {};
+
+ //elgg.ajax({...});
+ } else {
+ options = url || {};
+ url = options.url;
+ }
+
+ //elgg.ajax('example/file.php', function() {...});
+ if (elgg.isFunction(options)) {
+ data_only = false;
+ options = {success: options};
+ }
+
+ //elgg.ajax('example/file.php', {data:{...}});
+ if (options.data) {
+ data_only = false;
+ } else {
+ for (member in options) {
+ //elgg.ajax('example/file.php', {callback:function(){...}});
+ if (elgg.isFunction(options[member])) {
+ data_only = false;
+ }
+ }
+ }
+
+ //elgg.ajax('example/file.php', {notdata:notfunc});
+ if (data_only) {
+ data = options;
+ options = {data: data};
+ }
+
+ if (url) {
+ options.url = url;
+ }
+
+ return options;
+};
+
+/**
+ * Wrapper function for elgg.ajax which forces the request type to 'get.'
+ *
+ * @param {string} url Optionally specify the url as the first argument
+ * @param {Object} options {@see jQuery#ajax}
+ * @return {XmlHttpRequest}
+ */
+elgg.get = function(url, options) {
+ options = elgg.ajax.handleOptions(url, options);
+
+ options.type = 'get';
+ return elgg.ajax(options);
+};
+
+/**
+ * Wrapper function for elgg.get which forces the dataType to 'json.'
+ *
+ * @param {string} url Optionally specify the url as the first argument
+ * @param {Object} options {@see jQuery#ajax}
+ * @return {XmlHttpRequest}
+ */
+elgg.getJSON = function(url, options) {
+ options = elgg.ajax.handleOptions(url, options);
+
+ options.dataType = 'json';
+ return elgg.get(options);
+};
+
+/**
+ * Wrapper function for elgg.ajax which forces the request type to 'post.'
+ *
+ * @param {string} url Optionally specify the url as the first argument
+ * @param {Object} options {@see jQuery#ajax}
+ * @return {XmlHttpRequest}
+ */
+elgg.post = function(url, options) {
+ options = elgg.ajax.handleOptions(url, options);
+
+ options.type = 'post';
+ return elgg.ajax(options);
+};
+
+/**
+ * Perform an action via ajax
+ *
+ * @example Usage 1:
+ * At its simplest, only the action name is required (and anything more than the
+ * action name will be invalid).
+ * <pre>
+ * elgg.action('name/of/action');
+ * </pre>
+ *
+ * The action can be relative to the current site ('name/of/action') or
+ * the full URL of the action ('http://elgg.org/action/name/of/action').
+ *
+ * @example Usage 2:
+ * If you want to pass some data along with it, use the second parameter
+ * <pre>
+ * elgg.action('friend/add', { friend: some_guid });
+ * </pre>
+ *
+ * @example Usage 3:
+ * Of course, you will have no control over what happens when the request
+ * completes if you do it like that, so there's also the most verbose method
+ * <pre>
+ * elgg.action('friend/add', {
+ * data: {
+ * friend: some_guid
+ * },
+ * success: function(json) {
+ * //do something
+ * },
+ * }
+ * </pre>
+ * You can pass any of your favorite $.ajax arguments into this second parameter.
+ *
+ * @note If you intend to use the second field in the "verbose" way, you must
+ * specify a callback method or the data parameter. If you do not, elgg.action
+ * will think you mean to send the second parameter as data.
+ *
+ * @note You do not have to add security tokens to this request. Elgg does that
+ * for you automatically.
+ *
+ * @see jQuery.ajax
+ *
+ * @param {String} action The action to call.
+ * @param {Object} options
+ * @return {XMLHttpRequest}
+ */
+elgg.action = function(action, options) {
+ elgg.assertTypeOf('string', action);
+
+ // support shortcut and full URLs
+ // this will mangle URLs that aren't elgg actions.
+ // Use post, get, or ajax for those.
+ if (action.indexOf('action/') < 0) {
+ action = 'action/' + action;
+ }
+
+ options = elgg.ajax.handleOptions(action, options);
+
+ // This is a misuse of elgg.security.addToken() because it is not always a
+ // full query string with a ?. As such we need a special check for the tokens.
+ if (!elgg.isString(options.data) || options.data.indexOf('__elgg_ts') == -1) {
+ options.data = elgg.security.addToken(options.data);
+ }
+ options.dataType = 'json';
+
+ //Always display system messages after actions
+ var custom_success = options.success || elgg.nullFunction;
+ options.success = function(json, two, three, four) {
+ if (json && json.system_messages) {
+ elgg.register_error(json.system_messages.error);
+ elgg.system_message(json.system_messages.success);
+ }
+
+ custom_success(json, two, three, four);
+ };
+
+ return elgg.post(options);
+};
+
+/**
+ * Make an API call
+ *
+ * @example Usage:
+ * <pre>
+ * elgg.api('system.api.list', {
+ * success: function(data) {
+ * console.log(data);
+ * }
+ * });
+ * </pre>
+ *
+ * @param {String} method The API method to be called
+ * @param {Object} options {@see jQuery#ajax}
+ * @return {XmlHttpRequest}
+ */
+elgg.api = function (method, options) {
+ elgg.assertTypeOf('string', method);
+
+ var defaults = {
+ dataType: 'json',
+ data: {}
+ };
+
+ options = elgg.ajax.handleOptions(method, options);
+ options = $.extend(defaults, options);
+
+ options.url = 'services/api/rest/' + options.dataType + '/';
+ options.data.method = method;
+
+ return elgg.ajax(options);
+};
diff --git a/js/lib/configuration.js b/js/lib/configuration.js
new file mode 100644
index 000000000..6e221c957
--- /dev/null
+++ b/js/lib/configuration.js
@@ -0,0 +1,10 @@
+elgg.provide('elgg.config');
+
+/**
+ * Returns the current site URL
+ *
+ * @return {String} The site URL.
+ */
+elgg.get_site_url = function() {
+ return elgg.config.wwwroot;
+}; \ No newline at end of file
diff --git a/js/lib/elgglib.js b/js/lib/elgglib.js
new file mode 100644
index 000000000..af2c94000
--- /dev/null
+++ b/js/lib/elgglib.js
@@ -0,0 +1,563 @@
+/**
+ * @namespace Singleton object for holding the Elgg javascript library
+ */
+var elgg = elgg || {};
+
+/**
+ * Pointer to the global context
+ *
+ * @see elgg.require
+ * @see elgg.provide
+ */
+elgg.global = this;
+
+/**
+ * Convenience reference to an empty function.
+ *
+ * Save memory by not generating multiple empty functions.
+ */
+elgg.nullFunction = function() {};
+
+/**
+ * This forces an inheriting class to implement the method or
+ * it will throw an error.
+ *
+ * @example
+ * AbstractClass.prototype.toBeImplemented = elgg.abstractMethod;
+ */
+elgg.abstractMethod = function() {
+ throw new Error("Oops... you forgot to implement an abstract method!");
+};
+
+/**
+ * Merges two or more objects together and returns the result.
+ */
+elgg.extend = jQuery.extend;
+
+/**
+ * Check if the value is an array.
+ *
+ * No sense in reinventing the wheel!
+ *
+ * @param {*} val
+ *
+ * @return boolean
+ */
+elgg.isArray = jQuery.isArray;
+
+/**
+ * Check if the value is a function.
+ *
+ * No sense in reinventing the wheel!
+ *
+ * @param {*} val
+ *
+ * @return boolean
+ */
+elgg.isFunction = jQuery.isFunction;
+
+/**
+ * Check if the value is a "plain" object (i.e., created by {} or new Object())
+ *
+ * No sense in reinventing the wheel!
+ *
+ * @param {*} val
+ *
+ * @return boolean
+ */
+elgg.isPlainObject = jQuery.isPlainObject;
+
+/**
+ * Check if the value is a string
+ *
+ * @param {*} val
+ *
+ * @return boolean
+ */
+elgg.isString = function(val) {
+ return typeof val === 'string';
+};
+
+/**
+ * Check if the value is a number
+ *
+ * @param {*} val
+ *
+ * @return boolean
+ */
+elgg.isNumber = function(val) {
+ return typeof val === 'number';
+};
+
+/**
+ * Check if the value is an object
+ *
+ * @note This returns true for functions and arrays! If you want to return true only
+ * for "plain" objects (created using {} or new Object()) use elgg.isPlainObject.
+ *
+ * @param {*} val
+ *
+ * @return boolean
+ */
+elgg.isObject = function(val) {
+ return typeof val === 'object';
+};
+
+/**
+ * Check if the value is undefined
+ *
+ * @param {*} val
+ *
+ * @return boolean
+ */
+elgg.isUndefined = function(val) {
+ return val === undefined;
+};
+
+/**
+ * Check if the value is null
+ *
+ * @param {*} val
+ *
+ * @return boolean
+ */
+elgg.isNull = function(val) {
+ return val === null;
+};
+
+/**
+ * Check if the value is either null or undefined
+ *
+ * @param {*} val
+ *
+ * @return boolean
+ */
+elgg.isNullOrUndefined = function(val) {
+ return val == null;
+};
+
+/**
+ * Throw an exception of the type doesn't match
+ *
+ * @todo Might be more appropriate for debug mode only?
+ */
+elgg.assertTypeOf = function(type, val) {
+ if (typeof val !== type) {
+ throw new TypeError("Expecting param of " +
+ arguments.caller + "to be a(n) " + type + "." +
+ " Was actually a(n) " + typeof val + ".");
+ }
+};
+
+/**
+ * Throw an error if the required package isn't present
+ *
+ * @param {String} pkg The required package (e.g., 'elgg.package')
+ */
+elgg.require = function(pkg) {
+ elgg.assertTypeOf('string', pkg);
+
+ var parts = pkg.split('.'),
+ cur = elgg.global,
+ part, i;
+
+ for (i = 0; i < parts.length; i += 1) {
+ part = parts[i];
+ cur = cur[part];
+ if (elgg.isUndefined(cur)) {
+ throw new Error("Missing package: " + pkg);
+ }
+ }
+};
+
+/**
+ * Generate the skeleton for a package.
+ *
+ * <pre>
+ * elgg.provide('elgg.package.subpackage');
+ * </pre>
+ *
+ * is equivalent to
+ *
+ * <pre>
+ * elgg = elgg || {};
+ * elgg.package = elgg.package || {};
+ * elgg.package.subpackage = elgg.package.subpackage || {};
+ * </pre>
+ *
+ * @example elgg.provide('elgg.config.translations')
+ *
+ * @param {string} pkg The package name.
+ */
+elgg.provide = function(pkg, opt_context) {
+ elgg.assertTypeOf('string', pkg);
+
+ var parts = pkg.split('.'),
+ context = opt_context || elgg.global,
+ part, i;
+
+
+ for (i = 0; i < parts.length; i += 1) {
+ part = parts[i];
+ context[part] = context[part] || {};
+ context = context[part];
+ }
+};
+
+/**
+ * Inherit the prototype methods from one constructor into another.
+ *
+ * @example
+ * <pre>
+ * function ParentClass(a, b) { }
+ *
+ * ParentClass.prototype.foo = function(a) { alert(a); }
+ *
+ * function ChildClass(a, b, c) {
+ * //equivalent of parent::__construct(a, b); in PHP
+ * ParentClass.call(this, a, b);
+ * }
+ *
+ * elgg.inherit(ChildClass, ParentClass);
+ *
+ * var child = new ChildClass('a', 'b', 'see');
+ * child.foo('boo!'); // alert('boo!');
+ * </pre>
+ *
+ * @param {Function} Child Child class constructor.
+ * @param {Function} Parent Parent class constructor.
+ */
+elgg.inherit = function(Child, Parent) {
+ Child.prototype = new Parent();
+ Child.prototype.constructor = Child;
+};
+
+/**
+ * Converts shorthand urls to absolute urls.
+ *
+ * If the url is already absolute or protocol-relative, no change is made.
+ *
+ * elgg.normalize_url(''); // 'http://my.site.com/'
+ * elgg.normalize_url('dashboard'); // 'http://my.site.com/dashboard'
+ * elgg.normalize_url('http://google.com/'); // no change
+ * elgg.normalize_url('//google.com/'); // no change
+ *
+ * @param {String} url The url to normalize
+ * @return {String} The extended url
+ * @private
+ */
+elgg.normalize_url = function(url) {
+ url = url || '';
+ elgg.assertTypeOf('string', url);
+
+ validated = (function(url) {
+ url = elgg.parse_url(url);
+ if (url.scheme){
+ url.scheme = url.scheme.toLowerCase();
+ }
+ if (url.scheme == 'http' || url.scheme == 'https') {
+ if (!url.host) {
+ return false;
+ }
+ /* hostname labels may contain only alphanumeric characters, dots and hypens. */
+ if (!(new RegExp("^([a-zA-Z0-9][a-zA-Z0-9\\-\\.]*)$", "i")).test(url.host) || url.host.charAt(-1) == '.') {
+ return false;
+ }
+ }
+ /* some schemas allow the host to be empty */
+ if (!url.scheme || !url.host && url.scheme != 'mailto' && url.scheme != 'news' && url.scheme != 'file') {
+ return false;
+ }
+ return true;
+ })(url);
+
+ // all normal URLs including mailto:
+ if (validated) {
+ return url;
+ }
+
+ // '//example.com' (Shortcut for protocol.)
+ // '?query=test', #target
+ else if ((new RegExp("^(\\#|\\?|//)", "i")).test(url)) {
+ return url;
+ }
+
+ // 'javascript:'
+ else if (url.indexOf('javascript:') === 0 || url.indexOf('mailto:') === 0 ) {
+ return url;
+ }
+
+ // watch those double escapes in JS.
+
+ // 'install.php', 'install.php?step=step'
+ else if ((new RegExp("^[^\/]*\\.php(\\?.*)?$", "i")).test(url)) {
+ return elgg.config.wwwroot + url.ltrim('/');
+ }
+
+ // 'example.com', 'example.com/subpage'
+ else if ((new RegExp("^[^/]*\\.", "i")).test(url)) {
+ return 'http://' + url;
+ }
+
+ // 'page/handler', 'mod/plugin/file.php'
+ else {
+ // trim off any leading / because the site URL is stored
+ // with a trailing /
+ return elgg.config.wwwroot + url.ltrim('/');
+ }
+};
+
+/**
+ * Displays system messages via javascript rather than php.
+ *
+ * @param {String} msgs The message we want to display
+ * @param {Number} delay The amount of time to display the message in milliseconds. Defaults to 6 seconds.
+ * @param {String} type The type of message (typically 'error' or 'message')
+ * @private
+ */
+elgg.system_messages = function(msgs, delay, type) {
+ if (elgg.isUndefined(msgs)) {
+ return;
+ }
+
+ var classes = ['elgg-message'],
+ messages_html = [],
+ appendMessage = function(msg) {
+ messages_html.push('<li class="' + classes.join(' ') + '"><p>' + msg + '</p></li>');
+ },
+ systemMessages = $('ul.elgg-system-messages'),
+ i;
+
+ //validate delay. Must be a positive integer.
+ delay = parseInt(delay || 6000, 10);
+ if (isNaN(delay) || delay <= 0) {
+ delay = 6000;
+ }
+
+ //Handle non-arrays
+ if (!elgg.isArray(msgs)) {
+ msgs = [msgs];
+ }
+
+ if (type === 'error') {
+ classes.push('elgg-state-error');
+ } else {
+ classes.push('elgg-state-success');
+ }
+
+ msgs.forEach(appendMessage);
+
+ if (type != 'error') {
+ $(messages_html.join('')).appendTo(systemMessages)
+ .animate({opacity: '1.0'}, delay).fadeOut('slow');
+ } else {
+ $(messages_html.join('')).appendTo(systemMessages);
+ }
+};
+
+/**
+ * Wrapper function for system_messages. Specifies "messages" as the type of message
+ * @param {String} msgs The message to display
+ * @param {Number} delay How long to display the message (milliseconds)
+ */
+elgg.system_message = function(msgs, delay) {
+ elgg.system_messages(msgs, delay, "message");
+};
+
+/**
+ * Wrapper function for system_messages. Specifies "errors" as the type of message
+ * @param {String} errors The error message to display
+ * @param {Number} delay How long to dispaly the error message (milliseconds)
+ */
+elgg.register_error = function(errors, delay) {
+ elgg.system_messages(errors, delay, "error");
+};
+
+/**
+ * Meant to mimic the php forward() function by simply redirecting the
+ * user to another page.
+ *
+ * @param {String} url The url to forward to
+ */
+elgg.forward = function(url) {
+ location.href = elgg.normalize_url(url);
+};
+
+/**
+ * Parse a URL into its parts. Mimicks http://php.net/parse_url
+ *
+ * @param {String} url The URL to parse
+ * @param {Int} component A component to return
+ * @param {Bool} expand Expand the query into an object? Else it's a string.
+ *
+ * @return {Object} The parsed URL
+ */
+elgg.parse_url = function(url, component, expand) {
+ // Adapted from http://blog.stevenlevithan.com/archives/parseuri
+ // which was release under the MIT
+ // It was modified to fix mailto: and javascript: support.
+ var
+ expand = expand || false,
+ component = component || false,
+
+ re_str =
+ // scheme (and user@ testing)
+ '^(?:(?![^:@]+:[^:@/]*@)([^:/?#.]+):)?(?://)?'
+ // possibly a user[:password]@
+ + '((?:(([^:@]*)(?::([^:@]*))?)?@)?'
+ // host and port
+ + '([^:/?#]*)(?::(\\d*))?)'
+ // path
+ + '(((/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[?#]|$)))*/?)?([^?#/]*))'
+ // query string
+ + '(?:\\?([^#]*))?'
+ // fragment
+ + '(?:#(.*))?)',
+ keys = {
+ 1: "scheme",
+ 4: "user",
+ 5: "pass",
+ 6: "host",
+ 7: "port",
+ 9: "path",
+ 12: "query",
+ 13: "fragment"
+ },
+ results = {};
+
+ if (url.indexOf('mailto:') === 0) {
+ results['scheme'] = 'mailto';
+ results['path'] = url.replace('mailto:', '');
+ return results;
+ }
+
+ if (url.indexOf('javascript:') === 0) {
+ results['scheme'] = 'javascript';
+ results['path'] = url.replace('javascript:', '');
+ return results;
+ }
+
+ var re = new RegExp(re_str);
+ var matches = re.exec(url);
+
+ for (var i in keys) {
+ if (matches[i]) {
+ results[keys[i]] = matches[i];
+ }
+ }
+
+ if (expand && typeof(results['query']) != 'undefined') {
+ results['query'] = elgg.parse_str(results['query']);
+ }
+
+ if (component) {
+ if (typeof(results[component]) != 'undefined') {
+ return results[component];
+ } else {
+ return false;
+ }
+ }
+ return results;
+};
+
+/**
+ * Returns an object with key/values of the parsed query string.
+ *
+ * @param {String} string The string to parse
+ * @return {Object} The parsed object string
+ */
+elgg.parse_str = function(string) {
+ var params = {};
+ var result,
+ key,
+ value,
+ re = /([^&=]+)=?([^&]*)/g;
+
+ while (result = re.exec(string)) {
+ key = decodeURIComponent(result[1])
+ value = decodeURIComponent(result[2])
+ params[key] = value;
+ }
+
+ return params;
+};
+
+/**
+ * Returns a jQuery selector from a URL's fragement. Defaults to expecting an ID.
+ *
+ * Examples:
+ * http://elgg.org/download.php returns ''
+ * http://elgg.org/download.php#id returns #id
+ * http://elgg.org/download.php#.class-name return .class-name
+ * http://elgg.org/download.php#a.class-name return a.class-name
+ *
+ * @param {String} url The URL
+ * @return {String} The selector
+ */
+elgg.getSelectorFromUrlFragment = function(url) {
+ var fragment = url.split('#')[1];
+
+ if (fragment) {
+ // this is a .class or a tag.class
+ if (fragment.indexOf('.') > -1) {
+ return fragment;
+ }
+
+ // this is an id
+ else {
+ return '#' + fragment;
+ }
+ }
+ return '';
+};
+
+/**
+ * Adds child to object[parent] array.
+ *
+ * @param {Object} object The object to add to
+ * @param {String} parent The parent array to add to.
+ * @param {Mixed} value The value
+ */
+elgg.push_to_object_array = function(object, parent, value) {
+ elgg.assertTypeOf('object', object);
+ elgg.assertTypeOf('string', parent);
+
+ if (!(object[parent] instanceof Array)) {
+ object[parent] = []
+ }
+
+ if ($.inArray(value, object[parent]) < 0) {
+ return object[parent].push(value);
+ }
+
+ return false;
+};
+
+/**
+ * Tests if object[parent] contains child
+ *
+ * @param {Object} object The object to add to
+ * @param {String} parent The parent array to add to.
+ * @param {Mixed} value The value
+ */
+elgg.is_in_object_array = function(object, parent, value) {
+ elgg.assertTypeOf('object', object);
+ elgg.assertTypeOf('string', parent);
+
+ return typeof(object[parent]) != 'undefined' && $.inArray(value, object[parent]) >= 0;
+};
+
+/**
+ * Triggers the init hook when the library is ready
+ *
+ * Current requirements:
+ * - DOM is ready
+ * - languages loaded
+ *
+ */
+elgg.initWhenReady = function() {
+ if (elgg.config.languageReady && elgg.config.domReady) {
+ elgg.trigger_hook('init', 'system');
+ elgg.trigger_hook('ready', 'system');
+ }
+};
diff --git a/js/lib/hooks.js b/js/lib/hooks.js
new file mode 100644
index 000000000..5e1808e22
--- /dev/null
+++ b/js/lib/hooks.js
@@ -0,0 +1,173 @@
+/*
+ * Javascript hook interface
+ */
+
+elgg.provide('elgg.config.hooks');
+elgg.provide('elgg.config.instant_hooks');
+elgg.provide('elgg.config.triggered_hooks');
+
+/**
+ * Registers a hook handler with the event system.
+ *
+ * The special keyword "all" can be used for either the name or the type or both
+ * and means to call that handler for all of those hooks.
+ *
+ * Note that handlers registering for instant hooks will be executed immediately if the instant
+ * hook has been previously triggered.
+ *
+ * @param {String} name Name of the plugin hook to register for
+ * @param {String} type Type of the event to register for
+ * @param {Function} handler Handle to call
+ * @param {Number} priority Priority to call the event handler
+ * @return {Bool}
+ */
+elgg.register_hook_handler = function(name, type, handler, priority) {
+ elgg.assertTypeOf('string', name);
+ elgg.assertTypeOf('string', type);
+ elgg.assertTypeOf('function', handler);
+
+ if (!name || !type) {
+ return false;
+ }
+
+ var priorities = elgg.config.hooks;
+
+ elgg.provide(name + '.' + type, priorities);
+
+ if (!(priorities[name][type] instanceof elgg.ElggPriorityList)) {
+ priorities[name][type] = new elgg.ElggPriorityList();
+ }
+
+ // call if instant and already triggered.
+ if (elgg.is_instant_hook(name, type) && elgg.is_triggered_hook(name, type)) {
+ handler(name, type, null, null);
+ }
+
+ return priorities[name][type].insert(handler, priority);
+};
+
+/**
+ * Emits a hook.
+ *
+ * Loops through all registered hooks and calls the handler functions in order.
+ * Every handler function will always be called, regardless of the return value.
+ *
+ * @warning Handlers take the same 4 arguments in the same order as when calling this function.
+ * This is different from the PHP version!
+ *
+ * @note Instant hooks do not support params or values.
+ *
+ * Hooks are called in this order:
+ * specifically registered (event_name and event_type match)
+ * all names, specific type
+ * specific name, all types
+ * all names, all types
+ *
+ * @param {String} name Name of the hook to emit
+ * @param {String} type Type of the hook to emit
+ * @param {Object} params Optional parameters to pass to the handlers
+ * @param {Object} value Initial value of the return. Can be mangled by handlers
+ *
+ * @return {Bool}
+ */
+elgg.trigger_hook = function(name, type, params, value) {
+ elgg.assertTypeOf('string', name);
+ elgg.assertTypeOf('string', type);
+
+ // mark as triggered
+ elgg.set_triggered_hook(name, type);
+
+ // default to true if unpassed
+ value = value || true;
+
+ var hooks = elgg.config.hooks,
+ tempReturnValue = null,
+ returnValue = value,
+ callHookHandler = function(handler) {
+ tempReturnValue = handler(name, type, params, value);
+ };
+
+ elgg.provide(name + '.' + type, hooks);
+ elgg.provide('all.' + type, hooks);
+ elgg.provide(name + '.all', hooks);
+ elgg.provide('all.all', hooks);
+
+ var hooksList = [];
+
+ if (name != 'all' && type != 'all') {
+ hooksList.push(hooks[name][type]);
+ }
+
+ if (type != 'all') {
+ hooksList.push(hooks['all'][type]);
+ }
+
+ if (name != 'all') {
+ hooksList.push(hooks[name]['all']);
+ }
+
+ hooksList.push(hooks['all']['all']);
+
+ hooksList.every(function(handlers) {
+ if (handlers instanceof elgg.ElggPriorityList) {
+ handlers.forEach(callHookHandler);
+ }
+ return true;
+ });
+
+ return (tempReturnValue != null) ? tempReturnValue : returnValue;
+};
+
+/**
+ * Registers a hook as an instant hook.
+ *
+ * After being trigger once, registration of a handler to an instant hook will cause the
+ * handle to be executed immediately.
+ *
+ * @note Instant hooks must be triggered without params or defaults. Any params or default
+ * passed will *not* be passed to handlers executed upon registration.
+ *
+ * @param {String} name The hook name.
+ * @param {String} type The hook type.
+ * @return {Int}
+ */
+elgg.register_instant_hook = function(name, type) {
+ elgg.assertTypeOf('string', name);
+ elgg.assertTypeOf('string', type);
+
+ return elgg.push_to_object_array(elgg.config.instant_hooks, name, type);
+};
+
+/**
+ * Is this hook registered as an instant hook?
+ *
+ * @param {String} name The hook name.
+ * @param {String} type The hook type.
+ */
+elgg.is_instant_hook = function(name, type) {
+ return elgg.is_in_object_array(elgg.config.instant_hooks, name, type);
+};
+
+/**
+ * Records that a hook has been triggered.
+ *
+ * @param {String} name The hook name.
+ * @param {String} type The hook type.
+ */
+elgg.set_triggered_hook = function(name, type) {
+ return elgg.push_to_object_array(elgg.config.triggered_hooks, name, type);
+};
+
+/**
+ * Has this hook been triggered yet?
+ *
+ * @param {String} name The hook name.
+ * @param {String} type The hook type.
+ */
+elgg.is_triggered_hook = function(name, type) {
+ return elgg.is_in_object_array(elgg.config.triggered_hooks, name, type);
+};
+
+elgg.register_instant_hook('init', 'system');
+elgg.register_instant_hook('ready', 'system');
+elgg.register_instant_hook('boot', 'system');
diff --git a/js/lib/languages.js b/js/lib/languages.js
new file mode 100644
index 000000000..99a1ba0ee
--- /dev/null
+++ b/js/lib/languages.js
@@ -0,0 +1,98 @@
+/*globals vsprintf*/
+/**
+ * Provides language-related functionality
+ */
+elgg.provide('elgg.config.translations');
+
+// default language - required by unit tests
+elgg.config.language = 'en';
+
+/**
+ * Analagous to the php version. Merges translations for a
+ * given language into the current translations map.
+ */
+elgg.add_translation = function(lang, translations) {
+ elgg.provide('elgg.config.translations.' + lang);
+
+ elgg.extend(elgg.config.translations[lang], translations);
+};
+
+/**
+ * Load the translations for the given language.
+ *
+ * If no language is specified, the default language is used.
+ * @param {string} language
+ * @return {XMLHttpRequest}
+ */
+elgg.reload_all_translations = function(language) {
+ var lang = language || elgg.get_language();
+
+ var url, options;
+ if (elgg.config.simplecache_enabled) {
+ url = 'cache/js/default/languages/' + lang + '.' + elgg.config.lastcache + '.js';
+ options = {};
+ } else {
+ url = 'ajax/view/js/languages';
+ options = {data: {language: lang}};
+ }
+
+ options['success'] = function(json) {
+ elgg.add_translation(lang, json);
+ elgg.config.languageReady = true;
+ elgg.initWhenReady();
+ };
+
+ elgg.getJSON(url, options);
+};
+
+/**
+ * Get the current language
+ * @return {String}
+ */
+elgg.get_language = function() {
+ var user = elgg.get_logged_in_user_entity();
+
+ if (user && user.language) {
+ return user.language;
+ }
+
+ return elgg.config.language;
+};
+
+/**
+ * Translates a string
+ *
+ * @param {String} key The string to translate
+ * @param {Array} argv vsprintf support
+ * @param {String} language The language to display it in
+ *
+ * @return {String} The translation
+ */
+elgg.echo = function(key, argv, language) {
+ //elgg.echo('str', 'en')
+ if (elgg.isString(argv)) {
+ language = argv;
+ argv = [];
+ }
+
+ //elgg.echo('str', [...], 'en')
+ var translations = elgg.config.translations,
+ dlang = elgg.get_language(),
+ map;
+
+ language = language || dlang;
+ argv = argv || [];
+
+ map = translations[language] || translations[dlang];
+ if (map && map[key]) {
+ return vsprintf(map[key], argv);
+ }
+
+ return key;
+};
+
+elgg.config.translations.init = function() {
+ elgg.reload_all_translations();
+};
+
+elgg.register_hook_handler('boot', 'system', elgg.config.translations.init); \ No newline at end of file
diff --git a/js/lib/pageowner.js b/js/lib/pageowner.js
new file mode 100644
index 000000000..c695c41c3
--- /dev/null
+++ b/js/lib/pageowner.js
@@ -0,0 +1,18 @@
+/**
+ * Provides page owner and context functions
+ *
+ * @todo This is a stub. Page owners can't be fully implemented until
+ * the 4 types are finished.
+ */
+
+/**
+ * @return {number} The GUID of the page owner entity or 0 for no owner
+ */
+elgg.get_page_owner_guid = function() {
+ if (elgg.page_owner !== undefined) {
+ return elgg.page_owner.guid;
+ } else {
+ return 0;
+ }
+};
+
diff --git a/js/lib/prototypes.js b/js/lib/prototypes.js
new file mode 100644
index 000000000..cb6184097
--- /dev/null
+++ b/js/lib/prototypes.js
@@ -0,0 +1,66 @@
+/**
+ * Interates through each element of an array and calls a callback function.
+ * The callback should accept the following arguments:
+ * element - The current element
+ * index - The current index
+ *
+ * This is different to Array.forEach in that if the callback returns false, the loop returns
+ * immediately without processing the remaining elements.
+ *
+ * @param {Function} callback
+ * @return {Bool}
+ */
+if (!Array.prototype.every) {
+ Array.prototype.every = function(callback) {
+ var len = this.length, i;
+
+ for (i = 0; i < len; i++) {
+ if (i in this && !callback.call(null, this[i], i)) {
+ return false;
+ }
+ }
+
+ return true;
+ };
+}
+
+/**
+ * Interates through each element of an array and calls callback a function.
+ * The callback should accept the following arguments:
+ * element - The current element
+ * index - The current index
+ *
+ * This is different to Array.every in that the callback's return value is ignored and every
+ * element of the array will be parsed.
+ *
+ * @param {Function} callback
+ * @return {Void}
+ */
+if (!Array.prototype.forEach) {
+ Array.prototype.forEach = function(callback) {
+ var len = this.length, i;
+
+ for (i = 0; i < len; i++) {
+ if (i in this) {
+ callback.call(null, this[i], i);
+ }
+ }
+ };
+}
+
+/**
+ * Left trim
+ *
+ * Removes a character from the left side of a string.
+ * @param {String} str The character to remove
+ * @return {String}
+ */
+if (!String.prototype.ltrim) {
+ String.prototype.ltrim = function(str) {
+ if (this.indexOf(str) === 0) {
+ return this.substring(str.length);
+ } else {
+ return this;
+ }
+ };
+} \ No newline at end of file
diff --git a/js/lib/security.js b/js/lib/security.js
new file mode 100644
index 000000000..61aa1cfcd
--- /dev/null
+++ b/js/lib/security.js
@@ -0,0 +1,120 @@
+/**
+ * Hold security-related data here
+ */
+elgg.provide('elgg.security');
+
+elgg.security.token = {};
+
+elgg.security.tokenRefreshFailed = false;
+
+/**
+ * Sets the currently active security token and updates all forms and links on the current page.
+ *
+ * @param {Object} json The json representation of a token containing __elgg_ts and __elgg_token
+ * @return {Void}
+ */
+elgg.security.setToken = function(json) {
+ //update the convenience object
+ elgg.security.token = json;
+
+ //also update all forms
+ $('[name=__elgg_ts]').val(json.__elgg_ts);
+ $('[name=__elgg_token]').val(json.__elgg_token);
+
+ // also update all links that contain tokens and time stamps
+ $('[href*="__elgg_ts"][href*="__elgg_token"]').each(function() {
+ this.href = this.href
+ .replace(/__elgg_ts=\d*/, '__elgg_ts=' + json.__elgg_ts)
+ .replace(/__elgg_token=[0-9a-f]*/, '__elgg_token=' + json.__elgg_token);
+ });
+};
+
+/**
+ * Security tokens time out, so lets refresh those every so often.
+ *
+ * @todo handle error and bad return data
+ */
+elgg.security.refreshToken = function() {
+ elgg.action('security/refreshtoken', function(data) {
+
+ // @todo might want to move this to setToken() once http://trac.elgg.org/ticket/3127
+ // is implemented. It's here right now to avoid soggy code.
+ if (!data || !(data.output.__elgg_ts && data.output.__elgg_token)) {
+ elgg.register_error(elgg.echo('js:security:token_refresh_failed', [elgg.get_site_url()]));
+ elgg.security.tokenRefreshFailed = true;
+
+ // don't setToken because we refresh every 5 minutes and tokens are good for 1
+ // hour by default
+ return;
+ }
+
+ // if had problems last time, let them know it's working now
+ if (elgg.security.tokenRefreshFailed) {
+ elgg.system_message(elgg.echo('js:security:token_refreshed', [elgg.get_site_url()]));
+ elgg.security.tokenRefreshFailed = false;
+ }
+
+ elgg.security.setToken(data.output);
+ });
+};
+
+
+/**
+ * Add elgg action tokens to an object, URL, or query string (with a ?).
+ *
+ * @param {Object|string} data
+ * @return {Object} The new data object including action tokens
+ * @private
+ */
+elgg.security.addToken = function(data) {
+
+ // 'http://example.com?data=sofar'
+ if (elgg.isString(data)) {
+ // is this a full URL, relative URL, or just the query string?
+ var parts = elgg.parse_url(data),
+ args = {},
+ base = '';
+
+ if (parts['host'] == undefined) {
+ if (data.indexOf('?') === 0) {
+ // query string
+ base = '?';
+ args = elgg.parse_str(parts['query']);
+ }
+ } else {
+ // full or relative URL
+
+ if (parts['query'] != undefined) {
+ // with query string
+ args = elgg.parse_str(parts['query']);
+ }
+ var split = data.split('?');
+ base = split[0] + '?';
+ }
+ args["__elgg_ts"] = elgg.security.token.__elgg_ts;
+ args["__elgg_token"] = elgg.security.token.__elgg_token;
+
+ return base + jQuery.param(args);
+ }
+
+ // no input! acts like a getter
+ if (elgg.isUndefined(data)) {
+ return elgg.security.token;
+ }
+
+ // {...}
+ if (elgg.isPlainObject(data)) {
+ return elgg.extend(data, elgg.security.token);
+ }
+
+ // oops, don't recognize that!
+ throw new TypeError("elgg.security.addToken not implemented for " + (typeof data) + "s");
+};
+
+elgg.security.init = function() {
+ //refresh security token every 5 minutes
+ //this is set in the js/elgg PHP view.
+ setInterval(elgg.security.refreshToken, elgg.security.interval);
+};
+
+elgg.register_hook_handler('boot', 'system', elgg.security.init); \ No newline at end of file
diff --git a/js/lib/session.js b/js/lib/session.js
new file mode 100644
index 000000000..fa3d60aa9
--- /dev/null
+++ b/js/lib/session.js
@@ -0,0 +1,125 @@
+/**
+ * Provides session methods.
+ */
+elgg.provide('elgg.session');
+
+/**
+ * Helper function for setting cookies
+ * @param {string} name
+ * @param {string} value
+ * @param {Object} options
+ *
+ * {number|Date} options[expires]
+ * {string} options[path]
+ * {string} options[domain]
+ * {boolean} options[secure]
+ *
+ * @return {string} The value of the cookie, if only name is specified
+ */
+elgg.session.cookie = function (name, value, options) {
+ var cookies = [], cookie = [], i = 0, date, valid = true;
+
+ //elgg.session.cookie()
+ if (elgg.isUndefined(name)) {
+ return document.cookie;
+ }
+
+ //elgg.session.cookie(name)
+ if (elgg.isUndefined(value)) {
+ if (document.cookie && document.cookie !== '') {
+ cookies = document.cookie.split(';');
+ for (i = 0; i < cookies.length; i += 1) {
+ cookie = jQuery.trim(cookies[i]).split('=');
+ if (cookie[0] === name) {
+ return decodeURIComponent(cookie[1]);
+ }
+ }
+ }
+ return undefined;
+ }
+
+ // elgg.session.cookie(name, value[, opts])
+ options = options || {};
+
+ if (elgg.isNull(value)) {
+ value = '';
+ options.expires = -1;
+ }
+
+ cookies.push(name + '=' + value);
+
+ if (elgg.isNumber(options.expires)) {
+ if (elgg.isNumber(options.expires)) {
+ date = new Date();
+ date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
+ } else if (options.expires.toUTCString) {
+ date = options.expires;
+ } else {
+ valid = false;
+ }
+
+ if (valid) {
+ cookies.push('expires=' + date.toUTCString());
+ }
+ }
+
+ // CAUTION: Needed to parenthesize options.path and options.domain
+ // in the following expressions, otherwise they evaluate to undefined
+ // in the packed version for some reason.
+ if (options.path) {
+ cookies.push('path=' + (options.path));
+ }
+
+ if (options.domain) {
+ cookies.push('domain=' + (options.domain));
+ }
+
+ if (options.secure) {
+ cookies.push('secure');
+ }
+
+ document.cookie = cookies.join('; ');
+};
+
+/**
+ * Returns the object of the user logged in.
+ *
+ * @return {ElggUser} The logged in user
+ */
+elgg.get_logged_in_user_entity = function() {
+ return elgg.session.user;
+};
+
+/**
+ * Returns the GUID of the logged in user or 0.
+ *
+ * @return {number} The GUID of the logged in user
+ */
+elgg.get_logged_in_user_guid = function() {
+ var user = elgg.get_logged_in_user_entity();
+ return user ? user.guid : 0;
+};
+
+/**
+ * Returns if a user is logged in.
+ *
+ * @return {boolean} Whether there is a user logged in
+ */
+elgg.is_logged_in = function() {
+ return (elgg.get_logged_in_user_entity() instanceof elgg.ElggUser);
+};
+
+/**
+ * Returns if the currently logged in user is an admin.
+ *
+ * @return {boolean} Whether there is an admin logged in
+ */
+elgg.is_admin_logged_in = function() {
+ var user = elgg.get_logged_in_user_entity();
+ return (user instanceof elgg.ElggUser) && user.isAdmin();
+};
+
+/**
+ * @deprecated Use elgg.session.cookie instead
+ */
+jQuery.cookie = elgg.session.cookie; \ No newline at end of file
diff --git a/js/lib/ui.autocomplete.js b/js/lib/ui.autocomplete.js
new file mode 100644
index 000000000..46d72d146
--- /dev/null
+++ b/js/lib/ui.autocomplete.js
@@ -0,0 +1,14 @@
+/**
+ *
+ */
+elgg.provide('elgg.autocomplete');
+
+elgg.autocomplete.init = function() {
+ $('.elgg-input-autocomplete').autocomplete({
+ source: elgg.autocomplete.url, //gets set by input/autocomplete view
+ minLength: 2,
+ html: "html"
+ })
+};
+
+elgg.register_hook_handler('init', 'system', elgg.autocomplete.init); \ No newline at end of file
diff --git a/js/lib/ui.avatar_cropper.js b/js/lib/ui.avatar_cropper.js
new file mode 100644
index 000000000..fc32a0832
--- /dev/null
+++ b/js/lib/ui.avatar_cropper.js
@@ -0,0 +1,76 @@
+/**
+ * Avatar cropping
+ */
+
+elgg.provide('elgg.avatarCropper');
+
+/**
+ * Register the avatar cropper.
+ *
+ * If the hidden inputs have the coordinates from a previous cropping, begin
+ * the selection and preview with that displayed.
+ */
+elgg.avatarCropper.init = function() {
+ var params = {
+ selectionOpacity: 0,
+ aspectRatio: '1:1',
+ onSelectEnd: elgg.avatarCropper.selectChange,
+ onSelectChange: elgg.avatarCropper.preview
+ };
+
+ if ($('input[name=x2]').val()) {
+ params.x1 = $('input[name=x1]').val();
+ params.x2 = $('input[name=x2]').val();
+ params.y1 = $('input[name=y1]').val();
+ params.y2 = $('input[name=y2]').val();
+ }
+
+ $('#user-avatar-cropper').imgAreaSelect(params);
+
+ if ($('input[name=x2]').val()) {
+ var ias = $('#user-avatar-cropper').imgAreaSelect({instance: true});
+ var selection = ias.getSelection();
+ elgg.avatarCropper.preview($('#user-avatar-cropper'), selection);
+ }
+};
+
+/**
+ * Handler for changing select area.
+ *
+ * @param {Object} reference to the image
+ * @param {Object} imgareaselect selection object
+ * @return void
+ */
+elgg.avatarCropper.preview = function(img, selection) {
+ // catch for the first click on the image
+ if (selection.width == 0 || selection.height == 0) {
+ return;
+ }
+
+ var origWidth = $("#user-avatar-cropper").width();
+ var origHeight = $("#user-avatar-cropper").height();
+ var scaleX = 100 / selection.width;
+ var scaleY = 100 / selection.height;
+ $('#user-avatar-preview > img').css({
+ width: Math.round(scaleX * origWidth) + 'px',
+ height: Math.round(scaleY * origHeight) + 'px',
+ marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px',
+ marginTop: '-' + Math.round(scaleY * selection.y1) + 'px'
+ });
+};
+
+/**
+ * Handler for updating the form inputs after select ends
+ *
+ * @param {Object} reference to the image
+ * @param {Object} imgareaselect selection object
+ * @return void
+ */
+elgg.avatarCropper.selectChange = function(img, selection) {
+ $('input[name=x1]').val(selection.x1);
+ $('input[name=x2]').val(selection.x2);
+ $('input[name=y1]').val(selection.y1);
+ $('input[name=y2]').val(selection.y2);
+};
+
+elgg.register_hook_handler('init', 'system', elgg.avatarCropper.init); \ No newline at end of file
diff --git a/js/lib/ui.friends_picker.js b/js/lib/ui.friends_picker.js
new file mode 100644
index 000000000..9257c40fc
--- /dev/null
+++ b/js/lib/ui.friends_picker.js
@@ -0,0 +1,91 @@
+/*
+ elgg friendsPicker plugin
+ adapted from Niall Doherty's excellent Coda-Slider - http://www.ndoherty.com/coda-slider
+ */
+
+
+jQuery.fn.friendsPicker = function(iterator) {
+
+ var settings;
+ settings = $.extend({ easeFunc: "easeOutExpo", easeTime: 1000, toolTip: false }, settings);
+
+ return this.each(function() {
+
+ var container = $(this);
+ container.addClass("friends-picker");
+ // set panelwidth manually as it's hidden initially - adjust this value for different themes/pagewidths
+ var panelWidth = 730;
+
+ // count the panels in the container
+ var panelCount = container.find("div.panel").size();
+ // calculate the width of all the panels lined up end-to-end
+ var friendsPicker_containerWidth = panelWidth*panelCount;
+ // specify width for the friendsPicker_container
+ container.find("div.friends-picker-container").css("width" , friendsPicker_containerWidth);
+
+ // global variables for container.each function below
+ var friendsPickerNavigationWidth = 0;
+ var currentPanel = 1;
+
+ // generate appropriate nav for each container
+ container.each(function(i) {
+ // generate Left and Right arrows
+ $(this).before("<div class='friends-picker-navigation-l' id='friends-picker-navigation-l" + iterator + "'><a href='#'>Left</a><\/div>");
+ $(this).after("<div class='friends-picker-navigation-r' id='friends-picker-navigation-r" + iterator + "'><a href='#'>Right</a><\/div>");
+
+ // generate a-z tabs
+ $(this).before("<div class='friends-picker-navigation' id='friends-picker-navigation" + iterator + "'><ul><\/ul><\/div>");
+ $(this).find("div.panel").each(function(individualTabItemNumber) {
+ $("div#friends-picker-navigation" + iterator + " ul").append("<li class='tab" + (individualTabItemNumber+1) + "'><a href='#" + (individualTabItemNumber+1) + "'>" + $(this).attr("title") + "<\/a><\/li>");
+ });
+
+ // tabs navigation
+ $("div#friends-picker-navigation" + iterator + " a").each(function(individualTabItemNumber) {
+ // calc friendsPickerNavigationWidth by summing width of each li
+ friendsPickerNavigationWidth += $(this).parent().width();
+ // set-up individual tab clicks
+ $(this).bind("click", function() {
+ $(this).addClass("current").parent().parent().find("a").not($(this)).removeClass("current");
+ var distanceToMoveFriendsPicker_container = - (panelWidth*individualTabItemNumber);
+ currentPanel = individualTabItemNumber + 1;
+ $(this).parent().parent().parent().next().find("div.friends-picker-container").animate({ left: distanceToMoveFriendsPicker_container}, settings.easeTime, settings.easeFunc);
+ });
+ });
+
+ // Right arow click function
+ $("div#friends-picker-navigation-r" + iterator + " a").click(function() {
+ if (currentPanel == panelCount) {
+ var distanceToMoveFriendsPicker_container = 0;
+ currentPanel = 1;
+ $(this).parent().parent().find("div.friends-picker-navigation a.current").removeClass("current").parent().parent().find("a:eq(0)").addClass("current");
+ } else {
+ var distanceToMoveFriendsPicker_container = - (panelWidth*currentPanel);
+ currentPanel += 1;
+ $(this).parent().parent().find("div.friends-picker-navigation a.current").removeClass("current").parent().next().find("a").addClass("current");
+ };
+ $(this).parent().parent().find("div.friends-picker-container").animate({ left: distanceToMoveFriendsPicker_container}, settings.easeTime, settings.easeFunc);
+ return false;
+ });
+
+ // Left arrow click function
+ $("div#friends-picker-navigation-l" + iterator + " a").click(function() {
+ if (currentPanel == 1) {
+ var distanceToMoveFriendsPicker_container = - (panelWidth*(panelCount - 1));
+ currentPanel = panelCount;
+ $(this).parent().parent().find("div.friends-picker-navigation a.current").removeClass("current").parent().parent().find("li:last a").addClass("current");
+ } else {
+ currentPanel -= 1;
+ var distanceToMoveFriendsPicker_container = - (panelWidth*(currentPanel - 1));
+ $(this).parent().parent().find("div.friends-picker-navigation a.current").removeClass("current").parent().prev().find("a").addClass("current");
+ };
+ $(this).parent().parent().find("div.friends-picker-container").animate({ left: distanceToMoveFriendsPicker_container}, settings.easeTime, settings.easeFunc);
+ return false;
+ });
+
+ // apply 'current' class to currently selected tab link
+ $("div#friends-picker-navigation" + iterator + " a:eq(0)").addClass("current");
+ });
+
+ $("div#friends-picker-navigation" + iterator).append("<br />");
+ });
+}; \ No newline at end of file
diff --git a/js/lib/ui.js b/js/lib/ui.js
new file mode 100644
index 000000000..413078b4f
--- /dev/null
+++ b/js/lib/ui.js
@@ -0,0 +1,293 @@
+elgg.provide('elgg.ui');
+
+elgg.ui.init = function () {
+ // add user hover menus
+ elgg.ui.initHoverMenu();
+
+ //if the user clicks a system message, make it disappear
+ $('.elgg-system-messages li').live('click', function() {
+ $(this).stop().fadeOut('fast');
+ });
+
+ $('.elgg-system-messages li').animate({opacity: 0.9}, 6000);
+ $('.elgg-system-messages li.elgg-state-success').fadeOut('slow');
+
+ $('[rel=toggle]').live('click', elgg.ui.toggles);
+
+ $('[rel=popup]').live('click', elgg.ui.popupOpen);
+
+ $('.elgg-menu-page .elgg-menu-parent').live('click', elgg.ui.toggleMenu);
+
+ $('.elgg-requires-confirmation').live('click', elgg.ui.requiresConfirmation);
+
+ $('.elgg-autofocus').focus();
+};
+
+/**
+ * Toggles an element based on clicking a separate element
+ *
+ * Use rel="toggle" on the toggler element
+ * Set the href to target the item you want to toggle (<a rel="toggle" href="#id-of-target">)
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.ui.toggles = function(event) {
+ event.preventDefault();
+
+ // @todo might want to switch this to elgg.getSelectorFromUrlFragment().
+ var target = $(this).toggleClass('elgg-state-active').attr('href');
+
+ $(target).slideToggle('medium');
+};
+
+/**
+ * Pops up an element based on clicking a separate element
+ *
+ * Set the rel="popup" on the popper and set the href to target the
+ * item you want to toggle (<a rel="popup" href="#id-of-target">)
+ *
+ * This function emits the getOptions, ui.popup hook that plugins can register for to provide custom
+ * positioning for elements. The handler is passed the following params:
+ * targetSelector: The selector used to find the popup
+ * target: The popup jQuery element as found by the selector
+ * source: The jquery element whose click event initiated a popup.
+ *
+ * The return value of the function is used as the options object to .position().
+ * Handles can also return false to abort the default behvior and override it with their own.
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.ui.popupOpen = function(event) {
+ event.preventDefault();
+ event.stopPropagation();
+
+ var target = elgg.getSelectorFromUrlFragment($(this).toggleClass('elgg-state-active').attr('href'));
+ var $target = $(target);
+
+ // emit a hook to allow plugins to position and control popups
+ var params = {
+ targetSelector: target,
+ target: $target,
+ source: $(this)
+ };
+
+ var options = {
+ my: 'center top',
+ at: 'center bottom',
+ of: $(this),
+ collision: 'fit fit'
+ }
+
+ options = elgg.trigger_hook('getOptions', 'ui.popup', params, options);
+
+ // allow plugins to cancel event
+ if (!options) {
+ return;
+ }
+
+ // hide if already open
+ if ($target.is(':visible')) {
+ $target.fadeOut();
+ $('body').die('click', elgg.ui.popupClose);
+ return;
+ }
+
+ $target.appendTo('body')
+ .fadeIn()
+ .position(options);
+
+ $('body')
+ .die('click', elgg.ui.popupClose)
+ .live('click', elgg.ui.popupClose);
+};
+
+/**
+ * Catches clicks that aren't in a popup and closes all popups.
+ */
+elgg.ui.popupClose = function(event) {
+ $eventTarget = $(event.target);
+ var inTarget = false;
+ var $popups = $('[rel=popup]');
+
+ // if the click event target isn't in a popup target, fade all of them out.
+ $popups.each(function(i, e) {
+ var target = elgg.getSelectorFromUrlFragment($(e).attr('href')) + ':visible';
+ var $target = $(target);
+
+ if (!$target.is(':visible')) {
+ return;
+ }
+
+ // didn't click inside the target
+ if ($eventTarget.closest(target).length > 0) {
+ inTarget = true;
+ return false;
+ }
+ });
+
+ if (!inTarget) {
+ $popups.each(function(i, e) {
+ var $e = $(e);
+ var $target = $(elgg.getSelectorFromUrlFragment($e.attr('href')) + ':visible');
+ if ($target.length > 0) {
+ $target.fadeOut();
+ $e.removeClass('elgg-state-active');
+ }
+ });
+
+ $('body').die('click', elgg.ui.popClose);
+ }
+};
+
+/**
+ * Toggles a child menu when the parent is clicked
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.ui.toggleMenu = function(event) {
+ $(this).siblings().slideToggle('medium');
+ $(this).toggleClass('elgg-menu-closed elgg-menu-opened');
+ event.preventDefault();
+};
+
+/**
+ * Initialize the hover menu
+ *
+ * @param {Object} parent
+ * @return void
+ */
+elgg.ui.initHoverMenu = function(parent) {
+ if (!parent) {
+ parent = document;
+ }
+
+ // avatar image menu link
+ $(parent).find(".elgg-avatar").live('mouseover', function() {
+ $(this).children(".elgg-icon-hover-menu").show();
+ })
+ .live('mouseout', function() {
+ $(this).children(".elgg-icon-hover-menu").hide();
+ });
+
+
+ // avatar contextual menu
+ $(".elgg-avatar > .elgg-icon-hover-menu").live('click', function(e) {
+ // check if we've attached the menu to this element already
+ var $hovermenu = $(this).data('hovermenu') || null;
+
+ if (!$hovermenu) {
+ $hovermenu = $(this).parent().find(".elgg-menu-hover");
+ $(this).data('hovermenu', $hovermenu);
+ }
+
+ // close hovermenu if arrow is clicked & menu already open
+ if ($hovermenu.css('display') == "block") {
+ $hovermenu.fadeOut();
+ } else {
+ $avatar = $(this).closest(".elgg-avatar");
+
+ // @todo Use jQuery-ui position library instead -- much simpler
+ var offset = $avatar.offset();
+ var top = $avatar.height() + offset.top + 'px';
+ var left = $avatar.width() - 15 + offset.left + 'px';
+
+ $hovermenu.appendTo('body')
+ .css('position', 'absolute')
+ .css("top", top)
+ .css("left", left)
+ .fadeIn('normal');
+ }
+
+ // hide any other open hover menus
+ $(".elgg-menu-hover:visible").not($hovermenu).fadeOut();
+ });
+
+ // hide avatar menu when user clicks elsewhere
+ $(document).click(function(event) {
+ if ($(event.target).parents(".elgg-avatar").length == 0) {
+ $(".elgg-menu-hover").fadeOut();
+ }
+ });
+};
+
+/**
+ * Calls a confirm() and prevents default if denied.
+ *
+ * @param {Object} e
+ * @return void
+ */
+elgg.ui.requiresConfirmation = function(e) {
+ var confirmText = $(this).attr('rel') || elgg.echo('question:areyousure');
+ if (!confirm(confirmText)) {
+ e.preventDefault();
+ }
+};
+
+/**
+ * Repositions the login popup
+ *
+ * @param {String} hook 'getOptions'
+ * @param {String} type 'ui.popup'
+ * @param {Object} params An array of info about the target and source.
+ * @param {Object} options Options to pass to
+ *
+ * @return {Object}
+ */
+elgg.ui.loginHandler = function(hook, type, params, options) {
+ if (params.target.attr('id') == 'login-dropdown-box') {
+ options.my = 'right top';
+ options.at = 'right bottom';
+ return options;
+ }
+ return null;
+};
+
+/**
+ * Initialize the date picker
+ *
+ * Uses the class .elgg-input-date as the selector.
+ *
+ * If the class .elgg-input-timestamp is set on the input element, the onSelect
+ * method converts the date text to a unix timestamp in seconds. That value is
+ * stored in a hidden element indicated by the id on the input field.
+ *
+ * @return void
+ */
+elgg.ui.initDatePicker = function() {
+ var loadDatePicker = function() {
+ $('.elgg-input-date').datepicker({
+ // ISO-8601
+ dateFormat: 'yy-mm-dd',
+ onSelect: function(dateText) {
+ if ($(this).is('.elgg-input-timestamp')) {
+ // convert to unix timestamp
+ var dateParts = dateText.split("-");
+ var timestamp = Date.UTC(dateParts[0], dateParts[1] - 1, dateParts[2]);
+ timestamp = timestamp / 1000;
+
+ var id = $(this).attr('id');
+ $('input[name="' + id + '"]').val(timestamp);
+ }
+ }
+ });
+ };
+
+ if ($('.elgg-input-date').length && elgg.get_language() == 'en') {
+ loadDatePicker();
+ } else if ($('.elgg-input-date').length) {
+ elgg.get({
+ url: elgg.config.wwwroot + 'vendors/jquery/i18n/jquery.ui.datepicker-'+ elgg.get_language() +'.js',
+ dataType: "script",
+ cache: true,
+ success: loadDatePicker,
+ error: loadDatePicker // english language is already loaded.
+ });
+ }
+};
+
+elgg.register_hook_handler('init', 'system', elgg.ui.init);
+elgg.register_hook_handler('init', 'system', elgg.ui.initDatePicker);
+elgg.register_hook_handler('getOptions', 'ui.popup', elgg.ui.loginHandler);
diff --git a/js/lib/ui.river.js b/js/lib/ui.river.js
new file mode 100644
index 000000000..a56a664a4
--- /dev/null
+++ b/js/lib/ui.river.js
@@ -0,0 +1,14 @@
+elgg.provide('elgg.ui.river');
+
+elgg.ui.river.init = function() {
+ $('#elgg-river-selector').change(function() {
+ var url = window.location.href;
+ if (window.location.search.length) {
+ url = url.substring(0, url.indexOf('?'));
+ }
+ url += '?' + $(this).val();
+ elgg.forward(url);
+ });
+};
+
+elgg.register_hook_handler('init', 'system', elgg.ui.river.init); \ No newline at end of file
diff --git a/js/lib/ui.userpicker.js b/js/lib/ui.userpicker.js
new file mode 100644
index 000000000..7298da114
--- /dev/null
+++ b/js/lib/ui.userpicker.js
@@ -0,0 +1,117 @@
+elgg.provide('elgg.userpicker');
+
+/**
+ * Userpicker initialization
+ *
+ * The userpicker is an autocomplete library for selecting multiple users or
+ * friends. It works in concert with the view input/userpicker.
+ *
+ * @return void
+ */
+elgg.userpicker.init = function() {
+
+ // binding autocomplete.
+ // doing this as an each so we can pass this to functions.
+ $('.elgg-input-user-picker').each(function() {
+
+ $(this).autocomplete({
+ source: function(request, response) {
+
+ var params = elgg.userpicker.getSearchParams(this);
+
+ elgg.get('livesearch', {
+ data: params,
+ dataType: 'json',
+ success: function(data) {
+ response(data);
+ }
+ });
+ },
+ minLength: 2,
+ html: "html",
+ select: elgg.userpicker.addUser
+ })
+ });
+
+ $('.elgg-userpicker-remove').live('click', elgg.userpicker.removeUser);
+};
+
+/**
+ * Adds a user to the select user list
+ *
+ * elgg.userpicker.userList is defined in the input/userpicker view
+ *
+ * @param {Object} event
+ * @param {Object} ui The object returned by the autocomplete endpoint
+ * @return void
+ */
+elgg.userpicker.addUser = function(event, ui) {
+ var info = ui.item;
+
+ // do not allow users to be added multiple times
+ if (!(info.guid in elgg.userpicker.userList)) {
+ elgg.userpicker.userList[info.guid] = true;
+ var users = $(this).siblings('.elgg-user-picker-list');
+ var li = '<input type="hidden" name="members[]" value="' + info.guid + '" />';
+ li += elgg.userpicker.viewUser(info);
+ $('<li>').html(li).appendTo(users);
+ }
+
+ $(this).val('');
+ event.preventDefault();
+};
+
+/**
+ * Remove a user from the selected user list
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.userpicker.removeUser = function(event) {
+ var item = $(this).closest('.elgg-user-picker-list > li');
+
+ var guid = item.find('[name="members[]"]').val();
+ delete elgg.userpicker.userList[guid];
+
+ item.remove();
+ event.preventDefault();
+};
+
+/**
+ * Render the list item for insertion into the selected user list
+ *
+ * The html in this method has to remain synced with the input/userpicker view
+ *
+ * @param {Object} info The object returned by the autocomplete endpoint
+ * @return string
+ */
+elgg.userpicker.viewUser = function(info) {
+
+ var deleteLink = "<a href='#' class='elgg-userpicker-remove'>X</a>";
+
+ var html = "<div class='elgg-image-block'>";
+ html += "<div class='elgg-image'>" + info.icon + "</div>";
+ html += "<div class='elgg-image-alt'>" + deleteLink + "</div>";
+ html += "<div class='elgg-body'>" + info.name + "</div>";
+ html += "</div>";
+
+ return html;
+};
+
+/**
+ * Get the parameters to use for autocomplete
+ *
+ * This grabs the value of the friends checkbox.
+ *
+ * @param {Object} obj Object for the autocomplete callback
+ * @return Object
+ */
+elgg.userpicker.getSearchParams = function(obj) {
+ if (obj.element.siblings('[name=match_on]').attr('checked')) {
+ return {'match_on[]': 'friends', 'term' : obj.term};
+ } else {
+ return {'match_on[]': 'users', 'term' : obj.term};
+ }
+};
+
+elgg.register_hook_handler('init', 'system', elgg.userpicker.init); \ No newline at end of file
diff --git a/js/lib/ui.widgets.js b/js/lib/ui.widgets.js
new file mode 100644
index 000000000..26020bb4b
--- /dev/null
+++ b/js/lib/ui.widgets.js
@@ -0,0 +1,209 @@
+elgg.provide('elgg.ui.widgets');
+
+/**
+ * Widgets initialization
+ *
+ * @return void
+ */
+elgg.ui.widgets.init = function() {
+
+ // widget layout?
+ if ($(".elgg-widgets").length == 0) {
+ return;
+ }
+
+ $(".elgg-widgets").sortable({
+ items: 'div.elgg-module-widget.elgg-state-draggable',
+ connectWith: '.elgg-widgets',
+ handle: '.elgg-widget-handle',
+ forcePlaceholderSize: true,
+ placeholder: 'elgg-widget-placeholder',
+ opacity: 0.8,
+ revert: 500,
+ stop: elgg.ui.widgets.move
+ });
+
+ $('.elgg-widgets-add-panel li.elgg-state-available').click(elgg.ui.widgets.add);
+
+ $('a.elgg-widget-delete-button').live('click', elgg.ui.widgets.remove);
+ $('.elgg-widget-edit > form ').live('submit', elgg.ui.widgets.saveSettings);
+ $('a.elgg-widget-collapse-button').live('click', elgg.ui.widgets.collapseToggle);
+
+ elgg.ui.widgets.setMinHeight(".elgg-widgets");
+};
+
+/**
+ * Adds a new widget
+ *
+ * Makes Ajax call to persist new widget and inserts the widget html
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.ui.widgets.add = function(event) {
+ // elgg-widget-type-<type>
+ var type = $(this).attr('id');
+ type = type.substr(type.indexOf('elgg-widget-type-') + "elgg-widget-type-".length);
+
+ // if multiple instances not allow, disable this widget type add button
+ var multiple = $(this).attr('class').indexOf('elgg-widget-multiple') != -1;
+ if (multiple == false) {
+ $(this).addClass('elgg-state-unavailable');
+ $(this).removeClass('elgg-state-available');
+ $(this).unbind('click', elgg.ui.widgets.add);
+ }
+
+ elgg.action('widgets/add', {
+ data: {
+ handler: type,
+ owner_guid: elgg.get_page_owner_guid(),
+ context: $("input[name='widget_context']").val(),
+ show_access: $("input[name='show_access']").val(),
+ default_widgets: $("input[name='default_widgets']").val() || 0
+ },
+ success: function(json) {
+ $('#elgg-widget-col-1').prepend(json.output);
+ }
+ });
+ event.preventDefault();
+};
+
+/**
+ * Persist the widget's new position
+ *
+ * @param {Object} event
+ * @param {Object} ui
+ *
+ * @return void
+ */
+elgg.ui.widgets.move = function(event, ui) {
+
+ // elgg-widget-<guid>
+ var guidString = ui.item.attr('id');
+ guidString = guidString.substr(guidString.indexOf('elgg-widget-') + "elgg-widget-".length);
+
+ // elgg-widget-col-<column>
+ var col = ui.item.parent().attr('id');
+ col = col.substr(col.indexOf('elgg-widget-col-') + "elgg-widget-col-".length);
+
+ elgg.action('widgets/move', {
+ data: {
+ widget_guid: guidString,
+ column: col,
+ position: ui.item.index()
+ }
+ });
+
+ // @hack fixes jquery-ui/opera bug where draggable elements jump
+ ui.item.css('top', 0);
+ ui.item.css('left', 0);
+};
+
+/**
+ * Removes a widget from the layout
+ *
+ * Event callback the uses Ajax to delete the widget and removes its HTML
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.ui.widgets.remove = function(event) {
+ if (confirm(elgg.echo('deleteconfirm')) == false) {
+ event.preventDefault();
+ return;
+ }
+
+ var $widget = $(this).closest('.elgg-module-widget');
+
+ // if widget type is single instance type, enable the add buton
+ var type = $widget.attr('class');
+ // elgg-widget-instance-<type>
+ type = type.substr(type.indexOf('elgg-widget-instance-') + "elgg-widget-instance-".length);
+ $button = $('#elgg-widget-type-' + type);
+ var multiple = $button.attr('class').indexOf('elgg-widget-multiple') != -1;
+ if (multiple == false) {
+ $button.addClass('elgg-state-available');
+ $button.removeClass('elgg-state-unavailable');
+ $button.unbind('click', elgg.ui.widgets.add); // make sure we don't bind twice
+ $button.click(elgg.ui.widgets.add);
+ }
+
+ $widget.remove();
+
+ // delete the widget through ajax
+ elgg.action($(this).attr('href'));
+
+ event.preventDefault();
+};
+
+/**
+ * Toggle the collapse state of the widget
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.ui.widgets.collapseToggle = function(event) {
+ $(this).toggleClass('elgg-widget-collapsed');
+ $(this).parent().parent().find('.elgg-body').slideToggle('medium');
+ event.preventDefault();
+};
+
+/**
+ * Save a widget's settings
+ *
+ * Uses Ajax to save the settings and updates the HTML.
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.ui.widgets.saveSettings = function(event) {
+ $(this).parent().slideToggle('medium');
+ var $widgetContent = $(this).parent().parent().children('.elgg-widget-content');
+
+ // stick the ajax loader in there
+ var $loader = $('#elgg-widget-loader').clone();
+ $loader.attr('id', '#elgg-widget-active-loader');
+ $loader.removeClass('hidden');
+ $widgetContent.html($loader);
+
+ var default_widgets = $("input[name='default_widgets']").val() || 0;
+ if (default_widgets) {
+ $(this).append('<input type="hidden" name="default_widgets" value="1">');
+ }
+
+ elgg.action('widgets/save', {
+ data: $(this).serialize(),
+ success: function(json) {
+ $widgetContent.html(json.output);
+ }
+ });
+ event.preventDefault();
+};
+
+/**
+ * Set the min-height so that all widget column bottoms are the same
+ *
+ * This addresses the issue of trying to drag a widget into a column that does
+ * not have any widgets or many fewer widgets than other columns.
+ *
+ * @param {String} selector
+ * @return void
+ */
+elgg.ui.widgets.setMinHeight = function(selector) {
+ var maxBottom = 0;
+ $(selector).each(function() {
+ var bottom = parseInt($(this).offset().top + $(this).height());
+ if (bottom > maxBottom) {
+ maxBottom = bottom;
+ }
+ })
+ $(selector).each(function() {
+ var bottom = parseInt($(this).offset().top + $(this).height());
+ if (bottom < maxBottom) {
+ var newMinHeight = parseInt($(this).height() + (maxBottom - bottom));
+ $(this).css('min-height', newMinHeight + 'px');
+ }
+ })
+};
+
+elgg.register_hook_handler('init', 'system', elgg.ui.widgets.init);
diff --git a/js/tests/ElggAjaxOptionsTest.js b/js/tests/ElggAjaxOptionsTest.js
new file mode 100644
index 000000000..a6b40d439
--- /dev/null
+++ b/js/tests/ElggAjaxOptionsTest.js
@@ -0,0 +1,61 @@
+/**
+ * Tests elgg.ajax.handleOptions() with all of the possible valid inputs
+ */
+ElggAjaxOptionsTest = TestCase("ElggAjaxOptionsTest");
+
+ElggAjaxOptionsTest.prototype.testHandleOptionsAcceptsNoArgs = function() {
+ assertNotUndefined(elgg.ajax.handleOptions());
+};
+
+ElggAjaxOptionsTest.prototype.testHandleOptionsAcceptsUrl = function() {
+ var url = 'url',
+ result = elgg.ajax.handleOptions(url);
+
+ assertEquals(url, result.url);
+};
+
+ElggAjaxOptionsTest.prototype.testHandleOptionsAcceptsDataOnly = function() {
+ var options = {},
+ result = elgg.ajax.handleOptions(options);
+
+ assertEquals(options, result.data);
+};
+
+ElggAjaxOptionsTest.prototype.testHandleOptionsAcceptsOptions = function() {
+ var options = {data:{arg:1}},
+ result = elgg.ajax.handleOptions(options);
+
+ assertEquals(options, result);
+
+ function func() {}
+ options = {success: func};
+ result = elgg.ajax.handleOptions(options);
+
+ assertEquals(options, result);
+};
+
+ElggAjaxOptionsTest.prototype.testHandleOptionsAcceptsUrlThenDataOnly = function() {
+ var url = 'url',
+ options = {arg:1},
+ result = elgg.ajax.handleOptions(url, options);
+
+ assertEquals(url, result.url);
+ assertEquals(options, result.data);
+};
+
+ElggAjaxOptionsTest.prototype.testHandleOptionsAcceptsUrlThenSuccessOnly = function() {
+ var url = 'url',
+ result = elgg.ajax.handleOptions(url, elgg.nullFunction);
+
+ assertEquals(url, result.url);
+ assertEquals(elgg.nullFunction, result.success);
+};
+
+ElggAjaxOptionsTest.prototype.testHandleOptionsAcceptsUrlThenOptions = function() {
+ var url = 'url',
+ options = {data:{arg:1}},
+ result = elgg.ajax.handleOptions(url, options);
+
+ assertEquals(url, result.url);
+ assertEquals(options.data, result.data);
+}; \ No newline at end of file
diff --git a/js/tests/ElggAjaxTest.js b/js/tests/ElggAjaxTest.js
new file mode 100644
index 000000000..a683415fc
--- /dev/null
+++ b/js/tests/ElggAjaxTest.js
@@ -0,0 +1,59 @@
+/**
+ * Makes sure that each of the helper ajax functions ends up calling $.ajax
+ * with the right options.
+ */
+ElggAjaxTest = TestCase("ElggAjaxTest");
+
+ElggAjaxTest.prototype.setUp = function() {
+
+ this.wwwroot = elgg.config.wwwroot;
+ this.ajax = $.ajax;
+
+ elgg.config.wwwroot = 'http://www.elgg.org/';
+
+ $.ajax = function(options) {
+ return options;
+ };
+};
+
+ElggAjaxTest.prototype.tearDown = function() {
+ $.ajax = this.ajax;
+ elgg.config.wwwroot = this.wwwroot;
+};
+
+ElggAjaxTest.prototype.testElggAjax = function() {
+ assertEquals(elgg.config.wwwroot, elgg.ajax().url);
+};
+
+ElggAjaxTest.prototype.testElggGet = function() {
+ assertEquals('get', elgg.get().type);
+};
+
+ElggAjaxTest.prototype.testElggGetJSON = function() {
+ assertEquals('json', elgg.getJSON().dataType);
+};
+
+ElggAjaxTest.prototype.testElggPost = function() {
+ assertEquals('post', elgg.post().type);
+};
+
+ElggAjaxTest.prototype.testElggAction = function() {
+ assertException(function() { elgg.action(); });
+ assertException(function() { elgg.action({}); });
+
+ var result = elgg.action('action');
+ assertEquals('post', result.type);
+ assertEquals('json', result.dataType);
+ assertEquals(elgg.config.wwwroot + 'action/action', result.url);
+ assertEquals(elgg.security.token.__elgg_ts, result.data.__elgg_ts);
+};
+
+ElggAjaxTest.prototype.testElggAPI = function() {
+ assertException(function() { elgg.api(); });
+ assertException(function() { elgg.api({}); });
+
+ var result = elgg.api('method');
+ assertEquals('json', result.dataType);
+ assertEquals('method', result.data.method);
+ assertEquals(elgg.config.wwwroot + 'services/api/rest/json/', result.url);
+};
diff --git a/js/tests/ElggHooksTest.js b/js/tests/ElggHooksTest.js
new file mode 100644
index 000000000..e7a2440e7
--- /dev/null
+++ b/js/tests/ElggHooksTest.js
@@ -0,0 +1,28 @@
+ElggHooksTest = TestCase("ElggHooksTest");
+
+ElggHooksTest.prototype.setUp = function() {
+ elgg.config.hooks = {};
+ elgg.provide('elgg.config.hooks.all.all');
+};
+
+ElggHooksTest.prototype.testHookHandlersMustBeFunctions = function () {
+ assertException(function() { elgg.register_hook_handler('str', 'str', 'oops'); });
+};
+
+ElggHooksTest.prototype.testReturnValueDefaultsToTrue = function () {
+ assertTrue(elgg.trigger_hook('fee', 'fum'));
+
+ elgg.register_hook_handler('fee', 'fum', elgg.nullFunction);
+ assertTrue(elgg.trigger_hook('fee', 'fum'));
+};
+
+ElggHooksTest.prototype.testCanGlomHooksWithAll = function () {
+ elgg.register_hook_handler('all', 'bar', elgg.abstractMethod);
+ assertException("all,bar", function() { elgg.trigger_hook('foo', 'bar'); });
+
+ elgg.register_hook_handler('foo', 'all', elgg.abstractMethod);
+ assertException("foo,all", function() { elgg.trigger_hook('foo', 'baz'); });
+
+ elgg.register_hook_handler('all', 'all', elgg.abstractMethod);
+ assertException("all,all", function() { elgg.trigger_hook('pinky', 'winky'); });
+}; \ No newline at end of file
diff --git a/js/tests/ElggLanguagesTest.js b/js/tests/ElggLanguagesTest.js
new file mode 100644
index 000000000..9186ff5bb
--- /dev/null
+++ b/js/tests/ElggLanguagesTest.js
@@ -0,0 +1,45 @@
+ElggLanguagesTest = TestCase("ElggLanguagesTest");
+
+ElggLanguagesTest.prototype.setUp = function() {
+ this.ajax = $.ajax;
+
+ //Immediately execute some dummy "returned" javascript instead of sending
+ //an actual ajax request
+ $.ajax = function(settings) {
+ var lang = settings.data.language;
+ elgg.config.translations[lang] = {'language':lang};
+ };
+};
+
+ElggLanguagesTest.prototype.tearDown = function() {
+ $.ajax = this.ajax;
+
+ //clear translations
+ elgg.config.translations['en'] = undefined;
+ elgg.config.translations['aa'] = undefined;
+};
+
+ElggLanguagesTest.prototype.testLoadTranslations = function() {
+ assertUndefined(elgg.config.translations['en']);
+ assertUndefined(elgg.config.translations['aa']);
+
+ elgg.reload_all_translations();
+ elgg.reload_all_translations('aa');
+
+ assertNotUndefined(elgg.config.translations['en']['language']);
+ assertNotUndefined(elgg.config.translations['aa']['language']);
+};
+
+ElggLanguagesTest.prototype.testElggEchoTranslates = function() {
+ elgg.reload_all_translations('en');
+ elgg.reload_all_translations('aa');
+
+ assertEquals('en', elgg.echo('language'));
+ assertEquals('aa', elgg.echo('language', 'aa'));
+};
+
+ElggLanguagesTest.prototype.testElggEchoFallsBackToDefaultLanguage = function() {
+ elgg.reload_all_translations('en');
+ assertEquals('en', elgg.echo('language', 'aa'));
+};
+
diff --git a/js/tests/ElggLibTest.js b/js/tests/ElggLibTest.js
new file mode 100644
index 000000000..2a676e22a
--- /dev/null
+++ b/js/tests/ElggLibTest.js
@@ -0,0 +1,129 @@
+/**
+ * Test basic elgg library functions
+ */
+ElggLibTest = TestCase("ElggLibTest");
+
+ElggLibTest.prototype.testGlobal = function() {
+ assertTrue(window === elgg.global);
+};
+
+ElggLibTest.prototype.testAssertTypeOf = function() {
+ [//Valid inputs
+ ['string', ''],
+ ['object', {}],
+ ['boolean', true],
+ ['boolean', false],
+ ['undefined', undefined],
+ ['number', 0],
+ ['function', elgg.nullFunction]
+ ].forEach(function(args) {
+ assertNoException(function() {
+ elgg.assertTypeOf.apply(undefined, args);
+ });
+ });
+
+ [//Invalid inputs
+ ['function', {}],
+ ['object', elgg.nullFunction]
+ ].forEach(function() {
+ assertException(function(args) {
+ elgg.assertTypeOf.apply(undefined, args);
+ });
+ });
+};
+
+ElggLibTest.prototype.testProvideDoesntClobber = function() {
+ elgg.provide('foo.bar.baz');
+
+ foo.bar.baz.oof = "test";
+
+ elgg.provide('foo.bar.baz');
+
+ assertEquals("test", foo.bar.baz.oof);
+};
+
+/**
+ * Try requiring bogus input
+ */
+ElggLibTest.prototype.testRequire = function () {
+ assertException(function(){ elgg.require(''); });
+ assertException(function(){ elgg.require('garbage'); });
+ assertException(function(){ elgg.require('gar.ba.ge'); });
+
+ assertNoException(function(){
+ elgg.require('jQuery');
+ elgg.require('elgg');
+ elgg.require('elgg.config');
+ elgg.require('elgg.security');
+ });
+};
+
+ElggLibTest.prototype.testInherit = function () {
+ function Base() {}
+ function Child() {}
+
+ elgg.inherit(Child, Base);
+
+ assertInstanceOf(Base, new Child());
+ assertEquals(Child, Child.prototype.constructor);
+};
+
+ElggLibTest.prototype.testNormalizeUrl = function() {
+ elgg.config.wwwroot = "http://elgg.org/";
+
+ [
+ ['', elgg.config.wwwroot],
+ ['test', elgg.config.wwwroot + 'test'],
+ ['http://example.com', 'http://example.com'],
+ ['https://example.com', 'https://example.com'],
+ ['http://example-time.com', 'http://example-time.com'],
+ ['//example.com', '//example.com'],
+
+ ['ftp://example.com/file', 'ftp://example.com/file'],
+ ['mailto:brett@elgg.org', 'mailto:brett@elgg.org'],
+ ['javascript:alert("test")', 'javascript:alert("test")'],
+ ['app://endpoint', 'app://endpoint'],
+
+ ['example.com', 'http://example.com'],
+ ['example.com/subpage', 'http://example.com/subpage'],
+
+ ['page/handler', elgg.config.wwwroot + 'page/handler'],
+ ['page/handler?p=v&p2=v2', elgg.config.wwwroot + 'page/handler?p=v&p2=v2'],
+ ['mod/plugin/file.php', elgg.config.wwwroot + 'mod/plugin/file.php'],
+ ['mod/plugin/file.php?p=v&p2=v2', elgg.config.wwwroot + 'mod/plugin/file.php?p=v&p2=v2'],
+ ['rootfile.php', elgg.config.wwwroot + 'rootfile.php'],
+ ['rootfile.php?p=v&p2=v2', elgg.config.wwwroot + 'rootfile.php?p=v&p2=v2'],
+
+ ['/page/handler', elgg.config.wwwroot + 'page/handler'],
+ ['/page/handler?p=v&p2=v2', elgg.config.wwwroot + 'page/handler?p=v&p2=v2'],
+ ['/mod/plugin/file.php', elgg.config.wwwroot + 'mod/plugin/file.php'],
+ ['/mod/plugin/file.php?p=v&p2=v2', elgg.config.wwwroot + 'mod/plugin/file.php?p=v&p2=v2'],
+ ['/rootfile.php', elgg.config.wwwroot + 'rootfile.php'],
+ ['/rootfile.php?p=v&p2=v2', elgg.config.wwwroot + 'rootfile.php?p=v&p2=v2']
+
+ ].forEach(function(args) {
+ assertEquals(args[1], elgg.normalize_url(args[0]));
+ });
+};
+
+ElggLibTest.prototype.testParseUrl = function() {
+
+ [
+ ["http://www.elgg.org/test/", {'scheme': 'http', 'host': 'www.elgg.org', 'path': '/test/'}],
+ ["https://www.elgg.org/test/", {'scheme': 'https', 'host': 'www.elgg.org', 'path': '/test/'}],
+ ["ftp://www.elgg.org/test/", {'scheme': 'ftp', 'host': 'www.elgg.org', 'path': '/test/'}],
+ ["http://elgg.org/test?val1=one&val2=two", {'scheme': 'http', 'host': 'elgg.org', 'path': '/test', 'query': 'val1=one&val2=two'}],
+ ["http://elgg.org:8080/", {'scheme': 'http', 'host': 'elgg.org', 'port': 8080, 'path': '/'}],
+ ["http://elgg.org/test#there", {'scheme': 'http', 'host': 'elgg.org', 'path': '/test', 'fragment': 'there'}],
+
+ ["test?val=one", {'host': 'test', 'query': 'val=one'}],
+ ["?val=one", {'query': 'val=one'}],
+
+ ["mailto:joe@elgg.org", {'scheme': 'mailto', 'path': 'joe@elgg.org'}],
+ ["javascript:load()", {'scheme': 'javascript', 'path': 'load()'}]
+
+ ].forEach(function(args) {
+ assertEquals(args[1], elgg.parse_url(args[0]));
+ });
+};
+
diff --git a/js/tests/ElggPriorityListTest.js b/js/tests/ElggPriorityListTest.js
new file mode 100644
index 000000000..2329a8490
--- /dev/null
+++ b/js/tests/ElggPriorityListTest.js
@@ -0,0 +1,47 @@
+ElggPriorityListTest = TestCase("ElggPriorityListTest");
+
+ElggPriorityListTest.prototype.setUp = function() {
+ this.list = new elgg.ElggPriorityList();
+};
+
+ElggPriorityListTest.prototype.tearDown = function() {
+ this.list = null;
+};
+
+ElggPriorityListTest.prototype.testInsert = function() {
+ this.list.insert('foo');
+
+ assertEquals('foo', this.list.priorities_[500][0]);
+
+ this.list.insert('bar', 501);
+
+ assertEquals('bar', this.list.priorities_[501][0]);
+};
+
+ElggPriorityListTest.prototype.testInsertRespectsPriority = function() {
+ var values = [5, 4, 3, 2, 1, 0];
+
+ for (var i in values) {
+ this.list.insert(values[i], values[i]);
+ }
+
+ this.list.forEach(function(elem, idx) {
+ assertEquals(elem, idx);
+ })
+};
+
+ElggPriorityListTest.prototype.testInsertHandlesDuplicatePriorities = function() {
+ values = [0, 1, 2, 3, 4, 5, 6, 7, 8 , 9];
+
+ for (var i in values) {
+ this.list.insert(values[i], values[i]/3);
+ }
+
+ this.list.forEach(function(elem, idx) {
+ assertEquals(elem, idx);
+ });
+};
+
+ElggPriorityListTest.prototype.testEveryDefaultsToTrue = function() {
+ assertTrue(this.list.every(function() {}));
+}; \ No newline at end of file
diff --git a/js/tests/ElggSecurityTest.js b/js/tests/ElggSecurityTest.js
new file mode 100644
index 000000000..107c0adbd
--- /dev/null
+++ b/js/tests/ElggSecurityTest.js
@@ -0,0 +1,75 @@
+ElggSecurityTest = TestCase("ElggSecurityTest");
+
+ElggSecurityTest.prototype.setUp = function() {
+ //fill with fake, but reasonable, values for testing
+ this.ts = elgg.security.token.__elgg_ts = 12345;
+ this.token = elgg.security.token.__elgg_token = 'abcdef';
+};
+
+ElggSecurityTest.prototype.testAddTokenAcceptsUndefined = function() {
+ var input,
+ expected = {
+ __elgg_ts: this.ts,
+ __elgg_token: this.token
+ };
+
+ assertEquals(expected, elgg.security.addToken(input));
+};
+
+ElggSecurityTest.prototype.testAddTokenAcceptsObject = function() {
+ var input = {},
+ expected = {
+ __elgg_ts: this.ts,
+ __elgg_token: this.token
+ };
+
+ assertEquals(expected, elgg.security.addToken(input));
+};
+
+ElggSecurityTest.prototype.testAddTokenAcceptsRelativeUrl = function() {
+ var input,
+ str = "__elgg_ts=" + this.ts + "&__elgg_token=" + this.token;
+
+ input = "test";
+ assertEquals(input + '?' + str, elgg.security.addToken(input));
+};
+
+ElggSecurityTest.prototype.testAddTokenAcceptsFullUrl = function() {
+ var input,
+ str = "__elgg_ts=" + this.ts + "&__elgg_token=" + this.token;
+
+ input = "http://elgg.org/";
+ assertEquals(input + '?' + str, elgg.security.addToken(input));
+};
+
+ElggSecurityTest.prototype.testAddTokenAcceptsQueryString = function() {
+ var input,
+ str = "__elgg_ts=" + this.ts + "&__elgg_token=" + this.token;
+
+ input = "?data=sofar";
+ assertEquals(input + '&' + str, elgg.security.addToken(input));
+
+ input = "test?data=sofar";
+ assertEquals(input + '&' + str, elgg.security.addToken(input));
+
+ input = "http://elgg.org/?data=sofar";
+ assertEquals(input + '&' + str, elgg.security.addToken(input));
+};
+
+ElggSecurityTest.prototype.testAddTokenAlreadyAdded = function() {
+ var input,
+ str = "__elgg_ts=" + this.ts + "&__elgg_token=" + this.token;
+
+ input = "http://elgg.org/?" + str + "&data=sofar";
+ assertEquals(input, elgg.security.addToken(input));
+};
+
+ElggSecurityTest.prototype.testSetTokenSetsElggSecurityToken = function() {
+ var json = {
+ __elgg_ts: 4567,
+ __elgg_token: 'abcdef'
+ };
+
+ elgg.security.setToken(json);
+ assertEquals(json, elgg.security.token);
+};
diff --git a/js/tests/ElggSessionTest.js b/js/tests/ElggSessionTest.js
new file mode 100644
index 000000000..5ff8ca13e
--- /dev/null
+++ b/js/tests/ElggSessionTest.js
@@ -0,0 +1,36 @@
+ElggSessionTest = TestCase("ElggSessionTest");
+
+ElggSessionTest.prototype.testGetCookie = function() {
+ assertEquals(document.cookie, elgg.session.cookie());
+};
+
+ElggSessionTest.prototype.testGetCookieKey = function() {
+ document.cookie = "name=value";
+ assertEquals('value', elgg.session.cookie('name'));
+
+ document.cookie = "name=value2";
+ assertEquals('value2', elgg.session.cookie('name'));
+
+ document.cookie = "name=value";
+ document.cookie = "name2=value2";
+ assertEquals('value', elgg.session.cookie('name'));
+ assertEquals('value2', elgg.session.cookie('name2'));
+};
+
+ElggSessionTest.prototype.testSetCookieKey = function() {
+ elgg.session.cookie('name', 'value');
+ assertEquals('value', elgg.session.cookie('name'));
+
+ elgg.session.cookie('name', 'value2');
+ assertEquals('value2', elgg.session.cookie('name'));
+
+ elgg.session.cookie('name', 'value');
+ elgg.session.cookie('name2', 'value2');
+ assertEquals('value', elgg.session.cookie('name'));
+ assertEquals('value2', elgg.session.cookie('name2'));
+
+ elgg.session.cookie('name', null);
+ elgg.session.cookie('name2', null);
+ assertUndefined(elgg.session.cookie('name'));
+ assertUndefined(elgg.session.cookie('name2'));
+}; \ No newline at end of file
diff --git a/js/tests/README b/js/tests/README
new file mode 100644
index 000000000..4f86b27c6
--- /dev/null
+++ b/js/tests/README
@@ -0,0 +1,24 @@
+Elgg JavaScript Unit Tests
+--------------------------
+
+Introduction
+============
+Elgg uses js-test-driver to run its unit tests. Instructions on obtaining,
+configuring, and using it are at http://code.google.com/p/js-test-driver/. It
+supports running the test in multiple browsers and debugging using web browser
+based debuggers. Visit its wiki at the Google Code site for more information.
+
+
+Sample Usage
+============
+ 1. Put jar file in the base directory of Elgg
+ 2. Run the server: java -jar JsTestDriver-1.3.3d.jar --port 4224
+ 3. Point a web browser at http://localhost:4224
+ 4. Run the tests: java -jar JsTestDriver-1.3.3d.jar --config js/tests/jsTestDriver.conf --basePath . --tests all
+
+
+Configuration Hints
+===================
+ * The port when running the server must be the same as listed in the
+ configuration file. If that port is being used, change the configuration file.
+ * The basePath must be the base directory of Elgg. \ No newline at end of file
diff --git a/js/tests/jsTestDriver.conf b/js/tests/jsTestDriver.conf
new file mode 100644
index 000000000..cc0b5d373
--- /dev/null
+++ b/js/tests/jsTestDriver.conf
@@ -0,0 +1,10 @@
+server: http://localhost:4224
+
+load:
+ - vendors/jquery/jquery-1.6.4.min.js
+ - vendors/sprintf.js
+ - js/lib/elgglib.js
+ - js/lib/hooks.js
+ - js/classes/*.js
+ - js/lib/*.js
+ - js/tests/*.js \ No newline at end of file
diff --git a/languages/en.php b/languages/en.php
index 20b7cb656..353896047 100755..100644
--- a/languages/en.php
+++ b/languages/en.php
@@ -1,32 +1,1365 @@
-<?php
-/**
- * Elgg spotlight lorea
- *
- * @package
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @author lorea
- * @copyright lorea
- * @link http://lorea.cc
- */
-
- $english = array(
- "dokuwiki:wiki"=>'Wiki',
- "dokuwiki:title"=>'Wikis',
- "item:object:dokuwiki"=>'Wikis',
- "dokuwiki:wikifrom"=>'%s wiki',
- "dokuwiki:pages"=>'%s pages',
- "dokuwiki:dokuwiki"=>'Wiki',
- "dokuwiki:group"=>'Group wiki',
- "dokuwiki:userwiki"=>'My Wiki',
- "dokuwiki:sidebar" => 'Wiki navigation',
- "groups:enabledokuwiki"=>'Enable group wiki',
- "groups:enabledokuwiki_frontpage"=>'Show main wiki page in the group front page (only if wiki is enabled)',
- "groups:enabledokuwiki_frontsidebar"=>'Show wiki sidebar in the group front page (only if wiki is enabled)',
- "dokuwiki"=>'Wikis',
-
- "dokuwiki:river:modified"=>'%s modified page %s on %s',
- );
-
- add_translation("en",$english);
-
-?>
+<?php
+/**
+ * Core English Language
+ *
+ * @package Elgg.Core
+ * @subpackage Languages.English
+ */
+
+$english = array(
+/**
+ * Sites
+ */
+
+ 'item:site' => 'Sites',
+
+/**
+ * Sessions
+ */
+
+ 'login' => "Log in",
+ 'loginok' => "You have been logged in.",
+ 'loginerror' => "We couldn't log you in. Please check your credentials and try again.",
+ 'login:empty' => "Username/email and password are required.",
+ 'login:baduser' => "Unable to load your user account.",
+ 'auth:nopams' => "Internal error. No user authentication method installed.",
+
+ 'logout' => "Log out",
+ 'logoutok' => "You have been logged out.",
+ 'logouterror' => "We couldn't log you out. Please try again.",
+
+ 'loggedinrequired' => "You must be logged in to view that page.",
+ 'adminrequired' => "You must be an administrator to view that page.",
+ 'membershiprequired' => "You must be a member of this group to view that page.",
+
+
+/**
+ * Errors
+ */
+ 'exception:title' => "Fatal Error.",
+ 'exception:contact_admin' => 'An unrecoverable error has occurred and has been logged. Contact the site administrator with the following information:',
+
+ 'actionundefined' => "The requested action (%s) was not defined in the system.",
+ 'actionnotfound' => "The action file for %s was not found.",
+ 'actionloggedout' => "Sorry, you cannot perform this action while logged out.",
+ 'actionunauthorized' => 'You are unauthorized to perform this action',
+
+ 'InstallationException:SiteNotInstalled' => 'Unable to handle this request. This site '
+ . ' is not configured or the database is down.',
+ 'InstallationException:MissingLibrary' => 'Could not load %s',
+ 'InstallationException:CannotLoadSettings' => 'Elgg could not load the settings file. It does not exist or there is a file permissions issue.',
+
+ 'SecurityException:Codeblock' => "Denied access to execute privileged code block",
+ 'DatabaseException:WrongCredentials' => "Elgg couldn't connect to the database using the given credentials. Check the settings file.",
+ 'DatabaseException:NoConnect' => "Elgg couldn't select the database '%s', please check that the database is created and you have access to it.",
+ 'SecurityException:FunctionDenied' => "Access to privileged function '%s' is denied.",
+ 'DatabaseException:DBSetupIssues' => "There were a number of issues: ",
+ 'DatabaseException:ScriptNotFound' => "Elgg couldn't find the requested database script at %s.",
+ 'DatabaseException:InvalidQuery' => "Invalid query",
+ 'DatabaseException:InvalidDBLink' => "Connection to database was lost.",
+
+ 'IOException:FailedToLoadGUID' => "Failed to load new %s from GUID:%d",
+ 'InvalidParameterException:NonElggObject' => "Passing a non-ElggObject to an ElggObject constructor!",
+ 'InvalidParameterException:UnrecognisedValue' => "Unrecognised value passed to constuctor.",
+
+ 'InvalidClassException:NotValidElggStar' => "GUID:%d is not a valid %s",
+
+ 'PluginException:MisconfiguredPlugin' => "%s (guid: %s) is a misconfigured plugin. It has been disabled. Please search the Elgg wiki for possible causes (http://docs.elgg.org/wiki/).",
+ 'PluginException:CannotStart' => '%s (guid: %s) cannot start and has been deactivated. Reason: %s',
+ 'PluginException:InvalidID' => "%s is an invalid plugin ID.",
+ 'PluginException:InvalidPath' => "%s is an invalid plugin path.",
+ 'PluginException:InvalidManifest' => 'Invalid manifest file for plugin %s',
+ 'PluginException:InvalidPlugin' => '%s is not a valid plugin.',
+ 'PluginException:InvalidPlugin:Details' => '%s is not a valid plugin: %s',
+ 'PluginException:NullInstantiated' => 'ElggPlugin cannot be null instantiated. You must pass a GUID, a plugin ID, or a full path.',
+
+ 'ElggPlugin:MissingID' => 'Missing plugin ID (guid %s)',
+ 'ElggPlugin:NoPluginPackagePackage' => 'Missing ElggPluginPackage for plugin ID %s (guid %s)',
+
+ 'ElggPluginPackage:InvalidPlugin:MissingFile' => 'The required file "%s" is missing.',
+ 'ElggPluginPackage:InvalidPlugin:InvalidDependency' => 'Its manifest contains an invalid dependency type "%s".',
+ 'ElggPluginPackage:InvalidPlugin:InvalidProvides' => 'Its manifest contains an invalid provides type "%s".',
+ 'ElggPluginPackage:InvalidPlugin:CircularDep' => 'There is an invalid %s dependency "%s" in plugin %s. Plugins cannot conflict with or require something they provide!',
+
+ 'ElggPlugin:Exception:CannotIncludeFile' => 'Cannot include %s for plugin %s (guid: %s) at %s.',
+ 'ElggPlugin:Exception:CannotRegisterViews' => 'Cannot open views dir for plugin %s (guid: %s) at %s.',
+ 'ElggPlugin:Exception:CannotRegisterLanguages' => 'Cannot register languages for plugin %s (guid: %s) at %s.',
+ 'ElggPlugin:Exception:NoID' => 'No ID for plugin guid %s!',
+
+ 'PluginException:ParserError' => 'Error parsing manifest with API version %s in plugin %s.',
+ 'PluginException:NoAvailableParser' => 'Cannot find a parser for manifest API version %s in plugin %s.',
+ 'PluginException:ParserErrorMissingRequiredAttribute' => "Missing required '%s' attribute in manifest for plugin %s.",
+
+ 'ElggPlugin:Dependencies:Requires' => 'Requires',
+ 'ElggPlugin:Dependencies:Suggests' => 'Suggests',
+ 'ElggPlugin:Dependencies:Conflicts' => 'Conflicts',
+ 'ElggPlugin:Dependencies:Conflicted' => 'Conflicted',
+ 'ElggPlugin:Dependencies:Provides' => 'Provides',
+ 'ElggPlugin:Dependencies:Priority' => 'Priority',
+
+ 'ElggPlugin:Dependencies:Elgg' => 'Elgg version',
+ 'ElggPlugin:Dependencies:PhpExtension' => 'PHP extension: %s',
+ 'ElggPlugin:Dependencies:PhpIni' => 'PHP ini setting: %s',
+ 'ElggPlugin:Dependencies:Plugin' => 'Plugin: %s',
+ 'ElggPlugin:Dependencies:Priority:After' => 'After %s',
+ 'ElggPlugin:Dependencies:Priority:Before' => 'Before %s',
+ 'ElggPlugin:Dependencies:Priority:Uninstalled' => '%s is not installed',
+ 'ElggPlugin:Dependencies:Suggests:Unsatisfied' => 'Missing',
+
+ 'ElggPlugin:InvalidAndDeactivated' => '%s is an invalid plugin and has been deactivated.',
+
+ 'InvalidParameterException:NonElggUser' => "Passing a non-ElggUser to an ElggUser constructor!",
+
+ 'InvalidParameterException:NonElggSite' => "Passing a non-ElggSite to an ElggSite constructor!",
+
+ 'InvalidParameterException:NonElggGroup' => "Passing a non-ElggGroup to an ElggGroup constructor!",
+
+ 'IOException:UnableToSaveNew' => "Unable to save new %s",
+
+ 'InvalidParameterException:GUIDNotForExport' => "GUID has not been specified during export, this should never happen.",
+ 'InvalidParameterException:NonArrayReturnValue' => "Entity serialisation function passed a non-array returnvalue parameter",
+
+ 'ConfigurationException:NoCachePath' => "Cache path set to nothing!",
+ 'IOException:NotDirectory' => "%s is not a directory.",
+
+ 'IOException:BaseEntitySaveFailed' => "Unable to save new object's base entity information!",
+ 'InvalidParameterException:UnexpectedODDClass' => "import() passed an unexpected ODD class",
+ 'InvalidParameterException:EntityTypeNotSet' => "Entity type must be set.",
+
+ 'ClassException:ClassnameNotClass' => "%s is not a %s.",
+ 'ClassNotFoundException:MissingClass' => "Class '%s' was not found, missing plugin?",
+ 'InstallationException:TypeNotSupported' => "Type %s is not supported. This indicates an error in your installation, most likely caused by an incomplete upgrade.",
+
+ 'ImportException:ImportFailed' => "Could not import element %d",
+ 'ImportException:ProblemSaving' => "There was a problem saving %s",
+ 'ImportException:NoGUID' => "New entity created but has no GUID, this should not happen.",
+
+ 'ImportException:GUIDNotFound' => "Entity '%d' could not be found.",
+ 'ImportException:ProblemUpdatingMeta' => "There was a problem updating '%s' on entity '%d'",
+
+ 'ExportException:NoSuchEntity' => "No such entity GUID:%d",
+
+ 'ImportException:NoODDElements' => "No OpenDD elements found in import data, import failed.",
+ 'ImportException:NotAllImported' => "Not all elements were imported.",
+
+ 'InvalidParameterException:UnrecognisedFileMode' => "Unrecognised file mode '%s'",
+ 'InvalidParameterException:MissingOwner' => "File %s (file guid:%d) (owner guid:%d) is missing an owner!",
+ 'IOException:CouldNotMake' => "Could not make %s",
+ 'IOException:MissingFileName' => "You must specify a name before opening a file.",
+ 'ClassNotFoundException:NotFoundNotSavedWithFile' => "Unable to load filestore class %s for file %u",
+ 'NotificationException:NoNotificationMethod' => "No notification method specified.",
+ 'NotificationException:NoHandlerFound' => "No handler found for '%s' or it was not callable.",
+ 'NotificationException:ErrorNotifyingGuid' => "There was an error while notifying %d",
+ 'NotificationException:NoEmailAddress' => "Could not get the email address for GUID:%d",
+ 'NotificationException:MissingParameter' => "Missing a required parameter, '%s'",
+
+ 'DatabaseException:WhereSetNonQuery' => "Where set contains non WhereQueryComponent",
+ 'DatabaseException:SelectFieldsMissing' => "Fields missing on a select style query",
+ 'DatabaseException:UnspecifiedQueryType' => "Unrecognised or unspecified query type.",
+ 'DatabaseException:NoTablesSpecified' => "No tables specified for query.",
+ 'DatabaseException:NoACL' => "No access control was provided on query",
+
+ 'InvalidParameterException:NoEntityFound' => "No entity found, it either doesn't exist or you don't have access to it.",
+
+ 'InvalidParameterException:GUIDNotFound' => "GUID:%s could not be found, or you can not access it.",
+ 'InvalidParameterException:IdNotExistForGUID' => "Sorry, '%s' does not exist for guid:%d",
+ 'InvalidParameterException:CanNotExportType' => "Sorry, I don't know how to export '%s'",
+ 'InvalidParameterException:NoDataFound' => "Could not find any data.",
+ 'InvalidParameterException:DoesNotBelong' => "Does not belong to entity.",
+ 'InvalidParameterException:DoesNotBelongOrRefer' => "Does not belong to entity or refer to entity.",
+ 'InvalidParameterException:MissingParameter' => "Missing parameter, you need to provide a GUID.",
+ 'InvalidParameterException:LibraryNotRegistered' => '%s is not a registered library',
+ 'InvalidParameterException:LibraryNotFound' => 'Could not load the %s library from %s',
+
+ 'APIException:ApiResultUnknown' => "API Result is of an unknown type, this should never happen.",
+ 'ConfigurationException:NoSiteID' => "No site ID has been specified.",
+ 'SecurityException:APIAccessDenied' => "Sorry, API access has been disabled by the administrator.",
+ 'SecurityException:NoAuthMethods' => "No authentication methods were found that could authenticate this API request.",
+ 'SecurityException:ForwardFailedToRedirect' => 'Redirect could not be issued due to headers already being sent. Halting execution for security. Search http://docs.elgg.org/ for more information.',
+ 'InvalidParameterException:APIMethodOrFunctionNotSet' => "Method or function not set in call in expose_method()",
+ 'InvalidParameterException:APIParametersArrayStructure' => "Parameters array structure is incorrect for call to expose method '%s'",
+ 'InvalidParameterException:UnrecognisedHttpMethod' => "Unrecognised http method %s for api method '%s'",
+ 'APIException:MissingParameterInMethod' => "Missing parameter %s in method %s",
+ 'APIException:ParameterNotArray' => "%s does not appear to be an array.",
+ 'APIException:UnrecognisedTypeCast' => "Unrecognised type in cast %s for variable '%s' in method '%s'",
+ 'APIException:InvalidParameter' => "Invalid parameter found for '%s' in method '%s'.",
+ 'APIException:FunctionParseError' => "%s(%s) has a parsing error.",
+ 'APIException:FunctionNoReturn' => "%s(%s) returned no value.",
+ 'APIException:APIAuthenticationFailed' => "Method call failed the API Authentication",
+ 'APIException:UserAuthenticationFailed' => "Method call failed the User Authentication",
+ 'SecurityException:AuthTokenExpired' => "Authentication token either missing, invalid or expired.",
+ 'CallException:InvalidCallMethod' => "%s must be called using '%s'",
+ 'APIException:MethodCallNotImplemented' => "Method call '%s' has not been implemented.",
+ 'APIException:FunctionDoesNotExist' => "Function for method '%s' is not callable",
+ 'APIException:AlgorithmNotSupported' => "Algorithm '%s' is not supported or has been disabled.",
+ 'ConfigurationException:CacheDirNotSet' => "Cache directory 'cache_path' not set.",
+ 'APIException:NotGetOrPost' => "Request method must be GET or POST",
+ 'APIException:MissingAPIKey' => "Missing API key",
+ 'APIException:BadAPIKey' => "Bad API key",
+ 'APIException:MissingHmac' => "Missing X-Elgg-hmac header",
+ 'APIException:MissingHmacAlgo' => "Missing X-Elgg-hmac-algo header",
+ 'APIException:MissingTime' => "Missing X-Elgg-time header",
+ 'APIException:MissingNonce' => "Missing X-Elgg-nonce header",
+ 'APIException:TemporalDrift' => "X-Elgg-time is too far in the past or future. Epoch fail.",
+ 'APIException:NoQueryString' => "No data on the query string",
+ 'APIException:MissingPOSTHash' => "Missing X-Elgg-posthash header",
+ 'APIException:MissingPOSTAlgo' => "Missing X-Elgg-posthash_algo header",
+ 'APIException:MissingContentType' => "Missing content type for post data",
+ 'SecurityException:InvalidPostHash' => "POST data hash is invalid - Expected %s but got %s.",
+ 'SecurityException:DupePacket' => "Packet signature already seen.",
+ 'SecurityException:InvalidAPIKey' => "Invalid or missing API Key.",
+ 'NotImplementedException:CallMethodNotImplemented' => "Call method '%s' is currently not supported.",
+
+ 'NotImplementedException:XMLRPCMethodNotImplemented' => "XML-RPC method call '%s' not implemented.",
+ 'InvalidParameterException:UnexpectedReturnFormat' => "Call to method '%s' returned an unexpected result.",
+ 'CallException:NotRPCCall' => "Call does not appear to be a valid XML-RPC call",
+
+ 'PluginException:NoPluginName' => "The plugin name could not be found",
+
+ 'SecurityException:authenticationfailed' => "User could not be authenticated",
+
+ 'CronException:unknownperiod' => '%s is not a recognised period.',
+
+ 'SecurityException:deletedisablecurrentsite' => 'You can not delete or disable the site you are currently viewing!',
+
+ 'RegistrationException:EmptyPassword' => 'The password fields cannot be empty',
+ 'RegistrationException:PasswordMismatch' => 'Passwords must match',
+ 'LoginException:BannedUser' => 'You have been banned from this site and cannot log in',
+ 'LoginException:UsernameFailure' => 'We could not log you in. Please check your username/email and password.',
+ 'LoginException:PasswordFailure' => 'We could not log you in. Please check your username/email and password.',
+ 'LoginException:AccountLocked' => 'Your account has been locked for too many log in failures.',
+ 'LoginException:ChangePasswordFailure' => 'Failed current password check.',
+ 'LoginException:Unknown' => 'We could not log you in due to an unknown error.',
+
+ 'deprecatedfunction' => 'Warning: This code uses the deprecated function \'%s\' and is not compatible with this version of Elgg',
+
+ 'pageownerunavailable' => 'Warning: The page owner %d is not accessible!',
+ 'viewfailure' => 'There was an internal failure in the view %s',
+ 'changebookmark' => 'Please change your bookmark for this page',
+ 'noaccess' => 'You need to login to view this content or the content has been removed or you do not have permission to view it.',
+ 'error:missing_data' => 'There was some data missing in your request',
+
+ 'error:default' => 'Oops...something went wrong.',
+ 'error:404' => 'Sorry. We could not find the page that you requested.',
+
+/**
+ * API
+ */
+ 'system.api.list' => "List all available API calls on the system.",
+ 'auth.gettoken' => "This API call lets a user obtain a user authentication token which can be used for authenticating future API calls. Pass it as the parameter auth_token",
+
+/**
+ * User details
+ */
+
+ 'name' => "Display name",
+ 'email' => "Email address",
+ 'username' => "Username",
+ 'loginusername' => "Username or email",
+ 'password' => "Password",
+ 'passwordagain' => "Password (again for verification)",
+ 'admin_option' => "Make this user an admin?",
+
+/**
+ * Access
+ */
+
+ 'PRIVATE' => "Private",
+ 'LOGGED_IN' => "Logged in users",
+ 'PUBLIC' => "Public",
+ 'access:friends:label' => "Friends",
+ 'access' => "Access",
+ 'access:limited:label' => "Limited",
+ 'access:help' => "The access level",
+
+/**
+ * Dashboard and widgets
+ */
+
+ 'dashboard' => "Dashboard",
+ 'dashboard:nowidgets' => "Your dashboard lets you track the activity and content on this site that matters to you.",
+
+ 'widgets:add' => 'Add widgets',
+ 'widgets:add:description' => "Click on any widget button below to add it to the page.",
+ 'widgets:position:fixed' => '(Fixed position on page)',
+ 'widget:unavailable' => 'You have already added this widget',
+ 'widget:numbertodisplay' => 'Number of items to display',
+
+ 'widget:delete' => 'Remove %s',
+ 'widget:edit' => 'Customize this widget',
+
+ 'widgets' => "Widgets",
+ 'widget' => "Widget",
+ 'item:object:widget' => "Widgets",
+ 'widgets:save:success' => "The widget was successfully saved.",
+ 'widgets:save:failure' => "We could not save your widget.",
+ 'widgets:add:success' => "The widget was successfully added.",
+ 'widgets:add:failure' => "We could not add your widget.",
+ 'widgets:move:failure' => "We could not store the new widget position.",
+ 'widgets:remove:failure' => "Unable to remove this widget",
+
+/**
+ * Groups
+ */
+
+ 'group' => "Group",
+ 'item:group' => "Groups",
+
+/**
+ * Users
+ */
+
+ 'user' => "User",
+ 'item:user' => "Users",
+
+/**
+ * Friends
+ */
+
+ 'friends' => "Friends",
+ 'friends:yours' => "Your friends",
+ 'friends:owned' => "%s's friends",
+ 'friend:add' => "Add friend",
+ 'friend:remove' => "Remove friend",
+
+ 'friends:add:successful' => "You have successfully added %s as a friend.",
+ 'friends:add:failure' => "We couldn't add %s as a friend.",
+
+ 'friends:remove:successful' => "You have successfully removed %s from your friends.",
+ 'friends:remove:failure' => "We couldn't remove %s from your friends.",
+
+ 'friends:none' => "No friends yet.",
+ 'friends:none:you' => "You don't have any friends yet.",
+
+ 'friends:none:found' => "No friends were found.",
+
+ 'friends:of:none' => "Nobody has added this user as a friend yet.",
+ 'friends:of:none:you' => "Nobody has added you as a friend yet. Start adding content and fill in your profile to let people find you!",
+
+ 'friends:of:owned' => "People who have made %s a friend",
+
+ 'friends:of' => "Friends of",
+ 'friends:collections' => "Friend collections",
+ 'collections:add' => "New collection",
+ 'friends:collections:add' => "New friends collection",
+ 'friends:addfriends' => "Select friends",
+ 'friends:collectionname' => "Collection name",
+ 'friends:collectionfriends' => "Friends in collection",
+ 'friends:collectionedit' => "Edit this collection",
+ 'friends:nocollections' => "You do not have any collections yet.",
+ 'friends:collectiondeleted' => "Your collection has been deleted.",
+ 'friends:collectiondeletefailed' => "We were unable to delete the collection. Either you don't have permission, or some other problem has occurred.",
+ 'friends:collectionadded' => "Your collection was successfully created",
+ 'friends:nocollectionname' => "You need to give your collection a name before it can be created.",
+ 'friends:collections:members' => "Collection members",
+ 'friends:collections:edit' => "Edit collection",
+ 'friends:collections:edited' => "Saved collection",
+ 'friends:collection:edit_failed' => 'Could not save collection.',
+
+ 'friendspicker:chararray' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',
+
+ 'avatar' => 'Avatar',
+ 'avatar:create' => 'Create your avatar',
+ 'avatar:edit' => 'Edit avatar',
+ 'avatar:preview' => 'Preview',
+ 'avatar:upload' => 'Upload a new avatar',
+ 'avatar:current' => 'Current avatar',
+ 'avatar:remove' => 'Remove your avatar and set the default icon',
+ 'avatar:crop:title' => 'Avatar cropping tool',
+ 'avatar:upload:instructions' => "Your avatar is displayed throughout the site. You can change it as often as you'd like. (File formats accepted: GIF, JPG or PNG)",
+ 'avatar:create:instructions' => 'Click and drag a square below to match how you want your avatar cropped. A preview will appear in the box on the right. When you are happy with the preview, click \'Create your avatar\'. This cropped version will be used throughout the site as your avatar.',
+ 'avatar:upload:success' => 'Avatar successfully uploaded',
+ 'avatar:upload:fail' => 'Avatar upload failed',
+ 'avatar:resize:fail' => 'Resize of the avatar failed',
+ 'avatar:crop:success' => 'Cropping the avatar succeeded',
+ 'avatar:crop:fail' => 'Avatar cropping failed',
+ 'avatar:remove:success' => 'Removing the avatar succeeded',
+ 'avatar:remove:fail' => 'Avatar remove failed',
+
+ 'profile:edit' => 'Edit profile',
+ 'profile:aboutme' => "About me",
+ 'profile:description' => "About me",
+ 'profile:briefdescription' => "Brief description",
+ 'profile:location' => "Location",
+ 'profile:skills' => "Skills",
+ 'profile:interests' => "Interests",
+ 'profile:contactemail' => "Contact email",
+ 'profile:phone' => "Telephone",
+ 'profile:mobile' => "Mobile phone",
+ 'profile:website' => "Website",
+ 'profile:twitter' => "Twitter username",
+ 'profile:saved' => "Your profile was successfully saved.",
+
+ 'profile:field:text' => 'Short text',
+ 'profile:field:longtext' => 'Large text area',
+ 'profile:field:tags' => 'Tags',
+ 'profile:field:url' => 'Web address',
+ 'profile:field:email' => 'Email address',
+ 'profile:field:location' => 'Location',
+ 'profile:field:date' => 'Date',
+
+ 'admin:appearance:profile_fields' => 'Edit Profile Fields',
+ 'profile:edit:default' => 'Edit profile fields',
+ 'profile:label' => "Profile label",
+ 'profile:type' => "Profile type",
+ 'profile:editdefault:delete:fail' => 'Removed default profile item field failed',
+ 'profile:editdefault:delete:success' => 'Profile field deleted',
+ 'profile:defaultprofile:reset' => 'Profile fields reset to the system default',
+ 'profile:resetdefault' => 'Reset profile fields to system defaults',
+ 'profile:resetdefault:confirm' => 'Are you sure you want to delete your custom profile fields?',
+ 'profile:explainchangefields' => "You can replace the existing profile fields with your own using the form below. \n\n Give the new profile field a label, for example, 'Favorite team', then select the field type (eg. text, url, tags), and click the 'Add' button. To re-order the fields drag on the handle next to the field label. To edit a field label - click on the label's text to make it editable. \n\n At any time you can revert back to the default profile set up, but you will lose any information already entered into custom fields on profile pages.",
+ 'profile:editdefault:success' => 'New profile field added',
+ 'profile:editdefault:fail' => 'Default profile could not be saved',
+ 'profile:field_too_long' => 'Cannot save your profile information because the "%s" section is too long.',
+ 'profile:noaccess' => "You do not have permission to edit this profile.",
+
+
+/**
+ * Feeds
+ */
+ 'feed:rss' => 'RSS feed for this page',
+/**
+ * Links
+ */
+ 'link:view' => 'view link',
+ 'link:view:all' => 'View all',
+
+
+/**
+ * River
+ */
+ 'river' => "River",
+ 'river:friend:user:default' => "%s is now a friend with %s",
+ 'river:update:user:avatar' => '%s has a new avatar',
+ 'river:update:user:profile' => '%s has updated their profile',
+ 'river:noaccess' => 'You do not have permission to view this item.',
+ 'river:posted:generic' => '%s posted',
+ 'riveritem:single:user' => 'a user',
+ 'riveritem:plural:user' => 'some users',
+ 'river:ingroup' => 'in the group %s',
+ 'river:none' => 'No activity',
+ 'river:update' => 'Update for %s',
+ 'river:delete:success' => 'River item has been deleted',
+ 'river:delete:fail' => 'River item could not be deleted',
+
+ 'river:widget:title' => "Activity",
+ 'river:widget:description' => "Display latest activity",
+ 'river:widget:type' => "Type of activity",
+ 'river:widgets:friends' => 'Friends activity',
+ 'river:widgets:all' => 'All site activity',
+
+/**
+ * Notifications
+ */
+ 'notifications:usersettings' => "Notification settings",
+ 'notifications:methods' => "Select your notification methods.",
+ 'notification:method:email' => 'Email',
+
+ 'notifications:usersettings:save:ok' => "Your notification settings were successfully saved.",
+ 'notifications:usersettings:save:fail' => "There was a problem saving your notification settings.",
+
+ 'user.notification.get' => 'Return the notification settings for a given user.',
+ 'user.notification.set' => 'Set the notification settings for a given user.',
+/**
+ * Search
+ */
+
+ 'search' => "Search",
+ 'searchtitle' => "Search: %s",
+ 'users:searchtitle' => "Searching for users: %s",
+ 'groups:searchtitle' => "Searching for groups: %s",
+ 'advancedsearchtitle' => "%s with results matching %s",
+ 'notfound' => "No results found.",
+ 'next' => "Next",
+ 'previous' => "Previous",
+
+ 'viewtype:change' => "Change list type",
+ 'viewtype:list' => "List view",
+ 'viewtype:gallery' => "Gallery",
+
+ 'tag:search:startblurb' => "Items with tags matching '%s':",
+
+ 'user:search:startblurb' => "Users matching '%s':",
+ 'user:search:finishblurb' => "To view more, click here.",
+
+ 'group:search:startblurb' => "Groups matching '%s':",
+ 'group:search:finishblurb' => "To view more, click here.",
+ 'search:go' => 'Go',
+ 'userpicker:only_friends' => 'Only friends',
+
+/**
+ * Account
+ */
+
+ 'account' => "Account",
+ 'settings' => "Settings",
+ 'tools' => "Tools",
+ 'settings:edit' => 'Edit settings',
+
+ 'register' => "Register",
+ 'registerok' => "You have successfully registered for %s.",
+ 'registerbad' => "Your registration was unsuccessful because of an unknown error.",
+ 'registerdisabled' => "Registration has been disabled by the system administrator",
+ 'register:fields' => 'All fields are required',
+
+ 'registration:notemail' => 'The email address you provided does not appear to be a valid email address.',
+ 'registration:userexists' => 'That username already exists',
+ 'registration:usernametooshort' => 'Your username must be a minimum of %u characters long.',
+ 'registration:usernametoolong' => 'Your username is too long. It can have a maximum of %u characters.',
+ 'registration:passwordtooshort' => 'The password must be a minimum of %u characters long.',
+ 'registration:dupeemail' => 'This email address has already been registered.',
+ 'registration:invalidchars' => 'Sorry, your username contains the character %s which is invalid. The following characters are invalid: %s',
+ 'registration:emailnotvalid' => 'Sorry, the email address you entered is invalid on this system',
+ 'registration:passwordnotvalid' => 'Sorry, the password you entered is invalid on this system',
+ 'registration:usernamenotvalid' => 'Sorry, the username you entered is invalid on this system',
+
+ 'adduser' => "Add User",
+ 'adduser:ok' => "You have successfully added a new user.",
+ 'adduser:bad' => "The new user could not be created.",
+
+ 'user:set:name' => "Account name settings",
+ 'user:name:label' => "My display name",
+ 'user:name:success' => "Successfully changed your name on the system.",
+ 'user:name:fail' => "Could not change your name on the system. Please make sure your name isn't too long and try again.",
+
+ 'user:set:password' => "Account password",
+ 'user:current_password:label' => 'Current password',
+ 'user:password:label' => "Your new password",
+ 'user:password2:label' => "Your new password again",
+ 'user:password:success' => "Password changed",
+ 'user:password:fail' => "Could not change your password on the system.",
+ 'user:password:fail:notsame' => "The two passwords are not the same!",
+ 'user:password:fail:tooshort' => "Password is too short!",
+ 'user:password:fail:incorrect_current_password' => 'The current password entered is incorrect.',
+ 'user:resetpassword:unknown_user' => 'Invalid user.',
+ 'user:resetpassword:reset_password_confirm' => 'Resetting your password will email a new password to your registered email address.',
+
+ 'user:set:language' => "Language settings",
+ 'user:language:label' => "Your language",
+ 'user:language:success' => "Your language settings have been updated.",
+ 'user:language:fail' => "Your language settings could not be saved.",
+
+ 'user:username:notfound' => 'Username %s not found.',
+
+ 'user:password:lost' => 'Lost password',
+ 'user:password:resetreq:success' => 'Successfully requested a new password, email sent',
+ 'user:password:resetreq:fail' => 'Could not request a new password.',
+
+ 'user:password:text' => 'To request a new password, enter your username or email address below and click the Request button.',
+
+ 'user:persistent' => 'Remember me',
+
+ 'walled_garden:welcome' => 'Welcome to',
+
+/**
+ * Administration
+ */
+ 'menu:page:header:administer' => 'Administer',
+ 'menu:page:header:configure' => 'Configure',
+ 'menu:page:header:develop' => 'Develop',
+ 'menu:page:header:default' => 'Other',
+
+ 'admin:view_site' => 'View site',
+ 'admin:loggedin' => 'Logged in as %s',
+ 'admin:menu' => 'Menu',
+
+ 'admin:configuration:success' => "Your settings have been saved.",
+ 'admin:configuration:fail' => "Your settings could not be saved.",
+ 'admin:configuration:dataroot:relative_path' => 'Cannot set "%s" as the dataroot because it is not an absolute path.',
+
+ 'admin:unknown_section' => 'Invalid Admin Section.',
+
+ 'admin' => "Administration",
+ 'admin:description' => "The admin panel allows you to control all aspects of the system, from user management to how plugins behave. Choose an option below to get started.",
+
+ 'admin:statistics' => "Statistics",
+ 'admin:statistics:overview' => 'Overview',
+ 'admin:statistics:server' => 'Server Info',
+
+ 'admin:appearance' => 'Appearance',
+ 'admin:administer_utilities' => 'Utilities',
+ 'admin:develop_utilities' => 'Utilities',
+
+ 'admin:users' => "Users",
+ 'admin:users:online' => 'Currently Online',
+ 'admin:users:newest' => 'Newest',
+ 'admin:users:admins' => 'Administrators',
+ 'admin:users:add' => 'Add New User',
+ 'admin:users:description' => "This admin panel allows you to control user settings for your site. Choose an option below to get started.",
+ 'admin:users:adduser:label' => "Click here to add a new user...",
+ 'admin:users:opt:linktext' => "Configure users...",
+ 'admin:users:opt:description' => "Configure users and account information. ",
+ 'admin:users:find' => 'Find',
+
+ 'admin:settings' => 'Settings',
+ 'admin:settings:basic' => 'Basic Settings',
+ 'admin:settings:advanced' => 'Advanced Settings',
+ 'admin:site:description' => "This admin panel allows you to control global settings for your site. Choose an option below to get started.",
+ 'admin:site:opt:linktext' => "Configure site...",
+ 'admin:site:access:warning' => "Changing the access setting only affects the permissions on content created in the future.",
+
+ 'admin:dashboard' => 'Dashboard',
+ 'admin:widget:online_users' => 'Online users',
+ 'admin:widget:online_users:help' => 'Lists the users currently on the site',
+ 'admin:widget:new_users' => 'New users',
+ 'admin:widget:new_users:help' => 'Lists the newest users',
+ 'admin:widget:content_stats' => 'Content statistics',
+ 'admin:widget:content_stats:help' => 'Keep track of the content created by your users',
+ 'widget:content_stats:type' => 'Content type',
+ 'widget:content_stats:number' => 'Number',
+
+ 'admin:widget:admin_welcome' => 'Welcome',
+ 'admin:widget:admin_welcome:help' => "A short introduction to Elgg's admin area",
+ 'admin:widget:admin_welcome:intro' =>
+'Welcome to Elgg! Right now you are looking at the administration dashboard. It\'s useful for tracking what\'s happening on the site.',
+
+ 'admin:widget:admin_welcome:admin_overview' =>
+"Navigation for the administration area is provided by the menu to the right. It is organized into"
+. " three sections:
+ <dl>
+ <dt>Administer</dt><dd>Everyday tasks like monitoring reported content, checking who is online, and viewing statistics.</dd>
+ <dt>Configure</dt><dd>Occasional tasks like setting the site name or activating a plugin.</dd>
+ <dt>Develop</dt><dd>For developers who are building plugins or designing themes. (Requires a developer plugin.)</dd>
+ </dl>
+ ",
+
+ // argh, this is ugly
+ 'admin:widget:admin_welcome:outro' => '<br />Be sure to check out the resources available through the footer links and thank you for using Elgg!',
+
+ 'admin:widget:control_panel' => 'Control panel',
+ 'admin:widget:control_panel:help' => "Provides easy access to common controls",
+
+ 'admin:cache:flush' => 'Flush the caches',
+ 'admin:cache:flushed' => "The site's caches have been flushed",
+
+ 'admin:footer:faq' => 'Administration FAQ',
+ 'admin:footer:manual' => 'Administration Manual',
+ 'admin:footer:community_forums' => 'Elgg Community Forums',
+ 'admin:footer:blog' => 'Elgg Blog',
+
+ 'admin:plugins:category:all' => 'All plugins',
+ 'admin:plugins:category:active' => 'Active plugins',
+ 'admin:plugins:category:inactive' => 'Inactive plugins',
+ 'admin:plugins:category:admin' => 'Admin',
+ 'admin:plugins:category:bundled' => 'Bundled',
+ 'admin:plugins:category:nonbundled' => 'Non-bundled',
+ 'admin:plugins:category:content' => 'Content',
+ 'admin:plugins:category:development' => 'Development',
+ 'admin:plugins:category:enhancement' => 'Enhancements',
+ 'admin:plugins:category:api' => 'Service/API',
+ 'admin:plugins:category:communication' => 'Communication',
+ 'admin:plugins:category:security' => 'Security and Spam',
+ 'admin:plugins:category:social' => 'Social',
+ 'admin:plugins:category:multimedia' => 'Multimedia',
+ 'admin:plugins:category:theme' => 'Themes',
+ 'admin:plugins:category:widget' => 'Widgets',
+ 'admin:plugins:category:utility' => 'Utilities',
+
+ 'admin:plugins:sort:priority' => 'Priority',
+ 'admin:plugins:sort:alpha' => 'Alphabetical',
+ 'admin:plugins:sort:date' => 'Newest',
+
+ 'admin:plugins:markdown:unknown_plugin' => 'Unknown plugin.',
+ 'admin:plugins:markdown:unknown_file' => 'Unknown file.',
+
+
+ 'admin:notices:could_not_delete' => 'Could not delete notice.',
+ 'item:object:admin_notice' => 'Admin notice',
+
+ 'admin:options' => 'Admin options',
+
+
+/**
+ * Plugins
+ */
+ 'plugins:disabled' => 'Plugins are not being loaded because a file named "disabled" is in the mod directory.',
+ 'plugins:settings:save:ok' => "Settings for the %s plugin were saved successfully.",
+ 'plugins:settings:save:fail' => "There was a problem saving settings for the %s plugin.",
+ 'plugins:usersettings:save:ok' => "User settings for the %s plugin were saved successfully.",
+ 'plugins:usersettings:save:fail' => "There was a problem saving user settings for the %s plugin.",
+ 'item:object:plugin' => 'Plugins',
+
+ 'admin:plugins' => "Plugins",
+ 'admin:plugins:activate_all' => 'Activate All',
+ 'admin:plugins:deactivate_all' => 'Deactivate All',
+ 'admin:plugins:activate' => 'Activate',
+ 'admin:plugins:deactivate' => 'Deactivate',
+ 'admin:plugins:description' => "This admin panel allows you to control and configure tools installed on your site.",
+ 'admin:plugins:opt:linktext' => "Configure tools...",
+ 'admin:plugins:opt:description' => "Configure the tools installed on the site. ",
+ 'admin:plugins:label:author' => "Author",
+ 'admin:plugins:label:copyright' => "Copyright",
+ 'admin:plugins:label:categories' => 'Categories',
+ 'admin:plugins:label:licence' => "License",
+ 'admin:plugins:label:website' => "URL",
+ 'admin:plugins:label:repository' => "Code",
+ 'admin:plugins:label:bugtracker' => "Report issue",
+ 'admin:plugins:label:donate' => "Donate",
+ 'admin:plugins:label:moreinfo' => 'more info',
+ 'admin:plugins:label:version' => 'Version',
+ 'admin:plugins:label:location' => 'Location',
+ 'admin:plugins:label:dependencies' => 'Dependencies',
+
+ 'admin:plugins:warning:elgg_version_unknown' => 'This plugin uses a legacy manifest file and does not specify a compatible Elgg version. It probably will not work!',
+ 'admin:plugins:warning:unmet_dependencies' => 'This plugin has unmet dependencies and cannot be activated. Check dependencies under more info.',
+ 'admin:plugins:warning:invalid' => 'This plugin is invalid: %s',
+ 'admin:plugins:warning:invalid:check_docs' => 'Check <a href="http://docs.elgg.org/Invalid_Plugin">the Elgg documentation</a> for troubleshooting tips.',
+ 'admin:plugins:cannot_activate' => 'cannot activate',
+
+ 'admin:plugins:set_priority:yes' => "Reordered %s.",
+ 'admin:plugins:set_priority:no' => "Could not reorder %s.",
+ 'admin:plugins:set_priority:no_with_msg' => "Could not reorder %s. Error: %s",
+ 'admin:plugins:deactivate:yes' => "Deactivated %s.",
+ 'admin:plugins:deactivate:no' => "Could not deactivate %s.",
+ 'admin:plugins:deactivate:no_with_msg' => "Could not deactivate %s. Error: %s",
+ 'admin:plugins:activate:yes' => "Activated %s.",
+ 'admin:plugins:activate:no' => "Could not activate %s.",
+ 'admin:plugins:activate:no_with_msg' => "Could not activate %s. Error: %s",
+ 'admin:plugins:categories:all' => 'All categories',
+ 'admin:plugins:plugin_website' => 'Plugin website',
+ 'admin:plugins:author' => '%s',
+ 'admin:plugins:version' => 'Version %s',
+ 'admin:plugin_settings' => 'Plugin Settings',
+ 'admin:plugins:warning:unmet_dependencies_active' => 'This plugin is active but has unmet dependencies. You may encounter problems. See "more info" below for details.',
+
+ 'admin:plugins:dependencies:type' => 'Type',
+ 'admin:plugins:dependencies:name' => 'Name',
+ 'admin:plugins:dependencies:expected_value' => 'Expected Value',
+ 'admin:plugins:dependencies:local_value' => 'Actual value',
+ 'admin:plugins:dependencies:comment' => 'Comment',
+
+ 'admin:statistics:description' => "This is an overview of statistics on your site. If you need more detailed statistics, a professional administration feature is available.",
+ 'admin:statistics:opt:description' => "View statistical information about users and objects on your site.",
+ 'admin:statistics:opt:linktext' => "View statistics...",
+ 'admin:statistics:label:basic' => "Basic site statistics",
+ 'admin:statistics:label:numentities' => "Entities on site",
+ 'admin:statistics:label:numusers' => "Number of users",
+ 'admin:statistics:label:numonline' => "Number of users online",
+ 'admin:statistics:label:onlineusers' => "Users online now",
+ 'admin:statistics:label:admins'=>"Admins",
+ 'admin:statistics:label:version' => "Elgg version",
+ 'admin:statistics:label:version:release' => "Release",
+ 'admin:statistics:label:version:version' => "Version",
+
+ 'admin:server:label:php' => 'PHP',
+ 'admin:server:label:web_server' => 'Web Server',
+ 'admin:server:label:server' => 'Server',
+ 'admin:server:label:log_location' => 'Log Location',
+ 'admin:server:label:php_version' => 'PHP version',
+ 'admin:server:label:php_ini' => 'PHP ini file location',
+ 'admin:server:label:php_log' => 'PHP Log',
+ 'admin:server:label:mem_avail' => 'Memory available',
+ 'admin:server:label:mem_used' => 'Memory used',
+ 'admin:server:error_log' => "Web server's error log",
+ 'admin:server:label:post_max_size' => 'POST maximum size',
+ 'admin:server:label:upload_max_filesize' => 'Upload maximum size',
+ 'admin:server:warning:post_max_too_small' => '(Note: post_max_size must be larger than this value to support uploads of this size)',
+
+ 'admin:user:label:search' => "Find users:",
+ 'admin:user:label:searchbutton' => "Search",
+
+ 'admin:user:ban:no' => "Can not ban user",
+ 'admin:user:ban:yes' => "User banned.",
+ 'admin:user:self:ban:no' => "You cannot ban yourself",
+ 'admin:user:unban:no' => "Can not unban user",
+ 'admin:user:unban:yes' => "User unbanned.",
+ 'admin:user:delete:no' => "Can not delete user",
+ 'admin:user:delete:yes' => "The user %s has been deleted",
+ 'admin:user:self:delete:no' => "You cannot delete yourself",
+
+ 'admin:user:resetpassword:yes' => "Password reset, user notified.",
+ 'admin:user:resetpassword:no' => "Password could not be reset.",
+
+ 'admin:user:makeadmin:yes' => "User is now an admin.",
+ 'admin:user:makeadmin:no' => "We could not make this user an admin.",
+
+ 'admin:user:removeadmin:yes' => "User is no longer an admin.",
+ 'admin:user:removeadmin:no' => "We could not remove administrator privileges from this user.",
+ 'admin:user:self:removeadmin:no' => "You cannot remove your own administrator privileges.",
+
+ 'admin:appearance:menu_items' => 'Menu Items',
+ 'admin:menu_items:configure' => 'Configure main menu items',
+ 'admin:menu_items:description' => 'Select which menu items you want to show as featured links. Unused items will be added as "More" at the end of the list.',
+ 'admin:menu_items:hide_toolbar_entries' => 'Remove links from tool bar menu?',
+ 'admin:menu_items:saved' => 'Menu items saved.',
+ 'admin:add_menu_item' => 'Add a custom menu item',
+ 'admin:add_menu_item:description' => 'Fill out the Display name and URL to add custom items to your navigation menu.',
+
+ 'admin:appearance:default_widgets' => 'Default Widgets',
+ 'admin:default_widgets:unknown_type' => 'Unknown widget type',
+ 'admin:default_widgets:instructions' => 'Add, remove, position, and configure default widgets for the selected widget page.'
+ . ' These changes will only affect new users on the site.',
+
+/**
+ * User settings
+ */
+ 'usersettings:description' => "The user settings panel allows you to control all your personal settings, from user management to how plugins behave. Choose an option below to get started.",
+
+ 'usersettings:statistics' => "Your statistics",
+ 'usersettings:statistics:opt:description' => "View statistical information about users and objects on your site.",
+ 'usersettings:statistics:opt:linktext' => "Account statistics",
+
+ 'usersettings:user' => "Your settings",
+ 'usersettings:user:opt:description' => "This allows you to control user settings.",
+ 'usersettings:user:opt:linktext' => "Change your settings",
+
+ 'usersettings:plugins' => "Tools",
+ 'usersettings:plugins:opt:description' => "Configure settings (if any) for your active tools.",
+ 'usersettings:plugins:opt:linktext' => "Configure your tools",
+
+ 'usersettings:plugins:description' => "This panel allows you to control and configure the personal settings for the tools installed by your system administrator.",
+ 'usersettings:statistics:label:numentities' => "Your content",
+
+ 'usersettings:statistics:yourdetails' => "Your details",
+ 'usersettings:statistics:label:name' => "Full name",
+ 'usersettings:statistics:label:email' => "Email",
+ 'usersettings:statistics:label:membersince' => "Member since",
+ 'usersettings:statistics:label:lastlogin' => "Last logged in",
+
+/**
+ * Activity river
+ */
+ 'river:all' => 'All Site Activity',
+ 'river:mine' => 'My Activity',
+ 'river:friends' => 'Friends Activity',
+ 'river:select' => 'Show %s',
+ 'river:comments:more' => '+%u more',
+ 'river:generic_comment' => 'commented on %s %s',
+
+ 'friends:widget:description' => "Displays some of your friends.",
+ 'friends:num_display' => "Number of friends to display",
+ 'friends:icon_size' => "Icon size",
+ 'friends:tiny' => "tiny",
+ 'friends:small' => "small",
+
+/**
+ * Generic action words
+ */
+
+ 'save' => "Save",
+ 'reset' => 'Reset',
+ 'publish' => "Publish",
+ 'cancel' => "Cancel",
+ 'saving' => "Saving ...",
+ 'update' => "Update",
+ 'preview' => "Preview",
+ 'edit' => "Edit",
+ 'delete' => "Delete",
+ 'accept' => "Accept",
+ 'load' => "Load",
+ 'upload' => "Upload",
+ 'ban' => "Ban",
+ 'unban' => "Unban",
+ 'banned' => "Banned",
+ 'enable' => "Enable",
+ 'disable' => "Disable",
+ 'request' => "Request",
+ 'complete' => "Complete",
+ 'open' => 'Open',
+ 'close' => 'Close',
+ 'reply' => "Reply",
+ 'more' => 'More',
+ 'comments' => 'Comments',
+ 'import' => 'Import',
+ 'export' => 'Export',
+ 'untitled' => 'Untitled',
+ 'help' => 'Help',
+ 'send' => 'Send',
+ 'post' => 'Post',
+ 'submit' => 'Submit',
+ 'comment' => 'Comment',
+ 'upgrade' => 'Upgrade',
+ 'sort' => 'Sort',
+ 'filter' => 'Filter',
+ 'new' => 'New',
+ 'add' => 'Add',
+ 'create' => 'Create',
+ 'remove' => 'Remove',
+ 'revert' => 'Revert',
+
+ 'site' => 'Site',
+ 'activity' => 'Activity',
+ 'members' => 'Members',
+
+ 'up' => 'Up',
+ 'down' => 'Down',
+ 'top' => 'Top',
+ 'bottom' => 'Bottom',
+ 'back' => 'Back',
+
+ 'invite' => "Invite",
+
+ 'resetpassword' => "Reset password",
+ 'makeadmin' => "Make admin",
+ 'removeadmin' => "Remove admin",
+
+ 'option:yes' => "Yes",
+ 'option:no' => "No",
+
+ 'unknown' => 'Unknown',
+
+ 'active' => 'Active',
+ 'total' => 'Total',
+
+ 'learnmore' => "Click here to learn more.",
+
+ 'content' => "content",
+ 'content:latest' => 'Latest activity',
+ 'content:latest:blurb' => 'Alternatively, click here to view the latest content from across the site.',
+
+ 'link:text' => 'view link',
+/**
+ * Generic questions
+ */
+
+ 'question:areyousure' => 'Are you sure?',
+
+/**
+ * Generic data words
+ */
+
+ 'title' => "Title",
+ 'description' => "Description",
+ 'tags' => "Tags",
+ 'spotlight' => "Spotlight",
+ 'all' => "All",
+ 'mine' => "Mine",
+
+ 'by' => 'by',
+ 'none' => 'none',
+
+ 'annotations' => "Annotations",
+ 'relationships' => "Relationships",
+ 'metadata' => "Metadata",
+ 'tagcloud' => "Tag cloud",
+ 'tagcloud:allsitetags' => "All site tags",
+
+ 'on' => 'On',
+ 'off' => 'Off',
+
+/**
+ * Entity actions
+ */
+ 'edit:this' => 'Edit this',
+ 'delete:this' => 'Delete this',
+ 'comment:this' => 'Comment on this',
+
+/**
+ * Input / output strings
+ */
+
+ 'deleteconfirm' => "Are you sure you want to delete this item?",
+ 'deleteconfirm:plural' => "Are you sure you want to delete these items?",
+ 'fileexists' => "A file has already been uploaded. To replace it, select it below:",
+
+/**
+ * User add
+ */
+
+ 'useradd:subject' => 'User account created',
+ 'useradd:body' => '
+%s,
+
+A user account has been created for you at %s. To log in, visit:
+
+%s
+
+And log in with these user credentials:
+
+Username: %s
+Password: %s
+
+Once you have logged in, we highly recommend that you change your password.
+',
+
+/**
+ * System messages
+ **/
+
+ 'systemmessages:dismiss' => "click to dismiss",
+
+
+/**
+ * Import / export
+ */
+ 'importsuccess' => "Import of data was successful",
+ 'importfail' => "OpenDD import of data failed.",
+
+/**
+ * Time
+ */
+
+ 'friendlytime:justnow' => "just now",
+ 'friendlytime:minutes' => "%s minutes ago",
+ 'friendlytime:minutes:singular' => "a minute ago",
+ 'friendlytime:hours' => "%s hours ago",
+ 'friendlytime:hours:singular' => "an hour ago",
+ 'friendlytime:days' => "%s days ago",
+ 'friendlytime:days:singular' => "yesterday",
+ 'friendlytime:date_format' => 'j F Y @ g:ia',
+
+ 'date:month:01' => 'January %s',
+ 'date:month:02' => 'February %s',
+ 'date:month:03' => 'March %s',
+ 'date:month:04' => 'April %s',
+ 'date:month:05' => 'May %s',
+ 'date:month:06' => 'June %s',
+ 'date:month:07' => 'July %s',
+ 'date:month:08' => 'August %s',
+ 'date:month:09' => 'September %s',
+ 'date:month:10' => 'October %s',
+ 'date:month:11' => 'November %s',
+ 'date:month:12' => 'December %s',
+
+
+/**
+ * System settings
+ */
+
+ 'installation:sitename' => "The name of your site:",
+ 'installation:sitedescription' => "Short description of your site (optional):",
+ 'installation:wwwroot' => "The site URL:",
+ 'installation:path' => "The full path of the Elgg installation:",
+ 'installation:dataroot' => "The full path of the data directory:",
+ 'installation:dataroot:warning' => "You must create this directory manually. It should be in a different directory to your Elgg installation.",
+ 'installation:sitepermissions' => "The default access permissions:",
+ 'installation:language' => "The default language for your site:",
+ 'installation:debug' => "Debug mode provides extra information which can be used to diagnose faults. However, it can slow your system down so should only be used if you are having problems:",
+ 'installation:debug:none' => 'Turn off debug mode (recommended)',
+ 'installation:debug:error' => 'Display only critical errors',
+ 'installation:debug:warning' => 'Display errors and warnings',
+ 'installation:debug:notice' => 'Log all errors, warnings and notices',
+
+ // Walled Garden support
+ 'installation:registration:description' => 'User registration is enabled by default. Turn this off if you do not want new users to be able to register on their own.',
+ 'installation:registration:label' => 'Allow new users to register',
+ 'installation:walled_garden:description' => 'Enable the site to run as a private network. This will not allow non logged-in users to view any site pages other than those specifically marked as public.',
+ 'installation:walled_garden:label' => 'Restrict pages to logged-in users',
+
+ 'installation:httpslogin' => "Enable this to have user logins performed over HTTPS. You will need to have https enabled on your server for this to work.",
+ 'installation:httpslogin:label' => "Enable HTTPS logins",
+ 'installation:view' => "Enter the view which will be used as the default for your site or leave this blank for the default view (if in doubt, leave as default):",
+
+ 'installation:siteemail' => "Site email address (used when sending system emails):",
+
+ 'installation:disableapi' => "Elgg provides an API for building web services so that remote applications can interact with your site.",
+ 'installation:disableapi:label' => "Enable Elgg's web services API",
+
+ 'installation:allow_user_default_access:description' => "If checked, individual users will be allowed to set their own default access level that can over-ride the system default access level.",
+ 'installation:allow_user_default_access:label' => "Allow user default access",
+
+ 'installation:simplecache:description' => "The simple cache increases performance by caching static content including some CSS and JavaScript files. Normally you will want this on.",
+ 'installation:simplecache:label' => "Use simple cache (recommended)",
+
+ 'installation:systemcache:description' => "The system cache decreases the loading time of the Elgg engine by caching data to files.",
+ 'installation:systemcache:label' => "Use system cache (recommended)",
+
+ 'upgrading' => 'Upgrading...',
+ 'upgrade:db' => 'Your database was upgraded.',
+ 'upgrade:core' => 'Your Elgg installation was upgraded.',
+ 'upgrade:unlock' => 'Unlock upgrade',
+ 'upgrade:unlock:confirm' => "The database is locked for another upgrade. Running concurrent upgrades is dangerous. You should only continue if you know there is not another upgrade running. Unlock?",
+ 'upgrade:locked' => "Cannot upgrade. Another upgrade is running. To clear the upgrade lock, visit the Admin section.",
+ 'upgrade:unlock:success' => "Upgrade unlocked suscessfully.",
+ 'upgrade:unable_to_upgrade' => 'Unable to upgrade.',
+ 'upgrade:unable_to_upgrade_info' =>
+ 'This installation cannot be upgraded because legacy views
+ were detected in the Elgg core views directory. These views have been deprecated and need to be
+ removed for Elgg to function correctly. If you have not made changes to Elgg core, you can
+ simply delete the views directory and replace it with the one from the latest
+ package of Elgg downloaded from <a href="http://elgg.org">elgg.org</a>.<br /><br />
+
+ If you need detailed instructions, please visit the <a href="http://docs.elgg.org/wiki/Upgrading_Elgg">
+ Upgrading Elgg documentation</a>. If you require assistance, please post to the
+ <a href="http://community.elgg.org/pg/groups/discussion/">Community Support Forums</a>.',
+
+ 'update:twitter_api:deactivated' => 'Twitter API (previously Twitter Service) was deactivated during the upgrade. Please activate it manually if required.',
+ 'update:oauth_api:deactivated' => 'OAuth API (previously OAuth Lib) was deactivated during the upgrade. Please activate it manually if required.',
+
+ 'deprecated:function' => '%s() was deprecated by %s()',
+
+/**
+ * Welcome
+ */
+
+ 'welcome' => "Welcome",
+ 'welcome:user' => 'Welcome %s',
+
+/**
+ * Emails
+ */
+ 'email:settings' => "Email settings",
+ 'email:address:label' => "Your email address",
+
+ 'email:save:success' => "New email address saved.",
+ 'email:save:fail' => "Your new email address could not be saved.",
+
+ 'friend:newfriend:subject' => "%s has made you a friend!",
+ 'friend:newfriend:body' => "%s has made you a friend!
+
+To view their profile, click here:
+
+%s
+
+You cannot reply to this email.",
+
+
+
+ 'email:resetpassword:subject' => "Password reset!",
+ 'email:resetpassword:body' => "Hi %s,
+
+Your password has been reset to: %s",
+
+
+ 'email:resetreq:subject' => "Request for new password.",
+ 'email:resetreq:body' => "Hi %s,
+
+Somebody (from the IP address %s) has requested a new password for their account.
+
+If you requested this, click on the link below. Otherwise ignore this email.
+
+%s
+",
+
+/**
+ * user default access
+ */
+
+ 'default_access:settings' => "Your default access level",
+ 'default_access:label' => "Default access",
+ 'user:default_access:success' => "Your new default access level was saved.",
+ 'user:default_access:failure' => "Your new default access level could not be saved.",
+
+/**
+ * XML-RPC
+ */
+ 'xmlrpc:noinputdata' => "Input data missing",
+
+/**
+ * Comments
+ */
+
+ 'comments:count' => "%s comments",
+
+ 'river:comment:object:default' => '%s commented on %s',
+
+ 'generic_comments:add' => "Leave a comment",
+ 'generic_comments:post' => "Post comment",
+ 'generic_comments:text' => "Comment",
+ 'generic_comments:latest' => "Latest comments",
+ 'generic_comment:posted' => "Your comment was successfully posted.",
+ 'generic_comment:deleted' => "The comment was successfully deleted.",
+ 'generic_comment:blank' => "Sorry, you need to actually put something in your comment before we can save it.",
+ 'generic_comment:notfound' => "Sorry, we could not find the specified item.",
+ 'generic_comment:notdeleted' => "Sorry, we could not delete this comment.",
+ 'generic_comment:failure' => "An unexpected error occurred when adding your comment.",
+ 'generic_comment:none' => 'No comments',
+ 'generic_comment:title' => 'Comment by %s',
+ 'generic_comment:on' => '%s on %s',
+
+ 'generic_comment:email:subject' => 'You have a new comment!',
+ 'generic_comment:email:body' => "You have a new comment on your item \"%s\" from %s. It reads:
+
+
+%s
+
+
+To reply or view the original item, click here:
+
+%s
+
+To view %s's profile, click here:
+
+%s
+
+You cannot reply to this email.",
+
+/**
+ * Entities
+ */
+ 'byline' => 'By %s',
+ 'entity:default:strapline' => 'Created %s by %s',
+ 'entity:default:missingsupport:popup' => 'This entity cannot be displayed correctly. This may be because it requires support provided by a plugin that is no longer installed.',
+
+ 'entity:delete:success' => 'Entity %s has been deleted',
+ 'entity:delete:fail' => 'Entity %s could not be deleted',
+
+
+/**
+ * Action gatekeeper
+ */
+ 'actiongatekeeper:missingfields' => 'Form is missing __token or __ts fields',
+ 'actiongatekeeper:tokeninvalid' => "We encountered an error (token mismatch). This probably means that the page you were using expired.",
+ 'actiongatekeeper:timeerror' => 'The page you were using has expired. Please refresh and try again.',
+ 'actiongatekeeper:pluginprevents' => 'A extension has prevented this form from being submitted.',
+ 'actiongatekeeper:uploadexceeded' => 'The size of file(s) uploaded exceeded the limit set by your site administrator',
+
+
+/**
+ * Word blacklists
+ */
+ 'word:blacklist' => 'and, the, then, but, she, his, her, him, one, not, also, about, now, hence, however, still, likewise, otherwise, therefore, conversely, rather, consequently, furthermore, nevertheless, instead, meanwhile, accordingly, this, seems, what, whom, whose, whoever, whomever',
+
+/**
+ * Tag labels
+ */
+
+ 'tag_names:tags' => 'Tags',
+ 'tags:site_cloud' => 'Site Tag Cloud',
+
+/**
+ * Javascript
+ */
+
+ 'js:security:token_refresh_failed' => 'Cannot contact %s. You may experience problems saving content.',
+ 'js:security:token_refreshed' => 'Connection to %s restored!',
+
+/**
+ * Languages according to ISO 639-1
+ */
+ "aa" => "Afar",
+ "ab" => "Abkhazian",
+ "af" => "Afrikaans",
+ "am" => "Amharic",
+ "ar" => "Arabic",
+ "as" => "Assamese",
+ "ay" => "Aymara",
+ "az" => "Azerbaijani",
+ "ba" => "Bashkir",
+ "be" => "Byelorussian",
+ "bg" => "Bulgarian",
+ "bh" => "Bihari",
+ "bi" => "Bislama",
+ "bn" => "Bengali; Bangla",
+ "bo" => "Tibetan",
+ "br" => "Breton",
+ "ca" => "Catalan",
+ "co" => "Corsican",
+ "cs" => "Czech",
+ "cy" => "Welsh",
+ "da" => "Danish",
+ "de" => "German",
+ "dz" => "Bhutani",
+ "el" => "Greek",
+ "en" => "English",
+ "eo" => "Esperanto",
+ "es" => "Spanish",
+ "et" => "Estonian",
+ "eu" => "Basque",
+ "fa" => "Persian",
+ "fi" => "Finnish",
+ "fj" => "Fiji",
+ "fo" => "Faeroese",
+ "fr" => "French",
+ "fy" => "Frisian",
+ "ga" => "Irish",
+ "gd" => "Scots / Gaelic",
+ "gl" => "Galician",
+ "gn" => "Guarani",
+ "gu" => "Gujarati",
+ "he" => "Hebrew",
+ "ha" => "Hausa",
+ "hi" => "Hindi",
+ "hr" => "Croatian",
+ "hu" => "Hungarian",
+ "hy" => "Armenian",
+ "ia" => "Interlingua",
+ "id" => "Indonesian",
+ "ie" => "Interlingue",
+ "ik" => "Inupiak",
+ //"in" => "Indonesian",
+ "is" => "Icelandic",
+ "it" => "Italian",
+ "iu" => "Inuktitut",
+ "iw" => "Hebrew (obsolete)",
+ "ja" => "Japanese",
+ "ji" => "Yiddish (obsolete)",
+ "jw" => "Javanese",
+ "ka" => "Georgian",
+ "kk" => "Kazakh",
+ "kl" => "Greenlandic",
+ "km" => "Cambodian",
+ "kn" => "Kannada",
+ "ko" => "Korean",
+ "ks" => "Kashmiri",
+ "ku" => "Kurdish",
+ "ky" => "Kirghiz",
+ "la" => "Latin",
+ "ln" => "Lingala",
+ "lo" => "Laothian",
+ "lt" => "Lithuanian",
+ "lv" => "Latvian/Lettish",
+ "mg" => "Malagasy",
+ "mi" => "Maori",
+ "mk" => "Macedonian",
+ "ml" => "Malayalam",
+ "mn" => "Mongolian",
+ "mo" => "Moldavian",
+ "mr" => "Marathi",
+ "ms" => "Malay",
+ "mt" => "Maltese",
+ "my" => "Burmese",
+ "na" => "Nauru",
+ "ne" => "Nepali",
+ "nl" => "Dutch",
+ "no" => "Norwegian",
+ "oc" => "Occitan",
+ "om" => "(Afan) Oromo",
+ "or" => "Oriya",
+ "pa" => "Punjabi",
+ "pl" => "Polish",
+ "ps" => "Pashto / Pushto",
+ "pt" => "Portuguese",
+ "qu" => "Quechua",
+ "rm" => "Rhaeto-Romance",
+ "rn" => "Kirundi",
+ "ro" => "Romanian",
+ "ru" => "Russian",
+ "rw" => "Kinyarwanda",
+ "sa" => "Sanskrit",
+ "sd" => "Sindhi",
+ "sg" => "Sangro",
+ "sh" => "Serbo-Croatian",
+ "si" => "Singhalese",
+ "sk" => "Slovak",
+ "sl" => "Slovenian",
+ "sm" => "Samoan",
+ "sn" => "Shona",
+ "so" => "Somali",
+ "sq" => "Albanian",
+ "sr" => "Serbian",
+ "ss" => "Siswati",
+ "st" => "Sesotho",
+ "su" => "Sundanese",
+ "sv" => "Swedish",
+ "sw" => "Swahili",
+ "ta" => "Tamil",
+ "te" => "Tegulu",
+ "tg" => "Tajik",
+ "th" => "Thai",
+ "ti" => "Tigrinya",
+ "tk" => "Turkmen",
+ "tl" => "Tagalog",
+ "tn" => "Setswana",
+ "to" => "Tonga",
+ "tr" => "Turkish",
+ "ts" => "Tsonga",
+ "tt" => "Tatar",
+ "tw" => "Twi",
+ "ug" => "Uigur",
+ "uk" => "Ukrainian",
+ "ur" => "Urdu",
+ "uz" => "Uzbek",
+ "vi" => "Vietnamese",
+ "vo" => "Volapuk",
+ "wo" => "Wolof",
+ "xh" => "Xhosa",
+ //"y" => "Yiddish",
+ "yi" => "Yiddish",
+ "yo" => "Yoruba",
+ "za" => "Zuang",
+ "zh" => "Chinese",
+ "zu" => "Zulu",
+);
+
+add_translation("en",$english);
diff --git a/mod/blog/actions/blog/auto_save_revision.php b/mod/blog/actions/blog/auto_save_revision.php
new file mode 100644
index 000000000..e33edfaab
--- /dev/null
+++ b/mod/blog/actions/blog/auto_save_revision.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Action called by AJAX periodic auto saving when editing.
+ *
+ * @package Blog
+ */
+
+$guid = get_input('guid');
+$user = elgg_get_logged_in_user_entity();
+$title = htmlspecialchars(get_input('title', '', false), ENT_QUOTES, 'UTF-8');
+$description = get_input('description');
+$excerpt = get_input('excerpt');
+
+// because get_input() doesn't use the default if the input is ''
+if (empty($excerpt)) {
+ $excerpt = $description;
+}
+
+// store errors to pass along
+$error = FALSE;
+
+if ($title && $description) {
+
+ if ($guid) {
+ $entity = get_entity($guid);
+ if (elgg_instanceof($entity, 'object', 'blog') && $entity->canEdit()) {
+ $blog = $entity;
+ } else {
+ $error = elgg_echo('blog:error:post_not_found');
+ }
+ } else {
+ $blog = new ElggBlog();
+ $blog->subtype = 'blog';
+
+ // force draft and private for autosaves.
+ $blog->status = 'unsaved_draft';
+ $blog->access_id = ACCESS_PRIVATE;
+ $blog->title = $title;
+ $blog->description = $description;
+ $blog->excerpt = elgg_get_excerpt($excerpt);
+
+ // mark this as a brand new post so we can work out the
+ // river / revision logic in the real save action.
+ $blog->new_post = TRUE;
+
+ if (!$blog->save()) {
+ $error = elgg_echo('blog:error:cannot_save');
+ }
+ }
+
+ // creat draft annotation
+ if (!$error) {
+ // annotations don't have a "time_updated" so
+ // we have to delete everything or the times are wrong.
+
+ // don't save if nothing changed
+ if ($auto_save_annotations = $blog->getAnnotations('blog_auto_save', 1)) {
+ $auto_save = $auto_save_annotations[0];
+ } else {
+ $auto_save == FALSE;
+ }
+
+ if (!$auto_save) {
+ $annotation_id = $blog->annotate('blog_auto_save', $description);
+ } elseif ($auto_save instanceof ElggAnnotation && $auto_save->value != $description) {
+ $blog->deleteAnnotations('blog_auto_save');
+ $annotation_id = $blog->annotate('blog_auto_save', $description);
+ } elseif ($auto_save instanceof ElggAnnotation && $auto_save->value == $description) {
+ // this isn't an error because we have an up to date annotation.
+ $annotation_id = $auto_save->id;
+ }
+
+ if (!$annotation_id) {
+ $error = elgg_echo('blog:error:cannot_auto_save');
+ }
+ }
+} else {
+ $error = elgg_echo('blog:error:missing:description');
+}
+
+if ($error) {
+ $json = array('success' => FALSE, 'message' => $error);
+ echo json_encode($json);
+} else {
+ $msg = elgg_echo('blog:message:saved');
+ $json = array('success' => TRUE, 'message' => $msg, 'guid' => $blog->getGUID());
+ echo json_encode($json);
+}
+exit;
diff --git a/mod/blog/actions/blog/delete.php b/mod/blog/actions/blog/delete.php
new file mode 100644
index 000000000..ca4eb8a7f
--- /dev/null
+++ b/mod/blog/actions/blog/delete.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Delete blog entity
+ *
+ * @package Blog
+ */
+
+$blog_guid = get_input('guid');
+$blog = get_entity($blog_guid);
+
+if (elgg_instanceof($blog, 'object', 'blog') && $blog->canEdit()) {
+ $container = get_entity($blog->container_guid);
+ if ($blog->delete()) {
+ system_message(elgg_echo('blog:message:deleted_post'));
+ if (elgg_instanceof($container, 'group')) {
+ forward("blog/group/$container->guid/all");
+ } else {
+ forward("blog/owner/$container->username");
+ }
+ } else {
+ register_error(elgg_echo('blog:error:cannot_delete_post'));
+ }
+} else {
+ register_error(elgg_echo('blog:error:post_not_found'));
+}
+
+forward(REFERER); \ No newline at end of file
diff --git a/mod/blog/actions/blog/save.php b/mod/blog/actions/blog/save.php
new file mode 100644
index 000000000..070c96398
--- /dev/null
+++ b/mod/blog/actions/blog/save.php
@@ -0,0 +1,177 @@
+<?php
+/**
+ * Save blog entity
+ *
+ * @package Blog
+ */
+
+// start a new sticky form session in case of failure
+elgg_make_sticky_form('blog');
+
+// save or preview
+$save = (bool)get_input('save');
+
+// store errors to pass along
+$error = FALSE;
+$error_forward_url = REFERER;
+$user = elgg_get_logged_in_user_entity();
+
+// edit or create a new entity
+$guid = get_input('guid');
+
+if ($guid) {
+ $entity = get_entity($guid);
+ if (elgg_instanceof($entity, 'object', 'blog') && $entity->canEdit()) {
+ $blog = $entity;
+ } else {
+ register_error(elgg_echo('blog:error:post_not_found'));
+ forward(get_input('forward', REFERER));
+ }
+
+ // save some data for revisions once we save the new edit
+ $revision_text = $blog->description;
+ $new_post = $blog->new_post;
+} else {
+ $blog = new ElggBlog();
+ $blog->subtype = 'blog';
+ $new_post = TRUE;
+}
+
+// set the previous status for the hooks to update the time_created and river entries
+$old_status = $blog->status;
+
+// set defaults and required values.
+$values = array(
+ 'title' => '',
+ 'description' => '',
+ 'status' => 'draft',
+ 'access_id' => ACCESS_DEFAULT,
+ 'comments_on' => 'On',
+ 'excerpt' => '',
+ 'tags' => '',
+ 'container_guid' => (int)get_input('container_guid'),
+);
+
+// fail if a required entity isn't set
+$required = array('title', 'description');
+
+// load from POST and do sanity and access checking
+foreach ($values as $name => $default) {
+ if ($name === 'title') {
+ $value = htmlspecialchars(get_input('title', $default, false), ENT_QUOTES, 'UTF-8');
+ } else {
+ $value = get_input($name, $default);
+ }
+
+ if (in_array($name, $required) && empty($value)) {
+ $error = elgg_echo("blog:error:missing:$name");
+ }
+
+ if ($error) {
+ break;
+ }
+
+ switch ($name) {
+ case 'tags':
+ if ($value) {
+ $values[$name] = string_to_tag_array($value);
+ } else {
+ unset ($values[$name]);
+ }
+ break;
+
+ case 'excerpt':
+ if ($value) {
+ $values[$name] = elgg_get_excerpt($value);
+ }
+ break;
+
+ case 'container_guid':
+ // this can't be empty or saving the base entity fails
+ if (!empty($value)) {
+ if (can_write_to_container($user->getGUID(), $value)) {
+ $values[$name] = $value;
+ } else {
+ $error = elgg_echo("blog:error:cannot_write_to_container");
+ }
+ } else {
+ unset($values[$name]);
+ }
+ break;
+
+ // don't try to set the guid
+ case 'guid':
+ unset($values['guid']);
+ break;
+
+ default:
+ $values[$name] = $value;
+ break;
+ }
+}
+
+// if preview, force status to be draft
+if ($save == false) {
+ $values['status'] = 'draft';
+}
+
+// assign values to the entity, stopping on error.
+if (!$error) {
+ foreach ($values as $name => $value) {
+ if (FALSE === ($blog->$name = $value)) {
+ $error = elgg_echo('blog:error:cannot_save' . "$name=$value");
+ break;
+ }
+ }
+}
+
+// only try to save base entity if no errors
+if (!$error) {
+ if ($blog->save()) {
+ // remove sticky form entries
+ elgg_clear_sticky_form('blog');
+
+ // remove autosave draft if exists
+ $blog->deleteAnnotations('blog_auto_save');
+
+ // no longer a brand new post.
+ $blog->deleteMetadata('new_post');
+
+ // if this was an edit, create a revision annotation
+ if (!$new_post && $revision_text) {
+ $blog->annotate('blog_revision', $revision_text);
+ }
+
+ system_message(elgg_echo('blog:message:saved'));
+
+ $status = $blog->status;
+
+ // add to river if changing status or published, regardless of new post
+ // because we remove it for drafts.
+ if (($new_post || $old_status == 'draft') && $status == 'published') {
+ add_to_river('river/object/blog/create', 'create', $blog->owner_guid, $blog->getGUID());
+
+ if ($guid) {
+ $blog->time_created = time();
+ $blog->save();
+ }
+ } elseif ($old_status == 'published' && $status == 'draft') {
+ elgg_delete_river(array(
+ 'object_guid' => $blog->guid,
+ 'action_type' => 'create',
+ ));
+ }
+
+ if ($blog->status == 'published' || $save == false) {
+ forward($blog->getURL());
+ } else {
+ forward("blog/edit/$blog->guid");
+ }
+ } else {
+ register_error(elgg_echo('blog:error:cannot_save'));
+ forward($error_forward_url);
+ }
+} else {
+ register_error($error);
+ forward($error_forward_url);
+}
diff --git a/mod/blog/activate.php b/mod/blog/activate.php
new file mode 100644
index 000000000..a90525291
--- /dev/null
+++ b/mod/blog/activate.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Register the ElggBlog class for the object/blog subtype
+ */
+
+if (get_subtype_id('object', 'blog')) {
+ update_subtype('object', 'blog', 'ElggBlog');
+} else {
+ add_subtype('object', 'blog', 'ElggBlog');
+}
diff --git a/mod/blog/classes/ElggBlog.php b/mod/blog/classes/ElggBlog.php
new file mode 100644
index 000000000..8d4401c57
--- /dev/null
+++ b/mod/blog/classes/ElggBlog.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Extended class to override the time_created
+ *
+ * @property string $status The published status of the blog post (published, draft)
+ * @property string $comments_on Whether commenting is allowed (Off, On)
+ * @property string $excerpt An excerpt of the blog post used when displaying the post
+ */
+class ElggBlog extends ElggObject {
+
+ /**
+ * Set subtype to blog.
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['subtype'] = "blog";
+ }
+
+ /**
+ * Can a user comment on this blog?
+ *
+ * @see ElggObject::canComment()
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ * @return bool
+ * @since 1.8.0
+ */
+ public function canComment($user_guid = 0) {
+ $result = parent::canComment($user_guid);
+ if ($result == false) {
+ return $result;
+ }
+
+ if ($this->comments_on == 'Off') {
+ return false;
+ }
+
+ return true;
+ }
+
+} \ No newline at end of file
diff --git a/mod/blog/deactivate.php b/mod/blog/deactivate.php
new file mode 100644
index 000000000..4a275fa94
--- /dev/null
+++ b/mod/blog/deactivate.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Deregister the ElggBlog class
+ */
+
+update_subtype('object', 'blog');
diff --git a/mod/blog/languages/en.php b/mod/blog/languages/en.php
new file mode 100644
index 000000000..5248a6f51
--- /dev/null
+++ b/mod/blog/languages/en.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Blog English language file.
+ *
+ */
+
+$english = array(
+ 'blog' => 'Blogs',
+ 'blog:blogs' => 'Blogs',
+ 'blog:revisions' => 'Revisions',
+ 'blog:archives' => 'Archives',
+ 'blog:blog' => 'Blog',
+ 'item:object:blog' => 'Blogs',
+
+ 'blog:title:user_blogs' => '%s\'s blogs',
+ 'blog:title:all_blogs' => 'All site blogs',
+ 'blog:title:friends' => 'Friends\' blogs',
+
+ 'blog:group' => 'Group blog',
+ 'blog:enableblog' => 'Enable group blog',
+ 'blog:write' => 'Write a blog post',
+
+ // Editing
+ 'blog:add' => 'Add blog post',
+ 'blog:edit' => 'Edit blog post',
+ 'blog:excerpt' => 'Excerpt',
+ 'blog:body' => 'Body',
+ 'blog:save_status' => 'Last saved: ',
+ 'blog:never' => 'Never',
+
+ // Statuses
+ 'blog:status' => 'Status',
+ 'blog:status:draft' => 'Draft',
+ 'blog:status:published' => 'Published',
+ 'blog:status:unsaved_draft' => 'Unsaved Draft',
+
+ 'blog:revision' => 'Revision',
+ 'blog:auto_saved_revision' => 'Auto Saved Revision',
+
+ // messages
+ 'blog:message:saved' => 'Blog post saved.',
+ 'blog:error:cannot_save' => 'Cannot save blog post.',
+ 'blog:error:cannot_write_to_container' => 'Insufficient access to save blog to group.',
+ 'blog:messages:warning:draft' => 'There is an unsaved draft of this post!',
+ 'blog:edit_revision_notice' => '(Old version)',
+ 'blog:message:deleted_post' => 'Blog post deleted.',
+ 'blog:error:cannot_delete_post' => 'Cannot delete blog post.',
+ 'blog:none' => 'No blog posts',
+ 'blog:error:missing:title' => 'Please enter a blog title!',
+ 'blog:error:missing:description' => 'Please enter the body of your blog!',
+ 'blog:error:cannot_edit_post' => 'This post may not exist or you may not have permissions to edit it.',
+ 'blog:error:revision_not_found' => 'Cannot find this revision.',
+
+ // river
+ 'river:create:object:blog' => '%s published a blog post %s',
+ 'river:comment:object:blog' => '%s commented on the blog %s',
+
+ // notifications
+ 'blog:newpost' => 'A new blog post',
+ 'blog:notification' =>
+'
+%s made a new blog post.
+
+%s
+%s
+
+View and comment on the new blog post:
+%s
+',
+
+ // widget
+ 'blog:widget:description' => 'Display your latest blog posts',
+ 'blog:moreblogs' => 'More blog posts',
+ 'blog:numbertodisplay' => 'Number of blog posts to display',
+ 'blog:noblogs' => 'No blog posts'
+);
+
+add_translation('en', $english);
diff --git a/mod/blog/lib/blog.php b/mod/blog/lib/blog.php
new file mode 100644
index 000000000..3c71dfbab
--- /dev/null
+++ b/mod/blog/lib/blog.php
@@ -0,0 +1,474 @@
+<?php
+/**
+ * Blog helper functions
+ *
+ * @package Blog
+ */
+
+
+/**
+ * Get page components to view a blog post.
+ *
+ * @param int $guid GUID of a blog entity.
+ * @return array
+ */
+function blog_get_page_content_read($guid = NULL) {
+
+ $return = array();
+
+ $blog = get_entity($guid);
+
+ // no header or tabs for viewing an individual blog
+ $return['filter'] = '';
+
+ if (!elgg_instanceof($blog, 'object', 'blog')) {
+ register_error(elgg_echo('noaccess'));
+ $_SESSION['last_forward_from'] = current_page_url();
+ forward('');
+ }
+
+ $return['title'] = $blog->title;
+
+ $container = $blog->getContainerEntity();
+ $crumbs_title = $container->name;
+ if (elgg_instanceof($container, 'group')) {
+ elgg_push_breadcrumb($crumbs_title, "blog/group/$container->guid/all");
+ } else {
+ elgg_push_breadcrumb($crumbs_title, "blog/owner/$container->username");
+ }
+
+ elgg_push_breadcrumb($blog->title);
+ $return['content'] = elgg_view_entity($blog, array('full_view' => true));
+ //check to see if comment are on
+ if ($blog->comments_on != 'Off') {
+ $return['content'] .= elgg_view_comments($blog);
+ }
+
+ return $return;
+}
+
+/**
+ * Get page components to list a user's or all blogs.
+ *
+ * @param int $container_guid The GUID of the page owner or NULL for all blogs
+ * @return array
+ */
+function blog_get_page_content_list($container_guid = NULL) {
+
+ $return = array();
+
+ $return['filter_context'] = $container_guid ? 'mine' : 'all';
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'blog',
+ 'full_view' => false,
+ );
+
+ $current_user = elgg_get_logged_in_user_entity();
+
+ if ($container_guid) {
+ // access check for closed groups
+ group_gatekeeper();
+
+ $options['container_guid'] = $container_guid;
+ $container = get_entity($container_guid);
+ if (!$container) {
+
+ }
+ $return['title'] = elgg_echo('blog:title:user_blogs', array($container->name));
+
+ $crumbs_title = $container->name;
+ elgg_push_breadcrumb($crumbs_title);
+
+ if ($current_user && ($container_guid == $current_user->guid)) {
+ $return['filter_context'] = 'mine';
+ } else if (elgg_instanceof($container, 'group')) {
+ $return['filter'] = false;
+ } else {
+ // do not show button or select a tab when viewing someone else's posts
+ $return['filter_context'] = 'none';
+ }
+ } else {
+ $return['filter_context'] = 'all';
+ $return['title'] = elgg_echo('blog:title:all_blogs');
+ elgg_pop_breadcrumb();
+ elgg_push_breadcrumb(elgg_echo('blog:blogs'));
+ }
+
+ elgg_register_title_button();
+
+ // show all posts for admin or users looking at their own blogs
+ // show only published posts for other users.
+ $show_only_published = true;
+ if ($current_user) {
+ if (($current_user->guid == $container_guid) || $current_user->isAdmin()) {
+ $show_only_published = false;
+ }
+ }
+ if ($show_only_published) {
+ $options['metadata_name_value_pairs'] = array(
+ array('name' => 'status', 'value' => 'published'),
+ );
+ }
+
+ $list = elgg_list_entities_from_metadata($options);
+ if (!$list) {
+ $return['content'] = elgg_echo('blog:none');
+ } else {
+ $return['content'] = $list;
+ }
+
+ return $return;
+}
+
+/**
+ * Get page components to list of the user's friends' posts.
+ *
+ * @param int $user_guid
+ * @return array
+ */
+function blog_get_page_content_friends($user_guid) {
+
+ $user = get_user($user_guid);
+ if (!$user) {
+ forward('blog/all');
+ }
+
+ $return = array();
+
+ $return['filter_context'] = 'friends';
+ $return['title'] = elgg_echo('blog:title:friends');
+
+ $crumbs_title = $user->name;
+ elgg_push_breadcrumb($crumbs_title, "blog/owner/{$user->username}");
+ elgg_push_breadcrumb(elgg_echo('friends'));
+
+ elgg_register_title_button();
+
+ if (!$friends = get_user_friends($user_guid, ELGG_ENTITIES_ANY_VALUE, 0)) {
+ $return['content'] .= elgg_echo('friends:none:you');
+ return $return;
+ } else {
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'blog',
+ 'full_view' => FALSE,
+ );
+
+ foreach ($friends as $friend) {
+ $options['container_guids'][] = $friend->getGUID();
+ }
+
+ // admin / owners can see any posts
+ // everyone else can only see published posts
+ $show_only_published = true;
+ $current_user = elgg_get_logged_in_user_entity();
+ if ($current_user) {
+ if (($user_guid == $current_user->guid) || $current_user->isAdmin()) {
+ $show_only_published = false;
+ }
+ }
+ if ($show_only_published) {
+ $options['metadata_name_value_pairs'][] = array(
+ array('name' => 'status', 'value' => 'published')
+ );
+ }
+
+ $list = elgg_list_entities_from_metadata($options);
+ if (!$list) {
+ $return['content'] = elgg_echo('blog:none');
+ } else {
+ $return['content'] = $list;
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Get page components to show blogs with publish dates between $lower and $upper
+ *
+ * @param int $owner_guid The GUID of the owner of this page
+ * @param int $lower Unix timestamp
+ * @param int $upper Unix timestamp
+ * @return array
+ */
+function blog_get_page_content_archive($owner_guid, $lower = 0, $upper = 0) {
+
+ $now = time();
+
+ $owner = get_entity($owner_guid);
+ elgg_set_page_owner_guid($owner_guid);
+
+ $crumbs_title = $owner->name;
+ if (elgg_instanceof($owner, 'user')) {
+ $url = "blog/owner/{$owner->username}";
+ } else {
+ $url = "blog/group/$owner->guid/all";
+ }
+ elgg_push_breadcrumb($crumbs_title, $url);
+ elgg_push_breadcrumb(elgg_echo('blog:archives'));
+
+ if ($lower) {
+ $lower = (int)$lower;
+ }
+
+ if ($upper) {
+ $upper = (int)$upper;
+ }
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'blog',
+ 'full_view' => FALSE,
+ );
+
+ if ($owner_guid) {
+ $options['container_guid'] = $owner_guid;
+ }
+
+ // admin / owners can see any posts
+ // everyone else can only see published posts
+ if (!(elgg_is_admin_logged_in() || (elgg_is_logged_in() && $owner_guid == elgg_get_logged_in_user_guid()))) {
+ if ($upper > $now) {
+ $upper = $now;
+ }
+
+ $options['metadata_name_value_pairs'] = array(
+ array('name' => 'status', 'value' => 'published')
+ );
+ }
+
+ if ($lower) {
+ $options['created_time_lower'] = $lower;
+ }
+
+ if ($upper) {
+ $options['created_time_upper'] = $upper;
+ }
+
+ $list = elgg_list_entities_from_metadata($options);
+ if (!$list) {
+ $content = elgg_echo('blog:none');
+ } else {
+ $content = $list;
+ }
+
+ $title = elgg_echo('date:month:' . date('m', $lower), array(date('Y', $lower)));
+
+ return array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+}
+
+/**
+ * Get page components to edit/create a blog post.
+ *
+ * @param string $page 'edit' or 'new'
+ * @param int $guid GUID of blog post or container
+ * @param int $revision Annotation id for revision to edit (optional)
+ * @return array
+ */
+function blog_get_page_content_edit($page, $guid = 0, $revision = NULL) {
+
+ elgg_load_js('elgg.blog');
+
+ $return = array(
+ 'filter' => '',
+ );
+
+ $vars = array();
+ $vars['id'] = 'blog-post-edit';
+ $vars['class'] = 'elgg-form-alt';
+
+ $sidebar = '';
+ if ($page == 'edit') {
+ $blog = get_entity((int)$guid);
+
+ $title = elgg_echo('blog:edit');
+
+ if (elgg_instanceof($blog, 'object', 'blog') && $blog->canEdit()) {
+ $vars['entity'] = $blog;
+
+ $title .= ": \"$blog->title\"";
+
+ if ($revision) {
+ $revision = elgg_get_annotation_from_id((int)$revision);
+ $vars['revision'] = $revision;
+ $title .= ' ' . elgg_echo('blog:edit_revision_notice');
+
+ if (!$revision || !($revision->entity_guid == $guid)) {
+ $content = elgg_echo('blog:error:revision_not_found');
+ $return['content'] = $content;
+ $return['title'] = $title;
+ return $return;
+ }
+ }
+
+ $body_vars = blog_prepare_form_vars($blog, $revision);
+
+ elgg_push_breadcrumb($blog->title, $blog->getURL());
+ elgg_push_breadcrumb(elgg_echo('edit'));
+
+ elgg_load_js('elgg.blog');
+
+ $content = elgg_view_form('blog/save', $vars, $body_vars);
+ $sidebar = elgg_view('blog/sidebar/revisions', $vars);
+ } else {
+ $content = elgg_echo('blog:error:cannot_edit_post');
+ }
+ } else {
+ elgg_push_breadcrumb(elgg_echo('blog:add'));
+ $body_vars = blog_prepare_form_vars(null);
+
+ $title = elgg_echo('blog:add');
+ $content = elgg_view_form('blog/save', $vars, $body_vars);
+ }
+
+ $return['title'] = $title;
+ $return['content'] = $content;
+ $return['sidebar'] = $sidebar;
+ return $return;
+}
+
+/**
+ * Pull together blog variables for the save form
+ *
+ * @param ElggBlog $post
+ * @param ElggAnnotation $revision
+ * @return array
+ */
+function blog_prepare_form_vars($post = NULL, $revision = NULL) {
+
+ // input names => defaults
+ $values = array(
+ 'title' => NULL,
+ 'description' => NULL,
+ 'status' => 'published',
+ 'access_id' => ACCESS_DEFAULT,
+ 'comments_on' => 'On',
+ 'excerpt' => NULL,
+ 'tags' => NULL,
+ 'container_guid' => NULL,
+ 'guid' => NULL,
+ 'draft_warning' => '',
+ );
+
+ if ($post) {
+ foreach (array_keys($values) as $field) {
+ if (isset($post->$field)) {
+ $values[$field] = $post->$field;
+ }
+ }
+ }
+
+ if (elgg_is_sticky_form('blog')) {
+ $sticky_values = elgg_get_sticky_values('blog');
+ foreach ($sticky_values as $key => $value) {
+ $values[$key] = $value;
+ }
+ }
+
+ elgg_clear_sticky_form('blog');
+
+ if (!$post) {
+ return $values;
+ }
+
+ // load the revision annotation if requested
+ if ($revision instanceof ElggAnnotation && $revision->entity_guid == $post->getGUID()) {
+ $values['revision'] = $revision;
+ $values['description'] = $revision->value;
+ }
+
+ // display a notice if there's an autosaved annotation
+ // and we're not editing it.
+ if ($auto_save_annotations = $post->getAnnotations('blog_auto_save', 1)) {
+ $auto_save = $auto_save_annotations[0];
+ } else {
+ $auto_save = false;
+ }
+
+ if ($auto_save && $auto_save->id != $revision->id) {
+ $values['draft_warning'] = elgg_echo('blog:messages:warning:draft');
+ }
+
+ return $values;
+}
+
+/**
+ * Forward to the new style of URLs
+ *
+ * Pre-1.7.5
+ * Group blogs page: /blog/group:<container_guid>/
+ * Group blog view: /blog/group:<container_guid>/read/<guid>/<title>
+ * 1.7.5-1.8
+ * Group blogs page: /blog/owner/group:<container_guid>/
+ * Group blog view: /blog/read/<guid>
+ *
+ *
+ * @param string $page
+ */
+function blog_url_forwarder($page) {
+
+ $viewtype = elgg_get_viewtype();
+ $qs = ($viewtype === 'default') ? "" : "?view=$viewtype";
+
+ $url = "blog/all";
+
+ // easier to work with & no notices
+ $page = array_pad($page, 4, "");
+
+ // group usernames
+ if (preg_match('~/group\:([0-9]+)/~', "/{$page[0]}/{$page[1]}/", $matches)) {
+ $guid = $matches[1];
+ $entity = get_entity($guid);
+ if (elgg_instanceof($entity, 'group')) {
+ if (!empty($page[2])) {
+ $url = "blog/view/$page[2]/";
+ } else {
+ $url = "blog/group/$guid/all";
+ }
+ register_error(elgg_echo("changebookmark"));
+ forward($url . $qs);
+ }
+ }
+
+ if (empty($page[0])) {
+ return;
+ }
+
+ // user usernames
+ $user = get_user_by_username($page[0]);
+ if (!$user) {
+ return;
+ }
+
+ if (empty($page[1])) {
+ $page[1] = 'owner';
+ }
+
+ switch ($page[1]) {
+ case "read":
+ $url = "blog/view/{$page[2]}/{$page[3]}";
+ break;
+ case "archive":
+ $url = "blog/archive/{$page[0]}/{$page[2]}/{$page[3]}";
+ break;
+ case "friends":
+ $url = "blog/friends/{$page[0]}";
+ break;
+ case "new":
+ $url = "blog/add/$user->guid";
+ break;
+ case "owner":
+ $url = "blog/owner/{$page[0]}";
+ break;
+ }
+
+ register_error(elgg_echo("changebookmark"));
+ forward($url . $qs);
+}
diff --git a/mod/blog/manifest.xml b/mod/blog/manifest.xml
new file mode 100644
index 000000000..29ee1bfc8
--- /dev/null
+++ b/mod/blog/manifest.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Blog</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>content</category>
+ <category>widget</category>
+ <blurb>Blog plugin</blurb>
+ <description>Adds simple blogging capabilities to your Elgg installation.</description>
+ <website>http://elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/blog/start.php b/mod/blog/start.php
new file mode 100644
index 000000000..eb6eee05f
--- /dev/null
+++ b/mod/blog/start.php
@@ -0,0 +1,282 @@
+<?php
+/**
+ * Blogs
+ *
+ * @package Blog
+ *
+ * @todo
+ * - Either drop support for "publish date" or duplicate more entity getter
+ * functions to work with a non-standard time_created.
+ * - Pingbacks
+ * - Notifications
+ * - River entry for posts saved as drafts and later published
+ */
+
+elgg_register_event_handler('init', 'system', 'blog_init');
+
+/**
+ * Init blog plugin.
+ */
+function blog_init() {
+
+ elgg_register_library('elgg:blog', elgg_get_plugins_path() . 'blog/lib/blog.php');
+
+ // add a site navigation item
+ $item = new ElggMenuItem('blog', elgg_echo('blog:blogs'), 'blog/all');
+ elgg_register_menu_item('site', $item);
+
+ elgg_register_event_handler('upgrade', 'upgrade', 'blog_run_upgrades');
+
+ // add to the main css
+ elgg_extend_view('css/elgg', 'blog/css');
+
+ // register the blog's JavaScript
+ $blog_js = elgg_get_simplecache_url('js', 'blog/save_draft');
+ elgg_register_simplecache_view('js/blog/save_draft');
+ elgg_register_js('elgg.blog', $blog_js);
+
+ // routing of urls
+ elgg_register_page_handler('blog', 'blog_page_handler');
+
+ // override the default url to view a blog object
+ elgg_register_entity_url_handler('object', 'blog', 'blog_url_handler');
+
+ // notifications
+ register_notification_object('object', 'blog', elgg_echo('blog:newpost'));
+ elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'blog_notify_message');
+
+ // add blog link to
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'blog_owner_block_menu');
+
+ // pingbacks
+ //elgg_register_event_handler('create', 'object', 'blog_incoming_ping');
+ //elgg_register_plugin_hook_handler('pingback:object:subtypes', 'object', 'blog_pingback_subtypes');
+
+ // Register for search.
+ elgg_register_entity_type('object', 'blog');
+
+ // Add group option
+ add_group_tool_option('blog', elgg_echo('blog:enableblog'), true);
+ elgg_extend_view('groups/tool_latest', 'blog/group_module');
+
+ // add a blog widget
+ elgg_register_widget_type('blog', elgg_echo('blog'), elgg_echo('blog:widget:description'));
+
+ // register actions
+ $action_path = elgg_get_plugins_path() . 'blog/actions/blog';
+ elgg_register_action('blog/save', "$action_path/save.php");
+ elgg_register_action('blog/auto_save_revision', "$action_path/auto_save_revision.php");
+ elgg_register_action('blog/delete', "$action_path/delete.php");
+
+ // entity menu
+ elgg_register_plugin_hook_handler('register', 'menu:entity', 'blog_entity_menu_setup');
+
+ // ecml
+ elgg_register_plugin_hook_handler('get_views', 'ecml', 'blog_ecml_views_hook');
+}
+
+/**
+ * Dispatches blog pages.
+ * URLs take the form of
+ * All blogs: blog/all
+ * User's blogs: blog/owner/<username>
+ * Friends' blog: blog/friends/<username>
+ * User's archives: blog/archives/<username>/<time_start>/<time_stop>
+ * Blog post: blog/view/<guid>/<title>
+ * New post: blog/add/<guid>
+ * Edit post: blog/edit/<guid>/<revision>
+ * Preview post: blog/preview/<guid>
+ * Group blog: blog/group/<guid>/all
+ *
+ * Title is ignored
+ *
+ * @todo no archives for all blogs or friends
+ *
+ * @param array $page
+ * @return bool
+ */
+function blog_page_handler($page) {
+
+ elgg_load_library('elgg:blog');
+
+ // forward to correct URL for blog pages pre-1.8
+ blog_url_forwarder($page);
+
+ // push all blogs breadcrumb
+ elgg_push_breadcrumb(elgg_echo('blog:blogs'), "blog/all");
+
+ if (!isset($page[0])) {
+ $page[0] = 'all';
+ }
+
+ $page_type = $page[0];
+ switch ($page_type) {
+ case 'owner':
+ $user = get_user_by_username($page[1]);
+ $params = blog_get_page_content_list($user->guid);
+ break;
+ case 'friends':
+ $user = get_user_by_username($page[1]);
+ $params = blog_get_page_content_friends($user->guid);
+ break;
+ case 'archive':
+ $user = get_user_by_username($page[1]);
+ $params = blog_get_page_content_archive($user->guid, $page[2], $page[3]);
+ break;
+ case 'view':
+ $params = blog_get_page_content_read($page[1]);
+ break;
+ case 'read': // Elgg 1.7 compatibility
+ register_error(elgg_echo("changebookmark"));
+ forward("blog/view/{$page[1]}");
+ break;
+ case 'add':
+ gatekeeper();
+ $params = blog_get_page_content_edit($page_type, $page[1]);
+ break;
+ case 'edit':
+ gatekeeper();
+ $params = blog_get_page_content_edit($page_type, $page[1], $page[2]);
+ break;
+ case 'group':
+ if ($page[2] == 'all') {
+ $params = blog_get_page_content_list($page[1]);
+ } else {
+ $params = blog_get_page_content_archive($page[1], $page[3], $page[4]);
+ }
+ break;
+ case 'all':
+ $params = blog_get_page_content_list();
+ break;
+ default:
+ return false;
+ }
+
+ if (isset($params['sidebar'])) {
+ $params['sidebar'] .= elgg_view('blog/sidebar', array('page' => $page_type));
+ } else {
+ $params['sidebar'] = elgg_view('blog/sidebar', array('page' => $page_type));
+ }
+
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($params['title'], $body);
+ return true;
+}
+
+/**
+ * Format and return the URL for blogs.
+ *
+ * @param ElggObject $entity Blog object
+ * @return string URL of blog.
+ */
+function blog_url_handler($entity) {
+ if (!$entity->getOwnerEntity()) {
+ // default to a standard view if no owner.
+ return FALSE;
+ }
+
+ $friendly_title = elgg_get_friendly_title($entity->title);
+
+ return "blog/view/{$entity->guid}/$friendly_title";
+}
+
+/**
+ * Add a menu item to an ownerblock
+ */
+function blog_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'user')) {
+ $url = "blog/owner/{$params['entity']->username}";
+ $item = new ElggMenuItem('blog', elgg_echo('blog'), $url);
+ $return[] = $item;
+ } else {
+ if ($params['entity']->blog_enable != "no") {
+ $url = "blog/group/{$params['entity']->guid}/all";
+ $item = new ElggMenuItem('blog', elgg_echo('blog:group'), $url);
+ $return[] = $item;
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Add particular blog links/info to entity menu
+ */
+function blog_entity_menu_setup($hook, $type, $return, $params) {
+ if (elgg_in_context('widgets')) {
+ return $return;
+ }
+
+ $entity = $params['entity'];
+ $handler = elgg_extract('handler', $params, false);
+ if ($handler != 'blog') {
+ return $return;
+ }
+
+ if ($entity->canEdit() && $entity->status != 'published') {
+ $status_text = elgg_echo("blog:status:{$entity->status}");
+ $options = array(
+ 'name' => 'published_status',
+ 'text' => "<span>$status_text</span>",
+ 'href' => false,
+ 'priority' => 150,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+
+ return $return;
+}
+
+/**
+ * Set the notification message body
+ *
+ * @param string $hook Hook name
+ * @param string $type Hook type
+ * @param string $message The current message body
+ * @param array $params Parameters about the blog posted
+ * @return string
+ */
+function blog_notify_message($hook, $type, $message, $params) {
+ $entity = $params['entity'];
+ $to_entity = $params['to_entity'];
+ $method = $params['method'];
+ if (elgg_instanceof($entity, 'object', 'blog')) {
+ $descr = $entity->excerpt;
+ $title = $entity->title;
+ $owner = $entity->getOwnerEntity();
+ return elgg_echo('blog:notification', array(
+ $owner->name,
+ $title,
+ $descr,
+ $entity->getURL()
+ ));
+ }
+ return null;
+}
+
+/**
+ * Register blogs with ECML.
+ */
+function blog_ecml_views_hook($hook, $entity_type, $return_value, $params) {
+ $return_value['object/blog'] = elgg_echo('blog:blogs');
+
+ return $return_value;
+}
+
+/**
+ * Upgrade from 1.7 to 1.8.
+ */
+function blog_run_upgrades($event, $type, $details) {
+ $blog_upgrade_version = elgg_get_plugin_setting('upgrade_version', 'blogs');
+
+ if (!$blog_upgrade_version) {
+ // When upgrading, check if the ElggBlog class has been registered as this
+ // was added in Elgg 1.8
+ if (!update_subtype('object', 'blog', 'ElggBlog')) {
+ add_subtype('object', 'blog', 'ElggBlog');
+ }
+
+ elgg_set_plugin_setting('upgrade_version', 1, 'blogs');
+ }
+}
diff --git a/mod/blog/views/default/blog/css.php b/mod/blog/views/default/blog/css.php
new file mode 100644
index 000000000..12ac4df2a
--- /dev/null
+++ b/mod/blog/views/default/blog/css.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Blog CSS
+ *
+ * @package Blog
+*/
+?>
+
+/* Blog Plugin */
+
+/* force tinymce input height for a more useful editing / blog creation area */
+form#blog-post-edit #description_parent #description_ifr {
+ height:400px !important;
+}
diff --git a/mod/blog/views/default/blog/group_module.php b/mod/blog/views/default/blog/group_module.php
new file mode 100644
index 000000000..6082cdafd
--- /dev/null
+++ b/mod/blog/views/default/blog/group_module.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Group blog module
+ */
+
+$group = elgg_get_page_owner_entity();
+
+if ($group->blog_enable == "no") {
+ return true;
+}
+
+$all_link = elgg_view('output/url', array(
+ 'href' => "blog/group/$group->guid/all",
+ 'text' => elgg_echo('link:view:all'),
+ 'is_trusted' => true,
+));
+
+elgg_push_context('widgets');
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'blog',
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'metadata_name_value_pairs' => array('name' => 'status', 'value' => 'published'),
+ 'limit' => 6,
+ 'full_view' => false,
+ 'pagination' => false,
+);
+$content = elgg_list_entities_from_metadata($options);
+elgg_pop_context();
+
+if (!$content) {
+ $content = '<p>' . elgg_echo('blog:none') . '</p>';
+}
+
+$new_link = elgg_view('output/url', array(
+ 'href' => "blog/add/$group->guid",
+ 'text' => elgg_echo('blog:write'),
+ 'is_trusted' => true,
+));
+
+echo elgg_view('groups/profile/module', array(
+ 'title' => elgg_echo('blog:group'),
+ 'content' => $content,
+ 'all_link' => $all_link,
+ 'add_link' => $new_link,
+));
diff --git a/mod/blog/views/default/blog/sidebar.php b/mod/blog/views/default/blog/sidebar.php
new file mode 100644
index 000000000..0ae2b431c
--- /dev/null
+++ b/mod/blog/views/default/blog/sidebar.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Blog sidebar
+ *
+ * @package Blog
+ */
+
+// fetch & display latest comments
+if ($vars['page'] == 'all') {
+ echo elgg_view('page/elements/comments_block', array(
+ 'subtypes' => 'blog',
+ ));
+} elseif ($vars['page'] == 'owner') {
+ echo elgg_view('page/elements/comments_block', array(
+ 'subtypes' => 'blog',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+ ));
+}
+
+// only users can have archives at present
+if ($vars['page'] == 'owner' || $vars['page'] == 'group') {
+ echo elgg_view('blog/sidebar/archives', $vars);
+}
+
+if ($vars['page'] != 'friends') {
+ echo elgg_view('page/elements/tagcloud_block', array(
+ 'subtypes' => 'blog',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+ ));
+}
diff --git a/mod/blog/views/default/blog/sidebar/archives.php b/mod/blog/views/default/blog/sidebar/archives.php
new file mode 100644
index 000000000..3d8f28ca4
--- /dev/null
+++ b/mod/blog/views/default/blog/sidebar/archives.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Blog archives
+ */
+
+$loggedin_user = elgg_get_logged_in_user_entity();
+$page_owner = elgg_get_page_owner_entity();
+
+if (elgg_instanceof($page_owner, 'user')) {
+ $url_segment = 'blog/archive/' . $page_owner->username;
+} else {
+ $url_segment = 'blog/group/' . $page_owner->getGUID() . '/archive';
+}
+
+// This is a limitation of the URL schema.
+if ($page_owner && $vars['page'] != 'friends') {
+ $dates = get_entity_dates('object', 'blog', $page_owner->getGUID());
+
+ if ($dates) {
+ $title = elgg_echo('blog:archives');
+ $content = '<ul class="blog-archives">';
+ foreach ($dates as $date) {
+ $timestamplow = mktime(0, 0, 0, substr($date,4,2) , 1, substr($date, 0, 4));
+ $timestamphigh = mktime(0, 0, 0, ((int) substr($date, 4, 2)) + 1, 1, substr($date, 0, 4));
+
+ $link = elgg_get_site_url() . $url_segment . '/' . $timestamplow . '/' . $timestamphigh;
+ $month = elgg_echo('date:month:' . substr($date, 4, 2), array(substr($date, 0, 4)));
+ $content .= "<li><a href=\"$link\" title=\"$month\">$month</a></li>";
+ }
+ $content .= '</ul>';
+
+ echo elgg_view_module('aside', $title, $content);
+ }
+} \ No newline at end of file
diff --git a/mod/blog/views/default/blog/sidebar/revisions.php b/mod/blog/views/default/blog/sidebar/revisions.php
new file mode 100644
index 000000000..cd2e7f3d8
--- /dev/null
+++ b/mod/blog/views/default/blog/sidebar/revisions.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Blog sidebar menu showing revisions
+ *
+ * @package Blog
+ */
+
+//If editing a post, show the previous revisions and drafts.
+$blog = elgg_extract('entity', $vars, FALSE);
+
+if (elgg_instanceof($blog, 'object', 'blog') && $blog->canEdit()) {
+ $owner = $blog->getOwnerEntity();
+ $revisions = array();
+
+ $auto_save_annotations = $blog->getAnnotations('blog_auto_save', 1);
+ if ($auto_save_annotations) {
+ $revisions[] = $auto_save_annotations[0];
+ }
+
+ // count(FALSE) == 1! AHHH!!!
+ $saved_revisions = $blog->getAnnotations('blog_revision', 10, 0, 'time_created DESC');
+ if ($saved_revisions) {
+ $revision_count = count($saved_revisions);
+ } else {
+ $revision_count = 0;
+ }
+
+ $revisions = array_merge($revisions, $saved_revisions);
+
+ if ($revisions) {
+ $title = elgg_echo('blog:revisions');
+
+ $n = count($revisions);
+ $body = '<ul class="blog-revisions">';
+
+ $load_base_url = "blog/edit/{$blog->getGUID()}";
+
+ // show the "published revision"
+ if ($blog->status == 'published') {
+ $load = elgg_view('output/url', array(
+ 'href' => $load_base_url,
+ 'text' => elgg_echo('blog:status:published'),
+ 'is_trusted' => true,
+ ));
+
+ $time = "<span class='elgg-subtext'>"
+ . elgg_view_friendly_time($blog->time_created) . "</span>";
+
+ $body .= "<li>$load : $time</li>";
+ }
+
+ foreach ($revisions as $revision) {
+ $time = "<span class='elgg-subtext'>"
+ . elgg_view_friendly_time($revision->time_created) . "</span>";
+
+ if ($revision->name == 'blog_auto_save') {
+ $revision_lang = elgg_echo('blog:auto_saved_revision');
+ } else {
+ $revision_lang = elgg_echo('blog:revision') . " $n";
+ }
+ $load = elgg_view('output/url', array(
+ 'href' => "$load_base_url/$revision->id",
+ 'text' => $revision_lang,
+ 'is_trusted' => true,
+ ));
+
+ $text = "$load: $time";
+ $class = 'class="auto-saved"';
+
+ $n--;
+
+ $body .= "<li $class>$text</li>";
+ }
+
+ $body .= '</ul>';
+
+ echo elgg_view_module('aside', $title, $body);
+ }
+} \ No newline at end of file
diff --git a/mod/blog/views/default/forms/blog/save.php b/mod/blog/views/default/forms/blog/save.php
new file mode 100644
index 000000000..36fa2e0e8
--- /dev/null
+++ b/mod/blog/views/default/forms/blog/save.php
@@ -0,0 +1,166 @@
+<?php
+/**
+ * Edit blog form
+ *
+ * @package Blog
+ */
+
+$blog = get_entity($vars['guid']);
+$vars['entity'] = $blog;
+
+$draft_warning = $vars['draft_warning'];
+if ($draft_warning) {
+ $draft_warning = '<span class="message warning">' . $draft_warning . '</span>';
+}
+
+$action_buttons = '';
+$delete_link = '';
+$preview_button = '';
+
+if ($vars['guid']) {
+ // add a delete button if editing
+ $delete_url = "action/blog/delete?guid={$vars['guid']}";
+ $delete_link = elgg_view('output/confirmlink', array(
+ 'href' => $delete_url,
+ 'text' => elgg_echo('delete'),
+ 'class' => 'elgg-button elgg-button-delete float-alt'
+ ));
+}
+
+// published blogs do not get the preview button
+if (!$vars['guid'] || ($blog && $blog->status != 'published')) {
+ $preview_button = elgg_view('input/submit', array(
+ 'value' => elgg_echo('preview'),
+ 'name' => 'preview',
+ 'class' => 'mls',
+ ));
+}
+
+$save_button = elgg_view('input/submit', array(
+ 'value' => elgg_echo('save'),
+ 'name' => 'save',
+));
+$action_buttons = $save_button . $preview_button . $delete_link;
+
+$title_label = elgg_echo('title');
+$title_input = elgg_view('input/text', array(
+ 'name' => 'title',
+ 'id' => 'blog_title',
+ 'value' => $vars['title']
+));
+
+$excerpt_label = elgg_echo('blog:excerpt');
+$excerpt_input = elgg_view('input/text', array(
+ 'name' => 'excerpt',
+ 'id' => 'blog_excerpt',
+ 'value' => _elgg_html_decode($vars['excerpt'])
+));
+
+$body_label = elgg_echo('blog:body');
+$body_input = elgg_view('input/longtext', array(
+ 'name' => 'description',
+ 'id' => 'blog_description',
+ 'value' => $vars['description']
+));
+
+$save_status = elgg_echo('blog:save_status');
+if ($vars['guid']) {
+ $entity = get_entity($vars['guid']);
+ $saved = date('F j, Y @ H:i', $entity->time_created);
+} else {
+ $saved = elgg_echo('blog:never');
+}
+
+$status_label = elgg_echo('blog:status');
+$status_input = elgg_view('input/dropdown', array(
+ 'name' => 'status',
+ 'id' => 'blog_status',
+ 'value' => $vars['status'],
+ 'options_values' => array(
+ 'draft' => elgg_echo('blog:status:draft'),
+ 'published' => elgg_echo('blog:status:published')
+ )
+));
+
+$comments_label = elgg_echo('comments');
+$comments_input = elgg_view('input/dropdown', array(
+ 'name' => 'comments_on',
+ 'id' => 'blog_comments_on',
+ 'value' => $vars['comments_on'],
+ 'options_values' => array('On' => elgg_echo('on'), 'Off' => elgg_echo('off'))
+));
+
+$tags_label = elgg_echo('tags');
+$tags_input = elgg_view('input/tags', array(
+ 'name' => 'tags',
+ 'id' => 'blog_tags',
+ 'value' => $vars['tags']
+));
+
+$access_label = elgg_echo('access');
+$access_input = elgg_view('input/access', array(
+ 'name' => 'access_id',
+ 'id' => 'blog_access_id',
+ 'value' => $vars['access_id']
+));
+
+$categories_input = elgg_view('input/categories', $vars);
+
+// hidden inputs
+$container_guid_input = elgg_view('input/hidden', array('name' => 'container_guid', 'value' => elgg_get_page_owner_guid()));
+$guid_input = elgg_view('input/hidden', array('name' => 'guid', 'value' => $vars['guid']));
+
+
+echo <<<___HTML
+
+$draft_warning
+
+<div>
+ <label for="blog_title">$title_label</label>
+ $title_input
+</div>
+
+<div>
+ <label for="blog_excerpt">$excerpt_label</label>
+ $excerpt_input
+</div>
+
+<div>
+ <label for="blog_description">$body_label</label>
+ $body_input
+</div>
+
+<div>
+ <label for="blog_tags">$tags_label</label>
+ $tags_input
+</div>
+
+$categories_input
+
+<div>
+ <label for="blog_comments_on">$comments_label</label>
+ $comments_input
+</div>
+
+<div>
+ <label for="blog_access_id">$access_label</label>
+ $access_input
+</div>
+
+<div>
+ <label for="blog_status">$status_label</label>
+ $status_input
+</div>
+
+<div class="elgg-foot">
+ <div class="elgg-subtext mbm">
+ $save_status <span class="blog-save-status-time">$saved</span>
+ </div>
+
+ $guid_input
+ $container_guid_input
+
+ $action_buttons
+</div>
+
+___HTML;
diff --git a/mod/blog/views/default/js/blog/save_draft.php b/mod/blog/views/default/js/blog/save_draft.php
new file mode 100644
index 000000000..8cd07ff5d
--- /dev/null
+++ b/mod/blog/views/default/js/blog/save_draft.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Save draft through ajax
+ *
+ * @package Blog
+ */
+?>
+elgg.provide('elgg.blog');
+
+/*
+ * Attempt to save and update the input with the guid.
+ */
+elgg.blog.saveDraftCallback = function(data, textStatus, XHR) {
+ if (textStatus == 'success' && data.success == true) {
+ var form = $('form[id=blog-post-edit]');
+
+ // update the guid input element for new posts that now have a guid
+ form.find('input[name=guid]').val(data.guid);
+
+ oldDescription = form.find('textarea[name=description]').val();
+
+ var d = new Date();
+ var mins = d.getMinutes() + '';
+ if (mins.length == 1) {
+ mins = '0' + mins;
+ }
+ $(".blog-save-status-time").html(d.toLocaleDateString() + " @ " + d.getHours() + ":" + mins);
+ } else {
+ $(".blog-save-status-time").html(elgg.echo('error'));
+ }
+};
+
+elgg.blog.saveDraft = function() {
+ if (typeof(tinyMCE) != 'undefined') {
+ tinyMCE.triggerSave();
+ }
+
+ // only save on changed content
+ var form = $('form[id=blog-post-edit]');
+ var description = form.find('textarea[name=description]').val();
+ var title = form.find('input[name=title]').val();
+
+ if (!(description && title) || (description == oldDescription)) {
+ return false;
+ }
+
+ var draftURL = elgg.config.wwwroot + "action/blog/auto_save_revision";
+ var postData = form.serializeArray();
+
+ // force draft status
+ $(postData).each(function(i, e) {
+ if (e.name == 'status') {
+ e.value = 'draft';
+ }
+ });
+
+ $.post(draftURL, postData, elgg.blog.saveDraftCallback, 'json');
+};
+
+elgg.blog.init = function() {
+ // get a copy of the body to compare for auto save
+ oldDescription = $('form[id=blog-post-edit]').find('textarea[name=description]').val();
+
+ setInterval(elgg.blog.saveDraft, 60000);
+};
+
+elgg.register_hook_handler('init', 'system', elgg.blog.init); \ No newline at end of file
diff --git a/mod/blog/views/default/object/blog.php b/mod/blog/views/default/object/blog.php
new file mode 100644
index 000000000..4403a6006
--- /dev/null
+++ b/mod/blog/views/default/object/blog.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * View for blog objects
+ *
+ * @package Blog
+ */
+
+$full = elgg_extract('full_view', $vars, FALSE);
+$blog = elgg_extract('entity', $vars, FALSE);
+
+if (!$blog) {
+ return TRUE;
+}
+
+$owner = $blog->getOwnerEntity();
+$container = $blog->getContainerEntity();
+$categories = elgg_view('output/categories', $vars);
+$excerpt = $blog->excerpt;
+if (!$excerpt) {
+ $excerpt = elgg_get_excerpt($blog->description);
+}
+
+$owner_icon = elgg_view_entity_icon($owner, 'tiny');
+$owner_link = elgg_view('output/url', array(
+ 'href' => "blog/owner/$owner->username",
+ 'text' => $owner->name,
+ 'is_trusted' => true,
+));
+$author_text = elgg_echo('byline', array($owner_link));
+$date = elgg_view_friendly_time($blog->time_created);
+
+// The "on" status changes for comments, so best to check for !Off
+if ($blog->comments_on != 'Off') {
+ $comments_count = $blog->countComments();
+ //only display if there are commments
+ if ($comments_count != 0) {
+ $text = elgg_echo("comments") . " ($comments_count)";
+ $comments_link = elgg_view('output/url', array(
+ 'href' => $blog->getURL() . '#blog-comments',
+ 'text' => $text,
+ 'is_trusted' => true,
+ ));
+ } else {
+ $comments_link = '';
+ }
+} else {
+ $comments_link = '';
+}
+
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $vars['entity'],
+ 'handler' => 'blog',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+$subtitle = "$author_text $date $comments_link $categories";
+
+// do not show the metadata and controls in widget view
+if (elgg_in_context('widgets')) {
+ $metadata = '';
+}
+
+if ($full) {
+
+ $body = elgg_view('output/longtext', array(
+ 'value' => $blog->description,
+ 'class' => 'blog-post',
+ ));
+
+ $params = array(
+ 'entity' => $blog,
+ 'title' => false,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ );
+ $params = $params + $vars;
+ $summary = elgg_view('object/elements/summary', $params);
+
+ echo elgg_view('object/elements/full', array(
+ 'summary' => $summary,
+ 'icon' => $owner_icon,
+ 'body' => $body,
+ ));
+
+} else {
+ // brief view
+
+ $params = array(
+ 'entity' => $blog,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'content' => $excerpt,
+ );
+ $params = $params + $vars;
+ $list_body = elgg_view('object/elements/summary', $params);
+
+ echo elgg_view_image_block($owner_icon, $list_body);
+}
diff --git a/mod/blog/views/default/river/object/blog/create.php b/mod/blog/views/default/river/object/blog/create.php
new file mode 100644
index 000000000..a054c1061
--- /dev/null
+++ b/mod/blog/views/default/river/object/blog/create.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Blog river view.
+ */
+
+$object = $vars['item']->getObjectEntity();
+$excerpt = strip_tags($object->excerpt);
+$excerpt = elgg_get_excerpt($excerpt);
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => $excerpt,
+)); \ No newline at end of file
diff --git a/mod/blog/views/default/widgets/blog/content.php b/mod/blog/views/default/widgets/blog/content.php
new file mode 100644
index 000000000..330171662
--- /dev/null
+++ b/mod/blog/views/default/widgets/blog/content.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * User blog widget display view
+ */
+
+$num = $vars['entity']->num_display;
+
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'blog',
+ 'container_guid' => $vars['entity']->owner_guid,
+ 'limit' => $num,
+ 'full_view' => FALSE,
+ 'pagination' => FALSE,
+);
+$content = elgg_list_entities($options);
+
+echo $content;
+
+if ($content) {
+ $blog_url = "blog/owner/" . elgg_get_page_owner_entity()->username;
+ $more_link = elgg_view('output/url', array(
+ 'href' => $blog_url,
+ 'text' => elgg_echo('blog:moreblogs'),
+ 'is_trusted' => true,
+ ));
+ echo "<span class=\"elgg-widget-more\">$more_link</span>";
+} else {
+ echo elgg_echo('blog:noblogs');
+}
diff --git a/mod/blog/views/default/widgets/blog/edit.php b/mod/blog/views/default/widgets/blog/edit.php
new file mode 100644
index 000000000..30c3b2e73
--- /dev/null
+++ b/mod/blog/views/default/widgets/blog/edit.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * User blog widget edit view
+ */
+
+// set default value
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 4;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('blog:numbertodisplay'); ?>:
+ <?php echo $dropdown; ?>
+</div>
diff --git a/mod/bookmarks/actions/bookmarks/delete.php b/mod/bookmarks/actions/bookmarks/delete.php
new file mode 100644
index 000000000..2e9f41438
--- /dev/null
+++ b/mod/bookmarks/actions/bookmarks/delete.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Delete a bookmark
+ *
+ * @package Bookmarks
+ */
+
+$guid = get_input('guid');
+$bookmark = get_entity($guid);
+
+if (elgg_instanceof($bookmark, 'object', 'bookmarks') && $bookmark->canEdit()) {
+ $container = $bookmark->getContainerEntity();
+ if ($bookmark->delete()) {
+ system_message(elgg_echo("bookmarks:delete:success"));
+ if (elgg_instanceof($container, 'group')) {
+ forward("bookmarks/group/$container->guid/all");
+ } else {
+ forward("bookmarks/owner/$container->username");
+ }
+ }
+}
+
+register_error(elgg_echo("bookmarks:delete:failed"));
+forward(REFERER);
diff --git a/mod/bookmarks/actions/bookmarks/save.php b/mod/bookmarks/actions/bookmarks/save.php
new file mode 100644
index 000000000..46090b115
--- /dev/null
+++ b/mod/bookmarks/actions/bookmarks/save.php
@@ -0,0 +1,90 @@
+<?php
+/**
+* Elgg bookmarks save action
+*
+* @package Bookmarks
+*/
+
+$title = htmlspecialchars(get_input('title', '', false), ENT_QUOTES, 'UTF-8');
+$description = get_input('description');
+$address = get_input('address');
+$access_id = get_input('access_id');
+$tags = get_input('tags');
+$guid = get_input('guid');
+$share = get_input('share');
+$container_guid = get_input('container_guid', elgg_get_logged_in_user_guid());
+
+elgg_make_sticky_form('bookmarks');
+
+// don't use elgg_normalize_url() because we don't want
+// relative links resolved to this site.
+if ($address && !preg_match("#^((ht|f)tps?:)?//#i", $address)) {
+ $address = "http://$address";
+}
+
+if (!$title || !$address) {
+ register_error(elgg_echo('bookmarks:save:failed'));
+ forward(REFERER);
+}
+
+// see https://bugs.php.net/bug.php?id=51192
+$php_5_2_13_and_below = version_compare(PHP_VERSION, '5.2.14', '<');
+$php_5_3_0_to_5_3_2 = version_compare(PHP_VERSION, '5.3.0', '>=') &&
+ version_compare(PHP_VERSION, '5.3.3', '<');
+
+$validated = false;
+if ($php_5_2_13_and_below || $php_5_3_0_to_5_3_2) {
+ $tmp_address = str_replace("-", "", $address);
+ $validated = filter_var($tmp_address, FILTER_VALIDATE_URL);
+} else {
+ $validated = filter_var($address, FILTER_VALIDATE_URL);
+}
+if (!$validated) {
+ register_error(elgg_echo('bookmarks:save:failed'));
+ forward(REFERER);
+}
+
+if ($guid == 0) {
+ $bookmark = new ElggObject;
+ $bookmark->subtype = "bookmarks";
+ $bookmark->container_guid = (int)get_input('container_guid', $_SESSION['user']->getGUID());
+ $new = true;
+} else {
+ $bookmark = get_entity($guid);
+ if (!$bookmark->canEdit()) {
+ system_message(elgg_echo('bookmarks:save:failed'));
+ forward(REFERRER);
+ }
+}
+
+$tagarray = string_to_tag_array($tags);
+
+$bookmark->title = $title;
+$bookmark->address = $address;
+$bookmark->description = $description;
+$bookmark->access_id = $access_id;
+$bookmark->tags = $tagarray;
+
+if ($bookmark->save()) {
+
+ elgg_clear_sticky_form('bookmarks');
+
+ // @todo
+ if (is_array($shares) && sizeof($shares) > 0) {
+ foreach($shares as $share) {
+ $share = (int) $share;
+ add_entity_relationship($bookmark->getGUID(), 'share', $share);
+ }
+ }
+ system_message(elgg_echo('bookmarks:save:success'));
+
+ //add to river only if new
+ if ($new) {
+ add_to_river('river/object/bookmarks/create','create', elgg_get_logged_in_user_guid(), $bookmark->getGUID());
+ }
+
+ forward($bookmark->getURL());
+} else {
+ register_error(elgg_echo('bookmarks:save:failed'));
+ forward("bookmarks");
+}
diff --git a/mod/bookmarks/graphics/bookmark.gif b/mod/bookmarks/graphics/bookmark.gif
new file mode 100644
index 000000000..55c5e3e15
--- /dev/null
+++ b/mod/bookmarks/graphics/bookmark.gif
Binary files differ
diff --git a/mod/bookmarks/graphics/bookmarklet.gif b/mod/bookmarks/graphics/bookmarklet.gif
new file mode 100644
index 000000000..45b24709b
--- /dev/null
+++ b/mod/bookmarks/graphics/bookmarklet.gif
Binary files differ
diff --git a/mod/bookmarks/languages/en.php b/mod/bookmarks/languages/en.php
new file mode 100644
index 000000000..d4980280d
--- /dev/null
+++ b/mod/bookmarks/languages/en.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Bookmarks English language file
+ */
+
+$english = array(
+
+ /**
+ * Menu items and titles
+ */
+ 'bookmarks' => "Bookmarks",
+ 'bookmarks:add' => "Add bookmark",
+ 'bookmarks:edit' => "Edit bookmark",
+ 'bookmarks:owner' => "%s's bookmarks",
+ 'bookmarks:friends' => "Friends' bookmarks",
+ 'bookmarks:everyone' => "All site bookmarks",
+ 'bookmarks:this' => "Bookmark this page",
+ 'bookmarks:this:group' => "Bookmark in %s",
+ 'bookmarks:bookmarklet' => "Get bookmarklet",
+ 'bookmarks:bookmarklet:group' => "Get group bookmarklet",
+ 'bookmarks:inbox' => "Bookmarks inbox",
+ 'bookmarks:morebookmarks' => "More bookmarks",
+ 'bookmarks:more' => "More",
+ 'bookmarks:with' => "Share with",
+ 'bookmarks:new' => "A new bookmark",
+ 'bookmarks:address' => "Address of the bookmark",
+ 'bookmarks:none' => 'No bookmarks',
+
+ 'bookmarks:notification' =>
+'%s added a new bookmark:
+
+%s - %s
+%s
+
+View and comment on the new bookmark:
+%s
+',
+
+ 'bookmarks:delete:confirm' => "Are you sure you want to delete this resource?",
+
+ 'bookmarks:numbertodisplay' => 'Number of bookmarks to display',
+
+ 'bookmarks:shared' => "Bookmarked",
+ 'bookmarks:visit' => "Visit resource",
+ 'bookmarks:recent' => "Recent bookmarks",
+
+ 'river:create:object:bookmarks' => '%s bookmarked %s',
+ 'river:comment:object:bookmarks' => '%s commented on a bookmark %s',
+ 'bookmarks:river:annotate' => 'a comment on this bookmark',
+ 'bookmarks:river:item' => 'an item',
+
+ 'item:object:bookmarks' => 'Bookmarks',
+
+ 'bookmarks:group' => 'Group bookmarks',
+ 'bookmarks:enablebookmarks' => 'Enable group bookmarks',
+ 'bookmarks:nogroup' => 'This group does not have any bookmarks yet',
+ 'bookmarks:more' => 'More bookmarks',
+
+ 'bookmarks:no_title' => 'No title',
+
+ /**
+ * Widget and bookmarklet
+ */
+ 'bookmarks:widget:description' => "Display your latest bookmarks.",
+
+ 'bookmarks:bookmarklet:description' =>
+ "The bookmarks bookmarklet allows you to share any resource you find on the web with your friends, or just bookmark it for yourself. To use it, simply drag the following button to your browser's links bar:",
+
+ 'bookmarks:bookmarklet:descriptionie' =>
+ "If you are using Internet Explorer, you will need to right click on the bookmarklet icon, select 'add to favorites', and then the Links bar.",
+
+ 'bookmarks:bookmarklet:description:conclusion' =>
+ "You can then save any page you visit by clicking it at any time.",
+
+ /**
+ * Status messages
+ */
+
+ 'bookmarks:save:success' => "Your item was successfully bookmarked.",
+ 'bookmarks:delete:success' => "Your bookmark was deleted.",
+
+ /**
+ * Error messages
+ */
+
+ 'bookmarks:save:failed' => "Your bookmark could not be saved. Make sure you've entered a title and address and then try again.",
+ 'bookmarks:save:invalid' => "The address of the bookmark is invalid and could not be saved.",
+ 'bookmarks:delete:failed' => "Your bookmark could not be deleted. Please try again.",
+);
+
+add_translation('en', $english); \ No newline at end of file
diff --git a/mod/bookmarks/lib/bookmarks.php b/mod/bookmarks/lib/bookmarks.php
new file mode 100644
index 000000000..9a9dff18c
--- /dev/null
+++ b/mod/bookmarks/lib/bookmarks.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Bookmarks helper functions
+ *
+ * @package Bookmarks
+ */
+
+/**
+ * Prepare the add/edit form variables
+ *
+ * @param ElggObject $bookmark A bookmark object.
+ * @return array
+ */
+function bookmarks_prepare_form_vars($bookmark = null) {
+ // input names => defaults
+ $values = array(
+ 'title' => get_input('title', ''), // bookmarklet support
+ 'address' => get_input('address', ''),
+ 'description' => '',
+ 'access_id' => ACCESS_DEFAULT,
+ 'tags' => '',
+ 'shares' => array(),
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'guid' => null,
+ 'entity' => $bookmark,
+ );
+
+ if ($bookmark) {
+ foreach (array_keys($values) as $field) {
+ if (isset($bookmark->$field)) {
+ $values[$field] = $bookmark->$field;
+ }
+ }
+ }
+
+ if (elgg_is_sticky_form('bookmarks')) {
+ $sticky_values = elgg_get_sticky_values('bookmarks');
+ foreach ($sticky_values as $key => $value) {
+ $values[$key] = $value;
+ }
+ }
+
+ elgg_clear_sticky_form('bookmarks');
+
+ return $values;
+}
diff --git a/mod/bookmarks/manifest.xml b/mod/bookmarks/manifest.xml
new file mode 100644
index 000000000..b95af87f8
--- /dev/null
+++ b/mod/bookmarks/manifest.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Bookmarks</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>content</category>
+ <category>widget</category>
+ <blurb>Add and comment on bookmarks.</blurb>
+ <description>Adds the ability for users to bookmark internal and external sites. Other users can then comment on the bookmarks.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/bookmarks/pages/bookmarks/add.php b/mod/bookmarks/pages/bookmarks/add.php
new file mode 100644
index 000000000..d80d4a4bc
--- /dev/null
+++ b/mod/bookmarks/pages/bookmarks/add.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Add bookmark page
+ *
+ * @package Bookmarks
+ */
+
+$page_owner = elgg_get_page_owner_entity();
+
+$title = elgg_echo('bookmarks:add');
+elgg_push_breadcrumb($title);
+
+$vars = bookmarks_prepare_form_vars();
+$content = elgg_view_form('bookmarks/save', array(), $vars);
+
+$body = elgg_view_layout('content', array(
+ 'filter' => '',
+ 'content' => $content,
+ 'title' => $title,
+));
+
+echo elgg_view_page($title, $body); \ No newline at end of file
diff --git a/mod/bookmarks/pages/bookmarks/all.php b/mod/bookmarks/pages/bookmarks/all.php
new file mode 100644
index 000000000..bdb8fc793
--- /dev/null
+++ b/mod/bookmarks/pages/bookmarks/all.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Elgg bookmarks plugin everyone page
+ *
+ * @package ElggBookmarks
+ */
+
+elgg_pop_breadcrumb();
+elgg_push_breadcrumb(elgg_echo('bookmarks'));
+
+elgg_register_title_button();
+
+$content = elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'bookmarks',
+ 'limit' => 10,
+ 'full_view' => false,
+ 'view_toggle_type' => false
+));
+
+if (!$content) {
+ $content = elgg_echo('bookmarks:none');
+}
+
+$title = elgg_echo('bookmarks:everyone');
+
+$body = elgg_view_layout('content', array(
+ 'filter_context' => 'all',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => elgg_view('bookmarks/sidebar'),
+));
+
+echo elgg_view_page($title, $body); \ No newline at end of file
diff --git a/mod/bookmarks/pages/bookmarks/bookmarklet.php b/mod/bookmarks/pages/bookmarks/bookmarklet.php
new file mode 100644
index 000000000..99866e385
--- /dev/null
+++ b/mod/bookmarks/pages/bookmarks/bookmarklet.php
@@ -0,0 +1,36 @@
+<?php
+/**
+* Elgg bookmarks plugin bookmarklet page
+*
+* @package Bookmarks
+*/
+
+gatekeeper();
+
+$container_guid = get_input('container_guid');
+$container = get_entity($container_guid);
+$page_owner = $container;
+
+if (elgg_instanceof($container, 'object')) {
+ $page_owner = $container->getContainerEntity();
+}
+
+elgg_set_page_owner_guid($page_owner->getGUID());
+
+$title = elgg_echo('bookmarks:bookmarklet');
+
+if ($page_owner instanceof ElggGroup) {
+ elgg_push_breadcrumb($page_owner->name, $page_owner->getURL());
+}
+
+elgg_push_breadcrumb($title);
+
+$content = elgg_view("bookmarks/bookmarklet");
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => false
+));
+
+echo elgg_view_page($title, $body); \ No newline at end of file
diff --git a/mod/bookmarks/pages/bookmarks/edit.php b/mod/bookmarks/pages/bookmarks/edit.php
new file mode 100644
index 000000000..93b143c36
--- /dev/null
+++ b/mod/bookmarks/pages/bookmarks/edit.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Add bookmark page
+ *
+ * @package ElggBookmarks
+ */
+
+$bookmark_guid = get_input('guid');
+$bookmark = get_entity($bookmark_guid);
+
+if (!elgg_instanceof($bookmark, 'object', 'bookmarks') || !$bookmark->canEdit()) {
+ register_error(elgg_echo('bookmarks:unknown_bookmark'));
+ forward(REFERRER);
+}
+
+$page_owner = elgg_get_page_owner_entity();
+
+$title = elgg_echo('bookmarks:edit');
+elgg_push_breadcrumb($title);
+
+$vars = bookmarks_prepare_form_vars($bookmark);
+$content = elgg_view_form('bookmarks/save', array(), $vars);
+
+$body = elgg_view_layout('content', array(
+ 'filter' => '',
+ 'content' => $content,
+ 'title' => $title,
+));
+
+echo elgg_view_page($title, $body); \ No newline at end of file
diff --git a/mod/bookmarks/pages/bookmarks/friends.php b/mod/bookmarks/pages/bookmarks/friends.php
new file mode 100644
index 000000000..15b1da098
--- /dev/null
+++ b/mod/bookmarks/pages/bookmarks/friends.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Elgg bookmarks plugin friends page
+ *
+ * @package ElggBookmarks
+ */
+
+$page_owner = elgg_get_page_owner_entity();
+if (!$page_owner) {
+ forward('bookmarks/all');
+}
+
+elgg_push_breadcrumb($page_owner->name, "bookmarks/owner/$page_owner->username");
+elgg_push_breadcrumb(elgg_echo('friends'));
+
+elgg_register_title_button();
+
+$title = elgg_echo('bookmarks:friends');
+
+$content = list_user_friends_objects($page_owner->guid, 'bookmarks', 10, false);
+if (!$content) {
+ $content = elgg_echo('bookmarks:none');
+}
+
+$params = array(
+ 'filter_context' => 'friends',
+ 'content' => $content,
+ 'title' => $title,
+);
+
+$body = elgg_view_layout('content', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/mod/bookmarks/pages/bookmarks/owner.php b/mod/bookmarks/pages/bookmarks/owner.php
new file mode 100644
index 000000000..a024ff352
--- /dev/null
+++ b/mod/bookmarks/pages/bookmarks/owner.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Elgg bookmarks plugin everyone page
+ *
+ * @package Bookmarks
+ */
+
+$page_owner = elgg_get_page_owner_entity();
+if (!$page_owner) {
+ forward('bookmarks/all');
+}
+
+elgg_push_breadcrumb($page_owner->name);
+
+elgg_register_title_button();
+
+$content .= elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'bookmarks',
+ 'container_guid' => $page_owner->guid,
+ 'limit' => 10,
+ 'full_view' => false,
+ 'view_toggle_type' => false
+));
+
+if (!$content) {
+ $content = elgg_echo('bookmarks:none');
+}
+
+$title = elgg_echo('bookmarks:owner', array($page_owner->name));
+
+$filter_context = '';
+if ($page_owner->getGUID() == elgg_get_logged_in_user_guid()) {
+ $filter_context = 'mine';
+}
+
+$vars = array(
+ 'filter_context' => $filter_context,
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => elgg_view('bookmarks/sidebar'),
+);
+
+// don't show filter if out of filter context
+if ($page_owner instanceof ElggGroup) {
+ $vars['filter'] = false;
+}
+
+$body = elgg_view_layout('content', $vars);
+
+echo elgg_view_page($title, $body); \ No newline at end of file
diff --git a/mod/bookmarks/pages/bookmarks/view.php b/mod/bookmarks/pages/bookmarks/view.php
new file mode 100644
index 000000000..70a6a5bfe
--- /dev/null
+++ b/mod/bookmarks/pages/bookmarks/view.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * View a bookmark
+ *
+ * @package ElggBookmarks
+ */
+
+$bookmark = get_entity(get_input('guid'));
+if (!$bookmark) {
+ register_error(elgg_echo('noaccess'));
+ $_SESSION['last_forward_from'] = current_page_url();
+ forward('');
+}
+
+$page_owner = elgg_get_page_owner_entity();
+
+$crumbs_title = $page_owner->name;
+
+if (elgg_instanceof($page_owner, 'group')) {
+ elgg_push_breadcrumb($crumbs_title, "bookmarks/group/$page_owner->guid/all");
+} else {
+ elgg_push_breadcrumb($crumbs_title, "bookmarks/owner/$page_owner->username");
+}
+
+$title = $bookmark->title;
+
+elgg_push_breadcrumb($title);
+
+$content = elgg_view_entity($bookmark, array('full_view' => true));
+$content .= elgg_view_comments($bookmark);
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/bookmarks/start.php b/mod/bookmarks/start.php
new file mode 100644
index 000000000..3846f5165
--- /dev/null
+++ b/mod/bookmarks/start.php
@@ -0,0 +1,297 @@
+<?php
+/**
+ * Elgg Bookmarks plugin
+ *
+ * @package ElggBookmarks
+ */
+
+elgg_register_event_handler('init', 'system', 'bookmarks_init');
+
+/**
+ * Bookmark init
+ */
+function bookmarks_init() {
+
+ $root = dirname(__FILE__);
+ elgg_register_library('elgg:bookmarks', "$root/lib/bookmarks.php");
+
+ // actions
+ $action_path = "$root/actions/bookmarks";
+ elgg_register_action('bookmarks/save', "$action_path/save.php");
+ elgg_register_action('bookmarks/delete', "$action_path/delete.php");
+ elgg_register_action('bookmarks/share', "$action_path/share.php");
+
+ // menus
+ elgg_register_menu_item('site', array(
+ 'name' => 'bookmarks',
+ 'text' => elgg_echo('bookmarks'),
+ 'href' => 'bookmarks/all'
+ ));
+
+ elgg_register_plugin_hook_handler('register', 'menu:page', 'bookmarks_page_menu');
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'bookmarks_owner_block_menu');
+
+ elgg_register_page_handler('bookmarks', 'bookmarks_page_handler');
+
+ elgg_extend_view('css/elgg', 'bookmarks/css');
+ elgg_extend_view('js/elgg', 'bookmarks/js');
+
+ elgg_register_widget_type('bookmarks', elgg_echo('bookmarks'), elgg_echo('bookmarks:widget:description'));
+
+ if (elgg_is_logged_in()) {
+ $user_guid = elgg_get_logged_in_user_guid();
+ $address = urlencode(current_page_url());
+
+ elgg_register_menu_item('extras', array(
+ 'name' => 'bookmark',
+ 'text' => elgg_view_icon('push-pin-alt'),
+ 'href' => "bookmarks/add/$user_guid?address=$address",
+ 'title' => elgg_echo('bookmarks:this'),
+ 'rel' => 'nofollow',
+ ));
+ }
+ // Register granular notification for this type
+ register_notification_object('object', 'bookmarks', elgg_echo('bookmarks:new'));
+
+ // Listen to notification events and supply a more useful message
+ elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'bookmarks_notify_message');
+
+ // Register a URL handler for bookmarks
+ elgg_register_entity_url_handler('object', 'bookmarks', 'bookmark_url');
+
+ // Register entity type for search
+ elgg_register_entity_type('object', 'bookmarks');
+
+ // Groups
+ add_group_tool_option('bookmarks', elgg_echo('bookmarks:enablebookmarks'), true);
+ elgg_extend_view('groups/tool_latest', 'bookmarks/group_module');
+}
+
+/**
+ * Dispatcher for bookmarks.
+ *
+ * URLs take the form of
+ * All bookmarks: bookmarks/all
+ * User's bookmarks: bookmarks/owner/<username>
+ * Friends' bookmarks: bookmarks/friends/<username>
+ * View bookmark: bookmarks/view/<guid>/<title>
+ * New bookmark: bookmarks/add/<guid> (container: user, group, parent)
+ * Edit bookmark: bookmarks/edit/<guid>
+ * Group bookmarks: bookmarks/group/<guid>/all
+ * Bookmarklet: bookmarks/bookmarklet/<guid> (user)
+ *
+ * Title is ignored
+ *
+ * @param array $page
+ * @return bool
+ */
+function bookmarks_page_handler($page) {
+
+ elgg_load_library('elgg:bookmarks');
+
+ if (!isset($page[0])) {
+ $page[0] = 'all';
+ }
+
+ elgg_push_breadcrumb(elgg_echo('bookmarks'), 'bookmarks/all');
+
+ // old group usernames
+ if (substr_count($page[0], 'group:')) {
+ preg_match('/group\:([0-9]+)/i', $page[0], $matches);
+ $guid = $matches[1];
+ if ($entity = get_entity($guid)) {
+ bookmarks_url_forwarder($page);
+ }
+ }
+
+ // user usernames
+ $user = get_user_by_username($page[0]);
+ if ($user) {
+ bookmarks_url_forwarder($page);
+ }
+
+ $pages = dirname(__FILE__) . '/pages/bookmarks';
+
+ switch ($page[0]) {
+ case "all":
+ include "$pages/all.php";
+ break;
+
+ case "owner":
+ include "$pages/owner.php";
+ break;
+
+ case "friends":
+ include "$pages/friends.php";
+ break;
+
+ case "view":
+ set_input('guid', $page[1]);
+ include "$pages/view.php";
+ break;
+ case 'read': // Elgg 1.7 compatibility
+ register_error(elgg_echo("changebookmark"));
+ forward("bookmarks/view/{$page[1]}");
+ break;
+
+ case "add":
+ gatekeeper();
+ include "$pages/add.php";
+ break;
+
+ case "edit":
+ gatekeeper();
+ set_input('guid', $page[1]);
+ include "$pages/edit.php";
+ break;
+
+ case 'group':
+ group_gatekeeper();
+ include "$pages/owner.php";
+ break;
+
+ case "bookmarklet":
+ set_input('container_guid', $page[1]);
+ include "$pages/bookmarklet.php";
+ break;
+
+ default:
+ return false;
+ }
+
+ elgg_pop_context();
+ return true;
+}
+
+/**
+ * Forward to the new style of URLs
+ *
+ * @param string $page
+ */
+function bookmarks_url_forwarder($page) {
+ global $CONFIG;
+
+ if (!isset($page[1])) {
+ $page[1] = 'items';
+ }
+
+ switch ($page[1]) {
+ case "read":
+ $url = "{$CONFIG->wwwroot}bookmarks/view/{$page[2]}/{$page[3]}";
+ break;
+ case "inbox":
+ $url = "{$CONFIG->wwwroot}bookmarks/inbox/{$page[0]}";
+ break;
+ case "friends":
+ $url = "{$CONFIG->wwwroot}bookmarks/friends/{$page[0]}";
+ break;
+ case "add":
+ $url = "{$CONFIG->wwwroot}bookmarks/add/{$page[0]}";
+ break;
+ case "items":
+ $url = "{$CONFIG->wwwroot}bookmarks/owner/{$page[0]}";
+ break;
+ case "bookmarklet":
+ $url = "{$CONFIG->wwwroot}bookmarks/bookmarklet/{$page[0]}";
+ break;
+ }
+
+ register_error(elgg_echo("changebookmark"));
+ forward($url);
+}
+
+/**
+ * Populates the ->getUrl() method for bookmarked objects
+ *
+ * @param ElggEntity $entity The bookmarked object
+ * @return string bookmarked item URL
+ */
+function bookmark_url($entity) {
+ global $CONFIG;
+
+ $title = $entity->title;
+ $title = elgg_get_friendly_title($title);
+ return $CONFIG->url . "bookmarks/view/" . $entity->getGUID() . "/" . $title;
+}
+
+/**
+ * Add a menu item to an ownerblock
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @param array $params
+ */
+function bookmarks_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'user')) {
+ $url = "bookmarks/owner/{$params['entity']->username}";
+ $item = new ElggMenuItem('bookmarks', elgg_echo('bookmarks'), $url);
+ $return[] = $item;
+ } else {
+ if ($params['entity']->bookmarks_enable != 'no') {
+ $url = "bookmarks/group/{$params['entity']->guid}/all";
+ $item = new ElggMenuItem('bookmarks', elgg_echo('bookmarks:group'), $url);
+ $return[] = $item;
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Returns the body of a notification message
+ *
+ * @param string $hook
+ * @param string $entity_type
+ * @param string $returnvalue
+ * @param array $params
+ */
+function bookmarks_notify_message($hook, $entity_type, $returnvalue, $params) {
+ $entity = $params['entity'];
+ $to_entity = $params['to_entity'];
+ $method = $params['method'];
+ if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'bookmarks')) {
+ $descr = $entity->description;
+ $title = $entity->title;
+ $owner = $entity->getOwnerEntity();
+
+ return elgg_echo('bookmarks:notification', array(
+ $owner->name,
+ $title,
+ $entity->address,
+ $descr,
+ $entity->getURL()
+ ));
+ }
+ return null;
+}
+
+/**
+ * Add a page menu menu.
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @param array $params
+ */
+function bookmarks_page_menu($hook, $type, $return, $params) {
+ if (elgg_is_logged_in()) {
+ // only show bookmarklet in bookmark pages
+ if (elgg_in_context('bookmarks')) {
+ $page_owner = elgg_get_page_owner_entity();
+ if (!$page_owner) {
+ $page_owner = elgg_get_logged_in_user_entity();
+ }
+
+ if ($page_owner instanceof ElggGroup) {
+ $title = elgg_echo('bookmarks:bookmarklet:group');
+ } else {
+ $title = elgg_echo('bookmarks:bookmarklet');
+ }
+
+ $return[] = new ElggMenuItem('bookmarklet', $title, 'bookmarks/bookmarklet/' . $page_owner->getGUID());
+ }
+ }
+
+ return $return;
+}
diff --git a/mod/bookmarks/views/default/bookmarks/bookmarklet.php b/mod/bookmarks/views/default/bookmarks/bookmarklet.php
new file mode 100644
index 000000000..b3e9737fe
--- /dev/null
+++ b/mod/bookmarks/views/default/bookmarks/bookmarklet.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Bookmarklet
+ *
+ * @package Bookmarks
+ */
+
+$page_owner = elgg_get_page_owner_entity();
+
+if ($page_owner instanceof ElggGroup) {
+ $title = elgg_echo("bookmarks:this:group", array($page_owner->name));
+} else {
+ $title = elgg_echo("bookmarks:this");
+}
+
+$guid = $page_owner->getGUID();
+
+if (!$name && ($user = elgg_get_logged_in_user_entity())) {
+ $name = $user->username;
+}
+
+$url = elgg_get_site_url();
+$img = elgg_view('output/img', array(
+ 'src' => 'mod/bookmarks/graphics/bookmarklet.gif',
+ 'alt' => $title,
+));
+$bookmarklet = "<a href=\"javascript:location.href='{$url}bookmarks/add/$guid?address='"
+ . "+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title)\">"
+ . $img . "</a>";
+
+?>
+<p><?php echo elgg_echo("bookmarks:bookmarklet:description"); ?></p>
+<p><?php echo $bookmarklet; ?></p>
+<p><?php echo elgg_echo("bookmarks:bookmarklet:descriptionie"); ?></p>
+<p><?php echo elgg_echo("bookmarks:bookmarklet:description:conclusion"); ?></p>
diff --git a/mod/bookmarks/views/default/bookmarks/css.php b/mod/bookmarks/views/default/bookmarks/css.php
new file mode 100644
index 000000000..0d734c847
--- /dev/null
+++ b/mod/bookmarks/views/default/bookmarks/css.php
@@ -0,0 +1,3 @@
+.elgg-icon-bookmark {
+ background: transparent url(<?php echo elgg_get_site_url();?>mod/bookmarks/graphics/bookmark.gif);
+} \ No newline at end of file
diff --git a/mod/bookmarks/views/default/bookmarks/group_module.php b/mod/bookmarks/views/default/bookmarks/group_module.php
new file mode 100644
index 000000000..60a727819
--- /dev/null
+++ b/mod/bookmarks/views/default/bookmarks/group_module.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * List most recent bookmarks on group profile page
+ *
+ * @package Bookmarks
+ */
+
+$group = elgg_get_page_owner_entity();
+
+if ($group->bookmarks_enable == "no") {
+ return true;
+}
+
+$all_link = elgg_view('output/url', array(
+ 'href' => "bookmarks/group/$group->guid/all",
+ 'text' => elgg_echo('link:view:all'),
+ 'is_trusted' => true,
+));
+
+elgg_push_context('widgets');
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'bookmarks',
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'limit' => 6,
+ 'full_view' => false,
+ 'pagination' => false,
+);
+$content = elgg_list_entities($options);
+elgg_pop_context();
+
+if (!$content) {
+ $content = '<p>' . elgg_echo('bookmarks:none') . '</p>';
+}
+
+$new_link = elgg_view('output/url', array(
+ 'href' => "bookmarks/add/$group->guid",
+ 'text' => elgg_echo('bookmarks:add'),
+ 'is_trusted' => true,
+));
+
+echo elgg_view('groups/profile/module', array(
+ 'title' => elgg_echo('bookmarks:group'),
+ 'content' => $content,
+ 'all_link' => $all_link,
+ 'add_link' => $new_link,
+));
diff --git a/mod/bookmarks/views/default/bookmarks/js.php b/mod/bookmarks/views/default/bookmarks/js.php
new file mode 100644
index 000000000..c36823c09
--- /dev/null
+++ b/mod/bookmarks/views/default/bookmarks/js.php
@@ -0,0 +1,12 @@
+
+elgg.provide('elgg.bookmarks');
+
+elgg.bookmarks.init = function() {
+ // append the title to the url
+ var title = document.title;
+ var e = $('a.elgg-bookmark-page');
+ var link = e.attr('href') + '&title=' + encodeURIComponent(title);
+ e.attr('href', link);
+};
+
+elgg.register_hook_handler('init', 'system', elgg.bookmarks.init);
diff --git a/mod/bookmarks/views/default/bookmarks/sidebar.php b/mod/bookmarks/views/default/bookmarks/sidebar.php
new file mode 100644
index 000000000..811284ef3
--- /dev/null
+++ b/mod/bookmarks/views/default/bookmarks/sidebar.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Bookmarks sidebar
+ */
+
+echo elgg_view('page/elements/comments_block', array(
+ 'subtypes' => 'bookmarks',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+));
+
+echo elgg_view('page/elements/tagcloud_block', array(
+ 'subtypes' => 'bookmarks',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+));
diff --git a/mod/bookmarks/views/default/forms/bookmarks/save.php b/mod/bookmarks/views/default/forms/bookmarks/save.php
new file mode 100644
index 000000000..7d064a55b
--- /dev/null
+++ b/mod/bookmarks/views/default/forms/bookmarks/save.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Edit / add a bookmark
+ *
+ * @package Bookmarks
+ */
+
+// once elgg_view stops throwing all sorts of junk into $vars, we can use extract()
+$title = elgg_extract('title', $vars, '');
+$desc = elgg_extract('description', $vars, '');
+$address = elgg_extract('address', $vars, '');
+$tags = elgg_extract('tags', $vars, '');
+$access_id = elgg_extract('access_id', $vars, ACCESS_DEFAULT);
+$container_guid = elgg_extract('container_guid', $vars);
+$guid = elgg_extract('guid', $vars, null);
+$shares = elgg_extract('shares', $vars, array());
+
+?>
+<div>
+ <label><?php echo elgg_echo('title'); ?></label><br />
+ <?php echo elgg_view('input/text', array('name' => 'title', 'value' => $title)); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('bookmarks:address'); ?></label><br />
+ <?php echo elgg_view('input/text', array('name' => 'address', 'value' => $address)); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('description'); ?></label>
+ <?php echo elgg_view('input/longtext', array('name' => 'description', 'value' => $desc)); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('tags'); ?></label>
+ <?php echo elgg_view('input/tags', array('name' => 'tags', 'value' => $tags)); ?>
+</div>
+<?php
+
+$categories = elgg_view('input/categories', $vars);
+if ($categories) {
+ echo $categories;
+}
+
+?>
+<div>
+ <label><?php echo elgg_echo('access'); ?></label><br />
+ <?php echo elgg_view('input/access', array('name' => 'access_id', 'value' => $access_id)); ?>
+</div>
+<div class="elgg-foot">
+<?php
+
+echo elgg_view('input/hidden', array('name' => 'container_guid', 'value' => $container_guid));
+
+if ($guid) {
+ echo elgg_view('input/hidden', array('name' => 'guid', 'value' => $guid));
+}
+
+echo elgg_view('input/submit', array('value' => elgg_echo("save")));
+
+?>
+</div> \ No newline at end of file
diff --git a/mod/bookmarks/views/default/object/bookmarks.php b/mod/bookmarks/views/default/object/bookmarks.php
new file mode 100644
index 000000000..83bae2b13
--- /dev/null
+++ b/mod/bookmarks/views/default/object/bookmarks.php
@@ -0,0 +1,127 @@
+<?php
+/**
+ * Elgg bookmark view
+ *
+ * @package ElggBookmarks
+ */
+
+$full = elgg_extract('full_view', $vars, FALSE);
+$bookmark = elgg_extract('entity', $vars, FALSE);
+
+if (!$bookmark) {
+ return;
+}
+
+$owner = $bookmark->getOwnerEntity();
+$owner_icon = elgg_view_entity_icon($owner, 'tiny');
+$container = $bookmark->getContainerEntity();
+$categories = elgg_view('output/categories', $vars);
+
+$link = elgg_view('output/url', array('href' => $bookmark->address));
+$description = elgg_view('output/longtext', array('value' => $bookmark->description, 'class' => 'pbl'));
+
+$owner_link = elgg_view('output/url', array(
+ 'href' => "bookmarks/owner/$owner->username",
+ 'text' => $owner->name,
+ 'is_trusted' => true,
+));
+$author_text = elgg_echo('byline', array($owner_link));
+
+$date = elgg_view_friendly_time($bookmark->time_created);
+
+$comments_count = $bookmark->countComments();
+//only display if there are commments
+if ($comments_count != 0) {
+ $text = elgg_echo("comments") . " ($comments_count)";
+ $comments_link = elgg_view('output/url', array(
+ 'href' => $bookmark->getURL() . '#comments',
+ 'text' => $text,
+ 'is_trusted' => true,
+ ));
+} else {
+ $comments_link = '';
+}
+
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $vars['entity'],
+ 'handler' => 'bookmarks',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+$subtitle = "$author_text $date $comments_link $categories";
+
+// do not show the metadata and controls in widget view
+if (elgg_in_context('widgets')) {
+ $metadata = '';
+}
+
+if ($full && !elgg_in_context('gallery')) {
+
+ $params = array(
+ 'entity' => $bookmark,
+ 'title' => false,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ );
+ $params = $params + $vars;
+ $summary = elgg_view('object/elements/summary', $params);
+
+ $bookmark_icon = elgg_view_icon('push-pin-alt');
+ $body = <<<HTML
+<div class="bookmark elgg-content mts">
+ $bookmark_icon<span class="elgg-heading-basic mbs">$link</span>
+ $description
+</div>
+HTML;
+
+ echo elgg_view('object/elements/full', array(
+ 'entity' => $bookmark,
+ 'icon' => $owner_icon,
+ 'summary' => $summary,
+ 'body' => $body,
+ ));
+
+} elseif (elgg_in_context('gallery')) {
+ echo <<<HTML
+<div class="bookmarks-gallery-item">
+ <h3>$bookmark->title</h3>
+ <p class='subtitle'>$owner_link $date</p>
+</div>
+HTML;
+} else {
+ // brief view
+ $url = $bookmark->address;
+ $display_text = $url;
+ $excerpt = elgg_get_excerpt($bookmark->description);
+ if ($excerpt) {
+ $excerpt = " - $excerpt";
+ }
+
+ if (strlen($url) > 25) {
+ $bits = parse_url($url);
+ if (isset($bits['host'])) {
+ $display_text = $bits['host'];
+ } else {
+ $display_text = elgg_get_excerpt($url, 100);
+ }
+ }
+
+ $link = elgg_view('output/url', array(
+ 'href' => $bookmark->address,
+ 'text' => $display_text,
+ ));
+
+ $content = elgg_view_icon('push-pin-alt') . "$link{$excerpt}";
+
+ $params = array(
+ 'entity' => $bookmark,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'content' => $content,
+ );
+ $params = $params + $vars;
+ $body = elgg_view('object/elements/summary', $params);
+
+ echo elgg_view_image_block($owner_icon, $body);
+}
diff --git a/mod/bookmarks/views/default/river/object/bookmarks/create.php b/mod/bookmarks/views/default/river/object/bookmarks/create.php
new file mode 100644
index 000000000..388f54ac9
--- /dev/null
+++ b/mod/bookmarks/views/default/river/object/bookmarks/create.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * New bookmarks river entry
+ *
+ * @package Bookmarks
+ */
+
+$object = $vars['item']->getObjectEntity();
+$excerpt = elgg_get_excerpt($object->description);
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => $excerpt,
+ 'attachments' => elgg_view('output/url', array('href' => $object->address)),
+));
diff --git a/mod/bookmarks/views/default/widgets/bookmarks/content.php b/mod/bookmarks/views/default/widgets/bookmarks/content.php
new file mode 100644
index 000000000..0b85017fc
--- /dev/null
+++ b/mod/bookmarks/views/default/widgets/bookmarks/content.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Elgg bookmarks widget
+ *
+ * @package Bookmarks
+ */
+
+$max = (int) $vars['entity']->num_display;
+
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'bookmarks',
+ 'container_guid' => $vars['entity']->owner_guid,
+ 'limit' => $max,
+ 'full_view' => FALSE,
+ 'pagination' => FALSE,
+);
+$content = elgg_list_entities($options);
+
+echo $content;
+
+if ($content) {
+ $url = "bookmarks/owner/" . elgg_get_page_owner_entity()->username;
+ $more_link = elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => elgg_echo('bookmarks:more'),
+ 'is_trusted' => true,
+ ));
+ echo "<span class=\"elgg-widget-more\">$more_link</span>";
+} else {
+ echo elgg_echo('bookmarks:none');
+}
diff --git a/mod/bookmarks/views/default/widgets/bookmarks/edit.php b/mod/bookmarks/views/default/widgets/bookmarks/edit.php
new file mode 100644
index 000000000..ed9c7fd88
--- /dev/null
+++ b/mod/bookmarks/views/default/widgets/bookmarks/edit.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg bookmark widget edit view
+ *
+ * @package Bookmarks
+ */
+
+// set default value
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 4;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('bookmarks:numbertodisplay'); ?>:
+ <?php echo $dropdown; ?>
+</div>
diff --git a/mod/bookmarks/views/rss/object/bookmarks.php b/mod/bookmarks/views/rss/object/bookmarks.php
new file mode 100644
index 000000000..1abda4710
--- /dev/null
+++ b/mod/bookmarks/views/rss/object/bookmarks.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Bookmark RSS object view
+ *
+ * @package ElggBookmarks
+ */
+
+$title = $vars['entity']->title;
+if (empty($title)) {
+ $title = strip_tags($vars['entity']->description);
+ $title = elgg_get_excerpt($title, 32);
+}
+
+$permalink = htmlspecialchars($vars['entity']->getURL(), ENT_NOQUOTES, 'UTF-8');
+$pubdate = date('r', $vars['entity']->getTimeCreated());
+
+$url_text = elgg_echo('bookmarks:address');
+$link = elgg_view('output/url', array('href' => $vars['entity']->address));
+$description = $vars['entity']->description . "<p>$url_text: $link</p>";
+
+$creator = elgg_view('page/components/creator', $vars);
+$georss = elgg_view('page/components/georss', $vars);
+$extension = elgg_view('extensions/item');
+
+$item = <<<__HTML
+<item>
+ <guid isPermaLink="true">$permalink</guid>
+ <pubDate>$pubdate</pubDate>
+ <link>$permalink</link>
+ <title><![CDATA[$title]]></title>
+ <description><![CDATA[$description]]></description>
+ $creator$georss$extension
+</item>
+
+__HTML;
+
+echo $item;
diff --git a/mod/categories/activate.php b/mod/categories/activate.php
new file mode 100644
index 000000000..80159d089
--- /dev/null
+++ b/mod/categories/activate.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Prompt the user to add categories after activating
+ */
+
+//categories_admin_notice_no_categories
+$site = get_config('site');
+if (!$site->categories) {
+ $message = elgg_echo('categories:on_activate_reminder', array(elgg_normalize_url('admin/plugin_settings/categories')));
+ elgg_add_admin_notice('categories_admin_notice_no_categories', $message);
+} \ No newline at end of file
diff --git a/mod/categories/deactivate.php b/mod/categories/deactivate.php
new file mode 100644
index 000000000..e15e2c6e9
--- /dev/null
+++ b/mod/categories/deactivate.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Remove admin notice to populate categories.
+ */
+
+elgg_delete_admin_notice('categories_admin_notice_no_categories');
diff --git a/mod/categories/languages/en.php b/mod/categories/languages/en.php
new file mode 100644
index 000000000..422fe81a4
--- /dev/null
+++ b/mod/categories/languages/en.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Categories English language file
+ */
+
+$english = array(
+ 'categories' => 'Categories',
+ 'categories:settings' => 'Set site categories',
+ 'categories:explanation' => 'To set some predefined site-wide categories that will be used throughout your system, enter them below, separated with commas. Compatible tools will then display them when the user creates or edits content.',
+ 'categories:save:success' => 'Site categories were successfully saved.',
+ 'categories:results' => "Results for the site category: %s",
+ 'categories:on_activate_reminder' => "Site-wide Categories won't work until you add categories. <a href=\"%s\">Add categories now.</a>",
+);
+
+add_translation("en", $english); \ No newline at end of file
diff --git a/mod/categories/manifest.xml b/mod/categories/manifest.xml
new file mode 100644
index 000000000..4a6bd0864
--- /dev/null
+++ b/mod/categories/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Site-wide Categories</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>enhancement</category>
+ <blurb>Add site-wide categories</blurb>
+ <description>Site-wide Categories lets administrators define categories that users across the site can add content to.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/categories/pages/categories/listing.php b/mod/categories/pages/categories/listing.php
new file mode 100644
index 000000000..8924506e9
--- /dev/null
+++ b/mod/categories/pages/categories/listing.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * List entities by category
+ *
+ * @package ElggCategories
+ */
+
+$limit = get_input("limit", 10);
+$offset = get_input("offset", 0);
+$category = get_input("category");
+$owner_guid = get_input("owner_guid", ELGG_ENTITIES_ANY_VALUE);
+$subtype = get_input("subtype", ELGG_ENTITIES_ANY_VALUE);
+$type = get_input("type", 'object');
+
+$params = array(
+ 'metadata_name' => 'universal_categories',
+ 'metadata_value' => $category,
+ 'types' => $type,
+ 'subtypes' => $subtype,
+ 'owner_guid' => $owner_guid,
+ 'limit' => $limit,
+ 'full_view' => FALSE,
+ 'metadata_case_sensitive' => FALSE,
+);
+$objects = elgg_list_entities_from_metadata($params);
+
+$title = elgg_echo('categories:results', array($category));
+
+$content = elgg_view_title($title);
+$content .= $objects;
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ 'header' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/categories/readme.txt b/mod/categories/readme.txt
new file mode 100644
index 000000000..48d07fe8f
--- /dev/null
+++ b/mod/categories/readme.txt
@@ -0,0 +1,25 @@
+Site-wide categories
+--------------------
+
+NOTES FOR DEVELOPERS:
+
+If you're not a programmer, don't worry! All the main Elgg tools
+are already adapted to use categories, and a growing number of
+third party Elgg tools use it too.
+
+
+This plugin uses views and events hooks to allow you to easily add
+site-wide categories across Elgg tools.
+
+This is a two-line addition to any plugin.
+
+In your edit/create form:
+
+ echo elgg_view('input/categories', $vars);
+
+In your object view:
+
+ echo elgg_view('output/categories', $vars);
+
+Note that in both cases, $vars['entity'] MUST be populated with
+the entity the categories apply to, if it exists. \ No newline at end of file
diff --git a/mod/categories/start.php b/mod/categories/start.php
new file mode 100644
index 000000000..0aacf11e7
--- /dev/null
+++ b/mod/categories/start.php
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Elgg categories plugin
+ *
+ * @package ElggCategories
+ */
+
+elgg_register_event_handler('init', 'system', 'categories_init');
+
+/**
+ * Initialise categories plugin
+ *
+ */
+function categories_init() {
+
+ elgg_extend_view('css/elgg', 'categories/css');
+
+ elgg_register_page_handler('categories', 'categories_page_handler');
+
+ elgg_register_event_handler('update', 'all', 'categories_save');
+ elgg_register_event_handler('create', 'all', 'categories_save');
+
+ // To keep the category plugins in the settings area and because we have to do special stuff,
+ // handle saving ourself.
+ elgg_register_plugin_hook_handler('action', 'plugins/settings/save', 'categories_save_site_categories');
+}
+
+
+/**
+ * Category page handler
+ * @return bool
+ */
+function categories_page_handler() {
+ include(dirname(__FILE__) . "/pages/categories/listing.php");
+ return true;
+}
+
+/**
+ * Save categories to object upon save / edit
+ *
+ */
+function categories_save($event, $object_type, $object) {
+ if ($object instanceof ElggEntity) {
+ $marker = get_input('universal_category_marker');
+
+ if ($marker == 'on') {
+ $categories = get_input('universal_categories_list');
+
+ if (empty($categories)) {
+ $categories = array();
+ }
+
+ $object->universal_categories = $categories;
+ }
+ }
+ return TRUE;
+}
+
+/**
+ * Saves the site categories.
+ *
+ * @param type $hook
+ * @param type $type
+ * @param type $value
+ * @param type $params
+ */
+function categories_save_site_categories($hook, $type, $value, $params) {
+ $plugin_id = get_input('plugin_id');
+ if ($plugin_id != 'categories') {
+ return $value;
+ }
+
+ $categories = get_input('categories');
+ $categories = string_to_tag_array($categories);
+
+ $site = elgg_get_site_entity();
+ $site->categories = $categories;
+ system_message(elgg_echo("categories:save:success"));
+
+ elgg_delete_admin_notice('categories_admin_notice_no_categories');
+
+ forward(REFERER);
+} \ No newline at end of file
diff --git a/mod/categories/views/default/categories.php b/mod/categories/views/default/categories.php
new file mode 100644
index 000000000..8577ef01b
--- /dev/null
+++ b/mod/categories/views/default/categories.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Categories input view
+ *
+ * @package ElggCategories
+ *
+ * @deprecated 1.8
+ */
+
+elgg_deprecated_notice("Use input/categories instead of categories", 1.8);
+
+echo elgg_view('input/categories', $vars);
diff --git a/mod/categories/views/default/categories/css.php b/mod/categories/views/default/categories/css.php
new file mode 100644
index 000000000..5f38e2867
--- /dev/null
+++ b/mod/categories/views/default/categories/css.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Categories CSS extender
+ *
+ * @package Categories
+ */
+?>
+
+.categories li label {
+ font-size: 100%;
+ line-height: 1.2em;
+}
diff --git a/mod/categories/views/default/categories/view.php b/mod/categories/views/default/categories/view.php
new file mode 100644
index 000000000..6d1f7c1bb
--- /dev/null
+++ b/mod/categories/views/default/categories/view.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * @deprecated 1.8
+ */
+
+elgg_deprecated_notice("Use output/categories instead of categories/view", 1.8);
+
+echo elgg_view('output/categories', $vars);
diff --git a/mod/categories/views/default/input/categories.php b/mod/categories/views/default/input/categories.php
new file mode 100644
index 000000000..b543cde45
--- /dev/null
+++ b/mod/categories/views/default/input/categories.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Categories input view
+ *
+ * @package ElggCategories
+ *
+ * @uses $vars['entity'] The entity being edited or created
+ */
+
+if (isset($vars['entity']) && $vars['entity'] instanceof ElggEntity) {
+ $selected_categories = $vars['entity']->universal_categories;
+}
+
+// use sticky values if set
+if (isset($vars['universal_categories_list'])) {
+ $selected_categories = $vars['universal_categories_list'];
+}
+
+$categories = elgg_get_site_entity()->categories;
+if (empty($categories)) {
+ $categories = array();
+}
+if (empty($selected_categories)) {
+ $selected_categories = array();
+}
+
+if (!empty($categories)) {
+ if (!is_array($categories)) {
+ $categories = array($categories);
+ }
+
+ // checkboxes want Label => value, so in our case we need category => category
+ $categories = array_flip($categories);
+ array_walk($categories, create_function('&$v, $k', '$v = $k;'));
+
+ ?>
+
+<div class="categories">
+ <label><?php echo elgg_echo('categories'); ?></label><br />
+ <?php
+ echo elgg_view('input/checkboxes', array(
+ 'options' => $categories,
+ 'value' => $selected_categories,
+ 'name' => 'universal_categories_list',
+ 'align' => 'horizontal',
+ ));
+
+ ?>
+ <input type="hidden" name="universal_category_marker" value="on" />
+</div>
+
+ <?php
+
+} else {
+ echo '<input type="hidden" name="universal_category_marker" value="on" />';
+}
diff --git a/mod/categories/views/default/output/categories.php b/mod/categories/views/default/output/categories.php
new file mode 100644
index 000000000..4b3a3fb6a
--- /dev/null
+++ b/mod/categories/views/default/output/categories.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * View categories on an entity
+ *
+ * @uses $vars['entity']
+ */
+
+$linkstr = '';
+if (isset($vars['entity']) && $vars['entity'] instanceof ElggEntity) {
+
+ $categories = $vars['entity']->universal_categories;
+ if (!empty($categories)) {
+ if (!is_array($categories)) {
+ $categories = array($categories);
+ }
+ foreach($categories as $category) {
+ $link = elgg_get_site_url() . 'categories/list?category=' . urlencode($category);
+ if (!empty($linkstr)) {
+ $linkstr .= ', ';
+ }
+ $linkstr .= '<a href="'.$link.'">' . $category . '</a>';
+ }
+ }
+
+}
+
+if ($linkstr) {
+ echo '<p class="elgg-output-categories">' . elgg_echo('categories') . ": $linkstr</p>";
+}
diff --git a/mod/categories/views/default/plugins/categories/settings.php b/mod/categories/views/default/plugins/categories/settings.php
new file mode 100644
index 000000000..3802da95a
--- /dev/null
+++ b/mod/categories/views/default/plugins/categories/settings.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Administrator sets the categories for the site
+ *
+ * @package ElggCategories
+ */
+
+// Get site categories
+$site = elgg_get_site_entity();
+$categories = $site->categories;
+
+if (empty($categories)) {
+ $categories = array();
+}
+
+?>
+<div>
+ <p><?php echo elgg_echo('categories:explanation'); ?></p>
+<?php
+ echo elgg_view('input/tags', array('value' => $categories, 'name' => 'categories'));
+?>
+</div> \ No newline at end of file
diff --git a/mod/custom_index/index.php b/mod/custom_index/index.php
new file mode 100644
index 000000000..53990a006
--- /dev/null
+++ b/mod/custom_index/index.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Elgg custom index page
+ *
+ */
+
+elgg_push_context('front');
+
+elgg_push_context('widgets');
+
+$list_params = array(
+ 'type' => 'object',
+ 'limit' => 4,
+ 'full_view' => false,
+ 'view_type_toggle' => false,
+ 'pagination' => false,
+);
+
+//grab the latest 4 blog posts
+$list_params['subtype'] = 'blog';
+$blogs = elgg_list_entities($list_params);
+
+//grab the latest bookmarks
+$list_params['subtype'] = 'bookmarks';
+$bookmarks = elgg_list_entities($list_params);
+
+//grab the latest files
+$list_params['subtype'] = 'file';
+$files = elgg_list_entities($list_params);
+
+//get the newest members who have an avatar
+$newest_members = elgg_list_entities_from_metadata(array(
+ 'metadata_names' => 'icontime',
+ 'types' => 'user',
+ 'limit' => 10,
+ 'full_view' => false,
+ 'pagination' => false,
+ 'list_type' => 'gallery',
+ 'gallery_class' => 'elgg-gallery-users',
+ 'size' => 'small',
+));
+
+//newest groups
+$list_params['type'] = 'group';
+unset($list_params['subtype']);
+$groups = elgg_list_entities($list_params);
+
+//grab the login form
+$login = elgg_view("core/account/login_box");
+
+elgg_pop_context();
+
+// lay out the content
+$params = array(
+ 'blogs' => $blogs,
+ 'bookmarks' => $bookmarks,
+ 'files' => $files,
+ 'groups' => $groups,
+ 'login' => $login,
+ 'members' => $newest_members,
+);
+$body = elgg_view_layout('custom_index', $params);
+
+// no RSS feed with a "widget" front page
+global $autofeed;
+$autofeed = FALSE;
+
+echo elgg_view_page('', $body);
diff --git a/mod/custom_index/languages/en.php b/mod/custom_index/languages/en.php
new file mode 100644
index 000000000..071ff81e5
--- /dev/null
+++ b/mod/custom_index/languages/en.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Custom Index English language file
+ */
+
+$english = array(
+ 'custom:bookmarks' => "Latest bookmarks",
+ 'custom:groups' => "Latest groups",
+ 'custom:files' => "Latest files",
+ 'custom:blogs' => "Latest blog posts",
+ 'custom:members' => "Newest members",
+);
+
+add_translation("en", $english);
diff --git a/mod/custom_index/manifest.xml b/mod/custom_index/manifest.xml
new file mode 100644
index 000000000..80187efbc
--- /dev/null
+++ b/mod/custom_index/manifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Custom Index</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <description>A demonstration of how to create a front page plugin.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/custom_index/start.php b/mod/custom_index/start.php
new file mode 100644
index 000000000..48d03f27b
--- /dev/null
+++ b/mod/custom_index/start.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Elgg demo custom index page plugin
+ *
+ */
+
+elgg_register_event_handler('init', 'system', 'custom_index_init');
+
+function custom_index_init() {
+
+ // Extend system CSS with our own styles
+ elgg_extend_view('css/elgg', 'custom_index/css');
+
+ // Replace the default index page
+ elgg_register_plugin_hook_handler('index', 'system', 'custom_index');
+}
+
+function custom_index($hook, $type, $return, $params) {
+ if ($return == true) {
+ // another hook has already replaced the front page
+ return $return;
+ }
+
+ if (!include_once(dirname(__FILE__) . "/index.php")) {
+ return false;
+ }
+
+ // return true to signify that we have handled the front page
+ return true;
+}
diff --git a/mod/custom_index/views/default/custom_index/css.php b/mod/custom_index/views/default/custom_index/css.php
new file mode 100644
index 000000000..4c780a905
--- /dev/null
+++ b/mod/custom_index/views/default/custom_index/css.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Custom Index CSS
+ *
+ */
+?>
+
+/*******************************
+ Custom Index
+********************************/
+.custom-index {
+ padding: 10px 0;
+}
+.elgg-module-highlight {
+ -webkit-box-shadow: 1px 1px 5px #CCC;
+ -moz-box-shadow: 1px 1px 5px #CCC;
+ box-shadow: 1px 1px 5px #CCC;
+}
+.elgg-module-highlight:hover {
+ -webkit-box-shadow: 1px 1px 6px #AAA;
+ -moz-box-shadow: 1px 1px 6px #AAA;
+ box-shadow: 1px 1px 6px #AAA;
+}
diff --git a/mod/custom_index/views/default/page/layouts/custom_index.php b/mod/custom_index/views/default/page/layouts/custom_index.php
new file mode 100644
index 000000000..1267e19b2
--- /dev/null
+++ b/mod/custom_index/views/default/page/layouts/custom_index.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Elgg custom index layout
+ *
+ * You can edit the layout of this page with your own layout and style.
+ * Whatever you put in this view will appear on the front page of your site.
+ *
+ */
+
+$mod_params = array('class' => 'elgg-module-highlight');
+
+?>
+
+<div class="custom-index elgg-main elgg-grid clearfix">
+ <div class="elgg-col elgg-col-1of2">
+ <div class="elgg-inner pvm prl">
+<?php
+// left column
+
+// Top box for login or welcome message
+if (elgg_is_logged_in()) {
+ $top_box = "<h2>" . elgg_echo("welcome") . " ";
+ $top_box .= elgg_get_logged_in_user_entity()->name;
+ $top_box .= "</h2>";
+} else {
+ $top_box = $vars['login'];
+}
+echo elgg_view_module('featured', '', $top_box, $mod_params);
+
+// a view for plugins to extend
+echo elgg_view("index/lefthandside");
+
+// files
+if (elgg_is_active_plugin('file')) {
+ echo elgg_view_module('featured', elgg_echo("custom:files"), $vars['files'], $mod_params);
+}
+
+// groups
+if (elgg_is_active_plugin('groups')) {
+ echo elgg_view_module('featured', elgg_echo("custom:groups"), $vars['groups'], $mod_params);
+}
+?>
+ </div>
+ </div>
+ <div class="elgg-col elgg-col-1of2">
+ <div class="elgg-inner pvm">
+<?php
+// right column
+
+// a view for plugins to extend
+echo elgg_view("index/righthandside");
+
+// files
+echo elgg_view_module('featured', elgg_echo("custom:members"), $vars['members'], $mod_params);
+
+// groups
+if (elgg_is_active_plugin('blog')) {
+ echo elgg_view_module('featured', elgg_echo("custom:blogs"), $vars['blogs'], $mod_params);
+}
+
+// files
+if (elgg_is_active_plugin('bookmarks')) {
+ echo elgg_view_module('featured', elgg_echo("custom:bookmarks"), $vars['bookmarks'], $mod_params);
+}
+?>
+ </div>
+ </div>
+</div>
diff --git a/mod/dashboard/languages/en.php b/mod/dashboard/languages/en.php
new file mode 100644
index 000000000..e1378f2f1
--- /dev/null
+++ b/mod/dashboard/languages/en.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * User dashboard languages
+ */
+
+$english = array(
+ 'dashboard:widget:group:title' => 'Group activity',
+ 'dashboard:widget:group:desc' => 'View the activity in one of your groups',
+ 'dashboard:widget:group:select' => 'Select a group',
+ 'dashboard:widget:group:noactivity' => 'There is no activity in this group',
+ 'dashboard:widget:group:noselect' => 'Edit this widget to select a group',
+);
+
+add_translation("en", $english);
diff --git a/mod/dashboard/manifest.xml b/mod/dashboard/manifest.xml
new file mode 100644
index 000000000..cbbc1044c
--- /dev/null
+++ b/mod/dashboard/manifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>User Dashboard</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <description>A widget-based dashboard for your users</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/dashboard/start.php b/mod/dashboard/start.php
new file mode 100644
index 000000000..65007d1a8
--- /dev/null
+++ b/mod/dashboard/start.php
@@ -0,0 +1,83 @@
+<?php
+/**
+ * A user dashboard
+ */
+
+elgg_register_event_handler('init', 'system', 'dashboard_init');
+
+function dashboard_init() {
+ elgg_register_page_handler('dashboard', 'dashboard_page_handler');
+
+ elgg_extend_view('css/elgg', 'dashboard/css');
+
+ elgg_register_menu_item('topbar', array(
+ 'name' => 'dashboard',
+ 'href' => 'dashboard',
+ 'text' => elgg_view_icon('home') . elgg_echo('dashboard'),
+ 'priority' => 450,
+ 'section' => 'alt',
+ ));
+
+ elgg_register_widget_type(
+ 'group_activity',
+ elgg_echo('dashboard:widget:group:title'),
+ elgg_echo('dashboard:widget:group:desc'),
+ 'dashboard',
+ true
+ );
+
+ elgg_register_plugin_hook_handler('get_list', 'default_widgets', 'dashboard_default_widgets');
+}
+
+/**
+ * Dashboard page handler
+ * @return bool
+ */
+function dashboard_page_handler() {
+ // Ensure that only logged-in users can see this page
+ gatekeeper();
+
+ // Set context and title
+ elgg_set_context('dashboard');
+ elgg_set_page_owner_guid(elgg_get_logged_in_user_guid());
+ $title = elgg_echo('dashboard');
+
+ // wrap intro message in a div
+ $intro_message = elgg_view('dashboard/blurb');
+
+ $params = array(
+ 'content' => $intro_message,
+ 'num_columns' => 3,
+ 'show_access' => false,
+ );
+ $widgets = elgg_view_layout('widgets', $params);
+
+ $body = elgg_view_layout('one_column', array('content' => $widgets));
+
+ echo elgg_view_page($title, $body);
+ return true;
+}
+
+
+/**
+ * Register user dashboard with default widgets
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $type
+ * @param unknown_type $return
+ * @param unknown_type $params
+ * @return array
+ */
+function dashboard_default_widgets($hook, $type, $return, $params) {
+ $return[] = array(
+ 'name' => elgg_echo('dashboard'),
+ 'widget_context' => 'dashboard',
+ 'widget_columns' => 3,
+
+ 'event' => 'create',
+ 'entity_type' => 'user',
+ 'entity_subtype' => ELGG_ENTITIES_ANY_VALUE,
+ );
+
+ return $return;
+} \ No newline at end of file
diff --git a/mod/dashboard/views/default/dashboard/blurb.php b/mod/dashboard/views/default/dashboard/blurb.php
new file mode 100644
index 000000000..9293e513a
--- /dev/null
+++ b/mod/dashboard/views/default/dashboard/blurb.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg dashboard blurb
+ *
+ */
+?>
+
+<div class="elgg-col elgg-col-2of3">
+<?php
+ echo elgg_view('output/longtext', array(
+ 'id' => 'dashboard-info',
+ 'class' => 'elgg-inner pam mhs mtn',
+ 'value' => elgg_echo("dashboard:nowidgets"),
+ ));
+
+?>
+</div> \ No newline at end of file
diff --git a/mod/dashboard/views/default/dashboard/css.php b/mod/dashboard/views/default/dashboard/css.php
new file mode 100644
index 000000000..f49293293
--- /dev/null
+++ b/mod/dashboard/views/default/dashboard/css.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * User dashboard CSS
+ */
+?>
+
+#dashboard-info {
+ border: 2px solid #dedede;
+ margin-bottom: 15px;
+}
diff --git a/mod/dashboard/views/default/widgets/group_activity/content.php b/mod/dashboard/views/default/widgets/group_activity/content.php
new file mode 100644
index 000000000..60a9b352c
--- /dev/null
+++ b/mod/dashboard/views/default/widgets/group_activity/content.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Group activity widget
+ */
+
+$num = (int) $vars['entity']->num_display;
+$guid = $vars['entity']->group_guid;
+
+$content = '';
+
+if ($guid) {
+ $title = get_entity($guid)->name;
+ $content = "<h3>$title</h3>";
+
+ elgg_push_context('widgets');
+ $db_prefix = elgg_get_config('dbprefix');
+ $activity = elgg_list_river(array(
+ 'limit' => $num,
+ 'pagination' => false,
+ 'joins' => array("JOIN {$db_prefix}entities e1 ON e1.guid = rv.object_guid"),
+ 'wheres' => array("(e1.container_guid = $guid)"),
+ ));
+ if (!$activity) {
+ $activity = '<p>' . elgg_echo('dashboard:widget:group:noactivity') . '</p>';
+ }
+ elgg_pop_context();
+
+ $content .= $activity;
+} else {
+ // no group selected yet
+ if ($vars['entity']->canEdit()) {
+ $content = '<p>' . elgg_echo('dashboard:widget:group:noselect') . '</p>';
+ }
+}
+
+echo $content;
diff --git a/mod/dashboard/views/default/widgets/group_activity/edit.php b/mod/dashboard/views/default/widgets/group_activity/edit.php
new file mode 100644
index 000000000..4e10f6ad4
--- /dev/null
+++ b/mod/dashboard/views/default/widgets/group_activity/edit.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Group activity widget settings
+ */
+
+// once autocomplete is working use that
+$groups = elgg_get_logged_in_user_entity()->getGroups("", 0);
+$mygroups = array();
+if (!$vars['entity']->group_guid) {
+ $mygroups[0] = '';
+}
+foreach ($groups as $group) {
+ $mygroups[$group->guid] = $group->name;
+}
+$params = array(
+ 'name' => 'params[group_guid]',
+ 'value' => $vars['entity']->group_guid,
+ 'options_values' => $mygroups,
+);
+$group_dropdown = elgg_view('input/dropdown', $params);
+?>
+<div>
+ <?php echo elgg_echo('dashboard:widget:group:select'); ?>:
+ <?php echo $group_dropdown; ?>
+</div>
+<?php
+
+// set default value for number to display
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 8;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(5, 8, 10, 12, 15, 20),
+);
+$num_dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('widget:numbertodisplay'); ?>:
+ <?php echo $num_dropdown; ?>
+</div>
+
diff --git a/mod/developers/actions/developers/inspect.php b/mod/developers/actions/developers/inspect.php
new file mode 100644
index 000000000..6fd9e90f9
--- /dev/null
+++ b/mod/developers/actions/developers/inspect.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Ajax endpoint for inspection
+ *
+ */
+
+$inspect_type = get_input('inspect_type');
+$method = 'get' . str_replace(' ', '', $inspect_type);
+
+$inspector = new ElggInspector();
+if ($inspector && method_exists($inspector, $method)) {
+ $tree = $inspector->$method();
+ echo elgg_view('developers/tree', array('tree' => $tree));
+} else {
+ echo 'error';
+}
diff --git a/mod/developers/actions/developers/settings.php b/mod/developers/actions/developers/settings.php
new file mode 100644
index 000000000..7c91e2f5f
--- /dev/null
+++ b/mod/developers/actions/developers/settings.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Save the developer settings
+ */
+
+$site = elgg_get_site_entity();
+
+if (get_input('simple_cache')) {
+ elgg_enable_simplecache();
+} else {
+ elgg_disable_simplecache();
+}
+
+if (get_input('system_cache')) {
+ elgg_enable_system_cache();
+} else {
+ elgg_disable_system_cache();
+}
+
+$debug = get_input('debug_level');
+if ($debug) {
+ set_config('debug', $debug, $site->getGUID());
+} else {
+ unset_config('debug', $site->getGUID());
+}
+
+$simple_settings = array('display_errors', 'screen_log', 'show_strings',
+ 'wrap_views', 'log_events',);
+foreach ($simple_settings as $setting) {
+ elgg_set_plugin_setting($setting, get_input($setting), 'developers');
+}
+
+system_message(elgg_echo('developers:settings:success'));
+
+forward(REFERER);
diff --git a/mod/developers/classes/ElggInspector.php b/mod/developers/classes/ElggInspector.php
new file mode 100644
index 000000000..e83fc6b81
--- /dev/null
+++ b/mod/developers/classes/ElggInspector.php
@@ -0,0 +1,201 @@
+<?php
+/**
+ * Inspect Elgg variables
+ *
+ */
+
+class ElggInspector {
+
+ /**
+ * Get Elgg event information
+ *
+ * returns [event,type] => array(handlers)
+ */
+ public function getEvents() {
+ global $CONFIG;
+
+ $tree = array();
+ foreach ($CONFIG->events as $event => $types) {
+ foreach ($types as $type => $handlers) {
+ $tree[$event . ',' . $type] = array_values($handlers);
+ }
+ }
+
+ ksort($tree);
+
+ return $tree;
+ }
+
+ /**
+ * Get Elgg plugin hooks information
+ *
+ * returns [hook,type] => array(handlers)
+ */
+ public function getPluginHooks() {
+ global $CONFIG;
+
+ $tree = array();
+ foreach ($CONFIG->hooks as $hook => $types) {
+ foreach ($types as $type => $handlers) {
+ $tree[$hook . ',' . $type] = array_values($handlers);
+ }
+ }
+
+ ksort($tree);
+
+ return $tree;
+ }
+
+ /**
+ * Get Elgg view information
+ *
+ * returns [view] => array(view location and extensions)
+ */
+ public function getViews() {
+ global $CONFIG;
+
+ $coreViews = $this->recurseFileTree($CONFIG->viewpath . "default/");
+
+ // remove base path and php extension
+ array_walk($coreViews, create_function('&$v,$k', 'global $CONFIG; $v = substr($v, strlen($CONFIG->viewpath . "default/"), -4);'));
+
+ // setup views array before adding extensions and plugin views
+ $views = array();
+ foreach ($coreViews as $view) {
+ $views[$view] = array($CONFIG->viewpath . "default/" . $view . ".php");
+ }
+
+ // add plugins and handle overrides
+ foreach ($CONFIG->views->locations['default'] as $view => $location) {
+ $views[$view] = array($location . $view . ".php");
+ }
+
+ // now extensions
+ foreach ($CONFIG->views->extensions as $view => $extensions) {
+ $view_list = array();
+ foreach ($extensions as $priority => $ext_view) {
+ if (isset($views[$ext_view])) {
+ $view_list[] = $views[$ext_view][0];
+ }
+ }
+ if (count($view_list) > 0) {
+ $views[$view] = $view_list;
+ }
+ }
+
+ ksort($views);
+
+ return $views;
+ }
+
+ /**
+ * Get Elgg widget information
+ *
+ * returns [widget] => array(name, contexts)
+ */
+ public function getWidgets() {
+ global $CONFIG;
+
+ $tree = array();
+ foreach ($CONFIG->widgets->handlers as $handler => $handler_obj) {
+ $tree[$handler] = array($handler_obj->name, implode(',', array_values($handler_obj->context)));
+ }
+
+ ksort($tree);
+
+ return $tree;
+ }
+
+
+ /**
+ * Get Elgg actions information
+ *
+ * returns [action] => array(file, public, admin)
+ */
+ public function getActions() {
+ global $CONFIG;
+
+ $tree = array();
+ foreach ($CONFIG->actions as $action => $info) {
+ $tree[$action] = array($info['file'], ($info['public']) ? 'public' : 'logged in only', ($info['admin']) ? 'admin only' : 'non-admin');
+ }
+
+ ksort($tree);
+
+ return $tree;
+ }
+
+ /**
+ * Get simplecache information
+ *
+ * returns [views]
+ */
+ public function getSimpleCache() {
+ global $CONFIG;
+
+ $tree = array();
+ foreach ($CONFIG->views->simplecache as $view) {
+ $tree[$view] = "";
+ }
+
+ ksort($tree);
+
+ return $tree;
+ }
+
+ /**
+ * Get Elgg web services API methods
+ *
+ * returns [method] => array(function, parameters, call_method, api auth, user auth)
+ */
+ public function getWebServices() {
+ global $API_METHODS;
+
+ $tree = array();
+ foreach ($API_METHODS as $method => $info) {
+ $params = implode(', ', array_keys($info['parameters']));
+ if (!$params) {
+ $params = 'none';
+ }
+ $tree[$method] = array(
+ $info['function'],
+ "params: $params",
+ $info['call_method'],
+ ($info['require_api_auth']) ? 'API authentication required' : 'No API authentication required',
+ ($info['require_user_auth']) ? 'User authentication required' : 'No user authentication required',
+ );
+ }
+
+ ksort($tree);
+
+ return $tree;
+ }
+
+ /**
+ * Create array of all php files in directory and subdirectories
+ *
+ * @param $dir full path to directory to begin search
+ * @return array of every php file in $dir or below in file tree
+ */
+ protected function recurseFileTree($dir) {
+ $view_list = array();
+
+ $handle = opendir($dir);
+ while ($file = readdir($handle)) {
+ if ($file[0] == '.') {
+
+ } else if (is_dir($dir . $file)) {
+ $view_list = array_merge($view_list, $this->recurseFileTree($dir . $file. "/"));
+ } else {
+ $extension = strrchr(trim($file, "/"), '.');
+ if ($extension === ".php") {
+ $view_list[] = $dir . $file;
+ }
+ }
+ }
+ closedir($handle);
+
+ return $view_list;
+ }
+
+}
diff --git a/mod/developers/classes/ElggLogCache.php b/mod/developers/classes/ElggLogCache.php
new file mode 100644
index 000000000..5bd4bce28
--- /dev/null
+++ b/mod/developers/classes/ElggLogCache.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Cache logging information for later display
+ *
+ */
+
+class ElggLogCache {
+ protected $cache;
+
+ public function __construct() {
+ $this->cache = array();
+ }
+
+ /**
+ * Insert into cache
+ *
+ * @param mixed $data The log data to cache
+ */
+ public function insert($data) {
+ $this->cache[] = $data;
+ }
+
+ /**
+ * Insert into cache from plugin hook
+ *
+ * @param string $hook
+ * @param string $type
+ * @param bool $result
+ * @param array $params Must have the data at $params['msg']
+ */
+ public function insertDump($hook, $type, $result, $params) {
+ $this->insert($params['msg']);
+ return false;
+ }
+
+ /**
+ * Get the cache
+ *
+ * @return array
+ */
+ public function get() {
+ return $this->cache;
+ }
+}
diff --git a/mod/developers/languages/en.php b/mod/developers/languages/en.php
new file mode 100644
index 000000000..856efe008
--- /dev/null
+++ b/mod/developers/languages/en.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Elgg developer tools English language file.
+ *
+ */
+
+$english = array(
+ // menu
+ 'admin:develop_tools' => 'Tools',
+ 'admin:develop_tools:preview' => 'Theming Sandbox',
+ 'admin:develop_tools:inspect' => 'Inspect',
+ 'admin:develop_tools:unit_tests' => 'Unit Tests',
+ 'admin:developers' => 'Developers',
+ 'admin:developers:settings' => 'Settings',
+
+ // settings
+ 'elgg_dev_tools:settings:explanation' => 'Control your development and debugging settings below. Some of these settings are also available on other admin pages.',
+ 'developers:label:simple_cache' => 'Use simple cache',
+ 'developers:help:simple_cache' => 'Turn off this cache when developing. Otherwise, changes to your CSS and JavaScript will be ignored.',
+ 'developers:label:system_cache' => 'Use system cache',
+ 'developers:help:system_cache' => 'Turn this off when developing. Otherwise, changes in your plugins will not be registered.',
+ 'developers:label:debug_level' => "Trace level",
+ 'developers:help:debug_level' => "This controls the amount of information logged. See elgg_log() for more information.",
+ 'developers:label:display_errors' => 'Display fatal PHP errors',
+ 'developers:help:display_errors' => "By default, Elgg's .htaccess file supresses the display of fatal errors.",
+ 'developers:label:screen_log' => "Log to the screen",
+ 'developers:help:screen_log' => "This displays elgg_log() and elgg_dump() output on the web page.",
+ 'developers:label:show_strings' => "Show raw translation strings",
+ 'developers:help:show_strings' => "This displays the translation strings used by elgg_echo().",
+ 'developers:label:wrap_views' => "Wrap views",
+ 'developers:help:wrap_views' => "This wraps almost every view with HTML comments. Useful for finding the view creating particular HTML.",
+ 'developers:label:log_events' => "Log events and plugin hooks",
+ 'developers:help:log_events' => "Write events and plugin hooks to the log. Warning: there are many of these per page.",
+
+ 'developers:debug:off' => 'Off',
+ 'developers:debug:error' => 'Error',
+ 'developers:debug:warning' => 'Warning',
+ 'developers:debug:notice' => 'Notice',
+
+ // inspection
+ 'developers:inspect:help' => 'Inspect configuration of the Elgg framework.',
+
+ // event logging
+ 'developers:event_log_msg' => "%s: '%s, %s' in %s",
+
+ // theme preview
+ 'theme_preview:general' => 'Introduction',
+ 'theme_preview:breakout' => 'Break out of iframe',
+ 'theme_preview:buttons' => 'Buttons',
+ 'theme_preview:components' => 'Components',
+ 'theme_preview:forms' => 'Forms',
+ 'theme_preview:grid' => 'Grid',
+ 'theme_preview:icons' => 'Icons',
+ 'theme_preview:modules' => 'Modules',
+ 'theme_preview:navigation' => 'Navigation',
+ 'theme_preview:typography' => 'Typography',
+ 'theme_preview:miscellaneous' => 'Miscellaneous',
+
+ // unit tests
+ 'developers:unit_tests:description' => 'Elgg has unit and integration tests for detecting bugs in its core classes and functions.',
+ 'developers:unit_tests:warning' => 'Warning: Do Not Run These Tests on a Production Site. They can corrupt your database.',
+ 'developers:unit_tests:run' => 'Run',
+
+ // status messages
+ 'developers:settings:success' => 'Settings saved',
+);
+
+add_translation('en', $english);
diff --git a/mod/developers/manifest.xml b/mod/developers/manifest.xml
new file mode 100644
index 000000000..e31998872
--- /dev/null
+++ b/mod/developers/manifest.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Elgg Developer Tools</name>
+ <author>Core developers</author>
+ <version>1.0</version>
+ <category>bundled</category>
+ <category>development</category>
+ <blurb>Developer tools for Elgg</blurb>
+ <description>A set of tools for writing plugins and themes. It is recommended that you have this plugin at the top of the plugin list.</description>
+ <website>http://www.elgg.org/</website>
+ <bugtracker>http://trac.elgg.org</bugtracker>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/developers/start.php b/mod/developers/start.php
new file mode 100644
index 000000000..413a8ed9b
--- /dev/null
+++ b/mod/developers/start.php
@@ -0,0 +1,200 @@
+<?php
+/**
+ * Elgg developer tools
+ */
+
+// we want to run this as soon as possible - other plugins should not need to do this
+developers_process_settings();
+
+elgg_register_event_handler('init', 'system', 'developers_init');
+
+function developers_init() {
+ elgg_register_event_handler('pagesetup', 'system', 'developers_setup_menu');
+
+ elgg_extend_view('css/admin', 'developers/css');
+ elgg_extend_view('css/elgg', 'developers/css');
+
+ elgg_register_page_handler('theme_preview', 'developers_theme_preview_controller');
+
+ $action_base = elgg_get_plugins_path() . 'developers/actions/developers';
+ elgg_register_action('developers/settings', "$action_base/settings.php", 'admin');
+ elgg_register_action('developers/inspect', "$action_base/inspect.php", 'admin');
+
+ elgg_register_js('jquery.jstree', 'mod/developers/vendors/jsTree/jquery.jstree.js', 'footer');
+ elgg_register_css('jquery.jstree', 'mod/developers/vendors/jsTree/themes/default/style.css');
+
+ elgg_load_js('jquery.form');
+
+ elgg_register_js('elgg.dev', 'js/developers/developers.js', 'footer');
+ elgg_load_js('elgg.dev');
+}
+
+function developers_process_settings() {
+ if (elgg_get_plugin_setting('display_errors', 'developers') == 1) {
+ ini_set('display_errors', 1);
+ } else {
+ ini_set('display_errors', 0);
+ }
+
+ if (elgg_get_plugin_setting('screen_log', 'developers') == 1) {
+ $cache = new ElggLogCache();
+ elgg_set_config('log_cache', $cache);
+ elgg_register_plugin_hook_handler('debug', 'log', array($cache, 'insertDump'));
+ elgg_extend_view('page/elements/foot', 'developers/log');
+ }
+
+ if (elgg_get_plugin_setting('show_strings', 'developers') == 1) {
+ // first and last in case a plugin registers a translation in an init method
+ elgg_register_event_handler('init', 'system', 'developers_clear_strings', 1000);
+ elgg_register_event_handler('init', 'system', 'developers_clear_strings', 1);
+ }
+
+ if (elgg_get_plugin_setting('wrap_views', 'developers') == 1) {
+ elgg_register_plugin_hook_handler('view', 'all', 'developers_wrap_views');
+ }
+
+ if (elgg_get_plugin_setting('log_events', 'developers') == 1) {
+ elgg_register_event_handler('all', 'all', 'developers_log_events', 1);
+ elgg_register_plugin_hook_handler('all', 'all', 'developers_log_events', 1);
+ }
+}
+
+function developers_setup_menu() {
+ if (elgg_in_context('admin')) {
+ elgg_register_admin_menu_item('develop', 'inspect', 'develop_tools');
+ elgg_register_admin_menu_item('develop', 'preview', 'develop_tools');
+ elgg_register_admin_menu_item('develop', 'unit_tests', 'develop_tools');
+
+ elgg_register_menu_item('page', array(
+ 'name' => 'dev_settings',
+ 'href' => 'admin/developers/settings',
+ 'text' => elgg_echo('settings'),
+ 'context' => 'admin',
+ 'priority' => 10,
+ 'section' => 'develop'
+ ));
+ }
+}
+
+/**
+ * Clear all the strings so the raw descriptor strings are displayed
+ */
+function developers_clear_strings() {
+ global $CONFIG;
+
+ $language = get_language();
+ $CONFIG->translations[$language] = array();
+ $CONFIG->translations['en'] = array();
+}
+
+/**
+ * Post-process a view to add wrapper comments to it
+ */
+function developers_wrap_views($hook, $type, $result, $params) {
+ if (elgg_get_viewtype() != "default") {
+ return;
+ }
+
+ $excluded_bases = array('css', 'js', 'input', 'output', 'embed', 'icon',);
+
+ $excluded_views = array(
+ 'page/default',
+ 'page/admin',
+ 'page/elements/head',
+ );
+
+ $view = $params['view'];
+
+ $view_hierarchy = explode('/',$view);
+ if (in_array($view_hierarchy[0], $excluded_bases)) {
+ return;
+ }
+
+ if (in_array($view, $excluded_views)) {
+ return;
+ }
+
+ if ($result) {
+ $result = "<!-- developers:begin $view -->$result<!-- developers:end $view -->";
+ }
+
+ return $result;
+}
+
+/**
+ * Log the events and plugin hooks
+ */
+function developers_log_events($name, $type) {
+
+ // filter out some very common events
+ if ($name == 'view' || $name == 'display' || $name == 'log' || $name == 'debug') {
+ return;
+ }
+ if ($name == 'session:get' || $name == 'validate') {
+ return;
+ }
+
+ $stack = debug_backtrace();
+ if ($stack[2]['function'] == 'elgg_trigger_event') {
+ $event_type = 'Event';
+ } else {
+ $event_type = 'Plugin hook';
+ }
+ $function = $stack[3]['function'] . '()';
+ if ($function == 'require_once' || $function == 'include_once') {
+ $function = $stack[3]['file'];
+ }
+
+ $msg = elgg_echo('developers:event_log_msg', array(
+ $event_type,
+ $name,
+ $type,
+ $function,
+ ));
+ elgg_dump($msg, false, 'WARNING');
+
+ unset($stack);
+}
+
+/**
+ * Serve the theme preview pages
+ *
+ * @param array $page
+ * @return bool
+ */
+function developers_theme_preview_controller($page) {
+ if (!isset($page[0])) {
+ forward('theme_preview/general');
+ }
+
+ $pages = array(
+ 'buttons',
+ 'components',
+ 'forms',
+ 'grid',
+ 'icons',
+ 'modules',
+ 'navigation',
+ 'typography',
+ 'miscellaneous'
+ );
+
+ foreach ($pages as $page_name) {
+ elgg_register_menu_item('page', array(
+ 'name' => $page_name,
+ 'text' => elgg_echo("theme_preview:$page_name"),
+ 'href' => "theme_preview/$page_name",
+ ));
+ }
+
+ $title = elgg_echo("theme_preview:{$page[0]}");
+ $body = elgg_view("theme_preview/{$page[0]}");
+
+ $layout = elgg_view_layout('one_sidebar', array(
+ 'title' => $title,
+ 'content' => $body,
+ ));
+
+ echo elgg_view_page($title, $layout, 'theme_preview');
+ return true;
+}
diff --git a/mod/developers/vendors/jsTree/jquery.jstree.js b/mod/developers/vendors/jsTree/jquery.jstree.js
new file mode 100644
index 000000000..965a612f6
--- /dev/null
+++ b/mod/developers/vendors/jsTree/jquery.jstree.js
@@ -0,0 +1,4544 @@
+/*
+ * jsTree 1.0-rc3
+ * http://jstree.com/
+ *
+ * Copyright (c) 2010 Ivan Bozhanov (vakata.com)
+ *
+ * Licensed same as jquery - under the terms of either the MIT License or the GPL Version 2 License
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * $Date: 2011-02-09 01:17:14 +0200 (ÑÑ€, 09 февр 2011) $
+ * $Revision: 236 $
+ */
+
+/*jslint browser: true, onevar: true, undef: true, bitwise: true, strict: true */
+/*global window : false, clearInterval: false, clearTimeout: false, document: false, setInterval: false, setTimeout: false, jQuery: false, navigator: false, XSLTProcessor: false, DOMParser: false, XMLSerializer: false*/
+
+"use strict";
+
+// top wrapper to prevent multiple inclusion (is this OK?)
+(function () { if(jQuery && jQuery.jstree) { return; }
+ var is_ie6 = false, is_ie7 = false, is_ff2 = false;
+
+/*
+ * jsTree core
+ */
+(function ($) {
+ // Common functions not related to jsTree
+ // decided to move them to a `vakata` "namespace"
+ $.vakata = {};
+ // CSS related functions
+ $.vakata.css = {
+ get_css : function(rule_name, delete_flag, sheet) {
+ rule_name = rule_name.toLowerCase();
+ var css_rules = sheet.cssRules || sheet.rules,
+ j = 0;
+ do {
+ if(css_rules.length && j > css_rules.length + 5) { return false; }
+ if(css_rules[j].selectorText && css_rules[j].selectorText.toLowerCase() == rule_name) {
+ if(delete_flag === true) {
+ if(sheet.removeRule) { sheet.removeRule(j); }
+ if(sheet.deleteRule) { sheet.deleteRule(j); }
+ return true;
+ }
+ else { return css_rules[j]; }
+ }
+ }
+ while (css_rules[++j]);
+ return false;
+ },
+ add_css : function(rule_name, sheet) {
+ if($.jstree.css.get_css(rule_name, false, sheet)) { return false; }
+ if(sheet.insertRule) { sheet.insertRule(rule_name + ' { }', 0); } else { sheet.addRule(rule_name, null, 0); }
+ return $.vakata.css.get_css(rule_name);
+ },
+ remove_css : function(rule_name, sheet) {
+ return $.vakata.css.get_css(rule_name, true, sheet);
+ },
+ add_sheet : function(opts) {
+ var tmp = false, is_new = true;
+ if(opts.str) {
+ if(opts.title) { tmp = $("style[id='" + opts.title + "-stylesheet']")[0]; }
+ if(tmp) { is_new = false; }
+ else {
+ tmp = document.createElement("style");
+ tmp.setAttribute('type',"text/css");
+ if(opts.title) { tmp.setAttribute("id", opts.title + "-stylesheet"); }
+ }
+ if(tmp.styleSheet) {
+ if(is_new) {
+ document.getElementsByTagName("head")[0].appendChild(tmp);
+ tmp.styleSheet.cssText = opts.str;
+ }
+ else {
+ tmp.styleSheet.cssText = tmp.styleSheet.cssText + " " + opts.str;
+ }
+ }
+ else {
+ tmp.appendChild(document.createTextNode(opts.str));
+ document.getElementsByTagName("head")[0].appendChild(tmp);
+ }
+ return tmp.sheet || tmp.styleSheet;
+ }
+ if(opts.url) {
+ if(document.createStyleSheet) {
+ try { tmp = document.createStyleSheet(opts.url); } catch (e) { }
+ }
+ else {
+ tmp = document.createElement('link');
+ tmp.rel = 'stylesheet';
+ tmp.type = 'text/css';
+ tmp.media = "all";
+ tmp.href = opts.url;
+ document.getElementsByTagName("head")[0].appendChild(tmp);
+ return tmp.styleSheet;
+ }
+ }
+ }
+ };
+
+ // private variables
+ var instances = [], // instance array (used by $.jstree.reference/create/focused)
+ focused_instance = -1, // the index in the instance array of the currently focused instance
+ plugins = {}, // list of included plugins
+ prepared_move = {}; // for the move_node function
+
+ // jQuery plugin wrapper (thanks to jquery UI widget function)
+ $.fn.jstree = function (settings) {
+ var isMethodCall = (typeof settings == 'string'), // is this a method call like $().jstree("open_node")
+ args = Array.prototype.slice.call(arguments, 1),
+ returnValue = this;
+
+ // if a method call execute the method on all selected instances
+ if(isMethodCall) {
+ if(settings.substring(0, 1) == '_') { return returnValue; }
+ this.each(function() {
+ var instance = instances[$.data(this, "jstree-instance-id")],
+ methodValue = (instance && $.isFunction(instance[settings])) ? instance[settings].apply(instance, args) : instance;
+ if(typeof methodValue !== "undefined" && (settings.indexOf("is_") === 0 || (methodValue !== true && methodValue !== false))) { returnValue = methodValue; return false; }
+ });
+ }
+ else {
+ this.each(function() {
+ // extend settings and allow for multiple hashes and $.data
+ var instance_id = $.data(this, "jstree-instance-id"),
+ a = [],
+ b = settings ? $.extend({}, true, settings) : {},
+ c = $(this),
+ s = false,
+ t = [];
+ a = a.concat(args);
+ if(c.data("jstree")) { a.push(c.data("jstree")); }
+ b = a.length ? $.extend.apply(null, [true, b].concat(a)) : b;
+
+ // if an instance already exists, destroy it first
+ if(typeof instance_id !== "undefined" && instances[instance_id]) { instances[instance_id].destroy(); }
+ // push a new empty object to the instances array
+ instance_id = parseInt(instances.push({}),10) - 1;
+ // store the jstree instance id to the container element
+ $.data(this, "jstree-instance-id", instance_id);
+ // clean up all plugins
+ b.plugins = $.isArray(b.plugins) ? b.plugins : $.jstree.defaults.plugins.slice();
+ b.plugins.unshift("core");
+ // only unique plugins
+ b.plugins = b.plugins.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",");
+
+ // extend defaults with passed data
+ s = $.extend(true, {}, $.jstree.defaults, b);
+ s.plugins = b.plugins;
+ $.each(plugins, function (i, val) {
+ if($.inArray(i, s.plugins) === -1) { s[i] = null; delete s[i]; }
+ else { t.push(i); }
+ });
+ s.plugins = t;
+
+ // push the new object to the instances array (at the same time set the default classes to the container) and init
+ instances[instance_id] = new $.jstree._instance(instance_id, $(this).addClass("jstree jstree-" + instance_id), s);
+ // init all activated plugins for this instance
+ $.each(instances[instance_id]._get_settings().plugins, function (i, val) { instances[instance_id].data[val] = {}; });
+ $.each(instances[instance_id]._get_settings().plugins, function (i, val) { if(plugins[val]) { plugins[val].__init.apply(instances[instance_id]); } });
+ // initialize the instance
+ setTimeout(function() { instances[instance_id].init(); }, 0);
+ });
+ }
+ // return the jquery selection (or if it was a method call that returned a value - the returned value)
+ return returnValue;
+ };
+ // object to store exposed functions and objects
+ $.jstree = {
+ defaults : {
+ plugins : []
+ },
+ _focused : function () { return instances[focused_instance] || null; },
+ _reference : function (needle) {
+ // get by instance id
+ if(instances[needle]) { return instances[needle]; }
+ // get by DOM (if still no luck - return null
+ var o = $(needle);
+ if(!o.length && typeof needle === "string") { o = $("#" + needle); }
+ if(!o.length) { return null; }
+ return instances[o.closest(".jstree").data("jstree-instance-id")] || null;
+ },
+ _instance : function (index, container, settings) {
+ // for plugins to store data in
+ this.data = { core : {} };
+ this.get_settings = function () { return $.extend(true, {}, settings); };
+ this._get_settings = function () { return settings; };
+ this.get_index = function () { return index; };
+ this.get_container = function () { return container; };
+ this.get_container_ul = function () { return container.children("ul:eq(0)"); };
+ this._set_settings = function (s) {
+ settings = $.extend(true, {}, settings, s);
+ };
+ },
+ _fn : { },
+ plugin : function (pname, pdata) {
+ pdata = $.extend({}, {
+ __init : $.noop,
+ __destroy : $.noop,
+ _fn : {},
+ defaults : false
+ }, pdata);
+ plugins[pname] = pdata;
+
+ $.jstree.defaults[pname] = pdata.defaults;
+ $.each(pdata._fn, function (i, val) {
+ val.plugin = pname;
+ val.old = $.jstree._fn[i];
+ $.jstree._fn[i] = function () {
+ var rslt,
+ func = val,
+ args = Array.prototype.slice.call(arguments),
+ evnt = new $.Event("before.jstree"),
+ rlbk = false;
+
+ if(this.data.core.locked === true && i !== "unlock" && i !== "is_locked") { return; }
+
+ // Check if function belongs to the included plugins of this instance
+ do {
+ if(func && func.plugin && $.inArray(func.plugin, this._get_settings().plugins) !== -1) { break; }
+ func = func.old;
+ } while(func);
+ if(!func) { return; }
+
+ // context and function to trigger events, then finally call the function
+ if(i.indexOf("_") === 0) {
+ rslt = func.apply(this, args);
+ }
+ else {
+ rslt = this.get_container().triggerHandler(evnt, { "func" : i, "inst" : this, "args" : args, "plugin" : func.plugin });
+ if(rslt === false) { return; }
+ if(typeof rslt !== "undefined") { args = rslt; }
+
+ rslt = func.apply(
+ $.extend({}, this, {
+ __callback : function (data) {
+ this.get_container().triggerHandler( i + '.jstree', { "inst" : this, "args" : args, "rslt" : data, "rlbk" : rlbk });
+ },
+ __rollback : function () {
+ rlbk = this.get_rollback();
+ return rlbk;
+ },
+ __call_old : function (replace_arguments) {
+ return func.old.apply(this, (replace_arguments ? Array.prototype.slice.call(arguments, 1) : args ) );
+ }
+ }), args);
+ }
+
+ // return the result
+ return rslt;
+ };
+ $.jstree._fn[i].old = val.old;
+ $.jstree._fn[i].plugin = pname;
+ });
+ },
+ rollback : function (rb) {
+ if(rb) {
+ if(!$.isArray(rb)) { rb = [ rb ]; }
+ $.each(rb, function (i, val) {
+ instances[val.i].set_rollback(val.h, val.d);
+ });
+ }
+ }
+ };
+ // set the prototype for all instances
+ $.jstree._fn = $.jstree._instance.prototype = {};
+
+ // load the css when DOM is ready
+ $(function() {
+ // code is copied from jQuery ($.browser is deprecated + there is a bug in IE)
+ var u = navigator.userAgent.toLowerCase(),
+ v = (u.match( /.+?(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
+ css_string = '' +
+ '.jstree ul, .jstree li { display:block; margin:0 0 0 0; padding:0 0 0 0; list-style-type:none; } ' +
+ '.jstree li { display:block; min-height:18px; line-height:18px; white-space:nowrap; margin-left:18px; min-width:18px; } ' +
+ '.jstree-rtl li { margin-left:0; margin-right:18px; } ' +
+ '.jstree > ul > li { margin-left:0px; } ' +
+ '.jstree-rtl > ul > li { margin-right:0px; } ' +
+ '.jstree ins { display:inline-block; text-decoration:none; width:18px; height:18px; margin:0 0 0 0; padding:0; } ' +
+ '.jstree a { display:inline-block; line-height:16px; height:16px; color:black; white-space:nowrap; text-decoration:none; padding:1px 2px; margin:0; } ' +
+ '.jstree a:focus { outline: none; } ' +
+ '.jstree a > ins { height:16px; width:16px; } ' +
+ '.jstree a > .jstree-icon { margin-right:3px; } ' +
+ '.jstree-rtl a > .jstree-icon { margin-left:3px; margin-right:0; } ' +
+ 'li.jstree-open > ul { display:block; } ' +
+ 'li.jstree-closed > ul { display:none; } ';
+ // Correct IE 6 (does not support the > CSS selector)
+ if(/msie/.test(u) && parseInt(v, 10) == 6) {
+ is_ie6 = true;
+
+ // fix image flicker and lack of caching
+ try {
+ document.execCommand("BackgroundImageCache", false, true);
+ } catch (err) { }
+
+ css_string += '' +
+ '.jstree li { height:18px; margin-left:0; margin-right:0; } ' +
+ '.jstree li li { margin-left:18px; } ' +
+ '.jstree-rtl li li { margin-left:0px; margin-right:18px; } ' +
+ 'li.jstree-open ul { display:block; } ' +
+ 'li.jstree-closed ul { display:none !important; } ' +
+ '.jstree li a { display:inline; border-width:0 !important; padding:0px 2px !important; } ' +
+ '.jstree li a ins { height:16px; width:16px; margin-right:3px; } ' +
+ '.jstree-rtl li a ins { margin-right:0px; margin-left:3px; } ';
+ }
+ // Correct IE 7 (shifts anchor nodes onhover)
+ if(/msie/.test(u) && parseInt(v, 10) == 7) {
+ is_ie7 = true;
+ css_string += '.jstree li a { border-width:0 !important; padding:0px 2px !important; } ';
+ }
+ // correct ff2 lack of display:inline-block
+ if(!/compatible/.test(u) && /mozilla/.test(u) && parseFloat(v, 10) < 1.9) {
+ is_ff2 = true;
+ css_string += '' +
+ '.jstree ins { display:-moz-inline-box; } ' +
+ '.jstree li { line-height:12px; } ' + // WHY??
+ '.jstree a { display:-moz-inline-box; } ' +
+ '.jstree .jstree-no-icons .jstree-checkbox { display:-moz-inline-stack !important; } ';
+ /* this shouldn't be here as it is theme specific */
+ }
+ // the default stylesheet
+ $.vakata.css.add_sheet({ str : css_string, title : "jstree" });
+ });
+
+ // core functions (open, close, create, update, delete)
+ $.jstree.plugin("core", {
+ __init : function () {
+ this.data.core.locked = false;
+ this.data.core.to_open = this.get_settings().core.initially_open;
+ this.data.core.to_load = this.get_settings().core.initially_load;
+ },
+ defaults : {
+ html_titles : false,
+ animation : 500,
+ initially_open : [],
+ initially_load : [],
+ open_parents : true,
+ notify_plugins : true,
+ rtl : false,
+ load_open : false,
+ strings : {
+ loading : "Loading ...",
+ new_node : "New node",
+ multiple_selection : "Multiple selection"
+ }
+ },
+ _fn : {
+ init : function () {
+ this.set_focus();
+ if(this._get_settings().core.rtl) {
+ this.get_container().addClass("jstree-rtl").css("direction", "rtl");
+ }
+ this.get_container().html("<ul><li class='jstree-last jstree-leaf'><ins>&#160;</ins><a class='jstree-loading' href='#'><ins class='jstree-icon'>&#160;</ins>" + this._get_string("loading") + "</a></li></ul>");
+ this.data.core.li_height = this.get_container_ul().find("li.jstree-closed, li.jstree-leaf").eq(0).height() || 18;
+
+ this.get_container()
+ .delegate("li > ins", "click.jstree", $.proxy(function (event) {
+ var trgt = $(event.target);
+ if(trgt.is("ins") && event.pageY - trgt.offset().top < this.data.core.li_height) { this.toggle_node(trgt); }
+ }, this))
+ .bind("mousedown.jstree", $.proxy(function () {
+ this.set_focus(); // This used to be setTimeout(set_focus,0) - why?
+ }, this))
+ .bind("dblclick.jstree", function (event) {
+ var sel;
+ if(document.selection && document.selection.empty) { document.selection.empty(); }
+ else {
+ if(window.getSelection) {
+ sel = window.getSelection();
+ try {
+ sel.removeAllRanges();
+ sel.collapse();
+ } catch (err) { }
+ }
+ }
+ });
+ if(this._get_settings().core.notify_plugins) {
+ this.get_container()
+ .bind("load_node.jstree", $.proxy(function (e, data) {
+ var o = this._get_node(data.rslt.obj),
+ t = this;
+ if(o === -1) { o = this.get_container_ul(); }
+ if(!o.length) { return; }
+ o.find("li").each(function () {
+ var th = $(this);
+ if(th.data("jstree")) {
+ $.each(th.data("jstree"), function (plugin, values) {
+ if(t.data[plugin] && $.isFunction(t["_" + plugin + "_notify"])) {
+ t["_" + plugin + "_notify"].call(t, th, values);
+ }
+ });
+ }
+ });
+ }, this));
+ }
+ if(this._get_settings().core.load_open) {
+ this.get_container()
+ .bind("load_node.jstree", $.proxy(function (e, data) {
+ var o = this._get_node(data.rslt.obj),
+ t = this;
+ if(o === -1) { o = this.get_container_ul(); }
+ if(!o.length) { return; }
+ o.find("li.jstree-open:not(:has(ul))").each(function () {
+ t.load_node(this, $.noop, $.noop);
+ });
+ }, this));
+ }
+ this.__callback();
+ this.load_node(-1, function () { this.loaded(); this.reload_nodes(); });
+ },
+ destroy : function () {
+ var i,
+ n = this.get_index(),
+ s = this._get_settings(),
+ _this = this;
+
+ $.each(s.plugins, function (i, val) {
+ try { plugins[val].__destroy.apply(_this); } catch(err) { }
+ });
+ this.__callback();
+ // set focus to another instance if this one is focused
+ if(this.is_focused()) {
+ for(i in instances) {
+ if(instances.hasOwnProperty(i) && i != n) {
+ instances[i].set_focus();
+ break;
+ }
+ }
+ }
+ // if no other instance found
+ if(n === focused_instance) { focused_instance = -1; }
+ // remove all traces of jstree in the DOM (only the ones set using jstree*) and cleans all events
+ this.get_container()
+ .unbind(".jstree")
+ .undelegate(".jstree")
+ .removeData("jstree-instance-id")
+ .find("[class^='jstree']")
+ .andSelf()
+ .attr("class", function () { return this.className.replace(/jstree[^ ]*|$/ig,''); });
+ $(document)
+ .unbind(".jstree-" + n)
+ .undelegate(".jstree-" + n);
+ // remove the actual data
+ instances[n] = null;
+ delete instances[n];
+ },
+
+ _core_notify : function (n, data) {
+ if(data.opened) {
+ this.open_node(n, false, true);
+ }
+ },
+
+ lock : function () {
+ this.data.core.locked = true;
+ this.get_container().children("ul").addClass("jstree-locked").css("opacity","0.7");
+ this.__callback({});
+ },
+ unlock : function () {
+ this.data.core.locked = false;
+ this.get_container().children("ul").removeClass("jstree-locked").css("opacity","1");
+ this.__callback({});
+ },
+ is_locked : function () { return this.data.core.locked; },
+ save_opened : function () {
+ var _this = this;
+ this.data.core.to_open = [];
+ this.get_container_ul().find("li.jstree-open").each(function () {
+ if(this.id) { _this.data.core.to_open.push("#" + this.id.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:")); }
+ });
+ this.__callback(_this.data.core.to_open);
+ },
+ save_loaded : function () { },
+ reload_nodes : function (is_callback) {
+ var _this = this,
+ done = true,
+ current = [],
+ remaining = [];
+ if(!is_callback) {
+ this.data.core.reopen = false;
+ this.data.core.refreshing = true;
+ this.data.core.to_open = $.map($.makeArray(this.data.core.to_open), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); });
+ this.data.core.to_load = $.map($.makeArray(this.data.core.to_load), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); });
+ if(this.data.core.to_open.length) {
+ this.data.core.to_load = this.data.core.to_load.concat(this.data.core.to_open);
+ }
+ }
+ if(this.data.core.to_load.length) {
+ $.each(this.data.core.to_load, function (i, val) {
+ if(val == "#") { return true; }
+ if($(val).length) { current.push(val); }
+ else { remaining.push(val); }
+ });
+ if(current.length) {
+ this.data.core.to_load = remaining;
+ $.each(current, function (i, val) {
+ if(!_this._is_loaded(val)) {
+ _this.load_node(val, function () { _this.reload_nodes(true); }, function () { _this.reload_nodes(true); });
+ done = false;
+ }
+ });
+ }
+ }
+ if(this.data.core.to_open.length) {
+ $.each(this.data.core.to_open, function (i, val) {
+ _this.open_node(val, false, true);
+ });
+ }
+ if(done) {
+ // TODO: find a more elegant approach to syncronizing returning requests
+ if(this.data.core.reopen) { clearTimeout(this.data.core.reopen); }
+ this.data.core.reopen = setTimeout(function () { _this.__callback({}, _this); }, 50);
+ this.data.core.refreshing = false;
+ this.reopen();
+ }
+ },
+ reopen : function () {
+ var _this = this;
+ if(this.data.core.to_open.length) {
+ $.each(this.data.core.to_open, function (i, val) {
+ _this.open_node(val, false, true);
+ });
+ }
+ this.__callback({});
+ },
+ refresh : function (obj) {
+ var _this = this;
+ this.save_opened();
+ if(!obj) { obj = -1; }
+ obj = this._get_node(obj);
+ if(!obj) { obj = -1; }
+ if(obj !== -1) { obj.children("UL").remove(); }
+ else { this.get_container_ul().empty(); }
+ this.load_node(obj, function () { _this.__callback({ "obj" : obj}); _this.reload_nodes(); });
+ },
+ // Dummy function to fire after the first load (so that there is a jstree.loaded event)
+ loaded : function () {
+ this.__callback();
+ },
+ // deal with focus
+ set_focus : function () {
+ if(this.is_focused()) { return; }
+ var f = $.jstree._focused();
+ if(f) { f.unset_focus(); }
+
+ this.get_container().addClass("jstree-focused");
+ focused_instance = this.get_index();
+ this.__callback();
+ },
+ is_focused : function () {
+ return focused_instance == this.get_index();
+ },
+ unset_focus : function () {
+ if(this.is_focused()) {
+ this.get_container().removeClass("jstree-focused");
+ focused_instance = -1;
+ }
+ this.__callback();
+ },
+
+ // traverse
+ _get_node : function (obj) {
+ var $obj = $(obj, this.get_container());
+ if($obj.is(".jstree") || obj == -1) { return -1; }
+ $obj = $obj.closest("li", this.get_container());
+ return $obj.length ? $obj : false;
+ },
+ _get_next : function (obj, strict) {
+ obj = this._get_node(obj);
+ if(obj === -1) { return this.get_container().find("> ul > li:first-child"); }
+ if(!obj.length) { return false; }
+ if(strict) { return (obj.nextAll("li").size() > 0) ? obj.nextAll("li:eq(0)") : false; }
+
+ if(obj.hasClass("jstree-open")) { return obj.find("li:eq(0)"); }
+ else if(obj.nextAll("li").size() > 0) { return obj.nextAll("li:eq(0)"); }
+ else { return obj.parentsUntil(".jstree","li").next("li").eq(0); }
+ },
+ _get_prev : function (obj, strict) {
+ obj = this._get_node(obj);
+ if(obj === -1) { return this.get_container().find("> ul > li:last-child"); }
+ if(!obj.length) { return false; }
+ if(strict) { return (obj.prevAll("li").length > 0) ? obj.prevAll("li:eq(0)") : false; }
+
+ if(obj.prev("li").length) {
+ obj = obj.prev("li").eq(0);
+ while(obj.hasClass("jstree-open")) { obj = obj.children("ul:eq(0)").children("li:last"); }
+ return obj;
+ }
+ else { var o = obj.parentsUntil(".jstree","li:eq(0)"); return o.length ? o : false; }
+ },
+ _get_parent : function (obj) {
+ obj = this._get_node(obj);
+ if(obj == -1 || !obj.length) { return false; }
+ var o = obj.parentsUntil(".jstree", "li:eq(0)");
+ return o.length ? o : -1;
+ },
+ _get_children : function (obj) {
+ obj = this._get_node(obj);
+ if(obj === -1) { return this.get_container().children("ul:eq(0)").children("li"); }
+ if(!obj.length) { return false; }
+ return obj.children("ul:eq(0)").children("li");
+ },
+ get_path : function (obj, id_mode) {
+ var p = [],
+ _this = this;
+ obj = this._get_node(obj);
+ if(obj === -1 || !obj || !obj.length) { return false; }
+ obj.parentsUntil(".jstree", "li").each(function () {
+ p.push( id_mode ? this.id : _this.get_text(this) );
+ });
+ p.reverse();
+ p.push( id_mode ? obj.attr("id") : this.get_text(obj) );
+ return p;
+ },
+
+ // string functions
+ _get_string : function (key) {
+ return this._get_settings().core.strings[key] || key;
+ },
+
+ is_open : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-open"); },
+ is_closed : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-closed"); },
+ is_leaf : function (obj) { obj = this._get_node(obj); return obj && obj !== -1 && obj.hasClass("jstree-leaf"); },
+ correct_state : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj || obj === -1) { return false; }
+ obj.removeClass("jstree-closed jstree-open").addClass("jstree-leaf").children("ul").remove();
+ this.__callback({ "obj" : obj });
+ },
+ // open/close
+ open_node : function (obj, callback, skip_animation) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ if(!obj.hasClass("jstree-closed")) { if(callback) { callback.call(); } return false; }
+ var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation,
+ t = this;
+ if(!this._is_loaded(obj)) {
+ obj.children("a").addClass("jstree-loading");
+ this.load_node(obj, function () { t.open_node(obj, callback, skip_animation); }, callback);
+ }
+ else {
+ if(this._get_settings().core.open_parents) {
+ obj.parentsUntil(".jstree",".jstree-closed").each(function () {
+ t.open_node(this, false, true);
+ });
+ }
+ if(s) { obj.children("ul").css("display","none"); }
+ obj.removeClass("jstree-closed").addClass("jstree-open").children("a").removeClass("jstree-loading");
+ if(s) { obj.children("ul").stop(true, true).slideDown(s, function () { this.style.display = ""; t.after_open(obj); }); }
+ else { t.after_open(obj); }
+ this.__callback({ "obj" : obj });
+ if(callback) { callback.call(); }
+ }
+ },
+ after_open : function (obj) { this.__callback({ "obj" : obj }); },
+ close_node : function (obj, skip_animation) {
+ obj = this._get_node(obj);
+ var s = skip_animation || is_ie6 ? 0 : this._get_settings().core.animation,
+ t = this;
+ if(!obj.length || !obj.hasClass("jstree-open")) { return false; }
+ if(s) { obj.children("ul").attr("style","display:block !important"); }
+ obj.removeClass("jstree-open").addClass("jstree-closed");
+ if(s) { obj.children("ul").stop(true, true).slideUp(s, function () { this.style.display = ""; t.after_close(obj); }); }
+ else { t.after_close(obj); }
+ this.__callback({ "obj" : obj });
+ },
+ after_close : function (obj) { this.__callback({ "obj" : obj }); },
+ toggle_node : function (obj) {
+ obj = this._get_node(obj);
+ if(obj.hasClass("jstree-closed")) { return this.open_node(obj); }
+ if(obj.hasClass("jstree-open")) { return this.close_node(obj); }
+ },
+ open_all : function (obj, do_animation, original_obj) {
+ obj = obj ? this._get_node(obj) : -1;
+ if(!obj || obj === -1) { obj = this.get_container_ul(); }
+ if(original_obj) {
+ obj = obj.find("li.jstree-closed");
+ }
+ else {
+ original_obj = obj;
+ if(obj.is(".jstree-closed")) { obj = obj.find("li.jstree-closed").andSelf(); }
+ else { obj = obj.find("li.jstree-closed"); }
+ }
+ var _this = this;
+ obj.each(function () {
+ var __this = this;
+ if(!_this._is_loaded(this)) { _this.open_node(this, function() { _this.open_all(__this, do_animation, original_obj); }, !do_animation); }
+ else { _this.open_node(this, false, !do_animation); }
+ });
+ // so that callback is fired AFTER all nodes are open
+ if(original_obj.find('li.jstree-closed').length === 0) { this.__callback({ "obj" : original_obj }); }
+ },
+ close_all : function (obj, do_animation) {
+ var _this = this;
+ obj = obj ? this._get_node(obj) : this.get_container();
+ if(!obj || obj === -1) { obj = this.get_container_ul(); }
+ obj.find("li.jstree-open").andSelf().each(function () { _this.close_node(this, !do_animation); });
+ this.__callback({ "obj" : obj });
+ },
+ clean_node : function (obj) {
+ obj = obj && obj != -1 ? $(obj) : this.get_container_ul();
+ obj = obj.is("li") ? obj.find("li").andSelf() : obj.find("li");
+ obj.removeClass("jstree-last")
+ .filter("li:last-child").addClass("jstree-last").end()
+ .filter(":has(li)")
+ .not(".jstree-open").removeClass("jstree-leaf").addClass("jstree-closed");
+ obj.not(".jstree-open, .jstree-closed").addClass("jstree-leaf").children("ul").remove();
+ this.__callback({ "obj" : obj });
+ },
+ // rollback
+ get_rollback : function () {
+ this.__callback();
+ return { i : this.get_index(), h : this.get_container().children("ul").clone(true), d : this.data };
+ },
+ set_rollback : function (html, data) {
+ this.get_container().empty().append(html);
+ this.data = data;
+ this.__callback();
+ },
+ // Dummy functions to be overwritten by any datastore plugin included
+ load_node : function (obj, s_call, e_call) { this.__callback({ "obj" : obj }); },
+ _is_loaded : function (obj) { return true; },
+
+ // Basic operations: create
+ create_node : function (obj, position, js, callback, is_loaded) {
+ obj = this._get_node(obj);
+ position = typeof position === "undefined" ? "last" : position;
+ var d = $("<li />"),
+ s = this._get_settings().core,
+ tmp;
+
+ if(obj !== -1 && !obj.length) { return false; }
+ if(!is_loaded && !this._is_loaded(obj)) { this.load_node(obj, function () { this.create_node(obj, position, js, callback, true); }); return false; }
+
+ this.__rollback();
+
+ if(typeof js === "string") { js = { "data" : js }; }
+ if(!js) { js = {}; }
+ if(js.attr) { d.attr(js.attr); }
+ if(js.metadata) { d.data(js.metadata); }
+ if(js.state) { d.addClass("jstree-" + js.state); }
+ if(!js.data) { js.data = this._get_string("new_node"); }
+ if(!$.isArray(js.data)) { tmp = js.data; js.data = []; js.data.push(tmp); }
+ $.each(js.data, function (i, m) {
+ tmp = $("<a />");
+ if($.isFunction(m)) { m = m.call(this, js); }
+ if(typeof m == "string") { tmp.attr('href','#')[ s.html_titles ? "html" : "text" ](m); }
+ else {
+ if(!m.attr) { m.attr = {}; }
+ if(!m.attr.href) { m.attr.href = '#'; }
+ tmp.attr(m.attr)[ s.html_titles ? "html" : "text" ](m.title);
+ if(m.language) { tmp.addClass(m.language); }
+ }
+ tmp.prepend("<ins class='jstree-icon'>&#160;</ins>");
+ if(m.icon) {
+ if(m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); }
+ else { tmp.children("ins").css("background","url('" + m.icon + "') center center no-repeat"); }
+ }
+ d.append(tmp);
+ });
+ d.prepend("<ins class='jstree-icon'>&#160;</ins>");
+ if(obj === -1) {
+ obj = this.get_container();
+ if(position === "before") { position = "first"; }
+ if(position === "after") { position = "last"; }
+ }
+ switch(position) {
+ case "before": obj.before(d); tmp = this._get_parent(obj); break;
+ case "after" : obj.after(d); tmp = this._get_parent(obj); break;
+ case "inside":
+ case "first" :
+ if(!obj.children("ul").length) { obj.append("<ul />"); }
+ obj.children("ul").prepend(d);
+ tmp = obj;
+ break;
+ case "last":
+ if(!obj.children("ul").length) { obj.append("<ul />"); }
+ obj.children("ul").append(d);
+ tmp = obj;
+ break;
+ default:
+ if(!obj.children("ul").length) { obj.append("<ul />"); }
+ if(!position) { position = 0; }
+ tmp = obj.children("ul").children("li").eq(position);
+ if(tmp.length) { tmp.before(d); }
+ else { obj.children("ul").append(d); }
+ tmp = obj;
+ break;
+ }
+ if(tmp === -1 || tmp.get(0) === this.get_container().get(0)) { tmp = -1; }
+ this.clean_node(tmp);
+ this.__callback({ "obj" : d, "parent" : tmp });
+ if(callback) { callback.call(this, d); }
+ return d;
+ },
+ // Basic operations: rename (deal with text)
+ get_text : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ var s = this._get_settings().core.html_titles;
+ obj = obj.children("a:eq(0)");
+ if(s) {
+ obj = obj.clone();
+ obj.children("INS").remove();
+ return obj.html();
+ }
+ else {
+ obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
+ return obj.nodeValue;
+ }
+ },
+ set_text : function (obj, val) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ obj = obj.children("a:eq(0)");
+ if(this._get_settings().core.html_titles) {
+ var tmp = obj.children("INS").clone();
+ obj.html(val).prepend(tmp);
+ this.__callback({ "obj" : obj, "name" : val });
+ return true;
+ }
+ else {
+ obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
+ this.__callback({ "obj" : obj, "name" : val });
+ return (obj.nodeValue = val);
+ }
+ },
+ rename_node : function (obj, val) {
+ obj = this._get_node(obj);
+ this.__rollback();
+ if(obj && obj.length && this.set_text.apply(this, Array.prototype.slice.call(arguments))) { this.__callback({ "obj" : obj, "name" : val }); }
+ },
+ // Basic operations: deleting nodes
+ delete_node : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ this.__rollback();
+ var p = this._get_parent(obj), prev = $([]), t = this;
+ obj.each(function () {
+ prev = prev.add(t._get_prev(this));
+ });
+ obj = obj.detach();
+ if(p !== -1 && p.find("> ul > li").length === 0) {
+ p.removeClass("jstree-open jstree-closed").addClass("jstree-leaf");
+ }
+ this.clean_node(p);
+ this.__callback({ "obj" : obj, "prev" : prev, "parent" : p });
+ return obj;
+ },
+ prepare_move : function (o, r, pos, cb, is_cb) {
+ var p = {};
+
+ p.ot = $.jstree._reference(o) || this;
+ p.o = p.ot._get_node(o);
+ p.r = r === - 1 ? -1 : this._get_node(r);
+ p.p = (typeof pos === "undefined" || pos === false) ? "last" : pos; // TODO: move to a setting
+ if(!is_cb && prepared_move.o && prepared_move.o[0] === p.o[0] && prepared_move.r[0] === p.r[0] && prepared_move.p === p.p) {
+ this.__callback(prepared_move);
+ if(cb) { cb.call(this, prepared_move); }
+ return;
+ }
+ p.ot = $.jstree._reference(p.o) || this;
+ p.rt = $.jstree._reference(p.r) || this; // r === -1 ? p.ot : $.jstree._reference(p.r) || this
+ if(p.r === -1 || !p.r) {
+ p.cr = -1;
+ switch(p.p) {
+ case "first":
+ case "before":
+ case "inside":
+ p.cp = 0;
+ break;
+ case "after":
+ case "last":
+ p.cp = p.rt.get_container().find(" > ul > li").length;
+ break;
+ default:
+ p.cp = p.p;
+ break;
+ }
+ }
+ else {
+ if(!/^(before|after)$/.test(p.p) && !this._is_loaded(p.r)) {
+ return this.load_node(p.r, function () { this.prepare_move(o, r, pos, cb, true); });
+ }
+ switch(p.p) {
+ case "before":
+ p.cp = p.r.index();
+ p.cr = p.rt._get_parent(p.r);
+ break;
+ case "after":
+ p.cp = p.r.index() + 1;
+ p.cr = p.rt._get_parent(p.r);
+ break;
+ case "inside":
+ case "first":
+ p.cp = 0;
+ p.cr = p.r;
+ break;
+ case "last":
+ p.cp = p.r.find(" > ul > li").length;
+ p.cr = p.r;
+ break;
+ default:
+ p.cp = p.p;
+ p.cr = p.r;
+ break;
+ }
+ }
+ p.np = p.cr == -1 ? p.rt.get_container() : p.cr;
+ p.op = p.ot._get_parent(p.o);
+ p.cop = p.o.index();
+ if(p.op === -1) { p.op = p.ot ? p.ot.get_container() : this.get_container(); }
+ if(!/^(before|after)$/.test(p.p) && p.op && p.np && p.op[0] === p.np[0] && p.o.index() < p.cp) { p.cp++; }
+ //if(p.p === "before" && p.op && p.np && p.op[0] === p.np[0] && p.o.index() < p.cp) { p.cp--; }
+ p.or = p.np.find(" > ul > li:nth-child(" + (p.cp + 1) + ")");
+ prepared_move = p;
+ this.__callback(prepared_move);
+ if(cb) { cb.call(this, prepared_move); }
+ },
+ check_move : function () {
+ var obj = prepared_move, ret = true, r = obj.r === -1 ? this.get_container() : obj.r;
+ if(!obj || !obj.o || obj.or[0] === obj.o[0]) { return false; }
+ if(obj.op && obj.np && obj.op[0] === obj.np[0] && obj.cp - 1 === obj.o.index()) { return false; }
+ obj.o.each(function () {
+ if(r.parentsUntil(".jstree", "li").andSelf().index(this) !== -1) { ret = false; return false; }
+ });
+ return ret;
+ },
+ move_node : function (obj, ref, position, is_copy, is_prepared, skip_check) {
+ if(!is_prepared) {
+ return this.prepare_move(obj, ref, position, function (p) {
+ this.move_node(p, false, false, is_copy, true, skip_check);
+ });
+ }
+ if(is_copy) {
+ prepared_move.cy = true;
+ }
+ if(!skip_check && !this.check_move()) { return false; }
+
+ this.__rollback();
+ var o = false;
+ if(is_copy) {
+ o = obj.o.clone(true);
+ o.find("*[id]").andSelf().each(function () {
+ if(this.id) { this.id = "copy_" + this.id; }
+ });
+ }
+ else { o = obj.o; }
+
+ if(obj.or.length) { obj.or.before(o); }
+ else {
+ if(!obj.np.children("ul").length) { $("<ul />").appendTo(obj.np); }
+ obj.np.children("ul:eq(0)").append(o);
+ }
+
+ try {
+ obj.ot.clean_node(obj.op);
+ obj.rt.clean_node(obj.np);
+ if(!obj.op.find("> ul > li").length) {
+ obj.op.removeClass("jstree-open jstree-closed").addClass("jstree-leaf").children("ul").remove();
+ }
+ } catch (e) { }
+
+ if(is_copy) {
+ prepared_move.cy = true;
+ prepared_move.oc = o;
+ }
+ this.__callback(prepared_move);
+ return prepared_move;
+ },
+ _get_move : function () { return prepared_move; }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree ui plugin
+ * This plugins handles selecting/deselecting/hovering/dehovering nodes
+ */
+(function ($) {
+ var scrollbar_width, e1, e2;
+ $(function() {
+ if (/msie/.test(navigator.userAgent.toLowerCase())) {
+ e1 = $('<textarea cols="10" rows="2"></textarea>').css({ position: 'absolute', top: -1000, left: 0 }).appendTo('body');
+ e2 = $('<textarea cols="10" rows="2" style="overflow: hidden;"></textarea>').css({ position: 'absolute', top: -1000, left: 0 }).appendTo('body');
+ scrollbar_width = e1.width() - e2.width();
+ e1.add(e2).remove();
+ }
+ else {
+ e1 = $('<div />').css({ width: 100, height: 100, overflow: 'auto', position: 'absolute', top: -1000, left: 0 })
+ .prependTo('body').append('<div />').find('div').css({ width: '100%', height: 200 });
+ scrollbar_width = 100 - e1.width();
+ e1.parent().remove();
+ }
+ });
+ $.jstree.plugin("ui", {
+ __init : function () {
+ this.data.ui.selected = $();
+ this.data.ui.last_selected = false;
+ this.data.ui.hovered = null;
+ this.data.ui.to_select = this.get_settings().ui.initially_select;
+
+ this.get_container()
+ .delegate("a", "click.jstree", $.proxy(function (event) {
+ event.preventDefault();
+ event.currentTarget.blur();
+ if(!$(event.currentTarget).hasClass("jstree-loading")) {
+ this.select_node(event.currentTarget, true, event);
+ }
+ }, this))
+ .delegate("a", "mouseenter.jstree", $.proxy(function (event) {
+ if(!$(event.currentTarget).hasClass("jstree-loading")) {
+ this.hover_node(event.target);
+ }
+ }, this))
+ .delegate("a", "mouseleave.jstree", $.proxy(function (event) {
+ if(!$(event.currentTarget).hasClass("jstree-loading")) {
+ this.dehover_node(event.target);
+ }
+ }, this))
+ .bind("reopen.jstree", $.proxy(function () {
+ this.reselect();
+ }, this))
+ .bind("get_rollback.jstree", $.proxy(function () {
+ this.dehover_node();
+ this.save_selected();
+ }, this))
+ .bind("set_rollback.jstree", $.proxy(function () {
+ this.reselect();
+ }, this))
+ .bind("close_node.jstree", $.proxy(function (event, data) {
+ var s = this._get_settings().ui,
+ obj = this._get_node(data.rslt.obj),
+ clk = (obj && obj.length) ? obj.children("ul").find("a.jstree-clicked") : $(),
+ _this = this;
+ if(s.selected_parent_close === false || !clk.length) { return; }
+ clk.each(function () {
+ _this.deselect_node(this);
+ if(s.selected_parent_close === "select_parent") { _this.select_node(obj); }
+ });
+ }, this))
+ .bind("delete_node.jstree", $.proxy(function (event, data) {
+ var s = this._get_settings().ui.select_prev_on_delete,
+ obj = this._get_node(data.rslt.obj),
+ clk = (obj && obj.length) ? obj.find("a.jstree-clicked") : [],
+ _this = this;
+ clk.each(function () { _this.deselect_node(this); });
+ if(s && clk.length) {
+ data.rslt.prev.each(function () {
+ if(this.parentNode) { _this.select_node(this); return false; /* if return false is removed all prev nodes will be selected */}
+ });
+ }
+ }, this))
+ .bind("move_node.jstree", $.proxy(function (event, data) {
+ if(data.rslt.cy) {
+ data.rslt.oc.find("a.jstree-clicked").removeClass("jstree-clicked");
+ }
+ }, this));
+ },
+ defaults : {
+ select_limit : -1, // 0, 1, 2 ... or -1 for unlimited
+ select_multiple_modifier : "ctrl", // on, or ctrl, shift, alt
+ select_range_modifier : "shift",
+ selected_parent_close : "select_parent", // false, "deselect", "select_parent"
+ selected_parent_open : true,
+ select_prev_on_delete : true,
+ disable_selecting_children : false,
+ initially_select : []
+ },
+ _fn : {
+ _get_node : function (obj, allow_multiple) {
+ if(typeof obj === "undefined" || obj === null) { return allow_multiple ? this.data.ui.selected : this.data.ui.last_selected; }
+ var $obj = $(obj, this.get_container());
+ if($obj.is(".jstree") || obj == -1) { return -1; }
+ $obj = $obj.closest("li", this.get_container());
+ return $obj.length ? $obj : false;
+ },
+ _ui_notify : function (n, data) {
+ if(data.selected) {
+ this.select_node(n, false);
+ }
+ },
+ save_selected : function () {
+ var _this = this;
+ this.data.ui.to_select = [];
+ this.data.ui.selected.each(function () { if(this.id) { _this.data.ui.to_select.push("#" + this.id.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:")); } });
+ this.__callback(this.data.ui.to_select);
+ },
+ reselect : function () {
+ var _this = this,
+ s = this.data.ui.to_select;
+ s = $.map($.makeArray(s), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); });
+ // this.deselect_all(); WHY deselect, breaks plugin state notifier?
+ $.each(s, function (i, val) { if(val && val !== "#") { _this.select_node(val); } });
+ this.data.ui.selected = this.data.ui.selected.filter(function () { return this.parentNode; });
+ this.__callback();
+ },
+ refresh : function (obj) {
+ this.save_selected();
+ return this.__call_old();
+ },
+ hover_node : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ //if(this.data.ui.hovered && obj.get(0) === this.data.ui.hovered.get(0)) { return; }
+ if(!obj.hasClass("jstree-hovered")) { this.dehover_node(); }
+ this.data.ui.hovered = obj.children("a").addClass("jstree-hovered").parent();
+ this._fix_scroll(obj);
+ this.__callback({ "obj" : obj });
+ },
+ dehover_node : function () {
+ var obj = this.data.ui.hovered, p;
+ if(!obj || !obj.length) { return false; }
+ p = obj.children("a").removeClass("jstree-hovered").parent();
+ if(this.data.ui.hovered[0] === p[0]) { this.data.ui.hovered = null; }
+ this.__callback({ "obj" : obj });
+ },
+ select_node : function (obj, check, e) {
+ obj = this._get_node(obj);
+ if(obj == -1 || !obj || !obj.length) { return false; }
+ var s = this._get_settings().ui,
+ is_multiple = (s.select_multiple_modifier == "on" || (s.select_multiple_modifier !== false && e && e[s.select_multiple_modifier + "Key"])),
+ is_range = (s.select_range_modifier !== false && e && e[s.select_range_modifier + "Key"] && this.data.ui.last_selected && this.data.ui.last_selected[0] !== obj[0] && this.data.ui.last_selected.parent()[0] === obj.parent()[0]),
+ is_selected = this.is_selected(obj),
+ proceed = true,
+ t = this;
+ if(check) {
+ if(s.disable_selecting_children && is_multiple &&
+ (
+ (obj.parentsUntil(".jstree","li").children("a.jstree-clicked").length) ||
+ (obj.children("ul").find("a.jstree-clicked:eq(0)").length)
+ )
+ ) {
+ return false;
+ }
+ proceed = false;
+ switch(!0) {
+ case (is_range):
+ this.data.ui.last_selected.addClass("jstree-last-selected");
+ obj = obj[ obj.index() < this.data.ui.last_selected.index() ? "nextUntil" : "prevUntil" ](".jstree-last-selected").andSelf();
+ if(s.select_limit == -1 || obj.length < s.select_limit) {
+ this.data.ui.last_selected.removeClass("jstree-last-selected");
+ this.data.ui.selected.each(function () {
+ if(this !== t.data.ui.last_selected[0]) { t.deselect_node(this); }
+ });
+ is_selected = false;
+ proceed = true;
+ }
+ else {
+ proceed = false;
+ }
+ break;
+ case (is_selected && !is_multiple):
+ this.deselect_all();
+ is_selected = false;
+ proceed = true;
+ break;
+ case (!is_selected && !is_multiple):
+ if(s.select_limit == -1 || s.select_limit > 0) {
+ this.deselect_all();
+ proceed = true;
+ }
+ break;
+ case (is_selected && is_multiple):
+ this.deselect_node(obj);
+ break;
+ case (!is_selected && is_multiple):
+ if(s.select_limit == -1 || this.data.ui.selected.length + 1 <= s.select_limit) {
+ proceed = true;
+ }
+ break;
+ }
+ }
+ if(proceed && !is_selected) {
+ if(!is_range) { this.data.ui.last_selected = obj; }
+ obj.children("a").addClass("jstree-clicked");
+ if(s.selected_parent_open) {
+ obj.parents(".jstree-closed").each(function () { t.open_node(this, false, true); });
+ }
+ this.data.ui.selected = this.data.ui.selected.add(obj);
+ this._fix_scroll(obj.eq(0));
+ this.__callback({ "obj" : obj, "e" : e });
+ }
+ },
+ _fix_scroll : function (obj) {
+ var c = this.get_container()[0], t;
+ if(c.scrollHeight > c.offsetHeight) {
+ obj = this._get_node(obj);
+ if(!obj || obj === -1 || !obj.length || !obj.is(":visible")) { return; }
+ t = obj.offset().top - this.get_container().offset().top;
+ if(t < 0) {
+ c.scrollTop = c.scrollTop + t - 1;
+ }
+ if(t + this.data.core.li_height + (c.scrollWidth > c.offsetWidth ? scrollbar_width : 0) > c.offsetHeight) {
+ c.scrollTop = c.scrollTop + (t - c.offsetHeight + this.data.core.li_height + 1 + (c.scrollWidth > c.offsetWidth ? scrollbar_width : 0));
+ }
+ }
+ },
+ deselect_node : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ if(this.is_selected(obj)) {
+ obj.children("a").removeClass("jstree-clicked");
+ this.data.ui.selected = this.data.ui.selected.not(obj);
+ if(this.data.ui.last_selected.get(0) === obj.get(0)) { this.data.ui.last_selected = this.data.ui.selected.eq(0); }
+ this.__callback({ "obj" : obj });
+ }
+ },
+ toggle_select : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return false; }
+ if(this.is_selected(obj)) { this.deselect_node(obj); }
+ else { this.select_node(obj); }
+ },
+ is_selected : function (obj) { return this.data.ui.selected.index(this._get_node(obj)) >= 0; },
+ get_selected : function (context) {
+ return context ? $(context).find("a.jstree-clicked").parent() : this.data.ui.selected;
+ },
+ deselect_all : function (context) {
+ var ret = context ? $(context).find("a.jstree-clicked").parent() : this.get_container().find("a.jstree-clicked").parent();
+ ret.children("a.jstree-clicked").removeClass("jstree-clicked");
+ this.data.ui.selected = $([]);
+ this.data.ui.last_selected = false;
+ this.__callback({ "obj" : ret });
+ }
+ }
+ });
+ // include the selection plugin by default
+ $.jstree.defaults.plugins.push("ui");
+})(jQuery);
+//*/
+
+/*
+ * jsTree CRRM plugin
+ * Handles creating/renaming/removing/moving nodes by user interaction.
+ */
+(function ($) {
+ $.jstree.plugin("crrm", {
+ __init : function () {
+ this.get_container()
+ .bind("move_node.jstree", $.proxy(function (e, data) {
+ if(this._get_settings().crrm.move.open_onmove) {
+ var t = this;
+ data.rslt.np.parentsUntil(".jstree").andSelf().filter(".jstree-closed").each(function () {
+ t.open_node(this, false, true);
+ });
+ }
+ }, this));
+ },
+ defaults : {
+ input_width_limit : 200,
+ move : {
+ always_copy : false, // false, true or "multitree"
+ open_onmove : true,
+ default_position : "last",
+ check_move : function (m) { return true; }
+ }
+ },
+ _fn : {
+ _show_input : function (obj, callback) {
+ obj = this._get_node(obj);
+ var rtl = this._get_settings().core.rtl,
+ w = this._get_settings().crrm.input_width_limit,
+ w1 = obj.children("ins").width(),
+ w2 = obj.find("> a:visible > ins").width() * obj.find("> a:visible > ins").length,
+ t = this.get_text(obj),
+ h1 = $("<div />", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo("body"),
+ h2 = obj.css("position","relative").append(
+ $("<input />", {
+ "value" : t,
+ "class" : "jstree-rename-input",
+ // "size" : t.length,
+ "css" : {
+ "padding" : "0",
+ "border" : "1px solid silver",
+ "position" : "absolute",
+ "left" : (rtl ? "auto" : (w1 + w2 + 4) + "px"),
+ "right" : (rtl ? (w1 + w2 + 4) + "px" : "auto"),
+ "top" : "0px",
+ "height" : (this.data.core.li_height - 2) + "px",
+ "lineHeight" : (this.data.core.li_height - 2) + "px",
+ "width" : "150px" // will be set a bit further down
+ },
+ "blur" : $.proxy(function () {
+ var i = obj.children(".jstree-rename-input"),
+ v = i.val();
+ if(v === "") { v = t; }
+ h1.remove();
+ i.remove(); // rollback purposes
+ this.set_text(obj,t); // rollback purposes
+ this.rename_node(obj, v);
+ callback.call(this, obj, v, t);
+ obj.css("position","");
+ }, this),
+ "keyup" : function (event) {
+ var key = event.keyCode || event.which;
+ if(key == 27) { this.value = t; this.blur(); return; }
+ else if(key == 13) { this.blur(); return; }
+ else {
+ h2.width(Math.min(h1.text("pW" + this.value).width(),w));
+ }
+ },
+ "keypress" : function(event) {
+ var key = event.keyCode || event.which;
+ if(key == 13) { return false; }
+ }
+ })
+ ).children(".jstree-rename-input");
+ this.set_text(obj, "");
+ h1.css({
+ fontFamily : h2.css('fontFamily') || '',
+ fontSize : h2.css('fontSize') || '',
+ fontWeight : h2.css('fontWeight') || '',
+ fontStyle : h2.css('fontStyle') || '',
+ fontStretch : h2.css('fontStretch') || '',
+ fontVariant : h2.css('fontVariant') || '',
+ letterSpacing : h2.css('letterSpacing') || '',
+ wordSpacing : h2.css('wordSpacing') || ''
+ });
+ h2.width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select();
+ },
+ rename : function (obj) {
+ obj = this._get_node(obj);
+ this.__rollback();
+ var f = this.__callback;
+ this._show_input(obj, function (obj, new_name, old_name) {
+ f.call(this, { "obj" : obj, "new_name" : new_name, "old_name" : old_name });
+ });
+ },
+ create : function (obj, position, js, callback, skip_rename) {
+ var t, _this = this;
+ obj = this._get_node(obj);
+ if(!obj) { obj = -1; }
+ this.__rollback();
+ t = this.create_node(obj, position, js, function (t) {
+ var p = this._get_parent(t),
+ pos = $(t).index();
+ if(callback) { callback.call(this, t); }
+ if(p.length && p.hasClass("jstree-closed")) { this.open_node(p, false, true); }
+ if(!skip_rename) {
+ this._show_input(t, function (obj, new_name, old_name) {
+ _this.__callback({ "obj" : obj, "name" : new_name, "parent" : p, "position" : pos });
+ });
+ }
+ else { _this.__callback({ "obj" : t, "name" : this.get_text(t), "parent" : p, "position" : pos }); }
+ });
+ return t;
+ },
+ remove : function (obj) {
+ obj = this._get_node(obj, true);
+ var p = this._get_parent(obj), prev = this._get_prev(obj);
+ this.__rollback();
+ obj = this.delete_node(obj);
+ if(obj !== false) { this.__callback({ "obj" : obj, "prev" : prev, "parent" : p }); }
+ },
+ check_move : function () {
+ if(!this.__call_old()) { return false; }
+ var s = this._get_settings().crrm.move;
+ if(!s.check_move.call(this, this._get_move())) { return false; }
+ return true;
+ },
+ move_node : function (obj, ref, position, is_copy, is_prepared, skip_check) {
+ var s = this._get_settings().crrm.move;
+ if(!is_prepared) {
+ if(typeof position === "undefined") { position = s.default_position; }
+ if(position === "inside" && !s.default_position.match(/^(before|after)$/)) { position = s.default_position; }
+ return this.__call_old(true, obj, ref, position, is_copy, false, skip_check);
+ }
+ // if the move is already prepared
+ if(s.always_copy === true || (s.always_copy === "multitree" && obj.rt.get_index() !== obj.ot.get_index() )) {
+ is_copy = true;
+ }
+ this.__call_old(true, obj, ref, position, is_copy, true, skip_check);
+ },
+
+ cut : function (obj) {
+ obj = this._get_node(obj, true);
+ if(!obj || !obj.length) { return false; }
+ this.data.crrm.cp_nodes = false;
+ this.data.crrm.ct_nodes = obj;
+ this.__callback({ "obj" : obj });
+ },
+ copy : function (obj) {
+ obj = this._get_node(obj, true);
+ if(!obj || !obj.length) { return false; }
+ this.data.crrm.ct_nodes = false;
+ this.data.crrm.cp_nodes = obj;
+ this.__callback({ "obj" : obj });
+ },
+ paste : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj || !obj.length) { return false; }
+ var nodes = this.data.crrm.ct_nodes ? this.data.crrm.ct_nodes : this.data.crrm.cp_nodes;
+ if(!this.data.crrm.ct_nodes && !this.data.crrm.cp_nodes) { return false; }
+ if(this.data.crrm.ct_nodes) { this.move_node(this.data.crrm.ct_nodes, obj); this.data.crrm.ct_nodes = false; }
+ if(this.data.crrm.cp_nodes) { this.move_node(this.data.crrm.cp_nodes, obj, false, true); }
+ this.__callback({ "obj" : obj, "nodes" : nodes });
+ }
+ }
+ });
+ // include the crr plugin by default
+ // $.jstree.defaults.plugins.push("crrm");
+})(jQuery);
+//*/
+
+/*
+ * jsTree themes plugin
+ * Handles loading and setting themes, as well as detecting path to themes, etc.
+ */
+(function ($) {
+ var themes_loaded = [];
+ // this variable stores the path to the themes folder - if left as false - it will be autodetected
+ $.jstree._themes = false;
+ $.jstree.plugin("themes", {
+ __init : function () {
+ this.get_container()
+ .bind("init.jstree", $.proxy(function () {
+ var s = this._get_settings().themes;
+ this.data.themes.dots = s.dots;
+ this.data.themes.icons = s.icons;
+ this.set_theme(s.theme, s.url);
+ }, this))
+ .bind("loaded.jstree", $.proxy(function () {
+ // bound here too, as simple HTML tree's won't honor dots & icons otherwise
+ if(!this.data.themes.dots) { this.hide_dots(); }
+ else { this.show_dots(); }
+ if(!this.data.themes.icons) { this.hide_icons(); }
+ else { this.show_icons(); }
+ }, this));
+ },
+ defaults : {
+ theme : "default",
+ url : false,
+ dots : true,
+ icons : true
+ },
+ _fn : {
+ set_theme : function (theme_name, theme_url) {
+ if(!theme_name) { return false; }
+ if(!theme_url) { theme_url = $.jstree._themes + theme_name + '/style.css'; }
+ if($.inArray(theme_url, themes_loaded) == -1) {
+ $.vakata.css.add_sheet({ "url" : theme_url });
+ themes_loaded.push(theme_url);
+ }
+ if(this.data.themes.theme != theme_name) {
+ this.get_container().removeClass('jstree-' + this.data.themes.theme);
+ this.data.themes.theme = theme_name;
+ }
+ this.get_container().addClass('jstree-' + theme_name);
+ if(!this.data.themes.dots) { this.hide_dots(); }
+ else { this.show_dots(); }
+ if(!this.data.themes.icons) { this.hide_icons(); }
+ else { this.show_icons(); }
+ this.__callback();
+ },
+ get_theme : function () { return this.data.themes.theme; },
+
+ show_dots : function () { this.data.themes.dots = true; this.get_container().children("ul").removeClass("jstree-no-dots"); },
+ hide_dots : function () { this.data.themes.dots = false; this.get_container().children("ul").addClass("jstree-no-dots"); },
+ toggle_dots : function () { if(this.data.themes.dots) { this.hide_dots(); } else { this.show_dots(); } },
+
+ show_icons : function () { this.data.themes.icons = true; this.get_container().children("ul").removeClass("jstree-no-icons"); },
+ hide_icons : function () { this.data.themes.icons = false; this.get_container().children("ul").addClass("jstree-no-icons"); },
+ toggle_icons: function () { if(this.data.themes.icons) { this.hide_icons(); } else { this.show_icons(); } }
+ }
+ });
+ // autodetect themes path
+ $(function () {
+ if($.jstree._themes === false) {
+ $("script").each(function () {
+ if(this.src.toString().match(/jquery\.jstree[^\/]*?\.js(\?.*)?$/)) {
+ $.jstree._themes = this.src.toString().replace(/jquery\.jstree[^\/]*?\.js(\?.*)?$/, "") + 'themes/';
+ return false;
+ }
+ });
+ }
+ if($.jstree._themes === false) { $.jstree._themes = "themes/"; }
+ });
+ // include the themes plugin by default
+ $.jstree.defaults.plugins.push("themes");
+})(jQuery);
+//*/
+
+/*
+ * jsTree hotkeys plugin
+ * Enables keyboard navigation for all tree instances
+ * Depends on the jstree ui & jquery hotkeys plugins
+ */
+(function ($) {
+ var bound = [];
+ function exec(i, event) {
+ var f = $.jstree._focused(), tmp;
+ if(f && f.data && f.data.hotkeys && f.data.hotkeys.enabled) {
+ tmp = f._get_settings().hotkeys[i];
+ if(tmp) { return tmp.call(f, event); }
+ }
+ }
+ $.jstree.plugin("hotkeys", {
+ __init : function () {
+ if(typeof $.hotkeys === "undefined") { throw "jsTree hotkeys: jQuery hotkeys plugin not included."; }
+ if(!this.data.ui) { throw "jsTree hotkeys: jsTree UI plugin not included."; }
+ $.each(this._get_settings().hotkeys, function (i, v) {
+ if(v !== false && $.inArray(i, bound) == -1) {
+ $(document).bind("keydown", i, function (event) { return exec(i, event); });
+ bound.push(i);
+ }
+ });
+ this.get_container()
+ .bind("lock.jstree", $.proxy(function () {
+ if(this.data.hotkeys.enabled) { this.data.hotkeys.enabled = false; this.data.hotkeys.revert = true; }
+ }, this))
+ .bind("unlock.jstree", $.proxy(function () {
+ if(this.data.hotkeys.revert) { this.data.hotkeys.enabled = true; }
+ }, this));
+ this.enable_hotkeys();
+ },
+ defaults : {
+ "up" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
+ this.hover_node(this._get_prev(o));
+ return false;
+ },
+ "ctrl+up" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
+ this.hover_node(this._get_prev(o));
+ return false;
+ },
+ "shift+up" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
+ this.hover_node(this._get_prev(o));
+ return false;
+ },
+ "down" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
+ this.hover_node(this._get_next(o));
+ return false;
+ },
+ "ctrl+down" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
+ this.hover_node(this._get_next(o));
+ return false;
+ },
+ "shift+down" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected || -1;
+ this.hover_node(this._get_next(o));
+ return false;
+ },
+ "left" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected;
+ if(o) {
+ if(o.hasClass("jstree-open")) { this.close_node(o); }
+ else { this.hover_node(this._get_prev(o)); }
+ }
+ return false;
+ },
+ "ctrl+left" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected;
+ if(o) {
+ if(o.hasClass("jstree-open")) { this.close_node(o); }
+ else { this.hover_node(this._get_prev(o)); }
+ }
+ return false;
+ },
+ "shift+left" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected;
+ if(o) {
+ if(o.hasClass("jstree-open")) { this.close_node(o); }
+ else { this.hover_node(this._get_prev(o)); }
+ }
+ return false;
+ },
+ "right" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected;
+ if(o && o.length) {
+ if(o.hasClass("jstree-closed")) { this.open_node(o); }
+ else { this.hover_node(this._get_next(o)); }
+ }
+ return false;
+ },
+ "ctrl+right" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected;
+ if(o && o.length) {
+ if(o.hasClass("jstree-closed")) { this.open_node(o); }
+ else { this.hover_node(this._get_next(o)); }
+ }
+ return false;
+ },
+ "shift+right" : function () {
+ var o = this.data.ui.hovered || this.data.ui.last_selected;
+ if(o && o.length) {
+ if(o.hasClass("jstree-closed")) { this.open_node(o); }
+ else { this.hover_node(this._get_next(o)); }
+ }
+ return false;
+ },
+ "space" : function () {
+ if(this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").click(); }
+ return false;
+ },
+ "ctrl+space" : function (event) {
+ event.type = "click";
+ if(this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").trigger(event); }
+ return false;
+ },
+ "shift+space" : function (event) {
+ event.type = "click";
+ if(this.data.ui.hovered) { this.data.ui.hovered.children("a:eq(0)").trigger(event); }
+ return false;
+ },
+ "f2" : function () { this.rename(this.data.ui.hovered || this.data.ui.last_selected); },
+ "del" : function () { this.remove(this.data.ui.hovered || this._get_node(null)); }
+ },
+ _fn : {
+ enable_hotkeys : function () {
+ this.data.hotkeys.enabled = true;
+ },
+ disable_hotkeys : function () {
+ this.data.hotkeys.enabled = false;
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree JSON plugin
+ * The JSON data store. Datastores are build by overriding the `load_node` and `_is_loaded` functions.
+ */
+(function ($) {
+ $.jstree.plugin("json_data", {
+ __init : function() {
+ var s = this._get_settings().json_data;
+ if(s.progressive_unload) {
+ this.get_container().bind("after_close.jstree", function (e, data) {
+ data.rslt.obj.children("ul").remove();
+ });
+ }
+ },
+ defaults : {
+ // `data` can be a function:
+ // * accepts two arguments - node being loaded and a callback to pass the result to
+ // * will be executed in the current tree's scope & ajax won't be supported
+ data : false,
+ ajax : false,
+ correct_state : true,
+ progressive_render : false,
+ progressive_unload : false
+ },
+ _fn : {
+ load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_json(obj, function () { _this.__callback({ "obj" : _this._get_node(obj) }); s_call.call(this); }, e_call); },
+ _is_loaded : function (obj) {
+ var s = this._get_settings().json_data;
+ obj = this._get_node(obj);
+ return obj == -1 || !obj || (!s.ajax && !s.progressive_render && !$.isFunction(s.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").length > 0;
+ },
+ refresh : function (obj) {
+ obj = this._get_node(obj);
+ var s = this._get_settings().json_data;
+ if(obj && obj !== -1 && s.progressive_unload && ($.isFunction(s.data) || !!s.ajax)) {
+ obj.removeData("jstree-children");
+ }
+ return this.__call_old();
+ },
+ load_node_json : function (obj, s_call, e_call) {
+ var s = this.get_settings().json_data, d,
+ error_func = function () {},
+ success_func = function () {};
+ obj = this._get_node(obj);
+
+ if(obj && obj !== -1 && (s.progressive_render || s.progressive_unload) && !obj.is(".jstree-open, .jstree-leaf") && obj.children("ul").children("li").length === 0 && obj.data("jstree-children")) {
+ d = this._parse_json(obj.data("jstree-children"), obj);
+ if(d) {
+ obj.append(d);
+ if(!s.progressive_unload) { obj.removeData("jstree-children"); }
+ }
+ this.clean_node(obj);
+ if(s_call) { s_call.call(this); }
+ return;
+ }
+
+ if(obj && obj !== -1) {
+ if(obj.data("jstree-is-loading")) { return; }
+ else { obj.data("jstree-is-loading",true); }
+ }
+ switch(!0) {
+ case (!s.data && !s.ajax): throw "Neither data nor ajax settings supplied.";
+ // function option added here for easier model integration (also supporting async - see callback)
+ case ($.isFunction(s.data)):
+ s.data.call(this, obj, $.proxy(function (d) {
+ d = this._parse_json(d, obj);
+ if(!d) {
+ if(obj === -1 || !obj) {
+ if(s.correct_state) { this.get_container().children("ul").empty(); }
+ }
+ else {
+ obj.children("a.jstree-loading").removeClass("jstree-loading");
+ obj.removeData("jstree-is-loading");
+ if(s.correct_state) { this.correct_state(obj); }
+ }
+ if(e_call) { e_call.call(this); }
+ }
+ else {
+ if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); }
+ else { obj.append(d).children("a.jstree-loading").removeClass("jstree-loading"); obj.removeData("jstree-is-loading"); }
+ this.clean_node(obj);
+ if(s_call) { s_call.call(this); }
+ }
+ }, this));
+ break;
+ case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
+ if(!obj || obj == -1) {
+ d = this._parse_json(s.data, obj);
+ if(d) {
+ this.get_container().children("ul").empty().append(d.children());
+ this.clean_node();
+ }
+ else {
+ if(s.correct_state) { this.get_container().children("ul").empty(); }
+ }
+ }
+ if(s_call) { s_call.call(this); }
+ break;
+ case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
+ error_func = function (x, t, e) {
+ var ef = this.get_settings().json_data.ajax.error;
+ if(ef) { ef.call(this, x, t, e); }
+ if(obj != -1 && obj.length) {
+ obj.children("a.jstree-loading").removeClass("jstree-loading");
+ obj.removeData("jstree-is-loading");
+ if(t === "success" && s.correct_state) { this.correct_state(obj); }
+ }
+ else {
+ if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); }
+ }
+ if(e_call) { e_call.call(this); }
+ };
+ success_func = function (d, t, x) {
+ var sf = this.get_settings().json_data.ajax.success;
+ if(sf) { d = sf.call(this,d,t,x) || d; }
+ if(d === "" || (d && d.toString && d.toString().replace(/^[\s\n]+$/,"") === "") || (!$.isArray(d) && !$.isPlainObject(d))) {
+ return error_func.call(this, x, t, "");
+ }
+ d = this._parse_json(d, obj);
+ if(d) {
+ if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); }
+ else { obj.append(d).children("a.jstree-loading").removeClass("jstree-loading"); obj.removeData("jstree-is-loading"); }
+ this.clean_node(obj);
+ if(s_call) { s_call.call(this); }
+ }
+ else {
+ if(obj === -1 || !obj) {
+ if(s.correct_state) {
+ this.get_container().children("ul").empty();
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ else {
+ obj.children("a.jstree-loading").removeClass("jstree-loading");
+ obj.removeData("jstree-is-loading");
+ if(s.correct_state) {
+ this.correct_state(obj);
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ }
+ };
+ s.ajax.context = this;
+ s.ajax.error = error_func;
+ s.ajax.success = success_func;
+ if(!s.ajax.dataType) { s.ajax.dataType = "json"; }
+ if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); }
+ if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); }
+ $.ajax(s.ajax);
+ break;
+ }
+ },
+ _parse_json : function (js, obj, is_callback) {
+ var d = false,
+ p = this._get_settings(),
+ s = p.json_data,
+ t = p.core.html_titles,
+ tmp, i, j, ul1, ul2;
+
+ if(!js) { return d; }
+ if(s.progressive_unload && obj && obj !== -1) {
+ obj.data("jstree-children", d);
+ }
+ if($.isArray(js)) {
+ d = $();
+ if(!js.length) { return false; }
+ for(i = 0, j = js.length; i < j; i++) {
+ tmp = this._parse_json(js[i], obj, true);
+ if(tmp.length) { d = d.add(tmp); }
+ }
+ }
+ else {
+ if(typeof js == "string") { js = { data : js }; }
+ if(!js.data && js.data !== "") { return d; }
+ d = $("<li />");
+ if(js.attr) { d.attr(js.attr); }
+ if(js.metadata) { d.data(js.metadata); }
+ if(js.state) { d.addClass("jstree-" + js.state); }
+ if(!$.isArray(js.data)) { tmp = js.data; js.data = []; js.data.push(tmp); }
+ $.each(js.data, function (i, m) {
+ tmp = $("<a />");
+ if($.isFunction(m)) { m = m.call(this, js); }
+ if(typeof m == "string") { tmp.attr('href','#')[ t ? "html" : "text" ](m); }
+ else {
+ if(!m.attr) { m.attr = {}; }
+ if(!m.attr.href) { m.attr.href = '#'; }
+ tmp.attr(m.attr)[ t ? "html" : "text" ](m.title);
+ if(m.language) { tmp.addClass(m.language); }
+ }
+ tmp.prepend("<ins class='jstree-icon'>&#160;</ins>");
+ if(!m.icon && js.icon) { m.icon = js.icon; }
+ if(m.icon) {
+ if(m.icon.indexOf("/") === -1) { tmp.children("ins").addClass(m.icon); }
+ else { tmp.children("ins").css("background","url('" + m.icon + "') center center no-repeat"); }
+ }
+ d.append(tmp);
+ });
+ d.prepend("<ins class='jstree-icon'>&#160;</ins>");
+ if(js.children) {
+ if(s.progressive_render && js.state !== "open") {
+ d.addClass("jstree-closed").data("jstree-children", js.children);
+ }
+ else {
+ if(s.progressive_unload) { d.data("jstree-children", js.children); }
+ if($.isArray(js.children) && js.children.length) {
+ tmp = this._parse_json(js.children, obj, true);
+ if(tmp.length) {
+ ul2 = $("<ul />");
+ ul2.append(tmp);
+ d.append(ul2);
+ }
+ }
+ }
+ }
+ }
+ if(!is_callback) {
+ ul1 = $("<ul />");
+ ul1.append(d);
+ d = ul1;
+ }
+ return d;
+ },
+ get_json : function (obj, li_attr, a_attr, is_callback) {
+ var result = [],
+ s = this._get_settings(),
+ _this = this,
+ tmp1, tmp2, li, a, t, lang;
+ obj = this._get_node(obj);
+ if(!obj || obj === -1) { obj = this.get_container().find("> ul > li"); }
+ li_attr = $.isArray(li_attr) ? li_attr : [ "id", "class" ];
+ if(!is_callback && this.data.types) { li_attr.push(s.types.type_attr); }
+ a_attr = $.isArray(a_attr) ? a_attr : [ ];
+
+ obj.each(function () {
+ li = $(this);
+ tmp1 = { data : [] };
+ if(li_attr.length) { tmp1.attr = { }; }
+ $.each(li_attr, function (i, v) {
+ tmp2 = li.attr(v);
+ if(tmp2 && tmp2.length && tmp2.replace(/jstree[^ ]*/ig,'').length) {
+ tmp1.attr[v] = (" " + tmp2).replace(/ jstree[^ ]*/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,"");
+ }
+ });
+ if(li.hasClass("jstree-open")) { tmp1.state = "open"; }
+ if(li.hasClass("jstree-closed")) { tmp1.state = "closed"; }
+ if(li.data()) { tmp1.metadata = li.data(); }
+ a = li.children("a");
+ a.each(function () {
+ t = $(this);
+ if(
+ a_attr.length ||
+ $.inArray("languages", s.plugins) !== -1 ||
+ t.children("ins").get(0).style.backgroundImage.length ||
+ (t.children("ins").get(0).className && t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').length)
+ ) {
+ lang = false;
+ if($.inArray("languages", s.plugins) !== -1 && $.isArray(s.languages) && s.languages.length) {
+ $.each(s.languages, function (l, lv) {
+ if(t.hasClass(lv)) {
+ lang = lv;
+ return false;
+ }
+ });
+ }
+ tmp2 = { attr : { }, title : _this.get_text(t, lang) };
+ $.each(a_attr, function (k, z) {
+ tmp2.attr[z] = (" " + (t.attr(z) || "")).replace(/ jstree[^ ]*/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,"");
+ });
+ if($.inArray("languages", s.plugins) !== -1 && $.isArray(s.languages) && s.languages.length) {
+ $.each(s.languages, function (k, z) {
+ if(t.hasClass(z)) { tmp2.language = z; return true; }
+ });
+ }
+ if(t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/^\s+$/ig,"").length) {
+ tmp2.icon = t.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,"");
+ }
+ if(t.children("ins").get(0).style.backgroundImage.length) {
+ tmp2.icon = t.children("ins").get(0).style.backgroundImage.replace("url(","").replace(")","");
+ }
+ }
+ else {
+ tmp2 = _this.get_text(t);
+ }
+ if(a.length > 1) { tmp1.data.push(tmp2); }
+ else { tmp1.data = tmp2; }
+ });
+ li = li.find("> ul > li");
+ if(li.length) { tmp1.children = _this.get_json(li, li_attr, a_attr, true); }
+ result.push(tmp1);
+ });
+ return result;
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree languages plugin
+ * Adds support for multiple language versions in one tree
+ * This basically allows for many titles coexisting in one node, but only one of them being visible at any given time
+ * This is useful for maintaining the same structure in many languages (hence the name of the plugin)
+ */
+(function ($) {
+ $.jstree.plugin("languages", {
+ __init : function () { this._load_css(); },
+ defaults : [],
+ _fn : {
+ set_lang : function (i) {
+ var langs = this._get_settings().languages,
+ st = false,
+ selector = ".jstree-" + this.get_index() + ' a';
+ if(!$.isArray(langs) || langs.length === 0) { return false; }
+ if($.inArray(i,langs) == -1) {
+ if(!!langs[i]) { i = langs[i]; }
+ else { return false; }
+ }
+ if(i == this.data.languages.current_language) { return true; }
+ st = $.vakata.css.get_css(selector + "." + this.data.languages.current_language, false, this.data.languages.language_css);
+ if(st !== false) { st.style.display = "none"; }
+ st = $.vakata.css.get_css(selector + "." + i, false, this.data.languages.language_css);
+ if(st !== false) { st.style.display = ""; }
+ this.data.languages.current_language = i;
+ this.__callback(i);
+ return true;
+ },
+ get_lang : function () {
+ return this.data.languages.current_language;
+ },
+ _get_string : function (key, lang) {
+ var langs = this._get_settings().languages,
+ s = this._get_settings().core.strings;
+ if($.isArray(langs) && langs.length) {
+ lang = (lang && $.inArray(lang,langs) != -1) ? lang : this.data.languages.current_language;
+ }
+ if(s[lang] && s[lang][key]) { return s[lang][key]; }
+ if(s[key]) { return s[key]; }
+ return key;
+ },
+ get_text : function (obj, lang) {
+ obj = this._get_node(obj) || this.data.ui.last_selected;
+ if(!obj.size()) { return false; }
+ var langs = this._get_settings().languages,
+ s = this._get_settings().core.html_titles;
+ if($.isArray(langs) && langs.length) {
+ lang = (lang && $.inArray(lang,langs) != -1) ? lang : this.data.languages.current_language;
+ obj = obj.children("a." + lang);
+ }
+ else { obj = obj.children("a:eq(0)"); }
+ if(s) {
+ obj = obj.clone();
+ obj.children("INS").remove();
+ return obj.html();
+ }
+ else {
+ obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
+ return obj.nodeValue;
+ }
+ },
+ set_text : function (obj, val, lang) {
+ obj = this._get_node(obj) || this.data.ui.last_selected;
+ if(!obj.size()) { return false; }
+ var langs = this._get_settings().languages,
+ s = this._get_settings().core.html_titles,
+ tmp;
+ if($.isArray(langs) && langs.length) {
+ lang = (lang && $.inArray(lang,langs) != -1) ? lang : this.data.languages.current_language;
+ obj = obj.children("a." + lang);
+ }
+ else { obj = obj.children("a:eq(0)"); }
+ if(s) {
+ tmp = obj.children("INS").clone();
+ obj.html(val).prepend(tmp);
+ this.__callback({ "obj" : obj, "name" : val, "lang" : lang });
+ return true;
+ }
+ else {
+ obj = obj.contents().filter(function() { return this.nodeType == 3; })[0];
+ this.__callback({ "obj" : obj, "name" : val, "lang" : lang });
+ return (obj.nodeValue = val);
+ }
+ },
+ _load_css : function () {
+ var langs = this._get_settings().languages,
+ str = "/* languages css */",
+ selector = ".jstree-" + this.get_index() + ' a',
+ ln;
+ if($.isArray(langs) && langs.length) {
+ this.data.languages.current_language = langs[0];
+ for(ln = 0; ln < langs.length; ln++) {
+ str += selector + "." + langs[ln] + " {";
+ if(langs[ln] != this.data.languages.current_language) { str += " display:none; "; }
+ str += " } ";
+ }
+ this.data.languages.language_css = $.vakata.css.add_sheet({ 'str' : str, 'title' : "jstree-languages" });
+ }
+ },
+ create_node : function (obj, position, js, callback) {
+ var t = this.__call_old(true, obj, position, js, function (t) {
+ var langs = this._get_settings().languages,
+ a = t.children("a"),
+ ln;
+ if($.isArray(langs) && langs.length) {
+ for(ln = 0; ln < langs.length; ln++) {
+ if(!a.is("." + langs[ln])) {
+ t.append(a.eq(0).clone().removeClass(langs.join(" ")).addClass(langs[ln]));
+ }
+ }
+ a.not("." + langs.join(", .")).remove();
+ }
+ if(callback) { callback.call(this, t); }
+ });
+ return t;
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree cookies plugin
+ * Stores the currently opened/selected nodes in a cookie and then restores them
+ * Depends on the jquery.cookie plugin
+ */
+(function ($) {
+ $.jstree.plugin("cookies", {
+ __init : function () {
+ if(typeof $.cookie === "undefined") { throw "jsTree cookie: jQuery cookie plugin not included."; }
+
+ var s = this._get_settings().cookies,
+ tmp;
+ if(!!s.save_loaded) {
+ tmp = $.cookie(s.save_loaded);
+ if(tmp && tmp.length) { this.data.core.to_load = tmp.split(","); }
+ }
+ if(!!s.save_opened) {
+ tmp = $.cookie(s.save_opened);
+ if(tmp && tmp.length) { this.data.core.to_open = tmp.split(","); }
+ }
+ if(!!s.save_selected) {
+ tmp = $.cookie(s.save_selected);
+ if(tmp && tmp.length && this.data.ui) { this.data.ui.to_select = tmp.split(","); }
+ }
+ this.get_container()
+ .one( ( this.data.ui ? "reselect" : "reopen" ) + ".jstree", $.proxy(function () {
+ this.get_container()
+ .bind("open_node.jstree close_node.jstree select_node.jstree deselect_node.jstree", $.proxy(function (e) {
+ if(this._get_settings().cookies.auto_save) { this.save_cookie((e.handleObj.namespace + e.handleObj.type).replace("jstree","")); }
+ }, this));
+ }, this));
+ },
+ defaults : {
+ save_loaded : "jstree_load",
+ save_opened : "jstree_open",
+ save_selected : "jstree_select",
+ auto_save : true,
+ cookie_options : {}
+ },
+ _fn : {
+ save_cookie : function (c) {
+ if(this.data.core.refreshing) { return; }
+ var s = this._get_settings().cookies;
+ if(!c) { // if called manually and not by event
+ if(s.save_loaded) {
+ this.save_loaded();
+ $.cookie(s.save_loaded, this.data.core.to_load.join(","), s.cookie_options);
+ }
+ if(s.save_opened) {
+ this.save_opened();
+ $.cookie(s.save_opened, this.data.core.to_open.join(","), s.cookie_options);
+ }
+ if(s.save_selected && this.data.ui) {
+ this.save_selected();
+ $.cookie(s.save_selected, this.data.ui.to_select.join(","), s.cookie_options);
+ }
+ return;
+ }
+ switch(c) {
+ case "open_node":
+ case "close_node":
+ if(!!s.save_opened) {
+ this.save_opened();
+ $.cookie(s.save_opened, this.data.core.to_open.join(","), s.cookie_options);
+ }
+ if(!!s.save_loaded) {
+ this.save_loaded();
+ $.cookie(s.save_loaded, this.data.core.to_load.join(","), s.cookie_options);
+ }
+ break;
+ case "select_node":
+ case "deselect_node":
+ if(!!s.save_selected && this.data.ui) {
+ this.save_selected();
+ $.cookie(s.save_selected, this.data.ui.to_select.join(","), s.cookie_options);
+ }
+ break;
+ }
+ }
+ }
+ });
+ // include cookies by default
+ // $.jstree.defaults.plugins.push("cookies");
+})(jQuery);
+//*/
+
+/*
+ * jsTree sort plugin
+ * Sorts items alphabetically (or using any other function)
+ */
+(function ($) {
+ $.jstree.plugin("sort", {
+ __init : function () {
+ this.get_container()
+ .bind("load_node.jstree", $.proxy(function (e, data) {
+ var obj = this._get_node(data.rslt.obj);
+ obj = obj === -1 ? this.get_container().children("ul") : obj.children("ul");
+ this.sort(obj);
+ }, this))
+ .bind("rename_node.jstree create_node.jstree create.jstree", $.proxy(function (e, data) {
+ this.sort(data.rslt.obj.parent());
+ }, this))
+ .bind("move_node.jstree", $.proxy(function (e, data) {
+ var m = data.rslt.np == -1 ? this.get_container() : data.rslt.np;
+ this.sort(m.children("ul"));
+ }, this));
+ },
+ defaults : function (a, b) { return this.get_text(a) > this.get_text(b) ? 1 : -1; },
+ _fn : {
+ sort : function (obj) {
+ var s = this._get_settings().sort,
+ t = this;
+ obj.append($.makeArray(obj.children("li")).sort($.proxy(s, t)));
+ obj.find("> li > ul").each(function() { t.sort($(this)); });
+ this.clean_node(obj);
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree DND plugin
+ * Drag and drop plugin for moving/copying nodes
+ */
+(function ($) {
+ var o = false,
+ r = false,
+ m = false,
+ ml = false,
+ sli = false,
+ sti = false,
+ dir1 = false,
+ dir2 = false,
+ last_pos = false;
+ $.vakata.dnd = {
+ is_down : false,
+ is_drag : false,
+ helper : false,
+ scroll_spd : 10,
+ init_x : 0,
+ init_y : 0,
+ threshold : 5,
+ helper_left : 5,
+ helper_top : 10,
+ user_data : {},
+
+ drag_start : function (e, data, html) {
+ if($.vakata.dnd.is_drag) { $.vakata.drag_stop({}); }
+ try {
+ e.currentTarget.unselectable = "on";
+ e.currentTarget.onselectstart = function() { return false; };
+ if(e.currentTarget.style) { e.currentTarget.style.MozUserSelect = "none"; }
+ } catch(err) { }
+ $.vakata.dnd.init_x = e.pageX;
+ $.vakata.dnd.init_y = e.pageY;
+ $.vakata.dnd.user_data = data;
+ $.vakata.dnd.is_down = true;
+ $.vakata.dnd.helper = $("<div id='vakata-dragged' />").html(html); //.fadeTo(10,0.25);
+ $(document).bind("mousemove", $.vakata.dnd.drag);
+ $(document).bind("mouseup", $.vakata.dnd.drag_stop);
+ return false;
+ },
+ drag : function (e) {
+ if(!$.vakata.dnd.is_down) { return; }
+ if(!$.vakata.dnd.is_drag) {
+ if(Math.abs(e.pageX - $.vakata.dnd.init_x) > 5 || Math.abs(e.pageY - $.vakata.dnd.init_y) > 5) {
+ $.vakata.dnd.helper.appendTo("body");
+ $.vakata.dnd.is_drag = true;
+ $(document).triggerHandler("drag_start.vakata", { "event" : e, "data" : $.vakata.dnd.user_data });
+ }
+ else { return; }
+ }
+
+ // maybe use a scrolling parent element instead of document?
+ if(e.type === "mousemove") { // thought of adding scroll in order to move the helper, but mouse poisition is n/a
+ var d = $(document), t = d.scrollTop(), l = d.scrollLeft();
+ if(e.pageY - t < 20) {
+ if(sti && dir1 === "down") { clearInterval(sti); sti = false; }
+ if(!sti) { dir1 = "up"; sti = setInterval(function () { $(document).scrollTop($(document).scrollTop() - $.vakata.dnd.scroll_spd); }, 150); }
+ }
+ else {
+ if(sti && dir1 === "up") { clearInterval(sti); sti = false; }
+ }
+ if($(window).height() - (e.pageY - t) < 20) {
+ if(sti && dir1 === "up") { clearInterval(sti); sti = false; }
+ if(!sti) { dir1 = "down"; sti = setInterval(function () { $(document).scrollTop($(document).scrollTop() + $.vakata.dnd.scroll_spd); }, 150); }
+ }
+ else {
+ if(sti && dir1 === "down") { clearInterval(sti); sti = false; }
+ }
+
+ if(e.pageX - l < 20) {
+ if(sli && dir2 === "right") { clearInterval(sli); sli = false; }
+ if(!sli) { dir2 = "left"; sli = setInterval(function () { $(document).scrollLeft($(document).scrollLeft() - $.vakata.dnd.scroll_spd); }, 150); }
+ }
+ else {
+ if(sli && dir2 === "left") { clearInterval(sli); sli = false; }
+ }
+ if($(window).width() - (e.pageX - l) < 20) {
+ if(sli && dir2 === "left") { clearInterval(sli); sli = false; }
+ if(!sli) { dir2 = "right"; sli = setInterval(function () { $(document).scrollLeft($(document).scrollLeft() + $.vakata.dnd.scroll_spd); }, 150); }
+ }
+ else {
+ if(sli && dir2 === "right") { clearInterval(sli); sli = false; }
+ }
+ }
+
+ $.vakata.dnd.helper.css({ left : (e.pageX + $.vakata.dnd.helper_left) + "px", top : (e.pageY + $.vakata.dnd.helper_top) + "px" });
+ $(document).triggerHandler("drag.vakata", { "event" : e, "data" : $.vakata.dnd.user_data });
+ },
+ drag_stop : function (e) {
+ if(sli) { clearInterval(sli); }
+ if(sti) { clearInterval(sti); }
+ $(document).unbind("mousemove", $.vakata.dnd.drag);
+ $(document).unbind("mouseup", $.vakata.dnd.drag_stop);
+ $(document).triggerHandler("drag_stop.vakata", { "event" : e, "data" : $.vakata.dnd.user_data });
+ $.vakata.dnd.helper.remove();
+ $.vakata.dnd.init_x = 0;
+ $.vakata.dnd.init_y = 0;
+ $.vakata.dnd.user_data = {};
+ $.vakata.dnd.is_down = false;
+ $.vakata.dnd.is_drag = false;
+ }
+ };
+ $(function() {
+ var css_string = '#vakata-dragged { display:block; margin:0 0 0 0; padding:4px 4px 4px 24px; position:absolute; top:-2000px; line-height:16px; z-index:10000; } ';
+ $.vakata.css.add_sheet({ str : css_string, title : "vakata" });
+ });
+
+ $.jstree.plugin("dnd", {
+ __init : function () {
+ this.data.dnd = {
+ active : false,
+ after : false,
+ inside : false,
+ before : false,
+ off : false,
+ prepared : false,
+ w : 0,
+ to1 : false,
+ to2 : false,
+ cof : false,
+ cw : false,
+ ch : false,
+ i1 : false,
+ i2 : false,
+ mto : false
+ };
+ this.get_container()
+ .bind("mouseenter.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ if(this.data.themes) {
+ m.attr("class", "jstree-" + this.data.themes.theme);
+ if(ml) { ml.attr("class", "jstree-" + this.data.themes.theme); }
+ $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme);
+ }
+ //if($(e.currentTarget).find("> ul > li").length === 0) {
+ if(e.currentTarget === e.target && $.vakata.dnd.user_data.obj && $($.vakata.dnd.user_data.obj).length && $($.vakata.dnd.user_data.obj).parents(".jstree:eq(0)")[0] !== e.target) { // node should not be from the same tree
+ var tr = $.jstree._reference(e.target), dc;
+ if(tr.data.dnd.foreign) {
+ dc = tr._get_settings().dnd.drag_check.call(this, { "o" : o, "r" : tr.get_container(), is_root : true });
+ if(dc === true || dc.inside === true || dc.before === true || dc.after === true) {
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-ok");
+ }
+ }
+ else {
+ tr.prepare_move(o, tr.get_container(), "last");
+ if(tr.check_move()) {
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-ok");
+ }
+ }
+ }
+ }
+ }, this))
+ .bind("mouseup.jstree", $.proxy(function (e) {
+ //if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && $(e.currentTarget).find("> ul > li").length === 0) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && e.currentTarget === e.target && $.vakata.dnd.user_data.obj && $($.vakata.dnd.user_data.obj).length && $($.vakata.dnd.user_data.obj).parents(".jstree:eq(0)")[0] !== e.target) { // node should not be from the same tree
+ var tr = $.jstree._reference(e.currentTarget), dc;
+ if(tr.data.dnd.foreign) {
+ dc = tr._get_settings().dnd.drag_check.call(this, { "o" : o, "r" : tr.get_container(), is_root : true });
+ if(dc === true || dc.inside === true || dc.before === true || dc.after === true) {
+ tr._get_settings().dnd.drag_finish.call(this, { "o" : o, "r" : tr.get_container(), is_root : true });
+ }
+ }
+ else {
+ tr.move_node(o, tr.get_container(), "last", e[tr._get_settings().dnd.copy_modifier + "Key"]);
+ }
+ }
+ }, this))
+ .bind("mouseleave.jstree", $.proxy(function (e) {
+ if(e.relatedTarget && e.relatedTarget.id && e.relatedTarget.id === "jstree-marker-line") {
+ return false;
+ }
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
+ if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
+ if(this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); }
+ if(this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); }
+ if($.vakata.dnd.helper.children("ins").hasClass("jstree-ok")) {
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
+ }
+ }
+ }, this))
+ .bind("mousemove.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ var cnt = this.get_container()[0];
+
+ // Horizontal scroll
+ if(e.pageX + 24 > this.data.dnd.cof.left + this.data.dnd.cw) {
+ if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
+ this.data.dnd.i1 = setInterval($.proxy(function () { this.scrollLeft += $.vakata.dnd.scroll_spd; }, cnt), 100);
+ }
+ else if(e.pageX - 24 < this.data.dnd.cof.left) {
+ if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
+ this.data.dnd.i1 = setInterval($.proxy(function () { this.scrollLeft -= $.vakata.dnd.scroll_spd; }, cnt), 100);
+ }
+ else {
+ if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
+ }
+
+ // Vertical scroll
+ if(e.pageY + 24 > this.data.dnd.cof.top + this.data.dnd.ch) {
+ if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
+ this.data.dnd.i2 = setInterval($.proxy(function () { this.scrollTop += $.vakata.dnd.scroll_spd; }, cnt), 100);
+ }
+ else if(e.pageY - 24 < this.data.dnd.cof.top) {
+ if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
+ this.data.dnd.i2 = setInterval($.proxy(function () { this.scrollTop -= $.vakata.dnd.scroll_spd; }, cnt), 100);
+ }
+ else {
+ if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
+ }
+
+ }
+ }, this))
+ .bind("scroll.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && m && ml) {
+ m.hide();
+ ml.hide();
+ }
+ }, this))
+ .delegate("a", "mousedown.jstree", $.proxy(function (e) {
+ if(e.which === 1) {
+ this.start_drag(e.currentTarget, e);
+ return false;
+ }
+ }, this))
+ .delegate("a", "mouseenter.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ this.dnd_enter(e.currentTarget);
+ }
+ }, this))
+ .delegate("a", "mousemove.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ if(!r || !r.length || r.children("a")[0] !== e.currentTarget) {
+ this.dnd_enter(e.currentTarget);
+ }
+ if(typeof this.data.dnd.off.top === "undefined") { this.data.dnd.off = $(e.target).offset(); }
+ this.data.dnd.w = (e.pageY - (this.data.dnd.off.top || 0)) % this.data.core.li_height;
+ if(this.data.dnd.w < 0) { this.data.dnd.w += this.data.core.li_height; }
+ this.dnd_show();
+ }
+ }, this))
+ .delegate("a", "mouseleave.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ if(e.relatedTarget && e.relatedTarget.id && e.relatedTarget.id === "jstree-marker-line") {
+ return false;
+ }
+ if(m) { m.hide(); }
+ if(ml) { ml.hide(); }
+ /*
+ var ec = $(e.currentTarget).closest("li"),
+ er = $(e.relatedTarget).closest("li");
+ if(er[0] !== ec.prev()[0] && er[0] !== ec.next()[0]) {
+ if(m) { m.hide(); }
+ if(ml) { ml.hide(); }
+ }
+ */
+ this.data.dnd.mto = setTimeout(
+ (function (t) { return function () { t.dnd_leave(e); }; })(this),
+ 0);
+ }
+ }, this))
+ .delegate("a", "mouseup.jstree", $.proxy(function (e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree) {
+ this.dnd_finish(e);
+ }
+ }, this));
+
+ $(document)
+ .bind("drag_stop.vakata", $.proxy(function () {
+ if(this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); }
+ if(this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); }
+ if(this.data.dnd.i1) { clearInterval(this.data.dnd.i1); }
+ if(this.data.dnd.i2) { clearInterval(this.data.dnd.i2); }
+ this.data.dnd.after = false;
+ this.data.dnd.before = false;
+ this.data.dnd.inside = false;
+ this.data.dnd.off = false;
+ this.data.dnd.prepared = false;
+ this.data.dnd.w = false;
+ this.data.dnd.to1 = false;
+ this.data.dnd.to2 = false;
+ this.data.dnd.i1 = false;
+ this.data.dnd.i2 = false;
+ this.data.dnd.active = false;
+ this.data.dnd.foreign = false;
+ if(m) { m.css({ "top" : "-2000px" }); }
+ if(ml) { ml.css({ "top" : "-2000px" }); }
+ }, this))
+ .bind("drag_start.vakata", $.proxy(function (e, data) {
+ if(data.data.jstree) {
+ var et = $(data.event.target);
+ if(et.closest(".jstree").hasClass("jstree-" + this.get_index())) {
+ this.dnd_enter(et);
+ }
+ }
+ }, this));
+ /*
+ .bind("keydown.jstree-" + this.get_index() + " keyup.jstree-" + this.get_index(), $.proxy(function(e) {
+ if($.vakata.dnd.is_drag && $.vakata.dnd.user_data.jstree && !this.data.dnd.foreign) {
+ var h = $.vakata.dnd.helper.children("ins");
+ if(e[this._get_settings().dnd.copy_modifier + "Key"] && h.hasClass("jstree-ok")) {
+ h.parent().html(h.parent().html().replace(/ \(Copy\)$/, "") + " (Copy)");
+ }
+ else {
+ h.parent().html(h.parent().html().replace(/ \(Copy\)$/, ""));
+ }
+ }
+ }, this)); */
+
+
+
+ var s = this._get_settings().dnd;
+ if(s.drag_target) {
+ $(document)
+ .delegate(s.drag_target, "mousedown.jstree-" + this.get_index(), $.proxy(function (e) {
+ o = e.target;
+ $.vakata.dnd.drag_start(e, { jstree : true, obj : e.target }, "<ins class='jstree-icon'></ins>" + $(e.target).text() );
+ if(this.data.themes) {
+ if(m) { m.attr("class", "jstree-" + this.data.themes.theme); }
+ if(ml) { ml.attr("class", "jstree-" + this.data.themes.theme); }
+ $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme);
+ }
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
+ var cnt = this.get_container();
+ this.data.dnd.cof = cnt.offset();
+ this.data.dnd.cw = parseInt(cnt.width(),10);
+ this.data.dnd.ch = parseInt(cnt.height(),10);
+ this.data.dnd.foreign = true;
+ e.preventDefault();
+ }, this));
+ }
+ if(s.drop_target) {
+ $(document)
+ .delegate(s.drop_target, "mouseenter.jstree-" + this.get_index(), $.proxy(function (e) {
+ if(this.data.dnd.active && this._get_settings().dnd.drop_check.call(this, { "o" : o, "r" : $(e.target), "e" : e })) {
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-ok");
+ }
+ }, this))
+ .delegate(s.drop_target, "mouseleave.jstree-" + this.get_index(), $.proxy(function (e) {
+ if(this.data.dnd.active) {
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
+ }
+ }, this))
+ .delegate(s.drop_target, "mouseup.jstree-" + this.get_index(), $.proxy(function (e) {
+ if(this.data.dnd.active && $.vakata.dnd.helper.children("ins").hasClass("jstree-ok")) {
+ this._get_settings().dnd.drop_finish.call(this, { "o" : o, "r" : $(e.target), "e" : e });
+ }
+ }, this));
+ }
+ },
+ defaults : {
+ copy_modifier : "ctrl",
+ check_timeout : 100,
+ open_timeout : 500,
+ drop_target : ".jstree-drop",
+ drop_check : function (data) { return true; },
+ drop_finish : $.noop,
+ drag_target : ".jstree-draggable",
+ drag_finish : $.noop,
+ drag_check : function (data) { return { after : false, before : false, inside : true }; }
+ },
+ _fn : {
+ dnd_prepare : function () {
+ if(!r || !r.length) { return; }
+ this.data.dnd.off = r.offset();
+ if(this._get_settings().core.rtl) {
+ this.data.dnd.off.right = this.data.dnd.off.left + r.width();
+ }
+ if(this.data.dnd.foreign) {
+ var a = this._get_settings().dnd.drag_check.call(this, { "o" : o, "r" : r });
+ this.data.dnd.after = a.after;
+ this.data.dnd.before = a.before;
+ this.data.dnd.inside = a.inside;
+ this.data.dnd.prepared = true;
+ return this.dnd_show();
+ }
+ this.prepare_move(o, r, "before");
+ this.data.dnd.before = this.check_move();
+ this.prepare_move(o, r, "after");
+ this.data.dnd.after = this.check_move();
+ if(this._is_loaded(r)) {
+ this.prepare_move(o, r, "inside");
+ this.data.dnd.inside = this.check_move();
+ }
+ else {
+ this.data.dnd.inside = false;
+ }
+ this.data.dnd.prepared = true;
+ return this.dnd_show();
+ },
+ dnd_show : function () {
+ if(!this.data.dnd.prepared) { return; }
+ var o = ["before","inside","after"],
+ r = false,
+ rtl = this._get_settings().core.rtl,
+ pos;
+ if(this.data.dnd.w < this.data.core.li_height/3) { o = ["before","inside","after"]; }
+ else if(this.data.dnd.w <= this.data.core.li_height*2/3) {
+ o = this.data.dnd.w < this.data.core.li_height/2 ? ["inside","before","after"] : ["inside","after","before"];
+ }
+ else { o = ["after","inside","before"]; }
+ $.each(o, $.proxy(function (i, val) {
+ if(this.data.dnd[val]) {
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-ok");
+ r = val;
+ return false;
+ }
+ }, this));
+ if(r === false) { $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid"); }
+
+ pos = rtl ? (this.data.dnd.off.right - 18) : (this.data.dnd.off.left + 10);
+ switch(r) {
+ case "before":
+ m.css({ "left" : pos + "px", "top" : (this.data.dnd.off.top - 6) + "px" }).show();
+ if(ml) { ml.css({ "left" : (pos + 8) + "px", "top" : (this.data.dnd.off.top - 1) + "px" }).show(); }
+ break;
+ case "after":
+ m.css({ "left" : pos + "px", "top" : (this.data.dnd.off.top + this.data.core.li_height - 6) + "px" }).show();
+ if(ml) { ml.css({ "left" : (pos + 8) + "px", "top" : (this.data.dnd.off.top + this.data.core.li_height - 1) + "px" }).show(); }
+ break;
+ case "inside":
+ m.css({ "left" : pos + ( rtl ? -4 : 4) + "px", "top" : (this.data.dnd.off.top + this.data.core.li_height/2 - 5) + "px" }).show();
+ if(ml) { ml.hide(); }
+ break;
+ default:
+ m.hide();
+ if(ml) { ml.hide(); }
+ break;
+ }
+ last_pos = r;
+ return r;
+ },
+ dnd_open : function () {
+ this.data.dnd.to2 = false;
+ this.open_node(r, $.proxy(this.dnd_prepare,this), true);
+ },
+ dnd_finish : function (e) {
+ if(this.data.dnd.foreign) {
+ if(this.data.dnd.after || this.data.dnd.before || this.data.dnd.inside) {
+ this._get_settings().dnd.drag_finish.call(this, { "o" : o, "r" : r, "p" : last_pos });
+ }
+ }
+ else {
+ this.dnd_prepare();
+ this.move_node(o, r, last_pos, e[this._get_settings().dnd.copy_modifier + "Key"]);
+ }
+ o = false;
+ r = false;
+ m.hide();
+ if(ml) { ml.hide(); }
+ },
+ dnd_enter : function (obj) {
+ if(this.data.dnd.mto) {
+ clearTimeout(this.data.dnd.mto);
+ this.data.dnd.mto = false;
+ }
+ var s = this._get_settings().dnd;
+ this.data.dnd.prepared = false;
+ r = this._get_node(obj);
+ if(s.check_timeout) {
+ // do the calculations after a minimal timeout (users tend to drag quickly to the desired location)
+ if(this.data.dnd.to1) { clearTimeout(this.data.dnd.to1); }
+ this.data.dnd.to1 = setTimeout($.proxy(this.dnd_prepare, this), s.check_timeout);
+ }
+ else {
+ this.dnd_prepare();
+ }
+ if(s.open_timeout) {
+ if(this.data.dnd.to2) { clearTimeout(this.data.dnd.to2); }
+ if(r && r.length && r.hasClass("jstree-closed")) {
+ // if the node is closed - open it, then recalculate
+ this.data.dnd.to2 = setTimeout($.proxy(this.dnd_open, this), s.open_timeout);
+ }
+ }
+ else {
+ if(r && r.length && r.hasClass("jstree-closed")) {
+ this.dnd_open();
+ }
+ }
+ },
+ dnd_leave : function (e) {
+ this.data.dnd.after = false;
+ this.data.dnd.before = false;
+ this.data.dnd.inside = false;
+ $.vakata.dnd.helper.children("ins").attr("class","jstree-invalid");
+ m.hide();
+ if(ml) { ml.hide(); }
+ if(r && r[0] === e.target.parentNode) {
+ if(this.data.dnd.to1) {
+ clearTimeout(this.data.dnd.to1);
+ this.data.dnd.to1 = false;
+ }
+ if(this.data.dnd.to2) {
+ clearTimeout(this.data.dnd.to2);
+ this.data.dnd.to2 = false;
+ }
+ }
+ },
+ start_drag : function (obj, e) {
+ o = this._get_node(obj);
+ if(this.data.ui && this.is_selected(o)) { o = this._get_node(null, true); }
+ var dt = o.length > 1 ? this._get_string("multiple_selection") : this.get_text(o),
+ cnt = this.get_container();
+ if(!this._get_settings().core.html_titles) { dt = dt.replace(/</ig,"&lt;").replace(/>/ig,"&gt;"); }
+ $.vakata.dnd.drag_start(e, { jstree : true, obj : o }, "<ins class='jstree-icon'></ins>" + dt );
+ if(this.data.themes) {
+ if(m) { m.attr("class", "jstree-" + this.data.themes.theme); }
+ if(ml) { ml.attr("class", "jstree-" + this.data.themes.theme); }
+ $.vakata.dnd.helper.attr("class", "jstree-dnd-helper jstree-" + this.data.themes.theme);
+ }
+ this.data.dnd.cof = cnt.offset();
+ this.data.dnd.cw = parseInt(cnt.width(),10);
+ this.data.dnd.ch = parseInt(cnt.height(),10);
+ this.data.dnd.active = true;
+ }
+ }
+ });
+ $(function() {
+ var css_string = '' +
+ '#vakata-dragged ins { display:block; text-decoration:none; width:16px; height:16px; margin:0 0 0 0; padding:0; position:absolute; top:4px; left:4px; ' +
+ ' -moz-border-radius:4px; border-radius:4px; -webkit-border-radius:4px; ' +
+ '} ' +
+ '#vakata-dragged .jstree-ok { background:green; } ' +
+ '#vakata-dragged .jstree-invalid { background:red; } ' +
+ '#jstree-marker { padding:0; margin:0; font-size:12px; overflow:hidden; height:12px; width:8px; position:absolute; top:-30px; z-index:10001; background-repeat:no-repeat; display:none; background-color:transparent; text-shadow:1px 1px 1px white; color:black; line-height:10px; } ' +
+ '#jstree-marker-line { padding:0; margin:0; line-height:0%; font-size:1px; overflow:hidden; height:1px; width:100px; position:absolute; top:-30px; z-index:10000; background-repeat:no-repeat; display:none; background-color:#456c43; ' +
+ ' cursor:pointer; border:1px solid #eeeeee; border-left:0; -moz-box-shadow: 0px 0px 2px #666; -webkit-box-shadow: 0px 0px 2px #666; box-shadow: 0px 0px 2px #666; ' +
+ ' -moz-border-radius:1px; border-radius:1px; -webkit-border-radius:1px; ' +
+ '}' +
+ '';
+ $.vakata.css.add_sheet({ str : css_string, title : "jstree" });
+ m = $("<div />").attr({ id : "jstree-marker" }).hide().html("&raquo;")
+ .bind("mouseleave mouseenter", function (e) {
+ m.hide();
+ ml.hide();
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ return false;
+ })
+ .appendTo("body");
+ ml = $("<div />").attr({ id : "jstree-marker-line" }).hide()
+ .bind("mouseup", function (e) {
+ if(r && r.length) {
+ r.children("a").trigger(e);
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ return false;
+ }
+ })
+ .bind("mouseleave", function (e) {
+ var rt = $(e.relatedTarget);
+ if(rt.is(".jstree") || rt.closest(".jstree").length === 0) {
+ if(r && r.length) {
+ r.children("a").trigger(e);
+ m.hide();
+ ml.hide();
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ return false;
+ }
+ }
+ })
+ .appendTo("body");
+ $(document).bind("drag_start.vakata", function (e, data) {
+ if(data.data.jstree) { m.show(); if(ml) { ml.show(); } }
+ });
+ $(document).bind("drag_stop.vakata", function (e, data) {
+ if(data.data.jstree) { m.hide(); if(ml) { ml.hide(); } }
+ });
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree checkbox plugin
+ * Inserts checkboxes in front of every node
+ * Depends on the ui plugin
+ * DOES NOT WORK NICELY WITH MULTITREE DRAG'N'DROP
+ */
+(function ($) {
+ $.jstree.plugin("checkbox", {
+ __init : function () {
+ this.data.checkbox.noui = this._get_settings().checkbox.override_ui;
+ if(this.data.ui && this.data.checkbox.noui) {
+ this.select_node = this.deselect_node = this.deselect_all = $.noop;
+ this.get_selected = this.get_checked;
+ }
+
+ this.get_container()
+ .bind("open_node.jstree create_node.jstree clean_node.jstree refresh.jstree", $.proxy(function (e, data) {
+ this._prepare_checkboxes(data.rslt.obj);
+ }, this))
+ .bind("loaded.jstree", $.proxy(function (e) {
+ this._prepare_checkboxes();
+ }, this))
+ .delegate( (this.data.ui && this.data.checkbox.noui ? "a" : "ins.jstree-checkbox") , "click.jstree", $.proxy(function (e) {
+ e.preventDefault();
+ if(this._get_node(e.target).hasClass("jstree-checked")) { this.uncheck_node(e.target); }
+ else { this.check_node(e.target); }
+ if(this.data.ui && this.data.checkbox.noui) {
+ this.save_selected();
+ if(this.data.cookies) { this.save_cookie("select_node"); }
+ }
+ else {
+ e.stopImmediatePropagation();
+ return false;
+ }
+ }, this));
+ },
+ defaults : {
+ override_ui : false,
+ two_state : false,
+ real_checkboxes : false,
+ checked_parent_open : true,
+ real_checkboxes_names : function (n) { return [ ("check_" + (n[0].id || Math.ceil(Math.random() * 10000))) , 1]; }
+ },
+ __destroy : function () {
+ this.get_container()
+ .find("input.jstree-real-checkbox").removeClass("jstree-real-checkbox").end()
+ .find("ins.jstree-checkbox").remove();
+ },
+ _fn : {
+ _checkbox_notify : function (n, data) {
+ if(data.checked) {
+ this.check_node(n, false);
+ }
+ },
+ _prepare_checkboxes : function (obj) {
+ obj = !obj || obj == -1 ? this.get_container().find("> ul > li") : this._get_node(obj);
+ if(obj === false) { return; } // added for removing root nodes
+ var c, _this = this, t, ts = this._get_settings().checkbox.two_state, rc = this._get_settings().checkbox.real_checkboxes, rcn = this._get_settings().checkbox.real_checkboxes_names;
+ obj.each(function () {
+ t = $(this);
+ c = t.is("li") && (t.hasClass("jstree-checked") || (rc && t.children(":checked").length)) ? "jstree-checked" : "jstree-unchecked";
+ t.find("li").andSelf().each(function () {
+ var $t = $(this), nm;
+ $t.children("a" + (_this.data.languages ? "" : ":eq(0)") ).not(":has(.jstree-checkbox)").prepend("<ins class='jstree-checkbox'>&#160;</ins>").parent().not(".jstree-checked, .jstree-unchecked").addClass( ts ? "jstree-unchecked" : c );
+ if(rc) {
+ if(!$t.children(":checkbox").length) {
+ nm = rcn.call(_this, $t);
+ $t.prepend("<input type='checkbox' class='jstree-real-checkbox' id='" + nm[0] + "' name='" + nm[0] + "' value='" + nm[1] + "' />");
+ }
+ else {
+ $t.children(":checkbox").addClass("jstree-real-checkbox");
+ }
+ if(c === "jstree-checked") {
+ $t.children(":checkbox").attr("checked","checked");
+ }
+ }
+ if(c === "jstree-checked" && !ts) {
+ $t.find("li").addClass("jstree-checked");
+ }
+ });
+ });
+ if(!ts) {
+ if(obj.length === 1 && obj.is("li")) { this._repair_state(obj); }
+ if(obj.is("li")) { obj.each(function () { _this._repair_state(this); }); }
+ else { obj.find("> ul > li").each(function () { _this._repair_state(this); }); }
+ obj.find(".jstree-checked").parent().parent().each(function () { _this._repair_state(this); });
+ }
+ },
+ change_state : function (obj, state) {
+ obj = this._get_node(obj);
+ var coll = false, rc = this._get_settings().checkbox.real_checkboxes;
+ if(!obj || obj === -1) { return false; }
+ state = (state === false || state === true) ? state : obj.hasClass("jstree-checked");
+ if(this._get_settings().checkbox.two_state) {
+ if(state) {
+ obj.removeClass("jstree-checked").addClass("jstree-unchecked");
+ if(rc) { obj.children(":checkbox").removeAttr("checked"); }
+ }
+ else {
+ obj.removeClass("jstree-unchecked").addClass("jstree-checked");
+ if(rc) { obj.children(":checkbox").attr("checked","checked"); }
+ }
+ }
+ else {
+ if(state) {
+ coll = obj.find("li").andSelf();
+ if(!coll.filter(".jstree-checked, .jstree-undetermined").length) { return false; }
+ coll.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked");
+ if(rc) { coll.children(":checkbox").removeAttr("checked"); }
+ }
+ else {
+ coll = obj.find("li").andSelf();
+ if(!coll.filter(".jstree-unchecked, .jstree-undetermined").length) { return false; }
+ coll.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked");
+ if(rc) { coll.children(":checkbox").attr("checked","checked"); }
+ if(this.data.ui) { this.data.ui.last_selected = obj; }
+ this.data.checkbox.last_selected = obj;
+ }
+ obj.parentsUntil(".jstree", "li").each(function () {
+ var $this = $(this);
+ if(state) {
+ if($this.children("ul").children("li.jstree-checked, li.jstree-undetermined").length) {
+ $this.parentsUntil(".jstree", "li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
+ if(rc) { $this.parentsUntil(".jstree", "li").andSelf().children(":checkbox").removeAttr("checked"); }
+ return false;
+ }
+ else {
+ $this.removeClass("jstree-checked jstree-undetermined").addClass("jstree-unchecked");
+ if(rc) { $this.children(":checkbox").removeAttr("checked"); }
+ }
+ }
+ else {
+ if($this.children("ul").children("li.jstree-unchecked, li.jstree-undetermined").length) {
+ $this.parentsUntil(".jstree", "li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
+ if(rc) { $this.parentsUntil(".jstree", "li").andSelf().children(":checkbox").removeAttr("checked"); }
+ return false;
+ }
+ else {
+ $this.removeClass("jstree-unchecked jstree-undetermined").addClass("jstree-checked");
+ if(rc) { $this.children(":checkbox").attr("checked","checked"); }
+ }
+ }
+ });
+ }
+ if(this.data.ui && this.data.checkbox.noui) { this.data.ui.selected = this.get_checked(); }
+ this.__callback(obj);
+ return true;
+ },
+ check_node : function (obj) {
+ if(this.change_state(obj, false)) {
+ obj = this._get_node(obj);
+ if(this._get_settings().checkbox.checked_parent_open) {
+ var t = this;
+ obj.parents(".jstree-closed").each(function () { t.open_node(this, false, true); });
+ }
+ this.__callback({ "obj" : obj });
+ }
+ },
+ uncheck_node : function (obj) {
+ if(this.change_state(obj, true)) { this.__callback({ "obj" : this._get_node(obj) }); }
+ },
+ check_all : function () {
+ var _this = this,
+ coll = this._get_settings().checkbox.two_state ? this.get_container_ul().find("li") : this.get_container_ul().children("li");
+ coll.each(function () {
+ _this.change_state(this, false);
+ });
+ this.__callback();
+ },
+ uncheck_all : function () {
+ var _this = this,
+ coll = this._get_settings().checkbox.two_state ? this.get_container_ul().find("li") : this.get_container_ul().children("li");
+ coll.each(function () {
+ _this.change_state(this, true);
+ });
+ this.__callback();
+ },
+
+ is_checked : function(obj) {
+ obj = this._get_node(obj);
+ return obj.length ? obj.is(".jstree-checked") : false;
+ },
+ get_checked : function (obj, get_all) {
+ obj = !obj || obj === -1 ? this.get_container() : this._get_node(obj);
+ return get_all || this._get_settings().checkbox.two_state ? obj.find(".jstree-checked") : obj.find("> ul > .jstree-checked, .jstree-undetermined > ul > .jstree-checked");
+ },
+ get_unchecked : function (obj, get_all) {
+ obj = !obj || obj === -1 ? this.get_container() : this._get_node(obj);
+ return get_all || this._get_settings().checkbox.two_state ? obj.find(".jstree-unchecked") : obj.find("> ul > .jstree-unchecked, .jstree-undetermined > ul > .jstree-unchecked");
+ },
+
+ show_checkboxes : function () { this.get_container().children("ul").removeClass("jstree-no-checkboxes"); },
+ hide_checkboxes : function () { this.get_container().children("ul").addClass("jstree-no-checkboxes"); },
+
+ _repair_state : function (obj) {
+ obj = this._get_node(obj);
+ if(!obj.length) { return; }
+ var rc = this._get_settings().checkbox.real_checkboxes,
+ a = obj.find("> ul > .jstree-checked").length,
+ b = obj.find("> ul > .jstree-undetermined").length,
+ c = obj.find("> ul > li").length;
+ if(c === 0) { if(obj.hasClass("jstree-undetermined")) { this.change_state(obj, false); } }
+ else if(a === 0 && b === 0) { this.change_state(obj, true); }
+ else if(a === c) { this.change_state(obj, false); }
+ else {
+ obj.parentsUntil(".jstree","li").andSelf().removeClass("jstree-checked jstree-unchecked").addClass("jstree-undetermined");
+ if(rc) { obj.parentsUntil(".jstree", "li").andSelf().children(":checkbox").removeAttr("checked"); }
+ }
+ },
+ reselect : function () {
+ if(this.data.ui && this.data.checkbox.noui) {
+ var _this = this,
+ s = this.data.ui.to_select;
+ s = $.map($.makeArray(s), function (n) { return "#" + n.toString().replace(/^#/,"").replace(/\\\//g,"/").replace(/\//g,"\\\/").replace(/\\\./g,".").replace(/\./g,"\\.").replace(/\:/g,"\\:"); });
+ this.deselect_all();
+ $.each(s, function (i, val) { _this.check_node(val); });
+ this.__callback();
+ }
+ else {
+ this.__call_old();
+ }
+ },
+ save_loaded : function () {
+ var _this = this;
+ this.data.core.to_load = [];
+ this.get_container_ul().find("li.jstree-closed.jstree-undetermined").each(function () {
+ if(this.id) { _this.data.core.to_load.push("#" + this.id); }
+ });
+ }
+ }
+ });
+ $(function() {
+ var css_string = '.jstree .jstree-real-checkbox { display:none; } ';
+ $.vakata.css.add_sheet({ str : css_string, title : "jstree" });
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree XML plugin
+ * The XML data store. Datastores are build by overriding the `load_node` and `_is_loaded` functions.
+ */
+(function ($) {
+ $.vakata.xslt = function (xml, xsl, callback) {
+ var rs = "", xm, xs, processor, support;
+ // TODO: IE9 no XSLTProcessor, no document.recalc
+ if(document.recalc) {
+ xm = document.createElement('xml');
+ xs = document.createElement('xml');
+ xm.innerHTML = xml;
+ xs.innerHTML = xsl;
+ $("body").append(xm).append(xs);
+ setTimeout( (function (xm, xs, callback) {
+ return function () {
+ callback.call(null, xm.transformNode(xs.XMLDocument));
+ setTimeout( (function (xm, xs) { return function () { $(xm).remove(); $(xs).remove(); }; })(xm, xs), 200);
+ };
+ })(xm, xs, callback), 100);
+ return true;
+ }
+ if(typeof window.DOMParser !== "undefined" && typeof window.XMLHttpRequest !== "undefined" && typeof window.XSLTProcessor === "undefined") {
+ xml = new DOMParser().parseFromString(xml, "text/xml");
+ xsl = new DOMParser().parseFromString(xsl, "text/xml");
+ // alert(xml.transformNode());
+ // callback.call(null, new XMLSerializer().serializeToString(rs));
+
+ }
+ if(typeof window.DOMParser !== "undefined" && typeof window.XMLHttpRequest !== "undefined" && typeof window.XSLTProcessor !== "undefined") {
+ processor = new XSLTProcessor();
+ support = $.isFunction(processor.transformDocument) ? (typeof window.XMLSerializer !== "undefined") : true;
+ if(!support) { return false; }
+ xml = new DOMParser().parseFromString(xml, "text/xml");
+ xsl = new DOMParser().parseFromString(xsl, "text/xml");
+ if($.isFunction(processor.transformDocument)) {
+ rs = document.implementation.createDocument("", "", null);
+ processor.transformDocument(xml, xsl, rs, null);
+ callback.call(null, new XMLSerializer().serializeToString(rs));
+ return true;
+ }
+ else {
+ processor.importStylesheet(xsl);
+ rs = processor.transformToFragment(xml, document);
+ callback.call(null, $("<div />").append(rs).html());
+ return true;
+ }
+ }
+ return false;
+ };
+ var xsl = {
+ 'nest' : '<' + '?xml version="1.0" encoding="utf-8" ?>' +
+ '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >' +
+ '<xsl:output method="html" encoding="utf-8" omit-xml-declaration="yes" standalone="no" indent="no" media-type="text/html" />' +
+ '<xsl:template match="/">' +
+ ' <xsl:call-template name="nodes">' +
+ ' <xsl:with-param name="node" select="/root" />' +
+ ' </xsl:call-template>' +
+ '</xsl:template>' +
+ '<xsl:template name="nodes">' +
+ ' <xsl:param name="node" />' +
+ ' <ul>' +
+ ' <xsl:for-each select="$node/item">' +
+ ' <xsl:variable name="children" select="count(./item) &gt; 0" />' +
+ ' <li>' +
+ ' <xsl:attribute name="class">' +
+ ' <xsl:if test="position() = last()">jstree-last </xsl:if>' +
+ ' <xsl:choose>' +
+ ' <xsl:when test="@state = \'open\'">jstree-open </xsl:when>' +
+ ' <xsl:when test="$children or @hasChildren or @state = \'closed\'">jstree-closed </xsl:when>' +
+ ' <xsl:otherwise>jstree-leaf </xsl:otherwise>' +
+ ' </xsl:choose>' +
+ ' <xsl:value-of select="@class" />' +
+ ' </xsl:attribute>' +
+ ' <xsl:for-each select="@*">' +
+ ' <xsl:if test="name() != \'class\' and name() != \'state\' and name() != \'hasChildren\'">' +
+ ' <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' +
+ ' </xsl:if>' +
+ ' </xsl:for-each>' +
+ ' <ins class="jstree-icon"><xsl:text>&#xa0;</xsl:text></ins>' +
+ ' <xsl:for-each select="content/name">' +
+ ' <a>' +
+ ' <xsl:attribute name="href">' +
+ ' <xsl:choose>' +
+ ' <xsl:when test="@href"><xsl:value-of select="@href" /></xsl:when>' +
+ ' <xsl:otherwise>#</xsl:otherwise>' +
+ ' </xsl:choose>' +
+ ' </xsl:attribute>' +
+ ' <xsl:attribute name="class"><xsl:value-of select="@lang" /> <xsl:value-of select="@class" /></xsl:attribute>' +
+ ' <xsl:attribute name="style"><xsl:value-of select="@style" /></xsl:attribute>' +
+ ' <xsl:for-each select="@*">' +
+ ' <xsl:if test="name() != \'style\' and name() != \'class\' and name() != \'href\'">' +
+ ' <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' +
+ ' </xsl:if>' +
+ ' </xsl:for-each>' +
+ ' <ins>' +
+ ' <xsl:attribute name="class">jstree-icon ' +
+ ' <xsl:if test="string-length(attribute::icon) > 0 and not(contains(@icon,\'/\'))"><xsl:value-of select="@icon" /></xsl:if>' +
+ ' </xsl:attribute>' +
+ ' <xsl:if test="string-length(attribute::icon) > 0 and contains(@icon,\'/\')"><xsl:attribute name="style">background:url(<xsl:value-of select="@icon" />) center center no-repeat;</xsl:attribute></xsl:if>' +
+ ' <xsl:text>&#xa0;</xsl:text>' +
+ ' </ins>' +
+ ' <xsl:copy-of select="./child::node()" />' +
+ ' </a>' +
+ ' </xsl:for-each>' +
+ ' <xsl:if test="$children or @hasChildren"><xsl:call-template name="nodes"><xsl:with-param name="node" select="current()" /></xsl:call-template></xsl:if>' +
+ ' </li>' +
+ ' </xsl:for-each>' +
+ ' </ul>' +
+ '</xsl:template>' +
+ '</xsl:stylesheet>',
+
+ 'flat' : '<' + '?xml version="1.0" encoding="utf-8" ?>' +
+ '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >' +
+ '<xsl:output method="html" encoding="utf-8" omit-xml-declaration="yes" standalone="no" indent="no" media-type="text/xml" />' +
+ '<xsl:template match="/">' +
+ ' <ul>' +
+ ' <xsl:for-each select="//item[not(@parent_id) or @parent_id=0 or not(@parent_id = //item/@id)]">' + /* the last `or` may be removed */
+ ' <xsl:call-template name="nodes">' +
+ ' <xsl:with-param name="node" select="." />' +
+ ' <xsl:with-param name="is_last" select="number(position() = last())" />' +
+ ' </xsl:call-template>' +
+ ' </xsl:for-each>' +
+ ' </ul>' +
+ '</xsl:template>' +
+ '<xsl:template name="nodes">' +
+ ' <xsl:param name="node" />' +
+ ' <xsl:param name="is_last" />' +
+ ' <xsl:variable name="children" select="count(//item[@parent_id=$node/attribute::id]) &gt; 0" />' +
+ ' <li>' +
+ ' <xsl:attribute name="class">' +
+ ' <xsl:if test="$is_last = true()">jstree-last </xsl:if>' +
+ ' <xsl:choose>' +
+ ' <xsl:when test="@state = \'open\'">jstree-open </xsl:when>' +
+ ' <xsl:when test="$children or @hasChildren or @state = \'closed\'">jstree-closed </xsl:when>' +
+ ' <xsl:otherwise>jstree-leaf </xsl:otherwise>' +
+ ' </xsl:choose>' +
+ ' <xsl:value-of select="@class" />' +
+ ' </xsl:attribute>' +
+ ' <xsl:for-each select="@*">' +
+ ' <xsl:if test="name() != \'parent_id\' and name() != \'hasChildren\' and name() != \'class\' and name() != \'state\'">' +
+ ' <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' +
+ ' </xsl:if>' +
+ ' </xsl:for-each>' +
+ ' <ins class="jstree-icon"><xsl:text>&#xa0;</xsl:text></ins>' +
+ ' <xsl:for-each select="content/name">' +
+ ' <a>' +
+ ' <xsl:attribute name="href">' +
+ ' <xsl:choose>' +
+ ' <xsl:when test="@href"><xsl:value-of select="@href" /></xsl:when>' +
+ ' <xsl:otherwise>#</xsl:otherwise>' +
+ ' </xsl:choose>' +
+ ' </xsl:attribute>' +
+ ' <xsl:attribute name="class"><xsl:value-of select="@lang" /> <xsl:value-of select="@class" /></xsl:attribute>' +
+ ' <xsl:attribute name="style"><xsl:value-of select="@style" /></xsl:attribute>' +
+ ' <xsl:for-each select="@*">' +
+ ' <xsl:if test="name() != \'style\' and name() != \'class\' and name() != \'href\'">' +
+ ' <xsl:attribute name="{name()}"><xsl:value-of select="." /></xsl:attribute>' +
+ ' </xsl:if>' +
+ ' </xsl:for-each>' +
+ ' <ins>' +
+ ' <xsl:attribute name="class">jstree-icon ' +
+ ' <xsl:if test="string-length(attribute::icon) > 0 and not(contains(@icon,\'/\'))"><xsl:value-of select="@icon" /></xsl:if>' +
+ ' </xsl:attribute>' +
+ ' <xsl:if test="string-length(attribute::icon) > 0 and contains(@icon,\'/\')"><xsl:attribute name="style">background:url(<xsl:value-of select="@icon" />) center center no-repeat;</xsl:attribute></xsl:if>' +
+ ' <xsl:text>&#xa0;</xsl:text>' +
+ ' </ins>' +
+ ' <xsl:copy-of select="./child::node()" />' +
+ ' </a>' +
+ ' </xsl:for-each>' +
+ ' <xsl:if test="$children">' +
+ ' <ul>' +
+ ' <xsl:for-each select="//item[@parent_id=$node/attribute::id]">' +
+ ' <xsl:call-template name="nodes">' +
+ ' <xsl:with-param name="node" select="." />' +
+ ' <xsl:with-param name="is_last" select="number(position() = last())" />' +
+ ' </xsl:call-template>' +
+ ' </xsl:for-each>' +
+ ' </ul>' +
+ ' </xsl:if>' +
+ ' </li>' +
+ '</xsl:template>' +
+ '</xsl:stylesheet>'
+ },
+ escape_xml = function(string) {
+ return string
+ .toString()
+ .replace(/&/g, '&amp;')
+ .replace(/</g, '&lt;')
+ .replace(/>/g, '&gt;')
+ .replace(/"/g, '&quot;')
+ .replace(/'/g, '&apos;');
+ };
+ $.jstree.plugin("xml_data", {
+ defaults : {
+ data : false,
+ ajax : false,
+ xsl : "flat",
+ clean_node : false,
+ correct_state : true,
+ get_skip_empty : false,
+ get_include_preamble : true
+ },
+ _fn : {
+ load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_xml(obj, function () { _this.__callback({ "obj" : _this._get_node(obj) }); s_call.call(this); }, e_call); },
+ _is_loaded : function (obj) {
+ var s = this._get_settings().xml_data;
+ obj = this._get_node(obj);
+ return obj == -1 || !obj || (!s.ajax && !$.isFunction(s.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0;
+ },
+ load_node_xml : function (obj, s_call, e_call) {
+ var s = this.get_settings().xml_data,
+ error_func = function () {},
+ success_func = function () {};
+
+ obj = this._get_node(obj);
+ if(obj && obj !== -1) {
+ if(obj.data("jstree-is-loading")) { return; }
+ else { obj.data("jstree-is-loading",true); }
+ }
+ switch(!0) {
+ case (!s.data && !s.ajax): throw "Neither data nor ajax settings supplied.";
+ case ($.isFunction(s.data)):
+ s.data.call(this, obj, $.proxy(function (d) {
+ this.parse_xml(d, $.proxy(function (d) {
+ if(d) {
+ d = d.replace(/ ?xmlns="[^"]*"/ig, "");
+ if(d.length > 10) {
+ d = $(d);
+ if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); }
+ else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d); obj.removeData("jstree-is-loading"); }
+ if(s.clean_node) { this.clean_node(obj); }
+ if(s_call) { s_call.call(this); }
+ }
+ else {
+ if(obj && obj !== -1) {
+ obj.children("a.jstree-loading").removeClass("jstree-loading");
+ obj.removeData("jstree-is-loading");
+ if(s.correct_state) {
+ this.correct_state(obj);
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ else {
+ if(s.correct_state) {
+ this.get_container().children("ul").empty();
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ }
+ }
+ }, this));
+ }, this));
+ break;
+ case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
+ if(!obj || obj == -1) {
+ this.parse_xml(s.data, $.proxy(function (d) {
+ if(d) {
+ d = d.replace(/ ?xmlns="[^"]*"/ig, "");
+ if(d.length > 10) {
+ d = $(d);
+ this.get_container().children("ul").empty().append(d.children());
+ if(s.clean_node) { this.clean_node(obj); }
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ else {
+ if(s.correct_state) {
+ this.get_container().children("ul").empty();
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ }, this));
+ }
+ break;
+ case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
+ error_func = function (x, t, e) {
+ var ef = this.get_settings().xml_data.ajax.error;
+ if(ef) { ef.call(this, x, t, e); }
+ if(obj !== -1 && obj.length) {
+ obj.children("a.jstree-loading").removeClass("jstree-loading");
+ obj.removeData("jstree-is-loading");
+ if(t === "success" && s.correct_state) { this.correct_state(obj); }
+ }
+ else {
+ if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); }
+ }
+ if(e_call) { e_call.call(this); }
+ };
+ success_func = function (d, t, x) {
+ d = x.responseText;
+ var sf = this.get_settings().xml_data.ajax.success;
+ if(sf) { d = sf.call(this,d,t,x) || d; }
+ if(d === "" || (d && d.toString && d.toString().replace(/^[\s\n]+$/,"") === "")) {
+ return error_func.call(this, x, t, "");
+ }
+ this.parse_xml(d, $.proxy(function (d) {
+ if(d) {
+ d = d.replace(/ ?xmlns="[^"]*"/ig, "");
+ if(d.length > 10) {
+ d = $(d);
+ if(obj === -1 || !obj) { this.get_container().children("ul").empty().append(d.children()); }
+ else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d); obj.removeData("jstree-is-loading"); }
+ if(s.clean_node) { this.clean_node(obj); }
+ if(s_call) { s_call.call(this); }
+ }
+ else {
+ if(obj && obj !== -1) {
+ obj.children("a.jstree-loading").removeClass("jstree-loading");
+ obj.removeData("jstree-is-loading");
+ if(s.correct_state) {
+ this.correct_state(obj);
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ else {
+ if(s.correct_state) {
+ this.get_container().children("ul").empty();
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ }
+ }
+ }, this));
+ };
+ s.ajax.context = this;
+ s.ajax.error = error_func;
+ s.ajax.success = success_func;
+ if(!s.ajax.dataType) { s.ajax.dataType = "xml"; }
+ if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); }
+ if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); }
+ $.ajax(s.ajax);
+ break;
+ }
+ },
+ parse_xml : function (xml, callback) {
+ var s = this._get_settings().xml_data;
+ $.vakata.xslt(xml, xsl[s.xsl], callback);
+ },
+ get_xml : function (tp, obj, li_attr, a_attr, is_callback) {
+ var result = "",
+ s = this._get_settings(),
+ _this = this,
+ tmp1, tmp2, li, a, lang;
+ if(!tp) { tp = "flat"; }
+ if(!is_callback) { is_callback = 0; }
+ obj = this._get_node(obj);
+ if(!obj || obj === -1) { obj = this.get_container().find("> ul > li"); }
+ li_attr = $.isArray(li_attr) ? li_attr : [ "id", "class" ];
+ if(!is_callback && this.data.types && $.inArray(s.types.type_attr, li_attr) === -1) { li_attr.push(s.types.type_attr); }
+
+ a_attr = $.isArray(a_attr) ? a_attr : [ ];
+
+ if(!is_callback) {
+ if(s.xml_data.get_include_preamble) {
+ result += '<' + '?xml version="1.0" encoding="UTF-8"?' + '>';
+ }
+ result += "<root>";
+ }
+ obj.each(function () {
+ result += "<item";
+ li = $(this);
+ $.each(li_attr, function (i, v) {
+ var t = li.attr(v);
+ if(!s.xml_data.get_skip_empty || typeof t !== "undefined") {
+ result += " " + v + "=\"" + escape_xml((" " + (t || "")).replace(/ jstree[^ ]*/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,"")) + "\"";
+ }
+ });
+ if(li.hasClass("jstree-open")) { result += " state=\"open\""; }
+ if(li.hasClass("jstree-closed")) { result += " state=\"closed\""; }
+ if(tp === "flat") { result += " parent_id=\"" + escape_xml(is_callback) + "\""; }
+ result += ">";
+ result += "<content>";
+ a = li.children("a");
+ a.each(function () {
+ tmp1 = $(this);
+ lang = false;
+ result += "<name";
+ if($.inArray("languages", s.plugins) !== -1) {
+ $.each(s.languages, function (k, z) {
+ if(tmp1.hasClass(z)) { result += " lang=\"" + escape_xml(z) + "\""; lang = z; return false; }
+ });
+ }
+ if(a_attr.length) {
+ $.each(a_attr, function (k, z) {
+ var t = tmp1.attr(z);
+ if(!s.xml_data.get_skip_empty || typeof t !== "undefined") {
+ result += " " + z + "=\"" + escape_xml((" " + t || "").replace(/ jstree[^ ]*/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,"")) + "\"";
+ }
+ });
+ }
+ if(tmp1.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/^\s+$/ig,"").length) {
+ result += ' icon="' + escape_xml(tmp1.children("ins").get(0).className.replace(/jstree[^ ]*|$/ig,'').replace(/\s+$/ig," ").replace(/^ /,"").replace(/ $/,"")) + '"';
+ }
+ if(tmp1.children("ins").get(0).style.backgroundImage.length) {
+ result += ' icon="' + escape_xml(tmp1.children("ins").get(0).style.backgroundImage.replace("url(","").replace(")","").replace(/'/ig,"").replace(/"/ig,"")) + '"';
+ }
+ result += ">";
+ result += "<![CDATA[" + _this.get_text(tmp1, lang) + "]]>";
+ result += "</name>";
+ });
+ result += "</content>";
+ tmp2 = li[0].id || true;
+ li = li.find("> ul > li");
+ if(li.length) { tmp2 = _this.get_xml(tp, li, li_attr, a_attr, tmp2); }
+ else { tmp2 = ""; }
+ if(tp == "nest") { result += tmp2; }
+ result += "</item>";
+ if(tp == "flat") { result += tmp2; }
+ });
+ if(!is_callback) { result += "</root>"; }
+ return result;
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree search plugin
+ * Enables both sync and async search on the tree
+ * DOES NOT WORK WITH JSON PROGRESSIVE RENDER
+ */
+(function ($) {
+ $.expr[':'].jstree_contains = function(a,i,m){
+ return (a.textContent || a.innerText || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;
+ };
+ $.expr[':'].jstree_title_contains = function(a,i,m) {
+ return (a.getAttribute("title") || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;
+ };
+ $.jstree.plugin("search", {
+ __init : function () {
+ this.data.search.str = "";
+ this.data.search.result = $();
+ if(this._get_settings().search.show_only_matches) {
+ this.get_container()
+ .bind("search.jstree", function (e, data) {
+ $(this).children("ul").find("li").hide().removeClass("jstree-last");
+ data.rslt.nodes.parentsUntil(".jstree").andSelf().show()
+ .filter("ul").each(function () { $(this).children("li:visible").eq(-1).addClass("jstree-last"); });
+ })
+ .bind("clear_search.jstree", function () {
+ $(this).children("ul").find("li").css("display","").end().end().jstree("clean_node", -1);
+ });
+ }
+ },
+ defaults : {
+ ajax : false,
+ search_method : "jstree_contains", // for case insensitive - jstree_contains
+ show_only_matches : false
+ },
+ _fn : {
+ search : function (str, skip_async) {
+ if($.trim(str) === "") { this.clear_search(); return; }
+ var s = this.get_settings().search,
+ t = this,
+ error_func = function () { },
+ success_func = function () { };
+ this.data.search.str = str;
+
+ if(!skip_async && s.ajax !== false && this.get_container_ul().find("li.jstree-closed:not(:has(ul)):eq(0)").length > 0) {
+ this.search.supress_callback = true;
+ error_func = function () { };
+ success_func = function (d, t, x) {
+ var sf = this.get_settings().search.ajax.success;
+ if(sf) { d = sf.call(this,d,t,x) || d; }
+ this.data.search.to_open = d;
+ this._search_open();
+ };
+ s.ajax.context = this;
+ s.ajax.error = error_func;
+ s.ajax.success = success_func;
+ if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, str); }
+ if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, str); }
+ if(!s.ajax.data) { s.ajax.data = { "search_string" : str }; }
+ if(!s.ajax.dataType || /^json/.exec(s.ajax.dataType)) { s.ajax.dataType = "json"; }
+ $.ajax(s.ajax);
+ return;
+ }
+ if(this.data.search.result.length) { this.clear_search(); }
+ this.data.search.result = this.get_container().find("a" + (this.data.languages ? "." + this.get_lang() : "" ) + ":" + (s.search_method) + "(" + this.data.search.str + ")");
+ this.data.search.result.addClass("jstree-search").parent().parents(".jstree-closed").each(function () {
+ t.open_node(this, false, true);
+ });
+ this.__callback({ nodes : this.data.search.result, str : str });
+ },
+ clear_search : function (str) {
+ this.data.search.result.removeClass("jstree-search");
+ this.__callback(this.data.search.result);
+ this.data.search.result = $();
+ },
+ _search_open : function (is_callback) {
+ var _this = this,
+ done = true,
+ current = [],
+ remaining = [];
+ if(this.data.search.to_open.length) {
+ $.each(this.data.search.to_open, function (i, val) {
+ if(val == "#") { return true; }
+ if($(val).length && $(val).is(".jstree-closed")) { current.push(val); }
+ else { remaining.push(val); }
+ });
+ if(current.length) {
+ this.data.search.to_open = remaining;
+ $.each(current, function (i, val) {
+ _this.open_node(val, function () { _this._search_open(true); });
+ });
+ done = false;
+ }
+ }
+ if(done) { this.search(this.data.search.str, true); }
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree contextmenu plugin
+ */
+(function ($) {
+ $.vakata.context = {
+ hide_on_mouseleave : false,
+
+ cnt : $("<div id='vakata-contextmenu' />"),
+ vis : false,
+ tgt : false,
+ par : false,
+ func : false,
+ data : false,
+ rtl : false,
+ show : function (s, t, x, y, d, p, rtl) {
+ $.vakata.context.rtl = !!rtl;
+ var html = $.vakata.context.parse(s), h, w;
+ if(!html) { return; }
+ $.vakata.context.vis = true;
+ $.vakata.context.tgt = t;
+ $.vakata.context.par = p || t || null;
+ $.vakata.context.data = d || null;
+ $.vakata.context.cnt
+ .html(html)
+ .css({ "visibility" : "hidden", "display" : "block", "left" : 0, "top" : 0 });
+
+ if($.vakata.context.hide_on_mouseleave) {
+ $.vakata.context.cnt
+ .one("mouseleave", function(e) { $.vakata.context.hide(); });
+ }
+
+ h = $.vakata.context.cnt.height();
+ w = $.vakata.context.cnt.width();
+ if(x + w > $(document).width()) {
+ x = $(document).width() - (w + 5);
+ $.vakata.context.cnt.find("li > ul").addClass("right");
+ }
+ if(y + h > $(document).height()) {
+ y = y - (h + t[0].offsetHeight);
+ $.vakata.context.cnt.find("li > ul").addClass("bottom");
+ }
+
+ $.vakata.context.cnt
+ .css({ "left" : x, "top" : y })
+ .find("li:has(ul)")
+ .bind("mouseenter", function (e) {
+ var w = $(document).width(),
+ h = $(document).height(),
+ ul = $(this).children("ul").show();
+ if(w !== $(document).width()) { ul.toggleClass("right"); }
+ if(h !== $(document).height()) { ul.toggleClass("bottom"); }
+ })
+ .bind("mouseleave", function (e) {
+ $(this).children("ul").hide();
+ })
+ .end()
+ .css({ "visibility" : "visible" })
+ .show();
+ $(document).triggerHandler("context_show.vakata");
+ },
+ hide : function () {
+ $.vakata.context.vis = false;
+ $.vakata.context.cnt.attr("class","").css({ "visibility" : "hidden" });
+ $(document).triggerHandler("context_hide.vakata");
+ },
+ parse : function (s, is_callback) {
+ if(!s) { return false; }
+ var str = "",
+ tmp = false,
+ was_sep = true;
+ if(!is_callback) { $.vakata.context.func = {}; }
+ str += "<ul>";
+ $.each(s, function (i, val) {
+ if(!val) { return true; }
+ $.vakata.context.func[i] = val.action;
+ if(!was_sep && val.separator_before) {
+ str += "<li class='vakata-separator vakata-separator-before'></li>";
+ }
+ was_sep = false;
+ str += "<li class='" + (val._class || "") + (val._disabled ? " jstree-contextmenu-disabled " : "") + "'><ins ";
+ if(val.icon && val.icon.indexOf("/") === -1) { str += " class='" + val.icon + "' "; }
+ if(val.icon && val.icon.indexOf("/") !== -1) { str += " style='background:url(" + val.icon + ") center center no-repeat;' "; }
+ str += ">&#160;</ins><a href='#' rel='" + i + "'>";
+ if(val.submenu) {
+ str += "<span style='float:" + ($.vakata.context.rtl ? "left" : "right") + ";'>&raquo;</span>";
+ }
+ str += val.label + "</a>";
+ if(val.submenu) {
+ tmp = $.vakata.context.parse(val.submenu, true);
+ if(tmp) { str += tmp; }
+ }
+ str += "</li>";
+ if(val.separator_after) {
+ str += "<li class='vakata-separator vakata-separator-after'></li>";
+ was_sep = true;
+ }
+ });
+ str = str.replace(/<li class\='vakata-separator vakata-separator-after'\><\/li\>$/,"");
+ str += "</ul>";
+ $(document).triggerHandler("context_parse.vakata");
+ return str.length > 10 ? str : false;
+ },
+ exec : function (i) {
+ if($.isFunction($.vakata.context.func[i])) {
+ // if is string - eval and call it!
+ $.vakata.context.func[i].call($.vakata.context.data, $.vakata.context.par);
+ return true;
+ }
+ else { return false; }
+ }
+ };
+ $(function () {
+ var css_string = '' +
+ '#vakata-contextmenu { display:block; visibility:hidden; left:0; top:-200px; position:absolute; margin:0; padding:0; min-width:180px; background:#ebebeb; border:1px solid silver; z-index:10000; *width:180px; } ' +
+ '#vakata-contextmenu ul { min-width:180px; *width:180px; } ' +
+ '#vakata-contextmenu ul, #vakata-contextmenu li { margin:0; padding:0; list-style-type:none; display:block; } ' +
+ '#vakata-contextmenu li { line-height:20px; min-height:20px; position:relative; padding:0px; } ' +
+ '#vakata-contextmenu li a { padding:1px 6px; line-height:17px; display:block; text-decoration:none; margin:1px 1px 0 1px; } ' +
+ '#vakata-contextmenu li ins { float:left; width:16px; height:16px; text-decoration:none; margin-right:2px; } ' +
+ '#vakata-contextmenu li a:hover, #vakata-contextmenu li.vakata-hover > a { background:gray; color:white; } ' +
+ '#vakata-contextmenu li ul { display:none; position:absolute; top:-2px; left:100%; background:#ebebeb; border:1px solid gray; } ' +
+ '#vakata-contextmenu .right { right:100%; left:auto; } ' +
+ '#vakata-contextmenu .bottom { bottom:-1px; top:auto; } ' +
+ '#vakata-contextmenu li.vakata-separator { min-height:0; height:1px; line-height:1px; font-size:1px; overflow:hidden; margin:0 2px; background:silver; /* border-top:1px solid #fefefe; */ padding:0; } ';
+ $.vakata.css.add_sheet({ str : css_string, title : "vakata" });
+ $.vakata.context.cnt
+ .delegate("a","click", function (e) { e.preventDefault(); })
+ .delegate("a","mouseup", function (e) {
+ if(!$(this).parent().hasClass("jstree-contextmenu-disabled") && $.vakata.context.exec($(this).attr("rel"))) {
+ $.vakata.context.hide();
+ }
+ else { $(this).blur(); }
+ })
+ .delegate("a","mouseover", function () {
+ $.vakata.context.cnt.find(".vakata-hover").removeClass("vakata-hover");
+ })
+ .appendTo("body");
+ $(document).bind("mousedown", function (e) { if($.vakata.context.vis && !$.contains($.vakata.context.cnt[0], e.target)) { $.vakata.context.hide(); } });
+ if(typeof $.hotkeys !== "undefined") {
+ $(document)
+ .bind("keydown", "up", function (e) {
+ if($.vakata.context.vis) {
+ var o = $.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").prevAll("li:not(.vakata-separator)").first();
+ if(!o.length) { o = $.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").last(); }
+ o.addClass("vakata-hover");
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ })
+ .bind("keydown", "down", function (e) {
+ if($.vakata.context.vis) {
+ var o = $.vakata.context.cnt.find("ul:visible").last().children(".vakata-hover").removeClass("vakata-hover").nextAll("li:not(.vakata-separator)").first();
+ if(!o.length) { o = $.vakata.context.cnt.find("ul:visible").last().children("li:not(.vakata-separator)").first(); }
+ o.addClass("vakata-hover");
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ })
+ .bind("keydown", "right", function (e) {
+ if($.vakata.context.vis) {
+ $.vakata.context.cnt.find(".vakata-hover").children("ul").show().children("li:not(.vakata-separator)").removeClass("vakata-hover").first().addClass("vakata-hover");
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ })
+ .bind("keydown", "left", function (e) {
+ if($.vakata.context.vis) {
+ $.vakata.context.cnt.find(".vakata-hover").children("ul").hide().children(".vakata-separator").removeClass("vakata-hover");
+ e.stopImmediatePropagation();
+ e.preventDefault();
+ }
+ })
+ .bind("keydown", "esc", function (e) {
+ $.vakata.context.hide();
+ e.preventDefault();
+ })
+ .bind("keydown", "space", function (e) {
+ $.vakata.context.cnt.find(".vakata-hover").last().children("a").click();
+ e.preventDefault();
+ });
+ }
+ });
+
+ $.jstree.plugin("contextmenu", {
+ __init : function () {
+ this.get_container()
+ .delegate("a", "contextmenu.jstree", $.proxy(function (e) {
+ e.preventDefault();
+ if(!$(e.currentTarget).hasClass("jstree-loading")) {
+ this.show_contextmenu(e.currentTarget, e.pageX, e.pageY);
+ }
+ }, this))
+ .delegate("a", "click.jstree", $.proxy(function (e) {
+ if(this.data.contextmenu) {
+ $.vakata.context.hide();
+ }
+ }, this))
+ .bind("destroy.jstree", $.proxy(function () {
+ // TODO: move this to descruct method
+ if(this.data.contextmenu) {
+ $.vakata.context.hide();
+ }
+ }, this));
+ $(document).bind("context_hide.vakata", $.proxy(function () { this.data.contextmenu = false; }, this));
+ },
+ defaults : {
+ select_node : false, // requires UI plugin
+ show_at_node : true,
+ items : { // Could be a function that should return an object like this one
+ "create" : {
+ "separator_before" : false,
+ "separator_after" : true,
+ "label" : "Create",
+ "action" : function (obj) { this.create(obj); }
+ },
+ "rename" : {
+ "separator_before" : false,
+ "separator_after" : false,
+ "label" : "Rename",
+ "action" : function (obj) { this.rename(obj); }
+ },
+ "remove" : {
+ "separator_before" : false,
+ "icon" : false,
+ "separator_after" : false,
+ "label" : "Delete",
+ "action" : function (obj) { if(this.is_selected(obj)) { this.remove(); } else { this.remove(obj); } }
+ },
+ "ccp" : {
+ "separator_before" : true,
+ "icon" : false,
+ "separator_after" : false,
+ "label" : "Edit",
+ "action" : false,
+ "submenu" : {
+ "cut" : {
+ "separator_before" : false,
+ "separator_after" : false,
+ "label" : "Cut",
+ "action" : function (obj) { this.cut(obj); }
+ },
+ "copy" : {
+ "separator_before" : false,
+ "icon" : false,
+ "separator_after" : false,
+ "label" : "Copy",
+ "action" : function (obj) { this.copy(obj); }
+ },
+ "paste" : {
+ "separator_before" : false,
+ "icon" : false,
+ "separator_after" : false,
+ "label" : "Paste",
+ "action" : function (obj) { this.paste(obj); }
+ }
+ }
+ }
+ }
+ },
+ _fn : {
+ show_contextmenu : function (obj, x, y) {
+ obj = this._get_node(obj);
+ var s = this.get_settings().contextmenu,
+ a = obj.children("a:visible:eq(0)"),
+ o = false,
+ i = false;
+ if(s.select_node && this.data.ui && !this.is_selected(obj)) {
+ this.deselect_all();
+ this.select_node(obj, true);
+ }
+ if(s.show_at_node || typeof x === "undefined" || typeof y === "undefined") {
+ o = a.offset();
+ x = o.left;
+ y = o.top + this.data.core.li_height;
+ }
+ i = obj.data("jstree") && obj.data("jstree").contextmenu ? obj.data("jstree").contextmenu : s.items;
+ if($.isFunction(i)) { i = i.call(this, obj); }
+ this.data.contextmenu = true;
+ $.vakata.context.show(i, a, x, y, this, obj, this._get_settings().core.rtl);
+ if(this.data.themes) { $.vakata.context.cnt.attr("class", "jstree-" + this.data.themes.theme + "-context"); }
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree types plugin
+ * Adds support types of nodes
+ * You can set an attribute on each li node, that represents its type.
+ * According to the type setting the node may get custom icon/validation rules
+ */
+(function ($) {
+ $.jstree.plugin("types", {
+ __init : function () {
+ var s = this._get_settings().types;
+ this.data.types.attach_to = [];
+ this.get_container()
+ .bind("init.jstree", $.proxy(function () {
+ var types = s.types,
+ attr = s.type_attr,
+ icons_css = "",
+ _this = this;
+
+ $.each(types, function (i, tp) {
+ $.each(tp, function (k, v) {
+ if(!/^(max_depth|max_children|icon|valid_children)$/.test(k)) { _this.data.types.attach_to.push(k); }
+ });
+ if(!tp.icon) { return true; }
+ if( tp.icon.image || tp.icon.position) {
+ if(i == "default") { icons_css += '.jstree-' + _this.get_index() + ' a > .jstree-icon { '; }
+ else { icons_css += '.jstree-' + _this.get_index() + ' li[' + attr + '="' + i + '"] > a > .jstree-icon { '; }
+ if(tp.icon.image) { icons_css += ' background-image:url(' + tp.icon.image + '); '; }
+ if(tp.icon.position){ icons_css += ' background-position:' + tp.icon.position + '; '; }
+ else { icons_css += ' background-position:0 0; '; }
+ icons_css += '} ';
+ }
+ });
+ if(icons_css !== "") { $.vakata.css.add_sheet({ 'str' : icons_css, title : "jstree-types" }); }
+ }, this))
+ .bind("before.jstree", $.proxy(function (e, data) {
+ var s, t,
+ o = this._get_settings().types.use_data ? this._get_node(data.args[0]) : false,
+ d = o && o !== -1 && o.length ? o.data("jstree") : false;
+ if(d && d.types && d.types[data.func] === false) { e.stopImmediatePropagation(); return false; }
+ if($.inArray(data.func, this.data.types.attach_to) !== -1) {
+ if(!data.args[0] || (!data.args[0].tagName && !data.args[0].jquery)) { return; }
+ s = this._get_settings().types.types;
+ t = this._get_type(data.args[0]);
+ if(
+ (
+ (s[t] && typeof s[t][data.func] !== "undefined") ||
+ (s["default"] && typeof s["default"][data.func] !== "undefined")
+ ) && this._check(data.func, data.args[0]) === false
+ ) {
+ e.stopImmediatePropagation();
+ return false;
+ }
+ }
+ }, this));
+ if(is_ie6) {
+ this.get_container()
+ .bind("load_node.jstree set_type.jstree", $.proxy(function (e, data) {
+ var r = data && data.rslt && data.rslt.obj && data.rslt.obj !== -1 ? this._get_node(data.rslt.obj).parent() : this.get_container_ul(),
+ c = false,
+ s = this._get_settings().types;
+ $.each(s.types, function (i, tp) {
+ if(tp.icon && (tp.icon.image || tp.icon.position)) {
+ c = i === "default" ? r.find("li > a > .jstree-icon") : r.find("li[" + s.type_attr + "='" + i + "'] > a > .jstree-icon");
+ if(tp.icon.image) { c.css("backgroundImage","url(" + tp.icon.image + ")"); }
+ c.css("backgroundPosition", tp.icon.position || "0 0");
+ }
+ });
+ }, this));
+ }
+ },
+ defaults : {
+ // defines maximum number of root nodes (-1 means unlimited, -2 means disable max_children checking)
+ max_children : -1,
+ // defines the maximum depth of the tree (-1 means unlimited, -2 means disable max_depth checking)
+ max_depth : -1,
+ // defines valid node types for the root nodes
+ valid_children : "all",
+
+ // whether to use $.data
+ use_data : false,
+ // where is the type stores (the rel attribute of the LI element)
+ type_attr : "rel",
+ // a list of types
+ types : {
+ // the default type
+ "default" : {
+ "max_children" : -1,
+ "max_depth" : -1,
+ "valid_children": "all"
+
+ // Bound functions - you can bind any other function here (using boolean or function)
+ //"select_node" : true
+ }
+ }
+ },
+ _fn : {
+ _types_notify : function (n, data) {
+ if(data.type && this._get_settings().types.use_data) {
+ this.set_type(data.type, n);
+ }
+ },
+ _get_type : function (obj) {
+ obj = this._get_node(obj);
+ return (!obj || !obj.length) ? false : obj.attr(this._get_settings().types.type_attr) || "default";
+ },
+ set_type : function (str, obj) {
+ obj = this._get_node(obj);
+ var ret = (!obj.length || !str) ? false : obj.attr(this._get_settings().types.type_attr, str);
+ if(ret) { this.__callback({ obj : obj, type : str}); }
+ return ret;
+ },
+ _check : function (rule, obj, opts) {
+ obj = this._get_node(obj);
+ var v = false, t = this._get_type(obj), d = 0, _this = this, s = this._get_settings().types, data = false;
+ if(obj === -1) {
+ if(!!s[rule]) { v = s[rule]; }
+ else { return; }
+ }
+ else {
+ if(t === false) { return; }
+ data = s.use_data ? obj.data("jstree") : false;
+ if(data && data.types && typeof data.types[rule] !== "undefined") { v = data.types[rule]; }
+ else if(!!s.types[t] && typeof s.types[t][rule] !== "undefined") { v = s.types[t][rule]; }
+ else if(!!s.types["default"] && typeof s.types["default"][rule] !== "undefined") { v = s.types["default"][rule]; }
+ }
+ if($.isFunction(v)) { v = v.call(this, obj); }
+ if(rule === "max_depth" && obj !== -1 && opts !== false && s.max_depth !== -2 && v !== 0) {
+ // also include the node itself - otherwise if root node it is not checked
+ obj.children("a:eq(0)").parentsUntil(".jstree","li").each(function (i) {
+ // check if current depth already exceeds global tree depth
+ if(s.max_depth !== -1 && s.max_depth - (i + 1) <= 0) { v = 0; return false; }
+ d = (i === 0) ? v : _this._check(rule, this, false);
+ // check if current node max depth is already matched or exceeded
+ if(d !== -1 && d - (i + 1) <= 0) { v = 0; return false; }
+ // otherwise - set the max depth to the current value minus current depth
+ if(d >= 0 && (d - (i + 1) < v || v < 0) ) { v = d - (i + 1); }
+ // if the global tree depth exists and it minus the nodes calculated so far is less than `v` or `v` is unlimited
+ if(s.max_depth >= 0 && (s.max_depth - (i + 1) < v || v < 0) ) { v = s.max_depth - (i + 1); }
+ });
+ }
+ return v;
+ },
+ check_move : function () {
+ if(!this.__call_old()) { return false; }
+ var m = this._get_move(),
+ s = m.rt._get_settings().types,
+ mc = m.rt._check("max_children", m.cr),
+ md = m.rt._check("max_depth", m.cr),
+ vc = m.rt._check("valid_children", m.cr),
+ ch = 0, d = 1, t;
+
+ if(vc === "none") { return false; }
+ if($.isArray(vc) && m.ot && m.ot._get_type) {
+ m.o.each(function () {
+ if($.inArray(m.ot._get_type(this), vc) === -1) { d = false; return false; }
+ });
+ if(d === false) { return false; }
+ }
+ if(s.max_children !== -2 && mc !== -1) {
+ ch = m.cr === -1 ? this.get_container().find("> ul > li").not(m.o).length : m.cr.find("> ul > li").not(m.o).length;
+ if(ch + m.o.length > mc) { return false; }
+ }
+ if(s.max_depth !== -2 && md !== -1) {
+ d = 0;
+ if(md === 0) { return false; }
+ if(typeof m.o.d === "undefined") {
+ // TODO: deal with progressive rendering and async when checking max_depth (how to know the depth of the moved node)
+ t = m.o;
+ while(t.length > 0) {
+ t = t.find("> ul > li");
+ d ++;
+ }
+ m.o.d = d;
+ }
+ if(md - m.o.d < 0) { return false; }
+ }
+ return true;
+ },
+ create_node : function (obj, position, js, callback, is_loaded, skip_check) {
+ if(!skip_check && (is_loaded || this._is_loaded(obj))) {
+ var p = (typeof position == "string" && position.match(/^before|after$/i) && obj !== -1) ? this._get_parent(obj) : this._get_node(obj),
+ s = this._get_settings().types,
+ mc = this._check("max_children", p),
+ md = this._check("max_depth", p),
+ vc = this._check("valid_children", p),
+ ch;
+ if(typeof js === "string") { js = { data : js }; }
+ if(!js) { js = {}; }
+ if(vc === "none") { return false; }
+ if($.isArray(vc)) {
+ if(!js.attr || !js.attr[s.type_attr]) {
+ if(!js.attr) { js.attr = {}; }
+ js.attr[s.type_attr] = vc[0];
+ }
+ else {
+ if($.inArray(js.attr[s.type_attr], vc) === -1) { return false; }
+ }
+ }
+ if(s.max_children !== -2 && mc !== -1) {
+ ch = p === -1 ? this.get_container().find("> ul > li").length : p.find("> ul > li").length;
+ if(ch + 1 > mc) { return false; }
+ }
+ if(s.max_depth !== -2 && md !== -1 && (md - 1) < 0) { return false; }
+ }
+ return this.__call_old(true, obj, position, js, callback, is_loaded, skip_check);
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree HTML plugin
+ * The HTML data store. Datastores are build by replacing the `load_node` and `_is_loaded` functions.
+ */
+(function ($) {
+ $.jstree.plugin("html_data", {
+ __init : function () {
+ // this used to use html() and clean the whitespace, but this way any attached data was lost
+ this.data.html_data.original_container_html = this.get_container().find(" > ul > li").clone(true);
+ // remove white space from LI node - otherwise nodes appear a bit to the right
+ this.data.html_data.original_container_html.find("li").andSelf().contents().filter(function() { return this.nodeType == 3; }).remove();
+ },
+ defaults : {
+ data : false,
+ ajax : false,
+ correct_state : true
+ },
+ _fn : {
+ load_node : function (obj, s_call, e_call) { var _this = this; this.load_node_html(obj, function () { _this.__callback({ "obj" : _this._get_node(obj) }); s_call.call(this); }, e_call); },
+ _is_loaded : function (obj) {
+ obj = this._get_node(obj);
+ return obj == -1 || !obj || (!this._get_settings().html_data.ajax && !$.isFunction(this._get_settings().html_data.data)) || obj.is(".jstree-open, .jstree-leaf") || obj.children("ul").children("li").size() > 0;
+ },
+ load_node_html : function (obj, s_call, e_call) {
+ var d,
+ s = this.get_settings().html_data,
+ error_func = function () {},
+ success_func = function () {};
+ obj = this._get_node(obj);
+ if(obj && obj !== -1) {
+ if(obj.data("jstree-is-loading")) { return; }
+ else { obj.data("jstree-is-loading",true); }
+ }
+ switch(!0) {
+ case ($.isFunction(s.data)):
+ s.data.call(this, obj, $.proxy(function (d) {
+ if(d && d !== "" && d.toString && d.toString().replace(/^[\s\n]+$/,"") !== "") {
+ d = $(d);
+ if(!d.is("ul")) { d = $("<ul />").append(d); }
+ if(obj == -1 || !obj) { this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); }
+ else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); obj.removeData("jstree-is-loading"); }
+ this.clean_node(obj);
+ if(s_call) { s_call.call(this); }
+ }
+ else {
+ if(obj && obj !== -1) {
+ obj.children("a.jstree-loading").removeClass("jstree-loading");
+ obj.removeData("jstree-is-loading");
+ if(s.correct_state) {
+ this.correct_state(obj);
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ else {
+ if(s.correct_state) {
+ this.get_container().children("ul").empty();
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ }
+ }, this));
+ break;
+ case (!s.data && !s.ajax):
+ if(!obj || obj == -1) {
+ this.get_container()
+ .children("ul").empty()
+ .append(this.data.html_data.original_container_html)
+ .find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end()
+ .filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");
+ this.clean_node();
+ }
+ if(s_call) { s_call.call(this); }
+ break;
+ case (!!s.data && !s.ajax) || (!!s.data && !!s.ajax && (!obj || obj === -1)):
+ if(!obj || obj == -1) {
+ d = $(s.data);
+ if(!d.is("ul")) { d = $("<ul />").append(d); }
+ this.get_container()
+ .children("ul").empty().append(d.children())
+ .find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end()
+ .filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon");
+ this.clean_node();
+ }
+ if(s_call) { s_call.call(this); }
+ break;
+ case (!s.data && !!s.ajax) || (!!s.data && !!s.ajax && obj && obj !== -1):
+ obj = this._get_node(obj);
+ error_func = function (x, t, e) {
+ var ef = this.get_settings().html_data.ajax.error;
+ if(ef) { ef.call(this, x, t, e); }
+ if(obj != -1 && obj.length) {
+ obj.children("a.jstree-loading").removeClass("jstree-loading");
+ obj.removeData("jstree-is-loading");
+ if(t === "success" && s.correct_state) { this.correct_state(obj); }
+ }
+ else {
+ if(t === "success" && s.correct_state) { this.get_container().children("ul").empty(); }
+ }
+ if(e_call) { e_call.call(this); }
+ };
+ success_func = function (d, t, x) {
+ var sf = this.get_settings().html_data.ajax.success;
+ if(sf) { d = sf.call(this,d,t,x) || d; }
+ if(d === "" || (d && d.toString && d.toString().replace(/^[\s\n]+$/,"") === "")) {
+ return error_func.call(this, x, t, "");
+ }
+ if(d) {
+ d = $(d);
+ if(!d.is("ul")) { d = $("<ul />").append(d); }
+ if(obj == -1 || !obj) { this.get_container().children("ul").empty().append(d.children()).find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); }
+ else { obj.children("a.jstree-loading").removeClass("jstree-loading"); obj.append(d).children("ul").find("li, a").filter(function () { return !this.firstChild || !this.firstChild.tagName || this.firstChild.tagName !== "INS"; }).prepend("<ins class='jstree-icon'>&#160;</ins>").end().filter("a").children("ins:first-child").not(".jstree-icon").addClass("jstree-icon"); obj.removeData("jstree-is-loading"); }
+ this.clean_node(obj);
+ if(s_call) { s_call.call(this); }
+ }
+ else {
+ if(obj && obj !== -1) {
+ obj.children("a.jstree-loading").removeClass("jstree-loading");
+ obj.removeData("jstree-is-loading");
+ if(s.correct_state) {
+ this.correct_state(obj);
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ else {
+ if(s.correct_state) {
+ this.get_container().children("ul").empty();
+ if(s_call) { s_call.call(this); }
+ }
+ }
+ }
+ };
+ s.ajax.context = this;
+ s.ajax.error = error_func;
+ s.ajax.success = success_func;
+ if(!s.ajax.dataType) { s.ajax.dataType = "html"; }
+ if($.isFunction(s.ajax.url)) { s.ajax.url = s.ajax.url.call(this, obj); }
+ if($.isFunction(s.ajax.data)) { s.ajax.data = s.ajax.data.call(this, obj); }
+ $.ajax(s.ajax);
+ break;
+ }
+ }
+ }
+ });
+ // include the HTML data plugin by default
+ $.jstree.defaults.plugins.push("html_data");
+})(jQuery);
+//*/
+
+/*
+ * jsTree themeroller plugin
+ * Adds support for jQuery UI themes. Include this at the end of your plugins list, also make sure "themes" is not included.
+ */
+(function ($) {
+ $.jstree.plugin("themeroller", {
+ __init : function () {
+ var s = this._get_settings().themeroller;
+ this.get_container()
+ .addClass("ui-widget-content")
+ .addClass("jstree-themeroller")
+ .delegate("a","mouseenter.jstree", function (e) {
+ if(!$(e.currentTarget).hasClass("jstree-loading")) {
+ $(this).addClass(s.item_h);
+ }
+ })
+ .delegate("a","mouseleave.jstree", function () {
+ $(this).removeClass(s.item_h);
+ })
+ .bind("init.jstree", $.proxy(function (e, data) {
+ data.inst.get_container().find("> ul > li > .jstree-loading > ins").addClass("ui-icon-refresh");
+ this._themeroller(data.inst.get_container().find("> ul > li"));
+ }, this))
+ .bind("open_node.jstree create_node.jstree", $.proxy(function (e, data) {
+ this._themeroller(data.rslt.obj);
+ }, this))
+ .bind("loaded.jstree refresh.jstree", $.proxy(function (e) {
+ this._themeroller();
+ }, this))
+ .bind("close_node.jstree", $.proxy(function (e, data) {
+ this._themeroller(data.rslt.obj);
+ }, this))
+ .bind("delete_node.jstree", $.proxy(function (e, data) {
+ this._themeroller(data.rslt.parent);
+ }, this))
+ .bind("correct_state.jstree", $.proxy(function (e, data) {
+ data.rslt.obj
+ .children("ins.jstree-icon").removeClass(s.opened + " " + s.closed + " ui-icon").end()
+ .find("> a > ins.ui-icon")
+ .filter(function() {
+ return this.className.toString()
+ .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
+ .indexOf("ui-icon-") === -1;
+ }).removeClass(s.item_open + " " + s.item_clsd).addClass(s.item_leaf || "jstree-no-icon");
+ }, this))
+ .bind("select_node.jstree", $.proxy(function (e, data) {
+ data.rslt.obj.children("a").addClass(s.item_a);
+ }, this))
+ .bind("deselect_node.jstree deselect_all.jstree", $.proxy(function (e, data) {
+ this.get_container()
+ .find("a." + s.item_a).removeClass(s.item_a).end()
+ .find("a.jstree-clicked").addClass(s.item_a);
+ }, this))
+ .bind("dehover_node.jstree", $.proxy(function (e, data) {
+ data.rslt.obj.children("a").removeClass(s.item_h);
+ }, this))
+ .bind("hover_node.jstree", $.proxy(function (e, data) {
+ this.get_container()
+ .find("a." + s.item_h).not(data.rslt.obj).removeClass(s.item_h);
+ data.rslt.obj.children("a").addClass(s.item_h);
+ }, this))
+ .bind("move_node.jstree", $.proxy(function (e, data) {
+ this._themeroller(data.rslt.o);
+ this._themeroller(data.rslt.op);
+ }, this));
+ },
+ __destroy : function () {
+ var s = this._get_settings().themeroller,
+ c = [ "ui-icon" ];
+ $.each(s, function (i, v) {
+ v = v.split(" ");
+ if(v.length) { c = c.concat(v); }
+ });
+ this.get_container()
+ .removeClass("ui-widget-content")
+ .find("." + c.join(", .")).removeClass(c.join(" "));
+ },
+ _fn : {
+ _themeroller : function (obj) {
+ var s = this._get_settings().themeroller;
+ obj = !obj || obj == -1 ? this.get_container_ul() : this._get_node(obj).parent();
+ obj
+ .find("li.jstree-closed")
+ .children("ins.jstree-icon").removeClass(s.opened).addClass("ui-icon " + s.closed).end()
+ .children("a").addClass(s.item)
+ .children("ins.jstree-icon").addClass("ui-icon")
+ .filter(function() {
+ return this.className.toString()
+ .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
+ .indexOf("ui-icon-") === -1;
+ }).removeClass(s.item_leaf + " " + s.item_open).addClass(s.item_clsd || "jstree-no-icon")
+ .end()
+ .end()
+ .end()
+ .end()
+ .find("li.jstree-open")
+ .children("ins.jstree-icon").removeClass(s.closed).addClass("ui-icon " + s.opened).end()
+ .children("a").addClass(s.item)
+ .children("ins.jstree-icon").addClass("ui-icon")
+ .filter(function() {
+ return this.className.toString()
+ .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
+ .indexOf("ui-icon-") === -1;
+ }).removeClass(s.item_leaf + " " + s.item_clsd).addClass(s.item_open || "jstree-no-icon")
+ .end()
+ .end()
+ .end()
+ .end()
+ .find("li.jstree-leaf")
+ .children("ins.jstree-icon").removeClass(s.closed + " ui-icon " + s.opened).end()
+ .children("a").addClass(s.item)
+ .children("ins.jstree-icon").addClass("ui-icon")
+ .filter(function() {
+ return this.className.toString()
+ .replace(s.item_clsd,"").replace(s.item_open,"").replace(s.item_leaf,"")
+ .indexOf("ui-icon-") === -1;
+ }).removeClass(s.item_clsd + " " + s.item_open).addClass(s.item_leaf || "jstree-no-icon");
+ }
+ },
+ defaults : {
+ "opened" : "ui-icon-triangle-1-se",
+ "closed" : "ui-icon-triangle-1-e",
+ "item" : "ui-state-default",
+ "item_h" : "ui-state-hover",
+ "item_a" : "ui-state-active",
+ "item_open" : "ui-icon-folder-open",
+ "item_clsd" : "ui-icon-folder-collapsed",
+ "item_leaf" : "ui-icon-document"
+ }
+ });
+ $(function() {
+ var css_string = '' +
+ '.jstree-themeroller .ui-icon { overflow:visible; } ' +
+ '.jstree-themeroller a { padding:0 2px; } ' +
+ '.jstree-themeroller .jstree-no-icon { display:none; }';
+ $.vakata.css.add_sheet({ str : css_string, title : "jstree" });
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree unique plugin
+ * Forces different names amongst siblings (still a bit experimental)
+ * NOTE: does not check language versions (it will not be possible to have nodes with the same title, even in different languages)
+ */
+(function ($) {
+ $.jstree.plugin("unique", {
+ __init : function () {
+ this.get_container()
+ .bind("before.jstree", $.proxy(function (e, data) {
+ var nms = [], res = true, p, t;
+ if(data.func == "move_node") {
+ // obj, ref, position, is_copy, is_prepared, skip_check
+ if(data.args[4] === true) {
+ if(data.args[0].o && data.args[0].o.length) {
+ data.args[0].o.children("a").each(function () { nms.push($(this).text().replace(/^\s+/g,"")); });
+ res = this._check_unique(nms, data.args[0].np.find("> ul > li").not(data.args[0].o), "move_node");
+ }
+ }
+ }
+ if(data.func == "create_node") {
+ // obj, position, js, callback, is_loaded
+ if(data.args[4] || this._is_loaded(data.args[0])) {
+ p = this._get_node(data.args[0]);
+ if(data.args[1] && (data.args[1] === "before" || data.args[1] === "after")) {
+ p = this._get_parent(data.args[0]);
+ if(!p || p === -1) { p = this.get_container(); }
+ }
+ if(typeof data.args[2] === "string") { nms.push(data.args[2]); }
+ else if(!data.args[2] || !data.args[2].data) { nms.push(this._get_string("new_node")); }
+ else { nms.push(data.args[2].data); }
+ res = this._check_unique(nms, p.find("> ul > li"), "create_node");
+ }
+ }
+ if(data.func == "rename_node") {
+ // obj, val
+ nms.push(data.args[1]);
+ t = this._get_node(data.args[0]);
+ p = this._get_parent(t);
+ if(!p || p === -1) { p = this.get_container(); }
+ res = this._check_unique(nms, p.find("> ul > li").not(t), "rename_node");
+ }
+ if(!res) {
+ e.stopPropagation();
+ return false;
+ }
+ }, this));
+ },
+ defaults : {
+ error_callback : $.noop
+ },
+ _fn : {
+ _check_unique : function (nms, p, func) {
+ var cnms = [];
+ p.children("a").each(function () { cnms.push($(this).text().replace(/^\s+/g,"")); });
+ if(!cnms.length || !nms.length) { return true; }
+ cnms = cnms.sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",");
+ if((cnms.length + nms.length) != cnms.concat(nms).sort().join(",,").replace(/(,|^)([^,]+)(,,\2)+(,|$)/g,"$1$2$4").replace(/,,+/g,",").replace(/,$/,"").split(",").length) {
+ this._get_settings().unique.error_callback.call(null, nms, p, func);
+ return false;
+ }
+ return true;
+ },
+ check_move : function () {
+ if(!this.__call_old()) { return false; }
+ var p = this._get_move(), nms = [];
+ if(p.o && p.o.length) {
+ p.o.children("a").each(function () { nms.push($(this).text().replace(/^\s+/g,"")); });
+ return this._check_unique(nms, p.np.find("> ul > li").not(p.o), "check_move");
+ }
+ return true;
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+/*
+ * jsTree wholerow plugin
+ * Makes select and hover work on the entire width of the node
+ * MAY BE HEAVY IN LARGE DOM
+ */
+(function ($) {
+ $.jstree.plugin("wholerow", {
+ __init : function () {
+ if(!this.data.ui) { throw "jsTree wholerow: jsTree UI plugin not included."; }
+ this.data.wholerow.html = false;
+ this.data.wholerow.to = false;
+ this.get_container()
+ .bind("init.jstree", $.proxy(function (e, data) {
+ this._get_settings().core.animation = 0;
+ }, this))
+ .bind("open_node.jstree create_node.jstree clean_node.jstree loaded.jstree", $.proxy(function (e, data) {
+ this._prepare_wholerow_span( data && data.rslt && data.rslt.obj ? data.rslt.obj : -1 );
+ }, this))
+ .bind("search.jstree clear_search.jstree reopen.jstree after_open.jstree after_close.jstree create_node.jstree delete_node.jstree clean_node.jstree", $.proxy(function (e, data) {
+ if(this.data.to) { clearTimeout(this.data.to); }
+ this.data.to = setTimeout( (function (t, o) { return function() { t._prepare_wholerow_ul(o); }; })(this, data && data.rslt && data.rslt.obj ? data.rslt.obj : -1), 0);
+ }, this))
+ .bind("deselect_all.jstree", $.proxy(function (e, data) {
+ this.get_container().find(" > .jstree-wholerow .jstree-clicked").removeClass("jstree-clicked " + (this.data.themeroller ? this._get_settings().themeroller.item_a : "" ));
+ }, this))
+ .bind("select_node.jstree deselect_node.jstree ", $.proxy(function (e, data) {
+ data.rslt.obj.each(function () {
+ var ref = data.inst.get_container().find(" > .jstree-wholerow li:visible:eq(" + ( parseInt((($(this).offset().top - data.inst.get_container().offset().top + data.inst.get_container()[0].scrollTop) / data.inst.data.core.li_height),10)) + ")");
+ // ref.children("a")[e.type === "select_node" ? "addClass" : "removeClass"]("jstree-clicked");
+ ref.children("a").attr("class",data.rslt.obj.children("a").attr("class"));
+ });
+ }, this))
+ .bind("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) {
+ this.get_container().find(" > .jstree-wholerow .jstree-hovered").removeClass("jstree-hovered " + (this.data.themeroller ? this._get_settings().themeroller.item_h : "" ));
+ if(e.type === "hover_node") {
+ var ref = this.get_container().find(" > .jstree-wholerow li:visible:eq(" + ( parseInt(((data.rslt.obj.offset().top - this.get_container().offset().top + this.get_container()[0].scrollTop) / this.data.core.li_height),10)) + ")");
+ // ref.children("a").addClass("jstree-hovered");
+ ref.children("a").attr("class",data.rslt.obj.children(".jstree-hovered").attr("class"));
+ }
+ }, this))
+ .delegate(".jstree-wholerow-span, ins.jstree-icon, li", "click.jstree", function (e) {
+ var n = $(e.currentTarget);
+ if(e.target.tagName === "A" || (e.target.tagName === "INS" && n.closest("li").is(".jstree-open, .jstree-closed"))) { return; }
+ n.closest("li").children("a:visible:eq(0)").click();
+ e.stopImmediatePropagation();
+ })
+ .delegate("li", "mouseover.jstree", $.proxy(function (e) {
+ e.stopImmediatePropagation();
+ if($(e.currentTarget).children(".jstree-hovered, .jstree-clicked").length) { return false; }
+ this.hover_node(e.currentTarget);
+ return false;
+ }, this))
+ .delegate("li", "mouseleave.jstree", $.proxy(function (e) {
+ if($(e.currentTarget).children("a").hasClass("jstree-hovered").length) { return; }
+ this.dehover_node(e.currentTarget);
+ }, this));
+ if(is_ie7 || is_ie6) {
+ $.vakata.css.add_sheet({ str : ".jstree-" + this.get_index() + " { position:relative; } ", title : "jstree" });
+ }
+ },
+ defaults : {
+ },
+ __destroy : function () {
+ this.get_container().children(".jstree-wholerow").remove();
+ this.get_container().find(".jstree-wholerow-span").remove();
+ },
+ _fn : {
+ _prepare_wholerow_span : function (obj) {
+ obj = !obj || obj == -1 ? this.get_container().find("> ul > li") : this._get_node(obj);
+ if(obj === false) { return; } // added for removing root nodes
+ obj.each(function () {
+ $(this).find("li").andSelf().each(function () {
+ var $t = $(this);
+ if($t.children(".jstree-wholerow-span").length) { return true; }
+ $t.prepend("<span class='jstree-wholerow-span' style='width:" + ($t.parentsUntil(".jstree","li").length * 18) + "px;'>&#160;</span>");
+ });
+ });
+ },
+ _prepare_wholerow_ul : function () {
+ var o = this.get_container().children("ul").eq(0), h = o.html();
+ o.addClass("jstree-wholerow-real");
+ if(this.data.wholerow.last_html !== h) {
+ this.data.wholerow.last_html = h;
+ this.get_container().children(".jstree-wholerow").remove();
+ this.get_container().append(
+ o.clone().removeClass("jstree-wholerow-real")
+ .wrapAll("<div class='jstree-wholerow' />").parent()
+ .width(o.parent()[0].scrollWidth)
+ .css("top", (o.height() + ( is_ie7 ? 5 : 0)) * -1 )
+ .find("li[id]").each(function () { this.removeAttribute("id"); }).end()
+ );
+ }
+ }
+ }
+ });
+ $(function() {
+ var css_string = '' +
+ '.jstree .jstree-wholerow-real { position:relative; z-index:1; } ' +
+ '.jstree .jstree-wholerow-real li { cursor:pointer; } ' +
+ '.jstree .jstree-wholerow-real a { border-left-color:transparent !important; border-right-color:transparent !important; } ' +
+ '.jstree .jstree-wholerow { position:relative; z-index:0; height:0; } ' +
+ '.jstree .jstree-wholerow ul, .jstree .jstree-wholerow li { width:100%; } ' +
+ '.jstree .jstree-wholerow, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow li, .jstree .jstree-wholerow a { margin:0 !important; padding:0 !important; } ' +
+ '.jstree .jstree-wholerow, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow li { background:transparent !important; }' +
+ '.jstree .jstree-wholerow ins, .jstree .jstree-wholerow span, .jstree .jstree-wholerow input { display:none !important; }' +
+ '.jstree .jstree-wholerow a, .jstree .jstree-wholerow a:hover { text-indent:-9999px; !important; width:100%; padding:0 !important; border-right-width:0px !important; border-left-width:0px !important; } ' +
+ '.jstree .jstree-wholerow-span { position:absolute; left:0; margin:0px; padding:0; height:18px; border-width:0; padding:0; z-index:0; }';
+ if(is_ff2) {
+ css_string += '' +
+ '.jstree .jstree-wholerow a { display:block; height:18px; margin:0; padding:0; border:0; } ' +
+ '.jstree .jstree-wholerow-real a { border-color:transparent !important; } ';
+ }
+ if(is_ie7 || is_ie6) {
+ css_string += '' +
+ '.jstree .jstree-wholerow, .jstree .jstree-wholerow li, .jstree .jstree-wholerow ul, .jstree .jstree-wholerow a { margin:0; padding:0; line-height:18px; } ' +
+ '.jstree .jstree-wholerow a { display:block; height:18px; line-height:18px; overflow:hidden; } ';
+ }
+ $.vakata.css.add_sheet({ str : css_string, title : "jstree" });
+ });
+})(jQuery);
+//*/
+
+/*
+* jsTree model plugin
+* This plugin gets jstree to use a class model to retrieve data, creating great dynamism
+*/
+(function ($) {
+ var nodeInterface = ["getChildren","getChildrenCount","getAttr","getName","getProps"],
+ validateInterface = function(obj, inter) {
+ var valid = true;
+ obj = obj || {};
+ inter = [].concat(inter);
+ $.each(inter, function (i, v) {
+ if(!$.isFunction(obj[v])) { valid = false; return false; }
+ });
+ return valid;
+ };
+ $.jstree.plugin("model", {
+ __init : function () {
+ if(!this.data.json_data) { throw "jsTree model: jsTree json_data plugin not included."; }
+ this._get_settings().json_data.data = function (n, b) {
+ var obj = (n == -1) ? this._get_settings().model.object : n.data("jstree_model");
+ if(!validateInterface(obj, nodeInterface)) { return b.call(null, false); }
+ if(this._get_settings().model.async) {
+ obj.getChildren($.proxy(function (data) {
+ this.model_done(data, b);
+ }, this));
+ }
+ else {
+ this.model_done(obj.getChildren(), b);
+ }
+ };
+ },
+ defaults : {
+ object : false,
+ id_prefix : false,
+ async : false
+ },
+ _fn : {
+ model_done : function (data, callback) {
+ var ret = [],
+ s = this._get_settings(),
+ _this = this;
+
+ if(!$.isArray(data)) { data = [data]; }
+ $.each(data, function (i, nd) {
+ var r = nd.getProps() || {};
+ r.attr = nd.getAttr() || {};
+ if(nd.getChildrenCount()) { r.state = "closed"; }
+ r.data = nd.getName();
+ if(!$.isArray(r.data)) { r.data = [r.data]; }
+ if(_this.data.types && $.isFunction(nd.getType)) {
+ r.attr[s.types.type_attr] = nd.getType();
+ }
+ if(r.attr.id && s.model.id_prefix) { r.attr.id = s.model.id_prefix + r.attr.id; }
+ if(!r.metadata) { r.metadata = { }; }
+ r.metadata.jstree_model = nd;
+ ret.push(r);
+ });
+ callback.call(null, ret);
+ }
+ }
+ });
+})(jQuery);
+//*/
+
+})(); \ No newline at end of file
diff --git a/mod/developers/vendors/jsTree/themes/apple/bg.jpg b/mod/developers/vendors/jsTree/themes/apple/bg.jpg
new file mode 100644
index 000000000..3aad05d8f
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/apple/bg.jpg
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/apple/d.png b/mod/developers/vendors/jsTree/themes/apple/d.png
new file mode 100644
index 000000000..2463ba6df
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/apple/d.png
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/apple/dot_for_ie.gif b/mod/developers/vendors/jsTree/themes/apple/dot_for_ie.gif
new file mode 100644
index 000000000..c0cc5fda7
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/apple/dot_for_ie.gif
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/apple/style.css b/mod/developers/vendors/jsTree/themes/apple/style.css
new file mode 100644
index 000000000..db7a143e0
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/apple/style.css
@@ -0,0 +1,61 @@
+/*
+ * jsTree apple theme 1.0
+ * Supported features: dots/no-dots, icons/no-icons, focused, loading
+ * Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
+ */
+
+.jstree-apple > ul { background:url("bg.jpg") left top repeat; }
+.jstree-apple li,
+.jstree-apple ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
+.jstree-apple li { background-position:-90px 0; background-repeat:repeat-y; }
+.jstree-apple li.jstree-last { background:transparent; }
+.jstree-apple .jstree-open > ins { background-position:-72px 0; }
+.jstree-apple .jstree-closed > ins { background-position:-54px 0; }
+.jstree-apple .jstree-leaf > ins { background-position:-36px 0; }
+
+.jstree-apple a { border-radius:4px; -moz-border-radius:4px; -webkit-border-radius:4px; text-shadow:1px 1px 1px white; }
+.jstree-apple .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 3px 0 1px; text-shadow:1px 1px 1px silver; }
+.jstree-apple .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 3px 0 1px; }
+.jstree-apple a .jstree-icon { background-position:-56px -20px; }
+.jstree-apple a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
+
+.jstree-apple.jstree-focused { background:white; }
+
+.jstree-apple .jstree-no-dots li,
+.jstree-apple .jstree-no-dots .jstree-leaf > ins { background:transparent; }
+.jstree-apple .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
+.jstree-apple .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
+
+.jstree-apple .jstree-no-icons a .jstree-icon { display:none; }
+
+.jstree-apple .jstree-search { font-style:italic; }
+
+.jstree-apple .jstree-no-icons .jstree-checkbox { display:inline-block; }
+.jstree-apple .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
+.jstree-apple .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
+.jstree-apple .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
+.jstree-apple .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
+.jstree-apple .jstree-checked > a > .checkbox:hover { background-position:-38px -37px; }
+.jstree-apple .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
+.jstree-apple .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
+
+#vakata-dragged.jstree-apple ins { background:transparent !important; }
+#vakata-dragged.jstree-apple .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
+#vakata-dragged.jstree-apple .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
+#jstree-marker.jstree-apple { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
+
+.jstree-apple a.jstree-search { color:aqua; }
+.jstree-apple .jstree-locked a { color:silver; cursor:default; }
+
+#vakata-contextmenu.jstree-apple-context,
+#vakata-contextmenu.jstree-apple-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
+#vakata-contextmenu.jstree-apple-context li { }
+#vakata-contextmenu.jstree-apple-context a { color:black; }
+#vakata-contextmenu.jstree-apple-context a:hover,
+#vakata-contextmenu.jstree-apple-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
+#vakata-contextmenu.jstree-apple-context li.jstree-contextmenu-disabled a,
+#vakata-contextmenu.jstree-apple-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
+#vakata-contextmenu.jstree-apple-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
+#vakata-contextmenu.jstree-apple-context li ul { margin-left:-4px; }
+
+/* TODO: IE6 support - the `>` selectors */ \ No newline at end of file
diff --git a/mod/developers/vendors/jsTree/themes/apple/throbber.gif b/mod/developers/vendors/jsTree/themes/apple/throbber.gif
new file mode 100644
index 000000000..5b33f7e54
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/apple/throbber.gif
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/classic/d.gif b/mod/developers/vendors/jsTree/themes/classic/d.gif
new file mode 100644
index 000000000..6eb0004ce
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/classic/d.gif
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/classic/d.png b/mod/developers/vendors/jsTree/themes/classic/d.png
new file mode 100644
index 000000000..275daeca2
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/classic/d.png
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/classic/dot_for_ie.gif b/mod/developers/vendors/jsTree/themes/classic/dot_for_ie.gif
new file mode 100644
index 000000000..c0cc5fda7
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/classic/dot_for_ie.gif
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/classic/style.css b/mod/developers/vendors/jsTree/themes/classic/style.css
new file mode 100644
index 000000000..492856ddc
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/classic/style.css
@@ -0,0 +1,77 @@
+/*
+ * jsTree classic theme 1.0
+ * Supported features: dots/no-dots, icons/no-icons, focused, loading
+ * Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
+ */
+
+.jstree-classic li,
+.jstree-classic ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
+.jstree-classic li { background-position:-90px 0; background-repeat:repeat-y; }
+.jstree-classic li.jstree-last { background:transparent; }
+.jstree-classic .jstree-open > ins { background-position:-72px 0; }
+.jstree-classic .jstree-closed > ins { background-position:-54px 0; }
+.jstree-classic .jstree-leaf > ins { background-position:-36px 0; }
+
+.jstree-classic .jstree-hovered { background:#e7f4f9; border:1px solid #e7f4f9; padding:0 2px 0 1px; }
+.jstree-classic .jstree-clicked { background:navy; border:1px solid navy; padding:0 2px 0 1px; color:white; }
+.jstree-classic a .jstree-icon { background-position:-56px -19px; }
+.jstree-classic .jstree-open > a .jstree-icon { background-position:-56px -36px; }
+.jstree-classic a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
+
+.jstree-classic.jstree-focused { background:white; }
+
+.jstree-classic .jstree-no-dots li,
+.jstree-classic .jstree-no-dots .jstree-leaf > ins { background:transparent; }
+.jstree-classic .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
+.jstree-classic .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
+
+.jstree-classic .jstree-no-icons a .jstree-icon { display:none; }
+
+.jstree-classic .jstree-search { font-style:italic; }
+
+.jstree-classic .jstree-no-icons .jstree-checkbox { display:inline-block; }
+.jstree-classic .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
+.jstree-classic .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
+.jstree-classic .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
+.jstree-classic .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
+.jstree-classic .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
+.jstree-classic .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
+.jstree-classic .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
+
+#vakata-dragged.jstree-classic ins { background:transparent !important; }
+#vakata-dragged.jstree-classic .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
+#vakata-dragged.jstree-classic .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
+#jstree-marker.jstree-classic { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
+
+.jstree-classic a.jstree-search { color:aqua; }
+.jstree-classic .jstree-locked a { color:silver; cursor:default; }
+
+#vakata-contextmenu.jstree-classic-context,
+#vakata-contextmenu.jstree-classic-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
+#vakata-contextmenu.jstree-classic-context li { }
+#vakata-contextmenu.jstree-classic-context a { color:black; }
+#vakata-contextmenu.jstree-classic-context a:hover,
+#vakata-contextmenu.jstree-classic-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
+#vakata-contextmenu.jstree-classic-context li.jstree-contextmenu-disabled a,
+#vakata-contextmenu.jstree-classic-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
+#vakata-contextmenu.jstree-classic-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
+#vakata-contextmenu.jstree-classic-context li ul { margin-left:-4px; }
+
+/* IE6 BEGIN */
+.jstree-classic li,
+.jstree-classic ins,
+#vakata-dragged.jstree-classic .jstree-invalid,
+#vakata-dragged.jstree-classic .jstree-ok,
+#jstree-marker.jstree-classic { _background-image:url("d.gif"); }
+.jstree-classic .jstree-open ins { _background-position:-72px 0; }
+.jstree-classic .jstree-closed ins { _background-position:-54px 0; }
+.jstree-classic .jstree-leaf ins { _background-position:-36px 0; }
+.jstree-classic .jstree-open a ins.jstree-icon { _background-position:-56px -36px; }
+.jstree-classic .jstree-closed a ins.jstree-icon { _background-position:-56px -19px; }
+.jstree-classic .jstree-leaf a ins.jstree-icon { _background-position:-56px -19px; }
+#vakata-contextmenu.jstree-classic-context ins { _display:none; }
+#vakata-contextmenu.jstree-classic-context li { _zoom:1; }
+.jstree-classic .jstree-undetermined a .jstree-checkbox { _background-position:-20px -19px; }
+.jstree-classic .jstree-checked a .jstree-checkbox { _background-position:-38px -19px; }
+.jstree-classic .jstree-unchecked a .jstree-checkbox { _background-position:-2px -19px; }
+/* IE6 END */ \ No newline at end of file
diff --git a/mod/developers/vendors/jsTree/themes/classic/throbber.gif b/mod/developers/vendors/jsTree/themes/classic/throbber.gif
new file mode 100644
index 000000000..5b33f7e54
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/classic/throbber.gif
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/default-rtl/d.gif b/mod/developers/vendors/jsTree/themes/default-rtl/d.gif
new file mode 100644
index 000000000..d85aba049
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/default-rtl/d.gif
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/default-rtl/d.png b/mod/developers/vendors/jsTree/themes/default-rtl/d.png
new file mode 100644
index 000000000..5179cf64e
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/default-rtl/d.png
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/default-rtl/dots.gif b/mod/developers/vendors/jsTree/themes/default-rtl/dots.gif
new file mode 100644
index 000000000..00433648c
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/default-rtl/dots.gif
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/default-rtl/style.css b/mod/developers/vendors/jsTree/themes/default-rtl/style.css
new file mode 100644
index 000000000..d51aef6cc
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/default-rtl/style.css
@@ -0,0 +1,84 @@
+/*
+ * jsTree default-rtl theme 1.0
+ * Supported features: dots/no-dots, icons/no-icons, focused, loading
+ * Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
+ */
+
+.jstree-default-rtl li,
+.jstree-default-rtl ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
+.jstree-default-rtl li { background-position:-90px 0; background-repeat:repeat-y; }
+.jstree-default-rtl li.jstree-last { background:transparent; }
+.jstree-default-rtl .jstree-open > ins { background-position:-72px 0; }
+.jstree-default-rtl .jstree-closed > ins { background-position:-54px 0; }
+.jstree-default-rtl .jstree-leaf > ins { background-position:-36px 0; }
+
+.jstree-default-rtl .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 2px 0 1px; }
+.jstree-default-rtl .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 2px 0 1px; }
+.jstree-default-rtl a .jstree-icon { background-position:-56px -19px; }
+.jstree-default-rtl a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
+
+.jstree-default-rtl.jstree-focused { background:#ffffee; }
+
+.jstree-default-rtl .jstree-no-dots li,
+.jstree-default-rtl .jstree-no-dots .jstree-leaf > ins { background:transparent; }
+.jstree-default-rtl .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
+.jstree-default-rtl .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
+
+.jstree-default-rtl .jstree-no-icons a .jstree-icon { display:none; }
+
+.jstree-default-rtl .jstree-search { font-style:italic; }
+
+.jstree-default-rtl .jstree-no-icons .jstree-checkbox { display:inline-block; }
+.jstree-default-rtl .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
+.jstree-default-rtl .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
+.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
+.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
+.jstree-default-rtl .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
+.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
+.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
+
+#vakata-dragged.jstree-default-rtl ins { background:transparent !important; }
+#vakata-dragged.jstree-default-rtl .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
+#vakata-dragged.jstree-default-rtl .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
+#jstree-marker.jstree-default-rtl { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
+
+.jstree-default-rtl a.jstree-search { color:aqua; }
+.jstree-default-rtl .jstree-locked a { color:silver; cursor:default; }
+
+#vakata-contextmenu.jstree-default-rtl-context,
+#vakata-contextmenu.jstree-default-rtl-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
+#vakata-contextmenu.jstree-default-rtl-context li { }
+#vakata-contextmenu.jstree-default-rtl-context a { color:black; }
+#vakata-contextmenu.jstree-default-rtl-context a:hover,
+#vakata-contextmenu.jstree-default-rtl-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
+#vakata-contextmenu.jstree-default-rtl-context li.jstree-contextmenu-disabled a,
+#vakata-contextmenu.jstree-default-rtl-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
+#vakata-contextmenu.jstree-default-rtl-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
+#vakata-contextmenu.jstree-default-rtl-context li ul { margin-left:-4px; }
+
+/* IE6 BEGIN */
+.jstree-default-rtl li,
+.jstree-default-rtl ins,
+#vakata-dragged.jstree-default-rtl .jstree-invalid,
+#vakata-dragged.jstree-default-rtl .jstree-ok,
+#jstree-marker.jstree-default-rtl { _background-image:url("d.gif"); }
+.jstree-default-rtl .jstree-open ins { _background-position:-72px 0; }
+.jstree-default-rtl .jstree-closed ins { _background-position:-54px 0; }
+.jstree-default-rtl .jstree-leaf ins { _background-position:-36px 0; }
+.jstree-default-rtl a ins.jstree-icon { _background-position:-56px -19px; }
+#vakata-contextmenu.jstree-default-rtl-context ins { _display:none; }
+#vakata-contextmenu.jstree-default-rtl-context li { _zoom:1; }
+.jstree-default-rtl .jstree-undetermined a .jstree-checkbox { _background-position:-18px -19px; }
+.jstree-default-rtl .jstree-checked a .jstree-checkbox { _background-position:-36px -19px; }
+.jstree-default-rtl .jstree-unchecked a .jstree-checkbox { _background-position:0px -19px; }
+/* IE6 END */
+
+/* RTL part */
+.jstree-default-rtl .jstree-hovered, .jstree-default-rtl .jstree-clicked { padding:0 1px 0 2px; }
+.jstree-default-rtl li { background-image:url("dots.gif"); background-position: 100% 0px; }
+.jstree-default-rtl .jstree-checked > a > .jstree-checkbox { background-position:-36px -19px; margin-left:2px; }
+.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox { background-position:0px -19px; margin-left:2px; }
+.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox { background-position:-18px -19px; margin-left:2px; }
+.jstree-default-rtl .jstree-checked > a > .jstree-checkbox:hover { background-position:-36px -37px; }
+.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox:hover { background-position:0px -37px; }
+.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-18px -37px; } \ No newline at end of file
diff --git a/mod/developers/vendors/jsTree/themes/default-rtl/throbber.gif b/mod/developers/vendors/jsTree/themes/default-rtl/throbber.gif
new file mode 100644
index 000000000..5b33f7e54
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/default-rtl/throbber.gif
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/default/d.gif b/mod/developers/vendors/jsTree/themes/default/d.gif
new file mode 100644
index 000000000..0e958d387
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/default/d.gif
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/default/d.png b/mod/developers/vendors/jsTree/themes/default/d.png
new file mode 100644
index 000000000..8540175a0
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/default/d.png
Binary files differ
diff --git a/mod/developers/vendors/jsTree/themes/default/style.css b/mod/developers/vendors/jsTree/themes/default/style.css
new file mode 100644
index 000000000..238ce1a1c
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/default/style.css
@@ -0,0 +1,74 @@
+/*
+ * jsTree default theme 1.0
+ * Supported features: dots/no-dots, icons/no-icons, focused, loading
+ * Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
+ */
+
+.jstree-default li,
+.jstree-default ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
+.jstree-default li { background-position:-90px 0; background-repeat:repeat-y; }
+.jstree-default li.jstree-last { background:transparent; }
+.jstree-default .jstree-open > ins { background-position:-72px 0; }
+.jstree-default .jstree-closed > ins { background-position:-54px 0; }
+.jstree-default .jstree-leaf > ins { background-position:-36px 0; }
+
+.jstree-default .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 2px 0 1px; }
+.jstree-default .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 2px 0 1px; }
+.jstree-default a .jstree-icon { background-position:-56px -19px; }
+.jstree-default a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
+
+.jstree-default.jstree-focused { background:#ffffee; }
+
+.jstree-default .jstree-no-dots li,
+.jstree-default .jstree-no-dots .jstree-leaf > ins { background:transparent; }
+.jstree-default .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
+.jstree-default .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
+
+.jstree-default .jstree-no-icons a .jstree-icon { display:none; }
+
+.jstree-default .jstree-search { font-style:italic; }
+
+.jstree-default .jstree-no-icons .jstree-checkbox { display:inline-block; }
+.jstree-default .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
+.jstree-default .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
+.jstree-default .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
+.jstree-default .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
+.jstree-default .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
+.jstree-default .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
+.jstree-default .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
+
+#vakata-dragged.jstree-default ins { background:transparent !important; }
+#vakata-dragged.jstree-default .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
+#vakata-dragged.jstree-default .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
+#jstree-marker.jstree-default { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
+
+.jstree-default a.jstree-search { color:aqua; }
+.jstree-default .jstree-locked a { color:silver; cursor:default; }
+
+#vakata-contextmenu.jstree-default-context,
+#vakata-contextmenu.jstree-default-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
+#vakata-contextmenu.jstree-default-context li { }
+#vakata-contextmenu.jstree-default-context a { color:black; }
+#vakata-contextmenu.jstree-default-context a:hover,
+#vakata-contextmenu.jstree-default-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
+#vakata-contextmenu.jstree-default-context li.jstree-contextmenu-disabled a,
+#vakata-contextmenu.jstree-default-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
+#vakata-contextmenu.jstree-default-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
+#vakata-contextmenu.jstree-default-context li ul { margin-left:-4px; }
+
+/* IE6 BEGIN */
+.jstree-default li,
+.jstree-default ins,
+#vakata-dragged.jstree-default .jstree-invalid,
+#vakata-dragged.jstree-default .jstree-ok,
+#jstree-marker.jstree-default { _background-image:url("d.gif"); }
+.jstree-default .jstree-open ins { _background-position:-72px 0; }
+.jstree-default .jstree-closed ins { _background-position:-54px 0; }
+.jstree-default .jstree-leaf ins { _background-position:-36px 0; }
+.jstree-default a ins.jstree-icon { _background-position:-56px -19px; }
+#vakata-contextmenu.jstree-default-context ins { _display:none; }
+#vakata-contextmenu.jstree-default-context li { _zoom:1; }
+.jstree-default .jstree-undetermined a .jstree-checkbox { _background-position:-20px -19px; }
+.jstree-default .jstree-checked a .jstree-checkbox { _background-position:-38px -19px; }
+.jstree-default .jstree-unchecked a .jstree-checkbox { _background-position:-2px -19px; }
+/* IE6 END */ \ No newline at end of file
diff --git a/mod/developers/vendors/jsTree/themes/default/throbber.gif b/mod/developers/vendors/jsTree/themes/default/throbber.gif
new file mode 100644
index 000000000..5b33f7e54
--- /dev/null
+++ b/mod/developers/vendors/jsTree/themes/default/throbber.gif
Binary files differ
diff --git a/mod/developers/views/default/admin/develop_tools/inspect.php b/mod/developers/views/default/admin/develop_tools/inspect.php
new file mode 100644
index 000000000..cfa3de2ea
--- /dev/null
+++ b/mod/developers/views/default/admin/develop_tools/inspect.php
@@ -0,0 +1,14 @@
+<?php
+/**
+* Inspect View
+*
+* Inspect global variables of Elgg
+*/
+
+elgg_load_js('jquery.jstree');
+elgg_load_css('jquery.jstree');
+
+echo elgg_view_form('developers/inspect', array('class' => 'developers-form-inspect'));
+
+echo '<div id="developers-inspect-results"></div>';
+echo elgg_view('graphics/ajax_loader', array('id' => 'developers-ajax-loader'));
diff --git a/mod/developers/views/default/admin/develop_tools/preview.php b/mod/developers/views/default/admin/develop_tools/preview.php
new file mode 100644
index 000000000..920047d98
--- /dev/null
+++ b/mod/developers/views/default/admin/develop_tools/preview.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * CSS Preview
+ */
+
+$url = elgg_get_site_url() . 'theme_preview';
+?>
+<iframe id="developers-iframe" src="<?php echo $url; ?>"></iframe> \ No newline at end of file
diff --git a/mod/developers/views/default/admin/develop_tools/unit_tests.php b/mod/developers/views/default/admin/develop_tools/unit_tests.php
new file mode 100644
index 000000000..81658e88b
--- /dev/null
+++ b/mod/developers/views/default/admin/develop_tools/unit_tests.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg unit and integration tests
+ *
+ */
+
+echo '<p>' . elgg_echo('developers:unit_tests:description') . '</p>';
+echo '<p><strong>' . elgg_echo('developers:unit_tests:warning') . '</strong></p>';
+
+// create a button to run tests
+$params = array(
+ 'text' => elgg_echo('developers:unit_tests:run'),
+ 'href' => 'engine/tests/suite.php',
+ 'class' => 'elgg-button elgg-button-submit',
+ 'is_trusted' => true,
+);
+echo '<p>' . elgg_view('output/url', $params) . '</p>';
diff --git a/mod/developers/views/default/admin/developers/settings.php b/mod/developers/views/default/admin/developers/settings.php
new file mode 100644
index 000000000..459cbabad
--- /dev/null
+++ b/mod/developers/views/default/admin/developers/settings.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Developer settings
+ */
+
+$data = array(
+ 'simple_cache' => array(
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'checked' => elgg_get_config('simplecache_enabled') == 1,
+ ),
+
+ 'system_cache' => array(
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'checked' => elgg_get_config('system_cache_enabled') == 1,
+ ),
+
+ 'display_errors' => array(
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'checked' => elgg_get_plugin_setting('display_errors', 'developers') == 1,
+ ),
+
+ 'debug_level' => array(
+ 'type' => 'dropdown',
+ 'value' => elgg_get_config('debug'),
+ 'options_values' => array(
+ false => elgg_echo('developers:debug:off'),
+ 'ERROR' => elgg_echo('developers:debug:error'),
+ 'WARNING' => elgg_echo('developers:debug:warning'),
+ 'NOTICE' => elgg_echo('developers:debug:notice'),
+ ),
+ ),
+
+ 'screen_log' => array(
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'checked' => elgg_get_plugin_setting('screen_log', 'developers') == 1,
+ ),
+
+ 'show_strings' => array(
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'checked' => elgg_get_plugin_setting('show_strings', 'developers') == 1,
+ ),
+
+ 'wrap_views' => array(
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'checked' => elgg_get_plugin_setting('wrap_views', 'developers') == 1,
+ ),
+
+ 'log_events' => array(
+ 'type' => 'checkbox',
+ 'value' => 1,
+ 'checked' => elgg_get_plugin_setting('log_events', 'developers') == 1,
+ ),
+);
+
+$form_vars = array('id' => 'developer-settings-form', 'class' => 'elgg-form-settings');
+$body_vars = array('data' => $data);
+echo elgg_view_form('developers/settings', $form_vars, $body_vars);
diff --git a/mod/developers/views/default/developers/css.php b/mod/developers/views/default/developers/css.php
new file mode 100644
index 000000000..b4f59fdec
--- /dev/null
+++ b/mod/developers/views/default/developers/css.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Admin CSS for Elgg Developers plugin
+ */
+?>
+/*** Elgg Developer Tools ***/
+#developers-iframe {
+ width: 100%;
+ height: 600px;
+ border: none;
+}
+#developer-settings-form label {
+ margin-right: 5px;
+}
+.elgg-page .jstree-default.jstree-focused {
+ background-color: transparent;
+}
+.developers-log {
+ background-color: #EBF5FF;
+ border: 1px solid #999;
+ color: #666;
+ padding: 20px;
+}
+
+.developers-content-thin {
+ max-width: 600px;
+} \ No newline at end of file
diff --git a/mod/developers/views/default/developers/ipsum.php b/mod/developers/views/default/developers/ipsum.php
new file mode 100644
index 000000000..dd9bb278f
--- /dev/null
+++ b/mod/developers/views/default/developers/ipsum.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Lorem ipsum text
+ */
+?>
+Sed scelerisque sagittis lorem. Phasellus sodales.
+Nulla urna justo, vehicula in, suscipit nec, molestie sed, tellus. \ No newline at end of file
diff --git a/mod/developers/views/default/developers/log.php b/mod/developers/views/default/developers/log.php
new file mode 100644
index 000000000..98120ca98
--- /dev/null
+++ b/mod/developers/views/default/developers/log.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Logging information
+ */
+
+$cache = elgg_get_config('log_cache');
+$items = $cache->get();
+
+echo '<div class="developers-log">';
+if ($items) {
+ foreach ($items as $item) {
+ echo '<pre>';
+ print_r($item);
+ echo '</pre>';
+ }
+}
+
+echo '</div>'; \ No newline at end of file
diff --git a/mod/developers/views/default/developers/tree.php b/mod/developers/views/default/developers/tree.php
new file mode 100644
index 000000000..a8e47333b
--- /dev/null
+++ b/mod/developers/views/default/developers/tree.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Displays a tree for inspection
+ *
+ * @uses $vars['tree']
+ */
+
+echo "<ul>";
+foreach ($vars['tree'] as $key => $arr) {
+ echo "<li><a>$key</a>";
+ echo "<ul>";
+ foreach ($arr as $value) {
+ echo "<li><a>$value</a></li>";
+ }
+ echo "</ul>";
+ echo "</li>";
+}
+echo "</ul>";
diff --git a/mod/developers/views/default/forms/developers/inspect.php b/mod/developers/views/default/forms/developers/inspect.php
new file mode 100644
index 000000000..a1b433fea
--- /dev/null
+++ b/mod/developers/views/default/forms/developers/inspect.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Configuration inspection form
+ */
+
+echo '<div>';
+echo '<p>' . elgg_echo('developers:inspect:help') . '</p>';
+
+echo elgg_view('input/dropdown', array(
+ 'name' => 'inspect_type',
+ 'options_values' => array(
+ 'Actions' => 'Actions',
+ 'Events' => 'Events',
+ 'Plugin Hooks' => 'Plugin Hooks',
+ 'Simple Cache' => 'Simple Cache',
+ 'Views' => 'Views',
+ 'Web Services' => 'Web Services',
+ 'Widgets' => 'Widgets',
+ ),
+));
+
+echo elgg_view('input/submit', array('value' => elgg_echo('submit')));
+echo '</div>';
diff --git a/mod/developers/views/default/forms/developers/settings.php b/mod/developers/views/default/forms/developers/settings.php
new file mode 100644
index 000000000..78e1372de
--- /dev/null
+++ b/mod/developers/views/default/forms/developers/settings.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Settings form body
+ *
+ * @uses $vars['values']
+ */
+
+echo '<p>' . elgg_echo('elgg_dev_tools:settings:explanation') . '</p>';
+
+foreach ($vars['data'] as $name => $info) {
+ echo '<div>';
+ if ($info['type'] == 'checkbox') {
+ echo '<label>';
+ echo elgg_view("input/checkbox", array(
+ 'name' => $name,
+ 'value' => $info['value'],
+ 'checked' => $info['checked'],
+ ));
+ echo elgg_echo("developers:label:$name") . '</label>';
+ echo '<span class="elgg-text-help">' . elgg_echo("developers:help:$name") . '</span>';
+ } else {
+ echo '<label>' . elgg_echo("developers:label:$name");
+ echo elgg_view("input/{$info['type']}", array(
+ 'name' => $name,
+ 'value' => $info['value'],
+ 'options_values' => $info['options_values'],
+ ));
+ echo '</label>';
+ echo '<span class="elgg-text-help">' . elgg_echo("developers:help:$name") . '</span>';
+ }
+ echo '</div>';
+}
+
+echo '<div class="elgg-foot">';
+echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+echo '</div>';
diff --git a/mod/developers/views/default/js/developers/developers.php b/mod/developers/views/default/js/developers/developers.php
new file mode 100644
index 000000000..6e82295aa
--- /dev/null
+++ b/mod/developers/views/default/js/developers/developers.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Elgg developers tool JavaScript
+ */
+?>
+
+elgg.provide('elgg.dev');
+
+elgg.dev.init = function() {
+ $('.developers-form-inspect').live('submit', elgg.dev.inspectSubmit);
+};
+
+/**
+ * Submit the inspect form through Ajax
+ *
+ * Requires the jQuery Form Plugin.
+ *
+ * @param {Object} event
+ */
+elgg.dev.inspectSubmit = function(event) {
+
+ $("#developers-inspect-results").hide();
+ $("#developers-ajax-loader").show();
+
+ $(this).ajaxSubmit({
+ dataType : 'json',
+ success : function(response) {
+ if (response) {
+ $("#developers-inspect-results").html(response.output);
+ $("#developers-inspect-results").jstree({
+ "plugins" : [ "themes", "html_data" ],
+ "themes" : {"icons" : false}
+ }).bind("loaded.jstree", function() {
+ $("#developers-inspect-results").fadeIn();
+ $("#developers-ajax-loader").hide();
+ });
+ }
+ }
+ });
+
+ event.preventDefault();
+};
+
+elgg.register_hook_handler('init', 'system', elgg.dev.init); \ No newline at end of file
diff --git a/mod/developers/views/default/page/theme_preview.php b/mod/developers/views/default/page/theme_preview.php
new file mode 100644
index 000000000..ee2bc0c0f
--- /dev/null
+++ b/mod/developers/views/default/page/theme_preview.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Page shell for theme preview
+ */
+
+$elgg = elgg_get_simplecache_url('css', 'elgg');
+$ie_url = elgg_get_simplecache_url('css', 'ie');
+$ie6_url = elgg_get_simplecache_url('css', 'ie6');
+
+// Set the content type
+header("Content-type: text/html; charset=UTF-8");
+
+?>
+<!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" xml:lang="en" lang="en">
+<head>
+ <?php echo elgg_view('page/elements/head', $vars); ?>
+</head>
+<body>
+<div class="elgg-page elgg-page-default">
+ <div class="elgg-page-messages">
+ <ul class="elgg-system-messages">
+ <li class="hidden"></li>
+ </ul>
+ </div>
+ <div class="elgg-page-header">
+ <div class="elgg-inner">
+ <h1 class="elgg-heading-site">Theme Sandbox</h1>
+ <?php
+ if (get_input("site_menu", false)) {
+ echo elgg_view_menu('site');
+ }
+ ?>
+ </div>
+ </div>
+ <div class="elgg-page-body">
+ <div class="elgg-inner">
+ <?php echo elgg_view('page/elements/body', $vars); ?>
+ </div>
+ </div>
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/buttons.php b/mod/developers/views/default/theme_preview/buttons.php
new file mode 100644
index 000000000..718d88617
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/buttons.php
@@ -0,0 +1,41 @@
+<table class="elgg-table">
+ <thead>
+ <tr>
+ <th></th>
+ <th>Default</th>
+ <th>Disabled (.elgg-state-disabled)</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <th>Base (.elgg-button)</th>
+ <td><a href="#" class="elgg-button">anchor</a></td>
+ <td><a href="#" class="elgg-button elgg-state-disabled">anchor</a></td>
+ </tr>
+ <tr>
+ <th>Action (.elgg-button-action)</th>
+ <td><a href="#" class="elgg-button elgg-button-action">anchor</a></td>
+ <td><a href="#" class="elgg-button elgg-button-action elgg-state-disabled">anchor</a></td>
+ </tr>
+ <tr>
+ <th>Cancel (.elgg-button-cancel)</th>
+ <td><a href="#" class="elgg-button elgg-button-cancel">anchor</a></td>
+ <td><a href="#" class="elgg-button elgg-button-cancel elgg-state-disabled">anchor</a></td>
+ </tr>
+ <tr>
+ <th>Submit (.elgg-button-submit)</th>
+ <td><a href="#" class="elgg-button elgg-button-submit">anchor</a></td>
+ <td><a href="#" class="elgg-button elgg-button-submit elgg-state-disabled">anchor</a></td>
+ </tr>
+ <tr>
+ <th>Special (.elgg-button-special)</th>
+ <td><a href="#" class="elgg-button elgg-button-special">anchor</a></td>
+ <td><a href="#" class="elgg-button elgg-button-special elgg-state-disabled">anchor</a></td>
+ </tr>
+ <tr>
+ <th>Delete (.elgg-button-delete)</th>
+ <td><a href="#" class="elgg-button elgg-button-delete">anchor</a></td>
+ <td><a href="#" class="elgg-button elgg-button-delete elgg-state-disabled">anchor</a></td>
+ </tr>
+ </tbody>
+</table> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/components.php b/mod/developers/views/default/theme_preview/components.php
new file mode 100644
index 000000000..50c155b14
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/components.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * CSS Objects: list, module, image_block, table, messages
+ */
+
+$body = elgg_view('theme_preview/components/image_block');
+echo elgg_view_module('info', 'Image Block (.elgg-image-block)', $body);
+
+$body = elgg_view('theme_preview/components/list');
+echo elgg_view_module('info', 'List (.elgg-list)', $body);
+
+$body = elgg_view('theme_preview/components/table', array('class' => 'elgg-table'));
+echo elgg_view_module('info', 'Table (.elgg-table)', $body);
+
+$body = elgg_view('theme_preview/components/table', array('class' => 'elgg-table-alt'));
+echo elgg_view_module('info', 'Table Alternate (.elgg-table-alt)', $body);
+
+$body = elgg_view('theme_preview/components/tagcloud');
+echo elgg_view_module('info', 'Tag cloud (.elgg-tagcloud)', $body);
+
+$body = elgg_view('theme_preview/components/tags');
+echo elgg_view_module('info', 'Tags (.elgg-tag)', $body);
+
+$body = elgg_view('theme_preview/components/messages');
+echo elgg_view_module('info', 'Messages (.elgg-message)', $body); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/components/image_block.php b/mod/developers/views/default/theme_preview/components/image_block.php
new file mode 100644
index 000000000..0bb16428b
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/components/image_block.php
@@ -0,0 +1,6 @@
+<?php
+$ipsum = elgg_view('developers/ipsum');
+
+$user = new ElggUser();
+$image = elgg_view_entity_icon($user, 'small');
+echo elgg_view_image_block($image, "$ipsum $ipsum $ipsum $ipsum $ipsum $ipsum $ipsum");
diff --git a/mod/developers/views/default/theme_preview/components/list.php b/mod/developers/views/default/theme_preview/components/list.php
new file mode 100644
index 000000000..8096bda04
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/components/list.php
@@ -0,0 +1,19 @@
+<?php
+
+$obj1 = new ElggObject();
+$obj1->title = "Object 1";
+$obj1->description = $ipsum;
+
+$obj2 = new ElggObject();
+$obj2->title = "Object 2";
+$obj2->description = $ipsum;
+
+$obj3 = new ElggObject();
+$obj3->title = "Object 3";
+$obj3->description = $ipsum;
+
+$obj4 = new ElggObject();
+$obj4->title = "Object 4";
+$obj4->description = $ipsum;
+
+echo elgg_view('page/components/list', array('items' => array($obj1, $obj2, $obj3, $obj4)));
diff --git a/mod/developers/views/default/theme_preview/components/messages.php b/mod/developers/views/default/theme_preview/components/messages.php
new file mode 100644
index 000000000..ac4d2bfd7
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/components/messages.php
@@ -0,0 +1,5 @@
+<ul>
+ <li class="elgg-message elgg-state-success mas">Success message (.elgg-state-success)</li>
+ <li class="elgg-message elgg-state-error mas">Error message (.elgg-state-error)</li>
+ <li class="elgg-message elgg-state-notice mas">Notice message (.elgg-state-notice)</li>
+</ul>
diff --git a/mod/developers/views/default/theme_preview/components/table.php b/mod/developers/views/default/theme_preview/components/table.php
new file mode 100644
index 000000000..8b8b13e76
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/components/table.php
@@ -0,0 +1,12 @@
+<table class="<?php echo $vars['class']; ?>">
+<?php
+ echo "<thead><tr><th>column 1</th><th>column 2</th></tr></thead>";
+ for ($i = 1; $i < 5; $i++) {
+ echo '<tr>';
+ for ($j = 1; $j < 3; $j++) {
+ echo "<td>value $j</td>";
+ }
+ echo '</tr>';
+ }
+?>
+</table> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/components/tagcloud.php b/mod/developers/views/default/theme_preview/components/tagcloud.php
new file mode 100644
index 000000000..3cbf34745
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/components/tagcloud.php
@@ -0,0 +1,17 @@
+<?php
+
+$tags = array(
+ (object)array('tag' => 'php', 'total' => 2),
+ (object)array('tag' => 'elgg', 'total' => 8),
+ (object)array('tag' => 'javascript', 'total' => 3),
+ (object)array('tag' => 'css', 'total' => 4),
+ (object)array('tag' => 'html', 'total' => 1),
+ (object)array('tag' => 'framework', 'total' => 4),
+ (object)array('tag' => 'social', 'total' => 3),
+ (object)array('tag' => 'web', 'total' => 7),
+ (object)array('tag' => 'code', 'total' => 2),
+);
+
+echo '<div style="width: 200px;">';
+echo elgg_view('output/tagcloud', array('value' => $tags));
+echo '</div>';
diff --git a/mod/developers/views/default/theme_preview/components/tags.php b/mod/developers/views/default/theme_preview/components/tags.php
new file mode 100644
index 000000000..04df9511a
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/components/tags.php
@@ -0,0 +1,5 @@
+<?php
+
+echo elgg_view('output/tags', array(
+ 'value' => array('one', 'two', 'three', 'four', 'cinco'),
+));
diff --git a/mod/developers/views/default/theme_preview/forms.php b/mod/developers/views/default/theme_preview/forms.php
new file mode 100644
index 000000000..ffb77f3a9
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/forms.php
@@ -0,0 +1,138 @@
+<form action="#">
+ <fieldset>
+ <legend>Fieldset Legend</legend>
+ <div>
+ <label for="f1">Text input (.elgg-input-text):</label>
+ <?php echo elgg_view('input/text', array(
+ 'name' => 'f1',
+ 'id' => 'f1',
+ 'value' => 'input text',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f2">Password input (.elgg-input-password):</label>
+ <?php echo elgg_view('input/password', array(
+ 'name' => 'f2',
+ 'id' => 'f2',
+ 'value' => 'password',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f3">Radio input (.elgg-input-radios):</label><br />
+ <?php echo elgg_view('input/radio', array(
+ 'name' => 'f3',
+ 'id' => 'f3',
+ 'options' => array('a (.elgg-input-radio)' => 1, 'b (.elgg-input-radio)' => 2),
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f4">Checkboxes input (.elgg-input-checkboxes):</label><br />
+ <?php echo elgg_view('input/checkboxes', array(
+ 'name' => 'f4',
+ 'id' => 'f4',
+ 'options' => array('a (.elgg-input-checkbox)' => 1, 'b (.elgg-input-checkbox)' => 2),
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f5">Dropdown input (.elgg-input-dropdown):</label><br />
+ <?php echo elgg_view('input/dropdown', array(
+ 'name' => 'f5',
+ 'id' => 'f5',
+ 'options' => array('option 1', 'option 2'),
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f6">Access input (.elgg-input-access):</label><br />
+ <?php echo elgg_view('input/access', array(
+ 'name' => 'f6',
+ 'id' => 'f6',
+ 'value' => ACCESS_PUBLIC,
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f7">File input (.elgg-input-file):</label>
+ <?php echo elgg_view('input/file', array(
+ 'name' => 'f7',
+ 'id' => 'f7',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f8">URL input (.elgg-input-url):</label>
+ <?php echo elgg_view('input/url', array(
+ 'name' => 'f8',
+ 'id' => 'f8',
+ 'value' => 'http://elgg.org/',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f9">Tags input (.elgg-input-tags):</label>
+ <?php echo elgg_view('input/tags', array(
+ 'name' => 'f9',
+ 'id' => 'f9',
+ 'value' => 'one, two, three',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f10">Email input (.elgg-input-email):</label>
+ <?php echo elgg_view('input/email', array(
+ 'name' => 'f10',
+ 'id' => 'f10',
+ 'value' => 'noone@elgg.org',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f11">Autocomplete input (.elgg-input-autocomplete):</label>
+ <?php echo elgg_view('input/autocomplete', array(
+ 'name' => 'f11',
+ 'id' => 'f11',
+ 'match_on' => 'users',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f12">Date input (.elgg-input-date):</label>
+ <?php echo elgg_view('input/date', array(
+ 'name' => 'f12',
+ 'id' => 'f12',
+ 'value' => '2012-12-31',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f13">User picker input (.elgg-user-picker):</label>
+ <?php echo elgg_view('input/userpicker', array(
+ 'name' => 'f13',
+ 'id' => 'f13',
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f15">Plain textarea input (.elgg-input-plaintext):</label>
+ <?php echo elgg_view('input/plaintext', array(
+ 'name' => 'f15',
+ 'id' => 'f15',
+ 'value' => $ipsum,
+ ));
+ ?>
+ </div>
+ <div>
+ <label for="f14">Long textarea input (.elgg-input-longtext):</label>
+ <?php echo elgg_view('input/longtext', array(
+ 'name' => 'f14',
+ 'id' => 'f14',
+ 'value' => $ipsum,
+ ));
+ ?>
+ </div>
+ </fieldset>
+</form> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/general.php b/mod/developers/views/default/theme_preview/general.php
new file mode 100644
index 000000000..7d98d4443
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/general.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Quick introduction to the theme sandbox
+ *
+ * @todo links to resources?
+ */
+?>
+
+<p>This theme sandbox provides a visual catalog for many of the theming elements
+ that Elgg uses. The primary css selector is listed with each theme element.
+ The preview is divided into sections that are listed in the page menu
+ (usually in the sidebar but depends on your current theme).
+</p>
+<?php
+$simple_cache = elgg_get_config('simplecache_enabled');
+$system_cache = elgg_get_config('system_cache_enabled');
+
+if ($simple_cache || $system_cache) {
+ $advanced = elgg_view('output/url', array(
+ 'text' => 'Advanced Settings',
+ 'href' => 'admin/settings/advanced',
+ 'is_trusted' => true
+ ));
+ $developers = elgg_view('output/url', array(
+ 'text' => 'Developers\' Plugin Settings',
+ 'href' => 'admin/developers/settings',
+ 'is_trusted' => true
+ ));
+
+ $body = "Caches are enabled. Changes you make to CSS and views might not appear. It is
+ always recommended to disable caches while developing themes and plugins. To
+ disable caches, visit the $advanced or $developers pages.";
+
+ echo elgg_view_module('info', 'Warning', $body);
+}
+?>
+<p>
+<?php
+ echo elgg_view('output/url', array(
+ 'text' => elgg_echo('theme_preview:breakout'),
+ 'href' => current_page_url(),
+ 'target' => '_parent',
+ 'is_trusted' => true,
+ ));
+?>
+</p>
diff --git a/mod/developers/views/default/theme_preview/grid.php b/mod/developers/views/default/theme_preview/grid.php
new file mode 100644
index 000000000..0c4cbb251
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/grid.php
@@ -0,0 +1,114 @@
+<?php
+/**
+ * Grid CSS
+ */
+
+?>
+<div class="elgg-grid">
+ <div class="elgg-col elgg-col-1of1"><div class="elgg-inner"><h3>1/1</h3></div></div>
+</div>
+<div class="elgg-grid">
+ <div class="elgg-col elgg-col-1of2"><div class="elgg-inner"><h3>1/2</h3></div></div>
+ <div class="elgg-col elgg-col-1of2"><div class="elgg-inner"><h3>1/2</h3></div></div>
+</div>
+<div class="elgg-grid">
+ <div class="elgg-col elgg-col-1of3"><div class="elgg-inner"><h3>1/3</h3></div></div>
+ <div class="elgg-col elgg-col-2of3"><div class="elgg-inner"><h3>2/3</h3></div></div>
+</div>
+<div class="elgg-grid">
+ <div class="elgg-col elgg-col-3of4"><div class="elgg-inner"><h3>3/4</h3></div></div>
+ <div class="elgg-col elgg-col-1of4"><div class="elgg-inner"><h3>1/4</h3></div></div>
+</div>
+<div class="elgg-grid">
+ <div class="elgg-col elgg-col-1of5"><div class="elgg-inner"><h3>1/5</h3></div></div>
+ <div class="elgg-col elgg-col-4of5"><div class="elgg-inner"><h3>4/5</h3></div></div>
+</div>
+<div class="elgg-grid">
+ <div class="elgg-col elgg-col-3of5"><div class="elgg-inner"><h3>3/5</h3></div></div>
+ <div class="elgg-col elgg-col-2of5"><div class="elgg-inner"><h3>2/5</h3></div></div>
+</div>
+<div class="elgg-grid">
+ <div class="elgg-col elgg-col-1of6"><div class="elgg-inner"><h3>1/6</h3></div></div>
+ <div class="elgg-col elgg-col-5of6"><div class="elgg-inner"><h3>5/6</h3></div></div>
+</div>
+<div class="elgg-grid">
+ <style>
+ h3 { text-align: center; }
+ .elgg-col > .elgg-inner {
+ border: 1px solid #cccccc;
+ border-radius: 5px;
+ padding: 5px;
+ }
+ </style>
+ <div class="elgg-col elgg-col-1of5">
+ <div class="elgg-inner">
+ <h3>1/5</h3>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </div>
+ </div>
+ <div class="elgg-col elgg-col-3of5">
+ <div class="elgg-inner clearfix">
+ <h3>3/5</h3>
+ <div class="elgg-grid">
+ <div class="elgg-col elgg-col-1of2">
+ <div class="elgg-inner">
+ <h3>1/2</h3>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </div>
+ </div>
+ <div class="elgg-col elgg-col-1of2 elgg-col-last">
+ <div class="elgg-inner">
+ <h3>1/2</h3>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </div>
+ </div>
+ </div>
+ <div class="elgg-grid">
+ <div class="elgg-col elgg-col-1of3">
+ <div class="elgg-inner">
+ <h3>1/3</h3>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </div>
+ </div>
+ <div class="elgg-col elgg-col-2of3 elgg-col-last">
+ <div class="elgg-inner">
+ <h3>2/3</h3>
+ <div class="elgg-grid">
+ <div class="elgg-col elgg-col-1of2">
+ <div class="elgg-inner">
+ <h3>1/2</h3>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </div>
+ </div>
+ <div class="elgg-col elgg-col-1of2 elgg-col-last">
+ <div class="elgg-inner">
+ <h3>1/2</h3>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </div>
+ </div>
+ </div>
+ <div class="elgg-grid">
+ <div class="elgg-col elgg-col-1of1">
+ <div class="elgg-inner">
+ <h3>1</h3>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="elgg-col elgg-col-1of5 elgg-col-last">
+ <div class="elgg-inner">
+ <h3>1/5</h3>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
+ </div>
+ </div>
+</div>
diff --git a/mod/developers/views/default/theme_preview/icons.php b/mod/developers/views/default/theme_preview/icons.php
new file mode 100644
index 000000000..e1684c110
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/icons.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Icons CSS
+ */
+
+echo elgg_view_module('info', 'Icon Sprites (.elgg-icon)', elgg_view('theme_preview/icons/sprites'));
+
+echo elgg_view_module('info', 'Ajax Loader (.elgg-ajax-loader)', elgg_view('theme_preview/icons/loader'));
+
+echo elgg_view_module('info', 'Avatars (.elgg-avatar)', elgg_view('theme_preview/icons/avatars'));
diff --git a/mod/developers/views/default/theme_preview/icons/avatars.php b/mod/developers/views/default/theme_preview/icons/avatars.php
new file mode 100644
index 000000000..f50a6b70d
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/icons/avatars.php
@@ -0,0 +1,36 @@
+<?php
+ $user = new ElggUser();
+ $group = new ElggGroup();
+
+ $sizes = array('large', 'medium', 'small', 'tiny');
+?>
+<table class="elgg-table">
+ <tr>
+ <th></th>
+ <?php
+ foreach ($sizes as $size) {
+ echo "<th>$size</th>";
+ }
+ ?>
+ </tr>
+ <tr>
+ <th>User</th>
+ <?php
+ foreach ($sizes as $size) {
+ echo '<td>';
+ echo elgg_view_entity_icon($user, $size, array('use_hover' => false));
+ echo '</td>';
+ }
+ ?>
+ </tr>
+ <tr>
+ <th>Group</th>
+ <?php
+ foreach ($sizes as $size) {
+ echo '<td>';
+ echo elgg_view_entity_icon($group, $size, array('use_hover' => false));
+ echo '</td>';
+ }
+ ?>
+ </tr>
+</table>
diff --git a/mod/developers/views/default/theme_preview/icons/loader.php b/mod/developers/views/default/theme_preview/icons/loader.php
new file mode 100644
index 000000000..e542da27c
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/icons/loader.php
@@ -0,0 +1 @@
+<?php echo elgg_view('graphics/ajax_loader', array('hidden' => false)); ?> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/icons/sprites.php b/mod/developers/views/default/theme_preview/icons/sprites.php
new file mode 100644
index 000000000..134dd9aca
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/icons/sprites.php
@@ -0,0 +1,61 @@
+<?php
+$icons = array(
+ 'arrow-left',
+ 'arrow-right',
+ 'arrow-two-head',
+ 'calendar',
+ 'checkmark',
+ 'clip',
+ 'cursor-drag-arrow',
+ 'delete-alt',
+ 'delete',
+ 'download',
+ 'facebook',
+ 'home',
+ 'hover-menu',
+ 'link',
+ 'mail-alt',
+ 'mail',
+ 'print-alt',
+ 'print',
+ 'push-pin-alt',
+ 'push-pin',
+ 'redo',
+ 'refresh',
+ 'round-arrow-left',
+ 'round-arrow-right',
+ 'round-checkmark',
+ 'round-minus',
+ 'round-plus',
+ 'rss',
+ 'search-focus',
+ 'search',
+ 'settings-alt',
+ 'settings',
+ 'share',
+ 'shop-cart',
+ 'speech-bubble-alt',
+ 'speech-bubble',
+ 'star-alt',
+ 'star-empty',
+ 'star',
+ 'tag',
+ 'thumbs-down-alt',
+ 'thumbs-down',
+ 'thumbs-up-alt',
+ 'thumbs-up',
+ 'trash',
+ 'twitter',
+ 'undo',
+ 'user',
+ 'users',
+);
+?>
+
+<ul class="elgg-gallery">
+<?php
+ foreach ($icons as $icon) {
+ echo "<li title=\".elgg-icon-$icon\" style=\"margin:10px\">" . elgg_view_icon($icon) . "</li>";
+ }
+?>
+</ul> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous.php b/mod/developers/views/default/theme_preview/miscellaneous.php
new file mode 100644
index 000000000..2f4ee4acd
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Miscellaneous and complex components
+ */
+
+$body = elgg_view('theme_preview/miscellaneous/lightbox');
+echo elgg_view_module('info', 'Lightbox (.elgg-lightbox)', $body);
+
+$body = elgg_view('theme_preview/miscellaneous/popup');
+echo elgg_view_module('info', 'Popup (rel=popup)', $body);
+
+$body = elgg_view('theme_preview/miscellaneous/toggle');
+echo elgg_view_module('info', 'Toggle (rel=toggle)', $body);
+
+$body = elgg_view('theme_preview/miscellaneous/system_messages');
+echo elgg_view_module('info', 'System Messages and Errors', $body);
+
+$body = elgg_view('theme_preview/miscellaneous/site_menu');
+echo elgg_view_module('info', 'Site Menu', $body);
+
+$body = elgg_view('theme_preview/miscellaneous/user_hover_menu');
+echo elgg_view_module('info', 'User Icon with Hover Menu', $body); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/lightbox.php b/mod/developers/views/default/theme_preview/miscellaneous/lightbox.php
new file mode 100644
index 000000000..b673c4ee0
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/lightbox.php
@@ -0,0 +1,19 @@
+<?php
+
+elgg_load_js('lightbox');
+elgg_load_css('lightbox');
+
+$ipsum = elgg_view('developers/ipsum');
+
+$link = elgg_view('output/url', array(
+ 'text' => 'Open lighbox',
+ 'href' => "#elgg-lightbox-test",
+ 'class' => 'elgg-lightbox'
+));
+
+echo $link;
+echo '<div class="hidden">';
+echo elgg_view_module('aside', 'Lightbox Test', $ipsum, array(
+ 'id' => 'elgg-lightbox-test'
+));
+echo '</div>'; \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/popup.php b/mod/developers/views/default/theme_preview/miscellaneous/popup.php
new file mode 100644
index 000000000..b711bb7cc
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/popup.php
@@ -0,0 +1,15 @@
+<?php
+
+$ipsum = elgg_view('developers/ipsum');
+
+$link = elgg_view('output/url', array(
+ 'text' => 'Popup content',
+ 'href' => "#elgg-popup-test",
+ 'rel' => 'popup'
+));
+
+echo $link;
+echo elgg_view_module('popup', 'Popup Test', $ipsum, array(
+ 'id' => 'elgg-popup-test',
+ 'class' => 'hidden clearfix developers-content-thin',
+)); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/site_menu.php b/mod/developers/views/default/theme_preview/miscellaneous/site_menu.php
new file mode 100644
index 000000000..e2384b9f7
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/site_menu.php
@@ -0,0 +1,15 @@
+<?php
+
+if (!get_input('site_menu')) {
+ echo elgg_view('output/url', array(
+ 'text' => 'Show Site Menu',
+ 'href' => elgg_http_add_url_query_elements(current_page_url(), array('site_menu' => 1)),
+ 'is_trusted' => true
+ ));
+} else {
+ echo elgg_view('output/url', array(
+ 'text' => 'Hide Site Menu',
+ 'href' => elgg_http_remove_url_query_element(current_page_url(), 'site_menu'),
+ 'is_trusted' => true
+ ));
+} \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/system_messages.php b/mod/developers/views/default/theme_preview/miscellaneous/system_messages.php
new file mode 100644
index 000000000..a6663a3dc
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/system_messages.php
@@ -0,0 +1,35 @@
+<?php
+
+// can't use the ipsum because it includes html when wrapping views.
+$message = elgg_view('output/url', array(
+ 'text' => 'Show system message (system_message())',
+ 'is_trusted' => true,
+ 'href' => '#',
+ 'id' => 'developers-system-message',
+// 'onclick' => "elgg.system_message('Elgg System Message');"
+));
+
+$error = elgg_view('output/url', array(
+ 'text' => 'Show error message (register_error())',
+ 'is_trusted' => true,
+ 'href' => '#',
+ 'id' => 'developers-error-message',
+));
+
+?>
+<script type="text/javascript">
+ $(function() {
+ $('#developers-system-message').click(function() {
+ elgg.system_message('Elgg System Message');
+ })
+
+ $('#developers-error-message').click(function() {
+ elgg.register_error('Elgg Error Message');
+ })
+ });
+</script>
+
+<ul>
+ <li><?php echo $message; ?></li>
+ <li><?php echo $error; ?></li>
+</ul> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/toggle.php b/mod/developers/views/default/theme_preview/miscellaneous/toggle.php
new file mode 100644
index 000000000..abe39ddd8
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/toggle.php
@@ -0,0 +1,15 @@
+<?php
+
+$ipsum = elgg_view('developers/ipsum');
+
+$link = elgg_view('output/url', array(
+ 'text' => 'Toggle content',
+ 'href' => "#elgg-toggle-test",
+ 'rel' => 'toggle'
+));
+
+echo $link;
+echo elgg_view_module('featured', 'Toggle Test', $ipsum, array(
+ 'id' => 'elgg-toggle-test',
+ 'class' => 'hidden clearfix developers-content-thin',
+)); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/miscellaneous/user_hover_menu.php b/mod/developers/views/default/theme_preview/miscellaneous/user_hover_menu.php
new file mode 100644
index 000000000..45331b6e0
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/miscellaneous/user_hover_menu.php
@@ -0,0 +1,16 @@
+<?php
+
+$me = elgg_get_logged_in_user_entity();
+echo elgg_view_entity_icon($me);
+
+// show another user if available
+$users = elgg_get_entities(array(
+ 'type' => 'user',
+ 'wheres' => array("guid != {$me->getGUID()}"),
+ 'limit' => 1
+));
+
+if (is_array($users) && count($users) > 0) {
+ echo elgg_view_entity_icon($users[0]);
+}
+
diff --git a/mod/developers/views/default/theme_preview/modules.php b/mod/developers/views/default/theme_preview/modules.php
new file mode 100644
index 000000000..c46c94296
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/modules.php
@@ -0,0 +1,6 @@
+<?php
+
+echo elgg_view_module('info', 'Modules (.elgg-module)', elgg_view('theme_preview/modules/modules'));
+
+echo elgg_view_module('info', 'Widgets (.elgg-module-widget)', elgg_view('theme_preview/modules/widgets'));
+
diff --git a/mod/developers/views/default/theme_preview/modules/modules.php b/mod/developers/views/default/theme_preview/modules/modules.php
new file mode 100644
index 000000000..e0d39c0da
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/modules/modules.php
@@ -0,0 +1,23 @@
+<?php
+
+$ipsum = elgg_view('developers/ipsum');
+
+?>
+<div class="elgg-grid">
+ <div class="elgg-col elgg-col-1of2">
+ <div class="pam">
+ <?php
+ echo elgg_view_module('aside', 'Aside (.elgg-module-aside)', $ipsum);
+ echo elgg_view_module('popup', 'Popup (.elgg-module-popup)', $ipsum);
+ ?>
+ </div>
+ </div>
+ <div class="elgg-col elgg-col-1of2">
+ <div class="pam">
+ <?php
+ echo elgg_view_module('info', 'Info (.elgg-module-info)', $ipsum);
+ echo elgg_view_module('featured', 'Featured (.elgg-module-featured)', $ipsum);
+ ?>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/modules/widgets.php b/mod/developers/views/default/theme_preview/modules/widgets.php
new file mode 100644
index 000000000..8c9fd6483
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/modules/widgets.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Widgets CSS
+ */
+
+$url = current_page_url();
+
+elgg_register_plugin_hook_handler('view', 'widgets/friends/content', 'css_widget_content');
+elgg_register_plugin_hook_handler('view', 'widgets/friends/edit', 'css_widget_content');
+elgg_register_plugin_hook_handler('permissions_check', 'all', 'css_permissions_override');
+
+function css_widget_content() {
+ return $ipsum = elgg_view('developers/ipsum');
+}
+
+function css_permissions_override() {
+ return true;
+}
+
+
+?>
+<div class="elgg-body mal">
+ <?php echo elgg_view('theme_preview/header', $vars); ?>
+<?php
+$w = array();
+for ($i=1; $i<=6; $i++) {
+ $obj = new ElggWidget();
+ $obj->handler = 'friends';
+ $obj->title = "Widget $i";
+ $w[] = $obj;
+}
+$column1 = array($w[0], $w[1]);
+$column2 = array($w[2], $w[3]);
+$column3 = array($w[4], $w[5]);
+$widgets = array(1 => $column1, 2 => $column2, 3 => $column3);
+$num_columns = 3;
+$widget_class = "elgg-col-1of{$num_columns}";
+for ($column_index = 1; $column_index <= $num_columns; $column_index++) {
+ $column_widgets = $widgets[$column_index];
+
+ echo "<div class=\"$widget_class elgg-widgets\" id=\"elgg-widget-col-$column_index\">";
+ if (is_array($column_widgets) && sizeof($column_widgets) > 0) {
+ foreach ($column_widgets as $widget) {
+ echo elgg_view_entity($widget);
+ }
+ }
+ echo '</div>';
+}
+?>
+</div>
+<script type="text/javascript">
+ // widgets do not have guids so we override the edit toggle and delete button
+ $(function() {
+ $('.elgg-widget-edit-button').unbind('click');
+ $('.elgg-widget-edit-button').click(function() {
+ $(this).closest('.elgg-module-widget').find('.elgg-widget-edit').slideToggle('medium');
+ return false;
+ });
+ $('.elgg-widget-delete-button').click(function() {
+ $(this).closest('.elgg-module-widget').remove();
+ return false;
+ });
+ });
+</script>
diff --git a/mod/developers/views/default/theme_preview/navigation.php b/mod/developers/views/default/theme_preview/navigation.php
new file mode 100644
index 000000000..5d3060d10
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Navigation CSS
+ */
+echo elgg_view_module('info', "Tabs (.elgg-tabs)", elgg_view('theme_preview/navigation/tabs'));
+
+echo elgg_view_module('info', "Pagination (.elgg-pagination)", elgg_view('theme_preview/navigation/pagination'));
+
+echo elgg_view_module('info', "Site Menu (.elgg-menu-site)", elgg_view('theme_preview/navigation/site'));
+
+echo elgg_view_module('info', "Breadcrumbs (.elgg-breadcrumbs)", elgg_view('theme_preview/navigation/breadcrumbs'));
+
+echo elgg_view_module('info', "Page Menu (.elgg-menu-page)", elgg_view('theme_preview/navigation/page'));
+
+echo elgg_view_module('info', "Filter Menu (.elgg-menu-filter)", elgg_view('theme_preview/navigation/filter'));
+
+echo elgg_view_module('info', "Extras Menu (.elgg-menu-extras and .elgg-menu-hz)", elgg_view('theme_preview/navigation/extras'));
+
+echo elgg_view_module('info', "Entity Menu (.elgg-menu-entity and .elgg-menu-hz)", elgg_view('theme_preview/navigation/entity'));
+
+echo elgg_view_module('info', "Owner Block Menu (.elgg-menu-owner-block)", elgg_view('theme_preview/navigation/owner_block'));
+
+echo elgg_view_module('info', "Footer Menu (.elgg-menu-footer)", elgg_view('theme_preview/navigation/footer'));
diff --git a/mod/developers/views/default/theme_preview/navigation/breadcrumbs.php b/mod/developers/views/default/theme_preview/navigation/breadcrumbs.php
new file mode 100644
index 000000000..c910b2aa4
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/breadcrumbs.php
@@ -0,0 +1,10 @@
+<?php
+elgg_push_breadcrumb('First', "#");
+elgg_push_breadcrumb('Second', "#");
+elgg_push_breadcrumb('Third');
+
+echo elgg_view('navigation/breadcrumbs', array('class' => mts));
+
+elgg_pop_breadcrumb();
+elgg_pop_breadcrumb();
+elgg_pop_breadcrumb();
diff --git a/mod/developers/views/default/theme_preview/navigation/default.php b/mod/developers/views/default/theme_preview/navigation/default.php
new file mode 100644
index 000000000..bfd26162f
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/default.php
@@ -0,0 +1,11 @@
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+
+echo elgg_view('navigation/menu/default', $params);
diff --git a/mod/developers/views/default/theme_preview/navigation/entity.php b/mod/developers/views/default/theme_preview/navigation/entity.php
new file mode 100644
index 000000000..465585b00
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/entity.php
@@ -0,0 +1,12 @@
+<?php
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+$params['menu']['default'][] = new ElggMenuItem(1, "Public", false);
+$params['menu']['default'][] = new ElggMenuItem(2, "Edit", "#");
+$params['menu']['default'][] = new ElggMenuItem(3, elgg_view_icon('thumbs-up'), "#");
+$params['name'] = 'entity';
+$params['class'] = 'elgg-menu-hz';
+
+echo elgg_view('navigation/menu/default', $params);
+
diff --git a/mod/developers/views/default/theme_preview/navigation/extras.php b/mod/developers/views/default/theme_preview/navigation/extras.php
new file mode 100644
index 000000000..43b19f8e3
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/extras.php
@@ -0,0 +1,18 @@
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+$params['menu']['default'][] = new ElggMenuItem(1, elgg_view_icon('push-pin-alt'), "#");
+$params['menu']['default'][] = new ElggMenuItem(2, elgg_view_icon('rss'), "#");
+$params['menu']['default'][] = new ElggMenuItem(3, elgg_view_icon('star-alt'), "#");
+$params['name'] = 'extras';
+$params['class'] = 'elgg-menu-hz';
+
+?>
+
+<div class="elgg-sidebar">
+<?php
+ echo elgg_view('navigation/menu/default', $params);
+?>
+</div> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/navigation/filter.php b/mod/developers/views/default/theme_preview/navigation/filter.php
new file mode 100644
index 000000000..ea1c8b033
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/filter.php
@@ -0,0 +1,13 @@
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+
+$params['name'] = 'filter';
+
+echo elgg_view('navigation/menu/default', $params);
diff --git a/mod/developers/views/default/theme_preview/navigation/footer.php b/mod/developers/views/default/theme_preview/navigation/footer.php
new file mode 100644
index 000000000..92a1bb43c
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/footer.php
@@ -0,0 +1,10 @@
+<?php
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['name'] = 'footer';
+
+echo elgg_view('navigation/menu/default', $params);
diff --git a/mod/developers/views/default/theme_preview/navigation/horizontal.php b/mod/developers/views/default/theme_preview/navigation/horizontal.php
new file mode 100644
index 000000000..f404f42c0
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/horizontal.php
@@ -0,0 +1,12 @@
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+$params['class'] = 'elgg-menu-hz';
+
+echo elgg_view('navigation/menu/default', $params);
diff --git a/mod/developers/views/default/theme_preview/navigation/owner_block.php b/mod/developers/views/default/theme_preview/navigation/owner_block.php
new file mode 100644
index 000000000..20b93d166
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/owner_block.php
@@ -0,0 +1,13 @@
+<?php
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+$params['name'] = 'owner-block';
+
+echo '<div class="elgg-sidebar">';
+echo elgg_view('navigation/menu/default', $params);
+echo '</div>';
diff --git a/mod/developers/views/default/theme_preview/navigation/page.php b/mod/developers/views/default/theme_preview/navigation/page.php
new file mode 100644
index 000000000..a57edc2e2
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/page.php
@@ -0,0 +1,20 @@
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+
+$m = new ElggMenuItem(10, "Child", "#");
+$m->setParent($params['menu']['default'][1]);
+$params['menu']['default'][1]->addChild($m);
+?>
+
+<div class="elgg-sidebar">
+<?php
+ echo elgg_view('navigation/menu/page', $params);
+?>
+</div> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/navigation/pagination.php b/mod/developers/views/default/theme_preview/navigation/pagination.php
new file mode 100644
index 000000000..90ae48edf
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/pagination.php
@@ -0,0 +1,8 @@
+<?php
+$params = array(
+ 'count' => 1000,
+ 'limit' => 10,
+ 'offset' => 230,
+);
+
+echo elgg_view('navigation/pagination', $params); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/navigation/site.php b/mod/developers/views/default/theme_preview/navigation/site.php
new file mode 100644
index 000000000..329036b80
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/site.php
@@ -0,0 +1,18 @@
+<?php
+
+$params = array();
+$params['menu'] = array();
+$params['menu']['default'] = array();
+for ($i=1; $i<=5; $i++) {
+ $params['menu']['default'][] = new ElggMenuItem($i, "Page $i", "#");
+}
+$params['menu']['default'][2]->setSelected(true);
+?>
+
+<div class="elgg-page-header">
+ <div class="elgg-inner">
+ <?php
+ echo elgg_view('navigation/menu/site', $params);
+ ?>
+ </div>
+</div>
diff --git a/mod/developers/views/default/theme_preview/navigation/tabs.php b/mod/developers/views/default/theme_preview/navigation/tabs.php
new file mode 100644
index 000000000..81fe4e669
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/navigation/tabs.php
@@ -0,0 +1,10 @@
+<?php
+$params = array(
+ 'tabs' => array(
+ array('title' => 'First', 'url' => "#"),
+ array('title' => 'Second', 'url' => "#", 'selected' => true),
+ array('title' => 'Third', 'url' => "#"),
+ )
+);
+
+echo elgg_view('navigation/tabs', $params); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/typography.php b/mod/developers/views/default/theme_preview/typography.php
new file mode 100644
index 000000000..7a6328cf9
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/typography.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * General CSS
+ */
+
+echo elgg_view_module('info', "Headings", elgg_view('theme_preview/typography/headings'));
+
+echo elgg_view_module('info', "Fonts", elgg_view('theme_preview/typography/fonts'));
+
+echo elgg_view_module('info', "Paragraph", elgg_view('theme_preview/typography/paragraph'));
+
+echo elgg_view_module('info', "Misc", elgg_view('theme_preview/typography/misc')); \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/typography/fonts.php b/mod/developers/views/default/theme_preview/typography/fonts.php
new file mode 100644
index 000000000..dd3c53f00
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/typography/fonts.php
@@ -0,0 +1,7 @@
+<ul>
+ <li>Lorem ipsum dolor sit amet (body)</li>
+ <li><span class="elgg-text-help" style="display: inline;">Lorem ipsum dolor sit amet</span> (.elgg-text-help)</li>
+ <li><span class="elgg-quiet">Lorem ipsum dolor sit amet</span> (.elgg-quiet)</li>
+ <li><span class="elgg-loud">Lorem ipsum dolor sit amet</span> (.elgg-loud)</li>
+ <li><span class="elgg-monospace">Lorem ipsum dolor sit amet</span> (.elgg-monospace)</li>
+</ul> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/typography/headings.php b/mod/developers/views/default/theme_preview/typography/headings.php
new file mode 100644
index 000000000..1eb96c75c
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/typography/headings.php
@@ -0,0 +1,6 @@
+<h1>Level 1 heading</h1>
+<h2>Level 2 heading</h2>
+<h3>Level 3 heading</h3>
+<h4>Level 4 heading</h4>
+<h5>Level 5 heading</h5>
+<h6>Level 6 heading</h6> \ No newline at end of file
diff --git a/mod/developers/views/default/theme_preview/typography/misc.php b/mod/developers/views/default/theme_preview/typography/misc.php
new file mode 100644
index 000000000..93a279c36
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/typography/misc.php
@@ -0,0 +1,16 @@
+<ul>
+ <li>I am <a href="?abc123">the a tag</a> example</li>
+ <li>I am <abbr title="test">the abbr tag</abbr> example</li>
+ <li>I am <acronym>the acronym tag</acronym> example</li>
+ <li>I am <b>the b tag</b> example</li>
+ <li>I am <code>the code tag</code> example</li>
+ <li>I am <del>the del tag</del> example</li>
+ <li>I am <em>the em tag</em> example</li>
+ <li>I am <i>the i tag</i> example</li>
+ <li>I am <strong>the strong tag</strong> example</li>
+</ul>
+<blockquote><p>Paragraph inside Blockquote: <?php echo $ipsum; ?></p></blockquote>
+<pre>
+ <strong>Preformated:</strong>Testing one row
+ and another
+</pre>
diff --git a/mod/developers/views/default/theme_preview/typography/paragraph.php b/mod/developers/views/default/theme_preview/typography/paragraph.php
new file mode 100644
index 000000000..54d548f46
--- /dev/null
+++ b/mod/developers/views/default/theme_preview/typography/paragraph.php
@@ -0,0 +1,19 @@
+<p>Lorem ipsum dolor sit amet, <a href="#" title="test link">test link</a>
+adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. Donec
+faucibus. Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero
+nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent
+mattis, massa quis luctus <strong>strong</strong>, turpis mi volutpat justo, eu
+volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus
+eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem,
+consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue
+quis tellus.</p>
+
+<p>Lorem ipsum dolor sit amet, <em>emphasis</em> consectetuer
+adipiscing elit. Nullam dignissim convallis est. Quisque aliquam. Donec
+faucibus. Nunc iaculis suscipit dui. Nam sit amet sem. Aliquam libero
+nisi, imperdiet at, tincidunt nec, gravida vehicula, nisl. Praesent
+mattis, massa quis luctus fermentum, turpis mi volutpat justo, eu
+volutpat enim diam eget metus. Maecenas ornare tortor. Donec sed tellus
+eget sapien fringilla nonummy. Mauris a ante. Suspendisse quam sem,
+consequat at, commodo vitae, feugiat in, nunc. Morbi imperdiet augue
+quis tellus.</p> \ No newline at end of file
diff --git a/mod/diagnostics/actions/download.php b/mod/diagnostics/actions/download.php
new file mode 100644
index 000000000..97775c92e
--- /dev/null
+++ b/mod/diagnostics/actions/download.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Elgg diagnostics
+ *
+ * @package ElggDiagnostics
+ */
+
+$output = elgg_echo('diagnostics:header', array(date('r'), elgg_get_logged_in_user_entity()->name));
+$output = elgg_trigger_plugin_hook('diagnostics:report', 'system', null, $output);
+
+header("Cache-Control: public");
+header("Content-Description: File Transfer");
+header('Content-disposition: attachment; filename=elggdiagnostic.txt');
+header("Content-Type: text/plain");
+header('Content-Length: ' . strlen($output));
+
+echo $output;
+exit;
diff --git a/mod/diagnostics/languages/en.php b/mod/diagnostics/languages/en.php
new file mode 100644
index 000000000..54859941d
--- /dev/null
+++ b/mod/diagnostics/languages/en.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Elgg diagnostics language pack.
+ *
+ * @package ElggDiagnostics
+ */
+
+$english = array(
+ 'admin:administer_utilities:diagnostics' => 'System Diagnostics',
+ 'diagnostics' => 'System diagnostics',
+ 'diagnostics:report' => 'Diagnostics Report',
+ 'diagnostics:description' => 'The following diagnostic report can be useful for diagnosing problems with Elgg. The developers of Elgg may request that you attach it to a bug report.',
+ 'diagnostics:download' => 'Download',
+ 'diagnostics:header' => '========================================================================
+Elgg Diagnostic Report
+Generated %s by %s
+========================================================================
+
+',
+ 'diagnostics:report:basic' => '
+Elgg Release %s, version %s
+
+------------------------------------------------------------------------',
+ 'diagnostics:report:php' => '
+PHP info:
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:plugins' => '
+Installed plugins and details:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:md5' => '
+Installed files and checksums:
+
+%s
+------------------------------------------------------------------------',
+ 'diagnostics:report:globals' => '
+Global variables:
+
+%s
+------------------------------------------------------------------------',
+);
+
+add_translation("en", $english);
diff --git a/mod/diagnostics/manifest.xml b/mod/diagnostics/manifest.xml
new file mode 100644
index 000000000..21e847d22
--- /dev/null
+++ b/mod/diagnostics/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Diagnostics</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>development</category>
+ <category>admin</category>
+ <description>Elgg diagnostics tool</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/diagnostics/start.php b/mod/diagnostics/start.php
new file mode 100644
index 000000000..55842800a
--- /dev/null
+++ b/mod/diagnostics/start.php
@@ -0,0 +1,140 @@
+<?php
+/**
+ * Elgg diagnostics
+ *
+ * @package ElggDiagnostics
+ */
+
+elgg_register_event_handler('init', 'system', 'diagnostics_init');
+
+/**
+ * Initialise the diagnostics tool
+ */
+function diagnostics_init() {
+
+ // Add admin menu item
+ elgg_register_admin_menu_item('administer', 'diagnostics', 'administer_utilities');
+
+ // Register some actions
+ $file = elgg_get_plugins_path() . "diagnostics/actions/download.php";
+ elgg_register_action("diagnostics/download", $file, 'admin');
+}
+
+/**
+ * Generate a basic report.
+ *
+ * @return string
+ */
+function diagnostics_basic_hook($hook, $entity_type, $returnvalue, $params) {
+
+ // Get version information
+ $version = get_version();
+ $release = get_version(true);
+
+ $returnvalue .= elgg_echo('diagnostics:report:basic', array($release, $version));
+
+ return $returnvalue;
+}
+
+/**
+ * Get some information about the plugins installed on the system.
+ *
+ * @return tring
+ */
+function diagnostics_plugins_hook($hook, $entity_type, $returnvalue, $params) {
+ // @todo this is a really bad idea because of the new plugin system
+ //$returnvalue .= elgg_echo('diagnostics:report:plugins', array(print_r(elgg_get_plugins(), true)));
+
+ return $returnvalue;
+}
+
+/**
+ * Recursively list through a directory tree producing a hash of all installed files
+ *
+ * @param starting dir $dir
+ * @param buffer $buffer
+ */
+function diagnostics_md5_dir($dir) {
+ $extensions_allowed = array('.php', '.js', '.css');
+
+ $buffer = "";
+
+ if (in_array(strrchr(trim($dir, "/"), '.'), $extensions_allowed)) {
+ $dir = rtrim($dir, "/");
+ $buffer .= md5_file($dir). " " . $dir . "\n";
+ } else if (is_dir($dir)) {
+ $handle = opendir($dir);
+ while ($file = readdir($handle)) {
+ if (($file != '.') && ($file != '..')) {
+ $buffer .= diagnostics_md5_dir($dir . $file. "/", $buffer);
+ }
+ }
+
+ closedir($handle);
+ }
+
+ return $buffer;
+}
+
+/**
+ * Get some information about the files installed on a system.
+ *
+ * @return string
+ */
+function diagnostics_sigs_hook($hook, $entity_type, $returnvalue, $params) {
+
+ $base_dir = elgg_get_root_path();
+ $returnvalue .= elgg_echo('diagnostics:report:md5', array(diagnostics_md5_dir($base_dir)));
+
+ return $returnvalue;
+}
+
+/**
+ * Get some information about the php install
+ *
+ * @return string
+ */
+function diagnostics_phpinfo_hook($hook, $entity_type, $returnvalue, $params) {
+
+ ob_start();
+ phpinfo();
+ $phpinfo = array('phpinfo' => array());
+
+ if (preg_match_all('#(?:<h2>(?:<a name=".*?">)?(.*?)(?:</a>)?</h2>)|(?:<tr(?: class=".*?")?><t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>(?:<t[hd](?: class=".*?")?>(.*?)\s*</t[hd]>)?)?</tr>)#s', ob_get_clean(), $matches, PREG_SET_ORDER)) {
+
+ foreach ($matches as $match) {
+ if (strlen($match[1])) {
+ $phpinfo[$match[1]] = array();
+ } else if(isset($match[3])) {
+ $phpinfo[end(array_keys($phpinfo))][$match[2]] = isset($match[4]) ? array($match[3], $match[4]) : $match[3];
+ } else {
+ $phpinfo[end(array_keys($phpinfo))][] = $match[2];
+ }
+ }
+ }
+
+ $returnvalue .= elgg_echo('diagnostics:report:php', array(print_r($phpinfo, true)));
+
+ return $returnvalue;
+}
+
+/**
+ * Get global variables.
+ *
+ * @return string
+ */
+function diagnostics_globals_hook($hook, $entity_type, $returnvalue, $params) {
+ global $CONFIG;
+
+ $output = str_replace($CONFIG->dbpass, '<<DBPASS>>', print_r($GLOBALS, true));
+ $returnvalue .= elgg_echo('diagnostics:report:globals', array($output));
+
+ return $returnvalue;
+}
+
+elgg_register_plugin_hook_handler("diagnostics:report", "system", "diagnostics_basic_hook", 0); // show basics first
+elgg_register_plugin_hook_handler("diagnostics:report", "system", "diagnostics_plugins_hook", 2); // Now the plugins
+elgg_register_plugin_hook_handler("diagnostics:report", "system", "diagnostics_sigs_hook", 1); // Now the signatures
+
+elgg_register_plugin_hook_handler("diagnostics:report", "system", "diagnostics_globals_hook"); // Global variables
+elgg_register_plugin_hook_handler("diagnostics:report", "system", "diagnostics_phpinfo_hook"); // PHP info
diff --git a/mod/diagnostics/views/default/admin/administer_utilities/diagnostics.php b/mod/diagnostics/views/default/admin/administer_utilities/diagnostics.php
new file mode 100644
index 000000000..c7ff3d5fc
--- /dev/null
+++ b/mod/diagnostics/views/default/admin/administer_utilities/diagnostics.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Diagnostics admin page
+ */
+
+$diagnostics_title = elgg_echo('diagnostics:report');
+$diagnostics = '<p>' . elgg_echo('diagnostics:description') .'</p>';
+$params = array(
+ 'text' => elgg_echo('diagnostics:download'),
+ 'href' => 'action/diagnostics/download',
+ 'class' => 'elgg-button elgg-button-submit',
+ 'is_action' => true,
+ 'is_trusted' => true,
+);
+$diagnostics .= '<p>' . elgg_view('output/url', $params) . '</p>';
+
+echo elgg_view_module('inline', $diagnostics_title, $diagnostics, array('class' => 'elgg-form-settings'));
diff --git a/AUTHORS b/mod/dokuwiki/AUTHORS
index 83b5cf583..83b5cf583 100644
--- a/AUTHORS
+++ b/mod/dokuwiki/AUTHORS
diff --git a/COPYING b/mod/dokuwiki/COPYING
index 60549be51..60549be51 100755
--- a/COPYING
+++ b/mod/dokuwiki/COPYING
diff --git a/README b/mod/dokuwiki/README
index 40e1f52ec..40e1f52ec 100644
--- a/README
+++ b/mod/dokuwiki/README
diff --git a/mod/dokuwiki/index.php b/mod/dokuwiki/index.php
new file mode 100644
index 000000000..e4e039f51
--- /dev/null
+++ b/mod/dokuwiki/index.php
@@ -0,0 +1,17 @@
+<?php
+
+ elgg_push_breadcrumb(elgg_echo('dokuwiki'));
+ $offset = (int)get_input('offset', 0);
+ $title = elgg_echo("dokuwiki:title");
+ $content = elgg_list_entities(array('subtype'=>'dokuwiki', 'offset'=>$offset, 'types'=>'object','full_view'=>false));
+ $body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ ));
+
+ // Finally draw the page
+ echo elgg_view_page($title, $body);
+
+
+?>
diff --git a/languages/ca.php b/mod/dokuwiki/languages/ca.php
index ca2c0df1e..ca2c0df1e 100644
--- a/languages/ca.php
+++ b/mod/dokuwiki/languages/ca.php
diff --git a/languages/de.php b/mod/dokuwiki/languages/de.php
index e951d0b41..e951d0b41 100755
--- a/languages/de.php
+++ b/mod/dokuwiki/languages/de.php
diff --git a/mod/dokuwiki/languages/en.php b/mod/dokuwiki/languages/en.php
new file mode 100755
index 000000000..20b7cb656
--- /dev/null
+++ b/mod/dokuwiki/languages/en.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Elgg spotlight lorea
+ *
+ * @package
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author lorea
+ * @copyright lorea
+ * @link http://lorea.cc
+ */
+
+ $english = array(
+ "dokuwiki:wiki"=>'Wiki',
+ "dokuwiki:title"=>'Wikis',
+ "item:object:dokuwiki"=>'Wikis',
+ "dokuwiki:wikifrom"=>'%s wiki',
+ "dokuwiki:pages"=>'%s pages',
+ "dokuwiki:dokuwiki"=>'Wiki',
+ "dokuwiki:group"=>'Group wiki',
+ "dokuwiki:userwiki"=>'My Wiki',
+ "dokuwiki:sidebar" => 'Wiki navigation',
+ "groups:enabledokuwiki"=>'Enable group wiki',
+ "groups:enabledokuwiki_frontpage"=>'Show main wiki page in the group front page (only if wiki is enabled)',
+ "groups:enabledokuwiki_frontsidebar"=>'Show wiki sidebar in the group front page (only if wiki is enabled)',
+ "dokuwiki"=>'Wikis',
+
+ "dokuwiki:river:modified"=>'%s modified page %s on %s',
+ );
+
+ add_translation("en",$english);
+
+?>
diff --git a/languages/es.php b/mod/dokuwiki/languages/es.php
index 613d79ba6..613d79ba6 100644
--- a/languages/es.php
+++ b/mod/dokuwiki/languages/es.php
diff --git a/languages/fr.php b/mod/dokuwiki/languages/fr.php
index dcaa14c00..dcaa14c00 100644
--- a/languages/fr.php
+++ b/mod/dokuwiki/languages/fr.php
diff --git a/languages/gl.php b/mod/dokuwiki/languages/gl.php
index ba67b6f32..ba67b6f32 100644
--- a/languages/gl.php
+++ b/mod/dokuwiki/languages/gl.php
diff --git a/languages/pl.php b/mod/dokuwiki/languages/pl.php
index e43e14526..e43e14526 100755
--- a/languages/pl.php
+++ b/mod/dokuwiki/languages/pl.php
diff --git a/languages/pt.php b/mod/dokuwiki/languages/pt.php
index 4c067cd52..4c067cd52 100644
--- a/languages/pt.php
+++ b/mod/dokuwiki/languages/pt.php
diff --git a/lib/dokuwiki.php b/mod/dokuwiki/lib/dokuwiki.php
index b49e4d4ee..b49e4d4ee 100644
--- a/lib/dokuwiki.php
+++ b/mod/dokuwiki/lib/dokuwiki.php
diff --git a/manifest.xml b/mod/dokuwiki/manifest.xml
index ed2969216..ed2969216 100644
--- a/manifest.xml
+++ b/mod/dokuwiki/manifest.xml
diff --git a/start.php b/mod/dokuwiki/start.php
index 05c7c01f2..05c7c01f2 100644
--- a/start.php
+++ b/mod/dokuwiki/start.php
diff --git a/vendors/dokuwiki/COPYING b/mod/dokuwiki/vendors/dokuwiki/COPYING
index d60c31a97..d60c31a97 100644
--- a/vendors/dokuwiki/COPYING
+++ b/mod/dokuwiki/vendors/dokuwiki/COPYING
diff --git a/vendors/dokuwiki/README b/mod/dokuwiki/vendors/dokuwiki/README
index a000bba2b..a000bba2b 100644
--- a/vendors/dokuwiki/README
+++ b/mod/dokuwiki/vendors/dokuwiki/README
diff --git a/vendors/dokuwiki/VERSION b/mod/dokuwiki/vendors/dokuwiki/VERSION
index 157cc6c56..157cc6c56 100644
--- a/vendors/dokuwiki/VERSION
+++ b/mod/dokuwiki/vendors/dokuwiki/VERSION
diff --git a/vendors/dokuwiki/bin/dwpage.php b/mod/dokuwiki/vendors/dokuwiki/bin/dwpage.php
index f664770bf..f664770bf 100755
--- a/vendors/dokuwiki/bin/dwpage.php
+++ b/mod/dokuwiki/vendors/dokuwiki/bin/dwpage.php
diff --git a/vendors/dokuwiki/bin/indexer.php b/mod/dokuwiki/vendors/dokuwiki/bin/indexer.php
index 55f3608d5..55f3608d5 100755
--- a/vendors/dokuwiki/bin/indexer.php
+++ b/mod/dokuwiki/vendors/dokuwiki/bin/indexer.php
diff --git a/vendors/dokuwiki/bin/wantedpages.php b/mod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php
index 30171fc15..30171fc15 100755
--- a/vendors/dokuwiki/bin/wantedpages.php
+++ b/mod/dokuwiki/vendors/dokuwiki/bin/wantedpages.php
diff --git a/vendors/dokuwiki/conf/acl.auth.php b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php
index 7678e918e..7678e918e 100644
--- a/vendors/dokuwiki/conf/acl.auth.php
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php
diff --git a/vendors/dokuwiki/conf/acl.auth.php.dist b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist
index 14344d778..14344d778 100644
--- a/vendors/dokuwiki/conf/acl.auth.php.dist
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/acl.auth.php.dist
diff --git a/vendors/dokuwiki/conf/acronyms.conf b/mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf
index 13708d2df..13708d2df 100644
--- a/vendors/dokuwiki/conf/acronyms.conf
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/acronyms.conf
diff --git a/vendors/dokuwiki/conf/dokuwiki.php b/mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php
index 74d95147e..74d95147e 100644
--- a/vendors/dokuwiki/conf/dokuwiki.php
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/dokuwiki.php
diff --git a/vendors/dokuwiki/conf/entities.conf b/mod/dokuwiki/vendors/dokuwiki/conf/entities.conf
index be9ed6d40..be9ed6d40 100644
--- a/vendors/dokuwiki/conf/entities.conf
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/entities.conf
diff --git a/vendors/dokuwiki/conf/interwiki.conf b/mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf
index 0e855f626..0e855f626 100644
--- a/vendors/dokuwiki/conf/interwiki.conf
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/interwiki.conf
diff --git a/vendors/dokuwiki/conf/license.php b/mod/dokuwiki/vendors/dokuwiki/conf/license.php
index 9a753baa7..9a753baa7 100644
--- a/vendors/dokuwiki/conf/license.php
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/license.php
diff --git a/vendors/dokuwiki/conf/local.php b/mod/dokuwiki/vendors/dokuwiki/conf/local.php
index 74334812b..74334812b 100644
--- a/vendors/dokuwiki/conf/local.php
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/local.php
diff --git a/vendors/dokuwiki/conf/local.php.dist b/mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist
index 4af6ea594..4af6ea594 100644
--- a/vendors/dokuwiki/conf/local.php.dist
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/local.php.dist
diff --git a/vendors/dokuwiki/conf/mediameta.php b/mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php
index ba7117643..ba7117643 100644
--- a/vendors/dokuwiki/conf/mediameta.php
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/mediameta.php
diff --git a/vendors/dokuwiki/conf/mime.conf b/mod/dokuwiki/vendors/dokuwiki/conf/mime.conf
index 2e1ce6bb0..2e1ce6bb0 100644
--- a/vendors/dokuwiki/conf/mime.conf
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/mime.conf
diff --git a/vendors/dokuwiki/conf/msg b/mod/dokuwiki/vendors/dokuwiki/conf/msg
index 38bbb133c..38bbb133c 100644
--- a/vendors/dokuwiki/conf/msg
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/msg
diff --git a/vendors/dokuwiki/conf/mysql.conf.php.example b/mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example
index bd67be82c..bd67be82c 100644
--- a/vendors/dokuwiki/conf/mysql.conf.php.example
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/mysql.conf.php.example
diff --git a/vendors/dokuwiki/conf/scheme.conf b/mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf
index 88cb3c44d..88cb3c44d 100644
--- a/vendors/dokuwiki/conf/scheme.conf
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/scheme.conf
diff --git a/vendors/dokuwiki/conf/smileys.conf b/mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf
index 47e4537e2..47e4537e2 100644
--- a/vendors/dokuwiki/conf/smileys.conf
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/smileys.conf
diff --git a/vendors/dokuwiki/conf/users.auth.php b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php
index 6576eeb5f..6576eeb5f 100644
--- a/vendors/dokuwiki/conf/users.auth.php
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php
diff --git a/vendors/dokuwiki/conf/users.auth.php.dist b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist
index 6576eeb5f..6576eeb5f 100644
--- a/vendors/dokuwiki/conf/users.auth.php.dist
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/users.auth.php.dist
diff --git a/vendors/dokuwiki/conf/wordblock.conf b/mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf
index da7143257..da7143257 100644
--- a/vendors/dokuwiki/conf/wordblock.conf
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/wordblock.conf
diff --git a/vendors/dokuwiki/conf/words.aspell.dist b/mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist
index a49138fcb..a49138fcb 100644
--- a/vendors/dokuwiki/conf/words.aspell.dist
+++ b/mod/dokuwiki/vendors/dokuwiki/conf/words.aspell.dist
diff --git a/vendors/dokuwiki/data/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/_dummy
index 37ed18a63..37ed18a63 100644
--- a/vendors/dokuwiki/data/_dummy
+++ b/mod/dokuwiki/vendors/dokuwiki/data/_dummy
diff --git a/vendors/dokuwiki/data/meta/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy
index e69de29bb..e69de29bb 100644
--- a/vendors/dokuwiki/data/meta/_dummy
+++ b/mod/dokuwiki/vendors/dokuwiki/data/attic/_dummy
diff --git a/vendors/dokuwiki/data/tmp/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy
index e69de29bb..e69de29bb 100644
--- a/vendors/dokuwiki/data/tmp/_dummy
+++ b/mod/dokuwiki/vendors/dokuwiki/data/cache/_dummy
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/data/index/_dummy
index e69de29bb..e69de29bb 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/data/index/_dummy
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/locks/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/locks/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/locks/_dummy
diff --git a/vendors/dokuwiki/data/media/wiki/dokuwiki-128.png b/mod/dokuwiki/vendors/dokuwiki/data/media/wiki/dokuwiki-128.png
index b2306ac95..b2306ac95 100644
--- a/vendors/dokuwiki/data/media/wiki/dokuwiki-128.png
+++ b/mod/dokuwiki/vendors/dokuwiki/data/media/wiki/dokuwiki-128.png
Binary files differ
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/meta/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/meta/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/meta/_dummy
diff --git a/vendors/dokuwiki/data/pages/playground/playground.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt
index a2274bda4..a2274bda4 100644
--- a/vendors/dokuwiki/data/pages/playground/playground.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/playground/playground.txt
diff --git a/vendors/dokuwiki/data/pages/sidebar.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt
index 090a66349..090a66349 100644
--- a/vendors/dokuwiki/data/pages/sidebar.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/sidebar.txt
diff --git a/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt
index 2cede366f..2cede366f 100644
--- a/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/dokuwiki.txt
diff --git a/vendors/dokuwiki/data/pages/wiki/syntax.txt b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt
index 7dad453db..7dad453db 100644
--- a/vendors/dokuwiki/data/pages/wiki/syntax.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/data/pages/wiki/syntax.txt
diff --git a/mod/dokuwiki/vendors/dokuwiki/data/tmp/_dummy b/mod/dokuwiki/vendors/dokuwiki/data/tmp/_dummy
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/data/tmp/_dummy
diff --git a/vendors/dokuwiki/doku.php b/mod/dokuwiki/vendors/dokuwiki/doku.php
index 5566577f6..5566577f6 100644
--- a/vendors/dokuwiki/doku.php
+++ b/mod/dokuwiki/vendors/dokuwiki/doku.php
diff --git a/vendors/dokuwiki/feed.php b/mod/dokuwiki/vendors/dokuwiki/feed.php
index e7ea5808c..e7ea5808c 100644
--- a/vendors/dokuwiki/feed.php
+++ b/mod/dokuwiki/vendors/dokuwiki/feed.php
diff --git a/vendors/dokuwiki/inc/DifferenceEngine.php b/mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php
index e28826c1f..e28826c1f 100644
--- a/vendors/dokuwiki/inc/DifferenceEngine.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/DifferenceEngine.php
diff --git a/vendors/dokuwiki/inc/EmailAddressValidator.php b/mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php
index 2ce2093e2..2ce2093e2 100644
--- a/vendors/dokuwiki/inc/EmailAddressValidator.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/EmailAddressValidator.php
diff --git a/vendors/dokuwiki/inc/FeedParser.php b/mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php
index f37888f01..f37888f01 100644
--- a/vendors/dokuwiki/inc/FeedParser.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/FeedParser.php
diff --git a/vendors/dokuwiki/inc/HTTPClient.php b/mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php
index 578d7e7cd..578d7e7cd 100644
--- a/vendors/dokuwiki/inc/HTTPClient.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/HTTPClient.php
diff --git a/vendors/dokuwiki/inc/IXR_Library.php b/mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php
index 2752e31f2..2752e31f2 100644
--- a/vendors/dokuwiki/inc/IXR_Library.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/IXR_Library.php
diff --git a/vendors/dokuwiki/inc/JSON.php b/mod/dokuwiki/vendors/dokuwiki/inc/JSON.php
index ea66c9c32..ea66c9c32 100644
--- a/vendors/dokuwiki/inc/JSON.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/JSON.php
diff --git a/vendors/dokuwiki/inc/JpegMeta.php b/mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php
index cb1d7d694..cb1d7d694 100644
--- a/vendors/dokuwiki/inc/JpegMeta.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/JpegMeta.php
diff --git a/vendors/dokuwiki/inc/SimplePie.php b/mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php
index 1c97e2384..1c97e2384 100644
--- a/vendors/dokuwiki/inc/SimplePie.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/SimplePie.php
diff --git a/vendors/dokuwiki/inc/TarLib.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php
index ab802163b..ab802163b 100644
--- a/vendors/dokuwiki/inc/TarLib.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/TarLib.class.php
diff --git a/vendors/dokuwiki/inc/ZipLib.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php
index 836e9d9e6..836e9d9e6 100644
--- a/vendors/dokuwiki/inc/ZipLib.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/ZipLib.class.php
diff --git a/vendors/dokuwiki/inc/actions.php b/mod/dokuwiki/vendors/dokuwiki/inc/actions.php
index ed3c12666..ed3c12666 100644
--- a/vendors/dokuwiki/inc/actions.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/actions.php
diff --git a/vendors/dokuwiki/inc/adLDAP.php b/mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php
index 94cd8a50d..94cd8a50d 100644
--- a/vendors/dokuwiki/inc/adLDAP.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/adLDAP.php
diff --git a/vendors/dokuwiki/inc/auth.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth.php
index 587e7c4e6..587e7c4e6 100644
--- a/vendors/dokuwiki/inc/auth.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth.php
diff --git a/vendors/dokuwiki/inc/auth/ad.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php
index 9915b9f11..9915b9f11 100644
--- a/vendors/dokuwiki/inc/auth/ad.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ad.class.php
diff --git a/vendors/dokuwiki/inc/auth/basic.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php
index c08422488..c08422488 100644
--- a/vendors/dokuwiki/inc/auth/basic.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/basic.class.php
diff --git a/vendors/dokuwiki/inc/auth/elgg.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php
index c0a291832..c0a291832 100644
--- a/vendors/dokuwiki/inc/auth/elgg.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/elgg.class.php
diff --git a/vendors/dokuwiki/inc/auth/ldap.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php
index c51924135..c51924135 100644
--- a/vendors/dokuwiki/inc/auth/ldap.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/ldap.class.php
diff --git a/vendors/dokuwiki/inc/auth/mysql.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php
index b1c6a3a52..b1c6a3a52 100644
--- a/vendors/dokuwiki/inc/auth/mysql.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/mysql.class.php
diff --git a/vendors/dokuwiki/inc/auth/pgsql.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php
index a6da56af5..a6da56af5 100644
--- a/vendors/dokuwiki/inc/auth/pgsql.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/pgsql.class.php
diff --git a/vendors/dokuwiki/inc/auth/plain.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php
index 94e0c6bc2..94e0c6bc2 100644
--- a/vendors/dokuwiki/inc/auth/plain.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/auth/plain.class.php
diff --git a/vendors/dokuwiki/inc/blowfish.php b/mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php
index 42e3a589a..42e3a589a 100644
--- a/vendors/dokuwiki/inc/blowfish.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/blowfish.php
diff --git a/vendors/dokuwiki/inc/cache.php b/mod/dokuwiki/vendors/dokuwiki/inc/cache.php
index 8e8adfd6d..8e8adfd6d 100644
--- a/vendors/dokuwiki/inc/cache.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/cache.php
diff --git a/vendors/dokuwiki/inc/changelog.php b/mod/dokuwiki/vendors/dokuwiki/inc/changelog.php
index bc2af2de3..bc2af2de3 100644
--- a/vendors/dokuwiki/inc/changelog.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/changelog.php
diff --git a/vendors/dokuwiki/inc/cliopts.php b/mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php
index a3698ab24..a3698ab24 100644
--- a/vendors/dokuwiki/inc/cliopts.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/cliopts.php
diff --git a/vendors/dokuwiki/inc/common.php b/mod/dokuwiki/vendors/dokuwiki/inc/common.php
index 610bd8de6..610bd8de6 100644
--- a/vendors/dokuwiki/inc/common.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/common.php
diff --git a/vendors/dokuwiki/inc/confutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/confutils.php
index 9ec7a551e..9ec7a551e 100644
--- a/vendors/dokuwiki/inc/confutils.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/confutils.php
diff --git a/vendors/dokuwiki/inc/events.php b/mod/dokuwiki/vendors/dokuwiki/inc/events.php
index 1604c73c6..1604c73c6 100644
--- a/vendors/dokuwiki/inc/events.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/events.php
diff --git a/vendors/dokuwiki/inc/feedcreator.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php
index 86113e8c3..86113e8c3 100644
--- a/vendors/dokuwiki/inc/feedcreator.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/feedcreator.class.php
diff --git a/vendors/dokuwiki/inc/form.php b/mod/dokuwiki/vendors/dokuwiki/inc/form.php
index a514526b7..a514526b7 100644
--- a/vendors/dokuwiki/inc/form.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/form.php
diff --git a/vendors/dokuwiki/inc/fulltext.php b/mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php
index c8236e1d4..c8236e1d4 100644
--- a/vendors/dokuwiki/inc/fulltext.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/fulltext.php
diff --git a/vendors/dokuwiki/inc/geshi.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi.php
index abe69a2bd..abe69a2bd 100644
--- a/vendors/dokuwiki/inc/geshi.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi.php
diff --git a/vendors/dokuwiki/inc/geshi/abap.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php
index 229de9891..229de9891 100644
--- a/vendors/dokuwiki/inc/geshi/abap.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/abap.php
diff --git a/vendors/dokuwiki/inc/geshi/actionscript-french.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php
index e81605098..e81605098 100644
--- a/vendors/dokuwiki/inc/geshi/actionscript-french.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript-french.php
diff --git a/vendors/dokuwiki/inc/geshi/actionscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php
index 016dc8e90..016dc8e90 100644
--- a/vendors/dokuwiki/inc/geshi/actionscript.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript.php
diff --git a/vendors/dokuwiki/inc/geshi/actionscript3.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php
index a54e9d4df..a54e9d4df 100644
--- a/vendors/dokuwiki/inc/geshi/actionscript3.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/actionscript3.php
diff --git a/vendors/dokuwiki/inc/geshi/ada.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php
index 530ed5e4c..530ed5e4c 100644
--- a/vendors/dokuwiki/inc/geshi/ada.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ada.php
diff --git a/vendors/dokuwiki/inc/geshi/apache.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php
index f319e3e3c..f319e3e3c 100644
--- a/vendors/dokuwiki/inc/geshi/apache.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apache.php
diff --git a/vendors/dokuwiki/inc/geshi/applescript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php
index 85e3d6d0d..85e3d6d0d 100644
--- a/vendors/dokuwiki/inc/geshi/applescript.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/applescript.php
diff --git a/vendors/dokuwiki/inc/geshi/apt_sources.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php
index 891c10e5e..891c10e5e 100644
--- a/vendors/dokuwiki/inc/geshi/apt_sources.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/apt_sources.php
diff --git a/vendors/dokuwiki/inc/geshi/asm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php
index 2efeac9dc..2efeac9dc 100644
--- a/vendors/dokuwiki/inc/geshi/asm.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asm.php
diff --git a/vendors/dokuwiki/inc/geshi/asp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php
index 7bfec11e1..7bfec11e1 100644
--- a/vendors/dokuwiki/inc/geshi/asp.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/asp.php
diff --git a/vendors/dokuwiki/inc/geshi/autoit.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php
index 526fe5d99..526fe5d99 100644
--- a/vendors/dokuwiki/inc/geshi/autoit.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/autoit.php
diff --git a/vendors/dokuwiki/inc/geshi/avisynth.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php
index c0526e956..c0526e956 100644
--- a/vendors/dokuwiki/inc/geshi/avisynth.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/avisynth.php
diff --git a/vendors/dokuwiki/inc/geshi/bash.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php
index bb0a571ba..bb0a571ba 100644
--- a/vendors/dokuwiki/inc/geshi/bash.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bash.php
diff --git a/vendors/dokuwiki/inc/geshi/basic4gl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php
index 5e3330930..5e3330930 100644
--- a/vendors/dokuwiki/inc/geshi/basic4gl.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/basic4gl.php
diff --git a/vendors/dokuwiki/inc/geshi/bf.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php
index c4be922e0..c4be922e0 100644
--- a/vendors/dokuwiki/inc/geshi/bf.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bf.php
diff --git a/vendors/dokuwiki/inc/geshi/blitzbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php
index 3ad5eabf0..3ad5eabf0 100644
--- a/vendors/dokuwiki/inc/geshi/blitzbasic.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/blitzbasic.php
diff --git a/vendors/dokuwiki/inc/geshi/bnf.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php
index 0032acf48..0032acf48 100644
--- a/vendors/dokuwiki/inc/geshi/bnf.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/bnf.php
diff --git a/vendors/dokuwiki/inc/geshi/boo.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php
index d555dd4a2..d555dd4a2 100644
--- a/vendors/dokuwiki/inc/geshi/boo.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/boo.php
diff --git a/vendors/dokuwiki/inc/geshi/c.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php
index 86f576ef6..86f576ef6 100644
--- a/vendors/dokuwiki/inc/geshi/c.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c.php
diff --git a/vendors/dokuwiki/inc/geshi/c_mac.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php
index 46a3600fe..46a3600fe 100644
--- a/vendors/dokuwiki/inc/geshi/c_mac.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/c_mac.php
diff --git a/vendors/dokuwiki/inc/geshi/caddcl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php
index 12e1d3b75..12e1d3b75 100644
--- a/vendors/dokuwiki/inc/geshi/caddcl.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/caddcl.php
diff --git a/vendors/dokuwiki/inc/geshi/cadlisp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php
index c537370d5..c537370d5 100644
--- a/vendors/dokuwiki/inc/geshi/cadlisp.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cadlisp.php
diff --git a/vendors/dokuwiki/inc/geshi/cfdg.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php
index 5091ffa4c..5091ffa4c 100644
--- a/vendors/dokuwiki/inc/geshi/cfdg.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfdg.php
diff --git a/vendors/dokuwiki/inc/geshi/cfm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php
index ac81695ab..ac81695ab 100644
--- a/vendors/dokuwiki/inc/geshi/cfm.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cfm.php
diff --git a/vendors/dokuwiki/inc/geshi/cil.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php
index 994f86316..994f86316 100644
--- a/vendors/dokuwiki/inc/geshi/cil.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cil.php
diff --git a/vendors/dokuwiki/inc/geshi/cobol.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php
index 9adae16e3..9adae16e3 100644
--- a/vendors/dokuwiki/inc/geshi/cobol.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cobol.php
diff --git a/vendors/dokuwiki/inc/geshi/cpp-qt.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php
index 43105de3d..43105de3d 100644
--- a/vendors/dokuwiki/inc/geshi/cpp-qt.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp-qt.php
diff --git a/vendors/dokuwiki/inc/geshi/cpp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php
index 264ef638d..264ef638d 100644
--- a/vendors/dokuwiki/inc/geshi/cpp.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/cpp.php
diff --git a/vendors/dokuwiki/inc/geshi/csharp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php
index 0f8a5e2a3..0f8a5e2a3 100644
--- a/vendors/dokuwiki/inc/geshi/csharp.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/csharp.php
diff --git a/vendors/dokuwiki/inc/geshi/css.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php
index f6386bdc0..f6386bdc0 100644
--- a/vendors/dokuwiki/inc/geshi/css.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/css.php
diff --git a/vendors/dokuwiki/inc/geshi/d.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php
index 691091809..691091809 100644
--- a/vendors/dokuwiki/inc/geshi/d.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/d.php
diff --git a/vendors/dokuwiki/inc/geshi/dcs.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php
index 0f6bad372..0f6bad372 100644
--- a/vendors/dokuwiki/inc/geshi/dcs.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dcs.php
diff --git a/vendors/dokuwiki/inc/geshi/delphi.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php
index 9d7ad7e7d..9d7ad7e7d 100644
--- a/vendors/dokuwiki/inc/geshi/delphi.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/delphi.php
diff --git a/vendors/dokuwiki/inc/geshi/diff.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php
index b4703c1d2..b4703c1d2 100644
--- a/vendors/dokuwiki/inc/geshi/diff.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/diff.php
diff --git a/vendors/dokuwiki/inc/geshi/div.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php
index 0e249740c..0e249740c 100644
--- a/vendors/dokuwiki/inc/geshi/div.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/div.php
diff --git a/vendors/dokuwiki/inc/geshi/dos.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php
index bec3de129..bec3de129 100644
--- a/vendors/dokuwiki/inc/geshi/dos.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dos.php
diff --git a/vendors/dokuwiki/inc/geshi/dot.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php
index c45a74af7..c45a74af7 100644
--- a/vendors/dokuwiki/inc/geshi/dot.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/dot.php
diff --git a/vendors/dokuwiki/inc/geshi/eiffel.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php
index ab7abf974..ab7abf974 100644
--- a/vendors/dokuwiki/inc/geshi/eiffel.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/eiffel.php
diff --git a/vendors/dokuwiki/inc/geshi/email.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php
index a0a744c6d..a0a744c6d 100644
--- a/vendors/dokuwiki/inc/geshi/email.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/email.php
diff --git a/vendors/dokuwiki/inc/geshi/fortran.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php
index 26dc9b19d..26dc9b19d 100644
--- a/vendors/dokuwiki/inc/geshi/fortran.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/fortran.php
diff --git a/vendors/dokuwiki/inc/geshi/freebasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php
index 780305ba3..780305ba3 100644
--- a/vendors/dokuwiki/inc/geshi/freebasic.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/freebasic.php
diff --git a/vendors/dokuwiki/inc/geshi/genero.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php
index 1e3d7efb6..1e3d7efb6 100644
--- a/vendors/dokuwiki/inc/geshi/genero.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/genero.php
diff --git a/vendors/dokuwiki/inc/geshi/gettext.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php
index a1dcd8c8a..a1dcd8c8a 100644
--- a/vendors/dokuwiki/inc/geshi/gettext.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gettext.php
diff --git a/vendors/dokuwiki/inc/geshi/glsl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php
index 9b31fa482..9b31fa482 100644
--- a/vendors/dokuwiki/inc/geshi/glsl.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/glsl.php
diff --git a/vendors/dokuwiki/inc/geshi/gml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php
index da3d3a8e8..da3d3a8e8 100644
--- a/vendors/dokuwiki/inc/geshi/gml.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gml.php
diff --git a/vendors/dokuwiki/inc/geshi/gnuplot.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php
index 863d0dbd6..863d0dbd6 100644
--- a/vendors/dokuwiki/inc/geshi/gnuplot.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/gnuplot.php
diff --git a/vendors/dokuwiki/inc/geshi/groovy.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php
index 7db153c75..7db153c75 100644
--- a/vendors/dokuwiki/inc/geshi/groovy.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/groovy.php
diff --git a/vendors/dokuwiki/inc/geshi/haskell.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php
index f0e570f1c..f0e570f1c 100644
--- a/vendors/dokuwiki/inc/geshi/haskell.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/haskell.php
diff --git a/vendors/dokuwiki/inc/geshi/hq9plus.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php
index 2a5c429ca..2a5c429ca 100644
--- a/vendors/dokuwiki/inc/geshi/hq9plus.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/hq9plus.php
diff --git a/vendors/dokuwiki/inc/geshi/html4strict.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php
index 314351523..314351523 100644
--- a/vendors/dokuwiki/inc/geshi/html4strict.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/html4strict.php
diff --git a/vendors/dokuwiki/inc/geshi/idl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php
index 9160fd150..9160fd150 100644
--- a/vendors/dokuwiki/inc/geshi/idl.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/idl.php
diff --git a/vendors/dokuwiki/inc/geshi/ini.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php
index 365b4d6f8..365b4d6f8 100644
--- a/vendors/dokuwiki/inc/geshi/ini.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ini.php
diff --git a/vendors/dokuwiki/inc/geshi/inno.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php
index 99563514d..99563514d 100644
--- a/vendors/dokuwiki/inc/geshi/inno.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/inno.php
diff --git a/vendors/dokuwiki/inc/geshi/intercal.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php
index a58960089..a58960089 100644
--- a/vendors/dokuwiki/inc/geshi/intercal.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/intercal.php
diff --git a/vendors/dokuwiki/inc/geshi/io.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php
index 7ec53a881..7ec53a881 100644
--- a/vendors/dokuwiki/inc/geshi/io.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/io.php
diff --git a/vendors/dokuwiki/inc/geshi/java.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php
index d8a2d5e4d..d8a2d5e4d 100644
--- a/vendors/dokuwiki/inc/geshi/java.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java.php
diff --git a/vendors/dokuwiki/inc/geshi/java5.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php
index 34696d760..34696d760 100644
--- a/vendors/dokuwiki/inc/geshi/java5.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/java5.php
diff --git a/vendors/dokuwiki/inc/geshi/javascript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php
index 4ffef2b2e..4ffef2b2e 100644
--- a/vendors/dokuwiki/inc/geshi/javascript.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/javascript.php
diff --git a/vendors/dokuwiki/inc/geshi/kixtart.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php
index bdffd5875..bdffd5875 100644
--- a/vendors/dokuwiki/inc/geshi/kixtart.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/kixtart.php
diff --git a/vendors/dokuwiki/inc/geshi/klonec.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php
index 03d64a166..03d64a166 100644
--- a/vendors/dokuwiki/inc/geshi/klonec.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonec.php
diff --git a/vendors/dokuwiki/inc/geshi/klonecpp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php
index fd2d53864..fd2d53864 100644
--- a/vendors/dokuwiki/inc/geshi/klonecpp.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/klonecpp.php
diff --git a/vendors/dokuwiki/inc/geshi/latex.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php
index bad2c1861..bad2c1861 100644
--- a/vendors/dokuwiki/inc/geshi/latex.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/latex.php
diff --git a/vendors/dokuwiki/inc/geshi/lisp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php
index aa492058b..aa492058b 100644
--- a/vendors/dokuwiki/inc/geshi/lisp.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lisp.php
diff --git a/vendors/dokuwiki/inc/geshi/locobasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php
index a799d6900..a799d6900 100644
--- a/vendors/dokuwiki/inc/geshi/locobasic.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/locobasic.php
diff --git a/vendors/dokuwiki/inc/geshi/lolcode.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php
index fc60e3e9f..fc60e3e9f 100644
--- a/vendors/dokuwiki/inc/geshi/lolcode.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lolcode.php
diff --git a/vendors/dokuwiki/inc/geshi/lotusformulas.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php
index e82d6bf3d..e82d6bf3d 100644
--- a/vendors/dokuwiki/inc/geshi/lotusformulas.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusformulas.php
diff --git a/vendors/dokuwiki/inc/geshi/lotusscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php
index 5272377b1..5272377b1 100644
--- a/vendors/dokuwiki/inc/geshi/lotusscript.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lotusscript.php
diff --git a/vendors/dokuwiki/inc/geshi/lscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php
index 1a5b0726e..1a5b0726e 100644
--- a/vendors/dokuwiki/inc/geshi/lscript.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lscript.php
diff --git a/vendors/dokuwiki/inc/geshi/lsl2.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php
index 0b62ee8b7..0b62ee8b7 100644
--- a/vendors/dokuwiki/inc/geshi/lsl2.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lsl2.php
diff --git a/vendors/dokuwiki/inc/geshi/lua.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php
index f85086bb2..f85086bb2 100644
--- a/vendors/dokuwiki/inc/geshi/lua.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/lua.php
diff --git a/vendors/dokuwiki/inc/geshi/m68k.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php
index cc5807c6f..cc5807c6f 100644
--- a/vendors/dokuwiki/inc/geshi/m68k.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/m68k.php
diff --git a/vendors/dokuwiki/inc/geshi/make.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php
index f01209ebf..f01209ebf 100644
--- a/vendors/dokuwiki/inc/geshi/make.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/make.php
diff --git a/vendors/dokuwiki/inc/geshi/matlab.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php
index f7b649573..f7b649573 100644
--- a/vendors/dokuwiki/inc/geshi/matlab.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/matlab.php
diff --git a/vendors/dokuwiki/inc/geshi/mirc.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php
index bc773458c..bc773458c 100644
--- a/vendors/dokuwiki/inc/geshi/mirc.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mirc.php
diff --git a/vendors/dokuwiki/inc/geshi/modula3.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php
index a1f04ca59..a1f04ca59 100644
--- a/vendors/dokuwiki/inc/geshi/modula3.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/modula3.php
diff --git a/vendors/dokuwiki/inc/geshi/mpasm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php
index 53aa9e7a1..53aa9e7a1 100644
--- a/vendors/dokuwiki/inc/geshi/mpasm.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mpasm.php
diff --git a/vendors/dokuwiki/inc/geshi/mxml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php
index d34a92531..d34a92531 100644
--- a/vendors/dokuwiki/inc/geshi/mxml.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mxml.php
diff --git a/vendors/dokuwiki/inc/geshi/mysql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php
index f41092c16..f41092c16 100644
--- a/vendors/dokuwiki/inc/geshi/mysql.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/mysql.php
diff --git a/vendors/dokuwiki/inc/geshi/nsis.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php
index 63767b025..63767b025 100644
--- a/vendors/dokuwiki/inc/geshi/nsis.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/nsis.php
diff --git a/vendors/dokuwiki/inc/geshi/oberon2.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php
index 4e4223f4f..4e4223f4f 100644
--- a/vendors/dokuwiki/inc/geshi/oberon2.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oberon2.php
diff --git a/vendors/dokuwiki/inc/geshi/objc.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php
index ec8d18e72..ec8d18e72 100644
--- a/vendors/dokuwiki/inc/geshi/objc.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/objc.php
diff --git a/vendors/dokuwiki/inc/geshi/ocaml-brief.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php
index c26a334de..c26a334de 100644
--- a/vendors/dokuwiki/inc/geshi/ocaml-brief.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml-brief.php
diff --git a/vendors/dokuwiki/inc/geshi/ocaml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php
index 505149c31..505149c31 100644
--- a/vendors/dokuwiki/inc/geshi/ocaml.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ocaml.php
diff --git a/vendors/dokuwiki/inc/geshi/oobas.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php
index b4f95512a..b4f95512a 100644
--- a/vendors/dokuwiki/inc/geshi/oobas.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oobas.php
diff --git a/vendors/dokuwiki/inc/geshi/oracle11.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php
index e5417d7d0..e5417d7d0 100644
--- a/vendors/dokuwiki/inc/geshi/oracle11.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle11.php
diff --git a/vendors/dokuwiki/inc/geshi/oracle8.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php
index d216db0a1..d216db0a1 100644
--- a/vendors/dokuwiki/inc/geshi/oracle8.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/oracle8.php
diff --git a/vendors/dokuwiki/inc/geshi/pascal.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php
index 01a66bfa0..01a66bfa0 100644
--- a/vendors/dokuwiki/inc/geshi/pascal.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pascal.php
diff --git a/vendors/dokuwiki/inc/geshi/per.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php
index ea9c75f8e..ea9c75f8e 100644
--- a/vendors/dokuwiki/inc/geshi/per.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/per.php
diff --git a/vendors/dokuwiki/inc/geshi/perl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php
index 7c212515e..7c212515e 100644
--- a/vendors/dokuwiki/inc/geshi/perl.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/perl.php
diff --git a/vendors/dokuwiki/inc/geshi/php-brief.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php
index 2a5d78611..2a5d78611 100644
--- a/vendors/dokuwiki/inc/geshi/php-brief.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php-brief.php
diff --git a/vendors/dokuwiki/inc/geshi/php.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php
index b96c947ed..b96c947ed 100644
--- a/vendors/dokuwiki/inc/geshi/php.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/php.php
diff --git a/vendors/dokuwiki/inc/geshi/pic16.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php
index f25183ffb..f25183ffb 100644
--- a/vendors/dokuwiki/inc/geshi/pic16.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pic16.php
diff --git a/vendors/dokuwiki/inc/geshi/pixelbender.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php
index b65e228a1..b65e228a1 100644
--- a/vendors/dokuwiki/inc/geshi/pixelbender.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/pixelbender.php
diff --git a/vendors/dokuwiki/inc/geshi/plsql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php
index 6534a1922..6534a1922 100644
--- a/vendors/dokuwiki/inc/geshi/plsql.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/plsql.php
diff --git a/vendors/dokuwiki/inc/geshi/povray.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php
index af6c443da..af6c443da 100644
--- a/vendors/dokuwiki/inc/geshi/povray.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/povray.php
diff --git a/vendors/dokuwiki/inc/geshi/powershell.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php
index e427059d3..e427059d3 100644
--- a/vendors/dokuwiki/inc/geshi/powershell.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/powershell.php
diff --git a/vendors/dokuwiki/inc/geshi/progress.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php
index 2d6024e74..2d6024e74 100644
--- a/vendors/dokuwiki/inc/geshi/progress.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/progress.php
diff --git a/vendors/dokuwiki/inc/geshi/prolog.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php
index fa9e03a63..fa9e03a63 100644
--- a/vendors/dokuwiki/inc/geshi/prolog.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/prolog.php
diff --git a/vendors/dokuwiki/inc/geshi/providex.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php
index f24a57d18..f24a57d18 100644
--- a/vendors/dokuwiki/inc/geshi/providex.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/providex.php
diff --git a/vendors/dokuwiki/inc/geshi/python.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php
index 6f378f434..6f378f434 100644
--- a/vendors/dokuwiki/inc/geshi/python.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/python.php
diff --git a/vendors/dokuwiki/inc/geshi/qbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php
index e3b5df8a1..e3b5df8a1 100644
--- a/vendors/dokuwiki/inc/geshi/qbasic.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/qbasic.php
diff --git a/vendors/dokuwiki/inc/geshi/rails.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php
index cc6e079b0..cc6e079b0 100644
--- a/vendors/dokuwiki/inc/geshi/rails.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rails.php
diff --git a/vendors/dokuwiki/inc/geshi/rebol.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php
index 97eff1f32..97eff1f32 100644
--- a/vendors/dokuwiki/inc/geshi/rebol.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/rebol.php
diff --git a/vendors/dokuwiki/inc/geshi/reg.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php
index 59199f743..59199f743 100644
--- a/vendors/dokuwiki/inc/geshi/reg.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/reg.php
diff --git a/vendors/dokuwiki/inc/geshi/robots.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php
index af5fe1426..af5fe1426 100644
--- a/vendors/dokuwiki/inc/geshi/robots.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/robots.php
diff --git a/vendors/dokuwiki/inc/geshi/ruby.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php
index 8c2b7d829..8c2b7d829 100644
--- a/vendors/dokuwiki/inc/geshi/ruby.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/ruby.php
diff --git a/vendors/dokuwiki/inc/geshi/sas.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php
index bc6899716..bc6899716 100644
--- a/vendors/dokuwiki/inc/geshi/sas.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sas.php
diff --git a/vendors/dokuwiki/inc/geshi/scala.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php
index 0eae52d92..0eae52d92 100644
--- a/vendors/dokuwiki/inc/geshi/scala.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scala.php
diff --git a/vendors/dokuwiki/inc/geshi/scheme.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php
index 1fffcb248..1fffcb248 100644
--- a/vendors/dokuwiki/inc/geshi/scheme.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scheme.php
diff --git a/vendors/dokuwiki/inc/geshi/scilab.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php
index 3d66d810a..3d66d810a 100644
--- a/vendors/dokuwiki/inc/geshi/scilab.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/scilab.php
diff --git a/vendors/dokuwiki/inc/geshi/sdlbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php
index b756df514..b756df514 100644
--- a/vendors/dokuwiki/inc/geshi/sdlbasic.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sdlbasic.php
diff --git a/vendors/dokuwiki/inc/geshi/smalltalk.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php
index b4d67cc71..b4d67cc71 100644
--- a/vendors/dokuwiki/inc/geshi/smalltalk.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smalltalk.php
diff --git a/vendors/dokuwiki/inc/geshi/smarty.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php
index dcc11f61d..dcc11f61d 100644
--- a/vendors/dokuwiki/inc/geshi/smarty.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/smarty.php
diff --git a/vendors/dokuwiki/inc/geshi/sql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php
index ba91191d1..ba91191d1 100644
--- a/vendors/dokuwiki/inc/geshi/sql.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/sql.php
diff --git a/vendors/dokuwiki/inc/geshi/tcl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php
index 25cb31d5b..25cb31d5b 100644
--- a/vendors/dokuwiki/inc/geshi/tcl.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tcl.php
diff --git a/vendors/dokuwiki/inc/geshi/teraterm.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php
index 5ac9f8743..5ac9f8743 100644
--- a/vendors/dokuwiki/inc/geshi/teraterm.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/teraterm.php
diff --git a/vendors/dokuwiki/inc/geshi/text.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php
index 9183895c2..9183895c2 100644
--- a/vendors/dokuwiki/inc/geshi/text.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/text.php
diff --git a/vendors/dokuwiki/inc/geshi/thinbasic.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php
index b9c9742c7..b9c9742c7 100644
--- a/vendors/dokuwiki/inc/geshi/thinbasic.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/thinbasic.php
diff --git a/vendors/dokuwiki/inc/geshi/tsql.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php
index fca874954..fca874954 100644
--- a/vendors/dokuwiki/inc/geshi/tsql.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/tsql.php
diff --git a/vendors/dokuwiki/inc/geshi/typoscript.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php
index 1e8243c2e..1e8243c2e 100644
--- a/vendors/dokuwiki/inc/geshi/typoscript.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/typoscript.php
diff --git a/vendors/dokuwiki/inc/geshi/vb.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php
index bc43ca4a8..bc43ca4a8 100644
--- a/vendors/dokuwiki/inc/geshi/vb.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vb.php
diff --git a/vendors/dokuwiki/inc/geshi/vbnet.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php
index e9f7c3e43..e9f7c3e43 100644
--- a/vendors/dokuwiki/inc/geshi/vbnet.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vbnet.php
diff --git a/vendors/dokuwiki/inc/geshi/verilog.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php
index ba1766c2d..ba1766c2d 100644
--- a/vendors/dokuwiki/inc/geshi/verilog.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/verilog.php
diff --git a/vendors/dokuwiki/inc/geshi/vhdl.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php
index 14072c9d7..14072c9d7 100644
--- a/vendors/dokuwiki/inc/geshi/vhdl.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vhdl.php
diff --git a/vendors/dokuwiki/inc/geshi/vim.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php
index 3946c4f96..3946c4f96 100644
--- a/vendors/dokuwiki/inc/geshi/vim.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/vim.php
diff --git a/vendors/dokuwiki/inc/geshi/visualfoxpro.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php
index 0cb73c2a0..0cb73c2a0 100644
--- a/vendors/dokuwiki/inc/geshi/visualfoxpro.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualfoxpro.php
diff --git a/vendors/dokuwiki/inc/geshi/visualprolog.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php
index 19eab2de6..19eab2de6 100644
--- a/vendors/dokuwiki/inc/geshi/visualprolog.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/visualprolog.php
diff --git a/vendors/dokuwiki/inc/geshi/whitespace.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php
index 59bbdb8e7..59bbdb8e7 100644
--- a/vendors/dokuwiki/inc/geshi/whitespace.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/whitespace.php
diff --git a/vendors/dokuwiki/inc/geshi/winbatch.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php
index e86b03636..e86b03636 100644
--- a/vendors/dokuwiki/inc/geshi/winbatch.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/winbatch.php
diff --git a/vendors/dokuwiki/inc/geshi/xml.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php
index 1222e9fb9..1222e9fb9 100644
--- a/vendors/dokuwiki/inc/geshi/xml.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xml.php
diff --git a/vendors/dokuwiki/inc/geshi/xorg_conf.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php
index c32c460b3..c32c460b3 100644
--- a/vendors/dokuwiki/inc/geshi/xorg_conf.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xorg_conf.php
diff --git a/vendors/dokuwiki/inc/geshi/xpp.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php
index db0019dd0..db0019dd0 100644
--- a/vendors/dokuwiki/inc/geshi/xpp.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/xpp.php
diff --git a/vendors/dokuwiki/inc/geshi/z80.php b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php
index 2a9b14886..2a9b14886 100644
--- a/vendors/dokuwiki/inc/geshi/z80.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/geshi/z80.php
diff --git a/vendors/dokuwiki/inc/html.php b/mod/dokuwiki/vendors/dokuwiki/inc/html.php
index 0a23370ab..0a23370ab 100644
--- a/vendors/dokuwiki/inc/html.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/html.php
diff --git a/vendors/dokuwiki/inc/httputils.php b/mod/dokuwiki/vendors/dokuwiki/inc/httputils.php
index 324a730b9..324a730b9 100644
--- a/vendors/dokuwiki/inc/httputils.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/httputils.php
diff --git a/vendors/dokuwiki/inc/indexer.php b/mod/dokuwiki/vendors/dokuwiki/inc/indexer.php
index 14af579bb..14af579bb 100644
--- a/vendors/dokuwiki/inc/indexer.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/indexer.php
diff --git a/vendors/dokuwiki/inc/infoutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php
index b43dd40be..b43dd40be 100644
--- a/vendors/dokuwiki/inc/infoutils.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/infoutils.php
diff --git a/vendors/dokuwiki/inc/init.php b/mod/dokuwiki/vendors/dokuwiki/inc/init.php
index eca97f5f7..eca97f5f7 100644
--- a/vendors/dokuwiki/inc/init.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/init.php
diff --git a/vendors/dokuwiki/inc/io.php b/mod/dokuwiki/vendors/dokuwiki/inc/io.php
index 32a6f7b8e..32a6f7b8e 100644
--- a/vendors/dokuwiki/inc/io.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/io.php
diff --git a/vendors/dokuwiki/inc/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php
index fce59d13e..fce59d13e 100644
--- a/vendors/dokuwiki/inc/lang/af/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/af/lang.php
diff --git a/vendors/dokuwiki/inc/lang/ar/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt
index 7edee8a2b..7edee8a2b 100644
--- a/vendors/dokuwiki/inc/lang/ar/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt
index f6d24f413..f6d24f413 100644
--- a/vendors/dokuwiki/inc/lang/ar/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt
index 4d7c4e8e7..4d7c4e8e7 100644
--- a/vendors/dokuwiki/inc/lang/ar/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt
index 0703697b6..0703697b6 100644
--- a/vendors/dokuwiki/inc/lang/ar/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt
index ed1937c2f..ed1937c2f 100644
--- a/vendors/dokuwiki/inc/lang/ar/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt
index a6221b0df..a6221b0df 100644
--- a/vendors/dokuwiki/inc/lang/ar/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt
index d4e1eb43b..d4e1eb43b 100644
--- a/vendors/dokuwiki/inc/lang/ar/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt
index a51fe9436..a51fe9436 100644
--- a/vendors/dokuwiki/inc/lang/ar/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt
index 43840ec26..43840ec26 100644
--- a/vendors/dokuwiki/inc/lang/ar/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/index.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php
index 2ba1f7e9f..2ba1f7e9f 100644
--- a/vendors/dokuwiki/inc/lang/ar/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/lang.php
diff --git a/vendors/dokuwiki/inc/lang/ar/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt
index 72e9be535..72e9be535 100644
--- a/vendors/dokuwiki/inc/lang/ar/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt
index 00ffccdd0..00ffccdd0 100644
--- a/vendors/dokuwiki/inc/lang/ar/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/login.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt
index 541d28da2..541d28da2 100644
--- a/vendors/dokuwiki/inc/lang/ar/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt
index ecaa7fa38..ecaa7fa38 100644
--- a/vendors/dokuwiki/inc/lang/ar/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt
index 2aa2330e1..2aa2330e1 100644
--- a/vendors/dokuwiki/inc/lang/ar/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt
index c537e6b26..c537e6b26 100644
--- a/vendors/dokuwiki/inc/lang/ar/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt
index 6b735e291..6b735e291 100644
--- a/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt
index 3e6c504ff..3e6c504ff 100644
--- a/vendors/dokuwiki/inc/lang/ar/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/read.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt
index 94d68401e..94d68401e 100644
--- a/vendors/dokuwiki/inc/lang/ar/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt
index 57406ddd4..57406ddd4 100644
--- a/vendors/dokuwiki/inc/lang/ar/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/register.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt
index e9f6690ae..e9f6690ae 100644
--- a/vendors/dokuwiki/inc/lang/ar/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt
index 930a4ef5c..930a4ef5c 100644
--- a/vendors/dokuwiki/inc/lang/ar/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt
index 62c05f5e4..62c05f5e4 100644
--- a/vendors/dokuwiki/inc/lang/ar/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt
index 30129071c..30129071c 100644
--- a/vendors/dokuwiki/inc/lang/ar/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt
index bc6eb48ae..bc6eb48ae 100644
--- a/vendors/dokuwiki/inc/lang/ar/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt
index c9894570e..c9894570e 100644
--- a/vendors/dokuwiki/inc/lang/ar/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ar/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt
index 04a5a09d5..04a5a09d5 100644
--- a/vendors/dokuwiki/inc/lang/ar/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ar/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt
index 8d16f68aa..8d16f68aa 100644
--- a/vendors/dokuwiki/inc/lang/bg/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt
index 2b0268ed4..2b0268ed4 100644
--- a/vendors/dokuwiki/inc/lang/bg/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt
index 28801a8ee..28801a8ee 100644
--- a/vendors/dokuwiki/inc/lang/bg/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt
index 51ec4b706..51ec4b706 100644
--- a/vendors/dokuwiki/inc/lang/bg/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt
index 7b1d5788e..7b1d5788e 100644
--- a/vendors/dokuwiki/inc/lang/bg/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt
index 2bd8262c6..2bd8262c6 100644
--- a/vendors/dokuwiki/inc/lang/bg/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt
index 1938e7d9c..1938e7d9c 100644
--- a/vendors/dokuwiki/inc/lang/bg/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt
index 90d376dbc..90d376dbc 100644
--- a/vendors/dokuwiki/inc/lang/bg/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt
index 87e7b26a8..87e7b26a8 100644
--- a/vendors/dokuwiki/inc/lang/bg/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt
index 2ebf5128a..2ebf5128a 100644
--- a/vendors/dokuwiki/inc/lang/bg/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/index.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html
index 0d7fd5232..0d7fd5232 100644
--- a/vendors/dokuwiki/inc/lang/bg/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/install.html
diff --git a/vendors/dokuwiki/inc/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php
index 2c306095d..2c306095d 100644
--- a/vendors/dokuwiki/inc/lang/bg/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/lang.php
diff --git a/vendors/dokuwiki/inc/lang/bg/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt
index 0eecc6729..0eecc6729 100644
--- a/vendors/dokuwiki/inc/lang/bg/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt
index b525f08cf..b525f08cf 100644
--- a/vendors/dokuwiki/inc/lang/bg/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/login.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt
index 8c18767e5..8c18767e5 100644
--- a/vendors/dokuwiki/inc/lang/bg/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt
index fcc1c6257..fcc1c6257 100644
--- a/vendors/dokuwiki/inc/lang/bg/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt
index 0262aef60..0262aef60 100644
--- a/vendors/dokuwiki/inc/lang/bg/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt
index 442f16de2..442f16de2 100644
--- a/vendors/dokuwiki/inc/lang/bg/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt
index 1cd64b151..1cd64b151 100644
--- a/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt
index 89e9a9d70..89e9a9d70 100644
--- a/vendors/dokuwiki/inc/lang/bg/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/read.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt
index 262979e34..262979e34 100644
--- a/vendors/dokuwiki/inc/lang/bg/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt
index 74a07cd90..74a07cd90 100644
--- a/vendors/dokuwiki/inc/lang/bg/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/register.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt
index 7839b0910..7839b0910 100644
--- a/vendors/dokuwiki/inc/lang/bg/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt
index 7b9b9a027..7b9b9a027 100644
--- a/vendors/dokuwiki/inc/lang/bg/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt
index 295f5f6cc..295f5f6cc 100644
--- a/vendors/dokuwiki/inc/lang/bg/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt
index 03e019985..03e019985 100644
--- a/vendors/dokuwiki/inc/lang/bg/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt
index c0b1709fe..c0b1709fe 100644
--- a/vendors/dokuwiki/inc/lang/bg/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt
index 369f4d789..369f4d789 100644
--- a/vendors/dokuwiki/inc/lang/bg/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt
index 51d4f005a..51d4f005a 100644
--- a/vendors/dokuwiki/inc/lang/bg/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt
index 0a6f15297..0a6f15297 100644
--- a/vendors/dokuwiki/inc/lang/bg/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt
index 74f0cdc3e..74f0cdc3e 100644
--- a/vendors/dokuwiki/inc/lang/bg/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/bg/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt
index 1afbae21d..1afbae21d 100644
--- a/vendors/dokuwiki/inc/lang/bg/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/bg/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt
index 628948e86..628948e86 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt
index 6c5c4f90d..6c5c4f90d 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt
index 06a1106f6..06a1106f6 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt
index 67319612d..67319612d 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt
index 39c45d946..39c45d946 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt
index 2b5c60e1c..2b5c60e1c 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt
index e7e814a69..e7e814a69 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt
index e1ca6bf23..e1ca6bf23 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt
index 99188a0e9..99188a0e9 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt
index 5e57c1680..5e57c1680 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/index.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html
index eb77cd648..eb77cd648 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/install.html
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php
index d85cc1c06..d85cc1c06 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/lang.php
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt
index bdb2bdf0e..bdb2bdf0e 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt
index b550c6440..b550c6440 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/login.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt
index e8da6f8de..e8da6f8de 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt
index 93b154425..93b154425 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt
index 434e62dfa..434e62dfa 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt
index 0997f5953..0997f5953 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt
index 919c3d89d..919c3d89d 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt
index 80d96cd45..80d96cd45 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/read.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt
index ca1f5c5ed..ca1f5c5ed 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt
index 7515be6a9..7515be6a9 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/register.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt
index 47b9318bd..47b9318bd 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt
index 2feac0966..2feac0966 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt
index 08e7e043c..08e7e043c 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt
index 80f7e9119..80f7e9119 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt
index 86f282292..86f282292 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt
index 1b4decbe5..1b4decbe5 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt
index 43299b598..43299b598 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt
index 9116fedf0..9116fedf0 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt
index c5a330274..c5a330274 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt
index 718bfe883..718bfe883 100644
--- a/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca-valencia/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt
index 5c0a6d00a..5c0a6d00a 100644
--- a/vendors/dokuwiki/inc/lang/ca/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt
index 9ea165c1f..9ea165c1f 100644
--- a/vendors/dokuwiki/inc/lang/ca/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt
index e2ecaf4f9..e2ecaf4f9 100644
--- a/vendors/dokuwiki/inc/lang/ca/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt
index 53183f0b7..53183f0b7 100644
--- a/vendors/dokuwiki/inc/lang/ca/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt
index e6125e83b..e6125e83b 100644
--- a/vendors/dokuwiki/inc/lang/ca/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt
index 83ca86782..83ca86782 100644
--- a/vendors/dokuwiki/inc/lang/ca/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt
index 68593c2fd..68593c2fd 100644
--- a/vendors/dokuwiki/inc/lang/ca/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt
index 743b0ff55..743b0ff55 100644
--- a/vendors/dokuwiki/inc/lang/ca/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt
index b2f304cbb..b2f304cbb 100644
--- a/vendors/dokuwiki/inc/lang/ca/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt
index 6ba71fd8f..6ba71fd8f 100644
--- a/vendors/dokuwiki/inc/lang/ca/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/index.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html
index e7c8f0b57..e7c8f0b57 100644
--- a/vendors/dokuwiki/inc/lang/ca/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/install.html
diff --git a/vendors/dokuwiki/inc/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php
index 778123445..778123445 100644
--- a/vendors/dokuwiki/inc/lang/ca/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/lang.php
diff --git a/vendors/dokuwiki/inc/lang/ca/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt
index 93487c268..93487c268 100644
--- a/vendors/dokuwiki/inc/lang/ca/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt
index 37ca4d582..37ca4d582 100644
--- a/vendors/dokuwiki/inc/lang/ca/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/login.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt
index eda330954..eda330954 100644
--- a/vendors/dokuwiki/inc/lang/ca/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt
index d0a2db92a..d0a2db92a 100644
--- a/vendors/dokuwiki/inc/lang/ca/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt
index b5089c5eb..b5089c5eb 100644
--- a/vendors/dokuwiki/inc/lang/ca/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt
index fa2f98ca5..fa2f98ca5 100644
--- a/vendors/dokuwiki/inc/lang/ca/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt
index 119c4292d..119c4292d 100644
--- a/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt
index e173ad2dc..e173ad2dc 100644
--- a/vendors/dokuwiki/inc/lang/ca/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/read.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt
index cea2f5cff..cea2f5cff 100644
--- a/vendors/dokuwiki/inc/lang/ca/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt
index a91e6df31..a91e6df31 100644
--- a/vendors/dokuwiki/inc/lang/ca/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/register.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt
index 84bf5f1a4..84bf5f1a4 100644
--- a/vendors/dokuwiki/inc/lang/ca/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt
index cd59f899d..cd59f899d 100644
--- a/vendors/dokuwiki/inc/lang/ca/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt
index 5c044d8e6..5c044d8e6 100644
--- a/vendors/dokuwiki/inc/lang/ca/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt
index bf69aef15..bf69aef15 100644
--- a/vendors/dokuwiki/inc/lang/ca/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt
index b1411824f..b1411824f 100644
--- a/vendors/dokuwiki/inc/lang/ca/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt
index 03be425ed..03be425ed 100644
--- a/vendors/dokuwiki/inc/lang/ca/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt
index 5558d2ff5..5558d2ff5 100644
--- a/vendors/dokuwiki/inc/lang/ca/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt
index 0ba022600..0ba022600 100644
--- a/vendors/dokuwiki/inc/lang/ca/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt
index c282f1f37..c282f1f37 100644
--- a/vendors/dokuwiki/inc/lang/ca/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/ca/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt
index 1b5f5fb36..1b5f5fb36 100644
--- a/vendors/dokuwiki/inc/lang/ca/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ca/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt
index ccfbc4455..ccfbc4455 100644
--- a/vendors/dokuwiki/inc/lang/cs/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt
index 005f8f2df..005f8f2df 100644
--- a/vendors/dokuwiki/inc/lang/cs/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt
index 59430eeae..59430eeae 100644
--- a/vendors/dokuwiki/inc/lang/cs/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt
index 941118db3..941118db3 100644
--- a/vendors/dokuwiki/inc/lang/cs/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt
index 00a8811de..00a8811de 100644
--- a/vendors/dokuwiki/inc/lang/cs/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt
index d49e56993..d49e56993 100644
--- a/vendors/dokuwiki/inc/lang/cs/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt
index ebdfb8d9d..ebdfb8d9d 100644
--- a/vendors/dokuwiki/inc/lang/cs/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt
index 1a135aee3..1a135aee3 100644
--- a/vendors/dokuwiki/inc/lang/cs/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt
index 44f0bc67d..44f0bc67d 100644
--- a/vendors/dokuwiki/inc/lang/cs/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt
index d19626f6f..d19626f6f 100644
--- a/vendors/dokuwiki/inc/lang/cs/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/index.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html
index 726d7c31f..726d7c31f 100644
--- a/vendors/dokuwiki/inc/lang/cs/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/install.html
diff --git a/vendors/dokuwiki/inc/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php
index ffc2a05d7..ffc2a05d7 100644
--- a/vendors/dokuwiki/inc/lang/cs/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/lang.php
diff --git a/vendors/dokuwiki/inc/lang/cs/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt
index 23fd943a1..23fd943a1 100644
--- a/vendors/dokuwiki/inc/lang/cs/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt
index a44ae599a..a44ae599a 100644
--- a/vendors/dokuwiki/inc/lang/cs/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/login.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt
index 9fc68cdce..9fc68cdce 100644
--- a/vendors/dokuwiki/inc/lang/cs/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt
index 091250af7..091250af7 100644
--- a/vendors/dokuwiki/inc/lang/cs/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt
index f601f5899..f601f5899 100644
--- a/vendors/dokuwiki/inc/lang/cs/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt
index 079eda4e7..079eda4e7 100644
--- a/vendors/dokuwiki/inc/lang/cs/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt
index 1199150e2..1199150e2 100644
--- a/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt
index d5b2d73cb..d5b2d73cb 100644
--- a/vendors/dokuwiki/inc/lang/cs/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/read.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt
index e4ca5e9bc..e4ca5e9bc 100644
--- a/vendors/dokuwiki/inc/lang/cs/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt
index b0d6bb1ff..b0d6bb1ff 100644
--- a/vendors/dokuwiki/inc/lang/cs/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/register.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt
index e51ee6bb2..e51ee6bb2 100644
--- a/vendors/dokuwiki/inc/lang/cs/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt
index 1d2aa0d97..1d2aa0d97 100644
--- a/vendors/dokuwiki/inc/lang/cs/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt
index e3744b76f..e3744b76f 100644
--- a/vendors/dokuwiki/inc/lang/cs/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt
index ac045e100..ac045e100 100644
--- a/vendors/dokuwiki/inc/lang/cs/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt
index 48be467b2..48be467b2 100644
--- a/vendors/dokuwiki/inc/lang/cs/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt
index 26d874143..26d874143 100644
--- a/vendors/dokuwiki/inc/lang/cs/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt
index 6ef6411d0..6ef6411d0 100644
--- a/vendors/dokuwiki/inc/lang/cs/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt
index d5eadc66c..d5eadc66c 100644
--- a/vendors/dokuwiki/inc/lang/cs/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt
index 98f860138..98f860138 100644
--- a/vendors/dokuwiki/inc/lang/cs/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/cs/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt
index 75fe58e0c..75fe58e0c 100644
--- a/vendors/dokuwiki/inc/lang/cs/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/cs/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/da/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt
index 3ac4a70df..3ac4a70df 100644
--- a/vendors/dokuwiki/inc/lang/da/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/da/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt
index 2a3d687f1..2a3d687f1 100644
--- a/vendors/dokuwiki/inc/lang/da/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/da/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt
index 6dfa3cc43..6dfa3cc43 100644
--- a/vendors/dokuwiki/inc/lang/da/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/da/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt
index fc38cee63..fc38cee63 100644
--- a/vendors/dokuwiki/inc/lang/da/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/da/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt
index a4fa8b88f..a4fa8b88f 100644
--- a/vendors/dokuwiki/inc/lang/da/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/da/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt
index f77224f2f..f77224f2f 100644
--- a/vendors/dokuwiki/inc/lang/da/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/da/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt
index 69c780140..69c780140 100644
--- a/vendors/dokuwiki/inc/lang/da/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/da/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt
index 0a9ea39dc..0a9ea39dc 100644
--- a/vendors/dokuwiki/inc/lang/da/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/da/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt
index 438363e5d..438363e5d 100644
--- a/vendors/dokuwiki/inc/lang/da/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/da/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt
index 74afb9831..74afb9831 100644
--- a/vendors/dokuwiki/inc/lang/da/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/index.txt
diff --git a/vendors/dokuwiki/inc/lang/da/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html
index 5c53c5546..5c53c5546 100644
--- a/vendors/dokuwiki/inc/lang/da/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/install.html
diff --git a/vendors/dokuwiki/inc/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php
index 56239718b..56239718b 100644
--- a/vendors/dokuwiki/inc/lang/da/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/lang.php
diff --git a/vendors/dokuwiki/inc/lang/da/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt
index 74b677d51..74b677d51 100644
--- a/vendors/dokuwiki/inc/lang/da/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/da/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt
index 039bb0a7a..039bb0a7a 100644
--- a/vendors/dokuwiki/inc/lang/da/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/login.txt
diff --git a/vendors/dokuwiki/inc/lang/da/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt
index 948a265fb..948a265fb 100644
--- a/vendors/dokuwiki/inc/lang/da/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/da/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt
index 1d602c02c..1d602c02c 100644
--- a/vendors/dokuwiki/inc/lang/da/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/da/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt
index aa6896237..aa6896237 100644
--- a/vendors/dokuwiki/inc/lang/da/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/da/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt
index 23e65e89d..23e65e89d 100644
--- a/vendors/dokuwiki/inc/lang/da/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/da/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt
index 3df556e68..3df556e68 100644
--- a/vendors/dokuwiki/inc/lang/da/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/da/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt
index 49f65831b..49f65831b 100644
--- a/vendors/dokuwiki/inc/lang/da/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/read.txt
diff --git a/vendors/dokuwiki/inc/lang/da/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt
index c44fa368e..c44fa368e 100644
--- a/vendors/dokuwiki/inc/lang/da/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/da/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt
index 4ff2ed1eb..4ff2ed1eb 100644
--- a/vendors/dokuwiki/inc/lang/da/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/register.txt
diff --git a/vendors/dokuwiki/inc/lang/da/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt
index d431f7591..d431f7591 100644
--- a/vendors/dokuwiki/inc/lang/da/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/da/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt
index e96861ed2..e96861ed2 100644
--- a/vendors/dokuwiki/inc/lang/da/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/da/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt
index 08f6f2073..08f6f2073 100644
--- a/vendors/dokuwiki/inc/lang/da/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/da/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt
index eca1b589c..eca1b589c 100644
--- a/vendors/dokuwiki/inc/lang/da/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/da/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt
index 3d4890397..3d4890397 100644
--- a/vendors/dokuwiki/inc/lang/da/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/da/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt
index 0fb926720..0fb926720 100644
--- a/vendors/dokuwiki/inc/lang/da/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/da/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt
index e89dd3c46..e89dd3c46 100644
--- a/vendors/dokuwiki/inc/lang/da/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/da/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt
index 2c6ce3f16..2c6ce3f16 100644
--- a/vendors/dokuwiki/inc/lang/da/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/da/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt
index 316463fee..316463fee 100644
--- a/vendors/dokuwiki/inc/lang/da/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/da/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt
index 5a1c0d754..5a1c0d754 100644
--- a/vendors/dokuwiki/inc/lang/da/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/da/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt
index c52f343ea..c52f343ea 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt
index a0ae21faf..a0ae21faf 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt
index aae4c5582..aae4c5582 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt
index a5ae425be..a5ae425be 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt
index ff3bdf9a1..ff3bdf9a1 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt
index 82fbbc252..82fbbc252 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt
index 704c6d1da..704c6d1da 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt
index 15e02c61a..15e02c61a 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt
index 6c1f642cc..6c1f642cc 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt
index fa8dc4663..fa8dc4663 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/index.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html
index b8baa5f97..b8baa5f97 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/install.html
diff --git a/vendors/dokuwiki/inc/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php
index 1747e3288..1747e3288 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/lang.php
diff --git a/vendors/dokuwiki/inc/lang/de-informal/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt
index 4430fc6dd..4430fc6dd 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt
index 5c99c48f1..5c99c48f1 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/login.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt
index 4fd41ad19..4fd41ad19 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt
index 5e261cc89..5e261cc89 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt
index c6243313d..c6243313d 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt
index d3a578f69..d3a578f69 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt
index 538597cfa..538597cfa 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt
index 1c5422a29..1c5422a29 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/read.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt
index c05bbae12..c05bbae12 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt
index 8fe4718dc..8fe4718dc 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/register.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt
index ed37a9505..ed37a9505 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt
index 4dcd4bb4d..4dcd4bb4d 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt
index e4a7be8f1..e4a7be8f1 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt
index 72c57b765..72c57b765 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt
index 65f53c9c1..65f53c9c1 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt
index 443b17723..443b17723 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt
index 952ac911e..952ac911e 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt
index 66c2e8293..66c2e8293 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt
index 72e4a2a6e..72e4a2a6e 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt
index cb3e4c06a..cb3e4c06a 100644
--- a/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de-informal/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/de/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt
index c52f343ea..c52f343ea 100644
--- a/vendors/dokuwiki/inc/lang/de/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/de/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt
index d3bfd0910..d3bfd0910 100644
--- a/vendors/dokuwiki/inc/lang/de/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/de/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt
index aae4c5582..aae4c5582 100644
--- a/vendors/dokuwiki/inc/lang/de/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/de/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt
index d24e5b198..d24e5b198 100644
--- a/vendors/dokuwiki/inc/lang/de/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/de/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt
index b87965067..b87965067 100644
--- a/vendors/dokuwiki/inc/lang/de/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/de/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt
index 82fbbc252..82fbbc252 100644
--- a/vendors/dokuwiki/inc/lang/de/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/de/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt
index 14a5e8495..14a5e8495 100644
--- a/vendors/dokuwiki/inc/lang/de/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/de/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt
index 15e02c61a..15e02c61a 100644
--- a/vendors/dokuwiki/inc/lang/de/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/de/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt
index 6c1f642cc..6c1f642cc 100644
--- a/vendors/dokuwiki/inc/lang/de/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/de/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt
index fa8dc4663..fa8dc4663 100644
--- a/vendors/dokuwiki/inc/lang/de/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/index.txt
diff --git a/vendors/dokuwiki/inc/lang/de/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html
index 15fd1c36b..15fd1c36b 100644
--- a/vendors/dokuwiki/inc/lang/de/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/install.html
diff --git a/vendors/dokuwiki/inc/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php
index d0c1f8b70..d0c1f8b70 100644
--- a/vendors/dokuwiki/inc/lang/de/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/lang.php
diff --git a/vendors/dokuwiki/inc/lang/de/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt
index 6656beece..6656beece 100644
--- a/vendors/dokuwiki/inc/lang/de/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/de/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt
index 6698da614..6698da614 100644
--- a/vendors/dokuwiki/inc/lang/de/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/login.txt
diff --git a/vendors/dokuwiki/inc/lang/de/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt
index fee88d4d8..fee88d4d8 100644
--- a/vendors/dokuwiki/inc/lang/de/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/de/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt
index 7871c67de..7871c67de 100644
--- a/vendors/dokuwiki/inc/lang/de/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/de/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt
index 8a9c6927b..8a9c6927b 100644
--- a/vendors/dokuwiki/inc/lang/de/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/de/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt
index b07ae5091..b07ae5091 100644
--- a/vendors/dokuwiki/inc/lang/de/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/de/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt
index 3aa81bf77..3aa81bf77 100644
--- a/vendors/dokuwiki/inc/lang/de/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/de/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt
index bc011d0ee..bc011d0ee 100644
--- a/vendors/dokuwiki/inc/lang/de/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/read.txt
diff --git a/vendors/dokuwiki/inc/lang/de/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt
index c05bbae12..c05bbae12 100644
--- a/vendors/dokuwiki/inc/lang/de/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/de/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt
index 83684f500..83684f500 100644
--- a/vendors/dokuwiki/inc/lang/de/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/register.txt
diff --git a/vendors/dokuwiki/inc/lang/de/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt
index ed37a9505..ed37a9505 100644
--- a/vendors/dokuwiki/inc/lang/de/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/de/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt
index 2ff639369..2ff639369 100644
--- a/vendors/dokuwiki/inc/lang/de/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/de/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt
index e1bafdd2d..e1bafdd2d 100644
--- a/vendors/dokuwiki/inc/lang/de/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/de/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt
index 56104551b..56104551b 100644
--- a/vendors/dokuwiki/inc/lang/de/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/de/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt
index 65f53c9c1..65f53c9c1 100644
--- a/vendors/dokuwiki/inc/lang/de/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/de/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt
index 0487a940a..0487a940a 100644
--- a/vendors/dokuwiki/inc/lang/de/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/de/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt
index 0d90967a2..0d90967a2 100644
--- a/vendors/dokuwiki/inc/lang/de/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/de/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt
index f19dd13f6..f19dd13f6 100644
--- a/vendors/dokuwiki/inc/lang/de/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/de/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt
index 757729804..757729804 100644
--- a/vendors/dokuwiki/inc/lang/de/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/de/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt
index 14622ebc2..14622ebc2 100644
--- a/vendors/dokuwiki/inc/lang/de/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/de/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/el/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt
index 49e6c657b..49e6c657b 100644
--- a/vendors/dokuwiki/inc/lang/el/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/el/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt
index ea00b959e..ea00b959e 100644
--- a/vendors/dokuwiki/inc/lang/el/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/el/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt
index 572f85791..572f85791 100644
--- a/vendors/dokuwiki/inc/lang/el/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/el/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt
index 27b80b397..27b80b397 100644
--- a/vendors/dokuwiki/inc/lang/el/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/el/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt
index 71e9a04b8..71e9a04b8 100644
--- a/vendors/dokuwiki/inc/lang/el/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/el/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt
index dde065b43..dde065b43 100644
--- a/vendors/dokuwiki/inc/lang/el/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/el/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt
index 3bb15037f..3bb15037f 100644
--- a/vendors/dokuwiki/inc/lang/el/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/el/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt
index 26b52f97a..26b52f97a 100644
--- a/vendors/dokuwiki/inc/lang/el/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/el/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt
index ac6bc5a3d..ac6bc5a3d 100644
--- a/vendors/dokuwiki/inc/lang/el/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/el/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt
index 51f1fc600..51f1fc600 100644
--- a/vendors/dokuwiki/inc/lang/el/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/index.txt
diff --git a/vendors/dokuwiki/inc/lang/el/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html
index 89429d55b..89429d55b 100644
--- a/vendors/dokuwiki/inc/lang/el/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/install.html
diff --git a/vendors/dokuwiki/inc/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php
index 7aee3161d..7aee3161d 100644
--- a/vendors/dokuwiki/inc/lang/el/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/lang.php
diff --git a/vendors/dokuwiki/inc/lang/el/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt
index d2f542c19..d2f542c19 100644
--- a/vendors/dokuwiki/inc/lang/el/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/el/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt
index 3839b7279..3839b7279 100644
--- a/vendors/dokuwiki/inc/lang/el/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/login.txt
diff --git a/vendors/dokuwiki/inc/lang/el/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt
index a5059ca4d..a5059ca4d 100644
--- a/vendors/dokuwiki/inc/lang/el/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/el/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt
index e8d65d6e5..e8d65d6e5 100644
--- a/vendors/dokuwiki/inc/lang/el/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/el/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt
index 9ce347948..9ce347948 100644
--- a/vendors/dokuwiki/inc/lang/el/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/el/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt
index f6709a441..f6709a441 100644
--- a/vendors/dokuwiki/inc/lang/el/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/el/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt
index 03f408819..03f408819 100644
--- a/vendors/dokuwiki/inc/lang/el/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/el/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt
index 2d43c28fc..2d43c28fc 100644
--- a/vendors/dokuwiki/inc/lang/el/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/read.txt
diff --git a/vendors/dokuwiki/inc/lang/el/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt
index cc8051581..cc8051581 100644
--- a/vendors/dokuwiki/inc/lang/el/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/el/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt
index 15d64cba3..15d64cba3 100644
--- a/vendors/dokuwiki/inc/lang/el/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/register.txt
diff --git a/vendors/dokuwiki/inc/lang/el/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt
index 5d516ee31..5d516ee31 100644
--- a/vendors/dokuwiki/inc/lang/el/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/el/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt
index 2b91ed017..2b91ed017 100644
--- a/vendors/dokuwiki/inc/lang/el/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/el/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt
index 7689c3b2b..7689c3b2b 100644
--- a/vendors/dokuwiki/inc/lang/el/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/el/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt
index 87f396292..87f396292 100644
--- a/vendors/dokuwiki/inc/lang/el/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/el/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt
index 212245420..212245420 100644
--- a/vendors/dokuwiki/inc/lang/el/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/el/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt
index bc6eb48ae..bc6eb48ae 100644
--- a/vendors/dokuwiki/inc/lang/el/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/el/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt
index 2963ef348..2963ef348 100644
--- a/vendors/dokuwiki/inc/lang/el/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/el/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt
index ccb9596b6..ccb9596b6 100644
--- a/vendors/dokuwiki/inc/lang/el/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/el/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt
index 52d2f1f53..52d2f1f53 100644
--- a/vendors/dokuwiki/inc/lang/el/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/el/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt
index b54e8ef77..b54e8ef77 100644
--- a/vendors/dokuwiki/inc/lang/el/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/el/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/en/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt
index cfd21b217..cfd21b217 100644
--- a/vendors/dokuwiki/inc/lang/en/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/en/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt
index 3ec46cf4e..3ec46cf4e 100644
--- a/vendors/dokuwiki/inc/lang/en/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/en/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt
index 5b40b84ea..5b40b84ea 100644
--- a/vendors/dokuwiki/inc/lang/en/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/en/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt
index 624f17b21..624f17b21 100644
--- a/vendors/dokuwiki/inc/lang/en/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/en/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt
index 3ac72820c..3ac72820c 100644
--- a/vendors/dokuwiki/inc/lang/en/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/en/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt
index 934534d42..934534d42 100644
--- a/vendors/dokuwiki/inc/lang/en/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/en/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt
index e84d34a5b..e84d34a5b 100644
--- a/vendors/dokuwiki/inc/lang/en/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/en/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt
index 48c9c296d..48c9c296d 100644
--- a/vendors/dokuwiki/inc/lang/en/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/en/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt
index 638216b07..638216b07 100644
--- a/vendors/dokuwiki/inc/lang/en/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/en/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt
index 5adbfd898..5adbfd898 100644
--- a/vendors/dokuwiki/inc/lang/en/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/index.txt
diff --git a/vendors/dokuwiki/inc/lang/en/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html
index 0f94839a6..0f94839a6 100644
--- a/vendors/dokuwiki/inc/lang/en/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/install.html
diff --git a/vendors/dokuwiki/inc/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php
index cf5173d05..cf5173d05 100644
--- a/vendors/dokuwiki/inc/lang/en/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/lang.php
diff --git a/vendors/dokuwiki/inc/lang/en/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt
index af6347a96..af6347a96 100644
--- a/vendors/dokuwiki/inc/lang/en/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/en/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt
index 2004ea198..2004ea198 100644
--- a/vendors/dokuwiki/inc/lang/en/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/login.txt
diff --git a/vendors/dokuwiki/inc/lang/en/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt
index 44a3f6553..44a3f6553 100644
--- a/vendors/dokuwiki/inc/lang/en/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/en/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt
index 848d4df09..848d4df09 100644
--- a/vendors/dokuwiki/inc/lang/en/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/en/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt
index 0b21bf3f0..0b21bf3f0 100644
--- a/vendors/dokuwiki/inc/lang/en/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/en/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt
index 16c96c5d7..16c96c5d7 100644
--- a/vendors/dokuwiki/inc/lang/en/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/en/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt
index a342ff95a..a342ff95a 100644
--- a/vendors/dokuwiki/inc/lang/en/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/en/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt
index 9f56d81ad..9f56d81ad 100644
--- a/vendors/dokuwiki/inc/lang/en/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/read.txt
diff --git a/vendors/dokuwiki/inc/lang/en/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt
index 3f7b58c46..3f7b58c46 100644
--- a/vendors/dokuwiki/inc/lang/en/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/en/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt
index db68d4f2f..db68d4f2f 100644
--- a/vendors/dokuwiki/inc/lang/en/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/register.txt
diff --git a/vendors/dokuwiki/inc/lang/en/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt
index f02015767..f02015767 100644
--- a/vendors/dokuwiki/inc/lang/en/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/en/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt
index 98c8c756b..98c8c756b 100644
--- a/vendors/dokuwiki/inc/lang/en/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/en/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt
index dd5f35b8e..dd5f35b8e 100644
--- a/vendors/dokuwiki/inc/lang/en/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/en/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt
index e357d6cdd..e357d6cdd 100644
--- a/vendors/dokuwiki/inc/lang/en/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/en/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt
index 3608de36b..3608de36b 100644
--- a/vendors/dokuwiki/inc/lang/en/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/en/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt
index afc301659..afc301659 100644
--- a/vendors/dokuwiki/inc/lang/en/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/en/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt
index 673c4c32a..673c4c32a 100644
--- a/vendors/dokuwiki/inc/lang/en/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/en/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt
index b929fee83..b929fee83 100644
--- a/vendors/dokuwiki/inc/lang/en/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/en/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt
index 6fa196730..6fa196730 100644
--- a/vendors/dokuwiki/inc/lang/en/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/en/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt
index f0f7d759d..f0f7d759d 100644
--- a/vendors/dokuwiki/inc/lang/en/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/en/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt
index 2ede2763c..2ede2763c 100644
--- a/vendors/dokuwiki/inc/lang/eo/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt
index ed2949b10..ed2949b10 100644
--- a/vendors/dokuwiki/inc/lang/eo/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt
index cd0cca9c6..cd0cca9c6 100644
--- a/vendors/dokuwiki/inc/lang/eo/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt
index 0d7ede0b0..0d7ede0b0 100644
--- a/vendors/dokuwiki/inc/lang/eo/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt
index b35fe0412..b35fe0412 100644
--- a/vendors/dokuwiki/inc/lang/eo/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt
index ac5474ef1..ac5474ef1 100644
--- a/vendors/dokuwiki/inc/lang/eo/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt
index fa43ecb74..fa43ecb74 100644
--- a/vendors/dokuwiki/inc/lang/eo/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt
index c1ca31e1d..c1ca31e1d 100644
--- a/vendors/dokuwiki/inc/lang/eo/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt
index 4bab50b93..4bab50b93 100644
--- a/vendors/dokuwiki/inc/lang/eo/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt
index 08bf3c894..08bf3c894 100644
--- a/vendors/dokuwiki/inc/lang/eo/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/index.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html
index 74bbe15e2..74bbe15e2 100644
--- a/vendors/dokuwiki/inc/lang/eo/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/install.html
diff --git a/vendors/dokuwiki/inc/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php
index e2c25ae43..e2c25ae43 100644
--- a/vendors/dokuwiki/inc/lang/eo/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/lang.php
diff --git a/vendors/dokuwiki/inc/lang/eo/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt
index 68963da75..68963da75 100644
--- a/vendors/dokuwiki/inc/lang/eo/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt
index 2b9b34340..2b9b34340 100644
--- a/vendors/dokuwiki/inc/lang/eo/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/login.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt
index 5e83b324b..5e83b324b 100644
--- a/vendors/dokuwiki/inc/lang/eo/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt
index 4ddcd33be..4ddcd33be 100644
--- a/vendors/dokuwiki/inc/lang/eo/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt
index 6dffbaa1c..6dffbaa1c 100644
--- a/vendors/dokuwiki/inc/lang/eo/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt
index 784f693e6..784f693e6 100644
--- a/vendors/dokuwiki/inc/lang/eo/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt
index f227752b1..f227752b1 100644
--- a/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt
index 734eb1654..734eb1654 100644
--- a/vendors/dokuwiki/inc/lang/eo/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/read.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt
index e03144668..e03144668 100644
--- a/vendors/dokuwiki/inc/lang/eo/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt
index 57d5ca1f4..57d5ca1f4 100644
--- a/vendors/dokuwiki/inc/lang/eo/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/register.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt
index c832eca42..c832eca42 100644
--- a/vendors/dokuwiki/inc/lang/eo/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt
index 57b4b0408..57b4b0408 100644
--- a/vendors/dokuwiki/inc/lang/eo/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt
index 4f37bb125..4f37bb125 100644
--- a/vendors/dokuwiki/inc/lang/eo/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt
index a940c503d..a940c503d 100644
--- a/vendors/dokuwiki/inc/lang/eo/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt
index e3a8a1747..e3a8a1747 100644
--- a/vendors/dokuwiki/inc/lang/eo/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt
index 2c18cb319..2c18cb319 100644
--- a/vendors/dokuwiki/inc/lang/eo/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt
index 074a99351..074a99351 100644
--- a/vendors/dokuwiki/inc/lang/eo/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt
index a3de0c840..a3de0c840 100644
--- a/vendors/dokuwiki/inc/lang/eo/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt
index e7c327a60..e7c327a60 100644
--- a/vendors/dokuwiki/inc/lang/eo/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/eo/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt
index 64bb19e5c..64bb19e5c 100644
--- a/vendors/dokuwiki/inc/lang/eo/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eo/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/es/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt
index 320b1c5be..320b1c5be 100644
--- a/vendors/dokuwiki/inc/lang/es/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/es/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt
index 8e1b0f813..8e1b0f813 100644
--- a/vendors/dokuwiki/inc/lang/es/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/es/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt
index 4de93ef34..4de93ef34 100644
--- a/vendors/dokuwiki/inc/lang/es/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/es/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt
index 265ac1ee6..265ac1ee6 100644
--- a/vendors/dokuwiki/inc/lang/es/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/es/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt
index d7b37404b..d7b37404b 100644
--- a/vendors/dokuwiki/inc/lang/es/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/es/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt
index e0e9e08ab..e0e9e08ab 100644
--- a/vendors/dokuwiki/inc/lang/es/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/es/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt
index 054d618b3..054d618b3 100644
--- a/vendors/dokuwiki/inc/lang/es/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/es/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt
index 55c3c1dc5..55c3c1dc5 100644
--- a/vendors/dokuwiki/inc/lang/es/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/es/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt
index 4b587b7ce..4b587b7ce 100644
--- a/vendors/dokuwiki/inc/lang/es/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/es/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt
index 148e5f406..148e5f406 100644
--- a/vendors/dokuwiki/inc/lang/es/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/index.txt
diff --git a/vendors/dokuwiki/inc/lang/es/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html
index c16d4c47c..c16d4c47c 100644
--- a/vendors/dokuwiki/inc/lang/es/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/install.html
diff --git a/vendors/dokuwiki/inc/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php
index 9d4995c52..9d4995c52 100644
--- a/vendors/dokuwiki/inc/lang/es/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/lang.php
diff --git a/vendors/dokuwiki/inc/lang/es/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt
index e151bf7e9..e151bf7e9 100644
--- a/vendors/dokuwiki/inc/lang/es/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/es/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt
index a8d9be7a9..a8d9be7a9 100644
--- a/vendors/dokuwiki/inc/lang/es/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/login.txt
diff --git a/vendors/dokuwiki/inc/lang/es/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt
index 893ec1cb9..893ec1cb9 100644
--- a/vendors/dokuwiki/inc/lang/es/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/es/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt
index d119ca29d..d119ca29d 100644
--- a/vendors/dokuwiki/inc/lang/es/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/es/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt
index 42ee6b5c2..42ee6b5c2 100644
--- a/vendors/dokuwiki/inc/lang/es/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/es/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt
index b4d5a2ed1..b4d5a2ed1 100644
--- a/vendors/dokuwiki/inc/lang/es/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/es/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt
index c3dad116e..c3dad116e 100644
--- a/vendors/dokuwiki/inc/lang/es/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/es/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt
index 461b745fb..461b745fb 100644
--- a/vendors/dokuwiki/inc/lang/es/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/read.txt
diff --git a/vendors/dokuwiki/inc/lang/es/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt
index 432def26f..432def26f 100644
--- a/vendors/dokuwiki/inc/lang/es/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/es/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt
index 98248269d..98248269d 100644
--- a/vendors/dokuwiki/inc/lang/es/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/register.txt
diff --git a/vendors/dokuwiki/inc/lang/es/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt
index e773e3200..e773e3200 100644
--- a/vendors/dokuwiki/inc/lang/es/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/es/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt
index 1d74e79bb..1d74e79bb 100644
--- a/vendors/dokuwiki/inc/lang/es/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/es/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt
index b093e857f..b093e857f 100644
--- a/vendors/dokuwiki/inc/lang/es/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/es/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt
index 47a1a90dd..47a1a90dd 100644
--- a/vendors/dokuwiki/inc/lang/es/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/es/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt
index c84bbc01d..c84bbc01d 100644
--- a/vendors/dokuwiki/inc/lang/es/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/es/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt
index 256908925..256908925 100644
--- a/vendors/dokuwiki/inc/lang/es/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/es/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt
index 05be8557a..05be8557a 100644
--- a/vendors/dokuwiki/inc/lang/es/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/es/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt
index 822e558f8..822e558f8 100644
--- a/vendors/dokuwiki/inc/lang/es/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/es/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt
index 9d2f980d3..9d2f980d3 100644
--- a/vendors/dokuwiki/inc/lang/es/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/es/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt
index 739a1b76b..739a1b76b 100644
--- a/vendors/dokuwiki/inc/lang/es/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/es/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/et/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt
index 1934f482b..1934f482b 100644
--- a/vendors/dokuwiki/inc/lang/et/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/et/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt
index 4b405cdfd..4b405cdfd 100644
--- a/vendors/dokuwiki/inc/lang/et/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/et/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt
index cf9f571ab..cf9f571ab 100644
--- a/vendors/dokuwiki/inc/lang/et/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/et/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt
index bb564ac57..bb564ac57 100644
--- a/vendors/dokuwiki/inc/lang/et/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/et/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt
index d10a93b84..d10a93b84 100644
--- a/vendors/dokuwiki/inc/lang/et/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/et/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt
index 6669f3be5..6669f3be5 100644
--- a/vendors/dokuwiki/inc/lang/et/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/et/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt
index 6167c8552..6167c8552 100644
--- a/vendors/dokuwiki/inc/lang/et/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/et/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt
index 3ab6d7161..3ab6d7161 100644
--- a/vendors/dokuwiki/inc/lang/et/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/et/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt
index 8d2e25a68..8d2e25a68 100644
--- a/vendors/dokuwiki/inc/lang/et/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/index.txt
diff --git a/vendors/dokuwiki/inc/lang/et/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php
index 4d3f10bdc..4d3f10bdc 100644
--- a/vendors/dokuwiki/inc/lang/et/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/lang.php
diff --git a/vendors/dokuwiki/inc/lang/et/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt
index 0fd2743ad..0fd2743ad 100644
--- a/vendors/dokuwiki/inc/lang/et/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/et/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt
index 3e746cd8d..3e746cd8d 100644
--- a/vendors/dokuwiki/inc/lang/et/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/login.txt
diff --git a/vendors/dokuwiki/inc/lang/et/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt
index 3214584f5..3214584f5 100644
--- a/vendors/dokuwiki/inc/lang/et/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/et/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt
index fb78e6434..fb78e6434 100644
--- a/vendors/dokuwiki/inc/lang/et/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/et/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt
index 42d204f2d..42d204f2d 100644
--- a/vendors/dokuwiki/inc/lang/et/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/et/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt
index df45c65ae..df45c65ae 100644
--- a/vendors/dokuwiki/inc/lang/et/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/et/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt
index 4f17140e0..4f17140e0 100644
--- a/vendors/dokuwiki/inc/lang/et/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/et/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt
index 64696f079..64696f079 100644
--- a/vendors/dokuwiki/inc/lang/et/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/read.txt
diff --git a/vendors/dokuwiki/inc/lang/et/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt
index cf7a85420..cf7a85420 100644
--- a/vendors/dokuwiki/inc/lang/et/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/et/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt
index 9cd0b911d..9cd0b911d 100644
--- a/vendors/dokuwiki/inc/lang/et/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/register.txt
diff --git a/vendors/dokuwiki/inc/lang/et/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt
index 47d2ef14c..47d2ef14c 100644
--- a/vendors/dokuwiki/inc/lang/et/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/et/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt
index cd0ef8d10..cd0ef8d10 100644
--- a/vendors/dokuwiki/inc/lang/et/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/et/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt
index c546a1f14..c546a1f14 100644
--- a/vendors/dokuwiki/inc/lang/et/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/et/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt
index bbc86b637..bbc86b637 100644
--- a/vendors/dokuwiki/inc/lang/et/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/et/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt
index ef73d74a2..ef73d74a2 100644
--- a/vendors/dokuwiki/inc/lang/et/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/et/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt
index 5dda5f797..5dda5f797 100644
--- a/vendors/dokuwiki/inc/lang/et/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/et/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt
index 76ce2845f..76ce2845f 100644
--- a/vendors/dokuwiki/inc/lang/et/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/et/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt
index 35da12801..35da12801 100644
--- a/vendors/dokuwiki/inc/lang/et/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/et/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt
index 65d0d6ac3..65d0d6ac3 100644
--- a/vendors/dokuwiki/inc/lang/et/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/et/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt
index 13673263c..13673263c 100644
--- a/vendors/dokuwiki/inc/lang/eu/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt
index 8cbb7b6d2..8cbb7b6d2 100644
--- a/vendors/dokuwiki/inc/lang/eu/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt
index d7d0d337e..d7d0d337e 100644
--- a/vendors/dokuwiki/inc/lang/eu/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt
index 257076a3d..257076a3d 100644
--- a/vendors/dokuwiki/inc/lang/eu/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt
index 8d335ea2e..8d335ea2e 100644
--- a/vendors/dokuwiki/inc/lang/eu/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt
index 5d64b0b36..5d64b0b36 100644
--- a/vendors/dokuwiki/inc/lang/eu/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt
index c117731ef..c117731ef 100644
--- a/vendors/dokuwiki/inc/lang/eu/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt
index 920cd89ec..920cd89ec 100644
--- a/vendors/dokuwiki/inc/lang/eu/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt
index 30f88498a..30f88498a 100644
--- a/vendors/dokuwiki/inc/lang/eu/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/index.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html
index 81f1efd95..81f1efd95 100644
--- a/vendors/dokuwiki/inc/lang/eu/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/install.html
diff --git a/vendors/dokuwiki/inc/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php
index 8324e2587..8324e2587 100644
--- a/vendors/dokuwiki/inc/lang/eu/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/lang.php
diff --git a/vendors/dokuwiki/inc/lang/eu/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt
index dc29e51a5..dc29e51a5 100644
--- a/vendors/dokuwiki/inc/lang/eu/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt
index ebb1607d9..ebb1607d9 100644
--- a/vendors/dokuwiki/inc/lang/eu/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/login.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt
index 86ab1a3a7..86ab1a3a7 100644
--- a/vendors/dokuwiki/inc/lang/eu/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt
index cac872ce1..cac872ce1 100644
--- a/vendors/dokuwiki/inc/lang/eu/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt
index 7d9cc60d3..7d9cc60d3 100644
--- a/vendors/dokuwiki/inc/lang/eu/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt
index 1f0d14f5e..1f0d14f5e 100644
--- a/vendors/dokuwiki/inc/lang/eu/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt
index 0f0fd5e8f..0f0fd5e8f 100644
--- a/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt
index f7ed7b071..f7ed7b071 100644
--- a/vendors/dokuwiki/inc/lang/eu/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/read.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt
index 4ab5482ce..4ab5482ce 100644
--- a/vendors/dokuwiki/inc/lang/eu/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt
index 4a8a49bd7..4a8a49bd7 100644
--- a/vendors/dokuwiki/inc/lang/eu/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/register.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt
index a0154444e..a0154444e 100644
--- a/vendors/dokuwiki/inc/lang/eu/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt
index 98f261cd8..98f261cd8 100644
--- a/vendors/dokuwiki/inc/lang/eu/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt
index 203cb7e43..203cb7e43 100644
--- a/vendors/dokuwiki/inc/lang/eu/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt
index 2a487a3bb..2a487a3bb 100644
--- a/vendors/dokuwiki/inc/lang/eu/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt
index ad1b36057..ad1b36057 100644
--- a/vendors/dokuwiki/inc/lang/eu/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt
index 1aeb868bc..1aeb868bc 100644
--- a/vendors/dokuwiki/inc/lang/eu/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt
index 9e5503a8b..9e5503a8b 100644
--- a/vendors/dokuwiki/inc/lang/eu/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt
index 233bfecf1..233bfecf1 100644
--- a/vendors/dokuwiki/inc/lang/eu/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt
index 639f3d95a..639f3d95a 100644
--- a/vendors/dokuwiki/inc/lang/eu/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/eu/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt
index 0af3fb26c..0af3fb26c 100644
--- a/vendors/dokuwiki/inc/lang/eu/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/eu/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt
index ce7550977..ce7550977 100644
--- a/vendors/dokuwiki/inc/lang/fa/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt
index 3d2bb4a5b..3d2bb4a5b 100644
--- a/vendors/dokuwiki/inc/lang/fa/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt
index 6864e22d6..6864e22d6 100644
--- a/vendors/dokuwiki/inc/lang/fa/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt
index 9de037024..9de037024 100644
--- a/vendors/dokuwiki/inc/lang/fa/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt
index 827f73e2b..827f73e2b 100644
--- a/vendors/dokuwiki/inc/lang/fa/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt
index d5354f727..d5354f727 100644
--- a/vendors/dokuwiki/inc/lang/fa/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt
index 164b217b7..164b217b7 100644
--- a/vendors/dokuwiki/inc/lang/fa/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt
index 7c3873af4..7c3873af4 100644
--- a/vendors/dokuwiki/inc/lang/fa/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt
index ca896feeb..ca896feeb 100644
--- a/vendors/dokuwiki/inc/lang/fa/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt
index 89ed74b7d..89ed74b7d 100644
--- a/vendors/dokuwiki/inc/lang/fa/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/index.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html
index b76e9443f..b76e9443f 100644
--- a/vendors/dokuwiki/inc/lang/fa/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/install.html
diff --git a/vendors/dokuwiki/inc/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php
index 1123efe13..1123efe13 100644
--- a/vendors/dokuwiki/inc/lang/fa/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/lang.php
diff --git a/vendors/dokuwiki/inc/lang/fa/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt
index 1400e22da..1400e22da 100644
--- a/vendors/dokuwiki/inc/lang/fa/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt
index 0b1b3f9fc..0b1b3f9fc 100644
--- a/vendors/dokuwiki/inc/lang/fa/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/login.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt
index 44e98db06..44e98db06 100644
--- a/vendors/dokuwiki/inc/lang/fa/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt
index 06377a94a..06377a94a 100644
--- a/vendors/dokuwiki/inc/lang/fa/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt
index 78a3d94be..78a3d94be 100644
--- a/vendors/dokuwiki/inc/lang/fa/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt
index 3a67326df..3a67326df 100644
--- a/vendors/dokuwiki/inc/lang/fa/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt
index fd76b7ddd..fd76b7ddd 100644
--- a/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt
index 1acfdb466..1acfdb466 100644
--- a/vendors/dokuwiki/inc/lang/fa/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/read.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt
index 5d5b5b795..5d5b5b795 100644
--- a/vendors/dokuwiki/inc/lang/fa/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt
index c6e1f0d4a..c6e1f0d4a 100644
--- a/vendors/dokuwiki/inc/lang/fa/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/register.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt
index e22c2d0ad..e22c2d0ad 100644
--- a/vendors/dokuwiki/inc/lang/fa/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt
index 8b7b0d387..8b7b0d387 100644
--- a/vendors/dokuwiki/inc/lang/fa/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt
index 7714ae674..7714ae674 100644
--- a/vendors/dokuwiki/inc/lang/fa/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt
index 3f0378ed3..3f0378ed3 100644
--- a/vendors/dokuwiki/inc/lang/fa/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt
index 9d0500860..9d0500860 100644
--- a/vendors/dokuwiki/inc/lang/fa/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt
index 58d3ca0f3..58d3ca0f3 100644
--- a/vendors/dokuwiki/inc/lang/fa/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt
index 140f2e3e0..140f2e3e0 100644
--- a/vendors/dokuwiki/inc/lang/fa/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt
index d79083306..d79083306 100644
--- a/vendors/dokuwiki/inc/lang/fa/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt
index 625df73dc..625df73dc 100644
--- a/vendors/dokuwiki/inc/lang/fa/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/fa/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt
index a78c86f06..a78c86f06 100644
--- a/vendors/dokuwiki/inc/lang/fa/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fa/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt
index b57b6080c..b57b6080c 100644
--- a/vendors/dokuwiki/inc/lang/fi/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt
index fa3571e46..fa3571e46 100644
--- a/vendors/dokuwiki/inc/lang/fi/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt
index 457720241..457720241 100644
--- a/vendors/dokuwiki/inc/lang/fi/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt
index be788a116..be788a116 100644
--- a/vendors/dokuwiki/inc/lang/fi/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt
index cd31da06b..cd31da06b 100644
--- a/vendors/dokuwiki/inc/lang/fi/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt
index fbf62b78c..fbf62b78c 100644
--- a/vendors/dokuwiki/inc/lang/fi/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt
index 859f4d9f9..859f4d9f9 100644
--- a/vendors/dokuwiki/inc/lang/fi/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt
index 81b7714d8..81b7714d8 100644
--- a/vendors/dokuwiki/inc/lang/fi/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt
index fd4d9a3de..fd4d9a3de 100644
--- a/vendors/dokuwiki/inc/lang/fi/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt
index 9086e220e..9086e220e 100644
--- a/vendors/dokuwiki/inc/lang/fi/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/index.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html
index 8d20e045c..8d20e045c 100644
--- a/vendors/dokuwiki/inc/lang/fi/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/install.html
diff --git a/vendors/dokuwiki/inc/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php
index 6ef19ee8e..6ef19ee8e 100644
--- a/vendors/dokuwiki/inc/lang/fi/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/lang.php
diff --git a/vendors/dokuwiki/inc/lang/fi/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt
index 3a48ff8ae..3a48ff8ae 100644
--- a/vendors/dokuwiki/inc/lang/fi/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt
index efba26286..efba26286 100644
--- a/vendors/dokuwiki/inc/lang/fi/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/login.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt
index 0a953cb87..0a953cb87 100644
--- a/vendors/dokuwiki/inc/lang/fi/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt
index fc6379be7..fc6379be7 100644
--- a/vendors/dokuwiki/inc/lang/fi/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt
index a5138cfc3..a5138cfc3 100644
--- a/vendors/dokuwiki/inc/lang/fi/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt
index 848780701..848780701 100644
--- a/vendors/dokuwiki/inc/lang/fi/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt
index d134943f0..d134943f0 100644
--- a/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt
index eb4380229..eb4380229 100644
--- a/vendors/dokuwiki/inc/lang/fi/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/read.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt
index ffb08107e..ffb08107e 100644
--- a/vendors/dokuwiki/inc/lang/fi/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt
index cf7a62557..cf7a62557 100644
--- a/vendors/dokuwiki/inc/lang/fi/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/register.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt
index 78d73f63d..78d73f63d 100644
--- a/vendors/dokuwiki/inc/lang/fi/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt
index 5a567b022..5a567b022 100644
--- a/vendors/dokuwiki/inc/lang/fi/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt
index a48cd3366..a48cd3366 100644
--- a/vendors/dokuwiki/inc/lang/fi/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt
index aa9fbf52f..aa9fbf52f 100644
--- a/vendors/dokuwiki/inc/lang/fi/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt
index 243f8d01e..243f8d01e 100644
--- a/vendors/dokuwiki/inc/lang/fi/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt
index f92fe70cc..f92fe70cc 100644
--- a/vendors/dokuwiki/inc/lang/fi/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt
index d1c5d9138..d1c5d9138 100644
--- a/vendors/dokuwiki/inc/lang/fi/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt
index 71407954a..71407954a 100644
--- a/vendors/dokuwiki/inc/lang/fi/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt
index 7a5ea49ed..7a5ea49ed 100644
--- a/vendors/dokuwiki/inc/lang/fi/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/fi/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt
index 4e416c68c..4e416c68c 100644
--- a/vendors/dokuwiki/inc/lang/fi/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fi/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt
index 27743223d..27743223d 100644
--- a/vendors/dokuwiki/inc/lang/fo/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt
index 422377f62..422377f62 100644
--- a/vendors/dokuwiki/inc/lang/fo/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt
index df3fe52be..df3fe52be 100644
--- a/vendors/dokuwiki/inc/lang/fo/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt
index 505b249b4..505b249b4 100644
--- a/vendors/dokuwiki/inc/lang/fo/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt
index 343818b40..343818b40 100644
--- a/vendors/dokuwiki/inc/lang/fo/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt
index 2ba92a2d2..2ba92a2d2 100644
--- a/vendors/dokuwiki/inc/lang/fo/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt
index 274d423af..274d423af 100644
--- a/vendors/dokuwiki/inc/lang/fo/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt
index 640edfbc3..640edfbc3 100644
--- a/vendors/dokuwiki/inc/lang/fo/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/index.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php
index a8c241fc1..a8c241fc1 100644
--- a/vendors/dokuwiki/inc/lang/fo/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/lang.php
diff --git a/vendors/dokuwiki/inc/lang/fo/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt
index 2e65a064c..2e65a064c 100644
--- a/vendors/dokuwiki/inc/lang/fo/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt
index 31a4c544f..31a4c544f 100644
--- a/vendors/dokuwiki/inc/lang/fo/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/login.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt
index 358a23be0..358a23be0 100644
--- a/vendors/dokuwiki/inc/lang/fo/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt
index 6eeb1ef31..6eeb1ef31 100644
--- a/vendors/dokuwiki/inc/lang/fo/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt
index d0b463a40..d0b463a40 100644
--- a/vendors/dokuwiki/inc/lang/fo/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt
index e3e65d805..e3e65d805 100644
--- a/vendors/dokuwiki/inc/lang/fo/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt
index bacf79026..bacf79026 100644
--- a/vendors/dokuwiki/inc/lang/fo/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/read.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt
index 4704f3781..4704f3781 100644
--- a/vendors/dokuwiki/inc/lang/fo/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt
index 24438afe8..24438afe8 100644
--- a/vendors/dokuwiki/inc/lang/fo/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/register.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt
index 450202c12..450202c12 100644
--- a/vendors/dokuwiki/inc/lang/fo/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt
index dcd845c10..dcd845c10 100644
--- a/vendors/dokuwiki/inc/lang/fo/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt
index 6304a8901..6304a8901 100644
--- a/vendors/dokuwiki/inc/lang/fo/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt
index 515f80aad..515f80aad 100644
--- a/vendors/dokuwiki/inc/lang/fo/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt
index 210e85902..210e85902 100644
--- a/vendors/dokuwiki/inc/lang/fo/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt
index 4dca0cda5..4dca0cda5 100644
--- a/vendors/dokuwiki/inc/lang/fo/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt
index 10ee40d30..10ee40d30 100644
--- a/vendors/dokuwiki/inc/lang/fo/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/fo/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt
index f3a9b9dcd..f3a9b9dcd 100644
--- a/vendors/dokuwiki/inc/lang/fo/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fo/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt
index 4477a512b..4477a512b 100644
--- a/vendors/dokuwiki/inc/lang/fr/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt
index 42a3538ab..42a3538ab 100644
--- a/vendors/dokuwiki/inc/lang/fr/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt
index 6902b43e3..6902b43e3 100644
--- a/vendors/dokuwiki/inc/lang/fr/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt
index 0cb0a67fb..0cb0a67fb 100644
--- a/vendors/dokuwiki/inc/lang/fr/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt
index 20d4d6755..20d4d6755 100644
--- a/vendors/dokuwiki/inc/lang/fr/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt
index 773695d6d..773695d6d 100644
--- a/vendors/dokuwiki/inc/lang/fr/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt
index fbc1609a8..fbc1609a8 100644
--- a/vendors/dokuwiki/inc/lang/fr/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt
index 71b0a7c1b..71b0a7c1b 100644
--- a/vendors/dokuwiki/inc/lang/fr/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt
index 1a7e0f434..1a7e0f434 100644
--- a/vendors/dokuwiki/inc/lang/fr/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt
index 14446681e..14446681e 100644
--- a/vendors/dokuwiki/inc/lang/fr/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/index.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html
index a2c29d022..a2c29d022 100644
--- a/vendors/dokuwiki/inc/lang/fr/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/install.html
diff --git a/vendors/dokuwiki/inc/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php
index 6a0f408b8..6a0f408b8 100644
--- a/vendors/dokuwiki/inc/lang/fr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/lang.php
diff --git a/vendors/dokuwiki/inc/lang/fr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt
index ac8eb4c4b..ac8eb4c4b 100644
--- a/vendors/dokuwiki/inc/lang/fr/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt
index c8d40c86d..c8d40c86d 100644
--- a/vendors/dokuwiki/inc/lang/fr/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/login.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt
index 0b87616b1..0b87616b1 100644
--- a/vendors/dokuwiki/inc/lang/fr/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt
index 3d834ffd0..3d834ffd0 100644
--- a/vendors/dokuwiki/inc/lang/fr/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt
index 65984ef9c..65984ef9c 100644
--- a/vendors/dokuwiki/inc/lang/fr/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt
index 26fbcd9c2..26fbcd9c2 100644
--- a/vendors/dokuwiki/inc/lang/fr/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt
index 432b5f102..432b5f102 100644
--- a/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt
index faa756e8b..faa756e8b 100644
--- a/vendors/dokuwiki/inc/lang/fr/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/read.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt
index b41972fc1..b41972fc1 100644
--- a/vendors/dokuwiki/inc/lang/fr/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt
index e2d02f55c..e2d02f55c 100644
--- a/vendors/dokuwiki/inc/lang/fr/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/register.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt
index 960aedf2d..960aedf2d 100644
--- a/vendors/dokuwiki/inc/lang/fr/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt
index 2cfbed617..2cfbed617 100644
--- a/vendors/dokuwiki/inc/lang/fr/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt
index c9149ef9b..c9149ef9b 100644
--- a/vendors/dokuwiki/inc/lang/fr/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt
index 8355a2f9d..8355a2f9d 100644
--- a/vendors/dokuwiki/inc/lang/fr/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt
index 2e36199b1..2e36199b1 100644
--- a/vendors/dokuwiki/inc/lang/fr/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt
index 981bae26b..981bae26b 100644
--- a/vendors/dokuwiki/inc/lang/fr/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt
index 514f9cf5d..514f9cf5d 100644
--- a/vendors/dokuwiki/inc/lang/fr/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt
index 623d75e88..623d75e88 100644
--- a/vendors/dokuwiki/inc/lang/fr/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt
index 3a186b554..3a186b554 100644
--- a/vendors/dokuwiki/inc/lang/fr/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/fr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt
index ae5962a80..ae5962a80 100644
--- a/vendors/dokuwiki/inc/lang/fr/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/fr/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt
index a5bb1753d..a5bb1753d 100644
--- a/vendors/dokuwiki/inc/lang/gl/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt
index e791265e6..e791265e6 100644
--- a/vendors/dokuwiki/inc/lang/gl/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt
index 90066d032..90066d032 100644
--- a/vendors/dokuwiki/inc/lang/gl/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt
index e63e5b216..e63e5b216 100644
--- a/vendors/dokuwiki/inc/lang/gl/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt
index 8d388a8bb..8d388a8bb 100644
--- a/vendors/dokuwiki/inc/lang/gl/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt
index 5660e4025..5660e4025 100644
--- a/vendors/dokuwiki/inc/lang/gl/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt
index 8e2aa19f2..8e2aa19f2 100644
--- a/vendors/dokuwiki/inc/lang/gl/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt
index 9e2061b51..9e2061b51 100644
--- a/vendors/dokuwiki/inc/lang/gl/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt
index c582fc3d0..c582fc3d0 100644
--- a/vendors/dokuwiki/inc/lang/gl/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt
index b0b100bda..b0b100bda 100644
--- a/vendors/dokuwiki/inc/lang/gl/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/index.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html
index 017abad8f..017abad8f 100644
--- a/vendors/dokuwiki/inc/lang/gl/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/install.html
diff --git a/vendors/dokuwiki/inc/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php
index 2f34a02a0..2f34a02a0 100644
--- a/vendors/dokuwiki/inc/lang/gl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/lang.php
diff --git a/vendors/dokuwiki/inc/lang/gl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt
index 14240335e..14240335e 100644
--- a/vendors/dokuwiki/inc/lang/gl/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt
index 11719de50..11719de50 100644
--- a/vendors/dokuwiki/inc/lang/gl/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/login.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt
index f7c06bc83..f7c06bc83 100644
--- a/vendors/dokuwiki/inc/lang/gl/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt
index c79ef6a41..c79ef6a41 100644
--- a/vendors/dokuwiki/inc/lang/gl/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt
index dd6027165..dd6027165 100644
--- a/vendors/dokuwiki/inc/lang/gl/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt
index 01cc41dcc..01cc41dcc 100644
--- a/vendors/dokuwiki/inc/lang/gl/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt
index e020790d3..e020790d3 100644
--- a/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt
index 912864c31..912864c31 100644
--- a/vendors/dokuwiki/inc/lang/gl/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/read.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt
index 93f8632dd..93f8632dd 100644
--- a/vendors/dokuwiki/inc/lang/gl/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt
index 17d9e0ff4..17d9e0ff4 100644
--- a/vendors/dokuwiki/inc/lang/gl/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/register.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt
index e02fe1a1c..e02fe1a1c 100644
--- a/vendors/dokuwiki/inc/lang/gl/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt
index eb8cf4835..eb8cf4835 100644
--- a/vendors/dokuwiki/inc/lang/gl/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt
index a08b54685..a08b54685 100644
--- a/vendors/dokuwiki/inc/lang/gl/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt
index 7157cdcbf..7157cdcbf 100644
--- a/vendors/dokuwiki/inc/lang/gl/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt
index 88fb0c39d..88fb0c39d 100644
--- a/vendors/dokuwiki/inc/lang/gl/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt
index c262147f8..c262147f8 100644
--- a/vendors/dokuwiki/inc/lang/gl/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt
index 0b1c3a662..0b1c3a662 100644
--- a/vendors/dokuwiki/inc/lang/gl/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt
index bfd598117..bfd598117 100644
--- a/vendors/dokuwiki/inc/lang/gl/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt
index 914c3644c..914c3644c 100644
--- a/vendors/dokuwiki/inc/lang/gl/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/gl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt
index f219f8436..f219f8436 100644
--- a/vendors/dokuwiki/inc/lang/gl/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/gl/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/he/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt
index ada73e5d4..ada73e5d4 100644
--- a/vendors/dokuwiki/inc/lang/he/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/he/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt
index dfcdd22dd..dfcdd22dd 100644
--- a/vendors/dokuwiki/inc/lang/he/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/he/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt
index d27a78559..d27a78559 100644
--- a/vendors/dokuwiki/inc/lang/he/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/he/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt
index 34c8417b4..34c8417b4 100644
--- a/vendors/dokuwiki/inc/lang/he/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/he/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt
index f1216bb4a..f1216bb4a 100644
--- a/vendors/dokuwiki/inc/lang/he/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/he/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt
index 22fc88d9f..22fc88d9f 100644
--- a/vendors/dokuwiki/inc/lang/he/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/he/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt
index 4d8151e9d..4d8151e9d 100644
--- a/vendors/dokuwiki/inc/lang/he/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/he/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt
index a6c755cba..a6c755cba 100644
--- a/vendors/dokuwiki/inc/lang/he/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/he/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt
index 12b7a960e..12b7a960e 100644
--- a/vendors/dokuwiki/inc/lang/he/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/index.txt
diff --git a/vendors/dokuwiki/inc/lang/he/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html
index 7831623c9..7831623c9 100644
--- a/vendors/dokuwiki/inc/lang/he/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/install.html
diff --git a/vendors/dokuwiki/inc/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php
index 8545d1542..8545d1542 100644
--- a/vendors/dokuwiki/inc/lang/he/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/lang.php
diff --git a/vendors/dokuwiki/inc/lang/he/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt
index 307874a73..307874a73 100644
--- a/vendors/dokuwiki/inc/lang/he/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/he/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt
index 5a575f1f8..5a575f1f8 100644
--- a/vendors/dokuwiki/inc/lang/he/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/login.txt
diff --git a/vendors/dokuwiki/inc/lang/he/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt
index d7990b2b3..d7990b2b3 100644
--- a/vendors/dokuwiki/inc/lang/he/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/he/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt
index ac6fb7386..ac6fb7386 100644
--- a/vendors/dokuwiki/inc/lang/he/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/he/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt
index 3d08e16db..3d08e16db 100644
--- a/vendors/dokuwiki/inc/lang/he/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/he/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt
index 1331c23ad..1331c23ad 100644
--- a/vendors/dokuwiki/inc/lang/he/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/he/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt
index 255195c7f..255195c7f 100644
--- a/vendors/dokuwiki/inc/lang/he/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/he/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt
index 8e4c177ee..8e4c177ee 100644
--- a/vendors/dokuwiki/inc/lang/he/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/read.txt
diff --git a/vendors/dokuwiki/inc/lang/he/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt
index 0febd96e5..0febd96e5 100644
--- a/vendors/dokuwiki/inc/lang/he/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/he/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt
index 7225b02fd..7225b02fd 100644
--- a/vendors/dokuwiki/inc/lang/he/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/register.txt
diff --git a/vendors/dokuwiki/inc/lang/he/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt
index bb64a8158..bb64a8158 100644
--- a/vendors/dokuwiki/inc/lang/he/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/he/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt
index 47e7749c2..47e7749c2 100644
--- a/vendors/dokuwiki/inc/lang/he/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/he/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt
index 6b23402f5..6b23402f5 100644
--- a/vendors/dokuwiki/inc/lang/he/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/he/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt
index aed23be24..aed23be24 100644
--- a/vendors/dokuwiki/inc/lang/he/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/he/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt
index 22ca0c3ae..22ca0c3ae 100644
--- a/vendors/dokuwiki/inc/lang/he/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/he/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt
index ca85eb2e0..ca85eb2e0 100644
--- a/vendors/dokuwiki/inc/lang/he/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/he/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt
index 7b05c4f47..7b05c4f47 100644
--- a/vendors/dokuwiki/inc/lang/he/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/he/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt
index 494d8389d..494d8389d 100644
--- a/vendors/dokuwiki/inc/lang/he/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/he/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt
index fd670796c..fd670796c 100644
--- a/vendors/dokuwiki/inc/lang/he/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/he/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt
index b7c3f0a7c..b7c3f0a7c 100644
--- a/vendors/dokuwiki/inc/lang/he/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/he/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php
index 044d7d5a4..044d7d5a4 100644
--- a/vendors/dokuwiki/inc/lang/hi/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hi/lang.php
diff --git a/vendors/dokuwiki/inc/lang/hr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt
index 15a2a2b13..15a2a2b13 100644
--- a/vendors/dokuwiki/inc/lang/hr/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt
index e7115a6b6..e7115a6b6 100644
--- a/vendors/dokuwiki/inc/lang/hr/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt
index e33d7020a..e33d7020a 100644
--- a/vendors/dokuwiki/inc/lang/hr/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt
index 216eea582..216eea582 100644
--- a/vendors/dokuwiki/inc/lang/hr/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt
index ce6c8c4cb..ce6c8c4cb 100644
--- a/vendors/dokuwiki/inc/lang/hr/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt
index 8cd57d524..8cd57d524 100644
--- a/vendors/dokuwiki/inc/lang/hr/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt
index 911855f47..911855f47 100644
--- a/vendors/dokuwiki/inc/lang/hr/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt
index 9c30a805c..9c30a805c 100644
--- a/vendors/dokuwiki/inc/lang/hr/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/index.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php
index 05a20c25e..05a20c25e 100644
--- a/vendors/dokuwiki/inc/lang/hr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/lang.php
diff --git a/vendors/dokuwiki/inc/lang/hr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt
index ff081aad8..ff081aad8 100644
--- a/vendors/dokuwiki/inc/lang/hr/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt
index 216af130d..216af130d 100644
--- a/vendors/dokuwiki/inc/lang/hr/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/login.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt
index 911f8eade..911f8eade 100644
--- a/vendors/dokuwiki/inc/lang/hr/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt
index 39346580f..39346580f 100644
--- a/vendors/dokuwiki/inc/lang/hr/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt
index 231fb5edf..231fb5edf 100644
--- a/vendors/dokuwiki/inc/lang/hr/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt
index 89ae86a71..89ae86a71 100644
--- a/vendors/dokuwiki/inc/lang/hr/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt
index d036c0a7b..d036c0a7b 100644
--- a/vendors/dokuwiki/inc/lang/hr/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/read.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt
index 4145ca1c5..4145ca1c5 100644
--- a/vendors/dokuwiki/inc/lang/hr/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt
index 32a5489fb..32a5489fb 100644
--- a/vendors/dokuwiki/inc/lang/hr/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/register.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt
index fe2c72bf3..fe2c72bf3 100644
--- a/vendors/dokuwiki/inc/lang/hr/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt
index d224a56f3..d224a56f3 100644
--- a/vendors/dokuwiki/inc/lang/hr/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt
index 91d9f9c0a..91d9f9c0a 100644
--- a/vendors/dokuwiki/inc/lang/hr/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt
index aba2c0db0..aba2c0db0 100644
--- a/vendors/dokuwiki/inc/lang/hr/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt
index bc6eb48ae..bc6eb48ae 100644
--- a/vendors/dokuwiki/inc/lang/hr/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt
index c55b4a288..c55b4a288 100644
--- a/vendors/dokuwiki/inc/lang/hr/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt
index 8eab906d2..8eab906d2 100644
--- a/vendors/dokuwiki/inc/lang/hr/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/hr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt
index 7faf03c19..7faf03c19 100644
--- a/vendors/dokuwiki/inc/lang/hr/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hr/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt
index 03d29243c..03d29243c 100644
--- a/vendors/dokuwiki/inc/lang/hu/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt
index 89fe3738a..89fe3738a 100644
--- a/vendors/dokuwiki/inc/lang/hu/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt
index d457ab769..d457ab769 100644
--- a/vendors/dokuwiki/inc/lang/hu/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt
index b823465b3..b823465b3 100644
--- a/vendors/dokuwiki/inc/lang/hu/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt
index 0b06724df..0b06724df 100644
--- a/vendors/dokuwiki/inc/lang/hu/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt
index 6a09cdea2..6a09cdea2 100644
--- a/vendors/dokuwiki/inc/lang/hu/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt
index 4d12e2e0c..4d12e2e0c 100644
--- a/vendors/dokuwiki/inc/lang/hu/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt
index 898387cf2..898387cf2 100644
--- a/vendors/dokuwiki/inc/lang/hu/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt
index e17662e60..e17662e60 100644
--- a/vendors/dokuwiki/inc/lang/hu/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt
index ebf15148d..ebf15148d 100644
--- a/vendors/dokuwiki/inc/lang/hu/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/index.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html
index 1676e9364..1676e9364 100644
--- a/vendors/dokuwiki/inc/lang/hu/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/install.html
diff --git a/vendors/dokuwiki/inc/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php
index b9218f897..b9218f897 100644
--- a/vendors/dokuwiki/inc/lang/hu/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/lang.php
diff --git a/vendors/dokuwiki/inc/lang/hu/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt
index 229141674..229141674 100644
--- a/vendors/dokuwiki/inc/lang/hu/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt
index 3f7e62e72..3f7e62e72 100644
--- a/vendors/dokuwiki/inc/lang/hu/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/login.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt
index 9b0c2921e..9b0c2921e 100644
--- a/vendors/dokuwiki/inc/lang/hu/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt
index de5a34d8e..de5a34d8e 100644
--- a/vendors/dokuwiki/inc/lang/hu/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt
index 4dd408459..4dd408459 100644
--- a/vendors/dokuwiki/inc/lang/hu/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt
index ad7f7d4b0..ad7f7d4b0 100644
--- a/vendors/dokuwiki/inc/lang/hu/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt
index 617419ee8..617419ee8 100644
--- a/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt
index 89ac96338..89ac96338 100644
--- a/vendors/dokuwiki/inc/lang/hu/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/read.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt
index 4e0c1ec06..4e0c1ec06 100644
--- a/vendors/dokuwiki/inc/lang/hu/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt
index 2745c4d77..2745c4d77 100644
--- a/vendors/dokuwiki/inc/lang/hu/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/register.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt
index d45ef0d38..d45ef0d38 100644
--- a/vendors/dokuwiki/inc/lang/hu/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt
index 24931a7ed..24931a7ed 100644
--- a/vendors/dokuwiki/inc/lang/hu/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt
index 3537fd653..3537fd653 100644
--- a/vendors/dokuwiki/inc/lang/hu/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt
index b1defed84..b1defed84 100644
--- a/vendors/dokuwiki/inc/lang/hu/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt
index 2131b4dc0..2131b4dc0 100644
--- a/vendors/dokuwiki/inc/lang/hu/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt
index a8bd35c7d..a8bd35c7d 100644
--- a/vendors/dokuwiki/inc/lang/hu/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt
index a5e8c96d1..a5e8c96d1 100644
--- a/vendors/dokuwiki/inc/lang/hu/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt
index 50df15384..50df15384 100644
--- a/vendors/dokuwiki/inc/lang/hu/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt
index c772ab220..c772ab220 100644
--- a/vendors/dokuwiki/inc/lang/hu/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/hu/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt
index 2fe2efa9b..2fe2efa9b 100644
--- a/vendors/dokuwiki/inc/lang/hu/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/hu/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php
index 2fc631373..2fc631373 100644
--- a/vendors/dokuwiki/inc/lang/id-ni/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id-ni/lang.php
diff --git a/vendors/dokuwiki/inc/lang/id/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt
index 8cb25edb6..8cb25edb6 100644
--- a/vendors/dokuwiki/inc/lang/id/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/id/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt
index 79c70f30b..79c70f30b 100644
--- a/vendors/dokuwiki/inc/lang/id/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/id/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt
index 236e8b6e9..236e8b6e9 100644
--- a/vendors/dokuwiki/inc/lang/id/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/id/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt
index bad8f24a6..bad8f24a6 100644
--- a/vendors/dokuwiki/inc/lang/id/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/id/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt
index eee1e5a58..eee1e5a58 100644
--- a/vendors/dokuwiki/inc/lang/id/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/id/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt
index d7de1458b..d7de1458b 100644
--- a/vendors/dokuwiki/inc/lang/id/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/id/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt
index a32803c44..a32803c44 100644
--- a/vendors/dokuwiki/inc/lang/id/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/id/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt
index e6d247c7a..e6d247c7a 100644
--- a/vendors/dokuwiki/inc/lang/id/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/id/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt
index 88bbb12e4..88bbb12e4 100644
--- a/vendors/dokuwiki/inc/lang/id/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/index.txt
diff --git a/vendors/dokuwiki/inc/lang/id/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html
index 9a9a8f1e9..9a9a8f1e9 100644
--- a/vendors/dokuwiki/inc/lang/id/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/install.html
diff --git a/vendors/dokuwiki/inc/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php
index 447abaf1a..447abaf1a 100644
--- a/vendors/dokuwiki/inc/lang/id/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/lang.php
diff --git a/vendors/dokuwiki/inc/lang/id/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt
index 8147717fd..8147717fd 100644
--- a/vendors/dokuwiki/inc/lang/id/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/id/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt
index f736e882b..f736e882b 100644
--- a/vendors/dokuwiki/inc/lang/id/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/login.txt
diff --git a/vendors/dokuwiki/inc/lang/id/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt
index 7eede9b3c..7eede9b3c 100644
--- a/vendors/dokuwiki/inc/lang/id/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/id/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt
index 8d3f99d72..8d3f99d72 100644
--- a/vendors/dokuwiki/inc/lang/id/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/id/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt
index 5244f8303..5244f8303 100644
--- a/vendors/dokuwiki/inc/lang/id/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/id/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt
index 1621946b1..1621946b1 100644
--- a/vendors/dokuwiki/inc/lang/id/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/id/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt
index 19131ee47..19131ee47 100644
--- a/vendors/dokuwiki/inc/lang/id/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/id/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt
index f78c0eb9d..f78c0eb9d 100644
--- a/vendors/dokuwiki/inc/lang/id/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/read.txt
diff --git a/vendors/dokuwiki/inc/lang/id/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt
index f7cf24443..f7cf24443 100644
--- a/vendors/dokuwiki/inc/lang/id/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/id/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt
index dd8c578f0..dd8c578f0 100644
--- a/vendors/dokuwiki/inc/lang/id/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/register.txt
diff --git a/vendors/dokuwiki/inc/lang/id/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt
index ed8c97ca3..ed8c97ca3 100644
--- a/vendors/dokuwiki/inc/lang/id/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/id/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt
index 276b2928f..276b2928f 100644
--- a/vendors/dokuwiki/inc/lang/id/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/id/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt
index d82b2735f..d82b2735f 100644
--- a/vendors/dokuwiki/inc/lang/id/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/id/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt
index c47bed7dc..c47bed7dc 100644
--- a/vendors/dokuwiki/inc/lang/id/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/id/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt
index 27f0c6421..27f0c6421 100644
--- a/vendors/dokuwiki/inc/lang/id/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/id/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt
index 73713c838..73713c838 100644
--- a/vendors/dokuwiki/inc/lang/id/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/id/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt
index dc04df29a..dc04df29a 100644
--- a/vendors/dokuwiki/inc/lang/id/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/id/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt
index b7f71a198..b7f71a198 100644
--- a/vendors/dokuwiki/inc/lang/id/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/id/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt
index dc628fc11..dc628fc11 100644
--- a/vendors/dokuwiki/inc/lang/id/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/id/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt
index 1e40ce381..1e40ce381 100644
--- a/vendors/dokuwiki/inc/lang/id/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/id/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/is/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt
index ce7b9d390..ce7b9d390 100644
--- a/vendors/dokuwiki/inc/lang/is/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/is/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt
index a6d246ad7..a6d246ad7 100644
--- a/vendors/dokuwiki/inc/lang/is/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php
index ba1ab2c04..ba1ab2c04 100644
--- a/vendors/dokuwiki/inc/lang/is/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/lang.php
diff --git a/vendors/dokuwiki/inc/lang/is/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt
index 81e7e5e32..81e7e5e32 100644
--- a/vendors/dokuwiki/inc/lang/is/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/login.txt
diff --git a/vendors/dokuwiki/inc/lang/is/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt
index 7d3cf5720..7d3cf5720 100644
--- a/vendors/dokuwiki/inc/lang/is/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/is/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt
index b847b1d4d..b847b1d4d 100644
--- a/vendors/dokuwiki/inc/lang/is/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/is/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt
index 57e5faf86..57e5faf86 100644
--- a/vendors/dokuwiki/inc/lang/is/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/is/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/it/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt
index 95a611edc..95a611edc 100644
--- a/vendors/dokuwiki/inc/lang/it/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/it/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt
index 6a5a30573..6a5a30573 100644
--- a/vendors/dokuwiki/inc/lang/it/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/it/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt
index 452019db5..452019db5 100644
--- a/vendors/dokuwiki/inc/lang/it/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/it/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt
index 44789a365..44789a365 100644
--- a/vendors/dokuwiki/inc/lang/it/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/it/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt
index e87eeeada..e87eeeada 100644
--- a/vendors/dokuwiki/inc/lang/it/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/it/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt
index 6b48ed44e..6b48ed44e 100644
--- a/vendors/dokuwiki/inc/lang/it/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/it/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt
index 9932786ba..9932786ba 100644
--- a/vendors/dokuwiki/inc/lang/it/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/it/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt
index fdfaf463e..fdfaf463e 100644
--- a/vendors/dokuwiki/inc/lang/it/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/it/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt
index 0a309fa24..0a309fa24 100644
--- a/vendors/dokuwiki/inc/lang/it/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/it/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt
index 8d5f00409..8d5f00409 100644
--- a/vendors/dokuwiki/inc/lang/it/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/index.txt
diff --git a/vendors/dokuwiki/inc/lang/it/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html
index 5bc4b0dc2..5bc4b0dc2 100644
--- a/vendors/dokuwiki/inc/lang/it/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/install.html
diff --git a/vendors/dokuwiki/inc/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php
index 827967d0f..827967d0f 100644
--- a/vendors/dokuwiki/inc/lang/it/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/lang.php
diff --git a/vendors/dokuwiki/inc/lang/it/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt
index a655ffcd3..a655ffcd3 100644
--- a/vendors/dokuwiki/inc/lang/it/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/it/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt
index 6487c8537..6487c8537 100644
--- a/vendors/dokuwiki/inc/lang/it/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/login.txt
diff --git a/vendors/dokuwiki/inc/lang/it/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt
index ee6e958b9..ee6e958b9 100644
--- a/vendors/dokuwiki/inc/lang/it/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/it/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt
index d41601cfb..d41601cfb 100644
--- a/vendors/dokuwiki/inc/lang/it/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/it/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt
index 91ef751f9..91ef751f9 100644
--- a/vendors/dokuwiki/inc/lang/it/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/it/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt
index c3cf35246..c3cf35246 100644
--- a/vendors/dokuwiki/inc/lang/it/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/it/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt
index 5437d077c..5437d077c 100644
--- a/vendors/dokuwiki/inc/lang/it/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/it/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt
index 0a7245404..0a7245404 100644
--- a/vendors/dokuwiki/inc/lang/it/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/read.txt
diff --git a/vendors/dokuwiki/inc/lang/it/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt
index 4c29a9d52..4c29a9d52 100644
--- a/vendors/dokuwiki/inc/lang/it/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/it/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt
index 973aead78..973aead78 100644
--- a/vendors/dokuwiki/inc/lang/it/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/register.txt
diff --git a/vendors/dokuwiki/inc/lang/it/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt
index 5a9f89344..5a9f89344 100644
--- a/vendors/dokuwiki/inc/lang/it/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/it/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt
index fc3f09414..fc3f09414 100644
--- a/vendors/dokuwiki/inc/lang/it/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/it/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt
index 984b4a068..984b4a068 100644
--- a/vendors/dokuwiki/inc/lang/it/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/it/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt
index 60a019c3e..60a019c3e 100644
--- a/vendors/dokuwiki/inc/lang/it/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/it/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt
index 7c184f206..7c184f206 100644
--- a/vendors/dokuwiki/inc/lang/it/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/it/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt
index a6aa1cfc6..a6aa1cfc6 100644
--- a/vendors/dokuwiki/inc/lang/it/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/it/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt
index a211ef2e5..a211ef2e5 100644
--- a/vendors/dokuwiki/inc/lang/it/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/it/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt
index 71157a2ed..71157a2ed 100644
--- a/vendors/dokuwiki/inc/lang/it/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/it/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt
index 56cebc6b1..56cebc6b1 100644
--- a/vendors/dokuwiki/inc/lang/it/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/it/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt
index 510d6521d..510d6521d 100644
--- a/vendors/dokuwiki/inc/lang/it/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/it/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt
index b0c6d34ab..b0c6d34ab 100644
--- a/vendors/dokuwiki/inc/lang/ja/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt
index 1708bbb3c..1708bbb3c 100644
--- a/vendors/dokuwiki/inc/lang/ja/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt
index 69644b79d..69644b79d 100644
--- a/vendors/dokuwiki/inc/lang/ja/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt
index 099b5989a..099b5989a 100644
--- a/vendors/dokuwiki/inc/lang/ja/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt
index d170aebe4..d170aebe4 100644
--- a/vendors/dokuwiki/inc/lang/ja/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt
index fe5f6b165..fe5f6b165 100644
--- a/vendors/dokuwiki/inc/lang/ja/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt
index af3160b8c..af3160b8c 100644
--- a/vendors/dokuwiki/inc/lang/ja/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt
index e7a8f9720..e7a8f9720 100644
--- a/vendors/dokuwiki/inc/lang/ja/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt
index 7c984131c..7c984131c 100644
--- a/vendors/dokuwiki/inc/lang/ja/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt
index b5fbac97d..b5fbac97d 100644
--- a/vendors/dokuwiki/inc/lang/ja/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/index.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html
index 7439d27e1..7439d27e1 100644
--- a/vendors/dokuwiki/inc/lang/ja/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/install.html
diff --git a/vendors/dokuwiki/inc/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php
index 1f6681af1..1f6681af1 100644
--- a/vendors/dokuwiki/inc/lang/ja/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/lang.php
diff --git a/vendors/dokuwiki/inc/lang/ja/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt
index 1c37c93d1..1c37c93d1 100644
--- a/vendors/dokuwiki/inc/lang/ja/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt
index ef18d378e..ef18d378e 100644
--- a/vendors/dokuwiki/inc/lang/ja/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/login.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt
index 09688cbb7..09688cbb7 100644
--- a/vendors/dokuwiki/inc/lang/ja/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt
index d03169f8a..d03169f8a 100644
--- a/vendors/dokuwiki/inc/lang/ja/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt
index 48ccde700..48ccde700 100644
--- a/vendors/dokuwiki/inc/lang/ja/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt
index ee839cd06..ee839cd06 100644
--- a/vendors/dokuwiki/inc/lang/ja/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt
index 98ccfcdea..98ccfcdea 100644
--- a/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt
index 14137cc14..14137cc14 100644
--- a/vendors/dokuwiki/inc/lang/ja/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/read.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt
index d18fd1bc2..d18fd1bc2 100644
--- a/vendors/dokuwiki/inc/lang/ja/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt
index b242d1e88..b242d1e88 100644
--- a/vendors/dokuwiki/inc/lang/ja/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/register.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt
index 2b272de40..2b272de40 100644
--- a/vendors/dokuwiki/inc/lang/ja/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt
index 23dd6ff1f..23dd6ff1f 100644
--- a/vendors/dokuwiki/inc/lang/ja/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt
index e43731ccd..e43731ccd 100644
--- a/vendors/dokuwiki/inc/lang/ja/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt
index af312728b..af312728b 100644
--- a/vendors/dokuwiki/inc/lang/ja/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt
index d8ce4784e..d8ce4784e 100644
--- a/vendors/dokuwiki/inc/lang/ja/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt
index 628e46ebe..628e46ebe 100644
--- a/vendors/dokuwiki/inc/lang/ja/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt
index d18ffe36d..d18ffe36d 100644
--- a/vendors/dokuwiki/inc/lang/ja/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt
index e83d92965..e83d92965 100644
--- a/vendors/dokuwiki/inc/lang/ja/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt
index 53f30db61..53f30db61 100644
--- a/vendors/dokuwiki/inc/lang/ja/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/ja/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt
index d7edd8765..d7edd8765 100644
--- a/vendors/dokuwiki/inc/lang/ja/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ja/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/km/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt
index 29338b2e7..29338b2e7 100644
--- a/vendors/dokuwiki/inc/lang/km/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/km/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt
index f28068a58..f28068a58 100644
--- a/vendors/dokuwiki/inc/lang/km/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/km/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt
index 7b95fda65..7b95fda65 100644
--- a/vendors/dokuwiki/inc/lang/km/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/km/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt
index 58b10ee86..58b10ee86 100644
--- a/vendors/dokuwiki/inc/lang/km/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/km/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt
index 516ea3779..516ea3779 100644
--- a/vendors/dokuwiki/inc/lang/km/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/km/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt
index 097c1dae1..097c1dae1 100644
--- a/vendors/dokuwiki/inc/lang/km/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/km/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt
index 350050837..350050837 100644
--- a/vendors/dokuwiki/inc/lang/km/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/index.txt
diff --git a/vendors/dokuwiki/inc/lang/km/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php
index a8257255f..a8257255f 100644
--- a/vendors/dokuwiki/inc/lang/km/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/lang.php
diff --git a/vendors/dokuwiki/inc/lang/km/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt
index 2149d9c32..2149d9c32 100644
--- a/vendors/dokuwiki/inc/lang/km/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/login.txt
diff --git a/vendors/dokuwiki/inc/lang/km/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt
index 4b2b4e2d8..4b2b4e2d8 100644
--- a/vendors/dokuwiki/inc/lang/km/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/km/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt
index 7ca11893e..7ca11893e 100644
--- a/vendors/dokuwiki/inc/lang/km/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/km/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt
index 7c6a3ac97..7c6a3ac97 100644
--- a/vendors/dokuwiki/inc/lang/km/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/km/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt
index 14449ea49..14449ea49 100644
--- a/vendors/dokuwiki/inc/lang/km/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/km/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt
index b850c2ec3..b850c2ec3 100644
--- a/vendors/dokuwiki/inc/lang/km/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/register.txt
diff --git a/vendors/dokuwiki/inc/lang/km/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt
index a15186df8..a15186df8 100644
--- a/vendors/dokuwiki/inc/lang/km/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/km/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt
index 7dd0f58b3..7dd0f58b3 100644
--- a/vendors/dokuwiki/inc/lang/ko/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt
index 1711945e4..1711945e4 100644
--- a/vendors/dokuwiki/inc/lang/ko/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt
index 529296359..529296359 100644
--- a/vendors/dokuwiki/inc/lang/ko/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt
index 316a660c0..316a660c0 100644
--- a/vendors/dokuwiki/inc/lang/ko/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt
index 8cfb1da43..8cfb1da43 100644
--- a/vendors/dokuwiki/inc/lang/ko/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt
index 3df8a5e86..3df8a5e86 100644
--- a/vendors/dokuwiki/inc/lang/ko/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt
index d73f935fe..d73f935fe 100644
--- a/vendors/dokuwiki/inc/lang/ko/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt
index 2715448d3..2715448d3 100644
--- a/vendors/dokuwiki/inc/lang/ko/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt
index 7ca9488e0..7ca9488e0 100644
--- a/vendors/dokuwiki/inc/lang/ko/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/index.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html
index 6b1bfaf75..6b1bfaf75 100644
--- a/vendors/dokuwiki/inc/lang/ko/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/install.html
diff --git a/vendors/dokuwiki/inc/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php
index f11ec95fd..f11ec95fd 100644
--- a/vendors/dokuwiki/inc/lang/ko/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/lang.php
diff --git a/vendors/dokuwiki/inc/lang/ko/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt
index 24525fc46..24525fc46 100644
--- a/vendors/dokuwiki/inc/lang/ko/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt
index 1aae449df..1aae449df 100644
--- a/vendors/dokuwiki/inc/lang/ko/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/login.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt
index 5c496435e..5c496435e 100644
--- a/vendors/dokuwiki/inc/lang/ko/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt
index f8380bd84..f8380bd84 100644
--- a/vendors/dokuwiki/inc/lang/ko/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt
index e1b4093b4..e1b4093b4 100644
--- a/vendors/dokuwiki/inc/lang/ko/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt
index 8bcc6a1eb..8bcc6a1eb 100644
--- a/vendors/dokuwiki/inc/lang/ko/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt
index c022a52a9..c022a52a9 100644
--- a/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt
index 6b5d7b3db..6b5d7b3db 100644
--- a/vendors/dokuwiki/inc/lang/ko/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/read.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt
index f693c4bf1..f693c4bf1 100644
--- a/vendors/dokuwiki/inc/lang/ko/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt
index 999073a1d..999073a1d 100644
--- a/vendors/dokuwiki/inc/lang/ko/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/register.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt
index 4b1aa20a5..4b1aa20a5 100644
--- a/vendors/dokuwiki/inc/lang/ko/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt
index b06163e92..b06163e92 100644
--- a/vendors/dokuwiki/inc/lang/ko/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt
index 12d11894d..12d11894d 100644
--- a/vendors/dokuwiki/inc/lang/ko/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt
index 198d9a428..198d9a428 100644
--- a/vendors/dokuwiki/inc/lang/ko/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt
index 084d82737..084d82737 100644
--- a/vendors/dokuwiki/inc/lang/ko/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt
index bdb41deba..bdb41deba 100644
--- a/vendors/dokuwiki/inc/lang/ko/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt
index 9bd0d9011..9bd0d9011 100644
--- a/vendors/dokuwiki/inc/lang/ko/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt
index 5ea331c05..5ea331c05 100644
--- a/vendors/dokuwiki/inc/lang/ko/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt
index 46c66a66b..46c66a66b 100644
--- a/vendors/dokuwiki/inc/lang/ko/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/ko/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt
index 35e251187..35e251187 100644
--- a/vendors/dokuwiki/inc/lang/ko/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ko/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt
index cfd21b217..cfd21b217 100644
--- a/vendors/dokuwiki/inc/lang/ku/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt
index 5fa2ddfda..5fa2ddfda 100644
--- a/vendors/dokuwiki/inc/lang/ku/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt
index e139dce26..e139dce26 100644
--- a/vendors/dokuwiki/inc/lang/ku/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt
index 3ac72820c..3ac72820c 100644
--- a/vendors/dokuwiki/inc/lang/ku/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt
index 934ffb67e..934ffb67e 100644
--- a/vendors/dokuwiki/inc/lang/ku/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt
index 3a259dcf7..3a259dcf7 100644
--- a/vendors/dokuwiki/inc/lang/ku/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt
index e6995713b..e6995713b 100644
--- a/vendors/dokuwiki/inc/lang/ku/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt
index 401404484..401404484 100644
--- a/vendors/dokuwiki/inc/lang/ku/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/index.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php
index 946954b98..946954b98 100644
--- a/vendors/dokuwiki/inc/lang/ku/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/lang.php
diff --git a/vendors/dokuwiki/inc/lang/ku/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt
index af6347a96..af6347a96 100644
--- a/vendors/dokuwiki/inc/lang/ku/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt
index 2004ea198..2004ea198 100644
--- a/vendors/dokuwiki/inc/lang/ku/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/login.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt
index 44a3f6553..44a3f6553 100644
--- a/vendors/dokuwiki/inc/lang/ku/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt
index 6d256f06e..6d256f06e 100644
--- a/vendors/dokuwiki/inc/lang/ku/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt
index 0b21bf3f0..0b21bf3f0 100644
--- a/vendors/dokuwiki/inc/lang/ku/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt
index da8f4cb44..da8f4cb44 100644
--- a/vendors/dokuwiki/inc/lang/ku/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt
index 9f56d81ad..9f56d81ad 100644
--- a/vendors/dokuwiki/inc/lang/ku/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/read.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt
index 268c89ab2..268c89ab2 100644
--- a/vendors/dokuwiki/inc/lang/ku/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt
index b65683bc2..b65683bc2 100644
--- a/vendors/dokuwiki/inc/lang/ku/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/register.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt
index dd5f35b8e..dd5f35b8e 100644
--- a/vendors/dokuwiki/inc/lang/ku/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt
index 6646228d5..6646228d5 100644
--- a/vendors/dokuwiki/inc/lang/ku/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt
index 3608de36b..3608de36b 100644
--- a/vendors/dokuwiki/inc/lang/ku/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt
index bc6eb48ae..bc6eb48ae 100644
--- a/vendors/dokuwiki/inc/lang/ku/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt
index 0c8c2637f..0c8c2637f 100644
--- a/vendors/dokuwiki/inc/lang/ku/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ku/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt
index f0f7d759d..f0f7d759d 100644
--- a/vendors/dokuwiki/inc/lang/ku/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ku/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt
index fd9ae9a87..fd9ae9a87 100644
--- a/vendors/dokuwiki/inc/lang/lt/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt
index ad0d5b83a..ad0d5b83a 100644
--- a/vendors/dokuwiki/inc/lang/lt/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt
index be0c5ff4f..be0c5ff4f 100644
--- a/vendors/dokuwiki/inc/lang/lt/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt
index c25fb5f0c..c25fb5f0c 100644
--- a/vendors/dokuwiki/inc/lang/lt/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt
index dc5e59f89..dc5e59f89 100644
--- a/vendors/dokuwiki/inc/lang/lt/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt
index 8fadf97ad..8fadf97ad 100644
--- a/vendors/dokuwiki/inc/lang/lt/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt
index 9e5eaeece..9e5eaeece 100644
--- a/vendors/dokuwiki/inc/lang/lt/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt
index d13683c47..d13683c47 100644
--- a/vendors/dokuwiki/inc/lang/lt/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/index.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php
index 151964e03..151964e03 100644
--- a/vendors/dokuwiki/inc/lang/lt/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/lang.php
diff --git a/vendors/dokuwiki/inc/lang/lt/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt
index 3f6d000f6..3f6d000f6 100644
--- a/vendors/dokuwiki/inc/lang/lt/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt
index 2a6e21db2..2a6e21db2 100644
--- a/vendors/dokuwiki/inc/lang/lt/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/login.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt
index 63b2f591e..63b2f591e 100644
--- a/vendors/dokuwiki/inc/lang/lt/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt
index c28e30bd4..c28e30bd4 100644
--- a/vendors/dokuwiki/inc/lang/lt/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt
index 028ebe7f2..028ebe7f2 100644
--- a/vendors/dokuwiki/inc/lang/lt/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt
index 2d24e2164..2d24e2164 100644
--- a/vendors/dokuwiki/inc/lang/lt/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt
index 91ea7e656..91ea7e656 100644
--- a/vendors/dokuwiki/inc/lang/lt/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/read.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt
index 506538629..506538629 100644
--- a/vendors/dokuwiki/inc/lang/lt/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt
index f595826f3..f595826f3 100644
--- a/vendors/dokuwiki/inc/lang/lt/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/register.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt
index 753827108..753827108 100644
--- a/vendors/dokuwiki/inc/lang/lt/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt
index 9999767bd..9999767bd 100644
--- a/vendors/dokuwiki/inc/lang/lt/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt
index a83a6a58a..a83a6a58a 100644
--- a/vendors/dokuwiki/inc/lang/lt/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt
index ed774244a..ed774244a 100644
--- a/vendors/dokuwiki/inc/lang/lt/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt
index 8f101bcd7..8f101bcd7 100644
--- a/vendors/dokuwiki/inc/lang/lt/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt
index 7ede1a00a..7ede1a00a 100644
--- a/vendors/dokuwiki/inc/lang/lt/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/lt/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt
index 43ac79bbf..43ac79bbf 100644
--- a/vendors/dokuwiki/inc/lang/lt/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lt/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt
index 3b37fa389..3b37fa389 100644
--- a/vendors/dokuwiki/inc/lang/lv/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt
index e8d208d24..e8d208d24 100644
--- a/vendors/dokuwiki/inc/lang/lv/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt
index 19bebf7b2..19bebf7b2 100644
--- a/vendors/dokuwiki/inc/lang/lv/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt
index 5aa6442c9..5aa6442c9 100644
--- a/vendors/dokuwiki/inc/lang/lv/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt
index c7df462c8..c7df462c8 100644
--- a/vendors/dokuwiki/inc/lang/lv/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt
index 40e1b5405..40e1b5405 100644
--- a/vendors/dokuwiki/inc/lang/lv/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt
index 525f7cbb2..525f7cbb2 100644
--- a/vendors/dokuwiki/inc/lang/lv/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt
index 9da6f2d23..9da6f2d23 100644
--- a/vendors/dokuwiki/inc/lang/lv/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt
index 6fa7a4c05..6fa7a4c05 100644
--- a/vendors/dokuwiki/inc/lang/lv/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt
index 6baa2a3e2..6baa2a3e2 100644
--- a/vendors/dokuwiki/inc/lang/lv/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/index.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html
index 9967d2edd..9967d2edd 100644
--- a/vendors/dokuwiki/inc/lang/lv/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/install.html
diff --git a/vendors/dokuwiki/inc/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php
index 5de7a0cc6..5de7a0cc6 100644
--- a/vendors/dokuwiki/inc/lang/lv/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/lang.php
diff --git a/vendors/dokuwiki/inc/lang/lv/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt
index 7d57ce98b..7d57ce98b 100644
--- a/vendors/dokuwiki/inc/lang/lv/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt
index a98d21d1a..a98d21d1a 100644
--- a/vendors/dokuwiki/inc/lang/lv/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/login.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt
index cd4a5d6d8..cd4a5d6d8 100644
--- a/vendors/dokuwiki/inc/lang/lv/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt
index a4a05fdc5..a4a05fdc5 100644
--- a/vendors/dokuwiki/inc/lang/lv/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt
index b7c46245f..b7c46245f 100644
--- a/vendors/dokuwiki/inc/lang/lv/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt
index c3d618a12..c3d618a12 100644
--- a/vendors/dokuwiki/inc/lang/lv/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt
index 308ca29a1..308ca29a1 100644
--- a/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt
index 876e53cb8..876e53cb8 100644
--- a/vendors/dokuwiki/inc/lang/lv/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/read.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt
index 70cf1aa1e..70cf1aa1e 100644
--- a/vendors/dokuwiki/inc/lang/lv/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt
index 5e6477d37..5e6477d37 100644
--- a/vendors/dokuwiki/inc/lang/lv/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/register.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt
index 50fd8a92b..50fd8a92b 100644
--- a/vendors/dokuwiki/inc/lang/lv/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt
index 3f4597ac0..3f4597ac0 100644
--- a/vendors/dokuwiki/inc/lang/lv/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt
index 51ad8495d..51ad8495d 100644
--- a/vendors/dokuwiki/inc/lang/lv/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt
index 22eb55f04..22eb55f04 100644
--- a/vendors/dokuwiki/inc/lang/lv/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt
index 7d5c0fa07..7d5c0fa07 100644
--- a/vendors/dokuwiki/inc/lang/lv/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt
index 846c86946..846c86946 100644
--- a/vendors/dokuwiki/inc/lang/lv/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt
index 1395009f0..1395009f0 100644
--- a/vendors/dokuwiki/inc/lang/lv/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt
index 12fbd8de4..12fbd8de4 100644
--- a/vendors/dokuwiki/inc/lang/lv/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt
index 5975d5bd0..5975d5bd0 100644
--- a/vendors/dokuwiki/inc/lang/lv/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/lv/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt
index aa7051c8d..aa7051c8d 100644
--- a/vendors/dokuwiki/inc/lang/lv/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/lv/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt
index 2c4fc3f6c..2c4fc3f6c 100644
--- a/vendors/dokuwiki/inc/lang/mg/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt
index c625e6504..c625e6504 100644
--- a/vendors/dokuwiki/inc/lang/mg/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt
index 96b369e39..96b369e39 100644
--- a/vendors/dokuwiki/inc/lang/mg/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt
index edf20f1a1..edf20f1a1 100644
--- a/vendors/dokuwiki/inc/lang/mg/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt
index 8d7d69b45..8d7d69b45 100644
--- a/vendors/dokuwiki/inc/lang/mg/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt
index 2cde9deb1..2cde9deb1 100644
--- a/vendors/dokuwiki/inc/lang/mg/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt
index a6ff5ba32..a6ff5ba32 100644
--- a/vendors/dokuwiki/inc/lang/mg/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt
index 614fd6434..614fd6434 100644
--- a/vendors/dokuwiki/inc/lang/mg/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/index.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php
index bae292363..bae292363 100644
--- a/vendors/dokuwiki/inc/lang/mg/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/lang.php
diff --git a/vendors/dokuwiki/inc/lang/mg/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt
index 5705659a3..5705659a3 100644
--- a/vendors/dokuwiki/inc/lang/mg/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt
index 1ea3facb0..1ea3facb0 100644
--- a/vendors/dokuwiki/inc/lang/mg/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/login.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt
index ca919345a..ca919345a 100644
--- a/vendors/dokuwiki/inc/lang/mg/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt
index a998caf28..a998caf28 100644
--- a/vendors/dokuwiki/inc/lang/mg/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt
index 71ecb9ba4..71ecb9ba4 100644
--- a/vendors/dokuwiki/inc/lang/mg/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt
index 52019cd73..52019cd73 100644
--- a/vendors/dokuwiki/inc/lang/mg/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt
index 0fe51f4a2..0fe51f4a2 100644
--- a/vendors/dokuwiki/inc/lang/mg/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/read.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt
index 4bc8245a7..4bc8245a7 100644
--- a/vendors/dokuwiki/inc/lang/mg/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt
index 618c1f97e..618c1f97e 100644
--- a/vendors/dokuwiki/inc/lang/mg/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/register.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt
index 72704587a..72704587a 100644
--- a/vendors/dokuwiki/inc/lang/mg/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt
index 68c6271df..68c6271df 100644
--- a/vendors/dokuwiki/inc/lang/mg/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt
index 92690f4dd..92690f4dd 100644
--- a/vendors/dokuwiki/inc/lang/mg/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/mg/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt
index 581d67d16..581d67d16 100644
--- a/vendors/dokuwiki/inc/lang/mg/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mg/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt
index 6f54384f2..6f54384f2 100644
--- a/vendors/dokuwiki/inc/lang/mr/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt
index 997fa68e0..997fa68e0 100644
--- a/vendors/dokuwiki/inc/lang/mr/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt
index 2b1bb6423..2b1bb6423 100644
--- a/vendors/dokuwiki/inc/lang/mr/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt
index 1b499f51d..1b499f51d 100644
--- a/vendors/dokuwiki/inc/lang/mr/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt
index f0a845056..f0a845056 100644
--- a/vendors/dokuwiki/inc/lang/mr/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt
index aa74475d7..aa74475d7 100644
--- a/vendors/dokuwiki/inc/lang/mr/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt
index 6c6347e70..6c6347e70 100644
--- a/vendors/dokuwiki/inc/lang/mr/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt
index d58c8abd0..d58c8abd0 100644
--- a/vendors/dokuwiki/inc/lang/mr/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt
index 489b20435..489b20435 100644
--- a/vendors/dokuwiki/inc/lang/mr/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/index.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html
index ddbf8245b..ddbf8245b 100644
--- a/vendors/dokuwiki/inc/lang/mr/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/install.html
diff --git a/vendors/dokuwiki/inc/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php
index 715d51119..715d51119 100644
--- a/vendors/dokuwiki/inc/lang/mr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/lang.php
diff --git a/vendors/dokuwiki/inc/lang/mr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt
index dae909c40..dae909c40 100644
--- a/vendors/dokuwiki/inc/lang/mr/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt
index f2fef4c45..f2fef4c45 100644
--- a/vendors/dokuwiki/inc/lang/mr/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/login.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt
index 18fa23846..18fa23846 100644
--- a/vendors/dokuwiki/inc/lang/mr/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt
index 00a1c6b60..00a1c6b60 100644
--- a/vendors/dokuwiki/inc/lang/mr/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt
index 180b031fe..180b031fe 100644
--- a/vendors/dokuwiki/inc/lang/mr/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt
index 8277398dd..8277398dd 100644
--- a/vendors/dokuwiki/inc/lang/mr/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt
index ec0b707a1..ec0b707a1 100644
--- a/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt
index b834dd750..b834dd750 100644
--- a/vendors/dokuwiki/inc/lang/mr/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/read.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt
index 9a6d6f151..9a6d6f151 100644
--- a/vendors/dokuwiki/inc/lang/mr/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt
index 3aca31278..3aca31278 100644
--- a/vendors/dokuwiki/inc/lang/mr/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/register.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt
index a6fea4d06..a6fea4d06 100644
--- a/vendors/dokuwiki/inc/lang/mr/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt
index 64b95a45f..64b95a45f 100644
--- a/vendors/dokuwiki/inc/lang/mr/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt
index fb842c763..fb842c763 100644
--- a/vendors/dokuwiki/inc/lang/mr/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt
index 23e10b1d3..23e10b1d3 100644
--- a/vendors/dokuwiki/inc/lang/mr/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt
index aeaeee500..aeaeee500 100644
--- a/vendors/dokuwiki/inc/lang/mr/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt
index 2b413a928..2b413a928 100644
--- a/vendors/dokuwiki/inc/lang/mr/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt
index 8cbb3164e..8cbb3164e 100644
--- a/vendors/dokuwiki/inc/lang/mr/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt
index c08810f3e..c08810f3e 100644
--- a/vendors/dokuwiki/inc/lang/mr/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt
index 66e736598..66e736598 100644
--- a/vendors/dokuwiki/inc/lang/mr/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/mr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt
index e885cbed9..e885cbed9 100644
--- a/vendors/dokuwiki/inc/lang/mr/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/mr/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt
index 7a829dbe5..7a829dbe5 100644
--- a/vendors/dokuwiki/inc/lang/ne/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt
index 51b95731d..51b95731d 100644
--- a/vendors/dokuwiki/inc/lang/ne/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt
index 457e108ad..457e108ad 100644
--- a/vendors/dokuwiki/inc/lang/ne/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt
index ab4bcf290..ab4bcf290 100644
--- a/vendors/dokuwiki/inc/lang/ne/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt
index 76d75fbfb..76d75fbfb 100644
--- a/vendors/dokuwiki/inc/lang/ne/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt
index 88630c992..88630c992 100644
--- a/vendors/dokuwiki/inc/lang/ne/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt
index be498a61b..be498a61b 100644
--- a/vendors/dokuwiki/inc/lang/ne/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt
index 0db67c2bb..0db67c2bb 100644
--- a/vendors/dokuwiki/inc/lang/ne/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt
index cb06f0307..cb06f0307 100644
--- a/vendors/dokuwiki/inc/lang/ne/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/index.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php
index ce9310ee5..ce9310ee5 100644
--- a/vendors/dokuwiki/inc/lang/ne/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/lang.php
diff --git a/vendors/dokuwiki/inc/lang/ne/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt
index 85f5390a0..85f5390a0 100644
--- a/vendors/dokuwiki/inc/lang/ne/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt
index 28c4efb66..28c4efb66 100644
--- a/vendors/dokuwiki/inc/lang/ne/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt
index 1d8cd9fd6..1d8cd9fd6 100644
--- a/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt
index e004cd39b..e004cd39b 100644
--- a/vendors/dokuwiki/inc/lang/ne/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/read.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt
index 239903fd7..239903fd7 100644
--- a/vendors/dokuwiki/inc/lang/ne/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt
index aec9dfb95..aec9dfb95 100644
--- a/vendors/dokuwiki/inc/lang/ne/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt
index a8139f0ab..a8139f0ab 100644
--- a/vendors/dokuwiki/inc/lang/ne/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt
index 5b22e9737..5b22e9737 100644
--- a/vendors/dokuwiki/inc/lang/ne/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt
index 413c79c67..413c79c67 100644
--- a/vendors/dokuwiki/inc/lang/ne/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt
index e3027e429..e3027e429 100644
--- a/vendors/dokuwiki/inc/lang/ne/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/ne/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt
index 74ea46407..74ea46407 100644
--- a/vendors/dokuwiki/inc/lang/ne/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ne/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt
index 7138456f1..7138456f1 100644
--- a/vendors/dokuwiki/inc/lang/nl/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt
index 916a9ca9b..916a9ca9b 100644
--- a/vendors/dokuwiki/inc/lang/nl/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt
index 6edbf4021..6edbf4021 100644
--- a/vendors/dokuwiki/inc/lang/nl/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt
index 926214517..926214517 100644
--- a/vendors/dokuwiki/inc/lang/nl/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt
index 6a8bf773f..6a8bf773f 100644
--- a/vendors/dokuwiki/inc/lang/nl/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt
index ef5a1b189..ef5a1b189 100644
--- a/vendors/dokuwiki/inc/lang/nl/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt
index a6bf5275d..a6bf5275d 100644
--- a/vendors/dokuwiki/inc/lang/nl/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt
index e539050bc..e539050bc 100644
--- a/vendors/dokuwiki/inc/lang/nl/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt
index 1b2d130c7..1b2d130c7 100644
--- a/vendors/dokuwiki/inc/lang/nl/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt
index 288957ed4..288957ed4 100644
--- a/vendors/dokuwiki/inc/lang/nl/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/index.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html
index 8ddec7aab..8ddec7aab 100644
--- a/vendors/dokuwiki/inc/lang/nl/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/install.html
diff --git a/vendors/dokuwiki/inc/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php
index 782a76758..782a76758 100644
--- a/vendors/dokuwiki/inc/lang/nl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/lang.php
diff --git a/vendors/dokuwiki/inc/lang/nl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt
index 878fb375c..878fb375c 100644
--- a/vendors/dokuwiki/inc/lang/nl/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt
index 699cbf8fe..699cbf8fe 100644
--- a/vendors/dokuwiki/inc/lang/nl/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/login.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt
index dbe35c519..dbe35c519 100644
--- a/vendors/dokuwiki/inc/lang/nl/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt
index 0e4b95ec0..0e4b95ec0 100644
--- a/vendors/dokuwiki/inc/lang/nl/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt
index 849fc5138..849fc5138 100644
--- a/vendors/dokuwiki/inc/lang/nl/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt
index 4d2927aff..4d2927aff 100644
--- a/vendors/dokuwiki/inc/lang/nl/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt
index ab72ae7c4..ab72ae7c4 100644
--- a/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt
index fcb791811..fcb791811 100644
--- a/vendors/dokuwiki/inc/lang/nl/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/read.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt
index 4b507f2ca..4b507f2ca 100644
--- a/vendors/dokuwiki/inc/lang/nl/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt
index 338edcca3..338edcca3 100644
--- a/vendors/dokuwiki/inc/lang/nl/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/register.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt
index 5efb25144..5efb25144 100644
--- a/vendors/dokuwiki/inc/lang/nl/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt
index ed4617748..ed4617748 100644
--- a/vendors/dokuwiki/inc/lang/nl/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt
index 7a78917fc..7a78917fc 100644
--- a/vendors/dokuwiki/inc/lang/nl/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt
index 3ace704c8..3ace704c8 100644
--- a/vendors/dokuwiki/inc/lang/nl/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt
index c1bfa4e2b..c1bfa4e2b 100644
--- a/vendors/dokuwiki/inc/lang/nl/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt
index 3056c4a70..3056c4a70 100644
--- a/vendors/dokuwiki/inc/lang/nl/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt
index 5b092a9a6..5b092a9a6 100644
--- a/vendors/dokuwiki/inc/lang/nl/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt
index 2368a09fd..2368a09fd 100644
--- a/vendors/dokuwiki/inc/lang/nl/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt
index 1816400d7..1816400d7 100644
--- a/vendors/dokuwiki/inc/lang/nl/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/nl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt
index d887d7318..d887d7318 100644
--- a/vendors/dokuwiki/inc/lang/nl/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/nl/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/no/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt
index 99289a18b..99289a18b 100644
--- a/vendors/dokuwiki/inc/lang/no/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/no/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt
index 32499a2e4..32499a2e4 100644
--- a/vendors/dokuwiki/inc/lang/no/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/no/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt
index 9fe72066e..9fe72066e 100644
--- a/vendors/dokuwiki/inc/lang/no/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/no/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt
index 89479af4f..89479af4f 100644
--- a/vendors/dokuwiki/inc/lang/no/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/no/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt
index 4f8c9a188..4f8c9a188 100644
--- a/vendors/dokuwiki/inc/lang/no/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/no/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt
index e4c2eb080..e4c2eb080 100644
--- a/vendors/dokuwiki/inc/lang/no/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/no/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt
index 8bcea65aa..8bcea65aa 100644
--- a/vendors/dokuwiki/inc/lang/no/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/no/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt
index bdb3bc854..bdb3bc854 100644
--- a/vendors/dokuwiki/inc/lang/no/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/no/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt
index 652a84c38..652a84c38 100644
--- a/vendors/dokuwiki/inc/lang/no/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/no/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt
index e2ea95933..e2ea95933 100644
--- a/vendors/dokuwiki/inc/lang/no/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/index.txt
diff --git a/vendors/dokuwiki/inc/lang/no/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html
index 541445494..541445494 100644
--- a/vendors/dokuwiki/inc/lang/no/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/install.html
diff --git a/vendors/dokuwiki/inc/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php
index 2dc2c8339..2dc2c8339 100644
--- a/vendors/dokuwiki/inc/lang/no/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/lang.php
diff --git a/vendors/dokuwiki/inc/lang/no/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt
index cb14c892e..cb14c892e 100644
--- a/vendors/dokuwiki/inc/lang/no/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/no/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt
index 149cf0031..149cf0031 100644
--- a/vendors/dokuwiki/inc/lang/no/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/login.txt
diff --git a/vendors/dokuwiki/inc/lang/no/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt
index 9c0714c2f..9c0714c2f 100644
--- a/vendors/dokuwiki/inc/lang/no/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/no/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt
index 8f4b8da79..8f4b8da79 100644
--- a/vendors/dokuwiki/inc/lang/no/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/no/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt
index dfd71db0f..dfd71db0f 100644
--- a/vendors/dokuwiki/inc/lang/no/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/no/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt
index 2bed20e86..2bed20e86 100644
--- a/vendors/dokuwiki/inc/lang/no/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/no/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt
index 9b8a0ab3e..9b8a0ab3e 100644
--- a/vendors/dokuwiki/inc/lang/no/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/no/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt
index 27fcb5118..27fcb5118 100644
--- a/vendors/dokuwiki/inc/lang/no/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/read.txt
diff --git a/vendors/dokuwiki/inc/lang/no/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt
index d9357b1a4..d9357b1a4 100644
--- a/vendors/dokuwiki/inc/lang/no/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/no/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt
index 1ce95c44d..1ce95c44d 100644
--- a/vendors/dokuwiki/inc/lang/no/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/register.txt
diff --git a/vendors/dokuwiki/inc/lang/no/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt
index e1fae2b90..e1fae2b90 100644
--- a/vendors/dokuwiki/inc/lang/no/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/no/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt
index 21625d3f5..21625d3f5 100644
--- a/vendors/dokuwiki/inc/lang/no/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/no/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt
index 023fd8dce..023fd8dce 100644
--- a/vendors/dokuwiki/inc/lang/no/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/no/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt
index e94e7895b..e94e7895b 100644
--- a/vendors/dokuwiki/inc/lang/no/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/no/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt
index 556896437..556896437 100644
--- a/vendors/dokuwiki/inc/lang/no/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/no/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt
index 2b2ab11e2..2b2ab11e2 100644
--- a/vendors/dokuwiki/inc/lang/no/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/no/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt
index 999f75787..999f75787 100644
--- a/vendors/dokuwiki/inc/lang/no/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/no/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt
index 5565e528f..5565e528f 100644
--- a/vendors/dokuwiki/inc/lang/no/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/no/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt
index b01905009..b01905009 100644
--- a/vendors/dokuwiki/inc/lang/no/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/no/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt
index 30c4c31ce..30c4c31ce 100644
--- a/vendors/dokuwiki/inc/lang/no/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/no/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt
index cea45f9d0..cea45f9d0 100644
--- a/vendors/dokuwiki/inc/lang/pl/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt
index 0fb03993e..0fb03993e 100644
--- a/vendors/dokuwiki/inc/lang/pl/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt
index 4edccb09b..4edccb09b 100644
--- a/vendors/dokuwiki/inc/lang/pl/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt
index da6f95260..da6f95260 100644
--- a/vendors/dokuwiki/inc/lang/pl/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt
index d402463ef..d402463ef 100644
--- a/vendors/dokuwiki/inc/lang/pl/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt
index 2c896ddb3..2c896ddb3 100644
--- a/vendors/dokuwiki/inc/lang/pl/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt
index 4036c3079..4036c3079 100644
--- a/vendors/dokuwiki/inc/lang/pl/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt
index abb20ae1c..abb20ae1c 100644
--- a/vendors/dokuwiki/inc/lang/pl/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt
index 1528cac7e..1528cac7e 100644
--- a/vendors/dokuwiki/inc/lang/pl/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt
index 1d3fd27f6..1d3fd27f6 100644
--- a/vendors/dokuwiki/inc/lang/pl/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/index.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html
index f1d48c1ad..f1d48c1ad 100644
--- a/vendors/dokuwiki/inc/lang/pl/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/install.html
diff --git a/vendors/dokuwiki/inc/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php
index 882806577..882806577 100644
--- a/vendors/dokuwiki/inc/lang/pl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/lang.php
diff --git a/vendors/dokuwiki/inc/lang/pl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt
index e3e05fefc..e3e05fefc 100644
--- a/vendors/dokuwiki/inc/lang/pl/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt
index b60427f4f..b60427f4f 100644
--- a/vendors/dokuwiki/inc/lang/pl/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/login.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt
index 1180966bc..1180966bc 100644
--- a/vendors/dokuwiki/inc/lang/pl/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt
index 532d3f4ab..532d3f4ab 100644
--- a/vendors/dokuwiki/inc/lang/pl/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt
index 858e4a881..858e4a881 100644
--- a/vendors/dokuwiki/inc/lang/pl/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt
index 41a123cf3..41a123cf3 100644
--- a/vendors/dokuwiki/inc/lang/pl/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt
index f6ccca47e..f6ccca47e 100644
--- a/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt
index 5f89fd93d..5f89fd93d 100644
--- a/vendors/dokuwiki/inc/lang/pl/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/read.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt
index 65a776c0e..65a776c0e 100644
--- a/vendors/dokuwiki/inc/lang/pl/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt
index 91b761d15..91b761d15 100644
--- a/vendors/dokuwiki/inc/lang/pl/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/register.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt
index 18437fa0a..18437fa0a 100644
--- a/vendors/dokuwiki/inc/lang/pl/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt
index a7cac7442..a7cac7442 100644
--- a/vendors/dokuwiki/inc/lang/pl/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt
index afe2b6478..afe2b6478 100644
--- a/vendors/dokuwiki/inc/lang/pl/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt
index 61b9ffbf9..61b9ffbf9 100644
--- a/vendors/dokuwiki/inc/lang/pl/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt
index 43e826ed5..43e826ed5 100644
--- a/vendors/dokuwiki/inc/lang/pl/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt
index f1d244a26..f1d244a26 100644
--- a/vendors/dokuwiki/inc/lang/pl/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt
index 76300177e..76300177e 100644
--- a/vendors/dokuwiki/inc/lang/pl/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt
index aa80f4cdf..aa80f4cdf 100644
--- a/vendors/dokuwiki/inc/lang/pl/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt
index e76ec80e6..e76ec80e6 100644
--- a/vendors/dokuwiki/inc/lang/pl/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/pl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt
index 09edb25dd..09edb25dd 100644
--- a/vendors/dokuwiki/inc/lang/pl/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pl/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt
index f8be56e60..f8be56e60 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt
index 3eac7af53..3eac7af53 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt
index fce9dba54..fce9dba54 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt
index 53d9afac7..53d9afac7 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt
index d7e423f42..d7e423f42 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt
index 517d9f275..517d9f275 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt
index b3d345cca..b3d345cca 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt
index 113fb8ede..113fb8ede 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt
index c7aa47878..c7aa47878 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt
index a7d17a2bc..a7d17a2bc 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/index.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html
index b915f0701..b915f0701 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/install.html
diff --git a/vendors/dokuwiki/inc/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php
index ed7224c14..ed7224c14 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/lang.php
diff --git a/vendors/dokuwiki/inc/lang/pt-br/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt
index 70658cba1..70658cba1 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt
index 23215e16c..23215e16c 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/login.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt
index e52535bf0..e52535bf0 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt
index 77ba49fa5..77ba49fa5 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt
index 19024dcf7..19024dcf7 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt
index efdc8f7f2..efdc8f7f2 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt
index 2a7c88531..2a7c88531 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt
index 897155eed..897155eed 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/read.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt
index 988f235b4..988f235b4 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt
index 431feca98..431feca98 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/register.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt
index 9bb6a00ba..9bb6a00ba 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt
index b74713f0f..b74713f0f 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt
index 1c174dcb0..1c174dcb0 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt
index 2fba3afe9..2fba3afe9 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt
index 89d9cad5a..89d9cad5a 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt
index c781ffbf2..c781ffbf2 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt
index 157196c15..157196c15 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt
index b3f62f396..b3f62f396 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt
index a3ac9bac7..a3ac9bac7 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt
index c2c9cbdb0..c2c9cbdb0 100644
--- a/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt-br/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt
index fccd9ca33..fccd9ca33 100644
--- a/vendors/dokuwiki/inc/lang/pt/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt
index 3eac7af53..3eac7af53 100644
--- a/vendors/dokuwiki/inc/lang/pt/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt
index e78ddf874..e78ddf874 100644
--- a/vendors/dokuwiki/inc/lang/pt/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt
index d2af1fe11..d2af1fe11 100644
--- a/vendors/dokuwiki/inc/lang/pt/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt
index 71355b01f..71355b01f 100644
--- a/vendors/dokuwiki/inc/lang/pt/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt
index e27640aa8..e27640aa8 100644
--- a/vendors/dokuwiki/inc/lang/pt/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt
index 1baf95c1c..1baf95c1c 100644
--- a/vendors/dokuwiki/inc/lang/pt/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt
index 2fa596e29..2fa596e29 100644
--- a/vendors/dokuwiki/inc/lang/pt/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt
index 9845a6915..9845a6915 100644
--- a/vendors/dokuwiki/inc/lang/pt/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt
index f490b7a5c..f490b7a5c 100644
--- a/vendors/dokuwiki/inc/lang/pt/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/index.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html
index a2fd5c7c6..a2fd5c7c6 100644
--- a/vendors/dokuwiki/inc/lang/pt/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/install.html
diff --git a/vendors/dokuwiki/inc/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php
index ef4c70785..ef4c70785 100644
--- a/vendors/dokuwiki/inc/lang/pt/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/lang.php
diff --git a/vendors/dokuwiki/inc/lang/pt/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt
index b9df29cb5..b9df29cb5 100644
--- a/vendors/dokuwiki/inc/lang/pt/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt
index e8000bbab..e8000bbab 100644
--- a/vendors/dokuwiki/inc/lang/pt/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/login.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt
index 915a147ec..915a147ec 100644
--- a/vendors/dokuwiki/inc/lang/pt/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt
index 4db706be1..4db706be1 100644
--- a/vendors/dokuwiki/inc/lang/pt/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt
index 6dd8dfb6c..6dd8dfb6c 100644
--- a/vendors/dokuwiki/inc/lang/pt/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt
index 077665881..077665881 100644
--- a/vendors/dokuwiki/inc/lang/pt/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt
index 2848a116c..2848a116c 100644
--- a/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt
index 92be189f3..92be189f3 100644
--- a/vendors/dokuwiki/inc/lang/pt/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/read.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt
index 339041468..339041468 100644
--- a/vendors/dokuwiki/inc/lang/pt/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt
index c647a4615..c647a4615 100644
--- a/vendors/dokuwiki/inc/lang/pt/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/register.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt
index b9c1f164b..b9c1f164b 100644
--- a/vendors/dokuwiki/inc/lang/pt/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt
index 9a54ace07..9a54ace07 100644
--- a/vendors/dokuwiki/inc/lang/pt/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt
index 213022f91..213022f91 100644
--- a/vendors/dokuwiki/inc/lang/pt/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt
index 49a0b16ea..49a0b16ea 100644
--- a/vendors/dokuwiki/inc/lang/pt/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt
index e8ad7f47a..e8ad7f47a 100644
--- a/vendors/dokuwiki/inc/lang/pt/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt
index 373e6ee5a..373e6ee5a 100644
--- a/vendors/dokuwiki/inc/lang/pt/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt
index 3a9e40d20..3a9e40d20 100644
--- a/vendors/dokuwiki/inc/lang/pt/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt
index efacfe4a2..efacfe4a2 100644
--- a/vendors/dokuwiki/inc/lang/pt/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt
index 249d66234..249d66234 100644
--- a/vendors/dokuwiki/inc/lang/pt/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/pt/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt
index a88063c9b..a88063c9b 100644
--- a/vendors/dokuwiki/inc/lang/pt/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/pt/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt
index 4b1a9062a..4b1a9062a 100644
--- a/vendors/dokuwiki/inc/lang/ro/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt
index f076c3651..f076c3651 100644
--- a/vendors/dokuwiki/inc/lang/ro/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt
index 3fd5e3415..3fd5e3415 100644
--- a/vendors/dokuwiki/inc/lang/ro/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt
index d7218ca5f..d7218ca5f 100644
--- a/vendors/dokuwiki/inc/lang/ro/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt
index 8178995e9..8178995e9 100644
--- a/vendors/dokuwiki/inc/lang/ro/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt
index f33be8afd..f33be8afd 100644
--- a/vendors/dokuwiki/inc/lang/ro/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt
index e13671e3e..e13671e3e 100644
--- a/vendors/dokuwiki/inc/lang/ro/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt
index 1e79dc4fc..1e79dc4fc 100644
--- a/vendors/dokuwiki/inc/lang/ro/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt
index 290dca496..290dca496 100644
--- a/vendors/dokuwiki/inc/lang/ro/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt
index 5b88cc03b..5b88cc03b 100644
--- a/vendors/dokuwiki/inc/lang/ro/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/index.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html
index 56cf3873b..56cf3873b 100644
--- a/vendors/dokuwiki/inc/lang/ro/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/install.html
diff --git a/vendors/dokuwiki/inc/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php
index 87ee6ae0f..87ee6ae0f 100644
--- a/vendors/dokuwiki/inc/lang/ro/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/lang.php
diff --git a/vendors/dokuwiki/inc/lang/ro/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt
index 94d6eb2ff..94d6eb2ff 100644
--- a/vendors/dokuwiki/inc/lang/ro/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt
index 2f1fda9ad..2f1fda9ad 100644
--- a/vendors/dokuwiki/inc/lang/ro/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/login.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt
index 77aca8c4b..77aca8c4b 100644
--- a/vendors/dokuwiki/inc/lang/ro/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt
index 7fb9d55a6..7fb9d55a6 100644
--- a/vendors/dokuwiki/inc/lang/ro/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt
index 926f9144e..926f9144e 100644
--- a/vendors/dokuwiki/inc/lang/ro/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt
index 1964d7476..1964d7476 100644
--- a/vendors/dokuwiki/inc/lang/ro/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt
index 043e08868..043e08868 100644
--- a/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt
index 2c0aa6d90..2c0aa6d90 100644
--- a/vendors/dokuwiki/inc/lang/ro/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/read.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt
index 8d4aa043a..8d4aa043a 100644
--- a/vendors/dokuwiki/inc/lang/ro/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt
index 9fc6eec65..9fc6eec65 100644
--- a/vendors/dokuwiki/inc/lang/ro/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/register.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt
index fb754af67..fb754af67 100644
--- a/vendors/dokuwiki/inc/lang/ro/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt
index b7de241e9..b7de241e9 100644
--- a/vendors/dokuwiki/inc/lang/ro/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt
index b2ff46f77..b2ff46f77 100644
--- a/vendors/dokuwiki/inc/lang/ro/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt
index c1169b88d..c1169b88d 100644
--- a/vendors/dokuwiki/inc/lang/ro/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt
index c1d5e545d..c1d5e545d 100644
--- a/vendors/dokuwiki/inc/lang/ro/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt
index 29e7452d3..29e7452d3 100644
--- a/vendors/dokuwiki/inc/lang/ro/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt
index 23374dc6f..23374dc6f 100644
--- a/vendors/dokuwiki/inc/lang/ro/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt
index e5988ec51..e5988ec51 100644
--- a/vendors/dokuwiki/inc/lang/ro/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt
index 39faed370..39faed370 100644
--- a/vendors/dokuwiki/inc/lang/ro/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/ro/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt
index 1fa7bd6cd..1fa7bd6cd 100644
--- a/vendors/dokuwiki/inc/lang/ro/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ro/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt
index cb03be52e..cb03be52e 100644
--- a/vendors/dokuwiki/inc/lang/ru/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt
index 6e3fc26f2..6e3fc26f2 100644
--- a/vendors/dokuwiki/inc/lang/ru/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt
index a3b638d19..a3b638d19 100644
--- a/vendors/dokuwiki/inc/lang/ru/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt
index f1ac60bd4..f1ac60bd4 100644
--- a/vendors/dokuwiki/inc/lang/ru/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt
index eee59efe6..eee59efe6 100644
--- a/vendors/dokuwiki/inc/lang/ru/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt
index 4d1d4d031..4d1d4d031 100644
--- a/vendors/dokuwiki/inc/lang/ru/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt
index bbd2e5913..bbd2e5913 100644
--- a/vendors/dokuwiki/inc/lang/ru/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt
index 2237f082e..2237f082e 100644
--- a/vendors/dokuwiki/inc/lang/ru/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt
index db843ec1c..db843ec1c 100644
--- a/vendors/dokuwiki/inc/lang/ru/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt
index 376d58947..376d58947 100644
--- a/vendors/dokuwiki/inc/lang/ru/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/index.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html
index d7022dd46..d7022dd46 100644
--- a/vendors/dokuwiki/inc/lang/ru/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/install.html
diff --git a/vendors/dokuwiki/inc/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php
index f6cec8170..f6cec8170 100644
--- a/vendors/dokuwiki/inc/lang/ru/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/lang.php
diff --git a/vendors/dokuwiki/inc/lang/ru/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt
index 3e868ba9a..3e868ba9a 100644
--- a/vendors/dokuwiki/inc/lang/ru/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt
index 967131874..967131874 100644
--- a/vendors/dokuwiki/inc/lang/ru/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/login.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt
index 596fd8275..596fd8275 100644
--- a/vendors/dokuwiki/inc/lang/ru/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt
index 042941310..042941310 100644
--- a/vendors/dokuwiki/inc/lang/ru/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt
index db36a0ddd..db36a0ddd 100644
--- a/vendors/dokuwiki/inc/lang/ru/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt
index a3f37843d..a3f37843d 100644
--- a/vendors/dokuwiki/inc/lang/ru/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt
index 89c84791e..89c84791e 100644
--- a/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt
index ed2754ac7..ed2754ac7 100644
--- a/vendors/dokuwiki/inc/lang/ru/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/read.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt
index aa088c734..aa088c734 100644
--- a/vendors/dokuwiki/inc/lang/ru/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt
index 23ed33656..23ed33656 100644
--- a/vendors/dokuwiki/inc/lang/ru/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/register.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt
index 615cff543..615cff543 100644
--- a/vendors/dokuwiki/inc/lang/ru/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt
index 9bcd98dea..9bcd98dea 100644
--- a/vendors/dokuwiki/inc/lang/ru/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt
index 4341969a3..4341969a3 100644
--- a/vendors/dokuwiki/inc/lang/ru/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt
index 33cac358a..33cac358a 100644
--- a/vendors/dokuwiki/inc/lang/ru/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt
index acb814e17..acb814e17 100644
--- a/vendors/dokuwiki/inc/lang/ru/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt
index a6df13902..a6df13902 100644
--- a/vendors/dokuwiki/inc/lang/ru/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt
index 1a846ac32..1a846ac32 100644
--- a/vendors/dokuwiki/inc/lang/ru/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt
index 136184467..136184467 100644
--- a/vendors/dokuwiki/inc/lang/ru/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt
index 07dbf186d..07dbf186d 100644
--- a/vendors/dokuwiki/inc/lang/ru/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/ru/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt
index 09c663fb3..09c663fb3 100644
--- a/vendors/dokuwiki/inc/lang/ru/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/ru/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt
index 039da2ae2..039da2ae2 100644
--- a/vendors/dokuwiki/inc/lang/sk/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt
index b3217d545..b3217d545 100644
--- a/vendors/dokuwiki/inc/lang/sk/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt
index d3cd0f590..d3cd0f590 100644
--- a/vendors/dokuwiki/inc/lang/sk/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt
index 6f673c7d6..6f673c7d6 100644
--- a/vendors/dokuwiki/inc/lang/sk/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt
index 0e29e7f7b..0e29e7f7b 100644
--- a/vendors/dokuwiki/inc/lang/sk/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt
index 7e6776deb..7e6776deb 100644
--- a/vendors/dokuwiki/inc/lang/sk/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt
index 1adf4e16f..1adf4e16f 100644
--- a/vendors/dokuwiki/inc/lang/sk/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt
index 6a837c244..6a837c244 100644
--- a/vendors/dokuwiki/inc/lang/sk/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt
index 7b26d42ce..7b26d42ce 100644
--- a/vendors/dokuwiki/inc/lang/sk/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/index.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html
index c45b82005..c45b82005 100644
--- a/vendors/dokuwiki/inc/lang/sk/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/install.html
diff --git a/vendors/dokuwiki/inc/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php
index 2d9c8efea..2d9c8efea 100644
--- a/vendors/dokuwiki/inc/lang/sk/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/lang.php
diff --git a/vendors/dokuwiki/inc/lang/sk/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt
index 0e7d9645e..0e7d9645e 100644
--- a/vendors/dokuwiki/inc/lang/sk/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt
index 3bfc91037..3bfc91037 100644
--- a/vendors/dokuwiki/inc/lang/sk/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/login.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt
index 78757799e..78757799e 100644
--- a/vendors/dokuwiki/inc/lang/sk/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt
index 180d80ee1..180d80ee1 100644
--- a/vendors/dokuwiki/inc/lang/sk/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt
index 8d35f7f20..8d35f7f20 100644
--- a/vendors/dokuwiki/inc/lang/sk/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt
index 871bca371..871bca371 100644
--- a/vendors/dokuwiki/inc/lang/sk/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt
index 19903203d..19903203d 100644
--- a/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt
index a50b2afb6..a50b2afb6 100644
--- a/vendors/dokuwiki/inc/lang/sk/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/read.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt
index 408d1075b..408d1075b 100644
--- a/vendors/dokuwiki/inc/lang/sk/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt
index 8dfe6be4e..8dfe6be4e 100644
--- a/vendors/dokuwiki/inc/lang/sk/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/register.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt
index 3fdc63f74..3fdc63f74 100644
--- a/vendors/dokuwiki/inc/lang/sk/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt
index b51706c96..b51706c96 100644
--- a/vendors/dokuwiki/inc/lang/sk/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt
index 887386eab..887386eab 100644
--- a/vendors/dokuwiki/inc/lang/sk/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt
index 3fdf074b7..3fdf074b7 100644
--- a/vendors/dokuwiki/inc/lang/sk/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt
index 036769694..036769694 100644
--- a/vendors/dokuwiki/inc/lang/sk/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt
index 86eb84046..86eb84046 100644
--- a/vendors/dokuwiki/inc/lang/sk/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt
index 47505bc1c..47505bc1c 100644
--- a/vendors/dokuwiki/inc/lang/sk/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt
index 67b823dc5..67b823dc5 100644
--- a/vendors/dokuwiki/inc/lang/sk/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt
index 871fcaeb2..871fcaeb2 100644
--- a/vendors/dokuwiki/inc/lang/sk/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/sk/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt
index 4901b2aab..4901b2aab 100644
--- a/vendors/dokuwiki/inc/lang/sk/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sk/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt
index e637199c0..e637199c0 100644
--- a/vendors/dokuwiki/inc/lang/sl/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt
index 7ada08b5f..7ada08b5f 100644
--- a/vendors/dokuwiki/inc/lang/sl/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt
index 96c03a569..96c03a569 100644
--- a/vendors/dokuwiki/inc/lang/sl/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt
index f98f7e5ce..f98f7e5ce 100644
--- a/vendors/dokuwiki/inc/lang/sl/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt
index 180a97ade..180a97ade 100644
--- a/vendors/dokuwiki/inc/lang/sl/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt
index cf2b4ec7b..cf2b4ec7b 100644
--- a/vendors/dokuwiki/inc/lang/sl/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt
index 89dd05fbe..89dd05fbe 100644
--- a/vendors/dokuwiki/inc/lang/sl/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/index.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php
index bbffcfbb1..bbffcfbb1 100644
--- a/vendors/dokuwiki/inc/lang/sl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/lang.php
diff --git a/vendors/dokuwiki/inc/lang/sl/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt
index dbdcf48a1..dbdcf48a1 100644
--- a/vendors/dokuwiki/inc/lang/sl/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt
index f385d0099..f385d0099 100644
--- a/vendors/dokuwiki/inc/lang/sl/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/login.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt
index a46c672d6..a46c672d6 100644
--- a/vendors/dokuwiki/inc/lang/sl/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt
index c58ab17ff..c58ab17ff 100644
--- a/vendors/dokuwiki/inc/lang/sl/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt
index 28b9f8ac5..28b9f8ac5 100644
--- a/vendors/dokuwiki/inc/lang/sl/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt
index 4ebf183ec..4ebf183ec 100644
--- a/vendors/dokuwiki/inc/lang/sl/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt
index 96c3a64d5..96c3a64d5 100644
--- a/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt
index 1423a4f16..1423a4f16 100644
--- a/vendors/dokuwiki/inc/lang/sl/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/read.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt
index 534063384..534063384 100644
--- a/vendors/dokuwiki/inc/lang/sl/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt
index d1f7ab49e..d1f7ab49e 100644
--- a/vendors/dokuwiki/inc/lang/sl/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/register.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt
index d9622325e..d9622325e 100644
--- a/vendors/dokuwiki/inc/lang/sl/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt
index 9f46a7a59..9f46a7a59 100644
--- a/vendors/dokuwiki/inc/lang/sl/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt
index 19bf39a87..19bf39a87 100644
--- a/vendors/dokuwiki/inc/lang/sl/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt
index b41c6dd44..b41c6dd44 100644
--- a/vendors/dokuwiki/inc/lang/sl/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt
index 00111ffc5..00111ffc5 100644
--- a/vendors/dokuwiki/inc/lang/sl/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/sl/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt
index c9d9c1ca0..c9d9c1ca0 100644
--- a/vendors/dokuwiki/inc/lang/sl/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sl/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt
index 1e42970d3..1e42970d3 100644
--- a/vendors/dokuwiki/inc/lang/sr/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt
index dae8d5ab2..dae8d5ab2 100644
--- a/vendors/dokuwiki/inc/lang/sr/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt
index 2a1427ec4..2a1427ec4 100644
--- a/vendors/dokuwiki/inc/lang/sr/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt
index b74f2b1f8..b74f2b1f8 100644
--- a/vendors/dokuwiki/inc/lang/sr/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt
index 39b7427ec..39b7427ec 100644
--- a/vendors/dokuwiki/inc/lang/sr/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt
index 046c709cf..046c709cf 100644
--- a/vendors/dokuwiki/inc/lang/sr/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt
index 2d6fa7b8e..2d6fa7b8e 100644
--- a/vendors/dokuwiki/inc/lang/sr/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt
index 327902943..327902943 100644
--- a/vendors/dokuwiki/inc/lang/sr/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt
index fe6467a1d..fe6467a1d 100644
--- a/vendors/dokuwiki/inc/lang/sr/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/index.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html
index b9ab35c71..b9ab35c71 100644
--- a/vendors/dokuwiki/inc/lang/sr/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/install.html
diff --git a/vendors/dokuwiki/inc/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php
index 94829d314..94829d314 100644
--- a/vendors/dokuwiki/inc/lang/sr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/lang.php
diff --git a/vendors/dokuwiki/inc/lang/sr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt
index 4bcc0ac5c..4bcc0ac5c 100644
--- a/vendors/dokuwiki/inc/lang/sr/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt
index c2f5a6fb6..c2f5a6fb6 100644
--- a/vendors/dokuwiki/inc/lang/sr/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/login.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt
index 2ed99bf34..2ed99bf34 100644
--- a/vendors/dokuwiki/inc/lang/sr/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt
index 40a36e6f6..40a36e6f6 100644
--- a/vendors/dokuwiki/inc/lang/sr/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt
index 73f8d0b48..73f8d0b48 100644
--- a/vendors/dokuwiki/inc/lang/sr/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt
index be928884f..be928884f 100644
--- a/vendors/dokuwiki/inc/lang/sr/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt
index 35e23b75d..35e23b75d 100644
--- a/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt
index c2d9ffff7..c2d9ffff7 100644
--- a/vendors/dokuwiki/inc/lang/sr/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/read.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt
index 54c0c26f0..54c0c26f0 100644
--- a/vendors/dokuwiki/inc/lang/sr/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt
index a553b7a1f..a553b7a1f 100644
--- a/vendors/dokuwiki/inc/lang/sr/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/register.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt
index efdcbb5c5..efdcbb5c5 100644
--- a/vendors/dokuwiki/inc/lang/sr/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt
index 7f6623dbd..7f6623dbd 100644
--- a/vendors/dokuwiki/inc/lang/sr/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt
index 1ca995a11..1ca995a11 100644
--- a/vendors/dokuwiki/inc/lang/sr/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt
index 010966a7c..010966a7c 100644
--- a/vendors/dokuwiki/inc/lang/sr/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt
index f2aabb2cb..f2aabb2cb 100644
--- a/vendors/dokuwiki/inc/lang/sr/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt
index 78093e29a..78093e29a 100644
--- a/vendors/dokuwiki/inc/lang/sr/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt
index fd3de7d38..fd3de7d38 100644
--- a/vendors/dokuwiki/inc/lang/sr/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt
index 15b9955e9..15b9955e9 100644
--- a/vendors/dokuwiki/inc/lang/sr/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt
index 36b3bb31d..36b3bb31d 100644
--- a/vendors/dokuwiki/inc/lang/sr/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/sr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt
index 56ecde3fd..56ecde3fd 100644
--- a/vendors/dokuwiki/inc/lang/sr/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sr/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt
index 10887da7d..10887da7d 100644
--- a/vendors/dokuwiki/inc/lang/sv/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt
index 0af37c769..0af37c769 100644
--- a/vendors/dokuwiki/inc/lang/sv/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt
index c907c8ecf..c907c8ecf 100644
--- a/vendors/dokuwiki/inc/lang/sv/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt
index 42168d1b4..42168d1b4 100644
--- a/vendors/dokuwiki/inc/lang/sv/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt
index 64d129227..64d129227 100644
--- a/vendors/dokuwiki/inc/lang/sv/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt
index 9fb8c20f2..9fb8c20f2 100644
--- a/vendors/dokuwiki/inc/lang/sv/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt
index 3749ad035..3749ad035 100644
--- a/vendors/dokuwiki/inc/lang/sv/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt
index 187b11fca..187b11fca 100644
--- a/vendors/dokuwiki/inc/lang/sv/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt
index 8bd1adb0a..8bd1adb0a 100644
--- a/vendors/dokuwiki/inc/lang/sv/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt
index 24d715b74..24d715b74 100644
--- a/vendors/dokuwiki/inc/lang/sv/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/index.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html
index 11e2eea49..11e2eea49 100644
--- a/vendors/dokuwiki/inc/lang/sv/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/install.html
diff --git a/vendors/dokuwiki/inc/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php
index 062e83a31..062e83a31 100644
--- a/vendors/dokuwiki/inc/lang/sv/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/lang.php
diff --git a/vendors/dokuwiki/inc/lang/sv/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt
index cb64eaf02..cb64eaf02 100644
--- a/vendors/dokuwiki/inc/lang/sv/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt
index 5f0e3b262..5f0e3b262 100644
--- a/vendors/dokuwiki/inc/lang/sv/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/login.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt
index 616bb4eee..616bb4eee 100644
--- a/vendors/dokuwiki/inc/lang/sv/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt
index 3e0951056..3e0951056 100644
--- a/vendors/dokuwiki/inc/lang/sv/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt
index 46df86235..46df86235 100644
--- a/vendors/dokuwiki/inc/lang/sv/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt
index 5c3a65341..5c3a65341 100644
--- a/vendors/dokuwiki/inc/lang/sv/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt
index 541437716..541437716 100644
--- a/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt
index 5391b3ddf..5391b3ddf 100644
--- a/vendors/dokuwiki/inc/lang/sv/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/read.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt
index d8c39dfa5..d8c39dfa5 100644
--- a/vendors/dokuwiki/inc/lang/sv/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt
index e75d2a672..e75d2a672 100644
--- a/vendors/dokuwiki/inc/lang/sv/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/register.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt
index c0edc3728..c0edc3728 100644
--- a/vendors/dokuwiki/inc/lang/sv/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt
index 0757ee9dd..0757ee9dd 100644
--- a/vendors/dokuwiki/inc/lang/sv/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt
index b9dfc5600..b9dfc5600 100644
--- a/vendors/dokuwiki/inc/lang/sv/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt
index bcc88cd95..bcc88cd95 100644
--- a/vendors/dokuwiki/inc/lang/sv/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt
index a79b30b11..a79b30b11 100644
--- a/vendors/dokuwiki/inc/lang/sv/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt
index 357659673..357659673 100644
--- a/vendors/dokuwiki/inc/lang/sv/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt
index 147585caf..147585caf 100644
--- a/vendors/dokuwiki/inc/lang/sv/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt
index 98ed6e33f..98ed6e33f 100644
--- a/vendors/dokuwiki/inc/lang/sv/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt
index 5963adcbd..5963adcbd 100644
--- a/vendors/dokuwiki/inc/lang/sv/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/sv/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt
index e1b632ce4..e1b632ce4 100644
--- a/vendors/dokuwiki/inc/lang/sv/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/sv/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/th/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt
index 677e779b6..677e779b6 100644
--- a/vendors/dokuwiki/inc/lang/th/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/th/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt
index 85a6b17bd..85a6b17bd 100644
--- a/vendors/dokuwiki/inc/lang/th/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/th/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt
index fff6898d8..fff6898d8 100644
--- a/vendors/dokuwiki/inc/lang/th/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/th/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt
index 5e786a6b3..5e786a6b3 100644
--- a/vendors/dokuwiki/inc/lang/th/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/th/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt
index 88b012a67..88b012a67 100644
--- a/vendors/dokuwiki/inc/lang/th/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/th/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt
index e21759e03..e21759e03 100644
--- a/vendors/dokuwiki/inc/lang/th/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/th/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt
index 37b1841a2..37b1841a2 100644
--- a/vendors/dokuwiki/inc/lang/th/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/th/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt
index 81dc0000b..81dc0000b 100644
--- a/vendors/dokuwiki/inc/lang/th/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/th/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt
index 28e6760d3..28e6760d3 100644
--- a/vendors/dokuwiki/inc/lang/th/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/th/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt
index eb32a64c0..eb32a64c0 100644
--- a/vendors/dokuwiki/inc/lang/th/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/index.txt
diff --git a/vendors/dokuwiki/inc/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php
index e7937ecbc..e7937ecbc 100644
--- a/vendors/dokuwiki/inc/lang/th/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/lang.php
diff --git a/vendors/dokuwiki/inc/lang/th/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt
index a198ad717..a198ad717 100644
--- a/vendors/dokuwiki/inc/lang/th/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/th/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt
index d384c2d27..d384c2d27 100644
--- a/vendors/dokuwiki/inc/lang/th/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/login.txt
diff --git a/vendors/dokuwiki/inc/lang/th/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt
index a4af8a0f3..a4af8a0f3 100644
--- a/vendors/dokuwiki/inc/lang/th/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/th/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt
index cab906d4c..cab906d4c 100644
--- a/vendors/dokuwiki/inc/lang/th/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/th/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt
index 9127a20c3..9127a20c3 100644
--- a/vendors/dokuwiki/inc/lang/th/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/th/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt
index caaf8ad2d..caaf8ad2d 100644
--- a/vendors/dokuwiki/inc/lang/th/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/th/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt
index e6ab876cf..e6ab876cf 100644
--- a/vendors/dokuwiki/inc/lang/th/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/th/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt
index ac4f31290..ac4f31290 100644
--- a/vendors/dokuwiki/inc/lang/th/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/read.txt
diff --git a/vendors/dokuwiki/inc/lang/th/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt
index 1655ae82b..1655ae82b 100644
--- a/vendors/dokuwiki/inc/lang/th/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/th/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt
index ed4a40876..ed4a40876 100644
--- a/vendors/dokuwiki/inc/lang/th/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/register.txt
diff --git a/vendors/dokuwiki/inc/lang/th/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt
index a96026d31..a96026d31 100644
--- a/vendors/dokuwiki/inc/lang/th/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/th/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt
index 1935abedd..1935abedd 100644
--- a/vendors/dokuwiki/inc/lang/th/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/th/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt
index 98a49d724..98a49d724 100644
--- a/vendors/dokuwiki/inc/lang/th/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/th/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt
index d6399a9e9..d6399a9e9 100644
--- a/vendors/dokuwiki/inc/lang/th/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/th/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt
index f93869f38..f93869f38 100644
--- a/vendors/dokuwiki/inc/lang/th/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/th/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt
index 8f65b1061..8f65b1061 100644
--- a/vendors/dokuwiki/inc/lang/th/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/th/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt
index 3e0a8dffd..3e0a8dffd 100644
--- a/vendors/dokuwiki/inc/lang/th/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/th/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt
index 026965753..026965753 100644
--- a/vendors/dokuwiki/inc/lang/th/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/th/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt
index 653e341e7..653e341e7 100644
--- a/vendors/dokuwiki/inc/lang/th/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/th/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt
index 2292b6eeb..2292b6eeb 100644
--- a/vendors/dokuwiki/inc/lang/tr/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt
index e219a60c0..e219a60c0 100644
--- a/vendors/dokuwiki/inc/lang/tr/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt
index 504947998..504947998 100644
--- a/vendors/dokuwiki/inc/lang/tr/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt
index 04e9b8bfb..04e9b8bfb 100644
--- a/vendors/dokuwiki/inc/lang/tr/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt
index 72baa676b..72baa676b 100644
--- a/vendors/dokuwiki/inc/lang/tr/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt
index b1a8881b8..b1a8881b8 100644
--- a/vendors/dokuwiki/inc/lang/tr/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt
index 4f84c4e53..4f84c4e53 100644
--- a/vendors/dokuwiki/inc/lang/tr/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt
index 9c70fbed3..9c70fbed3 100644
--- a/vendors/dokuwiki/inc/lang/tr/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt
index e361e8784..e361e8784 100644
--- a/vendors/dokuwiki/inc/lang/tr/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/index.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html
index 59e7f57a7..59e7f57a7 100644
--- a/vendors/dokuwiki/inc/lang/tr/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/install.html
diff --git a/vendors/dokuwiki/inc/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php
index dd045a6c7..dd045a6c7 100644
--- a/vendors/dokuwiki/inc/lang/tr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/lang.php
diff --git a/vendors/dokuwiki/inc/lang/tr/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt
index 14385426e..14385426e 100644
--- a/vendors/dokuwiki/inc/lang/tr/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt
index 2ce378d00..2ce378d00 100644
--- a/vendors/dokuwiki/inc/lang/tr/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/login.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt
index 7e8fc8d81..7e8fc8d81 100644
--- a/vendors/dokuwiki/inc/lang/tr/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt
index 8a47e6bf3..8a47e6bf3 100644
--- a/vendors/dokuwiki/inc/lang/tr/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt
index e6f97bef2..e6f97bef2 100644
--- a/vendors/dokuwiki/inc/lang/tr/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt
index 71a8a42f6..71a8a42f6 100644
--- a/vendors/dokuwiki/inc/lang/tr/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt
index 22348bb75..22348bb75 100644
--- a/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt
index 59314f152..59314f152 100644
--- a/vendors/dokuwiki/inc/lang/tr/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/read.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt
index 99efc8fb1..99efc8fb1 100644
--- a/vendors/dokuwiki/inc/lang/tr/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt
index b67e4b5c5..b67e4b5c5 100644
--- a/vendors/dokuwiki/inc/lang/tr/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/register.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt
index 7754a5671..7754a5671 100644
--- a/vendors/dokuwiki/inc/lang/tr/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt
index 1a34396ea..1a34396ea 100644
--- a/vendors/dokuwiki/inc/lang/tr/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt
index 841fba2b9..841fba2b9 100644
--- a/vendors/dokuwiki/inc/lang/tr/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt
index ae6d50c77..ae6d50c77 100644
--- a/vendors/dokuwiki/inc/lang/tr/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt
index 4cf3d2638..4cf3d2638 100644
--- a/vendors/dokuwiki/inc/lang/tr/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt
index 293067a1c..293067a1c 100644
--- a/vendors/dokuwiki/inc/lang/tr/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt
index a37a8cf41..a37a8cf41 100644
--- a/vendors/dokuwiki/inc/lang/tr/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt
index 20b07f949..20b07f949 100644
--- a/vendors/dokuwiki/inc/lang/tr/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt
index 2d75345ba..2d75345ba 100644
--- a/vendors/dokuwiki/inc/lang/tr/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/tr/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt
index 506cbc793..506cbc793 100644
--- a/vendors/dokuwiki/inc/lang/tr/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/tr/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt
index f698d937e..f698d937e 100644
--- a/vendors/dokuwiki/inc/lang/uk/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt
index 3689ccd00..3689ccd00 100644
--- a/vendors/dokuwiki/inc/lang/uk/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt
index 5f293e56f..5f293e56f 100644
--- a/vendors/dokuwiki/inc/lang/uk/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt
index 5a8930721..5a8930721 100644
--- a/vendors/dokuwiki/inc/lang/uk/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt
index 5db12e1bc..5db12e1bc 100644
--- a/vendors/dokuwiki/inc/lang/uk/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt
index cfdf9a887..cfdf9a887 100644
--- a/vendors/dokuwiki/inc/lang/uk/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt
index f6acca8ed..f6acca8ed 100644
--- a/vendors/dokuwiki/inc/lang/uk/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt
index 82dbc1a50..82dbc1a50 100644
--- a/vendors/dokuwiki/inc/lang/uk/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt
index aae86fa50..aae86fa50 100644
--- a/vendors/dokuwiki/inc/lang/uk/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt
index 0ba0d185b..0ba0d185b 100644
--- a/vendors/dokuwiki/inc/lang/uk/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/index.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html
index 084da8662..084da8662 100644
--- a/vendors/dokuwiki/inc/lang/uk/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/install.html
diff --git a/vendors/dokuwiki/inc/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php
index 5f94d9b47..5f94d9b47 100644
--- a/vendors/dokuwiki/inc/lang/uk/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/lang.php
diff --git a/vendors/dokuwiki/inc/lang/uk/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt
index 367c286bf..367c286bf 100644
--- a/vendors/dokuwiki/inc/lang/uk/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt
index f45f81024..f45f81024 100644
--- a/vendors/dokuwiki/inc/lang/uk/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/login.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt
index 5bd25c3c3..5bd25c3c3 100644
--- a/vendors/dokuwiki/inc/lang/uk/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt
index 39cdecc35..39cdecc35 100644
--- a/vendors/dokuwiki/inc/lang/uk/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt
index 3c9295fce..3c9295fce 100644
--- a/vendors/dokuwiki/inc/lang/uk/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt
index b4174c7a4..b4174c7a4 100644
--- a/vendors/dokuwiki/inc/lang/uk/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt
index 7a46f536a..7a46f536a 100644
--- a/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt
index 59ea6a1b6..59ea6a1b6 100644
--- a/vendors/dokuwiki/inc/lang/uk/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/read.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt
index 645e3d869..645e3d869 100644
--- a/vendors/dokuwiki/inc/lang/uk/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt
index 8fffc002e..8fffc002e 100644
--- a/vendors/dokuwiki/inc/lang/uk/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/register.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt
index 9b55d85bf..9b55d85bf 100644
--- a/vendors/dokuwiki/inc/lang/uk/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt
index 208efad55..208efad55 100644
--- a/vendors/dokuwiki/inc/lang/uk/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt
index 646de2a2f..646de2a2f 100644
--- a/vendors/dokuwiki/inc/lang/uk/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt
index 971c24814..971c24814 100644
--- a/vendors/dokuwiki/inc/lang/uk/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt
index 2706b35d6..2706b35d6 100644
--- a/vendors/dokuwiki/inc/lang/uk/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt
index 288ab8e9f..288ab8e9f 100644
--- a/vendors/dokuwiki/inc/lang/uk/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt
index 8d4dfebb4..8d4dfebb4 100644
--- a/vendors/dokuwiki/inc/lang/uk/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt
index d043f99a7..d043f99a7 100644
--- a/vendors/dokuwiki/inc/lang/uk/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt
index 6eb8c93c9..6eb8c93c9 100644
--- a/vendors/dokuwiki/inc/lang/uk/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/uk/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt
index 869f93a87..869f93a87 100644
--- a/vendors/dokuwiki/inc/lang/uk/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/uk/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt
index d8ac73e8c..d8ac73e8c 100644
--- a/vendors/dokuwiki/inc/lang/vi/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt
index 231ab5d8c..231ab5d8c 100644
--- a/vendors/dokuwiki/inc/lang/vi/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt
index 0df1ddbe4..0df1ddbe4 100644
--- a/vendors/dokuwiki/inc/lang/vi/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt
index e70ed5d5f..e70ed5d5f 100644
--- a/vendors/dokuwiki/inc/lang/vi/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt
index 10bfd0f30..10bfd0f30 100644
--- a/vendors/dokuwiki/inc/lang/vi/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt
index b00316a7c..b00316a7c 100644
--- a/vendors/dokuwiki/inc/lang/vi/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt
index 076466c06..076466c06 100644
--- a/vendors/dokuwiki/inc/lang/vi/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt
index 708d2030d..708d2030d 100644
--- a/vendors/dokuwiki/inc/lang/vi/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/index.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php
index 23f42d69a..23f42d69a 100644
--- a/vendors/dokuwiki/inc/lang/vi/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/lang.php
diff --git a/vendors/dokuwiki/inc/lang/vi/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt
index acb0981c5..acb0981c5 100644
--- a/vendors/dokuwiki/inc/lang/vi/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt
index 4265a79df..4265a79df 100644
--- a/vendors/dokuwiki/inc/lang/vi/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/login.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt
index 3fcdf5595..3fcdf5595 100644
--- a/vendors/dokuwiki/inc/lang/vi/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt
index b03bb5224..b03bb5224 100644
--- a/vendors/dokuwiki/inc/lang/vi/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt
index 0fa27d898..0fa27d898 100644
--- a/vendors/dokuwiki/inc/lang/vi/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt
index 81069a2c4..81069a2c4 100644
--- a/vendors/dokuwiki/inc/lang/vi/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt
index ffeffc7bf..ffeffc7bf 100644
--- a/vendors/dokuwiki/inc/lang/vi/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/read.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt
index fe6628f6e..fe6628f6e 100644
--- a/vendors/dokuwiki/inc/lang/vi/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt
index f7d35c84b..f7d35c84b 100644
--- a/vendors/dokuwiki/inc/lang/vi/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/register.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt
index 943e3fff1..943e3fff1 100644
--- a/vendors/dokuwiki/inc/lang/vi/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt
index 821ca9f7b..821ca9f7b 100644
--- a/vendors/dokuwiki/inc/lang/vi/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt
index a146f4ef3..a146f4ef3 100644
--- a/vendors/dokuwiki/inc/lang/vi/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/vi/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt
index b219ca141..b219ca141 100644
--- a/vendors/dokuwiki/inc/lang/vi/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/vi/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt
index 3cc10335d..3cc10335d 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt
index fb1999269..fb1999269 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/adminplugins.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt
index 381a76812..381a76812 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt
index e52613dc8..e52613dc8 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt
index 20c512abc..20c512abc 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt
index a064f81ed..a064f81ed 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt
index 81a092be0..81a092be0 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt
index 5be7fbb4e..5be7fbb4e 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt
index b344e0772..b344e0772 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt
index 961095bff..961095bff 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/index.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html
index 879c152b5..879c152b5 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/install.html
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php
index f936123f4..f936123f4 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/lang.php
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt
index 16a06e802..16a06e802 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt
index fda49a199..fda49a199 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/login.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt
index f6bb0480e..f6bb0480e 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt
index bd38f5586..bd38f5586 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt
index e2b6a175b..e2b6a175b 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt
index c68f94819..c68f94819 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt
index b8ad7e1ed..b8ad7e1ed 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt
index 364f4adea..364f4adea 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/read.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt
index 28314294b..28314294b 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt
index 1a5ec67e7..1a5ec67e7 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/register.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt
index 434f4f877..434f4f877 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt
index 9250bf4e0..9250bf4e0 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt
index 479705b95..479705b95 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt
index 9f3d8ee94..9f3d8ee94 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt
index 35b6aa59f..35b6aa59f 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt
index 55b67ed16..55b67ed16 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt
index 3ccb80091..3ccb80091 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt
index f92c215ea..f92c215ea 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt
index e7222959b..e7222959b 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt
index 671e88b87..671e88b87 100644
--- a/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh-tw/wordblock.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/admin.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt
index bf6476e9c..bf6476e9c 100644
--- a/vendors/dokuwiki/inc/lang/zh/admin.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/admin.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/backlinks.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt
index 19e3feea6..19e3feea6 100644
--- a/vendors/dokuwiki/inc/lang/zh/backlinks.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/backlinks.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/conflict.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt
index 92eedf45b..92eedf45b 100644
--- a/vendors/dokuwiki/inc/lang/zh/conflict.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/conflict.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/denied.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt
index 276741c40..276741c40 100644
--- a/vendors/dokuwiki/inc/lang/zh/denied.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/denied.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/diff.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt
index 19e8ef752..19e8ef752 100644
--- a/vendors/dokuwiki/inc/lang/zh/diff.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/diff.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/draft.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt
index 615cb07bf..615cb07bf 100644
--- a/vendors/dokuwiki/inc/lang/zh/draft.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/draft.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/edit.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt
index 846e89817..846e89817 100644
--- a/vendors/dokuwiki/inc/lang/zh/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/edit.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/editrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt
index 82013cbbd..82013cbbd 100644
--- a/vendors/dokuwiki/inc/lang/zh/editrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/editrev.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/index.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt
index efb07b9e3..efb07b9e3 100644
--- a/vendors/dokuwiki/inc/lang/zh/index.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/index.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/install.html b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html
index 8c7a93c19..8c7a93c19 100644
--- a/vendors/dokuwiki/inc/lang/zh/install.html
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/install.html
diff --git a/vendors/dokuwiki/inc/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php
index ffb759fde..ffb759fde 100644
--- a/vendors/dokuwiki/inc/lang/zh/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/lang.php
diff --git a/vendors/dokuwiki/inc/lang/zh/locked.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt
index 321e4a047..321e4a047 100644
--- a/vendors/dokuwiki/inc/lang/zh/locked.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/locked.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/login.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt
index 8ff8b3846..8ff8b3846 100644
--- a/vendors/dokuwiki/inc/lang/zh/login.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/login.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/mailtext.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt
index 311acf1b9..311acf1b9 100644
--- a/vendors/dokuwiki/inc/lang/zh/mailtext.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/mailtext.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/newpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt
index 6f96b568d..6f96b568d 100644
--- a/vendors/dokuwiki/inc/lang/zh/newpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/newpage.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/norev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt
index 3fe5aabd8..3fe5aabd8 100644
--- a/vendors/dokuwiki/inc/lang/zh/norev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/norev.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/preview.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt
index dbb3de675..dbb3de675 100644
--- a/vendors/dokuwiki/inc/lang/zh/preview.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/preview.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt
index 7e48751a6..7e48751a6 100644
--- a/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/pwconfirm.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/read.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt
index eb47765a2..eb47765a2 100644
--- a/vendors/dokuwiki/inc/lang/zh/read.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/read.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/recent.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt
index 95634d037..95634d037 100644
--- a/vendors/dokuwiki/inc/lang/zh/recent.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/recent.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/register.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt
index 7410ff1c0..7410ff1c0 100644
--- a/vendors/dokuwiki/inc/lang/zh/register.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/register.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/registermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt
index 9647b5fad..9647b5fad 100644
--- a/vendors/dokuwiki/inc/lang/zh/registermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/registermail.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/resendpwd.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt
index f98e469e6..f98e469e6 100644
--- a/vendors/dokuwiki/inc/lang/zh/resendpwd.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/resendpwd.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/revisions.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt
index 89d2a7857..89d2a7857 100644
--- a/vendors/dokuwiki/inc/lang/zh/revisions.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/revisions.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/searchpage.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt
index 8222e242c..8222e242c 100644
--- a/vendors/dokuwiki/inc/lang/zh/searchpage.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/searchpage.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/showrev.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt
index 770fecc98..770fecc98 100644
--- a/vendors/dokuwiki/inc/lang/zh/showrev.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/showrev.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/stopwords.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt
index bc6eb48ae..bc6eb48ae 100644
--- a/vendors/dokuwiki/inc/lang/zh/stopwords.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/stopwords.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/subscribermail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt
index 1a0a0aa16..1a0a0aa16 100644
--- a/vendors/dokuwiki/inc/lang/zh/subscribermail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/subscribermail.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/updateprofile.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt
index 007578801..007578801 100644
--- a/vendors/dokuwiki/inc/lang/zh/updateprofile.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/updateprofile.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/uploadmail.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt
index b820cee2b..b820cee2b 100644
--- a/vendors/dokuwiki/inc/lang/zh/uploadmail.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/uploadmail.txt
diff --git a/vendors/dokuwiki/inc/lang/zh/wordblock.txt b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt
index 72c473a59..72c473a59 100644
--- a/vendors/dokuwiki/inc/lang/zh/wordblock.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/lang/zh/wordblock.txt
diff --git a/vendors/dokuwiki/inc/mail.php b/mod/dokuwiki/vendors/dokuwiki/inc/mail.php
index 3b0592b8b..3b0592b8b 100644
--- a/vendors/dokuwiki/inc/mail.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/mail.php
diff --git a/vendors/dokuwiki/inc/media.php b/mod/dokuwiki/vendors/dokuwiki/inc/media.php
index 9090dbd22..9090dbd22 100644
--- a/vendors/dokuwiki/inc/media.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/media.php
diff --git a/vendors/dokuwiki/inc/pageutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php
index 9c192e5e6..9c192e5e6 100644
--- a/vendors/dokuwiki/inc/pageutils.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/pageutils.php
diff --git a/vendors/dokuwiki/inc/parser/code.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php
index 4d94dcf4e..4d94dcf4e 100644
--- a/vendors/dokuwiki/inc/parser/code.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/code.php
diff --git a/vendors/dokuwiki/inc/parser/handler.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php
index 9fe5866ad..9fe5866ad 100644
--- a/vendors/dokuwiki/inc/parser/handler.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/handler.php
diff --git a/vendors/dokuwiki/inc/parser/lexer.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php
index afd260a05..afd260a05 100644
--- a/vendors/dokuwiki/inc/parser/lexer.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/lexer.php
diff --git a/vendors/dokuwiki/inc/parser/metadata.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php
index fc60e5774..fc60e5774 100644
--- a/vendors/dokuwiki/inc/parser/metadata.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/metadata.php
diff --git a/vendors/dokuwiki/inc/parser/parser.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php
index a78b08a29..a78b08a29 100644
--- a/vendors/dokuwiki/inc/parser/parser.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/parser.php
diff --git a/vendors/dokuwiki/inc/parser/renderer.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php
index 6082e935d..6082e935d 100644
--- a/vendors/dokuwiki/inc/parser/renderer.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/renderer.php
diff --git a/vendors/dokuwiki/inc/parser/xhtml.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php
index 4d5333f7a..4d5333f7a 100644
--- a/vendors/dokuwiki/inc/parser/xhtml.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtml.php
diff --git a/vendors/dokuwiki/inc/parser/xhtmlsummary.php b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php
index b187fef01..b187fef01 100644
--- a/vendors/dokuwiki/inc/parser/xhtmlsummary.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parser/xhtmlsummary.php
diff --git a/vendors/dokuwiki/inc/parserutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php
index e2dd85979..e2dd85979 100644
--- a/vendors/dokuwiki/inc/parserutils.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/parserutils.php
diff --git a/vendors/dokuwiki/inc/plugin.php b/mod/dokuwiki/vendors/dokuwiki/inc/plugin.php
index 364534739..364534739 100644
--- a/vendors/dokuwiki/inc/plugin.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/plugin.php
diff --git a/vendors/dokuwiki/inc/plugincontroller.class.php b/mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php
index 4400a4187..4400a4187 100644
--- a/vendors/dokuwiki/inc/plugincontroller.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/plugincontroller.class.php
diff --git a/vendors/dokuwiki/inc/pluginutils.php b/mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php
index 8294d1ec8..8294d1ec8 100644
--- a/vendors/dokuwiki/inc/pluginutils.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/pluginutils.php
diff --git a/vendors/dokuwiki/inc/search.php b/mod/dokuwiki/vendors/dokuwiki/inc/search.php
index 2b9a51fb3..2b9a51fb3 100644
--- a/vendors/dokuwiki/inc/search.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/search.php
diff --git a/vendors/dokuwiki/inc/template.php b/mod/dokuwiki/vendors/dokuwiki/inc/template.php
index b7790060c..b7790060c 100644
--- a/vendors/dokuwiki/inc/template.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/template.php
diff --git a/vendors/dokuwiki/inc/toolbar.php b/mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php
index 9140970d1..9140970d1 100644
--- a/vendors/dokuwiki/inc/toolbar.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/toolbar.php
diff --git a/vendors/dokuwiki/inc/utf8.php b/mod/dokuwiki/vendors/dokuwiki/inc/utf8.php
index b078540d2..b078540d2 100644
--- a/vendors/dokuwiki/inc/utf8.php
+++ b/mod/dokuwiki/vendors/dokuwiki/inc/utf8.php
diff --git a/vendors/dokuwiki/index.php b/mod/dokuwiki/vendors/dokuwiki/index.php
index ad0807727..ad0807727 100644
--- a/vendors/dokuwiki/index.php
+++ b/mod/dokuwiki/vendors/dokuwiki/index.php
diff --git a/vendors/dokuwiki/install.php b/mod/dokuwiki/vendors/dokuwiki/install.php
index 414d3e99e..414d3e99e 100644
--- a/vendors/dokuwiki/install.php
+++ b/mod/dokuwiki/vendors/dokuwiki/install.php
diff --git a/vendors/dokuwiki/lib/_fla/MultipleUpload.as b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as
index c5e7799f9..c5e7799f9 100644
--- a/vendors/dokuwiki/lib/_fla/MultipleUpload.as
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/MultipleUpload.as
diff --git a/vendors/dokuwiki/lib/_fla/README b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/README
index 6ecc72ac1..6ecc72ac1 100644
--- a/vendors/dokuwiki/lib/_fla/README
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/README
diff --git a/vendors/dokuwiki/lib/_fla/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html
index d614603ac..d614603ac 100644
--- a/vendors/dokuwiki/lib/_fla/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/index.html
diff --git a/vendors/dokuwiki/lib/_fla/multipleUpload.fla b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla
index 220616960..220616960 100644
--- a/vendors/dokuwiki/lib/_fla/multipleUpload.fla
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/_fla/multipleUpload.fla
Binary files differ
diff --git a/vendors/dokuwiki/lib/exe/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php
index 4618abd71..4618abd71 100644
--- a/vendors/dokuwiki/lib/exe/ajax.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/ajax.php
diff --git a/vendors/dokuwiki/lib/exe/css.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php
index 2cb383de0..2cb383de0 100644
--- a/vendors/dokuwiki/lib/exe/css.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/css.php
diff --git a/vendors/dokuwiki/lib/exe/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php
index f30e039d4..f30e039d4 100644
--- a/vendors/dokuwiki/lib/exe/detail.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/detail.php
diff --git a/vendors/dokuwiki/lib/exe/fetch.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php
index 11877ef36..11877ef36 100644
--- a/vendors/dokuwiki/lib/exe/fetch.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/fetch.php
diff --git a/vendors/dokuwiki/lib/exe/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html
index d614603ac..d614603ac 100644
--- a/vendors/dokuwiki/lib/exe/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/index.html
diff --git a/vendors/dokuwiki/lib/exe/indexer.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php
index 872f6b5be..872f6b5be 100644
--- a/vendors/dokuwiki/lib/exe/indexer.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/indexer.php
diff --git a/vendors/dokuwiki/lib/exe/js.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php
index cb1016231..cb1016231 100644
--- a/vendors/dokuwiki/lib/exe/js.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/js.php
diff --git a/vendors/dokuwiki/lib/exe/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php
index f6e91b858..f6e91b858 100644
--- a/vendors/dokuwiki/lib/exe/mediamanager.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/mediamanager.php
diff --git a/vendors/dokuwiki/lib/exe/multipleUpload.swf b/mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf
index 888aab045..888aab045 100644
--- a/vendors/dokuwiki/lib/exe/multipleUpload.swf
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/multipleUpload.swf
Binary files differ
diff --git a/vendors/dokuwiki/lib/exe/opensearch.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php
index f16b4f681..f16b4f681 100644
--- a/vendors/dokuwiki/lib/exe/opensearch.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/opensearch.php
diff --git a/vendors/dokuwiki/lib/exe/xmlrpc.php b/mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php
index d3913482f..d3913482f 100644
--- a/vendors/dokuwiki/lib/exe/xmlrpc.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/exe/xmlrpc.php
diff --git a/vendors/dokuwiki/lib/images/admin/README b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README
index 90bab9578..90bab9578 100644
--- a/vendors/dokuwiki/lib/images/admin/README
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/README
diff --git a/vendors/dokuwiki/lib/images/admin/acl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png
index 96fb4cd56..96fb4cd56 100644
--- a/vendors/dokuwiki/lib/images/admin/acl.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/acl.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/admin/config.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png
index e4d376d85..e4d376d85 100644
--- a/vendors/dokuwiki/lib/images/admin/config.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/config.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/admin/plugin.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png
index e2823bac7..e2823bac7 100644
--- a/vendors/dokuwiki/lib/images/admin/plugin.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/plugin.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/admin/popularity.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png
index 4e22aaf0d..4e22aaf0d 100644
--- a/vendors/dokuwiki/lib/images/admin/popularity.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/popularity.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/admin/revert.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png
index 002d3a75b..002d3a75b 100644
--- a/vendors/dokuwiki/lib/images/admin/revert.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/revert.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/admin/usermanager.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png
index c5c8dc6d6..c5c8dc6d6 100644
--- a/vendors/dokuwiki/lib/images/admin/usermanager.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/admin/usermanager.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/arrow_down.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif
index ff13b9585..ff13b9585 100644
--- a/vendors/dokuwiki/lib/images/arrow_down.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_down.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/arrow_up.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif
index d491c18db..d491c18db 100644
--- a/vendors/dokuwiki/lib/images/arrow_up.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/arrow_up.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/at.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif
index 8bdf40d54..8bdf40d54 100644
--- a/vendors/dokuwiki/lib/images/at.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/at.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif
index 9935f8210..9935f8210 100644
--- a/vendors/dokuwiki/lib/images/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/close.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/close.png
index e1b498c14..e1b498c14 100644
--- a/vendors/dokuwiki/lib/images/close.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/close.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/del.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/del.png
index a3260d718..a3260d718 100644
--- a/vendors/dokuwiki/lib/images/del.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/del.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/diff.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png
index 0b98d79ac..0b98d79ac 100644
--- a/vendors/dokuwiki/lib/images/diff.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/diff.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/edit.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif
index a2a23de7b..a2a23de7b 100644
--- a/vendors/dokuwiki/lib/images/edit.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/edit.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/error.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/error.png
index 8a1ba4c66..8a1ba4c66 100644
--- a/vendors/dokuwiki/lib/images/error.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/error.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/bz2.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png
index d48cae038..d48cae038 100644
--- a/vendors/dokuwiki/lib/images/fileicons/bz2.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/bz2.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/c.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png
index 9446afcb4..9446afcb4 100644
--- a/vendors/dokuwiki/lib/images/fileicons/c.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/c.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/conf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png
index ddffe6fd1..ddffe6fd1 100644
--- a/vendors/dokuwiki/lib/images/fileicons/conf.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/conf.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/cpp.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png
index 2dc51b16d..2dc51b16d 100644
--- a/vendors/dokuwiki/lib/images/fileicons/cpp.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cpp.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/cs.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png
index d5db29ba5..d5db29ba5 100644
--- a/vendors/dokuwiki/lib/images/fileicons/cs.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/cs.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/css.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png
index 89c1537fd..89c1537fd 100644
--- a/vendors/dokuwiki/lib/images/fileicons/css.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/css.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/deb.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png
index 9229d8783..9229d8783 100644
--- a/vendors/dokuwiki/lib/images/fileicons/deb.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/deb.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/doc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png
index 932567f8a..932567f8a 100644
--- a/vendors/dokuwiki/lib/images/fileicons/doc.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/doc.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/file.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png
index 817014fa7..817014fa7 100644
--- a/vendors/dokuwiki/lib/images/fileicons/file.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/file.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/gif.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png
index b4c07a912..b4c07a912 100644
--- a/vendors/dokuwiki/lib/images/fileicons/gif.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gif.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/gz.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png
index 2426bd169..2426bd169 100644
--- a/vendors/dokuwiki/lib/images/fileicons/gz.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/gz.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/htm.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png
index 1a6812185..1a6812185 100644
--- a/vendors/dokuwiki/lib/images/fileicons/htm.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/htm.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/html.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png
index 672cbce42..672cbce42 100644
--- a/vendors/dokuwiki/lib/images/fileicons/html.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/html.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php
index c1e64fe2a..c1e64fe2a 100644
--- a/vendors/dokuwiki/lib/images/fileicons/index.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/index.php
diff --git a/vendors/dokuwiki/lib/images/fileicons/java.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png
index c5f2fd09f..c5f2fd09f 100644
--- a/vendors/dokuwiki/lib/images/fileicons/java.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/java.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/jpeg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png
index aa4cc23a5..aa4cc23a5 100644
--- a/vendors/dokuwiki/lib/images/fileicons/jpeg.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpeg.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/jpg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png
index 1fb6cc1fb..1fb6cc1fb 100644
--- a/vendors/dokuwiki/lib/images/fileicons/jpg.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/jpg.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/js.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png
index 0c314eb56..0c314eb56 100644
--- a/vendors/dokuwiki/lib/images/fileicons/js.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/js.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/lua.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png
index 7c07d023f..7c07d023f 100644
--- a/vendors/dokuwiki/lib/images/fileicons/lua.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/lua.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/odc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png
index 47f65c84d..47f65c84d 100644
--- a/vendors/dokuwiki/lib/images/fileicons/odc.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odc.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/odf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png
index a2fbc5195..a2fbc5195 100644
--- a/vendors/dokuwiki/lib/images/fileicons/odf.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odf.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/odg.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png
index 434f18262..434f18262 100644
--- a/vendors/dokuwiki/lib/images/fileicons/odg.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odg.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/odi.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png
index 74f6303d3..74f6303d3 100644
--- a/vendors/dokuwiki/lib/images/fileicons/odi.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odi.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/odp.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png
index a5c77f845..a5c77f845 100644
--- a/vendors/dokuwiki/lib/images/fileicons/odp.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odp.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/ods.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png
index 2ab1273f0..2ab1273f0 100644
--- a/vendors/dokuwiki/lib/images/fileicons/ods.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ods.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/odt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png
index b0c21fc1f..b0c21fc1f 100644
--- a/vendors/dokuwiki/lib/images/fileicons/odt.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/odt.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/pdf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png
index 638066dea..638066dea 100644
--- a/vendors/dokuwiki/lib/images/fileicons/pdf.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pdf.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/php.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png
index e735f875b..e735f875b 100644
--- a/vendors/dokuwiki/lib/images/fileicons/php.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/php.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/pl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png
index 6ac381cd7..6ac381cd7 100644
--- a/vendors/dokuwiki/lib/images/fileicons/pl.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/pl.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/png.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png
index f0b5b00ee..f0b5b00ee 100644
--- a/vendors/dokuwiki/lib/images/fileicons/png.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/png.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/ppt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png
index adaefc602..adaefc602 100644
--- a/vendors/dokuwiki/lib/images/fileicons/ppt.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ppt.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/ps.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png
index c51c763ab..c51c763ab 100644
--- a/vendors/dokuwiki/lib/images/fileicons/ps.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/ps.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/py.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png
index a21b8da49..a21b8da49 100644
--- a/vendors/dokuwiki/lib/images/fileicons/py.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/py.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/rar.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png
index a6af4d1ca..a6af4d1ca 100644
--- a/vendors/dokuwiki/lib/images/fileicons/rar.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rar.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/rb.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png
index 45f448978..45f448978 100644
--- a/vendors/dokuwiki/lib/images/fileicons/rb.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rb.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/rpm.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png
index 22212eafa..22212eafa 100644
--- a/vendors/dokuwiki/lib/images/fileicons/rpm.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rpm.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/rtf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png
index d8bada5fe..d8bada5fe 100644
--- a/vendors/dokuwiki/lib/images/fileicons/rtf.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/rtf.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/swf.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png
index 0729ed020..0729ed020 100644
--- a/vendors/dokuwiki/lib/images/fileicons/swf.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/swf.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/sxc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png
index 419c183c1..419c183c1 100644
--- a/vendors/dokuwiki/lib/images/fileicons/sxc.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxc.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/sxd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png
index 5801bb23a..5801bb23a 100644
--- a/vendors/dokuwiki/lib/images/fileicons/sxd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/sxi.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png
index 2a94290d7..2a94290d7 100644
--- a/vendors/dokuwiki/lib/images/fileicons/sxi.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxi.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/sxw.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png
index 6da97beb3..6da97beb3 100644
--- a/vendors/dokuwiki/lib/images/fileicons/sxw.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/sxw.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/tar.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png
index 5a2f717fc..5a2f717fc 100644
--- a/vendors/dokuwiki/lib/images/fileicons/tar.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tar.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/tgz.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png
index 141acf564..141acf564 100644
--- a/vendors/dokuwiki/lib/images/fileicons/tgz.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/tgz.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/txt.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png
index da20009c6..da20009c6 100644
--- a/vendors/dokuwiki/lib/images/fileicons/txt.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/txt.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/xls.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png
index e8cd58dc0..e8cd58dc0 100644
--- a/vendors/dokuwiki/lib/images/fileicons/xls.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xls.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/xml.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png
index eb4632397..eb4632397 100644
--- a/vendors/dokuwiki/lib/images/fileicons/xml.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/xml.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/fileicons/zip.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png
index 999ffbe80..999ffbe80 100644
--- a/vendors/dokuwiki/lib/images/fileicons/zip.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/fileicons/zip.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/history.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/history.png
index ef9e311d3..ef9e311d3 100644
--- a/vendors/dokuwiki/lib/images/history.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/history.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/images/index.html
index d614603ac..d614603ac 100644
--- a/vendors/dokuwiki/lib/images/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/index.html
diff --git a/vendors/dokuwiki/lib/images/info.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/info.png
index a237c1782..a237c1782 100644
--- a/vendors/dokuwiki/lib/images/info.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/info.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png
index 73d6f8d39..73d6f8d39 100644
--- a/vendors/dokuwiki/lib/images/interwiki.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif
index f52c1c581..f52c1c581 100644
--- a/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.de.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/amazon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif
index f52c1c581..f52c1c581 100644
--- a/vendors/dokuwiki/lib/images/interwiki/amazon.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif
index f52c1c581..f52c1c581 100644
--- a/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/amazon.uk.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/coral.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif
index 0f9f67587..0f9f67587 100644
--- a/vendors/dokuwiki/lib/images/interwiki/coral.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/coral.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/doku.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif
index 7dc4248e8..7dc4248e8 100644
--- a/vendors/dokuwiki/lib/images/interwiki/doku.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/doku.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/dokubug.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif
index 3432b8d57..3432b8d57 100644
--- a/vendors/dokuwiki/lib/images/interwiki/dokubug.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/dokubug.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/google.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif
index fb39f6152..fb39f6152 100644
--- a/vendors/dokuwiki/lib/images/interwiki/google.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/google.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/meatball.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif
index 7ac545436..7ac545436 100644
--- a/vendors/dokuwiki/lib/images/interwiki/meatball.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/meatball.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/phpfn.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif
index 638d4c450..638d4c450 100644
--- a/vendors/dokuwiki/lib/images/interwiki/phpfn.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/phpfn.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/sb.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif
index e272a29b7..e272a29b7 100644
--- a/vendors/dokuwiki/lib/images/interwiki/sb.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/sb.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/wiki.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif
index e8dc5d274..e8dc5d274 100644
--- a/vendors/dokuwiki/lib/images/interwiki/wiki.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wiki.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/wp.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif
index ca853b8c9..ca853b8c9 100644
--- a/vendors/dokuwiki/lib/images/interwiki/wp.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wp.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/wpde.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif
index ca853b8c9..ca853b8c9 100644
--- a/vendors/dokuwiki/lib/images/interwiki/wpde.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpde.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/wpes.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif
index ca853b8c9..ca853b8c9 100644
--- a/vendors/dokuwiki/lib/images/interwiki/wpes.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpes.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/wpfr.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif
index ca853b8c9..ca853b8c9 100644
--- a/vendors/dokuwiki/lib/images/interwiki/wpfr.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpfr.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/wpjp.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif
index ca853b8c9..ca853b8c9 100644
--- a/vendors/dokuwiki/lib/images/interwiki/wpjp.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpjp.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif
index ca853b8c9..ca853b8c9 100644
--- a/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wpmeta.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/interwiki/wppl.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif
index ca853b8c9..ca853b8c9 100644
--- a/vendors/dokuwiki/lib/images/interwiki/wppl.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/interwiki/wppl.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/larger.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif
index e137c92fa..e137c92fa 100644
--- a/vendors/dokuwiki/lib/images/larger.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/larger.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png
index 49f272f82..49f272f82 100644
--- a/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-nd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png
index 0f2a0f107..0f2a0f107 100644
--- a/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc-sa.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png
index 5f9821470..5f9821470 100644
--- a/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nc.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png
index 8f317035e..8f317035e 100644
--- a/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-nd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png
index f0a944e0b..f0a944e0b 100644
--- a/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by-sa.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/badge/cc-by.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png
index 822491edb..822491edb 100644
--- a/vendors/dokuwiki/lib/images/license/badge/cc-by.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc-by.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/badge/cc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png
index a66f4d1a0..a66f4d1a0 100644
--- a/vendors/dokuwiki/lib/images/license/badge/cc.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/cc.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/badge/gnufdl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png
index 1371aba88..1371aba88 100644
--- a/vendors/dokuwiki/lib/images/license/badge/gnufdl.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/gnufdl.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/badge/publicdomain.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png
index cedc39c62..cedc39c62 100644
--- a/vendors/dokuwiki/lib/images/license/badge/publicdomain.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/badge/publicdomain.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png
index b27ead2f6..b27ead2f6 100644
--- a/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-nd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png
index 1c54f994d..1c54f994d 100644
--- a/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc-sa.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png
index 33c7b1fa4..33c7b1fa4 100644
--- a/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nc.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png
index 52073c043..52073c043 100644
--- a/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-nd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png
index 0b1880f91..0b1880f91 100644
--- a/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by-sa.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/button/cc-by.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png
index 99d8efd35..99d8efd35 100644
--- a/vendors/dokuwiki/lib/images/license/button/cc-by.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc-by.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/button/cc.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png
index adfa085bd..adfa085bd 100644
--- a/vendors/dokuwiki/lib/images/license/button/cc.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/cc.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/button/gnufdl.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png
index cb815ac13..cb815ac13 100644
--- a/vendors/dokuwiki/lib/images/license/button/gnufdl.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/gnufdl.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/license/button/publicdomain.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png
index f78e73d02..f78e73d02 100644
--- a/vendors/dokuwiki/lib/images/license/button/publicdomain.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/license/button/publicdomain.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/list-minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif
index 36902f159..36902f159 100644
--- a/vendors/dokuwiki/lib/images/list-minus.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-minus.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/list-plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif
index adc3fac8a..adc3fac8a 100644
--- a/vendors/dokuwiki/lib/images/list-plus.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/list-plus.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/loading.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif
index 240bd88c5..240bd88c5 100644
--- a/vendors/dokuwiki/lib/images/loading.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/loading.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/magnifier.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png
index cf3d97f75..cf3d97f75 100644
--- a/vendors/dokuwiki/lib/images/magnifier.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/magnifier.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif
index 499a2e2aa..499a2e2aa 100644
--- a/vendors/dokuwiki/lib/images/minus.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/minus.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/multiupload.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png
index 1e8efa063..1e8efa063 100644
--- a/vendors/dokuwiki/lib/images/multiupload.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/multiupload.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/notify.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png
index 6e0015df4..6e0015df4 100644
--- a/vendors/dokuwiki/lib/images/notify.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/notify.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/ns.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png
index da3c2a2d7..da3c2a2d7 100644
--- a/vendors/dokuwiki/lib/images/ns.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/ns.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/page.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/page.png
index 03ddd799f..03ddd799f 100644
--- a/vendors/dokuwiki/lib/images/page.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/page.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/pencil.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png
index 0bfecd50e..0bfecd50e 100644
--- a/vendors/dokuwiki/lib/images/pencil.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/pencil.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif
index 9306686d8..9306686d8 100644
--- a/vendors/dokuwiki/lib/images/plus.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/plus.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smaller.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif
index 66d3a51e7..66d3a51e7 100644
--- a/vendors/dokuwiki/lib/images/smaller.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smaller.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/delete.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif
index d668348b9..d668348b9 100644
--- a/vendors/dokuwiki/lib/images/smileys/delete.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/delete.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/fixme.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif
index b66ea99d6..b66ea99d6 100644
--- a/vendors/dokuwiki/lib/images/smileys/fixme.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/fixme.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif
index 2880055cc..2880055cc 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_arrow.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif
index d3527723c..d3527723c 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_biggrin.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_confused.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif
index 0c49e0698..0c49e0698 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_confused.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_confused.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_cool.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif
index cead0306c..cead0306c 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_cool.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cool.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_cry.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif
index 7d54b1f99..7d54b1f99 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_cry.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_cry.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif
index fd7903b19..fd7903b19 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif
index eb4b70b66..eb4b70b66 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_doubt2.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_eek.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif
index 5d3978106..5d3978106 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_eek.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_eek.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_evil.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif
index ab1aa8e12..ab1aa8e12 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_evil.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_evil.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif
index 6e50e2eec..6e50e2eec 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_exclaim.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_frown.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif
index d2ac78c04..d2ac78c04 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_frown.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_frown.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_fun.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif
index a8bb8a303..a8bb8a303 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_fun.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_fun.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_idea.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif
index a40ae0d7e..a40ae0d7e 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_idea.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_idea.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif
index 1410f7f1e..1410f7f1e 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_kaddi.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_lol.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif
index 374ba150f..374ba150f 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_lol.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_lol.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif
index b54cd0f94..b54cd0f94 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_mrgreen.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif
index 4f311567e..4f311567e 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_neutral.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_question.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif
index 9d072265b..9d072265b 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_question.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_question.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_razz.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif
index 29da2a2fc..29da2a2fc 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_razz.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_razz.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_redface.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif
index ad7628320..ad7628320 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_redface.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_redface.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif
index d7f5f2f4b..d7f5f2f4b 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_rolleyes.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_sad.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif
index d2ac78c04..d2ac78c04 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_sad.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_sad.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif
index 448399b2b..448399b2b 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_silenced.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_smile.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif
index 7b1f6d304..7b1f6d304 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_smile.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif
index 769639d32..769639d32 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_smile2.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif
index cb2142431..cb2142431 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_surprised.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif
index 502fe247e..502fe247e 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_twisted.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/smileys/icon_wink.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif
index d14828804..d14828804 100644
--- a/vendors/dokuwiki/lib/images/smileys/icon_wink.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/smileys/icon_wink.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/success.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/success.png
index a5ae9f11b..a5ae9f11b 100644
--- a/vendors/dokuwiki/lib/images/success.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/success.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/throbber.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif
index d04bd3949..d04bd3949 100644
--- a/vendors/dokuwiki/lib/images/throbber.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/throbber.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/bold.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png
index 7ebe99ee9..7ebe99ee9 100644
--- a/vendors/dokuwiki/lib/images/toolbar/bold.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/bold.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/chars.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png
index 3f3396aeb..3f3396aeb 100644
--- a/vendors/dokuwiki/lib/images/toolbar/chars.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/chars.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/h.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png
index aae052462..aae052462 100644
--- a/vendors/dokuwiki/lib/images/toolbar/h.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/h1.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png
index 93dae935f..93dae935f 100644
--- a/vendors/dokuwiki/lib/images/toolbar/h1.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h1.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/h2.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png
index f0eee3bd0..f0eee3bd0 100644
--- a/vendors/dokuwiki/lib/images/toolbar/h2.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h2.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/h3.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png
index 8cfd4c077..8cfd4c077 100644
--- a/vendors/dokuwiki/lib/images/toolbar/h3.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h3.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/h4.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png
index 7b8f51a1b..7b8f51a1b 100644
--- a/vendors/dokuwiki/lib/images/toolbar/h4.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h4.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/h5.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png
index 44b00d9c8..44b00d9c8 100644
--- a/vendors/dokuwiki/lib/images/toolbar/h5.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/h5.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/hequal.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png
index 8fc6b0d75..8fc6b0d75 100644
--- a/vendors/dokuwiki/lib/images/toolbar/hequal.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hequal.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/hminus.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png
index f9d67adcb..f9d67adcb 100644
--- a/vendors/dokuwiki/lib/images/toolbar/hminus.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hminus.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/hplus.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png
index 66f3d5e33..66f3d5e33 100644
--- a/vendors/dokuwiki/lib/images/toolbar/hplus.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hplus.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/hr.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png
index f86a8ec94..f86a8ec94 100644
--- a/vendors/dokuwiki/lib/images/toolbar/hr.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/hr.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/image.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png
index 1aab5d7de..1aab5d7de 100644
--- a/vendors/dokuwiki/lib/images/toolbar/image.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/image.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/italic.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png
index 324e7c036..324e7c036 100644
--- a/vendors/dokuwiki/lib/images/toolbar/italic.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/italic.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/link.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png
index 41e52c6ab..41e52c6ab 100644
--- a/vendors/dokuwiki/lib/images/toolbar/link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/linkextern.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png
index 75afd3dc2..75afd3dc2 100644
--- a/vendors/dokuwiki/lib/images/toolbar/linkextern.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/linkextern.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/mono.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png
index 178cec9f2..178cec9f2 100644
--- a/vendors/dokuwiki/lib/images/toolbar/mono.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/mono.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/ol.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png
index 3162fa21d..3162fa21d 100644
--- a/vendors/dokuwiki/lib/images/toolbar/ol.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ol.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/sig.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png
index ef997b7cd..ef997b7cd 100644
--- a/vendors/dokuwiki/lib/images/toolbar/sig.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/sig.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/smiley.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png
index e92845cb4..e92845cb4 100644
--- a/vendors/dokuwiki/lib/images/toolbar/smiley.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/smiley.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/strike.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png
index 203aacc2b..203aacc2b 100644
--- a/vendors/dokuwiki/lib/images/toolbar/strike.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/strike.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/ul.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png
index 471171db4..471171db4 100644
--- a/vendors/dokuwiki/lib/images/toolbar/ul.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/ul.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/toolbar/underline.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png
index bf9665a68..bf9665a68 100644
--- a/vendors/dokuwiki/lib/images/toolbar/underline.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/toolbar/underline.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/trash.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png
index ebad933c8..ebad933c8 100644
--- a/vendors/dokuwiki/lib/images/trash.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/trash.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/up.png b/mod/dokuwiki/vendors/dokuwiki/lib/images/up.png
index 557d5e6a9..557d5e6a9 100644
--- a/vendors/dokuwiki/lib/images/up.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/up.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/images/wrap.gif b/mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif
index f2253e4a2..f2253e4a2 100644
--- a/vendors/dokuwiki/lib/images/wrap.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/images/wrap.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/index.html
index 8cb33512e..8cb33512e 100644
--- a/vendors/dokuwiki/lib/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/index.html
diff --git a/vendors/dokuwiki/lib/plugins/acl/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php
index 34149ea05..34149ea05 100644
--- a/vendors/dokuwiki/lib/plugins/acl/admin.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/admin.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php
index d3e88d932..d3e88d932 100644
--- a/vendors/dokuwiki/lib/plugins/acl/ajax.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/ajax.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php
index 04d9b0acf..04d9b0acf 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/af/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php
index ced250243..ced250243 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ar/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt
index 23028cb35..23028cb35 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php
index 9facd4259..9facd4259 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/bg/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt
index 87450d2fa..87450d2fa 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php
index ef0ae92eb..ef0ae92eb 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca-valencia/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt
index d9bcc126d..d9bcc126d 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php
index 10f656062..10f656062 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ca/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt
index 1dbc88ad0..1dbc88ad0 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php
index 899d30ced..899d30ced 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/cs/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt
index c8eedfc48..c8eedfc48 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php
index c95ff1582..c95ff1582 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/da/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt
index d7930f8df..d7930f8df 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php
index 56dedfc61..56dedfc61 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de-informal/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt
index 783ae22e7..783ae22e7 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php
index 022ea6683..022ea6683 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/de/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt
index ea2f816c0..ea2f816c0 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php
index da8a72ab3..da8a72ab3 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/el/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt
index 2b80cc4c7..2b80cc4c7 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php
index 38ff20c88..38ff20c88 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/en/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt
index 0c03b8605..0c03b8605 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php
index 97a07c3c9..97a07c3c9 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eo/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt
index c683477a8..c683477a8 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php
index 3a23c71da..3a23c71da 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/es/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php
index e90d5eaa9..e90d5eaa9 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/et/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt
index 9e6070a10..9e6070a10 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php
index 99e70ad00..99e70ad00 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/eu/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt
index 1ec797faf..1ec797faf 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php
index ed576c271..ed576c271 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fa/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt
index d821f2d89..d821f2d89 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php
index 04074d8d4..04074d8d4 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fi/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt
index 69661bb9b..69661bb9b 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php
index efdc5f074..efdc5f074 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/fr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt
index c427b182f..c427b182f 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php
index 184cf7e1d..184cf7e1d 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/gl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt
index 33f2933b9..33f2933b9 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php
index 7d73c63dd..7d73c63dd 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/he/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php
index d8630a281..d8630a281 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hi/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php
index d2094b77b..d2094b77b 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt
index 57f16a39c..57f16a39c 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php
index 4fb1720ae..4fb1720ae 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/hu/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php
index d367340b7..d367340b7 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id-ni/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php
index 650637635..650637635 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/id/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php
index b45faa80a..b45faa80a 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/is/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt
index 5e4b08dd6..5e4b08dd6 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php
index 344987e8b..344987e8b 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/it/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt
index f7867f8e2..f7867f8e2 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php
index 831fd2d5c..831fd2d5c 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ja/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt
index 516198ee5..516198ee5 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php
index 43a5ceeeb..43a5ceeeb 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ko/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php
index f11944746..f11944746 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lt/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt
index f570d798c..f570d798c 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php
index f478b32c6..f478b32c6 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/lv/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt
index e8aa13b52..e8aa13b52 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php
index 978df758a..978df758a 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/mr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php
index 6a29a9fa8..6a29a9fa8 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ne/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt
index 255f21ba0..255f21ba0 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php
index d45bb5907..d45bb5907 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/nl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt
index f02b6bdbd..f02b6bdbd 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php
index cd9e2edfb..cd9e2edfb 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/no/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt
index 331fd2a7a..331fd2a7a 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php
index 63a870c50..63a870c50 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt
index b2a49a90d..b2a49a90d 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php
index 82a19b290..82a19b290 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt-br/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt
index cf4619deb..cf4619deb 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php
index 6e094fd74..6e094fd74 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/pt/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt
index 3f762613c..3f762613c 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php
index 296baa291..296baa291 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ro/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt
index f969151fe..f969151fe 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php
index 496e67510..496e67510 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/ru/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt
index 1167bf5e9..1167bf5e9 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php
index 398f8c63d..398f8c63d 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sk/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php
index 32141fbce..32141fbce 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt
index 0ec8921d4..0ec8921d4 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php
index 6e1649992..6e1649992 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt
index 5ba770fa0..5ba770fa0 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php
index b5fd3b866..b5fd3b866 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/sv/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt
index 52edca93f..52edca93f 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php
index 472c33cdc..472c33cdc 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/th/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt
index b467c5019..b467c5019 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php
index 45fbe7489..45fbe7489 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/tr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt
index d16af0aa9..d16af0aa9 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php
index dc3e6a963..dc3e6a963 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/uk/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php
index 4458d806b..4458d806b 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/vi/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt
index 871c1f4f1..871c1f4f1 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php
index d64e85a92..d64e85a92 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh-tw/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt
index 526dcee9b..526dcee9b 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/help.txt
diff --git a/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php
index 6ae32b01c..6ae32b01c 100644
--- a/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/lang/zh/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/acl/pix/group.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png
index 7fb4e1f1e..7fb4e1f1e 100644
--- a/vendors/dokuwiki/lib/plugins/acl/pix/group.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/group.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/acl/pix/ns.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png
index da3c2a2d7..da3c2a2d7 100644
--- a/vendors/dokuwiki/lib/plugins/acl/pix/ns.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/ns.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/acl/pix/page.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png
index 03ddd799f..03ddd799f 100644
--- a/vendors/dokuwiki/lib/plugins/acl/pix/page.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/page.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/acl/pix/user.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png
index 8fd539e9c..8fd539e9c 100644
--- a/vendors/dokuwiki/lib/plugins/acl/pix/user.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/pix/user.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/acl/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js
index 21f161a97..21f161a97 100644
--- a/vendors/dokuwiki/lib/plugins/acl/script.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/script.js
diff --git a/vendors/dokuwiki/lib/plugins/acl/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css
index 0c5a9819b..0c5a9819b 100644
--- a/vendors/dokuwiki/lib/plugins/acl/style.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/acl/style.css
diff --git a/vendors/dokuwiki/lib/plugins/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php
index a26bc654a..a26bc654a 100644
--- a/vendors/dokuwiki/lib/plugins/action.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/action.php
diff --git a/vendors/dokuwiki/lib/plugins/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php
index 2eeda3f7b..2eeda3f7b 100644
--- a/vendors/dokuwiki/lib/plugins/admin.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/admin.php
diff --git a/vendors/dokuwiki/lib/plugins/box/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css
index 956b8a38b..956b8a38b 100644
--- a/vendors/dokuwiki/lib/plugins/box/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/print.css
diff --git a/vendors/dokuwiki/lib/plugins/box/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css
index f20d765bc..f20d765bc 100644
--- a/vendors/dokuwiki/lib/plugins/box/style.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/style.css
diff --git a/vendors/dokuwiki/lib/plugins/box/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php
index 35f96f85a..35f96f85a 100644
--- a/vendors/dokuwiki/lib/plugins/box/syntax.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/box/syntax.php
diff --git a/vendors/dokuwiki/lib/plugins/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html
index d614603ac..d614603ac 100644
--- a/vendors/dokuwiki/lib/plugins/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/index.html
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/COPYING b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING
index d60c31a97..d60c31a97 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/COPYING
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/COPYING
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS
index cb03c247d..cb03c247d 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/CREDITS
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt
index db43bc514..db43bc514 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/VERSION.txt
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php
index ee09a980d..ee09a980d 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/action.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/action.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php
index 99b6e12a2..99b6e12a2 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/admin.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/admin.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php
index 93b3d5f07..93b3d5f07 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/ajax.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/changelog b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog
index ec78c7c38..ec78c7c38 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/changelog
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/changelog
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php
index 7c0f46228..7c0f46228 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/default.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php
index cd45f163a..cd45f163a 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/conf/metadata.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js
index 9ab87c8a8..9ab87c8a8 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit-full.js
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/edit.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js
index 7deb5a596..7deb5a596 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/edit.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/edit.js
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif
index 8c07da8ad..8c07da8ad 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/close.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif
index ced7f0879..ced7f0879 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/base.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif
index b5cf52378..b5cf52378 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/empty.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif
index 0d7d6431b..0d7d6431b 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folder.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif
index c7c9f7ed6..c7c9f7ed6 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderh.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif
index 20fe6ace1..20fe6ace1 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderhopen.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif
index a9c466a5b..a9c466a5b 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/folderopen.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt
index 1b1d8cde3..1b1d8cde3 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/info.txt
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif
index 34dd47610..34dd47610 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/join.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif
index 48b81c80a..48b81c80a 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/joinbottom.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif
index 1a259eea0..1a259eea0 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/line.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif
index 3d212a97a..3d212a97a 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minus.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif
index dc3198be2..dc3198be2 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/minusbottom.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif
index 2592ac20f..2592ac20f 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_minus.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif
index f258ce211..f258ce211 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/nolines_plus.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif
index 5d120fa99..5d120fa99 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/page.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif
index b2c997233..b2c997233 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plus.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif
index b5671d891..b5671d891 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/default/plusbottom.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif
index afbe6429d..afbe6429d 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/empty.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png
index 460e0f981..460e0f981 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/indexmenu_toolbar.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif
index a0f09e9d1..a0f09e9d1 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/larrow.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif
index 5dae8131d..5dae8131d 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/msort.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif
index 58a4158f5..58a4158f5 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/rarrow.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif
index a90924ce8..a90924ce8 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/images/toc_bullet.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php
index 19f20b9da..19f20b9da 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/pclzip.lib.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php
index 04dc75675..04dc75675 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/inc/repo.class.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js
index 7c60ceffe..7c60ceffe 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu-full.js
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js
index ce5937c3d..ce5937c3d 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/indexmenu.js
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js
index 2ea6e32f2..2ea6e32f2 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/admmenu.js
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js
index d92956141..d92956141 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/menu.js
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js
index d58ae3802..d58ae3802 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/jsmenu/usrmenu.js
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php
index 29d939aa5..29d939aa5 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/de/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php
index e298caa44..e298caa44 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/en/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php
index 114237f32..114237f32 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/es/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php
index 4f6bbcd54..4f6bbcd54 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/lang/it/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js
index 34c8266cc..34c8266cc 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex-full.js
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js
index ac437321e..ac437321e 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/nojsindex.js
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js
index 411f0fde5..411f0fde5 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/script.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/script.js
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css
index a70cbebfe..a70cbebfe 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/style.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/style.css
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php
index a1653437d..a1653437d 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/indexmenu.php
diff --git a/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php
index 962f7efca..962f7efca 100644
--- a/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/indexmenu/syntax/tag.php
diff --git a/vendors/dokuwiki/lib/plugins/info/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php
index dc0a7d2fc..dc0a7d2fc 100644
--- a/vendors/dokuwiki/lib/plugins/info/syntax.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/info/syntax.php
diff --git a/vendors/dokuwiki/lib/plugins/note/images/important.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png
index dc8c8a457..dc8c8a457 100644
--- a/vendors/dokuwiki/lib/plugins/note/images/important.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/important.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/note/images/note.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png
index df1e0a926..df1e0a926 100644
--- a/vendors/dokuwiki/lib/plugins/note/images/note.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/note.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/note/images/tb_important.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png
index d853518de..d853518de 100644
--- a/vendors/dokuwiki/lib/plugins/note/images/tb_important.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_important.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/note/images/tb_note.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png
index f5c931603..f5c931603 100644
--- a/vendors/dokuwiki/lib/plugins/note/images/tb_note.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_note.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png
index f127e91c5..f127e91c5 100644
--- a/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_tip.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png
index 892c83393..892c83393 100644
--- a/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tb_warning.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/note/images/tip.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png
index 2000f2085..2000f2085 100644
--- a/vendors/dokuwiki/lib/plugins/note/images/tip.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/tip.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/note/images/warning.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png
index 3c8a37df5..3c8a37df5 100644
--- a/vendors/dokuwiki/lib/plugins/note/images/warning.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/images/warning.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/note/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt
index 5226345f4..5226345f4 100644
--- a/vendors/dokuwiki/lib/plugins/note/info.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/info.txt
diff --git a/vendors/dokuwiki/lib/plugins/note/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js
index c21120727..c21120727 100644
--- a/vendors/dokuwiki/lib/plugins/note/script.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/script.js
diff --git a/vendors/dokuwiki/lib/plugins/note/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css
index 8b97dea06..8b97dea06 100644
--- a/vendors/dokuwiki/lib/plugins/note/style.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/style.css
diff --git a/vendors/dokuwiki/lib/plugins/note/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php
index 368d0d412..368d0d412 100644
--- a/vendors/dokuwiki/lib/plugins/note/syntax.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/note/syntax.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt
index 4c9835a1d..4c9835a1d 100644
--- a/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ChangeLog.txt
diff --git a/vendors/dokuwiki/lib/plugins/odt/README.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt
index 3d4c97f8d..3d4c97f8d 100644
--- a/vendors/dokuwiki/lib/plugins/odt/README.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/README.txt
diff --git a/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php
index 20e74a0e8..20e74a0e8 100644
--- a/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/ZipLib.class.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/action.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php
index 0ca861518..0ca861518 100644
--- a/vendors/dokuwiki/lib/plugins/odt/action.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/action.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php
index d69966874..d69966874 100644
--- a/vendors/dokuwiki/lib/plugins/odt/conf/default.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/default.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php
index 7614f3c73..7614f3c73 100644
--- a/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/conf/metadata.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt
index 3006078be..3006078be 100644
--- a/vendors/dokuwiki/lib/plugins/odt/info.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/info.txt
diff --git a/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php
index 607ff99e3..607ff99e3 100644
--- a/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/de/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php
index 4a6d50985..4a6d50985 100644
--- a/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/en/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php
index f86a80426..f86a80426 100644
--- a/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/es/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php
index 4290573ec..4290573ec 100644
--- a/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/fr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php
index 45e171be5..45e171be5 100644
--- a/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/it/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php
index 6df1be2d0..6df1be2d0 100644
--- a/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ja/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php
index 9eaaf2c43..9eaaf2c43 100644
--- a/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/ru/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php
index 808b248e0..808b248e0 100644
--- a/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/lang/zh/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/odt.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png
index 4ea3cec8f..4ea3cec8f 100644
--- a/vendors/dokuwiki/lib/plugins/odt/odt.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/odt.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/odt/renderer.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php
index 5525e4926..5525e4926 100644
--- a/vendors/dokuwiki/lib/plugins/odt/renderer.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/renderer.php
diff --git a/vendors/dokuwiki/lib/plugins/odt/styles.xml b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml
index c328464f3..c328464f3 100644
--- a/vendors/dokuwiki/lib/plugins/odt/styles.xml
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/styles.xml
diff --git a/vendors/dokuwiki/lib/plugins/odt/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php
index a8d0832d7..a8d0832d7 100644
--- a/vendors/dokuwiki/lib/plugins/odt/syntax.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/odt/syntax.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php
index b24b1ff6e..b24b1ff6e 100644
--- a/vendors/dokuwiki/lib/plugins/revert/admin.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/admin.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php
index 1fff08db3..1fff08db3 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/af/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php
index cdab0cf43..cdab0cf43 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ar/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt
index ab7308d6d..ab7308d6d 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php
index 6f0ff0672..6f0ff0672 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/bg/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt
index fed2cb9cc..fed2cb9cc 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php
index 77dd5808e..77dd5808e 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca-valencia/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt
index 0af2e8e6d..0af2e8e6d 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php
index b8800911f..b8800911f 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ca/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt
index bbc0df25a..bbc0df25a 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php
index cdfe0e96c..cdfe0e96c 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/cs/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt
index fdb0c5f32..fdb0c5f32 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php
index 97e15f361..97e15f361 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/da/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php
index fd6e81c8a..fd6e81c8a 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de-informal/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt
index d5a092155..d5a092155 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php
index d26413ac1..d26413ac1 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/de/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt
index 9b583bc6b..9b583bc6b 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php
index 7b6fde803..7b6fde803 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/el/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt
index b8f355854..b8f355854 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php
index a2002f1a7..a2002f1a7 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/en/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt
index 14e831467..14e831467 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php
index 7ed2a4777..7ed2a4777 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eo/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt
index 39c5b047d..39c5b047d 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php
index 2886528d6..2886528d6 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/es/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt
index c5a5a5afa..c5a5a5afa 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php
index e94f07b2a..e94f07b2a 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/eu/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt
index 0ccdb089a..0ccdb089a 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php
index 02d2aabd2..02d2aabd2 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fa/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt
index 3b3ce5daa..3b3ce5daa 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php
index 26bc6b76a..26bc6b76a 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fi/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt
index db61ac9cf..db61ac9cf 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php
index 8d17280d4..8d17280d4 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/fr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt
index 81e98f1d5..81e98f1d5 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php
index 33472090d..33472090d 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/gl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt
index 44b78dfea..44b78dfea 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php
index e09ffeaab..e09ffeaab 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/he/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php
index d8630a281..d8630a281 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hi/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php
index d2094b77b..d2094b77b 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt
index e2c2dadd9..e2c2dadd9 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php
index 58f17007d..58f17007d 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/hu/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php
index d367340b7..d367340b7 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id-ni/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php
index c3d485930..c3d485930 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/id/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php
index 9de404992..9de404992 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/is/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt
index 1577af7ec..1577af7ec 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php
index 0c2b265de..0c2b265de 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/it/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt
index 995a57fd7..995a57fd7 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php
index 0cd8c6f9b..0cd8c6f9b 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ja/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt
index a0164dc4f..a0164dc4f 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php
index 5e070de92..5e070de92 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ko/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php
index 103485864..103485864 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lt/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt
index edcdab2cd..edcdab2cd 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php
index 0101f2698..0101f2698 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/lv/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt
index efca2430d..efca2430d 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php
index 3912bb967..3912bb967 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/mr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php
index 4fd337532..4fd337532 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ne/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt
index db8f5a06c..db8f5a06c 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php
index 3b5c4e0fe..3b5c4e0fe 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/nl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt
index f48b98749..f48b98749 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php
index 262ea3fe5..262ea3fe5 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/no/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt
index 410948a2f..410948a2f 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php
index 8ad68b5f8..8ad68b5f8 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt
index 5ce9890db..5ce9890db 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php
index 93c8bf4e1..93c8bf4e1 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt-br/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt
index 7adfe5f21..7adfe5f21 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php
index 4ad114efe..4ad114efe 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/pt/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt
index 3a030359b..3a030359b 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php
index 6e534fd37..6e534fd37 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ro/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt
index 6f08c9961..6f08c9961 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php
index a78210777..a78210777 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/ru/lang.php
diff --git a/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php
index 822837de0..822837de0 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sk/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php
index 1fcf4ca36..1fcf4ca36 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt
index 8c288e7f1..8c288e7f1 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php
index 3b28a1729..3b28a1729 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt
index cd7f322a3..cd7f322a3 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php
index 1b6ca3374..1b6ca3374 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/sv/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt
index 2bfd27e59..2bfd27e59 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php
index 86e4f9ca4..86e4f9ca4 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/th/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt
index ff123995a..ff123995a 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php
index 164a8ec4f..164a8ec4f 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/tr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt
index 7bf5dfcb9..7bf5dfcb9 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php
index 37104bdd2..37104bdd2 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/uk/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt
index 2aad10206..2aad10206 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php
index 40a137dc0..40a137dc0 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh-tw/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt
index c697f8aea..c697f8aea 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php
index 6241b712b..6241b712b 100644
--- a/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/revert/lang/zh/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/README b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README
index 21c5dcfae..21c5dcfae 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/README
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/README
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php
index cd1f40c86..cd1f40c86 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/default.php
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php
index 7e83909ba..7e83909ba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/conf/metadata.php
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php
index d38a3633a..d38a3633a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/en/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php
index 3091a7eaf..3091a7eaf 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/ru/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php
index bd8bf02f9..bd8bf02f9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/lang/sp/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt
index 9692c8d2e..9692c8d2e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/plugin.info.txt
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php
index d0822a1ce..d0822a1ce 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/renderer.php
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif
index 0c506e397..0c506e397 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/screen.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php
index 40b1d0630..40b1d0630 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/syntax.php
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt
index 1a17182fc..1a17182fc 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/license.txt
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3 b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3
index 43cc6135d..43cc6135d 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/null.mp3
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js
index 9095b5de3..9095b5de3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf
index 234a83343..234a83343 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/audio_support/soundmanager2.swf
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif
index 909490511..909490511 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebg.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif
index 938a0795c..938a0795c 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluebottom.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif
index 6fe83f2c7..6fe83f2c7 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/bluefooter.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css
index 48b1657fd..48b1657fd 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/blue/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif
index 75b945d25..75b945d25 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif
index 5f448a16f..5f448a16f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/bodybg.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css
index 14d8509e9..14d8509e9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc
index 4d90c87a9..4d90c87a9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css
index 9e9d2a3c5..9e9d2a3c5 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css
index 62db519ed..62db519ed 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css
index f5c2666b6..f5c2666b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css
index e7a71d145..e7a71d145 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css
index 86444e041..86444e041 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css
index 0786d7dbd..0786d7dbd 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/default/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif
index 75b945d25..75b945d25 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css
index 74f0fdfba..74f0fdfba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc
index bba2db756..bba2db756 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png
index 653814eef..653814eef 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/logo.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css
index 9e9d2a3c5..9e9d2a3c5 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css
index 62db519ed..62db519ed 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css
index c004defcd..c004defcd 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css
index e7a71d145..e7a71d145 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css
index 86444e041..86444e041 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css
index 0786d7dbd..0786d7dbd 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/dokuwiki/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE
index 6d1340dbc..6d1340dbc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/MIT-LICENSE
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js
index 53ea36f64..53ea36f64 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/builder.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js
index eb9c4c08a..eb9c4c08a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/controls.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js
index 6e3a1f872..6e3a1f872 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/dragdrop.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js
index 5ee17d3e2..5ee17d3e2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/effects.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js
index d6ec5cd63..d6ec5cd63 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/presentacular.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js
index f100f84a7..f100f84a7 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/prototype.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js
index 37a0733a5..37a0733a5 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/scriptaculous.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js
index ac2fef2d5..ac2fef2d5 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/slider.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js
index edacf4101..edacf4101 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/sound.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js
index 90e97b8d6..90e97b8d6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/effects_support/unittest.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt
index 5c00e8abd..5c00e8abd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/LEEME.txt
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif
index 75b945d25..75b945d25 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc
index bba2db756..bba2db756 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html
index 39d8f46ad..39d8f46ad 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/index.html
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png
index 9e49dd625..9e49dd625 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-handout-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png
index e8b5f9d82..e8b5f9d82 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back-slide-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png
index ac1708379..ac1708379 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/back_console.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png
index 811b676bf..811b676bf 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-foot.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png
index c1df59a15..c1df59a15 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf
index ff6497417..ff6497417 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-head.xcf
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png
index 9ed390d97..9ed390d97 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/background-main.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico
index 10ee10936..10ee10936 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/favicon.ico
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png
index 119fe742e..119fe742e 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/logo.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png
index 89a7e4fa2..89a7e4fa2 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-background.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png
index 1001624dd..1001624dd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pics/table-header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css
index e34ead879..e34ead879 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/executive/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png
index 66cb21ce9..66cb21ce9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/across.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif
index 75b945d25..75b945d25 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png
index 79ed780d9..79ed780d9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/bottom.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png
index 340b839bb..340b839bb 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/druplicon.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css
index c44e23877..c44e23877 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc
index 9ec89fbeb..9ec89fbeb 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css
index 5858cf2bc..5858cf2bc 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css
index abe2c2659..abe2c2659 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css
index e7a71d145..e7a71d145 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css
index ad1530b9c..ad1530b9c 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png
index 9251f8935..9251f8935 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/top.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/faucet/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg
index 248743c94..248743c94 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blume.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg
index 430d21174..430d21174 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/blumerechts.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css
index 0da0ff300..0da0ff300 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/flower/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg
index 6da2a0090..6da2a0090 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/bg-slide.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css
index 24b5fb0e4..24b5fb0e4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc
index bba2db756..bba2db756 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css
index 80fad55d3..80fad55d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css
index 3b0428edb..3b0428edb 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css
index 0786d7dbd..0786d7dbd 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/garlandica/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt
index f656fa7de..f656fa7de 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/LEEME.txt
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif
index 75b945d25..75b945d25 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc
index bba2db756..bba2db756 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html
index 39d8f46ad..39d8f46ad 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/index.html
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png
index 9e49dd625..9e49dd625 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-handout-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png
index e8b5f9d82..e8b5f9d82 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back-slide-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png
index ac1708379..ac1708379 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/back_console.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png
index e007d2946..e007d2946 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-foot.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png
index 20c90e79d..20c90e79d 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-head.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png
index 28e8eee94..28e8eee94 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png
index 074709b5f..074709b5f 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/background-main2.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico
index 834bd85a5..834bd85a5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/favicon.ico
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png
index b542561d7..b542561d7 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/logo.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png
index 89a7e4fa2..89a7e4fa2 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-background.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png
index 565c6fd87..565c6fd87 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pics/table-header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css
index aebdafd61..aebdafd61 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/gorilla/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif
index 75b945d25..75b945d25 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif
index 55e1ff95e..55e1ff95e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/finish.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js
index 118ae7005..118ae7005 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/fixed.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg
index 9be4d3369..9be4d3369 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/help.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc
index 12a8b89f7..12a8b89f7 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png
index 8f911e778..8f911e778 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/numeric.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif
index 132368469..132368469 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/graphic_support/progress.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt
index 2900ef421..2900ef421 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/00_head.txt
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png
index 172c914f6..172c914f6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-shade.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg
index 6be0296db..6be0296db 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/bg-slide.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css
index f47a7b5a7..f47a7b5a7 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/i18n/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt
index c4f982126..c4f982126 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/LEEME.txt
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif
index 75b945d25..75b945d25 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc
index bba2db756..bba2db756 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html
index 39d8f46ad..39d8f46ad 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/index.html
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png
index 6f68dc67e..6f68dc67e 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-handout-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png
index 05b3dc503..05b3dc503 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back-slide-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png
index 8704104dc..8704104dc 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/back_console.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png
index c5d1ffc64..c5d1ffc64 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-foot.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png
index 56dfae9e7..56dfae9e7 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z
index da49c8361..da49c8361 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-head.xcf.7z
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png
index 835c5edfc..835c5edfc 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png
index 1f9702ada..1f9702ada 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/background-main2.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico
index 075faddc7..075faddc7 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/favicon.ico
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png
index 1db9ca08f..1db9ca08f 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/logo.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png
index 89a7e4fa2..89a7e4fa2 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-background.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png
index d759f1576..d759f1576 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pics/table-header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css
index 36bfc0a29..36bfc0a29 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/mandarina/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif
index a57ccb106..a57ccb106 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelbg.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg
index 3c0f13b1e..3c0f13b1e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelheader.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif
index fffb08a26..fffb08a26 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pixelslide0bg.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css
index 1b2107b3f..1b2107b3f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/pixel/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt
index d09fdc819..d09fdc819 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/LEEME.txt
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif
index 75b945d25..75b945d25 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc
index bba2db756..bba2db756 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html
index 47d9a6b83..47d9a6b83 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/index.html
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png
index 9e49dd625..9e49dd625 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-handout-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png
index e0c18c4fe..e0c18c4fe 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-index.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png
index e8b5f9d82..e8b5f9d82 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back-slide-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png
index ac1708379..ac1708379 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/back_console.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png
index af3be4e6b..af3be4e6b 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-foot.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png
index 12d6402ee..12d6402ee 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-head.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png
index 3d7595d78..3d7595d78 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/background-main.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico
index f1cdf0d62..f1cdf0d62 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/favicon.ico
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png
index dce12c815..dce12c815 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/logo.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png
index 89a7e4fa2..89a7e4fa2 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-background.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png
index 2f8795842..2f8795842 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pics/table-header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css
index 05d30adaf..05d30adaf 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/quality/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html
index 902901b1d..902901b1d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/s5-notes.html
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg
index 0602a0249..0602a0249 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif
index 75b945d25..75b945d25 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png
index 5ba8d53db..5ba8d53db 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/chalks.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png
index 804e16147..804e16147 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/footer.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css
index e54061c3e..e54061c3e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png
index 8453dc395..8453dc395 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc
index bba2db756..bba2db756 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html
index 39d8f46ad..39d8f46ad 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/index.html
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css
index 9e9d2a3c5..9e9d2a3c5 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css
index c04f5006a..c04f5006a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css
index 41a5f5b3d..41a5f5b3d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css
index 5affe5da6..5affe5da6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css
index 8ed9c1e20..8ed9c1e20 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css
index 0786d7dbd..0786d7dbd 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png
index 79a243385..79a243385 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/triangle.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/school/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png
index e28d6f102..e28d6f102 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png
index 063973f7f..063973f7f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/bank.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif
index 75b945d25..75b945d25 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png
index 4f3ba14c5..4f3ba14c5 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/footer.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css
index 5f0f5daa4..5f0f5daa4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc
index bba2db756..bba2db756 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html
index 39d8f46ad..39d8f46ad 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/index.html
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css
index 9e9d2a3c5..9e9d2a3c5 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css
index c04f5006a..c04f5006a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png
index 6258f024b..6258f024b 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pattern.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css
index 866b03735..866b03735 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css
index 5affe5da6..5affe5da6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css
index 8ed9c1e20..8ed9c1e20 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css
index 0786d7dbd..0786d7dbd 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png
index f06b1d393..f06b1d393 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/sun.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/sunny/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt
index db32b3854..db32b3854 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/LEEME.txt
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif
index 75b945d25..75b945d25 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc
index bba2db756..bba2db756 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html
index 39d8f46ad..39d8f46ad 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/index.html
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png
index 9e49dd625..9e49dd625 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-handout-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png
index e8b5f9d82..e8b5f9d82 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back-slide-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png
index ac1708379..ac1708379 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/back_console.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png
index c44e44f2c..c44e44f2c 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-foot.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png
index 713900b92..713900b92 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-head.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png
index c7e1d71b7..c7e1d71b7 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/background-main.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico
index 138568ed4..138568ed4 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/favicon.ico
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png
index 662b919f1..662b919f1 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/logo.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png
index 89a7e4fa2..89a7e4fa2 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-background.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png
index 4c3a86b44..4c3a86b44 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pics/table-header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css
index 8e807b108..8e807b108 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tango/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt
index fb08e2004..fb08e2004 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/LEEME.txt
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif
index 75b945d25..75b945d25 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc
index bba2db756..bba2db756 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html
index 39d8f46ad..39d8f46ad 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/index.html
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png
index 5b29fb303..5b29fb303 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-foot.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png
index f36ad1acb..f36ad1acb 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-head.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png
index cb5106987..cb5106987 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/background-main.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico
index 8de7eb42b..8de7eb42b 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/favicon.ico
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png
index 51e5173be..51e5173be 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/logo.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png
index 89a7e4fa2..89a7e4fa2 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-background.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png
index 4c3a86b44..4c3a86b44 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pics/table-header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css
index 8e807b108..8e807b108 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/tangodevweb/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt
index 5c00e8abd..5c00e8abd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/LEEME.txt
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif
index 75b945d25..75b945d25 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc
index bba2db756..bba2db756 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php
index c920d452b..c920d452b 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/index.php
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png
index 9e49dd625..9e49dd625 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-handout-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png
index e8b5f9d82..e8b5f9d82 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back-slide-print.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png
index ac1708379..ac1708379 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/back_console.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png
index 811b676bf..811b676bf 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-foot.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png
index c1df59a15..c1df59a15 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf
index ff6497417..ff6497417 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-head.xcf
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png
index 9ed390d97..9ed390d97 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/background-main.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico
index 10ee10936..10ee10936 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/favicon.ico
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg
index 923639a20..923639a20 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/logo.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png
index 89a7e4fa2..89a7e4fa2 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-background.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png
index 1001624dd..1001624dd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pics/table-header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css
index a4bddd7fb..a4bddd7fb 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js
index 7cb810d51..7cb810d51 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/thesis/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt
index 4c601efec..4c601efec 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/LEEME.txt
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif
index 75b945d25..75b945d25 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc
index bba2db756..bba2db756 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico
index 61ab58a16..61ab58a16 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/images/favicon.ico
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html
index ffa2037aa..ffa2037aa 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/index.html
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png
index a1de38829..a1de38829 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-foot.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png
index d64801d93..d64801d93 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-head.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png
index 7a5ce5971..7a5ce5971 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/background-main.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png
index 4f466baaf..4f466baaf 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png
index 77c1eb9bc..77c1eb9bc 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/dot2.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png
index ff68fc4f5..ff68fc4f5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/h1icon.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png
index c51f5d675..c51f5d675 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png
index 0f5e534d5..0f5e534d5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/logo.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png
index 09f67dbd9..09f67dbd9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pics/mail.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css
index ac95cf929..ac95cf929 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css
index e7a71d145..e7a71d145 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/ultraviolet/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg
index bf03b4ece..bf03b4ece 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bkgr.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif
index 75b945d25..75b945d25 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/blank.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif
index 5f448a16f..5f448a16f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/bodybg.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif
index 24f086168..24f086168 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png
index 4b2864ea2..4b2864ea2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/buzzsaw.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css
index 14d8509e9..14d8509e9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc
index bba2db756..bba2db756 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/iepngfix.htc
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css
index 9e9d2a3c5..9e9d2a3c5 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css
index 62db519ed..62db519ed 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css
index 1fe145578..1fe145578 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css
index e7a71d145..e7a71d145 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css
index 86444e041..86444e041 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css
index 0786d7dbd..0786d7dbd 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/vmc/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png
index daa740c40..daa740c40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png
index cd590aae9..cd590aae9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png
index cf537a008..cf537a008 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/audio_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png
index 1c2ca4817..1c2ca4817 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png
index 4b0c923b8..4b0c923b8 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png
index dbea88975..dbea88975 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/auto_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png
index 0e48413d3..0e48413d3 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/backgrnd.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif
index 941489d40..941489d40 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/bodybg.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif
index af280dea2..af280dea2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/button.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png
index c4d99cd57..c4d99cd57 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/delay_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png
index 1bfd38790..1bfd38790 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png
index 0fdd1c605..0fdd1c605 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/exit_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png
index 482e4d53e..482e4d53e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png
index e12561fb2..e12561fb2 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png
index fb8943c98..fb8943c98 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/fade_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg
index 49370dbba..49370dbba 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/footer.jpg
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css
index 14d8509e9..14d8509e9 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/framing.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif
index cd6910106..cd6910106 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/head.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png
index 929dabba1..929dabba1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/header.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png
index 4f158d35d..4f158d35d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png
index a7b629995..a7b629995 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/last_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png
index 7e299bb50..7e299bb50 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/list_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png
index 41e12cb15..41e12cb15 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png
index 2ffcacae1..2ffcacae1 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png
index 9fe420153..9fe420153 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/loop_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png
index 2b9f44c4d..2b9f44c4d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png
index 25788124d..25788124d 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/next_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png
index bb4a8ae37..bb4a8ae37 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png
index c6bfe69fc..c6bfe69fc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/notes_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css
index 9e9d2a3c5..9e9d2a3c5 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/opera.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css
index 62db519ed..62db519ed 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/outline.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png
index 2561cb4a4..2561cb4a4 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png
index 2fc9c4a4a..2fc9c4a4a 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_on.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png
index 7a7c80ddc..7a7c80ddc 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pause_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css
index 75f69c3f7..75f69c3f7 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/pretty.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png
index c31d21350..c31d21350 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png
index 6fef4fa52..6fef4fa52 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/prev_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css
index 220083260..220083260 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/print.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css
index 86444e041..86444e041 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/s5-core.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif
index 886235eb9..886235eb9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slide0h1.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css
index 0786d7dbd..0786d7dbd 100755
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js
index 510a04c0e..510a04c0e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/slides.js
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif
index 1e531e9dd..1e531e9dd 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png
index 4588e2514..4588e2514 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png
index 400f613b6..400f613b6 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/toggle_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png
index f362acd1f..f362acd1f 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/volume_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css
index a37315552..a37315552 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/wrap.css
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png
index 5610884d9..5610884d9 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_link.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png
index 3a14a577e..3a14a577e 100644
--- a/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/s5reloaded/ui/yatil/zero_over.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php
index 633e001d2..633e001d2 100644
--- a/vendors/dokuwiki/lib/plugins/syntax.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/syntax.php
diff --git a/vendors/dokuwiki/lib/plugins/tbt/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js
index 96989731c..96989731c 100644
--- a/vendors/dokuwiki/lib/plugins/tbt/script.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/script.js
diff --git a/vendors/dokuwiki/lib/plugins/tbt/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css
index 50c672d78..50c672d78 100644
--- a/vendors/dokuwiki/lib/plugins/tbt/style.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/style.css
diff --git a/vendors/dokuwiki/lib/plugins/tbt/syntax.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php
index 28c4363e8..28c4363e8 100644
--- a/vendors/dokuwiki/lib/plugins/tbt/syntax.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/tbt/syntax.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/admin.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php
index da6029bbf..da6029bbf 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/admin.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/admin.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/images/search.png b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png
index 1aa445f03..1aa445f03 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/images/search.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/images/search.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php
index 9a6c5666d..9a6c5666d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/af/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt
index 14a10a27d..14a10a27d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt
index d44bb9fda..d44bb9fda 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt
index 5db2ce031..5db2ce031 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php
index 88a115de2..88a115de2 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ar/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt
index e0678198b..e0678198b 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt
index aa60fc3df..aa60fc3df 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt
index 652d03617..652d03617 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt
index 0a9afd513..0a9afd513 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php
index 58c8453f2..58c8453f2 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt
index e90205fe6..e90205fe6 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/bg/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt
index df5ba9235..df5ba9235 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt
index f386b589a..f386b589a 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt
index 6b78c127f..6b78c127f 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt
index 540a0702e..540a0702e 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php
index 5b0c628ed..5b0c628ed 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt
index 15af2d56f..15af2d56f 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca-valencia/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt
index 07c599476..07c599476 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt
index 90878e563..90878e563 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt
index f7dc8cb8e..f7dc8cb8e 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt
index 864aa1008..864aa1008 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php
index 445556973..445556973 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt
index 22e1587f4..22e1587f4 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ca/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt
index 39b14d554..39b14d554 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt
index a8790d87d..a8790d87d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt
index d8ba38605..d8ba38605 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt
index 5b8f6e90b..5b8f6e90b 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php
index 6f368bd0f..6f368bd0f 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt
index 36b87fed9..36b87fed9 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/cs/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt
index d97de4248..d97de4248 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt
index dff05454c..dff05454c 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt
index 05d63b7b0..05d63b7b0 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt
index 3f597a243..3f597a243 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php
index 42bdcb7c3..42bdcb7c3 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt
index 11d1710a0..11d1710a0 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/da/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt
index 1fc34c968..1fc34c968 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt
index 778396aa0..778396aa0 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt
index 291b0f19d..291b0f19d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt
index a5927a89d..a5927a89d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php
index d9011468b..d9011468b 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt
index 0a62012e5..0a62012e5 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de-informal/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt
index 925fa5042..925fa5042 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt
index 4f3bbbd03..4f3bbbd03 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt
index 9419200dd..9419200dd 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt
index a5837b8c7..a5837b8c7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php
index 913537f06..913537f06 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt
index 8d6d5fb46..8d6d5fb46 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/de/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt
index 0616f8c53..0616f8c53 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt
index baf9bc054..baf9bc054 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt
index dec59efd7..dec59efd7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt
index 874c13b57..874c13b57 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php
index 3c5c9b902..3c5c9b902 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt
index adb5c210b..adb5c210b 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/el/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt
index 9afecb5cd..9afecb5cd 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt
index c3ca90dbb..c3ca90dbb 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt
index 4d02dfddc..4d02dfddc 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt
index 73bf55613..73bf55613 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php
index 189a1db20..189a1db20 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt
index 54c45caf7..54c45caf7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/en/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt
index 8775ff85d..8775ff85d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt
index 0d94f8122..0d94f8122 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt
index 2ced16e7c..2ced16e7c 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt
index 2ef373f66..2ef373f66 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php
index 0eb99b862..0eb99b862 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt
index 714671afb..714671afb 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eo/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt
index 90c56e31d..90c56e31d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt
index 4c552a9c1..4c552a9c1 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt
index ccdd26f86..ccdd26f86 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt
index e558d3a28..e558d3a28 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php
index c11ebcd93..c11ebcd93 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt
index d0d32b913..d0d32b913 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/es/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt
index 855c43218..855c43218 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt
index 987b98f20..987b98f20 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt
index 82b92afe7..82b92afe7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt
index 848b3da05..848b3da05 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php
index b6e04f7c4..b6e04f7c4 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt
index fb80b14be..fb80b14be 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/eu/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt
index 32d604e43..32d604e43 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt
index f8a59ff10..f8a59ff10 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt
index 33fe5b517..33fe5b517 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt
index ffb850109..ffb850109 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php
index f9e973b9c..f9e973b9c 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt
index b539bf18a..b539bf18a 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fa/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt
index 5c4ee0a41..5c4ee0a41 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt
index 2203a20f8..2203a20f8 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt
index 53e0b41ab..53e0b41ab 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt
index 2ef0bb509..2ef0bb509 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php
index 6eeb4c3e8..6eeb4c3e8 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt
index 5ecf2ff7b..5ecf2ff7b 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fi/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt
index e60b8b894..e60b8b894 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt
index 778f44192..778f44192 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt
index ec193eb5a..ec193eb5a 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt
index 84987b0bf..84987b0bf 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php
index 9229ee8e8..9229ee8e8 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt
index 2d708fe43..2d708fe43 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/fr/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt
index cd1c487ff..cd1c487ff 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt
index f13133d6f..f13133d6f 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt
index d33f9c335..d33f9c335 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt
index 9b05a0c5e..9b05a0c5e 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php
index b6909c100..b6909c100 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt
index 792afd7d1..792afd7d1 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/gl/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt
index e2d1cb775..e2d1cb775 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt
index 42d738b1d..42d738b1d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt
index af90af359..af90af359 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt
index 232c5153b..232c5153b 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php
index 85f5274e8..85f5274e8 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt
index 9308fbebb..9308fbebb 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/he/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php
index d8630a281..d8630a281 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hi/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php
index d2094b77b..d2094b77b 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt
index 70a44c41d..70a44c41d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt
index 963d2e7b3..963d2e7b3 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt
index f82746094..f82746094 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt
index 150aff848..150aff848 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php
index b9f35cfc7..b9f35cfc7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt
index 9da7320c6..9da7320c6 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/hu/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php
index d367340b7..d367340b7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id-ni/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt
index eae407c04..eae407c04 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt
index 99e53c9ef..99e53c9ef 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt
index 6d14f4fde..6d14f4fde 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt
index de053f2ae..de053f2ae 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php
index 457ad4963..457ad4963 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt
index 9b70bc157..9b70bc157 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/id/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt
index 564006584..564006584 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php
index cabf83d64..cabf83d64 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/is/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt
index 9ce4c6e38..9ce4c6e38 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt
index fc36212af..fc36212af 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt
index 39767bfdc..39767bfdc 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt
index 3421709d6..3421709d6 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php
index 67b17e9ec..67b17e9ec 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt
index 91e27a9de..91e27a9de 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/it/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt
index 87b30e0a0..87b30e0a0 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt
index 67ef23e23..67ef23e23 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt
index e7695e307..e7695e307 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt
index 5dbe51c8c..5dbe51c8c 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php
index 321bbafe8..321bbafe8 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt
index 182cc198c..182cc198c 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ja/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt
index 578ba5636..578ba5636 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt
index 1e9c0ba73..1e9c0ba73 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt
index b8b13c5c8..b8b13c5c8 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt
index 8c8bfa5b9..8c8bfa5b9 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php
index eeb8eb791..eeb8eb791 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt
index 93fa3d6f2..93fa3d6f2 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ko/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt
index 32681ade7..32681ade7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt
index 262713c98..262713c98 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt
index da57ea380..da57ea380 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt
index 61f80d52e..61f80d52e 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php
index db3cf2d32..db3cf2d32 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt
index 87be62843..87be62843 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lt/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt
index 06fd70002..06fd70002 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt
index 5f59af7b8..5f59af7b8 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt
index efb0b04d7..efb0b04d7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt
index b248ddcb7..b248ddcb7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php
index 620678ff5..620678ff5 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt
index 44a10d94c..44a10d94c 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/lv/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt
index fc3a87737..fc3a87737 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt
index cf0e48551..cf0e48551 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt
index 2d3d64915..2d3d64915 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt
index 9253b323e..9253b323e 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php
index 8915678cc..8915678cc 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt
index ab6906771..ab6906771 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/mr/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt
index 868b12ab1..868b12ab1 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt
index 4441c8349..4441c8349 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt
index 040d2697d..040d2697d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt
index de08e483d..de08e483d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php
index f68ed2074..f68ed2074 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt
index ece94b388..ece94b388 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ne/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt
index 992d9f300..992d9f300 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt
index ad26e058f..ad26e058f 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt
index 0d58e48f3..0d58e48f3 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt
index 7df09dbab..7df09dbab 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php
index d4f0eaad9..d4f0eaad9 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt
index a9aac845d..a9aac845d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/nl/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt
index 4fb9cf271..4fb9cf271 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt
index 55010182f..55010182f 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt
index 3dff0c92e..3dff0c92e 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt
index c9e1e5b8c..c9e1e5b8c 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php
index df38de1b0..df38de1b0 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt
index 40de64b01..40de64b01 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/no/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt
index a33f3baa7..a33f3baa7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt
index 72dd338f3..72dd338f3 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt
index 3c9d89835..3c9d89835 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt
index da1cfeac0..da1cfeac0 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php
index 3db83b9b3..3db83b9b3 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt
index 57da2e605..57da2e605 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pl/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt
index 759ed688b..759ed688b 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt
index 9d18d58ff..9d18d58ff 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt
index a1be1c8b7..a1be1c8b7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt
index 5f3399653..5f3399653 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php
index cf7e48ea7..cf7e48ea7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt
index e5f79fb8d..e5f79fb8d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt-br/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt
index a4c2672c7..a4c2672c7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt
index 95bffc1e3..95bffc1e3 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt
index 176798454..176798454 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt
index 27985ded6..27985ded6 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php
index 8c4607922..8c4607922 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt
index 01a0460aa..01a0460aa 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/pt/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt
index 9a5c45eef..9a5c45eef 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt
index ea65fa984..ea65fa984 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt
index b7f8a4213..b7f8a4213 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt
index f3c66266d..f3c66266d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php
index 260814aed..260814aed 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt
index 6c0563444..6c0563444 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ro/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt
index 3cb4264e7..3cb4264e7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt
index 80f874e05..80f874e05 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt
index d447c4005..d447c4005 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt
index 3a3e2607d..3a3e2607d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php
index 7bfe3410d..7bfe3410d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt
index 26c0cbead..26c0cbead 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/ru/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt
index e2e106089..e2e106089 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt
index c7d6a3cc2..c7d6a3cc2 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt
index 28af5b53c..28af5b53c 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt
index 0a626de52..0a626de52 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php
index 8b309bc71..8b309bc71 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt
index 6f15331e9..6f15331e9 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sk/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt
index 985fa607e..985fa607e 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt
index 515b343e5..515b343e5 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt
index 23aeb0c3b..23aeb0c3b 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php
index e31f8ff1a..e31f8ff1a 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt
index 1aa8b7a7c..1aa8b7a7c 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sl/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt
index 1de9a50e4..1de9a50e4 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt
index 9b50365be..9b50365be 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt
index 11e22e2f5..11e22e2f5 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt
index 6c6ac9a5c..6c6ac9a5c 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php
index ab64c925a..ab64c925a 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt
index 948444245..948444245 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sr/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt
index 2ff1ee640..2ff1ee640 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt
index 5664a5906..5664a5906 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt
index f1a7f4a22..f1a7f4a22 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt
index bd13b8157..bd13b8157 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php
index cedd30d1f..cedd30d1f 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt
index e07c45277..e07c45277 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/sv/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt
index 6a5f09855..6a5f09855 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt
index 4dbc82bf9..4dbc82bf9 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt
index c36e8ddf8..c36e8ddf8 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt
index 0f6a0c3b6..0f6a0c3b6 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php
index eb88d7b91..eb88d7b91 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt
index fdf65b555..fdf65b555 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/th/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt
index beedc0be0..beedc0be0 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt
index adb8e91e4..adb8e91e4 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt
index d9f3b7125..d9f3b7125 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt
index 1edcb2ce0..1edcb2ce0 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php
index 28127d9d0..28127d9d0 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt
index 2314eb22f..2314eb22f 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/tr/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt
index bc3469714..bc3469714 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt
index 739340b19..739340b19 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt
index e359f748c..e359f748c 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt
index b658affe5..b658affe5 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php
index 7e9f9167e..7e9f9167e 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt
index 76013a9b7..76013a9b7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/uk/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt
index 6e25f1719..6e25f1719 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt
index 1a29ba349..1a29ba349 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt
index ec1c5d5ec..ec1c5d5ec 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt
index 9c499d862..9c499d862 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php
index 26c87205d..26c87205d 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt
index 1e539bd41..1e539bd41 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh-tw/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt
index fd3b1e581..fd3b1e581 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/add.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt
index dc6b7fcc7..dc6b7fcc7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/delete.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt
index 83b72dff7..83b72dff7 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/edit.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt
index 5f254be72..5f254be72 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/intro.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php
index 55044ce65..55044ce65 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/lang.php
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt
index e62a85bd0..e62a85bd0 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/lang/zh/list.txt
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js
index 875e4297b..875e4297b 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/script.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/script.js
diff --git a/vendors/dokuwiki/lib/plugins/usermanager/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css
index ff8e5d9d1..ff8e5d9d1 100644
--- a/vendors/dokuwiki/lib/plugins/usermanager/style.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/plugins/usermanager/style.css
diff --git a/vendors/dokuwiki/lib/scripts/ajax.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js
index a2a48a996..a2a48a996 100644
--- a/vendors/dokuwiki/lib/scripts/ajax.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/ajax.js
diff --git a/vendors/dokuwiki/lib/scripts/cookie.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js
index d7e6b3550..d7e6b3550 100644
--- a/vendors/dokuwiki/lib/scripts/cookie.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/cookie.js
diff --git a/vendors/dokuwiki/lib/scripts/drag.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js
index 908ab670c..908ab670c 100644
--- a/vendors/dokuwiki/lib/scripts/drag.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/drag.js
diff --git a/vendors/dokuwiki/lib/scripts/edit.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js
index 6494a925f..6494a925f 100644
--- a/vendors/dokuwiki/lib/scripts/edit.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/edit.js
diff --git a/vendors/dokuwiki/lib/scripts/events.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js
index e7526ced7..e7526ced7 100644
--- a/vendors/dokuwiki/lib/scripts/events.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/events.js
diff --git a/vendors/dokuwiki/lib/scripts/helpers.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js
index 8d4f3ea78..8d4f3ea78 100644
--- a/vendors/dokuwiki/lib/scripts/helpers.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/helpers.js
diff --git a/vendors/dokuwiki/lib/scripts/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html
index d614603ac..d614603ac 100644
--- a/vendors/dokuwiki/lib/scripts/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.html
diff --git a/vendors/dokuwiki/lib/scripts/index.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js
index 16b00c0ab..16b00c0ab 100644
--- a/vendors/dokuwiki/lib/scripts/index.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/index.js
diff --git a/vendors/dokuwiki/lib/scripts/linkwiz.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js
index 55469c158..55469c158 100644
--- a/vendors/dokuwiki/lib/scripts/linkwiz.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/linkwiz.js
diff --git a/vendors/dokuwiki/lib/scripts/media.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js
index 598fb61f4..598fb61f4 100644
--- a/vendors/dokuwiki/lib/scripts/media.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/media.js
diff --git a/vendors/dokuwiki/lib/scripts/pngbehavior.htc b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc
index d1db8e765..d1db8e765 100644
--- a/vendors/dokuwiki/lib/scripts/pngbehavior.htc
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/pngbehavior.htc
diff --git a/vendors/dokuwiki/lib/scripts/script.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js
index 491794f13..491794f13 100644
--- a/vendors/dokuwiki/lib/scripts/script.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/script.js
diff --git a/vendors/dokuwiki/lib/scripts/textselection.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js
index 39dd4cc41..39dd4cc41 100644
--- a/vendors/dokuwiki/lib/scripts/textselection.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/textselection.js
diff --git a/vendors/dokuwiki/lib/scripts/toolbar.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js
index d9633ef2d..d9633ef2d 100644
--- a/vendors/dokuwiki/lib/scripts/toolbar.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/toolbar.js
diff --git a/vendors/dokuwiki/lib/scripts/tw-sack.js b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js
index cfcbe0ea9..cfcbe0ea9 100644
--- a/vendors/dokuwiki/lib/scripts/tw-sack.js
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/scripts/tw-sack.js
diff --git a/vendors/dokuwiki/lib/styles/feed.css b/mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css
index 44b72d770..44b72d770 100644
--- a/vendors/dokuwiki/lib/styles/feed.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/feed.css
diff --git a/vendors/dokuwiki/lib/styles/index.html b/mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html
index d614603ac..d614603ac 100644
--- a/vendors/dokuwiki/lib/styles/index.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/index.html
diff --git a/vendors/dokuwiki/lib/styles/style.css b/mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css
index 814191615..814191615 100644
--- a/vendors/dokuwiki/lib/styles/style.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/styles/style.css
diff --git a/vendors/dokuwiki/lib/tpl/default/conf/default.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php
index 37a6110ec..37a6110ec 100644
--- a/vendors/dokuwiki/lib/tpl/default/conf/default.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/default.php
diff --git a/vendors/dokuwiki/lib/tpl/default/conf/metadata.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php
index f37e32c60..f37e32c60 100644
--- a/vendors/dokuwiki/lib/tpl/default/conf/metadata.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/conf/metadata.php
diff --git a/vendors/dokuwiki/lib/tpl/default/design.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css
index 2611daad0..2611daad0 100644
--- a/vendors/dokuwiki/lib/tpl/default/design.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/design.css
diff --git a/vendors/dokuwiki/lib/tpl/default/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php
index 765358568..765358568 100644
--- a/vendors/dokuwiki/lib/tpl/default/detail.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/detail.php
diff --git a/vendors/dokuwiki/lib/tpl/default/footer.html b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html
index 38aab7216..38aab7216 100644
--- a/vendors/dokuwiki/lib/tpl/default/footer.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/footer.html
diff --git a/vendors/dokuwiki/lib/tpl/default/images/bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif
index b43de48a4..b43de48a4 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/bullet.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/bullet.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif
index 5861d637f..5861d637f 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-cc.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/button-css.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png
index 706325e1c..706325e1c 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/button-css.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-css.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif
index bba284e21..bba284e21 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-donate.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/button-dw.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png
index 39d5f56a9..39d5f56a9 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/button-dw.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-dw.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/button-php.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif
index 28f329aaa..28f329aaa 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/button-php.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-php.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/button-rss.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png
index b036f7152..b036f7152 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/button-rss.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-rss.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png
index ec686442c..ec686442c 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/button-xhtml.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png
index f60be309f..f60be309f 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/buttonshadow.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/closed.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif
index 8414d4d69..8414d4d69 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/closed.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/closed.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico
index 8b9616abb..8b9616abb 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/favicon.ico
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/favicon.ico
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png
index d286beb22..d286beb22 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/inputshadow.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif
index 815ccb1b1..815ccb1b1 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/link_icon.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif
index 50a87a9a0..50a87a9a0 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/mail_icon.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/open.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif
index f5d5c7e56..f5d5c7e56 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/open.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/open.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif
index fc4b78e8c..fc4b78e8c 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/sidebar-border.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif
index 3d39c2e73..3d39c2e73 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/tocdot2.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/images/windows.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif
index 4f12acce1..4f12acce1 100644
--- a/vendors/dokuwiki/lib/tpl/default/images/windows.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/images/windows.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default/layout.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css
index ca4b52756..ca4b52756 100644
--- a/vendors/dokuwiki/lib/tpl/default/layout.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/layout.css
diff --git a/vendors/dokuwiki/lib/tpl/default/main.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php
index 11c4ea967..11c4ea967 100644
--- a/vendors/dokuwiki/lib/tpl/default/main.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main.php
diff --git a/vendors/dokuwiki/lib/tpl/default/main_index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php
index 31a7ebafb..31a7ebafb 100644
--- a/vendors/dokuwiki/lib/tpl/default/main_index.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/main_index.php
diff --git a/vendors/dokuwiki/lib/tpl/default/media.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css
index 27d0b1d33..27d0b1d33 100644
--- a/vendors/dokuwiki/lib/tpl/default/media.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.css
diff --git a/vendors/dokuwiki/lib/tpl/default/media.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php
index c464597bb..c464597bb 100644
--- a/vendors/dokuwiki/lib/tpl/default/media.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/media.php
diff --git a/vendors/dokuwiki/lib/tpl/default/mediaedit.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php
index 66d40ad5e..66d40ad5e 100644
--- a/vendors/dokuwiki/lib/tpl/default/mediaedit.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaedit.php
diff --git a/vendors/dokuwiki/lib/tpl/default/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php
index 7b7fe8675..7b7fe8675 100644
--- a/vendors/dokuwiki/lib/tpl/default/mediamanager.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediamanager.php
diff --git a/vendors/dokuwiki/lib/tpl/default/mediaref.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php
index 4651b5667..4651b5667 100644
--- a/vendors/dokuwiki/lib/tpl/default/mediaref.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/mediaref.php
diff --git a/vendors/dokuwiki/lib/tpl/default/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css
index 0491a7ba0..0491a7ba0 100644
--- a/vendors/dokuwiki/lib/tpl/default/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/print.css
diff --git a/vendors/dokuwiki/lib/tpl/default/rtl.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css
index 4678c3059..4678c3059 100644
--- a/vendors/dokuwiki/lib/tpl/default/rtl.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/rtl.css
diff --git a/vendors/dokuwiki/lib/tpl/default/sidebar.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css
index 5af3c95cb..5af3c95cb 100644
--- a/vendors/dokuwiki/lib/tpl/default/sidebar.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.css
diff --git a/vendors/dokuwiki/lib/tpl/default/sidebar.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php
index b5c157b39..b5c157b39 100644
--- a/vendors/dokuwiki/lib/tpl/default/sidebar.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar.php
diff --git a/vendors/dokuwiki/lib/tpl/default/sidebar_print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css
index 42332062b..42332062b 100644
--- a/vendors/dokuwiki/lib/tpl/default/sidebar_print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/sidebar_print.css
diff --git a/vendors/dokuwiki/lib/tpl/default/style.ini b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini
index 291cfd259..291cfd259 100644
--- a/vendors/dokuwiki/lib/tpl/default/style.ini
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/style.ini
diff --git a/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php
index 6c378c385..6c378c385 100644
--- a/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default/tplfn_sidebar.php
diff --git a/vendors/dokuwiki/lib/tpl/default2/_admin.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css
index f34d8aba3..f34d8aba3 100644
--- a/vendors/dokuwiki/lib/tpl/default2/_admin.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_admin.css
diff --git a/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css
index 060707377..060707377 100644
--- a/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/_linkwiz.css
diff --git a/vendors/dokuwiki/lib/tpl/default2/design.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css
index 4830a9e2c..4830a9e2c 100644
--- a/vendors/dokuwiki/lib/tpl/default2/design.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/design.css
diff --git a/vendors/dokuwiki/lib/tpl/default2/detail.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php
index 4f42b116e..4f42b116e 100644
--- a/vendors/dokuwiki/lib/tpl/default2/detail.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/detail.php
diff --git a/vendors/dokuwiki/lib/tpl/default2/footer.html b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html
index 38aab7216..38aab7216 100644
--- a/vendors/dokuwiki/lib/tpl/default2/footer.html
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/footer.html
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png
index ea03aec94..ea03aec94 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEB.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png
index 212444f0e..212444f0e 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/UWEBshadow.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif
index b43de48a4..b43de48a4 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/bullet.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif
index 5861d637f..5861d637f 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-cc.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/button-css.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png
index 706325e1c..706325e1c 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/button-css.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-css.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif
index bba284e21..bba284e21 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-donate.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png
index 39d5f56a9..39d5f56a9 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-dw.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif
index 19aefb08f..19aefb08f 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-php.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png
index b036f7152..b036f7152 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-rss.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png
index ec686442c..ec686442c 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/button-xhtml.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png
index f60be309f..f60be309f 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/buttonshadow.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/closed.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif
index 8414d4d69..8414d4d69 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/closed.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/closed.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico
index 8b9616abb..8b9616abb 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/favicon.ico
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png
index d286beb22..d286beb22 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/inputshadow.png
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif
index 815ccb1b1..815ccb1b1 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/link_icon.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif
index 50a87a9a0..50a87a9a0 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/mail_icon.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/open.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif
index f5d5c7e56..f5d5c7e56 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/open.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/open.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif
index 3d39c2e73..3d39c2e73 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/tocdot2.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/images/windows.gif b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif
index 4f12acce1..4f12acce1 100644
--- a/vendors/dokuwiki/lib/tpl/default2/images/windows.gif
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/images/windows.gif
Binary files differ
diff --git a/vendors/dokuwiki/lib/tpl/default2/layout.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css
index ded2d87a2..ded2d87a2 100644
--- a/vendors/dokuwiki/lib/tpl/default2/layout.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/layout.css
diff --git a/vendors/dokuwiki/lib/tpl/default2/main.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php
index be03b3be2..be03b3be2 100644
--- a/vendors/dokuwiki/lib/tpl/default2/main.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main.php
diff --git a/vendors/dokuwiki/lib/tpl/default2/main_index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php
index 976d139ce..976d139ce 100644
--- a/vendors/dokuwiki/lib/tpl/default2/main_index.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/main_index.php
diff --git a/vendors/dokuwiki/lib/tpl/default2/media.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css
index 2831c984f..2831c984f 100644
--- a/vendors/dokuwiki/lib/tpl/default2/media.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/media.css
diff --git a/vendors/dokuwiki/lib/tpl/default2/mediamanager.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php
index 7b7fe8675..7b7fe8675 100644
--- a/vendors/dokuwiki/lib/tpl/default2/mediamanager.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/mediamanager.php
diff --git a/vendors/dokuwiki/lib/tpl/default2/print.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css
index 1d6e0756f..1d6e0756f 100644
--- a/vendors/dokuwiki/lib/tpl/default2/print.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/print.css
diff --git a/vendors/dokuwiki/lib/tpl/default2/rtl.css b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css
index af3793f7d..af3793f7d 100644
--- a/vendors/dokuwiki/lib/tpl/default2/rtl.css
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/rtl.css
diff --git a/vendors/dokuwiki/lib/tpl/default2/style.ini b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini
index dfd5500fa..dfd5500fa 100644
--- a/vendors/dokuwiki/lib/tpl/default2/style.ini
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/default2/style.ini
diff --git a/vendors/dokuwiki/lib/tpl/index.php b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php
index a55081738..a55081738 100644
--- a/vendors/dokuwiki/lib/tpl/index.php
+++ b/mod/dokuwiki/vendors/dokuwiki/lib/tpl/index.php
diff --git a/views/default/dokuwiki/css.php b/mod/dokuwiki/views/default/dokuwiki/css.php
index 6753e79dc..6753e79dc 100644
--- a/views/default/dokuwiki/css.php
+++ b/mod/dokuwiki/views/default/dokuwiki/css.php
diff --git a/views/default/dokuwiki/grouppage.php b/mod/dokuwiki/views/default/dokuwiki/grouppage.php
index c095dfa2a..c095dfa2a 100644
--- a/views/default/dokuwiki/grouppage.php
+++ b/mod/dokuwiki/views/default/dokuwiki/grouppage.php
diff --git a/views/default/dokuwiki/index.php b/mod/dokuwiki/views/default/dokuwiki/index.php
index 424f1109b..424f1109b 100644
--- a/views/default/dokuwiki/index.php
+++ b/mod/dokuwiki/views/default/dokuwiki/index.php
diff --git a/views/default/dokuwiki/metatags.php b/mod/dokuwiki/views/default/dokuwiki/metatags.php
index 50cb9041b..50cb9041b 100644
--- a/views/default/dokuwiki/metatags.php
+++ b/mod/dokuwiki/views/default/dokuwiki/metatags.php
diff --git a/views/default/dokuwiki/sidebar.php b/mod/dokuwiki/views/default/dokuwiki/sidebar.php
index e9a7c89ab..e9a7c89ab 100644
--- a/views/default/dokuwiki/sidebar.php
+++ b/mod/dokuwiki/views/default/dokuwiki/sidebar.php
diff --git a/views/default/object/dokuwiki.php b/mod/dokuwiki/views/default/object/dokuwiki.php
index 12063b9da..12063b9da 100644
--- a/views/default/object/dokuwiki.php
+++ b/mod/dokuwiki/views/default/object/dokuwiki.php
diff --git a/views/default/river/dokuwiki.php b/mod/dokuwiki/views/default/river/dokuwiki.php
index 67e6f60e7..67e6f60e7 100644
--- a/views/default/river/dokuwiki.php
+++ b/mod/dokuwiki/views/default/river/dokuwiki.php
diff --git a/mod/embed/README.txt b/mod/embed/README.txt
new file mode 100644
index 000000000..51b120d96
--- /dev/null
+++ b/mod/embed/README.txt
@@ -0,0 +1,76 @@
+Embed plugin
+
+CONTENTS:
+ 1. Overview
+ 2. Adding a Tab
+ 3. Populating a Select Tab
+ 4. Populating an Upload Tab
+ 5. Other WYSIWYG Editors and Embed
+
+
+1. Overview
+ The Embed plugin is a simple way to allow users to link to or embed
+ their personal network content or third party resources in any text area.
+
+ The Embed plugin adds a menu item to the longtext menu. Clicking on this
+ link pops up a lightbox. The lightbox supports lists of content for insertion
+ and uploading new content.
+
+
+2. Adding a Tab
+ The Embed plugin uses the menu system to manage its tabs. Use
+ elgg_register_menu_item() for the embed menu to add a new tab like this:
+
+ $item = ElggMenuItem::factory(array(
+ 'name' => 'file',
+ 'text' => elgg_echo('file'),
+ 'priority' => 10,
+ 'data' => array(
+ 'options' => array(
+ 'type' => 'object',
+ 'subtype' => 'file',
+ ),
+ ),
+ ));
+ elgg_register_menu_item('embed', $item);
+
+ Parameters:
+ name: The unique name of the tab.
+ text: The text shown on the tab
+ priority: Placement of the tab.
+ data: An array of parameters for creating the tab and its content.
+ When listing content using the embed list view, pass the options for the
+ elgg_list_entities() function as 'options'.
+ When using a custom view for listing content or for uploading new
+ content, pass the view name as 'view'.
+
+ See the file plugin for examples of registering both tab types.
+
+
+3. Populating a Content Select Tab
+ Nothing should be required other than setting the options parameter array
+ when registering the tab. See the view embed/item to see how an entity is
+ rendered.
+
+ If creating a custom list, the <li> elements must have a class of .embed-item.
+ The HTML content that is inserted must use the class .embed-insert.
+
+
+4. Populating an Upload Tab
+ The view that is registered must be defined. It must include a form for
+ uploading the content. The form must .elgg-form-embed. Somewhere in the view
+ must be a hidden input field with the name embed_hidden with its value be
+ the name of the tab to forward the user to when uploading is complete.
+
+ See the view embed/file_upload/content for an example
+
+
+5. Other WYSIWYG Editors and Embed
+ Embed ships with support for the default input/longtext textarea.
+ Plugins replacing this view are expected to include JaVascript to
+ allow embed to work with the new editors.
+
+ To add custom JavaScript into the Embed plugin's elgg.embed.insert() function,
+ override the view embed/custom_insert_js. The textarea jQuery object is
+ available as the variable textArea and the content to be inserted is the
+ variable content. See the TinyMCE plugin for an example of this view. \ No newline at end of file
diff --git a/mod/embed/languages/en.php b/mod/embed/languages/en.php
new file mode 100644
index 000000000..6ae99a56f
--- /dev/null
+++ b/mod/embed/languages/en.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Embed English language strings
+ *
+ */
+
+$english = array(
+ 'embed:embed' => 'Embed',
+ 'embed:media' => 'Embed content',
+ 'embed:instructions' => 'Click on any file to embed it into your content.',
+ 'embed:upload' => 'Upload media',
+ 'embed:upload_type' => 'Upload type: ',
+
+ // messages
+ 'embed:no_upload_content' => 'No upload content!',
+ 'embed:no_section_content' => 'No items found.',
+
+ 'embed:no_sections' => 'No supported embed plugins found. Ask the site administrator to enabled a plugin with embed support.',
+);
+
+add_translation("en", $english); \ No newline at end of file
diff --git a/mod/embed/manifest.xml b/mod/embed/manifest.xml
new file mode 100644
index 000000000..81ca9194e
--- /dev/null
+++ b/mod/embed/manifest.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Embed</name>
+ <author>Core developers</author>
+ <version>1.8.1</version>
+ <category>bundled</category>
+ <category>enhancement</category>
+ <description>Allows users to easily upload and embed media into text areas.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <requires>
+ <type>plugin</type>
+ <name>file</name>
+ <version>1.8.1</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/embed/start.php b/mod/embed/start.php
new file mode 100644
index 000000000..e8a3f8c14
--- /dev/null
+++ b/mod/embed/start.php
@@ -0,0 +1,153 @@
+<?php
+/**
+ * Elgg media embed plugin
+ *
+ * @package ElggEmbed
+ */
+
+
+elgg_register_event_handler('init', 'system', 'embed_init');
+
+/**
+ * Init function
+ */
+function embed_init() {
+ elgg_extend_view('css/elgg', 'embed/css');
+
+ elgg_register_plugin_hook_handler('register', 'menu:longtext', 'embed_longtext_menu');
+ elgg_register_plugin_hook_handler('register', 'menu:embed', 'embed_select_tab', 1000);
+
+ // Page handler for the modal media embed
+ elgg_register_page_handler('embed', 'embed_page_handler');
+
+ elgg_register_js('elgg.embed', 'js/embed/embed.js', 'footer');
+}
+
+/**
+ * Add the embed menu item to the long text menu
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $items
+ * @param array $vars
+ * @return array
+ */
+function embed_longtext_menu($hook, $type, $items, $vars) {
+
+ if (elgg_get_context() == 'embed') {
+ return $items;
+ }
+
+ $url = 'embed';
+ if (elgg_get_page_owner_guid()) {
+ $url = 'embed?container_guid=' . elgg_get_page_owner_guid();
+ }
+
+ $items[] = ElggMenuItem::factory(array(
+ 'name' => 'embed',
+ 'href' => $url,
+ 'text' => elgg_echo('embed:media'),
+ 'rel' => "embed-lightbox-{$vars['id']}",
+ 'link_class' => "elgg-longtext-control elgg-lightbox embed-control embed-control-{$vars['id']}",
+ 'priority' => 10,
+ ));
+
+ elgg_load_js('lightbox');
+ elgg_load_css('lightbox');
+ elgg_load_js('jquery.form');
+ elgg_load_js('elgg.embed');
+
+ return $items;
+}
+
+/**
+ * Select the correct embed tab for display
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $items
+ * @param array $vars
+ */
+function embed_select_tab($hook, $type, $items, $vars) {
+
+ // can this ba called from page handler instead?
+ $page = get_input('page');
+ $tab_name = array_pop(explode('/', $page));
+ foreach ($items as $item) {
+ if ($item->getName() == $tab_name) {
+ $item->setSelected();
+ elgg_set_config('embed_tab', $item);
+ }
+ }
+
+ if (!elgg_get_config('embed_tab') && count($items) > 0) {
+ $items[0]->setSelected();
+ elgg_set_config('embed_tab', $items[0]);
+ }
+}
+
+/**
+ * Serves the content for the embed lightbox
+ *
+ * @param array $page URL segments
+ */
+function embed_page_handler($page) {
+
+ $container_guid = (int)get_input('container_guid');
+ if ($container_guid) {
+ elgg_set_page_owner_guid($container_guid);
+ }
+
+ echo elgg_view('embed/layout');
+
+ // exit because this is in a modal display.
+ exit;
+}
+
+/**
+ * A special listing function for selectable content
+ *
+ * This calls a custom list view for entities.
+ *
+ * @param array $entities Array of ElggEntity objects
+ * @param array $vars Display parameters
+ * @return string
+ */
+function embed_list_items($entities, $vars = array()) {
+
+ $defaults = array(
+ 'items' => $entities,
+ 'list_class' => 'elgg-list-entity',
+ );
+
+ $vars = array_merge($defaults, $vars);
+
+ return elgg_view('embed/list', $vars);
+}
+
+/**
+ * Set the options for the list of embedable content
+ *
+ * @param array $options
+ * @return array
+ */
+function embed_get_list_options($options = array()) {
+
+ $container_guids = array(elgg_get_logged_in_user_guid());
+ if (elgg_get_page_owner_guid()) {
+ $page_owner_guid = elgg_get_page_owner_guid();
+ if ($page_owner_guid != elgg_get_logged_in_user_guid()) {
+ $container_guids[] = $page_owner_guid;
+ }
+ }
+
+ $defaults = array(
+ 'limit' => 6,
+ 'container_guids' => $container_guids,
+ 'item_class' => 'embed-item',
+ );
+
+ $options = array_merge($defaults, $options);
+
+ return $options;
+}
diff --git a/mod/embed/views/default/embed/addcontentjs.php b/mod/embed/views/default/embed/addcontentjs.php
new file mode 100644
index 000000000..ffed211f5
--- /dev/null
+++ b/mod/embed/views/default/embed/addcontentjs.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Blank for compatibility.
+ * @deprecated 1.8
+ */
+
+elgg_deprecated_notice("The view 'embed/addcontentjs' has been deprecated.", 1.8);
diff --git a/mod/embed/views/default/embed/css.php b/mod/embed/views/default/embed/css.php
new file mode 100644
index 000000000..034c0fcfe
--- /dev/null
+++ b/mod/embed/views/default/embed/css.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Elgg embed CSS - standard across all themes
+ *
+ * @package embed
+ */
+?>
+.embed-wrapper {
+ width: 730px;
+ min-height: 400px;
+ margin: 20px 15px;
+}
+.embed-wrapper h2 {
+ color: #333333;
+ margin-bottom: 10px;
+}
+.embed-wrapper .elgg-item {
+ cursor: pointer;
+}
+
+/* ***************************************
+ EMBED TABBED PAGE NAVIGATION
+*************************************** */
+.embed-wrapper .elgg-tabs a:hover {
+ color: #666;
+}
+
+.embed-wrapper p {
+ color: #333;
+}
+.embed-item {
+ padding-left: 5px;
+ padding-right: 5px;
+}
+.embed-item:hover {
+ background-color: #eee;
+}
diff --git a/mod/embed/views/default/embed/item.php b/mod/embed/views/default/embed/item.php
new file mode 100644
index 000000000..3060de879
--- /dev/null
+++ b/mod/embed/views/default/embed/item.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Embeddable content list item view
+ *
+ * @uses $vars['entity'] ElggEntity object
+ */
+
+$entity = $vars['entity'];
+
+$title = $entity->title;
+if (!$title) {
+ $title = $entity->name;
+}
+
+// different entity types have different title attribute names.
+$title = isset($entity->name) ? $entity->name : $entity->title;
+// don't let it be too long
+$title = elgg_get_excerpt($title);
+
+$owner = $entity->getOwnerEntity();
+if ($owner) {
+ $author_text = elgg_echo('byline', array($owner->name));
+ $date = elgg_view_friendly_time($entity->time_created);
+ $subtitle = "$author_text $date";
+} else {
+ $subtitle = '';
+}
+
+$params = array(
+ 'title' => $title,
+ 'entity' => $entity,
+ 'subtitle' => $subtitle,
+ 'tags' => FALSE,
+);
+$body = elgg_view('object/elements/summary', $params);
+
+$image = elgg_view_entity_icon($entity, 'small', array('link_class' => 'embed-insert'));
+
+echo elgg_view_image_block($image, $body);
diff --git a/mod/embed/views/default/embed/layout.php b/mod/embed/views/default/embed/layout.php
new file mode 100644
index 000000000..1ca263037
--- /dev/null
+++ b/mod/embed/views/default/embed/layout.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Layout of embed panel loaded in lightbox
+ */
+
+$title = elgg_view_title(elgg_echo('embed:media'));
+
+$menu = elgg_view_menu('embed');
+
+$selected = elgg_get_config('embed_tab');
+if ($selected->getData('view')) {
+ $tab = elgg_view($selected->getData('view'), $vars);
+} else {
+ $tab = elgg_list_entities(
+ embed_get_list_options($selected->getData('options')),
+ 'elgg_get_entities',
+ 'embed_list_items'
+ );
+ if (!$tab) {
+ $tab = elgg_echo('embed:no_section_content');
+ }
+}
+
+$tab .= elgg_view('graphics/ajax_loader', array(
+ 'class' => 'embed-throbber mtl',
+));
+
+$container_info = elgg_view('input/hidden', array(
+ 'name' => 'embed_container_guid',
+ 'value' => elgg_get_page_owner_guid(),
+));
+
+echo <<<HTML
+<div class="embed-wrapper">
+ $title
+ $menu
+ $tab
+ $container_info
+</div>
+HTML;
diff --git a/mod/embed/views/default/embed/list.php b/mod/embed/views/default/embed/list.php
new file mode 100644
index 000000000..c13639cff
--- /dev/null
+++ b/mod/embed/views/default/embed/list.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * View a list of embeddable items
+ *
+ * @package Elgg
+ *
+ * @uses $vars['items'] Array of ElggEntity objects
+ * @uses $vars['offset'] Index of the first list item in complete list
+ * @uses $vars['limit'] Number of items per page
+ * @uses $vars['count'] Number of items in the complete list
+ *
+ * @uses $vars['list_class'] Additional CSS class for the <ul> element
+ * @uses $vars['item_class'] Additional CSS class for the <li> elements
+ */
+
+$items = $vars['items'];
+$offset = $vars['offset'];
+$limit = $vars['limit'];
+$count = $vars['count'];
+
+$offset_key = elgg_extract('offset_key', $vars, 'offset');
+
+$list_class = 'elgg-list';
+if (isset($vars['list_class'])) {
+ $list_class = "$list_class {$vars['list_class']}";
+}
+
+$item_class = 'elgg-item';
+if (isset($vars['item_class'])) {
+ $item_class = "$item_class {$vars['item_class']}";
+}
+
+$html = "";
+$nav = "";
+
+if ($count) {
+ $nav .= elgg_view('navigation/pagination', array(
+ 'offset' => $offset,
+ 'count' => $count,
+ 'limit' => $limit,
+ 'offset_key' => $offset_key,
+ ));
+}
+
+if (is_array($items) && count($items) > 0) {
+ $html .= "<ul class=\"$list_class\">";
+ foreach ($items as $item) {
+ $id = "elgg-{$item->getType()}-{$item->getGUID()}";
+ $html .= "<li id=\"$id\" class=\"$item_class\">";
+ $html .= elgg_view('embed/item', array('entity' => $item));
+ $html .= '</li>';
+ }
+ $html .= '</ul>';
+}
+
+$html .= $nav;
+
+echo $html;
diff --git a/mod/embed/views/default/js/embed/embed.php b/mod/embed/views/default/js/embed/embed.php
new file mode 100644
index 000000000..eb6153abf
--- /dev/null
+++ b/mod/embed/views/default/js/embed/embed.php
@@ -0,0 +1,134 @@
+elgg.provide('elgg.embed');
+
+elgg.embed.init = function() {
+
+ // inserts the embed content into the textarea
+ $(".embed-item").live('click', elgg.embed.insert);
+
+ // caches the current textarea id
+ $(".embed-control").live('click', function() {
+ var classes = $(this).attr('class');
+ var embedClass = classes.split(/[, ]+/).pop();
+ var textAreaId = embedClass.substr(embedClass.indexOf('embed-control-') + "embed-control-".length);
+ elgg.embed.textAreaId = textAreaId;
+ });
+
+ // special pagination helper for lightbox
+ $('.embed-wrapper .elgg-pagination a').live('click', elgg.embed.forward);
+
+ $('.embed-section').live('click', elgg.embed.forward);
+
+ $('.elgg-form-embed').live('submit', elgg.embed.submit);
+};
+
+/**
+ * Inserts data attached to an embed list item in textarea
+ *
+ * @todo generalize lightbox closing
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.embed.insert = function(event) {
+ var textAreaId = elgg.embed.textAreaId;
+ var textArea = $('#' + textAreaId);
+
+ // generalize this based on a css class attached to what should be inserted
+ var content = ' ' + $(this).find(".embed-insert").parent().html() + ' ';
+
+ // this is a temporary work-around for #3971
+ if (content.indexOf('thumbnail.php') != -1) {
+ content = content.replace('size=small', 'size=medium');
+ }
+
+ textArea.val(textArea.val() + content);
+ textArea.focus();
+
+<?php
+// See the TinyMCE plugin for an example of this view
+echo elgg_view('embed/custom_insert_js');
+?>
+
+ $.fancybox.close();
+
+ event.preventDefault();
+};
+
+/**
+ * Submit an upload form through Ajax
+ *
+ * Requires the jQuery Form Plugin. Because files cannot be uploaded with
+ * XMLHttpRequest, the plugin uses an invisible iframe. This results in the
+ * the X-Requested-With header not being set. To work around this, we are
+ * sending the header as a POST variable and Elgg's code checks for it in
+ * elgg_is_xhr().
+ *
+ * @param {Object} event
+ * @return bool
+ */
+elgg.embed.submit = function(event) {
+ $('.embed-wrapper .elgg-form-file-upload').hide();
+ $('.embed-throbber').show();
+
+ $(this).ajaxSubmit({
+ dataType : 'json',
+ data : { 'X-Requested-With' : 'XMLHttpRequest'},
+ success : function(response) {
+ if (response) {
+ if (response.system_messages) {
+ elgg.register_error(response.system_messages.error);
+ elgg.system_message(response.system_messages.success);
+ }
+ if (response.status >= 0) {
+ var forward = $('input[name=embed_forward]').val();
+ var url = elgg.normalize_url('embed/tab/' + forward);
+ url = elgg.embed.addContainerGUID(url);
+ $('.embed-wrapper').parent().load(url);
+ } else {
+ // incorrect response, presumably an error has been displayed
+ $('.embed-throbber').hide();
+ $('.embed-wrapper .elgg-form-file-upload').show();
+ }
+ }
+ },
+ error : function(xhr, status) {
+ // @todo nothing for now
+ }
+ });
+
+ // this was bubbling up the DOM causing a submission
+ event.preventDefault();
+ event.stopPropagation();
+};
+
+/**
+ * Loads content within the lightbox
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.embed.forward = function(event) {
+ // make sure container guid is passed
+ var url = $(this).attr('href');
+ url = elgg.embed.addContainerGUID(url);
+
+ $('.embed-wrapper').parent().load(url);
+ event.preventDefault();
+};
+
+/**
+ * Adds the container guid to a URL
+ *
+ * @param {string} url
+ * @return string
+ */
+elgg.embed.addContainerGUID = function(url) {
+ if (url.indexOf('container_guid=') == -1) {
+ var guid = $('input[name=embed_container_guid]').val();
+ return url + '?container_guid=' + guid;
+ } else {
+ return url;
+ }
+};
+
+elgg.register_hook_handler('init', 'system', elgg.embed.init);
diff --git a/mod/embed/views/default/navigation/menu/embed.php b/mod/embed/views/default/navigation/menu/embed.php
new file mode 100644
index 000000000..bca673f59
--- /dev/null
+++ b/mod/embed/views/default/navigation/menu/embed.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Embed tabs
+ *
+ * @uses $vars['menu']['default']
+ */
+
+$tabs = array();
+foreach ($vars['menu']['default'] as $menu_item) {
+ $tabs[] = array(
+ 'title' => $menu_item->getText(),
+ 'url' => 'embed/tab/' . $menu_item->getName(),
+ 'link_class' => 'embed-section',
+ 'selected' => $menu_item->getSelected(),
+ );
+}
+
+echo elgg_view('navigation/tabs', array('tabs' => $tabs));
diff --git a/mod/externalpages/actions/edit.php b/mod/externalpages/actions/edit.php
new file mode 100644
index 000000000..184aa3d82
--- /dev/null
+++ b/mod/externalpages/actions/edit.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Elgg external pages: create or update
+ *
+ */
+
+// Get input data and don't filter the content
+$contents = get_input('expagescontent', '', false);
+$type = get_input('content_type');
+$guid = get_input('guid');
+
+if ($guid) {
+ // update
+ $expages = get_entity($guid);
+ if (!$expages) {
+ register_error(elgg_echo("expages:error"));
+ forward(REFERER);
+ }
+} else {
+ // create
+ $expages = new ElggObject();
+ $expages->subtype = $type;
+}
+
+$expages->owner_guid = elgg_get_logged_in_user_guid();
+$expages->access_id = ACCESS_PUBLIC;
+$expages->title = $type;
+$expages->description = $contents;
+if (!$expages->save()) {
+ register_error(elgg_echo("expages:error"));
+ forward(REFERER);
+}
+
+system_message(elgg_echo("expages:posted"));
+forward(REFERER);
diff --git a/mod/externalpages/languages/en.php b/mod/externalpages/languages/en.php
new file mode 100644
index 000000000..5f0f4ad7b
--- /dev/null
+++ b/mod/externalpages/languages/en.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * External pages English language file
+ */
+
+$english = array(
+
+ /**
+ * Menu items and titles
+ */
+ 'expages' => "Site pages",
+ 'admin:appearance:expages' => "Site Pages",
+ 'expages:about' => "About",
+ 'expages:terms' => "Terms",
+ 'expages:privacy' => "Privacy",
+ 'expages:contact' => "Contact",
+
+ 'expages:notset' => "This page has not been set up yet.",
+
+ /**
+ * Status messages
+ */
+ 'expages:posted' => "Your page was successfully updated.",
+ 'expages:error' => "Unable to save this page.",
+);
+
+add_translation("en", $english);
diff --git a/mod/externalpages/manifest.xml b/mod/externalpages/manifest.xml
new file mode 100644
index 000000000..f2aef09f3
--- /dev/null
+++ b/mod/externalpages/manifest.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Site Pages</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <description>Create simple web pages for about, contact, privacy, and terms.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/externalpages/start.php b/mod/externalpages/start.php
new file mode 100644
index 000000000..74da7f828
--- /dev/null
+++ b/mod/externalpages/start.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Plugin for creating web pages for your site
+ */
+
+elgg_register_event_handler('init', 'system', 'expages_init');
+
+function expages_init() {
+
+ // Register a page handler, so we can have nice URLs
+ elgg_register_page_handler('about', 'expages_page_handler');
+ elgg_register_page_handler('terms', 'expages_page_handler');
+ elgg_register_page_handler('privacy', 'expages_page_handler');
+ elgg_register_page_handler('expages', 'expages_page_handler');
+
+ // Register public external pages
+ elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'expages_public');
+
+ // add a menu item for the admin edit page
+ elgg_register_admin_menu_item('configure', 'expages', 'appearance');
+
+ // add footer links
+ expages_setup_footer_menu();
+
+ // register action
+ $actions_base = elgg_get_plugins_path() . 'externalpages/actions';
+ elgg_register_action("expages/edit", "$actions_base/edit.php", 'admin');
+}
+
+/**
+ * Extend the public pages range
+ *
+ */
+function expages_public($hook, $handler, $return, $params){
+ $pages = array('about', 'terms', 'privacy');
+ return array_merge($pages, $return);
+}
+
+/**
+ * Setup the links to site pages
+ */
+function expages_setup_footer_menu() {
+ $pages = array('about', 'terms', 'privacy');
+ foreach ($pages as $page) {
+ $url = "$page";
+ $wg_item = new ElggMenuItem($page, elgg_echo("expages:$page"), $url);
+ elgg_register_menu_item('walled_garden', $wg_item);
+
+ $footer_item = clone $wg_item;
+ elgg_register_menu_item('footer', $footer_item);
+ }
+}
+
+/**
+ * External pages page handler
+ *
+ * @param array $page URL segements
+ * @param string $handler Handler identifier
+ * @return bool
+ */
+function expages_page_handler($page, $handler) {
+ if ($handler == 'expages') {
+ expages_url_forwarder($page[1]);
+ }
+ $type = strtolower($handler);
+
+ $title = elgg_echo("expages:$type");
+ $content = elgg_view_title($title);
+
+ $object = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => $type,
+ 'limit' => 1,
+ ));
+ if ($object) {
+ $content .= elgg_view('output/longtext', array('value' => $object[0]->description));
+ } else {
+ $content .= elgg_echo("expages:notset");
+ }
+ $content = elgg_view('expages/wrapper', array('content' => $content));
+
+ if (elgg_is_logged_in() || !elgg_get_config('walled_garden')) {
+ $body = elgg_view_layout('one_sidebar', array('content' => $content));
+ echo elgg_view_page($title, $body);
+ } else {
+ elgg_load_css('elgg.walled_garden');
+ $body = elgg_view_layout('walled_garden', array('content' => $content));
+ echo elgg_view_page($title, $body, 'walled_garden');
+ }
+ return true;
+}
+
+/**
+ * Forward to the new style of URLs
+ *
+ * @param string $page
+ */
+function expages_url_forwarder($page) {
+ global $CONFIG;
+ $url = "{$CONFIG->wwwroot}{$page}";
+ forward($url);
+}
diff --git a/mod/externalpages/views/default/admin/appearance/expages.php b/mod/externalpages/views/default/admin/appearance/expages.php
new file mode 100644
index 000000000..6a5a521a5
--- /dev/null
+++ b/mod/externalpages/views/default/admin/appearance/expages.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Admin section for editing external pages
+ */
+
+$type = get_input('type', 'about');
+
+echo elgg_view('expages/menu', array('type' => $type));
+
+echo elgg_view_form('expages/edit', array('class' => 'elgg-form-settings'), array('type' => $type));
diff --git a/mod/externalpages/views/default/expages/menu.php b/mod/externalpages/views/default/expages/menu.php
new file mode 100644
index 000000000..831be9125
--- /dev/null
+++ b/mod/externalpages/views/default/expages/menu.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * External pages menu
+ *
+ * @uses $vars['type']
+ */
+
+$type = $vars['type'];
+
+//set the url
+$url = $vars['url'] . "admin/site/expages?type=";
+
+$pages = array('about', 'terms', 'privacy');
+$tabs = array();
+foreach ($pages as $page) {
+ $tabs[] = array(
+ 'title' => elgg_echo("expages:$page"),
+ 'url' => "admin/appearance/expages?type=$page",
+ 'selected' => $page == $type,
+ );
+}
+
+echo elgg_view('navigation/tabs', array('tabs' => $tabs, 'class' => 'elgg-form-settings'));
diff --git a/mod/externalpages/views/default/expages/wrapper.php b/mod/externalpages/views/default/expages/wrapper.php
new file mode 100644
index 000000000..c579da1ba
--- /dev/null
+++ b/mod/externalpages/views/default/expages/wrapper.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Wrapper for site pages content area
+ *
+ * @uses $vars['content']
+ */
+
+echo $vars['content'];
+
+echo '<div class="mtm">';
+echo elgg_view('output/url', array(
+ 'text' => elgg_echo('back'),
+ 'href' => $_SERVER['HTTP_REFERER'],
+ 'class' => 'float-alt'
+));
+echo '</div>';
diff --git a/mod/externalpages/views/default/forms/expages/edit.php b/mod/externalpages/views/default/forms/expages/edit.php
new file mode 100644
index 000000000..a15f2a7aa
--- /dev/null
+++ b/mod/externalpages/views/default/forms/expages/edit.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Edit form body for external pages
+ *
+ * @uses $vars['type']
+ *
+ */
+
+$type = $vars['type'];
+
+//grab the required entity
+$page_contents = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => $type,
+ 'limit' => 1,
+));
+
+if ($page_contents) {
+ $description = $page_contents[0]->description;
+ $guid = $page_contents[0]->guid;
+} else {
+ $description = "";
+ $guid = 0;
+}
+
+// set the required form variables
+$input_area = elgg_view('input/longtext', array(
+ 'name' => 'expagescontent',
+ 'value' => $description,
+));
+$submit_input = elgg_view('input/submit', array(
+ 'name' => 'submit',
+ 'value' => elgg_echo('save'),
+));
+$hidden_type = elgg_view('input/hidden', array(
+ 'name' => 'content_type',
+ 'value' => $type,
+));
+$hidden_guid = elgg_view('input/hidden', array(
+ 'name' => 'guid',
+ 'value' => $guid,
+));
+
+$external_page_title = elgg_echo("expages:$type");
+
+//construct the form
+echo <<<EOT
+<div class="mtm">
+ <label>$external_page_title</label>
+ $input_area
+</div>
+<div class="elgg-foot">
+$hidden_guid
+$hidden_type
+$submit_input
+</div>
+EOT;
+
diff --git a/mod/file/actions/file/delete.php b/mod/file/actions/file/delete.php
new file mode 100644
index 000000000..72585aa36
--- /dev/null
+++ b/mod/file/actions/file/delete.php
@@ -0,0 +1,33 @@
+<?php
+/**
+* Elgg file delete
+*
+* @package ElggFile
+*/
+
+$guid = (int) get_input('guid');
+
+$file = new FilePluginFile($guid);
+if (!$file->guid) {
+ register_error(elgg_echo("file:deletefailed"));
+ forward('file/all');
+}
+
+if (!$file->canEdit()) {
+ register_error(elgg_echo("file:deletefailed"));
+ forward($file->getURL());
+}
+
+$container = $file->getContainerEntity();
+
+if (!$file->delete()) {
+ register_error(elgg_echo("file:deletefailed"));
+} else {
+ system_message(elgg_echo("file:deleted"));
+}
+
+if (elgg_instanceof($container, 'group')) {
+ forward("file/group/$container->guid/all");
+} else {
+ forward("file/owner/$container->username");
+}
diff --git a/mod/file/actions/file/download.php b/mod/file/actions/file/download.php
new file mode 100644
index 000000000..d6abb8398
--- /dev/null
+++ b/mod/file/actions/file/download.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Elgg file browser download action.
+ *
+ * @package ElggFile
+ */
+
+// @todo this is here for backwards compatibility (first version of embed plugin?)
+$download_page_handler = elgg_get_plugins_path() . 'file/download.php';
+
+include $download_page_handler;
diff --git a/mod/file/actions/file/upload.php b/mod/file/actions/file/upload.php
new file mode 100644
index 000000000..d6dce2528
--- /dev/null
+++ b/mod/file/actions/file/upload.php
@@ -0,0 +1,207 @@
+<?php
+/**
+ * Elgg file uploader/edit action
+ *
+ * @package ElggFile
+ */
+
+// Get variables
+$title = htmlspecialchars(get_input('title', '', false), ENT_QUOTES, 'UTF-8');
+$desc = get_input("description");
+$access_id = (int) get_input("access_id");
+$container_guid = (int) get_input('container_guid', 0);
+$guid = (int) get_input('file_guid');
+$tags = get_input("tags");
+
+if ($container_guid == 0) {
+ $container_guid = elgg_get_logged_in_user_guid();
+}
+
+elgg_make_sticky_form('file');
+
+// check if upload failed
+if (!empty($_FILES['upload']['name']) && $_FILES['upload']['error'] != 0) {
+ register_error(elgg_echo('file:cannotload'));
+ forward(REFERER);
+}
+
+// check whether this is a new file or an edit
+$new_file = true;
+if ($guid > 0) {
+ $new_file = false;
+}
+
+if ($new_file) {
+ // must have a file if a new file upload
+ if (empty($_FILES['upload']['name'])) {
+ $error = elgg_echo('file:nofile');
+ register_error($error);
+ forward(REFERER);
+ }
+
+ $file = new FilePluginFile();
+ $file->subtype = "file";
+
+ // if no title on new upload, grab filename
+ if (empty($title)) {
+ $title = htmlspecialchars($_FILES['upload']['name'], ENT_QUOTES, 'UTF-8');
+ }
+
+} else {
+ // load original file object
+ $file = new FilePluginFile($guid);
+ if (!$file) {
+ register_error(elgg_echo('file:cannotload'));
+ forward(REFERER);
+ }
+
+ // user must be able to edit file
+ if (!$file->canEdit()) {
+ register_error(elgg_echo('file:noaccess'));
+ forward(REFERER);
+ }
+
+ if (!$title) {
+ // user blanked title, but we need one
+ $title = $file->title;
+ }
+}
+
+$file->title = $title;
+$file->description = $desc;
+$file->access_id = $access_id;
+$file->container_guid = $container_guid;
+
+$tags = explode(",", $tags);
+$file->tags = $tags;
+
+// we have a file upload, so process it
+if (isset($_FILES['upload']['name']) && !empty($_FILES['upload']['name'])) {
+
+ $prefix = "file/";
+
+ // if previous file, delete it
+ if ($new_file == false) {
+ $filename = $file->getFilenameOnFilestore();
+ if (file_exists($filename)) {
+ unlink($filename);
+ }
+
+ // use same filename on the disk - ensures thumbnails are overwritten
+ $filestorename = $file->getFilename();
+ $filestorename = elgg_substr($filestorename, elgg_strlen($prefix));
+ } else {
+ $filestorename = elgg_strtolower(time().$_FILES['upload']['name']);
+ }
+
+ $file->setFilename($prefix . $filestorename);
+ $mime_type = ElggFile::detectMimeType($_FILES['upload']['tmp_name'], $_FILES['upload']['type']);
+
+ // hack for Microsoft zipped formats
+ $info = pathinfo($_FILES['upload']['name']);
+ $office_formats = array('docx', 'xlsx', 'pptx');
+ if ($mime_type == "application/zip" && in_array($info['extension'], $office_formats)) {
+ switch ($info['extension']) {
+ case 'docx':
+ $mime_type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
+ break;
+ case 'xlsx':
+ $mime_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+ break;
+ case 'pptx':
+ $mime_type = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
+ break;
+ }
+ }
+
+ // check for bad ppt detection
+ if ($mime_type == "application/vnd.ms-office" && $info['extension'] == "ppt") {
+ $mime_type = "application/vnd.ms-powerpoint";
+ }
+
+ $file->setMimeType($mime_type);
+ $file->originalfilename = $_FILES['upload']['name'];
+ $file->simpletype = file_get_simple_type($mime_type);
+
+ // Open the file to guarantee the directory exists
+ $file->open("write");
+ $file->close();
+ move_uploaded_file($_FILES['upload']['tmp_name'], $file->getFilenameOnFilestore());
+
+ $guid = $file->save();
+
+ // if image, we need to create thumbnails (this should be moved into a function)
+ if ($guid && $file->simpletype == "image") {
+ $file->icontime = time();
+
+ $thumbnail = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 60, 60, true);
+ if ($thumbnail) {
+ $thumb = new ElggFile();
+ $thumb->setMimeType($_FILES['upload']['type']);
+
+ $thumb->setFilename($prefix."thumb".$filestorename);
+ $thumb->open("write");
+ $thumb->write($thumbnail);
+ $thumb->close();
+
+ $file->thumbnail = $prefix."thumb".$filestorename;
+ unset($thumbnail);
+ }
+
+ $thumbsmall = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 153, 153, true);
+ if ($thumbsmall) {
+ $thumb->setFilename($prefix."smallthumb".$filestorename);
+ $thumb->open("write");
+ $thumb->write($thumbsmall);
+ $thumb->close();
+ $file->smallthumb = $prefix."smallthumb".$filestorename;
+ unset($thumbsmall);
+ }
+
+ $thumblarge = get_resized_image_from_existing_file($file->getFilenameOnFilestore(), 600, 600, false);
+ if ($thumblarge) {
+ $thumb->setFilename($prefix."largethumb".$filestorename);
+ $thumb->open("write");
+ $thumb->write($thumblarge);
+ $thumb->close();
+ $file->largethumb = $prefix."largethumb".$filestorename;
+ unset($thumblarge);
+ }
+ }
+} else {
+ // not saving a file but still need to save the entity to push attributes to database
+ $file->save();
+}
+
+// file saved so clear sticky form
+elgg_clear_sticky_form('file');
+
+
+// handle results differently for new files and file updates
+if ($new_file) {
+ if ($guid) {
+ $message = elgg_echo("file:saved");
+ system_message($message);
+ add_to_river('river/object/file/create', 'create', elgg_get_logged_in_user_guid(), $file->guid);
+ } else {
+ // failed to save file object - nothing we can do about this
+ $error = elgg_echo("file:uploadfailed");
+ register_error($error);
+ }
+
+ $container = get_entity($container_guid);
+ if (elgg_instanceof($container, 'group')) {
+ forward("file/group/$container->guid/all");
+ } else {
+ forward("file/owner/$container->username");
+ }
+
+} else {
+ if ($guid) {
+ system_message(elgg_echo("file:saved"));
+ } else {
+ register_error(elgg_echo("file:uploadfailed"));
+ }
+
+ forward($file->getURL());
+}
diff --git a/mod/file/classes/FilePluginFile.php b/mod/file/classes/FilePluginFile.php
new file mode 100644
index 000000000..edf914231
--- /dev/null
+++ b/mod/file/classes/FilePluginFile.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * Override the ElggFile
+ */
+class FilePluginFile extends ElggFile {
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['subtype'] = "file";
+ }
+
+ public function __construct($guid = null) {
+ parent::__construct($guid);
+ }
+
+ public function delete() {
+
+ $thumbnails = array($this->thumbnail, $this->smallthumb, $this->largethumb);
+ foreach ($thumbnails as $thumbnail) {
+ if ($thumbnail) {
+ $delfile = new ElggFile();
+ $delfile->owner_guid = $this->owner_guid;
+ $delfile->setFilename($thumbnail);
+ $delfile->delete();
+ }
+ }
+
+ return parent::delete();
+ }
+}
diff --git a/mod/file/download.php b/mod/file/download.php
new file mode 100644
index 000000000..b2acdffec
--- /dev/null
+++ b/mod/file/download.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg file download.
+ *
+ * @package ElggFile
+ */
+require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+
+// Get the guid
+$file_guid = get_input("file_guid");
+
+forward("file/download/$file_guid");
diff --git a/mod/file/graphics/icons/application.gif b/mod/file/graphics/icons/application.gif
new file mode 100644
index 000000000..bfba76a97
--- /dev/null
+++ b/mod/file/graphics/icons/application.gif
Binary files differ
diff --git a/mod/file/graphics/icons/application_lrg.gif b/mod/file/graphics/icons/application_lrg.gif
new file mode 100644
index 000000000..65f8eadb4
--- /dev/null
+++ b/mod/file/graphics/icons/application_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/archive.gif b/mod/file/graphics/icons/archive.gif
new file mode 100644
index 000000000..2213cdadd
--- /dev/null
+++ b/mod/file/graphics/icons/archive.gif
Binary files differ
diff --git a/mod/file/graphics/icons/archive_lrg.gif b/mod/file/graphics/icons/archive_lrg.gif
new file mode 100644
index 000000000..6e3df3fd4
--- /dev/null
+++ b/mod/file/graphics/icons/archive_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/excel.gif b/mod/file/graphics/icons/excel.gif
new file mode 100644
index 000000000..ecd1d57d2
--- /dev/null
+++ b/mod/file/graphics/icons/excel.gif
Binary files differ
diff --git a/mod/file/graphics/icons/excel_lrg.gif b/mod/file/graphics/icons/excel_lrg.gif
new file mode 100644
index 000000000..84d1375d5
--- /dev/null
+++ b/mod/file/graphics/icons/excel_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/general.gif b/mod/file/graphics/icons/general.gif
new file mode 100644
index 000000000..20958b9a4
--- /dev/null
+++ b/mod/file/graphics/icons/general.gif
Binary files differ
diff --git a/mod/file/graphics/icons/general_lrg.gif b/mod/file/graphics/icons/general_lrg.gif
new file mode 100644
index 000000000..3458915e5
--- /dev/null
+++ b/mod/file/graphics/icons/general_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/music.gif b/mod/file/graphics/icons/music.gif
new file mode 100644
index 000000000..5e9df08bc
--- /dev/null
+++ b/mod/file/graphics/icons/music.gif
Binary files differ
diff --git a/mod/file/graphics/icons/music_lrg.gif b/mod/file/graphics/icons/music_lrg.gif
new file mode 100644
index 000000000..1c0792cc3
--- /dev/null
+++ b/mod/file/graphics/icons/music_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/openoffice.gif b/mod/file/graphics/icons/openoffice.gif
new file mode 100644
index 000000000..053ad5bb5
--- /dev/null
+++ b/mod/file/graphics/icons/openoffice.gif
Binary files differ
diff --git a/mod/file/graphics/icons/openoffice_lrg.gif b/mod/file/graphics/icons/openoffice_lrg.gif
new file mode 100644
index 000000000..da28607fa
--- /dev/null
+++ b/mod/file/graphics/icons/openoffice_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/pages.gif b/mod/file/graphics/icons/pages.gif
new file mode 100644
index 000000000..7efcb7278
--- /dev/null
+++ b/mod/file/graphics/icons/pages.gif
Binary files differ
diff --git a/mod/file/graphics/icons/pages_lrg.gif b/mod/file/graphics/icons/pages_lrg.gif
new file mode 100644
index 000000000..234a52672
--- /dev/null
+++ b/mod/file/graphics/icons/pages_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/pdf.gif b/mod/file/graphics/icons/pdf.gif
new file mode 100644
index 000000000..94362a4f0
--- /dev/null
+++ b/mod/file/graphics/icons/pdf.gif
Binary files differ
diff --git a/mod/file/graphics/icons/pdf_lrg.gif b/mod/file/graphics/icons/pdf_lrg.gif
new file mode 100644
index 000000000..aff869d04
--- /dev/null
+++ b/mod/file/graphics/icons/pdf_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/ppt.gif b/mod/file/graphics/icons/ppt.gif
new file mode 100644
index 000000000..88ab26d5c
--- /dev/null
+++ b/mod/file/graphics/icons/ppt.gif
Binary files differ
diff --git a/mod/file/graphics/icons/ppt_lrg.gif b/mod/file/graphics/icons/ppt_lrg.gif
new file mode 100644
index 000000000..075590fd8
--- /dev/null
+++ b/mod/file/graphics/icons/ppt_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/text.gif b/mod/file/graphics/icons/text.gif
new file mode 100644
index 000000000..897aa77f9
--- /dev/null
+++ b/mod/file/graphics/icons/text.gif
Binary files differ
diff --git a/mod/file/graphics/icons/text_lrg.gif b/mod/file/graphics/icons/text_lrg.gif
new file mode 100644
index 000000000..d42ea4de1
--- /dev/null
+++ b/mod/file/graphics/icons/text_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/vcard.gif b/mod/file/graphics/icons/vcard.gif
new file mode 100644
index 000000000..202df68dd
--- /dev/null
+++ b/mod/file/graphics/icons/vcard.gif
Binary files differ
diff --git a/mod/file/graphics/icons/vcard_lrg.gif b/mod/file/graphics/icons/vcard_lrg.gif
new file mode 100644
index 000000000..68ced88d2
--- /dev/null
+++ b/mod/file/graphics/icons/vcard_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/video.gif b/mod/file/graphics/icons/video.gif
new file mode 100644
index 000000000..56aca7589
--- /dev/null
+++ b/mod/file/graphics/icons/video.gif
Binary files differ
diff --git a/mod/file/graphics/icons/video_lrg.gif b/mod/file/graphics/icons/video_lrg.gif
new file mode 100644
index 000000000..69cc706d9
--- /dev/null
+++ b/mod/file/graphics/icons/video_lrg.gif
Binary files differ
diff --git a/mod/file/graphics/icons/word.gif b/mod/file/graphics/icons/word.gif
new file mode 100644
index 000000000..6f7dff340
--- /dev/null
+++ b/mod/file/graphics/icons/word.gif
Binary files differ
diff --git a/mod/file/graphics/icons/word_lrg.gif b/mod/file/graphics/icons/word_lrg.gif
new file mode 100644
index 000000000..4c39108de
--- /dev/null
+++ b/mod/file/graphics/icons/word_lrg.gif
Binary files differ
diff --git a/mod/file/languages/en.php b/mod/file/languages/en.php
new file mode 100644
index 000000000..b3344cb43
--- /dev/null
+++ b/mod/file/languages/en.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ * Elgg file plugin language pack
+ *
+ * @package ElggFile
+ */
+
+$english = array(
+
+ /**
+ * Menu items and titles
+ */
+ 'file' => "Files",
+ 'file:user' => "%s's files",
+ 'file:friends' => "Friends' files",
+ 'file:all' => "All site files",
+ 'file:edit' => "Edit file",
+ 'file:more' => "More files",
+ 'file:list' => "list view",
+ 'file:group' => "Group files",
+ 'file:gallery' => "gallery view",
+ 'file:gallery_list' => "Gallery or list view",
+ 'file:num_files' => "Number of files to display",
+ 'file:user:gallery'=>'View %s gallery',
+ 'file:upload' => "Upload a file",
+ 'file:replace' => 'Replace file content (leave blank to not change file)',
+ 'file:list:title' => "%s's %s %s",
+ 'file:title:friends' => "Friends'",
+
+ 'file:add' => 'Upload a file',
+
+ 'file:file' => "File",
+ 'file:title' => "Title",
+ 'file:desc' => "Description",
+ 'file:tags' => "Tags",
+
+ 'file:list:list' => 'Switch to the list view',
+ 'file:list:gallery' => 'Switch to the gallery view',
+
+ 'file:types' => "Uploaded file types",
+
+ 'file:type:' => 'Files',
+ 'file:type:all' => "All files",
+ 'file:type:video' => "Videos",
+ 'file:type:document' => "Documents",
+ 'file:type:audio' => "Audio",
+ 'file:type:image' => "Pictures",
+ 'file:type:general' => "General",
+
+ 'file:user:type:video' => "%s's videos",
+ 'file:user:type:document' => "%s's documents",
+ 'file:user:type:audio' => "%s's audio",
+ 'file:user:type:image' => "%s's pictures",
+ 'file:user:type:general' => "%s's general files",
+
+ 'file:friends:type:video' => "Your friends' videos",
+ 'file:friends:type:document' => "Your friends' documents",
+ 'file:friends:type:audio' => "Your friends' audio",
+ 'file:friends:type:image' => "Your friends' pictures",
+ 'file:friends:type:general' => "Your friends' general files",
+
+ 'file:widget' => "File widget",
+ 'file:widget:description' => "Showcase your latest files",
+
+ 'groups:enablefiles' => 'Enable group files',
+
+ 'file:download' => "Download this",
+
+ 'file:delete:confirm' => "Are you sure you want to delete this file?",
+
+ 'file:tagcloud' => "Tag cloud",
+
+ 'file:display:number' => "Number of files to display",
+
+ 'river:create:object:file' => '%s uploaded the file %s',
+ 'river:comment:object:file' => '%s commented on the file %s',
+
+ 'item:object:file' => 'Files',
+
+ 'file:newupload' => 'A new file has been uploaded',
+ 'file:notification' =>
+'%s uploaded a new file:
+
+%s
+%s
+
+View and comment on the new file:
+%s
+',
+
+ /**
+ * Embed media
+ **/
+
+ 'file:embed' => "Embed media",
+ 'file:embedall' => "All",
+
+ /**
+ * Status messages
+ */
+
+ 'file:saved' => "Your file was successfully saved.",
+ 'file:deleted' => "Your file was successfully deleted.",
+
+ /**
+ * Error messages
+ */
+
+ 'file:none' => "No files.",
+ 'file:uploadfailed' => "Sorry; we could not save your file.",
+ 'file:downloadfailed' => "Sorry; this file is not available at this time.",
+ 'file:deletefailed' => "Your file could not be deleted at this time.",
+ 'file:noaccess' => "You do not have permissions to change this file",
+ 'file:cannotload' => "There was an error uploading the file",
+ 'file:nofile' => "You must select a file",
+);
+
+add_translation("en", $english); \ No newline at end of file
diff --git a/mod/file/lib/file.php b/mod/file/lib/file.php
new file mode 100644
index 000000000..6f94772e7
--- /dev/null
+++ b/mod/file/lib/file.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * File helper functions
+ *
+ * @package ElggFile
+ */
+
+/**
+ * Prepare the upload/edit form variables
+ *
+ * @param FilePluginFile $file
+ * @return array
+ */
+function file_prepare_form_vars($file = null) {
+
+ // input names => defaults
+ $values = array(
+ 'title' => '',
+ 'description' => '',
+ 'access_id' => ACCESS_DEFAULT,
+ 'tags' => '',
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'guid' => null,
+ 'entity' => $file,
+ );
+
+ if ($file) {
+ foreach (array_keys($values) as $field) {
+ if (isset($file->$field)) {
+ $values[$field] = $file->$field;
+ }
+ }
+ }
+
+ if (elgg_is_sticky_form('file')) {
+ $sticky_values = elgg_get_sticky_values('file');
+ foreach ($sticky_values as $key => $value) {
+ $values[$key] = $value;
+ }
+ }
+
+ elgg_clear_sticky_form('file');
+
+ return $values;
+}
diff --git a/mod/file/manifest.xml b/mod/file/manifest.xml
new file mode 100644
index 000000000..26282a8e3
--- /dev/null
+++ b/mod/file/manifest.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>File</name>
+ <author>Core developers</author>
+ <version>1.8.1</version>
+ <category>bundled</category>
+ <category>content</category>
+ <category>widget</category>
+ <description>File browser plugin</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/file/pages/file/download.php b/mod/file/pages/file/download.php
new file mode 100644
index 000000000..76c1f1272
--- /dev/null
+++ b/mod/file/pages/file/download.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Elgg file download.
+ *
+ * @package ElggFile
+ */
+
+// Get the guid
+$file_guid = get_input("guid");
+
+// Get the file
+$file = get_entity($file_guid);
+if (!$file) {
+ register_error(elgg_echo("file:downloadfailed"));
+ forward();
+}
+
+$mime = $file->getMimeType();
+if (!$mime) {
+ $mime = "application/octet-stream";
+}
+
+$filename = $file->originalfilename;
+
+// fix for IE https issue
+header("Pragma: public");
+
+header("Content-type: $mime");
+if (strpos($mime, "image/") !== false || $mime == "application/pdf") {
+ header("Content-Disposition: inline; filename=\"$filename\"");
+} else {
+ header("Content-Disposition: attachment; filename=\"$filename\"");
+}
+
+ob_clean();
+flush();
+readfile($file->getFilenameOnFilestore());
+exit;
diff --git a/mod/file/pages/file/edit.php b/mod/file/pages/file/edit.php
new file mode 100644
index 000000000..b396c6e9b
--- /dev/null
+++ b/mod/file/pages/file/edit.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Edit a file
+ *
+ * @package ElggFile
+ */
+
+elgg_load_library('elgg:file');
+
+gatekeeper();
+
+$file_guid = (int) get_input('guid');
+$file = new FilePluginFile($file_guid);
+if (!$file) {
+ forward();
+}
+if (!$file->canEdit()) {
+ forward();
+}
+
+$title = elgg_echo('file:edit');
+
+elgg_push_breadcrumb(elgg_echo('file'), "file/all");
+elgg_push_breadcrumb($file->title, $file->getURL());
+elgg_push_breadcrumb($title);
+
+elgg_set_page_owner_guid($file->getContainerGUID());
+
+$form_vars = array('enctype' => 'multipart/form-data');
+$body_vars = file_prepare_form_vars($file);
+
+$content = elgg_view_form('file/upload', $form_vars, $body_vars);
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/file/pages/file/friends.php b/mod/file/pages/file/friends.php
new file mode 100644
index 000000000..f504bdc1f
--- /dev/null
+++ b/mod/file/pages/file/friends.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Friends Files
+ *
+ * @package ElggFile
+ */
+
+$owner = elgg_get_page_owner_entity();
+if (!$owner) {
+ forward('file/all');
+}
+
+elgg_push_breadcrumb(elgg_echo('file'), "file/all");
+elgg_push_breadcrumb($owner->name, "file/owner/$owner->username");
+elgg_push_breadcrumb(elgg_echo('friends'));
+
+elgg_register_title_button();
+
+$title = elgg_echo("file:friends");
+
+// offset is grabbed in list_user_friends_objects
+$content = list_user_friends_objects($owner->guid, 'file', 10, false);
+if (!$content) {
+ $content = elgg_echo("file:none");
+}
+
+$sidebar = file_get_type_cloud($owner->guid, true);
+
+$body = elgg_view_layout('content', array(
+ 'filter_context' => 'friends',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => $sidebar,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/file/pages/file/owner.php b/mod/file/pages/file/owner.php
new file mode 100644
index 000000000..fb87af1b2
--- /dev/null
+++ b/mod/file/pages/file/owner.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Individual's or group's files
+ *
+ * @package ElggFile
+ */
+
+// access check for closed groups
+group_gatekeeper();
+
+$owner = elgg_get_page_owner_entity();
+if (!$owner) {
+ forward('file/all');
+}
+
+elgg_push_breadcrumb(elgg_echo('file'), "file/all");
+elgg_push_breadcrumb($owner->name);
+
+elgg_register_title_button();
+
+$params = array();
+
+if ($owner->guid == elgg_get_logged_in_user_guid()) {
+ // user looking at own files
+ $params['filter_context'] = 'mine';
+} else if (elgg_instanceof($owner, 'user')) {
+ // someone else's files
+ // do not show select a tab when viewing someone else's posts
+ $params['filter_context'] = 'none';
+} else {
+ // group files
+ $params['filter'] = '';
+}
+
+$title = elgg_echo("file:user", array($owner->name));
+
+// List files
+$content = elgg_list_entities(array(
+ 'types' => 'object',
+ 'subtypes' => 'file',
+ 'container_guid' => $owner->guid,
+ 'limit' => 10,
+ 'full_view' => FALSE,
+));
+if (!$content) {
+ $content = elgg_echo("file:none");
+}
+
+$sidebar = file_get_type_cloud(elgg_get_page_owner_guid());
+$sidebar = elgg_view('file/sidebar');
+
+$params['content'] = $content;
+$params['title'] = $title;
+$params['sidebar'] = $sidebar;
+
+$body = elgg_view_layout('content', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/mod/file/pages/file/search.php b/mod/file/pages/file/search.php
new file mode 100644
index 000000000..402a28933
--- /dev/null
+++ b/mod/file/pages/file/search.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * List files by type
+ *
+ * @package ElggFile
+ */
+
+$page_owner_guid = get_input('page_owner', null);
+
+if ($page_owner_guid !== null) {
+ $page_owner_guid = sanitise_int($page_owner_guid);
+}
+
+if ($page_owner_guid) {
+ elgg_set_page_owner_guid($page_owner_guid);
+}
+$owner = elgg_get_page_owner_entity();
+
+group_gatekeeper();
+
+// Get input
+$md_type = 'simpletype';
+// avoid reflected XSS attacks by only allowing alnum characters
+$file_type = preg_replace('[\W]', '', get_input('tag'));
+$listtype = get_input('listtype');
+$friends = (bool)get_input('friends', false);
+
+// breadcrumbs
+elgg_push_breadcrumb(elgg_echo('file'), "file/all");
+if ($owner) {
+ if (elgg_instanceof($owner, 'user')) {
+ elgg_push_breadcrumb($owner->name, "file/owner/$owner->username");
+ } else {
+ elgg_push_breadcrumb($owner->name, "file/group/$owner->guid/all");
+ }
+}
+if ($friends && $owner) {
+ elgg_push_breadcrumb(elgg_echo('friends'), "file/friends/$owner->username");
+}
+if ($file_type) {
+ elgg_push_breadcrumb(elgg_echo("file:type:$file_type"));
+} else {
+ elgg_push_breadcrumb(elgg_echo('all'));
+}
+
+// title
+if (!$owner) {
+ // world files
+ $title = elgg_echo('all') . ' ' . elgg_echo("file:type:$file_type");
+} else {
+ $friend_string = $friends ? elgg_echo('file:title:friends') : '';
+ $type_string = elgg_echo("file:type:$file_type");
+ $title = elgg_echo('file:list:title', array($owner->name, $friend_string, $type_string));
+}
+
+
+$sidebar = file_get_type_cloud($page_owner_guid, $friends);
+
+if ($friends) {
+ // elgg_does not support getting objects that belong to an entity's friends
+ $friend_entities = get_user_friends($page_owner_guid, "", 999999, 0);
+ if ($friend_entities) {
+ $friend_guids = array();
+ foreach ($friend_entities as $friend) {
+ $friend_guids[] = $friend->getGUID();
+ }
+ }
+ $page_owner_guid = $friend_guids;
+}
+
+$limit = 10;
+if ($listtype == "gallery") {
+ $limit = 12;
+}
+
+$params = array(
+ 'types' => 'object',
+ 'subtypes' => 'file',
+ 'container_guid' => $page_owner_guid,
+ 'limit' => $limit,
+ 'full_view' => false,
+);
+
+if ($file_type) {
+ $params['metadata_name'] = $md_type;
+ $params['metadata_value'] = $file_type;
+ $content = elgg_list_entities_from_metadata($params);
+} else {
+ $content = elgg_list_entities($params);
+}
+
+$body = elgg_view_layout('content', array(
+ 'filter' => '',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => $sidebar,
+));
+
+echo elgg_view_page($title, $body); \ No newline at end of file
diff --git a/mod/file/pages/file/upload.php b/mod/file/pages/file/upload.php
new file mode 100644
index 000000000..3aa25b6db
--- /dev/null
+++ b/mod/file/pages/file/upload.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Upload a new file
+ *
+ * @package ElggFile
+ */
+
+elgg_load_library('elgg:file');
+
+$owner = elgg_get_page_owner_entity();
+
+gatekeeper();
+group_gatekeeper();
+
+$title = elgg_echo('file:add');
+
+// set up breadcrumbs
+elgg_push_breadcrumb(elgg_echo('file'), "file/all");
+if (elgg_instanceof($owner, 'user')) {
+ elgg_push_breadcrumb($owner->name, "file/owner/$owner->username");
+} else {
+ elgg_push_breadcrumb($owner->name, "file/group/$owner->guid/all");
+}
+elgg_push_breadcrumb($title);
+
+// create form
+$form_vars = array('enctype' => 'multipart/form-data');
+$body_vars = file_prepare_form_vars();
+$content = elgg_view_form('file/upload', $form_vars, $body_vars);
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/file/pages/file/view.php b/mod/file/pages/file/view.php
new file mode 100644
index 000000000..6c9566a89
--- /dev/null
+++ b/mod/file/pages/file/view.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * View a file
+ *
+ * @package ElggFile
+ */
+
+$file = get_entity(get_input('guid'));
+if (!$file) {
+ register_error(elgg_echo('noaccess'));
+ $_SESSION['last_forward_from'] = current_page_url();
+ forward('');
+}
+
+$owner = elgg_get_page_owner_entity();
+
+elgg_push_breadcrumb(elgg_echo('file'), 'file/all');
+
+$crumbs_title = $owner->name;
+if (elgg_instanceof($owner, 'group')) {
+ elgg_push_breadcrumb($crumbs_title, "file/group/$owner->guid/all");
+} else {
+ elgg_push_breadcrumb($crumbs_title, "file/owner/$owner->username");
+}
+
+$title = $file->title;
+
+elgg_push_breadcrumb($title);
+
+$content = elgg_view_entity($file, array('full_view' => true));
+$content .= elgg_view_comments($file);
+
+elgg_register_menu_item('title', array(
+ 'name' => 'download',
+ 'text' => elgg_echo('file:download'),
+ 'href' => "file/download/$file->guid",
+ 'link_class' => 'elgg-button elgg-button-action',
+));
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/file/pages/file/world.php b/mod/file/pages/file/world.php
new file mode 100644
index 000000000..770dfd6e8
--- /dev/null
+++ b/mod/file/pages/file/world.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * All files
+ *
+ * @package ElggFile
+ */
+
+elgg_push_breadcrumb(elgg_echo('file'));
+
+elgg_register_title_button();
+
+$limit = get_input("limit", 10);
+
+$title = elgg_echo('file:all');
+
+$content = elgg_list_entities(array(
+ 'types' => 'object',
+ 'subtypes' => 'file',
+ 'limit' => $limit,
+ 'full_view' => FALSE
+));
+if (!$content) {
+ $content = elgg_echo('file:none');
+}
+
+$sidebar = file_get_type_cloud();
+$sidebar = elgg_view('file/sidebar');
+
+$body = elgg_view_layout('content', array(
+ 'filter_context' => 'all',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => $sidebar,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/file/start.php b/mod/file/start.php
new file mode 100644
index 000000000..7c0c216b2
--- /dev/null
+++ b/mod/file/start.php
@@ -0,0 +1,416 @@
+<?php
+/**
+ * Elgg file plugin
+ *
+ * @package ElggFile
+ */
+
+elgg_register_event_handler('init', 'system', 'file_init');
+
+/**
+ * File plugin initialization functions.
+ */
+function file_init() {
+
+ // register a library of helper functions
+ elgg_register_library('elgg:file', elgg_get_plugins_path() . 'file/lib/file.php');
+
+ // Site navigation
+ $item = new ElggMenuItem('file', elgg_echo('file'), 'file/all');
+ elgg_register_menu_item('site', $item);
+
+ // Extend CSS
+ elgg_extend_view('css/elgg', 'file/css');
+
+ // add enclosure to rss item
+ elgg_extend_view('extensions/item', 'file/enclosure');
+
+ // extend group main page
+ elgg_extend_view('groups/tool_latest', 'file/group_module');
+
+ // Register a page handler, so we can have nice URLs
+ elgg_register_page_handler('file', 'file_page_handler');
+
+ // Add a new file widget
+ elgg_register_widget_type('filerepo', elgg_echo("file"), elgg_echo("file:widget:description"));
+
+ // Register URL handlers for files
+ elgg_register_entity_url_handler('object', 'file', 'file_url_override');
+ elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'file_icon_url_override');
+
+ // Register granular notification for this object type
+ register_notification_object('object', 'file', elgg_echo('file:newupload'));
+
+ // Listen to notification events and supply a more useful message
+ elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'file_notify_message');
+
+ // add the group files tool option
+ add_group_tool_option('file', elgg_echo('groups:enablefiles'), true);
+
+ // Register entity type for search
+ elgg_register_entity_type('object', 'file');
+
+ // add a file link to owner blocks
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'file_owner_block_menu');
+
+ // Register actions
+ $action_path = elgg_get_plugins_path() . 'file/actions/file';
+ elgg_register_action("file/upload", "$action_path/upload.php");
+ elgg_register_action("file/delete", "$action_path/delete.php");
+ // temporary - see #2010
+ elgg_register_action("file/download", "$action_path/download.php");
+
+ // embed support
+ $item = ElggMenuItem::factory(array(
+ 'name' => 'file',
+ 'text' => elgg_echo('file'),
+ 'priority' => 10,
+ 'data' => array(
+ 'options' => array(
+ 'type' => 'object',
+ 'subtype' => 'file',
+ ),
+ ),
+ ));
+ elgg_register_menu_item('embed', $item);
+
+ $item = ElggMenuItem::factory(array(
+ 'name' => 'file_upload',
+ 'text' => elgg_echo('file:upload'),
+ 'priority' => 100,
+ 'data' => array(
+ 'view' => 'embed/file_upload/content',
+ ),
+ ));
+
+ elgg_register_menu_item('embed', $item);
+}
+
+/**
+ * Dispatches file pages.
+ * URLs take the form of
+ * All files: file/all
+ * User's files: file/owner/<username>
+ * Friends' files: file/friends/<username>
+ * View file: file/view/<guid>/<title>
+ * New file: file/add/<guid>
+ * Edit file: file/edit/<guid>
+ * Group files: file/group/<guid>/all
+ * Download: file/download/<guid>
+ *
+ * Title is ignored
+ *
+ * @param array $page
+ * @return bool
+ */
+function file_page_handler($page) {
+
+ if (!isset($page[0])) {
+ $page[0] = 'all';
+ }
+
+ $file_dir = elgg_get_plugins_path() . 'file/pages/file';
+
+ $page_type = $page[0];
+ switch ($page_type) {
+ case 'owner':
+ file_register_toggle();
+ include "$file_dir/owner.php";
+ break;
+ case 'friends':
+ file_register_toggle();
+ include "$file_dir/friends.php";
+ break;
+ case 'read': // Elgg 1.7 compatibility
+ register_error(elgg_echo("changebookmark"));
+ forward("file/view/{$page[1]}");
+ break;
+ case 'view':
+ set_input('guid', $page[1]);
+ include "$file_dir/view.php";
+ break;
+ case 'add':
+ include "$file_dir/upload.php";
+ break;
+ case 'edit':
+ set_input('guid', $page[1]);
+ include "$file_dir/edit.php";
+ break;
+ case 'search':
+ file_register_toggle();
+ include "$file_dir/search.php";
+ break;
+ case 'group':
+ file_register_toggle();
+ include "$file_dir/owner.php";
+ break;
+ case 'all':
+ file_register_toggle();
+ include "$file_dir/world.php";
+ break;
+ case 'download':
+ set_input('guid', $page[1]);
+ include "$file_dir/download.php";
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Adds a toggle to extra menu for switching between list and gallery views
+ */
+function file_register_toggle() {
+ $url = elgg_http_remove_url_query_element(current_page_url(), 'list_type');
+
+ if (get_input('list_type', 'list') == 'list') {
+ $list_type = "gallery";
+ $icon = elgg_view_icon('grid');
+ } else {
+ $list_type = "list";
+ $icon = elgg_view_icon('list');
+ }
+
+ if (substr_count($url, '?')) {
+ $url .= "&list_type=" . $list_type;
+ } else {
+ $url .= "?list_type=" . $list_type;
+ }
+
+
+ elgg_register_menu_item('extras', array(
+ 'name' => 'file_list',
+ 'text' => $icon,
+ 'href' => $url,
+ 'title' => elgg_echo("file:list:$list_type"),
+ 'priority' => 1000,
+ ));
+}
+
+/**
+ * Creates the notification message body
+ *
+ * @param string $hook
+ * @param string $entity_type
+ * @param string $returnvalue
+ * @param array $params
+ */
+function file_notify_message($hook, $entity_type, $returnvalue, $params) {
+ $entity = $params['entity'];
+ $to_entity = $params['to_entity'];
+ $method = $params['method'];
+ if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'file')) {
+ $descr = $entity->description;
+ $title = $entity->title;
+ $url = elgg_get_site_url() . "view/" . $entity->guid;
+ $owner = $entity->getOwnerEntity();
+ return $owner->name . ' ' . elgg_echo("file:via") . ': ' . $entity->title . "\n\n" . $descr . "\n\n" . $entity->getURL();
+ }
+ return null;
+}
+
+/**
+ * Add a menu item to the user ownerblock
+ */
+function file_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'user')) {
+ $url = "file/owner/{$params['entity']->username}";
+ $item = new ElggMenuItem('file', elgg_echo('file'), $url);
+ $return[] = $item;
+ } else {
+ if ($params['entity']->file_enable != "no") {
+ $url = "file/group/{$params['entity']->guid}/all";
+ $item = new ElggMenuItem('file', elgg_echo('file:group'), $url);
+ $return[] = $item;
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Returns an overall file type from the mimetype
+ *
+ * @param string $mimetype The MIME type
+ * @return string The overall type
+ */
+function file_get_simple_type($mimetype) {
+
+ if ($simpletype = elgg_trigger_plugin_hook('file:simpletype', $mimetype, null, null)) {
+ return $simpletype;
+ }
+
+ switch ($mimetype) {
+ case "application/msword":
+ case "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
+ return "document";
+ break;
+ case "application/pdf":
+ return "document";
+ break;
+ case "application/ogg":
+ return "audio";
+ break;
+ }
+
+ if (substr_count($mimetype, 'text/')) {
+ return "document";
+ }
+
+ if (substr_count($mimetype, 'audio/')) {
+ return "audio";
+ }
+
+ if (substr_count($mimetype, 'image/')) {
+ return "image";
+ }
+
+ if (substr_count($mimetype, 'video/')) {
+ return "video";
+ }
+
+ if (substr_count($mimetype, 'opendocument')) {
+ return "document";
+ }
+
+ return "general";
+}
+
+// deprecated and will be removed
+function get_general_file_type($mimetype) {
+ elgg_deprecated_notice('Use file_get_simple_type() instead of get_general_file_type()', 1.8);
+ return file_get_simple_type($mimetype);
+}
+
+/**
+ * Returns a list of filetypes
+ *
+ * @param int $container_guid The GUID of the container of the files
+ * @param bool $friends Whether we're looking at the container or the container's friends
+ * @return string The typecloud
+ */
+function file_get_type_cloud($container_guid = "", $friends = false) {
+
+ $container_guids = $container_guid;
+
+ if ($friends) {
+ // tags interface does not support pulling tags on friends' content so
+ // we need to grab all friends
+ $friend_entities = get_user_friends($container_guid, "", 999999, 0);
+ if ($friend_entities) {
+ $friend_guids = array();
+ foreach ($friend_entities as $friend) {
+ $friend_guids[] = $friend->getGUID();
+ }
+ }
+ $container_guids = $friend_guids;
+ }
+
+ elgg_register_tag_metadata_name('simpletype');
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'file',
+ 'container_guids' => $container_guids,
+ 'threshold' => 0,
+ 'limit' => 10,
+ 'tag_names' => array('simpletype')
+ );
+ $types = elgg_get_tags($options);
+
+ $params = array(
+ 'friends' => $friends,
+ 'types' => $types,
+ );
+
+ return elgg_view('file/typecloud', $params);
+}
+
+function get_filetype_cloud($owner_guid = "", $friends = false) {
+ elgg_deprecated_notice('Use file_get_type_cloud instead of get_filetype_cloud', 1.8);
+ return file_get_type_cloud($owner_guid, $friends);
+}
+
+/**
+ * Populates the ->getUrl() method for file objects
+ *
+ * @param ElggEntity $entity File entity
+ * @return string File URL
+ */
+function file_url_override($entity) {
+ $title = $entity->title;
+ $title = elgg_get_friendly_title($title);
+ return "file/view/" . $entity->getGUID() . "/" . $title;
+}
+
+/**
+ * Override the default entity icon for files
+ *
+ * Plugins can override or extend the icons using the plugin hook: 'file:icon:url', 'override'
+ *
+ * @return string Relative URL
+ */
+function file_icon_url_override($hook, $type, $returnvalue, $params) {
+ $file = $params['entity'];
+ $size = $params['size'];
+ if (elgg_instanceof($file, 'object', 'file')) {
+
+ // thumbnails get first priority
+ if ($file->thumbnail) {
+ $ts = (int)$file->icontime;
+ return "mod/file/thumbnail.php?file_guid=$file->guid&size=$size&icontime=$ts";
+ }
+
+ $mapping = array(
+ 'application/excel' => 'excel',
+ 'application/msword' => 'word',
+ 'application/ogg' => 'music',
+ 'application/pdf' => 'pdf',
+ 'application/powerpoint' => 'ppt',
+ 'application/vnd.ms-excel' => 'excel',
+ 'application/vnd.ms-powerpoint' => 'ppt',
+ 'application/vnd.oasis.opendocument.text' => 'openoffice',
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'word',
+ 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'excel',
+ 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'ppt',
+ 'application/x-gzip' => 'archive',
+ 'application/x-rar-compressed' => 'archive',
+ 'application/x-stuffit' => 'archive',
+ 'application/zip' => 'archive',
+
+ 'text/directory' => 'vcard',
+ 'text/v-card' => 'vcard',
+
+ 'application' => 'application',
+ 'audio' => 'music',
+ 'text' => 'text',
+ 'video' => 'video',
+ );
+
+ $mime = $file->mimetype;
+ if ($mime) {
+ $base_type = substr($mime, 0, strpos($mime, '/'));
+ } else {
+ $mime = 'none';
+ $base_type = 'none';
+ }
+
+ if (isset($mapping[$mime])) {
+ $type = $mapping[$mime];
+ } elseif (isset($mapping[$base_type])) {
+ $type = $mapping[$base_type];
+ } else {
+ $type = 'general';
+ }
+
+ if ($size == 'large') {
+ $ext = '_lrg';
+ } else {
+ $ext = '';
+ }
+
+ $url = "mod/file/graphics/icons/{$type}{$ext}.gif";
+ $url = elgg_trigger_plugin_hook('file:icon:url', 'override', $params, $url);
+ return $url;
+ }
+}
diff --git a/mod/file/thumbnail.php b/mod/file/thumbnail.php
new file mode 100644
index 000000000..851f13a8f
--- /dev/null
+++ b/mod/file/thumbnail.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Elgg file thumbnail
+ *
+ * @package ElggFile
+ */
+
+// Get engine
+require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+
+// Get file GUID
+$file_guid = (int) get_input('file_guid', 0);
+
+// Get file thumbnail size
+$size = get_input('size', 'small');
+
+$file = get_entity($file_guid);
+if (!$file || $file->getSubtype() != "file") {
+ exit;
+}
+
+$simpletype = $file->simpletype;
+if ($simpletype == "image") {
+
+ // Get file thumbnail
+ switch ($size) {
+ case "small":
+ $thumbfile = $file->thumbnail;
+ break;
+ case "medium":
+ $thumbfile = $file->smallthumb;
+ break;
+ case "large":
+ default:
+ $thumbfile = $file->largethumb;
+ break;
+ }
+
+ // Grab the file
+ if ($thumbfile && !empty($thumbfile)) {
+ $readfile = new ElggFile();
+ $readfile->owner_guid = $file->owner_guid;
+ $readfile->setFilename($thumbfile);
+ $mime = $file->getMimeType();
+ $contents = $readfile->grabFile();
+
+ // caching images for 10 days
+ header("Content-type: $mime");
+ header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+10 days")), true);
+ header("Pragma: public", true);
+ header("Cache-Control: public", true);
+ header("Content-Length: " . strlen($contents));
+
+ echo $contents;
+ exit;
+ }
+}
diff --git a/mod/file/views/default/embed/file_upload/content.php b/mod/file/views/default/embed/file_upload/content.php
new file mode 100644
index 000000000..8b630c828
--- /dev/null
+++ b/mod/file/views/default/embed/file_upload/content.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Upload a file through the embed interface
+ */
+
+$form_vars = array(
+ 'enctype' => 'multipart/form-data',
+ 'class' => 'elgg-form-embed',
+);
+$body_vars = array('container_guid' => elgg_get_page_owner_guid());
+echo elgg_view_form('file/upload', $form_vars, $body_vars);
+
+// the tab we want to be forwarded to after upload is complete
+echo elgg_view('input/hidden', array(
+ 'name' => 'embed_forward',
+ 'value' => 'file',
+)); \ No newline at end of file
diff --git a/mod/file/views/default/file/css.php b/mod/file/views/default/file/css.php
new file mode 100644
index 000000000..5476ed7e2
--- /dev/null
+++ b/mod/file/views/default/file/css.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * File CSS extender
+ *
+ * @package ElggFile
+ */
+?>
+.file-photo {
+ text-align: center;
+ margin-bottom: 15px;
+}
+.file-gallery-item {
+ text-align: center;
+ width: 165px;
+}
diff --git a/mod/file/views/default/file/group_module.php b/mod/file/views/default/file/group_module.php
new file mode 100644
index 000000000..ad6c58dbb
--- /dev/null
+++ b/mod/file/views/default/file/group_module.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Group file module
+ */
+
+$group = elgg_get_page_owner_entity();
+
+if ($group->file_enable == "no") {
+ return true;
+}
+
+$all_link = elgg_view('output/url', array(
+ 'href' => "file/group/$group->guid/all",
+ 'text' => elgg_echo('link:view:all'),
+ 'is_trusted' => true,
+));
+
+elgg_push_context('widgets');
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'file',
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'limit' => 6,
+ 'full_view' => false,
+ 'pagination' => false,
+);
+$content = elgg_list_entities($options);
+elgg_pop_context();
+
+if (!$content) {
+ $content = '<p>' . elgg_echo('file:none') . '</p>';
+}
+
+$new_link = elgg_view('output/url', array(
+ 'href' => "file/add/$group->guid",
+ 'text' => elgg_echo('file:add'),
+ 'is_trusted' => true,
+));
+
+echo elgg_view('groups/profile/module', array(
+ 'title' => elgg_echo('file:group'),
+ 'content' => $content,
+ 'all_link' => $all_link,
+ 'add_link' => $new_link,
+));
diff --git a/mod/file/views/default/file/sidebar.php b/mod/file/views/default/file/sidebar.php
new file mode 100644
index 000000000..f61b8e64e
--- /dev/null
+++ b/mod/file/views/default/file/sidebar.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * File sidebar
+ */
+
+echo elgg_view('page/elements/comments_block', array(
+ 'subtypes' => 'file',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+));
+
+echo elgg_view('page/elements/tagcloud_block', array(
+ 'subtypes' => 'file',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+));
diff --git a/mod/file/views/default/file/specialcontent/image/default.php b/mod/file/views/default/file/specialcontent/image/default.php
new file mode 100644
index 000000000..431ac9f4f
--- /dev/null
+++ b/mod/file/views/default/file/specialcontent/image/default.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Display an image
+ *
+ * @uses $vars['entity']
+ */
+
+$file = $vars['entity'];
+
+$image_url = $file->getIconURL('large');
+$image_url = elgg_format_url($image_url);
+$download_url = elgg_get_site_url() . "file/download/{$file->getGUID()}";
+
+if ($vars['full_view']) {
+ echo <<<HTML
+ <div class="file-photo">
+ <a href="$download_url"><img class="elgg-photo" src="$image_url" /></a>
+ </div>
+HTML;
+}
diff --git a/mod/file/views/default/file/typecloud.php b/mod/file/views/default/file/typecloud.php
new file mode 100644
index 000000000..4253bf674
--- /dev/null
+++ b/mod/file/views/default/file/typecloud.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Type cloud
+ */
+
+function file_type_cloud_get_url($type, $friends) {
+ $url = elgg_get_site_url() . 'file/search?subtype=file';
+
+ if ($type->tag != "all") {
+ $url .= "&md_type=simpletype&tag=" . urlencode($type->tag);
+ }
+
+ if ($friends) {
+ $url .= "&friends=$friends";
+ }
+
+ if ($type->tag == "image") {
+ $url .= "&list_type=gallery";
+ }
+
+ if (elgg_get_page_owner_guid()) {
+ $url .= "&page_owner=" . elgg_get_page_owner_guid();
+ }
+
+ return $url;
+}
+
+
+$types = elgg_extract('types', $vars, array());
+if (!$types) {
+ return true;
+}
+
+$friends = elgg_extract('friends', $vars, false);
+
+$all = new stdClass;
+$all->tag = "all";
+elgg_register_menu_item('page', array(
+ 'name' => 'file:all',
+ 'text' => elgg_echo('all'),
+ 'href' => file_type_cloud_get_url($all, $friends),
+));
+
+foreach ($types as $type) {
+ elgg_register_menu_item('page', array(
+ 'name' => "file:$type->tag",
+ 'text' => elgg_echo("file:type:$type->tag"),
+ 'href' => file_type_cloud_get_url($type, $friends),
+ ));
+}
diff --git a/mod/file/views/default/forms/file/upload.php b/mod/file/views/default/forms/file/upload.php
new file mode 100644
index 000000000..f637a419e
--- /dev/null
+++ b/mod/file/views/default/forms/file/upload.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Elgg file upload/save form
+ *
+ * @package ElggFile
+ */
+
+// once elgg_view stops throwing all sorts of junk into $vars, we can use
+$title = elgg_extract('title', $vars, '');
+$desc = elgg_extract('description', $vars, '');
+$tags = elgg_extract('tags', $vars, '');
+$access_id = elgg_extract('access_id', $vars, ACCESS_DEFAULT);
+$container_guid = elgg_extract('container_guid', $vars);
+if (!$container_guid) {
+ $container_guid = elgg_get_logged_in_user_guid();
+}
+$guid = elgg_extract('guid', $vars, null);
+
+if ($guid) {
+ $file_label = elgg_echo("file:replace");
+ $submit_label = elgg_echo('save');
+} else {
+ $file_label = elgg_echo("file:file");
+ $submit_label = elgg_echo('upload');
+}
+
+?>
+<div>
+ <label><?php echo $file_label; ?></label><br />
+ <?php echo elgg_view('input/file', array('name' => 'upload')); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('title'); ?></label><br />
+ <?php echo elgg_view('input/text', array('name' => 'title', 'value' => $title)); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('description'); ?></label>
+ <?php echo elgg_view('input/longtext', array('name' => 'description', 'value' => $desc)); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('tags'); ?></label>
+ <?php echo elgg_view('input/tags', array('name' => 'tags', 'value' => $tags)); ?>
+</div>
+<?php
+
+$categories = elgg_view('input/categories', $vars);
+if ($categories) {
+ echo $categories;
+}
+
+?>
+<div>
+ <label><?php echo elgg_echo('access'); ?></label><br />
+ <?php echo elgg_view('input/access', array('name' => 'access_id', 'value' => $access_id)); ?>
+</div>
+<div class="elgg-foot">
+<?php
+
+echo elgg_view('input/hidden', array('name' => 'container_guid', 'value' => $container_guid));
+
+if ($guid) {
+ echo elgg_view('input/hidden', array('name' => 'file_guid', 'value' => $guid));
+}
+
+echo elgg_view('input/submit', array('value' => $submit_label));
+
+?>
+</div>
diff --git a/mod/file/views/default/icon/object/file.php b/mod/file/views/default/icon/object/file.php
new file mode 100644
index 000000000..a3190310b
--- /dev/null
+++ b/mod/file/views/default/icon/object/file.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * File icon view
+ *
+ * @uses $vars['entity'] The entity the icon represents - uses getIconURL() method
+ * @uses $vars['size'] topbar, tiny, small, medium (default), large, master
+ * @uses $vars['href'] Optional override for link
+ * @uses $vars['img_class'] Optional CSS class added to img
+ * @uses $vars['link_class'] Optional CSS class added to link
+ */
+
+$entity = $vars['entity'];
+
+$sizes = array('small', 'medium', 'large', 'tiny', 'master', 'topbar');
+// Get size
+if (!in_array($vars['size'], $sizes)) {
+ $vars['size'] = "medium";
+}
+
+$title = $entity->title;
+$title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false);
+
+$url = $entity->getURL();
+if (isset($vars['href'])) {
+ $url = $vars['href'];
+}
+
+$class = '';
+if (isset($vars['img_class'])) {
+ $class = $vars['img_class'];
+}
+if ($entity->thumbnail) {
+ $class = "class=\"elgg-photo $class\"";
+} else if ($class) {
+ $class = "class=\"$class\"";
+}
+
+$img_src = $entity->getIconURL($vars['size']);
+$img_src = elgg_format_url($img_src);
+$img = "<img $class src=\"$img_src\" alt=\"$title\" />";
+
+if ($url) {
+ $params = array(
+ 'href' => $url,
+ 'text' => $img,
+ 'is_trusted' => true,
+ );
+ if (isset($vars['link_class'])) {
+ $params['class'] = $vars['link_class'];
+ }
+ echo elgg_view('output/url', $params);
+} else {
+ echo $img;
+}
diff --git a/mod/file/views/default/object/file.php b/mod/file/views/default/object/file.php
new file mode 100644
index 000000000..64f19c483
--- /dev/null
+++ b/mod/file/views/default/object/file.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * File renderer.
+ *
+ * @package ElggFile
+ */
+
+$full = elgg_extract('full_view', $vars, FALSE);
+$file = elgg_extract('entity', $vars, FALSE);
+
+if (!$file) {
+ return TRUE;
+}
+
+$owner = $file->getOwnerEntity();
+$container = $file->getContainerEntity();
+$categories = elgg_view('output/categories', $vars);
+$excerpt = elgg_get_excerpt($file->description);
+$mime = $file->mimetype;
+$base_type = substr($mime, 0, strpos($mime,'/'));
+
+$owner_link = elgg_view('output/url', array(
+ 'href' => "file/owner/$owner->username",
+ 'text' => $owner->name,
+ 'is_trusted' => true,
+));
+$author_text = elgg_echo('byline', array($owner_link));
+
+$file_icon = elgg_view_entity_icon($file, 'small');
+
+$date = elgg_view_friendly_time($file->time_created);
+
+$comments_count = $file->countComments();
+//only display if there are commments
+if ($comments_count != 0) {
+ $text = elgg_echo("comments") . " ($comments_count)";
+ $comments_link = elgg_view('output/url', array(
+ 'href' => $file->getURL() . '#file-comments',
+ 'text' => $text,
+ 'is_trusted' => true,
+ ));
+} else {
+ $comments_link = '';
+}
+
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $vars['entity'],
+ 'handler' => 'file',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+$subtitle = "$author_text $date $comments_link $categories";
+
+// do not show the metadata and controls in widget view
+if (elgg_in_context('widgets')) {
+ $metadata = '';
+}
+
+if ($full && !elgg_in_context('gallery')) {
+
+ $extra = '';
+ if (elgg_view_exists("file/specialcontent/$mime")) {
+ $extra = elgg_view("file/specialcontent/$mime", $vars);
+ } else if (elgg_view_exists("file/specialcontent/$base_type/default")) {
+ $extra = elgg_view("file/specialcontent/$base_type/default", $vars);
+ }
+
+ $params = array(
+ 'entity' => $file,
+ 'title' => false,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ );
+ $params = $params + $vars;
+ $summary = elgg_view('object/elements/summary', $params);
+
+ $text = elgg_view('output/longtext', array('value' => $file->description));
+ $body = "$text $extra";
+
+ echo elgg_view('object/elements/full', array(
+ 'entity' => $file,
+ 'icon' => $file_icon,
+ 'summary' => $summary,
+ 'body' => $body,
+ ));
+
+} elseif (elgg_in_context('gallery')) {
+ echo '<div class="file-gallery-item">';
+ echo "<h3>" . $file->title . "</h3>";
+ echo elgg_view_entity_icon($file, 'medium');
+ echo "<p class='subtitle'>$owner_link $date</p>";
+ echo '</div>';
+} else {
+ // brief view
+
+ $params = array(
+ 'entity' => $file,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'content' => $excerpt,
+ );
+ $params = $params + $vars;
+ $list_body = elgg_view('object/elements/summary', $params);
+
+ echo elgg_view_image_block($file_icon, $list_body);
+}
diff --git a/mod/file/views/default/river/object/file/create.php b/mod/file/views/default/river/object/file/create.php
new file mode 100644
index 000000000..e8e6142e0
--- /dev/null
+++ b/mod/file/views/default/river/object/file/create.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * File river view.
+ */
+
+$object = $vars['item']->getObjectEntity();
+$excerpt = strip_tags($object->description);
+$excerpt = elgg_get_excerpt($excerpt);
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => $excerpt,
+)); \ No newline at end of file
diff --git a/mod/file/views/default/widgets/filerepo/content.php b/mod/file/views/default/widgets/filerepo/content.php
new file mode 100644
index 000000000..f3e152de3
--- /dev/null
+++ b/mod/file/views/default/widgets/filerepo/content.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Elgg file widget view
+ *
+ * @package ElggFile
+ */
+
+
+$num = $vars['entity']->num_display;
+
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'file',
+ 'container_guid' => $vars['entity']->owner_guid,
+ 'limit' => $num,
+ 'full_view' => FALSE,
+ 'pagination' => FALSE,
+);
+$content = elgg_list_entities($options);
+
+echo $content;
+
+if ($content) {
+ $url = "file/owner/" . elgg_get_page_owner_entity()->username;
+ $more_link = elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => elgg_echo('file:more'),
+ 'is_trusted' => true,
+ ));
+ echo "<span class=\"elgg-widget-more\">$more_link</span>";
+} else {
+ echo elgg_echo('file:none');
+}
diff --git a/mod/file/views/default/widgets/filerepo/edit.php b/mod/file/views/default/widgets/filerepo/edit.php
new file mode 100644
index 000000000..cab35b6ef
--- /dev/null
+++ b/mod/file/views/default/widgets/filerepo/edit.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Elgg file widget edit view
+ *
+ * @package ElggFile
+ */
+
+
+// set default value
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 4;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('file:num_files'); ?>:
+ <?php echo $dropdown; ?>
+</div>
diff --git a/mod/file/views/rss/file/enclosure.php b/mod/file/views/rss/file/enclosure.php
new file mode 100644
index 000000000..fb4a899d9
--- /dev/null
+++ b/mod/file/views/rss/file/enclosure.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Link to download the file
+ *
+ * @uses $vars['entity']
+ */
+
+if (elgg_instanceof($vars['entity'], 'object', 'file')) {
+ $download_url = elgg_get_site_url() . 'file/download/' . $vars['entity']->getGUID();
+ $size = $vars['entity']->size();
+ $mime_type = $vars['entity']->getMimeType();
+ echo <<<END
+
+ <enclosure url="$download_url" length="$size" type="$mime_type" />";
+END;
+}
diff --git a/mod/garbagecollector/languages/en.php b/mod/garbagecollector/languages/en.php
new file mode 100644
index 000000000..b32670a0c
--- /dev/null
+++ b/mod/garbagecollector/languages/en.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Elgg garbage collector language pack.
+ *
+ * @package ElggGarbageCollector
+ */
+
+$english = array(
+ 'garbagecollector:period' => 'How often should the Elgg garbage collector run?',
+
+ 'garbagecollector:weekly' => 'Once a week',
+ 'garbagecollector:monthly' => 'Once a month',
+ 'garbagecollector:yearly' => 'Once a year',
+
+ 'garbagecollector' => "GARBAGE COLLECTOR\n",
+ 'garbagecollector:done' => "DONE\n",
+ 'garbagecollector:optimize' => "Optimizing %s ",
+
+ 'garbagecollector:error' => "ERROR",
+ 'garbagecollector:ok' => "OK",
+
+ 'garbagecollector:gc:metastrings' => 'Cleaning up unlinked metastrings: ',
+);
+
+add_translation("en", $english); \ No newline at end of file
diff --git a/mod/garbagecollector/manifest.xml b/mod/garbagecollector/manifest.xml
new file mode 100644
index 000000000..5aafebf38
--- /dev/null
+++ b/mod/garbagecollector/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Garbage Collector</name>
+ <author>Core developers</author>
+ <version>1.5</version>
+ <category>bundled</category>
+ <category>admin</category>
+ <description>Perform some database cleanup tasks</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/garbagecollector/start.php b/mod/garbagecollector/start.php
new file mode 100644
index 000000000..c7bd20053
--- /dev/null
+++ b/mod/garbagecollector/start.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Elgg garbage collector.
+ *
+ * @package ElggGarbageCollector
+ */
+
+elgg_register_event_handler('init', 'system', 'garbagecollector_init');
+
+function garbagecollector_init() {
+ $period = elgg_get_plugin_setting('period', 'garbagecollector');
+ switch ($period) {
+ case 'weekly':
+ case 'monthly':
+ case 'yearly':
+ break;
+ default:
+ $period = 'monthly';
+ }
+
+ // Register cron hook
+ elgg_register_plugin_hook_handler('cron', $period, 'garbagecollector_cron');
+}
+
+/**
+ * Cron job
+ */
+function garbagecollector_cron($hook, $entity_type, $returnvalue, $params) {
+
+ echo elgg_echo('garbagecollector');
+
+ // Garbage collect metastrings
+ echo elgg_echo('garbagecollector:gc:metastrings');
+
+ if (delete_orphaned_metastrings() !== false) {
+ echo elgg_echo('garbagecollector:ok');
+ } else {
+ echo elgg_echo('garbagecollector:error');
+ }
+
+ echo "\n";
+
+ // Now, because we are nice, trigger a plugin hook to let other plugins do some GC
+ $rv = true;
+ $period = elgg_get_plugin_setting('period','garbagecollector');
+ elgg_trigger_plugin_hook('gc', 'system', array('period' => $period));
+
+ // Now we optimize all tables
+ $tables = get_db_tables();
+ foreach ($tables as $table) {
+ echo elgg_echo('garbagecollector:optimize', array($table));
+
+ if (optimize_table($table) !== false) {
+ echo elgg_echo('garbagecollector:ok');
+ } else {
+ echo elgg_echo('garbagecollector:error');
+ }
+
+ echo "\n";
+ }
+
+ echo elgg_echo('garbagecollector:done');
+}
diff --git a/mod/garbagecollector/views/default/plugins/garbagecollector/settings.php b/mod/garbagecollector/views/default/plugins/garbagecollector/settings.php
new file mode 100644
index 000000000..3ade780f9
--- /dev/null
+++ b/mod/garbagecollector/views/default/plugins/garbagecollector/settings.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Elgg garbage collector plugin settings.
+ *
+ * @package ElggGarbageCollector
+ */
+
+$period = $vars['entity']->period;
+if (!$period) {
+ $period = 'monthly';
+}
+
+?>
+<div>
+ <?php echo elgg_echo('garbagecollector:period'); ?>
+
+ <?php
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'params[period]',
+ 'options_values' => array(
+ 'weekly' => elgg_echo('garbagecollector:weekly'),
+ 'monthly' => elgg_echo('garbagecollector:monthly'),
+ 'yearly' => elgg_echo('garbagecollector:yearly'),
+ ),
+ 'value' => $period
+ ));
+ ?>
+</div>
diff --git a/mod/groups/actions/discussion/delete.php b/mod/groups/actions/discussion/delete.php
new file mode 100644
index 000000000..f307aa091
--- /dev/null
+++ b/mod/groups/actions/discussion/delete.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Delete topic action
+ *
+ */
+
+$topic_guid = (int) get_input('guid');
+
+$topic = get_entity($topic_guid);
+if (!$topic || !$topic->getSubtype() == "groupforumtopic") {
+ register_error(elgg_echo('discussion:error:notdeleted'));
+ forward(REFERER);
+}
+
+if (!$topic->canEdit()) {
+ register_error(elgg_echo('discussion:error:permissions'));
+ forward(REFERER);
+}
+
+$container = $topic->getContainerEntity();
+
+$result = $topic->delete();
+if ($result) {
+ system_message(elgg_echo('discussion:topic:deleted'));
+} else {
+ register_error(elgg_echo('discussion:error:notdeleted'));
+}
+
+forward("discussion/owner/$container->guid");
diff --git a/mod/groups/actions/discussion/reply/delete.php b/mod/groups/actions/discussion/reply/delete.php
new file mode 100644
index 000000000..88c6b79d6
--- /dev/null
+++ b/mod/groups/actions/discussion/reply/delete.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Delete discussion reply
+ */
+
+$id = (int) get_input('annotation_id');
+
+$reply = elgg_get_annotation_from_id($id);
+if (!$reply || $reply->name != 'group_topic_post') {
+ register_error(elgg_echo('discussion:reply:error:notdeleted'));
+ forward(REFERER);
+}
+
+if (!$reply->canEdit()) {
+ register_error(elgg_echo('discussion:error:permissions'));
+ forward(REFERER);
+}
+
+$result = $reply->delete();
+if ($result) {
+ system_message(elgg_echo('discussion:reply:deleted'));
+} else {
+ register_error(elgg_echo('discussion:reply:error:notdeleted'));
+}
+
+forward(REFERER);
diff --git a/mod/groups/actions/discussion/reply/save.php b/mod/groups/actions/discussion/reply/save.php
new file mode 100644
index 000000000..f8be8aa2c
--- /dev/null
+++ b/mod/groups/actions/discussion/reply/save.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Post a reply to discussion topic
+ *
+ */
+
+// Get input
+$entity_guid = (int) get_input('entity_guid');
+$text = get_input('group_topic_post');
+$annotation_id = (int) get_input('annotation_id');
+
+// reply cannot be empty
+if (empty($text)) {
+ register_error(elgg_echo('grouppost:nopost'));
+ forward(REFERER);
+}
+
+$topic = get_entity($entity_guid);
+if (!$topic) {
+ register_error(elgg_echo('grouppost:nopost'));
+ forward(REFERER);
+}
+
+$user = elgg_get_logged_in_user_entity();
+
+$group = $topic->getContainerEntity();
+if (!$group->canWriteToContainer()) {
+ register_error(elgg_echo('groups:notmember'));
+ forward(REFERER);
+}
+
+// if editing a reply, make sure it's valid
+if ($annotation_id) {
+ $annotation = elgg_get_annotation_from_id($annotation_id);
+ if (!$annotation->canEdit()) {
+ register_error(elgg_echo('groups:notowner'));
+ forward(REFERER);
+ }
+
+ $annotation->value = $text;
+ if (!$annotation->save()) {
+ system_message(elgg_echo('groups:forumpost:error'));
+ forward(REFERER);
+ }
+ system_message(elgg_echo('groups:forumpost:edited'));
+} else {
+ // add the reply to the forum topic
+ $reply_id = $topic->annotate('group_topic_post', $text, $topic->access_id, $user->guid);
+ if ($reply_id == false) {
+ system_message(elgg_echo('groupspost:failure'));
+ forward(REFERER);
+ }
+
+ add_to_river('river/annotation/group_topic_post/reply', 'reply', $user->guid, $topic->guid, "", 0, $reply_id);
+ system_message(elgg_echo('groupspost:success'));
+}
+
+forward(REFERER);
diff --git a/mod/groups/actions/discussion/save.php b/mod/groups/actions/discussion/save.php
new file mode 100644
index 000000000..b3e9da654
--- /dev/null
+++ b/mod/groups/actions/discussion/save.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Topic save action
+ */
+
+// Get variables
+$title = htmlspecialchars(get_input('title', '', false), ENT_QUOTES, 'UTF-8');
+$desc = get_input("description");
+$status = get_input("status");
+$access_id = (int) get_input("access_id");
+$container_guid = (int) get_input('container_guid');
+$guid = (int) get_input('topic_guid');
+$tags = get_input("tags");
+
+elgg_make_sticky_form('topic');
+
+// validation of inputs
+if (!$title || !$desc) {
+ register_error(elgg_echo('discussion:error:missing'));
+ forward(REFERER);
+}
+
+$container = get_entity($container_guid);
+if (!$container || !$container->canWriteToContainer(0, 'object', 'groupforumtopic')) {
+ register_error(elgg_echo('discussion:error:permissions'));
+ forward(REFERER);
+}
+
+// check whether this is a new topic or an edit
+$new_topic = true;
+if ($guid > 0) {
+ $new_topic = false;
+}
+
+if ($new_topic) {
+ $topic = new ElggObject();
+ $topic->subtype = 'groupforumtopic';
+} else {
+ // load original file object
+ $topic = new ElggObject($guid);
+ if (!$topic || !$topic->canEdit()) {
+ register_error(elgg_echo('discussion:topic:notfound'));
+ forward(REFERER);
+ }
+}
+
+$topic->title = $title;
+$topic->description = $desc;
+$topic->status = $status;
+$topic->access_id = $access_id;
+$topic->container_guid = $container_guid;
+
+$tags = explode(",", $tags);
+$topic->tags = $tags;
+
+$result = $topic->save();
+
+if (!$result) {
+ register_error(elgg_echo('discussion:error:notsaved'));
+ forward(REFERER);
+}
+
+// topic saved so clear sticky form
+elgg_clear_sticky_form('topic');
+
+
+// handle results differently for new topics and topic edits
+if ($new_topic) {
+ system_message(elgg_echo('discussion:topic:created'));
+ add_to_river('river/object/groupforumtopic/create', 'create', elgg_get_logged_in_user_guid(), $topic->guid);
+} else {
+ system_message(elgg_echo('discussion:topic:updated'));
+}
+
+forward($topic->getURL());
diff --git a/mod/groups/actions/groups/delete.php b/mod/groups/actions/groups/delete.php
new file mode 100644
index 000000000..2ff6c339c
--- /dev/null
+++ b/mod/groups/actions/groups/delete.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Delete a group
+ */
+
+$guid = (int) get_input('guid');
+if (!$guid) {
+ // backward compatible
+ elgg_deprecated_notice("Use 'guid' for group delete action", 1.8);
+ $guid = (int)get_input('group_guid');
+}
+$entity = get_entity($guid);
+
+if (!$entity->canEdit()) {
+ register_error(elgg_echo('group:notdeleted'));
+ forward(REFERER);
+}
+
+if (($entity) && ($entity instanceof ElggGroup)) {
+ // delete group icons
+ $owner_guid = $entity->owner_guid;
+ $prefix = "groups/" . $entity->guid;
+ $imagenames = array('.jpg', 'tiny.jpg', 'small.jpg', 'medium.jpg', 'large.jpg');
+ $img = new ElggFile();
+ $img->owner_guid = $owner_guid;
+ foreach ($imagenames as $name) {
+ $img->setFilename($prefix . $name);
+ $img->delete();
+ }
+
+ // delete group
+ if ($entity->delete()) {
+ system_message(elgg_echo('group:deleted'));
+ } else {
+ register_error(elgg_echo('group:notdeleted'));
+ }
+} else {
+ register_error(elgg_echo('group:notdeleted'));
+}
+
+$url_name = elgg_get_logged_in_user_entity()->username;
+forward(elgg_get_site_url() . "groups/member/{$url_name}");
diff --git a/mod/groups/actions/groups/edit.php b/mod/groups/actions/groups/edit.php
new file mode 100644
index 000000000..d0689be2e
--- /dev/null
+++ b/mod/groups/actions/groups/edit.php
@@ -0,0 +1,207 @@
+<?php
+/**
+ * Elgg groups plugin edit action.
+ *
+ * @package ElggGroups
+ */
+
+elgg_make_sticky_form('groups');
+
+/**
+ * wrapper for recursive array walk decoding
+ */
+function profile_array_decoder(&$v) {
+ $v = _elgg_html_decode($v);
+}
+
+// Get group fields
+$input = array();
+foreach (elgg_get_config('group') as $shortname => $valuetype) {
+ $input[$shortname] = get_input($shortname);
+
+ // @todo treat profile fields as unescaped: don't filter, encode on output
+ if (is_array($input[$shortname])) {
+ array_walk_recursive($input[$shortname], 'profile_array_decoder');
+ } else {
+ $input[$shortname] = _elgg_html_decode($input[$shortname]);
+ }
+
+ if ($valuetype == 'tags') {
+ $input[$shortname] = string_to_tag_array($input[$shortname]);
+ }
+}
+
+$input['name'] = htmlspecialchars(get_input('name', '', false), ENT_QUOTES, 'UTF-8');
+
+$user = elgg_get_logged_in_user_entity();
+
+$group_guid = (int)get_input('group_guid');
+$is_new_group = $group_guid == 0;
+
+if ($is_new_group
+ && (elgg_get_plugin_setting('limited_groups', 'groups') == 'yes')
+ && !$user->isAdmin()) {
+ register_error(elgg_echo("groups:cantcreate"));
+ forward(REFERER);
+}
+
+$group = new ElggGroup($group_guid); // load if present, if not create a new group
+if ($group_guid && !$group->canEdit()) {
+ register_error(elgg_echo("groups:cantedit"));
+ forward(REFERER);
+}
+
+// Assume we can edit or this is a new group
+if (sizeof($input) > 0) {
+ foreach($input as $shortname => $value) {
+ $group->$shortname = $value;
+ }
+}
+
+// Validate create
+if (!$group->name) {
+ register_error(elgg_echo("groups:notitle"));
+ forward(REFERER);
+}
+
+
+// Set group tool options
+$tool_options = elgg_get_config('group_tool_options');
+if ($tool_options) {
+ foreach ($tool_options as $group_option) {
+ $option_toggle_name = $group_option->name . "_enable";
+ $option_default = $group_option->default_on ? 'yes' : 'no';
+ $group->$option_toggle_name = get_input($option_toggle_name, $option_default);
+ }
+}
+
+// Group membership - should these be treated with same constants as access permissions?
+$is_public_membership = (get_input('membership') == ACCESS_PUBLIC);
+$group->membership = $is_public_membership ? ACCESS_PUBLIC : ACCESS_PRIVATE;
+
+if ($is_new_group) {
+ $group->access_id = ACCESS_PUBLIC;
+}
+
+$old_owner_guid = $is_new_group ? 0 : $group->owner_guid;
+$new_owner_guid = (int) get_input('owner_guid');
+
+$owner_has_changed = false;
+$old_icontime = null;
+if (!$is_new_group && $new_owner_guid && $new_owner_guid != $old_owner_guid) {
+ // verify new owner is member and old owner/admin is logged in
+ if (is_group_member($group_guid, $new_owner_guid) && ($old_owner_guid == $user->guid || $user->isAdmin())) {
+ $group->owner_guid = $new_owner_guid;
+
+ // @todo Remove this when #4683 fixed
+ $owner_has_changed = true;
+ $old_icontime = $group->icontime;
+ }
+}
+
+$must_move_icons = ($owner_has_changed && $old_icontime);
+
+$group->save();
+
+// Invisible group support
+// @todo this requires save to be called to create the acl for the group. This
+// is an odd requirement and should be removed. Either the acl creation happens
+// in the action or the visibility moves to a plugin hook
+if (elgg_get_plugin_setting('hidden_groups', 'groups') == 'yes') {
+ $visibility = (int)get_input('vis', '', false);
+ if ($visibility != ACCESS_PUBLIC && $visibility != ACCESS_LOGGED_IN) {
+ $visibility = $group->group_acl;
+ }
+
+ if ($group->access_id != $visibility) {
+ $group->access_id = $visibility;
+ }
+}
+
+$group->save();
+
+// group saved so clear sticky form
+elgg_clear_sticky_form('groups');
+
+// group creator needs to be member of new group and river entry created
+if ($is_new_group) {
+
+ // @todo this should not be necessary...
+ elgg_set_page_owner_guid($group->guid);
+
+ $group->join($user);
+ add_to_river('river/group/create', 'create', $user->guid, $group->guid, $group->access_id);
+}
+
+$has_uploaded_icon = (!empty($_FILES['icon']['type']) && substr_count($_FILES['icon']['type'], 'image/'));
+
+if ($has_uploaded_icon) {
+
+ $icon_sizes = elgg_get_config('icon_sizes');
+
+ $prefix = "groups/" . $group->guid;
+
+ $filehandler = new ElggFile();
+ $filehandler->owner_guid = $group->owner_guid;
+ $filehandler->setFilename($prefix . ".jpg");
+ $filehandler->open("write");
+ $filehandler->write(get_uploaded_file('icon'));
+ $filehandler->close();
+ $filename = $filehandler->getFilenameOnFilestore();
+
+ $sizes = array('tiny', 'small', 'medium', 'large');
+
+ $thumbs = array();
+ foreach ($sizes as $size) {
+ $thumbs[$size] = get_resized_image_from_existing_file(
+ $filename,
+ $icon_sizes[$size]['w'],
+ $icon_sizes[$size]['h'],
+ $icon_sizes[$size]['square']
+ );
+ }
+
+ if ($thumbs['tiny']) { // just checking if resize successful
+ $thumb = new ElggFile();
+ $thumb->owner_guid = $group->owner_guid;
+ $thumb->setMimeType('image/jpeg');
+
+ foreach ($sizes as $size) {
+ $thumb->setFilename("{$prefix}{$size}.jpg");
+ $thumb->open("write");
+ $thumb->write($thumbs[$size]);
+ $thumb->close();
+ }
+
+ $group->icontime = time();
+ }
+}
+
+// @todo Remove this when #4683 fixed
+if ($must_move_icons) {
+ $filehandler = new ElggFile();
+ $filehandler->setFilename('groups');
+ $filehandler->owner_guid = $old_owner_guid;
+ $old_path = $filehandler->getFilenameOnFilestore();
+
+ $sizes = array('', 'tiny', 'small', 'medium', 'large');
+
+ if ($has_uploaded_icon) {
+ // delete those under old owner
+ foreach ($sizes as $size) {
+ unlink("$old_path/{$group_guid}{$size}.jpg");
+ }
+ } else {
+ // move existing to new owner
+ $filehandler->owner_guid = $group->owner_guid;
+ $new_path = $filehandler->getFilenameOnFilestore();
+
+ foreach ($sizes as $size) {
+ rename("$old_path/{$group_guid}{$size}.jpg", "$new_path/{$group_guid}{$size}.jpg");
+ }
+ }
+}
+
+system_message(elgg_echo("groups:saved"));
+
+forward($group->getUrl());
diff --git a/mod/groups/actions/groups/featured.php b/mod/groups/actions/groups/featured.php
new file mode 100644
index 000000000..4cb9f8122
--- /dev/null
+++ b/mod/groups/actions/groups/featured.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Feature a group
+ *
+ * @package ElggGroups
+ */
+
+$group_guid = get_input('group_guid');
+$action = get_input('action_type');
+
+$group = get_entity($group_guid);
+
+if (!elgg_instanceof($group, 'group')) {
+ register_error(elgg_echo('groups:featured_error'));
+ forward(REFERER);
+}
+
+//get the action, is it to feature or unfeature
+if ($action == "feature") {
+ $group->featured_group = "yes";
+ system_message(elgg_echo('groups:featuredon', array($group->name)));
+} else {
+ $group->featured_group = "no";
+ system_message(elgg_echo('groups:unfeatured', array($group->name)));
+}
+
+forward(REFERER);
diff --git a/mod/groups/actions/groups/membership/add.php b/mod/groups/actions/groups/membership/add.php
new file mode 100644
index 000000000..de0cba613
--- /dev/null
+++ b/mod/groups/actions/groups/membership/add.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Add users to a group
+ *
+ * @package ElggGroups
+ */
+$logged_in_user = elgg_get_logged_in_user_entity();
+
+$user_guid = get_input('user_guid');
+if (!is_array($user_guid)) {
+ $user_guid = array($user_guid);
+}
+$group_guid = get_input('group_guid');
+$group = get_entity($group_guid);
+
+if (sizeof($user_guid)) {
+ foreach ($user_guid as $u_id) {
+ $user = get_user($u_id);
+
+ if ($user && $group && $group->canEdit()) {
+ if (!$group->isMember($user)) {
+ if (groups_join_group($group, $user)) {
+
+ // send welcome email to user
+ notify_user($user->getGUID(), $group->owner_guid,
+ elgg_echo('groups:welcome:subject', array($group->name)),
+ elgg_echo('groups:welcome:body', array(
+ $user->name,
+ $group->name,
+ $group->getURL())
+ ));
+
+ system_message(elgg_echo('groups:addedtogroup'));
+ } else {
+ // huh
+ }
+ }
+ }
+ }
+}
+
+forward(REFERER);
diff --git a/mod/groups/actions/groups/membership/delete_invite.php b/mod/groups/actions/groups/membership/delete_invite.php
new file mode 100644
index 000000000..d21aa0309
--- /dev/null
+++ b/mod/groups/actions/groups/membership/delete_invite.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Delete an invitation to join a group.
+ *
+ * @package ElggGroups
+ */
+
+$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid());
+$group_guid = get_input('group_guid');
+
+$user = get_entity($user_guid);
+
+// invisible groups require overriding access to delete invite
+$old_access = elgg_set_ignore_access(true);
+$group = get_entity($group_guid);
+elgg_set_ignore_access($old_access);
+
+// If join request made
+if (check_entity_relationship($group->guid, 'invited', $user->guid)) {
+ remove_entity_relationship($group->guid, 'invited', $user->guid);
+ system_message(elgg_echo("groups:invitekilled"));
+}
+
+forward(REFERER);
diff --git a/mod/groups/actions/groups/membership/delete_request.php b/mod/groups/actions/groups/membership/delete_request.php
new file mode 100644
index 000000000..883c9d748
--- /dev/null
+++ b/mod/groups/actions/groups/membership/delete_request.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Delete a request to join a closed group.
+ *
+ * @package ElggGroups
+ */
+
+$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid());
+$group_guid = get_input('group_guid');
+
+$user = get_entity($user_guid);
+$group = get_entity($group_guid);
+
+// If join request made
+if (check_entity_relationship($user->guid, 'membership_request', $group->guid)) {
+ remove_entity_relationship($user->guid, 'membership_request', $group->guid);
+ system_message(elgg_echo("groups:joinrequestkilled"));
+}
+
+forward(REFERER);
diff --git a/mod/groups/actions/groups/membership/invite.php b/mod/groups/actions/groups/membership/invite.php
new file mode 100644
index 000000000..db90ecf3a
--- /dev/null
+++ b/mod/groups/actions/groups/membership/invite.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Invite users to join a group
+ *
+ * @package ElggGroups
+ */
+
+$logged_in_user = elgg_get_logged_in_user_entity();
+
+$user_guid = get_input('user_guid');
+if (!is_array($user_guid)) {
+ $user_guid = array($user_guid);
+}
+$group_guid = get_input('group_guid');
+
+if (sizeof($user_guid)) {
+ foreach ($user_guid as $u_id) {
+ $user = get_entity($u_id);
+ $group = get_entity($group_guid);
+
+ if ($user && $group && ($group instanceof ElggGroup) && $group->canEdit()) {
+
+ if (!check_entity_relationship($group->guid, 'invited', $user->guid)) {
+
+ // Create relationship
+ add_entity_relationship($group->guid, 'invited', $user->guid);
+
+ // Send email
+ $url = elgg_normalize_url("groups/invitations/$user->username");
+ $result = notify_user($user->getGUID(), $group->owner_guid,
+ elgg_echo('groups:invite:subject', array($user->name, $group->name)),
+ elgg_echo('groups:invite:body', array(
+ $user->name,
+ $logged_in_user->name,
+ $group->name,
+ $url,
+ )),
+ NULL);
+ if ($result) {
+ system_message(elgg_echo("groups:userinvited"));
+ } else {
+ register_error(elgg_echo("groups:usernotinvited"));
+ }
+ } else {
+ register_error(elgg_echo("groups:useralreadyinvited"));
+ }
+ }
+ }
+}
+
+forward(REFERER);
diff --git a/mod/groups/actions/groups/membership/join.php b/mod/groups/actions/groups/membership/join.php
new file mode 100644
index 000000000..b4f4e280c
--- /dev/null
+++ b/mod/groups/actions/groups/membership/join.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Join a group
+ *
+ * Three states:
+ * open group so user joins
+ * closed group so request sent to group owner
+ * closed group with invite so user joins
+ *
+ * @package ElggGroups
+ */
+
+global $CONFIG;
+
+$user_guid = get_input('user_guid', elgg_get_logged_in_user_guid());
+$group_guid = get_input('group_guid');
+
+$user = get_entity($user_guid);
+
+// access bypass for getting invisible group
+$ia = elgg_set_ignore_access(true);
+$group = get_entity($group_guid);
+elgg_set_ignore_access($ia);
+
+if (($user instanceof ElggUser) && ($group instanceof ElggGroup)) {
+
+ // join or request
+ $join = false;
+ if ($group->isPublicMembership() || $group->canEdit($user->guid)) {
+ // anyone can join public groups and admins can join any group
+ $join = true;
+ } else {
+ if (check_entity_relationship($group->guid, 'invited', $user->guid)) {
+ // user has invite to closed group
+ $join = true;
+ }
+ }
+
+ if ($join) {
+ if (groups_join_group($group, $user)) {
+ system_message(elgg_echo("groups:joined"));
+ forward($group->getURL());
+ } else {
+ register_error(elgg_echo("groups:cantjoin"));
+ }
+ } else {
+ add_entity_relationship($user->guid, 'membership_request', $group->guid);
+
+ // Notify group owner
+ $url = "{$CONFIG->url}groups/requests/$group->guid";
+ $subject = elgg_echo('groups:request:subject', array(
+ $user->name,
+ $group->name,
+ ));
+ $body = elgg_echo('groups:request:body', array(
+ $group->getOwnerEntity()->name,
+ $user->name,
+ $group->name,
+ $user->getURL(),
+ $url,
+ ));
+ if (notify_user($group->owner_guid, $user->getGUID(), $subject, $body)) {
+ system_message(elgg_echo("groups:joinrequestmade"));
+ } else {
+ register_error(elgg_echo("groups:joinrequestnotmade"));
+ }
+ }
+} else {
+ register_error(elgg_echo("groups:cantjoin"));
+}
+
+forward(REFERER);
diff --git a/mod/groups/actions/groups/membership/leave.php b/mod/groups/actions/groups/membership/leave.php
new file mode 100644
index 000000000..4f34c7dde
--- /dev/null
+++ b/mod/groups/actions/groups/membership/leave.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Leave a group action.
+ *
+ * @package ElggGroups
+ */
+
+$user_guid = get_input('user_guid');
+$group_guid = get_input('group_guid');
+
+$user = NULL;
+if (!$user_guid) {
+ $user = elgg_get_logged_in_user_entity();
+} else {
+ $user = get_entity($user_guid);
+}
+
+$group = get_entity($group_guid);
+
+elgg_set_page_owner_guid($group->guid);
+
+if (($user instanceof ElggUser) && ($group instanceof ElggGroup)) {
+ if ($group->getOwnerGUID() != elgg_get_logged_in_user_guid()) {
+ if ($group->leave($user)) {
+ system_message(elgg_echo("groups:left"));
+ } else {
+ register_error(elgg_echo("groups:cantleave"));
+ }
+ } else {
+ register_error(elgg_echo("groups:cantleave"));
+ }
+} else {
+ register_error(elgg_echo("groups:cantleave"));
+}
+
+forward(REFERER);
diff --git a/mod/groups/actions/groups/membership/remove.php b/mod/groups/actions/groups/membership/remove.php
new file mode 100644
index 000000000..650d35286
--- /dev/null
+++ b/mod/groups/actions/groups/membership/remove.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Remove a user from a group
+ *
+ * @package ElggGroups
+ */
+
+$user_guid = get_input('user_guid');
+$group_guid = get_input('group_guid');
+
+$user = get_entity($user_guid);
+$group = get_entity($group_guid);
+
+elgg_set_page_owner_guid($group->guid);
+
+if (($user instanceof ElggUser) && ($group instanceof ElggGroup) && $group->canEdit()) {
+ // Don't allow removing group owner
+ if ($group->getOwnerGUID() != $user->getGUID()) {
+ if ($group->leave($user)) {
+ system_message(elgg_echo("groups:removed", array($user->name)));
+ } else {
+ register_error(elgg_echo("groups:cantremove"));
+ }
+ } else {
+ register_error(elgg_echo("groups:cantremove"));
+ }
+} else {
+ register_error(elgg_echo("groups:cantremove"));
+}
+
+forward(REFERER);
diff --git a/mod/groups/graphics/defaultlarge.gif b/mod/groups/graphics/defaultlarge.gif
new file mode 100644
index 000000000..b0921b8d8
--- /dev/null
+++ b/mod/groups/graphics/defaultlarge.gif
Binary files differ
diff --git a/mod/groups/graphics/defaultmedium.gif b/mod/groups/graphics/defaultmedium.gif
new file mode 100644
index 000000000..ae230a3d7
--- /dev/null
+++ b/mod/groups/graphics/defaultmedium.gif
Binary files differ
diff --git a/mod/groups/graphics/defaultsmall.gif b/mod/groups/graphics/defaultsmall.gif
new file mode 100644
index 000000000..81d89110d
--- /dev/null
+++ b/mod/groups/graphics/defaultsmall.gif
Binary files differ
diff --git a/mod/groups/graphics/defaulttiny.gif b/mod/groups/graphics/defaulttiny.gif
new file mode 100644
index 000000000..86dc96ae4
--- /dev/null
+++ b/mod/groups/graphics/defaulttiny.gif
Binary files differ
diff --git a/mod/groups/icon.php b/mod/groups/icon.php
new file mode 100644
index 000000000..ebdc1eb6d
--- /dev/null
+++ b/mod/groups/icon.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Icon display
+ *
+ * @package ElggGroups
+ */
+
+require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+
+$group_guid = get_input('group_guid');
+
+/* @var ElggGroup $group */
+$group = get_entity($group_guid);
+if (!($group instanceof ElggGroup)) {
+ header("HTTP/1.1 404 Not Found");
+ exit;
+}
+
+// If is the same ETag, content didn't changed.
+$etag = $group->icontime . $group_guid;
+if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) == "\"$etag\"") {
+ header("HTTP/1.1 304 Not Modified");
+ exit;
+}
+
+$size = strtolower(get_input('size'));
+if (!in_array($size, array('large', 'medium', 'small', 'tiny', 'master', 'topbar')))
+ $size = "medium";
+
+$success = false;
+
+$filehandler = new ElggFile();
+$filehandler->owner_guid = $group->owner_guid;
+$filehandler->setFilename("groups/" . $group->guid . $size . ".jpg");
+
+$success = false;
+if ($filehandler->open("read")) {
+ if ($contents = $filehandler->read($filehandler->size())) {
+ $success = true;
+ }
+}
+
+if (!$success) {
+ $location = elgg_get_plugins_path() . "groups/graphics/default{$size}.gif";
+ $contents = @file_get_contents($location);
+}
+
+header("Content-type: image/jpeg");
+header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+10 days")), true);
+header("Pragma: public");
+header("Cache-Control: public");
+header("Content-Length: " . strlen($contents));
+header("ETag: \"$etag\"");
+echo $contents;
diff --git a/mod/groups/languages/en.php b/mod/groups/languages/en.php
new file mode 100644
index 000000000..9e0799b3a
--- /dev/null
+++ b/mod/groups/languages/en.php
@@ -0,0 +1,299 @@
+<?php
+/**
+ * Elgg groups plugin language pack
+ *
+ * @package ElggGroups
+ */
+
+$english = array(
+
+ /**
+ * Menu items and titles
+ */
+ 'groups' => "Groups",
+ 'groups:owned' => "Groups I own",
+ 'groups:owned:user' => 'Groups %s owns',
+ 'groups:yours' => "My groups",
+ 'groups:user' => "%s's groups",
+ 'groups:all' => "All groups",
+ 'groups:add' => "Create a new group",
+ 'groups:edit' => "Edit group",
+ 'groups:delete' => 'Delete group',
+ 'groups:membershiprequests' => 'Manage join requests',
+ 'groups:membershiprequests:pending' => 'Manage join requests (%s)',
+ 'groups:invitations' => 'Group invitations',
+ 'groups:invitations:pending' => 'Group invitations (%s)',
+
+ 'groups:icon' => 'Group icon (leave blank to leave unchanged)',
+ 'groups:name' => 'Group name',
+ 'groups:username' => 'Group short name (displayed in URLs, alphanumeric characters only)',
+ 'groups:description' => 'Description',
+ 'groups:briefdescription' => 'Brief description',
+ 'groups:interests' => 'Tags',
+ 'groups:website' => 'Website',
+ 'groups:members' => 'Group members',
+ 'groups:my_status' => 'My status',
+ 'groups:my_status:group_owner' => 'You own this group',
+ 'groups:my_status:group_member' => 'You are in this group',
+ 'groups:subscribed' => 'Group notifications on',
+ 'groups:unsubscribed' => 'Group notifications off',
+
+ 'groups:members:title' => 'Members of %s',
+ 'groups:members:more' => "View all members",
+ 'groups:membership' => "Group membership permissions",
+ 'groups:access' => "Access permissions",
+ 'groups:owner' => "Owner",
+ 'groups:owner:warning' => "Warning: if you change this value, you will no longer be the owner of this group.",
+ 'groups:widget:num_display' => 'Number of groups to display',
+ 'groups:widget:membership' => 'Group membership',
+ 'groups:widgets:description' => 'Display the groups you are a member of on your profile',
+ 'groups:noaccess' => 'No access to group',
+ 'groups:permissions:error' => 'You do not have the permissions for this',
+ 'groups:ingroup' => 'in the group',
+ 'groups:cantcreate' => 'You can not create a group. Only admins can.',
+ 'groups:cantedit' => 'You can not edit this group',
+ 'groups:saved' => 'Group saved',
+ 'groups:featured' => 'Featured groups',
+ 'groups:makeunfeatured' => 'Unfeature',
+ 'groups:makefeatured' => 'Make featured',
+ 'groups:featuredon' => '%s is now a featured group.',
+ 'groups:unfeatured' => '%s has been removed from the featured groups.',
+ 'groups:featured_error' => 'Invalid group.',
+ 'groups:joinrequest' => 'Request membership',
+ 'groups:join' => 'Join group',
+ 'groups:leave' => 'Leave group',
+ 'groups:invite' => 'Invite friends',
+ 'groups:invite:title' => 'Invite friends to this group',
+ 'groups:inviteto' => "Invite friends to '%s'",
+ 'groups:nofriends' => "You have no friends left who have not been invited to this group.",
+ 'groups:nofriendsatall' => 'You have no friends to invite!',
+ 'groups:viagroups' => "via groups",
+ 'groups:group' => "Group",
+ 'groups:search:tags' => "tag",
+ 'groups:search:title' => "Search for groups tagged with '%s'",
+ 'groups:search:none' => "No matching groups were found",
+ 'groups:search_in_group' => "Search in this group",
+ 'groups:acl' => "Group: %s",
+
+ 'discussion:notification:topic:subject' => 'New group discussion post',
+ 'groups:notification' =>
+'%s added a new discussion topic to %s:
+
+%s
+%s
+
+View and reply to the discussion:
+%s
+',
+
+ 'discussion:notification:reply:body' =>
+'%s replied to the discussion topic %s in the group %s:
+
+%s
+
+View and reply to the discussion:
+%s
+',
+
+ 'groups:activity' => "Group activity",
+ 'groups:enableactivity' => 'Enable group activity',
+ 'groups:activity:none' => "There is no group activity yet",
+
+ 'groups:notfound' => "Group not found",
+ 'groups:notfound:details' => "The requested group either does not exist or you do not have access to it",
+
+ 'groups:requests:none' => 'There are no current membership requests.',
+
+ 'groups:invitations:none' => 'There are no current invitations.',
+
+ 'item:object:groupforumtopic' => "Discussion topics",
+
+ 'groupforumtopic:new' => "Add discussion post",
+
+ 'groups:count' => "groups created",
+ 'groups:open' => "open group",
+ 'groups:closed' => "closed group",
+ 'groups:member' => "members",
+ 'groups:searchtag' => "Search for groups by tag",
+
+ 'groups:more' => 'More groups',
+ 'groups:none' => 'No groups',
+
+
+ /*
+ * Access
+ */
+ 'groups:access:private' => 'Closed - Users must be invited',
+ 'groups:access:public' => 'Open - Any user may join',
+ 'groups:access:group' => 'Group members only',
+ 'groups:closedgroup' => 'This group has a closed membership.',
+ 'groups:closedgroup:request' => 'To ask to be added, click the "request membership" menu link.',
+ 'groups:visibility' => 'Who can see this group?',
+
+ /*
+ Group tools
+ */
+ 'groups:enableforum' => 'Enable group discussion',
+ 'groups:yes' => 'yes',
+ 'groups:no' => 'no',
+ 'groups:lastupdated' => 'Last updated %s by %s',
+ 'groups:lastcomment' => 'Last comment %s by %s',
+
+ /*
+ Group discussion
+ */
+ 'discussion' => 'Discussion',
+ 'discussion:add' => 'Add discussion topic',
+ 'discussion:latest' => 'Latest discussion',
+ 'discussion:group' => 'Group discussion',
+ 'discussion:none' => 'No discussion',
+ 'discussion:reply:title' => 'Reply by %s',
+
+ 'discussion:topic:created' => 'The discussion topic was created.',
+ 'discussion:topic:updated' => 'The discussion topic was updated.',
+ 'discussion:topic:deleted' => 'Discussion topic has been deleted.',
+
+ 'discussion:topic:notfound' => 'Discussion topic not found',
+ 'discussion:error:notsaved' => 'Unable to save this topic',
+ 'discussion:error:missing' => 'Both title and message are required fields',
+ 'discussion:error:permissions' => 'You do not have permissions to perform this action',
+ 'discussion:error:notdeleted' => 'Could not delete the discussion topic',
+
+ 'discussion:reply:deleted' => 'Discussion reply has been deleted.',
+ 'discussion:reply:error:notdeleted' => 'Could not delete the discussion reply',
+
+ 'reply:this' => 'Reply to this',
+
+ 'group:replies' => 'Replies',
+ 'groups:forum:created' => 'Created %s with %d comments',
+ 'groups:forum:created:single' => 'Created %s with %d reply',
+ 'groups:forum' => 'Discussion',
+ 'groups:addtopic' => 'Add a topic',
+ 'groups:forumlatest' => 'Latest discussion',
+ 'groups:latestdiscussion' => 'Latest discussion',
+ 'groups:newest' => 'Newest',
+ 'groups:popular' => 'Popular',
+ 'groupspost:success' => 'Your reply was succesfully posted',
+ 'groups:alldiscussion' => 'Latest discussion',
+ 'groups:edittopic' => 'Edit topic',
+ 'groups:topicmessage' => 'Topic message',
+ 'groups:topicstatus' => 'Topic status',
+ 'groups:reply' => 'Post a comment',
+ 'groups:topic' => 'Topic',
+ 'groups:posts' => 'Posts',
+ 'groups:lastperson' => 'Last person',
+ 'groups:when' => 'When',
+ 'grouptopic:notcreated' => 'No topics have been created.',
+ 'groups:topicopen' => 'Open',
+ 'groups:topicclosed' => 'Closed',
+ 'groups:topicresolved' => 'Resolved',
+ 'grouptopic:created' => 'Your topic was created.',
+ 'groupstopic:deleted' => 'The topic has been deleted.',
+ 'groups:topicsticky' => 'Sticky',
+ 'groups:topicisclosed' => 'This discussion is closed.',
+ 'groups:topiccloseddesc' => 'This discussion is closed and is not accepting new comments.',
+ 'grouptopic:error' => 'Your group topic could not be created. Please try again or contact a system administrator.',
+ 'groups:forumpost:edited' => "You have successfully edited the forum post.",
+ 'groups:forumpost:error' => "There was a problem editing the forum post.",
+
+
+ 'groups:privategroup' => 'This group is closed. Requesting membership.',
+ 'groups:notitle' => 'Groups must have a title',
+ 'groups:cantjoin' => 'Can not join group',
+ 'groups:cantleave' => 'Could not leave group',
+ 'groups:removeuser' => 'Remove from group',
+ 'groups:cantremove' => 'Cannot remove user from group',
+ 'groups:removed' => 'Successfully removed %s from group',
+ 'groups:addedtogroup' => 'Successfully added the user to the group',
+ 'groups:joinrequestnotmade' => 'Could not request to join group',
+ 'groups:joinrequestmade' => 'Requested to join group',
+ 'groups:joined' => 'Successfully joined group!',
+ 'groups:left' => 'Successfully left group',
+ 'groups:notowner' => 'Sorry, you are not the owner of this group.',
+ 'groups:notmember' => 'Sorry, you are not a member of this group.',
+ 'groups:alreadymember' => 'You are already a member of this group!',
+ 'groups:userinvited' => 'User has been invited.',
+ 'groups:usernotinvited' => 'User could not be invited.',
+ 'groups:useralreadyinvited' => 'User has already been invited',
+ 'groups:invite:subject' => "%s you have been invited to join %s!",
+ 'groups:updated' => "Last reply by %s %s",
+ 'groups:started' => "Started by %s",
+ 'groups:joinrequest:remove:check' => 'Are you sure you want to remove this join request?',
+ 'groups:invite:remove:check' => 'Are you sure you want to remove this invitation?',
+ 'groups:invite:body' => "Hi %s,
+
+%s invited you to join the '%s' group. Click below to view your invitations:
+
+%s",
+
+ 'groups:welcome:subject' => "Welcome to the %s group!",
+ 'groups:welcome:body' => "Hi %s!
+
+You are now a member of the '%s' group! Click below to begin posting!
+
+%s",
+
+ 'groups:request:subject' => "%s has requested to join %s",
+ 'groups:request:body' => "Hi %s,
+
+%s has requested to join the '%s' group. Click below to view their profile:
+
+%s
+
+or click below to view the group's join requests:
+
+%s",
+
+ /*
+ Forum river items
+ */
+
+ 'river:create:group:default' => '%s created the group %s',
+ 'river:join:group:default' => '%s joined the group %s',
+ 'river:create:object:groupforumtopic' => '%s added a new discussion topic %s',
+ 'river:reply:object:groupforumtopic' => '%s replied on the discussion topic %s',
+
+ 'groups:nowidgets' => 'No widgets have been defined for this group.',
+
+
+ 'groups:widgets:members:title' => 'Group members',
+ 'groups:widgets:members:description' => 'List the members of a group.',
+ 'groups:widgets:members:label:displaynum' => 'List the members of a group.',
+ 'groups:widgets:members:label:pleaseedit' => 'Please configure this widget.',
+
+ 'groups:widgets:entities:title' => "Objects in group",
+ 'groups:widgets:entities:description' => "List the objects saved in this group",
+ 'groups:widgets:entities:label:displaynum' => 'List the objects of a group.',
+ 'groups:widgets:entities:label:pleaseedit' => 'Please configure this widget.',
+
+ 'groups:forumtopic:edited' => 'Forum topic successfully edited.',
+
+ 'groups:allowhiddengroups' => 'Do you want to allow private (invisible) groups?',
+ 'groups:whocancreate' => 'Who can create new groups?',
+
+ /**
+ * Action messages
+ */
+ 'group:deleted' => 'Group and group contents deleted',
+ 'group:notdeleted' => 'Group could not be deleted',
+
+ 'group:notfound' => 'Could not find the group',
+ 'grouppost:deleted' => 'Group posting successfully deleted',
+ 'grouppost:notdeleted' => 'Group posting could not be deleted',
+ 'groupstopic:deleted' => 'Topic deleted',
+ 'groupstopic:notdeleted' => 'Topic not deleted',
+ 'grouptopic:blank' => 'No topic',
+ 'grouptopic:notfound' => 'Could not find the topic',
+ 'grouppost:nopost' => 'Empty post',
+ 'groups:deletewarning' => "Are you sure you want to delete this group? There is no undo!",
+
+ 'groups:invitekilled' => 'The invite has been deleted.',
+ 'groups:joinrequestkilled' => 'The join request has been deleted.',
+
+ // ecml
+ 'groups:ecml:discussion' => 'Group Discussions',
+ 'groups:ecml:groupprofile' => 'Group profiles',
+
+);
+
+add_translation("en", $english);
diff --git a/mod/groups/lib/discussion.php b/mod/groups/lib/discussion.php
new file mode 100644
index 000000000..ab2fe4849
--- /dev/null
+++ b/mod/groups/lib/discussion.php
@@ -0,0 +1,236 @@
+<?php
+/**
+ * Discussion function library
+ */
+
+/**
+ * List all discussion topics
+ */
+function discussion_handle_all_page() {
+
+ elgg_pop_breadcrumb();
+ elgg_push_breadcrumb(elgg_echo('discussion'));
+
+ $content = elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'groupforumtopic',
+ 'order_by' => 'e.last_action desc',
+ 'limit' => 20,
+ 'full_view' => false,
+ ));
+
+ $params = array(
+ 'content' => $content,
+ 'title' => elgg_echo('discussion:latest'),
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * List discussion topics in a group
+ *
+ * @param int $guid Group entity GUID
+ */
+function discussion_handle_list_page($guid) {
+
+ elgg_set_page_owner_guid($guid);
+
+ $group = get_entity($guid);
+ if (!$group) {
+ register_error(elgg_echo('group:notfound'));
+ forward();
+ }
+ elgg_push_breadcrumb($group->name);
+
+ elgg_register_title_button();
+
+ group_gatekeeper();
+
+ $title = elgg_echo('item:object:groupforumtopic');
+
+ $options = array(
+ 'type' => 'object',
+ 'subtype' => 'groupforumtopic',
+ 'limit' => 20,
+ 'order_by' => 'e.last_action desc',
+ 'container_guid' => $guid,
+ 'full_view' => false,
+ );
+ $content = elgg_list_entities($options);
+ if (!$content) {
+ $content = elgg_echo('discussion:none');
+ }
+
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * Edit or add a discussion topic
+ *
+ * @param string $type 'add' or 'edit'
+ * @param int $guid GUID of group or topic
+ */
+function discussion_handle_edit_page($type, $guid) {
+ gatekeeper();
+
+ if ($type == 'add') {
+ $group = get_entity($guid);
+ if (!$group) {
+ register_error(elgg_echo('group:notfound'));
+ forward();
+ }
+
+ // make sure user has permissions to add a topic to container
+ if (!$group->canWriteToContainer(0, 'object', 'groupforumtopic')) {
+ register_error(elgg_echo('groups:permissions:error'));
+ forward($group->getURL());
+ }
+
+ $title = elgg_echo('groups:addtopic');
+
+ elgg_push_breadcrumb($group->name, "discussion/owner/$group->guid");
+ elgg_push_breadcrumb($title);
+
+ $body_vars = discussion_prepare_form_vars();
+ $content = elgg_view_form('discussion/save', array(), $body_vars);
+ } else {
+ $topic = get_entity($guid);
+ if (!$topic || !$topic->canEdit()) {
+ register_error(elgg_echo('discussion:topic:notfound'));
+ forward();
+ }
+ $group = $topic->getContainerEntity();
+ if (!$group) {
+ register_error(elgg_echo('group:notfound'));
+ forward();
+ }
+
+ $title = elgg_echo('groups:edittopic');
+
+ elgg_push_breadcrumb($group->name, "discussion/owner/$group->guid");
+ elgg_push_breadcrumb($topic->title, $topic->getURL());
+ elgg_push_breadcrumb($title);
+
+ $body_vars = discussion_prepare_form_vars($topic);
+ $content = elgg_view_form('discussion/save', array(), $body_vars);
+ }
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * View a discussion topic
+ *
+ * @param int $guid GUID of topic
+ */
+function discussion_handle_view_page($guid) {
+ // We now have RSS on topics
+ global $autofeed;
+ $autofeed = true;
+
+ $topic = get_entity($guid);
+ if (!$topic) {
+ register_error(elgg_echo('noaccess'));
+ $_SESSION['last_forward_from'] = current_page_url();
+ forward('');
+ }
+
+ $group = $topic->getContainerEntity();
+ if (!$group) {
+ register_error(elgg_echo('group:notfound'));
+ forward();
+ }
+
+ elgg_set_page_owner_guid($group->getGUID());
+
+ group_gatekeeper();
+
+ elgg_push_breadcrumb($group->name, "discussion/owner/$group->guid");
+ elgg_push_breadcrumb($topic->title);
+
+ $content = elgg_view_entity($topic, array('full_view' => true));
+ if ($topic->status == 'closed') {
+ $content .= elgg_view('discussion/replies', array(
+ 'entity' => $topic,
+ 'show_add_form' => false,
+ ));
+ $content .= elgg_view('discussion/closed');
+ } elseif ($group->canWriteToContainer(0, 'object', 'groupforumtopic') || elgg_is_admin_logged_in()) {
+ $content .= elgg_view('discussion/replies', array(
+ 'entity' => $topic,
+ 'show_add_form' => true,
+ ));
+ } else {
+ $content .= elgg_view('discussion/replies', array(
+ 'entity' => $topic,
+ 'show_add_form' => false,
+ ));
+ }
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $topic->title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($topic->title, $body);
+}
+
+/**
+ * Prepare discussion topic form variables
+ *
+ * @param ElggObject $topic Topic object if editing
+ * @return array
+ */
+function discussion_prepare_form_vars($topic = NULL) {
+ // input names => defaults
+ $values = array(
+ 'title' => '',
+ 'description' => '',
+ 'status' => '',
+ 'access_id' => ACCESS_DEFAULT,
+ 'tags' => '',
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'guid' => null,
+ 'entity' => $topic,
+ );
+
+ if ($topic) {
+ foreach (array_keys($values) as $field) {
+ if (isset($topic->$field)) {
+ $values[$field] = $topic->$field;
+ }
+ }
+ }
+
+ if (elgg_is_sticky_form('topic')) {
+ $sticky_values = elgg_get_sticky_values('topic');
+ foreach ($sticky_values as $key => $value) {
+ $values[$key] = $value;
+ }
+ }
+
+ elgg_clear_sticky_form('topic');
+
+ return $values;
+}
diff --git a/mod/groups/lib/groups.php b/mod/groups/lib/groups.php
new file mode 100644
index 000000000..d8d0f568d
--- /dev/null
+++ b/mod/groups/lib/groups.php
@@ -0,0 +1,580 @@
+<?php
+/**
+ * Groups function library
+ */
+
+/**
+ * List all groups
+ */
+function groups_handle_all_page() {
+
+ // all groups doesn't get link to self
+ elgg_pop_breadcrumb();
+ elgg_push_breadcrumb(elgg_echo('groups'));
+
+ if (elgg_get_plugin_setting('limited_groups', 'groups') != 'yes' || elgg_is_admin_logged_in()) {
+ elgg_register_title_button();
+ }
+
+ $selected_tab = get_input('filter', 'newest');
+
+ switch ($selected_tab) {
+ case 'popular':
+ $content = elgg_list_entities_from_relationship_count(array(
+ 'type' => 'group',
+ 'relationship' => 'member',
+ 'inverse_relationship' => false,
+ 'full_view' => false,
+ ));
+ if (!$content) {
+ $content = elgg_echo('groups:none');
+ }
+ break;
+ case 'discussion':
+ $content = elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'groupforumtopic',
+ 'order_by' => 'e.last_action desc',
+ 'limit' => 40,
+ 'full_view' => false,
+ ));
+ if (!$content) {
+ $content = elgg_echo('discussion:none');
+ }
+ break;
+ case 'newest':
+ default:
+ $content = elgg_list_entities(array(
+ 'type' => 'group',
+ 'full_view' => false,
+ ));
+ if (!$content) {
+ $content = elgg_echo('groups:none');
+ }
+ break;
+ }
+
+ $filter = elgg_view('groups/group_sort_menu', array('selected' => $selected_tab));
+
+ $sidebar = elgg_view('groups/sidebar/find');
+ $sidebar .= elgg_view('groups/sidebar/featured');
+
+ $params = array(
+ 'content' => $content,
+ 'sidebar' => $sidebar,
+ 'filter' => $filter,
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page(elgg_echo('groups:all'), $body);
+}
+
+function groups_search_page() {
+ elgg_push_breadcrumb(elgg_echo('search'));
+
+ $tag = get_input("tag");
+ $title = elgg_echo('groups:search:title', array($tag));
+
+ // groups plugin saves tags as "interests" - see groups_fields_setup() in start.php
+ $params = array(
+ 'metadata_name' => 'interests',
+ 'metadata_value' => $tag,
+ 'types' => 'group',
+ 'full_view' => FALSE,
+ );
+ $content = elgg_list_entities_from_metadata($params);
+ if (!$content) {
+ $content = elgg_echo('groups:search:none');
+ }
+
+ $sidebar = elgg_view('groups/sidebar/find');
+ $sidebar .= elgg_view('groups/sidebar/featured');
+
+ $params = array(
+ 'content' => $content,
+ 'sidebar' => $sidebar,
+ 'filter' => false,
+ 'title' => $title,
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * List owned groups
+ */
+function groups_handle_owned_page() {
+
+ $page_owner = elgg_get_page_owner_entity();
+
+ if ($page_owner->guid == elgg_get_logged_in_user_guid()) {
+ $title = elgg_echo('groups:owned');
+ } else {
+ $title = elgg_echo('groups:owned:user', array($page_owner->name));
+ }
+ elgg_push_breadcrumb($title);
+
+ elgg_register_title_button();
+
+ $content = elgg_list_entities(array(
+ 'type' => 'group',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+ 'full_view' => false,
+ ));
+ if (!$content) {
+ $content = elgg_echo('groups:none');
+ }
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * List groups the user is memober of
+ */
+function groups_handle_mine_page() {
+
+ $page_owner = elgg_get_page_owner_entity();
+
+ if ($page_owner->guid == elgg_get_logged_in_user_guid()) {
+ $title = elgg_echo('groups:yours');
+ } else {
+ $title = elgg_echo('groups:user', array($page_owner->name));
+ }
+ elgg_push_breadcrumb($title);
+
+ elgg_register_title_button();
+
+ $content = elgg_list_entities_from_relationship(array(
+ 'type' => 'group',
+ 'relationship' => 'member',
+ 'relationship_guid' => elgg_get_page_owner_guid(),
+ 'inverse_relationship' => false,
+ 'full_view' => false,
+ ));
+ if (!$content) {
+ $content = elgg_echo('groups:none');
+ }
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * Create or edit a group
+ *
+ * @param string $page
+ * @param int $guid
+ */
+function groups_handle_edit_page($page, $guid = 0) {
+ gatekeeper();
+
+ if ($page == 'add') {
+ elgg_set_page_owner_guid(elgg_get_logged_in_user_guid());
+ $title = elgg_echo('groups:add');
+ elgg_push_breadcrumb($title);
+ if (elgg_get_plugin_setting('limited_groups', 'groups') != 'yes' || elgg_is_admin_logged_in()) {
+ $content = elgg_view('groups/edit');
+ } else {
+ $content = elgg_echo('groups:cantcreate');
+ }
+ } else {
+ $title = elgg_echo("groups:edit");
+ $group = get_entity($guid);
+
+ if ($group && $group->canEdit()) {
+ elgg_set_page_owner_guid($group->getGUID());
+ elgg_push_breadcrumb($group->name, $group->getURL());
+ elgg_push_breadcrumb($title);
+ $content = elgg_view("groups/edit", array('entity' => $group));
+ } else {
+ $content = elgg_echo('groups:noaccess');
+ }
+ }
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * Group invitations for a user
+ */
+function groups_handle_invitations_page() {
+ gatekeeper();
+
+ $user = elgg_get_page_owner_entity();
+
+ $title = elgg_echo('groups:invitations');
+ elgg_push_breadcrumb($title);
+
+ // @todo temporary workaround for exts #287.
+ $invitations = groups_get_invited_groups(elgg_get_logged_in_user_guid());
+ $content = elgg_view('groups/invitationrequests', array('invitations' => $invitations));
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * Group profile page
+ *
+ * @param int $guid Group entity GUID
+ */
+function groups_handle_profile_page($guid) {
+ elgg_set_page_owner_guid($guid);
+
+ // turn this into a core function
+ global $autofeed;
+ $autofeed = true;
+
+ elgg_push_context('group_profile');
+
+ $group = get_entity($guid);
+ if (!$group) {
+ forward('groups/all');
+ }
+
+ elgg_push_breadcrumb($group->name);
+
+ groups_register_profile_buttons($group);
+
+ $content = elgg_view('groups/profile/layout', array('entity' => $group));
+ $sidebar = '';
+
+ if (group_gatekeeper(false)) {
+ if (elgg_is_active_plugin('search')) {
+ $sidebar .= elgg_view('groups/sidebar/search', array('entity' => $group));
+ }
+ $sidebar .= elgg_view('groups/sidebar/members', array('entity' => $group));
+
+ $subscribed = false;
+ if (elgg_is_active_plugin('notifications')) {
+ global $NOTIFICATION_HANDLERS;
+
+ foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+ $relationship = check_entity_relationship(elgg_get_logged_in_user_guid(),
+ 'notify' . $method, $guid);
+
+ if ($relationship) {
+ $subscribed = true;
+ break;
+ }
+ }
+ }
+
+ $sidebar .= elgg_view('groups/sidebar/my_status', array(
+ 'entity' => $group,
+ 'subscribed' => $subscribed
+ ));
+ }
+
+ $params = array(
+ 'content' => $content,
+ 'sidebar' => $sidebar,
+ 'title' => $group->name,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($group->name, $body);
+}
+
+/**
+ * Group activity page
+ *
+ * @param int $guid Group entity GUID
+ */
+function groups_handle_activity_page($guid) {
+
+ elgg_set_page_owner_guid($guid);
+
+ $group = get_entity($guid);
+ if (!$group || !elgg_instanceof($group, 'group')) {
+ forward();
+ }
+
+ group_gatekeeper();
+
+ $title = elgg_echo('groups:activity');
+
+ elgg_push_breadcrumb($group->name, $group->getURL());
+ elgg_push_breadcrumb($title);
+
+ $db_prefix = elgg_get_config('dbprefix');
+
+ $content = elgg_list_river(array(
+ 'joins' => array("JOIN {$db_prefix}entities e ON e.guid = rv.object_guid"),
+ 'wheres' => array("e.container_guid = $guid")
+ ));
+ if (!$content) {
+ $content = '<p>' . elgg_echo('groups:activity:none') . '</p>';
+ }
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * Group members page
+ *
+ * @param int $guid Group entity GUID
+ */
+function groups_handle_members_page($guid) {
+
+ elgg_set_page_owner_guid($guid);
+
+ $group = get_entity($guid);
+ if (!$group || !elgg_instanceof($group, 'group')) {
+ forward();
+ }
+
+ group_gatekeeper();
+
+ $title = elgg_echo('groups:members:title', array($group->name));
+
+ elgg_push_breadcrumb($group->name, $group->getURL());
+ elgg_push_breadcrumb(elgg_echo('groups:members'));
+
+ $content = elgg_list_entities_from_relationship(array(
+ 'relationship' => 'member',
+ 'relationship_guid' => $group->guid,
+ 'inverse_relationship' => true,
+ 'types' => 'user',
+ 'limit' => 20,
+ ));
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * Invite users to a group
+ *
+ * @param int $guid Group entity GUID
+ */
+function groups_handle_invite_page($guid) {
+ gatekeeper();
+
+ elgg_set_page_owner_guid($guid);
+
+ $group = get_entity($guid);
+
+ $title = elgg_echo('groups:invite:title');
+
+ elgg_push_breadcrumb($group->name, $group->getURL());
+ elgg_push_breadcrumb(elgg_echo('groups:invite'));
+
+ if ($group && $group->canEdit()) {
+ $content = elgg_view_form('groups/invite', array(
+ 'id' => 'invite_to_group',
+ 'class' => 'elgg-form-alt mtm',
+ ), array(
+ 'entity' => $group,
+ ));
+ } else {
+ $content .= elgg_echo('groups:noaccess');
+ }
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * Manage requests to join a group
+ *
+ * @param int $guid Group entity GUID
+ */
+function groups_handle_requests_page($guid) {
+
+ gatekeeper();
+
+ elgg_set_page_owner_guid($guid);
+
+ $group = get_entity($guid);
+
+ $title = elgg_echo('groups:membershiprequests');
+
+ if ($group && $group->canEdit()) {
+ elgg_push_breadcrumb($group->name, $group->getURL());
+ elgg_push_breadcrumb($title);
+
+ $requests = elgg_get_entities_from_relationship(array(
+ 'type' => 'user',
+ 'relationship' => 'membership_request',
+ 'relationship_guid' => $guid,
+ 'inverse_relationship' => true,
+ 'limit' => 0,
+ ));
+ $content = elgg_view('groups/membershiprequests', array(
+ 'requests' => $requests,
+ 'entity' => $group,
+ ));
+
+ } else {
+ $content = elgg_echo("groups:noaccess");
+ }
+
+ $params = array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ );
+ $body = elgg_view_layout('content', $params);
+
+ echo elgg_view_page($title, $body);
+}
+
+/**
+ * Registers the buttons for title area of the group profile page
+ *
+ * @param ElggGroup $group
+ */
+function groups_register_profile_buttons($group) {
+
+ $actions = array();
+
+ // group owners
+ if ($group->canEdit()) {
+ // edit and invite
+ $url = elgg_get_site_url() . "groups/edit/{$group->getGUID()}";
+ $actions[$url] = 'groups:edit';
+ $url = elgg_get_site_url() . "groups/invite/{$group->getGUID()}";
+ $actions[$url] = 'groups:invite';
+ }
+
+ // group members
+ if ($group->isMember(elgg_get_logged_in_user_entity())) {
+ if ($group->getOwnerGUID() != elgg_get_logged_in_user_guid()) {
+ // leave
+ $url = elgg_get_site_url() . "action/groups/leave?group_guid={$group->getGUID()}";
+ $url = elgg_add_action_tokens_to_url($url);
+ $actions[$url] = 'groups:leave';
+ }
+ } elseif (elgg_is_logged_in()) {
+ // join - admins can always join.
+ $url = elgg_get_site_url() . "action/groups/join?group_guid={$group->getGUID()}";
+ $url = elgg_add_action_tokens_to_url($url);
+ if ($group->isPublicMembership() || $group->canEdit()) {
+ $actions[$url] = 'groups:join';
+ } else {
+ // request membership
+ $actions[$url] = 'groups:joinrequest';
+ }
+ }
+
+ if ($actions) {
+ foreach ($actions as $url => $text) {
+ elgg_register_menu_item('title', array(
+ 'name' => $text,
+ 'href' => $url,
+ 'text' => elgg_echo($text),
+ 'link_class' => 'elgg-button elgg-button-action',
+ ));
+ }
+ }
+}
+
+/**
+ * Prepares variables for the group edit form view.
+ *
+ * @param mixed $group ElggGroup or null. If a group, uses values from the group.
+ * @return array
+ */
+function groups_prepare_form_vars($group = null) {
+ $values = array(
+ 'name' => '',
+ 'membership' => ACCESS_PUBLIC,
+ 'vis' => ACCESS_PUBLIC,
+ 'guid' => null,
+ 'entity' => null
+ );
+
+ // handle customizable profile fields
+ $fields = elgg_get_config('group');
+
+ if ($fields) {
+ foreach ($fields as $name => $type) {
+ $values[$name] = '';
+ }
+ }
+
+ // handle tool options
+ $tools = elgg_get_config('group_tool_options');
+ if ($tools) {
+ foreach ($tools as $group_option) {
+ $option_name = $group_option->name . "_enable";
+ $values[$option_name] = $group_option->default_on ? 'yes' : 'no';
+ }
+ }
+
+ // get current group settings
+ if ($group) {
+ foreach (array_keys($values) as $field) {
+ if (isset($group->$field)) {
+ $values[$field] = $group->$field;
+ }
+ }
+
+ if ($group->access_id != ACCESS_PUBLIC && $group->access_id != ACCESS_LOGGED_IN) {
+ // group only access - this is done to handle access not created when group is created
+ $values['vis'] = ACCESS_PRIVATE;
+ }
+
+ $values['entity'] = $group;
+ }
+
+ // get any sticky form settings
+ if (elgg_is_sticky_form('groups')) {
+ $sticky_values = elgg_get_sticky_values('groups');
+ foreach ($sticky_values as $key => $value) {
+ $values[$key] = $value;
+ }
+ }
+
+ elgg_clear_sticky_form('groups');
+
+ return $values;
+}
diff --git a/mod/groups/manifest.xml b/mod/groups/manifest.xml
new file mode 100644
index 000000000..fd28360d0
--- /dev/null
+++ b/mod/groups/manifest.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Groups</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>social</category>
+ <category>widget</category>
+ <description>Provides group support for elgg</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/groups/start.php b/mod/groups/start.php
new file mode 100644
index 000000000..4e49d9e55
--- /dev/null
+++ b/mod/groups/start.php
@@ -0,0 +1,1069 @@
+<?php
+/**
+ * Elgg groups plugin
+ *
+ * @package ElggGroups
+ */
+
+elgg_register_event_handler('init', 'system', 'groups_init');
+
+// Ensure this runs after other plugins
+elgg_register_event_handler('init', 'system', 'groups_fields_setup', 10000);
+
+/**
+ * Initialize the groups plugin.
+ */
+function groups_init() {
+
+ elgg_register_library('elgg:groups', elgg_get_plugins_path() . 'groups/lib/groups.php');
+
+ // register group entities for search
+ elgg_register_entity_type('group', '');
+
+ // Set up the menu
+ $item = new ElggMenuItem('groups', elgg_echo('groups'), 'groups/all');
+ elgg_register_menu_item('site', $item);
+
+ // Register a page handler, so we can have nice URLs
+ elgg_register_page_handler('groups', 'groups_page_handler');
+
+ // Register URL handlers for groups
+ elgg_register_entity_url_handler('group', 'all', 'groups_url');
+ elgg_register_plugin_hook_handler('entity:icon:url', 'group', 'groups_icon_url_override');
+
+ // Register an icon handler for groups
+ elgg_register_page_handler('groupicon', 'groups_icon_handler');
+
+ // Register some actions
+ $action_base = elgg_get_plugins_path() . 'groups/actions/groups';
+ elgg_register_action("groups/edit", "$action_base/edit.php");
+ elgg_register_action("groups/delete", "$action_base/delete.php");
+ elgg_register_action("groups/featured", "$action_base/featured.php", 'admin');
+
+ $action_base .= '/membership';
+ elgg_register_action("groups/invite", "$action_base/invite.php");
+ elgg_register_action("groups/join", "$action_base/join.php");
+ elgg_register_action("groups/leave", "$action_base/leave.php");
+ elgg_register_action("groups/remove", "$action_base/remove.php");
+ elgg_register_action("groups/killrequest", "$action_base/delete_request.php");
+ elgg_register_action("groups/killinvitation", "$action_base/delete_invite.php");
+ elgg_register_action("groups/addtogroup", "$action_base/add.php");
+
+ // Add some widgets
+ elgg_register_widget_type('a_users_groups', elgg_echo('groups:widget:membership'), elgg_echo('groups:widgets:description'));
+
+ // add group activity tool option
+ add_group_tool_option('activity', elgg_echo('groups:enableactivity'), true);
+ elgg_extend_view('groups/tool_latest', 'groups/profile/activity_module');
+
+ // add link to owner block
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'groups_activity_owner_block_menu');
+
+ // group entity menu
+ elgg_register_plugin_hook_handler('register', 'menu:entity', 'groups_entity_menu_setup');
+
+ // group user hover menu
+ elgg_register_plugin_hook_handler('register', 'menu:user_hover', 'groups_user_entity_menu_setup');
+
+ // delete and edit annotations for topic replies
+ elgg_register_plugin_hook_handler('register', 'menu:annotation', 'groups_annotation_menu_setup');
+
+ //extend some views
+ elgg_extend_view('css/elgg', 'groups/css');
+ elgg_extend_view('js/elgg', 'groups/js');
+
+ // Access permissions
+ elgg_register_plugin_hook_handler('access:collections:write', 'all', 'groups_write_acl_plugin_hook');
+ //elgg_register_plugin_hook_handler('access:collections:read', 'all', 'groups_read_acl_plugin_hook');
+
+ // Register profile menu hook
+ elgg_register_plugin_hook_handler('profile_menu', 'profile', 'forum_profile_menu');
+ elgg_register_plugin_hook_handler('profile_menu', 'profile', 'activity_profile_menu');
+
+ // allow ecml in discussion and profiles
+ elgg_register_plugin_hook_handler('get_views', 'ecml', 'groups_ecml_views_hook');
+ elgg_register_plugin_hook_handler('get_views', 'ecml', 'groupprofile_ecml_views_hook');
+
+ // Register a handler for create groups
+ elgg_register_event_handler('create', 'group', 'groups_create_event_listener');
+
+ // Register a handler for delete groups
+ elgg_register_event_handler('delete', 'group', 'groups_delete_event_listener');
+
+ elgg_register_event_handler('join', 'group', 'groups_user_join_event_listener');
+ elgg_register_event_handler('leave', 'group', 'groups_user_leave_event_listener');
+ elgg_register_event_handler('pagesetup', 'system', 'groups_setup_sidebar_menus');
+
+ elgg_register_plugin_hook_handler('access:collections:add_user', 'collection', 'groups_access_collection_override');
+
+ elgg_register_event_handler('upgrade', 'system', 'groups_run_upgrades');
+}
+
+/**
+ * This function loads a set of default fields into the profile, then triggers
+ * a hook letting other plugins to edit add and delete fields.
+ *
+ * Note: This is a system:init event triggered function and is run at a super
+ * low priority to guarantee that it is called after all other plugins have
+ * initialized.
+ */
+function groups_fields_setup() {
+
+ $profile_defaults = array(
+ 'description' => 'longtext',
+ 'briefdescription' => 'text',
+ 'interests' => 'tags',
+ //'website' => 'url',
+ );
+
+ $profile_defaults = elgg_trigger_plugin_hook('profile:fields', 'group', NULL, $profile_defaults);
+
+ elgg_set_config('group', $profile_defaults);
+
+ // register any tag metadata names
+ foreach ($profile_defaults as $name => $type) {
+ if ($type == 'tags') {
+ elgg_register_tag_metadata_name($name);
+
+ // only shows up in search but why not just set this in en.php as doing it here
+ // means you cannot override it in a plugin
+ add_translation(get_current_language(), array("tag_names:$name" => elgg_echo("groups:$name")));
+ }
+ }
+}
+
+/**
+ * Configure the groups sidebar menu. Triggered on page setup
+ *
+ */
+function groups_setup_sidebar_menus() {
+
+ // Get the page owner entity
+ $page_owner = elgg_get_page_owner_entity();
+
+ if (elgg_in_context('group_profile')) {
+ if (elgg_is_logged_in() && $page_owner->canEdit() && !$page_owner->isPublicMembership()) {
+ $url = elgg_get_site_url() . "groups/requests/{$page_owner->getGUID()}";
+
+ $count = elgg_get_entities_from_relationship(array(
+ 'type' => 'user',
+ 'relationship' => 'membership_request',
+ 'relationship_guid' => $guid,
+ 'inverse_relationship' => true,
+ 'count' => true,
+ ));
+
+ if ($count) {
+ $text = elgg_echo('groups:membershiprequests:pending', array($count));
+ } else {
+ $text = elgg_echo('groups:membershiprequests');
+ }
+
+ elgg_register_menu_item('page', array(
+ 'name' => 'membership_requests',
+ 'text' => $text,
+ 'href' => $url,
+ ));
+ }
+ }
+ if (elgg_get_context() == 'groups' && !elgg_instanceof($page_owner, 'group')) {
+ elgg_register_menu_item('page', array(
+ 'name' => 'groups:all',
+ 'text' => elgg_echo('groups:all'),
+ 'href' => 'groups/all',
+ ));
+
+ $user = elgg_get_logged_in_user_entity();
+ if ($user) {
+ $url = "groups/owner/$user->username";
+ $item = new ElggMenuItem('groups:owned', elgg_echo('groups:owned'), $url);
+ elgg_register_menu_item('page', $item);
+
+ $url = "groups/member/$user->username";
+ $item = new ElggMenuItem('groups:member', elgg_echo('groups:yours'), $url);
+ elgg_register_menu_item('page', $item);
+
+ $url = "groups/invitations/$user->username";
+ $invitations = groups_get_invited_groups($user->getGUID());
+ if (is_array($invitations) && !empty($invitations)) {
+ $invitation_count = count($invitations);
+ $text = elgg_echo('groups:invitations:pending', array($invitation_count));
+ } else {
+ $text = elgg_echo('groups:invitations');
+ }
+
+ $item = new ElggMenuItem('groups:user:invites', $text, $url);
+ elgg_register_menu_item('page', $item);
+ }
+ }
+}
+
+/**
+ * Groups page handler
+ *
+ * URLs take the form of
+ * All groups: groups/all
+ * User's owned groups: groups/owner/<username>
+ * User's member groups: groups/member/<username>
+ * Group profile: groups/profile/<guid>/<title>
+ * New group: groups/add/<guid>
+ * Edit group: groups/edit/<guid>
+ * Group invitations: groups/invitations/<username>
+ * Invite to group: groups/invite/<guid>
+ * Membership requests: groups/requests/<guid>
+ * Group activity: groups/activity/<guid>
+ * Group members: groups/members/<guid>
+ *
+ * @param array $page Array of url segments for routing
+ * @return bool
+ */
+function groups_page_handler($page) {
+
+ // forward old profile urls
+ if (is_numeric($page[0])) {
+ $group = get_entity($page[0]);
+ if (elgg_instanceof($group, 'group', '', 'ElggGroup')) {
+ system_message(elgg_echo('changebookmark'));
+ forward($group->getURL());
+ }
+ }
+
+ elgg_load_library('elgg:groups');
+
+ if (!isset($page[0])) {
+ $page[0] = 'all';
+ }
+
+ elgg_push_breadcrumb(elgg_echo('groups'), "groups/all");
+
+ switch ($page[0]) {
+ case 'all':
+ groups_handle_all_page();
+ break;
+ case 'search':
+ groups_search_page();
+ break;
+ case 'owner':
+ groups_handle_owned_page();
+ break;
+ case 'member':
+ set_input('username', $page[1]);
+ groups_handle_mine_page();
+ break;
+ case 'invitations':
+ set_input('username', $page[1]);
+ groups_handle_invitations_page();
+ break;
+ case 'add':
+ groups_handle_edit_page('add');
+ break;
+ case 'edit':
+ groups_handle_edit_page('edit', $page[1]);
+ break;
+ case 'profile':
+ groups_handle_profile_page($page[1]);
+ break;
+ case 'activity':
+ groups_handle_activity_page($page[1]);
+ break;
+ case 'members':
+ groups_handle_members_page($page[1]);
+ break;
+ case 'invite':
+ groups_handle_invite_page($page[1]);
+ break;
+ case 'requests':
+ groups_handle_requests_page($page[1]);
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Handle group icons.
+ *
+ * @param array $page
+ * @return void
+ */
+function groups_icon_handler($page) {
+
+ // The username should be the file we're getting
+ if (isset($page[0])) {
+ set_input('group_guid', $page[0]);
+ }
+ if (isset($page[1])) {
+ set_input('size', $page[1]);
+ }
+ // Include the standard profile index
+ $plugin_dir = elgg_get_plugins_path();
+ include("$plugin_dir/groups/icon.php");
+ return true;
+}
+
+/**
+ * Populates the ->getUrl() method for group objects
+ *
+ * @param ElggEntity $entity File entity
+ * @return string File URL
+ */
+function groups_url($entity) {
+ $title = elgg_get_friendly_title($entity->name);
+
+ return "groups/profile/{$entity->guid}/$title";
+}
+
+/**
+ * Override the default entity icon for groups
+ *
+ * @return string Relative URL
+ */
+function groups_icon_url_override($hook, $type, $returnvalue, $params) {
+ /* @var ElggGroup $group */
+ $group = $params['entity'];
+ $size = $params['size'];
+
+ $icontime = $group->icontime;
+ // handle missing metadata (pre 1.7 installations)
+ if (null === $icontime) {
+ $file = new ElggFile();
+ $file->owner_guid = $group->owner_guid;
+ $file->setFilename("groups/" . $group->guid . "large.jpg");
+ $icontime = $file->exists() ? time() : 0;
+ create_metadata($group->guid, 'icontime', $icontime, 'integer', $group->owner_guid, ACCESS_PUBLIC);
+ }
+ if ($icontime) {
+ // return thumbnail
+ return "groupicon/$group->guid/$size/$icontime.jpg";
+ }
+
+ return "mod/groups/graphics/default{$size}.gif";
+}
+
+/**
+ * Add owner block link
+ */
+function groups_activity_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'group')) {
+ if ($params['entity']->activity_enable != "no") {
+ $url = "groups/activity/{$params['entity']->guid}";
+ $item = new ElggMenuItem('activity', elgg_echo('groups:activity'), $url);
+ $return[] = $item;
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Add links/info to entity menu particular to group entities
+ */
+function groups_entity_menu_setup($hook, $type, $return, $params) {
+ if (elgg_in_context('widgets')) {
+ return $return;
+ }
+
+ $entity = $params['entity'];
+ $handler = elgg_extract('handler', $params, false);
+ if ($handler != 'groups') {
+ return $return;
+ }
+
+ foreach ($return as $index => $item) {
+ if (in_array($item->getName(), array('access', 'likes', 'edit', 'delete'))) {
+ unset($return[$index]);
+ }
+ }
+
+ // membership type
+ $membership = $entity->membership;
+ if ($membership == ACCESS_PUBLIC) {
+ $mem = elgg_echo("groups:open");
+ } else {
+ $mem = elgg_echo("groups:closed");
+ }
+ $options = array(
+ 'name' => 'membership',
+ 'text' => $mem,
+ 'href' => false,
+ 'priority' => 100,
+ );
+ $return[] = ElggMenuItem::factory($options);
+
+ // number of members
+ $num_members = get_group_members($entity->guid, 10, 0, 0, true);
+ $members_string = elgg_echo('groups:member');
+ $options = array(
+ 'name' => 'members',
+ 'text' => $num_members . ' ' . $members_string,
+ 'href' => false,
+ 'priority' => 200,
+ );
+ $return[] = ElggMenuItem::factory($options);
+
+ // feature link
+ if (elgg_is_admin_logged_in()) {
+ if ($entity->featured_group == "yes") {
+ $url = "action/groups/featured?group_guid={$entity->guid}&action_type=unfeature";
+ $wording = elgg_echo("groups:makeunfeatured");
+ } else {
+ $url = "action/groups/featured?group_guid={$entity->guid}&action_type=feature";
+ $wording = elgg_echo("groups:makefeatured");
+ }
+ $options = array(
+ 'name' => 'feature',
+ 'text' => $wording,
+ 'href' => $url,
+ 'priority' => 300,
+ 'is_action' => true
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+
+ return $return;
+}
+
+/**
+ * Add a remove user link to user hover menu when the page owner is a group
+ */
+function groups_user_entity_menu_setup($hook, $type, $return, $params) {
+ if (elgg_is_logged_in()) {
+ $group = elgg_get_page_owner_entity();
+
+ // Check for valid group
+ if (!elgg_instanceof($group, 'group')) {
+ return $return;
+ }
+
+ $entity = $params['entity'];
+
+ // Make sure we have a user and that user is a member of the group
+ if (!elgg_instanceof($entity, 'user') || !$group->isMember($entity)) {
+ return $return;
+ }
+
+ // Add remove link if we can edit the group, and if we're not trying to remove the group owner
+ if ($group->canEdit() && $group->getOwnerGUID() != $entity->guid) {
+ $remove = elgg_view('output/confirmlink', array(
+ 'href' => "action/groups/remove?user_guid={$entity->guid}&group_guid={$group->guid}",
+ 'text' => elgg_echo('groups:removeuser'),
+ ));
+
+ $options = array(
+ 'name' => 'removeuser',
+ 'text' => $remove,
+ 'priority' => 999,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Add edit and delete links for forum replies
+ */
+function groups_annotation_menu_setup($hook, $type, $return, $params) {
+ if (elgg_in_context('widgets')) {
+ return $return;
+ }
+
+ $annotation = $params['annotation'];
+
+ if ($annotation->name != 'group_topic_post') {
+ return $return;
+ }
+
+ if ($annotation->canEdit()) {
+ $url = elgg_http_add_url_query_elements('action/discussion/reply/delete', array(
+ 'annotation_id' => $annotation->id,
+ ));
+
+ $options = array(
+ 'name' => 'delete',
+ 'href' => $url,
+ 'text' => "<span class=\"elgg-icon elgg-icon-delete\"></span>",
+ 'confirm' => elgg_echo('deleteconfirm'),
+ 'encode_text' => false
+ );
+ $return[] = ElggMenuItem::factory($options);
+
+ $url = elgg_http_add_url_query_elements('discussion', array(
+ 'annotation_id' => $annotation->id,
+ ));
+
+ $options = array(
+ 'name' => 'edit',
+ 'href' => "#edit-annotation-$annotation->id",
+ 'text' => elgg_echo('edit'),
+ 'encode_text' => false,
+ 'rel' => 'toggle',
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+
+ return $return;
+}
+
+/**
+ * Groups created so create an access list for it
+ */
+function groups_create_event_listener($event, $object_type, $object) {
+ $ac_name = elgg_echo('groups:group') . ": " . $object->name;
+ $group_id = create_access_collection($ac_name, $object->guid);
+ if ($group_id) {
+ $object->group_acl = $group_id;
+ } else {
+ // delete group if access creation fails
+ return false;
+ }
+
+ return true;
+}
+
+/**
+ * Hook to listen to read access control requests and return all the groups you are a member of.
+ */
+function groups_read_acl_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ //error_log("READ: " . var_export($returnvalue));
+ $user = elgg_get_logged_in_user_entity();
+ if ($user) {
+ // Not using this because of recursion.
+ // Joining a group automatically add user to ACL,
+ // So just see if they're a member of the ACL.
+ //$membership = get_users_membership($user->guid);
+
+ $members = get_members_of_access_collection($group->group_acl);
+ print_r($members);
+ exit;
+
+ if ($membership) {
+ foreach ($membership as $group)
+ $returnvalue[$user->guid][$group->group_acl] = elgg_echo('groups:group') . ": " . $group->name;
+ return $returnvalue;
+ }
+ }
+}
+
+/**
+ * Return the write access for the current group if the user has write access to it.
+ */
+function groups_write_acl_plugin_hook($hook, $entity_type, $returnvalue, $params) {
+ $page_owner = elgg_get_page_owner_entity();
+ $user_guid = $params['user_id'];
+ $user = get_entity($user_guid);
+ if (!$user) {
+ return $returnvalue;
+ }
+
+ // only insert group access for current group
+ if ($page_owner instanceof ElggGroup) {
+ if ($page_owner->canWriteToContainer($user_guid)) {
+ $returnvalue[$page_owner->group_acl] = elgg_echo('groups:group') . ': ' . $page_owner->name;
+
+ unset($returnvalue[ACCESS_FRIENDS]);
+ }
+ } else {
+ // if the user owns the group, remove all access collections manually
+ // this won't be a problem once the group itself owns the acl.
+ $groups = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'member',
+ 'relationship_guid' => $user_guid,
+ 'inverse_relationship' => FALSE,
+ 'limit' => 999
+ ));
+
+ if ($groups) {
+ foreach ($groups as $group) {
+ unset($returnvalue[$group->group_acl]);
+ }
+ }
+ }
+
+ return $returnvalue;
+}
+
+/**
+ * Groups deleted, so remove access lists.
+ */
+function groups_delete_event_listener($event, $object_type, $object) {
+ delete_access_collection($object->group_acl);
+
+ return true;
+}
+
+/**
+ * Listens to a group join event and adds a user to the group's access control
+ *
+ */
+function groups_user_join_event_listener($event, $object_type, $object) {
+
+ $group = $object['group'];
+ $user = $object['user'];
+ $acl = $group->group_acl;
+
+ add_user_to_access_collection($user->guid, $acl);
+
+ return true;
+}
+
+/**
+ * Make sure users are added to the access collection
+ */
+function groups_access_collection_override($hook, $entity_type, $returnvalue, $params) {
+ if (isset($params['collection'])) {
+ if (elgg_instanceof(get_entity($params['collection']->owner_guid), 'group')) {
+ return true;
+ }
+ }
+}
+
+/**
+ * Listens to a group leave event and removes a user from the group's access control
+ *
+ */
+function groups_user_leave_event_listener($event, $object_type, $object) {
+
+ $group = $object['group'];
+ $user = $object['user'];
+ $acl = $group->group_acl;
+
+ remove_user_from_access_collection($user->guid, $acl);
+
+ return true;
+}
+
+/**
+ * Grabs groups by invitations
+ * Have to override all access until there's a way override access to getter functions.
+ *
+ * @param int $user_guid The user's guid
+ * @param bool $return_guids Return guids rather than ElggGroup objects
+ *
+ * @return array ElggGroups or guids depending on $return_guids
+ */
+function groups_get_invited_groups($user_guid, $return_guids = FALSE) {
+ $ia = elgg_set_ignore_access(TRUE);
+ $groups = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'invited',
+ 'relationship_guid' => $user_guid,
+ 'inverse_relationship' => TRUE,
+ 'limit' => 0,
+ ));
+ elgg_set_ignore_access($ia);
+
+ if ($return_guids) {
+ $guids = array();
+ foreach ($groups as $group) {
+ $guids[] = $group->getGUID();
+ }
+
+ return $guids;
+ }
+
+ return $groups;
+}
+
+/**
+ * Join a user to a group, add river event, clean-up invitations
+ *
+ * @param ElggGroup $group
+ * @param ElggUser $user
+ * @return bool
+ */
+function groups_join_group($group, $user) {
+
+ // access ignore so user can be added to access collection of invisible group
+ $ia = elgg_set_ignore_access(TRUE);
+ $result = $group->join($user);
+ elgg_set_ignore_access($ia);
+
+ if ($result) {
+ // flush user's access info so the collection is added
+ get_access_list($user->guid, 0, true);
+
+ // Remove any invite or join request flags
+ remove_entity_relationship($group->guid, 'invited', $user->guid);
+ remove_entity_relationship($user->guid, 'membership_request', $group->guid);
+
+ add_to_river('river/relationship/member/create', 'join', $user->guid, $group->guid);
+
+ return true;
+ }
+
+ return false;
+}
+
+/**
+ * Function to use on groups for access. It will house private, loggedin, public,
+ * and the group itself. This is when you don't want other groups or access lists
+ * in the access options available.
+ *
+ * @return array
+ */
+function group_access_options($group) {
+ $access_array = array(
+ ACCESS_PRIVATE => 'private',
+ ACCESS_LOGGED_IN => 'logged in users',
+ ACCESS_PUBLIC => 'public',
+ $group->group_acl => elgg_echo('groups:acl', array($group->name)),
+ );
+ return $access_array;
+}
+
+function activity_profile_menu($hook, $entity_type, $return_value, $params) {
+
+ if ($params['owner'] instanceof ElggGroup) {
+ $return_value[] = array(
+ 'text' => elgg_echo('Activity'),
+ 'href' => "groups/activity/{$params['owner']->getGUID()}"
+ );
+ }
+ return $return_value;
+}
+
+/**
+ * Parse ECML on group discussion views
+ */
+function groups_ecml_views_hook($hook, $entity_type, $return_value, $params) {
+ $return_value['forum/viewposts'] = elgg_echo('groups:ecml:discussion');
+
+ return $return_value;
+}
+
+/**
+ * Parse ECML on group profiles
+ */
+function groupprofile_ecml_views_hook($hook, $entity_type, $return_value, $params) {
+ $return_value['groups/groupprofile'] = elgg_echo('groups:ecml:groupprofile');
+
+ return $return_value;
+}
+
+
+
+/**
+ * Discussion
+ *
+ */
+
+elgg_register_event_handler('init', 'system', 'discussion_init');
+
+/**
+ * Initialize the discussion component
+ */
+function discussion_init() {
+
+ elgg_register_library('elgg:discussion', elgg_get_plugins_path() . 'groups/lib/discussion.php');
+
+ elgg_register_page_handler('discussion', 'discussion_page_handler');
+ elgg_register_page_handler('forum', 'discussion_forum_page_handler');
+
+ elgg_register_entity_url_handler('object', 'groupforumtopic', 'discussion_override_topic_url');
+
+ // commenting not allowed on discussion topics (use a different annotation)
+ elgg_register_plugin_hook_handler('permissions_check:comment', 'object', 'discussion_comment_override');
+
+ $action_base = elgg_get_plugins_path() . 'groups/actions/discussion';
+ elgg_register_action('discussion/save', "$action_base/save.php");
+ elgg_register_action('discussion/delete', "$action_base/delete.php");
+ elgg_register_action('discussion/reply/save', "$action_base/reply/save.php");
+ elgg_register_action('discussion/reply/delete', "$action_base/reply/delete.php");
+
+ // add link to owner block
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'discussion_owner_block_menu');
+
+ // Register for search.
+ elgg_register_entity_type('object', 'groupforumtopic');
+
+ // because replies are not comments, need of our menu item
+ elgg_register_plugin_hook_handler('register', 'menu:river', 'discussion_add_to_river_menu');
+
+ // add the forum tool option
+ add_group_tool_option('forum', elgg_echo('groups:enableforum'), true);
+ elgg_extend_view('groups/tool_latest', 'discussion/group_module');
+
+ // notifications
+ register_notification_object('object', 'groupforumtopic', elgg_echo('discussion:notification:topic:subject'));
+ elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'groupforumtopic_notify_message');
+ elgg_register_event_handler('create', 'annotation', 'discussion_reply_notifications');
+ elgg_register_plugin_hook_handler('notify:annotation:message', 'group_topic_post', 'discussion_create_reply_notification');
+}
+
+/**
+ * Exists for backwards compatibility for Elgg 1.7
+ */
+function discussion_forum_page_handler($page) {
+ switch ($page[0]) {
+ case 'topic':
+ header('Status: 301 Moved Permanently');
+ forward("/discussion/view/{$page[1]}/{$page[2]}");
+ break;
+ default:
+ return false;
+ }
+}
+
+/**
+ * Discussion page handler
+ *
+ * URLs take the form of
+ * All topics in site: discussion/all
+ * List topics in forum: discussion/owner/<guid>
+ * View discussion topic: discussion/view/<guid>
+ * Add discussion topic: discussion/add/<guid>
+ * Edit discussion topic: discussion/edit/<guid>
+ *
+ * @param array $page Array of url segments for routing
+ * @return bool
+ */
+function discussion_page_handler($page) {
+
+ elgg_load_library('elgg:discussion');
+
+ if (!isset($page[0])) {
+ $page[0] = 'all';
+ }
+
+ elgg_push_breadcrumb(elgg_echo('discussion'), 'discussion/all');
+
+ switch ($page[0]) {
+ case 'all':
+ discussion_handle_all_page();
+ break;
+ case 'owner':
+ discussion_handle_list_page($page[1]);
+ break;
+ case 'add':
+ discussion_handle_edit_page('add', $page[1]);
+ break;
+ case 'edit':
+ discussion_handle_edit_page('edit', $page[1]);
+ break;
+ case 'view':
+ discussion_handle_view_page($page[1]);
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Override the discussion topic url
+ *
+ * @param ElggObject $entity Discussion topic
+ * @return string
+ */
+function discussion_override_topic_url($entity) {
+ return 'discussion/view/' . $entity->guid . '/' . elgg_get_friendly_title($entity->title);
+}
+
+/**
+ * We don't want people commenting on topics in the river
+ */
+function discussion_comment_override($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'object', 'groupforumtopic')) {
+ return false;
+ }
+}
+
+/**
+ * Add owner block link
+ */
+function discussion_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'group')) {
+ if ($params['entity']->forum_enable != "no") {
+ $url = "discussion/owner/{$params['entity']->guid}";
+ $item = new ElggMenuItem('discussion', elgg_echo('discussion:group'), $url);
+ $return[] = $item;
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Add the reply button for the river
+ */
+function discussion_add_to_river_menu($hook, $type, $return, $params) {
+ if (elgg_is_logged_in() && !elgg_in_context('widgets')) {
+ $item = $params['item'];
+ $object = $item->getObjectEntity();
+ if (elgg_instanceof($object, 'object', 'groupforumtopic')) {
+ if ($item->annotation_id == 0) {
+ $group = $object->getContainerEntity();
+ if ($group && ($group->canWriteToContainer() || elgg_is_admin_logged_in())) {
+ $options = array(
+ 'name' => 'reply',
+ 'href' => "#groups-reply-$object->guid",
+ 'text' => elgg_view_icon('speech-bubble'),
+ 'title' => elgg_echo('reply:this'),
+ 'rel' => 'toggle',
+ 'priority' => 50,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Create discussion notification body
+ *
+ * @todo namespace method with 'discussion'
+ *
+ * @param string $hook
+ * @param string $type
+ * @param string $message
+ * @param array $params
+ */
+function groupforumtopic_notify_message($hook, $type, $message, $params) {
+ $entity = $params['entity'];
+ $to_entity = $params['to_entity'];
+ $method = $params['method'];
+
+ if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'groupforumtopic')) {
+ $descr = $entity->description;
+ $title = $entity->title;
+ $url = $entity->getURL();
+ $owner = $entity->getOwnerEntity();
+ $group = $entity->getContainerEntity();
+
+ return elgg_echo('groups:notification', array(
+ $owner->name,
+ $group->name,
+ $entity->title,
+ $entity->description,
+ $entity->getURL()
+ ));
+ }
+
+ return null;
+}
+
+/**
+ * Create discussion reply notification body
+ *
+ * @param string $hook
+ * @param string $type
+ * @param string $message
+ * @param array $params
+ */
+function discussion_create_reply_notification($hook, $type, $message, $params) {
+ $reply = $params['annotation'];
+ $method = $params['method'];
+ $topic = $reply->getEntity();
+ $poster = $reply->getOwnerEntity();
+ $group = $topic->getContainerEntity();
+
+ return elgg_echo('discussion:notification:reply:body', array(
+ $poster->name,
+ $topic->title,
+ $group->name,
+ $reply->value,
+ $topic->getURL(),
+ ));
+}
+
+/**
+ * Catch reply to discussion topic and generate notifications
+ *
+ * @todo this will be replaced in Elgg 1.9 and is a clone of object_notifications()
+ *
+ * @param string $event
+ * @param string $type
+ * @param ElggAnnotation $annotation
+ * @return void
+ */
+function discussion_reply_notifications($event, $type, $annotation) {
+ global $CONFIG, $NOTIFICATION_HANDLERS;
+
+ if ($annotation->name !== 'group_topic_post') {
+ return;
+ }
+
+ // Have we registered notifications for this type of entity?
+ $object_type = 'object';
+ $object_subtype = 'groupforumtopic';
+
+ $topic = $annotation->getEntity();
+ if (!$topic) {
+ return;
+ }
+
+ $poster = $annotation->getOwnerEntity();
+ if (!$poster) {
+ return;
+ }
+
+ if (isset($CONFIG->register_objects[$object_type][$object_subtype])) {
+ $subject = $CONFIG->register_objects[$object_type][$object_subtype];
+ $string = $subject . ": " . $topic->getURL();
+
+ // Get users interested in content from this person and notify them
+ // (Person defined by container_guid so we can also subscribe to groups if we want)
+ foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+ $interested_users = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'notify' . $method,
+ 'relationship_guid' => $topic->getContainerGUID(),
+ 'inverse_relationship' => true,
+ 'types' => 'user',
+ 'limit' => 0,
+ ));
+
+ if ($interested_users && is_array($interested_users)) {
+ foreach ($interested_users as $user) {
+ if ($user instanceof ElggUser && !$user->isBanned()) {
+ if (($user->guid != $poster->guid) && has_access_to_entity($topic, $user) && $topic->access_id != ACCESS_PRIVATE) {
+ $body = elgg_trigger_plugin_hook('notify:annotation:message', $annotation->getSubtype(), array(
+ 'annotation' => $annotation,
+ 'to_entity' => $user,
+ 'method' => $method), $string);
+ if (empty($body) && $body !== false) {
+ $body = $string;
+ }
+ if ($body !== false) {
+ notify_user($user->guid, $topic->getContainerGUID(), $subject, $body, null, array($method));
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+/**
+ * A simple function to see who can edit a group discussion post
+ * @param the comment $entity
+ * @param user who owns the group $group_owner
+ * @return boolean
+ */
+function groups_can_edit_discussion($entity, $group_owner) {
+
+ //logged in user
+ $user = elgg_get_logged_in_user_guid();
+
+ if (($entity->owner_guid == $user) || $group_owner == $user || elgg_is_admin_logged_in()) {
+ return true;
+ } else {
+ return false;
+ }
+}
+
+/**
+ * Process upgrades for the groups plugin
+ */
+function groups_run_upgrades() {
+ $path = elgg_get_plugins_path() . 'groups/upgrades/';
+ $files = elgg_get_upgrade_files($path);
+ foreach ($files as $file) {
+ include "$path{$file}";
+ }
+}
diff --git a/mod/groups/topicposts.php b/mod/groups/topicposts.php
new file mode 100644
index 000000000..d0137e2f5
--- /dev/null
+++ b/mod/groups/topicposts.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Elgg Groups topic posts page
+ *
+ * @package ElggGroups
+ *
+ * @deprecated 1.8
+ */
+
+// Load Elgg engine
+require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+
+elgg_load_library('elgg:discussion');
+
+$guid = get_input('topic');
+
+register_error(elgg_echo('changebookmark'));
+
+forward("/discussion/view/$guid");
diff --git a/mod/groups/upgrades/2011030101.php b/mod/groups/upgrades/2011030101.php
new file mode 100644
index 000000000..55edb1a16
--- /dev/null
+++ b/mod/groups/upgrades/2011030101.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Move text of first annotation to group forum topic object and delete annotation
+ *
+ * First determine if the upgrade is needed and then if needed, batch the update
+ */
+
+$topics = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'groupforumtopic',
+ 'limit' => 5,
+ 'order_by' => 'e.time_created asc',
+));
+
+// if not topics, no upgrade required
+if (!$topics) {
+ return;
+}
+
+// if all five of the topics have empty descriptions, we need to upgrade
+foreach ($topics as $topic) {
+ if ($topic->description) {
+ return;
+ }
+}
+
+
+/**
+ * Condense first annotation into object
+ *
+ * @param ElggObject $topic
+ */
+function groups_2011030101($topic) {
+
+ // do not upgrade topics that have already been upgraded
+ if ($topic->description) {
+ return true;
+ }
+
+ $annotation = $topic->getAnnotations('group_topic_post', 1);
+ if (!$annotation) {
+ // no text for this forum post so we delete (probably caused by #2624)
+ return $topic->delete();
+ }
+
+ $topic->description = $annotation[0]->value;
+ $topic->save();
+
+ return $annotation[0]->delete();
+}
+
+$previous_access = elgg_set_ignore_access(true);
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'groupforumtopic',
+ 'limit' => 0,
+);
+$batch = new ElggBatch('elgg_get_entities', $options, 'groups_2011030101', 100);
+elgg_set_ignore_access($previous_access);
+
+if ($batch->callbackResult) {
+ error_log("Elgg Groups upgrade (2011030101) succeeded");
+} else {
+ error_log("Elgg Groups upgrade (2011030101) failed");
+}
diff --git a/mod/groups/views/default/annotation/group_topic_post.php b/mod/groups/views/default/annotation/group_topic_post.php
new file mode 100644
index 000000000..f38d2a77a
--- /dev/null
+++ b/mod/groups/views/default/annotation/group_topic_post.php
@@ -0,0 +1,19 @@
+<?php
+/*
+ * Embeds an edit link for the annotation
+ */
+
+$annotation = elgg_extract('annotation', $vars);
+
+echo elgg_view('annotation/default', $vars);
+
+if ($annotation->canEdit()) {
+ $form = elgg_view_form('discussion/reply/save', array(), array_merge(array(
+ 'entity' => get_entity($annotation->entity_guid),
+ 'annotation' => $annotation
+ ), $vars)
+ );
+
+ echo "<div class=\"hidden mbm\" id=\"edit-annotation-$annotation->id\">$form</div>";
+}
+
diff --git a/mod/groups/views/default/discussion/closed.php b/mod/groups/views/default/discussion/closed.php
new file mode 100644
index 000000000..78bca108b
--- /dev/null
+++ b/mod/groups/views/default/discussion/closed.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Topic is closed
+ */
+echo "<h3>" . elgg_echo("groups:topicisclosed") . "</h3>";
+echo "<p>" . elgg_echo("groups:topiccloseddesc") . "</p>"; \ No newline at end of file
diff --git a/mod/groups/views/default/discussion/group_module.php b/mod/groups/views/default/discussion/group_module.php
new file mode 100644
index 000000000..e0bcd55d6
--- /dev/null
+++ b/mod/groups/views/default/discussion/group_module.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Latest forum posts
+ *
+ * @uses $vars['entity']
+ */
+
+if ($vars['entity']->forum_enable == 'no') {
+ return true;
+}
+
+$group = $vars['entity'];
+
+
+$all_link = elgg_view('output/url', array(
+ 'href' => "discussion/owner/$group->guid",
+ 'text' => elgg_echo('link:view:all'),
+ 'is_trusted' => true,
+));
+
+elgg_push_context('widgets');
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'groupforumtopic',
+ 'container_guid' => $group->getGUID(),
+ 'limit' => 6,
+ 'full_view' => false,
+ 'pagination' => false,
+);
+$content = elgg_list_entities($options);
+elgg_pop_context();
+
+if (!$content) {
+ $content = '<p>' . elgg_echo('discussion:none') . '</p>';
+}
+
+$new_link = elgg_view('output/url', array(
+ 'href' => "discussion/add/" . $group->getGUID(),
+ 'text' => elgg_echo('groups:addtopic'),
+ 'is_trusted' => true,
+));
+
+echo elgg_view('groups/profile/module', array(
+ 'title' => elgg_echo('discussion:group'),
+ 'content' => $content,
+ 'all_link' => $all_link,
+ 'add_link' => $new_link,
+)); \ No newline at end of file
diff --git a/mod/groups/views/default/discussion/replies.php b/mod/groups/views/default/discussion/replies.php
new file mode 100644
index 000000000..2bfb6f0cd
--- /dev/null
+++ b/mod/groups/views/default/discussion/replies.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * List replies with optional add form
+ *
+ * @uses $vars['entity'] ElggEntity
+ * @uses $vars['show_add_form'] Display add form or not
+ */
+
+$show_add_form = elgg_extract('show_add_form', $vars, true);
+
+echo '<div id="group-replies" class="mtl">';
+
+$options = array(
+ 'guid' => $vars['entity']->getGUID(),
+ 'annotation_name' => 'group_topic_post',
+);
+$html = elgg_list_annotations($options);
+if ($html) {
+ echo '<h3>' . elgg_echo('group:replies') . '</h3>';
+ echo $html;
+}
+
+if ($show_add_form) {
+ $form_vars = array('class' => 'mtm');
+ echo elgg_view_form('discussion/reply/save', $form_vars, $vars);
+}
+
+echo '</div>';
diff --git a/mod/groups/views/default/forms/discussion/reply/save.php b/mod/groups/views/default/forms/discussion/reply/save.php
new file mode 100644
index 000000000..083fefb78
--- /dev/null
+++ b/mod/groups/views/default/forms/discussion/reply/save.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Discussion topic reply form body
+ *
+ * @uses $vars['entity'] A discussion topic object
+ * @uses $vars['inline'] Display a shortened form?
+ */
+
+if (isset($vars['entity']) && elgg_is_logged_in()) {
+ echo elgg_view('input/hidden', array(
+ 'name' => 'entity_guid',
+ 'value' => $vars['entity']->getGUID(),
+ ));
+
+ $inline = elgg_extract('inline', $vars, false);
+
+ $annotation = elgg_extract('annotation', $vars);
+
+ $value = '';
+
+ if ($annotation) {
+ $value = $annotation->value;
+ echo elgg_view('input/hidden', array(
+ 'name' => 'annotation_id',
+ 'value' => $annotation->id
+ ));
+ }
+
+ if ($inline) {
+ echo elgg_view('input/text', array('name' => 'group_topic_post', 'value' => $value));
+ echo elgg_view('input/submit', array('value' => elgg_echo('reply')));
+ } else {
+?>
+ <div>
+ <label>
+ <?php
+ if ($annotation) {
+ echo elgg_echo('edit');
+ } else {
+ echo elgg_echo("reply");
+ }
+ ?>
+ </label>
+ <?php echo elgg_view('input/longtext', array('name' => 'group_topic_post', 'value' => $value)); ?>
+ </div>
+ <div class="elgg-foot">
+<?php
+ if ($annotation) {
+ echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+ } else {
+ echo elgg_view('input/submit', array('value' => elgg_echo('reply')));
+ }
+?>
+ </div>
+<?php
+ }
+}
diff --git a/mod/groups/views/default/forms/discussion/save.php b/mod/groups/views/default/forms/discussion/save.php
new file mode 100644
index 000000000..a6582ede7
--- /dev/null
+++ b/mod/groups/views/default/forms/discussion/save.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Discussion topic add/edit form body
+ *
+ */
+
+$title = elgg_extract('title', $vars, '');
+$desc = elgg_extract('description', $vars, '');
+$status = elgg_extract('status', $vars, '');
+$tags = elgg_extract('tags', $vars, '');
+$access_id = elgg_extract('access_id', $vars, ACCESS_DEFAULT);
+$container_guid = elgg_extract('container_guid', $vars);
+$guid = elgg_extract('guid', $vars, null);
+
+?>
+<div>
+ <label><?php echo elgg_echo('title'); ?></label><br />
+ <?php echo elgg_view('input/text', array('name' => 'title', 'value' => $title)); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('groups:topicmessage'); ?></label>
+ <?php echo elgg_view('input/longtext', array('name' => 'description', 'value' => $desc)); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('tags'); ?></label>
+ <?php echo elgg_view('input/tags', array('name' => 'tags', 'value' => $tags)); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo("groups:topicstatus"); ?></label><br />
+ <?php
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'status',
+ 'value' => $status,
+ 'options_values' => array(
+ 'open' => elgg_echo('groups:topicopen'),
+ 'closed' => elgg_echo('groups:topicclosed'),
+ ),
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('access'); ?></label><br />
+ <?php echo elgg_view('input/access', array('name' => 'access_id', 'value' => $access_id)); ?>
+</div>
+<div class="elgg-foot">
+<?php
+
+echo elgg_view('input/hidden', array('name' => 'container_guid', 'value' => $container_guid));
+
+if ($guid) {
+ echo elgg_view('input/hidden', array('name' => 'topic_guid', 'value' => $guid));
+}
+
+echo elgg_view('input/submit', array('value' => elgg_echo("save")));
+
+?>
+</div>
diff --git a/mod/groups/views/default/forms/groups/edit.php b/mod/groups/views/default/forms/groups/edit.php
new file mode 100644
index 000000000..41d97e6c3
--- /dev/null
+++ b/mod/groups/views/default/forms/groups/edit.php
@@ -0,0 +1,169 @@
+<?php
+/**
+ * Group edit form
+ *
+ * @package ElggGroups
+ */
+
+// only extract these elements.
+$name = $membership = $vis = $entity = null;
+extract($vars, EXTR_IF_EXISTS);
+
+?>
+<div>
+ <label><?php echo elgg_echo("groups:icon"); ?></label><br />
+ <?php echo elgg_view("input/file", array('name' => 'icon')); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo("groups:name"); ?></label><br />
+ <?php echo elgg_view("input/text", array(
+ 'name' => 'name',
+ 'value' => $name
+ ));
+ ?>
+</div>
+<?php
+
+$group_profile_fields = elgg_get_config('group');
+if ($group_profile_fields > 0) {
+ foreach ($group_profile_fields as $shortname => $valtype) {
+ $line_break = '<br />';
+ if ($valtype == 'longtext') {
+ $line_break = '';
+ }
+ echo '<div><label>';
+ echo elgg_echo("groups:{$shortname}");
+ echo "</label>$line_break";
+ echo elgg_view("input/{$valtype}", array(
+ 'name' => $shortname,
+ 'value' => elgg_extract($shortname, $vars)
+ ));
+ echo '</div>';
+ }
+}
+?>
+
+<div>
+ <label>
+ <?php echo elgg_echo('groups:membership'); ?><br />
+ <?php echo elgg_view('input/dropdown', array(
+ 'name' => 'membership',
+ 'value' => $membership,
+ 'options_values' => array(
+ ACCESS_PRIVATE => elgg_echo('groups:access:private'),
+ ACCESS_PUBLIC => elgg_echo('groups:access:public')
+ )
+ ));
+ ?>
+ </label>
+</div>
+
+<?php
+
+if (elgg_get_plugin_setting('hidden_groups', 'groups') == 'yes') {
+ $access_options = array(
+ ACCESS_PRIVATE => elgg_echo('groups:access:group'),
+ ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"),
+ ACCESS_PUBLIC => elgg_echo("PUBLIC")
+ );
+?>
+
+<div>
+ <label>
+ <?php echo elgg_echo('groups:visibility'); ?><br />
+ <?php echo elgg_view('input/access', array(
+ 'name' => 'vis',
+ 'value' => $vis,
+ 'options_values' => $access_options,
+ ));
+ ?>
+ </label>
+</div>
+
+<?php
+}
+
+if (isset($vars['entity'])) {
+ $entity = $vars['entity'];
+ $owner_guid = $vars['entity']->owner_guid;
+} else {
+ $entity = false;
+}
+
+if ($entity && ($owner_guid == elgg_get_logged_in_user_guid() || elgg_is_admin_logged_in())) {
+ $owner_guid = $vars['entity']->owner_guid;
+ $members = array();
+ foreach ($vars['entity']->getMembers(0) as $member) {
+ $members[$member->guid] = "$member->name (@$member->username)";
+ }
+?>
+
+<div>
+ <label>
+ <?php echo elgg_echo('groups:owner'); ?><br />
+ <?php echo elgg_view('input/dropdown', array(
+ 'name' => 'owner_guid',
+ 'value' => $owner_guid,
+ 'options_values' => $members,
+ 'class' => 'groups-owner-input',
+ ));
+ ?>
+ </label>
+ <?php
+ if ($owner_guid == elgg_get_logged_in_user_guid()) {
+ echo '<span class="elgg-text-help">' . elgg_echo('groups:owner:warning') . '</span>';
+ }
+ ?>
+</div>
+
+<?php
+}
+
+$tools = elgg_get_config('group_tool_options');
+if ($tools) {
+ usort($tools, create_function('$a,$b', 'return strcmp($a->label,$b->label);'));
+ foreach ($tools as $group_option) {
+ $group_option_toggle_name = $group_option->name . "_enable";
+ $value = elgg_extract($group_option_toggle_name, $vars);
+?>
+<div>
+ <label>
+ <?php echo $group_option->label; ?><br />
+ </label>
+ <?php echo elgg_view("input/radio", array(
+ "name" => $group_option_toggle_name,
+ "value" => $value,
+ 'options' => array(
+ elgg_echo('groups:yes') => 'yes',
+ elgg_echo('groups:no') => 'no',
+ ),
+ ));
+ ?>
+</div>
+<?php
+ }
+}
+?>
+<div class="elgg-foot">
+<?php
+
+if ($entity) {
+ echo elgg_view('input/hidden', array(
+ 'name' => 'group_guid',
+ 'value' => $entity->getGUID(),
+ ));
+}
+
+echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+
+if ($entity) {
+ $delete_url = 'action/groups/delete?guid=' . $entity->getGUID();
+ echo elgg_view('output/confirmlink', array(
+ 'text' => elgg_echo('groups:delete'),
+ 'href' => $delete_url,
+ 'confirm' => elgg_echo('groups:deletewarning'),
+ 'class' => 'elgg-button elgg-button-delete float-alt',
+ ));
+}
+?>
+</div>
diff --git a/mod/groups/views/default/forms/groups/find.php b/mod/groups/views/default/forms/groups/find.php
new file mode 100644
index 000000000..ddf639b74
--- /dev/null
+++ b/mod/groups/views/default/forms/groups/find.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Group tag-based search form body
+ */
+
+$tag_string = elgg_echo('groups:search:tags');
+
+$params = array(
+ 'name' => 'tag',
+ 'class' => 'elgg-input-search mbm',
+ 'value' => $tag_string,
+ 'onclick' => "if (this.value=='$tag_string') { this.value='' }",
+);
+echo elgg_view('input/text', $params);
+
+echo elgg_view('input/submit', array('value' => elgg_echo('search:go')));
diff --git a/mod/groups/views/default/forms/groups/invite.php b/mod/groups/views/default/forms/groups/invite.php
new file mode 100644
index 000000000..ef3131782
--- /dev/null
+++ b/mod/groups/views/default/forms/groups/invite.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Elgg groups invite form
+ *
+ * @package ElggGroups
+ */
+
+$group = $vars['entity'];
+$owner = $group->getOwnerEntity();
+$forward_url = $group->getURL();
+$friends = elgg_get_logged_in_user_entity()->getFriends('', 0);
+
+if ($friends) {
+ echo elgg_view('input/friendspicker', array('entities' => $friends, 'name' => 'user_guid', 'highlight' => 'all'));
+ echo '<div class="elgg-foot">';
+ echo elgg_view('input/hidden', array('name' => 'forward_url', 'value' => $forward_url));
+ echo elgg_view('input/hidden', array('name' => 'group_guid', 'value' => $group->guid));
+ echo elgg_view('input/submit', array('value' => elgg_echo('invite')));
+ echo '</div>';
+} else {
+ echo elgg_echo('groups:nofriendsatall');
+} \ No newline at end of file
diff --git a/mod/groups/views/default/forms/groups/search.php b/mod/groups/views/default/forms/groups/search.php
new file mode 100644
index 000000000..850b6088e
--- /dev/null
+++ b/mod/groups/views/default/forms/groups/search.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Group search form
+ *
+ * @uses $vars['entity'] ElggGroup
+ */
+
+$params = array(
+ 'name' => 'q',
+ 'class' => 'elgg-input-search mbm',
+ 'value' => $tag_string,
+);
+echo elgg_view('input/text', $params);
+
+echo elgg_view('input/hidden', array(
+ 'name' => 'container_guid',
+ 'value' => $vars['entity']->getGUID(),
+));
+
+echo elgg_view('input/submit', array('value' => elgg_echo('search:go')));
diff --git a/mod/groups/views/default/group/default.php b/mod/groups/views/default/group/default.php
new file mode 100644
index 000000000..d9460dff4
--- /dev/null
+++ b/mod/groups/views/default/group/default.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Group entity view
+ *
+ * @package ElggGroups
+ */
+
+$group = $vars['entity'];
+
+$icon = elgg_view_entity_icon($group, 'tiny');
+
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $group,
+ 'handler' => 'groups',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+if (elgg_in_context('owner_block') || elgg_in_context('widgets')) {
+ $metadata = '';
+}
+
+
+if ($vars['full_view']) {
+ echo elgg_view('groups/profile/summary', $vars);
+} else {
+ // brief view
+ $params = array(
+ 'entity' => $group,
+ 'metadata' => $metadata,
+ 'subtitle' => $group->briefdescription,
+ );
+ $params = $params + $vars;
+ $list_body = elgg_view('group/elements/summary', $params);
+
+ echo elgg_view_image_block($icon, $list_body, $vars);
+}
diff --git a/mod/groups/views/default/groups/css.php b/mod/groups/views/default/groups/css.php
new file mode 100644
index 000000000..6f710ddab
--- /dev/null
+++ b/mod/groups/views/default/groups/css.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Elgg Groups css
+ *
+ * @package groups
+ */
+
+?>
+.groups-profile > .elgg-image {
+ margin-right: 10px;
+}
+.groups-profile img {
+ width: 100%;
+ height: auto;
+}
+.groups-stats {
+ background: #eeeeee;
+ padding: 5px;
+ margin-top: 10px;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+
+.groups-profile-fields .odd,
+.groups-profile-fields .even {
+ background: #f4f4f4;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+
+ padding: 2px 4px;
+ margin-bottom: 7px;
+}
+
+.groups-profile-fields .elgg-output {
+ margin: 0;
+}
+
+#groups-tools > li {
+ width: 48%;
+ min-height: 200px;
+ margin-bottom: 40px;
+}
+
+#groups-tools > li:nth-child(odd) {
+ margin-right: 4%;
+}
+
+.groups-widget-viewall {
+ float: right;
+ font-size: 85%;
+}
+
+.groups-latest-reply {
+ float: right;
+}
+
+.elgg-menu-groups-my-status li a {
+ display: block;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ background-color: white;
+ margin: 3px 0 5px 0;
+ padding: 2px 4px 2px 8px;
+}
+.elgg-menu-groups-my-status li a:hover {
+ background-color: #0054A7;
+ color: white;
+ text-decoration: none;
+}
+.elgg-menu-groups-my-status li.elgg-state-selected > a {
+ background-color: #4690D6;
+ color: white;
+}
diff --git a/mod/groups/views/default/groups/edit.php b/mod/groups/views/default/groups/edit.php
new file mode 100644
index 000000000..5579ad54a
--- /dev/null
+++ b/mod/groups/views/default/groups/edit.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Edit/create a group wrapper
+ *
+ * @uses $vars['entity'] ElggGroup object
+ */
+
+$entity = elgg_extract('entity', $vars, null);
+
+$form_vars = array(
+ 'enctype' => 'multipart/form-data',
+ 'class' => 'elgg-form-alt',
+);
+
+echo elgg_view_form('groups/edit', $form_vars, groups_prepare_form_vars($entity));
diff --git a/mod/groups/views/default/groups/group_sort_menu.php b/mod/groups/views/default/groups/group_sort_menu.php
new file mode 100644
index 000000000..f5631a31f
--- /dev/null
+++ b/mod/groups/views/default/groups/group_sort_menu.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * All groups listing page navigation
+ *
+ * @uses $vars['selected'] Name of the tab that has been selected
+ */
+
+$tabs = array(
+ 'newest' => array(
+ 'text' => elgg_echo('groups:newest'),
+ 'href' => 'groups/all?filter=newest',
+ 'priority' => 200,
+ ),
+ 'popular' => array(
+ 'text' => elgg_echo('groups:popular'),
+ 'href' => 'groups/all?filter=popular',
+ 'priority' => 300,
+ ),
+ 'discussion' => array(
+ 'text' => elgg_echo('groups:latestdiscussion'),
+ 'href' => 'groups/all?filter=discussion',
+ 'priority' => 400,
+ ),
+);
+
+foreach ($tabs as $name => $tab) {
+ $tab['name'] = $name;
+
+ if ($vars['selected'] == $name) {
+ $tab['selected'] = true;
+ }
+
+ elgg_register_menu_item('filter', $tab);
+}
+
+echo elgg_view_menu('filter', array('sort_by' => 'priority', 'class' => 'elgg-menu-hz'));
diff --git a/mod/groups/views/default/groups/invitationrequests.php b/mod/groups/views/default/groups/invitationrequests.php
new file mode 100644
index 000000000..94dbdf1f2
--- /dev/null
+++ b/mod/groups/views/default/groups/invitationrequests.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * A user's group invitations
+ *
+ * @uses $vars['invitations'] Array of ElggGroups
+ */
+
+if (!empty($vars['invitations']) && is_array($vars['invitations'])) {
+ $user = elgg_get_logged_in_user_entity();
+ echo '<ul class="elgg-list">';
+ foreach ($vars['invitations'] as $group) {
+ if ($group instanceof ElggGroup) {
+ $icon = elgg_view_entity_icon($group, 'tiny', array('use_hover' => 'true'));
+
+ $group_title = elgg_view('output/url', array(
+ 'href' => $group->getURL(),
+ 'text' => $group->name,
+ 'is_trusted' => true,
+ ));
+
+ $url = elgg_add_action_tokens_to_url(elgg_get_site_url()."action/groups/join?user_guid={$user->guid}&group_guid={$group->guid}");
+ $accept_button = elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => elgg_echo('accept'),
+ 'class' => 'elgg-button elgg-button-submit',
+ 'is_trusted' => true,
+ ));
+
+ $url = "action/groups/killinvitation?user_guid={$user->getGUID()}&group_guid={$group->getGUID()}";
+ $delete_button = elgg_view('output/confirmlink', array(
+ 'href' => $url,
+ 'confirm' => elgg_echo('groups:invite:remove:check'),
+ 'text' => elgg_echo('delete'),
+ 'class' => 'elgg-button elgg-button-delete mlm',
+ ));
+
+ $body = <<<HTML
+<h4>$group_title</h4>
+<p class="elgg-subtext">$group->briefdescription</p>
+HTML;
+ $alt = $accept_button . $delete_button;
+
+ echo '<li class="pvs">';
+ echo elgg_view_image_block($icon, $body, array('image_alt' => $alt));
+ echo '</li>';
+ }
+ }
+ echo '</ul>';
+} else {
+ echo '<p class="mtm">' . elgg_echo('groups:invitations:none') . "</p>";
+}
diff --git a/mod/groups/views/default/groups/js.php b/mod/groups/views/default/groups/js.php
new file mode 100644
index 000000000..0319be14a
--- /dev/null
+++ b/mod/groups/views/default/groups/js.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Javascript for Groups forms
+ *
+ * @package ElggGroups
+ */
+?>
+
+// this adds a class to support IE8 and older
+elgg.register_hook_handler('init', 'system', function() {
+ // jQuery uses 0-based indexing
+ $('#groups-tools').children('li:even').addClass('odd');
+});
diff --git a/mod/groups/views/default/groups/membershiprequests.php b/mod/groups/views/default/groups/membershiprequests.php
new file mode 100644
index 000000000..2bac0e32b
--- /dev/null
+++ b/mod/groups/views/default/groups/membershiprequests.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * A group's member requests
+ *
+ * @uses $vars['entity'] ElggGroup
+ * @uses $vars['requests'] Array of ElggUsers
+ */
+
+if (!empty($vars['requests']) && is_array($vars['requests'])) {
+ echo '<ul class="elgg-list">';
+ foreach ($vars['requests'] as $user) {
+ $icon = elgg_view_entity_icon($user, 'tiny', array('use_hover' => 'true'));
+
+ $user_title = elgg_view('output/url', array(
+ 'href' => $user->getURL(),
+ 'text' => $user->name,
+ 'is_trusted' => true,
+ ));
+
+ $url = "action/groups/addtogroup?user_guid={$user->guid}&group_guid={$vars['entity']->guid}";
+ $url = elgg_add_action_tokens_to_url($url);
+ $accept_button = elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => elgg_echo('accept'),
+ 'class' => 'elgg-button elgg-button-submit',
+ 'is_trusted' => true,
+ ));
+
+ $url = 'action/groups/killrequest?user_guid=' . $user->guid . '&group_guid=' . $vars['entity']->guid;
+ $delete_button = elgg_view('output/confirmlink', array(
+ 'href' => $url,
+ 'confirm' => elgg_echo('groups:joinrequest:remove:check'),
+ 'text' => elgg_echo('delete'),
+ 'class' => 'elgg-button elgg-button-delete mlm',
+ ));
+
+ $body = "<h4>$user_title</h4>";
+ $alt = $accept_button . $delete_button;
+
+ echo '<li class="pvs">';
+ echo elgg_view_image_block($icon, $body, array('image_alt' => $alt));
+ echo '</li>';
+ }
+ echo '</ul>';
+} else {
+ echo '<p class="mtm">' . elgg_echo('groups:requests:none') . '</p>';
+}
diff --git a/mod/groups/views/default/groups/profile/activity_module.php b/mod/groups/views/default/groups/profile/activity_module.php
new file mode 100644
index 000000000..832ff4a4b
--- /dev/null
+++ b/mod/groups/views/default/groups/profile/activity_module.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Groups latest activity
+ *
+ * @todo add people joining group to activity
+ *
+ * @package Groups
+ */
+
+if ($vars['entity']->activity_enable == 'no') {
+ return true;
+}
+
+$group = $vars['entity'];
+if (!$group) {
+ return true;
+}
+
+$all_link = elgg_view('output/url', array(
+ 'href' => "groups/activity/$group->guid",
+ 'text' => elgg_echo('link:view:all'),
+ 'is_trusted' => true,
+));
+
+
+elgg_push_context('widgets');
+$db_prefix = elgg_get_config('dbprefix');
+$content = elgg_list_river(array(
+ 'limit' => 4,
+ 'pagination' => false,
+ 'joins' => array("JOIN {$db_prefix}entities e1 ON e1.guid = rv.object_guid"),
+ 'wheres' => array("(e1.container_guid = $group->guid)"),
+));
+elgg_pop_context();
+
+if (!$content) {
+ $content = '<p>' . elgg_echo('groups:activity:none') . '</p>';
+}
+
+echo elgg_view('groups/profile/module', array(
+ 'title' => elgg_echo('groups:activity'),
+ 'content' => $content,
+ 'all_link' => $all_link,
+));
diff --git a/mod/groups/views/default/groups/profile/closed_membership.php b/mod/groups/views/default/groups/profile/closed_membership.php
new file mode 100644
index 000000000..24526d378
--- /dev/null
+++ b/mod/groups/views/default/groups/profile/closed_membership.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Display message about closed membership
+ *
+ * @package ElggGroups
+ */
+
+?>
+<p class="mtm">
+<?php
+echo elgg_echo('groups:closedgroup');
+if (elgg_is_logged_in()) {
+ echo ' ' . elgg_echo('groups:closedgroup:request');
+}
+?>
+</p>
diff --git a/mod/groups/views/default/groups/profile/fields.php b/mod/groups/views/default/groups/profile/fields.php
new file mode 100644
index 000000000..14827f11a
--- /dev/null
+++ b/mod/groups/views/default/groups/profile/fields.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Group profile fields
+ */
+
+$group = $vars['entity'];
+
+$profile_fields = elgg_get_config('group');
+
+if (is_array($profile_fields) && count($profile_fields) > 0) {
+
+ $even_odd = 'odd';
+ foreach ($profile_fields as $key => $valtype) {
+ // do not show the name
+ if ($key == 'name') {
+ continue;
+ }
+
+ $value = $group->$key;
+ if (empty($value)) {
+ continue;
+ }
+
+ $options = array('value' => $group->$key);
+ if ($valtype == 'tags') {
+ $options['tag_names'] = $key;
+ }
+
+ echo "<div class=\"{$even_odd}\">";
+ echo "<b>";
+ echo elgg_echo("groups:$key");
+ echo ": </b>";
+ echo elgg_view("output/$valtype", $options);
+ echo "</div>";
+
+ $even_odd = ($even_odd == 'even') ? 'odd' : 'even';
+ }
+}
diff --git a/mod/groups/views/default/groups/profile/layout.php b/mod/groups/views/default/groups/profile/layout.php
new file mode 100644
index 000000000..f513f10ae
--- /dev/null
+++ b/mod/groups/views/default/groups/profile/layout.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Layout of the groups profile page
+ *
+ * @uses $vars['entity']
+ */
+
+echo elgg_view('groups/profile/summary', $vars);
+if (group_gatekeeper(false)) {
+ echo elgg_view('groups/profile/widgets', $vars);
+} else {
+ echo elgg_view('groups/profile/closed_membership');
+}
diff --git a/mod/groups/views/default/groups/profile/module.php b/mod/groups/views/default/groups/profile/module.php
new file mode 100644
index 000000000..9d0b18266
--- /dev/null
+++ b/mod/groups/views/default/groups/profile/module.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Group module (also called a group widget)
+ *
+ * @uses $vars['title'] The title of the module
+ * @uses $vars['content'] The module content
+ * @uses $vars['all_link'] A link to list content
+ * @uses $vars['add_link'] A link to create content
+ */
+
+$group = elgg_get_page_owner_entity();
+
+$header = "<span class=\"groups-widget-viewall\">{$vars['all_link']}</span>";
+$header .= '<h3>' . $vars['title'] . '</h3>';
+
+if ($group->canWriteToContainer() && isset($vars['add_link'])) {
+ $vars['content'] .= "<span class='elgg-widget-more'>{$vars['add_link']}</span>";
+}
+
+echo '<li>';
+echo elgg_view_module('info', '', $vars['content'], array(
+ 'header' => $header,
+ 'class' => 'elgg-module-group',
+));
+echo '</li>';
diff --git a/mod/groups/views/default/groups/profile/summary.php b/mod/groups/views/default/groups/profile/summary.php
new file mode 100644
index 000000000..f1221f19a
--- /dev/null
+++ b/mod/groups/views/default/groups/profile/summary.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Group profile summary
+ *
+ * Icon and profile fields
+ *
+ * @uses $vars['group']
+ */
+
+if (!isset($vars['entity']) || !$vars['entity']) {
+ echo elgg_echo('groups:notfound');
+ return true;
+}
+
+$group = $vars['entity'];
+$owner = $group->getOwnerEntity();
+
+if (!$owner) {
+ // not having an owner is very bad so we throw an exception
+ $msg = elgg_echo('InvalidParameterException:IdNotExistForGUID', array('group owner', $group->guid));
+ throw new InvalidParameterException($msg);
+}
+
+?>
+<div class="groups-profile clearfix elgg-image-block">
+ <div class="elgg-image">
+ <div class="groups-profile-icon">
+ <?php echo elgg_view_entity_icon($group, 'large', array('href' => '')); ?>
+ </div>
+ <div class="groups-stats">
+ <p>
+ <b><?php echo elgg_echo("groups:owner"); ?>: </b>
+ <?php
+ echo elgg_view('output/url', array(
+ 'text' => $owner->name,
+ 'value' => $owner->getURL(),
+ 'is_trusted' => true,
+ ));
+ ?>
+ </p>
+ <p>
+ <?php
+ echo elgg_echo('groups:members') . ": " . $group->getMembers(0, 0, TRUE);
+ ?>
+ </p>
+ </div>
+ </div>
+
+ <div class="groups-profile-fields elgg-body">
+ <?php
+ echo elgg_view('groups/profile/fields', $vars);
+ ?>
+ </div>
+</div>
+<?php
+?>
+
diff --git a/mod/groups/views/default/groups/profile/widgets.php b/mod/groups/views/default/groups/profile/widgets.php
new file mode 100644
index 000000000..7635cad4f
--- /dev/null
+++ b/mod/groups/views/default/groups/profile/widgets.php
@@ -0,0 +1,24 @@
+<?php
+/**
+* Profile widgets/tools
+*
+* @package ElggGroups
+*/
+
+// tools widget area
+echo '<ul id="groups-tools" class="elgg-gallery elgg-gallery-fluid mtl clearfix">';
+
+// enable tools to extend this area
+echo elgg_view("groups/tool_latest", $vars);
+
+// backward compatibility
+$right = elgg_view('groups/right_column', $vars);
+$left = elgg_view('groups/left_column', $vars);
+if ($right || $left) {
+ elgg_deprecated_notice('The views groups/right_column and groups/left_column have been replaced by groups/tool_latest', 1.8);
+ echo $left;
+ echo $right;
+}
+
+echo "</ul>";
+
diff --git a/mod/groups/views/default/groups/sidebar/featured.php b/mod/groups/views/default/groups/sidebar/featured.php
new file mode 100644
index 000000000..8bd51ab5c
--- /dev/null
+++ b/mod/groups/views/default/groups/sidebar/featured.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Featured groups
+ *
+ * @package ElggGroups
+ */
+
+$featured_groups = elgg_get_entities_from_metadata(array(
+ 'metadata_name' => 'featured_group',
+ 'metadata_value' => 'yes',
+ 'types' => 'group',
+ 'limit' => 10,
+));
+
+if ($featured_groups) {
+
+ elgg_push_context('widgets');
+ $body = '';
+ foreach ($featured_groups as $group) {
+ $body .= elgg_view_entity($group, array('full_view' => false));
+ }
+ elgg_pop_context();
+
+ echo elgg_view_module('aside', elgg_echo("groups:featured"), $body);
+}
diff --git a/mod/groups/views/default/groups/sidebar/find.php b/mod/groups/views/default/groups/sidebar/find.php
new file mode 100644
index 000000000..c1a8da3c2
--- /dev/null
+++ b/mod/groups/views/default/groups/sidebar/find.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Group search
+ *
+ * @package ElggGroups
+ */
+$url = elgg_get_site_url() . 'groups/search';
+$body = elgg_view_form('groups/find', array(
+ 'action' => $url,
+ 'method' => 'get',
+ 'disable_security' => true,
+));
+
+echo elgg_view_module('aside', elgg_echo('groups:searchtag'), $body);
diff --git a/mod/groups/views/default/groups/sidebar/members.php b/mod/groups/views/default/groups/sidebar/members.php
new file mode 100644
index 000000000..11273d0e6
--- /dev/null
+++ b/mod/groups/views/default/groups/sidebar/members.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Group members sidebar
+ *
+ * @package ElggGroups
+ *
+ * @uses $vars['entity'] Group entity
+ * @uses $vars['limit'] The number of members to display
+ */
+
+$limit = elgg_extract('limit', $vars, 14);
+
+$all_link = elgg_view('output/url', array(
+ 'href' => 'groups/members/' . $vars['entity']->guid,
+ 'text' => elgg_echo('groups:members:more'),
+ 'is_trusted' => true,
+));
+
+$body = elgg_list_entities_from_relationship(array(
+ 'relationship' => 'member',
+ 'relationship_guid' => $vars['entity']->guid,
+ 'inverse_relationship' => true,
+ 'types' => 'user',
+ 'limit' => $limit,
+ 'list_type' => 'gallery',
+ 'gallery_class' => 'elgg-gallery-users',
+ 'pagination' => false
+));
+
+$body .= "<div class='center mts'>$all_link</div>";
+
+echo elgg_view_module('aside', elgg_echo('groups:members'), $body);
diff --git a/mod/groups/views/default/groups/sidebar/my_status.php b/mod/groups/views/default/groups/sidebar/my_status.php
new file mode 100644
index 000000000..4c36c0213
--- /dev/null
+++ b/mod/groups/views/default/groups/sidebar/my_status.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Group status for logged in user
+ *
+ * @package ElggGroups
+ *
+ * @uses $vars['entity'] Group entity
+ */
+
+$group = elgg_extract('entity', $vars);
+$user = elgg_get_logged_in_user_entity();
+$subscribed = elgg_extract('subscribed', $vars);
+
+if (!elgg_is_logged_in()) {
+ return true;
+}
+$t = new ElggMenuItem();
+// membership status
+$is_member = $group->isMember($user);
+$is_owner = $group->getOwnerEntity() == $user;
+
+if ($is_owner) {
+ elgg_register_menu_item('groups:my_status', array(
+ 'name' => 'membership_status',
+ 'text' => '<a>' . elgg_echo('groups:my_status:group_owner') . '</a>',
+ 'href' => false
+ ));
+} elseif ($is_member) {
+ elgg_register_menu_item('groups:my_status', array(
+ 'name' => 'membership_status',
+ 'text' => '<a>' . elgg_echo('groups:my_status:group_member') . '</a>',
+ 'href' => false
+ ));
+} else {
+ elgg_register_menu_item('groups:my_status', array(
+ 'name' => 'membership_status',
+ 'text' => elgg_echo('groups:join'),
+ 'href' => "/action/groups/join?group_guid={$group->getGUID()}",
+ 'is_action' => true
+ ));
+}
+
+// notification info
+if (elgg_is_active_plugin('notifications')) {
+ if ($subscribed) {
+ elgg_register_menu_item('groups:my_status', array(
+ 'name' => 'subscription_status',
+ 'text' => elgg_echo('groups:subscribed'),
+ 'href' => "notifications/group/$user->username",
+ 'is_action' => true
+ ));
+ } else {
+ elgg_register_menu_item('groups:my_status', array(
+ 'name' => 'subscription_status',
+ 'text' => elgg_echo('groups:unsubscribed'),
+ 'href' => "notifications/group/$user->username"
+ ));
+ }
+}
+
+$body = elgg_view_menu('groups:my_status');
+echo elgg_view_module('aside', elgg_echo('groups:my_status'), $body);
diff --git a/mod/groups/views/default/groups/sidebar/search.php b/mod/groups/views/default/groups/sidebar/search.php
new file mode 100644
index 000000000..226835715
--- /dev/null
+++ b/mod/groups/views/default/groups/sidebar/search.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Search for content in this group
+ *
+ * @uses vars['entity'] ElggGroup
+ */
+
+$url = elgg_get_site_url() . 'search';
+$body = elgg_view_form('groups/search', array(
+ 'action' => $url,
+ 'method' => 'get',
+ 'disable_security' => true,
+), $vars);
+
+echo elgg_view_module('aside', elgg_echo('groups:search_in_group'), $body); \ No newline at end of file
diff --git a/mod/groups/views/default/object/groupforumtopic.php b/mod/groups/views/default/object/groupforumtopic.php
new file mode 100644
index 000000000..34e0ee3cc
--- /dev/null
+++ b/mod/groups/views/default/object/groupforumtopic.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * Forum topic entity view
+ *
+ * @package ElggGroups
+*/
+
+$full = elgg_extract('full_view', $vars, FALSE);
+$topic = elgg_extract('entity', $vars, FALSE);
+
+if (!$topic) {
+ return true;
+}
+
+$poster = $topic->getOwnerEntity();
+$group = $topic->getContainerEntity();
+$excerpt = elgg_get_excerpt($topic->description);
+
+$poster_icon = elgg_view_entity_icon($poster, 'tiny');
+$poster_link = elgg_view('output/url', array(
+ 'href' => $poster->getURL(),
+ 'text' => $poster->name,
+ 'is_trusted' => true,
+));
+$poster_text = elgg_echo('groups:started', array($poster->name));
+
+$tags = elgg_view('output/tags', array('tags' => $topic->tags));
+$date = elgg_view_friendly_time($topic->time_created);
+
+$replies_link = '';
+$reply_text = '';
+$num_replies = elgg_get_annotations(array(
+ 'annotation_name' => 'group_topic_post',
+ 'guid' => $topic->getGUID(),
+ 'count' => true,
+));
+if ($num_replies != 0) {
+ $last_reply = $topic->getAnnotations('group_topic_post', 1, 0, 'desc');
+ $poster = $last_reply[0]->getOwnerEntity();
+ $reply_time = elgg_view_friendly_time($last_reply[0]->time_created);
+ $reply_text = elgg_echo('groups:updated', array($poster->name, $reply_time));
+
+ $replies_link = elgg_view('output/url', array(
+ 'href' => $topic->getURL() . '#group-replies',
+ 'text' => elgg_echo('group:replies') . " ($num_replies)",
+ 'is_trusted' => true,
+ ));
+}
+
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $vars['entity'],
+ 'handler' => 'discussion',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+// do not show the metadata and controls in widget view
+if (elgg_in_context('widgets')) {
+ $metadata = '';
+}
+
+if ($full) {
+ $subtitle = "$poster_text $date $replies_link";
+
+ $params = array(
+ 'entity' => $topic,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'tags' => $tags,
+ );
+ $params = $params + $vars;
+ $list_body = elgg_view('object/elements/summary', $params);
+
+ $info = elgg_view_image_block($poster_icon, $list_body);
+
+ $body = elgg_view('output/longtext', array('value' => $topic->description));
+
+ echo <<<HTML
+$info
+$body
+HTML;
+
+} else {
+ // brief view
+ $subtitle = "$poster_text $date $replies_link <span class=\"groups-latest-reply\">$reply_text</span>";
+
+ $params = array(
+ 'entity' => $topic,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'tags' => $tags,
+ 'content' => $excerpt,
+ );
+ $params = $params + $vars;
+ $list_body = elgg_view('object/elements/summary', $params);
+
+ echo elgg_view_image_block($poster_icon, $list_body);
+}
diff --git a/mod/groups/views/default/plugins/groups/settings.php b/mod/groups/views/default/plugins/groups/settings.php
new file mode 100644
index 000000000..41ea146db
--- /dev/null
+++ b/mod/groups/views/default/plugins/groups/settings.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Groups plugin settings
+ */
+
+// set default value
+if (!isset($vars['entity']->hidden_groups)) {
+ $vars['entity']->hidden_groups = 'no';
+}
+
+// set default value
+if (!isset($vars['entity']->limited_groups)) {
+ $vars['entity']->limited_groups = 'no';
+}
+
+echo '<div>';
+echo elgg_echo('groups:allowhiddengroups');
+echo ' ';
+echo elgg_view('input/dropdown', array(
+ 'name' => 'params[hidden_groups]',
+ 'options_values' => array(
+ 'no' => elgg_echo('option:no'),
+ 'yes' => elgg_echo('option:yes')
+ ),
+ 'value' => $vars['entity']->hidden_groups,
+));
+echo '</div>';
+
+echo '<div>';
+echo elgg_echo('groups:whocancreate');
+echo ' ';
+echo elgg_view('input/dropdown', array(
+ 'name' => 'params[limited_groups]',
+ 'options_values' => array(
+ 'no' => elgg_echo('LOGGED_IN'),
+ 'yes' => elgg_echo('admin')
+ ),
+ 'value' => $vars['entity']->limited_groups,
+));
+echo '</div>';
diff --git a/mod/groups/views/default/river/annotation/group_topic_post/reply.php b/mod/groups/views/default/river/annotation/group_topic_post/reply.php
new file mode 100644
index 000000000..afc823bde
--- /dev/null
+++ b/mod/groups/views/default/river/annotation/group_topic_post/reply.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Reply river view
+ */
+$object = $vars['item']->getObjectEntity();
+$reply = $vars['item']->getAnnotation();
+$excerpt = elgg_get_excerpt($reply->value);
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => $excerpt,
+)); \ No newline at end of file
diff --git a/mod/groups/views/default/river/group/create.php b/mod/groups/views/default/river/group/create.php
new file mode 100644
index 000000000..ea42b5b00
--- /dev/null
+++ b/mod/groups/views/default/river/group/create.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Group creation river view.
+ */
+
+$object = $vars['item']->getObjectEntity();
+$excerpt = strip_tags($object->description);
+$excerpt = elgg_get_excerpt($excerpt);
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => $excerpt,
+)); \ No newline at end of file
diff --git a/mod/groups/views/default/river/object/groupforumtopic/create.php b/mod/groups/views/default/river/object/groupforumtopic/create.php
new file mode 100644
index 000000000..e7d92bc08
--- /dev/null
+++ b/mod/groups/views/default/river/object/groupforumtopic/create.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Group forum topic create river view.
+ */
+
+$object = $vars['item']->getObjectEntity();
+$excerpt = strip_tags($object->description);
+$excerpt = elgg_get_excerpt($excerpt);
+
+$responses = '';
+if (elgg_is_logged_in() && $object->canAnnotate(0, 'group_topic_post')) {
+ // inline comment form
+ $form_vars = array('id' => "groups-reply-{$object->getGUID()}", 'class' => 'hidden');
+ $body_vars = array('entity' => $object, 'inline' => true);
+ $responses = elgg_view_form('discussion/reply/save', $form_vars, $body_vars);
+}
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => $excerpt,
+ 'responses' => $responses,
+));
diff --git a/mod/groups/views/default/river/relationship/member/create.php b/mod/groups/views/default/river/relationship/member/create.php
new file mode 100644
index 000000000..0afd87e4b
--- /dev/null
+++ b/mod/groups/views/default/river/relationship/member/create.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Group join river view.
+ */
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+));
diff --git a/mod/groups/views/default/widgets/a_users_groups/content.php b/mod/groups/views/default/widgets/a_users_groups/content.php
new file mode 100644
index 000000000..fe1a46e39
--- /dev/null
+++ b/mod/groups/views/default/widgets/a_users_groups/content.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Elgg file widget view
+ *
+ * @package ElggFile
+ */
+
+
+$num = $vars['entity']->num_display;
+
+$options = array(
+ 'type' => 'group',
+ 'relationship' => 'member',
+ 'relationship_guid' => $vars['entity']->owner_guid,
+ 'limit' => $num,
+ 'full_view' => FALSE,
+ 'pagination' => FALSE,
+);
+$content = elgg_list_entities_from_relationship($options);
+
+echo $content;
+
+if ($content) {
+ $url = "groups/member/" . elgg_get_page_owner_entity()->username;
+ $more_link = elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => elgg_echo('groups:more'),
+ 'is_trusted' => true,
+ ));
+ echo "<span class=\"elgg-widget-more\">$more_link</span>";
+} else {
+ echo elgg_echo('groups:none');
+}
diff --git a/mod/groups/views/default/widgets/a_users_groups/edit.php b/mod/groups/views/default/widgets/a_users_groups/edit.php
new file mode 100644
index 000000000..e49a996b7
--- /dev/null
+++ b/mod/groups/views/default/widgets/a_users_groups/edit.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Elgg group widget edit view
+ *
+ * @package ElggGroups
+ */
+
+
+// set default value
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 4;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('groups:widget:num_display'); ?>:
+ <?php echo $dropdown; ?>
+</div>
diff --git a/mod/groups/views/rss/annotation/group_topic_post.php b/mod/groups/views/rss/annotation/group_topic_post.php
new file mode 100644
index 000000000..0d3a40117
--- /dev/null
+++ b/mod/groups/views/rss/annotation/group_topic_post.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * RSS view for a discussion reply
+ *
+ * @uses $vars['annotation']
+ */
+
+$annotation = $vars['annotation'];
+
+$poster = $annotation->getOwnerEntity();
+$poster_name = htmlspecialchars($poster->name, ENT_NOQUOTES, 'UTF-8');
+$pubdate = date('r', $annotation->getTimeCreated());
+$permalink = $annotation->getURL();
+
+$title = elgg_echo('discussion:reply:title', array($poster_name));
+
+$creator = elgg_view('page/components/creator', array('entity' => $annotation));
+$extensions = elgg_view('extensions/item', $vars);
+
+$item = <<<__HTML
+<item>
+ <guid isPermaLink='true'>$permalink</guid>
+ <pubDate>$pubdate</pubDate>
+ <link>$permalink</link>
+ <title><![CDATA[$title]]></title>
+ <description><![CDATA[{$vars['annotation']->value}]]></description>
+ $creator$extensions
+</item>
+
+__HTML;
+
+echo $item;
diff --git a/mod/groups/views/rss/discussion/replies.php b/mod/groups/views/rss/discussion/replies.php
new file mode 100644
index 000000000..419003b21
--- /dev/null
+++ b/mod/groups/views/rss/discussion/replies.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * List replies RSS view
+ *
+ * @uses $vars['entity'] ElggEntity
+ */
+
+$options = array(
+ 'guid' => $vars['entity']->getGUID(),
+ 'annotation_name' => 'group_topic_post',
+);
+echo elgg_list_annotations($options);
diff --git a/mod/groups/views/rss/groups/profile/layout.php b/mod/groups/views/rss/groups/profile/layout.php
new file mode 100644
index 000000000..0dafe78ad
--- /dev/null
+++ b/mod/groups/views/rss/groups/profile/layout.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Group profile RSS view
+ *
+ * Displays a list of the latest content in the group
+ *
+ * @uses $vars['entity'] ElggGroup object
+ */
+
+$entities = elgg_get_config('registered_entities');
+
+if (!empty($entities['object'])) {
+ echo elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtypes' => $entities['object'],
+ 'container_guid' => $vars['entity']->getGUID(),
+ ));
+}
diff --git a/mod/groups/views/rss/object/groupforumtopic.php b/mod/groups/views/rss/object/groupforumtopic.php
new file mode 100644
index 000000000..b2d05d488
--- /dev/null
+++ b/mod/groups/views/rss/object/groupforumtopic.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Elgg groupforumtopic RSS view
+ *
+ * @package ElggGroups
+ */
+
+$title = $vars['entity']->title;
+if (empty($title)) {
+ $title = strip_tags($vars['entity']->description);
+ $title = elgg_get_excerpt($title, 32);
+}
+
+$permalink = htmlspecialchars($vars['entity']->getURL(), ENT_NOQUOTES, 'UTF-8');
+$pubdate = date('r', $vars['entity']->getTimeCreated());
+
+$description = elgg_autop($vars['entity']->description);
+
+$creator = elgg_view('page/components/creator', $vars);
+$georss = elgg_view('page/components/georss', $vars);
+$extension = elgg_view('extensions/item', $vars);
+
+$item = <<<__HTML
+<item>
+ <guid isPermaLink="true">$permalink</guid>
+ <pubDate>$pubdate</pubDate>
+ <link>$permalink</link>
+ <title><![CDATA[$title]]></title>
+ <description><![CDATA[$description]]></description>
+ $creator$georss$extension
+</item>
+
+__HTML;
+
+echo $item;
diff --git a/mod/htmlawed/manifest.xml b/mod/htmlawed/manifest.xml
new file mode 100644
index 000000000..6807e96a4
--- /dev/null
+++ b/mod/htmlawed/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>HTMLawed</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>security</category>
+ <description>Provides security filtering. Running a site with this plugin disabled is extremely insecure. DO NOT DISABLE.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/htmlawed/start.php b/mod/htmlawed/start.php
new file mode 100644
index 000000000..12b6470a3
--- /dev/null
+++ b/mod/htmlawed/start.php
@@ -0,0 +1,165 @@
+<?php
+/**
+ * Elgg htmLawed tag filtering.
+ *
+ * http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/
+ *
+ * @package ElgghtmLawed
+ */
+
+
+elgg_register_event_handler('init', 'system', 'htmlawed_init');
+
+/**
+ * Initialize the htmlawed plugin
+ */
+function htmlawed_init() {
+ elgg_register_plugin_hook_handler('validate', 'input', 'htmlawed_filter_tags', 1);
+
+ $lib = elgg_get_plugins_path() . "htmlawed/vendors/htmLawed/htmLawed.php";
+ elgg_register_library('htmlawed', $lib);
+
+ elgg_register_plugin_hook_handler('unit_test', 'system', 'htmlawed_test');
+}
+
+/**
+ * htmLawed filtering of data
+ *
+ * Called on the 'validate', 'input' plugin hook
+ *
+ * Triggers the 'config', 'htmlawed' plugin hook so that plugins can change
+ * htmlawed's configuration. For information on configuraton options, see
+ * http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/htmLawed_README.htm#s2.2
+ *
+ * @param string $hook Hook name
+ * @param string $type The type of hook
+ * @param mixed $result Data to filter
+ * @param array $params Not used
+ * @return mixed
+ */
+function htmlawed_filter_tags($hook, $type, $result, $params) {
+ $var = $result;
+
+ elgg_load_library('htmlawed');
+
+ $htmlawed_config = array(
+ // seems to handle about everything we need.
+ 'safe' => true,
+ 'deny_attribute' => 'class, on*',
+ 'hook_tag' => 'htmlawed_tag_post_processor',
+
+ 'schemes' => '*:http,https,ftp,news,mailto,rtsp,teamspeak,gopher,mms,callto',
+ // apparent this doesn't work.
+ // 'style:color,cursor,text-align,font-size,font-weight,font-style,border,margin,padding,float'
+ );
+
+ // add nofollow to all links on output
+ if (!elgg_in_context('input')) {
+ $htmlawed_config['anti_link_spam'] = array('/./', '');
+ }
+
+ $htmlawed_config = elgg_trigger_plugin_hook('config', 'htmlawed', null, $htmlawed_config);
+
+ if (!is_array($var)) {
+ $result = htmLawed($var, $htmlawed_config);
+ } else {
+ array_walk_recursive($var, 'htmLawedArray', $htmlawed_config);
+ $result = $var;
+ }
+
+ return $result;
+}
+
+/**
+ * wrapper function for htmlawed for handling arrays
+ */
+function htmLawedArray(&$v, $k, $htmlawed_config) {
+ $v = htmLawed($v, $htmlawed_config);
+}
+
+/**
+ * Post processor for tags in htmlawed
+ *
+ * This runs after htmlawed has filtered. It runs for each tag and filters out
+ * style attributes we don't want.
+ *
+ * This function triggers the 'allowed_styles', 'htmlawed' plugin hook.
+ *
+ * @todo since these styles are created for tinymce, shouldn't they be in the
+ * tinymce plugin?
+ *
+ * @param string $element The tag element name
+ * @param array $attributes An array of attributes
+ * @return string
+ */
+function htmlawed_tag_post_processor($element, $attributes = false) {
+ if ($attributes === false) {
+ // This is a closing tag. Prevent further processing to avoid inserting a duplicate tag
+
+ return "</${element}>";
+ }
+
+ // these are the default styles used by tinymce.
+ $allowed_styles = array(
+ 'color', 'cursor', 'text-align', 'vertical-align', 'font-size',
+ 'font-weight', 'font-style', 'border', 'border-top', 'background-color',
+ 'border-bottom', 'border-left', 'border-right',
+ 'margin', 'margin-top', 'margin-bottom', 'margin-left',
+ 'margin-right', 'padding', 'float', 'text-decoration'
+ );
+
+ $params = array('tag' => $element);
+ $allowed_styles = elgg_trigger_plugin_hook('allowed_styles', 'htmlawed', $params, $allowed_styles);
+
+ // must return something.
+ $string = '';
+
+ foreach ($attributes as $attr => $value) {
+ if ($attr == 'style') {
+ $styles = explode(';', $value);
+
+ $style_str = '';
+ foreach ($styles as $style) {
+ if (!trim($style)) {
+ continue;
+ }
+ list($style_attr, $style_value) = explode(':', trim($style));
+ $style_attr = trim($style_attr);
+ $style_value = trim($style_value);
+
+ if (in_array($style_attr, $allowed_styles)) {
+ $style_str .= "$style_attr: $style_value; ";
+ }
+ }
+
+ if ($style_str) {
+ $style_str = trim($style_str);
+ $string .= " style=\"$style_str\"";
+ }
+
+ } else {
+ $string .= " $attr=\"$value\"";
+ }
+ }
+
+ // some things (tinymce) don't like tags like <p > so make sure
+ // to only add a space if needed.
+ if ($string = trim($string)) {
+ $string = " $string";
+ }
+
+ $r = "<$element$string>";
+ return $r;
+}
+
+/**
+ * Runs unit tests for htmlawed
+ *
+ * @return array
+ * */
+function htmlawed_test($hook, $type, $value, $params) {
+ global $CONFIG;
+
+ $value[] = dirname(__FILE__) . '/tests/tags.php';
+ return $value;
+}
diff --git a/mod/htmlawed/tests/tags.php b/mod/htmlawed/tests/tags.php
new file mode 100644
index 000000000..b3914a9d6
--- /dev/null
+++ b/mod/htmlawed/tests/tags.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Dupplicated tags in htmlawed
+ */
+class HtmLawedDuplicateTagsTest extends ElggCoreUnitTest {
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ parent::__construct();
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ elgg_set_ignore_access($this->ia);
+ // all __destruct() code should go above here
+ parent::__destruct();
+ }
+
+ public function testNotDuplicateTags() {
+ $filter_html = '<ul><li>item</li></ul>';
+ set_input('test', $filter_html);
+
+ $expected = $filter_html;
+ $result = get_input('test');
+ $this->assertEqual($result, $expected);
+ }
+} \ No newline at end of file
diff --git a/mod/htmlawed/vendors/htmLawed/htmLawed.php b/mod/htmlawed/vendors/htmLawed/htmLawed.php
new file mode 100755
index 000000000..0d9624961
--- /dev/null
+++ b/mod/htmlawed/vendors/htmLawed/htmLawed.php
@@ -0,0 +1,711 @@
+<?php
+
+/*
+htmLawed 1.1.11, 5 June 2012
+Copyright Santosh Patnaik
+Dual licensed with LGPL 3 and GPL 2 or later
+A PHP Labware internal utility; www.bioinformatics.org/phplabware/internal_utilities/htmLawed
+
+See htmLawed_README.txt/htm
+*/
+
+function htmLawed($t, $C=1, $S=array()){
+$C = is_array($C) ? $C : array();
+if(!empty($C['valid_xhtml'])){
+ $C['elements'] = empty($C['elements']) ? '*-center-dir-font-isindex-menu-s-strike-u' : $C['elements'];
+ $C['make_tag_strict'] = isset($C['make_tag_strict']) ? $C['make_tag_strict'] : 2;
+ $C['xml:lang'] = isset($C['xml:lang']) ? $C['xml:lang'] : 2;
+}
+// config eles
+$e = array('a'=>1, 'abbr'=>1, 'acronym'=>1, 'address'=>1, 'applet'=>1, 'area'=>1, 'b'=>1, 'bdo'=>1, 'big'=>1, 'blockquote'=>1, 'br'=>1, 'button'=>1, 'caption'=>1, 'center'=>1, 'cite'=>1, 'code'=>1, 'col'=>1, 'colgroup'=>1, 'dd'=>1, 'del'=>1, 'dfn'=>1, 'dir'=>1, 'div'=>1, 'dl'=>1, 'dt'=>1, 'em'=>1, 'embed'=>1, 'fieldset'=>1, 'font'=>1, 'form'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'hr'=>1, 'i'=>1, 'iframe'=>1, 'img'=>1, 'input'=>1, 'ins'=>1, 'isindex'=>1, 'kbd'=>1, 'label'=>1, 'legend'=>1, 'li'=>1, 'map'=>1, 'menu'=>1, 'noscript'=>1, 'object'=>1, 'ol'=>1, 'optgroup'=>1, 'option'=>1, 'p'=>1, 'param'=>1, 'pre'=>1, 'q'=>1, 'rb'=>1, 'rbc'=>1, 'rp'=>1, 'rt'=>1, 'rtc'=>1, 'ruby'=>1, 's'=>1, 'samp'=>1, 'script'=>1, 'select'=>1, 'small'=>1, 'span'=>1, 'strike'=>1, 'strong'=>1, 'sub'=>1, 'sup'=>1, 'table'=>1, 'tbody'=>1, 'td'=>1, 'textarea'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1, 'tt'=>1, 'u'=>1, 'ul'=>1, 'var'=>1); // 86/deprecated+embed+ruby
+if(!empty($C['safe'])){
+ unset($e['applet'], $e['embed'], $e['iframe'], $e['object'], $e['script']);
+}
+$x = !empty($C['elements']) ? str_replace(array("\n", "\r", "\t", ' '), '', $C['elements']) : '*';
+if($x == '-*'){$e = array();}
+elseif(strpos($x, '*') === false){$e = array_flip(explode(',', $x));}
+else{
+ if(isset($x[1])){
+ preg_match_all('`(?:^|-|\+)[^\-+]+?(?=-|\+|$)`', $x, $m, PREG_SET_ORDER);
+ for($i=count($m); --$i>=0;){$m[$i] = $m[$i][0];}
+ foreach($m as $v){
+ if($v[0] == '+'){$e[substr($v, 1)] = 1;}
+ if($v[0] == '-' && isset($e[($v = substr($v, 1))]) && !in_array('+'. $v, $m)){unset($e[$v]);}
+ }
+ }
+}
+$C['elements'] =& $e;
+// config attrs
+$x = !empty($C['deny_attribute']) ? str_replace(array("\n", "\r", "\t", ' '), '', $C['deny_attribute']) : '';
+$x = array_flip((isset($x[0]) && $x[0] == '*') ? explode('-', $x) : explode(',', $x. (!empty($C['safe']) ? ',on*' : '')));
+if(isset($x['on*'])){
+ unset($x['on*']);
+ $x += array('onblur'=>1, 'onchange'=>1, 'onclick'=>1, 'ondblclick'=>1, 'onfocus'=>1, 'onkeydown'=>1, 'onkeypress'=>1, 'onkeyup'=>1, 'onmousedown'=>1, 'onmousemove'=>1, 'onmouseout'=>1, 'onmouseover'=>1, 'onmouseup'=>1, 'onreset'=>1, 'onselect'=>1, 'onsubmit'=>1);
+}
+$C['deny_attribute'] = $x;
+// config URL
+$x = (isset($C['schemes'][2]) && strpos($C['schemes'], ':')) ? strtolower($C['schemes']) : 'href: aim, feed, file, ftp, gopher, http, https, irc, mailto, news, nntp, sftp, ssh, telnet; *:file, http, https';
+$C['schemes'] = array();
+foreach(explode(';', str_replace(array(' ', "\t", "\r", "\n"), '', $x)) as $v){
+ $x = $x2 = null; list($x, $x2) = explode(':', $v, 2);
+ if($x2){$C['schemes'][$x] = array_flip(explode(',', $x2));}
+}
+if(!isset($C['schemes']['*'])){$C['schemes']['*'] = array('file'=>1, 'http'=>1, 'https'=>1,);}
+if(!empty($C['safe']) && empty($C['schemes']['style'])){$C['schemes']['style'] = array('!'=>1);}
+$C['abs_url'] = isset($C['abs_url']) ? $C['abs_url'] : 0;
+if(!isset($C['base_url']) or !preg_match('`^[a-zA-Z\d.+\-]+://[^/]+/(.+?/)?$`', $C['base_url'])){
+ $C['base_url'] = $C['abs_url'] = 0;
+}
+// config rest
+$C['and_mark'] = empty($C['and_mark']) ? 0 : 1;
+$C['anti_link_spam'] = (isset($C['anti_link_spam']) && is_array($C['anti_link_spam']) && count($C['anti_link_spam']) == 2 && (empty($C['anti_link_spam'][0]) or hl_regex($C['anti_link_spam'][0])) && (empty($C['anti_link_spam'][1]) or hl_regex($C['anti_link_spam'][1]))) ? $C['anti_link_spam'] : 0;
+$C['anti_mail_spam'] = isset($C['anti_mail_spam']) ? $C['anti_mail_spam'] : 0;
+$C['balance'] = isset($C['balance']) ? (bool)$C['balance'] : 1;
+$C['cdata'] = isset($C['cdata']) ? $C['cdata'] : (empty($C['safe']) ? 3 : 0);
+$C['clean_ms_char'] = empty($C['clean_ms_char']) ? 0 : $C['clean_ms_char'];
+$C['comment'] = isset($C['comment']) ? $C['comment'] : (empty($C['safe']) ? 3 : 0);
+$C['css_expression'] = empty($C['css_expression']) ? 0 : 1;
+$C['direct_list_nest'] = empty($C['direct_list_nest']) ? 0 : 1;
+$C['hexdec_entity'] = isset($C['hexdec_entity']) ? $C['hexdec_entity'] : 1;
+$C['hook'] = (!empty($C['hook']) && function_exists($C['hook'])) ? $C['hook'] : 0;
+$C['hook_tag'] = (!empty($C['hook_tag']) && function_exists($C['hook_tag'])) ? $C['hook_tag'] : 0;
+$C['keep_bad'] = isset($C['keep_bad']) ? $C['keep_bad'] : 6;
+$C['lc_std_val'] = isset($C['lc_std_val']) ? (bool)$C['lc_std_val'] : 1;
+$C['make_tag_strict'] = isset($C['make_tag_strict']) ? $C['make_tag_strict'] : 1;
+$C['named_entity'] = isset($C['named_entity']) ? (bool)$C['named_entity'] : 1;
+$C['no_deprecated_attr'] = isset($C['no_deprecated_attr']) ? $C['no_deprecated_attr'] : 1;
+$C['parent'] = isset($C['parent'][0]) ? strtolower($C['parent']) : 'body';
+$C['show_setting'] = !empty($C['show_setting']) ? $C['show_setting'] : 0;
+$C['style_pass'] = empty($C['style_pass']) ? 0 : 1;
+$C['tidy'] = empty($C['tidy']) ? 0 : $C['tidy'];
+$C['unique_ids'] = isset($C['unique_ids']) ? $C['unique_ids'] : 1;
+$C['xml:lang'] = isset($C['xml:lang']) ? $C['xml:lang'] : 0;
+
+if(isset($GLOBALS['C'])){$reC = $GLOBALS['C'];}
+$GLOBALS['C'] = $C;
+$S = is_array($S) ? $S : hl_spec($S);
+if(isset($GLOBALS['S'])){$reS = $GLOBALS['S'];}
+$GLOBALS['S'] = $S;
+
+$t = preg_replace('`[\x00-\x08\x0b-\x0c\x0e-\x1f]`', '', $t);
+if($C['clean_ms_char']){
+ $x = array("\x7f"=>'', "\x80"=>'&#8364;', "\x81"=>'', "\x83"=>'&#402;', "\x85"=>'&#8230;', "\x86"=>'&#8224;', "\x87"=>'&#8225;', "\x88"=>'&#710;', "\x89"=>'&#8240;', "\x8a"=>'&#352;', "\x8b"=>'&#8249;', "\x8c"=>'&#338;', "\x8d"=>'', "\x8e"=>'&#381;', "\x8f"=>'', "\x90"=>'', "\x95"=>'&#8226;', "\x96"=>'&#8211;', "\x97"=>'&#8212;', "\x98"=>'&#732;', "\x99"=>'&#8482;', "\x9a"=>'&#353;', "\x9b"=>'&#8250;', "\x9c"=>'&#339;', "\x9d"=>'', "\x9e"=>'&#382;', "\x9f"=>'&#376;');
+ $x = $x + ($C['clean_ms_char'] == 1 ? array("\x82"=>'&#8218;', "\x84"=>'&#8222;', "\x91"=>'&#8216;', "\x92"=>'&#8217;', "\x93"=>'&#8220;', "\x94"=>'&#8221;') : array("\x82"=>'\'', "\x84"=>'"', "\x91"=>'\'', "\x92"=>'\'', "\x93"=>'"', "\x94"=>'"'));
+ $t = strtr($t, $x);
+}
+if($C['cdata'] or $C['comment']){$t = preg_replace_callback('`<!(?:(?:--.*?--)|(?:\[CDATA\[.*?\]\]))>`sm', 'hl_cmtcd', $t);}
+$t = preg_replace_callback('`&amp;([A-Za-z][A-Za-z0-9]{1,30}|#(?:[0-9]{1,8}|[Xx][0-9A-Fa-f]{1,7}));`', 'hl_ent', str_replace('&', '&amp;', $t));
+if($C['unique_ids'] && !isset($GLOBALS['hl_Ids'])){$GLOBALS['hl_Ids'] = array();}
+if($C['hook']){$t = $C['hook']($t, $C, $S);}
+if($C['show_setting'] && preg_match('`^[a-z][a-z0-9_]*$`i', $C['show_setting'])){
+ $GLOBALS[$C['show_setting']] = array('config'=>$C, 'spec'=>$S, 'time'=>microtime());
+}
+// main
+$t = preg_replace_callback('`<(?:(?:\s|$)|(?:[^>]*(?:>|$)))|>`m', 'hl_tag', $t);
+$t = $C['balance'] ? hl_bal($t, $C['keep_bad'], $C['parent']) : $t;
+$t = (($C['cdata'] or $C['comment']) && strpos($t, "\x01") !== false) ? str_replace(array("\x01", "\x02", "\x03", "\x04", "\x05"), array('', '', '&', '<', '>'), $t) : $t;
+$t = $C['tidy'] ? hl_tidy($t, $C['tidy'], $C['parent']) : $t;
+unset($C, $e);
+if(isset($reC)){$GLOBALS['C'] = $reC;}
+if(isset($reS)){$GLOBALS['S'] = $reS;}
+return $t;
+// eof
+}
+
+function hl_attrval($t, $p){
+// check attr val against $S
+$o = 1; $l = strlen($t);
+foreach($p as $k=>$v){
+ switch($k){
+ case 'maxlen':if($l > $v){$o = 0;}
+ break; case 'minlen': if($l < $v){$o = 0;}
+ break; case 'maxval': if((float)($t) > $v){$o = 0;}
+ break; case 'minval': if((float)($t) < $v){$o = 0;}
+ break; case 'match': if(!preg_match($v, $t)){$o = 0;}
+ break; case 'nomatch': if(preg_match($v, $t)){$o = 0;}
+ break; case 'oneof':
+ $m = 0;
+ foreach(explode('|', $v) as $n){if($t == $n){$m = 1; break;}}
+ $o = $m;
+ break; case 'noneof':
+ $m = 1;
+ foreach(explode('|', $v) as $n){if($t == $n){$m = 0; break;}}
+ $o = $m;
+ break; default:
+ break;
+ }
+ if(!$o){break;}
+}
+return ($o ? $t : (isset($p['default']) ? $p['default'] : 0));
+// eof
+}
+
+function hl_bal($t, $do=1, $in='div'){
+// balance tags
+// by content
+$cB = array('blockquote'=>1, 'form'=>1, 'map'=>1, 'noscript'=>1); // Block
+$cE = array('area'=>1, 'br'=>1, 'col'=>1, 'embed'=>1, 'hr'=>1, 'img'=>1, 'input'=>1, 'isindex'=>1, 'param'=>1); // Empty
+$cF = array('button'=>1, 'del'=>1, 'div'=>1, 'dd'=>1, 'fieldset'=>1, 'iframe'=>1, 'ins'=>1, 'li'=>1, 'noscript'=>1, 'object'=>1, 'td'=>1, 'th'=>1); // Flow; later context-wise dynamic move of ins & del to $cI
+$cI = array('a'=>1, 'abbr'=>1, 'acronym'=>1, 'address'=>1, 'b'=>1, 'bdo'=>1, 'big'=>1, 'caption'=>1, 'cite'=>1, 'code'=>1, 'dfn'=>1, 'dt'=>1, 'em'=>1, 'font'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'i'=>1, 'kbd'=>1, 'label'=>1, 'legend'=>1, 'p'=>1, 'pre'=>1, 'q'=>1, 'rb'=>1, 'rt'=>1, 's'=>1, 'samp'=>1, 'small'=>1, 'span'=>1, 'strike'=>1, 'strong'=>1, 'sub'=>1, 'sup'=>1, 'tt'=>1, 'u'=>1, 'var'=>1); // Inline
+$cN = array('a'=>array('a'=>1), 'button'=>array('a'=>1, 'button'=>1, 'fieldset'=>1, 'form'=>1, 'iframe'=>1, 'input'=>1, 'label'=>1, 'select'=>1, 'textarea'=>1), 'fieldset'=>array('fieldset'=>1), 'form'=>array('form'=>1), 'label'=>array('label'=>1), 'noscript'=>array('script'=>1), 'pre'=>array('big'=>1, 'font'=>1, 'img'=>1, 'object'=>1, 'script'=>1, 'small'=>1, 'sub'=>1, 'sup'=>1), 'rb'=>array('ruby'=>1), 'rt'=>array('ruby'=>1)); // Illegal
+$cN2 = array_keys($cN);
+$cR = array('blockquote'=>1, 'dir'=>1, 'dl'=>1, 'form'=>1, 'map'=>1, 'menu'=>1, 'noscript'=>1, 'ol'=>1, 'optgroup'=>1, 'rbc'=>1, 'rtc'=>1, 'ruby'=>1, 'select'=>1, 'table'=>1, 'tbody'=>1, 'tfoot'=>1, 'thead'=>1, 'tr'=>1, 'ul'=>1);
+$cS = array('colgroup'=>array('col'=>1), 'dir'=>array('li'=>1), 'dl'=>array('dd'=>1, 'dt'=>1), 'menu'=>array('li'=>1), 'ol'=>array('li'=>1), 'optgroup'=>array('option'=>1), 'option'=>array('#pcdata'=>1), 'rbc'=>array('rb'=>1), 'rp'=>array('#pcdata'=>1), 'rtc'=>array('rt'=>1), 'ruby'=>array('rb'=>1, 'rbc'=>1, 'rp'=>1, 'rt'=>1, 'rtc'=>1), 'select'=>array('optgroup'=>1, 'option'=>1), 'script'=>array('#pcdata'=>1), 'table'=>array('caption'=>1, 'col'=>1, 'colgroup'=>1, 'tfoot'=>1, 'tbody'=>1, 'tr'=>1, 'thead'=>1), 'tbody'=>array('tr'=>1), 'tfoot'=>array('tr'=>1), 'textarea'=>array('#pcdata'=>1), 'thead'=>array('tr'=>1), 'tr'=>array('td'=>1, 'th'=>1), 'ul'=>array('li'=>1)); // Specific - immediate parent-child
+if($GLOBALS['C']['direct_list_nest']){$cS['ol'] = $cS['ul'] += array('ol'=>1, 'ul'=>1);}
+$cO = array('address'=>array('p'=>1), 'applet'=>array('param'=>1), 'blockquote'=>array('script'=>1), 'fieldset'=>array('legend'=>1, '#pcdata'=>1), 'form'=>array('script'=>1), 'map'=>array('area'=>1), 'object'=>array('param'=>1, 'embed'=>1)); // Other
+$cT = array('colgroup'=>1, 'dd'=>1, 'dt'=>1, 'li'=>1, 'option'=>1, 'p'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1); // Omitable closing
+// block/inline type; ins & del both type; #pcdata: text
+$eB = array('address'=>1, 'blockquote'=>1, 'center'=>1, 'del'=>1, 'dir'=>1, 'dl'=>1, 'div'=>1, 'fieldset'=>1, 'form'=>1, 'ins'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'hr'=>1, 'isindex'=>1, 'menu'=>1, 'noscript'=>1, 'ol'=>1, 'p'=>1, 'pre'=>1, 'table'=>1, 'ul'=>1);
+$eI = array('#pcdata'=>1, 'a'=>1, 'abbr'=>1, 'acronym'=>1, 'applet'=>1, 'b'=>1, 'bdo'=>1, 'big'=>1, 'br'=>1, 'button'=>1, 'cite'=>1, 'code'=>1, 'del'=>1, 'dfn'=>1, 'em'=>1, 'embed'=>1, 'font'=>1, 'i'=>1, 'iframe'=>1, 'img'=>1, 'input'=>1, 'ins'=>1, 'kbd'=>1, 'label'=>1, 'map'=>1, 'object'=>1, 'q'=>1, 'ruby'=>1, 's'=>1, 'samp'=>1, 'select'=>1, 'script'=>1, 'small'=>1, 'span'=>1, 'strike'=>1, 'strong'=>1, 'sub'=>1, 'sup'=>1, 'textarea'=>1, 'tt'=>1, 'u'=>1, 'var'=>1);
+$eN = array('a'=>1, 'big'=>1, 'button'=>1, 'fieldset'=>1, 'font'=>1, 'form'=>1, 'iframe'=>1, 'img'=>1, 'input'=>1, 'label'=>1, 'object'=>1, 'ruby'=>1, 'script'=>1, 'select'=>1, 'small'=>1, 'sub'=>1, 'sup'=>1, 'textarea'=>1); // Exclude from specific ele; $cN values
+$eO = array('area'=>1, 'caption'=>1, 'col'=>1, 'colgroup'=>1, 'dd'=>1, 'dt'=>1, 'legend'=>1, 'li'=>1, 'optgroup'=>1, 'option'=>1, 'param'=>1, 'rb'=>1, 'rbc'=>1, 'rp'=>1, 'rt'=>1, 'rtc'=>1, 'script'=>1, 'tbody'=>1, 'td'=>1, 'tfoot'=>1, 'thead'=>1, 'th'=>1, 'tr'=>1); // Missing in $eB & $eI
+$eF = $eB + $eI;
+
+// $in sets allowed child
+$in = ((isset($eF[$in]) && $in != '#pcdata') or isset($eO[$in])) ? $in : 'div';
+if(isset($cE[$in])){
+ return (!$do ? '' : str_replace(array('<', '>'), array('&lt;', '&gt;'), $t));
+}
+if(isset($cS[$in])){$inOk = $cS[$in];}
+elseif(isset($cI[$in])){$inOk = $eI; $cI['del'] = 1; $cI['ins'] = 1;}
+elseif(isset($cF[$in])){$inOk = $eF; unset($cI['del'], $cI['ins']);}
+elseif(isset($cB[$in])){$inOk = $eB; unset($cI['del'], $cI['ins']);}
+if(isset($cO[$in])){$inOk = $inOk + $cO[$in];}
+if(isset($cN[$in])){$inOk = array_diff_assoc($inOk, $cN[$in]);}
+
+$t = explode('<', $t);
+$ok = $q = array(); // $q seq list of open non-empty ele
+ob_start();
+
+for($i=-1, $ci=count($t); ++$i<$ci;){
+ // allowed $ok in parent $p
+ if($ql = count($q)){
+ $p = array_pop($q);
+ $q[] = $p;
+ if(isset($cS[$p])){$ok = $cS[$p];}
+ elseif(isset($cI[$p])){$ok = $eI; $cI['del'] = 1; $cI['ins'] = 1;}
+ elseif(isset($cF[$p])){$ok = $eF; unset($cI['del'], $cI['ins']);}
+ elseif(isset($cB[$p])){$ok = $eB; unset($cI['del'], $cI['ins']);}
+ if(isset($cO[$p])){$ok = $ok + $cO[$p];}
+ if(isset($cN[$p])){$ok = array_diff_assoc($ok, $cN[$p]);}
+ }else{$ok = $inOk; unset($cI['del'], $cI['ins']);}
+ // bad tags, & ele content
+ if(isset($e) && ($do == 1 or (isset($ok['#pcdata']) && ($do == 3 or $do == 5)))){
+ echo '&lt;', $s, $e, $a, '&gt;';
+ }
+ if(isset($x[0])){
+ if($do < 3 or isset($ok['#pcdata'])){echo $x;}
+ elseif(strpos($x, "\x02\x04")){
+ foreach(preg_split('`(\x01\x02[^\x01\x02]+\x02\x01)`', $x, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) as $v){
+ echo (substr($v, 0, 2) == "\x01\x02" ? $v : ($do > 4 ? preg_replace('`\S`', '', $v) : ''));
+ }
+ }elseif($do > 4){echo preg_replace('`\S`', '', $x);}
+ }
+ // get markup
+ if(!preg_match('`^(/?)([a-zA-Z1-6]+)([^>]*)>(.*)`sm', $t[$i], $r)){$x = $t[$i]; continue;}
+ $s = null; $e = null; $a = null; $x = null; list($all, $s, $e, $a, $x) = $r;
+ // close tag
+ if($s){
+ if(isset($cE[$e]) or !in_array($e, $q)){continue;} // Empty/unopen
+ if($p == $e){array_pop($q); echo '</', $e, '>'; unset($e); continue;} // Last open
+ $add = ''; // Nesting - close open tags that need to be
+ for($j=-1, $cj=count($q); ++$j<$cj;){
+ if(($d = array_pop($q)) == $e){break;}
+ else{$add .= "</{$d}>";}
+ }
+ echo $add, '</', $e, '>'; unset($e); continue;
+ }
+ // open tag
+ // $cB ele needs $eB ele as child
+ if(isset($cB[$e]) && strlen(trim($x))){
+ $t[$i] = "{$e}{$a}>";
+ array_splice($t, $i+1, 0, 'div>'. $x); unset($e, $x); ++$ci; --$i; continue;
+ }
+ if((($ql && isset($cB[$p])) or (isset($cB[$in]) && !$ql)) && !isset($eB[$e]) && !isset($ok[$e])){
+ array_splice($t, $i, 0, 'div>'); unset($e, $x); ++$ci; --$i; continue;
+ }
+ // if no open ele, $in = parent; mostly immediate parent-child relation should hold
+ if(!$ql or !isset($eN[$e]) or !array_intersect($q, $cN2)){
+ if(!isset($ok[$e])){
+ if($ql && isset($cT[$p])){echo '</', array_pop($q), '>'; unset($e, $x); --$i;}
+ continue;
+ }
+ if(!isset($cE[$e])){$q[] = $e;}
+ echo '<', $e, $a, '>'; unset($e); continue;
+ }
+ // specific parent-child
+ if(isset($cS[$p][$e])){
+ if(!isset($cE[$e])){$q[] = $e;}
+ echo '<', $e, $a, '>'; unset($e); continue;
+ }
+ // nesting
+ $add = '';
+ $q2 = array();
+ for($k=-1, $kc=count($q); ++$k<$kc;){
+ $d = $q[$k];
+ $ok2 = array();
+ if(isset($cS[$d])){$q2[] = $d; continue;}
+ $ok2 = isset($cI[$d]) ? $eI : $eF;
+ if(isset($cO[$d])){$ok2 = $ok2 + $cO[$d];}
+ if(isset($cN[$d])){$ok2 = array_diff_assoc($ok2, $cN[$d]);}
+ if(!isset($ok2[$e])){
+ if(!$k && !isset($inOk[$e])){continue 2;}
+ $add = "</{$d}>";
+ for(;++$k<$kc;){$add = "</{$q[$k]}>{$add}";}
+ break;
+ }
+ else{$q2[] = $d;}
+ }
+ $q = $q2;
+ if(!isset($cE[$e])){$q[] = $e;}
+ echo $add, '<', $e, $a, '>'; unset($e); continue;
+}
+
+// end
+if($ql = count($q)){
+ $p = array_pop($q);
+ $q[] = $p;
+ if(isset($cS[$p])){$ok = $cS[$p];}
+ elseif(isset($cI[$p])){$ok = $eI; $cI['del'] = 1; $cI['ins'] = 1;}
+ elseif(isset($cF[$p])){$ok = $eF; unset($cI['del'], $cI['ins']);}
+ elseif(isset($cB[$p])){$ok = $eB; unset($cI['del'], $cI['ins']);}
+ if(isset($cO[$p])){$ok = $ok + $cO[$p];}
+ if(isset($cN[$p])){$ok = array_diff_assoc($ok, $cN[$p]);}
+}else{$ok = $inOk; unset($cI['del'], $cI['ins']);}
+if(isset($e) && ($do == 1 or (isset($ok['#pcdata']) && ($do == 3 or $do == 5)))){
+ echo '&lt;', $s, $e, $a, '&gt;';
+}
+if(isset($x[0])){
+ if(strlen(trim($x)) && (($ql && isset($cB[$p])) or (isset($cB[$in]) && !$ql))){
+ echo '<div>', $x, '</div>';
+ }
+ elseif($do < 3 or isset($ok['#pcdata'])){echo $x;}
+ elseif(strpos($x, "\x02\x04")){
+ foreach(preg_split('`(\x01\x02[^\x01\x02]+\x02\x01)`', $x, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) as $v){
+ echo (substr($v, 0, 2) == "\x01\x02" ? $v : ($do > 4 ? preg_replace('`\S`', '', $v) : ''));
+ }
+ }elseif($do > 4){echo preg_replace('`\S`', '', $x);}
+}
+while(!empty($q) && ($e = array_pop($q))){echo '</', $e, '>';}
+$o = ob_get_contents();
+ob_end_clean();
+return $o;
+// eof
+}
+
+function hl_cmtcd($t){
+// comment/CDATA sec handler
+$t = $t[0];
+global $C;
+if(!($v = $C[$n = $t[3] == '-' ? 'comment' : 'cdata'])){return $t;}
+if($v == 1){return '';}
+if($n == 'comment'){
+ if(substr(($t = preg_replace('`--+`', '-', substr($t, 4, -3))), -1) != ' '){$t .= ' ';}
+}
+else{$t = substr($t, 1, -1);}
+$t = $v == 2 ? str_replace(array('&', '<', '>'), array('&amp;', '&lt;', '&gt;'), $t) : $t;
+return str_replace(array('&', '<', '>'), array("\x03", "\x04", "\x05"), ($n == 'comment' ? "\x01\x02\x04!--$t--\x05\x02\x01" : "\x01\x01\x04$t\x05\x01\x01"));
+// eof
+}
+
+function hl_ent($t){
+// entitity handler
+global $C;
+$t = $t[1];
+static $U = array('quot'=>1,'amp'=>1,'lt'=>1,'gt'=>1);
+static $N = array('fnof'=>'402', 'Alpha'=>'913', 'Beta'=>'914', 'Gamma'=>'915', 'Delta'=>'916', 'Epsilon'=>'917', 'Zeta'=>'918', 'Eta'=>'919', 'Theta'=>'920', 'Iota'=>'921', 'Kappa'=>'922', 'Lambda'=>'923', 'Mu'=>'924', 'Nu'=>'925', 'Xi'=>'926', 'Omicron'=>'927', 'Pi'=>'928', 'Rho'=>'929', 'Sigma'=>'931', 'Tau'=>'932', 'Upsilon'=>'933', 'Phi'=>'934', 'Chi'=>'935', 'Psi'=>'936', 'Omega'=>'937', 'alpha'=>'945', 'beta'=>'946', 'gamma'=>'947', 'delta'=>'948', 'epsilon'=>'949', 'zeta'=>'950', 'eta'=>'951', 'theta'=>'952', 'iota'=>'953', 'kappa'=>'954', 'lambda'=>'955', 'mu'=>'956', 'nu'=>'957', 'xi'=>'958', 'omicron'=>'959', 'pi'=>'960', 'rho'=>'961', 'sigmaf'=>'962', 'sigma'=>'963', 'tau'=>'964', 'upsilon'=>'965', 'phi'=>'966', 'chi'=>'967', 'psi'=>'968', 'omega'=>'969', 'thetasym'=>'977', 'upsih'=>'978', 'piv'=>'982', 'bull'=>'8226', 'hellip'=>'8230', 'prime'=>'8242', 'Prime'=>'8243', 'oline'=>'8254', 'frasl'=>'8260', 'weierp'=>'8472', 'image'=>'8465', 'real'=>'8476', 'trade'=>'8482', 'alefsym'=>'8501', 'larr'=>'8592', 'uarr'=>'8593', 'rarr'=>'8594', 'darr'=>'8595', 'harr'=>'8596', 'crarr'=>'8629', 'lArr'=>'8656', 'uArr'=>'8657', 'rArr'=>'8658', 'dArr'=>'8659', 'hArr'=>'8660', 'forall'=>'8704', 'part'=>'8706', 'exist'=>'8707', 'empty'=>'8709', 'nabla'=>'8711', 'isin'=>'8712', 'notin'=>'8713', 'ni'=>'8715', 'prod'=>'8719', 'sum'=>'8721', 'minus'=>'8722', 'lowast'=>'8727', 'radic'=>'8730', 'prop'=>'8733', 'infin'=>'8734', 'ang'=>'8736', 'and'=>'8743', 'or'=>'8744', 'cap'=>'8745', 'cup'=>'8746', 'int'=>'8747', 'there4'=>'8756', 'sim'=>'8764', 'cong'=>'8773', 'asymp'=>'8776', 'ne'=>'8800', 'equiv'=>'8801', 'le'=>'8804', 'ge'=>'8805', 'sub'=>'8834', 'sup'=>'8835', 'nsub'=>'8836', 'sube'=>'8838', 'supe'=>'8839', 'oplus'=>'8853', 'otimes'=>'8855', 'perp'=>'8869', 'sdot'=>'8901', 'lceil'=>'8968', 'rceil'=>'8969', 'lfloor'=>'8970', 'rfloor'=>'8971', 'lang'=>'9001', 'rang'=>'9002', 'loz'=>'9674', 'spades'=>'9824', 'clubs'=>'9827', 'hearts'=>'9829', 'diams'=>'9830', 'apos'=>'39', 'OElig'=>'338', 'oelig'=>'339', 'Scaron'=>'352', 'scaron'=>'353', 'Yuml'=>'376', 'circ'=>'710', 'tilde'=>'732', 'ensp'=>'8194', 'emsp'=>'8195', 'thinsp'=>'8201', 'zwnj'=>'8204', 'zwj'=>'8205', 'lrm'=>'8206', 'rlm'=>'8207', 'ndash'=>'8211', 'mdash'=>'8212', 'lsquo'=>'8216', 'rsquo'=>'8217', 'sbquo'=>'8218', 'ldquo'=>'8220', 'rdquo'=>'8221', 'bdquo'=>'8222', 'dagger'=>'8224', 'Dagger'=>'8225', 'permil'=>'8240', 'lsaquo'=>'8249', 'rsaquo'=>'8250', 'euro'=>'8364', 'nbsp'=>'160', 'iexcl'=>'161', 'cent'=>'162', 'pound'=>'163', 'curren'=>'164', 'yen'=>'165', 'brvbar'=>'166', 'sect'=>'167', 'uml'=>'168', 'copy'=>'169', 'ordf'=>'170', 'laquo'=>'171', 'not'=>'172', 'shy'=>'173', 'reg'=>'174', 'macr'=>'175', 'deg'=>'176', 'plusmn'=>'177', 'sup2'=>'178', 'sup3'=>'179', 'acute'=>'180', 'micro'=>'181', 'para'=>'182', 'middot'=>'183', 'cedil'=>'184', 'sup1'=>'185', 'ordm'=>'186', 'raquo'=>'187', 'frac14'=>'188', 'frac12'=>'189', 'frac34'=>'190', 'iquest'=>'191', 'Agrave'=>'192', 'Aacute'=>'193', 'Acirc'=>'194', 'Atilde'=>'195', 'Auml'=>'196', 'Aring'=>'197', 'AElig'=>'198', 'Ccedil'=>'199', 'Egrave'=>'200', 'Eacute'=>'201', 'Ecirc'=>'202', 'Euml'=>'203', 'Igrave'=>'204', 'Iacute'=>'205', 'Icirc'=>'206', 'Iuml'=>'207', 'ETH'=>'208', 'Ntilde'=>'209', 'Ograve'=>'210', 'Oacute'=>'211', 'Ocirc'=>'212', 'Otilde'=>'213', 'Ouml'=>'214', 'times'=>'215', 'Oslash'=>'216', 'Ugrave'=>'217', 'Uacute'=>'218', 'Ucirc'=>'219', 'Uuml'=>'220', 'Yacute'=>'221', 'THORN'=>'222', 'szlig'=>'223', 'agrave'=>'224', 'aacute'=>'225', 'acirc'=>'226', 'atilde'=>'227', 'auml'=>'228', 'aring'=>'229', 'aelig'=>'230', 'ccedil'=>'231', 'egrave'=>'232', 'eacute'=>'233', 'ecirc'=>'234', 'euml'=>'235', 'igrave'=>'236', 'iacute'=>'237', 'icirc'=>'238', 'iuml'=>'239', 'eth'=>'240', 'ntilde'=>'241', 'ograve'=>'242', 'oacute'=>'243', 'ocirc'=>'244', 'otilde'=>'245', 'ouml'=>'246', 'divide'=>'247', 'oslash'=>'248', 'ugrave'=>'249', 'uacute'=>'250', 'ucirc'=>'251', 'uuml'=>'252', 'yacute'=>'253', 'thorn'=>'254', 'yuml'=>'255');
+if($t[0] != '#'){
+ return ($C['and_mark'] ? "\x06" : '&'). (isset($U[$t]) ? $t : (isset($N[$t]) ? (!$C['named_entity'] ? '#'. ($C['hexdec_entity'] > 1 ? 'x'. dechex($N[$t]) : $N[$t]) : $t) : 'amp;'. $t)). ';';
+}
+if(($n = ctype_digit($t = substr($t, 1)) ? intval($t) : hexdec(substr($t, 1))) < 9 or ($n > 13 && $n < 32) or $n == 11 or $n == 12 or ($n > 126 && $n < 160 && $n != 133) or ($n > 55295 && ($n < 57344 or ($n > 64975 && $n < 64992) or $n == 65534 or $n == 65535 or $n > 1114111))){
+ return ($C['and_mark'] ? "\x06" : '&'). "amp;#{$t};";
+}
+return ($C['and_mark'] ? "\x06" : '&'). '#'. (((ctype_digit($t) && $C['hexdec_entity'] < 2) or !$C['hexdec_entity']) ? $n : 'x'. dechex($n)). ';';
+// eof
+}
+
+function hl_prot($p, $c=null){
+// check URL scheme
+global $C;
+$b = $a = '';
+if($c == null){$c = 'style'; $b = $p[1]; $a = $p[3]; $p = trim($p[2]);}
+$c = isset($C['schemes'][$c]) ? $C['schemes'][$c] : $C['schemes']['*'];
+static $d = 'denied:';
+if(isset($c['!']) && substr($p, 0, 7) != $d){$p = "$d$p";}
+if(isset($c['*']) or !strcspn($p, '#?;') or (substr($p, 0, 7) == $d)){return "{$b}{$p}{$a}";} // All ok, frag, query, param
+if(preg_match('`^([a-z\d\-+.&#; ]+?)(:|&#(58|x3a);|%3a|\\\\0{0,4}3a).`i', $p, $m) && !isset($c[strtolower($m[1])])){ // Denied prot
+ return "{$b}{$d}{$p}{$a}";
+}
+if($C['abs_url']){
+ if($C['abs_url'] == -1 && strpos($p, $C['base_url']) === 0){ // Make url rel
+ $p = substr($p, strlen($C['base_url']));
+ }elseif(empty($m[1])){ // Make URL abs
+ if(substr($p, 0, 2) == '//'){$p = substr($C['base_url'], 0, strpos($C['base_url'], ':')+1). $p;}
+ elseif($p[0] == '/'){$p = preg_replace('`(^.+?://[^/]+)(.*)`', '$1', $C['base_url']). $p;}
+ elseif(strcspn($p, './')){$p = $C['base_url']. $p;}
+ else{
+ preg_match('`^([a-zA-Z\d\-+.]+://[^/]+)(.*)`', $C['base_url'], $m);
+ $p = preg_replace('`(?<=/)\./`', '', $m[2]. $p);
+ while(preg_match('`(?<=/)([^/]{3,}|[^/.]+?|\.[^/.]|[^/.]\.)/\.\./`', $p)){
+ $p = preg_replace('`(?<=/)([^/]{3,}|[^/.]+?|\.[^/.]|[^/.]\.)/\.\./`', '', $p);
+ }
+ $p = $m[1]. $p;
+ }
+ }
+}
+return "{$b}{$p}{$a}";
+// eof
+}
+
+function hl_regex($p){
+// ?regex
+if(empty($p)){return 0;}
+if($t = ini_get('track_errors')){$o = isset($php_errormsg) ? $php_errormsg : null;}
+else{ini_set('track_errors', 1);}
+unset($php_errormsg);
+if(($d = ini_get('display_errors'))){ini_set('display_errors', 0);}
+preg_match($p, '');
+if($d){ini_set('display_errors', 1);}
+$r = isset($php_errormsg) ? 0 : 1;
+if($t){$php_errormsg = isset($o) ? $o : null;}
+else{ini_set('track_errors', 0);}
+return $r;
+// eof
+}
+
+function hl_spec($t){
+// final $spec
+$s = array();
+$t = str_replace(array("\t", "\r", "\n", ' '), '', preg_replace('/"(?>(`.|[^"])*)"/sme', 'substr(str_replace(array(";", "|", "~", " ", ",", "/", "(", ")", \'`"\'), array("\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08", "\""), "$0"), 1, -1)', trim($t)));
+for($i = count(($t = explode(';', $t))); --$i>=0;){
+ $w = $t[$i];
+ if(empty($w) or ($e = strpos($w, '=')) === false or !strlen(($a = substr($w, $e+1)))){continue;}
+ $y = $n = array();
+ foreach(explode(',', $a) as $v){
+ if(!preg_match('`^([a-z:\-\*]+)(?:\((.*?)\))?`i', $v, $m)){continue;}
+ if(($x = strtolower($m[1])) == '-*'){$n['*'] = 1; continue;}
+ if($x[0] == '-'){$n[substr($x, 1)] = 1; continue;}
+ if(!isset($m[2])){$y[$x] = 1; continue;}
+ foreach(explode('/', $m[2]) as $m){
+ if(empty($m) or ($p = strpos($m, '=')) == 0 or $p < 5){$y[$x] = 1; continue;}
+ $y[$x][strtolower(substr($m, 0, $p))] = str_replace(array("\x01", "\x02", "\x03", "\x04", "\x05", "\x06", "\x07", "\x08"), array(";", "|", "~", " ", ",", "/", "(", ")"), substr($m, $p+1));
+ }
+ if(isset($y[$x]['match']) && !hl_regex($y[$x]['match'])){unset($y[$x]['match']);}
+ if(isset($y[$x]['nomatch']) && !hl_regex($y[$x]['nomatch'])){unset($y[$x]['nomatch']);}
+ }
+ if(!count($y) && !count($n)){continue;}
+ foreach(explode(',', substr($w, 0, $e)) as $v){
+ if(!strlen(($v = strtolower($v)))){continue;}
+ if(count($y)){$s[$v] = $y;}
+ if(count($n)){$s[$v]['n'] = $n;}
+ }
+}
+return $s;
+// eof
+}
+
+function hl_tag($t){
+// tag/attribute handler
+global $C;
+$t = $t[0];
+// invalid < >
+if($t == '< '){return '&lt; ';}
+if($t == '>'){return '&gt;';}
+if(!preg_match('`^<(/?)([a-zA-Z][a-zA-Z1-6]*)([^>]*?)\s?>$`m', $t, $m)){
+ return str_replace(array('<', '>'), array('&lt;', '&gt;'), $t);
+}elseif(!isset($C['elements'][($e = strtolower($m[2]))])){
+ return (($C['keep_bad']%2) ? str_replace(array('<', '>'), array('&lt;', '&gt;'), $t) : '');
+}
+// attr string
+$a = str_replace(array("\n", "\r", "\t"), ' ', trim($m[3]));
+// tag transform
+static $eD = array('applet'=>1, 'center'=>1, 'dir'=>1, 'embed'=>1, 'font'=>1, 'isindex'=>1, 'menu'=>1, 's'=>1, 'strike'=>1, 'u'=>1); // Deprecated
+if($C['make_tag_strict'] && isset($eD[$e])){
+ $trt = hl_tag2($e, $a, $C['make_tag_strict']);
+ if(!$e){return (($C['keep_bad']%2) ? str_replace(array('<', '>'), array('&lt;', '&gt;'), $t) : '');}
+}
+// close tag
+static $eE = array('area'=>1, 'br'=>1, 'col'=>1, 'embed'=>1, 'hr'=>1, 'img'=>1, 'input'=>1, 'isindex'=>1, 'param'=>1); // Empty ele
+if(!empty($m[1])){
+ return (!isset($eE[$e]) ? (empty($C['hook_tag']) ? "</$e>" : $C['hook_tag']($e)) : (($C['keep_bad'])%2 ? str_replace(array('<', '>'), array('&lt;', '&gt;'), $t) : ''));
+}
+
+// open tag & attr
+static $aN = array('abbr'=>array('td'=>1, 'th'=>1), 'accept-charset'=>array('form'=>1), 'accept'=>array('form'=>1, 'input'=>1), 'accesskey'=>array('a'=>1, 'area'=>1, 'button'=>1, 'input'=>1, 'label'=>1, 'legend'=>1, 'textarea'=>1), 'action'=>array('form'=>1), 'align'=>array('caption'=>1, 'embed'=>1, 'applet'=>1, 'iframe'=>1, 'img'=>1, 'input'=>1, 'object'=>1, 'legend'=>1, 'table'=>1, 'hr'=>1, 'div'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'p'=>1, 'col'=>1, 'colgroup'=>1, 'tbody'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1), 'alt'=>array('applet'=>1, 'area'=>1, 'img'=>1, 'input'=>1), 'archive'=>array('applet'=>1, 'object'=>1), 'axis'=>array('td'=>1, 'th'=>1), 'bgcolor'=>array('embed'=>1, 'table'=>1, 'tr'=>1, 'td'=>1, 'th'=>1), 'border'=>array('table'=>1, 'img'=>1, 'object'=>1), 'bordercolor'=>array('table'=>1, 'td'=>1, 'tr'=>1), 'cellpadding'=>array('table'=>1), 'cellspacing'=>array('table'=>1), 'char'=>array('col'=>1, 'colgroup'=>1, 'tbody'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1), 'charoff'=>array('col'=>1, 'colgroup'=>1, 'tbody'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1), 'charset'=>array('a'=>1, 'script'=>1), 'checked'=>array('input'=>1), 'cite'=>array('blockquote'=>1, 'q'=>1, 'del'=>1, 'ins'=>1), 'classid'=>array('object'=>1), 'clear'=>array('br'=>1), 'code'=>array('applet'=>1), 'codebase'=>array('object'=>1, 'applet'=>1), 'codetype'=>array('object'=>1), 'color'=>array('font'=>1), 'cols'=>array('textarea'=>1), 'colspan'=>array('td'=>1, 'th'=>1), 'compact'=>array('dir'=>1, 'dl'=>1, 'menu'=>1, 'ol'=>1, 'ul'=>1), 'coords'=>array('area'=>1, 'a'=>1), 'data'=>array('object'=>1), 'datetime'=>array('del'=>1, 'ins'=>1), 'declare'=>array('object'=>1), 'defer'=>array('script'=>1), 'dir'=>array('bdo'=>1), 'disabled'=>array('button'=>1, 'input'=>1, 'optgroup'=>1, 'option'=>1, 'select'=>1, 'textarea'=>1), 'enctype'=>array('form'=>1), 'face'=>array('font'=>1), 'flashvars'=>array('embed'=>1), 'for'=>array('label'=>1), 'frame'=>array('table'=>1), 'frameborder'=>array('iframe'=>1), 'headers'=>array('td'=>1, 'th'=>1), 'height'=>array('embed'=>1, 'iframe'=>1, 'td'=>1, 'th'=>1, 'img'=>1, 'object'=>1, 'applet'=>1), 'href'=>array('a'=>1, 'area'=>1), 'hreflang'=>array('a'=>1), 'hspace'=>array('applet'=>1, 'img'=>1, 'object'=>1), 'ismap'=>array('img'=>1, 'input'=>1), 'label'=>array('option'=>1, 'optgroup'=>1), 'language'=>array('script'=>1), 'longdesc'=>array('img'=>1, 'iframe'=>1), 'marginheight'=>array('iframe'=>1), 'marginwidth'=>array('iframe'=>1), 'maxlength'=>array('input'=>1), 'method'=>array('form'=>1), 'model'=>array('embed'=>1), 'multiple'=>array('select'=>1), 'name'=>array('button'=>1, 'embed'=>1, 'textarea'=>1, 'applet'=>1, 'select'=>1, 'form'=>1, 'iframe'=>1, 'img'=>1, 'a'=>1, 'input'=>1, 'object'=>1, 'map'=>1, 'param'=>1), 'nohref'=>array('area'=>1), 'noshade'=>array('hr'=>1), 'nowrap'=>array('td'=>1, 'th'=>1), 'object'=>array('applet'=>1), 'onblur'=>array('a'=>1, 'area'=>1, 'button'=>1, 'input'=>1, 'label'=>1, 'select'=>1, 'textarea'=>1), 'onchange'=>array('input'=>1, 'select'=>1, 'textarea'=>1), 'onfocus'=>array('a'=>1, 'area'=>1, 'button'=>1, 'input'=>1, 'label'=>1, 'select'=>1, 'textarea'=>1), 'onreset'=>array('form'=>1), 'onselect'=>array('input'=>1, 'textarea'=>1), 'onsubmit'=>array('form'=>1), 'pluginspage'=>array('embed'=>1), 'pluginurl'=>array('embed'=>1), 'prompt'=>array('isindex'=>1), 'readonly'=>array('textarea'=>1, 'input'=>1), 'rel'=>array('a'=>1), 'rev'=>array('a'=>1), 'rows'=>array('textarea'=>1), 'rowspan'=>array('td'=>1, 'th'=>1), 'rules'=>array('table'=>1), 'scope'=>array('td'=>1, 'th'=>1), 'scrolling'=>array('iframe'=>1), 'selected'=>array('option'=>1), 'shape'=>array('area'=>1, 'a'=>1), 'size'=>array('hr'=>1, 'font'=>1, 'input'=>1, 'select'=>1), 'span'=>array('col'=>1, 'colgroup'=>1), 'src'=>array('embed'=>1, 'script'=>1, 'input'=>1, 'iframe'=>1, 'img'=>1), 'standby'=>array('object'=>1), 'start'=>array('ol'=>1), 'summary'=>array('table'=>1), 'tabindex'=>array('a'=>1, 'area'=>1, 'button'=>1, 'input'=>1, 'object'=>1, 'select'=>1, 'textarea'=>1), 'target'=>array('a'=>1, 'area'=>1, 'form'=>1), 'type'=>array('a'=>1, 'embed'=>1, 'object'=>1, 'param'=>1, 'script'=>1, 'input'=>1, 'li'=>1, 'ol'=>1, 'ul'=>1, 'button'=>1), 'usemap'=>array('img'=>1, 'input'=>1, 'object'=>1), 'valign'=>array('col'=>1, 'colgroup'=>1, 'tbody'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1), 'value'=>array('input'=>1, 'option'=>1, 'param'=>1, 'button'=>1, 'li'=>1), 'valuetype'=>array('param'=>1), 'vspace'=>array('applet'=>1, 'img'=>1, 'object'=>1), 'width'=>array('embed'=>1, 'hr'=>1, 'iframe'=>1, 'img'=>1, 'object'=>1, 'table'=>1, 'td'=>1, 'th'=>1, 'applet'=>1, 'col'=>1, 'colgroup'=>1, 'pre'=>1), 'wmode'=>array('embed'=>1), 'xml:space'=>array('pre'=>1, 'script'=>1, 'style'=>1)); // Ele-specific
+static $aNE = array('checked'=>1, 'compact'=>1, 'declare'=>1, 'defer'=>1, 'disabled'=>1, 'ismap'=>1, 'multiple'=>1, 'nohref'=>1, 'noresize'=>1, 'noshade'=>1, 'nowrap'=>1, 'readonly'=>1, 'selected'=>1); // Empty
+static $aNP = array('action'=>1, 'cite'=>1, 'classid'=>1, 'codebase'=>1, 'data'=>1, 'href'=>1, 'longdesc'=>1, 'model'=>1, 'pluginspage'=>1, 'pluginurl'=>1, 'usemap'=>1); // Need scheme check; excludes style, on* & src
+static $aNU = array('class'=>array('param'=>1, 'script'=>1), 'dir'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'iframe'=>1, 'param'=>1, 'script'=>1), 'id'=>array('script'=>1), 'lang'=>array('applet'=>1, 'br'=>1, 'iframe'=>1, 'param'=>1, 'script'=>1), 'xml:lang'=>array('applet'=>1, 'br'=>1, 'iframe'=>1, 'param'=>1, 'script'=>1), 'onclick'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'ondblclick'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onkeydown'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onkeypress'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onkeyup'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onmousedown'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onmousemove'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onmouseout'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onmouseover'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'onmouseup'=>array('applet'=>1, 'bdo'=>1, 'br'=>1, 'font'=>1, 'iframe'=>1, 'isindex'=>1, 'param'=>1, 'script'=>1), 'style'=>array('param'=>1, 'script'=>1), 'title'=>array('param'=>1, 'script'=>1)); // Univ & exceptions
+
+if($C['lc_std_val']){
+ // predef attr vals for $eAL & $aNE ele
+ static $aNL = array('all'=>1, 'baseline'=>1, 'bottom'=>1, 'button'=>1, 'center'=>1, 'char'=>1, 'checkbox'=>1, 'circle'=>1, 'col'=>1, 'colgroup'=>1, 'cols'=>1, 'data'=>1, 'default'=>1, 'file'=>1, 'get'=>1, 'groups'=>1, 'hidden'=>1, 'image'=>1, 'justify'=>1, 'left'=>1, 'ltr'=>1, 'middle'=>1, 'none'=>1, 'object'=>1, 'password'=>1, 'poly'=>1, 'post'=>1, 'preserve'=>1, 'radio'=>1, 'rect'=>1, 'ref'=>1, 'reset'=>1, 'right'=>1, 'row'=>1, 'rowgroup'=>1, 'rows'=>1, 'rtl'=>1, 'submit'=>1, 'text'=>1, 'top'=>1);
+ static $eAL = array('a'=>1, 'area'=>1, 'bdo'=>1, 'button'=>1, 'col'=>1, 'form'=>1, 'img'=>1, 'input'=>1, 'object'=>1, 'optgroup'=>1, 'option'=>1, 'param'=>1, 'script'=>1, 'select'=>1, 'table'=>1, 'td'=>1, 'tfoot'=>1, 'th'=>1, 'thead'=>1, 'tr'=>1, 'xml:space'=>1);
+ $lcase = isset($eAL[$e]) ? 1 : 0;
+}
+
+$depTr = 0;
+if($C['no_deprecated_attr']){
+ // dep attr:applicable ele
+ static $aND = array('align'=>array('caption'=>1, 'div'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'hr'=>1, 'img'=>1, 'input'=>1, 'legend'=>1, 'object'=>1, 'p'=>1, 'table'=>1), 'bgcolor'=>array('table'=>1, 'td'=>1, 'th'=>1, 'tr'=>1), 'border'=>array('img'=>1, 'object'=>1), 'bordercolor'=>array('table'=>1, 'td'=>1, 'tr'=>1), 'clear'=>array('br'=>1), 'compact'=>array('dl'=>1, 'ol'=>1, 'ul'=>1), 'height'=>array('td'=>1, 'th'=>1), 'hspace'=>array('img'=>1, 'object'=>1), 'language'=>array('script'=>1), 'name'=>array('a'=>1, 'form'=>1, 'iframe'=>1, 'img'=>1, 'map'=>1), 'noshade'=>array('hr'=>1), 'nowrap'=>array('td'=>1, 'th'=>1), 'size'=>array('hr'=>1), 'start'=>array('ol'=>1), 'type'=>array('li'=>1, 'ol'=>1, 'ul'=>1), 'value'=>array('li'=>1), 'vspace'=>array('img'=>1, 'object'=>1), 'width'=>array('hr'=>1, 'pre'=>1, 'td'=>1, 'th'=>1));
+ static $eAD = array('a'=>1, 'br'=>1, 'caption'=>1, 'div'=>1, 'dl'=>1, 'form'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'hr'=>1, 'iframe'=>1, 'img'=>1, 'input'=>1, 'legend'=>1, 'li'=>1, 'map'=>1, 'object'=>1, 'ol'=>1, 'p'=>1, 'pre'=>1, 'script'=>1, 'table'=>1, 'td'=>1, 'th'=>1, 'tr'=>1, 'ul'=>1);
+ $depTr = isset($eAD[$e]) ? 1 : 0;
+}
+
+// attr name-vals
+if(strpos($a, "\x01") !== false){$a = preg_replace('`\x01[^\x01]*\x01`', '', $a);} // No comment/CDATA sec
+$mode = 0; $a = trim($a, ' /'); $aA = array();
+while(strlen($a)){
+ $w = 0;
+ switch($mode){
+ case 0: // Name
+ if(preg_match('`^[a-zA-Z][\-a-zA-Z:]+`', $a, $m)){
+ $nm = strtolower($m[0]);
+ $w = $mode = 1; $a = ltrim(substr_replace($a, '', 0, strlen($m[0])));
+ }
+ break; case 1:
+ if($a[0] == '='){ // =
+ $w = 1; $mode = 2; $a = ltrim($a, '= ');
+ }else{ // No val
+ $w = 1; $mode = 0; $a = ltrim($a);
+ $aA[$nm] = '';
+ }
+ break; case 2: // Val
+ if(preg_match('`^((?:"[^"]*")|(?:\'[^\']*\')|(?:\s*[^\s"\']+))(.*)`', $a, $m)){
+ $a = ltrim($m[2]); $m = $m[1]; $w = 1; $mode = 0;
+ $aA[$nm] = trim(($m[0] == '"' or $m[0] == '\'') ? substr($m, 1, -1) : $m);
+ }
+ break;
+ }
+ if($w == 0){ // Parse errs, deal with space, " & '
+ $a = preg_replace('`^(?:"[^"]*("|$)|\'[^\']*(\'|$)|\S)*\s*`', '', $a);
+ $mode = 0;
+ }
+}
+if($mode == 1){$aA[$nm] = '';}
+
+// clean attrs
+global $S;
+$rl = isset($S[$e]) ? $S[$e] : array();
+$a = array(); $nfr = 0;
+foreach($aA as $k=>$v){
+ if(((isset($C['deny_attribute']['*']) ? isset($C['deny_attribute'][$k]) : !isset($C['deny_attribute'][$k])) or isset($rl[$k])) && ((!isset($rl['n'][$k]) && !isset($rl['n']['*'])) or isset($rl[$k])) && (isset($aN[$k][$e]) or (isset($aNU[$k]) && !isset($aNU[$k][$e])))){
+ if(isset($aNE[$k])){$v = $k;}
+ elseif(!empty($lcase) && (($e != 'button' or $e != 'input') or $k == 'type')){ // Rather loose but ?not cause issues
+ $v = (isset($aNL[($v2 = strtolower($v))])) ? $v2 : $v;
+ }
+ if($k == 'style' && !$C['style_pass']){
+ if(false !== strpos($v, '&#')){
+ static $sC = array('&#x20;'=>' ', '&#32;'=>' ', '&#x45;'=>'e', '&#69;'=>'e', '&#x65;'=>'e', '&#101;'=>'e', '&#x58;'=>'x', '&#88;'=>'x', '&#x78;'=>'x', '&#120;'=>'x', '&#x50;'=>'p', '&#80;'=>'p', '&#x70;'=>'p', '&#112;'=>'p', '&#x53;'=>'s', '&#83;'=>'s', '&#x73;'=>'s', '&#115;'=>'s', '&#x49;'=>'i', '&#73;'=>'i', '&#x69;'=>'i', '&#105;'=>'i', '&#x4f;'=>'o', '&#79;'=>'o', '&#x6f;'=>'o', '&#111;'=>'o', '&#x4e;'=>'n', '&#78;'=>'n', '&#x6e;'=>'n', '&#110;'=>'n', '&#x55;'=>'u', '&#85;'=>'u', '&#x75;'=>'u', '&#117;'=>'u', '&#x52;'=>'r', '&#82;'=>'r', '&#x72;'=>'r', '&#114;'=>'r', '&#x4c;'=>'l', '&#76;'=>'l', '&#x6c;'=>'l', '&#108;'=>'l', '&#x28;'=>'(', '&#40;'=>'(', '&#x29;'=>')', '&#41;'=>')', '&#x20;'=>':', '&#32;'=>':', '&#x22;'=>'"', '&#34;'=>'"', '&#x27;'=>"'", '&#39;'=>"'", '&#x2f;'=>'/', '&#47;'=>'/', '&#x2a;'=>'*', '&#42;'=>'*', '&#x5c;'=>'\\', '&#92;'=>'\\');
+ $v = strtr($v, $sC);
+ }
+ $v = preg_replace_callback('`(url(?:\()(?: )*(?:\'|"|&(?:quot|apos);)?)(.+?)((?:\'|"|&(?:quot|apos);)?(?: )*(?:\)))`iS', 'hl_prot', $v);
+ $v = !$C['css_expression'] ? preg_replace('`expression`i', ' ', preg_replace('`\\\\\S|(/|(%2f))(\*|(%2a))`i', ' ', $v)) : $v;
+ }elseif(isset($aNP[$k]) or strpos($k, 'src') !== false or $k[0] == 'o'){
+ $v = str_replace("\xad", ' ', (strpos($v, '&') !== false ? str_replace(array('&#xad;', '&#173;', '&shy;'), ' ', $v) : $v));
+ $v = hl_prot($v, $k);
+ if($k == 'href'){ // X-spam
+ if($C['anti_mail_spam'] && strpos($v, 'mailto:') === 0){
+ $v = str_replace('@', htmlspecialchars($C['anti_mail_spam']), $v);
+ }elseif($C['anti_link_spam']){
+ $r1 = $C['anti_link_spam'][1];
+ if(!empty($r1) && preg_match($r1, $v)){continue;}
+ $r0 = $C['anti_link_spam'][0];
+ if(!empty($r0) && preg_match($r0, $v)){
+ if(isset($a['rel'])){
+ if(!preg_match('`\bnofollow\b`i', $a['rel'])){$a['rel'] .= ' nofollow';}
+ }elseif(isset($aA['rel'])){
+ if(!preg_match('`\bnofollow\b`i', $aA['rel'])){$nfr = 1;}
+ }else{$a['rel'] = 'nofollow';}
+ }
+ }
+ }
+ }
+ if(isset($rl[$k]) && is_array($rl[$k]) && ($v = hl_attrval($v, $rl[$k])) === 0){continue;}
+ $a[$k] = str_replace('"', '&quot;', $v);
+ }
+}
+if($nfr){$a['rel'] = isset($a['rel']) ? $a['rel']. ' nofollow' : 'nofollow';}
+
+// rqd attr
+static $eAR = array('area'=>array('alt'=>'area'), 'bdo'=>array('dir'=>'ltr'), 'form'=>array('action'=>''), 'img'=>array('src'=>'', 'alt'=>'image'), 'map'=>array('name'=>''), 'optgroup'=>array('label'=>''), 'param'=>array('name'=>''), 'script'=>array('type'=>'text/javascript'), 'textarea'=>array('rows'=>'10', 'cols'=>'50'));
+if(isset($eAR[$e])){
+ foreach($eAR[$e] as $k=>$v){
+ if(!isset($a[$k])){$a[$k] = isset($v[0]) ? $v : $k;}
+ }
+}
+
+// depr attrs
+if($depTr){
+ $c = array();
+ foreach($a as $k=>$v){
+ if($k == 'style' or !isset($aND[$k][$e])){continue;}
+ if($k == 'align'){
+ unset($a['align']);
+ if($e == 'img' && ($v == 'left' or $v == 'right')){$c[] = 'float: '. $v;}
+ elseif(($e == 'div' or $e == 'table') && $v == 'center'){$c[] = 'margin: auto';}
+ else{$c[] = 'text-align: '. $v;}
+ }elseif($k == 'bgcolor'){
+ unset($a['bgcolor']);
+ $c[] = 'background-color: '. $v;
+ }elseif($k == 'border'){
+ unset($a['border']); $c[] = "border: {$v}px";
+ }elseif($k == 'bordercolor'){
+ unset($a['bordercolor']); $c[] = 'border-color: '. $v;
+ }elseif($k == 'clear'){
+ unset($a['clear']); $c[] = 'clear: '. ($v != 'all' ? $v : 'both');
+ }elseif($k == 'compact'){
+ unset($a['compact']); $c[] = 'font-size: 85%';
+ }elseif($k == 'height' or $k == 'width'){
+ unset($a[$k]); $c[] = $k. ': '. ($v[0] != '*' ? $v. (ctype_digit($v) ? 'px' : '') : 'auto');
+ }elseif($k == 'hspace'){
+ unset($a['hspace']); $c[] = "margin-left: {$v}px; margin-right: {$v}px";
+ }elseif($k == 'language' && !isset($a['type'])){
+ unset($a['language']);
+ $a['type'] = 'text/'. strtolower($v);
+ }elseif($k == 'name'){
+ if($C['no_deprecated_attr'] == 2 or ($e != 'a' && $e != 'map')){unset($a['name']);}
+ if(!isset($a['id']) && preg_match('`[a-zA-Z][a-zA-Z\d.:_\-]*`', $v)){$a['id'] = $v;}
+ }elseif($k == 'noshade'){
+ unset($a['noshade']); $c[] = 'border-style: none; border: 0; background-color: gray; color: gray';
+ }elseif($k == 'nowrap'){
+ unset($a['nowrap']); $c[] = 'white-space: nowrap';
+ }elseif($k == 'size'){
+ unset($a['size']); $c[] = 'size: '. $v. 'px';
+ }elseif($k == 'start' or $k == 'value'){
+ unset($a[$k]);
+ }elseif($k == 'type'){
+ unset($a['type']);
+ static $ol_type = array('i'=>'lower-roman', 'I'=>'upper-roman', 'a'=>'lower-latin', 'A'=>'upper-latin', '1'=>'decimal');
+ $c[] = 'list-style-type: '. (isset($ol_type[$v]) ? $ol_type[$v] : 'decimal');
+ }elseif($k == 'vspace'){
+ unset($a['vspace']); $c[] = "margin-top: {$v}px; margin-bottom: {$v}px";
+ }
+ }
+ if(count($c)){
+ $c = implode('; ', $c);
+ $a['style'] = isset($a['style']) ? rtrim($a['style'], ' ;'). '; '. $c. ';': $c. ';';
+ }
+}
+// unique ID
+if($C['unique_ids'] && isset($a['id'])){
+ if(!preg_match('`^[A-Za-z][A-Za-z0-9_\-.:]*$`', ($id = $a['id'])) or (isset($GLOBALS['hl_Ids'][$id]) && $C['unique_ids'] == 1)){unset($a['id']);
+ }else{
+ while(isset($GLOBALS['hl_Ids'][$id])){$id = $C['unique_ids']. $id;}
+ $GLOBALS['hl_Ids'][($a['id'] = $id)] = 1;
+ }
+}
+// xml:lang
+if($C['xml:lang'] && isset($a['lang'])){
+ $a['xml:lang'] = isset($a['xml:lang']) ? $a['xml:lang'] : $a['lang'];
+ if($C['xml:lang'] == 2){unset($a['lang']);}
+}
+// for transformed tag
+if(!empty($trt)){
+ $a['style'] = isset($a['style']) ? rtrim($a['style'], ' ;'). '; '. $trt : $trt;
+}
+// return with empty ele /
+if(empty($C['hook_tag'])){
+ $aA = '';
+ foreach($a as $k=>$v){$aA .= " {$k}=\"{$v}\"";}
+ return "<{$e}{$aA}". (isset($eE[$e]) ? ' /' : ''). '>';
+}
+else{return $C['hook_tag']($e, $a);}
+// eof
+}
+
+function hl_tag2(&$e, &$a, $t=1){
+// transform tag
+if($e == 'center'){$e = 'div'; return 'text-align: center;';}
+if($e == 'dir' or $e == 'menu'){$e = 'ul'; return '';}
+if($e == 's' or $e == 'strike'){$e = 'span'; return 'text-decoration: line-through;';}
+if($e == 'u'){$e = 'span'; return 'text-decoration: underline;';}
+static $fs = array('0'=>'xx-small', '1'=>'xx-small', '2'=>'small', '3'=>'medium', '4'=>'large', '5'=>'x-large', '6'=>'xx-large', '7'=>'300%', '-1'=>'smaller', '-2'=>'60%', '+1'=>'larger', '+2'=>'150%', '+3'=>'200%', '+4'=>'300%');
+if($e == 'font'){
+ $a2 = '';
+ if(preg_match('`face\s*=\s*(\'|")([^=]+?)\\1`i', $a, $m) or preg_match('`face\s*=\s*([^"])(\S+)`i', $a, $m)){
+ $a2 .= ' font-family: '. str_replace('"', '\'', trim($m[2])). ';';
+ }
+ if(preg_match('`color\s*=\s*(\'|")?(.+?)(\\1|\s|$)`i', $a, $m)){
+ $a2 .= ' color: '. trim($m[2]). ';';
+ }
+ if(preg_match('`size\s*=\s*(\'|")?(.+?)(\\1|\s|$)`i', $a, $m) && isset($fs[($m = trim($m[2]))])){
+ $a2 .= ' font-size: '. $fs[$m]. ';';
+ }
+ $e = 'span'; return ltrim($a2);
+}
+if($t == 2){$e = 0; return 0;}
+return '';
+// eof
+}
+
+function hl_tidy($t, $w, $p){
+// Tidy/compact HTM
+if(strpos(' pre,script,textarea', "$p,")){return $t;}
+$t = str_replace(' </', '</', preg_replace(array('`(<\w[^>]*(?<!/)>)\s+`', '`\s+`', '`(<\w[^>]*(?<!/)>) `'), array(' $1', ' ', '$1'), preg_replace_callback(array('`(<(!\[CDATA\[))(.+?)(\]\]>)`sm', '`(<(!--))(.+?)(-->)`sm', '`(<(pre|script|textarea)[^>]*?>)(.+?)(</\2>)`sm'), create_function('$m', 'return $m[1]. str_replace(array("<", ">", "\n", "\r", "\t", " "), array("\x01", "\x02", "\x03", "\x04", "\x05", "\x07"), $m[3]). $m[4];'), $t)));
+if(($w = strtolower($w)) == -1){
+ return str_replace(array("\x01", "\x02", "\x03", "\x04", "\x05", "\x07"), array('<', '>', "\n", "\r", "\t", ' '), $t);
+}
+$s = strpos(" $w", 't') ? "\t" : ' ';
+$s = preg_match('`\d`', $w, $m) ? str_repeat($s, $m[0]) : str_repeat($s, ($s == "\t" ? 1 : 2));
+$n = preg_match('`[ts]([1-9])`', $w, $m) ? $m[1] : 0;
+$a = array('br'=>1);
+$b = array('button'=>1, 'input'=>1, 'option'=>1);
+$c = array('caption'=>1, 'dd'=>1, 'dt'=>1, 'h1'=>1, 'h2'=>1, 'h3'=>1, 'h4'=>1, 'h5'=>1, 'h6'=>1, 'isindex'=>1, 'label'=>1, 'legend'=>1, 'li'=>1, 'object'=>1, 'p'=>1, 'pre'=>1, 'td'=>1, 'textarea'=>1, 'th'=>1);
+$d = array('address'=>1, 'blockquote'=>1, 'center'=>1, 'colgroup'=>1, 'dir'=>1, 'div'=>1, 'dl'=>1, 'fieldset'=>1, 'form'=>1, 'hr'=>1, 'iframe'=>1, 'map'=>1, 'menu'=>1, 'noscript'=>1, 'ol'=>1, 'optgroup'=>1, 'rbc'=>1, 'rtc'=>1, 'ruby'=>1, 'script'=>1, 'select'=>1, 'table'=>1, 'tfoot'=>1, 'thead'=>1, 'tr'=>1, 'ul'=>1);
+ob_start();
+if(isset($d[$p])){echo str_repeat($s, ++$n);}
+$t = explode('<', $t);
+echo ltrim(array_shift($t));
+for($i=-1, $j=count($t); ++$i<$j;){
+ $r = ''; list($e, $r) = explode('>', $t[$i]);
+ $x = $e[0] == '/' ? 0 : (substr($e, -1) == '/' ? 1 : ($e[0] != '!' ? 2 : -1));
+ $y = !$x ? ltrim($e, '/') : ($x > 0 ? substr($e, 0, strcspn($e, ' ')) : 0);
+ $e = "<$e>";
+ if(isset($d[$y])){
+ if(!$x){echo "\n", str_repeat($s, --$n), "$e\n", str_repeat($s, $n);}
+ else{echo "\n", str_repeat($s, $n), "$e\n", str_repeat($s, ($x != 1 ? ++$n : $n));}
+ echo ltrim($r); continue;
+ }
+ $f = "\n". str_repeat($s, $n);
+ if(isset($c[$y])){
+ if(!$x){echo $e, $f, ltrim($r);}
+ else{echo $f, $e, $r;}
+ }elseif(isset($b[$y])){echo $f, $e, $r;
+ }elseif(isset($a[$y])){echo $e, $f, ltrim($r);
+ }elseif(!$y){echo $f, $e, $f, ltrim($r);
+ }else{echo $e, $r;}
+}
+$t = preg_replace('`[\n]\s*?[\n]+`', "\n", ob_get_contents());
+ob_end_clean();
+if(($l = strpos(" $w", 'r') ? (strpos(" $w", 'n') ? "\r\n" : "\r") : 0)){
+ $t = str_replace("\n", $l, $t);
+}
+return str_replace(array("\x01", "\x02", "\x03", "\x04", "\x05", "\x07"), array('<', '>', "\n", "\r", "\t", ' '), $t);
+// eof
+}
+
+function hl_version(){
+// rel
+return '1.1.11';
+// eof
+}
+
+function kses($t, $h, $p=array('http', 'https', 'ftp', 'news', 'nntp', 'telnet', 'gopher', 'mailto')){
+// kses compat
+foreach($h as $k=>$v){
+ $h[$k]['n']['*'] = 1;
+}
+$C['cdata'] = $C['comment'] = $C['make_tag_strict'] = $C['no_deprecated_attr'] = $C['unique_ids'] = 0;
+$C['keep_bad'] = 1;
+$C['elements'] = count($h) ? strtolower(implode(',', array_keys($h))) : '-*';
+$C['hook'] = 'kses_hook';
+$C['schemes'] = '*:'. implode(',', $p);
+return htmLawed($t, $C, $h);
+// eof
+}
+
+function kses_hook($t, &$C, &$S){
+// kses compat
+return $t;
+// eof
+} \ No newline at end of file
diff --git a/mod/htmlawed/vendors/htmLawed/htmLawedTest.php b/mod/htmlawed/vendors/htmLawed/htmLawedTest.php
new file mode 100755
index 000000000..806aa4641
--- /dev/null
+++ b/mod/htmlawed/vendors/htmLawed/htmLawedTest.php
@@ -0,0 +1,595 @@
+<?php
+
+/*
+htmLawedTest.php, 22 October 2011
+htmLawed 1.1.11, 5 June 2012
+Copyright Santosh Patnaik
+Dual licensed with LGPL 3 and GPL 2 or later
+A PHP Labware internal utility - http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed
+
+Test htmLawed; user provides text input; input and processed input are shown as highlighted code and rendered HTML; also shown are execution time and peak memory usage
+*/
+
+// config
+$_errs = 0; // display PHP errors
+$_limit = 8000; // input character limit
+
+// more config
+$_hlimit = 1000; // input character limit for showing hexdumps
+$_hilite = 1; // 0 turns off slow Javascript-based code-highlighting, e.g., if $_limit is high
+$_w3c_validate = 1; // 1 to show buttons to send input/output to w3c validator
+$_sid = 'sid'; // session name; alphanum.
+$_slife = 30; // session life in min.
+
+// errors
+error_reporting(E_ALL | (defined('E_STRICT') ? E_STRICT : 1));
+ini_set('display_errors', $_errs);
+
+// session
+session_name($_sid);
+session_cache_limiter('private');
+session_cache_expire($_slife);
+ini_set('session.gc_maxlifetime', $_slife * 60);
+ini_set('session.use_only_cookies', 1);
+ini_set('session.cookie_lifetime', 0);
+session_start();
+if(!isset($_SESSION['token'])){
+ $_SESSION['token'] = md5(uniqid(rand(), 1));
+}
+
+// slashes
+if(get_magic_quotes_gpc()){
+ foreach($_POST as $k => $v){
+ $_POST[$k] = stripslashes($v);
+ }
+ ini_set('magic_quotes_gpc', 0);
+}
+if(get_magic_quotes_runtime()){
+ set_magic_quotes_runtime(0);
+}
+
+$_POST['enc'] = (isset($_POST['enc']) and preg_match('`^[-\w]+$`', $_POST['enc'])) ? $_POST['enc'] : 'utf-8';
+
+// token for anti-CSRF
+if(count($_POST)){
+ if((empty($_GET['pre']) and ((!empty($_POST['token']) and !empty($_SESSION['token']) and $_POST['token'] != $_SESSION['token']) or empty($_POST[$_sid]) or $_POST[$_sid] != session_id() or empty($_COOKIE[$_sid]) or $_COOKIE[$_sid] != session_id())) or ($_POST[$_sid] != session_id())){
+ $_POST = array('enc'=>'utf-8');
+ }
+}
+if(empty($_GET['pre'])){
+ $_SESSION['token'] = md5(uniqid(rand(), 1));
+ $token = $_SESSION['token'];
+ session_regenerate_id(1);
+}
+
+// compress
+if(function_exists('gzencode') && isset($_SERVER['HTTP_ACCEPT_ENCODING']) && preg_match('`gzip|deflate`i', $_SERVER['HTTP_ACCEPT_ENCODING']) && !ini_get('zlib.output_compression')){
+ ob_start('ob_gzhandler');
+}
+
+// HTM for unprocessed
+if(isset($_POST['inputH'])){
+ echo '<html><head><title>htmLawed test: HTML view of unprocessed input</title></head><body style="margin:0; padding: 0;"><p style="background-color: black; color: white; padding: 2px;">&nbsp; Rendering of unprocessed input without an HTML doctype or charset declaration &nbsp; &nbsp; <small><a style="color: white; text-decoration: none;" href="1" onclick="javascript:window.close(this); return false;">close window</a> | <a style="color: white; text-decoration: none;" href="htmLawedTest.php" onclick="javascript: window.open(\'htmLawedTest.php\', \'hlmain\'); window.close(this); return false;">htmLawed test page</a></small></p><div>', $_POST['inputH'], '</div></body></html>';
+ exit;
+}
+
+// main
+$_POST['text'] = isset($_POST['text']) ? $_POST['text'] : 'text to process; < '. $_limit. ' characters'. ($_hlimit ? ' (for binary hexdump view, < '. $_hlimit. ')' : '');
+$do = (!empty($_POST[$_sid]) && isset($_POST['text'][0]) && !isset($_POST['text'][$_limit])) ? 1 : 0;
+$limit_exceeded = isset($_POST['text'][$_limit]) ? 1 : 0;
+$pre_mem = memory_get_usage();
+$validation = (!empty($_POST[$_sid]) and isset($_POST['w3c_validate'][0])) ? 1 : 0;
+include './htmLawed.php';
+
+function format($t){
+ $t = "\n". str_replace(array("\t", "\r\n", "\r", '&', '<', '>', "\n"), array(' ', "\n", "\n", '&amp;', '&lt;', '&gt;', "<span class=\"newline\">&#172;</span><br />\n"), $t);
+ return str_replace(array('<br />', "\n ", ' '), array("\n<br />\n", "\n&nbsp;", ' &nbsp;'), $t);
+}
+
+function hexdump($d){
+// Mainly by Aidan Lister <aidan@php.net>, Peter Waller <iridum@php.net>
+ $hexi = '';
+ $ascii = '';
+ ob_start();
+ echo '<pre>';
+ $offset = 0;
+ $len = strlen($d);
+ for($i=$j=0; $i<$len; $i++)
+ {
+ // Convert to hexidecimal
+ $hexi .= sprintf("%02X ", ord($d[$i]));
+ // Replace non-viewable bytes with '.'
+ if(ord($d[$i]) >= 32){
+ $ascii .= htmlspecialchars($d[$i]);
+ }else{
+ $ascii .= '.';
+ }
+ // Add extra column spacing
+ if($j == 7){
+ $hexi .= ' ';
+ $ascii .= ' ';
+ }
+ // Add row
+ if(++$j == 16 || $i == $len-1){
+ // Join the hexi / ascii output
+ echo sprintf("%04X %-49s %s", $offset, $hexi, $ascii);
+ // Reset vars
+ $hexi = $ascii = '';
+ $offset += 16;
+ $j = 0;
+ // Add newline
+ if ($i !== $len-1){
+ echo "\n";
+ }
+ }
+ }
+ echo '</pre>';
+ $o = ob_get_contents();
+ ob_end_clean();
+ return $o;
+}
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html lang="en" xml:lang="en">
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<meta name="description" content="htmLawed <?php echo hl_version();?> test page" />
+<style type="text/css"><!--/*--><![CDATA[/*><!--*/
+a, a.resizer{text-decoration:none;}
+a:hover, a.resizer:hover{color:red;}
+a.resizer{color:green; float:right;}
+body{background-color:#efefef;}
+body, button, div, html, input, p{font-size:13px; font-family:'Lucida grande', Verdana, Arial, Helvetica, sans-serif;}
+button, input{font-size: 85%;}
+div.help{border-top: 1px dotted gray; margin-top: 15px; padding-top: 15px; color:#999999;}
+#inputC, #inputD, #inputF, #inputR, #outputD, #outputF, #outputH, #outputR, #settingF{display:block;}
+#inputC, #settingF{background-color:white; border:1px gray solid; padding:3px;}
+#inputC li{margin: 0; padding: 0;}
+#inputC ul{margin: 0; padding: 0; margin-left: 14px;}
+#inputC input{margin: 0; margin-left: 2px; margin-right: 2px; padding: 1px; vertical-align: middle;}
+#inputD{overflow:auto; background-color:#ffff99; border:1px #cc9966 solid; padding:3px;}
+#inputR{overflow:auto; background-color:#ffffcc; border:1px #ffcc99 solid; padding:3px;}
+#inputC, #settingF, #inputD, #inputR, #outputD, #outputR, textarea{font-size:100%; font-family:'Bitstream vera sans mono', 'courier new', 'courier', monospace;}
+#outputD{overflow:auto; background-color: #99ffcc; border:1px #66cc99 solid; padding:3px;}
+#outputH{overflow:auto; background-color:white; padding:3px; border:1px #dcdcdc solid;}
+#outputR{overflow:auto; background-color: #ccffcc; border:1px #99cc99 solid; padding:3px;}
+span.cmtcdata{color: orange;}
+span.ctag{color:red;}
+span.ent{border-bottom:1px dotted #999999;}
+span.etag{color:purple;}
+span.help{color:#999999;}
+span.newline{color:#dcdcdc;}
+span.notice{color:green;}
+span.otag{color:blue;}
+#topmost{margin:auto; width:98%;}
+/*]]>*/--></style>
+<script type="text/javascript"><!--//--><![CDATA[//><!--
+window.name = 'hlmain';
+function hl(i){
+ <?php if(!$_hilite){echo 'return;'; }?>
+ var e = document.getElementById(i);
+ if(!e){return;}
+ run(e, '</[a-z1-6]+>', 'ctag');
+ run(e, '<[a-z]+(?:[^>]*)/>', 'etag');
+ run(e, '<[a-z1-6]+(?:[^>]*)>', 'otag');
+ run(e, '&[#a-z0-9]+;', 'ent');
+ run(e, '<!(?:(?:--(?:.|\n)*?--)|(?:\\[CDATA\\[(?:.|\n)*?\\]\\]))>', 'cmtcdata');
+}
+function sndProc(){
+ var f = document.getElementById('testform');
+ if(!f){return;}
+ var e = document.createElement('input');
+ e.type = 'hidden';
+ e.name = '<?php echo htmlspecialchars($_sid); ?>';
+ e.id = '<?php echo htmlspecialchars($_sid); ?>';
+ e.value = readCookie('<?php echo htmlspecialchars($_sid); ?>');
+ f.appendChild(e);
+ f.submit();
+}
+function readCookie(n){
+ var ne = n + '=';
+ var ca = document.cookie.split(';');
+ for(var i=0;i < ca.length;i++){
+ var c = ca[i];
+ while(c.charAt(0)==' '){
+ c = c.substring(1,c.length);
+ }
+ if(c.indexOf(ne) == 0){
+ return c.substring(ne.length,c.length);
+ }
+ }
+ return null;
+}
+function run(e, q, c){
+ var q = new RegExp(q);
+ if(e.firstChild == null){
+ var m = q.exec(e.data);
+ if(m){
+ var v = m[0];
+ var k2 = e.splitText(m.index);
+ var k3 = k2.splitText(v.length);
+ var s = e.ownerDocument.createElement('span');
+ e.parentNode.replaceChild(s, k2);
+ s.className = c; s.appendChild(k2);
+ }
+ }
+ for(var k = e.firstChild; k != null; k = k.nextSibling){
+ if(k.nodeType == 3){
+ var m = q.exec(k.data);
+ if(m){
+ var v = m[0];
+ var k2 = k.splitText(m.index);
+ var k3 = k2.splitText(v.length);
+ var s = k.ownerDocument.createElement('span');
+ k.parentNode.replaceChild(s, k2);
+ s.className = c; s.appendChild(k2);
+ }
+ }
+ else if(c == 'ent' && k.nodeType == 1){
+ var d = k.firstChild;
+ if(d){
+ var m = q.exec(d.data);
+ if(m){
+ var v = m[0];
+ var d2 = d.splitText(m.index);
+ var d3 = d2.splitText(v.length);
+ var s = d.ownerDocument.createElement('span');
+ d.parentNode.replaceChild(s, d2);
+ s.className = c; s.appendChild(d2);
+ }
+ }
+ }
+ }
+}
+function toggle(i){
+ var e = document.getElementById(i);
+ if(!e){return;}
+ if(e.style){
+ var a = e.style.display;
+ if(a == 'block'){e.style.display = 'none'; return;}
+ if(a == 'none'){e.style.display = 'block';}
+ else{e.style.display = 'none';}
+ return;
+ }
+ var a = e.visibility;
+ if(a == 'hidden'){e.visibility = 'show'; return;}
+ if(a == 'show'){e.visibility = 'hidden';}
+}
+function sndUnproc(){
+ var i = document.getElementById('text');
+ if(!i){return;}
+ i = i.value;
+ i = i.replace(/>/g, '&gt;');
+ i = i.replace(/</g, '&lt;');
+ i = i.replace(/"/g, '&quot;');
+ var w = window.open('htmLawedTest.php?pre=1', 'hlprehtm');
+ var f = document.createElement('form');
+ f.enctype = 'application/x-www-form-urlencoded';
+ f.method = 'post';
+ f.acceptCharset = '<?php echo htmlspecialchars($_POST['enc']); ?>';
+ if(f.style){f.style.display = 'none';}
+ else{f.visibility = 'hidden';}
+ f.innerHTML = '<p style="display:none;"><input style="display:none;" type="hidden" name="token" id="token" value="<?php echo $token; ?>" /><input style="display:none;" type="hidden" name="<?php echo htmlspecialchars($_sid); ?>" id="<?php echo htmlspecialchars($_sid); ?>" value="' + readCookie('<?php echo htmlspecialchars($_sid); ?>') + '" /><input style="display:none;" type="hidden" name="inputH" id="inputH" value="'+ i+ '" /></p>';
+ f.action = 'htmLawedTest.php?pre=1';
+ f.target = 'hlprehtm';
+ f.method = 'post';
+ var b = document.getElementsByTagName('body')[0];
+ b.appendChild(f);
+ f.submit();
+ w.focus;
+}
+function sndValidn(id, type){
+ var i = document.getElementById(id);
+ if(!i){return;}
+ i = i.value;
+ i = i.replace(/>/g, '&gt;');
+ i = i.replace(/</g, '&lt;');
+ i = i.replace(/"/g, '&quot;');
+ var w = window.open('http://validator.w3.org/check', 'validate'+id+type);
+ var f = document.createElement('form');
+ f.enctype = 'application/x-www-form-urlencoded';
+ f.method = 'post';
+ f.acceptCharset = '<?php echo htmlspecialchars($_POST['enc']); ?>';
+ if(f.style){f.style.display = 'none';}
+ else{f.visibility = 'hidden';}
+ f.innerHTML = '<p style="display:none;"><input style="display:none;" type="hidden" name="fragment" id="fragment" value="'+ i+ '" /><input style="display:none;" type="hidden" name="prefill" id="prefill" value="1" /><input style="display:none;" type="hidden" name="prefill_doctype" id="prefill_doctype" value="'+ type+ '" /><input style="display:none;" type="hidden" name="group" id="group" value="1" /><input type="hidden" name="ss" id="ss" value="1" /></p>';
+ f.action = 'http://validator.w3.org/check';
+ f.target = 'validate'+id+type;
+ var b = document.getElementsByTagName('body')[0];
+ b.appendChild(f);
+ f.submit();
+ w.focus;
+}
+tRs = {
+ formEl: null,
+ resizeClass: 'textarea',
+ adEv: function(t,ev,fn){
+ if(typeof document.addEventListener != 'undefined'){
+ t.addEventListener(ev,fn,false);
+ }else{
+ t.attachEvent('on' + ev, fn);
+ }
+ },
+ rmEv: function(t,ev,fn){
+ if(typeof document.removeEventListener != 'undefined'){
+ t.removeEventListener(ev,fn,false);
+ }else
+ {
+ t.detachEvent('on' + ev, fn);
+ }
+ },
+ adBtn: function(){
+ var textareas = document.getElementsByTagName('textarea');
+ for(var i = 0; i < textareas.length; i++){
+ var txtclass=textareas[i].className;
+ if(txtclass.substring(0,tRs.resizeClass.length)==tRs.resizeClass ||
+ txtclass.substring(txtclass.length -tRs.resizeClass.length)==tRs.resizeClass){
+ var a = document.createElement('a');
+ a.appendChild(document.createTextNode("\u2195"));
+ a.style.cursor = 'n-resize';
+ a.className= 'resizer';
+ a.title = 'click-drag to resize textarea'
+ tRs.adEv(a, 'mousedown', tRs.initResize);
+ textareas[i].parentNode.appendChild(a);
+ }
+ }
+ },
+ initResize: function(event){
+ if(typeof event == 'undefined'){
+ event = window.event;
+ }
+ if(event.srcElement){
+ var target = event.srcElement.previousSibling;
+ }else{
+ var target = event.target.previousSibling;
+ }
+ if(target.nodeName.toLowerCase() == 'textarea' || (target.nodeName.toLowerCase() == 'input' && target.type == 'text')){
+ tRs.formEl = target;
+ tRs.formEl.startHeight = tRs.formEl.clientHeight;
+ tRs.formEl.startY = event.clientY;
+ tRs.adEv(document, 'mousemove', tRs.resize);
+ tRs.adEv(document, 'mouseup', tRs.stopResize);
+ tRs.formEl.parentNode.style.cursor = 'n-resize';
+ tRs.formEl.style.cursor = 'n-resize';
+ try{
+ event.preventDefault();
+ }catch(e){
+ }
+ }
+ },
+ resize: function(event){
+ if(typeof event == 'undefined'){
+ event = window.event;
+ }
+ if(tRs.formEl.nodeName.toLowerCase() == 'textarea'){
+ tRs.formEl.style.height = event.clientY - tRs.formEl.startY + tRs.formEl.startHeight + 'px';
+ }
+ },
+ stopResize: function(event){
+ tRs.rmEv(document, 'mousedown', tRs.initResize);
+ tRs.rmEv(document, 'mousemove', tRs.resize);
+ tRs.formEl.style.cursor = 'text';
+ tRs.formEl.parentNode.style.cursor = 'auto';
+ return false;
+ }
+};
+tRs.adEv(window, 'load', tRs.adBtn);
+//--><!]]></script>
+<title>htmLawed (<?php echo hl_version();?>) test</title>
+</head>
+<body>
+<div id="topmost">
+
+<h5 style="float: left; display: inline; margin-top: 0; margin-bottom: 5px;"><a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/index.php" title="htmLawed home">HTM<big><big>L</big></big>AWED</a> <?php echo hl_version();?> <a href="htmLawedTest.php" title="test home">TEST</a></h5>
+<span style="float: right;" class="help"><a href="htmLawed_README.htm"><span class="notice">htm</span></a> / <a href="htmLawed_README.txt"><span class="notice">txt</span></a> documentation</span><br style="clear:both;" />
+
+<a href="htmLawedTest.php" title="[toggle visibility] type or copy-paste" onclick="javascript:toggle('inputF'); return false;"><span class="notice">Input &raquo;</span> <span class="help" title="limit lower with multibyte characters<?php echo (($_hlimit < $_limit && $_hlimit)? '; limit is '. $_hlimit. ' for viewing binaries' : ''); ?>"><small>(max. <?php echo htmlspecialchars($_limit);?> chars)</small></span></a>
+
+<form id="testform" name="testform" action="htmLawedTest.php" method="post" accept-charset="<?php echo htmlspecialchars($_POST['enc']); ?>" style="padding:0; margin: 0; display:inline;">
+
+<div id="inputF" style="display: block;">
+
+<input type="hidden" name="token" id="token" value="<?php echo $token; ?>" />
+<div><textarea id="text" class="textarea" name="text" rows="5" cols="100" style="width: 100%;"><?php echo htmlspecialchars($_POST['text']);?></textarea></div>
+<input type="submit" id="submitF" name="submitF" value="Process" style="float:left;" title="filter using htmLawed" onclick="javascript: sndProc(); return false;" onkeypress="javascript: sndProc(); return false;" />
+
+<?php
+if($do){
+ if($validation){
+ echo '<input type="hidden" value="1" name="w3c_validate" id="w3c_validate" />';
+ }
+?>
+
+<button type="button" title="rendered as web-page without a doctype or charset declaration" style="float: right;" onclick="javascript: sndUnproc(); return false;" onkeypress="javascript: sndUnproc(); return false;">View unprocessed</button>
+<button type="button" onclick="javascript:document.getElementById('text').focus();document.getElementById('text').select()" title="select all to copy" style="float:right;">Select all</button>
+
+<?php
+if($_w3c_validate && $validation){
+?>
+
+<button type="button" title="HTML 4.01 W3C online validation" style="float: right;" onclick="javascript: sndValidn('text', 'html401'); return false;" onkeypress="javascript: sndValidn('text', 'html401'); return false;">Check HTML</button>
+<button type="button" title="XHTML 1.1 W3C online validation" style="float: right;" onclick="javascript: sndValidn('text', 'xhtml110'); return false;" onkeypress="javascript: sndValidn('text', 'xhtml110'); return false;">Check XHTML</button>
+
+<?php
+ }
+}
+else{
+ if($_w3c_validate){
+ echo '<span style="float: right;" class="help" title="for direct submission of input or output code to W3C validator for (X)HTML validation"><span style="font-size: 85%;">&nbsp;Validator tools: </span><input type="checkbox" value="1" name="w3c_validate" id="w3c_validate" style="vertical-align: middle;"', ($validation ? ' checked="checked"' : ''), ' /></span>';
+ }
+}
+?>
+
+<span style="float:right;" class="help" title="IANA-recognized name of the input character-set; can be multiple ;- or space-separated values; may not work in some browsers"><span style="font-size: 85%;">Encoding: </span><input type="text" size="8" id="enc" name="enc" style="vertical-align: middle;" value="<?php echo htmlspecialchars($_POST['enc']); ?>" /></span>
+
+</div>
+<br style="clear:both;" />
+
+<?php
+if($limit_exceeded){
+ echo '<br /><strong>Input text is too long!</strong><br />';
+}
+?>
+
+<br />
+
+<a href="htmLawedTest.php" title="[toggle visibility] htmLawed configuration" onclick="javascript:toggle('inputC'); return false;"><span class="notice">Settings &raquo;</span></a>
+
+<div id="inputC" style="display: none;">
+<table summary="none">
+<tr>
+<td><span class="help" title="$config argument">Config:</span></td>
+<td><ul>
+
+<?php
+$cfg = array(
+'abs_url'=>array('3', '0', 'absolute/relative URL conversion', '-1'),
+'and_mark'=>array('2', '0', 'mark original <em>&amp;</em> chars', '0', 'd'=>1), // 'd' to disable
+'anti_link_spam'=>array('1', '0', 'modify <em>href</em> values as an anti-link spam measure', '0', array(array('30', '1', '', 'regex for extra <em>rel</em>'), array('30', '2', '', 'regex for no <em>href</em>'))),
+'anti_mail_spam'=>array('1', '0', 'replace <em>@</em> in <em>mailto:</em> URLs', '0', '8', 'NO@SPAM', 'replacement'),
+'balance'=>array('2', '1', 'fix nestings and balance tags', '0'),
+'base_url'=>array('', '', 'base URL', '25'),
+'cdata'=>array('4', 'nil', 'allow <em>CDATA</em> sections', 'nil'),
+'clean_ms_char'=>array('3', '0', 'replace bad characters introduced by Microsoft apps. like <em>Word</em>', '0'),
+'comment'=>array('4', 'nil', 'allow HTML comments', 'nil'),
+'css_expression'=>array('2', 'nil', 'allow dynamic expressions in CSS style properties', 'nil'),
+'deny_attribute'=>array('1', '0', 'denied attributes', '0', '50', '', 'these'),
+'direct_list_nest'=>array('2', 'nil', 'allow direct nesting of a list within another without requiring it to be a list item', 'nil'),
+'elements'=>array('', '', 'allowed elements', '50'),
+'hexdec_entity'=>array('3', '1', 'convert hexadecimal numeric entities to decimal ones, or vice versa', '0'),
+'hook'=>array('', '', 'name of hook function', '25'),
+'hook_tag'=>array('', '', 'name of custom function to further check attribute values', '25'),
+'keep_bad'=>array('7', '6', 'keep, or remove <em>bad</em> tag content', '0'),
+'lc_std_val'=>array('2', '1', 'lower-case std. attribute values like <em>radio</em>', '0'),
+'make_tag_strict'=>array('3', 'nil', 'transform deprecated elements', 'nil'),
+'named_entity'=>array('2', '1', 'allow named entities, or convert numeric ones', '0'),
+'no_deprecated_attr'=>array('3', '1', 'allow deprecated attributes, or transform them', '0'),
+'parent'=>array('', 'div', 'name of parent element', '25'),
+'safe'=>array('2', '0', 'for most <em>safe</em> HTML', '0'),
+'schemes'=>array('', 'href: aim, feed, file, ftp, gopher, http, https, irc, mailto, news, nntp, sftp, ssh, telnet; *:file, http, https', 'allowed URL protocols', '50'),
+'show_setting'=>array('', 'htmLawed_setting', 'variable name to record <em>finalized</em> htmLawed settings', '25', 'd'=>1),
+'style_pass'=>array('2', 'nil', 'do not look at <em>style</em> attribute values', 'nil'),
+'tidy'=>array('3', '0', 'beautify/compact', '-1', '8', '1t1', 'format'),
+'unique_ids'=>array('2', '1', 'unique <em>id</em> values', '0', '8', 'my_', 'prefix'),
+'valid_xhtml'=>array('2', 'nil', 'auto-set various parameters for most valid XHTML', 'nil'),
+'xml:lang'=>array('3', 'nil', 'auto-add <em>xml:lang</em> attribute', '0'),
+);
+foreach($cfg as $k=>$v){
+ echo '<li>', $k, ': ';
+ if(!empty($v[0])){ // input radio
+ $j = $v[3];
+ for($i = $j-1; ++$i < $v[0]+$v[3];++$j){
+ echo '<input type="radio" name="h', $k, '" value="', $i, '"', (!isset($_POST['h'. $k]) ? ($v[1] == $i ? ' checked="checked"' : '') : ($_POST['h'. $k] == $i ? ' checked="checked"' : '')), (isset($v['d']) ? ' disabled="disabled"' : ''), ' />', $i, ' ';
+ }
+ if($v[1] == 'nil'){
+ echo '<input type="radio" name="h', $k, '" value="nil"', ((!isset($_POST['h'. $k]) or $_POST['h'. $k] == 'nil') ? ' checked="checked"' : ''), (isset($v['d']) ? ' disabled="disabled"' : ''), ' />not set ';
+ }
+ if(!empty($v[4])){ // + input text box
+ echo '<input type="radio" name="h', $k, '" value="', $j, '"', (((isset($_POST['h'. $k]) && $_POST['h'. $k] == $j) or (!isset($_POST['h'. $k]) && $j == $v[1])) ? ' checked="checked"' : ''), (isset($v['d']) ? ' disabled="disabled"' : ''), ' />';
+ if(!is_array($v[4])){
+ echo $v[6], ': <input type="text" size="', $v[4], '" name="h', $k. $j, '" value="', htmlspecialchars(isset($_POST['h'. $k. $j][0]) ? $_POST['h'. $k. $j] : $v[5]), '"', (isset($v['d']) ? ' disabled="disabled"' : ''), ' />';
+ }
+ else{
+ foreach($v[4] as $z){
+ echo ' ', $z[3], ': <input type="text" size="', $z[0], '" name="h', $k. $j. $z[1], '" value="', htmlspecialchars(isset($_POST['h'. $k. $j. $z[1]][0]) ? $_POST['h'. $k. $j. $z[1]] : $z[2]), '"', (isset($v['d']) ? ' disabled="disabled"' : ''), ' />';
+ }
+ }
+ }
+ }
+ elseif(ctype_digit($v[3])){ // input text
+ echo '<input type="text" size="', $v[3], '" name="h', $k, '" value="', htmlspecialchars(isset($_POST['h'. $k][0]) ? $_POST['h'. $k] : $v[1]), '"', (isset($v['d']) ? ' disabled="disabled"' : ''), ' />';
+ }
+ else{} // text-area
+ echo ' <span class="help">', $v[2], '</span></li>';
+}
+echo '</ul></td></tr><tr><td><span style="vertical-align: top;" class="help" title="$spec argument: element-specific attribute rules">Spec:</span></td><td><textarea name="spec" id="spec" cols="70" rows="3" style="width:80%;">', htmlspecialchars((isset($_POST['spec']) ? $_POST['spec'] : '')), '</textarea></td></tr></table>';
+?>
+
+</div>
+</form>
+
+<?php
+if($do){
+ $cfg = array();
+ foreach($_POST as $k=>$v){
+ if($k[0] == 'h' && $v != 'nil'){
+ $cfg[substr($k, 1)] = $v;
+ }
+ }
+
+ if(isset($cfg['anti_link_spam']) && $cfg['anti_link_spam'] && (!empty($cfg['anti_link_spam11']) or !empty($cfg['anti_link_spam12']))){
+ $cfg['anti_link_spam'] = array($cfg['anti_link_spam11'], $cfg['anti_link_spam12']);
+ }
+ unset($cfg['anti_link_spam11'], $cfg['anti_link_spam12']);
+ if(isset($cfg['anti_mail_spam']) && $cfg['anti_mail_spam'] == 1){
+ $cfg['anti_mail_spam'] = isset($cfg['anti_mail_spam1'][0]) ? $cfg['anti_mail_spam1'] : 0;
+ }
+ unset($cfg['anti_mail_spam11']);
+ if(isset($cfg['deny_attribute']) && $cfg['deny_attribute'] == 1){
+ $cfg['deny_attribute'] = isset($cfg['deny_attribute1'][0]) ? $cfg['deny_attribute1'] : 0;
+ }
+ unset($cfg['deny_attribute1']);
+ if(isset($cfg['tidy']) && $cfg['tidy'] == 2){
+ $cfg['tidy'] = isset($cfg['tidy2'][0]) ? $cfg['tidy2'] : 0;
+ }
+ unset($cfg['tidy2']);
+ if(isset($cfg['unique_ids']) && $cfg['unique_ids'] == 2){
+ $cfg['unique_ids'] = isset($cfg['unique_ids2'][0]) ? $cfg['unique_ids2'] : 1;
+ }
+ unset($cfg['unique_ids2']);
+ unset($cfg['and_mark']); // disabling and_mark
+
+ $cfg['show_setting'] = 'hlcfg';
+ $st = microtime();
+ $out = htmLawed($_POST['text'], $cfg, $_POST['spec']);
+ $et = microtime();
+ echo '<br /><a href="htmLawedTest.php" title="[toggle visibility] syntax-highlighted" onclick="javascript:toggle(\'inputR\'); return false;"><span class="notice">Input code &raquo;</span></a> <span class="help" title="tags estimated as half of total &gt; and &lt; chars; values may be inaccurate for non-ASCII text"><small><big>', strlen($_POST['text']), '</big> chars, ~<big>', ($tag = round((substr_count($_POST['text'], '>') + substr_count($_POST['text'], '<'))/2)), '</big> tag', ($tag > 1 ? 's' : ''), '</small>&nbsp;</span><div id="inputR" style="display: none;">', format($_POST['text']), '</div><script type="text/javascript">hl(\'inputR\');</script>', (!isset($_POST['text'][$_hlimit]) ? ' <a href="htmLawedTest.php" title="[toggle visibility] hexdump; non-viewable characters like line-returns are shown as dots" onclick="javascript:toggle(\'inputD\'); return false;"><span class="notice">Input binary &raquo;&nbsp;</span></a><div id="inputD" style="display: none;">'. hexdump($_POST['text']). '</div>' : ''), ' <a href="htmLawedTest.php" title="[toggle visibility] finalized internal settings as interpreted by htmLawed; for developers" onclick="javascript:toggle(\'settingF\'); return false;"><span class="notice">Finalized internal settings &raquo;&nbsp;</span></a> <div id="settingF" style="display: none;">', str_replace(array(' ', "\t", ' '), array(' ', '&nbsp; ', '&nbsp; '), nl2br(htmlspecialchars(print_r($GLOBALS['hlcfg']['config'], true)))), '</div><script type="text/javascript">hl(\'settingF\');</script>', '<br /><a href="htmLawedTest.php" title="[toggle visibility] suitable for copy-paste" onclick="javascript:toggle(\'outputF\'); return false;"><span class="notice">Output &raquo;</span></a> <span class="help" title="approx., server-specific value excluding the \'include()\' call"><small>htmLawed processing time <big>', number_format(((substr($et,0,9)) + (substr($et,-10)) - (substr($st,0,9)) - (substr($st,-10))),4), '</big> s</small></span>', (($mem = memory_get_peak_usage()) !== false ? '<span class="help"><small>, peak memory usage <big>'. round(($mem-$pre_mem)/1048576, 2). '</big> <small>MB</small>' : ''), '</small></span><div id="outputF" style="display: block;"><div><textarea id="text2" class="textarea" name="text2" rows="5" cols="100" style="width: 100%;">', htmlspecialchars($out), '</textarea></div><button type="button" onclick="javascript:document.getElementById(\'text2\').focus();document.getElementById(\'text2\').select()" title="select all to copy" style="float:right;">Select all</button>';
+ if($_w3c_validate && $validation)
+ {
+?>
+
+<button type="button" title="HTML 4.01 W3C online validation" style="float: right;" onclick="javascript: sndValidn('text2', 'html401'); return false;" onkeypress="javascript: sndValidn('text2', 'html401'); return false;">Check HTML</button>
+<button type="button" title="XHTML 1.1 W3C online validation" style="float: right;" onclick="javascript: sndValidn('text2', 'xhtml110'); return false;" onkeypress="javascript: sndValidn('text2', 'xhtml110'); return false;">Check XHTML</button>
+
+<?php
+ }
+ echo '</div><br /><a href="htmLawedTest.php" title="[toggle visibility] syntax-highlighted" onclick="javascript:toggle(\'outputR\'); return false;"><span class="notice">Output code &raquo;</span></a><div id="outputR" style="display: block;">', format($out), '</div><script type="text/javascript">hl(\'outputR\');</script>', (!isset($_POST['text'][$_hlimit]) ? '<br /><a href="htmLawedTest.php" title="[toggle visibility] hexdump; non-viewable characters like line-returns are shown as dots" onclick="javascript:toggle(\'outputD\'); return false;"><span class="notice">Output binary &raquo;</span></a><div id="outputD" style="display: none;">'. hexdump($out). '</div>' : ''), '<br /><a href="htmLawedTest.php" title="[toggle visibility] XHTML 1 Transitional doctype" onclick="javascript:toggle(\'outputH\'); return false;"><span class="notice">Output rendered &raquo;</span></a><div id="outputH" style="display: block;">', $out, '</div>';
+}
+else{
+?>
+
+<br />
+
+<div class="help">Use with a Javascript- and cookie-enabled, relatively new version of a common browser. <em>Submitted input will also be HTML-rendered (XHTML 1) after htmLawed-filtering.</em>
+
+<?php echo (file_exists('./htmLawed_TESTCASE.txt') ? '<br /><br />You can use text from <a href="htmLawed_TESTCASE.txt"><span class="notice">this collection of test-cases</span></a> in the input. Set the character encoding of the browser to Unicode/utf-8 before copying.' : ''); ?>
+
+<br /><br />For anti-XSS tests, try the <a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/htmLawedSafeModeTest.php"><span class="notice">special test-page</span></a> or see <a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/rsnake/RSnakeXSSTest.htm"><span class="notice">these results</span></a>.
+
+<br /><br /><small>Change <em>Encoding</em> to reflect the character encoding of the input text. Even then, it may not work or some characters may not display properly because of variable browser support and because of the form interface. Developers can write some PHP code to capture the filtered input to a file if this is important.
+<br /><br />Refer to the htmLawed documentation (<a href="htmLawed_README.htm"><span class="notice">htm</span></a>/<a href="htmLawed_README.txt"><span class="notice">txt</span></a>) for details about <em>Settings</em>, and htmLawed's behavior and limitations. For <em>Settings</em>, incorrectly-specified values like regular expressions are silently ignored. One or more settings form-fields may have been disabled. Some characters are not allowed in the <em>Spec</em> field.
+
+
+<br /><br />Hovering the mouse over some of the text can provide additional information in some browsers.</small>
+
+<?php
+if($_w3c_validate){
+?>
+
+<small><br /><br />Because of character-encoding issues, the W3C validator (anyway not perfect) may reject validation requests or invalidate otherwise-valid code, esp. if text was copy-pasted in the input box. Local applications like the <em>HTML Validator</em> Firefox browser add-on may be useful in such cases.</small>
+
+<?php
+}
+?>
+
+</div>
+
+<?php
+}
+?>
+
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/mod/htmlawed/vendors/htmLawed/htmLawed_README.htm b/mod/htmlawed/vendors/htmLawed/htmLawed_README.htm
new file mode 100644
index 000000000..6dd78fb2e
--- /dev/null
+++ b/mod/htmlawed/vendors/htmLawed/htmLawed_README.htm
@@ -0,0 +1,2160 @@
+<!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" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-Language" content="en" />
+<meta name="description" content="htmLawed PHP software is a free, open-source, customizable HTML input purifier and filter - htmLawed_README.txt - presented with rTxt2htm, a PHP Labware utility" />
+<meta name="keywords" content="htmLawed, HTM, HTML, HTML Tidy, converter, filter, formatter, purifier, sanitizer, XSS, input, PHP, software, code, script, security, cross-site scripting, hack, sanitize, remove, standards, tags, attributes, elements, htmLawed_README.txt, rTxt2htm, PHP Labware" />
+<style type="text/css" media="all">
+<!--/*--><![CDATA[/*><!--*/
+a {text-decoration:none; color: blue;}
+
+a:hover {color: red;}
+
+a:visited {color: blue;}
+
+body {margin: 0; padding: 0;}
+
+body, div, html, p {font-family: Georgia, 'Times new roman', Times;}
+
+code.code {font-family: 'Bitstream vera sans mono', 'Courier New', 'Courier', monospace;}
+
+div.comment {padding: 5px; color: #999999; font-size: 80%;}
+
+div.comment a {color: #6699cc;}
+
+div#body {width: 70%; margin: 5px; padding: 5px;} /* holds non-toc content */
+
+div#toc {position: fixed; top: 5px; left: 73%; z-index: 2; margin-top: 5px; margin-left: 5px; border: 1px solid gray; padding: 5px; background-color: #ededed; width: 23%; overflow: auto; max-height:94%; font-size: 90%;} /* holds content table (toc) */
+
+div#top {font-size: 14px; margin: 5px; padding: 5px;} /* holds all content */
+
+div.monospace {overflow: auto; font-family: 'Bitstream vera sans mono', 'Courier New', 'Courier', monospace;}
+
+div.sub-section {padding-left: 15px;}
+
+div.sub-sub-section {padding-left: 30px;}
+
+h1 {font-size: 22px; margin-top: 5px; margin-bottom: 5px;}
+
+h2 {font-size: 20px; float: left; margin-top: 15px; margin-bottom: 5px;}
+
+h3 {font-size: 18px; float: left; margin-top: 15px; margin-bottom: 5px;}
+
+h4 {font-size: 16px; float: left; margin-top: 15px; margin-bottom: 5px;}
+
+hr {margin-top: 15px; margin-bottom: 5px;}
+
+input, textarea {font-family: 'Bitstream vera sans mono', 'Courier New', 'Courier', monospace;}
+
+p.subtle {color: gray; padding: 0; padding-top: 10px; margin: 0;}
+
+p.subtle a, p.subtle a:visited {color: #6699cc;}
+
+span.item-no {color: black;}
+
+span.subtle {color: gray; margin: 0; padding:0;}
+
+span.subtle a, span.subtle a:visited {color: #6699cc;}
+
+span.term {font-family: 'Bitstream vera sans mono', 'Courier New', 'Courier', monospace;}
+
+span.toc-item {color: black;}
+
+span.totop {float: right; margin-top: 15px; margin-bottom: 5px;}
+
+span.totop a, span.totop a:visited {color: #6699cc;}
+
+@media screen { /* fixes for old IE */
+
+ * html, * html body {overflow-y: auto!important; height: 100%; margin: 0; padding: 0;}
+
+ * html div#body {height: 100%; overflow-y: auto; position: relative;}
+
+ * html div#toc {position: absolute;}
+
+}
+
+/*]]>*/-->
+</style>
+<title>htmLawed documentation | htmLawed PHP software is a free, open-source, customizable HTML input purifier and filter</title>
+</head>
+<body>
+<div id="top">
+<h1><a id="peak" name="peak"></a>htmLawed documentation</h1>
+
+<div id="toc"><span class="toc-item"><a href="#s1"><span class="item-no">1</span>&#160; About htmLawed</a></span><br />
+&#160; <span class="toc-item"><a href="#s1.1"><span class="item-no">1.1</span>&#160; Example uses</a></span><br />
+&#160; <span class="toc-item"><a href="#s1.2"><span class="item-no">1.2</span>&#160; Features</a></span><br />
+&#160; <span class="toc-item"><a href="#s1.3"><span class="item-no">1.3</span>&#160; History</a></span><br />
+&#160; <span class="toc-item"><a href="#s1.4"><span class="item-no">1.4</span>&#160; License &amp; copyright</a></span><br />
+&#160; <span class="toc-item"><a href="#s1.5"><span class="item-no">1.5</span>&#160; Terms used here</a></span><br />
+<span class="toc-item"><a href="#s2"><span class="item-no">2</span>&#160; Usage</a></span><br />
+&#160; <span class="toc-item"><a href="#s2.1"><span class="item-no">2.1</span>&#160; Simple</a></span><br />
+&#160; <span class="toc-item"><a href="#s2.2"><span class="item-no">2.2</span>&#160; Configuring htmLawed using the <span class="term">$config</span>&#160;parameter</a></span><br />
+&#160; <span class="toc-item"><a href="#s2.3"><span class="item-no">2.3</span>&#160; Extra HTML specifications using the <span class="term">$spec</span>&#160;parameter</a></span><br />
+&#160; <span class="toc-item"><a href="#s2.4"><span class="item-no">2.4</span>&#160; Performance time &amp; memory usage</a></span><br />
+&#160; <span class="toc-item"><a href="#s2.5"><span class="item-no">2.5</span>&#160; Some security risks to keep in mind</a></span><br />
+&#160; <span class="toc-item"><a href="#s2.6"><span class="item-no">2.6</span>&#160; Use without modifying old <span class="term">kses()</span>&#160;code</a></span><br />
+&#160; <span class="toc-item"><a href="#s2.7"><span class="item-no">2.7</span>&#160; Tolerance for ill-written HTML</a></span><br />
+&#160; <span class="toc-item"><a href="#s2.8"><span class="item-no">2.8</span>&#160; Limitations &amp; work-arounds</a></span><br />
+&#160; <span class="toc-item"><a href="#s2.9"><span class="item-no">2.9</span>&#160; Examples of usage</a></span><br />
+<span class="toc-item"><a href="#s3"><span class="item-no">3</span>&#160; Details</a></span><br />
+&#160; <span class="toc-item"><a href="#s3.1"><span class="item-no">3.1</span>&#160; Invalid/dangerous characters</a></span><br />
+&#160; <span class="toc-item"><a href="#s3.2"><span class="item-no">3.2</span>&#160; Character references/entities</a></span><br />
+&#160; <span class="toc-item"><a href="#s3.3"><span class="item-no">3.3</span>&#160; HTML elements</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.3.1"><span class="item-no">3.3.1</span>&#160; HTML comments and <span class="term">CDATA</span>&#160;sections</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.3.2"><span class="item-no">3.3.2</span>&#160; Tag-transformation for better XHTML-Strict</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.3.3"><span class="item-no">3.3.3</span>&#160; Tag balancing and proper nesting</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.3.4"><span class="item-no">3.3.4</span>&#160; Elements requiring child elements</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.3.5"><span class="item-no">3.3.5</span>&#160; Beautify or compact HTML</a></span><br />
+&#160; <span class="toc-item"><a href="#s3.4"><span class="item-no">3.4</span>&#160; Attributes</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.4.1"><span class="item-no">3.4.1</span>&#160; Auto-addition of XHTML-required attributes</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.4.2"><span class="item-no">3.4.2</span>&#160; Duplicate/invalid <span class="term">id</span>&#160;values</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.4.3"><span class="item-no">3.4.3</span>&#160; URL schemes (protocols) and scripts in attribute values</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.4.4"><span class="item-no">3.4.4</span>&#160; Absolute &amp; relative URLs</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.4.5"><span class="item-no">3.4.5</span>&#160; Lower-cased, standard attribute values</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.4.6"><span class="item-no">3.4.6</span>&#160; Transformation of deprecated attributes</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.4.7"><span class="item-no">3.4.7</span>&#160; Anti-spam &amp; <span class="term">href</span></a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.4.8"><span class="item-no">3.4.8</span>&#160; Inline style properties</a></span><br />
+&#160; &#160; <span class="toc-item"><a href="#s3.4.9"><span class="item-no">3.4.9</span>&#160; Hook function for tag content</a></span><br />
+&#160; <span class="toc-item"><a href="#s3.5"><span class="item-no">3.5</span>&#160; Simple configuration directive for most valid XHTML</a></span><br />
+&#160; <span class="toc-item"><a href="#s3.6"><span class="item-no">3.6</span>&#160; Simple configuration directive for most <em>safe</em>&#160;HTML</a></span><br />
+&#160; <span class="toc-item"><a href="#s3.7"><span class="item-no">3.7</span>&#160; Using a hook function</a></span><br />
+&#160; <span class="toc-item"><a href="#s3.8"><span class="item-no">3.8</span>&#160; Obtaining <em>finalized</em>&#160;parameter values</a></span><br />
+&#160; <span class="toc-item"><a href="#s3.9"><span class="item-no">3.9</span>&#160; Retaining non-HTML tags in input with mixed markup</a></span><br />
+<span class="toc-item"><a href="#s4"><span class="item-no">4</span>&#160; Other</a></span><br />
+&#160; <span class="toc-item"><a href="#s4.1"><span class="item-no">4.1</span>&#160; Support</a></span><br />
+&#160; <span class="toc-item"><a href="#s4.2"><span class="item-no">4.2</span>&#160; Known issues</a></span><br />
+&#160; <span class="toc-item"><a href="#s4.3"><span class="item-no">4.3</span>&#160; Change-log</a></span><br />
+&#160; <span class="toc-item"><a href="#s4.4"><span class="item-no">4.4</span>&#160; Testing</a></span><br />
+&#160; <span class="toc-item"><a href="#s4.5"><span class="item-no">4.5</span>&#160; Upgrade, &amp; old versions</a></span><br />
+&#160; <span class="toc-item"><a href="#s4.6"><span class="item-no">4.6</span>&#160; Comparison with <span class="term">HTMLPurifier</span></a></span><br />
+&#160; <span class="toc-item"><a href="#s4.7"><span class="item-no">4.7</span>&#160; Use through application plug-ins/modules</a></span><br />
+&#160; <span class="toc-item"><a href="#s4.8"><span class="item-no">4.8</span>&#160; Use in non-PHP applications</a></span><br />
+&#160; <span class="toc-item"><a href="#s4.9"><span class="item-no">4.9</span>&#160; Donate</a></span><br />
+&#160; <span class="toc-item"><a href="#s4.10"><span class="item-no">4.10</span>&#160; Acknowledgements</a></span><br />
+<span class="toc-item"><a href="#s5"><span class="item-no">5</span>&#160; Appendices</a></span><br />
+&#160; <span class="toc-item"><a href="#s5.1"><span class="item-no">5.1</span>&#160; Characters discouraged in HTML</a></span><br />
+&#160; <span class="toc-item"><a href="#s5.2"><span class="item-no">5.2</span>&#160; Valid attribute-element combinations</a></span><br />
+&#160; <span class="toc-item"><a href="#s5.3"><span class="item-no">5.3</span>&#160; CSS 2.1 properties accepting URLs</a></span><br />
+&#160; <span class="toc-item"><a href="#s5.4"><span class="item-no">5.4</span>&#160; Microsoft Windows 1252 character replacements</a></span><br />
+&#160; <span class="toc-item"><a href="#s5.5"><span class="item-no">5.5</span>&#160; URL format</a></span><br />
+&#160; <span class="toc-item"><a href="#s5.6"><span class="item-no">5.6</span>&#160; Brief on htmLawed code</a></span></div><!-- ended div toc -->
+
+<div id="body">
+<br />
+<div class="comment">htmLawed_README.txt, 8 June 2012<br />
+htmLawed 1.1.11, 5 June 2012<br />
+Copyright Santosh Patnaik<br />
+Dual licensed with LGPL 3 and GPL 2 or later<br />
+A PHP Labware internal utility &#45; <a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed">http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed</a>&#160;</div>
+<br />
+
+<div class="section"><h2>
+<a name="s1" id="s1"></a><span class="item-no">1</span>&#160; About htmLawed
+</h2><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed is a highly customizable single-file PHP script to make text secure, and standard- and admin policy-compliant for use in the body of HTML 4, XHTML 1 or 1.1, or generic XML documents. It is thus a configurable input (X)HTML filter, processor, purifier, sanitizer, beautifier, etc., and an alternative to the <a href="http://tidy.sourceforge.net">HTMLTidy</a>&#160;application.<br />
+<br />
+&#160; The <em>lawing in</em>&#160;of input text is needed to ensure that HTML code in the text is standard-compliant, does not introduce security vulnerabilities, and does not break the aesthetics, design or layout of web-pages. htmLawed tries to do this by, for example, making HTML well-formed with balanced and properly nested tags, neutralizing code that may be used for cross-site scripting (<span class="term">XSS</span>) attacks, and allowing only specified HTML elements/tags and attributes.<br />
+
+<div class="sub-section"><h3>
+<a name="s1.1" id="s1.1"></a><span class="item-no">1.1</span>&#160; Example uses
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; * &#160;Filtering of text submitted as comments on blogs to allow only certain HTML elements<br />
+<br />
+&#160; * &#160;Making RSS/Atom newsfeed item-content standard-compliant: often one uses an excerpt from an HTML document for the content, and with unbalanced tags, non-numerical entities, etc., such excerpts may not be XML-compliant<br />
+<br />
+&#160; * &#160;Text processing for stricter XML standard-compliance: e.g., to have lowercased <span class="term">x</span>&#160;in hexadecimal numeric entities becomes necessary if an XHTML document with MathML content needs to be served as <span class="term">application/xml</span><br />
+<br />
+&#160; * &#160;Scraping text or data from web-pages<br />
+<br />
+&#160; * &#160;Pretty-printing HTML code<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s1.2" id="s1.2"></a><span class="item-no">1.2</span>&#160; Features
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Key: <span class="term">&#42;</span>&#160;security feature, <span class="term">^</span>&#160;standard compliance, <span class="term">~</span>&#160;requires setting right options, <span class="term">&#96;</span>&#160;different from <span class="term">Kses</span><br />
+<br />
+&#160; * &#160;make input more <strong>secure</strong>&#160;and <strong>standard-compliant</strong><br />
+&#160; * &#160;use for HTML 4, XHTML 1.0 or 1.1, or even generic <strong>XML</strong>&#160;documents &#160;^~`<br />
+<br />
+&#160; * &#160;<strong>beautify</strong>&#160;or <strong>compact</strong>&#160;HTML &#160;^~`<br />
+<br />
+&#160; * &#160;<strong>restrict elements</strong>&#160; ^~`<br />
+&#160; * &#160;proper closure of empty elements like <span class="term">img</span>&#160; ^`<br />
+&#160; * &#160;<strong>transform deprecated elements</strong>&#160;like <span class="term">u</span>&#160; ^~`<br />
+&#160; * &#160;HTML <strong>comments</strong>&#160;and <span class="term">CDATA</span>&#160;sections can be permitted &#160;^~`<br />
+&#160; * &#160;elements like <span class="term">script</span>, <span class="term">object</span>&#160;and <span class="term">form</span>&#160;can be permitted &#160;~<br />
+<br />
+&#160; * &#160;<strong>restrict attributes</strong>, including <strong>element-specifically</strong>&#160; ^~`<br />
+&#160; * &#160;remove <strong>invalid attributes</strong>&#160; ^`<br />
+&#160; * &#160;element and attribute names are <strong>lower-cased</strong>&#160; ^<br />
+&#160; * &#160;provide <strong>required attributes</strong>, like <span class="term">alt</span>&#160;for <span class="term">image</span>&#160; ^`<br />
+&#160; * &#160;<strong>transform deprecated attributes</strong>&#160; ^~`<br />
+&#160; * &#160;attributes <strong>declared only once</strong>&#160; ^`<br />
+<br />
+&#160; * &#160;<strong>restrict attribute values</strong>, including <strong>element-specifically</strong>&#160; ^~`<br />
+&#160; * &#160;a value is declared for <em>empty</em>&#160;(<em>minimized</em>) attributes like <span class="term">checked</span>&#160; ^<br />
+&#160; * &#160;check for potentially dangerous attribute values &#160;*~<br />
+&#160; * &#160;ensure <strong>unique</strong>&#160;<span class="term">id</span>&#160;attribute values &#160;^~`<br />
+&#160; * &#160;<strong>double-quote</strong>&#160;attribute values &#160;^<br />
+&#160; * &#160;lower-case <strong>standard attribute values</strong>&#160;like <span class="term">password</span>&#160; ^`<br />
+<br />
+&#160; * &#160;<strong>attribute-specific URL protocol/scheme restriction</strong>&#160; *~`<br />
+&#160; * &#160;disable <strong>dynamic expressions</strong>&#160;in <span class="term">style</span>&#160;values &#160;*~`<br />
+<br />
+&#160; * &#160;neutralize invalid named character entities &#160;^`<br />
+&#160; * &#160;<strong>convert</strong>&#160;hexadecimal numeric entities to decimal ones, or vice versa &#160;^~`<br />
+&#160; * &#160;convert named entities to numeric ones for generic XML use &#160;^~`<br />
+<br />
+&#160; * &#160;remove <strong>null</strong>&#160;characters &#160;*<br />
+&#160; * &#160;neutralize potentially dangerous proprietary Netscape <strong>Javascript entities</strong>&#160; *<br />
+&#160; * &#160;replace potentially dangerous <strong>soft-hyphen</strong>&#160;character in URL-accepting attribute values with spaces &#160;*<br />
+<br />
+&#160; * &#160;remove common <strong>invalid characters</strong>&#160;not allowed in HTML or XML &#160;^`<br />
+&#160; * &#160;replace <strong>characters from Microsoft applications</strong>&#160;like <span class="term">Word</span>&#160;that are discouraged in HTML or XML &#160;^~`<br />
+&#160; * &#160;neutralize entities for characters invalid or discouraged in HTML or XML &#160;^`<br />
+&#160; * &#160;appropriately neutralize <span class="term">&lt;</span>, <span class="term">&amp;</span>, <span class="term">"</span>, and <span class="term">&gt;</span>&#160;characters &#160;^*`<br />
+<br />
+&#160; * &#160;understands improperly spaced tag content (like, spread over more than a line) and properly spaces them &#160;`<br />
+&#160; * &#160;attempts to <strong>balance tags</strong>&#160;for well-formedness &#160;^~`<br />
+&#160; * &#160;understands when <strong>omitable closing tags</strong>&#160;like <span class="term">&lt;/p&gt;</span>&#160;(allowed in HTML 4, transitional, e.g.) are missing &#160;^~`<br />
+&#160; * &#160;attempts to permit only <strong>validly nested tags</strong>&#160; ^~`<br />
+&#160; * &#160;option to <strong>remove or neutralize bad content</strong>&#160;^~`<br />
+&#160; * &#160;attempts to <strong>rectify common errors of plain-text misplacement</strong>&#160;(e.g., directly inside <span class="term">blockquote</span>) ^~`<br />
+<br />
+&#160; * &#160;fast, <strong>non-OOP</strong>&#160;code of ~45 kb incurring peak basal memory usage of ~0.5 MB<br />
+&#160; * &#160;<strong>compatible</strong>&#160;with pre-existing code using <span class="term">Kses</span>&#160;(the filter used by <span class="term">WordPress</span>)<br />
+<br />
+&#160; * &#160;optional <strong>anti-spam</strong>&#160;measures such as addition of <span class="term">rel="nofollow"</span>&#160;and link-disabling &#160;~`<br />
+&#160; * &#160;optionally makes <strong>relative URLs absolute</strong>, and vice versa &#160;~`<br />
+<br />
+&#160; * &#160;optionally mark <span class="term">&amp;</span>&#160;to identify the entities for <span class="term">&amp;</span>, <span class="term">&lt;</span>&#160;and <span class="term">&gt;</span>&#160;introduced by htmLawed &#160;~`<br />
+<br />
+&#160; * &#160;allows deployment of powerful <strong>hook functions</strong>&#160;to <strong>inject</strong>&#160;HTML, <strong>consolidate</strong>&#160;<span class="term">style</span>&#160;attributes to <span class="term">class</span>, finely check attribute values, etc. &#160;~`<br />
+<br />
+&#160; * &#160;<strong>independent of character encoding</strong>&#160;of input and does not affect it<br />
+<br />
+&#160; * &#160;<strong>tolerance for ill-written HTML</strong>&#160;to a certain degree<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s1.3" id="s1.3"></a><span class="item-no">1.3</span>&#160; History
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed was developed for use with <span class="term">LabWiki</span>, a wiki software developed at PHP Labware, as a suitable software could not be found. Existing PHP software like <span class="term">Kses</span>&#160;and <span class="term">HTMLPurifier</span>&#160;were deemed inadequate, slow, resource-intensive, or dependent on external applications like <span class="term">HTML Tidy</span>.<br />
+<br />
+&#160; htmLawed started as a modification of Ulf Harnhammar's <span class="term">Kses</span>&#160;(version 0.2.2) software, and is compatible with code that uses <span class="term">Kses</span>; see <a href="#s2.6">section 2.6</a>.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s1.4" id="s1.4"></a><span class="item-no">1.4</span>&#160; License &amp; copyright
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed is free and open-source software dual licensed under LGPL license version <a href="http://www.gnu.org/licenses/lgpl-3.0.txt">3</a>&#160;and GPL license version <a href="http://www.gnu.org/licenses/gpl-2.0.txt">2</a>&#160;or later, and copyrighted by Santosh Patnaik, MD, PhD.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s1.5" id="s1.5"></a><span class="item-no">1.5</span>&#160; Terms used here
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; * &#160;<em>administrator</em>&#160;- or admin; person setting up the code to pass input through htmLawed; also, <em>user</em><br />
+&#160; * &#160;<em>attributes</em>&#160;- name-value pairs like <span class="term">href="http&#58;//x.com"</span>&#160;in opening tags<br />
+&#160; * &#160;<em>author</em>&#160;- <em>writer</em><br />
+&#160; * &#160;<em>character</em>&#160;- atomic unit of text; internally represented by a numeric <em>code-point</em>&#160;as specified by the <em>encoding</em>&#160;or <em>charset</em>&#160;in use<br />
+&#160; * &#160;<em>entity</em>&#160;- markup like <span class="term">&amp;gt;</span>&#160;and <span class="term">&amp;#160;</span>&#160;used to refer to a character<br />
+&#160; * &#160;<em>element</em>&#160;- HTML element like <span class="term">a</span>&#160;and <span class="term">img</span><br />
+&#160; * &#160;<em>element content</em>&#160;- &#160;content between the opening and closing tags of an element, like <span class="term">click</span>&#160;of <span class="term">&lt;a href="x"&gt;click&lt;/a&gt;</span><br />
+&#160; * &#160;<em>HTML</em>&#160;- implies XHTML unless specified otherwise<br />
+&#160; * &#160;<em>input</em>&#160;- text string given to htmLawed to process<br />
+&#160; * &#160;<em>processing</em>&#160;- involves filtering, correction, etc., of input<br />
+&#160; * &#160;<em>safe</em>&#160;- absence or reduction of certain characters and HTML elements and attributes in the input that can otherwise potentially and circumstantially expose web-site users to security vulnerabilities like cross-site scripting attacks (XSS)<br />
+&#160; * &#160;<em>scheme</em>&#160;- URL protocol like <span class="term">http</span>&#160;and <span class="term">ftp</span><br />
+&#160; * &#160;<em>specs</em>&#160;- standard specifications<br />
+&#160; * &#160;<em>style property</em>&#160;- terms like <span class="term">border</span>&#160;and <span class="term">height</span>&#160;for which declarations are made in values for the <span class="term">style</span>&#160;attribute of elements<br />
+&#160; * &#160;<em>tag</em>&#160;- markers like <span class="term">&lt;a href="x"&gt;</span>&#160;and <span class="term">&lt;/a&gt;</span>&#160;delineating element content; the opening tag can contain attributes<br />
+&#160; * &#160;<em>tag content</em>&#160;- consists of tag markers <span class="term">&lt;</span>&#160;and <span class="term">&gt;</span>, element names like <span class="term">div</span>, and possibly attributes<br />
+&#160; * &#160;<em>user</em>&#160;- administrator<br />
+&#160; * &#160;<em>writer</em>&#160;- end-user like a blog commenter providing the input that is to be processed; also, <em>author</em><br />
+
+</div>
+</div>
+<div class="section"><h2>
+<a name="s2" id="s2"></a><span class="item-no">2</span>&#160; Usage
+</h2><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed should work with PHP 4.4 and higher. Either <span class="term">include()</span>&#160;the <span class="term">htmLawed.php</span>&#160;file or copy-paste the entire code.<br />
+<br />
+&#160; To easily <strong>test</strong>&#160;htmLawed using a form-based interface, use the provided <a href="htmLawedTest.php">demo</a>&#160;(<span class="term">htmLawed.php</span>&#160;and <span class="term">htmLawedTest.php</span>&#160;should be in the same directory on the web-server).<br />
+<br />
+&#160; <strong>Note</strong>: For code for usage of the htmLawed class (for htmLawed in OOP), please refer to the <a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed">htmLawed</a>&#160;website; the filtering itself can be configured, etc., as described here.<br />
+
+<div class="sub-section"><h3>
+<a name="s2.1" id="s2.1"></a><span class="item-no">2.1</span>&#160; Simple
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; The input text to be processed, <span class="term">$text</span>, is passed as an argument of type string; <span class="term">htmLawed()</span>&#160;returns the processed string:<br />
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($text);</code>
+<br />
+<br />
+&#160; <strong>Note</strong>: If input is from a <span class="term">$_GET</span>&#160;or <span class="term">$_POST</span>&#160;value, and <span class="term">magic quotes</span>&#160;are enabled on the PHP setup, run <span class="term">stripslashes()</span>&#160;on the input before passing to htmLawed.<br />
+<br />
+&#160; By default, htmLawed will process the text allowing all valid HTML elements/tags, secure URL scheme/CSS style properties, etc. It will allow <span class="term">CDATA</span>&#160;sections and HTML comments, balance tags, and ensure proper nesting of elements. Such actions can be configured using two other optional arguments -- <span class="term">$config</span>&#160;and <span class="term">$spec</span>:<br />
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($text, $config, $spec);</code>
+<br />
+<br />
+&#160; These extra parameters are detailed below. Some examples are shown in <a href="#s2.9">section 2.9</a>.<br />
+<br />
+&#160; <strong>Note</strong>: For maximum protection against <span class="term">XSS</span>&#160;and other scripting attacks (e.g., by disallowing Javascript code), consider using the <span class="term">safe</span>&#160;parameter; see <a href="#s3.6">section 3.6</a>.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s2.2" id="s2.2"></a><span class="item-no">2.2</span>&#160; Configuring htmLawed using the <span class="term">$config</span>&#160;parameter
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; <span class="term">$config</span>&#160;instructs htmLawed on how to tackle certain tasks. When <span class="term">$config</span>&#160;is not specified, or not set as an array (e.g., <span class="term">$config = 1</span>), htmLawed will take default actions. One or many of the task-action or value-specification pairs can be specified in <span class="term">$config</span>&#160;as array key-value pairs. If a parameter is not specified, htmLawed will use the default value/action indicated further below.<br />
+<br />
+
+<code class="code">&#160; &#160; $config = array(&#39;comment&#39;=&gt;0, &#39;cdata&#39;=&gt;1);</code>
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($text, $config);</code>
+<br />
+<br />
+&#160; Or,<br />
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($text, array(&#39;comment&#39;=&gt;0, &#39;cdata&#39;=&gt;1));</code>
+<br />
+<br />
+&#160; Below are the possible value-specification combinations. In PHP code, values that are integers should not be quoted and should be used as numeric types (unless meant as string/text).<br />
+<br />
+&#160; Key: <span class="term">&#42;</span>&#160;default, <span class="term">^</span>&#160;different default when htmLawed is used in the Kses-compatible mode (see <a href="#s2.6">section 2.6</a>), <span class="term">~</span>&#160;different default when <span class="term">valid_xhtml</span>&#160;is set to <span class="term">1</span>&#160;(see <a href="#s3.5">section 3.5</a>), <span class="term">"</span>&#160;different default when <span class="term">safe</span>&#160;is set to <span class="term">1</span>&#160;(see <a href="#s3.6">section 3.6</a>)<br />
+<br />
+&#160; <strong>abs_url</strong><br />
+&#160; Make URLs absolute or relative; <span class="term">$config["base_url"]</span>&#160;needs to be set; see <a href="#s3.4.4">section 3.4.4</a><br />
+<br />
+&#160; <span class="term">-1</span>&#160;- make relative<br />
+&#160; <span class="term">0</span>&#160;- no action &#160;*<br />
+&#160; <span class="term">1</span>&#160;- make absolute<br />
+<br />
+&#160; <strong>and_mark</strong><br />
+&#160; Mark <span class="term">&amp;</span>&#160;characters in the original input; see <a href="#s3.2">section 3.2</a><br />
+<br />
+&#160; <strong>anti_link_spam</strong><br />
+&#160; Anti-link-spam measure; see <a href="#s3.4.7">section 3.4.7</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no measure taken &#160;*<br />
+&#160; <span class="term">array("regex1", "regex2")</span>&#160;- will ensure a <span class="term">rel</span>&#160;attribute with <span class="term">nofollow</span>&#160;in its value in case the <span class="term">href</span>&#160;attribute value matches the regular expression pattern <span class="term">regex1</span>, and/or will remove <span class="term">href</span>&#160;if its value matches the regular expression pattern <span class="term">regex2</span>. E.g., <span class="term">array("/./", "/&#58;//\W&#42;(?!(abc\.com|xyz\.org))/")</span>; see <a href="#s3.4.7">section 3.4.7</a>&#160;for more.<br />
+<br />
+&#160; <strong>anti_mail_spam</strong><br />
+&#160; Anti-mail-spam measure; see <a href="#s3.4.7">section 3.4.7</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no measure taken &#160;*<br />
+&#160; <span class="term">word</span>&#160;- <span class="term">@</span>&#160;in mail address in <span class="term">href</span>&#160;attribute value is replaced with specified <span class="term">word</span><br />
+<br />
+&#160; <strong>balance</strong><br />
+&#160; Balance tags for well-formedness and proper nesting; see <a href="#s3.3.3">section 3.3.3</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no<br />
+&#160; <span class="term">1</span>&#160;- yes &#160;*<br />
+<br />
+&#160; <strong>base_url</strong><br />
+&#160; Base URL value that needs to be set if <span class="term">$config["abs_url"]</span>&#160;is not <span class="term">0</span>; see <a href="#s3.4.4">section 3.4.4</a><br />
+<br />
+&#160; <strong>cdata</strong><br />
+&#160; Handling of <span class="term">CDATA</span>&#160;sections; see <a href="#s3.3.1">section 3.3.1</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- don't consider <span class="term">CDATA</span>&#160;sections as markup and proceed as if plain text &#160;^"<br />
+&#160; <span class="term">1</span>&#160;- remove<br />
+&#160; <span class="term">2</span>&#160;- allow, but neutralize any <span class="term">&lt;</span>, <span class="term">&gt;</span>, and <span class="term">&amp;</span>&#160;inside by converting them to named entities<br />
+&#160; <span class="term">3</span>&#160;- allow &#160;*<br />
+<br />
+&#160; <strong>clean_ms_char</strong><br />
+&#160; Replace discouraged characters introduced by Microsoft Word, etc.; see <a href="#s3.1">section 3.1</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no &#160;*<br />
+&#160; <span class="term">1</span>&#160;- yes<br />
+&#160; <span class="term">2</span>&#160;- yes, but replace special single &amp; double quotes with ordinary ones<br />
+<br />
+&#160; <strong>comment</strong><br />
+&#160; Handling of HTML comments; see <a href="#s3.3.1">section 3.3.1</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- don't consider comments as markup and proceed as if plain text &#160;^"<br />
+&#160; <span class="term">1</span>&#160;- remove<br />
+&#160; <span class="term">2</span>&#160;- allow, but neutralize any <span class="term">&lt;</span>, <span class="term">&gt;</span>, and <span class="term">&amp;</span>&#160;inside by converting to named entities<br />
+&#160; <span class="term">3</span>&#160;- allow &#160;*<br />
+<br />
+&#160; <strong>css_expression</strong><br />
+&#160; Allow dynamic CSS expression by not removing the expression from CSS property values in <span class="term">style</span>&#160;attributes; see <a href="#s3.4.8">section 3.4.8</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- remove &#160;*<br />
+&#160; <span class="term">1</span>&#160;- allow<br />
+<br />
+&#160; <strong>deny_attribute</strong><br />
+&#160; Denied HTML attributes; see <a href="#s3.4">section 3.4</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- none &#160;*<br />
+&#160; <span class="term">string</span>&#160;- dictated by values in <span class="term">string</span><br />
+&#160; <span class="term">on&#42;</span>&#160;(like <span class="term">onfocus</span>) attributes not allowed - "<br />
+<br />
+&#160; <strong>direct_nest_list</strong><br />
+&#160; Allow direct nesting of a list within another without requiring it to be a list item; see <a href="#s3.3.4">section 3.3.4</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no &#160;*<br />
+&#160; <span class="term">1</span>&#160;- yes<br />
+<br />
+&#160; <strong>elements</strong><br />
+&#160; Allowed HTML elements; see <a href="#s3.3">section 3.3</a><br />
+<br />
+&#160; <span class="term">&#42; -center -dir -font -isindex -menu -s -strike -u</span>&#160;- &#160;~<br />
+&#160; <span class="term">applet, embed, iframe, object, script</span>&#160;not allowed - "<br />
+<br />
+&#160; <strong>hexdec_entity</strong><br />
+&#160; Allow hexadecimal numeric entities and do not convert to the more widely accepted decimal ones, or convert decimal to hexadecimal ones; see <a href="#s3.2">section 3.2</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no<br />
+&#160; <span class="term">1</span>&#160;- yes &#160;*<br />
+&#160; <span class="term">2</span>&#160;- convert decimal to hexadecimal ones<br />
+<br />
+&#160; <strong>hook</strong><br />
+&#160; Name of an optional hook function to alter the input string, <span class="term">$config</span>&#160;or <span class="term">$spec</span>&#160;before htmLawed starts its main work; see <a href="#s3.7">section 3.7</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no hook function &#160;*<br />
+&#160; <span class="term">name</span>&#160;- <span class="term">name</span>&#160;is name of the hook function (<span class="term">kses_hook</span>&#160; ^)<br />
+<br />
+&#160; <strong>hook_tag</strong><br />
+&#160; Name of an optional hook function to alter tag content finalized by htmLawed; see <a href="#s3.4.9">section 3.4.9</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no hook function &#160;*<br />
+&#160; <span class="term">name</span>&#160;- <span class="term">name</span>&#160;is name of the hook function<br />
+<br />
+&#160; <strong>keep_bad</strong><br />
+&#160; Neutralize bad tags by converting <span class="term">&lt;</span>&#160;and <span class="term">&gt;</span>&#160;to entities, or remove them; see <a href="#s3.3.3">section 3.3.3</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- remove &#160;^<br />
+&#160; <span class="term">1</span>&#160;- neutralize both tags and element content<br />
+&#160; <span class="term">2</span>&#160;- remove tags but neutralize element content<br />
+&#160; <span class="term">3</span>&#160;and <span class="term">4</span>&#160;- like <span class="term">1</span>&#160;and <span class="term">2</span>&#160;but remove if text (<span class="term">pcdata</span>) is invalid in parent element<br />
+&#160; <span class="term">5</span>&#160;and <span class="term">6</span>&#160;* - &#160;like <span class="term">3</span>&#160;and <span class="term">4</span>&#160;but line-breaks, tabs and spaces are left<br />
+<br />
+&#160; <strong>lc_std_val</strong><br />
+&#160; For XHTML compliance, predefined, standard attribute values, like <span class="term">get</span>&#160;for the <span class="term">method</span>&#160;attribute of <span class="term">form</span>, must be lowercased; see <a href="#s3.4.5">section 3.4.5</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no<br />
+&#160; <span class="term">1</span>&#160;- yes &#160;*<br />
+<br />
+&#160; <strong>make_tag_strict</strong><br />
+&#160; Transform/remove these non-strict XHTML elements, even if they are allowed by the admin: <span class="term">applet</span>&#160;<span class="term">center</span>&#160;<span class="term">dir</span>&#160;<span class="term">embed</span>&#160;<span class="term">font</span>&#160;<span class="term">isindex</span>&#160;<span class="term">menu</span>&#160;<span class="term">s</span>&#160;<span class="term">strike</span>&#160;<span class="term">u</span>; see <a href="#s3.3.2">section 3.3.2</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no &#160;^<br />
+&#160; <span class="term">1</span>&#160;- yes, but leave <span class="term">applet</span>, <span class="term">embed</span>&#160;and <span class="term">isindex</span>&#160;elements that currently can't be transformed &#160;*<br />
+&#160; <span class="term">2</span>&#160;- yes, removing <span class="term">applet</span>, <span class="term">embed</span>&#160;and <span class="term">isindex</span>&#160;elements and their contents (nested elements remain) &#160;~<br />
+<br />
+&#160; <strong>named_entity</strong><br />
+&#160; Allow non-universal named HTML entities, or convert to numeric ones; see <a href="#s3.2">section 3.2</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- convert<br />
+&#160; <span class="term">1</span>&#160;- allow &#160;*<br />
+<br />
+&#160; <strong>no_deprecated_attr</strong><br />
+&#160; Allow deprecated attributes or transform them; see <a href="#s3.4.6">section 3.4.6</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- allow &#160;^<br />
+&#160; <span class="term">1</span>&#160;- transform, but <span class="term">name</span>&#160;attributes for <span class="term">a</span>&#160;and <span class="term">map</span>&#160;are retained &#160;*<br />
+&#160; <span class="term">2</span>&#160;- transform<br />
+<br />
+&#160; <strong>parent</strong><br />
+&#160; Name of the parent element, possibly imagined, that will hold the input; see <a href="#s3.3">section 3.3</a><br />
+<br />
+&#160; <strong>safe</strong><br />
+&#160; Magic parameter to make input the most secure against XSS without needing to specify other relevant <span class="term">$config</span>&#160;parameters; see <a href="#s3.6">section 3.6</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no &#160;*<br />
+&#160; <span class="term">1</span>&#160;- will auto-adjust other relevant <span class="term">$config</span>&#160;parameters (indicated by <span class="term">"</span>&#160;in this list)<br />
+<br />
+&#160; <strong>schemes</strong><br />
+&#160; Array of attribute-specific, comma-separated, lower-cased list of schemes (protocols) allowed in attributes accepting URLs (or <span class="term">!</span>&#160;to <em>deny</em>&#160;any URL); <span class="term">&#42;</span>&#160;covers all unspecified attributes; see <a href="#s3.4.3">section 3.4.3</a><br />
+<br />
+&#160; <span class="term">href&#58; aim, feed, file, ftp, gopher, http, https, irc, mailto, news, nntp, sftp, ssh, telnet; &#42;&#58;file, http, https</span>&#160; *<br />
+&#160; <span class="term">&#42;&#58; ftp, gopher, http, https, mailto, news, nntp, telnet</span>&#160; ^<br />
+&#160; <span class="term">href&#58; aim, feed, file, ftp, gopher, http, https, irc, mailto, news, nntp, sftp, ssh, telnet; style&#58; !; &#42;&#58;file, http, https</span>&#160; "<br />
+<br />
+&#160; <strong>show_setting</strong><br />
+&#160; Name of a PHP variable to assign the <em>finalized</em>&#160;<span class="term">$config</span>&#160;and <span class="term">$spec</span>&#160;values; see <a href="#s3.8">section 3.8</a><br />
+<br />
+&#160; <strong>style_pass</strong><br />
+&#160; Do not look at <span class="term">style</span>&#160;attribute values, letting them through without any alteration<br />
+<br />
+&#160; <span class="term">0</span>&#160;- no *<br />
+&#160; <span class="term">1</span>&#160;- htmLawed will let through any <span class="term">style</span>&#160;value; see <a href="#s3.4.8">section 3.4.8</a><br />
+<br />
+&#160; <strong>tidy</strong><br />
+&#160; Beautify or compact HTML code; see <a href="#s3.3.5">section 3.3.5</a><br />
+<br />
+&#160; <span class="term">-1</span>&#160;- compact<br />
+&#160; <span class="term">0</span>&#160;- no &#160;*<br />
+&#160; <span class="term">1</span>&#160;or <span class="term">string</span>&#160;- beautify (custom format specified by <span class="term">string</span>)<br />
+<br />
+&#160; <strong>unique_ids</strong><br />
+&#160; <span class="term">id</span>&#160;attribute value checks; see <a href="#s3.4.2">section 3.4.2</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no &#160;^<br />
+&#160; <span class="term">1</span>&#160;- remove duplicate and/or invalid ones &#160;*<br />
+&#160; <span class="term">word</span>&#160;- remove invalid ones and replace duplicate ones with new and unique ones based on the <span class="term">word</span>; the admin-specified <span class="term">word</span>, like <span class="term">my_</span>, should begin with a letter (a-z) and can contain letters, digits, <span class="term">.</span>, <span class="term">_</span>, <span class="term">-</span>, and <span class="term">&#58;</span>.<br />
+<br />
+&#160; <strong>valid_xhtml</strong><br />
+&#160; Magic parameter to make input the most valid XHTML without needing to specify other relevant <span class="term">$config</span>&#160;parameters; see <a href="#s3.5">section 3.5</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no &#160;*<br />
+&#160; <span class="term">1</span>&#160;- will auto-adjust other relevant <span class="term">$config</span>&#160;parameters (indicated by <span class="term">~</span>&#160;in this list)<br />
+<br />
+&#160; <strong>xml:lang</strong><br />
+&#160; Auto-adding <span class="term">xml&#58;lang</span>&#160;attribute; see <a href="#s3.4.1">section 3.4.1</a><br />
+<br />
+&#160; <span class="term">0</span>&#160;- no &#160;*<br />
+&#160; <span class="term">1</span>&#160;- add if <span class="term">lang</span>&#160;attribute is present<br />
+&#160; <span class="term">2</span>&#160;- add if <span class="term">lang</span>&#160;attribute is present, and remove <span class="term">lang</span>&#160; ~<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s2.3" id="s2.3"></a><span class="item-no">2.3</span>&#160; Extra HTML specifications using the $spec parameter
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; The <span class="term">$spec</span>&#160;argument can be used to disallow an otherwise legal attribute for an element, or to restrict the attribute's values. This can also be helpful as a security measure (e.g., in certain versions of browsers, certain values can cause buffer overflows and denial of service attacks), or in enforcing admin policy compliance. <span class="term">$spec</span>&#160;is specified as a string of text containing one or more <em>rules</em>, with multiple rules separated from each other by a semi-colon (<span class="term">;</span>). E.g.,<br />
+<br />
+
+<code class="code">&#160; &#160; $spec = &#39;i=-&#42;; td, tr=style, id, -&#42;; a=id(match="/[a-z][a-z\d.&#58;\-&#96;"]&#42;/i"/minval=2), href(maxlen=100/minlen=34); img=-width,-alt&#39;;</code>
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($text, $config, $spec);</code>
+<br />
+<br />
+&#160; Or,<br />
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($text, $config, &#39;i=-&#42;; td, tr=style, id, -&#42;; a=id(match="/[a-z][a-z\d.&#58;\-&#96;"]&#42;/i"/minval=2), href(maxlen=100/minlen=34); img=-width,-alt&#39;);</code>
+<br />
+<br />
+&#160; A rule begins with an HTML <strong>element</strong>&#160;name(s) (<em>rule-element</em>), for which the rule applies, followed by an equal (<span class="term">=</span>) sign. A rule-element may represent multiple elements if comma (,)-separated element names are used. E.g., <span class="term">th,td,tr=</span>.<br />
+<br />
+&#160; Rest of the rule consists of comma-separated HTML <strong>attribute names</strong>. A minus (<span class="term">-</span>) character before an attribute means that the attribute is not permitted inside the rule-element. E.g., <span class="term">-width</span>. To deny all attributes, <span class="term">-&#42;</span>&#160;can be used.<br />
+<br />
+&#160; Following shows examples of rule excerpts with rule-element <span class="term">a</span>&#160;and the attributes that are being permitted:<br />
+<br />
+&#160; * &#160;<span class="term">a=</span>&#160;- all<br />
+&#160; * &#160;<span class="term">a=id</span>&#160;- all<br />
+&#160; * &#160;<span class="term">a=href, title, -id, -onclick</span>&#160;- all except <span class="term">id</span>&#160;and <span class="term">onclick</span><br />
+&#160; * &#160;<span class="term">a=&#42;, id, -id</span>&#160;- all except <span class="term">id</span><br />
+&#160; * &#160;<span class="term">a=-&#42;</span>&#160;- none<br />
+&#160; * &#160;<span class="term">a=-&#42;, href, title</span>&#160;- none except <span class="term">href</span>&#160;and <span class="term">title</span><br />
+&#160; * &#160;<span class="term">a=-&#42;, -id, href, title</span>&#160;- none except <span class="term">href</span>&#160;and <span class="term">title</span><br />
+<br />
+&#160; Rules regarding <strong>attribute values</strong>&#160;are optionally specified inside round brackets after attribute names in slash ('/')-separated <em>parameter = value</em>&#160;pairs. E.g., <span class="term">title(maxlen=30/minlen=5)</span>. None, or one or more of the following parameters may be specified:<br />
+<br />
+&#160; * &#160;<span class="term">oneof</span>&#160;- one or more choices separated by <span class="term">|</span>&#160;that the value should match; if only one choice is provided, then the value must match that choice<br />
+<br />
+&#160; * &#160;<span class="term">noneof</span>&#160;- one or more choices separated by <span class="term">|</span>&#160;that the value should not match<br />
+<br />
+&#160; * &#160;<span class="term">maxlen</span>&#160;and <span class="term">minlen</span>&#160;- upper and lower limits for the number of characters in the attribute value; specified in numbers<br />
+<br />
+&#160; * &#160;<span class="term">maxval</span>&#160;and <span class="term">minval</span>&#160;- upper and lower limits for the numerical value specified in the attribute value; specified in numbers<br />
+<br />
+&#160; * &#160;<span class="term">match</span>&#160;and <span class="term">nomatch</span>&#160;- pattern that the attribute value should or should not match; specified as PHP/PCRE-compatible regular expressions with delimiters and possibly modifiers<br />
+<br />
+&#160; * &#160;<span class="term">default</span>&#160;- a value to force on the attribute if the value provided by the writer does not fit any of the specified parameters<br />
+<br />
+&#160; If <span class="term">default</span>&#160;is not set and the attribute value does not satisfy any of the specified parameters, then the attribute is removed. The <span class="term">default</span>&#160;value can also be used to force all attribute declarations to take the same value (by getting the values declared illegal by setting, e.g., <span class="term">maxlen</span>&#160;to <span class="term">-1</span>).<br />
+<br />
+&#160; Examples with <em>input</em>&#160;<span class="term">&lt;input title="WIDTH" value="10em" /&gt;&lt;input title="length" value="5" /&gt;</span>&#160;are shown below.<br />
+<br />
+&#160; <em>Rule</em>: <span class="term">input=title(maxlen=60/minlen=6), value</span><br />
+&#160; <em>Output</em>: <span class="term">&lt;input value="10em" /&gt;&lt;input title="length" value="5" /&gt;</span><br />
+<br />
+&#160; <em>Rule</em>: <span class="term">input=title(), value(maxval=8/default=6)</span><br />
+&#160; <em>Output</em>: <span class="term">&lt;input title="WIDTH" value="6" /&gt;&lt;input title="length" value="5" /&gt;</span><br />
+<br />
+&#160; <em>Rule</em>: <span class="term">input=title(nomatch=%w.d%i), value(match=%em%/default=6em)</span><br />
+&#160; <em>Output</em>: <span class="term">&lt;input value="10em" /&gt;&lt;input title="length" value="6em" /&gt;</span><br />
+<br />
+&#160; <em>Rule</em>: <span class="term">input=title(oneof=height|depth/default=depth), value(noneof=5|6)</span><br />
+&#160; <em>Output</em>: <span class="term">&lt;input title="depth" value="10em" /&gt;&lt;input title="depth" /&gt;</span><br />
+<br />
+&#160; <strong>Special characters</strong>: The characters <span class="term">;</span>, <span class="term">,</span>, <span class="term">/</span>, <span class="term">(</span>, <span class="term">)</span>, <span class="term">|</span>, <span class="term">~</span>&#160;and space have special meanings in the rules. Words in the rules that use such characters, or the characters themselves, should be <em>escaped</em>&#160;by enclosing in pairs of double-quotes (<span class="term">"</span>). A back-tick (<span class="term">&#96;</span>) can be used to escape a literal <span class="term">"</span>. An example rule illustrating this is <span class="term">input=value(maxlen=30/match="/^\w/"/default="your &#96;"ID&#96;"")</span>.<br />
+<br />
+&#160; <strong>Note</strong>: To deny an attribute for all elements for which it is legal, <span class="term">$config["deny_attribute"]</span>&#160;(see <a href="#s3.4">section 3.4</a>) can be used instead of <span class="term">$spec</span>. Also, attributes can be allowed element-specifically through <span class="term">$spec</span>&#160;while being denied globally through <span class="term">$config["deny_attribute"]</span>. The <span class="term">hook_tag</span>&#160;parameter (<a href="#s3.4.9">section 3.4.9</a>) can also be used to implement the <span class="term">$spec</span>&#160;functionality.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s2.4" id="s2.4"></a><span class="item-no">2.4</span>&#160; Performance time &amp; memory usage
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; The time and memory used by htmLawed depends on its configuration and the size of the input, and the amount, nestedness and well-formedness of the HTML markup within it. In particular, tag balancing and beautification each can increase the processing time by about a quarter.<br />
+<br />
+&#160; The htmLawed <a href="htmLawedTest.php">demo</a>&#160;can be used to evaluate the performance and effects of different types of input and <span class="term">$config</span>.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s2.5" id="s2.5"></a><span class="item-no">2.5</span>&#160; Some security risks to keep in mind
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; When setting the parameters/arguments (like those to allow certain HTML elements) for use with htmLawed, one should bear in mind that the setting may let through potentially <em>dangerous</em>&#160;HTML code which is meant to steal user-data, deface a website, render a page non-functional, etc.<br />
+<br />
+&#160; Unless end-users, either people or software, supplying the content are completely trusted, security issues arising from the degree of HTML usage permission has to be kept in mind. For example, following increase security risks:<br />
+<br />
+&#160; * &#160;Allowing <span class="term">script</span>, <span class="term">applet</span>, <span class="term">embed</span>, <span class="term">iframe</span>&#160;or <span class="term">object</span>&#160;elements, or certain of their attributes like <span class="term">allowscriptaccess</span><br />
+<br />
+&#160; * &#160;Allowing HTML comments (some Internet Explorer versions are vulnerable with, e.g., <span class="term">&lt;!--[if gte IE 4]&gt;&lt;script&gt;alert("xss");&lt;/script&gt;&lt;![endif]--&gt;</span><br />
+<br />
+&#160; * &#160;Allowing dynamic CSS expressions (a feature of the IE browser)<br />
+<br />
+&#160; * &#160;Allowing the <span class="term">style</span>&#160;attribute<br />
+<br />
+&#160; To remove <em>unsecure</em>&#160;HTML, code-developers using htmLawed must set <span class="term">$config</span>&#160;appropriately. E.g., <span class="term">$config["elements"] = "&#42; -script"</span>&#160;to deny the <span class="term">script</span>&#160;element (<a href="#s3.3">section 3.3</a>), <span class="term">$config["safe"] = 1</span>&#160;to auto-configure ceratin htmLawed parameters for maximizing security (<a href="#s3.6">section 3.6</a>), etc.<br />
+<br />
+&#160; Permitting the <span class="term">&#42;style&#42;</span>&#160;attribute brings in risks of <em>click-jacking</em>, <em>phishing</em>, web-page overlays, etc., <em>even</em>&#160;when the <span class="term">safe</span>&#160;parameter is enabled (see <a href="#s3.6">section 3.6</a>). Except for URLs and a few other things like CSS dynamic expressions, htmLawed currently does not check every CSS style property. It does provide ways for the code-developer implementing htmLawed to do such checks through htmLawed's <span class="term">$spec</span>&#160;argument, and through the <span class="term">hook_tag</span>&#160;parameter (see <a href="#s3.4.8">section 3.4.8</a>&#160;for more). Disallowing <span class="term">style</span>&#160;completely and relying on CSS classes and stylesheet files is recommended.<br />
+<br />
+&#160; htmLawed does not check or correct the character <strong>encoding</strong>&#160;of the input it receives. In conjunction with permitting circumstances such as when the character encoding is left undefined through HTTP headers or HTML <span class="term">meta</span>&#160;tags, this can permit an exploit (like Google's UTF-7/XSS vulnerability of the past).<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s2.6" id="s2.6"></a><span class="item-no">2.6</span>&#160; Use without modifying old <span class="term">kses()</span>&#160;code
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; The <span class="term">Kses</span>&#160;PHP script is used by many applications (like <span class="term">WordPress</span>). It is possible to have such applications use htmLawed instead, since it is compatible with code that calls the <span class="term">kses()</span>&#160;function declared in the <span class="term">Kses</span>&#160;file (usually named <span class="term">kses.php</span>). E.g., application code like this will continue to work after replacing <span class="term">Kses</span>&#160;with htmLawed:<br />
+<br />
+
+<code class="code">&#160; &#160; $comment_filtered = kses($comment_input, array(&#39;a&#39;=&gt;array(), &#39;b&#39;=&gt;array(), &#39;i&#39;=&gt;array()));</code>
+<br />
+<br />
+&#160; For some of the <span class="term">$config</span>&#160;parameters, htmLawed will use values other than the default ones. These are indicated by <span class="term">^</span>&#160;in <a href="#s2.2">section 2.2</a>. To force htmLawed to use other values, function <span class="term">kses()</span>&#160;in the htmLawed code should be edited -- a few configurable parameters/variables need to be changed.<br />
+<br />
+&#160; If the application uses a <span class="term">Kses</span>&#160;file that has the <span class="term">kses()</span>&#160;function declared, then, to have the application use htmLawed instead of <span class="term">Kses</span>, simply rename <span class="term">htmLawed.php</span>&#160;(to <span class="term">kses.php</span>, e.g.) and replace the <span class="term">Kses</span>&#160;file (or just replace the code in the <span class="term">Kses</span>&#160;file with the htmLawed code). If the <span class="term">kses()</span>&#160;function in the <span class="term">Kses</span>&#160;file had been renamed by the application developer (e.g., in <span class="term">WordPress</span>, it is named <span class="term">wp_kses()</span>), then appropriately rename the <span class="term">kses()</span>&#160;function in the htmLawed code.<br />
+<br />
+&#160; If the <span class="term">Kses</span>&#160;file used by the application has been highly altered by the application developers, then one may need a different approach. E.g., with <span class="term">WordPress</span>, it is best to copy the htmLawed code to <span class="term">wp_includes/kses.php</span>, rename the newly added function <span class="term">kses()</span>&#160;to <span class="term">wp_kses()</span>, and delete the code for the original <span class="term">wp_kses()</span>&#160;function.<br />
+<br />
+&#160; If the <span class="term">Kses</span>&#160;code has a non-empty hook function (e.g., <span class="term">wp_kses_hook()</span>&#160;in case of <span class="term">WordPress</span>), then the code for htmLawed's <span class="term">kses_hook()</span>&#160;function should be appropriately edited. However, the requirement of the hook function should be re-evaluated considering that htmLawed has extra capabilities. With <span class="term">WordPress</span>, the hook function is an essential one. The following code is suggested for the htmLawed <span class="term">kses_hook()</span>&#160;in case of <span class="term">WordPress</span>:<br />
+<br />
+
+<code class="code">&#160; &#160; function kses_hook($string, &amp;$cf, &amp;$spec){</code>
+<br />
+
+<code class="code">&#160; &#160; // kses compatibility</code>
+<br />
+
+<code class="code">&#160; &#160; $allowed_html = $spec;</code>
+<br />
+
+<code class="code">&#160; &#160; $allowed_protocols = array();</code>
+<br />
+
+<code class="code">&#160; &#160; foreach($cf[&#39;schemes&#39;] as $v){</code>
+<br />
+
+<code class="code">&#160; &#160; &#160;foreach($v as $k2=&gt;$v2){</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; if(!in_array($k2, $allowed_protocols)){</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160;$allowed_protocols[] = $k2;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; }</code>
+<br />
+
+<code class="code">&#160; &#160; &#160;}</code>
+<br />
+
+<code class="code">&#160; &#160; }</code>
+<br />
+
+<code class="code">&#160; &#160; return wp_kses_hook($string, $allowed_html, $allowed_protocols);</code>
+<br />
+
+<code class="code">&#160; &#160; // eof</code>
+<br />
+
+<code class="code">&#160; &#160; }</code>
+<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s2.7" id="s2.7"></a><span class="item-no">2.7</span>&#160; Tolerance for ill-written HTML
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed can work with ill-written HTML code in the input. However, HTML that is too ill-written may not be <em>read</em>&#160;as HTML, and be considered mere plain text instead. Following statements indicate the degree of <em>looseness</em>&#160;that htmLawed can work with, and can be provided in instructions to writers:<br />
+<br />
+&#160; * &#160;Tags must be flanked by <span class="term">&lt;</span>&#160;and <span class="term">&gt;</span>&#160;with no <span class="term">&gt;</span>&#160;inside -- any needed <span class="term">&gt;</span>&#160;should be put in as <span class="term">&amp;gt;</span>. It is possible for tag content (element name and attributes) to be spread over many lines instead of being on one. A space may be present between the tag content and <span class="term">&gt;</span>, like <span class="term">&lt;div &gt;</span>&#160;and <span class="term">&lt;img / &gt;</span>, but not after the <span class="term">&lt;</span>.<br />
+<br />
+&#160; * &#160;Element and attribute names need not be lower-cased.<br />
+<br />
+&#160; * &#160;Attribute string of elements may be liberally spaced with tabs, line-breaks, etc.<br />
+<br />
+&#160; * &#160;Attribute values may not be double-quoted, or may be single-quoted.<br />
+<br />
+&#160; * &#160;Left-padding of numeric entities (like, <span class="term">&amp;#0160;</span>, <span class="term">&amp;x07ff;</span>) with <span class="term">0</span>&#160;is okay as long as the number of characters between between the <span class="term">&amp;</span>&#160;and the <span class="term">;</span>&#160;does not exceed 8. All entities must end with <span class="term">;</span>&#160;though.<br />
+<br />
+&#160; * &#160;Named character entities must be properly cased. E.g., <span class="term">&amp;Lt;</span>&#160;or <span class="term">&amp;TILDE;</span>&#160;will not be let through without modification.<br />
+<br />
+&#160; * &#160;HTML comments should not be inside element tags (okay between tags), and should begin with <span class="term">&lt;!--</span>&#160;and end with <span class="term">--&gt;</span>. Characters like <span class="term">&lt;</span>, <span class="term">&gt;</span>, and <span class="term">&amp;</span>&#160;may be allowed inside depending on <span class="term">$config</span>, but any <span class="term">--&gt;</span>&#160;inside should be put in as <span class="term">--&amp;gt;</span>. Any <span class="term">--</span>&#160;inside will be automatically converted to <span class="term">-</span>, and a space will be added before the comment delimiter <span class="term">--&gt;</span>.<br />
+<br />
+&#160; * &#160;<span class="term">CDATA</span>&#160;sections should not be inside element tags, and can be in element content only if plain text is allowed for that element. They should begin with <span class="term">&lt;[CDATA[</span>&#160;and end with <span class="term">]]&gt;</span>. Characters like <span class="term">&lt;</span>, <span class="term">&gt;</span>, and <span class="term">&amp;</span>&#160;may be allowed inside depending on <span class="term">$config</span>, but any <span class="term">]]&gt;</span>&#160;inside should be put in as <span class="term">]]&amp;gt;</span>.<br />
+<br />
+&#160; * &#160;For attribute values, character entities <span class="term">&amp;lt;</span>, <span class="term">&amp;gt;</span>&#160;and <span class="term">&amp;amp;</span>&#160;should be used instead of characters <span class="term">&lt;</span>&#160;and <span class="term">&gt;</span>, and <span class="term">&amp;</span>&#160;(when <span class="term">&amp;</span>&#160;is not part of a character entity). This applies even for Javascript code in values of attributes like <span class="term">onclick</span>.<br />
+<br />
+&#160; * &#160;Characters <span class="term">&lt;</span>, <span class="term">&gt;</span>, <span class="term">&amp;</span>&#160;and <span class="term">"</span>&#160;that are part of actual Javascript, etc., code in <span class="term">script</span>&#160;elements should be used as such and not be put in as entities like <span class="term">&amp;gt;</span>. Otherwise, though the HTML will be valid, the code may fail to work. Further, if such characters have to be used, then they should be put inside <span class="term">CDATA</span>&#160;sections.<br />
+<br />
+&#160; * &#160;Simple instructions like "an opening tag cannot be present between two closing tags" and "nested elements should be closed in the reverse order of how they were opened" can help authors write balanced HTML. If tags are imbalanced, htmLawed will try to balance them, but in the process, depending on <span class="term">$config["keep_bad"]</span>, some code/text may be lost.<br />
+<br />
+&#160; * &#160;Input authors should be notified of admin-specified allowed elements, attributes, configuration values (like conversion of named entities to numeric ones), etc.<br />
+<br />
+&#160; * &#160;With <span class="term">$config["unique_ids"]</span>&#160;not <span class="term">0</span>&#160;and the <span class="term">id</span>&#160;attribute being permitted, writers should carefully avoid using duplicate or invalid <span class="term">id</span>&#160;values as even though htmLawed will correct/remove the values, the final output may not be the one desired. E.g., when <span class="term">&lt;a id="home"&gt;&lt;/a&gt;&lt;input id="home" /&gt;&lt;label for="home"&gt;&lt;/label&gt;</span>&#160;is processed into<br />
+<span class="term">&lt;a id="home"&gt;&lt;/a&gt;&lt;input id="prefix_home" /&gt;&lt;label for="home"&gt;&lt;/label&gt;</span>.<br />
+<br />
+&#160; * &#160;Note that even if intended HTML is lost in a highly ill-written input, the processed output will be more secure and standard-compliant.<br />
+<br />
+&#160; * &#160;For URLs, unless <span class="term">$config["scheme"]</span>&#160;is appropriately set, writers should avoid using escape characters or entities in schemes. E.g., <span class="term">htt&amp;#112;</span>&#160;(which many browsers will read as the harmless <span class="term">http</span>) may be considered bad by htmLawed.<br />
+<br />
+&#160; * &#160;htmLawed will attempt to put plain text present directly inside <span class="term">blockquote</span>, <span class="term">form</span>, <span class="term">map</span>&#160;and <span class="term">noscript</span>&#160;elements (illegal as per the specs) inside auto-generated <span class="term">div</span>&#160;elements.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s2.8" id="s2.8"></a><span class="item-no">2.8</span>&#160; Limitations &amp; work-arounds
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed's main objective is to make the input text <em>more</em>&#160;standard-compliant, secure for web-page readers, and free of HTML elements and attributes considered undesirable by the administrator. Some of its current limitations, regardless of this objective, are noted below along with work-arounds.<br />
+<br />
+&#160; It should be borne in mind that no browser application is 100% standard-compliant, and that some of the standard specs (like asking for normalization of white-spacing within <span class="term">textarea</span>&#160;elements) are clearly wrong. Regarding security, note that <em>unsafe</em>&#160;HTML code is not necessarily legally invalid.<br />
+<br />
+&#160; * &#160;htmLawed is meant for input that goes into the <span class="term">body</span>&#160;of HTML documents. HTML's head-level elements are not supported, nor are the frameset elements <span class="term">frameset</span>, <span class="term">frame</span>&#160;and <span class="term">noframes</span>.<br />
+<br />
+&#160; * &#160;It cannot transform the non-standard <span class="term">embed</span>&#160;elements to the standard-compliant <span class="term">object</span>&#160;elements. Yet, it can allow <span class="term">embed</span>&#160;elements if permitted (<span class="term">embed</span>&#160;is widely used and supported). Admins can certainly use the <span class="term">hook_tag</span>&#160;parameter (<a href="#s3.4.9">section 3.4.9</a>) to deploy a custom embed-to-object converter function.<br />
+<br />
+&#160; * &#160;The only non-standard element that may be permitted is <span class="term">embed</span>; others like <span class="term">noembed</span>&#160;and <span class="term">nobr</span>&#160;cannot be permitted without modifying the htmLawed code.<br />
+<br />
+&#160; * &#160;It cannot handle input that has non-HTML code like <span class="term">SVG</span>&#160;and <span class="term">MathML</span>. One way around is to break the input into pieces and passing only those without non-HTML code to htmLawed. Another is described in <a href="#s3.9">section 3.9</a>. A third way may be to some how take advantage of the <span class="term">$config["and_mark"]</span>&#160;parameter (see <a href="#s3.2">section 3.2</a>).<br />
+<br />
+&#160; * &#160;By default, htmLawed won't check many attribute values for standard compliance. E.g., <span class="term">width="20m"</span>&#160;with the dimension in non-standard <span class="term">m</span>&#160;is let through. Implementing universal and strict attribute value checks can make htmLawed slow and resource-intensive. Admins should look at the <span class="term">hook_tag</span>&#160;parameter (<a href="#s3.4.9">section 3.4.9</a>) or <span class="term">$spec</span>&#160;to enforce finer checks.<br />
+<br />
+&#160; * &#160;The attributes, deprecated (which can be transformed too) or not, that it supports are largely those that are in the specs. Only a few of the proprietary attributes are supported.<br />
+<br />
+&#160; * &#160;Except for contained URLs and dynamic expressions (also optional), htmLawed does not check CSS style property values. Admins should look at using the <span class="term">hook_tag</span>&#160;parameter (<a href="#s3.4.9">section 3.4.9</a>) or <span class="term">$spec</span>&#160;for finer checks. Perhaps the best option is to disallow <span class="term">style</span>&#160;but allow <span class="term">class</span>&#160;attributes with the right <span class="term">oneof</span>&#160;or <span class="term">match</span>&#160;values for <span class="term">class</span>, and have the various class style properties in <span class="term">.css</span>&#160;CSS stylesheet files.<br />
+<br />
+&#160; * &#160;htmLawed does not parse emoticons, decode <em>BBcode</em>, or <em>wikify</em>, auto-converting text to proper HTML. Similarly, it won't convert line-breaks to <span class="term">br</span>&#160;elements. Such functions are beyond its purview. Admins should use other code to pre- or post-process the input for such purposes.<br />
+<br />
+&#160; * &#160;htmLawed cannot be used to have links force-opened in new windows (by auto-adding appropriate <span class="term">target</span>&#160;and <span class="term">onclick</span>&#160;attributes to <span class="term">a</span>). Admins should look at Javascript-based DOM-modifying solutions for this. Admins may also be able to use a custom hook function to enforce such checks (<span class="term">hook_tag</span>&#160;parameter; see <a href="#s3.4.9">section 3.4.9</a>).<br />
+<br />
+&#160; * &#160;Nesting-based checks are not possible. E.g., one cannot disallow <span class="term">p</span>&#160;elements specifically inside <span class="term">td</span>&#160;while permitting it elsewhere. Admins may be able to use a custom hook function to enforce such checks (<span class="term">hook_tag</span>&#160;parameter; see <a href="#s3.4.9">section 3.4.9</a>).<br />
+<br />
+&#160; * &#160;Except for optionally converting absolute or relative URLs to the other type, htmLawed will not alter URLs (e.g., to change the value of query strings or to convert <span class="term">http</span>&#160;to <span class="term">https</span>. Having absolute URLs may be a standard-requirement, e.g., when HTML is embedded in email messages, whereas altering URLs for other purposes is beyond htmLawed's goals. Admins may be able to use a custom hook function to enforce such checks (<span class="term">hook_tag</span>&#160;parameter; see <a href="#s3.4.9">section 3.4.9</a>).<br />
+<br />
+&#160; * &#160;Pairs of opening and closing tags that do not enclose any content (like <span class="term">&lt;em&gt;&lt;/em&gt;</span>) are not removed. This may be against the standard specs for certain elements (e.g., <span class="term">table</span>). However, presence of such standard-incompliant code will not break the display or layout of content. Admins can also use simple regex-based code to filter out such code.<br />
+<br />
+&#160; * &#160;htmLawed does not check for certain element orderings described in the standard specs (e.g., in a <span class="term">table</span>, <span class="term">tbody</span>&#160;is allowed before <span class="term">tfoot</span>). Admins may be able to use a custom hook function to enforce such checks (<span class="term">hook_tag</span>&#160;parameter; see <a href="#s3.4.9">section 3.4.9</a>).<br />
+<br />
+&#160; * &#160;htmLawed does not check the number of nested elements. E.g., it will allow two <span class="term">caption</span>&#160;elements in a <span class="term">table</span>&#160;element, illegal as per the specs. Admins may be able to use a custom hook function to enforce such checks (<span class="term">hook_tag</span>&#160;parameter; see <a href="#s3.4.9">section 3.4.9</a>).<br />
+<br />
+&#160; * &#160;htmLawed might convert certain entities to actual characters and remove backslashes and CSS comment-markers (<span class="term">/&#42;</span>) in <span class="term">style</span>&#160;attribute values in order to detect malicious HTML like crafted IE-specific dynamic expressions like <span class="term">&amp;#101;xpression...</span>. If this is too harsh, admins can allow CSS expressions through htmLawed core but then use a custom function through the <span class="term">hook_tag</span>&#160;parameter (<a href="#s3.4.9">section 3.4.9</a>) to more specifically identify CSS expressions in the <span class="term">style</span>&#160;attribute values. Also, using <span class="term">$config["style_pass"]</span>, it is possible to have htmLawed pass <span class="term">style</span>&#160;attribute values without even looking at them (<a href="#s3.4.8">section 3.4.8</a>).<br />
+<br />
+&#160; * &#160;htmLawed does not correct certain possible attribute-based security vulnerabilities (e.g., <span class="term">&lt;a href="http&#58;//x%22+style=%22background-image&#58;xss"&gt;x&lt;/a&gt;</span>). These arise when browsers mis-identify markup in <em>escaped</em>&#160;text, defeating the very purpose of escaping text (a bad browser will read the given example as <span class="term">&lt;a href="http&#58;//x" style="background-image&#58;xss"&gt;x&lt;/a&gt;</span>).<br />
+<br />
+&#160; * &#160;Because of poor Unicode support in PHP, htmLawed does not remove the <em>high value</em>&#160;HTML-invalid characters with multi-byte code-points. Such characters however are extremely unlikely to be in the input. (see <a href="#s3.1">section 3.1</a>).<br />
+<br />
+&#160; * &#160;htmLawed does not check or correct the character encoding of the input it receives. In conjunction with permitting circumstances such as when the character encoding is left undefined through HTTP headers or HTML <span class="term">meta</span>&#160;tags, this can permit an exploit (like Google's UTF-7/XSS vulnerability of the past).<br />
+<br />
+&#160; * &#160;Like any script using PHP's PCRE regex functions, PHP setup-specific low PCRE limit values can cause htmLawed to at least partially fail with very long input texts.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s2.9" id="s2.9"></a><span class="item-no">2.9</span>&#160; Examples of usage
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Safest, allowing only <em>safe</em>&#160;HTML markup --<br />
+<br />
+
+<code class="code">&#160; &#160; $config = array(&#39;safe&#39;=&gt;1);</code>
+<br />
+
+<code class="code">&#160; &#160; $out = htmLawed($in);</code>
+<br />
+<br />
+&#160; Simplest, allowing all valid HTML markup except <span class="term">javascript&#58;</span>&#160;--<br />
+<br />
+
+<code class="code">&#160; &#160; $out = htmLawed($in);</code>
+<br />
+<br />
+&#160; Allowing all valid HTML markup including <span class="term">javascript&#58;</span>&#160;--<br />
+<br />
+
+<code class="code">&#160; &#160; $config = array(&#39;schemes&#39;=&gt;&#39;&#42;&#58;&#42;&#39;);</code>
+<br />
+
+<code class="code">&#160; &#160; $out = htmLawed($in, $config);</code>
+<br />
+<br />
+&#160; Allowing only <span class="term">safe</span>&#160;HTML and the elements <span class="term">a</span>, <span class="term">em</span>, and <span class="term">strong</span>&#160;--<br />
+<br />
+
+<code class="code">&#160; &#160; $config = array(&#39;safe&#39;=&gt;1, &#39;elements&#39;=&gt;&#39;a, em, strong&#39;);</code>
+<br />
+
+<code class="code">&#160; &#160; $out = htmLawed($in, $config);</code>
+<br />
+<br />
+&#160; Not allowing elements <span class="term">script</span>&#160;and <span class="term">object</span>&#160;--<br />
+<br />
+
+<code class="code">&#160; &#160; $config = array(&#39;elements&#39;=&gt;&#39;&#42; -script -object&#39;);</code>
+<br />
+
+<code class="code">&#160; &#160; $out = htmLawed($in, $config);</code>
+<br />
+<br />
+&#160; Not allowing attributes <span class="term">id</span>&#160;and <span class="term">style</span>&#160;--<br />
+<br />
+
+<code class="code">&#160; &#160; $config = array(&#39;deny_attribute&#39;=&gt;&#39;id, style&#39;);</code>
+<br />
+
+<code class="code">&#160; &#160; $out = htmLawed($in, $config);</code>
+<br />
+<br />
+&#160; Permitting only attributes <span class="term">title</span>&#160;and <span class="term">href</span>&#160;--<br />
+<br />
+
+<code class="code">&#160; &#160; $config = array(&#39;deny_attribute&#39;=&gt;&#39;&#42; -title -href&#39;);</code>
+<br />
+
+<code class="code">&#160; &#160; $out = htmLawed($in, $config);</code>
+<br />
+<br />
+&#160; Remove bad/disallowed tags altogether instead of converting them to entities --<br />
+<br />
+
+<code class="code">&#160; &#160; $config = array(&#39;keep_bad&#39;=&gt;0);</code>
+<br />
+
+<code class="code">&#160; &#160; $out = htmLawed($in, $config);</code>
+<br />
+<br />
+&#160; Allowing attribute <span class="term">title</span>&#160;only in <span class="term">a</span>&#160;and not allowing attributes <span class="term">id</span>, <span class="term">style</span>, or scriptable <em>on*</em>&#160;attributes like <span class="term">onclick</span>&#160;--<br />
+<br />
+
+<code class="code">&#160; &#160; $config = array(&#39;deny_attribute&#39;=&gt;&#39;title, id, style, on&#42;&#39;);</code>
+<br />
+
+<code class="code">&#160; &#160; $spec = &#39;a=title&#39;;</code>
+<br />
+
+<code class="code">&#160; &#160; $out = htmLawed($in, $config, $spec);</code>
+<br />
+<br />
+&#160; Some case-studies are presented below.<br />
+<br />
+&#160; <strong>1.</strong>&#160;A blog administrator wants to allow only <span class="term">a</span>, <span class="term">em</span>, <span class="term">strike</span>, <span class="term">strong</span>&#160;and <span class="term">u</span>&#160;in comments, but needs <span class="term">strike</span>&#160;and <span class="term">u</span>&#160;transformed to <span class="term">span</span>&#160;for better XHTML 1-strict compliance, and, he wants the <span class="term">a</span>&#160;links to be to <span class="term">http</span>&#160;or <span class="term">https</span>&#160;resources:<br />
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($in, array(&#39;elements&#39;=&gt;&#39;a, em, strike, strong, u&#39;, &#39;make_tag_strict&#39;=&gt;1, &#39;safe&#39;=&gt;1, &#39;schemes&#39;=&gt;&#39;&#42;&#58;http, https&#39;), &#39;a=href&#39;);</code>
+<br />
+<br />
+&#160; <strong>2.</strong>&#160;An author uses a custom-made web application to load content on his web-site. He is the only one using that application and the content he generates has all types of HTML, including scripts. The web application uses htmLawed primarily as a tool to correct errors that creep in while writing HTML and to take care of the occasional <em>bad</em>&#160;characters in copy-paste text introduced by Microsoft Office. The web application provides a preview before submitted input is added to the content. For the previewing process, htmLawed is set up as follows:<br />
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($in, array(&#39;css_expression&#39;=&gt;1, &#39;keep_bad&#39;=&gt;1, &#39;make_tag_strict&#39;=&gt;1, &#39;schemes&#39;=&gt;&#39;&#42;&#58;&#42;&#39;, &#39;valid_xhtml&#39;=&gt;1));</code>
+<br />
+<br />
+&#160; For the final submission process, <span class="term">keep_bad</span>&#160;is set to <span class="term">6</span>. A value of <span class="term">1</span>&#160;for the preview process allows the author to note and correct any HTML mistake without losing any of the typed text.<br />
+<br />
+&#160; <strong>3.</strong>&#160;A data-miner is scraping information in a specific table of similar web-pages and is collating the data rows, and uses htmLawed to reduce unnecessary markup and white-spaces:<br />
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($in, array(&#39;elements&#39;=&gt;&#39;tr, td&#39;, &#39;tidy&#39;=&gt;-1), &#39;tr, td =&#39;);</code>
+<br />
+
+</div>
+</div>
+<div class="section"><h2>
+<a name="s3" id="s3"></a><span class="item-no">3</span>&#160; Details
+</h2><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<div class="sub-section"><h3>
+<a name="s3.1" id="s3.1"></a><span class="item-no">3.1</span>&#160; Invalid/dangerous characters
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Valid characters (more correctly, their code-points) in HTML or XML are, hexadecimally, <span class="term">9</span>, <span class="term">a</span>, <span class="term">d</span>, <span class="term">20</span>&#160;to <span class="term">d7ff</span>, and <span class="term">e000</span>&#160;to <span class="term">10ffff</span>, except <span class="term">fffe</span>&#160;and <span class="term">ffff</span>&#160;(decimally, <span class="term">9</span>, <span class="term">10</span>, <span class="term">13</span>, <span class="term">32</span>&#160;to <span class="term">55295</span>, and <span class="term">57344</span>&#160;to <span class="term">1114111</span>, except <span class="term">65534</span>&#160;and <span class="term">65535</span>). htmLawed removes the invalid characters <span class="term">0</span>&#160;to <span class="term">8</span>, <span class="term">b</span>, <span class="term">c</span>, and <span class="term">e</span>&#160;to <span class="term">1f</span>.<br />
+<br />
+&#160; Because of PHP's poor native support for multi-byte characters, htmLawed cannot check for the remaining invalid code-points. However, for various reasons, it is very unlikely for any of those characters to be in the input.<br />
+<br />
+&#160; Characters that are discouraged (see <a href="#s5.1">section 5.1</a>) but not invalid are not removed by htmLawed.<br />
+<br />
+&#160; It (function <span class="term">hl_tag()</span>) also replaces the potentially dangerous (in some Mozilla [Firefox] and Opera browsers) soft-hyphen character (code-point, hexadecimally, <span class="term">ad</span>, or decimally, <span class="term">173</span>) in attribute values with spaces. Where required, the characters <span class="term">&lt;</span>, <span class="term">&gt;</span>, <span class="term">&amp;</span>, and <span class="term">"</span>&#160;are converted to entities.<br />
+<br />
+&#160; With <span class="term">$config["clean_ms_char"]</span>&#160;set as <span class="term">1</span>&#160;or <span class="term">2</span>, many of the discouraged characters (decimal code-points <span class="term">127</span>&#160;to <span class="term">159</span>&#160;except <span class="term">133</span>) that many Microsoft applications incorrectly use (as per the <span class="term">Windows 1252</span>&#160;[<span class="term">Cp-1252</span>] or a similar encoding system), and the character for decimal code-point <span class="term">133</span>, are converted to appropriate decimal numerical entities (or removed for a few cases)-- see appendix in <a href="#s5.4">section 5.4</a>. This can help avoid some display issues arising from copying-pasting of content.<br />
+<br />
+&#160; With <span class="term">$config["clean_ms_char"]</span>&#160;set as <span class="term">2</span>, characters for the hexadecimal code-points <span class="term">82</span>, <span class="term">91</span>, and <span class="term">92</span>&#160;(for special single-quotes), and <span class="term">84</span>, <span class="term">93</span>, and <span class="term">94</span>&#160;(for special double-quotes) are converted to ordinary single and double quotes respectively and not to entities.<br />
+<br />
+&#160; The character values are replaced with entities/characters and not character values referred to by the entities/characters to keep this task independent of the character-encoding of input text.<br />
+<br />
+&#160; The <span class="term">$config["clean_ms_char"]</span>&#160;parameter should not be used if authors do not copy-paste Microsoft-created text, or if the input text is not believed to use the <span class="term">Windows 1252</span>&#160;(<span class="term">Cp-1252</span>) or a similar encoding like <span class="term">Cp-1251</span>. Further, the input form and the web-pages displaying it or its content should have the character encoding appropriately marked-up.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.2" id="s3.2"></a><span class="item-no">3.2</span>&#160; Character references/entities
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Valid character entities take the form <span class="term">&amp;&#42;;</span>&#160;where <span class="term">&#42;</span>&#160;is <span class="term">#x</span>&#160;followed by a hexadecimal number (hexadecimal numeric entity; like <span class="term">&amp;#xA0;</span>&#160;for non-breaking space), or alphanumeric like <span class="term">gt</span>&#160;(external or named entity; like <span class="term">&amp;nbsp;</span>&#160;for non-breaking space), or <span class="term">#</span>&#160;followed by a number (decimal numeric entity; like <span class="term">&amp;#160;</span>&#160;for non-breaking space). Character entities referring to the soft-hyphen character (the <span class="term">&amp;shy;</span>&#160;or <span class="term">\xad</span>&#160;character; hexadecimal code-point <span class="term">ad</span>&#160;[decimal <span class="term">173</span>]) in URL-accepting attribute values are always replaced with spaces; soft-hyphens in attribute values introduce vulnerabilities in some older versions of the Opera and Mozilla [Firefox] browsers.<br />
+<br />
+&#160; htmLawed (function <span class="term">hl_ent()</span>):<br />
+<br />
+&#160; * &#160;Neutralizes entities with multiple leading zeroes or missing semi-colons (potentially dangerous)<br />
+<br />
+&#160; * &#160;Lowercases the <span class="term">X</span>&#160;(for XML-compliance) and <span class="term">A-F</span>&#160;of hexadecimal numeric entities<br />
+<br />
+&#160; * &#160;Neutralizes entities referring to characters that are HTML-invalid (see <a href="#s3.1">section 3.1</a>)<br />
+<br />
+&#160; * &#160;Neutralizes entities referring to characters that are HTML-discouraged (code-points, hexadecimally, <span class="term">7f</span>&#160;to <span class="term">84</span>, <span class="term">86</span>&#160;to <span class="term">9f</span>, and <span class="term">fdd0</span>&#160;to <span class="term">fddf</span>, or decimally, <span class="term">127</span>&#160;to <span class="term">132</span>, <span class="term">134</span>&#160;to <span class="term">159</span>, and <span class="term">64991</span>&#160;to <span class="term">64976</span>). Entities referring to the remaining discouraged characters (see <a href="#s5.1">section 5.1</a>&#160;for a full list) are let through.<br />
+<br />
+&#160; * &#160;Neutralizes named entities that are not in the specs.<br />
+<br />
+&#160; * &#160;Optionally converts valid HTML-specific named entities except <span class="term">&amp;gt;</span>, <span class="term">&amp;lt;</span>, <span class="term">&amp;quot;</span>, and <span class="term">&amp;amp;</span>&#160;to decimal numeric ones (hexadecimal if $config["hexdec_entity"] is <span class="term">2</span>) for generic XML-compliance. For this, <span class="term">$config["named_entity"]</span>&#160;should be <span class="term">1</span>.<br />
+<br />
+&#160; * &#160;Optionally converts hexadecimal numeric entities to the more widely supported decimal ones. For this, <span class="term">$config["hexdec_entity"]</span>&#160;should be <span class="term">0</span>.<br />
+<br />
+&#160; * &#160;Optionally converts decimal numeric entities to the hexadecimal ones. For this, <span class="term">$config["hexdec_entity"]</span>&#160;should be <span class="term">2</span>.<br />
+<br />
+&#160; <em>Neutralization</em>&#160;refers to the <em>entitification</em>&#160;of <span class="term">&amp;</span>&#160;to <span class="term">&amp;amp;</span>.<br />
+<br />
+&#160; <strong>Note</strong>: htmLawed does not convert entities to the actual characters represented by them; one can pass the htmLawed output through PHP's <span class="term">html_entity_decode</span>&#160;<a href="http://www.php.net/html_entity_decode">function</a>&#160;for that.<br />
+<br />
+&#160; <strong>Note</strong>: If <span class="term">$config["and_mark"]</span>&#160;is set, and set to a value other than <span class="term">0</span>, then the <span class="term">&amp;</span>&#160;characters in the original input are replaced with the control character for the hexadecimal code-point <span class="term">6</span>&#160;(<span class="term">\x06</span>; <span class="term">&amp;</span>&#160;characters introduced by htmLawed, e.g., after converting <span class="term">&lt;</span>&#160;to <span class="term">&amp;lt;</span>, are not affected). This allows one to distinguish, say, an <span class="term">&amp;gt;</span>&#160;introduced by htmLawed and an <span class="term">&amp;gt;</span>&#160;put in by the input writer, and can be helpful in further processing of the htmLawed-processed text (e.g., to identify the character sequence <span class="term">o(&gt;&lt;)o</span>&#160;to generate an emoticon image). When this feature is active, admins should ensure that the htmLawed output is not directly used in web pages or XML documents as the presence of the <span class="term">\x06</span>&#160;can break documents. Before use in such documents, and preferably before any storage, any remaining <span class="term">\x06</span>&#160;should be changed back to <span class="term">&amp;</span>, e.g., with:<br />
+<br />
+
+<code class="code">&#160; &#160; $final = str_replace("\x06", &#39;&amp;&#39;, $prelim);</code>
+<br />
+<br />
+&#160; Also, see <a href="#s3.9">section 3.9</a>.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.3" id="s3.3"></a><span class="item-no">3.3</span>&#160; HTML elements
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed can be configured to allow only certain HTML elements (tags) in the input. Disallowed elements (just tag-content, and not element-content), based on <span class="term">$config["keep_bad"]</span>, are either <em>neutralized</em>&#160;(converted to plain text by entitification of <span class="term">&lt;</span>&#160;and <span class="term">&gt;</span>) or removed.<br />
+<br />
+&#160; E.g., with only <span class="term">em</span>&#160;permitted:<br />
+<br />
+&#160; Input:<br />
+<br />
+
+<code class="code">&#160; &#160; &#160; &lt;em&gt;My&lt;/em&gt; website is &lt;a href="http&#58;//a.com&gt;a.com&lt;/a&gt;.</code>
+<br />
+<br />
+&#160; Output, with <span class="term">$config["keep_bad"] = 0</span>:<br />
+<br />
+
+<code class="code">&#160; &#160; &#160; &lt;em&gt;My&lt;/em&gt; website is a.com.</code>
+<br />
+<br />
+&#160; Output, with <span class="term">$config["keep_bad"]</span>&#160;not <span class="term">0</span>:<br />
+<br />
+
+<code class="code">&#160; &#160; &#160; &lt;em&gt;My&lt;/em&gt; website is &amp;lt;a href=""&amp;gt;a.com&amp;lt;/a&amp;gt;.</code>
+<br />
+<br />
+&#160; See <a href="#s3.3.3">section 3.3.3</a>&#160;for differences between the various non-zero <span class="term">$config["keep_bad"]</span>&#160;values.<br />
+<br />
+&#160; htmLawed by default permits these 86 elements:<br />
+<br />
+
+<code class="code">&#160; &#160; a, abbr, acronym, address, applet, area, b, bdo, big, blockquote, br, button, caption, center, cite, code, col, colgroup, dd, del, dfn, dir, div, dl, dt, em, embed, fieldset, font, form, h1, h2, h3, h4, h5, h6, hr, i, iframe, img, input, ins, isindex, kbd, label, legend, li, map, menu, noscript, object, ol, optgroup, option, p, param, pre, q, rb, rbc, rp, rt, rtc, ruby, s, samp, script, select, small, span, strike, strong, sub, sup, table, tbody, td, textarea, tfoot, th, thead, tr, tt, u, ul, var</code>
+<br />
+<br />
+&#160; Except for <span class="term">embed</span>&#160;(included because of its wide-spread use) and the Ruby elements (<span class="term">rb</span>, <span class="term">rbc</span>, <span class="term">rp</span>, <span class="term">rt</span>, <span class="term">rtc</span>, <span class="term">ruby</span>; part of XHTML 1.1), these are all the elements in the HTML 4/XHTML 1 specs. Strict-specific specs. exclude <span class="term">center</span>, <span class="term">dir</span>, <span class="term">font</span>, <span class="term">isindex</span>, <span class="term">menu</span>, <span class="term">s</span>, <span class="term">strike</span>, and <span class="term">u</span>.<br />
+<br />
+&#160; With <span class="term">$config["safe"] = 1</span>, the default set will exclude <span class="term">applet</span>, <span class="term">embed</span>, <span class="term">iframe</span>, <span class="term">object</span>&#160;and <span class="term">script</span>; see <a href="#s3.6">section 3.6</a>.<br />
+<br />
+&#160; When <span class="term">$config["elements"]</span>, which specifies allowed elements, is <em>properly</em>&#160;defined, and neither empty nor set to <span class="term">0</span>&#160;or <span class="term">&#42;</span>, the default set is not used. To have elements added to or removed from the default set, a <span class="term">+/-</span>&#160;notation is used. E.g., <span class="term">&#42;-script-object</span>&#160;implies that only <span class="term">script</span>&#160;and <span class="term">object</span>&#160;are disallowed, whereas <span class="term">&#42;+embed</span>&#160;means that <span class="term">noembed</span>&#160;is also allowed. Elements can also be specified as comma separated names. E.g., <span class="term">a, b, i</span>&#160;means only <span class="term">a</span>, <span class="term">b</span>&#160;and <span class="term">i</span>&#160;are permitted. In this notation, <span class="term">&#42;</span>, <span class="term">+</span>&#160;and <span class="term">-</span>&#160;have no significance and can actually cause a mis-reading.<br />
+<br />
+&#160; Some more examples of <span class="term">$config["elements"]</span>&#160;values indicating permitted elements (note that empty spaces are liberally allowed for clarity):<br />
+<br />
+&#160; * &#160;<span class="term">a, blockquote, code, em, strong</span>&#160;-- only <span class="term">a</span>, <span class="term">blockquote</span>, <span class="term">code</span>, <span class="term">em</span>, and <span class="term">strong</span><br />
+&#160; * &#160;<span class="term">&#42;-script</span>&#160;-- all excluding <span class="term">script</span><br />
+&#160; * &#160;<span class="term">&#42; -center -dir -font -isindex -menu -s -strike -u</span>&#160;-- only XHTML-Strict elements<br />
+&#160; * &#160;<span class="term">&#42;+noembed-script</span>&#160;-- all including <span class="term">noembed</span>&#160;excluding <span class="term">script</span><br />
+<br />
+&#160; Some mis-usages (and the resulting permitted elements) that can be avoided:<br />
+<br />
+&#160; * &#160;<span class="term">-&#42;</span>&#160;-- none; instead of htmLawed, one might just use, e.g., the <span class="term">htmlspecialchars()</span>&#160;PHP function<br />
+&#160; * &#160;<span class="term">&#42;, -script</span>&#160;-- all except <span class="term">script</span>; admin probably meant <span class="term">&#42;-script</span><br />
+&#160; * &#160;<span class="term">-&#42;, a, em, strong</span>&#160;-- all; admin probably meant <span class="term">a, em, strong</span><br />
+&#160; * &#160;<span class="term">&#42;</span>&#160;-- all; admin need not have set <span class="term">elements</span><br />
+&#160; * &#160;<span class="term">&#42;-form+form</span>&#160;-- all; a <span class="term">+</span>&#160;will always over-ride any <span class="term">-</span><br />
+&#160; * &#160;<span class="term">&#42;, noembed</span>&#160;-- only <span class="term">noembed</span>; admin probably meant <span class="term">&#42;+noembed</span><br />
+&#160; * &#160;<span class="term">a, +b, i</span>&#160;-- only <span class="term">a</span>&#160;and <span class="term">i</span>; admin probably meant <span class="term">a, b, i</span><br />
+<br />
+&#160; Basically, when using the <span class="term">+/-</span>&#160;notation, commas (<span class="term">,</span>) should not be used, and vice versa, and <span class="term">&#42;</span>&#160;should be used with the former but not the latter.<br />
+<br />
+&#160; <strong>Note</strong>: Even if an element that is not in the default set is allowed through <span class="term">$config["elements"]</span>, like <span class="term">noembed</span>&#160;in the last example, it will eventually be removed during tag balancing unless such balancing is turned off (<span class="term">$config["balance"]</span>&#160;set to <span class="term">0</span>). Currently, the only way around this, which actually is simple, is to edit the various arrays in the function <span class="term">hl_bal()</span>&#160;to accommodate the element and its nesting properties.<br />
+<br />
+&#160; <strong>A possibly second way to specify allowed elements</strong>&#160;is to set <span class="term">$config["parent"]</span>&#160;to an element name that supposedly will hold the input, and to set <span class="term">$config["balance"]</span>&#160;to <span class="term">1</span>. During tag balancing (see <a href="#s3.3.3">section 3.3.3</a>), all elements that cannot legally nest inside the parent element will be removed. The parent element is auto-reset to <span class="term">div</span>&#160;if <span class="term">$config["parent"]</span>&#160;is empty, <span class="term">body</span>, or an element not in htmLawed's default set of 86 elements.<br />
+<br />
+&#160; <em>Tag transformation</em>&#160;is possible for improving XHTML-Strict compliance -- most of the deprecated elements are removed or converted to valid XHTML-Strict ones; see <a href="#s3.3.2">section 3.3.2</a>.<br />
+
+<div class="sub-sub-section"><h4>
+<a name="s3.3.1" id="s3.3.1"></a><span class="item-no">3.3.1</span>&#160; Handling of comments and CDATA sections
+</h4><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; <span class="term">CDATA</span>&#160;sections have the format <span class="term">&lt;![CDATA[...anything but not "]]&gt;"...]]&gt;</span>, and HTML comments, <span class="term">&lt;!--...anything but not "--&gt;"... --&gt;</span>. Neither HTML comments nor <span class="term">CDATA</span>&#160;sections can reside inside tags. HTML comments can exist anywhere else, but <span class="term">CDATA</span>&#160;sections can exist only where plain text is allowed (e.g., immediately inside <span class="term">td</span>&#160;element content but not immediately inside <span class="term">tr</span>&#160;element content).<br />
+<br />
+&#160; htmLawed (function <span class="term">hl_cmtcd()</span>) handles HTML comments or <span class="term">CDATA</span>&#160;sections depending on the values of <span class="term">$config["comment"]</span>&#160;or <span class="term">$config["cdata"]</span>. If <span class="term">0</span>, such markup is not looked for and the text is processed like plain text. If <span class="term">1</span>, it is removed completely. If <span class="term">2</span>, it is preserved but any <span class="term">&lt;</span>, <span class="term">&gt;</span>&#160;and <span class="term">&amp;</span>&#160;inside are changed to entities. If <span class="term">3</span>, they are left as such.<br />
+<br />
+&#160; Note that for the last two cases, HTML comments and <span class="term">CDATA</span>&#160;sections will always be removed from tag content (function <span class="term">hl_tag()</span>).<br />
+<br />
+&#160; Examples:<br />
+<br />
+&#160; Input:<br />
+
+<code class="code">&#160; &#160; &lt;!-- home link --&gt;&lt;a href="home.htm"&gt;&lt;![CDATA[x=&amp;y]]&gt;Home&lt;/a&gt;</code>
+<br />
+&#160; Output (<span class="term">$config["comment"] = 0, $config["cdata"] = 2</span>):<br />
+
+<code class="code">&#160; &#160; &amp;lt;-- home link --&amp;gt;&lt;a href="home.htm"&gt;&lt;![CDATA[x=&amp;amp;y]]&gt;Home&lt;/a&gt;</code>
+<br />
+&#160; Output (<span class="term">$config["comment"] = 1, $config["cdata"] = 2</span>):<br />
+
+<code class="code">&#160; &#160; &lt;a href="home.htm"&gt;&lt;![CDATA[x=&amp;amp;y]]&gt;Home&lt;/a&gt;</code>
+<br />
+&#160; Output (<span class="term">$config["comment"] = 2, $config["cdata"] = 2</span>):<br />
+
+<code class="code">&#160; &#160; &lt;!-- home link --&gt;&lt;a href="home.htm"&gt;&lt;![CDATA[x=&amp;amp;y]]&gt;Home&lt;/a&gt;</code>
+<br />
+&#160; Output (<span class="term">$config["comment"] = 2, $config["cdata"] = 1</span>):<br />
+
+<code class="code">&#160; &#160; &lt;!-- home link --&gt;&lt;a href="home.htm"&gt;Home&lt;/a&gt;</code>
+<br />
+&#160; Output (<span class="term">$config["comment"] = 3, $config["cdata"] = 3</span>):<br />
+
+<code class="code">&#160; &#160; &lt;!-- home link --&gt;&lt;a href="home.htm"&gt;&lt;![CDATA[x=&amp;y]]&gt;Home&lt;/a&gt;</code>
+<br />
+<br />
+&#160; For standard-compliance, comments are given the form <span class="term">&lt;!--comment --&gt;</span>, and any <span class="term">--</span>&#160;in the content is made <span class="term">-</span>.<br />
+<br />
+&#160; When <span class="term">$config["safe"] = 1</span>, CDATA sections and comments are considered plain text unless <span class="term">$config["comment"]</span>&#160;or <span class="term">$config["cdata"]</span>&#160;is explicitly specified; see <a href="#s3.6">section 3.6</a>.<br />
+
+</div>
+<div class="sub-sub-section"><h4>
+<a name="s3.3.2" id="s3.3.2"></a><span class="item-no">3.3.2</span>&#160; Tag-transformation for better XHTML-Strict
+</h4><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; If <span class="term">$config["make_tag_strict"]</span>&#160;is set and not <span class="term">0</span>, following non-XHTML-Strict elements (and attributes), even if admin-permitted, are mutated as indicated (element content remains intact; function <span class="term">hl_tag2()</span>):<br />
+<br />
+&#160; * &#160;applet - (based on <span class="term">$config["make_tag_strict"]</span>, unchanged (<span class="term">1</span>) or removed (<span class="term">2</span>))<br />
+&#160; * &#160;center - <span class="term">div style="text-align&#58; center;"</span><br />
+&#160; * &#160;dir - <span class="term">ul</span><br />
+&#160; * &#160;embed - (based on <span class="term">$config["make_tag_strict"]</span>, unchanged (<span class="term">1</span>) or removed (<span class="term">2</span>))<br />
+&#160; * &#160;font (face, size, color) - &#160; &#160;<span class="term">span style="font-family&#58; ; font-size&#58; ; color&#58; ;"</span>&#160;(size transformation <a href="http://style.cleverchimp.com/font_size_intervals/altintervals.html">reference</a>)<br />
+&#160; * &#160;isindex - (based on <span class="term">$config["make_tag_strict"]</span>, unchanged (<span class="term">1</span>) or removed (<span class="term">2</span>))<br />
+&#160; * &#160;menu - <span class="term">ul</span><br />
+&#160; * &#160;s - <span class="term">span style="text-decoration&#58; line-through;"</span><br />
+&#160; * &#160;strike - <span class="term">span style="text-decoration&#58; line-through;"</span><br />
+&#160; * &#160;u - <span class="term">span style="text-decoration&#58; underline;"</span><br />
+<br />
+&#160; For an element with a pre-existing <span class="term">style</span>&#160;attribute value, the extra style properties are appended.<br />
+<br />
+&#160; Example input:<br />
+<br />
+
+<code class="code">&#160; &#160; &lt;center&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160;The PHP &lt;s&gt;software&lt;/s&gt; script used for this &lt;strike&gt;web-page&lt;/strike&gt; web-page is &lt;font style="font-weight&#58; bold " face=arial size=&#39;+3&#39; color &#160; = &#160;"red &#160;"&gt;htmLawedTest.php&lt;/font&gt;, from &lt;u style= &#39;color&#58;green&#39;&gt;PHP Labware&lt;/u&gt;.</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;/center&gt;</code>
+<br />
+<br />
+&#160; The output:<br />
+<br />
+
+<code class="code">&#160; &#160; &lt;div style="text-align&#58; center;"&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160;The PHP &lt;span style="text-decoration&#58; line-through;"&gt;software&lt;/span&gt; script used for this &lt;span style="text-decoration&#58; line-through;"&gt;web-page&lt;/span&gt; web-page is &lt;span style="font-weight&#58; bold; font-family&#58; arial; color&#58; red; font-size&#58; 200%;"&gt;htmLawedTest.php&lt;/span&gt;, from &lt;span style="color&#58;green; text-decoration&#58; underline;"&gt;PHP Labware&lt;/span&gt;.</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;/div&gt;</code>
+<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.3.3" id="s3.3.3"></a><span class="item-no">3.3.3</span>&#160; Tag balancing and proper nesting
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; If <span class="term">$config["balance"]</span>&#160;is set to <span class="term">1</span>, htmLawed (function <span class="term">hl_bal()</span>) checks and corrects the input to have properly balanced tags and legal element content (i.e., any element nesting should be valid, and plain text may be present only in the content of elements that allow them).<br />
+<br />
+&#160; Depending on the value of <span class="term">$config["keep_bad"]</span>&#160;(see <a href="#s2.2">section 2.2</a>&#160;and <a href="#s3.3">section 3.3</a>), illegal content may be removed or neutralized to plain text by converting &lt; and &gt; to entities:<br />
+<br />
+&#160; <span class="term">0</span>&#160;- remove; this option is available only to maintain Kses-compatibility and should not be used otherwise (see <a href="#s2.6">section 2.6</a>)<br />
+&#160; <span class="term">1</span>&#160;- neutralize tags and keep element content<br />
+&#160; <span class="term">2</span>&#160;- remove tags but keep element content<br />
+&#160; <span class="term">3</span>&#160;and <span class="term">4</span>&#160;- like <span class="term">1</span>&#160;and <span class="term">2</span>, but keep element content only if text (<span class="term">pcdata</span>) is valid in parent element as per specs<br />
+&#160; <span class="term">5</span>&#160;and <span class="term">6</span>&#160;- &#160;like <span class="term">3</span>&#160;and <span class="term">4</span>, but line-breaks, tabs and spaces are left<br />
+<br />
+&#160; Example input (disallowing the <span class="term">p</span>&#160;element):<br />
+<br />
+
+<code class="code">&#160; &#160; &lt;&#42;&gt; Pseudo-tags &lt;&#42;&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;xml&gt;Non-HTML tag xml&lt;/xml&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;p&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; Disallowed tag p</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;/p&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;ul&gt;Bad&lt;li&gt;OK&lt;/li&gt;&lt;/ul&gt;</code>
+<br />
+<br />
+&#160; The output with <span class="term">$config["keep_bad"] = 1</span>:<br />
+<br />
+
+<code class="code">&#160; &#160; &amp;lt;&#42;&amp;gt; Pseudo-tags &amp;lt;&#42;&amp;gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &amp;lt;xml&amp;gt;Non-HTML tag xml&amp;lt;/xml&amp;gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &amp;lt;p&amp;gt;</code>
+<br />
+
+<code class="code">&#160; &#160; Disallowed tag p</code>
+<br />
+
+<code class="code">&#160; &#160; &amp;lt;/p&amp;gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;ul&gt;Bad&lt;li&gt;OK&lt;/li&gt;&lt;/ul&gt;</code>
+<br />
+<br />
+&#160; The output with <span class="term">$config["keep_bad"] = 3</span>:<br />
+<br />
+
+<code class="code">&#160; &#160; &amp;lt;&#42;&amp;gt; Pseudo-tags &amp;lt;&#42;&amp;gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &amp;lt;xml&amp;gt;Non-HTML tag xml&amp;lt;/xml&amp;gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &amp;lt;p&amp;gt;</code>
+<br />
+
+<code class="code">&#160; &#160; Disallowed tag p</code>
+<br />
+
+<code class="code">&#160; &#160; &amp;lt;/p&amp;gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;ul&gt;&lt;li&gt;OK&lt;/li&gt;&lt;/ul&gt;</code>
+<br />
+<br />
+&#160; The output with <span class="term">$config["keep_bad"] = 6</span>:<br />
+<br />
+
+<code class="code">&#160; &#160; &amp;lt;&#42;&amp;gt; Pseudo-tags &amp;lt;&#42;&amp;gt;</code>
+<br />
+
+<code class="code">&#160; &#160; Non-HTML tag xml</code>
+<br />
+<br />
+
+<code class="code">&#160; &#160; Disallowed tag p</code>
+<br />
+<br />
+
+<code class="code">&#160; &#160; &lt;ul&gt;&lt;li&gt;OK&lt;/li&gt;&lt;/ul&gt;</code>
+<br />
+<br />
+&#160; An option like <span class="term">1</span>&#160;is useful, e.g., when a writer previews his submission, whereas one like <span class="term">3</span>&#160;is useful before content is finalized and made available to all.<br />
+<br />
+&#160; <strong>Note:</strong>&#160;In the example above, unlike <span class="term">&lt;&#42;&gt;</span>, <span class="term">&lt;xml&gt;</span>&#160;gets considered as a tag (even though there is no HTML element named <span class="term">xml</span>). In general, text matching the regular expression pattern <span class="term">&lt;(/?)([a-zA-Z][a-zA-Z1-6]&#42;)([^&gt;]&#42;?)\s?&gt;</span>&#160;is considered a tag (phrase enclosed by the angled brackets <span class="term">&lt;</span>&#160;and <span class="term">&gt;</span>, and starting [with an optional slash preceding] with an alphanumeric word that starts with an alphabet...).<br />
+<br />
+&#160; Nesting/content rules for each of the 86 elements in htmLawed's default set (see <a href="#s3.3">section 3.3</a>) are defined in function <span class="term">hl_bal()</span>. This means that if a non-standard element besides <span class="term">embed</span>&#160;is being permitted through <span class="term">$config["elements"]</span>, the element's tag content will end up getting removed if <span class="term">$config["balance"]</span>&#160;is set to <span class="term">1</span>.<br />
+<br />
+&#160; Plain text and/or certain elements nested inside <span class="term">blockquote</span>, <span class="term">form</span>, <span class="term">map</span>&#160;and <span class="term">noscript</span>&#160;need to be in block-level elements. This point is often missed during manual writing of HTML code. htmLawed attempts to address this during balancing. E.g., if the parent container is set as <span class="term">form</span>, the input <span class="term">B&#58;&lt;input type="text" value="b" /&gt;C&#58;&lt;input type="text" value="c" /&gt;</span>&#160;is converted to <span class="term">&lt;div&gt;B&#58;&lt;input type="text" value="b" /&gt;C&#58;&lt;input type="text" value="c" /&gt;&lt;/div&gt;</span>.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.3.4" id="s3.3.4"></a><span class="item-no">3.3.4</span>&#160; Elements requiring child elements
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; As per specs, the following elements require legal child elements nested inside them:<br />
+<br />
+
+<code class="code">&#160; &#160; blockquote, dir, dl, form, map, menu, noscript, ol, optgroup, rbc, rtc, ruby, select, table, tbody, tfoot, thead, tr, ul</code>
+<br />
+<br />
+&#160; In some cases, the specs stipulate the number and/or the ordering of the child elements. A <span class="term">table</span>&#160;can have 0 or 1 <span class="term">caption</span>, <span class="term">tbody</span>, <span class="term">tfoot</span>, and <span class="term">thead</span>, but they must be in this order: <span class="term">caption</span>, <span class="term">thead</span>, <span class="term">tfoot</span>, <span class="term">tbody</span>.<br />
+<br />
+&#160; htmLawed currently does not check for conformance to these rules. Note that any non-compliance in this regard will not introduce security vulnerabilities, crash browser applications, or affect the rendering of web-pages.<br />
+<br />
+&#160; With <span class="term">$config["direct_list_nest"]</span>&#160;set to <span class="term">1</span>, htmLawed will allow direct nesting of an <span class="term">ol</span>&#160;or <span class="term">ul</span>&#160;list within another <span class="term">ol</span>&#160;or <span class="term">ul</span>&#160;without requiring the child list to be within an <span class="term">li</span>&#160;of the parent list. While this is not standard-compliant, directly nested lists are rendered properly by almost all browsers. The parameter <span class="term">$config["direct_list_nest"]</span>&#160;has no effect if tag-balancing (<a href="#s3.3.3">section 3.3.3</a>) is turned off.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.3.5" id="s3.3.5"></a><span class="item-no">3.3.5</span>&#160; Beautify or compact HTML
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; By default, htmLawed will neither <em>beautify</em>&#160;HTML code by formatting it with indentations, etc., nor will it make it compact by removing un-needed white-space.(It does always properly white-space tag content.)<br />
+<br />
+&#160; As per the HTML standards, spaces, tabs and line-breaks in web-pages (except those inside <span class="term">pre</span>&#160;elements) are all considered equivalent, and referred to as <em>white-spaces</em>. Browser applications are supposed to consider contiguous white-spaces as just a single space, and to disregard white-spaces trailing opening tags or preceding closing tags. This white-space <em>normalization</em>&#160;allows the use of text/code beautifully formatted with indentations and line-spacings for readability. Such <em>pretty</em>&#160;HTML can, however, increase the size of web-pages, or make the extraction or scraping of plain text cumbersome.<br />
+<br />
+&#160; With the <span class="term">$config</span>&#160;parameter <span class="term">tidy</span>, htmLawed can be used to beautify or compact the input text. Input with just plain text and no HTML markup is also subject to this. Besides <span class="term">pre</span>, the <span class="term">script</span>&#160;and <span class="term">textarea</span>&#160;elements, CDATA sections, and HTML comments are not subjected to the tidying process.<br />
+<br />
+&#160; To <em>compact</em>, use <span class="term">$config["tidy"] = -1</span>; single instances or runs of white-spaces are replaced with a single space, and white-spaces trailing and leading open and closing tags, respectively, are removed.<br />
+<br />
+&#160; To <em>beautify</em>, <span class="term">$config["tidy"]</span>&#160;is set as <span class="term">1</span>, or for customized tidying, as a string like <span class="term">2s2n</span>. The <span class="term">s</span>&#160;or <span class="term">t</span>&#160;character specifies the use of spaces or tabs for indentation. The first and third characters, any of the digits 0-9, specify the number of spaces or tabs per indentation, and any parental lead spacing (extra indenting of the whole block of input text). The <span class="term">r</span>&#160;and <span class="term">n</span>&#160;characters are used to specify line-break characters: <span class="term">n</span>&#160;for <span class="term">\n</span>&#160;(Unix/Mac OS X line-breaks), <span class="term">rn</span>&#160;or <span class="term">nr</span>&#160;for <span class="term">\r\n</span>&#160;(Windows/DOS line-breaks), or <span class="term">r</span>&#160;for <span class="term">\r</span>.<br />
+<br />
+&#160; The <span class="term">$config["tidy"]</span>&#160;value of <span class="term">1</span>&#160;is equivalent to <span class="term">2s0n</span>. Other <span class="term">$config["tidy"]</span>&#160;values are read loosely: a value of <span class="term">4</span>&#160;is equivalent to <span class="term">4s0n</span>; <span class="term">t2</span>, to <span class="term">1t2n</span>; <span class="term">s</span>, to <span class="term">2s0n</span>; <span class="term">2TR</span>, to <span class="term">2t0r</span>; <span class="term">T1</span>, to <span class="term">1t1n</span>; <span class="term">nr3</span>, to <span class="term">3s0nr</span>, and so on. Except in the indentations and line-spacings, runs of white-spaces are replaced with a single space during beautification.<br />
+<br />
+&#160; Input formatting using <span class="term">$config["tidy"]</span>&#160;is not recommended when input text has mixed markup (like HTML + PHP).<br />
+
+</div>
+</div>
+<div class="sub-section"><h3>
+<a name="s3.4" id="s3.4"></a><span class="item-no">3.4</span>&#160; Attributes
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed will only permit attributes described in the HTML specs (including deprecated ones). It also permits some attributes for use with the <span class="term">embed</span>&#160;element (the non-standard <span class="term">embed</span>&#160;element is supported in htmLawed because of its widespread use), and the the <span class="term">xml&#58;space</span>&#160;attribute (valid only in XHTML 1.1). A list of such 111 attributes and the elements they are allowed in is in <a href="#s5.2">section 5.2</a>.<br />
+<br />
+&#160; When <span class="term">$config["deny_attribute"]</span>&#160;is not set, or set to <span class="term">0</span>, or empty (<span class="term">""</span>), all the 111 attributes are permitted. Otherwise, <span class="term">$config["deny_attribute"]</span>&#160;can be set as a list of comma-separated names of the denied attributes. <span class="term">on&#42;</span>&#160;can be used to refer to the group of potentially dangerous, script-accepting attributes: <span class="term">onblur</span>, <span class="term">onchange</span>, <span class="term">onclick</span>, <span class="term">ondblclick</span>, <span class="term">onfocus</span>, <span class="term">onkeydown</span>, <span class="term">onkeypress</span>, <span class="term">onkeyup</span>, <span class="term">onmousedown</span>, <span class="term">onmousemove</span>, <span class="term">onmouseout</span>, <span class="term">onmouseover</span>, <span class="term">onmouseup</span>, <span class="term">onreset</span>, <span class="term">onselect</span>&#160;and <span class="term">onsubmit</span>.<br />
+<br />
+&#160; Note that attributes specified in <span class="term">$config["deny_attribute"]</span>&#160;are denied globally, for all elements. To deny attributes for only specific elements, <span class="term">$spec</span>&#160;(see <a href="#s2.3">section 2.3</a>) can be used. <span class="term">$spec</span>&#160;can also be used to element-specifically permit an attribute otherwise denied through <span class="term">$config["deny_attribute"]</span>.<br />
+<br />
+&#160; With <span class="term">$config["safe"] = 1</span>&#160;(<a href="#s3.6">section 3.6</a>), the <span class="term">on&#42;</span>&#160;attributes are automatically disallowed.<br />
+<br />
+&#160; <strong>Note</strong>: To deny all but a few attributes globally, a simpler way to specify <span class="term">$config["deny_attribute"]</span>&#160;would be to use the notation <span class="term">&#42; -attribute1 -attribute2 ...</span>. Thus, a value of <span class="term">&#42; -title -href</span>&#160;implies that except <span class="term">href</span>&#160;and <span class="term">title</span>&#160;(where allowed as per standards) all other attributes are to be removed. With this notation, the value for the parameter <span class="term">safe</span>&#160;(<a href="#s3.6">section 3.6</a>) will have no effect on <span class="term">deny_attribute</span>.<br />
+<br />
+&#160; htmLawed (function <span class="term">hl_tag()</span>) also:<br />
+<br />
+&#160; * &#160;Lower-cases attribute names<br />
+&#160; * &#160;Removes duplicate attributes (last one stays)<br />
+&#160; * &#160;Gives attributes the form <span class="term">name="value"</span>&#160;and single-spaces them, removing unnecessary white-spacing<br />
+&#160; * &#160;Provides <em>required</em>&#160;attributes (see <a href="#s3.4.1">section 3.4.1</a>)<br />
+&#160; * &#160;Double-quotes values and escapes any <span class="term">"</span>&#160;inside them<br />
+&#160; * &#160;Replaces the possibly dangerous soft-hyphen characters (hexadecimal code-point <span class="term">ad</span>) in the values with spaces<br />
+&#160; * &#160;Allows custom function to additionally filter/modify attribute values (see <a href="#s3.4.9">section 3.4.9</a>)<br />
+
+<div class="sub-sub-section"><h4>
+<a name="s3.4.1" id="s3.4.1"></a><span class="item-no">3.4.1</span>&#160; Auto-addition of XHTML-required attributes
+</h4><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; If indicated attributes for the following elements are found missing, htmLawed (function <span class="term">hl_tag()</span>) will add them (with values same as attribute names unless indicated otherwise below):<br />
+<br />
+&#160; * &#160;area - alt (<span class="term">area</span>)<br />
+&#160; * &#160;area, img - src, alt (<span class="term">image</span>)<br />
+&#160; * &#160;bdo - dir (<span class="term">ltr</span>)<br />
+&#160; * &#160;form - action<br />
+&#160; * &#160;map - name<br />
+&#160; * &#160;optgroup - label<br />
+&#160; * &#160;param - name<br />
+&#160; * &#160;script - type (<span class="term">text/javascript</span>)<br />
+&#160; * &#160;textarea - rows (<span class="term">10</span>), cols (<span class="term">50</span>)<br />
+<br />
+&#160; Additionally, with <span class="term">$config["xml&#58;lang"]</span>&#160;set to <span class="term">1</span>&#160;or <span class="term">2</span>, if the <span class="term">lang</span>&#160;but not the <span class="term">xml&#58;lang</span>&#160;attribute is declared, then the latter is added too, with a value copied from that of <span class="term">lang</span>. This is for better standard-compliance. With <span class="term">$config["xml&#58;lang"]</span>&#160;set to <span class="term">2</span>, the <span class="term">lang</span>&#160;attribute is removed (XHTML 1.1 specs).<br />
+<br />
+&#160; Note that the <span class="term">name</span>&#160;attribute for <span class="term">map</span>, invalid in XHTML 1.1, is also transformed if required -- see <a href="#s3.4.6">section 3.4.6</a>.<br />
+
+</div>
+<div class="sub-sub-section"><h4>
+<a name="s3.4.2" id="s3.4.2"></a><span class="item-no">3.4.2</span>&#160; Duplicate/invalid <span class="term">id</span>&#160;values
+</h4><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; If <span class="term">$config["unique_ids"]</span>&#160;is <span class="term">1</span>, htmLawed (function <span class="term">hl_tag()</span>) removes <span class="term">id</span>&#160;attributes with values that are not XHTML-compliant (must begin with a letter and can contain letters, digits, <span class="term">&#58;</span>, <span class="term">.</span>, <span class="term">-</span>&#160;and <span class="term">_</span>) or duplicate. If <span class="term">$config["unique_ids"]</span>&#160;is a word, any duplicate but otherwise valid value will be appropriately prefixed with the word to ensure its uniqueness. The word should begin with a letter and should contain only letters, numbers, <span class="term">&#58;</span>, <span class="term">.</span>, <span class="term">_</span>&#160;and <span class="term">-</span>.<br />
+<br />
+&#160; Even if multiple inputs need to be filtered (through multiple calls to htmLawed), htmLawed ensures uniqueness of <span class="term">id</span>&#160;values as it uses a global variable (<span class="term">$GLOBALS["hl_Ids"]</span>&#160;array). Further, an admin can restrict the use of certain <span class="term">id</span>&#160;values by presetting this variable before htmLawed is called into use. E.g.:<br />
+<br />
+
+<code class="code">&#160; &#160; $GLOBALS[&#39;hl_Ids&#39;] = array(&#39;top&#39;=&gt;1, &#39;bottom&#39;=&gt;1, &#39;myform&#39;=&gt;1); // id values not allowed in input</code>
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($text); // filter input</code>
+<br />
+
+</div>
+<div class="sub-sub-section"><h4>
+<a name="s3.4.3" id="s3.4.3"></a><span class="item-no">3.4.3</span>&#160; URL schemes (protocols) and scripts in attribute values
+</h4><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed edits attributes that take URLs as values if they are found to contain un-permitted schemes. E.g., if the <span class="term">afp</span>&#160;scheme is not permitted, then <span class="term">&lt;a href="afp&#58;//domain.org"&gt;</span>&#160;becomes <span class="term">&lt;a href="denied&#58;afp&#58;//domain.org"&gt;</span>, and if Javascript is not permitted <span class="term">&lt;a onclick="javascript&#58;xss();"&gt;</span>&#160;becomes <span class="term">&lt;a onclick="denied&#58;javascript&#58;xss();"&gt;</span>.<br />
+<br />
+&#160; By default htmLawed permits these schemes in URLs for the <span class="term">href</span>&#160;attribute:<br />
+<br />
+
+<code class="code">&#160; &#160; aim, feed, file, ftp, gopher, http, https, irc, mailto, news, nntp, sftp, ssh, telnet</code>
+<br />
+<br />
+&#160; Also, only <span class="term">file</span>, <span class="term">http</span>&#160;and <span class="term">https</span>&#160;are permitted in attributes whose names start with <span class="term">o</span>&#160;(like <span class="term">onmouseover</span>), and in these attributes that accept URLs:<br />
+<br />
+
+<code class="code">&#160; &#160; action, cite, classid, codebase, data, href, longdesc, model, pluginspage, pluginurl, src, style, usemap</code>
+<br />
+<br />
+&#160; These default sets are used when <span class="term">$config["schemes"]</span>&#160;is not set (see <a href="#s2.2">section 2.2</a>). To over-ride the defaults, <span class="term">$config["schemes"]</span>&#160;is defined as a string of semi-colon-separated sub-strings of type <span class="term">attribute&#58; comma-separated schemes</span>. E.g., <span class="term">href&#58; mailto, http, https; onclick&#58; javascript; src&#58; http, https</span>. For unspecified attributes, <span class="term">file</span>, <span class="term">http</span>&#160;and <span class="term">https</span>&#160;are permitted. This can be changed by passing schemes for <span class="term">&#42;</span>&#160;in <span class="term">$config["schemes"]</span>. E.g., <span class="term">href&#58; mailto, http, https; &#42;&#58; https, https</span>.<br />
+<br />
+&#160; <span class="term">&#42;</span>&#160;can be put in the list of schemes to permit all protocols. E.g., <span class="term">style&#58; &#42;; img&#58; http, https</span>&#160;results in protocols not being checked in <span class="term">style</span>&#160;attribute values. However, in such cases, any relative-to-absolute URL conversion, or vice versa, (<a href="#s3.4.4">section 3.4.4</a>) is not done.<br />
+<br />
+&#160; Thus, <em>to allow Javascript</em>, one can set <span class="term">$config["schemes"]</span>&#160;as <span class="term">href&#58; mailto, http, https; &#42;&#58; http, https, javascript</span>, or <span class="term">href&#58; mailto, http, https, javascript; &#42;&#58; http, https, javascript</span>, or <span class="term">&#42;&#58; &#42;</span>, and so on.<br />
+<br />
+&#160; As a side-note, one may find <span class="term">style&#58; &#42;</span>&#160;useful as URLs in <span class="term">style</span>&#160;attributes can be specified in a variety of ways, and the patterns that htmLawed uses to identify URLs may mistakenly identify non-URL text.<br />
+<br />
+&#160; <span class="term">!</span>&#160;can be put in the list of schemes to disallow all protocols as well as <em>local</em>&#160;URLs. Thus, with <span class="term">href&#58; http, style&#58; !</span>, '&lt;a href="http://cnn.com" style="background-image: url('local.jpg');"&gt;CNN&lt;/a&gt;' will become '&lt;a href="http://cnn.com" style="background-image: url('denied:local.jpg');"&gt;CNN&lt;/a&gt;'.<br />
+<br />
+&#160; <strong>Note</strong>: If URL-accepting attributes other than those listed above are being allowed, then the scheme will not be checked unless the attribute name contains the string <span class="term">src</span>&#160;(e.g., <span class="term">dynsrc</span>) or starts with <span class="term">o</span>&#160;(e.g., <span class="term">onbeforecopy</span>).<br />
+<br />
+&#160; With <span class="term">$config["safe"] = 1</span>, all URLs are disallowed in the <span class="term">style</span>&#160;attribute values.<br />
+
+</div>
+<div class="sub-sub-section"><h4>
+<a name="s3.4.4" id="s3.4.4"></a><span class="item-no">3.4.4</span>&#160; Absolute &amp; relative URLs in attribute values
+</h4><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed can make absolute URLs in attributes like <span class="term">href</span>&#160;relative (<span class="term">$config["abs_url"]</span>&#160;is <span class="term">-1</span>), and vice versa (<span class="term">$config["abs_url"]</span>&#160;is <span class="term">1</span>). URLs in scripts are not considered for this, and so are URLs like <span class="term">#section_6</span>&#160;(fragment), <span class="term">?name=Tim#show</span>&#160;(starting with query string), and <span class="term">;var=1?name=Tim#show</span>&#160;(starting with parameters). Further, this requires that <span class="term">$config["base_url"]</span>&#160;be set properly, with the <span class="term">&#58;//</span>&#160;and a trailing slash (<span class="term">/</span>), with no query string, etc. E.g., <span class="term">file&#58;///D&#58;/page/</span>, <span class="term">https&#58;//abc.com/x/y/</span>, or <span class="term">http&#58;//localhost/demo/</span>&#160;are okay, but <span class="term">file&#58;///D&#58;/page/?help=1</span>, <span class="term">abc.com/x/y/</span>&#160;and <span class="term">http&#58;//localhost/demo/index.htm</span>&#160;are not.<br />
+<br />
+&#160; For making absolute URLs relative, only those URLs that have the <span class="term">$config["base_url"]</span>&#160;string at the beginning are converted. E.g., with <span class="term">$config["base_url"] = "https&#58;//abc.com/x/y/"</span>, <span class="term">https&#58;//abc.com/x/y/a.gif</span>&#160;and <span class="term">https&#58;//abc.com/x/y/z/b.gif</span>&#160;become <span class="term">a.gif</span>&#160;and <span class="term">z/b.gif</span>&#160;respectively, while <span class="term">https&#58;//abc.com/x/c.gif</span>&#160;is not changed.<br />
+<br />
+&#160; When making relative URLs absolute, only values for scheme, network location (host-name) and path values in the base URL are inherited. See <a href="#s5.5">section 5.5</a>&#160;for more about the URL specification as per RFC <a href="http://www.ietf.org/rfc/rfc1808.txt">1808</a>.<br />
+
+</div>
+<div class="sub-sub-section"><h4>
+<a name="s3.4.5" id="s3.4.5"></a><span class="item-no">3.4.5</span>&#160; Lower-cased, standard attribute values
+</h4><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Optionally, for standard-compliance, htmLawed (function <span class="term">hl_tag()</span>) lower-cases standard attribute values to give, e.g., <span class="term">input type="password"</span>&#160;instead of <span class="term">input type="Password"</span>, if <span class="term">$config["lc_std_val"]</span>&#160;is <span class="term">1</span>. Attribute values matching those listed below for any of the elements (plus those for the <span class="term">type</span>&#160;attribute of <span class="term">button</span>&#160;or <span class="term">input</span>) are lower-cased:<br />
+<br />
+
+<code class="code">&#160; &#160; all, baseline, bottom, button, center, char, checkbox, circle, col, colgroup, cols, data, default, file, get, groups, hidden, image, justify, left, ltr, middle, none, object, password, poly, post, preserve, radio, rect, ref, reset, right, row, rowgroup, rows, rtl, submit, text, top</code>
+<br />
+<br />
+
+<code class="code">&#160; &#160; a, area, bdo, button, col, form, img, input, object, option, optgroup, param, script, select, table, td, tfoot, th, thead, tr, xml&#58;space</code>
+<br />
+<br />
+&#160; The following <em>empty</em>&#160;(<em>minimized</em>) attributes are always assigned lower-cased values (same as the names):<br />
+<br />
+
+<code class="code">&#160; &#160; checked, compact, declare, defer, disabled, ismap, multiple, nohref, noresize, noshade, nowrap, readonly, selected</code>
+<br />
+
+</div>
+<div class="sub-sub-section"><h4>
+<a name="s3.4.6" id="s3.4.6"></a><span class="item-no">3.4.6</span>&#160; Transformation of deprecated attributes
+</h4><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; If <span class="term">$config["no_deprecated_attr"]</span>&#160;is <span class="term">0</span>, then deprecated attributes (see appendix in <a href="#s5.2">section 5.2</a>) are removed and, in most cases, their values are transformed to CSS style properties and added to the <span class="term">style</span>&#160;attributes (function <span class="term">hl_tag()</span>). Except for <span class="term">bordercolor</span>&#160;for <span class="term">table</span>, <span class="term">tr</span>&#160;and <span class="term">td</span>, the scores of proprietary attributes that were never part of any cross-browser standard are not supported.<br />
+<br />
+&#160; <strong>Note</strong>: The attribute <span class="term">target</span>&#160;for <span class="term">a</span>&#160;is allowed even though it is not in XHTML 1.0 specs. This is because of the attribute's wide-spread use and browser-support, and because the attribute is valid in XHTML 1.1 onwards.<br />
+<br />
+&#160; * &#160;align - for <span class="term">img</span>&#160;with value of <span class="term">left</span>&#160;or <span class="term">right</span>, becomes, e.g., <span class="term">float&#58; left</span>; for <span class="term">div</span>&#160;and <span class="term">table</span>&#160;with value <span class="term">center</span>, becomes <span class="term">margin&#58; auto</span>; all others become, e.g., <span class="term">text-align&#58; right</span><br />
+<br />
+&#160; * &#160;bgcolor - E.g., <span class="term">bgcolor="#ffffff"</span>&#160;becomes <span class="term">background-color&#58; #ffffff</span><br />
+&#160; * &#160;border - E.g., <span class="term">height= "10"</span>&#160;becomes <span class="term">height&#58; 10px</span><br />
+&#160; * &#160;bordercolor - E.g., <span class="term">bordercolor=#999999</span>&#160;becomes <span class="term">border-color&#58; #999999;</span><br />
+&#160; * &#160;compact - <span class="term">font-size&#58; 85%</span><br />
+&#160; * &#160;clear - E.g., 'clear="all" becomes <span class="term">clear&#58; both</span><br />
+<br />
+&#160; * &#160;height - E.g., <span class="term">height= "10"</span>&#160;becomes <span class="term">height&#58; 10px</span>&#160;and <span class="term">height="&#42;"</span>&#160;becomes <span class="term">height&#58; auto</span><br />
+<br />
+&#160; * &#160;hspace - E.g., <span class="term">hspace="10"</span>&#160;becomes <span class="term">margin-left&#58; 10px; margin-right&#58; 10px</span><br />
+&#160; * &#160;language - <span class="term">language="VBScript"</span>&#160;becomes <span class="term">type="text/vbscript"</span><br />
+&#160; * &#160;name - E.g., <span class="term">name="xx"</span>&#160;becomes <span class="term">id="xx"</span><br />
+&#160; * &#160;noshade - <span class="term">border-style&#58; none; border&#58; 0; background-color&#58; gray; color&#58; gray</span><br />
+&#160; * &#160;nowrap - <span class="term">white-space&#58; nowrap</span><br />
+&#160; * &#160;size - E.g., <span class="term">size="10"</span>&#160;becomes <span class="term">height&#58; 10px</span><br />
+&#160; * &#160;start - removed<br />
+&#160; * &#160;type - E.g., <span class="term">type="i"</span>&#160;becomes <span class="term">list-style-type&#58; lower-roman</span><br />
+&#160; * &#160;value - removed<br />
+&#160; * &#160;vspace - E.g., <span class="term">vspace="10"</span>&#160;becomes <span class="term">margin-top&#58; 10px; margin-bottom&#58; 10px</span><br />
+&#160; * &#160;width - like <span class="term">height</span><br />
+<br />
+&#160; Example input:<br />
+<br />
+
+<code class="code">&#160; &#160; &lt;img src="j.gif" alt="image" name="dad&#39;s" /&gt;&lt;img src="k.gif" alt="image" id="dad_off" name="dad" /&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;br clear="left" /&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;hr noshade size="1" /&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;img name="img" src="i.gif" align="left" alt="image" hspace="10" vspace="10" width="10em" height="20" border="1" style="padding&#58;5px;" /&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;table width="50em" align="center" bgcolor="red"&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160;&lt;tr&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &lt;td width="20%"&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160;&lt;div align="center"&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160; &lt;h3 align="right"&gt;Section&lt;/h3&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160; &lt;p align="right"&gt;Para&lt;/p&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160; &lt;ol type="a" start="e"&gt;&lt;li value="x"&gt;First item&lt;/li&gt;&lt;/ol&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160;&lt;/div&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &lt;/td&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &lt;td width="&#42;"&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160;&lt;ol type="1"&gt;&lt;li&gt;First item&lt;/li&gt;&lt;/ol&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &lt;/td&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160;&lt;/tr&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;/table&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;br clear="all" /&gt;</code>
+<br />
+<br />
+&#160; And the output with <span class="term">$config["no_deprecated_attr"] = 1</span>:<br />
+<br />
+
+<code class="code">&#160; &#160; &lt;img src="j.gif" alt="image" /&gt;&lt;img src="k.gif" alt="image" id="dad_off" /&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;br style="clear&#58; left;" /&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;hr style="border-style&#58; none; border&#58; 0; background-color&#58; gray; color&#58; gray; size&#58; 1px;" /&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;img src="i.gif" alt="image" width="10em" height="20" style="padding&#58;5px; float&#58; left; margin-left&#58; 10px; margin-right&#58; 10px; margin-top&#58; 10px; margin-bottom&#58; 10px; border&#58; 1px;" id="img" /&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;table width="50em" style="margin&#58; auto; background-color&#58; red;"&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160;&lt;tr&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &lt;td style="width&#58; 20%;"&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160;&lt;div style="margin&#58; auto;"&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160; &lt;h3 style="text-align&#58; right;"&gt;Section&lt;/h3&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160; &lt;p style="text-align&#58; right;"&gt;Para&lt;/p&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160; &lt;ol style="list-style-type&#58; lower-latin;"&gt;&lt;li&gt;First item&lt;/li&gt;&lt;/ol&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160;&lt;/div&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &lt;/td&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &lt;td style="width&#58; auto;"&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160;&lt;ol style="list-style-type&#58; decimal;"&gt;&lt;li&gt;First item&lt;/li&gt;&lt;/ol&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &lt;/td&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160;&lt;/tr&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;/table&gt;</code>
+<br />
+
+<code class="code">&#160; &#160; &lt;br style="clear&#58; both;" /&gt;</code>
+<br />
+<br />
+&#160; For <span class="term">lang</span>, deprecated in XHTML 1.1, transformation is taken care of through <span class="term">$config["xml&#58;lang"]</span>; see <a href="#s3.4.1">section 3.4.1</a>.<br />
+<br />
+&#160; The attribute <span class="term">name</span>&#160;is deprecated in <span class="term">form</span>, <span class="term">iframe</span>, and <span class="term">img</span>, and is replaced with <span class="term">id</span>&#160;if an <span class="term">id</span>&#160;attribute doesn't exist and if the <span class="term">name</span>&#160;value is appropriate for <span class="term">id</span>. For such replacements for <span class="term">a</span>&#160;and <span class="term">map</span>, for which the <span class="term">name</span>&#160;attribute is deprecated in XHTML 1.1, <span class="term">$config["no_deprecated_attr"]</span>&#160;should be set to <span class="term">2</span>&#160;(when set to <span class="term">1</span>, for these two elements, the <span class="term">name</span>&#160;attribute is retained).<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.4.7" id="s3.4.7"></a><span class="item-no">3.4.7</span>&#160; Anti-spam &amp; <span class="term">href</span>
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed (function <span class="term">hl_tag()</span>) can check the <span class="term">href</span>&#160;attribute values (link addresses) as an anti-spam (email or link spam) measure.<br />
+<br />
+&#160; If <span class="term">$config["anti_mail_spam"]</span>&#160;is not <span class="term">0</span>, the <span class="term">@</span>&#160;of email addresses in <span class="term">href</span>&#160;values like <span class="term">mailto&#58;a@b.com</span>&#160;is replaced with text specified by <span class="term">$config["anti_mail_spam"]</span>. The text should be of a form that makes it clear to others that the address needs to be edited before a mail is sent; e.g., <span class="term">&lt;remove_this_antispam&gt;@</span>&#160;(makes the example address <span class="term">a&lt;remove_this_antispam&gt;@b.com</span>).<br />
+<br />
+&#160; For regular links, one can choose to have a <span class="term">rel</span>&#160;attribute with <span class="term">nofollow</span>&#160;in its value (which tells some search engines to not follow a link). This can discourage link spammers. Additionally, or as an alternative, one can choose to empty the <span class="term">href</span>&#160;value altogether (disable the link).<br />
+<br />
+&#160; For use of these options, <span class="term">$config["anti_link_spam"]</span>&#160;should be set as an array with values <span class="term">regex1</span>&#160;and <span class="term">regex2</span>, both or one of which can be empty (like <span class="term">array("", "regex2")</span>) to indicate that that option is not to be used. Otherwise, <span class="term">regex1</span>&#160;or <span class="term">regex2</span>&#160;should be PHP- and PCRE-compatible regular expression patterns: <span class="term">href</span>&#160;values will be matched against them and those matching the pattern will accordingly be treated.<br />
+<br />
+&#160; Note that the regular expressions should have <em>delimiters</em>, and be well-formed and preferably fast. Absolute efficiency/accuracy is often not needed.<br />
+<br />
+&#160; An example, to have a <span class="term">rel</span>&#160;attribute with <span class="term">nofollow</span>&#160;for all links, and to disable links that do not point to domains <span class="term">abc.com</span>&#160;and <span class="term">xyz.org</span>:<br />
+<br />
+
+<code class="code">&#160; &#160; $config["anti_link_spam"] = array(&#39;&#96;.&#96;&#39;, &#39;&#96;&#58;//\W&#42;(?!(abc\.com|xyz\.org))&#96;&#39;);</code>
+<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.4.8" id="s3.4.8"></a><span class="item-no">3.4.8</span>&#160; Inline style properties
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed can check URL schemes and dynamic expressions (to guard against Javascript, etc., script-based insecurities) in inline CSS style property values in the <span class="term">style</span>&#160;attributes. (CSS properties like <span class="term">background-image</span>&#160;that accept URLs in their values are noted in <a href="#s5.3">section 5.3</a>.) Dynamic CSS expressions that allow scripting in the IE browser, and can be a vulnerability, can be removed from property values by setting <span class="term">$config["css_expression"]</span>&#160;to <span class="term">1</span>&#160;(default setting). Note that when <span class="term">$config["css_expression"]</span>&#160;is set to <span class="term">1</span>, htmLawed will remove <span class="term">/&#42;</span>&#160;from the <span class="term">style</span>&#160;values.<br />
+<br />
+&#160; <strong>Note</strong>: Because of the various ways of representing characters in attribute values (URL-escapement, entitification, etc.), htmLawed might alter the values of the <span class="term">style</span>&#160;attribute values, and may even falsely identify dynamic CSS expressions and URL schemes in them. If this is an important issue, checking of URLs and dynamic expressions can be turned off (<span class="term">$config["schemes"] = "...style&#58;&#42;..."</span>, see <a href="#s3.4.3">section 3.4.3</a>, and <span class="term">$config["css_expression"] = 0</span>). Alternately, admins can use their own custom function for finer handling of <span class="term">style</span>&#160;values through the <span class="term">hook_tag</span>&#160;parameter (see <a href="#s3.4.9">section 3.4.9</a>).<br />
+<br />
+&#160; It is also possible to have htmLawed let through any <span class="term">style</span>&#160;value by setting <span class="term">$config["style_pass"]</span>&#160;to <span class="term">1</span>.<br />
+<br />
+&#160; As such, it is better to set up a CSS file with class declarations, disallow the <span class="term">style</span>&#160;attribute, set a <span class="term">$spec</span>&#160;rule (see <a href="#s2.3">section 2.3</a>) for <span class="term">class</span>&#160;for the <span class="term">oneof</span>&#160;or <span class="term">match</span>&#160;parameter, and ask writers to make use of the <span class="term">class</span>&#160;attribute.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.4.9" id="s3.4.9"></a><span class="item-no">3.4.9</span>&#160; Hook function for tag content
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; It is possible to utilize a custom hook function to alter the tag content htmLawed has finalized (i.e., after it has checked/corrected for required attributes, transformed attributes, lower-cased attribute names, etc.).<br />
+<br />
+&#160; When <span class="term">$config</span>&#160;parameter <span class="term">hook_tag</span>&#160;is set to the name of a function, htmLawed (function <span class="term">hl_tag()</span>) will pass on the element name, and, in the case of an opening tag, the <em>finalized</em>&#160;attribute name-value pairs as array elements to the function. The function, after completing a task such as filtering or tag transformation, will typically return an empty string, the full opening tag string like <span class="term">&lt;element_name attribute_1_name="attribute_1_value"...&gt;</span>&#160;(for empty elements like <span class="term">img</span>&#160;and <span class="term">input</span>, the element-closing slash <span class="term">/</span>&#160;should also be included), etc.<br />
+<br />
+&#160; Any <span class="term">hook_tag</span>&#160;function, since htmLawed version 1.1.11, also receives names of elements in closing tags, such as <span class="term">a</span>&#160;in the closing <span class="term">&lt;/a&gt;</span>&#160;tag of the element <span class="term">&lt;a href="http&#58;//cnn.com"&gt;CNN&lt;/a&gt;</span>. Unlike for opening tags, no other value (i.e., the attribute name-value array) is passed to the function since a closing tag contains only element names. Typically, the function will return an empty string or a full closing tag (like <span class="term">&lt;/a&gt;</span>).<br />
+<br />
+&#160; This is a <strong>powerful functionality</strong>&#160;that can be exploited for various objectives: consolidate-and-convert inline <span class="term">style</span>&#160;attributes to <span class="term">class</span>, convert <span class="term">embed</span>&#160;elements to <span class="term">object</span>, permit only one <span class="term">caption</span>&#160;element in a <span class="term">table</span>&#160;element, disallow embedding of certain types of media, <strong>inject HTML</strong>, use <a href="http://csstidy.sourceforge.net">CSSTidy</a>&#160;to sanitize <span class="term">style</span>&#160;attribute values, etc.<br />
+<br />
+&#160; As an example, the custom hook code below can be used to force a series of specifically ordered <span class="term">id</span>&#160;attributes on all elements, and a specific <span class="term">param</span>&#160;element inside all <span class="term">object</span>&#160;elements:<br />
+<br />
+
+<code class="code">&#160; &#160; function my_tag_function($element, $attribute_array=0){</code>
+<br />
+<br />
+
+<code class="code">&#160; &#160; &#160; // If second argument is not received, it means a closing tag is being handled</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; if(is_numeric($attribute_array)){</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160; return "&lt;/$element&gt;";</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; }</code>
+<br />
+<br />
+
+<code class="code">&#160; &#160; &#160; static $id = 0;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; // Remove any duplicate element</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; if($element == &#39;param&#39; &amp;&amp; isset($attribute_array[&#39;allowscriptaccess&#39;])){</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160; return &#39;&#39;;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; }</code>
+<br />
+<br />
+
+<code class="code">&#160; &#160; &#160; $new_element = &#39;&#39;;</code>
+<br />
+<br />
+
+<code class="code">&#160; &#160; &#160; // Force a serialized ID number</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; $attribute_array[&#39;id&#39;] = &#39;my_&#39;. $id;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; ++$id;</code>
+<br />
+<br />
+
+<code class="code">&#160; &#160; &#160; // Inject param for allowscriptaccess</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; if($element == &#39;object&#39;){</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160; $new_element = &#39;&lt;param id=&#39;my_&#39;. $id; allowscriptaccess="never" /&gt;&#39;;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160; ++$id;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; }</code>
+<br />
+<br />
+
+<code class="code">&#160; &#160; &#160; $string = &#39;&#39;;</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; foreach($attribute_array as $k=&gt;$v){</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; &#160; $string .= " {$k}=\"{$v}\"";</code>
+<br />
+
+<code class="code">&#160; &#160; &#160; }</code>
+<br />
+<br />
+
+<code class="code">&#160; &#160; &#160; static $empty_elements = array(&#39;area&#39;=&gt;1, &#39;br&#39;=&gt;1, &#39;col&#39;=&gt;1, &#39;embed&#39;=&gt;1, &#39;hr&#39;=&gt;1, &#39;img&#39;=&gt;1, &#39;input&#39;=&gt;1, &#39;isindex&#39;=&gt;1, &#39;param&#39;=&gt;1);</code>
+<br />
+<br />
+
+<code class="code">&#160; &#160; &#160; return "&lt;{$element}{$string}". (isset($in_array($element, $empty_elements) ? &#39; /&#39; &#58; &#39;&#39;). &#39;&gt;&#39;. $new_element;</code>
+<br />
+
+<code class="code">&#160; &#160; }</code>
+<br />
+<br />
+&#160; The <span class="term">hook_tag</span>&#160;parameter is different from the <span class="term">hook</span>&#160;parameter (<a href="#s3.7">section 3.7</a>).<br />
+<br />
+&#160; Snippets of hook function code developed by others may be available on the <a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed">htmLawed</a>&#160;website.<br />
+
+</div>
+</div>
+<div class="sub-section"><h3>
+<a name="s3.5" id="s3.5"></a><span class="item-no">3.5</span>&#160; Simple configuration directive for most valid XHTML
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; If <span class="term">$config["valid_xhtml"]</span>&#160;is set to <span class="term">1</span>, some relevant <span class="term">$config</span>&#160;parameters (indicated by <span class="term">~</span>&#160;in <a href="#s2.2">section 2.2</a>) are auto-adjusted. This allows one to pass the <span class="term">$config</span>&#160;argument with a simpler value. If a value for a parameter auto-set through <span class="term">valid_xhtml</span>&#160;is still manually provided, then that value will over-ride the auto-set value.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.6" id="s3.6"></a><span class="item-no">3.6</span>&#160; Simple configuration directive for most <em>safe</em>&#160;HTML
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; <em>Safe</em>&#160;HTML refers to HTML that is restricted to reduce the vulnerability for scripting attacks (such as XSS) based on HTML code which otherwise may still be legal and compliant with the HTML standard specs. When elements such as <span class="term">script</span>&#160;and <span class="term">object</span>, and attributes such as <span class="term">onmouseover</span>&#160;and <span class="term">style</span>&#160;are allowed in the input text, an input writer can introduce malevolent HTML code. Note that what is considered <span class="term">safe</span>&#160;depends on the nature of the web application and the trust-level accorded to its users.<br />
+<br />
+&#160; htmLawed allows an admin to use <span class="term">$config["safe"]</span>&#160;to auto-adjust multiple <span class="term">$config</span>&#160;parameters (such as <span class="term">elements</span>&#160;which declares the allowed element-set), which otherwise would have to be manually set. The relevant parameters are indicated by <span class="term">"</span>&#160;in <a href="#s2.2">section 2.2</a>). Thus, one can pass the <span class="term">$config</span>&#160;argument with a simpler value.<br />
+<br />
+&#160; With the value of <span class="term">1</span>, htmLawed considers <span class="term">CDATA</span>&#160;sections and HTML comments as plain text, and prohibits the <span class="term">applet</span>, <span class="term">embed</span>, <span class="term">iframe</span>, <span class="term">object</span>&#160;and <span class="term">script</span>&#160;elements, and the <span class="term">on&#42;</span>&#160;attributes like <span class="term">onclick</span>. ( There are <span class="term">$config</span>&#160;parameters like <span class="term">css_expression</span>&#160;that are not affected by the value set for <span class="term">safe</span>&#160;but whose default values still contribute towards a more <em>safe</em>&#160;output.) Further, URLs with schemes (see <a href="#s3.4.3">section 3.4.3</a>) are neutralized so that, e.g., <span class="term">style="moz-binding&#58;url(http&#58;//danger)"</span>&#160;becomes <span class="term">style="moz-binding&#58;url(denied&#58;http&#58;//danger)"</span>.<br />
+<br />
+&#160; Admins, however, may still want to completely deny the <span class="term">style</span>&#160;attribute, e.g., with code like<br />
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($text, array(&#39;safe&#39;=&gt;1, &#39;deny_attribute&#39;=&gt;&#39;style&#39;));</code>
+<br />
+<br />
+&#160; Permitting the <span class="term">style</span>&#160;attribute brings in risks of <em>click-jacking</em>, etc. CSS property values can render a page non-functional or be used to deface it. Except for URLs, dynamic expressions, and some other things, htmLawed does not completely check <span class="term">style</span>&#160;values. It does provide ways for the code-developer implementing htmLawed to do such checks through the <span class="term">$spec</span>&#160;argument, and through the <span class="term">hook_tag</span>&#160;parameter (see <a href="#s3.4.8">section 3.4.8</a>&#160;for more). Disallowing style completely and relying on CSS classes and stylesheet files is recommended.<br />
+<br />
+&#160; If a value for a parameter auto-set through <span class="term">safe</span>&#160;is still manually provided, then that value can over-ride the auto-set value. E.g., with <span class="term">$config["safe"] = 1</span>&#160;and <span class="term">$config["elements"] = "&#42;+script"</span>, <span class="term">script</span>, but not <span class="term">applet</span>, is allowed.<br />
+<br />
+&#160; A page illustrating the efficacy of htmLawed's anti-XSS abilities with <span class="term">safe</span>&#160;set to <span class="term">1</span>&#160;against XSS vectors listed by <a href="http://ha.ckers.org/xss.html">RSnake</a>&#160;may be available <a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/rsnake/RSnakeXSSTest.htm">here</a>.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.7" id="s3.7"></a><span class="item-no">3.7</span>&#160; Using a hook function
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; If <span class="term">$config["hook"]</span>&#160;is not set to <span class="term">0</span>, then htmLawed will allow preliminarily processed input to be altered by a hook function named by <span class="term">$config["hook"]</span>&#160;before starting the main work (but after handling of characters, entities, HTML comments and <span class="term">CDATA</span>&#160;sections -- see code for function <span class="term">htmLawed()</span>).<br />
+<br />
+&#160; The hook function also allows one to alter the <em>finalized</em>&#160;values of <span class="term">$config</span>&#160;and <span class="term">$spec</span>.<br />
+<br />
+&#160; Note that the <span class="term">hook</span>&#160;parameter is different from the <span class="term">hook_tag</span>&#160;parameter (<a href="#s3.4.9">section 3.4.9</a>).<br />
+<br />
+&#160; Snippets of hook function code developed by others may be available on the <a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed">htmLawed</a>&#160;website.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.8" id="s3.8"></a><span class="item-no">3.8</span>&#160; Obtaining <em>finalized</em>&#160;parameter values
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed can assign the <em>finalized</em>&#160;<span class="term">$config</span>&#160;and <span class="term">$spec</span>&#160;values to a variable named by <span class="term">$config["show_setting"]</span>. The variable, made global by htmLawed, is set as an array with three keys: <span class="term">config</span>, with the <span class="term">$config</span>&#160;value, <span class="term">spec</span>, with the <span class="term">$spec</span>&#160;value, and <span class="term">time</span>, with a value that is the Unix time (the output of PHP's <span class="term">microtime()</span>&#160;function) when the value was assigned. Admins should use a PHP-compliant variable name (e.g., one that does not begin with a numerical digit) that does not conflict with variable names in their non-htmLawed code.<br />
+<br />
+&#160; The values, which are also post-hook function (if any), can be used to auto-generate information (on, e.g., the elements that are permitted) for input writers.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s3.9" id="s3.9"></a><span class="item-no">3.9</span>&#160; Retaining non-HTML tags in input with mixed markup
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; htmLawed does not remove certain characters that though invalid are nevertheless discouraged in HTML documents as per the specs (see <a href="#s5.1">section 5.1</a>). This can be utilized to deal with input that contains mixed markup. Input that may have HTML markup as well as some other markup that is based on the <span class="term">&lt;</span>, <span class="term">&gt;</span>&#160;and <span class="term">&amp;</span>&#160;characters is considered to have mixed markup. The non-HTML markup can be rather proprietary (like markup for emoticons/smileys), or standard (like MathML or SVG). Or it can be programming code meant for execution/evaluation (such as embedded PHP code).<br />
+<br />
+&#160; To deal with such mixed markup, the input text can be pre-processed to hide the non-HTML markup by specifically replacing the <span class="term">&lt;</span>, <span class="term">&gt;</span>&#160;and <span class="term">&amp;</span>&#160;characters with some of the HTML-discouraged characters (see <a href="#s3.1.2">section 3.1.2</a>). Post-htmLawed processing, the replacements are reverted.<br />
+<br />
+&#160; An example (mixed HTML and PHP code in input text):<br />
+<br />
+
+<code class="code">&#160; &#160; $text = preg_replace(&#39;&#96;&lt;\?php(.+?)\?&gt;&#96;sm&#39;, "\x83?php\\1?\x84", $text);</code>
+<br />
+
+<code class="code">&#160; &#160; $processed = htmLawed($text);</code>
+<br />
+
+<code class="code">&#160; &#160; $processed = preg_replace(&#39;&#96;\x83\?php(.+?)\?\x84&#96;sm&#39;, &#39;&lt;?php$1?&gt;&#39;, $processed);</code>
+<br />
+<br />
+&#160; This code will not work if <span class="term">$config["clean_ms_char"]</span>&#160;is set to <span class="term">1</span>&#160;(<a href="#s3.1">section 3.1</a>), in which case one should instead deploy a hook function (<a href="#s3.7">section 3.7</a>). (htmLawed internally uses certain control characters, code-points <span class="term">1</span>&#160;to <span class="term">7</span>, and use of these characters as markers in the logic of hook functions may cause issues.)<br />
+<br />
+&#160; Admins may also be able to use <span class="term">$config["and_mark"]</span>&#160;to deal with such mixed markup; see <a href="#s3.2">section 3.2</a>.<br />
+
+</div>
+</div>
+<div class="section"><h2>
+<a name="s4" id="s4"></a><span class="item-no">4</span>&#160; Other
+</h2><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<div class="sub-section"><h3>
+<a name="s4.1" id="s4.1"></a><span class="item-no">4.1</span>&#160; Support
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; A careful re-reading of this documentation will very likely answer your questions.<br />
+<br />
+&#160; Software updates and forum-based community-support may be found at <a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed">http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed</a>. For general PHP issues (not htmLawed-specific), support may be found through internet searches and at <a href="http://php.net">http://php.net</a>.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s4.2" id="s4.2"></a><span class="item-no">4.2</span>&#160; Known issues
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; See <a href="#s2.8">section 2.8</a>.<br />
+<br />
+&#160; Readers are advised to cross-check information given in this document.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s4.3" id="s4.3"></a><span class="item-no">4.3</span>&#160; Change-log
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; (The release date for the downloadable package of files containing documentation, demo script, test-cases, etc., besides the <span class="term">htmLawed.php</span>&#160;file may be updated independently if the secondary files are revised.)<br />
+<br />
+&#160; <em>Version number - Release date. Notes</em><br />
+<br />
+&#160; 1.1.11 - 5 June 2012. Fix for possible problem with handling of multi-byte characters in attribute values in an mbstring.func_overload enviroment. <span class="term">$config["hook_tag"]</span>, if specified, now receives names of elements in closing tags.<br />
+<br />
+&#160; 1.1.10 - 22 October 2011. Fix for a bug in the <span class="term">tidy</span>&#160;functionality that caused the entire input to be replaced with a single space; new parameter, <span class="term">$config["direct_list_nest"]</span>&#160;to allow direct descendance of a list in a list. (5 April 2012. Dual licensing from LGPLv3 to LGPLv3 and GPLv2+.)<br />
+<br />
+&#160; 1.1.9.5 - 6 July 2011. Minor correction of a rule for nesting of <span class="term">li</span>&#160;within <span class="term">dir</span><br />
+<br />
+&#160; 1.1.9.4 - 3 July 2010. Parameter <span class="term">schemes</span>&#160;now accepts <span class="term">!</span>&#160;so any URL, even a local one, can be <em>denied</em>. An issue in which a second URL value in <span class="term">style</span>&#160;properties was not checked was fixed.<br />
+<br />
+&#160; 1.1.9.3 - 17 May 2010. Checks for correct nesting of <span class="term">param</span><br />
+<br />
+&#160; 1.1.9.2 - 26 April 2010. Minor fix regarding rendering of denied URL schemes<br />
+<br />
+&#160; 1.1.9.1 - 26 February 2010. htmLawed now uses the LGPL version 3 license; support for <span class="term">flashvars</span>&#160;attribute for <span class="term">embed</span><br />
+<br />
+&#160; 1.1.9 - 22 December 2009. Soft-hyphens are now removed only from URL-accepting attribute values<br />
+<br />
+&#160; 1.1.8.1 - 16 July 2009. Minor code-change to fix a PHP error notice<br />
+<br />
+&#160; 1.1.8 - 23 April 2009. Parameter <span class="term">deny_attribute</span>&#160;now accepts the wild-card <span class="term">&#42;</span>, making it simpler to specify its value when all but a few attributes are being denied; fixed a bug in interpreting <span class="term">$spec</span><br />
+<br />
+&#160; 1.1.7 - 11-12 March 2009. Attributes globally denied through <span class="term">deny_attribute</span>&#160;can be allowed element-specifically through <span class="term">$spec</span>; <span class="term">$config["style_pass"]</span>&#160;allowing letting through any <span class="term">style</span>&#160;value introduced; altered logic to catch certain types of dynamic crafted CSS expressions<br />
+<br />
+&#160; 1.1.3-6 - 28-31 January - 4 February 2009. Altered logic to catch certain types of dynamic crafted CSS expressions<br />
+<br />
+&#160; 1.1.2 - 22 January 2009. Fixed bug in parsing of <span class="term">font</span>&#160;attributes during tag transformation<br />
+<br />
+&#160; 1.1.1 - 27 September 2008. Better nesting correction when omitable closing tags are absent<br />
+<br />
+&#160; 1.1 - 29 June 2008. <span class="term">$config["hook_tag"]</span>&#160;and <span class="term">$config["format"]</span>&#160;introduced for custom tag/attribute check/modification/injection and output compaction/beautification; fixed a regex-in-$spec parsing bug<br />
+<br />
+&#160; 1.0.9 - 11 June 2008. Fixed bug in invalid HTML code-point entity check<br />
+<br />
+&#160; 1.0.8 - 15 May 2008. <span class="term">bordercolor</span>&#160;attribute for <span class="term">table</span>, <span class="term">td</span>&#160;and <span class="term">tr</span><br />
+<br />
+&#160; 1.0.7 - 1 May 2008. Support for <span class="term">wmode</span>&#160;attribute for <span class="term">embed</span>; <span class="term">$config["show_setting"]</span>&#160;introduced; improved <span class="term">$config["elements"]</span>&#160;evaluation<br />
+<br />
+&#160; 1.0.6 - 20 April 2008. <span class="term">$config["and_mark"]</span>&#160;introduced<br />
+<br />
+&#160; 1.0.5 - 12 March 2008. <span class="term">style</span>&#160;URL schemes essentially disallowed when $config <span class="term">safe</span>&#160;is on; improved regex for CSS expression search<br />
+<br />
+&#160; 1.0.4 - 10 March 2008. Improved corrections for <span class="term">blockquote</span>, <span class="term">form</span>, <span class="term">map</span>&#160;and <span class="term">noscript</span><br />
+<br />
+&#160; 1.0.3 - 3 March 2008. Character entities for soft-hyphens are now replaced with spaces (instead of being removed); a bug allowing <span class="term">td</span>&#160;directly inside <span class="term">table</span>&#160;fixed; <span class="term">safe</span>&#160;<span class="term">$config</span>&#160;parameter added<br />
+<br />
+&#160; 1.0.2 - 13 February 2008. Improved implementation of <span class="term">$config["keep_bad"]</span><br />
+<br />
+&#160; 1.0.1 - 7 November 2007. Improved regex for identifying URLs, protocols and dynamic expressions (<span class="term">hl_tag()</span>&#160;and <span class="term">hl_prot()</span>); no error display with <span class="term">hl_regex()</span><br />
+<br />
+&#160; 1.0 - 2 November 2007. First release<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s4.4" id="s4.4"></a><span class="item-no">4.4</span>&#160; Testing
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; To test htmLawed using a form interface, a <a href="htmLawedTest.php">demo</a>&#160;web-page is provided with the htmLawed distribution (<span class="term">htmLawed.php</span>&#160;and <span class="term">htmLawedTest.php</span>&#160;should be in the same directory on the web-server). A file with <a href="htmLawed_TESTCASE.txt">test-cases</a>&#160;is also provided.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s4.5" id="s4.5"></a><span class="item-no">4.5</span>&#160; Upgrade, &amp; old versions
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Upgrading is as simple as replacing the previous version of <span class="term">htmLawed.php</span>&#160;(assuming it was not modified for customized features). As htmLawed output is almost always used in static documents, upgrading should not affect old, finalized content.<br />
+<br />
+&#160; <strong>Important</strong>&#160; The following upgrades may affect the functionality of a specific htmLawed as indicated by their corresponding notes:<br />
+<br />
+&#160; (1) From version 1.1-1.1.10 to 1.1.11, if a <span class="term">hook_tag</span>&#160;function is in use: In version 1.1.11, elements in closing tags (and not just the opening tags) are also passed to the function. There are no attribute names/values to pass, so a <span class="term">hook_tag</span>&#160;function receives only the element name. The <span class="term">hook_tag</span>&#160;function therefore may have to be edited. See <a href="#s3.4.9">section 3.4.9</a>.<br />
+<br />
+&#160; Old versions of htmLawed may be available online. E.g., for version 1.0, check <a href="http://www.bioinformatics.org/phplabware/downloads/htmLawed1.zip">http://www.bioinformatics.org/phplabware/downloads/htmLawed1.zip</a>, for 1.1.1, htmLawed111.zip, and for 1.1.10, htmLawed1110.zip.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s4.6" id="s4.6"></a><span class="item-no">4.6</span>&#160; Comparison with <span class="term">HTMLPurifier</span>
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; The HTMLPurifier PHP library by Edward Yang is a very good HTML filtering script that uses object oriented PHP code. Compared to htmLawed, it (as of mid-2009):<br />
+<br />
+&#160; * &#160;does not support PHP versions older than 5.0 (HTMLPurifier dropped PHP 4 support after version 2)<br />
+<br />
+&#160; * &#160;is 15-20 times bigger (scores of files totalling more than 750 kb)<br />
+<br />
+&#160; * &#160;consumes 10-15 times more RAM memory (just including the HTMLPurifier files without calling the filter requires a few MBs of memory)<br />
+<br />
+&#160; * &#160;is expectedly slower<br />
+<br />
+&#160; * &#160;does not allow admins to fully allow all valid HTML (because of incomplete HTML support, it always considers elements like <span class="term">script</span>&#160;illegal)<br />
+<br />
+&#160; * &#160;lacks many of the extra features of htmLawed (like entity conversions and code compaction/beautification)<br />
+<br />
+&#160; * &#160;has poor documentation<br />
+<br />
+&#160; However, HTMLPurifier has finer checks for character encodings and attribute values, and can log warnings and errors. Visit the HTMLPurifier <a href="http://htmlpurifier.org">website</a>&#160;for updated information.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s4.7" id="s4.7"></a><span class="item-no">4.7</span>&#160; Use through application plug-ins/modules
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Plug-ins/modules to implement htmLawed in applications such as Drupal and DokuWiki may have been developed. Please check the application websites and the forum on the htmLawed <a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed">site</a>.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s4.8" id="s4.8"></a><span class="item-no">4.8</span>&#160; Use in non-PHP applications
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Non-PHP applications written in Python, Ruby, etc., may be able to use htmLawed through system calls to the PHP engine. Such code may have been documented on the internet. Also check the forum on the htmLawed <a href="http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed">site</a>.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s4.9" id="s4.9"></a><span class="item-no">4.9</span>&#160; Donate
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; A donation in any currency and amount to appreciate or support this software can be sent by <a href="http://paypal.com">PayPal</a>&#160;to this email address: drpatnaik at yahoo dot com.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s4.10" id="s4.10"></a><span class="item-no">4.10</span>&#160; Acknowledgements
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Nicholas Alipaz, Bryan Blakey, Pádraic Brady, Ulf Harnhammer, Gareth Heyes, Klaus Leithoff, Lukasz Pilorz, Shelley Powers, Edward Yang, and many anonymous users.<br />
+<br />
+&#160; Thank you!<br />
+
+</div>
+</div>
+<div class="section"><h2>
+<a name="s5" id="s5"></a><span class="item-no">5</span>&#160; Appendices
+</h2><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<div class="sub-section"><h3>
+<a name="s5.1" id="s5.1"></a><span class="item-no">5.1</span>&#160; Characters discouraged in XHTML
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Characters represented by the following hexadecimal code-points are <em>not</em>&#160;invalid, even though some validators may issue messages stating otherwise.<br />
+<br />
+&#160; <span class="term">7f</span>&#160;to <span class="term">84</span>, <span class="term">86</span>&#160;to <span class="term">9f</span>, <span class="term">fdd0</span>&#160;to <span class="term">fddf</span>, <span class="term">1fffe</span>, <span class="term">1ffff</span>, <span class="term">2fffe</span>, <span class="term">2ffff</span>, <span class="term">3fffe</span>, <span class="term">3ffff</span>, <span class="term">4fffe</span>, <span class="term">4ffff</span>, <span class="term">5fffe</span>, <span class="term">5ffff</span>, <span class="term">6fffe</span>, <span class="term">6ffff</span>, <span class="term">7fffe</span>, <span class="term">7ffff</span>, <span class="term">8fffe</span>, <span class="term">8ffff</span>, <span class="term">9fffe</span>, <span class="term">9ffff</span>, <span class="term">afffe</span>, <span class="term">affff</span>, <span class="term">bfffe</span>, <span class="term">bffff</span>, <span class="term">cfffe</span>, <span class="term">cffff</span>, <span class="term">dfffe</span>, <span class="term">dffff</span>, <span class="term">efffe</span>, <span class="term">effff</span>, <span class="term">ffffe</span>, <span class="term">fffff</span>, <span class="term">10fffe</span>&#160;and <span class="term">10ffff</span><br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s5.2" id="s5.2"></a><span class="item-no">5.2</span>&#160; Valid attribute-element combinations
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Valid attribute-element combinations as per W3C specs.<br />
+<br />
+&#160; * &#160;includes deprecated attributes (marked <span class="term">^</span>), attributes for the non-standard <span class="term">embed</span>&#160;element (marked <span class="term">&#42;</span>), and the proprietary <span class="term">bordercolor</span>&#160;(marked <span class="term">~</span>)<br />
+&#160; * &#160;only non-frameset, HTML body elements<br />
+&#160; * &#160;<span class="term">name</span>&#160;for <span class="term">a</span>&#160;and <span class="term">map</span>, and <span class="term">lang</span>&#160;are invalid in XHTML 1.1<br />
+&#160; * &#160;<span class="term">target</span>&#160;is valid for <span class="term">a</span>&#160;in XHTML 1.1 and higher<br />
+&#160; * &#160;<span class="term">xml&#58;space</span>&#160;is only for XHTML 1.1<br />
+<br />
+&#160; abbr - td, th<br />
+&#160; accept - form, input<br />
+&#160; accept-charset - form<br />
+&#160; accesskey - a, area, button, input, label, legend, textarea<br />
+&#160; action - form<br />
+&#160; align - caption^, embed, applet, iframe, img^, input^, object^, legend^, table^, hr^, div^, h1^, h2^, h3^, h4^, h5^, h6^, p^, col, colgroup, tbody, td, tfoot, th, thead, tr<br />
+&#160; alt - applet, area, img, input<br />
+&#160; archive - applet, object<br />
+&#160; axis - td, th<br />
+&#160; bgcolor - embed, table^, tr^, td^, th^<br />
+&#160; border - table, img^, object^<br />
+&#160; bordercolor~ - table, td, tr<br />
+&#160; cellpadding - table<br />
+&#160; cellspacing - table<br />
+&#160; char - col, colgroup, tbody, td, tfoot, th, thead, tr<br />
+&#160; charoff - col, colgroup, tbody, td, tfoot, th, thead, tr<br />
+&#160; charset - a, script<br />
+&#160; checked - input<br />
+&#160; cite - blockquote, q, del, ins<br />
+&#160; classid - object<br />
+&#160; clear - br^<br />
+&#160; code - applet<br />
+&#160; codebase - object, applet<br />
+&#160; codetype - object<br />
+&#160; color - font<br />
+&#160; cols - textarea<br />
+&#160; colspan - td, th<br />
+&#160; compact - dir, dl^, menu, ol^, ul^<br />
+&#160; coords - area, a<br />
+&#160; data - object<br />
+&#160; datetime - del, ins<br />
+&#160; declare - object<br />
+&#160; defer - script<br />
+&#160; dir - bdo<br />
+&#160; disabled - button, input, optgroup, option, select, textarea<br />
+&#160; enctype - form<br />
+&#160; face - font<br />
+&#160; flashvars* - embed<br />
+&#160; for - label<br />
+&#160; frame - table<br />
+&#160; frameborder - iframe<br />
+&#160; headers - td, th<br />
+&#160; height - embed, iframe, td^, th^, img, object, applet<br />
+&#160; href - a, area<br />
+&#160; hreflang - a<br />
+&#160; hspace - applet, img^, object^<br />
+&#160; ismap - img, input<br />
+&#160; label - option, optgroup<br />
+&#160; language - script^<br />
+&#160; longdesc - img, iframe<br />
+&#160; marginheight - iframe<br />
+&#160; marginwidth - iframe<br />
+&#160; maxlength - input<br />
+&#160; method - form<br />
+&#160; model* - embed<br />
+&#160; multiple - select<br />
+&#160; name - button, embed, textarea, applet^, select, form^, iframe^, img^, a^, input, object, map^, param<br />
+&#160; nohref - area<br />
+&#160; noshade - hr^<br />
+&#160; nowrap - td^, th^<br />
+&#160; object - applet<br />
+&#160; onblur - a, area, button, input, label, select, textarea<br />
+&#160; onchange - input, select, textarea<br />
+&#160; onfocus - a, area, button, input, label, select, textarea<br />
+&#160; onreset - form<br />
+&#160; onselect - input, textarea<br />
+&#160; onsubmit - form<br />
+&#160; pluginspage* - embed<br />
+&#160; pluginurl* - embed<br />
+&#160; prompt - isindex<br />
+&#160; readonly - textarea, input<br />
+&#160; rel - a<br />
+&#160; rev - a<br />
+&#160; rows - textarea<br />
+&#160; rowspan - td, th<br />
+&#160; rules - table<br />
+&#160; scope - td, th<br />
+&#160; scrolling - iframe<br />
+&#160; selected - option<br />
+&#160; shape - area, a<br />
+&#160; size - hr^, font, input, select<br />
+&#160; span - col, colgroup<br />
+&#160; src - embed, script, input, iframe, img<br />
+&#160; standby - object<br />
+&#160; start - ol^<br />
+&#160; summary - table<br />
+&#160; tabindex - a, area, button, input, object, select, textarea<br />
+&#160; target - a^, area, form<br />
+&#160; type - a, embed, object, param, script, input, li^, ol^, ul^, button<br />
+&#160; usemap - img, input, object<br />
+&#160; valign - col, colgroup, tbody, td, tfoot, th, thead, tr<br />
+&#160; value - input, option, param, button, li^<br />
+&#160; valuetype - param<br />
+&#160; vspace - applet, img^, object^<br />
+&#160; width - embed, hr^, iframe, img, object, table, td^, th^, applet, col, colgroup, pre^<br />
+&#160; wmode - embed<br />
+&#160; xml:space - pre, script, style<br />
+<br />
+&#160; These are allowed in all but the shown elements:<br />
+<br />
+&#160; class - param, script<br />
+&#160; dir - applet, bdo, br, iframe, param, script<br />
+&#160; id - script<br />
+&#160; lang - applet, br, iframe, param, script<br />
+&#160; onclick - applet, bdo, br, font, iframe, isindex, param, script<br />
+&#160; ondblclick - applet, bdo, br, font, iframe, isindex, param, script<br />
+&#160; onkeydown - applet, bdo, br, font, iframe, isindex, param, script<br />
+&#160; onkeypress - applet, bdo, br, font, iframe, isindex, param, script<br />
+&#160; onkeyup - applet, bdo, br, font, iframe, isindex, param, script<br />
+&#160; onmousedown - applet, bdo, br, font, iframe, isindex, param, script<br />
+&#160; onmousemove - applet, bdo, br, font, iframe, isindex, param, script<br />
+&#160; onmouseout - applet, bdo, br, font, iframe, isindex, param, script<br />
+&#160; onmouseover - applet, bdo, br, font, iframe, isindex, param, script<br />
+&#160; onmouseup - applet, bdo, br, font, iframe, isindex, param, script<br />
+&#160; style - param, script<br />
+&#160; title - param, script<br />
+&#160; xml:lang - applet, br, iframe, param, script<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s5.3" id="s5.3"></a><span class="item-no">5.3</span>&#160; CSS 2.1 properties accepting URLs
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; background<br />
+&#160; background-image<br />
+&#160; content<br />
+&#160; cue-after<br />
+&#160; cue-before<br />
+&#160; cursor<br />
+&#160; list-style<br />
+&#160; list-style-image<br />
+&#160; play-during<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s5.4" id="s5.4"></a><span class="item-no">5.4</span>&#160; Microsoft Windows 1252 character replacements
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Key: <span class="term">d</span>&#160;double, <span class="term">l</span>&#160;left, <span class="term">q</span>&#160;quote, <span class="term">r</span>&#160;right, <span class="term">s.</span>&#160;single<br />
+<br />
+&#160; Code-point (decimal) - hexadecimal value - replacement entity - represented character<br />
+<br />
+&#160; 127 - 7f - (removed) - (not used)<br />
+&#160; 128 - 80 - &amp;#8364; - euro<br />
+&#160; 129 - 81 - (removed) - (not used)<br />
+&#160; 130 - 82 - &amp;#8218; - baseline s. q<br />
+&#160; 131 - 83 - &amp;#402; - florin<br />
+&#160; 132 - 84 - &amp;#8222; - baseline d q<br />
+&#160; 133 - 85 - &amp;#8230; - ellipsis<br />
+&#160; 134 - 86 - &amp;#8224; - dagger<br />
+&#160; 135 - 87 - &amp;#8225; - d dagger<br />
+&#160; 136 - 88 - &amp;#710; - circumflex accent<br />
+&#160; 137 - 89 - &amp;#8240; - permile<br />
+&#160; 138 - 8a - &amp;#352; - S Hacek<br />
+&#160; 139 - 8b - &amp;#8249; - l s. guillemet<br />
+&#160; 140 - 8c - &amp;#338; - OE ligature<br />
+&#160; 141 - 8d - (removed) - (not used)<br />
+&#160; 142 - 8e - &amp;#381; - Z dieresis<br />
+&#160; 143 - 8f - (removed) - (not used)<br />
+&#160; 144 - 90 - (removed) - (not used)<br />
+&#160; 145 - 91 - &amp;#8216; - l s. q<br />
+&#160; 146 - 92 - &amp;#8217; - r s. q<br />
+&#160; 147 - 93 - &amp;#8220; - l d q<br />
+&#160; 148 - 94 - &amp;#8221; - r d q<br />
+&#160; 149 - 95 - &amp;#8226; - bullet<br />
+&#160; 150 - 96 - &amp;#8211; - en dash<br />
+&#160; 151 - 97 - &amp;#8212; - em dash<br />
+&#160; 152 - 98 - &amp;#732; - tilde accent<br />
+&#160; 153 - 99 - &amp;#8482; - trademark<br />
+&#160; 154 - 9a - &amp;#353; - s Hacek<br />
+&#160; 155 - 9b - &amp;#8250; - r s. guillemet<br />
+&#160; 156 - 9c - &amp;#339; - oe ligature<br />
+&#160; 157 - 9d - (removed) - (not used)<br />
+&#160; 158 - 9e - &amp;#382; - z dieresis<br />
+&#160; 159 - 9f - &amp;#376; - Y dieresis<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s5.5" id="s5.5"></a><span class="item-no">5.5</span>&#160; URL format
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; An <em>absolute</em>&#160;URL has a <span class="term">protocol</span>&#160;or <span class="term">scheme</span>, a <span class="term">network location</span>&#160;or <span class="term">hostname</span>, and, optional <span class="term">path</span>, <span class="term">parameters</span>, <span class="term">query</span>&#160;and <span class="term">fragment</span>&#160;segments. Thus, an absolute URL has this generic structure:<br />
+<br />
+
+<code class="code">&#160; &#160; (scheme) &#58; (//network location) /(path) ;(parameters) ?(query) #(fragment)</code>
+<br />
+<br />
+&#160; The schemes can only contain letters, digits, <span class="term">+</span>, <span class="term">.</span>&#160;and <span class="term">-</span>. Hostname is the portion after the <span class="term">//</span>&#160;and up to the first <span class="term">/</span>&#160;(if any; else, up to the end) when <span class="term">&#58;</span>&#160;is followed by a <span class="term">//</span>&#160;(e.g., <span class="term">abc.com</span>&#160;in <span class="term">ftp&#58;//abc.com/def</span>); otherwise, it consists of everything after the <span class="term">&#58;</span>&#160;(e.g., <span class="term">def@abc.com</span>&#160;in mailto:def@abc.com').<br />
+<br />
+&#160; <em>Relative</em>&#160;URLs do not have explicit schemes and network locations; such values are inherited from a <em>base</em>&#160;URL.<br />
+
+</div>
+<div class="sub-section"><h3>
+<a name="s5.6" id="s5.6"></a><span class="item-no">5.6</span>&#160; Brief on htmLawed code
+</h3><span class="totop"><a href="#peak">(to top)</a></span><br style="clear: both;" />
+<br />
+&#160; Much of the code's logic and reasoning can be understood from the documentation above.<br />
+<br />
+&#160; The <strong>output</strong>&#160;of htmLawed is a text string containing the processed input. There is no custom error tracking.<br />
+<br />
+&#160; <strong>Function arguments</strong>&#160;for htmLawed are:<br />
+<br />
+&#160; * &#160;<span class="term">$in</span>&#160;- 1st argument; a text string; the <strong>input text</strong>&#160;to be processed. Any extraneous slashes added by PHP when <em>magic quotes</em>&#160;are enabled should be removed beforehand using PHP's <span class="term">stripslashes()</span>&#160;function.<br />
+<br />
+&#160; * &#160;<span class="term">$config</span>&#160;- 2nd argument; an associative array; optional (named <span class="term">$C</span>&#160;in htmLawed code). The array has keys with names like <span class="term">balance</span>&#160;and <span class="term">keep_bad</span>, and the values, which can be boolean, string, or array, depending on the key, are read to accordingly set the <strong>configurable parameters</strong>&#160;(indicated by the keys). All configurable parameters receive some default value if the value to be used is not specified by the user through <span class="term">$config</span>. <em>Finalized</em>&#160;<span class="term">$config</span>&#160;is thus a filtered and possibly larger array.<br />
+<br />
+&#160; * &#160;<span class="term">$spec</span>&#160;- 3rd argument; a text string; optional. The string has rules, written in an htmLawed-designated format, <strong>specifying</strong>&#160;element-specific attribute and attribute value restrictions. Function <span class="term">hl_spec()</span>&#160;is used to convert the string to an associative-array for internal use. <em>Finalized</em>&#160;<span class="term">$spec</span>&#160;is thus an array.<br />
+<br />
+&#160; <em>Finalized</em>&#160;<span class="term">$config</span>&#160;and <span class="term">$spec</span>&#160;are made <strong>global variables</strong>&#160;while htmLawed is at work. Values of any pre-existing global variables with same names are noted, and their values are restored after htmLawed finishes processing the input (to capture the <em>finalized</em>&#160;values, the <span class="term">show_settings</span>&#160;parameter of <span class="term">$config</span>&#160;should be used). Depending on <span class="term">$config</span>, another global variable <span class="term">hl_Ids</span>, to track <span class="term">id</span>&#160;attribute values for uniqueness, may be set. Unlike the other two variables, this one is not reset (or unset) post-processing.<br />
+<br />
+&#160; Except for the main function <span class="term">htmLawed()</span>&#160;and the functions <span class="term">kses()</span>&#160;and <span class="term">kses_hook()</span>, htmLawed's functions are <strong>name-spaced</strong>&#160;using the <span class="term">hl_</span>&#160;prefix. The <strong>functions</strong>&#160;and their roles are:<br />
+<br />
+&#160; * &#160;<span class="term">hl_attrval</span>&#160;- checking attribute values against $spec<br />
+&#160; * &#160;<span class="term">hl_bal</span>&#160;- tag balancing<br />
+&#160; * &#160;<span class="term">hl_cmtcd</span>&#160;- handling CDATA sections and HTML comments<br />
+&#160; * &#160;<span class="term">hl_ent</span>&#160;- entity handling<br />
+&#160; * &#160;<span class="term">hl_prot</span>&#160;- checking a URL scheme/protocol<br />
+&#160; * &#160;<span class="term">hl_regex</span>&#160;- checking syntax of a regular expression<br />
+&#160; * &#160;<span class="term">hl_spec</span>&#160;- converting user-supplied $spec value to one used by htmLawed internally<br />
+&#160; * &#160;<span class="term">hl_tag</span>&#160;- handling tags<br />
+&#160; * &#160;<span class="term">hl_tag2</span>&#160;- transforming tags<br />
+&#160; * &#160;<span class="term">hl_tidy</span>&#160;- compact/beautify HTML<br />
+&#160; * &#160;<span class="term">hl_version</span>&#160;- reporting htmLawed version<br />
+&#160; * &#160;<span class="term">htmLawed</span>&#160;- main function<br />
+&#160; * &#160;<span class="term">kses</span>&#160;- main function of <span class="term">kses</span><br />
+&#160; * &#160;<span class="term">kses_hook</span>&#160;- hook function of <span class="term">kses</span><br />
+<br />
+&#160; The last two are for compatibility with pre-existing code using the <span class="term">kses</span>&#160;script. htmLawed's <span class="term">kses()</span>&#160;basically passes on the filtering task to <span class="term">htmLawed()</span>&#160;function after deciphering <span class="term">$config</span>&#160;and <span class="term">$spec</span>&#160;from the argument values supplied to it. <span class="term">kses_hook()</span>&#160;is an empty function and is meant for being filled with custom code if the <span class="term">kses</span>&#160;script users were using one.<br />
+<br />
+&#160; <span class="term">htmLawed()</span>&#160;finalizes <span class="term">$spec</span>&#160;(with the help of <span class="term">hl_spec()</span>) and <span class="term">$config</span>, and globalizes them. Finalization of <span class="term">$config</span>&#160;involves setting default values if an inappropriate or invalid one is supplied. This includes calling <span class="term">hl_regex()</span>&#160;to check well-formedness of regular expression patterns if such expressions are user-supplied through <span class="term">$config</span>. <span class="term">htmLawed()</span>&#160;then removes invalid characters like nulls and <span class="term">x01</span>&#160;and appropriately handles entities using <span class="term">hl_ent()</span>. HTML comments and CDATA sections are identified and treated as per <span class="term">$config</span>&#160;with the help of <span class="term">hl_cmtcd()</span>. When retained, the <span class="term">&lt;</span>&#160;and <span class="term">&gt;</span>&#160;characters identifying them, and the <span class="term">&lt;</span>, <span class="term">&gt;</span>&#160;and <span class="term">&amp;</span>&#160;characters inside them, are replaced with control characters (code-points <span class="term">1</span>&#160;to <span class="term">5</span>) till any tag balancing is completed.<br />
+<br />
+&#160; After this <em>initial processing</em>&#160;<span class="term">htmLawed()</span>&#160;identifies tags using regex and processes them with the help of <span class="term">hl_tag()</span>&#160;-- &#160;a large function that analyzes tag content, filtering it as per HTML standards, <span class="term">$config</span>&#160;and <span class="term">$spec</span>. Among other things, <span class="term">hl_tag()</span>&#160;transforms deprecated elements using <span class="term">hl_tag2()</span>, removes attributes from closing tags, checks attribute values as per <span class="term">$spec</span>&#160;rules using <span class="term">hl_attrval()</span>, and checks URL protocols using <span class="term">hl_prot()</span>. <span class="term">htmLawed()</span>&#160;performs tag balancing and nesting checks with a call to <span class="term">hl_bal()</span>, and optionally compacts/beautifies the output with proper white-spacing with a call to <span class="term">hl_tidy()</span>. The latter temporarily replaces white-space, and <span class="term">&lt;</span>, <span class="term">&gt;</span>&#160;and <span class="term">&amp;</span>&#160;characters inside <span class="term">pre</span>, <span class="term">script</span>&#160;and <span class="term">textarea</span>&#160;elements, and HTML comments and CDATA sections with control characters (code-points <span class="term">1</span>&#160;to <span class="term">5</span>, and <span class="term">7</span>).<br />
+<br />
+&#160; htmLawed permits the use of custom code or <strong>hook functions</strong>&#160;at two stages. The first, called inside <span class="term">htmLawed()</span>, allows the input text as well as the finalized $config and $spec values to be altered right after the initial processing (see <a href="#s3.7">section 3.7</a>). The second is called by <span class="term">hl_tag()</span>&#160;once the tag content is finalized (see <a href="#s3.4.9">section 3.4.9</a>).<br />
+<br />
+&#160; Being dictated by the external and stable HTML standard, htmLawed's objective is very clear-cut and less concerned with tweakability. The code is only minimally annotated with comments -- it is not meant to instruct; PHP developers familiar with the HTML specs will see the logic, and others can always refer to the htmLawed documentation. The compact structuring of the statements is meant to aid in quickly grasping the logic, at least when viewed with code syntax highlighted.
+</div>
+</div>
+<br />
+<hr /><br /><br /><span class="subtle"><small>HTM version of <em><a href="htmLawed_README.txt">htmLawed_README.txt</a></em> generated on 06 Jun, 2012 using <a href="http://www.bioinformatics.org/phplabware/internal_utilities">rTxt2htm</a> from PHP Labware</small></span>
+</div><!-- ended div body -->
+</div><!-- ended div top -->
+</body>
+</html> \ No newline at end of file
diff --git a/mod/htmlawed/vendors/htmLawed/htmLawed_README.txt b/mod/htmlawed/vendors/htmLawed/htmLawed_README.txt
new file mode 100755
index 000000000..e4027e465
--- /dev/null
+++ b/mod/htmlawed/vendors/htmLawed/htmLawed_README.txt
@@ -0,0 +1,1701 @@
+/*
+htmLawed_README.txt, 8 June 2012
+htmLawed 1.1.11, 5 June 2012
+Copyright Santosh Patnaik
+Dual licensed with LGPL 3 and GPL 2 or later
+A PHP Labware internal utility - http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed
+*/
+
+
+== Content ==========================================================
+
+
+1 About htmLawed
+ 1.1 Example uses
+ 1.2 Features
+ 1.3 History
+ 1.4 License & copyright
+ 1.5 Terms used here
+2 Usage
+ 2.1 Simple
+ 2.2 Configuring htmLawed using the '$config' parameter
+ 2.3 Extra HTML specifications using the '$spec' parameter
+ 2.4 Performance time & memory usage
+ 2.5 Some security risks to keep in mind
+ 2.6 Use without modifying old 'kses()' code
+ 2.7 Tolerance for ill-written HTML
+ 2.8 Limitations & work-arounds
+ 2.9 Examples of usage
+3 Details
+ 3.1 Invalid/dangerous characters
+ 3.2 Character references/entities
+ 3.3 HTML elements
+ 3.3.1 HTML comments and 'CDATA' sections
+ 3.3.2 Tag-transformation for better XHTML-Strict
+ 3.3.3 Tag balancing and proper nesting
+ 3.3.4 Elements requiring child elements
+ 3.3.5 Beautify or compact HTML
+ 3.4 Attributes
+ 3.4.1 Auto-addition of XHTML-required attributes
+ 3.4.2 Duplicate/invalid 'id' values
+ 3.4.3 URL schemes (protocols) and scripts in attribute values
+ 3.4.4 Absolute & relative URLs
+ 3.4.5 Lower-cased, standard attribute values
+ 3.4.6 Transformation of deprecated attributes
+ 3.4.7 Anti-spam & 'href'
+ 3.4.8 Inline style properties
+ 3.4.9 Hook function for tag content
+ 3.5 Simple configuration directive for most valid XHTML
+ 3.6 Simple configuration directive for most `safe` HTML
+ 3.7 Using a hook function
+ 3.8 Obtaining `finalized` parameter values
+ 3.9 Retaining non-HTML tags in input with mixed markup
+4 Other
+ 4.1 Support
+ 4.2 Known issues
+ 4.3 Change-log
+ 4.4 Testing
+ 4.5 Upgrade, & old versions
+ 4.6 Comparison with 'HTMLPurifier'
+ 4.7 Use through application plug-ins/modules
+ 4.8 Use in non-PHP applications
+ 4.9 Donate
+ 4.10 Acknowledgements
+5 Appendices
+ 5.1 Characters discouraged in HTML
+ 5.2 Valid attribute-element combinations
+ 5.3 CSS 2.1 properties accepting URLs
+ 5.4 Microsoft Windows 1252 character replacements
+ 5.5 URL format
+ 5.6 Brief on htmLawed code
+
+
+== 1 About htmLawed ================================================
+
+
+ htmLawed is a highly customizable single-file PHP script to make text secure, and standard- and admin policy-compliant for use in the body of HTML 4, XHTML 1 or 1.1, or generic XML documents. It is thus a configurable input (X)HTML filter, processor, purifier, sanitizer, beautifier, etc., and an alternative to the HTMLTidy:- http://tidy.sourceforge.net application.
+
+ The `lawing in` of input text is needed to ensure that HTML code in the text is standard-compliant, does not introduce security vulnerabilities, and does not break the aesthetics, design or layout of web-pages. htmLawed tries to do this by, for example, making HTML well-formed with balanced and properly nested tags, neutralizing code that may be used for cross-site scripting ('XSS') attacks, and allowing only specified HTML elements/tags and attributes.
+
+
+-- 1.1 Example uses ------------------------------------------------
+
+
+ * Filtering of text submitted as comments on blogs to allow only certain HTML elements
+
+ * Making RSS/Atom newsfeed item-content standard-compliant: often one uses an excerpt from an HTML document for the content, and with unbalanced tags, non-numerical entities, etc., such excerpts may not be XML-compliant
+
+ * Text processing for stricter XML standard-compliance: e.g., to have lowercased 'x' in hexadecimal numeric entities becomes necessary if an XHTML document with MathML content needs to be served as 'application/xml'
+
+ * Scraping text or data from web-pages
+
+ * Pretty-printing HTML code
+
+
+-- 1.2 Features ---------------------------------------------------o
+
+
+ Key: '*' security feature, '^' standard compliance, '~' requires setting right options, '`' different from 'Kses'
+
+ * make input more *secure* and *standard-compliant*
+ * use for HTML 4, XHTML 1.0 or 1.1, or even generic *XML* documents ^~`
+
+ * *beautify* or *compact* HTML ^~`
+
+ * *restrict elements* ^~`
+ * proper closure of empty elements like 'img' ^`
+ * *transform deprecated elements* like 'u' ^~`
+ * HTML *comments* and 'CDATA' sections can be permitted ^~`
+ * elements like 'script', 'object' and 'form' can be permitted ~
+
+ * *restrict attributes*, including *element-specifically* ^~`
+ * remove *invalid attributes* ^`
+ * element and attribute names are *lower-cased* ^
+ * provide *required attributes*, like 'alt' for 'image' ^`
+ * *transform deprecated attributes* ^~`
+ * attributes *declared only once* ^`
+
+ * *restrict attribute values*, including *element-specifically* ^~`
+ * a value is declared for `empty` (`minimized`) attributes like 'checked' ^
+ * check for potentially dangerous attribute values *~
+ * ensure *unique* 'id' attribute values ^~`
+ * *double-quote* attribute values ^
+ * lower-case *standard attribute values* like 'password' ^`
+
+ * *attribute-specific URL protocol/scheme restriction* *~`
+ * disable *dynamic expressions* in 'style' values *~`
+
+ * neutralize invalid named character entities ^`
+ * *convert* hexadecimal numeric entities to decimal ones, or vice versa ^~`
+ * convert named entities to numeric ones for generic XML use ^~`
+
+ * remove *null* characters *
+ * neutralize potentially dangerous proprietary Netscape *Javascript entities* *
+ * replace potentially dangerous *soft-hyphen* character in URL-accepting attribute values with spaces *
+
+ * remove common *invalid characters* not allowed in HTML or XML ^`
+ * replace *characters from Microsoft applications* like 'Word' that are discouraged in HTML or XML ^~`
+ * neutralize entities for characters invalid or discouraged in HTML or XML ^`
+ * appropriately neutralize '<', '&', '"', and '>' characters ^*`
+
+ * understands improperly spaced tag content (like, spread over more than a line) and properly spaces them `
+ * attempts to *balance tags* for well-formedness ^~`
+ * understands when *omitable closing tags* like '</p>' (allowed in HTML 4, transitional, e.g.) are missing ^~`
+ * attempts to permit only *validly nested tags* ^~`
+ * option to *remove or neutralize bad content* ^~`
+ * attempts to *rectify common errors of plain-text misplacement* (e.g., directly inside 'blockquote') ^~`
+
+ * fast, *non-OOP* code of ~45 kb incurring peak basal memory usage of ~0.5 MB
+ * *compatible* with pre-existing code using 'Kses' (the filter used by 'WordPress')
+
+ * optional *anti-spam* measures such as addition of 'rel="nofollow"' and link-disabling ~`
+ * optionally makes *relative URLs absolute*, and vice versa ~`
+
+ * optionally mark '&' to identify the entities for '&', '<' and '>' introduced by htmLawed ~`
+
+ * allows deployment of powerful *hook functions* to *inject* HTML, *consolidate* 'style' attributes to 'class', finely check attribute values, etc. ~`
+
+ * *independent of character encoding* of input and does not affect it
+
+ * *tolerance for ill-written HTML* to a certain degree
+
+
+-- 1.3 History ----------------------------------------------------o
+
+
+ htmLawed was developed for use with 'LabWiki', a wiki software developed at PHP Labware, as a suitable software could not be found. Existing PHP software like 'Kses' and 'HTMLPurifier' were deemed inadequate, slow, resource-intensive, or dependent on external applications like 'HTML Tidy'.
+
+ htmLawed started as a modification of Ulf Harnhammar's 'Kses' (version 0.2.2) software, and is compatible with code that uses 'Kses'; see section:- #2.6.
+
+
+-- 1.4 License & copyright ----------------------------------------o
+
+
+ htmLawed is free and open-source software dual licensed under LGPL license version 3:- http://www.gnu.org/licenses/lgpl-3.0.txt and GPL license version 2:- http://www.gnu.org/licenses/gpl-2.0.txt or later, and copyrighted by Santosh Patnaik, MD, PhD.
+
+
+-- 1.5 Terms used here --------------------------------------------o
+
+
+ * `administrator` - or admin; person setting up the code to pass input through htmLawed; also, `user`
+ * `attributes` - name-value pairs like 'href="http://x.com"' in opening tags
+ * `author` - `writer`
+ * `character` - atomic unit of text; internally represented by a numeric `code-point` as specified by the `encoding` or `charset` in use
+ * `entity` - markup like '&gt;' and '&#160;' used to refer to a character
+ * `element` - HTML element like 'a' and 'img'
+ * `element content` - content between the opening and closing tags of an element, like 'click' of '<a href="x">click</a>'
+ * `HTML` - implies XHTML unless specified otherwise
+ * `input` - text string given to htmLawed to process
+ * `processing` - involves filtering, correction, etc., of input
+ * `safe` - absence or reduction of certain characters and HTML elements and attributes in the input that can otherwise potentially and circumstantially expose web-site users to security vulnerabilities like cross-site scripting attacks (XSS)
+ * `scheme` - URL protocol like 'http' and 'ftp'
+ * `specs` - standard specifications
+ * `style property` - terms like 'border' and 'height' for which declarations are made in values for the 'style' attribute of elements
+ * `tag` - markers like '<a href="x">' and '</a>' delineating element content; the opening tag can contain attributes
+ * `tag content` - consists of tag markers '<' and '>', element names like 'div', and possibly attributes
+ * `user` - administrator
+ * `writer` - end-user like a blog commenter providing the input that is to be processed; also, `author`
+
+
+== 2 Usage ========================================================oo
+
+
+ htmLawed should work with PHP 4.4 and higher. Either 'include()' the 'htmLawed.php' file or copy-paste the entire code.
+
+ To easily *test* htmLawed using a form-based interface, use the provided demo:- htmLawedTest.php ('htmLawed.php' and 'htmLawedTest.php' should be in the same directory on the web-server).
+
+ *Note*: For code for usage of the htmLawed class (for htmLawed in OOP), please refer to the htmLawed:- http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed website; the filtering itself can be configured, etc., as described here.
+
+
+-- 2.1 Simple ------------------------------------------------------
+
+
+ The input text to be processed, '$text', is passed as an argument of type string; 'htmLawed()' returns the processed string:
+
+ $processed = htmLawed($text);
+
+ *Note*: If input is from a '$_GET' or '$_POST' value, and 'magic quotes' are enabled on the PHP setup, run 'stripslashes()' on the input before passing to htmLawed.
+
+ By default, htmLawed will process the text allowing all valid HTML elements/tags, secure URL scheme/CSS style properties, etc. It will allow 'CDATA' sections and HTML comments, balance tags, and ensure proper nesting of elements. Such actions can be configured using two other optional arguments -- '$config' and '$spec':
+
+ $processed = htmLawed($text, $config, $spec);
+
+ These extra parameters are detailed below. Some examples are shown in section:- #2.9.
+
+ *Note*: For maximum protection against 'XSS' and other scripting attacks (e.g., by disallowing Javascript code), consider using the 'safe' parameter; see section:- #3.6.
+
+
+-- 2.2 Configuring htmLawed using the '$config' parameter ---------o
+
+
+ '$config' instructs htmLawed on how to tackle certain tasks. When '$config' is not specified, or not set as an array (e.g., '$config = 1'), htmLawed will take default actions. One or many of the task-action or value-specification pairs can be specified in '$config' as array key-value pairs. If a parameter is not specified, htmLawed will use the default value/action indicated further below.
+
+ $config = array('comment'=>0, 'cdata'=>1);
+ $processed = htmLawed($text, $config);
+
+ Or,
+
+ $processed = htmLawed($text, array('comment'=>0, 'cdata'=>1));
+
+ Below are the possible value-specification combinations. In PHP code, values that are integers should not be quoted and should be used as numeric types (unless meant as string/text).
+
+ Key: '*' default, '^' different default when htmLawed is used in the Kses-compatible mode (see section:- #2.6), '~' different default when 'valid_xhtml' is set to '1' (see section:- #3.5), '"' different default when 'safe' is set to '1' (see section:- #3.6)
+
+ *abs_url*
+ Make URLs absolute or relative; '$config["base_url"]' needs to be set; see section:- #3.4.4
+
+ '-1' - make relative
+ '0' - no action *
+ '1' - make absolute
+
+ *and_mark*
+ Mark '&' characters in the original input; see section:- #3.2
+
+ *anti_link_spam*
+ Anti-link-spam measure; see section:- #3.4.7
+
+ '0' - no measure taken *
+ 'array("regex1", "regex2")' - will ensure a 'rel' attribute with 'nofollow' in its value in case the 'href' attribute value matches the regular expression pattern 'regex1', and/or will remove 'href' if its value matches the regular expression pattern 'regex2'. E.g., 'array("/./", "/://\W*(?!(abc\.com|xyz\.org))/")'; see section:- #3.4.7 for more.
+
+ *anti_mail_spam*
+ Anti-mail-spam measure; see section:- #3.4.7
+
+ '0' - no measure taken *
+ 'word' - '@' in mail address in 'href' attribute value is replaced with specified 'word'
+
+ *balance*
+ Balance tags for well-formedness and proper nesting; see section:- #3.3.3
+
+ '0' - no
+ '1' - yes *
+
+ *base_url*
+ Base URL value that needs to be set if '$config["abs_url"]' is not '0'; see section:- #3.4.4
+
+ *cdata*
+ Handling of 'CDATA' sections; see section:- #3.3.1
+
+ '0' - don't consider 'CDATA' sections as markup and proceed as if plain text ^"
+ '1' - remove
+ '2' - allow, but neutralize any '<', '>', and '&' inside by converting them to named entities
+ '3' - allow *
+
+ *clean_ms_char*
+ Replace discouraged characters introduced by Microsoft Word, etc.; see section:- #3.1
+
+ '0' - no *
+ '1' - yes
+ '2' - yes, but replace special single & double quotes with ordinary ones
+
+ *comment*
+ Handling of HTML comments; see section:- #3.3.1
+
+ '0' - don't consider comments as markup and proceed as if plain text ^"
+ '1' - remove
+ '2' - allow, but neutralize any '<', '>', and '&' inside by converting to named entities
+ '3' - allow *
+
+ *css_expression*
+ Allow dynamic CSS expression by not removing the expression from CSS property values in 'style' attributes; see section:- #3.4.8
+
+ '0' - remove *
+ '1' - allow
+
+ *deny_attribute*
+ Denied HTML attributes; see section:- #3.4
+
+ '0' - none *
+ 'string' - dictated by values in 'string'
+ 'on*' (like 'onfocus') attributes not allowed - "
+
+ *direct_nest_list*
+ Allow direct nesting of a list within another without requiring it to be a list item; see section:- #3.3.4
+
+ '0' - no *
+ '1' - yes
+
+ *elements*
+ Allowed HTML elements; see section:- #3.3
+
+ '* -center -dir -font -isindex -menu -s -strike -u' - ~
+ 'applet, embed, iframe, object, script' not allowed - "
+
+ *hexdec_entity*
+ Allow hexadecimal numeric entities and do not convert to the more widely accepted decimal ones, or convert decimal to hexadecimal ones; see section:- #3.2
+
+ '0' - no
+ '1' - yes *
+ '2' - convert decimal to hexadecimal ones
+
+ *hook*
+ Name of an optional hook function to alter the input string, '$config' or '$spec' before htmLawed starts its main work; see section:- #3.7
+
+ '0' - no hook function *
+ 'name' - 'name' is name of the hook function ('kses_hook' ^)
+
+ *hook_tag*
+ Name of an optional hook function to alter tag content finalized by htmLawed; see section:- #3.4.9
+
+ '0' - no hook function *
+ 'name' - 'name' is name of the hook function
+
+ *keep_bad*
+ Neutralize bad tags by converting '<' and '>' to entities, or remove them; see section:- #3.3.3
+
+ '0' - remove ^
+ '1' - neutralize both tags and element content
+ '2' - remove tags but neutralize element content
+ '3' and '4' - like '1' and '2' but remove if text ('pcdata') is invalid in parent element
+ '5' and '6' * - like '3' and '4' but line-breaks, tabs and spaces are left
+
+ *lc_std_val*
+ For XHTML compliance, predefined, standard attribute values, like 'get' for the 'method' attribute of 'form', must be lowercased; see section:- #3.4.5
+
+ '0' - no
+ '1' - yes *
+
+ *make_tag_strict*
+ Transform/remove these non-strict XHTML elements, even if they are allowed by the admin: 'applet' 'center' 'dir' 'embed' 'font' 'isindex' 'menu' 's' 'strike' 'u'; see section:- #3.3.2
+
+ '0' - no ^
+ '1' - yes, but leave 'applet', 'embed' and 'isindex' elements that currently can't be transformed *
+ '2' - yes, removing 'applet', 'embed' and 'isindex' elements and their contents (nested elements remain) ~
+
+ *named_entity*
+ Allow non-universal named HTML entities, or convert to numeric ones; see section:- #3.2
+
+ '0' - convert
+ '1' - allow *
+
+ *no_deprecated_attr*
+ Allow deprecated attributes or transform them; see section:- #3.4.6
+
+ '0' - allow ^
+ '1' - transform, but 'name' attributes for 'a' and 'map' are retained *
+ '2' - transform
+
+ *parent*
+ Name of the parent element, possibly imagined, that will hold the input; see section:- #3.3
+
+ *safe*
+ Magic parameter to make input the most secure against XSS without needing to specify other relevant '$config' parameters; see section:- #3.6
+
+ '0' - no *
+ '1' - will auto-adjust other relevant '$config' parameters (indicated by '"' in this list)
+
+ *schemes*
+ Array of attribute-specific, comma-separated, lower-cased list of schemes (protocols) allowed in attributes accepting URLs (or '!' to `deny` any URL); '*' covers all unspecified attributes; see section:- #3.4.3
+
+ 'href: aim, feed, file, ftp, gopher, http, https, irc, mailto, news, nntp, sftp, ssh, telnet; *:file, http, https' *
+ '*: ftp, gopher, http, https, mailto, news, nntp, telnet' ^
+ 'href: aim, feed, file, ftp, gopher, http, https, irc, mailto, news, nntp, sftp, ssh, telnet; style: !; *:file, http, https' "
+
+ *show_setting*
+ Name of a PHP variable to assign the `finalized` '$config' and '$spec' values; see section:- #3.8
+
+ *style_pass*
+ Do not look at 'style' attribute values, letting them through without any alteration
+
+ '0' - no *
+ '1' - htmLawed will let through any 'style' value; see section:- #3.4.8
+
+ *tidy*
+ Beautify or compact HTML code; see section:- #3.3.5
+
+ '-1' - compact
+ '0' - no *
+ '1' or 'string' - beautify (custom format specified by 'string')
+
+ *unique_ids*
+ 'id' attribute value checks; see section:- #3.4.2
+
+ '0' - no ^
+ '1' - remove duplicate and/or invalid ones *
+ 'word' - remove invalid ones and replace duplicate ones with new and unique ones based on the 'word'; the admin-specified 'word', like 'my_', should begin with a letter (a-z) and can contain letters, digits, '.', '_', '-', and ':'.
+
+ *valid_xhtml*
+ Magic parameter to make input the most valid XHTML without needing to specify other relevant '$config' parameters; see section:- #3.5
+
+ '0' - no *
+ '1' - will auto-adjust other relevant '$config' parameters (indicated by '~' in this list)
+
+ *xml:lang*
+ Auto-adding 'xml:lang' attribute; see section:- #3.4.1
+
+ '0' - no *
+ '1' - add if 'lang' attribute is present
+ '2' - add if 'lang' attribute is present, and remove 'lang' ~
+
+
+-- 2.3 Extra HTML specifications using the $spec parameter --------o
+
+
+ The '$spec' argument can be used to disallow an otherwise legal attribute for an element, or to restrict the attribute's values. This can also be helpful as a security measure (e.g., in certain versions of browsers, certain values can cause buffer overflows and denial of service attacks), or in enforcing admin policy compliance. '$spec' is specified as a string of text containing one or more `rules`, with multiple rules separated from each other by a semi-colon (';'). E.g.,
+
+ $spec = 'i=-*; td, tr=style, id, -*; a=id(match="/[a-z][a-z\d.:\-`"]*/i"/minval=2), href(maxlen=100/minlen=34); img=-width,-alt';
+ $processed = htmLawed($text, $config, $spec);
+
+ Or,
+
+ $processed = htmLawed($text, $config, 'i=-*; td, tr=style, id, -*; a=id(match="/[a-z][a-z\d.:\-`"]*/i"/minval=2), href(maxlen=100/minlen=34); img=-width,-alt');
+
+ A rule begins with an HTML *element* name(s) (`rule-element`), for which the rule applies, followed by an equal ('=') sign. A rule-element may represent multiple elements if comma (,)-separated element names are used. E.g., 'th,td,tr='.
+
+ Rest of the rule consists of comma-separated HTML *attribute names*. A minus ('-') character before an attribute means that the attribute is not permitted inside the rule-element. E.g., '-width'. To deny all attributes, '-*' can be used.
+
+ Following shows examples of rule excerpts with rule-element 'a' and the attributes that are being permitted:
+
+ * 'a=' - all
+ * 'a=id' - all
+ * 'a=href, title, -id, -onclick' - all except 'id' and 'onclick'
+ * 'a=*, id, -id' - all except 'id'
+ * 'a=-*' - none
+ * 'a=-*, href, title' - none except 'href' and 'title'
+ * 'a=-*, -id, href, title' - none except 'href' and 'title'
+
+ Rules regarding *attribute values* are optionally specified inside round brackets after attribute names in slash ('/')-separated `parameter = value` pairs. E.g., 'title(maxlen=30/minlen=5)'. None, or one or more of the following parameters may be specified:
+
+ * 'oneof' - one or more choices separated by '|' that the value should match; if only one choice is provided, then the value must match that choice
+
+ * 'noneof' - one or more choices separated by '|' that the value should not match
+
+ * 'maxlen' and 'minlen' - upper and lower limits for the number of characters in the attribute value; specified in numbers
+
+ * 'maxval' and 'minval' - upper and lower limits for the numerical value specified in the attribute value; specified in numbers
+
+ * 'match' and 'nomatch' - pattern that the attribute value should or should not match; specified as PHP/PCRE-compatible regular expressions with delimiters and possibly modifiers
+
+ * 'default' - a value to force on the attribute if the value provided by the writer does not fit any of the specified parameters
+
+ If 'default' is not set and the attribute value does not satisfy any of the specified parameters, then the attribute is removed. The 'default' value can also be used to force all attribute declarations to take the same value (by getting the values declared illegal by setting, e.g., 'maxlen' to '-1').
+
+ Examples with `input` '<input title="WIDTH" value="10em" /><input title="length" value="5" />' are shown below.
+
+ `Rule`: 'input=title(maxlen=60/minlen=6), value'
+ `Output`: '<input value="10em" /><input title="length" value="5" />'
+
+ `Rule`: 'input=title(), value(maxval=8/default=6)'
+ `Output`: '<input title="WIDTH" value="6" /><input title="length" value="5" />'
+
+ `Rule`: 'input=title(nomatch=%w.d%i), value(match=%em%/default=6em)'
+ `Output`: '<input value="10em" /><input title="length" value="6em" />'
+
+ `Rule`: 'input=title(oneof=height|depth/default=depth), value(noneof=5|6)'
+ `Output`: '<input title="depth" value="10em" /><input title="depth" />'
+
+ *Special characters*: The characters ';', ',', '/', '(', ')', '|', '~' and space have special meanings in the rules. Words in the rules that use such characters, or the characters themselves, should be `escaped` by enclosing in pairs of double-quotes ('"'). A back-tick ('`') can be used to escape a literal '"'. An example rule illustrating this is 'input=value(maxlen=30/match="/^\w/"/default="your `"ID`"")'.
+
+ *Note*: To deny an attribute for all elements for which it is legal, '$config["deny_attribute"]' (see section:- #3.4) can be used instead of '$spec'. Also, attributes can be allowed element-specifically through '$spec' while being denied globally through '$config["deny_attribute"]'. The 'hook_tag' parameter (section:- #3.4.9) can also be used to implement the '$spec' functionality.
+
+
+-- 2.4 Performance time & memory usage ----------------------------o
+
+
+ The time and memory used by htmLawed depends on its configuration and the size of the input, and the amount, nestedness and well-formedness of the HTML markup within it. In particular, tag balancing and beautification each can increase the processing time by about a quarter.
+
+ The htmLawed demo:- htmLawedTest.php can be used to evaluate the performance and effects of different types of input and '$config'.
+
+
+-- 2.5 Some security risks to keep in mind ------------------------o
+
+
+ When setting the parameters/arguments (like those to allow certain HTML elements) for use with htmLawed, one should bear in mind that the setting may let through potentially `dangerous` HTML code which is meant to steal user-data, deface a website, render a page non-functional, etc.
+
+ Unless end-users, either people or software, supplying the content are completely trusted, security issues arising from the degree of HTML usage permission has to be kept in mind. For example, following increase security risks:
+
+ * Allowing 'script', 'applet', 'embed', 'iframe' or 'object' elements, or certain of their attributes like 'allowscriptaccess'
+
+ * Allowing HTML comments (some Internet Explorer versions are vulnerable with, e.g., '<!--[if gte IE 4]><script>alert("xss");</script><![endif]-->'
+
+ * Allowing dynamic CSS expressions (a feature of the IE browser)
+
+ * Allowing the 'style' attribute
+
+ To remove `unsecure` HTML, code-developers using htmLawed must set '$config' appropriately. E.g., '$config["elements"] = "* -script"' to deny the 'script' element (section:- #3.3), '$config["safe"] = 1' to auto-configure ceratin htmLawed parameters for maximizing security (section:- #3.6), etc.
+
+ Permitting the '*style*' attribute brings in risks of `click-jacking`, `phishing`, web-page overlays, etc., `even` when the 'safe' parameter is enabled (see section:- #3.6). Except for URLs and a few other things like CSS dynamic expressions, htmLawed currently does not check every CSS style property. It does provide ways for the code-developer implementing htmLawed to do such checks through htmLawed's '$spec' argument, and through the 'hook_tag' parameter (see section:- #3.4.8 for more). Disallowing 'style' completely and relying on CSS classes and stylesheet files is recommended.
+
+ htmLawed does not check or correct the character *encoding* of the input it receives. In conjunction with permitting circumstances such as when the character encoding is left undefined through HTTP headers or HTML 'meta' tags, this can permit an exploit (like Google's UTF-7/XSS vulnerability of the past).
+
+
+-- 2.6 Use without modifying old 'kses()' code --------------------o
+
+
+ The 'Kses' PHP script is used by many applications (like 'WordPress'). It is possible to have such applications use htmLawed instead, since it is compatible with code that calls the 'kses()' function declared in the 'Kses' file (usually named 'kses.php'). E.g., application code like this will continue to work after replacing 'Kses' with htmLawed:
+
+ $comment_filtered = kses($comment_input, array('a'=>array(), 'b'=>array(), 'i'=>array()));
+
+ For some of the '$config' parameters, htmLawed will use values other than the default ones. These are indicated by '^' in section:- #2.2. To force htmLawed to use other values, function 'kses()' in the htmLawed code should be edited -- a few configurable parameters/variables need to be changed.
+
+ If the application uses a 'Kses' file that has the 'kses()' function declared, then, to have the application use htmLawed instead of 'Kses', simply rename 'htmLawed.php' (to 'kses.php', e.g.) and replace the 'Kses' file (or just replace the code in the 'Kses' file with the htmLawed code). If the 'kses()' function in the 'Kses' file had been renamed by the application developer (e.g., in 'WordPress', it is named 'wp_kses()'), then appropriately rename the 'kses()' function in the htmLawed code.
+
+ If the 'Kses' file used by the application has been highly altered by the application developers, then one may need a different approach. E.g., with 'WordPress', it is best to copy the htmLawed code to 'wp_includes/kses.php', rename the newly added function 'kses()' to 'wp_kses()', and delete the code for the original 'wp_kses()' function.
+
+ If the 'Kses' code has a non-empty hook function (e.g., 'wp_kses_hook()' in case of 'WordPress'), then the code for htmLawed's 'kses_hook()' function should be appropriately edited. However, the requirement of the hook function should be re-evaluated considering that htmLawed has extra capabilities. With 'WordPress', the hook function is an essential one. The following code is suggested for the htmLawed 'kses_hook()' in case of 'WordPress':
+
+ function kses_hook($string, &$cf, &$spec){
+ // kses compatibility
+ $allowed_html = $spec;
+ $allowed_protocols = array();
+ foreach($cf['schemes'] as $v){
+ foreach($v as $k2=>$v2){
+ if(!in_array($k2, $allowed_protocols)){
+ $allowed_protocols[] = $k2;
+ }
+ }
+ }
+ return wp_kses_hook($string, $allowed_html, $allowed_protocols);
+ // eof
+ }
+
+
+-- 2.7 Tolerance for ill-written HTML -----------------------------o
+
+
+ htmLawed can work with ill-written HTML code in the input. However, HTML that is too ill-written may not be `read` as HTML, and be considered mere plain text instead. Following statements indicate the degree of `looseness` that htmLawed can work with, and can be provided in instructions to writers:
+
+ * Tags must be flanked by '<' and '>' with no '>' inside -- any needed '>' should be put in as '&gt;'. It is possible for tag content (element name and attributes) to be spread over many lines instead of being on one. A space may be present between the tag content and '>', like '<div >' and '<img / >', but not after the '<'.
+
+ * Element and attribute names need not be lower-cased.
+
+ * Attribute string of elements may be liberally spaced with tabs, line-breaks, etc.
+
+ * Attribute values may not be double-quoted, or may be single-quoted.
+
+ * Left-padding of numeric entities (like, '&#0160;', '&x07ff;') with '0' is okay as long as the number of characters between between the '&' and the ';' does not exceed 8. All entities must end with ';' though.
+
+ * Named character entities must be properly cased. E.g., '&Lt;' or '&TILDE;' will not be let through without modification.
+
+ * HTML comments should not be inside element tags (okay between tags), and should begin with '<!--' and end with '-->'. Characters like '<', '>', and '&' may be allowed inside depending on '$config', but any '-->' inside should be put in as '--&gt;'. Any '--' inside will be automatically converted to '-', and a space will be added before the comment delimiter '-->'.
+
+ * 'CDATA' sections should not be inside element tags, and can be in element content only if plain text is allowed for that element. They should begin with '<[CDATA[' and end with ']]>'. Characters like '<', '>', and '&' may be allowed inside depending on '$config', but any ']]>' inside should be put in as ']]&gt;'.
+
+ * For attribute values, character entities '&lt;', '&gt;' and '&amp;' should be used instead of characters '<' and '>', and '&' (when '&' is not part of a character entity). This applies even for Javascript code in values of attributes like 'onclick'.
+
+ * Characters '<', '>', '&' and '"' that are part of actual Javascript, etc., code in 'script' elements should be used as such and not be put in as entities like '&gt;'. Otherwise, though the HTML will be valid, the code may fail to work. Further, if such characters have to be used, then they should be put inside 'CDATA' sections.
+
+ * Simple instructions like "an opening tag cannot be present between two closing tags" and "nested elements should be closed in the reverse order of how they were opened" can help authors write balanced HTML. If tags are imbalanced, htmLawed will try to balance them, but in the process, depending on '$config["keep_bad"]', some code/text may be lost.
+
+ * Input authors should be notified of admin-specified allowed elements, attributes, configuration values (like conversion of named entities to numeric ones), etc.
+
+ * With '$config["unique_ids"]' not '0' and the 'id' attribute being permitted, writers should carefully avoid using duplicate or invalid 'id' values as even though htmLawed will correct/remove the values, the final output may not be the one desired. E.g., when '<a id="home"></a><input id="home" /><label for="home"></label>' is processed into
+'<a id="home"></a><input id="prefix_home" /><label for="home"></label>'.
+
+ * Note that even if intended HTML is lost in a highly ill-written input, the processed output will be more secure and standard-compliant.
+
+ * For URLs, unless '$config["scheme"]' is appropriately set, writers should avoid using escape characters or entities in schemes. E.g., 'htt&#112;' (which many browsers will read as the harmless 'http') may be considered bad by htmLawed.
+
+ * htmLawed will attempt to put plain text present directly inside 'blockquote', 'form', 'map' and 'noscript' elements (illegal as per the specs) inside auto-generated 'div' elements.
+
+
+-- 2.8 Limitations & work-arounds ---------------------------------o
+
+
+ htmLawed's main objective is to make the input text `more` standard-compliant, secure for web-page readers, and free of HTML elements and attributes considered undesirable by the administrator. Some of its current limitations, regardless of this objective, are noted below along with work-arounds.
+
+ It should be borne in mind that no browser application is 100% standard-compliant, and that some of the standard specs (like asking for normalization of white-spacing within 'textarea' elements) are clearly wrong. Regarding security, note that `unsafe` HTML code is not necessarily legally invalid.
+
+ * htmLawed is meant for input that goes into the 'body' of HTML documents. HTML's head-level elements are not supported, nor are the frameset elements 'frameset', 'frame' and 'noframes'.
+
+ * It cannot transform the non-standard 'embed' elements to the standard-compliant 'object' elements. Yet, it can allow 'embed' elements if permitted ('embed' is widely used and supported). Admins can certainly use the 'hook_tag' parameter (section:- #3.4.9) to deploy a custom embed-to-object converter function.
+
+ * The only non-standard element that may be permitted is 'embed'; others like 'noembed' and 'nobr' cannot be permitted without modifying the htmLawed code.
+
+ * It cannot handle input that has non-HTML code like 'SVG' and 'MathML'. One way around is to break the input into pieces and passing only those without non-HTML code to htmLawed. Another is described in section:- #3.9. A third way may be to some how take advantage of the '$config["and_mark"]' parameter (see section:- #3.2).
+
+ * By default, htmLawed won't check many attribute values for standard compliance. E.g., 'width="20m"' with the dimension in non-standard 'm' is let through. Implementing universal and strict attribute value checks can make htmLawed slow and resource-intensive. Admins should look at the 'hook_tag' parameter (section:- #3.4.9) or '$spec' to enforce finer checks.
+
+ * The attributes, deprecated (which can be transformed too) or not, that it supports are largely those that are in the specs. Only a few of the proprietary attributes are supported.
+
+ * Except for contained URLs and dynamic expressions (also optional), htmLawed does not check CSS style property values. Admins should look at using the 'hook_tag' parameter (section:- #3.4.9) or '$spec' for finer checks. Perhaps the best option is to disallow 'style' but allow 'class' attributes with the right 'oneof' or 'match' values for 'class', and have the various class style properties in '.css' CSS stylesheet files.
+
+ * htmLawed does not parse emoticons, decode `BBcode`, or `wikify`, auto-converting text to proper HTML. Similarly, it won't convert line-breaks to 'br' elements. Such functions are beyond its purview. Admins should use other code to pre- or post-process the input for such purposes.
+
+ * htmLawed cannot be used to have links force-opened in new windows (by auto-adding appropriate 'target' and 'onclick' attributes to 'a'). Admins should look at Javascript-based DOM-modifying solutions for this. Admins may also be able to use a custom hook function to enforce such checks ('hook_tag' parameter; see section:- #3.4.9).
+
+ * Nesting-based checks are not possible. E.g., one cannot disallow 'p' elements specifically inside 'td' while permitting it elsewhere. Admins may be able to use a custom hook function to enforce such checks ('hook_tag' parameter; see section:- #3.4.9).
+
+ * Except for optionally converting absolute or relative URLs to the other type, htmLawed will not alter URLs (e.g., to change the value of query strings or to convert 'http' to 'https'. Having absolute URLs may be a standard-requirement, e.g., when HTML is embedded in email messages, whereas altering URLs for other purposes is beyond htmLawed's goals. Admins may be able to use a custom hook function to enforce such checks ('hook_tag' parameter; see section:- #3.4.9).
+
+ * Pairs of opening and closing tags that do not enclose any content (like '<em></em>') are not removed. This may be against the standard specs for certain elements (e.g., 'table'). However, presence of such standard-incompliant code will not break the display or layout of content. Admins can also use simple regex-based code to filter out such code.
+
+ * htmLawed does not check for certain element orderings described in the standard specs (e.g., in a 'table', 'tbody' is allowed before 'tfoot'). Admins may be able to use a custom hook function to enforce such checks ('hook_tag' parameter; see section:- #3.4.9).
+
+ * htmLawed does not check the number of nested elements. E.g., it will allow two 'caption' elements in a 'table' element, illegal as per the specs. Admins may be able to use a custom hook function to enforce such checks ('hook_tag' parameter; see section:- #3.4.9).
+
+ * htmLawed might convert certain entities to actual characters and remove backslashes and CSS comment-markers ('/*') in 'style' attribute values in order to detect malicious HTML like crafted IE-specific dynamic expressions like '&#101;xpression...'. If this is too harsh, admins can allow CSS expressions through htmLawed core but then use a custom function through the 'hook_tag' parameter (section:- #3.4.9) to more specifically identify CSS expressions in the 'style' attribute values. Also, using '$config["style_pass"]', it is possible to have htmLawed pass 'style' attribute values without even looking at them (section:- #3.4.8).
+
+ * htmLawed does not correct certain possible attribute-based security vulnerabilities (e.g., '<a href="http://x%22+style=%22background-image:xss">x</a>'). These arise when browsers mis-identify markup in `escaped` text, defeating the very purpose of escaping text (a bad browser will read the given example as '<a href="http://x" style="background-image:xss">x</a>').
+
+ * Because of poor Unicode support in PHP, htmLawed does not remove the `high value` HTML-invalid characters with multi-byte code-points. Such characters however are extremely unlikely to be in the input. (see section:- #3.1).
+
+ * htmLawed does not check or correct the character encoding of the input it receives. In conjunction with permitting circumstances such as when the character encoding is left undefined through HTTP headers or HTML 'meta' tags, this can permit an exploit (like Google's UTF-7/XSS vulnerability of the past).
+
+ * Like any script using PHP's PCRE regex functions, PHP setup-specific low PCRE limit values can cause htmLawed to at least partially fail with very long input texts.
+
+
+-- 2.9 Examples of usage -------------------------------------------o
+
+
+ Safest, allowing only `safe` HTML markup --
+
+ $config = array('safe'=>1);
+ $out = htmLawed($in);
+
+ Simplest, allowing all valid HTML markup except 'javascript:' --
+
+ $out = htmLawed($in);
+
+ Allowing all valid HTML markup including 'javascript:' --
+
+ $config = array('schemes'=>'*:*');
+ $out = htmLawed($in, $config);
+
+ Allowing only 'safe' HTML and the elements 'a', 'em', and 'strong' --
+
+ $config = array('safe'=>1, 'elements'=>'a, em, strong');
+ $out = htmLawed($in, $config);
+
+ Not allowing elements 'script' and 'object' --
+
+ $config = array('elements'=>'* -script -object');
+ $out = htmLawed($in, $config);
+
+ Not allowing attributes 'id' and 'style' --
+
+ $config = array('deny_attribute'=>'id, style');
+ $out = htmLawed($in, $config);
+
+ Permitting only attributes 'title' and 'href' --
+
+ $config = array('deny_attribute'=>'* -title -href');
+ $out = htmLawed($in, $config);
+
+ Remove bad/disallowed tags altogether instead of converting them to entities --
+
+ $config = array('keep_bad'=>0);
+ $out = htmLawed($in, $config);
+
+ Allowing attribute 'title' only in 'a' and not allowing attributes 'id', 'style', or scriptable `on*` attributes like 'onclick' --
+
+ $config = array('deny_attribute'=>'title, id, style, on*');
+ $spec = 'a=title';
+ $out = htmLawed($in, $config, $spec);
+
+ Some case-studies are presented below.
+
+ *1.* A blog administrator wants to allow only 'a', 'em', 'strike', 'strong' and 'u' in comments, but needs 'strike' and 'u' transformed to 'span' for better XHTML 1-strict compliance, and, he wants the 'a' links to be to 'http' or 'https' resources:
+
+ $processed = htmLawed($in, array('elements'=>'a, em, strike, strong, u', 'make_tag_strict'=>1, 'safe'=>1, 'schemes'=>'*:http, https'), 'a=href');
+
+ *2.* An author uses a custom-made web application to load content on his web-site. He is the only one using that application and the content he generates has all types of HTML, including scripts. The web application uses htmLawed primarily as a tool to correct errors that creep in while writing HTML and to take care of the occasional `bad` characters in copy-paste text introduced by Microsoft Office. The web application provides a preview before submitted input is added to the content. For the previewing process, htmLawed is set up as follows:
+
+ $processed = htmLawed($in, array('css_expression'=>1, 'keep_bad'=>1, 'make_tag_strict'=>1, 'schemes'=>'*:*', 'valid_xhtml'=>1));
+
+ For the final submission process, 'keep_bad' is set to '6'. A value of '1' for the preview process allows the author to note and correct any HTML mistake without losing any of the typed text.
+
+ *3.* A data-miner is scraping information in a specific table of similar web-pages and is collating the data rows, and uses htmLawed to reduce unnecessary markup and white-spaces:
+
+ $processed = htmLawed($in, array('elements'=>'tr, td', 'tidy'=>-1), 'tr, td =');
+
+
+== 3 Details =====================================================oo
+
+
+-- 3.1 Invalid/dangerous characters --------------------------------
+
+
+ Valid characters (more correctly, their code-points) in HTML or XML are, hexadecimally, '9', 'a', 'd', '20' to 'd7ff', and 'e000' to '10ffff', except 'fffe' and 'ffff' (decimally, '9', '10', '13', '32' to '55295', and '57344' to '1114111', except '65534' and '65535'). htmLawed removes the invalid characters '0' to '8', 'b', 'c', and 'e' to '1f'.
+
+ Because of PHP's poor native support for multi-byte characters, htmLawed cannot check for the remaining invalid code-points. However, for various reasons, it is very unlikely for any of those characters to be in the input.
+
+ Characters that are discouraged (see section:- #5.1) but not invalid are not removed by htmLawed.
+
+ It (function 'hl_tag()') also replaces the potentially dangerous (in some Mozilla [Firefox] and Opera browsers) soft-hyphen character (code-point, hexadecimally, 'ad', or decimally, '173') in attribute values with spaces. Where required, the characters '<', '>', '&', and '"' are converted to entities.
+
+ With '$config["clean_ms_char"]' set as '1' or '2', many of the discouraged characters (decimal code-points '127' to '159' except '133') that many Microsoft applications incorrectly use (as per the 'Windows 1252' ['Cp-1252'] or a similar encoding system), and the character for decimal code-point '133', are converted to appropriate decimal numerical entities (or removed for a few cases)-- see appendix in section:- #5.4. This can help avoid some display issues arising from copying-pasting of content.
+
+ With '$config["clean_ms_char"]' set as '2', characters for the hexadecimal code-points '82', '91', and '92' (for special single-quotes), and '84', '93', and '94' (for special double-quotes) are converted to ordinary single and double quotes respectively and not to entities.
+
+ The character values are replaced with entities/characters and not character values referred to by the entities/characters to keep this task independent of the character-encoding of input text.
+
+ The '$config["clean_ms_char"]' parameter should not be used if authors do not copy-paste Microsoft-created text, or if the input text is not believed to use the 'Windows 1252' ('Cp-1252') or a similar encoding like 'Cp-1251'. Further, the input form and the web-pages displaying it or its content should have the character encoding appropriately marked-up.
+
+
+-- 3.2 Character references/entities ------------------------------o
+
+
+ Valid character entities take the form '&*;' where '*' is '#x' followed by a hexadecimal number (hexadecimal numeric entity; like '&#xA0;' for non-breaking space), or alphanumeric like 'gt' (external or named entity; like '&nbsp;' for non-breaking space), or '#' followed by a number (decimal numeric entity; like '&#160;' for non-breaking space). Character entities referring to the soft-hyphen character (the '&shy;' or '\xad' character; hexadecimal code-point 'ad' [decimal '173']) in URL-accepting attribute values are always replaced with spaces; soft-hyphens in attribute values introduce vulnerabilities in some older versions of the Opera and Mozilla [Firefox] browsers.
+
+ htmLawed (function 'hl_ent()'):
+
+ * Neutralizes entities with multiple leading zeroes or missing semi-colons (potentially dangerous)
+
+ * Lowercases the 'X' (for XML-compliance) and 'A-F' of hexadecimal numeric entities
+
+ * Neutralizes entities referring to characters that are HTML-invalid (see section:- #3.1)
+
+ * Neutralizes entities referring to characters that are HTML-discouraged (code-points, hexadecimally, '7f' to '84', '86' to '9f', and 'fdd0' to 'fddf', or decimally, '127' to '132', '134' to '159', and '64991' to '64976'). Entities referring to the remaining discouraged characters (see section:- #5.1 for a full list) are let through.
+
+ * Neutralizes named entities that are not in the specs.
+
+ * Optionally converts valid HTML-specific named entities except '&gt;', '&lt;', '&quot;', and '&amp;' to decimal numeric ones (hexadecimal if $config["hexdec_entity"] is '2') for generic XML-compliance. For this, '$config["named_entity"]' should be '1'.
+
+ * Optionally converts hexadecimal numeric entities to the more widely supported decimal ones. For this, '$config["hexdec_entity"]' should be '0'.
+
+ * Optionally converts decimal numeric entities to the hexadecimal ones. For this, '$config["hexdec_entity"]' should be '2'.
+
+ `Neutralization` refers to the `entitification` of '&' to '&amp;'.
+
+ *Note*: htmLawed does not convert entities to the actual characters represented by them; one can pass the htmLawed output through PHP's 'html_entity_decode' function:- http://www.php.net/html_entity_decode for that.
+
+ *Note*: If '$config["and_mark"]' is set, and set to a value other than '0', then the '&' characters in the original input are replaced with the control character for the hexadecimal code-point '6' ('\x06'; '&' characters introduced by htmLawed, e.g., after converting '<' to '&lt;', are not affected). This allows one to distinguish, say, an '&gt;' introduced by htmLawed and an '&gt;' put in by the input writer, and can be helpful in further processing of the htmLawed-processed text (e.g., to identify the character sequence 'o(><)o' to generate an emoticon image). When this feature is active, admins should ensure that the htmLawed output is not directly used in web pages or XML documents as the presence of the '\x06' can break documents. Before use in such documents, and preferably before any storage, any remaining '\x06' should be changed back to '&', e.g., with:
+
+ $final = str_replace("\x06", '&', $prelim);
+
+ Also, see section:- #3.9.
+
+
+-- 3.3 HTML elements ----------------------------------------------o
+
+
+ htmLawed can be configured to allow only certain HTML elements (tags) in the input. Disallowed elements (just tag-content, and not element-content), based on '$config["keep_bad"]', are either `neutralized` (converted to plain text by entitification of '<' and '>') or removed.
+
+ E.g., with only 'em' permitted:
+
+ Input:
+
+ <em>My</em> website is <a href="http://a.com>a.com</a>.
+
+ Output, with '$config["keep_bad"] = 0':
+
+ <em>My</em> website is a.com.
+
+ Output, with '$config["keep_bad"]' not '0':
+
+ <em>My</em> website is &lt;a href=""&gt;a.com&lt;/a&gt;.
+
+ See section:- #3.3.3 for differences between the various non-zero '$config["keep_bad"]' values.
+
+ htmLawed by default permits these 86 elements:
+
+ a, abbr, acronym, address, applet, area, b, bdo, big, blockquote, br, button, caption, center, cite, code, col, colgroup, dd, del, dfn, dir, div, dl, dt, em, embed, fieldset, font, form, h1, h2, h3, h4, h5, h6, hr, i, iframe, img, input, ins, isindex, kbd, label, legend, li, map, menu, noscript, object, ol, optgroup, option, p, param, pre, q, rb, rbc, rp, rt, rtc, ruby, s, samp, script, select, small, span, strike, strong, sub, sup, table, tbody, td, textarea, tfoot, th, thead, tr, tt, u, ul, var
+
+ Except for 'embed' (included because of its wide-spread use) and the Ruby elements ('rb', 'rbc', 'rp', 'rt', 'rtc', 'ruby'; part of XHTML 1.1), these are all the elements in the HTML 4/XHTML 1 specs. Strict-specific specs. exclude 'center', 'dir', 'font', 'isindex', 'menu', 's', 'strike', and 'u'.
+
+ With '$config["safe"] = 1', the default set will exclude 'applet', 'embed', 'iframe', 'object' and 'script'; see section:- #3.6.
+
+ When '$config["elements"]', which specifies allowed elements, is `properly` defined, and neither empty nor set to '0' or '*', the default set is not used. To have elements added to or removed from the default set, a '+/-' notation is used. E.g., '*-script-object' implies that only 'script' and 'object' are disallowed, whereas '*+embed' means that 'noembed' is also allowed. Elements can also be specified as comma separated names. E.g., 'a, b, i' means only 'a', 'b' and 'i' are permitted. In this notation, '*', '+' and '-' have no significance and can actually cause a mis-reading.
+
+ Some more examples of '$config["elements"]' values indicating permitted elements (note that empty spaces are liberally allowed for clarity):
+
+ * 'a, blockquote, code, em, strong' -- only 'a', 'blockquote', 'code', 'em', and 'strong'
+ * '*-script' -- all excluding 'script'
+ * '* -center -dir -font -isindex -menu -s -strike -u' -- only XHTML-Strict elements
+ * '*+noembed-script' -- all including 'noembed' excluding 'script'
+
+ Some mis-usages (and the resulting permitted elements) that can be avoided:
+
+ * '-*' -- none; instead of htmLawed, one might just use, e.g., the 'htmlspecialchars()' PHP function
+ * '*, -script' -- all except 'script'; admin probably meant '*-script'
+ * '-*, a, em, strong' -- all; admin probably meant 'a, em, strong'
+ * '*' -- all; admin need not have set 'elements'
+ * '*-form+form' -- all; a '+' will always over-ride any '-'
+ * '*, noembed' -- only 'noembed'; admin probably meant '*+noembed'
+ * 'a, +b, i' -- only 'a' and 'i'; admin probably meant 'a, b, i'
+
+ Basically, when using the '+/-' notation, commas (',') should not be used, and vice versa, and '*' should be used with the former but not the latter.
+
+ *Note*: Even if an element that is not in the default set is allowed through '$config["elements"]', like 'noembed' in the last example, it will eventually be removed during tag balancing unless such balancing is turned off ('$config["balance"]' set to '0'). Currently, the only way around this, which actually is simple, is to edit the various arrays in the function 'hl_bal()' to accommodate the element and its nesting properties.
+
+ *A possibly second way to specify allowed elements* is to set '$config["parent"]' to an element name that supposedly will hold the input, and to set '$config["balance"]' to '1'. During tag balancing (see section:- #3.3.3), all elements that cannot legally nest inside the parent element will be removed. The parent element is auto-reset to 'div' if '$config["parent"]' is empty, 'body', or an element not in htmLawed's default set of 86 elements.
+
+ `Tag transformation` is possible for improving XHTML-Strict compliance -- most of the deprecated elements are removed or converted to valid XHTML-Strict ones; see section:- #3.3.2.
+
+
+.. 3.3.1 Handling of comments and CDATA sections ...................
+
+
+ 'CDATA' sections have the format '<![CDATA[...anything but not "]]>"...]]>', and HTML comments, '<!--...anything but not "-->"... -->'. Neither HTML comments nor 'CDATA' sections can reside inside tags. HTML comments can exist anywhere else, but 'CDATA' sections can exist only where plain text is allowed (e.g., immediately inside 'td' element content but not immediately inside 'tr' element content).
+
+ htmLawed (function 'hl_cmtcd()') handles HTML comments or 'CDATA' sections depending on the values of '$config["comment"]' or '$config["cdata"]'. If '0', such markup is not looked for and the text is processed like plain text. If '1', it is removed completely. If '2', it is preserved but any '<', '>' and '&' inside are changed to entities. If '3', they are left as such.
+
+ Note that for the last two cases, HTML comments and 'CDATA' sections will always be removed from tag content (function 'hl_tag()').
+
+ Examples:
+
+ Input:
+ <!-- home link --><a href="home.htm"><![CDATA[x=&y]]>Home</a>
+ Output ('$config["comment"] = 0, $config["cdata"] = 2'):
+ &lt;-- home link --&gt;<a href="home.htm"><![CDATA[x=&amp;y]]>Home</a>
+ Output ('$config["comment"] = 1, $config["cdata"] = 2'):
+ <a href="home.htm"><![CDATA[x=&amp;y]]>Home</a>
+ Output ('$config["comment"] = 2, $config["cdata"] = 2'):
+ <!-- home link --><a href="home.htm"><![CDATA[x=&amp;y]]>Home</a>
+ Output ('$config["comment"] = 2, $config["cdata"] = 1'):
+ <!-- home link --><a href="home.htm">Home</a>
+ Output ('$config["comment"] = 3, $config["cdata"] = 3'):
+ <!-- home link --><a href="home.htm"><![CDATA[x=&y]]>Home</a>
+
+ For standard-compliance, comments are given the form '<!--comment -->', and any '--' in the content is made '-'.
+
+ When '$config["safe"] = 1', CDATA sections and comments are considered plain text unless '$config["comment"]' or '$config["cdata"]' is explicitly specified; see section:- #3.6.
+
+
+.. 3.3.2 Tag-transformation for better XHTML-Strict ................o
+
+
+ If '$config["make_tag_strict"]' is set and not '0', following non-XHTML-Strict elements (and attributes), even if admin-permitted, are mutated as indicated (element content remains intact; function 'hl_tag2()'):
+
+ * applet - (based on '$config["make_tag_strict"]', unchanged ('1') or removed ('2'))
+ * center - 'div style="text-align: center;"'
+ * dir - 'ul'
+ * embed - (based on '$config["make_tag_strict"]', unchanged ('1') or removed ('2'))
+ * font (face, size, color) - 'span style="font-family: ; font-size: ; color: ;"' (size transformation reference:- http://style.cleverchimp.com/font_size_intervals/altintervals.html)
+ * isindex - (based on '$config["make_tag_strict"]', unchanged ('1') or removed ('2'))
+ * menu - 'ul'
+ * s - 'span style="text-decoration: line-through;"'
+ * strike - 'span style="text-decoration: line-through;"'
+ * u - 'span style="text-decoration: underline;"'
+
+ For an element with a pre-existing 'style' attribute value, the extra style properties are appended.
+
+ Example input:
+
+ <center>
+ The PHP <s>software</s> script used for this <strike>web-page</strike> web-page is <font style="font-weight: bold " face=arial size='+3' color = "red ">htmLawedTest.php</font>, from <u style= 'color:green'>PHP Labware</u>.
+ </center>
+
+ The output:
+
+ <div style="text-align: center;">
+ The PHP <span style="text-decoration: line-through;">software</span> script used for this <span style="text-decoration: line-through;">web-page</span> web-page is <span style="font-weight: bold; font-family: arial; color: red; font-size: 200%;">htmLawedTest.php</span>, from <span style="color:green; text-decoration: underline;">PHP Labware</span>.
+ </div>
+
+
+-- 3.3.3 Tag balancing and proper nesting -------------------------o
+
+
+ If '$config["balance"]' is set to '1', htmLawed (function 'hl_bal()') checks and corrects the input to have properly balanced tags and legal element content (i.e., any element nesting should be valid, and plain text may be present only in the content of elements that allow them).
+
+ Depending on the value of '$config["keep_bad"]' (see section:- #2.2 and section:- #3.3), illegal content may be removed or neutralized to plain text by converting < and > to entities:
+
+ '0' - remove; this option is available only to maintain Kses-compatibility and should not be used otherwise (see section:- #2.6)
+ '1' - neutralize tags and keep element content
+ '2' - remove tags but keep element content
+ '3' and '4' - like '1' and '2', but keep element content only if text ('pcdata') is valid in parent element as per specs
+ '5' and '6' - like '3' and '4', but line-breaks, tabs and spaces are left
+
+ Example input (disallowing the 'p' element):
+
+ <*> Pseudo-tags <*>
+ <xml>Non-HTML tag xml</xml>
+ <p>
+ Disallowed tag p
+ </p>
+ <ul>Bad<li>OK</li></ul>
+
+ The output with '$config["keep_bad"] = 1':
+
+ &lt;*&gt; Pseudo-tags &lt;*&gt;
+ &lt;xml&gt;Non-HTML tag xml&lt;/xml&gt;
+ &lt;p&gt;
+ Disallowed tag p
+ &lt;/p&gt;
+ <ul>Bad<li>OK</li></ul>
+
+ The output with '$config["keep_bad"] = 3':
+
+ &lt;*&gt; Pseudo-tags &lt;*&gt;
+ &lt;xml&gt;Non-HTML tag xml&lt;/xml&gt;
+ &lt;p&gt;
+ Disallowed tag p
+ &lt;/p&gt;
+ <ul><li>OK</li></ul>
+
+ The output with '$config["keep_bad"] = 6':
+
+ &lt;*&gt; Pseudo-tags &lt;*&gt;
+ Non-HTML tag xml
+
+ Disallowed tag p
+
+ <ul><li>OK</li></ul>
+
+ An option like '1' is useful, e.g., when a writer previews his submission, whereas one like '3' is useful before content is finalized and made available to all.
+
+ *Note:* In the example above, unlike '<*>', '<xml>' gets considered as a tag (even though there is no HTML element named 'xml'). In general, text matching the regular expression pattern '<(/?)([a-zA-Z][a-zA-Z1-6]*)([^>]*?)\s?>' is considered a tag (phrase enclosed by the angled brackets '<' and '>', and starting [with an optional slash preceding] with an alphanumeric word that starts with an alphabet...).
+
+ Nesting/content rules for each of the 86 elements in htmLawed's default set (see section:- #3.3) are defined in function 'hl_bal()'. This means that if a non-standard element besides 'embed' is being permitted through '$config["elements"]', the element's tag content will end up getting removed if '$config["balance"]' is set to '1'.
+
+ Plain text and/or certain elements nested inside 'blockquote', 'form', 'map' and 'noscript' need to be in block-level elements. This point is often missed during manual writing of HTML code. htmLawed attempts to address this during balancing. E.g., if the parent container is set as 'form', the input 'B:<input type="text" value="b" />C:<input type="text" value="c" />' is converted to '<div>B:<input type="text" value="b" />C:<input type="text" value="c" /></div>'.
+
+
+-- 3.3.4 Elements requiring child elements ------------------------o
+
+
+ As per specs, the following elements require legal child elements nested inside them:
+
+ blockquote, dir, dl, form, map, menu, noscript, ol, optgroup, rbc, rtc, ruby, select, table, tbody, tfoot, thead, tr, ul
+
+ In some cases, the specs stipulate the number and/or the ordering of the child elements. A 'table' can have 0 or 1 'caption', 'tbody', 'tfoot', and 'thead', but they must be in this order: 'caption', 'thead', 'tfoot', 'tbody'.
+
+ htmLawed currently does not check for conformance to these rules. Note that any non-compliance in this regard will not introduce security vulnerabilities, crash browser applications, or affect the rendering of web-pages.
+
+ With '$config["direct_list_nest"]' set to '1', htmLawed will allow direct nesting of an 'ol' or 'ul' list within another 'ol' or 'ul' without requiring the child list to be within an 'li' of the parent list. While this is not standard-compliant, directly nested lists are rendered properly by almost all browsers. The parameter '$config["direct_list_nest"]' has no effect if tag-balancing (section:- #3.3.3) is turned off.
+
+
+-- 3.3.5 Beautify or compact HTML ---------------------------------o
+
+
+ By default, htmLawed will neither `beautify` HTML code by formatting it with indentations, etc., nor will it make it compact by removing un-needed white-space.(It does always properly white-space tag content.)
+
+ As per the HTML standards, spaces, tabs and line-breaks in web-pages (except those inside 'pre' elements) are all considered equivalent, and referred to as `white-spaces`. Browser applications are supposed to consider contiguous white-spaces as just a single space, and to disregard white-spaces trailing opening tags or preceding closing tags. This white-space `normalization` allows the use of text/code beautifully formatted with indentations and line-spacings for readability. Such `pretty` HTML can, however, increase the size of web-pages, or make the extraction or scraping of plain text cumbersome.
+
+ With the '$config' parameter 'tidy', htmLawed can be used to beautify or compact the input text. Input with just plain text and no HTML markup is also subject to this. Besides 'pre', the 'script' and 'textarea' elements, CDATA sections, and HTML comments are not subjected to the tidying process.
+
+ To `compact`, use '$config["tidy"] = -1'; single instances or runs of white-spaces are replaced with a single space, and white-spaces trailing and leading open and closing tags, respectively, are removed.
+
+ To `beautify`, '$config["tidy"]' is set as '1', or for customized tidying, as a string like '2s2n'. The 's' or 't' character specifies the use of spaces or tabs for indentation. The first and third characters, any of the digits 0-9, specify the number of spaces or tabs per indentation, and any parental lead spacing (extra indenting of the whole block of input text). The 'r' and 'n' characters are used to specify line-break characters: 'n' for '\n' (Unix/Mac OS X line-breaks), 'rn' or 'nr' for '\r\n' (Windows/DOS line-breaks), or 'r' for '\r'.
+
+ The '$config["tidy"]' value of '1' is equivalent to '2s0n'. Other '$config["tidy"]' values are read loosely: a value of '4' is equivalent to '4s0n'; 't2', to '1t2n'; 's', to '2s0n'; '2TR', to '2t0r'; 'T1', to '1t1n'; 'nr3', to '3s0nr', and so on. Except in the indentations and line-spacings, runs of white-spaces are replaced with a single space during beautification.
+
+ Input formatting using '$config["tidy"]' is not recommended when input text has mixed markup (like HTML + PHP).
+
+
+-- 3.4 Attributes ------------------------------------------------oo
+
+
+ htmLawed will only permit attributes described in the HTML specs (including deprecated ones). It also permits some attributes for use with the 'embed' element (the non-standard 'embed' element is supported in htmLawed because of its widespread use), and the the 'xml:space' attribute (valid only in XHTML 1.1). A list of such 111 attributes and the elements they are allowed in is in section:- #5.2.
+
+ When '$config["deny_attribute"]' is not set, or set to '0', or empty ('""'), all the 111 attributes are permitted. Otherwise, '$config["deny_attribute"]' can be set as a list of comma-separated names of the denied attributes. 'on*' can be used to refer to the group of potentially dangerous, script-accepting attributes: 'onblur', 'onchange', 'onclick', 'ondblclick', 'onfocus', 'onkeydown', 'onkeypress', 'onkeyup', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onreset', 'onselect' and 'onsubmit'.
+
+ Note that attributes specified in '$config["deny_attribute"]' are denied globally, for all elements. To deny attributes for only specific elements, '$spec' (see section:- #2.3) can be used. '$spec' can also be used to element-specifically permit an attribute otherwise denied through '$config["deny_attribute"]'.
+
+ With '$config["safe"] = 1' (section:- #3.6), the 'on*' attributes are automatically disallowed.
+
+ *Note*: To deny all but a few attributes globally, a simpler way to specify '$config["deny_attribute"]' would be to use the notation '* -attribute1 -attribute2 ...'. Thus, a value of '* -title -href' implies that except 'href' and 'title' (where allowed as per standards) all other attributes are to be removed. With this notation, the value for the parameter 'safe' (section:- #3.6) will have no effect on 'deny_attribute'.
+
+ htmLawed (function 'hl_tag()') also:
+
+ * Lower-cases attribute names
+ * Removes duplicate attributes (last one stays)
+ * Gives attributes the form 'name="value"' and single-spaces them, removing unnecessary white-spacing
+ * Provides `required` attributes (see section:- #3.4.1)
+ * Double-quotes values and escapes any '"' inside them
+ * Replaces the possibly dangerous soft-hyphen characters (hexadecimal code-point 'ad') in the values with spaces
+ * Allows custom function to additionally filter/modify attribute values (see section:- #3.4.9)
+
+
+.. 3.4.1 Auto-addition of XHTML-required attributes ................
+
+
+ If indicated attributes for the following elements are found missing, htmLawed (function 'hl_tag()') will add them (with values same as attribute names unless indicated otherwise below):
+
+ * area - alt ('area')
+ * area, img - src, alt ('image')
+ * bdo - dir ('ltr')
+ * form - action
+ * map - name
+ * optgroup - label
+ * param - name
+ * script - type ('text/javascript')
+ * textarea - rows ('10'), cols ('50')
+
+ Additionally, with '$config["xml:lang"]' set to '1' or '2', if the 'lang' but not the 'xml:lang' attribute is declared, then the latter is added too, with a value copied from that of 'lang'. This is for better standard-compliance. With '$config["xml:lang"]' set to '2', the 'lang' attribute is removed (XHTML 1.1 specs).
+
+ Note that the 'name' attribute for 'map', invalid in XHTML 1.1, is also transformed if required -- see section:- #3.4.6.
+
+
+.. 3.4.2 Duplicate/invalid 'id' values ............................o
+
+
+ If '$config["unique_ids"]' is '1', htmLawed (function 'hl_tag()') removes 'id' attributes with values that are not XHTML-compliant (must begin with a letter and can contain letters, digits, ':', '.', '-' and '_') or duplicate. If '$config["unique_ids"]' is a word, any duplicate but otherwise valid value will be appropriately prefixed with the word to ensure its uniqueness. The word should begin with a letter and should contain only letters, numbers, ':', '.', '_' and '-'.
+
+ Even if multiple inputs need to be filtered (through multiple calls to htmLawed), htmLawed ensures uniqueness of 'id' values as it uses a global variable ('$GLOBALS["hl_Ids"]' array). Further, an admin can restrict the use of certain 'id' values by presetting this variable before htmLawed is called into use. E.g.:
+
+ $GLOBALS['hl_Ids'] = array('top'=>1, 'bottom'=>1, 'myform'=>1); // id values not allowed in input
+ $processed = htmLawed($text); // filter input
+
+
+.. 3.4.3 URL schemes (protocols) and scripts in attribute values ............o
+
+
+ htmLawed edits attributes that take URLs as values if they are found to contain un-permitted schemes. E.g., if the 'afp' scheme is not permitted, then '<a href="afp://domain.org">' becomes '<a href="denied:afp://domain.org">', and if Javascript is not permitted '<a onclick="javascript:xss();">' becomes '<a onclick="denied:javascript:xss();">'.
+
+ By default htmLawed permits these schemes in URLs for the 'href' attribute:
+
+ aim, feed, file, ftp, gopher, http, https, irc, mailto, news, nntp, sftp, ssh, telnet
+
+ Also, only 'file', 'http' and 'https' are permitted in attributes whose names start with 'o' (like 'onmouseover'), and in these attributes that accept URLs:
+
+ action, cite, classid, codebase, data, href, longdesc, model, pluginspage, pluginurl, src, style, usemap
+
+ These default sets are used when '$config["schemes"]' is not set (see section:- #2.2). To over-ride the defaults, '$config["schemes"]' is defined as a string of semi-colon-separated sub-strings of type 'attribute: comma-separated schemes'. E.g., 'href: mailto, http, https; onclick: javascript; src: http, https'. For unspecified attributes, 'file', 'http' and 'https' are permitted. This can be changed by passing schemes for '*' in '$config["schemes"]'. E.g., 'href: mailto, http, https; *: https, https'.
+
+ '*' can be put in the list of schemes to permit all protocols. E.g., 'style: *; img: http, https' results in protocols not being checked in 'style' attribute values. However, in such cases, any relative-to-absolute URL conversion, or vice versa, (section:- #3.4.4) is not done.
+
+ Thus, `to allow Javascript`, one can set '$config["schemes"]' as 'href: mailto, http, https; *: http, https, javascript', or 'href: mailto, http, https, javascript; *: http, https, javascript', or '*: *', and so on.
+
+ As a side-note, one may find 'style: *' useful as URLs in 'style' attributes can be specified in a variety of ways, and the patterns that htmLawed uses to identify URLs may mistakenly identify non-URL text.
+
+ '!' can be put in the list of schemes to disallow all protocols as well as `local` URLs. Thus, with 'href: http, style: !', '<a href="http://cnn.com" style="background-image: url('local.jpg');">CNN</a>' will become '<a href="http://cnn.com" style="background-image: url('denied:local.jpg');">CNN</a>'.
+
+ *Note*: If URL-accepting attributes other than those listed above are being allowed, then the scheme will not be checked unless the attribute name contains the string 'src' (e.g., 'dynsrc') or starts with 'o' (e.g., 'onbeforecopy').
+
+ With '$config["safe"] = 1', all URLs are disallowed in the 'style' attribute values.
+
+
+.. 3.4.4 Absolute & relative URLs in attribute values .............o
+
+
+ htmLawed can make absolute URLs in attributes like 'href' relative ('$config["abs_url"]' is '-1'), and vice versa ('$config["abs_url"]' is '1'). URLs in scripts are not considered for this, and so are URLs like '#section_6' (fragment), '?name=Tim#show' (starting with query string), and ';var=1?name=Tim#show' (starting with parameters). Further, this requires that '$config["base_url"]' be set properly, with the '://' and a trailing slash ('/'), with no query string, etc. E.g., 'file:///D:/page/', 'https://abc.com/x/y/', or 'http://localhost/demo/' are okay, but 'file:///D:/page/?help=1', 'abc.com/x/y/' and 'http://localhost/demo/index.htm' are not.
+
+ For making absolute URLs relative, only those URLs that have the '$config["base_url"]' string at the beginning are converted. E.g., with '$config["base_url"] = "https://abc.com/x/y/"', 'https://abc.com/x/y/a.gif' and 'https://abc.com/x/y/z/b.gif' become 'a.gif' and 'z/b.gif' respectively, while 'https://abc.com/x/c.gif' is not changed.
+
+ When making relative URLs absolute, only values for scheme, network location (host-name) and path values in the base URL are inherited. See section:- #5.5 for more about the URL specification as per RFC 1808:- http://www.ietf.org/rfc/rfc1808.txt.
+
+
+.. 3.4.5 Lower-cased, standard attribute values ....................o
+
+
+ Optionally, for standard-compliance, htmLawed (function 'hl_tag()') lower-cases standard attribute values to give, e.g., 'input type="password"' instead of 'input type="Password"', if '$config["lc_std_val"]' is '1'. Attribute values matching those listed below for any of the elements (plus those for the 'type' attribute of 'button' or 'input') are lower-cased:
+
+ all, baseline, bottom, button, center, char, checkbox, circle, col, colgroup, cols, data, default, file, get, groups, hidden, image, justify, left, ltr, middle, none, object, password, poly, post, preserve, radio, rect, ref, reset, right, row, rowgroup, rows, rtl, submit, text, top
+
+ a, area, bdo, button, col, form, img, input, object, option, optgroup, param, script, select, table, td, tfoot, th, thead, tr, xml:space
+
+ The following `empty` (`minimized`) attributes are always assigned lower-cased values (same as the names):
+
+ checked, compact, declare, defer, disabled, ismap, multiple, nohref, noresize, noshade, nowrap, readonly, selected
+
+
+.. 3.4.6 Transformation of deprecated attributes ..................o
+
+
+ If '$config["no_deprecated_attr"]' is '0', then deprecated attributes (see appendix in section:- #5.2) are removed and, in most cases, their values are transformed to CSS style properties and added to the 'style' attributes (function 'hl_tag()'). Except for 'bordercolor' for 'table', 'tr' and 'td', the scores of proprietary attributes that were never part of any cross-browser standard are not supported.
+
+ *Note*: The attribute 'target' for 'a' is allowed even though it is not in XHTML 1.0 specs. This is because of the attribute's wide-spread use and browser-support, and because the attribute is valid in XHTML 1.1 onwards.
+
+ * align - for 'img' with value of 'left' or 'right', becomes, e.g., 'float: left'; for 'div' and 'table' with value 'center', becomes 'margin: auto'; all others become, e.g., 'text-align: right'
+
+ * bgcolor - E.g., 'bgcolor="#ffffff"' becomes 'background-color: #ffffff'
+ * border - E.g., 'height= "10"' becomes 'height: 10px'
+ * bordercolor - E.g., 'bordercolor=#999999' becomes 'border-color: #999999;'
+ * compact - 'font-size: 85%'
+ * clear - E.g., 'clear="all" becomes 'clear: both'
+
+ * height - E.g., 'height= "10"' becomes 'height: 10px' and 'height="*"' becomes 'height: auto'
+
+ * hspace - E.g., 'hspace="10"' becomes 'margin-left: 10px; margin-right: 10px'
+ * language - 'language="VBScript"' becomes 'type="text/vbscript"'
+ * name - E.g., 'name="xx"' becomes 'id="xx"'
+ * noshade - 'border-style: none; border: 0; background-color: gray; color: gray'
+ * nowrap - 'white-space: nowrap'
+ * size - E.g., 'size="10"' becomes 'height: 10px'
+ * start - removed
+ * type - E.g., 'type="i"' becomes 'list-style-type: lower-roman'
+ * value - removed
+ * vspace - E.g., 'vspace="10"' becomes 'margin-top: 10px; margin-bottom: 10px'
+ * width - like 'height'
+
+ Example input:
+
+ <img src="j.gif" alt="image" name="dad's" /><img src="k.gif" alt="image" id="dad_off" name="dad" />
+ <br clear="left" />
+ <hr noshade size="1" />
+ <img name="img" src="i.gif" align="left" alt="image" hspace="10" vspace="10" width="10em" height="20" border="1" style="padding:5px;" />
+ <table width="50em" align="center" bgcolor="red">
+ <tr>
+ <td width="20%">
+ <div align="center">
+ <h3 align="right">Section</h3>
+ <p align="right">Para</p>
+ <ol type="a" start="e"><li value="x">First item</li></ol>
+ </div>
+ </td>
+ <td width="*">
+ <ol type="1"><li>First item</li></ol>
+ </td>
+ </tr>
+ </table>
+ <br clear="all" />
+
+ And the output with '$config["no_deprecated_attr"] = 1':
+
+ <img src="j.gif" alt="image" /><img src="k.gif" alt="image" id="dad_off" />
+ <br style="clear: left;" />
+ <hr style="border-style: none; border: 0; background-color: gray; color: gray; size: 1px;" />
+ <img src="i.gif" alt="image" width="10em" height="20" style="padding:5px; float: left; margin-left: 10px; margin-right: 10px; margin-top: 10px; margin-bottom: 10px; border: 1px;" id="img" />
+ <table width="50em" style="margin: auto; background-color: red;">
+ <tr>
+ <td style="width: 20%;">
+ <div style="margin: auto;">
+ <h3 style="text-align: right;">Section</h3>
+ <p style="text-align: right;">Para</p>
+ <ol style="list-style-type: lower-latin;"><li>First item</li></ol>
+ </div>
+ </td>
+ <td style="width: auto;">
+ <ol style="list-style-type: decimal;"><li>First item</li></ol>
+ </td>
+ </tr>
+ </table>
+ <br style="clear: both;" />
+
+ For 'lang', deprecated in XHTML 1.1, transformation is taken care of through '$config["xml:lang"]'; see section:- #3.4.1.
+
+ The attribute 'name' is deprecated in 'form', 'iframe', and 'img', and is replaced with 'id' if an 'id' attribute doesn't exist and if the 'name' value is appropriate for 'id'. For such replacements for 'a' and 'map', for which the 'name' attribute is deprecated in XHTML 1.1, '$config["no_deprecated_attr"]' should be set to '2' (when set to '1', for these two elements, the 'name' attribute is retained).
+
+
+-- 3.4.7 Anti-spam & 'href' ---------------------------------------o
+
+
+ htmLawed (function 'hl_tag()') can check the 'href' attribute values (link addresses) as an anti-spam (email or link spam) measure.
+
+ If '$config["anti_mail_spam"]' is not '0', the '@' of email addresses in 'href' values like 'mailto:a@b.com' is replaced with text specified by '$config["anti_mail_spam"]'. The text should be of a form that makes it clear to others that the address needs to be edited before a mail is sent; e.g., '<remove_this_antispam>@' (makes the example address 'a<remove_this_antispam>@b.com').
+
+ For regular links, one can choose to have a 'rel' attribute with 'nofollow' in its value (which tells some search engines to not follow a link). This can discourage link spammers. Additionally, or as an alternative, one can choose to empty the 'href' value altogether (disable the link).
+
+ For use of these options, '$config["anti_link_spam"]' should be set as an array with values 'regex1' and 'regex2', both or one of which can be empty (like 'array("", "regex2")') to indicate that that option is not to be used. Otherwise, 'regex1' or 'regex2' should be PHP- and PCRE-compatible regular expression patterns: 'href' values will be matched against them and those matching the pattern will accordingly be treated.
+
+ Note that the regular expressions should have `delimiters`, and be well-formed and preferably fast. Absolute efficiency/accuracy is often not needed.
+
+ An example, to have a 'rel' attribute with 'nofollow' for all links, and to disable links that do not point to domains 'abc.com' and 'xyz.org':
+
+ $config["anti_link_spam"] = array('`.`', '`://\W*(?!(abc\.com|xyz\.org))`');
+
+
+-- 3.4.8 Inline style properties ----------------------------------o
+
+
+ htmLawed can check URL schemes and dynamic expressions (to guard against Javascript, etc., script-based insecurities) in inline CSS style property values in the 'style' attributes. (CSS properties like 'background-image' that accept URLs in their values are noted in section:- #5.3.) Dynamic CSS expressions that allow scripting in the IE browser, and can be a vulnerability, can be removed from property values by setting '$config["css_expression"]' to '1' (default setting). Note that when '$config["css_expression"]' is set to '1', htmLawed will remove '/*' from the 'style' values.
+
+ *Note*: Because of the various ways of representing characters in attribute values (URL-escapement, entitification, etc.), htmLawed might alter the values of the 'style' attribute values, and may even falsely identify dynamic CSS expressions and URL schemes in them. If this is an important issue, checking of URLs and dynamic expressions can be turned off ('$config["schemes"] = "...style:*..."', see section:- #3.4.3, and '$config["css_expression"] = 0'). Alternately, admins can use their own custom function for finer handling of 'style' values through the 'hook_tag' parameter (see section:- #3.4.9).
+
+ It is also possible to have htmLawed let through any 'style' value by setting '$config["style_pass"]' to '1'.
+
+ As such, it is better to set up a CSS file with class declarations, disallow the 'style' attribute, set a '$spec' rule (see section:- #2.3) for 'class' for the 'oneof' or 'match' parameter, and ask writers to make use of the 'class' attribute.
+
+
+-- 3.4.9 Hook function for tag content ----------------------------o
+
+
+ It is possible to utilize a custom hook function to alter the tag content htmLawed has finalized (i.e., after it has checked/corrected for required attributes, transformed attributes, lower-cased attribute names, etc.).
+
+ When '$config' parameter 'hook_tag' is set to the name of a function, htmLawed (function 'hl_tag()') will pass on the element name, and, in the case of an opening tag, the `finalized` attribute name-value pairs as array elements to the function. The function, after completing a task such as filtering or tag transformation, will typically return an empty string, the full opening tag string like '<element_name attribute_1_name="attribute_1_value"...>' (for empty elements like 'img' and 'input', the element-closing slash '/' should also be included), etc.
+
+ Any 'hook_tag' function, since htmLawed version 1.1.11, also receives names of elements in closing tags, such as 'a' in the closing '</a>' tag of the element '<a href="http://cnn.com">CNN</a>'. Unlike for opening tags, no other value (i.e., the attribute name-value array) is passed to the function since a closing tag contains only element names. Typically, the function will return an empty string or a full closing tag (like '</a>').
+
+ This is a *powerful functionality* that can be exploited for various objectives: consolidate-and-convert inline 'style' attributes to 'class', convert 'embed' elements to 'object', permit only one 'caption' element in a 'table' element, disallow embedding of certain types of media, *inject HTML*, use CSSTidy:- http://csstidy.sourceforge.net to sanitize 'style' attribute values, etc.
+
+ As an example, the custom hook code below can be used to force a series of specifically ordered 'id' attributes on all elements, and a specific 'param' element inside all 'object' elements:
+
+ function my_tag_function($element, $attribute_array=0){
+
+ // If second argument is not received, it means a closing tag is being handled
+ if(is_numeric($attribute_array)){
+ return "</$element>";
+ }
+
+ static $id = 0;
+ // Remove any duplicate element
+ if($element == 'param' && isset($attribute_array['allowscriptaccess'])){
+ return '';
+ }
+
+ $new_element = '';
+
+ // Force a serialized ID number
+ $attribute_array['id'] = 'my_'. $id;
+ ++$id;
+
+ // Inject param for allowscriptaccess
+ if($element == 'object'){
+ $new_element = '<param id='my_'. $id; allowscriptaccess="never" />';
+ ++$id;
+ }
+
+ $string = '';
+ foreach($attribute_array as $k=>$v){
+ $string .= " {$k}=\"{$v}\"";
+ }
+
+ static $empty_elements = array('area'=>1, 'br'=>1, 'col'=>1, 'embed'=>1, 'hr'=>1, 'img'=>1, 'input'=>1, 'isindex'=>1, 'param'=>1);
+
+ return "<{$element}{$string}". (isset($in_array($element, $empty_elements) ? ' /' : ''). '>'. $new_element;
+ }
+
+ The 'hook_tag' parameter is different from the 'hook' parameter (section:- #3.7).
+
+ Snippets of hook function code developed by others may be available on the htmLawed:- http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed website.
+
+
+-- 3.5 Simple configuration directive for most valid XHTML -------oo
+
+
+ If '$config["valid_xhtml"]' is set to '1', some relevant '$config' parameters (indicated by '~' in section:- #2.2) are auto-adjusted. This allows one to pass the '$config' argument with a simpler value. If a value for a parameter auto-set through 'valid_xhtml' is still manually provided, then that value will over-ride the auto-set value.
+
+
+-- 3.6 Simple configuration directive for most `safe` HTML --------o
+
+
+ `Safe` HTML refers to HTML that is restricted to reduce the vulnerability for scripting attacks (such as XSS) based on HTML code which otherwise may still be legal and compliant with the HTML standard specs. When elements such as 'script' and 'object', and attributes such as 'onmouseover' and 'style' are allowed in the input text, an input writer can introduce malevolent HTML code. Note that what is considered 'safe' depends on the nature of the web application and the trust-level accorded to its users.
+
+ htmLawed allows an admin to use '$config["safe"]' to auto-adjust multiple '$config' parameters (such as 'elements' which declares the allowed element-set), which otherwise would have to be manually set. The relevant parameters are indicated by '"' in section:- #2.2). Thus, one can pass the '$config' argument with a simpler value.
+
+ With the value of '1', htmLawed considers 'CDATA' sections and HTML comments as plain text, and prohibits the 'applet', 'embed', 'iframe', 'object' and 'script' elements, and the 'on*' attributes like 'onclick'. ( There are '$config' parameters like 'css_expression' that are not affected by the value set for 'safe' but whose default values still contribute towards a more `safe` output.) Further, URLs with schemes (see section:- #3.4.3) are neutralized so that, e.g., 'style="moz-binding:url(http://danger)"' becomes 'style="moz-binding:url(denied:http://danger)"'.
+
+ Admins, however, may still want to completely deny the 'style' attribute, e.g., with code like
+
+ $processed = htmLawed($text, array('safe'=>1, 'deny_attribute'=>'style'));
+
+ Permitting the 'style' attribute brings in risks of `click-jacking`, etc. CSS property values can render a page non-functional or be used to deface it. Except for URLs, dynamic expressions, and some other things, htmLawed does not completely check 'style' values. It does provide ways for the code-developer implementing htmLawed to do such checks through the '$spec' argument, and through the 'hook_tag' parameter (see section:- #3.4.8 for more). Disallowing style completely and relying on CSS classes and stylesheet files is recommended.
+
+ If a value for a parameter auto-set through 'safe' is still manually provided, then that value can over-ride the auto-set value. E.g., with '$config["safe"] = 1' and '$config["elements"] = "*+script"', 'script', but not 'applet', is allowed.
+
+ A page illustrating the efficacy of htmLawed's anti-XSS abilities with 'safe' set to '1' against XSS vectors listed by RSnake:- http://ha.ckers.org/xss.html may be available here:- http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed/rsnake/RSnakeXSSTest.htm.
+
+
+-- 3.7 Using a hook function --------------------------------------o
+
+
+ If '$config["hook"]' is not set to '0', then htmLawed will allow preliminarily processed input to be altered by a hook function named by '$config["hook"]' before starting the main work (but after handling of characters, entities, HTML comments and 'CDATA' sections -- see code for function 'htmLawed()').
+
+ The hook function also allows one to alter the `finalized` values of '$config' and '$spec'.
+
+ Note that the 'hook' parameter is different from the 'hook_tag' parameter (section:- #3.4.9).
+
+ Snippets of hook function code developed by others may be available on the htmLawed:- http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed website.
+
+
+-- 3.8 Obtaining `finalized` parameter values ---------------------o
+
+
+ htmLawed can assign the `finalized` '$config' and '$spec' values to a variable named by '$config["show_setting"]'. The variable, made global by htmLawed, is set as an array with three keys: 'config', with the '$config' value, 'spec', with the '$spec' value, and 'time', with a value that is the Unix time (the output of PHP's 'microtime()' function) when the value was assigned. Admins should use a PHP-compliant variable name (e.g., one that does not begin with a numerical digit) that does not conflict with variable names in their non-htmLawed code.
+
+ The values, which are also post-hook function (if any), can be used to auto-generate information (on, e.g., the elements that are permitted) for input writers.
+
+
+-- 3.9 Retaining non-HTML tags in input with mixed markup ---------o
+
+
+ htmLawed does not remove certain characters that though invalid are nevertheless discouraged in HTML documents as per the specs (see section:- #5.1). This can be utilized to deal with input that contains mixed markup. Input that may have HTML markup as well as some other markup that is based on the '<', '>' and '&' characters is considered to have mixed markup. The non-HTML markup can be rather proprietary (like markup for emoticons/smileys), or standard (like MathML or SVG). Or it can be programming code meant for execution/evaluation (such as embedded PHP code).
+
+ To deal with such mixed markup, the input text can be pre-processed to hide the non-HTML markup by specifically replacing the '<', '>' and '&' characters with some of the HTML-discouraged characters (see section:- #3.1.2). Post-htmLawed processing, the replacements are reverted.
+
+ An example (mixed HTML and PHP code in input text):
+
+ $text = preg_replace('`<\?php(.+?)\?>`sm', "\x83?php\\1?\x84", $text);
+ $processed = htmLawed($text);
+ $processed = preg_replace('`\x83\?php(.+?)\?\x84`sm', '<?php$1?>', $processed);
+
+ This code will not work if '$config["clean_ms_char"]' is set to '1' (section:- #3.1), in which case one should instead deploy a hook function (section:- #3.7). (htmLawed internally uses certain control characters, code-points '1' to '7', and use of these characters as markers in the logic of hook functions may cause issues.)
+
+ Admins may also be able to use '$config["and_mark"]' to deal with such mixed markup; see section:- #3.2.
+
+
+== 4 Other =======================================================oo
+
+
+-- 4.1 Support -----------------------------------------------------
+
+
+ A careful re-reading of this documentation will very likely answer your questions.
+
+ Software updates and forum-based community-support may be found at http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed. For general PHP issues (not htmLawed-specific), support may be found through internet searches and at http://php.net.
+
+
+-- 4.2 Known issues -----------------------------------------------o
+
+
+ See section:- #2.8.
+
+ Readers are advised to cross-check information given in this document.
+
+
+-- 4.3 Change-log -------------------------------------------------o
+
+
+ (The release date for the downloadable package of files containing documentation, demo script, test-cases, etc., besides the 'htmLawed.php' file may be updated independently if the secondary files are revised.)
+
+ `Version number - Release date. Notes`
+
+ 1.1.11 - 5 June 2012. Fix for possible problem with handling of multi-byte characters in attribute values in an mbstring.func_overload enviroment. '$config["hook_tag"]', if specified, now receives names of elements in closing tags.
+
+ 1.1.10 - 22 October 2011. Fix for a bug in the 'tidy' functionality that caused the entire input to be replaced with a single space; new parameter, '$config["direct_list_nest"]' to allow direct descendance of a list in a list. (5 April 2012. Dual licensing from LGPLv3 to LGPLv3 and GPLv2+.)
+
+ 1.1.9.5 - 6 July 2011. Minor correction of a rule for nesting of 'li' within 'dir'
+
+ 1.1.9.4 - 3 July 2010. Parameter 'schemes' now accepts '!' so any URL, even a local one, can be `denied`. An issue in which a second URL value in 'style' properties was not checked was fixed.
+
+ 1.1.9.3 - 17 May 2010. Checks for correct nesting of 'param'
+
+ 1.1.9.2 - 26 April 2010. Minor fix regarding rendering of denied URL schemes
+
+ 1.1.9.1 - 26 February 2010. htmLawed now uses the LGPL version 3 license; support for 'flashvars' attribute for 'embed'
+
+ 1.1.9 - 22 December 2009. Soft-hyphens are now removed only from URL-accepting attribute values
+
+ 1.1.8.1 - 16 July 2009. Minor code-change to fix a PHP error notice
+
+ 1.1.8 - 23 April 2009. Parameter 'deny_attribute' now accepts the wild-card '*', making it simpler to specify its value when all but a few attributes are being denied; fixed a bug in interpreting '$spec'
+
+ 1.1.7 - 11-12 March 2009. Attributes globally denied through 'deny_attribute' can be allowed element-specifically through '$spec'; '$config["style_pass"]' allowing letting through any 'style' value introduced; altered logic to catch certain types of dynamic crafted CSS expressions
+
+ 1.1.3-6 - 28-31 January - 4 February 2009. Altered logic to catch certain types of dynamic crafted CSS expressions
+
+ 1.1.2 - 22 January 2009. Fixed bug in parsing of 'font' attributes during tag transformation
+
+ 1.1.1 - 27 September 2008. Better nesting correction when omitable closing tags are absent
+
+ 1.1 - 29 June 2008. '$config["hook_tag"]' and '$config["format"]' introduced for custom tag/attribute check/modification/injection and output compaction/beautification; fixed a regex-in-$spec parsing bug
+
+ 1.0.9 - 11 June 2008. Fixed bug in invalid HTML code-point entity check
+
+ 1.0.8 - 15 May 2008. 'bordercolor' attribute for 'table', 'td' and 'tr'
+
+ 1.0.7 - 1 May 2008. Support for 'wmode' attribute for 'embed'; '$config["show_setting"]' introduced; improved '$config["elements"]' evaluation
+
+ 1.0.6 - 20 April 2008. '$config["and_mark"]' introduced
+
+ 1.0.5 - 12 March 2008. 'style' URL schemes essentially disallowed when $config 'safe' is on; improved regex for CSS expression search
+
+ 1.0.4 - 10 March 2008. Improved corrections for 'blockquote', 'form', 'map' and 'noscript'
+
+ 1.0.3 - 3 March 2008. Character entities for soft-hyphens are now replaced with spaces (instead of being removed); a bug allowing 'td' directly inside 'table' fixed; 'safe' '$config' parameter added
+
+ 1.0.2 - 13 February 2008. Improved implementation of '$config["keep_bad"]'
+
+ 1.0.1 - 7 November 2007. Improved regex for identifying URLs, protocols and dynamic expressions ('hl_tag()' and 'hl_prot()'); no error display with 'hl_regex()'
+
+ 1.0 - 2 November 2007. First release
+
+
+-- 4.4 Testing ----------------------------------------------------o
+
+
+ To test htmLawed using a form interface, a demo:- htmLawedTest.php web-page is provided with the htmLawed distribution ('htmLawed.php' and 'htmLawedTest.php' should be in the same directory on the web-server). A file with test-cases:- htmLawed_TESTCASE.txt is also provided.
+
+
+-- 4.5 Upgrade, & old versions ------------------------------------o
+
+
+ Upgrading is as simple as replacing the previous version of 'htmLawed.php' (assuming it was not modified for customized features). As htmLawed output is almost always used in static documents, upgrading should not affect old, finalized content.
+
+ *Important* The following upgrades may affect the functionality of a specific htmLawed as indicated by their corresponding notes:
+
+ (1) From version 1.1-1.1.10 to 1.1.11, if a 'hook_tag' function is in use: In version 1.1.11, elements in closing tags (and not just the opening tags) are also passed to the function. There are no attribute names/values to pass, so a 'hook_tag' function receives only the element name. The 'hook_tag' function therefore may have to be edited. See section:- #3.4.9.
+
+ Old versions of htmLawed may be available online. E.g., for version 1.0, check http://www.bioinformatics.org/phplabware/downloads/htmLawed1.zip, for 1.1.1, htmLawed111.zip, and for 1.1.10, htmLawed1110.zip.
+
+
+-- 4.6 Comparison with 'HTMLPurifier' -----------------------------o
+
+
+ The HTMLPurifier PHP library by Edward Yang is a very good HTML filtering script that uses object oriented PHP code. Compared to htmLawed, it (as of mid-2009):
+
+ * does not support PHP versions older than 5.0 (HTMLPurifier dropped PHP 4 support after version 2)
+
+ * is 15-20 times bigger (scores of files totalling more than 750 kb)
+
+ * consumes 10-15 times more RAM memory (just including the HTMLPurifier files without calling the filter requires a few MBs of memory)
+
+ * is expectedly slower
+
+ * does not allow admins to fully allow all valid HTML (because of incomplete HTML support, it always considers elements like 'script' illegal)
+
+ * lacks many of the extra features of htmLawed (like entity conversions and code compaction/beautification)
+
+ * has poor documentation
+
+ However, HTMLPurifier has finer checks for character encodings and attribute values, and can log warnings and errors. Visit the HTMLPurifier website:- http://htmlpurifier.org for updated information.
+
+
+-- 4.7 Use through application plug-ins/modules -------------------o
+
+
+ Plug-ins/modules to implement htmLawed in applications such as Drupal and DokuWiki may have been developed. Please check the application websites and the forum on the htmLawed site:- http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed.
+
+
+-- 4.8 Use in non-PHP applications --------------------------------o
+
+
+ Non-PHP applications written in Python, Ruby, etc., may be able to use htmLawed through system calls to the PHP engine. Such code may have been documented on the internet. Also check the forum on the htmLawed site:- http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed.
+
+
+-- 4.9 Donate -----------------------------------------------------o
+
+
+ A donation in any currency and amount to appreciate or support this software can be sent by PayPal:- http://paypal.com to this email address: drpatnaik at yahoo dot com.
+
+
+-- 4.10 Acknowledgements ------------------------------------------o
+
+
+ Nicholas Alipaz, Bryan Blakey, Pádraic Brady, Ulf Harnhammer, Gareth Heyes, Klaus Leithoff, Lukasz Pilorz, Shelley Powers, Edward Yang, and many anonymous users.
+
+ Thank you!
+
+
+== 5 Appendices ==================================================oo
+
+
+-- 5.1 Characters discouraged in XHTML -----------------------------
+
+
+ Characters represented by the following hexadecimal code-points are `not` invalid, even though some validators may issue messages stating otherwise.
+
+ '7f' to '84', '86' to '9f', 'fdd0' to 'fddf', '1fffe', '1ffff', '2fffe', '2ffff', '3fffe', '3ffff', '4fffe', '4ffff', '5fffe', '5ffff', '6fffe', '6ffff', '7fffe', '7ffff', '8fffe', '8ffff', '9fffe', '9ffff', 'afffe', 'affff', 'bfffe', 'bffff', 'cfffe', 'cffff', 'dfffe', 'dffff', 'efffe', 'effff', 'ffffe', 'fffff', '10fffe' and '10ffff'
+
+
+-- 5.2 Valid attribute-element combinations -----------------------o
+
+
+ Valid attribute-element combinations as per W3C specs.
+
+ * includes deprecated attributes (marked '^'), attributes for the non-standard 'embed' element (marked '*'), and the proprietary 'bordercolor' (marked '~')
+ * only non-frameset, HTML body elements
+ * 'name' for 'a' and 'map', and 'lang' are invalid in XHTML 1.1
+ * 'target' is valid for 'a' in XHTML 1.1 and higher
+ * 'xml:space' is only for XHTML 1.1
+
+ abbr - td, th
+ accept - form, input
+ accept-charset - form
+ accesskey - a, area, button, input, label, legend, textarea
+ action - form
+ align - caption^, embed, applet, iframe, img^, input^, object^, legend^, table^, hr^, div^, h1^, h2^, h3^, h4^, h5^, h6^, p^, col, colgroup, tbody, td, tfoot, th, thead, tr
+ alt - applet, area, img, input
+ archive - applet, object
+ axis - td, th
+ bgcolor - embed, table^, tr^, td^, th^
+ border - table, img^, object^
+ bordercolor~ - table, td, tr
+ cellpadding - table
+ cellspacing - table
+ char - col, colgroup, tbody, td, tfoot, th, thead, tr
+ charoff - col, colgroup, tbody, td, tfoot, th, thead, tr
+ charset - a, script
+ checked - input
+ cite - blockquote, q, del, ins
+ classid - object
+ clear - br^
+ code - applet
+ codebase - object, applet
+ codetype - object
+ color - font
+ cols - textarea
+ colspan - td, th
+ compact - dir, dl^, menu, ol^, ul^
+ coords - area, a
+ data - object
+ datetime - del, ins
+ declare - object
+ defer - script
+ dir - bdo
+ disabled - button, input, optgroup, option, select, textarea
+ enctype - form
+ face - font
+ flashvars* - embed
+ for - label
+ frame - table
+ frameborder - iframe
+ headers - td, th
+ height - embed, iframe, td^, th^, img, object, applet
+ href - a, area
+ hreflang - a
+ hspace - applet, img^, object^
+ ismap - img, input
+ label - option, optgroup
+ language - script^
+ longdesc - img, iframe
+ marginheight - iframe
+ marginwidth - iframe
+ maxlength - input
+ method - form
+ model* - embed
+ multiple - select
+ name - button, embed, textarea, applet^, select, form^, iframe^, img^, a^, input, object, map^, param
+ nohref - area
+ noshade - hr^
+ nowrap - td^, th^
+ object - applet
+ onblur - a, area, button, input, label, select, textarea
+ onchange - input, select, textarea
+ onfocus - a, area, button, input, label, select, textarea
+ onreset - form
+ onselect - input, textarea
+ onsubmit - form
+ pluginspage* - embed
+ pluginurl* - embed
+ prompt - isindex
+ readonly - textarea, input
+ rel - a
+ rev - a
+ rows - textarea
+ rowspan - td, th
+ rules - table
+ scope - td, th
+ scrolling - iframe
+ selected - option
+ shape - area, a
+ size - hr^, font, input, select
+ span - col, colgroup
+ src - embed, script, input, iframe, img
+ standby - object
+ start - ol^
+ summary - table
+ tabindex - a, area, button, input, object, select, textarea
+ target - a^, area, form
+ type - a, embed, object, param, script, input, li^, ol^, ul^, button
+ usemap - img, input, object
+ valign - col, colgroup, tbody, td, tfoot, th, thead, tr
+ value - input, option, param, button, li^
+ valuetype - param
+ vspace - applet, img^, object^
+ width - embed, hr^, iframe, img, object, table, td^, th^, applet, col, colgroup, pre^
+ wmode - embed
+ xml:space - pre, script, style
+
+ These are allowed in all but the shown elements:
+
+ class - param, script
+ dir - applet, bdo, br, iframe, param, script
+ id - script
+ lang - applet, br, iframe, param, script
+ onclick - applet, bdo, br, font, iframe, isindex, param, script
+ ondblclick - applet, bdo, br, font, iframe, isindex, param, script
+ onkeydown - applet, bdo, br, font, iframe, isindex, param, script
+ onkeypress - applet, bdo, br, font, iframe, isindex, param, script
+ onkeyup - applet, bdo, br, font, iframe, isindex, param, script
+ onmousedown - applet, bdo, br, font, iframe, isindex, param, script
+ onmousemove - applet, bdo, br, font, iframe, isindex, param, script
+ onmouseout - applet, bdo, br, font, iframe, isindex, param, script
+ onmouseover - applet, bdo, br, font, iframe, isindex, param, script
+ onmouseup - applet, bdo, br, font, iframe, isindex, param, script
+ style - param, script
+ title - param, script
+ xml:lang - applet, br, iframe, param, script
+
+
+-- 5.3 CSS 2.1 properties accepting URLs ------------------------o
+
+
+ background
+ background-image
+ content
+ cue-after
+ cue-before
+ cursor
+ list-style
+ list-style-image
+ play-during
+
+
+-- 5.4 Microsoft Windows 1252 character replacements --------------o
+
+
+ Key: 'd' double, 'l' left, 'q' quote, 'r' right, 's.' single
+
+ Code-point (decimal) - hexadecimal value - replacement entity - represented character
+
+ 127 - 7f - (removed) - (not used)
+ 128 - 80 - &#8364; - euro
+ 129 - 81 - (removed) - (not used)
+ 130 - 82 - &#8218; - baseline s. q
+ 131 - 83 - &#402; - florin
+ 132 - 84 - &#8222; - baseline d q
+ 133 - 85 - &#8230; - ellipsis
+ 134 - 86 - &#8224; - dagger
+ 135 - 87 - &#8225; - d dagger
+ 136 - 88 - &#710; - circumflex accent
+ 137 - 89 - &#8240; - permile
+ 138 - 8a - &#352; - S Hacek
+ 139 - 8b - &#8249; - l s. guillemet
+ 140 - 8c - &#338; - OE ligature
+ 141 - 8d - (removed) - (not used)
+ 142 - 8e - &#381; - Z dieresis
+ 143 - 8f - (removed) - (not used)
+ 144 - 90 - (removed) - (not used)
+ 145 - 91 - &#8216; - l s. q
+ 146 - 92 - &#8217; - r s. q
+ 147 - 93 - &#8220; - l d q
+ 148 - 94 - &#8221; - r d q
+ 149 - 95 - &#8226; - bullet
+ 150 - 96 - &#8211; - en dash
+ 151 - 97 - &#8212; - em dash
+ 152 - 98 - &#732; - tilde accent
+ 153 - 99 - &#8482; - trademark
+ 154 - 9a - &#353; - s Hacek
+ 155 - 9b - &#8250; - r s. guillemet
+ 156 - 9c - &#339; - oe ligature
+ 157 - 9d - (removed) - (not used)
+ 158 - 9e - &#382; - z dieresis
+ 159 - 9f - &#376; - Y dieresis
+
+
+-- 5.5 URL format -------------------------------------------------o
+
+
+ An `absolute` URL has a 'protocol' or 'scheme', a 'network location' or 'hostname', and, optional 'path', 'parameters', 'query' and 'fragment' segments. Thus, an absolute URL has this generic structure:
+
+ (scheme) : (//network location) /(path) ;(parameters) ?(query) #(fragment)
+
+ The schemes can only contain letters, digits, '+', '.' and '-'. Hostname is the portion after the '//' and up to the first '/' (if any; else, up to the end) when ':' is followed by a '//' (e.g., 'abc.com' in 'ftp://abc.com/def'); otherwise, it consists of everything after the ':' (e.g., 'def@abc.com' in mailto:def@abc.com').
+
+ `Relative` URLs do not have explicit schemes and network locations; such values are inherited from a `base` URL.
+
+
+-- 5.6 Brief on htmLawed code -------------------------------------o
+
+
+ Much of the code's logic and reasoning can be understood from the documentation above.
+
+ The *output* of htmLawed is a text string containing the processed input. There is no custom error tracking.
+
+ *Function arguments* for htmLawed are:
+
+ * '$in' - 1st argument; a text string; the *input text* to be processed. Any extraneous slashes added by PHP when `magic quotes` are enabled should be removed beforehand using PHP's 'stripslashes()' function.
+
+ * '$config' - 2nd argument; an associative array; optional (named '$C' in htmLawed code). The array has keys with names like 'balance' and 'keep_bad', and the values, which can be boolean, string, or array, depending on the key, are read to accordingly set the *configurable parameters* (indicated by the keys). All configurable parameters receive some default value if the value to be used is not specified by the user through '$config'. `Finalized` '$config' is thus a filtered and possibly larger array.
+
+ * '$spec' - 3rd argument; a text string; optional. The string has rules, written in an htmLawed-designated format, *specifying* element-specific attribute and attribute value restrictions. Function 'hl_spec()' is used to convert the string to an associative-array for internal use. `Finalized` '$spec' is thus an array.
+
+ `Finalized` '$config' and '$spec' are made *global variables* while htmLawed is at work. Values of any pre-existing global variables with same names are noted, and their values are restored after htmLawed finishes processing the input (to capture the `finalized` values, the 'show_settings' parameter of '$config' should be used). Depending on '$config', another global variable 'hl_Ids', to track 'id' attribute values for uniqueness, may be set. Unlike the other two variables, this one is not reset (or unset) post-processing.
+
+ Except for the main function 'htmLawed()' and the functions 'kses()' and 'kses_hook()', htmLawed's functions are *name-spaced* using the 'hl_' prefix. The *functions* and their roles are:
+
+ * 'hl_attrval' - checking attribute values against $spec
+ * 'hl_bal' - tag balancing
+ * 'hl_cmtcd' - handling CDATA sections and HTML comments
+ * 'hl_ent' - entity handling
+ * 'hl_prot' - checking a URL scheme/protocol
+ * 'hl_regex' - checking syntax of a regular expression
+ * 'hl_spec' - converting user-supplied $spec value to one used by htmLawed internally
+ * 'hl_tag' - handling tags
+ * 'hl_tag2' - transforming tags
+ * 'hl_tidy' - compact/beautify HTML
+ * 'hl_version' - reporting htmLawed version
+ * 'htmLawed' - main function
+ * 'kses' - main function of 'kses'
+ * 'kses_hook' - hook function of 'kses'
+
+ The last two are for compatibility with pre-existing code using the 'kses' script. htmLawed's 'kses()' basically passes on the filtering task to 'htmLawed()' function after deciphering '$config' and '$spec' from the argument values supplied to it. 'kses_hook()' is an empty function and is meant for being filled with custom code if the 'kses' script users were using one.
+
+ 'htmLawed()' finalizes '$spec' (with the help of 'hl_spec()') and '$config', and globalizes them. Finalization of '$config' involves setting default values if an inappropriate or invalid one is supplied. This includes calling 'hl_regex()' to check well-formedness of regular expression patterns if such expressions are user-supplied through '$config'. 'htmLawed()' then removes invalid characters like nulls and 'x01' and appropriately handles entities using 'hl_ent()'. HTML comments and CDATA sections are identified and treated as per '$config' with the help of 'hl_cmtcd()'. When retained, the '<' and '>' characters identifying them, and the '<', '>' and '&' characters inside them, are replaced with control characters (code-points '1' to '5') till any tag balancing is completed.
+
+ After this `initial processing` 'htmLawed()' identifies tags using regex and processes them with the help of 'hl_tag()' -- a large function that analyzes tag content, filtering it as per HTML standards, '$config' and '$spec'. Among other things, 'hl_tag()' transforms deprecated elements using 'hl_tag2()', removes attributes from closing tags, checks attribute values as per '$spec' rules using 'hl_attrval()', and checks URL protocols using 'hl_prot()'. 'htmLawed()' performs tag balancing and nesting checks with a call to 'hl_bal()', and optionally compacts/beautifies the output with proper white-spacing with a call to 'hl_tidy()'. The latter temporarily replaces white-space, and '<', '>' and '&' characters inside 'pre', 'script' and 'textarea' elements, and HTML comments and CDATA sections with control characters (code-points '1' to '5', and '7').
+
+ htmLawed permits the use of custom code or *hook functions* at two stages. The first, called inside 'htmLawed()', allows the input text as well as the finalized $config and $spec values to be altered right after the initial processing (see section:- #3.7). The second is called by 'hl_tag()' once the tag content is finalized (see section:- #3.4.9).
+
+ Being dictated by the external and stable HTML standard, htmLawed's objective is very clear-cut and less concerned with tweakability. The code is only minimally annotated with comments -- it is not meant to instruct; PHP developers familiar with the HTML specs will see the logic, and others can always refer to the htmLawed documentation. The compact structuring of the statements is meant to aid in quickly grasping the logic, at least when viewed with code syntax highlighted.
+
+___________________________________________________________________oo
+
+
+@@description: htmLawed PHP software is a free, open-source, customizable HTML input purifier and filter
+@@encoding: utf-8
+@@keywords: htmLawed, HTM, HTML, HTML Tidy, converter, filter, formatter, purifier, sanitizer, XSS, input, PHP, software, code, script, security, cross-site scripting, hack, sanitize, remove, standards, tags, attributes, elements
+@@language: en
+@@title: htmLawed documentation \ No newline at end of file
diff --git a/mod/htmlawed/vendors/htmLawed/htmLawed_TESTCASE.txt b/mod/htmlawed/vendors/htmLawed/htmLawed_TESTCASE.txt
new file mode 100755
index 000000000..793a5a6a7
--- /dev/null
+++ b/mod/htmlawed/vendors/htmLawed/htmLawed_TESTCASE.txt
@@ -0,0 +1,396 @@
+/*
+htmLawed_TESTCASE.txt, 22 October 2011
+htmLawed 1.1.11, 5 June 2012
+Copyright Santosh Patnaik
+Dual licensed with LGPL 3 and GPL 2 or later
+A PHP Labware internal utility - http://www.bioinformatics.org/phplabware/internal_utilities/htmLawed
+*/
+
+This file has UTF-8-encoded text with both correct and incorrect/malformed HTML/XHTML code snippets to test htmLawed (test cases/samples). The entire text may also be used as a unit.
+
+************************************************
+when viewing this file in a web browser, set the
+character encoding to Unicode/UTF-8
+************************************************
+
+--------------------- start --------------------
+
+<em>Try different $config and $spec values. Some text even when filtered in will not be displayed in a rendered web-page</em><br />
+
+<h6>Attributes</h6>
+
+<strong>Xml:lang:</strong><a lang="en" xml:lang="en"></a>, <a lang="en"></a>, <a xml:lang="en"></a><br />
+<strong>Standard, predefined value, or empty attribute:</strong> <input type="text" disabled />, <input type="text" disabled="DISABLED" />, <input type="text" disabled="1" /><br />
+<strong>Required:</strong> <img />, <img alt="image" /><br />
+<strong>Quote & space variation:</strong> <a id=id1 name=xy>a</a>, <a id='id2' name="xy">a</a>, <a id=' id3 ' name = "n" >a</a><br />
+<strong>Invalid:</strong> <a id="id4" src="s">a</a><br />
+<strong>Duplicated:</strong> <a id="id5" id="id6">a</a><br />
+<strong>Deprecated:</strong> <a id="id7" target="self" name="n">a</a>, <hr noshade="noshade" /><br />
+<strong>Casing:</strong> <a HREF=""></a><br />
+<strong>Admin-restricted?:</strong> <a href="x" onclick="alert();"></a>
+
+<h6>Attribute values</h6>
+
+<strong>Duplicate ID value:</strong><a id="id8"></a>, <a id="my_id8"></a>, <a id="id8"></a><br />
+(try 'my_' for prefix)<br />
+<strong>Double-quotes in value:</strong><a title=ab"c"></a>, <a title="ab"c"></a>, <a title='ab"c'></a><br />
+(try filter for CSS expression)<br />
+<strong>CSS expression</strong>: <div style="prop:expression();"></div><div style="prop:expression()"></div><div style="prop: expression();"></div><div style="prop : expression()"></div><div style="prop:expression(js);"></div><div style="prop:expression(js;)"></div><div style="prop: expression('js');"></div><div style="prop : expr ession('js':)"></div><div style="prop&#x3a;expression( 'js&#x40; );"></div><br />
+<strong>Other:</strong> <input size="50" class="my" value="an input an input an input" />, <input size="5" class="your" value="an input" /><br />
+(try 'maxlen', 'maxval', etc., for 'input' in '$spec')
+
+<h6>Blockquotes</h6>
+
+<blockquote>abc</blockquote><br />
+<blockquote>abc<div>def</div></blockquote><br />
+<blockquote><div>abc</div>def</blockquote><br />
+<blockquote>abc<div>def</div>ghi</blockquote><br />
+abc<div>def</div>ghi<br />
+(try with blockquote parent)
+
+<h6>CDATA sections</h6>
+
+<strong>Special characters inside:</strong> <![CDATA[ ]]> ]]>, <![CDATA[ 3 < 4 > 3.5, & 4 &gt; 4 ]]><br />
+<strong>Normal:</strong> <![CDATA[ check ]]>, <em>CDATA follows:<![CDATA[ check ]]></em><br />
+<strong>Malformed:</strong> <![cdata check ]]>, < ![CDATA check ]]>, <![CDATA check ]]>, < ![CDATA check ] ]><br />
+<strong>Invalid:</strong> <em <![CDATA[ check ]]>>CDATA in tag content</em>, <table><![CDATA[ check ]]><tr><td>text not allowed</td></tr></table>
+
+<h6>Complex-1: deprecated elements</h6>
+
+<center>
+The PHP <s>software</s> script used for this <strike>web-page</strike> webpage is <font style="font-weight: bold " face=arial size='+3' color = "red ">htmLawedTest.php</font>, from <u style= 'color:green'>PHP Labware</u>.
+</center>
+
+<h6>Complex-2: deprecated attributes</h6>
+
+<img src="s" alt="a" name="n" /><img src="s" alt="a" id="id9" name="n" />
+<br clear="left" />
+<hr noshade size="1" />
+<img name="id10" src="s" align="left" alt="image" hspace="10" vspace="10" width="10em" height="20" border="1" style="padding:5px;" />
+<table width="50em" align="center" bgcolor="red">
+ <tr>
+ <td width="20%">
+ <div align="center">
+ <h3 align="right">Section</h3>
+ <p align="right">Para</p>
+ <ol type="a" start="e"><li value="x"><a name="x">First</a> <a name="x" id="id11">item</a></li></ol>
+ </div>
+ </td>
+ <td width="*">
+ <ol type="1"><li>First item</li></ol>
+ </td>
+ </tr>
+ </table>
+<br clear="all" />
+
+<h6>Complex-3: embed, object, area</h6>
+
+<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/ls7gi1VwdIQ"></param><embed src="http://www.youtube.com/v/ls7gi1VwdIQ" type="application/x-shockwave-flash" width="425" height="350"></embed></object><br />
+
+<embed src="http://www.youtube.com/v/ls7gi1VwdIQ" type="application/x-shockwave-flash" width="425" height="350"></embed><br />
+
+<object data="1.gif" type="image/gif" usemap="#map1"><map name="map1">
+<p>navigate the site: <a href="1" shape="REct" coOrds="0,0,118,28">1</a> | <a href="3" shape="circle" coords="184,200,60">3</a> | <a href="4" shape="poly" coords="276,0,276,28,100,200,50,50,276,0">4</a></p>
+<area href="5" shape="Rect" coords="0,0,118,28">
+</map></object>
+
+<param name="name">value</param>
+
+<object id="obj1">
+ <param name="param1">
+ <object id="obj2">
+ <param name="param2">
+ </object>
+</object>
+
+<h6>Complex-4: nested and other tables</h6>
+
+<table border="1" bgcolor="red"> <tr> <td> Cell </td> <td colspan="2" rowspan="2"> <table border="1" bgcolor="green"> <tr> <td> Cell </td> <td colspan="2" rowspan="2"> </td> </tr> <tr> <td> Cell </td> </tr> <tr> <td> Cell </td> <td> Cell </td> <td> Cell </td> </tr> </table> </td> </tr> <tr> <td> Cell </td> </tr> <tr> <td> Cell </td> <td> Cell </td> <td> Cell </td> </tr> </table><br />
+<strong>PCDATA wrong:</strong> <table>Well<caption>Hello</caption></table><br />
+<strong>Missing tr:</strong> <table><td>Well</td></table><br />
+
+<h6>Complex-5: pseudo, disallowed or non-HTML tags</h6>
+
+(Try different 'keep_bad' values)
+<*> Pseudotags <*>
+<xml>Non-HTML tag xml</xml>
+<p>
+Disallowed tag p
+</p>
+<ul>Bad<li>OK</li></ul>
+
+<h6>Elements</h6>
+
+<strong>Unbalanced:</strong> <a href="h"><em>check</a></em><br />
+<strong>Non-XHTML:</strong> <div><center><dir></dir></center></div><br />
+<strong>Malformed:</strong> < a href=""></a>, <a href="" ></a>, <a href="" ></a>, <a href=""
+></a>, <a href="">< /a>, < a href=""></a >, <img src="s" alt="a" />, <img src="s" alt="a"/ >, <imgsrc="s" alt="a" /><br />
+<strong>Invalid:</strong> <image src="s" alt="a" /><br />
+<strong>Empty:</strong> <img src="s" alt="a" />, <img src="s" alt="a"></img>, <img src="s" alt="a">text</img><br />
+<strong>Content invalid:</strong> <a href="h">1<a>2</a></a><br />
+<strong>Content invalid?:</strong> <form></form><br /> (try setting 'form' as parent)
+<strong>Casing:</strong> <A href=""></a>
+
+<h6>Entities</h6>
+
+<strong>Special:</strong> &amp; 3 < 2 & 5>4 and j >i >a & i<j>a<br />
+<strong>Padding:</strong> &#00066; &#066; &#x00066; &#x066; &#x003; &#0003;<br />
+<strong>Malformed:</strong> & #x27;, &x27;, &#x27; &TILDE;, &tilde<br />
+<strong>Invalid:</strong> &#x3;, &#55296;, &#03;, &#1114112;, &#xffff, &bad;<br />
+<strong>Discouraged characters:</strong> &#x7f;, &#132;, &#64992;, &#1114110;<br />
+<strong>Context:</strong> '&gt;', &lt;?<br />
+<strong>Casing:</strong> &#X27;, &#x27;, &TILDE;, &tilde;
+<br />
+(also check named-to-numeric and hexdec-to-decimal, and vice versa, conversions)
+
+<h6>Format</h6>
+
+<strong>Valid but ill-formatted:</strong> text <!-- comment -->
+text <!--
+A c o m m e n t -->
+<script>
+ <![CDATA[
+ code
+ ]]>
+</script><!-- comment --><![CDATA[ cdata ]]> <a>text</b> text<pre id="none">p r e</pre>
+<textarea>text</textarea> <textarea>
+ text text
+</textarea> text text <br /><hr />
+text <img src="none" alt="none" /> t<em class="none">e<strong>x</strong>t</em>
+text <img src="none" alt="none" /> <b>t<em> e <strong> x </strong> t</em></b>
+ <a href="a"> text <img src="none" alt="none" /> <b>t <em> e <strong> x </strong> t</em></b>
+ </a>
+<span style="background-color: yellow;">text <img src="none" alt="none" /> <b> <em> t e <strong> x </strong> t</em></b></span>
+<script>script</script>
+<div>
+ <pre id="none">p <a>r</a> e <!-- comment --> </pre>
+ <pre>
+ pre
+ </pre>
+</div>
+<div><div><table border="1" style="background-color: red;"><tr><td>Cell</td><td colspan="2" rowspan="2"><table border="1" style="background-color: green;"><tr><td>Cell</td><td colspan="2" rowspan="2"></td></tr><tr><td>Cell</td></tr><tr><td>Cell</td><td>Cell</td><td>Cell</td></tr></table></td></tr><tr><td>Cell</td></tr><tr><td>Cell</td><td>Cell</td><td>Cell</td></tr></table></div></div>
+(try to compact or beautify)
+
+<h6>Forms</h6>
+
+(note nesting of 'form', missing required attributes, etc.)<br />
+<form>
+<script type="text/javascript">s</script>
+<fieldset><legend>p</legend>l <input name="personal_lastname" type="text" tabindex="1"></fieldset>
+<input name="h" type="checkbox" value="h" tabindex="20"> h
+<textarea name="t">t</textarea>
+<form action="a" method="get"></form></form><br />
+<form action="b" method="get"><p><input type="text" value="i" /></form><br />
+<form>B:<input type="text" value="b" />C:<input type="text" value="c" /></form><br />
+(try each of these lines separately)<br />
+<form action="a">what<br />
+<form action="a">what
+(try with container as div and as form)<br />
+<form>c <a>a</a> <b>b</b><input /><script>s</script>
+
+<h6>HTML comments (also CDATA)</h6>
+
+<strong>Script inside:</strong> <!--[if gte IE 4]>
+<SCRIPT>alert('XSS');</SCRIPT>
+<![endif]--><br />
+<strong>Special characters inside: <!-- <![CDATA check ]]> -->, <!-- 3 < 4 > 3.5, & 4 &gt; 4 -->, <!-- che--ck -->, <!--[if !IE]> <--><a>c</a><!--> <![endif]--><br />
+<strong>Normal:</strong> <!-- check -->, <!--check -->, <em>comment:<!-- check --></em><!-- check -->, <table><!-- check --><tr><td>text not allowed</td></tr></table><br />
+<strong>Malformed:</strong> <![cdata check ]]>, < ![CDATA check ]]>, < ![CDATA check ] ]><br />
+Invalid:</strong> <em <!-- check -->>comment in tag content</em>, <!--check-->
+
+<h6>Ins-Del</h6>
+
+(depending on context, these elements can be of either block or inline type)<br />
+<p><ins datetime="d" cite="c"><div>block</div></ins></p><br />
+<p><del>d</del></p><br />
+<p><ins><del>d</del></ins></p><div><ins><p><del><div>d</div></del></p></ins></div><ins><div>d</div></ins>
+
+<h6>Lists</h6>
+
+<strong>Invalid character data</strong>: <ul><li>(item</li>)</ul><br />
+<strong>Definition list</strong>: <dl><dt>a</dt>bad<dd>first <em>one</em></dd><dt>b</dt><dd>second</dd></dl><br />
+<strong>Definition list, close-tags omitted</strong>: <dl><dt>a</dt>bad<dd>first <em>one</em></dd><dt>b<dd>second</dl><br />
+<strong>Definition lists, nested</strong>: <dl>
+ <dt>T1</dt>
+ <dd>D1</dd>
+ <dt>T2</dt>
+ <dd>D2<dl><dt>t1</dt><dd>d1</dd><dt>t2</dt><dd>d2</dd></dl></dd>
+ <dt>T3</dt>
+ <dd>D3</dd>
+ <dt>T4</dt>
+ <dd>D4<dl><dt>t1</dt><dd>d1</dd></dl></dd>
+</dl><br />
+<strong>Definition lists, nested, close-tags omitted</strong>: <dl>
+ <dt>T1
+ <dd>D1</dd>
+ <dt>T2</dt>
+ <dd>D2<dl><dt>t1<dd>d1<dt>t2</dt><dd>d2</dd></dl></dd>
+ <dt>T3
+ <dd>D3
+ <dt>T4
+ <dd>D4<dl><dt>t1<dd>d1</dl></dd>
+</dl><br />
+<strong>Nested</strong>: <ul>
+ <li>l1</li>
+ <li>l2<ol><li>lo1</li><li>lo2</li></ol></li>
+ <li>l3</li>
+ <li>l4<ol><li>lo3</li><li>lo4<ol><li>lo5</li></ol></li></ol></li>
+</ul><br />
+<strong>Nested, directly</strong>: <ul>
+ <li>l1</li>
+ <ol>l2</ol>
+ <li>l3</li>
+</ul><br />
+<strong>Nested, close-tags omitted</strong>: <ul>
+ <li>l1</li>
+ <li>l2<ol><li>lo1<li>lo2</ol>
+ <li>l3
+ <li>l4<ol><li>lo3<li>lo4<ol><li>lo5</ol></ol>
+</ul><br />
+<strong>Complex</strong>:
+<ol><script></script><li><table><tr><td>
+<ul><li id="search" class="widget widget_search"> <form id="searchform" method="get" action="http://kohei.us">
+ <div>
+
+ <input type="text" name="s" id="s" size="15" /><br />
+ <input type="submit" value="Search" />
+ </div>
+ </form>
+ </li></ul>
+</td></tr></table></li></ol>
+
+<h6>Microdata</h6>
+
+<div itemscope itemtype="http://data-vocabulary.org/Person">
+I am <span itemprop="name">X</span> but people call me <span itemprop="nickname">Y</span>.
+Find me at <a href="http://www.xy.com" itemprop="url">www.xy.com</a>
+</div>
+
+<h6>Non-English text-1</h6>
+
+Inscrieţi-vă acum la a Zecea Conferinţă Internaţională<br />
+გთხáƒáƒ•áƒ— áƒáƒ®áƒšáƒáƒ•áƒ” გáƒáƒ˜áƒáƒ áƒáƒ— რეგისტრáƒáƒªáƒ˜áƒ<br />
+veÄjeziÄno raÄunalniÅ¡tvo<br />
+<a title="อ.อ่าง">อ.อ่าง</a><br />
+<a title="הירשמו
+כעת לכנס ">ЗарегиÑтрируйтеÑÑŒ ÑейчаÑ
+на ДеÑÑтую Международную Конференцию по</a><br />
+(this file should have utf-8 encoding; some characters may not be displayed because of missing fonts, etc.)
+
+<h6>Non-English text-2: entities</h6>
+
+&#29992;&#32479;&#19968;&#30721;<br />
+&#4306;&#4311;&#4334;&#4317;&#4309;&#4311;<br />
+Inscreva-se agora para a D&#233;cima Confer&#234;ncia Internacional Sobre O Unicode, realizada entre os dias 10 e 12 de mar&#231;o de 1997 em Mainz
+na Alemanha.
+
+<h6>Ruby</h6>
+
+(need compatible browser)<br />
+<ruby xml:lang="ja">
+ <rbc>
+ <rb>æ–Ž</rb>
+ <rb>è—¤</rb>
+ <rb>ä¿¡</rb>
+ <rb>ç”·</rb>
+ </rbc>
+ <rtc class="reading">
+ <rt>ã•ã„</rt>
+ <rt>ã¨ã†</rt>
+ <rt>ã®ã¶</rt>
+ <rt>ãŠ</rt>
+ </rtc>
+ <rtc class="annotation">
+ <rt rbspan="4" xml:lang="en">W3C Associate Chairman</rt>
+ </rtc>
+</ruby><br />
+<ruby>
+ <rb>WWW</rb>
+ <rp>(</rp><rt>World Wide Web</rt><rp>)</rp>
+</ruby><br />
+<ruby>
+ A
+ <rp>(</rp><rt>aaa</rt><rp>)</rp>
+</ruby>
+
+<h6>Tables</h6>
+
+<strong>Omitted closing tags:</strong> <table>
+<colgroup><col style="x" /><col style="y" />
+<thead>
+<tr><th>h1c1<th>h1c2
+<tbody>
+<tr><td>r1c1<td>r1c2
+<tr><td>r2c1<td>r2c2
+</table><br />
+<strong>Nested, omitted closing tags:</strong> <table>
+<colgroup><col style="x" /><col style="y" />
+<thead>
+<tr><th>h1c1<th>h1c2
+<tbody>
+<tr><td>r1c1<td>r1c2<table>
+<colgroup><col style="x" /><col style="y" />
+<thead>
+<tr><th>h1c1<th>h1c2
+<tbody>
+<tr><td>r1c1<td>r1c2
+<tr><td>r2c1<td>r2c2
+</table>
+<tr><td>r2c1<td>r2c2
+</table><br />
+
+<h6>URLs</h6>
+
+<strong>Relative and absolute:</strong> <a href="mailto:x"></a>, <a href="http://a.com/b/c/d.f"></a>, <a href="./../d.f"></a>, <a href="./d.f"></a>, <a href="d.f"></a>, <a href="#s"></a>, <a href="./../../d.f#s"></a><br />
+(try base URL value of 'http://a.com/b/')<br />
+<strong>CSS URLs:</strong> <div style="background-image: url('a.gif');"></div>, <div style="background-image: URL(&quot;a.gif&quot;);"></div>, <div style="background-image: url('http://a.com/a.gif');"></div>, <div style="background-image: url('./../a.gif');"></div>, <div style="background-image: &#117;r&#x6C;('js&#58;xss'&#x29;"></div><br />
+<strong>Double URLs:</strong> <a style="behaviour: url(foo) url(http://example.com/xss.htc)">b</a><br />
+<strong>Anti-spam:</strong> (try regex for 'http://a.com', etc.) <a href="mailto:x@y.com"></a>, <a href="http://a.com/b@d.f"></a>, <a href="a.com/d.f" rel="nofollow"></a>, <a href="a.com/d.f" rel="1, 2"></a>, <a href="a.com/d.f"></a>, <a href="b.com/d.f"></a>, <a href="c.com/d.f">, <a href="denied:http://c.com/d.f"></a><br />
+
+<h6>XSS</h6>
+
+'';!--"<xss>=&{()}<br />
+<img src="javascript%3Aalert('xss');" /><br />
+<img src="javascript:alert('xss');" /><br />
+<img src="java script:alert('xss');" /><br />
+<img
+src=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41; /><br />
+<div style="javascript:alert('xss');"></div><br />
+<div style="background-image:url(javascript:alert('xss'));"></div><br />
+<div style="background-image:url(&quot;javascript:alert('xss')&quot; );"></div><br />
+<!--[if gte IE 4]><script>alert('xss');</script><![endif]--><br />
+<script a=">" src="http://ha.ckers.org/xss.js"></script><br />
+<div style="background-image: &#117;r&#x6C;('js&#58;xss'&#x29;"></div><br />
+<a style=";-moz-binding:url(http://lukasz.pilorz.net/xss/xss.xml#xss)" href="http://example.com">test</a><br />
+<strong>Bad IE7:</strong> <a href="http://x&x=%22+style%3d%22background-image%3a+expression%28alert
+%28%27xss%3f%29%29">x</a><br />
+<strong>Bad IE7:</strong> <a style=color:expr/*comment*/ession(alert(document.domain))>xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background: exp&#x72;ession(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background: &#101;xpression(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background: %45xpression(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background:/**/expression(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background:/**/&#69;xpression(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background:/**/Exp&#x72;ession(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background: expr%45ssion(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background: exp/* */ression(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background: exp /* */ression(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background: exp/ * * /ression(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background:/* x */expression(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="xxx" style="background:/* */ */expression(alert('xss'));">xxx</a><br />
+<strong>Bad IE7:</strong> <a href="x" style="width: /****/**;;;;;;*/expression/**/(alert('xss'));">x</a><br />
+<strong>Bad IE7:</strong> <a href="x" style="padding:10px; background:/**/expression(alert('xss'));">x</a><br />
+<strong>Bad IE7:</strong> <a href="x" style="background: huh /* */ */expression(alert('xss'));">x</a><br />
+<strong>Bad IE7:</strong> <a href="x" style="background:/**/expression(alert('xss'));background:/**/expression(alert('xss'));">x</a><br />
+<strong>Bad IE7:</strong> exp/*<a style='no\xss:noxss("*//*");xss:&#101;x&#x2F;*XSS*//*/*/pression(alert("XSS"))'>x</a><br />
+<strong>Bad IE7:</strong> <a style="background:&#69;xpre\ssion(alert('xss'));">hi</a><br />
+<strong>Bad IE7:</strong> <a style="background:expre&#x5c;ssion(alert('xss'));">hi</a><br />
+<strong>Bad IE7:</strong> <a style="color: \0065 \0078 \0070 \0072 \0065 \0073 \0073 \0069 \006f \006e \0028 \0061 \006c \0065 \0072 \0074 \0028 \0031 \0029 \0029">test</a><br />
+<strong>Bad IE7:</strong> <a style="xss:e&#92;&#48;&#48;&#55;&#56;pression(window.x?0:(alert(/XSS/),window.x=1));">hi</a><br />
+<strong>Bad IE7:</strong> <a style="background:url('java
+script:eval(document.all.mycode.expr)')">hi</a><br />
+
+<h6>Other</h6>
+
+3 < 4 <br />
+3 > 4 <br />
+ > 3 <br /> \ No newline at end of file
diff --git a/mod/invitefriends/actions/invite.php b/mod/invitefriends/actions/invite.php
new file mode 100644
index 000000000..eed156d69
--- /dev/null
+++ b/mod/invitefriends/actions/invite.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * Elgg invite friends action
+ *
+ * @package ElggInviteFriends
+ */
+
+$site = elgg_get_site_entity();
+
+$emails = get_input('emails');
+$emailmessage = get_input('emailmessage');
+
+$emails = trim($emails);
+if (strlen($emails) > 0) {
+ $emails = preg_split('/\\s+/', $emails, -1, PREG_SPLIT_NO_EMPTY);
+}
+
+if (!is_array($emails) || count($emails) == 0) {
+ register_error(elgg_echo('invitefriends:noemails'));
+ forward(REFERER);
+}
+
+$current_user = elgg_get_logged_in_user_entity();
+
+$error = FALSE;
+$bad_emails = array();
+$already_members = array();
+$sent_total = 0;
+foreach ($emails as $email) {
+
+ $email = trim($email);
+ if (empty($email)) {
+ continue;
+ }
+
+ // send out other email addresses
+ if (!is_email_address($email)) {
+ $error = TRUE;
+ $bad_emails[] = $email;
+ continue;
+ }
+
+ if (get_user_by_email($email)) {
+ $error = TRUE;
+ $already_members[] = $email;
+ continue;
+ }
+
+ $link = elgg_get_site_url() . 'register?friend_guid=' . $current_user->guid . '&invitecode=' . generate_invite_code($current_user->username);
+ $message = elgg_echo('invitefriends:email', array(
+ $site->name,
+ $current_user->name,
+ $emailmessage,
+ $link
+ )
+ );
+
+ $subject = elgg_echo('invitefriends:subject', array($site->name));
+
+ // create the from address
+ $site = get_entity($site->guid);
+ if ($site && $site->email) {
+ $from = $site->email;
+ } else {
+ $from = 'noreply@' . get_site_domain($site->guid);
+ }
+
+ elgg_send_email($from, $email, $subject, $message);
+ $sent_total++;
+}
+
+if ($error) {
+ register_error(elgg_echo('invitefriends:invitations_sent', array($sent_total)));
+
+ if (count($bad_emails) > 0) {
+ register_error(elgg_echo('invitefriends:email_error', array(implode(', ', $bad_emails))));
+ }
+
+ if (count($already_members) > 0) {
+ register_error(elgg_echo('invitefriends:already_members', array(implode(', ', $already_members))));
+ }
+
+} else {
+ system_message(elgg_echo('invitefriends:success'));
+}
+
+forward(REFERER);
diff --git a/mod/invitefriends/languages/en.php b/mod/invitefriends/languages/en.php
new file mode 100644
index 000000000..f31d79bd8
--- /dev/null
+++ b/mod/invitefriends/languages/en.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Elgg invite language file
+ *
+ * @package ElggInviteFriends
+ */
+
+$english = array(
+
+ 'friends:invite' => 'Invite friends',
+
+ 'invitefriends:registration_disabled' => 'New user registration has been disabled on this site; you are unable to invite new users.',
+
+ 'invitefriends:introduction' => 'To invite friends to join you on this network, enter their email addresses below (one per line):',
+ 'invitefriends:message' => 'Enter a message they will receive with your invitation:',
+ 'invitefriends:subject' => 'Invitation to join %s',
+
+ 'invitefriends:success' => 'Your friends were invited.',
+ 'invitefriends:invitations_sent' => 'Invites sent: %s. There were the following problems:',
+ 'invitefriends:email_error' => 'The following addresses are not valid: %s',
+ 'invitefriends:already_members' => 'The following are already members: %s',
+ 'invitefriends:noemails' => 'No email addresses were entered.',
+
+ 'invitefriends:message:default' => '
+Hi,
+
+I want to invite you to join my network here on %s.',
+
+ 'invitefriends:email' => '
+You have been invited to join %s by %s. They included the following message:
+
+%s
+
+To join, click the following link:
+
+%s
+
+You will automatically add them as a friend when you create your account.',
+
+ );
+
+add_translation("en", $english);
diff --git a/mod/invitefriends/manifest.xml b/mod/invitefriends/manifest.xml
new file mode 100644
index 000000000..b36238a05
--- /dev/null
+++ b/mod/invitefriends/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Invite Friends</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>social</category>
+ <description>Invite friends via email invites.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/invitefriends/start.php b/mod/invitefriends/start.php
new file mode 100644
index 000000000..368f6348a
--- /dev/null
+++ b/mod/invitefriends/start.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Elgg invite friends
+ *
+ * @package ElggInviteFriends
+ */
+
+elgg_register_event_handler('init', 'system', 'invitefriends_init');
+
+function invitefriends_init() {
+ elgg_register_page_handler('invite', 'invitefriends_page_handler');
+
+ elgg_register_action('invitefriends/invite', elgg_get_plugins_path() . 'invitefriends/actions/invite.php');
+
+ if (elgg_is_logged_in()) {
+ $params = array(
+ 'name' => 'invite',
+ 'text' => elgg_echo('friends:invite'),
+ 'href' => "invite",
+ 'contexts' => array('friends'),
+ );
+ elgg_register_menu_item('page', $params);
+ }
+}
+
+/**
+ * Page handler function
+ *
+ * @param array $page Page URL segments
+ * @return bool
+ */
+function invitefriends_page_handler($page) {
+ gatekeeper();
+
+ elgg_set_context('friends');
+ elgg_set_page_owner_guid(elgg_get_logged_in_user_guid());
+
+ $title = elgg_echo('friends:invite');
+
+ $body = elgg_view('invitefriends/form');
+
+ $params = array(
+ 'content' => $body,
+ 'title' => $title,
+ );
+ $body = elgg_view_layout('one_sidebar', $params);
+
+ echo elgg_view_page($title, $body);
+ return true;
+}
diff --git a/mod/invitefriends/views/default/forms/invitefriends/invite.php b/mod/invitefriends/views/default/forms/invitefriends/invite.php
new file mode 100644
index 000000000..0d7f5d9f2
--- /dev/null
+++ b/mod/invitefriends/views/default/forms/invitefriends/invite.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * Elgg invite form contents
+ *
+ * @package ElggInviteFriends
+ */
+
+if (elgg_get_config('allow_registration')) {
+ $site = elgg_get_site_entity();
+ $introduction = elgg_echo('invitefriends:introduction');
+ $message = elgg_echo('invitefriends:message');
+ $default = elgg_echo('invitefriends:message:default', array($site->name));
+
+ echo <<< HTML
+<div>
+ <label>
+ $introduction
+ <textarea class="elgg-input-textarea" name="emails" ></textarea>
+ </label>
+</div>
+<div>
+ <label>
+ $message
+ <textarea class="elgg-input-textarea" name="emailmessage" >$default</textarea>
+ </label>
+</div>
+HTML;
+
+ echo '<div class="elgg-foot">';
+ echo elgg_view('input/submit', array('value' => elgg_echo('send')));
+ echo '</div>';
+} else {
+ echo elgg_echo('invitefriends:registration_disabled');
+}
diff --git a/mod/invitefriends/views/default/invitefriends/form.php b/mod/invitefriends/views/default/invitefriends/form.php
new file mode 100644
index 000000000..badcf8759
--- /dev/null
+++ b/mod/invitefriends/views/default/invitefriends/form.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Elgg invite form wrapper
+ *
+ * @package ElggInviteFriends
+ */
+
+echo elgg_view_form('invitefriends/invite');
diff --git a/mod/invitefriends/views/default/invitefriends/formitems.php b/mod/invitefriends/views/default/invitefriends/formitems.php
new file mode 100644
index 000000000..afdff4164
--- /dev/null
+++ b/mod/invitefriends/views/default/invitefriends/formitems.php
@@ -0,0 +1,4 @@
+<?php
+
+elgg_deprecated_notice("invitefriends/formitems was moved to forms/invitefriends/invite", 1.8);
+echo elgg_view('forms/invitefriends/invite'); \ No newline at end of file
diff --git a/mod/likes/actions/likes/add.php b/mod/likes/actions/likes/add.php
new file mode 100644
index 000000000..a6a8d6c45
--- /dev/null
+++ b/mod/likes/actions/likes/add.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Elgg add like action
+ *
+ */
+
+$entity_guid = (int) get_input('guid');
+
+//check to see if the user has already liked the item
+if (elgg_annotation_exists($entity_guid, 'likes')) {
+ system_message(elgg_echo("likes:alreadyliked"));
+ forward(REFERER);
+}
+// Let's see if we can get an entity with the specified GUID
+$entity = get_entity($entity_guid);
+if (!$entity) {
+ register_error(elgg_echo("likes:notfound"));
+ forward(REFERER);
+}
+
+// limit likes through a plugin hook (to prevent liking your own content for example)
+if (!$entity->canAnnotate(0, 'likes')) {
+ // plugins should register the error message to explain why liking isn't allowed
+ forward(REFERER);
+}
+
+$user = elgg_get_logged_in_user_entity();
+$annotation = create_annotation($entity->guid,
+ 'likes',
+ "likes",
+ "",
+ $user->guid,
+ $entity->access_id);
+
+// tell user annotation didn't work if that is the case
+if (!$annotation) {
+ register_error(elgg_echo("likes:failure"));
+ forward(REFERER);
+}
+
+// notify if poster wasn't owner
+if ($entity->owner_guid != $user->guid) {
+
+ likes_notify_user($entity->getOwnerEntity(), $user, $entity);
+}
+
+system_message(elgg_echo("likes:likes"));
+
+// Forward back to the page where the user 'liked' the object
+forward(REFERER);
diff --git a/mod/likes/actions/likes/delete.php b/mod/likes/actions/likes/delete.php
new file mode 100644
index 000000000..322d512e8
--- /dev/null
+++ b/mod/likes/actions/likes/delete.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Elgg delete like action
+ *
+ */
+
+// Support deleting by id in case we're deleting another user's likes
+$id = (int) get_input('id');
+
+$like = NULL;
+if ($id) {
+ $like = elgg_get_annotation_from_id($id);
+}
+
+if (!$like) {
+ $likes = elgg_get_annotations(array(
+ 'guid' => (int) get_input('guid'),
+ 'annotation_owner_guid' => elgg_get_logged_in_user_guid(),
+ 'annotation_name' => 'likes',
+ ));
+ $like = $likes[0];
+}
+
+if ($like && $like->canEdit()) {
+ $like->delete();
+ system_message(elgg_echo("likes:deleted"));
+ forward(REFERER);
+}
+
+register_error(elgg_echo("likes:notdeleted"));
+forward(REFERER);
diff --git a/mod/likes/languages/en.php b/mod/likes/languages/en.php
new file mode 100644
index 000000000..bdbd2a963
--- /dev/null
+++ b/mod/likes/languages/en.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Likes English language file
+ */
+
+$english = array(
+ 'likes:this' => 'liked this',
+ 'likes:deleted' => 'Your like has been removed',
+ 'likes:see' => 'See who liked this',
+ 'likes:remove' => 'Unlike this',
+ 'likes:notdeleted' => 'There was a problem removing your like',
+ 'likes:likes' => 'You now like this item',
+ 'likes:failure' => 'There was a problem liking this item',
+ 'likes:alreadyliked' => 'You have already liked this item',
+ 'likes:notfound' => 'The item you are trying to like cannot be found',
+ 'likes:likethis' => 'Like this',
+ 'likes:userlikedthis' => '%s like',
+ 'likes:userslikedthis' => '%s likes',
+ 'likes:river:annotate' => 'likes',
+ 'likes:delete:confirm' => 'Are you sure you want to delete this like?',
+
+ 'river:likes' => 'likes %s %s',
+
+ // notifications. yikes.
+ 'likes:notifications:subject' => '%s likes your post "%s"',
+ 'likes:notifications:body' =>
+'Hi %1$s,
+
+%2$s likes your post "%3$s" on %4$s
+
+See your original post here:
+
+%5$s
+
+or view %2$s\'s profile here:
+
+%6$s
+
+Thanks,
+%4$s
+',
+
+);
+
+add_translation('en', $english);
diff --git a/mod/likes/manifest.xml b/mod/likes/manifest.xml
new file mode 100644
index 000000000..62835fcf5
--- /dev/null
+++ b/mod/likes/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Likes</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>social</category>
+ <description>Enables users to like content on the site.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/likes/start.php b/mod/likes/start.php
new file mode 100644
index 000000000..0f8e12159
--- /dev/null
+++ b/mod/likes/start.php
@@ -0,0 +1,171 @@
+<?php
+/**
+ * Likes plugin
+ *
+ */
+
+elgg_register_event_handler('init', 'system', 'likes_init');
+
+function likes_init() {
+
+ elgg_extend_view('css/elgg', 'likes/css');
+ elgg_extend_view('js/elgg', 'likes/js');
+
+ // registered with priority < 500 so other plugins can remove likes
+ elgg_register_plugin_hook_handler('register', 'menu:river', 'likes_river_menu_setup', 400);
+ elgg_register_plugin_hook_handler('register', 'menu:entity', 'likes_entity_menu_setup', 400);
+
+ $actions_base = elgg_get_plugins_path() . 'likes/actions/likes';
+ elgg_register_action('likes/add', "$actions_base/add.php");
+ elgg_register_action('likes/delete', "$actions_base/delete.php");
+}
+
+/**
+ * Add likes to entity menu at end of the menu
+ */
+function likes_entity_menu_setup($hook, $type, $return, $params) {
+ if (elgg_in_context('widgets')) {
+ return $return;
+ }
+
+ $entity = $params['entity'];
+
+ // likes button
+ $options = array(
+ 'name' => 'likes',
+ 'text' => elgg_view('likes/button', array('entity' => $entity)),
+ 'href' => false,
+ 'priority' => 1000,
+ );
+ $return[] = ElggMenuItem::factory($options);
+
+ // likes count
+ $count = elgg_view('likes/count', array('entity' => $entity));
+ if ($count) {
+ $options = array(
+ 'name' => 'likes_count',
+ 'text' => $count,
+ 'href' => false,
+ 'priority' => 1001,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+
+ return $return;
+}
+
+/**
+ * Add a like button to river actions
+ */
+function likes_river_menu_setup($hook, $type, $return, $params) {
+ if (elgg_is_logged_in()) {
+ $item = $params['item'];
+
+ // only like group creation #3958
+ if ($item->type == "group" && $item->view != "river/group/create") {
+ return $return;
+ }
+
+ // don't like users #4116
+ if ($item->type == "user") {
+ return $return;
+ }
+
+ $object = $item->getObjectEntity();
+ if (!elgg_in_context('widgets') && $item->annotation_id == 0) {
+ if ($object->canAnnotate(0, 'likes')) {
+ // like button
+ $options = array(
+ 'name' => 'likes',
+ 'href' => false,
+ 'text' => elgg_view('likes/button', array('entity' => $object)),
+ 'is_action' => true,
+ 'priority' => 100,
+ );
+ $return[] = ElggMenuItem::factory($options);
+
+ // likes count
+ $count = elgg_view('likes/count', array('entity' => $object));
+ if ($count) {
+ $options = array(
+ 'name' => 'likes_count',
+ 'text' => $count,
+ 'href' => false,
+ 'priority' => 101,
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+ }
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Count how many people have liked an entity.
+ *
+ * @param ElggEntity $entity
+ *
+ * @return int Number of likes
+ */
+function likes_count($entity) {
+ $type = $entity->getType();
+ $params = array('entity' => $entity);
+ $number = elgg_trigger_plugin_hook('likes:count', $type, $params, false);
+
+ if ($number) {
+ return $number;
+ } else {
+ return $entity->countAnnotations('likes');
+ }
+}
+
+/**
+ * Notify $user that $liker liked his $entity.
+ *
+ * @param type $user
+ * @param type $liker
+ * @param type $entity
+ */
+function likes_notify_user(ElggUser $user, ElggUser $liker, ElggEntity $entity) {
+
+ if (!$user instanceof ElggUser) {
+ return false;
+ }
+
+ if (!$liker instanceof ElggUser) {
+ return false;
+ }
+
+ if (!$entity instanceof ElggEntity) {
+ return false;
+ }
+
+ $title_str = $entity->title;
+ if (!$title_str) {
+ $title_str = elgg_get_excerpt($entity->description);
+ }
+
+ $site = get_config('site');
+
+ $subject = elgg_echo('likes:notifications:subject', array(
+ $liker->name,
+ $title_str
+ ));
+
+ $body = elgg_echo('likes:notifications:body', array(
+ $user->name,
+ $liker->name,
+ $title_str,
+ $site->name,
+ $entity->getURL(),
+ $liker->getURL()
+ ));
+
+ notify_user($user->guid,
+ $liker->guid,
+ $subject,
+ $body
+ );
+} \ No newline at end of file
diff --git a/mod/likes/views/default/annotation/likes.php b/mod/likes/views/default/annotation/likes.php
new file mode 100644
index 000000000..2b5acc520
--- /dev/null
+++ b/mod/likes/views/default/annotation/likes.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Elgg show the users who liked the object
+ *
+ * @uses $vars['annotation']
+ */
+
+if (!isset($vars['annotation'])) {
+ return true;
+}
+
+$like = $vars['annotation'];
+
+$user = $like->getOwnerEntity();
+if (!$user) {
+ return true;
+}
+
+$user_icon = elgg_view_entity_icon($user, 'tiny');
+$user_link = elgg_view('output/url', array(
+ 'href' => $user->getURL(),
+ 'text' => $user->name,
+ 'is_trusted' => true,
+));
+
+$likes_string = elgg_echo('likes:this');
+
+$friendlytime = elgg_view_friendly_time($like->time_created);
+
+if ($like->canEdit()) {
+ $delete_button = elgg_view("output/confirmlink",array(
+ 'href' => "action/likes/delete?id={$like->id}",
+ 'text' => "<span class=\"elgg-icon elgg-icon-delete float-alt\"></span>",
+ 'confirm' => elgg_echo('likes:delete:confirm'),
+ 'encode_text' => false,
+ ));
+}
+
+$body = <<<HTML
+<p class="mbn">
+ $delete_button
+ $user_link $likes_string
+ <span class="elgg-subtext">
+ $friendlytime
+ </span>
+</p>
+HTML;
+
+echo elgg_view_image_block($user_icon, $body);
diff --git a/mod/likes/views/default/likes/button.php b/mod/likes/views/default/likes/button.php
new file mode 100644
index 000000000..bc7c8fd8a
--- /dev/null
+++ b/mod/likes/views/default/likes/button.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Elgg likes button
+ *
+ * @uses $vars['entity']
+ */
+
+if (!isset($vars['entity'])) {
+ return true;
+}
+
+$guid = $vars['entity']->getGUID();
+
+// check to see if the user has already liked this
+if (elgg_is_logged_in() && $vars['entity']->canAnnotate(0, 'likes')) {
+ if (!elgg_annotation_exists($guid, 'likes')) {
+ $url = elgg_get_site_url() . "action/likes/add?guid={$guid}";
+ $params = array(
+ 'href' => $url,
+ 'text' => elgg_view_icon('thumbs-up'),
+ 'title' => elgg_echo('likes:likethis'),
+ 'is_action' => true,
+ 'is_trusted' => true,
+ );
+ $likes_button = elgg_view('output/url', $params);
+ } else {
+ $url = elgg_get_site_url() . "action/likes/delete?guid={$guid}";
+ $params = array(
+ 'href' => $url,
+ 'text' => elgg_view_icon('thumbs-up-alt'),
+ 'title' => elgg_echo('likes:remove'),
+ 'is_action' => true,
+ 'is_trusted' => true,
+ );
+ $likes_button = elgg_view('output/url', $params);
+ }
+}
+
+echo $likes_button;
diff --git a/mod/likes/views/default/likes/count.php b/mod/likes/views/default/likes/count.php
new file mode 100644
index 000000000..071a069bd
--- /dev/null
+++ b/mod/likes/views/default/likes/count.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Count of who has liked something
+ *
+ * @uses $vars['entity']
+ */
+
+
+$list = '';
+$num_of_likes = likes_count($vars['entity']);
+$guid = $vars['entity']->getGUID();
+
+if ($num_of_likes) {
+ // display the number of likes
+ if ($num_of_likes == 1) {
+ $likes_string = elgg_echo('likes:userlikedthis', array($num_of_likes));
+ } else {
+ $likes_string = elgg_echo('likes:userslikedthis', array($num_of_likes));
+ }
+ $params = array(
+ 'text' => $likes_string,
+ 'title' => elgg_echo('likes:see'),
+ 'rel' => 'popup',
+ 'href' => "#likes-$guid"
+ );
+ $list = elgg_view('output/url', $params);
+ $list .= "<div class='elgg-module elgg-module-popup elgg-likes hidden clearfix' id='likes-$guid'>";
+ $list .= elgg_list_annotations(array(
+ 'guid' => $guid,
+ 'annotation_name' => 'likes',
+ 'limit' => 99,
+ 'list_class' => 'elgg-list-likes'
+ ));
+ $list .= "</div>";
+ echo $list;
+}
diff --git a/mod/likes/views/default/likes/css.php b/mod/likes/views/default/likes/css.php
new file mode 100644
index 000000000..1ec07b366
--- /dev/null
+++ b/mod/likes/views/default/likes/css.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Likes CSS
+ */
+?>
+
+/* ***************************************
+ Likes
+*************************************** */
+.elgg-likes {
+ width: 345px;
+ position: absolute;
+}
+
+.elgg-menu .elgg-menu-item-likes-count {
+ margin-left: 3px;
+}
diff --git a/mod/likes/views/default/likes/js.php b/mod/likes/views/default/likes/js.php
new file mode 100644
index 000000000..f701ebedf
--- /dev/null
+++ b/mod/likes/views/default/likes/js.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Likes JavaScript extension for elgg.js
+ */
+?>
+
+/**
+ * Repositions the likes popup
+ *
+ * @param {String} hook 'getOptions'
+ * @param {String} type 'ui.popup'
+ * @param {Object} params An array of info about the target and source.
+ * @param {Object} options Options to pass to
+ *
+ * @return {Object}
+ */
+elgg.ui.likesPopupHandler = function(hook, type, params, options) {
+ if (params.target.hasClass('elgg-likes')) {
+ options.my = 'right bottom';
+ options.at = 'left top';
+ return options;
+ }
+ return null;
+};
+
+elgg.register_hook_handler('getOptions', 'ui.popup', elgg.ui.likesPopupHandler); \ No newline at end of file
diff --git a/mod/linkup b/mod/linkup
new file mode 160000
+Subproject 31be7a50f246601e1ff93f0a5822806bff30b1b
diff --git a/mod/livestream b/mod/livestream
new file mode 160000
+Subproject 89d1f3877f241f34e3ed3baad3c9ee9a4fee79e
diff --git a/mod/logbrowser/languages/en.php b/mod/logbrowser/languages/en.php
new file mode 100644
index 000000000..b1d2681dd
--- /dev/null
+++ b/mod/logbrowser/languages/en.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Elgg log browser plugin language pack
+ *
+ * @package ElggLogBrowser
+ */
+
+$english = array(
+ 'admin:administer_utilities:logbrowser' => 'Log browser',
+ 'logbrowser' => 'Log browser',
+ 'logbrowser:browse' => 'Browse system log',
+ 'logbrowser:search' => 'Refine results',
+ 'logbrowser:user' => 'Username to search by',
+ 'logbrowser:starttime' => 'Beginning time (for example "last monday", "1 hour ago")',
+ 'logbrowser:endtime' => 'End time',
+
+ 'logbrowser:explore' => 'Explore log',
+
+ 'logbrowser:date' => 'Date and time',
+ 'logbrowser:ip_address' => 'IP address',
+ 'logbrowser:user:name' => 'User',
+ 'logbrowser:user:guid' => 'User GUID',
+ 'logbrowser:object' => 'Object type',
+ 'logbrowser:object:guid' => 'Object GUID',
+ 'logbrowser:action' => 'Action',
+
+ 'logbrowser:no_result' => 'No results',
+);
+
+add_translation("en", $english); \ No newline at end of file
diff --git a/mod/logbrowser/manifest.xml b/mod/logbrowser/manifest.xml
new file mode 100644
index 000000000..4527e2cbb
--- /dev/null
+++ b/mod/logbrowser/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Log Browser</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>admin</category>
+ <description>Browse the system event log</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/logbrowser/start.php b/mod/logbrowser/start.php
new file mode 100644
index 000000000..22659877b
--- /dev/null
+++ b/mod/logbrowser/start.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Elgg log browser.
+ *
+ * @package ElggLogBrowser
+ */
+
+elgg_register_event_handler('init', 'system', 'logbrowser_init');
+
+/**
+ * Initialize the log browser plugin.
+ */
+function logbrowser_init() {
+
+ elgg_register_plugin_hook_handler('register', 'menu:user_hover', 'logbrowser_user_hover_menu');
+
+ elgg_register_admin_menu_item('administer', 'logbrowser', 'administer_utilities');
+}
+
+/**
+ * Add to the user hover menu
+ */
+function logbrowser_user_hover_menu($hook, $type, $return, $params) {
+ $user = $params['entity'];
+
+ $url = "admin/administer_utilities/logbrowser?user_guid={$user->guid}";
+ $item = new ElggMenuItem('logbrowser', elgg_echo('logbrowser:explore'), $url);
+ $item->setSection('admin');
+ $return[] = $item;
+
+ return $return;
+}
diff --git a/mod/logbrowser/views/default/admin/administer_utilities/logbrowser.php b/mod/logbrowser/views/default/admin/administer_utilities/logbrowser.php
new file mode 100644
index 000000000..9506c9d9f
--- /dev/null
+++ b/mod/logbrowser/views/default/admin/administer_utilities/logbrowser.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Elgg log browser admin page
+ *
+ * @note The ElggObject this creates for each entry is temporary
+ *
+ * @package ElggLogBrowser
+ */
+
+$limit = get_input('limit', 20);
+$offset = get_input('offset');
+
+$search_username = get_input('search_username');
+if ($search_username) {
+ $user = get_user_by_username($search_username);
+ if ($user) {
+ $user_guid = $user->guid;
+ } else {
+ $user_guid = null;
+ }
+} else {
+ $user_guid = get_input('user_guid', null);
+ if ($user_guid) {
+ $user_guid = (int) $user_guid;
+ $user = get_entity($user_guid);
+ if ($user) {
+ $search_username = $user->username;
+ }
+ } else {
+ $user_guid = null;
+ }
+}
+
+$timelower = get_input('timelower');
+if ($timelower) {
+ $timelower = strtotime($timelower);
+}
+
+$timeupper = get_input('timeupper');
+if ($timeupper) {
+ $timeupper = strtotime($timeupper);
+}
+
+$ip_address = get_input('ip_address');
+
+$refine = elgg_view('logbrowser/refine', array(
+ 'timeupper' => $timeupper,
+ 'timelower' => $timelower,
+ 'ip_address' => $ip_address,
+ 'username' => $search_username,
+));
+
+// Get log entries
+$log = get_system_log($user_guid, "", "", "","", $limit, $offset, false, $timeupper, $timelower,
+ 0, $ip_address);
+$count = get_system_log($user_guid, "", "", "","", $limit, $offset, true, $timeupper, $timelower,
+ 0, $ip_address);
+
+// if user does not exist, we have no results
+if ($search_username && is_null($user_guid)) {
+ $log = false;
+ $count = 0;
+}
+
+$table = elgg_view('logbrowser/table', array('log_entries' => $log));
+
+$nav = elgg_view('navigation/pagination',array(
+ 'offset' => $offset,
+ 'count' => $count,
+ 'limit' => $limit,
+));
+
+// display admin body
+$body = <<<__HTML
+$refine
+$nav
+$table
+$nav
+__HTML;
+
+echo $body;
diff --git a/mod/logbrowser/views/default/forms/logbrowser/refine.php b/mod/logbrowser/views/default/forms/logbrowser/refine.php
new file mode 100644
index 000000000..ebf7f10ed
--- /dev/null
+++ b/mod/logbrowser/views/default/forms/logbrowser/refine.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Form body for refining the log browser search.
+ * Look for a particular person or in a time window.
+ *
+ * @uses $vars['username']
+ * @uses $vars['ip_address']
+ * @uses $vars['timelower']
+ * @uses $vars['timeupper']
+ */
+
+if (isset($vars['timelower'])) {
+ $lowerval = date('r', $vars['timelower']);
+} else {
+ $lowerval = "";
+}
+if (isset($vars['timeupper'])) {
+ $upperval = date('r', $vars['timeupper']);
+} else {
+ $upperval = "";
+}
+$ip_address = elgg_extract('ip_address', $vars);
+$username = elgg_extract('username', $vars);
+
+$form = "<div>" . elgg_echo('logbrowser:user');
+$form .= elgg_view('input/text', array(
+ 'name' => 'search_username',
+ 'value' => $username,
+)) . "</div>";
+
+$form .= "<div>" . elgg_echo('logbrowser:ip_address');
+$form .= elgg_view('input/text', array(
+ 'name' => 'ip_address',
+ 'value' => $ip_address,
+)) . "</div>";
+
+$form .= "<div>" . elgg_echo('logbrowser:starttime');
+$form .= elgg_view('input/text', array(
+ 'name' => 'timelower',
+ 'value' => $lowerval,
+)) . "</div>";
+
+$form .= "<div>" . elgg_echo('logbrowser:endtime');
+$form .= elgg_view('input/text', array(
+ 'name' => 'timeupper',
+ 'value' => $upperval,
+)) . "</div>";
+$form .= '<div class="elgg-foot">';
+$form .= elgg_view('input/submit', array(
+ 'value' => elgg_echo('search'),
+));
+$form .= '</div>';
+
+echo $form;
diff --git a/mod/logbrowser/views/default/logbrowser/refine.php b/mod/logbrowser/views/default/logbrowser/refine.php
new file mode 100644
index 000000000..86460c79e
--- /dev/null
+++ b/mod/logbrowser/views/default/logbrowser/refine.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Log browser search form
+ *
+ * @package ElggLogBrowser
+ */
+
+$form_vars = array(
+ 'method' => 'get',
+ 'action' => 'admin/administer_utilities/logbrowser',
+ 'disable_security' => true,
+);
+$form = elgg_view_form('logbrowser/refine', $form_vars, $vars);
+
+$toggle_link = elgg_view('output/url', array(
+ 'href' => '#log-browser-search-form',
+ 'text' => elgg_echo('logbrowser:search'),
+ 'rel' => 'toggle',
+));
+
+$form_class = 'elgg-module elgg-module-inline';
+if (!isset($vars['user_guid'])) {
+ $form_class .= ' hidden';
+}
+
+?>
+
+<div id="logbrowser-search-area" class="mbm">
+ <div>
+ <?php echo $toggle_link; ?>
+ </div>
+ <div id="log-browser-search-form" class="<?php echo $form_class; ?>">
+ <div class="elgg-head">
+ <h3><?php echo elgg_echo('logbrowser:search'); ?></h3>
+ </div>
+ <div class="elgg-body">
+ <?php echo $form; ?>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/mod/logbrowser/views/default/logbrowser/table.php b/mod/logbrowser/views/default/logbrowser/table.php
new file mode 100644
index 000000000..1223c1456
--- /dev/null
+++ b/mod/logbrowser/views/default/logbrowser/table.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * Log browser table
+ *
+ * @package ElggLogBrowser
+ */
+
+$log_entries = $vars['log_entries'];
+?>
+
+<table class="elgg-table">
+ <tr>
+ <th><?php echo elgg_echo('logbrowser:date'); ?></th>
+ <th><?php echo elgg_echo('logbrowser:ip_address'); ?></th>
+ <th><?php echo elgg_echo('logbrowser:user:name'); ?></th>
+ <th><?php echo elgg_echo('logbrowser:user:guid'); ?></th>
+ <th><?php echo elgg_echo('logbrowser:object'); ?></th>
+ <th><?php echo elgg_echo('logbrowser:object:guid'); ?></th>
+ <th><?php echo elgg_echo('logbrowser:action'); ?></th>
+ </tr>
+<?php
+ $alt = '';
+ foreach ($log_entries as $entry) {
+ if ($entry->ip_address) {
+ $ip_address = $entry->ip_address;
+ } else {
+ $ip_address = '&nbsp;';
+ }
+
+ $user = get_entity($entry->performed_by_guid);
+ if ($user) {
+ $user_link = elgg_view('output/url', array(
+ 'href' => $user->getURL(),
+ 'text' => $user->name,
+ 'is_trusted' => true,
+ ));
+ $user_guid_link = elgg_view('output/url', array(
+ 'href' => "admin/overview/logbrowser?user_guid=$user->guid",
+ 'text' => $user->getGUID(),
+ 'is_trusted' => true,
+ ));
+ } else {
+ $user_guid_link = $user_link = '&nbsp;';
+ }
+
+ $object = get_object_from_log_entry($entry->id);
+ if (is_callable(array($object, 'getURL'))) {
+ $object_link = elgg_view('output/url', array(
+ 'href' => $object->getURL(),
+ 'text' => $entry->object_class,
+ 'is_trusted' => true,
+ ));
+ } else {
+ $object_link = $entry->object_class;
+ }
+?>
+ <tr <?php echo $alt; ?>>
+ <td class="log-entry-time">
+ <?php echo date('r', $entry->time_created); ?>
+ </td>
+ <td class="log-entry-ip-address">
+ <?php echo $ip_address; ?>
+ </td>
+ <td class="log-entry-user">
+ <?php echo $user_link; ?>
+ </td>
+ <td class="log-entry-guid">
+ <?php echo $user_guid_link; ?>
+ </td>
+ <td class="log-entry-object">
+ <?php echo $object_link; ?>
+ </td>
+ <td class="log-entry-guid">
+ <?php echo $entry->object_id; ?>
+ </td>
+ <td class="log-entry-action">
+ <?php echo elgg_echo($entry->event); ?>
+ </td>
+ </tr>
+<?php
+
+ $alt = $alt ? '' : 'class="alt"';
+ }
+?>
+</table>
+<?php
+if (!$log_entries) {
+ echo elgg_echo('logbrowser:no_result');
+ return true;
+}
diff --git a/mod/logrotate/languages/en.php b/mod/logrotate/languages/en.php
new file mode 100644
index 000000000..27731d732
--- /dev/null
+++ b/mod/logrotate/languages/en.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Elgg log rotator language pack.
+ *
+ * @package ElggLogRotate
+ */
+
+$english = array(
+ 'logrotate:period' => 'How often should the system log be archived?',
+
+ 'logrotate:weekly' => 'Once a week',
+ 'logrotate:monthly' => 'Once a month',
+ 'logrotate:yearly' => 'Once a year',
+
+ 'logrotate:logrotated' => "Log rotated\n",
+ 'logrotate:lognotrotated' => "Error rotating log\n",
+
+ 'logrotate:delete' => 'Delete archived logs older than a',
+
+ 'logrotate:week' => 'week',
+ 'logrotate:month' => 'month',
+ 'logrotate:year' => 'year',
+
+ 'logrotate:logdeleted' => "Log deleted\n",
+ 'logrotate:lognotdeleted' => "Error deleting log\n",
+);
+
+add_translation("en", $english);
diff --git a/mod/logrotate/manifest.xml b/mod/logrotate/manifest.xml
new file mode 100644
index 000000000..1aa62e2e7
--- /dev/null
+++ b/mod/logrotate/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Log Rotate</name>
+ <author>Core developers</author>
+ <version>1.5</version>
+ <category>bundled</category>
+ <category>admin</category>
+ <description>Rotate the system log at specific intervals</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/logrotate/start.php b/mod/logrotate/start.php
new file mode 100644
index 000000000..28f14ad14
--- /dev/null
+++ b/mod/logrotate/start.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Elgg log rotator.
+ *
+ * @package ElggLogRotate
+ */
+
+elgg_register_event_handler('init', 'system', 'logrotate_init');
+
+function logrotate_init() {
+ $period = elgg_get_plugin_setting('period', 'logrotate');
+ $delete = elgg_get_plugin_setting('delete', 'logrotate');
+ switch ($period) {
+ case 'weekly':
+ case 'monthly' :
+ case 'yearly' :
+ break;
+ default:
+ $period = 'monthly';
+ }
+
+ // Register cron hook for archival of logs
+ elgg_register_plugin_hook_handler('cron', $period, 'logrotate_archive_cron');
+ // Register cron hook for deletion of selected archived logs
+ elgg_register_plugin_hook_handler('cron', $delete, 'logrotate_delete_cron');
+}
+
+/**
+ * Trigger the log rotation.
+ */
+function logrotate_archive_cron($hook, $entity_type, $returnvalue, $params) {
+ $resulttext = elgg_echo("logrotate:logrotated");
+
+ $day = 86400;
+
+ $offset = 0;
+ $period = elgg_get_plugin_setting('period', 'logrotate');
+ switch ($period) {
+ case 'weekly':
+ $offset = $day * 7;
+ break;
+ case 'yearly':
+ $offset = $day * 365;
+ break;
+ case 'monthly':
+ default:
+ // assume 28 days even if a month is longer. Won't cause data loss.
+ $offset = $day * 28;
+ }
+
+ if (!archive_log($offset)) {
+ $resulttext = elgg_echo("logrotate:lognotrotated");
+ }
+
+ return $returnvalue . $resulttext;
+}
+
+/**
+ * Trigger the log deletion.
+ */
+function logrotate_delete_cron($hook, $entity_type, $returnvalue, $params) {
+ $resulttext = elgg_echo("logrotate:logdeleted");
+
+ $day = 86400;
+
+ $offset = 0;
+ $period = elgg_get_plugin_setting('delete', 'logrotate');
+ switch ($period) {
+ case 'weekly':
+ $offset = $day * 7;
+ break;
+ case 'yearly':
+ $offset = $day * 365;
+ break;
+ case 'monthly':
+ default:
+ // assume 28 days even if a month is longer. Won't cause data loss.
+ $offset = $day * 28;
+ }
+
+ if (!log_browser_delete_log($offset)) {
+ $resulttext = elgg_echo("logrotate:lognotdeleted");
+ }
+
+ return $returnvalue . $resulttext;
+}
+
+/**
+ * This function deletes archived copies of the system logs that are older than specified.
+ *
+ * @param int $time_of_delete An offset in seconds from now to delete (useful for log deletion)
+ */
+function log_browser_delete_log($time_of_delete) {
+ global $CONFIG;
+
+ $offset = (int)$time_of_delete;
+ $now = time();
+
+ $ts = $now - $offset;
+
+ $FLAG = 1;
+ $result = mysql_query("SHOW TABLES like '{$CONFIG->dbprefix}system_log_%'");
+ while ($showtablerow = mysql_fetch_array($result)) {
+ //To obtain time of archival
+ $log_time = explode("{$CONFIG->dbprefix}system_log_", $showtablerow[0]);
+ if ($log_time < $ts) {
+ //If the time of archival is before the required offset then delete
+ if (!mysql_query("DROP TABLE $showtablerow[0]")) {
+ $FLAG = 0;
+ }
+ }
+ }
+
+ //Check if the appropriate tables have been deleted and return true if yes
+ if ($FLAG) {
+ return true;
+ } else {
+ return false;
+ }
+
+}
diff --git a/mod/logrotate/views/default/plugins/logrotate/settings.php b/mod/logrotate/views/default/plugins/logrotate/settings.php
new file mode 100644
index 000000000..bef8b308d
--- /dev/null
+++ b/mod/logrotate/views/default/plugins/logrotate/settings.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Elgg log rotator plugin settings.
+ *
+ * @package ElggLogRotate
+ */
+
+$period = $vars['entity']->period;
+$delete = $vars['entity']->delete;
+if (!$period) {
+ $period = 'monthly';
+}
+
+if (!$delete) {
+ $delete = 'monthly';
+}
+?>
+<div>
+ <?php
+
+ echo elgg_echo('logrotate:period') . ' ';
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'params[period]',
+ 'options_values' => array(
+ 'weekly' => elgg_echo('logrotate:weekly'),
+ 'monthly' => elgg_echo('logrotate:monthly'),
+ 'yearly' => elgg_echo('logrotate:yearly'),
+ ),
+ 'value' => $period,
+ ));
+ ?>
+</div>
+<div>
+ <?php
+
+ echo elgg_echo('logrotate:delete') . ' ';
+ echo elgg_view('input/dropdown', array(
+ 'name' => 'params[delete]',
+ 'options_values' => array(
+ 'weekly' => elgg_echo('logrotate:week'),
+ 'monthly' => elgg_echo('logrotate:month'),
+ 'yearly' => elgg_echo('logrotate:year'),
+ ),
+ 'value' => $delete,
+ ));
+ ?>
+</div>
diff --git a/mod/members/languages/en.php b/mod/members/languages/en.php
new file mode 100644
index 000000000..73783143e
--- /dev/null
+++ b/mod/members/languages/en.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Members English language file
+ */
+
+$english = array(
+ 'members:label:newest' => 'Newest',
+ 'members:label:popular' => 'Popular',
+ 'members:label:online' => 'Online',
+ 'members:searchname' => 'Search members by name',
+ 'members:searchtag' => 'Search members by tag',
+ 'members:title:searchname' => 'Member search for %s',
+ 'members:title:searchtag' => 'Members tagged with %s',
+);
+
+add_translation('en', $english);
diff --git a/mod/members/manifest.xml b/mod/members/manifest.xml
new file mode 100644
index 000000000..8b18c9f91
--- /dev/null
+++ b/mod/members/manifest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Members</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <description>Lists the members of your site</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/members/pages/members/index.php b/mod/members/pages/members/index.php
new file mode 100644
index 000000000..330ef66bf
--- /dev/null
+++ b/mod/members/pages/members/index.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Members index
+ *
+ */
+
+$num_members = get_number_users();
+
+$title = elgg_echo('members');
+
+$options = array('type' => 'user', 'full_view' => false);
+switch ($vars['page']) {
+ case 'popular':
+ $options['relationship'] = 'friend';
+ $options['inverse_relationship'] = false;
+ $content = elgg_list_entities_from_relationship_count($options);
+ break;
+ case 'online':
+ $content = get_online_users();
+ break;
+ case 'newest':
+ default:
+ $content = elgg_list_entities($options);
+ break;
+}
+
+$params = array(
+ 'content' => $content,
+ 'sidebar' => elgg_view('members/sidebar'),
+ 'title' => $title . " ($num_members)",
+ 'filter_override' => elgg_view('members/nav', array('selected' => $vars['page'])),
+);
+
+$body = elgg_view_layout('content', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/mod/members/pages/members/search.php b/mod/members/pages/members/search.php
new file mode 100644
index 000000000..1f0444d67
--- /dev/null
+++ b/mod/members/pages/members/search.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Members search page
+ *
+ */
+
+if ($vars['search_type'] == 'tag') {
+ $tag = get_input('tag');
+
+ $title = elgg_echo('members:title:searchtag', array($tag));
+
+ $options = array();
+ $options['query'] = $tag;
+ $options['type'] = "user";
+ $options['offset'] = $offset;
+ $options['limit'] = $limit;
+ $results = elgg_trigger_plugin_hook('search', 'tags', $options, array());
+ $count = $results['count'];
+ $users = $results['entities'];
+ $content = elgg_view_entity_list($users, array(
+ 'count' => $count,
+ 'offset' => $offset,
+ 'limit' => $limit,
+ 'full_view' => false,
+ 'list_type_toggle' => false,
+ 'pagination' => true,
+ ));
+} else {
+ $name = sanitize_string(get_input('name'));
+
+ $title = elgg_echo('members:title:searchname', array($name));
+
+ $db_prefix = elgg_get_config('dbprefix');
+ $params = array(
+ 'type' => 'user',
+ 'full_view' => false,
+ 'joins' => array("JOIN {$db_prefix}users_entity u ON e.guid=u.guid"),
+ 'wheres' => array("(u.name LIKE \"%{$name}%\" OR u.username LIKE \"%{$name}%\")"),
+ );
+ $content .= elgg_list_entities($params);
+}
+
+$params = array(
+ 'title' => $title,
+ 'content' => $content,
+ 'sidebar' => elgg_view('members/sidebar'),
+);
+
+$body = elgg_view_layout('one_sidebar', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/mod/members/start.php b/mod/members/start.php
new file mode 100644
index 000000000..54787cd16
--- /dev/null
+++ b/mod/members/start.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Members plugin intialization
+ */
+
+elgg_register_event_handler('init', 'system', 'members_init');
+
+/**
+ * Initialize page handler and site menu item
+ */
+function members_init() {
+ elgg_register_page_handler('members', 'members_page_handler');
+
+ $item = new ElggMenuItem('members', elgg_echo('members'), 'members');
+ elgg_register_menu_item('site', $item);
+}
+
+/**
+ * Members page handler
+ *
+ * @param array $page url segments
+ * @return bool
+ */
+function members_page_handler($page) {
+ $base = elgg_get_plugins_path() . 'members/pages/members';
+
+ if (!isset($page[0])) {
+ $page[0] = 'newest';
+ }
+
+ $vars = array();
+ $vars['page'] = $page[0];
+
+ if ($page[0] == 'search') {
+ $vars['search_type'] = $page[1];
+ require_once "$base/search.php";
+ } else {
+ require_once "$base/index.php";
+ }
+ return true;
+}
diff --git a/mod/members/views/default/members/nav.php b/mod/members/views/default/members/nav.php
new file mode 100644
index 000000000..510d1849b
--- /dev/null
+++ b/mod/members/views/default/members/nav.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Members navigation
+ */
+
+$tabs = array(
+ 'newest' => array(
+ 'title' => elgg_echo('members:label:newest'),
+ 'url' => "members/newest",
+ 'selected' => $vars['selected'] == 'newest',
+ ),
+ 'popular' => array(
+ 'title' => elgg_echo('members:label:popular'),
+ 'url' => "members/popular",
+ 'selected' => $vars['selected'] == 'popular',
+ ),
+ 'online' => array(
+ 'title' => elgg_echo('members:label:online'),
+ 'url' => "members/online",
+ 'selected' => $vars['selected'] == 'online',
+ ),
+);
+
+echo elgg_view('navigation/tabs', array('tabs' => $tabs));
diff --git a/mod/members/views/default/members/sidebar.php b/mod/members/views/default/members/sidebar.php
new file mode 100644
index 000000000..8fa0fe02b
--- /dev/null
+++ b/mod/members/views/default/members/sidebar.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Members sidebar
+ */
+
+// Tag search
+$params = array(
+ 'method' => 'get',
+ 'action' => elgg_get_site_url() . 'members/search/tag',
+ 'disable_security' => true,
+);
+
+$body = elgg_view_form('members/tag_search', $params);
+
+echo elgg_view_module('aside', elgg_echo('members:searchtag'), $body);
+
+// name search
+$params = array(
+ 'method' => 'get',
+ 'action' => elgg_get_site_url() . 'members/search/name',
+ 'disable_security' => true,
+);
+$body = elgg_view_form('members/name_search', $params);
+
+echo elgg_view_module('aside', elgg_echo('members:searchname'), $body); \ No newline at end of file
diff --git a/mod/messageboard/actions/add.php b/mod/messageboard/actions/add.php
new file mode 100644
index 000000000..971dd22fc
--- /dev/null
+++ b/mod/messageboard/actions/add.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Elgg Message board: add message action
+ *
+ * @package ElggMessageBoard
+ */
+
+$message_content = get_input('message_content');
+$owner_guid = get_input("owner_guid");
+$owner = get_entity($owner_guid);
+
+if ($owner && !empty($message_content)) {
+ $result = messageboard_add(elgg_get_logged_in_user_entity(), $owner, $message_content, $owner->access_id);
+
+ if ($result) {
+ system_message(elgg_echo("messageboard:posted"));
+
+ $options = array(
+ 'annotations_name' => 'messageboard',
+ 'guid' => $owner->getGUID(),
+ 'limit' => $num_display,
+ 'pagination' => false,
+ 'reverse_order_by' => true,
+ 'limit' => 1
+ );
+
+ $output = elgg_list_annotations($options);
+ echo $output;
+
+ } else {
+ register_error(elgg_echo("messageboard:failure"));
+ }
+
+} else {
+ register_error(elgg_echo("messageboard:blank"));
+}
+
+forward(REFERER);
diff --git a/mod/messageboard/actions/delete.php b/mod/messageboard/actions/delete.php
new file mode 100644
index 000000000..a1f62278c
--- /dev/null
+++ b/mod/messageboard/actions/delete.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg Message board: delete message action
+ *
+ * @package ElggMessageBoard
+ */
+
+$annotation_id = (int) get_input('annotation_id');
+$message = elgg_get_annotation_from_id($annotation_id);
+
+if ($message && $message->canEdit() && $message->delete()) {
+ system_message(elgg_echo("messageboard:deleted"));
+} else {
+ system_message(elgg_echo("messageboard:notdeleted"));
+}
+
+forward(REFERER);
diff --git a/mod/messageboard/languages/en.php b/mod/messageboard/languages/en.php
new file mode 100644
index 000000000..9027eb650
--- /dev/null
+++ b/mod/messageboard/languages/en.php
@@ -0,0 +1,72 @@
+<?php
+
+$english = array(
+
+ /**
+ * Menu items and titles
+ */
+
+ 'messageboard:board' => "Message board",
+ 'messageboard:messageboard' => "message board",
+ 'messageboard:viewall' => "View all",
+ 'messageboard:postit' => "Post",
+ 'messageboard:history:title' => "History",
+ 'messageboard:none' => "There is nothing on this message board yet",
+ 'messageboard:num_display' => "Number of messages to display",
+ 'messageboard:desc' => "This is a message board that you can put on your profile where other users can comment.",
+
+ 'messageboard:user' => "%s's message board",
+
+ 'messageboard:replyon' => 'reply on',
+ 'messageboard:history' => "history",
+
+ 'messageboard:owner' => '%s\'s message board',
+ 'messageboard:owner_history' => '%s\'s posts on %s\'s message board',
+
+ /**
+ * Message board widget river
+ */
+ 'river:messageboard:user:default' => "%s posted on %s's message board",
+
+ /**
+ * Status messages
+ */
+
+ 'messageboard:posted' => "You successfully posted on the message board.",
+ 'messageboard:deleted' => "You successfully deleted the message.",
+
+ /**
+ * Email messages
+ */
+
+ 'messageboard:email:subject' => 'You have a new message board comment!',
+ 'messageboard:email:body' => "You have a new message board comment from %s. It reads:
+
+
+%s
+
+
+To view your message board comments, click here:
+
+ %s
+
+To view %s's profile, click here:
+
+ %s
+
+You cannot reply to this email.",
+
+ /**
+ * Error messages
+ */
+
+ 'messageboard:blank' => "Sorry; you need to actually put something in the message area before we can save it.",
+ 'messageboard:notfound' => "Sorry; we could not find the specified item.",
+ 'messageboard:notdeleted' => "Sorry; we could not delete this message.",
+ 'messageboard:somethingwentwrong' => "Something went wrong when trying to save your message, make sure you actually wrote a message.",
+
+ 'messageboard:failure' => "An unexpected error occurred when adding your message. Please try again.",
+
+);
+
+add_translation("en", $english);
diff --git a/mod/messageboard/manifest.xml b/mod/messageboard/manifest.xml
new file mode 100644
index 000000000..617813725
--- /dev/null
+++ b/mod/messageboard/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Message Board</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>widget</category>
+ <description>This plugin allows users to put a message board on their profile for other users to post comments.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/messageboard/pages/messageboard/owner.php b/mod/messageboard/pages/messageboard/owner.php
new file mode 100644
index 000000000..2c854d4f3
--- /dev/null
+++ b/mod/messageboard/pages/messageboard/owner.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Elgg Message board index page
+ *
+ * @package MessageBoard
+ */
+
+$page_owner_guid = get_input('page_owner_guid');
+elgg_set_page_owner_guid($page_owner_guid);
+$page_owner = elgg_get_page_owner_entity();
+$history_username = get_input('history_username');
+$history_user = get_user_by_username($history_username);
+
+elgg_push_breadcrumb($page_owner->name, $page_owner->getURL());
+
+$options = array(
+ 'annotations_name' => 'messageboard',
+ 'guid' => $page_owner_guid,
+ 'limit' => 10,
+ 'reverse_order_by' => true,
+);
+
+if ($history_user) {
+ $options['annotations_owner_guid'] = $history_user->getGUID();
+ $title = elgg_echo('messageboard:owner_history', array($history_user->name, $page_owner->name));
+
+ if ($page_owner instanceof ElggGroup) {
+ $mb_url = "messageboard/group/$page_owner->guid/all";
+ } else {
+ $mb_url = "messageboard/owner/$page_owner->username";
+ }
+} else {
+ $title = elgg_echo('messageboard:owner', array($page_owner->name));
+ $mb_url = '';
+}
+
+elgg_push_breadcrumb(elgg_echo('messageboard:board'), $mb_url);
+
+if ($history_user) {
+ elgg_push_breadcrumb($history_user->name);
+}
+
+$content = elgg_list_annotations($options);
+
+if (!$content) {
+ $content = elgg_echo('messageboard:none');
+}
+
+$vars = array(
+ 'filter' => false,
+ 'content' => $content,
+ 'title' => $title,
+ 'reverse_order_by' => true
+);
+
+$body = elgg_view_layout('content', $vars);
+
+echo elgg_view_page($title, $body); \ No newline at end of file
diff --git a/mod/messageboard/start.php b/mod/messageboard/start.php
new file mode 100644
index 000000000..0c65edc4f
--- /dev/null
+++ b/mod/messageboard/start.php
@@ -0,0 +1,163 @@
+<?php
+/**
+ * Elgg Message board
+ * This plugin allows users and groups to attach a message board to their profile for other users
+ * to post comments.
+ *
+ * @package MessageBoard
+ */
+
+/**
+ * MessageBoard initialisation
+ */
+function messageboard_init() {
+ // js
+ elgg_extend_view('js/elgg', 'messageboard/js');
+
+ // css
+ elgg_extend_view('css/elgg', 'messageboard/css');
+
+ elgg_register_page_handler('messageboard', 'messageboard_page_handler');
+
+ // messageboard widget - only for profile for now
+ elgg_register_widget_type('messageboard', elgg_echo("messageboard:board"), elgg_echo("messageboard:desc"), "profile");
+
+ // actions
+ $action_path = dirname(__FILE__) . '/actions';
+ elgg_register_action("messageboard/add", "$action_path/add.php");
+ elgg_register_action("messageboard/delete", "$action_path/delete.php");
+
+ // delete annotations for posts
+ elgg_register_plugin_hook_handler('register', 'menu:annotation', 'messageboard_annotation_menu_setup');
+}
+
+/**
+ * Messageboard dispatcher for flat message board.
+ * Profile (and eventually group) widgets handle their own.
+ *
+ * URLs take the form of
+ * User's messageboard: messageboard/owner/<username>
+ * Y's history of posts on X's board: messageboard/owner/<X>/history/<Y>
+ * New post: messageboard/add/<guid> (container: user or group)
+ * Group messageboard: messageboard/group/<guid>/all (not implemented)
+ *
+ * @param array $page Array of page elements
+ * @return bool
+ */
+function messageboard_page_handler($page) {
+ $new_section_one = array('owner', 'add', 'group');
+
+ // if the first part is a username, forward to new format
+ if (isset($page[0]) && !in_array($page[0], $new_section_one) && get_user_by_username($page[0])) {
+ register_error(elgg_echo("changebookmark"));
+ $url = "messageboard/owner/{$page[0]}";
+ forward($url);
+ }
+
+ $pages = dirname(__FILE__) . '/pages/messageboard';
+
+ switch ($page[0]) {
+ case 'owner':
+ //@todo if they have the widget disabled, don't allow this.
+ $owner_name = elgg_extract(1, $page);
+ $owner = get_user_by_username($owner_name);
+ set_input('page_owner_guid', $owner->guid);
+ $history = elgg_extract(2, $page);
+ $username = elgg_extract(3, $page);
+
+ if ($history && $username) {
+ set_input('history_username', $username);
+ }
+
+ include "$pages/owner.php";
+ break;
+
+ case 'add':
+ $container_guid = elgg_extract(1, $page);
+ set_input('container_guid', $container_guid);
+ include "$pages/add.php";
+ break;
+
+ case 'group':
+ group_gatekeeper();
+ $owner_guid = elgg_extract(1, $page);
+ set_input('page_owner_guid', $owner_guid);
+ include "$pages/owner.php";
+ break;
+
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Add messageboard post
+ *
+ * @param ElggUser $poster User posting the message
+ * @param ElggUser $owner User who owns the message board
+ * @param string $message The posted message
+ * @param int $access_id Access level (see defines in elgglib.php)
+ * @return bool
+ */
+function messageboard_add($poster, $owner, $message, $access_id = ACCESS_PUBLIC) {
+ $result = $owner->annotate('messageboard', $message, $access_id, $poster->guid);
+
+ if (!$result) {
+ return false;
+ }
+
+ add_to_river('river/object/messageboard/create',
+ 'messageboard',
+ $poster->guid,
+ $owner->guid,
+ $access_id,
+ 0,
+ $result);
+
+ // only send notification if not self
+ if ($poster->guid != $owner->guid) {
+ $subject = elgg_echo('messageboard:email:subject');
+ $body = elgg_echo('messageboard:email:body', array(
+ $poster->name,
+ $message,
+ elgg_get_site_url() . "messageboard/" . $owner->username,
+ $poster->name,
+ $poster->getURL()
+ ));
+
+ notify_user($owner->guid, $poster->guid, $subject, $body);
+ }
+
+ return $result;
+}
+
+
+/**
+ * Add edit and delete links for forum replies
+ */
+function messageboard_annotation_menu_setup($hook, $type, $return, $params) {
+ $annotation = $params['annotation'];
+ if ($annotation->name != 'messageboard') {
+ return $return;
+ }
+
+ if ($annotation->canEdit()) {
+ $url = elgg_http_add_url_query_elements('action/messageboard/delete', array(
+ 'annotation_id' => $annotation->id,
+ ));
+
+ $options = array(
+ 'name' => 'delete',
+ 'href' => $url,
+ 'text' => "<span class=\"elgg-icon elgg-icon-delete\"></span>",
+ 'confirm' => elgg_echo('deleteconfirm'),
+ 'encode_text' => false
+ );
+ $return[] = ElggMenuItem::factory($options);
+ }
+
+ return $return;
+}
+
+elgg_register_event_handler('init', 'system', 'messageboard_init'); \ No newline at end of file
diff --git a/mod/messageboard/views/default/forms/messageboard/add.php b/mod/messageboard/views/default/forms/messageboard/add.php
new file mode 100644
index 000000000..b219fd800
--- /dev/null
+++ b/mod/messageboard/views/default/forms/messageboard/add.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Elgg Message board add form body
+ *
+ * @package ElggMessageBoard
+ */
+
+echo elgg_view('input/plaintext', array(
+ 'name' => 'message_content',
+ 'class' => 'messageboard-input mbs'
+));
+
+echo elgg_view('input/hidden', array(
+ 'name' => 'owner_guid',
+ 'value' => elgg_get_page_owner_guid()
+));
+
+echo elgg_view('input/submit', array(
+ 'value' => elgg_echo('post')
+));
diff --git a/mod/messageboard/views/default/messageboard/css.php b/mod/messageboard/views/default/messageboard/css.php
new file mode 100644
index 000000000..b3cfab957
--- /dev/null
+++ b/mod/messageboard/views/default/messageboard/css.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Elgg Messageboard CSS view
+ *
+ */
+?>
+
+.messageboard-input {
+ height: 100px;
+}
diff --git a/mod/messageboard/views/default/messageboard/js.php b/mod/messageboard/views/default/messageboard/js.php
new file mode 100644
index 000000000..79472069d
--- /dev/null
+++ b/mod/messageboard/views/default/messageboard/js.php
@@ -0,0 +1,56 @@
+//<script>
+elgg.provide('elgg.messageboard');
+
+elgg.messageboard.init = function() {
+ var form = $('form[name=elgg-messageboard]');
+ form.find('input[type=submit]').live('click', elgg.messageboard.submit);
+
+ // remove the default binding for confirmation since we're doing extra stuff.
+ // @todo remove if we add a hook to the requires confirmation callback
+ form.parent().find('a.elgg-requires-confirmation')
+ .click(elgg.messageboard.deletePost)
+
+ // double whammy for in case the load order changes.
+ .unbind('click', elgg.ui.requiresConfirmation)
+ .removeClass('elgg-requires-confirmation');
+};
+
+elgg.messageboard.submit = function(e) {
+ var form = $(this).parents('form');
+ var data = form.serialize();
+
+ elgg.action('messageboard/add', {
+ data: data,
+ success: function(json) {
+ // the action always returns the full ul and li wrapped annotation.
+ var ul = form.next('ul.elgg-list-annotation');
+
+ if (ul.length < 1) {
+ form.parent().append(json.output);
+ } else {
+ ul.prepend($(json.output).find('li:first'));
+ };
+ form.find('textarea').val('');
+ }
+ });
+
+ e.preventDefault();
+};
+
+elgg.messageboard.deletePost = function(e) {
+ var link = $(this);
+ var confirmText = link.attr('title') || elgg.echo('question:areyousure');
+
+ if (confirm(confirmText)) {
+ elgg.action($(this).attr('href'), {
+ success: function() {
+ var item = $(link).closest('.elgg-item');
+ item.remove();
+ }
+ });
+ }
+
+ e.preventDefault();
+};
+
+elgg.register_hook_handler('init', 'system', elgg.messageboard.init);
diff --git a/mod/messageboard/views/default/river/object/messageboard/create.php b/mod/messageboard/views/default/river/object/messageboard/create.php
new file mode 100644
index 000000000..ac10a55c1
--- /dev/null
+++ b/mod/messageboard/views/default/river/object/messageboard/create.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Messageboard river view
+ */
+
+$messageboard = $vars['item']->getAnnotation();
+$excerpt = elgg_get_excerpt($messageboard->value);
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => $excerpt,
+));
diff --git a/mod/messageboard/views/default/widgets/messageboard/content.php b/mod/messageboard/views/default/widgets/messageboard/content.php
new file mode 100644
index 000000000..35954e7a3
--- /dev/null
+++ b/mod/messageboard/views/default/widgets/messageboard/content.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Elgg messageboard widget view
+ *
+ */
+
+$owner = elgg_get_page_owner_entity();
+
+$num_display = $vars['entity']->num_display;
+
+if (elgg_is_logged_in()) {
+ echo elgg_view_form('messageboard/add', array('name' => 'elgg-messageboard'));
+}
+
+$options = array(
+ 'annotations_name' => 'messageboard',
+ 'guid' => $owner->getGUID(),
+ 'limit' => $num_display,
+ 'pagination' => false,
+ 'reverse_order_by' => true,
+);
+
+echo elgg_list_annotations($options);
+
+if ($owner instanceof ElggGroup) {
+ $url = "messageboard/group/$owner->guid/all";
+} else {
+ $url = "messageboard/owner/$owner->username";
+}
+
+echo elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => elgg_echo('messageboard:viewall'),
+ 'is_trusted' => true,
+)); \ No newline at end of file
diff --git a/mod/messageboard/views/default/widgets/messageboard/edit.php b/mod/messageboard/views/default/widgets/messageboard/edit.php
new file mode 100644
index 000000000..74848f832
--- /dev/null
+++ b/mod/messageboard/views/default/widgets/messageboard/edit.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Messageboard widget edit view
+ */
+
+// set default value
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 5;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('messageboard:num_display'); ?>:
+ <?php echo $dropdown; ?>
+</div>
diff --git a/mod/messages/actions/messages/delete.php b/mod/messages/actions/messages/delete.php
new file mode 100644
index 000000000..ffdb3b3a3
--- /dev/null
+++ b/mod/messages/actions/messages/delete.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Delete message
+ */
+
+$guid = (int) get_input('guid');
+
+$message = get_entity($guid);
+if (!$message || !$message->canEdit()) {
+ register_error(elgg_echo('messages:error:delete:single'));
+ forward(REFERER);
+}
+
+if (!$message->delete()) {
+ register_error(elgg_echo('messages:error:delete:single'));
+} else {
+ system_message(elgg_echo('messages:success:delete:single'));
+}
+
+forward(REFERER);
diff --git a/mod/messages/actions/messages/process.php b/mod/messages/actions/messages/process.php
new file mode 100644
index 000000000..d929ae190
--- /dev/null
+++ b/mod/messages/actions/messages/process.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Process a set of messages
+ */
+
+$message_ids = get_input('message_id', array());
+
+if (!$message_ids) {
+ register_error(elgg_echo('messages:error:messages_not_selected'));
+ forward(REFERER);
+}
+
+$delete_flag = get_input('delete', false);
+$read_flag = get_input('read', false);
+
+if ($delete_flag) {
+ $success_msg = elgg_echo('messages:success:delete');
+ foreach ($message_ids as $guid) {
+ $message = get_entity($guid);
+ if ($message && $message->getSubtype() == 'messages' && $message->canEdit()) {
+ $message->delete();
+ }
+ }
+} else {
+ $success_msg = elgg_echo('messages:success:read');
+ foreach ($message_ids as $guid) {
+ $message = get_entity($guid);
+ if ($message && $message->getSubtype() == 'messages' && $message->canEdit()) {
+ $message->readYet = 1;
+ }
+ }
+}
+
+system_message($success_msg);
+forward(REFERER);
diff --git a/mod/messages/actions/messages/send.php b/mod/messages/actions/messages/send.php
new file mode 100644
index 000000000..9d9f6c8b7
--- /dev/null
+++ b/mod/messages/actions/messages/send.php
@@ -0,0 +1,46 @@
+<?php
+/**
+* Ssend a message action
+*
+* @package ElggMessages
+*/
+
+$subject = strip_tags(get_input('subject'));
+$body = get_input('body');
+$recipient_guid = get_input('recipient_guid');
+
+elgg_make_sticky_form('messages');
+
+//$reply = get_input('reply',0); // this is the guid of the message replying to
+
+if (!$recipient_guid) {
+ register_error(elgg_echo("messages:user:blank"));
+ forward("messages/compose");
+}
+
+$user = get_user($recipient_guid);
+if (!$user) {
+ register_error(elgg_echo("messages:user:nonexist"));
+ forward("messages/compose");
+}
+
+// Make sure the message field, send to field and title are not blank
+if (!$body || !$subject) {
+ register_error(elgg_echo("messages:blank"));
+ forward("messages/compose");
+}
+
+// Otherwise, 'send' the message
+$result = messages_send($subject, $body, $recipient_guid, 0, $reply);
+
+// Save 'send' the message
+if (!$result) {
+ register_error(elgg_echo("messages:error"));
+ forward("messages/compose");
+}
+
+elgg_clear_sticky_form('messages');
+
+system_message(elgg_echo("messages:posted"));
+
+forward('messages/inbox/' . elgg_get_logged_in_user_entity()->username);
diff --git a/mod/messages/graphics/icon_notifications_site.gif b/mod/messages/graphics/icon_notifications_site.gif
new file mode 100644
index 000000000..d12ca08b1
--- /dev/null
+++ b/mod/messages/graphics/icon_notifications_site.gif
Binary files differ
diff --git a/mod/messages/graphics/toolbar_messages_icon.gif b/mod/messages/graphics/toolbar_messages_icon.gif
new file mode 100644
index 000000000..72eebf32f
--- /dev/null
+++ b/mod/messages/graphics/toolbar_messages_icon.gif
Binary files differ
diff --git a/mod/messages/languages/en.php b/mod/messages/languages/en.php
new file mode 100644
index 000000000..7732a9dce
--- /dev/null
+++ b/mod/messages/languages/en.php
@@ -0,0 +1,97 @@
+<?php
+/**
+* Elgg send a message action page
+*
+* @package ElggMessages
+*/
+
+$english = array(
+ /**
+ * Menu items and titles
+ */
+
+ 'messages' => "Messages",
+ 'messages:unreadcount' => "%s unread",
+ 'messages:back' => "back to messages",
+ 'messages:user' => "%s's inbox",
+ 'messages:posttitle' => "%s's messages: %s",
+ 'messages:inbox' => "Inbox",
+ 'messages:send' => "Send",
+ 'messages:sent' => "Sent",
+ 'messages:message' => "Message",
+ 'messages:title' => "Subject",
+ 'messages:to' => "To",
+ 'messages:from' => "From",
+ 'messages:fly' => "Send",
+ 'messages:replying' => "Message replying to",
+ 'messages:inbox' => "Inbox",
+ 'messages:sendmessage' => "Send a message",
+ 'messages:compose' => "Compose a message",
+ 'messages:add' => "Compose a message",
+ 'messages:sentmessages' => "Sent messages",
+ 'messages:recent' => "Recent messages",
+ 'messages:original' => "Original message",
+ 'messages:yours' => "Your message",
+ 'messages:answer' => "Reply",
+ 'messages:toggle' => 'Toggle all',
+ 'messages:markread' => 'Mark read',
+ 'messages:recipient' => 'Choose a recipient&hellip;',
+ 'messages:to_user' => 'To: %s',
+
+ 'messages:new' => 'New message',
+
+ 'notification:method:site' => 'Site',
+
+ 'messages:error' => 'There was a problem saving your message. Please try again.',
+
+ 'item:object:messages' => 'Messages',
+
+ /**
+ * Status messages
+ */
+
+ 'messages:posted' => "Your message was successfully sent.",
+ 'messages:success:delete:single' => 'Message was deleted',
+ 'messages:success:delete' => 'Messages deleted',
+ 'messages:success:read' => 'Messages marked as read',
+ 'messages:error:messages_not_selected' => 'No messages selected',
+ 'messages:error:delete:single' => 'Unable to delete the message',
+
+ /**
+ * Email messages
+ */
+
+ 'messages:email:subject' => 'You have a new message!',
+ 'messages:email:body' => "You have a new message from %s. It reads:
+
+
+ %s
+
+
+ To view your messages, click here:
+
+ %s
+
+ To send %s a message, click here:
+
+ %s
+
+ You cannot reply to this email.",
+
+ /**
+ * Error messages
+ */
+
+ 'messages:blank' => "Sorry; you need to actually put something in the message body before we can save it.",
+ 'messages:notfound' => "Sorry; we could not find the specified message.",
+ 'messages:notdeleted' => "Sorry; we could not delete this message.",
+ 'messages:nopermission' => "You do not have permission to alter that message.",
+ 'messages:nomessages' => "There are no messages.",
+ 'messages:user:nonexist' => "We could not find the recipient in the user database.",
+ 'messages:user:blank' => "You did not select someone to send this to.",
+
+ 'messages:deleted_sender' => 'Deleted user',
+
+);
+
+add_translation("en", $english); \ No newline at end of file
diff --git a/mod/messages/lib/messages.php b/mod/messages/lib/messages.php
new file mode 100644
index 000000000..062670fe9
--- /dev/null
+++ b/mod/messages/lib/messages.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Messages helper functions
+ *
+ * @package ElggMessages
+ */
+
+/**
+ * Prepare the compose form variables
+ *
+ * @return array
+ */
+function messages_prepare_form_vars($recipient_guid = 0) {
+
+ // input names => defaults
+ $values = array(
+ 'subject' => '',
+ 'body' => '',
+ 'recipient_guid' => $recipient_guid,
+ );
+
+ if (elgg_is_sticky_form('messages')) {
+ foreach (array_keys($values) as $field) {
+ $values[$field] = elgg_get_sticky_value('messages', $field);
+ }
+ }
+
+ elgg_clear_sticky_form('messages');
+
+ return $values;
+}
+
diff --git a/mod/messages/manifest.xml b/mod/messages/manifest.xml
new file mode 100644
index 000000000..6e3462901
--- /dev/null
+++ b/mod/messages/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Messages</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>communication</category>
+ <description>Elgg internal messages plugin. This plugin lets user send each other messages.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/messages/pages/messages/inbox.php b/mod/messages/pages/messages/inbox.php
new file mode 100644
index 000000000..de5b8b231
--- /dev/null
+++ b/mod/messages/pages/messages/inbox.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Elgg messages inbox page
+ *
+ * @package ElggMessages
+*/
+
+gatekeeper();
+
+$page_owner = elgg_get_page_owner_entity();
+
+if (!$page_owner || !$page_owner->canEdit()) {
+ $guid = 0;
+ if($page_owner){
+ $guid = $page_owner->getGUID();
+ }
+ register_error(elgg_echo("pageownerunavailable", array($guid)));
+ forward();
+}
+
+elgg_push_breadcrumb(elgg_echo('messages:inbox'));
+
+elgg_register_title_button();
+
+$title = elgg_echo('messages:user', array($page_owner->name));
+
+$list = elgg_list_entities_from_metadata(array(
+ 'type' => 'object',
+ 'subtype' => 'messages',
+ 'metadata_name' => 'toId',
+ 'metadata_value' => elgg_get_page_owner_guid(),
+ 'owner_guid' => elgg_get_page_owner_guid(),
+ 'full_view' => false,
+));
+
+$body_vars = array(
+ 'folder' => 'inbox',
+ 'list' => $list,
+);
+$content = elgg_view_form('messages/process', array(), $body_vars);
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => elgg_echo('messages:inbox'),
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/messages/pages/messages/read.php b/mod/messages/pages/messages/read.php
new file mode 100644
index 000000000..4223c6bac
--- /dev/null
+++ b/mod/messages/pages/messages/read.php
@@ -0,0 +1,60 @@
+<?php
+/**
+* Read a message page
+*
+* @package ElggMessages
+*/
+
+gatekeeper();
+
+$message = get_entity(get_input('guid'));
+if (!$message || !elgg_instanceof($message, "object", "messages")) {
+ forward('messages/inbox/' . elgg_get_logged_in_user_entity()->username);
+}
+
+// mark the message as read
+$message->readYet = true;
+
+elgg_set_page_owner_guid($message->getOwnerGUID());
+$page_owner = elgg_get_page_owner_entity();
+
+$title = $message->title;
+
+$inbox = false;
+if ($page_owner->getGUID() == $message->toId) {
+ $inbox = true;
+ elgg_push_breadcrumb(elgg_echo('messages:inbox'), 'messages/inbox/' . $page_owner->username);
+} else {
+ elgg_push_breadcrumb(elgg_echo('messages:sent'), 'messages/sent/' . $page_owner->username);
+}
+elgg_push_breadcrumb($title);
+
+$content = elgg_view_entity($message, array('full_view' => true));
+if ($inbox) {
+ $form_params = array(
+ 'id' => 'messages-reply-form',
+ 'class' => 'hidden mtl',
+ 'action' => 'action/messages/send',
+ );
+ $body_params = array('message' => $message);
+ $content .= elgg_view_form('messages/reply', $form_params, $body_params);
+ $from_user = get_user($message->fromId);
+
+ if ((elgg_get_logged_in_user_guid() == elgg_get_page_owner_guid()) && $from_user) {
+ elgg_register_menu_item('title', array(
+ 'name' => 'reply',
+ 'href' => '#messages-reply-form',
+ 'text' => elgg_echo('messages:answer'),
+ 'link_class' => 'elgg-button elgg-button-action',
+ 'rel' => 'toggle',
+ ));
+ }
+}
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/messages/pages/messages/send.php b/mod/messages/pages/messages/send.php
new file mode 100644
index 000000000..b46d0ba52
--- /dev/null
+++ b/mod/messages/pages/messages/send.php
@@ -0,0 +1,27 @@
+<?php
+/**
+* Compose a message
+*
+* @package ElggMessages
+*/
+
+gatekeeper();
+
+$page_owner = elgg_get_logged_in_user_entity();
+elgg_set_page_owner_guid($page_owner->getGUID());
+
+$title = elgg_echo('messages:add');
+
+elgg_push_breadcrumb($title);
+
+$params = messages_prepare_form_vars((int)get_input('send_to'));
+$params['friends'] = $page_owner->getFriends('', 50);
+$content = elgg_view_form('messages/send', array(), $params);
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/messages/pages/messages/sent.php b/mod/messages/pages/messages/sent.php
new file mode 100644
index 000000000..3d08cd5ee
--- /dev/null
+++ b/mod/messages/pages/messages/sent.php
@@ -0,0 +1,48 @@
+<?php
+/**
+* Elgg sent messages page
+*
+* @package ElggMessages
+*/
+
+gatekeeper();
+
+$page_owner = elgg_get_page_owner_entity();
+
+if (!$page_owner || !$page_owner->canEdit()) {
+ $guid = 0;
+ if($page_owner){
+ $guid = $page_owner->getGUID();
+ }
+ register_error(elgg_echo("pageownerunavailable", array($guid)));
+ forward();
+}
+
+elgg_push_breadcrumb(elgg_echo('messages:sent'));
+
+elgg_register_title_button();
+
+$title = elgg_echo('messages:sentmessages', array($page_owner->name));
+
+$list = elgg_list_entities_from_metadata(array(
+ 'type' => 'object',
+ 'subtype' => 'messages',
+ 'metadata_name' => 'fromId',
+ 'metadata_value' => elgg_get_page_owner_guid(),
+ 'owner_guid' => elgg_get_page_owner_guid(),
+ 'full_view' => false,
+));
+
+$body_vars = array(
+ 'folder' => 'sent',
+ 'list' => $list,
+);
+$content = elgg_view_form('messages/process', array(), $body_vars);
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/messages/start.php b/mod/messages/start.php
new file mode 100644
index 000000000..e17640098
--- /dev/null
+++ b/mod/messages/start.php
@@ -0,0 +1,434 @@
+<?php
+/**
+* Elgg internal messages plugin
+* This plugin lets users send messages to each other.
+*
+* @package ElggMessages
+*/
+
+
+elgg_register_event_handler('init', 'system', 'messages_init');
+
+function messages_init() {
+
+ // register a library of helper functions
+ elgg_register_library('elgg:messages', elgg_get_plugins_path() . 'messages/lib/messages.php');
+
+ // add page menu items
+ if (elgg_is_logged_in()) {
+ elgg_register_menu_item('page', array(
+ 'name' => 'messages:inbox',
+ 'text' => elgg_echo('messages:inbox'),
+ 'href' => "messages/inbox/" . elgg_get_logged_in_user_entity()->username,
+ 'context' => 'messages',
+ ));
+
+ elgg_register_menu_item('page', array(
+ 'name' => 'messages:sentmessages',
+ 'text' => elgg_echo('messages:sentmessages'),
+ 'href' => "messages/sent/" . elgg_get_logged_in_user_entity()->username,
+ 'context' => 'messages',
+ ));
+ }
+
+ elgg_register_event_handler('pagesetup', 'system', 'messages_notifier');
+
+ // Extend system CSS with our own styles, which are defined in the messages/css view
+ elgg_extend_view('css/elgg', 'messages/css');
+ elgg_extend_view('js/elgg', 'messages/js');
+
+ // Register a page handler, so we can have nice URLs
+ elgg_register_page_handler('messages', 'messages_page_handler');
+
+ // Register a URL handler
+ elgg_register_entity_url_handler('object', 'messages', 'messages_url');
+
+ // Extend avatar hover menu
+ elgg_register_plugin_hook_handler('register', 'menu:user_hover', 'messages_user_hover_menu');
+
+ // Register a notification handler for site messages
+ register_notification_handler("site", "messages_site_notify_handler");
+ elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'messages_notification_msg');
+ register_notification_object('object', 'messages', elgg_echo('messages:new'));
+
+ // ecml
+ elgg_register_plugin_hook_handler('get_views', 'ecml', 'messages_ecml_views_hook');
+
+ // permission overrides
+ elgg_register_plugin_hook_handler('permissions_check:metadata', 'object', 'messages_can_edit_metadata');
+ elgg_register_plugin_hook_handler('permissions_check', 'object', 'messages_can_edit');
+ elgg_register_plugin_hook_handler('container_permissions_check', 'object', 'messages_can_edit_container');
+
+ // Register actions
+ $action_path = elgg_get_plugins_path() . 'messages/actions/messages';
+ elgg_register_action("messages/send", "$action_path/send.php");
+ elgg_register_action("messages/delete", "$action_path/delete.php");
+ elgg_register_action("messages/process", "$action_path/process.php");
+}
+
+/**
+ * Messages page handler
+ *
+ * @param array $page Array of URL components for routing
+ * @return bool
+ */
+function messages_page_handler($page) {
+
+ elgg_load_library('elgg:messages');
+
+ elgg_push_breadcrumb(elgg_echo('messages'), 'messages/inbox/' . elgg_get_logged_in_user_entity()->username);
+
+ if (!isset($page[0])) {
+ $page[0] = 'inbox';
+ }
+
+ // supporting the old inbox url /messages/<username>
+ $user = get_user_by_username($page[0]);
+ if ($user) {
+ $page[1] = $page[0];
+ $page[0] = 'inbox';
+ }
+
+ if (!isset($page[1])) {
+ $page[1] = elgg_get_logged_in_user_entity()->username;
+ }
+
+ $base_dir = elgg_get_plugins_path() . 'messages/pages/messages';
+
+ switch ($page[0]) {
+ case 'inbox':
+ set_input('username', $page[1]);
+ include("$base_dir/inbox.php");
+ break;
+ case 'sent':
+ set_input('username', $page[1]);
+ include("$base_dir/sent.php");
+ break;
+ case 'read':
+ set_input('guid', $page[1]);
+ include("$base_dir/read.php");
+ break;
+ case 'compose':
+ case 'add':
+ include("$base_dir/send.php");
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Display notification of new messages in topbar
+ */
+function messages_notifier() {
+ if (elgg_is_logged_in()) {
+ $class = "elgg-icon elgg-icon-mail";
+ $text = "<span class='$class'></span>";
+ $tooltip = elgg_echo("messages");
+
+ // get unread messages
+ $num_messages = (int)messages_count_unread();
+ if ($num_messages != 0) {
+ $text .= "<span class=\"messages-new\">$num_messages</span>";
+ $tooltip .= " (" . elgg_echo("messages:unreadcount", array($num_messages)) . ")";
+ }
+
+ elgg_register_menu_item('topbar', array(
+ 'name' => 'messages',
+ 'href' => 'messages/inbox/' . elgg_get_logged_in_user_entity()->username,
+ 'text' => $text,
+ 'priority' => 600,
+ 'title' => $tooltip,
+ ));
+ }
+}
+
+/**
+ * Override the canEditMetadata function to return true for messages
+ *
+ */
+function messages_can_edit_metadata($hook_name, $entity_type, $return_value, $parameters) {
+
+ global $messagesendflag;
+
+ if ($messagesendflag == 1) {
+ $entity = $parameters['entity'];
+ if ($entity->getSubtype() == "messages") {
+ return true;
+ }
+ }
+
+ return $return_value;
+}
+
+/**
+ * Override the canEdit function to return true for messages within a particular context.
+ *
+ */
+function messages_can_edit($hook_name, $entity_type, $return_value, $parameters) {
+
+ global $messagesendflag;
+
+ if ($messagesendflag == 1) {
+ $entity = $parameters['entity'];
+ if ($entity->getSubtype() == "messages") {
+ return true;
+ }
+ }
+
+ return $return_value;
+}
+
+/**
+ * Prevent messages from generating a notification
+ */
+function messages_notification_msg($hook_name, $entity_type, $return_value, $params) {
+
+ if ($params['entity'] instanceof ElggEntity) {
+ if ($params['entity']->getSubtype() == 'messages') {
+ return false;
+ }
+ }
+}
+
+/**
+ * Override the canEdit function to return true for messages within a particular context.
+ *
+ */
+function messages_can_edit_container($hook_name, $entity_type, $return_value, $parameters) {
+
+ global $messagesendflag;
+
+ if ($messagesendflag == 1) {
+ return true;
+ }
+
+ return $return_value;
+}
+
+/**
+ * Send an internal message
+ *
+ * @param string $subject The subject line of the message
+ * @param string $body The body of the mesage
+ * @param int $recipient_guid The GUID of the user to send to
+ * @param int $sender_guid Optionally, the GUID of the user to send from
+ * @param int $original_msg_guid The GUID of the message to reply from (default: none)
+ * @param bool $notify Send a notification (default: true)
+ * @param bool $add_to_sent If true (default), will add a message to the sender's 'sent' tray
+ * @return bool
+ */
+function messages_send($subject, $body, $recipient_guid, $sender_guid = 0, $original_msg_guid = 0, $notify = true, $add_to_sent = true) {
+
+ // @todo remove globals
+ global $messagesendflag;
+ $messagesendflag = 1;
+
+ // @todo remove globals
+ global $messages_pm;
+ if ($notify) {
+ $messages_pm = 1;
+ } else {
+ $messages_pm = 0;
+ }
+
+ // If $sender_guid == 0, set to current user
+ if ($sender_guid == 0) {
+ $sender_guid = (int) elgg_get_logged_in_user_guid();
+ }
+
+ // Initialise 2 new ElggObject
+ $message_to = new ElggObject();
+ $message_sent = new ElggObject();
+
+ $message_to->subtype = "messages";
+ $message_sent->subtype = "messages";
+
+ $message_to->owner_guid = $recipient_guid;
+ $message_to->container_guid = $recipient_guid;
+ $message_sent->owner_guid = $sender_guid;
+ $message_sent->container_guid = $sender_guid;
+
+ $message_to->access_id = ACCESS_PUBLIC;
+ $message_sent->access_id = ACCESS_PUBLIC;
+
+ $message_to->title = $subject;
+ $message_to->description = $body;
+
+ $message_sent->title = $subject;
+ $message_sent->description = $body;
+
+ $message_to->toId = $recipient_guid; // the user receiving the message
+ $message_to->fromId = $sender_guid; // the user receiving the message
+ $message_to->readYet = 0; // this is a toggle between 0 / 1 (1 = read)
+ $message_to->hiddenFrom = 0; // this is used when a user deletes a message in their sentbox, it is a flag
+ $message_to->hiddenTo = 0; // this is used when a user deletes a message in their inbox
+
+ $message_sent->toId = $recipient_guid; // the user receiving the message
+ $message_sent->fromId = $sender_guid; // the user receiving the message
+ $message_sent->readYet = 0; // this is a toggle between 0 / 1 (1 = read)
+ $message_sent->hiddenFrom = 0; // this is used when a user deletes a message in their sentbox, it is a flag
+ $message_sent->hiddenTo = 0; // this is used when a user deletes a message in their inbox
+
+ $message_to->msg = 1;
+ $message_sent->msg = 1;
+
+ // Save the copy of the message that goes to the recipient
+ $success = $message_to->save();
+
+ // Save the copy of the message that goes to the sender
+ if ($add_to_sent) {
+ $message_sent->save();
+ }
+
+ $message_to->access_id = ACCESS_PRIVATE;
+ $message_to->save();
+
+ if ($add_to_sent) {
+ $message_sent->access_id = ACCESS_PRIVATE;
+ $message_sent->save();
+ }
+
+ // if the new message is a reply then create a relationship link between the new message
+ // and the message it is in reply to
+ if ($original_msg_guid && $success) {
+ add_entity_relationship($message_sent->guid, "reply", $original_msg_guid);
+ }
+
+ $message_contents = strip_tags($body);
+ if (($recipient_guid != elgg_get_logged_in_user_guid()) && $notify) {
+ $recipient = get_user($recipient_guid);
+ $sender = get_user($sender_guid);
+
+ $subject = elgg_echo('messages:email:subject');
+ $body = elgg_echo('messages:email:body', array(
+ $sender->name,
+ $message_contents,
+ elgg_get_site_url() . "messages/inbox/" . $recipient->username,
+ $sender->name,
+ elgg_get_site_url() . "messages/compose?send_to=" . $sender_guid
+ ));
+
+ notify_user($recipient_guid, $sender_guid, $subject, $body);
+ }
+
+ $messagesendflag = 0;
+ return $success;
+}
+
+/**
+ * Message URL override
+ *
+ * @param ElggObject $message
+ * @return string
+ */
+function messages_url($message) {
+ $url = elgg_get_site_url() . 'messages/read/' . $message->getGUID();
+ return $url;
+}
+
+function count_unread_messages() {
+ elgg_deprecated_notice('Your theme is using count_unread_messages which has been deprecated for messages_count_unread()', 1.8);
+ return messages_count_unread();
+}
+
+/**
+ * Count the unread messages in a user's inbox
+ *
+ * @return int
+ */
+function messages_count_unread() {
+ $user_guid = elgg_get_logged_in_user_guid();
+ $db_prefix = elgg_get_config('dbprefix');
+
+ // denormalize the md to speed things up.
+ // seriously, 10 joins if you don't.
+ $strings = array('toId', $user_guid, 'readYet', 0, 'msg', 1);
+ $map = array();
+ foreach ($strings as $string) {
+ $id = get_metastring_id($string);
+ $map[$string] = $id;
+ }
+
+ $options = array(
+// 'metadata_name_value_pairs' => array(
+// 'toId' => elgg_get_logged_in_user_guid(),
+// 'readYet' => 0,
+// 'msg' => 1
+// ),
+ 'joins' => array(
+ "JOIN {$db_prefix}metadata msg_toId on e.guid = msg_toId.entity_guid",
+ "JOIN {$db_prefix}metadata msg_readYet on e.guid = msg_readYet.entity_guid",
+ "JOIN {$db_prefix}metadata msg_msg on e.guid = msg_msg.entity_guid",
+ ),
+ 'wheres' => array(
+ "msg_toId.name_id='{$map['toId']}' AND msg_toId.value_id='{$map[$user_guid]}'",
+ "msg_readYet.name_id='{$map['readYet']}' AND msg_readYet.value_id='{$map[0]}'",
+ "msg_msg.name_id='{$map['msg']}' AND msg_msg.value_id='{$map[1]}'",
+ ),
+ 'owner_guid' => $user_guid,
+ 'count' => true,
+ );
+
+ return elgg_get_entities_from_metadata($options);
+}
+
+/**
+ * Notification handler
+ *
+ * @param ElggEntity $from
+ * @param ElggUser $to
+ * @param string $subject
+ * @param string $message
+ * @param array $params
+ * @return bool
+ */
+function messages_site_notify_handler(ElggEntity $from, ElggUser $to, $subject, $message, array $params = NULL) {
+
+ if (!$from) {
+ throw new NotificationException(elgg_echo('NotificationException:MissingParameter', array('from')));
+ }
+
+ if (!$to) {
+ throw new NotificationException(elgg_echo('NotificationException:MissingParameter', array('to')));
+ }
+
+ global $messages_pm;
+ if (!$messages_pm) {
+ return messages_send($subject, $message, $to->guid, $from->guid, 0, false, false);
+ }
+
+ return true;
+}
+
+/**
+ * Add to the user hover menu
+ */
+function messages_user_hover_menu($hook, $type, $return, $params) {
+ $user = $params['entity'];
+
+ if (elgg_is_logged_in() && elgg_get_logged_in_user_guid() != $user->guid) {
+ $url = "messages/compose?send_to={$user->guid}";
+ $item = new ElggMenuItem('send', elgg_echo('messages:sendmessage'), $url);
+ $item->setSection('action');
+ $return[] = $item;
+ }
+
+ return $return;
+}
+
+
+/**
+ * Register messages with ECML.
+ *
+ * @param string $hook
+ * @param string $entity_type
+ * @param array $return_value
+ * @param unknown_type $params
+ */
+function messages_ecml_views_hook($hook, $entity_type, $return_value, $params) {
+ $return_value['messages/messages'] = elgg_echo('messages');
+
+ return $return_value;
+}
diff --git a/mod/messages/views/default/forms/messages/process.php b/mod/messages/views/default/forms/messages/process.php
new file mode 100644
index 000000000..cb30792e9
--- /dev/null
+++ b/mod/messages/views/default/forms/messages/process.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Messages folder view (inbox, sent)
+ *
+ * Provides form body for mass deleting messages
+ *
+ * @uses $vars['list'] List of messages
+ *
+ */
+
+$messages = $vars['list'];
+if (!$messages) {
+ echo elgg_echo('messages:nomessages');
+ return true;
+}
+
+echo '<div class="messages-container">';
+echo $messages;
+echo '</div>';
+
+echo '<div class="elgg-foot messages-buttonbank">';
+
+echo elgg_view('input/submit', array(
+ 'value' => elgg_echo('delete'),
+ 'name' => 'delete',
+ 'class' => 'elgg-button-delete elgg-requires-confirmation',
+ 'title' => elgg_echo('deleteconfirm:plural'),
+));
+
+if ($vars['folder'] == "inbox") {
+ echo elgg_view('input/submit', array(
+ 'value' => elgg_echo('messages:markread'),
+ 'name' => 'read',
+ ));
+}
+
+echo elgg_view('input/button', array(
+ 'value' => elgg_echo('messages:toggle'),
+ 'class' => 'elgg-button elgg-button-cancel',
+ 'id' => 'messages-toggle',
+));
+
+echo '</div>';
diff --git a/mod/messages/views/default/forms/messages/reply.php b/mod/messages/views/default/forms/messages/reply.php
new file mode 100644
index 000000000..9f3f4b57e
--- /dev/null
+++ b/mod/messages/views/default/forms/messages/reply.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Reply form
+ *
+ * @uses $vars['message']
+ */
+
+// fix for RE: RE: RE: that builds on replies
+$reply_title = $vars['message']->title;
+if (strncmp($reply_title, "RE:", 3) != 0) {
+ $reply_title = "RE: " . $reply_title;
+}
+
+echo elgg_view('input/hidden', array(
+ 'name' => 'recipient_guid',
+ 'value' => $vars['message']->fromId,
+));
+?>
+
+<div>
+ <label><?php echo elgg_echo("messages:title"); ?>: <br /></label>
+ <?php echo elgg_view('input/text', array(
+ 'name' => 'subject',
+ 'value' => $reply_title,
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo("messages:message"); ?>:</label>
+ <?php echo elgg_view("input/longtext", array(
+ 'name' => 'body',
+ 'value' => '',
+ ));
+ ?>
+</div>
+<div class="elgg-foot">
+ <?php echo elgg_view('input/submit', array('value' => elgg_echo('messages:send'))); ?>
+</div> \ No newline at end of file
diff --git a/mod/messages/views/default/forms/messages/send.php b/mod/messages/views/default/forms/messages/send.php
new file mode 100644
index 000000000..5b7e7830e
--- /dev/null
+++ b/mod/messages/views/default/forms/messages/send.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Compose message form
+ *
+ * @package ElggMessages
+ * @uses $vars['friends']
+ */
+
+$recipient_guid = elgg_extract('recipient_guid', $vars, 0);
+$subject = elgg_extract('subject', $vars, '');
+$body = elgg_extract('body', $vars, '');
+
+$recipients_options = array();
+foreach ($vars['friends'] as $friend) {
+ $recipients_options[$friend->guid] = $friend->name;
+}
+
+if (!array_key_exists($recipient_guid, $recipients_options)) {
+ $recipient = get_entity($recipient_guid);
+ if (elgg_instanceof($recipient, 'user')) {
+ $recipients_options[$recipient_guid] = $recipient->name;
+ }
+}
+
+$recipient_drop_down = elgg_view('input/dropdown', array(
+ 'name' => 'recipient_guid',
+ 'value' => $recipient_guid,
+ 'options_values' => $recipients_options,
+));
+
+?>
+<div>
+ <label><?php echo elgg_echo("messages:to"); ?>: </label>
+ <?php echo $recipient_drop_down; ?>
+</div>
+<div>
+ <label><?php echo elgg_echo("messages:title"); ?>: <br /></label>
+ <?php echo elgg_view('input/text', array(
+ 'name' => 'subject',
+ 'value' => $subject,
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo("messages:message"); ?>:</label>
+ <?php echo elgg_view("input/longtext", array(
+ 'name' => 'body',
+ 'value' => $body,
+ ));
+ ?>
+</div>
+<div class="elgg-foot">
+ <?php echo elgg_view('input/submit', array('value' => elgg_echo('messages:send'))); ?>
+</div>
diff --git a/mod/messages/views/default/messages/css.php b/mod/messages/views/default/messages/css.php
new file mode 100644
index 000000000..f304e0f15
--- /dev/null
+++ b/mod/messages/views/default/messages/css.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Elgg Messages CSS
+ *
+ * @package ElggMessages
+ */
+?>
+
+.messages-container {
+ min-height: 200px;
+}
+.message.unread a {
+ color: #d40005;
+}
+.messages-buttonbank {
+ text-align: right;
+}
+.messages-buttonbank input {
+ margin-left: 10px;
+}
+
+/*** message metadata ***/
+.messages-owner {
+ float: left;
+ width: 20%;
+ margin-right: 2%;
+}
+.messages-subject {
+ float: left;
+ width: 55%;
+ margin-right: 2%;
+}
+.messages-timestamp {
+ float: left;
+ width: 14%;
+ margin-right: 2%;
+}
+.messages-delete {
+ float: left;
+ width: 5%;
+}
+/*** topbar icon ***/
+.messages-new {
+ color: white;
+ background-color: red;
+
+ -webkit-border-radius: 10px;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
+
+ -webkit-box-shadow: -2px 2px 4px rgba(0, 0, 0, 0.50);
+ -moz-box-shadow: -2px 2px 4px rgba(0, 0, 0, 0.50);
+ box-shadow: -2px 2px 4px rgba(0, 0, 0, 0.50);
+
+ position: absolute;
+ text-align: center;
+ top: 0px;
+ left: 26px;
+ min-width: 16px;
+ height: 16px;
+ font-size: 10px;
+ font-weight: bold;
+}
diff --git a/mod/messages/views/default/messages/js.php b/mod/messages/views/default/messages/js.php
new file mode 100644
index 000000000..60cf36b92
--- /dev/null
+++ b/mod/messages/views/default/messages/js.php
@@ -0,0 +1,7 @@
+
+// messages plugin toggle
+elgg.register_hook_handler('init', 'system', function() {
+ $("#messages-toggle").click(function() {
+ $('input[type=checkbox]').click();
+ });
+});
diff --git a/mod/messages/views/default/object/messages.php b/mod/messages/views/default/object/messages.php
new file mode 100644
index 000000000..b12f98522
--- /dev/null
+++ b/mod/messages/views/default/object/messages.php
@@ -0,0 +1,86 @@
+<?php
+/**
+ * File renderer.
+ *
+ * @package ElggFile
+ */
+
+$full = elgg_extract('full_view', $vars, false);
+$message = elgg_extract('entity', $vars, false);
+
+if (!$message) {
+ return true;
+}
+
+if ($message->toId == elgg_get_page_owner_guid()) {
+ // received
+ $user = get_entity($message->fromId);
+ if ($user) {
+ $icon = elgg_view_entity_icon($user, 'tiny');
+ $user_link = elgg_view('output/url', array(
+ 'href' => "messages/compose?send_to=$user->guid",
+ 'text' => $user->name,
+ 'is_trusted' => true,
+ ));
+ } else {
+ $icon = '';
+ $user_link = elgg_echo('messages:deleted_sender');
+ }
+
+ if ($message->readYet) {
+ $class = 'message read';
+ } else {
+ $class = 'message unread';
+ }
+
+} else {
+ // sent
+ $user = get_entity($message->toId);
+
+ if ($user) {
+ $icon = elgg_view_entity_icon($user, 'tiny');
+ $user_link = elgg_view('output/url', array(
+ 'href' => "messages/compose?send_to=$user->guid",
+ 'text' => elgg_echo('messages:to_user', array($user->name)),
+ 'is_trusted' => true,
+ ));
+ } else {
+ $icon = '';
+ $user_link = elgg_echo('messages:deleted_sender');
+ }
+
+ $class = 'message read';
+}
+
+$timestamp = elgg_view_friendly_time($message->time_created);
+
+$subject_info = '';
+if (!$full) {
+ $subject_info .= "<input type='checkbox' name=\"message_id[]\" value=\"{$message->guid}\" />";
+}
+$subject_info .= elgg_view('output/url', array(
+ 'href' => $message->getURL(),
+ 'text' => $message->title,
+ 'is_trusted' => true,
+));
+
+$delete_link = elgg_view("output/confirmlink", array(
+ 'href' => "action/messages/delete?guid=" . $message->getGUID(),
+ 'text' => "<span class=\"elgg-icon elgg-icon-delete float-alt\"></span>",
+ 'confirm' => elgg_echo('deleteconfirm'),
+ 'encode_text' => false,
+ ));
+
+$body = <<<HTML
+<div class="messages-owner">$user_link</div>
+<div class="messages-subject">$subject_info</div>
+<div class="messages-timestamp">$timestamp</div>
+<div class="messages-delete">$delete_link</div>
+HTML;
+
+if ($full) {
+ echo elgg_view_image_block($icon, $body, array('class' => $class));
+ echo elgg_view('output/longtext', array('value' => $message->description));
+} else {
+ echo elgg_view_image_block($icon, $body, array('class' => $class));
+} \ No newline at end of file
diff --git a/mod/notifications/actions/groupsave.php b/mod/notifications/actions/groupsave.php
new file mode 100644
index 000000000..2dd2a6db3
--- /dev/null
+++ b/mod/notifications/actions/groupsave.php
@@ -0,0 +1,49 @@
+<?php
+
+/**
+ * Elgg notifications group save
+ *
+ * @package ElggNotifications
+ */
+
+$current_user = elgg_get_logged_in_user_entity();
+
+$guid = (int) get_input('guid', 0);
+if (!$guid || !($user = get_entity($guid))) {
+ forward();
+}
+if (($user->guid != $current_user->guid) && !$current_user->isAdmin()) {
+ forward();
+}
+
+// Get group memberships and condense them down to an array of guids
+$groups = array();
+$options = array(
+ 'relationship' => 'member',
+ 'relationship_guid' => $user->guid,
+ 'types' => 'group',
+ 'limit' => 9999,
+);
+if ($groupmemberships = elgg_get_entities_from_relationship($options)) {
+ foreach($groupmemberships as $groupmembership) {
+ $groups[] = $groupmembership->guid;
+ }
+}
+
+if (!empty($groups)) {
+ global $NOTIFICATION_HANDLERS;
+ foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+ $subscriptions[$method] = get_input($method.'subscriptions', array());
+ foreach ($groups as $group) {
+ if (in_array($group, $subscriptions[$method])) {
+ add_entity_relationship($user->guid, 'notify'.$method, $group);
+ } else {
+ remove_entity_relationship($user->guid, 'notify'.$method, $group);
+ }
+ }
+ }
+}
+
+system_message(elgg_echo('notifications:subscriptions:success'));
+
+forward(REFERER);
diff --git a/mod/notifications/actions/save.php b/mod/notifications/actions/save.php
new file mode 100644
index 000000000..3fe0001a3
--- /dev/null
+++ b/mod/notifications/actions/save.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * Elgg notifications
+ *
+ * @package ElggNotifications
+ */
+
+$current_user = elgg_get_logged_in_user_entity();
+
+$guid = (int) get_input('guid', 0);
+if (!$guid || !($user = get_entity($guid))) {
+ forward();
+}
+if (($user->guid != $current_user->guid) && !$current_user->isAdmin()) {
+ forward();
+}
+
+global $NOTIFICATION_HANDLERS;
+$subscriptions = array();
+foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ $subscriptions[$method] = get_input($method.'subscriptions');
+ $personal[$method] = get_input($method.'personal');
+ $collections[$method] = get_input($method.'collections');
+
+ $metaname = 'collections_notifications_preferences_' . $method;
+ $user->$metaname = $collections[$method];
+ set_user_notification_setting($user->guid, $method, ($personal[$method] == '1') ? true : false);
+ remove_entity_relationships($user->guid, 'notify' . $method, false, 'user');
+}
+
+// Add new ones
+foreach($subscriptions as $key => $subscription) {
+ if (is_array($subscription) && !empty($subscription)) {
+ foreach($subscription as $subscriptionperson) {
+ add_entity_relationship($user->guid, 'notify' . $key, $subscriptionperson);
+ }
+ }
+}
+
+system_message(elgg_echo('notifications:subscriptions:success'));
+
+forward(REFERER);
diff --git a/mod/notifications/graphics/icon_notifications_email.gif b/mod/notifications/graphics/icon_notifications_email.gif
new file mode 100644
index 000000000..038d6e651
--- /dev/null
+++ b/mod/notifications/graphics/icon_notifications_email.gif
Binary files differ
diff --git a/mod/notifications/graphics/icon_notifications_site.gif b/mod/notifications/graphics/icon_notifications_site.gif
new file mode 100644
index 000000000..d12ca08b1
--- /dev/null
+++ b/mod/notifications/graphics/icon_notifications_site.gif
Binary files differ
diff --git a/mod/notifications/groups.php b/mod/notifications/groups.php
new file mode 100644
index 000000000..3347d4054
--- /dev/null
+++ b/mod/notifications/groups.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Elgg notifications plugin group index
+ *
+ * @package ElggNotifications
+ *
+ * @uses $user ElggUser
+ */
+
+if (!isset($user) || !($user instanceof ElggUser)) {
+ $url = 'notifications/group/' . elgg_get_logged_in_user_entity()->username;
+ forward($url);
+}
+
+elgg_set_page_owner_guid($user->guid);
+
+// Set the context to settings
+elgg_set_context('settings');
+
+$title = elgg_echo('notifications:subscriptions:changesettings:groups');
+
+elgg_push_breadcrumb(elgg_echo('settings'), "settings/user/$user->username");
+elgg_push_breadcrumb($title);
+
+// Get the form
+$people = array();
+
+$groupmemberships = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'member',
+ 'relationship_guid' => $user->guid,
+ 'types' => 'group',
+ 'limit' => 9999,
+));
+
+$body = elgg_view_form('notificationsettings/groupsave', array(), array(
+ 'groups' => $groupmemberships,
+ 'user' => $user,
+));
+
+$params = array(
+ 'content' => $body,
+ 'title' => $title,
+);
+$body = elgg_view_layout('one_sidebar', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/mod/notifications/index.php b/mod/notifications/index.php
new file mode 100644
index 000000000..cd1857f04
--- /dev/null
+++ b/mod/notifications/index.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Elgg notifications plugin index
+ *
+ * @package ElggNotifications
+ *
+ * @uses $user ElggUser
+ */
+
+if (!isset($user) || !($user instanceof ElggUser)) {
+ $url = 'notifications/personal/' . elgg_get_logged_in_user_entity()->username;
+ forward($url);
+}
+
+elgg_set_page_owner_guid($user->guid);
+
+// Set the context to settings
+elgg_set_context('settings');
+
+$title = elgg_echo('notifications:subscriptions:changesettings');
+
+elgg_push_breadcrumb(elgg_echo('settings'), "settings/user/$user->username");
+elgg_push_breadcrumb($title);
+
+// Get the form
+$people = array();
+if ($people_ents = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'notify',
+ 'relationship_guid' => $user->guid,
+ 'types' => 'user',
+ 'limit' => 99999,
+ ))) {
+
+ foreach($people_ents as $ent) {
+ $people[] = $ent->guid;
+ }
+}
+
+$body = elgg_view('notifications/subscriptions/form', array(
+ 'people' => $people,
+ 'user' => $user,
+));
+
+$params = array(
+ 'content' => $body,
+ 'title' => $title,
+);
+$body = elgg_view_layout('one_sidebar', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/mod/notifications/languages/en.php b/mod/notifications/languages/en.php
new file mode 100644
index 000000000..0f2ba2304
--- /dev/null
+++ b/mod/notifications/languages/en.php
@@ -0,0 +1,26 @@
+<?php
+
+$english = array(
+
+ 'friends:all' => 'All friends',
+
+ 'notifications:subscriptions:personal:description' => 'Receive notifications when actions are performed on your content',
+ 'notifications:subscriptions:personal:title' => 'Personal notifications',
+
+ 'notifications:subscriptions:friends:title' => 'Friends',
+ 'notifications:subscriptions:friends:description' => 'Below are collections of your friends. Selecting a collection turns on notifications for the users in that collection.',
+ 'notifications:subscriptions:collections:edit' => 'To edit your shared access notifications, click here.',
+
+ 'notifications:subscriptions:changesettings' => 'Notifications',
+ 'notifications:subscriptions:changesettings:groups' => 'Group notifications',
+
+ 'notifications:subscriptions:title' => 'Notifications per user',
+ 'notifications:subscriptions:description' => 'To receive notifications from your friends (on an individual basis) when they create new content, find them below and select the notification method you would like to use.',
+
+ 'notifications:subscriptions:groups:description' => 'To receive notifications when new content is added to a group you are a member of, find it below and select the notification method(s) you would like to use.',
+
+ 'notifications:subscriptions:success' => 'Your notifications settings have been saved.',
+
+);
+
+ add_translation("en", $english);
diff --git a/mod/notifications/manifest.xml b/mod/notifications/manifest.xml
new file mode 100644
index 000000000..205476881
--- /dev/null
+++ b/mod/notifications/manifest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Notifications</name>
+ <author>Core developers</author>
+ <version>1.7</version>
+ <category>bundled</category>
+ <description>Elgg notifications plugin</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/notifications/start.php b/mod/notifications/start.php
new file mode 100644
index 000000000..b76b0aa1e
--- /dev/null
+++ b/mod/notifications/start.php
@@ -0,0 +1,206 @@
+<?php
+/**
+ * Elgg notifications plugin
+ *
+ * @package ElggNotifications
+ */
+
+elgg_register_event_handler('init', 'system', 'notifications_plugin_init');
+
+function notifications_plugin_init() {
+
+ elgg_extend_view('css/elgg','notifications/css');
+
+ elgg_register_page_handler('notifications', 'notifications_page_handler');
+
+ elgg_register_event_handler('pagesetup', 'system', 'notifications_plugin_pagesetup');
+
+ // Unset the default notification settings
+ elgg_unregister_plugin_hook_handler('usersettings:save', 'user', 'notification_user_settings_save');
+ elgg_unextend_view('forms/account/settings', 'core/settings/account/notifications');
+
+ // update notifications based on relationships changing
+ elgg_register_event_handler('delete', 'member', 'notifications_relationship_remove');
+ elgg_register_event_handler('delete', 'friend', 'notifications_relationship_remove');
+
+ // update notifications when new friend or access collection membership
+ elgg_register_event_handler('create', 'friend', 'notifications_update_friend_notify');
+ elgg_register_plugin_hook_handler('access:collections:add_user', 'collection', 'notifications_update_collection_notify');
+
+ $actions_base = elgg_get_plugins_path() . 'notifications/actions';
+ elgg_register_action("notificationsettings/save", "$actions_base/save.php");
+ elgg_register_action("notificationsettings/groupsave", "$actions_base/groupsave.php");
+}
+
+/**
+ * Route page requests
+ *
+ * @param array $page Array of url parameters
+ * @return bool
+ */
+function notifications_page_handler($page) {
+
+ gatekeeper();
+ $current_user = elgg_get_logged_in_user_entity();
+
+ // default to personal notifications
+ if (!isset($page[0])) {
+ $page[0] = 'personal';
+ }
+ if (!isset($page[1])) {
+ forward("notifications/{$page[0]}/{$current_user->username}");
+ }
+
+ $user = get_user_by_username($page[1]);
+ if (($user->guid != $current_user->guid) && !$current_user->isAdmin()) {
+ forward();
+ }
+
+ $base = elgg_get_plugins_path() . 'notifications';
+
+ // note: $user passed in
+ switch ($page[0]) {
+ case 'group':
+ require "$base/groups.php";
+ break;
+ case 'personal':
+ require "$base/index.php";
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Notification settings sidebar menu
+ *
+ */
+function notifications_plugin_pagesetup() {
+ if (elgg_get_context() == "settings" && elgg_get_logged_in_user_guid()) {
+
+ $user = elgg_get_page_owner_entity();
+ if (!$user) {
+ $user = elgg_get_logged_in_user_entity();
+ }
+
+ $params = array(
+ 'name' => '2_a_user_notify',
+ 'text' => elgg_echo('notifications:subscriptions:changesettings'),
+ 'href' => "notifications/personal/{$user->username}",
+ );
+ elgg_register_menu_item('page', $params);
+
+ if (elgg_is_active_plugin('groups')) {
+ $params = array(
+ 'name' => '2_group_notify',
+ 'text' => elgg_echo('notifications:subscriptions:changesettings:groups'),
+ 'href' => "notifications/group/{$user->username}",
+ );
+ elgg_register_menu_item('page', $params);
+ }
+ }
+}
+
+/**
+ * Update notifications when a relationship is deleted
+ *
+ * @param string $event
+ * @param string $object_type
+ * @param object $relationship
+ */
+function notifications_relationship_remove($event, $object_type, $relationship) {
+ global $NOTIFICATION_HANDLERS;
+
+ $user_guid = $relationship->guid_one;
+ $object_guid = $relationship->guid_two;
+
+ // loop through all notification types
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ remove_entity_relationship($user_guid, "notify{$method}", $object_guid);
+ }
+}
+
+/**
+ * Turn on notifications for new friends if all friend notifications is on
+ *
+ * @param string $event
+ * @param string $object_type
+ * @param object $relationship
+ */
+function notifications_update_friend_notify($event, $object_type, $relationship) {
+ global $NOTIFICATION_HANDLERS;
+
+ $user_guid = $relationship->guid_one;
+ $friend_guid = $relationship->guid_two;
+
+ $user = get_entity($user_guid);
+
+ // loop through all notification types
+ foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+ $metaname = 'collections_notifications_preferences_' . $method;
+ $collections_preferences = $user->$metaname;
+ if ($collections_preferences) {
+ if (!empty($collections_preferences) && !is_array($collections_preferences)) {
+ $collections_preferences = array($collections_preferences);
+ }
+ if (is_array($collections_preferences)) {
+ // -1 means all friends is on - should be a define
+ if (in_array(-1, $collections_preferences)) {
+ add_entity_relationship($user_guid, 'notify' . $method, $friend_guid);
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Update notifications for changes in access collection membership.
+ *
+ * This function assumes that only friends can belong to access collections.
+ *
+ * @param string $event
+ * @param string $object_type
+ * @param bool $returnvalue
+ * @param array $params
+ */
+function notifications_update_collection_notify($event, $object_type, $returnvalue, $params) {
+ global $NOTIFICATION_HANDLERS;
+
+ // only update notifications for user owned collections
+ $collection_id = $params['collection_id'];
+ $collection = get_access_collection($collection_id);
+ $user = get_entity($collection->owner_guid);
+ if (!($user instanceof ElggUser)) {
+ return $returnvalue;
+ }
+
+ $member_guid = $params['user_guid'];
+
+ // loop through all notification types
+ foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+ $metaname = 'collections_notifications_preferences_' . $method;
+ $collections_preferences = $user->$metaname;
+ if (!$collections_preferences) {
+ continue;
+ }
+ if (!is_array($collections_preferences)) {
+ $collections_preferences = array($collections_preferences);
+ }
+ if (in_array(-1, $collections_preferences)) {
+ // if "all friends" notify is on, we don't change any notifications
+ // since must be a friend to be in an access collection
+ continue;
+ }
+ if (in_array($collection_id, $collections_preferences)) {
+ // notifications are on for this collection so we add/remove
+ if ($event == 'access:collections:add_user') {
+ add_entity_relationship($user->guid, "notify$method", $member_guid);
+ } elseif ($event == 'access:collections:remove_user') {
+ // removing someone from an access collection is not a guarantee
+ // that they should be removed from notifications
+ //remove_entity_relationship($user->guid, "notify$method", $member_guid);
+ }
+ }
+ }
+}
diff --git a/mod/notifications/views/default/forms/notificationsettings/groupsave.php b/mod/notifications/views/default/forms/notificationsettings/groupsave.php
new file mode 100644
index 000000000..168639ab2
--- /dev/null
+++ b/mod/notifications/views/default/forms/notificationsettings/groupsave.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Elgg notifications groups subscription form
+ *
+ * @package ElggNotifications
+ *
+ * @uses $vars['user'] ElggUser
+ */
+
+/* @var ElggUser $user */
+$user = $vars['user'];
+
+global $NOTIFICATION_HANDLERS;
+foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+ $subsbig[$method] = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'notify' . $method,
+ 'relationship_guid' => $user->guid,
+ 'types' => 'group',
+ 'limit' => 99999,
+ ));
+ $tmparray = array();
+ if ($subsbig[$method]) {
+ foreach($subsbig[$method] as $tmpent) {
+ $tmparray[] = $tmpent->guid;
+ }
+ }
+ $subsbig[$method] = $tmparray;
+}
+
+?>
+
+<div class="elgg-module elgg-module-info">
+ <div class="elgg-body">
+ <?php
+ echo elgg_view('notifications/subscriptions/jsfuncs',$vars);
+ ?>
+ <div>
+ <?php
+ echo elgg_echo('notifications:subscriptions:groups:description');
+ ?>
+ </div>
+<?php
+
+if (isset($vars['groups']) && !empty($vars['groups'])) {
+
+?>
+ <table id="notificationstable" cellspacing="0" cellpadding="4" width="100%">
+ <tr>
+ <td>&nbsp;</td>
+<?php
+
+ $i = 0;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if ($i > 0) {
+ echo "<td class='spacercolumn'>&nbsp;</td>";
+ }
+?>
+ <td class="<?php echo $method; ?>togglefield"><?php echo elgg_echo('notification:method:'.$method); ?></td>
+<?php
+ $i++;
+ }
+?>
+ <td>&nbsp;</td>
+ </tr>
+<?php
+ foreach($vars['groups'] as $group) {
+
+ $fields = '';
+ $i = 0;
+
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if (in_array($group->guid,$subsbig[$method])) {
+ $checked[$method] = 'checked="checked"';
+ } else {
+ $checked[$method] = '';
+ }
+ if ($i > 0) {
+ $fields .= "<td class=\"spacercolumn\">&nbsp;</td>";
+ }
+ $fields .= <<< END
+ <td class="{$method}togglefield">
+ <a border="0" id="{$method}{$group->guid}" class="{$method}toggleOff" onclick="adjust{$method}_alt('{$method}{$group->guid}');">
+ <input type="checkbox" name="{$method}subscriptions[]" id="{$method}checkbox" onclick="adjust{$method}('{$method}{$group->guid}');" value="{$group->guid}" {$checked[$method]} /></a></td>
+END;
+ $i++;
+ }
+
+?>
+ <tr>
+ <td class="namefield">
+ <div>
+ <?php echo $group->name; ?>
+ </div>
+ </td>
+ <?php echo $fields; ?>
+ <td>&nbsp;</td>
+ </tr>
+<?php
+ }
+?>
+ </table>
+<?php
+}
+ echo '<div class="elgg-foot mtm">';
+ echo elgg_view('input/hidden', array('name' => 'guid', 'value' => $user->guid));
+ echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+ echo '</div>';
+
+?>
+ </div>
+</div>
diff --git a/mod/notifications/views/default/forms/notificationsettings/save.php b/mod/notifications/views/default/forms/notificationsettings/save.php
new file mode 100644
index 000000000..9470256ca
--- /dev/null
+++ b/mod/notifications/views/default/forms/notificationsettings/save.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Personal notifications form body
+ *
+ * @uses $vars['user'] ElggUser
+ */
+
+/* @var ElggUser $user */
+$user = $vars['user'];
+
+echo elgg_view('notifications/subscriptions/personal', $vars);
+echo elgg_view('notifications/subscriptions/collections', $vars);
+echo elgg_view('notifications/subscriptions/forminternals', $vars);
+
+?>
+<div class="elgg-foot">
+<?php
+echo elgg_view('input/hidden', array('name' => 'guid', 'value' => $user->guid));
+echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+?>
+</div>
diff --git a/mod/notifications/views/default/notifications/css.php b/mod/notifications/views/default/notifications/css.php
new file mode 100644
index 000000000..385c55b0b
--- /dev/null
+++ b/mod/notifications/views/default/notifications/css.php
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Elgg notifications CSS
+ *
+ * @package notifications
+ */
+?>
+
+#notificationstable td.namefield {
+ width:250px;
+ text-align: left;
+ vertical-align: middle;
+}
+#notificationstable td.namefield p {
+ margin:0;
+ vertical-align: middle;
+ line-height: 1.1em;
+ padding:5px 0 5px 0;
+}
+#notificationstable td.namefield p.namefieldlink {
+ margin:5px 0 0 0;
+}
+#notificationstable td.namefield a img {
+ float:left;
+ width:25px;
+ height:25px;
+ margin:5px 10px 5px 5px;
+}
+#notificationstable td.emailtogglefield,
+#notificationstable td.smstogglefield {
+ width:50px;
+ text-align: center;
+ vertical-align: middle;
+}
+#notificationstable td.spacercolumn {
+ width:30px;
+}
+#notificationstable td {
+ border-bottom: 1px solid silver;
+}
+#notificationstable td.emailtogglefield input {
+ margin-right:36px;
+ margin-top:5px;
+}
+#notificationstable td.emailtogglefield a {
+ width:46px;
+ height:24px;
+ cursor: pointer;
+ display: block;
+ outline: none;
+}
+#notificationstable td.sitetogglefield {
+ width:50px;
+ text-align: center;
+ vertical-align: middle;
+}
+#notificationstable td.sitetogglefield input {
+ margin-right:36px;
+ margin-top:5px;
+}
+#notificationstable td.sitetogglefield a {
+ width:46px;
+ height:24px;
+ cursor: pointer;
+ display: block;
+ outline: none;
+}
+#notificationstable td.emailtogglefield a.emailtoggleOff {
+ background: url(<?php echo elgg_get_site_url(); ?>mod/notifications/graphics/icon_notifications_email.gif) no-repeat right 2px;
+}
+#notificationstable td.emailtogglefield a.emailtoggleOn {
+ background: url(<?php echo elgg_get_site_url(); ?>mod/notifications/graphics/icon_notifications_email.gif) no-repeat right -36px;
+}
+#notificationstable td.sitetogglefield a.sitetoggleOff {
+ background: url(<?php echo elgg_get_site_url(); ?>mod/notifications/graphics/icon_notifications_site.gif) no-repeat right 2px;
+}
+#notificationstable td.sitetogglefield a.sitetoggleOn {
+ background: url(<?php echo elgg_get_site_url(); ?>mod/notifications/graphics/icon_notifications_site.gif) no-repeat right -37px;
+}
+.notification_friends,
+.notification_personal,
+.notifications_per_user {
+ margin-bottom: 25px;
+}
+
+
+
diff --git a/mod/notifications/views/default/notifications/subscriptions/collections.php b/mod/notifications/views/default/notifications/subscriptions/collections.php
new file mode 100644
index 000000000..207b2e3b9
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/collections.php
@@ -0,0 +1,164 @@
+<?php
+/**
+ * @uses $vars['user'] ElggUser
+ */
+
+/* @var ElggUser $user */
+$user = $vars['user'];
+
+//@todo JS 1.8: no ?>
+<script type="text/javascript">
+
+ function setCollection(members, method, id) {
+ for ( var i in members ) {
+ var checked = $('#' + method + 'collections' + id).children("INPUT[type='checkbox']").attr('checked');
+ if ($("#"+method+members[i]).children("INPUT[type='checkbox']").attr('checked') != checked) {
+ $("#"+method+members[i]).children("INPUT[type='checkbox']").attr('checked', checked);
+ functioncall = 'adjust' + method + '_alt("'+method+members[i]+'");';
+ eval(functioncall);
+ }
+ }
+ }
+
+</script>
+<div class="elgg-module elgg-module-info">
+ <div class="elgg-head">
+ <h3>
+ <?php echo elgg_echo('notifications:subscriptions:friends:title'); ?>
+ </h3>
+ </div>
+<p class="margin-none">
+ <?php echo elgg_echo('notifications:subscriptions:friends:description'); ?>
+</p>
+<table id="notificationstable" cellspacing="0" cellpadding="4" width="100%">
+ <tr>
+ <td>&nbsp;</td>
+<?php
+ $i = 0;
+ global $NOTIFICATION_HANDLERS;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if ($i > 0) {
+ echo "<td class='spacercolumn'>&nbsp;</td>";
+ }
+?>
+ <td class="<?php echo $method; ?>togglefield"><?php echo elgg_echo('notification:method:'.$method); ?></td>
+<?php
+ $i++;
+ }
+?>
+ <td>&nbsp;</td>
+ </tr>
+<?php
+ $members = array();
+ if ($friends = get_user_friends($user->guid, '', 9999, 0)) {
+ foreach($friends as $friend) {
+ $members[] = $friend->guid;
+ }
+ }
+ $memberno = sizeof($members);
+ $members = implode(',',$members);
+
+?>
+ <tr>
+ <td class="namefield">
+ <p>
+ <?php echo elgg_echo('friends:all'); ?> (<?php echo $memberno; ?>)
+ </p>
+ </td>
+<?php
+
+ $fields = '';
+ $i = 0;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ $metaname = 'collections_notifications_preferences_' . $method;
+ if ($collections_preferences = $user->$metaname) {
+ if (!empty($collections_preferences) && !is_array($collections_preferences)) {
+ $collections_preferences = array($collections_preferences);
+ }
+ if (is_array($collections_preferences)) {
+ if (in_array(-1,$collections_preferences)) {
+ $collectionschecked[$method] = 'checked="checked"';
+ } else {
+ $collectionschecked[$method] = '';
+ }
+ }
+ }
+ if ($i > 0) {
+ $fields .= "<td class='spacercolumn'>&nbsp;</td>";
+ }
+ $fields .= <<< END
+ <td class="{$method}togglefield">
+ <a border="0" id="{$method}collections-1" class="{$method}toggleOff" onclick="adjust{$method}_alt('{$method}collections-1'); setCollection([{$members}],'{$method}',-1);">
+ <input type="checkbox" name="{$method}collections[]" id="{$method}checkbox" onclick="adjust{$method}('{$method}collections-1');" value="-1" {$collectionschecked[$method]} /></a></td>
+END;
+ $i++;
+ }
+ echo $fields;
+
+?>
+ <td>&nbsp;</td>
+ </tr>
+<?php
+
+ if ($collections = get_user_access_collections($user->guid)) {
+ foreach ($collections as $collection) {
+ $members = get_members_of_access_collection($collection->id, true);
+ $memberno = 0;
+ if ($members) {
+ $memberno = sizeof($members);
+ $members = implode(',', $members);
+ } else {
+ $members = '';
+ }
+
+
+?>
+ <tr>
+ <td class="namefield">
+ <p>
+ <?php echo $collection->name; ?> (<?php echo $memberno; ?>)
+ </p>
+ </td>
+
+<?php
+
+ $fields = '';
+ $i = 0;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ $metaname = 'collections_notifications_preferences_' . $method;
+ if ($collections_preferences = $user->$metaname) {
+ if (!empty($collections_preferences) && !is_array($collections_preferences)) {
+ $collections_preferences = array($collections_preferences);
+ }
+ if (is_array($collections_preferences)) {
+ if (in_array($collection->id,$collections_preferences)) {
+ $collectionschecked[$method] = 'checked="checked"';
+ } else {
+ $collectionschecked[$method] = '';
+ }
+ }
+ }
+ if ($i > 0) {
+ $fields .= "<td class='spacercolumn'>&nbsp;</td>";
+ }
+ $fields .= <<< END
+ <td class="{$method}togglefield">
+ <a border="0" id="{$method}collections{$collection->id}" class="{$method}toggleOff" onclick="adjust{$method}_alt('{$method}collections{$collection->id}'); setCollection([{$members}],'{$method}',{$collection->id});">
+ <input type="checkbox" name="{$method}collections[]" id="{$method}checkbox" onclick="adjust{$method}('{$method}collections{$collection->id}');" value="{$collection->id}" {$collectionschecked[$method]} /></a></td>
+END;
+ $i++;
+ }
+ echo $fields;
+
+?>
+
+ <td>&nbsp;</td>
+ </tr>
+<?php
+
+ }
+ }
+
+?>
+</table>
+</div>
diff --git a/mod/notifications/views/default/notifications/subscriptions/form.php b/mod/notifications/views/default/notifications/subscriptions/form.php
new file mode 100644
index 000000000..559354eff
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/form.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg personal notifications
+ *
+ * @uses $vars['user'] ElggUser that owns the notification settings
+ */
+
+// @todo is this a view for extensions?
+echo elgg_view('subscriptions/form/additions', $vars);
+
+$form_vars = array('class' => 'elgg-form-alt');
+echo elgg_view_form('notificationsettings/save', $form_vars, $vars);
diff --git a/mod/notifications/views/default/notifications/subscriptions/forminternals.php b/mod/notifications/views/default/notifications/subscriptions/forminternals.php
new file mode 100644
index 000000000..11f266303
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/forminternals.php
@@ -0,0 +1,337 @@
+<?php
+/**
+ * Hacked up friends picker that needs to be replaced
+ *
+ * @uses $vars['user'] ElggUser
+ */
+
+/* @var ElggUser $user */
+$user = $vars['user'];
+
+elgg_load_js('elgg.friendspicker');
+elgg_load_js('jquery.easing');
+
+?>
+<div class="elgg-module elgg-module-info">
+ <div class="elgg-head">
+ <h3>
+ <?php echo elgg_echo('notifications:subscriptions:title'); ?>
+ </h3>
+ </div>
+ <p>
+ <?php echo elgg_echo('notifications:subscriptions:description'); ?>
+ </p>
+<?php
+
+// Get friends and subscriptions
+$friends = get_user_friends($user->guid, '', 9999, 0);
+
+global $NOTIFICATION_HANDLERS;
+foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ $subsbig[$method] = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'notify' . $method,
+ 'relationship_guid' => $user->guid,
+ 'types' => 'user',
+ 'limit' => 99999,
+ ));
+}
+
+$subs = array();
+foreach($subsbig as $method => $big) {
+ if (is_array($subsbig[$method]) && sizeof($subsbig[$method])) {
+ foreach($subsbig[$method] as $u) {
+ $subs[$method][] = $u->guid;
+ }
+ }
+}
+
+// Let the system know that the friends picker is in use
+global $pickerinuse;
+$pickerinuse = true;
+$chararray = elgg_echo('friendspicker:chararray');
+
+// Initialise name
+if (!isset($vars['name'])) {
+ $name = "friend";
+} else {
+ $name = $vars['name'];
+}
+
+// Initialise values
+if (!isset($vars['value'])) {
+ $vars['value'] = array();
+} else {
+ if (!is_array($vars['value'])) {
+ $vars['value'] = (int) $vars['value'];
+ $vars['value'] = array($vars['value']);
+ }
+}
+
+// Initialise whether we're calling back or not
+if (isset($vars['callback'])) {
+ $callback = $vars['callback'];
+} else {
+ $callback = false;
+}
+
+// We need to count the number of friends pickers on the page.
+if (!isset($vars['friendspicker'])) {
+ global $friendspicker;
+ if (!isset($friendspicker)) {
+ $friendspicker = 0;
+ }
+ $friendspicker++;
+} else {
+ $friendspicker = $vars['friendspicker'];
+}
+
+$users = array();
+$activeletters = array();
+
+// Are we displaying form tags and submit buttons?
+// (If we've been given a target, then yes! Otherwise, no.)
+if (isset($vars['formtarget'])) {
+ $formtarget = $vars['formtarget'];
+} else {
+ $formtarget = false;
+}
+
+// Sort users by letter
+if (is_array($friends) && sizeof($friends)) {
+ foreach($friends as $friend) {
+
+ $letter = elgg_substr($friend->name,0,1);
+ $letter = elgg_strtoupper($letter);
+ if (!elgg_substr_count($chararray,$letter)) {
+ $letter = "*";
+ }
+ if (!isset($users[$letter])) {
+ $users[$letter] = array();
+ }
+ $users[$letter][$friend->guid] = $friend;
+ }
+}
+
+if (!$callback) {
+
+?>
+
+<div class="friends-picker-main-wrapper">
+
+<?php
+
+ if (isset($vars['content'])) {
+ echo $vars['content'];
+ }
+
+?>
+
+ <div id="friends-picker_placeholder<?php echo $friendspicker; ?>">
+
+<?php
+
+}
+
+if (!isset($vars['replacement'])) {
+
+ if ($formtarget) {
+?>
+<?php //@todo JS 1.8: no ?>
+ <script language="text/javascript">
+ $(function() { // onload...do
+ $('#collectionMembersForm<?php echo $friendspicker; ?>').submit(function() {
+ var inputs = [];
+ $(':input', this).each(function() {
+ if (this.type != 'checkbox' || (this.type == 'checkbox' && this.checked != false)) {
+ inputs.push(this.name + '=' + escape(this.value));
+ }
+ });
+ jQuery.ajax({
+ type: "POST",
+ data: inputs.join('&'),
+ url: this.action,
+ success: function(){
+ $('a.collectionmembers<?php echo $friendspicker; ?>').click();
+ }
+
+ });
+ return false;
+ })
+ })
+
+ </script>
+
+<?php
+
+ }
+
+ echo elgg_view('notifications/subscriptions/jsfuncs',$vars);
+
+?>
+
+ <div class="friends-picker-wrapper">
+ <div id="friends-picker<?php echo $friendspicker; ?>">
+ <div class="friends-picker-container">
+<?php
+
+ // Initialise letters
+ $letter = elgg_substr($chararray,0,1);
+ $letpos = 0;
+ $chararray .= '*';
+ while (1 == 1) {
+?>
+ <div class="panel" title="<?php echo $letter; ?>">
+ <div class="wrapper">
+ <h3><?php echo $letter; ?></h3>
+
+<?php
+
+ if (isset($users[$letter])) {
+ ksort($users[$letter]);
+?>
+
+<table id="notificationstable" cellspacing="0" cellpadding="4" border="0" width="100%">
+<tr>
+ <td>&nbsp;</td>
+<?php
+ $i = 0;
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if ($i > 0) {
+ echo "<td class='spacercolumn'>&nbsp;</td>";
+ }
+?>
+ <td class="<?php echo $method; ?>togglefield"><?php echo elgg_echo('notification:method:'.$method); ?></td>
+<?php
+ $i++;
+ }
+?>
+ <td>&nbsp;</td>
+</tr>
+
+<?php
+
+ if (is_array($users[$letter]) && sizeof($users[$letter]) > 0) {
+ foreach($users[$letter] as $friend) {
+ if ($friend instanceof ElggUser ) {
+
+ if (!in_array($letter,$activeletters)) {
+ $activeletters[] = $letter;
+ }
+
+ $method = array();
+ $fields = '';
+ $i = 0;
+
+ foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if (isset($subs[$method]) && in_array($friend->guid,$subs[$method])) {
+ $checked[$method] = 'checked="checked"';
+ } else {
+ $checked[$method] = '';
+ }
+ if ($i > 0) {
+ $fields .= "<td class='spacercolumn'>&nbsp;</td>";
+ }
+ $fields .= <<< END
+<td class="{$method}togglefield">
+<a border="0" id="{$method}{$friend->guid}" class="{$method}toggleOff" onclick="adjust{$method}_alt('{$method}{$friend->guid}');">
+<input type="checkbox" name="{$method}subscriptions[]" id="{$method}checkbox" onclick="adjust{$method}('{$method}{$friend->guid}');" value="{$friend->guid}" {$checked[$method]} /></a></td>
+END;
+ $i++;
+ }
+?>
+
+<tr>
+ <td class="namefield">
+ <a href="<?php echo $friend->getURL(); ?>">
+<?php
+ echo elgg_view_entity_icon($friend, 'tiny', array('use_hover' => false));
+?>
+ </a>
+ <p class="namefieldlink">
+ <a href="<?php echo $friend->getURL(); ?>"><?php echo $friend->name ?></a>
+ </p>
+ </td>
+
+<?php echo $fields; ?>
+
+<td>&nbsp;</td>
+</tr>
+
+
+<?php
+ }
+ }
+ }
+
+?>
+</table>
+
+<?php
+ }
+
+?>
+
+ </div>
+ </div>
+<?php
+ $letpos++;
+ if ($letpos == elgg_strlen($chararray)) {
+ break;
+ }
+ $letter = elgg_substr($chararray,$letpos,1);
+ }
+
+?>
+ </div>
+ </div>
+ </div>
+
+<?php
+} else {
+ echo $vars['replacement'];
+}
+if (!$callback) {
+
+?>
+
+ </div>
+</div>
+
+
+<?php
+
+}
+
+?>
+<?php
+if (!isset($vars['replacement'])) {
+?>
+<?php //@todo JS 1.8: no ?>
+<script type="text/javascript">
+ // initialise picker
+ $("div#friends-picker<?php echo $friendspicker; ?>").friendsPicker(<?php echo $friendspicker; ?>);
+</script>
+<script type="text/javascript">
+ $(function () {
+ // manually add class to corresponding tab for panels that have content
+<?php
+ if (sizeof($activeletters) > 0) {
+ $chararray .= "*";
+ foreach($activeletters as $letter) {
+ $tab = elgg_strpos($chararray, $letter) + 1;
+?>
+ $("div#friends-picker-navigation<?php echo $friendspicker; ?> li.tab<?php echo $tab; ?> a").addClass("tabHasContent");
+<?php
+ }
+ }
+
+?>
+ });
+</script>
+
+<?php
+
+}
+
+?>
+</div>
diff --git a/mod/notifications/views/default/notifications/subscriptions/groupsform.php b/mod/notifications/views/default/notifications/subscriptions/groupsform.php
new file mode 100644
index 000000000..f1dbdcff8
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/groupsform.php
@@ -0,0 +1,4 @@
+<?php
+
+elgg_deprecated_notice("notifications/subscriptions/groupsform was moved to forms/notificationsettings/groupsave", 1.8);
+echo elgg_view('forms/notificationsettings/groupsave'); \ No newline at end of file
diff --git a/mod/notifications/views/default/notifications/subscriptions/jsfuncs.php b/mod/notifications/views/default/notifications/subscriptions/jsfuncs.php
new file mode 100644
index 000000000..ace622581
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/jsfuncs.php
@@ -0,0 +1,54 @@
+<?php
+
+global $NOTIFICATION_HANDLERS;
+
+?>
+<?php //@todo JS 1.8: no ?>
+<script type="text/javascript">
+
+$(document).ready(function () {
+<?php
+foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+?>
+ $('input[type=checkbox]:checked').parent("a.<?php echo $method; ?>toggleOff").each(function(){
+ $(this).removeClass('<?php echo $method; ?>toggleOff').addClass('<?php echo $method; ?>toggleOn');
+ });
+
+<?php
+}
+?>
+
+});
+
+ clickflag = 0;
+
+<?php
+foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+?>
+function adjust<?php echo $method; ?>(linkId) {
+ var obj = $(this).prev("a");
+
+ if (obj.className == "<?php echo $method; ?>toggleOff") {
+ obj.className = "<?php echo $method; ?>toggleOn";
+ } else {
+ obj.className = "<?php echo $method; ?>toggleOff";
+ }
+ return false;
+}
+function adjust<?php echo $method; ?>_alt(linkId) {
+ var obj = document.getElementById(linkId);
+
+ if (obj.className == "<?php echo $method; ?>toggleOff") {
+ obj.className = "<?php echo $method; ?>toggleOn";
+ $('#' + linkId).children("input[type='checkbox']").attr('checked', true);
+ } else {
+ obj.className = "<?php echo $method; ?>toggleOff";
+ $('#' + linkId).children("input[type='checkbox']").attr('checked', false);
+ }
+ return false;
+}
+<?php
+}
+?>
+
+</script> \ No newline at end of file
diff --git a/mod/notifications/views/default/notifications/subscriptions/personal.php b/mod/notifications/views/default/notifications/subscriptions/personal.php
new file mode 100644
index 000000000..cf05426e2
--- /dev/null
+++ b/mod/notifications/views/default/notifications/subscriptions/personal.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * @uses $vars['user'] ElggUser
+ */
+
+/* @var ElggUser $user */
+$user = $vars['user'];
+
+global $NOTIFICATION_HANDLERS;
+
+?>
+<div class="notification_personal">
+<div class="elgg-module elgg-module-info">
+ <div class="elgg-head">
+ <h3>
+ <?php echo elgg_echo('notifications:subscriptions:personal:title'); ?>
+ </h3>
+ </div>
+</div>
+<table id="notificationstable" cellspacing="0" cellpadding="4" width="100%">
+ <tr>
+ <td>&nbsp;</td>
+<?php
+$i = 0;
+foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if ($i > 0) {
+ echo "<td class='spacercolumn'>&nbsp;</td>";
+ }
+?>
+ <td class="<?php echo $method; ?>togglefield"><?php echo elgg_echo('notification:method:'.$method); ?></td>
+<?php
+ $i++;
+}
+?>
+ <td>&nbsp;</td>
+ </tr>
+ <tr>
+ <td class="namefield">
+ <p>
+ <?php echo elgg_echo('notifications:subscriptions:personal:description') ?>
+ </p>
+ </td>
+
+<?php
+
+$fields = '';
+$i = 0;
+foreach($NOTIFICATION_HANDLERS as $method => $foo) {
+ if ($notification_settings = get_user_notification_settings($user->guid)) {
+ if ($notification_settings->$method) {
+ $personalchecked[$method] = 'checked="checked"';
+ } else {
+ $personalchecked[$method] = '';
+ }
+ }
+ if ($i > 0) {
+ $fields .= "<td class='spacercolumn'>&nbsp;</td>";
+ }
+ $fields .= <<< END
+ <td class="{$method}togglefield">
+ <a border="0" id="{$method}personal" class="{$method}toggleOff" onclick="adjust{$method}_alt('{$method}personal');">
+ <input type="checkbox" name="{$method}personal" id="{$method}checkbox" onclick="adjust{$method}('{$method}personal');" value="1" {$personalchecked[$method]} /></a></td>
+END;
+ $i++;
+}
+echo $fields;
+
+?>
+
+ <td>&nbsp;</td>
+ </tr>
+</table>
+</div> \ No newline at end of file
diff --git a/mod/oauth_api/manifest.xml b/mod/oauth_api/manifest.xml
new file mode 100644
index 000000000..991be6a22
--- /dev/null
+++ b/mod/oauth_api/manifest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>OAuth API</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <description>Provides OAuth libraries and API support.</description>
+ <category>bundled</category>
+ <category>api</category>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+
+ <conflicts>
+ <type>plugin</type>
+ <name>oauth_lib</name>
+ </conflicts>
+ <conflicts>
+ <type>php_extension</type>
+ <name>oauth</name>
+ </conflicts>
+</plugin_manifest>
diff --git a/mod/oauth_api/start.php b/mod/oauth_api/start.php
new file mode 100644
index 000000000..d087a13d1
--- /dev/null
+++ b/mod/oauth_api/start.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * OAuth libs
+ *
+ * @todo Pull these out into an elgg_oauth lib and use elgg_register_library().
+ * @package oauth_api
+ */
+
+// require all vendor libraries
+$plugin_path = dirname(__FILE__) . '/vendors/oauth/library';
+require_once "$plugin_path/OAuthDiscovery.php";
+require_once "$plugin_path/OAuthRequest.php";
+require_once "$plugin_path/OAuthRequester.php";
+require_once "$plugin_path/OAuthRequestVerifier.php";
+require_once "$plugin_path/OAuthServer.php";
+
+require_once "$plugin_path/body/OAuthBodyMultipartFormdata.php";
+
+require_once "$plugin_path/store/OAuthStoreAbstract.class.php";
+
+require_once "$plugin_path/signature_method/OAuthSignatureMethod_HMAC_SHA1.php";
+require_once "$plugin_path/signature_method/OAuthSignatureMethod_MD5.php";
+require_once "$plugin_path/signature_method/OAuthSignatureMethod_PLAINTEXT.php";
+require_once "$plugin_path/signature_method/OAuthSignatureMethod_RSA_SHA1.php";
diff --git a/mod/oauth_api/vendors/oauth/LICENSE b/mod/oauth_api/vendors/oauth/LICENSE
new file mode 100644
index 000000000..f64bcd50f
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/LICENSE
@@ -0,0 +1,21 @@
+The MIT License
+
+Copyright (c) 2007-2008 Mediamatic Lab
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/example/server/INSTALL b/mod/oauth_api/vendors/oauth/example/server/INSTALL
new file mode 100644
index 000000000..249c85e9d
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/INSTALL
@@ -0,0 +1,53 @@
+In this example I assume that oauth-php lives in /home/john/src/oauth-php
+
+
+1) Create a virtual host and set the DB_DSN VARIABLE to the DSN of your (mysql) database.
+
+Example
+<VirtualHost *>
+ ServerAdmin admin@localhost
+ ServerName hello.local
+ DocumentRoot /home/john/src/oauth-php/example/server/www
+
+ UseCanonicalName Off
+ ServerSignature On
+
+ SetEnv DB_DSN mysql://foo:bar@localhost/oauth_example_server_db
+
+ <Directory "home/john/src/oauth-php/example/server/www">
+ Options Indexes FollowSymLinks MultiViews
+ AllowOverride None
+ Order allow,deny
+ Allow from all
+
+ <IfModule mod_php5.c>
+ php_value magic_quotes_gpc 0
+ php_value register_globals 0
+ php_value session.auto_start 0
+ </IfModule>
+
+ </Directory>
+</VirtualHost>
+
+
+2) Create the database structure for the server:
+
+# mysql -u foo -p bar -h localhost < /home/john/src/oauth-php/library/store/mysql/mysql.sql
+
+
+
+3) Download and install smarty into the smarty/core/smarty directory:
+
+# cd /home/john/src/oauth-php/example/server/core
+# wget 'http://www.smarty.net/do_download.php?download_file=Smarty-2.6.19.tar.gz'
+# tar zxf Smarty-2.6.19.tar.gz
+# mv Smarty-2.6.19 smarty
+
+
+4) That's it! Point your browser to
+
+ http://hello.local/
+
+To get started.
+
+Arjan Scherpenisse <arjan@mediamatic.nl>, July 2008
diff --git a/mod/oauth_api/vendors/oauth/example/server/core/init.php b/mod/oauth_api/vendors/oauth/example/server/core/init.php
new file mode 100644
index 000000000..e5bb9de35
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/core/init.php
@@ -0,0 +1,127 @@
+<?php
+
+/**
+ * oauth-php: Example OAuth server
+ *
+ * Global initialization file for the server, defines some helper
+ * functions, required includes, and starts the session.
+ *
+ * @author Arjan Scherpenisse <arjan@scherpenisse.net>
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+
+/*
+ * Simple 'user management'
+ */
+define ('USERNAME', 'sysadmin');
+define ('PASSWORD', 'sysadmin');
+
+
+/*
+ * Always announce XRDS OAuth discovery
+ */
+header('X-XRDS-Location: http://' . $_SERVER['SERVER_NAME'] . '/services.xrds');
+
+
+/*
+ * Initialize the database connection
+ */
+$info = parse_url(getenv('DB_DSN'));
+($GLOBALS['db_conn'] = mysql_connect($info['host'], $info['user'], $info['pass'])) || die(mysql_error());
+mysql_select_db(basename($info['path']), $GLOBALS['db_conn']) || die(mysql_error());
+unset($info);
+
+
+require_once '../../../library/OAuthServer.php';
+
+/*
+ * Initialize OAuth store
+ */
+require_once '../../../library/OAuthStore.php';
+OAuthStore::instance('MySQL', array('conn' => $GLOBALS['db_conn']));
+
+
+/*
+ * Session
+ */
+session_start();
+
+
+/*
+ * Template handling
+ */
+require_once 'smarty/libs/Smarty.class.php';
+function session_smarty()
+{
+ if (!isset($GLOBALS['smarty']))
+ {
+ $GLOBALS['smarty'] = new Smarty;
+ $GLOBALS['smarty']->template_dir = dirname(__FILE__) . '/templates/';
+ $GLOBALS['smarty']->compile_dir = dirname(__FILE__) . '/../cache/templates_c';
+ }
+
+ return $GLOBALS['smarty'];
+}
+
+function assert_logged_in()
+{
+ if (empty($_SESSION['authorized']))
+ {
+ $uri = $_SERVER['REQUEST_URI'];
+ header('Location: /logon?goto=' . urlencode($uri));
+ }
+}
+
+function assert_request_vars()
+{
+ foreach(func_get_args() as $a)
+ {
+ if (!isset($_REQUEST[$a]))
+ {
+ header('HTTP/1.1 400 Bad Request');
+ echo 'Bad request.';
+ exit;
+ }
+ }
+}
+
+function assert_request_vars_all()
+{
+ foreach($_REQUEST as $row)
+ {
+ foreach(func_get_args() as $a)
+ {
+ if (!isset($row[$a]))
+ {
+ header('HTTP/1.1 400 Bad Request');
+ echo 'Bad request.';
+ exit;
+ }
+ }
+ }
+}
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/example/server/core/templates/inc/footer.tpl b/mod/oauth_api/vendors/oauth/example/server/core/templates/inc/footer.tpl
new file mode 100644
index 000000000..308b1d01b
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/core/templates/inc/footer.tpl
@@ -0,0 +1,2 @@
+</body>
+</html>
diff --git a/mod/oauth_api/vendors/oauth/example/server/core/templates/inc/header.tpl b/mod/oauth_api/vendors/oauth/example/server/core/templates/inc/header.tpl
new file mode 100644
index 000000000..5046f54b0
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/core/templates/inc/header.tpl
@@ -0,0 +1,2 @@
+<html>
+ <body>
diff --git a/mod/oauth_api/vendors/oauth/example/server/core/templates/index.tpl b/mod/oauth_api/vendors/oauth/example/server/core/templates/index.tpl
new file mode 100644
index 000000000..7b065537d
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/core/templates/index.tpl
@@ -0,0 +1,13 @@
+{include file='inc/header.tpl'}
+
+<h1>OAuth server</h1>
+Go to:
+
+<ul>
+ <li><a href="/logon">Logon</a></li>
+ <li><a href="/register">Register your consumer</a></li>
+</ul>
+
+Afterwards, make an OAuth test request to <strong>http://{$smarty.server.name}/hello</strong> to test your connection.</p>
+
+{include file='inc/footer.tpl'}
diff --git a/mod/oauth_api/vendors/oauth/example/server/core/templates/logon.tpl b/mod/oauth_api/vendors/oauth/example/server/core/templates/logon.tpl
new file mode 100644
index 000000000..5ccd432b5
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/core/templates/logon.tpl
@@ -0,0 +1,21 @@
+{include file='inc/header.tpl'}
+
+<h1>Login</h1>
+
+<form method="post">
+ <input type="hidden" name="goto" value="{$smarty.request.goto}" />
+
+ <label for="username">User name</label><br />
+ <input type="text" name="username" id="username" />
+
+ <br /><br />
+
+ <label for="password">Password</label><br />
+ <input type="text" name="password" id="password" />
+
+ <br /><br />
+
+ <input type="submit" value="Login" />
+</form>
+
+{include file='inc/footer.tpl'}
diff --git a/mod/oauth_api/vendors/oauth/example/server/core/templates/register.tpl b/mod/oauth_api/vendors/oauth/example/server/core/templates/register.tpl
new file mode 100644
index 000000000..0e28c1584
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/core/templates/register.tpl
@@ -0,0 +1,41 @@
+{include file='inc/header.tpl'}
+
+<h1>Register server</h1>
+
+<p>Register a server which is gonna act as an identity client.</p>
+
+<form method="post">
+
+ <fieldset>
+ <legend>About You</legend>
+
+ <p>
+ <label for="requester_name">Your name</label><br/>
+ <input class="text" id="requester_name" name="requester_name" type="text" value="{$consumer.requester_name|default:$smarty.request.requester_name|escape}" />
+ </p>
+
+ <p>
+ <label for="requester_email">Your email address</label><br/>
+ <input class="text" id="requester_email" name="requester_email" type="text" value="{$consumer.requester_email|default:$smarty.request.requester_email|escape}" />
+ </p>
+ </fieldset>
+
+ <fieldset>
+ <legend>Location Of Your Application Or Site</legend>
+
+ <p>
+ <label for="application_uri">URL of your application or site</label><br/>
+ <input id="application_uri" class="text" name="application_uri" type="text" value="{$consumer.application_uri|default:$smarty.request.application_uri|escape}" />
+ </p>
+
+ <p>
+ <label for="callback_uri">Callback URL</label><br/>
+ <input id="callback_uri" class="text" name="callback_uri" type="text" value="{$consumer.callback_uri|default:$smarty.request.callback_uri|escape}" />
+ </p>
+ </fieldset>
+
+ <br />
+ <input type="submit" value="Register server" />
+</form>
+
+{include file='inc/footer.tpl'}
diff --git a/mod/oauth_api/vendors/oauth/example/server/www/hello.php b/mod/oauth_api/vendors/oauth/example/server/www/hello.php
new file mode 100644
index 000000000..8cb94bb1e
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/www/hello.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * oauth-php: Example OAuth server
+ *
+ * An example service, http://hostname/hello. You will only get the
+ * 'Hello, world!' string back if you have signed your request with
+ * oauth.
+ *
+ * @author Arjan Scherpenisse <arjan@scherpenisse.net>
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once '../core/init.php';
+
+$authorized = false;
+$server = new OAuthServer();
+try
+{
+ if ($server->verifyIfSigned())
+ {
+ $authorized = true;
+ }
+}
+catch (OAuthException $e)
+{
+}
+
+if (!$authorized)
+{
+ header('HTTP/1.1 401 Unauthorized');
+ header('Content-Type: text/plain');
+
+ echo "OAuth Verification Failed: " . $e->getMessage();
+ die;
+}
+
+// From here on we are authenticated with OAuth.
+
+header('Content-type: text/plain');
+echo 'Hello, world!';
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/example/server/www/index.php b/mod/oauth_api/vendors/oauth/example/server/www/index.php
new file mode 100644
index 000000000..f5cadbe61
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/www/index.php
@@ -0,0 +1,37 @@
+<?php
+
+/**
+ * oauth-php: Example OAuth server
+ *
+ * @author Arjan Scherpenisse <arjan@scherpenisse.net>
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require '../core/init.php';
+
+$smarty = session_smarty();
+$smarty->display('index.tpl');
+
+?>
diff --git a/mod/oauth_api/vendors/oauth/example/server/www/logon.php b/mod/oauth_api/vendors/oauth/example/server/www/logon.php
new file mode 100644
index 000000000..5c937b719
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/www/logon.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * oauth-php: Example OAuth server
+ *
+ * Simple logon for consumer registration at this server.
+ *
+ * @author Arjan Scherpenisse <arjan@scherpenisse.net>
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once '../core/init.php';
+
+if (isset($_POST['username']) && isset($_POST['password']))
+{
+ if ($_POST['username'] == USERNAME && $_POST['password'] == PASSWORD)
+ {
+ $_SESSION['authorized'] = true;
+ if (!empty($_REQUEST['goto']))
+ {
+ header('Location: ' . $_REQUEST['goto']);
+ die;
+ }
+
+ echo "Logon succesfull.";
+ die;
+ }
+}
+
+$smarty = session_smarty();
+$smarty->display('logon.tpl');
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/example/server/www/oauth.php b/mod/oauth_api/vendors/oauth/example/server/www/oauth.php
new file mode 100644
index 000000000..e0badcc39
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/www/oauth.php
@@ -0,0 +1,77 @@
+<?php
+
+/**
+ * oauth-php: Example OAuth server
+ *
+ * This file implements the OAuth server endpoints. The most basic
+ * implementation of an OAuth server.
+ *
+ * Call with: /oauth/request_token, /oauth/authorize, /oauth/access_token
+ *
+ * @author Arjan Scherpenisse <arjan@scherpenisse.net>
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once '../core/init.php';
+
+$server = new OAuthServer();
+
+switch($_SERVER['PATH_INFO'])
+{
+case '/request_token':
+ $server->requestToken();
+ exit;
+
+case '/access_token':
+ $server->accessToken();
+ exit;
+
+case '/authorize':
+ # logon
+
+ assert_logged_in();
+
+ try
+ {
+ $server->authorizeVerify();
+ $server->authorizeFinish(true, 1);
+ }
+ catch (OAuthException $e)
+ {
+ header('HTTP/1.1 400 Bad Request');
+ header('Content-Type: text/plain');
+
+ echo "Failed OAuth Request: " . $e->getMessage();
+ }
+ exit;
+
+
+default:
+ header('HTTP/1.1 500 Internal Server Error');
+ header('Content-Type: text/plain');
+ echo "Unknown request";
+}
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/example/server/www/register.php b/mod/oauth_api/vendors/oauth/example/server/www/register.php
new file mode 100644
index 000000000..c5785c2c8
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/www/register.php
@@ -0,0 +1,28 @@
+<?php
+
+require_once '../core/init.php';
+
+assert_logged_in();
+
+if ($_SERVER['REQUEST_METHOD'] == 'POST')
+{
+ try
+ {
+ $store = OAuthStore::instance();
+ $key = $store->updateConsumer($_POST, 1, true);
+
+ $c = $store->getConsumer($key);
+ echo 'Your consumer key is: <strong>' . $c['consumer_key'] . '</strong><br />';
+ echo 'Your consumer secret is: <strong>' . $c['consumer_secret'] . '</strong><br />';
+ }
+ catch (OAuthException $e)
+ {
+ echo '<strong>Error: ' . $e->getMessage() . '</strong><br />';
+ }
+}
+
+
+$smarty = session_smarty();
+$smarty->display('register.tpl');
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/example/server/www/services.xrds.php b/mod/oauth_api/vendors/oauth/example/server/www/services.xrds.php
new file mode 100644
index 000000000..4c50aa12b
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/example/server/www/services.xrds.php
@@ -0,0 +1,71 @@
+<?php
+
+/**
+ * oauth-php: Example OAuth server
+ *
+ * XRDS discovery for OAuth. This file helps the consumer program to
+ * discover where the OAuth endpoints for this server are.
+ *
+ * @author Arjan Scherpenisse <arjan@scherpenisse.net>
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+header('Content-Type: application/xrds+xml');
+
+$server = $_SERVER['SERVER_NAME'];
+
+echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
+
+?>
+<XRDS xmlns="xri://$xrds">
+ <XRD xmlns:simple="http://xrds-simple.net/core/1.0" xmlns="xri://$XRD*($v*2.0)" xmlns:openid="http://openid.net/xmlns/1.0" version="2.0" xml:id="main">
+ <Type>xri://$xrds*simple</Type>
+ <Service>
+ <Type>http://oauth.net/discovery/1.0</Type>
+ <URI>#main</URI>
+ </Service>
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/request</Type>
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+ <Type>http://oauth.net/core/1.0/signature/HMAC-SHA1</Type>
+ <Type>http://oauth.net/core/1.0/signature/PLAINTEXT</Type>
+ <URI>http://<?=$server?>/oauth/request_token</URI>
+ </Service>
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/authorize</Type>
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+ <URI>http://<?=$server?>/oauth/authorize</URI>
+ </Service>
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/access</Type>
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+ <Type>http://oauth.net/core/1.0/signature/HMAC-SHA1</Type>
+ <Type>http://oauth.net/core/1.0/signature/PLAINTEXT</Type>
+ <URI>http://<?=$server?>/oauth/access_token</URI>
+ </Service>
+ </XRD>
+</XRDS>
diff --git a/mod/oauth_api/vendors/oauth/library/OAuthDiscovery.php b/mod/oauth_api/vendors/oauth/library/OAuthDiscovery.php
new file mode 100644
index 000000000..d097756dd
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/OAuthDiscovery.php
@@ -0,0 +1,226 @@
+<?php
+
+/**
+ * Handle the discovery of OAuth service provider endpoints and static consumer identity.
+ *
+ * @version $Id$
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Sep 4, 2008 5:05:19 PM
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once dirname(__FILE__).'/discovery/xrds_parse.php';
+
+require_once dirname(__FILE__).'/OAuthException.php';
+require_once dirname(__FILE__).'/OAuthRequestLogger.php';
+
+
+class OAuthDiscovery
+{
+ /**
+ * Return a description how we can do a consumer allocation. Prefers static allocation if
+ * possible. If static allocation is possible
+ *
+ * See also: http://oauth.net/discovery/#consumer_identity_types
+ *
+ * @param string uri
+ * @return array provider description
+ */
+ static function discover ( $uri )
+ {
+ // See what kind of consumer allocations are available
+ $xrds_file = self::discoverXRDS($uri);
+ if (!empty($xrds_file))
+ {
+ $xrds = xrds_parse($xrds_file);
+ if (empty($xrds))
+ {
+ throw new OAuthException('Could not discover OAuth information for '.$uri);
+ }
+ }
+ else
+ {
+ throw new OAuthException('Could not discover XRDS file at '.$uri);
+ }
+
+ // Fill an OAuthServer record for the uri found
+ $ps = parse_url($uri);
+ $host = isset($ps['host']) ? $ps['host'] : 'localhost';
+ $server_uri = $ps['scheme'].'://'.$host.'/';
+
+ $p = array(
+ 'user_id' => null,
+ 'consumer_key' => '',
+ 'consumer_secret' => '',
+ 'signature_methods' => '',
+ 'server_uri' => $server_uri,
+ 'request_token_uri' => '',
+ 'authorize_uri' => '',
+ 'access_token_uri' => ''
+ );
+
+
+ // Consumer identity (out of bounds or static)
+ if (isset($xrds['consumer_identity']))
+ {
+ // Try to find a static consumer allocation, we like those :)
+ foreach ($xrds['consumer_identity'] as $ci)
+ {
+ if ($ci['method'] == 'static' && !empty($ci['consumer_key']))
+ {
+ $p['consumer_key'] = $ci['consumer_key'];
+ $p['consumer_secret'] = '';
+ }
+ else if ($ci['method'] == 'oob' && !empty($ci['uri']))
+ {
+ // TODO: Keep this uri somewhere for the user?
+ $p['consumer_oob_uri'] = $ci['uri'];
+ }
+ }
+ }
+
+ // The token uris
+ if (isset($xrds['request'][0]['uri']))
+ {
+ $p['request_token_uri'] = $xrds['request'][0]['uri'];
+ if (!empty($xrds['request'][0]['signature_method']))
+ {
+ $p['signature_methods'] = $xrds['request'][0]['signature_method'];
+ }
+ }
+ if (isset($xrds['authorize'][0]['uri']))
+ {
+ $p['authorize_uri'] = $xrds['authorize'][0]['uri'];
+ if (!empty($xrds['authorize'][0]['signature_method']))
+ {
+ $p['signature_methods'] = $xrds['authorize'][0]['signature_method'];
+ }
+ }
+ if (isset($xrds['access'][0]['uri']))
+ {
+ $p['access_token_uri'] = $xrds['access'][0]['uri'];
+ if (!empty($xrds['access'][0]['signature_method']))
+ {
+ $p['signature_methods'] = $xrds['access'][0]['signature_method'];
+ }
+ }
+ return $p;
+ }
+
+
+ /**
+ * Discover the XRDS file at the uri. This is a bit primitive, you should overrule
+ * this function so that the XRDS file can be cached for later referral.
+ *
+ * @param string uri
+ * @return string false when no XRDS file found
+ */
+ static protected function discoverXRDS ( $uri, $recur = 0 )
+ {
+ // Bail out when we are following redirects
+ if ($recur > 10)
+ {
+ return false;
+ }
+
+ $data = self::curl($uri);
+
+ // Check what we got back, could be:
+ // 1. The XRDS discovery file itself (check content-type)
+ // 2. The X-XRDS-Location header
+
+ if (is_string($data) && !empty($data))
+ {
+ list($head,$body) = explode("\r\n\r\n", $data);
+ $body = trim($body);
+ $m = false;
+
+ // See if we got the XRDS file itself or we have to follow a location header
+ if ( preg_match('/^Content-Type:\s*application\/xrds+xml/im', $head)
+ || preg_match('/^<\?xml[^>]*\?>\s*<xrds\s/i', $body)
+ || preg_match('/^<xrds\s/i', $body)
+ )
+ {
+ $xrds = $body;
+ }
+ else if ( preg_match('/^X-XRDS-Location:\s*(.*)$/im', $head, $m)
+ || preg_match('/^Location:\s*(.*)$/im', $head, $m))
+ {
+ // Recurse to the given location
+ if ($uri != $m[1])
+ {
+ $xrds = self::discoverXRDS($m[1], $recur+1);
+ }
+ else
+ {
+ // Referring to the same uri, bail out
+ $xrds = false;
+ }
+ }
+ else
+ {
+ // Not an XRDS file an nowhere else to check
+ $xrds = false;
+ }
+ }
+ else
+ {
+ $xrds = false;
+ }
+ return $xrds;
+ }
+
+
+ /**
+ * Try to fetch an XRDS file at the given location. Sends an accept header preferring the xrds file.
+ *
+ * @param string uri
+ * @return array (head,body), false on an error
+ */
+ static protected function curl ( $uri )
+ {
+ $ch = curl_init();
+
+ curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/xrds+xml, */*;q=0.1'));
+ curl_setopt($ch, CURLOPT_USERAGENT, 'anyMeta/OAuth 1.0 - (OAuth Discovery $LastChangedRevision: 45 $)');
+ curl_setopt($ch, CURLOPT_URL, $uri);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_HEADER, true);
+
+ $txt = curl_exec($ch);
+ curl_close($ch);
+
+ // Tell the logger what we requested and what we received back
+ $data = "GET $uri";
+ OAuthRequestLogger::setSent($data, "");
+ OAuthRequestLogger::setReceived($txt);
+
+ return $txt;
+ }
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/OAuthException.php b/mod/oauth_api/vendors/oauth/library/OAuthException.php
new file mode 100644
index 000000000..cadd1d032
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/OAuthException.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * Simple exception wrapper for OAuth
+ *
+ * @version $Id: OAuthException.php 49 2008-10-01 09:43:19Z marcw@pobox.com $
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Nov 29, 2007 5:33:54 PM
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+// TODO: something with the HTTP return code matching to the problem
+
+require_once dirname(__FILE__) . '/OAuthRequestLogger.php';
+
+class OAuthException extends Exception
+{
+ function __construct ( $message )
+ {
+ Exception::__construct($message);
+ OAuthRequestLogger::addNote('OAuthException: '.$message);
+ }
+
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/OAuthRequest.php b/mod/oauth_api/vendors/oauth/library/OAuthRequest.php
new file mode 100644
index 000000000..c0d6ddbc7
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/OAuthRequest.php
@@ -0,0 +1,801 @@
+<?php
+
+/**
+ * Request wrapper class. Prepares a request for consumption by the OAuth routines
+ *
+ * @version $Id: OAuthRequest.php 50 2008-10-01 15:11:08Z marcw@pobox.com $
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Nov 16, 2007 12:20:31 PM
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+
+require_once dirname(__FILE__) . '/OAuthException.php';
+
+/**
+ * Object to parse an incoming OAuth request or prepare an outgoing OAuth request
+ */
+class OAuthRequest
+{
+ /* the realm for this request */
+ protected $realm;
+
+ /* all the parameters, RFC3986 encoded name/value pairs */
+ protected $param = array();
+
+ /* the parsed request uri */
+ protected $uri_parts;
+
+ /* the raw request uri */
+ protected $uri;
+
+ /* the request headers */
+ protected $headers;
+
+ /* the request method */
+ protected $method;
+
+ /* the body of the OAuth request */
+ protected $body;
+
+
+ /**
+ * Construct from the current request. Useful for checking the signature of a request.
+ * When not supplied with any parameters this will use the current request.
+ *
+ * @param string uri might include parameters
+ * @param string method GET, PUT, POST etc.
+ * @param string parameters additional post parameters, urlencoded (RFC1738)
+ * @param array headers headers for request
+ * @param string body optional body of the OAuth request (POST or PUT)
+ */
+ function __construct ( $uri = null, $method = 'GET', $parameters = '', $headers = array(), $body = null )
+ {
+ if (empty($uri))
+ {
+ if (is_object($_SERVER))
+ {
+ // Tainted arrays - the normal stuff in anyMeta
+ $method = $_SERVER->REQUEST_METHOD->getRawUnsafe();
+ $uri = $_SERVER->REQUEST_URI->getRawUnsafe();
+ }
+ else
+ {
+ // non anyMeta systems
+ $method = $_SERVER['REQUEST_METHOD'];
+ $uri = $_SERVER['REQUEST_URI'];
+ }
+ $headers = getallheaders();
+ $parameters = '';
+ $this->method = strtoupper($method);
+
+ // If this is a post then also check the posted variables
+ if (strcasecmp($method, 'POST') == 0)
+ {
+ /*
+ // TODO: what to do with 'multipart/form-data'?
+ if ($this->getRequestContentType() == 'multipart/form-data')
+ {
+ throw new OAuthException('Unsupported POST content type, expected "application/x-www-form-urlencoded" got "'.@$_SERVER['CONTENT_TYPE'].'"');
+ }
+ */
+ if ($this->getRequestContentType() == 'application/x-www-form-urlencoded')
+ {
+ // Get the posted body (when available)
+ if (!isset($headers['X-OAuth-Test']))
+ {
+ $parameters .= $this->getRequestBody();
+ }
+ }
+ else
+ {
+ $body = $this->getRequestBody();
+ }
+ }
+ else if (strcasecmp($method, 'PUT') == 0)
+ {
+ $body = $this->getRequestBody();
+ }
+ }
+
+ $this->method = strtoupper($method);
+ $this->headers = $headers;
+ // Store the values, prepare for oauth
+ $this->uri = $uri;
+ $this->body = $body;
+ $this->parseUri($parameters);
+ $this->parseHeaders();
+ $this->transcodeParams();
+ }
+
+
+ /**
+ * Return the signature base string.
+ * Note that we can't use rawurlencode due to specified use of RFC3986.
+ *
+ * @return string
+ */
+ function signatureBaseString ()
+ {
+ $sig = array();
+ $sig[] = $this->method;
+ $sig[] = $this->getRequestUrl();
+ $sig[] = $this->getNormalizedParams();
+
+ return implode('&', array_map(array($this, 'urlencode'), $sig));
+ }
+
+
+ /**
+ * Calculate the signature of the request, using the method in oauth_signature_method.
+ * The signature is returned encoded in the form as used in the url. So the base64 and
+ * urlencoding has been done.
+ *
+ * @param string consumer_secret
+ * @param string token_secret
+ * @exception when not all parts available
+ * @return string
+ */
+ function calculateSignature ( $consumer_secret, $token_secret, $token_type = 'access' )
+ {
+ $required = array(
+ 'oauth_consumer_key',
+ 'oauth_signature_method',
+ 'oauth_timestamp',
+ 'oauth_nonce'
+ );
+
+ if ($token_type !== false)
+ {
+ $required[] = 'oauth_token';
+ }
+
+ foreach ($required as $req)
+ {
+ if (!isset($this->param[$req]))
+ {
+ throw new OAuthException('Can\'t sign request, missing parameter "'.$req.'"');
+ }
+ }
+
+ $this->checks();
+
+ $base = $this->signatureBaseString();
+ $signature = $this->calculateDataSignature($base, $consumer_secret, $token_secret, $this->param['oauth_signature_method']);
+ return $signature;
+ }
+
+
+ /**
+ * Calculate the signature of a string.
+ * Uses the signature method from the current parameters.
+ *
+ * @param string data
+ * @param string consumer_secret
+ * @param string token_secret
+ * @param string signature_method
+ * @exception OAuthException thrown when the signature method is unknown
+ * @return string signature
+ */
+ function calculateDataSignature ( $data, $consumer_secret, $token_secret, $signature_method )
+ {
+ if (is_null($data))
+ {
+ $data = '';
+ }
+
+ $sig = $this->getSignatureMethod($signature_method);
+ return $sig->signature($this, $data, $consumer_secret, $token_secret);
+ }
+
+
+ /**
+ * Select a signature method from the list of available methods.
+ * We try to check the most secure methods first.
+ *
+ * @todo Let the signature method tell us how secure it is
+ * @param array methods
+ * @exception OAuthException when we don't support any method in the list
+ * @return string
+ */
+ public function selectSignatureMethod ( $methods )
+ {
+ if (in_array('HMAC-SHA1', $methods))
+ {
+ $method = 'HMAC-SHA1';
+ }
+ else if (in_array('MD5', $methods))
+ {
+ $method = 'MD5';
+ }
+ else
+ {
+ $method = false;
+ foreach ($methods as $m)
+ {
+ $m = strtoupper($m);
+ $m = preg_replace('/[^A-Z0-9]/', '_', $m);
+ if (file_exists(dirname(__FILE__).'/signature_method/OAuthSignatureMethod_'.$m.'.php'))
+ {
+ $method = $m;
+ break;
+ }
+ }
+
+ if (empty($method))
+ {
+ throw new OAuthException('None of the signing methods is supported.');
+ }
+ }
+ return $method;
+ }
+
+
+ /**
+ * Fetch the signature object used for calculating and checking the signature base string
+ *
+ * @param string method
+ * @return OAuthSignatureMethod object
+ */
+ function getSignatureMethod ( $method )
+ {
+ $m = strtoupper($method);
+ $m = preg_replace('/[^A-Z0-9]/', '_', $m);
+ $class = 'OAuthSignatureMethod_'.$m;
+
+ if (file_exists(dirname(__FILE__).'/signature_method/'.$class.'.php'))
+ {
+ require_once dirname(__FILE__).'/signature_method/'.$class.'.php';
+ $sig = new $class();
+ }
+ else
+ {
+ throw new OAuthException('Unsupported signature method "'.$m.'".');
+ }
+ return $sig;
+ }
+
+
+ /**
+ * Perform some sanity checks.
+ *
+ * @exception OAuthException thrown when sanity checks failed
+ */
+ function checks ()
+ {
+ if (isset($this->param['oauth_version']))
+ {
+ $version = $this->urldecode($this->param['oauth_version']);
+ if ($version != '1.0')
+ {
+ throw new OAuthException('Expected OAuth version 1.0, got "'.$this->param['oauth_version'].'"');
+ }
+ }
+ }
+
+
+ /**
+ * Return the request method
+ *
+ * @return string
+ */
+ function getMethod ()
+ {
+ return $this->method;
+ }
+
+ /**
+ * Return the complete parameter string for the signature check.
+ * All parameters are correctly urlencoded and sorted on name and value
+ *
+ * @return string
+ */
+ function getNormalizedParams ()
+ {
+ /*
+ // sort by name, then by value
+ // (needed when we start allowing multiple values with the same name)
+ $keys = array_keys($this->param);
+ $values = array_values($this->param);
+ array_multisort($keys, SORT_ASC, $values, SORT_ASC);
+ */
+ $params = $this->param;
+ $normalized = array();
+
+ ksort($params);
+ foreach ($params as $key => $value)
+ {
+ // all names and values are already urlencoded, exclude the oauth signature
+ if ($key != 'oauth_signature')
+ {
+ if (is_array($value))
+ {
+ $value_sort = $value;
+ sort($value_sort);
+ foreach ($value_sort as $v)
+ {
+ $normalized[] = $key.'='.$v;
+ }
+ }
+ else
+ {
+ $normalized[] = $key.'='.$value;
+ }
+ }
+ }
+ return implode('&', $normalized);
+ }
+
+
+ /**
+ * Return the normalised url for signature checks
+ */
+ function getRequestUrl ()
+ {
+ $url = $this->uri_parts['scheme'] . '://'
+ . $this->uri_parts['user'] . (!empty($this->uri_parts['pass']) ? ':' : '')
+ . $this->uri_parts['pass'] . (!empty($this->uri_parts['user']) ? '@' : '')
+ . $this->uri_parts['host'];
+
+ if ( $this->uri_parts['port']
+ && $this->uri_parts['port'] != $this->defaultPortForScheme($this->uri_parts['scheme']))
+ {
+ $url .= ':'.$this->uri_parts['port'];
+ }
+ if (!empty($this->uri_parts['path']))
+ {
+ $url .= $this->uri_parts['path'];
+ }
+ return $url;
+ }
+
+
+ /**
+ * Get a parameter, value is always urlencoded
+ *
+ * @param string name
+ * @param boolean urldecode set to true to decode the value upon return
+ * @return string value false when not found
+ */
+ function getParam ( $name, $urldecode = false )
+ {
+ if (isset($this->param[$name]))
+ {
+ $s = $this->param[$name];
+ }
+ else if (isset($this->param[$this->urlencode($name)]))
+ {
+ $s = $this->param[$this->urlencode($name)];
+ }
+ else
+ {
+ $s = false;
+ }
+ if (!empty($s) && $urldecode)
+ {
+ if (is_array($s))
+ {
+ $s = array_map(array($this,'urldecode'), $s);
+ }
+ else
+ {
+ $s = $this->urldecode($s);
+ }
+ }
+ return $s;
+ }
+
+ /**
+ * Set a parameter
+ *
+ * @param string name
+ * @param string value
+ * @param boolean encoded set to true when the values are already encoded
+ */
+ function setParam ( $name, $value, $encoded = false )
+ {
+ if (!$encoded)
+ {
+ $name_encoded = $this->urlencode($name);
+ if (is_array($value))
+ {
+ foreach ($value as $v)
+ {
+ $this->param[$name_encoded][] = $this->urlencode($v);
+ }
+ }
+ else
+ {
+ $this->param[$name_encoded] = $this->urlencode($value);
+ }
+ }
+ else
+ {
+ $this->param[$name] = $value;
+ }
+ }
+
+
+ /**
+ * Re-encode all parameters so that they are encoded using RFC3986.
+ * Updates the $this->param attribute.
+ */
+ protected function transcodeParams ()
+ {
+ $params = $this->param;
+ $this->param = array();
+
+ foreach ($params as $name=>$value)
+ {
+ if (is_array($value))
+ {
+ $this->param[$this->urltranscode($name)] = array_map(array($this,'urltranscode'), $value);
+ }
+ else
+ {
+ $this->param[$this->urltranscode($name)] = $this->urltranscode($value);
+ }
+ }
+ }
+
+
+
+ /**
+ * Return the body of the OAuth request.
+ *
+ * @return string null when no body
+ */
+ function getBody ()
+ {
+ return $this->body;
+ }
+
+
+ /**
+ * Return the body of the OAuth request.
+ *
+ * @return string null when no body
+ */
+ function setBody ( $body )
+ {
+ $this->body = $body;
+ }
+
+
+ /**
+ * Parse the uri into its parts. Fill in the missing parts.
+ *
+ * @todo check for the use of https, right now we default to http
+ * @todo support for multiple occurences of parameters
+ * @param string $parameters optional extra parameters (from eg the http post)
+ */
+ protected function parseUri ( $parameters )
+ {
+ $ps = parse_url($this->uri);
+
+ // Get the current/requested method
+ if (empty($ps['scheme']))
+ {
+ $ps['scheme'] = 'http';
+ }
+ else
+ {
+ $ps['scheme'] = strtolower($ps['scheme']);
+ }
+
+ // Get the current/requested host
+ if (empty($ps['host']))
+ {
+ if (isset($_SERVER['HTTP_HOST']))
+ {
+ $ps['host'] = $_SERVER['HTTP_HOST'];
+ }
+ else
+ {
+ $ps['host'] = '';
+ }
+ }
+ $ps['host'] = mb_strtolower($ps['host']);
+ if (!preg_match('/^[a-z0-9\.\-]+$/', $ps['host']))
+ {
+ throw new OAuthException('Unsupported characters in host name');
+ }
+
+ // Get the port we are talking on
+ if (empty($ps['port']))
+ {
+ $ps['port'] = $this->defaultPortForScheme($ps['scheme']);
+ }
+
+ if (empty($ps['user']))
+ {
+ $ps['user'] = '';
+ }
+ if (empty($ps['pass']))
+ {
+ $ps['pass'] = '';
+ }
+ if (empty($ps['path']))
+ {
+ $ps['path'] = '/';
+ }
+ if (empty($ps['query']))
+ {
+ $ps['query'] = '';
+ }
+ if (empty($ps['fragment']))
+ {
+ $ps['fragment'] = '';
+ }
+
+ // Now all is complete - parse all parameters
+ foreach (array($ps['query'], $parameters) as $params)
+ {
+ if (strlen($params) > 0)
+ {
+ $params = explode('&', $params);
+ foreach ($params as $p)
+ {
+ @list($name, $value) = explode('=', $p, 2);
+ $this->param[$name] = $value;
+ }
+ }
+ }
+ $this->uri_parts = $ps;
+ }
+
+
+ /**
+ * Return the default port for a scheme
+ *
+ * @param string scheme
+ * @return int
+ */
+ protected function defaultPortForScheme ( $scheme )
+ {
+ switch ($scheme)
+ {
+ case 'http': return 80;
+ case 'https': return 43;
+ default:
+ throw new OAuthException('Unsupported scheme type, expected http or https, got "'.$scheme.'"');
+ break;
+ }
+ }
+
+
+ /**
+ * Encode a string according to the RFC3986
+ *
+ * @param string s
+ * @return string
+ */
+ function urlencode ( $s )
+ {
+ if ($s === false)
+ {
+ return $s;
+ }
+ else
+ {
+ return str_replace('%7E', '~', rawurlencode($s));
+ }
+ }
+
+ /**
+ * Decode a string according to RFC3986.
+ * Also correctly decodes RFC1738 urls.
+ *
+ * @param string s
+ * @return string
+ */
+ function urldecode ( $s )
+ {
+ if ($s === false)
+ {
+ return $s;
+ }
+ else
+ {
+ return rawurldecode($s);
+ }
+ }
+
+ /**
+ * urltranscode - make sure that a value is encoded using RFC3986.
+ * We use a basic urldecode() function so that any use of '+' as the
+ * encoding of the space character is correctly handled.
+ *
+ * @param string s
+ * @return string
+ */
+ function urltranscode ( $s )
+ {
+ if ($s === false)
+ {
+ return $s;
+ }
+ else
+ {
+ return $this->urlencode(urldecode($s));
+ }
+ }
+
+
+ /**
+ * Parse the oauth parameters from the request headers
+ * Looks for something like:
+ *
+ * Authorization: OAuth realm="http://photos.example.net/authorize",
+ * oauth_consumer_key="dpf43f3p2l4k3l03",
+ * oauth_token="nnch734d00sl2jdk",
+ * oauth_signature_method="HMAC-SHA1",
+ * oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D",
+ * oauth_timestamp="1191242096",
+ * oauth_nonce="kllo9940pd9333jh",
+ * oauth_version="1.0"
+ */
+ private function parseHeaders ()
+ {
+/*
+ $this->headers['Authorization'] = 'OAuth realm="http://photos.example.net/authorize",
+ oauth_consumer_key="dpf43f3p2l4k3l03",
+ oauth_token="nnch734d00sl2jdk",
+ oauth_signature_method="HMAC-SHA1",
+ oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D",
+ oauth_timestamp="1191242096",
+ oauth_nonce="kllo9940pd9333jh",
+ oauth_version="1.0"';
+*/
+ if (isset($this->headers['Authorization']))
+ {
+ $auth = trim($this->headers['Authorization']);
+ if (strncasecmp($auth, 'OAuth', 4) == 0)
+ {
+ $vs = explode(',', substr($auth, 6));
+ foreach ($vs as $v)
+ {
+ if (strpos($v, '='))
+ {
+ $v = trim($v);
+ list($name,$value) = explode('=', $v, 2);
+ if (!empty($value) && $value{0} == '"' && substr($value, -1) == '"')
+ {
+ $value = substr(substr($value, 1), 0, -1);
+ }
+
+ if (strcasecmp($name, 'realm') == 0)
+ {
+ $this->realm = $value;
+ }
+ else
+ {
+ $this->param[$name] = $value;
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Fetch the content type of the current request
+ *
+ * @return string
+ */
+ private function getRequestContentType ()
+ {
+ $content_type = 'application/octet-stream';
+ if (!empty($_SERVER) && array_key_exists('CONTENT_TYPE', $_SERVER))
+ {
+ list($content_type) = explode(';', $_SERVER['CONTENT_TYPE']);
+ }
+ return trim($content_type);
+ }
+
+
+ /**
+ * Get the body of a POST or PUT.
+ *
+ * Used for fetching the post parameters and to calculate the body signature.
+ *
+ * @return string null when no body present (or wrong content type for body)
+ */
+ private function getRequestBody ()
+ {
+ $body = null;
+ if ($this->method == 'POST' || $this->method == 'PUT')
+ {
+ $body = '';
+ $fh = @fopen('php://input', 'r');
+ if ($fh)
+ {
+ while (!feof($fh))
+ {
+ $s = fread($fh, 1024);
+ if (is_string($s))
+ {
+ $body .= $s;
+ }
+ }
+ fclose($fh);
+ }
+ }
+ return $body;
+ }
+
+
+ /**
+ * Simple function to perform a redirect (GET).
+ * Redirects the User-Agent, does not return.
+ *
+ * @param string uri
+ * @param array params parameters, urlencoded
+ * @exception OAuthException when redirect uri is illegal
+ */
+ public function redirect ( $uri, $params )
+ {
+ if (!empty($params))
+ {
+ $q = array();
+ foreach ($params as $name=>$value)
+ {
+ $q[] = $name.'='.$value;
+ }
+ $q_s = implode('&', $q);
+
+ if (strpos($uri, '?'))
+ {
+ $uri .= '&'.$q_s;
+ }
+ else
+ {
+ $uri .= '?'.$q_s;
+ }
+ }
+
+ // simple security - multiline location headers can inject all kinds of extras
+ $uri = preg_replace('/\s/', '%20', $uri);
+ if (strncasecmp($uri, 'http://', 7) && strncasecmp($uri, 'https://', 8))
+ {
+ if (strpos($uri, '://'))
+ {
+ throw new OAuthException('Illegal protocol in redirect uri '.$uri);
+ }
+ $uri = 'http://'.$uri;
+ }
+
+ header('HTTP/1.1 302 Found');
+ header('Location: '.$uri);
+ echo '';
+ exit();
+ }
+
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/OAuthRequestLogger.php b/mod/oauth_api/vendors/oauth/library/OAuthRequestLogger.php
new file mode 100644
index 000000000..934c1c53c
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/OAuthRequestLogger.php
@@ -0,0 +1,274 @@
+<?php
+
+/**
+ * Log OAuth requests
+ *
+ * @version $Id: OAuthRequestLogger.php 55 2009-01-14 15:27:36Z scherpenisse $
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Dec 7, 2007 12:22:43 PM
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+class OAuthRequestLogger
+{
+ static private $logging = 0;
+ static private $enable_logging = null;
+ static private $store_log = null;
+ static private $note = '';
+ static private $user_id = null;
+ static private $request_object = null;
+ static private $sent = null;
+ static private $received = null;
+ static private $log = array();
+
+ /**
+ * Start any logging, checks the system configuration if logging is needed.
+ *
+ * @param OAuthRequest $request_object
+ */
+ static function start ( $request_object = null )
+ {
+ if (defined('OAUTH_LOG_REQUEST'))
+ {
+ if (is_null(OAuthRequestLogger::$enable_logging))
+ {
+ OAuthRequestLogger::$enable_logging = true;
+ }
+ if (is_null(OAuthRequestLogger::$store_log))
+ {
+ OAuthRequestLogger::$store_log = true;
+ }
+ }
+
+ if (OAuthRequestLogger::$enable_logging && !OAuthRequestLogger::$logging)
+ {
+ OAuthRequestLogger::$logging = true;
+ OAuthRequestLogger::$request_object = $request_object;
+ ob_start();
+
+ // Make sure we flush our log entry when we stop the request (eg on an exception)
+ register_shutdown_function(array('OAuthRequestLogger','flush'));
+ }
+ }
+
+
+ /**
+ * Force logging, needed for performing test connects independent from the debugging setting.
+ *
+ * @param boolean store_log (optional) true to store the log in the db
+ */
+ static function enableLogging ( $store_log = null )
+ {
+ OAuthRequestLogger::$enable_logging = true;
+ if (!is_null($store_log))
+ {
+ OAuthRequestLogger::$store_log = $store_log;
+ }
+ }
+
+
+ /**
+ * Logs the request to the database, sends any cached output.
+ * Also called on shutdown, to make sure we always log the request being handled.
+ */
+ static function flush ()
+ {
+ if (OAuthRequestLogger::$logging)
+ {
+ OAuthRequestLogger::$logging = false;
+
+ if (is_null(OAuthRequestLogger::$sent))
+ {
+ // What has been sent to the user-agent?
+ $data = ob_get_contents();
+ if (strlen($data) > 0)
+ {
+ ob_end_flush();
+ }
+ elseif (ob_get_level())
+ {
+ ob_end_clean();
+ }
+ $hs = headers_list();
+ $sent = implode("\n", $hs) . "\n\n" . $data;
+ }
+ else
+ {
+ // The request we sent
+ $sent = OAuthRequestLogger::$sent;
+ }
+
+ if (is_null(OAuthRequestLogger::$received))
+ {
+ // Build the request we received
+ $hs0 = getallheaders();
+ $hs = array();
+ foreach ($hs0 as $h => $v)
+ {
+ $hs[] = "$h: $v";
+ }
+
+ $data = '';
+ $fh = @fopen('php://input', 'r');
+ if ($fh)
+ {
+ while (!feof($fh))
+ {
+ $s = fread($fh, 1024);
+ if (is_string($s))
+ {
+ $data .= $s;
+ }
+ }
+ fclose($fh);
+ }
+ $received = implode("\n", $hs) . "\n\n" . $data;
+ }
+ else
+ {
+ // The answer we received
+ $received = OAuthRequestLogger::$received;
+ }
+
+ // The request base string
+ if (OAuthRequestLogger::$request_object)
+ {
+ $base_string = OAuthRequestLogger::$request_object->signatureBaseString();
+ }
+ else
+ {
+ $base_string = '';
+ }
+
+ // Figure out to what keys we want to log this request
+ $keys = array();
+ if (OAuthRequestLogger::$request_object)
+ {
+ $consumer_key = OAuthRequestLogger::$request_object->getParam('oauth_consumer_key', true);
+ $token = OAuthRequestLogger::$request_object->getParam('oauth_token', true);
+
+ switch (get_class(OAuthRequestLogger::$request_object))
+ {
+ // tokens are access/request tokens by a consumer
+ case 'OAuthServer':
+ case 'OAuthRequestVerifier':
+ $keys['ocr_consumer_key'] = $consumer_key;
+ $keys['oct_token'] = $token;
+ break;
+
+ // tokens are access/request tokens to a server
+ case 'OAuthRequester':
+ case 'OAuthRequestSigner':
+ $keys['osr_consumer_key'] = $consumer_key;
+ $keys['ost_token'] = $token;
+ break;
+ }
+ }
+
+ // Log the request
+ if (OAuthRequestLogger::$store_log)
+ {
+ $store = OAuthStore::instance();
+ $store->addLog($keys, $received, $sent, $base_string, OAuthRequestLogger::$note, OAuthRequestLogger::$user_id);
+ }
+
+ OAuthRequestLogger::$log[] = array(
+ 'keys' => $keys,
+ 'received' => $received,
+ 'sent' => $sent,
+ 'base_string' => $base_string,
+ 'note' => OAuthRequestLogger::$note
+ );
+ }
+ }
+
+
+ /**
+ * Add a note, used by the OAuthException to log all exceptions.
+ *
+ * @param string note
+ */
+ static function addNote ( $note )
+ {
+ OAuthRequestLogger::$note .= $note . "\n\n";
+ }
+
+ /**
+ * Set the OAuth request object being used
+ *
+ * @param OAuthRequest request_object
+ */
+ static function setRequestObject ( $request_object )
+ {
+ OAuthRequestLogger::$request_object = $request_object;
+ }
+
+
+ /**
+ * Set the relevant user (defaults to the current user)
+ *
+ * @param int user_id
+ */
+ static function setUser ( $user_id )
+ {
+ OAuthRequestLogger::$user_id = $user_id;
+ }
+
+
+ /**
+ * Set the request we sent
+ *
+ * @param string request
+ */
+ static function setSent ( $request )
+ {
+ OAuthRequestLogger::$sent = $request;
+ }
+
+ /**
+ * Set the reply we received
+ *
+ * @param string request
+ */
+ static function setReceived ( $reply )
+ {
+ OAuthRequestLogger::$received = $reply;
+ }
+
+
+ /**
+ * Get the the log till now
+ *
+ * @return array
+ */
+ static function getLog ()
+ {
+ return OAuthRequestLogger::$log;
+ }
+}
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/OAuthRequestSigner.php b/mod/oauth_api/vendors/oauth/library/OAuthRequestSigner.php
new file mode 100644
index 000000000..9f83f287f
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/OAuthRequestSigner.php
@@ -0,0 +1,209 @@
+<?php
+
+/**
+ * Sign requests before performing the request.
+ *
+ * @version $Id: OAuthRequestSigner.php 58 2009-02-23 01:47:23Z marcw@pobox.com $
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Nov 16, 2007 4:02:49 PM
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+
+require_once dirname(__FILE__) . '/OAuthStore.php';
+require_once dirname(__FILE__) . '/OAuthRequest.php';
+
+
+class OAuthRequestSigner extends OAuthRequest
+{
+ protected $request;
+ protected $store;
+ protected $usr_id = 0;
+ private $signed = false;
+
+
+ /**
+ * Construct the request to be signed. Parses or appends the parameters in the params url.
+ * When you supply an params array, then the params should not be urlencoded.
+ * When you supply a string, then it is assumed it is of the type application/x-www-form-urlencoded
+ *
+ * @param string request url
+ * @param string method PUT, GET, POST etc.
+ * @param mixed params string (for urlencoded data, or array with name/value pairs)
+ * @param string body optional body for PUT and/or POST requests
+ */
+ function __construct ( $request, $method = 'GET', $params = null, $body = null )
+ {
+ $this->store = OAuthStore::instance();
+
+ if (is_string($params))
+ {
+ parent::__construct($request, $method, $params);
+ }
+ else
+ {
+ parent::__construct($request, $method);
+ if (is_array($params))
+ {
+ foreach ($params as $name => $value)
+ {
+ $this->setParam($name, $value);
+ }
+ }
+ }
+
+ // With put/ post we might have a body (not for application/x-www-form-urlencoded requests)
+ if ($method == 'PUT' || $method == 'POST')
+ {
+ $this->setBody($body);
+ }
+ }
+
+
+ /**
+ * Reset the 'signed' flag, so that any changes in the parameters force a recalculation
+ * of the signature.
+ */
+ function setUnsigned ()
+ {
+ $this->signed = false;
+ }
+
+
+ /**
+ * Sign our message in the way the server understands.
+ * Set the needed oauth_xxxx parameters.
+ *
+ * @param int usr_id (optional) user that wants to sign this request
+ * @param array secrets secrets used for signing, when empty then secrets will be fetched from the token registry
+ * @param string name name of the token to be used for signing
+ * @exception OAuthException when there is no oauth relation with the server
+ * @exception OAuthException when we don't support the signing methods of the server
+ */
+ function sign ( $usr_id = 0, $secrets = null, $name = '' )
+ {
+ $url = $this->getRequestUrl();
+ if (empty($secrets))
+ {
+ // get the access tokens for the site (on an user by user basis)
+ $secrets = $this->store->getSecretsForSignature($url, $usr_id, $name);
+ }
+ if (empty($secrets))
+ {
+ throw new OAuthException('No OAuth relation with the server for at "'.$url.'"');
+ }
+
+ $signature_method = $this->selectSignatureMethod($secrets['signature_methods']);
+
+ $token = isset($secrets['token']) ? $secrets['token'] : '';
+ $token_secret = isset($secrets['token_secret']) ? $secrets['token_secret'] : '';
+
+ $this->setParam('oauth_signature_method',$signature_method);
+ $this->setParam('oauth_signature', '');
+ $this->setParam('oauth_nonce', !empty($secrets['nonce']) ? $secrets['nonce'] : uniqid(''));
+ $this->setParam('oauth_timestamp', !empty($secrets['timestamp']) ? $secrets['timestamp'] : time());
+ $this->setParam('oauth_token', $token);
+ $this->setParam('oauth_consumer_key', $secrets['consumer_key']);
+ $this->setParam('oauth_version', '1.0');
+
+ $body = $this->getBody();
+ if (!is_null($body))
+ {
+ // We also need to sign the body, use the default signature method
+ $body_signature = $this->calculateDataSignature($body, $secrets['consumer_secret'], $token_secret, $signature_method);
+ $this->setParam('xoauth_body_signature', $body_signature, true);
+ }
+
+ $signature = $this->calculateSignature($secrets['consumer_secret'], $token_secret);
+ $this->setParam('oauth_signature', $signature, true);
+
+ $this->signed = true;
+ $this->usr_id = $usr_id;
+ }
+
+
+ /**
+ * Builds the Authorization header for the request.
+ * Adds all oauth_ and xoauth_ parameters to the Authorization header.
+ *
+ * @return string
+ */
+ function getAuthorizationHeader ()
+ {
+ if (!$this->signed)
+ {
+ $this->sign($this->usr_id);
+ }
+ $h = array();
+ $h[] = 'Authorization: OAuth realm=""';
+ foreach ($this->param as $name => $value)
+ {
+ if (strncmp($name, 'oauth_', 6) == 0 || strncmp($name, 'xoauth_', 7) == 0)
+ {
+ $h[] = $name.'="'.$value.'"';
+ }
+ }
+ $hs = implode(', ', $h);
+ return $hs;
+ }
+
+
+ /**
+ * Builds the application/x-www-form-urlencoded parameter string. Can be appended as
+ * the query part to a GET or inside the request body for a POST.
+ *
+ * @param boolean oauth_as_header (optional) set to false to include oauth parameters
+ * @return string
+ */
+ function getQueryString ( $oauth_as_header = true )
+ {
+ $parms = array();
+ foreach ($this->param as $name => $value)
+ {
+ if ( !$oauth_as_header
+ || (strncmp($name, 'oauth_', 6) != 0 && strncmp($name, 'xoauth_', 7) != 0))
+ {
+ if (is_array($value))
+ {
+ foreach ($value as $v)
+ {
+ $parms[] = $name.'='.$v;
+ }
+ }
+ else
+ {
+ $parms[] = $name.'='.$value;
+ }
+ }
+ }
+ return implode('&', $parms);
+ }
+
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/OAuthRequestVerifier.php b/mod/oauth_api/vendors/oauth/library/OAuthRequestVerifier.php
new file mode 100644
index 000000000..4b4db9685
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/OAuthRequestVerifier.php
@@ -0,0 +1,262 @@
+<?php
+
+/**
+ * Verify the current request. Checks if signed and if the signature is correct.
+ * When correct then also figures out on behalf of which user this request is being made.
+ *
+ * @version $Id: OAuthRequestVerifier.php 51 2008-10-15 15:15:47Z marcw@pobox.com $
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Nov 16, 2007 4:35:03 PM
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once dirname(__FILE__) . '/OAuthStore.php';
+require_once dirname(__FILE__) . '/OAuthRequest.php';
+
+
+class OAuthRequestVerifier extends OAuthRequest
+{
+ private $request;
+ private $store;
+
+ /**
+ * Construct the request to be verified
+ *
+ * @param string request
+ * @param string method
+ */
+ function __construct ( $uri = null, $method = 'GET' )
+ {
+ $this->store = OAuthStore::instance();
+ parent::__construct($uri, $method);
+
+ OAuthRequestLogger::start($this);
+ }
+
+
+ /**
+ * See if the current request is signed with OAuth
+ *
+ * @return boolean
+ */
+ static public function requestIsSigned ()
+ {
+ if (isset($_REQUEST['oauth_signature']))
+ {
+ $signed = true;
+ }
+ else
+ {
+ $hs = getallheaders();
+ if (isset($hs['Authorization']) && strpos($hs['Authorization'], 'oauth_signature') !== false)
+ {
+ $signed = true;
+ }
+ else
+ {
+ $signed = false;
+ }
+ }
+ return $signed;
+ }
+
+
+ /**
+ * Verify the request if it seemed to be signed.
+ *
+ * @param string token_type the kind of token needed, defaults to 'access'
+ * @exception OAuthException thrown when the request did not verify
+ * @return boolean true when signed, false when not signed
+ */
+ public function verifyIfSigned ( $token_type = 'access' )
+ {
+ if ($this->getParam('oauth_consumer_key'))
+ {
+ OAuthRequestLogger::start($this);
+ $this->verify($token_type);
+ $signed = true;
+ OAuthRequestLogger::flush();
+ }
+ else
+ {
+ $signed = false;
+ }
+ return $signed;
+ }
+
+
+ /**
+ * Verify the request
+ *
+ * @param string token_type the kind of token needed, defaults to 'access' (false, 'access', 'request')
+ * @exception OAuthException thrown when the request did not verify
+ * @return int user_id associated with token (false when no user associated)
+ */
+ public function verify ( $token_type = 'access' )
+ {
+ $consumer_key = $this->getParam('oauth_consumer_key');
+ $token = $this->getParam('oauth_token');
+ $user_id = false;
+
+ if ($consumer_key && ($token_type === false || $token))
+ {
+ $secrets = $this->store->getSecretsForVerify( $this->urldecode($consumer_key),
+ $this->urldecode($token),
+ $token_type);
+
+ $this->store->checkServerNonce( $this->urldecode($consumer_key),
+ $this->urldecode($token),
+ $this->getParam('oauth_timestamp', true),
+ $this->getParam('oauth_nonce', true));
+
+ $oauth_sig = $this->getParam('oauth_signature');
+ if (empty($oauth_sig))
+ {
+ throw new OAuthException('Verification of signature failed (no oauth_signature in request).');
+ }
+
+ try
+ {
+ $this->verifySignature($secrets['consumer_secret'], $secrets['token_secret'], $token_type);
+ }
+ catch (OAuthException $e)
+ {
+ throw new OAuthException('Verification of signature failed (signature base string was "'.$this->signatureBaseString().'").');
+ }
+
+ // Check the optional body signature
+ if ($this->getParam('xoauth_body_signature'))
+ {
+ $method = $this->getParam('xoauth_body_signature_method');
+ if (empty($method))
+ {
+ $method = $this->getParam('oauth_signature_method');
+ }
+
+ try
+ {
+ $this->verifyDataSignature($this->getBody(), $secrets['consumer_secret'], $secrets['token_secret'], $method, $this->getParam('xoauth_body_signature'));
+ }
+ catch (OAuthException $e)
+ {
+ throw new OAuthException('Verification of body signature failed.');
+ }
+ }
+
+ // All ok - fetch the user associated with this request
+ if (isset($secrets['user_id']))
+ {
+ $user_id = $secrets['user_id'];
+ }
+
+ // Check if the consumer wants us to reset the ttl of this token
+ $ttl = $this->getParam('xoauth_token_ttl', true);
+ if (is_numeric($ttl))
+ {
+ $this->store->setConsumerAccessTokenTtl($this->urldecode($token), $ttl);
+ }
+ }
+ else
+ {
+ throw new OAuthException('Can\'t verify request, missing oauth_consumer_key or oauth_token');
+ }
+ return $user_id;
+ }
+
+
+
+ /**
+ * Verify the signature of the request, using the method in oauth_signature_method.
+ * The signature is returned encoded in the form as used in the url. So the base64 and
+ * urlencoding has been done.
+ *
+ * @param string consumer_secret
+ * @param string token_secret
+ * @exception OAuthException thrown when the signature method is unknown
+ * @exception OAuthException when not all parts available
+ * @exception OAuthException when signature does not match
+ */
+ public function verifySignature ( $consumer_secret, $token_secret, $token_type = 'access' )
+ {
+ $required = array(
+ 'oauth_consumer_key',
+ 'oauth_signature_method',
+ 'oauth_timestamp',
+ 'oauth_nonce',
+ 'oauth_signature'
+ );
+
+ if ($token_type !== false)
+ {
+ $required[] = 'oauth_token';
+ }
+
+ foreach ($required as $req)
+ {
+ if (!isset($this->param[$req]))
+ {
+ throw new OAuthException('Can\'t verify request signature, missing parameter "'.$req.'"');
+ }
+ }
+
+ $this->checks();
+
+ $base = $this->signatureBaseString();
+ $this->verifyDataSignature($base, $consumer_secret, $token_secret, $this->param['oauth_signature_method'], $this->param['oauth_signature']);
+ }
+
+
+
+ /**
+ * Verify the signature of a string.
+ *
+ * @param string data
+ * @param string consumer_secret
+ * @param string token_secret
+ * @param string signature_method
+ * @param string signature
+ * @exception OAuthException thrown when the signature method is unknown
+ * @exception OAuthException when signature does not match
+ */
+ public function verifyDataSignature ( $data, $consumer_secret, $token_secret, $signature_method, $signature )
+ {
+ if (is_null($data))
+ {
+ $data = '';
+ }
+
+ $sig = $this->getSignatureMethod($signature_method);
+ if (!$sig->verify($this, $data, $consumer_secret, $token_secret, $signature))
+ {
+ throw new OAuthException('Signature verification failed ('.$signature_method.')');
+ }
+ }
+
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/OAuthRequester.php b/mod/oauth_api/vendors/oauth/library/OAuthRequester.php
new file mode 100644
index 000000000..87f9586c0
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/OAuthRequester.php
@@ -0,0 +1,508 @@
+<?php
+
+/**
+ * Perform a signed OAuth request with a GET, POST, PUT or DELETE operation.
+ *
+ * @version $Id: OAuthRequester.php 63 2009-02-25 10:24:33Z marcw@pobox.com $
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Nov 20, 2007 1:41:38 PM
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once dirname(__FILE__) . '/OAuthRequestSigner.php';
+require_once dirname(__FILE__) . '/body/OAuthBodyContentDisposition.php';
+
+
+class OAuthRequester extends OAuthRequestSigner
+{
+ protected $files;
+
+ /**
+ * Construct a new request signer. Perform the request with the doRequest() method below.
+ *
+ * A request can have either one file or a body, not both.
+ *
+ * The files array consists of arrays:
+ * - file the filename/path containing the data for the POST/PUT
+ * - data data for the file, omit when you have a file
+ * - mime content-type of the file
+ * - filename filename for content disposition header
+ *
+ * When OAuth (and PHP) can support multipart/form-data then we can handle more than one file.
+ * For now max one file, with all the params encoded in the query string.
+ *
+ * @param string request
+ * @param string method http method. GET, PUT, POST etc.
+ * @param array params name=>value array with request parameters
+ * @param string body optional body to send
+ * @param array files optional files to send (max 1 till OAuth support multipart/form-data posts)
+ */
+ function __construct ( $request, $method = 'GET', $params = null, $body = null, $files = null )
+ {
+ parent::__construct($request, $method, $params, $body);
+
+ // When there are files, then we can construct a POST with a single file
+ if (!empty($files))
+ {
+ $empty = true;
+ foreach ($files as $f)
+ {
+ $empty = $empty && empty($f['file']) && !isset($f['data']);
+ }
+
+ if (!$empty)
+ {
+ if (!is_null($body))
+ {
+ throw new OAuthException('When sending files, you can\'t send a body as well.');
+ }
+ $this->files = $files;
+ }
+ }
+ }
+
+
+ /**
+ * Perform the request, returns the response code, headers and body.
+ *
+ * @param int usr_id optional user id for which we make the request
+ * @param array curl_options optional extra options for curl request
+ * @param array options options like name and token_ttl
+ * @exception OAuthException when authentication not accepted
+ * @exception OAuthException when signing was not possible
+ * @return array (code=>int, headers=>array(), body=>string)
+ */
+ function doRequest ( $usr_id = 0, $curl_options = array(), $options = array() )
+ {
+ $name = isset($options['name']) ? $options['name'] : '';
+ if (isset($options['token_ttl']))
+ {
+ $this->setParam('xoauth_token_ttl', intval($options['token_ttl']));
+ }
+
+ if (!empty($this->files))
+ {
+ // At the moment OAuth does not support multipart/form-data, so try to encode
+ // the supplied file (or data) as the request body and add a content-disposition header.
+ list($extra_headers, $body) = OAuthBodyContentDisposition::encodeBody($this->files);
+ $this->setBody($body);
+ $curl_options = $this->prepareCurlOptions($curl_options, $extra_headers);
+ }
+ $this->sign($usr_id, null, $name);
+ $text = $this->curl_raw($curl_options);
+ $result = $this->curl_parse($text);
+ if ($result['code'] >= 400)
+ {
+ throw new OAuthException('Request failed with code ' . $result['code'] . ': ' . $result['body']);
+ }
+
+ // Record the token time to live for this server access token, immediate delete iff ttl <= 0
+ // Only done on a succesful request.
+ $token_ttl = $this->getParam('xoauth_token_ttl', false);
+ if (is_numeric($token_ttl))
+ {
+ $this->store->setServerTokenTtl($this->getParam('oauth_consumer_key',true), $this->getParam('oauth_token',true), $token_ttl);
+ }
+
+ return $result;
+ }
+
+
+ /**
+ * Request a request token from the site belonging to consumer_key
+ *
+ * @param string consumer_key
+ * @param int usr_id
+ * @param array params (optional) extra arguments for when requesting the request token
+ * @param string method (optional) change the method of the request, defaults to POST (as it should be)
+ * @param array options (optional) options like name and token_ttl
+ * @exception OAuthException when no key could be fetched
+ * @exception OAuthException when no server with consumer_key registered
+ * @return array (authorize_uri, token)
+ */
+ static function requestRequestToken ( $consumer_key, $usr_id, $params = null, $method = 'POST', $options = array() )
+ {
+ OAuthRequestLogger::start();
+
+ if (isset($options['token_ttl']) && is_numeric($options['token_ttl']))
+ {
+ $params['xoauth_token_ttl'] = intval($options['token_ttl']);
+ }
+
+ $store = OAuthStore::instance();
+ $r = $store->getServer($consumer_key, $usr_id);
+ $uri = $r['request_token_uri'];
+
+ $oauth = new OAuthRequester($uri, $method, $params);
+ $oauth->sign($usr_id, $r);
+ $text = $oauth->curl_raw();
+
+ if (empty($text))
+ {
+ throw new OAuthException('No answer from the server "'.$uri.'" while requesting a request token');
+ }
+ $data = $oauth->curl_parse($text);
+ if ($data['code'] != 200)
+ {
+ throw new OAuthException('Unexpected result from the server "'.$uri.'" ('.$data['code'].') while requesting a request token');
+ }
+ $token = array();
+ $params = explode('&', $data['body']);
+ foreach ($params as $p)
+ {
+ @list($name, $value) = explode('=', $p, 2);
+ $token[$name] = $oauth->urldecode($value);
+ }
+
+ if (!empty($token['oauth_token']) && !empty($token['oauth_token_secret']))
+ {
+ $opts = array();
+ if (isset($options['name']))
+ {
+ $opts['name'] = $options['name'];
+ }
+ if (isset($token['xoauth_token_ttl']))
+ {
+ $opts['token_ttl'] = $token['xoauth_token_ttl'];
+ }
+ $store->addServerToken($consumer_key, 'request', $token['oauth_token'], $token['oauth_token_secret'], $usr_id, $opts);
+ }
+ else
+ {
+ throw new OAuthException('The server "'.$uri.'" did not return the oauth_token or the oauth_token_secret');
+ }
+
+ OAuthRequestLogger::flush();
+
+ // Now we can direct a browser to the authorize_uri
+ return array(
+ 'authorize_uri' => $r['authorize_uri'],
+ 'token' => $token['oauth_token']
+ );
+ }
+
+
+ /**
+ * Request an access token from the site belonging to consumer_key.
+ * Before this we got an request token, now we want to exchange it for
+ * an access token.
+ *
+ * @param string consumer_key
+ * @param string token
+ * @param int usr_id user requesting the access token
+ * @param string method (optional) change the method of the request, defaults to POST (as it should be)
+ * @param array options (optional) extra options for request, eg token_ttl
+ * @exception OAuthException when no key could be fetched
+ * @exception OAuthException when no server with consumer_key registered
+ */
+ static function requestAccessToken ( $consumer_key, $token, $usr_id, $method = 'POST', $options = array() )
+ {
+ OAuthRequestLogger::start();
+
+ $store = OAuthStore::instance();
+ $r = $store->getServerTokenSecrets($consumer_key, $token, 'request', $usr_id);
+ $uri = $r['access_token_uri'];
+ $token_name = $r['token_name'];
+
+ // Delete the server request token, this one was for one use only
+ $store->deleteServerToken($consumer_key, $r['token'], 0, true);
+
+ // Try to exchange our request token for an access token
+ $oauth = new OAuthRequester($uri, $method);
+
+ if (isset($options['token_ttl']) && is_numeric($options['token_ttl']))
+ {
+ $oauth->setParam('xoauth_token_ttl', intval($options['token_ttl']));
+ }
+
+ OAuthRequestLogger::setRequestObject($oauth);
+
+ $oauth->sign($usr_id, $r);
+ $text = $oauth->curl_raw();
+ if (empty($text))
+ {
+ throw new OAuthException('No answer from the server "'.$uri.'" while requesting a request token');
+ }
+ $data = $oauth->curl_parse($text);
+
+ if ($data['code'] != 200)
+ {
+ throw new OAuthException('Unexpected result from the server "'.$uri.'" ('.$data['code'].') while requesting a request token');
+ }
+
+ $token = array();
+ $params = explode('&', $data['body']);
+ foreach ($params as $p)
+ {
+ @list($name, $value) = explode('=', $p, 2);
+ $token[$oauth->urldecode($name)] = $oauth->urldecode($value);
+ }
+
+ if (!empty($token['oauth_token']) && !empty($token['oauth_token_secret']))
+ {
+ $opts = array();
+ $opts['name'] = $token_name;
+ if (isset($token['xoauth_token_ttl']))
+ {
+ $opts['token_ttl'] = $token['xoauth_token_ttl'];
+ }
+ $store->addServerToken($consumer_key, 'access', $token['oauth_token'], $token['oauth_token_secret'], $usr_id, $opts);
+ }
+ else
+ {
+ throw new OAuthException('The server "'.$uri.'" did not return the oauth_token or the oauth_token_secret');
+ }
+
+ OAuthRequestLogger::flush();
+ }
+
+
+
+ /**
+ * Open and close a curl session passing all the options to the curl libs
+ *
+ * @param string url the http address to fetch
+ * @exception OAuthException when temporary file for PUT operation could not be created
+ * @return string the result of the curl action
+ */
+ protected function curl_raw ( $opts = array() )
+ {
+ if (isset($opts[CURLOPT_HTTPHEADER]))
+ {
+ $header = $opts[CURLOPT_HTTPHEADER];
+ }
+ else
+ {
+ $header = array();
+ }
+
+ $ch = curl_init();
+ $method = $this->getMethod();
+ $url = $this->getRequestUrl();
+ $header[] = $this->getAuthorizationHeader();
+ $query = $this->getQueryString();
+ $body = $this->getBody();
+
+ $has_content_type = false;
+ foreach ($header as $h)
+ {
+ if (strncasecmp($h, 'Content-Type:', 13) == 0)
+ {
+ $has_content_type = true;
+ }
+ }
+
+ if (!is_null($body))
+ {
+ if ($method == 'TRACE')
+ {
+ throw new OAuthException('A body can not be sent with a TRACE operation');
+ }
+
+ // PUT and POST allow a request body
+ if (!empty($query))
+ {
+ $url .= '?'.$query;
+ }
+
+ // Make sure that the content type of the request is ok
+ if (!$has_content_type)
+ {
+ $header[] = 'Content-Type: application/octet-stream';
+ $has_content_type = true;
+ }
+
+ // When PUTting, we need to use an intermediate file (because of the curl implementation)
+ if ($method == 'PUT')
+ {
+ /*
+ if (version_compare(phpversion(), '5.2.0') >= 0)
+ {
+ // Use the data wrapper to create the file expected by the put method
+ $put_file = fopen('data://application/octet-stream;base64,'.base64_encode($body));
+ }
+ */
+
+ $put_file = @tmpfile();
+ if (!$put_file)
+ {
+ throw new OAuthException('Could not create tmpfile for PUT operation');
+ }
+ fwrite($put_file, $body);
+ fseek($put_file, 0);
+
+ curl_setopt($ch, CURLOPT_PUT, true);
+ curl_setopt($ch, CURLOPT_INFILE, $put_file);
+ curl_setopt($ch, CURLOPT_INFILESIZE, strlen($body));
+ }
+ else
+ {
+ curl_setopt($ch, CURLOPT_POST, true);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
+ }
+ }
+ else
+ {
+ // a 'normal' request, no body to be send
+ if ($method == 'POST')
+ {
+ if (!$has_content_type)
+ {
+ $header[] = 'Content-Type: application/x-www-form-urlencoded';
+ $has_content_type = true;
+ }
+
+ curl_setopt($ch, CURLOPT_POST, true);
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
+ }
+ else
+ {
+ if (!empty($query))
+ {
+ $url .= '?'.$query;
+ }
+ if ($method != 'GET')
+ {
+ curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
+ }
+ }
+ }
+
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
+ curl_setopt($ch, CURLOPT_USERAGENT, 'anyMeta/OAuth 1.0 - ($LastChangedRevision: 63 $)');
+ curl_setopt($ch, CURLOPT_URL, $url);
+ curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($ch, CURLOPT_HEADER, true);
+
+ foreach ($opts as $k => $v)
+ {
+ if ($k != CURLOPT_HTTPHEADER)
+ {
+ curl_setopt($ch, $k, $v);
+ }
+ }
+
+ $txt = curl_exec($ch);
+ curl_close($ch);
+
+ if (!empty($put_file))
+ {
+ fclose($put_file);
+ }
+
+ // Tell the logger what we requested and what we received back
+ $data = $method . " $url\n".implode("\n",$header);
+ if (is_string($body))
+ {
+ $data .= "\n\n".$body;
+ }
+ else if ($method == 'POST')
+ {
+ $data .= "\n\n".$query;
+ }
+
+ OAuthRequestLogger::setSent($data, $body);
+ OAuthRequestLogger::setReceived($txt);
+
+ return $txt;
+ }
+
+
+ /**
+ * Parse an http response
+ *
+ * @param string response the http text to parse
+ * @return array (code=>http-code, headers=>http-headers, body=>body)
+ */
+ protected function curl_parse ( $response )
+ {
+ if (empty($response))
+ {
+ return array();
+ }
+
+ @list($headers,$body) = explode("\r\n\r\n",$response,2);
+ $lines = explode("\r\n",$headers);
+
+ if (preg_match('@^HTTP/[0-9]\.[0-9] +100@', $lines[0]))
+ {
+ /* HTTP/1.x 100 Continue
+ * the real data is on the next line
+ */
+ @list($headers,$body) = explode("\r\n\r\n",$body,2);
+ $lines = explode("\r\n",$headers);
+ }
+
+ // first line of headers is the HTTP response code
+ $http_line = array_shift($lines);
+ if (preg_match('@^HTTP/[0-9]\.[0-9] +([0-9]{3})@', $http_line, $matches))
+ {
+ $code = $matches[1];
+ }
+
+ // put the rest of the headers in an array
+ $headers = array();
+ foreach ($lines as $l)
+ {
+ list($k, $v) = explode(': ', $l, 2);
+ $headers[strtolower($k)] = $v;
+ }
+
+ return array( 'code' => $code, 'headers' => $headers, 'body' => $body);
+ }
+
+
+ /**
+ * Mix the given headers into the headers that were given to curl
+ *
+ * @param array curl_options
+ * @param array extra_headers
+ * @return array new curl options
+ */
+ protected function prepareCurlOptions ( $curl_options, $extra_headers )
+ {
+ $hs = array();
+ if (!empty($curl_options[CURLOPT_HTTPHEADER]) && is_array($curl_options[CURLOPT_HTTPHEADER]))
+ {
+ foreach ($curl_options[CURLOPT_HTTPHEADER] as $h)
+ {
+ list($opt, $val) = explode(':', $h, 2);
+ $opt = str_replace(' ', '-', ucwords(str_replace('-', ' ', $opt)));
+ $hs[$opt] = $val;
+ }
+ }
+
+ $curl_options[CURLOPT_HTTPHEADER] = array();
+ $hs = array_merge($hs, $extra_headers);
+ foreach ($hs as $h => $v)
+ {
+ $curl_options[CURLOPT_HTTPHEADER][] = "$h: $v";
+ }
+ return $curl_options;
+ }
+}
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/OAuthServer.php b/mod/oauth_api/vendors/oauth/library/OAuthServer.php
new file mode 100644
index 000000000..c7f9097b3
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/OAuthServer.php
@@ -0,0 +1,232 @@
+<?php
+
+/**
+ * Server layer over the OAuthRequest handler
+ *
+ * @version $Id: OAuthServer.php 51 2008-10-15 15:15:47Z marcw@pobox.com $
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Nov 27, 2007 12:36:38 PM
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once 'OAuthRequestVerifier.php';
+
+class OAuthServer extends OAuthRequestVerifier
+{
+ /**
+ * Handle the request_token request.
+ * Returns the new request token and request token secret.
+ *
+ * TODO: add correct result code to exception
+ *
+ * @return string returned request token, false on an error
+ */
+ public function requestToken ()
+ {
+ OAuthRequestLogger::start($this);
+ try
+ {
+ $this->verify(false);
+
+ $options = array();
+ $ttl = $this->getParam('xoauth_token_ttl', false);
+ if ($ttl)
+ {
+ $options['token_ttl'] = $ttl;
+ }
+
+ // Create a request token
+ $store = OAuthStore::instance();
+ $token = $store->addConsumerRequestToken($this->getParam('oauth_consumer_key', true), $options);
+ $result = 'oauth_token='.$this->urlencode($token['token'])
+ .'&oauth_token_secret='.$this->urlencode($token['token_secret']);
+
+ if (!empty($token['token_ttl']))
+ {
+ $result .= '&xoauth_token_ttl='.$this->urlencode($token['token_ttl']);
+ }
+
+ $request_token = $token['token'];
+
+ header('HTTP/1.1 200 OK');
+ header('Content-Length: '.strlen($result));
+ header('Content-Type: application/x-www-form-urlencoded');
+
+ echo $result;
+ }
+ catch (OAuthException $e)
+ {
+ $request_token = false;
+
+ header('HTTP/1.1 401 Unauthorized');
+ header('Content-Type: text/plain');
+
+ echo "OAuth Verification Failed: " . $e->getMessage();
+ }
+
+ OAuthRequestLogger::flush();
+ return $request_token;
+ }
+
+
+ /**
+ * Verify the start of an authorization request. Verifies if the request token is valid.
+ * Next step is the method authorizeFinish()
+ *
+ * Nota bene: this stores the current token, consumer key and callback in the _SESSION
+ *
+ * @exception OAuthException thrown when not a valid request
+ * @return array token description
+ */
+ public function authorizeVerify ( )
+ {
+ OAuthRequestLogger::start($this);
+
+ $store = OAuthStore::instance();
+ $token = $this->getParam('oauth_token', true);
+ $rs = $store->getConsumerRequestToken($token);
+ if (empty($rs))
+ {
+ throw new OAuthException('Unknown request token "'.$token.'"');
+ }
+
+ // We need to remember the callback
+ if ( empty($_SESSION['verify_oauth_token'])
+ || strcmp($_SESSION['verify_oauth_token'], $rs['token']))
+ {
+ $_SESSION['verify_oauth_token'] = $rs['token'];
+ $_SESSION['verify_oauth_consumer_key'] = $rs['consumer_key'];
+ $_SESSION['verify_oauth_callback'] = $this->getParam('oauth_callback', true);
+ }
+ OAuthRequestLogger::flush();
+ return $rs;
+ }
+
+
+ /**
+ * Overrule this method when you want to display a nice page when
+ * the authorization is finished. This function does not know if the authorization was
+ * succesfull, you need to check the token in the database.
+ *
+ * @param boolean authorized if the current token (oauth_token param) is authorized or not
+ * @param int user_id user for which the token was authorized (or denied)
+ */
+ public function authorizeFinish ( $authorized, $user_id )
+ {
+ OAuthRequestLogger::start($this);
+
+ $token = $this->getParam('oauth_token', true);
+ if ( isset($_SESSION['verify_oauth_token'])
+ && $_SESSION['verify_oauth_token'] == $token)
+ {
+ // Flag the token as authorized, or remove the token when not authorized
+ $store = OAuthStore::instance();
+
+ // Fetch the referrer host from the oauth callback parameter
+ $referrer_host = '';
+ $oauth_callback = false;
+ if (!empty($_SESSION['verify_oauth_callback']))
+ {
+ $oauth_callback = $_SESSION['verify_oauth_callback'];
+ $ps = parse_url($oauth_callback);
+ if (isset($ps['host']))
+ {
+ $referrer_host = $ps['host'];
+ }
+ }
+
+ if ($authorized)
+ {
+ OAuthRequestLogger::addNote('Authorized token "'.$token.'" for user '.$user_id.' with referrer "'.$referrer_host.'"');
+ $store->authorizeConsumerRequestToken($token, $user_id, $referrer_host);
+ }
+ else
+ {
+ OAuthRequestLogger::addNote('Authorization rejected for token "'.$token.'" for user '.$user_id."\nToken has been deleted");
+ $store->deleteConsumerRequestToken($token);
+ }
+
+ if (!empty($oauth_callback))
+ {
+ $this->redirect($oauth_callback, array('oauth_token'=>rawurlencode($token)));
+ }
+ }
+ OAuthRequestLogger::flush();
+ }
+
+
+ /**
+ * Exchange a request token for an access token.
+ * The exchange is only succesful iff the request token has been authorized.
+ *
+ * Never returns, calls exit() when token is exchanged or when error is returned.
+ */
+ public function accessToken ()
+ {
+ OAuthRequestLogger::start($this);
+
+ try
+ {
+ $this->verify('request');
+
+ $options = array();
+ $ttl = $this->getParam('xoauth_token_ttl', false);
+ if ($ttl)
+ {
+ $options['token_ttl'] = $ttl;
+ }
+
+ $store = OAuthStore::instance();
+ $token = $store->exchangeConsumerRequestForAccessToken($this->getParam('oauth_token', true), $options);
+ $result = 'oauth_token='.$this->urlencode($token['token'])
+ .'&oauth_token_secret='.$this->urlencode($token['token_secret']);
+
+ if (!empty($token['token_ttl']))
+ {
+ $result .= '&xoauth_token_ttl='.$this->urlencode($token['token_ttl']);
+ }
+
+ header('HTTP/1.1 200 OK');
+ header('Content-Length: '.strlen($result));
+ header('Content-Type: application/x-www-form-urlencoded');
+
+ echo $result;
+ }
+ catch (OAuthException $e)
+ {
+ header('HTTP/1.1 401 Access Denied');
+ header('Content-Type: text/plain');
+
+ echo "OAuth Verification Failed: " . $e->getMessage();
+ }
+
+ OAuthRequestLogger::flush();
+ exit();
+ }
+}
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/OAuthStore.php b/mod/oauth_api/vendors/oauth/library/OAuthStore.php
new file mode 100644
index 000000000..1841ab5fa
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/OAuthStore.php
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * Storage container for the oauth credentials, both server and consumer side.
+ * This is the factory to select the store you want to use
+ *
+ * @version $Id: OAuthStore.php 49 2008-10-01 09:43:19Z marcw@pobox.com $
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Nov 16, 2007 4:03:30 PM
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once dirname(__FILE__) . '/OAuthException.php';
+
+class OAuthStore
+{
+ static private $instance = false;
+
+ /**
+ * Request an instance of the OAuthStore
+ */
+ public static function instance ( $store = 'MySQL', $options = array() )
+ {
+ if (!OAuthStore::$instance)
+ {
+ // Select the store you want to use
+ if (strpos($store, '/') === false)
+ {
+ $class = 'OAuthStore'.$store;
+ $file = dirname(__FILE__) . '/store/'.$class.'.php';
+ }
+ else
+ {
+ $file = $store;
+ $store = basename($file, '.php');
+ $class = $store;
+ }
+
+ if (is_file($file))
+ {
+ require_once $file;
+
+ if (class_exists($class))
+ {
+ OAuthStore::$instance = new $class($options);
+ }
+ else
+ {
+ throw new OAuthException('Could not find class '.$class.' in file '.$file);
+ }
+ }
+ else
+ {
+ throw new OAuthException('No OAuthStore for '.$store.' (file '.$file.')');
+ }
+ }
+ return OAuthStore::$instance;
+ }
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/body/OAuthBodyContentDisposition.php b/mod/oauth_api/vendors/oauth/library/body/OAuthBodyContentDisposition.php
new file mode 100644
index 000000000..84123b6d0
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/body/OAuthBodyContentDisposition.php
@@ -0,0 +1,129 @@
+<?php
+
+/**
+ * Add the extra headers for a PUT or POST request with a file.
+ *
+ * @version $Id$
+ * @author Marc Worrell <marcw@pobox.com>
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+class OAuthBodyContentDisposition
+{
+ /**
+ * Builds the request string.
+ *
+ * The files array can be a combination of the following (either data or file):
+ *
+ * file => "path/to/file", filename=, mime=, data=
+ *
+ * @param array files (name => filedesc) (not urlencoded)
+ * @return array (headers, body)
+ */
+ static function encodeBody ( $files )
+ {
+ $headers = array();
+ $body = null;
+
+ // 1. Add all the files to the post
+ if (!empty($files))
+ {
+ foreach ($files as $name => $f)
+ {
+ $data = false;
+ $filename = false;
+
+ if (isset($f['filename']))
+ {
+ $filename = $f['filename'];
+ }
+
+ if (!empty($f['file']))
+ {
+ $data = @file_get_contents($f['file']);
+ if ($data === false)
+ {
+ throw new OAuthException(sprintf('Could not read the file "%s" for request body', $f['file']));
+ }
+ if (empty($filename))
+ {
+ $filename = basename($f['file']);
+ }
+ }
+ else if (isset($f['data']))
+ {
+ $data = $f['data'];
+ }
+
+ // When there is data, add it as a request body, otherwise silently skip the upload
+ if ($data !== false)
+ {
+ if (isset($headers['Content-Disposition']))
+ {
+ throw new OAuthException('Only a single file (or data) allowed in a signed PUT/POST request body.');
+ }
+
+ if (empty($filename))
+ {
+ $filename = 'untitled';
+ }
+ $mime = !empty($f['mime']) ? $f['mime'] : 'application/octet-stream';
+
+ $headers['Content-Disposition'] = 'attachment; filename="'.OAuthBodyContentDisposition::encodeParameterName($filename).'"';
+ $headers['Content-Type'] = $mime;
+
+ $body = $data;
+ }
+
+ }
+
+ // When we have a body, add the content-length
+ if (!is_null($body))
+ {
+ $headers['Content-Length'] = strlen($body);
+ }
+ }
+ return array($headers, $body);
+ }
+
+
+ /**
+ * Encode a parameter's name for use in a multipart header.
+ * For now we do a simple filter that removes some unwanted characters.
+ * We might want to implement RFC1522 here. See http://tools.ietf.org/html/rfc1522
+ *
+ * @param string name
+ * @return string
+ */
+ static function encodeParameterName ( $name )
+ {
+ return preg_replace('/[^\x20-\x7f]|"/', '-', $name);
+ }
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/body/OAuthBodyMultipartFormdata.php b/mod/oauth_api/vendors/oauth/library/body/OAuthBodyMultipartFormdata.php
new file mode 100644
index 000000000..048fdeb63
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/body/OAuthBodyMultipartFormdata.php
@@ -0,0 +1,143 @@
+<?php
+
+/**
+ * Create the body for a multipart/form-data message.
+ *
+ * @version $Id: OAuthMultipartFormdata.php 6 2008-02-13 12:35:09Z marcw@pobox.com $
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Jan 31, 2008 12:50:05 PM
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+
+class OAuthBodyMultipartFormdata
+{
+ /**
+ * Builds the request string.
+ *
+ * The files array can be a combination of the following (either data or file):
+ *
+ * file => "path/to/file", filename=, mime=, data=
+ *
+ * @param array params (name => value) (all names and values should be urlencoded)
+ * @param array files (name => filedesc) (not urlencoded)
+ * @return array (headers, body)
+ */
+ static function encodeBody ( $params, $files )
+ {
+ $headers = array();
+ $body = '';
+ $boundary = 'OAuthRequester_'.md5(uniqid('multipart') . microtime());
+ $headers['Content-Type'] = 'multipart/form-data; boundary=' . $boundary;
+
+
+ // 1. Add the parameters to the post
+ if (!empty($params))
+ {
+ foreach ($params as $name => $value)
+ {
+ $body .= '--'.$boundary."\r\n";
+ $body .= 'Content-Disposition: form-data; name="'.OAuthBodyMultipartFormdata::encodeParameterName(rawurldecode($name)).'"';
+ $body .= "\r\n\r\n";
+ $body .= urldecode($value);
+ $body .= "\r\n";
+ }
+ }
+
+ // 2. Add all the files to the post
+ if (!empty($files))
+ {
+ $untitled = 1;
+
+ foreach ($files as $name => $f)
+ {
+ $data = false;
+ $filename = false;
+
+ if (isset($f['filename']))
+ {
+ $filename = $f['filename'];
+ }
+
+ if (!empty($f['file']))
+ {
+ $data = @file_get_contents($f['file']);
+ if ($data === false)
+ {
+ throw new OAuthException(sprintf('Could not read the file "%s" for form-data part', $f['file']));
+ }
+ if (empty($filename))
+ {
+ $filename = basename($f['file']);
+ }
+ }
+ else if (isset($f['data']))
+ {
+ $data = $f['data'];
+ }
+
+ // When there is data, add it as a form-data part, otherwise silently skip the upload
+ if ($data !== false)
+ {
+ if (empty($filename))
+ {
+ $filename = sprintf('untitled-%d', $untitled++);
+ }
+ $mime = !empty($f['mime']) ? $f['mime'] : 'application/octet-stream';
+ $body .= '--'.$boundary."\r\n";
+ $body .= 'Content-Disposition: form-data; name="'.OAuthBodyMultipartFormdata::encodeParameterName($name).'"; filename="'.OAuthBodyMultipartFormdata::encodeParameterName($filename).'"'."\r\n";
+ $body .= 'Content-Type: '.$mime;
+ $body .= "\r\n\r\n";
+ $body .= $data;
+ $body .= "\r\n";
+ }
+
+ }
+ }
+ $body .= '--'.$boundary."--\r\n";
+
+ $headers['Content-Length'] = strlen($body);
+ return array($headers, $body);
+ }
+
+
+ /**
+ * Encode a parameter's name for use in a multipart header.
+ * For now we do a simple filter that removes some unwanted characters.
+ * We might want to implement RFC1522 here. See http://tools.ietf.org/html/rfc1522
+ *
+ * @param string name
+ * @return string
+ */
+ static function encodeParameterName ( $name )
+ {
+ return preg_replace('/[^\x20-\x7f]|"/', '-', $name);
+ }
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/discovery/xrds_parse.php b/mod/oauth_api/vendors/oauth/library/discovery/xrds_parse.php
new file mode 100644
index 000000000..c9cf94997
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/discovery/xrds_parse.php
@@ -0,0 +1,304 @@
+<?php
+
+/**
+ * Parse a XRDS discovery description to a simple array format.
+ *
+ * For now a simple parse of the document. Better error checking
+ * in a later version.
+ *
+ * @version $Id$
+ * @author Marc Worrell <marcw@pobox.com>
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/* example of use:
+
+header('content-type: text/plain');
+$file = file_get_contents('../../test/discovery/xrds-magnolia.xrds');
+$xrds = xrds_parse($file);
+print_r($xrds);
+
+ */
+
+/**
+ * Parse the xrds file in the argument. The xrds description must have been
+ * fetched via curl or something else.
+ *
+ * TODO: more robust checking, support for more service documents
+ * TODO: support for URIs to definition instead of local xml:id
+ *
+ * @param string data contents of xrds file
+ * @exception Exception when the file is in an unknown format
+ * @return array
+ */
+function xrds_parse ( $data )
+{
+ $oauth = array();
+ $doc = @DOMDocument::loadXML($data);
+ if ($doc === false)
+ {
+ throw new Exception('Error in XML, can\'t load XRDS document');
+ }
+
+ $xpath = new DOMXPath($doc);
+ $xpath->registerNamespace('xrds', 'xri://$xrds');
+ $xpath->registerNamespace('xrd', 'xri://$XRD*($v*2.0)');
+ $xpath->registerNamespace('simple', 'http://xrds-simple.net/core/1.0');
+
+ // Yahoo! uses this namespace, with lowercase xrd in it
+ $xpath->registerNamespace('xrd2', 'xri://$xrd*($v*2.0)');
+
+ $uris = xrds_oauth_service_uris($xpath);
+
+ foreach ($uris as $uri)
+ {
+ // TODO: support uris referring to service documents outside this one
+ if ($uri{0} == '#')
+ {
+ $id = substr($uri, 1);
+ $oauth = xrds_xrd_oauth($xpath, $id);
+ if (is_array($oauth) && !empty($oauth))
+ {
+ return $oauth;
+ }
+ }
+ }
+
+ return false;
+}
+
+
+/**
+ * Parse a XRD definition for OAuth and return the uris etc.
+ *
+ * @param XPath xpath
+ * @param string id
+ * @return array
+ */
+function xrds_xrd_oauth ( $xpath, $id )
+{
+ $oauth = array();
+ $xrd = $xpath->query('//xrds:XRDS/xrd:XRD[@xml:id="'.$id.'"]');
+ if ($xrd->length == 0)
+ {
+ // Yahoo! uses another namespace
+ $xrd = $xpath->query('//xrds:XRDS/xrd2:XRD[@xml:id="'.$id.'"]');
+ }
+
+ if ($xrd->length >= 1)
+ {
+ $x = $xrd->item(0);
+ $services = array();
+ foreach ($x->childNodes as $n)
+ {
+ switch ($n->nodeName)
+ {
+ case 'Type':
+ if ($n->nodeValue != 'xri://$xrds*simple')
+ {
+ // Not a simple XRDS document
+ return false;
+ }
+ break;
+ case 'Expires':
+ $oauth['expires'] = $n->nodeValue;
+ break;
+ case 'Service':
+ list($type,$service) = xrds_xrd_oauth_service($n);
+ if ($type)
+ {
+ $services[$type][xrds_priority($n)][] = $service;
+ }
+ break;
+ }
+ }
+
+ // Flatten the services on priority
+ foreach ($services as $type => $service)
+ {
+ $oauth[$type] = xrds_priority_flatten($service);
+ }
+ }
+ else
+ {
+ $oauth = false;
+ }
+ return $oauth;
+}
+
+
+/**
+ * Parse a service definition for OAuth in a simple xrd element
+ *
+ * @param DOMElement n
+ * @return array (type, service desc)
+ */
+function xrds_xrd_oauth_service ( $n )
+{
+ $service = array(
+ 'uri' => '',
+ 'signature_method' => array(),
+ 'parameters' => array()
+ );
+
+ $type = false;
+ foreach ($n->childNodes as $c)
+ {
+ $name = $c->nodeName;
+ $value = $c->nodeValue;
+
+ if ($name == 'URI')
+ {
+ $service['uri'] = $value;
+ }
+ else if ($name == 'Type')
+ {
+ if (strncmp($value, 'http://oauth.net/core/1.0/endpoint/', 35) == 0)
+ {
+ $type = basename($value);
+ }
+ else if (strncmp($value, 'http://oauth.net/core/1.0/signature/', 36) == 0)
+ {
+ $service['signature_method'][] = basename($value);
+ }
+ else if (strncmp($value, 'http://oauth.net/core/1.0/parameters/', 37) == 0)
+ {
+ $service['parameters'][] = basename($value);
+ }
+ else if (strncmp($value, 'http://oauth.net/discovery/1.0/consumer-identity/', 49) == 0)
+ {
+ $type = 'consumer_identity';
+ $service['method'] = basename($value);
+ unset($service['signature_method']);
+ unset($service['parameters']);
+ }
+ else
+ {
+ $service['unknown'][] = $value;
+ }
+ }
+ else if ($name == 'LocalID')
+ {
+ $service['consumer_key'] = $value;
+ }
+ else if ($name{0} != '#')
+ {
+ $service[strtolower($name)] = $value;
+ }
+ }
+ return array($type, $service);
+}
+
+
+/**
+ * Return the OAuth service uris in order of the priority.
+ *
+ * @param XPath xpath
+ * @return array
+ */
+function xrds_oauth_service_uris ( $xpath )
+{
+ $uris = array();
+ $xrd_oauth = $xpath->query('//xrds:XRDS/xrd:XRD/xrd:Service/xrd:Type[.=\'http://oauth.net/discovery/1.0\']');
+ if ($xrd_oauth->length > 0)
+ {
+ $service = array();
+ foreach ($xrd_oauth as $xo)
+ {
+ // Find the URI of the service definition
+ $cs = $xo->parentNode->childNodes;
+ foreach ($cs as $c)
+ {
+ if ($c->nodeName == 'URI')
+ {
+ $prio = xrds_priority($xo);
+ $service[$prio][] = $c->nodeValue;
+ }
+ }
+ }
+ $uris = xrds_priority_flatten($service);
+ }
+ return $uris;
+}
+
+
+
+/**
+ * Flatten an array according to the priority
+ *
+ * @param array ps buckets per prio
+ * @return array one dimensional array
+ */
+function xrds_priority_flatten ( $ps )
+{
+ $prio = array();
+ $null = array();
+ ksort($ps);
+ foreach ($ps as $idx => $bucket)
+ {
+ if (!empty($bucket))
+ {
+ if ($idx == 'null')
+ {
+ $null = $bucket;
+ }
+ else
+ {
+ $prio = array_merge($prio, $bucket);
+ }
+ }
+ }
+ $prio = array_merge($prio, $bucket);
+ return $prio;
+}
+
+
+/**
+ * Fetch the priority of a element
+ *
+ * @param DOMElement elt
+ * @return mixed 'null' or int
+ */
+function xrds_priority ( $elt )
+{
+ if ($elt->hasAttribute('priority'))
+ {
+ $prio = $elt->getAttribute('priority');
+ if (is_numeric($prio))
+ {
+ $prio = intval($prio);
+ }
+ }
+ else
+ {
+ $prio = 'null';
+ }
+ return $prio;
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/discovery/xrds_parse.txt b/mod/oauth_api/vendors/oauth/library/discovery/xrds_parse.txt
new file mode 100644
index 000000000..fd867ea9f
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/discovery/xrds_parse.txt
@@ -0,0 +1,101 @@
+The xrds_parse.php script contains the function:
+
+ function xrds_parse ( $data. )
+
+$data Contains the contents of a XRDS XML file.
+When the data is invalid XML then this will throw an exception.
+
+After parsing a XRDS definition it will return a datastructure much like the one below.
+
+Array
+(
+ [expires] => 2008-04-13T07:34:58Z
+ [request] => Array
+ (
+ [0] => Array
+ (
+ [uri] => https://ma.gnolia.com/oauth/get_request_token
+ [signature_method] => Array
+ (
+ [0] => HMAC-SHA1
+ [1] => RSA-SHA1
+ [2] => PLAINTEXT
+ )
+
+ [parameters] => Array
+ (
+ [0] => auth-header
+ [1] => post-body
+ [2] => uri-query
+ )
+ )
+ )
+
+ [authorize] => Array
+ (
+ [0] => Array
+ (
+ [uri] => http://ma.gnolia.com/oauth/authorize
+ [signature_method] => Array
+ (
+ )
+
+ [parameters] => Array
+ (
+ [0] => auth-header
+ [1] => uri-query
+ )
+ )
+ )
+
+ [access] => Array
+ (
+ [0] => Array
+ (
+ [uri] => https://ma.gnolia.com/oauth/get_access_token
+ [signature_method] => Array
+ (
+ [0] => HMAC-SHA1
+ [1] => RSA-SHA1
+ [2] => PLAINTEXT
+ )
+
+ [parameters] => Array
+ (
+ [0] => auth-header
+ [1] => post-body
+ [2] => uri-query
+ )
+ )
+ )
+
+ [resource] => Array
+ (
+ [0] => Array
+ (
+ [uri] =>
+ [signature_method] => Array
+ (
+ [0] => HMAC-SHA1
+ [1] => RSA-SHA1
+ )
+
+ [parameters] => Array
+ (
+ [0] => auth-header
+ [1] => post-body
+ [2] => uri-query
+ )
+ )
+ )
+
+ [consumer_identity] => Array
+ (
+ [0] => Array
+ (
+ [uri] => http://ma.gnolia.com/applications/new
+ [method] => oob
+ )
+ )
+)
+
diff --git a/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod.class.php b/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod.class.php
new file mode 100644
index 000000000..34ccb428c
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod.class.php
@@ -0,0 +1,69 @@
+<?php
+
+/**
+ * Interface for OAuth signature methods
+ *
+ * @version $Id$
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Sep 8, 2008 12:04:35 PM
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+abstract class OAuthSignatureMethod
+{
+ /**
+ * Return the name of this signature
+ *
+ * @return string
+ */
+ abstract public function name();
+
+ /**
+ * Return the signature for the given request
+ *
+ * @param OAuthRequest request
+ * @param string base_string
+ * @param string consumer_secret
+ * @param string token_secret
+ * @return string
+ */
+ abstract public function signature ( $request, $base_string, $consumer_secret, $token_secret );
+
+ /**
+ * Check if the request signature corresponds to the one calculated for the request.
+ *
+ * @param OAuthRequest request
+ * @param string base_string data to be signed, usually the base string, can be a request body
+ * @param string consumer_secret
+ * @param string token_secret
+ * @param string signature from the request, still urlencoded
+ * @return string
+ */
+ abstract public function verify ( $request, $base_string, $consumer_secret, $token_secret, $signature );
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_HMAC_SHA1.php b/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_HMAC_SHA1.php
new file mode 100644
index 000000000..4bc949c10
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_HMAC_SHA1.php
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * OAuth signature implementation using HMAC-SHA1
+ *
+ * @version $Id$
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Sep 8, 2008 12:21:19 PM
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+
+require_once dirname(__FILE__).'/OAuthSignatureMethod.class.php';
+
+
+class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod
+{
+ public function name ()
+ {
+ return 'HMAC-SHA1';
+ }
+
+
+ /**
+ * Calculate the signature using HMAC-SHA1
+ * This function is copyright Andy Smith, 2007.
+ *
+ * @param OAuthRequest request
+ * @param string base_string
+ * @param string consumer_secret
+ * @param string token_secret
+ * @return string
+ */
+ function signature ( $request, $base_string, $consumer_secret, $token_secret )
+ {
+ $key = $request->urlencode($consumer_secret).'&'.$request->urlencode($token_secret);
+ if (function_exists('hash_hmac'))
+ {
+ $signature = base64_encode(hash_hmac("sha1", $base_string, $key, true));
+ }
+ else
+ {
+ $blocksize = 64;
+ $hashfunc = 'sha1';
+ if (strlen($key) > $blocksize)
+ {
+ $key = pack('H*', $hashfunc($key));
+ }
+ $key = str_pad($key,$blocksize,chr(0x00));
+ $ipad = str_repeat(chr(0x36),$blocksize);
+ $opad = str_repeat(chr(0x5c),$blocksize);
+ $hmac = pack(
+ 'H*',$hashfunc(
+ ($key^$opad).pack(
+ 'H*',$hashfunc(
+ ($key^$ipad).$base_string
+ )
+ )
+ )
+ );
+ $signature = base64_encode($hmac);
+ }
+ return $request->urlencode($signature);
+ }
+
+
+ /**
+ * Check if the request signature corresponds to the one calculated for the request.
+ *
+ * @param OAuthRequest request
+ * @param string base_string data to be signed, usually the base string, can be a request body
+ * @param string consumer_secret
+ * @param string token_secret
+ * @param string signature from the request, still urlencoded
+ * @return string
+ */
+ public function verify ( $request, $base_string, $consumer_secret, $token_secret, $signature )
+ {
+ $a = $request->urldecode($signature);
+ $b = $request->urldecode($this->signature($request, $base_string, $consumer_secret, $token_secret));
+
+ // We have to compare the decoded values
+ $valA = base64_decode($a);
+ $valB = base64_decode($b);
+
+ // Crude binary comparison
+ return rawurlencode($a) == rawurlencode($b);
+ }
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_MD5.php b/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_MD5.php
new file mode 100644
index 000000000..6f593a47f
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_MD5.php
@@ -0,0 +1,95 @@
+<?php
+
+/**
+ * OAuth signature implementation using MD5
+ *
+ * @version $Id$
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Sep 8, 2008 12:09:43 PM
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once dirname(__FILE__).'/OAuthSignatureMethod.class.php';
+
+
+class OAuthSignatureMethod_MD5 extends OAuthSignatureMethod
+{
+ public function name ()
+ {
+ return 'MD5';
+ }
+
+
+ /**
+ * Calculate the signature using MD5
+ * Binary md5 digest, as distinct from PHP's built-in hexdigest.
+ * This function is copyright Andy Smith, 2007.
+ *
+ * @param OAuthRequest request
+ * @param string base_string
+ * @param string consumer_secret
+ * @param string token_secret
+ * @return string
+ */
+ function signature ( $request, $base_string, $consumer_secret, $token_secret )
+ {
+ $s .= '&'.$request->urlencode($consumer_secret).'&'.$request->urlencode($token_secret);
+ $md5 = md5($base_string);
+ $bin = '';
+
+ for ($i = 0; $i < strlen($md5); $i += 2)
+ {
+ $bin .= chr(hexdec($md5{$i+1}) + hexdec($md5{$i}) * 16);
+ }
+ return $request->urlencode(base64_encode($bin));
+ }
+
+
+ /**
+ * Check if the request signature corresponds to the one calculated for the request.
+ *
+ * @param OAuthRequest request
+ * @param string base_string data to be signed, usually the base string, can be a request body
+ * @param string consumer_secret
+ * @param string token_secret
+ * @param string signature from the request, still urlencoded
+ * @return string
+ */
+ public function verify ( $request, $base_string, $consumer_secret, $token_secret, $signature )
+ {
+ $a = $request->urldecode($signature);
+ $b = $request->urldecode($this->signature($request, $base_string, $consumer_secret, $token_secret));
+
+ // We have to compare the decoded values
+ $valA = base64_decode($a);
+ $valB = base64_decode($b);
+
+ // Crude binary comparison
+ return rawurlencode($a) == rawurlencode($b);
+ }
+}
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_PLAINTEXT.php b/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_PLAINTEXT.php
new file mode 100644
index 000000000..92ef30867
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_PLAINTEXT.php
@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * OAuth signature implementation using PLAINTEXT
+ *
+ * @version $Id$
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Sep 8, 2008 12:09:43 PM
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once dirname(__FILE__).'/OAuthSignatureMethod.class.php';
+
+
+class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod
+{
+ public function name ()
+ {
+ return 'PLAINTEXT';
+ }
+
+
+ /**
+ * Calculate the signature using PLAINTEXT
+ *
+ * @param OAuthRequest request
+ * @param string base_string
+ * @param string consumer_secret
+ * @param string token_secret
+ * @return string
+ */
+ function signature ( $request, $base_string, $consumer_secret, $token_secret )
+ {
+ return $request->urlencode($request->urlencode($consumer_secret).'&'.$request->urlencode($token_secret));
+ }
+
+
+ /**
+ * Check if the request signature corresponds to the one calculated for the request.
+ *
+ * @param OAuthRequest request
+ * @param string base_string data to be signed, usually the base string, can be a request body
+ * @param string consumer_secret
+ * @param string token_secret
+ * @param string signature from the request, still urlencoded
+ * @return string
+ */
+ public function verify ( $request, $base_string, $consumer_secret, $token_secret, $signature )
+ {
+ $a = $request->urldecode($signature);
+ $b = $request->urldecode($this->signature($request, $base_string, $consumer_secret, $token_secret));
+
+ return $request->urldecode($a) == $request->urldecode($b);
+ }
+}
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_RSA_SHA1.php b/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_RSA_SHA1.php
new file mode 100644
index 000000000..3bbde7d90
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/signature_method/OAuthSignatureMethod_RSA_SHA1.php
@@ -0,0 +1,136 @@
+<?php
+
+/**
+ * OAuth signature implementation using PLAINTEXT
+ *
+ * @version $Id$
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Sep 8, 2008 12:00:14 PM
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod
+{
+ public function name()
+ {
+ return 'RSA-SHA1';
+ }
+
+
+ /**
+ * Fetch the public CERT key for the signature
+ *
+ * @param OAuthRequest request
+ * @return string public key
+ */
+ protected function fetch_public_cert ( $request )
+ {
+ // not implemented yet, ideas are:
+ // (1) do a lookup in a table of trusted certs keyed off of consumer
+ // (2) fetch via http using a url provided by the requester
+ // (3) some sort of specific discovery code based on request
+ //
+ // either way should return a string representation of the certificate
+ throw OAuthException("OAuthSignatureMethod_RSA_SHA1::fetch_public_cert not implemented");
+ }
+
+
+ /**
+ * Fetch the private CERT key for the signature
+ *
+ * @param OAuthRequest request
+ * @return string private key
+ */
+ protected function fetch_private_cert ( $request )
+ {
+ // not implemented yet, ideas are:
+ // (1) do a lookup in a table of trusted certs keyed off of consumer
+ //
+ // either way should return a string representation of the certificate
+ throw OAuthException("OAuthSignatureMethod_RSA_SHA1::fetch_private_cert not implemented");
+ }
+
+
+ /**
+ * Calculate the signature using RSA-SHA1
+ * This function is copyright Andy Smith, 2008.
+ *
+ * @param OAuthRequest request
+ * @param string base_string
+ * @param string consumer_secret
+ * @param string token_secret
+ * @return string
+ */
+ public function signature ( $request, $base_string, $consumer_secret, $token_secret )
+ {
+ // Fetch the private key cert based on the request
+ $cert = $this->fetch_private_cert($request);
+
+ // Pull the private key ID from the certificate
+ $privatekeyid = openssl_get_privatekey($cert);
+
+ // Sign using the key
+ $sig = false;
+ $ok = openssl_sign($base_string, $sig, $privatekeyid);
+
+ // Release the key resource
+ openssl_free_key($privatekeyid);
+
+ return $request->urlencode(base64_encode($sig));
+ }
+
+
+ /**
+ * Check if the request signature is the same as the one calculated for the request.
+ *
+ * @param OAuthRequest request
+ * @param string base_string
+ * @param string consumer_secret
+ * @param string token_secret
+ * @param string signature
+ * @return string
+ */
+ public function verify ( $request, $base_string, $consumer_secret, $token_secret, $signature )
+ {
+ $decoded_sig = base64_decode($request->urldecode($signature));
+
+ // Fetch the public key cert based on the request
+ $cert = $this->fetch_public_cert($request);
+
+ // Pull the public key ID from the certificate
+ $publickeyid = openssl_get_publickey($cert);
+
+ // Check the computed signature against the one passed in the query
+ $ok = openssl_verify($base_string, $decoded_sig, $publickeyid);
+
+ // Release the key resource
+ openssl_free_key($publickeyid);
+ return $ok == 1;
+ }
+
+}
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/store/OAuthStoreAbstract.class.php b/mod/oauth_api/vendors/oauth/library/store/OAuthStoreAbstract.class.php
new file mode 100644
index 000000000..e7cca981a
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/store/OAuthStoreAbstract.class.php
@@ -0,0 +1,149 @@
+<?php
+
+/**
+ * Abstract base class for OAuthStore implementations
+ *
+ * @version $Id$
+ * @author Marc Worrell <marcw@pobox.com>
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+abstract class OAuthStoreAbstract
+{
+ abstract public function getSecretsForVerify ( $consumer_key, $token, $token_type = 'access' );
+ abstract public function getSecretsForSignature ( $uri, $user_id );
+ abstract public function getServerTokenSecrets ( $consumer_key, $token, $token_type, $user_id, $name = '' );
+ abstract public function addServerToken ( $consumer_key, $token_type, $token, $token_secret, $user_id, $options = array() );
+
+ abstract public function deleteServer ( $consumer_key, $user_id, $user_is_admin = false );
+ abstract public function getServer( $consumer_key, $user_id, $user_is_admin = false );
+ abstract public function getServerForUri ( $uri, $user_id );
+ abstract public function listServerTokens ( $user_id );
+ abstract public function countServerTokens ( $consumer_key );
+ abstract public function getServerToken ( $consumer_key, $token, $user_id );
+ abstract public function deleteServerToken ( $consumer_key, $token, $user_id, $user_is_admin = false );
+ abstract public function listServers ( $q = '', $user_id );
+ abstract public function updateServer ( $server, $user_id, $user_is_admin = false );
+
+ abstract public function updateConsumer ( $consumer, $user_id, $user_is_admin = false );
+ abstract public function deleteConsumer ( $consumer_key, $user_id, $user_is_admin = false );
+ abstract public function getConsumer ( $consumer_key, $user_id, $user_is_admin = false );
+ abstract public function getConsumerStatic ();
+
+ abstract public function addConsumerRequestToken ( $consumer_key, $options = array() );
+ abstract public function getConsumerRequestToken ( $token );
+ abstract public function deleteConsumerRequestToken ( $token );
+ abstract public function authorizeConsumerRequestToken ( $token, $user_id, $referrer_host = '' );
+ abstract public function countConsumerAccessTokens ( $consumer_key );
+ abstract public function exchangeConsumerRequestForAccessToken ( $token, $options = array() );
+ abstract public function getConsumerAccessToken ( $token, $user_id );
+ abstract public function deleteConsumerAccessToken ( $token, $user_id, $user_is_admin = false );
+ abstract public function setConsumerAccessTokenTtl ( $token, $ttl );
+
+ abstract public function listConsumers ( $user_id );
+ abstract public function listConsumerTokens ( $user_id );
+
+ abstract public function checkServerNonce ( $consumer_key, $token, $timestamp, $nonce );
+
+ abstract public function addLog ( $keys, $received, $sent, $base_string, $notes, $user_id = null );
+ abstract public function listLog ( $options, $user_id );
+
+ abstract public function install ();
+
+ /**
+ * Fetch the current static consumer key for this site, create it when it was not found.
+ * The consumer secret for the consumer key is always empty.
+ *
+ * @return string consumer key
+ */
+
+
+ /* ** Some handy utility functions ** */
+
+ /**
+ * Generate a unique key
+ *
+ * @param boolean unique force the key to be unique
+ * @return string
+ */
+ public function generateKey ( $unique = false )
+ {
+ $key = md5(uniqid(rand(), true));
+ if ($unique)
+ {
+ list($usec,$sec) = explode(' ',microtime());
+ $key .= dechex($usec).dechex($sec);
+ }
+ return $key;
+ }
+
+ /**
+ * Check to see if a string is valid utf8
+ *
+ * @param string $s
+ * @return boolean
+ */
+ protected function isUTF8 ( $s )
+ {
+ return preg_match('%(?:
+ [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
+ |\xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
+ |[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
+ |\xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
+ |\xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
+ |[\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
+ |\xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
+ )+%xs', $s);
+ }
+
+
+ /**
+ * Make a string utf8, replacing all non-utf8 chars with a '.'
+ *
+ * @param string
+ * @return string
+ */
+ protected function makeUTF8 ( $s )
+ {
+ if (function_exists('iconv'))
+ {
+ do
+ {
+ $ok = true;
+ $text = @iconv('UTF-8', 'UTF-8//TRANSLIT', $s);
+ if (strlen($text) != strlen($s))
+ {
+ // Remove the offending character...
+ $s = $text . '.' . substr($s, strlen($text) + 1);
+ $ok = false;
+ }
+ }
+ while (!$ok);
+ }
+ return $s;
+ }
+
+}
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/store/OAuthStoreAnyMeta.php b/mod/oauth_api/vendors/oauth/library/store/OAuthStoreAnyMeta.php
new file mode 100644
index 000000000..9c971733f
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/store/OAuthStoreAnyMeta.php
@@ -0,0 +1,265 @@
+<?php
+
+/**
+ * Storage container for the oauth credentials, both server and consumer side.
+ * This file can only be used in conjunction with anyMeta.
+ *
+ * @version $Id: OAuthStoreAnyMeta.php 49 2008-10-01 09:43:19Z marcw@pobox.com $
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Nov 16, 2007 4:03:30 PM
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once dirname(__FILE__) . '/../../../../core/inc/any_database.inc.php';
+require_once dirname(__FILE__) . '/OAuthStoreMySQL.php';
+
+
+class OAuthStoreAnymeta extends OAuthStoreMySQL
+{
+ /**
+ * Construct the OAuthStoreAnymeta
+ *
+ * @param array options
+ */
+ function __construct ( $options = array() )
+ {
+ parent::__construct(array('conn' => any_db_conn()));
+ }
+
+
+ /**
+ * Add an entry to the log table
+ *
+ * @param array keys (osr_consumer_key, ost_token, ocr_consumer_key, oct_token)
+ * @param string received
+ * @param string sent
+ * @param string base_string
+ * @param string notes
+ * @param int (optional) user_id
+ */
+ public function addLog ( $keys, $received, $sent, $base_string, $notes, $user_id = null )
+ {
+ if (is_null($user_id) && isset($GLOBALS['any_auth']))
+ {
+ $user_id = $GLOBALS['any_auth']->getUserId();
+ }
+ parent::addLog($keys, $received, $sent, $base_string, $notes, $user_id);
+ }
+
+
+ /**
+ * Get a page of entries from the log. Returns the last 100 records
+ * matching the options given.
+ *
+ * @param array options
+ * @param int user_id current user
+ * @return array log records
+ */
+ public function listLog ( $options, $user_id )
+ {
+ $where = array();
+ $args = array();
+ if (empty($options))
+ {
+ $where[] = 'olg_usa_id_ref = %d';
+ $args[] = $user_id;
+ }
+ else
+ {
+ foreach ($options as $option => $value)
+ {
+ if (strlen($value) > 0)
+ {
+ switch ($option)
+ {
+ case 'osr_consumer_key':
+ case 'ocr_consumer_key':
+ case 'ost_token':
+ case 'oct_token':
+ $where[] = 'olg_'.$option.' = \'%s\'';
+ $args[] = $value;
+ break;
+ }
+ }
+ }
+
+ $where[] = '(olg_usa_id_ref IS NULL OR olg_usa_id_ref = %d)';
+ $args[] = $user_id;
+ }
+
+ $rs = any_db_query_all_assoc('
+ SELECT olg_id,
+ olg_osr_consumer_key AS osr_consumer_key,
+ olg_ost_token AS ost_token,
+ olg_ocr_consumer_key AS ocr_consumer_key,
+ olg_oct_token AS oct_token,
+ olg_usa_id_ref AS user_id,
+ olg_received AS received,
+ olg_sent AS sent,
+ olg_base_string AS base_string,
+ olg_notes AS notes,
+ olg_timestamp AS timestamp,
+ INET_NTOA(olg_remote_ip) AS remote_ip
+ FROM oauth_log
+ WHERE '.implode(' AND ', $where).'
+ ORDER BY olg_id DESC
+ LIMIT 0,100', $args);
+
+ return $rs;
+ }
+
+
+
+ /**
+ * Initialise the database
+ */
+ public function install ()
+ {
+ parent::install();
+
+ any_db_query("ALTER TABLE oauth_consumer_registry MODIFY ocr_usa_id_ref int(11) unsigned");
+ any_db_query("ALTER TABLE oauth_consumer_token MODIFY oct_usa_id_ref int(11) unsigned not null");
+ any_db_query("ALTER TABLE oauth_server_registry MODIFY osr_usa_id_ref int(11) unsigned");
+ any_db_query("ALTER TABLE oauth_server_token MODIFY ost_usa_id_ref int(11) unsigned not null");
+ any_db_query("ALTER TABLE oauth_log MODIFY olg_usa_id_ref int(11) unsigned");
+
+ any_db_alter_add_fk('oauth_consumer_registry', 'ocr_usa_id_ref', 'any_user_auth(usa_id_ref)', 'on update cascade on delete set null');
+ any_db_alter_add_fk('oauth_consumer_token', 'oct_usa_id_ref', 'any_user_auth(usa_id_ref)', 'on update cascade on delete cascade');
+ any_db_alter_add_fk('oauth_server_registry', 'osr_usa_id_ref', 'any_user_auth(usa_id_ref)', 'on update cascade on delete set null');
+ any_db_alter_add_fk('oauth_server_token', 'ost_usa_id_ref', 'any_user_auth(usa_id_ref)', 'on update cascade on delete cascade');
+ any_db_alter_add_fk('oauth_log', 'olg_usa_id_ref', 'any_user_auth(usa_id_ref)', 'on update cascade on delete cascade');
+ }
+
+
+
+ /** Some simple helper functions for querying the mysql db **/
+
+ /**
+ * Perform a query, ignore the results
+ *
+ * @param string sql
+ * @param vararg arguments (for sprintf)
+ */
+ protected function query ( $sql )
+ {
+ list($sql, $args) = $this->sql_args(func_get_args());
+ any_db_query($sql, $args);
+ }
+
+
+ /**
+ * Perform a query, ignore the results
+ *
+ * @param string sql
+ * @param vararg arguments (for sprintf)
+ * @return array
+ */
+ protected function query_all_assoc ( $sql )
+ {
+ list($sql, $args) = $this->sql_args(func_get_args());
+ return any_db_query_all_assoc($sql, $args);
+ }
+
+
+ /**
+ * Perform a query, return the first row
+ *
+ * @param string sql
+ * @param vararg arguments (for sprintf)
+ * @return array
+ */
+ protected function query_row_assoc ( $sql )
+ {
+ list($sql, $args) = $this->sql_args(func_get_args());
+ return any_db_query_row_assoc($sql, $args);
+ }
+
+
+ /**
+ * Perform a query, return the first row
+ *
+ * @param string sql
+ * @param vararg arguments (for sprintf)
+ * @return array
+ */
+ protected function query_row ( $sql )
+ {
+ list($sql, $args) = $this->sql_args(func_get_args());
+ return any_db_query_row($sql, $args);
+ }
+
+
+ /**
+ * Perform a query, return the first column of the first row
+ *
+ * @param string sql
+ * @param vararg arguments (for sprintf)
+ * @return mixed
+ */
+ protected function query_one ( $sql )
+ {
+ list($sql, $args) = $this->sql_args(func_get_args());
+ return any_db_query_one($sql, $args);
+ }
+
+
+ /**
+ * Return the number of rows affected in the last query
+ *
+ * @return int
+ */
+ protected function query_affected_rows ()
+ {
+ return any_db_affected_rows();
+ }
+
+
+ /**
+ * Return the id of the last inserted row
+ *
+ * @return int
+ */
+ protected function query_insert_id ()
+ {
+ return any_db_insert_id();
+ }
+
+
+ private function sql_args ( $args )
+ {
+ $sql = array_shift($args);
+ if (count($args) == 1 && is_array($args[0]))
+ {
+ $args = $args[0];
+ }
+ return array($sql, $args);
+ }
+
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/store/OAuthStoreMySQL.php b/mod/oauth_api/vendors/oauth/library/store/OAuthStoreMySQL.php
new file mode 100644
index 000000000..a1b04c5c8
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/store/OAuthStoreMySQL.php
@@ -0,0 +1,1879 @@
+<?php
+
+/**
+ * Storage container for the oauth credentials, both server and consumer side.
+ * Based on MySQL
+ *
+ * @version $Id: OAuthStoreMySQL.php 64 2009-08-16 19:37:00Z marcw@pobox.com $
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Nov 16, 2007 4:03:30 PM
+ *
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+
+require_once dirname(__FILE__) . '/OAuthStoreAbstract.class.php';
+
+
+class OAuthStoreMySQL extends OAuthStoreAbstract
+{
+ /**
+ * The MySQL connection
+ */
+ protected $conn;
+
+ /**
+ * Maximum delta a timestamp may be off from a previous timestamp.
+ * Allows multiple consumers with some clock skew to work with the same token.
+ * Unit is seconds, default max skew is 10 minutes.
+ */
+ protected $max_timestamp_skew = 600;
+
+ /**
+ * Default ttl for request tokens
+ */
+ protected $max_request_token_ttl = 3600;
+
+
+ /**
+ * Construct the OAuthStoreMySQL.
+ * In the options you have to supply either:
+ * - server, username, password and database (for a mysql_connect)
+ * - conn (for the connection to be used)
+ *
+ * @param array options
+ */
+ function __construct ( $options = array() )
+ {
+ if (isset($options['conn']))
+ {
+ $this->conn = $options['conn'];
+ }
+ else
+ {
+ if (isset($options['server']))
+ {
+ $server = $options['server'];
+ $username = $options['username'];
+
+ if (isset($options['password']))
+ {
+ $this->conn = mysql_connect($server, $username, $options['password']);
+ }
+ else
+ {
+ $this->conn = mysql_connect($server, $username);
+ }
+ }
+ else
+ {
+ // Try the default mysql connect
+ $this->conn = mysql_connect();
+ }
+
+ if ($this->conn === false)
+ {
+ throw new OAuthException('Could not connect to MySQL database: ' . mysql_error());
+ }
+
+ if (isset($options['database']))
+ {
+ if (!mysql_select_db($options['database'], $this->conn))
+ {
+ $this->sql_errcheck();
+ }
+ }
+ $this->query('set character set utf8');
+ }
+ }
+
+
+ /**
+ * Find stored credentials for the consumer key and token. Used by an OAuth server
+ * when verifying an OAuth request.
+ *
+ * @param string consumer_key
+ * @param string token
+ * @param string token_type false, 'request' or 'access'
+ * @exception OAuthException when no secrets where found
+ * @return array assoc (consumer_secret, token_secret, osr_id, ost_id, user_id)
+ */
+ public function getSecretsForVerify ( $consumer_key, $token, $token_type = 'access' )
+ {
+ if ($token_type === false)
+ {
+ $rs = $this->query_row_assoc('
+ SELECT osr_id,
+ osr_consumer_key as consumer_key,
+ osr_consumer_secret as consumer_secret
+ FROM oauth_server_registry
+ WHERE osr_consumer_key = \'%s\'
+ AND osr_enabled = 1
+ ',
+ $consumer_key);
+
+ if ($rs)
+ {
+ $rs['token'] = false;
+ $rs['token_secret'] = false;
+ $rs['user_id'] = false;
+ $rs['ost_id'] = false;
+ }
+ }
+ else
+ {
+ $rs = $this->query_row_assoc('
+ SELECT osr_id,
+ ost_id,
+ ost_usa_id_ref as user_id,
+ osr_consumer_key as consumer_key,
+ osr_consumer_secret as consumer_secret,
+ ost_token as token,
+ ost_token_secret as token_secret
+ FROM oauth_server_registry
+ JOIN oauth_server_token
+ ON ost_osr_id_ref = osr_id
+ WHERE ost_token_type = \'%s\'
+ AND osr_consumer_key = \'%s\'
+ AND ost_token = \'%s\'
+ AND osr_enabled = 1
+ AND ost_token_ttl >= NOW()
+ ',
+ $token_type, $consumer_key, $token);
+ }
+
+ if (empty($rs))
+ {
+ throw new OAuthException('The consumer_key "'.$consumer_key.'" token "'.$token.'" combination does not exist or is not enabled.');
+ }
+ return $rs;
+ }
+
+
+ /**
+ * Find the server details for signing a request, always looks for an access token.
+ * The returned credentials depend on which local user is making the request.
+ *
+ * The consumer_key must belong to the user or be public (user id is null)
+ *
+ * For signing we need all of the following:
+ *
+ * consumer_key consumer key associated with the server
+ * consumer_secret consumer secret associated with this server
+ * token access token associated with this server
+ * token_secret secret for the access token
+ * signature_methods signing methods supported by the server (array)
+ *
+ * @todo filter on token type (we should know how and with what to sign this request, and there might be old access tokens)
+ * @param string uri uri of the server
+ * @param int user_id id of the logged on user
+ * @param string name (optional) name of the token (case sensitive)
+ * @exception OAuthException when no credentials found
+ * @return array
+ */
+ public function getSecretsForSignature ( $uri, $user_id, $name = '' )
+ {
+ // Find a consumer key and token for the given uri
+ $ps = parse_url($uri);
+ $host = isset($ps['host']) ? $ps['host'] : 'localhost';
+ $path = isset($ps['path']) ? $ps['path'] : '';
+
+ if (empty($path) || substr($path, -1) != '/')
+ {
+ $path .= '/';
+ }
+
+ // The owner of the consumer_key is either the user or nobody (public consumer key)
+ $secrets = $this->query_row_assoc('
+ SELECT ocr_consumer_key as consumer_key,
+ ocr_consumer_secret as consumer_secret,
+ oct_token as token,
+ oct_token_secret as token_secret,
+ ocr_signature_methods as signature_methods
+ FROM oauth_consumer_registry
+ JOIN oauth_consumer_token ON oct_ocr_id_ref = ocr_id
+ WHERE ocr_server_uri_host = \'%s\'
+ AND ocr_server_uri_path = LEFT(\'%s\', LENGTH(ocr_server_uri_path))
+ AND (ocr_usa_id_ref = %s OR ocr_usa_id_ref IS NULL)
+ AND oct_usa_id_ref = %d
+ AND oct_token_type = \'access\'
+ AND oct_name = \'%s\'
+ AND oct_token_ttl >= NOW()
+ ORDER BY ocr_usa_id_ref DESC, ocr_consumer_secret DESC, LENGTH(ocr_server_uri_path) DESC
+ LIMIT 0,1
+ ', $host, $path, $user_id, $user_id, $name
+ );
+
+ if (empty($secrets))
+ {
+ throw new OAuthException('No server tokens available for '.$uri);
+ }
+ $secrets['signature_methods'] = explode(',', $secrets['signature_methods']);
+ return $secrets;
+ }
+
+
+ /**
+ * Get the token and token secret we obtained from a server.
+ *
+ * @param string consumer_key
+ * @param string token
+ * @param string token_type
+ * @param int user_id the user owning the token
+ * @param string name optional name for a named token
+ * @exception OAuthException when no credentials found
+ * @return array
+ */
+ public function getServerTokenSecrets ( $consumer_key, $token, $token_type, $user_id, $name = '' )
+ {
+ if ($token_type != 'request' && $token_type != 'access')
+ {
+ throw new OAuthException('Unkown token type "'.$token_type.'", must be either "request" or "access"');
+ }
+
+ // Take the most recent token of the given type
+ $r = $this->query_row_assoc('
+ SELECT ocr_consumer_key as consumer_key,
+ ocr_consumer_secret as consumer_secret,
+ oct_token as token,
+ oct_token_secret as token_secret,
+ oct_name as token_name,
+ ocr_signature_methods as signature_methods,
+ ocr_server_uri as server_uri,
+ ocr_request_token_uri as request_token_uri,
+ ocr_authorize_uri as authorize_uri,
+ ocr_access_token_uri as access_token_uri,
+ IF(oct_token_ttl >= \'9999-12-31\', NULL, UNIX_TIMESTAMP(oct_token_ttl) - UNIX_TIMESTAMP(NOW())) as token_ttl
+ FROM oauth_consumer_registry
+ JOIN oauth_consumer_token
+ ON oct_ocr_id_ref = ocr_id
+ WHERE ocr_consumer_key = \'%s\'
+ AND oct_token_type = \'%s\'
+ AND oct_token = \'%s\'
+ AND oct_usa_id_ref = %d
+ AND oct_token_ttl >= NOW()
+ ', $consumer_key, $token_type, $token, $user_id
+ );
+
+ if (empty($r))
+ {
+ throw new OAuthException('Could not find a "'.$token_type.'" token for consumer "'.$consumer_key.'" and user '.$user_id);
+ }
+ if (isset($r['signature_methods']) && !empty($r['signature_methods']))
+ {
+ $r['signature_methods'] = explode(',',$r['signature_methods']);
+ }
+ else
+ {
+ $r['signature_methods'] = array();
+ }
+ return $r;
+ }
+
+
+ /**
+ * Add a request token we obtained from a server.
+ *
+ * @todo remove old tokens for this user and this ocr_id
+ * @param string consumer_key key of the server in the consumer registry
+ * @param string token_type one of 'request' or 'access'
+ * @param string token
+ * @param string token_secret
+ * @param int user_id the user owning the token
+ * @param array options extra options, name and token_ttl
+ * @exception OAuthException when server is not known
+ * @exception OAuthException when we received a duplicate token
+ */
+ public function addServerToken ( $consumer_key, $token_type, $token, $token_secret, $user_id, $options = array() )
+ {
+ if ($token_type != 'request' && $token_type != 'access')
+ {
+ throw new OAuthException('Unknown token type "'.$token_type.'", must be either "request" or "access"');
+ }
+
+ // Maximum time to live for this token
+ if (isset($options['token_ttl']) && is_numeric($options['token_ttl']))
+ {
+ $ttl = 'DATE_ADD(NOW(), INTERVAL '.intval($options['token_ttl']).' SECOND)';
+ }
+ else if ($token == 'request')
+ {
+ $ttl = 'DATE_ADD(NOW(), INTERVAL '.$this->max_request_token_ttl.' SECOND)';
+ }
+ else
+ {
+ $ttl = "'9999-12-31'";
+ }
+
+ $ocr_id = $this->query_one('
+ SELECT ocr_id
+ FROM oauth_consumer_registry
+ WHERE ocr_consumer_key = \'%s\'
+ ', $consumer_key);
+
+ if (empty($ocr_id))
+ {
+ throw new OAuthException('No server associated with consumer_key "'.$consumer_key.'"');
+ }
+
+ // Named tokens, unique per user/consumer key
+ if (isset($options['name']) && $options['name'] != '')
+ {
+ $name = $options['name'];
+ }
+ else
+ {
+ $name = '';
+ }
+
+ // Delete any old tokens with the same type and name for this user/server combination
+ $this->query('
+ DELETE FROM oauth_consumer_token
+ WHERE oct_ocr_id_ref = %d
+ AND oct_usa_id_ref = %d
+ AND oct_token_type = LOWER(\'%s\')
+ AND oct_name = \'%s\'
+ ',
+ $ocr_id,
+ $user_id,
+ $token_type,
+ $name);
+
+ // Insert the new token
+ $this->query('
+ INSERT IGNORE INTO oauth_consumer_token
+ SET oct_ocr_id_ref = %d,
+ oct_usa_id_ref = %d,
+ oct_name = \'%s\',
+ oct_token = \'%s\',
+ oct_token_secret= \'%s\',
+ oct_token_type = LOWER(\'%s\'),
+ oct_timestamp = NOW(),
+ oct_token_ttl = '.$ttl.'
+ ',
+ $ocr_id,
+ $user_id,
+ $name,
+ $token,
+ $token_secret,
+ $token_type);
+
+ if (!$this->query_affected_rows())
+ {
+ throw new OAuthException('Received duplicate token "'.$token.'" for the same consumer_key "'.$consumer_key.'"');
+ }
+ }
+
+
+ /**
+ * Delete a server key. This removes access to that site.
+ *
+ * @param string consumer_key
+ * @param int user_id user registering this server
+ * @param boolean user_is_admin
+ */
+ public function deleteServer ( $consumer_key, $user_id, $user_is_admin = false )
+ {
+ if ($user_is_admin)
+ {
+ $this->query('
+ DELETE FROM oauth_consumer_registry
+ WHERE ocr_consumer_key = \'%s\'
+ AND (ocr_usa_id_ref = %d OR ocr_usa_id_ref IS NULL)
+ ', $consumer_key, $user_id);
+ }
+ else
+ {
+ $this->query('
+ DELETE FROM oauth_consumer_registry
+ WHERE ocr_consumer_key = \'%s\'
+ AND ocr_usa_id_ref = %d
+ ', $consumer_key, $user_id);
+ }
+ }
+
+
+ /**
+ * Get a server from the consumer registry using the consumer key
+ *
+ * @param string consumer_key
+ * @param int user_id
+ * @param boolean user_is_admin (optional)
+ * @exception OAuthException when server is not found
+ * @return array
+ */
+ public function getServer ( $consumer_key, $user_id, $user_is_admin = false )
+ {
+ $r = $this->query_row_assoc('
+ SELECT ocr_id as id,
+ ocr_usa_id_ref as user_id,
+ ocr_consumer_key as consumer_key,
+ ocr_consumer_secret as consumer_secret,
+ ocr_signature_methods as signature_methods,
+ ocr_server_uri as server_uri,
+ ocr_request_token_uri as request_token_uri,
+ ocr_authorize_uri as authorize_uri,
+ ocr_access_token_uri as access_token_uri
+ FROM oauth_consumer_registry
+ WHERE ocr_consumer_key = \'%s\'
+ AND (ocr_usa_id_ref = %d OR ocr_usa_id_ref IS NULL)
+ ', $consumer_key, $user_id);
+
+ if (empty($r))
+ {
+ throw new OAuthException('No server with consumer_key "'.$consumer_key.'" has been registered (for this user)');
+ }
+
+ if (isset($r['signature_methods']) && !empty($r['signature_methods']))
+ {
+ $r['signature_methods'] = explode(',',$r['signature_methods']);
+ }
+ else
+ {
+ $r['signature_methods'] = array();
+ }
+ return $r;
+ }
+
+
+
+ /**
+ * Find the server details that might be used for a request
+ *
+ * The consumer_key must belong to the user or be public (user id is null)
+ *
+ * @param string uri uri of the server
+ * @param int user_id id of the logged on user
+ * @exception OAuthException when no credentials found
+ * @return array
+ */
+ public function getServerForUri ( $uri, $user_id )
+ {
+ // Find a consumer key and token for the given uri
+ $ps = parse_url($uri);
+ $host = isset($ps['host']) ? $ps['host'] : 'localhost';
+ $path = isset($ps['path']) ? $ps['path'] : '';
+
+ if (empty($path) || substr($path, -1) != '/')
+ {
+ $path .= '/';
+ }
+
+ // The owner of the consumer_key is either the user or nobody (public consumer key)
+ $server = $this->query_row_assoc('
+ SELECT ocr_id as id,
+ ocr_usa_id_ref as user_id,
+ ocr_consumer_key as consumer_key,
+ ocr_consumer_secret as consumer_secret,
+ ocr_signature_methods as signature_methods,
+ ocr_server_uri as server_uri,
+ ocr_request_token_uri as request_token_uri,
+ ocr_authorize_uri as authorize_uri,
+ ocr_access_token_uri as access_token_uri
+ FROM oauth_consumer_registry
+ WHERE ocr_server_uri_host = \'%s\'
+ AND ocr_server_uri_path = LEFT(\'%s\', LENGTH(ocr_server_uri_path))
+ AND (ocr_usa_id_ref = %s OR ocr_usa_id_ref IS NULL)
+ ORDER BY ocr_usa_id_ref DESC, consumer_secret DESC, LENGTH(ocr_server_uri_path) DESC
+ LIMIT 0,1
+ ', $host, $path, $user_id
+ );
+
+ if (empty($server))
+ {
+ throw new OAuthException('No server available for '.$uri);
+ }
+ $server['signature_methods'] = explode(',', $server['signature_methods']);
+ return $server;
+ }
+
+
+ /**
+ * Get a list of all server token this user has access to.
+ *
+ * @param int usr_id
+ * @return array
+ */
+ public function listServerTokens ( $user_id )
+ {
+ $ts = $this->query_all_assoc('
+ SELECT ocr_consumer_key as consumer_key,
+ ocr_consumer_secret as consumer_secret,
+ oct_id as token_id,
+ oct_token as token,
+ oct_token_secret as token_secret,
+ oct_usa_id_ref as user_id,
+ ocr_signature_methods as signature_methods,
+ ocr_server_uri as server_uri,
+ ocr_server_uri_host as server_uri_host,
+ ocr_server_uri_path as server_uri_path,
+ ocr_request_token_uri as request_token_uri,
+ ocr_authorize_uri as authorize_uri,
+ ocr_access_token_uri as access_token_uri,
+ oct_timestamp as timestamp
+ FROM oauth_consumer_registry
+ JOIN oauth_consumer_token
+ ON oct_ocr_id_ref = ocr_id
+ WHERE oct_usa_id_ref = %d
+ AND oct_token_type = \'access\'
+ AND oct_token_ttl >= NOW()
+ ORDER BY ocr_server_uri_host, ocr_server_uri_path
+ ', $user_id);
+ return $ts;
+ }
+
+
+ /**
+ * Count how many tokens we have for the given server
+ *
+ * @param string consumer_key
+ * @return int
+ */
+ public function countServerTokens ( $consumer_key )
+ {
+ $count = $this->query_one('
+ SELECT COUNT(oct_id)
+ FROM oauth_consumer_token
+ JOIN oauth_consumer_registry
+ ON oct_ocr_id_ref = ocr_id
+ WHERE oct_token_type = \'access\'
+ AND ocr_consumer_key = \'%s\'
+ AND oct_token_ttl >= NOW()
+ ', $consumer_key);
+
+ return $count;
+ }
+
+
+ /**
+ * Get a specific server token for the given user
+ *
+ * @param string consumer_key
+ * @param string token
+ * @param int user_id
+ * @exception OAuthException when no such token found
+ * @return array
+ */
+ public function getServerToken ( $consumer_key, $token, $user_id )
+ {
+ $ts = $this->query_row_assoc('
+ SELECT ocr_consumer_key as consumer_key,
+ ocr_consumer_secret as consumer_secret,
+ oct_token as token,
+ oct_token_secret as token_secret,
+ oct_usa_id_ref as usr_id,
+ ocr_signature_methods as signature_methods,
+ ocr_server_uri as server_uri,
+ ocr_server_uri_host as server_uri_host,
+ ocr_server_uri_path as server_uri_path,
+ ocr_request_token_uri as request_token_uri,
+ ocr_authorize_uri as authorize_uri,
+ ocr_access_token_uri as access_token_uri,
+ oct_timestamp as timestamp
+ FROM oauth_consumer_registry
+ JOIN oauth_consumer_token
+ ON oct_ocr_id_ref = ocr_id
+ WHERE ocr_consumer_key = \'%s\'
+ AND oct_usa_id_ref = %d
+ AND oct_token_type = \'access\'
+ AND oct_token = \'%s\'
+ AND oct_token_ttl >= NOW()
+ ', $consumer_key, $user_id, $token);
+
+ if (empty($ts))
+ {
+ throw new OAuthException('No such consumer key ('.$consumer_key.') and token ('.$token.') combination for user "'.$user_id.'"');
+ }
+ return $ts;
+ }
+
+
+ /**
+ * Delete a token we obtained from a server.
+ *
+ * @param string consumer_key
+ * @param string token
+ * @param int user_id
+ * @param boolean user_is_admin
+ */
+ public function deleteServerToken ( $consumer_key, $token, $user_id, $user_is_admin = false )
+ {
+ if ($user_is_admin)
+ {
+ $this->query('
+ DELETE oauth_consumer_token
+ FROM oauth_consumer_token
+ JOIN oauth_consumer_registry
+ ON oct_ocr_id_ref = ocr_id
+ WHERE ocr_consumer_key = \'%s\'
+ AND oct_token = \'%s\'
+ ', $consumer_key, $token);
+ }
+ else
+ {
+ $this->query('
+ DELETE oauth_consumer_token
+ FROM oauth_consumer_token
+ JOIN oauth_consumer_registry
+ ON oct_ocr_id_ref = ocr_id
+ WHERE ocr_consumer_key = \'%s\'
+ AND oct_token = \'%s\'
+ AND oct_usa_id_ref = %d
+ ', $consumer_key, $token, $user_id);
+ }
+ }
+
+
+ /**
+ * Set the ttl of a server access token. This is done when the
+ * server receives a valid request with a xoauth_token_ttl parameter in it.
+ *
+ * @param string consumer_key
+ * @param string token
+ * @param int token_ttl
+ */
+ public function setServerTokenTtl ( $consumer_key, $token, $token_ttl )
+ {
+ if ($token_ttl <= 0)
+ {
+ // Immediate delete when the token is past its ttl
+ $this->deleteServerToken($consumer_key, $token, 0, true);
+ }
+ else
+ {
+ // Set maximum time to live for this token
+ $this->query('
+ UPDATE oauth_consumer_token, oauth_consumer_registry
+ SET ost_token_ttl = DATE_ADD(NOW(), INTERVAL %d SECOND)
+ WHERE ocr_consumer_key = \'%s\'
+ AND oct_ocr_id_ref = ocr_id
+ AND oct_token = \'%s\'
+ ', $token_ttl, $consumer_key, $token);
+ }
+ }
+
+
+ /**
+ * Get a list of all consumers from the consumer registry.
+ * The consumer keys belong to the user or are public (user id is null)
+ *
+ * @param string q query term
+ * @param int user_id
+ * @return array
+ */
+ public function listServers ( $q = '', $user_id )
+ {
+ $q = trim(str_replace('%', '', $q));
+ $args = array();
+
+ if (!empty($q))
+ {
+ $where = ' WHERE ( ocr_consumer_key like \'%%%s%%\'
+ OR ocr_server_uri like \'%%%s%%\'
+ OR ocr_server_uri_host like \'%%%s%%\'
+ OR ocr_server_uri_path like \'%%%s%%\')
+ AND (ocr_usa_id_ref = %d OR ocr_usa_id_ref IS NULL)
+ ';
+
+ $args[] = $q;
+ $args[] = $q;
+ $args[] = $q;
+ $args[] = $q;
+ $args[] = $user_id;
+ }
+ else
+ {
+ $where = ' WHERE ocr_usa_id_ref = %d OR ocr_usa_id_ref IS NULL';
+ $args[] = $user_id;
+ }
+
+ $servers = $this->query_all_assoc('
+ SELECT ocr_id as id,
+ ocr_usa_id_ref as user_id,
+ ocr_consumer_key as consumer_key,
+ ocr_consumer_secret as consumer_secret,
+ ocr_signature_methods as signature_methods,
+ ocr_server_uri as server_uri,
+ ocr_server_uri_host as server_uri_host,
+ ocr_server_uri_path as server_uri_path,
+ ocr_request_token_uri as request_token_uri,
+ ocr_authorize_uri as authorize_uri,
+ ocr_access_token_uri as access_token_uri
+ FROM oauth_consumer_registry
+ '.$where.'
+ ORDER BY ocr_server_uri_host, ocr_server_uri_path
+ ', $args);
+ return $servers;
+ }
+
+
+ /**
+ * Register or update a server for our site (we will be the consumer)
+ *
+ * (This is the registry at the consumers, registering servers ;-) )
+ *
+ * @param array server
+ * @param int user_id user registering this server
+ * @param boolean user_is_admin
+ * @exception OAuthException when fields are missing or on duplicate consumer_key
+ * @return consumer_key
+ */
+ public function updateServer ( $server, $user_id, $user_is_admin = false )
+ {
+ foreach (array('consumer_key', 'server_uri') as $f)
+ {
+ if (empty($server[$f]))
+ {
+ throw new OAuthException('The field "'.$f.'" must be set and non empty');
+ }
+ }
+
+ if (!empty($server['id']))
+ {
+ $exists = $this->query_one('
+ SELECT ocr_id
+ FROM oauth_consumer_registry
+ WHERE ocr_consumer_key = \'%s\'
+ AND ocr_id <> %d
+ AND (ocr_usa_id_ref = %d OR ocr_usa_id_ref IS NULL)
+ ', $server['consumer_key'], $server['id'], $user_id);
+ }
+ else
+ {
+ $exists = $this->query_one('
+ SELECT ocr_id
+ FROM oauth_consumer_registry
+ WHERE ocr_consumer_key = \'%s\'
+ AND (ocr_usa_id_ref = %d OR ocr_usa_id_ref IS NULL)
+ ', $server['consumer_key'], $user_id);
+ }
+
+ if ($exists)
+ {
+ throw new OAuthException('The server with key "'.$server['consumer_key'].'" has already been registered');
+ }
+
+ $parts = parse_url($server['server_uri']);
+ $host = (isset($parts['host']) ? $parts['host'] : 'localhost');
+ $path = (isset($parts['path']) ? $parts['path'] : '/');
+
+ if (isset($server['signature_methods']))
+ {
+ if (is_array($server['signature_methods']))
+ {
+ $server['signature_methods'] = strtoupper(implode(',', $server['signature_methods']));
+ }
+ }
+ else
+ {
+ $server['signature_methods'] = '';
+ }
+
+ // When the user is an admin, then the user can update the user_id of this record
+ if ($user_is_admin && array_key_exists('user_id', $server))
+ {
+ if (is_null($server['user_id']))
+ {
+ $update_user = ', ocr_usa_id_ref = NULL';
+ }
+ else
+ {
+ $update_user = ', ocr_usa_id_ref = '.intval($server['user_id']);
+ }
+ }
+ else
+ {
+ $update_user = '';
+ }
+
+ if (!empty($server['id']))
+ {
+ // Check if the current user can update this server definition
+ if (!$user_is_admin)
+ {
+ $ocr_usa_id_ref = $this->query_one('
+ SELECT ocr_usa_id_ref
+ FROM oauth_consumer_registry
+ WHERE ocr_id = %d
+ ', $server['id']);
+
+ if ($ocr_usa_id_ref != $user_id)
+ {
+ throw new OAuthException('The user "'.$user_id.'" is not allowed to update this server');
+ }
+ }
+
+ // Update the consumer registration
+ $this->query('
+ UPDATE oauth_consumer_registry
+ SET ocr_consumer_key = \'%s\',
+ ocr_consumer_secret = \'%s\',
+ ocr_server_uri = \'%s\',
+ ocr_server_uri_host = \'%s\',
+ ocr_server_uri_path = \'%s\',
+ ocr_timestamp = NOW(),
+ ocr_request_token_uri = \'%s\',
+ ocr_authorize_uri = \'%s\',
+ ocr_access_token_uri = \'%s\',
+ ocr_signature_methods = \'%s\'
+ '.$update_user.'
+ WHERE ocr_id = %d
+ ',
+ $server['consumer_key'],
+ $server['consumer_secret'],
+ $server['server_uri'],
+ strtolower($host),
+ $path,
+ isset($server['request_token_uri']) ? $server['request_token_uri'] : '',
+ isset($server['authorize_uri']) ? $server['authorize_uri'] : '',
+ isset($server['access_token_uri']) ? $server['access_token_uri'] : '',
+ $server['signature_methods'],
+ $server['id']
+ );
+ }
+ else
+ {
+ if (empty($update_user))
+ {
+ // Per default the user owning the key is the user registering the key
+ $update_user = ', ocr_usa_id_ref = '.intval($user_id);
+ }
+
+ $this->query('
+ INSERT INTO oauth_consumer_registry
+ SET ocr_consumer_key = \'%s\',
+ ocr_consumer_secret = \'%s\',
+ ocr_server_uri = \'%s\',
+ ocr_server_uri_host = \'%s\',
+ ocr_server_uri_path = \'%s\',
+ ocr_timestamp = NOW(),
+ ocr_request_token_uri = \'%s\',
+ ocr_authorize_uri = \'%s\',
+ ocr_access_token_uri = \'%s\',
+ ocr_signature_methods = \'%s\'
+ '.$update_user,
+ $server['consumer_key'],
+ $server['consumer_secret'],
+ $server['server_uri'],
+ strtolower($host),
+ $path,
+ isset($server['request_token_uri']) ? $server['request_token_uri'] : '',
+ isset($server['authorize_uri']) ? $server['authorize_uri'] : '',
+ isset($server['access_token_uri']) ? $server['access_token_uri'] : '',
+ $server['signature_methods']
+ );
+
+ $ocr_id = $this->query_insert_id();
+ }
+ return $server['consumer_key'];
+ }
+
+
+ /**
+ * Insert/update a new consumer with this server (we will be the server)
+ * When this is a new consumer, then also generate the consumer key and secret.
+ * Never updates the consumer key and secret.
+ * When the id is set, then the key and secret must correspond to the entry
+ * being updated.
+ *
+ * (This is the registry at the server, registering consumers ;-) )
+ *
+ * @param array consumer
+ * @param int user_id user registering this consumer
+ * @param boolean user_is_admin
+ * @return string consumer key
+ */
+ public function updateConsumer ( $consumer, $user_id, $user_is_admin = false )
+ {
+ if (!$user_is_admin)
+ {
+ foreach (array('requester_name', 'requester_email') as $f)
+ {
+ if (empty($consumer[$f]))
+ {
+ throw new OAuthException('The field "'.$f.'" must be set and non empty');
+ }
+ }
+ }
+
+ if (!empty($consumer['id']))
+ {
+ if (empty($consumer['consumer_key']))
+ {
+ throw new OAuthException('The field "consumer_key" must be set and non empty');
+ }
+ if (!$user_is_admin && empty($consumer['consumer_secret']))
+ {
+ throw new OAuthException('The field "consumer_secret" must be set and non empty');
+ }
+
+ // Check if the current user can update this server definition
+ if (!$user_is_admin)
+ {
+ $osr_usa_id_ref = $this->query_one('
+ SELECT osr_usa_id_ref
+ FROM oauth_server_registry
+ WHERE osr_id = %d
+ ', $consumer['id']);
+
+ if ($osr_usa_id_ref != $user_id)
+ {
+ throw new OAuthException('The user "'.$user_id.'" is not allowed to update this consumer');
+ }
+ }
+ else
+ {
+ // User is an admin, allow a key owner to be changed or key to be shared
+ if (array_key_exists('user_id',$consumer))
+ {
+ if (is_null($consumer['user_id']))
+ {
+ $this->query('
+ UPDATE oauth_server_registry
+ SET osr_usa_id_ref = NULL
+ WHERE osr_id = %d
+ ', $consumer['id']);
+ }
+ else
+ {
+ $this->query('
+ UPDATE oauth_server_registry
+ SET osr_usa_id_ref = %d
+ WHERE osr_id = %d
+ ', $consumer['user_id'], $consumer['id']);
+ }
+ }
+ }
+
+ $this->query('
+ UPDATE oauth_server_registry
+ SET osr_requester_name = \'%s\',
+ osr_requester_email = \'%s\',
+ osr_callback_uri = \'%s\',
+ osr_application_uri = \'%s\',
+ osr_application_title = \'%s\',
+ osr_application_descr = \'%s\',
+ osr_application_notes = \'%s\',
+ osr_application_type = \'%s\',
+ osr_application_commercial = IF(%d,1,0),
+ osr_timestamp = NOW()
+ WHERE osr_id = %d
+ AND osr_consumer_key = \'%s\'
+ AND osr_consumer_secret = \'%s\'
+ ',
+ $consumer['requester_name'],
+ $consumer['requester_email'],
+ isset($consumer['callback_uri']) ? $consumer['callback_uri'] : '',
+ isset($consumer['application_uri']) ? $consumer['application_uri'] : '',
+ isset($consumer['application_title']) ? $consumer['application_title'] : '',
+ isset($consumer['application_descr']) ? $consumer['application_descr'] : '',
+ isset($consumer['application_notes']) ? $consumer['application_notes'] : '',
+ isset($consumer['application_type']) ? $consumer['application_type'] : '',
+ isset($consumer['application_commercial']) ? $consumer['application_commercial'] : 0,
+ $consumer['id'],
+ $consumer['consumer_key'],
+ $consumer['consumer_secret']
+ );
+
+
+ $consumer_key = $consumer['consumer_key'];
+ }
+ else
+ {
+ $consumer_key = $this->generateKey(true);
+ $consumer_secret= $this->generateKey();
+
+ // When the user is an admin, then the user can be forced to something else that the user
+ if ($user_is_admin && array_key_exists('user_id',$consumer))
+ {
+ if (is_null($consumer['user_id']))
+ {
+ $owner_id = 'NULL';
+ }
+ else
+ {
+ $owner_id = intval($consumer['user_id']);
+ }
+ }
+ else
+ {
+ // No admin, take the user id as the owner id.
+ $owner_id = intval($user_id);
+ }
+
+ $this->query('
+ INSERT INTO oauth_server_registry
+ SET osr_enabled = 1,
+ osr_status = \'active\',
+ osr_usa_id_ref = %s,
+ osr_consumer_key = \'%s\',
+ osr_consumer_secret = \'%s\',
+ osr_requester_name = \'%s\',
+ osr_requester_email = \'%s\',
+ osr_callback_uri = \'%s\',
+ osr_application_uri = \'%s\',
+ osr_application_title = \'%s\',
+ osr_application_descr = \'%s\',
+ osr_application_notes = \'%s\',
+ osr_application_type = \'%s\',
+ osr_application_commercial = IF(%d,1,0),
+ osr_timestamp = NOW(),
+ osr_issue_date = NOW()
+ ',
+ $owner_id,
+ $consumer_key,
+ $consumer_secret,
+ $consumer['requester_name'],
+ $consumer['requester_email'],
+ isset($consumer['callback_uri']) ? $consumer['callback_uri'] : '',
+ isset($consumer['application_uri']) ? $consumer['application_uri'] : '',
+ isset($consumer['application_title']) ? $consumer['application_title'] : '',
+ isset($consumer['application_descr']) ? $consumer['application_descr'] : '',
+ isset($consumer['application_notes']) ? $consumer['application_notes'] : '',
+ isset($consumer['application_type']) ? $consumer['application_type'] : '',
+ isset($consumer['application_commercial']) ? $consumer['application_commercial'] : 0
+ );
+ }
+ return $consumer_key;
+
+ }
+
+
+
+ /**
+ * Delete a consumer key. This removes access to our site for all applications using this key.
+ *
+ * @param string consumer_key
+ * @param int user_id user registering this server
+ * @param boolean user_is_admin
+ */
+ public function deleteConsumer ( $consumer_key, $user_id, $user_is_admin = false )
+ {
+ if ($user_is_admin)
+ {
+ $this->query('
+ DELETE FROM oauth_server_registry
+ WHERE osr_consumer_key = \'%s\'
+ AND (osr_usa_id_ref = %d OR osr_usa_id_ref IS NULL)
+ ', $consumer_key, $user_id);
+ }
+ else
+ {
+ $this->query('
+ DELETE FROM oauth_server_registry
+ WHERE osr_consumer_key = \'%s\'
+ AND osr_usa_id_ref = %d
+ ', $consumer_key, $user_id);
+ }
+ }
+
+
+
+ /**
+ * Fetch a consumer of this server, by consumer_key.
+ *
+ * @param string consumer_key
+ * @param int user_id
+ * @param boolean user_is_admin (optional)
+ * @exception OAuthException when consumer not found
+ * @return array
+ */
+ public function getConsumer ( $consumer_key, $user_id, $user_is_admin = false )
+ {
+ $consumer = $this->query_row_assoc('
+ SELECT *
+ FROM oauth_server_registry
+ WHERE osr_consumer_key = \'%s\'
+ ', $consumer_key);
+
+ if (!is_array($consumer))
+ {
+ throw new OAuthException('No consumer with consumer_key "'.$consumer_key.'"');
+ }
+
+ $c = array();
+ foreach ($consumer as $key => $value)
+ {
+ $c[substr($key, 4)] = $value;
+ }
+ $c['user_id'] = $c['usa_id_ref'];
+
+ if (!$user_is_admin && !empty($c['user_id']) && $c['user_id'] != $user_id)
+ {
+ throw new OAuthException('No access to the consumer information for consumer_key "'.$consumer_key.'"');
+ }
+ return $c;
+ }
+
+
+ /**
+ * Fetch the static consumer key for this provider. The user for the static consumer
+ * key is NULL (no user, shared key). If the key did not exist then the key is created.
+ *
+ * @return string
+ */
+ public function getConsumerStatic ()
+ {
+ $consumer = $this->query_one('
+ SELECT osr_consumer_key
+ FROM oauth_server_registry
+ WHERE osr_consumer_key LIKE \'sc-%%\'
+ AND osr_usa_id_ref IS NULL
+ ');
+
+ if (empty($consumer))
+ {
+ $consumer_key = 'sc-'.$this->generateKey(true);
+ $this->query('
+ INSERT INTO oauth_server_registry
+ SET osr_enabled = 1,
+ osr_status = \'active\',
+ osr_usa_id_ref = NULL,
+ osr_consumer_key = \'%s\',
+ osr_consumer_secret = \'\',
+ osr_requester_name = \'\',
+ osr_requester_email = \'\',
+ osr_callback_uri = \'\',
+ osr_application_uri = \'\',
+ osr_application_title = \'Static shared consumer key\',
+ osr_application_descr = \'\',
+ osr_application_notes = \'Static shared consumer key\',
+ osr_application_type = \'\',
+ osr_application_commercial = 0,
+ osr_timestamp = NOW(),
+ osr_issue_date = NOW()
+ ',
+ $consumer_key
+ );
+
+ // Just make sure that if the consumer key is truncated that we get the truncated string
+ $consumer = $this->getConsumerStatic();
+ }
+ return $consumer;
+ }
+
+
+ /**
+ * Add an unautorized request token to our server.
+ *
+ * @param string consumer_key
+ * @param array options (eg. token_ttl)
+ * @return array (token, token_secret)
+ */
+ public function addConsumerRequestToken ( $consumer_key, $options = array() )
+ {
+ $token = $this->generateKey(true);
+ $secret = $this->generateKey();
+ $osr_id = $this->query_one('
+ SELECT osr_id
+ FROM oauth_server_registry
+ WHERE osr_consumer_key = \'%s\'
+ AND osr_enabled = 1
+ ', $consumer_key);
+
+ if (!$osr_id)
+ {
+ throw new OAuthException('No server with consumer_key "'.$consumer_key.'" or consumer_key is disabled');
+ }
+
+ if (isset($options['token_ttl']) && is_numeric($options['token_ttl']))
+ {
+ $ttl = intval($options['token_ttl']);
+ }
+ else
+ {
+ $ttl = $this->max_request_token_ttl;
+ }
+
+ $this->query('
+ INSERT INTO oauth_server_token
+ SET ost_osr_id_ref = %d,
+ ost_usa_id_ref = 1,
+ ost_token = \'%s\',
+ ost_token_secret = \'%s\',
+ ost_token_type = \'request\',
+ ost_token_ttl = DATE_ADD(NOW(), INTERVAL %d SECOND)
+ ON DUPLICATE KEY UPDATE
+ ost_osr_id_ref = VALUES(ost_osr_id_ref),
+ ost_usa_id_ref = VALUES(ost_usa_id_ref),
+ ost_token = VALUES(ost_token),
+ ost_token_secret = VALUES(ost_token_secret),
+ ost_token_type = VALUES(ost_token_type),
+ ost_token_ttl = VALUES(ost_token_ttl),
+ ost_timestamp = NOW()
+ ', $osr_id, $token, $secret, $ttl);
+
+ return array('token'=>$token, 'token_secret'=>$secret, 'token_ttl'=>$ttl);
+ }
+
+
+ /**
+ * Fetch the consumer request token, by request token.
+ *
+ * @param string token
+ * @return array token and consumer details
+ */
+ public function getConsumerRequestToken ( $token )
+ {
+ $rs = $this->query_row_assoc('
+ SELECT ost_token as token,
+ ost_token_secret as token_secret,
+ osr_consumer_key as consumer_key,
+ osr_consumer_secret as consumer_secret,
+ ost_token_type as token_type
+ FROM oauth_server_token
+ JOIN oauth_server_registry
+ ON ost_osr_id_ref = osr_id
+ WHERE ost_token_type = \'request\'
+ AND ost_token = \'%s\'
+ AND ost_token_ttl >= NOW()
+ ', $token);
+
+ return $rs;
+ }
+
+
+ /**
+ * Delete a consumer token. The token must be a request or authorized token.
+ *
+ * @param string token
+ */
+ public function deleteConsumerRequestToken ( $token )
+ {
+ $this->query('
+ DELETE FROM oauth_server_token
+ WHERE ost_token = \'%s\'
+ AND ost_token_type = \'request\'
+ ', $token);
+ }
+
+
+ /**
+ * Upgrade a request token to be an authorized request token.
+ *
+ * @param string token
+ * @param int user_id user authorizing the token
+ * @param string referrer_host used to set the referrer host for this token, for user feedback
+ */
+ public function authorizeConsumerRequestToken ( $token, $user_id, $referrer_host = '' )
+ {
+ $this->query('
+ UPDATE oauth_server_token
+ SET ost_authorized = 1,
+ ost_usa_id_ref = %d,
+ ost_timestamp = NOW(),
+ ost_referrer_host = \'%s\'
+ WHERE ost_token = \'%s\'
+ AND ost_token_type = \'request\'
+ ', $user_id, $referrer_host, $token);
+ }
+
+
+ /**
+ * Count the consumer access tokens for the given consumer.
+ *
+ * @param string consumer_key
+ * @return int
+ */
+ public function countConsumerAccessTokens ( $consumer_key )
+ {
+ $count = $this->query_one('
+ SELECT COUNT(ost_id)
+ FROM oauth_server_token
+ JOIN oauth_server_registry
+ ON ost_osr_id_ref = osr_id
+ WHERE ost_token_type = \'access\'
+ AND osr_consumer_key = \'%s\'
+ AND ost_token_ttl >= NOW()
+ ', $consumer_key);
+
+ return $count;
+ }
+
+
+ /**
+ * Exchange an authorized request token for new access token.
+ *
+ * @param string token
+ * @param array options options for the token, token_ttl
+ * @exception OAuthException when token could not be exchanged
+ * @return array (token, token_secret)
+ */
+ public function exchangeConsumerRequestForAccessToken ( $token, $options = array() )
+ {
+ $new_token = $this->generateKey(true);
+ $new_secret = $this->generateKey();
+
+ // Maximum time to live for this token
+ if (isset($options['token_ttl']) && is_numeric($options['token_ttl']))
+ {
+ $ttl_sql = 'DATE_ADD(NOW(), INTERVAL '.intval($options['token_ttl']).' SECOND)';
+ }
+ else
+ {
+ $ttl_sql = "'9999-12-31'";
+ }
+
+ $this->query('
+ UPDATE oauth_server_token
+ SET ost_token = \'%s\',
+ ost_token_secret = \'%s\',
+ ost_token_type = \'access\',
+ ost_timestamp = NOW(),
+ ost_token_ttl = '.$ttl_sql.'
+ WHERE ost_token = \'%s\'
+ AND ost_token_type = \'request\'
+ AND ost_authorized = 1
+ AND ost_token_ttl >= NOW()
+ ', $new_token, $new_secret, $token);
+
+ if ($this->query_affected_rows() != 1)
+ {
+ throw new OAuthException('Can\'t exchange request token "'.$token.'" for access token. No such token or not authorized');
+ }
+
+ $ret = array('token' => $new_token, 'token_secret' => $new_secret);
+ $ttl = $this->query_one('
+ SELECT IF(ost_token_ttl >= \'9999-12-31\', NULL, UNIX_TIMESTAMP(ost_token_ttl) - UNIX_TIMESTAMP(NOW())) as token_ttl
+ FROM oauth_server_token
+ WHERE ost_token = \'%s\'', $new_token);
+
+ if (is_numeric($ttl))
+ {
+ $ret['token_ttl'] = intval($ttl);
+ }
+ return $ret;
+ }
+
+
+ /**
+ * Fetch the consumer access token, by access token.
+ *
+ * @param string token
+ * @param int user_id
+ * @exception OAuthException when token is not found
+ * @return array token and consumer details
+ */
+ public function getConsumerAccessToken ( $token, $user_id )
+ {
+ $rs = $this->query_row_assoc('
+ SELECT ost_token as token,
+ ost_token_secret as token_secret,
+ ost_referrer_host as token_referrer_host,
+ osr_consumer_key as consumer_key,
+ osr_consumer_secret as consumer_secret,
+ osr_application_uri as application_uri,
+ osr_application_title as application_title,
+ osr_application_descr as application_descr
+ FROM oauth_server_token
+ JOIN oauth_server_registry
+ ON ost_osr_id_ref = osr_id
+ WHERE ost_token_type = \'access\'
+ AND ost_token = \'%s\'
+ AND ost_usa_id_ref = %d
+ AND ost_token_ttl >= NOW()
+ ', $token, $user_id);
+
+ if (empty($rs))
+ {
+ throw new OAuthException('No server_token "'.$token.'" for user "'.$user_id.'"');
+ }
+ return $rs;
+ }
+
+
+ /**
+ * Delete a consumer access token.
+ *
+ * @param string token
+ * @param int user_id
+ * @param boolean user_is_admin
+ */
+ public function deleteConsumerAccessToken ( $token, $user_id, $user_is_admin = false )
+ {
+ if ($user_is_admin)
+ {
+ $this->query('
+ DELETE FROM oauth_server_token
+ WHERE ost_token = \'%s\'
+ AND ost_token_type = \'access\'
+ ', $token);
+ }
+ else
+ {
+ $this->query('
+ DELETE FROM oauth_server_token
+ WHERE ost_token = \'%s\'
+ AND ost_token_type = \'access\'
+ AND ost_usa_id_ref = %d
+ ', $token, $user_id);
+ }
+ }
+
+
+ /**
+ * Set the ttl of a consumer access token. This is done when the
+ * server receives a valid request with a xoauth_token_ttl parameter in it.
+ *
+ * @param string token
+ * @param int ttl
+ */
+ public function setConsumerAccessTokenTtl ( $token, $token_ttl )
+ {
+ if ($token_ttl <= 0)
+ {
+ // Immediate delete when the token is past its ttl
+ $this->deleteConsumerAccessToken($token, 0, true);
+ }
+ else
+ {
+ // Set maximum time to live for this token
+ $this->query('
+ UPDATE oauth_server_token
+ SET ost_token_ttl = DATE_ADD(NOW(), INTERVAL %d SECOND)
+ WHERE ost_token = \'%s\'
+ AND ost_token_type = \'access\'
+ ', $token_ttl, $token);
+ }
+ }
+
+
+ /**
+ * Fetch a list of all consumer keys, secrets etc.
+ * Returns the public (user_id is null) and the keys owned by the user
+ *
+ * @param int user_id
+ * @return array
+ */
+ public function listConsumers ( $user_id )
+ {
+ $rs = $this->query_all_assoc('
+ SELECT osr_id as id,
+ osr_usa_id_ref as user_id,
+ osr_consumer_key as consumer_key,
+ osr_consumer_secret as consumer_secret,
+ osr_enabled as enabled,
+ osr_status as status,
+ osr_issue_date as issue_date,
+ osr_application_uri as application_uri,
+ osr_application_title as application_title,
+ osr_application_descr as application_descr,
+ osr_requester_name as requester_name,
+ osr_requester_email as requester_email
+ FROM oauth_server_registry
+ WHERE (osr_usa_id_ref = %d OR osr_usa_id_ref IS NULL)
+ ORDER BY osr_application_title
+ ', $user_id);
+ return $rs;
+ }
+
+
+ /**
+ * Fetch a list of all consumer tokens accessing the account of the given user.
+ *
+ * @param int user_id
+ * @return array
+ */
+ public function listConsumerTokens ( $user_id )
+ {
+ $rs = $this->query_all_assoc('
+ SELECT osr_consumer_key as consumer_key,
+ osr_consumer_secret as consumer_secret,
+ osr_enabled as enabled,
+ osr_status as status,
+ osr_application_uri as application_uri,
+ osr_application_title as application_title,
+ osr_application_descr as application_descr,
+ ost_timestamp as timestamp,
+ ost_token as token,
+ ost_token_secret as token_secret,
+ ost_referrer_host as token_referrer_host
+ FROM oauth_server_registry
+ JOIN oauth_server_token
+ ON ost_osr_id_ref = osr_id
+ WHERE ost_usa_id_ref = %d
+ AND ost_token_type = \'access\'
+ AND ost_token_ttl >= NOW()
+ ORDER BY osr_application_title
+ ', $user_id);
+ return $rs;
+ }
+
+
+ /**
+ * Check an nonce/timestamp combination. Clears any nonce combinations
+ * that are older than the one received.
+ *
+ * @param string consumer_key
+ * @param string token
+ * @param int timestamp
+ * @param string nonce
+ * @exception OAuthException thrown when the timestamp is not in sequence or nonce is not unique
+ */
+ public function checkServerNonce ( $consumer_key, $token, $timestamp, $nonce )
+ {
+ $r = $this->query_row('
+ SELECT MAX(osn_timestamp), MAX(osn_timestamp) > %d + %d
+ FROM oauth_server_nonce
+ WHERE osn_consumer_key = \'%s\'
+ AND osn_token = \'%s\'
+ ', $timestamp, $this->max_timestamp_skew, $consumer_key, $token);
+
+ if (!empty($r) && $r[1])
+ {
+ throw new OAuthException('Timestamp is out of sequence. Request rejected. Got '.$timestamp.' last max is '.$r[0].' allowed skew is '.$this->max_timestamp_skew);
+ }
+
+ // Insert the new combination
+ $this->query('
+ INSERT IGNORE INTO oauth_server_nonce
+ SET osn_consumer_key = \'%s\',
+ osn_token = \'%s\',
+ osn_timestamp = %d,
+ osn_nonce = \'%s\'
+ ', $consumer_key, $token, $timestamp, $nonce);
+
+ if ($this->query_affected_rows() == 0)
+ {
+ throw new OAuthException('Duplicate timestamp/nonce combination, possible replay attack. Request rejected.');
+ }
+
+ // Clean up all timestamps older than the one we just received
+ $this->query('
+ DELETE FROM oauth_server_nonce
+ WHERE osn_consumer_key = \'%s\'
+ AND osn_token = \'%s\'
+ AND osn_timestamp < %d - %d
+ ', $consumer_key, $token, $timestamp, $this->max_timestamp_skew);
+ }
+
+
+ /**
+ * Add an entry to the log table
+ *
+ * @param array keys (osr_consumer_key, ost_token, ocr_consumer_key, oct_token)
+ * @param string received
+ * @param string sent
+ * @param string base_string
+ * @param string notes
+ * @param int (optional) user_id
+ */
+ public function addLog ( $keys, $received, $sent, $base_string, $notes, $user_id = null )
+ {
+ $args = array();
+ $ps = array();
+ foreach ($keys as $key => $value)
+ {
+ $args[] = $value;
+ $ps[] = "olg_$key = '%s'";
+ }
+
+ if (!empty($_SERVER['REMOTE_ADDR']))
+ {
+ $remote_ip = $_SERVER['REMOTE_ADDR'];
+ }
+ else if (!empty($_SERVER['REMOTE_IP']))
+ {
+ $remote_ip = $_SERVER['REMOTE_IP'];
+ }
+ else
+ {
+ $remote_ip = '0.0.0.0';
+ }
+
+ // Build the SQL
+ $ps[] = "olg_received = '%s'"; $args[] = $this->makeUTF8($received);
+ $ps[] = "olg_sent = '%s'"; $args[] = $this->makeUTF8($sent);
+ $ps[] = "olg_base_string= '%s'"; $args[] = $base_string;
+ $ps[] = "olg_notes = '%s'"; $args[] = $this->makeUTF8($notes);
+ $ps[] = "olg_usa_id_ref = NULLIF(%d,0)"; $args[] = $user_id;
+ $ps[] = "olg_remote_ip = IFNULL(INET_ATON('%s'),0)"; $args[] = $remote_ip;
+
+ $this->query('INSERT INTO oauth_log SET '.implode(',', $ps), $args);
+ }
+
+
+ /**
+ * Get a page of entries from the log. Returns the last 100 records
+ * matching the options given.
+ *
+ * @param array options
+ * @param int user_id current user
+ * @return array log records
+ */
+ public function listLog ( $options, $user_id )
+ {
+ $where = array();
+ $args = array();
+ if (empty($options))
+ {
+ $where[] = 'olg_usa_id_ref = %d';
+ $args[] = $user_id;
+ }
+ else
+ {
+ foreach ($options as $option => $value)
+ {
+ if (strlen($value) > 0)
+ {
+ switch ($option)
+ {
+ case 'osr_consumer_key':
+ case 'ocr_consumer_key':
+ case 'ost_token':
+ case 'oct_token':
+ $where[] = 'olg_'.$option.' = \'%s\'';
+ $args[] = $value;
+ break;
+ }
+ }
+ }
+
+ $where[] = '(olg_usa_id_ref IS NULL OR olg_usa_id_ref = %d)';
+ $args[] = $user_id;
+ }
+
+ $rs = $this->query_all_assoc('
+ SELECT olg_id,
+ olg_osr_consumer_key AS osr_consumer_key,
+ olg_ost_token AS ost_token,
+ olg_ocr_consumer_key AS ocr_consumer_key,
+ olg_oct_token AS oct_token,
+ olg_usa_id_ref AS user_id,
+ olg_received AS received,
+ olg_sent AS sent,
+ olg_base_string AS base_string,
+ olg_notes AS notes,
+ olg_timestamp AS timestamp,
+ INET_NTOA(olg_remote_ip) AS remote_ip
+ FROM oauth_log
+ WHERE '.implode(' AND ', $where).'
+ ORDER BY olg_id DESC
+ LIMIT 0,100', $args);
+
+ return $rs;
+ }
+
+
+
+ /**
+ * Initialise the database
+ */
+ public function install ()
+ {
+ require_once dirname(__FILE__) . '/mysql/install.php';
+ }
+
+
+ /* ** Some simple helper functions for querying the mysql db ** */
+
+ /**
+ * Perform a query, ignore the results
+ *
+ * @param string sql
+ * @param vararg arguments (for sprintf)
+ */
+ protected function query ( $sql )
+ {
+ $sql = $this->sql_printf(func_get_args());
+ if (!($res = mysql_query($sql, $this->conn)))
+ {
+ $this->sql_errcheck($sql);
+ }
+ if (is_resource($res))
+ {
+ mysql_free_result($res);
+ }
+ }
+
+
+ /**
+ * Perform a query, ignore the results
+ *
+ * @param string sql
+ * @param vararg arguments (for sprintf)
+ * @return array
+ */
+ protected function query_all_assoc ( $sql )
+ {
+ $sql = $this->sql_printf(func_get_args());
+ if (!($res = mysql_query($sql, $this->conn)))
+ {
+ $this->sql_errcheck($sql);
+ }
+ $rs = array();
+ while ($row = mysql_fetch_assoc($res))
+ {
+ $rs[] = $row;
+ }
+ mysql_free_result($res);
+ return $rs;
+ }
+
+
+ /**
+ * Perform a query, return the first row
+ *
+ * @param string sql
+ * @param vararg arguments (for sprintf)
+ * @return array
+ */
+ protected function query_row_assoc ( $sql )
+ {
+ $sql = $this->sql_printf(func_get_args());
+ if (!($res = mysql_query($sql, $this->conn)))
+ {
+ $this->sql_errcheck($sql);
+ }
+ if ($row = mysql_fetch_assoc($res))
+ {
+ $rs = $row;
+ }
+ else
+ {
+ $rs = false;
+ }
+ mysql_free_result($res);
+ return $rs;
+ }
+
+
+ /**
+ * Perform a query, return the first row
+ *
+ * @param string sql
+ * @param vararg arguments (for sprintf)
+ * @return array
+ */
+ protected function query_row ( $sql )
+ {
+ $sql = $this->sql_printf(func_get_args());
+ if (!($res = mysql_query($sql, $this->conn)))
+ {
+ $this->sql_errcheck($sql);
+ }
+ if ($row = mysql_fetch_array($res))
+ {
+ $rs = $row;
+ }
+ else
+ {
+ $rs = false;
+ }
+ mysql_free_result($res);
+ return $rs;
+ }
+
+
+ /**
+ * Perform a query, return the first column of the first row
+ *
+ * @param string sql
+ * @param vararg arguments (for sprintf)
+ * @return mixed
+ */
+ protected function query_one ( $sql )
+ {
+ $sql = $this->sql_printf(func_get_args());
+ if (!($res = mysql_query($sql, $this->conn)))
+ {
+ $this->sql_errcheck($sql);
+ }
+ $val = @mysql_result($res, 0, 0);
+ mysql_free_result($res);
+ return $val;
+ }
+
+
+ /**
+ * Return the number of rows affected in the last query
+ */
+ protected function query_affected_rows ()
+ {
+ return mysql_affected_rows($this->conn);
+ }
+
+
+ /**
+ * Return the id of the last inserted row
+ *
+ * @return int
+ */
+ protected function query_insert_id ()
+ {
+ return mysql_insert_id($this->conn);
+ }
+
+
+ protected function sql_printf ( $args )
+ {
+ $sql = array_shift($args);
+ if (count($args) == 1 && is_array($args[0]))
+ {
+ $args = $args[0];
+ }
+ $args = array_map(array($this, 'sql_escape_string'), $args);
+ return vsprintf($sql, $args);
+ }
+
+
+ protected function sql_escape_string ( $s )
+ {
+ if (is_string($s))
+ {
+ return mysql_real_escape_string($s, $this->conn);
+ }
+ else if (is_null($s))
+ {
+ return NULL;
+ }
+ else if (is_bool($s))
+ {
+ return intval($s);
+ }
+ else if (is_int($s) || is_float($s))
+ {
+ return $s;
+ }
+ else
+ {
+ return mysql_real_escape_string(strval($s), $this->conn);
+ }
+ }
+
+
+ protected function sql_errcheck ( $sql )
+ {
+ if (mysql_errno($this->conn))
+ {
+ $msg = "SQL Error in OAuthStoreMySQL: ".mysql_error($this->conn)."\n\n" . $sql;
+ throw new OAuthException($msg);
+ }
+ }
+}
+
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/store/mysql/install.php b/mod/oauth_api/vendors/oauth/library/store/mysql/install.php
new file mode 100644
index 000000000..0015da5e3
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/store/mysql/install.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * Installs all tables in the mysql.sql file, using the default mysql connection
+ */
+
+/* Change and uncomment this when you need to: */
+
+/*
+mysql_connect('localhost', 'root');
+if (mysql_errno())
+{
+ die(' Error '.mysql_errno().': '.mysql_error());
+}
+mysql_select_db('test');
+*/
+
+$sql = file_get_contents(dirname(__FILE__) . '/mysql.sql');
+$ps = explode('#--SPLIT--', $sql);
+
+foreach ($ps as $p)
+{
+ $p = preg_replace('/^\s*#.*$/m', '', $p);
+
+ mysql_query($p);
+ if (mysql_errno())
+ {
+ die(' Error '.mysql_errno().': '.mysql_error());
+ }
+}
+
+?> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/library/store/mysql/mysql.sql b/mod/oauth_api/vendors/oauth/library/store/mysql/mysql.sql
new file mode 100644
index 000000000..d652a1c99
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/library/store/mysql/mysql.sql
@@ -0,0 +1,219 @@
+# Datamodel for OAuthStoreMySQL
+#
+# You need to add the foreign key constraints for the user ids your are using.
+# I have commented the constraints out, just look for 'usa_id_ref' to enable them.
+#
+# The --SPLIT-- markers are used by the install.php script
+#
+# @version $Id: mysql.sql 51 2008-10-15 15:15:47Z marcw@pobox.com $
+# @author Marc Worrell
+#
+
+# Changes:
+#
+# 2008-10-15 (on r48) Added ttl to consumer and server tokens, added named server tokens
+#
+# ALTER TABLE oauth_server_token
+# ADD ost_token_ttl datetime not null default '9999-12-31',
+# ADD KEY (ost_token_ttl);
+#
+# ALTER TABLE oauth_consumer_token
+# ADD oct_name varchar(64) binary not null default '',
+# ADD oct_token_ttl datetime not null default '9999-12-31',
+# DROP KEY oct_usa_id_ref,
+# ADD UNIQUE KEY (oct_usa_id_ref, oct_ocr_id_ref, oct_token_type, oct_name),
+# ADD KEY (oct_token_ttl);
+#
+# 2008-09-09 (on r5) Added referrer host to server access token
+#
+# ALTER TABLE oauth_server_token ADD ost_referrer_host VARCHAR(128) NOT NULL;
+#
+
+
+#
+# Log table to hold all OAuth request when you enabled logging
+#
+
+CREATE TABLE IF NOT EXISTS oauth_log (
+ olg_id int(11) not null auto_increment,
+ olg_osr_consumer_key varchar(64) binary,
+ olg_ost_token varchar(64) binary,
+ olg_ocr_consumer_key varchar(64) binary,
+ olg_oct_token varchar(64) binary,
+ olg_usa_id_ref int(11),
+ olg_received text not null,
+ olg_sent text not null,
+ olg_base_string text not null,
+ olg_notes text not null,
+ olg_timestamp timestamp not null default current_timestamp,
+ olg_remote_ip bigint not null,
+
+ primary key (olg_id),
+ key (olg_osr_consumer_key, olg_id),
+ key (olg_ost_token, olg_id),
+ key (olg_ocr_consumer_key, olg_id),
+ key (olg_oct_token, olg_id),
+ key (olg_usa_id_ref, olg_id)
+
+# , foreign key (olg_usa_id_ref) references any_user_auth (usa_id_ref)
+# on update cascade
+# on delete cascade
+) engine=InnoDB default charset=utf8;
+
+#--SPLIT--
+
+#
+# /////////////////// CONSUMER SIDE ///////////////////
+#
+
+# This is a registry of all consumer codes we got from other servers
+# The consumer_key/secret is obtained from the server
+# We also register the server uri, so that we can find the consumer key and secret
+# for a certain server. From that server we can check if we have a token for a
+# particular user.
+
+CREATE TABLE IF NOT EXISTS oauth_consumer_registry (
+ ocr_id int(11) not null auto_increment,
+ ocr_usa_id_ref int(11),
+ ocr_consumer_key varchar(64) binary not null,
+ ocr_consumer_secret varchar(64) binary not null,
+ ocr_signature_methods varchar(255) not null default 'HMAC-SHA1,PLAINTEXT',
+ ocr_server_uri varchar(255) not null,
+ ocr_server_uri_host varchar(128) not null,
+ ocr_server_uri_path varchar(128) binary not null,
+
+ ocr_request_token_uri varchar(255) not null,
+ ocr_authorize_uri varchar(255) not null,
+ ocr_access_token_uri varchar(255) not null,
+ ocr_timestamp timestamp not null default current_timestamp,
+
+ primary key (ocr_id),
+ unique key (ocr_consumer_key, ocr_usa_id_ref),
+ key (ocr_server_uri),
+ key (ocr_server_uri_host, ocr_server_uri_path),
+ key (ocr_usa_id_ref)
+
+# , foreign key (ocr_usa_id_ref) references any_user_auth(usa_id_ref)
+# on update cascade
+# on delete set null
+) engine=InnoDB default charset=utf8;
+
+#--SPLIT--
+
+# Table used to sign requests for sending to a server by the consumer
+# The key is defined for a particular user. Only one single named
+# key is allowed per user/server combination
+
+CREATE TABLE IF NOT EXISTS oauth_consumer_token (
+ oct_id int(11) not null auto_increment,
+ oct_ocr_id_ref int(11) not null,
+ oct_usa_id_ref int(11) not null,
+ oct_name varchar(64) binary not null default '',
+ oct_token varchar(64) binary not null,
+ oct_token_secret varchar(64) binary not null,
+ oct_token_type enum('request','authorized','access'),
+ oct_token_ttl datetime not null default '9999-12-31',
+ oct_timestamp timestamp not null default current_timestamp,
+
+ primary key (oct_id),
+ unique key (oct_ocr_id_ref, oct_token),
+ unique key (oct_usa_id_ref, oct_ocr_id_ref, oct_token_type, oct_name),
+ key (oct_token_ttl),
+
+ foreign key (oct_ocr_id_ref) references oauth_consumer_registry (ocr_id)
+ on update cascade
+ on delete cascade
+
+# , foreign key (oct_usa_id_ref) references any_user_auth (usa_id_ref)
+# on update cascade
+# on delete cascade
+) engine=InnoDB default charset=utf8;
+
+#--SPLIT--
+
+
+#
+# ////////////////// SERVER SIDE /////////////////
+#
+
+# Table holding consumer key/secret combos an user issued to consumers.
+# Used for verification of incoming requests.
+
+CREATE TABLE IF NOT EXISTS oauth_server_registry (
+ osr_id int(11) not null auto_increment,
+ osr_usa_id_ref int(11),
+ osr_consumer_key varchar(64) binary not null,
+ osr_consumer_secret varchar(64) binary not null,
+ osr_enabled tinyint(1) not null default '1',
+ osr_status varchar(16) not null,
+ osr_requester_name varchar(64) not null,
+ osr_requester_email varchar(64) not null,
+ osr_callback_uri varchar(255) not null,
+ osr_application_uri varchar(255) not null,
+ osr_application_title varchar(80) not null,
+ osr_application_descr text not null,
+ osr_application_notes text not null,
+ osr_application_type varchar(20) not null,
+ osr_application_commercial tinyint(1) not null default '0',
+ osr_issue_date datetime not null,
+ osr_timestamp timestamp not null default current_timestamp,
+
+ primary key (osr_id),
+ unique key (osr_consumer_key),
+ key (osr_usa_id_ref)
+
+# , foreign key (osr_usa_id_ref) references any_user_auth(usa_id_ref)
+# on update cascade
+# on delete set null
+) engine=InnoDB default charset=utf8;
+
+#--SPLIT--
+
+# Nonce used by a certain consumer, every used nonce should be unique, this prevents
+# replaying attacks. We need to store all timestamp/nonce combinations for the
+# maximum timestamp received.
+
+CREATE TABLE IF NOT EXISTS oauth_server_nonce (
+ osn_id int(11) not null auto_increment,
+ osn_consumer_key varchar(64) binary not null,
+ osn_token varchar(64) binary not null,
+ osn_timestamp bigint not null,
+ osn_nonce varchar(80) binary not null,
+
+ primary key (osn_id),
+ unique key (osn_consumer_key, osn_token, osn_timestamp, osn_nonce)
+) engine=InnoDB default charset=utf8;
+
+#--SPLIT--
+
+# Table used to verify signed requests sent to a server by the consumer
+# When the verification is succesful then the associated user id is returned.
+
+CREATE TABLE IF NOT EXISTS oauth_server_token (
+ ost_id int(11) not null auto_increment,
+ ost_osr_id_ref int(11) not null,
+ ost_usa_id_ref int(11) not null,
+ ost_token varchar(64) binary not null,
+ ost_token_secret varchar(64) binary not null,
+ ost_token_type enum('request','access'),
+ ost_authorized tinyint(1) not null default '0',
+ ost_referrer_host varchar(128) not null,
+ ost_token_ttl datetime not null default '9999-12-31',
+ ost_timestamp timestamp not null default current_timestamp,
+
+ primary key (ost_id),
+ unique key (ost_token),
+ key (ost_osr_id_ref),
+ key (ost_token_ttl),
+
+ foreign key (ost_osr_id_ref) references oauth_server_registry (osr_id)
+ on update cascade
+ on delete cascade
+
+# , foreign key (ost_usa_id_ref) references any_user_auth (usa_id_ref)
+# on update cascade
+# on delete cascade
+) engine=InnoDB default charset=utf8;
+
+
+
diff --git a/mod/oauth_api/vendors/oauth/test/discovery/xrds-fireeagle.xrds b/mod/oauth_api/vendors/oauth/test/discovery/xrds-fireeagle.xrds
new file mode 100644
index 000000000..0f5eba222
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/test/discovery/xrds-fireeagle.xrds
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XRDS xmlns="xri://$xrds">
+
+ <!-- FireEagle User-Centric OAuth Configuration -->
+ <XRD xml:id="oauth" xmlns:simple="http://xrds-simple.net/core/1.0" xmlns="xri://$XRD*($v*2.0)" version="2.0">
+
+ <Type>xri://$xrds*simple</Type>
+ <Expires>2008-04-15T00:25:30-07:00</Expires>
+
+ <!-- Request Token -->
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/request</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/parameters/post-body</Type>
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+ <Type>http://oauth.net/core/1.0/signature/HMAC-SHA1</Type>
+ <Type>http://oauth.net/core/1.0/signature/PLAINTEXT</Type>
+
+ <URI>https://fireeagle.yahooapis.com/oauth/request_token</URI>
+ </Service>
+
+ <!-- User Authorization -->
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/authorize</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+
+ <URI>https://fireeagle.yahooapis.com/oauth/access_token</URI>
+ </Service>
+
+ <!-- Access Token -->
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/access</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/parameters/post-body</Type>
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+ <Type>http://oauth.net/core/1.0/signature/HMAC-SHA1</Type>
+ <Type>http://oauth.net/core/1.0/signature/PLAINTEXT</Type>
+
+ <URI>http://fireeagle.yahoo.net/oauth/authorize</URI>
+ </Service>
+
+ <!-- Protected Resources -->
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/resource</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/parameters/post-body</Type>
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+ <Type>http://oauth.net/core/1.0/signature/HMAC-SHA1</Type>
+ <Type>http://oauth.net/core/1.0/signature/PLAINTEXT</Type>
+ </Service>
+
+ <!-- Consumer Identity -->
+
+ <!-- Manual Consumer Identity Allocation -->
+ <Service>
+ <Type>http://oauth.net/discovery/1.0/consumer-identity/oob</Type>
+ <URI>https://fireeagle.yahoo.net/developer/create</URI>
+ </Service>
+ </XRD>
+
+ <!-- Global Resource Definition -->
+
+ <XRD xmlns="xri://$XRD*($v*2.0)" version="2.0">
+ <Type>xri://$xrds*simple</Type>
+
+ <!-- OAuth Endpoints Definition -->
+ <Service>
+ <Type>http://oauth.net/discovery/1.0</Type>
+ <URI>#oauth</URI>
+ </Service>
+ </XRD>
+
+</XRDS> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/test/discovery/xrds-getsatisfaction.xrds b/mod/oauth_api/vendors/oauth/test/discovery/xrds-getsatisfaction.xrds
new file mode 100644
index 000000000..ab94b5bea
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/test/discovery/xrds-getsatisfaction.xrds
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XRDS xmlns="xri://$xrds">
+
+ <XRD xml:id="oauth" xmlns:simple="http://xrds-simple.net/core/1.0" xmlns="xri://$XRD*($v*2.0)" version="2.0">
+ <Type>xri://$xrds*simple</Type>
+ <Expires>2008-04-30T23:59:59Z</Expires>
+
+ <!-- Request Token -->
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/request</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/signature/HMAC-SHA1</Type>
+
+ <URI>http://getsatisfaction.com/api/request_token</URI>
+ </Service>
+
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/authorize</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+
+ <URI>http://getsatisfaction.com/api/authorize</URI>
+ </Service>
+
+ <!-- Access Token -->
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/access</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/signature/HMAC-SHA1</Type>
+
+ <URI>http://getsatisfaction.com/api/access_token</URI>
+ </Service>
+
+ <!-- Protected Resources -->
+ <!--
+
+ To test successful access token grant, make a request against
+
+ http://api.getsatisfaction.com/me
+
+ The API should respond with hCard of the user who authorized the token
+ -->
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/resource</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/signature/HMAC-SHA1</Type>
+
+ </Service>
+
+ <!-- Consumer Identity -->
+
+ <Service>
+ <Type>http://oauth.net/discovery/1.0/consumer-identity/oob</Type>
+ <URI>http://getsatisfaction.com/me/extensions/new</URI>
+ </Service>
+ </XRD>
+
+ <!-- Global Resource Definition -->
+
+ <XRD xmlns="xri://$XRD*($v*2.0)" version="2.0">
+ <Type>xri://$xrds*simple</Type>
+
+ <!-- OAuth Endpoints Definition -->
+ <Service priority="10">
+ <Type>http://oauth.net/discovery/1.0</Type>
+ <URI>#oauth</URI>
+ </Service>
+ </XRD>
+
+</XRDS> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/test/discovery/xrds-magnolia.xrds b/mod/oauth_api/vendors/oauth/test/discovery/xrds-magnolia.xrds
new file mode 100644
index 000000000..361b5c9a1
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/test/discovery/xrds-magnolia.xrds
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XRDS xmlns="xri://$xrds">
+
+ <!-- Ma.gnolia OAuth Configuration -->
+ <XRD xml:id="oauth" xmlns="xri://$XRD*($v*2.0)" version="2.0">
+
+ <Type>xri://$xrds*simple</Type>
+ <Expires>2008-04-13T07:34:58Z</Expires>
+
+ <!-- Request Token -->
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/request</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/parameters/post-body</Type>
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+ <Type>http://oauth.net/core/1.0/signature/HMAC-SHA1</Type>
+ <Type>http://oauth.net/core/1.0/signature/RSA-SHA1</Type>
+ <Type>http://oauth.net/core/1.0/signature/PLAINTEXT</Type>
+
+ <URI>https://ma.gnolia.com/oauth/get_request_token</URI>
+ </Service>
+
+ <!-- User Authorization (HTTPS Prefered) -->
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/authorize</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+
+ <URI priority="10">https://ma.gnolia.com/oauth/authorize</URI>
+ <URI priority="20">http://ma.gnolia.com/oauth/authorize</URI>
+ </Service>
+
+ <!-- Access Token -->
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/access</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/parameters/post-body</Type>
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+ <Type>http://oauth.net/core/1.0/signature/HMAC-SHA1</Type>
+ <Type>http://oauth.net/core/1.0/signature/RSA-SHA1</Type>
+ <Type>http://oauth.net/core/1.0/signature/PLAINTEXT</Type>
+
+ <URI>https://ma.gnolia.com/oauth/get_access_token</URI>
+ </Service>
+
+ <!-- Protected Resources -->
+ <Service>
+ <Type>http://oauth.net/core/1.0/endpoint/resource</Type>
+
+ <Type>http://oauth.net/core/1.0/parameters/auth-header</Type>
+ <Type>http://oauth.net/core/1.0/parameters/post-body</Type>
+ <Type>http://oauth.net/core/1.0/parameters/uri-query</Type>
+ <Type>http://oauth.net/core/1.0/signature/HMAC-SHA1</Type>
+ <Type>http://oauth.net/core/1.0/signature/RSA-SHA1</Type>
+ </Service>
+
+ <!-- Consumer Identity -->
+
+ <!-- Manual Consumer Identity Allocation -->
+ <Service>
+ <Type>http://oauth.net/discovery/1.0/consumer-identity/oob</Type>
+ <URI>http://ma.gnolia.com/applications/new</URI>
+ </Service>
+ </XRD>
+
+ <!-- Global Resource Definition -->
+
+ <XRD xmlns="xri://$XRD*($v*2.0)" version="2.0">
+ <Type>xri://$xrds*simple</Type>
+
+ <!-- OAuth Endpoints Definition -->
+ <Service priority="10">
+ <Type>http://oauth.net/discovery/1.0</Type>
+ <URI>#oauth</URI>
+ </Service>
+ </XRD>
+
+</XRDS> \ No newline at end of file
diff --git a/mod/oauth_api/vendors/oauth/test/oauth_test.php b/mod/oauth_api/vendors/oauth/test/oauth_test.php
new file mode 100644
index 000000000..0c0504c70
--- /dev/null
+++ b/mod/oauth_api/vendors/oauth/test/oauth_test.php
@@ -0,0 +1,188 @@
+<?php
+
+/**
+ * Tests of OAuth implementation.
+ *
+ * @version $Id$
+ * @author Marc Worrell <marcw@pobox.com>
+ * @date Nov 29, 2007 3:46:56 PM
+ * @see http://wiki.oauth.net/TestCases
+ *
+ * The MIT License
+ *
+ * Copyright (c) 2007-2008 Mediamatic Lab
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+require_once dirname(__FILE__) . '/../library/OAuthRequest.php';
+require_once dirname(__FILE__) . '/../library/OAuthRequester.php';
+require_once dirname(__FILE__) . '/../library/OAuthRequestSigner.php';
+require_once dirname(__FILE__) . '/../library/OAuthRequestVerifier.php';
+
+if (!function_exists('getallheaders'))
+{
+ function getallheaders()
+ {
+ return array();
+ }
+}
+
+
+oauth_test();
+
+function oauth_test ()
+{
+ error_reporting(E_ALL);
+
+ header('Content-Type: text/plain; charset=utf-8');
+
+ echo "Performing OAuth module tests.\n\n";
+ echo "See also: http://wiki.oauth.net/TestCases\n\n";
+
+ assert_options(ASSERT_CALLBACK, 'oauth_assert_handler');
+ assert_options(ASSERT_WARNING, 0);
+
+ $req = new OAuthRequest('http://www.example.com', 'GET');
+
+ echo "***** Parameter Encoding *****\n\n";
+
+ assert('$req->urlencode(\'abcABC123\') == \'abcABC123\'');
+ assert('$req->urlencode(\'-._~\') == \'-._~\'');
+ assert('$req->urlencode(\'%\') == \'%25\'');
+ assert('$req->urlencode(\'&=*\') == \'%26%3D%2A\'');
+ assert('$req->urlencode(\'&=*\') == \'%26%3D%2A\'');
+ assert('$req->urlencode("\n") == \'%0A\'');
+ assert('$req->urlencode(" ") == \'%20\'');
+ assert('$req->urlencode("\x7f") == \'%7F\'');
+
+
+ echo "***** Normalize Request Parameters *****\n\n";
+
+ $req = new OAuthRequest('http://example.com/?name', 'GET');
+ assert('$req->getNormalizedParams() == \'name=\'');
+
+ $req = new OAuthRequest('http://example.com/?a=b', 'GET');
+ assert('$req->getNormalizedParams() == \'a=b\'');
+
+ $req = new OAuthRequest('http://example.com/?a=b&c=d', 'GET');
+ assert('$req->getNormalizedParams() == \'a=b&c=d\'');
+
+ // At this moment we don't support two parameters with the same name
+ // so I changed this test case to "a=" and "b=" and not "a=" and "a="
+ $req = new OAuthRequest('http://example.com/?b=x!y&a=x+y', 'GET');
+ assert('$req->getNormalizedParams() == \'a=x%20y&b=x%21y\'');
+
+ $req = new OAuthRequest('http://example.com/?x!y=a&x=a', 'GET');
+ assert('$req->getNormalizedParams() == \'x=a&x%21y=a\'');
+
+
+ echo "***** Base String *****\n\n";
+
+ $req = new OAuthRequest('http://example.com/?n=v', 'GET');
+ assert('$req->signatureBaseString() == \'GET&http%3A%2F%2Fexample.com%2F&n%3Dv\'');
+
+ $req = new OAuthRequest(
+ 'https://photos.example.net/request_token',
+ 'POST',
+ 'oauth_version=1.0&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_timestamp=1191242090&oauth_nonce=hsu94j3884jdopsl&oauth_signature_method=PLAINTEXT&oauth_signature=ignored',
+ array('X-OAuth-Test' => true));
+ assert('$req->signatureBaseString() == \'POST&https%3A%2F%2Fphotos.example.net%2Frequest_token&oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dhsu94j3884jdopsl%26oauth_signature_method%3DPLAINTEXT%26oauth_timestamp%3D1191242090%26oauth_version%3D1.0\'');
+
+ $req = new OAuthRequest(
+ 'http://photos.example.net/photos?file=vacation.jpg&size=original&oauth_version=1.0&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_token=nnch734d00sl2jdk&oauth_timestamp=1191242096&oauth_nonce=kllo9940pd9333jh&oauth_signature=ignored&oauth_signature_method=HMAC-SHA1',
+ 'GET');
+ assert('$req->signatureBaseString() == \'GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal\'');
+
+
+ echo "***** HMAC-SHA1 *****\nRequest signing\n";
+
+ OAuthStore::instance('MySQL', array('conn'=>false));
+ $req = new OAuthRequestSigner('http://photos.example.net/photos?file=vacation.jpg&size=original', 'GET');
+
+ assert('$req->urldecode($req->calculateDataSignature(\'bs\', \'cs\', \'\', \'HMAC-SHA1\')) == \'egQqG5AJep5sJ7anhXju1unge2I=\'');
+ assert('$req->urldecode($req->calculateDataSignature(\'bs\', \'cs\', \'ts\', \'HMAC-SHA1\')) == \'VZVjXceV7JgPq/dOTnNmEfO0Fv8=\'');
+
+ $secrets = array(
+ 'consumer_key' => 'dpf43f3p2l4k3l03',
+ 'consumer_secret' => 'kd94hf93k423kf44',
+ 'token' => 'nnch734d00sl2jdk',
+ 'token_secret' => 'pfkkdhi9sl3r4s00',
+ 'signature_methods' => array('HMAC-SHA1'),
+ 'nonce' => 'kllo9940pd9333jh',
+ 'timestamp' => '1191242096'
+ );
+ $req->sign(0, $secrets);
+ assert('$req->getParam(\'oauth_signature\', true) == \'tR3+Ty81lMeYAr/Fid0kMTYa/WM=\'');
+
+ echo "***** HMAC-SHA1 *****\nRequest verification\n";
+
+ $req = new OAuthRequestVerifier(
+ 'http://photos.example.net/photos?file=vacation.jpg&size=original'
+ .'&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_token=nnch734d00sl2jdk'
+ .'&oauth_signature_method=HMAC-SHA1&oauth_nonce=kllo9940pd9333jh'
+ .'&oauth_timestamp=1191242096&oauth_version=1.0'
+ .'&oauth_signature='.rawurlencode('tR3+Ty81lMeYAr/Fid0kMTYa/WM=')
+ , 'GET');
+
+ $req->verifySignature('kd94hf93k423kf44', 'pfkkdhi9sl3r4s00');
+
+ echo "\n";
+ echo "***** Yahoo! test case ******\n\n";
+
+ OAuthStore::instance('MySQL', array('conn'=>false));
+ $req = new OAuthRequestSigner('http://example.com:80/photo', 'GET');
+
+ $req->setParam('title', 'taken with a 30% orange filter');
+ $req->setParam('file', 'mountain & water view');
+ $req->setParam('format', 'jpeg');
+ $req->setParam('include', array('date','aperture'));
+
+ $secrets = array(
+ 'consumer_key' => '1234=asdf=4567',
+ 'consumer_secret' => 'erks823*43=asd&123ls%23',
+ 'token' => 'asdf-4354=asew-5698',
+ 'token_secret' => 'dis9$#$Js009%==',
+ 'signature_methods' => array('HMAC-SHA1'),
+ 'nonce' => '3jd834jd9',
+ 'timestamp' => '12303202302'
+ );
+ $req->sign(0, $secrets);
+
+ // echo "Basestring:\n",$req->signatureBaseString(), "\n\n";
+
+ //echo "queryString:\n",$req->getQueryString(), "\n\n";
+ assert('$req->getQueryString() == \'title=taken%20with%20a%2030%25%20orange%20filter&file=mountain%20%26%20water%20view&format=jpeg&include=date&include=aperture\'');
+
+ //echo "oauth_signature:\n",$req->getParam('oauth_signature', true),"\n\n";
+ assert('$req->getParam(\'oauth_signature\', true) == \'jMdUSR1vOr3SzNv3gZ5DDDuGirA=\'');
+
+ echo "\n\nFinished.\n";
+}
+
+
+function oauth_assert_handler ( $file, $line, $code )
+{
+ echo "\nAssertion failed in $file:$line
+ $code\n\n";
+}
+
+/* vi:set ts=4 sts=4 sw=4 binary noeol: */
+
+?> \ No newline at end of file
diff --git a/mod/pages/actions/pages/delete.php b/mod/pages/actions/pages/delete.php
new file mode 100644
index 000000000..7a314a280
--- /dev/null
+++ b/mod/pages/actions/pages/delete.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Remove a page
+ *
+ * Subpages are not deleted but are moved up a level in the tree
+ *
+ * @package ElggPages
+ */
+
+$guid = get_input('guid');
+$page = get_entity($guid);
+if (elgg_instanceof($page, 'object', 'page') || elgg_instanceof($page, 'object', 'page_top')) {
+ // only allow owners and admin to delete
+ if (elgg_is_admin_logged_in() || elgg_get_logged_in_user_guid() == $page->getOwnerGuid()) {
+ $container = get_entity($page->container_guid);
+
+ // Bring all child elements forward
+ $parent = $page->parent_guid;
+ $children = elgg_get_entities_from_metadata(array(
+ 'metadata_name' => 'parent_guid',
+ 'metadata_value' => $page->getGUID()
+ ));
+ if ($children) {
+ foreach ($children as $child) {
+ $child->parent_guid = $parent;
+ }
+ }
+
+ if ($page->delete()) {
+ system_message(elgg_echo('pages:delete:success'));
+ if ($parent) {
+ if ($parent = get_entity($parent)) {
+ forward($parent->getURL());
+ }
+ }
+ if (elgg_instanceof($container, 'group')) {
+ forward("pages/group/$container->guid/all");
+ } else {
+ forward("pages/owner/$container->username");
+ }
+ }
+ }
+}
+
+register_error(elgg_echo('pages:delete:failure'));
+forward(REFERER);
diff --git a/mod/pages/actions/pages/edit.php b/mod/pages/actions/pages/edit.php
new file mode 100644
index 000000000..40215e02e
--- /dev/null
+++ b/mod/pages/actions/pages/edit.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * Create or edit a page
+ *
+ * @package ElggPages
+ */
+
+$variables = elgg_get_config('pages');
+$input = array();
+foreach ($variables as $name => $type) {
+ if ($name == 'title') {
+ $input[$name] = htmlspecialchars(get_input($name, '', false), ENT_QUOTES, 'UTF-8');
+ } else {
+ $input[$name] = get_input($name);
+ }
+ if ($type == 'tags') {
+ $input[$name] = string_to_tag_array($input[$name]);
+ }
+}
+
+// Get guids
+$page_guid = (int)get_input('page_guid');
+$container_guid = (int)get_input('container_guid');
+$parent_guid = (int)get_input('parent_guid');
+
+elgg_make_sticky_form('page');
+
+if (!$input['title']) {
+ register_error(elgg_echo('pages:error:no_title'));
+ forward(REFERER);
+}
+
+if ($page_guid) {
+ $page = get_entity($page_guid);
+ if (!$page || !$page->canEdit()) {
+ register_error(elgg_echo('pages:error:no_save'));
+ forward(REFERER);
+ }
+ $new_page = false;
+} else {
+ $page = new ElggObject();
+ if ($parent_guid) {
+ $page->subtype = 'page';
+ } else {
+ $page->subtype = 'page_top';
+ }
+ $new_page = true;
+}
+
+if (sizeof($input) > 0) {
+ // don't change access if not an owner/admin
+ $user = elgg_get_logged_in_user_entity();
+ $can_change_access = true;
+
+ if ($user && $page) {
+ $can_change_access = $user->isAdmin() || $user->getGUID() == $page->owner_guid;
+ }
+
+ foreach ($input as $name => $value) {
+ if (($name == 'access_id' || $name == 'write_access_id') && !$can_change_access) {
+ continue;
+ }
+ if ($name == 'parent_guid') {
+ continue;
+ }
+
+ $page->$name = $value;
+ }
+}
+
+// need to add check to make sure user can write to container
+$page->container_guid = $container_guid;
+
+if ($parent_guid && $parent_guid != $page_guid) {
+ // Check if parent isn't below the page in the tree
+ if ($page_guid) {
+ $tree_page = get_entity($parent_guid);
+ while ($tree_page->parent_guid > 0 && $page_guid != $tree_page->guid) {
+ $tree_page = get_entity($tree_page->parent_guid);
+ }
+ // If is below, bring all child elements forward
+ if ($page_guid == $tree_page->guid) {
+ $previous_parent = $page->parent_guid;
+ $children = elgg_get_entities_from_metadata(array(
+ 'metadata_name' => 'parent_guid',
+ 'metadata_value' => $page->getGUID()
+ ));
+ if ($children) {
+ foreach ($children as $child) {
+ $child->parent_guid = $previous_parent;
+ }
+ }
+ }
+ }
+ $page->parent_guid = $parent_guid;
+}
+
+if ($page->save()) {
+
+ elgg_clear_sticky_form('page');
+
+ // Now save description as an annotation
+ $page->annotate('page', $page->description, $page->access_id);
+
+ system_message(elgg_echo('pages:saved'));
+
+ if ($new_page) {
+ add_to_river('river/object/page/create', 'create', elgg_get_logged_in_user_guid(), $page->guid);
+ }
+
+ forward($page->getURL());
+} else {
+ register_error(elgg_echo('pages:error:notsaved'));
+ forward(REFERER);
+}
diff --git a/mod/pages/images/pages.gif b/mod/pages/images/pages.gif
new file mode 100644
index 000000000..7efcb7278
--- /dev/null
+++ b/mod/pages/images/pages.gif
Binary files differ
diff --git a/mod/pages/images/pages_lrg.gif b/mod/pages/images/pages_lrg.gif
new file mode 100644
index 000000000..234a52672
--- /dev/null
+++ b/mod/pages/images/pages_lrg.gif
Binary files differ
diff --git a/mod/pages/languages/en.php b/mod/pages/languages/en.php
new file mode 100644
index 000000000..930676b3e
--- /dev/null
+++ b/mod/pages/languages/en.php
@@ -0,0 +1,114 @@
+<?php
+/**
+ * Pages languages
+ *
+ * @package ElggPages
+ */
+
+$english = array(
+
+ /**
+ * Menu items and titles
+ */
+
+ 'pages' => "Pages",
+ 'pages:owner' => "%s's pages",
+ 'pages:friends' => "Friends' pages",
+ 'pages:all' => "All site pages",
+ 'pages:add' => "Add page",
+
+ 'pages:group' => "Group pages",
+ 'groups:enablepages' => 'Enable group pages',
+
+ 'pages:edit' => "Edit this page",
+ 'pages:delete' => "Delete this page",
+ 'pages:history' => "History",
+ 'pages:view' => "View page",
+ 'pages:revision' => "Revision",
+
+ 'pages:navigation' => "Navigation",
+ 'pages:new' => "A new page",
+ 'pages:notification' =>
+'%s added a new page:
+
+%s
+%s
+
+View and comment on the new page:
+%s
+',
+ 'item:object:page_top' => 'Top-level pages',
+ 'item:object:page' => 'Pages',
+ 'pages:nogroup' => 'This group does not have any pages yet',
+ 'pages:more' => 'More pages',
+ 'pages:none' => 'No pages created yet',
+
+ /**
+ * River
+ **/
+
+ 'river:create:object:page' => '%s created a page %s',
+ 'river:create:object:page_top' => '%s created a page %s',
+ 'river:update:object:page' => '%s updated a page %s',
+ 'river:update:object:page_top' => '%s updated a page %s',
+ 'river:comment:object:page' => '%s commented on a page titled %s',
+ 'river:comment:object:page_top' => '%s commented on a page titled %s',
+
+ /**
+ * Form fields
+ */
+
+ 'pages:title' => 'Page title',
+ 'pages:description' => 'Page text',
+ 'pages:tags' => 'Tags',
+ 'pages:parent_guid' => 'Parent page',
+ 'pages:access_id' => 'Read access',
+ 'pages:write_access_id' => 'Write access',
+
+ /**
+ * Status and error messages
+ */
+ 'pages:noaccess' => 'No access to page',
+ 'pages:cantedit' => 'You cannot edit this page',
+ 'pages:saved' => 'Page saved',
+ 'pages:notsaved' => 'Page could not be saved',
+ 'pages:error:no_title' => 'You must specify a title for this page.',
+ 'pages:delete:success' => 'The page was successfully deleted.',
+ 'pages:delete:failure' => 'The page could not be deleted.',
+
+ /**
+ * Page
+ */
+ 'pages:strapline' => 'Last updated %s by %s',
+
+ /**
+ * History
+ */
+ 'pages:revision:subtitle' => 'Revision created %s by %s',
+
+ /**
+ * Widget
+ **/
+
+ 'pages:num' => 'Number of pages to display',
+ 'pages:widget:description' => "This is a list of your pages.",
+
+ /**
+ * Submenu items
+ */
+ 'pages:label:view' => "View page",
+ 'pages:label:edit' => "Edit page",
+ 'pages:label:history' => "Page history",
+
+ /**
+ * Sidebar items
+ */
+ 'pages:sidebar:this' => "This page",
+ 'pages:sidebar:children' => "Sub-pages",
+ 'pages:sidebar:parent' => "Parent",
+
+ 'pages:newchild' => "Create a sub-page",
+ 'pages:backtoparent' => "Back to '%s'",
+);
+
+add_translation("en", $english);
diff --git a/mod/pages/lib/pages.php b/mod/pages/lib/pages.php
new file mode 100644
index 000000000..afe42b68f
--- /dev/null
+++ b/mod/pages/lib/pages.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * Pages function library
+ */
+
+/**
+ * Prepare the add/edit form variables
+ *
+ * @param ElggObject $page
+ * @return array
+ */
+function pages_prepare_form_vars($page = null, $parent_guid = 0) {
+
+ // input names => defaults
+ $values = array(
+ 'title' => '',
+ 'description' => '',
+ 'access_id' => ACCESS_DEFAULT,
+ 'write_access_id' => ACCESS_DEFAULT,
+ 'tags' => '',
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'guid' => null,
+ 'entity' => $page,
+ 'parent_guid' => $parent_guid,
+ );
+
+ if ($page) {
+ foreach (array_keys($values) as $field) {
+ if (isset($page->$field)) {
+ $values[$field] = $page->$field;
+ }
+ }
+ }
+
+ if (elgg_is_sticky_form('page')) {
+ $sticky_values = elgg_get_sticky_values('page');
+ foreach ($sticky_values as $key => $value) {
+ $values[$key] = $value;
+ }
+ }
+
+ elgg_clear_sticky_form('page');
+
+ return $values;
+}
+
+/**
+ * Recurses the page tree and adds the breadcrumbs for all ancestors
+ *
+ * @param ElggObject $page Page entity
+ */
+function pages_prepare_parent_breadcrumbs($page) {
+ if ($page && $page->parent_guid) {
+ $parents = array();
+ $parent = get_entity($page->parent_guid);
+ while ($parent) {
+ array_push($parents, $parent);
+ $parent = get_entity($parent->parent_guid);
+ }
+ while ($parents) {
+ $parent = array_pop($parents);
+ elgg_push_breadcrumb($parent->title, $parent->getURL());
+ }
+ }
+}
+
+/**
+ * Produce the navigation tree
+ *
+ * @param ElggEntity $container Container entity for the pages
+ */
+function pages_get_navigation_tree($container) {
+ if (!$container) {
+ return;
+ }
+
+ $top_pages = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'page_top',
+ 'container_guid' => $container->getGUID(),
+ 'limit' => 0,
+ ));
+
+ if (!$top_pages) {
+ return;
+ }
+
+ $tree = array();
+ $depths = array();
+
+ foreach ($top_pages as $page) {
+ $tree[] = array(
+ 'guid' => $page->getGUID(),
+ 'title' => $page->title,
+ 'url' => $page->getURL(),
+ 'depth' => 0,
+ );
+ $depths[$page->guid] = 0;
+
+ $stack = array();
+ array_push($stack, $page);
+ while (count($stack) > 0) {
+ $parent = array_pop($stack);
+ $children = elgg_get_entities_from_metadata(array(
+ 'type' => 'object',
+ 'subtype' => 'page',
+ 'metadata_name' => 'parent_guid',
+ 'metadata_value' => $parent->getGUID(),
+ 'limit' => 0,
+ ));
+
+ if ($children) {
+ foreach ($children as $child) {
+ $tree[] = array(
+ 'guid' => $child->getGUID(),
+ 'title' => $child->title,
+ 'url' => $child->getURL(),
+ 'parent_guid' => $parent->getGUID(),
+ 'depth' => $depths[$parent->guid] + 1,
+ );
+ $depths[$child->guid] = $depths[$parent->guid] + 1;
+ array_push($stack, $child);
+ }
+ }
+ }
+ }
+ return $tree;
+}
+
+/**
+ * Register the navigation menu
+ *
+ * @param ElggEntity $container Container entity for the pages
+ */
+function pages_register_navigation_tree($container) {
+ $pages = pages_get_navigation_tree($container);
+ if ($pages) {
+ foreach ($pages as $page) {
+ elgg_register_menu_item('pages_nav', array(
+ 'name' => $page['guid'],
+ 'text' => $page['title'],
+ 'href' => $page['url'],
+ 'parent_name' => $page['parent_guid'],
+ ));
+ }
+ }
+}
diff --git a/mod/pages/manifest.xml b/mod/pages/manifest.xml
new file mode 100644
index 000000000..4cf999f45
--- /dev/null
+++ b/mod/pages/manifest.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Pages</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>content</category>
+ <category>widget</category>
+ <description>Collaborative editing tool. Enables users to create pages similar to a wiki without having to know wiki syntax.</description>
+ <website>http://www.elgg.org</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/pages/pages/pages/edit.php b/mod/pages/pages/pages/edit.php
new file mode 100644
index 000000000..1f411b94d
--- /dev/null
+++ b/mod/pages/pages/pages/edit.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Edit a page
+ *
+ * @package ElggPages
+ */
+
+gatekeeper();
+
+$page_guid = (int)get_input('guid');
+$page = get_entity($page_guid);
+if (!$page) {
+ register_error(elgg_echo('noaccess'));
+ forward('');
+}
+
+$container = $page->getContainerEntity();
+if (!$container) {
+ register_error(elgg_echo('noaccess'));
+ forward('');
+}
+
+elgg_set_page_owner_guid($container->getGUID());
+
+elgg_push_breadcrumb($page->title, $page->getURL());
+elgg_push_breadcrumb(elgg_echo('edit'));
+
+$title = elgg_echo("pages:edit");
+
+if ($page->canEdit()) {
+ $vars = pages_prepare_form_vars($page);
+ $content = elgg_view_form('pages/edit', array(), $vars);
+} else {
+ $content = elgg_echo("pages:noaccess");
+}
+
+$body = elgg_view_layout('content', array(
+ 'filter' => '',
+ 'content' => $content,
+ 'title' => $title,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/pages/pages/pages/friends.php b/mod/pages/pages/pages/friends.php
new file mode 100644
index 000000000..87ac631c2
--- /dev/null
+++ b/mod/pages/pages/pages/friends.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * List a user's friends' pages
+ *
+ * @package ElggPages
+ */
+
+$owner = elgg_get_page_owner_entity();
+if (!$owner) {
+ forward('pages/all');
+}
+
+elgg_push_breadcrumb($owner->name, "pages/owner/$owner->username");
+elgg_push_breadcrumb(elgg_echo('friends'));
+
+elgg_register_title_button();
+
+$title = elgg_echo('pages:friends');
+
+$content = list_user_friends_objects($owner->guid, 'page_top', 10, false);
+if (!$content) {
+ $content = elgg_echo('pages:none');
+}
+
+$params = array(
+ 'filter_context' => 'friends',
+ 'content' => $content,
+ 'title' => $title,
+);
+
+$body = elgg_view_layout('content', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/mod/pages/pages/pages/history.php b/mod/pages/pages/pages/history.php
new file mode 100644
index 000000000..872596179
--- /dev/null
+++ b/mod/pages/pages/pages/history.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * History of revisions of a page
+ *
+ * @package ElggPages
+ */
+
+$page_guid = get_input('guid');
+
+$page = get_entity($page_guid);
+if (!$page) {
+
+}
+
+$container = $page->getContainerEntity();
+if (!$container) {
+
+}
+
+elgg_set_page_owner_guid($container->getGUID());
+
+if (elgg_instanceof($container, 'group')) {
+ elgg_push_breadcrumb($container->name, "pages/group/$container->guid/all");
+} else {
+ elgg_push_breadcrumb($container->name, "pages/owner/$container->username");
+}
+pages_prepare_parent_breadcrumbs($page);
+elgg_push_breadcrumb($page->title, $page->getURL());
+elgg_push_breadcrumb(elgg_echo('pages:history'));
+
+$title = $page->title . ": " . elgg_echo('pages:history');
+
+$content = elgg_list_annotations(array(
+ 'guid' => $page_guid,
+ 'annotation_name' => 'page',
+ 'limit' => 20,
+ 'order_by' => "n_table.time_created desc"
+));
+
+$body = elgg_view_layout('content', array(
+ 'filter' => '',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => elgg_view('pages/sidebar/navigation', array('page' => $page)),
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/pages/pages/pages/new.php b/mod/pages/pages/pages/new.php
new file mode 100644
index 000000000..7cab2facb
--- /dev/null
+++ b/mod/pages/pages/pages/new.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Create a new page
+ *
+ * @package ElggPages
+ */
+
+gatekeeper();
+
+$container_guid = (int) get_input('guid');
+$container = get_entity($container_guid);
+if (!$container) {
+
+}
+
+$parent_guid = 0;
+$page_owner = $container;
+if (elgg_instanceof($container, 'object')) {
+ $parent_guid = $container->getGUID();
+ $page_owner = $container->getContainerEntity();
+}
+
+elgg_set_page_owner_guid($page_owner->getGUID());
+
+$title = elgg_echo('pages:add');
+elgg_push_breadcrumb($title);
+
+$vars = pages_prepare_form_vars(null, $parent_guid);
+$content = elgg_view_form('pages/edit', array(), $vars);
+
+$body = elgg_view_layout('content', array(
+ 'filter' => '',
+ 'content' => $content,
+ 'title' => $title,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/pages/pages/pages/owner.php b/mod/pages/pages/pages/owner.php
new file mode 100644
index 000000000..b29332ee1
--- /dev/null
+++ b/mod/pages/pages/pages/owner.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * List a user's or group's pages
+ *
+ * @package ElggPages
+ */
+
+$owner = elgg_get_page_owner_entity();
+if (!$owner) {
+ forward('pages/all');
+}
+
+// access check for closed groups
+group_gatekeeper();
+
+$title = elgg_echo('pages:owner', array($owner->name));
+
+elgg_push_breadcrumb($owner->name);
+
+elgg_register_title_button();
+
+$content = elgg_list_entities(array(
+ 'types' => 'object',
+ 'subtypes' => 'page_top',
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'full_view' => false,
+));
+if (!$content) {
+ $content = '<p>' . elgg_echo('pages:none') . '</p>';
+}
+
+$filter_context = '';
+if (elgg_get_page_owner_guid() == elgg_get_logged_in_user_guid()) {
+ $filter_context = 'mine';
+}
+
+$sidebar = elgg_view('pages/sidebar/navigation');
+$sidebar .= elgg_view('pages/sidebar');
+
+$params = array(
+ 'filter_context' => $filter_context,
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => $sidebar,
+);
+
+if (elgg_instanceof($owner, 'group')) {
+ $params['filter'] = '';
+}
+
+$body = elgg_view_layout('content', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/mod/pages/pages/pages/revision.php b/mod/pages/pages/pages/revision.php
new file mode 100644
index 000000000..66a36e4e7
--- /dev/null
+++ b/mod/pages/pages/pages/revision.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * View a revision of page
+ *
+ * @package ElggPages
+ */
+
+$id = get_input('id');
+$annotation = elgg_get_annotation_from_id($id);
+if (!$annotation) {
+ forward();
+}
+
+$page = get_entity($annotation->entity_guid);
+if (!$page) {
+
+}
+
+elgg_set_page_owner_guid($page->getContainerGUID());
+
+group_gatekeeper();
+
+$container = elgg_get_page_owner_entity();
+if (!$container) {
+}
+
+$title = $page->title . ": " . elgg_echo('pages:revision');
+
+if (elgg_instanceof($container, 'group')) {
+ elgg_push_breadcrumb($container->name, "pages/group/$container->guid/all");
+} else {
+ elgg_push_breadcrumb($container->name, "pages/owner/$container->username");
+}
+pages_prepare_parent_breadcrumbs($page);
+elgg_push_breadcrumb($page->title, $page->getURL());
+elgg_push_breadcrumb(elgg_echo('pages:revision'));
+
+$content = elgg_view('object/page_top', array(
+ 'entity' => $page,
+ 'revision' => $annotation,
+ 'full_view' => true,
+));
+
+$sidebar = elgg_view('pages/sidebar/history', array('page' => $page));
+
+$body = elgg_view_layout('content', array(
+ 'filter' => '',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => $sidebar,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/pages/pages/pages/view.php b/mod/pages/pages/pages/view.php
new file mode 100644
index 000000000..e1c3fdbfd
--- /dev/null
+++ b/mod/pages/pages/pages/view.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * View a single page
+ *
+ * @package ElggPages
+ */
+
+$page_guid = get_input('guid');
+$page = get_entity($page_guid);
+if (!$page) {
+ register_error(elgg_echo('noaccess'));
+ $_SESSION['last_forward_from'] = current_page_url();
+ forward('');
+}
+
+elgg_set_page_owner_guid($page->getContainerGUID());
+
+group_gatekeeper();
+
+$container = elgg_get_page_owner_entity();
+if (!$container) {
+}
+
+$title = $page->title;
+
+if (elgg_instanceof($container, 'group')) {
+ elgg_push_breadcrumb($container->name, "pages/group/$container->guid/all");
+} else {
+ elgg_push_breadcrumb($container->name, "pages/owner/$container->username");
+}
+pages_prepare_parent_breadcrumbs($page);
+elgg_push_breadcrumb($title);
+
+$content = elgg_view_entity($page, array('full_view' => true));
+$content .= elgg_view_comments($page);
+
+// can add subpage if can edit this page and write to container (such as a group)
+if ($page->canEdit() && $container->canWriteToContainer(0, 'object', 'page')) {
+ $url = "pages/add/$page->guid";
+ elgg_register_menu_item('title', array(
+ 'name' => 'subpage',
+ 'href' => $url,
+ 'text' => elgg_echo('pages:newchild'),
+ 'link_class' => 'elgg-button elgg-button-action',
+ ));
+}
+
+$body = elgg_view_layout('content', array(
+ 'filter' => '',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => elgg_view('pages/sidebar/navigation'),
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/pages/pages/pages/world.php b/mod/pages/pages/pages/world.php
new file mode 100644
index 000000000..e6a705b6b
--- /dev/null
+++ b/mod/pages/pages/pages/world.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * List all pages
+ *
+ * @package ElggPages
+ */
+
+$title = elgg_echo('pages:all');
+
+elgg_pop_breadcrumb();
+elgg_push_breadcrumb(elgg_echo('pages'));
+
+elgg_register_title_button();
+
+$content = elgg_list_entities(array(
+ 'types' => 'object',
+ 'subtypes' => 'page_top',
+ 'full_view' => false,
+));
+if (!$content) {
+ $content = '<p>' . elgg_echo('pages:none') . '</p>';
+}
+
+$body = elgg_view_layout('content', array(
+ 'filter_context' => 'all',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => elgg_view('pages/sidebar'),
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/pages/start.php b/mod/pages/start.php
new file mode 100644
index 000000000..6d974f122
--- /dev/null
+++ b/mod/pages/start.php
@@ -0,0 +1,352 @@
+<?php
+/**
+ * Elgg Pages
+ *
+ * @package ElggPages
+ */
+
+elgg_register_event_handler('init', 'system', 'pages_init');
+
+/**
+ * Initialize the pages plugin.
+ *
+ */
+function pages_init() {
+
+ // register a library of helper functions
+ elgg_register_library('elgg:pages', elgg_get_plugins_path() . 'pages/lib/pages.php');
+
+ $item = new ElggMenuItem('pages', elgg_echo('pages'), 'pages/all');
+ elgg_register_menu_item('site', $item);
+
+ // Register a page handler, so we can have nice URLs
+ elgg_register_page_handler('pages', 'pages_page_handler');
+
+ // Register a url handler
+ elgg_register_entity_url_handler('object', 'page_top', 'pages_url');
+ elgg_register_entity_url_handler('object', 'page', 'pages_url');
+ elgg_register_annotation_url_handler('page', 'pages_revision_url');
+
+ // Register some actions
+ $action_base = elgg_get_plugins_path() . 'pages/actions/pages';
+ elgg_register_action("pages/edit", "$action_base/edit.php");
+ elgg_register_action("pages/delete", "$action_base/delete.php");
+
+ // Extend the main css view
+ elgg_extend_view('css/elgg', 'pages/css');
+
+ // Register javascript needed for sidebar menu
+ $js_url = 'mod/pages/vendors/jquery-treeview/jquery.treeview.min.js';
+ elgg_register_js('jquery-treeview', $js_url);
+ $css_url = 'mod/pages/vendors/jquery-treeview/jquery.treeview.css';
+ elgg_register_css('jquery-treeview', $css_url);
+
+ // Register entity type for search
+ elgg_register_entity_type('object', 'page');
+ elgg_register_entity_type('object', 'page_top');
+
+ // Register granular notification for this type
+ register_notification_object('object', 'page', elgg_echo('pages:new'));
+ register_notification_object('object', 'page_top', elgg_echo('pages:new'));
+ elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'page_notify_message');
+
+ // add to groups
+ add_group_tool_option('pages', elgg_echo('groups:enablepages'), true);
+ elgg_extend_view('groups/tool_latest', 'pages/group_module');
+
+ //add a widget
+ elgg_register_widget_type('pages', elgg_echo('pages'), elgg_echo('pages:widget:description'));
+
+ // Language short codes must be of the form "pages:key"
+ // where key is the array key below
+ elgg_set_config('pages', array(
+ 'title' => 'text',
+ 'description' => 'longtext',
+ 'tags' => 'tags',
+ 'parent_guid' => 'parent',
+ 'access_id' => 'access',
+ 'write_access_id' => 'write_access',
+ ));
+
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'pages_owner_block_menu');
+
+ // write permission plugin hooks
+ elgg_register_plugin_hook_handler('permissions_check', 'object', 'pages_write_permission_check');
+ elgg_register_plugin_hook_handler('container_permissions_check', 'object', 'pages_container_permission_check');
+
+ // icon url override
+ elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'pages_icon_url_override');
+
+ // entity menu
+ elgg_register_plugin_hook_handler('register', 'menu:entity', 'pages_entity_menu_setup');
+
+ // register ecml views to parse
+ elgg_register_plugin_hook_handler('get_views', 'ecml', 'pages_ecml_views_hook');
+}
+
+/**
+ * Dispatcher for pages.
+ * URLs take the form of
+ * All pages: pages/all
+ * User's pages: pages/owner/<username>
+ * Friends' pages: pages/friends/<username>
+ * View page: pages/view/<guid>/<title>
+ * New page: pages/add/<guid> (container: user, group, parent)
+ * Edit page: pages/edit/<guid>
+ * History of page: pages/history/<guid>
+ * Revision of page: pages/revision/<id>
+ * Group pages: pages/group/<guid>/all
+ *
+ * Title is ignored
+ *
+ * @param array $page
+ * @return bool
+ */
+function pages_page_handler($page) {
+
+ elgg_load_library('elgg:pages');
+
+ if (!isset($page[0])) {
+ $page[0] = 'all';
+ }
+
+ elgg_push_breadcrumb(elgg_echo('pages'), 'pages/all');
+
+ $base_dir = elgg_get_plugins_path() . 'pages/pages/pages';
+
+ $page_type = $page[0];
+ switch ($page_type) {
+ case 'owner':
+ include "$base_dir/owner.php";
+ break;
+ case 'friends':
+ include "$base_dir/friends.php";
+ break;
+ case 'view':
+ set_input('guid', $page[1]);
+ include "$base_dir/view.php";
+ break;
+ case 'add':
+ set_input('guid', $page[1]);
+ include "$base_dir/new.php";
+ break;
+ case 'edit':
+ set_input('guid', $page[1]);
+ include "$base_dir/edit.php";
+ break;
+ case 'group':
+ include "$base_dir/owner.php";
+ break;
+ case 'history':
+ set_input('guid', $page[1]);
+ include "$base_dir/history.php";
+ break;
+ case 'revision':
+ set_input('id', $page[1]);
+ include "$base_dir/revision.php";
+ break;
+ case 'all':
+ include "$base_dir/world.php";
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Override the page url
+ *
+ * @param ElggObject $entity Page object
+ * @return string
+ */
+function pages_url($entity) {
+ $title = elgg_get_friendly_title($entity->title);
+ return "pages/view/$entity->guid/$title";
+}
+
+/**
+ * Override the page annotation url
+ *
+ * @param ElggAnnotation $annotation
+ * @return string
+ */
+function pages_revision_url($annotation) {
+ return "pages/revision/$annotation->id";
+}
+
+/**
+ * Override the default entity icon for pages
+ *
+ * @return string Relative URL
+ */
+function pages_icon_url_override($hook, $type, $returnvalue, $params) {
+ $entity = $params['entity'];
+ if (elgg_instanceof($entity, 'object', 'page_top') ||
+ elgg_instanceof($entity, 'object', 'page')) {
+ switch ($params['size']) {
+ case 'topbar':
+ case 'tiny':
+ case 'small':
+ return 'mod/pages/images/pages.gif';
+ break;
+ default:
+ return 'mod/pages/images/pages_lrg.gif';
+ break;
+ }
+ }
+}
+
+/**
+ * Add a menu item to the user ownerblock
+ */
+function pages_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'user')) {
+ $url = "pages/owner/{$params['entity']->username}";
+ $item = new ElggMenuItem('pages', elgg_echo('pages'), $url);
+ $return[] = $item;
+ } else {
+ if ($params['entity']->pages_enable != "no") {
+ $url = "pages/group/{$params['entity']->guid}/all";
+ $item = new ElggMenuItem('pages', elgg_echo('pages:group'), $url);
+ $return[] = $item;
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * Add links/info to entity menu particular to pages plugin
+ */
+function pages_entity_menu_setup($hook, $type, $return, $params) {
+ if (elgg_in_context('widgets')) {
+ return $return;
+ }
+
+ $entity = $params['entity'];
+ $handler = elgg_extract('handler', $params, false);
+ if ($handler != 'pages') {
+ return $return;
+ }
+
+ // remove delete if not owner or admin
+ if (!elgg_is_admin_logged_in() && elgg_get_logged_in_user_guid() != $entity->getOwnerGuid()) {
+ foreach ($return as $index => $item) {
+ if ($item->getName() == 'delete') {
+ unset($return[$index]);
+ }
+ }
+ }
+
+ $options = array(
+ 'name' => 'history',
+ 'text' => elgg_echo('pages:history'),
+ 'href' => "pages/history/$entity->guid",
+ 'priority' => 150,
+ );
+ $return[] = ElggMenuItem::factory($options);
+
+ return $return;
+}
+
+/**
+* Returns a more meaningful message
+*
+* @param unknown_type $hook
+* @param unknown_type $entity_type
+* @param unknown_type $returnvalue
+* @param unknown_type $params
+*/
+function page_notify_message($hook, $entity_type, $returnvalue, $params) {
+ $entity = $params['entity'];
+ $to_entity = $params['to_entity'];
+ $method = $params['method'];
+
+ if (elgg_instanceof($entity, 'object', 'page') || elgg_instanceof($entity, 'object', 'page_top')) {
+ $descr = $entity->description;
+ $title = $entity->title;
+ $owner = $entity->getOwnerEntity();
+
+ return elgg_echo('pages:notification', array(
+ $owner->name,
+ $title,
+ $descr,
+ $entity->getURL()
+ ));
+ }
+ return null;
+}
+
+/**
+ * Extend permissions checking to extend can-edit for write users.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $returnvalue
+ * @param unknown_type $params
+ */
+function pages_write_permission_check($hook, $entity_type, $returnvalue, $params)
+{
+ if ($params['entity']->getSubtype() == 'page'
+ || $params['entity']->getSubtype() == 'page_top') {
+
+ $write_permission = $params['entity']->write_access_id;
+ $user = $params['user'];
+
+ if (($write_permission) && ($user)) {
+ // $list = get_write_access_array($user->guid);
+ $list = get_access_array($user->guid); // get_access_list($user->guid);
+
+ if (($write_permission!=0) && (in_array($write_permission,$list))) {
+ return true;
+ }
+ }
+ }
+}
+
+/**
+ * Extend container permissions checking to extend can_write_to_container for write users.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $returnvalue
+ * @param unknown_type $params
+ */
+function pages_container_permission_check($hook, $entity_type, $returnvalue, $params) {
+
+ if (elgg_get_context() == "pages") {
+ if (elgg_get_page_owner_guid()) {
+ if (can_write_to_container(elgg_get_logged_in_user_guid(), elgg_get_page_owner_guid())) return true;
+ }
+ if ($page_guid = get_input('page_guid',0)) {
+ $entity = get_entity($page_guid);
+ } else if ($parent_guid = get_input('parent_guid',0)) {
+ $entity = get_entity($parent_guid);
+ }
+ if ($entity instanceof ElggObject) {
+ if (
+ can_write_to_container(elgg_get_logged_in_user_guid(), $entity->container_guid)
+ || in_array($entity->write_access_id,get_access_list())
+ ) {
+ return true;
+ }
+ }
+ }
+
+}
+
+/**
+ * Return views to parse for pages.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $entity_type
+ * @param unknown_type $return_value
+ * @param unknown_type $params
+ */
+function pages_ecml_views_hook($hook, $entity_type, $return_value, $params) {
+ $return_value['object/page'] = elgg_echo('item:object:page');
+ $return_value['object/page_top'] = elgg_echo('item:object:page_top');
+
+ return $return_value;
+}
diff --git a/mod/pages/vendors/jquery-treeview/.gitignore b/mod/pages/vendors/jquery-treeview/.gitignore
new file mode 100644
index 000000000..e39040f5b
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/.gitignore
@@ -0,0 +1,7 @@
+build/dist
+docs
+.project
+*~
+*.diff
+*.patch
+.DS_Store
diff --git a/mod/pages/vendors/jquery-treeview/README.md b/mod/pages/vendors/jquery-treeview/README.md
new file mode 100644
index 000000000..4b6209d28
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/README.md
@@ -0,0 +1,8 @@
+[jQuery Treeview Plugin](http://bassistance.de/jquery-plugins/jquery-plugin-treeview/) - Its just a tree
+================================
+
+Converts nested lists into a mouse-navigatable tree - not keyboard support, yet.
+
+Provides some options for customizing, an async-tree extension and an experimental sortable extension.
+
+API documentation can be found at [http://docs.jquery.com/Plugins/Treeview](http://docs.jquery.com/Plugins/Treeview). There's also some background on the async extension.
diff --git a/mod/pages/vendors/jquery-treeview/changelog.txt b/mod/pages/vendors/jquery-treeview/changelog.txt
new file mode 100644
index 000000000..29c6e1975
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/changelog.txt
@@ -0,0 +1,36 @@
+1.4.1
+-----
+* Fix for #2360
+* Added option cookieOptions: Passed through to $.cookie to set path, domain etc.
+* Tested with jQuery 1.2.x and 1.4.3
+* Fixed combination of persist: "location" and prerendered: true
+
+1.4
+---
+
+* Added changelog (this file)
+* Fixed tree control to search only for anchors, allowing images or other elements inside the controls, while keeping the control usable with the keyboard
+* Restructured folder layout: root contains plugin resources, lib contains script dependencies, demo contains demos and related files
+* Added prerendered option: If set to true, assumes all hitarea divs and classes already rendered, speeding up initialization for big trees, but more obtrusive
+* Added jquery.treeview.async.js for ajax-lazy-loading trees, see async.html demo
+* Exposed $.fn.treeview.classes for custom classes if necessary
+* Show treecontrol only when JavaScript is enabled
+* Completely reworked themeing via CSS sprites, resulting in only two files per theme
+ * updated dotted, black, gray and red theme
+ * added famfamfam theme (no lines)
+* Improved cookie persistence to allow multiple persisted trees per page via cookieId option
+* Improved location persistence by making it case-insensitive
+* Improved swapClass and replaceClass plugin implementations
+* Added folder-closed.gif to filetree example
+
+1.3
+---
+
+* Fixes for all outstanding bugs
+* Added persistence features
+ * location based: click on a link in the treeview and reopen that link after the page loaded
+ * cookie based: save the state of the tree in a cookie on each click and load that on reload
+* smoothed animations, fixing flickering in both IE and Opera
+* Tested in Firefox 2, IE 6 & 7, Opera 9, Safari 3
+* Moved documentation to jQuery wiki
+* Requires jQuery 1.2+
diff --git a/mod/pages/vendors/jquery-treeview/demo/async.html b/mod/pages/vendors/jquery-treeview/demo/async.html
new file mode 100644
index 000000000..da6fe667d
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/async.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
+ <title>jQuery async treeview</title>
+
+ <link rel="stylesheet" href="../jquery.treeview.css" />
+ <link rel="stylesheet" href="../red-treeview.css" />
+ <link rel="stylesheet" href="screen.css" />
+
+ <script src="../lib/jquery.js" type="text/javascript"></script>
+ <script src="../lib/jquery.cookie.js" type="text/javascript"></script>
+ <script src="../jquery.treeview.js" type="text/javascript"></script>
+ <script src="../jquery.treeview.edit.js" type="text/javascript"></script>
+ <script src="../jquery.treeview.async.js" type="text/javascript"></script>
+
+ <script type="text/javascript">
+ function initTrees() {
+ $("#black").treeview({
+ url: "source.php"
+ })
+
+ $("#mixed").treeview({
+ url: "source.php",
+ // add some additional, dynamic data and request with POST
+ ajax: {
+ data: {
+ "additional": function() {
+ return "yeah: " + new Date;
+ }
+ },
+ type: "post"
+ }
+ });
+ }
+ $(document).ready(function(){
+ initTrees();
+ $("#refresh").click(function() {
+ $("#black").empty();
+ $("#mixed").empty();
+ initTrees();
+ });
+ });
+ </script>
+
+ </head>
+ <body>
+
+ <h1 id="banner"><a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/">jQuery Treeview Plugin</a> Demo</h1>
+ <div id="main">
+
+ <ul>
+ <li><a href=".">Main Demo</a></li>
+ <li><a href="source.phps">Server component used</a></li>
+ </ul>
+
+ <h4>Lazy-loading tree</h4>
+
+ <ul id="black">
+ </ul>
+
+ <h4>Mixed pre and lazy-loading</h4>
+
+ <ul id="mixed">
+ <li><span>Item 1</span>
+ <ul>
+ <li><span>Item 1.0</span>
+ <ul>
+ <li><span>Item 1.0.0</span></li>
+ </ul>
+ </li>
+ <li><span>Item 1.1</span></li>
+ </ul>
+ </li>
+ <li id="36" class="hasChildren">
+ <span>Item 2</span>
+ <ul>
+ <li><span class="placeholder">&nbsp;</span></li>
+ </ul>
+ </li>
+ <li>
+ <span>Item 3</span>
+ </li>
+ </ul>
+
+ <button id="refresh">Refresh both Trees</button>
+
+</div>
+
+</body></html> \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/demo/bg.gif b/mod/pages/vendors/jquery-treeview/demo/bg.gif
new file mode 100644
index 000000000..846add071
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/bg.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/demo/demo.js b/mod/pages/vendors/jquery-treeview/demo/demo.js
new file mode 100644
index 000000000..57ae04103
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/demo.js
@@ -0,0 +1,31 @@
+$(document).ready(function(){
+
+ // first example
+ $("#browser").treeview();
+
+ // second example
+ $("#navigation").treeview({
+ persist: "location",
+ collapsed: true,
+ unique: true
+ });
+
+ // third example
+ $("#red").treeview({
+ animated: "fast",
+ collapsed: true,
+ unique: true,
+ persist: "cookie",
+ toggle: function() {
+ window.console && console.log("%o was toggled", this);
+ }
+ });
+
+ // fourth example
+ $("#black, #gray").treeview({
+ control: "#treecontrol",
+ persist: "cookie",
+ cookieId: "treeview-black"
+ });
+
+}); \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/demo/edit.html b/mod/pages/vendors/jquery-treeview/demo/edit.html
new file mode 100644
index 000000000..9149c3312
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/edit.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
+ <title>jQuery treeview</title>
+
+ <link rel="stylesheet" href="../jquery.treeview.css" />
+ <link rel="stylesheet" href="screen.css" />
+
+ <script src="../lib/jquery.js" type="text/javascript"></script>
+ <script src="../lib/jquery.cookie.js" type="text/javascript"></script>
+ <script src="../jquery.treeview.js" type="text/javascript"></script>
+ <script src="../jquery.treeview.edit.js" type="text/javascript"></script>
+
+ <script type="text/javascript">
+ $(function() {
+ $("#browser").treeview();
+ $("#add").click(function() {
+ var branches = $("<li><span class='folder'>New Sublist</span><ul>" +
+ "<li><span class='file'>Item1</span></li>" +
+ "<li><span class='file'>Item2</span></li></ul></li>").appendTo("#browser");
+ $("#browser").treeview({
+ add: branches
+ });
+ branches = $("<li class='closed'><span class='folder'>New Sublist</span><ul><li><span class='file'>Item1</span></li><li><span class='file'>Item2</span></li></ul></li>").prependTo("#folder21");
+ $("#browser").treeview({
+ add: branches
+ });
+ });
+ $("#browser").bind("contextmenu", function(event) {
+ if ($(event.target).is("li") || $(event.target).parents("li").length) {
+ $("#browser").treeview({
+ remove: $(event.target).parents("li").filter(":first")
+ });
+ return false;
+ }
+ });
+ })
+
+ </script>
+
+ </head>
+ <body>
+
+ <h1 id="banner"><a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/">jQuery Treeview Plugin</a> Demo</h1>
+ <div id="main">
+
+ <a href=".">Main Demo</a>
+
+ <h4>Sample 1 - default, right-click to remove items</h4>
+
+ <button id="add">Add!</button>
+
+ <ul id="browser" class="filetree">
+ <li><span class="folder">Folder 1</span>
+ <ul>
+ <li><span class="file">Item 1.1</span></li>
+ </ul>
+ </li>
+ <li><span class="folder">Folder 2</span>
+ <ul>
+ <li><span class="folder">Subfolder 2.1</span>
+ <ul id="folder21">
+ <li><span class="file">File 2.1.1</span></li>
+ <li><span class="file">File 2.1.2</span></li>
+ </ul>
+ </li>
+ <li><span class="file">File 2.2</span></li>
+ </ul>
+ </li>
+ <li class="closed"><span class="folder">Folder 3 (closed at start)</span>
+ <ul>
+ <li><span class="file">File 3.1</span></li>
+ </ul>
+ </li>
+ <li><span class="file">File 4</span></li>
+ </ul>
+
+ </div>
+
+</body></html> \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/demo/images.html b/mod/pages/vendors/jquery-treeview/demo/images.html
new file mode 100644
index 000000000..50d5e4320
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/images.html
@@ -0,0 +1,56 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
+ <title>jQuery treeview</title>
+
+ <link rel="stylesheet" href="../jquery.treeview.css" />
+ <link rel="stylesheet" href="../red-treeview.css" />
+ <link rel="stylesheet" href="screen.css" />
+
+ <script src="../lib/jquery.js" type="text/javascript"></script>
+ <script src="../lib/jquery.cookie.js" type="text/javascript"></script>
+ <script src="../jquery.treeview.js" type="text/javascript"></script>
+
+ <script type="text/javascript">
+ $(function() {
+ $("#browser").treeview();
+ });
+ </script>
+
+ </head>
+ <body>
+
+ <h1 id="banner"><a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/">jQuery Treeview Plugin</a> Demo</h1>
+ <div id="main">
+
+ <h4>Sample 1 - default</h4>
+ <ul id="browser" class="filetree">
+ <li><img src="../images/folder.gif" /> 123</span>
+ <ul>
+ <li>blabla <img src="../images/file.gif" /></li>
+ </ul>
+ </li>
+ <li><img src="../images/folder.gif" />
+ <ul>
+ <li><img src="../images/folder.gif" />
+ <ul id="folder21">
+ <li><img src="../images/file.gif" /> more text</li>
+ <li>and here, too<img src="../images/file.gif" /></li>
+ </ul>
+ </li>
+ <li><img src="../images/file.gif" /></li>
+ </ul>
+ </li>
+ <li class="closed">this is closed! <img src="../images/folder.gif" />
+ <ul>
+ <li><img src="../images/file.gif" /></li>
+ </ul>
+ </li>
+ <li><img src="../images/file.gif" /></li>
+ </ul>
+
+</div>
+
+</body></html> \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/demo/index.html b/mod/pages/vendors/jquery-treeview/demo/index.html
new file mode 100644
index 000000000..938ca6369
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/index.html
@@ -0,0 +1,338 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
+ <title>jQuery treeview</title>
+
+ <link rel="stylesheet" href="../jquery.treeview.css" />
+ <link rel="stylesheet" href="screen.css" />
+
+ <script src="../lib/jquery.js" type="text/javascript"></script>
+ <script src="../lib/jquery.cookie.js" type="text/javascript"></script>
+ <script src="../jquery.treeview.js" type="text/javascript"></script>
+
+ <script type="text/javascript" src="demo.js"></script>
+
+ </head>
+ <body>
+
+ <h1 id="banner"><a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/">jQuery Treeview Plugin</a> Demo</h1>
+ <div id="main">
+
+ <a href="demo.js">Pagecode</a>
+
+ <h3>Other demos</h3>
+ <ul>
+ <li><a href="large.html">Large Tree Demo</a></li>
+ <li><a href="prerendered.html">Prerendered Large Tree Demo</a></li>
+ <li><a href="async.html">Async Tree Demo</a></li>
+ <li><a href="edit.html">Editable Tree Demo</a></li>
+ <li><a href="simple.html">Simple Tree Demo, famfamfam theme (no lines)</a></li>
+ </ul>
+
+ <h4>Sample 1 - default</h4>
+ <ul id="browser" class="filetree">
+ <li><span class="folder">Folder 1</span>
+ <ul>
+ <li><span class="file">Item 1.1</span></li>
+ </ul>
+ </li>
+ <li><span class="folder">Folder 2</span>
+ <ul>
+ <li><span class="folder">Subfolder 2.1</span>
+ <ul id="folder21">
+ <li><span class="file">File 2.1.1</span></li>
+ <li><span class="file">File 2.1.2</span></li>
+ </ul>
+ </li>
+ <li><span class="file">File 2.2</span></li>
+ </ul>
+ </li>
+ <li class="closed"><span class="folder">Folder 3 (closed at start)</span>
+ <ul>
+ <li><span class="file">File 3.1</span></li>
+ </ul>
+ </li>
+ <li><span class="file">File 4</span></li>
+ </ul>
+
+ <h4>Sample 2 - Navigation</h4>
+
+ <ul id="navigation">
+ <li><a href="?1">Item 1</a>
+ <ul>
+ <li><a href="?1.0">Item 1.0</a>
+ <ul>
+ <li><a href="?1.0.0">Item 1.0.0</a></li>
+ </ul>
+ </li>
+ <li><a href="?1.1">Item 1.1</a></li>
+ <li><a href="?1.2">Item 1.2</a>
+ <ul>
+ <li><a href="?1.2.0">Item 1.2.0</a>
+ <ul>
+ <li><a href="?1.2.0.0">Item 1.2.0.0</a></li>
+ <li><a href="?1.2.0.1">Item 1.2.0.1</a></li>
+ <li><a href="?1.2.0.2">Item 1.2.0.2</a></li>
+ </ul>
+ </li>
+ <li><a href="?1.2.1">Item 1.2.1</a>
+ <ul>
+ <li><a href="?1.2.1.0">Item 1.2.1.0</a></li>
+ </ul>
+ </li>
+ <li><a href="?1.2.2">Item 1.2.2</a>
+ <ul>
+ <li><a href="?1.2.2.0">Item 1.2.2.0</a></li>
+ <li><a href="?1.2.2.1">Item 1.2.2.1</a></li>
+ <li><a href="?1.2.2.2">Item 1.2.2.2</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="?2">Item 2</a>
+ <ul>
+ <li><span>Item 2.0</span>
+ <ul>
+ <li><a href="?2.0.0">Item 2.0.0</a>
+ <ul>
+ <li><a href="?2.0.0.0">Item 2.0.0.0</a></li>
+ <li><a href="?2.0.0.1">Item 2.0.0.1</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="?2.1">Item 2.1</a>
+ <ul>
+ <li><a href="?2.1.0">Item 2.1.0</a>
+ <ul>
+ <li><a href="?2.1.0.0">Item 2.1.0.0</a></li>
+ </ul>
+ </li>
+ <li><a href="?2.1.1">Item 2.1.1</a>
+ <ul>
+ <li><a href="?2.1.1.0abc">Item 2.1.1.0</a></li>
+ <li><a href="?2.1.1.1">Item 2.1.1.1</a></li>
+ <li><a href="?2.1.1.2">Item 2.1.1.2</a></li>
+ </ul>
+ </li>
+ <li><a href="?2.1.2">Item 2.1.2</a>
+ <ul>
+ <li><a href="?2.1.2.0">Item 2.1.2.0</a></li>
+ <li><a href="?2.1.2.1">Item 2.1.2.1</a></li>
+ <li><a href="?2.1.2.2">Item 2.1.2.2</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="?3">Item 3</a>
+ <ul>
+ <li class="open"><a href="?3.0">Item 3.0</a>
+ <ul>
+ <li><a href="?3.0.0">Item 3.0.0</a></li>
+ <li><a href="?3.0.1">Item 3.0.1</a>
+ <ul>
+ <li><a href="?3.0.1.0">Item 3.0.1.0</a></li>
+ <li><a href="?3.0.1.1">Item 3.0.1.1</a></li>
+ </ul>
+ </li>
+ <li><a href="?3.0.2">Item 3.0.2</a>
+ <ul>
+ <li><a href="?3.0.2.0">Item 3.0.2.0</a></li>
+ <li><a href="?3.0.2.1">Item 3.0.2.1</a></li>
+ <li><a href="?3.0.2.2">Item 3.0.2.2</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ <h4>Sample 3 - fast animations, all branches collapsed at first, red theme, cookie-based persistance</h4>
+ <ul id="red" class="treeview-red">
+ <li><span>Item 1</span>
+ <ul>
+ <li><span>Item 1.0</span>
+ <ul>
+ <li><span>Item 1.0.0</span></li>
+ </ul>
+ </li>
+ <li><span>Item 1.1</span></li>
+ <li><span>Item 1.2</span>
+ <ul>
+ <li><span>Item 1.2.0</span>
+ <ul>
+ <li><span>Item 1.2.0.0</span></li>
+ <li><span>Item 1.2.0.1</span></li>
+ <li><span>Item 1.2.0.2</span></li>
+ </ul>
+ </li>
+ <li><span>Item 1.2.1</span>
+ <ul>
+ <li><span>Item 1.2.1.0</span></li>
+ </ul>
+ </li>
+ <li><span>Item 1.2.2</span>
+ <ul>
+ <li><span>Item 1.2.2.0</span></li>
+ <li><span>Item 1.2.2.1</span></li>
+ <li><span>Item 1.2.2.2</span></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><span>Item 2</span>
+ <ul>
+ <li><span>Item 2.0</span>
+ <ul>
+ <li><span>Item 2.0.0</span>
+ <ul>
+ <li><span>Item 2.0.0.0</span></li>
+ <li><span>Item 2.0.0.1</span></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><span>Item 2.1</span>
+ <ul>
+ <li><span>Item 2.1.0</span>
+ <ul>
+ <li><span>Item 2.1.0.0</span></li>
+ </ul>
+ </li>
+ <li><span>Item 2.1.1</span>
+ <ul>
+ <li><span>Item 2.1.1.0</span></li>
+ <li><span>Item 2.1.1.1</span></li>
+ <li><span>Item 2.1.1.2</span></li>
+ </ul>
+ </li>
+ <li><span>Item 2.1.2</span>
+ <ul>
+ <li><span>Item 2.1.2.0</span></li>
+ <li><span>Item 2.1.2.1</span></li>
+ <li><span>Item 2.1.2.2</span></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li class="open"><span>Item 3</span>
+ <ul>
+ <li class="open"><span>Item 3.0</span>
+ <ul>
+ <li><span>Item 3.0.0</span></li>
+ <li><span>Item 3.0.1</span>
+ <ul>
+ <li><span>Item 3.0.1.0</span></li>
+ <li><span>Item 3.0.1.1</span></li>
+ </ul>
+
+ </li>
+ <li><span>Item 3.0.2</span>
+ <ul>
+ <li><span>Item 3.0.2.0</span></li>
+ <li><span>Item 3.0.2.1</span></li>
+ <li><span>Item 3.0.2.2</span></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ <h4>Sample 4 - two trees with one tree control, black and gray theme, cookie-based persistance</h4>
+ <div id="treecontrol">
+ <a title="Collapse the entire tree below" href="#"><img src="../images/minus.gif" /> Collapse All</a>
+ <a title="Expand the entire tree below" href="#"><img src="../images/plus.gif" /> Expand All</a>
+ <a title="Toggle the tree below, opening closed branches, closing open branches" href="#">Toggle All</a>
+ </div>
+ <ul id="black" class="treeview-black">
+ <li>Item 1</li>
+ <li>
+ <span>Item 2</span>
+ <ul>
+ <li>
+ <span>Item 2.1</span>
+ <ul>
+ <li>Item 2.1.1</li>
+ <li>Item 2.1.2</li>
+ </ul>
+ </li>
+ <li>Item 2.2</li>
+ <li class="closed">
+ <span>Item 2.3 (closed at start)</span>
+ <ul>
+ <li>Item 2.3.1</li>
+ <li>Item 2.3.2</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ <ul id="gray" class="treeview-gray">
+ <li>Item 1</li>
+ <li>
+ <span>Item 2</span>
+ <ul>
+ <li class="closed">
+ <span>Item 2.1 (closed at start)</span>
+ <ul>
+ <li>Item 2.1.1</li>
+ <li>Item 2.1.2</li>
+ </ul>
+ </li>
+ <li>Item 2.2.1</li>
+ <li>Item 2.2.2</li>
+ <li>Item 2.2.3</li>
+ <li>Item 2.2.4</li>
+ <li>Item 2.2.5</li>
+ <li>Item 2.2.6</li>
+ <li>Item 2.2.7</li>
+ <li>Item 2.2.8</li>
+ <li>
+ <span>Item 2.3</span>
+ <ul>
+ <li>Item 2.3.1</li>
+ <li>Item 2.3.2</li>
+ <li>Item 2.3.3</li>
+ <li>Item 2.3.4</li>
+ <li>Item 2.3.5</li>
+ <li>Item 2.3.6</li>
+ <li>Item 2.3.7</li>
+ <li>Item 2.3.8</li>
+ <li>Item 2.3.9</li>
+ </ul>
+ </li>
+ <li>
+ <span>Item 2.4</span>
+ <ul>
+ <li>Item 2.4.1</li>
+ <li>Item 2.4.2</li>
+ <li>Item 2.4.3</li>
+ <li>Item 2.4.4</li>
+ <li>Item 2.4.5</li>
+ <li>Item 2.4.6</li>
+ <li>Item 2.4.7</li>
+ <li>Item 2.4.8</li>
+ <li>Item 2.4.9</li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li>Item 3</li>
+ </ul>
+
+</div>
+
+</body></html> \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/demo/large.html b/mod/pages/vendors/jquery-treeview/demo/large.html
new file mode 100644
index 000000000..f70e3777e
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/large.html
@@ -0,0 +1,561 @@
+<!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>jQuery treeview</title>
+
+<link rel="stylesheet" href="../jquery.treeview.css" />
+<link rel="stylesheet" href="../red-treeview.css" />
+<link rel="stylesheet" href="screen.css" />
+
+<script src="../lib/jquery.js" type="text/javascript"></script>
+<script src="../lib/jquery.cookie.js" type="text/javascript"></script>
+<script src="../jquery.treeview.js" type="text/javascript"></script>
+
+<script type="text/javascript">
+ $(function() {
+ $("#tree").treeview({
+ collapsed: true,
+ animated: "medium",
+ control:"#sidetreecontrol",
+ persist: "location"
+ });
+ })
+
+ </script>
+
+</head>
+<body>
+
+<h1 id="banner"><a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/">jQuery Treeview Plugin</a> Demo</h1>
+<div id="main"><a href=".">Main Demo</a>
+
+<div id="sidetree">
+<div class="treeheader">&nbsp;</div>
+<div id="sidetreecontrol"><a href="?#">Collapse All</a> | <a href="?#">Expand All</a></div>
+
+<ul id="tree">
+ <li><a href="?/index.cfm"><strong>Home</strong></a>
+ <ul>
+ <li><a href="?/enewsletters/index.cfm">Airdrie eNewsletters </a></li>
+ <li><a href="?/index.cfm">Airdrie Directories</a></li>
+ <li><a href="?/economic_development/video/index.cfm">Airdrie Life Video</a></li>
+
+ <li><a href="?/index.cfm">Airdrie News</a></li>
+ <li><a href="?/index.cfm">Airdrie Quick Links</a></li>
+ <li><a href="?http://weather.ibegin.com/ca/ab/airdrie/">Airdrie Weather</a></li>
+ <li><a href="?/human_resources/index.cfm">Careers</a> | <a href="?/contact_us/index.cfm">Contact Us</a> | <a href="?/site_map/index.cfm">Site Map</a> | <a href="?/links/index.cfm">Links</a></li>
+
+ <li><a href="?/calendars/index.cfm">Community Calendar </a></li>
+ <li><a href="?/conditions_of_use/index.cfm">Conditions of Use and Privacy Statement</a></li>
+ <li><a href="?/index.cfm">I'd like to find out about... </a></li>
+ <li><a href="?/index.cfm">Opportunities</a></li>
+ <li><a href="?/links/index.cfm">Resource Links</a></li>
+ <li><a href="?/index.cfm">Special Notices</a></li>
+
+ </ul>
+ </li>
+ <li><span><strong>City Services</strong></span>
+ <ul>
+ <li><a href="?/assessment/index.cfm">Assessment</a>
+ <ul>
+ <li><a href="?/assessment/assessment_faqs.cfm">Assessment FAQs</a></li>
+
+ <li><a href="?/assessment/property_assessment_notices.cfm">2007 Property Assessment Notices</a></li>
+ <li><a href="?http://www.creb.com/">CREB</a></li>
+ <li><a href="?/assessment/non_residential_assessment_tax_comparisons.cfm">Non-Residential Assessment / Tax Comparisons</a></li>
+ <li><a href="?/assessment/how_to_file_a_complaint.cfm">How to File a Complaint</a></li>
+ <li><a href="?/assessment/supplementary_assessment_tax.cfm">Supplementary Assessment and Tax</a></li>
+ </ul>
+
+ </li>
+ <li><a href="?/building_development/index.cfm">Building &amp; Development </a>
+ <ul>
+ <li><a href="?/building_inspections/index.cfm">Building Inspections</a>
+ <ul>
+ <li><a href="?/building_inspections/builder_forums.cfm">Builder Forums</a></li>
+ <li><a href="?/building_inspections/contact_us.cfm">Contact Us</a></li>
+ <li><a href="?/building_inspections/contractor_notices.cfm">Contractor Notices</a></li>
+ <li><a href="?/building_inspections/inspector_guidelines.cfm">Inspector Guidelines</a></li>
+ <li><a href="?/building_inspections/links.cfm">Links</a></li>
+ <li><a href="?/building_inspections/statistics_2007.cfm">Statistics</a>
+ <ul>
+
+ <li><a href="?/building_inspections/statistics_2006.cfm">Statistics 2006</a></li>
+ <li><a href="?/building_inspections/statistics_2005.cfm">Statistics 2005</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a title="City Infrastructure" href="?/building_development/city_infrastructure/index.cfm">City Infrastructure</a>
+ <ul>
+
+ <li><a href="?/building_development/city_infrastructure/roadway_improvement.cfm">Roadway Improvement</a></li>
+ <li><a href="?/building_development/city_infrastructure/traffic.cfm">Traffic</a></li>
+ <li><a href="?/building_development/city_infrastructure/transportation_planning.cfm">Transportation &amp; Infrastructure Planning</a></li>
+ <li><a href="?/building_development/city_infrastructure/water_sewer_construction.cfm">Water &amp; Sewer Construction</a></li>
+
+ </ul>
+ </li>
+ <li><a title="Commercial/Industrial Development" href="?/building_development/commercial_industrial_development/index.cfm">Commercial / Industrial / Multi-Family Development</a>
+ <ul>
+ <li><a title="Call Before You Dig" href="?/building_development/commercial_industrial_development/call_before_you_dig.cfm">Call Before You Dig</a></li>
+ <li><a title="New Development" href="?/building_development/commercial_industrial_development/new_development.cfm">New Development</a></li>
+ <li><a title="Existing Development" href="?/building_development/commercial_industrial_development/existing_development.cfm">Existing Development</a></li>
+ <li><a title="Signage" href="?/building_development/commercial_industrial_development/signage.cfm">Signage</a></li>
+ <li><a title="Notice of Development" href="?/building_development/planning/notice_of_development/notice_of_development.cfm">Notice of Development</a></li>
+ <li><a title="Appeals" href="?/public_meetings/appeals/index.cfm">Appeals</a></li>
+ <li><a title="Customer Feedback" href="?/building_development/commercial_industrial_development/customer_feedback.cfm">Customer Feedback</a></li>
+ <li><a title="Certificate of Compliance" href="?/building_development/commercial_industrial_development/certificate_of_compliance.cfm">Certificate of Compliance</a></li>
+ <li><a title="Permit Applications &amp; Forms" href="?/building_development/commercial_industrial_development/permit_applications_forms.cfm">Permit Applications &amp; Forms</a></li>
+ <li><a title="Fees" href="?/building_development/commercial_industrial_development/fees.cfm">Fees</a></li>
+ </ul>
+ </li>
+ <li><!-- This links to an empty content page (25 Sept 2007) --> <a title="Residential Development" href="?/building_development/residential_development/index.cfm">Residential Development</a>
+ <ul>
+ <li><a title="Call Before You Dig" href="?/building_development/residential_construction/building_permit_requirements.cfm">Building Permit Requirements</a></li>
+ <li><a title="New Development" href="?/building_development/residential_construction/new_homes.cfm">New Homes</a></li>
+ <li><a title="Existing Development" href="?/building_development/residential_construction/basements.cfm">Basements</a></li>
+ <li><a title="Signage" href="?/building_development/commercial_industrial_development/call_before_you_dig.cfm">Call Before You Dig</a></li>
+ <li><a title="Decks" href="?/building_development/residential_development/decks.cfm">Decks</a></li>
+ <li><a title="Detached Garages or Accessory Building" href="?/building_development/residential_development/detached_garages_or_accessory_building.cfm">Detached Garages or Accessory Building</a></li>
+ <li><a title="Grading" href="?/building_development/residential_development/grading.cfm">Grading</a></li>
+ <li><a title="Fences" href="?/building_development/residential_development/fences.cfm">Fences</a></li>
+ <li><a title="Applications, Permits &amp; Checklists" href="?/building_development/residential_development/applications_permits_checklists.cfm">Applications, Permits &amp; Checklists</a></li>
+ <li><a title="Certificate of Compliance" href="?/building_development/commercial_industrial_development/certificate_of_compliance.cfm">Certificate of Compliance</a></li>
+ <li><a title="Fees" href="?/building_development/residential_development/fees.cfm">Fees</a></li>
+ <li><a title="Notice of Development" href="?/building_development/planning/notice_of_development/notice_of_development.cfm">Notice of Development</a></li>
+ <li><a title="Street Addresses for New Construction" href="?/gis/index.cfm">Street Addresses for New Construction</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="?/community_safety/index.cfm">Community Safety</a>
+ <ul>
+ <li><a href="?/disaster_services/index.cfm">Disaster Services</a></li>
+
+ <li><a href="?/emergency_services/index.cfm">Emergency Services</a></li>
+ <li><a href="?/municipal_enforcement/index.cfm">Municipal Enforcement</a></li>
+ <li><a href="?/rcmp/index.cfm">Royal Canadian Mounted Police</a>
+ <ul>
+ <li><a title="Community Partnership Programs" href="?/rcmp/community_partnership_programs.cfm">Community Partnership Programs</a></li>
+ <li><a title="Traffic Services" href="?/rcmp/traffic_services.cfm">Traffic Services</a></li>
+
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a href="?/community_services/index.cfm">Community Services</a>
+ <ul>
+ <li><a href="?/directories/community_directory/index.cfm">Community Directory</a></li>
+ <li><a href="?/calendars/index.cfm">Community Calendar</a></li>
+
+ </ul>
+ </li>
+ <li><a href="?/engineering/index.cfm">Engineering Services </a></li>
+ <li><a href="?/finance/index.cfm">Finance</a></li>
+ <li><a href="?/gis/index.cfm">Maps (GIS)</a></li>
+ <li><a href="?/parks/parks_recreation.cfm">Parks &amp; Recreation</a></li>
+
+ <li><a href="?/public_works/index.cfm">Public Works</a></li>
+ <li><a href="?/recycling_waste/index.cfm">Recycling, Waste &amp; Composting</a>
+ <ul>
+ <li><a href="?/environmental_services/index.cfm">Environmental Services </a></li>
+ </ul>
+ </li>
+
+ <li><a href="?/social_planning/index.cfm">Social Planning</a></li>
+ <li><a href="?/taxation/index.cfm">Taxation</a></li>
+ <li><a href="?/transit/index.cfm">Transit</a></li>
+ <li><a href="?/utilities/index.cfm">Water &amp; Sewer (Utilities)</a></li>
+ </ul>
+ </li>
+
+ <li><span><strong>News</strong></span>
+ <ul>
+ <li><a href="?/enewsletters/index.cfm">Airdrie eNewsletters</a>
+ <ul>
+ <li><a href="?http://www.industrymailout.com/Industry/View.aspx?id=50169&amp;p=679b">Airdrie Today eNewsletter</a></li>
+ <li><a href="?http://www.industrymailout.com/Industry/View.aspx?id=47265&amp;q=0&amp;qz=4c4af0">Airdrie @Work eNewsletter</a></li>
+ <li><a href="?http://www.industrymailout.com/Industry/Archives.aspx?m=2682&amp;qz=73249dbb">Airdrie eNewsletter Archive</a></li>
+
+ </ul>
+ </li>
+ <li><a href="?/calendars/index.cfm">Community Calendar</a></li>
+ <li><a href="?/community_news/index.cfm">Community News</a></li>
+ <li><a href="?/news_release/index.cfm">News Releases</a> (2007)
+ <ul>
+ <li><a href="?/news_release/2006/index.cfm" title="2006 News Releases">2006 News Releases</a></li>
+
+ <li><a href="?/news_release/2005/index.cfm" title="2005 News Releases">2005 News Releases</a></li>
+ <li><a href="?/news_release/2004/index.cfm" title="2004 News Releases">2004 News Releases</a></li>
+ </ul>
+ </li>
+ <li><a href="?/building_development/planning/notice_of_development/notice_of_development.cfm">Notice of Development </a></li>
+ <li><a href="?/photogallery/index.cfm">Photo Gallery</a></li>
+ <li><a href="?/public_meetings/index.cfm">Public Meetings</a>
+
+ <ul>
+ <li><a href="?/public_meetings/appeals/index.cfm">Appeals</a></li>
+ <li><a href="?/public_meetings/open_houses/index.cfm">Open Houses</a></li>
+ <li><a href="?/public_meetings/public_hearings/index.cfm">Public Hearings</a></li>
+ </ul>
+ </li>
+ <li><a href="?/publications/index.cfm">Publications</a>
+
+ <ul>
+ <li><a href="?/publications/pdf/AirdrieLIFE_fall2006.pdf">Airdrie Life Magazine</a> (16MB, .PDF)</li>
+ <li><a href="?/publications/pdf/report_for_2005.pdf">Annual Economic Report</a> (5 MB, .PDF)</li>
+ <li><a href="?/publications/pdf/Airdrie%20community%20report%20for%202006_sm.pdf">Annual Community Report</a></li>
+ </ul>
+
+ </li>
+ </ul>
+ </li>
+ <li><span><strong>City Council &amp; Administration </strong></span>
+ <ul>
+ <li><a href="?/election/index.cfm">2007 Election</a>
+ <ul>
+
+ <li><a href="?/election/city_council.cfm" title="City Council">City Council</a></li>
+ <li><a href="?/election/candidates.cfm" title="Candidates">Candidates</a></li>
+ <li><a href="?/election/candidate_information_package.cfm" title="Candidate Information Package">Candidate Information Package</a></li>
+ <li><a href="?/election/faq.cfm" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
+ <li><a href="?/election/how_to_vote.cfm" title="How to Vote">How to Vote</a></li>
+ <li><a href="?/election/media.cfm" title="Media">Media</a></li>
+
+ <li><a href="?/election/past_elections.cfm" title="Past Elections">Past Elections</a></li>
+ </ul>
+ </li>
+ <li><a href="?/finance/budget_at_a_glance.cfm">Budget</a></li>
+ <li><a href="?/city_council/bylaws/index.cfm">Bylaws</a>
+ <ul>
+ <li><a href="?/city_council/bylaws/how_bylaws_are_passed.cfm">How Bylaws Are Passed</a></li>
+
+ <li><a href="?/city_council/bylaws/new_laws.cfm">New Laws</a></li>
+ <li><a href="?/city_council/policies.cfm">Policies</a></li>
+ </ul>
+ </li>
+ <li><a href="?/economic_development/census/index.cfm">Census</a></li>
+ <li><a href="?/city_council/index.cfm">City Council</a></li>
+
+ </ul>
+ <ul>
+ <li><a href="?/city_council/board_appointments.cfm">Board Appointments</a></li>
+ <li><a href="?/city_council/committees_boards_commission.cfm">Committees / Boards / Commssion</a>
+ <ul>
+ <li><a href="?/city_council/library_board.cfm" title="Airdrie Municipal Library Board">Airdrie Municipal Library Board</a></li>
+ <li><a href="?/city_council/assessment_review_board.cfm" title="Assessment Review Board">Assessment Review Board</a></li>
+
+ <li><a href="?/city_council/community_service_advisory_board.cfm" title="Community Services Advisory Board">Community Services Advisory Board</a></li>
+ <li><a href="?/city_council/enviromental_advisory_board.cfm" title="Environmental Advisory Board">Environmental Advisory Board</a></li>
+ <li><a href="?/city_council/finance_committee.cfm" title="Finance Advisory Committee">Finance Advisory Committee</a></li>
+ <li><a href="?/city_council/municipal_planning_commission.cfm" title="Municipal Planning Commission">Municipal Planning Commission</a></li>
+ <li><a href="?/city_council/municipal_police_committee.cfm" title="Municipal Police Committee">Municipal Police Committee</a></li>
+ <li><a href="?/city_council/subdivision_development_appeal_board.cfm" title="Subdivision and Development Appeal Board">Subdivision and Development Appeal Board</a></li>
+
+ </ul>
+ </li>
+ <li><a href="?/city_council/faq.cfm">Frequently Asked Questions (FAQ's)</a></li>
+ <li><a href="?/city_council/mayors_message.cfm">Mayor's Message</a></li>
+ <li><a href="?/city_council/mission_vision.cfm">Mission and Vision</a></li>
+ <li><a href="?/city_council/meet_your_council.cfm">Meet Your Council</a></li>
+ <li><a href="?/city_council/strategic_priorities.cfm">Strategic Priorities</a>
+
+ <ul>
+ <li><a href="?/city_council/strategic_priorities.cfm" title="Strategic Priorities 2008">Strategic Priorities 2008</a></li>
+ <li><a href="?/city_council/strategic_priorities_07.cfm" title="Strategic Priorities 2007">Strategic Priorities 2007</a></li>
+ <li><a href="?/city_council/strategic_priorities_06.cfm" title="Strategic Priorities 2006">Strategic Priorities 2006</a></li>
+ <li><a href="?/city_council/strategic_priorities_05.cfm" title="Strategic Priorities 2005">Strategic Priorities 2005</a></li>
+ <li><a href="?/city_council/strategic_priorities_04.cfm" title="Strategic Priorities 2004">Strategic Priorities 2004</a></li>
+
+ </ul>
+ </li>
+ <li><a href="?/city_council/city_council_meetings.cfm">City Council Meetings</a>
+ <ul>
+ <li><a href="?/city_council/agendas/2007_agendas.cfm">City Council Meeting Agendas</a>
+ <ul>
+ <li><a href="?/city_council/agendas/2007_agendas.cfm" title="2007 Agendas">2007 City Council Meeting Agendas</a></li>
+
+ <li><a href="?/city_council/agendas/2006_agendas.cfm" title="2006 Agendas">2006 City Council Meeting Agendas</a></li>
+ <li><a href="?/city_council/agendas/2005_agendas.cfm" title="2005 Agendas">2005 City Council Meeting Agendas</a></li>
+ <li><a href="?/city_council/agendas/2004_agendas.cfm" title="2004 Agendas">2004 City Council Meeting Agendas</a></li>
+ </ul>
+ </li>
+ <li><a href="?/city_council/minutes/2007_minutes.cfm">City Council Meeting Minutes</a>
+ <ul>
+
+ <li><a href="?/city_council/minutes/2007_minutes.cfm" title="2007 City Council Meeting Minutes">2007 City Council Meeting Minutes</a></li>
+ <li><a href="?/city_council/minutes/2006_minutes.cfm" title="2006 City Council Meeting Minutes">2006 City Council Meeting Minutes</a></li>
+ <li><a href="?/city_council/minutes/2005_minutes.cfm" title="2005 City Council Meeting Minutes">2005 City Council Meeting Minutes</a></li>
+ <li><a href="?/city_council/minutes/2004_minutes.cfm" title="2004 City Council Meeting Minutes">2004 City Council Meeting Minutes</a></li>
+ </ul>
+ </li>
+ <li><a href="?/city_council/synopsis/2007_synopsis.cfm">City Council Meeting Synopsis</a>
+
+ <ul>
+ <li><a href="?/city_council/synopsis/2007_synopsis.cfm" title="2007 City Council Meeting Synopsis">2007 City Council Meeting Synopsis</a></li>
+ <li><a href="?/city_council/synopsis/2006_synopsis.cfm" title="2006 City Council Meeting Synopsis">2006 City Council Meeting Synopsis</a></li>
+ <li><a href="?/city_council/synopsis/2005_synopsis.cfm" title="2005 City Council Meeting Synopsis">2005 City Council Meeting Synopsis</a></li>
+ <li><a href="?/city_council/synopsis/2004_synopsis.cfm" title="2004 City Council Meeting Synopsis">2004 City Council Meeting Synopsis</a></li>
+ </ul>
+ </li>
+
+ <li><a href="?/city_council/how_to_go_to_council.cfm">How to Go to Council</a></li>
+ </ul>
+ </li>
+ <li><a href="?/city_council/foip.cfm">FOIP</a></li>
+ <li><a href="?/city_council/how_government_works.cfm">How Government Works</a></li>
+ <li><a href="?/city_council/legislative_admin_services.cfm">Legislative &amp; Admin Services</a>
+
+ <ul>
+ <li><a href="?/city_council/city_managers_message.cfm">City Manager's Message</a></li>
+ </ul>
+ </li>
+ <li><a href="?/org_chart/index.cfm">Organizational Chart</a></li>
+ </ul>
+ </li>
+ <li><strong><a href="?#">Lifestyle</a></strong>
+
+ <ul>
+ <li><a href="?/about_airdrie/index.cfm">About Airdrie</a>
+ <ul>
+ <li><a href="?/about_airdrie/history.cfm">History</a></li>
+ </ul>
+ </li>
+ <li><a href="?/arts_culture/index.cfm">Arts &amp; Culture</a>
+
+ <ul>
+ <li><a href="?/arts_culture/airdrie_art.cfm">Airdrie Art</a></li>
+ <li><a href="?http://www.airdriepubliclibrary.ca/">Airdrie Public Library</a></li>
+ <li><a href="?/arts_culture/airdrie_rodeo_ranch.cfm">Airdrie Rodeo Ranch</a></li>
+ <li><a href="?/bert_church_theatre/index.cfm">Bert Church LIVE Theatre</a></li>
+ <li><a href="?/twinning_program/index.cfm">Korean Twinning Program</a></li>
+
+ <li><a href="?/arts_culture/little_theatre_association.cfm">Little Theatre Association</a></li>
+ <li><a href="?/sport_community_facilities/nose_creek_valley_museum.cfm">Nose Creek Valley Museum</a></li>
+ <li><a href="?http://www.rockyview.ab.ca/rvae/">Rocky View Adult Education</a></li>
+ </ul>
+ </li>
+ <li><a href="?/bert_church_theatre/index.cfm">Bert Church LIVE Theatre</a>
+ <ul>
+
+ <li><a href="?/bert_church_theatre/about_us.cfm" title="About Us">About Us</a></li>
+ <li><a href="?/bert_church_theatre/season_program.cfm" title="Current Season Program">Current Season Program</a></li>
+ <li><a href="?/bert_church_theatre/box_office.cfm" title="Box Office">Box Office</a></li>
+ <li><a href="?/bert_church_theatre/theatre_rental.cfm" title="Theatre Rental">Theatre Rental</a></li>
+ <li><a href="?/bert_church_theatre/technical_specifications.cfm" title="Technical Specifications">Technical Specifications</a></li>
+ <li><a href="?/bert_church_theatre/contact_us.cfm" title="Contact Us">Contact Us</a></li>
+
+ <li><a href="?/bert_church_theatre/photogallery.cfm" title="Photo Gallery">Photo Gallery</a></li>
+ <li><a href="?/bert_church_theatre/links.cfm" title="Links">Links</a></li>
+ <li><a href="?http://www.theresawasden.com/music_in_common.htm" title="Performing Arts Classes">Performing Arts Classes</a></li>
+ </ul>
+ </li>
+ <li><a href="?/elrwc/index.cfm">East Lake Recreation &amp; Wellness Centre</a>
+
+ <ul>
+ <li><a href="?/elrwc/about_facility.cfm" title="About the Facility">About the Facility</a></li>
+ <li><a href="?/elrwc/contact.cfm" title="Contact Us">Contact Us</a></li>
+ <li><a href="?/elrwc/forms.cfm" title="Forms">Forms</a></li>
+ <li><a href="?/elrwc/future_phases.cfm" title="Future Phases">Future Phases</a></li>
+ <li><a href="?/elrwc/hours_operation.cfm" title="Hours of Operation &amp; Schedules">Hours of Operation &amp; Schedules</a>
+
+ <ul>
+ <li><a href="?/elrwc/schedules.cfm">Schedules</a></li>
+ </ul>
+ </li>
+ <li><a href="?/elrwc/city_guide.cfm" title="In the City Guide">In the City Guide</a></li>
+ <li><a href="?/elrwc/opportunities_events.cfm" title="Opportunities &amp; Events">Opportunities &amp; Events</a></li>
+
+ <li><a href="?/elrwc/programs_services.cfm" title="Programs &amp; Services">Programs &amp; Services</a>
+ <ul>
+ <li><a title="Aquatics" href="?/elrwc/aquatics.cfm">Aquatics</a>
+ <ul>
+ <li><a title="Water Drop-in Classes" href="?/elrwc/water_classes.cfm">Water Drop-in Classes</a></li>
+
+ </ul>
+ </li>
+ <li><a title="Child Care Services" href="?/elrwc/child_services.cfm">Child Care Services</a></li>
+ <li><a title="Children Activities" href="?/elrwc/children_activities.cfm">Children Activities</a></li>
+ <li><a title="Fitness &amp; Wellness" href="?/elrwc/fitness_wellness.cfm">Fitness &amp; Wellness</a>
+
+ <ul>
+ <li><a title="Dry Land Drop-in Classes" href="?/elrwc/land_classes.cfm">Dry Land Drop-in Classes</a></li>
+ <li><a title="Fitness &amp; Wellness Services" href="?/elrwc/fitness_wellness_services.cfm">Fitness &amp; Wellness Services</a></li>
+ </ul>
+ </li>
+ <li><a title="Party Packages" href="?/elrwc/party_packages.cfm">Party Packages</a></li>
+
+ <li><a title="Room Rentals" href="?/elrwc/room_rentals.cfm">Room Rentals</a></li>
+ </ul>
+ </li>
+ <li><a href="?/elrwc/rates_fees.cfm" title="Rates &amp; Fees">Rates &amp; Fees</a></li>
+ <li><a href="?/elrwc/register_now.cfm" title="Register Now">Register Now</a></li>
+
+ </ul>
+ </li>
+ <li><a href="?/education/index.cfm">Education</a></li>
+ <li><a href="?/health/index.cfm">Health</a></li>
+ <li><a href="?/gis/index.cfm">Maps (GIS)</a></li>
+ <li><a href="?/parks/parks_recreation.cfm">Parks &amp; Recreation</a></li>
+
+ <li><a title="Parks" href="?/parks/index.cfm">Parks</a>
+ <ul>
+ <li><a title="City Parks Programs" href="?city_parks_programs.cfm">City Parks Programs</a>
+ <ul>
+ <li><a href="?airdrie_horticulture_society.cfm" title="Airdrie Horticulture Society">Airdrie Horticulture Society</a></li>
+ <li><a href="?communities_in_bloom.cfm" title="Communities in Bloom">Communities in Bloom</a></li>
+ <li><a href="?community_garden.cfm" title="Community Garden">Community Garden</a></li>
+
+ <li><a href="?landscape_awards_program.cfm" title="Landscape Awards Program">Landscape Awards Program</a></li>
+ </ul>
+ </li>
+ <li><a title="Maintenance" href="?maintenance.cfm">Maintenance</a>
+ <ul>
+ <li><a href="?dandelions.cfm" title="Dandelions">Dandelions</a></li>
+ <li><a href="?gophers.cfm" title="Gophers">Gophers</a></li>
+
+ <li><a href="?grass_cutting.cfm" title="Grass Cutting">Grass Cutting</a></li>
+ <li><a href="?pathway_snow_removal.cfm" title="Pathway Snow Removal">Pathway Snow Removal</a></li>
+ </ul>
+ </li>
+ <li><a title="Maps" href="?/gis/index.cfm">Maps</a></li>
+ <li><a title="Outdoor Facilities" href="?outdoor_facilities.cfm">Outdoor Facilities</a>
+ <ul>
+
+ <li><a title="Ball Diamonds" href="?ball_diamonds.cfm">Ball Diamonds</a></li>
+ <li><a title="BMX Track" href="?bmx_track.cfm">BMX Track</a></li>
+ <li><a title="Bookings" href="?bookings.cfm">Bookings</a></li>
+ <li><a title="Cemetery" href="?cemetery.cfm">Cemetery</a></li>
+ <li><a title="Fire Pits" href="?fire_pits.cfm">Fire Pits</a></li>
+ <li><a title="Gwacheon Park" href="?/twinning_program/index.cfm#gwacheon">Gwacheon Park</a></li>
+
+ <li><a title="Off-Leash Areas" href="?off_leash_areas.cfm">Off-Leash Areas</a></li>
+ <li><a title="Outdoor Rinks" href="?outdoor_rinks.cfm">Outdoor Rinks</a></li>
+ <li><a title="Parks &amp; Playgrounds" href="?parks_playgrounds.cfm">Parks & Playgrounds</a></li>
+ <li><a title="Skate Park" href="?skate_park.cfm">Skate Park</a></li>
+ <li><a title="Soccer/Athletic Fields" href="?soccer_athletic_fields.cfm">Soccer/Athletic Fields</a></li>
+ <li><a title="Splash Park" href="?splash_park.cfm">Splash Park</a></li>
+
+ <li><a title="Tennis Courts" href="?tennis_courts.cfm">Tennis Courts</a></li>
+ </ul>
+ </li>
+ <li><a title="Parks Planning &amp; Construction" href="?parks_planning_construction.cfm">Parks Planning & Construction</a>
+ <ul>
+ <li><a href="?construction.cfm" title="Construction">Construction</a></li>
+ <li><a href="?plans.cfm" title="Plans">Plans</a></li>
+
+ </ul>
+ </li>
+ <li><a title="Urban Forest" href="?urban_forest.cfm">Urban Forest</a>
+ <ul>
+ <li><a href="?city_trees.cfm" title="City Trees">City Trees</a></li>
+ <li><a href="?tree_planting.cfm" title="Tree Planting">Tree Planting</a></li>
+ </ul>
+
+ </li>
+ <li><a title="Weeds &amp; Pests" href="?weeds_pests.cfm">Weeds & Pests</a>
+ <ul>
+ <li><a href="?mosquito_control.cfm" title="Mosquito Control">Mosquito Control</a></li>
+ <li><a href="?pest_control.cfm" title="Pest Control">Pest Control</a></li>
+ <li><a href="?weed_control_plant_disease.cfm" title="Weed Control &amp; Plant Disease">Weed Control &amp; Plant Disease</a></li>
+
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li><a title="Sport &amp; Community Facilities" href="?/sport_community_facilities/index.cfm">Sport &amp; Community Facilities</a>
+ <ul>
+ <li><a title="Indoor Facilities" href="?/sport_community_facilities/indoor_facilities.cfm">Indoor Facilities</a>
+
+ <ul>
+ <li><a title="Arenas/Gymnastics" href="?/sport_community_facilities/arenas_gymnastics.cfm">Arenas/Gymnastics</a></li>
+ <li><a title="Curling Rink" href="?/sport_community_facilities/curling_rink.cfm">Curling Rink</a></li>
+ <li><a title="East Lake Recreation &amp; Wellness Centre" href="?/elrwc/index.cfm">East Lake Recreation &amp; Wellness Centre</a></li>
+ <li><a title="Nose Creek Valley Museum" href="?/sport_community_facilities/nose_creek_valley_museum.cfm">Nose Creek Valley Museum</a></li>
+ <li><a title="Over 50 Club" href="?/sport_community_facilities/over_50_club.cfm">Over 50 Club</a></li>
+
+ <li><a title="Town &amp; Country" href="?/sport_community_facilities/town_country.cfm">Town &amp; Country</a></li>
+ </ul>
+ </li>
+ <li><a title="Outdoor Facilities" href="?/parks/outdoor_facilities.cfm">Outdoor Facilities</a></li>
+ </ul>
+ </li>
+ </ul>
+
+ </li>
+ <li><strong><a href="?#">Visiting</a></strong>
+ <ul>
+ <li><a href="?/economic_development/video/index.cfm">Airdrie LIFE Video</a></li>
+ <li><a href="?/gis/recreation_map/index.cfm">Community Map</a></li>
+ <li><a href="?/events/index.cfm">Events</a>
+ <ul>
+
+ <li><a href="?http://www.airdriefestivaloflights.com">Airdrie Festival of Lights</a></li>
+ <li><a href="?http://www.airdrieprorodeo.net/">Airdrie Pro Rodeo</a></li>
+ <li><a href="?http://www.pch.gc.ca/special/canada/index_e.cfm">Canada Day</a></li>
+ </ul>
+ </li>
+ <li><a href="?/parks/parks_recreation.cfm">Parks &amp; Recreation</a></li>
+
+ <li><a href="?/economic_development/tourist_information/tourist_information.cfm">Tourist Information</a>
+ <ul>
+ <li><a href="?/economic_development/entertainment/entertainment.cfm">Entertainment</a></li>
+ <li><a href="?/economic_development/hotels/hotels.cfm">Hotels</a></li>
+ <li><a href="?/economic_development/restaurants/restaurants.cfm">Restaurants</a></li>
+ <li><a href="?/economic_development/shopping/shopping.cfm">Shopping</a></li>
+
+ <li><a href="?http://www1.travelalberta.com/en-ab/index.cfm?country=CA&amp;state=AB&amp;setlocale=1">Travel Alberta</a></li>
+ </ul>
+ </li>
+ <li><a href="?http://www.woodsidegc.com/contact.html">Woodside Golf Course</a></li>
+ </ul>
+ </li>
+ <li><strong><a href="?/economic_development/index.cfm">Doing Business</a></strong>
+
+ <ul>
+ <li><a href="?/economic_development/business_attraction/index.cfm">Business Attraction</a>
+ <ul>
+ <li><a href="?http://www.albertafirst.com/profiles/statspack/20365.html">Airdrie Profile</a></li>
+ <li><a href="?/economic_development/business_attraction/business_case.cfm">Business Case For Airdrie</a></li>
+ <li><a href="?/economic_development/census/index.cfm">Census Data </a></li>
+ <li><a href="?http://www.albertafirst.com/realestate/">Properties and Businesses For Sale</a></li>
+
+ <li><a href="?/taxation/non_residential_comparisons.cfm">Taxation</a></li>
+ </ul>
+ </li>
+ <li><a href="?/economic_development/business_development/index.cfm">Business Development</a>
+ <ul>
+ <li><a href="?/economic_development/business_development/business_associations.cfm">Business Associations</a></li>
+ <li><a href="?/economic_development/business_development/business_resources.cfm">Business Resources</a></li>
+
+ <li><a href="?/economic_development/business_development/business_services.cfm">Business Services</a></li>
+ <li><a href="?/corporate_properties/index.cfm">Corporate Properties</a></li>
+ <li><a href="?/economic_development/business_development/home_businesses.cfm">Home Based Businesses</a></li>
+ </ul>
+ </li>
+ <li><a href="?/directories/business_directory/index.cfm">Business Directory</a></li>
+
+ <li><a href="?/economic_development/business_licenses/index.cfm">Business Licenses</a>
+ <ul>
+ <li><a href="?/economic_development/business_licenses/municipal_licenses_permits.cfm">Municipal Licenses &amp; Permits</a></li>
+ <li><a href="?/economic_development/business_licenses/provincial_licenses_permits.cfm">Provincial Licenses &amp; Permits</a></li>
+ <li><a href="?/economic_development/business_licenses/registry_services.cfm">Registry Services</a></li>
+
+ </ul>
+ </li>
+ <li><a href="?http://bsa.canadabusiness.ca/gol/bsa/site.nsf/en/index.html">How to Start a Business</a></li>
+ <li><a href="?/finance/procurement_services.cfm">Procurement Services</a></li>
+ </ul>
+ </li>
+ <li><strong><a href="?https://vch.airdrie.ca/index.cfm">Online Services</a></strong></li>
+
+</ul>
+</div>
+
+</div>
+
+</body>
+
+</html>
diff --git a/mod/pages/vendors/jquery-treeview/demo/prerendered.html b/mod/pages/vendors/jquery-treeview/demo/prerendered.html
new file mode 100644
index 000000000..a8e2b5ae6
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/prerendered.html
@@ -0,0 +1,620 @@
+<!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>jQuery treeview</title>
+
+ <link rel="stylesheet" href="../jquery.treeview.css" />
+ <link rel="stylesheet" href="screen.css" />
+
+ <script src="../lib/jquery.js" type="text/javascript"></script>
+ <script src="../lib/jquery.cookie.js" type="text/javascript"></script>
+ <script src="../jquery.treeview.js" type="text/javascript"></script>
+
+ <script type="text/javascript">
+ $(function() {
+ $("#tree").treeview({
+ collapsed: true,
+ animated: "fast",
+ control:"#sidetreecontrol",
+ prerendered: true,
+ persist: "location"
+ });
+ })
+
+ </script>
+
+</head>
+<body>
+
+ <h1 id="banner"><a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/">jQuery Treeview Plugin</a> Demo</h1>
+ <div id="main">
+
+ <a href=".">Main Demo</a>
+
+<div id="sidetree">
+ <div class="treeheader">&nbsp;</div>
+ <div id="sidetreecontrol"> <a href="?#">Collapse All</a> | <a href="?#">Expand All</a> </div>
+
+ <ul class="treeview" id="tree">
+
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/index.cfm">Home</a>
+ <ul style="display: none;">
+ <li><a href="?/enewsletters/index.cfm">Airdrie eNewsletters </a></li>
+ <li><a href="?/index.cfm">Airdrie Directories</a></li>
+ <li><a href="?/economic_development/video/index.cfm">Airdrie Life Video</a></li>
+
+ <li><a href="?/index.cfm">Airdrie News</a></li>
+
+ <li><a href="?/index.cfm">Airdrie Quick Links</a></li>
+ <li><a href="?http://weather.ibegin.com/ca/ab/airdrie/" target="_blank">Airdrie Weather</a></li>
+ <li><a href="?/human_resources/index.cfm">Careers</a> | <a href="?/contact_us/index.cfm">Contact Us</a> | <a href="?/site_map/index.cfm">Site Map</a> | <a href="?/links/index.cfm">Links</a></li>
+
+ <li><a href="?/calendars/index.cfm">Community Calendar </a></li>
+ <li><a href="?/conditions_of_use/index.cfm">Conditions of Use and Privacy Statement</a></li>
+ <li><a href="?/index.cfm">I'd like to find out about... </a></li>
+ <li><a href="?/index.cfm">Opportunities</a></li>
+ <li><a href="?/links/index.cfm">Resource Links</a></li>
+ <li class="last"><a href="?/index.cfm">Special Notices</a></li>
+
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><span>City Services</span>
+ <ul style="display: none;">
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/assessment/index.cfm">Assessment</a>
+ <ul style="display: none;">
+ <li><a href="?/assessment/assessment_faqs.cfm">Assessment FAQs</a></li>
+
+ <li><a href="?/assessment/property_assessment_notices.cfm">2007 Property Assessment Notices</a></li>
+ <li><a href="?http://www.creb.com/" target="_blank">CREB</a></li>
+ <li><a href="?/assessment/non_residential_assessment_tax_comparisons.cfm">Non-Residential Assessment / Tax Comparisons</a></li>
+ <li><a href="?/assessment/how_to_file_a_complaint.cfm">How to File a Complaint</a></li>
+ <li class="last"><a href="?/assessment/supplementary_assessment_tax.cfm">Supplementary Assessment and Tax</a></li>
+ </ul>
+
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/building_development/index.cfm">Building &amp; Development </a>
+ <ul style="display: none;">
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/building_inspections/index.cfm">Building Inspections</a>
+ <ul style="display: none;">
+ <li><a href="?/building_inspections/builder_forums.cfm">Builder Forums</a></li>
+
+ <li><a href="?/building_inspections/contact_us.cfm">Contact Us</a></li>
+ <li><a href="?/building_inspections/contractor_notices.cfm">Contractor Notices</a></li>
+ <li><a href="?/building_inspections/inspector_guidelines.cfm">Inspector Guidelines</a></li>
+ <li><a href="?/building_inspections/links.cfm">Links</a></li>
+ <li class="expandable lastExpandable"><div class="hitarea expandable-hitarea lastExpandable-hitarea"></div><a href="?/building_inspections/statistics_2007.cfm">Statistics</a>
+ <ul style="display: none;">
+
+ <li><a href="?/building_inspections/statistics_2006.cfm">Statistics 2006</a></li>
+ <li class="last"><a href="?/building_inspections/statistics_2005.cfm">Statistics 2005</a></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a title="City Infrastructure" href="?/building_development/city_infrastructure/index.cfm">City Infrastructure</a>
+
+ <ul style="display: none;">
+
+ <li><a href="?/building_development/city_infrastructure/roadway_improvement.cfm">Roadway Improvement</a></li>
+ <li><a href="?/building_development/city_infrastructure/traffic.cfm">Traffic</a></li>
+ <li><a href="?/building_development/city_infrastructure/transportation_planning.cfm">Transportation &amp; Infrastructure Planning</a></li>
+ <li class="last"><a href="?/building_development/city_infrastructure/water_sewer_construction.cfm">Water &amp; Sewer Construction</a></li>
+
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a title="Commercial/Industrial Development" href="?/building_development/commercial_industrial_development/index.cfm">Commercial / Industrial / Multi-Family Development</a>
+ <ul style="display: none;">
+ <li><a title="Call Before You Dig" href="?/building_development/commercial_industrial_development/call_before_you_dig.cfm">Call Before You Dig</a></li>
+ <li><a title="New Development" href="?/building_development/commercial_industrial_development/new_development.cfm">New Development</a></li>
+ <li><a title="Existing Development" href="?/building_development/commercial_industrial_development/existing_development.cfm">Existing Development</a></li>
+
+ <li><a title="Signage" href="?/building_development/commercial_industrial_development/signage.cfm">Signage</a></li>
+ <li><a title="Notice of Development" href="?/building_development/planning/notice_of_development/notice_of_development.cfm">Notice of Development</a></li>
+ <li><a title="Appeals" href="?/public_meetings/appeals/index.cfm">Appeals</a></li>
+ <li><a title="Customer Feedback" href="?/building_development/commercial_industrial_development/customer_feedback.cfm">Customer Feedback</a></li>
+ <li><a title="Certificate of Compliance" href="?/building_development/commercial_industrial_development/certificate_of_compliance.cfm">Certificate of Compliance</a></li>
+ <li><a title="Permit Applications &amp; Forms" href="?/building_development/commercial_industrial_development/permit_applications_forms.cfm">Permit Applications &amp; Forms</a></li>
+
+ <li class="last"><a title="Fees" href="?/building_development/commercial_industrial_development/fees.cfm">Fees</a></li>
+ </ul>
+ </li>
+ <li class="expandable lastExpandable"><div class="hitarea expandable-hitarea lastExpandable-hitarea"></div><!-- This links to an empty content page (25 Sept 2007) --> <a title="Residential Development" href="?/building_development/residential_development/index.cfm">Residential Development</a>
+ <ul style="display: none;">
+ <li><a title="Call Before You Dig" href="?/building_development/residential_construction/building_permit_requirements.cfm">Building Permit Requirements</a></li>
+ <li><a title="New Development" href="?/building_development/residential_construction/new_homes.cfm">New Homes</a></li>
+
+ <li><a title="Existing Development" href="?/building_development/residential_construction/basements.cfm">Basements</a></li>
+ <li><a title="Signage" href="?/building_development/commercial_industrial_development/call_before_you_dig.cfm">Call Before You Dig</a></li>
+ <li><a title="Decks" href="?/building_development/residential_development/decks.cfm">Decks</a></li>
+ <li><a title="Detached Garages or Accessory Building" href="?/building_development/residential_development/detached_garages_or_accessory_building.cfm">Detached Garages or Accessory Building</a></li>
+ <li><a title="Grading" href="?/building_development/residential_development/grading.cfm">Grading</a></li>
+ <li><a title="Fences" href="?/building_development/residential_development/fences.cfm">Fences</a></li>
+
+ <li><a title="Applications, Permits &amp; Checklists" href="?/building_development/residential_development/applications_permits_checklists.cfm">Applications, Permits &amp; Checklists</a></li>
+ <li><a title="Certificate of Compliance" href="?/building_development/commercial_industrial_development/certificate_of_compliance.cfm">Certificate of Compliance</a></li>
+ <li><a title="Fees" href="?/building_development/residential_development/fees.cfm">Fees</a></li>
+ <li><a title="Notice of Development" href="?/building_development/planning/notice_of_development/notice_of_development.cfm">Notice of Development</a></li>
+ <li class="last"><a title="Street Addresses for New Construction" href="?/gis/index.cfm">Street Addresses for New Construction</a></li>
+
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/community_safety/index.cfm">Community Safety</a>
+ <ul style="display: none;">
+ <li><a href="?/disaster_services/index.cfm">Disaster Services</a></li>
+
+ <li><a href="?/emergency_services/index.cfm">Emergency Services</a></li>
+ <li><a href="?/municipal_enforcement/index.cfm">Municipal Enforcement</a></li>
+ <li class="expandable lastExpandable"><div class="hitarea expandable-hitarea lastExpandable-hitarea"></div><a href="?/rcmp/index.cfm">Royal Canadian Mounted Police</a>
+ <ul style="display: none;">
+ <li><a title="Community Partnership Programs" href="?/rcmp/community_partnership_programs.cfm">Community Partnership Programs</a></li>
+ <li class="last"><a title="Traffic Services" href="?/rcmp/traffic_services.cfm">Traffic Services</a></li>
+
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/community_services/index.cfm">Community Services</a>
+ <ul style="display: none;">
+ <li><a href="?/directories/community_directory/index.cfm">Community Directory</a></li>
+
+ <li class="last"><a href="?/calendars/index.cfm">Community Calendar</a></li>
+
+ </ul>
+ </li>
+ <li><a href="?/engineering/index.cfm">Engineering Services </a></li>
+ <li><a href="?/finance/index.cfm">Finance</a></li>
+ <li><a href="?/gis/index.cfm">Maps (GIS)</a></li>
+
+ <li><a href="?/parks/parks_recreation.cfm">Parks &amp; Recreation</a></li>
+
+ <li><a href="?/public_works/index.cfm">Public Works</a></li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/recycling_waste/index.cfm">Recycling, Waste &amp; Composting</a>
+ <ul style="display: none;">
+ <li class="last"><a href="?/environmental_services/index.cfm">Environmental Services </a></li>
+
+ </ul>
+ </li>
+
+ <li><a href="?/social_planning/index.cfm">Social Planning</a></li>
+ <li><a href="?/taxation/index.cfm">Taxation</a></li>
+ <li><a href="?/transit/index.cfm">Transit</a></li>
+ <li class="last"><a href="?/utilities/index.cfm">Water &amp; Sewer (Utilities)</a></li>
+
+ </ul>
+ </li>
+
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><span>News</span>
+ <ul style="display: none;">
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/enewsletters/index.cfm">Airdrie eNewsletters</a>
+ <ul style="display: none;">
+ <li><a href="?http://www.industrymailout.com/Industry/View.aspx?id=50169&amp;p=679b" target="_new">Airdrie Today eNewsletter</a></li>
+
+ <li><a href="?http://www.industrymailout.com/Industry/View.aspx?id=47265&amp;q=0&amp;qz=4c4af0" target="_new">Airdrie @Work eNewsletter</a></li>
+ <li class="last"><a href="?http://www.industrymailout.com/Industry/Archives.aspx?m=2682&amp;qz=73249dbb" target="_new">Airdrie eNewsletter Archive</a></li>
+
+ </ul>
+ </li>
+ <li><a href="?/calendars/index.cfm">Community Calendar</a></li>
+ <li><a href="?/community_news/index.cfm">Community News</a></li>
+
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/news_release/index.cfm">News Releases</a> (2007)
+ <ul style="display: none;">
+ <li><a href="?/news_release/2006/index.cfm" title="2006 News Releases">2006 News Releases</a></li>
+
+ <li><a href="?/news_release/2005/index.cfm" title="2005 News Releases">2005 News Releases</a></li>
+ <li class="last"><a href="?/news_release/2004/index.cfm" title="2004 News Releases">2004 News Releases</a></li>
+ </ul>
+
+ </li>
+ <li><a href="?/building_development/planning/notice_of_development/notice_of_development.cfm">Notice of Development </a></li>
+ <li><a href="?/photogallery/index.cfm">Photo Gallery</a></li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/public_meetings/index.cfm">Public Meetings</a>
+
+ <ul style="display: none;">
+ <li><a href="?/public_meetings/appeals/index.cfm">Appeals</a></li>
+
+ <li><a href="?/public_meetings/open_houses/index.cfm">Open Houses</a></li>
+ <li class="last"><a href="?/public_meetings/public_hearings/index.cfm">Public Hearings</a></li>
+ </ul>
+ </li>
+ <li class="expandable lastExpandable"><div class="hitarea expandable-hitarea lastExpandable-hitarea"></div><a href="?/publications/index.cfm">Publications</a>
+
+ <ul style="display: none;">
+ <li><a href="?/publications/pdf/AirdrieLIFE_fall2006.pdf">Airdrie Life Magazine</a> (16MB, .PDF)</li>
+
+ <li><a href="?/publications/pdf/report_for_2005.pdf">Annual Economic Report</a> (5 MB, .PDF)</li>
+ <li class="last"><a href="?/publications/pdf/Airdrie%20community%20report%20for%202006_sm.pdf">Annual Community Report</a></li>
+ </ul>
+
+ </li>
+ </ul>
+ </li>
+
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><span>City Council &amp; Administration </span>
+ <ul style="display: none;">
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/election/index.cfm">2007 Election</a>
+ <ul style="display: none;">
+
+ <li><a href="?/election/city_council.cfm" title="City Council">City Council</a></li>
+ <li><a href="?/election/candidates.cfm" title="Candidates">Candidates</a></li>
+
+ <li><a href="?/election/candidate_information_package.cfm" title="Candidate Information Package">Candidate Information Package</a></li>
+ <li><a href="?/election/faq.cfm" title="Frequently Asked Questions">Frequently Asked Questions</a></li>
+ <li><a href="?/election/how_to_vote.cfm" title="How to Vote">How to Vote</a></li>
+ <li><a href="?/election/media.cfm" title="Media">Media</a></li>
+
+ <li class="last"><a href="?/election/past_elections.cfm" title="Past Elections">Past Elections</a></li>
+ </ul>
+
+ </li>
+ <li><a href="?/finance/budget_at_a_glance.cfm">Budget</a></li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/city_council/bylaws/index.cfm">Bylaws</a>
+ <ul style="display: none;">
+ <li><a href="?/city_council/bylaws/how_bylaws_are_passed.cfm">How Bylaws Are Passed</a></li>
+
+ <li><a href="?/city_council/bylaws/new_laws.cfm">New Laws</a></li>
+
+ <li class="last"><a href="?/city_council/policies.cfm">Policies</a></li>
+ </ul>
+ </li>
+ <li><a href="?/economic_development/census/index.cfm">Census</a></li>
+ <li class="last"><a href="?/city_council/index.cfm">City Council</a></li>
+
+ </ul>
+ <ul style="display: none;">
+
+ <li><a href="?/city_council/board_appointments.cfm">Board Appointments</a></li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/city_council/committees_boards_commission.cfm">Committees / Boards / Commssion</a>
+ <ul style="display: none;">
+ <li><a href="?/city_council/library_board.cfm" title="Airdrie Municipal Library Board">Airdrie Municipal Library Board</a></li>
+ <li><a href="?/city_council/assessment_review_board.cfm" title="Assessment Review Board">Assessment Review Board</a></li>
+
+ <li><a href="?/city_council/community_service_advisory_board.cfm" title="Community Services Advisory Board">Community Services Advisory Board</a></li>
+
+ <li><a href="?/city_council/enviromental_advisory_board.cfm" title="Environmental Advisory Board">Environmental Advisory Board</a></li>
+ <li><a href="?/city_council/finance_committee.cfm" title="Finance Advisory Committee">Finance Advisory Committee</a></li>
+ <li><a href="?/city_council/municipal_planning_commission.cfm" title="Municipal Planning Commission">Municipal Planning Commission</a></li>
+ <li><a href="?/city_council/municipal_police_committee.cfm" title="Municipal Police Committee">Municipal Police Committee</a></li>
+ <li class="last"><a href="?/city_council/subdivision_development_appeal_board.cfm" title="Subdivision and Development Appeal Board">Subdivision and Development Appeal Board</a></li>
+
+ </ul>
+
+ </li>
+ <li><a href="?/city_council/faq.cfm">Frequently Asked Questions (FAQ's)</a></li>
+ <li><a href="?/city_council/mayors_message.cfm">Mayor's Message</a></li>
+ <li><a href="?/city_council/mission_vision.cfm">Mission and Vision</a></li>
+ <li><a href="?/city_council/meet_your_council.cfm">Meet Your Council</a></li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/city_council/strategic_priorities.cfm">Strategic Priorities</a>
+
+ <ul style="display: none;">
+ <li><a href="?/city_council/strategic_priorities.cfm" title="Strategic Priorities 2008">Strategic Priorities 2008</a></li>
+ <li><a href="?/city_council/strategic_priorities_07.cfm" title="Strategic Priorities 2007">Strategic Priorities 2007</a></li>
+ <li><a href="?/city_council/strategic_priorities_06.cfm" title="Strategic Priorities 2006">Strategic Priorities 2006</a></li>
+ <li><a href="?/city_council/strategic_priorities_05.cfm" title="Strategic Priorities 2005">Strategic Priorities 2005</a></li>
+ <li class="last"><a href="?/city_council/strategic_priorities_04.cfm" title="Strategic Priorities 2004">Strategic Priorities 2004</a></li>
+
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/city_council/city_council_meetings.cfm">City Council Meetings</a>
+ <ul style="display: none;">
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/city_council/agendas/2007_agendas.cfm">City Council Meeting Agendas</a>
+ <ul style="display: none;">
+ <li><a href="?/city_council/agendas/2007_agendas.cfm" title="2007 Agendas">2007 City Council Meeting Agendas</a></li>
+
+ <li><a href="?/city_council/agendas/2006_agendas.cfm" title="2006 Agendas">2006 City Council Meeting Agendas</a></li>
+ <li><a href="?/city_council/agendas/2005_agendas.cfm" title="2005 Agendas">2005 City Council Meeting Agendas</a></li>
+ <li class="last"><a href="?/city_council/agendas/2004_agendas.cfm" title="2004 Agendas">2004 City Council Meeting Agendas</a></li>
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/city_council/minutes/2007_minutes.cfm">City Council Meeting Minutes</a>
+
+ <ul style="display: none;">
+
+ <li><a href="?/city_council/minutes/2007_minutes.cfm" title="2007 City Council Meeting Minutes">2007 City Council Meeting Minutes</a></li>
+ <li><a href="?/city_council/minutes/2006_minutes.cfm" title="2006 City Council Meeting Minutes">2006 City Council Meeting Minutes</a></li>
+ <li><a href="?/city_council/minutes/2005_minutes.cfm" title="2005 City Council Meeting Minutes">2005 City Council Meeting Minutes</a></li>
+ <li class="last"><a href="?/city_council/minutes/2004_minutes.cfm" title="2004 City Council Meeting Minutes">2004 City Council Meeting Minutes</a></li>
+ </ul>
+
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/city_council/synopsis/2007_synopsis.cfm">City Council Meeting Synopsis</a>
+
+ <ul style="display: none;">
+ <li><a href="?/city_council/synopsis/2007_synopsis.cfm" title="2007 City Council Meeting Synopsis">2007 City Council Meeting Synopsis</a></li>
+ <li><a href="?/city_council/synopsis/2006_synopsis.cfm" title="2006 City Council Meeting Synopsis">2006 City Council Meeting Synopsis</a></li>
+ <li><a href="?/city_council/synopsis/2005_synopsis.cfm" title="2005 City Council Meeting Synopsis">2005 City Council Meeting Synopsis</a></li>
+
+ <li class="last"><a href="?/city_council/synopsis/2004_synopsis.cfm" title="2004 City Council Meeting Synopsis">2004 City Council Meeting Synopsis</a></li>
+ </ul>
+ </li>
+
+ <li class="last"><a href="?/city_council/how_to_go_to_council.cfm">How to Go to Council</a></li>
+ </ul>
+ </li>
+ <li><a href="?/city_council/foip.cfm">FOIP</a></li>
+
+ <li><a href="?/city_council/how_government_works.cfm">How Government Works</a></li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/city_council/legislative_admin_services.cfm">Legislative &amp; Admin Services</a>
+
+ <ul style="display: none;">
+ <li class="last"><a href="?/city_council/city_managers_message.cfm">City Manager's Message</a></li>
+ </ul>
+ </li>
+
+ <li class="last"><a href="?/org_chart/index.cfm">Organizational Chart</a></li>
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?lifestyle">Lifestyle</a>
+
+ <ul style="display: none;">
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/about_airdrie/index.cfm">About Airdrie</a>
+ <ul style="display: none;">
+
+ <li class="last"><a href="?/about_airdrie/history.cfm">History</a></li>
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/arts_culture/index.cfm">Arts &amp; Culture</a>
+
+ <ul style="display: none;">
+ <li><a href="?/arts_culture/airdrie_art.cfm">Airdrie Art</a></li>
+
+ <li><a href="?http://www.airdriepubliclibrary.ca/" target="_new">Airdrie Public Library</a></li>
+ <li><a href="?/arts_culture/airdrie_rodeo_ranch.cfm">Airdrie Rodeo Ranch</a></li>
+ <li><a href="?/twinning_program/index.cfm">Korean Twinning Program</a></li>
+
+ <li><a href="?/arts_culture/little_theatre_association.cfm">Little Theatre Association</a></li>
+ <li><a href="?/sport_community_facilities/nose_creek_valley_museum.cfm" target="_new">Nose Creek Valley Museum</a></li>
+
+ <li class="last"><a href="?http://www.rockyview.ab.ca/rvae/" target="_new">Rocky View Adult Education</a></li>
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/bert_church_theatre/index.cfm">Bert Church LIVE Theatre</a>
+ <ul style="display: none;">
+
+ <li><a href="?/bert_church_theatre/about_us.cfm" title="About Us">About Us</a></li>
+ <li><a href="?/bert_church_theatre/season_program.cfm" title="Current Season Program">Current Season Program</a></li>
+
+ <li><a href="?/bert_church_theatre/box_office.cfm" title="Box Office">Box Office</a></li>
+ <li><a href="?/bert_church_theatre/theatre_rental.cfm" title="Theatre Rental">Theatre Rental</a></li>
+ <li><a href="?/bert_church_theatre/technical_specifications.cfm" title="Technical Specifications">Technical Specifications</a></li>
+ <li><a href="?/bert_church_theatre/contact_us.cfm" title="Contact Us">Contact Us</a></li>
+
+ <li><a href="?/bert_church_theatre/photogallery.cfm" title="Photo Gallery">Photo Gallery</a></li>
+ <li><a href="?/bert_church_theatre/links.cfm" title="Links">Links</a></li>
+
+ <li class="last"><a href="?http://www.theresawasden.com/music_in_common.htm" target="_blank" title="Performing Arts Classes">Performing Arts Classes</a></li>
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/elrwc/index.cfm">East Lake Recreation &amp; Wellness Centre</a>
+
+ <ul style="display: none;">
+ <li><a href="?/elrwc/about_facility.cfm" title="About the Facility">About the Facility</a></li>
+
+ <li><a href="?/elrwc/contact.cfm" title="Contact Us">Contact Us</a></li>
+ <li><a href="?/elrwc/forms.cfm" title="Forms">Forms</a></li>
+ <li><a href="?/elrwc/future_phases.cfm" title="Future Phases">Future Phases</a></li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/elrwc/hours_operation.cfm" title="Hours of Operation &amp; Schedules">Hours of Operation &amp; Schedules</a>
+
+ <ul style="display: none;">
+
+ <li class="last"><a href="?/elrwc/schedules.cfm">Schedules</a></li>
+ </ul>
+ </li>
+ <li><a href="?/elrwc/city_guide.cfm" title="In the City Guide">In the City Guide</a></li>
+ <li><a href="?/elrwc/opportunities_events.cfm" title="Opportunities &amp; Events">Opportunities &amp; Events</a></li>
+
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/elrwc/programs_services.cfm" title="Programs &amp; Services">Programs &amp; Services</a>
+
+ <ul style="display: none;">
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a title="Aquatics" href="?/elrwc/aquatics.cfm">Aquatics</a>
+ <ul style="display: none;">
+ <li class="last"><a title="Water Drop-in Classes" href="?/elrwc/water_classes.cfm">Water Drop-in Classes</a></li>
+
+ </ul>
+ </li>
+ <li><a title="Child Care Services" href="?/elrwc/child_services.cfm">Child Care Services</a></li>
+
+ <li><a title="Children Activities" href="?/elrwc/children_activities.cfm">Children Activities</a></li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a title="Fitness &amp; Wellness" href="?/elrwc/fitness_wellness.cfm">Fitness &amp; Wellness</a>
+
+ <ul style="display: none;">
+ <li><a title="Dry Land Drop-in Classes" href="?/elrwc/land_classes.cfm">Dry Land Drop-in Classes</a></li>
+ <li class="last"><a title="Fitness &amp; Wellness Services" href="?/elrwc/fitness_wellness_services.cfm">Fitness &amp; Wellness Services</a></li>
+
+ </ul>
+ </li>
+ <li><a title="Party Packages" href="?/elrwc/party_packages.cfm">Party Packages</a></li>
+
+ <li class="last"><a title="Room Rentals" href="?/elrwc/room_rentals.cfm">Room Rentals</a></li>
+ </ul>
+ </li>
+ <li><a href="?/elrwc/rates_fees.cfm" title="Rates &amp; Fees">Rates &amp; Fees</a></li>
+
+ <li class="last"><a href="?/elrwc/register_now.cfm" title="Register Now">Register Now</a></li>
+
+ </ul>
+ </li>
+ <li><a href="?/education/index.cfm">Education</a></li>
+ <li><a href="?/health/index.cfm">Health</a></li>
+ <li><a href="?/gis/index.cfm">Maps (GIS)</a></li>
+
+ <li><a href="?/parks/parks_recreation.cfm">Parks &amp; Recreation</a></li>
+
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a title="Parks" href="?/parks/index.cfm">Parks</a>
+ <ul style="display: none;">
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a title="City Parks Programs" href="?city_parks_programs.cfm">City Parks Programs</a>
+ <ul style="display: none;">
+ <li><a href="?airdrie_horticulture_society.cfm" title="Airdrie Horticulture Society">Airdrie Horticulture Society</a></li>
+
+ <li><a href="?communities_in_bloom.cfm" title="Communities in Bloom">Communities in Bloom</a></li>
+ <li><a href="?community_garden.cfm" title="Community Garden">Community Garden</a></li>
+
+ <li class="last"><a href="?landscape_awards_program.cfm" title="Landscape Awards Program">Landscape Awards Program</a></li>
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a title="Maintenance" href="?maintenance.cfm">Maintenance</a>
+
+ <ul style="display: none;">
+ <li><a href="?dandelions.cfm" title="Dandelions">Dandelions</a></li>
+ <li><a href="?gophers.cfm" title="Gophers">Gophers</a></li>
+
+ <li><a href="?grass_cutting.cfm" title="Grass Cutting">Grass Cutting</a></li>
+ <li class="last"><a href="?pathway_snow_removal.cfm" title="Pathway Snow Removal">Pathway Snow Removal</a></li>
+ </ul>
+
+ </li>
+ <li><a title="Maps" href="?/gis/index.cfm">Maps</a></li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a title="Outdoor Facilities" href="?outdoor_facilities.cfm">Outdoor Facilities</a>
+ <ul style="display: none;">
+
+ <li><a title="Ball Diamonds" href="?ball_diamonds.cfm">Ball Diamonds</a></li>
+ <li><a title="BMX Track" href="?bmx_track.cfm">BMX Track</a></li>
+
+ <li><a title="Bookings" href="?bookings.cfm">Bookings</a></li>
+ <li><a title="Cemetery" href="?cemetery.cfm">Cemetery</a></li>
+ <li><a title="Fire Pits" href="?fire_pits.cfm">Fire Pits</a></li>
+ <li><a title="Gwacheon Park" href="?/twinning_program/index.cfm#gwacheon">Gwacheon Park</a></li>
+
+ <li><a title="Off-Leash Areas" href="?off_leash_areas.cfm">Off-Leash Areas</a></li>
+ <li><a title="Outdoor Rinks" href="?outdoor_rinks.cfm">Outdoor Rinks</a></li>
+
+ <li><a title="Parks &amp; Playgrounds" href="?parks_playgrounds.cfm">Parks &amp; Playgrounds</a></li>
+ <li><a title="Skate Park" href="?skate_park.cfm">Skate Park</a></li>
+ <li><a title="Soccer/Athletic Fields" href="?soccer_athletic_fields.cfm">Soccer/Athletic Fields</a></li>
+ <li><a title="Splash Park" href="?splash_park.cfm">Splash Park</a></li>
+
+ <li class="last"><a title="Tennis Courts" href="?tennis_courts.cfm">Tennis Courts</a></li>
+
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a title="Parks Planning &amp; Construction" href="?parks_planning_construction.cfm">Parks Planning &amp; Construction</a>
+ <ul style="display: none;">
+ <li><a href="?construction.cfm" title="Construction">Construction</a></li>
+ <li class="last"><a href="?plans.cfm" title="Plans">Plans</a></li>
+
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a title="Urban Forest" href="?urban_forest.cfm">Urban Forest</a>
+ <ul style="display: none;">
+ <li><a href="?city_trees.cfm" title="City Trees">City Trees</a></li>
+ <li class="last"><a href="?tree_planting.cfm" title="Tree Planting">Tree Planting</a></li>
+ </ul>
+
+ </li>
+ <li class="expandable lastExpandable"><div class="hitarea expandable-hitarea lastExpandable-hitarea"></div><a title="Weeds &amp; Pests" href="?weeds_pests.cfm">Weeds &amp; Pests</a>
+ <ul style="display: none;">
+ <li><a href="?mosquito_control.cfm" title="Mosquito Control">Mosquito Control</a></li>
+ <li><a href="?pest_control.cfm" title="Pest Control">Pest Control</a></li>
+ <li class="last"><a href="?weed_control_plant_disease.cfm" title="Weed Control &amp; Plant Disease">Weed Control &amp; Plant Disease</a></li>
+
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li class="expandable lastExpandable"><div class="hitarea expandable-hitarea lastExpandable-hitarea"></div><a title="Sport &amp; Community Facilities" href="?/sport_community_facilities/index.cfm">Sport &amp; Community Facilities</a>
+ <ul style="display: none;">
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a title="Indoor Facilities" href="?/sport_community_facilities/indoor_facilities.cfm">Indoor Facilities</a>
+
+ <ul style="display: none;">
+ <li><a title="Arenas/Gymnastics" href="?/sport_community_facilities/arenas_gymnastics.cfm">Arenas/Gymnastics</a></li>
+ <li><a title="Curling Rink" href="?/sport_community_facilities/curling_rink.cfm">Curling Rink</a></li>
+ <li><a title="East Lake Recreation &amp; Wellness Centre" href="?/elrwc/index.cfm">East Lake Recreation &amp; Wellness Centre</a></li>
+ <li><a title="Nose Creek Valley Museum" href="?/sport_community_facilities/nose_creek_valley_museum.cfm">Nose Creek Valley Museum</a></li>
+
+ <li><a title="Over 50 Club" href="?/sport_community_facilities/over_50_club.cfm">Over 50 Club</a></li>
+
+ <li class="last"><a title="Town &amp; Country" href="?/sport_community_facilities/town_country.cfm">Town &amp; Country</a></li>
+ </ul>
+ </li>
+ <li class="last"><a title="Outdoor Facilities" href="?/parks/outdoor_facilities.cfm">Outdoor Facilities</a></li>
+ </ul>
+
+ </li>
+ </ul>
+
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?visiting">Visiting</a>
+ <ul style="display: none;">
+ <li><a href="?/gis/recreation_map/index.cfm">Community Map</a></li>
+
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/events/index.cfm">Events</a>
+ <ul style="display: none;">
+
+ <li><a href="?http://www.airdriefestivaloflights.com" target="_new">Airdrie Festival of Lights</a></li>
+ <li><a href="?http://www.airdrieprorodeo.net/" target="_new">Airdrie Pro Rodeo</a></li>
+ <li class="last"><a href="?http://www.pch.gc.ca/special/canada/index_e.cfm" target="_new">Canada Day</a></li>
+ </ul>
+
+ </li>
+ <li><a href="?/parks/parks_recreation.cfm">Parks &amp; Recreation</a></li>
+
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/economic_development/tourist_information/tourist_information.cfm">Tourist Information</a>
+ <ul style="display: none;">
+ <li><a href="?/economic_development/entertainment/entertainment.cfm">Entertainment</a></li>
+ <li><a href="?/economic_development/hotels/hotels.cfm">Hotels</a></li>
+
+ <li><a href="?/economic_development/restaurants/restaurants.cfm">Restaurants</a></li>
+ <li><a href="?/economic_development/shopping/shopping.cfm">Shopping</a></li>
+
+ <li class="last"><a href="?http://www1.travelalberta.com/en-ab/index.cfm?country=CA&amp;state=AB&amp;setlocale=1" target="_new">Travel Alberta</a></li>
+ </ul>
+ </li>
+ <li class="last"><a href="?http://www.woodsidegc.com/contact.html" target="_new">Woodside Golf Course</a></li>
+
+ </ul>
+ </li>
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/economic_development/index.cfm">Doing Business</a>
+
+ <ul style="display: none;">
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/economic_development/business_attraction/index.cfm">Business Attraction</a>
+ <ul style="display: none;">
+ <li><a href="?http://www.albertafirst.com/profiles/statspack/20365.html" target="_new">Airdrie Profile</a></li>
+
+ <li><a href="?/economic_development/business_attraction/business_case.cfm">Business Case For Airdrie</a></li>
+ <li><a href="?/economic_development/census/index.cfm">Census Data </a></li>
+ <li><a href="?http://www.albertafirst.com/realestate/" target="_new">Properties and Businesses For Sale</a></li>
+
+ <li class="last"><a href="?/taxation/non_residential_comparisons.cfm">Taxation</a></li>
+ </ul>
+ </li>
+
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/economic_development/business_development/index.cfm">Business Development</a>
+ <ul style="display: none;">
+ <li><a href="?/economic_development/business_development/business_associations.cfm">Business Associations</a></li>
+ <li><a href="?/economic_development/business_development/business_resources.cfm">Business Resources</a></li>
+
+ <li><a href="?/economic_development/business_development/business_services.cfm">Business Services</a></li>
+ <li><a href="?/corporate_properties/index.cfm">Corporate Properties</a></li>
+
+ <li class="last"><a href="?/economic_development/business_development/home_businesses.cfm">Home Based Businesses</a></li>
+ </ul>
+ </li>
+ <li><a href="?/directories/business_directory/index.cfm">Business Directory</a></li>
+
+ <li class="expandable"><div class="hitarea expandable-hitarea"></div><a href="?/economic_development/business_licenses/index.cfm">Business Licenses</a>
+ <ul style="display: none;">
+ <li><a href="?/economic_development/business_licenses/municipal_licenses_permits.cfm">Municipal Licenses &amp; Permits</a></li>
+
+ <li><a href="?/economic_development/business_licenses/provincial_licenses_permits.cfm">Provincial Licenses &amp; Permits</a></li>
+ <li class="last"><a href="?/economic_development/business_licenses/registry_services.cfm">Registry Services</a></li>
+
+ </ul>
+ </li>
+ <li><a href="?http://bsa.canadabusiness.ca/gol/bsa/site.nsf/en/index.html" target="_new">How to Start a Business</a></li>
+ <li class="last"><a href="?/finance/procurement_services.cfm">Procurement Services</a></li>
+
+ </ul>
+ </li>
+ <li class="last"><a href="?https://vch.airdrie.ca/index.cfm">Online Services</a></li>
+
+</ul>
+</div>
+
+</div>
+
+</body>
+
+</html>
diff --git a/mod/pages/vendors/jquery-treeview/demo/screen.css b/mod/pages/vendors/jquery-treeview/demo/screen.css
new file mode 100644
index 000000000..965653c8e
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/screen.css
@@ -0,0 +1,24 @@
+html, body {height:100%; margin: 0; padding: 0; }
+
+html>body {
+ font-size: 16px;
+ font-size: 68.75%;
+} /* Reset Base Font Size */
+
+body {
+ font-family: Verdana, helvetica, arial, sans-serif;
+ font-size: 68.75%;
+ background: #fff;
+ color: #333;
+}
+
+h1, h2 { font-family: 'trebuchet ms', verdana, arial; padding: 10px; margin: 0 }
+h1 { font-size: large }
+
+#banner { padding: 15px; background-color: #06b; color: white; font-size: large; border-bottom: 1px solid #ccc;
+ background: url(bg.gif) repeat-x; text-align: center }
+#banner a { color: white; }
+
+#main { padding: 1em; }
+
+a img { border: none; } \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/demo/simple.html b/mod/pages/vendors/jquery-treeview/demo/simple.html
new file mode 100644
index 000000000..f79bd96a5
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/simple.html
@@ -0,0 +1,82 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
+ <title>jQuery treeview</title>
+
+ <link rel="stylesheet" href="../jquery.treeview.css" />
+ <link rel="stylesheet" href="../red-treeview.css" />
+ <link rel="stylesheet" href="screen.css" />
+
+ <script src="../lib/jquery.js" type="text/javascript"></script>
+ <script src="../lib/jquery.cookie.js" type="text/javascript"></script>
+ <script src="../jquery.treeview.js" type="text/javascript"></script>
+
+ <script type="text/javascript">
+ $(document).ready(function(){
+ $("#browser").treeview({
+ toggle: function() {
+ console.log("%s was toggled.", $(this).find(">span").text());
+ }
+ });
+
+ $("#add").click(function() {
+ var branches = $("<li><span class='folder'>New Sublist</span><ul>" +
+ "<li><span class='file'>Item1</span></li>" +
+ "<li><span class='file'>Item2</span></li></ul></li>").appendTo("#browser");
+ $("#browser").treeview({
+ add: branches
+ });
+ });
+ });
+ </script>
+ </head>
+ <body>
+
+ <h1 id="banner"><a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/">jQuery Treeview Plugin</a> Demo</h1>
+ <div id="main">
+
+ <a href=".">Main Demo</a>
+
+ <ul id="browser" class="filetree treeview-famfamfam">
+ <li><span class="folder">Folder 1</span>
+ <ul>
+ <li><span class="folder">Item 1.1</span>
+ <ul>
+ <li><span class="file">Item 1.1.1</span></li>
+ </ul>
+ </li>
+ <li><span class="folder">Folder 2</span>
+ <ul>
+ <li><span class="folder">Subfolder 2.1</span>
+ <ul id="folder21">
+ <li><span class="file">File 2.1.1</span></li>
+ <li><span class="file">File 2.1.2</span></li>
+ </ul>
+ </li>
+ <li><span class="folder">Subfolder 2.2</span>
+ <ul>
+ <li><span class="file">File 2.2.1</span></li>
+ <li><span class="file">File 2.2.2</span></li>
+ </ul>
+ </li>
+ </ul>
+ </li>
+ <li class="closed"><span class="folder">Folder 3 (closed at start)</span>
+ <ul>
+ <li><span class="file">File 3.1</span></li>
+ </ul>
+ </li>
+ <li><span class="file">File 4</span></li>
+ </ul>
+ </li>
+ </ul>
+
+ <button id="add">Add!</button>
+
+ <p>+/- Icons from <a href="http://www.famfamfam.com/lab/icons/">famfamfam</a></p>
+
+</div>
+
+</body></html> \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/demo/sortable.html b/mod/pages/vendors/jquery-treeview/demo/sortable.html
new file mode 100644
index 000000000..6189400cb
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/sortable.html
@@ -0,0 +1,222 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+
+ <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"/>
+ <title>jQuery treeview</title>
+
+ <link rel="stylesheet" href="../jquery.treeview.css" />
+ <link rel="stylesheet" href="screen.css" />
+
+
+ <script src="../../../jquery/src/core.js" type="text/javascript" charset="utf-8"></script>
+ <script src="../../../jquery/src/selector.js" type="text/javascript" charset="utf-8"></script>
+ <script src="../../../jquery/src/event.js" type="text/javascript" charset="utf-8"></script>
+ <script src="../../../jquery/src/ajax.js" type="text/javascript" charset="utf-8"></script>
+ <script src="../../../jquery/src/fx.js" type="text/javascript" charset="utf-8"></script>
+ <script src="../../../jquery/src/offset.js" type="text/javascript" charset="utf-8"></script>
+ <script src="../../../jquery/src/dimensions.js" type="text/javascript" charset="utf-8"></script>
+
+
+ <script src="../lib/jquery.cookie.js" type="text/javascript"></script>
+ <script src="../jquery.treeview.js" type="text/javascript"></script>
+ <script src="../jquery.treeview.edit.js" type="text/javascript"></script>
+
+ <script src="../../../ui/ui.core.js" type="text/javascript" charset="utf-8"></script>
+ <script src="../../../ui/ui.droppable.js" type="text/javascript" charset="utf-8"></script>
+ <script src="../jquery.treeview.sortable.js" type="text/javascript"></script>
+
+ <style type="text/css" media="screen">
+ .drop {
+ background-color: #eee !important;
+ border: 1px dotted #333;
+ }
+ .bar {
+ border-bottom: 1px dotted blue;
+ }
+
+ .float {
+ float: left;
+ border: 1px solid #aaa;
+ margin: 10px;
+ padding: 10px;
+ }
+
+ div.treeview-helper {
+ border: 1px solid #aaa;
+ background: #fff;
+ padding: 5px;
+ padding-left: 25px;
+ }
+
+ </style>
+
+ <script type="text/javascript">
+ (function($) {
+ var CLASSES = $.treeview.classes;
+ var proxied = $.fn.treeview;
+ $.fn.treeview = function(settings) {
+ settings = $.extend({}, settings);
+ if (settings.update) {
+ return this.trigger("update", [settings.update]);
+ }
+ return proxied.apply(this, arguments).bind("update", function(event, branches) {
+ if (branches.hasClass(CLASSES.last) || branches.hasClass(CLASSES.lastExpandable) || branches.hasClass(CLASSES.lastCollapsable)) {
+ branches.prev().addClass(CLASSES.last)
+ .filter("." + CLASSES.expandable).replaceClass(CLASSES.last, CLASSES.lastExpandable).end()
+ .find(">.hitarea").replaceClass(CLASSES.expandableHitarea, CLASSES.lastExpandableHitarea).end()
+ .filter("." + CLASSES.collapsable).replaceClass(CLASSES.last, CLASSES.lastCollapsable).end()
+ .find(">.hitarea").replaceClass(CLASSES.collapsableHitarea, CLASSES.lastCollapsableHitarea);
+ }
+ });
+ };
+
+ })(jQuery);
+
+
+
+
+ $.fn.sortableTreeview = function(o) {
+ this.each(function() {
+
+ $(this).treeview().sortableTree({
+ connectWith: o.connectWith,
+ items: 'li',
+ helper: function(e,item) {
+ return $("<div class='treeview-helper'>"+item.find("span").html()+"</div>");
+ },
+ //revert: true,
+ sortIndication: {
+ down: function(item) {
+ item.css("border-top", "1px dotted black");
+ },
+ up: function(item) {
+ item.css("border-bottom", "1px dotted black");
+ },
+ remove: function(item) {
+ item.css("border-bottom", "0px").css("border-top", "0px");
+ }
+ },
+ start: function(event, ui) {
+ ui.instance.element.treeview({update: ui.item});
+
+ },
+ update: function(event, ui) {
+ ui.item.removeClass();
+ ui.instance.element.treeview({add: ui.item});
+ }
+ });
+
+ $(".folder", this).droppable({
+ accept: "li",
+ hoverClass: "drop",
+ tolerance: "pointer",
+ drop: function(e,ui) {
+ $("> ul", this.parentNode).append(ui.draggable);
+ },
+ over: function(e,ui) {
+ ui.helper.css("outline", "2px solid green");
+ },
+ out: function(e,ui) {
+ ui.helper.css("outline", "2px solid red");
+ }
+ });
+
+ });
+ };
+
+
+ $(function() {
+
+
+ $("#browser, #browser2").sortableTreeview({ connectWith: ["#browser", "#browser2"] });
+
+ })
+
+ </script>
+
+ </head>
+ <body>
+
+ <h1 id="banner"><a href="http://bassistance.de/jquery-plugins/jquery-plugin-treeview/">jQuery Treeview Plugin</a> Demo</h1>
+ <div id="main">
+
+ <a href=".">Main Demo</a>
+
+ <h4>Sample 1 - default, right-click to remove items</h4>
+
+<div class="float">
+ <ul id="browser" class="filetree">
+ <li><span class="folder">Folder 1</span>
+ <ul>
+ <li><span class="file">Item 1.1</span></li>
+ </ul>
+ </li>
+ <li><span class="folder">Folder 2</span>
+ <ul>
+ <li><span class="folder">Subfolder 2.1</span>
+ <ul id="folder21">
+ <li><span class="file">File 2.1.1</span></li>
+ <li><span class="file">File 2.1.2</span></li>
+ <li><span class="file">File 2.1.3</span></li>
+ <li class="closed"><span class="folder">Folder 3 (closed at start)</span>
+ <ul>
+ <li><span class="file">File 3.1</span></li>
+ </ul>
+ </li>
+ <li><span class="file">File 2.1.4</span></li>
+ <li><span class="file">File 2.1.5</span></li>
+ <li><span class="file">File 2.1.6</span></li>
+ </ul>
+ </li>
+ <li><span class="file">File 2.2</span></li>
+ </ul>
+ </li>
+ <li class="closed"><span class="folder">Folder 3 (closed at start)</span>
+ <ul>
+ <li><span class="file">File 3.1</span></li>
+ </ul>
+ </li>
+ <li><span class="file">File 4</span></li>
+ </ul>
+</div>
+
+<div class="float">
+ <ul id="browser2" class="filetree">
+ <li><span class="folder">Folder 1</span>
+ <ul>
+ <li><span class="file">Item 1.1</span></li>
+ </ul>
+ </li>
+ <li><span class="folder">Folder 2</span>
+ <ul>
+ <li><span class="folder">Subfolder 2.1</span>
+ <ul id="folder21">
+ <li><span class="file">File 2.1.1</span></li>
+ <li><span class="file">File 2.1.2</span></li>
+ <li><span class="file">File 2.1.3</span></li>
+ <li class="closed"><span class="folder">Folder 3 (closed at start)</span>
+ <ul>
+ <li><span class="file">File 3.1</span></li>
+ </ul>
+ </li>
+ <li><span class="file">File 2.1.4</span></li>
+ <li><span class="file">File 2.1.5</span></li>
+ <li><span class="file">File 2.1.6</span></li>
+ </ul>
+ </li>
+ <li><span class="file">File 2.2</span></li>
+ </ul>
+ </li>
+ <li class="closed"><span class="folder">Folder 3 (closed at start)</span>
+ <ul>
+ <li><span class="file">File 3.1</span></li>
+ </ul>
+ </li>
+ <li><span class="file">File 4</span></li>
+ </ul>
+</div>
+
+ </div>
+
+</body></html> \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/demo/source.php b/mod/pages/vendors/jquery-treeview/demo/source.php
new file mode 100644
index 000000000..c31b957f9
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/source.php
@@ -0,0 +1,88 @@
+<?php
+if ($_REQUEST['root'] == "source"):
+?>
+[
+ {
+ "text": "1. Pre Lunch (120 min)",
+ "expanded": true,
+ "classes": "important",
+ "children":
+ [
+ {
+ "text": "1.1 The State of the Powerdome (30 min)"
+ },
+ {
+ "text": "1.2 The Future of jQuery (30 min)"
+ },
+ {
+ "text": "1.2 jQuery UI - A step to richnessy (60 min)"
+ }
+ ]
+ },
+ {
+ "text": "2. Lunch (60 min)"
+ },
+ {
+ "text": "3. After Lunch (120+ min)",
+ "children":
+ [
+ {
+ "text": "3.1 jQuery Calendar Success Story (20 min)"
+ },
+ {
+ "text": "3.2 jQuery and Ruby Web Frameworks (20 min)"
+ },
+ {
+ "text": "3.3 Hey, I Can Do That! (20 min)"
+ },
+ {
+ "text": "3.4 Taconite and Form (20 min)"
+ },
+ {
+ "text": "3.5 Server-side JavaScript with jQuery and AOLserver (20 min)"
+ },
+ {
+ "text": "3.6 The Onion: How to add features without adding features (20 min)",
+ "id": "36",
+ "hasChildren": true
+ },
+ {
+ "text": "3.7 Visualizations with JavaScript and Canvas (20 min)"
+ },
+ {
+ "text": "3.8 ActiveDOM (20 min)"
+ },
+ {
+ "text": "3.8 Growing jQuery (20 min)"
+ }
+ ]
+ }
+]
+<?php else: sleep(1); ?>
+
+[
+ {
+ "text": "1. Review of existing structures",
+ "expanded": true,
+ "children":
+ [
+ {
+ "text": "1.1 jQuery core"
+ },
+ {
+ "text": "1.2 metaplugins"
+ }
+ ]
+ },
+ {
+ "text": "2. Wrapper plugins"
+ },
+ {
+ "text": "3. Summary"
+ },
+ {
+ "text": "4. Questions and answers"
+ }
+
+]
+<?php endif; ?> \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/demo/source.phps b/mod/pages/vendors/jquery-treeview/demo/source.phps
new file mode 100644
index 000000000..c31b957f9
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/demo/source.phps
@@ -0,0 +1,88 @@
+<?php
+if ($_REQUEST['root'] == "source"):
+?>
+[
+ {
+ "text": "1. Pre Lunch (120 min)",
+ "expanded": true,
+ "classes": "important",
+ "children":
+ [
+ {
+ "text": "1.1 The State of the Powerdome (30 min)"
+ },
+ {
+ "text": "1.2 The Future of jQuery (30 min)"
+ },
+ {
+ "text": "1.2 jQuery UI - A step to richnessy (60 min)"
+ }
+ ]
+ },
+ {
+ "text": "2. Lunch (60 min)"
+ },
+ {
+ "text": "3. After Lunch (120+ min)",
+ "children":
+ [
+ {
+ "text": "3.1 jQuery Calendar Success Story (20 min)"
+ },
+ {
+ "text": "3.2 jQuery and Ruby Web Frameworks (20 min)"
+ },
+ {
+ "text": "3.3 Hey, I Can Do That! (20 min)"
+ },
+ {
+ "text": "3.4 Taconite and Form (20 min)"
+ },
+ {
+ "text": "3.5 Server-side JavaScript with jQuery and AOLserver (20 min)"
+ },
+ {
+ "text": "3.6 The Onion: How to add features without adding features (20 min)",
+ "id": "36",
+ "hasChildren": true
+ },
+ {
+ "text": "3.7 Visualizations with JavaScript and Canvas (20 min)"
+ },
+ {
+ "text": "3.8 ActiveDOM (20 min)"
+ },
+ {
+ "text": "3.8 Growing jQuery (20 min)"
+ }
+ ]
+ }
+]
+<?php else: sleep(1); ?>
+
+[
+ {
+ "text": "1. Review of existing structures",
+ "expanded": true,
+ "children":
+ [
+ {
+ "text": "1.1 jQuery core"
+ },
+ {
+ "text": "1.2 metaplugins"
+ }
+ ]
+ },
+ {
+ "text": "2. Wrapper plugins"
+ },
+ {
+ "text": "3. Summary"
+ },
+ {
+ "text": "4. Questions and answers"
+ }
+
+]
+<?php endif; ?> \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/images/ajax-loader.gif b/mod/pages/vendors/jquery-treeview/images/ajax-loader.gif
new file mode 100644
index 000000000..bc545850a
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/ajax-loader.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/file.gif b/mod/pages/vendors/jquery-treeview/images/file.gif
new file mode 100644
index 000000000..7e6216798
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/file.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/folder-closed.gif b/mod/pages/vendors/jquery-treeview/images/folder-closed.gif
new file mode 100644
index 000000000..541107888
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/folder-closed.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/folder.gif b/mod/pages/vendors/jquery-treeview/images/folder.gif
new file mode 100644
index 000000000..2b31631ca
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/folder.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/minus.gif b/mod/pages/vendors/jquery-treeview/images/minus.gif
new file mode 100644
index 000000000..47fb7b767
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/minus.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/plus.gif b/mod/pages/vendors/jquery-treeview/images/plus.gif
new file mode 100644
index 000000000..690662162
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/plus.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/treeview-black-line.gif b/mod/pages/vendors/jquery-treeview/images/treeview-black-line.gif
new file mode 100644
index 000000000..e5496877a
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/treeview-black-line.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/treeview-black.gif b/mod/pages/vendors/jquery-treeview/images/treeview-black.gif
new file mode 100644
index 000000000..d549b9fc5
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/treeview-black.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/treeview-default-line.gif b/mod/pages/vendors/jquery-treeview/images/treeview-default-line.gif
new file mode 100644
index 000000000..37114d306
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/treeview-default-line.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/treeview-default.gif b/mod/pages/vendors/jquery-treeview/images/treeview-default.gif
new file mode 100644
index 000000000..a12ac52ff
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/treeview-default.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/treeview-famfamfam-line.gif b/mod/pages/vendors/jquery-treeview/images/treeview-famfamfam-line.gif
new file mode 100644
index 000000000..6e289cecc
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/treeview-famfamfam-line.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/treeview-famfamfam.gif b/mod/pages/vendors/jquery-treeview/images/treeview-famfamfam.gif
new file mode 100644
index 000000000..0cb178e89
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/treeview-famfamfam.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/treeview-gray-line.gif b/mod/pages/vendors/jquery-treeview/images/treeview-gray-line.gif
new file mode 100644
index 000000000..37600447d
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/treeview-gray-line.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/treeview-gray.gif b/mod/pages/vendors/jquery-treeview/images/treeview-gray.gif
new file mode 100644
index 000000000..cfb8a2f09
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/treeview-gray.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/treeview-red-line.gif b/mod/pages/vendors/jquery-treeview/images/treeview-red-line.gif
new file mode 100644
index 000000000..df9e749a8
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/treeview-red-line.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/images/treeview-red.gif b/mod/pages/vendors/jquery-treeview/images/treeview-red.gif
new file mode 100644
index 000000000..3bbb3a157
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/images/treeview-red.gif
Binary files differ
diff --git a/mod/pages/vendors/jquery-treeview/jquery.treeview.async.js b/mod/pages/vendors/jquery-treeview/jquery.treeview.async.js
new file mode 100644
index 000000000..005231054
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/jquery.treeview.async.js
@@ -0,0 +1,110 @@
+/*
+ * Async Treeview 0.1 - Lazy-loading extension for Treeview
+ *
+ * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
+ *
+ * Copyright (c) 2007 Jörn Zaefferer
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: $Id$
+ *
+ */
+
+;(function($) {
+
+function load(settings, root, child, container) {
+ function createNode(parent) {
+ var current = $("<li/>").attr("id", this.id || "").html("<span>" + this.text + "</span>").appendTo(parent);
+ if (this.classes) {
+ current.children("span").addClass(this.classes);
+ }
+ if (this.expanded) {
+ current.addClass("open");
+ }
+ if (this.hasChildren || this.children && this.children.length) {
+ var branch = $("<ul/>").appendTo(current);
+ if (this.hasChildren) {
+ current.addClass("hasChildren");
+ createNode.call({
+ classes: "placeholder",
+ text: "&nbsp;",
+ children:[]
+ }, branch);
+ }
+ if (this.children && this.children.length) {
+ $.each(this.children, createNode, [branch])
+ }
+ }
+ }
+ $.ajax($.extend(true, {
+ url: settings.url,
+ dataType: "json",
+ data: {
+ root: root
+ },
+ success: function(response) {
+ child.empty();
+ $.each(response, createNode, [child]);
+ $(container).treeview({add: child});
+ }
+ }, settings.ajax));
+ /*
+ $.getJSON(settings.url, {root: root}, function(response) {
+ function createNode(parent) {
+ var current = $("<li/>").attr("id", this.id || "").html("<span>" + this.text + "</span>").appendTo(parent);
+ if (this.classes) {
+ current.children("span").addClass(this.classes);
+ }
+ if (this.expanded) {
+ current.addClass("open");
+ }
+ if (this.hasChildren || this.children && this.children.length) {
+ var branch = $("<ul/>").appendTo(current);
+ if (this.hasChildren) {
+ current.addClass("hasChildren");
+ createNode.call({
+ classes: "placeholder",
+ text: "&nbsp;",
+ children:[]
+ }, branch);
+ }
+ if (this.children && this.children.length) {
+ $.each(this.children, createNode, [branch])
+ }
+ }
+ }
+ child.empty();
+ $.each(response, createNode, [child]);
+ $(container).treeview({add: child});
+ });
+ */
+}
+
+var proxied = $.fn.treeview;
+$.fn.treeview = function(settings) {
+ if (!settings.url) {
+ return proxied.apply(this, arguments);
+ }
+ var container = this;
+ if (!container.children().size())
+ load(settings, "source", this, container);
+ var userToggle = settings.toggle;
+ return proxied.call(this, $.extend({}, settings, {
+ collapsed: true,
+ toggle: function() {
+ var $this = $(this);
+ if ($this.hasClass("hasChildren")) {
+ var childList = $this.removeClass("hasChildren").find("ul");
+ load(settings, this.id, childList, container);
+ }
+ if (userToggle) {
+ userToggle.apply(this, arguments);
+ }
+ }
+ }));
+};
+
+})(jQuery); \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/jquery.treeview.css b/mod/pages/vendors/jquery-treeview/jquery.treeview.css
new file mode 100644
index 000000000..8927a99f9
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/jquery.treeview.css
@@ -0,0 +1,74 @@
+.treeview, .treeview ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+
+.treeview ul {
+ background-color: white;
+ margin-top: 4px;
+}
+
+.treeview .hitarea {
+ background: url(images/treeview-default.gif) -64px -25px no-repeat;
+ height: 16px;
+ width: 16px;
+ margin-left: -16px;
+ float: left;
+ cursor: pointer;
+}
+/* fix for IE6 */
+* html .hitarea {
+ display: inline;
+ float:none;
+}
+
+.treeview li {
+ margin: 0;
+ padding: 3px 0pt 3px 16px;
+}
+
+.treeview a.selected {
+ background-color: #eee;
+}
+
+#treecontrol { margin: 1em 0; display: none; }
+
+.treeview .hover { color: red; cursor: pointer; }
+
+.treeview li { background: url(images/treeview-default-line.gif) 0 0 no-repeat; }
+.treeview li.collapsable, .treeview li.expandable { background-position: 0 -176px; }
+
+.treeview .expandable-hitarea { background-position: -80px -3px; }
+
+.treeview li.last { background-position: 0 -1766px }
+.treeview li.lastCollapsable, .treeview li.lastExpandable { background-image: url(images/treeview-default.gif); }
+.treeview li.lastCollapsable { background-position: 0 -111px }
+.treeview li.lastExpandable { background-position: -32px -67px }
+
+.treeview div.lastCollapsable-hitarea, .treeview div.lastExpandable-hitarea { background-position: 0; }
+
+.treeview-red li { background-image: url(images/treeview-red-line.gif); }
+.treeview-red .hitarea, .treeview-red li.lastCollapsable, .treeview-red li.lastExpandable { background-image: url(images/treeview-red.gif); }
+
+.treeview-black li { background-image: url(images/treeview-black-line.gif); }
+.treeview-black .hitarea, .treeview-black li.lastCollapsable, .treeview-black li.lastExpandable { background-image: url(images/treeview-black.gif); }
+
+.treeview-gray li { background-image: url(images/treeview-gray-line.gif); }
+.treeview-gray .hitarea, .treeview-gray li.lastCollapsable, .treeview-gray li.lastExpandable { background-image: url(images/treeview-gray.gif); }
+
+.treeview-famfamfam li { background-image: url(images/treeview-famfamfam-line.gif); }
+.treeview-famfamfam .hitarea, .treeview-famfamfam li.lastCollapsable, .treeview-famfamfam li.lastExpandable { background-image: url(images/treeview-famfamfam.gif); }
+
+.treeview .placeholder {
+ background: url(images/ajax-loader.gif) 0 0 no-repeat;
+ height: 16px;
+ width: 16px;
+ display: block;
+}
+
+.filetree li { padding: 3px 0 2px 16px; }
+.filetree span.folder, .filetree span.file { padding: 1px 0 1px 16px; display: block; }
+.filetree span.folder { background: url(images/folder.gif) 0 0 no-repeat; }
+.filetree li.expandable span.folder { background: url(images/folder-closed.gif) 0 0 no-repeat; }
+.filetree span.file { background: url(images/file.gif) 0 0 no-repeat; }
diff --git a/mod/pages/vendors/jquery-treeview/jquery.treeview.edit.js b/mod/pages/vendors/jquery-treeview/jquery.treeview.edit.js
new file mode 100644
index 000000000..f3c580b3f
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/jquery.treeview.edit.js
@@ -0,0 +1,37 @@
+(function($) {
+ var CLASSES = $.treeview.classes;
+ var proxied = $.fn.treeview;
+ $.fn.treeview = function(settings) {
+ settings = $.extend({}, settings);
+ if (settings.add) {
+ return this.trigger("add", [settings.add]);
+ }
+ if (settings.remove) {
+ return this.trigger("remove", [settings.remove]);
+ }
+ return proxied.apply(this, arguments).bind("add", function(event, branches) {
+ $(branches).prev()
+ .removeClass(CLASSES.last)
+ .removeClass(CLASSES.lastCollapsable)
+ .removeClass(CLASSES.lastExpandable)
+ .find(">.hitarea")
+ .removeClass(CLASSES.lastCollapsableHitarea)
+ .removeClass(CLASSES.lastExpandableHitarea);
+ $(branches).find("li").andSelf().prepareBranches(settings).applyClasses(settings, $(this).data("toggler"));
+ }).bind("remove", function(event, branches) {
+ var prev = $(branches).prev();
+ var parent = $(branches).parent();
+ $(branches).remove();
+ prev.filter(":last-child").addClass(CLASSES.last)
+ .filter("." + CLASSES.expandable).replaceClass(CLASSES.last, CLASSES.lastExpandable).end()
+ .find(">.hitarea").replaceClass(CLASSES.expandableHitarea, CLASSES.lastExpandableHitarea).end()
+ .filter("." + CLASSES.collapsable).replaceClass(CLASSES.last, CLASSES.lastCollapsable).end()
+ .find(">.hitarea").replaceClass(CLASSES.collapsableHitarea, CLASSES.lastCollapsableHitarea);
+ if (parent.is(":not(:has(>))") && parent[0] != this) {
+ parent.parent().removeClass(CLASSES.collapsable).removeClass(CLASSES.expandable)
+ parent.siblings(".hitarea").andSelf().remove();
+ }
+ });
+ };
+
+})(jQuery); \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/jquery.treeview.js b/mod/pages/vendors/jquery-treeview/jquery.treeview.js
new file mode 100644
index 000000000..02b452c22
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/jquery.treeview.js
@@ -0,0 +1,256 @@
+/*
+ * Treeview 1.5pre - jQuery plugin to hide and show branches of a tree
+ *
+ * http://bassistance.de/jquery-plugins/jquery-plugin-treeview/
+ * http://docs.jquery.com/Plugins/Treeview
+ *
+ * Copyright (c) 2007 Jörn Zaefferer
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: $Id: jquery.treeview.js 5759 2008-07-01 07:50:28Z joern.zaefferer $
+ *
+ */
+
+;(function($) {
+
+ // TODO rewrite as a widget, removing all the extra plugins
+ $.extend($.fn, {
+ swapClass: function(c1, c2) {
+ var c1Elements = this.filter('.' + c1);
+ this.filter('.' + c2).removeClass(c2).addClass(c1);
+ c1Elements.removeClass(c1).addClass(c2);
+ return this;
+ },
+ replaceClass: function(c1, c2) {
+ return this.filter('.' + c1).removeClass(c1).addClass(c2).end();
+ },
+ hoverClass: function(className) {
+ className = className || "hover";
+ return this.hover(function() {
+ $(this).addClass(className);
+ }, function() {
+ $(this).removeClass(className);
+ });
+ },
+ heightToggle: function(animated, callback) {
+ animated ?
+ this.animate({ height: "toggle" }, animated, callback) :
+ this.each(function(){
+ jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
+ if(callback)
+ callback.apply(this, arguments);
+ });
+ },
+ heightHide: function(animated, callback) {
+ if (animated) {
+ this.animate({ height: "hide" }, animated, callback);
+ } else {
+ this.hide();
+ if (callback)
+ this.each(callback);
+ }
+ },
+ prepareBranches: function(settings) {
+ if (!settings.prerendered) {
+ // mark last tree items
+ this.filter(":last-child:not(ul)").addClass(CLASSES.last);
+ // collapse whole tree, or only those marked as closed, anyway except those marked as open
+ this.filter((settings.collapsed ? "" : "." + CLASSES.closed) + ":not(." + CLASSES.open + ")").find(">ul").hide();
+ }
+ // return all items with sublists
+ return this.filter(":has(>ul)");
+ },
+ applyClasses: function(settings, toggler) {
+ // TODO use event delegation
+ this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview", function(event) {
+ // don't handle click events on children, eg. checkboxes
+ if ( this == event.target )
+ toggler.apply($(this).next());
+ }).add( $("a", this) ).hoverClass();
+
+ if (!settings.prerendered) {
+ // handle closed ones first
+ this.filter(":has(>ul:hidden)")
+ .addClass(CLASSES.expandable)
+ .replaceClass(CLASSES.last, CLASSES.lastExpandable);
+
+ // handle open ones
+ this.not(":has(>ul:hidden)")
+ .addClass(CLASSES.collapsable)
+ .replaceClass(CLASSES.last, CLASSES.lastCollapsable);
+
+ // create hitarea if not present
+ var hitarea = this.find("div." + CLASSES.hitarea);
+ if (!hitarea.length)
+ hitarea = this.prepend("<div class=\"" + CLASSES.hitarea + "\"/>").find("div." + CLASSES.hitarea);
+ hitarea.removeClass().addClass(CLASSES.hitarea).each(function() {
+ var classes = "";
+ $.each($(this).parent().attr("class").split(" "), function() {
+ classes += this + "-hitarea ";
+ });
+ $(this).addClass( classes );
+ })
+ }
+
+ // apply event to hitarea
+ this.find("div." + CLASSES.hitarea).click( toggler );
+ },
+ treeview: function(settings) {
+
+ settings = $.extend({
+ cookieId: "treeview"
+ }, settings);
+
+ if ( settings.toggle ) {
+ var callback = settings.toggle;
+ settings.toggle = function() {
+ return callback.apply($(this).parent()[0], arguments);
+ };
+ }
+
+ // factory for treecontroller
+ function treeController(tree, control) {
+ // factory for click handlers
+ function handler(filter) {
+ return function() {
+ // reuse toggle event handler, applying the elements to toggle
+ // start searching for all hitareas
+ toggler.apply( $("div." + CLASSES.hitarea, tree).filter(function() {
+ // for plain toggle, no filter is provided, otherwise we need to check the parent element
+ return filter ? $(this).parent("." + filter).length : true;
+ }) );
+ return false;
+ };
+ }
+ // click on first element to collapse tree
+ $("a:eq(0)", control).click( handler(CLASSES.collapsable) );
+ // click on second to expand tree
+ $("a:eq(1)", control).click( handler(CLASSES.expandable) );
+ // click on third to toggle tree
+ $("a:eq(2)", control).click( handler() );
+ }
+
+ // handle toggle event
+ function toggler() {
+ $(this)
+ .parent()
+ // swap classes for hitarea
+ .find(">.hitarea")
+ .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
+ .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
+ .end()
+ // swap classes for parent li
+ .swapClass( CLASSES.collapsable, CLASSES.expandable )
+ .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
+ // find child lists
+ .find( ">ul" )
+ // toggle them
+ .heightToggle( settings.animated, settings.toggle );
+ if ( settings.unique ) {
+ $(this).parent()
+ .siblings()
+ // swap classes for hitarea
+ .find(">.hitarea")
+ .replaceClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
+ .replaceClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea )
+ .end()
+ .replaceClass( CLASSES.collapsable, CLASSES.expandable )
+ .replaceClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
+ .find( ">ul" )
+ .heightHide( settings.animated, settings.toggle );
+ }
+ }
+ this.data("toggler", toggler);
+
+ function serialize() {
+ function binary(arg) {
+ return arg ? 1 : 0;
+ }
+ var data = [];
+ branches.each(function(i, e) {
+ data[i] = $(e).is(":has(>ul:visible)") ? 1 : 0;
+ });
+ $.cookie(settings.cookieId, data.join(""), settings.cookieOptions );
+ }
+
+ function deserialize() {
+ var stored = $.cookie(settings.cookieId);
+ if ( stored ) {
+ var data = stored.split("");
+ branches.each(function(i, e) {
+ $(e).find(">ul")[ parseInt(data[i]) ? "show" : "hide" ]();
+ });
+ }
+ }
+
+ // add treeview class to activate styles
+ this.addClass("treeview");
+
+ // prepare branches and find all tree items with child lists
+ var branches = this.find("li").prepareBranches(settings);
+
+ switch(settings.persist) {
+ case "cookie":
+ var toggleCallback = settings.toggle;
+ settings.toggle = function() {
+ serialize();
+ if (toggleCallback) {
+ toggleCallback.apply(this, arguments);
+ }
+ };
+ deserialize();
+ break;
+ case "location":
+ var current = this.find("a").filter(function() {
+ return this.href.toLowerCase() == location.href.toLowerCase();
+ });
+ if ( current.length ) {
+ // TODO update the open/closed classes
+ var items = current.addClass("selected").parents("ul, li").add( current.next() ).show();
+ if (settings.prerendered) {
+ // if prerendered is on, replicate the basic class swapping
+ items.filter("li")
+ .swapClass( CLASSES.collapsable, CLASSES.expandable )
+ .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
+ .find(">.hitarea")
+ .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
+ .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea );
+ }
+ }
+ break;
+ }
+
+ branches.applyClasses(settings, toggler);
+
+ // if control option is set, create the treecontroller and show it
+ if ( settings.control ) {
+ treeController(this, settings.control);
+ $(settings.control).show();
+ }
+
+ return this;
+ }
+ });
+
+ // classes used by the plugin
+ // need to be styled via external stylesheet, see first example
+ $.treeview = {};
+ var CLASSES = ($.treeview.classes = {
+ open: "open",
+ closed: "closed",
+ expandable: "expandable",
+ expandableHitarea: "expandable-hitarea",
+ lastExpandableHitarea: "lastExpandable-hitarea",
+ collapsable: "collapsable",
+ collapsableHitarea: "collapsable-hitarea",
+ lastCollapsableHitarea: "lastCollapsable-hitarea",
+ lastCollapsable: "lastCollapsable",
+ lastExpandable: "lastExpandable",
+ last: "last",
+ hitarea: "hitarea"
+ });
+
+})(jQuery); \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/jquery.treeview.min.js b/mod/pages/vendors/jquery-treeview/jquery.treeview.min.js
new file mode 100644
index 000000000..800c7d853
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/jquery.treeview.min.js
@@ -0,0 +1,17 @@
+;(function($){$.extend($.fn,{swapClass:function(c1,c2){var c1Elements=this.filter('.'+c1);this.filter('.'+c2).removeClass(c2).addClass(c1);c1Elements.removeClass(c1).addClass(c2);return this;},replaceClass:function(c1,c2){return this.filter('.'+c1).removeClass(c1).addClass(c2).end();},hoverClass:function(className){className=className||"hover";return this.hover(function(){$(this).addClass(className);},function(){$(this).removeClass(className);});},heightToggle:function(animated,callback){animated?this.animate({height:"toggle"},animated,callback):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();if(callback)
+callback.apply(this,arguments);});},heightHide:function(animated,callback){if(animated){this.animate({height:"hide"},animated,callback);}else{this.hide();if(callback)
+this.each(callback);}},prepareBranches:function(settings){if(!settings.prerendered){this.filter(":last-child:not(ul)").addClass(CLASSES.last);this.filter((settings.collapsed?"":"."+CLASSES.closed)+":not(."+CLASSES.open+")").find(">ul").hide();}
+return this.filter(":has(>ul)");},applyClasses:function(settings,toggler){this.filter(":has(>ul):not(:has(>a))").find(">span").unbind("click.treeview").bind("click.treeview",function(event){if(this==event.target)
+toggler.apply($(this).next());}).add($("a",this)).hoverClass();if(!settings.prerendered){this.filter(":has(>ul:hidden)").addClass(CLASSES.expandable).replaceClass(CLASSES.last,CLASSES.lastExpandable);this.not(":has(>ul:hidden)").addClass(CLASSES.collapsable).replaceClass(CLASSES.last,CLASSES.lastCollapsable);var hitarea=this.find("div."+CLASSES.hitarea);if(!hitarea.length)
+hitarea=this.prepend("<div class=\""+CLASSES.hitarea+"\"/>").find("div."+CLASSES.hitarea);hitarea.removeClass().addClass(CLASSES.hitarea).each(function(){var classes="";$.each($(this).parent().attr("class").split(" "),function(){classes+=this+"-hitarea ";});$(this).addClass(classes);})}
+this.find("div."+CLASSES.hitarea).click(toggler);},treeview:function(settings){settings=$.extend({cookieId:"treeview"},settings);if(settings.toggle){var callback=settings.toggle;settings.toggle=function(){return callback.apply($(this).parent()[0],arguments);};}
+function treeController(tree,control){function handler(filter){return function(){toggler.apply($("div."+CLASSES.hitarea,tree).filter(function(){return filter?$(this).parent("."+filter).length:true;}));return false;};}
+$("a:eq(0)",control).click(handler(CLASSES.collapsable));$("a:eq(1)",control).click(handler(CLASSES.expandable));$("a:eq(2)",control).click(handler());}
+function toggler(){$(this).parent().find(">.hitarea").swapClass(CLASSES.collapsableHitarea,CLASSES.expandableHitarea).swapClass(CLASSES.lastCollapsableHitarea,CLASSES.lastExpandableHitarea).end().swapClass(CLASSES.collapsable,CLASSES.expandable).swapClass(CLASSES.lastCollapsable,CLASSES.lastExpandable).find(">ul").heightToggle(settings.animated,settings.toggle);if(settings.unique){$(this).parent().siblings().find(">.hitarea").replaceClass(CLASSES.collapsableHitarea,CLASSES.expandableHitarea).replaceClass(CLASSES.lastCollapsableHitarea,CLASSES.lastExpandableHitarea).end().replaceClass(CLASSES.collapsable,CLASSES.expandable).replaceClass(CLASSES.lastCollapsable,CLASSES.lastExpandable).find(">ul").heightHide(settings.animated,settings.toggle);}}
+this.data("toggler",toggler);function serialize(){function binary(arg){return arg?1:0;}
+var data=[];branches.each(function(i,e){data[i]=$(e).is(":has(>ul:visible)")?1:0;});$.cookie(settings.cookieId,data.join(""),settings.cookieOptions);}
+function deserialize(){var stored=$.cookie(settings.cookieId);if(stored){var data=stored.split("");branches.each(function(i,e){$(e).find(">ul")[parseInt(data[i])?"show":"hide"]();});}}
+this.addClass("treeview");var branches=this.find("li").prepareBranches(settings);switch(settings.persist){case"cookie":var toggleCallback=settings.toggle;settings.toggle=function(){serialize();if(toggleCallback){toggleCallback.apply(this,arguments);}};deserialize();break;case"location":var current=this.find("a").filter(function(){return this.href.toLowerCase()==location.href.toLowerCase();});if(current.length){var items=current.addClass("selected").parents("ul, li").add(current.next()).show();if(settings.prerendered){items.filter("li").swapClass(CLASSES.collapsable,CLASSES.expandable).swapClass(CLASSES.lastCollapsable,CLASSES.lastExpandable).find(">.hitarea").swapClass(CLASSES.collapsableHitarea,CLASSES.expandableHitarea).swapClass(CLASSES.lastCollapsableHitarea,CLASSES.lastExpandableHitarea);}}
+break;}
+branches.applyClasses(settings,toggler);if(settings.control){treeController(this,settings.control);$(settings.control).show();}
+return this;}});$.treeview={};var CLASSES=($.treeview.classes={open:"open",closed:"closed",expandable:"expandable",expandableHitarea:"expandable-hitarea",lastExpandableHitarea:"lastExpandable-hitarea",collapsable:"collapsable",collapsableHitarea:"collapsable-hitarea",lastCollapsableHitarea:"lastCollapsable-hitarea",lastCollapsable:"lastCollapsable",lastExpandable:"lastExpandable",last:"last",hitarea:"hitarea"});})(jQuery); \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/jquery.treeview.sortable.js b/mod/pages/vendors/jquery-treeview/jquery.treeview.sortable.js
new file mode 100644
index 000000000..d7d38588b
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/jquery.treeview.sortable.js
@@ -0,0 +1,378 @@
+/*
+ * jQuery UI Sortable
+ *
+ * Copyright (c) 2008 Paul Bakaus
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ * ui.base.js
+ *
+ * Revision: $Id: ui.sortable.js 5262 2008-04-17 13:13:51Z paul.bakaus $
+ */
+;(function($) {
+
+ if (window.Node && Node.prototype && !Node.prototype.contains) {
+ Node.prototype.contains = function (arg) {
+ return !!(this.compareDocumentPosition(arg) & 16);
+ };
+ }
+
+
+ $.widget("ui.sortableTree", $.extend($.ui.mouse, {
+ init: function() {
+
+ //Initialize needed constants
+ var self = this, o = this.options;
+ this.containerCache = {};
+ this.element.addClass("ui-sortableTree");
+
+ //Get the items
+ this.refresh();
+
+ //Let's determine the parent's offset
+ if(!(/(relative|absolute|fixed)/).test(this.element.css('position'))) this.element.css('position', 'relative');
+ this.offset = this.element.offset();
+
+ //Initialize mouse events for interaction
+ this.mouseInit();
+
+ //Prepare cursorAt
+ if(o.cursorAt && o.cursorAt.constructor == Array)
+ o.cursorAt = { left: o.cursorAt[0], top: o.cursorAt[1] };
+
+ },
+ plugins: {},
+ ui: function(inst) {
+ return {
+ helper: (inst || this)["helper"],
+ position: (inst || this)["position"].current,
+ absolutePosition: (inst || this)["position"].absolute,
+ instance: this,
+ options: this.options,
+ element: this.element,
+ item: (inst || this)["currentItem"],
+ sender: inst ? inst.element : null
+ };
+ },
+ propagate: function(n,e,inst) {
+ $.ui.plugin.call(this, n, [e, this.ui(inst)]);
+ this.element.triggerHandler(n == "sort" ? n : "sort"+n, [e, this.ui(inst)], this.options[n]);
+ },
+ serialize: function(o) {
+
+ var items = $(this.options.items, this.element).not('.ui-sortableTree-helper'); //Only the items of the sortable itself
+ var str = []; o = o || {};
+
+ items.each(function() {
+ var res = ($(this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
+ if(res) str.push((o.key || res[1])+'[]='+(o.key ? res[1] : res[2]));
+ });
+
+ return str.join('&');
+
+ },
+ toArray: function(attr) {
+ var items = $(this.options.items, this.element).not('.ui-sortableTree-helper'); //Only the items of the sortable itself
+ var ret = [];
+
+ items.each(function() { ret.push($(this).attr(attr || 'id')); });
+ return ret;
+ },
+ enable: function() {
+ this.element.removeClass("ui-sortableTree-disabled");
+ this.options.disabled = false;
+ },
+ disable: function() {
+ this.element.addClass("ui-sortableTree-disabled");
+ this.options.disabled = true;
+ },
+ /* Be careful with the following core functions */
+ intersectsWith: function(item) {
+
+ var x1 = this.position.absolute.left - 10, x2 = x1 + 10,
+ y1 = this.position.absolute.top - 10, y2 = y1 + 10;
+ var l = item.left, r = l + item.width,
+ t = item.top, b = t + item.height;
+
+ return ( l < x1 + (this.helperProportions.width / 2) // Right Half
+ && x2 - (this.helperProportions.width / 2) < r // Left Half
+ && t < y1 + (this.helperProportions.height / 2) // Bottom Half
+ && y2 - (this.helperProportions.height / 2) < b ); // Top Half
+
+ },
+ intersectsWithEdge: function(item) {
+ var y1 = this.position.absolute.top - 10, y2 = y1 + 10;
+ var t = item.top, b = t + item.height;
+
+ if(!this.intersectsWith(item.item.parents(".ui-sortableTree").data("sortableTree").containerCache)) return false;
+
+ if (!( t < y1 + (this.helperProportions.height / 2) // Bottom Half
+ && y2 - (this.helperProportions.height / 2) < b )) return false; // Top Half
+
+ if(y2 > t && y1 < t) return 1; //Crosses top edge
+ if(y1 < b && y2 > b) return 2; //Crosses bottom edge
+
+ return false;
+
+ },
+ refresh: function() {
+ this.refreshItems();
+ this.refreshPositions();
+ },
+ refreshItems: function() {
+
+ this.items = [];
+ this.containers = [this];
+ var items = this.items;
+ var queries = [$(this.options.items, this.element)];
+
+ if(this.options.connectWith) {
+ for (var i = this.options.connectWith.length - 1; i >= 0; i--){
+ var cur = $(this.options.connectWith[i]);
+ for (var j = cur.length - 1; j >= 0; j--){
+ var inst = $.data(cur[j], 'sortableTree');
+ if(inst && !inst.options.disabled) {
+ queries.push($(inst.options.items, inst.element));
+ this.containers.push(inst);
+ }
+ };
+ };
+ }
+
+ for (var i = queries.length - 1; i >= 0; i--){
+ queries[i].each(function() {
+ $.data(this, 'sortableTree-item', true); // Data for target checking (mouse manager)
+ items.push({
+ item: $(this),
+ width: 0, height: 0,
+ left: 0, top: 0
+ });
+ });
+ };
+
+ },
+ refreshPositions: function(fast) {
+ for (var i = this.items.length - 1; i >= 0; i--){
+ if(!fast) this.items[i].height = this.items[i].item.outerHeight();
+ this.items[i].top = this.items[i].item.offset().top;
+ };
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ var p =this.containers[i].element.offset();
+ this.containers[i].containerCache.left = p.left;
+ this.containers[i].containerCache.top = p.top;
+ this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
+ this.containers[i].containerCache.height= this.containers[i].element.outerHeight();
+ };
+ },
+ destroy: function() {
+
+ this.element
+ .removeClass("ui-sortableTree ui-sortableTree-disabled")
+ .removeData("sortableTree")
+ .unbind(".sortableTree");
+ this.mouseDestroy();
+
+ for ( var i = this.items.length - 1; i >= 0; i-- )
+ this.items[i].item.removeData("sortableTree-item");
+
+ },
+ contactContainers: function(e) {
+ for (var i = this.containers.length - 1; i >= 0; i--){
+
+ if(this.intersectsWith(this.containers[i].containerCache)) {
+ if(!this.containers[i].containerCache.over) {
+
+ if(this.currentContainer != this.containers[i]) {
+
+ //When entering a new container, we will find the item with the least distance and append our item near it
+ var dist = 10000; var itemWithLeastDistance = null; var base = this.position.absolute.top;
+ for (var j = this.items.length - 1; j >= 0; j--) {
+ if(!this.containers[i].element[0].contains(this.items[j].item[0])) continue;
+ var cur = this.items[j].top;
+ if(Math.abs(cur - base) < dist) {
+ dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
+ }
+ }
+
+ itemWithLeastDistance ? this.rearrange(e, itemWithLeastDistance) : this.rearrange(e, null, this.containers[i].element);
+ this.propagate("change", e); //Call plugins and callbacks
+ this.containers[i].propagate("change", e, this); //Call plugins and callbacks
+ this.currentContainer = this.containers[i];
+
+ }
+
+ this.containers[i].propagate("over", e, this);
+ this.containers[i].containerCache.over = 1;
+ }
+ } else {
+ if(this.containers[i].containerCache.over) {
+ this.containers[i].propagate("out", e, this);
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ };
+ },
+ mouseStart: function(e,el) {
+
+ if(this.options.disabled || this.options.type == 'static') return false;
+
+ //Find out if the clicked node (or one of its parents) is a actual item in this.items
+ var currentItem = null, nodes = $(e.target).parents().each(function() {
+ if($.data(this, 'sortableTree-item')) {
+ currentItem = $(this);
+ return false;
+ }
+ });
+ if($.data(e.target, 'sortableTree-item')) currentItem = $(e.target);
+
+ if(!currentItem) return false;
+ if(this.options.handle) {
+ var validHandle = false;
+ $(this.options.handle, currentItem).each(function() { if(this == e.target) validHandle = true; });
+ if(!validHandle) return false;
+ }
+
+ this.currentItem = currentItem;
+
+ var o = this.options;
+ this.currentContainer = this;
+ this.refresh();
+
+ //Create and append the visible helper
+ this.helper = typeof o.helper == 'function' ? $(o.helper.apply(this.element[0], [e, this.currentItem])) : this.currentItem.clone();
+ if(!this.helper.parents('body').length) this.helper.appendTo("body"); //Add the helper to the DOM if that didn't happen already
+ this.helper.css({ position: 'absolute', clear: 'both' }).addClass('ui-sortableTree-helper'); //Position it absolutely and add a helper class
+
+ //Prepare variables for position generation
+ $.extend(this, {
+ offsetParent: this.helper.offsetParent(),
+ offsets: { absolute: this.currentItem.offset() }
+ });
+
+ //Save the first time position
+ $.extend(this, {
+ position: {
+ current: { left: e.pageX, top: e.pageY },
+ absolute: { left: e.pageX, top: e.pageY },
+ dom: this.currentItem.prev()[0]
+ },
+ clickOffset: { left: -5, top: -5 }
+ });
+
+ this.propagate("start", e); //Call plugins and callbacks
+ this.helperProportions = { width: this.helper.outerWidth(), height: this.helper.outerHeight() }; //Save and store the helper proportions
+
+ for (var i = this.containers.length - 1; i >= 0; i--) {
+ this.containers[i].propagate("activate", e, this);
+ } //Post 'activate' events to possible containers
+
+ //Prepare possible droppables
+ if($.ui.ddmanager) $.ui.ddmanager.current = this;
+ if ($.ui.ddmanager && !o.dropBehaviour) $.ui.ddmanager.prepareOffsets(this, e);
+
+ this.dragging = true;
+ return true;
+
+ },
+ mouseStop: function(e) {
+
+ if(this.newPositionAt) this.options.sortIndication.remove.call(this.currentItem, this.newPositionAt); //remove sort indicator
+ this.propagate("stop", e); //Call plugins and trigger callbacks
+
+ //If we are using droppables, inform the manager about the drop
+ var dropped = ($.ui.ddmanager && !this.options.dropBehaviour) ? $.ui.ddmanager.drop(this, e) : false;
+ if(!dropped && this.newPositionAt) this.newPositionAt[this.direction == 'down' ? 'before' : 'after'](this.currentItem); //Append to element to its new position
+
+ if(this.position.dom != this.currentItem.prev()[0]) this.propagate("update", e); //Trigger update callback if the DOM position has changed
+ if(!this.element[0].contains(this.currentItem[0])) { //Node was moved out of the current element
+ this.propagate("remove", e);
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ if(this.containers[i].element[0].contains(this.currentItem[0])) {
+ this.containers[i].propagate("update", e, this);
+ this.containers[i].propagate("receive", e, this);
+ }
+ };
+ };
+
+ //Post events to containers
+ for (var i = this.containers.length - 1; i >= 0; i--){
+ this.containers[i].propagate("deactivate", e, this);
+ if(this.containers[i].containerCache.over) {
+ this.containers[i].propagate("out", e, this);
+ this.containers[i].containerCache.over = 0;
+ }
+ }
+
+ this.dragging = false;
+ if(this.cancelHelperRemoval) return false;
+ this.helper.remove();
+
+ return false;
+
+ },
+ mouseDrag: function(e) {
+
+ //Compute the helpers position
+ this.position.current = { top: e.pageY + 5, left: e.pageX + 5 };
+ this.position.absolute = { left: e.pageX + 5, top: e.pageY + 5 };
+
+ //Interconnect with droppables
+ if($.ui.ddmanager) $.ui.ddmanager.drag(this, e);
+ var intersectsWithDroppable = false;
+ $.each($.ui.ddmanager.droppables, function() {
+ if(this.isover) intersectsWithDroppable = true;
+ });
+
+ //Rearrange
+ if(intersectsWithDroppable) {
+ if(this.newPositionAt) this.options.sortIndication.remove.call(this.currentItem, this.newPositionAt);
+ } else {
+ for (var i = this.items.length - 1; i >= 0; i--) {
+
+ if(this.currentItem[0].contains(this.items[i].item[0])) continue;
+
+ var intersection = this.intersectsWithEdge(this.items[i]);
+ if(!intersection) continue;
+
+ this.direction = intersection == 1 ? "down" : "up";
+ this.rearrange(e, this.items[i]);
+ this.propagate("change", e); //Call plugins and callbacks
+ break;
+ }
+ }
+
+ //Post events to containers
+ this.contactContainers(e);
+
+ this.propagate("sort", e); //Call plugins and callbacks
+ this.helper.css({ left: this.position.current.left+'px', top: this.position.current.top+'px' }); // Stick the helper to the cursor
+ return false;
+
+ },
+ rearrange: function(e, i, a) {
+ if(i) {
+ if(this.newPositionAt) this.options.sortIndication.remove.call(this.currentItem, this.newPositionAt);
+ this.newPositionAt = i.item;
+ this.options.sortIndication[this.direction].call(this.currentItem, this.newPositionAt);
+ } else {
+ //Append
+ }
+ }
+ }));
+
+ $.extend($.ui.sortableTree, {
+ defaults: {
+ items: '> *',
+ zIndex: 1000,
+ distance: 1
+ },
+ getter: "serialize toArray"
+ });
+
+
+
+})(jQuery);
diff --git a/mod/pages/vendors/jquery-treeview/lib/jquery.cookie.js b/mod/pages/vendors/jquery-treeview/lib/jquery.cookie.js
new file mode 100644
index 000000000..8e8e1d9e0
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/lib/jquery.cookie.js
@@ -0,0 +1,92 @@
+/**
+ * Cookie plugin
+ *
+ * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ */
+
+/**
+ * Create a cookie with the given name and value and other optional parameters.
+ *
+ * @example $.cookie('the_cookie', 'the_value');
+ * @desc Set the value of a cookie.
+ * @example $.cookie('the_cookie', 'the_value', {expires: 7, path: '/', domain: 'jquery.com', secure: true});
+ * @desc Create a cookie with all available options.
+ * @example $.cookie('the_cookie', 'the_value');
+ * @desc Create a session cookie.
+ * @example $.cookie('the_cookie', null);
+ * @desc Delete a cookie by passing null as value.
+ *
+ * @param String name The name of the cookie.
+ * @param String value The value of the cookie.
+ * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
+ * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
+ * If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
+ * If set to null or omitted, the cookie will be a session cookie and will not be retained
+ * when the the browser exits.
+ * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
+ * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
+ * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
+ * require a secure protocol (like HTTPS).
+ * @type undefined
+ *
+ * @name $.cookie
+ * @cat Plugins/Cookie
+ * @author Klaus Hartl/klaus.hartl@stilbuero.de
+ */
+
+/**
+ * Get the value of a cookie with the given name.
+ *
+ * @example $.cookie('the_cookie');
+ * @desc Get the value of a cookie.
+ *
+ * @param String name The name of the cookie.
+ * @return The value of the cookie.
+ * @type String
+ *
+ * @name $.cookie
+ * @cat Plugins/Cookie
+ * @author Klaus Hartl/klaus.hartl@stilbuero.de
+ */
+jQuery.cookie = function(name, value, options) {
+ if (typeof value != 'undefined') { // name and value given, set cookie
+ options = options || {};
+ if (value === null) {
+ value = '';
+ options.expires = -1;
+ }
+ var expires = '';
+ if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
+ var date;
+ if (typeof options.expires == 'number') {
+ date = new Date();
+ date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
+ } else {
+ date = options.expires;
+ }
+ expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
+ }
+ var path = options.path ? '; path=' + options.path : '';
+ var domain = options.domain ? '; domain=' + options.domain : '';
+ var secure = options.secure ? '; secure' : '';
+ document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
+ } else { // only name given, get cookie
+ var cookieValue = null;
+ if (document.cookie && document.cookie != '') {
+ var cookies = document.cookie.split(';');
+ for (var i = 0; i < cookies.length; i++) {
+ var cookie = jQuery.trim(cookies[i]);
+ // Does this cookie string begin with the name we want?
+ if (cookie.substring(0, name.length + 1) == (name + '=')) {
+ cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
+ break;
+ }
+ }
+ }
+ return cookieValue;
+ }
+}; \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/lib/jquery.js b/mod/pages/vendors/jquery-treeview/lib/jquery.js
new file mode 100644
index 000000000..eca5afd09
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/lib/jquery.js
@@ -0,0 +1,6883 @@
+/*!
+ * jQuery JavaScript Library v1.4.3
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu Oct 14 23:10:06 2010 -0400
+ */
+(function( window, undefined ) {
+
+// Use the correct document accordingly with window argument (sandbox)
+var document = window.document;
+var jQuery = (function() {
+
+// Define a local copy of jQuery
+var jQuery = function( selector, context ) {
+ // The jQuery object is actually just the init constructor 'enhanced'
+ return new jQuery.fn.init( selector, context );
+ },
+
+ // Map over jQuery in case of overwrite
+ _jQuery = window.jQuery,
+
+ // Map over the $ in case of overwrite
+ _$ = window.$,
+
+ // A central reference to the root jQuery(document)
+ rootjQuery,
+
+ // A simple way to check for HTML strings or ID strings
+ // (both of which we optimize for)
+ quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
+
+ // Is it a simple selector
+ isSimple = /^.[^:#\[\.,]*$/,
+
+ // Check if a string has a non-whitespace character in it
+ rnotwhite = /\S/,
+ rwhite = /\s/,
+
+ // Used for trimming whitespace
+ trimLeft = /^\s+/,
+ trimRight = /\s+$/,
+
+ // Check for non-word characters
+ rnonword = /\W/,
+
+ // Check for digits
+ rdigit = /\d/,
+
+ // Match a standalone tag
+ rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
+
+ // JSON RegExp
+ rvalidchars = /^[\],:{}\s]*$/,
+ rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
+ rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
+ rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
+
+ // Useragent RegExp
+ rwebkit = /(webkit)[ \/]([\w.]+)/,
+ ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
+ rmsie = /(msie) ([\w.]+)/,
+ rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
+
+ // Keep a UserAgent string for use with jQuery.browser
+ userAgent = navigator.userAgent,
+
+ // For matching the engine and version of the browser
+ browserMatch,
+
+ // Has the ready events already been bound?
+ readyBound = false,
+
+ // The functions to execute on DOM ready
+ readyList = [],
+
+ // The ready event handler
+ DOMContentLoaded,
+
+ // Save a reference to some core methods
+ toString = Object.prototype.toString,
+ hasOwn = Object.prototype.hasOwnProperty,
+ push = Array.prototype.push,
+ slice = Array.prototype.slice,
+ trim = String.prototype.trim,
+ indexOf = Array.prototype.indexOf,
+
+ // [[Class]] -> type pairs
+ class2type = {};
+
+jQuery.fn = jQuery.prototype = {
+ init: function( selector, context ) {
+ var match, elem, ret, doc;
+
+ // Handle $(""), $(null), or $(undefined)
+ if ( !selector ) {
+ return this;
+ }
+
+ // Handle $(DOMElement)
+ if ( selector.nodeType ) {
+ this.context = this[0] = selector;
+ this.length = 1;
+ return this;
+ }
+
+ // The body element only exists once, optimize finding it
+ if ( selector === "body" && !context && document.body ) {
+ this.context = document;
+ this[0] = document.body;
+ this.selector = "body";
+ this.length = 1;
+ return this;
+ }
+
+ // Handle HTML strings
+ if ( typeof selector === "string" ) {
+ // Are we dealing with HTML string or an ID?
+ match = quickExpr.exec( selector );
+
+ // Verify a match, and that no context was specified for #id
+ if ( match && (match[1] || !context) ) {
+
+ // HANDLE: $(html) -> $(array)
+ if ( match[1] ) {
+ doc = (context ? context.ownerDocument || context : document);
+
+ // If a single string is passed in and it's a single tag
+ // just do a createElement and skip the rest
+ ret = rsingleTag.exec( selector );
+
+ if ( ret ) {
+ if ( jQuery.isPlainObject( context ) ) {
+ selector = [ document.createElement( ret[1] ) ];
+ jQuery.fn.attr.call( selector, context, true );
+
+ } else {
+ selector = [ doc.createElement( ret[1] ) ];
+ }
+
+ } else {
+ ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
+ selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
+ }
+
+ return jQuery.merge( this, selector );
+
+ // HANDLE: $("#id")
+ } else {
+ elem = document.getElementById( match[2] );
+
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ if ( elem && elem.parentNode ) {
+ // Handle the case where IE and Opera return items
+ // by name instead of ID
+ if ( elem.id !== match[2] ) {
+ return rootjQuery.find( selector );
+ }
+
+ // Otherwise, we inject the element directly into the jQuery object
+ this.length = 1;
+ this[0] = elem;
+ }
+
+ this.context = document;
+ this.selector = selector;
+ return this;
+ }
+
+ // HANDLE: $("TAG")
+ } else if ( !context && !rnonword.test( selector ) ) {
+ this.selector = selector;
+ this.context = document;
+ selector = document.getElementsByTagName( selector );
+ return jQuery.merge( this, selector );
+
+ // HANDLE: $(expr, $(...))
+ } else if ( !context || context.jquery ) {
+ return (context || rootjQuery).find( selector );
+
+ // HANDLE: $(expr, context)
+ // (which is just equivalent to: $(context).find(expr)
+ } else {
+ return jQuery( context ).find( selector );
+ }
+
+ // HANDLE: $(function)
+ // Shortcut for document ready
+ } else if ( jQuery.isFunction( selector ) ) {
+ return rootjQuery.ready( selector );
+ }
+
+ if (selector.selector !== undefined) {
+ this.selector = selector.selector;
+ this.context = selector.context;
+ }
+
+ return jQuery.makeArray( selector, this );
+ },
+
+ // Start with an empty selector
+ selector: "",
+
+ // The current version of jQuery being used
+ jquery: "1.4.3",
+
+ // The default length of a jQuery object is 0
+ length: 0,
+
+ // The number of elements contained in the matched element set
+ size: function() {
+ return this.length;
+ },
+
+ toArray: function() {
+ return slice.call( this, 0 );
+ },
+
+ // Get the Nth element in the matched element set OR
+ // Get the whole matched element set as a clean array
+ get: function( num ) {
+ return num == null ?
+
+ // Return a 'clean' array
+ this.toArray() :
+
+ // Return just the object
+ ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
+ },
+
+ // Take an array of elements and push it onto the stack
+ // (returning the new matched element set)
+ pushStack: function( elems, name, selector ) {
+ // Build a new jQuery matched element set
+ var ret = jQuery();
+
+ if ( jQuery.isArray( elems ) ) {
+ push.apply( ret, elems );
+
+ } else {
+ jQuery.merge( ret, elems );
+ }
+
+ // Add the old object onto the stack (as a reference)
+ ret.prevObject = this;
+
+ ret.context = this.context;
+
+ if ( name === "find" ) {
+ ret.selector = this.selector + (this.selector ? " " : "") + selector;
+ } else if ( name ) {
+ ret.selector = this.selector + "." + name + "(" + selector + ")";
+ }
+
+ // Return the newly-formed element set
+ return ret;
+ },
+
+ // Execute a callback for every element in the matched set.
+ // (You can seed the arguments with an array of args, but this is
+ // only used internally.)
+ each: function( callback, args ) {
+ return jQuery.each( this, callback, args );
+ },
+
+ ready: function( fn ) {
+ // Attach the listeners
+ jQuery.bindReady();
+
+ // If the DOM is already ready
+ if ( jQuery.isReady ) {
+ // Execute the function immediately
+ fn.call( document, jQuery );
+
+ // Otherwise, remember the function for later
+ } else if ( readyList ) {
+ // Add the function to the wait list
+ readyList.push( fn );
+ }
+
+ return this;
+ },
+
+ eq: function( i ) {
+ return i === -1 ?
+ this.slice( i ) :
+ this.slice( i, +i + 1 );
+ },
+
+ first: function() {
+ return this.eq( 0 );
+ },
+
+ last: function() {
+ return this.eq( -1 );
+ },
+
+ slice: function() {
+ return this.pushStack( slice.apply( this, arguments ),
+ "slice", slice.call(arguments).join(",") );
+ },
+
+ map: function( callback ) {
+ return this.pushStack( jQuery.map(this, function( elem, i ) {
+ return callback.call( elem, i, elem );
+ }));
+ },
+
+ end: function() {
+ return this.prevObject || jQuery(null);
+ },
+
+ // For internal use only.
+ // Behaves like an Array's method, not like a jQuery method.
+ push: push,
+ sort: [].sort,
+ splice: [].splice
+};
+
+// Give the init function the jQuery prototype for later instantiation
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.extend = jQuery.fn.extend = function() {
+ // copy reference to target object
+ var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy, copyIsArray;
+
+ // Handle a deep copy situation
+ if ( typeof target === "boolean" ) {
+ deep = target;
+ target = arguments[1] || {};
+ // skip the boolean and the target
+ i = 2;
+ }
+
+ // Handle case when target is a string or something (possible in deep copy)
+ if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+ target = {};
+ }
+
+ // extend jQuery itself if only one argument is passed
+ if ( length === i ) {
+ target = this;
+ --i;
+ }
+
+ for ( ; i < length; i++ ) {
+ // Only deal with non-null/undefined values
+ if ( (options = arguments[ i ]) != null ) {
+ // Extend the base object
+ for ( name in options ) {
+ src = target[ name ];
+ copy = options[ name ];
+
+ // Prevent never-ending loop
+ if ( target === copy ) {
+ continue;
+ }
+
+ // Recurse if we're merging plain objects or arrays
+ if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+ if ( copyIsArray ) {
+ copyIsArray = false;
+ clone = src && jQuery.isArray(src) ? src : [];
+
+ } else {
+ clone = src && jQuery.isPlainObject(src) ? src : {};
+ }
+
+ // Never move original objects, clone them
+ target[ name ] = jQuery.extend( deep, clone, copy );
+
+ // Don't bring in undefined values
+ } else if ( copy !== undefined ) {
+ target[ name ] = copy;
+ }
+ }
+ }
+ }
+
+ // Return the modified object
+ return target;
+};
+
+jQuery.extend({
+ noConflict: function( deep ) {
+ window.$ = _$;
+
+ if ( deep ) {
+ window.jQuery = _jQuery;
+ }
+
+ return jQuery;
+ },
+
+ // Is the DOM ready to be used? Set to true once it occurs.
+ isReady: false,
+
+ // A counter to track how many items to wait for before
+ // the ready event fires. See #6781
+ readyWait: 1,
+
+ // Handle when the DOM is ready
+ ready: function( wait ) {
+ // A third-party is pushing the ready event forwards
+ if ( wait === true ) {
+ jQuery.readyWait--;
+ }
+
+ // Make sure that the DOM is not already loaded
+ if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( !document.body ) {
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Remember that the DOM is ready
+ jQuery.isReady = true;
+
+ // If a normal DOM Ready event fired, decrement, and wait if need be
+ if ( wait !== true && --jQuery.readyWait > 0 ) {
+ return;
+ }
+
+ // If there are functions bound, to execute
+ if ( readyList ) {
+ // Execute all of them
+ var fn, i = 0;
+ while ( (fn = readyList[ i++ ]) ) {
+ fn.call( document, jQuery );
+ }
+
+ // Reset the list of functions
+ readyList = null;
+ }
+
+ // Trigger any bound ready events
+ if ( jQuery.fn.triggerHandler ) {
+ jQuery( document ).triggerHandler( "ready" );
+ }
+ }
+ },
+
+ bindReady: function() {
+ if ( readyBound ) {
+ return;
+ }
+
+ readyBound = true;
+
+ // Catch cases where $(document).ready() is called after the
+ // browser event has already occurred.
+ if ( document.readyState === "complete" ) {
+ // Handle it asynchronously to allow scripts the opportunity to delay ready
+ return setTimeout( jQuery.ready, 1 );
+ }
+
+ // Mozilla, Opera and webkit nightlies currently support this event
+ if ( document.addEventListener ) {
+ // Use the handy event callback
+ document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+
+ // A fallback to window.onload, that will always work
+ window.addEventListener( "load", jQuery.ready, false );
+
+ // If IE event model is used
+ } else if ( document.attachEvent ) {
+ // ensure firing before onload,
+ // maybe late but safe also for iframes
+ document.attachEvent("onreadystatechange", DOMContentLoaded);
+
+ // A fallback to window.onload, that will always work
+ window.attachEvent( "onload", jQuery.ready );
+
+ // If IE and not a frame
+ // continually check to see if the document is ready
+ var toplevel = false;
+
+ try {
+ toplevel = window.frameElement == null;
+ } catch(e) {}
+
+ if ( document.documentElement.doScroll && toplevel ) {
+ doScrollCheck();
+ }
+ }
+ },
+
+ // See test/unit/core.js for details concerning isFunction.
+ // Since version 1.3, DOM methods and functions like alert
+ // aren't supported. They return false on IE (#2968).
+ isFunction: function( obj ) {
+ return jQuery.type(obj) === "function";
+ },
+
+ isArray: Array.isArray || function( obj ) {
+ return jQuery.type(obj) === "array";
+ },
+
+ // A crude way of determining if an object is a window
+ isWindow: function( obj ) {
+ return obj && typeof obj === "object" && "setInterval" in obj;
+ },
+
+ isNaN: function( obj ) {
+ return obj == null || !rdigit.test( obj ) || isNaN( obj );
+ },
+
+ type: function( obj ) {
+ return obj == null ?
+ String( obj ) :
+ class2type[ toString.call(obj) ] || "object";
+ },
+
+ isPlainObject: function( obj ) {
+ // Must be an Object.
+ // Because of IE, we also have to check the presence of the constructor property.
+ // Make sure that DOM nodes and window objects don't pass through, as well
+ if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+ return false;
+ }
+
+ // Not own constructor property must be Object
+ if ( obj.constructor &&
+ !hasOwn.call(obj, "constructor") &&
+ !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+ return false;
+ }
+
+ // Own properties are enumerated firstly, so to speed up,
+ // if last one is own, then all properties are own.
+
+ var key;
+ for ( key in obj ) {}
+
+ return key === undefined || hasOwn.call( obj, key );
+ },
+
+ isEmptyObject: function( obj ) {
+ for ( var name in obj ) {
+ return false;
+ }
+ return true;
+ },
+
+ error: function( msg ) {
+ throw msg;
+ },
+
+ parseJSON: function( data ) {
+ if ( typeof data !== "string" || !data ) {
+ return null;
+ }
+
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
+ data = jQuery.trim( data );
+
+ // Make sure the incoming data is actual JSON
+ // Logic borrowed from http://json.org/json2.js
+ if ( rvalidchars.test(data.replace(rvalidescape, "@")
+ .replace(rvalidtokens, "]")
+ .replace(rvalidbraces, "")) ) {
+
+ // Try to use the native JSON parser first
+ return window.JSON && window.JSON.parse ?
+ window.JSON.parse( data ) :
+ (new Function("return " + data))();
+
+ } else {
+ jQuery.error( "Invalid JSON: " + data );
+ }
+ },
+
+ noop: function() {},
+
+ // Evalulates a script in a global context
+ globalEval: function( data ) {
+ if ( data && rnotwhite.test(data) ) {
+ // Inspired by code by Andrea Giammarchi
+ // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
+ var head = document.getElementsByTagName("head")[0] || document.documentElement,
+ script = document.createElement("script");
+
+ script.type = "text/javascript";
+
+ if ( jQuery.support.scriptEval ) {
+ script.appendChild( document.createTextNode( data ) );
+ } else {
+ script.text = data;
+ }
+
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709).
+ head.insertBefore( script, head.firstChild );
+ head.removeChild( script );
+ }
+ },
+
+ nodeName: function( elem, name ) {
+ return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
+ },
+
+ // args is for internal usage only
+ each: function( object, callback, args ) {
+ var name, i = 0,
+ length = object.length,
+ isObj = length === undefined || jQuery.isFunction(object);
+
+ if ( args ) {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.apply( object[ name ], args ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( ; i < length; ) {
+ if ( callback.apply( object[ i++ ], args ) === false ) {
+ break;
+ }
+ }
+ }
+
+ // A special, fast, case for the most common use of each
+ } else {
+ if ( isObj ) {
+ for ( name in object ) {
+ if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
+ break;
+ }
+ }
+ } else {
+ for ( var value = object[0];
+ i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
+ }
+ }
+
+ return object;
+ },
+
+ // Use native String.trim function wherever possible
+ trim: trim ?
+ function( text ) {
+ return text == null ?
+ "" :
+ trim.call( text );
+ } :
+
+ // Otherwise use our own trimming functionality
+ function( text ) {
+ return text == null ?
+ "" :
+ text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
+ },
+
+ // results is for internal usage only
+ makeArray: function( array, results ) {
+ var ret = results || [];
+
+ if ( array != null ) {
+ // The window, strings (and functions) also have 'length'
+ // The extra typeof function check is to prevent crashes
+ // in Safari 2 (See: #3039)
+ // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
+ var type = jQuery.type(array);
+
+ if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
+ push.call( ret, array );
+ } else {
+ jQuery.merge( ret, array );
+ }
+ }
+
+ return ret;
+ },
+
+ inArray: function( elem, array ) {
+ if ( array.indexOf ) {
+ return array.indexOf( elem );
+ }
+
+ for ( var i = 0, length = array.length; i < length; i++ ) {
+ if ( array[ i ] === elem ) {
+ return i;
+ }
+ }
+
+ return -1;
+ },
+
+ merge: function( first, second ) {
+ var i = first.length, j = 0;
+
+ if ( typeof second.length === "number" ) {
+ for ( var l = second.length; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
+ }
+
+ first.length = i;
+
+ return first;
+ },
+
+ grep: function( elems, callback, inv ) {
+ var ret = [], retVal;
+ inv = !!inv;
+
+ // Go through the array, only saving the items
+ // that pass the validator function
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ retVal = !!callback( elems[ i ], i );
+ if ( inv !== retVal ) {
+ ret.push( elems[ i ] );
+ }
+ }
+
+ return ret;
+ },
+
+ // arg is for internal usage only
+ map: function( elems, callback, arg ) {
+ var ret = [], value;
+
+ // Go through the array, translating each of the items to their
+ // new value (or values).
+ for ( var i = 0, length = elems.length; i < length; i++ ) {
+ value = callback( elems[ i ], i, arg );
+
+ if ( value != null ) {
+ ret[ ret.length ] = value;
+ }
+ }
+
+ return ret.concat.apply( [], ret );
+ },
+
+ // A global GUID counter for objects
+ guid: 1,
+
+ proxy: function( fn, proxy, thisObject ) {
+ if ( arguments.length === 2 ) {
+ if ( typeof proxy === "string" ) {
+ thisObject = fn;
+ fn = thisObject[ proxy ];
+ proxy = undefined;
+
+ } else if ( proxy && !jQuery.isFunction( proxy ) ) {
+ thisObject = proxy;
+ proxy = undefined;
+ }
+ }
+
+ if ( !proxy && fn ) {
+ proxy = function() {
+ return fn.apply( thisObject || this, arguments );
+ };
+ }
+
+ // Set the guid of unique handler to the same of original handler, so it can be removed
+ if ( fn ) {
+ proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
+ }
+
+ // So proxy can be declared as an argument
+ return proxy;
+ },
+
+ // Mutifunctional method to get and set values to a collection
+ // The value/s can be optionally by executed if its a function
+ access: function( elems, key, value, exec, fn, pass ) {
+ var length = elems.length;
+
+ // Setting many attributes
+ if ( typeof key === "object" ) {
+ for ( var k in key ) {
+ jQuery.access( elems, k, key[k], exec, fn, value );
+ }
+ return elems;
+ }
+
+ // Setting one attribute
+ if ( value !== undefined ) {
+ // Optionally, function values get executed if exec is true
+ exec = !pass && exec && jQuery.isFunction(value);
+
+ for ( var i = 0; i < length; i++ ) {
+ fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
+ }
+
+ return elems;
+ }
+
+ // Getting an attribute
+ return length ? fn( elems[0], key ) : undefined;
+ },
+
+ now: function() {
+ return (new Date()).getTime();
+ },
+
+ // Use of jQuery.browser is frowned upon.
+ // More details: http://docs.jquery.com/Utilities/jQuery.browser
+ uaMatch: function( ua ) {
+ ua = ua.toLowerCase();
+
+ var match = rwebkit.exec( ua ) ||
+ ropera.exec( ua ) ||
+ rmsie.exec( ua ) ||
+ ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
+ [];
+
+ return { browser: match[1] || "", version: match[2] || "0" };
+ },
+
+ browser: {}
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
+ class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+browserMatch = jQuery.uaMatch( userAgent );
+if ( browserMatch.browser ) {
+ jQuery.browser[ browserMatch.browser ] = true;
+ jQuery.browser.version = browserMatch.version;
+}
+
+// Deprecated, use jQuery.browser.webkit instead
+if ( jQuery.browser.webkit ) {
+ jQuery.browser.safari = true;
+}
+
+if ( indexOf ) {
+ jQuery.inArray = function( elem, array ) {
+ return indexOf.call( array, elem );
+ };
+}
+
+// Verify that \s matches non-breaking spaces
+// (IE fails on this test)
+if ( !rwhite.test( "\xA0" ) ) {
+ trimLeft = /^[\s\xA0]+/;
+ trimRight = /[\s\xA0]+$/;
+}
+
+// All jQuery objects should point back to these
+rootjQuery = jQuery(document);
+
+// Cleanup functions for the document ready method
+if ( document.addEventListener ) {
+ DOMContentLoaded = function() {
+ document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
+ jQuery.ready();
+ };
+
+} else if ( document.attachEvent ) {
+ DOMContentLoaded = function() {
+ // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+ if ( document.readyState === "complete" ) {
+ document.detachEvent( "onreadystatechange", DOMContentLoaded );
+ jQuery.ready();
+ }
+ };
+}
+
+// The DOM ready check for Internet Explorer
+function doScrollCheck() {
+ if ( jQuery.isReady ) {
+ return;
+ }
+
+ try {
+ // If IE is used, use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ document.documentElement.doScroll("left");
+ } catch(e) {
+ setTimeout( doScrollCheck, 1 );
+ return;
+ }
+
+ // and execute any waiting functions
+ jQuery.ready();
+}
+
+// Expose jQuery to the global object
+return (window.jQuery = window.$ = jQuery);
+
+})();
+
+
+(function() {
+
+ jQuery.support = {};
+
+ var root = document.documentElement,
+ script = document.createElement("script"),
+ div = document.createElement("div"),
+ id = "script" + jQuery.now();
+
+ div.style.display = "none";
+ div.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+
+ var all = div.getElementsByTagName("*"),
+ a = div.getElementsByTagName("a")[0],
+ select = document.createElement("select"),
+ opt = select.appendChild( document.createElement("option") );
+
+ // Can't get basic test support
+ if ( !all || !all.length || !a ) {
+ return;
+ }
+
+ jQuery.support = {
+ // IE strips leading whitespace when .innerHTML is used
+ leadingWhitespace: div.firstChild.nodeType === 3,
+
+ // Make sure that tbody elements aren't automatically inserted
+ // IE will insert them into empty tables
+ tbody: !div.getElementsByTagName("tbody").length,
+
+ // Make sure that link elements get serialized correctly by innerHTML
+ // This requires a wrapper element in IE
+ htmlSerialize: !!div.getElementsByTagName("link").length,
+
+ // Get the style information from getAttribute
+ // (IE uses .cssText insted)
+ style: /red/.test( a.getAttribute("style") ),
+
+ // Make sure that URLs aren't manipulated
+ // (IE normalizes it by default)
+ hrefNormalized: a.getAttribute("href") === "/a",
+
+ // Make sure that element opacity exists
+ // (IE uses filter instead)
+ // Use a regex to work around a WebKit issue. See #5145
+ opacity: /^0.55$/.test( a.style.opacity ),
+
+ // Verify style float existence
+ // (IE uses styleFloat instead of cssFloat)
+ cssFloat: !!a.style.cssFloat,
+
+ // Make sure that if no value is specified for a checkbox
+ // that it defaults to "on".
+ // (WebKit defaults to "" instead)
+ checkOn: div.getElementsByTagName("input")[0].value === "on",
+
+ // Make sure that a selected-by-default option has a working selected property.
+ // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+ optSelected: opt.selected,
+
+ // Will be defined later
+ optDisabled: false,
+ checkClone: false,
+ scriptEval: false,
+ noCloneEvent: true,
+ boxModel: null,
+ inlineBlockNeedsLayout: false,
+ shrinkWrapBlocks: false,
+ reliableHiddenOffsets: true
+ };
+
+ // Make sure that the options inside disabled selects aren't marked as disabled
+ // (WebKit marks them as diabled)
+ select.disabled = true;
+ jQuery.support.optDisabled = !opt.disabled;
+
+ script.type = "text/javascript";
+ try {
+ script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
+ } catch(e) {}
+
+ root.insertBefore( script, root.firstChild );
+
+ // Make sure that the execution of code works by injecting a script
+ // tag with appendChild/createTextNode
+ // (IE doesn't support this, fails, and uses .text instead)
+ if ( window[ id ] ) {
+ jQuery.support.scriptEval = true;
+ delete window[ id ];
+ }
+
+ root.removeChild( script );
+
+ if ( div.attachEvent && div.fireEvent ) {
+ div.attachEvent("onclick", function click() {
+ // Cloning a node shouldn't copy over any
+ // bound event handlers (IE does this)
+ jQuery.support.noCloneEvent = false;
+ div.detachEvent("onclick", click);
+ });
+ div.cloneNode(true).fireEvent("onclick");
+ }
+
+ div = document.createElement("div");
+ div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
+
+ var fragment = document.createDocumentFragment();
+ fragment.appendChild( div.firstChild );
+
+ // WebKit doesn't clone checked state correctly in fragments
+ jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
+
+ // Figure out if the W3C box model works as expected
+ // document.body must exist before we can do this
+ jQuery(function() {
+ var div = document.createElement("div");
+ div.style.width = div.style.paddingLeft = "1px";
+
+ document.body.appendChild( div );
+ jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
+
+ if ( "zoom" in div.style ) {
+ // Check if natively block-level elements act like inline-block
+ // elements when setting their display to 'inline' and giving
+ // them layout
+ // (IE < 8 does this)
+ div.style.display = "inline";
+ div.style.zoom = 1;
+ jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2;
+
+ // Check if elements with layout shrink-wrap their children
+ // (IE 6 does this)
+ div.style.display = "";
+ div.innerHTML = "<div style='width:4px;'></div>";
+ jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2;
+ }
+
+ div.innerHTML = "<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";
+ var tds = div.getElementsByTagName("td");
+
+ // Check if table cells still have offsetWidth/Height when they are set
+ // to display:none and there are still other visible table cells in a
+ // table row; if so, offsetWidth/Height are not reliable for use when
+ // determining if an element has been hidden directly using
+ // display:none (it is still safe to use offsets if a parent element is
+ // hidden; don safety goggles and see bug #4512 for more information).
+ // (only IE 8 fails this test)
+ jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0;
+
+ tds[0].style.display = "";
+ tds[1].style.display = "none";
+
+ // Check if empty table cells still have offsetWidth/Height
+ // (IE < 8 fail this test)
+ jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0;
+ div.innerHTML = "";
+
+ document.body.removeChild( div ).style.display = "none";
+ div = tds = null;
+ });
+
+ // Technique from Juriy Zaytsev
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
+ var eventSupported = function( eventName ) {
+ var el = document.createElement("div");
+ eventName = "on" + eventName;
+
+ var isSupported = (eventName in el);
+ if ( !isSupported ) {
+ el.setAttribute(eventName, "return;");
+ isSupported = typeof el[eventName] === "function";
+ }
+ el = null;
+
+ return isSupported;
+ };
+
+ jQuery.support.submitBubbles = eventSupported("submit");
+ jQuery.support.changeBubbles = eventSupported("change");
+
+ // release memory in IE
+ root = script = div = all = a = null;
+})();
+
+jQuery.props = {
+ "for": "htmlFor",
+ "class": "className",
+ readonly: "readOnly",
+ maxlength: "maxLength",
+ cellspacing: "cellSpacing",
+ rowspan: "rowSpan",
+ colspan: "colSpan",
+ tabindex: "tabIndex",
+ usemap: "useMap",
+ frameborder: "frameBorder"
+};
+
+
+
+
+var windowData = {},
+ rbrace = /^(?:\{.*\}|\[.*\])$/;
+
+jQuery.extend({
+ cache: {},
+
+ // Please use with caution
+ uuid: 0,
+
+ // Unique for each copy of jQuery on the page
+ expando: "jQuery" + jQuery.now(),
+
+ // The following elements throw uncatchable exceptions if you
+ // attempt to add expando properties to them.
+ noData: {
+ "embed": true,
+ // Ban all objects except for Flash (which handle expandos)
+ "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
+ "applet": true
+ },
+
+ data: function( elem, name, data ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ elem = elem == window ?
+ windowData :
+ elem;
+
+ var isNode = elem.nodeType,
+ id = isNode ? elem[ jQuery.expando ] : null,
+ cache = jQuery.cache, thisCache;
+
+ if ( isNode && !id && typeof name === "string" && data === undefined ) {
+ return;
+ }
+
+ // Get the data from the object directly
+ if ( !isNode ) {
+ cache = elem;
+
+ // Compute a unique ID for the element
+ } else if ( !id ) {
+ elem[ jQuery.expando ] = id = ++jQuery.uuid;
+ }
+
+ // Avoid generating a new cache unless none exists and we
+ // want to manipulate it.
+ if ( typeof name === "object" ) {
+ if ( isNode ) {
+ cache[ id ] = jQuery.extend(cache[ id ], name);
+
+ } else {
+ jQuery.extend( cache, name );
+ }
+
+ } else if ( isNode && !cache[ id ] ) {
+ cache[ id ] = {};
+ }
+
+ thisCache = isNode ? cache[ id ] : cache;
+
+ // Prevent overriding the named cache with undefined values
+ if ( data !== undefined ) {
+ thisCache[ name ] = data;
+ }
+
+ return typeof name === "string" ? thisCache[ name ] : thisCache;
+ },
+
+ removeData: function( elem, name ) {
+ if ( !jQuery.acceptData( elem ) ) {
+ return;
+ }
+
+ elem = elem == window ?
+ windowData :
+ elem;
+
+ var isNode = elem.nodeType,
+ id = isNode ? elem[ jQuery.expando ] : elem,
+ cache = jQuery.cache,
+ thisCache = isNode ? cache[ id ] : id;
+
+ // If we want to remove a specific section of the element's data
+ if ( name ) {
+ if ( thisCache ) {
+ // Remove the section of cache data
+ delete thisCache[ name ];
+
+ // If we've removed all the data, remove the element's cache
+ if ( isNode && jQuery.isEmptyObject(thisCache) ) {
+ jQuery.removeData( elem );
+ }
+ }
+
+ // Otherwise, we want to remove all of the element's data
+ } else {
+ if ( isNode && jQuery.support.deleteExpando ) {
+ delete elem[ jQuery.expando ];
+
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( jQuery.expando );
+
+ // Completely remove the data cache
+ } else if ( isNode ) {
+ delete cache[ id ];
+
+ // Remove all fields from the object
+ } else {
+ for ( var n in elem ) {
+ delete elem[ n ];
+ }
+ }
+ }
+ },
+
+ // A method for determining if a DOM node can handle the data expando
+ acceptData: function( elem ) {
+ if ( elem.nodeName ) {
+ var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
+
+ if ( match ) {
+ return !(match === true || elem.getAttribute("classid") !== match);
+ }
+ }
+
+ return true;
+ }
+});
+
+jQuery.fn.extend({
+ data: function( key, value ) {
+ if ( typeof key === "undefined" ) {
+ return this.length ? jQuery.data( this[0] ) : null;
+
+ } else if ( typeof key === "object" ) {
+ return this.each(function() {
+ jQuery.data( this, key );
+ });
+ }
+
+ var parts = key.split(".");
+ parts[1] = parts[1] ? "." + parts[1] : "";
+
+ if ( value === undefined ) {
+ var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
+
+ // Try to fetch any internally stored data first
+ if ( data === undefined && this.length ) {
+ data = jQuery.data( this[0], key );
+
+ // If nothing was found internally, try to fetch any
+ // data from the HTML5 data-* attribute
+ if ( data === undefined && this[0].nodeType === 1 ) {
+ data = this[0].getAttribute( "data-" + key );
+
+ if ( typeof data === "string" ) {
+ try {
+ data = data === "true" ? true :
+ data === "false" ? false :
+ data === "null" ? null :
+ !jQuery.isNaN( data ) ? parseFloat( data ) :
+ rbrace.test( data ) ? jQuery.parseJSON( data ) :
+ data;
+ } catch( e ) {}
+
+ } else {
+ data = undefined;
+ }
+ }
+ }
+
+ return data === undefined && parts[1] ?
+ this.data( parts[0] ) :
+ data;
+
+ } else {
+ return this.each(function() {
+ var $this = jQuery( this ), args = [ parts[0], value ];
+
+ $this.triggerHandler( "setData" + parts[1] + "!", args );
+ jQuery.data( this, key, value );
+ $this.triggerHandler( "changeData" + parts[1] + "!", args );
+ });
+ }
+ },
+
+ removeData: function( key ) {
+ return this.each(function() {
+ jQuery.removeData( this, key );
+ });
+ }
+});
+
+
+
+
+jQuery.extend({
+ queue: function( elem, type, data ) {
+ if ( !elem ) {
+ return;
+ }
+
+ type = (type || "fx") + "queue";
+ var q = jQuery.data( elem, type );
+
+ // Speed up dequeue by getting out quickly if this is just a lookup
+ if ( !data ) {
+ return q || [];
+ }
+
+ if ( !q || jQuery.isArray(data) ) {
+ q = jQuery.data( elem, type, jQuery.makeArray(data) );
+
+ } else {
+ q.push( data );
+ }
+
+ return q;
+ },
+
+ dequeue: function( elem, type ) {
+ type = type || "fx";
+
+ var queue = jQuery.queue( elem, type ), fn = queue.shift();
+
+ // If the fx queue is dequeued, always remove the progress sentinel
+ if ( fn === "inprogress" ) {
+ fn = queue.shift();
+ }
+
+ if ( fn ) {
+ // Add a progress sentinel to prevent the fx queue from being
+ // automatically dequeued
+ if ( type === "fx" ) {
+ queue.unshift("inprogress");
+ }
+
+ fn.call(elem, function() {
+ jQuery.dequeue(elem, type);
+ });
+ }
+ }
+});
+
+jQuery.fn.extend({
+ queue: function( type, data ) {
+ if ( typeof type !== "string" ) {
+ data = type;
+ type = "fx";
+ }
+
+ if ( data === undefined ) {
+ return jQuery.queue( this[0], type );
+ }
+ return this.each(function( i ) {
+ var queue = jQuery.queue( this, type, data );
+
+ if ( type === "fx" && queue[0] !== "inprogress" ) {
+ jQuery.dequeue( this, type );
+ }
+ });
+ },
+ dequeue: function( type ) {
+ return this.each(function() {
+ jQuery.dequeue( this, type );
+ });
+ },
+
+ // Based off of the plugin by Clint Helfers, with permission.
+ // http://blindsignals.com/index.php/2009/07/jquery-delay/
+ delay: function( time, type ) {
+ time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
+ type = type || "fx";
+
+ return this.queue( type, function() {
+ var elem = this;
+ setTimeout(function() {
+ jQuery.dequeue( elem, type );
+ }, time );
+ });
+ },
+
+ clearQueue: function( type ) {
+ return this.queue( type || "fx", [] );
+ }
+});
+
+
+
+
+var rclass = /[\n\t]/g,
+ rspaces = /\s+/,
+ rreturn = /\r/g,
+ rspecialurl = /^(?:href|src|style)$/,
+ rtype = /^(?:button|input)$/i,
+ rfocusable = /^(?:button|input|object|select|textarea)$/i,
+ rclickable = /^a(?:rea)?$/i,
+ rradiocheck = /^(?:radio|checkbox)$/i;
+
+jQuery.fn.extend({
+ attr: function( name, value ) {
+ return jQuery.access( this, name, value, true, jQuery.attr );
+ },
+
+ removeAttr: function( name, fn ) {
+ return this.each(function(){
+ jQuery.attr( this, name, "" );
+ if ( this.nodeType === 1 ) {
+ this.removeAttribute( name );
+ }
+ });
+ },
+
+ addClass: function( value ) {
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.addClass( value.call(this, i, self.attr("class")) );
+ });
+ }
+
+ if ( value && typeof value === "string" ) {
+ var classNames = (value || "").split( rspaces );
+
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ var elem = this[i];
+
+ if ( elem.nodeType === 1 ) {
+ if ( !elem.className ) {
+ elem.className = value;
+
+ } else {
+ var className = " " + elem.className + " ", setClass = elem.className;
+ for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+ if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
+ setClass += " " + classNames[c];
+ }
+ }
+ elem.className = jQuery.trim( setClass );
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ removeClass: function( value ) {
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.removeClass( value.call(this, i, self.attr("class")) );
+ });
+ }
+
+ if ( (value && typeof value === "string") || value === undefined ) {
+ var classNames = (value || "").split( rspaces );
+
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ var elem = this[i];
+
+ if ( elem.nodeType === 1 && elem.className ) {
+ if ( value ) {
+ var className = (" " + elem.className + " ").replace(rclass, " ");
+ for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
+ className = className.replace(" " + classNames[c] + " ", " ");
+ }
+ elem.className = jQuery.trim( className );
+
+ } else {
+ elem.className = "";
+ }
+ }
+ }
+ }
+
+ return this;
+ },
+
+ toggleClass: function( value, stateVal ) {
+ var type = typeof value, isBool = typeof stateVal === "boolean";
+
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
+ });
+ }
+
+ return this.each(function() {
+ if ( type === "string" ) {
+ // toggle individual class names
+ var className, i = 0, self = jQuery(this),
+ state = stateVal,
+ classNames = value.split( rspaces );
+
+ while ( (className = classNames[ i++ ]) ) {
+ // check each className given, space seperated list
+ state = isBool ? state : !self.hasClass( className );
+ self[ state ? "addClass" : "removeClass" ]( className );
+ }
+
+ } else if ( type === "undefined" || type === "boolean" ) {
+ if ( this.className ) {
+ // store className if set
+ jQuery.data( this, "__className__", this.className );
+ }
+
+ // toggle whole className
+ this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
+ }
+ });
+ },
+
+ hasClass: function( selector ) {
+ var className = " " + selector + " ";
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
+ return true;
+ }
+ }
+
+ return false;
+ },
+
+ val: function( value ) {
+ if ( !arguments.length ) {
+ var elem = this[0];
+
+ if ( elem ) {
+ if ( jQuery.nodeName( elem, "option" ) ) {
+ // attributes.value is undefined in Blackberry 4.7 but
+ // uses .value. See #6932
+ var val = elem.attributes.value;
+ return !val || val.specified ? elem.value : elem.text;
+ }
+
+ // We need to handle select boxes special
+ if ( jQuery.nodeName( elem, "select" ) ) {
+ var index = elem.selectedIndex,
+ values = [],
+ options = elem.options,
+ one = elem.type === "select-one";
+
+ // Nothing was selected
+ if ( index < 0 ) {
+ return null;
+ }
+
+ // Loop through all the selected options
+ for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
+ var option = options[ i ];
+
+ // Don't return options that are disabled or in a disabled optgroup
+ if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
+ (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
+
+ // Get the specific value for the option
+ value = jQuery(option).val();
+
+ // We don't need an array for one selects
+ if ( one ) {
+ return value;
+ }
+
+ // Multi-Selects return an array
+ values.push( value );
+ }
+ }
+
+ return values;
+ }
+
+ // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
+ if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
+ return elem.getAttribute("value") === null ? "on" : elem.value;
+ }
+
+
+ // Everything else, we just grab the value
+ return (elem.value || "").replace(rreturn, "");
+
+ }
+
+ return undefined;
+ }
+
+ var isFunction = jQuery.isFunction(value);
+
+ return this.each(function(i) {
+ var self = jQuery(this), val = value;
+
+ if ( this.nodeType !== 1 ) {
+ return;
+ }
+
+ if ( isFunction ) {
+ val = value.call(this, i, self.val());
+ }
+
+ // Treat null/undefined as ""; convert numbers to string
+ if ( val == null ) {
+ val = "";
+ } else if ( typeof val === "number" ) {
+ val += "";
+ } else if ( jQuery.isArray(val) ) {
+ val = jQuery.map(val, function (value) {
+ return value == null ? "" : value + "";
+ });
+ }
+
+ if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
+ this.checked = jQuery.inArray( self.val(), val ) >= 0;
+
+ } else if ( jQuery.nodeName( this, "select" ) ) {
+ var values = jQuery.makeArray(val);
+
+ jQuery( "option", this ).each(function() {
+ this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
+ });
+
+ if ( !values.length ) {
+ this.selectedIndex = -1;
+ }
+
+ } else {
+ this.value = val;
+ }
+ });
+ }
+});
+
+jQuery.extend({
+ attrFn: {
+ val: true,
+ css: true,
+ html: true,
+ text: true,
+ data: true,
+ width: true,
+ height: true,
+ offset: true
+ },
+
+ attr: function( elem, name, value, pass ) {
+ // don't set attributes on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return undefined;
+ }
+
+ if ( pass && name in jQuery.attrFn ) {
+ return jQuery(elem)[name](value);
+ }
+
+ var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
+ // Whether we are setting (or getting)
+ set = value !== undefined;
+
+ // Try to normalize/fix the name
+ name = notxml && jQuery.props[ name ] || name;
+
+ // Only do all the following if this is a node (faster for style)
+ if ( elem.nodeType === 1 ) {
+ // These attributes require special treatment
+ var special = rspecialurl.test( name );
+
+ // Safari mis-reports the default selected property of an option
+ // Accessing the parent's selectedIndex property fixes it
+ if ( name === "selected" && !jQuery.support.optSelected ) {
+ var parent = elem.parentNode;
+ if ( parent ) {
+ parent.selectedIndex;
+
+ // Make sure that it also works with optgroups, see #5701
+ if ( parent.parentNode ) {
+ parent.parentNode.selectedIndex;
+ }
+ }
+ }
+
+ // If applicable, access the attribute via the DOM 0 way
+ // 'in' checks fail in Blackberry 4.7 #6931
+ if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) {
+ if ( set ) {
+ // We can't allow the type property to be changed (since it causes problems in IE)
+ if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
+ jQuery.error( "type property can't be changed" );
+ }
+
+ if ( value === null ) {
+ if ( elem.nodeType === 1 ) {
+ elem.removeAttribute( name );
+ }
+
+ } else {
+ elem[ name ] = value;
+ }
+ }
+
+ // browsers index elements by id/name on forms, give priority to attributes.
+ if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
+ return elem.getAttributeNode( name ).nodeValue;
+ }
+
+ // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+ // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+ if ( name === "tabIndex" ) {
+ var attributeNode = elem.getAttributeNode( "tabIndex" );
+
+ return attributeNode && attributeNode.specified ?
+ attributeNode.value :
+ rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+ 0 :
+ undefined;
+ }
+
+ return elem[ name ];
+ }
+
+ if ( !jQuery.support.style && notxml && name === "style" ) {
+ if ( set ) {
+ elem.style.cssText = "" + value;
+ }
+
+ return elem.style.cssText;
+ }
+
+ if ( set ) {
+ // convert the value to a string (all browsers do this but IE) see #1070
+ elem.setAttribute( name, "" + value );
+ }
+
+ // Ensure that missing attributes return undefined
+ // Blackberry 4.7 returns "" from getAttribute #6938
+ if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
+ return undefined;
+ }
+
+ var attr = !jQuery.support.hrefNormalized && notxml && special ?
+ // Some attributes require a special call on IE
+ elem.getAttribute( name, 2 ) :
+ elem.getAttribute( name );
+
+ // Non-existent attributes return null, we normalize to undefined
+ return attr === null ? undefined : attr;
+ }
+ }
+});
+
+
+
+
+var rnamespaces = /\.(.*)$/,
+ rformElems = /^(?:textarea|input|select)$/i,
+ rperiod = /\./g,
+ rspace = / /g,
+ rescape = /[^\w\s.|`]/g,
+ fcleanup = function( nm ) {
+ return nm.replace(rescape, "\\$&");
+ },
+ focusCounts = { focusin: 0, focusout: 0 };
+
+/*
+ * A number of helper functions used for managing events.
+ * Many of the ideas behind this code originated from
+ * Dean Edwards' addEvent library.
+ */
+jQuery.event = {
+
+ // Bind an event to an element
+ // Original by Dean Edwards
+ add: function( elem, types, handler, data ) {
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ // For whatever reason, IE has trouble passing the window object
+ // around, causing it to be cloned in the process
+ if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) {
+ elem = window;
+ }
+
+ if ( handler === false ) {
+ handler = returnFalse;
+ }
+
+ var handleObjIn, handleObj;
+
+ if ( handler.handler ) {
+ handleObjIn = handler;
+ handler = handleObjIn.handler;
+ }
+
+ // Make sure that the function being executed has a unique ID
+ if ( !handler.guid ) {
+ handler.guid = jQuery.guid++;
+ }
+
+ // Init the element's event structure
+ var elemData = jQuery.data( elem );
+
+ // If no elemData is found then we must be trying to bind to one of the
+ // banned noData elements
+ if ( !elemData ) {
+ return;
+ }
+
+ // Use a key less likely to result in collisions for plain JS objects.
+ // Fixes bug #7150.
+ var eventKey = elem.nodeType ? "events" : "__events__",
+ events = elemData[ eventKey ],
+ eventHandle = elemData.handle;
+
+ if ( typeof events === "function" ) {
+ // On plain objects events is a fn that holds the the data
+ // which prevents this data from being JSON serialized
+ // the function does not need to be called, it just contains the data
+ eventHandle = events.handle;
+ events = events.events;
+
+ } else if ( !events ) {
+ if ( !elem.nodeType ) {
+ // On plain objects, create a fn that acts as the holder
+ // of the values to avoid JSON serialization of event data
+ elemData[ eventKey ] = elemData = function(){};
+ }
+
+ elemData.events = events = {};
+ }
+
+ if ( !eventHandle ) {
+ elemData.handle = eventHandle = function() {
+ // Handle the second event of a trigger and when
+ // an event is called after a page has unloaded
+ return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
+ jQuery.event.handle.apply( eventHandle.elem, arguments ) :
+ undefined;
+ };
+ }
+
+ // Add elem as a property of the handle function
+ // This is to prevent a memory leak with non-native events in IE.
+ eventHandle.elem = elem;
+
+ // Handle multiple events separated by a space
+ // jQuery(...).bind("mouseover mouseout", fn);
+ types = types.split(" ");
+
+ var type, i = 0, namespaces;
+
+ while ( (type = types[ i++ ]) ) {
+ handleObj = handleObjIn ?
+ jQuery.extend({}, handleObjIn) :
+ { handler: handler, data: data };
+
+ // Namespaced event handlers
+ if ( type.indexOf(".") > -1 ) {
+ namespaces = type.split(".");
+ type = namespaces.shift();
+ handleObj.namespace = namespaces.slice(0).sort().join(".");
+
+ } else {
+ namespaces = [];
+ handleObj.namespace = "";
+ }
+
+ handleObj.type = type;
+ if ( !handleObj.guid ) {
+ handleObj.guid = handler.guid;
+ }
+
+ // Get the current list of functions bound to this event
+ var handlers = events[ type ],
+ special = jQuery.event.special[ type ] || {};
+
+ // Init the event handler queue
+ if ( !handlers ) {
+ handlers = events[ type ] = [];
+
+ // Check for a special event handler
+ // Only use addEventListener/attachEvent if the special
+ // events handler returns false
+ if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+ // Bind the global event handler to the element
+ if ( elem.addEventListener ) {
+ elem.addEventListener( type, eventHandle, false );
+
+ } else if ( elem.attachEvent ) {
+ elem.attachEvent( "on" + type, eventHandle );
+ }
+ }
+ }
+
+ if ( special.add ) {
+ special.add.call( elem, handleObj );
+
+ if ( !handleObj.handler.guid ) {
+ handleObj.handler.guid = handler.guid;
+ }
+ }
+
+ // Add the function to the element's handler list
+ handlers.push( handleObj );
+
+ // Keep track of which events have been used, for global triggering
+ jQuery.event.global[ type ] = true;
+ }
+
+ // Nullify elem to prevent memory leaks in IE
+ elem = null;
+ },
+
+ global: {},
+
+ // Detach an event or set of events from an element
+ remove: function( elem, types, handler, pos ) {
+ // don't do events on text and comment nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return;
+ }
+
+ if ( handler === false ) {
+ handler = returnFalse;
+ }
+
+ var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
+ eventKey = elem.nodeType ? "events" : "__events__",
+ elemData = jQuery.data( elem ),
+ events = elemData && elemData[ eventKey ];
+
+ if ( !elemData || !events ) {
+ return;
+ }
+
+ if ( typeof events === "function" ) {
+ elemData = events;
+ events = events.events;
+ }
+
+ // types is actually an event object here
+ if ( types && types.type ) {
+ handler = types.handler;
+ types = types.type;
+ }
+
+ // Unbind all events for the element
+ if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
+ types = types || "";
+
+ for ( type in events ) {
+ jQuery.event.remove( elem, type + types );
+ }
+
+ return;
+ }
+
+ // Handle multiple events separated by a space
+ // jQuery(...).unbind("mouseover mouseout", fn);
+ types = types.split(" ");
+
+ while ( (type = types[ i++ ]) ) {
+ origType = type;
+ handleObj = null;
+ all = type.indexOf(".") < 0;
+ namespaces = [];
+
+ if ( !all ) {
+ // Namespaced event handlers
+ namespaces = type.split(".");
+ type = namespaces.shift();
+
+ namespace = new RegExp("(^|\\.)" +
+ jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
+ }
+
+ eventType = events[ type ];
+
+ if ( !eventType ) {
+ continue;
+ }
+
+ if ( !handler ) {
+ for ( j = 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ jQuery.event.remove( elem, origType, handleObj.handler, j );
+ eventType.splice( j--, 1 );
+ }
+ }
+
+ continue;
+ }
+
+ special = jQuery.event.special[ type ] || {};
+
+ for ( j = pos || 0; j < eventType.length; j++ ) {
+ handleObj = eventType[ j ];
+
+ if ( handler.guid === handleObj.guid ) {
+ // remove the given handler for the given type
+ if ( all || namespace.test( handleObj.namespace ) ) {
+ if ( pos == null ) {
+ eventType.splice( j--, 1 );
+ }
+
+ if ( special.remove ) {
+ special.remove.call( elem, handleObj );
+ }
+ }
+
+ if ( pos != null ) {
+ break;
+ }
+ }
+ }
+
+ // remove generic event handler if no more handlers exist
+ if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
+ if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
+ jQuery.removeEvent( elem, type, elemData.handle );
+ }
+
+ ret = null;
+ delete events[ type ];
+ }
+ }
+
+ // Remove the expando if it's no longer used
+ if ( jQuery.isEmptyObject( events ) ) {
+ var handle = elemData.handle;
+ if ( handle ) {
+ handle.elem = null;
+ }
+
+ delete elemData.events;
+ delete elemData.handle;
+
+ if ( typeof elemData === "function" ) {
+ jQuery.removeData( elem, eventKey );
+
+ } else if ( jQuery.isEmptyObject( elemData ) ) {
+ jQuery.removeData( elem );
+ }
+ }
+ },
+
+ // bubbling is internal
+ trigger: function( event, data, elem /*, bubbling */ ) {
+ // Event object or event type
+ var type = event.type || event,
+ bubbling = arguments[3];
+
+ if ( !bubbling ) {
+ event = typeof event === "object" ?
+ // jQuery.Event object
+ event[ jQuery.expando ] ? event :
+ // Object literal
+ jQuery.extend( jQuery.Event(type), event ) :
+ // Just the event type (string)
+ jQuery.Event(type);
+
+ if ( type.indexOf("!") >= 0 ) {
+ event.type = type = type.slice(0, -1);
+ event.exclusive = true;
+ }
+
+ // Handle a global trigger
+ if ( !elem ) {
+ // Don't bubble custom events when global (to avoid too much overhead)
+ event.stopPropagation();
+
+ // Only trigger if we've ever bound an event for it
+ if ( jQuery.event.global[ type ] ) {
+ jQuery.each( jQuery.cache, function() {
+ if ( this.events && this.events[type] ) {
+ jQuery.event.trigger( event, data, this.handle.elem );
+ }
+ });
+ }
+ }
+
+ // Handle triggering a single element
+
+ // don't do events on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
+ return undefined;
+ }
+
+ // Clean up in case it is reused
+ event.result = undefined;
+ event.target = elem;
+
+ // Clone the incoming data, if any
+ data = jQuery.makeArray( data );
+ data.unshift( event );
+ }
+
+ event.currentTarget = elem;
+
+ // Trigger the event, it is assumed that "handle" is a function
+ var handle = elem.nodeType ?
+ jQuery.data( elem, "handle" ) :
+ (jQuery.data( elem, "__events__" ) || {}).handle;
+
+ if ( handle ) {
+ handle.apply( elem, data );
+ }
+
+ var parent = elem.parentNode || elem.ownerDocument;
+
+ // Trigger an inline bound script
+ try {
+ if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
+ if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
+ event.result = false;
+ event.preventDefault();
+ }
+ }
+
+ // prevent IE from throwing an error for some elements with some event types, see #3533
+ } catch (inlineError) {}
+
+ if ( !event.isPropagationStopped() && parent ) {
+ jQuery.event.trigger( event, data, parent, true );
+
+ } else if ( !event.isDefaultPrevented() ) {
+ var target = event.target, old, targetType = type.replace(rnamespaces, ""),
+ isClick = jQuery.nodeName(target, "a") && targetType === "click",
+ special = jQuery.event.special[ targetType ] || {};
+
+ if ( (!special._default || special._default.call( elem, event ) === false) &&
+ !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
+
+ try {
+ if ( target[ targetType ] ) {
+ // Make sure that we don't accidentally re-trigger the onFOO events
+ old = target[ "on" + targetType ];
+
+ if ( old ) {
+ target[ "on" + targetType ] = null;
+ }
+
+ jQuery.event.triggered = true;
+ target[ targetType ]();
+ }
+
+ // prevent IE from throwing an error for some elements with some event types, see #3533
+ } catch (triggerError) {}
+
+ if ( old ) {
+ target[ "on" + targetType ] = old;
+ }
+
+ jQuery.event.triggered = false;
+ }
+ }
+ },
+
+ handle: function( event ) {
+ var all, handlers, namespaces, namespace_sort = [], namespace_re, events, args = jQuery.makeArray( arguments );
+
+ event = args[0] = jQuery.event.fix( event || window.event );
+ event.currentTarget = this;
+
+ // Namespaced event handlers
+ all = event.type.indexOf(".") < 0 && !event.exclusive;
+
+ if ( !all ) {
+ namespaces = event.type.split(".");
+ event.type = namespaces.shift();
+ namespace_sort = namespaces.slice(0).sort();
+ namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)");
+ }
+
+ event.namespace = event.namespace || namespace_sort.join(".");
+
+ events = jQuery.data(this, this.nodeType ? "events" : "__events__");
+
+ if ( typeof events === "function" ) {
+ events = events.events;
+ }
+
+ handlers = (events || {})[ event.type ];
+
+ if ( events && handlers ) {
+ // Clone the handlers to prevent manipulation
+ handlers = handlers.slice(0);
+
+ for ( var j = 0, l = handlers.length; j < l; j++ ) {
+ var handleObj = handlers[ j ];
+
+ // Filter the functions by class
+ if ( all || namespace_re.test( handleObj.namespace ) ) {
+ // Pass in a reference to the handler function itself
+ // So that we can later remove it
+ event.handler = handleObj.handler;
+ event.data = handleObj.data;
+ event.handleObj = handleObj;
+
+ var ret = handleObj.handler.apply( this, args );
+
+ if ( ret !== undefined ) {
+ event.result = ret;
+ if ( ret === false ) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ }
+
+ if ( event.isImmediatePropagationStopped() ) {
+ break;
+ }
+ }
+ }
+ }
+
+ return event.result;
+ },
+
+ props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+
+ fix: function( event ) {
+ if ( event[ jQuery.expando ] ) {
+ return event;
+ }
+
+ // store a copy of the original event object
+ // and "clone" to set read-only properties
+ var originalEvent = event;
+ event = jQuery.Event( originalEvent );
+
+ for ( var i = this.props.length, prop; i; ) {
+ prop = this.props[ --i ];
+ event[ prop ] = originalEvent[ prop ];
+ }
+
+ // Fix target property, if necessary
+ if ( !event.target ) {
+ event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
+ }
+
+ // check if target is a textnode (safari)
+ if ( event.target.nodeType === 3 ) {
+ event.target = event.target.parentNode;
+ }
+
+ // Add relatedTarget, if necessary
+ if ( !event.relatedTarget && event.fromElement ) {
+ event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
+ }
+
+ // Calculate pageX/Y if missing and clientX/Y available
+ if ( event.pageX == null && event.clientX != null ) {
+ var doc = document.documentElement, body = document.body;
+ event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
+ event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
+ }
+
+ // Add which for key events
+ if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
+ event.which = event.charCode != null ? event.charCode : event.keyCode;
+ }
+
+ // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
+ if ( !event.metaKey && event.ctrlKey ) {
+ event.metaKey = event.ctrlKey;
+ }
+
+ // Add which for click: 1 === left; 2 === middle; 3 === right
+ // Note: button is not normalized, so don't use it
+ if ( !event.which && event.button !== undefined ) {
+ event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
+ }
+
+ return event;
+ },
+
+ // Deprecated, use jQuery.guid instead
+ guid: 1E8,
+
+ // Deprecated, use jQuery.proxy instead
+ proxy: jQuery.proxy,
+
+ special: {
+ ready: {
+ // Make sure the ready event is setup
+ setup: jQuery.bindReady,
+ teardown: jQuery.noop
+ },
+
+ live: {
+ add: function( handleObj ) {
+ jQuery.event.add( this,
+ liveConvert( handleObj.origType, handleObj.selector ),
+ jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
+ },
+
+ remove: function( handleObj ) {
+ jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
+ }
+ },
+
+ beforeunload: {
+ setup: function( data, namespaces, eventHandle ) {
+ // We only want to do this special case on windows
+ if ( jQuery.isWindow( this ) ) {
+ this.onbeforeunload = eventHandle;
+ }
+ },
+
+ teardown: function( namespaces, eventHandle ) {
+ if ( this.onbeforeunload === eventHandle ) {
+ this.onbeforeunload = null;
+ }
+ }
+ }
+ }
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+ function( elem, type, handle ) {
+ if ( elem.removeEventListener ) {
+ elem.removeEventListener( type, handle, false );
+ }
+ } :
+ function( elem, type, handle ) {
+ if ( elem.detachEvent ) {
+ elem.detachEvent( "on" + type, handle );
+ }
+ };
+
+jQuery.Event = function( src ) {
+ // Allow instantiation without the 'new' keyword
+ if ( !this.preventDefault ) {
+ return new jQuery.Event( src );
+ }
+
+ // Event object
+ if ( src && src.type ) {
+ this.originalEvent = src;
+ this.type = src.type;
+ // Event type
+ } else {
+ this.type = src;
+ }
+
+ // timeStamp is buggy for some events on Firefox(#3843)
+ // So we won't rely on the native value
+ this.timeStamp = jQuery.now();
+
+ // Mark it as fixed
+ this[ jQuery.expando ] = true;
+};
+
+function returnFalse() {
+ return false;
+}
+function returnTrue() {
+ return true;
+}
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+ preventDefault: function() {
+ this.isDefaultPrevented = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+
+ // if preventDefault exists run it on the original event
+ if ( e.preventDefault ) {
+ e.preventDefault();
+
+ // otherwise set the returnValue property of the original event to false (IE)
+ } else {
+ e.returnValue = false;
+ }
+ },
+ stopPropagation: function() {
+ this.isPropagationStopped = returnTrue;
+
+ var e = this.originalEvent;
+ if ( !e ) {
+ return;
+ }
+ // if stopPropagation exists run it on the original event
+ if ( e.stopPropagation ) {
+ e.stopPropagation();
+ }
+ // otherwise set the cancelBubble property of the original event to true (IE)
+ e.cancelBubble = true;
+ },
+ stopImmediatePropagation: function() {
+ this.isImmediatePropagationStopped = returnTrue;
+ this.stopPropagation();
+ },
+ isDefaultPrevented: returnFalse,
+ isPropagationStopped: returnFalse,
+ isImmediatePropagationStopped: returnFalse
+};
+
+// Checks if an event happened on an element within another element
+// Used in jQuery.event.special.mouseenter and mouseleave handlers
+var withinElement = function( event ) {
+ // Check if mouse(over|out) are still within the same parent element
+ var parent = event.relatedTarget;
+
+ // Firefox sometimes assigns relatedTarget a XUL element
+ // which we cannot access the parentNode property of
+ try {
+ // Traverse up the tree
+ while ( parent && parent !== this ) {
+ parent = parent.parentNode;
+ }
+
+ if ( parent !== this ) {
+ // set the correct event type
+ event.type = event.data;
+
+ // handle event if we actually just moused on to a non sub-element
+ jQuery.event.handle.apply( this, arguments );
+ }
+
+ // assuming we've left the element since we most likely mousedover a xul element
+ } catch(e) { }
+},
+
+// In case of event delegation, we only need to rename the event.type,
+// liveHandler will take care of the rest.
+delegate = function( event ) {
+ event.type = event.data;
+ jQuery.event.handle.apply( this, arguments );
+};
+
+// Create mouseenter and mouseleave events
+jQuery.each({
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+}, function( orig, fix ) {
+ jQuery.event.special[ orig ] = {
+ setup: function( data ) {
+ jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
+ },
+ teardown: function( data ) {
+ jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
+ }
+ };
+});
+
+// submit delegation
+if ( !jQuery.support.submitBubbles ) {
+
+ jQuery.event.special.submit = {
+ setup: function( data, namespaces ) {
+ if ( this.nodeName.toLowerCase() !== "form" ) {
+ jQuery.event.add(this, "click.specialSubmit", function( e ) {
+ var elem = e.target, type = elem.type;
+
+ if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
+ e.liveFired = undefined;
+ return trigger( "submit", this, arguments );
+ }
+ });
+
+ jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
+ var elem = e.target, type = elem.type;
+
+ if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
+ e.liveFired = undefined;
+ return trigger( "submit", this, arguments );
+ }
+ });
+
+ } else {
+ return false;
+ }
+ },
+
+ teardown: function( namespaces ) {
+ jQuery.event.remove( this, ".specialSubmit" );
+ }
+ };
+
+}
+
+// change delegation, happens here so we have bind.
+if ( !jQuery.support.changeBubbles ) {
+
+ var changeFilters,
+
+ getVal = function( elem ) {
+ var type = elem.type, val = elem.value;
+
+ if ( type === "radio" || type === "checkbox" ) {
+ val = elem.checked;
+
+ } else if ( type === "select-multiple" ) {
+ val = elem.selectedIndex > -1 ?
+ jQuery.map( elem.options, function( elem ) {
+ return elem.selected;
+ }).join("-") :
+ "";
+
+ } else if ( elem.nodeName.toLowerCase() === "select" ) {
+ val = elem.selectedIndex;
+ }
+
+ return val;
+ },
+
+ testChange = function testChange( e ) {
+ var elem = e.target, data, val;
+
+ if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
+ return;
+ }
+
+ data = jQuery.data( elem, "_change_data" );
+ val = getVal(elem);
+
+ // the current data will be also retrieved by beforeactivate
+ if ( e.type !== "focusout" || elem.type !== "radio" ) {
+ jQuery.data( elem, "_change_data", val );
+ }
+
+ if ( data === undefined || val === data ) {
+ return;
+ }
+
+ if ( data != null || val ) {
+ e.type = "change";
+ e.liveFired = undefined;
+ return jQuery.event.trigger( e, arguments[1], elem );
+ }
+ };
+
+ jQuery.event.special.change = {
+ filters: {
+ focusout: testChange,
+
+ beforedeactivate: testChange,
+
+ click: function( e ) {
+ var elem = e.target, type = elem.type;
+
+ if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
+ return testChange.call( this, e );
+ }
+ },
+
+ // Change has to be called before submit
+ // Keydown will be called before keypress, which is used in submit-event delegation
+ keydown: function( e ) {
+ var elem = e.target, type = elem.type;
+
+ if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
+ (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
+ type === "select-multiple" ) {
+ return testChange.call( this, e );
+ }
+ },
+
+ // Beforeactivate happens also before the previous element is blurred
+ // with this event you can't trigger a change event, but you can store
+ // information
+ beforeactivate: function( e ) {
+ var elem = e.target;
+ jQuery.data( elem, "_change_data", getVal(elem) );
+ }
+ },
+
+ setup: function( data, namespaces ) {
+ if ( this.type === "file" ) {
+ return false;
+ }
+
+ for ( var type in changeFilters ) {
+ jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
+ }
+
+ return rformElems.test( this.nodeName );
+ },
+
+ teardown: function( namespaces ) {
+ jQuery.event.remove( this, ".specialChange" );
+
+ return rformElems.test( this.nodeName );
+ }
+ };
+
+ changeFilters = jQuery.event.special.change.filters;
+
+ // Handle when the input is .focus()'d
+ changeFilters.focus = changeFilters.beforeactivate;
+}
+
+function trigger( type, elem, args ) {
+ args[0].type = type;
+ return jQuery.event.handle.apply( elem, args );
+}
+
+// Create "bubbling" focus and blur events
+if ( document.addEventListener ) {
+ jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+ jQuery.event.special[ fix ] = {
+ setup: function() {
+ if ( focusCounts[fix]++ === 0 ) {
+ document.addEventListener( orig, handler, true );
+ }
+ },
+ teardown: function() {
+ if ( --focusCounts[fix] === 0 ) {
+ document.removeEventListener( orig, handler, true );
+ }
+ }
+ };
+
+ function handler( e ) {
+ e = jQuery.event.fix( e );
+ e.type = fix;
+ return jQuery.event.trigger( e, null, e.target );
+ }
+ });
+}
+
+jQuery.each(["bind", "one"], function( i, name ) {
+ jQuery.fn[ name ] = function( type, data, fn ) {
+ // Handle object literals
+ if ( typeof type === "object" ) {
+ for ( var key in type ) {
+ this[ name ](key, data, type[key], fn);
+ }
+ return this;
+ }
+
+ if ( jQuery.isFunction( data ) || data === false ) {
+ fn = data;
+ data = undefined;
+ }
+
+ var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
+ jQuery( this ).unbind( event, handler );
+ return fn.apply( this, arguments );
+ }) : fn;
+
+ if ( type === "unload" && name !== "one" ) {
+ this.one( type, data, fn );
+
+ } else {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ jQuery.event.add( this[i], type, handler, data );
+ }
+ }
+
+ return this;
+ };
+});
+
+jQuery.fn.extend({
+ unbind: function( type, fn ) {
+ // Handle object literals
+ if ( typeof type === "object" && !type.preventDefault ) {
+ for ( var key in type ) {
+ this.unbind(key, type[key]);
+ }
+
+ } else {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ jQuery.event.remove( this[i], type, fn );
+ }
+ }
+
+ return this;
+ },
+
+ delegate: function( selector, types, data, fn ) {
+ return this.live( types, data, fn, selector );
+ },
+
+ undelegate: function( selector, types, fn ) {
+ if ( arguments.length === 0 ) {
+ return this.unbind( "live" );
+
+ } else {
+ return this.die( types, null, fn, selector );
+ }
+ },
+
+ trigger: function( type, data ) {
+ return this.each(function() {
+ jQuery.event.trigger( type, data, this );
+ });
+ },
+
+ triggerHandler: function( type, data ) {
+ if ( this[0] ) {
+ var event = jQuery.Event( type );
+ event.preventDefault();
+ event.stopPropagation();
+ jQuery.event.trigger( event, data, this[0] );
+ return event.result;
+ }
+ },
+
+ toggle: function( fn ) {
+ // Save reference to arguments for access in closure
+ var args = arguments, i = 1;
+
+ // link all the functions, so any of them can unbind this click handler
+ while ( i < args.length ) {
+ jQuery.proxy( fn, args[ i++ ] );
+ }
+
+ return this.click( jQuery.proxy( fn, function( event ) {
+ // Figure out which function to execute
+ var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
+ jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
+
+ // Make sure that clicks stop
+ event.preventDefault();
+
+ // and execute the function
+ return args[ lastToggle ].apply( this, arguments ) || false;
+ }));
+ },
+
+ hover: function( fnOver, fnOut ) {
+ return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+ }
+});
+
+var liveMap = {
+ focus: "focusin",
+ blur: "focusout",
+ mouseenter: "mouseover",
+ mouseleave: "mouseout"
+};
+
+jQuery.each(["live", "die"], function( i, name ) {
+ jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
+ var type, i = 0, match, namespaces, preType,
+ selector = origSelector || this.selector,
+ context = origSelector ? this : jQuery( this.context );
+
+ if ( typeof types === "object" && !types.preventDefault ) {
+ for ( var key in types ) {
+ context[ name ]( key, data, types[key], selector );
+ }
+
+ return this;
+ }
+
+ if ( jQuery.isFunction( data ) ) {
+ fn = data;
+ data = undefined;
+ }
+
+ types = (types || "").split(" ");
+
+ while ( (type = types[ i++ ]) != null ) {
+ match = rnamespaces.exec( type );
+ namespaces = "";
+
+ if ( match ) {
+ namespaces = match[0];
+ type = type.replace( rnamespaces, "" );
+ }
+
+ if ( type === "hover" ) {
+ types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
+ continue;
+ }
+
+ preType = type;
+
+ if ( type === "focus" || type === "blur" ) {
+ types.push( liveMap[ type ] + namespaces );
+ type = type + namespaces;
+
+ } else {
+ type = (liveMap[ type ] || type) + namespaces;
+ }
+
+ if ( name === "live" ) {
+ // bind live handler
+ for ( var j = 0, l = context.length; j < l; j++ ) {
+ jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
+ { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
+ }
+
+ } else {
+ // unbind live handler
+ context.unbind( "live." + liveConvert( type, selector ), fn );
+ }
+ }
+
+ return this;
+ };
+});
+
+function liveHandler( event ) {
+ var stop, maxLevel, elems = [], selectors = [],
+ related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
+ events = jQuery.data( this, this.nodeType ? "events" : "__events__" );
+
+ if ( typeof events === "function" ) {
+ events = events.events;
+ }
+
+ // Make sure we avoid non-left-click bubbling in Firefox (#3861)
+ if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
+ return;
+ }
+
+ if ( event.namespace ) {
+ namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
+ }
+
+ event.liveFired = this;
+
+ var live = events.live.slice(0);
+
+ for ( j = 0; j < live.length; j++ ) {
+ handleObj = live[j];
+
+ if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
+ selectors.push( handleObj.selector );
+
+ } else {
+ live.splice( j--, 1 );
+ }
+ }
+
+ match = jQuery( event.target ).closest( selectors, event.currentTarget );
+
+ for ( i = 0, l = match.length; i < l; i++ ) {
+ close = match[i];
+
+ for ( j = 0; j < live.length; j++ ) {
+ handleObj = live[j];
+
+ if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) ) {
+ elem = close.elem;
+ related = null;
+
+ // Those two events require additional checking
+ if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
+ event.type = handleObj.preType;
+ related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
+ }
+
+ if ( !related || related !== elem ) {
+ elems.push({ elem: elem, handleObj: handleObj, level: close.level });
+ }
+ }
+ }
+ }
+
+ for ( i = 0, l = elems.length; i < l; i++ ) {
+ match = elems[i];
+
+ if ( maxLevel && match.level > maxLevel ) {
+ break;
+ }
+
+ event.currentTarget = match.elem;
+ event.data = match.handleObj.data;
+ event.handleObj = match.handleObj;
+
+ ret = match.handleObj.origHandler.apply( match.elem, arguments );
+
+ if ( ret === false || event.isPropagationStopped() ) {
+ maxLevel = match.level;
+
+ if ( ret === false ) {
+ stop = false;
+ }
+ }
+ }
+
+ return stop;
+}
+
+function liveConvert( type, selector ) {
+ return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&");
+}
+
+jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
+ "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+ "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
+
+ // Handle event binding
+ jQuery.fn[ name ] = function( data, fn ) {
+ if ( fn == null ) {
+ fn = data;
+ data = null;
+ }
+
+ return arguments.length > 0 ?
+ this.bind( name, data, fn ) :
+ this.trigger( name );
+ };
+
+ if ( jQuery.attrFn ) {
+ jQuery.attrFn[ name ] = true;
+ }
+});
+
+// Prevent memory leaks in IE
+// Window isn't included so as not to unbind existing unload events
+// More info:
+// - http://isaacschlueter.com/2006/10/msie-memory-leaks/
+if ( window.attachEvent && !window.addEventListener ) {
+ jQuery(window).bind("unload", function() {
+ for ( var id in jQuery.cache ) {
+ if ( jQuery.cache[ id ].handle ) {
+ // Try/Catch is to handle iframes being unloaded, see #4280
+ try {
+ jQuery.event.remove( jQuery.cache[ id ].handle.elem );
+ } catch(e) {}
+ }
+ }
+ });
+}
+
+
+/*!
+ * Sizzle CSS Selector Engine - v1.0
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ done = 0,
+ toString = Object.prototype.toString,
+ hasDuplicate = false,
+ baseHasDuplicate = true;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+// Thus far that includes Google Chrome.
+[0, 0].sort(function(){
+ baseHasDuplicate = false;
+ return 0;
+});
+
+var Sizzle = function(selector, context, results, seed) {
+ results = results || [];
+ context = context || document;
+
+ var origContext = context;
+
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+ return [];
+ }
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ var parts = [], m, set, checkSet, extra, prune = true, contextXML = Sizzle.isXML(context),
+ soFar = selector, ret, cur, pop, i;
+
+ // Reset the position of the chunker regexp (start from head)
+ do {
+ chunker.exec("");
+ m = chunker.exec(soFar);
+
+ if ( m ) {
+ soFar = m[3];
+
+ parts.push( m[1] );
+
+ if ( m[2] ) {
+ extra = m[3];
+ break;
+ }
+ }
+ } while ( m );
+
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+ set = posProcess( parts[0] + parts[1], context );
+ } else {
+ set = Expr.relative[ parts[0] ] ?
+ [ context ] :
+ Sizzle( parts.shift(), context );
+
+ while ( parts.length ) {
+ selector = parts.shift();
+
+ if ( Expr.relative[ selector ] ) {
+ selector += parts.shift();
+ }
+
+ set = posProcess( selector, set );
+ }
+ }
+ } else {
+ // Take a shortcut and set the context if the root selector is an ID
+ // (but not if it'll be faster if the inner selector is an ID)
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+ ret = Sizzle.find( parts.shift(), context, contextXML );
+ context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
+ }
+
+ if ( context ) {
+ ret = seed ?
+ { expr: parts.pop(), set: makeArray(seed) } :
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+ set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
+
+ if ( parts.length > 0 ) {
+ checkSet = makeArray(set);
+ } else {
+ prune = false;
+ }
+
+ while ( parts.length ) {
+ cur = parts.pop();
+ pop = cur;
+
+ if ( !Expr.relative[ cur ] ) {
+ cur = "";
+ } else {
+ pop = parts.pop();
+ }
+
+ if ( pop == null ) {
+ pop = context;
+ }
+
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
+ }
+ } else {
+ checkSet = parts = [];
+ }
+ }
+
+ if ( !checkSet ) {
+ checkSet = set;
+ }
+
+ if ( !checkSet ) {
+ Sizzle.error( cur || selector );
+ }
+
+ if ( toString.call(checkSet) === "[object Array]" ) {
+ if ( !prune ) {
+ results.push.apply( results, checkSet );
+ } else if ( context && context.nodeType === 1 ) {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+ results.push( set[i] );
+ }
+ }
+ } else {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+ results.push( set[i] );
+ }
+ }
+ }
+ } else {
+ makeArray( checkSet, results );
+ }
+
+ if ( extra ) {
+ Sizzle( extra, origContext, results, seed );
+ Sizzle.uniqueSort( results );
+ }
+
+ return results;
+};
+
+Sizzle.uniqueSort = function(results){
+ if ( sortOrder ) {
+ hasDuplicate = baseHasDuplicate;
+ results.sort(sortOrder);
+
+ if ( hasDuplicate ) {
+ for ( var i = 1; i < results.length; i++ ) {
+ if ( results[i] === results[i-1] ) {
+ results.splice(i--, 1);
+ }
+ }
+ }
+ }
+
+ return results;
+};
+
+Sizzle.matches = function(expr, set){
+ return Sizzle(expr, null, null, set);
+};
+
+Sizzle.matchesSelector = function(node, expr){
+ return Sizzle(expr, null, null, [node]).length > 0;
+};
+
+Sizzle.find = function(expr, context, isXML){
+ var set;
+
+ if ( !expr ) {
+ return [];
+ }
+
+ for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+ var type = Expr.order[i], match;
+
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+ var left = match[1];
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
+ match[1] = (match[1] || "").replace(/\\/g, "");
+ set = Expr.find[ type ]( match, context, isXML );
+ if ( set != null ) {
+ expr = expr.replace( Expr.match[ type ], "" );
+ break;
+ }
+ }
+ }
+ }
+
+ if ( !set ) {
+ set = context.getElementsByTagName("*");
+ }
+
+ return {set: set, expr: expr};
+};
+
+Sizzle.filter = function(expr, set, inplace, not){
+ var old = expr, result = [], curLoop = set, match, anyFound,
+ isXMLFilter = set && set[0] && Sizzle.isXML(set[0]);
+
+ while ( expr && set.length ) {
+ for ( var type in Expr.filter ) {
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+ var filter = Expr.filter[ type ], found, item, left = match[1];
+ anyFound = false;
+
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) === "\\" ) {
+ continue;
+ }
+
+ if ( curLoop === result ) {
+ result = [];
+ }
+
+ if ( Expr.preFilter[ type ] ) {
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+ if ( !match ) {
+ anyFound = found = true;
+ } else if ( match === true ) {
+ continue;
+ }
+ }
+
+ if ( match ) {
+ for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+ if ( item ) {
+ found = filter( item, match, i, curLoop );
+ var pass = not ^ !!found;
+
+ if ( inplace && found != null ) {
+ if ( pass ) {
+ anyFound = true;
+ } else {
+ curLoop[i] = false;
+ }
+ } else if ( pass ) {
+ result.push( item );
+ anyFound = true;
+ }
+ }
+ }
+ }
+
+ if ( found !== undefined ) {
+ if ( !inplace ) {
+ curLoop = result;
+ }
+
+ expr = expr.replace( Expr.match[ type ], "" );
+
+ if ( !anyFound ) {
+ return [];
+ }
+
+ break;
+ }
+ }
+ }
+
+ // Improper expression
+ if ( expr === old ) {
+ if ( anyFound == null ) {
+ Sizzle.error( expr );
+ } else {
+ break;
+ }
+ }
+
+ old = expr;
+ }
+
+ return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+ throw "Syntax error, unrecognized expression: " + msg;
+};
+
+var Expr = Sizzle.selectors = {
+ order: [ "ID", "NAME", "TAG" ],
+ match: {
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+ CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+ },
+ leftMatch: {},
+ attrMap: {
+ "class": "className",
+ "for": "htmlFor"
+ },
+ attrHandle: {
+ href: function(elem){
+ return elem.getAttribute("href");
+ }
+ },
+ relative: {
+ "+": function(checkSet, part){
+ var isPartStr = typeof part === "string",
+ isTag = isPartStr && !/\W/.test(part),
+ isPartStrNotTag = isPartStr && !isTag;
+
+ if ( isTag ) {
+ part = part.toLowerCase();
+ }
+
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+ if ( (elem = checkSet[i]) ) {
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+ elem || false :
+ elem === part;
+ }
+ }
+
+ if ( isPartStrNotTag ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ },
+ ">": function(checkSet, part){
+ var isPartStr = typeof part === "string",
+ elem, i = 0, l = checkSet.length;
+
+ if ( isPartStr && !/\W/.test(part) ) {
+ part = part.toLowerCase();
+
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+ if ( elem ) {
+ var parent = elem.parentNode;
+ checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+ }
+ }
+ } else {
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+ if ( elem ) {
+ checkSet[i] = isPartStr ?
+ elem.parentNode :
+ elem.parentNode === part;
+ }
+ }
+
+ if ( isPartStr ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ }
+ },
+ "": function(checkSet, part, isXML){
+ var doneName = done++, checkFn = dirCheck, nodeCheck;
+
+ if ( typeof part === "string" && !/\W/.test(part) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
+ },
+ "~": function(checkSet, part, isXML){
+ var doneName = done++, checkFn = dirCheck, nodeCheck;
+
+ if ( typeof part === "string" && !/\W/.test(part) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
+ }
+ },
+ find: {
+ ID: function(match, context, isXML){
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ // Check parentNode to catch when Blackberry 4.6 returns
+ // nodes that are no longer in the document #6963
+ return m && m.parentNode ? [m] : [];
+ }
+ },
+ NAME: function(match, context){
+ if ( typeof context.getElementsByName !== "undefined" ) {
+ var ret = [], results = context.getElementsByName(match[1]);
+
+ for ( var i = 0, l = results.length; i < l; i++ ) {
+ if ( results[i].getAttribute("name") === match[1] ) {
+ ret.push( results[i] );
+ }
+ }
+
+ return ret.length === 0 ? null : ret;
+ }
+ },
+ TAG: function(match, context){
+ return context.getElementsByTagName(match[1]);
+ }
+ },
+ preFilter: {
+ CLASS: function(match, curLoop, inplace, result, not, isXML){
+ match = " " + match[1].replace(/\\/g, "") + " ";
+
+ if ( isXML ) {
+ return match;
+ }
+
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+ if ( elem ) {
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
+ if ( !inplace ) {
+ result.push( elem );
+ }
+ } else if ( inplace ) {
+ curLoop[i] = false;
+ }
+ }
+ }
+
+ return false;
+ },
+ ID: function(match){
+ return match[1].replace(/\\/g, "");
+ },
+ TAG: function(match, curLoop){
+ return match[1].toLowerCase();
+ },
+ CHILD: function(match){
+ if ( match[1] === "nth" ) {
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+ var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+ match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+ // calculate the numbers (first)n+(last) including if they are negative
+ match[2] = (test[1] + (test[2] || 1)) - 0;
+ match[3] = test[3] - 0;
+ }
+
+ // TODO: Move to normal caching system
+ match[0] = done++;
+
+ return match;
+ },
+ ATTR: function(match, curLoop, inplace, result, not, isXML){
+ var name = match[1].replace(/\\/g, "");
+
+ if ( !isXML && Expr.attrMap[name] ) {
+ match[1] = Expr.attrMap[name];
+ }
+
+ if ( match[2] === "~=" ) {
+ match[4] = " " + match[4] + " ";
+ }
+
+ return match;
+ },
+ PSEUDO: function(match, curLoop, inplace, result, not){
+ if ( match[1] === "not" ) {
+ // If we're dealing with a complex expression, or a simple one
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+ match[3] = Sizzle(match[3], null, null, curLoop);
+ } else {
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+ if ( !inplace ) {
+ result.push.apply( result, ret );
+ }
+ return false;
+ }
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+ return true;
+ }
+
+ return match;
+ },
+ POS: function(match){
+ match.unshift( true );
+ return match;
+ }
+ },
+ filters: {
+ enabled: function(elem){
+ return elem.disabled === false && elem.type !== "hidden";
+ },
+ disabled: function(elem){
+ return elem.disabled === true;
+ },
+ checked: function(elem){
+ return elem.checked === true;
+ },
+ selected: function(elem){
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ elem.parentNode.selectedIndex;
+ return elem.selected === true;
+ },
+ parent: function(elem){
+ return !!elem.firstChild;
+ },
+ empty: function(elem){
+ return !elem.firstChild;
+ },
+ has: function(elem, i, match){
+ return !!Sizzle( match[3], elem ).length;
+ },
+ header: function(elem){
+ return (/h\d/i).test( elem.nodeName );
+ },
+ text: function(elem){
+ return "text" === elem.type;
+ },
+ radio: function(elem){
+ return "radio" === elem.type;
+ },
+ checkbox: function(elem){
+ return "checkbox" === elem.type;
+ },
+ file: function(elem){
+ return "file" === elem.type;
+ },
+ password: function(elem){
+ return "password" === elem.type;
+ },
+ submit: function(elem){
+ return "submit" === elem.type;
+ },
+ image: function(elem){
+ return "image" === elem.type;
+ },
+ reset: function(elem){
+ return "reset" === elem.type;
+ },
+ button: function(elem){
+ return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
+ },
+ input: function(elem){
+ return (/input|select|textarea|button/i).test(elem.nodeName);
+ }
+ },
+ setFilters: {
+ first: function(elem, i){
+ return i === 0;
+ },
+ last: function(elem, i, match, array){
+ return i === array.length - 1;
+ },
+ even: function(elem, i){
+ return i % 2 === 0;
+ },
+ odd: function(elem, i){
+ return i % 2 === 1;
+ },
+ lt: function(elem, i, match){
+ return i < match[3] - 0;
+ },
+ gt: function(elem, i, match){
+ return i > match[3] - 0;
+ },
+ nth: function(elem, i, match){
+ return match[3] - 0 === i;
+ },
+ eq: function(elem, i, match){
+ return match[3] - 0 === i;
+ }
+ },
+ filter: {
+ PSEUDO: function(elem, match, i, array){
+ var name = match[1], filter = Expr.filters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ } else if ( name === "contains" ) {
+ return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+ } else if ( name === "not" ) {
+ var not = match[3];
+
+ for ( var j = 0, l = not.length; j < l; j++ ) {
+ if ( not[j] === elem ) {
+ return false;
+ }
+ }
+
+ return true;
+ } else {
+ Sizzle.error( "Syntax error, unrecognized expression: " + name );
+ }
+ },
+ CHILD: function(elem, match){
+ var type = match[1], node = elem;
+ switch (type) {
+ case 'only':
+ case 'first':
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+ if ( type === "first" ) {
+ return true;
+ }
+ node = elem;
+ case 'last':
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+ return true;
+ case 'nth':
+ var first = match[2], last = match[3];
+
+ if ( first === 1 && last === 0 ) {
+ return true;
+ }
+
+ var doneName = match[0],
+ parent = elem.parentNode;
+
+ if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+ var count = 0;
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
+ if ( node.nodeType === 1 ) {
+ node.nodeIndex = ++count;
+ }
+ }
+ parent.sizcache = doneName;
+ }
+
+ var diff = elem.nodeIndex - last;
+ if ( first === 0 ) {
+ return diff === 0;
+ } else {
+ return ( diff % first === 0 && diff / first >= 0 );
+ }
+ }
+ },
+ ID: function(elem, match){
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
+ },
+ TAG: function(elem, match){
+ return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+ },
+ CLASS: function(elem, match){
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")
+ .indexOf( match ) > -1;
+ },
+ ATTR: function(elem, match){
+ var name = match[1],
+ result = Expr.attrHandle[ name ] ?
+ Expr.attrHandle[ name ]( elem ) :
+ elem[ name ] != null ?
+ elem[ name ] :
+ elem.getAttribute( name ),
+ value = result + "",
+ type = match[2],
+ check = match[4];
+
+ return result == null ?
+ type === "!=" :
+ type === "=" ?
+ value === check :
+ type === "*=" ?
+ value.indexOf(check) >= 0 :
+ type === "~=" ?
+ (" " + value + " ").indexOf(check) >= 0 :
+ !check ?
+ value && result !== false :
+ type === "!=" ?
+ value !== check :
+ type === "^=" ?
+ value.indexOf(check) === 0 :
+ type === "$=" ?
+ value.substr(value.length - check.length) === check :
+ type === "|=" ?
+ value === check || value.substr(0, check.length + 1) === check + "-" :
+ false;
+ },
+ POS: function(elem, match, i, array){
+ var name = match[2], filter = Expr.setFilters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ }
+ }
+ }
+};
+
+var origPOS = Expr.match.POS,
+ fescape = function(all, num){
+ return "\\" + (num - 0 + 1);
+ };
+
+for ( var type in Expr.match ) {
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function(array, results) {
+ array = Array.prototype.slice.call( array, 0 );
+
+ if ( results ) {
+ results.push.apply( results, array );
+ return results;
+ }
+
+ return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch(e){
+ makeArray = function(array, results) {
+ var ret = results || [], i = 0;
+
+ if ( toString.call(array) === "[object Array]" ) {
+ Array.prototype.push.apply( ret, array );
+ } else {
+ if ( typeof array.length === "number" ) {
+ for ( var l = array.length; i < l; i++ ) {
+ ret.push( array[i] );
+ }
+ } else {
+ for ( ; array[i]; i++ ) {
+ ret.push( array[i] );
+ }
+ }
+ }
+
+ return ret;
+ };
+}
+
+var sortOrder, siblingCheck;
+
+if ( document.documentElement.compareDocumentPosition ) {
+ sortOrder = function( a, b ) {
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+ }
+
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+ return a.compareDocumentPosition ? -1 : 1;
+ }
+
+ return a.compareDocumentPosition(b) & 4 ? -1 : 1;
+ };
+} else {
+ sortOrder = function( a, b ) {
+ var ap = [], bp = [], aup = a.parentNode, bup = b.parentNode,
+ cur = aup, al, bl;
+
+ // The nodes are identical, we can exit early
+ if ( a === b ) {
+ hasDuplicate = true;
+ return 0;
+
+ // If the nodes are siblings (or identical) we can do a quick check
+ } else if ( aup === bup ) {
+ return siblingCheck( a, b );
+
+ // If no parents were found then the nodes are disconnected
+ } else if ( !aup ) {
+ return -1;
+
+ } else if ( !bup ) {
+ return 1;
+ }
+
+ // Otherwise they're somewhere else in the tree so we need
+ // to build up a full list of the parentNodes for comparison
+ while ( cur ) {
+ ap.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ cur = bup;
+
+ while ( cur ) {
+ bp.unshift( cur );
+ cur = cur.parentNode;
+ }
+
+ al = ap.length;
+ bl = bp.length;
+
+ // Start walking down the tree looking for a discrepancy
+ for ( var i = 0; i < al && i < bl; i++ ) {
+ if ( ap[i] !== bp[i] ) {
+ return siblingCheck( ap[i], bp[i] );
+ }
+ }
+
+ // We ended someplace up the tree so do a sibling check
+ return i === al ?
+ siblingCheck( a, bp[i], -1 ) :
+ siblingCheck( ap[i], b, 1 );
+ };
+
+ siblingCheck = function( a, b, ret ) {
+ if ( a === b ) {
+ return ret;
+ }
+
+ var cur = a.nextSibling;
+
+ while ( cur ) {
+ if ( cur === b ) {
+ return -1;
+ }
+
+ cur = cur.nextSibling;
+ }
+
+ return 1;
+ };
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+Sizzle.getText = function( elems ) {
+ var ret = "", elem;
+
+ for ( var i = 0; elems[i]; i++ ) {
+ elem = elems[i];
+
+ // Get the text from text nodes and CDATA nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+ ret += elem.nodeValue;
+
+ // Traverse everything else, except comment nodes
+ } else if ( elem.nodeType !== 8 ) {
+ ret += Sizzle.getText( elem.childNodes );
+ }
+ }
+
+ return ret;
+};
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+ // We're going to inject a fake input element with a specified name
+ var form = document.createElement("div"),
+ id = "script" + (new Date()).getTime();
+ form.innerHTML = "<a name='" + id + "'/>";
+
+ // Inject it into the root element, check its status, and remove it quickly
+ var root = document.documentElement;
+ root.insertBefore( form, root.firstChild );
+
+ // The workaround has to do additional checks after a getElementById
+ // Which slows things down for other browsers (hence the branching)
+ if ( document.getElementById( id ) ) {
+ Expr.find.ID = function(match, context, isXML){
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
+ }
+ };
+
+ Expr.filter.ID = function(elem, match){
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+ return elem.nodeType === 1 && node && node.nodeValue === match;
+ };
+ }
+
+ root.removeChild( form );
+ root = form = null; // release memory in IE
+})();
+
+(function(){
+ // Check to see if the browser returns only elements
+ // when doing getElementsByTagName("*")
+
+ // Create a fake element
+ var div = document.createElement("div");
+ div.appendChild( document.createComment("") );
+
+ // Make sure no comments are found
+ if ( div.getElementsByTagName("*").length > 0 ) {
+ Expr.find.TAG = function(match, context){
+ var results = context.getElementsByTagName(match[1]);
+
+ // Filter out possible comments
+ if ( match[1] === "*" ) {
+ var tmp = [];
+
+ for ( var i = 0; results[i]; i++ ) {
+ if ( results[i].nodeType === 1 ) {
+ tmp.push( results[i] );
+ }
+ }
+
+ results = tmp;
+ }
+
+ return results;
+ };
+ }
+
+ // Check to see if an attribute returns normalized href attributes
+ div.innerHTML = "<a href='#'></a>";
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+ div.firstChild.getAttribute("href") !== "#" ) {
+ Expr.attrHandle.href = function(elem){
+ return elem.getAttribute("href", 2);
+ };
+ }
+
+ div = null; // release memory in IE
+})();
+
+if ( document.querySelectorAll ) {
+ (function(){
+ var oldSizzle = Sizzle, div = document.createElement("div");
+ div.innerHTML = "<p class='TEST'></p>";
+
+ // Safari can't handle uppercase or unicode characters when
+ // in quirks mode.
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+ return;
+ }
+
+ Sizzle = function(query, context, extra, seed){
+ context = context || document;
+
+ // Only use querySelectorAll on non-XML documents
+ // (ID selectors don't work in non-HTML documents)
+ if ( !seed && !Sizzle.isXML(context) ) {
+ if ( context.nodeType === 9 ) {
+ try {
+ return makeArray( context.querySelectorAll(query), extra );
+ } catch(qsaError) {}
+
+ // qSA works strangely on Element-rooted queries
+ // We can work around this by specifying an extra ID on the root
+ // and working up from there (Thanks to Andrew Dupont for the technique)
+ // IE 8 doesn't work on object elements
+ } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+ var old = context.id, id = context.id = "__sizzle__";
+
+ try {
+ return makeArray( context.querySelectorAll( "#" + id + " " + query ), extra );
+
+ } catch(pseudoError) {
+ } finally {
+ if ( old ) {
+ context.id = old;
+
+ } else {
+ context.removeAttribute( "id" );
+ }
+ }
+ }
+ }
+
+ return oldSizzle(query, context, extra, seed);
+ };
+
+ for ( var prop in oldSizzle ) {
+ Sizzle[ prop ] = oldSizzle[ prop ];
+ }
+
+ div = null; // release memory in IE
+ })();
+}
+
+(function(){
+ var html = document.documentElement,
+ matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector,
+ pseudoWorks = false;
+
+ try {
+ // This should fail with an exception
+ // Gecko does not error, returns false instead
+ matches.call( document.documentElement, ":sizzle" );
+
+ } catch( pseudoError ) {
+ pseudoWorks = true;
+ }
+
+ if ( matches ) {
+ Sizzle.matchesSelector = function( node, expr ) {
+ try {
+ if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) ) {
+ return matches.call( node, expr );
+ }
+ } catch(e) {}
+
+ return Sizzle(expr, null, null, [node]).length > 0;
+ };
+ }
+})();
+
+(function(){
+ var div = document.createElement("div");
+
+ div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+ // Opera can't find a second classname (in 9.6)
+ // Also, make sure that getElementsByClassName actually exists
+ if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+ return;
+ }
+
+ // Safari caches class attributes, doesn't catch changes (in 3.2)
+ div.lastChild.className = "e";
+
+ if ( div.getElementsByClassName("e").length === 1 ) {
+ return;
+ }
+
+ Expr.order.splice(1, 0, "CLASS");
+ Expr.find.CLASS = function(match, context, isXML) {
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+ return context.getElementsByClassName(match[1]);
+ }
+ };
+
+ div = null; // release memory in IE
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ elem = elem[dir];
+ var match = false;
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 && !isXML ){
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+
+ if ( elem.nodeName.toLowerCase() === cur ) {
+ match = elem;
+ break;
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ elem = elem[dir];
+ var match = false;
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 ) {
+ if ( !isXML ) {
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+ if ( typeof cur !== "string" ) {
+ if ( elem === cur ) {
+ match = true;
+ break;
+ }
+
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+ match = elem;
+ break;
+ }
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+Sizzle.contains = document.documentElement.contains ? function(a, b){
+ return a !== b && (a.contains ? a.contains(b) : true);
+} : function(a, b){
+ return !!(a.compareDocumentPosition(b) & 16);
+};
+
+Sizzle.isXML = function(elem){
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function(selector, context){
+ var tmpSet = [], later = "", match,
+ root = context.nodeType ? [context] : context;
+
+ // Position selectors must be done after the filter
+ // And so must :not(positional) so we move all PSEUDOs to the end
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+ later += match[0];
+ selector = selector.replace( Expr.match.PSEUDO, "" );
+ }
+
+ selector = Expr.relative[selector] ? selector + "*" : selector;
+
+ for ( var i = 0, l = root.length; i < l; i++ ) {
+ Sizzle( selector, root[i], tmpSet );
+ }
+
+ return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.filters;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+})();
+
+
+var runtil = /Until$/,
+ rparentsprev = /^(?:parents|prevUntil|prevAll)/,
+ // Note: This RegExp should be improved, or likely pulled from Sizzle
+ rmultiselector = /,/,
+ isSimple = /^.[^:#\[\.,]*$/,
+ slice = Array.prototype.slice,
+ POS = jQuery.expr.match.POS;
+
+jQuery.fn.extend({
+ find: function( selector ) {
+ var ret = this.pushStack( "", "find", selector ), length = 0;
+
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ length = ret.length;
+ jQuery.find( selector, this[i], ret );
+
+ if ( i > 0 ) {
+ // Make sure that the results are unique
+ for ( var n = length; n < ret.length; n++ ) {
+ for ( var r = 0; r < length; r++ ) {
+ if ( ret[r] === ret[n] ) {
+ ret.splice(n--, 1);
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ has: function( target ) {
+ var targets = jQuery( target );
+ return this.filter(function() {
+ for ( var i = 0, l = targets.length; i < l; i++ ) {
+ if ( jQuery.contains( this, targets[i] ) ) {
+ return true;
+ }
+ }
+ });
+ },
+
+ not: function( selector ) {
+ return this.pushStack( winnow(this, selector, false), "not", selector);
+ },
+
+ filter: function( selector ) {
+ return this.pushStack( winnow(this, selector, true), "filter", selector );
+ },
+
+ is: function( selector ) {
+ return !!selector && jQuery.filter( selector, this ).length > 0;
+ },
+
+ closest: function( selectors, context ) {
+ var ret = [], i, l, cur = this[0];
+
+ if ( jQuery.isArray( selectors ) ) {
+ var match, matches = {}, selector, level = 1;
+
+ if ( cur && selectors.length ) {
+ for ( i = 0, l = selectors.length; i < l; i++ ) {
+ selector = selectors[i];
+
+ if ( !matches[selector] ) {
+ matches[selector] = jQuery.expr.match.POS.test( selector ) ?
+ jQuery( selector, context || this.context ) :
+ selector;
+ }
+ }
+
+ while ( cur && cur.ownerDocument && cur !== context ) {
+ for ( selector in matches ) {
+ match = matches[selector];
+
+ if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
+ ret.push({ selector: selector, elem: cur, level: level });
+ }
+ }
+
+ cur = cur.parentNode;
+ level++;
+ }
+ }
+
+ return ret;
+ }
+
+ var pos = POS.test( selectors ) ?
+ jQuery( selectors, context || this.context ) : null;
+
+ for ( i = 0, l = this.length; i < l; i++ ) {
+ cur = this[i];
+
+ while ( cur ) {
+ if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
+ ret.push( cur );
+ break;
+
+ } else {
+ cur = cur.parentNode;
+ if ( !cur || !cur.ownerDocument || cur === context ) {
+ break;
+ }
+ }
+ }
+ }
+
+ ret = ret.length > 1 ? jQuery.unique(ret) : ret;
+
+ return this.pushStack( ret, "closest", selectors );
+ },
+
+ // Determine the position of an element within
+ // the matched set of elements
+ index: function( elem ) {
+ if ( !elem || typeof elem === "string" ) {
+ return jQuery.inArray( this[0],
+ // If it receives a string, the selector is used
+ // If it receives nothing, the siblings are used
+ elem ? jQuery( elem ) : this.parent().children() );
+ }
+ // Locate the position of the desired element
+ return jQuery.inArray(
+ // If it receives a jQuery object, the first element is used
+ elem.jquery ? elem[0] : elem, this );
+ },
+
+ add: function( selector, context ) {
+ var set = typeof selector === "string" ?
+ jQuery( selector, context || this.context ) :
+ jQuery.makeArray( selector ),
+ all = jQuery.merge( this.get(), set );
+
+ return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
+ all :
+ jQuery.unique( all ) );
+ },
+
+ andSelf: function() {
+ return this.add( this.prevObject );
+ }
+});
+
+// A painfully simple check to see if an element is disconnected
+// from a document (should be improved, where feasible).
+function isDisconnected( node ) {
+ return !node || !node.parentNode || node.parentNode.nodeType === 11;
+}
+
+jQuery.each({
+ parent: function( elem ) {
+ var parent = elem.parentNode;
+ return parent && parent.nodeType !== 11 ? parent : null;
+ },
+ parents: function( elem ) {
+ return jQuery.dir( elem, "parentNode" );
+ },
+ parentsUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "parentNode", until );
+ },
+ next: function( elem ) {
+ return jQuery.nth( elem, 2, "nextSibling" );
+ },
+ prev: function( elem ) {
+ return jQuery.nth( elem, 2, "previousSibling" );
+ },
+ nextAll: function( elem ) {
+ return jQuery.dir( elem, "nextSibling" );
+ },
+ prevAll: function( elem ) {
+ return jQuery.dir( elem, "previousSibling" );
+ },
+ nextUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "nextSibling", until );
+ },
+ prevUntil: function( elem, i, until ) {
+ return jQuery.dir( elem, "previousSibling", until );
+ },
+ siblings: function( elem ) {
+ return jQuery.sibling( elem.parentNode.firstChild, elem );
+ },
+ children: function( elem ) {
+ return jQuery.sibling( elem.firstChild );
+ },
+ contents: function( elem ) {
+ return jQuery.nodeName( elem, "iframe" ) ?
+ elem.contentDocument || elem.contentWindow.document :
+ jQuery.makeArray( elem.childNodes );
+ }
+}, function( name, fn ) {
+ jQuery.fn[ name ] = function( until, selector ) {
+ var ret = jQuery.map( this, fn, until );
+
+ if ( !runtil.test( name ) ) {
+ selector = until;
+ }
+
+ if ( selector && typeof selector === "string" ) {
+ ret = jQuery.filter( selector, ret );
+ }
+
+ ret = this.length > 1 ? jQuery.unique( ret ) : ret;
+
+ if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
+ ret = ret.reverse();
+ }
+
+ return this.pushStack( ret, name, slice.call(arguments).join(",") );
+ };
+});
+
+jQuery.extend({
+ filter: function( expr, elems, not ) {
+ if ( not ) {
+ expr = ":not(" + expr + ")";
+ }
+
+ return elems.length === 1 ?
+ jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
+ jQuery.find.matches(expr, elems);
+ },
+
+ dir: function( elem, dir, until ) {
+ var matched = [], cur = elem[dir];
+ while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+ if ( cur.nodeType === 1 ) {
+ matched.push( cur );
+ }
+ cur = cur[dir];
+ }
+ return matched;
+ },
+
+ nth: function( cur, result, dir, elem ) {
+ result = result || 1;
+ var num = 0;
+
+ for ( ; cur; cur = cur[dir] ) {
+ if ( cur.nodeType === 1 && ++num === result ) {
+ break;
+ }
+ }
+
+ return cur;
+ },
+
+ sibling: function( n, elem ) {
+ var r = [];
+
+ for ( ; n; n = n.nextSibling ) {
+ if ( n.nodeType === 1 && n !== elem ) {
+ r.push( n );
+ }
+ }
+
+ return r;
+ }
+});
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, keep ) {
+ if ( jQuery.isFunction( qualifier ) ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ var retVal = !!qualifier.call( elem, i, elem );
+ return retVal === keep;
+ });
+
+ } else if ( qualifier.nodeType ) {
+ return jQuery.grep(elements, function( elem, i ) {
+ return (elem === qualifier) === keep;
+ });
+
+ } else if ( typeof qualifier === "string" ) {
+ var filtered = jQuery.grep(elements, function( elem ) {
+ return elem.nodeType === 1;
+ });
+
+ if ( isSimple.test( qualifier ) ) {
+ return jQuery.filter(qualifier, filtered, !keep);
+ } else {
+ qualifier = jQuery.filter( qualifier, filtered );
+ }
+ }
+
+ return jQuery.grep(elements, function( elem, i ) {
+ return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
+ });
+}
+
+
+
+
+var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
+ rleadingWhitespace = /^\s+/,
+ rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
+ rtagName = /<([\w:]+)/,
+ rtbody = /<tbody/i,
+ rhtml = /<|&#?\w+;/,
+ rnocache = /<(?:script|object|embed|option|style)/i,
+ rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, // checked="checked" or checked (html5)
+ raction = /\=([^="'>\s]+\/)>/g,
+ wrapMap = {
+ option: [ 1, "<select multiple='multiple'>", "</select>" ],
+ legend: [ 1, "<fieldset>", "</fieldset>" ],
+ thead: [ 1, "<table>", "</table>" ],
+ tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+ td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+ col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+ area: [ 1, "<map>", "</map>" ],
+ _default: [ 0, "", "" ]
+ };
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+// IE can't serialize <link> and <script> tags normally
+if ( !jQuery.support.htmlSerialize ) {
+ wrapMap._default = [ 1, "div<div>", "</div>" ];
+}
+
+jQuery.fn.extend({
+ text: function( text ) {
+ if ( jQuery.isFunction(text) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ self.text( text.call(this, i, self.text()) );
+ });
+ }
+
+ if ( typeof text !== "object" && text !== undefined ) {
+ return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
+ }
+
+ return jQuery.text( this );
+ },
+
+ wrapAll: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapAll( html.call(this, i) );
+ });
+ }
+
+ if ( this[0] ) {
+ // The elements to wrap the target around
+ var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+ if ( this[0].parentNode ) {
+ wrap.insertBefore( this[0] );
+ }
+
+ wrap.map(function() {
+ var elem = this;
+
+ while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+ elem = elem.firstChild;
+ }
+
+ return elem;
+ }).append(this);
+ }
+
+ return this;
+ },
+
+ wrapInner: function( html ) {
+ if ( jQuery.isFunction( html ) ) {
+ return this.each(function(i) {
+ jQuery(this).wrapInner( html.call(this, i) );
+ });
+ }
+
+ return this.each(function() {
+ var self = jQuery( this ), contents = self.contents();
+
+ if ( contents.length ) {
+ contents.wrapAll( html );
+
+ } else {
+ self.append( html );
+ }
+ });
+ },
+
+ wrap: function( html ) {
+ return this.each(function() {
+ jQuery( this ).wrapAll( html );
+ });
+ },
+
+ unwrap: function() {
+ return this.parent().each(function() {
+ if ( !jQuery.nodeName( this, "body" ) ) {
+ jQuery( this ).replaceWith( this.childNodes );
+ }
+ }).end();
+ },
+
+ append: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 ) {
+ this.appendChild( elem );
+ }
+ });
+ },
+
+ prepend: function() {
+ return this.domManip(arguments, true, function( elem ) {
+ if ( this.nodeType === 1 ) {
+ this.insertBefore( elem, this.firstChild );
+ }
+ });
+ },
+
+ before: function() {
+ if ( this[0] && this[0].parentNode ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this );
+ });
+ } else if ( arguments.length ) {
+ var set = jQuery(arguments[0]);
+ set.push.apply( set, this.toArray() );
+ return this.pushStack( set, "before", arguments );
+ }
+ },
+
+ after: function() {
+ if ( this[0] && this[0].parentNode ) {
+ return this.domManip(arguments, false, function( elem ) {
+ this.parentNode.insertBefore( elem, this.nextSibling );
+ });
+ } else if ( arguments.length ) {
+ var set = this.pushStack( this, "after", arguments );
+ set.push.apply( set, jQuery(arguments[0]).toArray() );
+ return set;
+ }
+ },
+
+ // keepData is for internal use only--do not document
+ remove: function( selector, keepData ) {
+ for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+ if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
+ if ( !keepData && elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ jQuery.cleanData( [ elem ] );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+ }
+ }
+
+ return this;
+ },
+
+ empty: function() {
+ for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( elem.nodeType === 1 ) {
+ jQuery.cleanData( elem.getElementsByTagName("*") );
+ }
+
+ // Remove any remaining nodes
+ while ( elem.firstChild ) {
+ elem.removeChild( elem.firstChild );
+ }
+ }
+
+ return this;
+ },
+
+ clone: function( events ) {
+ // Do the clone
+ var ret = this.map(function() {
+ if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
+ // IE copies events bound via attachEvent when
+ // using cloneNode. Calling detachEvent on the
+ // clone will also remove the events from the orignal
+ // In order to get around this, we use innerHTML.
+ // Unfortunately, this means some modifications to
+ // attributes in IE that are actually only stored
+ // as properties will not be copied (such as the
+ // the name attribute on an input).
+ var html = this.outerHTML, ownerDocument = this.ownerDocument;
+ if ( !html ) {
+ var div = ownerDocument.createElement("div");
+ div.appendChild( this.cloneNode(true) );
+ html = div.innerHTML;
+ }
+
+ return jQuery.clean([html.replace(rinlinejQuery, "")
+ // Handle the case in IE 8 where action=/test/> self-closes a tag
+ .replace(raction, '="$1">')
+ .replace(rleadingWhitespace, "")], ownerDocument)[0];
+ } else {
+ return this.cloneNode(true);
+ }
+ });
+
+ // Copy the events from the original to the clone
+ if ( events === true ) {
+ cloneCopyEvent( this, ret );
+ cloneCopyEvent( this.find("*"), ret.find("*") );
+ }
+
+ // Return the cloned set
+ return ret;
+ },
+
+ html: function( value ) {
+ if ( value === undefined ) {
+ return this[0] && this[0].nodeType === 1 ?
+ this[0].innerHTML.replace(rinlinejQuery, "") :
+ null;
+
+ // See if we can take a shortcut and just use innerHTML
+ } else if ( typeof value === "string" && !rnocache.test( value ) &&
+ (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
+ !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
+
+ value = value.replace(rxhtmlTag, "<$1></$2>");
+
+ try {
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ // Remove element nodes and prevent memory leaks
+ if ( this[i].nodeType === 1 ) {
+ jQuery.cleanData( this[i].getElementsByTagName("*") );
+ this[i].innerHTML = value;
+ }
+ }
+
+ // If using innerHTML throws an exception, use the fallback method
+ } catch(e) {
+ this.empty().append( value );
+ }
+
+ } else if ( jQuery.isFunction( value ) ) {
+ this.each(function(i){
+ var self = jQuery(this);
+ self.html( value.call(this, i, self.html()) );
+ });
+
+ } else {
+ this.empty().append( value );
+ }
+
+ return this;
+ },
+
+ replaceWith: function( value ) {
+ if ( this[0] && this[0].parentNode ) {
+ // Make sure that the elements are removed from the DOM before they are inserted
+ // this can help fix replacing a parent with child elements
+ if ( jQuery.isFunction( value ) ) {
+ return this.each(function(i) {
+ var self = jQuery(this), old = self.html();
+ self.replaceWith( value.call( this, i, old ) );
+ });
+ }
+
+ if ( typeof value !== "string" ) {
+ value = jQuery(value).detach();
+ }
+
+ return this.each(function() {
+ var next = this.nextSibling, parent = this.parentNode;
+
+ jQuery(this).remove();
+
+ if ( next ) {
+ jQuery(next).before( value );
+ } else {
+ jQuery(parent).append( value );
+ }
+ });
+ } else {
+ return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
+ }
+ },
+
+ detach: function( selector ) {
+ return this.remove( selector, true );
+ },
+
+ domManip: function( args, table, callback ) {
+ var results, first, value = args[0], scripts = [], fragment, parent;
+
+ // We can't cloneNode fragments that contain checked, in WebKit
+ if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
+ return this.each(function() {
+ jQuery(this).domManip( args, table, callback, true );
+ });
+ }
+
+ if ( jQuery.isFunction(value) ) {
+ return this.each(function(i) {
+ var self = jQuery(this);
+ args[0] = value.call(this, i, table ? self.html() : undefined);
+ self.domManip( args, table, callback );
+ });
+ }
+
+ if ( this[0] ) {
+ parent = value && value.parentNode;
+
+ // If we're in a fragment, just use that instead of building a new one
+ if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
+ results = { fragment: parent };
+
+ } else {
+ results = jQuery.buildFragment( args, this, scripts );
+ }
+
+ fragment = results.fragment;
+
+ if ( fragment.childNodes.length === 1 ) {
+ first = fragment = fragment.firstChild;
+ } else {
+ first = fragment.firstChild;
+ }
+
+ if ( first ) {
+ table = table && jQuery.nodeName( first, "tr" );
+
+ for ( var i = 0, l = this.length; i < l; i++ ) {
+ callback.call(
+ table ?
+ root(this[i], first) :
+ this[i],
+ i > 0 || results.cacheable || this.length > 1 ?
+ fragment.cloneNode(true) :
+ fragment
+ );
+ }
+ }
+
+ if ( scripts.length ) {
+ jQuery.each( scripts, evalScript );
+ }
+ }
+
+ return this;
+ }
+});
+
+function root( elem, cur ) {
+ return jQuery.nodeName(elem, "table") ?
+ (elem.getElementsByTagName("tbody")[0] ||
+ elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
+ elem;
+}
+
+function cloneCopyEvent(orig, ret) {
+ var i = 0;
+
+ ret.each(function() {
+ if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
+ return;
+ }
+
+ var oldData = jQuery.data( orig[i++] ), curData = jQuery.data( this, oldData ), events = oldData && oldData.events;
+
+ if ( events ) {
+ delete curData.handle;
+ curData.events = {};
+
+ for ( var type in events ) {
+ for ( var handler in events[ type ] ) {
+ jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
+ }
+ }
+ }
+ });
+}
+
+jQuery.buildFragment = function( args, nodes, scripts ) {
+ var fragment, cacheable, cacheresults,
+ doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
+
+ // Only cache "small" (1/2 KB) strings that are associated with the main document
+ // Cloning options loses the selected state, so don't cache them
+ // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
+ // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
+ if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
+ !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
+
+ cacheable = true;
+ cacheresults = jQuery.fragments[ args[0] ];
+ if ( cacheresults ) {
+ if ( cacheresults !== 1 ) {
+ fragment = cacheresults;
+ }
+ }
+ }
+
+ if ( !fragment ) {
+ fragment = doc.createDocumentFragment();
+ jQuery.clean( args, doc, fragment, scripts );
+ }
+
+ if ( cacheable ) {
+ jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
+ }
+
+ return { fragment: fragment, cacheable: cacheable };
+};
+
+jQuery.fragments = {};
+
+jQuery.each({
+ appendTo: "append",
+ prependTo: "prepend",
+ insertBefore: "before",
+ insertAfter: "after",
+ replaceAll: "replaceWith"
+}, function( name, original ) {
+ jQuery.fn[ name ] = function( selector ) {
+ var ret = [], insert = jQuery( selector ),
+ parent = this.length === 1 && this[0].parentNode;
+
+ if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
+ insert[ original ]( this[0] );
+ return this;
+
+ } else {
+ for ( var i = 0, l = insert.length; i < l; i++ ) {
+ var elems = (i > 0 ? this.clone(true) : this).get();
+ jQuery( insert[i] )[ original ]( elems );
+ ret = ret.concat( elems );
+ }
+
+ return this.pushStack( ret, name, insert.selector );
+ }
+ };
+});
+
+jQuery.extend({
+ clean: function( elems, context, fragment, scripts ) {
+ context = context || document;
+
+ // !context.createElement fails in IE with an error but returns typeof 'object'
+ if ( typeof context.createElement === "undefined" ) {
+ context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
+ }
+
+ var ret = [];
+
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ if ( typeof elem === "number" ) {
+ elem += "";
+ }
+
+ if ( !elem ) {
+ continue;
+ }
+
+ // Convert html string into DOM nodes
+ if ( typeof elem === "string" && !rhtml.test( elem ) ) {
+ elem = context.createTextNode( elem );
+
+ } else if ( typeof elem === "string" ) {
+ // Fix "XHTML"-style tags in all browsers
+ elem = elem.replace(rxhtmlTag, "<$1></$2>");
+
+ // Trim whitespace, otherwise indexOf won't work as expected
+ var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
+ wrap = wrapMap[ tag ] || wrapMap._default,
+ depth = wrap[0],
+ div = context.createElement("div");
+
+ // Go to html and back, then peel off extra wrappers
+ div.innerHTML = wrap[1] + elem + wrap[2];
+
+ // Move to the right depth
+ while ( depth-- ) {
+ div = div.lastChild;
+ }
+
+ // Remove IE's autoinserted <tbody> from table fragments
+ if ( !jQuery.support.tbody ) {
+
+ // String was a <table>, *may* have spurious <tbody>
+ var hasBody = rtbody.test(elem),
+ tbody = tag === "table" && !hasBody ?
+ div.firstChild && div.firstChild.childNodes :
+
+ // String was a bare <thead> or <tfoot>
+ wrap[1] === "<table>" && !hasBody ?
+ div.childNodes :
+ [];
+
+ for ( var j = tbody.length - 1; j >= 0 ; --j ) {
+ if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
+ tbody[ j ].parentNode.removeChild( tbody[ j ] );
+ }
+ }
+
+ }
+
+ // IE completely kills leading whitespace when innerHTML is used
+ if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+ div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
+ }
+
+ elem = div.childNodes;
+ }
+
+ if ( elem.nodeType ) {
+ ret.push( elem );
+ } else {
+ ret = jQuery.merge( ret, elem );
+ }
+ }
+
+ if ( fragment ) {
+ for ( i = 0; ret[i]; i++ ) {
+ if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
+ scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
+
+ } else {
+ if ( ret[i].nodeType === 1 ) {
+ ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
+ }
+ fragment.appendChild( ret[i] );
+ }
+ }
+ }
+
+ return ret;
+ },
+
+ cleanData: function( elems ) {
+ var data, id, cache = jQuery.cache,
+ special = jQuery.event.special,
+ deleteExpando = jQuery.support.deleteExpando;
+
+ for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
+ if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
+ continue;
+ }
+
+ id = elem[ jQuery.expando ];
+
+ if ( id ) {
+ data = cache[ id ];
+
+ if ( data && data.events ) {
+ for ( var type in data.events ) {
+ if ( special[ type ] ) {
+ jQuery.event.remove( elem, type );
+
+ } else {
+ jQuery.removeEvent( elem, type, data.handle );
+ }
+ }
+ }
+
+ if ( deleteExpando ) {
+ delete elem[ jQuery.expando ];
+
+ } else if ( elem.removeAttribute ) {
+ elem.removeAttribute( jQuery.expando );
+ }
+
+ delete cache[ id ];
+ }
+ }
+ }
+});
+
+function evalScript( i, elem ) {
+ if ( elem.src ) {
+ jQuery.ajax({
+ url: elem.src,
+ async: false,
+ dataType: "script"
+ });
+ } else {
+ jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
+ }
+
+ if ( elem.parentNode ) {
+ elem.parentNode.removeChild( elem );
+ }
+}
+
+
+
+
+var ralpha = /alpha\([^)]*\)/i,
+ ropacity = /opacity=([^)]*)/,
+ rdashAlpha = /-([a-z])/ig,
+ rupper = /([A-Z])/g,
+ rnumpx = /^-?\d+(?:px)?$/i,
+ rnum = /^-?\d/,
+
+ cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+ cssWidth = [ "Left", "Right" ],
+ cssHeight = [ "Top", "Bottom" ],
+ curCSS,
+
+ // cache check for defaultView.getComputedStyle
+ getComputedStyle = document.defaultView && document.defaultView.getComputedStyle,
+
+ fcamelCase = function( all, letter ) {
+ return letter.toUpperCase();
+ };
+
+jQuery.fn.css = function( name, value ) {
+ // Setting 'undefined' is a no-op
+ if ( arguments.length === 2 && value === undefined ) {
+ return this;
+ }
+
+ return jQuery.access( this, name, value, true, function( elem, name, value ) {
+ return value !== undefined ?
+ jQuery.style( elem, name, value ) :
+ jQuery.css( elem, name );
+ });
+};
+
+jQuery.extend({
+ // Add in style property hooks for overriding the default
+ // behavior of getting and setting a style property
+ cssHooks: {
+ opacity: {
+ get: function( elem, computed ) {
+ if ( computed ) {
+ // We should always get a number back from opacity
+ var ret = curCSS( elem, "opacity", "opacity" );
+ return ret === "" ? "1" : ret;
+
+ } else {
+ return elem.style.opacity;
+ }
+ }
+ }
+ },
+
+ // Exclude the following css properties to add px
+ cssNumber: {
+ "zIndex": true,
+ "fontWeight": true,
+ "opacity": true,
+ "zoom": true,
+ "lineHeight": true
+ },
+
+ // Add in properties whose names you wish to fix before
+ // setting or getting the value
+ cssProps: {
+ // normalize float css property
+ "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
+ },
+
+ // Get and set the style property on a DOM Node
+ style: function( elem, name, value, extra ) {
+ // Don't set styles on text and comment nodes
+ if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+ return;
+ }
+
+ // Make sure that we're working with the right name
+ var ret, origName = jQuery.camelCase( name ),
+ style = elem.style, hooks = jQuery.cssHooks[ origName ];
+
+ name = jQuery.cssProps[ origName ] || origName;
+
+ // Check if we're setting a value
+ if ( value !== undefined ) {
+ // Make sure that NaN and null values aren't set. See: #7116
+ if ( typeof value === "number" && isNaN( value ) || value == null ) {
+ return;
+ }
+
+ // If a number was passed in, add 'px' to the (except for certain CSS properties)
+ if ( typeof value === "number" && !jQuery.cssNumber[ origName ] ) {
+ value += "px";
+ }
+
+ // If a hook was provided, use that value, otherwise just set the specified value
+ if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
+ // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
+ // Fixes bug #5509
+ try {
+ style[ name ] = value;
+ } catch(e) {}
+ }
+
+ } else {
+ // If a hook was provided get the non-computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+ return ret;
+ }
+
+ // Otherwise just get the value from the style object
+ return style[ name ];
+ }
+ },
+
+ css: function( elem, name, extra ) {
+ // Make sure that we're working with the right name
+ var ret, origName = jQuery.camelCase( name ),
+ hooks = jQuery.cssHooks[ origName ];
+
+ name = jQuery.cssProps[ origName ] || origName;
+
+ // If a hook was provided get the computed value from there
+ if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
+ return ret;
+
+ // Otherwise, if a way to get the computed value exists, use that
+ } else if ( curCSS ) {
+ return curCSS( elem, name, origName );
+ }
+ },
+
+ // A method for quickly swapping in/out CSS properties to get correct calculations
+ swap: function( elem, options, callback ) {
+ var old = {};
+
+ // Remember the old values, and insert the new ones
+ for ( var name in options ) {
+ old[ name ] = elem.style[ name ];
+ elem.style[ name ] = options[ name ];
+ }
+
+ callback.call( elem );
+
+ // Revert the old values
+ for ( name in options ) {
+ elem.style[ name ] = old[ name ];
+ }
+ },
+
+ camelCase: function( string ) {
+ return string.replace( rdashAlpha, fcamelCase );
+ }
+});
+
+// DEPRECATED, Use jQuery.css() instead
+jQuery.curCSS = jQuery.css;
+
+jQuery.each(["height", "width"], function( i, name ) {
+ jQuery.cssHooks[ name ] = {
+ get: function( elem, computed, extra ) {
+ var val;
+
+ if ( computed ) {
+ if ( elem.offsetWidth !== 0 ) {
+ val = getWH( elem, name, extra );
+
+ } else {
+ jQuery.swap( elem, cssShow, function() {
+ val = getWH( elem, name, extra );
+ });
+ }
+
+ return val + "px";
+ }
+ },
+
+ set: function( elem, value ) {
+ if ( rnumpx.test( value ) ) {
+ // ignore negative width and height values #1599
+ value = parseFloat(value);
+
+ if ( value >= 0 ) {
+ return value + "px";
+ }
+
+ } else {
+ return value;
+ }
+ }
+ };
+});
+
+if ( !jQuery.support.opacity ) {
+ jQuery.cssHooks.opacity = {
+ get: function( elem, computed ) {
+ // IE uses filters for opacity
+ return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ?
+ (parseFloat(RegExp.$1) / 100) + "" :
+ computed ? "1" : "";
+ },
+
+ set: function( elem, value ) {
+ var style = elem.style;
+
+ // IE has trouble with opacity if it does not have layout
+ // Force it by setting the zoom level
+ style.zoom = 1;
+
+ // Set the alpha filter to set the opacity
+ var opacity = jQuery.isNaN(value) ?
+ "" :
+ "alpha(opacity=" + value * 100 + ")",
+ filter = style.filter || "";
+
+ style.filter = ralpha.test(filter) ?
+ filter.replace(ralpha, opacity) :
+ style.filter + ' ' + opacity;
+ }
+ };
+}
+
+if ( getComputedStyle ) {
+ curCSS = function( elem, newName, name ) {
+ var ret, defaultView, computedStyle;
+
+ name = name.replace( rupper, "-$1" ).toLowerCase();
+
+ if ( !(defaultView = elem.ownerDocument.defaultView) ) {
+ return undefined;
+ }
+
+ if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
+ ret = computedStyle.getPropertyValue( name );
+ if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
+ ret = jQuery.style( elem, name );
+ }
+ }
+
+ return ret;
+ };
+
+} else if ( document.documentElement.currentStyle ) {
+ curCSS = function( elem, name ) {
+ var left, rsLeft, ret = elem.currentStyle && elem.currentStyle[ name ], style = elem.style;
+
+ // From the awesome hack by Dean Edwards
+ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+ // If we're not dealing with a regular pixel number
+ // but a number that has a weird ending, we need to convert it to pixels
+ if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
+ // Remember the original values
+ left = style.left;
+ rsLeft = elem.runtimeStyle.left;
+
+ // Put in the new values to get a computed value out
+ elem.runtimeStyle.left = elem.currentStyle.left;
+ style.left = name === "fontSize" ? "1em" : (ret || 0);
+ ret = style.pixelLeft + "px";
+
+ // Revert the changed values
+ style.left = left;
+ elem.runtimeStyle.left = rsLeft;
+ }
+
+ return ret;
+ };
+}
+
+function getWH( elem, name, extra ) {
+ var which = name === "width" ? cssWidth : cssHeight,
+ val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
+
+ if ( extra === "border" ) {
+ return val;
+ }
+
+ jQuery.each( which, function() {
+ if ( !extra ) {
+ val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
+ }
+
+ if ( extra === "margin" ) {
+ val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
+
+ } else {
+ val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
+ }
+ });
+
+ return val;
+}
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.hidden = function( elem ) {
+ var width = elem.offsetWidth, height = elem.offsetHeight;
+
+ return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
+ };
+
+ jQuery.expr.filters.visible = function( elem ) {
+ return !jQuery.expr.filters.hidden( elem );
+ };
+}
+
+
+
+
+var jsc = jQuery.now(),
+ rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
+ rselectTextarea = /^(?:select|textarea)/i,
+ rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
+ rnoContent = /^(?:GET|HEAD|DELETE)$/,
+ rbracket = /\[\]$/,
+ jsre = /\=\?(&|$)/,
+ rquery = /\?/,
+ rts = /([?&])_=[^&]*/,
+ rurl = /^(\w+:)?\/\/([^\/?#]+)/,
+ r20 = /%20/g,
+ rhash = /#.*$/,
+
+ // Keep a copy of the old load method
+ _load = jQuery.fn.load;
+
+jQuery.fn.extend({
+ load: function( url, params, callback ) {
+ if ( typeof url !== "string" && _load ) {
+ return _load.apply( this, arguments );
+
+ // Don't do a request if no elements are being requested
+ } else if ( !this.length ) {
+ return this;
+ }
+
+ var off = url.indexOf(" ");
+ if ( off >= 0 ) {
+ var selector = url.slice(off, url.length);
+ url = url.slice(0, off);
+ }
+
+ // Default to a GET request
+ var type = "GET";
+
+ // If the second parameter was provided
+ if ( params ) {
+ // If it's a function
+ if ( jQuery.isFunction( params ) ) {
+ // We assume that it's the callback
+ callback = params;
+ params = null;
+
+ // Otherwise, build a param string
+ } else if ( typeof params === "object" ) {
+ params = jQuery.param( params, jQuery.ajaxSettings.traditional );
+ type = "POST";
+ }
+ }
+
+ var self = this;
+
+ // Request the remote document
+ jQuery.ajax({
+ url: url,
+ type: type,
+ dataType: "html",
+ data: params,
+ complete: function( res, status ) {
+ // If successful, inject the HTML into all the matched elements
+ if ( status === "success" || status === "notmodified" ) {
+ // See if a selector was specified
+ self.html( selector ?
+ // Create a dummy div to hold the results
+ jQuery("<div>")
+ // inject the contents of the document in, removing the scripts
+ // to avoid any 'Permission Denied' errors in IE
+ .append(res.responseText.replace(rscript, ""))
+
+ // Locate the specified elements
+ .find(selector) :
+
+ // If not, just inject the full result
+ res.responseText );
+ }
+
+ if ( callback ) {
+ self.each( callback, [res.responseText, status, res] );
+ }
+ }
+ });
+
+ return this;
+ },
+
+ serialize: function() {
+ return jQuery.param(this.serializeArray());
+ },
+
+ serializeArray: function() {
+ return this.map(function() {
+ return this.elements ? jQuery.makeArray(this.elements) : this;
+ })
+ .filter(function() {
+ return this.name && !this.disabled &&
+ (this.checked || rselectTextarea.test(this.nodeName) ||
+ rinput.test(this.type));
+ })
+ .map(function( i, elem ) {
+ var val = jQuery(this).val();
+
+ return val == null ?
+ null :
+ jQuery.isArray(val) ?
+ jQuery.map( val, function( val, i ) {
+ return { name: elem.name, value: val };
+ }) :
+ { name: elem.name, value: val };
+ }).get();
+ }
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {
+ jQuery.fn[o] = function( f ) {
+ return this.bind(o, f);
+ };
+});
+
+jQuery.extend({
+ get: function( url, data, callback, type ) {
+ // shift arguments if data argument was omited
+ if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = null;
+ }
+
+ return jQuery.ajax({
+ type: "GET",
+ url: url,
+ data: data,
+ success: callback,
+ dataType: type
+ });
+ },
+
+ getScript: function( url, callback ) {
+ return jQuery.get(url, null, callback, "script");
+ },
+
+ getJSON: function( url, data, callback ) {
+ return jQuery.get(url, data, callback, "json");
+ },
+
+ post: function( url, data, callback, type ) {
+ // shift arguments if data argument was omited
+ if ( jQuery.isFunction( data ) ) {
+ type = type || callback;
+ callback = data;
+ data = {};
+ }
+
+ return jQuery.ajax({
+ type: "POST",
+ url: url,
+ data: data,
+ success: callback,
+ dataType: type
+ });
+ },
+
+ ajaxSetup: function( settings ) {
+ jQuery.extend( jQuery.ajaxSettings, settings );
+ },
+
+ ajaxSettings: {
+ url: location.href,
+ global: true,
+ type: "GET",
+ contentType: "application/x-www-form-urlencoded",
+ processData: true,
+ async: true,
+ /*
+ timeout: 0,
+ data: null,
+ username: null,
+ password: null,
+ traditional: false,
+ */
+ // This function can be overriden by calling jQuery.ajaxSetup
+ xhr: function() {
+ return new window.XMLHttpRequest();
+ },
+ accepts: {
+ xml: "application/xml, text/xml",
+ html: "text/html",
+ script: "text/javascript, application/javascript",
+ json: "application/json, text/javascript",
+ text: "text/plain",
+ _default: "*/*"
+ }
+ },
+
+ ajax: function( origSettings ) {
+ var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
+ jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
+
+ s.url = s.url.replace( rhash, "" );
+
+ // Use original (not extended) context object if it was provided
+ s.context = origSettings && origSettings.context != null ? origSettings.context : s;
+
+ // convert data if not already a string
+ if ( s.data && s.processData && typeof s.data !== "string" ) {
+ s.data = jQuery.param( s.data, s.traditional );
+ }
+
+ // Handle JSONP Parameter Callbacks
+ if ( s.dataType === "jsonp" ) {
+ if ( type === "GET" ) {
+ if ( !jsre.test( s.url ) ) {
+ s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";
+ }
+ } else if ( !s.data || !jsre.test(s.data) ) {
+ s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
+ }
+ s.dataType = "json";
+ }
+
+ // Build temporary JSONP function
+ if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {
+ jsonp = s.jsonpCallback || ("jsonp" + jsc++);
+
+ // Replace the =? sequence both in the query string and the data
+ if ( s.data ) {
+ s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
+ }
+
+ s.url = s.url.replace(jsre, "=" + jsonp + "$1");
+
+ // We need to make sure
+ // that a JSONP style response is executed properly
+ s.dataType = "script";
+
+ // Handle JSONP-style loading
+ var customJsonp = window[ jsonp ];
+
+ window[ jsonp ] = function( tmp ) {
+ data = tmp;
+ jQuery.handleSuccess( s, xhr, status, data );
+ jQuery.handleComplete( s, xhr, status, data );
+
+ if ( jQuery.isFunction( customJsonp ) ) {
+ customJsonp( tmp );
+
+ } else {
+ // Garbage collect
+ window[ jsonp ] = undefined;
+
+ try {
+ delete window[ jsonp ];
+ } catch( jsonpError ) {}
+ }
+
+ if ( head ) {
+ head.removeChild( script );
+ }
+ };
+ }
+
+ if ( s.dataType === "script" && s.cache === null ) {
+ s.cache = false;
+ }
+
+ if ( s.cache === false && type === "GET" ) {
+ var ts = jQuery.now();
+
+ // try replacing _= if it is there
+ var ret = s.url.replace(rts, "$1_=" + ts);
+
+ // if nothing was replaced, add timestamp to the end
+ s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
+ }
+
+ // If data is available, append data to url for get requests
+ if ( s.data && type === "GET" ) {
+ s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
+ }
+
+ // Watch for a new set of requests
+ if ( s.global && jQuery.active++ === 0 ) {
+ jQuery.event.trigger( "ajaxStart" );
+ }
+
+ // Matches an absolute URL, and saves the domain
+ var parts = rurl.exec( s.url ),
+ remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
+
+ // If we're requesting a remote document
+ // and trying to load JSON or Script with a GET
+ if ( s.dataType === "script" && type === "GET" && remote ) {
+ var head = document.getElementsByTagName("head")[0] || document.documentElement;
+ var script = document.createElement("script");
+ if ( s.scriptCharset ) {
+ script.charset = s.scriptCharset;
+ }
+ script.src = s.url;
+
+ // Handle Script loading
+ if ( !jsonp ) {
+ var done = false;
+
+ // Attach handlers for all browsers
+ script.onload = script.onreadystatechange = function() {
+ if ( !done && (!this.readyState ||
+ this.readyState === "loaded" || this.readyState === "complete") ) {
+ done = true;
+ jQuery.handleSuccess( s, xhr, status, data );
+ jQuery.handleComplete( s, xhr, status, data );
+
+ // Handle memory leak in IE
+ script.onload = script.onreadystatechange = null;
+ if ( head && script.parentNode ) {
+ head.removeChild( script );
+ }
+ }
+ };
+ }
+
+ // Use insertBefore instead of appendChild to circumvent an IE6 bug.
+ // This arises when a base node is used (#2709 and #4378).
+ head.insertBefore( script, head.firstChild );
+
+ // We handle everything using the script element injection
+ return undefined;
+ }
+
+ var requestDone = false;
+
+ // Create the request object
+ var xhr = s.xhr();
+
+ if ( !xhr ) {
+ return;
+ }
+
+ // Open the socket
+ // Passing null username, generates a login popup on Opera (#2865)
+ if ( s.username ) {
+ xhr.open(type, s.url, s.async, s.username, s.password);
+ } else {
+ xhr.open(type, s.url, s.async);
+ }
+
+ // Need an extra try/catch for cross domain requests in Firefox 3
+ try {
+ // Set content-type if data specified and content-body is valid for this type
+ if ( (s.data != null && !noContent) || (origSettings && origSettings.contentType) ) {
+ xhr.setRequestHeader("Content-Type", s.contentType);
+ }
+
+ // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+ if ( s.ifModified ) {
+ if ( jQuery.lastModified[s.url] ) {
+ xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
+ }
+
+ if ( jQuery.etag[s.url] ) {
+ xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
+ }
+ }
+
+ // Set header so the called script knows that it's an XMLHttpRequest
+ // Only send the header if it's not a remote XHR
+ if ( !remote ) {
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+ }
+
+ // Set the Accepts header for the server, depending on the dataType
+ xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
+ s.accepts[ s.dataType ] + ", */*; q=0.01" :
+ s.accepts._default );
+ } catch( headerError ) {}
+
+ // Allow custom headers/mimetypes and early abort
+ if ( s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false ) {
+ // Handle the global AJAX counter
+ if ( s.global && jQuery.active-- === 1 ) {
+ jQuery.event.trigger( "ajaxStop" );
+ }
+
+ // close opended socket
+ xhr.abort();
+ return false;
+ }
+
+ if ( s.global ) {
+ jQuery.triggerGlobal( s, "ajaxSend", [xhr, s] );
+ }
+
+ // Wait for a response to come back
+ var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {
+ // The request was aborted
+ if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {
+ // Opera doesn't call onreadystatechange before this point
+ // so we simulate the call
+ if ( !requestDone ) {
+ jQuery.handleComplete( s, xhr, status, data );
+ }
+
+ requestDone = true;
+ if ( xhr ) {
+ xhr.onreadystatechange = jQuery.noop;
+ }
+
+ // The transfer is complete and the data is available, or the request timed out
+ } else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
+ requestDone = true;
+ xhr.onreadystatechange = jQuery.noop;
+
+ status = isTimeout === "timeout" ?
+ "timeout" :
+ !jQuery.httpSuccess( xhr ) ?
+ "error" :
+ s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?
+ "notmodified" :
+ "success";
+
+ var errMsg;
+
+ if ( status === "success" ) {
+ // Watch for, and catch, XML document parse errors
+ try {
+ // process the data (runs the xml through httpData regardless of callback)
+ data = jQuery.httpData( xhr, s.dataType, s );
+ } catch( parserError ) {
+ status = "parsererror";
+ errMsg = parserError;
+ }
+ }
+
+ // Make sure that the request was successful or notmodified
+ if ( status === "success" || status === "notmodified" ) {
+ // JSONP handles its own success callback
+ if ( !jsonp ) {
+ jQuery.handleSuccess( s, xhr, status, data );
+ }
+ } else {
+ jQuery.handleError( s, xhr, status, errMsg );
+ }
+
+ // Fire the complete handlers
+ if ( !jsonp ) {
+ jQuery.handleComplete( s, xhr, status, data );
+ }
+
+ if ( isTimeout === "timeout" ) {
+ xhr.abort();
+ }
+
+ // Stop memory leaks
+ if ( s.async ) {
+ xhr = null;
+ }
+ }
+ };
+
+ // Override the abort handler, if we can (IE 6 doesn't allow it, but that's OK)
+ // Opera doesn't fire onreadystatechange at all on abort
+ try {
+ var oldAbort = xhr.abort;
+ xhr.abort = function() {
+ // xhr.abort in IE7 is not a native JS function
+ // and does not have a call property
+ if ( xhr && oldAbort.call ) {
+ oldAbort.call( xhr );
+ }
+
+ onreadystatechange( "abort" );
+ };
+ } catch( abortError ) {}
+
+ // Timeout checker
+ if ( s.async && s.timeout > 0 ) {
+ setTimeout(function() {
+ // Check to see if the request is still happening
+ if ( xhr && !requestDone ) {
+ onreadystatechange( "timeout" );
+ }
+ }, s.timeout);
+ }
+
+ // Send the data
+ try {
+ xhr.send( noContent || s.data == null ? null : s.data );
+
+ } catch( sendError ) {
+ jQuery.handleError( s, xhr, null, sendError );
+
+ // Fire the complete handlers
+ jQuery.handleComplete( s, xhr, status, data );
+ }
+
+ // firefox 1.5 doesn't fire statechange for sync requests
+ if ( !s.async ) {
+ onreadystatechange();
+ }
+
+ // return XMLHttpRequest to allow aborting the request etc.
+ return xhr;
+ },
+
+ // Serialize an array of form elements or a set of
+ // key/values into a query string
+ param: function( a, traditional ) {
+ var s = [], add = function( key, value ) {
+ // If value is a function, invoke it and return its value
+ value = jQuery.isFunction(value) ? value() : value;
+ s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
+ };
+
+ // Set traditional to true for jQuery <= 1.3.2 behavior.
+ if ( traditional === undefined ) {
+ traditional = jQuery.ajaxSettings.traditional;
+ }
+
+ // If an array was passed in, assume that it is an array of form elements.
+ if ( jQuery.isArray(a) || a.jquery ) {
+ // Serialize the form elements
+ jQuery.each( a, function() {
+ add( this.name, this.value );
+ });
+
+ } else {
+ // If traditional, encode the "old" way (the way 1.3.2 or older
+ // did it), otherwise encode params recursively.
+ for ( var prefix in a ) {
+ buildParams( prefix, a[prefix], traditional, add );
+ }
+ }
+
+ // Return the resulting serialization
+ return s.join("&").replace(r20, "+");
+ }
+});
+
+function buildParams( prefix, obj, traditional, add ) {
+ if ( jQuery.isArray(obj) && obj.length ) {
+ // Serialize array item.
+ jQuery.each( obj, function( i, v ) {
+ if ( traditional || rbracket.test( prefix ) ) {
+ // Treat each array item as a scalar.
+ add( prefix, v );
+
+ } else {
+ // If array item is non-scalar (array or object), encode its
+ // numeric index to resolve deserialization ambiguity issues.
+ // Note that rack (as of 1.0.0) can't currently deserialize
+ // nested arrays properly, and attempting to do so may cause
+ // a server error. Possible fixes are to modify rack's
+ // deserialization algorithm or to provide an option or flag
+ // to force array serialization to be shallow.
+ buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
+ }
+ });
+
+ } else if ( !traditional && obj != null && typeof obj === "object" ) {
+ if ( jQuery.isEmptyObject( obj ) ) {
+ add( prefix, "" );
+
+ // Serialize object item.
+ } else {
+ jQuery.each( obj, function( k, v ) {
+ buildParams( prefix + "[" + k + "]", v, traditional, add );
+ });
+ }
+
+ } else {
+ // Serialize scalar item.
+ add( prefix, obj );
+ }
+}
+
+// This is still on the jQuery object... for now
+// Want to move this to jQuery.ajax some day
+jQuery.extend({
+
+ // Counter for holding the number of active queries
+ active: 0,
+
+ // Last-Modified header cache for next request
+ lastModified: {},
+ etag: {},
+
+ handleError: function( s, xhr, status, e ) {
+ // If a local callback was specified, fire it
+ if ( s.error ) {
+ s.error.call( s.context, xhr, status, e );
+ }
+
+ // Fire the global callback
+ if ( s.global ) {
+ jQuery.triggerGlobal( s, "ajaxError", [xhr, s, e] );
+ }
+ },
+
+ handleSuccess: function( s, xhr, status, data ) {
+ // If a local callback was specified, fire it and pass it the data
+ if ( s.success ) {
+ s.success.call( s.context, data, status, xhr );
+ }
+
+ // Fire the global callback
+ if ( s.global ) {
+ jQuery.triggerGlobal( s, "ajaxSuccess", [xhr, s] );
+ }
+ },
+
+ handleComplete: function( s, xhr, status ) {
+ // Process result
+ if ( s.complete ) {
+ s.complete.call( s.context, xhr, status );
+ }
+
+ // The request was completed
+ if ( s.global ) {
+ jQuery.triggerGlobal( s, "ajaxComplete", [xhr, s] );
+ }
+
+ // Handle the global AJAX counter
+ if ( s.global && jQuery.active-- === 1 ) {
+ jQuery.event.trigger( "ajaxStop" );
+ }
+ },
+
+ triggerGlobal: function( s, type, args ) {
+ (s.context && s.context.url == null ? jQuery(s.context) : jQuery.event).trigger(type, args);
+ },
+
+ // Determines if an XMLHttpRequest was successful or not
+ httpSuccess: function( xhr ) {
+ try {
+ // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
+ return !xhr.status && location.protocol === "file:" ||
+ xhr.status >= 200 && xhr.status < 300 ||
+ xhr.status === 304 || xhr.status === 1223;
+ } catch(e) {}
+
+ return false;
+ },
+
+ // Determines if an XMLHttpRequest returns NotModified
+ httpNotModified: function( xhr, url ) {
+ var lastModified = xhr.getResponseHeader("Last-Modified"),
+ etag = xhr.getResponseHeader("Etag");
+
+ if ( lastModified ) {
+ jQuery.lastModified[url] = lastModified;
+ }
+
+ if ( etag ) {
+ jQuery.etag[url] = etag;
+ }
+
+ return xhr.status === 304;
+ },
+
+ httpData: function( xhr, type, s ) {
+ var ct = xhr.getResponseHeader("content-type") || "",
+ xml = type === "xml" || !type && ct.indexOf("xml") >= 0,
+ data = xml ? xhr.responseXML : xhr.responseText;
+
+ if ( xml && data.documentElement.nodeName === "parsererror" ) {
+ jQuery.error( "parsererror" );
+ }
+
+ // Allow a pre-filtering function to sanitize the response
+ // s is checked to keep backwards compatibility
+ if ( s && s.dataFilter ) {
+ data = s.dataFilter( data, type );
+ }
+
+ // The filter can actually parse the response
+ if ( typeof data === "string" ) {
+ // Get the JavaScript object, if JSON is used.
+ if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
+ data = jQuery.parseJSON( data );
+
+ // If the type is "script", eval it in global context
+ } else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {
+ jQuery.globalEval( data );
+ }
+ }
+
+ return data;
+ }
+
+});
+
+/*
+ * Create the request object; Microsoft failed to properly
+ * implement the XMLHttpRequest in IE7 (can't request local files),
+ * so we use the ActiveXObject when it is available
+ * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
+ * we need a fallback.
+ */
+if ( window.ActiveXObject ) {
+ jQuery.ajaxSettings.xhr = function() {
+ if ( window.location.protocol !== "file:" ) {
+ try {
+ return new window.XMLHttpRequest();
+ } catch(xhrError) {}
+ }
+
+ try {
+ return new window.ActiveXObject("Microsoft.XMLHTTP");
+ } catch(activeError) {}
+ };
+}
+
+// Does this browser support XHR requests?
+jQuery.support.ajax = !!jQuery.ajaxSettings.xhr();
+
+
+
+
+var elemdisplay = {},
+ rfxtypes = /^(?:toggle|show|hide)$/,
+ rfxnum = /^([+\-]=)?([\d+.\-]+)(.*)$/,
+ timerId,
+ fxAttrs = [
+ // height animations
+ [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
+ // width animations
+ [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
+ // opacity animations
+ [ "opacity" ]
+ ];
+
+jQuery.fn.extend({
+ show: function( speed, easing, callback ) {
+ if ( speed || speed === 0 ) {
+ return this.animate( genFx("show", 3), speed, easing, callback);
+ } else {
+ for ( var i = 0, j = this.length; i < j; i++ ) {
+ // Reset the inline display of this element to learn if it is
+ // being hidden by cascaded rules or not
+ if ( !jQuery.data(this[i], "olddisplay") && this[i].style.display === "none" ) {
+ this[i].style.display = "";
+ }
+
+ // Set elements which have been overridden with display: none
+ // in a stylesheet to whatever the default browser style is
+ // for such an element
+ if ( this[i].style.display === "" && jQuery.css( this[i], "display" ) === "none" ) {
+ jQuery.data(this[i], "olddisplay", defaultDisplay(this[i].nodeName));
+ }
+ }
+
+ // Set the display of most of the elements in a second loop
+ // to avoid the constant reflow
+ for ( i = 0; i < j; i++ ) {
+ this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
+ }
+
+ return this;
+ }
+ },
+
+ hide: function( speed, easing, callback ) {
+ if ( speed || speed === 0 ) {
+ return this.animate( genFx("hide", 3), speed, easing, callback);
+
+ } else {
+ for ( var i = 0, j = this.length; i < j; i++ ) {
+ var display = jQuery.css( this[i], "display" );
+
+ if ( display !== "none" ) {
+ jQuery.data( this[i], "olddisplay", display );
+ }
+ }
+
+ // Set the display of the elements in a second loop
+ // to avoid the constant reflow
+ for ( i = 0; i < j; i++ ) {
+ this[i].style.display = "none";
+ }
+
+ return this;
+ }
+ },
+
+ // Save the old toggle function
+ _toggle: jQuery.fn.toggle,
+
+ toggle: function( fn, fn2, callback ) {
+ var bool = typeof fn === "boolean";
+
+ if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
+ this._toggle.apply( this, arguments );
+
+ } else if ( fn == null || bool ) {
+ this.each(function() {
+ var state = bool ? fn : jQuery(this).is(":hidden");
+ jQuery(this)[ state ? "show" : "hide" ]();
+ });
+
+ } else {
+ this.animate(genFx("toggle", 3), fn, fn2, callback);
+ }
+
+ return this;
+ },
+
+ fadeTo: function( speed, to, easing, callback ) {
+ return this.filter(":hidden").css("opacity", 0).show().end()
+ .animate({opacity: to}, speed, easing, callback);
+ },
+
+ animate: function( prop, speed, easing, callback ) {
+ var optall = jQuery.speed(speed, easing, callback);
+
+ if ( jQuery.isEmptyObject( prop ) ) {
+ return this.each( optall.complete );
+ }
+
+ return this[ optall.queue === false ? "each" : "queue" ](function() {
+ // XXX ‘this’ does not always have a nodeName when running the
+ // test suite
+
+ var opt = jQuery.extend({}, optall), p,
+ isElement = this.nodeType === 1,
+ hidden = isElement && jQuery(this).is(":hidden"),
+ self = this;
+
+ for ( p in prop ) {
+ var name = jQuery.camelCase( p );
+
+ if ( p !== name ) {
+ prop[ name ] = prop[ p ];
+ delete prop[ p ];
+ p = name;
+ }
+
+ if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
+ return opt.complete.call(this);
+ }
+
+ if ( isElement && ( p === "height" || p === "width" ) ) {
+ // Make sure that nothing sneaks out
+ // Record all 3 overflow attributes because IE does not
+ // change the overflow attribute when overflowX and
+ // overflowY are set to the same value
+ opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
+
+ // Set display property to inline-block for height/width
+ // animations on inline elements that are having width/height
+ // animated
+ if ( jQuery.css( this, "display" ) === "inline" &&
+ jQuery.css( this, "float" ) === "none" ) {
+ if ( !jQuery.support.inlineBlockNeedsLayout ) {
+ this.style.display = "inline-block";
+
+ } else {
+ var display = defaultDisplay(this.nodeName);
+
+ // inline-level elements accept inline-block;
+ // block-level elements need to be inline with layout
+ if ( display === "inline" ) {
+ this.style.display = "inline-block";
+
+ } else {
+ this.style.display = "inline";
+ this.style.zoom = 1;
+ }
+ }
+ }
+ }
+
+ if ( jQuery.isArray( prop[p] ) ) {
+ // Create (if needed) and add to specialEasing
+ (opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];
+ prop[p] = prop[p][0];
+ }
+ }
+
+ if ( opt.overflow != null ) {
+ this.style.overflow = "hidden";
+ }
+
+ opt.curAnim = jQuery.extend({}, prop);
+
+ jQuery.each( prop, function( name, val ) {
+ var e = new jQuery.fx( self, opt, name );
+
+ if ( rfxtypes.test(val) ) {
+ e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );
+
+ } else {
+ var parts = rfxnum.exec(val),
+ start = e.cur(true) || 0;
+
+ if ( parts ) {
+ var end = parseFloat( parts[2] ),
+ unit = parts[3] || "px";
+
+ // We need to compute starting value
+ if ( unit !== "px" ) {
+ jQuery.style( self, name, (end || 1) + unit);
+ start = ((end || 1) / e.cur(true)) * start;
+ jQuery.style( self, name, start + unit);
+ }
+
+ // If a +=/-= token was provided, we're doing a relative animation
+ if ( parts[1] ) {
+ end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
+ }
+
+ e.custom( start, end, unit );
+
+ } else {
+ e.custom( start, val, "" );
+ }
+ }
+ });
+
+ // For JS strict compliance
+ return true;
+ });
+ },
+
+ stop: function( clearQueue, gotoEnd ) {
+ var timers = jQuery.timers;
+
+ if ( clearQueue ) {
+ this.queue([]);
+ }
+
+ this.each(function() {
+ // go in reverse order so anything added to the queue during the loop is ignored
+ for ( var i = timers.length - 1; i >= 0; i-- ) {
+ if ( timers[i].elem === this ) {
+ if (gotoEnd) {
+ // force the next step to be the last
+ timers[i](true);
+ }
+
+ timers.splice(i, 1);
+ }
+ }
+ });
+
+ // start the next in the queue if the last step wasn't forced
+ if ( !gotoEnd ) {
+ this.dequeue();
+ }
+
+ return this;
+ }
+
+});
+
+function genFx( type, num ) {
+ var obj = {};
+
+ jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
+ obj[ this ] = type;
+ });
+
+ return obj;
+}
+
+// Generate shortcuts for custom animations
+jQuery.each({
+ slideDown: genFx("show", 1),
+ slideUp: genFx("hide", 1),
+ slideToggle: genFx("toggle", 1),
+ fadeIn: { opacity: "show" },
+ fadeOut: { opacity: "hide" }
+}, function( name, props ) {
+ jQuery.fn[ name ] = function( speed, easing, callback ) {
+ return this.animate( props, speed, easing, callback );
+ };
+});
+
+jQuery.extend({
+ speed: function( speed, easing, fn ) {
+ var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
+ complete: fn || !fn && easing ||
+ jQuery.isFunction( speed ) && speed,
+ duration: speed,
+ easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
+ };
+
+ opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+ opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
+
+ // Queueing
+ opt.old = opt.complete;
+ opt.complete = function() {
+ if ( opt.queue !== false ) {
+ jQuery(this).dequeue();
+ }
+ if ( jQuery.isFunction( opt.old ) ) {
+ opt.old.call( this );
+ }
+ };
+
+ return opt;
+ },
+
+ easing: {
+ linear: function( p, n, firstNum, diff ) {
+ return firstNum + diff * p;
+ },
+ swing: function( p, n, firstNum, diff ) {
+ return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
+ }
+ },
+
+ timers: [],
+
+ fx: function( elem, options, prop ) {
+ this.options = options;
+ this.elem = elem;
+ this.prop = prop;
+
+ if ( !options.orig ) {
+ options.orig = {};
+ }
+ }
+
+});
+
+jQuery.fx.prototype = {
+ // Simple function for setting a style value
+ update: function() {
+ if ( this.options.step ) {
+ this.options.step.call( this.elem, this.now, this );
+ }
+
+ (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
+ },
+
+ // Get the current size
+ cur: function() {
+ if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
+ return this.elem[ this.prop ];
+ }
+
+ var r = parseFloat( jQuery.css( this.elem, this.prop ) );
+ return r && r > -10000 ? r : 0;
+ },
+
+ // Start an animation from one number to another
+ custom: function( from, to, unit ) {
+ this.startTime = jQuery.now();
+ this.start = from;
+ this.end = to;
+ this.unit = unit || this.unit || "px";
+ this.now = this.start;
+ this.pos = this.state = 0;
+
+ var self = this, fx = jQuery.fx;
+ function t( gotoEnd ) {
+ return self.step(gotoEnd);
+ }
+
+ t.elem = this.elem;
+
+ if ( t() && jQuery.timers.push(t) && !timerId ) {
+ timerId = setInterval(fx.tick, fx.interval);
+ }
+ },
+
+ // Simple 'show' function
+ show: function() {
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+ this.options.show = true;
+
+ // Begin the animation
+ // Make sure that we start at a small width/height to avoid any
+ // flash of content
+ this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
+
+ // Start by showing the element
+ jQuery( this.elem ).show();
+ },
+
+ // Simple 'hide' function
+ hide: function() {
+ // Remember where we started, so that we can go back to it later
+ this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
+ this.options.hide = true;
+
+ // Begin the animation
+ this.custom(this.cur(), 0);
+ },
+
+ // Each step of an animation
+ step: function( gotoEnd ) {
+ var t = jQuery.now(), done = true;
+
+ if ( gotoEnd || t >= this.options.duration + this.startTime ) {
+ this.now = this.end;
+ this.pos = this.state = 1;
+ this.update();
+
+ this.options.curAnim[ this.prop ] = true;
+
+ for ( var i in this.options.curAnim ) {
+ if ( this.options.curAnim[i] !== true ) {
+ done = false;
+ }
+ }
+
+ if ( done ) {
+ // Reset the overflow
+ if ( this.options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
+ var elem = this.elem, options = this.options;
+ jQuery.each( [ "", "X", "Y" ], function (index, value) {
+ elem.style[ "overflow" + value ] = options.overflow[index];
+ } );
+ }
+
+ // Hide the element if the "hide" operation was done
+ if ( this.options.hide ) {
+ jQuery(this.elem).hide();
+ }
+
+ // Reset the properties, if the item has been hidden or shown
+ if ( this.options.hide || this.options.show ) {
+ for ( var p in this.options.curAnim ) {
+ jQuery.style( this.elem, p, this.options.orig[p] );
+ }
+ }
+
+ // Execute the complete function
+ this.options.complete.call( this.elem );
+ }
+
+ return false;
+
+ } else {
+ var n = t - this.startTime;
+ this.state = n / this.options.duration;
+
+ // Perform the easing function, defaults to swing
+ var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];
+ var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");
+ this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);
+ this.now = this.start + ((this.end - this.start) * this.pos);
+
+ // Perform the next step of the animation
+ this.update();
+ }
+
+ return true;
+ }
+};
+
+jQuery.extend( jQuery.fx, {
+ tick: function() {
+ var timers = jQuery.timers;
+
+ for ( var i = 0; i < timers.length; i++ ) {
+ if ( !timers[i]() ) {
+ timers.splice(i--, 1);
+ }
+ }
+
+ if ( !timers.length ) {
+ jQuery.fx.stop();
+ }
+ },
+
+ interval: 13,
+
+ stop: function() {
+ clearInterval( timerId );
+ timerId = null;
+ },
+
+ speeds: {
+ slow: 600,
+ fast: 200,
+ // Default speed
+ _default: 400
+ },
+
+ step: {
+ opacity: function( fx ) {
+ jQuery.style( fx.elem, "opacity", fx.now );
+ },
+
+ _default: function( fx ) {
+ if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
+ fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
+ } else {
+ fx.elem[ fx.prop ] = fx.now;
+ }
+ }
+ }
+});
+
+if ( jQuery.expr && jQuery.expr.filters ) {
+ jQuery.expr.filters.animated = function( elem ) {
+ return jQuery.grep(jQuery.timers, function( fn ) {
+ return elem === fn.elem;
+ }).length;
+ };
+}
+
+function defaultDisplay( nodeName ) {
+ if ( !elemdisplay[ nodeName ] ) {
+ var elem = jQuery("<" + nodeName + ">").appendTo("body"),
+ display = elem.css("display");
+
+ elem.remove();
+
+ if ( display === "none" || display === "" ) {
+ display = "block";
+ }
+
+ elemdisplay[ nodeName ] = display;
+ }
+
+ return elemdisplay[ nodeName ];
+}
+
+
+
+
+var rtable = /^t(?:able|d|h)$/i,
+ rroot = /^(?:body|html)$/i;
+
+if ( "getBoundingClientRect" in document.documentElement ) {
+ jQuery.fn.offset = function( options ) {
+ var elem = this[0], box;
+
+ if ( options ) {
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ if ( !elem || !elem.ownerDocument ) {
+ return null;
+ }
+
+ if ( elem === elem.ownerDocument.body ) {
+ return jQuery.offset.bodyOffset( elem );
+ }
+
+ try {
+ box = elem.getBoundingClientRect();
+ } catch(e) {}
+
+ var doc = elem.ownerDocument,
+ docElem = doc.documentElement;
+
+ // Make sure we're not dealing with a disconnected DOM node
+ if ( !box || !jQuery.contains( docElem, elem ) ) {
+ return box || { top: 0, left: 0 };
+ }
+
+ var body = doc.body,
+ win = getWindow(doc),
+ clientTop = docElem.clientTop || body.clientTop || 0,
+ clientLeft = docElem.clientLeft || body.clientLeft || 0,
+ scrollTop = (win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop ),
+ scrollLeft = (win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft),
+ top = box.top + scrollTop - clientTop,
+ left = box.left + scrollLeft - clientLeft;
+
+ return { top: top, left: left };
+ };
+
+} else {
+ jQuery.fn.offset = function( options ) {
+ var elem = this[0];
+
+ if ( options ) {
+ return this.each(function( i ) {
+ jQuery.offset.setOffset( this, options, i );
+ });
+ }
+
+ if ( !elem || !elem.ownerDocument ) {
+ return null;
+ }
+
+ if ( elem === elem.ownerDocument.body ) {
+ return jQuery.offset.bodyOffset( elem );
+ }
+
+ jQuery.offset.initialize();
+
+ var offsetParent = elem.offsetParent, prevOffsetParent = elem,
+ doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
+ body = doc.body, defaultView = doc.defaultView,
+ prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
+ top = elem.offsetTop, left = elem.offsetLeft;
+
+ while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
+ if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+ break;
+ }
+
+ computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
+ top -= elem.scrollTop;
+ left -= elem.scrollLeft;
+
+ if ( elem === offsetParent ) {
+ top += elem.offsetTop;
+ left += elem.offsetLeft;
+
+ if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
+ top += parseFloat( computedStyle.borderTopWidth ) || 0;
+ left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+ }
+
+ prevOffsetParent = offsetParent;
+ offsetParent = elem.offsetParent;
+ }
+
+ if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
+ top += parseFloat( computedStyle.borderTopWidth ) || 0;
+ left += parseFloat( computedStyle.borderLeftWidth ) || 0;
+ }
+
+ prevComputedStyle = computedStyle;
+ }
+
+ if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
+ top += body.offsetTop;
+ left += body.offsetLeft;
+ }
+
+ if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
+ top += Math.max( docElem.scrollTop, body.scrollTop );
+ left += Math.max( docElem.scrollLeft, body.scrollLeft );
+ }
+
+ return { top: top, left: left };
+ };
+}
+
+jQuery.offset = {
+ initialize: function() {
+ var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
+ html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+
+ jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
+
+ container.innerHTML = html;
+ body.insertBefore( container, body.firstChild );
+ innerDiv = container.firstChild;
+ checkDiv = innerDiv.firstChild;
+ td = innerDiv.nextSibling.firstChild.firstChild;
+
+ this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
+ this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
+
+ checkDiv.style.position = "fixed";
+ checkDiv.style.top = "20px";
+
+ // safari subtracts parent border width here which is 5px
+ this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
+ checkDiv.style.position = checkDiv.style.top = "";
+
+ innerDiv.style.overflow = "hidden";
+ innerDiv.style.position = "relative";
+
+ this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
+
+ this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
+
+ body.removeChild( container );
+ body = container = innerDiv = checkDiv = table = td = null;
+ jQuery.offset.initialize = jQuery.noop;
+ },
+
+ bodyOffset: function( body ) {
+ var top = body.offsetTop, left = body.offsetLeft;
+
+ jQuery.offset.initialize();
+
+ if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
+ top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
+ left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
+ }
+
+ return { top: top, left: left };
+ },
+
+ setOffset: function( elem, options, i ) {
+ var position = jQuery.css( elem, "position" );
+
+ // set position first, in-case top/left are set even on static elem
+ if ( position === "static" ) {
+ elem.style.position = "relative";
+ }
+
+ var curElem = jQuery( elem ),
+ curOffset = curElem.offset(),
+ curCSSTop = jQuery.css( elem, "top" ),
+ curCSSLeft = jQuery.css( elem, "left" ),
+ calculatePosition = (position === "absolute" && jQuery.inArray('auto', [curCSSTop, curCSSLeft]) > -1),
+ props = {}, curPosition = {}, curTop, curLeft;
+
+ // need to be able to calculate position if either top or left is auto and position is absolute
+ if ( calculatePosition ) {
+ curPosition = curElem.position();
+ }
+
+ curTop = calculatePosition ? curPosition.top : parseInt( curCSSTop, 10 ) || 0;
+ curLeft = calculatePosition ? curPosition.left : parseInt( curCSSLeft, 10 ) || 0;
+
+ if ( jQuery.isFunction( options ) ) {
+ options = options.call( elem, i, curOffset );
+ }
+
+ if (options.top != null) {
+ props.top = (options.top - curOffset.top) + curTop;
+ }
+ if (options.left != null) {
+ props.left = (options.left - curOffset.left) + curLeft;
+ }
+
+ if ( "using" in options ) {
+ options.using.call( elem, props );
+ } else {
+ curElem.css( props );
+ }
+ }
+};
+
+
+jQuery.fn.extend({
+ position: function() {
+ if ( !this[0] ) {
+ return null;
+ }
+
+ var elem = this[0],
+
+ // Get *real* offsetParent
+ offsetParent = this.offsetParent(),
+
+ // Get correct offsets
+ offset = this.offset(),
+ parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
+
+ // Subtract element margins
+ // note: when an element has margin: auto the offsetLeft and marginLeft
+ // are the same in Safari causing offset.left to incorrectly be 0
+ offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
+ offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
+
+ // Add offsetParent borders
+ parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
+ parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
+
+ // Subtract the two offsets
+ return {
+ top: offset.top - parentOffset.top,
+ left: offset.left - parentOffset.left
+ };
+ },
+
+ offsetParent: function() {
+ return this.map(function() {
+ var offsetParent = this.offsetParent || document.body;
+ while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
+ offsetParent = offsetParent.offsetParent;
+ }
+ return offsetParent;
+ });
+ }
+});
+
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( ["Left", "Top"], function( i, name ) {
+ var method = "scroll" + name;
+
+ jQuery.fn[ method ] = function(val) {
+ var elem = this[0], win;
+
+ if ( !elem ) {
+ return null;
+ }
+
+ if ( val !== undefined ) {
+ // Set the scroll offset
+ return this.each(function() {
+ win = getWindow( this );
+
+ if ( win ) {
+ win.scrollTo(
+ !i ? val : jQuery(win).scrollLeft(),
+ i ? val : jQuery(win).scrollTop()
+ );
+
+ } else {
+ this[ method ] = val;
+ }
+ });
+ } else {
+ win = getWindow( elem );
+
+ // Return the scroll offset
+ return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
+ jQuery.support.boxModel && win.document.documentElement[ method ] ||
+ win.document.body[ method ] :
+ elem[ method ];
+ }
+ };
+});
+
+function getWindow( elem ) {
+ return jQuery.isWindow( elem ) ?
+ elem :
+ elem.nodeType === 9 ?
+ elem.defaultView || elem.parentWindow :
+ false;
+}
+
+
+
+
+// Create innerHeight, innerWidth, outerHeight and outerWidth methods
+jQuery.each([ "Height", "Width" ], function( i, name ) {
+
+ var type = name.toLowerCase();
+
+ // innerHeight and innerWidth
+ jQuery.fn["inner" + name] = function() {
+ return this[0] ?
+ parseFloat( jQuery.css( this[0], type, "padding" ) ) :
+ null;
+ };
+
+ // outerHeight and outerWidth
+ jQuery.fn["outer" + name] = function( margin ) {
+ return this[0] ?
+ parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
+ null;
+ };
+
+ jQuery.fn[ type ] = function( size ) {
+ // Get window width or height
+ var elem = this[0];
+ if ( !elem ) {
+ return size == null ? null : this;
+ }
+
+ if ( jQuery.isFunction( size ) ) {
+ return this.each(function( i ) {
+ var self = jQuery( this );
+ self[ type ]( size.call( this, i, self[ type ]() ) );
+ });
+ }
+
+ return jQuery.isWindow( elem ) ?
+ // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
+ elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
+ elem.document.body[ "client" + name ] :
+
+ // Get document width or height
+ (elem.nodeType === 9) ? // is it a document
+ // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
+ Math.max(
+ elem.documentElement["client" + name],
+ elem.body["scroll" + name], elem.documentElement["scroll" + name],
+ elem.body["offset" + name], elem.documentElement["offset" + name]
+ ) :
+
+ // Get or set width or height on the element
+ size === undefined ?
+ // Get width or height on the element
+ parseFloat( jQuery.css( elem, type ) ) :
+
+ // Set the width or height on the element (default to pixels if value is unitless)
+ this.css( type, typeof size === "string" ? size : size + "px" );
+ };
+
+});
+
+
+})(window); \ No newline at end of file
diff --git a/mod/pages/vendors/jquery-treeview/todo b/mod/pages/vendors/jquery-treeview/todo
new file mode 100644
index 000000000..896cff718
--- /dev/null
+++ b/mod/pages/vendors/jquery-treeview/todo
@@ -0,0 +1,8 @@
+1.5
+---
+
+* add classes and rules for root items
+* lazy-loading: render the complete tree, but only apply hitzones and hiding of children to the first level on load
+* async treeview
+ * support animations
+ * support persist options \ No newline at end of file
diff --git a/mod/pages/views/default/annotation/page.php b/mod/pages/views/default/annotation/page.php
new file mode 100644
index 000000000..a621b9281
--- /dev/null
+++ b/mod/pages/views/default/annotation/page.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Revision view for history page
+ *
+ * @package ElggPages
+ */
+
+$annotation = $vars['annotation'];
+$page = get_entity($annotation->entity_guid);
+
+$icon = elgg_view("pages/icon", array(
+ 'annotation' => $annotation,
+ 'size' => 'small',
+));
+
+$owner_guid = $annotation->owner_guid;
+$owner = get_entity($owner_guid);
+if (!$owner) {
+
+}
+$owner_link = elgg_view('output/url', array(
+ 'href' => $owner->getURL(),
+ 'text' => $owner->name,
+ 'is_trusted' => true,
+));
+
+$date = elgg_view_friendly_time($annotation->time_created);
+
+$title_link = elgg_view('output/url', array(
+ 'href' => $annotation->getURL(),
+ 'text' => $page->title,
+ 'is_trusted' => true,
+));
+
+$subtitle = elgg_echo('pages:revision:subtitle', array($date, $owner_link));
+
+$body = <<< HTML
+<h3>$title_link</h3>
+<p class="elgg-subtext">$subtitle</p>
+HTML;
+
+echo elgg_view_image_block($icon, $body); \ No newline at end of file
diff --git a/mod/pages/views/default/forms/pages/edit.php b/mod/pages/views/default/forms/pages/edit.php
new file mode 100644
index 000000000..e14ff19ec
--- /dev/null
+++ b/mod/pages/views/default/forms/pages/edit.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Page edit form body
+ *
+ * @package ElggPages
+ */
+
+$variables = elgg_get_config('pages');
+$user = elgg_get_logged_in_user_entity();
+$entity = elgg_extract('entity', $vars);
+$can_change_access = true;
+if ($user && $entity) {
+ $can_change_access = ($user->isAdmin() || $user->getGUID() == $entity->owner_guid);
+}
+
+foreach ($variables as $name => $type) {
+ // don't show read / write access inputs for non-owners or admin when editing
+ if (($type == 'access' || $type == 'write_access') && !$can_change_access) {
+ continue;
+ }
+
+ // don't show parent picker input for top or new pages.
+ if ($name == 'parent_guid' && (!$vars['parent_guid'] || !$vars['guid'])) {
+ continue;
+ }
+
+ if ($type == 'parent') {
+ $input_view = "pages/input/$type";
+ } else {
+ $input_view = "input/$type";
+ }
+
+?>
+<div>
+ <label><?php echo elgg_echo("pages:$name") ?></label>
+ <?php
+ if ($type != 'longtext') {
+ echo '<br />';
+ }
+
+ echo elgg_view($input_view, array(
+ 'name' => $name,
+ 'value' => $vars[$name],
+ 'entity' => ($name == 'parent_guid') ? $vars['entity'] : null,
+ ));
+ ?>
+</div>
+<?php
+}
+
+$cats = elgg_view('input/categories', $vars);
+if (!empty($cats)) {
+ echo $cats;
+}
+
+
+echo '<div class="elgg-foot">';
+if ($vars['guid']) {
+ echo elgg_view('input/hidden', array(
+ 'name' => 'page_guid',
+ 'value' => $vars['guid'],
+ ));
+}
+echo elgg_view('input/hidden', array(
+ 'name' => 'container_guid',
+ 'value' => $vars['container_guid'],
+));
+if (!$vars['guid']) {
+ echo elgg_view('input/hidden', array(
+ 'name' => 'parent_guid',
+ 'value' => $vars['parent_guid'],
+ ));
+}
+
+echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+
+echo '</div>';
diff --git a/mod/pages/views/default/input/write_access.php b/mod/pages/views/default/input/write_access.php
new file mode 100644
index 000000000..69277ca20
--- /dev/null
+++ b/mod/pages/views/default/input/write_access.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Write access
+ *
+ * Removes the public option found in input/access
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['options_values']
+ * @uses $vars['name'] The name of the input field
+ * @uses $vars['entity'] Optional. The entity for this access control (uses write_access_id)
+ */
+
+$options = get_write_access_array();
+unset($options[ACCESS_PUBLIC]);
+
+$defaults = array(
+ 'class' => 'elgg-input-access',
+ 'disabled' => FALSE,
+ 'value' => get_default_access(),
+ 'options_values' => $options,
+);
+
+if (isset($vars['entity'])) {
+ $defaults['value'] = $vars['entity']->write_access_id;
+ unset($vars['entity']);
+}
+
+$vars = array_merge($defaults, $vars);
+
+if ($vars['value'] == ACCESS_DEFAULT) {
+ $vars['value'] = get_default_access();
+}
+$vars['value'] = ($vars['value'] == ACCESS_PUBLIC) ? ACCESS_LOGGED_IN : $vars['value'];
+
+echo elgg_view('input/dropdown', $vars);
diff --git a/mod/pages/views/default/object/page.php b/mod/pages/views/default/object/page.php
new file mode 100644
index 000000000..a5e56415d
--- /dev/null
+++ b/mod/pages/views/default/object/page.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Page view
+ *
+ * @package ElggPages
+ */
+
+echo elgg_view('object/page_top', $vars);
diff --git a/mod/pages/views/default/object/page_top.php b/mod/pages/views/default/object/page_top.php
new file mode 100644
index 000000000..945a22eed
--- /dev/null
+++ b/mod/pages/views/default/object/page_top.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * View for page object
+ *
+ * @package ElggPages
+ *
+ * @uses $vars['entity'] The page object
+ * @uses $vars['full_view'] Whether to display the full view
+ * @uses $vars['revision'] This parameter not supported by elgg_view_entity()
+ */
+
+
+$full = elgg_extract('full_view', $vars, FALSE);
+$page = elgg_extract('entity', $vars, FALSE);
+$revision = elgg_extract('revision', $vars, FALSE);
+
+if (!$page) {
+ return TRUE;
+}
+
+// pages used to use Public for write access
+if ($page->write_access_id == ACCESS_PUBLIC) {
+ // this works because this metadata is public
+ $page->write_access_id = ACCESS_LOGGED_IN;
+}
+
+
+if ($revision) {
+ $annotation = $revision;
+} else {
+ $annotation = $page->getAnnotations('page', 1, 0, 'desc');
+ if ($annotation) {
+ $annotation = $annotation[0];
+ }
+}
+
+$page_icon = elgg_view('pages/icon', array('annotation' => $annotation, 'size' => 'small'));
+
+$editor = get_entity($annotation->owner_guid);
+$editor_link = elgg_view('output/url', array(
+ 'href' => "pages/owner/$editor->username",
+ 'text' => $editor->name,
+ 'is_trusted' => true,
+));
+
+$date = elgg_view_friendly_time($annotation->time_created);
+$editor_text = elgg_echo('pages:strapline', array($date, $editor_link));
+$categories = elgg_view('output/categories', $vars);
+
+$comments_count = $page->countComments();
+//only display if there are commments
+if ($comments_count != 0 && !$revision) {
+ $text = elgg_echo("comments") . " ($comments_count)";
+ $comments_link = elgg_view('output/url', array(
+ 'href' => $page->getURL() . '#page-comments',
+ 'text' => $text,
+ 'is_trusted' => true,
+ ));
+} else {
+ $comments_link = '';
+}
+
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $vars['entity'],
+ 'handler' => 'pages',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+$subtitle = "$editor_text $comments_link $categories";
+
+// do not show the metadata and controls in widget view
+if (elgg_in_context('widgets') || $revision) {
+ $metadata = '';
+}
+
+if ($full) {
+ $body = elgg_view('output/longtext', array('value' => $annotation->value));
+
+ $params = array(
+ 'entity' => $page,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ );
+ $params = $params + $vars;
+ $summary = elgg_view('object/elements/summary', $params);
+
+ echo elgg_view('object/elements/full', array(
+ 'entity' => $page,
+ 'title' => false,
+ 'icon' => $page_icon,
+ 'summary' => $summary,
+ 'body' => $body,
+ ));
+
+} else {
+ // brief view
+
+ $excerpt = elgg_get_excerpt($page->description);
+
+ $params = array(
+ 'entity' => $page,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'content' => $excerpt,
+ );
+ $params = $params + $vars;
+ $list_body = elgg_view('object/elements/summary', $params);
+
+ echo elgg_view_image_block($page_icon, $list_body);
+}
diff --git a/mod/pages/views/default/pages/css.php b/mod/pages/views/default/pages/css.php
new file mode 100644
index 000000000..24e45cb9d
--- /dev/null
+++ b/mod/pages/views/default/pages/css.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Elgg Pages CSS
+ *
+ * @package ElggPages
+ */
+?>
+
+.pages-nav.treeview ul {
+ background-color: transparent;
+}
+
+.pages-nav.treeview a.selected {
+ color: #555555;
+}
+
+.pages-nav.treeview .hover {
+ color: #0054a7;
+} \ No newline at end of file
diff --git a/mod/pages/views/default/pages/group_module.php b/mod/pages/views/default/pages/group_module.php
new file mode 100644
index 000000000..0d7df96ac
--- /dev/null
+++ b/mod/pages/views/default/pages/group_module.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Group pages
+ *
+ * @package ElggPages
+ */
+
+
+$group = elgg_get_page_owner_entity();
+
+if ($group->pages_enable == "no") {
+ return true;
+}
+
+$all_link = elgg_view('output/url', array(
+ 'href' => "pages/group/$group->guid/all",
+ 'text' => elgg_echo('link:view:all'),
+ 'is_trusted' => true,
+));
+
+
+elgg_push_context('widgets');
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'page_top',
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'limit' => 6,
+ 'full_view' => false,
+ 'pagination' => false,
+);
+$content = elgg_list_entities($options);
+elgg_pop_context();
+
+if (!$content) {
+ $content = '<p>' . elgg_echo('pages:none') . '</p>';
+}
+
+$new_link = elgg_view('output/url', array(
+ 'href' => "pages/add/$group->guid",
+ 'text' => elgg_echo('pages:add'),
+ 'is_trusted' => true,
+));
+
+echo elgg_view('groups/profile/module', array(
+ 'title' => elgg_echo('pages:group'),
+ 'content' => $content,
+ 'all_link' => $all_link,
+ 'add_link' => $new_link,
+));
diff --git a/mod/pages/views/default/pages/icon.php b/mod/pages/views/default/pages/icon.php
new file mode 100644
index 000000000..cba034ec4
--- /dev/null
+++ b/mod/pages/views/default/pages/icon.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Page icon
+ *
+ * Uses a separate icon view due to dependency on annotation
+ *
+ * @package ElggPages
+ *
+ * @uses $vars['entity']
+ * @uses $vars['annotation']
+ */
+
+$annotation = $vars['annotation'];
+$entity = get_entity($annotation->entity_guid);
+
+// Get size
+if (!in_array($vars['size'], array('small', 'medium', 'large', 'tiny', 'master', 'topbar'))) {
+ $vars['size'] = "medium";
+}
+
+?>
+
+<a href="<?php echo $annotation->getURL(); ?>">
+ <img alt="<?php echo $entity->title; ?>" src="<?php echo $entity->getIconURL($vars['size']); ?>" />
+</a>
diff --git a/mod/pages/views/default/pages/input/parent.php b/mod/pages/views/default/pages/input/parent.php
new file mode 100644
index 000000000..c5ee3c3fb
--- /dev/null
+++ b/mod/pages/views/default/pages/input/parent.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Parent picker
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['options_values']
+ * @uses $vars['name'] The name of the input field
+ * @uses $vars['entity'] Optional. The child entity (uses container_guid)
+ */
+
+elgg_load_library('elgg:pages');
+
+if (empty($vars['entity'])) {
+ $container = elgg_get_page_owner_entity();
+} else {
+ $container = $vars['entity']->getContainerEntity();
+}
+
+$pages = pages_get_navigation_tree($container);
+$options = array();
+
+foreach ($pages as $page) {
+ $spacing = "";
+ for ($i = 0; $i < $page['depth']; $i++) {
+ $spacing .= "--";
+ }
+ $options[$page['guid']] = "$spacing " . $page['title'];
+}
+
+$defaults = array(
+ 'class' => 'elgg-pages-input-parent-picker',
+ 'options_values' => $options,
+);
+
+$vars = array_merge($defaults, $vars);
+
+echo elgg_view('input/dropdown', $vars);
diff --git a/mod/pages/views/default/pages/sidebar.php b/mod/pages/views/default/pages/sidebar.php
new file mode 100644
index 000000000..16fc12de0
--- /dev/null
+++ b/mod/pages/views/default/pages/sidebar.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Pages sidebar
+ */
+
+echo elgg_view('page/elements/comments_block', array(
+ 'subtypes' => array('page', 'page_top'),
+ 'owner_guid' => elgg_get_page_owner_guid(),
+));
+
+echo elgg_view('page/elements/tagcloud_block', array(
+ 'subtypes' => array('page', 'page_top'),
+ 'owner_guid' => elgg_get_page_owner_guid(),
+)); \ No newline at end of file
diff --git a/mod/pages/views/default/pages/sidebar/history.php b/mod/pages/views/default/pages/sidebar/history.php
new file mode 100644
index 000000000..7077edb9a
--- /dev/null
+++ b/mod/pages/views/default/pages/sidebar/history.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * History of this page
+ *
+ * @uses $vars['page']
+ */
+
+$title = elgg_echo('pages:history');
+
+if ($vars['page']) {
+ $options = array(
+ 'guid' => $vars['page']->guid,
+ 'annotation_name' => 'page',
+ 'limit' => 20,
+ 'reverse_order_by' => true
+ );
+ $content = elgg_list_annotations($options);
+}
+
+echo elgg_view_module('aside', $title, $content); \ No newline at end of file
diff --git a/mod/pages/views/default/pages/sidebar/navigation.php b/mod/pages/views/default/pages/sidebar/navigation.php
new file mode 100644
index 000000000..65eb500c8
--- /dev/null
+++ b/mod/pages/views/default/pages/sidebar/navigation.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Navigation menu for a user's or a group's pages
+ *
+ * @uses $vars['page'] Page object if manually setting selected item
+ */
+
+// add the jquery treeview files for navigation
+elgg_load_js('jquery-treeview');
+elgg_load_css('jquery-treeview');
+
+
+$selected_page = elgg_extract('page', $vars, false);
+if ($selected_page) {
+ $url = $selected_page->getURL();
+}
+
+$title = elgg_echo('pages:navigation');
+
+pages_register_navigation_tree(elgg_get_page_owner_entity());
+
+$content = elgg_view_menu('pages_nav', array('class' => 'pages-nav'));
+if (!$content) {
+ $content = '<p>' . elgg_echo('pages:none') . '</p>';
+}
+
+echo elgg_view_module('aside', $title, $content);
+
+?><?php //@todo JS 1.8: no ?>
+<script type="text/javascript">
+$(document).ready(function() {
+ $(".pages-nav").treeview({
+ persist: "location",
+ collapsed: true,
+ unique: true
+ });
+
+<?php
+if ($selected_page) {
+ // if on a history page, we need to manually select the correct menu item
+ // code taken from the jquery.treeview library
+?>
+ var current = $(".pages-nav a[href='<?php echo $url; ?>']");
+ var items = current.addClass("selected").parents("ul, li").add( current.next() ).show();
+ var CLASSES = $.treeview.classes;
+ items.filter("li")
+ .swapClass( CLASSES.collapsable, CLASSES.expandable )
+ .swapClass( CLASSES.lastCollapsable, CLASSES.lastExpandable )
+ .find(">.hitarea")
+ .swapClass( CLASSES.collapsableHitarea, CLASSES.expandableHitarea )
+ .swapClass( CLASSES.lastCollapsableHitarea, CLASSES.lastExpandableHitarea );
+<?php
+}
+?>
+
+});
+
+</script>
diff --git a/mod/pages/views/default/river/object/page/create.php b/mod/pages/views/default/river/object/page/create.php
new file mode 100644
index 000000000..4c31def33
--- /dev/null
+++ b/mod/pages/views/default/river/object/page/create.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Page river view.
+ */
+
+$object = $vars['item']->getObjectEntity();
+$excerpt = strip_tags($object->description);
+$excerpt = elgg_get_excerpt($excerpt);
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => $excerpt,
+)); \ No newline at end of file
diff --git a/mod/pages/views/default/river/object/page_top/create.php b/mod/pages/views/default/river/object/page_top/create.php
new file mode 100644
index 000000000..b89eed195
--- /dev/null
+++ b/mod/pages/views/default/river/object/page_top/create.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Top page create river view.
+ *
+ * @package ElggPages
+ */
+
+echo elgg_view('river/object/page/create', $vars); \ No newline at end of file
diff --git a/mod/pages/views/default/widgets/pages/content.php b/mod/pages/views/default/widgets/pages/content.php
new file mode 100644
index 000000000..f63777c09
--- /dev/null
+++ b/mod/pages/views/default/widgets/pages/content.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Elgg pages widget
+ *
+ * @package ElggPages
+ */
+
+$num = (int) $vars['entity']->pages_num;
+
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'page_top',
+ 'container_guid' => $vars['entity']->owner_guid,
+ 'limit' => $num,
+ 'full_view' => FALSE,
+ 'pagination' => FALSE,
+);
+$content = elgg_list_entities($options);
+
+echo $content;
+
+if ($content) {
+ $url = "pages/owner/" . elgg_get_page_owner_entity()->username;
+ $more_link = elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => elgg_echo('pages:more'),
+ 'is_trusted' => true,
+ ));
+ echo "<span class=\"elgg-widget-more\">$more_link</span>";
+} else {
+ echo elgg_echo('pages:none');
+}
diff --git a/mod/pages/views/default/widgets/pages/edit.php b/mod/pages/views/default/widgets/pages/edit.php
new file mode 100644
index 000000000..f23514380
--- /dev/null
+++ b/mod/pages/views/default/widgets/pages/edit.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg pages widget edit
+ *
+ * @package ElggPages
+ */
+
+// set default value
+if (!isset($vars['entity']->pages_num)) {
+ $vars['entity']->pages_num = 4;
+}
+
+$params = array(
+ 'name' => 'params[pages_num]',
+ 'value' => $vars['entity']->pages_num,
+ 'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('pages:num'); ?>:
+ <?php echo $dropdown; ?>
+</div>
diff --git a/mod/profile/icondirect.php b/mod/profile/icondirect.php
new file mode 100644
index 000000000..dbab5d31f
--- /dev/null
+++ b/mod/profile/icondirect.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Elgg profile icon cache/bypass
+ *
+ *
+ * @package ElggProfile
+ */
+
+// Get DB settings
+require_once(dirname(dirname(dirname(__FILE__))). '/engine/settings.php');
+
+global $CONFIG;
+
+// won't be able to serve anything if no joindate or guid
+if (!isset($_GET['joindate']) || !isset($_GET['guid'])) {
+ header("HTTP/1.1 404 Not Found");
+ exit;
+}
+
+$join_date = (int)$_GET['joindate'];
+$last_cache = (int)$_GET['lastcache']; // icontime
+$guid = (int)$_GET['guid'];
+
+// If is the same ETag, content didn't changed.
+$etag = $last_cache . $guid;
+if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && trim($_SERVER['HTTP_IF_NONE_MATCH']) == "\"$etag\"") {
+ header("HTTP/1.1 304 Not Modified");
+ exit;
+}
+
+$size = strtolower($_GET['size']);
+if (!in_array($size, array('large', 'medium', 'small', 'tiny', 'master', 'topbar'))) {
+ $size = "medium";
+}
+
+$mysql_dblink = @mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, true);
+if ($mysql_dblink) {
+ if (@mysql_select_db($CONFIG->dbname, $mysql_dblink)) {
+ $result = mysql_query("select name, value from {$CONFIG->dbprefix}datalists where name='dataroot'", $mysql_dblink);
+ if ($result) {
+ $row = mysql_fetch_object($result);
+ while ($row) {
+ if ($row->name == 'dataroot') {
+ $data_root = $row->value;
+ }
+ $row = mysql_fetch_object($result);
+ }
+ }
+
+ @mysql_close($mysql_dblink);
+
+ if (isset($data_root)) {
+
+ // this depends on ElggDiskFilestore::makeFileMatrix()
+ $user_path = date('Y/m/d/', $join_date) . $guid;
+
+ $filename = "$data_root$user_path/profile/{$guid}{$size}.jpg";
+ $size = @filesize($filename);
+ if ($size) {
+ header("Content-type: image/jpeg");
+ header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+6 months")), true);
+ header("Pragma: public");
+ header("Cache-Control: public");
+ header("Content-Length: $size");
+ header("ETag: \"$etag\"");
+ readfile($filename);
+ exit;
+ }
+ }
+ }
+
+}
+
+// something went wrong so load engine and try to forward to default icon
+require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+elgg_log("Profile icon direct failed.", "WARNING");
+forward("_graphics/icons/user/default{$size}.gif");
diff --git a/mod/profile/languages/en.php b/mod/profile/languages/en.php
new file mode 100644
index 000000000..50f04bb33
--- /dev/null
+++ b/mod/profile/languages/en.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg profile plugin language pack
+ */
+
+$english = array(
+ 'profile' => 'Profile',
+ 'profile:notfound' => 'Sorry. We could not find the requested profile.',
+
+);
+
+add_translation('en', $english); \ No newline at end of file
diff --git a/mod/profile/manifest.xml b/mod/profile/manifest.xml
new file mode 100644
index 000000000..86fbc7b7b
--- /dev/null
+++ b/mod/profile/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Profile</name>
+ <description>The default profile plugin.</description>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>social</category>
+ <website>http://elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License Version 2</license>
+ <activate_on_install>true</activate_on_install>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/profile/start.php b/mod/profile/start.php
new file mode 100644
index 000000000..ab596f235
--- /dev/null
+++ b/mod/profile/start.php
@@ -0,0 +1,188 @@
+<?php
+/**
+ * Elgg profile plugin
+ *
+ * @package ElggProfile
+ */
+
+elgg_register_event_handler('init', 'system', 'profile_init', 1);
+
+// Metadata on users needs to be independent
+// outside of init so it happens earlier in boot. See #3316
+register_metadata_as_independent('user');
+
+/**
+ * Profile init function
+ */
+function profile_init() {
+
+ // Register a URL handler for users - this means that profile_url()
+ // will dictate the URL for all ElggUser objects
+ elgg_register_entity_url_handler('user', 'all', 'profile_url');
+
+ elgg_register_plugin_hook_handler('entity:icon:url', 'user', 'profile_override_avatar_url');
+ elgg_unregister_plugin_hook_handler('entity:icon:url', 'user', 'user_avatar_hook');
+
+
+ elgg_register_simplecache_view('icon/user/default/tiny');
+ elgg_register_simplecache_view('icon/user/default/topbar');
+ elgg_register_simplecache_view('icon/user/default/small');
+ elgg_register_simplecache_view('icon/user/default/medium');
+ elgg_register_simplecache_view('icon/user/default/large');
+ elgg_register_simplecache_view('icon/user/default/master');
+
+ elgg_register_page_handler('profile', 'profile_page_handler');
+
+ elgg_extend_view('page/elements/head', 'profile/metatags');
+ elgg_extend_view('css/elgg', 'profile/css');
+ elgg_extend_view('js/elgg', 'profile/js');
+
+ // allow ECML in parts of the profile
+ elgg_register_plugin_hook_handler('get_views', 'ecml', 'profile_ecml_views_hook');
+
+ // allow admins to set default widgets for users on profiles
+ elgg_register_plugin_hook_handler('get_list', 'default_widgets', 'profile_default_widgets_hook');
+}
+
+/**
+ * Profile page handler
+ *
+ * @param array $page Array of URL segments passed by the page handling mechanism
+ * @return bool
+ */
+function profile_page_handler($page) {
+
+ if (isset($page[0])) {
+ $username = $page[0];
+ $user = get_user_by_username($username);
+ elgg_set_page_owner_guid($user->guid);
+ } elseif (elgg_is_logged_in()) {
+ forward(elgg_get_logged_in_user_entity()->getURL());
+ }
+
+ // short circuit if invalid or banned username
+ if (!$user || ($user->isBanned() && !elgg_is_admin_logged_in())) {
+ register_error(elgg_echo('profile:notfound'));
+ forward();
+ }
+
+ $action = NULL;
+ if (isset($page[1])) {
+ $action = $page[1];
+ }
+
+ if ($action == 'edit') {
+ // use the core profile edit page
+ $base_dir = elgg_get_root_path();
+ require "{$base_dir}pages/profile/edit.php";
+ return true;
+ }
+
+ // main profile page
+ $params = array(
+ 'content' => elgg_view('profile/wrapper'),
+ 'num_columns' => 3,
+ );
+ $content = elgg_view_layout('widgets', $params);
+
+ $body = elgg_view_layout('one_column', array('content' => $content));
+ echo elgg_view_page($user->name, $body);
+ return true;
+}
+
+/**
+ * Profile URL generator for $user->getUrl();
+ *
+ * @param ElggUser $user
+ * @return string User URL
+ */
+function profile_url($user) {
+ return elgg_get_site_url() . "profile/" . $user->username;
+}
+
+/**
+ * Use a URL for avatars that avoids loading Elgg engine for better performance
+ *
+ * @param string $hook
+ * @param string $entity_type
+ * @param string $return_value
+ * @param array $params
+ * @return string
+ */
+function profile_override_avatar_url($hook, $entity_type, $return_value, $params) {
+
+ // if someone already set this, quit
+ if ($return_value) {
+ return null;
+ }
+
+ $user = $params['entity'];
+ $size = $params['size'];
+
+ if (!elgg_instanceof($user, 'user')) {
+ return null;
+ }
+
+ $user_guid = $user->getGUID();
+ $icon_time = $user->icontime;
+
+ if (!$icon_time) {
+ return "_graphics/icons/user/default{$size}.gif";
+ }
+
+ if ($user->isBanned()) {
+ return null;
+ }
+
+ $filehandler = new ElggFile();
+ $filehandler->owner_guid = $user_guid;
+ $filehandler->setFilename("profile/{$user_guid}{$size}.jpg");
+
+ try {
+ if ($filehandler->exists()) {
+ $join_date = $user->getTimeCreated();
+ return "mod/profile/icondirect.php?lastcache=$icon_time&joindate=$join_date&guid=$user_guid&size=$size";
+ }
+ } catch (InvalidParameterException $e) {
+ elgg_log("Unable to get profile icon for user with GUID $user_guid", 'ERROR');
+ return "_graphics/icons/default/$size.png";
+ }
+
+ return null;
+}
+
+/**
+ * Parse ECML on parts of the profile
+ *
+ * @param string $hook
+ * @param string $entity_type
+ * @param array $return_value
+ * @return array
+ */
+function profile_ecml_views_hook($hook, $entity_type, $return_value) {
+ $return_value['profile/profile_content'] = elgg_echo('profile');
+
+ return $return_value;
+}
+
+/**
+ * Register profile widgets with default widgets
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @return array
+ */
+function profile_default_widgets_hook($hook, $type, $return) {
+ $return[] = array(
+ 'name' => elgg_echo('profile'),
+ 'widget_context' => 'profile',
+ 'widget_columns' => 3,
+
+ 'event' => 'create',
+ 'entity_type' => 'user',
+ 'entity_subtype' => ELGG_ENTITIES_ANY_VALUE,
+ );
+
+ return $return;
+}
diff --git a/mod/profile/views/default/profile/css.php b/mod/profile/views/default/profile/css.php
new file mode 100644
index 000000000..e24f555a9
--- /dev/null
+++ b/mod/profile/views/default/profile/css.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Elgg Profile CSS
+ *
+ * @package Profile
+ */
+?>
+/* ***************************************
+ Profile
+*************************************** */
+.profile {
+ float: left;
+ margin-bottom: 15px;
+}
+.profile .elgg-inner {
+ margin: 0 5px;
+ border: 2px solid #eee;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+}
+#profile-details {
+ padding: 15px;
+}
+/*** ownerblock ***/
+#profile-owner-block {
+ width: 200px;
+ float: left;
+ background-color: #eee;
+ padding: 15px;
+}
+#profile-owner-block .large {
+ margin-bottom: 10px;
+}
+#profile-owner-block a.elgg-button-action {
+ margin-bottom: 4px;
+ display: table;
+}
+.profile-content-menu a {
+ display: block;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ background-color: white;
+ margin: 3px 0 5px 0;
+ padding: 2px 4px 2px 8px;
+}
+.profile-content-menu a:hover {
+ background: #0054A7;
+ color: white;
+ text-decoration: none;
+}
+.profile-admin-menu {
+ display: none;
+}
+.profile-admin-menu-wrapper a {
+ display: block;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ background-color: white;
+ margin: 3px 0 5px 0;
+ padding: 2px 4px 2px 8px;
+}
+.profile-admin-menu-wrapper {
+ background-color: white;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+}
+.profile-admin-menu-wrapper li a {
+ background-color: white;
+ color: red;
+ margin-bottom: 0;
+}
+.profile-admin-menu-wrapper a:hover {
+ color: black;
+}
+/*** profile details ***/
+#profile-details .odd {
+ background-color: #f4f4f4;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+
+ margin: 0 0 7px;
+ padding: 2px 4px;
+}
+#profile-details .even {
+ background-color:#f4f4f4;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+
+ margin: 0 0 7px;
+ padding: 2px 4px;
+}
+.profile-aboutme-title {
+ background-color:#f4f4f4;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+
+ margin: 0;
+ padding: 2px 4px;
+}
+.profile-aboutme-contents {
+ padding: 2px 0 0 3px;
+}
+.profile-banned-user {
+ border: 2px solid red;
+ padding: 4px 8px;
+
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
diff --git a/mod/profile/views/default/profile/details.php b/mod/profile/views/default/profile/details.php
new file mode 100644
index 000000000..7b05b0e15
--- /dev/null
+++ b/mod/profile/views/default/profile/details.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Elgg user display (details)
+ * @uses $vars['entity'] The user entity
+ */
+
+$user = elgg_get_page_owner_entity();
+
+$profile_fields = elgg_get_config('profile_fields');
+
+echo '<div id="profile-details" class="elgg-body pll">';
+echo "<h2>{$user->name}</h2>";
+
+echo elgg_view("profile/status", array("entity" => $user));
+
+$even_odd = null;
+if (is_array($profile_fields) && sizeof($profile_fields) > 0) {
+ foreach ($profile_fields as $shortname => $valtype) {
+ if ($shortname == "description") {
+ // skip about me and put at bottom
+ continue;
+ }
+ $value = $user->$shortname;
+ if (!empty($value)) {
+ //This function controls the alternating class
+ $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even';
+ ?>
+ <div class="<?php echo $even_odd; ?>">
+ <b><?php echo elgg_echo("profile:{$shortname}"); ?>: </b>
+ <?php
+ echo elgg_view("output/{$valtype}", array('value' => $value));
+ ?>
+ </div>
+ <?php
+ }
+ }
+}
+
+if (!elgg_get_config('profile_custom_fields')) {
+ if ($user->isBanned()) {
+ echo "<p class='profile-banned-user'>";
+ echo elgg_echo('banned');
+ echo "</p>";
+ } else {
+ if ($user->description) {
+ echo "<p class='profile-aboutme-title'><b>" . elgg_echo("profile:aboutme") . "</b></p>";
+ echo "<div class='profile-aboutme-contents'>";
+ echo elgg_view('output/longtext', array('value' => $user->description, 'class' => 'mtn'));
+ echo "</div>";
+ }
+ }
+}
+
+echo '</div>'; \ No newline at end of file
diff --git a/mod/profile/views/default/profile/js.php b/mod/profile/views/default/profile/js.php
new file mode 100644
index 000000000..5a08a90bd
--- /dev/null
+++ b/mod/profile/views/default/profile/js.php
@@ -0,0 +1,9 @@
+
+// force the first column to at least be as large as the profile box in cols 2 and 3
+// we also want to run before the widget init happens so priority is < 500
+elgg.register_hook_handler('init', 'system', function() {
+ // only do this on the profile page's widget canvas.
+ if ($('.profile').length) {
+ $('#elgg-widget-col-1').css('min-height', $('.profile').outerHeight(true) + 1);
+ }
+}, 400);
diff --git a/mod/profile/views/default/profile/metatags.php b/mod/profile/views/default/profile/metatags.php
new file mode 100644
index 000000000..52048b8a7
--- /dev/null
+++ b/mod/profile/views/default/profile/metatags.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * FOAF
+ *
+ * @package ElggProfile
+ *
+ */
+
+$owner = elgg_get_page_owner_entity();
+
+if (elgg_instanceof($owner, 'user')) {
+?>
+ <link rel="meta" type="application/rdf+xml" title="FOAF" href="<?php echo current_page_url(); ?>?view=foaf" />
+<?php
+
+}
diff --git a/mod/profile/views/default/profile/owner_block.php b/mod/profile/views/default/profile/owner_block.php
new file mode 100644
index 000000000..63cb5391a
--- /dev/null
+++ b/mod/profile/views/default/profile/owner_block.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Profile owner block
+ */
+
+$user = elgg_get_page_owner_entity();
+
+if (!$user) {
+ // no user so we quit view
+ echo elgg_echo('viewfailure', array(__FILE__));
+ return TRUE;
+}
+
+$icon = elgg_view_entity_icon($user, 'large', array(
+ 'use_hover' => false,
+ 'use_link' => false,
+));
+
+// grab the actions and admin menu items from user hover
+$menu = elgg_trigger_plugin_hook('register', "menu:user_hover", array('entity' => $user), array());
+$builder = new ElggMenuBuilder($menu);
+$menu = $builder->getMenu();
+$actions = elgg_extract('action', $menu, array());
+$admin = elgg_extract('admin', $menu, array());
+
+$profile_actions = '';
+if (elgg_is_logged_in() && $actions) {
+ $profile_actions = '<ul class="elgg-menu profile-action-menu mvm">';
+ foreach ($actions as $action) {
+ $profile_actions .= '<li>' . $action->getContent(array('class' => 'elgg-button elgg-button-action')) . '</li>';
+ }
+ $profile_actions .= '</ul>';
+}
+
+// if admin, display admin links
+$admin_links = '';
+if (elgg_is_admin_logged_in() && elgg_get_logged_in_user_guid() != elgg_get_page_owner_guid()) {
+ $text = elgg_echo('admin:options');
+
+ $admin_links = '<ul class="profile-admin-menu-wrapper">';
+ $admin_links .= "<li><a rel=\"toggle\" href=\"#profile-menu-admin\">$text&hellip;</a>";
+ $admin_links .= '<ul class="profile-admin-menu" id="profile-menu-admin">';
+ foreach ($admin as $menu_item) {
+ $admin_links .= elgg_view('navigation/menu/elements/item', array('item' => $menu_item));
+ }
+ $admin_links .= '</ul>';
+ $admin_links .= '</li>';
+ $admin_links .= '</ul>';
+}
+
+// content links
+$content_menu = elgg_view_menu('owner_block', array(
+ 'entity' => elgg_get_page_owner_entity(),
+ 'class' => 'profile-content-menu',
+));
+
+echo <<<HTML
+
+<div id="profile-owner-block">
+ $icon
+ $profile_actions
+ $content_menu
+ $admin_links
+</div>
+
+HTML;
diff --git a/mod/profile/views/default/profile/wrapper.php b/mod/profile/views/default/profile/wrapper.php
new file mode 100644
index 000000000..73b7934f2
--- /dev/null
+++ b/mod/profile/views/default/profile/wrapper.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Profile info box
+ */
+
+?>
+<div class="profile elgg-col-2of3">
+ <div class="elgg-inner clearfix">
+ <?php echo elgg_view('profile/owner_block'); ?>
+ <?php echo elgg_view('profile/details'); ?>
+ </div>
+</div> \ No newline at end of file
diff --git a/mod/purity_theme b/mod/purity_theme
new file mode 160000
+Subproject 60df8b304bd70b5ddc79927abec1b1dc2eb706e
diff --git a/mod/reportedcontent/actions/reportedcontent/add.php b/mod/reportedcontent/actions/reportedcontent/add.php
new file mode 100644
index 000000000..f0a1b05c8
--- /dev/null
+++ b/mod/reportedcontent/actions/reportedcontent/add.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Elgg report action
+ *
+ * @package ElggReportContent
+ */
+$title = get_input('title');
+$description = get_input('description');
+$address = get_input('address');
+$access = ACCESS_PRIVATE; //this is private and only admins can see it
+
+if ($title && $address) {
+
+ $report = new ElggObject;
+ $report->subtype = "reported_content";
+ $report->owner_guid = elgg_get_logged_in_user_guid();
+ $report->title = $title;
+ $report->address = $address;
+ $report->description = $description;
+ $report->access_id = $access;
+
+ if ($report->save()) {
+ if (!elgg_trigger_plugin_hook('reportedcontent:add', 'system', array('report' => $report), true)) {
+ $report->delete();
+ register_error(elgg_echo('reportedcontent:failed'));
+ } else {
+ system_message(elgg_echo('reportedcontent:success'));
+ $report->state = "active";
+ }
+ forward($address);
+ } else {
+ register_error(elgg_echo('reportedcontent:failed'));
+ forward($address);
+ }
+} else {
+
+ register_error(elgg_echo('reportedcontent:failed'));
+ forward($address);
+}
diff --git a/mod/reportedcontent/actions/reportedcontent/archive.php b/mod/reportedcontent/actions/reportedcontent/archive.php
new file mode 100644
index 000000000..dd5c6aef1
--- /dev/null
+++ b/mod/reportedcontent/actions/reportedcontent/archive.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Elgg reported content: archive action
+ *
+ * @package ElggReportedContent
+ */
+
+$guid = (int) get_input('guid');
+
+$report = get_entity($guid);
+
+// Make sure we actually have permission to edit
+if ($report->getSubtype() == "reported_content" && $report->canEdit()) {
+
+ // allow another plugin to override
+ if (!elgg_trigger_plugin_hook('reportedcontent:archive', 'system', array('report' => $report), TRUE)) {
+ system_message(elgg_echo("reportedcontent:notarchived"));
+ forward(REFERER);
+ }
+
+ // change the state
+ $report->state = "archived";
+
+ system_message(elgg_echo("reportedcontent:archived"));
+
+ forward(REFERER);
+}
diff --git a/mod/reportedcontent/actions/reportedcontent/delete.php b/mod/reportedcontent/actions/reportedcontent/delete.php
new file mode 100644
index 000000000..f7d4e2107
--- /dev/null
+++ b/mod/reportedcontent/actions/reportedcontent/delete.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Elgg reported content: delete action
+ *
+ * @package ElggReportedContent
+ */
+
+$guid = (int) get_input('guid');
+
+$report = get_entity($guid);
+
+// Make sure we actually have permission to delete
+if ($report->getSubtype() == "reported_content" && $report->canEdit()) {
+
+ // give another plugin a chance to override
+ if (!elgg_trigger_plugin_hook('reportedcontent:delete', 'system', array('report' => $report), TRUE)) {
+ register_error(elgg_echo("reportedcontent:notdeleted"));
+ forward(REFERER);
+ }
+
+ if ($report->delete()) {
+ system_message(elgg_echo("reportedcontent:deleted"));
+ } else {
+ register_error(elgg_echo("reportedcontent:notdeleted"));
+ }
+
+ forward(REFERER);
+}
diff --git a/mod/reportedcontent/graphics/icon_reportthis.gif b/mod/reportedcontent/graphics/icon_reportthis.gif
new file mode 100644
index 000000000..0590f96e6
--- /dev/null
+++ b/mod/reportedcontent/graphics/icon_reportthis.gif
Binary files differ
diff --git a/mod/reportedcontent/languages/en.php b/mod/reportedcontent/languages/en.php
new file mode 100644
index 000000000..c2e197879
--- /dev/null
+++ b/mod/reportedcontent/languages/en.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Elgg reported content plugin language pack
+ *
+ * @package ElggReportedContent
+ */
+
+$english = array(
+
+ 'item:object:reported_content' => 'Reported items',
+ 'admin:administer_utilities:reportedcontent' => 'Reported content',
+ 'reportedcontent' => 'Reported content',
+ 'reportedcontent:this' => 'Report this',
+ 'reportedcontent:this:tooltip' => 'Report this page to an administrator',
+ 'reportedcontent:none' => 'There is no reported content',
+ 'reportedcontent:report' => 'Report to admin',
+ 'reportedcontent:title' => 'Page title',
+ 'reportedcontent:deleted' => 'The reported content has been deleted',
+ 'reportedcontent:notdeleted' => 'We were not able to delete that report',
+ 'reportedcontent:delete' => 'Delete report',
+ 'reportedcontent:areyousure' => 'Are you sure you want to delete?',
+ 'reportedcontent:archive' => 'Archive report',
+ 'reportedcontent:archived' => 'The report has been archived',
+ 'reportedcontent:visit' => 'Visit reported item',
+ 'reportedcontent:by' => 'Report by',
+ 'reportedcontent:objecttitle' => 'Page title',
+ 'reportedcontent:objecturl' => 'Page url',
+ 'reportedcontent:reason' => 'Reason for report',
+ 'reportedcontent:description' => 'Why are you reporting this?',
+ 'reportedcontent:address' => 'Location of the item',
+ 'reportedcontent:success' => 'Your report has been sent to the site admin',
+ 'reportedcontent:failing' => 'Your report could not be sent',
+ 'reportedcontent:report' => 'Report this',
+ 'reportedcontent:moreinfo' => 'More info',
+ 'reportedcontent:instructions' => 'This report will be sent to the administrators of this site for review.',
+ 'reportedcontent:numbertodisplay' => 'Number of reports to display',
+ 'reportedcontent:widget:description' => 'Display reported content',
+ 'reportedcontent:user' => 'Report user',
+
+ 'reportedcontent:failed' => 'Sorry, the attempt to report this content has failed.',
+ 'reportedcontent:notarchived' => 'We were not able to archive that report',
+);
+
+add_translation("en", $english);
diff --git a/mod/reportedcontent/manifest.xml b/mod/reportedcontent/manifest.xml
new file mode 100644
index 000000000..e96620b01
--- /dev/null
+++ b/mod/reportedcontent/manifest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Reported Content</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <description>Adds the option for users to report content and for admins to check it out.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/reportedcontent/start.php b/mod/reportedcontent/start.php
new file mode 100644
index 000000000..8b18a4d64
--- /dev/null
+++ b/mod/reportedcontent/start.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * Elgg Reported content.
+ *
+ * @package ElggReportedContent
+ */
+
+elgg_register_event_handler('init', 'system', 'reportedcontent_init');
+
+/**
+ * Initialize the plugin
+ */
+function reportedcontent_init() {
+
+ // Register a page handler, so we can have nice URLs
+ elgg_register_page_handler('reportedcontent', 'reportedcontent_page_handler');
+
+ // Extend CSS
+ elgg_extend_view('css/elgg', 'reportedcontent/css');
+ elgg_extend_view('css/admin', 'reportedcontent/admin_css');
+
+ // Extend footer with report content link
+ if (elgg_is_logged_in()) {
+ $href = "javascript:elgg.forward('reportedcontent/add'";
+ $href .= "+'?address='+encodeURIComponent(location.href)";
+ $href .= "+'&title='+encodeURIComponent(document.title));";
+
+ elgg_register_menu_item('footer', array(
+ 'name' => 'report_this',
+ 'href' => $href,
+ 'title' => elgg_echo('reportedcontent:this:tooltip'),
+ 'text' => elgg_view_icon('report-this') . elgg_echo('reportedcontent:this'),
+ 'priority' => 500,
+ 'section' => 'alt',
+ ));
+ }
+
+ elgg_register_plugin_hook_handler('register', 'menu:user_hover', 'reportedcontent_user_hover_menu');
+
+ // Add admin menu item
+ // @todo Might want to move this to a 'feedback' section. something other than utils
+ elgg_register_admin_menu_item('administer', 'reportedcontent', 'administer_utilities');
+
+ elgg_register_widget_type(
+ 'reportedcontent',
+ elgg_echo('reportedcontent'),
+ elgg_echo('reportedcontent:widget:description'),
+ 'admin');
+
+ // Register actions
+ $action_path = elgg_get_plugins_path() . "reportedcontent/actions/reportedcontent";
+ elgg_register_action('reportedcontent/add', "$action_path/add.php");
+ elgg_register_action('reportedcontent/delete', "$action_path/delete.php", 'admin');
+ elgg_register_action('reportedcontent/archive', "$action_path/archive.php", 'admin');
+}
+
+/**
+ * Reported content page handler
+ *
+ * Serves the add report page
+ *
+ * @param array $page Array of page routing elements
+ * @return bool
+ */
+function reportedcontent_page_handler($page) {
+ // only logged in users can report things
+ gatekeeper();
+
+ $content .= elgg_view_title(elgg_echo('reportedcontent:this'));
+ $content .= elgg_view_form('reportedcontent/add');
+ $sidebar = elgg_echo('reportedcontent:instructions');
+
+ $params = array(
+ 'content' => $content,
+ 'sidebar' => $sidebar,
+ );
+ $body = elgg_view_layout('one_sidebar', $params);
+
+ echo elgg_view_page(elgg_echo('reportedcontent:this'), $body);
+ return true;
+}
+
+/**
+ * Add report user link to hover menu
+ */
+function reportedcontent_user_hover_menu($hook, $type, $return, $params) {
+ $user = $params['entity'];
+
+ $profile_url = urlencode($user->getURL());
+ $name = urlencode($user->name);
+ $url = "reportedcontent/add?address=$profile_url&title=$name";
+
+ if (elgg_is_logged_in() && elgg_get_logged_in_user_guid() != $user->guid) {
+ $item = new ElggMenuItem(
+ 'reportuser',
+ elgg_echo('reportedcontent:user'),
+ $url);
+ $item->setSection('action');
+ $return[] = $item;
+ }
+
+ return $return;
+} \ No newline at end of file
diff --git a/mod/reportedcontent/views/default/admin/administer_utilities/reportedcontent.php b/mod/reportedcontent/views/default/admin/administer_utilities/reportedcontent.php
new file mode 100644
index 000000000..32f108312
--- /dev/null
+++ b/mod/reportedcontent/views/default/admin/administer_utilities/reportedcontent.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg Reported content admin page
+ *
+ * @package ElggReportedContent
+ */
+
+$list = elgg_list_entities(array('types' => 'object', 'subtypes' => 'reported_content'));
+if (!$list) {
+ $list = '<p class="mtm">' . elgg_echo('reportedcontent:none') . '</p>';
+}
+
+echo $list; \ No newline at end of file
diff --git a/mod/reportedcontent/views/default/forms/reportedcontent/add.php b/mod/reportedcontent/views/default/forms/reportedcontent/add.php
new file mode 100644
index 000000000..f9986849d
--- /dev/null
+++ b/mod/reportedcontent/views/default/forms/reportedcontent/add.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Elgg report content plugin form
+ *
+ * @package ElggReportContent
+ */
+
+$guid = 0;
+$title = get_input('title', "");
+$address = get_input('address', "");
+
+$description = "";
+$owner = elgg_get_logged_in_user_entity();
+
+?>
+
+<div>
+ <label>
+ <?php
+ echo elgg_echo('reportedcontent:title');
+ echo elgg_view('input/text', array(
+ 'name' => 'title',
+ 'value' => $title,
+ ));
+ ?>
+ </label>
+</div>
+<div>
+ <label>
+ <?php
+ echo elgg_echo('reportedcontent:address');
+ echo elgg_view('input/url', array(
+ 'name' => 'address',
+ 'value' => $address,
+ ));
+
+ ?>
+ </label>
+</div>
+<div>
+ <label>
+ <?php echo elgg_echo('reportedcontent:description'); ?>
+ </label>
+ <?php
+ echo elgg_view('input/longtext',array(
+ 'name' => 'description',
+ 'value' => $description,
+ ));
+ ?>
+</div>
+<div class="elgg-foot">
+ <?php
+ echo elgg_view('input/submit', array(
+ 'value' => elgg_echo('reportedcontent:report'),
+ ));
+ ?>
+</div>
diff --git a/mod/reportedcontent/views/default/object/reported_content.php b/mod/reportedcontent/views/default/object/reported_content.php
new file mode 100644
index 000000000..0e733e154
--- /dev/null
+++ b/mod/reportedcontent/views/default/object/reported_content.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * Elgg reported content object view
+ *
+ * @package ElggReportContent
+ */
+
+$report = $vars['entity'];
+$reporter = $report->getOwnerEntity();
+
+$archive_url = elgg_get_site_url() . "action/reportedcontent/archive?guid=$report->guid";
+$delete_url = elgg_get_site_url() . "action/reportedcontent/delete?guid=$report->guid";
+
+//find out if the report is current or archive
+if ($report->state == 'archived') {
+ $reportedcontent_background = "reported-content-archived";
+} else {
+ $reportedcontent_background = "reported-content-active";
+}
+
+?>
+
+<div class="reported-content <?php echo $reportedcontent_background; ?>">
+ <div class="clearfix">
+ <div class="clearfix controls">
+<?php
+ if ($report->state != 'archived') {
+ $params = array(
+ 'href' => $archive_url,
+ 'text' => elgg_echo('reportedcontent:archive'),
+ 'is_action' => true,
+ 'is_trusted' => true,
+ 'class' => 'elgg-button elgg-button-action',
+ );
+ echo elgg_view('output/url', $params);
+ }
+ $params = array(
+ 'href' => $delete_url,
+ 'text' => elgg_echo('reportedcontent:delete'),
+ 'is_action' => true,
+ 'is_trusted' => true,
+ 'class' => 'elgg-button elgg-button-action',
+ );
+ echo elgg_view('output/url', $params);
+?>
+ </div>
+ <p>
+ <b><?php echo elgg_echo('reportedcontent:by'); ?>:</b>
+ <?php echo elgg_view('output/url', array(
+ 'href' => $reporter->getURL(),
+ 'text' => $reporter->name,
+ 'is_trusted' => true,
+ ));
+ ?>,
+ <?php echo elgg_view_friendly_time($report->time_created); ?>
+ </p>
+ <p>
+ <b><?php echo elgg_echo('reportedcontent:objecttitle'); ?>:</b>
+ <?php echo $report->title; ?>
+ <br />
+ <?php echo elgg_view('output/url', array(
+ 'href' => "#report-$report->guid",
+ 'text' => elgg_echo('reportedcontent:moreinfo'),
+ 'rel' => "toggle",
+ ));
+ ?>
+ </p>
+ </div>
+ <div class="report-details hidden" id="report-<?php echo $report->getGUID();?>">
+ <p>
+ <b><?php echo elgg_echo('reportedcontent:objecturl'); ?>:</b>
+ <?php echo elgg_view('output/url', array(
+ 'href' => $report->address,
+ 'text' => elgg_echo('reportedcontent:visit'),
+ 'is_trusted' => true,
+ ));
+ ?>
+ </p>
+ <p>
+ <b><?php echo elgg_echo('reportedcontent:reason'); ?>:</b>
+ <?php echo $report->description; ?>
+ </p>
+ </div>
+</div>
diff --git a/mod/reportedcontent/views/default/reportedcontent/admin_css.php b/mod/reportedcontent/views/default/reportedcontent/admin_css.php
new file mode 100644
index 000000000..1ed240f3b
--- /dev/null
+++ b/mod/reportedcontent/views/default/reportedcontent/admin_css.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Elgg reported content admin CSS
+ *
+ * @package ElggReportContent
+ */
+?>
+
+/* REPORTED CONTENT */
+.reported-content {
+ margin: 5px 0 0;
+ padding: 5px 7px 3px 9px;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.reported-content p {
+ margin: 0;
+}
+.reported-content-active {
+ border: 1px solid #D3322A;
+ background: #F7DAD8;
+}
+.reported-content-archived {
+ border: 1px solid #666666;
+ background: #dedede;
+}
+.reported-content .controls {
+ float: right;
+ margin: 5px 0 0 10px;
+}
+.report-details {
+ background-color: white;
+ padding: 5px;
+ margin-bottom: 5px;
+ max-width: 500px;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.elgg-widget-content .reported-content .elgg-button {
+ display: block;
+ margin: 5px;
+}
diff --git a/mod/reportedcontent/views/default/reportedcontent/css.php b/mod/reportedcontent/views/default/reportedcontent/css.php
new file mode 100644
index 000000000..da88ecf70
--- /dev/null
+++ b/mod/reportedcontent/views/default/reportedcontent/css.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Elgg reported content CSS
+ *
+ * Footer link CSS
+ *
+ * @package ElggReportContent
+ */
+
+?>
+/* Reported Content */
+.elgg-icon-report-this {
+ background: url(<?php echo elgg_get_site_url(); ?>mod/reportedcontent/graphics/icon_reportthis.gif) no-repeat left top;
+}
diff --git a/mod/reportedcontent/views/default/widgets/reportedcontent/content.php b/mod/reportedcontent/views/default/widgets/reportedcontent/content.php
new file mode 100644
index 000000000..4c6595653
--- /dev/null
+++ b/mod/reportedcontent/views/default/widgets/reportedcontent/content.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * List the latest reports
+ */
+
+$list = elgg_list_entities(array(
+ 'types' => 'object',
+ 'subtypes' => 'reported_content',
+ 'limit' => $vars['entity']->num_display,
+ 'pagination' => false,
+));
+if (!$list) {
+ $list = '<p class="mtm">' . elgg_echo('reportedcontent:none') . '</p>';
+}
+
+echo $list; \ No newline at end of file
diff --git a/mod/reportedcontent/views/default/widgets/reportedcontent/edit.php b/mod/reportedcontent/views/default/widgets/reportedcontent/edit.php
new file mode 100644
index 000000000..ecd732d23
--- /dev/null
+++ b/mod/reportedcontent/views/default/widgets/reportedcontent/edit.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Widget edit view
+ */
+
+// set default value
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 4;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('reportedcontent:numbertodisplay'); ?>:
+ <?php echo $dropdown; ?>
+</div>
diff --git a/mod/search/README.txt b/mod/search/README.txt
new file mode 100644
index 000000000..98a002dd5
--- /dev/null
+++ b/mod/search/README.txt
@@ -0,0 +1,276 @@
+= Elgg Search =
+
+Full text search developer's reference.
+
+== Contents ==
+
+1. Overview
+2. Search and Custom Plugins
+3. Controlling Search Results
+ 1. Entities Returned
+ 2. Custom Search
+4. Controlling Search Views
+ 1. Entities
+ 2. Listing
+ 3. Layout
+5. Hints and Quirks
+
+
+== 1. Overview ==
+
+All entities are searched through title and description using
+MySQL's native fulltext search when possible, and `LIKE %...%` when not.
+This can be overridden on a type/subtype basis.
+
+Entities are displayed in a standard list view consisting of a
+title, blurb, and icon of the owning entity. This can be overridden
+on a type/subtype basis.
+
+Search is separated based upon types/subtypes pairs and any
+registered custom search.
+
+**METADATA, ANNOTATIONS, AND PRIVATE DATA ARE NOT SEARCHED BY DEFAULT!**
+
+These are used in a variety of ways by plugin authors and generally
+should not be displayed. There are exceptions (profile fields and
+comments) but if a plugin needs to match against metadata,
+annotations, or private data it must register a search hook itself.
+
+
+== 2. Search and Custom Plugins ==
+
+To appear in search you must register your entity type and subtype
+by saying in your plugin's init function:
+
+ register_entity_type($type, $subtype);
+
+If your plugin uses ElggEntity's standard title and description,
+and you don't need a custom display, there is nothing else you need
+to do for your results to appear in search. If you would like more
+granular control of search, continue below.
+
+
+== 3. Controlling Search Results ==
+
+Search results can be controlled at a object:subtype level.
+
+You can specify your own search types by responding to a hook.
+
+
+=== 3.1 Controlling Search Results - Entities Returned ===
+
+You can override the default search by responding to the search/type
+or search/type:subtype hook. Generally, you will be replying to
+search/object:subtype.
+
+Search will first trigger a hook for search/type:subtype. If no
+results are returned (but not FALSE, see below) a hook for search/type
+will be triggered.
+
+FALSE returned for any search hook will halt results for that
+type/subtype.
+
+Register plugin hooks like this:
+
+ register_plugin_hook('search', 'object:my_subtype',
+ 'my_subtype_search_hook');
+
+The hooked function is provided with details about the search query
+in $param. These include:
+
+* query
+* offset
+* limit
+* search_type
+* type - Entity type. (Not applicable for custom searches)
+* subtype - Entity subtype. (Not applicable for custom searches)
+* owner_guid
+* friends - Should only entities by friends of the logged in
+ user be searched? (@todo)
+* pagination - Show pagination?
+
+The hooked function should respond to search triggers with the
+following:
+
+ array(
+ 'count' => A count of ALL entities found,
+ 'entities' => An array of entities.
+ )
+
+This information is passed directly to the search view, so if you are
+registering your own custom hook, you can provide more
+information to display in your custom view.
+
+For each entity in the returned array, search expects two pieces of
+volatile data: search_matched_title and search_matched_description.
+Set these by saying:
+
+ $entity->setVolatileData('data_name', 'data_value');
+
+Again, if you are customizing your search views, you can add anything
+you need.
+
+
+=== 3.2 Controlling Search Results - Custom Search ===
+
+Non-entities, including information from 3rd party applications,
+can easily be included in search by registering a custom search hook
+that responds to the search_types/get_types trigger:
+
+ register_plugin_hook('search_types', 'get_types',
+ 'my_custom_search_hook_function');
+
+In this function, append to the array sent in $value with the name of
+your custom search:
+
+ function my_custom_search_hook_function($hook, $type,
+ $value, $params) {
+
+ $value[] = 'my_custom_search';
+ return $value;
+ }
+
+Search will trigger a hook for search/my_custom_search, which your
+plugin should respond to as detailed in section 3.1 above.
+
+
+== 4.0 Controlling Search Views ==
+Three types views are used for displaying search: entity, listing,
+and layout.
+
+Each view has a default that standardizes the display of entities
+regardless of type, subtype, or search type.
+
+The entity and listing views can be customized based upon a type,
+subtype, or custom search type of the results.
+
+The layout view can be customized based upon the original search
+type. NB: This can be different to the types for the results.
+
+The entity view controls how each individual result is formatted.
+
+The listing view controls how each group of listings is formatted.
+
+The listing layout controls how each full result set is formatted.
+
+
+=== 4.1 Controlling Search Views - Entities ===
+
+The default view for entities is search/entity.
+
+Search views are separate from the object/entity views because
+view types might not match entity types.
+
+The default search listing view iterates through each entity
+found and passes to the entity view. See 3.3 for more information
+about listing views.
+
+Entity views are discovered in the following order. The first search
+view found is used.
+
+ search/type/subtype/entity (For entity-based searches only)
+ search/type/entity
+ search/entity
+
+The following parameters are passed in $vars to the entity view by
+the default listing view:
+
+ entity => The current returned entity
+ results => The results from the search/type:subtype hook
+ params => The params passed to the search/type:subtype hook
+
+Example: To create an entity view for an ElggObject of subtype blog,
+create a file called:
+
+ views/default/search/object/blog/entity.php
+
+To create an entity view for a custom search mysearch, create a file
+called:
+
+ views/default/search/mysearch/entity.php
+
+
+=== 4.2 Controlling Search Views - Listing
+
+The default search view is search/listing.
+
+For each entity in the returned array, search expects two pieces of
+volatile data: search_matched_title and search_matched_description.
+
+Listing views are discovered in the following order. The first
+search view found is used.
+ search/type/subtype/listing (For entity-based searches only)
+ search/type/listing
+ search/listing
+
+The view is called with the following in $vars:
+ results => The results from the search/type:subtype hook
+ params => The params passed to the search/type:subtype hook
+
+Example: To create a listing view for ElggObjects with the subtype
+of blog, create a file called:
+
+ views/default/search/object/blog/listing.php
+
+To create a listing view for the custom search mysearch, create a file
+called:
+
+ views/default/search/mysearch/listing.php
+
+
+=== 4.3 Controlling Search Views - Layout ===
+
+The default layout view for search is search/layout, which calls
+to `elgg_view_layout(two_column_left_sidebar', '', $entity_results);`
+
+Layouts can be overridden only when not searching all entities.
+
+Layout views are discovered in the following order. The first search
+view found is used.
+
+ search/type/subtype/layout (For entity-based searches only)
+ search/type/layout
+ search/layout
+
+The following parameters are passed in $vars to the layout view:
+
+ body => The HTML formatted list of results.
+ params => The original params for the search.
+
+Example: To create a layout view for ElggObjects with the subtype
+of blog, create a file called:
+
+ views/default/search/object/blog/layout.php
+
+To create a layout view for the custom search mysearch, create a file
+called:
+
+ views/default/search/mysearch/layout.php
+
+
+== 5. Hints and Quirks ==
+
+Use search_get_relevant_substring() to extract and highlight
+relevant substrings for the search_match_title and description.
+
+If searching in 3rd party applications, create a temporary
+ElggObject to hold the results. No need to save it since search
+uses volatile data.
+
+ $entity = new ElggObject();
+ $entity->owner_guid = use_magic_to_match_to_a_real_user();
+ $entity->setVolatileData('search_matched_title',
+ '3rd Party Integration');
+ $entity->setVolatileData('search_matched_description',
+ 'Searching is fun!');
+
+ return array(
+ 'count' => $count,
+ 'entities' => array($entity)
+ );
+
+MySQL's fulltext engine returns *ZERO* rows if more than 50% of
+the rows searched match.
+
+The default search hooks for users and groups ignore subtypes.
+See [trac ticket 1499](http://trac.elgg.org/elgg/ticket/1499)
diff --git a/mod/search/languages/en.php b/mod/search/languages/en.php
new file mode 100644
index 000000000..e3899500f
--- /dev/null
+++ b/mod/search/languages/en.php
@@ -0,0 +1,21 @@
+<?php
+
+$english = array(
+ 'search:enter_term' => 'Enter a search term:',
+ 'search:no_results' => 'No results.',
+ 'search:matched' => 'Matched: ',
+ 'search:results' => 'Results for %s',
+ 'search:no_query' => 'Please enter a query to search.',
+ 'search:search_error' => 'Error',
+
+ 'search:more' => '+%s more %s',
+
+ 'search_types:tags' => 'Tags',
+
+ 'search_types:comments' => 'Comments',
+ 'search:comment_on' => 'Comment on "%s"',
+ 'search:comment_by' => 'by',
+ 'search:unavailable_entity' => 'Unavailable Entity',
+);
+
+add_translation('en', $english);
diff --git a/mod/search/manifest.xml b/mod/search/manifest.xml
new file mode 100644
index 000000000..513d3a6b9
--- /dev/null
+++ b/mod/search/manifest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Search</name>
+ <author>The MITRE Corporation, Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <description>Allow search across entities of the site</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/search/pages/search/index.php b/mod/search/pages/search/index.php
new file mode 100644
index 000000000..fcd95c43e
--- /dev/null
+++ b/mod/search/pages/search/index.php
@@ -0,0 +1,283 @@
+<?php
+/**
+ * Elgg search page
+ *
+ * @todo much of this code should be pulled out into a library of functions
+ */
+
+// Search supports RSS
+global $autofeed;
+$autofeed = true;
+
+// $search_type == all || entities || trigger plugin hook
+$search_type = get_input('search_type', 'all');
+
+// @todo there is a bug in get_input that makes variables have slashes sometimes.
+// @todo is there an example query to demonstrate ^
+// XSS protection is more important that searching for HTML.
+$query = stripslashes(get_input('q', get_input('tag', '')));
+
+// @todo - create function for sanitization of strings for display in 1.8
+// encode <,>,&, quotes and characters above 127
+if (function_exists('mb_convert_encoding')) {
+ $display_query = mb_convert_encoding($query, 'HTML-ENTITIES', 'UTF-8');
+} else {
+ // if no mbstring extension, we just strip characters
+ $display_query = preg_replace("/[^\x01-\x7F]/", "", $query);
+}
+$display_query = htmlspecialchars($display_query, ENT_QUOTES, 'UTF-8', false);
+
+// check that we have an actual query
+if (!$query) {
+ $title = sprintf(elgg_echo('search:results'), "\"$display_query\"");
+
+ $body = elgg_view_title(elgg_echo('search:search_error'));
+ $body .= elgg_echo('search:no_query');
+ $layout = elgg_view_layout('one_sidebar', array('content' => $body));
+ echo elgg_view_page($title, $layout);
+
+ return;
+}
+
+// get limit and offset. override if on search dashboard, where only 2
+// of each most recent entity types will be shown.
+$limit = ($search_type == 'all') ? 2 : get_input('limit', 10);
+$offset = ($search_type == 'all') ? 0 : get_input('offset', 0);
+
+$entity_type = get_input('entity_type', ELGG_ENTITIES_ANY_VALUE);
+$entity_subtype = get_input('entity_subtype', ELGG_ENTITIES_ANY_VALUE);
+$owner_guid = get_input('owner_guid', ELGG_ENTITIES_ANY_VALUE);
+$container_guid = get_input('container_guid', ELGG_ENTITIES_ANY_VALUE);
+$friends = get_input('friends', ELGG_ENTITIES_ANY_VALUE);
+$sort = get_input('sort');
+switch ($sort) {
+ case 'relevance':
+ case 'created':
+ case 'updated':
+ case 'action_on':
+ case 'alpha':
+ break;
+
+ default:
+ $sort = 'relevance';
+ break;
+}
+
+$order = get_input('sort', 'desc');
+if ($order != 'asc' && $order != 'desc') {
+ $order = 'desc';
+}
+
+// set up search params
+$params = array(
+ 'query' => $query,
+ 'offset' => $offset,
+ 'limit' => $limit,
+ 'sort' => $sort,
+ 'order' => $order,
+ 'search_type' => $search_type,
+ 'type' => $entity_type,
+ 'subtype' => $entity_subtype,
+// 'tag_type' => $tag_type,
+ 'owner_guid' => $owner_guid,
+ 'container_guid' => $container_guid,
+// 'friends' => $friends
+ 'pagination' => ($search_type == 'all') ? FALSE : TRUE
+);
+
+$types = get_registered_entity_types();
+$custom_types = elgg_trigger_plugin_hook('search_types', 'get_types', $params, array());
+
+// add sidebar items for all and native types
+// @todo should these maintain any existing type / subtype filters or reset?
+$data = htmlspecialchars(http_build_query(array(
+ 'q' => $query,
+ 'entity_subtype' => $entity_subtype,
+ 'entity_type' => $entity_type,
+ 'owner_guid' => $owner_guid,
+ 'search_type' => 'all',
+ //'friends' => $friends
+)));
+$url = elgg_get_site_url() . "search?$data";
+$menu_item = new ElggMenuItem('all', elgg_echo('all'), $url);
+elgg_register_menu_item('page', $menu_item);
+
+foreach ($types as $type => $subtypes) {
+ // @todo when using index table, can include result counts on each of these.
+ if (is_array($subtypes) && count($subtypes)) {
+ foreach ($subtypes as $subtype) {
+ $label = "item:$type:$subtype";
+
+ $data = htmlspecialchars(http_build_query(array(
+ 'q' => $query,
+ 'entity_subtype' => $subtype,
+ 'entity_type' => $type,
+ 'owner_guid' => $owner_guid,
+ 'search_type' => 'entities',
+ 'friends' => $friends
+ )));
+
+ $url = elgg_get_site_url()."search?$data";
+ $menu_item = new ElggMenuItem($label, elgg_echo($label), $url);
+ elgg_register_menu_item('page', $menu_item);
+ }
+ } else {
+ $label = "item:$type";
+
+ $data = htmlspecialchars(http_build_query(array(
+ 'q' => $query,
+ 'entity_type' => $type,
+ 'owner_guid' => $owner_guid,
+ 'search_type' => 'entities',
+ 'friends' => $friends
+ )));
+
+ $url = elgg_get_site_url() . "search?$data";
+
+ $menu_item = new ElggMenuItem($label, elgg_echo($label), $url);
+ elgg_register_menu_item('page', $menu_item);
+ }
+}
+
+// add sidebar for custom searches
+foreach ($custom_types as $type) {
+ $label = "search_types:$type";
+
+ $data = htmlspecialchars(http_build_query(array(
+ 'q' => $query,
+ 'search_type' => $type,
+ )));
+
+ $url = elgg_get_site_url()."search?$data";
+
+ $menu_item = new ElggMenuItem($label, elgg_echo($label), $url);
+ elgg_register_menu_item('page', $menu_item);
+}
+
+// start the actual search
+$results_html = '';
+
+if ($search_type == 'all' || $search_type == 'entities') {
+ // to pass the correct current search type to the views
+ $current_params = $params;
+ $current_params['search_type'] = 'entities';
+
+ // foreach through types.
+ // if a plugin returns FALSE for subtype ignore it.
+ // if a plugin returns NULL or '' for subtype, pass to generic type search function.
+ // if still NULL or '' or empty(array()) no results found. (== don't show??)
+ foreach ($types as $type => $subtypes) {
+ if ($search_type != 'all' && $entity_type != $type) {
+ continue;
+ }
+
+ if (is_array($subtypes) && count($subtypes)) {
+ foreach ($subtypes as $subtype) {
+ // no need to search if we're not interested in these results
+ // @todo when using index table, allow search to get full count.
+ if ($search_type != 'all' && $entity_subtype != $subtype) {
+ continue;
+ }
+ $current_params['subtype'] = $subtype;
+ $current_params['type'] = $type;
+
+ $results = elgg_trigger_plugin_hook('search', "$type:$subtype", $current_params, NULL);
+ if ($results === FALSE) {
+ // someone is saying not to display these types in searches.
+ continue;
+ } elseif (is_array($results) && !count($results)) {
+ // no results, but results searched in hook.
+ } elseif (!$results) {
+ // no results and not hooked. use default type search.
+ // don't change the params here, since it's really a different subtype.
+ // Will be passed to elgg_get_entities().
+ $results = elgg_trigger_plugin_hook('search', $type, $current_params, array());
+ }
+
+ if (is_array($results['entities']) && $results['count']) {
+ if ($view = search_get_search_view($current_params, 'list')) {
+ $results_html .= elgg_view($view, array(
+ 'results' => $results,
+ 'params' => $current_params,
+ ));
+ }
+ }
+ }
+ }
+
+ // pull in default type entities with no subtypes
+ $current_params['type'] = $type;
+ $current_params['subtype'] = ELGG_ENTITIES_NO_VALUE;
+
+ $results = elgg_trigger_plugin_hook('search', $type, $current_params, array());
+ if ($results === FALSE) {
+ // someone is saying not to display these types in searches.
+ continue;
+ }
+
+ if (is_array($results['entities']) && $results['count']) {
+ if ($view = search_get_search_view($current_params, 'list')) {
+ $results_html .= elgg_view($view, array(
+ 'results' => $results,
+ 'params' => $current_params,
+ ));
+ }
+ }
+ }
+}
+
+// call custom searches
+if ($search_type != 'entities' || $search_type == 'all') {
+ if (is_array($custom_types)) {
+ foreach ($custom_types as $type) {
+ if ($search_type != 'all' && $search_type != $type) {
+ continue;
+ }
+
+ $current_params = $params;
+ $current_params['search_type'] = $type;
+
+ $results = elgg_trigger_plugin_hook('search', $type, $current_params, array());
+
+ if ($results === FALSE) {
+ // someone is saying not to display these types in searches.
+ continue;
+ }
+
+ if (is_array($results['entities']) && $results['count']) {
+ if ($view = search_get_search_view($current_params, 'list')) {
+ $results_html .= elgg_view($view, array(
+ 'results' => $results,
+ 'params' => $current_params,
+ ));
+ }
+ }
+ }
+ }
+}
+
+// highlight search terms
+if ($search_type == 'tags') {
+ $searched_words = array($display_query);
+} else {
+ $searched_words = search_remove_ignored_words($display_query, 'array');
+}
+$highlighted_query = search_highlight_words($searched_words, $display_query);
+
+$body = elgg_view_title(elgg_echo('search:results', array("\"$highlighted_query\"")));
+
+if (!$results_html) {
+ $body .= elgg_view('search/no_results');
+} else {
+ $body .= $results_html;
+}
+
+// this is passed the original params because we don't care what actually
+// matched (which is out of date now anyway).
+// we want to know what search type it is.
+$layout_view = search_get_search_view($params, 'layout');
+$layout = elgg_view($layout_view, array('params' => $params, 'body' => $body));
+
+$title = elgg_echo('search:results', array("\"$display_query\""));
+
+echo elgg_view_page($title, $layout);
diff --git a/mod/search/search_hooks.php b/mod/search/search_hooks.php
new file mode 100644
index 000000000..62058abf1
--- /dev/null
+++ b/mod/search/search_hooks.php
@@ -0,0 +1,462 @@
+<?php
+/**
+ * Elgg core search.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+/**
+ * Return default results for searches on objects.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $type
+ * @param unknown_type $value
+ * @param unknown_type $params
+ * @return unknown_type
+ */
+function search_objects_hook($hook, $type, $value, $params) {
+
+ $db_prefix = elgg_get_config('dbprefix');
+
+ $join = "JOIN {$db_prefix}objects_entity oe ON e.guid = oe.guid";
+ $params['joins'] = array($join);
+ $fields = array('title', 'description');
+
+ $where = search_get_where_sql('oe', $fields, $params, FALSE);
+
+ $params['wheres'] = array($where);
+ $params['count'] = TRUE;
+ $count = elgg_get_entities($params);
+
+ // no need to continue if nothing here.
+ if (!$count) {
+ return array('entities' => array(), 'count' => $count);
+ }
+
+ $params['count'] = FALSE;
+ $entities = elgg_get_entities($params);
+
+ // add the volatile data for why these entities have been returned.
+ foreach ($entities as $entity) {
+ $title = search_get_highlighted_relevant_substrings($entity->title, $params['query']);
+ $entity->setVolatileData('search_matched_title', $title);
+
+ $desc = search_get_highlighted_relevant_substrings($entity->description, $params['query']);
+ $entity->setVolatileData('search_matched_description', $desc);
+ }
+
+ return array(
+ 'entities' => $entities,
+ 'count' => $count,
+ );
+}
+
+/**
+ * Return default results for searches on groups.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $type
+ * @param unknown_type $value
+ * @param unknown_type $params
+ * @return unknown_type
+ */
+function search_groups_hook($hook, $type, $value, $params) {
+ $db_prefix = elgg_get_config('dbprefix');
+
+ $query = sanitise_string($params['query']);
+
+ $join = "JOIN {$db_prefix}groups_entity ge ON e.guid = ge.guid";
+ $params['joins'] = array($join);
+
+ $fields = array('name', 'description');
+
+ // force into boolean mode because we've having problems with the
+ // "if > 50% match 0 sets are returns" problem.
+ $where = search_get_where_sql('ge', $fields, $params, FALSE);
+
+ $params['wheres'] = array($where);
+
+ // override subtype -- All groups should be returned regardless of subtype.
+ $params['subtype'] = ELGG_ENTITIES_ANY_VALUE;
+
+ $params['count'] = TRUE;
+ $count = elgg_get_entities($params);
+
+ // no need to continue if nothing here.
+ if (!$count) {
+ return array('entities' => array(), 'count' => $count);
+ }
+
+ $params['count'] = FALSE;
+ $entities = elgg_get_entities($params);
+
+ // add the volatile data for why these entities have been returned.
+ foreach ($entities as $entity) {
+ $name = search_get_highlighted_relevant_substrings($entity->name, $query);
+ $entity->setVolatileData('search_matched_title', $name);
+
+ $description = search_get_highlighted_relevant_substrings($entity->description, $query);
+ $entity->setVolatileData('search_matched_description', $description);
+ }
+
+ return array(
+ 'entities' => $entities,
+ 'count' => $count,
+ );
+}
+
+/**
+ * Return default results for searches on users.
+ *
+ * @todo add profile field MD searching
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $type
+ * @param unknown_type $value
+ * @param unknown_type $params
+ * @return unknown_type
+ */
+function search_users_hook($hook, $type, $value, $params) {
+ $db_prefix = elgg_get_config('dbprefix');
+
+ $query = sanitise_string($params['query']);
+
+ $params['joins'] = array(
+ "JOIN {$db_prefix}users_entity ue ON e.guid = ue.guid",
+ "JOIN {$db_prefix}metadata md on e.guid = md.entity_guid",
+ "JOIN {$db_prefix}metastrings msv ON n_table.value_id = msv.id"
+ );
+
+ // username and display name
+ $fields = array('username', 'name');
+ $where = search_get_where_sql('ue', $fields, $params, FALSE);
+
+ // profile fields
+ $profile_fields = array_keys(elgg_get_config('profile_fields'));
+
+ // get the where clauses for the md names
+ // can't use egef_metadata() because the n_table join comes too late.
+ $clauses = elgg_entities_get_metastrings_options('metadata', array(
+ 'metadata_names' => $profile_fields,
+ ));
+
+ $params['joins'] = array_merge($clauses['joins'], $params['joins']);
+ // no fulltext index, can't disable fulltext search in this function.
+ // $md_where .= " AND " . search_get_where_sql('msv', array('string'), $params, FALSE);
+ $md_where = "(({$clauses['wheres'][0]}) AND msv.string LIKE '%$query%')";
+
+ $params['wheres'] = array("(($where) OR ($md_where))");
+
+ // override subtype -- All users should be returned regardless of subtype.
+ $params['subtype'] = ELGG_ENTITIES_ANY_VALUE;
+ $params['count'] = true;
+ $count = elgg_get_entities($params);
+
+ // no need to continue if nothing here.
+ if (!$count) {
+ return array('entities' => array(), 'count' => $count);
+ }
+
+ $params['count'] = FALSE;
+ $entities = elgg_get_entities($params);
+
+ // add the volatile data for why these entities have been returned.
+ foreach ($entities as $entity) {
+
+ $title = search_get_highlighted_relevant_substrings($entity->name, $query);
+
+ // include the username if it matches but the display name doesn't.
+ if (false !== strpos($entity->username, $query)) {
+ $username = search_get_highlighted_relevant_substrings($entity->username, $query);
+ $title .= " ($username)";
+ }
+
+ $entity->setVolatileData('search_matched_title', $title);
+
+ $matched = '';
+ foreach ($profile_fields as $md) {
+ $text = $entity->$md;
+ if (stristr($text, $query)) {
+ $matched .= elgg_echo("profile:{$md}") . ': '
+ . search_get_highlighted_relevant_substrings($text, $query);
+ }
+ }
+
+ $entity->setVolatileData('search_matched_description', $matched);
+ }
+
+ return array(
+ 'entities' => $entities,
+ 'count' => $count,
+ );
+}
+
+/**
+ * Return default results for searches on tags.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $type
+ * @param unknown_type $value
+ * @param unknown_type $params
+ * @return unknown_type
+ */
+function search_tags_hook($hook, $type, $value, $params) {
+ $db_prefix = elgg_get_config('dbprefix');
+
+ $valid_tag_names = elgg_get_registered_tag_metadata_names();
+
+ // @todo will need to split this up to support searching multiple tags at once.
+ $query = sanitise_string($params['query']);
+
+ // if passed a tag metadata name, only search on that tag name.
+ // tag_name isn't included in the params because it's specific to
+ // tag searches.
+ if ($tag_names = get_input('tag_names')) {
+ if (is_array($tag_names)) {
+ $search_tag_names = $tag_names;
+ } else {
+ $search_tag_names = array($tag_names);
+ }
+
+ // check these are valid to avoid arbitrary metadata searches.
+ foreach ($search_tag_names as $i => $tag_name) {
+ if (!in_array($tag_name, $valid_tag_names)) {
+ unset($search_tag_names[$i]);
+ }
+ }
+ } else {
+ $search_tag_names = $valid_tag_names;
+ }
+
+ if (!$search_tag_names) {
+ return array('entities' => array(), 'count' => $count);
+ }
+
+ // don't use elgg_get_entities_from_metadata() here because of
+ // performance issues. since we don't care what matches at this point
+ // use an IN clause to grab everything that matches at once and sort
+ // out the matches later.
+ $params['joins'][] = "JOIN {$db_prefix}metadata md on e.guid = md.entity_guid";
+ $params['joins'][] = "JOIN {$db_prefix}metastrings msn on md.name_id = msn.id";
+ $params['joins'][] = "JOIN {$db_prefix}metastrings msv on md.value_id = msv.id";
+
+ $access = get_access_sql_suffix('md');
+ $sanitised_tags = array();
+
+ foreach ($search_tag_names as $tag) {
+ $sanitised_tags[] = '"' . sanitise_string($tag) . '"';
+ }
+
+ $tags_in = implode(',', $sanitised_tags);
+
+ $params['wheres'][] = "(msn.string IN ($tags_in) AND msv.string = '$query' AND $access)";
+
+ $params['count'] = TRUE;
+ $count = elgg_get_entities($params);
+
+ // no need to continue if nothing here.
+ if (!$count) {
+ return array('entities' => array(), 'count' => $count);
+ }
+
+ $params['count'] = FALSE;
+ $entities = elgg_get_entities($params);
+
+ // add the volatile data for why these entities have been returned.
+ foreach ($entities as $entity) {
+ $matched_tags_strs = array();
+
+ // get tags for each tag name requested to find which ones matched.
+ foreach ($search_tag_names as $tag_name) {
+ $tags = $entity->getTags($tag_name);
+
+ // @todo make one long tag string and run this through the highlight
+ // function. This might be confusing as it could chop off
+ // the tag labels.
+ if (in_array(strtolower($query), array_map('strtolower', $tags))) {
+ if (is_array($tags)) {
+ $tag_name_str = elgg_echo("tag_names:$tag_name");
+ $matched_tags_strs[] = "$tag_name_str: " . implode(', ', $tags);
+ }
+ }
+ }
+
+ // different entities have different titles
+ switch($entity->type) {
+ case 'site':
+ case 'user':
+ case 'group':
+ $title_tmp = $entity->name;
+ break;
+
+ case 'object':
+ $title_tmp = $entity->title;
+ break;
+ }
+
+ // Nick told me my idea was dirty, so I'm hard coding the numbers.
+ $title_tmp = strip_tags($title_tmp);
+ if (elgg_strlen($title_tmp) > 297) {
+ $title_str = elgg_substr($title_tmp, 0, 297) . '...';
+ } else {
+ $title_str = $title_tmp;
+ }
+
+ $desc_tmp = strip_tags($entity->description);
+ if (elgg_strlen($desc_tmp) > 297) {
+ $desc_str = elgg_substr($desc_tmp, 0, 297) . '...';
+ } else {
+ $desc_str = $desc_tmp;
+ }
+
+ $tags_str = implode('. ', $matched_tags_strs);
+ $tags_str = search_get_highlighted_relevant_substrings($tags_str, $params['query'], 30, 300, true);
+
+ $entity->setVolatileData('search_matched_title', $title_str);
+ $entity->setVolatileData('search_matched_description', $desc_str);
+ $entity->setVolatileData('search_matched_extra', $tags_str);
+ }
+
+ return array(
+ 'entities' => $entities,
+ 'count' => $count,
+ );
+}
+
+/**
+ * Register tags as a custom search type.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $type
+ * @param unknown_type $value
+ * @param unknown_type $params
+ * @return unknown_type
+ */
+function search_custom_types_tags_hook($hook, $type, $value, $params) {
+ $value[] = 'tags';
+ return $value;
+}
+
+
+/**
+ * Return default results for searches on comments.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $type
+ * @param unknown_type $value
+ * @param unknown_type $params
+ * @return unknown_type
+ */
+function search_comments_hook($hook, $type, $value, $params) {
+ $db_prefix = elgg_get_config('dbprefix');
+
+ $query = sanitise_string($params['query']);
+ $limit = sanitise_int($params['limit']);
+ $offset = sanitise_int($params['offset']);
+ $params['annotation_names'] = array('generic_comment', 'group_topic_post');
+
+ $params['joins'] = array(
+ "JOIN {$db_prefix}annotations a on e.guid = a.entity_guid",
+ "JOIN {$db_prefix}metastrings msn on a.name_id = msn.id",
+ "JOIN {$db_prefix}metastrings msv on a.value_id = msv.id"
+ );
+
+ $fields = array('string');
+
+ // force IN BOOLEAN MODE since fulltext isn't
+ // available on metastrings (and boolean mode doesn't need it)
+ $search_where = search_get_where_sql('msv', $fields, $params, FALSE);
+
+ $container_and = '';
+ if ($params['container_guid'] && $params['container_guid'] !== ELGG_ENTITIES_ANY_VALUE) {
+ $container_and = 'AND e.container_guid = ' . sanitise_int($params['container_guid']);
+ }
+
+ $e_access = get_access_sql_suffix('e');
+ $a_access = get_access_sql_suffix('a');
+ // @todo this can probably be done through the api..
+ $q = "SELECT count(DISTINCT a.id) as total FROM {$db_prefix}annotations a
+ JOIN {$db_prefix}metastrings msn ON a.name_id = msn.id
+ JOIN {$db_prefix}metastrings msv ON a.value_id = msv.id
+ JOIN {$db_prefix}entities e ON a.entity_guid = e.guid
+ WHERE msn.string IN ('generic_comment', 'group_topic_post')
+ AND ($search_where)
+ AND $e_access
+ AND $a_access
+ $container_and
+ ";
+
+ if (!$result = get_data($q)) {
+ return FALSE;
+ }
+
+ $count = $result[0]->total;
+
+ // don't continue if nothing there...
+ if (!$count) {
+ return array ('entities' => array(), 'count' => 0);
+ }
+
+ $q = "SELECT DISTINCT a.*, msv.string as comment FROM {$db_prefix}annotations a
+ JOIN {$db_prefix}metastrings msn ON a.name_id = msn.id
+ JOIN {$db_prefix}metastrings msv ON a.value_id = msv.id
+ JOIN {$db_prefix}entities e ON a.entity_guid = e.guid
+ WHERE msn.string IN ('generic_comment', 'group_topic_post')
+ AND ($search_where)
+ AND $e_access
+ AND $a_access
+ $container_and
+
+ LIMIT $offset, $limit
+ ";
+
+ $comments = get_data($q);
+
+ // @todo if plugins are disabled causing subtypes
+ // to be invalid and there are comments on entities of those subtypes,
+ // the counts will be wrong here and results might not show up correctly,
+ // especially on the search landing page, which only pulls out two results.
+
+ // probably better to check against valid subtypes than to do what I'm doing.
+
+ // need to return actual entities
+ // add the volatile data for why these entities have been returned.
+ $entities = array();
+ foreach ($comments as $comment) {
+ $entity = get_entity($comment->entity_guid);
+
+ // hic sunt dracones
+ if (!$entity) {
+ //continue;
+ $entity = new ElggObject();
+ $entity->setVolatileData('search_unavailable_entity', TRUE);
+ }
+
+ $comment_str = search_get_highlighted_relevant_substrings($comment->comment, $query);
+ $entity->setVolatileData('search_match_annotation_id', $comment->id);
+ $entity->setVolatileData('search_matched_comment', $comment_str);
+ $entity->setVolatileData('search_matched_comment_owner_guid', $comment->owner_guid);
+ $entity->setVolatileData('search_matched_comment_time_created', $comment->time_created);
+ $entities[] = $entity;
+ }
+
+ return array(
+ 'entities' => $entities,
+ 'count' => $count,
+ );
+}
+
+/**
+ * Register comments as a custom search type.
+ *
+ * @param unknown_type $hook
+ * @param unknown_type $type
+ * @param unknown_type $value
+ * @param unknown_type $params
+ * @return unknown_type
+ */
+function search_custom_types_comments_hook($hook, $type, $value, $params) {
+ $value[] = 'comments';
+ return $value;
+}
diff --git a/mod/search/start.php b/mod/search/start.php
new file mode 100644
index 000000000..8a112a3a3
--- /dev/null
+++ b/mod/search/start.php
@@ -0,0 +1,502 @@
+<?php
+/**
+ * Elgg search plugin
+ *
+ */
+
+elgg_register_event_handler('init','system','search_init');
+
+/**
+ * Initialize search plugin
+ */
+function search_init() {
+ global $CONFIG;
+ require_once 'search_hooks.php';
+
+ // page handler for search actions and results
+ elgg_register_page_handler('search', 'search_page_handler');
+
+ // register some default search hooks
+ elgg_register_plugin_hook_handler('search', 'object', 'search_objects_hook');
+ elgg_register_plugin_hook_handler('search', 'user', 'search_users_hook');
+ elgg_register_plugin_hook_handler('search', 'group', 'search_groups_hook');
+
+ // tags and comments are a bit different.
+ // register a search types and a hooks for them.
+ elgg_register_plugin_hook_handler('search_types', 'get_types', 'search_custom_types_tags_hook');
+ elgg_register_plugin_hook_handler('search', 'tags', 'search_tags_hook');
+
+ elgg_register_plugin_hook_handler('search_types', 'get_types', 'search_custom_types_comments_hook');
+ elgg_register_plugin_hook_handler('search', 'comments', 'search_comments_hook');
+
+ // get server min and max allowed chars for ft searching
+ $CONFIG->search_info = array();
+
+ // can't use get_data() here because some servers don't have these globals set,
+ // which throws a db exception.
+ $dblink = get_db_link('read');
+ $r = mysql_query('SELECT @@ft_min_word_len as min, @@ft_max_word_len as max', $dblink);
+ if ($r && ($word_lens = mysql_fetch_assoc($r))) {
+ $CONFIG->search_info['min_chars'] = $word_lens['min'];
+ $CONFIG->search_info['max_chars'] = $word_lens['max'];
+ } else {
+ // uhhh these are good numbers.
+ $CONFIG->search_info['min_chars'] = 4;
+ $CONFIG->search_info['max_chars'] = 90;
+ }
+
+ // add in CSS for search elements
+ elgg_extend_view('css/elgg', 'search/css');
+
+ // extend view for elgg topbar search box
+ elgg_extend_view('page/elements/header', 'search/header');
+}
+
+/**
+ * Page handler for search
+ *
+ * @param array $page Page elements from core page handler
+ * @return bool
+ */
+function search_page_handler($page) {
+
+ // if there is no q set, we're being called from a legacy installation
+ // it expects a search by tags.
+ // actually it doesn't, but maybe it should.
+ // maintain backward compatibility
+ if(!get_input('q', get_input('tag', NULL))) {
+ set_input('q', $page[0]);
+ //set_input('search_type', 'tags');
+ }
+
+ $base_dir = elgg_get_plugins_path() . 'search/pages/search';
+
+ include_once("$base_dir/index.php");
+ return true;
+}
+
+/**
+ * Return a string with highlighted matched queries and relevant context
+ * Determines context based upon occurance and distance of words with each other.
+ *
+ * @param string $haystack
+ * @param string $query
+ * @param int $min_match_context = 30
+ * @param int $max_length = 300
+ * @param bool $tag_match Search is for tags. Don't ignore words.
+ * @return string
+ */
+function search_get_highlighted_relevant_substrings($haystack, $query, $min_match_context = 30, $max_length = 300, $tag_match = false) {
+
+ $haystack = strip_tags($haystack);
+ $haystack_length = elgg_strlen($haystack);
+ $haystack_lc = elgg_strtolower($haystack);
+
+ if (!$tag_match) {
+ $words = search_remove_ignored_words($query, 'array');
+ } else {
+ $words = array();
+ }
+
+ // if haystack < $max_length return the entire haystack w/formatting immediately
+ if ($haystack_length <= $max_length) {
+ $return = search_highlight_words($words, $haystack);
+
+ return $return;
+ }
+
+ // get the starting positions and lengths for all matching words
+ $starts = array();
+ $lengths = array();
+ foreach ($words as $word) {
+ $word = elgg_strtolower($word);
+ $count = elgg_substr_count($haystack_lc, $word);
+ $word_len = elgg_strlen($word);
+ $haystack_len = elgg_strlen($haystack_lc);
+
+ // find the start positions for the words
+ if ($count > 1) {
+ $offset = 0;
+ while (FALSE !== $pos = elgg_strpos($haystack_lc, $word, $offset)) {
+ $start = ($pos - $min_match_context > 0) ? $pos - $min_match_context : 0;
+ $starts[] = $start;
+ $stop = $pos + $word_len + $min_match_context;
+ $lengths[] = $stop - $start;
+ $offset += $pos + $word_len;
+
+ if ($offset >= $haystack_len) {
+ break;
+ }
+ }
+ } else {
+ $pos = elgg_strpos($haystack_lc, $word);
+ $start = ($pos - $min_match_context > 0) ? $pos - $min_match_context : 0;
+ $starts[] = $start;
+ $stop = $pos + $word_len + $min_match_context;
+ $lengths[] = $stop - $start;
+ }
+ }
+
+ $offsets = search_consolidate_substrings($starts, $lengths);
+
+ // figure out if we can adjust the offsets and lengths
+ // in order to return more context
+ $total_length = array_sum($offsets);
+
+ $add_length = 0;
+ if ($total_length < $max_length && $offsets) {
+ $add_length = floor((($max_length - $total_length) / count($offsets)) / 2);
+
+ $starts = array();
+ $lengths = array();
+ foreach ($offsets as $offset => $length) {
+ $start = ($offset - $add_length > 0) ? $offset - $add_length : 0;
+ $length = $length + $add_length;
+ $starts[] = $start;
+ $lengths[] = $length;
+ }
+
+ $offsets = search_consolidate_substrings($starts, $lengths);
+ }
+
+ // sort by order of string size descending (which is roughly
+ // the proximity of matched terms) so we can keep the
+ // substrings with terms closest together and discard
+ // the others as needed to fit within $max_length.
+ arsort($offsets);
+
+ $return_strs = array();
+ $total_length = 0;
+ foreach ($offsets as $start => $length) {
+ $string = trim(elgg_substr($haystack, $start, $length));
+
+ // continue past if adding this substring exceeds max length
+ if ($total_length + $length > $max_length) {
+ continue;
+ }
+
+ $total_length += $length;
+ $return_strs[$start] = $string;
+ }
+
+ // put the strings in order of occurence
+ ksort($return_strs);
+
+ // add ...s where needed
+ $return = implode('...', $return_strs);
+ if (!array_key_exists(0, $return_strs)) {
+ $return = "...$return";
+ }
+
+ // add to end of string if last substring doesn't hit the end.
+ $starts = array_keys($return_strs);
+ $last_pos = $starts[count($starts)-1];
+ if ($last_pos + elgg_strlen($return_strs[$last_pos]) < $haystack_length) {
+ $return .= '...';
+ }
+
+ $return = search_highlight_words($words, $return);
+
+ return $return;
+}
+
+
+/**
+ * Takes an array of offsets and lengths and consolidates any
+ * overlapping entries, returning an array of new offsets and lengths
+ *
+ * Offsets and lengths are specified in separate arrays because of possible
+ * index collisions with the offsets.
+ *
+ * @param array $offsets
+ * @param array $lengths
+ * @return array
+ */
+function search_consolidate_substrings($offsets, $lengths) {
+ // sort offsets by occurence
+ asort($offsets, SORT_NUMERIC);
+
+ // reset the indexes maintaining association with the original offsets.
+ $offsets = array_merge($offsets);
+
+ $new_lengths = array();
+ foreach ($offsets as $i => $offset) {
+ $new_lengths[] = $lengths[$i];
+ }
+
+ $lengths = $new_lengths;
+
+ $return = array();
+ $count = count($offsets);
+ for ($i=0; $i<$count; $i++) {
+ $offset = $offsets[$i];
+ $length = $lengths[$i];
+ $end_pos = $offset + $length;
+
+ // find the next entry that doesn't overlap
+ while (array_key_exists($i+1, $offsets) && $end_pos > $offsets[$i+1]) {
+ $i++;
+ if (!array_key_exists($i, $offsets)) {
+ break;
+ }
+ $end_pos = $lengths[$i] + $offsets[$i];
+ }
+
+ $length = $end_pos - $offset;
+
+ // will never have a colliding offset, so can return as a single array
+ $return[$offset] = $length;
+ }
+
+ return $return;
+}
+
+/**
+ * Safely highlights the words in $words found in $string avoiding recursion
+ *
+ * @param array $words
+ * @param string $string
+ * @return string
+ */
+function search_highlight_words($words, $string) {
+ $i = 1;
+ $replace_html = array(
+ 'strong' => rand(10000, 99999),
+ 'class' => rand(10000, 99999),
+ 'search-highlight' => rand(10000, 99999),
+ 'search-highlight-color' => rand(10000, 99999)
+ );
+
+ foreach ($words as $word) {
+ // remove any boolean mode operators
+ $word = preg_replace("/([\-\+~])([\w]+)/i", '$2', $word);
+
+ // escape the delimiter and any other regexp special chars
+ $word = preg_quote($word, '/');
+
+ $search = "/($word)/i";
+
+ // @todo
+ // must replace with placeholders in case one of the search terms is
+ // in the html string.
+ // later, will replace the placeholders with the actual html.
+ // Yeah this is hacky. I'm tired.
+ $strong = $replace_html['strong'];
+ $class = $replace_html['class'];
+ $highlight = $replace_html['search-highlight'];
+ $color = $replace_html['search-highlight-color'];
+
+ $replace = "<$strong $class=\"$highlight $color{$i}\">$1</$strong>";
+ $string = preg_replace($search, $replace, $string);
+ $i++;
+ }
+
+ foreach ($replace_html as $replace => $search) {
+ $string = str_replace($search, $replace, $string);
+ }
+
+ return $string;
+}
+
+/**
+ * Returns a query with stop and too short words removed.
+ * (Unless the entire query is < ft_min_word_chars, in which case
+ * it's taken literally.)
+ *
+ * @param array $query
+ * @param str $format Return as an array or a string
+ * @return mixed
+ */
+function search_remove_ignored_words($query, $format = 'array') {
+ global $CONFIG;
+
+ // don't worry about "s or boolean operators
+ //$query = str_replace(array('"', '-', '+', '~'), '', stripslashes(strip_tags($query)));
+ $query = stripslashes(strip_tags($query));
+
+ $words = explode(' ', $query);
+
+ $min_chars = $CONFIG->search_info['min_chars'];
+ // if > ft_min_word we're not running in literal mode.
+ if (elgg_strlen($query) >= $min_chars) {
+ // clean out any words that are ignored by mysql
+ foreach ($words as $i => $word) {
+ if (elgg_strlen($word) < $min_chars) {
+ unset ($words[$i]);
+ }
+ }
+ }
+
+ if ($format == 'string') {
+ return implode(' ', $words);
+ }
+
+ return $words;
+}
+
+
+/**
+ * Passes results, and original params to the view functions for
+ * search type.
+ *
+ * @param array $results
+ * @param array $params
+ * @param string $view_type = list, entity or layout
+ * @return string
+ */
+function search_get_search_view($params, $view_type) {
+ switch ($view_type) {
+ case 'list':
+ case 'entity':
+ case 'layout':
+ break;
+
+ default:
+ return FALSE;
+ }
+
+ $view_order = array();
+
+ // check if there's a special search list view for this type:subtype
+ if (isset($params['type']) && $params['type'] && isset($params['subtype']) && $params['subtype']) {
+ $view_order[] = "search/{$params['type']}/{$params['subtype']}/$view_type";
+ }
+
+ // also check for the default type
+ if (isset($params['type']) && $params['type']) {
+ $view_order[] = "search/{$params['type']}/$view_type";
+ }
+
+ // check search types
+ if (isset($params['search_type']) && $params['search_type']) {
+ $view_order[] = "search/{$params['search_type']}/$view_type";
+ }
+
+ // finally default to a search list default
+ $view_order[] = "search/$view_type";
+
+ foreach ($view_order as $view) {
+ if (elgg_view_exists($view)) {
+ return $view;
+ }
+ }
+
+ return FALSE;
+}
+
+/**
+ * Returns a where clause for a search query.
+ *
+ * @param str $table Prefix for table to search on
+ * @param array $fields Fields to match against
+ * @param array $params Original search params
+ * @return str
+ */
+function search_get_where_sql($table, $fields, $params, $use_fulltext = TRUE) {
+ global $CONFIG;
+ $query = $params['query'];
+
+ // add the table prefix to the fields
+ foreach ($fields as $i => $field) {
+ if ($table) {
+ $fields[$i] = "$table.$field";
+ }
+ }
+
+ $where = '';
+
+ // if query is shorter than the min for fts words
+ // it's likely a single acronym or similar
+ // switch to literal mode
+ if (elgg_strlen($query) < $CONFIG->search_info['min_chars']) {
+ $likes = array();
+ $query = sanitise_string($query);
+ foreach ($fields as $field) {
+ $likes[] = "$field LIKE '%$query%'";
+ }
+ $likes_str = implode(' OR ', $likes);
+ $where = "($likes_str)";
+ } else {
+ // if we're not using full text, rewrite the query for bool mode.
+ // exploiting a feature(ish) of bool mode where +-word is the same as -word
+ if (!$use_fulltext) {
+ $query = '+' . str_replace(' ', ' +', $query);
+ }
+
+ // if using advanced, boolean operators, or paired "s, switch into boolean mode
+ $booleans_used = preg_match("/([\-\+~])([\w]+)/i", $query);
+ $advanced_search = (isset($params['advanced_search']) && $params['advanced_search']);
+ $quotes_used = (elgg_substr_count($query, '"') >= 2);
+
+ if (!$use_fulltext || $booleans_used || $advanced_search || $quotes_used) {
+ $options = 'IN BOOLEAN MODE';
+ } else {
+ // natural language mode is default and this keyword isn't supported in < 5.1
+ //$options = 'IN NATURAL LANGUAGE MODE';
+ $options = '';
+ }
+
+ // if short query, use query expansion.
+ // @todo doesn't seem to be working well.
+// if (elgg_strlen($query) < 5) {
+// $options .= ' WITH QUERY EXPANSION';
+// }
+ $query = sanitise_string($query);
+
+ $fields_str = implode(',', $fields);
+ $where = "(MATCH ($fields_str) AGAINST ('$query' $options))";
+ }
+
+ return $where;
+}
+
+
+/**
+ * Returns ORDER BY sql for insertion into elgg_get_entities().
+ *
+ * @param str $entities_table Prefix for entities table.
+ * @param str $type_table Prefix for the type table.
+ * @param str $sort ORDER BY part
+ * @param str $order ASC or DESC
+ * @return str
+ */
+function search_get_order_by_sql($entities_table, $type_table, $sort, $order) {
+
+ $on = NULL;
+
+ switch ($sort) {
+ default:
+ case 'relevance':
+ // default is relevance descending.
+ // ascending relevancy is silly and complicated.
+ $on = '';
+ break;
+ case 'created':
+ $on = "$entities_table.time_created";
+ break;
+ case 'updated':
+ $on = "$entities_table.time_updated";
+ break;
+ case 'action_on':
+ // @todo not supported yet in core
+ $on = '';
+ break;
+ case 'alpha':
+ // @todo not support yet because both title
+ // and name columns are used for this depending
+ // on the entity, which we don't always know. >:O
+ break;
+ }
+ $order = strtolower($order);
+ if ($order != 'asc' && $order != 'desc') {
+ $order = 'DESC';
+ }
+
+ if ($on) {
+ $order_by = "$on $order";
+ } else {
+ $order_by = '';
+ }
+
+ return $order_by;
+}
diff --git a/mod/search/views/default/search/comments/entity.php b/mod/search/views/default/search/comments/entity.php
new file mode 100644
index 000000000..005bb270c
--- /dev/null
+++ b/mod/search/views/default/search/comments/entity.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Default search view for a comment
+ *
+ * @uses $vars['entity']
+ */
+
+$entity = $vars['entity'];
+
+$owner = get_entity($entity->getVolatileData('search_matched_comment_owner_guid'));
+
+if ($owner instanceof ElggUser) {
+ $icon = elgg_view_entity_icon($owner, 'tiny');
+} else {
+ $icon = '';
+}
+
+// @todo Sometimes we find comments on entities we can't display...
+if ($entity->getVolatileData('search_unavailable_entity')) {
+ $title = elgg_echo('search:comment_on', array(elgg_echo('search:unavailable_entity')));
+ // keep anchor for formatting.
+ $title = "<a>$title</a>";
+} else {
+ if ($entity->getType() == 'object') {
+ $title = $entity->title;
+ } else {
+ $title = $entity->name;
+ }
+
+ if (!$title) {
+ $title = elgg_echo('item:' . $entity->getType() . ':' . $entity->getSubtype());
+ }
+
+ if (!$title) {
+ $title = elgg_echo('item:' . $entity->getType());
+ }
+
+ $title = elgg_echo('search:comment_on', array($title));
+
+ // @todo this should use something like $comment->getURL()
+ $url = $entity->getURL() . '#comment_' . $entity->getVolatileData('search_match_annotation_id');
+ $title = "<a href=\"$url\">$title</a>";
+}
+
+$description = $entity->getVolatileData('search_matched_comment');
+$tc = $entity->getVolatileData('search_matched_comment_time_created');;
+$time = elgg_view_friendly_time($tc);
+
+$body = "<p class=\"mbn\">$title</p>$description";
+$body .= "<p class=\"elgg-subtext\">$time</p>";
+
+echo elgg_view_image_block($icon, $body);
diff --git a/mod/search/views/default/search/css.php b/mod/search/views/default/search/css.php
new file mode 100644
index 000000000..30ff45172
--- /dev/null
+++ b/mod/search/views/default/search/css.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Elgg Search css
+ *
+ */
+?>
+
+/**********************************
+Search plugin
+***********************************/
+.elgg-search-header {
+ bottom: 5px;
+ height: 23px;
+ position: absolute;
+ right: 0;
+}
+.elgg-search input[type=text] {
+ width: 230px;
+}
+.elgg-search input[type=submit] {
+ display: none;
+}
+.elgg-search input[type=text] {
+ -webkit-border-radius: 10px;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
+
+ border: 1px solid #71b9f7;
+ color: white;
+ font-size: 12px;
+ font-weight: bold;
+ padding: 2px 4px 2px 26px;
+ background: transparent url(<?php echo elgg_get_site_url(); ?>_graphics/elgg_sprites.png) no-repeat 2px -934px;
+}
+.elgg-search input[type=text]:focus, .elgg-search input[type=text]:active {
+ background-color: white;
+ background-position: 2px -916px;
+ border: 1px solid white;
+ color: #0054A7;
+}
+
+.search-list li {
+ padding: 5px 0 0;
+}
+.search-heading-category {
+ margin-top: 20px;
+ color: #666666;
+}
+
+.search-highlight {
+ background-color: #bbdaf7;
+}
+.search-highlight-color1 {
+ background-color: #bbdaf7;
+}
+.search-highlight-color2 {
+ background-color: #A0FFFF;
+}
+.search-highlight-color3 {
+ background-color: #FDFFC3;
+}
+.search-highlight-color4 {
+ background-color: #ccc;
+}
+.search-highlight-color5 {
+ background-color: #4690d6;
+}
diff --git a/mod/search/views/default/search/entity.php b/mod/search/views/default/search/entity.php
new file mode 100644
index 000000000..e04d08836
--- /dev/null
+++ b/mod/search/views/default/search/entity.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Default view for an entity returned in a search
+ *
+ * Display largely controlled by a set of overrideable volatile data:
+ * - search_icon (defaults to entity icon)
+ * - search_matched_title
+ * - search_matched_description
+ * - search_matched_extra
+ * - search_url (defaults to entity->getURL())
+ * - search_time (defaults to entity->time_updated or entity->time_created)
+ *
+ * @uses $vars['entity'] Entity returned in a search
+ */
+
+$entity = $vars['entity'];
+
+$icon = $entity->getVolatileData('search_icon');
+if (!$icon) {
+ // display the entity's owner by default if available.
+ // @todo allow an option to switch to displaying the entity's icon instead.
+ $type = $entity->getType();
+ if ($type == 'user' || $type == 'group') {
+ $icon = elgg_view_entity_icon($entity, 'tiny');
+ } elseif ($owner = $entity->getOwnerEntity()) {
+ $icon = elgg_view_entity_icon($owner, 'tiny');
+ } else {
+ // display a generic icon if no owner, though there will probably be
+ // other problems if the owner can't be found.
+ $icon = elgg_view_entity_icon($entity, 'tiny');
+ }
+}
+
+$title = $entity->getVolatileData('search_matched_title');
+$description = $entity->getVolatileData('search_matched_description');
+$extra_info = $entity->getVolatileData('search_matched_extra');
+$url = $entity->getVolatileData('search_url');
+
+if (!$url) {
+ $url = $entity->getURL();
+}
+
+$title = "<a href=\"$url\">$title</a>";
+$time = $entity->getVolatileData('search_time');
+if (!$time) {
+ $tc = $entity->time_created;
+ $tu = $entity->time_updated;
+ $time = elgg_view_friendly_time(($tu > $tc) ? $tu : $tc);
+}
+
+$body = "<p class=\"mbn\">$title</p>$description";
+if ($extra_info) {
+ $body .= "<p class=\"elgg-subtext\">$extra_info</p>";
+}
+$body .= "<p class=\"elgg-subtext\">$time</p>";
+
+echo elgg_view_image_block($icon, $body);
diff --git a/mod/search/views/default/search/header.php b/mod/search/views/default/search/header.php
new file mode 100644
index 000000000..6f8654c13
--- /dev/null
+++ b/mod/search/views/default/search/header.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Search box in page header
+ */
+
+echo elgg_view('search/search_box', array('class' => 'elgg-search-header')); \ No newline at end of file
diff --git a/mod/search/views/default/search/layout.php b/mod/search/views/default/search/layout.php
new file mode 100644
index 000000000..eb597836e
--- /dev/null
+++ b/mod/search/views/default/search/layout.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * The default search layout
+ *
+ * @uses $vars['body']
+ */
+
+echo elgg_view_layout('one_sidebar', array('content' => $vars['body'])); \ No newline at end of file
diff --git a/mod/search/views/default/search/list.php b/mod/search/views/default/search/list.php
new file mode 100644
index 000000000..1ed40be1b
--- /dev/null
+++ b/mod/search/views/default/search/list.php
@@ -0,0 +1,115 @@
+<?php
+/**
+ * List a section of search results corresponding in a particular type/subtype
+ * or search type (comments for example)
+ *
+ * @uses $vars['results'] Array of data related to search results including:
+ * - 'entities' Array of entities to be displayed
+ * - 'count' Total number of results
+ * @uses $vars['params'] Array of parameters including:
+ * - 'type' Entity type
+ * - 'subtype' Entity subtype
+ * - 'search_type' Type of search: 'entities', 'comments', 'tags'
+ * - 'offset' Offset in search results
+ * - 'limit' Number of results per page
+ * - 'pagination' Display pagination?
+ */
+
+$entities = $vars['results']['entities'];
+$count = $vars['results']['count'] - count($entities);
+
+if (!is_array($entities) || !count($entities)) {
+ return FALSE;
+}
+
+$query = http_build_query(
+ array(
+ 'q' => $vars['params']['query'],
+ 'entity_type' => $vars['params']['type'],
+ 'entity_subtype' => $vars['params']['subtype'],
+ 'limit' => $vars['params']['limit'],
+ 'offset' => $vars['params']['offset'],
+ 'search_type' => $vars['params']['search_type'],
+ //@todo include vars for sorting, order, and friend-only.
+ )
+);
+
+$url = elgg_get_site_url() . "search?$query";
+
+// get pagination
+if (array_key_exists('pagination', $vars['params']) && $vars['params']['pagination']) {
+ $nav = elgg_view('navigation/pagination',array(
+ 'base_url' => $url,
+ 'offset' => $vars['params']['offset'],
+ 'count' => $vars['results']['count'],
+ 'limit' => $vars['params']['limit'],
+ ));
+} else {
+ $nav = '';
+}
+
+// figure out what we're dealing with.
+$type_str = NULL;
+
+if (array_key_exists('type', $vars['params']) && array_key_exists('subtype', $vars['params'])) {
+ $type_str_tmp = "item:{$vars['params']['type']}:{$vars['params']['subtype']}";
+ $type_str_echoed = elgg_echo($type_str_tmp);
+ if ($type_str_echoed != $type_str_tmp) {
+ $type_str = $type_str_echoed;
+ }
+}
+
+if (!$type_str && array_key_exists('type', $vars['params'])) {
+ $type_str = elgg_echo("item:{$vars['params']['type']}");
+}
+
+if (!$type_str) {
+ $type_str = elgg_echo('search:unknown_entity');
+}
+
+// allow overrides for titles
+$search_type_str = elgg_echo("search_types:{$vars['params']['search_type']}");
+if (array_key_exists('search_type', $vars['params'])
+ && $search_type_str != "search_types:{$vars['params']['search_type']}") {
+
+ $type_str = $search_type_str;
+}
+
+// get any more links.
+$more_check = $vars['results']['count'] - ($vars['params']['offset'] + $vars['params']['limit']);
+$more = ($more_check > 0) ? $more_check : 0;
+
+if ($more) {
+ $title_key = ($more == 1) ? 'comment' : 'comments';
+ $more_str = elgg_echo('search:more', array($count, $type_str));
+ $more_url = elgg_http_remove_url_query_element($url, 'limit');
+ $more_link = "<li class='elgg-item'><a href=\"$more_url\">$more_str</a></li>";
+} else {
+ $more_link = '';
+}
+
+// @todo once elgg_view_title() supports passing a $vars array use it
+$body = elgg_view('page/elements/title', array(
+ 'title' => $type_str,
+ 'class' => 'search-heading-category',
+));
+
+$view = search_get_search_view($vars['params'], 'entity');
+if ($view) {
+ $body .= '<ul class="elgg-list search-list">';
+ foreach ($entities as $entity) {
+ $id = "elgg-{$entity->getType()}-{$entity->getGUID()}";
+ $body .= "<li id=\"$id\" class=\"elgg-item\">";
+ $body .= elgg_view($view, array(
+ 'entity' => $entity,
+ 'params' => $vars['params'],
+ 'results' => $vars['results']
+ ));
+ $body .= '</li>';
+ }
+ $body .= $more_link;
+ $body .= '</ul>';
+}
+
+echo $body;
+echo $nav;
diff --git a/mod/search/views/default/search/no_results.php b/mod/search/views/default/search/no_results.php
new file mode 100644
index 000000000..0e9a5e295
--- /dev/null
+++ b/mod/search/views/default/search/no_results.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * No results from search
+ */
+
+echo elgg_autop(elgg_echo('search:no_results'));
diff --git a/mod/search/views/default/search/search_box.php b/mod/search/views/default/search/search_box.php
new file mode 100644
index 000000000..7474a280c
--- /dev/null
+++ b/mod/search/views/default/search/search_box.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Search box
+ *
+ * @uses $vars['value'] Current search query
+ * @uses $vars['class'] Additional class
+ */
+
+if (array_key_exists('value', $vars)) {
+ $value = $vars['value'];
+} elseif ($value = get_input('q', get_input('tag', NULL))) {
+ $value = $value;
+} else {
+ $value = elgg_echo('search');
+}
+
+$class = "elgg-search";
+if (isset($vars['class'])) {
+ $class = "$class {$vars['class']}";
+}
+
+// @todo - why the strip slashes?
+$value = stripslashes($value);
+
+// @todo - create function for sanitization of strings for display in 1.8
+// encode <,>,&, quotes and characters above 127
+if (function_exists('mb_convert_encoding')) {
+ $display_query = mb_convert_encoding($value, 'HTML-ENTITIES', 'UTF-8');
+} else {
+ // if no mbstring extension, we just strip characters
+ $display_query = preg_replace("/[^\x01-\x7F]/", "", $value);
+}
+$display_query = htmlspecialchars($display_query, ENT_QUOTES, 'UTF-8', false);
+
+?>
+
+<form class="<?php echo $class; ?>" action="<?php echo elgg_get_site_url(); ?>search" method="get">
+ <fieldset>
+ <input type="text" class="search-input" size="21" name="q" value="<?php echo $display_query; ?>" onblur="if (this.value=='') { this.value='<?php echo elgg_echo('search'); ?>' }" onfocus="if (this.value=='<?php echo elgg_echo('search'); ?>') { this.value='' };" />
+ <input type="hidden" name="search_type" value="all" />
+ <input type="submit" value="<?php echo elgg_echo('search:go'); ?>" class="search-submit-button" />
+ </fieldset>
+</form>
diff --git a/mod/search/views/default/search/startblurb.php b/mod/search/views/default/search/startblurb.php
new file mode 100644
index 000000000..d6394da0d
--- /dev/null
+++ b/mod/search/views/default/search/startblurb.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @todo This doesn't appear to be called by anything. Look into removing.
+ */
+
+echo elgg_echo("tag:search:startblurb", array($vars['query']));
diff --git a/mod/search/views/rss/search/comments/entity.php b/mod/search/views/rss/search/comments/entity.php
new file mode 100644
index 000000000..869779f35
--- /dev/null
+++ b/mod/search/views/rss/search/comments/entity.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Search comment view for RSS feeds.
+ *
+ * @uses $vars['entity']
+ */
+
+$entity = $vars['entity'];
+
+$author_name = '';
+$comment_author_guid = $entity->getVolatileData('search_matched_comment_owner_guid');
+$author = get_user($comment_author_guid);
+if ($author) {
+ $author_name = $author->name;
+}
+
+// @todo Sometimes we find comments on entities we can't display...
+if ($entity->getVolatileData('search_unavailable_entity')) {
+ $title = elgg_echo('search:comment_on', array(elgg_echo('search:unavailable_entity')));
+} else {
+ if ($entity->getType() == 'object') {
+ $title = $entity->title;
+ } else {
+ $title = $entity->name;
+ }
+
+ if (!$title) {
+ $title = elgg_echo('item:' . $entity->getType() . ':' . $entity->getSubtype());
+ }
+
+ if (!$title) {
+ $title = elgg_echo('item:' . $entity->getType());
+ }
+
+ $title = elgg_echo('search:comment_on', array($title));
+ $title .= ' ' . elgg_echo('search:comment_by') . ' ' . $author_name;
+ $url = $entity->getURL() . '#annotation-' . $entity->getVolatileData('search_match_annotation_id');
+}
+
+$description = $entity->getVolatileData('search_matched_comment');
+$tc = $entity->getVolatileData('search_matched_comment_time_created');;
+
+?>
+
+<item>
+ <guid isPermaLink='true'><?php echo htmlspecialchars($url); ?></guid>
+ <pubDate><?php echo date("r", $tc) ?></pubDate>
+ <link><?php echo htmlspecialchars($url); ?></link>
+ <title><![CDATA[<?php echo $title; ?>]]></title>
+ <description><![CDATA[<?php echo $description; ?>]]></description>
+</item>
diff --git a/mod/search/views/rss/search/entity.php b/mod/search/views/rss/search/entity.php
new file mode 100644
index 000000000..10d28e8e1
--- /dev/null
+++ b/mod/search/views/rss/search/entity.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Search entity view for RSS feeds.
+ *
+ * @uses $vars['entity']
+ */
+
+if (!array_key_exists('entity', $vars) || !($vars['entity'] instanceof ElggEntity)) {
+ return FALSE;
+}
+
+// title cannot contain HTML but descriptions can.
+$title = strip_tags($vars['entity']->getVolatileData('search_matched_title'));
+$description = $vars['entity']->getVolatileData('search_matched_description');
+
+?>
+
+<item>
+ <guid isPermaLink='true'><?php echo htmlspecialchars($vars['entity']->getURL()); ?></guid>
+ <pubDate><?php echo date("r", $vars['entity']->time_created) ?></pubDate>
+ <link><?php echo htmlspecialchars($vars['entity']->getURL()); ?></link>
+ <title><![CDATA[<?php echo $title; ?>]]></title>
+ <description><![CDATA[<?php echo $description; ?>]]></description>
+</item>
diff --git a/mod/search/views/rss/search/layout.php b/mod/search/views/rss/search/layout.php
new file mode 100644
index 000000000..2c255a9cc
--- /dev/null
+++ b/mod/search/views/rss/search/layout.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Search layout for RSS
+ */
+
+echo $vars['body'];
diff --git a/mod/search/views/rss/search/list.php b/mod/search/views/rss/search/list.php
new file mode 100644
index 000000000..32082fd31
--- /dev/null
+++ b/mod/search/views/rss/search/list.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * List a section of search results for RSS feeds.
+ *
+ * @uses $vars['results']
+ * @uses $vars['params']
+ */
+
+$entities = $vars['results']['entities'];
+
+if (!is_array($entities) || !count($entities)) {
+ return FALSE;
+}
+
+foreach ($entities as $entity) {
+ if ($view = search_get_search_view($vars['params'], 'entity')) {
+ $body .= elgg_view($view, array(
+ 'entity' => $entity,
+ 'params' => $vars['params'],
+ 'results' => $vars['results']
+ ));
+ }
+}
+
+echo $body; \ No newline at end of file
diff --git a/mod/simple_faq b/mod/simple_faq
new file mode 160000
+Subproject 1852794b849fcbab29c2b37ca6c106dc0cb9903
diff --git a/mod/tagcloud/languages/en.php b/mod/tagcloud/languages/en.php
new file mode 100644
index 000000000..f64e0553a
--- /dev/null
+++ b/mod/tagcloud/languages/en.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Tag cloud English language file
+ */
+
+$english = array(
+ 'tagcloud:widget:title' => 'Tag Cloud',
+ 'tagcloud:widget:description' => 'Tag cloud',
+ 'tagcloud:widget:numtags' => 'Number of tags to show',
+);
+
+add_translation('en', $english);
diff --git a/mod/tagcloud/manifest.xml b/mod/tagcloud/manifest.xml
new file mode 100644
index 000000000..c0f89f35e
--- /dev/null
+++ b/mod/tagcloud/manifest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Tag Cloud</name>
+ <author>Cash Costello</author>
+ <version>1.0</version>
+ <category>bundled</category>
+ <category>widget</category>
+ <description>Widget-based tag clouds.</description>
+ <website>http://cashcostello.com/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/tagcloud/start.php b/mod/tagcloud/start.php
new file mode 100644
index 000000000..663cec0e6
--- /dev/null
+++ b/mod/tagcloud/start.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Tagcloud plugin
+ */
+
+elgg_register_event_handler('init', 'system', 'tagcloud_init');
+
+function tagcloud_init() {
+ elgg_register_widget_type('tagcloud', elgg_echo('tagcloud:widget:title'), elgg_echo('tagcloud:widget:description'));
+}
diff --git a/mod/tagcloud/views/default/widgets/tagcloud/content.php b/mod/tagcloud/views/default/widgets/tagcloud/content.php
new file mode 100644
index 000000000..af1d6a5f6
--- /dev/null
+++ b/mod/tagcloud/views/default/widgets/tagcloud/content.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Tag cloud widget
+ */
+
+$num_items = $vars['entity']->num_items;
+
+elgg_push_context('tags');
+$options = array(
+ 'owner_guid' => elgg_get_page_owner_guid(),
+ 'threshold' => 1,
+ 'limit' => $num_items,
+ 'tag_name' => 'tags',
+);
+echo elgg_view_tagcloud($options);
+elgg_pop_context();
diff --git a/mod/tagcloud/views/default/widgets/tagcloud/edit.php b/mod/tagcloud/views/default/widgets/tagcloud/edit.php
new file mode 100644
index 000000000..919c8ccd4
--- /dev/null
+++ b/mod/tagcloud/views/default/widgets/tagcloud/edit.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Tagcloud widget edit view
+ *
+ */
+
+// set default value
+if (!isset($vars['entity']->num_items)) {
+ $vars['entity']->num_items = 30;
+}
+
+$params = array(
+ 'name' => 'params[num_items]',
+ 'value' => $vars['entity']->num_items,
+ 'options' => array(10, 20, 30, 50, 100),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<p>
+ <?php echo elgg_echo('tagcloud:widget:numtags'); ?>:
+ <?php echo $dropdown; ?>
+</p>
diff --git a/mod/thewire/actions/add.php b/mod/thewire/actions/add.php
new file mode 100644
index 000000000..6b3d8d5ba
--- /dev/null
+++ b/mod/thewire/actions/add.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Action for adding a wire post
+ *
+ */
+
+// don't filter since we strip and filter escapes some characters
+$body = get_input('body', '', false);
+
+$access_id = ACCESS_PUBLIC;
+$method = 'site';
+$parent_guid = (int) get_input('parent_guid');
+
+// make sure the post isn't blank
+if (empty($body)) {
+ register_error(elgg_echo("thewire:blank"));
+ forward(REFERER);
+}
+
+$guid = thewire_save_post($body, elgg_get_logged_in_user_guid(), $access_id, $parent_guid, $method);
+if (!$guid) {
+ register_error(elgg_echo("thewire:error"));
+ forward(REFERER);
+}
+
+// Send response to original poster if not already registered to receive notification
+if ($parent_guid) {
+ thewire_send_response_notification($guid, $parent_guid, $user);
+ $parent = get_entity($parent_guid);
+ forward("thewire/thread/$parent->wire_thread");
+}
+
+system_message(elgg_echo("thewire:posted"));
+forward(REFERER);
diff --git a/mod/thewire/actions/delete.php b/mod/thewire/actions/delete.php
new file mode 100644
index 000000000..38355d25e
--- /dev/null
+++ b/mod/thewire/actions/delete.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Action for deleting a wire post
+ *
+ */
+
+// Get input data
+$guid = (int) get_input('guid');
+
+// Make sure we actually have permission to edit
+$thewire = get_entity($guid);
+if ($thewire->getSubtype() == "thewire" && $thewire->canEdit()) {
+
+ // unset reply metadata on children
+ $children = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'parent',
+ 'relationship_guid' => $post_guid,
+ 'inverse_relationship' => true,
+ ));
+ if ($children) {
+ foreach ($children as $child) {
+ $child->reply = false;
+ }
+ }
+
+ // Get owning user
+ $owner = get_entity($thewire->getOwnerGUID());
+
+ // Delete it
+ $rowsaffected = $thewire->delete();
+ if ($rowsaffected > 0) {
+ // Success message
+ system_message(elgg_echo("thewire:deleted"));
+ } else {
+ register_error(elgg_echo("thewire:notdeleted"));
+ }
+
+ forward("thewire/owner/" . $owner->username);
+}
diff --git a/mod/thewire/activate.php b/mod/thewire/activate.php
new file mode 100644
index 000000000..1cc64ceb1
--- /dev/null
+++ b/mod/thewire/activate.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Register the ElggWire class for the object/thewire subtype
+ */
+
+if (get_subtype_id('object', 'thewire')) {
+ update_subtype('object', 'thewire', 'ElggWire');
+} else {
+ add_subtype('object', 'thewire', 'ElggWire');
+}
diff --git a/mod/thewire/classes/ElggWire.php b/mod/thewire/classes/ElggWire.php
new file mode 100644
index 000000000..9c92dd8f2
--- /dev/null
+++ b/mod/thewire/classes/ElggWire.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * ElggWire Class
+ *
+ * @property string $method The method used to create the wire post (site, sms, api)
+ * @property bool $reply Whether this wire post was a reply to another post
+ * @property int $wire_thread The identifier of the thread for this wire post
+ */
+class ElggWire extends ElggObject {
+
+ /**
+ * Set subtype to thewire
+ *
+ * @return void
+ */
+ protected function initializeAttributes() {
+ parent::initializeAttributes();
+
+ $this->attributes['subtype'] = 'thewire';
+ }
+
+ /**
+ * Can a user comment on this wire post?
+ *
+ * @see ElggObject::canComment()
+ *
+ * @param int $user_guid User guid (default is logged in user)
+ * @return bool
+ * @since 1.8.0
+ */
+ public function canComment($user_guid = 0) {
+ $result = parent::canComment($user_guid);
+ if ($result == false) {
+ return $result;
+ }
+
+ return false;
+ }
+
+}
diff --git a/mod/thewire/deactivate.php b/mod/thewire/deactivate.php
new file mode 100644
index 000000000..3e20207a1
--- /dev/null
+++ b/mod/thewire/deactivate.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Deregister the ElggWire class
+ */
+
+update_subtype('object', 'thewire'); \ No newline at end of file
diff --git a/mod/thewire/graphics/river_icon_thewire.gif b/mod/thewire/graphics/river_icon_thewire.gif
new file mode 100644
index 000000000..59cc6bfaa
--- /dev/null
+++ b/mod/thewire/graphics/river_icon_thewire.gif
Binary files differ
diff --git a/mod/thewire/graphics/thewire_speech_bubble.gif b/mod/thewire/graphics/thewire_speech_bubble.gif
new file mode 100644
index 000000000..ec5b89773
--- /dev/null
+++ b/mod/thewire/graphics/thewire_speech_bubble.gif
Binary files differ
diff --git a/mod/thewire/languages/en.php b/mod/thewire/languages/en.php
new file mode 100644
index 000000000..3c83d145f
--- /dev/null
+++ b/mod/thewire/languages/en.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * The Wire English language file
+ */
+
+$english = array(
+
+ /**
+ * Menu items and titles
+ */
+ 'thewire' => "The Wire",
+ 'thewire:everyone' => "All wire posts",
+ 'thewire:user' => "%s's wire posts",
+ 'thewire:friends' => "Friends' wire posts",
+ 'thewire:reply' => "Reply",
+ 'thewire:replying' => "Replying to %s (@%s) who wrote",
+ 'thewire:thread' => "Thread",
+ 'thewire:charleft' => "characters remaining",
+ 'thewire:tags' => "Wire posts tagged with '%s'",
+ 'thewire:noposts' => "No wire posts yet",
+ 'item:object:thewire' => "Wire posts",
+ 'thewire:update' => 'Update',
+ 'thewire:by' => 'Wire post by %s',
+
+ 'thewire:previous' => "Previous",
+ 'thewire:hide' => "Hide",
+ 'thewire:previous:help' => "View previous post",
+ 'thewire:hide:help' => "Hide previous post",
+
+ /**
+ * The wire river
+ */
+ 'river:create:object:thewire' => "%s posted to the %s",
+ 'thewire:wire' => 'wire',
+
+ /**
+ * Wire widget
+ */
+ 'thewire:widget:desc' => 'Display your latest wire posts',
+ 'thewire:num' => 'Number of posts to display',
+ 'thewire:moreposts' => 'More wire posts',
+
+ /**
+ * Status messages
+ */
+ 'thewire:posted' => "Your message was successfully posted to the wire.",
+ 'thewire:deleted' => "The wire post was successfully deleted.",
+ 'thewire:blank' => "Sorry, you need to enter some text before we can post this.",
+ 'thewire:notfound' => "Sorry, we could not find the specified wire post.",
+ 'thewire:notdeleted' => "Sorry. We could not delete this wire post.",
+
+ /**
+ * Notifications
+ */
+ 'thewire:notify:subject' => "New wire post",
+ 'thewire:notify:reply' => '%s responded to %s on the wire:',
+ 'thewire:notify:post' => '%s posted on the wire:',
+
+);
+
+add_translation("en", $english);
diff --git a/mod/thewire/manifest.xml b/mod/thewire/manifest.xml
new file mode 100644
index 000000000..962ed12f1
--- /dev/null
+++ b/mod/thewire/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>The Wire</name>
+ <author>JHU/APL and core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>content</category>
+ <description>Microblogging for Elgg</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/thewire/pages/thewire/everyone.php b/mod/thewire/pages/thewire/everyone.php
new file mode 100644
index 000000000..909f0caf2
--- /dev/null
+++ b/mod/thewire/pages/thewire/everyone.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * All wire posts
+ *
+ */
+
+elgg_push_breadcrumb(elgg_echo('thewire'));
+
+$title = elgg_echo('thewire:everyone');
+
+$content = '';
+if (elgg_is_logged_in()) {
+ $form_vars = array('class' => 'thewire-form');
+ $content .= elgg_view_form('thewire/add', $form_vars);
+ $content .= elgg_view('input/urlshortener');
+}
+
+$content .= elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'thewire',
+ 'limit' => 15,
+));
+
+$body = elgg_view_layout('content', array(
+ 'filter_context' => 'all',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => elgg_view('thewire/sidebar'),
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/thewire/pages/thewire/friends.php b/mod/thewire/pages/thewire/friends.php
new file mode 100644
index 000000000..e7f5eed59
--- /dev/null
+++ b/mod/thewire/pages/thewire/friends.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Wire posts of your friends
+ */
+
+$owner = elgg_get_page_owner_entity();
+if (!$owner) {
+ forward('thewire/all');
+}
+
+$title = elgg_echo('thewire:friends');
+
+elgg_push_breadcrumb(elgg_echo('thewire'), "thewire/all");
+elgg_push_breadcrumb($owner->name, "thewire/owner/$owner->username");
+elgg_push_breadcrumb(elgg_echo('friends'));
+
+if (elgg_get_logged_in_user_guid() == $owner->guid) {
+ $form_vars = array('class' => 'thewire-form');
+ $content = elgg_view_form('thewire/add', $form_vars);
+ $content .= elgg_view('input/urlshortener');
+}
+
+$content .= list_user_friends_objects($owner->guid, 'thewire', 15, false);
+
+$body = elgg_view_layout('content', array(
+ 'filter_context' => 'friends',
+ 'content' => $content,
+ 'title' => $title,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/thewire/pages/thewire/owner.php b/mod/thewire/pages/thewire/owner.php
new file mode 100644
index 000000000..6246c1770
--- /dev/null
+++ b/mod/thewire/pages/thewire/owner.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * User's wire posts
+ *
+ */
+
+$owner = elgg_get_page_owner_entity();
+if (!$owner) {
+ forward('thewire/all');
+}
+
+$title = elgg_echo('thewire:user', array($owner->name));
+
+elgg_push_breadcrumb(elgg_echo('thewire'), "thewire/all");
+elgg_push_breadcrumb($owner->name);
+
+$context = '';
+if (elgg_get_logged_in_user_guid() == $owner->guid) {
+ $form_vars = array('class' => 'thewire-form');
+ $content = elgg_view_form('thewire/add', $form_vars);
+ $content .= elgg_view('input/urlshortener');
+ $context = 'mine';
+}
+
+$content .= elgg_list_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'thewire',
+ 'owner_guid' => $owner->guid,
+ 'limit' => 15,
+));
+
+$body = elgg_view_layout('content', array(
+ 'filter_context' => $context,
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => elgg_view('thewire/sidebar'),
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/thewire/pages/thewire/previous.php b/mod/thewire/pages/thewire/previous.php
new file mode 100644
index 000000000..a3f1cb01c
--- /dev/null
+++ b/mod/thewire/pages/thewire/previous.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Serve up html for a post's parent
+ */
+
+$guid = (int) get_input('guid');
+$title = elgg_echo('thewire:previous');
+
+$parent = thewire_get_parent($guid);
+if ($parent) {
+ $body = elgg_view_entity($parent);
+}
+
+$body = elgg_view_layout('content', array(
+ 'filter' => false,
+ 'content' => $body,
+ 'title' => $title,
+));
+
+echo elgg_view_page($title, $body); \ No newline at end of file
diff --git a/mod/thewire/pages/thewire/reply.php b/mod/thewire/pages/thewire/reply.php
new file mode 100644
index 000000000..df4511c51
--- /dev/null
+++ b/mod/thewire/pages/thewire/reply.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Reply page
+ *
+ */
+
+gatekeeper();
+
+$post = get_entity(get_input('guid'));
+
+$title = elgg_echo('thewire:reply');
+
+elgg_push_breadcrumb(elgg_echo('thewire'), 'thewire/all');
+elgg_push_breadcrumb($title);
+
+$content = elgg_view('thewire/reply', array('post' => $post));
+$form_vars = array('class' => 'thewire-form');
+$content .= elgg_view_form('thewire/add', $form_vars, array('post' => $post));
+$content .= elgg_view('input/urlshortener');
+
+
+$body = elgg_view_layout('content', array(
+ 'filter' => false,
+ 'content' => $content,
+ 'title' => $title,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/thewire/pages/thewire/tag.php b/mod/thewire/pages/thewire/tag.php
new file mode 100644
index 000000000..1c88030ec
--- /dev/null
+++ b/mod/thewire/pages/thewire/tag.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Wire posts tagged with <tag>
+ */
+
+$tag = get_input('tag');
+if (!$tag) {
+ forward('thewire/all');
+}
+
+elgg_push_breadcrumb(elgg_echo('thewire'), 'thewire/all');
+elgg_push_breadcrumb('#' . $tag);
+
+// remove # from tag
+$tag = trim($tag, '# ');
+
+$title = elgg_echo('thewire:tags', array($tag));
+
+
+$content = elgg_list_entities_from_metadata(array(
+ 'metadata_name' => 'tags',
+ 'metadata_value' => $tag,
+ 'metadata_case_sensitive' => false,
+ 'type' => 'object',
+ 'subtype' => 'thewire',
+ 'limit' => 15,
+));
+
+$body = elgg_view_layout('content', array(
+ 'filter' => false,
+ 'content' => $content,
+ 'title' => $title,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/thewire/pages/thewire/thread.php b/mod/thewire/pages/thewire/thread.php
new file mode 100644
index 000000000..ec2709430
--- /dev/null
+++ b/mod/thewire/pages/thewire/thread.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * View conversation thread
+ */
+
+$thread_id = get_input('thread_id');
+
+$title = elgg_echo('thewire:thread');
+
+elgg_push_breadcrumb(elgg_echo('thewire'), 'thewire/all');
+elgg_push_breadcrumb($title);
+
+$content = elgg_list_entities_from_metadata(array(
+ "metadata_name" => "wire_thread",
+ "metadata_value" => $thread_id,
+ "type" => "object",
+ "subtype" => "thewire",
+ "limit" => 20,
+));
+
+$body = elgg_view_layout('content', array(
+ 'filter' => false,
+ 'content' => $content,
+ 'title' => $title,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/thewire/pages/thewire/view.php b/mod/thewire/pages/thewire/view.php
new file mode 100644
index 000000000..1709e5e9a
--- /dev/null
+++ b/mod/thewire/pages/thewire/view.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * View individual wire post
+ */
+
+$post = get_entity(get_input('guid'));
+if (!$post) {
+ register_error(elgg_echo('noaccess'));
+ $_SESSION['last_forward_from'] = current_page_url();
+ forward('');
+}
+$owner = $post->getOwnerEntity();
+if (!$owner) {
+ forward();
+}
+
+$title = elgg_echo('thewire:by', array($owner->name));
+
+elgg_push_breadcrumb(elgg_echo('thewire'), 'thewire/all');
+elgg_push_breadcrumb($owner->name, 'thewire/owner/' . $owner->username);
+elgg_push_breadcrumb($title);
+
+$content = elgg_view_entity($post);
+
+$body = elgg_view_layout('content', array(
+ 'filter' => false,
+ 'content' => $content,
+ 'title' => $title,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/thewire/start.php b/mod/thewire/start.php
new file mode 100644
index 000000000..8b01cc57a
--- /dev/null
+++ b/mod/thewire/start.php
@@ -0,0 +1,475 @@
+<?php
+/**
+ * Elgg wire plugin
+ *
+ * Forked from Curverider's version
+ *
+ * JHU/APL Contributors:
+ * Cash Costello
+ * Clark Updike
+ * John Norton
+ * Max Thomas
+ * Nathan Koterba
+ */
+
+elgg_register_event_handler('init', 'system', 'thewire_init');
+
+/**
+ * The Wire initialization
+ */
+function thewire_init() {
+
+ // register the wire's JavaScript
+ $thewire_js = elgg_get_simplecache_url('js', 'thewire');
+ elgg_register_simplecache_view('js/thewire');
+ elgg_register_js('elgg.thewire', $thewire_js, 'footer');
+
+ elgg_register_ajax_view('thewire/previous');
+
+ // add a site navigation item
+ $item = new ElggMenuItem('thewire', elgg_echo('thewire'), 'thewire/all');
+ elgg_register_menu_item('site', $item);
+
+ // owner block menu
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'thewire_owner_block_menu');
+
+ // remove edit and access and add thread, reply, view previous
+ elgg_register_plugin_hook_handler('register', 'menu:entity', 'thewire_setup_entity_menu_items');
+
+ // Extend system CSS with our own styles, which are defined in the thewire/css view
+ elgg_extend_view('css/elgg', 'thewire/css');
+
+ //extend views
+ elgg_extend_view('activity/thewire', 'thewire/activity_view');
+ elgg_extend_view('profile/status', 'thewire/profile_status');
+ elgg_extend_view('js/initialise_elgg', 'thewire/js/textcounter');
+
+ // Register a page handler, so we can have nice URLs
+ elgg_register_page_handler('thewire', 'thewire_page_handler');
+
+ // Register a URL handler for thewire posts
+ elgg_register_entity_url_handler('object', 'thewire', 'thewire_url');
+
+ elgg_register_widget_type('thewire', elgg_echo('thewire'), elgg_echo("thewire:widget:desc"));
+
+ // Register for search
+ elgg_register_entity_type('object', 'thewire');
+
+ // Register granular notification for this type
+ register_notification_object('object', 'thewire', elgg_echo('thewire:notify:subject'));
+
+ // Listen to notification events and supply a more useful message
+ elgg_register_plugin_hook_handler('notify:entity:message', 'object', 'thewire_notify_message');
+
+ // Register actions
+ $action_base = elgg_get_plugins_path() . 'thewire/actions';
+ elgg_register_action("thewire/add", "$action_base/add.php");
+ elgg_register_action("thewire/delete", "$action_base/delete.php");
+
+ elgg_register_plugin_hook_handler('unit_test', 'system', 'thewire_test');
+
+ elgg_register_event_handler('upgrade', 'system', 'thewire_run_upgrades');
+}
+
+/**
+ * The wire page handler
+ *
+ * Supports:
+ * thewire/all View site wire posts
+ * thewire/owner/<username> View this user's wire posts
+ * thewire/following/<username> View the posts of those this user follows
+ * thewire/reply/<guid> Reply to a post
+ * thewire/view/<guid> View a post
+ * thewire/thread/<id> View a conversation thread
+ * thewire/tag/<tag> View wire posts tagged with <tag>
+ *
+ * @param array $page From the page_handler function
+ * @return bool
+ */
+function thewire_page_handler($page) {
+
+ $base_dir = elgg_get_plugins_path() . 'thewire/pages/thewire';
+
+ if (!isset($page[0])) {
+ $page = array('all');
+ }
+
+ switch ($page[0]) {
+ case "all":
+ include "$base_dir/everyone.php";
+ break;
+
+ case "friends":
+ include "$base_dir/friends.php";
+ break;
+
+ case "owner":
+ include "$base_dir/owner.php";
+ break;
+
+ case "view":
+ if (isset($page[1])) {
+ set_input('guid', $page[1]);
+ }
+ include "$base_dir/view.php";
+ break;
+
+ case "thread":
+ if (isset($page[1])) {
+ set_input('thread_id', $page[1]);
+ }
+ include "$base_dir/thread.php";
+ break;
+
+ case "reply":
+ if (isset($page[1])) {
+ set_input('guid', $page[1]);
+ }
+ include "$base_dir/reply.php";
+ break;
+
+ case "tag":
+ if (isset($page[1])) {
+ set_input('tag', $page[1]);
+ }
+ include "$base_dir/tag.php";
+ break;
+
+ case "previous":
+ if (isset($page[1])) {
+ set_input('guid', $page[1]);
+ }
+ include "$base_dir/previous.php";
+ break;
+
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Override the url for a wire post to return the thread
+ *
+ * @param ElggObject $thewirepost Wire post object
+ */
+function thewire_url($thewirepost) {
+ global $CONFIG;
+ return $CONFIG->url . "thewire/view/" . $thewirepost->guid;
+}
+
+/**
+ * Returns the notification body
+ *
+ * @return $string
+ */
+function thewire_notify_message($hook, $entity_type, $returnvalue, $params) {
+ global $CONFIG;
+
+ $entity = $params['entity'];
+ if (($entity instanceof ElggEntity) && ($entity->getSubtype() == 'thewire')) {
+ $descr = $entity->description;
+ $owner = $entity->getOwnerEntity();
+ if ($entity->reply) {
+ // have to do this because of poor design of Elgg notification system
+ $parent_post = get_entity(get_input('parent_guid'));
+ if ($parent_post) {
+ $parent_owner = $parent_post->getOwnerEntity();
+ }
+ $body = sprintf(elgg_echo('thewire:notify:reply'), $owner->name, $parent_owner->name);
+ } else {
+ $body = sprintf(elgg_echo('thewire:notify:post'), $owner->name);
+ }
+ $body .= "\n\n" . $descr . "\n\n";
+ $body .= elgg_echo('thewire') . ": {$CONFIG->url}thewire";
+ return $body;
+ }
+ return $returnvalue;
+}
+
+/**
+ * Get an array of hashtags from a text string
+ *
+ * @param string $text The text of a post
+ * @return array
+ */
+function thewire_get_hashtags($text) {
+ // beginning of text or white space followed by hashtag
+ // hashtag must begin with # and contain at least one character not digit, space, or punctuation
+ $matches = array();
+ preg_match_all('/(^|[^\w])#(\w*[^\s\d!-\/:-@]+\w*)/', $text, $matches);
+ return $matches[2];
+}
+
+/**
+ * Replace urls, hash tags, and @'s by links
+ *
+ * @param string $text The text of a post
+ * @return string
+ */
+function thewire_filter($text) {
+ global $CONFIG;
+
+ $text = ' ' . $text;
+
+ // email addresses
+ $text = preg_replace(
+ '/(^|[^\w])([\w\-\.]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})/i',
+ '$1<a href="mailto:$2@$3">$2@$3</a>',
+ $text);
+
+ // links
+ $text = parse_urls($text);
+
+ // usernames
+ $text = preg_replace(
+ '/(^|[^\w])@([\p{L}\p{Nd}._]+)/u',
+ '$1<a href="' . $CONFIG->wwwroot . 'thewire/owner/$2">@$2</a>',
+ $text);
+
+ // hashtags
+ $text = preg_replace(
+ '/(^|[^\w])#(\w*[^\s\d!-\/:-@]+\w*)/',
+ '$1<a href="' . $CONFIG->wwwroot . 'thewire/tag/$2">#$2</a>',
+ $text);
+
+ $text = trim($text);
+
+ return $text;
+}
+
+/**
+ * Create a new wire post.
+ *
+ * @param string $text The post text
+ * @param int $userid The user's guid
+ * @param int $access_id Public/private etc
+ * @param int $parent_guid Parent post guid (if any)
+ * @param string $method The method (default: 'site')
+ * @return guid or false if failure
+ */
+function thewire_save_post($text, $userid, $access_id, $parent_guid = 0, $method = "site") {
+ $post = new ElggObject();
+
+ $post->subtype = "thewire";
+ $post->owner_guid = $userid;
+ $post->access_id = $access_id;
+
+ // only 200 characters allowed
+ $text = elgg_substr($text, 0, 200);
+
+ // no html tags allowed so we escape
+ $post->description = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
+
+ $post->method = $method; //method: site, email, api, ...
+
+ $tags = thewire_get_hashtags($text);
+ if ($tags) {
+ $post->tags = $tags;
+ }
+
+ // must do this before saving so notifications pick up that this is a reply
+ if ($parent_guid) {
+ $post->reply = true;
+ }
+
+ $guid = $post->save();
+
+ // set thread guid
+ if ($parent_guid) {
+ $post->addRelationship($parent_guid, 'parent');
+
+ // name conversation threads by guid of first post (works even if first post deleted)
+ $parent_post = get_entity($parent_guid);
+ $post->wire_thread = $parent_post->wire_thread;
+ } else {
+ // first post in this thread
+ $post->wire_thread = $guid;
+ }
+
+ if ($guid) {
+ add_to_river('river/object/thewire/create', 'create', $post->owner_guid, $post->guid);
+
+ // let other plugins know we are setting a user status
+ $params = array(
+ 'entity' => $post,
+ 'user' => $post->getOwnerEntity(),
+ 'message' => $post->description,
+ 'url' => $post->getURL(),
+ 'origin' => 'thewire',
+ );
+ elgg_trigger_plugin_hook('status', 'user', $params);
+ }
+
+ return $guid;
+}
+
+/**
+ * Send notification to poster of parent post if not notified already
+ *
+ * @param int $guid The guid of the reply wire post
+ * @param int $parent_guid The guid of the original wire post
+ * @param ElggUser $user The user who posted the reply
+ * @return void
+ */
+function thewire_send_response_notification($guid, $parent_guid, $user) {
+ $parent_owner = get_entity($parent_guid)->getOwnerEntity();
+ $user = elgg_get_logged_in_user_entity();
+
+ // check to make sure user is not responding to self
+ if ($parent_owner->guid != $user->guid) {
+ // check if parent owner has notification for this user
+ $send_response = true;
+ global $NOTIFICATION_HANDLERS;
+ foreach ($NOTIFICATION_HANDLERS as $method => $foo) {
+ if (check_entity_relationship($parent_owner->guid, 'notify' . $method, $user->guid)) {
+ $send_response = false;
+ }
+ }
+
+ // create the notification message
+ if ($send_response) {
+ // grab same notification message that goes to everyone else
+ $params = array(
+ 'entity' => get_entity($guid),
+ 'method' => "email",
+ );
+ $msg = thewire_notify_message("", "", "", $params);
+
+ notify_user(
+ $parent_owner->guid,
+ $user->guid,
+ elgg_echo('thewire:notify:subject'),
+ $msg);
+ }
+ }
+}
+
+/**
+ * Get the latest wire guid - used for ajax update
+ *
+ * @return guid
+ */
+function thewire_latest_guid() {
+ $post = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'thewire',
+ 'limit' => 1,
+ ));
+ if ($post) {
+ return $post[0]->guid;
+ } else {
+ return 0;
+ }
+}
+
+/**
+ * Get the parent of a wire post
+ *
+ * @param int $post_guid The guid of the reply
+ * @return ElggObject or null
+ */
+function thewire_get_parent($post_guid) {
+ $parents = elgg_get_entities_from_relationship(array(
+ 'relationship' => 'parent',
+ 'relationship_guid' => $post_guid,
+ ));
+ if ($parents) {
+ return $parents[0];
+ }
+ return null;
+}
+
+/**
+ * Sets up the entity menu for thewire
+ *
+ * Adds reply, thread, and view previous links. Removes edit and access.
+ *
+ * @param string $hook Hook name
+ * @param string $type Hook type
+ * @param array $value Array of menu items
+ * @param array $params Array with the entity
+ * @return array
+ */
+function thewire_setup_entity_menu_items($hook, $type, $value, $params) {
+ $handler = elgg_extract('handler', $params, false);
+ if ($handler != 'thewire') {
+ return $value;
+ }
+
+ foreach ($value as $index => $item) {
+ $name = $item->getName();
+ if ($name == 'access' || $name == 'edit') {
+ unset($value[$index]);
+ }
+ }
+
+ $entity = $params['entity'];
+
+ if (elgg_is_logged_in()) {
+ $options = array(
+ 'name' => 'reply',
+ 'text' => elgg_echo('thewire:reply'),
+ 'href' => "thewire/reply/$entity->guid",
+ 'priority' => 150,
+ );
+ $value[] = ElggMenuItem::factory($options);
+ }
+
+ if ($entity->reply) {
+ $options = array(
+ 'name' => 'previous',
+ 'text' => elgg_echo('thewire:previous'),
+ 'href' => "thewire/previous/$entity->guid",
+ 'priority' => 160,
+ 'link_class' => 'thewire-previous',
+ 'title' => elgg_echo('thewire:previous:help'),
+ );
+ $value[] = ElggMenuItem::factory($options);
+ }
+
+ $options = array(
+ 'name' => 'thread',
+ 'text' => elgg_echo('thewire:thread'),
+ 'href' => "thewire/thread/$entity->wire_thread",
+ 'priority' => 170,
+ );
+ $value[] = ElggMenuItem::factory($options);
+
+ return $value;
+}
+
+/**
+ * Add a menu item to an ownerblock
+ *
+ * @return array
+ */
+function thewire_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'user')) {
+ $url = "thewire/owner/{$params['entity']->username}";
+ $item = new ElggMenuItem('thewire', elgg_echo('item:object:thewire'), $url);
+ $return[] = $item;
+ }
+
+ return $return;
+}
+
+/**
+ * Runs unit tests for the wire
+ *
+ * @return array
+ */
+function thewire_test($hook, $type, $value, $params) {
+ global $CONFIG;
+ $value[] = $CONFIG->pluginspath . 'thewire/tests/regex.php';
+ return $value;
+}
+
+function thewire_run_upgrades() {
+ $path = dirname(__FILE__) . '/upgrades/';
+ $files = elgg_get_upgrade_files($path);
+
+ foreach ($files as $file) {
+ include $path . $file;
+ }
+} \ No newline at end of file
diff --git a/mod/thewire/tests/regex.php b/mod/thewire/tests/regex.php
new file mode 100644
index 000000000..c73e06bdc
--- /dev/null
+++ b/mod/thewire/tests/regex.php
@@ -0,0 +1,303 @@
+<?php
+/**
+ * Regular expression tests for the wire
+ */
+class TheWireRegexTest extends ElggCoreUnitTest {
+
+ /**
+ * Called before each test object.
+ */
+ public function __construct() {
+ $this->ia = elgg_set_ignore_access(TRUE);
+ parent::__construct();
+
+ // all __construct() code should come after here
+ }
+
+ /**
+ * Called before each test method.
+ */
+ public function setUp() {
+
+ }
+
+ /**
+ * Called after each test method.
+ */
+ public function tearDown() {
+ // do not allow SimpleTest to interpret Elgg notices as exceptions
+ $this->swallowErrors();
+ }
+
+ /**
+ * Called after each test object.
+ */
+ public function __destruct() {
+ elgg_set_ignore_access($this->ia);
+ // all __destruct() code should go above here
+ parent::__destruct();
+ }
+
+ /**
+ * Get the link for a user's wire page
+ *
+ * @param string $username Username
+ * @return string
+ */
+ protected function getUserWireLink($username) {
+ $url = "thewire/owner/$username";
+ $url = elgg_normalize_url($url);
+ return "<a href=\"$url\">@$username</a>";
+ }
+
+ /**
+ * Get the link for a hashtag page
+ *
+ * @param string $tag Tag string
+ * @return string
+ */
+ protected function getHashtagLink($tag) {
+ $url = "thewire/tag/$tag";
+ $url = elgg_normalize_url($url);
+ return "<a href=\"$url\">#$tag</a>";
+ }
+
+ /**
+ * Get a link for an email address mailto
+ *
+ * @param string $address Email address
+ * @return string
+ */
+ protected function getEmailLink($address) {
+ return "<a href=\"mailto:$address\">$address</a>";
+ }
+
+ /**
+ * Get the html for a link
+ *
+ * @param string $address URL
+ * @return string
+ */
+ protected function getLink($address) {
+ return parse_urls($address);
+ }
+
+ /**
+ * Usernames: @user
+ */
+ public function testReplaceUsernames() {
+ // beginning of text
+ $text = "@user test";
+ $expected = $this->getUserWireLink('user') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // after space
+ $text = "test @user test";
+ $expected = "test " . $this->getUserWireLink('user') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // followed by comma
+ $text = "test @user, test";
+ $expected = "test " . $this->getUserWireLink('user') . ", test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // preceded by comma
+ $text = "test ,@user test";
+ $expected = "test ," . $this->getUserWireLink('user') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // include digit
+ $text = "@3user test";
+ $expected = $this->getUserWireLink('3user') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // include underscore
+ $text = "@user_name test";
+ $expected = $this->getUserWireLink('user_name') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // parentheses
+ $text = "test (@user) test";
+ $expected = "test (" . $this->getUserWireLink('user') . ") test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // utf8 characters
+ $text = "@tyúkanyó";
+ $expected = $this->getUserWireLink('tyúkanyó');
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+ }
+
+ /**
+ * Hashtags: #tag
+ */
+ public function testReplaceHashtags() {
+ // tag at beginning
+ $text = "#tag test";
+ $expected = $this->getHashtagLink('tag') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // tag not at beginning
+ $text = "test #tag test";
+ $expected = "test " . $this->getHashtagLink('tag') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // followed by comma
+ $text = "test #tag, test";
+ $expected = "test " . $this->getHashtagLink('tag') . ", test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // preceded by comma
+ $text = "test,#tag test";
+ $expected = "test," . $this->getHashtagLink('tag') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // followed by period
+ $text = "test #tag. test";
+ $expected = "test " . $this->getHashtagLink('tag') . ". test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // parentheses
+ $text = "test (#tag) test";
+ $expected = "test (" . $this->getHashtagLink('tag') . ") test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // include number
+ $text = "test #tag2000 test";
+ $expected = "test " . $this->getHashtagLink('tag2000') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // cannot be just a number
+ $text = "test #1 test";
+ $expected = $text;
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+}
+
+ /**
+ * Email: johndoe@gmail.com
+ */
+ public function testReplaceEmailAddress() {
+ // email at beginning of text
+ $text = "test@test.com test";
+ $expected = $this->getEmailLink('test@test.com') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // after space
+ $text = "test test@test.com test";
+ $expected = "test " . $this->getEmailLink('test@test.com') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // followed by comma
+ $text = "test test@test.com, test";
+ $expected = "test " . $this->getEmailLink('test@test.com') . ", test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // preceded by comma
+ $text = "test,test@test.com test";
+ $expected = "test," . $this->getEmailLink('test@test.com') . " test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // followed by period
+ $text = "test test@test.com. test";
+ $expected = "test " . $this->getEmailLink('test@test.com') . ". test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // parentheses
+ $text = "test (test@test.com) test";
+ $expected = "test (" . $this->getEmailLink('test@test.com') . ") test";
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // includes digits
+ $text = "user1@domain1.com";
+ $expected = $this->getEmailLink('user1@domain1.com');
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // includes underscore
+ $text = "user_name@domain.com";
+ $expected = $this->getEmailLink('user_name@domain.com');
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // includes period
+ $text = "user.name@domain.com";
+ $expected = $this->getEmailLink('user.name@domain.com');
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // includes subdomains
+ $text = "user.name@domain.com.uk";
+ $expected = $this->getEmailLink('user.name@domain.com.uk');
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+ }
+
+ /**
+ * Links: http://www.example.org/
+ */
+ public function testReplaceLinks() {
+ // beginning of text
+ $text = "http://www.test.org";
+ $expected = $this->getLink('http://www.test.org');
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // not at beginning of text
+ $text = "test http://www.test.org";
+ $expected = 'test ' . $this->getLink('http://www.test.org');
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // followed by comma
+ $text = "test http://www.test.org, test";
+ $expected = 'test ' . $this->getLink('http://www.test.org') . ', test';
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // preceeded by comma
+ $text = "test,http://www.test.org test";
+ $expected = 'test,' . $this->getLink('http://www.test.org') . ' test';
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // followed by period
+ $text = "test http://www.test.org. test";
+ $expected = 'test ' . $this->getLink('http://www.test.org') . '. test';
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // surrounded by parentheses
+ $text = "test (http://www.test.org) test";
+ $expected = 'test (' . $this->getLink('http://www.test.org') . ') test';
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+
+ // no http://
+ $text = "test www.test.org test";
+ $expected = 'test ' . $this->getLink('www.test.org') . ' test';
+ $result = thewire_filter($text);
+ $this->assertEqual($result, $expected);
+ }
+
+}
diff --git a/mod/thewire/upgrades/2012122701-fix_entity_class.php b/mod/thewire/upgrades/2012122701-fix_entity_class.php
new file mode 100644
index 000000000..a1f382712
--- /dev/null
+++ b/mod/thewire/upgrades/2012122701-fix_entity_class.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Register thewire objects with the ElggWire class.
+ */
+
+if (get_subtype_id('object', 'thewire')) {
+ update_subtype('object', 'thewire', 'ElggWire');
+} \ No newline at end of file
diff --git a/mod/thewire/views/default/forms/thewire/add.php b/mod/thewire/views/default/forms/thewire/add.php
new file mode 100644
index 000000000..8607b3662
--- /dev/null
+++ b/mod/thewire/views/default/forms/thewire/add.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Wire add form body
+ *
+ * @uses $vars['post']
+ */
+
+elgg_load_js('elgg.thewire');
+
+$post = elgg_extract('post', $vars);
+
+$text = elgg_echo('post');
+if ($post) {
+ $text = elgg_echo('thewire:reply');
+}
+
+if ($post) {
+ echo elgg_view('input/hidden', array(
+ 'name' => 'parent_guid',
+ 'value' => $post->guid,
+ ));
+}
+
+echo elgg_view('input/plaintext', array(
+ 'name' => 'body',
+ 'class' => 'mtm',
+ 'id' => 'thewire-textarea',
+));
+?>
+<div id="thewire-characters-remaining">
+ <span>140</span> <?php echo elgg_echo('thewire:charleft'); ?>
+</div>
+<div class="elgg-foot mts">
+<?php
+
+echo elgg_view('input/submit', array(
+ 'value' => $text,
+ 'id' => 'thewire-submit-button',
+));
+?>
+</div> \ No newline at end of file
diff --git a/mod/thewire/views/default/js/thewire.php b/mod/thewire/views/default/js/thewire.php
new file mode 100644
index 000000000..ba8f35050
--- /dev/null
+++ b/mod/thewire/views/default/js/thewire.php
@@ -0,0 +1,86 @@
+<?php
+/**
+ * The wire's JavaScript
+ */
+
+$site_url = elgg_get_site_url();
+
+?>
+
+elgg.provide('elgg.thewire');
+
+elgg.thewire.init = function() {
+ $("#thewire-textarea").live('keydown', function() {
+ elgg.thewire.textCounter(this, $("#thewire-characters-remaining span"), 140);
+ });
+ $("#thewire-textarea").live('keyup', function() {
+ elgg.thewire.textCounter(this, $("#thewire-characters-remaining span"), 140);
+ });
+
+ $(".thewire-previous").live('click', elgg.thewire.viewPrevious);
+};
+
+/**
+ * Update the number of characters left with every keystroke
+ *
+ * @param {Object} textarea
+ * @param {Object} status
+ * @param {integer} limit
+ * @return void
+ */
+elgg.thewire.textCounter = function(textarea, status, limit) {
+
+ var remaining_chars = limit - $(textarea).val().length;
+ status.html(remaining_chars);
+
+ if (remaining_chars < 0) {
+ status.parent().addClass("thewire-characters-remaining-warning");
+ $("#thewire-submit-button").attr('disabled', 'disabled');
+ $("#thewire-submit-button").addClass('elgg-state-disabled');
+ } else {
+ status.parent().removeClass("thewire-characters-remaining-warning");
+ $("#thewire-submit-button").removeAttr('disabled', 'disabled');
+ $("#thewire-submit-button").removeClass('elgg-state-disabled');
+ }
+};
+
+/**
+ * Display the previous wire post
+ *
+ * Makes Ajax call to load the html and handles changing the previous link
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.thewire.viewPrevious = function(event) {
+ var $link = $(this);
+ var postGuid = $link.attr("href").split("/").pop();
+ var $previousDiv = $("#thewire-previous-" + postGuid);
+
+ if ($link.html() == elgg.echo('thewire:hide')) {
+ $link.html(elgg.echo('thewire:previous'));
+ $link.attr("title", elgg.echo('thewire:previous:help'));
+ $previousDiv.slideUp(400);
+ } else {
+ $link.html(elgg.echo('thewire:hide'));
+ $link.attr("title", elgg.echo('thewire:hide:help'));
+
+ $.ajax({type: "GET",
+ url: elgg.config.wwwroot + "ajax/view/thewire/previous",
+ dataType: "html",
+ cache: false,
+ data: {guid: postGuid},
+ success: function(htmlData) {
+ if (htmlData.length > 0) {
+ $previousDiv.html(htmlData);
+ $previousDiv.slideDown(600);
+ }
+ }
+ });
+
+ }
+
+ event.preventDefault();
+};
+
+elgg.register_hook_handler('init', 'system', elgg.thewire.init);
diff --git a/mod/thewire/views/default/object/thewire.php b/mod/thewire/views/default/object/thewire.php
new file mode 100644
index 000000000..134c87243
--- /dev/null
+++ b/mod/thewire/views/default/object/thewire.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * View a wire post
+ *
+ * @uses $vars['entity']
+ */
+
+elgg_load_js('elgg.thewire');
+
+$full = elgg_extract('full_view', $vars, FALSE);
+$post = elgg_extract('entity', $vars, FALSE);
+
+if (!$post) {
+ return true;
+}
+
+// make compatible with posts created with original Curverider plugin
+$thread_id = $post->wire_thread;
+if (!$thread_id) {
+ $post->wire_thread = $post->guid;
+}
+
+$owner = $post->getOwnerEntity();
+
+$owner_icon = elgg_view_entity_icon($owner, 'tiny');
+$owner_link = elgg_view('output/url', array(
+ 'href' => "thewire/owner/$owner->username",
+ 'text' => $owner->name,
+ 'is_trusted' => true,
+));
+$author_text = elgg_echo('byline', array($owner_link));
+$date = elgg_view_friendly_time($post->time_created);
+
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $post,
+ 'handler' => 'thewire',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+$subtitle = "$author_text $date";
+
+// do not show the metadata and controls in widget view
+if (elgg_in_context('widgets')) {
+ $metadata = '';
+}
+
+$params = array(
+ 'entity' => $post,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'content' => thewire_filter($post->description),
+ 'tags' => false,
+);
+$params = $params + $vars;
+$list_body = elgg_view('object/elements/summary', $params);
+
+echo elgg_view_image_block($owner_icon, $list_body);
+
+if ($post->reply) {
+ echo "<div class=\"thewire-parent hidden\" id=\"thewire-previous-{$post->guid}\">";
+ echo "</div>";
+}
diff --git a/mod/thewire/views/default/river/object/thewire/create.php b/mod/thewire/views/default/river/object/thewire/create.php
new file mode 100644
index 000000000..c75a42b3f
--- /dev/null
+++ b/mod/thewire/views/default/river/object/thewire/create.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * File river view.
+ */
+
+$object = $vars['item']->getObjectEntity();
+$excerpt = strip_tags($object->description);
+$excerpt = thewire_filter($excerpt);
+
+$subject = $vars['item']->getSubjectEntity();
+$subject_link = elgg_view('output/url', array(
+ 'href' => $subject->getURL(),
+ 'text' => $subject->name,
+ 'class' => 'elgg-river-subject',
+ 'is_trusted' => true,
+));
+
+$object_link = elgg_view('output/url', array(
+ 'href' => "thewire/owner/$subject->username",
+ 'text' => elgg_echo('thewire:wire'),
+ 'class' => 'elgg-river-object',
+ 'is_trusted' => true,
+));
+
+$summary = elgg_echo("river:create:object:thewire", array($subject_link, $object_link));
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => $excerpt,
+ 'summary' => $summary,
+)); \ No newline at end of file
diff --git a/mod/thewire/views/default/thewire/css.php b/mod/thewire/views/default/thewire/css.php
new file mode 100644
index 000000000..d11cce74a
--- /dev/null
+++ b/mod/thewire/views/default/thewire/css.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * The Wire CSS
+ */
+
+?>
+/********************************
+The Wire
+*********************************/
+#thewire-textarea {
+ height: 40px;
+ padding: 6px;
+}
+#thewire-characters-remaining {
+ text-align: right;
+ float: right;
+ font-weight: bold;
+ color: #333333;
+}
+.thewire-characters-remaining {
+ color:#333333;
+ border:none;
+ font-size: 100%;
+ font-weight: bold;
+ padding:0 2px 0 0;
+ margin:0;
+ text-align: right;
+ background: white;
+}
+.thewire-characters-remaining-warning {
+ color: #D40D12 !important;
+}
+.thewire-parent {
+ margin-left: 40px;
+}
diff --git a/mod/thewire/views/default/thewire/previous.php b/mod/thewire/views/default/thewire/previous.php
new file mode 100644
index 000000000..e1ca83e24
--- /dev/null
+++ b/mod/thewire/views/default/thewire/previous.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Serve up html for a post
+ */
+
+$guid = (int) get_input('guid');
+
+$parent = thewire_get_parent($guid);
+if ($parent) {
+ echo elgg_view_entity($parent);
+}
diff --git a/mod/thewire/views/default/thewire/profile_status.php b/mod/thewire/views/default/thewire/profile_status.php
new file mode 100644
index 000000000..b5d9dbd80
--- /dev/null
+++ b/mod/thewire/views/default/thewire/profile_status.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Latest wire post on profile page
+ *
+ * @uses $vars['entity'] User that owns this profile page
+ */
+
+$owner = $vars['entity']->guid;
+
+//grab the user's latest from the wire
+$params = array(
+ 'types' => 'object',
+ 'subtypes' => 'thewire',
+ 'owner_guid' => $owner,
+ 'limit' => 1,
+);
+$latest_wire = elgg_get_entities($params);
+
+if ($latest_wire && count($latest_wire) > 0) {
+ $latest_wire = $latest_wire[0];
+ $content = thewire_filter($latest_wire->description);
+ $time = "<p class='elgg-subtext'>(" . elgg_view_friendly_time($latest_wire->time_created) . ")</p>";
+
+ $button = '';
+ if ($owner == elgg_get_logged_in_user_guid()) {
+ $url_to_wire = "thewire/owner/" . $vars['entity']->username;
+ $button = elgg_view('output/url', array(
+ 'text' => elgg_echo('thewire:update'),
+ 'href' => $url_to_wire,
+ 'class' => 'elgg-button elgg-button-action float-alt',
+ 'is_trusted' => true,
+ ));
+ }
+
+ $body = $content . $time;
+ $content = elgg_view_image_block('', $body, array('image_alt' => $button));
+
+ echo <<< HTML
+<div class="wire-status elgg-border-plain pam mbm clearfix">
+ $content
+</div>
+HTML;
+
+}
diff --git a/mod/thewire/views/default/thewire/reply.php b/mod/thewire/views/default/thewire/reply.php
new file mode 100644
index 000000000..341b691b1
--- /dev/null
+++ b/mod/thewire/views/default/thewire/reply.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Reply header
+ */
+
+$post = $vars['post'];
+$poster = $post->getOwnerEntity();
+$poster_details = array(
+ htmlspecialchars($poster->name, ENT_QUOTES, 'UTF-8'),
+ htmlspecialchars($poster->username, ENT_QUOTES, 'UTF-8'),
+);
+?>
+<b><?php echo elgg_echo('thewire:replying', $poster_details); ?>: </b>
+<?php echo $post->description; \ No newline at end of file
diff --git a/mod/thewire/views/default/thewire/scripts/counter.js b/mod/thewire/views/default/thewire/scripts/counter.js
new file mode 100644
index 000000000..0d416fa9a
--- /dev/null
+++ b/mod/thewire/views/default/thewire/scripts/counter.js
@@ -0,0 +1,25 @@
+/**
+ * Elgg thewire text counter
+ *
+ * @package ElggTheWire
+ *
+ * @question - do we want users to be able to edit thewire?
+ *
+ * @uses $vars['entity'] Optionally, the note to view
+
+<!-- Dynamic Version by: Nannette Thacker -->
+<!-- http://www.shiningstar.net -->
+<!-- Original by : Ronnie T. Moore -->
+<!-- Web Site: The JavaScript Source -->
+<!-- Limit the number of characters per textarea -->
+*/
+
+function textCounter(field,cntfield,maxlimit) {
+ // if too long...trim it!
+ if (field.value.length > maxlimit) {
+ field.value = field.value.substring(0, maxlimit);
+ } else {
+ // otherwise, update 'characters left' counter
+ cntfield.value = maxlimit - field.value.length;
+ }
+}
diff --git a/mod/thewire/views/default/thewire/sidebar.php b/mod/thewire/views/default/thewire/sidebar.php
new file mode 100644
index 000000000..a8aadd1f8
--- /dev/null
+++ b/mod/thewire/views/default/thewire/sidebar.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * The wire sidebar
+ */
+
+echo elgg_view('page/elements/tagcloud_block', array(
+ 'subtypes' => 'thewire',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+));
diff --git a/mod/thewire/views/default/widgets/thewire/content.php b/mod/thewire/views/default/widgets/thewire/content.php
new file mode 100644
index 000000000..7212d4397
--- /dev/null
+++ b/mod/thewire/views/default/widgets/thewire/content.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * User wire post widget display view
+ */
+
+$num = $vars['entity']->num_display;
+
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'thewire',
+ 'container_guid' => $vars['entity']->owner_guid,
+ 'limit' => $num,
+ 'full_view' => FALSE,
+ 'pagination' => FALSE,
+);
+$content = elgg_list_entities($options);
+
+echo $content;
+
+if ($content) {
+ $owner_url = "thewire/owner/" . elgg_get_page_owner_entity()->username;
+ $more_link = elgg_view('output/url', array(
+ 'href' => $owner_url,
+ 'text' => elgg_echo('thewire:moreposts'),
+ 'is_trusted' => true,
+ ));
+ echo "<span class=\"elgg-widget-more\">$more_link</span>";
+} else {
+ echo elgg_echo('thewire:noposts');
+}
diff --git a/mod/thewire/views/default/widgets/thewire/edit.php b/mod/thewire/views/default/widgets/thewire/edit.php
new file mode 100644
index 000000000..cee3f769d
--- /dev/null
+++ b/mod/thewire/views/default/widgets/thewire/edit.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * User wire widget edit view
+ */
+
+// set default value
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 4;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('thewire:num'); ?>:
+ <?php echo $dropdown; ?>
+</div>
diff --git a/mod/thewire/views/rss/object/thewire.php b/mod/thewire/views/rss/object/thewire.php
new file mode 100644
index 000000000..8fddb8aa8
--- /dev/null
+++ b/mod/thewire/views/rss/object/thewire.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Elgg thewire rss view
+ *
+ * @package ElggTheWire
+ */
+
+$owner = $vars['entity']->getOwnerEntity();
+if (!$owner) {
+ return true;
+}
+
+$title = elgg_echo('thewire:by', array($owner->name));
+
+$permalink = htmlspecialchars($vars['entity']->getURL(), ENT_NOQUOTES, 'UTF-8');
+$pubdate = date('r', $vars['entity']->getTimeCreated());
+
+$description = elgg_autop($vars['entity']->description);
+
+$creator = elgg_view('page/components/creator', $vars);
+$georss = elgg_view('page/components/georss', $vars);
+$extension = elgg_view('extensions/item', $vars);
+
+$item = <<<__HTML
+<item>
+ <guid isPermaLink="true">$permalink</guid>
+ <pubDate>$pubdate</pubDate>
+ <link>$permalink</link>
+ <title><![CDATA[$title]]></title>
+ <description><![CDATA[$description]]></description>
+ $creator$georss$extension
+</item>
+
+__HTML;
+
+echo $item;
diff --git a/mod/thewire/views/rss/search/object/thewire/entity.php b/mod/thewire/views/rss/search/object/thewire/entity.php
new file mode 100644
index 000000000..d9ea81ad1
--- /dev/null
+++ b/mod/thewire/views/rss/search/object/thewire/entity.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Elgg thewire.
+ * Search entity view for RSS feeds.
+ *
+ * @package ElggTheWire
+ */
+
+if (!array_key_exists('entity', $vars)) {
+ return FALSE;
+}
+
+$owner = $vars['entity']->getOwnerEntity();
+if ($owner) {
+ $title = elgg_echo('thewire:by', array($owner->name));
+}
+$description = $vars['entity']->getVolatileData('search_matched_description');
+
+?>
+
+<item>
+ <guid isPermaLink='false'><?php echo $vars['entity']->getGUID(); ?></guid>
+ <pubDate><?php echo date("r", $vars['entity']->time_created) ?></pubDate>
+ <link><?php echo htmlspecialchars($vars['entity']->getURL()); ?></link>
+ <title><![CDATA[<?php echo $title; ?>]]></title>
+ <description><![CDATA[<?php echo $description; ?>]]></description>
+</item>
diff --git a/mod/tinymce/README.txt b/mod/tinymce/README.txt
new file mode 100644
index 000000000..2814e9390
--- /dev/null
+++ b/mod/tinymce/README.txt
@@ -0,0 +1,10 @@
+Adding a language
+======================
+1. Download the language pack from [TinyMCE][1]
+2. Extract the files from the zip file.
+3. Copy the langs, plugins, and themes directories into mod/tinymce/vendor/tinymce/jscripts/tiny_mce/.
+There are already directories with those names. You do not want to delete those directories.
+Instead, copy the new directories on top of the old ones.
+4. Flush the Elgg caches.
+
+[1]: http://www.tinymce.com/i18n/index.php?ctrl=lang&act=download "TinyMCE"
diff --git a/mod/tinymce/activate.php b/mod/tinymce/activate.php
new file mode 100644
index 000000000..6f5cc8d50
--- /dev/null
+++ b/mod/tinymce/activate.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Prompt the user to install a tinymce language after activating
+ */
+
+if (elgg_get_config('language') != tinymce_get_site_language()) {
+ $message = elgg_echo('tinymce:lang_notice', array(
+ elgg_echo(elgg_get_config('language')),
+ "http://www.tinymce.com/i18n/index.php?ctrl=lang&act=download",
+ elgg_get_plugins_path() . "tinymce/vendor/tinymce/jscripts/tiny_mce/",
+ elgg_add_action_tokens_to_url(elgg_normalize_url('action/admin/site/flush_cache')),
+ ));
+ elgg_add_admin_notice('tinymce_admin_notice_no_lang', $message);
+}
diff --git a/mod/tinymce/css/elgg_tinymce.css b/mod/tinymce/css/elgg_tinymce.css
new file mode 100644
index 000000000..503e78c35
--- /dev/null
+++ b/mod/tinymce/css/elgg_tinymce.css
@@ -0,0 +1,5 @@
+/* CSS for TinyMCE content iframe */
+body, td, pre {
+ color: #333;
+ font: 80%/1.4 "Lucida Grande",Verdana,sans-serif;
+} \ No newline at end of file
diff --git a/mod/tinymce/languages/en.php b/mod/tinymce/languages/en.php
new file mode 100644
index 000000000..b2702549c
--- /dev/null
+++ b/mod/tinymce/languages/en.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * TinyMCE language pack.
+ *
+ * @package ElggTinyMCE
+ */
+
+$english = array(
+ 'tinymce:remove' => "Remove editor",
+ 'tinymce:add' => "Add editor",
+ 'tinymce:word_count' => 'Word count: ',
+ 'tinymce:lang_notice' => "Your site language is %s but it isn't installed for TinyMCE. Get it <a target=\"_blank\" href=\"%s\">here</a> and copy it to %s. Then, <a href=\"%s\">flush the caches</a>. See the TinyMCE README for more details.",
+);
+
+add_translation("en", $english);
diff --git a/mod/tinymce/manifest.xml b/mod/tinymce/manifest.xml
new file mode 100644
index 000000000..61bf0c22c
--- /dev/null
+++ b/mod/tinymce/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>TinyMCE</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>enhancement</category>
+ <description>TinyMCE plugin.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/tinymce/start.php b/mod/tinymce/start.php
new file mode 100644
index 000000000..6aba837e0
--- /dev/null
+++ b/mod/tinymce/start.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * TinyMCE wysiwyg editor
+ *
+ * @package ElggTinyMCE
+ */
+
+elgg_register_event_handler('init', 'system', 'tinymce_init');
+
+function tinymce_init() {
+ elgg_extend_view('css/elgg', 'tinymce/css');
+ elgg_extend_view('css/admin', 'tinymce/css');
+
+ elgg_register_js('tinymce', 'mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js');
+ elgg_register_js('elgg.tinymce', elgg_get_simplecache_url('js', 'tinymce'));
+ elgg_register_simplecache_view('js/tinymce');
+
+ elgg_extend_view('input/longtext', 'tinymce/init');
+
+ elgg_extend_view('embed/custom_insert_js', 'tinymce/embed_custom_insert_js');
+
+ elgg_register_plugin_hook_handler('register', 'menu:longtext', 'tinymce_longtext_menu');
+}
+
+function tinymce_longtext_menu($hook, $type, $items, $vars) {
+
+ $items[] = ElggMenuItem::factory(array(
+ 'name' => 'tinymce_toggler',
+ 'link_class' => 'tinymce-toggle-editor elgg-longtext-control',
+ 'href' => "#{$vars['id']}",
+ 'text' => elgg_echo('tinymce:remove'),
+ ));
+
+ return $items;
+}
+
+function tinymce_get_site_language() {
+
+ if ($site_language = elgg_get_config('language')) {
+ $path = elgg_get_plugins_path() . "tinymce/vendor/tinymce/jscripts/tiny_mce/langs";
+ if (file_exists("$path/$site_language.js")) {
+ return $site_language;
+ }
+ }
+
+ return 'en';
+}
diff --git a/mod/tinymce/vendor/tinymce/changelog.txt b/mod/tinymce/vendor/tinymce/changelog.txt
new file mode 100644
index 000000000..12727f119
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/changelog.txt
@@ -0,0 +1,1459 @@
+Version 3.4.7 (2011-11-03)
+ Modified the caret formatting behavior to word similar to common desktop wordprocessors like Word or Libre Office.
+ Fixed bug in Webkit - Cursor positioning does not work vertically within a table cell with multiple lines of text.
+ Fixed bug in IE where Inserting a table in IE8 places cursor in the second cell of the first row.
+ Fixed bug in IE where editor in a frame doesn't give focus to the toolbar using ALT-F10.
+ Fix for webkit and gecko so that deleting bullet from start of list outdents inner list items and moves first item into paragraph.
+ Fix new list items in IE8 not displayed on a new line when list contains nested list items.
+ Clear formatting in table cell breaks the cell.
+ Made media type list localisable.
+ Fix out of memory error when using prototype in media dialog.
+ Fixed bug where could not add a space in the middle of a th cell.
+ Fixed bug where adding a bullet between two existing bullets adds an extra one
+ Fixed bug where trying to insert a new entry midway through a bulleted list fails dismally when the next entry is tabbed in.
+ Fixed bug where pressing enter on an empty list item does not outdent properly in FF
+ Fixed bug where adding a heading after a list item in a table cell changes all styles in that cell
+ Fixed bug where hitting enter to exit from a bullet list moves cursor to the top of the page in Firefox.
+ Fixed bug where pressing backspace would not delete HRs in Firefox and IE when next to an empty paragraph.
+ Fixed bug where deleting part of the link text can cause a link with no destination to be saved.
+ Fixed bug where css style border widths wasn't handled correctly in table dialog.
+ Fixed bug where parsing invalid html contents on IE or WebKit could produce an infinite loop.
+ Fixed bug where scripts with custom script types wasn't properly passed though the editor.
+ Fixed issue where some Japanese kanji characters wasn't properly entity encoded when numeric entity mode was enabled.
+ Made emoticons dialog use the keyboard naviation.
+ Added navigation instructions to the symbols dialog.
+ Added ability to set default values for the media plugin.
+ Added new font_size_legacy_values option for converting old font element sizes to span with font-size properties.
+ Fixed bug where the symbols dialog was not accessible.
+ Added quirk for IE ensuring that the body of the document containing tinyMCE has a role="application" for accessibility.
+ Fixed bug where the advanced color picker wasn't working properly on FF 7.
+ Fixed issue where the advanced color picker was producing uppercase hex codes.
+ Fixed bug where IE 8 could throw exceptions if the contents contained resizable content elements.
+ Fixed bug where caret formatting wouldn't be correctly applied to previous sibling on WebKit.
+ Fixed bug where the select boxes for font size/family would loose it's value on WebKit due to recent iOS fixes.
+Version 3.4.6 (2011-09-29)
+ Fixed bug where list items were being created for empty divs.
+ Added support in Media plugin for audio media using the embed tag
+ Fixed accessibility bugs in WebKit and IE8 where toolbar items were not being read.
+ Added new use_accessible_selects option to ensure accessible list boxes are used in all browsers (custom widget in firefox native on other browsers)
+ Fixed bug where classid attribute was not being checked from embed objects.
+ Fixed bug in jsrobot tests with intermittently failing.
+ Fixed bug where anchors wasn't updated properly if you edited them using IE 8.
+ Fixed bug where input method on WebKit on Mac OS X would fail to initialize when sometimes focusing the editor.
+ Fixed bug where it wasn't possible to select HR elements on WebKit by simply clicking on them.
+ Fixed bug where the media plugin wouldn't work on IE9 when not using the inlinepopups plugin.
+ Fixed bug where hspace,vspace,align and bgcolor would be removed from object elements in the media plugin.
+ Fixed bug where the new youtube format wouldn't be properly parsed by the media plugin.
+ Fixed bug where the style attribute of layers wasn't properly updated on IE and Gecko.
+ Fixed bug where editing contents in a layer would fail on Gecko since contentEditable doesn't inherit properly.
+ Fixed bug where IE 6/7 would produce JS errors when serializing contents containing layers.
+Version 3.4.5 (2011-09-06)
+ Fixed accessibility bug in WebKit where the right and left arrow keys would update native list boxes.
+ Added new whitespace_elements option to enable users to specify specific elements where the whitespace is preserved.
+ Added new merge_siblings option to formats. This option makes it possible to disable the auto merging of siblings when applying formats.
+ Fixed bug in IE where trailing comma in paste plugin would cause plugin to not run correctly.
+ Fixed bug in WebKit where console messages would be logged when deleting an empty document.
+ Fixed bug in IE8 where caret positioned is on list item instead of paragraph when outdent splits the list
+ Fixed bug with image dialogs not inserting an image if id was omitted from valid_elements.
+ Fixed bug where the selection normalization logic wouldn't properly handle image elements in specific config cases.
+ Fixed bug where the map elements coords attribute would be messed up by IE when serializing the DOM.
+ Fixed bug where IE wouldn't properly handle custom elements when the contents was serialized.
+ Fixed bug where you couldn't move the caret in Gecko if you focused the editor using the API or a UI control.
+ Fixed bug where adjacent links would get merged on IE due to bugs in their link command.
+ Fixed bug where the color split buttons would loose the selection on IE if the editor was placed in a frame/iframe.
+ Fixed bug where floated images in WebKit wouldn't get properly linked.
+ Fixed bug where the fullscreen mode in a separate window wasn't forced into IE9+ standards mode.
+ Fixed bug where pressing enter in an empty editor on WebKit could produce DIV elements instead of P.
+ Fixed bug where spans would get removed incorrectly when merging two blocks on backspace/delete on WebKit.
+ Fixed bug where the editor contents wouldn't be completely removed on backspace/delete on WebKit.
+ Fixed bug where the fullpage plugin wouldn't properly render style elements in the head on IE 6/7.
+ Fixed bug where the nonbreaking_force_tab option in the nonbreaking plugin wouldn't work on Gecko/WebKit.
+ Fixed bug where the isDirty state would become true on non IE browsers if there was an table at the end of the contents.
+ Fixed bug where entities wasn't properly encoded on WebKit when pasting text as plain text.
+ Fixed bug where empty editors would produce an exception of valid_elements didn't include body and forced_root_blocks where disabled.
+ Fixed bug where the fullscreen mode wouldn't retain the header/footer in the fullpage plugin.
+ Fixed issue where the plaintext_mode and plaintext_mode_sticky language keys where swapped.
+Version 3.4.4 (2011-08-04)
+ Added new html5 audio support. Patch contributed by Ronald M. Clifford.
+ Added mute option for video elements and preload options for video/audio patch contributed by Dmitry Kalinkin.
+ Fixed selection to match visual selection before applying formatting changes.
+ Fixed browser specific bugs in lists for WebKit and IE.
+ Fixed bug where IE would scroll the window if you closed an inline dialog that was larger than the viewport. Patch by Laurence Keijmel.
+ Fixed bug where pasting contents near a span element could remove parts of that span. Patch contributed by Wesley Walser.
+ Fixed bug where formatting change would be lost after pressing enter.
+ Fixed bug in WebKit where deleting across blocks would add extra styles.
+ Fixed bug where moving cursor vertically in tables in WebKit wasn't working.
+ Fixed bug in IE where deleting would cause error in console.
+ Fixed bug where the formatter was not applying formats across list elements.
+ Fixed bug where the wordcount plugin would try and update the wordcount if tinymce had been destroyed.
+ Fixed bug where tabfocus plugin would attempt to focus elements not displayed when their parent element was hidden.
+ Fixed bug where the contentEditable state would sometimes be removed if you deleted contents in Gecko.
+ Fixed bug where inserting contents using mceInsertContent would fail if "span" was disabled in valid_elements.
+ Fixed bug where initialization might fail if some resource on gecko wouldn't load properly and fire the onload event.
+ Fixed bug where ctrl+7/8/9 keys wouldn't properly add the specific formats associated with them.
+ Fixed bug where the HTML tags wasn't properly closed in the style plugins properties dialog.
+ Fixed bug where the list plugin would produce an exception if the user tried to delete an element at the very first location.
+Version 3.4.3.2 (2011-06-30)
+ Fixed bug where deleting all of a paragraph inside a table cell would behave badly in webkit.
+ Fixed bugs in tests in firefox5 and WebKit.
+ Fixed bug where selection of table cells would produce an exception on Gecko.
+ Fixed bug where the caret wasn't properly rendered on Gecko when the editor was hidden.
+ Fixed bug where pasting plain text into WebKit would produce a pre element it will now produce more semantic markup.
+ Fixed bug where selecting list type formats using the advlist plugin on IE8 would loose editor selection.
+ Fixed bug where forced root blocks logic wouldn't properly pad elements created if they contained data attributes.
+ Fixed bug where it would remove all contents of the editor if you inserted an image when not having a caret in the document.
+ Fixed bug where the YUI compressor wouldn't properly encode strings with only a quote in them.
+ Fixed bug where WebKit on iOS5 wouldn't call nodeChanged when the selection was changed.
+ Fixed bug where mceFocus command wouldn't work properly on Gecko since it didn't focus the body element.
+ Fixed performance issue with the noneditable plugin where it would enable/disable controls to often.
+Version 3.4.3.1 (2011-06-16)
+ Fixed bug where listboxes were not being handled correctly by JAWS in firefox with the o2k7 skin.
+ Fixed bug where custom buttons were not being rendered correctly when in high contrast mode.
+ Added support for iOS 5 that now supporting contentEditable in it's latest beta.
+ Fixed bug where urls in style attributes with a _ character followed by a number would cause incorrect output.
+ Fixed bug where custom_elements option wasn't working properly on IE browsers.
+ Fixed bug where custom_elements marked as block elements wouldn't get correctly treated as block elements.
+ Fixed bug where attributes with </> wasn't properly encoded as XML entities.
+Version 3.4.3 (2011-06-09)
+ Fixed bug where deleting backwards before an image into a list would put the cursor in the wrong location.
+ Fixed bug where styles plugin would not apply styles across multiple selected block elements correctly.
+ Fixed bug where cursor would jump to start of document when selection contained empty table cells in IE8.
+ Fixed bug where applied styles wouldn't be kept if you pressed enter twice to produce two paragraphs.
+ Fixed bug where a ghost like caret would appear on Gecko when pressing enter while having a text color applied.
+ Fixed bug where IE would produce absolute urls if you inserted a image/link and reloaded the page.
+ Fixed bug where applying a heading style to a list item would cascade style to children list items.
+ Fixed bug where Editor loses focus when backspacing and changing styles in WebKit.
+ Fixed bug where exception was thrown in tinymce.util.URI when parsing a relative URI and no base_uri setting was provided.
+ Fixed bug where alt-f10 was not always giving focus to the toolbar on Safari.
+ Added new 'allow_html_in_named_anchor' option to allow html to occur within a named anchor tag. Use at own risk.
+ Added plugin dependency support. Will autoload plugins specified as a dependency if they haven't been loaded.
+ Fixed bug where the autolink plugin didn't work with non-English keyboards when pressing ).
+ Added possibility to change properties of all table cells in a column.
+ Added external_image_list option to get images list from user-defined variable or function.
+ Fixed bug where the autoresize plugin wouldn't reduce the editors height on Chrome.
+ Fixed bug where table size inputs were to small for values with size units.
+ Fixed bug where table cell/row size input values were not validated.
+ Fixed bug where menu item line-height would be set to wrong value by external styles.
+ Fixed bug where hasUndo() would return wrong answer.
+ Fixed bug where page title would be set to undefined by fullpage plugin.
+ Fixed bug where HTML5 video properties were not updated in embedded media settings.
+ Fixed bug where HTML comment on the first line would cause an error.
+ Fixed bug where spellchecker menu was positioned incorrectly on IE.
+ Fixed bug where breaking out of list elements on WebKit would produce a DIV instead of P after the list.
+ Fixed bug where pasting from Word in IE9 would add extra BR elements when text was word wrapped.
+ Fixed bug where numeric entities with leading zeros would produce incorrect decoding.
+ Fixed bug where hexadecimal entities wasn't properly decoded.
+ Fixed bug where bookmarks wasn't properly stored/restored on undo/redo.
+ Fixed bug where the mceInsertCommand didn't retain the values of links if they contained non url contents.
+ Fixed bug where the valid_styles option wouldn't be properly used on styles for specific elements.
+ Fixed so contentEditable is used for the body of the editor if it's supported.
+ Fixed so trailing BR elements gets removed even when forced_root_blocks option was set to false/null.
+ Fixed performance issue with mceInsertCommand and inserting very simple contents.
+ Fixed performance issue with older IE version and huge documents by optimizing the forced root blocks logic.
+ Fixed performance issue with table plugin where it checked for selected cells to often.
+ Fixed bug where creating a link on centered/floated image would produce an error on WebKit browsers.
+ Fixed bug where Gecko would remove single paragraphs if there where contents before/after it.
+ Fixed bug where the scrollbar would move up/down when pasting contents using the paste plugin.
+Version 3.4.2 (2011-04-07)
+ Added new 'paste_text_sticky_default' option to paste plugin, enables you to set the default state for paste as plain text.
+ Added new autoresize_bottom_margin option to autoresize plugin that enables you to add an extra margin at the bottom. Patch contributed by Andrew Ozz.
+ Rewritten the fullpage plugin to handle style contents better and have a more normalized behavior across browsers.
+ Fixed bug where contents inserted with mceInsertContent wasn't parsed using the default dom parser.
+ Fixed bug where blocks containing a single anchor element would be treated as empty.
+ Fixed bug where merging of table cells on IE 6, 7 wouldn't look correctly until the contents was refreshed.
+ Fixed bug where context menu wouldn't work properly on Safari since it was passing out the ctrl key as pressed.
+ Fixed bug where image border color/style values were overwritten by advimage plugin.
+ Fixed bug where setting border in advimage plugin would throw error in IE.
+ Fixed bug where empty anchors list in link settings wasn't hidden.
+ Fixed bug where xhtmlextras popups were missing localized popup-size parameters.
+ Fixed bug where the context menu wouldn't select images on WebKit browsers.
+ Fixed bug where paste plugin wouldn't properly extract the contents on WebKit due to recent changes in browser behavior.
+ Fixed bug where focus of the editor would get on control contents on IE lost due to a bug in the ColorSplitButton control.
+ Fixed bug where contextmenu wasn't disabled on noneditable elements.
+ Fixed bug where getStyle function would trigger error when called on element without style property.
+ Fixed bug where editor fail to load if Javascript Compressor was used.
+ Fixed bug where list-style-type=lower-greek would produce errors in IE<8.
+ Fixed bug where spellchecker plugin would produce errors on IE6-7.
+ Fixed bug where theme_advanced_containers configuration option causes error.
+ Fixed bug where the mceReplaceContent command would produce an error since it didn't correctly handle a return value.
+ Fixed bug where you couldn't enter float point values for em in dialog input fields since it wouldn't be considered a valid size.
+ Fixed bug in xhtmlxtras plugin where it wasn't possible to remove some attributes in the attributes dialog.
+Version 3.4.1 (2011-03-24)
+ Added significantly improved list handling via the new 'lists' plugin.
+ Added 'autolink' plugin to enable automatically linking URLs. Similar to the behavior IE has by default.
+ Added 'theme_advanced_show_current_color' setting to enable the forecolor and backcolor buttons to continuously show the current text color.
+ Added 'contextmenu_never_use_native' setting to disable the ctrl-right-click showing the native browser context menu behaviour.
+ Added 'paste_enable_default_filters' setting to enable the default paste filters to be disabled.
+ Fixed bug where selection locations on undo/redo didn't work correctly on specific contents.
+ Fixed bug where an exception would be trown on IE when loading TinyMCE inside an iframe.
+ Fixed bug where some ascii numeric entities wasn't properly decoded.
+ Fixed bug where some non western language codes wasn't properly decoded/encoded.
+ Fixed bug where undo levels wasn't created when deleting contents on IE.
+ Fixed bug where the initial undo levels bookmark wasn't updated correctly.
+ Fixed bug where search/replace wouldn't be scoped to editor instances on IE8.
+ Fixed bug where IE9 would produce two br elements after block elements when pasting.
+ Fixed bug where IE would place the caret at an incorrect position after a paste operation.
+ Fixed bug where a paste operation using the keyboard would add an extra undo level.
+ Fixed bug where some attributes/elements wasn't correctly filtered when invalid contents was inserted.
+ Fixed bug where the table plugin couldn't correctly handle invalid table structures.
+ Fixed bug where charset and title of the page were handled incorrectly by the fullpage plugin.
+ Fixed bug where toggle states on some of the list boxes didn't update correctly.
+ Fixed bug where sub/sub wouldn't work correctly when done as a caret action in Chrome 10.
+ Fixed bug where the constrain proportions checkbox wouldn't work in the media plugin.
+ Fixed bug where block elements containing trailing br elements wouldn't treated properly if they where invalid.
+ Fixed bug where the color picker dialog wouldn't be rendered correctly when using the o2k7 theme.
+ Fixed bug where setting border=0 using advimage plugin invalid style attribute content was created in Chrome.
+ Fixed bug with references to non-existing images in css of fullpage plugin.
+ Fixed bug where item could be unselected in spellchecker's language selector.
+ Fixed bug where some mispelled words could be not highlighted using spellchecker plugin.
+ Fixed bug where spellchecking would merge some words on IE.
+ Fixed bug where spellchecker context menu was not always positioned correctly.
+ Fixed bug with empty anchors list in advlink popup when Invisible Elements feature was disabled.
+ Fixed bug where older IE versions wouldn't properly handle some elements if they where placed at the top of editor contents.
+ Fixed bug where selecting the whole table would enable table tools for cells and rows.
+ Fixed bug where it wasn't possible to replace selected contents on IE when pasting using the paste plugin.
+ Fixed bug where setting text color in fullpage plugin doesn't work.
+ Fixed bug where the state of checkboxes in media plugin wouldn't be set correctly.
+ Fixed bug where black spade suit character was not included in special character selector.
+ Fixed bug where setting invalid values for table cell size would throw an error in IE.
+ Fixed bug where spellchecking would remove whitespace characters from PRE block in IE.
+ Fixed bug where HR was inserted inside P elements instead of splitting them.
+ Fixed bug where extra, empty span tags were added when using a format with both selector and inline modes.
+ Fixed bug where bullet lists weren't always detected correctly.
+ Fixed bug where deleting some paragraphs on IE would cause an exception.
+ Fixed bug where the json encoder logic wouldn't properly encode \ characters.
+ Fixed bug where the onChange event would be fired when the editor was first initialized.
+ Fixed bug where mceSelected wouldn't be removed properly from output even if it's an internal class.
+ Fixed issue with table background colors not being transparent. This improves compliance with users browser color preferences.
+ Fixed issue where styles were not included when using the full page plugin.
+ Fixed issue where drag/drop operations wasn't properly added to the undo levels.
+ Fixed issue where colors wasn't correctly applied to elements with underline decoration.
+ Fixed issue where deleting some paragraphs on IE would cause an exception.
+Version 3.4 (2011-03-10)
+ Added accessibility example with various accessibility options contributed by Ephox.
+ Fixed bug where attributes wasn't properly handled in the xhtmlxtras plugin.
+ Fixed bug where the image.htm had some strange td artifacts probably due to auto merging.
+ Fixed bug where the ToolbarGroup had an missing reference to this in it's destroy method.
+ Fixed bug with the resizeBy function in the advanced theme where it was scaled by the wrong parent.
+ Fixed bug where an exception would be thrown by the element if the page was served in xhtml mode.
+ Fixed bug where mceInsertContent would throw an exception when page was served in xhtml mode.
+ Fixed bug where you couldn't select a forground/background color when page was served in xhtml mode.
+ Fixed bug where the editor would scroll to the toolbar when clicked due to a call to focus in ListBox.
+ Fixed bug where pages with rtl dir wouldn't render split buttons correctly when using the o2k7 theme.
+ Fixed bug where anchor elements with names wasn't properly collapsed as they where in 3.3.x.
+ Fixed bug where WebKit wouldn't properly handle image selection if it was done left to right.
+ Fixed bug where the formatter would align images when the selection range was collapsed.
+ Fixed bug where the image button would be active when the selection range was collapsed.
+ Fixed bug where the element_format option wasn't used by the new (X)HTML serializer logic.
+ Fixed bug where the table cell/row dialogs would produce empty attributes.
+ Fixed bug where the tfoot wouldn't be added to the top of the table.
+ Fixed bug where the formatter would merge siblings with white space between them.
+ Fixed bug where pasting headers and paragraphs would produce an extra paragraph.
+ Fixed bug where the ColorSplitButton would throw an exception if you clicked out side a color.
+ Fixed bug where IE9 wouldn't properly produce new paragraphs on enter if the current paragraph had formatting.
+ Fixed bug where multiple BR elements at end of block elements where removed.
+ Fixed bug where fullscreen plugin wouldn't correctly display the edit area on IE6 for long pages.
+ Fixed bug where paste plugin wouldn't properly encode raw entities when pasting in plain text mode.
+ Fixed bug where the search/replace plugin wouldn't work correctly on IE 9.
+ Fixed so the drop menus doesn't get an outline border visible when focused, patch contributed by Ephox.
+ Fixed so the values entered in the color picker are forced to hex values.
+ Removed dialog workaround for IE 9 beta since the RC is now out and people should upgrade.
+ Removed obsolete calls in various plugins to the mceBeginUndoLevel command.
+Version 3.4b3 (2011-02-10)
+ Added WAI-ARIA support for the main UI and dialogs this feature was contributed by Ephox.
+ Added iframe support to media plugin in order to handle the new YouTube HTML5 video formats.
+ Fixed bug where anchors would wrap the text contents after it due to a bug in the DomParser logic.
+ Fixed bug where the selected state wouldn't be removed on ListBox controls when a menu item was selected.
+ Fixed bug where IE could throw an unspecified error exception when the getBookmark logic was executed.
+ Fixed bug where IE would throw an invalid argument error when focus was applied to an empty editor instance.
+ Fixed bug where applying inline format wouldn't work if the start cell in the selection was empty.
+ Fixed bug where auto detection logic for YouTube and Google Video wouldn't work in the new media plugin.
+ Fixed bug where td elements would get a colspan/rowspan of 1 when created by the table plugin.
+ Fixed bug where removal/padding of empty elements wasn't handled correctly.
+ Fixed bug where internal elements would show up in element path.
+ Fixed bug where internal elements would get serialized as valid output.
+ Fixed bug where color wasn't correctly applied to anchor elements.
+ Fixed bug where float option in the style plugin dialog wouldn't be handled correctly on WebKit.
+ Fixed bug where the tinymce.dom.TreeWalker prev function wouldn't walk the DOM correctly.
+ Fixed bug where mceInsertContent command could produce empty block elements after the inserted content.
+ Fixed bug where mceInsertContent command wouldn't apply visual aids on tables and similar elements.
+ Fixed bug where empty block elements would get double br bogus elements in them.
+ Fixed bug where the color menu wouldn't apply the color correctly on IE when the viewport was to small.
+ Fixed bug where right clicking out side the body element of the editor iframe would prevent paste from working on IE.
+ Fixed bug where the onContextMenu event wouldn't fire correctly on IE if you clicked out side the body element.
+ Fixed bug where the onContextMenu event wouldn't fire correctly on modern Opera versions that now support it by default.
+ Fixed bug where legacy content wasn't converted correctly when inserted using mceInsertContent or through the source dialog.
+ Fixed bug where resizing images or tables wouldn't update the style attribute correctly or leave data-mce prefixed attributes.
+ Fixed bug where adding links wouldn't work correctly when using TinyMCE jQuery version with jQuery 1.5.
+ Fixed bug where single quotes inside param elements wasn't treated correctly by the media plugin.
+ Fixed bug where pasting plain text in WebKit wouldn't work correctly. It will now auto detect the WebKit bug and use plain text mode.
+ Fixed bug where the DomParser would fail to move out invalid elements within invalid elements on complex contents.
+ Fixed bug where paste as plain text would not decode html entities properly.
+ Fixed bug where large paragraphs would cause incorrect scrolling behavior if you would split them using enter.
+ Fixed bug where the SaxParser wouldn't properly parse some specific short ended elements.
+ Fixed so mceReplaceContent supports caret position and makes sure that the contents inserted gets validated.
+ Fixed so unnecessary traling br elements in blocks gets removed on Gecko/WebKit when using mceInsertContent command.
+ Moved some plugin css contents into the skin content css files to reduce the number of http requests.
+ Moved some plugin specific images into the theme img directory since they can then be shared.
+Version 3.4b2 (2011-01-13)
+ Added new custom flash player, this player supports mp4 and flv and has skin support.
+ Fixed so mceInsertContent handles context correctly to enforce valid nesting of elements.
+ Fixed bug where scrolling would become jerky on IE on some contents.
+ Fixed bug where paste as plain text would throw exception of missing entities setting.
+ Fixed bug where anchor nodes where removed by the new serializer engine.
+ Fixed bug where IE would crash if when backspace where used on some specific contents.
+ Fixed bug where pasting of plain text in WebKit would result in merging of text lines.
+ Fixed bug where it wasn't possible to delete images or tables using backspace on IE9.
+ Fixed bug where urls in styles would generate a JS error due to incorrect scope.
+ Fixed bug where copy paste from Java applications would produce extra contents in FF on Mac.
+ Fixed bug where the verify_html option wouldn't allow all elements and attributes.
+Version 3.4b1 (2010-12-20)
+ Added new serialization engine that increases performance and enforces valid output according to the specified schema settings.
+ Added new HTML parser logic used by the serialization engine and can handle malformed html contents.
+ Added new valid_children config option, enables more fine grain control of elements can be inside other elements.
+ Added new entities encoding logic boost performance and will only encode entities based on context i.e. attributes/text nodes.
+ Added new protect setting that enables users to protect template items from being removed by the serializer logic.
+ Added new {$caret} marker for the mceInsertContent command. Makes it possible to move the caret to a specific position when inserting contents.
+ Added new validation of anchor names. Only valid W3C names will be accepted.
+ Replaced the internal _mce_ prefixed attributes to the more standard HTML5 data-mce- prefix. This will also resolve future browser santiaztion issues.
+ Fixed bug where the paste plugin wouldn't convert Word lists with more than 9 items to real ol lists. Patch contributed by Mike (yogaboy).
+ Fixed bug where clicking on a format title would produce errors if the current selection didn't have any formats.
+ Fixed bug where paste of simple texts wouldn't work correctly in Gecko using the paste plugin since it keeps block formatting.
+ Fixed bug where confirm dialogs didn't display correctly due to resent IE9 fixes.
+ Fixed bug where spaces in URLs wouldn't be properly encoded to %20 if the user entered them in the link dialogs. Patch contributed by Ephox.
+ Fixed bug where the image alignment buttons wouldn't reposition the resize handles on FF due to a browser issue. Patch contributed by Ephox.
+ Fixed bug where the compareBoundaryPoints method of the IE Range class didn't work correctly. Patch contributed by Ephox.
+ Fixed bug where selection of elements using double click wouldn't select the clicked element but rather the parent node on FF. Patch contributed by Ephox.
+ Fixed bug where IE would scroll the user to the current selection causing parent document to scroll as well. Patch contributed by Ephox.
+ Fixed bug where style compression would incorrectly compress items with different values. It now only compresses if the values are the same. Patch contributed by Ephox.
+ Fixed bug where FF would add non breaking spaces outside TD elements if formatting was applied to table cells. Patch contributed by Ephox.
+ Fixed bug where the caret position would be lost on WebKit browsers if you pasted images multiple times. Patch contributed by Ephox.
+ Fixed bug where non word contents like * would be counted as words in the wordcount pluging. Patch contributed by David Balatero.
+ Fixed bug where the toggle absolute button in the layer plugin wouldn't remove the existing internal style attribute first.
+ Fixed bug where the autosave plugin would generate an exception on IE if the user had disabled userdata persistence.
+ Fixed bug where the paste plugin would remove dashed classes on IE since the regexps didn't include that character.
+ Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
+ Fixed bug where applying block formats to empty elements wouldn't render correctly on IE.
+ Fixed bug where the searchreplace plugin would add a f or r character when shortcuts where used on IE while using default dialogs.
+ Fixed bug where Opera wouldn't load scripts correctly since the onreadystate would fire even though the script wasn't loaded.
+ Fixed issue where &nbsp; wouldn't be handled correctly in the bbcode plugin if entity_encoding was set to raw.
+ Fixed issue where contents would flicker since the content css files where asynchronously loaded.
+ Fixed bug where WebKit wouldn't create links on images with a float style.
+Version 3.3.9.3 (2010-12-20)
+ Fixed issue where WebKit wouldn't correctly apply ins/del in xhtmlxtras plugin.
+ Fixed bug where paste as plaintext on WebKit wouldn't produce br and p elements correctly.
+ Fixed bug where the confirm dialog texts would be incorrectly placed due to recent IE 9 workarounds in the window.css.
+ Fixed bug where applying text color would not add spans inside link elements. This is needed due to CSS style inheritance.
+Version 3.3.9.2 (2010-09-29)
+ Fixed bug where placing the caret in IE 9 beta 1 would not work correctly if you clicked out side the document body element.
+ Fixed bug where IE 9 beta 1 wouldn't resize the editor correctly since the events didn't fire as previous versions did.
+ Fixed bug where FF would produce an error message when being rendered inside a hidden div element.
+ Fixed bug where resize logic could produce a cookie with a width/height less than the size of the container.
+ Fixed bug where content_css wouldn't populate the styles dropdown correctly.
+Version 3.3.9.1 (2010-09-23)
+ Fixed bug where WebKit browsers wouldn't activate the image button when images where selected.
+ Fixed bug where Opera Presto 10.60 deletes elements when restoring bookmarks.
+ Fixed bug where IE9 beta1 doesn't handle regexp replacement values correctly.
+ Fixed bug where IE9 beta1 didn't render the inline dialogs correctly due to a bug with CSS clip.
+ Fixed bug where IE9 beta1 would produce error messages on load since they removed the document.recalc method.
+ Fixed bug where IE9 beta1 would produce <html xmlns=""> since they haven't implemented document.implementation.createDocument correctly.
+ Fixed bug where IE9 beta1 would searchreplace doesn't work since their native DOM Range doesn't have a find method.
+ Fixed bug where IE9 beta1 would render the source view incorrectly due to incorrect viewport size measurements.
+ Fixed bug where IE9 beta1 would crash when running the basic functionality unit tests.
+ Fixed bug where IE9 beta1 would wrap elements in blocks correctly due to changes to the selection object.
+ Fixed bug where IE9 beta1 would fail to insert contents since they havn't implemented the createContextualFragment method in their DOM Range.
+ Fixed bug where IE9 beta1 would fail to handle image selection since they currently doesn't support control selections in their DOM Range.
+ Fixed bug where IE9 beta1 would fail to load scripts since they fire the onload event before the scripts are parsed and executed.
+Version 3.3.9 (2010-09-08)
+ Fixed bug where inserting table rows into a table with subtable would produce an incorrect column count.
+ Fixed bug where the selection of cells in a table with subtables could produce invalid selections.
+ Fixed bug where the table plugin would produce a script error if you tried to move the caret before a first child table.
+ Fixed bug where the keep_styles feature on IE would move the caret to an incorrect location at the end of list blocks.
+ Fixed so attributes from legacy elements such as font gets retained when they get converted to spans.
+ Fixed minor issue where the select boxes wouldn't be set the not set by default in the table dialog.
+Version 3.3.8 (2010-06-30)
+ On IE8+ and FireFox 3.5+, dragging an image now correctly adds an undo
+ event.
+ Fixed bug where WebKit would not move the caret to a correct position after a paste operation.
+ Fixed bug where WebKit would produce a div wrapper element when pasting some contents.
+ Fixed bug where the visual chars and nonbreaking plugin wouldn't show nbsp elements correctly.
+ Fixed bug where the format states would be enabled even after the format was removed.
+ Fixed bug where the delete key would move the caret to an incorrect position.
+ Fixed bug where it wasn't possible to toggle of the current font size/family/style by clicking the title item.
+ Fixed bug where the abbr element wouldn't get serialized correctly on IE6.
+ Fixed so that the examples checks if they are executed from the local file system since that might not work properly.
+Version 3.3.7 (2010-06-10)
+ Fixed bug where context menu would produce an error on IE if you right clicked twice and left clicked once.
+ Fixed bug where resizing of the window on WebKit browsers in fullscreen mode wouldn't position the statusbar correctly.
+ Fixed bug where IE would produce an error if the editor was empty and you where undoing to that initial level.
+ Fixed bug where setting the table background on gecko would produce \" entities inside the url style property.
+ Fixed bug where the button states wouldn't be updated correctly on IE if you placed the caret inside the new element.
+ Fixed bug where undo levels wasn't properly added after applying styles or font sizes.
+ Fixed bug where IE would throw an error if you used "select all" on empty elements and applied formatting to that.
+ Fixed bug where IE could select one extra character when you did a bookmark call on a caret location.
+ Fixed bug where IE could produce a script error on delete since it would sometimes produce an invalid DOM.
+ Fixed bug where IE would return the wrong start element if the whole element was selected.
+ Fixed bug where formatting states wasn't updated on IE if you pressed enter at the end of a block with formatting.
+ Fixed bug where submenus for the context menu wasn't removed correctly when the editor was destroyed.
+ Fixed bug where Gecko could select the wrong element after applying format to multiple elements.
+ Fixed bug where Gecko would delete parts of the previous element if the selection range was a element selection.
+ Fixed bug where Gecko would not merge paragraph elements correctly if they contained br elements.
+ Fixed bug where the cleanup button could produce span artifacts if you pressed it twice in a row.
+ Fixed bug where the fullpage plugin header/footer would be have it's header reseted to it's initial state on undo.
+ Fixed bug where an empty paragraph would be collapsed if you performed a cleanup while having the caret inside it.
+ Fixed a few memory leaks on IE especially with drop menus in listboxes and the spellchecker.
+ Fixed so formats applied to the current caret gets merged to reduce the number of output elements.
+ Added the latest version of Sizzle for the CSS selector logic to fix a compatibility issue with prototype.
+Version 3.3.6 (2010-05-20)
+ Fixed bug where a editor.focus call could produce errors on IE in very specific scenarios.
+ Fixed bug where Gecko would produce an error if you unformatted text inside an empty element.
+ Fixed bug where IE would produce an error if the caret was placed before a table and you used the align buttons.
+ Fixed bug where the font size drop down didn't display the a preview correctly.
+ Fixed bug where the paste plugin wouldn't include all contents some times on WebKit browsers.
+ Fixed bug where the plain text mode toggle wouldn't work properly on WebKit.
+ Fixed bug where the editors statusbar would become invisible when you resized the window in fullscreen mode.
+Version 3.3.5.1 (2010-05-07)
+ Fixed a critical bug with the fullscreen plugin. Produced error messages when the state was toggled on/off.
+Version 3.3.5 (2010-05-06)
+ Added new merge_with_parents option to formats, enables the control of removal of elements with similar parents.
+ Fixed so the default behavior for applying classes isn't a toggle state but the old behavior from before the 3.3 release.
+ Fixed bug where selecting contents using double click on Gecko would produce errors when using removing format.
+ Fixed bug where the IE DOM could get messed up when non valid contents was pasted into the editor.
+ Fixed bug where merging selected table cells using the context menu didn't work as expected.
+ Fixed bug where some nestled formatting would be applied incorrectly.
+ Fixed bug with enter in list items when using the force_br_newlines mode on WebKit patch contributed by Ryan Koopmans.
+ Fixed bug where undo/redo could produce js errors on some specific operations.
+ Fixed bug where the theme_advanced_font_sizes didn't work as before 3.3 when complex settings where used.
+ Fixed bug where the table plugin would copy cell/row id attributes when making new rows/cells.
+Version 3.3.4 (2010-04-27)
+ Fixed bug where fullscreen plugin would add two editor instances to EditorManager collection.
+ Fixed bug where it was difficult to enter text on non western languages such as Japanese on IE.
+ Fixed bug where removing contents from nodes could result in an exception when using undo/redo.
+ Fixed bug with selection of images inside layers or other resizable containers on IE.
+ Fixed so editors isn't initialized on iPhone/iPad devices since they don't have caret support.
+Version 3.3.3 (2010-04-19)
+ Added new script_loaded callback function setting for the jQuery plugin.
+ Added various fixes and new rpc methods for the spellchecker plugin. Patch contributed by Michael Peters.
+ Removed some unnecessary inline style information from some of the dialogs.
+ Fixed some issues with the chaining for the TinyMCE jQuery plugin.
+ Fixed so any extra arguments passed to patched jQuery functions gets passed through. Patch contributed by Lee Henson.
+ Fixed so spellchecking/contextmenu can be toggled on/off if the browser has native spellchecker support.
+ Fixed bug where some texts in the new paste plugin wasn't placed in language pack.
+ Fixed bug where IE would produce an incorrect information message when cutting.
+ Fixed bug where removing items using the xhtmlxtras plugin wouldn't work correctly.
+ Fixed bug where setting table background images would add extra quotes on Gecko.
+ Fixed bug where shortcut for bold/italic/underline wouldn't work properly on WebKit.
+ Fixed bug where IE would produce an error message if only contents was an image tag and bold was used.
+ Fixed bug where the caret would move if alignment was applied to empty block elements.
+ Fixed bug where some shortcut key commands wouldn't apply formatting correctly.
+Version 3.3.2 (2010-03-25)
+ Fixed bug where it was possible to scale the editor iframe smaller than the editor UI.
+ Fixed bug where some of the resizing option didn't work with the new live resize.
+ Fixed bug where the format listbox didn't show nestled formats correctly.
+ Fixed bug where the native listboxes didn't work correctly.
+ Fixed bug where font size selection in using the legacyoutput plugin would produce errors.
+ Fixed so block and blockquote formats remove their matching element regardless of it's attributes.
+Version 3.3.1 (2010-03-18)
+ Added new live resize feature, the editor contents is now visible while resizing.
+ Fixed bug where some valid_element patterns would produce an unknown property error.
+ Fixed bug where it wasn't possible to toggle off blockquotes.
+ Fixed bug where an undo level wasn't produced when applying formatting using the styles dropdown.
+ Fixed bug where IE 6/7 wouldn't perform caret formatting due to a focus/event bug in IE.
+ Fixed bug where undo/redo wasn't restoring the previous selection correctly.
+ Fixed bug where the caret would become invisible if you resized the editor in latest Gecko.
+ Fixed bug where the class attribute wasn't completely removed in IE 6/7 when the removeClass function was used.
+ Fixed so the matchNode method of the Formatter class returns the matched format rule.
+ Fixed so it's possible to apply formatting to both blocks and as inline elements.
+Version 3.3 (2010-03-10)
+ Fixed bug where backspace on a table on IE would produce an empty tbody and some JS exceptions.
+ Fixed bug where some redundant children wasn't removed properly when applying inline styles to them.
+ Fixed bug where Chrome would produce incorect dialog sizes if the inlinepopups plugin wasn't used.
+ Fixed bug where spans with different classes would get merged if they where siblings to each other.
+ Fixed bug where IE 8 would crash if you used the spellchecker.
+ Fixed bug where Input Method for non western languages didn't work correctly.
+ Fixed bug where the UI would render incorrectly in FF 3.6 on Mac due to a bug n their rendering engine.
+ Fixed bug where WebKit wouldn't scroll down correctly if Shift+Enter was used. Patch contributed by Thomas Andersen.
+Version 3.3rc1 (2010-02-23)
+ Fixed bug with new legacyoutput plugin not working correctly on it's own.
+ Fixed bug some performance issues with removing text formats.
+ Fixed bug where TinyMCE specific attributes wasn't removed properly by remove format.
+ Fixed bug where it wasn't possible to align images within inline elements.
+ Fixed bug where Ctrl+Delete/Backspace would produce an invalid argument exception on IE.
+ Fixed bug where the search/replace logic could produce an infinite loop on IE for reverse searches.
+ Fixed bug where cloning formats in cells didn't work properly on IE.
+ Fixed bug where IE6 would produce a horizontal scroll bar.
+ Fixed so remove jQuery method removes the TinyMCE instance as well as the specified textarea.
+ Fixed so selected rows and cells gets updated using the row/cell properties dialogs.
+Version 3.3b2 (2010-02-04)
+ Fixed bug where sometimes img elements would be removed by split method in DOMUtils.
+ Fixed bug where merging of span elements could occur on bookmark nodes.
+ Fixed bug where classes wasn't properly removed when removeformat was used on IE 6.
+ Fixed bug where multiple calls to an tinyMCE.init with mode set to exact could produce the same unique ID.
+ Fixed bug with the IE selection implementation when it was feeded an document range.
+ Fixed bug where block elements formatting wasn't properly removed by removeformat on all browsers.
+ Fixed bug where selection location was lost if you performed a manual cleanup.
+ Fixed bug where removeformat wouldn't remove span elements within styled block elements.
+ Fixed bug where an error would be thrown if you clicked on the separator lines in menus.
+ Fixed bug with the jQuery plugin adding always adding a querystring value to other resources.
+ Fixed bug where IE would produce an error message if you had an empty editor instance.
+ Fixed bug where Shift+Enter didn't produce br elements on WebKit browsers.
+ Fixed bug where a temporary marker element wasn't removed by the paste plugin.
+ Fixed bug where inserting a table would produce two undo levels instead of one.
+Version 3.3b1 (2010-01-25)
+ Added new text formatting engine. Fixes a lot of browser quirks and adds new possibilities.
+ Added new advlist plugin that enables you to set the formats of list elements.
+ Added new paste plugin logic that enables you to retain style information from Office.
+ Added new autosave plugin logic that automatically saves contents in local storage.
+ Added new valid_styles option. Adds the possibility to restrict styles and their order.
+ Added new theme_advanced_runtime_fontsize option to display the runtime font size in font size select box.
+ Added new jquery plugin version that handles the gzip compressor amongst other things. Contributed by Speednet.
+ Added new $ function to tinymce namespace and editor instances for the jQuery build.
+ Added the possibility to get editors by index as well as name in the tinyMCE.editors collection.
+ Fixed so the contents inside the editor renders in standards mode by default.
+ Fixed bug where it wasn't possible to move the caret on short documents running in standards mode on IE.
+ Fixed bug where the decode method of the DOMUtils class could end up in an endless loop.
+ Fixed bug where it was possible to bypass the paste cleanup on non IE browsers if you clicked while pasting.
+ Fixed bug where some attributes wasn't serialized correctly on IE if wildcard attribute patters where used.
+ Fixed bug where entity decoding was performed on strings that didn't have any valid entities in them.
+ Fixed bugs with the insertNode method of the IE DOMRange implementation. Patch contributed by Scott McNaught.
+ Rewrote the getBookmark/moveToBookmark selection logic to boost performance on larger documents.
+ Rewrote the table plugin to include new cell selection logic and fixed various bugs and issues.
+ Merged the tinyMCE, tinymce and tinymce.EditorManager into the same instance makes more sense.
+ Removed browser setting since the browser support for TinyMCE is not far better than it was when that setting was introduced.
+ Changed the mce_ attribute prefix to the more standard _mce_ prefix. This is similar to browser vendors prefixes.
+ Optimized performance with named entities on Gecko. Regexp replace was executing very slowly probably due to a Gecko bug.
+ Optimized performance of the IE specific selection/range implementation.
+ Removed the safari plugin since we now replaced all text formatting logic to custom code.
+Version 3.2.7 (2009-09-22)
+ Fixed bug where uppercase paragraphs could still produce an invalid DOM tree on IE.
+ Fixed bug where split command didn't work on WebKit since the node serializer needs a real document to work with.
+ Fixed bug where it was impossible in Gecko to place the caret before a table if it was the first one.
+ Fixed bug where linking to urls like ../../ would produce an extra traling slash ../..//.
+ Fixed bug where the template cdate functionality was using an old 2.x API call. Patch contributed by vectorjohn.
+ Fixed bug where urls to the same site but different protocol would be converted when relative_urls where set to false. Patch contributed by Ted Rust.
+ Fixed bug where the paste plugin would remove mceItem prefixed classes.
+ Fixed bug where the paste plugin would sometimes add items in a reverse order on WebKit.
+ Fixed bug where the paste buttons would present an error message on Gecko even if you changed user.js. Patch contributed by Todd (teeaykay).
+ Fixed bug where Opera would crash if you had tables incorrectly placed inside paragraphs.
+ Fixed bug where styles elements wasn't properly processed if you had bad input HTML.
+ Fixed bug where style attributes wasn't properly forced into a specific format.
+ Fixed bug and issues with boolean attributes like checked, nowrap etc.
+ Fixed bug where input elements could override attributes on form elements.
+ Fixed bug where script or style elements could get modified by the DOMUtils processHTML method.
+ Fixed bug where the selected attribute could get lost when force root blocks logic got executed on IE. Patch contributed by Attila Mezei-Horvati.
+ Fixed bug where getAttribs method didn't handle boolean attributes correctly on IE.
+ Fixed so the paste from word dialog is presented if you paste content on an IE with to restrictive security settings.
+ Fixed so the paste_strip_class_attributes option is set to none by default in the paste plugin.
+ Removed default border=0 on tables for the default value of valid_elements.
+Version 3.2.6 (2009-08-19)
+ Added new wordcount plugin, this will display the number of typed words as you write. Contributed by Andrew Ozz.
+ Added new getNext and getPrev methods to DOM utils. These will return the first matching sibling.
+ Fixed bug where it was impossible to place the caret after a table on Gecko. It will now add a paragraph after tables.
+ Fixed bug where inline dialogs would fail if used in a window opened using a showModalDialog. Patch contributed by Derek Britt.
+ Fixed bug where IE could sometimes render a unknown runtime error on invalid input HTML.
+ Fixed bug where some incorrectly placed tables wouldn't be moved outside the paragraphs on IE.
+ Fixed bug where uppercase script/style element wouldn't be handled correctly and converted to valid lowercase.
+ Fixed bug where some WebKit versions on Mac OS X would produce issues with hidden select fields.
+ Fixed bug where the media plugin would fail on WebKit since the node wasn't properly imported to the right document.
+ Fixed bug where absolute URLs for the TinyMCE script using a base href element would cause loading problems in IE 6/7.
+ Fixed bug where pasting using the paste plugin wasn't possible on IE with to restrictive security settings.
+ Fixed bug where pasting of whitespace was impossible using the new custom paste method.
+ Fixed bug where pasting on some WebKit browsers would not work if you pasted specific contents due to a WebKit bug.
+ Fixed bug where doctypes with multiple lines would not be parsed correctly by the fullpage plugin. Patch contributed by Colin.
+ Fixed bug where the autoresize plugin would break the fullscreen functionality.
+ Fixed bug where tables would be chopped up running on IE using invalid contents and pasting paragraphs into a cell.
+ Fixed bug where the each method of jQuery build didn't iterate styleSheets. We now use the TinyMCE API one instead.
+ Fixed bug where auto switching to paragraphs after headers some times failed in Gecko.
+ Fixed so all editor options gets passed to the Serializer class. Patch contributed by Jasper Mattsson.
+ Fixed so script/style blocks isn't wrapped in paragraphs as other inline elements.
+ Fixed so the XHR requests sends the X-Requested-With HTTP header.
+ Fixed so the data url scheme is handled in the tinymce.util.URI class.
+ Changed inline documentation to use moxiedoc style comments.
+ Removed the compat2x plugin people should have upgraded to the 3.x API by now. 3.0 was released more then a year ago.
+ Re-added Gecko specific message for users who doesn't understand the security concept regarding paste.
+Version 3.2.5 (2009-06-29)
+ Added new jQuery plugin for the jQuery specific package. This enables you to more easily load and use TinyMCE.
+ Added new autoresize plugin contributed by Peter Dekkers. This plugin will auto resize the editor to the size of the contents.
+ Fixed so all packages have the same directory structure. Previous releases had a different structure for the production package.
+ Fixed so the paste from word dialog forces the contents to be processed as word contents even if it's not.
+ Fixed so the jQuery build adapter build works. It's currently only excluding Sizzle.
+ Fixed so noscript element contents is retained during the editing process.
+ Fixed bug where the getBookmark method would need a "simple" string input when the documented way is a boolean.
+ Fixed bug where invalid contents could break the fix_table_elements logic.
+ Fixed bug where Sizzle specific attributes would be serialized if the valid_elements was set to *[*].
+ Fixed bug where IE would produce an error if you specified a relative content_css and opened the paste dialog.
+ Fixed bug where pasting images on IE would produce broken images if they came from an external site.
+ Fixed bug where memory was leaked if you add/remove controls dynamically. Some event handlers wasn't removed properly.
+ Fixed bug where domain relaxing wasn't treated correctly if you added it after the TinyMCE script element.
+ Fixed bug where the activeEditor wasn't set to null if the last editor instance was removed.
+ Fixed bug where IE was leaking memory on the onbeforeunload event due to some recently introduced logic. Patch contributed by Options.
+ Fixed bug where inserting tables in Safari 4 didn't work due to a new WebKit bug where some element names are reserved.
+ Fixed bug where URLs having a :// value in the query string would make it absolute regardless of URL settings.
+ Fixed the WebKit specific bug where DOM Ranges would fail if the node wasn't attached to something in a different way.
+ Removed the auto_resize option and the resizeToContent method from the tinymce.Editor class. Use the new autoresize plugin instead.
+Version 3.2.4.1 (2009-05-25)
+ Fixed bug where Gecko browsers would produce an extra space after for example strong when loaded from sub domains.
+ Fixed bug where script elements would be removed if they where placed inside a paragraph element.
+ Fixed bug where IE 8 would produce 1 item remaining when loading CSS files dynamically with an empty cache.
+ Fixed bug where bound events would be removed from other editor instances if a specific one was removed.
+ Fixed various bugs and issues with script and style elements inside the editor.
+ Fixed so all script contents gets wrapped in CDATA sections so that they can be parsed using a XML parser.
+ Fixed so it's impossible for elements marked as closed to have child nodes rendered in output.
+Version 3.2.4 (2009-05-21)
+ Added new paste_remove_styles/paste_remove_styles_if_webkit option to paste plugin concept contributed by Hadrien Gardeur.
+ Added new functionality to paste plugin contributed by Scott Eade aka monkeybrain.
+ Added new paste_block_drop option to the paste plugin this is disabled by default and will block any drag/drop event.
+ Added new bind/unbind methods to DOMUtils these works like Event.add/Event.remove but is easier to access.
+ Added new paste_dialog_width/paste_dialog_height options to paste pluign. Enables you to change the dialog sizes.
+ Fixed bug on IE 8 where it would sometimes produce a "1 item remaining" status message that would never finish.
+ Fixed bug on Safari 4 beta that would produce DOM Range exceptions on the DOMUtils split method since the browser has a bug.
+ Fixed bug where the paste plugin could accidentally think that some word sentences was supposed to be list elements.
+ Fixed bug where paste plugin would produce one extra empty undo level on some browsers.
+ Fixed bug where spans wasn't produced correctly on new line when the keep_styles option was enabled.
+ Fixed bug where the caret would be placed at the beginning of contents in IE 8 if you selected colors from the color pickers.
+ Fixed so the Event class is a normal class instead of a static one. The tinymce.dom.Event is now a global instance of that class.
+ Fixed so internal events for instances gets removed when the DOMUtils instance is removed.
+ Fixed so preventDefault and stopPropagation methods can be used on the event object in all browsers.
+Version 3.2.3.1 (2009-05-05)
+ Fixed bug where paragraphs containing form elements such as input or textarea would be removed.
+ Fixed bug where some IE versions would produce a wrapper function for events attributes.
+ Fixed bug where table cell contents could be removed if you pressed return/enter at the end of the cell contents.
+ Fixed bug where the paste plugin would remove a extra character if the selection range was collapsed.
+ Fixed bug where creating tables with % width wouldn't be handled correctly on WebKit browsers.
+Version 3.2.3 (2009-04-23)
+ Added new paste plugin logic. This new version will autodetect Word contents and clean it up.
+ Added a optional root element argument to getPos so you can tell it where to stop the calculation.
+ Added new DOM ready logic to remove the usage of document.write. We now use basically the same method as jQuery.
+ Fixed bug where WebKit browsers would fail when selecting all contents in the area using Ctrl+A.
+ Fixed bug where IE would produce paragraphs with empty inline style elements.
+ Fixed bug where WebKit browsers would fail when inserting tables with a non pixel width.
+ Fixed bug where block elements could get a redundant br element at the end of the element.
+ Fixed bug where the tabfocus plugin only worked with a single editor instance on page.
+ Fixed bug where IE 8 was loosing caret position if the selection was collapsed and a menu was clicked.
+ Fixed bug with application/xhtml+xml mode where menus wasn't working properly.
+ Fixed bug where the onstop workaround fix for IE would produce errors in an ASP update panel.
+ Fixed bug where the submit function override could produce errors if executed in the wrong scope.
+ Fixed bug where the area element wasn't closed by a short ending.
+ Fixed various number issues in the style plugins properties dialog. Contributed by datpaulchen.
+ Fixed issues with size suffix values in the style plugin dialog.
+ Fixed issue where hasDuplicate variable would leak out to the global space due to a bug in the Sizzle engine.
+ Fixed issue where the paste event would fire a dialog warning on IE since we extracted the text contents.
+ Updated Sizzle engine to the latest version, this version fixes a few bugs that was reported.
+Version 3.2.2.3 (2009-03-26)
+ Fixed regression bug with the getPos method, it would return invalid if the view port was to small.
+Version 3.2.2.2 (2009-03-25)
+ Fixed so the DOMUtils getPos method can be used cross documents if needed.
+ Fixed bug where undo/redo wasn't working correctly in Gecko browsers.
+Version 3.2.2.1 (2009-03-19)
+ Added support for tel: URL prefixes. Even though this doesn't match any official RFC.
+ Fixed so the select method of the Selection class selects the first best suitable contents.
+ Fixed bug where the regexps for www. prefixes for link and advlink dialogs would match wwwX.
+ Fixed bug where the preview dialog would fail to open if the content_css wasn't defined. Patch contributed by David Bildström (ChronoZ).
+ Fixed bug where editors wasn't converted in application/xhtml+xml mode due to an issue with Sizzle.
+ Fixed bug where alignment would fail if multiple lines where selected.
+ Updated Sizzle engine to the latest version, this version fixes a few bugs that was reported.
+Version 3.2.2 (2009-03-05)
+ Added new CSS selector engine. Sizzle the same one that jQuery and other libraries are using.
+ Added new is and getParents methods to the DOMUtils class. These use the new Sizzle engine to select elements.
+ Added new removeformat_selector option, enables you to specify a CSS selector pattern of elements to remove when using removeformat.
+ Fixed so the getParent method can take CSS expressions when selecting it's parents.
+ Added new ant based build process, includes a new javabased preprocessor and a yuicompressor ant task.
+ Moved the tab_focus logic into a plugin called tabfocus, so the old tab_focus option has been removed from the core.
+ Replaced the TinyMCE custom unit testing framework with Qunit and rewrote all tests to match the new logic.
+ Moved the examples/testcases to a root directory called tests since it now includes slickspeed.
+ Fixed bug where nbsp wasn't replaced correctly in ForceBlocks.js. Patch contributed by thorn.
+ Fixed bug where an dom exception would be thrown in Gecko when the theme_advanced_path path was set to false under xml application mode.
+ Fixed bug where it was impossible to get out of a link at the end of a block element in Gecko.
+ Fixed bug where the latest WebKit nightly would fail when changing font size and font family.
+ Fixed bug where the latest WebKit nightly would fail when opening dialogs due to changes to the arguments object.
+ Fixed bug where paragraphs wasn't added to elements positioned absolute using classes.
+ Fixed bug where font size values with dot's like 1.4em would produce a class instead of the style value.
+ Fixed bug where IE 8 would return an incorrect position for elements.
+ Fixed bug where IE 8 would render colorpicker/filepicker icons incorrectly.
+ Fixed bug where trailing slashes for directories in URLs would be removed.
+ Fixed bug where autostart and other boolean values in the media dialog wouldn't be stored/parsed correctly.
+ Fixed bug where the repaint call for the media plugin wouldn't be executed due to a typo in the source.
+ Fixed bug where id attribute of object elements wasn't kept intact by the media plugin.
+ Fixed bug where preview of embeded elements when the media_use_script option was used would fail.
+ Fixed bug where inlinepopups could be rendered at an incorrect location on IE 6 while dragging.
+ Fixed bug where the blocker shim could be placed at an incorrect location on IE 6.
+ Fixed bug where the multiple and size attributes of select elements would produce incorrect values while running in IE.
+ Fixed bug where IE would loose the caret position is you selected a color from the color drop down.
+ Fixed bug where remove format wouldn't work on IE since it couldn't remove span elements that had style information.
+ Fixed bug where Opera was removing links when removing formatting from selected contents.
+ Fixed bug where paragraphs could be produced inside non positional elements styled with the CSS position value of static.
+ Fixed bug where removeformat wouldn't work if you selected part of a span in IE.
+ Fixed bug where media plugin didn't retain the style attribute on embed/object elements.
+ Fixed bug where auto focus on empty editor instances could produce strange results if you inserted an image into it.
+ Fixed bug where &nbsp; characters would be removed in FF when inserted with the mceInsertContent or selection.setContent methods.
+ Fixed bug where warning message of missing paste support wasn't displayed on WebKit browsers.
+ Fixed bug where anchor links could include other links. The selected range is now unlinked before adding news links to it.
+ Fixed memory leak when TinyMCE was used with prototype. Patch contributed by James Ots.
+ Fixed so the non documented fullpage_hide_in_source_view option for the fullpage plugin works again in the 3.x branch.
+ Fixed so tables doesn't get inserted into paragraphs by default since it's not W3C valid. Can be disabled by using the fix_table_elements option.
+ Fixed so the source view dialog sets a source_view state to the event object. Enables plugins to intercept the source view mode.
+ Fixed various validation issues with the html dialogs and pages.
+ Removed ask mode option since there is way better ways of doing this now. Use the add/remove control methods instead.
+ Removed logic for compatibility with Safari 2.x, this browser is no longer supported since no one is using it.
+ Removed the auto domain relaxing feature. If loading scripts cross sub domains it's better to specify the document.domain by hand.
+Version 3.2.1.1 (2008-11-27)
+ Added new theme_advanced_default_background_color/theme_advanced_default_foreground_color options. Patch contributed by David Bildström (ChronoZ).
+ Fixed font style formatting compatibility issue with Adobe Air.
+ Fixed so legacy font elements get converted into spans even if cleanup_on_startup isn't enabled.
+ Fixed bug where pre elements could be incorrectly modified by an IE bug workaround. Patch contributed by hu vime.
+ Fixed bug where input elements inside inlinepopups wasn't editable in Firefox 2.
+ Fixed bug where the xhtmlxtras plugin wasn't replacing attribute values correctly.
+ Fixed bug where menu buttons in skin variants would look strange due to IE 8 fixes.
+ Fixed bug where WebKit browsers would on backspace take you back to the previous page if the editor was empty.
+ Fixed bug where DOMUtils decode method wouldn't handle strings larger than 4096kb due to node chunking.
+ Fixed bug where meta key wasn't handled as ctrl key on Mac OS X for custom keyboard short cuts.
+ Fixed bug where init event would get fired twice on WebKit on Mac OS X.
+Version 3.2.1 (2008-11-04)
+ Added support for custom icon image for drop menus. Use icon_src to set a custom image directly.
+ Added new media_strict option to media plugin. Enables you to control if the flash embed is strict or not. Enabled by default.
+ Fixed so the editors script files gets dynamically loaded without using XHR or eval.
+ Fixed so the media plugin outputs valid XHTML object elements for Flash movies. Can be disabled with the media_strict option.
+ Fixed so dynamic loading doesn't require eval calls on non IE browsers for better Air support.
+ Fixed bug where the editor wasn't treated as empty if the remaining paragraph had attributes.
+ Fixed bug where id's of elements was removed ones they got wrapped in paragraphs. Patch contributed by ChronoZ.
+ Fixed bug where WebKit browsers where placing list elements inside paragraph elements.
+ Fixed bug where inserting images or links would produce absolute urls on WebKit browsers.
+ Fixed bug where values for checked, readonly, disabled and selected attributes was incorrect on IE.
+ Fixed bug where positive values for checked, readonly, disabled and selected attributes wasn't forced to valid values.
+ Fixed bug where selecting the first option in a native select box would produce an undefined error.
+ Fixed bug where tabindex 32768 could be outputted on IE if element attributes where cloned.
+ Fixed bug where the media dialogs preview window would display incorrect contents due to duplicate clsid prefixes.
+ Fixed bug where non pixel or percent heights for textarea elements would produce errors on IE.
+ Fixed bug where cdata sections in script elements wasn't handled correctly.
+ Fixed bug where nowrap of table cells would produce a 65535 value output.
+ Fixed bug where media plugin would produce an error if you selected the first item in the items list.
+ Fixed bug where media plugin would modify links with the item _value in them.
+ Fixed so table width/height is better forced if inline_styles is enabled. Patch contributed by daKmoR.
+ Fixed css for IE 8 such as opacity and other rendering quirks.
+Version 3.2.0.2 (2008-10-02)
+ Fixed bug where the SelectBox and NativeSelectBox wasn't updated correctly if undefined was passed to them.
+ Fixed bug where the style dropdown wasn't correctly changed back to it's original state when element had no class.
+ Fixed bug where multiple pending font styles wasn't handled correctly.
+ Fixed so you can disable all auto css loading for dialogs by setting the popups_css option to false.
+Version 3.2.0.1 (2008-09-17)
+ Fixed bug where font sizes and faces wouldn't be changed correctly when there was a parent with a different style.
+ Fixed bug where adding fonts to the same selection would produce redundant spans.
+Version 3.2 (2008-09-11)
+ Added new text style support, it will now use span elements internally instead of font elements.
+ Added new improved support for the theme_advanced_font_sizes option, check the Wiki for details.
+ Added new keep_style setting that maintains the text style on return/enter on non IE browsers, enabled by default.
+ Added new onBeforeSetContent/onBeforeGetContent/onSetContent/onGetContent events to the Selection class.
+ Added new selectByIndex method to ListBox class. This enables you to select list items by an index instead of a value.
+ Added new possibility to the select method of the ListBox class. This can now have a selector function as it's value argument.
+ Added new possibility to skip the loading of popups css by setting the feature popup_css to the value false.
+ Added new possibility to skip translation of popups by setting the translate_i18n feature to false.
+ Added new element_format option enables you to produce HTML element endings instead of XHTML. But we are still in the XHTML is better camp.
+ Added missing allowfullscreen and quality options for flash elements, this will now get correctly stored.
+ Fixed bug where table cell dialog didn't close properly unless the accessibility_warnings option was set to false.
+ Fixed bug where the modal dialog blocker element for inlinepopups wasn't placed at a correct location if the page had scroll.
+ Fixed bug where non inline dialogs didn't close correctly if the inlinepopups plugin was used.
+ Fixed bug where non inline dialogs could make the modal dialog blocker to work incorrectly.
+ Fixed bug where style select wasn't populated correctly if you pressed the arrow. Patch by Hari Karam Singh.
+ Fixed bug where toggling the fullscreen mode didn't restore scrollbars on IE when the editor was inside a frame. Patch by Jacob Barrett.
+ Fixed bug where inserting flash contents using the template plugin didn't work correctly.
+ Fixed bug where inserting flash contents using the selection.setContent or mceInsertContent command didn't work correctly.
+ Fixed bug where IE would produce an exception if a comment started with -.
+ Fixed bug where the blockquote button would wrap lists incorrectly on non IE browsers.
+ Fixed bug where Opera would display BR elements in the element path.
+ Fixed bug where xhtmlxtras didn't insert elements correctly on IE.
+ Fixed bug where the buttons wasn't activated correctly in the xhtmlxtras plugin.
+ Fixed bug where adding an object as the style attribute for the dom setAttribs method wouldn't work.
+ Fixed bug where the background color would bleed out to parent container element in Gecko.
+ Fixed bug where the insert column actions for tables would fail if you did it in a thead or tfoot. Patch contributed by T Andersen (tan73).
+ Fixed bug where event blocker element wasn't positioned correctly for the inlinepopups plugin.
+ Fixed bug where pasting from Office 2007 would produce an odd comment in the contents.
+ Fixed bug where the paste as plain text could remove an extra character. Patch contributed by Speednet.
+ Fixed bug where some characters where missing for the paste_replace_list option. Patch contributed by Speednet.
+ Fixed bug where removing non existing editor instances by the mceRemoveControl command would produce an error.
+ Fixed bug where meta elements with the name description would produce errors in IE.
+ Fixed bug where color and background colors wouldn't be updated properly.
+ Fixed bug where the createMenuButton of tinymce.ControlManager didn't implement the last class argument.
+ Fixed bug where the editor_css option was relative from the TinyMCE installation directory not the current page.
+ Fixed bug where elements wouldn't be padded if the element contained bogus br elements. For example TD elements.
+ Fixed bug where parsing of <body > in fullpage plugin would produce an error.
+ Fixed bug where relative urls with just ./ would become an empty string.
+ Fixed bug where outdent button would be disabled if inline_styles where set to false.
+ Fixed bug where replace with an empty search string would produce an error on IE.
+ Fixed bug where restoring the overflow state of the body in fullscreen plugin running on IE would produce vertical scrollbars.
+ Fixed bug where pressing return/enter in list items would sometimes move the caret the to top of the content area in FF.
+ Fixed bug where the style listbox wouldn't be updated correctly if you used the use_native_selects option.
+ Fixed bug where WebKit browsers would produce a div element when ending list elements using return.
+ Fixed so translation of popup contents only occurs if it's needed.
+ Optimized the URI object in regards or converting absolute URIs to relative URIs.
+Version 3.1.1 (2008-08-18)
+ Added new getSize method to DOMUtils it will return the dimensions only of an element.
+ Added new alert/confirm methods to the tinyMCEPopup class to prevent focus problems and also to shorten method calls.
+ Added new plugin_preview_inline option to preview plugin to enable/disable native/inline dialogs.
+ Added new readonly option. If this is set the editor will only display the contents for the user.
+ Added missing tabindex and accesskey to input elements in the default valid_elements setup.
+ Updated firebug lite to 1.2, to enable it use the tiny_mce_dev.js?debug=1 on the development package.
+ Fixed so the preview dialog in the preview plugin uses inline dialogs/popups.
+ Fixed so CDATA sections remains intact through the serialization process of the DOM tree.
+ Fixed various issues with the getAttrib command. It will now return more correct values.
+ Fixed bug where the embed element wasn't properly parsed in the media plugin it now supports 3 formats.
+ Fixed bug where the noshade attribute was serialized incorrectly on IE.
+ Fixed bug where editing an existing link element didn't force it relative.
+ Fixed bug where image link creation fails on Safari if the image is aligned.
+ Fixed bug where it was possible to scroll the fullscreen mode in Opera 9.50.
+ Fixed bug where removal of center image alignment would fail. Patch contributed by Andrew Ozz.
+ Fixed bug where inlinedialogs didn't work properly if the doctype was incorrect in IE.
+ Fixed bug where cross domain loading didn't work correctly in Opera 9.50.
+ Fixed bug where breaking huge text blocks with return/enter key would scroll to end of block.
+ Fixed bug where replace button kept inserting the replacement text even if there is no more matches.
+ Fixed bug with fullpage plugin where value wasn't set correctly. Patch contributed by Pascal Chantelois.
+ Fixed bug where the dom utils setAttrib method call could produce an exception if the input was null/false.
+ Fixed bug where pressing backspace would sometimes remove one extra character in Gecko browsers.
+ Fixed bug where the native confirm/alert boxes would move focus to parent document if fired in dialogs.
+ Fixed bug where Opera 9.50 was telling you that the selection is collapsed even when it isn't.
+ Fixed bug where mceInsertContent would break up existing elements in Opera and Gecko.
+ Fixed bug where TinyMCE fails to detect some keyboard combos on Mac, contributed by MattyRob.
+ Fixed bug where replace all didn't move the caret to beginning of text before searching.
+ Fixed bug where the oninit callback wasn't executed correctly when the strict_loading_mode option was used, thanks goes to Nicholas Oxhoej.
+ Fixed bug where a access denied exception was thrown if some other script specified document.domain before loading TinyMCE.
+ Fixed so setting language to empty string will skip language loading if translations are made by some backend.
+ Fixed so dialog_type is automatically modal if you use the inlinepopups plugin use dialog_type : "window" to re-enable the old behavior.
+Version 3.1.0.1 (2008-06-18)
+ Fixed bug where the Opera line break fix didn't work correctly on Mac OS X and Unix.
+ Fixed bug where IE was producing the default value the maxlength attribute of input elements.
+Version 3.1.0 (2008-06-17)
+ Fixed bug where the paste as text didn't work correctly it encoded produced paragraphs and br elements.
+ Fixed bug where embed element in XHTML style didn't work correctly in the media plugin.
+ Fixed bug where style elements was forced empty in IE. The will now be wrapped in a comment just like script elements.
+ Fixed bug where some script elements wrapped in CDATA could fail to be serialized correctly.
+ Fixed bug where FF 3 produced -moz- internal styles in some style attributes.
+ Fixed bug where query strings and external URLs didn't work correctly in style attributes.
+ Fixed bug where shape attribute of area elements got serialized as rect regardless of it's initial value in IE 6.
+ Fixed bug where selection of elements inside layers would fail in IE since focus was moved to the document body.
+ Fixed bug where pressing enter/return in an editable select box would produce an __mce_add_custom__ class value.
+ Fixed bug where changing font size of text placed inside a colored text chunk would remove the parent node.
+ Fixed bug where Opera 9.5 final produced a strange line break behavior due to a workaround for previous Opera versions.
+ Fixed bug where text/background color would produce a strange focus problem when you tried to click on the body in IE.
+ Fixed issue where selecting the title of an listbox equals the old 2.x behavior of changing the value to an empty string.
+ Fixed issue where it was common for the media plugin to break if the _value attribute wasn't added for the param element.
+ Fixed issue where the wrong parent editor instance might be updated if you use fullscreen mode in an incorrect way.
+ Fixed issue where Safari was producing a warning about the base element not being closed correctly.
+ Removed redundant form element name matching from regexp in the DOMUtils class.
+Version 3.0.9 (2008-06-02)
+ Added new contextmenu_offset_x/contextmenu_offset_y options for the contextmenu plugin.
+ Added cite attribute to the default rule for the blockquote element.
+ Added support for using arrow keys for selection of items in listboxes.
+ Added support for using arrow keys for selection of items in dropmenus.
+ Fixed bug where blockformat change on elements with BR inside them didn't change correctly on Firefox.
+ Fixed bug where removing table rows inside thead or tfoot would remove the whole table if it was the last one.
+ Fixed bug where XHR synchronous mode didn't execute the callback handlers synchronously.
+ Fixed bug where setting border to 0 didn't add border: 0 to the style attribute when using the advimage dialog.
+ Fixed bug where the selection of images and table cells didn't work correctly when the editor is placed in a frame and running on IE.
+ Fixed bug where the store/restore of a selection didn't work correctly in non IE browsers.
+ Fixed bug where only the first element would be invalid for the invalid_elements option.
+ Fixed bug where paste as plain text didn't encode the characters correctly when they where inserted.
+ Fixed bug where HTML source window couldn't be maximized on Gecko when the maximizable feature was enabled.
+ Fixed bug where color selection using the color picker could produce exception in IE.
+ Fixed bug where font size changes could produce produce extra redundant elements.
+ Fixed bug where IE could produce unknown runtime error if you replaced a image with another image from a separate frame.
+ Fixed bug where the domLoaded state for the Event class wasn't set correctly if the editor was loaded dynamically using the gzip compressor.
+ Fixed bug where handling of the base element for a page would produce incorrect urls. Based on a patch contributed by John LeSueur.
+ Fixed bug where table constraint alert boxes was presented with an empty value and wasn't the skinned inline ones.
+ Fixed bug where the onChange event wasn't fired when the form was submitted. It's now also triggered when the save method is called.
+ Fixed bug where encoding set to xml didn't work as expected. It now encodes the contents into XML entities.
+ Fixed bug where numrows didn't work correctly for the merge cells dialog of the table plugin.
+ Fixed bug where the onGetContent event was fired even when the no_events flag was set.
+ Fixed bug where the preview panels for the advimage and the media plugin could overflow on Safari and FF 3.
+ Fixed bug where the editing and removal of abbr elements using the xhtmlxtras plugin working correctly on IE.
+ Fixed bug where save button in the save plugin didn't work correctly on IE.
+ Fixed bug where dragging layers didn't work as expected since it would snap back to it's original location if you saved.
+ Fixed bug where the description of the template plugin dialog wasn't updated correctly.
+ Fixed bug where the values for frame and rules in the table dialogs where swapped.
+ Fixed bug where the elements like ins, del, cite, acronym and abbr didn't have the default editing style as the old 2.x branch.
+ Fixed bug where ask mode would lock the focused textarea if you pressed cancel in the confirm dialog on FF 3.
+ Fixed bug where ask mode would produce contents for empty textareas if you reloaded the page.
+ Fixed so the onGetContent event gets the full pass through object just like the other events.
+ Fixed so attributes for block elements remains the same when you change format of a element.
+Version 3.0.8 (2008-04-30)
+ Fixed bug where IE would produce an error if textareas without names where converted.
+ Fixed bug where editor wasn't forced empty when there was only a single br or empty paragraph left.
+ Fixed bug where IE would produce an warning message if object elements where produced in the media plugins preview running on https.
+ Fixed bug where new addVer function didn't handle hash items correctly. Patch contributed by Mirek Burkon.
+ Fixed bug where font_size_style_values option wasn't applied correctly to fonts inside the editor.
+ Fixed bug where image selection could be lost if a image was edited using context menu on IE.
+ Fixed bug where style values wasn't updated properly due to an invalid regexp.
+ Fixed bug where IE 6 where displaying warning message about insecure items when inserting an image while using https. Patch contributed by Norifumi Sunaoka.
+ Fixed bug where IE was producing an auto save message if you selected a color from the color split button.
+ Fixed bug where backspace sometimes would move the caret to the end of the previous block in Gecko.
+ Fixed bug where the rowlayout manager didn't work as described in the documentation.
+ Fixed bug where the default options for the fullpage plugin wasn't applied correctly.
+ Fixed bug where selection would jump one character if you applied a styles to a words in non IE browsers.
+ Fixed bug where undo levels wasn't added correctly if you went back in undo history and added a new event.
+ Fixed bug where font size dropdown didn't mark the selected size in IE.
+ Fixed bug where the size of the editor was determined using clientWidth instead of offsetWidth.
+ Fixed so the onchange event doesn't fire on the initial undo level, it will also fire when the editor is blurred.
+ Fixed so the advhr plugin produces XHTML valid output instead of non standard attributes.
+ Fixed so blockquote gets converted into [quote] in when the bbcode plugin is enabled.
+ Fixed so theme_advanced_font_sizes can be named for example Font 1=1, Font 2=2 etc.
+ Fixed so editor_selector/editor_deselector can be regexps. By default only strings are allowed not part regexps like before.
+ Fixed so that the version suffix is optional. It still requires the build process so you need to export it manually.
+ Fixed so it's possible to tab to table cells in non Gecko browsers and also produce new rows if you tab at the end of a table. Contributed by Josh Peek.
+Version 3.0.7 (2008-04-14)
+ Added new version suffix to all internal GET requests to make sure that the users cache gets cleared correctly.
+ Fixed issue with isDirty returning true event if it wasn't dirty on IE due to changes in tables during initialization.
+ Fixed memory leak in IE where if a page was unloaded before all images on the page was loaded it would leak.
+ Fixed bug in IE where underline and strikethrough could produce an exception error message.
+ Fixed bug where inserting paragraphs in totally empty table cells would produce odd effects.
+ Fixed bug where layer style data wasn't updated correctly due to some performance enhancements with the DOM serializer.
+ Fixed bug where it would convert the wrong element if there was two elements with the same name and id on the page.
+ Fixed bug where it was possible to add style information to the body element using the style plugin.
+ Fixed bug where Gecko would add an extra undo level some times due to the blur event.
+ Fixed bug where the underline icon would get active if the caret was inside a link element.
+ Fixed bug where merging th cells not working correctly. Patch contributed by André R.
+ Fixed bug where forecolorpicker and backcolorpicker buttons where rendered incorrectly when the o2k7 skin was used.
+ Fixed bug where comment couldn't contain -- since it's invalid markup. It will now at least not break on those invalid comments.
+ Fixed bug where apos wasn't handled correctly in IE. It will now convert apos to &#39; on IE since that browser doesn't support that entity.
+ Fixed bug where entities wasn't encoded correctly inside pre elements since they where protected from whitespace removal.
+ Fixed bug where color split buttons where rendered incorrectly on IE6 when using the non default theme.
+ Fixed so caret is placed after links ones they are created, to improve usability of the editor.
+ Fixed so you can select tables by clicking on it's borders in non IE browsers to normalize the behavior.
+ Fixed so the menus can be toggled by clicking once more on the icon in listboxes, menubuttons and splitbuttons based on code contributed by Josh Peek.
+ Fixed so buttons can be labeled, currently only works with the default skin, so it's kind of experimental. Patch contributed by Daniel Insley.
+ Fixed so forecolorpicker and backcolorpicker remembers the last selected color. Patch contributed by Shane Tomlinson.
+ Fixed so that you can only execute the mceAddEditor command once for the same instance name.
+ Fixed so command functions added with addCommand can pass though the call to default handles if it returns true.
+Version 3.0.6.2 (2008-04-07)
+ Fixed bug where empty tables couldn't be edited correctly on non IE browsers if they where loaded into the editor.
+ Fixed bug where it was impossible to resize layers correctly in IE since it thought it was an image.
+ Fixed bug where an editor instance was stealing focus in IE resulting in a scroll to the editor on page reloads.
+ Fixed bug where Safari was crashing on Mac OS X if you closed dialogs using the Esc key.
+Version 3.0.6.1 (2008-04-04)
+ Added support for the missing mceAddFrameControl command. The input for this command has changed so consult the Wiki.
+ Fixed bug where sub menus for the drop menus would leave an empty element behind.
+ Fixed memory leak in IE if the editor was placed in a frame or iframe.
+Version 3.0.6 (2008-04-03)
+ Added elements to the default value of valid_elements option. It now contains all XHTML strict elements and a few transitional.
+ Added more accessibility fixes, it's now possible to navigate and close list boxes and split button menus with the keyboard.
+ Added missing getInfo method to the contextmenu and safari plugin, this caused problems for the Drupal module.
+ Added new inlinepopups_zindex option to the inlinepopups plugin so that you can configure the default start z-index.
+ Added new setControlType method to the tinymce.ControlManager class. This method enables you to override the default classes.
+ Added ability to specific an optional control class to use instead of the default one for the ControlManager methods. Based on concept by Josh Peek.
+ Fixed bug where attribute rules for the DOM Serializer couldn't contain - or _ characters in their names.
+ Fixed bug where inlinepopups event blocker and modal dialog blocker elements produced vertical scrollbars.
+ Fixed bug where there was a rendering issue with quirks mode in Safari moving the resize handle to an incorrect position.
+ Fixed bug with forecolor/backcolor controls on IE. Sometimes elements positioned relative will generate display errors.
+ Fixed bug where a p2 was leaking out in the global name space when you selected a color from the forecolor/backcolor controls.
+ Fixed bug where empty paragraphs didn't work as expected in browsers other than IE.
+ Fixed bug where the load method of the tinymce.dom.ScriptLoader didn't check if the file was already loaded.
+ Fixed bug where the load method for the PluginManager and ThemeManager didn't check if a plugin/theme by a specific name was all ready loaded.
+ Fixed bug where the theme_advanced_link_targets option didn't work correctly with the advanced themes link dialog. Patch contributed by Arnold B.
+ Fixed bug where the style command would merge classes into empty span elements.
+ Fixed bug where the style command would remove empty span elements outside the current selection.
+ Fixed bug where the fix for the Safari backspace bug removed all editor contents if it was filled with empty paragraphs.
+ Fixed bug where alert and confirm boxes opened by the inlinepopups plugin would produce an exception if domain relaxing was used.
+ Fixed bug where Safari was adding style attributes to all elements when you paste them into the editor.
+ Fixed bug where the spellchecker menus was visually incorrect since the space for the non existing icon was still there.
+ Fixed bug where remove_linebreaks option didn't remove line breaks inside the text contents of a element.
+ Fixed bug where Safari 3.1 was introducing _mc_tmp into paragraphs due to the new querySelectorAll and a TinyMCE specific workaround.
+ Fixed bug where getParam method in the Editor class was returning incorrect objects and would mess up the font drop down. Patch contributed by speednet.
+ Fixed bug where the table dialog would produce an exception in IE when you edited tables since it tried to place focus in a disabled field.
+ Fixed bug where class attribute on some span elements was removed on cleanup.
+ Fixed bug where resizing the editor in IE could produce an exception if the editor width/height got to be a negative value.
+ Fixed bug where wmv files wouldn't play since the src param was used instead of the url param.
+ Fixed bug where br elements would be added here and there in Gecko. Geckos internal _moz_dirty br elements where serialized as well.
+ Fixed bug where editing named anchors would produce two anchors instead of one updated one.
+ Fixed bug where arrow and function keys didn't work when an noneditable element was focused within the editor.
+ Fixed bug where the dispatcher could produce an exception if the listener list was altered inside an event callback.
+ Fixed bug where it was impossible to totally empty the editor contents on Safari due to an mistreatment of nbsp as whitespace. Patch contributed by Andrew Ozz.
+ Fixed bug where TinyMCE would not convert textareas with the same name attribute value. It will now generate an unique id for those textareas.
+ Fixed bug where backspace/delete key was deleting td elements inside tables while running on Gecko.
+ Fixed bug where Firefox 3.0b4 and Opera 9.26 where scrolling to the top of document when pressing return/enter.
+ Fixed bug where the template plugin wasn't just inserting the mceTmpl tagged element.
+ Fixed bug where the alert method of the default WindowManager implementation didn't translate input language strings like the inlinepopups dialog does.
+ Fixed bugs with the backspace behavior in Gecko. The caret was placed on incorrect locations in the DOM sometimes.
+ Fixed so advimage dialog and table dialogs has support for editable select boxes for the class value.
+ Fixed so the media, pagebreak and spellchecker doesn't load it's default content.css file if the content_css option is set to false.
+ Fixed so the paste_use_dialog option works again it's enabled by default but can be disabled on IE. Patch contributed by Speednet.
+ Fixed so that the fullscreen editor is focused when switching fullscreen editing on.
+ Fixed so it's possible to edit images and links inside tables using the context menu.
+ Fixed so table dialogs and the advanced image dialog doesn't loose selection in IE if the dialogs where navigated/submitted with the keyboard.
+ Fixed so the theme_advanced_blockformats options can have named items for example title 1=h1;title 2=h2.
+ Fixed so it's possible to add a custom editor_css for the simple theme.
+ Fixed quirks with directionality rtl, patch contributed by Andrew Ozz.
+ Fixed so the inlinepopups default start zIndex is 300000.
+ Fixed typo in media plugin Shockware is now replaced with Shockwave.
+ Fixed psuedo memory leak in IE with the replaceChild method inside the DOMUtils.replace method.
+ Fixed so memory is released when an editor instance is removed from page.
+ Optimized the color split button menus so that they use less event handlers.
+ Removed the util/mclayer.js file since it's no longer used by any of the TinyMCE dialogs and is considered deprecated.
+Version 3.0.5 (2008-03-12)
+ Added new black skin variant to the o2k7 skin contributed by Stefan Moonen.
+ Added new explode method to the tinymce core class. This does a split but removed whitespace it also defaults to a , delimiter.
+ Added new detection logic for IE 8 standards mode into the DOMUtils class strMode can now be checked to see if that mode is on/off.
+ Added new noscale option value for the scale select box for Flash in the media plugin.
+ Fixed bug where the menu for the ColorSplitButton wasn't removed when the editor was removed.
+ Fixed bug where font colors couldn't be edited correctly since the style of the element didn't get updated correctly.
+ Fixed bug where class of elements would get lost when TinyMCE was fixing incorrect HTML markup.
+ Fixed bug where table editing would produce double height values.
+ Fixed bug where width style value wouldn't be removed if you switched width unit from cm/em to pixels or percent.
+ Fixed bug where the search/replace input box wasn't auto focused like the other dialogs.
+ Fixed bug where the old mceAddControl command would use the fullscreen settings next time it created an instance.
+ Fixed bug where multiple lines where added to the target cell if you merged multiple empty cells.
+ Fixed bug where drop down menus would be incorrectly positioned inside scrollable divs.
+ Fixed bug where the separators of the silver skin variant didn't display correctly in IE 6.
+ Fixed bug where createStyleSheet seems to load scripts at opposite order in some IE versions.
+ Fixed bug where directionality could produce odd results for the UI and the dialogs.
+ Fixed bug where the DOM serializer wouldn't serialize custom namespaced attributes in IE 6 using the *[*] valid elements rule.
+ Fixed bug where table caption would be inserted after the thead element if you swapped a tr to be inside the thead.
+ Fixed bug where the youtube detection logic for the media plugin was to generic.
+ Fixed so the deprecated and undocumented theme_advanced_path_location set to none won't hide the whole statusbar.
+ Fixed so most input lists can have whitespace in them they are now split using the new tinymce.explode method.
+ Fixed so the popup_css and popup_css_add URLs are relative to where the current document is located.
+ Fixed various bugs and quirks with the store/restore selection logic.
+ Fixed so the editor starts in IE 8 standards mode but still that browser is very very buggy.
+ Fixed so dialog_type set to modal will block the background and other inline windows and only give access to the front most window.
+Version 3.0.4.1 (2008-03-08)
+ Fixed critical bug where it was impossible to edit images when inlinepopups where used due to lost selection in IE.
+Version 3.0.4 (2008-03-07)
+ Added new option constrain_menus, this enables you to force view port constraints on all menus. Contributed by Shane Tomlinson.
+ Fixed bug where table background wasn't visible inside the editor due to a default CSS rule overriding the style attribute.
+ Fixed bug where links would get a null class added if no styles was used in IE.
+ Fixed bug where spellchecker was auto focusing the editor in IE.
+ Fixed bug where document.domain would produce invalid argument if the editor was loaded in IE6 over a network UNC path.
+ Fixed bug where table height attribute was used, this is deprecated in XHTML so it now adds it as an style.
+ Fixed bug where textareas with style values would produce error in IE.
+ Fixed so the first element in each dialog is focused by default to enhance keyboard usage.
+ Fixed so you can add a mceFocus class to elements to make it auto focused.
+ Fixed so you can close dialogs using the esc key.
+ Fixed so you can press return/enter to submit the action of each dialog.
+ Fixed so tabbing inside an inline popups wont focus the resize anchor elements.
+ Fixed so you can press ok in inline alert messages using the return/enter key.
+ Fixed so textareas can be set to non px or % sizes for example em, cm, pt etc.
+ Fixed so non pixel values can be used in width/height properties for tables.
+ Fixed so the custom context menu can be disabled by holding down ctrl key while clicking.
+ Fixed so the layout for the o2k7 skin looks better if you don't have separators before and after list boxes.
+ Fixed so the sub classes get a copy of the super class constructor function to ease up type checking.
+ Fixed so font sizes for the format block previews are normalized according to http://www.w3.org/TR/CSS21/sample.html (it can be overridden).
+ Fixed so font sizes for h1-h6 in the default content.css is normalized according to http://www.w3.org/TR/CSS21/sample.html (it can be overridden).
+Version 3.0.3 (2008-03-03)
+ Fixed bug where an error about document.domain would be thrown if TinyMCE was loaded using a different port.
+ Fixed bug where mode exact would convert textareas without id or name if the elements option was omitted.
+ Fixed bug where the caret could be placed at an incorrect location when backspace was used in Gecko.
+ Fixed bug where local file:// URLs where converted into absolute domain URLs.
+ Fixed bug where an error was produced if a editor was removed inside an editor command.
+ Fixed bug where force_p_newlines didn't effect the paste plugin correctly.
+ Fixed bug where the paste plugin was producing an exception on IE if you pasted contents with middots.
+ Fixed bug where delete key could produce exceptions in Gecko sometimes due to the fix for the table cell bug.
+ Fixed bug where the layer plugin would produce an visual add class called mceVisualAid this one is now renamed to mceItemVisualAid to mark it internal.
+ Fixed bug where TinyMCE wouldn't initialize properly if ActiveX controls was disabled in IE.
+ Fixed bug where tables and other elements that had visual aids on them would produce an extra space after any custom class names.
+ Fixed bug where search with an empty string would produce some odd "invalid pointer" error in IE.
+ Fixed bug where elements like menus where placed at incorrect positions in Opera 9.26.
+ Fixed bug where IE was loosing focus of the editor when you clicked some dropmenu and if it was placed in a frame or iframe.
+ Fixed bug where focus of images could be lost in IE if you focused the accessibility confirm dialog in the advimage plugin.
+ Fixed bug where nestled font elements would produce odd output like missing font elements.
+ Fixed bug where text colors and styles got removed if invalid_elements included the font element.
+ Fixed bug where text-decoration set to underline or line-through would remove other styles from span elements.
+ Fixed bug where editor contents like \n\n would be incorrectly handled and processed as real line feeds.
+ Fixed bug where incorrectly encoded urls with ampersands in them would be decoded incorrectly.
+ Optimized the DOMUtils decode method to be a lot faster if the string doesn't have any entities to decode.
+Version 3.0.2.1 (2008-02-26)
+ Fixed alert/confirm dialogs so they display correctly.
+Version 3.0.2 (2008-02-26)
+ Added new body_id option that enables you to specify the id of the body inside the editor iframe based on ideas by David Bildström (ChronoZ).
+ Added new body_class option that enables you to set the class for the body of the editor iframe based on ideas by David Bildström (ChronoZ).
+ Added new CSS class to the default content.css files mceForceColors that forces white background and black text can be used with the body_class option.
+ Added new type parameter to the Editor.getParam function to reduce redundant logic for parsing hash tables.
+ Added new isDone method to the ScriptLoaded class, this enables you to check if a script has been loaded or not.
+ Added new resizeTo and resizeBy methods for the advanced theme. Can be called using tinyMCE.activeEditor.theme.resizeTo(w, h);
+ Added new skin_variant option this can be used to extend existing skins with slight modifications like color.
+ Added new variant of the o2k7 skin called "silver" based on a contribution made by Stefan Moonen.
+ Fixed bug where the template plugin might produce errors if the template_mdate_classes wasn't configured.
+ Fixed bug where the media plugin didn't convert the URLs for movies once they where inserted.
+ Fixed bug where the style field for the advlink dialog didn't work correctly if you edited an existing link.
+ Fixed bug where alignment of toolbars would fail in editor was uses in a quirks mode on IE, fix contributed by Peter Wood & Art Lawry.
+ Fixed bug where initialization of multiple editors at the same time using the mceAddControl method would produce errors.
+ Fixed bug where initialization of editors using mceAddControl command or new tinymce.Editor calls would fail during page load.
+ Fixed bug where the check for domain relaxing could fail if the document.domain property was changed by another script.
+ Fixed bug where textareas couldn't be named description or any other name that matches the meta elements in IE and Opera.
+ Fixed bug where the element path would fail sometimes in IE due to "unknown runtime error" on innerHTML.
+ Fixed bug where Safari would crash if you was hiding the editor before serializing the contents.
+ Fixed bug where the editor wasn't scaled propertly in fullscreen mode using the old fullscreen_new_window option.
+ Fixed bug where render method didn't load language packs in IE and Opera if you rendered an editor during page load.
+ Fixed bug where resizing the browser window in fullscreen didn't resize the editor.
+ Fixed bug where the blockquote command didn't move the caret inside the new empty blockquote if you used it on an empty document.
+ Fixed bug where auto in a style width/height for the textarea would produce an editor with the size value of 100. Fix contributed by Shane Tomlinson.
+ Fixed bug where restoration of selection at the beginning of an element could fail in Gecko.
+ Fixed bug where caret restoration after a cleanup could place the it at an incorrect location.
+ Fixed bug where delete key inside td elements would delete the cell in Gecko.
+ Fixed so the blockquote button toggles individual lines. This behavior is a bit more like the old indentation behavior in the 2.x branch.
+ Fixed so the dialog language packs only gets loaded the first time you open a dialog.
+ Fixed so all classes in the whole UI is prefixed with "mce" to avoid collisions, use the skin converter to update your existing skins.
+ Fixed so all classes in the inlinepopups logic is prefixed with "mce" to avoid collisions, use the skin converter to update your existing skins.
+ Fixed so that the window in fullscreen mode can be resized when fullscreen_new_window option is enabled.
+ Fixed so blockquote elements are formatted in the source output with an linefeed before and after it.
+ Optimized the editor initialization by reducing the number of calls to getBookmark/moveToBookmark.
+Version 3.0.1 (2008-02-21)
+ Added spellchecker plugin into the main package, but without any backend can be specified with the spellchecker_rpc_url option.
+ Added src attribute for script elements to the default valid_elements option value.
+ Added extra parameter to the class_filter callback it can now also filter out classes based on the whole CSS rule.
+ Added support for domain relaxing, TinyMCE can now be loaded from an remote domain as long as they are on the same root domain.
+ Added support for custom elements the new custom_elements option enables you to add non HTML elements to the editor.
+ Added support for the W3C Selectors API that was added to latest nightly build of WebKit.
+ Fixed bug where some object param element wasn't stored correctly using the media plugin.
+ Fixed bug where Opera was scrolling to top of page is drop menus on list boxes where displayed.
+ Fixed bug where IE6 was crashing if a format block was used on a container with anchor elements.
+ Fixed bug where spans with font sizes wasn't handled correctly when editor was loading contents.
+ Fixed bug where mode exact couldn't convert editors with name only. Id is no longer required but recommended.
+ Fixed bug where the mceInsertRawHTML command produced an extra undo level.
+ Fixed bug where the specific_textareas mode didn't work correctly this is the same thing as textareas now.
+ Fixed bug where the values of input elements in the HTML page of dialogs pages where changed in IE.
+ Fixed bug where fullscreen and fullpage plugins didn't work well together.
+ Fixed bug where embed elements wasn't handled properly in the media plugin.
+ Fixed bug where style information on span elements gets munged when fonts are converted to spans.
+ Fixed bug where some entities in element attributes where encoded incorrectly in the latest WebKit build.
+ Fixed bug where initialization would fail in IE if there where two input elements with the name submit in the form.
+ Fixed bug where fullscreen mode didn't work correctly in IE when the fullscreen_new_window option was used.
+ Fixed bug where invalid contents like an ul inside a p element would produce odd results in IE.
+ Fixed bug where Opera 9.2x was placing the drop menus at incorrect locations if the editor was placed in a table.
+ Fixed bug where Opera was producing odd results if enter/return was pressed while having forced_root_blocks disabled.
+ Fixed bug where layer plugin was stealing focus in IE on initialization.
+ Fixed bug where body attributes wasn't set properly in the fullpage plugin, fix contributed by Hiroaki Kawai.
+ Fixed bug where insert image and insert link dialogs where producing an extra level in the undo history.
+ Fixed bug where Gecko would produce an error if empty elements like <div></div> where inserted using mceInsertContent.
+ Fixed bug where center alignment of images produced odd results inside table cells.
+ Fixed bug where center alignment of images couldn't be toggled correctly.
+ Fixed bug where alignment of images inside tables would produce double float style items in IE if the fix_table_elements option was enabled.
+ Fixed bug where a variable called 'v' was polluting the global namespace. Objects tinymce and tinyMCE are the only ones allowed to be global.
+ Fixed bug where insert table from context menu couldn't insert new tables inside existing tables.
+ Fixed bug where Safari wouldn't produce br elements on enter when the force_br_newlines option was enabled.
+ Fixed bug where switching cell type in table cell dialog would produce odd attributes in IE.
+ Fixed bug where Gecko was outputting internal attributes if valid_elements where set to "*[*]".
+ Fixed bug where the style plugin would produce non hex colors inside the dialog when running on Gecko.
+ Fixed bug where an empty src value for insert image would remove the currently selected image if it wasn't and image element.
+ Fixed bug where hidden input elements would break the logic for the tab_focus option.
+ Fixed bug where save button wasn't working correctly in fullscreen mode.
+ Fixed bug where the editor was forced to be placed in a form element if the save_onsavecallback option was used.
+ Fixed bug where upper case param attributes wasn't parsed correctly in the media plugin.
+ Fixed bug where render method of tinymce.Editor class would produce an exception if the strict_loading_mode option was omitted.
+ Fixed bug where nodeChanged event could be fired while the editor was loading and there for produce an exception in FF.
+ Fixed bug where no undo levels where added if the user created new table rows using the tab key on Gecko.
+ Fixed bug where tables would be broken if you selected a different block format for contents withing an table cell.
+ Fixed bug where the render method of the tinymce.Editor class didn't setup the tinymce.EditorManager.settings object correctly.
+ Fixed bug where the advanced image dialog would go to the first tab if the alternative image was changed using the file browser link.
+ Fixed bug where the forced_root_block option would produce BR elements inside empty blocks if the block wasn't a paragraph.
+ Fixed bug where the forced_root_block doesn't work correctly on IE if the specified element was something else than paragraphs.
+ Fixed bug where selection of images would get lost if user selected something from the context menu in IE.
+ Fixed bug where the context menu plugin would pollute the global namespace with two variables p1 and p2.
+ Fixed compatibility issue with Mootools, it is destroying document.getElementById on unload in IE. (Mantra: You don't own the internal objects).
+ Fixed bugs where dialogs/tabs and other UI elements where rendered incorrectly in Firefox 3.
+ Fixed so the auto CSS class importer is compatible with 2.x.
+ Fixed so the editor UI and inlinedialogs works correctly with the YUI CSS reset package.
+ Fixed so header and footer elements are forced to lower case when the fullpage plugin is used.
+ Fixed so load prefixes "-" for plugins and themes isn't required if the plugin/theme was loaded by the ThemeManager/PluginManager.
+ Fixed so the JSONRequest uses application/json content type to make Ruby on rails happy.
+ Fixed so the CSS rule is more exact for the body in the default content.css files. Body is now defined as "body.mceContentBody" instead of just "body".
+ Fixed so the tiny_mce_dev.js uses XHR instead of document.write to load scripts to resolve an issue with Opera 9.50.
+ Fixed so language pack loading can be disabled by setting the language option to false. Can be useful for systems with their own language pack management.
+Version 3.0 (2008-01-30)
+ Added map and area elements to the default valid_elements list and also some indentation rules.
+ Fixed bug where empty paragraphs wasn't padded when loading contents.
+ Fixed bug where the RowLayout manager didn't work at all.
+ Fixed bug where style attribute data would get messed up in advimage dialog.
+ Fixed bug where the table dialogs class select wasn't updated correctly.
+ Fixed bug where elements would get extra whitespace around on insert when body was present in valid_elements.
+ Fixed bug where coords attribute of the area element wasn't handled properly in IE.
+ Fixed bug where Safari didn't produce BR elements on shift+return.
+ Fixed bug where force blocks would cast odd invalid attribute exception in IE.
+ Fixed bug where media plugin would produce extra whitespace before and after objects.
+ Fixed bug where cleanup_callback could break the contents of the editor. But use the new event system instead of this option.
+ Fixed bug where the tab_focus option didn't work between editor instanced. You can now tab between editors.
+ Fixed bug where the load function of the ScriptLoader class didn't load single files without the load que as it was supposed to.
+ Fixed bug where the execcommand_callback parameter order was incorrect. Recommendation use the new addCommand method.
+ Fixed bug where range.select calls sometimes failed on some IE versions.
+ Fixed bug where Safari was scrolling to top of document when enter/returned was pressed.
+ Fixed bug where fullscreen_new_window option didn't work correctly.
+ Fixed bug where the nonbreaking plugin inserted an space instead of an non breaking space the first time.
+ Fixed bug where the visualization of non breaking spaces where visual in element path.
+ Fixed so the focus is restored to the editor after inserting an custom character.
+ Fixed so the isNotDirty state is set to false if a new undo level is added.
+ Fixed so pointless style information for borders gets removed in IE.
+ Fixed so the resize button has a se-resize cursor css value.
+Version 3.0rc2 (2008-01-18)
+ Added new fix_nesting option to fix bug #1867292, this is disabled by default.
+ Added new indentation option enables you to specify how much each indent/outdent call will add/remove.
+ Added easier support for enabling/disabling icon columns on drop menues.
+ Added new menu button control class. This control is very similar to the splitbutton but without any onclick action.
+ Added support for previous tab focus (shift+tab). The tab_focus setting now takes two items next and previous element.
+ Fixed bug where iframes inside the editor got removed in Firefox on initial load.
+ Fixed bug where the CSS for abbr elements wasn't applied correctly in IE.
+ Fixed bug where mceAddControl on element inside a hidden container produced errors.
+ Fixed bug where closed anchors like <a /> produced strange results.
+ Fixed bug where caret would jump to the top of the editor if enter was pressed a the end of a list.
+ Fixed bug where remove editor failed if the editor wasn't properly initialized.
+ Fixed bug where render call on for a non existing element produced exception.
+ Fixed bug where parent window was hidden when the color picker was used in a non inlinepopups setup.
+ Fixed bug where onchange event wasn't fired correctly on IE when color picker was used in dialogs.
+ Fixed bug where save plugin could not save contents if the converted element wasn't an textarea.
+ Fixed bug where events might be fired even after an editor instance was removed such as blur events.
+ Fixed bug where an exception about undefined undo levels could be throwed sometimes.
+ Fixed bug where the plugin_preview_pageurl option didn't work.
+ Fixed bug where adding/removing an editor instance very fast could produce problems.
+ Fixed bug where the link button was highlighted when an anchor element was selected.
+ Fixed bug where the selected contents where removed if a new anchor element was added.
+ Fixed bug where splitbuttons where rendered one pixel down in the default theme.
+ Fixed bug where some buttons where placed at incorrect positions in the o2k7 theme.
+ Fixed bug that made it impossible to visually disable a custom button that used an image instead of CSS sprites.
+ Fixed bug where it wasn't possible to press delete/backspace if the editor was added+removed and re-added due to a FF bug.
+ Fixed bug where an entities option with only 38,amp,60,lt,62,gt would fail in IE.
+ Fixed bug where innerHTML sometimes generated unknown runtime error on IE.
+ Fixed bug where content_css files wasn't loaded in the template preview iframe.
+ Fixed bug where scroll position was incorrect when toggling fullscreen mode.
+ Fixed bug where restoration of overflow didn't work correctly when disabling fullscreen mode in Opera.
+ Fixed bug where drop menus where places at incorrect locations if the editor was placed in a scrollable container element.
+ Fixed bug where hideMenu didn't hide sub menus correctly. It will now hide all menus recursively.
+ Fixed so theme_advanced_path_location can be used in init options for compatibility reasons.
+ Fixed so the drop menu colors matches the rest of o2k7 theme.
+ Fixed so the preview example.html file is updated to the new 3.x API.
+ Fixed so the margins are the same by default inside the editable area between IE and other browsers.
+ Fixed so editor contents gets stored before it the onSubmit event is fired.
+Version 3.0rc1 (2008-01-08)
+ Added new classes for toolbar rows in advanced theme mceToolbarRow1..n enabled you to change appearance of individual rows.
+ Added auto detection for the strict_loading_mode option when running in application/xhtml+xml mode on Gecko.
+ Optimized the HTML serializer by bundling some post process methods together.
+ Fixed so that the toolbars have unique IDs, enables you to alter the toolbars using the ControlManager and the DOM.
+ Fixed bug where delta values for dialog sizes in language packs didn't work correctly due to missing string to number casting.
+ Fixed bug where paragraph generation logic didn't handle hr or table elements correctly if they where the only element.
+ Fixed bug where some elements got extra linebreaks added after or before it in HTML output.
+ Fixed bug where it was hard to modify existing style data on table rows and table cells.
+ Fixed bug where the dom.getRect method didn't handle non pixel values correctly.
+ Fixed bug where strikethrough and underline couldn't be toggled on existing span elements.
+ Fixed bug where the postprocessor searched for nsbp instead of nbsp entities.
+ Fixed bug where it was impossible to edit links that had child elements within them.
+ Fixed bug where it was possible to click on the parent item of a submenu.
+ Fixed bug where mouseover/mouseout images couldn't be removed in advimage dialog.
+ Fixed bug where drop menus didn't work when running in application/xhtml+xml mode.
+ Fixed bug where Opera added doctype to output in application/xhtml+xml mode.
+ Fixed bug where some DOM methods didn't work correctly in the application/xhtml+xml mode.
+ Fixed bug where the inlinepopups didn't work correctly in the application/xhtml+xml mode.
+ Fixed bug where the ColorSplitButton didn't display correctly in the application/xhtml+xml mode.
+ Fixed bug where the UI layout was incorrect on Gecko browsers when running in application/xhtml+xml mode.
+ Fixed bug where the word paste plugin produced exception while running in application/xhtml+xml mode.
+ Fixed bug where there wasn't any hidden input element generated for divs while running in application/xhtml+xml mode.
+ Fixed bug where indentation of script/style/pre elements where incorrect.
+ Fixed bug where script element contents was removed in IE.
+ Fixed bug where script element contents got entity encoded.
+ Fixed bug where you couldn't edit existing element styles using the styles plugin.
+ Fixed bug where styles wasn't updated properly sometimes due to an performance enhancement.
+ Fixed bug where font sizes couldn't be changed using the style plugin.
+ Fixed bug where an error was produced in Gecko browsers when switching back from fullscreen mode.
+ Fixed bug where Opera was producing br elements after elements like h3.
+ Fixed bug where TinyMCE couldn't be loaded on a page using - characters in it's URL.
+ Fixed bug where the editor container element was forced to have a specific name.
+ Fixed bug with force_br_newlines option on Firefox, even though it should never be used (Read FAQ).
+ Fixed bug where onclick event had an return true; prefix added when creating an popup.
+ Fixed bug where the theme_advanced_statusbar_location option couldn't handle the value "none".
+ Fixed issue with URLs with multiple at characters for example an Zope URI.
+ Fixed so simple and advanced themes doesn't collide.
+ Fixed so a elements gets removed when the href field is left empty, the href attribute is required in a link after all.
+ Fixed so img elements gets removed when the src field is left empty, the src attribute is required for all images after all.
+ Removed the indent and encode methods from the tinymce.dom.Serializer class due to performance enhancement and reduction of the API size.
+Version 3.0b3 (2007-12-14)
+ Added new getElement method to Editor class, returns the element that was replaced with the editor instance.
+ Added new unavailable prefix for disabled controls for accessibility reasons.
+ Fixed bug where regexp patterns couldn't be used for the editor_selector/editor_deselector options.
+ Fixed bug where the DOM wasn't properly initialized before the onInit event was executed in popups.
+ Fixed bug where font sizes where reduced by font size actions on previous spans in Safari.
+ Fixed bug where HR elements got places at the wrong location in IE.
+ Fixed bug where align/justify didn't work correctly on multiple paragraphs.
+ Fixed bug with missing translation for cell scope settings.
+ Fixed bug where selection/caret position was lost on some table actions.
+ Fixed bug where editor instances couldn't be added to hidden div elements.
+ Fixed bug where list elements in Safari would get an odd ID attribute.
+ Fixed bug where IE would return <html/> when the editor was completely empty.
+ Fixed bug where accessibility title attribute for access keys wasn't setup properly.
+ Fixed bug where forecolorpicker and backcolorpicker control names wasn't working.
+ Fixed bug where inserting template content didn't work in Safari due to selection exception.
+ Fixed bug where absolute URLs to remote hosts couldn't be used for background images.
+ Fixed bug where mysterious span elements where produced in Safari when injecting HTML contents.
+ Fixed bug where the media plugin didn't work correctly on the latest Opera 9.24.
+ Fixed bug where indentation of HTML output wasn't applied to all block elements.
+ Fixed bug where Safari was production DOM exception if you pressed enter in an empty editor.
+ Fixed bug where media plugin didn't parse script tags correctly patch contributed by Mathieu Campagna.
+ Fixed bug where the drop menus of list boxes like blockformat could produce scrolling of the page.
+ Fixed bug where the drop menus where placed at an incorrect location if TinyMCE was placed in a scrollable div.
+ Fixed bug where submit buttons couldn't be named submit, it's not recommended to name submit buttons submit anyway.
+ Fixed bug where the stylelistbox produced an exception if there was only one class in the list box.
+ Fixed bug where the stylelistbox wasn't updated correctly when the current class was removed.
+ Fixed bug where the formatblock command sometimes removed the body element.
+ Fixed bug where fullscreen switching in IE sometimes produced an exception when the spellchecker plugin was enabled.
+ Fixed issue where FF produced an empty paragraph when the editor was completely empty.
+ Fixed issue with size of image dialog in the advanced theme.
+ Fixed issues with the bbcode plugin it now also handles spans and the [font] rule.
+ Fixed so the style compression feature is a bit smarter to resolve issues with Opera.
+ Reintroduced the remove_linebreaks option, this is enabled by default.
+Version 3.0b2 (2007-11-29)
+ Added type and compact attributes to the default valid_elements list for the ul and ol elements.
+ Added missing accessibility support to native list boxes in both the toolbar and dialogs.
+ Added missing access key for the element path for accessibility reasons.
+ Fixed support for loading themes from external URLs.
+ Fixed bug where setOuterHTML didn't work correctly when multiple elements where passed to it.
+ Fixed bug with visualchars plugin was moving elements around in the DOM.
+ Fixed bug with DIV elements that got converted into editors on IE.
+ Fixed bug with paste plugin using the old event API.
+ Fixed bug where the spellchecker was removing the word when it was ignored.
+ Fixed bug where fullscreen wasn't working properly.
+ Fixed bug where the base href element and attribute was ignored.
+ Fixed bug where redo function didn't work in IE.
+ Fixed bug where content_css didn't work as previous 2.x branch.
+ Fixed bug where preview dialog was throwing errors if the content_css wasn't defined.
+ Fixed bug where the theme_advanced_path option didn't work like the 2.x branch.
+ Fixed bug where the theme_advanced_statusbar_location was called theme_advanced_status_location.
+ Fixed bug where the strict_loading_mode option didn't work if you created editors dynamically without using the EditorManager.
+ Fixed bug where some language values wasn't translated such as insert and update in dialogs.
+ Fixed bug where some image attributes wasn't stored correctly when inserting an image.
+ Fixed bug where fullscreen mode didn't restore scrollbars when disabled.
+ Fixed bug where there was no visual representation for tab focus in toolbars on IE.
+ Fixed bug where HR elements wasn't treated as block elements so forced_root_block would fail on these.
+ Fixed bug where autosave presented warning message even when the form was submitted normally.
+ Fixed typo of openBrower it's now openBrowser in form_utils.js.
+ Fixed various HTML problems like missing TD elements and duplicated doctypes.
+ Fixed default values for theme_advanced_resize_horizontal, theme_advanced_resizing_use_cookie to be 2.x compatible.
+ Moved spellchecker JS files into the development package.
+ Removed support for theme_advanced_path_location since the theme_advanced_statusbar_location is the correct option name.
+Version 3.0b1 (2007-11-21)
+ Added new tab_focus option, that enables you to specify a element id or that the next element to be focused on tab key down.
+ Added new addQueryValueHandler method to the tinymce.Editor class.
+ Added new class_filter option, this enables you to specify a function that can filter out CSS classes for the styles list box.
+ Added support form [url=url]title[/url] to the bbcode plugin.
+ Renamed the addCommandQueryState method in the tinymce.Editor class to addQueryStateHandler.
+ Renamed loadQue to loadQueue, to correct spelling.
+ Removed the createDOM method from the window manager and replace it with a createInstance method.
+ Removed the add to beginning of class attribute parameter of the DOMUtils.addClass method.
+ Fixed bug with the forced_root_block option, didn't work correctly with multiple inline elements.
+ Fixed bug where image dialogs replaced the current image element with a new one even when it was updated.
+ Fixed bug where the submit trigger wasn't executed when divs where converted into editor instances.
+ Fixed bug where div elements that got converted into editors didn't get a hidden input element generated for them.
+ Fixed bug where the the media_use_script option for the media plugin wasn't working correctly.
+ Fixed bug where the font size and font family listboxes wasn't updated correctly on Safari.
+ Fixed bug where the height of the fieldset in default image dialog for the advanced theme was to small.
+ Fixed bug where the font sizes behaved incorrectly after a cleanup on Safari.
+ Fixed bug where formatblock didn't work correctly in Safari on some elements.
+ Fixed bug where template plugin didn't insert content correctly unless some options where specified.
+ Fixed bug where charmap on Safari produced scrollbars.
+ Fixed bug where there was white artifacts in some dialogs due to missing background color.
+ Fixed bug where port was added to all external URLs if the editor was loaded from a custom port.
+ Fixed bug where the context menus got duplicated on Safari 3.0.4 on Mac OS X.
+ Fixed bug where dialogs like paste from word was huge on Firefox.
+ Fixed bug with media plugin not working with windows media objects.
+ Fixed bug where a forever loop was created if multiple instances where submitted using form.submit.
+ Fixed bug with editing a table produce error in IE when inlinepopups where used.
+ Fixed bug where the style plugin generated ugly looking style information in IE.
+ Fixed bug where the inline dialogs that got opened while in fullscreen mode wasn't visible.
+ Fixed bug where it was difficult to place the caret inside the word paste dialog.
+ Fixed bug where Opera produced strange border in the word paste dialog.
+ Fixed bug where viewport constraints could move a inlinepopup to a negative x, y position if the viewport was to small.
+ Fixed bug where template plugin was producing an error due to a deprecated API call.
+ Fixed bug where drag drop of images failed in Gecko if a document_base_url was specified.
+ Fixed bug where Firefox 3 failed to apply block formats like H1-H6 it still breaks on DIVs this has been reported to bugzilla.
+ Fixed bug where IE was producing a warning dialog about non secure items when running TinyMCE over HTTPS.
+ Fixed bug where the onbeforeunload event was triggered when menus or dialogs where opened.
+ Fixed bug where the fullscreen mode of the HTML view source box threw an error.
+ Fixed bug where the mceFocus command didn't work correctly.
+ Fixed bug where the selection could get lost in IE using inlinepopups.
+ Fixed so the body of the editor area has the mceContentBody class just like the 2.x branch.
+ Fixed so the media icon gets active when a media element is selected.
+Version 3.0a3 (2007-11-13)
+ Added new experimental jQuery and Prototype framework adapters to the development package.
+ Added new translation.html file for the development package. Helps with the internationalization of TinyMCE.
+ Added new setup callback option, use this callback to add events to TinyMCE. This method is recommended over the old callbacks.
+ Added new API documetation to all classes, functions, events, properties to the Wiki with examples etc.
+ Added new init method to all plugins and themes, since it's shorter to write and it mimics interface capable languages better.
+ Fixed various CSS issues in the default skin such as alignment of split buttons and separators.
+ Fixed issues with mod_security. It didn't like that a content type of text/javascript was forced in a XHR.
+ Fixed all events so that they now pass the sender object as it's first argument.
+ Fixed some DOM methods so they now can take an array as input.
+ Fixed so addButton and the methods of the ControlManager uses less arguments and it now uses a settings object instead.
+ Fixed various issues with the tinymce.util.URI class.
+ Fixed bug in IE and Safari and the on demand gzip loading feature.
+ Fixed bug with moving inline windows sometimes failed in IE6.
+ Fixed bug where save_callback function wasn't executed at all.
+ Fixed bug where inlinepopups produces scrollbars if windows where moved to the corners of the browser.
+ Fixed bug where view HTML source failed when inserting a embedded media object.
+ Fixed bug where the listbox menus didn't display correctly on IE6.
+ Fixed bug where undo level wasn't added when editor was blurred.
+ Fixed bug where spellchecker wasn't disabled when fullscreen mode was enabled.
+ Fixed bug where Firefox could crash some times when the user switched to fullscreen mode.
+ Fixed bug where tinymce.ui.DropMenu didn't remove all item data when an item was removed from the menu.
+ Fixed bug where anchor list in advlink dialog wasn't populated correctly in Safari.
+ Fixed bug where it wasn't possible to edit tables in IE when inlinepopups was enabled.
+ Fixed bug where it wasn't possible to change the table width of an existing table.
+ Fixed bug where xhtmlxtras like abbr didn't work correctly on IE.
+ Fixed bug where IE6 had some graphics rendering issues with the inlinepopups.
+ Fixed bug where inlinepopup windows where moved incorrectly when they were boundary checked for min width.
+ Fixed bug where textareas without id or name couldn't be converted into editor instances.
+ Fixed bug where TinyMCE was stealing element focus on IE.
+ Fixed bug where the getParam method didn't handle false values correctly.
+ Fixed bug where inlinepopups was clipped by other TinyMCE instances or relative elements in IE.
+ Fixed bug where the contextmenu was clipped by other TinyMCE instances or relative elements in IE.
+ Fixed bug where listbox menus was clipped by other TinyMCE instances or relative elements in IE.
+ Fixed bug where listboxes wasn't updated correctly when the a value wasn't found by select.
+ Fixed various CSS issues that produced odd rendering bugs in IE.
+ Fixed issues with tinymce.ui.DropMenu class, it required some optional settings to be specified.
+ Fixed so multiple blockquotes can be removed with a easier method than before.
+ Optimized some of the core API to boost performance.
+ Removed some functions from the core API that wasn't needed.
+Version 3.0a2 (2007-11-02)
+ Fixed critical bug where IE generaded an error on a hasAttribute call in the serialization engine.
+ Fixed critical bug where some dialogs didn't open in the non dev package.
+ Fixed bug when using the theme_advanced_styles option. Error was thrown in some dialogs.
+ Fixed bug where the close buttons produced an error when native windows where used.
+ Fixed bug in default skin so that split buttons gets activated correctly.
+ Fixed so plugins can be loaded from external urls outsite the plugins directory.
+Version 3.0a1 (2007-11-01)
+ Rewrote the core and most of the plugins and themes from scratch.
+ Added new and improved serialization engine, faster and more powerful.
+ Added new internal event system, things like editor.onClick.add(func).
+ Added new inlinepopups plugin, the dialogs are now skinnable and uses clearlooks2 as default.
+ Added new contextmenu plugin, context menus can now have submenus and plugins can add items on the fly.
+ Added new skin support for the simple and advanced themes you can alter the whole UI using CSS.
+ Added new o2k7 skin for the simple and advanced themes.
+ Added new custom list boxes for font size/format/style etc with preview support.
+ Added new UI management, enabled plugins to create controls like splitbuttons or menus easier.
+ Added new JSON parser/serializer and JSON-RPC class to the core API.
+ Added new cookie utility class to the core API.
+ Added new Unit testing class to the core API only available in dev mode.
+ Added new firebug lite integration when loading the dev version of TinyMCE.
+ Added new Safari plugin, fixes lots compatibility of issues with Safari 3.x.
+ Added new URI/URL parsing it now handles the hole RFC and even some exceptions.
+ Added new pagebreak plugin, enables you to insert pagebreak comments like <!-- pagebreak -->
+ Added new on demand loading of plugins and themes. Enables you to load and init TinyMCE at any time.
+ Added new throbber/progress visualization a plugin can show/hide this when it's needed.
+ Added new blockquote button. Enables you to wrap paragraphs in blockquotes.
+ Added new compat2x plugin. Will provide a TinyMCE 2.x API for older plugins.
+ Added new theme_advanced_resizing_min_width, theme_advanced_resizing_min_height options.
+ Added new theme_advanced_resizing_max_height, theme_advanced_resizing_max_height options.
+ Added new use_native_selects option. Enables you to toggle native listboxes on and off.
+ Added new docs_url option enables you to specify where the TinyMCE user documentation is located.
+ Added new frame and rules options for the table dialog.
+ Added new global rule for valid_elements/extended_valid_elements enables you to specify global attributes for all elements.
+ Added new deny attribute rule characher so it's possible to deny global attribute rules on specific elements.
+ Added new unit tests in the dev package of TinyMCE. Runs tests on the core API, commands and settings of the editor.
+ Readded the inline_styles option and enabled it by default so deprecated attributes are no longer used.
+ Removed all button images and replaced them with CSS sprite images. Reduces the number of requests needed.
+ Removed lots of language files and merged them into the base language files. Reduces the number of requests needed.
+ Removed lots of unnecessary files and merged many of them together to reduce requests and improve loading speed.
+ Reduced the over all script size by 33% and the number of files/requests by 75% so it loads a lot faster.
+ Fixed so convert_fonts_to_spans are enabled by default. So no more font tags.
+ Fixed so underline and strikethrough uses spans instread of deprecated U and STRIKE elements.
+ Fixed so indent/outdent adds/removed margin-left instead of blockquotes.
+ Fixed so alignment of paragraphs results in a text-align style value instead of the deprecated align attribute.
+ Fixed so alignment of images uses float or vertical-align style values instead of the deprecated align attribute.
+ Fixed so all classes from @import stylesheets gets imported into the editor.
+ Fixed so the directionality can toggle the dir attribute on and off.
+ Fixed so the fullscreen_settings can be used for all types of fullscreen modes.
+ Fixed so the advanced HR dialog gets displayed when inserting a HR not only on edit.
+ Fixed bug where word wrap didn't work in the source editor on Safari.
+ Fixed so non HTML elements can be used within the editor such as <myns:tag>
+ Fixed various memory leaks in IE and reduced the unload cleanups needed.
+ Fixed so the preformatted option adds an invisible container pre tag inside the editor.
+ Renamed the _template plugin to example and updated it to use the new 3.x API.
diff --git a/mod/tinymce/vendor/tinymce/examples/accessibility.html b/mod/tinymce/vendor/tinymce/examples/accessibility.html
new file mode 100644
index 000000000..69059403c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/accessibility.html
@@ -0,0 +1,101 @@
+<!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>Full featured example</title>
+
+<!-- TinyMCE -->
+<script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
+<script type="text/javascript">
+ tinyMCE.init({
+ // General options
+ mode : "textareas",
+ theme : "advanced",
+ plugins : "pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave",
+
+ // Theme options
+ theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
+ theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+
+ // Example content CSS (should be your site CSS)
+ // using false to ensure that the default browser settings are used for best Accessibility
+ // ACCESSIBILITY SETTINGS
+ content_css : false,
+ // Use browser preferred colors for dialogs.
+ browser_preferred_colors : true,
+ detect_highcontrast : true,
+
+ // Drop lists for link/image/media/template dialogs
+ template_external_list_url : "lists/template_list.js",
+ external_link_list_url : "lists/link_list.js",
+ external_image_list_url : "lists/image_list.js",
+ media_external_list_url : "lists/media_list.js",
+
+ // Style formats
+ style_formats : [
+ {title : 'Bold text', inline : 'b'},
+ {title : 'Red text', inline : 'span', styles : {color : '#ff0000'}},
+ {title : 'Red header', block : 'h1', styles : {color : '#ff0000'}},
+ {title : 'Example 1', inline : 'span', classes : 'example1'},
+ {title : 'Example 2', inline : 'span', classes : 'example2'},
+ {title : 'Table styles'},
+ {title : 'Table row 1', selector : 'tr', classes : 'tablerow1'}
+ ],
+
+ // Replace values for the template plugin
+ template_replace_values : {
+ username : "Some User",
+ staffid : "991234"
+ }
+ });
+</script>
+<!-- /TinyMCE -->
+
+</head>
+<body>
+
+<form method="post" action="http://tinymce.moxiecode.com/dump.php?example=true">
+ <div>
+ <h3>Full featured example, with Accessibility settings enabled</h3>
+
+ <p>
+ This page has got the TinyMCE set up to work with configurations related to accessiblity enabled.
+ In particular
+ <ul>
+ <li>the <strong>content_css</strong> is set to false, to ensure that all default browser styles are used, </li>
+ <li>the <strong>browser_preferred_colors</strong> dialog option is used to ensure that default css is used for dialogs, </li>
+ <li>and the <strong>detect_highcontrast</strong> option has been set to ensure that highcontrast mode in Windows browsers
+ is detected and the toolbars are displayed in a high contrast mode.</li>
+ </ul>
+ </p>
+
+ <!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
+ <div>
+ <textarea id="elm1" name="elm1" rows="15" cols="80" style="width: 80%">
+ &lt;p&gt;
+ This is some example text that you can edit inside the &lt;strong&gt;TinyMCE editor&lt;/strong&gt;.
+ &lt;/p&gt;
+ &lt;p&gt;
+ Nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. Nam sed lectus quam, ut sagittis tellus. Quisque dignissim mauris a augue rutrum tempor. Donec vitae purus nec massa vestibulum ornare sit amet id tellus. Nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. Aliquam molestie volutpat dapibus. Nunc interdum viverra sodales. Morbi laoreet pulvinar gravida. Quisque ut turpis sagittis nunc accumsan vehicula. Duis elementum congue ultrices. Cras faucibus feugiat arcu quis lacinia. In hac habitasse platea dictumst. Pellentesque fermentum magna sit amet tellus varius ullamcorper. Vestibulum at urna augue, eget varius neque. Fusce facilisis venenatis dapibus. Integer non sem at arcu euismod tempor nec sed nisl. Morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.
+ &lt;/p&gt;
+ </textarea>
+ </div>
+
+ <br />
+ <input type="submit" name="save" value="Submit" />
+ <input type="reset" name="reset" value="Reset" />
+ </div>
+</form>
+
+<script type="text/javascript">
+if (document.location.protocol == 'file:') {
+ alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
+}
+</script>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/examples/css/content.css b/mod/tinymce/vendor/tinymce/examples/css/content.css
new file mode 100644
index 000000000..a76c38a2f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/css/content.css
@@ -0,0 +1,105 @@
+body {
+ background-color: #FFFFFF;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ scrollbar-3dlight-color: #F0F0EE;
+ scrollbar-arrow-color: #676662;
+ scrollbar-base-color: #F0F0EE;
+ scrollbar-darkshadow-color: #DDDDDD;
+ scrollbar-face-color: #E0E0DD;
+ scrollbar-highlight-color: #F0F0EE;
+ scrollbar-shadow-color: #F0F0EE;
+ scrollbar-track-color: #F5F5F5;
+}
+
+td {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+}
+
+pre {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+}
+
+.example1 {
+ font-weight: bold;
+ font-size: 14px
+}
+
+.example2 {
+ font-weight: bold;
+ font-size: 12px;
+ color: #FF0000
+}
+
+.tablerow1 {
+ background-color: #BBBBBB;
+}
+
+thead {
+ background-color: #FFBBBB;
+}
+
+tfoot {
+ background-color: #BBBBFF;
+}
+
+th {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+}
+
+/* Basic formats */
+
+.bold {
+ font-weight: bold;
+}
+
+.italic {
+ font-style: italic;
+}
+
+.underline {
+ text-decoration: underline;
+}
+
+/* Global align classes */
+
+.left {
+ text-align: inherit;
+}
+
+.center {
+ text-align: center;
+}
+
+.right {
+ text-align: right;
+}
+
+.full {
+ text-align: justify
+}
+
+/* Image and table specific aligns */
+
+img.left, table.left {
+ float: left;
+ text-align: inherit;
+}
+
+img.center, table.center {
+ margin-left: auto;
+ margin-right: auto;
+ text-align: inherit;
+}
+
+img.center {
+ display: block;
+}
+
+img.right, table.right {
+ float: right;
+ text-align: inherit;
+}
diff --git a/mod/tinymce/vendor/tinymce/examples/css/word.css b/mod/tinymce/vendor/tinymce/examples/css/word.css
new file mode 100644
index 000000000..049a39fbd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/css/word.css
@@ -0,0 +1,53 @@
+body {
+ background-color: #FFFFFF;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+ scrollbar-3dlight-color: #F0F0EE;
+ scrollbar-arrow-color: #676662;
+ scrollbar-base-color: #F0F0EE;
+ scrollbar-darkshadow-color: #DDDDDD;
+ scrollbar-face-color: #E0E0DD;
+ scrollbar-highlight-color: #F0F0EE;
+ scrollbar-shadow-color: #F0F0EE;
+ scrollbar-track-color: #F5F5F5;
+}
+
+p {margin:0; padding:0;}
+
+td {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+}
+
+pre {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+}
+
+.example1 {
+ font-weight: bold;
+ font-size: 14px
+}
+
+.example2 {
+ font-weight: bold;
+ font-size: 12px;
+ color: #FF0000
+}
+
+.tablerow1 {
+ background-color: #BBBBBB;
+}
+
+thead {
+ background-color: #FFBBBB;
+}
+
+tfoot {
+ background-color: #BBBBFF;
+}
+
+th {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 13px;
+}
diff --git a/mod/tinymce/vendor/tinymce/examples/custom_formats.html b/mod/tinymce/vendor/tinymce/examples/custom_formats.html
new file mode 100644
index 000000000..ba9d1eb0c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/custom_formats.html
@@ -0,0 +1,111 @@
+<!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>Custom formats example</title>
+
+<!-- TinyMCE -->
+<script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
+<script type="text/javascript">
+ tinyMCE.init({
+ // General options
+ mode : "textareas",
+ theme : "advanced",
+ plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave",
+
+ // Theme options
+ theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
+ theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+
+ // Example content CSS (should be your site CSS)
+ content_css : "css/content.css",
+
+ // Drop lists for link/image/media/template dialogs
+ template_external_list_url : "lists/template_list.js",
+ external_link_list_url : "lists/link_list.js",
+ external_image_list_url : "lists/image_list.js",
+ media_external_list_url : "lists/media_list.js",
+
+ // Style formats
+ style_formats : [
+ {title : 'Bold text', inline : 'b'},
+ {title : 'Red text', inline : 'span', styles : {color : '#ff0000'}},
+ {title : 'Red header', block : 'h1', styles : {color : '#ff0000'}},
+ {title : 'Example 1', inline : 'span', classes : 'example1'},
+ {title : 'Example 2', inline : 'span', classes : 'example2'},
+ {title : 'Table styles'},
+ {title : 'Table row 1', selector : 'tr', classes : 'tablerow1'}
+ ],
+
+ formats : {
+ alignleft : {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes : 'left'},
+ aligncenter : {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes : 'center'},
+ alignright : {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes : 'right'},
+ alignfull : {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img', classes : 'full'},
+ bold : {inline : 'span', 'classes' : 'bold'},
+ italic : {inline : 'span', 'classes' : 'italic'},
+ underline : {inline : 'span', 'classes' : 'underline', exact : true},
+ strikethrough : {inline : 'del'}
+ },
+
+ // Replace values for the template plugin
+ template_replace_values : {
+ username : "Some User",
+ staffid : "991234"
+ }
+ });
+</script>
+<!-- /TinyMCE -->
+
+</head>
+<body>
+
+<form method="post" action="http://tinymce.moxiecode.com/dump.php?example=true">
+ <div>
+ <h3>Custom formats example</h3>
+
+ <p>
+ This example shows you how to override the default formats for bold, italic, underline, strikethough and alignment to use classes instead of inline styles.
+ There are more examples on how to use TinyMCE in the <a href="http://tinymce.moxiecode.com/examples/">Wiki</a>.
+ </p>
+
+ <!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
+ <div>
+ <textarea id="elm1" name="elm1" rows="15" cols="80" style="width: 80%">
+ &lt;p&gt;
+ This is some example text that you can edit inside the &lt;strong&gt;TinyMCE editor&lt;/strong&gt;.
+ &lt;/p&gt;
+ &lt;p&gt;
+ Nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. Nam sed lectus quam, ut sagittis tellus. Quisque dignissim mauris a augue rutrum tempor. Donec vitae purus nec massa vestibulum ornare sit amet id tellus. Nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. Aliquam molestie volutpat dapibus. Nunc interdum viverra sodales. Morbi laoreet pulvinar gravida. Quisque ut turpis sagittis nunc accumsan vehicula. Duis elementum congue ultrices. Cras faucibus feugiat arcu quis lacinia. In hac habitasse platea dictumst. Pellentesque fermentum magna sit amet tellus varius ullamcorper. Vestibulum at urna augue, eget varius neque. Fusce facilisis venenatis dapibus. Integer non sem at arcu euismod tempor nec sed nisl. Morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.
+ &lt;/p&gt;
+ </textarea>
+ </div>
+
+ <!-- Some integration calls -->
+ <a href="javascript:;" onmousedown="tinyMCE.get('elm1').show();">[Show]</a>
+ <a href="javascript:;" onmousedown="tinyMCE.get('elm1').hide();">[Hide]</a>
+ <a href="javascript:;" onmousedown="tinyMCE.get('elm1').execCommand('Bold');">[Bold]</a>
+ <a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').getContent());">[Get contents]</a>
+ <a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').selection.getContent());">[Get selected HTML]</a>
+ <a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').selection.getContent({format : 'text'}));">[Get selected text]</a>
+ <a href="javascript:;" onmousedown="alert(tinyMCE.get('elm1').selection.getNode().nodeName);">[Get selected element]</a>
+ <a href="javascript:;" onmousedown="tinyMCE.execCommand('mceInsertContent',false,'<b>Hello world!!</b>');">[Insert HTML]</a>
+ <a href="javascript:;" onmousedown="tinyMCE.execCommand('mceReplaceContent',false,'<b>{$selection}</b>');">[Replace selection]</a>
+
+ <br />
+ <input type="submit" name="save" value="Submit" />
+ <input type="reset" name="reset" value="Reset" />
+ </div>
+</form>
+<script type="text/javascript">
+if (document.location.protocol == 'file:') {
+ alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
+}
+</script>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/examples/full.html b/mod/tinymce/vendor/tinymce/examples/full.html
new file mode 100644
index 000000000..39c2060b2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/full.html
@@ -0,0 +1,101 @@
+<!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>Full featured example</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<!-- TinyMCE -->
+<script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
+<script type="text/javascript">
+ tinyMCE.init({
+ // General options
+ mode : "textareas",
+ theme : "advanced",
+ plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,wordcount,advlist,autosave",
+
+ // Theme options
+ theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
+ theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+
+ // Example content CSS (should be your site CSS)
+ content_css : "css/content.css",
+
+ // Drop lists for link/image/media/template dialogs
+ template_external_list_url : "lists/template_list.js",
+ external_link_list_url : "lists/link_list.js",
+ external_image_list_url : "lists/image_list.js",
+ media_external_list_url : "lists/media_list.js",
+
+ // Style formats
+ style_formats : [
+ {title : 'Bold text', inline : 'b'},
+ {title : 'Red text', inline : 'span', styles : {color : '#ff0000'}},
+ {title : 'Red header', block : 'h1', styles : {color : '#ff0000'}},
+ {title : 'Example 1', inline : 'span', classes : 'example1'},
+ {title : 'Example 2', inline : 'span', classes : 'example2'},
+ {title : 'Table styles'},
+ {title : 'Table row 1', selector : 'tr', classes : 'tablerow1'}
+ ],
+
+ // Replace values for the template plugin
+ template_replace_values : {
+ username : "Some User",
+ staffid : "991234"
+ }
+ });
+</script>
+<!-- /TinyMCE -->
+
+</head>
+<body role="application">
+
+<form method="post" action="http://tinymce.moxiecode.com/dump.php?example=true">
+ <div>
+ <h3>Full featured example</h3>
+
+ <p>
+ This page shows all available buttons and plugins that are included in the TinyMCE core package.
+ There are more examples on how to use TinyMCE in the <a href="http://tinymce.moxiecode.com/examples/">Wiki</a>.
+ </p>
+
+ <!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
+ <div>
+ <textarea id="elm1" name="elm1" rows="15" cols="80" style="width: 80%">
+ &lt;p&gt;
+ This is some example text that you can edit inside the &lt;strong&gt;TinyMCE editor&lt;/strong&gt;.
+ &lt;/p&gt;
+ &lt;p&gt;
+ Nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. Nam sed lectus quam, ut sagittis tellus. Quisque dignissim mauris a augue rutrum tempor. Donec vitae purus nec massa vestibulum ornare sit amet id tellus. Nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. Aliquam molestie volutpat dapibus. Nunc interdum viverra sodales. Morbi laoreet pulvinar gravida. Quisque ut turpis sagittis nunc accumsan vehicula. Duis elementum congue ultrices. Cras faucibus feugiat arcu quis lacinia. In hac habitasse platea dictumst. Pellentesque fermentum magna sit amet tellus varius ullamcorper. Vestibulum at urna augue, eget varius neque. Fusce facilisis venenatis dapibus. Integer non sem at arcu euismod tempor nec sed nisl. Morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.
+ &lt;/p&gt;
+ </textarea>
+ </div>
+
+ <!-- Some integration calls -->
+ <a href="javascript:;" onclick="tinyMCE.get('elm1').show();return false;">[Show]</a>
+ <a href="javascript:;" onclick="tinyMCE.get('elm1').hide();return false;">[Hide]</a>
+ <a href="javascript:;" onclick="tinyMCE.get('elm1').execCommand('Bold');return false;">[Bold]</a>
+ <a href="javascript:;" onclick="alert(tinyMCE.get('elm1').getContent());return false;">[Get contents]</a>
+ <a href="javascript:;" onclick="alert(tinyMCE.get('elm1').selection.getContent());return false;">[Get selected HTML]</a>
+ <a href="javascript:;" onclick="alert(tinyMCE.get('elm1').selection.getContent({format : 'text'}));return false;">[Get selected text]</a>
+ <a href="javascript:;" onclick="alert(tinyMCE.get('elm1').selection.getNode().nodeName);return false;">[Get selected element]</a>
+ <a href="javascript:;" onclick="tinyMCE.execCommand('mceInsertContent',false,'<b>Hello world!!</b>');return false;">[Insert HTML]</a>
+ <a href="javascript:;" onclick="tinyMCE.execCommand('mceReplaceContent',false,'<b>{$selection}</b>');return false;">[Replace selection]</a>
+
+ <br />
+ <input type="submit" name="save" value="Submit" />
+ <input type="reset" name="reset" value="Reset" />
+ </div>
+</form>
+
+<script type="text/javascript">
+if (document.location.protocol == 'file:') {
+ alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
+}
+</script>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/examples/index.html b/mod/tinymce/vendor/tinymce/examples/index.html
new file mode 100644
index 000000000..6ebfbea57
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
+<html>
+<head>
+ <title>TinyMCE examples</title>
+</head>
+<frameset cols="180,80%">
+ <frame src="menu.html" name="menu" />
+ <frame src="full.html" name="main" />
+</frameset>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/examples/lists/image_list.js b/mod/tinymce/vendor/tinymce/examples/lists/image_list.js
new file mode 100644
index 000000000..7ba049a24
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/lists/image_list.js
@@ -0,0 +1,9 @@
+// This list may be created by a server logic page PHP/ASP/ASPX/JSP in some backend system.
+// There images will be displayed as a dropdown in all image dialogs if the "external_link_image_url"
+// option is defined in TinyMCE init.
+
+var tinyMCEImageList = new Array(
+ // Name, URL
+ ["Logo 1", "media/logo.jpg"],
+ ["Logo 2 Over", "media/logo_over.jpg"]
+);
diff --git a/mod/tinymce/vendor/tinymce/examples/lists/link_list.js b/mod/tinymce/vendor/tinymce/examples/lists/link_list.js
new file mode 100644
index 000000000..0d464331f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/lists/link_list.js
@@ -0,0 +1,10 @@
+// This list may be created by a server logic page PHP/ASP/ASPX/JSP in some backend system.
+// There links will be displayed as a dropdown in all link dialogs if the "external_link_list_url"
+// option is defined in TinyMCE init.
+
+var tinyMCELinkList = new Array(
+ // Name, URL
+ ["Moxiecode", "http://www.moxiecode.com"],
+ ["Freshmeat", "http://www.freshmeat.com"],
+ ["Sourceforge", "http://www.sourceforge.com"]
+);
diff --git a/mod/tinymce/vendor/tinymce/examples/lists/media_list.js b/mod/tinymce/vendor/tinymce/examples/lists/media_list.js
new file mode 100644
index 000000000..79b3f1bfe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/lists/media_list.js
@@ -0,0 +1,14 @@
+// This list may be created by a server logic page PHP/ASP/ASPX/JSP in some backend system.
+// There flash movies will be displayed as a dropdown in all media dialog if the "media_external_list_url"
+// option is defined in TinyMCE init.
+
+var tinyMCEMediaList = [
+ // Name, URL
+ ["Some Flash", "media/sample.swf"],
+ ["Some Quicktime", "media/sample.mov"],
+ ["Some AVI", "media/sample.avi"],
+ ["Some RealMedia", "media/sample.rm"],
+ ["Some Shockwave", "media/sample.dcr"],
+ ["Some Video", "media/sample.mp4"],
+ ["Some FLV", "media/sample.flv"],
+]; \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/examples/lists/template_list.js b/mod/tinymce/vendor/tinymce/examples/lists/template_list.js
new file mode 100644
index 000000000..e06d35788
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/lists/template_list.js
@@ -0,0 +1,9 @@
+// This list may be created by a server logic page PHP/ASP/ASPX/JSP in some backend system.
+// There templates will be displayed as a dropdown in all media dialog if the "template_external_list_url"
+// option is defined in TinyMCE init.
+
+var tinyMCETemplateList = [
+ // Name, URL, Description
+ ["Simple snippet", "templates/snippet1.htm", "Simple HTML snippet."],
+ ["Layout", "templates/layout1.htm", "HTML Layout."]
+]; \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/examples/media/logo.jpg b/mod/tinymce/vendor/tinymce/examples/media/logo.jpg
new file mode 100644
index 000000000..ad535d671
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/media/logo.jpg
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/examples/media/logo_over.jpg b/mod/tinymce/vendor/tinymce/examples/media/logo_over.jpg
new file mode 100644
index 000000000..79fcd884a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/media/logo_over.jpg
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/examples/media/sample.avi b/mod/tinymce/vendor/tinymce/examples/media/sample.avi
new file mode 100644
index 000000000..238bb688a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/media/sample.avi
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/examples/media/sample.dcr b/mod/tinymce/vendor/tinymce/examples/media/sample.dcr
new file mode 100644
index 000000000..353b3ce67
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/media/sample.dcr
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/examples/media/sample.flv b/mod/tinymce/vendor/tinymce/examples/media/sample.flv
new file mode 100644
index 000000000..799d137e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/media/sample.flv
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/examples/media/sample.mov b/mod/tinymce/vendor/tinymce/examples/media/sample.mov
new file mode 100644
index 000000000..9c0a0932c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/media/sample.mov
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/examples/media/sample.ram b/mod/tinymce/vendor/tinymce/examples/media/sample.ram
new file mode 100644
index 000000000..e2ce04cf7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/media/sample.ram
@@ -0,0 +1 @@
+http://streaming.uga.edu/samples/ayp_lan.rm \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/examples/media/sample.rm b/mod/tinymce/vendor/tinymce/examples/media/sample.rm
new file mode 100644
index 000000000..8947706e0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/media/sample.rm
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/examples/media/sample.swf b/mod/tinymce/vendor/tinymce/examples/media/sample.swf
new file mode 100644
index 000000000..9f5fc4ac5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/media/sample.swf
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/examples/menu.html b/mod/tinymce/vendor/tinymce/examples/menu.html
new file mode 100644
index 000000000..e48650abd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/menu.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<title>Menu</title>
+<style>
+a {display:block;}
+</style>
+</head>
+<body>
+<h3>Examples</h3>
+<a href="full.html" target="main">Full featured</a>
+<a href="simple.html" target="main">Simple theme</a>
+<a href="skins.html" target="main">Skin support</a>
+<a href="word.html" target="main">Word processor</a>
+<a href="custom_formats.html" target="main">Custom formats</a>
+<a href="accessibility.html" target="main">Accessibility Options</a>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/examples/simple.html b/mod/tinymce/vendor/tinymce/examples/simple.html
new file mode 100644
index 000000000..70720caa1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/simple.html
@@ -0,0 +1,47 @@
+<!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>Simple theme example</title>
+
+<!-- TinyMCE -->
+<script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
+<script type="text/javascript">
+ tinyMCE.init({
+ mode : "textareas",
+ theme : "simple"
+ });
+</script>
+<!-- /TinyMCE -->
+
+</head>
+<body>
+
+<form method="post" action="http://tinymce.moxiecode.com/dump.php?example=true">
+ <h3>Simple theme example</h3>
+
+ <p>
+ This page shows you the simple theme and it's core functionality you can extend it by changing the code use the advanced theme if you need to configure/add more buttons etc.
+ There are more examples on how to use TinyMCE in the <a href="http://tinymce.moxiecode.com/examples/">Wiki</a>.
+ </p>
+
+ <!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
+ <textarea id="elm1" name="elm1" rows="15" cols="80" style="width: 80%">
+ &lt;p&gt;
+ This is some example text that you can edit inside the &lt;strong&gt;TinyMCE editor&lt;/strong&gt;.
+ &lt;/p&gt;
+ &lt;p&gt;
+ Nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. Nam sed lectus quam, ut sagittis tellus. Quisque dignissim mauris a augue rutrum tempor. Donec vitae purus nec massa vestibulum ornare sit amet id tellus. Nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. Aliquam molestie volutpat dapibus. Nunc interdum viverra sodales. Morbi laoreet pulvinar gravida. Quisque ut turpis sagittis nunc accumsan vehicula. Duis elementum congue ultrices. Cras faucibus feugiat arcu quis lacinia. In hac habitasse platea dictumst. Pellentesque fermentum magna sit amet tellus varius ullamcorper. Vestibulum at urna augue, eget varius neque. Fusce facilisis venenatis dapibus. Integer non sem at arcu euismod tempor nec sed nisl. Morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.
+ &lt;/p&gt;
+ </textarea>
+
+ <br />
+ <input type="submit" name="save" value="Submit" />
+ <input type="reset" name="reset" value="Reset" />
+</form>
+<script type="text/javascript">
+if (document.location.protocol == 'file:') {
+ alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
+}
+</script>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/examples/skins.html b/mod/tinymce/vendor/tinymce/examples/skins.html
new file mode 100644
index 000000000..c15085885
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/skins.html
@@ -0,0 +1,216 @@
+<!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>Skin support example</title>
+
+<!-- TinyMCE -->
+<script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
+<script type="text/javascript">
+ // Default skin
+ tinyMCE.init({
+ // General options
+ mode : "exact",
+ elements : "elm1",
+ theme : "advanced",
+ plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
+
+ // Theme options
+ theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
+ theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+
+ // Example content CSS (should be your site CSS)
+ content_css : "css/content.css",
+
+ // Drop lists for link/image/media/template dialogs
+ template_external_list_url : "lists/template_list.js",
+ external_link_list_url : "lists/link_list.js",
+ external_image_list_url : "lists/image_list.js",
+ media_external_list_url : "lists/media_list.js",
+
+ // Replace values for the template plugin
+ template_replace_values : {
+ username : "Some User",
+ staffid : "991234"
+ }
+ });
+
+ // O2k7 skin
+ tinyMCE.init({
+ // General options
+ mode : "exact",
+ elements : "elm2",
+ theme : "advanced",
+ skin : "o2k7",
+ plugins : "lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
+
+ // Theme options
+ theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
+ theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+
+ // Example content CSS (should be your site CSS)
+ content_css : "css/content.css",
+
+ // Drop lists for link/image/media/template dialogs
+ template_external_list_url : "lists/template_list.js",
+ external_link_list_url : "lists/link_list.js",
+ external_image_list_url : "lists/image_list.js",
+ media_external_list_url : "lists/media_list.js",
+
+ // Replace values for the template plugin
+ template_replace_values : {
+ username : "Some User",
+ staffid : "991234"
+ }
+ });
+
+ // O2k7 skin (silver)
+ tinyMCE.init({
+ // General options
+ mode : "exact",
+ elements : "elm3",
+ theme : "advanced",
+ skin : "o2k7",
+ skin_variant : "silver",
+ plugins : "lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
+
+ // Theme options
+ theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
+ theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+
+ // Example content CSS (should be your site CSS)
+ content_css : "css/content.css",
+
+ // Drop lists for link/image/media/template dialogs
+ template_external_list_url : "lists/template_list.js",
+ external_link_list_url : "lists/link_list.js",
+ external_image_list_url : "lists/image_list.js",
+ media_external_list_url : "lists/media_list.js",
+
+ // Replace values for the template plugin
+ template_replace_values : {
+ username : "Some User",
+ staffid : "991234"
+ }
+ });
+
+ // O2k7 skin (silver)
+ tinyMCE.init({
+ // General options
+ mode : "exact",
+ elements : "elm4",
+ theme : "advanced",
+ skin : "o2k7",
+ skin_variant : "black",
+ plugins : "lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
+
+ // Theme options
+ theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
+ theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+
+ // Example content CSS (should be your site CSS)
+ content_css : "css/content.css",
+
+ // Drop lists for link/image/media/template dialogs
+ template_external_list_url : "lists/template_list.js",
+ external_link_list_url : "lists/link_list.js",
+ external_image_list_url : "lists/image_list.js",
+ media_external_list_url : "lists/media_list.js",
+
+ // Replace values for the template plugin
+ template_replace_values : {
+ username : "Some User",
+ staffid : "991234"
+ }
+ });
+</script>
+<!-- /TinyMCE -->
+
+</head>
+<body>
+
+<form method="post" action="http://tinymce.moxiecode.com/dump.php?example=true">
+ <h3>Skin support example</h3>
+
+ <p>
+ This page displays the two skins that TinyMCE comes with. You can make your own by creating a CSS file in themes/advanced/skins/<yout skin>/ui.css
+ There are more examples on how to use TinyMCE in the <a href="http://tinymce.moxiecode.com/examples/">Wiki</a>.
+ </p>
+
+ <!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
+ <textarea id="elm1" name="elm1" rows="15" cols="80" style="width: 80%">
+ &lt;p&gt;
+ This is some example text that you can edit inside the &lt;strong&gt;TinyMCE editor&lt;/strong&gt;.
+ &lt;/p&gt;
+ &lt;p&gt;
+ Nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. Nam sed lectus quam, ut sagittis tellus. Quisque dignissim mauris a augue rutrum tempor. Donec vitae purus nec massa vestibulum ornare sit amet id tellus. Nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. Aliquam molestie volutpat dapibus. Nunc interdum viverra sodales. Morbi laoreet pulvinar gravida. Quisque ut turpis sagittis nunc accumsan vehicula. Duis elementum congue ultrices. Cras faucibus feugiat arcu quis lacinia. In hac habitasse platea dictumst. Pellentesque fermentum magna sit amet tellus varius ullamcorper. Vestibulum at urna augue, eget varius neque. Fusce facilisis venenatis dapibus. Integer non sem at arcu euismod tempor nec sed nisl. Morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.
+ &lt;/p&gt;
+ </textarea>
+
+ <br />
+
+ <textarea id="elm2" name="elm2" rows="15" cols="80" style="width: 80%">
+ &lt;p&gt;
+ This is some example text that you can edit inside the &lt;strong&gt;TinyMCE editor&lt;/strong&gt;.
+ &lt;/p&gt;
+ &lt;p&gt;
+ Nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. Nam sed lectus quam, ut sagittis tellus. Quisque dignissim mauris a augue rutrum tempor. Donec vitae purus nec massa vestibulum ornare sit amet id tellus. Nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. Aliquam molestie volutpat dapibus. Nunc interdum viverra sodales. Morbi laoreet pulvinar gravida. Quisque ut turpis sagittis nunc accumsan vehicula. Duis elementum congue ultrices. Cras faucibus feugiat arcu quis lacinia. In hac habitasse platea dictumst. Pellentesque fermentum magna sit amet tellus varius ullamcorper. Vestibulum at urna augue, eget varius neque. Fusce facilisis venenatis dapibus. Integer non sem at arcu euismod tempor nec sed nisl. Morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.
+ &lt;/p&gt;
+ </textarea>
+
+ <br />
+
+ <textarea id="elm3" name="elm3" rows="15" cols="80" style="width: 80%">
+ &lt;p&gt;
+ This is some example text that you can edit inside the &lt;strong&gt;TinyMCE editor&lt;/strong&gt;.
+ &lt;/p&gt;
+ &lt;p&gt;
+ Nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. Nam sed lectus quam, ut sagittis tellus. Quisque dignissim mauris a augue rutrum tempor. Donec vitae purus nec massa vestibulum ornare sit amet id tellus. Nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. Aliquam molestie volutpat dapibus. Nunc interdum viverra sodales. Morbi laoreet pulvinar gravida. Quisque ut turpis sagittis nunc accumsan vehicula. Duis elementum congue ultrices. Cras faucibus feugiat arcu quis lacinia. In hac habitasse platea dictumst. Pellentesque fermentum magna sit amet tellus varius ullamcorper. Vestibulum at urna augue, eget varius neque. Fusce facilisis venenatis dapibus. Integer non sem at arcu euismod tempor nec sed nisl. Morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.
+ &lt;/p&gt;
+ </textarea>
+
+ <br />
+
+ <textarea id="elm4" name="elm4" rows="15" cols="80" style="width: 80%">
+ &lt;p&gt;
+ This is some example text that you can edit inside the &lt;strong&gt;TinyMCE editor&lt;/strong&gt;.
+ &lt;/p&gt;
+ &lt;p&gt;
+ Nam nisi elit, cursus in rhoncus sit amet, pulvinar laoreet leo. Nam sed lectus quam, ut sagittis tellus. Quisque dignissim mauris a augue rutrum tempor. Donec vitae purus nec massa vestibulum ornare sit amet id tellus. Nunc quam mauris, fermentum nec lacinia eget, sollicitudin nec ante. Aliquam molestie volutpat dapibus. Nunc interdum viverra sodales. Morbi laoreet pulvinar gravida. Quisque ut turpis sagittis nunc accumsan vehicula. Duis elementum congue ultrices. Cras faucibus feugiat arcu quis lacinia. In hac habitasse platea dictumst. Pellentesque fermentum magna sit amet tellus varius ullamcorper. Vestibulum at urna augue, eget varius neque. Fusce facilisis venenatis dapibus. Integer non sem at arcu euismod tempor nec sed nisl. Morbi ultricies, mauris ut ultricies adipiscing, felis odio condimentum massa, et luctus est nunc nec eros.
+ &lt;/p&gt;
+ </textarea>
+
+ <br />
+ <input type="submit" name="save" value="Submit" />
+ <input type="reset" name="reset" value="Reset" />
+</form>
+<script type="text/javascript">
+if (document.location.protocol == 'file:') {
+ alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
+}
+</script>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/examples/templates/layout1.htm b/mod/tinymce/vendor/tinymce/examples/templates/layout1.htm
new file mode 100644
index 000000000..a38df3e68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/templates/layout1.htm
@@ -0,0 +1,15 @@
+<table border="1">
+ <thead>
+ <tr>
+ <td>Column 1</td>
+ <td>Column 2</td>
+ </tr>
+ </thead>
+
+ <tbody>
+ <tr>
+ <td>Username: {$username}</td>
+ <td>Staffid: {$staffid}</td>
+ </tr>
+ </tbody>
+</table>
diff --git a/mod/tinymce/vendor/tinymce/examples/templates/snippet1.htm b/mod/tinymce/vendor/tinymce/examples/templates/snippet1.htm
new file mode 100644
index 000000000..b2520beaf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/templates/snippet1.htm
@@ -0,0 +1 @@
+This is just some <strong>code</strong>.
diff --git a/mod/tinymce/vendor/tinymce/examples/word.html b/mod/tinymce/vendor/tinymce/examples/word.html
new file mode 100644
index 000000000..d827b6fed
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/examples/word.html
@@ -0,0 +1,72 @@
+<!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>Word processor example</title>
+<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+<!-- TinyMCE -->
+<script type="text/javascript" src="../jscripts/tiny_mce/tiny_mce.js"></script>
+<script type="text/javascript">
+ tinyMCE.init({
+ // General options
+ mode : "textareas",
+ theme : "advanced",
+ skin : "o2k7",
+ plugins : "autolink,lists,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,inlinepopups,autosave",
+
+ // Theme options
+ theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
+ theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
+ theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
+ theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak,restoredraft",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+
+ // Example word content CSS (should be your site CSS) this one removes paragraph margins
+ content_css : "css/word.css",
+
+ // Drop lists for link/image/media/template dialogs
+ template_external_list_url : "lists/template_list.js",
+ external_link_list_url : "lists/link_list.js",
+ external_image_list_url : "lists/image_list.js",
+ media_external_list_url : "lists/media_list.js",
+
+ // Replace values for the template plugin
+ template_replace_values : {
+ username : "Some User",
+ staffid : "991234"
+ }
+ });
+</script>
+<!-- /TinyMCE -->
+
+</head>
+<body>
+
+<form method="post" action="http://tinymce.moxiecode.com/dump.php?example=true">
+ <h3>Word processor example</h3>
+
+ <p>
+ This page shows you how to configure TinyMCE to work more like common word processors.
+ There are more examples on how to use TinyMCE in the <a href="http://tinymce.moxiecode.com/examples/">Wiki</a>.
+ </p>
+
+ <!-- Gets replaced with TinyMCE, remember HTML in a textarea should be encoded -->
+ <textarea id="elm1" name="elm1" rows="15" cols="80" style="width: 80%">
+ &lt;p&gt;This is the first paragraph.&lt;/p&gt;
+ &lt;p&gt;This is the second paragraph.&lt;/p&gt;
+ &lt;p&gt;This is the third paragraph.&lt;/p&gt;
+ </textarea>
+
+ <br />
+ <input type="submit" name="save" value="Submit" />
+ <input type="reset" name="reset" value="Reset" />
+</form>
+<script type="text/javascript">
+if (document.location.protocol == 'file:') {
+ alert("The examples might not work properly on the local file system due to security settings in your browser. Please use a real webserver.");
+}
+</script>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ar.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ar.js
new file mode 100644
index 000000000..0efcb51bc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ar.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ar:{common:{"more_colors":"\u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0623\u0644\u0648\u0627\u0646","invalid_data":"\u062e\u0637\u0623.: \u062a\u0645 \u0625\u062f\u062e\u0627\u0644 \u0642\u064a\u0645 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d\u0647 \u060c \u0647\u0630\u0647 \u0627\u0644\u0642\u064a\u0645 \u0628\u0627\u0644\u0644\u0648\u0646 \u0627\u0644\u0627\u062d\u0645\u0631","popup_blocked":"\u0639\u0630\u0631\u0627 \u060c\u0625\u062f\u0627\u0631\u0629 \u0639\u0631\u0636 \u0627\u0644\u0646\u0648\u0641\u0630 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0647 \u0627\u0648\u0642\u0641\u062a \u0646\u0627\u0641\u0630\u0647 \u062a\u0648\u0641\u0631 \u062e\u062f\u0645\u0647 \u0645\u0646 \u062e\u062f\u0645\u0627\u062a \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c . \u064a\u062c\u0628 \u0627\u0644\u0633\u0645\u0627\u062d \u0644\u0644\u0646\u0648\u0627\u0641\u0630 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0647 \u0644\u0643\u0649 \u064a\u0639\u0645\u0644 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c \u0628\u0643\u0641\u0627\u0626\u0647.","clipboard_no_support":"\u062d\u0627\u0644\u064a\u0627 \u063a\u064a\u0631 \u0645\u0639\u062a\u0645\u062f\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0635\u0641\u062d \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u060c \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0628\u062f\u0644\u0627 \u0645\u0646 \u0630\u0644\u0643.","clipboard_msg":"\u0646\u0633\u062e / \u0642\u0635 / \u0644\u0635\u0642 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631 \u0641\u064a \u0645\u0648\u0632\u064a\u0644\u0627 \u0648\u0641\u0627\u064a\u0631\u0641\u0648\u0643\u0633.\n\u062a\u0631\u064a\u062f \u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u062d\u0648\u0644 \u0647\u0630\u0647 \u0627\u0644\u0645\u0634\u0643\u0644\u0629\u061f","not_set":"-- Not set --","class_name":"\u0627\u0644\u062f\u0631\u062c\u0629",browse:"\u062a\u0635\u0641\u062d",close:"\u0625\u063a\u0644\u0627\u0642",cancel:"\u0625\u0644\u063a\u0627\u0621",update:"\u062a\u062d\u062f\u064a\u062b",insert:"\u0625\u062f\u0631\u0627\u062c",apply:"\u062a\u0637\u0628\u064a\u0642","edit_confirm":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u0649 \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u0647\u0630\u0647 \u0627\u0644\u0645\u0633\u0627\u062d\u0647 \u0643\u0640\u0640 WYSIWYG\u061f","invalid_data_number":"{#field} \u064a\u062c\u0628 \u0627\u0646 \u064a\u0643\u0648\u0646 \u0631\u0642\u0645","invalid_data_min":"{#field} \u064a\u062c\u0628 \u0627\u0646 \u062a\u0643\u0648\u0646 \u0631\u0642\u0645 \u0627\u0643\u0628\u0631 \u0645\u0646 {#min}","invalid_data_size":"{#field} \u064a\u062c\u0628 \u0627\u0646 \u062a\u0643\u0648\u0646 \u0631\u0642\u0645 \u0627\u0648 \u0646\u0633\u0628\u0647 \u0645\u0626\u0648\u064a\u0647",value:"(\u0627\u0644\u0642\u064a\u0645\u0629)"},contextmenu:{full:"\u0643\u0627\u0645\u0644",right:"\u0627\u0644\u062d\u0642",center:"\u0645\u0631\u0643\u0632",left:"\u0628\u0642\u064a",align:"\u0645\u062d\u0627\u0630\u0627\u0629"},insertdatetime:{"day_short":"\u0627\u0644\u0623\u062d\u062f,\u0627\u0644\u0627\u062b\u0646\u064a\u0646,\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621,\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621,\u0627\u0644\u062e\u0645\u064a\u0633,\u0627\u0644\u062c\u0645\u0639\u0629,\u0627\u0644\u0633\u0628\u062a,\u0627\u0644\u0623\u062d\u062f","day_long":"\u0627\u0644\u0623\u062d\u062f \u060c \u0627\u0644\u0627\u062b\u0646\u064a\u0646 \u060c \u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621 \u060c \u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621 \u060c \u0627\u0644\u062e\u0645\u064a\u0633 \u060c \u0627\u0644\u062c\u0645\u0639\u0629 \u060c \u0627\u0644\u0633\u0628\u062a \u060c \u0627\u0644\u0623\u062d\u062f","months_short":"\u064a\u0646\u0627\u064a\u0631,\u0641\u0628\u0631\u0627\u064a\u0631,\u0645\u0627\u0631\u0633,\u0623\u0628\u0631\u064a\u0644,\u0645\u0627\u064a\u0648,\u064a\u0648\u0646\u064a\u0648,\u064a\u0648\u0644\u064a\u0648,\u0623\u063a\u0633\u0637\u0633,\u0633\u0628\u062a\u0645\u0628\u0631,\u0623\u0643\u062a\u0648\u0628\u0631,\u0646\u0648\u0641\u0645\u0628\u0631,\u062f\u064a\u0633\u0645\u0628\u0631","months_long":"\u064a\u0646\u0627\u064a\u0631,\u0641\u0628\u0631\u0627\u064a\u0631,\u0622\u0630\u0627\u0631/\u0645\u0627\u0631\u0633,\u0646\u064a\u0633\u0627\u0646/\u0627\u0628\u0631\u064a\u0644,\u0623\u064a\u0627\u0631/\u0645\u0627\u064a\u0648,\u062d\u0632\u064a\u0631\u0627\u0646/\u064a\u0648\u0646\u064a\u0648,\u062a\u0645\u0648\u0632/\u064a\u0648\u0644\u064a\u0648,\u0622\u0628/\u0627\u063a\u0633\u0637\u0633,\u0623\u064a\u0644\u0648\u0644/\u0633\u0628\u062a\u0645\u0628\u0631,\u0623\u0643\u062a\u0648\u0628\u0631,\u0646\u0648\u0641\u0645\u0628\u0631,\u062f\u064a\u0633\u0645\u0628\u0631","inserttime_desc":"\u0627\u062f\u0631\u0627\u062c \u0627\u0644\u0648\u0642\u062a","insertdate_desc":"\u0627\u062f\u0631\u0627\u062c \u0627\u0644\u062a\u0627\u0631\u064a\u062e","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u0637\u0628\u0627\u0639\u0629"},preview:{"preview_desc":"\u0645\u0639\u0627\u064a\u0646\u0629"},directionality:{"rtl_desc":"\u0627\u0644\u0627\u062a\u062c\u0627\u0647 \u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0644\u0644\u064a\u0633\u0627\u0631","ltr_desc":"\u0627\u0644\u0627\u062a\u062c\u0627\u0647 \u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0627\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646"},layer:{content:"\u0637\u0628\u0642\u0647 \u062c\u062f\u064a\u062f\u0647 ...","absolute_desc":"\u062c\u0639\u0644 \u0627\u0644\u0637\u0628\u0642\u0647 \u062d\u0631\u0647","backward_desc":"\u0646\u0642\u0644 \u0644\u0644\u062e\u0644\u0641","forward_desc":"\u0646\u0642\u0644 \u0644\u0644\u0627\u0645\u0627\u0645","insertlayer_desc":"\u0625\u062f\u0631\u0627\u062c \u0637\u0628\u0642\u0629 \u062c\u062f\u064a\u062f\u0629"},save:{"save_desc":"\u062d\u0641\u0638","cancel_desc":"\u0625\u0644\u063a\u0627\u0621 \u0643\u0627\u0641\u0629 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a"},nonbreaking:{"nonbreaking_desc":"\u0625\u062f\u0631\u0627\u062c \u062d\u0631\u0641 \u0645\u0633\u0627\u0641\u0629 \u063a\u064a\u0631 \u0645\u0646\u0642\u0633\u0645\u0629"},iespell:{download:"\u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0627\u0645\u0644\u0627\u0626\u0649 \u063a\u064a\u0631 \u0645\u0631\u0643\u0628 \u0647\u0644 \u062a\u0631\u064a\u062f \u062a\u0631\u0643\u064a\u0628\u0647 \u0627\u0644\u0627\u0646","iespell_desc":"\u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0627\u0645\u0644\u0627\u0626\u0649"},advhr:{"advhr_desc":"\u0645\u0633\u0637\u0631\u0647 \u0627\u0641\u0642\u064a\u0647","delta_height":"","delta_width":""},emotions:{"delta_height":"","delta_width":"","emotions_desc":"\u0627\u0644\u0631\u0633\u0648\u0645 \u0627\u0644\u062a\u0639\u0628\u064a\u0631\u064a\u0647"},searchreplace:{"replace_desc":"\u0628\u062d\u062b/\u0627\u0633\u062a\u0628\u062f\u0627\u0644","delta_width":"\u0627\u0644\u062a\u063a\u064a\u0631 \u0641\u0649 \u0627\u0644\u0639\u0631\u0636","delta_height":"\u0627\u0644\u062a\u063a\u064a\u0631 \u0641\u0649 \u0627\u0644\u0625\u0631\u062a\u0641\u0627\u0639","search_desc":"\u0628\u062d\u062b"},advimage:{"image_desc":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0635\u0648\u0631\u0647","delta_width":"","delta_height":""},advlink:{"link_desc":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0631\u0627\u0628\u0637","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u062e\u0627\u0635\u064a\u0647","ins_desc":"\u0627\u0644\u0625\u0636\u0627\u0641\u0647","del_desc":"\u0627\u0644\u062d\u0630\u0641","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode":"\u0644\u0635\u0642 \u0627\u0644\u0622\u0646 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u0646\u0635 \u0627\u0644\u0639\u0627\u062f\u064a. \u0627\u0646\u0642\u0631 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 \u0644\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0627\u0644\u0648\u0636\u0639 \u0644\u0635\u0642 \u0627\u0644\u0639\u0627\u062f\u064a\u0629.","plaintext_mode_sticky":"\u0644\u0635\u0642 \u0627\u0644\u0622\u0646 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u0646\u0635 \u0627\u0644\u0639\u0627\u062f\u064a. \u0627\u0646\u0642\u0631 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 \u0644\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0627\u0644\u0648\u0636\u0639 \u0644\u0635\u0642 \u0627\u0644\u0639\u0627\u062f\u064a\u0629. \u0648\u0628\u0639\u062f \u0644\u0635\u0642 \u0634\u064a\u0621 \u064a\u062a\u0645 \u0625\u0631\u062c\u0627\u0639 \u0625\u0644\u0649 \u0648\u0636\u0639 \u0644\u0635\u0642 \u0627\u0644\u0639\u0627\u062f\u064a\u0629","selectall_desc":"\u062d\u062f\u062f \u0643\u0627\u0641\u0629","paste_word_desc":"\u0644\u0635\u0642 \u0645\u0646 \u0648\u0648\u0631\u062f","paste_text_desc":"\u0644\u0635\u0642 \u0643\u0646\u0635 \u0639\u0627\u062f\u064a"},"paste_dlg":{"word_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL+V )","text_linebreaks":"\u0627\u062d\u062a\u0641\u0638 \u0628\u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0623\u0633\u0637\u0631","text_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL+V )"},table:{"merge_cells_delta_height":"0","merge_cells_delta_width":"0","table_delta_height":"0","table_delta_width":"0","cellprops_delta_height":"0","cellprops_delta_width":"0","rowprops_delta_height":"0","rowprops_delta_width":"0",cell:"\u062e\u0644\u064a\u0629",col:"\u0639\u0627\u0645\u0648\u062f",row:"\u0635\u0641",del:"\u062d\u0630\u0641 \u062c\u062f\u0648\u0644","copy_row_desc":"\u0646\u0633\u062e \u0635\u0641 \u0645\u0646 \u062c\u062f\u0648\u0644","cut_row_desc":"\u0642\u0635 \u0635\u0641 \u0645\u0646 \u062c\u062f\u0648\u0644","paste_row_after_desc":"\u0644\u0635\u0642 \u0635\u0641 \u0627\u0644\u062c\u062f\u0648\u0644 \u0628\u0639\u062f","paste_row_before_desc":"\u0644\u0635\u0642 \u0635\u0641 \u0627\u0644\u062c\u062f\u0648\u0644 \u0642\u0628\u0644","props_desc":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u062c\u062f\u0648\u0644","cell_desc":"\u062e\u0635\u0627\u0626\u0635 \u062e\u0644\u064a\u0629 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","row_desc":"\u062e\u0635\u0627\u0626\u0635 \u0635\u0641 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","merge_cells_desc":"\u062f\u0645\u062c \u062e\u0644\u0627\u064a\u0627 \u062c\u062f\u0648\u0644","split_cells_desc":"\u0627\u0646\u0642\u0633\u0627\u0645 \u062e\u0644\u0627\u064a\u0627 \u0627\u0644\u062c\u062f\u0648\u0644 \u0627\u0644\u0645\u062f\u0645\u062c\u0629","delete_col_desc":"\u0625\u0632\u0627\u0644\u0629 \u0639\u0645\u0648\u062f","col_after_desc":"\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0628\u0639\u062f","col_before_desc":"\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0642\u0628\u0644","delete_row_desc":"\u062d\u0630\u0641 \u0635\u0641","row_after_desc":"\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0628\u0639\u062f","row_before_desc":"\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0642\u0628\u0644",desc:"\u0625\u062f\u0631\u0627\u062c \u062c\u062f\u0648\u0644 \u062c\u062f\u064a\u062f"},autosave:{"warning_message":"\u0633\u062a\u0641\u0642\u062f \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0641\u0649 \u062d\u0627\u0644\u0629 \u0627\u0644\u0625\u0633\u062a\u0639\u0627\u062f\u0647 \u0645\u0646 \u0627\u0644\u062d\u0641\u0638 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649.\n\n\u0647\u0644 \u0627\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0627\u0646\u0643 \u062a\u0631\u064a\u062f \u0627\u0644\u0625\u0633\u062a\u0639\u0627\u062f\u0647 \u0645\u0646 \u0627\u0644\u062d\u0641\u0638 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649\u061f.","restore_content":"\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0645\u0646 \u0627\u0644\u062d\u0641\u0638 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649.","unload_msg":"\u0633\u064a\u062a\u0645 \u0641\u0642\u062f \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0625\u0630\u0627 \u062a\u0631\u0643\u062a \u0627\u0644\u0635\u0641\u062d\u0647"},fullscreen:{desc:"\u062a\u0628\u062f\u064a\u0644 \u0648\u0636\u0639 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629"},media:{"delta_height":"0","delta_width":"0",edit:"\u0639\u062f\u0644 \u0645\u064a\u062f\u064a\u0627",desc:"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0645\u064a\u062f\u064a\u0627"},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"\u0627\u0636\u0641 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0627\u0644\u062c\u0627\u0647\u0632\u0647"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"\u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0625\u0645\u0644\u0627\u0626\u064a Toggle",menu:"\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0625\u0645\u0644\u0627\u0626\u064a","ignore_word":"\u062a\u062c\u0627\u0647\u0644 \u0627\u0644\u0643\u0644\u0645\u0629","ignore_words":"\u062a\u062c\u0627\u0647\u0644 \u0627\u0644\u0643\u0644",langs:"\u0627\u0644\u0644\u063a\u0627\u062a",wait:"\u0627\u0644\u0631\u062c\u0627\u0621 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631",sug:"\u0627\u0644\u0625\u0642\u062a\u0631\u0627\u062d\u0627\u062a","no_sug":"\u0644\u0627 \u064a\u0648\u062c\u062f \u0625\u0642\u062a\u0631\u0627\u062d\u0627\u062a","no_mpell":"\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0623\u062e\u0637\u0627\u0621 \u0641\u064a \u0627\u0644\u062a\u0647\u062c\u0626\u0629","learn_word":"Learn word"},pagebreak:{desc:"\u0627\u0636\u0641 \u0641\u0627\u0635\u0644 \u0635\u0641\u062d\u0647"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"\u0632\u064a\u062a\u064a \u062f\u0627\u0643\u0646","993300":"\u0628\u0631\u062a\u0642\u0627\u0644 \u0645\u062d\u0631\u0648\u0642","000000":"\u0623\u0633\u0648\u062f","003300":"\u0623\u062e\u0636\u0631 \u062f\u0627\u0643\u0646","003366":"\u0623\u0632\u0631\u0642 \u062f\u0627\u0643\u0646","000080":"\u0628\u062d\u0631\u064a","333399":"\u0646\u064a\u0644\u064a","333333":"\u0631\u0645\u0627\u062f\u064a \u062f\u0627\u0643\u0646 \u062c\u062f\u0627","800000":"\u0643\u0633\u062a\u0646\u0627\u0626\u064a",FF6600:"\u0628\u0631\u062a\u0642\u0627\u0644\u064a","808000":"\u0632\u064a\u062a\u064a","008000":"\u0623\u062e\u0636\u0631","008080":"\u0623\u0632\u0631\u0642 \u0623\u062e\u0636\u0631","0000FF":"\u0623\u0632\u0631\u0642","666699":"\u0631\u0645\u0627\u062f\u064a \u0623\u0632\u0631\u0642","808080":"\u0631\u0645\u0627\u062f\u064a",FF0000:"\u0623\u062d\u0645\u0631",FF9900:"\u0643\u0647\u0631\u0645\u0627\u0646\u064a","99CC00":"\u0623\u0635\u0641\u0631 \u0623\u062e\u0636\u0631","339966":"\u0627\u062e\u0636\u0631 \u0628\u062d\u0631\u064a","33CCCC":"\u0641\u064a\u0631\u0648\u0632\u064a","3366FF":"\u0627\u0644\u0623\u0632\u0631\u0642 \u0627\u0644\u0645\u0644\u0643\u064a","800080":"\u0623\u0631\u062c\u0648\u0627\u0646\u064a","999999":"\u0631\u0645\u0627\u062f\u064a \u0645\u062a\u0648\u0633\u0637",FF00FF:"\u0641\u0648\u0634\u064a",FFCC00:"\u0630\u0647\u0628\u064a",FFFF00:"\u0623\u0635\u0641\u0631","00FF00":"\u0644\u064a\u0645\u0648\u0646\u064a","00FFFF":"\u0645\u0627\u0626\u064a","00CCFF":"\u0633\u0645\u0627\u0648\u064a","993366":"\u0628\u0646\u064a",C0C0C0:"\u0641\u0636\u064a",FF99CC:"\u0632\u0647\u0631\u064a",FFCC99:"\u062e\u0648\u062e\u064a",FFFF99:"\u0623\u0635\u0641\u0631 \u0645\u0636\u064a\u0621",CCFFCC:"\u0623\u062e\u0636\u0631 \u0634\u0627\u062d\u0628",CCFFFF:"\u0633\u0645\u0627\u0648\u064a \u0634\u0627\u062d\u0628","99CCFF":"\u0633\u0645\u0627\u0648\u064a \u0645\u0636\u064a\u0621",CC99FF:"\u0628\u0646\u0641\u0633\u062c\u064a",FFFFFF:"\u0623\u0628\u064a\u0636"},aria:{"rich_text_area":"\u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u062a\u0639\u062f\u064a\u0644"},wordcount:{words:"\u0639\u062f\u062f \u0627\u0644\u0643\u0644\u0645\u0627\u062a :"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/az.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/az.js
new file mode 100644
index 000000000..2de458701
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/az.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({az:{common:{"more_colors":"Daha \u00e7ox r\u0259ng","invalid_data":"X\u0259ta: Q\u0131rm\u0131z\u0131 il\u0259 qeyd edilmi\u015fl\u0259r s\u0259hv daxil edilib.","popup_blocked":"Ba\u011f\u0131\u015flay\u0131n, lakin sizin \u00fcz\u0259 \u00e7\u0131xan p\u0259nc\u0259r\u0259l\u0259riniz funksiya p\u0259nc\u0259r\u0259sinin qar\u015f\u0131s\u0131n\u0131 ald\u0131. G\u0259r\u0259k \u00fcz\u0259 \u00e7\u0131xan p\u0259nc\u0259r\u0259l\u0259rin bloklama nizamlamas\u0131n\u0131 l\u0259\u011fv ed\u0259siniz ki, al\u0259td\u0259n tam istifad\u0259 ed\u0259 bil\u0259siniz.","clipboard_no_support":"Hal-haz\u0131rda b\u0259l\u0259d\u00e7iniz t\u0259r\u0259find\u0259n d\u0259st\u0259kl\u0259nmir. Klaviatura q\u0131saldmas\u0131ndan istifad\u0259 edin.","clipboard_msg":"Kopyalama/\u018flav\u0259 et Mozilla v\u0259 Firefox-da i\u015fl\u0259mir.\nN\u0259 ba\u015f verdiyi haqda daha \u0259trafl\u0131 \u00f6yr\u0259nm\u0259k ist\u0259yirsiniz?","not_set":"-- M\u00fc\u0259yy\u0259n edilm\u0259yib --","class_name":"Sinif",browse:"G\u00f6zd\u0259n ke\u00e7ir",close:"Ba\u011fla",cancel:"L\u0259\u011fv et",update:"Yenil\u0259",insert:"\u018flav\u0259 et",apply:"T\u0259tbiq et","edit_confirm":"Siz haz\u0131rki m\u0259tn sah\u0259si \u00fc\u00e7\u00fcn WYSIWYG rejimi istifad\u0259 etm\u0259k ist\u0259yirsiniz?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Tam",right:"Sa\u011fa",center:"M\u0259rk\u0259z il\u0259",left:"Sola",align:"Tarazla\u015fd\u0131r"},insertdatetime:{"day_short":"B,Be,\u00c7a,\u00c7,Ca,C,\u015e,B","day_long":"Bazar,Bazar ert\u0259si,\u00c7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131,\u00c7\u0259r\u015f\u0259nb\u0259,C\u00fcm\u0259 ax\u015fam\u0131,C\u00fcm\u0259,\u015e\u0259nb\u0259,Bazar","months_short":"Yan,Fev,Mar,Apr,May,\u0130yu,\u0130yl,Avq,Sen,Okt,Noy,Dek","months_long":"Yanvar,Fevral,Mart,Aprel,May,\u0130yun,\u0130yul,Avqust,Sentyabr,Oktyabr,Noyabr,Dekabr","inserttime_desc":"Vaxt \u0259lav\u0259 et","insertdate_desc":"Tarix \u0259lav\u0259 et","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"\u00c7ap et"},preview:{"preview_desc":"\u0130lkin bax\u0131\u015f"},directionality:{"rtl_desc":"\u0130stiqam\u0259t sa\u011fdan-sola","ltr_desc":"\u0130stiqam\u0259t soldan-sa\u011fa"},layer:{content:"Yeni qat...","absolute_desc":"M\u00fctl\u0259q m\u00f6vqeni yand\u0131r/s\u00f6nd\u00fcr","backward_desc":"Geri k\u00f6\u00e7\u00fcr","forward_desc":"\u0130r\u0259li k\u00f6\u00e7\u00fcr","insertlayer_desc":"Yeni qat \u0259lav\u0259 et"},save:{"save_desc":"Yadda saxla","cancel_desc":"B\u00fct\u00fcn d\u0259yi\u015fiklikl\u0259ri l\u0259\u011fv et"},nonbreaking:{"nonbreaking_desc":"Q\u0131r\u0131lmaz bo\u015fluq \u0259lav\u0259 et"},iespell:{download:"ieSpell a\u015fkar edilm\u0259yib. Y\u00fckl\u0259nilsin?","iespell_desc":"Orfoqrafiyan\u0131 yoxla"},advhr:{"advhr_desc":"\u00dcf\u00fcqi x\u0259tt","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smayllar","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Axtar/D\u0259yi\u015f","search_desc":"Axtar","delta_width":"","delta_height":""},advimage:{"image_desc":"\u015e\u0259kli \u0259lav\u0259/redakt\u0259 et","delta_width":"","delta_height":""},advlink:{"link_desc":"Ke\u00e7idi \u0259lav\u0259/redakt\u0259 et","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Atribut \u0259lav\u0259/redakt\u0259 et","ins_desc":"\u018flav\u0259 edilmi\u015f m\u0259tn","del_desc":"Silinmi\u015f m\u0259tn","acronym_desc":"Akronim","abbr_desc":"Abbreviatura","cite_desc":"Sitat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_width":"35",desc:"CSS stili redakt\u0259 et","delta_height":""},paste:{"selectall_desc":"Ham\u0131s\u0131n\u0131 se\u00e7","paste_word_desc":"Word-d\u0259n \u0259lav\u0259 et","paste_text_desc":"Sad\u0259 m\u0259tn kimi \u0259lav\u0259 et","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"P\u0259nc\u0259r\u0259y\u0259 s\u00f6z \u0259lav\u0259 etm\u0259k \u00fc\u00e7\u00fcn CTRL+V klavi\u015f birl\u0259\u015fm\u0259sini istifad\u0259 edin.","text_linebreaks":"S\u0259tr s\u0131nmalar\u0131n\u0131 saxla","text_title":"P\u0259nc\u0259r\u0259y\u0259 m\u0259tn \u0259lav\u0259 etm\u0259k \u00fc\u00e7\u00fcn CTRL+V klavi\u015f birl\u0259\u015fm\u0259sini istifad\u0259 edin."},table:{cell:"\u00d6z\u0259k",col:"S\u00fctun",row:"S\u0259tr",del:"C\u0259dv\u0259li sil","copy_row_desc":"S\u0259tri kopyala","cut_row_desc":"S\u0259tri k\u0259s","paste_row_after_desc":"S\u0259tr c\u0259dv\u0259lini sonra \u0259lav\u0259 et:","paste_row_before_desc":"S\u0259tr c\u0259dv\u0259lini \u0259vv\u0259l \u0259lav\u0259 et:","props_desc":"C\u0259dv\u0259l x\u00fcsusiyy\u0259tl\u0259ri","cell_desc":"\u00d6z\u0259k x\u00fcsusiyy\u0259tl\u0259ri","row_desc":"S\u0259tr x\u00fcsusiyy\u0259tl\u0259ri","merge_cells_desc":"\u00d6z\u0259kl\u0259ri s\u00fcz","split_cells_desc":"S\u00fcz\u00fclm\u00fc\u015f \u00f6z\u0259kl\u0259ri ay\u0131r","delete_col_desc":"S\u00fctunu sil","col_after_desc":"S\u00fctunu sonra \u0259lav\u0259 et:","col_before_desc":"S\u00fctunu \u0259vv\u0259l \u0259lav\u0259 et:","delete_row_desc":"S\u0259tri sil","row_after_desc":"S\u0259tri sonra \u0259vv\u0259l et:","row_before_desc":"S\u0259tri \u0259vv\u0259l \u0259lav\u0259 et:",desc:"Yeni c\u0259dv\u0259l \u0259lav\u0259 et","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u018fg\u0259r s\u0259hif\u0259d\u0259n gets\u0259niz b\u00fct\u00fcn d\u0259yi\u015fiklikl\u0259r itiril\u0259c\u0259k.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Tamekran rejimini yand\u0131r/s\u00f6nd\u00fcr"},media:{edit:"Mediya-obyekti redakt\u0259 et",desc:"mediya-obyekti \u0259lav\u0259/redakt\u0259 et","delta_height":"","delta_width":""},fullpage:{desc:"S\u0259n\u0259d nizamlamalar\u0131","delta_width":"","delta_height":""},template:{desc:"\u018fvv\u0259ld\u0259n m\u00fc\u0259yy\u0259n edil\u0259n \u015fablon daxil et"},visualchars:{desc:"Vizual idar\u0259 xarakterl\u0259rini yand\u0131r/s\u00f6nd\u00fcr."},spellchecker:{desc:"Orfoqraf\u0131 yoxla",menu:"Orfoqrafiya nizamlamas\u0131n\u0131","ignore_word":"S\u00f6zl\u00fc iqnor et","ignore_words":"H\u0259r \u015feyi iqnor et",langs:"Dill\u0259r",wait:"Z\u0259hm\u0259t olmasa, g\u00f6zl\u0259yin...",sug:"Variantlar","no_sug":"Variantlar yoxdur","no_mpell":"X\u0259ta a\u015fkar edilm\u0259di.","learn_word":"Learn word"},pagebreak:{desc:"S\u0259hif\u0259 b\u00f6l\u0259nini \u0259lav\u0259 et."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/be.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/be.js
new file mode 100644
index 000000000..562beeaad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/be.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({be:{common:{"more_colors":"\u0411\u043e\u043b\u044c\u0448 \u043a\u043e\u043b\u0435\u0440\u0430\u045e...","invalid_data":"\u041f\u0430\u043c\u044b\u043b\u043a\u0430: \u0410\u0434\u0437\u043d\u0430\u0447\u0430\u043d\u044b\u044f \u0447\u044b\u0440\u0432\u043e\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u044d\u043d\u043d\u0456 \u045e\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u043d\u044f\u043f\u0440\u0430\u0432\u0456\u043b\u044c\u043d\u0430.","popup_blocked":"\u041f\u0440\u0430\u0431\u0430\u0447\u0446\u0435, \u0430\u043b\u0435 \u0432\u0430\u0448 \u0431\u043b\u0430\u043a\u0456\u0440\u043e\u045e\u0448\u0447\u044b\u043a \u0443\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0447\u044b\u0445 \u0432\u043e\u043a\u043d\u0430\u045e \u0437\u0430\u0431\u043b\u0430\u043a\u0456\u0440\u0430\u0432\u0430\u045e \u0430\u043a\u043d\u043e, \u044f\u043a\u043e\u0435 \u043f\u0440\u0430\u0434\u0441\u0442\u0430\u045e\u043b\u044f\u0435 \u043d\u0435\u0430\u0431\u0445\u043e\u0434\u043d\u044b\u044f \u0444\u0443\u043d\u043a\u0446\u044b\u0456. \u0412\u0430\u043c \u0442\u0440\u044d\u0431\u0430 \u0430\u0434\u043a\u043b\u044e\u0447\u044b\u0446\u044c \u0431\u043b\u0430\u043a\u0456\u0440\u0430\u0432\u0430\u043d\u043d\u0435 \u045e\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0447\u044b\u0445 \u0432\u043e\u043a\u043d\u0430\u045e \u043d\u0430 \u0433\u044d\u0442\u044b\u043c \u0441\u0430\u0439\u0446\u0435, \u043a\u0430\u0431 \u0443 \u0446\u0430\u043b\u043a\u0430\u043c \u0441\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0446\u0446\u0430 \u0433\u044d\u0442\u0430\u0439 \u043f\u0440\u044b\u043b\u0430\u0434\u0430\u0439.","clipboard_no_support":"\u0423 \u0446\u044f\u043f\u0435\u0440\u0430\u0448\u043d\u0456 \u0447\u0430\u0441 \u043d\u0435 \u043f\u0430\u0434\u0442\u0440\u044b\u043c\u043b\u0456\u0432\u0430\u0435\u0446\u0446\u0430 \u0432\u0430\u0448\u044b\u043c \u0431\u0440\u0430\u045e\u0437\u0435\u0440\u0430\u043c, \u0432\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0439\u0446\u0435 \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u0456 \u043a\u043b\u0430\u0432\u0456\u0448 \u0437\u0430\u043c\u0435\u0441\u0442 \u0433\u044d\u0442\u0430\u0433\u0430.","clipboard_msg":"\u041a\u0430\u043f\u0456\u0440\u0430\u0432\u0430\u043d\u043d\u0435, \u0432\u044b\u0440\u0430\u0437\u043a\u0430 \u0456 \u0443\u0441\u0442\u0430\u045e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0430\u0446\u0443\u044e\u0446\u044c \u045e Mozilla \u0456 Firefox. \u0416\u0430\u0434\u0430\u0435\u0446\u0435 \u0430\u0442\u0440\u044b\u043c\u0430\u0446\u044c \u0431\u043e\u043b\u044c\u0448 \u043f\u0430\u0434\u0440\u0430\u0431\u044f\u0437\u043d\u0443\u044e \u0456\u043d\u0444\u0430\u0440\u043c\u0430\u0446\u044b\u044e?","not_set":"-- \u041d\u0435 \u045e\u0441\u0442\u0430\u043b\u044f\u0432\u0430\u043d\u0430 --","class_name":"\u041a\u043b\u0430\u0441",browse:"\u041f\u0440\u0430\u0433\u043b\u0435\u0434\u0437\u0435\u0446\u044c",close:"\u0417\u0430\u0447\u044b\u043d\u0456\u0446\u044c",cancel:"\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c",update:"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c",insert:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c",apply:"\u0423\u0436\u044b\u0446\u044c","edit_confirm":"\u0412\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0432\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0446\u044c \u0434\u043b\u044f \u0433\u044d\u0442\u0430\u0439 \u0442\u044d\u043a\u0441\u0442\u0430\u0432\u0430\u0439 \u0432\u043e\u0431\u043b\u0430\u0441\u0446\u0456 \u0440\u044d\u0436\u044b\u043c WYSIWYG?","invalid_data_number":"{#field} \u043f\u0430\u0437\u043d\u0430\u0447\u0446\u0435 \u043b\u0456\u043a","invalid_data_min":"{#field} \u043f\u0430\u0437\u043d\u0430\u0447\u0446\u0435 \u043b\u0456\u043a \u0431\u043e\u043b\u044c\u0448\u044b \u0437\u0430 {#min}","invalid_data_size":"{#field} \u043f\u0430\u0437\u043d\u0430\u0447\u0446\u0435 \u043b\u0456\u043a \u0430\u0431\u043e \u043f\u0440\u0430\u0446\u044d\u043d\u0442",value:"(\u0437\u043d\u0430\u0447\u044d\u043d\u043d\u0435)"},contextmenu:{full:"\u041f\u0430 \u0448\u044b\u0440\u044b\u043d\u0456",right:"\u041f\u0430 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u0440\u0430\u0456",center:"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b",left:"\u041f\u0430 \u043b\u0435\u0432\u044b\u043c \u043a\u0440\u0430\u0456",align:"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435"},insertdatetime:{"day_short":"\u041d\u0434,\u041f\u043d,\u0410\u0442,\u0421\u0440,\u0427\u0446,\u041f\u0442,\u0421\u0431,\u041d\u0434","day_long":"\u041d\u044f\u0434\u0437\u0435\u043b\u044f,\u041f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a,\u0410\u045e\u0442\u043e\u0440\u0430\u043a,\u0421\u0435\u0440\u0430\u0434\u0430,\u0427\u0430\u0446\u0432\u0435\u0440,\u041f\u044f\u0442\u043d\u0456\u0446\u0430,\u0421\u0443\u0431\u043e\u0442\u0430,\u041d\u044f\u0434\u0437\u0435\u043b\u044f","months_short":"\u0421\u0442\u0443,\u041b\u044e\u0442,\u0421\u0430\u043a,\u041a\u0440\u0430,\u041c\u0430\u0439,\u0427\u044d\u0440,\u041b\u0456\u043f,\u0410\u045e\u0433,\u0412\u0435\u0440,\u041a\u0430\u0441,\u041b\u0456\u0441,\u0421\u043d\u0435","months_long":"\u0421\u0442\u0443\u0434\u0437\u0435\u043d\u044c,\u041b\u044e\u0442\u044b,\u0421\u0430\u043a\u0430\u0432\u0456\u043a,\u041a\u0440\u0430\u0441\u0430\u0432\u0456\u043a,\u041c\u0430\u0439,\u0427\u044d\u0440\u0432\u0435\u043d\u044c,\u041b\u0456\u043f\u0435\u043d\u044c,\u0410\u045e\u0433\u0443\u0441\u0442,\u0412\u0435\u0440\u0430\u0441\u0435\u043d\u044c,\u041a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a,\u041b\u0456\u0441\u0442\u0430\u043f\u0430\u0434,\u0421\u043d\u0435\u0436\u0430\u043d\u044c","inserttime_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0447\u0430\u0441","insertdate_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0434\u0430\u0442\u0443","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"\u0414\u0440\u0443\u043a"},preview:{"preview_desc":"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u0456 \u043f\u0440\u0430\u0433\u043b\u044f\u0434"},directionality:{"rtl_desc":"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430","ltr_desc":"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u0437\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430"},layer:{content:"\u041d\u043e\u0432\u044b \u043f\u043b\u0430\u0441\u0442\u2026","absolute_desc":"\u0410\u0431\u0441\u0430\u043b\u044e\u0442\u043d\u0430\u0435 \u043f\u0430\u0437\u0456\u0446\u044b\u044f\u043d\u0430\u0432\u0430\u043d\u043d\u0435","backward_desc":"\u041f\u0435\u0440\u0430\u043d\u0435\u0441\u0446\u0456 \u043d\u0430\u0437\u0430\u0434","forward_desc":"\u041f\u0435\u0440\u0430\u043d\u0435\u0441\u0446\u0456 \u043d\u0430\u043f\u0435\u0440\u0430\u0434","insertlayer_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u043d\u043e\u0432\u044b \u043f\u043b\u0430\u0441\u0442"},save:{"save_desc":"\u0417\u0430\u0445\u0430\u0432\u0430\u0446\u044c","cancel_desc":"\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c \u0443\u0441\u0435 \u0437\u043c\u0435\u043d\u044b"},nonbreaking:{"nonbreaking_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u043d\u0435\u043f\u0430\u0440\u044b\u045e\u043d\u044b \u043f\u0440\u0430\u0431\u0435\u043b"},iespell:{download:"ieSpell \u043d\u0435 \u0432\u044b\u044f\u045e\u043b\u0435\u043d\u044b. \u0423\u0441\u0442\u0430\u043b\u044f\u0432\u0430\u0446\u044c?","iespell_desc":"\u041f\u0440\u0430\u0432\u0435\u0440\u044b\u0446\u044c \u0430\u0440\u0444\u0430\u0433\u0440\u0430\u0444\u0456\u044e"},advhr:{"advhr_desc":"\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0456\u043d\u0456\u044f","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0421\u043c\u0430\u0439\u043b\u0456\u043a\u0456","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456/\u0417\u0430\u043c\u044f\u043d\u0456\u0446\u044c","search_desc":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0430\u043b\u044e\u043d\u0430\u043a","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","delta_height":""},xhtmlxtras:{"attribs_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0430\u0442\u0440\u044b\u0431\u0443\u0442\u044b","ins_desc":"\u0414\u0430\u0434\u0430\u0434\u0437\u0435\u043d\u044b \u0442\u044d\u043a\u0441\u0442","del_desc":"\u0412\u044b\u0434\u0430\u043b\u0435\u043d\u044b \u0442\u044d\u043a\u0441\u0442","acronym_desc":"\u0410\u043a\u0440\u043e\u043d\u0456\u043c","abbr_desc":"\u0410\u0431\u0440\u044d\u0432\u0456\u044f\u0442\u0443\u0440\u0430","cite_desc":"\u0426\u044b\u0442\u0430\u0432\u0430\u043d\u043d\u0435","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_width":"35",desc:"\u0420\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u0442\u044b\u043b\u044c CSS","delta_height":""},paste:{"plaintext_mode":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0437\u0430\u0440\u0430\u0437 \u0443 \u0440\u044d\u0436\u044b\u043c\u0435 \u0437\u0432\u044b\u0447\u0430\u0439\u043d\u0430\u0433\u0430 \u0442\u044d\u043a\u0441\u0442\u0443. \u041d\u0430\u0446\u0456\u0441\u043d\u0456\u0446\u0435 \u0433\u044d\u0442\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0430\u043a\u043b\u044e\u0447\u044d\u043d\u043d\u044f \u043d\u0430\u0437\u0430\u0434 \u0443 \u0437\u0432\u044b\u0447\u0430\u0439\u043d\u044b \u0440\u044d\u0436\u044b\u043c \u045e\u0441\u0442\u0430\u045e\u043a\u0456.","plaintext_mode_sticky":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0437\u0430\u0440\u0430\u0437 \u0443 \u0440\u044d\u0436\u044b\u043c\u0435 \u0437\u0432\u044b\u0447\u0430\u0439\u043d\u0430\u0433\u0430 \u0442\u044d\u043a\u0441\u0442\u0443. \u041d\u0430\u0446\u0456\u0441\u043d\u0456\u0446\u0435 \u0433\u044d\u0442\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0430\u043a\u043b\u044e\u0447\u044d\u043d\u043d\u044f \u043d\u0430\u0437\u0430\u0434 \u0443 \u0437\u0432\u044b\u0447\u0430\u0439\u043d\u044b \u0440\u044d\u0436\u044b\u043c \u045e\u0441\u0442\u0430\u045e\u043a\u0456. \u041f\u0430\u0441\u043b\u044f \u045e\u0441\u0442\u0430\u045e\u043a\u0456 \u0412\u044b \u0432\u0435\u0440\u043d\u0435\u0446\u0435\u0441\u044f \u045e \u0437\u0432\u044b\u0447\u0430\u0439\u043d\u044b \u0440\u044d\u0436\u044b\u043c \u045e\u0441\u0442\u0430\u045e\u043a\u0456.","selectall_desc":"\u0412\u044b\u043b\u0443\u0447\u044b\u0446\u044c \u0443\u0441\u0451","paste_word_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0437 Word","paste_text_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u044f\u043a \u043f\u0440\u043e\u0441\u0442\u044b \u0442\u044d\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0439\u0446\u0435 \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u0435 \u043a\u043b\u0430\u0432\u0456\u0448 CTRL+V \u043a\u0430\u0431 \u0443\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0442\u044d\u043a\u0441\u0442 \u0443 \u0430\u043a\u043d\u043e.","text_linebreaks":"\u0417\u0430\u0445\u043e\u045e\u0432\u0430\u0446\u044c \u043f\u0430\u0440\u044b\u0432\u044b \u0440\u0430\u0434\u043a\u043e\u045e","text_title":"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0439\u0446\u0435 \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u0435 \u043a\u043b\u0430\u0432\u0456\u0448 CTRL+V \u043a\u0430\u0431 \u0443\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0442\u044d\u043a\u0441\u0442 \u0443 \u0430\u043a\u043d\u043e."},table:{cell:"\u042f\u0447\u044d\u0439\u043a\u0430",col:"\u0421\u043b\u0443\u043f\u043e\u043a",row:"\u0420\u0430\u0434\u043e\u043a",del:"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0442\u0430\u0431\u043b\u0456\u0446\u0443","copy_row_desc":"\u041a\u0430\u043f\u0456\u0440\u0430\u0432\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a","cut_row_desc":"\u0412\u044b\u0440\u0430\u0437\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a","paste_row_after_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u043d\u0456\u0437\u0443","paste_row_before_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u0432\u0435\u0440\u0445\u0443","props_desc":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0442\u0430\u0431\u043b\u0456\u0446\u044b","cell_desc":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u044f\u0447\u044d\u0439\u043a\u0456","row_desc":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0440\u0430\u0434\u043a\u0430","merge_cells_desc":"\u0421\u043a\u043b\u0435\u0456\u0446\u044c \u044f\u0447\u044d\u0439\u043a\u0456","split_cells_desc":"\u0420\u0430\u0437\u0431\u0456\u0446\u044c \u044f\u0447\u044d\u0439\u043a\u0443","delete_col_desc":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a","col_after_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a \u043f\u0430\u0441\u043b\u044f","col_before_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a \u043f\u0435\u0440\u0430\u0434","delete_row_desc":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a","row_after_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u043f\u0430\u0441\u043b\u044f","row_before_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u043f\u0435\u0440\u0430\u0434",desc:"\u0423\u0441\u0442\u0430\u045e\u043b\u044f\u0435 \u043d\u043e\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0456\u0446\u0443","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u0423\u0441\u0435 \u0437\u0440\u043e\u0431\u043b\u0435\u043d\u044b\u044f \u0437\u043c\u0435\u043d\u044b \u0431\u0443\u0434\u0443\u0446\u044c \u0437\u0433\u0443\u0431\u043b\u0435\u043d\u044b\u044f.\n\n\u041f\u0440\u0430\u0446\u044f\u0433\u043d\u0443\u0446\u044c \u0430\u0434\u043d\u0430\u045e\u043b\u0435\u043d\u043d\u0435 \u0430\u045e\u0442\u0430\u043c\u0430\u0442\u044b\u0447\u043d\u0430\u0433\u0430 \u0437\u0430\u0445\u0430\u0432\u0430\u043d\u043d\u044f?","restore_content":"\u0410\u0434\u043d\u0430\u0432\u0456\u0446\u044c \u0430\u045e\u0442\u0430\u043c\u0430\u0442\u044b\u0447\u043d\u0430\u0435 \u0437\u0430\u0445\u0430\u0432\u0430\u043d\u043d\u0435","unload_msg":"\u0417\u0430\u043d\u0435\u0441\u0435\u043d\u044b\u044f \u0437\u043c\u0435\u043d\u044b \u0431\u0443\u0434\u0443\u0446\u044c \u0441\u0442\u0440\u0430\u0447\u0430\u043d\u044b\u044f, \u043a\u0430\u043b\u0456 \u0412\u044b \u0441\u044b\u0434\u0437\u0435\u0446\u0435 \u0437 \u0433\u044d\u0442\u0430\u0439 \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0456."},fullscreen:{desc:"\u0423\u043b\u0443\u0447\u044b\u0446\u044c/\u0432\u044b\u043a\u043b\u044e\u0447\u044b\u0446\u044c \u043f\u043e\u045e\u043d\u0430\u044d\u043a\u0440\u0430\u043d\u043d\u044b \u0440\u044d\u0436\u044b\u043c"},media:{edit:"\u0420\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0435\u0434\u044b\u044f-\u0430\u0431\'\u0435\u043a\u0442",desc:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0435\u0434\u044b\u044f-\u0430\u0431\'\u0435\u043a\u0442","delta_height":"","delta_width":""},fullpage:{desc:"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0434\u0430\u043a\u0443\u043c\u0435\u043d\u0442\u0443","delta_width":"","delta_height":""},template:{desc:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0448\u0430\u0431\u043b\u043e\u043d"},visualchars:{desc:"\u0423\u0441\u0435 \u0437\u043d\u0430\u043a\u0456"},spellchecker:{desc:"\u041f\u0440\u0430\u0432\u0435\u0440\u044b\u0446\u044c \u0430\u0440\u0444\u0430\u0433\u0440\u0430\u0444\u0456\u044e",menu:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u0430\u0432\u0435\u0440\u043a\u0456 \u0430\u0440\u0444\u0430\u0433\u0440\u0430\u0444\u0456\u0456","ignore_word":"\u0406\u0433\u043d\u0430\u0440\u0430\u0432\u0430\u0446\u044c \u0441\u043b\u043e\u0432\u0430","ignore_words":"\u0406\u0433\u043d\u0430\u0440\u0430\u0432\u0430\u0446\u044c \u0443\u0441\u0451",langs:"\u041c\u043e\u0432\u044b",wait:"\u041a\u0430\u043b\u0456 \u043b\u0430\u0441\u043a\u0430, \u043f\u0430\u0447\u0430\u043a\u0430\u0439\u0446\u0435...",sug:"\u0412\u0430\u0440\u044b\u044f\u043d\u0442\u044b","no_sug":"\u041d\u044f\u043c\u0430 \u0432\u0430\u0440\u044b\u044f\u043d\u0442\u0430\u045e","no_mpell":"\u041f\u0430\u043c\u044b\u043b\u0430\u043a \u043d\u0435 \u0432\u044b\u044f\u045e\u043b\u0435\u043d\u0430.","learn_word":"\u0417\u0430\u043f\u043e\u043c\u043d\u0456\u0446\u044c \u0441\u043b\u043e\u0432\u0430"},pagebreak:{desc:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0437\u0440\u044b\u045e \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0456."},advlist:{types:"\u0421\u0456\u043c\u0432\u0430\u043b\u044b",def:"C\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u044f","lower_alpha":"\u041c\u0430\u043b\u044b\u044f \u043b\u0430\u0446\u0456\u043d\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b","lower_greek":"\u041c\u0430\u043b\u044b\u044f \u0433\u0440\u044d\u0447\u0430\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b","lower_roman":"\u041c\u0430\u043b\u044b\u044f \u0440\u044b\u043c\u0441\u043a\u0456\u044f \u043b\u0456\u0447\u0431\u044b","upper_alpha":"\u0412\u044f\u043b\u0456\u043a\u0456\u044f \u043b\u0430\u0446\u0456\u043d\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b","upper_roman":"\u0412\u044f\u043b\u0456\u043a\u0456\u044f \u0440\u044b\u043c\u0441\u043a\u0456\u044f \u043b\u0456\u0447\u0431\u044b",circle:"\u0410\u043a\u0440\u0443\u0436\u043d\u0430\u0441\u0446\u044c",disc:"\u041a\u0440\u0443\u0433",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442"},colors:{"333300":"\u0426\u0451\u043c\u043d\u0430-\u0430\u043b\u0456\u045e\u043a\u0430\u0432\u044b","993300":"\u0426\u0430\u0433\u043b\u044f\u043d\u044b","000000":"\u0427\u043e\u0440\u043d\u044b","003300":"\u0426\u0451\u043c\u043d\u0430-\u0437\u044f\u043b\u0451\u043d\u044b","003366":"\u0426\u0451\u043c\u043d\u0430-\u0431\u043b\u0430\u043a\u0456\u0442\u043d\u044b","000080":"\u0426\u0451\u043c\u043d\u0430-\u0441\u0456\u043d\u0456","333399":"\u0406\u043d\u0434\u044b\u0433\u0430","333333":"\u0412\u0435\u043b\u044c\u043c\u0456 \u0446\u0451\u043c\u043d\u0430-\u0448\u044d\u0440\u044b","800000":"\u0426\u0451\u043c\u043d\u0430-\u0431\u0430\u0440\u0434\u043e\u0432\u044b",FF6600:"\u0410\u0440\u0430\u043d\u0436\u0430\u0432\u044b","808000":"\u0410\u043b\u0456\u045e\u043a\u0430\u0432\u044b","008000":"\u0417\u044f\u043b\u0451\u043d\u044b","008080":"\u0421\u0456\u043d\u0435-\u0437\u044f\u043b\u0451\u043d\u044b","0000FF":"\u0421\u0456\u043d\u0456","666699":"\u0428\u044d\u0440\u0430-\u0431\u043b\u0430\u043a\u0456\u0442\u043d\u044b","808080":"\u0428\u044d\u0440\u044b",FF0000:"\u0427\u044b\u0440\u0432\u043e\u043d\u044b",FF9900:"\u0411\u0443\u0440\u0448\u0442\u044b\u043d\u0430\u0432\u044b","99CC00":"\u0416\u043e\u045e\u0442\u0430-\u0437\u044f\u043b\u0451\u043d\u044b","339966":"\u0411\u0456\u0440\u0443\u0437\u043e\u0432\u044b","33CCCC":"\u0411\u043b\u0430\u043a\u0456\u0442\u043d\u044b","3366FF":"\u041a\u0430\u0440\u0430\u043b\u0435\u045e\u0441\u043a\u0456 \u0441\u0456\u043d\u0456","800080":"\u0424\u0456\u044f\u043b\u0435\u0442\u0430\u0432\u044b","999999":"\u041a\u0432\u0430\u0440\u0446\u0430\u0432\u044b",FF00FF:"\u041f\u0443\u0440\u043f\u0443\u0440\u043e\u0432\u044b",FFCC00:"\u0417\u0430\u043b\u0430\u0442\u044b",FFFF00:"\u0416\u043e\u045e\u0442\u044b","00FF00":"\u0417\u044f\u043b\u0451\u043d\u044b","00FFFF":"\u041a\u043e\u043b\u0435\u0440\u0443 \u0432\u0430\u0434\u044b","00CCFF":"\u041d\u044f\u0431\u0435\u0441\u043d\u044b","993366":"\u0420\u0443\u0436\u043e\u0432\u0430-\u043b\u0456\u043b\u043e\u0432\u044b",C0C0C0:"\u0421\u0440\u044d\u0431\u043d\u044b",FF99CC:"\u0420\u0443\u0436\u043e\u0432\u044b",FFCC99:"\u0410\u0440\u0430\u043d\u0436\u0430\u0432\u0430-\u043f\u0435\u0440\u0441\u0456\u043a\u0430\u0432\u044b",FFFF99:"\u0421\u0432\u0435\u0442\u043b\u0430-\u0436\u043e\u045e\u0442\u044b",CCFFCC:"\u0411\u043b\u0435\u0434\u043d\u0430-\u0437\u044f\u043b\u0451\u043d\u044b",CCFFFF:"\u0411\u043b\u0435\u0434\u043d\u0430-\u0441\u0456\u043d\u0456","99CCFF":"\u0421\u0432\u0435\u0442\u043b\u0430-\u043d\u044f\u0431\u0435\u0441\u043d\u044b",CC99FF:"\u0424\u0456\u044f\u043b\u043a\u0430\u0432\u044b",FFFFFF:"\u0411\u0435\u043b\u044b"},aria:{"rich_text_area":"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u044b \u0440\u044d\u0434\u0430\u043a\u0442\u0430\u0440"},wordcount:{words:"\u0421\u043b\u043e\u0432\u0430\u045e:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bg.js
new file mode 100644
index 000000000..d1882693a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({bg:{common:{"more_colors":"\u041e\u0449\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u0435","invalid_data":"\u0413\u0440\u0435\u0448\u043a\u0430: \u0412\u044a\u0432\u0435\u0434\u0435\u043d\u0438 \u0441\u0430 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0438, \u0442\u0435 \u0441\u0430 \u043c\u0430\u0440\u043a\u0438\u0440\u0430\u043d\u0438 \u0432 \u0447\u0435\u0440\u0432\u0435\u043d\u043e.","popup_blocked":"\u0421\u044a\u0436\u0430\u043b\u044f\u0432\u0430\u043c\u0435, \u043d\u043e \u0437\u0430\u0431\u0435\u043b\u044f\u0437\u0430\u0445\u043c\u0435, \u0447\u0435 \u0432\u0430\u0448\u0438\u044f\u0442 popup-blocker \u0435 \u0441\u043f\u0440\u044f\u043b \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 \u043a\u043e\u0439\u0442\u043e \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0430\u0442\u0430. \u0429\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0438\u0437\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u043f\u043e\u043f\u044a\u043f\u0438 \u0437\u0430 \u0442\u043e\u0437\u0438 \u0441\u0430\u0439\u0442 \u0437\u0430 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u043f\u044a\u043b\u043d\u0430\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u043e\u0441\u0442.","clipboard_no_support":"\u041d\u0435 \u0441\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u043e\u0442 \u0432\u0430\u0448\u0438\u044f\u0442 \u0431\u0440\u0430\u0443\u0437\u044a\u0440, \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043d\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0438.","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435/\u041e\u0442\u0440\u044f\u0437\u0432\u0430\u043d\u0435/\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0435 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u043d\u043e \u043f\u043e\u0434 Mozilla \u0438 Firefox.\n\u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430?","not_set":"-- \u041d\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d\u043e --","class_name":"\u041a\u043b\u0430\u0441",browse:"Browse",close:"\u0417\u0430\u0442\u0432\u043e\u0440\u0438",cancel:"\u041e\u0442\u043a\u0430\u0436\u0438",update:"\u041e\u0431\u043d\u043e\u0432\u0438",insert:"\u0412\u043c\u044a\u043a\u043d\u0438",apply:"\u041f\u043e\u0442\u0432\u044a\u0440\u0434\u0438","edit_confirm":"\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 WYSIWYG \u0440\u0435\u0436\u0438\u043c \u0437\u0430 \u0442\u043e\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e \u043f\u043e\u043b\u0435?","invalid_data_number":"{#field} \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0447\u0438\u0441\u043b\u043e","invalid_data_min":"{#field} \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u043e-\u0433\u043e\u043b\u044f\u043c\u043e \u043e\u0442 {#min}","invalid_data_size":"{#field} \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0447\u0438\u0441\u043b\u043e \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442",value:"(\u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442)"},contextmenu:{full:"\u0414\u0432\u0443\u0441\u0442\u0440\u0430\u043d\u043d\u043e",right:"\u0414\u044f\u0441\u043d\u043e",center:"\u0426\u0435\u043d\u0442\u044a\u0440",left:"\u041b\u044f\u0432\u043e",align:"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435"},insertdatetime:{"day_short":"\u041d\u0434,\u041f\u043d,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041f\u0442,\u0421\u0431,\u041d\u0434","day_long":"\u041d\u0435\u0434\u0435\u043b\u044f,\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a,\u0412\u0442\u043e\u0440\u043d\u0438\u043a,\u0421\u0440\u044f\u0434\u0430,\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a,\u041f\u0435\u0442\u044a\u043a,\u0421\u044a\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0435\u043b\u044f","months_short":"\u042f\u043d\u0443,\u0424\u0435\u0432,\u041c\u0430\u0440,\u0410\u043f\u0440,\u041c\u0430\u0439,\u042e\u043d\u0438,\u042e\u043b\u0438,\u0410\u0432\u0433,\u0421\u0435\u043f,\u041e\u043a\u0442,\u041d\u043e\u0435,\u0414\u0435\u043a","months_long":"\u042f\u043d\u0443\u0430\u0440\u0438,\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438,\u041c\u0430\u0440\u0442,\u0410\u043f\u0440\u0438\u043b,\u041c\u0430\u0439,\u042e\u043d\u0438,\u042e\u043b\u0438,\u0410\u0432\u0433\u0443\u0441\u0442,\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438,\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438,\u041d\u043e\u0435\u043c\u0432\u0440\u0438,\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438","inserttime_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0432\u0440\u0435\u043c\u0435","insertdate_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0434\u0430\u0442\u0430","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u041e\u0442\u043f\u0435\u0447\u0430\u0442\u0430\u0439"},preview:{"preview_desc":"\u041f\u0440\u0435\u0433\u043b\u0435\u0434"},directionality:{"rtl_desc":"\u041f\u043e\u0441\u043e\u043a\u0430 \u043e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e","ltr_desc":"\u041f\u043e\u0441\u043e\u043a\u0430 \u043e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e"},layer:{content:"\u041d\u043e\u0432 \u0441\u043b\u043e\u0439...","absolute_desc":"\u0412\u043a\u043b\u044e\u0447\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0430\u043d\u0435","backward_desc":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043e\u0442\u0437\u0430\u0434","forward_desc":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043e\u0442\u043f\u0440\u0435\u0434","insertlayer_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u043d\u043e\u0432 \u0441\u043b\u043e\u0439"},save:{"save_desc":"\u0417\u0430\u043f\u0438\u0448\u0438","cancel_desc":"\u041e\u0442\u043a\u0430\u0436\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438"},nonbreaking:{"nonbreaking_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u043d\u0435\u043f\u0440\u0435\u043a\u044a\u0441\u0432\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b"},iespell:{download:"ieSpell \u043d\u0435 \u0435 \u043e\u0442\u043a\u0440\u0438\u0442. \u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u0442\u0435 \u0441\u0435\u0433\u0430?","iespell_desc":"\u041f\u0440\u043e\u0432\u0435\u0440\u0438 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430"},advhr:{"advhr_desc":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043b\u0438\u043d\u0438\u044f","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0415\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0422\u044a\u0440\u0441\u0438/\u0417\u0430\u043c\u0435\u0441\u0442\u0438","search_desc":"\u0422\u044a\u0440\u0441\u0438","delta_width":"","delta_height":""},advimage:{"image_desc":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","delta_width":"","delta_height":""},advlink:{"link_desc":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","ins_desc":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435","del_desc":"\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435","acronym_desc":"\u0410\u043a\u0440\u043e\u043d\u0438\u043c","abbr_desc":"\u0421\u044a\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435","cite_desc":"\u0426\u0438\u0442\u0430\u0442","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 CSS \u0441\u0442\u0438\u043b","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e\u0442\u043e \u0435 \u0432 \u0438\u0437\u0447\u0438\u0441\u0442\u0435\u043d \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0440\u0435\u0436\u0438\u043c. \u0429\u0440\u0430\u043a\u043d\u0435\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e, \u0437\u0430 \u0434\u0430 \u043f\u0440\u0435\u043c\u0438\u043d\u0435\u0442\u0435 \u0432 \u043e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043d\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435.","plaintext_mode_sticky":"\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e\u0442\u043e \u0435 \u0432 \u0438\u0437\u0447\u0438\u0441\u0442\u0435\u043d \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0440\u0435\u0436\u0438\u043c. \u0429\u0440\u0430\u043a\u043d\u0435\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e, \u0437\u0430 \u0434\u0430 \u043f\u0440\u0435\u043c\u0438\u043d\u0435\u0442\u0435 \u0432 \u043e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043d\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435. \u0421\u043b\u0435\u0434 \u043a\u0430\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0449\u0435 \u0441\u0435 \u0432\u044a\u0440\u043d\u0435\u0442\u0435 \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u043d \u0440\u0435\u0436\u0438\u043c.","selectall_desc":"\u0418\u0437\u0431\u0435\u0440\u0438 \u0432\u0441\u0438\u0447\u043a\u0438","paste_word_desc":"\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u043e\u0442 Word","paste_text_desc":"\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u043a\u0430\u0442\u043e \u0442\u0435\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 CTRL V \u043e\u0442 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u0442\u0430, \u0437\u0430 \u0434\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u0430.","text_linebreaks":"\u0417\u0430\u043f\u0430\u0437\u0438 \u0437\u043d\u0430\u0446\u0438\u0442\u0435 \u0437\u0430 \u043d\u043e\u0432\u0438 \u0440\u0435\u0434\u043e\u0432\u0435","text_title":"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 CTRL V \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u0442\u0430, \u0437\u0430 \u0434\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u0430."},table:{cell:"\u041a\u043b\u0435\u0442\u043a\u0430",col:"\u041a\u043e\u043b\u043e\u043d\u0430",row:"\u0420\u0435\u0434",del:"\u0418\u0437\u0442\u0440\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0430","copy_row_desc":"\u041a\u043e\u043f\u0438\u0440\u0430\u0439 \u0440\u0435\u0434","cut_row_desc":"\u041e\u0442\u0440\u0435\u0436\u0438 \u0440\u0435\u0434","paste_row_after_desc":"\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u0440\u0435\u0434 \u0441\u043b\u0435\u0434","paste_row_before_desc":"\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u0440\u0435\u0434 \u043f\u0440\u0435\u0434\u0438","props_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","cell_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","row_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0434\u0430","merge_cells_desc":"\u0421\u043b\u0435\u0439 \u043a\u043b\u0435\u0442\u043a\u0438","split_cells_desc":"\u0420\u0430\u0437\u0434\u0435\u043b\u0438 \u0441\u043b\u0435\u0442\u0438 \u043a\u043b\u0435\u0442\u043a\u0438","delete_col_desc":"\u0418\u0437\u0442\u0440\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0430","col_after_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u043a\u043e\u043b\u043e\u043d\u0430 \u0441\u043b\u0435\u0434","col_before_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u043a\u043e\u043b\u043e\u043d\u0430 \u043f\u0440\u0435\u0434\u0438","delete_row_desc":"\u0418\u0437\u0442\u0440\u0438\u0439 \u0440\u0435\u0434","row_after_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0440\u0435\u0434 \u0441\u043b\u0435\u0434","row_before_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0440\u0435\u0434 \u043f\u0440\u0435\u0434\u0438",desc:"\u0412\u043c\u044a\u043a\u043d\u0438 \u043d\u043e\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u0412\u0441\u0438\u0447\u043a\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u0435\u043d\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u0449\u0435 \u0431\u044a\u0434\u0430\u0442 \u0437\u0430\u0433\u0443\u0431\u0435\u043d\u0438.\n\n\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u0432\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0437\u0430\u043f\u0430\u0437\u0435\u043d\u043e\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435?.","restore_content":"\u0412\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0437\u0430\u043f\u0430\u0437\u0435\u043d\u043e\u0442\u043e.","unload_msg":"\u041f\u0440\u043e\u043c\u0435\u043d\u0438\u0442\u0435 \u043a\u043e\u0438\u0442\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0445\u0442\u0435 \u0449\u0435 \u0441\u0435 \u0437\u0430\u0433\u0443\u0431\u044f\u0442 \u0430\u043a\u043e \u043e\u0442\u0438\u0434\u0435\u0442\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430."},fullscreen:{desc:"\u0412\u043a\u043b./\u0418\u0437\u043a\u043b. \u0446\u044f\u043b \u0435\u043a\u0440\u0430\u043d"},media:{"delta_height":"\u0428\u0438\u0440\u0438\u043d\u0430","delta_width":"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430",edit:"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043c\u0435\u0434\u0438\u0430",desc:"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043c\u0435\u0434\u0438\u0430\u0442\u0430"},fullpage:{desc:"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","delta_width":"","delta_height":""},template:{desc:"\u0412\u043c\u044a\u043a\u043d\u0438 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442"},visualchars:{desc:"\u0412\u043a\u043b./\u0418\u0437\u043a\u043b. \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0438."},spellchecker:{desc:"\u0412\u043a\u043b./\u0418\u0437\u043a\u043b. \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430",menu:"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u0442\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441","ignore_word":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0439 \u0434\u0443\u043c\u0430","ignore_words":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0439 \u0432\u0441\u0438\u0447\u043a\u0438",langs:"\u0415\u0437\u0438\u0446\u0438",wait:"\u041c\u043e\u043b\u044f \u0438\u0437\u0447\u0430\u043a\u0430\u0439\u0442\u0435...",sug:"\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f","no_sug":"\u041d\u044f\u043c\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f","no_mpell":"\u041d\u044f\u043c\u0430 \u0433\u0440\u0435\u0448\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438 \u0434\u0443\u043c\u0438.","learn_word":"\u041d\u0430\u0443\u0447\u0438 \u0434\u0443\u043c\u0430\u0442\u0430"},pagebreak:{desc:"\u0412\u043c\u044a\u043a\u043d\u0438 \u043d\u043e\u0432\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430."},advlist:{types:"\u0421\u0438\u043c\u0432\u043e\u043b\u0438",def:"\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438","lower_alpha":"\u041c\u0430\u043b\u043a\u0438 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438 \u0431\u0443\u043a\u0432\u0438","lower_greek":"\u041c\u0430\u043b\u043a\u0438 \u0433\u0440\u044a\u0446\u043a\u0438 \u0431\u0443\u043a\u0432\u0438","lower_roman":"\u041c\u0430\u043b\u043a\u0438 \u0440\u0438\u043c\u0441\u043a\u0438 \u0446\u0438\u0444\u0440\u0438","upper_alpha":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u0438 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438 \u0431\u0443\u043a\u0432\u0438","upper_roman":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u0438 \u0440\u0438\u043c\u0441\u043a\u0438 \u0446\u0438\u0444\u0440\u0438",circle:"\u041a\u0440\u044a\u0433",disc:"\u041e\u043a\u0440\u044a\u0436\u043d\u043e\u0441\u0442",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442"},colors:{"333300":"\u0422\u044a\u043c\u043d\u043e \u043c\u0430\u0441\u043b\u0438\u043d\u0435\u043d","993300":"\u0422\u044a\u043c\u043d\u043e \u043e\u0440\u0430\u043d\u0436\u0435\u0432","000000":"\u0427\u0435\u0440\u0435\u043d","003300":"\u0422\u044a\u043c\u043d\u043e\u0437\u0435\u043b\u0435\u043d","003366":"\u0422\u044a\u043c\u043d\u043e\u043b\u0430\u0437\u0443\u0440\u0435\u043d","000080":"\u0422\u044a\u043c\u043d\u043e\u0441\u0438\u043d","333399":"\u0418\u043d\u0434\u0438\u0433\u043e","333333":"\u041c\u043d\u043e\u0433\u043e \u0442\u044a\u043c\u043d\u043e \u0441\u0438\u0432","800000":"\u041a\u0435\u0441\u0442\u0435\u043d\u044f\u0432",FF6600:"\u041e\u0440\u0430\u043d\u0436\u0435\u0432","808000":"\u041c\u0430\u0441\u043b\u0438\u043d\u0435\u043d\u043e\u0437\u0435\u043b\u0435\u043d","008000":"\u0417\u0435\u043b\u0435\u043d","008080":"\u0421\u0432\u0435\u0442\u043b\u043e\u0441\u0438\u043d","0000FF":"\u0421\u0438\u043d","666699":"\u0421\u0438\u0432\u043e \u0441\u0438\u043d","808080":"\u0421\u0438\u0432",FF0000:"\u0427\u0435\u0440\u0432\u0435\u043d",FF9900:"\u041a\u0435\u0445\u043b\u0438\u0431\u0430\u0440","99CC00":"\u0416\u044a\u043b\u0442\u043e\u0437\u0435\u043b\u0435\u043d","339966":"\u0421\u0438\u043d\u044c\u043e\u0437\u0435\u043b\u0435\u043d","33CCCC":"\u0422\u044e\u0440\u043a\u043e\u0430\u0437","3366FF":"\u041a\u0440\u0430\u043b\u0441\u043a\u043e \u0441\u0438\u043d\u044c\u043e","800080":"\u041f\u0443\u0440\u043f\u0443\u0440\u0435\u043d","999999":"\u0421\u0440\u0435\u0434\u043d\u043e \u0441\u0438\u0432",FF00FF:"\u041c\u0430\u0433\u0435\u043d\u0442\u0430",FFCC00:"\u0417\u043b\u0430\u0442\u0435\u043d",FFFF00:"\u0416\u044a\u043b\u0442","00FF00":"\u041b\u0430\u0439\u043c","00FFFF":"\u0410\u043a\u0432\u0430","00CCFF":"\u041d\u0435\u0431\u0435\u0441\u043d\u043e \u0441\u0438\u043d","993366":"\u041a\u0430\u0444\u044f\u0432",C0C0C0:"\u0421\u0440\u0435\u0431\u0440\u0438\u0441\u0442",FF99CC:"\u0420\u043e\u0437\u043e\u0432",FFCC99:"\u0422\u044a\u043c\u043d\u043e\u043e\u0440\u0430\u043d\u0436\u0435\u0432",FFFF99:"\u0421\u0432\u0435\u0442\u043b\u043e\u0436\u044a\u043b\u0442",CCFFCC:"\u0411\u043b\u0435\u0434\u043e \u0437\u0435\u043b\u0435\u043d\u043e",CCFFFF:"\u0411\u043b\u0435\u0434 \u0446\u0438\u0430\u043d","99CCFF":"\u0421\u0432\u0435\u0442\u043b\u043e\u043d\u0435\u0431\u0435\u0441\u043d\u043e \u0441\u0438\u043d",CC99FF:"\u041b\u0438\u043b\u0430\u0432",FFFFFF:"\u0411\u044f\u043b"},aria:{"rich_text_area":"\u041f\u043e\u043b\u0435 \u0437\u0430 \u0447\u0438\u0441\u0442 \u0442\u0435\u043a\u0441\u0442"},wordcount:{words:"\u0414\u0443\u043c\u0438:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bn.js
new file mode 100644
index 000000000..32d703e71
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({bn:{common:{"more_colors":"\u0986\u09b0\u0993 \u09ac\u09c7\u09b6\u09bf \u09b0\u0982","invalid_data":"\u09a4\u09cd\u09b0\u09c1\u099f\u09bf: \u09ac\u09c7\u09a0\u09bf\u0995 \u09ae\u09be\u09a8 \u09a2\u09c1\u0995\u09be\u09a8\u09cb \u09b9\u09df\u09c7\u099b\u09c7, \u098f\u0987\u0997\u09c1\u09b2\u09bf \u09b2\u09be\u09b2 \u099a\u09bf\u09b9\u09cd\u09a8\u09bf\u09a4 \u0995\u09b0\u09be \u09b9\u09b2\u0964","popup_blocked":"\u09a6\u09c1\u0983\u0996\u09bf\u09a4, \u0995\u09bf\u09a8\u09cd\u09a4\u09c1 \u0986\u09ae\u09b0\u09be \u09b2\u0995\u09cd\u09b7\u09cd\u09af \u0995\u09b0\u09c7\u099b\u09bf \u09af\u09c7 \u0986\u09aa\u09a8\u09be\u09b0 \u09aa\u09aa-\u0986\u09aa \u09ac\u09cd\u09b2\u0995\u09be\u09b0 \u098f\u0995\u099f\u09bf \u0989\u0987\u09a8\u09cd\u09a1\u09cb \u09a8\u09bf\u09b7\u09cd\u0995\u09cd\u09b0\u09bf\u09df \u0995\u09b0\u09c7\u099b\u09c7 \u09af\u09be \u0985\u09cd\u09af\u09be\u09aa\u09b2\u09bf\u0995\u09c7\u09b6\u09a8 \u098f\u09b0 \u09ab\u09be\u0982\u09b6\u09a8\u09be\u09b2\u09bf\u099f\u09bf\u09b0 \u099c\u09a8\u09cd\u09af \u09aa\u09cd\u09b0\u09df\u09cb\u099c\u09a8\u09c0\u09df\u0964\u0986\u09aa\u09a8\u09bf \u098f\u0987 \u099f\u09c1\u09b2\u099f\u09bf \u09b8\u09ae\u09cd\u09aa\u09c2\u09b0\u09cd\u09a3\u09ad\u09be\u09ac\u09c7 \u09ac\u09cd\u09af\u09be\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09a4\u09c7 \u099a\u09be\u0987\u09b2\u09c7 \u098f\u0987 \u09b8\u09be\u0987\u099f\u099f\u09bf \u09a5\u09c7\u0995\u09c7 \u09aa\u09aa-\u0986\u09aa \u09ac\u09cd\u09b2\u0995\u09bf\u0982 \u09a8\u09bf\u09b7\u09cd\u0995\u09cd\u09b0\u09bf\u09df \u0995\u09b0\u09a4\u09c7 \u09b9\u09ac\u09c7\u0964","clipboard_no_support":"\u0986\u09aa\u09a8\u09be\u09b0 \u09ac\u09cd\u09b0\u09be\u0989\u099c\u09be\u09b0\u09c7\u09b0 \u09a6\u09cd\u09ac\u09be\u09b0\u09be \u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8\u09c7 \u09b8\u09ae\u09b0\u09cd\u09a5\u09bf\u09a4 \u09a8\u09be, \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09c7 \u0995\u09c0\u09ac\u09cb\u09b0\u09cd\u09a1 \u09b6\u09b0\u09cd\u099f\u0995\u09be\u099f \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09c1\u09a8\u0964","clipboard_msg":"\u0995\u09aa\u09bf/\u0995\u09be\u099f/\u09aa\u09c7\u09b7\u09cd\u099f \u09ae\u099c\u09bf\u09b2\u09be \u098f\u09ac\u0982 \u09ab\u09be\u09df\u09be\u09b0\u09ab\u0995\u09cd\u09b8 \u098f \u09b8\u09ae\u09cd\u09ad\u09ac \u09a8\u09df\n\u0986\u09aa\u09a8\u09bf \u0995\u09bf \u098f\u0987 \u09ac\u09bf\u09b7\u09df\u099f\u09bf\u09b0 \u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c7 \u0986\u09b0\u0993 \u09ac\u09c7\u09b6\u09bf \u09a4\u09a5\u09cd\u09af \u099a\u09be\u09a8","not_set":"-- \u09b8\u09c7\u099f \u09a8\u09df --","class_name":"\u0995\u09cd\u09b2\u09be\u09b8",browse:"\u09ac\u09cd\u09b0\u09be\u0989\u099c",close:"\u09ac\u09a8\u09cd\u09a7",cancel:"\u0995\u09cd\u09af\u09be\u09a8\u09b8\u09c7\u09b2",update:"\u0986\u09aa\u09a1\u09c7\u099f",insert:"\u0987\u09a8\u09b8\u09be\u09b0\u09cd\u099f",apply:"\u098f\u09aa\u09cd\u09b2\u09cd\u09af\u09be\u0987","edit_confirm":"\u0986\u09aa\u09a8\u09bf \u0995\u09bf \u098f\u0987 textarea\u099f\u09bf\u09b0 \u099c\u09a8\u09cd\u09af WYSIWYG \u09ae\u09cb\u09a1 \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09a4\u09c7 \u099a\u09be\u09a8?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/br.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/br.js
new file mode 100644
index 000000000..0209224b2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/br.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({br:{common:{"more_colors":"Mais Cores","invalid_data":"Erro: Valores inv\u00e1lidos est\u00e3o marcados em vermelho.","popup_blocked":"Detectamos que o seu bloqueador de popups bloqueou uma janela que \u00e9 essencial para o aplicativo. Voc\u00ea precisa desativar o bloqueador de popups para utilizar esta ferramenta.","clipboard_no_support":"O seu navegador n\u00e3o tem suporte para esta fun\u00e7\u00e3o, use os atalhos do teclado.","clipboard_msg":"Copiar/cortar/colar n\u00e3o est\u00e1 dispon\u00edvel no Mozilla/Firefox.\nDeseja mais informa\u00e7\u00f5es sobre este problema?","not_set":"-- N\u00e3o especificado --","class_name":"Classe",browse:"Procurar",close:"Fechar",cancel:"Cancelar",update:"Atualizar",insert:"Inserir",apply:"Aplicar","edit_confirm":"Deseja usar o modo de edi\u00e7\u00e3o avan\u00e7ado neste campo de texto?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Justificar",right:"Direita",center:"Centro",left:"Esquerda",align:"Alinhamento"},insertdatetime:{"day_short":"Dom,Seg,Ter,Qua,Qui,Sex,Sab,Dom","day_long":"Domingo,Segunda-Feira,Ter\u00e7a-Feira,Quarta-Feira,Quinta-Feira,Sexta-Feira,S\u00e1bado,Domingo","months_short":"Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez","months_long":"Janeiro,Fevereiro,Mar\u00e7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro","inserttime_desc":"Inserir hora","insertdate_desc":"Inserir data","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimir"},preview:{"preview_desc":"Pr\u00e9-Visualizar"},directionality:{"rtl_desc":"Da direita para esquerda","ltr_desc":"Da esquerda para direita"},layer:{content:"Nova camada...","absolute_desc":"Alternar posicionamento absoluto","backward_desc":"Mover para tr\u00e1s","forward_desc":"Mover para frente","insertlayer_desc":"Inserir nova camada"},save:{"save_desc":"Salvar","cancel_desc":"Cancelar todas as altera\u00e7\u00f5es"},nonbreaking:{"nonbreaking_desc":"Inserir um espa\u00e7o"},iespell:{download:"Aplicativo de ortografia n\u00e3o-detectado. Deseja instal\u00e1-lo agora?","iespell_desc":"Verificar ortografia"},advhr:{"advhr_desc":"Separador horizontal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoticons","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Localizar/substituir","search_desc":"Localizar","delta_width":"","delta_height":""},advimage:{"image_desc":"Inserir/editar imagem","delta_width":"","delta_height":""},advlink:{"link_desc":"Inserir/editar hyperlink","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Inserir/Editar atributos","ins_desc":"Inserir","del_desc":"Apagar","acronym_desc":"Acr\u00f4nimo","abbr_desc":"Abrevia\u00e7\u00e3o","cite_desc":"Cita\u00e7\u00e3o","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Editar CSS","delta_height":"","delta_width":""},paste:{"selectall_desc":"Selecionar tudo","paste_word_desc":"Colar (copiado do WORD)","paste_text_desc":"Colar como texto simples","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V para colar o texto na janela.","text_linebreaks":"Manter quebras de linha","text_title":"Use CTRL+V para colar o texto na janela."},table:{cell:"C\u00e9lula",col:"Coluna",row:"Linha",del:"Apagar tabela","copy_row_desc":"Copiar linha","cut_row_desc":"Cortar linha","paste_row_after_desc":"Colar linha depois","paste_row_before_desc":"Colar linha antes","props_desc":"Propriedades da tabela","cell_desc":"Propriedades das c\u00e9lulas","row_desc":"Propriedades das linhas","merge_cells_desc":"Unir c\u00e9lulas","split_cells_desc":"Dividir c\u00e9lulas","delete_col_desc":"Remover coluna","col_after_desc":"Inserir coluna depois","col_before_desc":"Inserir coluna antes","delete_row_desc":"Apagar linha","row_after_desc":"Inserir linha depois","row_before_desc":"Inserir linha antes",desc:"Inserir nova tabela","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"As mudan\u00e7as efetuadas ser\u00e3o perdidas se sair desta p\u00e1gina.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Tela Inteira"},media:{edit:"Editar m\u00eddia incorporada",desc:"Inserir/Editar m\u00eddia incorporada","delta_height":"","delta_width":""},fullpage:{desc:"Propriedades do Documento","delta_width":"","delta_height":""},template:{desc:"Inserir template"},visualchars:{desc:"Caracteres de controle visual ligado/desligado"},spellchecker:{desc:"Alternar verifica\u00e7\u00e3o ortogr\u00e1fica",menu:"Configura\u00e7\u00f5es de ortografia","ignore_word":"Ignorar palavra","ignore_words":"Ignorar tudo",langs:"Linguagens",wait:"Aguarde...",sug:"Sugest\u00f5es","no_sug":"Sem sugest\u00f5es","no_mpell":"N\u00e3o foram detectados erros de ortografia.","learn_word":"Learn word"},pagebreak:{desc:"Inserir quebra de p\u00e1gina."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bs.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bs.js
new file mode 100644
index 000000000..794702df1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/bs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({bs:{common:{"more_colors":"Vi\u0161e boja","invalid_data":"Gre\u0161ka: Une\u0161ene su nevaljane vrijednosti, ozna\u010dene su crvenom bojom.","popup_blocked":"Oprostite, izgleda da je va\u0161 popup-blocker onemogu\u0107io prozor u sklopu ovog programa. Morate onemogu\u0107iti blokiranje popup prozora da bi u potpunosti iskoristili ovaj alat.","clipboard_no_support":"Trenuta\u010dno va\u0161 preglednik ne podr\u017eava ovu opciju, poku\u0161ajte koristiti tipkovni\u010dku kraticu.","clipboard_msg":"Kopiraj/Izre\u017ei/Zalijepi nije dostupno Mozilla i Firefox preglednicima.\nVi\u0161e informacija?","not_set":"-- Nije postavljeno --","class_name":"Klasa",browse:"Pregled",close:"Zatvori",cancel:"Odustani",update:"Obnovi",insert:"Umetni",apply:"Primjeni","edit_confirm":"\u017delite li koristiti WYSIWYG na\u010din rada za ovo tekstualno polje?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Puno",right:"Desno",center:"Sredina",left:"Lijevo",align:"Poravnavanje"},insertdatetime:{"day_short":"ned,pon,uto,sri,\u010det,pet,sub,ned","day_long":"nedjelja,ponedjeljak,utorak,srijeda,\u010detvrtak,petak,subota,nedjelja","months_short":"sij,velj,o\u017eu,tra,svi,lip,srp,kol,ruj,lis,stu,pro","months_long":"sije\u010danj,velja\u010da,o\u017eujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac","inserttime_desc":"Umetni vrijeme","insertdate_desc":"Umetni datum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y."},print:{"print_desc":"Ispis"},preview:{"preview_desc":"Prikaz"},directionality:{"rtl_desc":"S desna na lijevo","ltr_desc":"S lijeva na desno"},layer:{content:"Novi sloj...","absolute_desc":"Uklju\u010di/isklju\u010di apsolutno pozicioniranje","backward_desc":"Pomakni natrag","forward_desc":"Pomakni naprijed","insertlayer_desc":"Umetni novi sloj"},save:{"save_desc":"Spremi","cancel_desc":"Odustani od svih promjena"},nonbreaking:{"nonbreaking_desc":"Umetni razmak"},iespell:{download:"Provjera pravopisa nije postaljena. Postaviti sada?","iespell_desc":"Pokreni provjeru pravopisa"},advhr:{"advhr_desc":"Vodoravna crta","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emocije","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Prona\u0111i/Zamijeni","search_desc":"Prona\u0111i","delta_width":"","delta_height":""},advimage:{"image_desc":"Umetni/uredi sliku","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Umetni/uredi atribute","ins_desc":"Unos","del_desc":"Brisanje","acronym_desc":"Akronim","abbr_desc":"Kratica","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Uredi CSS","delta_height":"","delta_width":""},paste:{"selectall_desc":"Odaberi sve","paste_word_desc":"Zalijepi iz Worda","paste_text_desc":"Zalijepi kao obi\u010dni tekst","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prijelome","text_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor."},table:{cell:"\u0106elija",col:"Stupac",row:"Redak",del:"Izbri\u0161i tablicu","copy_row_desc":"Kopiraj redak","cut_row_desc":"Izre\u017ei redak","paste_row_after_desc":"Zalijepi redak ispod","paste_row_before_desc":"Zalijepi redak iznad","props_desc":"Svojstva tablice","cell_desc":"Svojstva \u0107elije","row_desc":"Svojstva retka","merge_cells_desc":"Spoji \u0107elije","split_cells_desc":"Razdvoji spojene \u0107elije","delete_col_desc":"Ukloni stupac","col_after_desc":"Umetni stupac desno","col_before_desc":"Umetni stupac lijevo","delete_row_desc":"Izbri\u0161i redak","row_after_desc":"Umetni redak ispod","row_before_desc":"Umetni redak iznad",desc:"Nova tablica","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"Promjene u dokumentu \u0107e biti izgubljene ako iza\u0111ete s ove stranice.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Uklju\u010di/isklju\u010di prikaz preko cijelog ekrana"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Svojstva dokumenta","delta_width":"","delta_height":""},template:{desc:"Umetni sadr\u017eaj iz predlo\u017eak"},visualchars:{desc:"Vizualni kontrolni znakovi uklju\u010deni/isklju\u010deni."},spellchecker:{desc:"Uklju\u010di/isklju\u010di provjeru pravopisa",menu:"Postavke provjere pravopisa","ignore_word":"Zanemari rije\u010d","ignore_words":"Zanemari sver",langs:"Jezici",wait:"Pri\u010dekajte...",sug:"Prijedlozi","no_sug":"Nema prijedloga","no_mpell":"Nije prona\u0111ena nijedna pravopisna gre\u0161ke.","learn_word":"Learn word"},pagebreak:{desc:"Umetni prijelom."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ca.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ca.js
new file mode 100644
index 000000000..f944c2cb1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ca.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ca:{common:{"more_colors":"M\u00e9s colors","invalid_data":"Error: heu introdu\u00eft valors no v\u00e0lids, els marcats en vermell.","popup_blocked":"El bloqueig de finestres emergents ha inhabilitat una finestra que proporciona funcionalitat a l\'aplicaci\u00f3. Cal que desactiveu el bloqueig de finestres emergents en aquest lloc per tal de poder utilitzar de forma completa aquesta eina.","clipboard_no_support":"El vostre navegador actualment no ho admet, utilitzeu les dreceres de teclat.","clipboard_msg":"Copia/Retalla/Enganxa no es troba disponible al Mozilla ni al Firefox.\nVoleu m\u00e9s informaci\u00f3 sobre aquesta q\u00fcesti\u00f3?","not_set":"-- No definit --","class_name":"Classe",browse:"Explora",close:"Tanca",cancel:"Cancel\u00b7la",update:"Actualitza",insert:"Insereix",apply:"Aplica","edit_confirm":"Voleu utilitzar el mode WYSIWYG?","invalid_data_number":"{#field} ha de ser un n\u00famero","invalid_data_min":"{#field} ha de ser un n\u00famero major que {#min}","invalid_data_size":"{#field} ha de ser un n\u00famero o un tant per cent",value:"(valor)"},contextmenu:{full:"Justificat",right:"Dreta",center:"Centre",left:"Esquerra",align:"Alineaci\u00f3"},insertdatetime:{"day_short":"dg.,dl.,dt.,dc.,dj.,dv.,ds.,dg.","day_long":"diumenge,dilluns,dimarts,dimecres,dijous,divendres,dissabte,diumenge","months_short":"gen.,febr.,mar\u00e7,abr.,maig,juny,jul.,ag.,set.,oct.,nov.,des.","months_long":"Jgener,febrer,mar\u00e7,abril,maig,juny,juliol,agost,setembre,octubre,novembre,desembre","inserttime_desc":"Insereix l\'hora","insertdate_desc":"Insereix la data","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimeix"},preview:{"preview_desc":"Previsualitzaci\u00f3"},directionality:{"rtl_desc":"Direcci\u00f3 dreta a esquerra","ltr_desc":"Direcci\u00f3 esquerra a dreta"},layer:{content:"Nova Capa...","absolute_desc":"Conmuta el posicionament absolut","backward_desc":"Mou endarrera","forward_desc":"Mou endavant","insertlayer_desc":"Insereix una nova capa"},save:{"save_desc":"Desa","cancel_desc":"Cancel\u00b7la tots els canvis"},nonbreaking:{"nonbreaking_desc":"Insereix un car\u00e0cter espai en blanc"},iespell:{download:"no he detectat l\'ieSpell. Voleu instal\u00b7lar-ho?","iespell_desc":"Executa la correcci\u00f3 ortogr\u00e0fica"},advhr:{"advhr_desc":"Filet horitzontal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoticones","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Cerca/Reempla\u00e7a","search_desc":"Cerca","delta_width":"","delta_height":""},advimage:{"image_desc":"Insereix/edita imatge","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insereix/edita atributs","ins_desc":"Inserci\u00f3","del_desc":"Eliminaci\u00f3","acronym_desc":"Acr\u00f2nim","abbr_desc":"Abreviaci\u00f3","cite_desc":"Citaci\u00f3","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edita l\'estil CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Enganxa est\u00e0 ara configurat en mode text pla. Clica de nou per tornar al mode normal d\'enganxar.","plaintext_mode_sticky":"Enganxa est\u00e0 ara configurat en mode text pla. Clica de nou per tornar al mode normal d\'enganxar. Despr\u00e9s d\'enganxar quelcom ser\u00e0s retornat al mode normal d\'enganxar.","selectall_desc":"Selecciona-ho tot","paste_word_desc":"Enganxa des del Word","paste_text_desc":"Enganxa com a text pla"},"paste_dlg":{"word_title":"Amb el teclat utilitzeu CTRL+V per a enganxar el text dins la finestra.","text_linebreaks":"Conserva els salts de l\u00ednia","text_title":"Amb el teclat utilitzeu CTRL+V per a enganxar el text dins la finestra."},table:{cell:"Cel\u00b7la",col:"Columna",row:"Fila",del:"Elimina la taula","copy_row_desc":"Copia la fila","cut_row_desc":"Retalla la fila","paste_row_after_desc":"Enganxa la fila despr\u00e9s","paste_row_before_desc":"Enganxa la fila abans","props_desc":"Propietats de la taula","cell_desc":"Propietats de la cel\u00b7la","row_desc":"Propietats de la fila","merge_cells_desc":"Fusiona les cel\u00b7les","split_cells_desc":"Divideix les cel\u00b7les fusionades","delete_col_desc":"Elimina la columna","col_after_desc":"Insereix una columna despr\u00e9s","col_before_desc":"Insereix una columna abans","delete_row_desc":"Elimina la fila","row_after_desc":"Insereix una fila despr\u00e9s","row_before_desc":"Insereix una fila abans",desc:"Insereix una nova taula","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Si restaures el contingut guardat, perdr\u00e0s tot el contingut actual de l\'editor.\n\n Est\u00e0s segur de voler continuar?","restore_content":"Restaura el contingut guardat autom\u00e0ticament.","unload_msg":"Els canvis que heu fet es perdran si navegueu a fora d\'aquesta p\u00e0gina."},fullscreen:{desc:"Commuta a mode de pantalla completa"},media:{edit:"Edita multim\u00e8dia incrustat",desc:"Insereix / edita multim\u00e8dia incrustat","delta_height":"","delta_width":""},fullpage:{desc:"Propietats del document","delta_width":"","delta_height":""},template:{desc:"Insereix un contingut predefinit"},visualchars:{desc:"Activa/desactiva els car\u00e0cters de control visual."},spellchecker:{desc:"Corrector ortogr\u00e0fic",menu:"Configuraci\u00f3 del corrector","ignore_word":"Ignora el mot","ignore_words":"Ignora\'ls tots",langs:"Idiomes",wait:"Espereu...",sug:"Suggeriments","no_sug":"Cap suggeriment","no_mpell":"No s\'ha trobat cap falta d\'ortografia.","learn_word":"Aprendre el mot"},pagebreak:{desc:"Insereix un salt de p\u00e0gina."},advlist:{types:"Tipus",def:"Per defecte","lower_alpha":"Lletres","lower_greek":"Lletres gregues (min\u00fascules)","lower_roman":"Nombres romans (min\u00fascules)","upper_alpha":"Lletres (maj\u00fascules)","upper_roman":"Nombres romans (maj\u00fascules)",circle:"Cercle",disc:"Disc",square:"Quadrat"},colors:{"333300":"Verd oliva fosc","993300":"Taronja torrat","000000":"Negre","003300":"Verd fosc","003366":"Blau fosc","000080":"Blau mar\u00ed","333399":"Indi","333333":"Gris molt fosc","800000":"Granat",FF6600:"Taronja","808000":"Verd oliva","008000":"Verd","008080":"Blau xarxet","0000FF":"Blau","666699":"Blau grisenc","808080":"Gris",FF0000:"Roig",FF9900:"Ambre","99CC00":"Verd groguenc","339966":"Verd mar\u00ed","33CCCC":"Turquesa","3366FF":"Blau real","800080":"Porpra","999999":"Gris mig",FF00FF:"Magenta",FFCC00:"Or",FFFF00:"Groc","00FF00":"Llima","00FFFF":"Cian","00CCFF":"Blau cel","993366":"Marr\u00f3",C0C0C0:"Plata",FF99CC:"Rosa",FFCC99:"Pr\u00e9ssec",FFFF99:"Groc clar",CCFFCC:"Verd p\u00e0lid",CCFFFF:"Cian p\u00e0lid","99CCFF":"Blau mar\u00ed clar",CC99FF:"Pruna",FFFFFF:"Blanc"},aria:{"rich_text_area":"\u00c0rea de Text Enriquit"},wordcount:{words:"Mots:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ch.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ch.js
new file mode 100644
index 000000000..c6d10f6a8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ch.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ch:{common:{"more_colors":"\u66f4\u591a\u989c\u8272\u2026","invalid_data":"\u4f60\u8f93\u5165\u7684\u8d44\u6599\u6709\u8bef\uff08\u7ea2\u8272\u90e8\u5206\uff09","popup_blocked":"\u4f60\u7684\u6d4f\u89c8\u5668\u7981\u6b62\u4e86\u5f39\u51fa\u89c6\u7a97\u3002","clipboard_no_support":"\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u63f4\u8be5\u529f\u80fd\uff0c\u8bf7\u4f7f\u7528Ctrl + C\u952e\u4ee3\u66ff\u3002","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u63f4\u590d\u5236\u529f\u80fd\u3002","not_set":"--\u5c1a\u672a\u8bbe\u5b9a--","class_name":"\u7c7b\u522b",browse:"\u9884\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5957\u7528","edit_confirm":"\u662f\u5426\u9700\u8981\u5f00\u542f\u6587\u5b57\u7f16\u8f91\u5668\uff1f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u5de6\u53f3\u5bf9\u9f50",right:"\u9760\u53f3\u5bf9\u9f50",center:"\u7f6e\u4e2d\u5bf9\u9f50",left:"\u9760\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50"},insertdatetime:{"day_short":"\u5468\u65e5\uff0c\u5468\u4e00\uff0c\u5468\u4e8c\uff0c\u5468\u53c1\uff0c\u5468\u56db\uff0c\u5468\u4e94\uff0c\u5468\u516d\uff0c\u5468\u65e5","day_long":"\u661f\u671f\u65e5\uff0c\u661f\u671f\u4e00\uff0c\u661f\u671f\u4e8c\uff0c\u661f\u671f\u53c1\uff0c\u661f\u671f\u56db\uff0c\u661f\u671f\u4e94\uff0c\u661f\u671f\u516d\uff0c\u661f\u671f\u65e5","months_short":"1\u6708\uff0c2\u6708\uff0c3\u6708\uff0c4\u6708\uff0c5\u6708\uff0c6\u6708\uff0c7\u6708\uff0c8\u6708\uff0c9\u6708\uff0c10\u6708\uff0c11\u6708\uff0c12\u6708","months_long":"\u4e00\u6708\uff0c\u4e8c\u6708\uff0c\u53c1\u6708\uff0c\u56db\u6708\uff0c\u4e94\u6708\uff0c\u516d\u6708\uff0c\u4e03\u6708\uff0c\u516b\u6708\uff0c\u4e5d\u6708\uff0c\u5341\u6708\uff0c\u5341\u4e00\u6708\uff0c\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u76ee\u524d\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u76ee\u524d\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y/%m/%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u5efa\u56fe\u5c42\u2026","absolute_desc":"\u5207\u6362\u5230\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u7f6e\u540e","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u56fe\u5c42"},save:{"save_desc":"\u5b58\u6863","cancel_desc":"\u53d6\u6d88\u6240\u6709\u53d8\u66f4"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u683c"},iespell:{download:"\u68c0\u67e5\u4e0d\u5230ieSpell\u63d2\u4ef6\u7a0b\u5e8f\uff0c\u662f\u5426\u7acb\u5373\u5b89\u88c5\uff1f","iespell_desc":"\u62fc\u5b57\u68c0\u67e5"},advhr:{"advhr_desc":"\u6c34\u5e73\u7ebf","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u8868\u60c5","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u641c\u5bfb/\u53d6\u4ee3","search_desc":"\u641c\u5bfb","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7f16\u8f91\u8d85\u8fde\u7ed3","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"60","attribs_delta_width":"40","attribs_desc":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u7528","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7f16\u8f91 CSS \u6837\u5f0f\u8868","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u76ee\u524d\u4e3a\u4e00\u822c\u8d34\u4e0a\u6a21\u5f0f\uff0c\u518d\u70b9\u70b9\u51fb\u4e00\u6b21\u5207\u6362\u56de\u7eaf\u6587\u672c\u8d34\u4e0a\u6a21\u5f0f\u3002","plaintext_mode_sticky":"\u76ee\u524d\u4e3a\u7eaf\u6587\u672c\u8d34\u4e0a\u6a21\u5f0f\uff0c\u518d\u70b9\u51fb\u4e00\u6b21\u5207\u6362\u56de\u4e00\u822c\u6a21\u5f0f\u3002","selectall_desc":"\u5168\u9009","paste_word_desc":"\u4ee5Word\u683c\u5f0f\u8d34\u4e0a","paste_text_desc":"\u4ee5\u7eaf\u6587\u672c\u8d34\u4e0a"},"paste_dlg":{"word_title":"\u7528 Ctrl+V \u5c06\u5185\u5bb9\u8d34\u4e0a\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7","text_title":"\u7528 Ctrl+V \u5c06\u5185\u5bb9\u8d34\u4e0a\u3002"},table:{"merge_cells_delta_height":"40","merge_cells_delta_width":"40","table_delta_height":"60","table_delta_width":"40","cellprops_delta_height":"10","cellprops_delta_width":"10",cell:"\u50a8\u5b58\u683c",col:"\u680f",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u9009\u62e9\u884c","cut_row_desc":"\u526a\u4e0b\u9009\u62e9\u884c","paste_row_after_desc":"\u5728\u4e0b\u65b9\u8d34\u4e0a\u884c","paste_row_before_desc":"\u5728\u4e0a\u65b9\u8d34\u4e0a\u884c","props_desc":"\u8868\u683c\u5c5e\u6027","cell_desc":"\u50a8\u5b58\u683c\u5c5e\u6027","row_desc":"\u884c\u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u50a8\u5b58\u683c","split_cells_desc":"\u5206\u5272\u50a8\u5b58\u683c","delete_col_desc":"\u5220\u9664\u76ee\u524d\u680f","col_after_desc":"\u5728\u53f3\u4fa7\u63d2\u5165\u680f","col_before_desc":"\u5728\u5de6\u4fa7\u63d2\u5165\u680f","delete_row_desc":"\u5220\u9664\u76ee\u524d\u884c","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u6062\u590d\u5148\u524d\u50a8\u5b58\u7684\u5185\u5bb9\uff0c\u60a8\u5c06\u5931\u53bb\u7f16\u8f91\u5668\u4e2d\u73b0\u6709\u7684\u5185\u5bb9\u3002 \n\n\u60a8\u786e\u5b9a\u8981\u6062\u590d\u5148\u524d\u50a8\u5b58\u7684\u5185\u5bb9\u5417\uff1f","restore_content":"\u6062\u590d\u81ea\u52a8\u50a8\u5b58\u7684\u5185\u5bb9\u3002","unload_msg":"\u60a8\u5c1a\u672a\u50a8\u5b58\u5185\u5bb9\uff0c\u60a8\u8f93\u5165\u7684\u5185\u5bb9\u53ef\u80fd\u4f1a\u4e22\u5931\u2026"},fullscreen:{desc:"\u5168\u8424\u5e55\u7f16\u8f91"},media:{edit:"\u7f16\u8f91\u5f71\u7247",desc:"\u63d2\u5165/\u7f16\u8f91\u5f71\u7247","delta_height":"","delta_width":""},fullpage:{desc:"\u6863\u6848\u5c5e\u6027","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9884\u8bbe\u6a21\u677f"},visualchars:{desc:"\u663e\u793a/\u9690\u85cf\u975e\u53ef\u89c1\u5b57\u7b26"},spellchecker:{desc:"\u5f00\u5173\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5b57\u68c0\u67e5\u8bbe\u5b9a","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8bed\u8a00",wait:"\u8bf7\u7a0d\u5019\u2026",sug:"\u5efa\u8bae","no_sug":"\u65e0\u5efa\u8bae","no_mpell":"\u65e0\u62fc\u5199\u9519\u8bef","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26\u53f7"},advlist:{types:"\u6837\u5f0f",def:"\u9884\u8bbe","lower_alpha":"\u5c0f\u5199\u7684\u82f1\u6587\u5b57","lower_greek":"\u5c0f\u5199\u7684\u5e0c\u814a\u6587\u5b57","lower_roman":"\u5c0f\u5199\u7684\u7f57\u9a6c\u6570\u5b57","upper_alpha":"\u5927\u5199\u7684\u82f1\u6587\u5b57","upper_roman":"\u5927\u5199\u7684\u7f57\u9a6c\u6570\u5b57",circle:"\u5706\u5708",disc:"\u5706\u70b9",square:"\u65b9\u5f62"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cn.js
new file mode 100644
index 000000000..070ef5087
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({cn:{common:{"more_colors":"\u66f4\u591a\u989c\u8272","invalid_data":"\u4f60\u8f93\u5165\u7684\u5185\u5bb9\u6709\u8bef\uff08\u7ea2\u8272\u90e8\u5206\uff09","popup_blocked":"\u4f60\u7684\u6d4f\u89c8\u5668\u7981\u6b62\u4e86\u5f39\u7a97\uff0c\u8bf7\u8bbe\u7f6e\u5145\u8bb8\u672c\u7ad9\uff0c\u4ee5\u4fbf\u7ee7\u7eed\u4f7f\u7528","clipboard_no_support":"\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u8be5\u529f\u80fd\uff0c\u8bf7\u7528\u5feb\u6377\u952e\u4ee3\u66ff\u3002","clipboard_msg":"\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u8be5\u529f\u80fd","not_set":"-- \u672a\u8bbe\u5b9a --","class_name":"\u7c7b\uff08Class\uff09",browse:"\u6d4f\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5e94\u7528","edit_confirm":"\u60a8\u662f\u5426\u613f\u610f\u542f\u7528\u6240\u89c1\u6240\u5f97\u6a21\u5f0f","invalid_data_number":"{#field} \u5fc5\u987b\u662f\u6570\u5b57","invalid_data_min":"{#field} \u5fc5\u987b\u662f\u6570\u5b57\u5e76\u4e14\u5927\u4e8e {#min}","invalid_data_size":"{#field} \u5fc5\u987b\u662f\u6570\u5b57\u6216\u767e\u5206\u6bd4",value:"(\u81ea\u5b9a\u503c)"},contextmenu:{full:"\u5de6\u53f3\u5bf9\u9f50",right:"\u53f3\u5bf9\u9f50",center:"\u5c45\u4e2d\u5bf9\u9f50",left:"\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50\u65b9\u5f0f"},insertdatetime:{"day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u53c1,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u6253\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u5efa\u5c42","absolute_desc":"\u5207\u6362\u5230\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u7f6e\u540e","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u65b0\u5c42"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u53d6\u6d88\u6240\u6709\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u683c\u5b57\u7b26"},iespell:{download:"\u62fc\u5199\u68c0\u67e5\u672a\u5b89\u88c5\uff0c\u662f\u5426\u7acb\u5373\u5b89\u88c5\uff1f","iespell_desc":"\u62fc\u5199\u68c0\u67e5"},advhr:{"delta_height":"\u9ad8\u5ea6","delta_width":"\u5bbd\u5ea6","advhr_desc":"\u6c34\u5e73\u7ebf"},emotions:{"delta_height":"\u8868\u60c5\u9ad8\u5ea6","delta_width":"\u8868\u60c5\u5bbd\u5ea6","emotions_desc":"\u8868\u60c5"},searchreplace:{"replace_desc":"\u67e5\u627e/\u66ff\u6362","delta_width":"\u67e5\u627e/\u66ff\u6362\u5bbd\u5ea6","delta_height":"\u67e5\u627e/\u66ff\u6362\u9ad8\u5ea6","search_desc":"\u67e5\u627e"},advimage:{"delta_width":"\u5bbd\u5ea6","image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","delta_height":"\u9ad8\u5ea6"},advlink:{"delta_height":"\u9ad8\u5ea6","delta_width":"\u5bbd\u5ea6","link_desc":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5"},xhtmlxtras:{"attribs_delta_height":"\u5c5e\u6027\u9ad8\u5ea6","attribs_delta_width":"\u5c5e\u6027\u5bbd\u5ea6","ins_delta_height":"\u63d2\u5165\u9ad8\u5ea6","ins_delta_width":"\u63d2\u5165\u5bbd\u5ea6","del_delta_height":"\u5220\u9664\u9ad8\u5ea6","del_delta_width":"\u5220\u9664\u5bbd\u5ea6","acronym_delta_height":"\u9996\u5b57\u6bcd\u7f29\u5199\u9ad8\u5ea6","acronym_delta_width":"\u9996\u5b57\u6bcd\u7f29\u5199\u5bbd\u5ea6","abbr_delta_height":"\u7f29\u5199\u9ad8\u5ea6","abbr_delta_width":"\u7f29\u5199\u5bbd\u5ea6","cite_delta_height":"\u5f15\u7528\u9ad8\u5ea6","cite_delta_width":"\u5f15\u7528\u5bbd\u5ea6","attribs_desc":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u6587"},style:{"delta_height":"\u98ce\u683c\u9ad8\u5ea6","delta_width":"\u98ce\u683c\u5bbd\u5ea6",desc:"\u7f16\u8f91CSS\u6837\u5f0f"},paste:{"plaintext_mode":"\u76ee\u524d\u4e3a\u4e00\u822c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u5207\u6362\u56de\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\u3002","plaintext_mode_sticky":"\u76ee\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u5207\u6362\u56de\u4e00\u822c\u7c98\u8d34\u6a21\u5f0f\u3002","selectall_desc":"\u5168\u9009","paste_word_desc":"\u4eceWord\u7c98\u8d34","paste_text_desc":"\u4ee5\u7eaf\u6587\u672c\u7c98\u8d34"},"paste_dlg":{"word_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u5185\u5bb9","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7","text_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u5185\u5bb9"},table:{"merge_cells_delta_height":"\u5408\u5e76\u9ad8\u5ea6","merge_cells_delta_width":"\u5408\u5e76\u5bbd\u5ea6","table_delta_height":"\u8868\u683c\u9ad8\u5ea6","table_delta_width":"\u8868\u683c\u5bbd\u5ea6","cellprops_delta_height":"\u5355\u5143\u683c\u9ad8\u5ea6","cellprops_delta_width":"\u5355\u5143\u683c\u5bbd\u5ea6","rowprops_delta_height":"\u884c\u9ad8","rowprops_delta_width":"\u884c\u5bbd",cell:"\u5355\u5143\u683c",col:"\u5217",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u6574\u884c","cut_row_desc":"\u526a\u5207\u884c","paste_row_after_desc":"\u5728\u884c\u540e\u7c98\u8d34","paste_row_before_desc":"\u5728\u884c\u524d\u7c98\u8d34","props_desc":"\u8868\u683c\u5c5e\u6027","cell_desc":"\u8868\u683c\u5143\u4ef6\u5c5e\u6027","row_desc":"\u884c\u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u8868\u683c\u5143\u4ef6","split_cells_desc":"\u5206\u5272\u5df2\u5408\u5e76\u5143\u4ef6","delete_col_desc":"\u5220\u9664\u5217","col_after_desc":"\u5728\u5217\u540e\u63d2\u5165","col_before_desc":"\u5728\u5217\u524d\u63d2\u5165","delete_row_desc":"\u5220\u9664\u884c","row_after_desc":"\u5728\u884c\u540e\u63d2\u5165","row_before_desc":"\u5728\u884c\u524d\u63d2\u5165",desc:"\u63d2\u5165\u65b0\u8868\u683c"},autosave:{"warning_message":"\u5982\u679c\u8fd8\u539f\u4fdd\u5b58\u7684\u5185\u5bb9\uff0c\u60a8\u5c06\u5931\u53bb\u5f53\u524d\u7f16\u8f91\u7684\u5185\u5bb9\u3002\\ n \\ n\u60a8\u786e\u5b9a\u8981\u6062\u590d\u4fdd\u5b58\u7684\u5185\u5bb9\uff1f","restore_content":"\u6062\u590d\u81ea\u52a8\u4fdd\u5b58\u5185\u5bb9\u3002","unload_msg":"\u5982\u679c\u60a8\u5173\u95ed\u5f53\u524d\u9875\u9762\uff0c\u60a8\u5c06\u5931\u53bb\u5f53\u524d\u6240\u6709\u66f4\u6539\u3002"},fullscreen:{desc:"\u5207\u6362\u5168\u5c4f\u6a21\u5f0f"},media:{"delta_height":"\u5a92\u4f53\u9ad8\u5ea6","delta_width":"\u5a92\u4f53\u5bbd\u5ea6",edit:"\u7f16\u8f91\u5d4c\u5165\u5f0f\u5a92\u4f53",desc:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5f0f\u5a92\u4f53"},fullpage:{desc:"\u6587\u6863\u5c5e\u6027","delta_width":"\u9ad8\u5ea6","delta_height":"\u5bbd\u5ea6"},template:{desc:"\u63d2\u5165\u9884\u8bbe\u6a21\u677f"},visualchars:{desc:"\u663e\u793a/\u9690\u85cf \u9690\u85cf\u5143\u7d20"},spellchecker:{desc:"\u5f00\u542f/\u5173\u95ed\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5199\u68c0\u67e5\u8bbe\u7f6e","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8bed\u8a00",wait:"\u8bf7\u7a0d\u5019...",sug:"\u5efa\u8bae","no_sug":"\u4e0d\u4f7f\u7528\u5efa\u8bae","no_mpell":"\u65e0\u62fc\u5199\u9519\u8bef","learn_word":"\u5b66\u4e60\u5355\u8bcd"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26"},advlist:{types:"\u7c7b\u578b",def:"\u9884\u8bbe","lower_alpha":"\u5c0f\u5199\u5b57\u6bcd","lower_greek":"\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd","lower_roman":"\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd","upper_alpha":"\u5927\u5199\u82f1\u6587\u5b57\u6bcd","upper_roman":"\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",circle:"\u5706\u5708",disc:"\u5706\u70b9",square:"\u65b9\u70b9"},colors:{"333300":"\u6df1\u6a44\u6984\u8272","993300":"\u7126\u6a59\u8272","000000":"\u9ed1\u8272","003300":"\u6df1\u7eff\u8272","003366":"\u6df1\u851a\u84dd","000080":"\u6d77\u519b\u84dd","333399":"\u975b\u9752","333333":"\u6697\u7070\u8272","800000":"\u6817\u8272",FF6600:"\u6a59\u8272","808000":"\u6a44\u6984\u8272","008000":"\u7eff\u8272","008080":"\u9752\u8272","0000FF":"\u84dd\u8272","666699":"\u7070\u84dd","808080":"\u7070\u8272",FF0000:"\u7ea2\u8272",FF9900:"\u7425\u73c0\u8272","99CC00":"\u9ec4\u7eff\u8272","339966":"\u6d77\u7eff\u8272","33CCCC":"\u7eff\u677e\u8272","3366FF":"\u5b9d\u84dd\u8272","800080":"\u7d2b\u8272","999999":"\u4e2d\u7070\u8272",FF00FF:"\u54c1\u7ea2\u8272",FFCC00:"\u91d1\u8272",FFFF00:"\u9ec4\u8272","00FF00":"\u77f3\u7070\u8272","00FFFF":"\u6d45\u9752\u8272","00CCFF":"\u5929\u84dd\u8272","993366":"\u8910\u8272",C0C0C0:"\u94f6\u8272",FF99CC:"\u7c89\u8272",FFCC99:"\u6843\u8272",FFFF99:"\u6d45\u9ec4\u8272",CCFFCC:"\u6de1\u7eff\u8272",CCFFFF:"\u5e15\u83b1\u9752\u8272","99CCFF":"\u6d45\u5929\u84dd",CC99FF:"\u6885\u8272",FFFFFF:"\u767d\u8272"},aria:{"rich_text_area":"\u5bcc\u6587\u672c\u533a"},wordcount:{words:"\u5b57\u6570:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cs.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cs.js
new file mode 100644
index 000000000..463dda8a6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({cs:{common:{"more_colors":"Dal\u0161\u00ed barvy","invalid_data":"Chyba: Byly zad\u00e1ny neplatn\u00e9 hodnoty a tyto byly ozna\u010deny \u010derven\u011b.","popup_blocked":"Omlouv\u00e1me se, ale blokov\u00e1n\u00ed vyskakovac\u00edch oken neumo\u017enilo otev\u0159\u00edt okno, kter\u00e9 poskytuje funk\u010dnost aplikace. Pro pln\u00e9 vyu\u017eit\u00ed mo\u017enost\u00ed aplikace mus\u00edte vypnout blokov\u00e1n\u00ed vyskakovac\u00edch oken pro tento web.","clipboard_no_support":"Tato funkce nen\u00ed va\u0161\u00edm prohl\u00ed\u017ee\u010dem podporov\u00e1na. Pou\u017eijte m\u00edsto toho kl\u00e1vesov\u00e9 zkratky.","clipboard_msg":"Funkce kop\u00edrovat/vyjmout/vlo\u017eit nejsou podporovan\u00e9 v prohl\u00ed\u017ee\u010d\u00edch Mozilla a Firefox.\nChcete v\u00edce informac\u00ed o tomto probl\u00e9mu?","not_set":"- Nenastaveno -","class_name":"T\u0159\u00edda",browse:"Proch\u00e1zet",close:"Zav\u0159\u00edt",cancel:"Storno",update:"Aktualizovat",insert:"Vlo\u017eit",apply:"Pou\u017e\u00edt","edit_confirm":"Chcete pou\u017e\u00edt WYSIWYG re\u017eim pro tento text?","invalid_data_number":"{#field} mus\u00ed b\u00fdt \u010d\u00edslo","invalid_data_min":"{#field} mus\u00ed b\u00fdt \u010d\u00edslo v\u011bt\u0161\u00ed ne\u017e {#min}","invalid_data_size":"{#field} mus\u00ed b\u00fdt \u010d\u00edslo nebo v procentech",value:"(hodnota)"},contextmenu:{full:"Do bloku",right:"Doprava",center:"Na st\u0159ed",left:"Doleva",align:"Zarovn\u00e1n\u00ed"},insertdatetime:{"day_short":"Ne,Po,\u00dat,St,\u010ct,P\u00e1,So,Ne","day_long":"Ned\u011ble,Pond\u011bl\u00ed,\u00dater\u00fd,St\u0159eda,\u010ctvrtek,P\u00e1tek,Sobota,Ned\u011ble","months_short":"Led,\u00dano,B\u0159e,Dub,Kv\u011b,\u010cer,\u010cvc,Srp,Z\u00e1\u0159,\u0158\u00edj,Lis,Pro","months_long":"Leden,\u00danor,B\u0159ezen,Duben,Kv\u011bten,\u010cerven,\u010cervenec,Srpen,Z\u00e1\u0159\u00ed,\u0158\u00edjen,Listopad,Prosinec","inserttime_desc":"Vlo\u017eit \u010das","insertdate_desc":"Vlo\u017eit datum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Tisk"},preview:{"preview_desc":"N\u00e1hled"},directionality:{"rtl_desc":"Sm\u011br zprava doleva","ltr_desc":"Sm\u011br zleva doprava"},layer:{content:"Nov\u00e1 vrstva...","absolute_desc":"P\u0159epnout na absolutn\u00ed pozicov\u00e1n\u00ed","backward_desc":"P\u0159esunout dozadu","forward_desc":"P\u0159esunout dop\u0159edu","insertlayer_desc":"Vlo\u017eit novou vrstvu"},save:{"save_desc":"Ulo\u017eit","cancel_desc":"Zru\u0161it v\u0161echny zm\u011bny"},nonbreaking:{"nonbreaking_desc":"Vlo\u017eit ned\u011blitelnou mezeru"},iespell:{download:"Slovn\u00edk ieSpell nebyl detekov\u00e1n. Chcete ho nainstalovat?","iespell_desc":"Spustit kontrolu pravopisu"},advhr:{"advhr_desc":"Vodorovn\u00fd odd\u011blova\u010d","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotikony","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Naj\u00edt/nahradit","search_desc":"Naj\u00edt","delta_width":"","delta_height":""},advimage:{"delta_width":"20","image_desc":"Vlo\u017eit/upravit obr\u00e1zek","delta_height":""},advlink:{"link_desc":"Vlo\u017eit/upravit odkaz","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Vlo\u017eit/upravit atributy","ins_desc":"P\u0159idan\u00fd text","del_desc":"Odstran\u011bn\u00fd text","acronym_desc":"Akronym","abbr_desc":"Zkratka","cite_desc":"Citace","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_width":"25",desc:"Upravit CSS styl","delta_height":""},paste:{"plaintext_mode":"Funkce vlo\u017eit je nyn\u00ed v re\u017eimu prost\u00fd text. Op\u011btovn\u00e9 kliknut\u00ed p\u0159epne tuto funkci zp\u011bt do norm\u00e1ln\u00edho re\u017eimu.","plaintext_mode_sticky":"Funkce vlo\u017eit je nyn\u00ed v re\u017eimu prost\u00fd text. Op\u011btovn\u00e9 kliknut\u00ed p\u0159epne tuto funkci zp\u011bt do norm\u00e1ln\u00edho re\u017eimu. Po vlo\u017een\u00ed \u010dehokoli bude tato funkce vr\u00e1cena zp\u011bt do norm\u00e1ln\u00edho re\u017eimu.","selectall_desc":"Vybrat v\u0161e","paste_word_desc":"Vlo\u017eit z Wordu","paste_text_desc":"Vlo\u017eit jako prost\u00fd text"},"paste_dlg":{"word_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna.","text_linebreaks":"Zachovat zalamov\u00e1n\u00ed \u0159\u00e1dk\u016f","text_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna."},table:{"table_delta_width":"50","cellprops_delta_width":"100",cell:"Bu\u0148ka",col:"Sloupec",row:"\u0158\u00e1dek",del:"Odstranit tabulku","copy_row_desc":"Kop\u00edrovat \u0159\u00e1dek tabulky","cut_row_desc":"Vyjmout \u0159\u00e1dek tabulky","paste_row_after_desc":"Vlo\u017eit \u0159\u00e1dek za","paste_row_before_desc":"Vlo\u017eit \u0159\u00e1dek p\u0159ed","props_desc":"Vlastnosti tabulky","cell_desc":"Vlastnosti bu\u0148ky","row_desc":"Vlastnosti \u0159\u00e1dku tabulky","merge_cells_desc":"Slou\u010dit bu\u0148ky","split_cells_desc":"Rozd\u011blit bu\u0148ky","delete_col_desc":"Odstranit sloupec tabulky","col_after_desc":"Vlo\u017eit sloupec za","col_before_desc":"Vlo\u017eit sloupec p\u0159ed","delete_row_desc":"Odstranit \u0159\u00e1dek tabulky","row_after_desc":"Vlo\u017eit \u0159\u00e1dek za","row_before_desc":"Vlo\u017eit \u0159\u00e1dek p\u0159ed",desc:"Vlo\u017eit novou tabulku","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Pokud obnov\u00edte ulo\u017een\u00fd obsah, ztrat\u00edte t\u00edm ve\u0161ker\u00fd obsah, kter\u00fd je pr\u00e1v\u011b v okn\u011b editoru.\n\nOpravdu chcete obnovit ulo\u017een\u00fd obsah?","restore_content":"Obnovit automaticky ulo\u017een\u00fd obsah.","unload_msg":"Proveden\u00e9 zm\u011bny mohou b\u00fdt ztraceny, jestli\u017ee opust\u00edte tuto str\u00e1nku."},fullscreen:{desc:"P\u0159epnout na celostr\u00e1nkov\u00e9 zobrazen\u00ed"},media:{"delta_width":"130",edit:"Upravit m\u00e9dia",desc:"Vlo\u017eit/upravit m\u00e9dia","delta_height":""},fullpage:{desc:"Vlastnosti dokumentu","delta_width":"110","delta_height":""},template:{desc:"Vlo\u017eit p\u0159eddefinovan\u00fd obsah ze \u0161ablony"},visualchars:{desc:"Zobrazen\u00ed skryt\u00fdch znak\u016f zap/vyp"},spellchecker:{desc:"P\u0159epnout kontrolu pravopisu",menu:"Nastaven\u00ed kontroly pravopisu","ignore_word":"Ignorovat slovo","ignore_words":"Ignorovat v\u0161e",langs:"Jazyky",wait:"\u010cekejte pros\u00edm...",sug:"N\u00e1pov\u011bda","no_sug":"\u017d\u00e1dn\u00e1 n\u00e1pov\u011bda","no_mpell":"Nebyly nalezeny \u017e\u00e1dn\u00e9 chyby.","learn_word":"Nau\u010dit slovo"},pagebreak:{desc:"Vlo\u017eit konec str\u00e1nky"},advlist:{types:"Typ",def:"V\u00fdchoz\u00ed","lower_alpha":"Mal\u00e1 p\u00edsmena","lower_greek":"Mal\u00e1 \u0159eck\u00e1 p\u00edsmena","lower_roman":"Mal\u00e9 \u0159\u00edmsk\u00e9 \u010d\u00edslice","upper_alpha":"Velk\u00e1 p\u00edsmena","upper_roman":"Velk\u00e9 \u0159\u00edmsk\u00e9 \u010d\u00edslice",circle:"Kole\u010dko",disc:"Punt\u00edk",square:"\u010ctvere\u010dek"},colors:{"333300":"Tmav\u011b olivov\u00e1","993300":"Tmav\u011b oran\u017eov\u00e1","000000":"\u010cern\u00e1","003300":"Tmav\u011b zelen\u00e1","003366":"Tmav\u011b azurov\u00e1","000080":"N\u00e1mo\u0159nick\u00e1 modr\u00e1","333399":"Indigo modr\u00e1","333333":"Tmav\u011b \u0161ed\u00e1","800000":"Tmav\u011b \u010derven\u00e1",FF6600:"Oran\u017eov\u00e1","808000":"Olivov\u00e1","008000":"Zelen\u00e1","008080":"Modrozelen\u00e1","0000FF":"Modr\u00e1","666699":"\u0160edomodr\u00e1","808080":"\u0160ed\u00e1",FF0000:"\u010cerven\u00e1",FF9900:"Jantarov\u00e1","99CC00":"\u017dlutozelen\u00e1","339966":"Mo\u0159sk\u00e1 zelen\u00e1","33CCCC":"Tyrkysov\u00e1","3366FF":"Kr\u00e1lovsk\u00e1 modr\u00e1","800080":"Nachov\u00e1","999999":"Sv\u011btle \u0161ed\u00e1",FF00FF:"Purpurov\u00e1",FFCC00:"Zlat\u00e1",FFFF00:"\u017dlut\u00e1","00FF00":"Limetkov\u00e1","00FFFF":"Vodn\u00ed","00CCFF":"Nebesk\u00e1 modr\u00e1","993366":"Hn\u011bd\u00e1",C0C0C0:"St\u0159\u00edbrn\u00e1",FF99CC:"R\u016f\u017eov\u00e1",FFCC99:"Broskvov\u00e1",FFFF99:"Sv\u011btle \u017elut\u00e1",CCFFCC:"Sv\u011btle zelen\u00e1",CCFFFF:"Sv\u011btle azurov\u00e1","99CCFF":"Sv\u011btl\u00e1 nebesk\u00e1 modr\u00e1",CC99FF:"\u0160vestkov\u00e1",FFFFFF:"B\u00edl\u00e1"},aria:{"rich_text_area":"Oblast s form\u00e1tovan\u00fdm textem"},wordcount:{words:"Po\u010det slov: "}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cy.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cy.js
new file mode 100644
index 000000000..51a6c0ea9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/cy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({cy:{common:{"more_colors":"Mwy o liwiau","invalid_data":"Gwall: Gwerthau allilys wedi mewnbynnu, mae\'r gwerthau yma wedi eu marcio mewn coch.","popup_blocked":"Rydym wedi sylwi fod eich popup-blocker wedi analluogi ffenest sy\'n darparu swyddogaeth cymhwysiad. Bydd rhaid i chi analluogi blocio popups ar gyfer y safle yma i ddefnyddio\'r offeryn yma.","clipboard_no_support":"Dim wedi\'i gynnal gan eich porwr, defnyddiwch Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Nid yw Cop\u00efo/Torri/Gludo ar gael mewn Mozilla a Firefox.\nYdych chi eisiau mwy o wybodaeth am y mater yma?","not_set":"-- Nid wedi osod --","class_name":"Dosbarth",browse:"Pori",close:"Cau",cancel:"Diddymu",update:"Diweddaru",insert:"Mewnosod",apply:"Gosod","edit_confirm":"Ydych chi eisiau defnyddio\'r modd WYSIWYG ar gyfer y textarea yma?","invalid_data_number":"Rhaid {#field} fod yn rhif","invalid_data_min":"Rhaid {#field} fod yn rhif fwy na {#min}","invalid_data_size":"Rhaid {#field} fod yn rhif neu ganran",value:"(gwerth)"},contextmenu:{full:"Llawn",right:"De",center:"Canol",left:"Chwith",align:"Aliniad"},insertdatetime:{"day_short":"Sul,Llu,Maw,Mer,Iau,Gwe,Sad,Sul","day_long":"Sul,Llun,Mawrth,Mercher,Iau,Gwener,Sadwrn,Sul","months_short":"Ion,Chw,Maw,Ebr,Mai,Meh,Gor,Aws,Med,Hyd,Tac,Rha","months_long":"Ionawr,Chwefror,Mawrth,Ebrill,Mai,Mehefin,Goffennaf,Awst,Medi,Hydref,Tachwedd,Rhagfyr","inserttime_desc":"Mewnosod amser","insertdate_desc":"Mewnosod dyddiad","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Argraffu"},preview:{"preview_desc":"Rhagolygu"},directionality:{"rtl_desc":"Cyfeiriad de i\'r chwith","ltr_desc":"Cyfeiriad chwith i\'r dde"},layer:{content:"Haen newydd...","absolute_desc":"Toglu lleoli absoliwt","backward_desc":"Symud n\u00f4l","forward_desc":"Symud ymlaen","insertlayer_desc":"Mewnosod haen newydd"},save:{"save_desc":"Cadw","cancel_desc":"Cadw pob newidiad"},nonbreaking:{"nonbreaking_desc":"Mewnosod n\u00f4d bwlch do-doriad"},iespell:{download:"ieSpell dim wedi\'i canfod. A ydych eisiau ei gosod rwan?","iespell_desc":"Rhedeg gwirio sillafu"},advhr:{"advhr_desc":"Mesurydd llorweddol","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emosiynau","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Canfod/Amnewid","search_desc":"Canfod","delta_width":"","delta_height":""},advimage:{"image_desc":"Mewnosod/golygu delwedd","delta_width":"","delta_height":""},advlink:{"link_desc":"Mewnosod/Golygu cyswllt","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Mewnosod/Golygu Priodoleddau","ins_desc":"Mewnosodiad","del_desc":"Dilead","acronym_desc":"Acronym","abbr_desc":"Talfyriad","cite_desc":"Dyfyniad","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Golygu Arddull CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Gludo rwan mewn modd testun plaen. Cliciwch eto i doglu n\u00f4l i fodd gludo normal.","plaintext_mode_sticky":"Gludo rwan mewn modd testun plaen. Cliciwch eto i doglu n\u00f4l i fodd gludo normal. Byddwch yn cael eich dychwelyd i fodd gludo normal ar \u00f4l gludo rhywbeth.","selectall_desc":"Dewis Pobpeth","paste_word_desc":"Gludo o Word","paste_text_desc":"Gludo fel Testun Plaen"},"paste_dlg":{"word_title":"Defnyddiwch CTRL+V ar eich bysellfwrdd i ludo\'r testun i fewn i\'r ffenest.","text_linebreaks":"Cadw toriadau llinell","text_title":"Defnyddiwch CTRL+V ar eich bysellfwrdd i ludo\'r testun i fewn i\'r ffenest."},table:{cell:"Cell",col:"Colofn",row:"Rhes",del:"Dileu tabl","copy_row_desc":"Cop\u00efo rhes tabl","cut_row_desc":"Torri rhes tabl","paste_row_after_desc":"Gludo rhes tabl ar \u00f4l","paste_row_before_desc":"Gludo rhes tabl cyn","props_desc":"Priodweddau tabl","cell_desc":"Priodweddau cell tabl","row_desc":"Priodweddau rhes tabl","merge_cells_desc":"Cyfuno celloedd tabl","split_cells_desc":"Hollti celloedd tabl cyfuniedig","delete_col_desc":"Tynnu colofn","col_after_desc":"Mewnosod colofn ar \u00f4l","col_before_desc":"Mewnosod colofn cyn","delete_row_desc":"Dileu rhes","row_after_desc":"Mewnosod rhes ar \u00f4l","row_before_desc":"Mewnosod rhes cyn",desc:"Mewnosod tabl newydd","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Os adferwch chi\'r cynnwys cadwedig, byddwch yn colli\'r holl cynnwys sydd yn bresennol yn y golygydd.\n\nA ydych chi\'n si\u0175r eich bod eisiau adfer y cynnwys cadwedig?.","restore_content":"Adfer cynnwys awto-cadwedig.","unload_msg":"Bydd eich newidiadau yn cael eu colli os byddwch yn llywio i ffwrdd o\'r tudalen yma."},fullscreen:{desc:"Togl Modd Sgrin Llawn"},media:{edit:"Golygu Cyfrwng a Fewnosodwyd",desc:"Mewnosod/Golygu Cyfrwng a Fewnosodwyd","delta_height":"","delta_width":""},fullpage:{desc:"Priodweddau dogfen","delta_width":"","delta_height":""},template:{desc:"Mewnosod cynnwys templed rhagosodol"},visualchars:{desc:"Nodau rheolaeth ymlaen/i ffwrdd."},spellchecker:{desc:"Toglu cywiriadau",menu:"Gosodiadau cywiriadau","ignore_word":"Anwybyddu gair","ignore_words":"Anwybyddu pob un",langs:"Ieithoedd",wait:"Aroswch, os gwelwch yn dda...",sug:"Awgrymiadau","no_sug":"Dim awgrymiadau","no_mpell":"Dim camsillafiadau wedi\'i canfod.","learn_word":"Dysgu gair"},pagebreak:{desc:"Mewnosod toriad tudalen."},advlist:{types:"Mathau",def:"Rhagosodedig","lower_alpha":"Alffa is","lower_greek":"Groegaiddd is","lower_roman":"Rhufeinig is","upper_alpha":"Alffa uwch","upper_roman":"Rhufeinig uwch",circle:"Cylch",disc:"Disg",square:"Sgw\u00e2r"},colors:{"333300":"Olif tywyll","993300":"Oren llosgedig","000000":"Du","003300":"Gwyrdd tywyll","003366":"Asur tywyll","000080":"Glas Nefi","333399":"Indigo","333333":"Llwyd tywyll iawn","800000":"Mar\u0175n",FF6600:"Oren","808000":"Olif","008000":"Gwyrdd","008080":"Teal","0000FF":"Glas","666699":"Glas llwydaidd","808080":"Llwyd",FF0000:"Coch",FF9900:"Melyngoch","99CC00":"Melyn gwyrdd","339966":"Gwyrdd y m\u00f4r","33CCCC":"Gwyrddlas","3366FF":"Glas brenhinol","800080":"Porffor","999999":"Llwyd canolig",FF00FF:"Magenta",FFCC00:"Aur",FFFF00:"Melyn","00FF00":"Leim","00FFFF":"Acwa","00CCFF":"Glas yr awyr","993366":"Brown",C0C0C0:"Arian",FF99CC:"Pinc",FFCC99:"Eirinen wlanog",FFFF99:"Melyn golau",CCFFCC:"Gwyrdd ysgafn",CCFFFF:"Cyan ysgafn","99CCFF":"Glas yr awyr golau",CC99FF:"Plwm",FFFFFF:"Gwyn"},aria:{"rich_text_area":"Ardal Testun Cyfoethog"},wordcount:{words:"Geiriau:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/da.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/da.js
new file mode 100644
index 000000000..36c75407d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/da.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({da:{common:{"more_colors":"Flere farver","invalid_data":"Fejl: Forkerte v\u00e6rdier indtastet i felter markeret med r\u00f8d.","popup_blocked":"Undskyld, men vi har noteret os, at din popup-blocker har forhindret et vindue, der giver programmet funktionalitet, at \u00e5bne op. Hvis du vil have den fulde funktionalitet, m\u00e5 du sl\u00e5 popup-blockeren fra for dette websted.","clipboard_no_support":"P\u00e5 nuv\u00e6rende tidspunkt ikke supporteret af din browser. Anvend i stedet genvejene p\u00e5 tastaturet.","clipboard_msg":"Kopier/Klip/inds\u00e6t er ikke muligt i Mozilla eller Firefox.\nVil du have mere information om dette emne?","not_set":"-- Ikke sat --","class_name":"Klasse",browse:"Gennemse",close:"Luk",cancel:"Annuller",update:"Opdater",insert:"Inds\u00e6t",apply:"Anvend","edit_confirm":"Vil du bruge den avancerede tekstredigering?","invalid_data_number":"{#field} skal v\u00e6re et tal","invalid_data_min":"{#field} skal v\u00e6re et tal {#min}","invalid_data_size":"{#field} skal v\u00e6re et tal eller en procentsats",value:"(v\u00e6rdi)"},contextmenu:{full:"Lige marginer",right:"H\u00f8jre",center:"Centreret",left:"Venstre",align:"Justering"},insertdatetime:{"day_short":"S\u00f8n,Man,Tir,Ons,Tors,Fre,L\u00f8r,S\u00f8n","day_long":"S\u00f8ndag,Mandag,Tirsdag,Onsdag,Torsdag,Fredag,L\u00f8rdag,S\u00f8ndag","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","months_long":"Januar,Februar,Marts,April,Maj,Juni,Juli,August,September,Oktober,November,December","inserttime_desc":"Inds\u00e6t klokkeslet","insertdate_desc":"Inds\u00e6t dato","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Udskriv"},preview:{"preview_desc":"Vis udskrift"},directionality:{"rtl_desc":"Retning h\u00f8jre mod venstre","ltr_desc":"Retning venstre mod h\u00f8jre"},layer:{content:"Nyt lag...","absolute_desc":"Sl\u00e5 absolut positionering til/fra","backward_desc":"Flyt bagud","forward_desc":"Flyt fremad","insertlayer_desc":"Inds\u00e6t nyt lag"},save:{"save_desc":"Gem","cancel_desc":"Annuller alle \u00e6ndringer"},nonbreaking:{"nonbreaking_desc":"Inds\u00e6t et blanktegn"},iespell:{download:"ieSpell blev ikke fundet. Vil du installere det nu?","iespell_desc":"Udf\u00f8r stavekontrol"},advhr:{"advhr_desc":"Horisontal linie","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hum\u00f8rikoner","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f8g/erstat","search_desc":"S\u00f8g","delta_width":"","delta_height":""},advimage:{"image_desc":"Inds\u00e6t/rediger billede","delta_width":"","delta_height":""},advlink:{"delta_width":"40","link_desc":"Inds\u00e6t/rediger link","delta_height":""},xhtmlxtras:{"attribs_desc":"Inds\u00e6t/rediger attributter","ins_desc":"Inds\u00e6ttelse","del_desc":"Sletning","acronym_desc":"Akronym","abbr_desc":"Forkortelse","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Rediger CSS stil","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Inds\u00e6t er nu i ikke-formateret modus. Klik igen for at skfite tilbage til almindelig inds\u00e6t modus.","plaintext_mode_sticky":"Inds\u00e6t er nu i ikke-formateret modus. Klik igen for at skfite tilbage til almindelig inds\u00e6t modus. Efter du har indsat noget s\u00e6ttes du automatisk tilbaeg til alminde inds\u00e6t modus.","selectall_desc":"V\u00e6lg alle","paste_word_desc":"Inds\u00e6t fra Word","paste_text_desc":"Inds\u00e6t ikke-formatteret tekst"},"paste_dlg":{"word_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten.","text_linebreaks":"Bevar linieskift","text_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten."},table:{cell:"Celle",col:"Kolonne",row:"R\u00e6kke",del:"Slet tabel","copy_row_desc":"Kopier r\u00e6kke","cut_row_desc":"Klip r\u00e6kke","paste_row_after_desc":"Inds\u00e6t r\u00e6kke efter","paste_row_before_desc":"Inds\u00e6t r\u00e6kke f\u00f8r","props_desc":"Tabelegenskaber","cell_desc":"Celleegenskaber","row_desc":"R\u00e6kkeegenskaber","merge_cells_desc":"Flet celler","split_cells_desc":"Opdel flettede celler","delete_col_desc":"Slet kolonne","col_after_desc":"Inds\u00e6t kolonne efter","col_before_desc":"Inds\u00e6t kolonne f\u00f8r","delete_row_desc":"Slet r\u00e6kke","row_after_desc":"Inds\u00e6t r\u00e6kke efter","row_before_desc":"Inds\u00e6t r\u00e6kke f\u00f8r",desc:"Inds\u00e6t tabel","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Hvis du genskaber det gemte indhold vil du miste al det indhold der lige nu er i editoren.nnEr du sikker p\u00e5 du vil genskabe det gemte indhold?","restore_content":"Genskab det gemte indhold.","unload_msg":"Har du foretaget nogle \u00e6ndringer, vil de g\u00e5 tabt, hvis du navigerer v\u00e6k fra denne side."},fullscreen:{desc:"Vis/skjul fuldsk\u00e6rmstilstand"},media:{edit:"Rediger indlejret mediefil",desc:"Inds\u00e6t/rediger indlejret mediefil","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentegenskaber","delta_width":"","delta_height":""},template:{desc:"Inds\u00e6t pr\u00e6defineret skabelonindhold"},visualchars:{desc:"Vis/Skjul visuelle kontroltegn."},spellchecker:{desc:"Vis/skjul stavekontrol",menu:"Indstillinger for stavekontrol","ignore_word":"Ignorer ord","ignore_words":"Ignorer alle",langs:"Sprog",wait:"Vent venligst...",sug:"Forslag","no_sug":"Ingen forslag","no_mpell":"Ingen stavefejl fundet.","learn_word":"L\u00e6r ordet"},pagebreak:{desc:"Inds\u00e6t sideskift."},advlist:{types:"Typer",def:"Standard","lower_alpha":"Sm\u00e5 alfa","lower_greek":"Sm\u00e5 gr\u00e6ske","lower_roman":"Sm\u00e5 romertal","upper_alpha":"Store alfa","upper_roman":"Store romertal",circle:"Cirkel",disc:"Prik",square:"Firkant"},colors:{"333300":"M\u00f8rk oliven","993300":"Br\u00e6ndt orange","000000":"Sort","003300":"M\u00f8rkegr\u00f8n","003366":"Bl\u00e5 azur","000080":"Navy bl\u00e5","333399":"Indigo","333333":"Meget m\u00f8rk gr\u00e5","800000":"Maroon",FF6600:"Orange","808000":"Oliven","008000":"Gr\u00f8n","008080":"Teal","0000FF":"Bl\u00e5","666699":"Gr\u00e5bl\u00e5","808080":"Gr\u00e5",FF0000:"R\u00f8d",FF9900:"Amber","99CC00":"Gulgr\u00f8n","339966":"S\u00f8gr\u00f8n","33CCCC":"Turkis","3366FF":"Royal bl\u00e5","800080":"Violet","999999":"Medium gr\u00e5",FF00FF:"Magenta",FFCC00:"Guld",FFFF00:"Gul","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Himmelbl\u00e5","993366":"Brun",C0C0C0:"S\u00f8lv",FF99CC:"Pink",FFCC99:"Fersken",FFFF99:"Lysgul",CCFFCC:"Bleggr\u00f8n",CCFFFF:"Pale cyan","99CCFF":"Lys himmelb\u00e6\u00e5",CC99FF:"Plum",FFFFFF:"Hvis"},aria:{"rich_text_area":"Tekstomr\u00e5de med formatering"},wordcount:{words:"Ord:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/de.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/de.js
new file mode 100644
index 000000000..149440626
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/de.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({de:{common:{"more_colors":"Weitere Farben","invalid_data":"Fehler: Sie haben ung\u00fcltige Werte eingegeben (rot markiert).","popup_blocked":"Leider hat Ihr Popup-Blocker ein Fenster unterbunden, das f\u00fcr den Betrieb dieses Programms n\u00f6tig ist. Bitte deaktivieren Sie den Popup-Blocker f\u00fcr diese Seite.","clipboard_no_support":"Wird derzeit in Ihrem Browser nicht unterst\u00fctzt. Bitte benutzen Sie stattdessen die Tastenk\u00fcrzel.","clipboard_msg":"Kopieren, Ausschneiden und Einf\u00fcgen sind im Mozilla Firefox nicht m\u00f6glich.\nM\u00f6chten Sie mehr \u00fcber dieses Problem erfahren?","not_set":"- unbestimmt -","class_name":"CSS-Klasse",browse:"Durchsuchen",close:"Schlie\u00dfen",cancel:"Abbrechen",update:"Aktualisieren",insert:"Einf\u00fcgen",apply:"\u00dcbernehmen","edit_confirm":"M\u00f6chten Sie diesen Text jetzt bearbeiten?","invalid_data_number":"{#field} muss eine Zahl sein","invalid_data_min":"{#field} muss eine Zahl gr\u00f6\u00dfer als {#min} sein","invalid_data_size":"{#field} muss eine Zahl oder ein Prozentwert sein",value:"(Wert)"},contextmenu:{full:"Blocksatz",right:"Rechtsb\u00fcndig",center:"Zentriert",left:"Linksb\u00fcndig",align:"Ausrichtung"},insertdatetime:{"day_short":"So,Mo,Di,Mi,Do,Fr,Sa,So","day_long":"Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag","months_short":"Jan,Feb,M\u00e4r,Apr,Mai,Juni,Juli,Aug,Sept,Okt,Nov,Dez","months_long":"Januar,Februar,M\u00e4rz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember","inserttime_desc":"Zeit einf\u00fcgen","insertdate_desc":"Datum einf\u00fcgen","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Drucken"},preview:{"preview_desc":"Vorschau"},directionality:{"rtl_desc":"Schrift von rechts nach links","ltr_desc":"Schrift von links nach rechts"},layer:{content:"Neue Ebene...","absolute_desc":"Absolute Positionierung","backward_desc":"Nach hinten legen","forward_desc":"Nach vorne holen","insertlayer_desc":"Neue Ebene einf\u00fcgen"},save:{"save_desc":"Speichern","cancel_desc":"Alle \u00c4nderungen verwerfen"},nonbreaking:{"nonbreaking_desc":"Gesch\u00fctztes Leerzeichen einf\u00fcgen"},iespell:{download:"ieSpell konnte nicht gefunden werden. Wollen Sie es installieren?","iespell_desc":"Rechtschreibpr\u00fcfung"},advhr:{"advhr_desc":"Trennlinie","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smilies","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Suchen/Ersetzen","search_desc":"Suchen","delta_width":"","delta_height":""},advimage:{"image_desc":"Bild einf\u00fcgen/ver\u00e4ndern","delta_width":"","delta_height":""},advlink:{"link_desc":"Link einf\u00fcgen/ver\u00e4ndern","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Attribute einf\u00fcgen/bearbeiten","ins_desc":"Eingef\u00fcgter Text","del_desc":"Entfernter Text","acronym_desc":"Akronym","abbr_desc":"Abk\u00fcrzung","cite_desc":"Quellenangabe","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS-Styles bearbeiten","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Einf\u00fcgemodus ist nun \"Nur Text\". Erneut klicken stellt den Normalmodus wieder her.","plaintext_mode_sticky":"Einf\u00fcgemodus ist nun \"Nur Text\". Erneut klicken (oder das Einf\u00fcgen aus der Zwischenablage) stellt den Normalmodus wieder her.","selectall_desc":"Alles ausw\u00e4hlen","paste_word_desc":"Mit Formatierungen (aus Word) einf\u00fcgen","paste_text_desc":"Als einfachen Text einf\u00fcgen"},"paste_dlg":{"word_title":"Dr\u00fccken Sie auf Ihrer Tastatur Strg+V, um den Text einzuf\u00fcgen.","text_linebreaks":"Zeilenumbr\u00fcche beibehalten","text_title":"Dr\u00fccken Sie auf Ihrer Tastatur Strg+V, um den Text einzuf\u00fcgen."},table:{"cellprops_delta_width":"150",cell:"Zelle",col:"Spalte",row:"Zeile",del:"Tabelle l\u00f6schen","copy_row_desc":"Zeile kopieren","cut_row_desc":"Zeile ausschneiden","paste_row_after_desc":"Zeile unterhalb aus der Zwischenablage einf\u00fcgen","paste_row_before_desc":"Zeile oberhalb aus der Zwischenablage einf\u00fcgen","props_desc":"Eigenschaften der Tabelle","cell_desc":"Eigenschaften der Zelle","row_desc":"Eigenschaften der Zeile","merge_cells_desc":"Zellen verbinden","split_cells_desc":"Verbundene Zellen trennen","delete_col_desc":"Spalte l\u00f6schen","col_after_desc":"Spalte rechts einf\u00fcgen","col_before_desc":"Spalte links einf\u00fcgen","delete_row_desc":"Zeile l\u00f6schen","row_after_desc":"Zeile unterhalb einf\u00fcgen","row_before_desc":"Zeile oberhalb einf\u00fcgen",desc:"Tabelle erstellen/bearbeiten","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Wenn Sie den Inhalt wiederherstellen, gehen die aktuellen Daten im Editor verloren.\n\nSind sie sicher, dass Sie den Inhalt wiederherstellen m\u00f6chten?","restore_content":"Automatisch gespeicherten Inhalt wiederherstellen.","unload_msg":"Ihre \u00c4nderungen werden verloren gehen, wenn Sie die Seite verlassen."},fullscreen:{desc:"Vollbildschirm"},media:{edit:"Multimediaeinbettung bearbeiten",desc:"Multimedia einbetten/bearbeiten","delta_height":"","delta_width":""},fullpage:{desc:"Dokument-Eigenschaften","delta_width":"","delta_height":""},template:{desc:"Inhalt aus Vorlage einf\u00fcgen"},visualchars:{desc:"Sichtbarkeit der Steuerzeichen an/aus"},spellchecker:{desc:"Rechtschreibpr\u00fcfung an/aus",menu:"Einstellungen der Rechtschreibpr\u00fcfung","ignore_word":"Wort ignorieren","ignore_words":"Alle ignorieren",langs:"Sprachen",wait:"Bitte warten...",sug:"Vorschl\u00e4ge","no_sug":"Keine Vorschl\u00e4ge","no_mpell":"Keine Rechtschreibfehler gefunden.","learn_word":"Zum W\u00f6rterbuch hinzuf\u00fcgen"},pagebreak:{desc:"Seitenumbruch einf\u00fcgen"},advlist:{types:"Typen",def:"Standard","lower_alpha":"a. b. c.","lower_greek":"1. 2. 3.","lower_roman":"i. ii. iii.","upper_alpha":"A. B. C.","upper_roman":"I. II. III.",circle:"Kreis",disc:"Punkt",square:"Quadrat"},colors:{"333300":"Dunkeloliv","993300":"Orange","000000":"Schwarz","003300":"Dunkelgr\u00fcn","003366":"Dunkles himmelblau","000080":"Marineblau","333399":"Indigoblau","333333":"Sehr dunkelgrau","800000":"Kastanienbraun",FF6600:"Orange","808000":"Oliv","008000":"Gr\u00fcn","008080":"Blaugr\u00fcn","0000FF":"Blau","666699":"Graublau","808080":"Grau",FF0000:"Rot",FF9900:"Bernsteinfarben","99CC00":"Gelbgr\u00fcn","339966":"Meergr\u00fcn","33CCCC":"T\u00fcrkis","3366FF":"K\u00f6nigsblau","800080":"Violett","999999":"Mittelgrau",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Gelb","00FF00":"Hellgr\u00fcn","00FFFF":"Aquamarinblau","00CCFF":"Himmelblau","993366":"Braun",C0C0C0:"Silber",FF99CC:"Rosa",FFCC99:"Pfirsichfarben",FFFF99:"Hellgelb",CCFFCC:"Blassgr\u00fcn",CCFFFF:"Blasst\u00fcrkis","99CCFF":"Helles himmelblau",CC99FF:"Pflaumenblau",FFFFFF:"Wei\u00df"},aria:{"rich_text_area":"Rich Text Bereich"},wordcount:{words:"W\u00f6rter: "}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/dv.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/dv.js
new file mode 100644
index 000000000..950e8c9eb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/dv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({dv:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"\u0789\u07a8\u0788\u07a6\u078e\u07aa\u078c\u07aa \u078c\u07a8\u0794\u07a6\u0784\u07ad\u078a\u07aa\u0785\u07a7\u078e\u07ac \u0784\u07b0\u0783\u07a6\u0787\u07aa\u0792\u07a6\u0783\u07aa \u0790\u07a6\u0795\u07af\u0793\u07b0 \u0782\u07aa\u0786\u07aa\u0783\u07a7\u078c\u07a9\u0788\u07ac \u0786\u07a9\u0784\u07af\u0791\u07b0\u078e\u07ac \u0786\u07a9\u078c\u07a6\u0787\u07b0 \u0784\u07ad\u0782\u07aa\u0782\u07b0\u0786\u07aa\u0783\u07a6\u0787\u07b0\u0788\u07a7.","clipboard_msg":"\u0789\u07ae\u0792\u07a8\u0787\u07b0\u078d\u07a7 \u0787\u07a6\u078b\u07a8 \u078a\u07a6\u0794\u07a7\u0783\u078a\u07ae\u0786\u07b0\u0790\u07b0\u078e\u07a6\u0787\u07a8 \u0786\u07ae\u0795\u07a9/\u0786\u07a6\u0793\u07b0/\u0795\u07ad\u0790\u07b0\u0793\u07b0 \u0782\u07aa\u0786\u07aa\u0783\u07ac\u0788\u07ac.\n \u0789\u07a8\u0789\u07a6\u0787\u07b0\u0790\u07a6\u078d\u07a6 \u0787\u07a8\u078c\u07aa\u0783\u07a6\u0781\u07b0 \u0787\u07ae\u0785\u07aa\u0782\u07b0\u078a\u07a8\u078d\u07aa\u0788\u07aa\u0789\u07a6\u0781\u07b0 \u0784\u07ad\u0782\u07aa\u0782\u07b0\u078a\u07aa\u0785\u07aa\u0788\u07ad\u078c\u07a6\u061f","not_set":"-- \u0780\u07a6\u0789\u07a6\u0787\u07ac\u0787\u07b0 \u0782\u07aa\u0796\u07ac\u0780\u07ac --","class_name":"\u0786\u07b0\u078d\u07a7\u0790\u07b0",browse:"\u0784\u07a6\u0787\u07b0\u078d\u07a6\u0788\u07a7",close:"\u0782\u07a8\u0789\u07aa\u0782\u07a9",cancel:"\u0786\u07ac\u0782\u07b0\u0790\u07a6\u078d\u07b0",update:"\u0784\u07a6\u078b\u07a6\u078d\u07aa\u0786\u07aa\u0783\u07a6\u0787\u07b0\u0788\u07a7",insert:"\u0787\u07a8\u078c\u07aa\u0783\u07aa\u0786\u07aa\u0783\u07a6\u0787\u07b0\u0788\u07a7",apply:"\u0790\u07ad\u0788\u07b0","edit_confirm":"\u0789\u07a8\u0793\u07ac\u0786\u07b0\u0793\u07b0\u0790\u07b0\u0784\u07ae\u0786\u07b0\u0790\u07b0\u078e\u07a6\u0787\u07a8 \u0787\u07ac\u0791\u07a8\u0793\u07a7\u0783 \u0784\u07ad\u0782\u07aa\u0782\u07b0\u0786\u07aa\u0783\u07a6\u0782\u07b0 \u0784\u07ad\u0782\u07aa\u0782\u07b0\u078a\u07aa\u0785\u07aa\u078c\u07af\u061f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/el.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/el.js
new file mode 100644
index 000000000..084193b85
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/el.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({el:{common:{"more_colors":"\u03a0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03b1","invalid_data":"Error: Invalid values entered, these are marked in red.","popup_blocked":"\u0388\u03bd\u03b1 popup-blocker \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9 \u03ad\u03bd\u03b1 \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf \u03b1\u03c0\u03b1\u03c1\u03b1\u03af\u03c4\u03b7\u03c4\u03bf \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae. \u03a0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03c4\u03bf \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b9\u03c3\u03c4\u03bf\u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03b1\u03c5\u03c4\u03ae \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c0\u03bb\u03ae\u03c1\u03c9\u03c2 \u03c4\u03b7\u03bd \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae.","clipboard_no_support":"\u0394\u03b5\u03bd \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03c6\u03c5\u03bb\u03bb\u03bf\u03bc\u03b5\u03c4\u03c1\u03b7\u03c4\u03ae \u03c3\u03b1\u03c2, \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03af\u03bf\u03c5.","clipboard_msg":"\u039f\u03b9 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b5\u03c2 \u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae/\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae/\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b5\u03c2 \u03c3\u03b5 Mozilla \u03ba\u03b1\u03b9 Firefox.\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 ;","not_set":"-- \u039c\u03b7 \u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf --","class_name":"\u039a\u03bb\u03ac\u03c3\u03b7",browse:"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7",close:"\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf",cancel:"\u0386\u03ba\u03c5\u03c1\u03bf",update:"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7",insert:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae",apply:"\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae","edit_confirm":"\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 WYSIWYG ;","invalid_data_number":"{#field} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2","invalid_data_min":"{#field} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03bc\u03b5\u03b3\u03b1\u03bb\u03cd\u03c4\u03b5\u03c1\u03bf\u03c2 \u03c4\u03bf\u03c5 {#min}","invalid_data_size":"{#field} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03ae \u03c0\u03bf\u03c3\u03bf\u03c3\u03c4\u03cc",value:"(value)"},contextmenu:{full:"\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2",right:"\u0394\u03b5\u03be\u03b9\u03ac",center:"\u039a\u03ad\u03bd\u03c4\u03c1\u03bf",left:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",align:"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7"},insertdatetime:{"day_short":"\u039a\u03c5,\u0394\u03b5,\u03a4\u03c1,\u03a4\u03b5\u03c4,\u03a0\u03ad\u03bc,\u03a0\u03b1\u03c1,\u03a3\u03b1\u03b2","day_long":"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae,\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1,\u03a4\u03c1\u03af\u03c4\u03b7,\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7,\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7,\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae,\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf","months_short":"\u0399\u03b1\u03bd,\u03a6\u03b5\u03b2,\u039c\u03ac\u03c1,\u0391\u03c0\u03c1,\u039c\u03ac\u03b9,\u0399\u03bf\u03cd\u03bd,\u0399\u03bf\u03cd\u03bb,\u0391\u03cd\u03b3,\u03a3\u03b5\u03c0,\u039f\u03ba\u03c4,\u039d\u03bf\u03ad,\u0394\u03b5\u03ba","months_long":"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2,\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2,\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2,\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2,\u039c\u03ac\u03b9\u03bf\u03c2,\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2,\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2,\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2,\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2,\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2,\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2,\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2","inserttime_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03ce\u03c1\u03b1\u03c2","insertdate_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b7\u03bc\u03ad\u03c1\u03b1\u03c2","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7"},preview:{"preview_desc":"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7"},directionality:{"rtl_desc":"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b4\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","ltr_desc":"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac"},layer:{content:"\u039d\u03ad\u03bf layer...","absolute_desc":"\u0391\u03c0\u03cc\u03bb\u03c5\u03c4\u03b7/\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ae \u03c4\u03bf\u03c0\u03bf\u03b8\u03ad\u03c4\u03b7\u03c3\u03b7","backward_desc":"\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03b1\u03c3\u03ba\u03ae\u03bd\u03b9\u03bf","forward_desc":"\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c0\u03c1\u03bf\u03c3\u03ba\u03ae\u03bd\u03b9\u03bf","insertlayer_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03bd\u03ad\u03bf\u03c5 layer"},save:{"save_desc":"\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7","cancel_desc":"\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03b1\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd"},nonbreaking:{"nonbreaking_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae non-breaking \u03ba\u03b5\u03bd\u03bf\u03cd \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1"},iespell:{download:"\u03a4\u03bf ieSpell \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5. \u039d\u03b1 \u03ba\u03b1\u03c4\u03ad\u03b2\u03b5\u03b9 \u03c4\u03ce\u03c1\u03b1 ;","iespell_desc":"\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5 \u03bf\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03af\u03b1\u03c2"},advhr:{"advhr_desc":"\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u03a3\u03c5\u03bd\u03b1\u03b9\u03c3\u03b8\u03ae\u03bc\u03b1\u03c4\u03b1","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7/\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7","search_desc":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7","delta_width":"","delta_height":""},advimage:{"image_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","delta_width":"","delta_height":""},advlink:{"delta_width":"50","link_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","delta_height":""},xhtmlxtras:{"attribs_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b9\u03b4\u03b9\u03bf\u03c4\u03ae\u03c4\u03c9\u03bd","ins_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae","del_desc":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae","acronym_desc":"\u0391\u03ba\u03c1\u03bf\u03bd\u03cd\u03bc\u03b9\u03bf","abbr_desc":"\u03a3\u03c5\u03bd\u03c4\u03bf\u03bc\u03bf\u03b3\u03c1\u03b1\u03c6\u03af\u03b1","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03a3\u03c4\u03c5\u03bb CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u0397 \u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03ce\u03c1\u03b1 \u03c3\u03b5 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03bb\u03bf\u03cd \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03be\u03b1\u03bd\u03ac \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03c0\u03b1\u03bd\u03ad\u03bb\u03b8\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03ba\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03ae \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7\u03c2.","plaintext_mode_sticky":"\u0397 \u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03ce\u03c1\u03b1 \u03c3\u03b5 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03bb\u03bf\u03cd \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03be\u03b1\u03bd\u03ac \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03c0\u03b1\u03bd\u03ad\u03bb\u03b8\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03ba\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03ae \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7\u03c2. \u0391\u03c6\u03bf\u03cd \u03b5\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03ae\u03c3\u03b5\u03c4\u03b5 \u03ba\u03ac\u03c4\u03b9 \u03b8\u03b1 \u03b5\u03c0\u03b9\u03c3\u03c4\u03c1\u03ad\u03c8\u03b5\u03c4\u03b5 \u03c3\u03b5 \u03ba\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03ae \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03b7\u03c3\u03b7\u03c2.","selectall_desc":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03cc\u03bb\u03c9\u03bd","paste_word_desc":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b1\u03c0\u03cc \u03c4\u03bf Word","paste_text_desc":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c9\u03c2 \u03b1\u03c0\u03bb\u03cc \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf"},"paste_dlg":{"word_title":"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 CTRL+V \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf.","text_linebreaks":"\u039d\u03b1 \u03ba\u03c1\u03b1\u03c4\u03b7\u03b8\u03bf\u03cd\u03bd \u03c4\u03b1 linebreaks","text_title":"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 CTRL+V \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf."},table:{"cellprops_delta_width":"60",cell:"\u039a\u03b5\u03bb\u03af",col:"\u03a3\u03c4\u03ae\u03bb\u03b7",row:"\u0393\u03c1\u03b1\u03bc\u03bc\u03ae",del:"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","copy_row_desc":"\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","cut_row_desc":"\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","paste_row_after_desc":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1 \u03bc\u03b5\u03c4\u03ac","paste_row_before_desc":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1 \u03c0\u03c1\u03b9\u03bd","props_desc":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","cell_desc":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_desc":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","merge_cells_desc":"\u03a3\u03c5\u03b3\u03c7\u03ce\u03bd\u03b5\u03c5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","split_cells_desc":"\u0394\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03c5\u03b3\u03c7\u03c9\u03bd\u03b5\u03c5\u03bc\u03ad\u03bd\u03c9\u03bd \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","delete_col_desc":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2","col_after_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03bc\u03b5\u03c4\u03ac","col_before_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03c0\u03c1\u03b9\u03bd","delete_row_desc":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","row_after_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03bc\u03b5\u03c4\u03ac","row_before_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03c1\u03b9\u03bd",desc:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03bd\u03ad\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u0395\u03ac\u03bd \u03b5\u03c0\u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf, \u03b8\u03b1 \u03c7\u03ac\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03c0\u03bf\u03c5 \u03b2\u03c1\u03af\u03c3\u03ba\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7 \u03c3\u03c4\u03b9\u03b3\u03bc\u03ae \u03c3\u03c4\u03bf\u03bd editor.nn\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03bd\u03b1 \u03b3\u03af\u03bd\u03b5\u03b9 \u03b5\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c4\u03bf\u03c5 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5;.","restore_content":"\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c0\u03bf\u03c5 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03b8\u03b7\u03ba\u03b5 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1.","unload_msg":"\u039f\u03b9 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2 \u03c0\u03bf\u03c5 \u03ba\u03ac\u03bd\u03b1\u03c4\u03b5 \u03b8\u03b1 \u03c7\u03b1\u03b8\u03bf\u03cd\u03bd \u03b1\u03bd \u03c6\u03cd\u03b3\u03b5\u03c4\u03b5 \u03c3\u03b5 \u03ac\u03bb\u03bb\u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1."},fullscreen:{desc:"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03c0\u03bb\u03ae\u03c1\u03bf\u03c5\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7\u03c2"},media:{"delta_width":"50",edit:"\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03c9\u03bd media",desc:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03c9\u03bd media","delta_height":""},fullpage:{desc:"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c6\u03bf\u03c5","delta_width":"140","delta_height":""},template:{desc:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03c0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf"},visualchars:{desc:"\u039f\u03c0\u03c4\u03b9\u03ba\u03bf\u03af \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b5\u03c2 \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5 \u03bd\u03b1\u03b9/\u03cc\u03c7\u03b9."},spellchecker:{desc:"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03bf\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03bf\u03cd \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5",menu:"\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03bf\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03bf\u03cd \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5","ignore_word":"\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7 \u03bb\u03ad\u03be\u03b7\u03c2","ignore_words":"\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7 \u03cc\u03bb\u03c9\u03bd",langs:"\u0393\u03bb\u03ce\u03c3\u03c3\u03b5\u03c2",wait:"\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03c0\u03b5\u03c1\u03b9\u03bc\u03ad\u03bd\u03b5\u03c4\u03b5...",sug:"\u03a0\u03c1\u03bf\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2","no_sug":"\u03a7\u03c9\u03c1\u03af\u03c2 \u03c0\u03c1\u03bf\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2","no_mpell":"\u0394\u03b5 \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03bf\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03ac \u03bb\u03ac\u03b8\u03b7.","learn_word":"\u0395\u03ba\u03bc\u03ac\u03b8\u03b7\u03c3\u03b7 \u03bb\u03ad\u03be\u03b7\u03c2"},pagebreak:{desc:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2."},advlist:{def:"\u03a0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf",circle:"\u039a\u03cd\u03ba\u03bb\u03bf\u03c2",disc:"\u0394\u03af\u03c3\u03ba\u03bf\u03c2",square:"\u03a4\u03b5\u03c4\u03c1\u03ac\u03b3\u03c9\u03bd\u03bf",types:"Types","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman"},colors:{"000000":"\u039c\u03b1\u03cd\u03c1\u03bf",FF6600:"\u03a0\u03bf\u03c1\u03c4\u03bf\u03ba\u03b1\u03bb\u03af","008000":"\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf","0000FF":"\u039c\u03c0\u03bb\u03ad","808080":"\u0393\u03ba\u03c1\u03af",FF0000:"\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf","800080":"\u039c\u03ce\u03b2",FFCC00:"\u03a7\u03c1\u03c5\u03c3\u03cc",FFFF00:"\u039a\u03af\u03c4\u03c1\u03b9\u03bd\u03bf","993366":"\u039a\u03b1\u03c6\u03ad",C0C0C0:"\u0391\u03c3\u03b9\u03bc\u03ad\u03bd\u03b9\u03bf",FF99CC:"\u03a1\u03cc\u03b6",FFFFFF:"\u0386\u03c3\u03c0\u03c1\u03bf","333300":"Dark olive","993300":"Burnt orange","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon","808000":"Olive","008080":"Teal","666699":"Grayish blue",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","999999":"Medium gray",FF00FF:"Magenta","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"\u039b\u03ad\u03be\u03b5\u03b9\u03c2:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/en.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/en.js
new file mode 100644
index 000000000..16d7a93e0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/en.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({en:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert Time","insertdate_desc":"Insert Date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction Right to Left","ltr_desc":"Direction Left to Right"},layer:{content:"New layer...","absolute_desc":"Toggle Absolute Positioning","backward_desc":"Move Backward","forward_desc":"Move Forward","insertlayer_desc":"Insert New Layer"},save:{"save_desc":"Save","cancel_desc":"Cancel All Changes"},nonbreaking:{"nonbreaking_desc":"Insert Non-Breaking Space Character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Check Spelling"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Insert Horizontal Line"},emotions:{"delta_height":"","delta_width":"","emotions_desc":"Emotions"},searchreplace:{"replace_desc":"Find/Replace","delta_width":"","delta_height":"","search_desc":"Find"},advimage:{"delta_width":"","image_desc":"Insert/Edit Image","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Insert/Edit Link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation"},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"Cell",col:"Column",row:"Row",del:"Delete Table","copy_row_desc":"Copy Table Row","cut_row_desc":"Cut Table Row","paste_row_after_desc":"Paste Table Row After","paste_row_before_desc":"Paste Table Row Before","props_desc":"Table Properties","cell_desc":"Table Cell Properties","row_desc":"Table Row Properties","merge_cells_desc":"Merge Table Cells","split_cells_desc":"Split Merged Table Cells","delete_col_desc":"Delete Column","col_after_desc":"Insert Column After","col_before_desc":"Insert Column Before","delete_row_desc":"Delete Row","row_after_desc":"Insert Row After","row_before_desc":"Insert Row Before",desc:"Insert/Edit Table"},autosave:{"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?","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle Full Screen Mode"},media:{"delta_height":"","delta_width":"",edit:"Edit Embedded Media",desc:"Insert/Edit Embedded Media"},fullpage:{desc:"Document Properties","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"Toggle Spell Checker",menu:"Spell Checker Settings","ignore_word":"Ignore Word","ignore_words":"Ignore All",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No Suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert Page Break for Printing"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/eo.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/eo.js
new file mode 100644
index 000000000..8a5b4554f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/eo.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({eo:{common:{"more_colors":"Pliaj koloroj","invalid_data":"Eraro: Nevalidaj valoroj estas ru\u011dmarkitaj.","popup_blocked":"Oni detektis ke via retumilo baris fenestron kiu estas esenca por la programo. Vi bezonas malaktivigi la \u015dprucfenestroblokilo por uzi \u0109i tiun ilon.","clipboard_no_support":"Via retumilo ne subtenas \u0109i tiun eblon. Uzu la klavkombinojn.","clipboard_msg":"Kopii/eltondi/alglui ne estas disponeblaj en Mozilla nek Firefox.\n\u0108u vi volas pliajn informojn pri \u0109i tiu problemo?","not_set":"-- N/A --","class_name":"Klaso",browse:"Ser\u0109i",close:"Fermi",cancel:"Rezigni",update:"\u011cisdatigi",insert:"Enmeti",apply:"Apliki","edit_confirm":"\u0108u vi volas uzi la spertan redaktre\u011dimon en \u0109i tiu tekstokampo?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u011cisrandigite",right:"Dekstre",center:"Centre",left:"Maldekstre",align:"Liniigo"},insertdatetime:{"day_short":"Dim,Lun,Mar,Mer,\u0134a\u016d,Ven,Sab,Dim","day_long":"Diman\u0109o,Lundo,Mardo,Merkredo,\u0134a\u016ddo,Vendredo,Sabato,Diman\u0109o","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,A\u016dg,Sep,Okt,Nov,Dec","months_long":"Januaro,Februaro,Marto,Aprilo,Majo,Junio,Julio,A\u016dgusto,Septembro,Oktobro,Novembro,Decembro","inserttime_desc":"Enmeti horon","insertdate_desc":"Enmeti daton","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Presi"},preview:{"preview_desc":"Anta\u016dvidi"},directionality:{"rtl_desc":"Dekstre-Maldekstren","ltr_desc":"Maldekstre-Dekstren"},layer:{content:"Nova tavolo...","absolute_desc":"\u015can\u011di al absoluta pozicio","backward_desc":"Movi malanta\u016den","forward_desc":"Movi anta\u016den","insertlayer_desc":"Enmeti novan tavolon"},save:{"save_desc":"Konservi","cancel_desc":"Nuligi \u0109iujn \u015dan\u011dojn"},nonbreaking:{"nonbreaking_desc":"Enmeti nerompeblan spaceton"},iespell:{download:"Kromprogramo por literumado ne detektita. \u0108u vi volas instali \u011din nun?","iespell_desc":"Kontroli literumadon"},advhr:{"advhr_desc":"Horizontala disigilo","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Viza\u011detoj","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Ser\u0109i/anstata\u016digi","search_desc":"Ser\u0109i","delta_width":"","delta_height":""},advimage:{"image_desc":"Enmeti/redakti","delta_width":"","delta_height":""},advlink:{"link_desc":"Enmeti/redakti","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Enmeti/Redakti atributojn","ins_desc":"Enmeti","del_desc":"Forvi\u015di","acronym_desc":"Akronimo","abbr_desc":"Mallongigo","cite_desc":"Cita\u0135o","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Redakti CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"La alglukomando estas en re\u011dimo de plata teksto. Klaku denove por reveni al la normala re\u011dimo.","plaintext_mode_sticky":"La alglukomando estas en re\u011dimo de plata teksto. Klaku denove por reveni al la normala re\u011dimo. Post algluo \u011di revenos al la normala re\u011dimo.","selectall_desc":"Elekti \u0109ion","paste_word_desc":"Alglui (kopiita el WORD)","paste_text_desc":"Alglui kiel platan tekston"},"paste_dlg":{"word_title":"Uzu CTRL V por alglui tekston en la fenestron.","text_linebreaks":"Konservi linisaltojn","text_title":"Uzu CTRL V por alglui tekston en la fenestron."},table:{cell:"\u0108elo",col:"Kolumno",row:"Linio",del:"Forvi\u015di tabelon","copy_row_desc":"Kopii linion","cut_row_desc":"Eltondi linion","paste_row_after_desc":"Alglui linion poste","paste_row_before_desc":"Alglui linion anta\u016de","props_desc":"Atributoj de tabelo","cell_desc":"Atributoj de \u0109eloj","row_desc":"Atributoj de liniioj","merge_cells_desc":"Unuigi \u0109elojn","split_cells_desc":"Dividi \u0109elojn","delete_col_desc":"Forigi kolumnon","col_after_desc":"Enmeti kolumnon poste","col_before_desc":"Enmeti kolumnon anta\u016de","delete_row_desc":"Forvi\u015di linion","row_after_desc":"Enmeti linion poste","row_before_desc":"Enmeti linion anta\u016de",desc:"Enmeti novan tabelon","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Se vi resta\u016dros la enhavon, vi perdos \u0109ion kio estas aktuale en la redaktilo.\n\n\u0108u vi certas ke vi volas resta\u016dri la konservitan enhavon?","restore_content":"Resta\u016dras la enhavon a\u016dtomate konservitan.","unload_msg":"Vi perdos la faritajn \u015dan\u011dojn se vi eliros \u0109i tiun pa\u011don."},fullscreen:{desc:"Plenekrane"},media:{edit:"Redakti enhavon enkonstruitan",desc:"Enmeti/Redakti enhavon enkonstruitan","delta_height":"","delta_width":""},fullpage:{desc:"Atributoj de la dokumento","delta_width":"","delta_height":""},template:{desc:"Enmeti \u015dablonon"},visualchars:{desc:"Vidkontrolkodoj \u015daltitaj/mal\u015daltitaj"},spellchecker:{desc:"(Mal)\u015calti literumadon",menu:"Agordoj pri ortografio","ignore_word":"Ignori vorton","ignore_words":"Ignori \u0109ion",langs:"Lingvoj",wait:"Atendu...",sug:"Sugestoj","no_sug":"Sen sugestoj","no_mpell":"Neniu ortografieraro trovita.","learn_word":"Learn word"},pagebreak:{desc:"Enmeti pa\u011dosalton."},advlist:{types:"Tipoj",def:"Defa\u016dlta","lower_alpha":"Minuskla alfabeto","lower_greek":"Greka alfabeto","lower_roman":"Minusklaj romanaj ciferoj","upper_alpha":"Majuskla alfabeto","upper_roman":"Majusklaj romanaj ciferoj",circle:"Cirklo",disc:"Disko",square:"Kvadrato"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/es.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/es.js
new file mode 100644
index 000000000..9dc3063f9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/es.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({es:{common:{"more_colors":"M\u00e1s colores","invalid_data":"Error: Introdujo un valor no v\u00e1lido, est\u00e1n marcados en rojo.","popup_blocked":"Lo sentimos, su bloqueo de ventanas emergentes ha deshabilitado una ventana que provee funcionalidades a la aplicaci\u00f3n. Necesita deshabilitar este bloqueo en este sitio para poder utilizar todas las funciones.","clipboard_no_support":"Su navegador no soporta las funciones de cortapapeles, use los accesos por teclado.","clipboard_msg":"Copiar/Cortar/Pegar no se encuentra disponible en Mozilla y Firefox.\n \u00bfDesea obtener m\u00e1s informaci\u00f3n acerca de este tema?","not_set":"-- Ninguno --","class_name":"Clase",browse:"Examinar",close:"Cerrar",cancel:"Cancelar",update:"Actualizar",insert:"Insertar",apply:"Aplicar","edit_confirm":" \u00bfDesea utilizar el modo WYSIWYG para esta caja de texto?","invalid_data_number":"{#field} debe ser un n\u00famero","invalid_data_min":"{#field} debe ser un n\u00famero mayor que {#min}","invalid_data_size":"{#field} debe ser un n\u00famero o tanto por ciento",value:"(valor)"},contextmenu:{full:"Justificado",right:"Derecha",center:"Centrado",left:"Izquierda",align:"Alineaci\u00f3n"},insertdatetime:{"day_short":"Dom,Lun,Mar,Mie,Jue,Vie,Sab,Dom","day_long":"Domingo,Lunes,Martes,Mi\u00e9rcoles,Jueves,Viernes,S\u00e1bado,Domingo","months_short":"Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic","months_long":"Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre","inserttime_desc":"Insertar hora","insertdate_desc":"Insertar fecha","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimir"},preview:{"preview_desc":"Vista previa"},directionality:{"rtl_desc":"Direcci\u00f3n derecha a izquierda","ltr_desc":"Direcci\u00f3n izquierda a derecha"},layer:{content:"Nueva capa...","absolute_desc":"Cambiar a posici\u00f3n absoluta","backward_desc":"Retroceder","forward_desc":"Avanzar","insertlayer_desc":"Insertar nueva capa"},save:{"save_desc":"Guardar","cancel_desc":"Cancelar todos los cambios"},nonbreaking:{"nonbreaking_desc":"Insertar caracter de espacio \'non-breaking\'"},iespell:{download:"No se detect\u00f3 \'ieSpell\'. \u00bfDesea instalarlo ahora?","iespell_desc":"Corrector ortogr\u00e1fico"},advhr:{"advhr_desc":"Regla horizontal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoticones","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Buscar/Reemplazar","search_desc":"Buscar","delta_width":"","delta_height":""},advimage:{"delta_width":"30","image_desc":"Insertar/editar imagen","delta_height":""},advlink:{"link_desc":"Insertar/editar hiperv\u00ednculo","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insertar/Editar atributos","ins_desc":"Inserci\u00f3n","del_desc":"Borrado","acronym_desc":"Acr\u00f3nimo","abbr_desc":"Abreviatura","cite_desc":"Cita","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Editar Estilo CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Pegar ahora est\u00e1 en modo de texto plano. Pulse otra vez para volver al modo de pegado normal.","plaintext_mode_sticky":"Pegar ahora est\u00e1 en modo de texto plano. Pulse otra vez para volver al modo de pegado normal. Despu\u00e9s de pegar algo se volver\u00e1 al modo normal de forma autom\u00e1tica.","selectall_desc":"Elegir todo","paste_word_desc":"Pegar desde Word","paste_text_desc":"Pegar como texto plano"},"paste_dlg":{"word_title":"Use CTRL+V en su teclado para pegar el texto en la ventana.","text_linebreaks":"Mantener saltos de l\u00ednea","text_title":"Use CTRL+V en su teclado para pegar el texto en la ventana."},table:{cell:"Celda",col:"Columna",row:"Fila",del:"Eliminar tabla","copy_row_desc":"Copiar fila","cut_row_desc":"Cortar fila","paste_row_after_desc":"Pegar filas (despu\u00e9s)","paste_row_before_desc":"Pegar filas (antes)","props_desc":"Propiedades de la tabla","cell_desc":"Propiedades de la celda","row_desc":"Propiedades de la fila","merge_cells_desc":"Vincular celdas","split_cells_desc":"Dividir celdas","delete_col_desc":"Suprimir columna","col_after_desc":"Insertar columna (despu\u00e9s)","col_before_desc":"Insertar columna (antes)","delete_row_desc":"Suprimir fila","row_after_desc":"Insertar fila (despu\u00e9s)","row_before_desc":"Insertar fila (antes)",desc:"Inserta una nueva tabla","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Se reestablece en contenido guardado, perder\u00e1 todo el contenido que est\u00e1 actualmente en el editor.\n\nEst\u00e1 seguro de que quiere reestablecer el contenido guardado.","restore_content":"Reestablecer contenido guardado autom\u00e1ticamente","unload_msg":"Los cambios realizados se perder\u00e1n si sale de esta p\u00e1gina."},fullscreen:{desc:"Cambiar a modo Pantalla Completa"},media:{edit:"Editar medio embebido",desc:"Insertar/editar medio embebido","delta_height":"","delta_width":""},fullpage:{desc:"Propiedades del documento","delta_width":"Ancho","delta_height":"Alto"},template:{desc:"Insertar contenido de plantilla predefinida"},visualchars:{desc:"Caracteres de control ON/OFF."},spellchecker:{desc:"Cambiar a corrector ortogr\u00e1fico",menu:"Configuraci\u00f3n de corrector ortogr\u00e1fico","ignore_word":"Ignorar","ignore_words":"Ignorar todo",langs:"Idiomas",wait:"Espere...",sug:"Sugerencias","no_sug":"Sin sugerencias","no_mpell":"No se encontraron errores.","learn_word":"Aprender palabra"},pagebreak:{desc:"Insertar fin de p\u00e1gina"},advlist:{types:"Tipo",def:"Preestablecido","lower_alpha":"Menos opaco","lower_greek":"Menos greek","lower_roman":"Menos roman","upper_alpha":"M\u00e1s opaco","upper_roman":"M\u00e1s roman",circle:"Circulo",disc:"Disc",square:"Cuadro"},colors:{"333300":"Verde Oliva","993300":"Naranja Oscuro","000000":"Negro","003300":"Verde Oscuro","003366":"Azul Celeste Oscuro","000080":"Azul Navy","333399":"Indigo","333333":"Verde Muy Oscuro","800000":"Marr\u00f3n",FF6600:"Naranja","808000":"Aceituna","008000":"Verde","008080":"Verde Azulado","0000FF":"Azul","666699":"Azul gris\u00e1ceo","808080":"Gris",FF0000:"Rojo",FF9900:"\u00c1mbar","99CC00":"Verde Amarillento","339966":"Verde Oc\u00e9ano","33CCCC":"Turquesa","3366FF":"Azul Royale","800080":"P\u00farpura","999999":"Gris Medio",FF00FF:"Magenta",FFCC00:"Dorado",FFFF00:"Amarillo","00FF00":"Lima","00FFFF":"Agua","00CCFF":"Azul Cielo","993366":"Marr\u00f3n",C0C0C0:"Plateado",FF99CC:"Rosa",FFCC99:"Melocot\u00f3n",FFFF99:"Amarillo claro",CCFFCC:"Verde p\u00e1lido",CCFFFF:"Cian p\u00e1lido","99CCFF":"Verde Cielo Claro",CC99FF:"Pomelo",FFFFFF:"Blanco"},aria:{"rich_text_area":"\u00c1rea de Texto Enriquecido"},wordcount:{words:"Palabras:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/et.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/et.js
new file mode 100644
index 000000000..637551bfb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/et.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({et:{common:{"more_colors":"Rohkem v\u00e4rve","invalid_data":"Viga: Kehtetud v\u00e4\u00e4rtused sisestatud, need on m\u00e4rgitud punasega.","popup_blocked":"Vabandust, aga Teie h\u00fcpikakna t\u00f5kestaja on blokeerinud akna, mis varustab rakenduse funktsionaalsust. Palun lubage h\u00fcpikaknad sellel kodulehel, et t\u00e4ielikult kasutada seda vahendit.","clipboard_no_support":"Hetkel ei ole toetatud Teie lehitseja poolt, kasutage klaviatuuri otseteid selle asemel.","clipboard_msg":"Kopeeri/L\u00f5ika/Kleebi ei ole saadaval Mozillas ja Firefoxis.\nKas soovite rohkem infot selle probleemi kohta?","not_set":"-- Seadmata --","class_name":"Klass",browse:"Sirvi",close:"Sule",cancel:"T\u00fchista",update:"Uuenda",insert:"Sisesta",apply:"Rakenda","edit_confirm":"Kas soovite kasutada WYSIWYG re\u017eiimi sellel tekstialal?","invalid_data_number":"{#field} peab olema number","invalid_data_min":"{#field} peab olema number,mis suurem kui {#min}","invalid_data_size":"{#field} peab olema number v\u00f5i protsent",value:"(v\u00e4\u00e4rtus)"},contextmenu:{full:"T\u00e4is",right:"Parem",center:"Kesk",left:"Vasak",align:"Joondus"},insertdatetime:{"day_short":"P,E,T,K,N,R,L,P","day_long":"P\u00fchap\u00e4ev,Esmasp\u00e4ev,Teisip\u00e4ev,Kolmap\u00e4ev,Neljap\u00e4ev,Reede,Laup\u00e4ev,P\u00fchap\u00e4ev","months_short":"Jaan,Veeb,M\u00e4rts,Apr,Mai,Juuni,Juuli,Aug,Sept,Okt,Nov,Dets","months_long":"Jaanuar,Veebruar,M\u00e4rts,Aprill,Mai,Juuni,Juuli,August,September,Oktoober,November,Detsember","inserttime_desc":"Sisesta aeg","insertdate_desc":"Sisesta kuup\u00e4ev","time_fmt":"%T:%M:%S","date_fmt":"%A-%k-%p"},print:{"print_desc":"Print"},preview:{"preview_desc":"Eelvaade"},directionality:{"rtl_desc":"Suund paremalt vasakule","ltr_desc":"Suund vasakult paremale"},layer:{content:"Uus kiht...","absolute_desc":"L\u00fclita \u00fcmber absoluutne positsioneerimine","backward_desc":"Liiguta tagasi","forward_desc":"Liiguta edasi","insertlayer_desc":"Sisesta uus kiht"},save:{"save_desc":"Salvesta","cancel_desc":"T\u00fchista k\u00f5ik muudatused"},nonbreaking:{"nonbreaking_desc":"Sisesta mittekatkestav t\u00fchik"},iespell:{download:"ie\u00d5igekiri tuvastamata. Kas soovite paigaldada n\u00fc\u00fcd?","iespell_desc":"\u00d5igekirja kontroll"},advhr:{"advhr_desc":"Horisontaalne joonlaud","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotsioonid","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Otsi/Asenda","search_desc":"Otsi","delta_width":"","delta_height":""},advimage:{"image_desc":"Sisesta/redigeeri pilt","delta_width":"","delta_height":""},advlink:{"link_desc":"Sisesta/redigeeri link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Sisesta muuda atribuute","ins_desc":"Lisandus","del_desc":"Kustutus","acronym_desc":"Akron\u00fc\u00fcm","abbr_desc":"L\u00fchend","cite_desc":"Tsitaat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Redigeeri CSS stiili","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Kleepimine (Paste) on n\u00fc\u00fcd lihtteksti laadis (kleebitav tekst lisatakse lihttekstina). Kliki uuesti minemaks tagasi tavalisse kleepimise laadi.","plaintext_mode_sticky":"Kleepimine (Paste) on n\u00fc\u00fcd lihtteksti laadis (kleebitav tekst lisatakse lihttekstina). Kliki uuesti minemaks tagasi tavalisse kleepimise laadi. Peale millegi kleepimist sa tuled tagasi tavalisse kleepimise laadi.","selectall_desc":"Vali k\u00f5ik","paste_word_desc":"Kleebi Wordist","paste_text_desc":"Kleebi tavalise tekstina"},"paste_dlg":{"word_title":"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks.","text_linebreaks":"J\u00e4ta reavahetused","text_title":"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks."},table:{cell:"Lahter",col:"Veerg",row:"Rida",del:"Kustuta tabel","copy_row_desc":"Kopeeri tabeli rida","cut_row_desc":"L\u00f5ika tabeli rida","paste_row_after_desc":"Kleebi tabeli rida j\u00e4rgi","paste_row_before_desc":"Kleebi tabeli rida ette","props_desc":"Tabeli omadused","cell_desc":"Tabeli lahtri omadused","row_desc":"Tabeli rea omadused","merge_cells_desc":"\u00dchenda tabeli lahtrid","split_cells_desc":"Eralda \u00fchendatud tabeli lahtrid","delete_col_desc":"Kustuta veerg","col_after_desc":"Sisesta veerg j\u00e4rgi","col_before_desc":"Sisesta veerg ette","delete_row_desc":"Kustuta rida","row_after_desc":"Sisesta rida j\u00e4rgi","row_before_desc":"Sisesta rida ette",desc:"Sisestab uue tabeli","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Kui sa taastad salvestatud sisu, siis sa kaotad kogu redaktoris oleva sisu.\n\nKas sa soovid taastada salvestatud sisu?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?","restore_content":"Taasta automaatsalvestatud sisu.","unload_msg":"Tehtud muudatused kaovad, kui lahkute siit lehelt."},fullscreen:{desc:"L\u00fclita \u00fcmber t\u00e4isekraani re\u017eiim"},media:{edit:"Redigeeri manustatud meedia",desc:"Sisesta / redigeeri manustatud meedia","delta_height":"","delta_width":""},fullpage:{desc:"Dokumendi omadused","delta_width":"","delta_height":""},template:{desc:"Sisesta eeldefineeritud \u0161ablooni sisu"},visualchars:{desc:"Visuaalsed kontrollt\u00e4hem\u00e4rgid sisse/v\u00e4lja"},spellchecker:{desc:"L\u00fclita \u00fcmber \u00f5igekirja kontroll",menu:"\u00d5igekirja kontrolli seaded","ignore_word":"J\u00e4ta s\u00f5na vahele","ignore_words":"J\u00e4ra k\u00f5ik vahele",langs:"Keeled",wait:"Palun oota...",sug:"Soovitused","no_sug":"Soovitusi pole","no_mpell":"Valesti kirjutamisi ei leitud.","learn_word":"\u00d5pi s\u00f5na"},pagebreak:{desc:"Sisesta lehevahetus."},advlist:{types:"T\u00fc\u00fcbid",def:"Vaikimisi",circle:"Ring",disc:"Ketas",square:"Ruut","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman"},colors:{"000000":"Must","003300":"Tume roheline","000080":"Meresinine","333399":"S\u00fcgavsinine","333333":"V\u00e4ga tumehall","800000":"Punakaspruun",FF6600:"Oran\u017e","008000":"Roheline","008080":"Sinakasroheline","0000FF":"Sinine","666699":"Hallikas sinine","808080":"Hall",FF0000:"Punane",FF9900:"Oran\u017ekollane","99CC00":"Kollakasroheline","339966":"Sinakasroheline","33CCCC":"T\u00fcrkiissinine","800080":"Violetne","999999":"Keskmine hall",FF00FF:"Fuksiinpunane",FFCC00:"Kuldne",FFFF00:"Kollane","00FF00":"Rohekaskollane","00FFFF":"Rohekassinine","00CCFF":"Taevasinine","993366":"Pruun",C0C0C0:"H\u00f5bedane",FF99CC:"Roosa",FFCC99:"Virsikuv\u00e4rvi",FFFF99:"Helekollane",CCFFCC:"Kahvatu roheline",CCFFFF:"Kahvatu helesinine","99CCFF":"Hele taevasinine",FFFFFF:"Valge","333300":"Dark olive","993300":"Burnt orange","003366":"Dark azure","808000":"Olive","3366FF":"Royal blue",CC99FF:"Plum"},aria:{"rich_text_area":"Vormindatud tekstiala"},wordcount:{words:"S\u00f5nu:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/eu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/eu.js
new file mode 100644
index 000000000..c386478c7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/eu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({eu:{common:{"more_colors":"Kolore gehiago","invalid_data":"Errorea: baliogabeak diren aukerak sartu dituzu, gorriz agertzen dira.","popup_blocked":"Ups, zure popup blokeatzaileak funtzionalitate bat eskaintzen duen leihoa blokeatu du. Blokeatzailea desgaitu beharko duzu tresna hau erabiltzeko.","clipboard_no_support":"Zure nabigatzailean ez dabil, erabili teklatuko laster-teklak honetarako..","clipboard_msg":"Kopiatu/Ebaki/Itsatsi ez dago Mozilla eta Firefoxen.\nHonen inguruko informazioa nahi duzu??","not_set":"-- Bat ere ez --","class_name":"Klasea",browse:"Arakatu",close:"Itxi",cancel:"Utzi",update:"Eguneratu",insert:"Txertatu",apply:"Aplikatu","edit_confirm":"Testu-kutxa hau WYSIWYG editorea izatea nahi duzu?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Justifikatuta",right:"Eskuinean",center:"Zentratuta",left:"Ezkerrean",align:"Alineazioa"},insertdatetime:{"day_short":"Ig,Al,As,Az,Og,Or,Lr,Ig","day_long":"Igandea,Astelehena,Asteartea,Asteazkena,Osteguna,Ostirala,Larunbata,Igandea","months_short":"Urt,Ots,Mar,Api,Mai,Eka,Uzt,Abu,Ira,Urr,Aza,Abe","months_long":"Urtarrila,Otsaila,Martxoa,Apirila,Maiatza,Ekaina,Uztaila,Abuztua,Iraila,Urria,Azaroa,Abendua","inserttime_desc":"Ordua txertatu","insertdate_desc":"Data txertatu","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Inprimatu"},preview:{"preview_desc":"Aurreikusi"},directionality:{"rtl_desc":"Eskuinatik ezkerrera","ltr_desc":"Ezkerretik eskumara"},layer:{content:"Kapa berria...","absolute_desc":"Posizionatze-absolutua aktibatu/desaktibatu","backward_desc":"Atzera joan","forward_desc":"Aurrera joan","insertlayer_desc":"Kapa berria txertatu"},save:{"save_desc":"Gorde","cancel_desc":"Aldaketak bertan behera utzi"},nonbreaking:{"nonbreaking_desc":"Espazioa txertatu"},iespell:{download:"ieSpell ez da aurkitu. Instalatu egin nahi duzu?","iespell_desc":"Hizkuntza zuzendu"},advhr:{"delta_height":"Altuera","delta_width":"Zabalera","advhr_desc":"Marra horizontala"},emotions:{"delta_height":"Altuera","delta_width":"Zabalera","emotions_desc":"Ikonotxoak"},searchreplace:{"replace_desc":"Bilatu/Ordeztu","delta_width":"Zabalera","delta_height":"Altuera","search_desc":"Bilatu"},advimage:{"delta_width":"Zabalera","image_desc":"Irudia txertatu/editatu","delta_height":"Altuera"},advlink:{"delta_height":"Altuera","delta_width":"Zabalera","link_desc":"Lotura txertatu/editatu"},xhtmlxtras:{"attribs_delta_height":"Atributuen altuera","attribs_delta_width":"Atributuen zabalera","ins_delta_height":"Txertaketaren altuera","ins_delta_width":"Txertaketaren zabalera","del_delta_height":"Ezabaketaren altuera","del_delta_width":"Ezabaketaren zabalera","acronym_delta_height":"Akronimoen altuera","acronym_delta_width":"Akronimoen zabalera","abbr_delta_height":"Laburduren altuera","abbr_delta_width":"Laburduren zabalera","cite_delta_height":"Ziten altuera","cite_delta_width":"Ziten zabalera","attribs_desc":"Atributuak txertatu/editatu","ins_desc":"Txertaketa","del_desc":"Ezabaketa","acronym_desc":"Akronimoa","abbr_desc":"Laburdura","cite_desc":"Zita"},style:{"delta_height":"Altuera","delta_width":"Zabalera",desc:"Aldatu CSS estiloa"},paste:{"plaintext_mode":"Itsasketa testu moduan dago orain. Egin klik itsasketa arruntera itzultzeko.","plaintext_mode_sticky":"Itsasketa testu moduan dago orain. Egin klik itsasketa arruntera itzultzeko. Zerbait itsatsi ostean, modu arruntera pasatuko zara automatikoki.","selectall_desc":"Aukeratu guztia","paste_word_desc":"Word-etik itsatsi","paste_text_desc":"Testu gisa itsatsi"},"paste_dlg":{"word_title":"Erabili CTRL+V testua lehioan itsasteko.","text_linebreaks":"Mantendu lerro-jauziak","text_title":"Erabili CTRL+V testua lehioan itsasteko."},table:{"merge_cells_delta_height":"Gelaxkak batzearen altuera","merge_cells_delta_width":"Gelaxkak batzearen zabalera","table_delta_height":"Taularen altuera","table_delta_width":"Taularen zabalera","cellprops_delta_height":"Gelaxken propietateen altuera","cellprops_delta_width":"Gelaxken propietateen zabalera","rowprops_delta_height":"Lerroen propietateen altuera","rowprops_delta_width":"Lerroen propietateen zabalera",cell:"Gelaxka",col:"Zutabea",row:"Lerroa",del:"Ezabatu taula","copy_row_desc":"Kopiatu lerroa","cut_row_desc":"Moztu lerroa","paste_row_after_desc":"Itsatsi lerroa ondoren","paste_row_before_desc":"Itsatsi lerroa aurretik","props_desc":"Taula ezaugarriak","cell_desc":"Gelaxka ezaugarriak","row_desc":"Lerro ezaugarriak","merge_cells_desc":"Bateratu gelaxkak","split_cells_desc":"Banatu bateratutako gelaxkak","delete_col_desc":"Ezabatu zutabea","col_after_desc":"Txertatu zutabea ondoren","col_before_desc":"Txertatu zutabea aurretik","delete_row_desc":"Ezabatu lerroa","row_after_desc":"Txertatu lerroa ondoren","row_before_desc":"Txertatu lerroa aurretik",desc:"Taula berri bat txertatu"},autosave:{"warning_message":"Gordetako edukia errekuperatzen baduzu, orain editorean dagoena galdu egingo duzu.\n\nZiur zaude gordetakoa errekuperatzea nahi duzula?","restore_content":"Automatikoki gordetako edukia errekuperatu.","unload_msg":"Egindako aldaketak galdu egingo dira orri honetatik kanpona nabigatzen baldin baduzu."},fullscreen:{desc:"Aldatu pantaila osoko modura"},media:{"delta_height":"Altuera","delta_width":"Zabalera",edit:"Editatu ahokatutako euskarria",desc:"Sartu / editatu ahokatutako euskarria"},fullpage:{desc:"Dokumentuaren ezaugarriak","delta_width":"Zabalera","delta_height":"Altuera"},template:{desc:"Txertatu aurredefinitutako txantiloiaren edukia"},visualchars:{desc:"Begi kontrol karaktereak gaitu/ezgaitu."},spellchecker:{desc:"Ortografia zuzentzaile modura aldatu",menu:"Ortografia zuzentzailearen doikuntza","ignore_word":"Ezikusi hitza","ignore_words":"Ezikusi guztiak",langs:"Hizkuntzak",wait:"Itxaron mesedez...",sug:"Gomendioa","no_sug":"Gomendiorik ez","no_mpell":"Ez da akatsik aurkitu","learn_word":"Learn word"},pagebreak:{desc:"Txertatu orri jauzia."},advlist:{types:"Motak",def:"Lehenetsiak","lower_alpha":"Hizki xeheak","lower_greek":"Hizki greko xeheak","lower_roman":"Zenbaki erromatar xeheak","upper_alpha":"Hizki larriak","upper_roman":"Zenbaki erromatar larriak",circle:"Borobila",disc:"Diskoa",square:"Karratua"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fa.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fa.js
new file mode 100644
index 000000000..cd0bffbb8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fa.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({fa:{common:{"more_colors":"\u0631\u0646\u06af \u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631","invalid_data":"\u062e\u0637\u0627: \u0645\u0642\u0627\u062f\u06cc\u0631 \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u0648\u0627\u0631\u062f \u0634\u062f \u060c \u0622\u0646\u0647\u0627 \u0628\u0647 \u0631\u0646\u06af \u0642\u0631\u0645\u0632 \u0639\u0644\u0627\u0645\u062a \u062e\u0648\u0631\u062f\u0647 \u0627\u0646\u062f.","popup_blocked":"\u0628\u0627 \u0639\u0631\u0636 \u067e\u0648\u0632\u0634 \u060c \u0645\u0627 \u0627\u0637\u0644\u0627\u0639 \u062f\u0627\u062f\u0647 \u0628\u0648\u062f\u06cc\u0645 \u06a9\u0647 \u0645\u062f\u0627\u0641\u0639 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632 \u0634\u0648\u06cc (Popup) \u0634\u0645\u0627 \u060c \u067e\u0646\u062c\u0631\u0647 \u0627\u06cc \u0631\u0627 \u06a9\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u06a9\u0631\u062f \u060c \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a. \u0634\u0645\u0627 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0645\u062f\u0627\u0641\u0639 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632 \u0634\u0648 (Popup) \u062f\u0631 \u0627\u06cc\u0646 \u0633\u0627\u06cc\u062a \u0631\u0627 \u062f\u0627\u0631\u06cc\u062f \u062a\u0627 \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631 \u0628\u0647 \u0635\u0648\u0631\u062a \u06a9\u0627\u0645\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f.","clipboard_no_support":"\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u062a\u0648\u0633\u0637 \u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc \u0634\u0648\u062f \u060c \u0628\u0647 \u062c\u0627\u06cc \u0622\u0646 \u0627\u0632 \u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc (Shortcut) \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f.","clipboard_msg":"\u0628\u0631\u0634/\u06a9\u067e\u06cc/\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0631\u0627\u06cc \u0645\u0631\u0648\u0631\u06af\u0631 \u0641\u0627\u06cc\u0631\u0641\u0627\u06a9\u0633 \u0641\u0639\u0627\u0644 \u0646\u0645\u06cc \u0628\u0627\u0634\u062f. \n\u0622\u06cc\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627\u062c\u0639 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f\u061f","not_set":"-- \u062a\u0646\u0638\u06cc\u0645 \u0646\u0634\u062f\u0647 --","class_name":"\u06a9\u0644\u0627\u0633",browse:"\u0627\u0646\u062a\u062e\u0627\u0628 \u0627\u0632 \u0633\u0631\u0648\u0631",close:"\u0628\u0633\u062a\u0646",cancel:"\u0627\u0646\u0635\u0631\u0627\u0641",update:"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc",insert:"\u062f\u0631\u062c",apply:"\u0628\u06a9\u0627\u0631\u06af\u06cc\u0631\u06cc","edit_confirm":"\u0622\u06cc\u0627 \u0634\u0645\u0627 \u0645\u0627\u06cc\u0644\u06cc\u062f \u062a\u0627 \u0627\u0632 \u062d\u0627\u0644\u062a \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f\u061f","invalid_data_number":"\u0645\u0642\u062f\u0627\u0631 {#field} \u0628\u0627\u06cc\u062f \u0639\u062f\u062f \u0628\u0627\u0634\u062f","invalid_data_min":"\u0645\u0642\u062f\u0627\u0631 {#field} \u0628\u0627\u06cc\u062f \u0639\u062f\u062f \u0628\u0632\u0631\u06af \u062a\u0631 \u0627\u0632 {#min} \u0628\u0627\u0634\u062f","invalid_data_size":"\u0645\u0642\u062f\u0627\u0631 {#field} \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0639\u062f\u062f \u06cc\u0627 \u062f\u0631\u0635\u062f \u0628\u0627\u0634\u062f",value:"(\u0645\u0642\u062f\u0627\u0631)"},contextmenu:{full:"\u06a9\u0627\u0645\u0644",right:"\u0631\u0627\u0633\u062a",center:"\u0648\u0633\u0637",left:"\u0686\u067e",align:"\u062a\u0631\u0627\u0632"},insertdatetime:{"day_short":"\u06cc\u06a9\u0634\u0646\u0628\u0647,\u062f\u0648\u0634\u0646\u0628\u0647,\u0633\u0647 \u0634\u0646\u0628\u0647,\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647,\u067e\u0646\u062c \u0634\u0646\u0628\u0647,\u062c\u0645\u0639\u0647,\u0634\u0646\u0628\u0647,\u06cc\u06a9\u0634\u0646\u0628\u0647","day_long":"\u06cc\u06a9\u0634\u0646\u0628\u0647,\u062f\u0648\u0634\u0646\u0628\u0647,\u0633\u0647 \u0634\u0646\u0628\u0647,\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647,\u067e\u0646\u062c \u0634\u0646\u0628\u0647,\u062c\u0645\u0639\u0647,\u0634\u0646\u0628\u0647,\u06cc\u06a9\u0634\u0646\u0628\u0647","months_short":"\u0698\u0627\u0646\u0648\u06cc\u0647,\u0641\u0648\u0631\u06cc\u0647,\u0645\u0627\u0631\u0633,\u0622\u0648\u0631\u06cc\u0644,\u0645\u06cc,\u0698\u0648\u0626\u0646,\u0698\u0648\u0644\u0627\u06cc,\u0627\u0648\u062a,\u0633\u067e\u062a\u0627\u0645\u0628\u0631,\u0627\u06a9\u062a\u0628\u0631,\u0646\u0648\u0627\u0645\u0628\u0631,\u062f\u0633\u0627\u0645\u0628\u0631","months_long":"\u0698\u0627\u0646\u0648\u06cc\u0647,\u0641\u0648\u0631\u06cc\u0647,\u0645\u0627\u0631\u0633,\u0622\u0648\u0631\u06cc\u0644,\u0645\u06cc,\u0698\u0648\u0626\u0646,\u0698\u0648\u0644\u0627\u06cc,\u0627\u0648\u062a,\u0633\u067e\u062a\u0627\u0645\u0628\u0631,\u0627\u06a9\u062a\u0628\u0631,\u0646\u0648\u0627\u0645\u0628\u0631,\u062f\u0633\u0627\u0645\u0628\u0631","inserttime_desc":"\u062f\u0631\u062c \u0632\u0645\u0627\u0646","insertdate_desc":"\u062f\u0631\u062c \u062a\u0627\u0631\u06cc\u062e","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u0686\u0627\u067e"},preview:{"preview_desc":"\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634"},directionality:{"rtl_desc":"\u062c\u0647\u062a \u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e","ltr_desc":"\u062c\u0647\u062a \u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a"},layer:{content:"\u0644\u0627\u06cc\u0647 \u062c\u062f\u06cc\u062f...","absolute_desc":"\u062a\u0639\u0648\u06cc\u0636 \u0645\u0648\u0642\u0639\u06cc\u062a \u0645\u0637\u0644\u0642","backward_desc":"\u0627\u0646\u062a\u0642\u0627\u0644 \u0628\u0647 \u067e\u0634\u062a","forward_desc":"\u0627\u0646\u062a\u0642\u0627\u0644 \u0628\u0647 \u062c\u0644\u0648","insertlayer_desc":"\u062f\u0631\u062c \u0644\u0627\u06cc\u0647 \u062c\u062f\u06cc\u062f"},save:{"save_desc":"\u0630\u062e\u06cc\u0631\u0647","cancel_desc":"\u0644\u063a\u0648 \u062a\u0645\u0627\u0645\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a"},nonbreaking:{"nonbreaking_desc":"\u062f\u0631\u062c \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0641\u0627\u0635\u0644\u0647 \u0628\u062f\u0648\u0646 \u0642\u0637\u0639 \u0634\u062f\u06af\u06cc"},iespell:{download:"ieSpell \u062a\u0634\u062e\u06cc\u0635 \u062f\u0627\u062f\u0647 \u0646\u0634\u062f. \u0622\u06cc\u0627 \u0634\u0645\u0627 \u0645\u0627\u06cc\u0644 \u0628\u0647 \u0646\u0635\u0628 \u0622\u0646 \u0647\u0633\u062a\u06cc\u062f\u061f","iespell_desc":"\u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627\u0621"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"\u062e\u0637 \u0627\u0641\u0642\u06cc"},emotions:{"delta_height":"","delta_width":"","emotions_desc":"\u0634\u06a9\u0644\u06a9 \u0647\u0627"},searchreplace:{"replace_desc":"\u062c\u0633\u062a\u062c\u0648/\u062a\u0639\u0648\u06cc\u0636","delta_width":"","delta_height":"","search_desc":"\u062c\u0633\u062a\u062c\u0648"},advimage:{"delta_width":"","image_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u06cc\u0646\u06a9"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627","ins_desc":"\u062f\u0631\u062c","del_desc":"\u062d\u0630\u0641","acronym_desc":"\u0645\u062e\u0641\u0641","abbr_desc":"\u0627\u062e\u062a\u0635\u0627\u0631","cite_desc":"\u0646\u0642\u0644 \u0642\u0648\u0644"},style:{"delta_height":"","delta_width":"",desc:"\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0633\u062a\u0627\u06cc\u0644 CSS"},paste:{"plaintext_mode":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u062d\u0627\u0644\u062a \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0628\u0631\u06af\u0634\u062a \u0628\u0647 \u062d\u0627\u0644\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0627\u0642\u0627\u0639\u062f\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f.","plaintext_mode_sticky":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u062d\u0627\u0644\u062a \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0628\u0631\u06af\u0634\u062a \u0628\u0647 \u062d\u0627\u0644\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0627\u0642\u0627\u0639\u062f\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f. \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u06cc\u062f \u0628\u0647 \u062d\u0627\u0644\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0627\u0642\u0627\u0639\u062f\u0647 \u0628\u0627\u0632 \u0645\u06cc \u06af\u0631\u062f\u06cc\u062f.","selectall_desc":"\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0645\u0647","paste_word_desc":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0627\u0632 \u0648\u064f\u0631\u062f","paste_text_desc":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062a\u0646 \u0633\u0627\u062f\u0647"},"paste_dlg":{"word_title":"\u062c\u0647\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u0627\u0632 CTRL+V \u0628\u0631 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f.","text_linebreaks":"\u062d\u0641\u0638 \u0642\u0637\u0639 \u062e\u0637\u0648\u0637","text_title":"\u062c\u0647\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u0627\u0632 CTRL+V \u0628\u0631 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"\u0633\u0644\u0648\u0644",col:"\u0633\u062a\u0648\u0646",row:"\u0633\u0637\u0631",del:"\u062d\u0630\u0641 \u062c\u062f\u0648\u0644","copy_row_desc":"\u06a9\u067e\u06cc \u0633\u0637\u0631 \u062c\u062f\u0648\u0644","cut_row_desc":"\u0628\u0631\u0634 (Cut) \u0633\u0637\u0631 \u062c\u062f\u0648\u0644","paste_row_after_desc":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 (Paste) \u0633\u0637\u0631 \u062c\u062f\u0648\u0644 \u062f\u0631 \u0628\u0639\u062f","paste_row_before_desc":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 (Paste) \u0633\u0637\u0631 \u062c\u062f\u0648\u0644 \u062f\u0631 \u0642\u0628\u0644","props_desc":"\u0645\u0634\u062e\u0635\u0627\u062a \u062c\u062f\u0648\u0644","cell_desc":"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0644\u0648\u0644 \u062c\u062f\u0648\u0644","row_desc":"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0637\u0631 \u062c\u062f\u0648\u0644","merge_cells_desc":"\u0627\u062f\u063a\u0627\u0645 \u0633\u0644\u0648\u0644 \u0647\u0627\u06cc \u062c\u062f\u0648\u0644","split_cells_desc":"\u062a\u0642\u0633\u06cc\u0645 \u0633\u0644\u0648\u0644 \u0647\u0627\u06cc \u062c\u062f\u0648\u0644 \u0627\u062f\u063a\u0627\u0645 \u0634\u062f\u0647","delete_col_desc":"\u062d\u0630\u0641 \u0633\u062a\u0648\u0646","col_after_desc":"\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u062f\u0631 \u0628\u0639\u062f","col_before_desc":"\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u062f\u0631 \u0642\u0628\u0644","delete_row_desc":"\u062d\u0630\u0641 \u0633\u0637\u0631","row_after_desc":"\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u0628\u0639\u062f","row_before_desc":"\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u0642\u0628\u0644",desc:"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062c\u062f\u0648\u0644"},autosave:{"warning_message":"\u0627\u06af\u0631 \u0645\u062d\u062a\u0648\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u200c\u0631\u0648\u062f. \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u062d\u062a\u0648\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062f\u0627\u0631\u06cc\u062f\u061f.","restore_content":"\u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u06cc \u0645\u062d\u062a\u0648\u0627 \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647\u200c\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631","unload_msg":"\u0627\u06af\u0631 \u0627\u0632 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0628\u0647 \u062c\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0628\u0631\u0648\u06cc\u062f \u060c \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u0645\u062d\u062a\u0648\u0627 \u0627\u0632 \u062f\u0633\u062a \u062e\u0648\u0627\u0647\u062f \u0631\u0641\u062a."},fullscreen:{desc:"\u062a\u0639\u0648\u06cc\u0636 \u0628\u0647 \u062d\u0627\u0644\u062a \u0635\u0641\u062d\u0647 \u06a9\u0627\u0645\u0644"},media:{"delta_height":"","delta_width":"",edit:"\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0633\u0627\u0646\u0647 \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 (Embeded Media)",desc:"\u062f\u0631\u062c / \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0633\u0627\u0646\u0647 \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 (Embeded Media)"},fullpage:{desc:"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0646\u062f","delta_width":"","delta_height":""},template:{desc:"\u062f\u0631\u062c \u0645\u062d\u062a\u0648\u0627\u06cc \u0642\u0627\u0644\u0628 \u0627\u0632 \u067e\u06cc\u0634 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647"},visualchars:{desc:"\u0631\u0648\u0634\u0646/\u062e\u0627\u0645\u0648\u0634 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0647\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u0628\u0635\u0631\u06cc (Visual)."},spellchecker:{desc:"\u062a\u0639\u0648\u06cc\u0636 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0646\u062f\u0647 \u0627\u0645\u0644\u0627\u0621",menu:"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0646\u062f\u0647 \u0627\u0645\u0644\u0627\u0621","ignore_word":"\u0686\u0634\u0645 \u067e\u0648\u0634\u06cc \u0627\u0632 \u06a9\u0644\u0645\u0647","ignore_words":"\u0686\u0634\u0645 \u067e\u0648\u0634\u06cc \u0627\u0632 \u0647\u0645\u0647",langs:"\u0632\u0628\u0627\u0646 \u0647\u0627",wait:"\u0644\u0637\u0641\u0627 \u0645\u0646\u062a\u0638\u0631 \u0628\u0645\u0627\u0646\u06cc\u062f...",sug:"\u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0627\u062a","no_sug":"\u0628\u062f\u0648\u0646 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f","no_mpell":"\u0647\u06cc\u0686 \u062e\u0637\u0627\u06cc \u0627\u0645\u0644\u0627\u0626\u06cc \u06cc\u0627\u0641\u062a\u0647 \u0646\u0634\u062f.","learn_word":"\u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u06a9\u0644\u0645\u0647"},pagebreak:{desc:"\u062f\u0631\u062c \u0642\u0637\u0639 \u0635\u0641\u062d\u0647 \u0628\u0631\u0627\u06cc \u0686\u0627\u067e"},advlist:{types:"\u0627\u0646\u0648\u0627\u0639",def:"\u067e\u06cc\u0634\u200c\u0641\u0631\u0636","lower_alpha":"\u0627\u0644\u0641\u0628\u0627\u06cc \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u06a9\u0648\u0686\u06a9","lower_greek":"\u06cc\u0648\u0646\u0627\u0646\u06cc \u06a9\u0648\u0686\u06a9","lower_roman":"\u0631\u0648\u0645\u06cc \u06a9\u0648\u0686\u06a9","upper_alpha":"\u0627\u0644\u0641\u0628\u0627\u06cc \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u0628\u0632\u0631\u06af","upper_roman":"\u0631\u0648\u0645\u06cc \u0628\u0632\u0631\u06af",circle:"\u062f\u0627\u06cc\u0631\u0647",disc:"\u0642\u0631\u0635 \u0645\u0627\u0646\u0646\u062f",square:"\u0645\u0631\u0628\u0639"},colors:{"333300":"\u0632\u06cc\u062a\u0648\u0646\u06cc \u062a\u06cc\u0631\u0647","993300":"\u0646\u0627\u0631\u0646\u062c\u06cc \u0633\u0648\u062e\u062a\u0647","000000":"\u0645\u0634\u06a9\u06cc","003300":"\u0633\u0628\u0632 \u062a\u06cc\u0631\u0647","003366":"\u0644\u0627\u062c\u0648\u0631\u062f\u06cc \u062a\u06cc\u0631\u0647","000080":"\u06a9\u0628\u0648\u062f","333399":"\u0646\u06cc\u0644\u06cc","333333":"\u0637\u0648\u0633\u06cc \u062e\u06cc\u0644\u06cc \u062a\u06cc\u0631\u0647","800000":"\u0628\u0644\u0648\u0637\u06cc",FF6600:"\u0646\u0627\u0631\u0646\u062c\u06cc","808000":"\u0632\u06cc\u062a\u0648\u0646\u06cc","008000":"\u0633\u0628\u0632","008080":"\u0627\u0637\u0644\u0633\u06cc","0000FF":"\u0622\u0628\u06cc","666699":"\u0622\u0628\u06cc \u062e\u0627\u06a9\u0633\u062a\u0631\u06cc","808080":"\u0637\u0648\u0633\u06cc",FF0000:"\u0633\u0631\u062e",FF9900:"\u06a9\u0647\u0631\u0628\u0627\u06cc\u06cc","99CC00":"\u0632\u0631\u062f \u0645\u0627\u06cc\u0644 \u0628\u0647 \u0633\u0628\u0632","339966":"\u0633\u0628\u0632 \u0645\u0627\u06cc\u0644 \u0628\u0647 \u0622\u0628\u06cc","33CCCC":"\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc","3366FF":"\u0622\u0628\u06cc \u0633\u0644\u0637\u0646\u062a\u06cc","800080":"\u0628\u0646\u0641\u0634","999999":"\u0637\u0648\u0633\u06cc \u0645\u062a\u0648\u0633\u0637",FF00FF:"\u0633\u0631\u062e\u0627\u0628\u06cc",FFCC00:"\u0637\u0644\u0627\u06cc\u06cc",FFFF00:"\u0632\u0631\u062f","00FF00":"\u0644\u06cc\u0645\u0648\u06cc\u06cc","00FFFF":"\u0622\u0628\u06cc \u0646\u0642\u0631\u0647\u200c\u0627\u06cc","00CCFF":"\u0622\u0628\u06cc \u0622\u0633\u0645\u0627\u0646\u06cc","993366":"\u0642\u0647\u0648\u0647\u200c\u0627\u06cc",C0C0C0:"\u0646\u0642\u0631\u0647\u200c\u0627\u06cc",FF99CC:"\u0635\u0648\u0631\u062a\u06cc",FFCC99:"\u0647\u0644\u0648\u06cc\u06cc",FFFF99:"\u0632\u0631\u062f \u0631\u0648\u0634\u0646",CCFFCC:"\u0633\u0628\u0632 \u0631\u0648\u0634\u0646",CCFFFF:"\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc \u0631\u0648\u0634\u0646","99CCFF":"\u0622\u0628\u06cc \u0622\u0633\u0645\u0627\u0646\u06cc \u0631\u0648\u0634\u0646",CC99FF:"\u06af\u0648\u062c\u0647\u200c\u0627\u06cc",FFFFFF:"\u0633\u0641\u06cc\u062f"},aria:{"rich_text_area":"\u0645\u062a\u0646 \u063a\u0646\u06cc"},wordcount:{words:"\u06a9\u0644\u0645\u0627\u062a:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fi.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fi.js
new file mode 100644
index 000000000..08eea143c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({fi:{common:{"more_colors":"Enemm\u00e4n v\u00e4rej\u00e4","invalid_data":"Virhe: Sy\u00f6tit virheellisi\u00e4 arvoja, ne n\u00e4kyv\u00e4t punaisina.","popup_blocked":"Sinulla on k\u00e4yt\u00f6ss\u00e4si ohjelma, joka est\u00e4\u00e4 ponnahdusikkunoiden n\u00e4yt\u00f6n. Sinun t\u00e4ytyy kytke\u00e4 ponnahdusikkunoiden esto pois p\u00e4\u00e4lt\u00e4 voidaksesi hy\u00f6dynt\u00e4\u00e4 t\u00e4ysin t\u00e4t\u00e4 ty\u00f6kalua.","clipboard_no_support":"Selaimesi ei ole tuettu, k\u00e4yt\u00e4 sen sijaan n\u00e4pp\u00e4inoikoteit\u00e4.","clipboard_msg":"Kopioi/Leikkaa/Liit\u00e4 ei ole k\u00e4ytett\u00e4viss\u00e4 Mozilla ja Firefox -selaimilla.\nHaluatko lis\u00e4tietoa t\u00e4st\u00e4 ongelmasta?","not_set":"-- Ei m\u00e4\u00e4ritetty --","class_name":"Luokka",browse:"Selaa",close:"Sulje",cancel:"Peru",update:"P\u00e4ivit\u00e4",insert:"Lis\u00e4\u00e4",apply:"K\u00e4yt\u00e4","edit_confirm":"Haluatko k\u00e4ytt\u00e4\u00e4 WYSIWYG-tilaa t\u00e4ss\u00e4 tekstikent\u00e4ss\u00e4?","invalid_data_number":"{#field} t\u00e4ytyy olla numero","invalid_data_min":"{#field} t\u00e4ytyy olla suurempi numero kuin {#min}","invalid_data_size":"{#field} t\u00e4ytyy olla numero tai prosentti",value:"(arvo)"},contextmenu:{full:"Molemmille puolille",right:"Oikealle",center:"Keskelle",left:"Vasemmalle",align:"Tasaus"},insertdatetime:{"day_short":"su,ma,ti,ke,to,pe,la,su","day_long":"sunnuntai,maanantai,tiistai,keskiviikko,torstai,perjantai,lauantai,sunnuntai","months_short":"tammi,helmi,maalis,huhti,touko,kes\u00e4,hein\u00e4,elo,syys,loka,marras,joulu","months_long":"tammikuu,helmikuu,maaliskuu,huhtikuu,toukokuu,kes\u00e4kuu,hein\u00e4kuu,elokuu,syyskuu,lokakuu,marraskuu,joulukuu","inserttime_desc":"Lis\u00e4\u00e4 kellonaika","insertdate_desc":"Lis\u00e4\u00e4 p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Tulosta"},preview:{"preview_desc":"Esikatselu"},directionality:{"rtl_desc":"Suunta oikealta vasemmalle","ltr_desc":"Suunta vasemmalta oikealle"},layer:{content:"Uusi taso...","absolute_desc":"Absoluuttinen sijainti","backward_desc":"Siirr\u00e4 taaksep\u00e4in","forward_desc":"Siirr\u00e4 eteenp\u00e4in","insertlayer_desc":"Lis\u00e4\u00e4 uusi taso"},save:{"save_desc":"Tallenna","cancel_desc":"Peru kaikki muutokset"},nonbreaking:{"nonbreaking_desc":"Lis\u00e4\u00e4 tyhj\u00e4 merkki (nbsp)"},iespell:{download:"ieSpell-ohjelmaa ei havaittu. Haluatko asentaa sen nyt?","iespell_desc":"Oikeinkirjoituksen tarkistus"},advhr:{"advhr_desc":"Vaakatasoviivain","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hymi\u00f6t","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Etsi ja korvaa","search_desc":"Etsi","delta_width":"","delta_height":""},advimage:{"image_desc":"Lis\u00e4\u00e4/muokkaa kuvaa","delta_width":"","delta_height":""},advlink:{"link_desc":"Lis\u00e4\u00e4/muokkaa linkki\u00e4","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Lis\u00e4\u00e4/muokkaa attribuutteja","ins_desc":"Lis\u00e4ys","del_desc":"Poisto","acronym_desc":"Kirjainlyhenne","abbr_desc":"Lyhenne","cite_desc":"Sitaatti","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Muokkaa CSS-tyylej\u00e4","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Liitt\u00e4minen on nyt pelkk\u00e4n\u00e4 tekstin\u00e4. Klikkaa uudelleen vaihtaaksesi takaisin tavalliseen tilaan.","plaintext_mode_sticky":"Liitt\u00e4minen on nyt pelkk\u00e4n\u00e4 tekstin\u00e4. Klikkaa uudelleen vaihtaaksesi takaisin tavalliseen tilaan. Palaat takaisin tavalliseen tilaan liitetty\u00e4si jotakin.","selectall_desc":"Valitse kaikki","paste_word_desc":"Liit\u00e4 Wordist\u00e4","paste_text_desc":"Liit\u00e4 pelkk\u00e4n\u00e4 tekstin\u00e4"},"paste_dlg":{"word_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan.","text_linebreaks":"S\u00e4ilyt\u00e4 rivinvaihdot","text_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan."},table:{"cellprops_delta_width":"80",cell:"Solu",col:"Sarake",row:"Rivi",del:"Poista taulukko","copy_row_desc":"Kopioi taulukon rivi","cut_row_desc":"Leikkaa taulukon rivi","paste_row_after_desc":"Liit\u00e4 taulukon rivi j\u00e4lkeen","paste_row_before_desc":"Liit\u00e4 taulukon rivi ennen","props_desc":"Taulukon asetukset","cell_desc":"Taulukon solun asetukset","row_desc":"Taulukon rivin asetukset","merge_cells_desc":"Yhdist\u00e4 taulukon solut","split_cells_desc":"Jaa yhdistetyt taulukon solut","delete_col_desc":"Poista sarake","col_after_desc":"Lis\u00e4\u00e4 sarake j\u00e4lkeen","col_before_desc":"Lis\u00e4\u00e4 sarake ennen","delete_row_desc":"Poista rivi","row_after_desc":"Lis\u00e4\u00e4 rivi j\u00e4lkeen","row_before_desc":"Lis\u00e4\u00e4 rivi ennen",desc:"Lis\u00e4\u00e4 uusi taulukko","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Jos palautat automaattisesti tallennetun sis\u00e4ll\u00f6n, menet\u00e4t t\u00e4ll\u00e4 hetkell\u00e4 editorissa olevan sis\u00e4ll\u00f6n.\n\nHaluatko varmasti palauttaa tallennetun sis\u00e4ll\u00f6n?","restore_content":"Palauta automaattisesti tallennettu sis\u00e4lt\u00f6.","unload_msg":"Tekem\u00e4si muutokset menetet\u00e4\u00e4n jos poistut t\u00e4lt\u00e4 sivulta."},fullscreen:{desc:"Kokoruututila"},media:{edit:"Muokkaa upotettua mediaa",desc:"Lis\u00e4\u00e4/muokkaa upotettua mediaa","delta_height":"","delta_width":""},fullpage:{desc:"Tiedoston asetukset","delta_width":"","delta_height":""},template:{desc:"Lis\u00e4\u00e4 esim\u00e4\u00e4ritetty\u00e4 sivupohjasis\u00e4lt\u00f6\u00e4"},visualchars:{desc:"N\u00e4yt\u00e4/piilota muotoilumerkit."},spellchecker:{desc:"Oikeinkirjoituksen tarkistus",menu:"Oikeinkirjoituksen asetukset","ignore_word":"Ohita sana","ignore_words":"Ohita kaikki",langs:"Kielet",wait:"Odota ole hyv\u00e4...",sug:"Ehdotukset","no_sug":"Ei ehdotuksia","no_mpell":"Virheit\u00e4 ei l\u00f6ytynyt.","learn_word":"Opettele sana"},pagebreak:{desc:"Lis\u00e4\u00e4 sivunvaihto."},advlist:{types:"Tyypit",def:"Oletus","lower_alpha":"pienet kirjaimet: a, b, c","lower_greek":"pienet kirjaimet: \u03b1, \u03b2, \u03b3","lower_roman":"pienet kirjaimet: i, ii, iii","upper_alpha":"isot kirjaimet: A, B, C","upper_roman":"isot kirjaimet: I, II, III",circle:"Pallo",disc:"Ympyr\u00e4",square:"Neli\u00f6"},colors:{"333300":"Tummanoliivi","993300":"Tummanoranssi","000000":"Musta","003300":"Tummanvihre\u00e4","003366":"Tummantaivaansininen","000080":"Laivaston sininen","333399":"Indigonsininen","333333":"Hyvin tummanharmaa","800000":"Punaruskea",FF6600:"Oranssi","808000":"Oliivi","008000":"Vihre\u00e4","008080":"Sinivihre\u00e4","0000FF":"Sininen","666699":"Harmaansininen","808080":"Harmaa",FF0000:"Punainen",FF9900:"Kullanruskea","99CC00":"Keltaisenvihre\u00e4","339966":"Merenvihre\u00e4","33CCCC":"Turkoosi","3366FF":"Syv\u00e4n sininen","800080":"Violetti","999999":"Keskiharmaa",FF00FF:"Magenta",FFCC00:"Kulta",FFFF00:"Keltainen","00FF00":"Lime","00FFFF":"Sinivihre\u00e4","00CCFF":"Taivaansininen","993366":"Ruskea",C0C0C0:"Hopea",FF99CC:"Vaaleanpunainen",FFCC99:"Persikka",FFFF99:"Vaaleankeltainen",CCFFCC:"Haalistuneen vihre\u00e4",CCFFFF:"Haalistuneen syaani","99CCFF":"Vaaleantaivaansininen",CC99FF:"Luumunpunainen",FFFFFF:"Valkoinen"},aria:{"rich_text_area":"Rikastettu tekstialue"},wordcount:{words:"Sanaa:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fr.js
new file mode 100644
index 000000000..b9cfd8b51
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/fr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({fr:{common:{"more_colors":"Plus de couleurs","invalid_data":"Erreur : saisie de valeurs incorrectes. Elles sont mises en \u00e9vidence en rouge.","popup_blocked":"D\u00e9sol\u00e9, nous avons d\u00e9tect\u00e9 que votre bloqueur de popup a bloqu\u00e9 une fen\u00eatre dont l\'application a besoin. Vous devez d\u00e9sactiver votre bloqueur de popup pour pouvoir utiliser cet outil.","clipboard_no_support":"Actuellement non support\u00e9 par votre navigateur.\n Veuillez utiliser les raccourcis clavier \u00e0 la place.","clipboard_msg":"Les fonctions Copier/Couper/Coller ne sont pas valables sur Mozilla et Firefox.\nSouhaitez-vous avoir plus d\'informations sur ce sujet ?","not_set":"-- non d\u00e9fini --","class_name":"Classe",browse:"parcourir",close:"Fermer",cancel:"Annuler",update:"Mettre \u00e0 jour",insert:"Ins\u00e9rer",apply:"Appliquer","edit_confirm":"Souhaitez-vous utiliser le mode WYSIWYG pour cette zone de texte ?","invalid_data_number":"{#field} doit \u00eatre un nombre","invalid_data_min":"{#field} doit \u00eatre un nombre plus grand que {#min}","invalid_data_size":"{#field} doit \u00eatre un nombre ou un pourcentage",value:"(valeur)"},contextmenu:{full:"Justifi\u00e9",right:"Droite",center:"Centr\u00e9",left:"Gauche",align:"Alignement"},insertdatetime:{"day_short":"Dim,Lun,Mar,Mer,Jeu,Ven,Sam,Dim","day_long":"Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche","months_short":"Jan,F\u00e9v,Mar,Avr,Mai,Juin,Juil,Ao\u00fbt,Sep,Oct,Nov,D\u00e9c","months_long":"Janvier,F\u00e9vrier,Mars,Avril,Mai,Juin,Juillet,Ao\u00fbt,Septembre,Octobre,Novembre,D\u00e9cembre","inserttime_desc":"Ins\u00e9rer l\'heure","insertdate_desc":"Ins\u00e9rer la date","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimer"},preview:{"preview_desc":"Pr\u00e9visualiser"},directionality:{"rtl_desc":"\u00c9criture de droite \u00e0 gauche","ltr_desc":"\u00c9criture de gauche \u00e0 droite"},layer:{content:"Nouvelle couche\u2026","absolute_desc":"Activer le positionnement absolu","backward_desc":"D\u00e9placer vers l\'arri\u00e8re","forward_desc":"D\u00e9placer vers l\'avant","insertlayer_desc":"Ins\u00e9rer une nouvelle couche"},save:{"save_desc":"Enregistrer","cancel_desc":"Annuler toutes les modifications"},nonbreaking:{"nonbreaking_desc":"Ins\u00e9rer une espace ins\u00e9cable"},iespell:{download:"ieSpell n\'est pas install\u00e9. Souhaitez-vous l\'installer maintenant ?","iespell_desc":"Lancer le v\u00e9rificateur d\'orthographe"},advhr:{"delta_height":"Ecart de hauteur","delta_width":"Ecart de largeur","advhr_desc":"Ins\u00e9rer un trait horizontal"},emotions:{"delta_height":"delta_height","delta_width":"delta_width","emotions_desc":"\u00c9motic\u00f4nes"},searchreplace:{"replace_desc":"Rechercher / remplacer","search_desc":"Rechercher","delta_width":"","delta_height":""},advimage:{"image_desc":"Ins\u00e9rer / \u00e9diter une image","delta_width":"","delta_height":""},advlink:{"link_desc":"Ins\u00e9rer / \u00e9diter un lien","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Ins\u00e9rer / \u00e9diter les attributs","ins_desc":"Ins\u00e9r\u00e9","del_desc":"Barr\u00e9","acronym_desc":"Acronyme","abbr_desc":"Abr\u00e9viation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u00c9diter la feuille de style (CSS)","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Le collage est actuellement en mode texte non format\u00e9. Cliquez \u00e0 nouveau pour revenir en mode de collage ordinaire.","plaintext_mode_sticky":"Le collage est actuellement en mode texte non format\u00e9. Cliquez \u00e0 nouveau pour revenir en mode de collage ordinaire. Apr\u00e8s avoir coll\u00e9 quelque chose, vous retournerez en mode de collage ordinaire.","selectall_desc":"Tout s\u00e9lectionner","paste_word_desc":"Coller un texte cr\u00e9\u00e9 sous Word","paste_text_desc":"Coller comme texte brut"},"paste_dlg":{"word_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre.","text_linebreaks":"Conserver les retours \u00e0 la ligne","text_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre."},table:{cell:"Cellule",col:"Colonne",row:"Ligne",del:"Effacer le tableau","copy_row_desc":"Copier la ligne","cut_row_desc":"Couper la ligne","paste_row_after_desc":"Coller la ligne apr\u00e8s","paste_row_before_desc":"Coller la ligne avant","props_desc":"Propri\u00e9t\u00e9s du tableau","cell_desc":"Propri\u00e9t\u00e9s de la cellule","row_desc":"Propri\u00e9t\u00e9s de la ligne","merge_cells_desc":"Fusionner les cellules","split_cells_desc":"Scinder les cellules fusionn\u00e9es","delete_col_desc":"Effacer la colonne","col_after_desc":"Ins\u00e9rer une colonne apr\u00e8s","col_before_desc":"Ins\u00e9rer une colonne avant","delete_row_desc":"Effacer la ligne","row_after_desc":"Ins\u00e9rer une ligne apr\u00e8s","row_before_desc":"Ins\u00e9rer une ligne avant",desc:"Ins\u00e9rer un nouveau tableau","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Si vous restaurez le contenu sauv\u00e9, vous perdrez le contenu qui est actuellement dans l\'\u00e9diteur.\n\n\u00cates-vous s\u00fbr de vouloir restaurer le contenu sauv\u00e9 ?","restore_content":"Restaurer le contenu auto-sauvegard\u00e9.","unload_msg":"Les modifications apport\u00e9es seront perdues si vous quittez cette page."},fullscreen:{desc:"Passer en mode plein \u00e9cran"},media:{edit:"\u00c9diter un m\u00e9dia incorpor\u00e9",desc:"Ins\u00e9rer / \u00e9diter un m\u00e9dia incorpor\u00e9","delta_height":"","delta_width":""},fullpage:{desc:"Propri\u00e9t\u00e9s du document","delta_width":"","delta_height":""},template:{desc:"Ins\u00e9rer un mod\u00e8le pr\u00e9d\u00e9fini."},visualchars:{desc:"Activer les caract\u00e8res de mise en page."},spellchecker:{desc:"Activer le v\u00e9rificateur d\'orthographe",menu:"Param\u00e8tres du v\u00e9rificateur d\'orthographe","ignore_word":"Ignorer le mot","ignore_words":"Tout ignorer",langs:"Langues",wait:"Veuillez patienter\u2026",sug:"Suggestions","no_sug":"Aucune suggestion","no_mpell":"Aucune erreur trouv\u00e9e.","learn_word":"Apprendre le mot"},pagebreak:{desc:"Ins\u00e9rer un saut de page."},advlist:{types:"Types",def:"D\u00e9faut","lower_alpha":"Alpha minuscule","lower_greek":"Grec minuscule","lower_roman":"Romain minuscule","upper_alpha":"Alpha majuscule","upper_roman":"Romain majuscule",circle:"Cercle",disc:"Disque",square:"Carr\u00e9"},colors:{"333300":"Olive fonc\u00e9","993300":"Orange br\u00fbl\u00e9","000000":"Noir","003300":"Vert fonc\u00e9","003366":"Azur fonc\u00e9","000080":"Bleu marine","333399":"Indigo","333333":"Gris tr\u00e8s fonc\u00e9","800000":"Bordeaux",FF6600:"Orange","808000":"Olive","008000":"Vert","008080":"Sarcelle","0000FF":"Bleu","666699":"Bleu gris\u00e2tre","808080":"Gris",FF0000:"Rouge",FF9900:"Ambre","99CC00":"Jaune vert","339966":"Mer verte","33CCCC":"Turquoise","3366FF":"Bleu royal","800080":"Violet","999999":"Gris moyen",FF00FF:"Magenta",FFCC00:"Or",FFFF00:"Jaune","00FF00":"Lime","00FFFF":"Bleu vert","00CCFF":"Bleu ciel","993366":"Brun",C0C0C0:"Argent",FF99CC:"Rose",FFCC99:"P\u00eache",FFFF99:"Jaune clair",CCFFCC:"Vert p\u00e2le",CCFFFF:"Cyan p\u00e2le","99CCFF":"Bleu ciel clair",CC99FF:"Prune",FFFFFF:"Blanc"},aria:{"rich_text_area":"Texte riche"},wordcount:{words:"Mots:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/gl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/gl.js
new file mode 100644
index 000000000..08aff0856
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/gl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({gl:{common:{"more_colors":"Mais cores","invalid_data":"Error: Introducidos valores non v\u00e1lidos, est\u00e1n marcados en vermello.","popup_blocked":"O seu bloqueador de vent\u00e1s emerxentes deshabilitou unha vent\u00e1 que precisa pra o funcionamento da aplicaci\u00f3n. Precisa deshabilita-lo bloqueo de `popups` neste sitio pra utilizar \u00f3 m\u00e1ximo esta ferramenta.","clipboard_no_support":"O seu navegador non soporta estas funci\u00f3ns, use os atallos de teclado.","clipboard_msg":"Copiar/Cortar/Pegar non est\u00e1 disponible en Mozilla e Firefox.\n\u00bfDesexa obter mais informaci\u00f3n sobre de este asunto?","not_set":"-- Ning\u00fan --","class_name":"Clase",browse:"Examinar",close:"Cerrar",cancel:"Cancelar",update:"Actualizar",insert:"Insertar",apply:"Apricar","edit_confirm":"\u00bfDesexa utiliza-lo modo WYSIWYG pra esta caixa de texto?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Xustificado",right:"Dereita",center:"Centrado",left:"Esquerda",align:"Ali\u00f1amento"},insertdatetime:{"day_short":"Dom,Lun,Mar,M\u00e9r,Xov,Ver,S\u00e1b,Dom","day_long":"Domingo,Luns,Martes,M\u00e9rcores,Xoves,Venres,S\u00e1bado,Domingo","months_short":"Xan,Feb,Mar,Abr,Mai,Xu\u00f1,Xul,Ago,Set,Out,Nov,Dec","months_long":"Xaneito,Febreiro,Marzo,Abril,Maio,Xu\u00f1o,Xullo,Agosto,Setembro,Outubro,Novembro,Decembro","inserttime_desc":"Insertar hora","insertdate_desc":"Insertar data","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimir"},preview:{"preview_desc":"Vista previa"},directionality:{"rtl_desc":"Direcci\u00f3n dereita a esquerda","ltr_desc":"Direcci\u00f3n esquerda a dereita"},layer:{content:"Nova capa...","absolute_desc":"Posici\u00f3n absoluta","backward_desc":"Recuar","forward_desc":"Avanzar","insertlayer_desc":"Insertar nova capa"},save:{"save_desc":"Gardar","cancel_desc":"Cancelar todo-los cambios"},nonbreaking:{"nonbreaking_desc":"Insertar espacio non colapsable"},iespell:{download:"Non se detectou \'ieSpell\'. \u00bfDesexa instala-lo agora?","iespell_desc":"Corrector ortogr\u00e1fico"},advhr:{"advhr_desc":"Regra horizontal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoticones","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Buscar/Reemplazar","search_desc":"Buscar","delta_width":"","delta_height":""},advimage:{"image_desc":"Insertar/editar imaxe","delta_width":"","delta_height":""},advlink:{"link_desc":"Insertar/editar hiperv\u00ednculo","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insertar/Editar atributos","ins_desc":"Inserci\u00f3n","del_desc":"Borrado","acronym_desc":"Acr\u00f3nimo","abbr_desc":"Abreviatura","cite_desc":"Cita","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Editar Estilo CSS","delta_height":"","delta_width":""},paste:{"selectall_desc":"Seleccionar todo","paste_word_desc":"Pegar desde Word","paste_text_desc":"Pegar como texto simple","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V no teclado pra pega-lo texto na vent\u00e1.","text_linebreaks":"Manter salto de li\u00f1as","text_title":"Use CTRL+V no teclado pra pega-lo texto na vent\u00e1."},table:{cell:"Celda",col:"Columna",row:"Fila",del:"Eliminar t\u00e1boa","copy_row_desc":"Copiar fila","cut_row_desc":"Cortar fila","paste_row_after_desc":"Pegar filas (desp\u00f3is)","paste_row_before_desc":"Pegar filas (antes)","props_desc":"Propiedades da t\u00e1boa","cell_desc":"Propiedades da celda","row_desc":"Propiedades da fila","merge_cells_desc":"Vincular celdas","split_cells_desc":"Dividir celdas","delete_col_desc":"Suprimir columna","col_after_desc":"Insertar columna (desp\u00f3is)","col_before_desc":"Insertar columna (antes)","delete_row_desc":"Suprimir fila","row_after_desc":"Insertar fila (desp\u00f3is)","row_before_desc":"Insertar fila (antes)",desc:"Inserta unha nova t\u00e1boa","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"Os cambios realizados perderanse se sae desta p\u00e1xina.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Cambiar a modo Pantalla Completa"},media:{edit:"Editar medio embebido",desc:"Insertar/editar medio embebido","delta_height":"","delta_width":""},fullpage:{desc:"Propiedades do documento","delta_width":"","delta_height":""},template:{desc:"Insertar contido de plantilla predefinida"},visualchars:{desc:"Caracteres de control ON/OFF."},spellchecker:{desc:"Conmutar corrector ortogr\u00e1fico",menu:"Configuraci\u00f3n de corrector ortogr\u00e1fico","ignore_word":"Ignorar verba","ignore_words":"Ignorar todo",langs:"Idiomas",wait:"Agarde...",sug:"Suxerencias","no_sug":"Sen suxerencias","no_mpell":"Non se atoparon erros.","learn_word":"Learn word"},pagebreak:{desc:"Insertar fin de p\u00e1xina"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/gu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/gu.js
new file mode 100644
index 000000000..8e78d3b8e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/gu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({gu:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/he.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/he.js
new file mode 100644
index 000000000..0f4e12d7b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/he.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({he:{common:{"more_colors":"\u05e2\u05d5\u05d3 \u05e6\u05d1\u05e2\u05d9\u05dd","invalid_data":"\u05e9\u05d2\u05d9\u05d0\u05d4: \u05d4\u05d5\u05e7\u05dc\u05d3 \u05de\u05d9\u05d3\u05e2 \u05dc\u05d0 \u05ea\u05e7\u05e0\u05d9. \u05d4\u05de\u05d9\u05d3\u05e2 \u05e1\u05d5\u05de\u05df \u05d1\u05d0\u05d3\u05d5\u05dd.","popup_blocked":"\u05d7\u05d5\u05e1\u05dd \u05e4\u05e8\u05d9\u05d8\u05d9\u05dd \u05de\u05d5\u05e7\u05e4\u05e6\u05d9\u05dd \u05de\u05e0\u05e2 \u05de\u05d7\u05dc\u05d5\u05df \u05d7\u05e9\u05d5\u05d1 \u05de\u05dc\u05d4\u05e4\u05ea\u05d7,\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05db\u05dc\u05d9 \u05d6\u05d4 \u05e2\u05dc\u05d9\u05da \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05d7\u05d5\u05e1\u05dd \u05d4\u05e4\u05e8\u05d9\u05d8\u05d9\u05dd","clipboard_no_support":"\u05db\u05e8\u05d2\u05e2 \u05dc\u05d0 \u05e0\u05ea\u05de\u05da \u05e2\u05dc \u05d9\u05d3\u05d9 \u05d4\u05d3\u05e4\u05d3\u05e4\u05df \u05e9\u05dc\u05da. \u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e7\u05d9\u05e6\u05d5\u05e8\u05d9 \u05d4\u05de\u05e7\u05dc\u05d3\u05ea.","clipboard_msg":"\n \u05d4\u05e2\u05ea\u05e7\u05d4/\u05d2\u05d6\u05d9\u05e8\u05d4 \u05d5\u05d4\u05d3\u05d1\u05e7\u05d4 \u05d0\u05d9\u05e0\u05dd \u05d6\u05de\u05d9\u05e0\u05d9\u05dd \u05d1 Mozilla \u05d5\u05d1-Firefox.\n \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05e7\u05d1\u05dc \u05de\u05d9\u05d3\u05e2 \u05e0\u05d5\u05e1\u05e3 \u05e2\u05dc \u05d4\u05e0\u05d5\u05e9\u05d0?\n ","not_set":"-- \u05dc\u05d0 \u05d4\u05d5\u05d2\u05d3\u05e8 --","class_name":"\u05de\u05d7\u05dc\u05e7\u05d4",browse:"\u05e2\u05d9\u05d5\u05df",close:"\u05e1\u05d2\u05d9\u05e8\u05d4",cancel:"\u05d1\u05d9\u05d8\u05d5\u05dc",update:"\u05e2\u05d3\u05db\u05d5\u05df",insert:"\u05d4\u05d5\u05e1\u05e4\u05d4",apply:"\u05d0\u05d9\u05e9\u05d5\u05e8","edit_confirm":"\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e2\u05d5\u05e8\u05da \u05d4\u05de\u05ea\u05e7\u05d3\u05dd?","invalid_data_number":"{#field} \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05de\u05e1\u05e4\u05e8","invalid_data_min":"{#field} \u05d4\u05de\u05e1\u05e4\u05e8 \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05d2\u05d3\u05d5\u05dc \u05de-{#min}","invalid_data_size":"{#field} \u05d4\u05e2\u05e8\u05da \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05de\u05e1\u05e4\u05e8 \u05d0\u05d5 \u05d0\u05d7\u05d5\u05d6",value:"(\u05e2\u05e8\u05da)"},contextmenu:{full:"\u05e9\u05e0\u05d9 \u05d4\u05e6\u05d3\u05d3\u05d9\u05dd",right:"\u05d9\u05de\u05d9\u05df",center:"\u05d0\u05de\u05e6\u05e2",left:"\u05e9\u05de\u05d0\u05dc",align:"\u05d9\u05d9\u05e9\u05d5\u05e8"},insertdatetime:{"day_short":"\u05d9\u05d5\u05dd \u05d0\',\u05d9\u05d5\u05dd \u05d1\',\u05d9\u05d5\u05dd \u05d2\',\u05d9\u05d5\u05dd \u05d3\',\u05d9\u05d5\u05dd \u05d4\',\u05d9\u05d5\u05dd \u05d5\',\u05e9\u05d1\u05ea,\u05d9\u05d5\u05dd \u05d0\'","day_long":"\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df,\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9,\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9,\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9,\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9,\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9,\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea,\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df","months_short":"\u05d9\u05e0\u05d5\u05d0\u05e8,\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8,\u05de\u05e8\u05e5,\u05d0\u05e4\u05e8\u05d9\u05dc,\u05de\u05d0\u05d9,\u05d9\u05d5\u05e0\u05e2,\u05d9\u05d5\u05dc\u05d9,\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8,\u05e1\u05e4\u05d8\u05de\u05d1\u05e8,\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8,\u05e0\u05d5\u05d1\u05de\u05d1\u05e8,\u05d3\u05e6\u05de\u05d1\u05e8","months_long":"\u05d9\u05e0\u05d5\u05d0\u05e8,\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8,\u05de\u05e8\u05e5,\u05d0\u05e4\u05e8\u05d9\u05dc,\u05de\u05d0\u05d9,\u05d9\u05d5\u05e0\u05e2,\u05d9\u05d5\u05dc\u05d9,\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8,\u05e1\u05e4\u05d8\u05de\u05d1\u05e8,\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8,\u05e0\u05d5\u05d1\u05de\u05d1\u05e8,\u05d3\u05e6\u05de\u05d1\u05e8","inserttime_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05d6\u05de\u05df","insertdate_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05ea\u05d0\u05e8\u05d9\u05da","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"\u05d4\u05d3\u05e4\u05e1\u05d4"},preview:{"preview_desc":"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4"},directionality:{"rtl_desc":"\u05db\u05d9\u05d5\u05d5\u05df \u05d8\u05e7\u05e1\u05d8 \u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc","ltr_desc":"\u05db\u05d9\u05d5\u05d5\u05df \u05d8\u05e7\u05e1\u05d8 \u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df"},layer:{content:"\u05e9\u05db\u05d1\u05d4 \u05d7\u05d3\u05e9\u05d4...","absolute_desc":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05de\u05d9\u05e7\u05d5\u05dd \u05de\u05d5\u05d7\u05dc\u05d8","backward_desc":"\u05d4\u05e2\u05d1\u05e8\u05d4 \u05d0\u05d7\u05d5\u05e8\u05d4","forward_desc":"\u05d4\u05e2\u05d1\u05e8\u05d4 \u05e7\u05d3\u05d9\u05de\u05d4","insertlayer_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e9\u05db\u05d1\u05d4 \u05d7\u05d3\u05e9\u05d4"},save:{"save_desc":"\u05e9\u05de\u05d9\u05e8\u05d4","cancel_desc":"\u05d1\u05d9\u05d8\u05d5\u05dc \u05db\u05dc \u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05dd"},nonbreaking:{"nonbreaking_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e8\u05d5\u05d5\u05d7"},iespell:{download:" \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0 ieSpell. \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05ea\u05e7\u05d9\u05df?","iespell_desc":"\u05d1\u05d3\u05d9\u05e7\u05ea \u05d0\u05d9\u05d5\u05ea \u05d1\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea"},advhr:{"advhr_desc":"\u05e7\u05d5 \u05d0\u05d5\u05e4\u05e7\u05d9","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u05e1\u05de\u05d9\u05d9\u05dc\u05d9\u05dd","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u05d4\u05d7\u05dc\u05e4\u05d4","search_desc":"\u05d7\u05d9\u05e4\u05d5\u05e9","delta_width":"","delta_height":""},advimage:{"image_desc":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05ea\u05de\u05d5\u05e0\u05d4","delta_width":"","delta_height":""},advlink:{"link_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u05d4\u05db\u05e0\u05e1/\u05e2\u05e8\u05d5\u05da \u05ea\u05db\u05d5\u05e0\u05d5\u05ea","ins_desc":"\u05d4\u05db\u05e0\u05e1\u05d4","del_desc":"\u05de\u05d7\u05d9\u05e7\u05d4","acronym_desc":"\u05e8\u05d0\u05e9\u05d9 \u05ea\u05d9\u05d1\u05d5\u05ea","abbr_desc":"\u05e7\u05d9\u05e6\u05d5\u05e8","cite_desc":"\u05e6\u05d9\u05d8\u05d5\u05d8","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u05e2\u05d3\u05db\u05d5\u05df \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"\u05d1\u05d7\u05e8 \u05d4\u05db\u05dc","paste_word_desc":"\u05d4\u05d3\u05d1\u05e7\u05d4 \u05de-WORD","paste_text_desc":"\u05d4\u05d3\u05d1\u05e7\u05d4 \u05db\u05d8\u05e7\u05e1\u05d8 \u05d1\u05dc\u05d1\u05d3"},"paste_dlg":{"word_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V.","text_linebreaks":"\u05d4\u05e9\u05d0\u05e8 \u05d0\u05ea \u05e9\u05d5\u05e8\u05d5\u05ea \u05d4\u05e8\u05d5\u05d5\u05d7","text_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V."},table:{cell:"\u05ea\u05d0",col:"\u05e2\u05de\u05d5\u05d3\u05d4",row:"\u05e9\u05d5\u05e8\u05d4",del:"\u05de\u05d7\u05d9\u05e7\u05ea \u05d8\u05d1\u05dc\u05d4","copy_row_desc":"\u05d4\u05e2\u05ea\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","cut_row_desc":"\u05d2\u05d6\u05d9\u05e8\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","paste_row_after_desc":"\u05d4\u05d3\u05d1\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4 \u05d0\u05d7\u05e8\u05d9","paste_row_before_desc":"\u05d4\u05d3\u05d1\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4 \u05dc\u05e4\u05e0\u05d9","props_desc":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05d4\u05d8\u05d1\u05dc\u05d4","cell_desc":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05ea\u05d0 \u05d1\u05d8\u05d1\u05dc\u05d4","row_desc":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","merge_cells_desc":"\u05d0\u05d9\u05d7\u05d5\u05d3 \u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4","split_cells_desc":"\u05e4\u05d9\u05e6\u05d5\u05dc \u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4","delete_col_desc":"\u05d4\u05e1\u05e8\u05ea \u05e2\u05de\u05d5\u05d3\u05d4","col_after_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e2\u05de\u05d5\u05d3\u05d4 \u05de\u05e9\u05de\u05d0\u05dc","col_before_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e2\u05de\u05d5\u05d3\u05d4 \u05de\u05d9\u05de\u05d9\u05df","delete_row_desc":"\u05de\u05d7\u05d9\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4","row_after_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e9\u05d5\u05e8\u05d4 \u05de\u05ea\u05d7\u05ea","row_before_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e9\u05d5\u05e8\u05d4 \u05de\u05e2\u05dc",desc:"\u05d4\u05db\u05e0\u05e1\u05ea \u05d0\u05d5 \u05e2\u05e8\u05d9\u05db\u05ea \u05d8\u05d1\u05dc\u05d4","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u05d0\u05dd \u05ea\u05e9\u05d7\u05d6\u05e8 \u05d0\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05dc\u05d2\u05e8\u05d9\u05e1\u05d0 \u05d4\u05e9\u05de\u05d5\u05e8\u05d4, \u05ea\u05d0\u05d1\u05d3 \u05d0\u05ea \u05db\u05dc \u05d4\u05ea\u05d5\u05db\u05df \u05e9\u05e0\u05de\u05e6\u05d0 \u05db\u05e2\u05ea \u05d1\u05e2\u05d5\u05e8\u05da. \u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05e9\u05d7\u05d6\u05e8 \u05d0\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05dc\u05d2\u05d9\u05e8\u05e1\u05d0 \u05d4\u05e9\u05de\u05d5\u05e8\u05d4?.","restore_content":"\u05e9\u05d7\u05d6\u05d5\u05e8 \u05dc\u05d2\u05d9\u05e8\u05e1\u05d0 \u05e9\u05de\u05d5\u05e8\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea","unload_msg":"\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05d1\u05d9\u05e6\u05e2\u05ea \u05dc\u05d0 \u05d9\u05e9\u05de\u05e8\u05d5 \u05d0\u05dd \u05ea\u05e2\u05d1\u05d5\u05e8 \u05de\u05d3\u05e3 \u05d6\u05d4"},fullscreen:{desc:"\u05de\u05e2\u05d1\u05e8 \u05dc\u05de\u05e1\u05da \u05de\u05dc\u05d0/\u05d7\u05dc\u05e7\u05d9"},media:{edit:"\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05e8\u05d8\u05d5\u05df",desc:"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05e8\u05d8\u05d5\u05df","delta_height":"","delta_width":""},fullpage:{desc:"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e2\u05de\u05d5\u05d3","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"\u05d4\u05e6\u05d2/\u05d4\u05e1\u05ea\u05e8 \u05ea\u05d5\u05d5\u05d9 \u05d1\u05e7\u05e8\u05d4"},spellchecker:{desc:"\u05d4\u05e4\u05e2\u05dc\u05ea \u05d1\u05d5\u05d3\u05e7 \u05d0\u05d9\u05d5\u05ea",menu:"\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05d1\u05d5\u05d3\u05e7 \u05d0\u05d9\u05d5\u05ea","ignore_word":"\u05dc\u05d4\u05ea\u05e2\u05dc\u05dd \u05de\u05d4\u05de\u05d9\u05dc\u05d4","ignore_words":"\u05dc\u05d4\u05ea\u05e2\u05dc\u05dd \u05de\u05d4\u05db\u05dc",langs:"\u05e9\u05e4\u05d5\u05ea",wait:"\u05e0\u05d0 \u05dc\u05d4\u05de\u05ea\u05d9\u05df..",sug:"\u05d4\u05e6\u05e2\u05d5\u05ea","no_sug":"\u05d0\u05d9\u05df \u05d4\u05e6\u05e2\u05d5\u05ea","no_mpell":"\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05e9\u05d2\u05d9\u05d0\u05d5\u05ea \u05d0\u05d9\u05d5\u05ea","learn_word":"\u05dc\u05de\u05d3 \u05de\u05d9\u05dc\u05d9\u05dd"},pagebreak:{desc:"\u05d4\u05d5\u05e1\u05e4\u05ea \u05de\u05e2\u05d1\u05e8 \u05d3\u05e3"},advlist:{types:"\u05e1\u05d5\u05d2\u05d9\u05dd",def:"\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"\u05e2\u05d2\u05d5\u05dc",disc:"\u05d3\u05d9\u05e1\u05e7",square:"\u05de\u05e8\u05d5\u05d1\u05e2"},colors:{"333300":"\u05d6\u05d9\u05ea \u05db\u05d4\u05d4","993300":"\u05db\u05ea\u05d5\u05dd \u05db\u05d4\u05d4","000000":"\u05e9\u05d7\u05d5\u05e8","003300":"\u05d9\u05e8\u05d5\u05e7 \u05db\u05d4\u05d4","003366":"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05db\u05d4\u05d4","000080":"\u05db\u05d7\u05d5\u05dc \u05e6\u05d9","333399":"\u05d0\u05d9\u05e0\u05d3\u05d9\u05d2\u05d5","333333":"\u05d0\u05e4\u05d5\u05e8 \u05db\u05d4\u05d4 \u05de\u05d0\u05d5\u05d3","800000":"\u05e2\u05e8\u05de\u05d5\u05e0\u05d9",FF6600:"\u05db\u05ea\u05d5\u05dd","808000":"\u05d6\u05d9\u05ea","008000":"\u05d9\u05e8\u05d5\u05e7","008080":"\u05d9\u05e8\u05d5\u05e7-\u05db\u05d7\u05d5\u05dc \u05e2\u05de\u05d5\u05e7","0000FF":"\u05db\u05d7\u05d5\u05dc","666699":"\u05db\u05d7\u05d5\u05dc \u05d0\u05e4\u05e8\u05e4\u05e8","808080":"\u05d0\u05e4\u05d5\u05e8",FF0000:"\u05d0\u05d3\u05d5\u05dd",FF9900:"\u05e2\u05e0\u05d1\u05e8","99CC00":"\u05d9\u05e8\u05d5\u05e7 \u05e6\u05d4\u05d1\u05d4\u05d1","339966":"\u05d9\u05e8\u05d5\u05e7 \u05d9\u05dd","33CCCC":"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6","3366FF":"\u05db\u05d7\u05d5\u05dc \u05e8\u05d5\u05d9\u05d0\u05dc","800080":"\u05e1\u05d2\u05d5\u05dc","999999":"\u05d0\u05e4\u05d5\u05e8 \u05d1\u05d9\u05e0\u05d9\u05d9\u05dd",FF00FF:"\u05e1\u05d2\u05d5\u05dc-\u05d5\u05e8\u05d5\u05d3 (\u05de\u05d2\u05f3\u05e0\u05d8\u05d4)",FFCC00:"\u05d6\u05d4\u05d1",FFFF00:"\u05e6\u05d4\u05d5\u05d1","00FF00":"\u05dc\u05d9\u05d9\u05dd","00FFFF":"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05de\u05d9\u05dd","00CCFF":"\u05ea\u05db\u05dc\u05ea","993366":"\u05d7\u05d5\u05dd",C0C0C0:"\u05db\u05e1\u05e3",FF99CC:"\u05d5\u05e8\u05d5\u05d3",FFCC99:"\u05d0\u05e4\u05e8\u05e1\u05e7",FFFF99:"\u05e6\u05d4\u05d5\u05d1 \u05d1\u05d4\u05d9\u05e8",CCFFCC:"\u05d9\u05e8\u05d5\u05e7 \u05d7\u05d9\u05d5\u05d5\u05e8",CCFFFF:"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05d1\u05d4\u05d9\u05e8","99CCFF":"\u05ea\u05db\u05dc\u05ea \u05d1\u05d4\u05d9\u05e8",CC99FF:"\u05d5\u05e8\u05d5\u05d3 \u05e2\u05de\u05d5\u05e7",FFFFFF:"\u05dc\u05d1\u05df"},aria:{"rich_text_area":"\u05d0\u05d6\u05d5\u05e8 \u05e2\u05d5\u05e8\u05da \u05d8\u05e7\u05e1\u05d8 \u05e2\u05e9\u05d9\u05e8"},wordcount:{words:"\u05de\u05d9\u05dc\u05d9\u05dd:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hi.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hi.js
new file mode 100644
index 000000000..50305a813
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({hi:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"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?.","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hr.js
new file mode 100644
index 000000000..4bcc2cd06
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({hr:{common:{"more_colors":"Vi\u0161e boja","invalid_data":"Gre\u0161ka: Une\u0161ene su nevaljane vrijednosti, ozna\u010dene su crvenom bojom.","popup_blocked":"Oprostite, izgleda da je va\u0161 popup-blocker onemogu\u0107io prozor u sklopu ovog programa. Morate onemogu\u0107iti blokiranje popup prozora da bi u potpunosti iskoristili ovaj alat.","clipboard_no_support":"Trenuta\u010dno va\u0161 preglednik ne podr\u017eava ovu opciju, poku\u0161ajte koristiti tipkovni\u010dku kraticu.","clipboard_msg":"Kopiraj/Izre\u017ei/Zalijepi nije dostupno Mozilla i Firefox preglednicima.\nVi\u0161e informacija?","not_set":"-- Nije postavljeno --","class_name":"Klasa",browse:"Pregled",close:"Zatvori",cancel:"Odustani",update:"Obnovi",insert:"Umetni",apply:"Primjeni","edit_confirm":"\u017delite li koristiti WYSIWYG na\u010din rada za ovo tekstualno polje?","invalid_data_number":"{#field} mora biti broj","invalid_data_min":"{#field} mora biti ve\u0107i broj od {#min}","invalid_data_size":"{#field} mora biti broj ili postotak",value:"(value)"},contextmenu:{full:"Obostrano",right:"Desno",center:"Sredina",left:"Lijevo",align:"Poravnavanje"},insertdatetime:{"day_short":"ned,pon,uto,sri,\u010det,pet,sub,ned","day_long":"nedjelja,ponedjeljak,utorak,srijeda,\u010detvrtak,petak,subota,nedjelja","months_short":"sij,velj,o\u017eu,tra,svi,lip,srp,kol,ruj,lis,stu,pro","months_long":"sije\u010danj,velja\u010da,o\u017eujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac","inserttime_desc":"Umetni vrijeme","insertdate_desc":"Umetni datum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y."},print:{"print_desc":"Ispis"},preview:{"preview_desc":"Predprikaz"},directionality:{"rtl_desc":"S desna na lijevo","ltr_desc":"S lijeva na desno"},layer:{content:"Novi sloj...","absolute_desc":"Uklju\u010di/isklju\u010di apsolutno pozicioniranje","backward_desc":"Pomakni natrag","forward_desc":"Pomakni naprijed","insertlayer_desc":"Umetni novi sloj"},save:{"save_desc":"Spremi","cancel_desc":"Odustani od svih promjena"},nonbreaking:{"nonbreaking_desc":"Umetni razmak"},iespell:{download:"ieSpell nije prona\u0111en. \u017delite ga instalirati sada?","iespell_desc":"Pokreni provjeru pravopisa"},advhr:{"advhr_desc":"Vodoravna crta","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotikoni","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Prona\u0111i/Zamijeni","search_desc":"Prona\u0111i","delta_width":"","delta_height":""},advimage:{"image_desc":"Umetni/uredi sliku","delta_width":"","delta_height":""},advlink:{"delta_width":"","link_desc":"Umetni/uredi link","delta_height":""},xhtmlxtras:{"attribs_desc":"Umetni/uredi atribute","ins_desc":"Unos","del_desc":"Brisanje","acronym_desc":"Akronim","abbr_desc":"Kratica","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Uredi CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Zalijepi (paste) je sada u na\u010dinu obi\u010dnog teksta. Kliknite ponovo da se vrati u uobi\u010dajeni na\u010din.","plaintext_mode_sticky":"Paste is now in plain text mode. Kliknite ponovo da se vrati u uobi\u010dajeni na\u010din. Nakon \u0161to zalijepite ne\u0161to biti \u0107ete vra\u0107eni u uobi\u010dajeni na\u010din.","selectall_desc":"Odaberi sve","paste_word_desc":"Zalijepi iz Worda","paste_text_desc":"Zalijepi kao obi\u010dni tekst"},"paste_dlg":{"word_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prijelome","text_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor."},table:{cell:"\u0106elija",col:"Stupac",row:"Redak",del:"Izbri\u0161i tablicu","copy_row_desc":"Kopiraj redak","cut_row_desc":"Izre\u017ei redak","paste_row_after_desc":"Zalijepi redak ispod","paste_row_before_desc":"Zalijepi redak iznad","props_desc":"Svojstva tablice","cell_desc":"Svojstva \u0107elije","row_desc":"Svojstva retka","merge_cells_desc":"Spoji \u0107elije","split_cells_desc":"Razdvoji spojene \u0107elije","delete_col_desc":"Ukloni stupac","col_after_desc":"Umetni stupac desno","col_before_desc":"Umetni stupac lijevo","delete_row_desc":"Izbri\u0161i redak","row_after_desc":"Umetni redak ispod","row_before_desc":"Umetni redak iznad",desc:"Nova tablica","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Ako povratite spremljeni sadr\u017eaj, izgubiti \u0107ete sav sadr\u017eaj koji se trenutno nalazi u editoru.\n\nJeste li sigurni da \u017eelite povratiti spremljeni sadr\u017eaj?","restore_content":"Povrati sadr\u017eaj koji je automatski spremljen.","unload_msg":"Promjene u dokumentu biti \u0107e izgubljene ako iza\u0111ete s ove stranice."},fullscreen:{desc:"Uklju\u010di/isklju\u010di prikaz preko cijelog ekrana"},media:{edit:"Uredi ugra\u0111enu multimediju",desc:"Dodaj / uredi ugra\u0111enu multimediju","delta_height":"","delta_width":""},fullpage:{desc:"Svojstva dokumenta","delta_width":"","delta_height":""},template:{desc:"Umetni predefinirani sadr\u017eaj predlo\u0161ka"},visualchars:{desc:"Vizualni kontrolni znakovi uklju\u010deni/isklju\u010deni."},spellchecker:{desc:"Uklju\u010di/isklju\u010di provjeru pravopisa",menu:"Postavke provjere pravopisa","ignore_word":"Zanemari rije\u010d","ignore_words":"Zanemari sve",langs:"Jezici",wait:"Molimo pri\u010dekajte...",sug:"Prijedlozi","no_sug":"Nema prijedloga","no_mpell":"Nije prona\u0111ena nijedna pravopisna gre\u0161ka.","learn_word":"Zapamti rije\u010d"},pagebreak:{desc:"Umetni prijelom."},advlist:{types:"Tipovi",def:"Osnovno","lower_alpha":"Mala slova","lower_greek":"Mala gr\u010dka slova","lower_roman":"Mali rimski brojevi","upper_alpha":"Velika slova","upper_roman":"Veliki rimski brojevi",circle:"Kru\u017enica",disc:"Disk",square:"Kvadrat"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Dio za formatirani tekst"},wordcount:{words:"Rije\u010di:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hu.js
new file mode 100644
index 000000000..864af04ba
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({hu:{common:{"more_colors":"Tov\u00e1bbi sz\u00ednek","invalid_data":"Hiba: \u00c9rv\u00e9nytelen adatok, pirossal jel\u00f6lve.","popup_blocked":"A felugr\u00f3 ablakok tilt\u00e1sa miatt nem siker\u00fclt megjelen\u00edteni egy, az alkalmaz\u00e1shoz sz\u00fcks\u00e9ges ablakot. Enged\u00e9lyezze a b\u00f6ng\u00e9sz\u0151j\u00e9ben a felugr\u00f3 ablakokat, hogy minden funkci\u00f3t haszn\u00e1lhasson.","clipboard_no_support":"Jelenleg nem t\u00e1mogatja a b\u00f6ng\u00e9sz\u0151je, haszn\u00e1lja a billenty\u0171kombin\u00e1ci\u00f3kat helyette.","clipboard_msg":"A M\u00e1sol\u00e1s/Kiv\u00e1g\u00e1s/Besz\u00far\u00e1s funkci\u00f3k nem \u00e9rhet\u0151ek el Mozilla \u00e9s Firefox alatt.\nK\u00edv\u00e1n t\u00f6bbet tudni err\u0151l a t\u00e9m\u00e1r\u00f3l?","not_set":"-- Nincs megadva --","class_name":"Oszt\u00e1ly",browse:"Tall\u00f3z\u00e1s",close:"Bez\u00e1r\u00e1s",cancel:"M\u00e9gsem",update:"Friss\u00edt\u00e9s",insert:"Besz\u00far\u00e1s",apply:"Alkalmaz\u00e1s","edit_confirm":"Haszn\u00e1lni k\u00edv\u00e1nja a sz\u00f6vegszerkeszt\u0151 m\u00f3dot ebben a sz\u00f6vegdobozban?","invalid_data_number":"{#field} sz\u00e1m kell legyen","invalid_data_min":"{#field} egy nagyobb sz\u00e1m kell legyen, mint {#min}","invalid_data_size":"{#field} egy sz\u00e1m vagy sz\u00e1zal\u00e9k kell legyen",value:"(\u00e9rt\u00e9k)"},contextmenu:{full:"Sorkiz\u00e1rt",right:"Jobbra",center:"K\u00f6z\u00e9pre",left:"Balra",align:"Igaz\u00edt\u00e1s"},insertdatetime:{"day_short":"V,H,K,Sze,Cs,P,Szo,V","day_long":"vas\u00e1rnap,h\u00e9tf\u0151,kedd,szerda,cs\u00fct\u00f6rt\u00f6k,p\u00e9ntek,szombat,vas\u00e1rnap","months_short":"jan,feb,m\u00e1r,\u00e1pr,m\u00e1j,j\u00fan,j\u00fal,aug,szept,okt,nov,dec","months_long":"janu\u00e1r,febru\u00e1r,m\u00e1rcius,\u00e1prilis,m\u00e1jus,j\u00fanius,j\u00falius,augusztus,szeptember,okt\u00f3ber,november,december","inserttime_desc":"Id\u0151 besz\u00far\u00e1sa","insertdate_desc":"D\u00e1tum besz\u00far\u00e1sa","time_fmt":"%H:%M:%S","date_fmt":"%Y. %m. %d."},print:{"print_desc":"Nyomtat\u00e1s"},preview:{"preview_desc":"El\u0151n\u00e9zet"},directionality:{"rtl_desc":"Jobbr\u00f3l balra","ltr_desc":"Balr\u00f3l jobbra"},layer:{content:"\u00daj r\u00e9teg...","absolute_desc":"Abszol\u00fat poz\u00edci\u00f3 ki-/bekapcsol\u00e1sa","backward_desc":"Mozgat\u00e1s h\u00e1tra","forward_desc":"Mozgat\u00e1s el\u0151re","insertlayer_desc":"\u00daj r\u00e9teg besz\u00far\u00e1sa"},save:{"save_desc":"Ment\u00e9s","cancel_desc":"Minden m\u00f3dos\u00edt\u00e1s visszavon\u00e1sa"},nonbreaking:{"nonbreaking_desc":"Nemsort\u00f6r\u0151 sz\u00f3k\u00f6z besz\u00far\u00e1sa"},iespell:{download:"ieSpell nem tal\u00e1lhat\u00f3. Telep\u00edti most?","iespell_desc":"Helyes\u00edr\u00e1s-ellen\u0151rz\u00e9s futtat\u00e1sa"},advhr:{"advhr_desc":"V\u00edzszintes vonal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hangulatjelek","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Keres\u00e9s/Csere","search_desc":"Keres\u00e9s","delta_width":"","delta_height":""},advimage:{"image_desc":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","delta_width":"","delta_height":""},advlink:{"link_desc":"Link besz\u00far\u00e1sa/szerkeszt\u00e9se","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Tulajdons\u00e1gok besz\u00far\u00e1sa/szerkeszt\u00e9se","ins_desc":"Besz\u00fart","del_desc":"T\u00f6r\u00f6lt","acronym_desc":"Bet\u0171sz\u00f3","abbr_desc":"R\u00f6vid\u00edt\u00e9s","cite_desc":"Id\u00e9zet","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS st\u00edlus szerkeszt\u00e9se","delta_height":"","delta_width":""},paste:{"plaintext_mode":"A besz\u00far\u00e1s mostant\u00f3l egyszer\u0171 sz\u00f6veg m\u00f3dban van. Kattintson ide \u00fajra ezen m\u00f3d ki/be kapcsol\u00e1s\u00e1hoz.","plaintext_mode_sticky":"A besz\u00far\u00e1s mostant\u00f3l egyszer\u0171 sz\u00f6veg m\u00f3dban van. Kattintson ide \u00fajra ezen m\u00f3d ki/be kapcsol\u00e1s\u00e1hoz. Miut\u00e1n besz\u00far valamit, visszaker\u00fcl norm\u00e1l m\u00f3dba.","selectall_desc":"Mindent kijel\u00f6l","paste_word_desc":"Besz\u00far\u00e1s Wordb\u0151l","paste_text_desc":"Besz\u00far\u00e1s sz\u00f6vegk\u00e9nt"},"paste_dlg":{"word_title":"Haszn\u00e1lja a Ctrl+V-t a billenty\u0171zet\u00e9n a beilleszt\u00e9shez.","text_linebreaks":"Sort\u00f6r\u00e9sek megtart\u00e1sa","text_title":"Haszn\u00e1lja a Ctrl+V-t a billenty\u0171zet\u00e9n a beilleszt\u00e9shez."},table:{cell:"Cella",col:"Oszlop",row:"Sor",del:"T\u00e1bl\u00e1zat t\u00f6rl\u00e9se","copy_row_desc":"Sor m\u00e1sol\u00e1sa","cut_row_desc":"Sor kiv\u00e1g\u00e1sa","paste_row_after_desc":"Sor bem\u00e1sol\u00e1sa ut\u00e1na","paste_row_before_desc":"Sor bem\u00e1sol\u00e1sa el\u00e9","props_desc":"T\u00e1bl\u00e1zat tulajdons\u00e1gai","cell_desc":"Cella tulajdons\u00e1gai","row_desc":"Sor tulajdons\u00e1gai","merge_cells_desc":"Cell\u00e1k \u00f6sszevon\u00e1sa","split_cells_desc":"Cell\u00e1k feloszt\u00e1sa","delete_col_desc":"Oszlop t\u00f6rl\u00e9se","col_after_desc":"Oszlop besz\u00far\u00e1sa ut\u00e1na","col_before_desc":"Oszlop besz\u00far\u00e1sa el\u00e9","delete_row_desc":"Sor t\u00f6rl\u00e9se","row_after_desc":"Sor besz\u00far\u00e1sa ut\u00e1na","row_before_desc":"Sor besz\u00far\u00e1sa el\u00e9",desc:"T\u00e1bl\u00e1zat besz\u00far\u00e1sa/szerkeszt\u00e9se","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Ha visszat\u00f6lti a mentett be\u00e1ll\u00edt\u00e1sokat, a jelenlegi \u00e1llapot elv\u00e9sz.\n\nBiztosan visszat\u00f6lti a mentett \u00e1llapotot?.","restore_content":"Automatikus ment\u00e9s bet\u00f6lt\u00e9se.","unload_msg":"A m\u00f3dos\u00edt\u00e1sok nem lesznek mentve, ha elhagyja az oldalt."},fullscreen:{desc:"Teljesk\u00e9perny\u0151s m\u00f3d ki-/bekapcsol\u00e1sa"},media:{edit:"Be\u00e1gyazott m\u00e9dia szerkeszt\u00e9se",desc:"Be\u00e1gyazott m\u00e9dia besz\u00far\u00e1sa/szerkeszt\u00e9se","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentum tulajdons\u00e1gai","delta_width":"","delta_height":""},template:{desc:"Sablon beilleszt\u00e9se"},visualchars:{desc:"Vizu\u00e1lis vez\u00e9rl\u0151karakterek be/ki."},spellchecker:{desc:"Helyes\u00edr\u00e1s-ellen\u0151rz\u0151 ki-/bekapcsol\u00e1sa",menu:"Helyes\u00edr\u00e1s-ellen\u0151rz\u0151 tulajdons\u00e1gai","ignore_word":"Sz\u00f3 kihagy\u00e1sa","ignore_words":"Mindet kihagy",langs:"Nyelvek",wait:"K\u00e9rem, v\u00e1rjon...",sug:"Aj\u00e1nl\u00e1sok","no_sug":"Nincs aj\u00e1nl\u00e1s","no_mpell":"Nem tal\u00e1ltam helyes\u00edr\u00e1si hib\u00e1t.","learn_word":"Sz\u00f3 megjegyz\u00e9se"},pagebreak:{desc:"Oldalt\u00f6r\u00e9s besz\u00far\u00e1sa"},advlist:{types:"T\u00edpusok",def:"Alap\u00e9rtelmezett","lower_alpha":"Kisbet\u0171s abc","lower_greek":"Kisbet\u0171s g\u00f6r\u00f6g","lower_roman":"Kisbet\u0171s r\u00f3mai","upper_alpha":"Nagybet\u0171s ABC","upper_roman":"Nagybet\u0171s r\u00f3mai",circle:"Karika",disc:"P\u00f6tty",square:"N\u00e9gyzet"},colors:{"333300":"S\u00f6t\u00e9t ol\u00edv","993300":"\u00c9g\u0151 narancs","000000":"Fekete","003300":"S\u00f6t\u00e9t z\u00f6ld","003366":"S\u00f6t\u00e9t az\u00far","000080":"Tenger k\u00e9k","333399":"Indig\u00f3","333333":"Nagyon s\u00f6t\u00e9tsz\u00fcrke","800000":"Gesztenyebarna",FF6600:"Narancs","808000":"Ol\u00edv","008000":"Z\u00f6ld","008080":"P\u00e1vak\u00e9k","0000FF":"K\u00e9k","666699":"Sz\u00fcrk\u00e9s k\u00e9k","808080":"Sz\u00fcrke",FF0000:"V\u00f6r\u00f6s",FF9900:"Borosty\u00e1ns\u00e1rga","99CC00":"S\u00e1rg\u00e1s z\u00f6ld","339966":"Tengerz\u00f6ld","33CCCC":"T\u00fcrk\u00edz","3366FF":"Kir\u00e1lyk\u00e9k","800080":"B\u00edbor","999999":"K\u00f6z\u00e9psz\u00fcrke",FF00FF:"B\u00edborv\u00f6r\u00f6s",FFCC00:"Arany",FFFF00:"S\u00e1rga","00FF00":"Vil\u00e1gos borosty\u00e1n","00FFFF":"V\u00edz","00CCFF":"\u00c9gk\u00e9k","993366":"Barna",C0C0C0:"Ez\u00fcst",FF99CC:"R\u00f3zsasz\u00edn",FFCC99:"Barack",FFFF99:"Vil\u00e1gos s\u00e1rga",CCFFCC:"Halv\u00e1ny z\u00f6ld",CCFFFF:"Halv\u00e1ny ci\u00e1n","99CCFF":"Vil\u00e1gos \u00e9gk\u00e9k",CC99FF:"Szilvak\u00e9k",FFFFFF:"Feh\u00e9r"},aria:{"rich_text_area":"Rich Text mez\u0151"},wordcount:{words:"Szavak sz\u00e1ma: "}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hy.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hy.js
new file mode 100644
index 000000000..04a24f6f4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/hy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({hy:{common:{"more_colors":"\u0547\u0561\u057f \u0563\u0578\u0582\u0575\u0576\u0565\u0580","invalid_data":"\u054d\u056d\u0561\u056c: \u0546\u0565\u0580\u0561\u056e\u057e\u0561\u056e \u0567 \u057d\u056d\u0561\u056c \u0561\u0580\u056a\u0565\u0584, \u0563\u0578\u0582\u0576\u0561\u0576\u0577\u057e\u0561\u056e \u0567 \u056f\u0561\u0580\u0574\u056b\u0580\u0578\u057e","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","clipboard_no_support":"\u054f\u057e\u0575\u0561\u056c \u057a\u0561\u0570\u056b\u0576 \u0579\u056b \u0568\u0576\u0564\u0578\u0582\u0576\u057e\u0578\u0582\u0574 \u0541\u0565\u0580 \u0562\u0580\u0561\u0578\u0582\u0566\u0565\u0580\u056b \u056f\u0578\u0572\u0574\u056b\u0581, \u0585\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0565\u0584 \u0570\u0561\u057a\u0561\u057e\u0578\u0582\u0574\u0576\u0565\u0580","clipboard_msg":"\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c / \u053f\u057f\u0580\u0565\u056c / \u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c (\u0574\u0561\u057f\u0579\u0565\u056c\u056b \u0579\u0567 Mozilla \u0587 Firefox \u0562\u0580\u0561\u0578\u0582\u0566\u0565\u0580\u0576\u0565\u0580\u0578\u0582\u0574) \\ n \u0541\u0565\u0566 \u0570\u0565\u057f\u0561\u0584\u0580\u0584\u056b\u055e\u0580 \u0567 \u0561\u0575\u0564 \u056b\u0576\u0586\u0578\u0580\u0574\u0561\u0581\u056b\u0561\u0576","not_set":"- \u0568\u0576\u057f\u0580\u0565\u056c -","class_name":"\u0534\u0561\u057d",browse:"\u0534\u056b\u057f\u0565\u056c",close:"\u0553\u0561\u056f\u0565\u056c",cancel:"\u0549\u0565\u0572\u0575\u0561\u056c",update:"\u0539\u0561\u0580\u0574\u0561\u0581\u0576\u0565\u056c",insert:"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c",apply:"\u0540\u0561\u057d\u057f\u0561\u057f\u0565\u056c","edit_confirm":"\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WYSIWYG \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u0538\u057d\u057f \u056c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0561\u0576",right:"\u0538\u057d\u057f \u0561\u057b \u0565\u0566\u0580\u056b",center:"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0581\u0576\u0565\u056c",left:"\u0538\u057d\u057f \u0571\u0561\u056d \u0565\u0566\u0580\u056b",align:"\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574"},insertdatetime:{"day_short":"\u053f\u056b\u0580, \u0535\u0580\u056f, \u0535\u0580\u0584, \u0549\u0580\u0584, \u0540\u0576\u0563, \u0548\u0582\u0580\u0562, \u0547\u0562\u0569, \u053f\u056b\u0580","day_long":"\u056f\u056b\u0580\u0561\u056f\u056b, \u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b, \u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b, \u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b, \u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b, \u0578\u0582\u0580\u0562\u0561\u0569, \u0577\u0561\u0562\u0561\u0569, \u056f\u056b\u0580\u0561\u056f\u056b","months_short":"\u0570\u0578\u0582\u0576, \u0583\u0565\u057f, \u0574\u0561\u0580\u057f, \u0561\u057a\u0580, \u0574\u0561\u0575\u056b\u057d, \u0570\u0578\u0582\u0576, \u0570\u0578\u0582\u056c, \u0585\u0563\u057d\u057f, \u057d\u0565\u057a\u057f, \u0570\u0578\u056f\u057f, \u0576\u0578\u0575, \u0564\u0565\u056f","months_long":"\u0570\u0578\u0582\u0576\u057e\u0561\u0580, \u0583\u0565\u057f\u0580\u057e\u0561\u0580, \u0574\u0561\u0580\u057f, \u0561\u057a\u0580\u056b\u056c, \u0574\u0561\u0575\u056b\u057d, \u0570\u0578\u0582\u0576\u056b\u057d, \u0570\u0578\u0582\u056c\u056b\u057d, \u0585\u0563\u0578\u057d\u057f\u0578\u057d, \u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580, \u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580, \u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580, \u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580","inserttime_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u056a\u0561\u0574\u0561\u0576\u0561\u056f","insertdate_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0561\u0574\u057d\u0561\u0569\u056b\u057e","time_fmt":"% H:% M:% S","date_fmt":"% d.% m.% Y"},print:{"print_desc":"\u054f\u057a\u0565\u056c"},preview:{"preview_desc":"\u0534\u056b\u057f\u0565\u056c"},directionality:{"rtl_desc":"\u0548\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568\u055d \u0561\u057b\u056b\u0581 \u0571\u0561\u056d","ltr_desc":"\u0548\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568\u055d \u0571\u0561\u056d\u056b\u0581 \u0561\u057b"},layer:{content:"\u0546\u0578\u0580 \u0577\u0565\u0580\u057f ...","absolute_desc":"\u053f\u056b\u0580\u0561\u057c\u0565\u056c \u0562\u0561\u0581\u0561\u0580\u0571\u0561\u056f \u057f\u0565\u0572\u0561\u056f\u0561\u0575\u0578\u0582\u0574","backward_desc":"\u054f\u0565\u0572\u0561\u0583\u0578\u056d\u0565\u056c \u0565\u057f","forward_desc":"\u054e\u0565\u0580\u0587","insertlayer_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0576\u0578\u0580 \u0577\u0565\u0580\u057f"},save:{"save_desc":"\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c","cancel_desc":"\u0549\u0565\u0572\u0561\u0580\u056f\u0565\u056c \u0562\u0561\u056c\u0561\u0580 \u0583\u0578\u0583\u0578\u056d\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568"},nonbreaking:{"nonbreaking_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0562\u0561\u0581\u0561\u0580\u056f"},iespell:{download:"ieSpell \u057a\u056c\u0561\u0563\u056b\u0576\u0568 \u0579\u056b \u0563\u057f\u0576\u057e\u0565\u056c\u0589 \u0551\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u055e\u0574 \u0565\u0584 \u057f\u0565\u0572\u0561\u0564\u0580\u0565\u056c","iespell_desc":"\u054f\u0561\u057c\u0561\u057d\u056d\u0561\u056c\u0576\u0565\u0580\u056b \u057d\u057f\u0578\u0582\u0563\u0578\u0582\u0574"},advhr:{"advhr_desc":"\u0540\u0561\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u0562\u0561\u056a\u0561\u0576\u056b\u0579","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u054d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0548\u0580\u0578\u0576\u0565\u056c / \u0553\u0578\u0583\u0578\u056d\u0565\u056c","search_desc":"\u0548\u0580\u0578\u0576\u0565\u056c","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0576\u056f\u0561\u0580","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0570\u0572\u0578\u0582\u0574","delta_height":""},xhtmlxtras:{"attribs_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0561\u057f\u0580\u056b\u0562\u0578\u0582\u057f\u0576\u0565\u0580\u0568","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u053d\u0574\u0562\u0561\u0563\u0580\u0565\u056c CSS \u0578\u0573\u0565\u0580\u0568","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u0538\u0576\u057f\u0580\u0565\u056c \u0562\u0578\u056c\u0578\u0580\u0568","paste_word_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c Word \u056e\u0580\u0561\u0563\u0580\u056b\u0581","paste_text_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0578\u0580\u057a\u0565\u057d \u057f\u0565\u0584\u057d\u057f","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0565\u0584 CTRL + V \u057a\u0561\u057f\u0573\u0565\u0576\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u056b \u057f\u0565\u0572\u0561\u0564\u0580\u0574\u0561\u0576 \u0570\u0561\u0574\u0561\u0580","text_linebreaks":"\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c \u057f\u0578\u0572\u0561\u0564\u0561\u0580\u0571\u0565\u0580\u0568","text_title":"\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0565\u0584 CTRL + V \u057a\u0561\u057f\u0573\u0565\u0576\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u056b \u057f\u0565\u0572\u0561\u0564\u0580\u0574\u0561\u0576 \u0570\u0561\u0574\u0561\u0580"},table:{"cellprops_delta_width":"30",cell:"\u042f\u0447\u0435\u0439\u043a\u0430",col:"\u041f\u043e\u043b\u0435",row:"\u0421\u0442\u0440\u043e\u043a\u0430",del:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443","copy_row_desc":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","cut_row_desc":"\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","paste_row_after_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0441\u043b\u0435","paste_row_before_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043e","props_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","cell_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","row_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","merge_cells_desc":"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438","split_cells_desc":"\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438","delete_col_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446","col_after_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043f\u043e\u0441\u043b\u0435","col_before_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u043e","delete_row_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","row_after_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0441\u043b\u0435","row_before_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043e",desc:"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0576\u0578\u0580 \u0561\u0572\u0575\u0578\u0582\u057d\u0561\u056f","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438, \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u044b, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d"},media:{edit:"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c embedded media",desc:"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0574\u0565\u0564\u056b\u0561","delta_height":"","delta_width":""},fullpage:{desc:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","delta_width":"","delta_height":""},template:{desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442"},visualchars:{desc:"Visual control characters on / off"},spellchecker:{desc:"\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443",menu:"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438","ignore_word":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0432\u043e","ignore_words":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435",langs:"\u042f\u0437\u044b\u043a\u0438",wait:"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 ...",sug:"\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b","no_sug":"\u041d\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432","no_mpell":"\u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e","learn_word":"Learn word"},pagebreak:{desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ia.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ia.js
new file mode 100644
index 000000000..85092e857
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ia.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ia:{common:{"more_colors":"\u66f4\u591a\u989c\u8272","invalid_data":"\u9519\u8bef\uff1a\u8f93\u5165\u4e86\u65e0\u6548\u7684\u503c\uff0c\u5df2\u6807\u8bb0\u4e3a\u7ea2\u8272\u3002","popup_blocked":"\u5bf9\u4e0d\u8d77\uff0c\u60a8\u7684\u5feb\u663e\u7a97\u53e3\u963b\u6b62\u7a0b\u5e8f\u5df2\u7ecf\u963b\u6b62\u4e86\u672c\u5feb\u663e\u7a97\u53e3\uff0c\u8bf7\u8c03\u6574\u4f60\u7684\u6d4f\u89c8\u5668\u8bbe\u7f6e\uff0c\u5141\u8bb8\u672c\u7f51\u7ad9\u5f39\u51fa\u65b0\u7a97\u53e3\uff0c\u4ee5\u4fbf\u4f7f\u7528\u6b64\u529f\u80fd","clipboard_no_support":"\u5c1a\u4e0d\u652f\u6301\u60a8\u6240\u4f7f\u7528\u7684\u6d4f\u89c8\u5668\uff0c\u8bf7\u4f7f\u7528\u952e\u76d8\u65b9\u5f0f\u64cd\u4f5c","clipboard_msg":"\u590d\u5236\u3001\u526a\u5207\u548c\u7c98\u8d34\u529f\u80fd\u5728Mozilla \u548c Firefox\u4e2d\u65e0\u6cd5\u4f7f\u7528","not_set":"-- \u672a\u8bbe\u7f6e --","class_name":"\u6837\u5f0f\u7c7b\u540d",browse:"\u6d4f\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5e94\u7528","edit_confirm":"\u662f\u5426\u5728\u8be5text area\u5185\u542f\u7528\u6240\u89c1\u5373\u6240\u5f97\u6a21\u5f0f\uff1f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u4e24\u7aef\u5bf9\u9f50",right:"\u53f3\u5bf9\u9f50",center:"\u5c45\u4e2d",left:"\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50\u65b9\u5f0f"},insertdatetime:{"day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u73b0\u5728\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u4eca\u5929\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u6253\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u6587\u5b57\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u6587\u5b57\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u589e\u5c42...","absolute_desc":"\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u540e\u7f6e","forward_desc":"\u524d\u7f6e","insertlayer_desc":"\u63d2\u5165\u5c42"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u653e\u5f03\u6240\u6709\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u683c\u7b26"},iespell:{download:"\u672a\u68c0\u6d4b\u5230ieSpell\u7ec4\u4ef6\uff0c\u662f\u5426\u73b0\u5728\u5b89\u88c5 ?","iespell_desc":"\u6267\u884c\u62fc\u5199\u68c0\u67e5"},advhr:{"advhr_desc":"\u5206\u9694\u7ebf","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u8868\u60c5","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u67e5\u627e/\u66ff\u6362","search_desc":"\u67e5\u627e","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7f16\u8f91 \u8fde\u7ed3","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u63d2\u5165/\u7f16\u8f91 \u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7f16\u8f91 CSS \u6837\u5f0f\u8868","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u5168\u9009","paste_word_desc":"\u7c98\u8d34\u4e3aWord\u683c\u5f0f","paste_text_desc":"\u7c98\u8d34\u4e3a\u7eaf\u6587\u5b57","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u5c06\u590d\u5236(CTRL + C)\u7684\u5185\u5bb9\u7c98\u8d34(CTRL + V)\u5230\u7a97\u53e3\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7\u53f7","text_title":"\u5c06\u590d\u5236(CTRL + C)\u7684\u5185\u5bb9\u7c98\u8d34(CTRL + V)\u5230\u7a97\u53e3\u3002"},table:{cell:"\u50a8\u5b58\u683c",col:"\u5217",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u5f53\u524d\u5217","cut_row_desc":"\u526a\u5207\u5f53\u524d\u5217","paste_row_after_desc":"\u7c98\u8d34\u884c\u5230\u4e0b\u65b9","paste_row_before_desc":"\u7c98\u8d34\u884c\u5230\u4e0a\u65b9","props_desc":"\u8868\u683c \u5c5e\u6027","cell_desc":"\u50a8\u5b58\u683c \u5c5e\u6027","row_desc":"\u5217 \u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u50a8\u5b58\u683c","split_cells_desc":"\u62c6\u5206\u50a8\u5b58\u683c","delete_col_desc":"\u5220\u9664\u5f53\u524d\u5217","col_after_desc":"\u5728\u53f3\u4fa7\u63d2\u5165\u5217","col_before_desc":"\u5728\u5de6\u4fa7\u63d2\u5165\u5217","delete_row_desc":"\u5220\u9664\u5f53\u524d\u884c","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u5982\u679c\u79bb\u5f00\u8be5\u9875\u5c06\u5bfc\u81f4\u6240\u6709\u4fee\u6539\u5168\u90e8\u4e22\u5931\u3002","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u5168\u5c4f\u6a21\u5f0f"},media:{edit:"\u7f16\u8f91 \u5a92\u4f53",desc:"\u63d2\u5165/\u7f16\u8f91 \u5a92\u4f53","delta_height":"","delta_width":""},fullpage:{desc:"\u6587\u4ef6","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9009\u5b9a\u7684\u8303\u672c"},visualchars:{desc:"\u663e\u793a\u63a7\u5236\u7b26\u53f7\u3002"},spellchecker:{desc:"\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5199\u68c0\u67e5 \u8bbe\u7f6e","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8bed\u8a00\u6e05\u5355",wait:"\u8bf7\u7a0d\u5019...",sug:"\u5efa\u8bae\u8bcd","no_sug":"\u65e0\u62fc\u5199\u5efa\u8bae","no_mpell":"\u65e0\u62fc\u5199\u9519\u8bef","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26\u53f7"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/id.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/id.js
new file mode 100644
index 000000000..1577926ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/id.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({id:{common:{"more_colors":"More colors","invalid_data":"Error: nilai invalid, ditandai dengan dengan warna merah","popup_blocked":"Maaf, popup-blocker anda telah menonaktifkan jendela aplikasi yang menyediakan fungsionalitas. Nonaktifkan popup-blocker untuk sepenuhnya memanfaatkan alat ini.","clipboard_no_support":"Tidak didukung Browser, gunakan shortcut dari keyboard.","clipboard_msg":"Copy/Cut/Paste tidak tersedia pada Mozilla dan Firefox.\nButuh info selengkapnya?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Gunakan mode WYSIWYG untuk textarea ini?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Penuh",right:"Kanan",center:"Tengah",left:"Kiri",align:"Alignment"},insertdatetime:{"day_short":"Min,Sen,Sel,Rab,Kam,Jum,Sab,Min","day_long":"Minggu,Senin,Selasa,Rabu,Kamis,Jumat,Sabtu,Minggu","months_short":"Jan,Feb,Mar,Apr,Mei,Jun,Jul,Ags,Sep,Okt,Nov,Des","months_long":"Januari,Februari,Maren,April,Mei,Juni,Juli,Agustus,September,Oktober,November,Desember","inserttime_desc":"sisipkan waktu","insertdate_desc":"sisipkan tanggal","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Cetak"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Arah kanan ke kiri","ltr_desc":"Arah kiri ke kanan"},layer:{content:"Layer baru...","absolute_desc":"Beralih posisi absolut","backward_desc":"Pindah ke belakang","forward_desc":"Pindah ke depan","insertlayer_desc":"sisipkan layer Baru"},save:{"save_desc":"Simpan","cancel_desc":"Batalkan semua perubahan"},nonbreaking:{"nonbreaking_desc":"sisipkan karakter non-breaking space"},iespell:{download:"ieSpell tidak terdeteksi. Instal sekarang?","iespell_desc":"Jalankan spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Cari/Ganti","search_desc":"Cari","delta_width":"","delta_height":""},advimage:{"image_desc":"sisipkan/Ubah Gambar","delta_width":"","delta_height":""},advlink:{"link_desc":"Sisipkan/Ubah link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Sisip/Ubah Atribut","ins_desc":"Penyisipan","del_desc":"Penghapusan","acronym_desc":"Akronim","abbr_desc":"Singkatan/Kependekan Kata","cite_desc":"Kutipan","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Ubah CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Gunakan CTRL+V pada keyboard untuk paste.","text_linebreaks":"Keep linebreaks","text_title":"Gunakan CTRL+V pada keyboard untuk paste."},table:{cell:"Cell",col:"Column",row:"Row",del:"Hapus Tabel","copy_row_desc":"Copy row tabel","cut_row_desc":"Cut row tabel","paste_row_after_desc":"Paste row tabel sesudah","paste_row_before_desc":"Paste row tabel sebelum","props_desc":"Properti tabel","cell_desc":"Properti cell tabel","row_desc":"Properti row tabel","merge_cells_desc":"Merge cell tabel","split_cells_desc":"Pisahkan cell tabel yang di-merge","delete_col_desc":"Hapus column","col_after_desc":"Sisipkan column setelah","col_before_desc":"Sisipkan column sebelum","delete_row_desc":"Hapus row","row_after_desc":"Sisipkan row sesudah","row_before_desc":"Sisipkan row sebelum",desc:"Sisipkan tabel baru","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"Perubahan yang dilakukan akan hilang jika Anda pindah dari halaman ini.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Properti Dokumen","delta_width":"","delta_height":""},template:{desc:"Menyisipkan template standar isi"},visualchars:{desc:"Pengendalian visual karakter on/off"},spellchecker:{desc:"Toggle spellchecker",menu:"Pengaturan Spellchecker ","ignore_word":"Abaikan kata","ignore_words":"Abaikan semua",langs:"Bahasa",wait:"Harap tunggu...",sug:"Saran","no_sug":"Tidak ada saran","no_mpell":"Tidak ada misspellings ditemukan.","learn_word":"Learn word"},pagebreak:{desc:"Sisipkan page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/is.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/is.js
new file mode 100644
index 000000000..ae20e20b0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/is.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({is:{common:{"more_colors":"Fleiri litir","invalid_data":"Villa: Vitlaus gildi slegin inn, \u00feau eru merkt me\u00f0 rau\u00f0u.","popup_blocked":"Afsaki\u00f0, uppsprettuv\u00f6rnin \u00fe\u00edn (popup blocker) hefur loka\u00f0 \u00e1 glugga sem er hluti af ritlinum. \u00de\u00fa ver\u00f0ur a\u00f0 sl\u00f6kkva \u00e1 uppsprettuv\u00f6rn til a\u00f0 geta nota\u00f0 \u00feennan ritil.","clipboard_no_support":"Ekki stutt \u00ed \u00fe\u00ednum vefsko\u00f0ara, nota\u00f0ur fl\u00fdtilykla \u00ed sta\u00f0inn.","clipboard_msg":"Afrita/Klippa/L\u00edma er ekki a\u00f0gengilegt \u00ed Mozilla og Firefox eins og er.\nViltu f\u00e1 n\u00e1nari uppl\u00fdsingar?","not_set":"-- Ekki skilgreint --","class_name":"Klasi",browse:"Gramsa",close:"Loka",cancel:"H\u00e6tta vi\u00f0",update:"Uppf\u00e6ra",insert:"Setja inn",apply:"Sta\u00f0festa","edit_confirm":"Viltu nota WYSIWYG ritil fyrir \u00feetta textasv\u00e6\u00f0i?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"H\u00e6gri",center:"Mi\u00f0ja",left:"Vinstri",align:"J\u00f6fnun"},insertdatetime:{"day_short":"Sun,M\u00e1n,\u00deri,Mi\u00f0,Fim,F\u00f6s,Lau,Sun","day_long":"Sunnudagur,M\u00e1nudagur,\u00deri\u00f0judagur,Mi\u00f0vikudagur,Fimmtudagur,F\u00f6studagur,Laugardagur,Sunnudagur","months_short":"Jan,Feb,Mar,Apr,Ma\u00ed,J\u00fan,J\u00fal,\u00c1gs,Sep,Okt,N\u00f3v,Des","months_long":"Jan\u00faar,Febr\u00faar,Mars,Apr\u00edl,Ma\u00ed,J\u00fan\u00ed,J\u00fal\u00ed,\u00c1g\u00fast,September,Okt\u00f3ber,N\u00f3vember,Desember","inserttime_desc":"Setja inn t\u00edmasetningu","insertdate_desc":"Setja inn dagsetningu","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Prenta"},preview:{"preview_desc":"Forsko\u00f0a"},directionality:{"rtl_desc":"Fr\u00e1 h\u00e6gri til vinstri","ltr_desc":"Fr\u00e1 vinstri til h\u00e6gri"},layer:{content:"N\u00fdtt lag...","absolute_desc":"Taka af/setja \u00e1 algj\u00f6ra j\u00f6fnun","backward_desc":"F\u00e6ra afturfyrir","forward_desc":"F\u00e6ra framfyrir","insertlayer_desc":"Setja inn n\u00fdtt lag"},save:{"save_desc":"Vista","cancel_desc":"H\u00e6tta vi\u00f0 allar breytingar"},nonbreaking:{"nonbreaking_desc":"Setja inn bil staf"},iespell:{download:"ieSpell fannst ekki. Viltu setja \u00fea\u00f0 inn n\u00fana?","iespell_desc":"Lesa yfir"},advhr:{"delta_height":"H\u00e6\u00f0","delta_width":"Breidd","advhr_desc":"L\u00e1r\u00e9tt l\u00edna"},emotions:{"delta_height":"H\u00e6\u00f0","delta_width":"Breidd","emotions_desc":"Broskarlar"},searchreplace:{"replace_desc":"Finna/Skipta \u00fat","delta_width":"Breidd","delta_height":"H\u00e6\u00f0","search_desc":"Finna"},advimage:{"delta_width":"Breidd","image_desc":"Setja inn/breyta mynd","delta_height":"H\u00e6\u00f0"},advlink:{"delta_height":"H\u00e6\u00f0","delta_width":"Breidd","link_desc":"Setja inn/breyta hlekk"},xhtmlxtras:{"attribs_desc":"Skr\u00e1/breyta gildum","ins_desc":"Vi\u00f0b\u00f3t","del_desc":"Ey\u00f0a","acronym_desc":"Acronym","abbr_desc":"Skammst\u00f6fun","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_height":"H\u00e6\u00f0","delta_width":"Breidd",desc:"Breyta st\u00edlsni\u00f0i"},paste:{"plaintext_mode":"L\u00edma er n\u00fa \u00ed venjulegum textaham. Smelltu aftur til a\u00f0 skipta aftur \u00ed venjulegan ham","plaintext_mode_sticky":"L\u00edma er n\u00fa \u00ed venjulegum textaham. Smelltu aftur til a\u00f0 skipta yfir \u00ed venjulegan l\u00edma ham. Eftir a\u00f0 \u00fe\u00fa l\u00edmir eitthva\u00f0 f\u00e6rist \u00fe\u00fa sj\u00e1lfvirkt aftur \u00ed venjulegan ham.","selectall_desc":"Velja allt","paste_word_desc":"L\u00edma \u00far Word","paste_text_desc":"L\u00edma sem hreinn texti"},"paste_dlg":{"word_title":"Nota\u00f0u CTRL+V \u00e1 lyklabo\u00f0rinu til a\u00f0 l\u00edma textanum \u00ed ritilinn.","text_linebreaks":"Halda endingu l\u00edna","text_title":"Nota\u00f0u CTRL+V \u00e1 lyklabor\u00f0inu til a\u00f0 l\u00edma textanum \u00ed ritilinn."},table:{cell:"Reitur",col:"D\u00e1lkur",row:"R\u00f6\u00f0",del:"Ey\u00f0a t\u00f6flu","copy_row_desc":"Afrita r\u00f6\u00f0ina","cut_row_desc":"Klippa r\u00f6\u00f0ina","paste_row_after_desc":"L\u00edma t\u00f6flur\u00f6\u00f0 fyrir ne\u00f0an","paste_row_before_desc":"L\u00edma t\u00f6flur\u00f6\u00f0 fyrir ofan","props_desc":"Eiginleikar t\u00f6flu","cell_desc":"Eiginleikar d\u00e1lka","row_desc":"Eiginleikar ra\u00f0ar","merge_cells_desc":"Sameina t\u00f6flureiti","split_cells_desc":"Sundra sameinu\u00f0um t\u00f6flureitum","delete_col_desc":"Ey\u00f0a d\u00e1lk","col_after_desc":"Setja inn n\u00fdjan d\u00e1lk fyrir aftan","col_before_desc":"Setja inn n\u00fdjan d\u00e1lk fyrir framan","delete_row_desc":"Ey\u00f0a r\u00f6\u00f0","row_after_desc":"Setja inn n\u00fdja r\u00f6\u00f0 fyrir ne\u00f0an","row_before_desc":"Setja inn n\u00fdja r\u00f6\u00f0 fyrir ofan",desc:"Setja inn n\u00fdja t\u00f6flu","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Ef \u00fe\u00fa n\u00e6r\u00f0 \u00ed vistu\u00f0u g\u00f6gnin \u00fe\u00e1 missir \u00fe\u00fa allt innihald sem er n\u00fa \u00feegar \u00ed ritlinum.\n\nErtu viss um a\u00f0 \u00fe\u00fa viljir keyra vistu\u00f0u g\u00f6gnin yfir?","restore_content":"N\u00e1 \u00ed vistu\u00f0 g\u00f6gn","unload_msg":"Breytingar sem \u00fe\u00fa ger\u00f0ir hafa ekki veri\u00f0 vista\u00f0ar"},fullscreen:{desc:"Skipta \u00e1 milli heilskj\u00e1s"},media:{edit:"Breyta birtanlegri margmi\u00f0lun",desc:"Setja inn / Breyta birtingu margmi\u00f0lunar","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Setja inn tilb\u00fai\u00f0 sni\u00f0"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Virka/\u00f3virkja villup\u00faka",menu:"Stillingar villup\u00faka","ignore_word":"Sleppa or\u00f0i","ignore_words":"Sleppa \u00f6llu",langs:"Tungum\u00e1l",wait:"Augnablik...",sug:"Till\u00f6gur","no_sug":"Engar till\u00f6gur","no_mpell":"Fann engar stafsetningavillur.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/it.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/it.js
new file mode 100644
index 000000000..af57d8559
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/it.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({it:{common:{"more_colors":"Colori aggiuntivi...","invalid_data":"Errore: valori inseriti non validi, sono marcati in rosso.","popup_blocked":"Spiacente, ma il blocco popup ha disabilitato una finestra che fornisce funzionalit\u00e0 dell\'applicazione. Si deve disabilitare il blocco popup per questo sito per poter utlizzare appieno questo strumento.","clipboard_no_support":"Attualmente non supportato dal browser in uso, usare le scorciatoie da tastiera.","clipboard_msg":"Copia/Taglia/Incolla non \u00e8 disponibile in Mozilla e Firefox.\nSi desidera avere maggiori informazioni su questo problema?","not_set":"-- Non impostato --","class_name":"Classe",browse:"Sfoglia",close:"Chiudi",cancel:"Annulla",update:"Aggiorna",insert:"Inserisci",apply:"Applica","edit_confirm":"Usare la modalit\u00e0 WYSIWYG per questa textarea?","invalid_data_number":"{#field} deve essere un numero","invalid_data_min":"{#field} deve essere un numero maggiore di {#min}","invalid_data_size":"{#field} deve essere un numero o una percentuale",value:"(valore)"},contextmenu:{full:"Giustifica",right:"Allinea a destra",center:"Centra",left:"Allinea a sinistra",align:"Allineamento"},insertdatetime:{"day_short":"Dom,Lun,Mar,Mer,Gio,Ven,Sab,Dom","day_long":"Domenica,Luned\u00ec,Marted\u00ec,Mercoled\u00ec,Gioved\u00ec,Venerd\u00ec,Sabato,Domenica","months_short":"Gen,Feb,Mar,Apr,Mag,Giu,Lug,Ago,Set,Ott,Nov,Dic","months_long":"Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre","inserttime_desc":"Inserisci ora","insertdate_desc":"Inserisci data","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Stampa"},preview:{"preview_desc":"Anteprima"},directionality:{"rtl_desc":"Direzione da destra a sinistra","ltr_desc":"Direzione da sinistra a destra"},layer:{content:"Nuovo layer...","absolute_desc":"Attiva/Disattiva posizionamento assoluto","backward_desc":"Porta in sfondo","forward_desc":"Porta in rilievo","insertlayer_desc":"Inserisci nuovo layer"},save:{"save_desc":"Salva","cancel_desc":"Cancella tutte le modifiche"},nonbreaking:{"nonbreaking_desc":"Inserisci uno spazio"},iespell:{download:"ieSpell non rilevato. Installarlo ora?","iespell_desc":"Esegui controllo ortografico"},advhr:{"advhr_desc":"Riga orizzontale","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Faccine","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Trova/Sostituisci","search_desc":"Trova","delta_width":"","delta_height":""},advimage:{"image_desc":"Inserisci/modifica immagine","delta_width":"","delta_height":""},advlink:{"link_desc":"Inserisci/modifica collegamento","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Inserisci/modifica attributi","ins_desc":"Inserimento","del_desc":"Cancellamento","acronym_desc":"Acronimo","abbr_desc":"Abbreviazione","cite_desc":"Citazione","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Modifica stile CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Incolla adesso e in modalit\u00e0 testo. Clicca nuovamente per tornare alla modalit\u00e0 normale.","plaintext_mode_sticky":"Incolla adesso e in modalit\u00e0 testo. Clicca nuovamente per tornare alla modalit\u00e0 normale. Dopo che avrai incollato qualcosa tornerai alla modalit\u00e0 normale","selectall_desc":"Seleziona tutto","paste_word_desc":"Incolla da Word","paste_text_desc":"Incolla come testo semplice"},"paste_dlg":{"word_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra.","text_linebreaks":"Mantieni interruzioni di riga","text_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra."},table:{cell:"Cella",col:"Colonna",row:"Riga",del:"Elimina tabella","copy_row_desc":"Copia riga","cut_row_desc":"Taglia riga","paste_row_after_desc":"Incolla riga dopo","paste_row_before_desc":"Incolla riga prima","props_desc":"Propriet\u00e0 tabella","cell_desc":"Propriet\u00e0 cella","row_desc":"Propriet\u00e0 riga","merge_cells_desc":"Unisci celle","split_cells_desc":"Separa celle","delete_col_desc":"Elimina colonna","col_after_desc":"Inserisci colonna dopo","col_before_desc":"Inserisci colonna prima","delete_row_desc":"Elimina riga","row_after_desc":"Inserisci riga dopo","row_before_desc":"Inserisci riga prima",desc:"Inserisci una nuova tabella","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Se ripristini i dati salvati automaticamente perderai i dati attuali dell\'editor\n\nSei sicuro di voler ripristinare i dati?.","restore_content":"Ripristina i dati salvati automaticamente","unload_msg":"I cambiamenti effettuati saranno persi se si abbandona la pagina corrente."},fullscreen:{desc:"Attiva/disattiva modalit\u00e0 a tutto schermo"},media:{edit:"Modifica file multimediale",desc:"Inserisci/modifica file multimediale","delta_height":"","delta_width":""},fullpage:{desc:"Propriet\u00e0 Documento","delta_width":"","delta_height":""},template:{desc:"Inserisci contenuto da modello predefinito"},visualchars:{desc:"Attiva/disattiva caratteri di controllo visuale."},spellchecker:{desc:"Attiva/disattiva controllo ortografico",menu:"Impostazioni controllo ortografico","ignore_word":"Ignora parola","ignore_words":"Ignora tutto",langs:"Lingue",wait:"Attendere prego...",sug:"Suggerimenti","no_sug":"Nessun suggerimento","no_mpell":"Nessun errore rilevato.","learn_word":"Learn word"},pagebreak:{desc:"Inserisci intterruzione di pagina."},advlist:{types:"Tipi",def:"Default","lower_alpha":"Minuscolo alfanumerico","lower_greek":"Minuscolo lettera greca","lower_roman":"Minuscolo lettere romane","upper_alpha":"Maiuscolo alfanumerico","upper_roman":"Maiuscolo lettere romane",circle:"Cerchio",disc:"Punto",square:"Quadrato"},colors:{"333300":"Verde oliva scuro","993300":"Arancio bruciato","000000":"Nero","003300":"Verde scuro","003366":"Azzurro scuro","000080":"Blu navy","333399":"Indaco","333333":"Grigio molto scuro","800000":"Marrone",FF6600:"Arancione","808000":"Verde oliva","008000":"Verde","008080":"Verde azzurro","0000FF":"Blu","666699":"Grigio blu","808080":"Grigio",FF0000:"Rosso",FF9900:"Ambra","99CC00":"Giallo verde","339966":"Verde acqua","33CCCC":"Turchese","3366FF":"Blu royal","800080":"Porpora","999999":"Grigio topo",FF00FF:"Magenta",FFCC00:"Oro",FFFF00:"Giallo","00FF00":"Lime","00FFFF":"Acqua","00CCFF":"Blu cielo","993366":"Vinaccia",C0C0C0:"Argento",FF99CC:"Rosa",FFCC99:"Pesca",FFFF99:"Giallo chiaro",CCFFCC:"Verde chiaro",CCFFFF:"Ciano chiaro","99CCFF":"Blu cielo chiaro",CC99FF:"Prugna",FFFFFF:"Bianco"},aria:{"rich_text_area":"Area testo formattato"},wordcount:{words:"Parole:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ja.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ja.js
new file mode 100644
index 000000000..cdd5399a6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ja.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ja:{common:{"more_colors":"\u3055\u3089\u306b\u8272\u3092\u4f7f\u7528...","invalid_data":"\u30a8\u30e9\u30fc: \u5165\u529b\u306b\u8aa4\u308a\u304c\u3042\u308a\u307e\u3059\u3002\uff08\u8d64\u5b57\u306e\u9805\u76ee\uff09","popup_blocked":"\u7533\u3057\u8a33\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u8868\u793a\u3092\u8a31\u53ef\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3053\u306e\u30c4\u30fc\u30eb\u306e\u6a5f\u80fd\u3092\u5b8c\u5168\u306b\u6d3b\u7528\u3059\u308b\u306b\u306f\u3001\u3053\u306e\u30b5\u30a4\u30c8\u3067\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3092\u8a31\u53ef\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002","clipboard_no_support":"\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u64cd\u4f5c\u306f\u5229\u7528\u3055\u308c\u3066\u3044\u308b\u30d6\u30e9\u30a6\u30b6\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u3092\u4ee3\u308f\u308a\u306b\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3044\u3002","clipboard_msg":"\u30b3\u30d4\u30fc/\u5207\u308a\u53d6\u308a/\u8cbc\u308a\u4ed8\u3051\u306fMozilla\u3068Firefox\u3067\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002\n\u3053\u306e\u554f\u984c\u306e\u8a73\u7d30\u3092\u5f97\u305f\u3044\u3067\u3059\u304b?","not_set":"-- \u672a\u8a2d\u5b9a --","class_name":"\u30af\u30e9\u30b9",browse:"\u95b2\u89a7",close:"\u9589\u3058\u308b",cancel:"\u53d6\u308a\u6d88\u3057",update:"\u66f4\u65b0",insert:"\u633f\u5165",apply:"\u9069\u7528","edit_confirm":"\u3053\u306e\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u3092WYSIWYG\u30e2\u30fc\u30c9\u306b\u5207\u308a\u66ff\u3048\u307e\u3059\u304b\uff1f","invalid_data_number":"{#field} \u306f\u6570\u5024\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002","invalid_data_min":"{#field} \u306f{#min}\u3088\u308a\u3082\u5927\u304d\u306a\u6570\u5024\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002","invalid_data_size":"{#field}\u306f\u6570\u5024\u307e\u305f\u306f\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002",value:"(\u5024)"},contextmenu:{full:"\u5747\u7b49\u5272\u4ed8",right:"\u53f3\u63c3\u3048",center:"\u4e2d\u592e\u63c3\u3048",left:"\u5de6\u63c3\u3048",align:"\u914d\u7f6e"},insertdatetime:{"day_short":"(\u65e5),(\u6708),(\u706b),(\u6c34),(\u6728),(\u91d1),(\u571f),(\u65e5)","day_long":"\u65e5\u66dc\u65e5,\u6708\u66dc\u65e5,\u706b\u66dc\u65e5,\u6c34\u66dc\u65e5,\u6728\u66dc\u65e5,\u91d1\u66dc\u65e5,\u571f\u66dc\u65e5,\u65e5\u66dc\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"1,2,3,4,5,6,7,8,9,10,11,12","inserttime_desc":"\u6642\u523b\u3092\u633f\u5165","insertdate_desc":"\u65e5\u4ed8\u3092\u633f\u5165","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5370\u5237"},preview:{"preview_desc":"\u30d7\u30ec\u30d3\u30e5\u30fc"},directionality:{"rtl_desc":"\u53f3\u304b\u3089\u5de6","ltr_desc":"\u5de6\u304b\u3089\u53f3"},layer:{content:"\u65b0\u3057\u3044\u30ec\u30a4\u30e4\u30fc...","absolute_desc":"\u7d76\u5bfe\u4f4d\u7f6e\u306e\u6307\u5b9a\u3092\u5207\u66ff","backward_desc":"\u80cc\u9762\u3078\u79fb\u52d5","forward_desc":"\u524d\u9762\u3078\u79fb\u52d5","insertlayer_desc":"\u65b0\u3057\u3044\u30ec\u30a4\u30e4\u30fc\u3092\u633f\u5165"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u3059\u3079\u3066\u306e\u5909\u66f4\u3092\u53d6\u308a\u6d88\u3057"},nonbreaking:{"nonbreaking_desc":"\u6539\u884c\u3057\u306a\u3044\u30b9\u30da\u30fc\u30b9\u6587\u5b57(NBSP)\u3092\u633f\u5165"},iespell:{download:"ieSpell\u304c\u306a\u3044\u3088\u3046\u3067\u3059\u3002\u4eca\u3059\u3050\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u304b\uff1f","iespell_desc":"\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af"},advhr:{"advhr_desc":"\u6c34\u5e73\u7dda\u3092\u633f\u5165","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u8868\u60c5\u30a2\u30a4\u30b3\u30f3","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u691c\u7d22\u3068\u7f6e\u63db","search_desc":"\u691c\u7d22","delta_width":"","delta_height":""},advimage:{"image_desc":"\u753b\u50cf\u306e\u633f\u5165\u3084\u7de8\u96c6","delta_width":"","delta_height":""},advlink:{"link_desc":"\u30ea\u30f3\u30af\u306e\u633f\u5165\u3084\u7de8\u96c6","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u5c5e\u6027\u306e\u633f\u5165\u3084\u7de8\u96c6","ins_desc":"\u633f\u5165","del_desc":"\u524a\u9664","acronym_desc":"\u982d\u5b57\u8a9e","abbr_desc":"\u7565\u8a9e","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS\u306e\u7de8\u96c6","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f\u306e\u30e2\u30fc\u30c9\u3067\u8cbc\u308a\u4ed8\u3051\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u901a\u5e38\u306e\u8cbc\u308a\u4ed8\u3051\u306e\u30e2\u30fc\u30c9\u306b\u623b\u3057\u307e\u3059\u3002","plaintext_mode_sticky":"\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f\u306e\u30e2\u30fc\u30c9\u3067\u8cbc\u308a\u4ed8\u3051\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u901a\u5e38\u306e\u8cbc\u308a\u4ed8\u3051\u306e\u30e2\u30fc\u30c9\u306b\u623b\u3057\u307e\u3059\u3002\u4f55\u304b\u8cbc\u308a\u4ed8\u3051\u308b\u3068\u3001\u305d\u306e\u5f8c\u306f\u901a\u5e38\u306e\u8cbc\u308a\u4ed8\u3051\u30e2\u30fc\u30c9\u306b\u623b\u308a\u307e\u3059\u3002","selectall_desc":"\u3059\u3079\u3066\u9078\u629e","paste_word_desc":"Word\u304b\u3089\u8cbc\u308a\u4ed8\u3051","paste_text_desc":"\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f\u3067\u8cbc\u308a\u4ed8\u3051"},"paste_dlg":{"word_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002","text_linebreaks":"\u6539\u884c\u3092\u4fdd\u6301","text_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002"},table:{cell:"\u30bb\u30eb",col:"\u5217",row:"\u884c",del:"\u8868\u3092\u524a\u9664","copy_row_desc":"\u884c\u3092\u30b3\u30d4\u30fc","cut_row_desc":"\u884c\u3092\u5207\u308a\u53d6\u308a","paste_row_after_desc":"\u4e0b\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051","paste_row_before_desc":"\u4e0a\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051","props_desc":"\u8868\u306e\u5c5e\u6027","cell_desc":"\u30bb\u30eb\u306e\u5c5e\u6027","row_desc":"\u884c\u306e\u5c5e\u6027","merge_cells_desc":"\u30bb\u30eb\u3092\u7d50\u5408","split_cells_desc":"\u30bb\u30eb\u306e\u7d50\u5408\u3092\u89e3\u9664","delete_col_desc":"\u5217\u3092\u524a\u9664","col_after_desc":"\u53f3\u306b\u5217\u3092\u633f\u5165","col_before_desc":"\u5de6\u306b\u5217\u3092\u633f\u5165","delete_row_desc":"\u884c\u3092\u524a\u9664","row_after_desc":"\u4e0b\u306b\u884c\u3092\u633f\u5165","row_before_desc":"\u4e0a\u306b\u884c\u3092\u633f\u5165",desc:"\u8868\u306e\u633f\u5165","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u4fdd\u5b58\u3057\u305f\u30c7\u30fc\u30bf\u3092\u5fa9\u5143\u3059\u308b\u3068\u3001\u73fe\u5728\u306e\u7de8\u96c6\u5185\u5bb9\u3092\u3059\u3079\u3066\u5931\u3044\u307e\u3059\u3002\n\n\u672c\u5f53\u306b\u4fdd\u5b58\u3057\u305f\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u304b?","restore_content":"\u81ea\u52d5\u4fdd\u5b58\u30c7\u30fc\u30bf\u3092\u5fa9\u5143","unload_msg":"\u4ed6\u306e\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u3059\u308b\u3068\u3001\u5909\u66f4\u3092\u3059\u3079\u3066\u5931\u3044\u307e\u3059\u3002"},fullscreen:{desc:"\u5168\u753b\u9762"},media:{"delta_height":"",edit:"\u57cb\u3081\u8fbc\u307f\u30e1\u30c7\u30a3\u30a2\u306e\u7de8\u96c6",desc:"\u57cb\u3081\u8fbc\u307f\u30e1\u30c7\u30a3\u30a2\u306e\u633f\u5165\u3084\u7de8\u96c6","delta_width":""},fullpage:{desc:"\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5c5e\u6027","delta_width":"","delta_height":""},template:{desc:"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u633f\u5165"},visualchars:{desc:"\u5236\u5fa1\u6587\u5b57\u306e\u8868\u793a\u3092\u5207\u308a\u66ff\u3048"},spellchecker:{desc:"\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af\u306e\u4f7f\u7528\u3092\u5207\u308a\u66ff\u3048",menu:"\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af\u306e\u8a2d\u5b9a","ignore_word":"\u3053\u306e\u5358\u8a9e\u3092\u7121\u8996","ignore_words":"\u3059\u3079\u3066\u7121\u8996",langs:"\u8a00\u8a9e",wait:"\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...",sug:"\u5019\u88dc","no_sug":"\u5019\u88dc\u306a\u3057","no_mpell":"\u30b9\u30da\u30eb\u306e\u8aa4\u308a\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002","learn_word":"\u3053\u306e\u5358\u8a9e\u3092\u5b66\u7fd2"},pagebreak:{desc:"\u5370\u5237\u7528\u306e\u6539\u30da\u30fc\u30b8\u3092\u633f\u5165"},advlist:{types:"\u7a2e\u985e",def:"\u30c7\u30d5\u30a9\u30eb\u30c8","lower_alpha":"a b c ...","lower_greek":"\u03b1 \u03b2 \u03b3 \u2026","lower_roman":"i ii iii ...","upper_alpha":"A B C ...","upper_roman":"I II III ...",circle:"\u767d\u4e38\uff08circle\uff09",disc:"\u9ed2\u4e38\uff08disc\uff09",square:"\u56db\u89d2\uff08square\uff09"},colors:{"333300":"\u6fc3\u3044\u30aa\u30ea\u30fc\u30d6\u8272","993300":"\u6fc3\u3044\u30aa\u30ec\u30f3\u30b8\u8272","000000":"\u9ed2\u8272","003300":"\u6fc3\u3044\u7dd1\u8272","003366":"\u6fc3\u3044\u7fa4\u9752\u8272","000080":"\u6fc3\u7d3a\u8272","333399":"\u85cd\u8272","333333":"\u3068\u3066\u3082\u6fc3\u3044\u7070\u8272","800000":"\u6817\u8272",FF6600:"\u6a59\u8272","808000":"\u30aa\u30ea\u30fc\u30d6\u8272","008000":"\u7dd1\u8272","008080":"\u7dd1\u304c\u304b\u304b\u3063\u305f\u9752\u8272","0000FF":"\u9752\u8272","666699":"\u7d0d\u6238\u8272","808080":"\u7070\u8272",FF0000:"\u8d64",FF9900:"\u7425\u73c0\u8272","99CC00":"\u9ec4\u7dd1\u8272","339966":"\u6d77\u7dd1\u8272","33CCCC":"\u9752\u7dd1\u8272","3366FF":"\u85e4\u7d2b\u8272","800080":"\u7d2b\u8272","999999":"\u4e2d\u304f\u3089\u3044\u306e\u7070\u8272",FF00FF:"\u8d64\u7d2b\u8272",FFCC00:"\u91d1\u8272",FFFF00:"\u9ec4\u8272","00FF00":"\u30e9\u30a4\u30e0\u8272","00FFFF":"\u6c34\u8272","00CCFF":"\u7a7a\u8272","993366":"\u8336\u8272",C0C0C0:"\u9280\u8272",FF99CC:"\u30d4\u30f3\u30af\u8272",FFCC99:"\u6843\u8272",FFFF99:"\u8584\u3044\u9ec4\u8272",CCFFCC:"\u6de1\u7dd1\u8272",CCFFFF:"\u6de1\u9752\u7dd1\u8272","99CCFF":"\u8584\u3044\u6c34\u8272",CC99FF:"\u6fc3\u3044\u8d64\u7d2b\u8272",FFFFFF:"\u767d\u8272"},aria:{"rich_text_area":"\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2"},wordcount:{words:"\u5358\u8a9e\u306e\u6570"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ka.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ka.js
new file mode 100644
index 000000000..e7b73a354
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ka.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ka:{common:{"more_colors":"\u10e1\u10ee\u10d5\u10d0 \u10e4\u10d4\u10e0\u10d4\u10d1\u10d8...","invalid_data":"\u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d0: \u10e8\u10d4\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8\u10d0 \u10d0\u10e0\u10d0 \u10e1\u10ec\u10dd\u10e0\u10d8 \u10db\u10dc\u10d8\u10e8\u10d5\u10dc\u10da\u10d4\u10dd\u10d1\u10d0, \u10d8\u10e1 \u10db\u10dd\u10dc\u10d8\u10e1\u10dc\u10e3\u10da\u10d8\u10d0 \u10ec\u10d8\u10d7\u10da\u10d0\u10d3.","popup_blocked":"\u0411\u043b\u043e\u043a\u0438\u0440\u0430\u0442\u043e\u0440 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u043a\u043e\u043d \u0437\u0430\u043a\u0440\u044b\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043e\u043a\u043d\u043e. \u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0430\u0439\u0442\u0435.","clipboard_no_support":"\u10d0\u10e0 \u10d0\u10e5\u10d5\u10e1 \u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 \u10d1\u10e0\u10d0\u10e3\u10d6\u10d4\u10e0\u10d8\u10e1 \u10db\u10ee\u10d0\u10e0\u10d3\u10d0\u10ed\u10d4\u10e0\u10d0. \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d7 \u10d9\u10da\u10d0\u10d5\u10d8\u10d0\u10e2\u10e3\u10e0\u10e3\u10da\u10d8 \u10e8\u10d4\u10db\u10dd\u10d9\u10da\u10d4\u10d1\u10d4\u10d1\u10d8.","clipboard_msg":"\u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0, \u10d0\u10db\u10dd\u10ed\u10e0\u10d0 \u10d3\u10d0 \u10e9\u10d0\u10e1\u10db\u10d0 Firefox-\u10e8\u10d8 \u10d0\u10e0 \u10db\u10e3\u10e8\u10d0\u10dd\u10d1\u10e1.\\r\n\u10d2\u10e1\u10e3\u10e0\u10d7 \u10db\u10d8\u10d8\u10e6\u10dd\u10d7 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d0?","not_set":"- \u10d0\u10e0 \u10d0\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e7\u10d4\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 -","class_name":"\u10d9\u10da\u10d0\u10e1\u10d8",browse:"\u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10d4\u10e0\u10d4\u10d1\u10d0",close:"\u10d3\u10d0\u10ee\u10e3\u10e0\u10d5\u10d0",cancel:"\u10d2\u10d0\u10e3\u10e5\u10db\u10d4\u10d1\u10d0",update:"\u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0",insert:"\u10e9\u10d0\u10e1\u10db\u10d0",apply:"\u10d2\u10d0\u10db\u10dd\u10e7\u10d4\u10dc\u10d4\u10d1\u10d0","edit_confirm":"\u10d2\u10d0\u10db\u10dd\u10d5\u10d8\u10e7\u10d4\u10dc\u10dd\u10d7 \u10d0\u10db \u10d5\u10d4\u10da\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1 WYSIWYG \u10e0\u10d4\u10df\u10d8\u10db\u10d8?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4\u10d6\u10d4",right:"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4",center:"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d6\u10d4",left:"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4",align:"\u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0"},insertdatetime:{"day_short":"\u10d9\u10d5,\u10dd\u10e0\u10e8,\u10e1\u10d0\u10db\u10e8,\u10dd\u10d7\u10ee\u10e8,\u10ee\u10e3\u10d7,\u10de\u10d0\u10e0,\u10e8\u10d0\u10d1,\u10d9\u10d5","day_long":"\u10d9\u10d5\u10d8\u10e0\u10d0,\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8,\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10d9\u10d5\u10d8\u10e0\u10d0","months_short":"\u10d8\u10d0\u10dc,\u10d7\u10d4\u10d1,\u10db\u10d0\u10e0\u10e2,\u10d0\u10de\u10e0,\u10db\u10d0\u10d8\u10e1\u10d8,\u10d8\u10d5\u10dc,\u10d8\u10d5\u10da,\u10d0\u10d2\u10d5,\u10e1\u10d4\u10e5,\u10dd\u10e5\u10e2,\u10dc\u10dd\u10d4\u10db,\u10d3\u10d4\u10d9","months_long":"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8,\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8,\u10db\u10d0\u10e0\u10e2\u10d8,\u10d0\u10de\u10e0\u10d8\u10da\u10d8,\u10db\u10d0\u10d8\u10e1\u10d8,\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8,\u10d8\u10d5\u10da\u10d8\u10e1\u10d8,\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd,\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8,\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8,\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8,\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8","inserttime_desc":"\u10d3\u10e0\u10dd\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","insertdate_desc":"\u10d7\u10d0\u10e0\u10d8\u10e6\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"\u10d1\u10d4\u10ed\u10d3\u10d5\u10d0"},preview:{"preview_desc":"\u10ec\u10d8\u10dc\u10d0\u10e1\u10ec\u10d0\u10e0\u10d8 \u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10d4\u10e0\u10d4\u10d1\u10d0"},directionality:{"rtl_desc":"\u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","ltr_desc":"\u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5"},layer:{content:"\u10d0\u10ee\u10d0\u10da\u10d8 \u10e8\u10e0\u10d4","absolute_desc":"\u10d0\u10d1\u10e1\u10dd\u10da\u10e3\u10e2\u10e3\u10e0\u10d8 \u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10e0\u10d4\u10d1\u10d0","backward_desc":"\u10e3\u10d9\u10d0\u10dc\u10d0 \u10de\u10da\u10d0\u10dc\u10d6\u10d4","forward_desc":"\u10ec\u10d8\u10dc\u10d0 \u10de\u10da\u10d0\u10dc\u10d6\u10d4","insertlayer_desc":"\u10e8\u10e0\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0"},save:{"save_desc":"\u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0","cancel_desc":"\u10e7\u10d5\u10d4\u10da\u10d0 \u10ea\u10d5\u10da\u10d8\u10da\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10e3\u10e5\u10db\u10d4\u10d1\u10d0"},nonbreaking:{"nonbreaking_desc":"\u10e3\u10ec\u10e7\u10d5\u10d4\u10e2\u10d8 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0"},iespell:{download:"ieSpell \u10d0\u10e0 \u10d0\u10e0\u10d8\u10e1 \u10dc\u10d0\u10de\u10dd\u10d5\u10dc\u10d8. \u10d2\u10e1\u10e3\u10e0\u10d7 \u10d3\u10d0\u10e7\u10d4\u10dc\u10d4\u10d1\u10d0?","iespell_desc":"\u10dd\u10e0\u10d7\u10dd\u10d2\u10e0\u10d0\u10e4\u10d8\u10d8\u10e1 \u10e8\u10d4\u10db\u10dd\u10ec\u10db\u10d4\u10d1\u10d0"},advhr:{"advhr_desc":"\u10d2\u10d0\u10db\u10e7\u10dd\u10e4\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u10e1\u10db\u10d0\u10d8\u10da\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u10e8\u10d4\u10ea\u10d5\u10da\u10d0","search_desc":"\u10de\u10dd\u10d5\u10dc\u10d0","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","delta_height":""},xhtmlxtras:{"attribs_desc":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e8\u10d4\u10ea\u10d5\u10da\u10d0","ins_desc":"\u10e8\u10d4\u10ea\u10d5\u10da\u10d0","del_desc":"\u10ec\u10d0\u10e8\u10da\u10d0","acronym_desc":"\u10d0\u10d1\u10e0\u10d4\u10d5\u10d8\u10d0\u10ea\u10d8\u10d0","abbr_desc":"\u10e8\u10d4\u10db\u10dd\u10d9\u10da\u10d4\u10d1\u10d0","cite_desc":"\u10ea\u10d8\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS \u10e1\u10e2\u10d8\u10da\u10d8\u10e1 \u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"\u10e2\u10d5\u10d4\u10da\u10d0\u10e4\u10e0\u10d8\u10e1 \u10db\u10dd\u10dc\u10d8\u10e8\u10d5\u10dc\u10d0","paste_word_desc":"Word-\u10d8\u10d3\u10dc \u10e9\u10d0\u10e1\u10db\u10d0","paste_text_desc":"\u10e9\u10d0\u10e1\u10d5\u10d8 \u10e0\u10dd\u10d2\u10dd\u10e0\u10ea \u10e2\u10d4\u10e5\u10e1\u10e2\u10d8"},"paste_dlg":{"word_title":"\u0418\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e9\u10d0\u10e1\u10d0\u10e1\u10db\u10d4\u10da\u10d0\u10d3 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d7 \u10d9\u10da\u10d0\u10d5\u10d8\u10d0\u10e2\u10e3\u10e0\u10e3\u10da\u10d8 \u10d9\u10dd\u10db\u10d1\u10d8\u10dc\u10d0\u10ea\u10d8\u10d0 CTRL+V.","text_linebreaks":"\u10d2\u10d0\u10d3\u10d0\u10e2\u10d0\u10dc\u10d8\u10da\u10d8 \u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0","text_title":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e9\u10d0\u10e1\u10d0\u10e1\u10db\u10d4\u10da\u10d0\u10d3 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d7 \u10d9\u10da\u10d0\u10d5\u10d8\u10d0\u10e2\u10e3\u10e0\u10e3\u10da\u10d8 \u10d9\u10dd\u10db\u10d1\u10d8\u10dc\u10d0\u10ea\u10d8\u10d0 CTRL+V."},table:{"cellprops_delta_width":"30",cell:"\u10e3\u10ef\u10e0\u10d0",col:"\u10e1\u10d5\u10d4\u10e2\u10d8",row:"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8",del:"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","copy_row_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0","cut_row_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d0\u10db\u10dd\u10ed\u10e0\u10d0","paste_row_after_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10e5\u10d5\u10d4\u10db\u10dd\u10d7 \u10d3\u10d0\u10db\u10d4\u10e2\u10d4\u10d1\u10d0","paste_row_before_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d6\u10d4\u10db\u10dd\u10d7 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","props_desc":"\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d8\u10d4\u10d1\u10d8","cell_desc":"\u10e3\u10ef\u10e0\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","row_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","merge_cells_desc":"\u10e3\u10ef\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10d4\u10e0\u10d7\u10d8\u10d0\u10dc\u10d4\u10d1\u10d0","split_cells_desc":"\u10e3\u10ef\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e7\u10dd\u10e4\u10d0","delete_col_desc":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","col_after_desc":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5","col_before_desc":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","delete_row_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","row_after_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0 \u10e5\u10d5\u10d4\u10db\u10dd\u10d7","row_before_desc":"\u10e1\u10e2\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0 \u10d6\u10d4\u10db\u10dd\u10d7",desc:"\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u10e7\u10d5\u10d4\u10da\u10d0 \u10ea\u10d5\u10da\u10d8\u10da\u10d4\u10d1\u10d0 \u10d8\u10e5\u10dc\u10d4\u10d1\u10d0 \u10d3\u10d0\u10d9\u10d0\u10e0\u10d2\u10e3\u10da\u10d8.\n\n\u10d2\u10d0\u10dc\u10d5\u10d0\u10d2\u10e0\u10eb\u10dd\u10d7 \u10d0\u10d5\u10e0\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d3\u10d0\u10db\u10d0\u10ee\u10e1\u10dd\u10d5\u10e0\u10d4\u10d1\u10e3\u10da\u10d8\u10e1 \u10d0\u10e6\u10d3\u10d2\u10d4\u10dc\u10d0?","restore_content":"\u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d3\u10d0\u10db\u10d0\u10ee\u10e1\u10dd\u10d5\u10e0\u10d4\u10d1\u10e3\u10da\u10d8\u10e1 \u10d0\u10e6\u10d3\u10d2\u10d4\u10dc\u10d0","unload_msg":"\u10d7\u10e3 \u10d7\u10e5\u10d5\u10d4\u10dc \u10d3\u10d0\u10e2\u10dd\u10d5\u10d4\u10d1\u10d7 \u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da \u10d2\u10d5\u10d4\u10e0\u10d3\u10e1, \u10e7\u10d5\u10d4\u10da\u10d0 \u10ea\u10d5\u10da\u10d8\u10da\u10d4\u10d1\u10d0 \u10d8\u10e5\u10dc\u10d4\u10d1\u10d0 \u10d3\u10d0\u10d9\u10d0\u10e0\u10d2\u10e3\u10da\u10d8."},fullscreen:{desc:"\u10e1\u10e0\u10e3\u10da\u10d4\u10d9\u10e0\u10d0\u10dc\u10d8\u10d0\u10dc\u10d8 \u10e0\u10d4\u10df\u10d8\u10db\u10d8"},media:{edit:"\u10d9\u10da\u10d8\u10d9\u10d8\u10e1 \u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8",desc:"\u10d9\u10da\u10d8\u10de\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","delta_height":"","delta_width":""},fullpage:{desc:"\u10d3\u10dd\u10d9\u10e3\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8","delta_width":"","delta_height":""},template:{desc:"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e7\u10d4\u10dc\u10d4\u10d1\u10d0"},visualchars:{desc:"\u10e7\u10d5\u10d4\u10da\u10d0 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8"},spellchecker:{desc:"\u10db\u10d0\u10e0\u10d7\u10da\u10ec\u10d4\u10e0\u10d0",menu:"\u10db\u10d0\u10e0\u10d7\u10da\u10ec\u10d4\u10e0\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","ignore_word":"\u10d2\u10d0\u10db\u10dd\u10d5\u10e2\u10dd\u10d5\u10dd\u10d7","ignore_words":"\u10d2\u10d0\u10db\u10dd\u10d5\u10e2\u10dd\u10d5\u10dd\u10d7 \u10e7\u10d5\u10d4\u10da\u10d0",langs:"\u10d4\u10dc\u10d4\u10d1\u10d8",wait:"\u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10d3\u10d0\u10d8\u10ea\u10d0\u10d3\u10dd\u10d7...",sug:"\u10d5\u10d0\u10e0\u10d8\u10d0\u10dc\u10e2\u10d4\u10d1\u10d8","no_sug":"\u10e3\u10d5\u10d0\u10e0\u10d8\u10d0\u10dc\u10e2\u10dd\u10d7","no_mpell":"\u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d4\u10d1\u10d8 \u10d0\u10e6\u10db\u10dd\u10e9\u10d4\u10dc\u10d8\u10da\u10d8 \u10d0\u10e0 \u10d8\u10e7\u10dd.","learn_word":"Learn word"},pagebreak:{desc:"\u10d2\u10d5\u10d4\u10e0\u10d3\u10d8\u10e1 \u10d2\u10d0\u10db\u10e7\u10dd\u10e4\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0"},advlist:{types:"\u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10d4\u10d1\u10d8",def:"\u10e1\u10e2\u10d0\u10dc\u10d3\u10d0\u10e0\u10e2\u10e3\u10da\u10d8","lower_alpha":"\u10dc\u10e3\u10e1\u10ee\u10e3\u10e0\u10d8 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8","lower_greek":"\u10dc\u10e3\u10e1\u10ee\u10e3\u10e0\u10d8 \u10d1\u10d4\u10e0\u10eb\u10dc\u10e3\u10da\u10d8 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8","lower_roman":"\u10dc\u10e3\u10e1\u10ee\u10e3\u10e0\u10d8 \u10da\u10d0\u10d7\u10d8\u10dc\u10e3\u10e0\u10d8 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8","upper_alpha":"\u10d0\u10e1\u10dd\u10db\u10d7\u10d0\u10d5\u10e0\u10e3\u10da\u10d8 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8","upper_roman":"\u10d0\u10e1\u10dd\u10db\u10d7\u10d0\u10d5\u10e0\u10e3\u10da\u10d8 \u10da\u10d0\u10d7\u10d8\u10dc\u10e3\u10e0\u10d8 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8",circle:"\u10ec\u10e0\u10d4\u10d4\u10d1\u10d8",disc:"\u10d3\u10d8\u10e1\u10d9\u10d4\u10d1\u10d8",square:"\u10d9\u10d5\u10d0\u10d3\u10e0\u10d0\u10e2\u10d4\u10d1\u10d8"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/kl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/kl.js
new file mode 100644
index 000000000..046211674
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/kl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({kl:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"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?.","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/km.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/km.js
new file mode 100644
index 000000000..260b594dc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/km.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({km:{common:{"more_colors":"\u1796\u178e\u17cc\u1795\u17d2\u179f\u17c1\u1784\u1791\u17c0\u178f","invalid_data":"\u1780\u17c6\u17a0\u17bb\u179f\u17d6 \u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u178f\u1798\u17d2\u179b\u17c3\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17b6\u1780\u17cb\u179f\u17c6\u1782\u17b6\u179b\u17cb\u178a\u17c4\u1799\u1796\u178e\u17cc\u1780\u17d2\u179a\u17a0\u1798\u00a0\u17d4","popup_blocked":"\u17a2\u178f\u17cb\u1791\u17c4\u179f! \u1799\u17be\u1784\u1781\u17d2\u1789\u17bb\u17c6\u179f\u17c6\u1782\u17b6\u179b\u17cb\u1783\u17be\u1789\u1790\u17b6\u1794\u1784\u17d2\u17a2\u17bd\u1785\u179b\u17c1\u1785\u17a1\u17be\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1791\u1794\u17cb\u179f\u17d2\u1780\u17b6\u178f\u17cb\u17d4 \u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u1798\u17b7\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u179a\u17b6\u179b\u17cb\u1780\u17b6\u179a\u1791\u1794\u17cb\u179f\u17d2\u1780\u17b6\u178f\u17cb\u1794\u1784\u17d2\u17a2\u17bd\u1785\u179b\u17c1\u1785\u17a1\u17be\u1784\u1790\u17d2\u1798\u17b8\u1785\u17c6\u1796\u17c4\u17c7\u1794\u178e\u17d2\u178f\u17b6\u1789\u1798\u17bd\u1799\u1793\u17c1\u17c7\u1791\u17c1 \u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17d2\u179a\u17be\u17a7\u1794\u1780\u179a\u178e\u17cd\u1793\u17c1\u17c7\u17b2\u17d2\u1799\u1798\u17b6\u1793\u1794\u17d2\u179a\u179f\u17b7\u1791\u17d2\u1792\u17b7\u1797\u17b6\u1796\u17d4","clipboard_no_support":"\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u179a\u17bb\u1780\u179a\u1780\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u1791\u17b6\u1793\u17cb\u1782\u17b6\u17c6\u1791\u17d2\u179a \u179f\u17bc\u1798\u1794\u17d2\u179a\u17be\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u1795\u17d2\u179b\u17bc\u179c\u1780\u17b6\u178f\u17cb\u1787\u17c6\u1793\u17bd\u179f\u179c\u17b7\u1789\u17d4","clipboard_msg":"\u1785\u1798\u17d2\u179b\u1784 / \u1780\u17b6\u178f\u17cb / \u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1792\u17d2\u179c\u17be\u1794\u17b6\u1793\u1780\u17d2\u1793\u17bb\u1784 Mozilla \u1793\u17b7\u1784 Firefox\u17d4 n\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u17b6\u1793\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17c6\u1796\u17b8\u1794\u1789\u17d2\u17a0\u17b6\u1793\u17c1\u17c7\u1791\u17c1?","not_set":"-- \u1796\u17bb\u17c6\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb --","class_name":"\u1790\u17d2\u1793\u17b6\u1780\u17cb",browse:"\u179a\u1780\u1798\u17be\u179b",close:"\u1794\u17b7\u1791",cancel:"\u1794\u17c4\u17c7\u1794\u1784\u17cb",update:"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799",insert:"\u1794\u1789\u17d2\u1785\u17bc\u179b",apply:"\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f","edit_confirm":"\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u17d2\u179a\u17be\u1798\u17c9\u17bc\u178a\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1783\u17be\u1789\u1787\u17b6\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1791\u1791\u17bd\u179b\u1794\u17b6\u1793\u1787\u17b6\u1798\u17bd\u1799\u1793\u17b9\u1784\u178f\u17c6\u1794\u1793\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u1793\u17c1\u17c7\u17ac?","invalid_data_number":"{#field} \u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1787\u17b6\u179b\u17c1\u1781","invalid_data_min":"{#field} \u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1787\u17b6\u1785\u17c6\u1793\u17bd\u1793\u1792\u17c6\u1787\u17b6\u1784 {#min}","invalid_data_size":"{#field} \u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1787\u17b6\u1785\u17c6\u1793\u17bd\u1793 \u17ac\u1797\u17b6\u1782\u179a\u1799",value:"(\u178f\u1798\u17d2\u179b\u17c3)"},contextmenu:{full:"\u179f\u1784\u1781\u17b6\u1784",right:"\u1786\u17d2\u179c\u17c1\u1784",center:"\u1780\u178e\u17d2\u178f\u17b6\u179b",left:"\u1786\u17d2\u179c\u17c1\u1784",align:"\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17b9\u1798"},insertdatetime:{"day_short":"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799,\u1785\u1793\u17d2\u1791,\u17a2\u1784\u17d2\u1782\u17b6\u179a,\u1796\u17bb\u1792,\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd,\u179f\u17bb\u1780\u17d2\u179a,\u179f\u17c5\u179a\u17cd,\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799","day_long":"\u1790\u17d2\u1784\u17c3\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799,\u1790\u17d2\u1784\u17c3\u1785\u1793\u17d2\u1791,\u1790\u17d2\u1784\u17c3\u17a2\u1784\u17d2\u1782\u17b6\u179a,\u1790\u17d2\u1784\u17c3\u1796\u17bb\u1792,\u1790\u17d2\u1784\u17c3\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd,\u1790\u17d2\u1784\u17c3\u179f\u17bb\u1780\u17d2\u179a,\u1790\u17d2\u1784\u17c3\u179f\u17c5\u179a\u17cd,\u1790\u17d2\u1784\u17c3\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799","months_short":"\u1798\u1780\u179a\u17b6,\u1780\u17bb\u1798\u17d2\u1797\u17c8,\u1798\u17b7\u1793\u17b6,\u1798\u17c1\u179f\u17b6,\u17a7\u179f\u1797\u17b6,\u1798\u17b7\u1790\u17bb\u1793\u17b6,\u1780\u1780\u17d2\u1780\u178a\u17b6,\u179f\u17b8\u17a0\u17b6,\u1780\u1789\u17d2\u1789\u17b6,\u178f\u17bb\u179b\u17b6,\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6,\u1792\u17d2\u1793\u17bc","months_long":"\u1781\u17c2\u1798\u1780\u179a\u17b6,\u1781\u17c2\u1780\u17bb\u1798\u17d2\u1797\u17c8,\u1781\u17c2\u1798\u17b7\u1793\u17b6,\u1781\u17c2\u1798\u17c1\u179f\u17b6,\u1781\u17c2\u17a7\u179f\u1797\u17b6,\u1781\u17c2\u1798\u17b7\u1790\u17bb\u1793\u17b6,\u1781\u17c2\u1780\u1780\u17d2\u1780\u178a\u17b6,\u1781\u17c2\u179f\u17b8\u17a0\u17b6,\u1781\u17c2\u1780\u1789\u17d2\u1789\u17b6,\u1781\u17c2\u178f\u17bb\u179b\u17b6,\u1781\u17c2\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6,\u1781\u17c2\u1792\u17d2\u1793\u17bc","inserttime_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1798\u17c9\u17c4\u1784","insertdate_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1780\u17b6\u179b\u1794\u179a\u1785\u17d2\u1786\u17c1\u1791","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1796"},preview:{"preview_desc":"\u1798\u17be\u179b\u1787\u17b6\u1798\u17bb\u1793"},directionality:{"rtl_desc":"\u1791\u17b7\u179f\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784","ltr_desc":"\u1791\u17b7\u179f\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6"},layer:{content:"\u179f\u17d2\u179a\u1791\u17b6\u1794\u17cb\u1790\u17d2\u1798\u17b8...","absolute_desc":"\u1794\u17be\u1780\u1794\u17b7\u1791\u1791\u17b8\u178f\u17b6\u17c6\u1784\u178a\u17b6\u1785\u17cb\u1781\u17b6\u178f","backward_desc":"\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u1791\u17c5\u1780\u17d2\u179a\u17c4\u1799","forward_desc":"\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u1791\u17c5\u1798\u17bb\u1781","insertlayer_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u179f\u17d2\u179a\u1791\u17b6\u1794\u17cb\u1790\u17d2\u1798\u17b8"},save:{"save_desc":"\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780","cancel_desc":"\u1794\u17c4\u17c7\u1794\u1784\u17cb\u1794\u17c6\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1791\u17b6\u17c6\u1784\u17a1\u17b6\u1799"},nonbreaking:{"nonbreaking_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u1782\u1798\u17d2\u179b\u17b6\u178f\u1798\u17b7\u1793\u1794\u17c6\u1794\u17c2\u1780"},iespell:{download:"\u1798\u17b7\u1793\u1794\u17b6\u1793\u179a\u1780\u1783\u17be\u1789 ieSpell \u17d4 \u178f\u17be\u178f\u17d2\u179a\u17bc\u179c\u178a\u17c6\u17a1\u17be\u1784\u17a5\u17a1\u17bc\u179c\u17ac?","iespell_desc":"\u178f\u17c6\u178e\u17be\u1780\u17b6\u179a\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u17a2\u1780\u17d2\u1781\u179a\u17b6\u179c\u17b7\u179a\u17bb\u1791\u17d2\u1792"},advhr:{"advhr_desc":"\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1795\u17d2\u178a\u17c1\u1780","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u17a2\u17b6\u179a\u1798\u17d2\u1798\u178e\u17cd","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780/\u1787\u17c6\u1793\u17bd\u179f","search_desc":"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780","delta_width":"","delta_height":""},advimage:{"image_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u17bc\u1794\u1797\u17b6\u1796","delta_width":"","delta_height":""},advlink:{"delta_height":"20","delta_width":"10","link_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u178f\u17c6\u178e"},xhtmlxtras:{"del_delta_height":"20","del_delta_width":"35","attribs_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u178e\u17d2\u178f\u17b6\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8","ins_desc":"\u1780\u17b6\u179a\u1794\u1789\u17d2\u1785\u17bc\u179b","del_desc":"\u1780\u17b6\u179a\u179b\u17bb\u1794\u1785\u17c4\u179b","acronym_desc":"\u1796\u17b6\u1780\u17d2\u1799\u1780\u17b6\u178f\u17cb\u1799\u1780\u178f\u17c2\u17a2\u1780\u17d2\u179f\u179a\u178a\u17be\u1798","abbr_desc":"\u17a2\u1780\u17d2\u179f\u179a\u179f\u1784\u17d2\u1781\u17c1\u1794","cite_desc":"\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u179f\u17d2\u179a\u1784\u17cb","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798 CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a5\u17a1\u17bc\u179c\u1793\u17c1\u17c7\u179f\u17d2\u1790\u17b7\u178f\u1780\u17d2\u1793\u17bb\u1784\u1798\u17c9\u17bc\u178a\u17a2\u178f\u17d2\u1790\u1794\u1791\u1792\u1798\u17d2\u1798\u178f\u17b6\u00a0\u17d4 \u1785\u17bb\u1785\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1794\u17be\u1780\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u179a\u1780\u1798\u17c9\u17bc\u178a\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1792\u1798\u17d2\u1798\u178f\u17b6\u179c\u17b7\u1789\u00a0\u17d4","plaintext_mode_sticky":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a5\u17a1\u17bc\u179c\u1793\u17c1\u17c7\u179f\u17d2\u1790\u17b7\u178f\u1780\u17d2\u1793\u17bb\u1784\u1798\u17c9\u17bc\u178a\u17a2\u178f\u17d2\u1790\u1794\u1791\u1792\u1798\u17d2\u1798\u178f\u17b6\u00a0\u17d4 \u1785\u17bb\u1785\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1794\u17be\u1780\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u179a\u1780\u1798\u17c9\u17bc\u178a\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1792\u1798\u17d2\u1798\u178f\u17b6\u179c\u17b7\u1789\u00a0\u17d4 \u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb\u1796\u17b8\u17a2\u17d2\u1793\u1780\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a2\u17d2\u179c\u17b8\u17d7\u179a\u17bd\u1785\u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1798\u17c9\u17bc\u178a\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1792\u1798\u17d2\u1798\u178f\u17b6\u179c\u17b7\u1789\u00a0\u17d4","selectall_desc":"\u1787\u17d2\u179a\u17be\u179f\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb","paste_word_desc":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8 Word","paste_text_desc":"\u1794\u17b7\u1791\u1797\u17b6\u17d2\u1787\u1794\u17cb\u1787\u17b6\u17a2\u178f\u17d2\u1790\u1794\u1791\u1792\u1798\u17d2\u1798\u178f\u17b6"},"paste_dlg":{"word_title":"\u1794\u17d2\u179a\u17be CTRL V \u1793\u17c5\u179b\u17be\u1780\u17d2\u178a\u17b6\u179a\u1785\u17bb\u1785\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u1791\u17c5\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1793\u17c1\u17c7\u00a0\u17d4","text_linebreaks":"\u179a\u1780\u17d2\u179f\u17b6\u179f\u1789\u17d2\u1789\u17b6\u1785\u17bb\u17c7\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb","text_title":"\u1794\u17d2\u179a\u17be CTRL V \u1793\u17c5\u179b\u17be\u1780\u17d2\u178a\u17b6\u179a\u1785\u17bb\u1785\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u1791\u17c5\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1793\u17c1\u17c7\u00a0\u17d4"},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"30","table_delta_width":"0","cellprops_delta_height":"20","cellprops_delta_width":"30","rowprops_delta_height":"10","rowprops_delta_width":"0",cell:"\u1780\u17d2\u179a\u17a1\u17b6",col:"\u1787\u17bd\u179a\u1788\u179a",row:"\u1787\u17bd\u179a\u178a\u17c1\u1780",del:"\u179b\u17bb\u1794\u178f\u17b6\u179a\u17b6\u1784","copy_row_desc":"\u1785\u1798\u17d2\u179b\u1784\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784","cut_row_desc":"\u1780\u17b6\u178f\u17cb\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784","paste_row_after_desc":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784\u1781\u17b6\u1784\u179f\u17d2\u178a\u17b6\u17c6","paste_row_before_desc":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784\u1781\u17b6\u1784\u1786\u17d2\u179c\u17c1\u1784","props_desc":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u178f\u17b6\u179a\u17b6\u1784","cell_desc":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1780\u17d2\u179a\u17a1\u17b6\u178f\u17b6\u179a\u17b6\u1784","row_desc":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784","merge_cells_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1780\u17d2\u179a\u17a1\u17b6\u178f\u17b6\u179a\u17b6\u1784\u1785\u17bc\u179b\u1782\u17d2\u1793\u17b6","split_cells_desc":"\u1796\u17bb\u17c6\u1789\u17c2\u1780\u1780\u17d2\u179a\u17a1\u17b6\u178f\u17b6\u179a\u17b6\u1784","delete_col_desc":"\u179b\u17bb\u1794\u1787\u17bd\u179a\u1788\u179a\u1785\u17c1\u1789","col_after_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1787\u17bd\u179a\u1788\u179a\u1781\u17b6\u1784\u179f\u17d2\u178a\u17b6\u17c6","col_before_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1787\u17bd\u179a\u1788\u179a\u1781\u17b6\u1784\u1786\u17d2\u179c\u17c1\u1784","delete_row_desc":"\u179b\u17bb\u1794\u1787\u17bd\u179a\u178a\u17c1\u1780","row_after_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1787\u17bd\u179a\u178a\u17c1\u1780\u1781\u17b6\u1784\u179f\u17d2\u178a\u17b6\u17c6","row_before_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1787\u17bd\u179a\u178a\u17c1\u1780\u1781\u17b6\u1784\u1786\u17d2\u179c\u17c1\u1784",desc:"\u1794\u1789\u17d2\u1785\u17bc\u179b\u178f\u17b6\u179a\u17b6\u1784\u1790\u17d2\u1798\u17b8\u1798\u1799\u1799"},autosave:{"warning_message":"\u1794\u17be\u17a2\u17d2\u1793\u1780\u179f\u17d2\u178a\u17b6\u179a\u1798\u17b6\u178f\u17b7\u1780\u17b6\u179f\u17d2\u179c\u17d0\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780 \u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u1794\u17b6\u178f\u17cb\u1794\u1784\u17cb\u1798\u17b6\u178f\u17b7\u1780\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178a\u17c2\u179b\u1798\u17b6\u1793\u1780\u17d2\u1793\u17bb\u1784\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1793\u17b7\u1796\u1793\u17d2\u1792\u1793\u17c1\u17c7\u00a0\u17d4nn\u178f\u17be\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17b6\u1780\u178a\u1787\u17b6\u1785\u1784\u17cb\u179f\u17d2\u178a\u17b6\u179a\u1798\u17b6\u178f\u17b7\u1780\u17b6\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17ac?","restore_content":"\u179f\u17d2\u178a\u17b6\u179a\u1798\u17b6\u178f\u17b7\u1780\u17b6\u179f\u17d2\u179c\u17d0\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u00a0\u17d4","unload_msg":"\u1794\u178e\u17d2\u178a\u17b6\u1794\u17c6\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178a\u17bc\u179a\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u178f\u17cb\u1794\u1784\u17cb\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a2\u17d2\u1793\u1780\u1793\u17b6\u17c6\u1795\u17d2\u179b\u17bc\u179c\u1785\u17c1\u1789\u1796\u17b8\u1791\u17c6\u1796\u17d0\u179a\u1793\u17c1\u17c7\u00a0\u17d4"},fullscreen:{desc:"\u1794\u17b7\u1791\u1794\u17be\u1780\u1798\u17c9\u17bc\u178a\u1796\u17c1\u1789\u17a2\u17c1\u1780\u17d2\u179a\u1784\u17cb"},media:{"delta_height":"20","delta_width":"10",edit:"\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1798\u17c1\u178c\u17c0\u1794\u1784\u17d2\u1780\u1794\u17cb",desc:"\u1794\u1789\u17d2\u1785\u17bc\u179b / \u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1798\u17c1\u178c\u17c0\u1794\u1784\u17d2\u1780\u1794\u17cb"},fullpage:{desc:"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u17af\u1780\u179f\u17b6\u179a","delta_width":"","delta_height":""},template:{desc:"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1798\u17b6\u178f\u17b7\u1780\u17b6\u1796\u17bb\u1798\u17d2\u1796\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1787\u17b6\u1798\u17bb\u1793"},visualchars:{desc:"\u1794\u17b7\u1791/\u1794\u17be\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1794\u178e\u17d2\u178a\u17b6\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u1787\u17b6\u179a\u17bc\u1794\u1797\u17b6\u1796\u00a0\u17d4"},spellchecker:{desc:"\u1794\u17b7\u1791\u1794\u17be\u1780\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u17a2\u1780\u17d2\u1781\u179a\u17b6\u179c\u17b7\u179a\u17bb\u1791\u17d2\u1792",menu:"\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u17a2\u1780\u17d2\u1781\u179a\u17b6\u179c\u17b7\u179a\u17bb\u1791\u17d2\u1792","ignore_word":"\u1796\u17b6\u1780\u17d2\u1799\u1798\u17b7\u1793\u17a2\u17be\u1796\u17be","ignore_words":"\u1798\u17b7\u1793\u17a2\u17be\u1796\u17be\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb",langs:"\u1797\u17b6\u179f\u17b6\u1795\u17d2\u179f\u17c1\u1784\u17d7",wait:"\u179f\u17bc\u1798\u179a\u1784\u17cb\u1785\u17b6\u17c6...",sug:"\u1780\u17b6\u179a\u1795\u17d2\u178a\u179b\u17cb\u1799\u17c4\u1794\u179b\u17cb","no_sug":"\u1782\u17d2\u1798\u17b6\u1793\u1780\u17b6\u179a\u1795\u17d2\u178a\u179b\u17cb\u1799\u17c4\u1794\u179b\u17cb","no_mpell":"\u1782\u17d2\u1798\u17b6\u1793\u1780\u17c6\u17a0\u17bb\u179f\u17a2\u1780\u17d2\u1781\u179a\u17b6\u179c\u17b7\u179a\u17bb\u1791\u17d2\u1792\u00a0\u17d4","learn_word":"\u179a\u17c0\u1793\u1796\u17b6\u1780\u17d2\u1799"},pagebreak:{desc:"\u1794\u1789\u17d2\u1785\u17bc\u179b\u179f\u1789\u17d2\u1789\u17b6\u1794\u17c6\u1794\u17c2\u1780\u1791\u17c6\u1796\u17d0\u179a\u00a0\u17d4"},advlist:{types:"\u1794\u17d2\u179a\u1797\u17c1\u1791",def:"\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798","lower_alpha":"\u17a2\u17b6\u179b\u17cb\u17a0\u17d2\u179c\u17b6\u178f\u17bc\u1785","lower_greek":"\u1780\u17d2\u179a\u17b7\u1780\u178f\u17bc\u1785","lower_roman":"\u179a\u17c9\u17bc\u1798\u17c9\u17b6\u17c6\u1784\u178f\u17bc\u1785","upper_alpha":"\u17a2\u17b6\u179b\u17cb\u17a0\u17d2\u179c\u17b6\u1792\u17c6","upper_roman":"\u179a\u17c9\u17bc\u1798\u17c9\u17b6\u17c6\u1784\u1792\u17c6",circle:"\u179a\u1784\u17d2\u179c\u1784\u17cb",disc:"\u1790\u17b6\u179f",square:"\u1780\u17b6\u179a\u17c9\u17c1"},colors:{"333300":"\u17a2\u17bc\u179b\u17b8\u179c\u1780\u17d2\u179a\u1798\u17c9\u17c5","993300":"\u179f\u17d2\u179b\u17b6\u1791\u17bb\u17c6\u1786\u17c1\u17c7","000000":"\u1781\u17d2\u1798\u17c5","003300":"\u1794\u17c3\u178f\u1784\u1780\u17d2\u179a\u1798\u17c9\u17c5","003366":"\u1791\u17b9\u1780\u179f\u1798\u17bb\u1791\u17d2\u179a\u1780\u17d2\u179a\u1798\u17c9\u17c5","000080":"\u1781\u17c0\u179c\u1785\u17b6\u179f\u17cb","333399":"\u1792\u17d2\u179b\u17c7","333333":"\u1794\u17d2\u179a\u1795\u17c1\u17c7\u1780\u17d2\u179a\u1798\u17c9\u17c5","800000":"\u1788\u17b6\u1798\u1787\u17d2\u179a\u17bc\u1780",FF6600:"\u179f\u17d2\u179b\u17b6\u1791\u17bb\u17c6","808000":"\u17a2\u17bc\u179b\u17b8\u179c","008000":"\u1794\u17c3\u178f\u1784","008080":"\u179f\u17ca\u17b8\u179b\u17c0\u1794\u1785\u17b6\u179f\u17cb","0000FF":"\u1781\u17c0\u179c","666699":"\u1781\u17c0\u179c\u1794\u17d2\u179a\u1795\u17c1\u17c7","808080":"\u1794\u17d2\u179a\u1795\u17c1\u17c7",FF0000:"\u1780\u17d2\u179a\u17a0\u1798",FF9900:"\u179b\u17bf\u1784\u1791\u17bb\u17c6","99CC00":"\u1794\u17c3\u178f\u1784\u179b\u17bf\u1784","339966":"\u1794\u17c3\u178f\u1784\u1781\u17c0\u179c","33CCCC":"\u1781\u17c0\u179c\u1794\u17c3\u178f\u1784","3366FF":"\u1781\u17c0\u179c\u179a\u17c9\u17bc\u1799\u17c9\u17b6\u179b\u17cb","800080":"\u179f\u17d2\u179c\u17b6\u1799","999999":"\u1794\u17d2\u179a\u1795\u17c1\u17c7\u1798\u1792\u17d2\u1799\u1798",FF00FF:"\u1795\u17d2\u1780\u17b6\u1788\u17bc\u1780\u1785\u17b6\u179f\u17cb",FFCC00:"\u1798\u17b6\u179f",FFFF00:"\u179b\u17bf\u1784","00FF00":"\u1780\u17d2\u179a\u17bc\u1785\u1786\u17d2\u1798\u17b6\u179a","00FFFF":"\u179f\u17ca\u17b8\u179b\u17c0\u1794","00CCFF":"\u1795\u17d2\u1791\u17c3\u1798\u17c1\u1783","993366":"\u178f\u17d2\u1793\u17c4\u178f",C0C0C0:"\u1794\u17d2\u179a\u17b6\u1780\u17cb",FF99CC:"\u1795\u17d2\u1780\u17b6\u1788\u17bc\u1780",FFCC99:"\u17a2\u17b6\u179f\u1784\u17cb\u1781\u17c3",FFFF99:"\u179b\u17bf\u1784\u1781\u17d2\u1785\u17b8",CCFFCC:"\u1794\u17c3\u178f\u1784\u179f\u17d2\u179b\u17c1\u1780",CCFFFF:"\u179f\u17ca\u17b8\u179b\u17c0\u1794\u179f\u17d2\u179b\u17c1\u1780","99CCFF":"\u1795\u17d2\u1791\u17c3\u1798\u17c1\u1783\u1781\u17d2\u1785\u17b8",CC99FF:"\u179f\u17d2\u179c\u17b6\u1799\u179f\u17d2\u179b\u17c1\u1780",FFFFFF:"\u179f"},aria:{"rich_text_area":"\u178f\u17c6\u1794\u1793\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u179f\u1798\u17d2\u1794\u17bc\u179a\u1794\u17c2\u1794"},wordcount:{words:"\u1796\u17b6\u1780\u17d2\u1799\u17d6"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ko.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ko.js
new file mode 100644
index 000000000..e9b2cc9ee
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ko.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ko:{common:{"more_colors":"\uadf8 \uc678\uc758 \uc0c9","invalid_data":"\uc624\ub958: \ubd80\uc801\ud569\ud55c \uac12\uc774 \uc785\ub825\ub418\uc5b4 \ube68\uac04\uc0c9\uc73c\ub85c \ud45c\uc2dc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.","popup_blocked":"\ud504\ub85c\uadf8\ub7a8 \uae30\ub2a5\uc744 \uc704\ud55c \ucc3d\uc744 \uc5f4\ub824\uace0 \ud588\uc73c\ub098 \ud31d\uc5c5 \ucc28\ub2e8 \uae30\ub2a5\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uac8c\ub41c \uac83 \uac19\uc2b5\ub2c8\ub2e4. \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc2dc\ub824\uba74 \uc774 \uc2f8\uc774\ud2b8\uc758 \ud31d\uc5c5 \ucc28\ub2e8\uc744 \ud574\uc81c\ud558\uc154\uc57c \ud569\ub2c8\ub2e4.","clipboard_no_support":"\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ub300\uc2e0 \ub2e8\ucd95\ud0a4\ub97c \uc0ac\uc6a9\ud574\uc8fc\uc138\uc694.","clipboard_msg":"Mozilla \ubc0fFirefox\uc5d0\uc11c\ub294 \ubcf5\uc0ac/\uc798\ub77c\ub0b4\uae30/\ubd99\uc774\uae30\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n\uc774 \ubb38\uc81c\uc5d0 \ub300\ud574 \ub354 \uc790\uc138\ud55c \uc0ac\ud56d\uc744 \ubcf4\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","not_set":"-- \ubbf8\uc124\uc815 --","class_name":"\ud074\ub798\uc2a4",browse:"\ucc3e\uc544\ubcf4\uae30",close:"\ub2eb\uae30",cancel:"\ucde8\uc18c",update:"\uac31\uc2e0",insert:"\uc0bd\uc785",apply:"\uc801\uc6a9","edit_confirm":"\uc774 \ud14d\uc2a4\ud2b8 \uc601\uc5ed\uc5d0 WYSIWYG \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","invalid_data_number":"{#field}\ub294 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4","invalid_data_min":"{#field}\ub294 {#min}\ubcf4\ub2e4 \ud070 \uc218\uc5ec\uc57c \ud569\ub2c8\ub2e4","invalid_data_size":"{#field}\ub294 \uc22b\uc790\ub098 \ubc31\ubd84\uc728\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4",value:"(\uac12)"},contextmenu:{full:"\uc591\ucabd \ub9de\ucda4",right:"\uc624\ub978\ucabd \ub9de\ucda4",center:"\uac00\uc6b4\ub370 \ub9de\ucda4",left:"\uc67c\ucabd \ub9de\ucda4",align:"\uc904 \ub9de\ucda4"},insertdatetime:{"day_short":"\uc77c,\uc6d4,\ud654,\uc218,\ubaa9,\uae08,\ud1a0,\uc77c","day_long":"\uc77c\uc694\uc77c,\uc6d4\uc694\uc77c,\ud654\uc694\uc77c,\uc218\uc694\uc77c,\ubaa9\uc694\uc77c,\uae08\uc694\uc77c,\ud1a0\uc694\uc77c,\uc77c\uc694\uc77c","months_short":"1,2,3,4,5,6,7,8,9,10,11,12","months_long":"1\uc6d4,2\uc6d4,3\uc6d4,4\uc6d4,5\uc6d4,6\uc6d4,7\uc6d4,8\uc6d4,9\uc6d4,10\uc6d4,11\uc6d4,12\uc6d4","inserttime_desc":"\uc2dc\uac04 \uc0bd\uc785","insertdate_desc":"\ub0a0\uc9dc \uc0bd\uc785","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\uc778\uc1c4"},preview:{"preview_desc":"\ubbf8\ub9ac \ubcf4\uae30"},directionality:{"rtl_desc":"\ubb38\uc790\ubc29\ud5a5\uc744 \uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c","ltr_desc":"\ubb38\uc790\ubc29\ud5a5\uc744 \uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c"},layer:{content:"\uc0c8 \ub808\uc774\uc5b4...","absolute_desc":"\uc808\ub300 \uc704\uce58 \ubc29\uc2dd\uc73c\ub85c \uc804\ud658","backward_desc":"\ub4a4\ub85c \uc774\ub3d9","forward_desc":"\uc55e\uc73c\ub85c \uc774\ub3d9","insertlayer_desc":"\uc0c8 \ub808\uc774\uc5b4 \uc0bd\uc785"},save:{"save_desc":"\uc800\uc7a5","cancel_desc":"\ubcc0\uacbd \ub0b4\uc6a9 \uc804\ubd80 \ucde8\uc18c"},nonbreaking:{"nonbreaking_desc":"\uc904\ubc14\uafc8\ub418\uc9c0 \uc54a\ub294 \ube48\uce78 \uc0bd\uc785"},iespell:{download:"ieSpell\uc774 \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.\n\uc778\uc2a4\ud1a8 \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","iespell_desc":"\ucca0\uc790 \uac80\uc0ac"},advhr:{"advhr_desc":"\uad6c\ubd84\uc120 \uc0bd\uc785","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\uc774\ubaa8\ud2f0\ucf58","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\ucc3e\uae30/\ubc14\uafb8\uae30","search_desc":"\ucc3e\uae30","delta_width":"","delta_height":""},advimage:{"image_desc":"\uc774\ubbf8\uc9c0 \uc0bd\uc785/\ud3b8\uc9d1","delta_width":"","delta_height":""},advlink:{"link_desc":"\ub9c1\ud06c \uc0bd\uc785/\ud3b8\uc9d1","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"","attribs_desc":"\uc18d\uc131 \uc0bd\uc785/\ud3b8\uc9d1","ins_desc":"\uc0bd\uc785","del_desc":"\uc0ad\uc81c","acronym_desc":"\uba38\ub9bf\uae00\uc790","abbr_desc":"\uc57d\uc5b4","cite_desc":"\uc778\uc6a9","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS \uc11c\uc2dd \ud3b8\uc9d1","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\ubd99\uc5ec\ub123\uae30\uac00 \uc774\uc81c \ud3c9\ubb38 \ud14d\uc2a4\ud2b8 \ubaa8\ub4dc\uac00 \ub410\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \ud074\ub9ad\ud558\uba74 \uc815\uc0c1 \ubd99\uc5ec\ub123\uae30 \ubaa8\ub4dc\ub85c \ub3cc\uc544\uac11\ub2c8\ub2e4.","plaintext_mode_sticky":"\ubd99\uc5ec\ub123\uae30\uac00 \uc774\uc81c \ud3c9\ubb38 \ud14d\uc2a4\ud2b8 \ubaa8\ub4dc\uac00 \ub410\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \ud074\ub9ad\ud558\uba74 \uc815\uc0c1 \ubd99\uc5ec\ub123\uae30 \ubaa8\ub4dc\ub85c \ub3cc\uc544\uac11\ub2c8\ub2e4. \ubd99\uc5ec\ub123\uae30\ub97c \ud558\uc2dc\uba74 \uc815\uc0c1 \ubd99\uc5ec\ub123\uae30 \ubaa8\ub4dc\ub85c \ub3cc\uc544\uac11\ub2c8\ub2e4.","selectall_desc":"\ubaa8\ub450 \uc120\ud0dd","paste_word_desc":"Word\ub85c\ubd80\ud130 \ubd99\uc5ec\ub123\uae30","paste_text_desc":"\ud3c9\ubb38 \ud14d\uc2a4\ud2b8\ub85c \ubd99\uc5ec\ub123\uae30"},"paste_dlg":{"word_title":"\ud0a4\ubcf4\ub4dc\uc5d0\uc11c Ctrl-V\ub97c \uc0ac\uc6a9\ud558\uba74 \ud14d\uc2a4\ud2b8\ub97c \ucc3d\uc5d0 \ubd99\uc5ec\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","text_linebreaks":"\uc904\ubc14\uafc8 \uc720\uc9c0","text_title":"\ud0a4\ubcf4\ub4dc\uc5d0\uc11c Ctrl-V\ub97c \uc0ac\uc6a9\ud558\uba74 \ud14d\uc2a4\ud2b8\ub97c \ucc3d\uc5d0 \ubd99\uc5ec\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."},table:{cell:"\uc140",col:"\uc5f4",row:"\ud589",del:"\ud45c \uc0ad\uc81c","copy_row_desc":"\ud589 \ubcf5\uc0ac","cut_row_desc":"\ud589 \uc798\ub77c\ub0b4\uae30","paste_row_after_desc":"\uc544\ub798\uc5d0 \ud589 \ubd99\uc5ec\ub123\uae30","paste_row_before_desc":"\uc704\uc5d0 \ud589 \ubd99\uc5ec\ub123\uae30","props_desc":"\ud45c \uc18d\uc131","cell_desc":"\uc140 \uc18d\uc131","row_desc":"\ud589 \uc18d\uc131","merge_cells_desc":"\uc140 \ubcd1\ud569","split_cells_desc":"\ubcd1\ud569\ub41c \uc140 \ubd84\ub9ac","delete_col_desc":"\uc5f4 \uc0ad\uc81c","col_after_desc":"\ub4a4\uc5d0 \uc5f4 \uc0bd\uc785","col_before_desc":"\uc55e\uc5d0 \uc5f4 \uc0bd\uc785","delete_row_desc":"\ud589 \uc0ad\uc81c","row_after_desc":"\uc544\ub798\uc5d0 \ud589 \uc0bd\uc785","row_before_desc":"\uc704\uc5d0 \ud589 \uc0bd\uc785",desc:"\ud45c \uc0bd\uc785/\ud3b8\uc9d1","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\uc800\uc7a5\ub41c \ub0b4\uc6a9\uc744 \ubcf5\uad6c\ud558\uba74 \ud604\uc7ac\uc758 \ub0b4\uc6a9\uc740 \uc0ad\uc81c\ub429\ub2c8\ub2e4.\n\n\uc815\ub9d0 \uc800\uc7a5\ub41c \ub0b4\uc6a9\uc744 \ubcf5\uad6c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","restore_content":"\uc790\ub3d9 \uc800\uc7a5\ub41c \ub0b4\uc6a9 \ubcf5\uad6c","unload_msg":"\ub2e4\ub978 \ud398\uc774\uc9c0\ub85c \uc774\ub3d9\ud558\uba74 \ud3b8\uc9d1\ud55c \ub0b4\uc6a9\uc774 \ucde8\uc18c\ub429\ub2c8\ub2e4."},fullscreen:{desc:"\uc804\uccb4 \ud654\uba74 \ubaa8\ub4dc \uc804\ud658"},media:{edit:"\ubbf8\ub514\uc5b4 \ud3b8\uc9d1",desc:"\ubbf8\ub514\uc5b4 \uc0bd\uc785/\ud3b8\uc9d1","delta_height":"","delta_width":""},fullpage:{desc:"\ubb38\uc11c \uc18d\uc131","delta_width":"","delta_height":""},template:{desc:"\ubbf8\ub9ac \uc815\uc758\ub41c \ud15c\ud50c\ub9bf \uc0bd\uc785"},visualchars:{desc:"\uc81c\uc5b4 \ubb38\uc790 \ud45c\uc2dc \uc804\ud658"},spellchecker:{desc:"\uc2a4\ud3a0\ub9c1 \uac80\uc0ac \uc791\ub3d9 \uc804\ud658",menu:"\uc2a4\ud3a0\ub9c1 \uac80\uc0ac \uc124\uc815","ignore_word":"\ub2e8\uc5b4 \ubb34\uc2dc","ignore_words":"\ubaa8\ub450 \ubb34\uc2dc",langs:"\uc5b8\uc5b4",wait:"\uae30\ub2e4\ub824 \uc8fc\uc138\uc694...",sug:"\ud6c4\ubcf4","no_sug":"\ud6c4\ubcf4 \uc5c6\uc74c","no_mpell":"\uc624\ud0c8\uc790\uac00 \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.","learn_word":"\ub2e8\uc5b4 \uae30\uc5b5"},pagebreak:{desc:"\uc778\uc1c4\uc6a9\uc73c\ub85c \ud398\uc774\uc9c0 \ub098\ub214"},advlist:{types:"\uc885\ub958",def:"\uae30\ubcf8","lower_alpha":"\uc601\ubb38 \uc18c\ubb38\uc790","lower_greek":"\uadf8\ub9ac\uc2a4\uc5b4 \uc18c\ubb38\uc790","lower_roman":"\ub85c\ub9c8\uc790 \uc18c\ubb38\uc790","upper_alpha":"\uc601\ubb38 \ub300\ubb38\uc790","upper_roman":"\ub85c\ub9c8\uc790 \ub300\ubb38\uc790",circle:"\uc18d\uc774 \ube48 \uc6d0",disc:"\uc18d\uc774 \ucc2c \uc6d0",square:"\uc0ac\uac01\ud615"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"\ub2e8\uc5b4:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/kz.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/kz.js
new file mode 100644
index 000000000..f8fb2f40a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/kz.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({kz:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert Time","insertdate_desc":"Insert Date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction Right to Left","ltr_desc":"Direction Left to Right"},layer:{content:"New layer...","absolute_desc":"Toggle Absolute Positioning","backward_desc":"Move Backward","forward_desc":"Move Forward","insertlayer_desc":"Insert New Layer"},save:{"save_desc":"Save","cancel_desc":"Cancel All Changes"},nonbreaking:{"nonbreaking_desc":"Insert Non-Breaking Space Character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Check Spelling"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Insert Horizontal Line"},emotions:{"emotions_desc":"\u0421\u043c\u0430\u0439\u043b \u049b\u043e\u0441\u0443","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","delta_width":"","delta_height":"","search_desc":"Find"},advimage:{"delta_width":"","image_desc":"Insert/Edit Image","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Insert/Edit Link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation"},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."},table:{cell:"\u04b0\u044f\u0448\u044b\u049b","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",col:"Column",row:"Row",del:"Delete Table","copy_row_desc":"Copy Table Row","cut_row_desc":"Cut Table Row","paste_row_after_desc":"Paste Table Row After","paste_row_before_desc":"Paste Table Row Before","props_desc":"Table Properties","cell_desc":"Table Cell Properties","row_desc":"Table Row Properties","merge_cells_desc":"Merge Table Cells","split_cells_desc":"Split Merged Table Cells","delete_col_desc":"Delete Column","col_after_desc":"Insert Column After","col_before_desc":"Insert Column Before","delete_row_desc":"Delete Row","row_after_desc":"Insert Row After","row_before_desc":"Insert Row Before",desc:"Insert/Edit Table"},autosave:{"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?","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle Full Screen Mode"},media:{"delta_height":"","delta_width":"",edit:"Edit Embedded Media",desc:"Insert/Edit Embedded Media"},fullpage:{desc:"Document Properties","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"Toggle Spell Checker",menu:"Spell Checker Settings","ignore_word":"Ignore Word","ignore_words":"Ignore All",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No Suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert Page Break for Printing"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lb.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lb.js
new file mode 100644
index 000000000..8a2e69553
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({lb:{common:{"more_colors":"Weider Fuerwen","invalid_data":"Feeler: Dir hutt ong\u00fclteg W\u00e4erter uginn (rout mark\u00e9iert).","popup_blocked":"Leider huet \u00c4re Popup-Blocker eng F\u00ebnster \u00ebnnerdr\u00e9ckt, d\u00e9i fir d\'Funktion\u00e9iere vun d\u00ebsem Programm n\u00e9ideg ass. Deaktiv\u00e9iert wann ech gelift de Popup-Blocker fir d\u00ebs S\u00e4it.","clipboard_no_support":"G\u00ebtt momentan net an \u00c4rem Browser \u00ebnnerst\u00ebtzt. Benotzt wann ech gelift d\'Tastekombinatiounen.","clipboard_msg":"Kop\u00e9ieren, Ausschneiden an Af\u00fcgen sinn am Mozilla Firefox net m\u00e9iglech.\nW\u00ebllt Dir m\u00e9i iwwert d\u00ebse Problem gewuer ginn?","not_set":"- ondefin\u00e9iert -","class_name":"CSS-Klass",browse:"Duerchsichen",close:"Zoumaachen",cancel:"Ofbriechen",update:"Aktualis\u00e9ieren",insert:"Af\u00fcgen",apply:"Iwwerhuelen","edit_confirm":"D\u00ebsen Textber\u00e4ich mat WYSIWYG beaarbechten?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"B\u00e9ids\u00e4iteg align\u00e9iert",right:"Riets align\u00e9iert",center:"Zentr\u00e9iert",left:"L\u00e9nks align\u00e9iert",align:"Ausriichtung"},insertdatetime:{"day_short":"So,M\u00e9,D\u00eb,M\u00eb,Do,Fr,Sa,So","day_long":"Sonndeg,M\u00e9indeg,D\u00ebnschdeg,M\u00ebttwoch,Donneschdeg,Freideg,Samschdeg,Sonndeg","months_short":"Jan,Feb,M\u00e4erz,Abr,Mee,Juni,Juli,Aug,Sept,Okt,Nov,Dez","months_long":"Januar,Februar,M\u00e4erz,Abr\u00ebll,Mee,Juni,Juli,August,September,Oktober,November,Dezember","inserttime_desc":"Z\u00e4it af\u00fcgen","insertdate_desc":"Datum af\u00fcgen","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Dr\u00e9cken"},preview:{"preview_desc":"Virschau"},directionality:{"rtl_desc":"Schr\u00ebft vu riets no l\u00e9nks","ltr_desc":"Schr\u00ebft vu l\u00e9nks no riets"},layer:{content:"Neie Layer...","absolute_desc":"Absolut Position\u00e9ierung","backward_desc":"No hanne r\u00e9ckelen","forward_desc":"No vir r\u00e9ckelen","insertlayer_desc":"Neie Layer af\u00fcgen"},save:{"save_desc":"Sp\u00e4icheren","cancel_desc":"All d\'\u00c4nnerungen ewechpuchen"},nonbreaking:{"nonbreaking_desc":"Gesch\u00fctzt Leerzeechen af\u00fcgen"},iespell:{download:"ieSpell konnt net fonnt ginn. W\u00ebllt Dir en install\u00e9ieren?","iespell_desc":"Spellchecker"},advhr:{"advhr_desc":"Trennlinn","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smileyen","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Sichen/Ersetzen","search_desc":"Sichen","delta_width":"","delta_height":""},advimage:{"image_desc":"Bild af\u00fcgen/ersetzen","delta_width":"","delta_height":""},advlink:{"link_desc":"Link af\u00fcgen/beaarbechten","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Attributer af\u00fcgen/beaarbechten","ins_desc":"Agef\u00fcgtenen Text","del_desc":"Gel\u00e4schten Text","acronym_desc":"Akronym","abbr_desc":"Ofkierzung","cite_desc":"Quellenzit\u00e9ierung","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS-Styles beaarbechten","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Beim Af\u00fcge g\u00ebtt elo just den Text ouni Format\u00e9ierungen iwwerholl. Nach eng K\u00e9ier klicken, fir an den normale Modus zer\u00e9ckzewiesselen.","plaintext_mode_sticky":"Beim Af\u00fcge g\u00ebtt elo just den Text ouni Format\u00e9ierungen iwwerholl. Nach eng K\u00e9ier klicken, fir an den normale Modus zer\u00e9ckzewiesselen. Nodeem s Dir eppes agef\u00fcgt hutt, g\u00ebtt automatesch nees an den normale Modus gewiesselt.","selectall_desc":"Alles auswielen","paste_word_desc":"Mat Format\u00e9ierungen (aus dem Word) af\u00fcgen","paste_text_desc":"Als normalen Text af\u00fcgen"},"paste_dlg":{"word_title":"Dr\u00e9ckt op \u00c4rer Tastatur Ctrl+V, um den Text an ze f\u00fcgen.","text_linebreaks":"Zeilen\u00ebmbr\u00ebch b\u00e4ibehalen","text_title":"Dr\u00e9ckt op \u00c4rer Tastatur Ctrl+V, fir den Text an ze f\u00fcgen."},table:{"cellprops_delta_width":"150",cell:"Zell",col:"Spalt",row:"Zeil",del:"Tabelle l\u00e4schen","copy_row_desc":"Zeil kop\u00e9ieren","cut_row_desc":"Zeil ausschneiden","paste_row_after_desc":"Zeil \u00ebnnerhalb aus der Zw\u00ebschenoflag af\u00fcgen","paste_row_before_desc":"Zeil uewerhalb aus der Zw\u00ebschenoflag af\u00fcgen","props_desc":"Eegeschaften vun der Tabelle","cell_desc":"Eegeschaften vun der Zell","row_desc":"Eegeschaften vun der Zeil","merge_cells_desc":"Zellen verbannen","split_cells_desc":"Verbonnen Zellen trennen","delete_col_desc":"Spalt l\u00e4schen","col_after_desc":"Spalt riets af\u00fcgen","col_before_desc":"Spalt l\u00e9nks af\u00fcgen","delete_row_desc":"Zeil l\u00e4schen","row_after_desc":"Zeil \u00ebnnerhalb af\u00fcgen","row_before_desc":"Zeil uewerhalb af\u00fcgen",desc:"Tabell erstellen/beaarbechten","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Wann Dir dee gesp\u00e4icherten Inhalt recuper\u00e9iert, verl\u00e9iert Dir de ganzen Inhalt dee grad am Editor ass.\n\nW\u00ebllt Dir de gesp\u00e4icherten Inhalt s\u00e9cher recuper\u00e9ieren?.","restore_content":"Automatesch gesp\u00e4icherten Inhalt recuper\u00e9ieren.","unload_msg":"\u00c4r \u00c4nnerungen gi verluer, wann Dir d\'S\u00e4it verloosst."},fullscreen:{desc:"Vollbildschierm"},media:{edit:"Multimedia-Abettung beaarbechten",desc:"Multimedia-Inhalt abannen/beaarbechten","delta_height":"","delta_width":""},fullpage:{desc:"Dokument-Eegeschaften","delta_width":"","delta_height":""},template:{desc:"Virgef\u00e4erdegte Virlageninhalt af\u00fcgen"},visualchars:{desc:"Siichtbarkeet vun de Steierzeechen un/aus"},spellchecker:{desc:"Spellchecker un/aus",menu:"Konfiguratioun vum Spellchecker","ignore_word":"Wuert ignor\u00e9ieren","ignore_words":"All ignor\u00e9ieren",langs:"Sproochen",wait:"Wann ech gelift waarden...",sug:"Virschl\u00e9i","no_sug":"Keng Virschl\u00e9i","no_mpell":"Keng Orthographiefeeler fonnt.","learn_word":"Learn word"},pagebreak:{desc:"S\u00e4iten\u00ebmbroch af\u00fcgen"},advlist:{types:"Typen",def:"Standard","lower_alpha":"Kleng Buschtawen","lower_greek":"Kleng griichesch Buschtawen","lower_roman":"Kleng r\u00e9imech Zuelen","upper_alpha":"Grouss Buschtawen","upper_roman":"Grouss r\u00e9imech Zuelen",circle:"Krees",disc:"Scheif",square:"Quadrat"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lt.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lt.js
new file mode 100644
index 000000000..e11867190
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({lt:{common:{"more_colors":"Daugiau spalv\u0173","invalid_data":"Klaida: Blogai \u012fvestos reik\u0161m\u0117s, kurios pa\u017eym\u0117tos raudonai.","popup_blocked":"Atsipra\u0161ome, ta\u010diau pasteb\u0117jome, kad j\u016bs\u0173 i\u0161kylan\u010di\u0173 lang\u0173 blokavimo programa i\u0161jung\u0117 lang\u0105, kuris teikia aplikacijai funkcionalum\u0105. Tur\u0117tum\u0117te atjungti i\u0161kylan\u010di\u0173 lang\u0173 blokavim\u0105 \u0161iam tinklalapiui, kad i\u0161naudotum\u0117te visas galimybes.","clipboard_no_support":"\u0160i nar\u0161ykl\u0117 nepalaiko \u0161io veikimo, tod\u0117l naudokite klaviat\u016bros spar\u010diuosius klavi\u0161us.","clipboard_msg":"Kopijavimas/i\u0161kirpimas/\u012fd\u0117jimas paspaudus \u0161\u012f mygtuk\u0105 negalimas Mozilla ir Firefox nar\u0161ykl\u0117se.\nNukopijuoti galima paspaudus: Ctrl + C, i\u0161kirpti: Ctrl + X, \u012fd\u0117ti: Ctrl + V.\nAr norite daugiau informacijos apie \u0161i\u0105 problem\u0105?","not_set":"-- Nenurodyta --","class_name":"Klas\u0117",browse:"Nar\u0161yti",close:"U\u017everti",cancel:"Atsisakyti",update:"Atnaujinti",insert:"\u012eterpti",apply:"Taikyti","edit_confirm":"Ar norite naudoti tekst\u0173 redaktoriaus re\u017eim\u0105 \u0161iam teksto redagavimo langui?","invalid_data_number":"{#field} turi b\u016bti skai\u010dius","invalid_data_min":"{#field} turi b\u016bti skai\u010dius didesnis nei {#min}","invalid_data_size":"{#field} turi b\u016bti skai\u010dius arba procentai",value:"(value)"},contextmenu:{full:"I\u0161 abiej\u0173 pusi\u0173",right:"De\u0161in\u0117je",center:"Centre",left:"Kair\u0117je",align:"Lygiavimas"},insertdatetime:{"day_short":"Sekm,Pirm,Antr,Tre\u010d,Ketv,Penk,\u0160e\u0161t,Sekm","day_long":"Sekmadienis,Pirmadienis,Antradienis,Tre\u010diadienis,Ketvirtadienis,Penktadienis,\u0160e\u0161tadienis,Sekmadienis","months_short":"Sau,Vas,Kov,Bal,Geg,Bir,Lie,Rugpj,Rugs,Spa,Lapkr,Gruo","months_long":"Sausis,Vasaris,Kovas,Balandis,Gegu\u017e\u0117,Bir\u017eelis,Liepa,Rugpj\u016btis,Rugs\u0117jis,Spalis,Lapkritis,Gruodis","inserttime_desc":"\u012eterpti laik\u0105","insertdate_desc":"\u012eterpti dat\u0105","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Spausdinti"},preview:{"preview_desc":"Per\u017ei\u016bra"},directionality:{"rtl_desc":"Kryptis i\u0161 de\u0161in\u0117s \u012f kair\u0119","ltr_desc":"Kryptis i\u0161 kair\u0117s \u012f de\u0161in\u0119"},layer:{content:"Naujas sluoksnis...","absolute_desc":"Perjungti absoliut\u0173 pozicionavim\u0105","backward_desc":"Perkelti atgal","forward_desc":"Perkelti \u012f priek\u012f","insertlayer_desc":"\u012eterpti nauj\u0105 sluoksn\u012f"},save:{"save_desc":"I\u0161saugoti","cancel_desc":"Atsisakyti vis\u0173 pakeitim\u0173"},nonbreaking:{"nonbreaking_desc":"\u012eterpti jungiamojo tarpo simbol\u012f"},iespell:{download:"ieSpell neaptiktas. Ar norite dabar j\u012f \u012fdiegti?","iespell_desc":"Paleisti ra\u0161ybos tikrintuv\u0119"},advhr:{"delta_width":"10","advhr_desc":"Horizontali linija","delta_height":""},emotions:{"emotions_desc":"Jaustukai","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Ie\u0161koti/Pakeisti","delta_width":"10","delta_height":"20","search_desc":"Ie\u0161koti"},advimage:{"delta_width":"10","image_desc":"\u012eterpti/Redaguoti paveiksl\u0117l\u012f","delta_height":""},advlink:{"delta_width":"10","link_desc":"\u012eterpti/Redaguoti nuorod\u0105","delta_height":""},xhtmlxtras:{"attribs_delta_width":"10","ins_delta_width":"10","del_delta_width":"10","acronym_delta_width":"10","abbr_delta_width":"10","cite_delta_width":"10","attribs_desc":"\u012eterpti/Redaguoti atributus","ins_desc":"\u012eterpimas","del_desc":"Panaikinimas","acronym_desc":"Akronimas","abbr_desc":"Santrumpa","cite_desc":"Citavimas","attribs_delta_height":"","ins_delta_height":"","del_delta_height":"","acronym_delta_height":"","abbr_delta_height":"","cite_delta_height":""},style:{"delta_width":"40",desc:"Redaguoti CSS stili\u0173","delta_height":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Visk\u0105 pa\u017eym\u0117ti","paste_word_desc":"\u012ed\u0117ti i\u0161 Word","paste_text_desc":"\u012ed\u0117ti kaip paprast\u0105 tekst\u0105"},"paste_dlg":{"word_title":"Naudokite CTRL+V tekstui \u012fd\u0117ti \u012f \u0161\u012f lang\u0105.","text_linebreaks":"Palikti eilu\u010di\u0173 l\u016b\u017eius","text_title":"Naudokite CTRL+V tekstui \u012fd\u0117ti \u012f \u0161\u012f lang\u0105."},table:{"merge_cells_delta_width":"10","table_delta_width":"10","cellprops_delta_width":"10","rowprops_delta_width":"10",cell:"Langelis",col:"Stulpelis",row:"Eilut\u0117",del:"\u0160alinti lentel\u0119","copy_row_desc":"Kopijuoti lentel\u0117s eilut\u0119","cut_row_desc":"I\u0161kirpti lentel\u0117s eilut\u0119","paste_row_after_desc":"\u012ed\u0117ti lentel\u0117s eilut\u0119 po","paste_row_before_desc":"\u012ed\u0117ti lentel\u0117s eilut\u0119 prie\u0161","props_desc":"Lentel\u0117s nustatymai","cell_desc":"Lentel\u0117s langelio nustatymai","row_desc":"Lentel\u0117s eilut\u0117s nustatymai","merge_cells_desc":"Sujungti lentel\u0117s langelius","split_cells_desc":"Skaidyti sulietus lentel\u0117s langelius","delete_col_desc":"\u0160alinti stulpel\u012f","col_after_desc":"\u012eterpti stulpel\u012f po","col_before_desc":"\u012eterpti stulpel\u012f prie\u0161","delete_row_desc":"\u0160alinti eilut\u0119","row_after_desc":"\u012eterpti eilut\u0119 po","row_before_desc":"\u012eterpti eilut\u0119 prie\u0161",desc:"\u012eterpti/Redaguoti lentel\u0119","merge_cells_delta_height":"","table_delta_height":"","cellprops_delta_height":"","rowprops_delta_height":""},autosave:{"warning_message":"Jei atstatysite i\u0161saugot\u0105 turin\u012f, prarasite esam\u0105 turin\u012f redaktoriaus lange.\n\nAr tikrai norite atstatyti i\u0161saugot\u0105 turin\u012f?","restore_content":"Atstatyti automati\u0161kai i\u0161saugot\u0105 turin\u012f.","unload_msg":"Visi pakeitimai bus prarasti, jei i\u0161eisite i\u0161 \u0161io puslapio."},fullscreen:{desc:"Perjungti viso ekrano re\u017eim\u0105"},media:{"delta_height":"","delta_width":"10",edit:"Redaguoti integruot\u0105 daugialyp\u0119 terp\u0119",desc:"\u012eterpti/redaguoti integruot\u0105 daugialyp\u0119 terp\u0119"},fullpage:{desc:"Dokumento nustatymai","delta_width":"10","delta_height":""},template:{desc:"\u012eterpti numatyt\u0105 \u0161ablono turin\u012f"},visualchars:{desc:"Vizualiniai valdymo simboliai \u012fjungti/i\u0161jungti."},spellchecker:{desc:"Perjungti ra\u0161ybos tikrintuv\u0119",menu:"Ra\u0161ybos tikrintuv\u0117s nustatymai","ignore_word":"Ignoruoti \u017eod\u012f","ignore_words":"Ignoruoti visk\u0105",langs:"Kalbos",wait:"Pra\u0161ome palaukti...",sug:"Pasi\u016blymai","no_sug":"Pasi\u016blym\u0173 nerasta","no_mpell":"Klaid\u0173 nerasta.","learn_word":"I\u0161mokti \u017eod\u012f"},pagebreak:{desc:"\u012eterpti puslapio pabaigos \u017eym\u0119."},advlist:{types:"Tipai",def:"Numatytasis","lower_alpha":"Ma\u017eosiomis raid\u0117mis","lower_greek":"Ma\u017eaisiais graik\u0173","lower_roman":"Ma\u017eaisiais rom\u0117n\u0173","upper_alpha":"Did\u017eiosiomis raid\u0117mis","upper_roman":"Did\u017eiaisiais rom\u0117n\u0173",circle:"Apskritimas",disc:"Diskas",square:"Kvadratas"},colors:{"333300":"Tamsi alyvuogi\u0173","993300":"Tamsi oran\u017ein\u0117","000000":"Juoda","003300":"Tamsi \u017ealia","003366":"Tamsi \u017eydra","000080":"Tamsiai m\u0117lyna","333399":"Indigo","333333":"Tamsiai pilka","800000":"Ka\u0161tonin\u0117",FF6600:"Oran\u017ein\u0117","808000":"Alyvuogi\u0173","008000":"\u017dalia","008080":"\u017dalsvai m\u0117lyna","0000FF":"M\u0117lyna","666699":"Pilk\u0161vai m\u0117lyna","808080":"Pilka",FF0000:"Raudona",FF9900:"Gintarin\u0117","99CC00":"Geltonai \u017ealia","339966":"\u017dalia","33CCCC":"\u017dalsvai m\u0117lyna","3366FF":"M\u0117lyna","800080":"Purpurin\u0117","999999":"Vidutini\u0161kai pilka",FF00FF:"Rausvai raudona",FFCC00:"Auksin\u0117",FFFF00:"Geltona","00FF00":"\u0160viesiai \u017ealia","00FFFF":"Vandenin\u0117","00CCFF":"\u017dydra","993366":"Ruda",C0C0C0:"Sidabrin\u0117",FF99CC:"Ro\u017ein\u0117",FFCC99:"Persiko spalva",FFFF99:"\u0160viesiai geltona",CCFFCC:"\u0160viesiai \u017ealia",CCFFFF:"\u017dalsvai m\u0117lyna","99CCFF":"\u0160viesi m\u0117lyna",CC99FF:"Slyv\u0173 spalvos",FFFFFF:"Balta"},aria:{"rich_text_area":"Formatuoto teksto zona"},wordcount:{words:"\u017dod\u017ei\u0173:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lv.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lv.js
new file mode 100644
index 000000000..953451a1b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/lv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({lv:{common:{"more_colors":"Vair\u0101k kr\u0101su","invalid_data":"K\u013c\u016bda: Ievad\u012btas neder\u012bgas v\u0113rt\u012bbas. T\u0101s ir atz\u012bm\u0113tas sarkan\u0101 kr\u0101s\u0101.","popup_blocked":"Atvainojiet, bet m\u0113s esam konstat\u0113ju\u0161i, ka J\u016bsu uzleco\u0161o logu blo\u0137\u0113t\u0101js ir atsp\u0113jojis logu, kas nodro\u0161ina programmas funkcionalit\u0101ti. Lai piln\u012bb\u0101 izmantotu \u0161o r\u012bku, Jums ir j\u0101atsl\u0113dz uzleco\u0161o logu blo\u0137\u0113tajs \u0161ai vietnei. ","clipboard_no_support":"\u0160obr\u012bd J\u016bsu p\u0101rl\u016bks neatbalsta \u0161o iesp\u0113ju, t\u0101 viet\u0101 l\u016bdzu izmantotjiet tastat\u016bras sa\u012bsin\u0101jumtausti\u0146us.","clipboard_msg":"Iesp\u0113ja Kop\u0113t/Izgriezt/Iekop\u0113t nav pieejama p\u0101rl\u016bkiem Mozilla and Firefox.\nVai J\u016bs v\u0113laties uzzin\u0101t vair\u0101k par \u0161o probl\u0113mu?","not_set":"-- Nav nor\u0101d\u012bts --","class_name":"Klase",browse:"P\u0101rl\u016bkot",close:"Aizv\u0113rt",cancel:"Atcelt",update:"Atjaunin\u0101t",insert:"Ievietot",apply:"Apstiprin\u0101t","edit_confirm":"Vai tu v\u0113lies izmantot WYSIWYG \u0161im teksta laukam?","invalid_data_number":"{#field} j\u0101b\u016bt skaitlim","invalid_data_min":"{#field} ir j\u0101b\u016bt skaitlim, kas nav liel\u0101ks k\u0101 {#min}","invalid_data_size":"{#field} ir j\u0101b\u016bt skaitlim vai procentiem",value:"(value)"},contextmenu:{full:"Pilns",right:"Pa labi",center:"Centr\u0113ts",left:"Pa kreisi",align:"Novietojums"},insertdatetime:{"day_short":"Sv\u0113,Pir,Otr,Tre,Cet,Pie,Ses,Sv\u0113","day_long":"Sv\u0113tdiena,Pirmdiena,Otrdiena,Tre\u0161diena,Ceturtdiena,Piektdiena,Sestdiena,Sv\u0113tdiena","months_short":"Jan,Feb,Mar,Apr,Mai,J\u016bn,J\u016bl,Aug,Sep,Okt,Nov,Dec","months_long":"Janv\u0101ris,Febru\u0101ris,Marts,Apr\u012blis,Maijs,J\u016bnijs,J\u016blijs,Augusts,Seprembris,Oktobris,Novembris,Decembris","inserttime_desc":"Ievietot laiku","insertdate_desc":"Ievietot datumu","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Druk\u0101t"},preview:{"preview_desc":"Priek\u0161skat\u012bt"},directionality:{"rtl_desc":"Virziens no lab\u0101s uz kreiso","ltr_desc":"Virziens no kreis\u0101s uz labo"},layer:{content:"Jauns sl\u0101nis...","absolute_desc":"Iestat\u012bt/Nov\u0101kt absol\u016bto novietojumu ","backward_desc":"Atpaka\u013c","forward_desc":"Uz priek\u0161u","insertlayer_desc":"Ievietot jaunu sl\u0101ni"},save:{"save_desc":"Saglab\u0101t","cancel_desc":"Atcelt visas izmai\u0146as"},nonbreaking:{"nonbreaking_desc":"Ievietot tuk\u0161uma simbolu"},iespell:{download:"ieSpell netika atrasts. Vai J\u016bs v\u0113laties to uzst\u0101d\u012bt?","iespell_desc":"Uzs\u0101kt pareizrakst\u012bbas p\u0101rbaudi"},advhr:{"advhr_desc":"Horizont\u0101la sv\u012btra","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smaidi\u0146i","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Mekl\u0113t/Aizvietot","search_desc":"Mekl\u0113t","delta_width":"","delta_height":""},advimage:{"image_desc":"Ievietot/Redi\u0123\u0113t att\u0113lu","delta_width":"","delta_height":""},advlink:{"link_desc":"Ievietot/Redi\u0123\u0113t saiti","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Pielikt/redi\u0123\u0113t \u012bpa\u0161\u012bbas","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Sa\u012bsin\u0101jums","cite_desc":"Cit\u0101ts","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Iez\u012bm\u0113t visu","paste_word_desc":"Iekop\u0113t no Word","paste_text_desc":"Iekop\u0113t ka parasto tekstu","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Izmantojiet CTRL+V uz j\u016bsu tastat\u016bras lai iekop\u0113t tekstu log\u0101.","text_linebreaks":"Sagl\u0101b\u0101t l\u012bniju sadal\u012bt\u0101jus","text_title":"Izmantojiet CTRL+V uz j\u016bsu tastat\u016bras lai iekop\u0113t tekstu log\u0101."},table:{cell:"Aile",col:"St\u0101bs",row:"Rinda",del:"Izdz\u0113st tabulu","copy_row_desc":"Kop\u0113t tabulas rindu","cut_row_desc":"Izgriezt tabulas rindu","paste_row_after_desc":"Ielikt tabulas rindu aiz","paste_row_before_desc":"Ielikt tabulas rindu priek\u0161\u0101","props_desc":"Tabulas \u012bpa\u0161\u012bbas","cell_desc":"Tabulas ailes \u012bpa\u0161\u012bbas","row_desc":"Tabulas rindas \u012bpa\u0161\u012bbas","merge_cells_desc":"Apvienot tabulas ailes","split_cells_desc":"Sadal\u012bt apvienotas tabules ailes","delete_col_desc":"Izdz\u0113st stabu","col_after_desc":"Ielikt jaunu stabu aiz","col_before_desc":"Ielikt jaunu stabu priek\u0161\u0101","delete_row_desc":"Izdz\u0113st rindu","row_after_desc":"Ielikt jaunu rindu aiz","row_before_desc":"Ielikt jaunu rindu priek\u0161\u0101",desc:"Ielikt jaunu tabulu","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Ja atjaunosiet saglab\u0101to saturu, zaud\u0113siet eso\u0161o saturu redaktora log\u0101.\n\nVai tie\u0161\u0101m v\u0113laties atjaunot saglab\u0101tu saturu?","restore_content":"Atjaunot autom\u0101tiski saglab\u0101tu saturu.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Iem\u0101c\u012bties v\u0101rdu"},pagebreak:{desc:"Insert page break."},advlist:{types:"Tipi",def:"Noklus\u0113tais","lower_alpha":"Ar mazajiem burtiem","lower_greek":"Ar mazajiem grie\u0137u","lower_roman":"Ar mazajiem romie\u0161u","upper_alpha":"Ar lielajiem burtiem","upper_roman":"Ar lielajiem romie\u0161u",circle:"Aplis",disc:"Disks",square:"Kvadr\u0101ts"},colors:{"333300":"Tum\u0161a ol\u012bvkr\u0101sa","993300":"Tum\u0161i oran\u017ea","000000":"Melna","003300":"Tum\u0161i za\u013ca","003366":"Tum\u0161i gai\u0161zila","000080":"Tum\u0161i zila","333399":"Indigo","333333":"Tum\u0161i pel\u0113ka","800000":"Kasta\u0146u kr\u0101sa",FF6600:"Oran\u017ea","808000":"Ol\u012bvkr\u0101sa","008000":"Za\u013ca","008080":"Za\u013cganzila","0000FF":"Zila","666699":"Pel\u0113ki zila","808080":"Pel\u0113ka",FF0000:"Sarkana",FF9900:"Dzintarkr\u0101sa","99CC00":"Dzelteni za\u013ca","339966":"Oke\u0101na kr\u0101sa","3366FF":"Zila","800080":"Purpurkr\u0101sa","999999":"Vid\u0113ji pel\u0113ka",FF00FF:"Sarkan\u012bga",FFCC00:"Zelta",FFFF00:"Dzeltena","00FF00":"Gai\u0161i za\u013ca","00FFFF":"Oke\u0101na kr\u0101sa","00CCFF":"Gai\u0161zila","993366":"Br\u016bna",C0C0C0:"Sudraba",FF99CC:"Ro\u017ekr\u0101sa",FFCC99:"Persika kr\u0101sa",FFFF99:"Gai\u0161i dzeltena",CCFFCC:"Gai\u0161i za\u013ca",CCFFFF:"Za\u013cganzila","99CCFF":"Gai\u0161i zila",CC99FF:"Pl\u016bmju kr\u0101s\u0101",FFFFFF:"Balta","33CCCC":"Turquoise"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"v\u0101rdu:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/mk.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/mk.js
new file mode 100644
index 000000000..699b6f749
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/mk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({mk:{common:{"more_colors":"\u041f\u043e\u0432\u0435\u045c\u0435 \u0431\u043e\u0438 ...","invalid_data":"\u0413\u0440\u0435\u0448\u043a\u0430: \u0412\u043d\u0435\u0441\u0435\u043d\u0438 \u0441\u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0432\u0440\u0435\u0434\u043d\u043e\u0441\u0442\u0438, \u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438 \u0441\u043e \u0446\u0440\u0432\u0435\u043d\u043e.","popup_blocked":"\u0418\u0437\u0432\u0438\u043d\u0435\u0442\u0435, \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u0432\u0430\u0448\u0438\u043e\u0442 popup-blocker \u0433\u043e \u043e\u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0438\u043b \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 \u043a\u043e\u0458 \u043e\u0431\u0435\u0437\u0431\u0435\u0434\u0443\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u043e\u0441\u0442 \u043d\u0430 \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0458\u0430\u0442\u0430. \u040c\u0435 \u0442\u0440\u0435\u0431\u0430 \u0434\u0430 \u0433\u043e \u0438\u0441\u043a\u043b\u0443\u0447\u0438\u0442\u0435 popup-blocker-\u043e\u0442 \u0437\u0430 \u043e\u0432\u043e\u0458 \u0441\u0430\u0458\u0442, \u0441\u043e \u0446\u0435\u043b \u0446\u0435\u043b\u043e\u0441\u043d\u043e \u0434\u0430 \u0458\u0430 \u043a\u043e\u0440\u0438\u0441\u0442\u0438\u0442\u0435 \u043e\u0432\u0430\u0430 \u0430\u043b\u0430\u0442\u043a\u0430.","clipboard_no_support":"\u041e\u0432\u0430\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0458\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u043d\u043e \u043d\u0435 \u0435 \u043f\u043e\u0434\u0434\u0440\u0436\u0430\u043d\u0430 \u043e\u0434 \u0432\u0430\u0448\u0438\u043e\u0442 \u043f\u0440\u0435\u043b\u0438\u0441\u0442\u0443\u0432\u0430\u0447, \u043e\u0431\u0438\u0434\u0435\u0442\u0435 \u0441\u0435 \u0441\u043e \u0442\u0430\u0441\u0442\u0430\u0442\u0443\u0440\u0430\u0442\u0430.","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u0430\u0458/\u0418\u0441\u0435\u0447\u0438/\u0412\u043c\u0435\u0442\u043d\u0438 \u043d\u0435 \u0435 \u0434\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e \u043d\u0430 Mozilla \u0438 Firefox \u043f\u0440\u0435\u0431\u0430\u0440\u0443\u0432\u0430\u0447\u0438.\n\u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u043f\u043e\u0432\u0435\u045c\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438?","not_set":"-- \u041d\u0435 \u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e --","class_name":"\u041a\u043b\u0430\u0441\u0430",browse:"\u041f\u0440\u0435\u043b\u0438\u0441\u0442\u0430\u0458",close:"\u0417\u0430\u0442\u0432\u043e\u0440\u0438",cancel:"\u041e\u0442\u043a\u0430\u0436\u0438",update:"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458",insert:"\u0412\u043d\u0435\u0441\u0438",apply:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438","edit_confirm":"\u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u043a\u043e\u0440\u0438\u0441\u0442\u0438\u0442\u0435 WYSIWYG \u0437\u0430 \u043e\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u043d\u043e \u043f\u043e\u043b\u0435 ?","invalid_data_number":"{#field} \u043c\u043e\u0440\u0430 \u0434\u0430 \u0435 \u0431\u0440\u043e\u0458","invalid_data_min":"{#field} \u043c\u043e\u0440\u0430 \u0434\u0430 \u0435 \u0431\u0440\u043e\u0458 \u043f\u043e\u0433\u043e\u043b\u0435\u043c \u043e\u0434 {#min}","invalid_data_size":"{#field} \u043c\u043e\u0440\u0430 \u0434\u0430 \u0435 \u0431\u0440\u043e\u0458 \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442",value:"(\u0432\u0440\u0435\u0434\u043d\u043e\u0441\u0442)"},contextmenu:{full:"\u0426\u0435\u043b\u043e\u0441\u043d\u043e",right:"\u0414\u0435\u0441\u043d\u043e",center:"\u0421\u0440\u0435\u0434\u0438\u043d\u0430",left:"\u041b\u0435\u0432\u043e",align:"\u0418\u0437\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435"},insertdatetime:{"day_short":"\u041d\u0435\u0434,\u041f\u043e\u043d,\u0412\u0442\u043e,\u0421\u0440\u0435,\u0427\u0435\u0442,\u041f\u0435\u0442,\u0421\u0430\u0431,\u041d\u0435\u0434","day_long":"\u041d\u0435\u0434\u0435\u043b\u0430,\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a,\u0412\u0442\u043e\u0440\u043d\u0438\u043a,\u0421\u0440\u0435\u0434\u0430,\u0427\u0435\u0442\u0432\u0440\u0442\u043e\u043a,\u041f\u0435\u0442\u043e\u043a,\u0421\u0430\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0435\u043b\u0430","months_short":"\u0408\u0430\u043d,\u0424\u0435\u0432,\u041c\u0430\u0440,\u0410\u043f\u0440,\u041c\u0430\u0458,\u0408\u0443\u043d,\u0408\u0443\u043b,\u0410\u0432\u0433,\u0421\u0435\u043f,\u041e\u043a\u0442,\u041d\u043e\u0435,\u0414\u0435\u043a","months_long":"\u0408\u0430\u043d\u0443\u0430\u0440\u0438,\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438,\u041c\u0430\u0440\u0442,\u0410\u043f\u0440\u0438\u043b,\u041c\u0430\u0458,\u0408\u0443\u043d\u0438,\u0408\u0443\u043b\u0438,\u0410\u0432\u0433\u0443\u0441\u0442,\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438,\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438,\u041d\u043e\u0435\u043c\u0432\u0440\u0438,\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438","inserttime_desc":"\u0412\u043d\u0435\u0441\u0438 \u0432\u0440\u0435\u043c\u0435","insertdate_desc":"\u0412\u043d\u0435\u0441\u0438 \u0434\u0430\u0442\u0443\u043c","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y."},print:{"print_desc":"\u041f\u0435\u0447\u0430\u0442\u0438"},preview:{"preview_desc":"\u041f\u0440\u0435\u0433\u043b\u0435\u0434"},directionality:{"rtl_desc":"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e","ltr_desc":"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e"},layer:{content:"\u041d\u043e\u0432 \u0441\u043b\u043e\u0458 (\u043d\u0438\u0432\u043e) ...","absolute_desc":"\u0412\u043a\u043b\u0443\u0447\u0438/\u0438\u0441\u043a\u043b\u0443\u0447\u0438 \u0430\u043f\u0441\u043e\u043b\u0443\u0442\u043d\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0430\u045a\u0435","backward_desc":"\u041f\u043e\u043c\u0435\u0441\u0442\u0438 \u043d\u0430\u0437\u0430\u0434","forward_desc":"\u041f\u043e\u043c\u0435\u0441\u0442\u0438 \u043d\u0430\u043f\u0440\u0435\u0434","insertlayer_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 \u043d\u043e\u0432 \u0441\u043b\u043e\u0458"},save:{"save_desc":"\u0417\u0430\u0447\u0443\u0432\u0430\u0458","cancel_desc":"\u041e\u0442\u043a\u0430\u0436\u0438 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438"},nonbreaking:{"nonbreaking_desc":"\u0412\u043d\u0435\u0441\u0438 \u043f\u0440\u0430\u0437\u043d\u043e \u043c\u0435\u0441\u0442\u043e"},iespell:{download:"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u043e\u0442 \u043d\u0435 \u0435 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u0430\u043d\u0430. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0430 \u0434\u0430 \u0458\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0441\u0435\u0433\u0430 ?","iespell_desc":"\u041f\u043e\u0447\u043d\u0438 \u0441\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441"},advhr:{"advhr_desc":"\u0412\u043d\u0435\u0441\u0438 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0415\u043c\u043e\u0446\u0438\u0438","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u041d\u0430\u0458\u0434\u0438/\u0417\u0430\u043c\u0435\u043d\u0438","delta_width":"\u0440\u0430\u0437\u043b\u0438\u043a\u0430 \u0432\u043e \u0448\u0438\u0440\u0438\u043d\u0430","delta_height":"\u0440\u0430\u0437\u043b\u0438\u043a\u0430 \u0432\u043e \u0434\u043e\u043b\u0436\u0438\u043d\u0430","search_desc":"\u041d\u0430\u0458\u0434\u0438"},advimage:{"image_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0441\u043b\u0438\u043a\u0430","delta_width":"","delta_height":""},advlink:{"link_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u043b\u0438\u043d\u043a","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","ins_desc":"\u0412\u043d\u0435\u0441","del_desc":"\u0411\u0440\u0438\u0448\u0435\u045a\u0435","acronym_desc":"\u0410\u043a\u0440\u043e\u043d\u0438\u043c\u0438","abbr_desc":"\u041a\u0440\u0430\u0442\u0435\u043d\u043a\u0430","cite_desc":"\u0426\u0438\u0442\u0430\u0442","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_height":"\u0440\u0430\u0437\u043b\u0438\u043a\u0430 \u0432\u043e \u0448\u0438\u0440\u0438\u043d\u0430","delta_width":"\u0440\u0430\u0437\u043b\u0438\u043a\u0430 \u0432\u043e \u0434\u043e\u043b\u0436\u0438\u043d\u0430",desc:"\u0423\u0440\u0435\u0434\u0438 \u0433\u043e CSS \u0441\u0442\u0438\u043b\u043e\u0442"},paste:{"plaintext_mode":"\u0417\u0430\u043b\u0435\u043f\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0435 \u0432\u043e \u0447\u0438\u0441\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u0435\u043d \u043c\u043e\u0434. \u041a\u043b\u0438\u043a\u043d\u0438 \u0437\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043c\u043e \u0434\u0430 \u0441\u043c\u0435\u043d\u0438\u0448 \u0432\u043e \u043e\u0431\u0438\u0447\u0435\u043d \u043c\u043e\u0434.","plaintext_mode_sticky":"\u0417\u0430\u043b\u0435\u043f\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0435 \u0432\u043e \u0447\u0438\u0441\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u0435\u043d \u043c\u043e\u0434. \u041a\u043b\u0438\u043a\u043d\u0438 \u0437\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043c\u043e \u0434\u0430 \u0441\u043c\u0435\u043d\u0438\u0448 \u0432\u043e \u043e\u0431\u0438\u0447\u0435\u043d \u043c\u043e\u0434. \u041e\u0434 \u043a\u043e\u0433\u0430 \u045c\u0435 \u0437\u0430\u043b\u0435\u043f\u0438\u0442\u0435 \u045c\u0435 \u0431\u0438\u0434\u0435\u0442\u0435 \u0432\u0440\u0430\u0442\u0435\u043d\u0438\u0438 \u0432\u043e \u043e\u0431\u0438\u0447\u0435\u043d \u0437\u0430\u043b\u0435\u043f\u0443\u0432\u0430\u0447\u043a\u0438 \u043c\u043e\u0434.","selectall_desc":"\u041e\u0437\u043d\u0430\u0447\u0438 \u0441\u0435","paste_word_desc":"\u0417\u0430\u043b\u0435\u043f\u0438 \u043e\u0434 Word","paste_text_desc":"\u0417\u0430\u043b\u0435\u043f\u0438 \u043a\u0430\u043a\u043e \u043e\u0431\u0438\u0447\u0435\u043d \u0442\u0435\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 CTRL V \u043e\u0434 \u0442\u0430\u0441\u0442\u0430\u0442\u0443\u0440\u0430\u0442\u0430 \u0437\u0430 \u0434\u0430 \u0433\u043e \u0437\u0430\u043b\u0435\u043f\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u0432\u043e \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442.","text_linebreaks":"\u0417\u0430\u0434\u0440\u0436\u0438 \u0433\u0438 \u043f\u0430\u0443\u0437\u0438\u0442\u0435 \u043f\u043e\u043c\u0435\u0453\u0443 \u043b\u0438\u043d\u0438\u0438\u0442\u0435","text_title":"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 CTRL V \u043e\u0434 \u0442\u0430\u0441\u0442\u0430\u0442\u0443\u0440\u0430\u0442\u0430 \u0437\u0430 \u0434\u0430 \u0433\u043e \u0437\u0430\u043b\u0435\u043f\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u0432\u043e \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442."},table:{cell:"\u041a\u043b\u0435\u0442\u043a\u0430",col:"\u041a\u043e\u043b\u043e\u043d\u0430",row:"\u0420\u0435\u0434",del:"\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u0442\u0430\u0431\u0435\u043b\u0430","copy_row_desc":"\u041a\u043e\u043f\u0438\u0440\u0430\u0458 \u0433\u043e \u0440\u0435\u0434\u043e\u0442","cut_row_desc":"\u041e\u0434\u0441\u0435\u0447\u0438 \u0433\u043e \u0440\u0435\u0434\u043e\u0442","paste_row_after_desc":"\u0417\u0430\u043b\u0435\u043f\u0438 \u0433\u043e \u0440\u0435\u0434\u043e\u0442 \u043f\u043e\u0434","paste_row_before_desc":"\u0417\u0430\u043b\u0435\u043f\u0438 \u0433\u043e \u0440\u0435\u0434\u043e\u0442 \u043d\u0430\u0434","props_desc":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","cell_desc":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","row_desc":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0434\u043e\u0442","merge_cells_desc":"\u0421\u043f\u043e\u0458 \u0433\u0438 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435","split_cells_desc":"\u0420\u0430\u0437\u0434\u0432\u043e\u0458 \u0433\u0438 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435","delete_col_desc":"\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u043a\u043e\u043b\u043e\u043d\u0430","col_after_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 \u043a\u043e\u043b\u043e\u043d\u0430 \u0434\u0435\u0441\u043d\u043e","col_before_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 \u043a\u043e\u043b\u043e\u043d\u0430 \u043b\u0435\u0432\u043e","delete_row_desc":"\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u0440\u0435\u0434","row_after_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 \u0440\u0435\u0434 \u043f\u043e\u0434","row_before_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 \u0440\u0435\u0434 \u043d\u0430\u0434",desc:"\u041d\u043e\u0432\u0430 \u0442\u0430\u0431\u0435\u043b\u0430","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u0414\u043e\u043a\u043e\u043b\u043a\u0443 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u0435 \u0432\u0440\u0430\u045c\u0430\u045a\u0435 \u043d\u0430 \u043f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043e\u0441\u0442\u043e\u0458\u0431\u0430, \u045c\u0435 \u0458\u0430 \u0438\u0437\u0433\u0443\u0431\u0438\u0442\u0435 \u0446\u0435\u043b\u0430\u0442\u0430 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430 \u043a\u043e\u0458\u0430 \u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u043d\u043e \u0432\u043e \u0435\u0434\u0438\u0442\u043e\u0440\u043e\u0442.\n\n\u0414\u0430\u043b\u0438 \u0441\u0442\u0435 \u0441\u0438\u0433\u0443\u0440\u043d\u0438 \u0434\u0435\u043a\u0430 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u0435 \u0432\u0440\u0430\u045c\u0430\u045a\u0435 \u043d\u0430 \u043f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043e\u0441\u0442\u043e\u0458\u0431\u0430 ?","restore_content":"\u0412\u0440\u0430\u0442\u0438 \u0458\u0430 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430\u0442\u0430 \u043a\u043e\u0458\u0430 \u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u0435\u043d\u0430 \u0441\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u043e\u0442\u043e \u0441\u043d\u0438\u043c\u0430\u045a\u0435.","unload_msg":"\u041f\u0440\u043e\u043c\u0435\u043d\u0438\u0442\u0435 \u0432\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0442 \u045c\u0435 \u0431\u0438\u0434\u0430\u0442 \u0438\u0437\u0433\u0443\u0431\u0435\u043d\u0438 \u0430\u043a\u043e \u0438\u0437\u043b\u0435\u0437\u0435\u0442\u0435 \u043e\u0434 \u043e\u0432\u0430\u0430 \u0441\u0442\u0440\u0430\u043d\u0430."},fullscreen:{desc:"\u0412\u043a\u043b\u0443\u0447\u0438/\u0438\u0441\u043a\u043b\u0443\u0447\u0438 \u043f\u0440\u0438\u043a\u0430\u0436\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0446\u0435\u043b\u0438\u043e\u0442 \u0435\u043a\u0440\u0430\u043d"},media:{edit:"\u0423\u0440\u0435\u0434\u0438 \u0432\u0433\u0440\u0430\u0434\u0435\u043d\u0438 \u043c\u0435\u0434\u0438\u0443\u043c\u0438",desc:"\u0412\u043d\u0435\u0441\u0438 / \u0443\u0440\u0435\u0434\u0438 \u0432\u0433\u0440\u0430\u0434\u0435\u043d\u0438 \u043c\u0435\u0434\u0438\u0443\u043c\u0438","delta_height":"","delta_width":""},fullpage:{desc:"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0442","delta_width":"","delta_height":""},template:{desc:"\u0412\u043d\u0435\u0441\u0438 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430 \u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0442"},visualchars:{desc:"\u0412\u043a\u043b\u0443\u0447\u0438/\u0438\u0441\u043a\u043b\u0443\u0447\u0438 \u0432\u0438\u0437\u0443\u0435\u043b\u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043d\u0430 \u0437\u043d\u0430\u0446\u0438"},spellchecker:{desc:"\u0412\u043a\u043b\u0443\u0447\u0438/\u0438\u0441\u043a\u043b\u0443\u0447\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441",menu:"\u041f\u043e\u0434\u0435\u0441\u0443\u0432\u0430\u045a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438\u0442\u0435 \u0437\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441","ignore_word":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0458 \u0433\u043e \u0437\u0431\u043e\u0440\u043e\u0442","ignore_words":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0458 \u0441\u0435",langs:"\u0408\u0430\u0437\u0438\u0446\u0438",wait:"\u0412\u0435 \u043c\u043e\u043b\u0438\u043c\u0435 \u043f\u043e\u0447\u0435\u043a\u0430\u0458\u0442\u0435...",sug:"\u041f\u0440\u0435\u0434\u043b\u043e\u0437\u0438","no_sug":"\u041d\u0435\u043c\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0433","no_mpell":"\u041d\u0435 \u0435 \u043d\u0430\u0458\u0434\u0435\u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430.","learn_word":"\u041d\u0430\u0443\u0447\u0438 \u0437\u0431\u043e\u0440"},pagebreak:{desc:"\u0412\u043d\u0435\u0441\u0438 \u043f\u0430\u0443\u0437\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0438\u0442\u0435 \u0437\u0430 \u043f\u0440\u0438\u043d\u0442\u0430\u045a\u0435."},advlist:{types:"\u0422\u0438\u043f\u043e\u0432\u0438",def:"\u041f\u0440\u0435\u0432\u0437\u0435\u043c\u0435\u043d\u043e","lower_alpha":"\u041c\u0430\u043b\u0438 \u043d\u0443\u043c\u0435\u0440\u0438\u0447\u043a\u0438","lower_greek":"\u041c\u0430\u043b\u0438 \u0433\u0440\u0447\u043a\u0438","lower_roman":"\u041c\u0430\u043b\u0438 \u0440\u0438\u043c\u0441\u043a\u0438","upper_alpha":"\u0413\u043e\u043b\u0435\u043c\u0438 \u043d\u0443\u043c\u0435\u0440\u0438\u0447\u043a\u0438","upper_roman":"\u0413\u043e\u043b\u0435\u043c\u0438 \u0440\u0438\u043c\u0441\u043a\u0438",circle:"\u041a\u0440\u0443\u0433",disc:"\u0414\u0438\u0441\u043a",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442"},colors:{"333300":"\u0422\u0435\u043c\u043d\u043e \u043c\u0430\u0441\u043b\u0438\u043d\u0435\u0441\u0442\u0430","993300":"\u0418\u0437\u0433\u043e\u0440\u0435\u043d\u043e \u043f\u043e\u0440\u0442\u043e\u043a\u0430\u043b\u043e\u0432\u0430","000000":"\u0426\u0440\u043d\u0430","003300":"\u0422\u0435\u043c\u043d\u043e \u0437\u0435\u043b\u0435\u043d\u0430","003366":"\u0422\u0435\u043c\u043d\u043e \u0441\u0438\u043d\u0430","000080":"\u041c\u043e\u0440\u043d\u0430\u0440\u0441\u043a\u043e \u0441\u0438\u043d\u0430","333399":"\u0418\u043d\u0434\u0438\u0433\u043e","333333":"\u0422\u0435\u043c\u043d\u043e \u0441\u0438\u0432\u0430","800000":"\u0426\u0440\u0432\u0435\u043d\u043e-\u043a\u0430\u0444\u0435\u043d\u0430",FF6600:"\u041f\u043e\u0440\u0442\u043e\u043a\u0430\u043b\u043e\u0432\u0430","808000":"\u041c\u0430\u0441\u043b\u0438\u043d\u0430\u0441\u0442\u0430","008000":"\u0417\u0435\u043b\u0435\u043d\u0430","008080":"\u0421\u0430\u0444\u0438\u0440\u043d\u043e \u0441\u0438\u043d\u0430","0000FF":"\u0421\u0438\u043d\u0430","666699":"\u0421\u0438\u0432\u043e \u0441\u0438\u043d\u0430","808080":"\u0421\u0438\u0432\u0430",FF0000:"\u0426\u0440\u0432\u0435\u043d\u0430",FF9900:"\u0411\u0430\u043a\u0430\u0440\u043d\u043e-\u0436\u043e\u043b\u0442\u0430 (\u0430\u043c\u0431\u0435\u0440)","99CC00":"\u0416\u043e\u043b\u0442\u043e-\u0437\u0435\u043b\u0435\u043d\u0430","339966":"\u041c\u043e\u0440\u0441\u043a\u043e \u0437\u0435\u043b\u0435\u043d\u0430","33CCCC":"\u0422\u0438\u0440\u043a\u0438\u0437\u043d\u0430","3366FF":"\u041a\u0440\u0430\u043b\u0441\u043a\u043e \u0441\u0438\u043d\u0430","800080":"\u041f\u0443\u0440\u043f\u0443\u0440\u043d\u0430","999999":"\u0421\u0440\u0435\u0434\u043d\u043e \u0441\u0438\u0432\u0430",FF00FF:"\u041c\u0430\u0433\u0435\u043d\u0442\u0430 (\u0440\u043e\u0437\u0435\u0432\u0430)",FFCC00:"\u0417\u043b\u0430\u0442\u043d\u0430",FFFF00:"\u0416\u043e\u043b\u0442\u0430","00FF00":"\u0417\u0435\u043b\u0435\u043d\u0430 (\u043b\u0430\u0458\u043c)","00FFFF":"\u0412\u043e\u0434\u0435\u043d\u043e \u0441\u0438\u043d\u0430","00CCFF":"\u041d\u0435\u0431\u0435\u0441\u043a\u043e \u0441\u0438\u043d\u0430","993366":"\u041a\u0430\u0444\u0435\u043d\u0430",C0C0C0:"\u0421\u0440\u0435\u0431\u0440\u0435\u043d\u0430",FF99CC:"\u0420\u043e\u0437\u0435\u0432\u0430",FFCC99:"\u041a\u0430\u0458\u0441\u0438\u0458\u0430",FFFF99:"\u0421\u0432\u0435\u0442\u043b\u043e \u0436\u043e\u043b\u0442\u0430",CCFFCC:"\u0411\u043b\u0435\u0434\u043e \u0437\u0435\u043b\u0435\u043d\u0430",CCFFFF:"\u0411\u043b\u0435\u0434\u0430 \u0446\u0438\u0458\u0430\u043d","99CCFF":"\u0421\u0432\u0435\u0442\u043b\u043e \u043d\u0435\u0431\u0435\u0441\u043a\u043e \u0441\u0438\u043d\u0430",CC99FF:"\u0421\u043b\u0438\u0432\u0430",FFFFFF:"\u0411\u0435\u043b\u0430"},aria:{"rich_text_area":"\u0417\u0431\u043e\u0433\u0430\u0442\u0435\u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u043d\u0430 \u043f\u043e\u0432\u0440\u0448\u0438\u043d\u0430"},wordcount:{words:"\u0417\u0431\u043e\u0440\u043e\u0432\u0438:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ml.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ml.js
new file mode 100644
index 000000000..e4fb9fd69
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ml.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ml:{common:{"more_colors":"\u0d15\u0d42\u0d1f\u0d41\u0d24\u0d32\u0d4d\u200d \u0d28\u0d3f\u0d31\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d","invalid_data":"\u0d2a\u0d3f\u0d34\u0d35\u0d41\u0d4d: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"\u0d2e\u0d41\u0d31\u0d3f\u0d15\u0d4d\u0d15\u0d32\u0d4d\u200d/\u0d2a\u0d15\u0d30\u0d4d\u200d\u0d24\u0d4d\u0d24\u0d32\u0d4d\u200d/\u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d32\u0d4d\u200d \u0d0e\u0d28\u0d4d\u0d28\u0d3f\u0d35 \'\u0d2e\u0d4b\u0d38\u0d3f\u0d32\u0d4d\u0d32\'\u0d2f\u0d3f\u0d32\u0d41\u0d02 \'\u0d2b\u0d2f\u0d30\u0d4d\u200d\u0d2b\u0d4b\u0d15\u0d4d\u0d38\u0d4d\'\u0d32\u0d41\u0d02 \u0d32\u0d2d\u0d4d\u0d2f\u0d2e\u0d32\u0d4d\u0d32. \u200c\n\u0d24\u0d3e\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41 \u0d07\u0d24\u0d3f\u0d28\u0d46 \u0d15\u0d41\u0d31\u0d3f\u0d1a\u0d4d\u0d1a\u0d41\u0d4d \u0d15\u0d42\u0d1f\u0d41\u0d24\u0d32\u0d4d\u200d \u0d05\u0d31\u0d3f\u0d2f\u0d23\u0d4b ?","not_set":"-- Not set --","class_name":"\u0d24\u0d30\u0d02",browse:"\u0d2e\u0d47\u0d2f\u0d41\u0d15",close:"\u0d05\u0d1f\u0d15\u0d4d\u0d15\u0d41\u0d15",cancel:"\u0d35\u0d47\u0d23\u0d4d\u0d1f\u0d46\u0d28\u0d4d\u0d28\u0d41\u0d35\u0d46\u0d15\u0d4d\u0d15\u0d15",update:"\u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d02 \u0d35\u0d30\u0d41\u0d24\u0d4d\u0d24\u0d41\u0d15",insert:"\u0d24\u0d3f\u0d30\u0d41\u0d15\u0d41\u0d15",apply:"\u0d2a\u0d4d\u0d30\u0d2f\u0d4b\u0d17\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15","edit_confirm":"\u0d08 \u0d0e\u0d34\u0d41\u0d24\u0d4d\u0d24\u0d3f\u0d1f\u0d02 \u0d15\u0d3e\u0d23\u0d41\u0d02\u0d35\u0d3f\u0d27\u0d02 \u0d0e\u0d34\u0d41\u0d24\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d23\u0d4b ?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"\u0d1e\u0d3e, \u0d24\u0d3f, \u0d1a\u0d4a, \u0d2c\u0d41, \u0d35\u0d4d\u0d2f\u0d3e, \u0d35\u0d46, \u0d36, \u0d1e\u0d3e","day_long":"\u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d, \u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d, \u0d1a\u0d4a\u0d35\u0d4d\u0d35, \u0d2c\u0d41\u0d27\u0d28\u0d4d\u200d, \u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02, \u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f, \u0d36\u0d28\u0d3f, \u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d","months_short":"\u0d1c\u0d28\u0d41, \u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41, \u0d2e\u0d3e\u0d30\u0d4d\u200d, \u0d0f\u0d2a\u0d4d\u0d30\u0d3f, \u0d2e\u0d46, \u0d1c\u0d41\u0d23\u0d4d\u200d, \u0d1c\u0d42\u0d32\u0d3e, \u0d06\u0d17, \u0d38\u0d46\u0d2a\u0d4d\u0d24\u0d02, \u0d12\u0d15\u0d4d\u0d1f\u0d4b, \u0d28\u0d35\u0d02, \u0d21\u0d3f\u0d38\u0d02","months_long":"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f, \u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f, \u0d2e\u0d3e\u0d30\u0d4d\u200d\u0d1a\u0d4d\u0d1a\u0d41\u0d4d, \u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d\u200d, \u0d2e\u0d46\u0d2f\u0d4d, \u0d1c\u0d41\u0d23\u0d4d\u200d, \u0d1c\u0d42\u0d32\u0d3e\u0d2f\u0d4d, \u0d06\u0d17\u0d38\u0d4d\u0d24\u0d4d, \u0d38\u0d46\u0d2a\u0d4d\u0d24\u0d02\u0d2c\u0d30\u0d4d\u200d, \u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d\u200d, \u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d\u200d, \u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d\u200d","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"\u0d26\u0d43\u0d36\u0d4d\u0d2f \u0d28\u0d3f\u0d2f\u0d28\u0d4d\u0d24\u0d4d\u0d30\u0d23 \u0d05\u0d15\u0d4d\u0d37\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d \u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d41\u0d15."},spellchecker:{desc:"\u0d05\u0d15\u0d4d\u0d37\u0d30\u0d2a\u0d30\u0d3f\u0d36\u0d4b\u0d27\u0d28 \u0d28\u0d3f\u0d2f\u0d28\u0d4d\u0d24\u0d4d\u0d30\u0d23\u0d02",menu:"\u0d05\u0d15\u0d4d\u0d37\u0d30\u0d2a\u0d30\u0d3f\u0d36\u0d4b\u0d27\u0d28\u0d3e \u0d15\u0d4d\u0d30\u0d2e\u0d40\u0d15\u0d30\u0d23\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d","ignore_word":"\u0d35\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d4d \u0d05\u0d35\u0d17\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42","ignore_words":"\u0d0e\u0d32\u0d4d\u0d32\u0d3e\u0d02 \u0d05\u0d35\u0d17\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42",langs:"\u0d2d\u0d3e\u0d37\u0d15\u0d33\u0d4d\u200d",wait:"\u0d26\u0d2f\u0d35\u0d3e\u0d2f\u0d3f \u0d15\u0d3e\u0d24\u0d4d\u0d24\u0d41\u0d28\u0d3f\u0d32\u0d4d\u0d15\u0d41...",sug:"\u0d05\u0d2d\u0d3f\u0d2a\u0d4d\u0d30\u0d3e\u0d2f\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d","no_sug":"\u0d05\u0d2d\u0d3f\u0d2a\u0d4d\u0d30\u0d3e\u0d2f\u0d2e\u0d3f\u0d32\u0d4d\u0d32","no_mpell":"\u0d05\u0d15\u0d4d\u0d37\u0d30\u0d24\u0d4d\u0d24\u0d46\u0d31\u0d4d\u0d31\u0d3f\u0d32\u0d4d\u0d32.","learn_word":"Learn word"},pagebreak:{desc:"\u0d2a\u0d47\u0d1c\u0d41\u0d4d \u0d24\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/mn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/mn.js
new file mode 100644
index 000000000..36bb699da
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/mn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({mn:{common:{"more_colors":"\u0411\u0443\u0441\u0430\u0434 \u04e9\u043d\u0433\u04e9","invalid_data":"\u0410\u043b\u0434\u0430\u0430: \u0422\u0430 \u0445\u04af\u0447\u0438\u043d\u0433\u04af\u0439 \u0443\u0442\u0433\u0430 \u043e\u0440\u0443\u0443\u043b\u0441\u0430\u043d. (\u0443\u043b\u0430\u0430\u043d\u0430\u0430\u0440 \u0442\u044d\u043c\u0434\u044d\u0433\u043b\u044d\u0441\u044d\u043d).","popup_blocked":"\u0425\u0430\u0440\u0430\u043c\u0441\u0430\u043b\u0442\u0430\u0439 \u043d\u044c \u0442\u0430\u043d\u044b \u043f\u043e\u043f\u0430\u043f \u0445\u0430\u0430\u043b\u0442 \u044d\u043d\u044d \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0434 \u0448\u0430\u0430\u0440\u0434\u043b\u0430\u0433\u0430\u0442\u0430\u0439 \u0446\u043e\u043d\u0445\u044b\u0433 \u0445\u0430\u0430\u043b\u0430\u0430. \u0411\u04af\u0440\u044d\u043d \u0434\u04af\u04af\u0440\u044d\u043d \u0430\u0436\u0438\u043b\u043b\u0430\u0433\u0430\u0430\u0433 \u0445\u0430\u043d\u0433\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u0432\u044d\u043b \u043f\u043e\u043f\u0430\u043f \u0445\u0430\u0430\u043b\u0442\u0430\u0430 \u0438\u0434\u044d\u0432\u0445\u0433\u04af\u0439\u0436\u04af\u04af\u043b\u043d\u044d \u04af\u04af.","clipboard_no_support":"\u041e\u0434\u043e\u043e\u0433\u043e\u043e\u0440 \u0442\u0430\u043d\u044b \u0445\u04e9\u0442\u04e9\u0447 \u0434\u044d\u044d\u0440 \u0434\u044d\u043c\u0436\u0438\u0433\u0434\u044d\u044d\u0433\u04af\u0439 \u0431\u0430\u0439\u043d\u0430. \u0422\u0430 \u04af\u04af\u043d\u0438\u0439 \u043e\u0440\u043e\u043d\u0434 \u0442\u043e\u0432\u0447\u0438\u043b\u0431\u043e\u0440 \u0445\u044d\u0440\u044d\u0433\u043b\u044d\u043d\u044d \u04af\u04af.","clipboard_msg":"\u0425\u0443\u0443\u043b\u0430\u0445, \u0442\u0430\u0441\u043b\u0430\u043d \u0430\u0432\u0430\u0445 \u0431\u0443\u0443\u043b\u0433\u0430\u0445 \u043d\u044c \u041c\u043e\u0437\u0438\u043b\u043b\u0430 \u0424\u0430\u0439\u0440\u0444\u043e\u043a\u0441 \u0434\u044d\u044d\u0440 \u0431\u043e\u043b\u043e\u043c\u0436\u0433\u04af\u0439.\n\u0422\u0430 \u044d\u043d\u044d \u0430\u0441\u0443\u0443\u0434\u043b\u044b\u043d \u0442\u0430\u043b\u0430\u0430\u0440 \u0434\u044d\u043b\u0433\u044d\u0440\u044d\u043d\u0433\u04af\u0439 \u043c\u044d\u0434\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","not_set":"-- \u041e\u043b\u0433\u043e\u0433\u0434\u043e\u043e\u0433\u04af\u0439 --","class_name":"\u0410\u043d\u0433\u0438",browse:"\u0413\u04af\u0439\u043b\u0433\u044d\u043d \u04af\u0437\u044d\u0445",close:"\u0425\u0430\u0430\u0445",cancel:"\u0426\u0443\u0446\u043b\u0430\u0445",update:"\u0428\u0438\u043d\u044d\u0447\u043b\u044d\u0445",insert:"\u041e\u0440\u0443\u0443\u043b\u0430\u0445",apply:"\u0425\u044d\u0440\u044d\u0433\u043b\u044d\u0445","edit_confirm":"\u0422\u0430 \u044d\u043d\u044d \u0431\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u043c\u0443\u0436\u0438\u0439\u0433 WYSIWYG \u0437\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u0422\u044d\u0433\u0448\u0438\u043b\u0441\u044d\u043d",right:"\u0411\u0430\u0440\u0443\u0443\u043d",center:"\u0414\u0443\u043d\u0434",left:"\u0417\u04af\u04af\u043d",align:"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442"},insertdatetime:{"day_short":"\u041d\u044f,\u0414\u0430,\u041c\u044f,\u041b\u0445,\u041f\u04af,\u0411\u0430,\u0411\u044f,\u041d\u044f","day_long":"\u041d\u044f\u043c,\u0414\u0430\u0432\u0430\u0430,\u041c\u044f\u0433\u043c\u0430\u0440,\u041b\u0445\u0430\u0433\u0432\u0430,\u041f\u04af\u0440\u044d\u0432,\u0411\u0430\u0430\u0441\u0430\u043d,\u0411\u044f\u043c\u0431\u0430,\u041d\u044f\u043c","months_short":"\u0425\u0443\u043b,\u04ae\u0445\u044d,\u0411\u0430\u0440,\u0422\u0443\u0443,\u041b\u0443\u0443,\u041c\u043e\u0433,\u041c\u043e\u0440,\u0425\u043e\u043d,\u0411\u0438\u0447,\u0422\u0430\u0445,\u041d\u043e\u0445,\u0413\u0430\u0445","months_long":"\u0425\u0443\u043b\u0433\u0430\u043d\u0430,\u04ae\u0445\u044d\u0440,\u0411\u0430\u0440,\u0422\u0443\u0443\u043b\u0430\u0439,\u041b\u0443\u0443,\u041c\u043e\u0433\u043e\u0439,\u041c\u043e\u0440\u044c,\u0425\u043e\u043d\u044c,\u0411\u0438\u0447,\u0422\u0430\u0445\u0438\u0430,\u041d\u043e\u0445\u043e\u0439,\u0413\u0430\u0445\u0430\u0439","inserttime_desc":"\u0425\u0443\u0433\u0430\u0446\u0430\u0430 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","insertdate_desc":"\u041e\u0433\u043d\u043e\u043e \u043e\u0440\u0443\u0443\u043b\u0430\u0445","time_fmt":"%H:%M:%S","date_fmt":"%Y.%m.%d"},print:{"print_desc":"\u0425\u044d\u0432\u043b\u044d\u0445"},preview:{"preview_desc":"\u041d\u044f\u0433\u0442\u043b\u0430\u0445"},directionality:{"rtl_desc":"\u0411\u0430\u0440\u0443\u0443\u043d \u0437\u04af\u04af\u043d \u0431\u0438\u0447\u0438\u043b\u0442","ltr_desc":"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d \u0431\u0438\u0447\u0438\u043b\u0442"},layer:{content:"\u0428\u0438\u043d\u044d \u0434\u0430\u0432\u0445\u0430\u0440\u0433\u0430...","absolute_desc":"\u0410\u0431\u0441\u043e\u043b\u044e\u0442 \u0431\u0430\u0439\u0440\u0448\u0443\u0443\u043b\u0430\u043b\u0442","backward_desc":"\u0426\u0430\u0430\u0448\u043b\u0443\u0443\u043b\u0430\u0445","forward_desc":"\u041d\u0430\u0430\u0448\u043b\u0443\u0443\u043b\u0430\u0445","insertlayer_desc":"\u0428\u0438\u043d\u044d \u0434\u0430\u0432\u0445\u0430\u0440\u0433\u0430 \u043e\u0440\u0443\u0443\u043b\u0430\u0445"},save:{"save_desc":"\u0425\u0430\u0434\u0433\u0430\u043b\u0430\u0445","cancel_desc":"\u0411\u04af\u0445 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u043b\u0442\u0438\u0439\u0433 \u0445\u0430\u044f\u0445"},nonbreaking:{"nonbreaking_desc":"\u0425\u0430\u043c\u0433\u0430\u0430\u043b\u0430\u043b\u0442\u0442\u0430\u0439 \u0445\u043e\u043e\u0441\u043e\u043d \u0437\u0430\u0439 \u043e\u0440\u0443\u0443\u043b\u0430\u0445"},iespell:{download:"ieSpell \u043e\u043b\u0434\u0441\u043e\u043d\u0433\u04af\u0439. \u0422\u0430 \u0441\u0443\u0443\u043b\u0433\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","iespell_desc":"\u0414\u04af\u0440\u043c\u0438\u0439\u043d \u0430\u043b\u0434\u0430\u0430 \u0448\u0430\u043b\u0433\u0430\u043b\u0442"},advhr:{"advhr_desc":"\u0422\u0443\u0441\u0433\u0430\u0430\u0440\u043b\u0430\u0433\u0447","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0421\u044d\u0442\u0433\u044d\u043b \u0445\u04e9\u0434\u043b\u04e9\u043b","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0425\u0430\u0439\u0445/\u043e\u0440\u043b\u0443\u0443\u043b\u0430\u0445","search_desc":"\u0425\u0430\u0439\u0445","delta_width":"","delta_height":""},advimage:{"image_desc":"\u0417\u0443\u0440\u0430\u0433 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u043e\u0440\u043b\u0443\u0443\u043b\u0430\u0445","delta_width":"","delta_height":""},advlink:{"link_desc":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0430\u0445","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0430\u0445","ins_desc":"\u041e\u0440\u0441\u043e\u043d \u0431\u0438\u0447\u0432\u044d\u0440","del_desc":"\u0423\u0441\u0442\u0441\u0430\u043d \u0431\u0438\u0447\u0432\u044d\u0440 Text","acronym_desc":"\u0422\u043e\u0432\u0447\u0438\u043b\u0441\u043e\u043d \u04af\u0433","abbr_desc":"\u0422\u043e\u0432\u0447\u043b\u043e\u043b","cite_desc":"\u0418\u0448\u043b\u044d\u043b","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS-Styles \u0437\u0430\u0441\u0430\u0445","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u0411\u04af\u0433\u0434\u0438\u0439\u0433 \u0441\u043e\u043d\u0433\u043e\u0445","paste_word_desc":"\u0425\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442\u0442\u044d\u0439 \u0431\u0443\u0443\u043b\u0433\u0430\u0445 (Word-\u0441)","paste_text_desc":"\u042d\u043d\u0433\u0438\u0439\u043d \u0431\u0438\u0447\u0432\u044d\u0440\u044d\u044d\u0440 \u0431\u0443\u0443\u043b\u0433\u0430\u0445","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u0422\u0430 \u0431\u0438\u0447\u0432\u044d\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u0432\u044d\u043b Ctrl+V \u0434\u044d\u044d\u0440 \u0434\u0430\u0440\u043d\u0430 \u0443\u0443.","text_linebreaks":"\u041c\u04e9\u0440 \u0442\u0430\u0441\u043b\u0430\u043b\u0442\u044b\u0433 \u04af\u043b\u0434\u044d\u044d\u043d\u044d","text_title":"\u0422\u0430 \u0431\u0438\u0447\u0432\u044d\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u0432\u044d\u043b Ctrl+V \u0434\u044d\u044d\u0440 \u0434\u0430\u0440\u043d\u0430 \u0443\u0443."},table:{cell:"\u041d\u04af\u0434",col:"\u0411\u0430\u0433\u0430\u043d\u0430",row:"\u041c\u04e9\u0440",del:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442 \u0443\u0441\u0442\u0433\u0430\u0445","copy_row_desc":"\u041c\u04e9\u0440 \u0445\u0443\u0443\u043b\u0430\u0445","cut_row_desc":"\u041c\u04e9\u0440 \u0442\u0430\u0441\u0434\u0430\u0436 \u0430\u0432\u0430\u0445 \u0443\u0443?","paste_row_after_desc":"\u0417\u0430\u0432\u0441\u0440\u044b\u043d \u0445\u0430\u0434\u0433\u0430\u043b\u0430\u0433\u0447\u0430\u0430\u0441 \u043c\u04e9\u0440\u0438\u0439\u0433 \u0434\u043e\u043e\u0440 \u043d\u044c \u0431\u0443\u0443\u043b\u0433\u0430\u0445","paste_row_before_desc":"\u0417\u0430\u0432\u0441\u0440\u044b\u043d \u0445\u0430\u0434\u0433\u0430\u043b\u0430\u0433\u0447\u0430\u0430\u0441 \u043c\u04e9\u0440\u0438\u0439\u0433 \u0434\u044d\u044d\u0440 \u043d\u044c \u0431\u0443\u0443\u043b\u0433\u0430\u0445","props_desc":"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0448\u0438\u043d\u0436\u04af\u04af\u0434","cell_desc":"\u041d\u04af\u0434\u043d\u0438\u0439 \u0448\u0438\u043d\u0436\u04af\u04af\u0434","row_desc":"\u041c\u04e9\u0440\u0438\u0439\u043d \u0448\u0438\u043d\u0436\u04af\u04af\u0434","merge_cells_desc":"\u041d\u04af\u0434 \u043d\u044d\u0433\u0442\u0433\u044d\u0445","split_cells_desc":"\u041d\u044d\u0433\u0442\u0433\u044d\u0441\u044d\u043d \u043d\u04af\u0434\u0438\u0439\u0433 \u0441\u0430\u043b\u0433\u0430\u0445","delete_col_desc":"\u0411\u0430\u0433\u0430\u043d\u0430 \u0443\u0441\u0442\u0433\u0430\u0445","col_after_desc":"\u0411\u0430\u0440\u0443\u0443\u043d \u0442\u0430\u043b\u0434 \u043d\u044c \u0431\u0430\u0433\u0430\u043d\u0430 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","col_before_desc":"\u0417\u04af\u04af\u043d \u0442\u0430\u043b\u0434 \u043d\u044c \u0431\u0430\u0433\u0430\u043d\u0430 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","delete_row_desc":"\u041c\u04e9\u0440 \u0443\u0441\u0442\u0433\u0430\u0445","row_after_desc":"\u0414\u043e\u043e\u0440 \u043d\u044c \u043c\u04e9\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","row_before_desc":"\u0414\u044d\u044d\u0440 \u043d\u044c \u043c\u04e9\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445",desc:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442 \u04af\u04af\u0441\u0433\u044d\u0445","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u0425\u044d\u0440\u044d\u0432 \u0442\u0430 \u0445\u0443\u0443\u0434\u0441\u044b\u0433 \u043e\u0440\u0445\u0438\u0432\u043e\u043b \u0442\u0430\u043d\u044b \u04e9\u04e9\u0440\u0447\u043b\u04e9\u043b\u0442\u04af\u04af\u0434 \u0445\u0430\u044f\u0433\u0434\u0430\u043d\u0430.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u0414\u044d\u043b\u0433\u044d\u0446 \u0434\u04af\u04af\u0440\u044d\u043d"},media:{edit:"\u041c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u0448\u0438\u0433\u0442\u0433\u044d\u044d \u0437\u0430\u0441\u0430\u0445",desc:"\u041c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u0448\u0438\u0433\u0442\u0433\u044d\u0445/\u0437\u0430\u0441\u0430\u0445","delta_height":"","delta_width":""},fullpage:{desc:"\u0411\u0430\u0440\u0438\u043c\u0442\u044b\u043d \u0442\u043e\u0434\u0440\u0443\u0443\u043b\u0433\u0430","delta_width":"","delta_height":""},template:{desc:"\u04e8\u043c\u043d\u04e9 \u0431\u044d\u043b\u0442\u0433\u044d\u0441\u044d\u043d \u0445\u044d\u0432\u0438\u0439\u043d \u0430\u0433\u0443\u0443\u043b\u0433\u044b\u0433 \u0431\u0443\u0443\u043b\u0433\u0430\u0445"},visualchars:{desc:"\u0423\u0434\u0438\u0440\u0434\u0430\u0445 \u0442\u044d\u043c\u0434\u044d\u0433\u0442 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445/\u044d\u0441 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445."},spellchecker:{desc:"\u0414\u04af\u0440\u043c\u0438\u0439\u043d \u0430\u043b\u0434\u0430\u0430 \u0448\u0430\u043b\u0433\u0430\u0433\u0447 \u043d\u044d\u044d\u043b\u0442\u0442\u044d\u0439/\u0445\u0430\u0430\u043b\u0442\u0442\u0430\u0439",menu:"\u0414\u04af\u0440\u043c\u0438\u0439\u043d \u0430\u043b\u0434\u0430\u0430 \u0448\u0430\u043b\u0433\u0430\u0433\u0447\u0438\u0439\u043d \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","ignore_word":"\u04ae\u0433 \u04af\u043b \u0445\u044d\u0440\u044d\u0433\u0441\u044d\u0445","ignore_words":"\u0411\u04af\u0433\u0434\u0438\u0439\u0433 \u04af\u043b \u0445\u044d\u0440\u044d\u0433\u0441\u044d\u0445",langs:"\u0425\u044d\u043b",wait:"\u0422\u04af\u0440 \u0445\u04af\u043b\u044d\u044d\u043d\u044d \u04af\u04af...",sug:"\u0421\u0430\u043d\u0430\u043b","no_sug":"\u0421\u0430\u043d\u0430\u043b \u0430\u043b\u0433\u0430","no_mpell":"\u0414\u04af\u0440\u043c\u0438\u0439\u043d \u0430\u043b\u0434\u0430\u0430 \u043e\u043b\u0434\u0441\u043e\u043d\u0433\u04af\u0439.","learn_word":"Learn word"},pagebreak:{desc:"\u0425\u0443\u0443\u0434\u0430\u0441 \u0442\u0430\u0441\u043b\u0430\u043b\u0442 \u043e\u0440\u0443\u0443\u043b\u0430\u0445."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ms.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ms.js
new file mode 100644
index 000000000..667c2056a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ms.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ms:{common:{"more_colors":"Warna lain-lain","invalid_data":"Ralat: Nilai dimasukkan tidak sah, lihat tanda merah.","popup_blocked":"Maaf, kami dapati \"popup-blocker\" telah melumpuhkan tetingkap yang memberikan fungsi kepada perisian anda. Anda perlu mematikan \"popup-blocker\" untuk laman web ini bagi menggunakan semua alatan.","clipboard_no_support":"Perisian browser anda tidak disokong pada masa ini, sila guna papan kekunci.","clipboard_msg":"Salin/Potong/Tempel tidak disediakan untuk Mozilla dan Firefox.\nAdakah anda mahu informasi lanjut tentang isu ini?","not_set":"-- Tidak set --","class_name":"Kelas",browse:"Semak seimbas",close:"Tutup",cancel:"Batal",update:"Kemaskini",insert:"Sisip",apply:"Guna","edit_confirm":"Guna WYSIWYG mod untuk \"textarea\" ini?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Penuh",right:"Kanan",center:"Tengah",left:"Kiri",align:"Penyelarian"},insertdatetime:{"day_short":"Aha,Isn,Sel,Rab,Kha,Jum,Sab,Aha","day_long":"Ahad,Isnin,Selasa,Rabu,Khamis,Jumaat,Sabtu,Ahad","months_short":"Jan,Feb,Mac,Apr,Mei,Jun,Jul,Ogo,Sep,Okt,Nov,Dis","months_long":"Januari,Febuari,Mac,April,Mei,Jun,Julai,Ogos,September,Oktober,November,Disember","inserttime_desc":"Sisip masa","insertdate_desc":"Sisip tarikh","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Cetak"},preview:{"preview_desc":"Pratonton"},directionality:{"rtl_desc":"Arah kanan ke kiri","ltr_desc":"Arah kiri ke kanan"},layer:{content:"Lapisan baru...","absolute_desc":"Alih posisi mutlak","backward_desc":"Gerak kebelakang","forward_desc":"Gerak kehadapan","insertlayer_desc":"Sisip lapisan baru"},save:{"save_desc":"Simpan","cancel_desc":"Batal semua pertukaran"},nonbreaking:{"nonbreaking_desc":"Masukkan aksara ruang [nbsp]"},iespell:{download:"ieSpell tiada. Pasang sekarang?","iespell_desc":"Larikan pembetulan ejaan"},advhr:{"advhr_desc":"Garis mengufuk","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Simbol Emosi","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Cari/Ganti","search_desc":"Cari","delta_width":"","delta_height":""},advimage:{"image_desc":"Sisip/sunting imej","delta_width":"","delta_height":""},advlink:{"link_desc":"Sisip/sunting pautan","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Masukkan/Sunting Ciri-ciri","ins_desc":"Kemasukan","del_desc":"Pemadaman","acronym_desc":"Akronim","abbr_desc":"Singkatan","cite_desc":"Kutipan","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Sunting Gaya CSS","delta_height":"","delta_width":""},paste:{"selectall_desc":"Pilih semua","paste_word_desc":"Tempel dari Word","paste_text_desc":"Tempel sebagai teks","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Guna CTRL+V pada papan kekunci anda untuk teks ke dalam tetingkap.","text_linebreaks":"Biarkan garisan pemisah","text_title":"Guna CTRL+V pada papan kekunci anda untuk Tempel teks ke dalam tetingkap."},table:{cell:"Sel",col:"Kolum",row:"Row",del:"Padam jadual","copy_row_desc":"Salin jadual row","cut_row_desc":"Potong jadual row","paste_row_after_desc":"Tempel jadual row selepasnya","paste_row_before_desc":"Tempel jadual row sebelumnya","props_desc":"Alatan jadual","cell_desc":"Alatan jadual sel","row_desc":"Alatan jadual row","merge_cells_desc":"Gabung sel jadual","split_cells_desc":"Bahagi sel jadual","delete_col_desc":"Alih kolum","col_after_desc":"Masukkan kolum selepasnya","col_before_desc":"Masukkan kolum sebelumnya","delete_row_desc":"Padam row","row_after_desc":"Masukkan row selepasnya","row_before_desc":"Masukkan row sebelumnya",desc:"Masukkan jadual baru","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"Pertukaran akan terbatal sekiranya anda meninggalkan halaman ini.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Alih mod skrin penuh"},media:{edit:"Sunting media",desc:"Masukkan / sunting media","delta_height":"","delta_width":""},fullpage:{desc:"Alatan dokumen","delta_width":"","delta_height":""},template:{desc:"Masukkan pra takrifan kandungan templet"},visualchars:{desc:"Pengendali grafik huruf Buka/Tutup."},spellchecker:{desc:"Alih pembetul perkataan",menu:"Alatan pembetul perkataan","ignore_word":"Endahkan perkataan","ignore_words":"Endahkan kesemuanya",langs:"Bahasa-bahasa",wait:"Sila tunggu...",sug:"Cadangan","no_sug":"Tiada cadangan","no_mpell":"Tiada kesalahan ejaan.","learn_word":"Learn word"},pagebreak:{desc:"Masukkan penghenti-halaman."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/my.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/my.js
new file mode 100644
index 000000000..60a49a972
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/my.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({my:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u1021\u103c\u1015\u100a\u103a\u1037",right:"\u100a\u102c",center:"\u1021\u101c\u101a\u103a",left:"\u1018\u101a\u103a",align:"\u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"\u1010\u1014\u1002\u1004\u103a\u1039\u1031\u1014\u103d,\u1010\u1014\u101c\u1004\u103a\u1039\u102c,\u1021\u1002\u1004\u103a\u1039\u102b,\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038,\u103c\u1000\u102c\u101e\u1015\u1031\u1010\u1038,\u1031\u101e\u102c\u103c\u1000\u102c,\u1005\u1031\u1014,\u1010\u1014\u1002\u1004\u103a\u1039\u1031\u1014\u103d","months_short":"\u1007\u1014\u103a,\u1031\u1016,\u1019\u1010\u103a,\u1027\u103c\u1015\u102e,\u1031\u1019,\u1007\u103d\u1014\u103a,\u1007\u1030,\u1029,\u1005\u1000\u103a,\u1031\u1021\u102c\u1000\u103a,\u1014\u102d\u102f\u101d\u1004\u103a,\u1012\u102e\u1007\u1004\u103a","months_long":"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e,\u1031\u1016\u1031\u1016\u102c\u103a\u101d\u102b\u101b\u102e,\u1019\u1010\u103a,\u1027\u103c\u1015\u102e,\u1031\u1019,\u1007\u103d\u1014\u103a,\u1007\u1030\u101c\u102d\u102f\u1004\u103a,\u1029\u1002\u102f\u1010\u103a,\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c,\u1031\u1021\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c,\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c,\u1012\u102e\u1007\u1004\u103a\u1018\u102c","inserttime_desc":"\u1021\u1001\u103b\u102d\u1014\u103a\u1014\u102c\u101b\u102e \u1011\u100a\u103a\u1037\u1015\u102b","insertdate_desc":"\u1031\u1014\u1037\u1005\u103d\u1032\u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u1015\u102b","time_fmt":"%H \u1014\u102c\u101b\u102e : %M \u1019\u102d\u1014\u1005\u103a : %S \u1005\u1000\u1039\u1000\u1014\u103a\u1037","date_fmt":"%Y-\u1001\u102f\u1014\u103e\u1005\u103a\u104a %B\u101c\u104a %d-\u101b\u1000\u103a\u1031\u1014\u1037"},print:{"print_desc":"\u1015\u1036\u102f\u1014\u103e\u102d\u1015\u103a"},preview:{"preview_desc":"\u1021\u1005\u1019\u103a\u1038\u103c\u1000\u100a\u103a\u1037"},directionality:{"rtl_desc":"\u100a\u102c\u1019\u103e \u1018\u101a\u103a\u101e\u102d\u102f\u1037 \u1025\u102e\u1038\u1010\u100a\u103a","ltr_desc":"\u1018\u101a\u103a\u1019\u103e \u100a\u102c\u101e\u102d\u102f\u1037 \u1025\u102e\u1038\u1010\u100a\u103a"},layer:{content:"\u1031\u101c\u101a\u102c \u1021\u101c\u103d\u103e\u102c\u101e\u1005\u103a...","absolute_desc":"Absolute positioning \u1000\u102d\u102f \u1016\u103d\u1004\u103a\u1037/\u1015\u102d\u1010\u103a","backward_desc":"\u1031\u1014\u102c\u1000\u103a\u1015\u102d\u102f\u1004\u103a\u1038\u101e\u102d\u102f\u1037\u1031\u101b\u103d\u103e\u1037\u1015\u102b","forward_desc":"\u1019\u103b\u1000\u103a\u1014\u103e\u102c\u1005\u102c\u101e\u102d\u102f\u1037\u1031\u101b\u103d\u103e\u1037\u1015\u102b","insertlayer_desc":"\u1031\u101c\u101a\u102c\u1021\u101c\u103d\u103e\u102c\u101e\u1005\u103a\u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u1015\u102b"},save:{"save_desc":"\u101e\u102d\u1019\u103a\u1038","cancel_desc":"\u1021\u1031\u103c\u1015\u102c\u1004\u103a\u1038\u1021\u101c\u1032\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1015\u101a\u103a\u1016\u103b\u1000\u103a"},nonbreaking:{"nonbreaking_desc":"Non-breaking Space \u1021\u1000\u1039\u1001\u101b\u102c\u1000\u102d\u102f \u1011\u100a\u103a\u1037\u1015\u102b"},iespell:{download:"ieSpell \u1000\u102d\u102f \u1019\u1031\u1010\u103d\u1037\u1015\u102b\u104b \u101a\u1001\u102f \u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u101c\u102d\u102f\u1015\u102b\u101e\u101c\u102c\u1038?","iespell_desc":"\u1005\u1000\u102c\u1038\u101c\u1036\u102f\u1038 \u1005\u1005\u103a\u1031\u1006\u1038\u1015\u102b"},advhr:{"advhr_desc":"\u1031\u101b\u103c\u1015\u1004\u103a\u100a\u102e \u1019\u103b\u1009\u103a\u1038\u1031\u103c\u1000\u102c\u1004\u103a\u1038","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u1005\u102d\u1010\u103a\u1001\u1036\u1005\u102c\u1038\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u101b\u103e\u102c/\u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038","search_desc":"\u101b\u103e\u102c\u1015\u102b","delta_width":"","delta_height":""},advimage:{"image_desc":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","delta_width":"","delta_height":""},advlink:{"link_desc":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u1021\u1011\u1030\u1038\u103c\u1015\u102f\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038 \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","ins_desc":"\u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u103c\u1001\u1004\u103a\u1038","del_desc":"\u1015\u101a\u103a\u1016\u103b\u1000\u103a\u103c\u1001\u1004\u103a\u1038","acronym_desc":"\u1021\u1010\u102d\u102f\u1031\u1000\u102c\u1000\u103a","abbr_desc":"\u1021\u1000\u103b\u1009\u103a\u1038\u1001\u103b\u102f\u1015\u103a","cite_desc":"\u1000\u102d\u102f\u1038\u1000\u102c\u1038\u103c\u1001\u1004\u103a\u1038","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS \u1005\u1010\u102d\u102f\u1004\u103a \u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1031\u101b\u103d\u1038","paste_word_desc":"MS Word \u1019\u103e \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u1015\u102b","paste_text_desc":"\u101b\u102d\u102f\u1038\u101b\u102d\u102f\u1038\u1005\u102c\u101e\u102c\u1038\u1021\u1031\u1014\u103c\u1016\u1004\u103a\u1037 \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u1015\u102b","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1011\u1032\u101e\u102d\u102f\u1037 \u1005\u102c\u101e\u102c\u1038\u1000\u102d\u102f \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u101b\u1014\u103a \u101e\u1004\u103a\u1037 \u1000\u102e\u1038\u1018\u102f\u1010\u103a\u101c\u1000\u103a\u1000\u103d\u1000\u103a\u101b\u103e\u102d CTRL V \u1000\u102d\u102f \u101e\u1036\u102f\u1038\u1015\u102b","text_linebreaks":"\u1005\u102c\u1031\u103c\u1000\u102c\u1004\u103a\u1038\u1001\u103d\u1032\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1001\u103d\u1032\u101c\u103b\u103e\u1000\u103a\u1011\u102c\u1038\u1015\u102b","text_title":"\u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1011\u1032\u101e\u102d\u102f\u1037 \u1005\u102c\u101e\u102c\u1038\u1000\u102d\u102f \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u101b\u1014\u103a \u101e\u1004\u103a\u1037 \u1000\u102e\u1038\u1018\u102f\u1010\u103a\u101c\u1000\u103a\u1000\u103d\u1000\u103a\u101b\u103e\u102d CTRL V \u1000\u102d\u102f \u101e\u1036\u102f\u1038\u1015\u102b"},table:{cell:"\u1021\u1000\u103d\u1000\u103a",col:"\u1031\u1000\u102c\u103a\u101c\u1036",row:"\u1021\u1010\u1014\u103a\u1038",del:"\u1007\u101a\u102c\u1038\u1000\u102d\u102f \u1016\u103b\u1000\u103a","copy_row_desc":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1019\u102d\u1010\u1039\u1010\u1030\u1000\u1030\u1038","cut_row_desc":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u103c\u1016\u1010\u103a","paste_row_after_desc":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1031\u1014\u102c\u1000\u103a\u1010\u103d\u1004\u103a \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037","paste_row_before_desc":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1031\u101b\u103e\u1037\u1010\u103d\u1004\u103a \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037","props_desc":"\u1007\u101a\u102c\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","cell_desc":"\u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","row_desc":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","merge_cells_desc":"\u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1031\u1015\u102b\u1004\u103a\u1038\u1015\u102b","split_cells_desc":"\u1031\u1015\u102b\u1004\u103a\u1038\u1011\u102c\u1038\u1031\u101e\u102c \u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1001\u103d\u1032\u1015\u102b","delete_col_desc":"\u1031\u1000\u102c\u103a\u101c\u1036\u1000\u102d\u102f \u1016\u101a\u103a\u101b\u103e\u102c\u1038\u1015\u102b","col_after_desc":"\u1031\u1000\u102c\u103a\u101c\u1036\u1000\u102d\u102f \u1031\u1014\u102c\u1000\u103a\u1010\u103d\u1004\u103a \u103c\u1016\u100a\u103a\u1037\u1015\u102b","col_before_desc":"\u1031\u1000\u102c\u103a\u101c\u1036\u1000\u102d\u102f \u1031\u101b\u103e\u1037\u1010\u103d\u1004\u103a \u103c\u1016\u100a\u103a\u1037\u1015\u102b","delete_row_desc":"\u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1016\u103b\u1000\u103a\u1015\u102b","row_after_desc":"\u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1031\u1014\u102c\u1000\u103a\u1010\u103d\u1004\u103a \u103c\u1016\u100a\u103a\u1037\u1015\u102b","row_before_desc":"\u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1031\u101b\u103e\u1037\u1010\u103d\u1004\u103a \u103c\u1016\u100a\u103a\u1037\u1015\u102b",desc:"\u1007\u101a\u102c\u1038 \u1021\u101e\u1005\u103a\u1011\u100a\u103a\u1037\u1015\u102b","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u101e\u102d\u1019\u103a\u1038\u1006\u100a\u103a\u1038\u1011\u102c\u1038\u101e\u100a\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u103c\u1015\u1014\u103a\u101c\u100a\u103a\u1011\u102c\u1038\u101e\u102d\u102f\u1015\u102b\u1000\u104a \u101c\u1000\u103a\u101b\u103e\u102d \u1021\u101a\u103a\u1012\u102e\u1010\u102c\u1011\u1032\u1010\u103d\u1004\u103a \u101b\u103e\u102d\u1031\u101e\u102c \u1031\u101b\u1038\u101e\u102c\u1038\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1006\u1036\u102f\u1038\u101b\u103e\u1036\u102f\u1038\u101b\u1015\u102b\u1019\u100a\u103a\u104bnn\u101e\u102d\u1019\u103a\u1038\u1006\u100a\u103a\u1038\u1011\u102c\u1038\u101e\u100a\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u103c\u1015\u1014\u103a\u101c\u100a\u103a\u1011\u102c\u1038\u101e\u102d\u102f\u101c\u102d\u102f\u1010\u102c \u1031\u101e\u1001\u103b\u102c\u101b\u1032\u1037\u101c\u102c\u1038?","restore_content":"\u1021\u101c\u102d\u102f\u101c\u102d\u102f\u101e\u102d\u1019\u103a\u1038\u1011\u102c\u1038\u101e\u100a\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u103c\u1015\u1014\u103a\u101c\u100a\u103a\u1011\u102c\u1038\u101e\u102d\u102f\u1015\u102b\u104b","unload_msg":"\u1012\u102e\u1005\u102c\u1019\u103b\u1000\u103a\u1014\u103e\u102c\u1019\u103e \u1021\u103c\u1001\u102c\u1038\u1000\u102d\u102f \u1031\u101b\u103d\u103e\u1037\u101c\u102d\u102f\u1000\u103a\u101c\u103b\u103e\u1004\u103a \u101e\u1004\u103a\u103c\u1015\u102f\u101c\u102f\u1015\u103a\u1011\u102c\u1038\u1031\u101e\u102c \u1021\u1031\u103c\u1015\u102c\u1004\u103a\u1038\u1021\u101c\u1032 \u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1006\u1036\u102f\u1038\u101b\u103e\u1036\u102f\u1038\u101b\u1015\u102b\u1019\u100a\u103a\u104b"},fullscreen:{desc:"\u1005\u1000\u101b\u1004\u103a\u1021\u103c\u1015\u100a\u103a\u1037\u1019\u102f\u1012\u103a \u1016\u103d\u1004\u103a\u1037/\u1015\u102d\u1010\u103a"},media:{edit:"\u1019\u102e\u1012\u102e\u101a\u102c \u103c\u1019\u103e\u102f\u1015\u103a\u1011\u100a\u103a\u1037\u1019\u103e\u102f\u1000\u102d\u102f \u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a",desc:"\u1019\u102e\u1012\u102e\u101a\u102c \u103c\u1019\u103e\u102f\u1015\u103a\u1011\u100a\u103a\u1037/\u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a","delta_height":"","delta_width":""},fullpage:{desc:"\u1005\u102c\u101b\u103d\u1000\u103a\u1005\u102c\u1010\u1019\u103a\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"\u1005\u102c\u101c\u1036\u102f\u1031\u1015\u102b\u1004\u103a\u1038\u101e\u1010\u103a\u1015\u1036\u102f\u1005\u1005\u103a\u101b\u1014\u103a \u1016\u103d\u1004\u103a\u1037/\u1015\u102d\u1010\u103a",menu:"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1015\u102b\u1004\u103a\u1038\u101e\u1010\u103a\u1015\u1036\u102f \u1021\u103c\u1015\u1004\u103a\u1021\u1006\u1004\u103a\u1019\u103b\u102c\u1038","ignore_word":"\u1012\u102e\u1005\u1000\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u101c\u103e\u1005\u103a\u101c\u103b\u1030\u101b\u103e\u102f","ignore_words":"\u1021\u102c\u1038\u101c\u1036\u102f\u1038 \u101c\u103e\u1005\u103a\u101c\u103b\u1030\u101b\u103e\u102f",langs:"\u1018\u102c\u101e\u102c\u1005\u1000\u102c\u1038\u1019\u103b\u102c\u1038",wait:"\u1031\u1000\u103b\u1038\u1007\u1030\u1038\u103c\u1015\u102f\u104d \u1031\u1005\u102c\u1004\u103a\u1037\u1015\u102b...",sug:"\u1021\u103c\u1000\u1036\u103c\u1015\u102f\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038","no_sug":"\u1021\u103c\u1000\u1036\u103c\u1015\u102f\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038 \u1019\u101b\u103e\u102d\u1015\u102b","no_mpell":"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1015\u102b\u1004\u103a\u1038 \u101e\u1010\u103a\u1015\u1036\u102f \u1021\u1019\u103e\u102c\u1038\u1019\u1031\u1010\u103d\u1037\u1015\u102b","learn_word":"Learn word"},pagebreak:{desc:"\u1005\u102c\u1019\u103b\u1000\u103a\u1014\u103e\u102c\u1001\u103d\u1032 \u1011\u100a\u103a\u1037\u1015\u102b\u104b"},advlist:{types:"\u1021\u1019\u103b\u102d\u102f\u1038\u1021\u1005\u102c\u1038\u1019\u103b\u102c\u1038",def:"\u1019\u1030\u101c","lower_alpha":"Alpha \u1021\u1031\u101e\u1038","lower_greek":"\u1002\u101b\u102d \u1021\u1031\u101e\u1038","lower_roman":"\u101b\u102d\u102f\u1019\u1014\u103a \u1021\u1031\u101e\u1038","upper_alpha":"Alpha \u1021\u103c\u1000\u102e\u1038","upper_roman":"\u101b\u102d\u102f\u1019\u1014\u103a \u1021\u103c\u1000\u102e\u1038",circle:"\u1005\u1000\u103a\u101d\u1014\u103a\u1038",disc:"\u1021\u101d\u102d\u102f\u1004\u103a\u1038\u103c\u1015\u102c\u1038",square:"\u1031\u101c\u1038\u1031\u1011\u102c\u1004\u103a\u1037"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nb.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nb.js
new file mode 100644
index 000000000..38e5a71ce
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({nb:{common:{"more_colors":"Flere farger","invalid_data":"Feil: Ugyldige verdier er skrevet inn, disse er merket med r\u00f8dt.","popup_blocked":"Beklager, det er registrert at du har en popup-sperre aktivert i nettleseren. Du m\u00e5 oppheve popup-sperren for nettstedet for \u00e5 f\u00e5 tilgang til dette verkt\u00f8yet","clipboard_no_support":"For tiden ikke st\u00f8ttet av din nettleser, benytt tastatursnarveier i stedet.","clipboard_msg":"Klipp ut / Kopier /Lim inn fungerer ikke i Mozilla og Firefox. Vil du vite mer om dette?","not_set":"--ikke satt--","class_name":"Klasse",browse:"Bla gjennom",close:"Lukk",cancel:"Avbryt",update:"Oppdater",insert:"Sett inn",apply:"Legg til","edit_confirm":"Vil du benytte WYSIWYG-editoren for dette tekstfeltet?","invalid_data_number":"{#field} m\u00e5 v\u00e6re et nummer","invalid_data_min":"{#field} m\u00e5 v\u00e6re en nummer st\u00f8rre en {#min}","invalid_data_size":"{#field} m\u00e5 v\u00e6re et nummer eller prosent",value:"(verdi)"},contextmenu:{full:"Full",right:"H\u00f8yre",center:"Midtstill",left:"Venstre",align:"Justering"},insertdatetime:{"day_short":"s\u00f8n,man,tir,ons,tor,fre,l\u00f8r,s\u00f8n","day_long":"s\u00f8ndag,mandag,tirsdag,onsdag,torsdag,fredag,l\u00f8rdag,s\u00f8ndag","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,oct,nov,des","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","inserttime_desc":"Sett inn tidspunkt","insertdate_desc":"Sett inn dato","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Skriv u"},preview:{"preview_desc":"Forh\u00e5ndsvisning"},directionality:{"rtl_desc":"Retning h\u00f8yre mot venstre","ltr_desc":"Retning venstre mot h\u00f8yre"},layer:{content:"Nytt lag...","absolute_desc":"Sl\u00e5 p\u00e5/av absolutt plassering","backward_desc":"Flytt bakover","forward_desc":"Flytt framover","insertlayer_desc":"Sett inn nytt lag"},save:{"save_desc":"Lagre","cancel_desc":"Kanseller alle endringer"},nonbreaking:{"nonbreaking_desc":"Sett inn hardt mellomrom"},iespell:{download:"ieSpell ikke funnet. \u00d8nsker du \u00e5 installere ieSpell n\u00e5?","iespell_desc":"Kj\u00f8rer rettskrivningskontroll"},advhr:{"advhr_desc":"Horisontal linje","delta_height":"","delta_width":""},emotions:{"delta_height":"","emotions_desc":"Hum\u00f8rfjes","delta_width":""},searchreplace:{"replace_desc":"S\u00f8k/Erstatt","search_desc":"S\u00f8k","delta_width":"","delta_height":""},advimage:{"image_desc":"Sett inn / endre bilde","delta_width":"","delta_height":""},advlink:{"link_desc":"Sett inn / endre lenke","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Sett inn / endre Egenskaper","ins_desc":"Innsetting","del_desc":"Sletting","acronym_desc":"Akronym","abbr_desc":"Forkortelse","cite_desc":"Sitat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Rediger CSS-stil","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\'Lim inn\' er n\u00e5 i \'ren tekst\'-modus. Klikk en gang til for \u00e5 g\u00e5 tilbake til normal modus.","plaintext_mode_sticky":"\'Lim inn\' er n\u00e5 i \'ren tekst\'-modus. Klikk en gang til for \u00e5 g\u00e5 tilbake til normal modus. Etter at du har limt inn noe vil du bli tatt tilbake til normal modus.","selectall_desc":"Merk alt","paste_word_desc":"Lim inn fra Word","paste_text_desc":"Lim inn som ren tekst"},"paste_dlg":{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vinduet.","text_linebreaks":"Behold tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vinduet."},table:{cell:"Celle",col:"Kolonne",row:"Rad",del:"Slett tabell","copy_row_desc":"Kopier rad","cut_row_desc":"Fjern rad","paste_row_after_desc":"Lim inn rad etter","paste_row_before_desc":"Lim inn rad foran","props_desc":"Tabellegenskaper","cell_desc":"Celleegenskaper","row_desc":"Radegenskaper","merge_cells_desc":"Sl\u00e5 sammen celler","split_cells_desc":"Del celler","delete_col_desc":"Fjern kolonne","col_after_desc":"Sett inn kolonne etter","col_before_desc":"Sett inn kolonne foran","delete_row_desc":"Fjern rad","row_after_desc":"Sett inn rad etter","row_before_desc":"Sett inn rad foran",desc:"Sett inn ny tabell","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Om du gjenoppretter lagret innhold vil du miste alt innhold som n\u00e5 er i tekstbehandleren.\n\nEr du sikker p\u00e5 at du \u00f8nsker \u00e5 gjenopprette lagret innhold?","restore_content":"Gjenopprett autolagret innhold.","unload_msg":"Endringene du gjorde g\u00e5r tapt dersom du velger \u00e5 forlate denne siden!"},fullscreen:{desc:"Skift til/fra fullskjermmodus"},media:{edit:"Endre inkludert objekt",desc:"Sett inn / rediger inkludert objekt","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentegenskaper","delta_width":"","delta_height":""},template:{desc:"Sett inn forh\u00e5ndsdefinert malinnhold"},visualchars:{desc:"Visuelle kontrolltegn p\u00e5/av"},spellchecker:{desc:"Stavekontroll p\u00e5/av",menu:"Vis meny","ignore_word":"Ignorer ord","ignore_words":"Ignorer alt",langs:"Spr\u00e5k",wait:"Vennligst vent...",sug:"Forslag","no_sug":"Ingen forslag","no_mpell":"Ingen stavefeil funnet","learn_word":"L\u00e6r ord"},pagebreak:{desc:"Sett inn sideskift"},advlist:{types:"Typer",def:"Standard","lower_alpha":"Liten alfa","lower_greek":"Liten gresk","lower_roman":"Liten romersk","upper_alpha":"Stor alfa","upper_roman":"Stor romersk",circle:"Sirkel",disc:"Disk",square:"Firkant"},colors:{"333300":"M\u00f8rk oliven","993300":"Brent oransje","000000":"Sort","003300":"M\u00f8rk gr\u00f8nn","003366":"M\u00f8rk asurbl\u00e5","000080":"Marinebl\u00e5","333399":"Indigo","333333":"Veldig m\u00f8rk gr\u00e5","800000":"R\u00f8dbrun",FF6600:"Oransje","808000":"Oliven","008000":"Gr\u00f8nn","008080":"Bl\u00e5gr\u00f8nn","0000FF":"Bl\u00e5","666699":"Gr\u00e5bl\u00e5","808080":"Gr\u00e5",FF0000:"R\u00f8d",FF9900:"Rav","99CC00":"Gulgr\u00f8nn","339966":"Sj\u00f8gr\u00f8nn","33CCCC":"Turkis","3366FF":"Kongebl\u00e5","800080":"Lilla","999999":"Mellomgr\u00e5",FF00FF:"Magenta",FFCC00:"Gull",FFFF00:"Gul","00FF00":"Lime","00FFFF":"Turkis","00CCFF":"Himmelbl\u00e5","993366":"Brun",C0C0C0:"S\u00f8lv",FF99CC:"Rosa",FFCC99:"Fersken",FFFF99:"Lysegul",CCFFCC:"Blekgr\u00f8nn",CCFFFF:"Blekbl\u00e5","99CCFF":"Lys himmelbl\u00e5",CC99FF:"Plomme",FFFFFF:"Hvit"},aria:{"rich_text_area":"Rikt tekstfelt"},wordcount:{words:"Ord"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nl.js
new file mode 100644
index 000000000..a8cdad2e5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({nl:{common:{"more_colors":"Meer kleuren","invalid_data":"Fout: Er zijn ongeldige waardes ingevoerd, deze zijn rood gemarkeerd.","popup_blocked":"U zult uw popup-blocker tijdelijk moeten uitschakelen voor deze website om gebruik te kunnen maken van alle functies van deze teksteditor.","clipboard_no_support":"Kopi\u00ebren/knippen/plakken wordt niet ondersteund door uw browser, gebruik hiervoor de sneltoetsen.","clipboard_msg":"Kopi\u00ebren/knippen/plakken is niet beschikbaar in Mozilla en Firefox.\nWilt u meer informatie over deze beperking?","not_set":"- Standaard -","class_name":"Klasse",browse:"Bladeren",close:"Sluiten",cancel:"Annuleren",update:"Bijwerken",insert:"Invoegen",apply:"Toepassen","edit_confirm":"Weet u zeker dat u tekst in WYSIWYG mode wilt bewerken in dit tekstveld?","invalid_data_number":"{#field} moet een nummer zijn","invalid_data_min":"{#field} moet groter zijn dan {#min}","invalid_data_size":"{#field} moet een nummer of percentage zijn",value:"(waarde aanpassen)"},contextmenu:{full:"Uitvullen",right:"Rechts",center:"Centreren",left:"Links",align:"Uitlijning"},insertdatetime:{"day_short":"zo,ma,di,wo,do,vr,za,zo","day_long":"Zondag,Maandag,Dinsdag,Woensdag,Donderdag,Vrijdag,Zaterdag,Zondag","months_short":"Jan,Feb,Mar,Apr,Mei,Jun,Jul,Aug,Sep,Okt,Nov,Dec","months_long":"Januari,Februari,Maart,April,Mei,Juni,Juli,Augustus,September,Oktober,November,December","inserttime_desc":"Tijd invoegen","insertdate_desc":"Datum invoegen","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Afdrukken"},preview:{"preview_desc":"Voorbeeld"},directionality:{"rtl_desc":"Van rechts naar links","ltr_desc":"Van links naar rechts"},layer:{content:"Nieuwe laag...","absolute_desc":"Absoluut positioneren inschakelen","backward_desc":"Vorige laag","forward_desc":"Volgende laag","insertlayer_desc":"Nieuwe laag invoegen"},save:{"save_desc":"Opslaan","cancel_desc":"Alle wijzigingen annuleren"},nonbreaking:{"nonbreaking_desc":"Harde spatie invoegen"},iespell:{download:"ieSpell niet gevonden. Wilt u deze nu installeren?","iespell_desc":"Spellingcontrole"},advhr:{"advhr_desc":"Scheidingslijn","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoties","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Zoeken/Vervangen","search_desc":"Zoeken","delta_width":"","delta_height":""},advimage:{"image_desc":"Afbeelding invoegen/bewerken","delta_width":"","delta_height":""},advlink:{"link_desc":"Link invoegen/bewerken","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Attributen invoegen/bewerken","ins_desc":"Ingevoegd","del_desc":"Verwijderd","acronym_desc":"Synoniem","abbr_desc":"Afkorting","cite_desc":"Citaat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS Stijl bewerken","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Plakken is nu in plattetekstmodus. Klik nog een keer om terug te gaan naar normaal plakken.","plaintext_mode_sticky":"Plakken is nu in plattetekstmodus. Klik nog een keer om terug te gaan naar normaal plakken. Nadat u iets plakt, keert u terug naar normaal plakken.","selectall_desc":"Alles selecteren","paste_word_desc":"Vanuit Word plakken","paste_text_desc":"Als platte tekst plakken"},"paste_dlg":{"word_title":"Gebruik Ctrl+V om tekst in het venster te plakken.","text_linebreaks":"Regelafbreking bewaren","text_title":"Gebruik Ctrl+V om tekst in het venster te plakken."},table:{cell:"Cel",col:"Kolom",row:"Rij",del:"Tabel verwijderen","copy_row_desc":"Rij kopi\u00ebren","cut_row_desc":"Rij knippen","paste_row_after_desc":"Rij onder plakken","paste_row_before_desc":"Rij boven plakken","props_desc":"Tabeleigenschappen","cell_desc":"Cel-eigenschappen","row_desc":"Rij-eigenschappen","merge_cells_desc":"Cellen samenvoegen","split_cells_desc":"Cellen splitsen","delete_col_desc":"Kolom verwijderen","col_after_desc":"Kolom rechts invoegen","col_before_desc":"Kolom links invoegen","delete_row_desc":"Rij verwijderen","row_after_desc":"Rij onder invoegen","row_before_desc":"Rij boven invoegen",desc:"Tabel invoegen/bewerken","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Als u de opgeslagen inhoud laadt, verliest u de inhoud die zich momenteel in de editor bevindt.\n\nWeet u zeker dat u de opgeslagen inhoud wilt laden?","restore_content":"Automatisch opgeslagen inhoud laden.","unload_msg":"De wijzigingen zullen verloren gaan als u nu deze pagina verlaat."},fullscreen:{desc:"Volledig scherm"},media:{edit:"Media bewerken",desc:"Media invoegen/bewerken","delta_height":"","delta_width":""},fullpage:{desc:"Documenteigenschappen","delta_width":"","delta_height":""},template:{desc:"Voorgedefinieerd sjabloon invoegen"},visualchars:{desc:"Zichtbare symbolen"},spellchecker:{desc:"Spellingcontrole",menu:"Instellingen spellingcontrole","ignore_word":"Woord negeren","ignore_words":"Alles negeren",langs:"Talen",wait:"Een ogenblik geduld\u2026",sug:"Suggesties","no_sug":"Geen suggesties","no_mpell":"Geen spelfouten gevonden.","learn_word":"Woord toevoegen aan spellingscontrole"},pagebreak:{desc:"Pagina-einde invoegen"},advlist:{types:"Types",def:"Standaard","lower_alpha":"Alfa (klein)","lower_greek":"Griekse letters (klein)","lower_roman":"Romeinse letters (klein)","upper_alpha":"Alfa (groot)","upper_roman":"Romeinse letters (groot)",circle:"Cirkel",disc:"Schijf",square:"Vierkant"},colors:{"333300":"Donkerolijf","993300":"Gebrand oranje","000000":"Zwart","003300":"Donkergroen","003366":"Donkerazuur","000080":"Marineblauw","333399":"Indigo","333333":"Heel donkergrijs","800000":"Kastanjebruin",FF6600:"Oranje","808000":"Olijf","008000":"Groen","008080":"Teal","0000FF":"Blauw","666699":"Grijsblauw","808080":"Grijs",FF0000:"Rood",FF9900:"Amber","99CC00":"Geelgroen","339966":"Zeegroen","33CCCC":"Turkoois","3366FF":"Koningsblauw","800080":"Paars","999999":"Middengrijs",FF00FF:"Magenta",FFCC00:"Goud",FFFF00:"Geel","00FF00":"Limoen","00FFFF":"Aqua","00CCFF":"Hemelsblauw","993366":"Bruin",C0C0C0:"Zilver",FF99CC:"Roze",FFCC99:"Perzik",FFFF99:"Lichtgeel",CCFFCC:"Bleekgroen",CCFFFF:"Bleekcyaan","99CCFF":"Licht hemelsblauw",CC99FF:"Pruim",FFFFFF:"Wit"},aria:{"rich_text_area":"Tekst met opmaak"},wordcount:{words:"Aantal woorden:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nn.js
new file mode 100644
index 000000000..2924d251f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/nn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({nn:{common:{"more_colors":"Fleire fargar","invalid_data":"Feil: Ugyldige verdiar er skrivne inn, desse er merka med raudt","popup_blocked":"Orsak, det er registrert at du har popup-sperre aktivert i nettlesaren. Du m\u00e5 oppheve popup-sperra for nettstaden for \u00e5 f\u00e5 tilgang til dette verktyet","clipboard_no_support":"For tida ikkje st\u00f8tta av nettlesaren din, bruk tastatursnarveger i staden.","clipboard_msg":"Klipp ut / Kopier /Lim inn fungerer ikkje i Mozilla og Firefox. Vil du vite meir om dette?","not_set":"--ikkje sett--","class_name":"Klasse",browse:"Bla gjennom",close:"Stopp",cancel:"Avbryt",update:"Oppdater",insert:"Set inn",apply:"Legg til","edit_confirm":"Vil du bruke WYSIWYG-editoren for dette tekstfeltet?","invalid_data_number":"{#field} m\u00e5 vere eit nummer","invalid_data_min":"{#field} m\u00e5 vere eit nummer h\u00f8gare enn {#min}","invalid_data_size":"{#field} m\u00e5 vere eit nummer eller ein prosent",value:"(verdi)"},contextmenu:{full:"Full",right:"H\u00f8gre",center:"Midtstill",left:"Venstre",align:"Justering"},insertdatetime:{"day_short":"sun,man,tir,ons,tor,fre,lau,sun","day_long":"sundag,mandag,tirsdag,onsdag,torsdag,fredag,laurdag,sundag","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,oct,nov,des","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","inserttime_desc":"Lim inn tid","insertdate_desc":"Lim inn dato","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Skriv u"},preview:{"preview_desc":"F\u00f8rehandsvisni"},directionality:{"rtl_desc":"Retning h\u00f8gre mot venstre","ltr_desc":"Retning venstre mot h\u00f8gre"},layer:{content:"Nytt lag...","absolute_desc":"Sl\u00e5 p\u00e5/av absolutt plassering","backward_desc":"Flytt bakover","forward_desc":"Flytt framover","insertlayer_desc":"Set inn nytt lag"},save:{"save_desc":"Lagre","cancel_desc":"Kanseller alle endringar"},nonbreaking:{"nonbreaking_desc":"Set inn hardt mellomrom"},iespell:{download:"ieSpell ikkje funnen. \u00d8nskjer du \u00e5 installere ieSpell no?","iespell_desc":"K\u00f8yrer kontroll av rettskriving"},advhr:{"advhr_desc":"Horisontal linje","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hum\u00f8rfjes","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f8k/Erstatt","search_desc":"S\u00f8k","delta_width":"","delta_height":""},advimage:{"image_desc":"Set inn / endre bilete","delta_width":"","delta_height":""},advlink:{"link_desc":"Set inn / endre lenkje","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Set inn / Endre eigenskapar","ins_desc":"Innsetjing","del_desc":"Sletting","acronym_desc":"Akronym","abbr_desc":"Forkorting","cite_desc":"Sitat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Rediger CSS-stil","delta_height":"","delta_width":""},paste:{"selectall_desc":"Marker al","paste_word_desc":"Lim inn fr\u00e5 Word","paste_text_desc":"Lim inn som vanleg tekst","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vindauget.","text_linebreaks":"Behald tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vindauget."},table:{cell:"Celle",col:"Kolonne",row:"Rad",del:"Slett tabell","copy_row_desc":"Kopier rad","cut_row_desc":"Fjern rad","paste_row_after_desc":"Lim inn rad etter","paste_row_before_desc":"Lim inn rad framfor","props_desc":"Tabelleigenskapar","cell_desc":"Celleegenskapar","row_desc":"Radeigenskapar","merge_cells_desc":"Sl\u00e5 saman celler","split_cells_desc":"Del celler","delete_col_desc":"Fjern kolonne","col_after_desc":"Set inn kolonne etter","col_before_desc":"Set inn kolonne framfor","delete_row_desc":"Fjern rad","row_after_desc":"Set inn rad etter","row_before_desc":"Set inn rad framfor",desc:"Set inn ein ny tabell","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Om du gjenopprettar lagra innhald vil du miste alt innhald som finst i tekstbehandler no.\n\nEr du sikker p\u00e5 at du ynskjer \u00e5 gjenopprette lagra innhald?","restore_content":"Gjenopprett autolagra innhald","unload_msg":"Endringane du gjorde g\u00e5r tapt om du forl\u00e8t denne sida!"},fullscreen:{desc:"Skift til/fr\u00e5 fullskjermmodus"},media:{edit:"Endre innsett objekt",desc:"Set inn / rediger inkludert objekt","delta_height":"","delta_width":""},fullpage:{desc:"Dokumenteigenskapar","delta_width":"","delta_height":""},template:{desc:"Set inn f\u00f8rehandsdefinert malinnhald"},visualchars:{desc:"Visuelle konktrollteikn p\u00e5/av"},spellchecker:{desc:"Stavekontroll p\u00e5/av",menu:"Vis meny","ignore_word":"Ignorer ord","ignore_words":"Ignorer alt",langs:"Spr\u00e5k",wait:"Ver venleg og vent...",sug:"Framlegg","no_sug":"Inga framlegg","no_mpell":"Inga stavefeil funne.","learn_word":"L\u00e6r ord"},pagebreak:{desc:"Set inn sideskift"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Omr\u00e5de for rik tekst"},wordcount:{words:"Ord:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/no.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/no.js
new file mode 100644
index 000000000..4a76e5c50
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/no.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({no:{common:{"more_colors":"Flere farger","invalid_data":"Feil: Ugyldig verdi er skrevet inn, disse er merket med r\u00f8dt","popup_blocked":"Beklager, men vi har registrert at din popup-sperrer har blokkert et vindu i nettleseren. Du m\u00e5 oppheve popup-sperren for at nettstedet skal f\u00e5 tilgang til dette verkt\u00f8yet","clipboard_no_support":"For tiden ikke st\u00f8ttet av din nettleser, bruk tastatursnarveier i stedet.","clipboard_msg":"Klipp ut / Kopier /Lim inn fungerer ikke i Mozilla og Firefox. Vil du vite mer om dette?","not_set":"--Ikke satt--","class_name":"Klasse",browse:"Bla gjennom",close:"Lukk",cancel:"Avbryt",update:"Oppdater",insert:"Sett inn",apply:"Bruk","edit_confirm":"Vil du bruke WYSIWYG-editoren for dette tekstfeltet?","invalid_data_number":"{#field} m\u00e5 v\u00e6re nummer","invalid_data_min":"{#field} m\u00e5 v\u00e6re et nummber st\u00f8rre en {#min}","invalid_data_size":"{#field} m\u00e5 v\u00e6re et nummer eller prosent av",value:"(verdi)"},contextmenu:{full:"Full",right:"H\u00f8yre",center:"Midtstilt",left:"Venstre",align:"Justering"},insertdatetime:{"day_short":"S\u00f8n,Man,Tir,Ons,Tor,Fre,L\u00f8r,S\u00f8n","day_long":"s\u00f8ndag,mandag,tirsdag,onsdag,torsdag,fredag,l\u00f8rdag,s\u00f8ndag","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","inserttime_desc":"Sett inn tid","insertdate_desc":"Sett inn dato","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Skriv ut"},preview:{"preview_desc":"Forh\u00e5ndsvisning"},directionality:{"rtl_desc":"Retning h\u00f8yre mot venstre","ltr_desc":"Retning venstre mot h\u00f8yre"},layer:{content:"Nytt lag ...","absolute_desc":"Sl\u00e5 p\u00e5/av absolutt plassering","backward_desc":"Flytt bakover","forward_desc":"Flytt fremover","insertlayer_desc":"Sett inn nytt lag"},save:{"save_desc":"Lagre","cancel_desc":"Kanseller alle endringer"},nonbreaking:{"nonbreaking_desc":"Sett inn karakter for hardt mellomrom"},iespell:{download:"ieSpell ikke funnet. \u00d8nsker du \u00e5 installere ieSpell?","iespell_desc":"Stavekontroll"},advhr:{"advhr_desc":"Horisontal linje","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hum\u00f8rfjes","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f8k/Erstatt","search_desc":"S\u00f8k","delta_width":"","delta_height":""},advimage:{"image_desc":"Sett inn/editer bilde","delta_width":"","delta_height":""},advlink:{"link_desc":"Sett inn/editer lenke","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Sett inn/Editer egenskaper","ins_desc":"Innsetting","del_desc":"Sletting","acronym_desc":"Akronym","abbr_desc":"Forkortelse","cite_desc":"Sitat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Rediger CSS-stil","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Lim inn er n\u00e5 i vanlig tekst modus. Klikk igjen for \u00e5 bytte til vanlig innlimings modus.","plaintext_mode_sticky":"Lim inn er n\u00e5 i vanlig tekst modus. Klikk igjen for \u00e5 bytte til vanlig innlimings modus. Etter at du limer inn noe vil du g\u00e5 tilbake til ordin\u00e6r innliming.","selectall_desc":"Merk alt","paste_word_desc":"Lim inn fra Word","paste_text_desc":"Lim inn som ren tekst"},"paste_dlg":{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn teksten i dette vinduet.","text_linebreaks":"Behold tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn teksten i dette vinduet."},table:{cell:"Celle",col:"Kolonne",row:"Rad",del:"Slett tabell","copy_row_desc":"Kopier rad","cut_row_desc":"Slett rad","paste_row_after_desc":"Lime inn rad etter","paste_row_before_desc":"Lime inn rad foran","props_desc":"Tabell egenskaper","cell_desc":"Celle egenskaper","row_desc":"Rad egenskaper","merge_cells_desc":"Sl\u00e5 sammen celler","split_cells_desc":"Splitte sammensl\u00e5tte celler","delete_col_desc":"Slett kolonne","col_after_desc":"Sett inn kolonne etter","col_before_desc":"Sett inn kolonne forand","delete_row_desc":"Slett rad","row_after_desc":"Sett inn rad etter","row_before_desc":"Sett inn rad foran",desc:"Setter inn ny tabell","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Hvis du gjenoppretter tidligere lagret innhold s\u00e5 vil du miste alt n\u00e5v\u00e6rende innhold i editoren.\n\nEr du sikker du vil gjenopprette tidligere lagret innhold?.","restore_content":"Gjenopprette autolagret innhold.","unload_msg":"Utf\u00f8rte endringer g\u00e5r tapt hvis du navigerer vekk fra denne siden!"},fullscreen:{desc:"Sl\u00e5 fullskjermmodus av/p\u00e5"},media:{edit:"Editer innebygget objekt",desc:"Sett inn/editer innebygget objekt","delta_height":"","delta_width":""},fullpage:{desc:"Dokument egenskaper","delta_width":"","delta_height":""},template:{desc:"Sett inn forh\u00e5ndsdefinert malinnhold"},visualchars:{desc:"Visuelle konktrolltegn p\u00e5/av"},spellchecker:{desc:"Stavekontroll p\u00e5/av",menu:"Oppsett stavekontroll","ignore_word":"Ignorer ord","ignore_words":"Ignorer alt",langs:"Spr\u00e5k",wait:"Vennligst vent ...",sug:"Forslag","no_sug":"Ingen forslag","no_mpell":"Ingen stavefeil funnet.","learn_word":"L\u00e6r ordet"},pagebreak:{desc:"Sett inn sideskift"},advlist:{types:"Types",def:"Standard","lower_alpha":"Sm\u00e5 alfanumerisk","lower_greek":"Sm\u00e5 gresk","lower_roman":"Sm\u00e5 roman","upper_alpha":"Store alfanumerisk","upper_roman":"Store roman",circle:"Sirkel",disc:"Plate",square:"Firkant"},colors:{"333300":"M\u00f8rk olivengr\u00f8nn","993300":"Brent oransje","000000":"Svart","003300":"M\u00f8rkegr\u00f8nn","003366":"M\u00f8rk asurbl\u00e5","000080":"Marinebl\u00e5","333399":"Indigobl\u00e5","333333":"M\u00f8rk m\u00f8rkegr\u00e5","800000":"R\u00f8dbrun",FF6600:"Oransje","808000":"Olivengr\u00f8nn","008000":"Gr\u00f8nn","008080":"M\u00f8rk gr\u00f8nnbl\u00e5","0000FF":"Bl\u00e5","666699":"Gr\u00e5bl\u00e5","808080":"Gr\u00e5",FF0000:"R\u00f8d",FF9900:"Amber","99CC00":"Gulgr\u00f8nn","339966":"Havgr\u00f8nn","33CCCC":"Turkis","3366FF":"Kongebl\u00e5","800080":"Purpur","999999":"Medium gr\u00e5",FF00FF:"Magentar\u00f8d",FFCC00:"Gull",FFFF00:"Gul","00FF00":"Limegr\u00f8nn","00FFFF":"Cyanbl\u00e5","00CCFF":"Himmelbl\u00e5","993366":"Brun",C0C0C0:"S\u00f8lv",FF99CC:"Rosa",FFCC99:"Fersken",FFFF99:"Lysgul",CCFFCC:"Lysegr\u00f8nn",CCFFFF:"Lys cyanbl\u00e5","99CCFF":"Lys himmelbl\u00e5",CC99FF:"Plomme",FFFFFF:"Hvit"},aria:{"rich_text_area":"Rikt tekstfelt"},wordcount:{words:"Ord:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/pl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/pl.js
new file mode 100644
index 000000000..475b45da1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/pl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({pl:{common:{"more_colors":"Wi\u0119cej kolor\u00f3w","invalid_data":"B\u0142\u0105d: Zosta\u0142y wprowadzone b\u0142\u0119dne dane, s\u0105 zaznaczone na czerwono.","popup_blocked":"Zauwa\u017cyli\u015bmy, \u017ce opcja blokowania wyskakuj\u0105cych okienek wy\u0142\u0105czy\u0142a okno, kt\u00f3re dostarcza funkcjonalno\u015b\u0107 aplikacji. Aby w pe\u0142ni wykorzysta\u0107 to narz\u0119dzie musisz wy\u0142\u0105czy\u0107 blokowanie wyskakuj\u0105cych okienek na tej stronie.","clipboard_no_support":"Aktualnie nie jest obs\u0142ugiwany przez Twoj\u0105 przegl\u0105dark\u0119, u\u017cyj skr\u00f3t\u00f3w klawiaturowych w zamian.","clipboard_msg":"Akcje Kopiuj/Wytnij/Wklej nie s\u0105 dost\u0119pne w Mozilli i Firefox.\nCzy chcesz wi\u0119cej informacji o tym problemie?","not_set":"-- Brak --","class_name":"Klasa",browse:"Przegl\u0105daj",close:"Zamknij",cancel:"Anuluj",update:"Aktualizuj",insert:"Wstaw",apply:"Zastosuj","edit_confirm":"Czy chcesz u\u017cy\u0107 trybu WYSIWYG dla tego pola formularza?","invalid_data_number":"{#field} musi by\u0107 liczb\u0105","invalid_data_min":"{#field} musi by\u0107 liczb\u0105 wi\u0119ksz\u0105 od {#min}","invalid_data_size":"{#field} musi by\u0107 liczb\u0105 lub warto\u015bci\u0105 procentow\u0105",value:"(warto\u015b\u0107)"},contextmenu:{full:"Wyjustuj",right:"Do prawej",center:"Do \u015brodka",left:"Do lewej",align:"Wyr\u00f3wnanie"},insertdatetime:{"day_short":"N,Pn,Wt,\u015ar,Cz,Pt,So,N","day_long":"Niedziela,Poniedzia\u0142ek,Wtorek,\u015aroda,Czwartek,Pi\u0105tek,Sobota,Niedziela","months_short":"Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,Pa\u017a,Lis,Gru","months_long":"Stycze\u0144,Luty,Marzec,Kwiecie\u0144,Maj,Czerwiec,Lipiec,Sierpie\u0144,Wrzesie\u0144,Pa\u017adziernik,Listopad,Grudzie\u0144","inserttime_desc":"Wstaw czas","insertdate_desc":"Wstaw dat\u0119","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Drukuj"},preview:{"preview_desc":"Podgl\u0105d"},directionality:{"rtl_desc":"Kierunek od prawej do lewej","ltr_desc":"Kierunek od lewej do prawej"},layer:{content:"Nowa warstwa...","absolute_desc":"Prze\u0142\u0105cz pozycjonowanie absolutne","backward_desc":"Przesu\u0144 pod sp\u00f3d","forward_desc":"Przesu\u0144 na wierzch","insertlayer_desc":"Wstaw now\u0105 warstw\u0119"},save:{"save_desc":"Zachowaj","cancel_desc":"Anuluj wszystkie zmiany"},nonbreaking:{"nonbreaking_desc":"Wstaw tward\u0105 spacj\u0119"},iespell:{download:"ieSpell nie wykryte. Czy przeprowadzi\u0107 instalacj\u0119 tego komponentu?","iespell_desc":"Sprawd\u017a pisowni\u0119"},advhr:{"advhr_desc":"Pozioma linia","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotikony","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Znajd\u017a/zamie\u0144","search_desc":"Znajd\u017a","delta_width":"","delta_height":""},advimage:{"image_desc":"Wstaw/edytuj obraz","delta_width":"","delta_height":""},advlink:{"link_desc":"Wstaw/edytuj link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Wstaw / Edytuj atrybuty","ins_desc":"Wstawienie","del_desc":"Usuni\u0119cie","acronym_desc":"Akronim","abbr_desc":"Skr\u00f3t","cite_desc":"Cytat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edytuj Style CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Wklejanie jest teraz dost\u0119pne w trybie tekstowym. Kliknij ponownie, aby prze\u0142\u0105czy\u0107 si\u0119 z powrotem do trybu wklejania sformatowanego tekstu.","plaintext_mode_sticky":"Wklejanie jest teraz dost\u0119pne w trybie tekstowym. Kliknij ponownie, aby prze\u0142\u0105czy\u0107 si\u0119 z powrotem do trybu wklejania sformatowanego tekstu. Po wklejeniu tekstu nast\u0105pi powr\u00f3t do trybu wklejania sformatowanego tekstu.","selectall_desc":"Zaznacz wszystko","paste_word_desc":"Wklej z Worda","paste_text_desc":"Wklej jako zwyk\u0142y tekst"},"paste_dlg":{"word_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna.","text_linebreaks":"Zachowaj ko\u0144ce linii.","text_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna."},table:{cell:"Kom\u00f3rka",col:"Kolumna",row:"Wiersz",del:"Usu\u0144 tabel\u0119","copy_row_desc":"Kopiuj wiersz...","cut_row_desc":"Wytnij wiersz...","paste_row_after_desc":"Wklej wiersz po...","paste_row_before_desc":"Wklej wiersz przed...","props_desc":"W\u0142a\u015bciwo\u015bci tabeli","cell_desc":"W\u0142a\u015bciwo\u015bci kom\u00f3rki","row_desc":"W\u0142a\u015bciwo\u015bci wiersza","merge_cells_desc":"Po\u0142\u0105cz kom\u00f3rki","split_cells_desc":"Podziel po\u0142\u0105czone kom\u00f3rki","delete_col_desc":"Usu\u0144 kolumn\u0119","col_after_desc":"Wstaw kolumn\u0119 po...","col_before_desc":"Wstaw kolumn\u0119 przed...","delete_row_desc":"Usu\u0144 wiersz","row_after_desc":"Wstaw nowy wiersz po...","row_before_desc":"Wstaw nowy wiersz przed...",desc:"Wstaw now\u0105 tabel\u0119","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Je\u015bli przywr\u00f3cisz zapisan\u0105 tre\u015b\u0107, stracisz ca\u0142\u0105 tre\u015b\u0107, kt\u00f3ra teraz si\u0119 znajduje w edytorze.\n\nJeste\u015b pewien, \u017ce chcesz przywr\u00f3ci\u0107 zapisan\u0105 tre\u015b\u0107?","restore_content":"Przywr\u00f3\u0107 tre\u015b\u0107 zapisan\u0105 automatycznie.","unload_msg":"Zmiany, kt\u00f3rych dokona\u0142e\u015b zostan\u0105 utracone je\u015bli opu\u015bcisz t\u0119 stron\u0119."},fullscreen:{desc:"Prze\u0142\u0105cz tryb pe\u0142noekranowy"},media:{"delta_height":"",edit:"Edytuj wbudowane media",desc:"Wstaw/edytuj wbudowane media","delta_width":""},fullpage:{desc:"W\u0142a\u015bciwo\u015bci dokumentu","delta_width":"","delta_height":""},template:{desc:"Wstaw tre\u015b\u0107 szablonu"},visualchars:{desc:"W\u0142\u0105cz/wy\u0142\u0105cz znaki kontrolne."},spellchecker:{desc:"Sprawdzanie pisowni",menu:"Ustawienia sprawdzania pisowni","ignore_word":"Ignoruj s\u0142owo","ignore_words":"Ignoruj wszystkie",langs:"J\u0119zyki",wait:"Prosz\u0119 czeka\u0107...",sug:"Sugestie","no_sug":"Brak sugestii","no_mpell":"Nie znaleziono b\u0142\u0119d\u00f3w.","learn_word":"Dowiedz si\u0119 s\u0142owa"},pagebreak:{desc:"Wstaw znak nowej strony."},advlist:{types:"Rodzaje",def:"Domy\u015blny","lower_alpha":"Ma\u0142e alfabetu","lower_greek":"Ma\u0142e greckie","lower_roman":"Ma\u0142e rzymskie","upper_alpha":"Du\u017ce alfabetu","upper_roman":"Du\u017ce rzymskie",circle:"Ko\u0142o",disc:"Elipsa",square:"Kwadrat"},colors:{"333300":"Ciemnooliwkowy","993300":"Ochra","000000":"Czarny","003300":"Ciemnozielony","003366":"Ciemnolazurowy","000080":"Granatowy","333399":"Indygo","333333":"Bardzo ciemnoszary","800000":"Rdzawy",FF6600:"Pomara\u0144czowy","808000":"Oliwkowy","008000":"Zielony","008080":"Morski","0000FF":"Niebieski","666699":"Siny","808080":"Szary",FF0000:"Czerwony",FF9900:"Bursztynowy","99CC00":"\u017b\u00f3\u0142tozielony","339966":"Akwamaryna","33CCCC":"Turkusowy","3366FF":"B\u0142\u0119kit kr\u00f3lewski","800080":"Purpurowy","999999":"\u015arednioszary",FF00FF:"Fuksja",FFCC00:"Z\u0142oty",FFFF00:"\u017b\u00f3\u0142ty","00FF00":"Limonkowy","00FFFF":"Cyjan","00CCFF":"B\u0142\u0119kitny","993366":"Br\u0105zowy",C0C0C0:"Srebrny",FF99CC:"R\u00f3\u017cowy",FFCC99:"Brzoskwiniowy",FFFF99:"Jasno\u017c\u00f3\u0142ty",CCFFCC:"Bladozielony",CCFFFF:"Bladoturkusowy","99CCFF":"Jasnob\u0142\u0119kitny",CC99FF:"\u015aliwkowy",FFFFFF:"Bia\u0142y"},aria:{"rich_text_area":"Pole tekstowe"},wordcount:{words:"S\u0142owa:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ps.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ps.js
new file mode 100644
index 000000000..fa24f83ca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ps.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ps:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/pt.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/pt.js
new file mode 100644
index 000000000..809f1c2d9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/pt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({pt:{common:{"more_colors":"Mais Cores","invalid_data":"Erro: Valores inv\u00e1lidos marcados em vermelho.","popup_blocked":"Detectamos que o seu bloqueador de popups bloqueou uma janela que \u00e9 essencial para a aplica\u00e7\u00e3o. Voc\u00ea precisa desativar o bloqueador de janelas de popups para utilizar esta ferramenta.","clipboard_no_support":"O seu browser n\u00e3o suporta esta fun\u00e7\u00e3o, use os atalhos do teclado.","clipboard_msg":"Copiar/recortar/colar n\u00e3o est\u00e1 dispon\u00edvel no Mozilla e Firefox. Deseja mais informa\u00e7\u00f5es sobre este problema?","not_set":"-- N/A --","class_name":"Classe",browse:"Procurar",close:"Fechar",cancel:"Cancelar",update:"Atualizar",insert:"Inserir",apply:"Aplicar","edit_confirm":"Deseja usar o modo de edi\u00e7\u00e3o avan\u00e7ado neste campo de texto?","invalid_data_number":"{#field} deve ser um n\u00famero","invalid_data_min":"{#field} deve ser um n\u00famero maior que {#min}","invalid_data_size":"{#field} deve ser um n\u00famero ou uma percentagem",value:"(valor)"},contextmenu:{full:"Justificado",right:"Direita",center:"Centro",left:"Esquerda",align:"Alinhamento"},insertdatetime:{"day_short":"Dom,Seg,Ter,Qua,Qui,Sex,Sab,Dom","day_long":"Domingo,Segunda-feira,Ter\u00e7a-feira,Quarta-feira,Quinta-feira,Sexta-feira,S\u00e1bado,Domingo","months_short":"Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez","months_long":"Janeiro,Fevereiro,Mar\u00e7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro","inserttime_desc":"Inserir hora","insertdate_desc":"Inserir data","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimir"},preview:{"preview_desc":"Pr\u00e9-visualizar"},directionality:{"rtl_desc":"Da direita para esquerda","ltr_desc":"Da esquerda para direita"},layer:{content:"Nova camada...","absolute_desc":"Alternar o posicionamento absoluto","backward_desc":"Mover para tr\u00e1s","forward_desc":"Mover para frente","insertlayer_desc":"Inserir nova camada"},save:{"save_desc":"Salvar","cancel_desc":"Cancelar todas as altera\u00e7\u00f5es"},nonbreaking:{"nonbreaking_desc":"Inserir um espa\u00e7o \"sem quebra\""},iespell:{download:"Plugin de ortografia n\u00e3o-detectado. Deseja instalar agora?","iespell_desc":"Verificar ortografia"},advhr:{"advhr_desc":"Separador horizontal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoticons","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Localizar/substituir","search_desc":"Localizar","delta_width":"","delta_height":""},advimage:{"image_desc":"Inserir/editar imagem","delta_width":"","delta_height":""},advlink:{"delta_width":"50","link_desc":"Inserir/editar hyperlink","delta_height":""},xhtmlxtras:{"attribs_desc":"Inserir/Editar atributos","ins_desc":"Inserir","del_desc":"Apagar","acronym_desc":"Acr\u00f4nimo","abbr_desc":"Abrevia\u00e7\u00e3o","cite_desc":"Cita\u00e7\u00e3o","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Editar CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Comando colar est\u00e1 em modo texto simples. Clique novamente para voltar para o modo normal.","plaintext_mode_sticky":"Comando colar est\u00e1 em modo texto simples. Clique novamente para voltar para o modo normal. Depois de colar alguma coisa retornar\u00e1 para o modo normal.","selectall_desc":"Selecionar tudo","paste_word_desc":"Colar (copiado do WORD)","paste_text_desc":"Colar como texto simples"},"paste_dlg":{"word_title":"Use CTRL+V para colar o texto na janela.","text_linebreaks":"Manter quebras de linha","text_title":"Use CTRL+V para colar o texto na janela."},table:{cell:"C\u00e9lula",col:"Coluna",row:"Linha",del:"Apagar tabela","copy_row_desc":"Copiar linha","cut_row_desc":"Recortar linha","paste_row_after_desc":"Colar linha depois","paste_row_before_desc":"Colar linha antes","props_desc":"Propriedades da tabela","cell_desc":"Propriedades das c\u00e9lulas","row_desc":"Propriedades das linhas","merge_cells_desc":"Unir c\u00e9lulas","split_cells_desc":"Dividir c\u00e9lulas","delete_col_desc":"Remover coluna","col_after_desc":"Inserir coluna depois","col_before_desc":"Inserir coluna antes","delete_row_desc":"Apagar linha","row_after_desc":"Inserir linha depois","row_before_desc":"Inserir linha antes",desc:"Inserir nova tabela","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Se restaurar o conte\u00fado, voc\u00ea ir\u00e1 perder tudo que est\u00e1 atualmente no editor.\n\nTem certeza que quer restaurar o conte\u00fado salvo?","restore_content":"Restaura conte\u00fado salvo automaticamente.","unload_msg":"As mudan\u00e7as efetuadas ser\u00e3o perdidas se sair desta p\u00e1gina."},fullscreen:{desc:"Tela Inteira"},media:{edit:"Editar m\u00eddia embutida",desc:"Inserir/Editar m\u00eddia embutida","delta_height":"","delta_width":""},fullpage:{desc:"Propriedades do Documento","delta_width":"","delta_height":""},template:{desc:"Inserir template"},visualchars:{desc:"Caracteres de controle visual ligado/desligado"},spellchecker:{desc:"Alternar verifica\u00e7\u00e3o ortogr\u00e1fica",menu:"Configura\u00e7\u00f5es de ortografia","ignore_word":"Ignorar palavra","ignore_words":"Ignorar tudo",langs:"Linguagens",wait:"Aguarde...",sug:"Sugest\u00f5es","no_sug":"Sem sugest\u00f5es","no_mpell":"N\u00e3o foram detectados erros de ortografia.","learn_word":"Aprender palavra"},pagebreak:{desc:"Inserir quebra de p\u00e1gina."},advlist:{types:"Tipos",def:"Padr\u00e3o","lower_alpha":"Alfabeto min\u00fasculo","lower_greek":"Alfabeto grego","lower_roman":"Num. romanos min\u00fasculos","upper_alpha":"Alfabeto mai\u00fasculos","upper_roman":"Num. romanos mai\u00fasculos",circle:"C\u00edrculo",disc:"Disco",square:"Quadrado"},colors:{"333300":"Oliva escuro","993300":"Laranja queimado","000000":"Preto","003300":"Verde escuro","003366":"Azul escuro","000080":"Azul marinho","333399":"\u00cdndigo","333333":"Cinza muito escuro","800000":"Marrom 1",FF6600:"Laranja","808000":"Oliva","008000":"Verde","008080":"Verde azulado","0000FF":"Azul","666699":"Azul acinzentado","808080":"Cinza",FF0000:"Vermelho",FF9900:"\u00c2mbar","99CC00":"Amarelo esverdeado","339966":"Verde mar","33CCCC":"Turquesa","3366FF":"Azul real","800080":"Roxo","999999":"Cinza m\u00e9dio",FF00FF:"Magenta",FFCC00:"Ouro",FFFF00:"Amarelo","00FF00":"Lima","00FFFF":"\u00c1gua","00CCFF":"Azul celeste","993366":"Marrom 2",C0C0C0:"Prata",FF99CC:"Rosa",FFCC99:"P\u00eassego",FFFF99:"Amarelo claro",CCFFCC:"Verde p\u00e1lido",CCFFFF:"Ciano p\u00e1lido","99CCFF":"Azul celeste claro",CC99FF:"Ameixa",FFFFFF:"Branco"},aria:{"rich_text_area":"\u00c1rea de texto rico"},wordcount:{words:"Palavras:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ro.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ro.js
new file mode 100644
index 000000000..ffa1ebbc3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ro.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ro:{common:{"more_colors":"Mai multe culori","invalid_data":"Eroare: Datele gre\u015fite sunt marcate cu ro\u015fu.","popup_blocked":"Ne pare r\u0103u, dar un popup-blocker a dezactivat o fereastr\u0103 de func\u021bii a aplica\u021biei. Trebuie s\u0103 dezactivezi popup-blocker-ul pentru acest site pentru a folosi aplica\u021bia la capacitate maxim\u0103.","clipboard_no_support":"Deocamdat\u0103 nu este suportat\u0103 de browser. Te rug\u0103m s\u0103 folose\u0219ti combina\u0163iile de taste.","clipboard_msg":"Copiere/T\u0103iere/Lipire nu sunt disponibile \u00een Mozilla \u015fi Firefox.\nDori\u0163i mai multe informa\u0163ii despre aceast\u0103 problem\u0103?","not_set":"-- Nesetat\u0103 --","class_name":"Clas\u0103",browse:"R\u0103sfoie\u015fte",close:"\u00cenchide",cancel:"Anulare",update:"Actualizeaz\u0103",insert:"Insereaz\u0103",apply:"Aplic\u0103","edit_confirm":"Vrei s\u0103 folose\u0219ti un editor avansat pentru aceast\u0103 zon\u0103 de text?","invalid_data_number":"{#field} trebuie s\u0103 fie un num\u0103r","invalid_data_min":"{#field} trebuie s\u0103 fie un num\u0103r mai mare dec\u00e2t {#min}","invalid_data_size":"{#field} trebuie s\u0103 fie un num\u0103r sau un procent",value:"(value)"},contextmenu:{full:"Pe toat\u0103 l\u0103\u021bimea",right:"Dreapta",center:"Centru",left:"St\u00e2nga",align:"Aliniere"},insertdatetime:{"day_short":"Dum,Lun,Mar,Mie,Joi,Vin,S\u00e2m,Dum","day_long":"Duminic\u0103,Luni,Mar\u021bi,Miercuri,Joi,Vineri,S\u00e2mb\u0103t\u0103,Duminic\u0103","months_short":"Ian,Feb,Mar,Apr,Mai,Iun,Iul,Aug,Sep,Oct,Noi,Dec","months_long":"Ianuarie,Februarie,Martie,Aprilie,Mai,Iunie,Iulie,August,Septembrie,Octombrie,Noiembrie,Decembrie ","inserttime_desc":"Insereaz\u0103 ora","insertdate_desc":"Insereaz\u0103 data","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Tip\u0103re\u0219te"},preview:{"preview_desc":"Previzualizare"},directionality:{"rtl_desc":"Direc\u021bia de la dreapta la st\u00e2nga","ltr_desc":"Direc\u021bia de la st\u00e2nga la dreapta"},layer:{content:"Strat nou ...","absolute_desc":"Pozi\u021bionare absolut\u0103","backward_desc":"Mut\u0103 \u00een spate","forward_desc":"Mut\u0103 \u00een fa\u021b\u0103","insertlayer_desc":"Insereaz\u0103 un strat"},save:{"save_desc":"Salveaz\u0103","cancel_desc":"Anuleaz\u0103 toate schimb\u0103rile"},nonbreaking:{"nonbreaking_desc":"Insereaz\u0103 un spa\u021biu"},iespell:{download:"ieSpell nu a fost detectat. Vrei s\u0103-l instalezi?","iespell_desc":"Verific\u0103 ortografia"},advhr:{"advhr_desc":"Linie orizontal\u0103","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Figurine","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Caut\u0103/\u00eenlocuie\u0219te","search_desc":"Caut\u0103","delta_width":"","delta_height":""},advimage:{"image_desc":"Inserare/editare imagine","delta_width":"","delta_height":""},advlink:{"link_desc":"Inserare/editare leg\u0103tur\u0103","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insereaz\u0103/editeaz\u0103 atribute","ins_desc":"Inserare","del_desc":"\u0218tergere","acronym_desc":"Acronim","abbr_desc":"Abreviere","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Editare CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Lipirea este acum \u00een modul text simplu. Apas\u0103 din nou pentru comutarea la modul normal de lipire.","plaintext_mode_sticky":"Lipirea este acum \u00een modul text simplu. Apas\u0103 aici pentru comutarea la modul normal de lipire. Dup\u0103 ce vei lipi ceva vei reveni la modul normal de lipire.","selectall_desc":"Selecteaz\u0103 tot","paste_word_desc":"Lipire din Word","paste_text_desc":"Lipire ca text simplu"},"paste_dlg":{"word_title":"Folose\u0219te CTRL V pentru a lipi \u00een aceast\u0103 zon\u0103.","text_linebreaks":"P\u0103streaz\u0103 separatoarele de linii.","text_title":"Folose\u0219te CTRL V pentru a lipi \u00een aceast\u0103 zon\u0103."},table:{cell:"Celul\u0103",col:"Coloan\u0103",row:"R\u00e2nd",del:"\u0218terge tabelul","copy_row_desc":"Copiaz\u0103 r\u00e2ndul","cut_row_desc":"Taie r\u00e2ndul","paste_row_after_desc":"Lipe\u015fte r\u00e2ndul dup\u0103","paste_row_before_desc":"Lipe\u015fte r\u00e2ndul \u00eenainte","props_desc":"Propriet\u0103\u021bi tabel","cell_desc":"Propriet\u0103\u021bi celul\u0103","row_desc":"Propriet\u0103\u021bi r\u00e2nd","merge_cells_desc":"Une\u0219te celulele","split_cells_desc":"Separ\u0103 celulele unite","delete_col_desc":"\u0218terge coloana","col_after_desc":"Inserare coloan\u0103 dup\u0103","col_before_desc":"Inserare coloan\u0103 \u00eenainte","delete_row_desc":"\u0218terge r\u00e2ndul","row_after_desc":"Insereaz\u0103 un r\u00e2nd dup\u0103","row_before_desc":"Insereaz\u0103 un r\u00e2nd \u00eenainte",desc:"Inserare/editare tabel","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Daca restaurezi continutul salvat vei pierde tot continutul existent din editor.\n\nSigur vrei sa restaurezi continutul salvat?","restore_content":"Restaureaz\u0103 con\u021binutul salvat automat.","unload_msg":"Modific\u0103rile nu vor fi salvate."},fullscreen:{desc:"Mod ecran complet"},media:{edit:"Editeaz\u0103 media",desc:"Insereaz\u0103 / editeaz\u0103 media","delta_height":"","delta_width":""},fullpage:{desc:"Propriet\u0103\u021bi document","delta_width":"","delta_height":""},template:{desc:"Insereaz\u0103 un \u0219ablon predefinit"},visualchars:{desc:"Comut\u0103 caracterele de control vizual"},spellchecker:{desc:"Comut\u0103 corectorul ortografic",menu:"Set\u0103ri corector ortografic","ignore_word":"Ignor\u0103 cuv\u00e2ntul","ignore_words":"Ignor\u0103 toate",langs:"Limbi",wait:"Te rog a\u0219teapt\u0103...",sug:"Sugestii","no_sug":"Nu sunt sugestii.","no_mpell":"Nu sunt gre\u0219eli.","learn_word":"\u00cenva\u021b\u0103 cuv\u00e2ntul"},pagebreak:{desc:"Insereaz\u0103 un separator de pagin\u0103 pentru tip\u0103rire"},advlist:{types:"Tipuri",def:"Implicit","lower_alpha":"Minuscule alfabetice","lower_greek":"Minuscule grece\u0219ti","lower_roman":"Minuscule romane","upper_alpha":"Majuscule alfabetice","upper_roman":"Majuscule romane",circle:"Cerc",disc:"Disc",square:"P\u0103trat"},colors:{"333300":"Oliv \u00eenchis","993300":"Portocaliu ars","000000":"Negru","003300":"Verde \u00eenchis","003366":"Azuriu \u00eenchis","000080":"Bleumarin","333399":"Indigo","333333":"Gri foarte \u00eenchis","800000":"Cafeniu",FF6600:"Portocaliu","808000":"Oliv","008000":"Verde","008080":"Albastru-verzui","0000FF":"Albastru","666699":"Albastru-gri","808080":"Gri",FF0000:"Ro\u0219u",FF9900:"Chihlimbar","99CC00":"Ocru","339966":"Verde marin","33CCCC":"Turcoaz","3366FF":"Albastur regal","800080":"Violet","999999":"Gri mediu",FF00FF:"Magenta",FFCC00:"Auriu",FFFF00:"Galben","00FF00":"Lime","00FFFF":"Ap\u0103","00CCFF":"Albastru cer","993366":"Maro",C0C0C0:"Argintiu",FF99CC:"Roz",FFCC99:"Piersic\u0103",FFFF99:"Galben deschis",CCFFCC:"Verde pal",CCFFFF:"Cyan pal","99CCFF":"Albastru-cer deschis",CC99FF:"Prun\u0103",FFFFFF:"Alb"},aria:{"rich_text_area":"Zon\u0103 de text formatat"},wordcount:{words:"Cuvinte:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ru.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ru.js
new file mode 100644
index 000000000..290aee239
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ru.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ru:{common:{"more_colors":"\u0414\u0440\u0443\u0433\u0438\u0435 \u0446\u0432\u0435\u0442\u0430...","invalid_data":"\u041e\u0448\u0438\u0431\u043a\u0430: \u0412\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043e\u043d\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u043c.","popup_blocked":"\u0411\u043b\u043e\u043a\u0438\u0440\u0430\u0442\u043e\u0440 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u043a\u043e\u043d \u0437\u0430\u043a\u0440\u044b\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043e\u043a\u043d\u043e. \u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0430\u0439\u0442\u0435.","clipboard_no_support":"\u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0412\u0430\u0448\u0438\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0433\u043e\u0440\u044f\u0447\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438.","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432\u044b\u0440\u0435\u0437\u043a\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 Firefox. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438: Ctrl C \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, Ctrl V \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c. \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e?","not_set":"- \u041d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e -","class_name":"\u041a\u043b\u0430\u0441\u0441",browse:"\u041e\u0431\u0437\u043e\u0440",close:"\u0417\u0430\u043a\u0440\u044b\u0442\u044c",cancel:"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c",update:"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c",insert:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c",apply:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c","edit_confirm":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WYSIWYG \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f?","invalid_data_number":"{#field} - \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0438\u0441\u043b\u043e","invalid_data_min":"{#field} - \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 {#min}","invalid_data_size":"{#field} - \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0438\u0441\u043b\u043e \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442",value:"(\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435)"},contextmenu:{full:"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0435",right:"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",center:"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",left:"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435"},insertdatetime:{"day_short":"\u0432\u0441,\u043f\u043d,\u0432\u0442,\u0441\u0440,\u0447\u0442,\u043f\u0442,\u0441\u0431,\u0432\u0441","day_long":"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435,\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a,\u0432\u0442\u043e\u0440\u043d\u0438\u043a,\u0441\u0440\u0435\u0434\u0430,\u0447\u0435\u0442\u0432\u0435\u0440\u0433,\u043f\u044f\u0442\u043d\u0438\u0446\u0430,\u0441\u0443\u0431\u0431\u043e\u0442\u0430,\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435","months_short":"\u044f\u043d\u0432,\u0444\u0435\u0432,\u043c\u0430\u0440\u0442,\u0430\u043f\u0440,\u043c\u0430\u0439,\u0438\u044e\u043d\u044c,\u0438\u044e\u043b\u044c,\u0430\u0432\u0433,\u0441\u0435\u043d,\u043e\u043a\u0442,\u043d\u043e\u044f,\u0434\u0435\u043a","months_long":"\u044f\u043d\u0432\u0430\u0440\u044c,\u0444\u0435\u0432\u0440\u0430\u043b\u044c,\u043c\u0430\u0440\u0442,\u0430\u043f\u0440\u0435\u043b\u044c,\u043c\u0430\u0439,\u0438\u044e\u043d\u044c,\u0438\u044e\u043b\u044c,\u0430\u0432\u0433\u0443\u0441\u0442,\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c,\u043e\u043a\u0442\u044f\u0431\u0440\u044c,\u043d\u043e\u044f\u0431\u0440\u044c,\u0434\u0435\u043a\u0430\u0431\u0440\u044c","inserttime_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f","insertdate_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0443","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"\u041f\u0435\u0447\u0430\u0442\u044c"},preview:{"preview_desc":"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440"},directionality:{"rtl_desc":"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","ltr_desc":"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e"},layer:{content:"\u041d\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0439","absolute_desc":"\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","backward_desc":"\u041d\u0430 \u0437\u0430\u0434\u043d\u0438\u0439 \u043f\u043b\u0430\u043d","forward_desc":"\u041d\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0439 \u043f\u043b\u0430\u043d","insertlayer_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u043e\u0439"},save:{"save_desc":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c","cancel_desc":"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f"},nonbreaking:{"nonbreaking_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0437\u0440\u044b\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u043b"},iespell:{download:"ieSpell \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c?","iespell_desc":"\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u044e"},advhr:{"advhr_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043c\u0430\u0439\u043b","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c","search_desc":"\u041d\u0430\u0439\u0442\u0438","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443","delta_height":""},xhtmlxtras:{"attribs_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442","ins_desc":"\u0417\u0430\u043c\u0435\u043d\u0430","del_desc":"\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435","acronym_desc":"\u0410\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0446\u0438\u044f","abbr_desc":"\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435","cite_desc":"\u0426\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c CSS \u0441\u0442\u0438\u043b\u044c","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u0435","paste_word_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0437 Word","paste_text_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e.","text_linebreaks":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u0441\u0442\u0440\u043e\u043a","text_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e."},table:{"cellprops_delta_width":"30",cell:"\u042f\u0447\u0435\u0439\u043a\u0430",col:"\u0421\u0442\u043e\u043b\u0431\u0435\u0446",row:"\u0421\u0442\u0440\u043e\u043a\u0430",del:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443","copy_row_desc":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","cut_row_desc":"\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","paste_row_after_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443","paste_row_before_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443","props_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b","cell_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u0435\u0439\u043a\u0438","row_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0440\u043e\u043a\u0438","merge_cells_desc":"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438","split_cells_desc":"\u0420\u0430\u0437\u0431\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443","delete_col_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446","col_after_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043f\u0440\u0430\u0432\u0430","col_before_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043b\u0435\u0432\u0430","delete_row_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","row_after_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443","row_before_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443",desc:"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435/\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044f\u043d\u044b.\n\n\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f?","restore_content":"\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435","unload_msg":"\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044f\u043d\u044b, \u0435\u0441\u043b\u0438 \u0412\u044b \u0443\u0439\u0434\u0435\u0442\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b."},fullscreen:{desc:"\u041f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c"},media:{"delta_height":"",edit:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0438\u043f\u0430",desc:"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043b\u0438\u043f","delta_width":""},fullpage:{desc:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","delta_width":"","delta_height":""},template:{desc:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d"},visualchars:{desc:"\u0412\u0441\u0435 \u0437\u043d\u0430\u043a\u0438"},spellchecker:{desc:"\u041f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",menu:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f","ignore_word":"\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c","ignore_words":"\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435",langs:"\u042f\u0437\u044b\u043a\u0438",wait:"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435...",sug:"\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b","no_sug":"\u041d\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432","no_mpell":"\u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e.","learn_word":"\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0441\u043b\u043e\u0432\u043e"},pagebreak:{desc:"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u044b\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b"},advlist:{types:"\u0421\u0438\u043c\u0432\u043e\u043b\u044b",def:"\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435","lower_alpha":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b","lower_greek":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b","lower_roman":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b","upper_alpha":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b","upper_roman":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b",circle:"\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438",disc:"\u041a\u0440\u0443\u0433\u0438",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u044b"},colors:{"333300":"\u0422\u0451\u043c\u043d\u043e-\u043e\u043b\u0438\u0432\u043a\u043e\u0432\u044b\u0439","993300":"\u0411\u0438\u0441\u043c\u0430\u0440\u043a-\u0444\u0443\u0440\u0438\u043e\u0437\u043e","000000":"\u0427\u0435\u0440\u043d\u044b\u0439","003300":"\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u044b\u0439","003366":"\u0422\u0451\u043c\u043d\u0430\u044f \u043b\u0430\u0437\u0443\u0440\u044c","000080":"\u0422\u0451\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439","333399":"\u0418\u043d\u0434\u0438\u0433\u043e","333333":"\u041e\u0447\u0435\u043d\u044c \u0442\u0451\u043c\u043d\u043e-\u0441\u0435\u0440\u044b\u0439","800000":"\u0422\u0451\u043c\u043d\u043e-\u0431\u043e\u0440\u0434\u043e\u0432\u044b\u0439",FF6600:"\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439","808000":"\u041e\u043b\u0438\u0432\u043a\u043e\u0432\u044b\u0439","008000":"\u0412\u043b\u044e\u0431\u043b\u0435\u043d\u043d\u043e\u0439 \u0436\u0430\u0431\u044b","008080":"C\u0438\u043d\u0435-\u0437\u0435\u043b\u0435\u043d\u044b\u0439","0000FF":"\u0421\u0438\u043d\u0438\u0439","666699":"\u0421\u0435\u0440\u043e-\u0433\u043e\u043b\u0443\u0431\u043e\u0439","808080":"\u0421\u0435\u0440\u044b\u0439",FF0000:"\u041a\u0440\u0430\u0441\u043d\u044b\u0439",FF9900:"\u042f\u043d\u0442\u0430\u0440\u043d\u044b\u0439","99CC00":"\u0416\u0451\u043b\u0442\u043e-\u0437\u0435\u043b\u0451\u043d\u044b\u0439","339966":"\u0411\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439","33CCCC":"\u042f\u0439\u0446\u0430 \u0434\u0440\u043e\u0437\u0434\u0430","3366FF":"\u041a\u043e\u0440\u043e\u043b\u0435\u0432\u0441\u043a\u0438\u0439 \u0441\u0438\u043d\u0438\u0439","800080":"\u0424\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u043e-\u0431\u0430\u043a\u043b\u0430\u0436\u0430\u043d\u043d\u044b\u0439","999999":"\u041a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0439",FF00FF:"\u041f\u0443\u0440\u043f\u0443\u0440\u043d\u044b\u0439",FFCC00:"\u0417\u043e\u043b\u043e\u0442\u043e\u0439",FFFF00:"\u0416\u0435\u043b\u0442\u044b\u0439","00FF00":"\u0417\u0435\u043b\u0435\u043d\u044b\u0439","00FFFF":"\u0426\u0438\u0430\u043d","00CCFF":"\u041d\u0435\u0431\u0435\u0441\u043d\u044b\u0439","993366":"\u0420\u043e\u0437\u043e\u0432\u0430\u0442\u043e-\u043b\u0438\u043b\u043e\u0432\u044b\u0439",C0C0C0:"\u0421\u0435\u0440\u0435\u0431\u0440\u0438\u0441\u0442\u044b\u0439",FF99CC:"\u0420\u043e\u0437\u043e\u0432\u044b\u0439",FFCC99:"\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u043e-\u043f\u0435\u0440\u0441\u0438\u043a\u043e\u0432\u044b\u0439",FFFF99:"\u0412\u0435\u0440\u0434\u0435\u043f\u0435\u0448\u0435\u0432\u044b\u0439",CCFFCC:"\u0417\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0447\u0430\u044f",CCFFFF:"\u0411\u043b\u0435\u0434\u043d\u043e-\u0441\u0438\u043d\u0438\u0439","99CCFF":"\u0421\u0432\u0435\u0442\u043b\u043e-\u043d\u0435\u0431\u0435\u0441\u043d\u044b\u0439",CC99FF:"\u0424\u0438\u0430\u043b\u043a\u043e\u0432\u044b\u0439",FFFFFF:"\u0411\u0435\u043b\u044b\u0439"},aria:{"rich_text_area":"\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440"},wordcount:{words:"\u0421\u043b\u043e\u0432:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sc.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sc.js
new file mode 100644
index 000000000..fe8e8033e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sc.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sc:{common:{"more_colors":"\u66f4\u591a\u989c\u8272","invalid_data":"\u9519\u8bef:\u65e0\u6548\u8f93\u5165\u503c\uff0c\u5df2\u6807\u8bb0\u4e3a\u7ea2\u8272\u3002 ","popup_blocked":"\u62b1\u6b49\uff01\u5f39\u51fa\u89c6\u7a97\u5df2\u88ab\u963b\u6b62\uff0c\u8bf7\u8c03\u6574\u6d41\u89c8\u5668\u8bbe\u7f6e\uff0c\u5141\u8bb8\u6b64\u7f51\u7ad9\u53ef\u5f39\u51fa\u65b0\u89c6\u7a97\uff0c\u4ee5\u4fbf\u4f7f\u7528\u6b64\u5de5\u5177","clipboard_no_support":"\u8fd8\u4e0d\u652f\u63f4\u60a8\u7684\u6d41\u89c8\u5668\uff0c\u8bf7\u4f7f\u7528\u952e\u76d8\u5feb\u6377\u65b9\u5f0f","clipboard_msg":"\u590d\u5236\u3001\u526a\u4e0b\u3001\u8d34\u4e0a\u529f\u80fd\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u3002 \n\u662f\u5426\u9700\u8981\u4e86\u89e3\u66f4\u591a\u6709\u5173\u6b64\u95ee\u9898\u7684\u8d44\u8baf\uff1f ","not_set":"--\u672a\u8bbe\u7f6e--","class_name":"\u6837\u5f0f",browse:"\u6d41\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5e94\u7528","edit_confirm":"\u662f\u5426\u5728\u6b64textarea\u6807\u7b7e\u5185\u4f7f\u7528\u300c\u6240\u89c1\u5373\u6240\u5f97\u300d\u6a21\u5f0f\uff1f ","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u4e24\u7aef\u5bf9\u9f50",right:"\u9760\u53f3\u5bf9\u9f50",center:"\u5c45\u4e2d\u5bf9\u9f50",left:"\u9760\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50\u65b9\u5f0f"},insertdatetime:{"day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u73b0\u5728\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u4eca\u5929\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u6587\u5b57\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u6587\u5b57\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u589e\u5c42...","absolute_desc":"\u5f00\u5173\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u7f6e\u540e","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u5c42"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u53d6\u6d88\u6240\u6709\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u767d\u683c"},iespell:{download:"\u672a\u68c0\u6d4b\u5230ieSpell\u7684\u5b58\u5728\u3002\u662f\u5426\u73b0\u5728\u7acb\u5373\u5b89\u88c5\uff1f ","iespell_desc":"\u62fc\u5199\u68c0\u67e5"},advhr:{"advhr_desc":"\u6c34\u5e73\u7ebf","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u56fe\u91ca","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u67e5\u627e/\u66ff\u6362","search_desc":"\u67e5\u627e","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"60","attribs_delta_width":"40","attribs_desc":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u9996\u5b57\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u6587","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7f16\u8f91CSS\u6837\u5f0f\u8868\u5355","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u5168\u9009","paste_word_desc":"\u4eceWord\u8d34\u4e0a","paste_text_desc":"\u4ee5\u7eaf\u6587\u672c\u8d34\u4e0a","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002 ","text_linebreaks":"\u4fdd\u7559\u6362\u884c\u7b26\u53f7","text_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002 "},table:{"merge_cells_delta_height":"40","merge_cells_delta_width":"40","table_delta_height":"60","table_delta_width":"40","cellprops_delta_height":"10","cellprops_delta_width":"10",cell:"\u5355\u683c",col:"\u5217",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u9009\u62e9\u884c","cut_row_desc":"\u526a\u4e0b\u9009\u62e9\u884c","paste_row_after_desc":"\u8d34\u5728\u4e0b\u884c","paste_row_before_desc":"\u8d34\u5728\u4e0a\u884c","props_desc":"\u8868\u683c\u5c5e\u6027","cell_desc":"\u5355\u683c\u5c5e\u6027","row_desc":"\u884c\u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u5355\u683c","split_cells_desc":"\u5206\u5272\u5355\u683c","delete_col_desc":"\u5220\u9664\u6240\u5728\u5217","col_after_desc":"\u63d2\u5165\u53f3\u65b9\u5217","col_before_desc":"\u63d2\u5165\u5de6\u65b9\u5217","delete_row_desc":"\u5220\u9664\u6240\u5728\u884c","row_after_desc":"\u63d2\u5165\u4e0b\u65b9\u884c","row_before_desc":"\u63d2\u5165\u4e0a\u65b9\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u5982\u679c\u79bb\u5f00\u6b64\u9875\u9762\u5c06\u5bfc\u81f4\u6240\u505a\u7684\u66f4\u6539\u5168\u90e8\u4e22\u5931\u3002 ","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u5f00\u5173\u5168\u5c4f\u6a21\u5f0f"},media:{edit:"\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53",desc:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53","delta_height":"","delta_width":""},fullpage:{desc:"\u6863\u5c5e\u6027","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9884\u5b9a\u7684\u8303\u672c\u5185\u5bb9"},visualchars:{desc:"\u663e\u793a\u63a7\u5236\u7b26\u53f7\u5f00/\u5173\u3002 "},spellchecker:{desc:"\u5f00\u5173\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5199\u68c0\u67e5\u8bbe\u7f6e","ignore_word":"\u7565\u8fc7","ignore_words":"\u5168\u90e8\u7565\u8fc7",langs:"\u8bed\u8a00",wait:"\u8bf7\u7a0d\u5019...",sug:"\u63a8\u8350\u5b57\u8bcd","no_sug":"\u65e0\u62fc\u5199\u63a8\u8350","no_mpell":"\u672a\u53d1\u73b0\u62fc\u5199\u9519\u8bef","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26\u53f7"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/se.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/se.js
new file mode 100644
index 000000000..b6733b599
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/se.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({se:{common:{"more_colors":"Fler f\u00e4rger","invalid_data":"Fel: Inkorrekta v\u00e4rden har matats in, dessa \u00e4r markerade i r\u00f6tt.","popup_blocked":"Popup blockerare detekterad. St\u00e4ng av den s\u00e5 att dialogerna kan \u00f6ppnas.","clipboard_no_support":"Funktionen \u00e4r inte tillg\u00e4nglig i din webbl\u00e4sare, anv\u00e4nd tangentbordsgenv\u00e4garna i st\u00e4llet.","clipboard_msg":"Kopiera/klipp ut/klistra in \u00e4r inte tillg\u00e4ngligt i din webbl\u00e4sare.\nVill du veta mer?","not_set":"-- Inte satt --","class_name":"Klass",browse:"Bl\u00e4ddra",close:"St\u00e4ng",cancel:"Avbryt",update:"Uppdatera",insert:"Infoga",apply:"Applicera","edit_confirm":"Vill du anv\u00e4nda WYSIWYG l\u00e4get f\u00f6r denna textarea.","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Utfyllnad",right:"H\u00f6ger",center:"Centrerad",left:"V\u00e4nster",align:"Justering"},insertdatetime:{"day_short":"S\u00f6n,M\u00e5n,Tis,Ons,Tors,Fre,L\u00f6r,S\u00f6n","day_long":"S\u00f6ndag,M\u00e5ndag,Tisdag,Onsdag,Torsdag,Fredag,L\u00f6rdag,S\u00f6ndag","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","months_long":"Januari,Februari,Mars,April,Maj,Juni,Juli,Augusti,September,Oktober,November,December","inserttime_desc":"Infoga tid","insertdate_desc":"Infoga datum","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d "},print:{"print_desc":"Skriv ut"},preview:{"preview_desc":"F\u00f6rhandsgranska"},directionality:{"rtl_desc":"Skriftl\u00e4ge - h\u00f6ger till v\u00e4nster","ltr_desc":"Skriftl\u00e4ge - v\u00e4nster till h\u00f6ger"},layer:{content:"Nytt lager...","absolute_desc":"Sl\u00e5 av/p\u00e5 absolut positionering","backward_desc":"Flytta bak\u00e5t","forward_desc":"Flytta fram\u00e5t","insertlayer_desc":"Infoga nytt lager"},save:{"save_desc":"Spara","cancel_desc":"Hoppa \u00f6ver alla f\u00f6r\u00e4ndringar"},nonbreaking:{"nonbreaking_desc":"Infoga icke radbrytande mellanslag"},iespell:{download:"ieSpell kunde inte hittas, vill du installera denna nu?","iespell_desc":"R\u00e4ttstava"},advhr:{"advhr_desc":"Horisontell skiljelinje","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smileys","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f6k/ers\u00e4tt","search_desc":"S\u00f6k","delta_width":"","delta_height":""},advimage:{"image_desc":"Infoga/redigera bild","delta_width":"","delta_height":""},advlink:{"link_desc":"Infoga/redigera l\u00e4nk","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Redigera attribut","ins_desc":"Markera som tillagt","del_desc":"Markera som struket","acronym_desc":"Akronym","abbr_desc":"F\u00f6rkortning","cite_desc":"citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Redigera inline CSS","delta_height":"","delta_width":""},paste:{"selectall_desc":"Markera allt","paste_word_desc":"Klistra in fr\u00e5n Word","paste_text_desc":"Klistra in som text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster.","text_linebreaks":"Spara radbrytningar","text_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster."},table:{cell:"Cell",col:"Kolumn",row:"Rad",del:"Radera tabell","copy_row_desc":"Klistra in rad","cut_row_desc":"Klipp ut rad","paste_row_after_desc":"Klistra in rad efter","paste_row_before_desc":"Klistra in rad ovanf\u00f6r","props_desc":"Tabellinst\u00e4llningar","cell_desc":"Tabellcellsinst\u00e4llningar","row_desc":"Tabellradsinst\u00e4llningar","merge_cells_desc":"Sammanfoga celler","split_cells_desc":"Separera sammansatta celler","delete_col_desc":"Radera kolumn","col_after_desc":"Infoga kolumn efter","col_before_desc":"Infoga kolumn f\u00f6re","delete_row_desc":"Radera rad","row_after_desc":"Infoga ny rad efter","row_before_desc":"Infoga ny rad f\u00f6re",desc:"Infoga/redigera ny tabell","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"F\u00f6r\u00e4ndringarna du gjorde kommer att g\u00e5 f\u00f6rlorade om du v\u00e4ljer att l\u00e4mna denna sida.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Sl\u00e5 av/p\u00e5 fullsk\u00e4rmsl\u00e4ge"},media:{edit:"Redigera inb\u00e4ddad media",desc:"Infoga/redigera inb\u00e4ddad media","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentinst\u00e4llningar","delta_width":"","delta_height":""},template:{desc:"Infoga en f\u00e4rdig mall"},visualchars:{desc:"Visa osynliga tecken"},spellchecker:{desc:"Sl\u00e5 av/p\u00e5 r\u00e4ttstavningskontroll",menu:"R\u00e4ttstavningsinst\u00e4llningar","ignore_word":"Ignorera ord","ignore_words":"Ignorera alla",langs:"Spr\u00e5k",wait:"Var god v\u00e4nta...",sug:"F\u00f6rslag","no_sug":"Inga f\u00f6rslag","no_mpell":"Kunde inte finna n\u00e5gra felstavningar.","learn_word":"Learn word"},pagebreak:{desc:"Infoga sidbrytning"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/si.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/si.js
new file mode 100644
index 000000000..cbc9e8919
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/si.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({si:{common:{"more_colors":"\u0dad\u0dc0\u0dad\u0dca \u0dc0\u0dbb\u0dca\u0dab","invalid_data":"\u0dc0\u0dbb\u0daf: \u0dc0\u0dbd\u0d82\u0d9c\u0dd4 \u0db1\u0ddc\u0db8\u0dd0\u0dad\u0dd2 \u0d85\u0d9c\u0dba\u0db1\u0dca \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dbb \u0d87\u0dad,\u0d91\u0db8 \u0d85\u0d9c\u0dba\u0db1\u0dca \u0dbb\u0dad\u0dd4 \u0db4\u0dcf\u0da7\u0dd2\u0db1\u0dca \u0dc3\u0dc5\u0d9a\u0dd4\u0dab\u0dd4 \u0d9a\u0dbb \u0d87\u0dad.","popup_blocked":"\u0d94\u0db6\u0d9c\u0dda popup-blocker \u0db8\u0d9f\u0dd2\u0db1\u0dca \u0d8b\u0db4\u0dba\u0ddd\u0d9c\u0dd2 \u0dc3\u0dda\u0dc0\u0dcf\u0dc0\u0db1\u0dca \u0dc3\u0db4\u0dba\u0db1 \u0d9a\u0dc0\u0dd4\u0dbd\u0dd4\u0dc0\u0d9a\u0dca \u0d85\u0db6\u0dbd \u0d9a\u0dbb \u0d87\u0dad.\u0d91\u0db6\u0dd0\u0dc0\u0dd2\u0db1\u0dca \u0d94\u0db6\u0da7 popup-blocker \u0dba \u0d85\u0d9a\u0dca\u200d\u0dbb\u0dd3\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0da7 \u0dc3\u0dd2\u0daf\u0dd4\u0dc0\u0dda. ","clipboard_no_support":"\u0daf\u0dd0\u0db1\u0da7 \u0db4\u0dca\u200d\u0dbb\u0daf\u0dbb\u0dca\u0dc1\u0d9a\u0dba \u0db8\u0d9f\u0dd2\u0db1\u0dca \u0db8\u0dd9\u0db8 \u0dc3\u0dda\u0dc0\u0dba \u0dc3\u0db4\u0dba\u0dcf \u0db1\u0dd0\u0dad,\u0d91\u0db6\u0dd0\u0dc0\u0dd2\u0db1\u0dca \u0dba\u0dad\u0dd4\u0dbb\u0dd4\u0db4\u0dd4\u0dc0\u0dbb\u0dd4\u0dc0 \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0db1\u0dca\u0db1.","clipboard_msg":"\u0db4\u0dd2\u0da7\u0db4\u0dad\u0dca \u0d9a\u0dd2\u0dbb\u0dd3\u0db8/\u0d89\u0dc0\u0dad\u0dca \u0d9a\u0dd2\u0dbb\u0dd3\u0db8/\u0d87\u0dbd\u0dc0\u0dd3\u0db8 \u0db8\u0ddc\u0dc3\u0dd2\u0dbd\u0dca\u0dbd\u0dcf \u0dc4\u0dcf \u0dc6\u0dba\u0dbb\u0dca \u0dc6\u0ddc\u0d9a\u0dca\u0dc3\u0dca \u0dc4\u0dd2 \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0db1\u0ddc\u0dc0\u0dda.\n\u0d94\u0db6\u0da7 \u0db8\u0dda \u0db4\u0dd2\u0dc5\u0dd2\u0db6\u0db3\u0dc0 \u0dad\u0da0\u0daf\u0dd4\u0dbb\u0da7\u0dad\u0dca \u0dad\u0ddc\u0dbb\u0dad\u0dd4\u0dbb\u0dd4 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0dc0\u0dda\u0daf?","not_set":"-- Not set --","class_name":"\u0dc3\u0db8\u0dd6\u0dc4\u0dba",browse:"Browse",close:"\u0d89\u0dc0\u0dad\u0dca\u0dc0\u0db1\u0dca\u0db1",cancel:"\u0d85\u0dc0\u0dbd\u0d82\u0d9c\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1",update:"\u0d85\u0dbd\u0dd4\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1",insert:"\u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1",apply:"\u0dba\u0ddc\u0daf\u0db1\u0dca\u0db1","edit_confirm":"\u0d94\u0db6\u0da7 \u0db8\u0dd9\u0db8 \u0db4\u0dcf\u0da8\u0dba\u0db1\u0dca \u0dc3\u0db3\u0dc4\u0dcf WYSIWYG \u0d86\u0d9a\u0dcf\u0dbb\u0dba?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u0db4\u0dd6\u0dbb\u0dca\u0dab\u0dc0",right:"\u0daf\u0d9a\u0dd4\u0dab\u0da7",center:"\u0db8\u0dd0\u0daf\u0da7",left:"\u0dc0\u0db8\u0da7",align:"\u0db4\u0dd9\u0dc5 \u0d9c\u0dd0\u0db1\u0dca\u0dc0\u0dd4\u0db8"},insertdatetime:{"day_short":"\u0d89\u0dbb\u0dd2\u0daf\u0dcf,\u0dc3\u0db3\u0dd4\u0daf\u0dcf,\u0d85\u0d9f.,\u0db6\u0daf\u0dcf\u0daf\u0dcf,\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca.,\u0dc3\u0dd2\u0d9a\u0dd4.,\u0dc3\u0dd9\u0db1.","day_long":"\u0d89\u0dbb\u0dd2\u0daf\u0dcf,\u0dc3\u0db3\u0dd4\u0daf\u0dcf,\u0d85\u0d9f\u0dc4\u0dbb\u0dd0\u0dc0\u0dcf\u0daf\u0dcf,\u0db6\u0daf\u0dcf\u0daf\u0dcf,\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf,\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf,\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf","months_short":"\u0da2\u0db1.,\u0db4\u0dd9\u0db6.,\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4,\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca,\u0db8\u0dd0\u0dba\u0dd2,\u0da2\u0dd6\u0db1\u0dd2,\u0da2\u0dd6\u0dbd\u0dd2,\u0d85\u0d9c\u0ddd.,\u0dc3\u0dd0\u0dca.,\u0d94\u0d9a\u0dca.,\u200d\u0db1\u0ddc\u0dc0\u0dd0.,\u0daf\u0dd9\u0dc3\u0dd0.","months_long":"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2,\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2,\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4,\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca,\u0db8\u0dd0\u0dba\u0dd2,\u0da2\u0dd6\u0db1\u0dd2,\u0da2\u0dd6\u0dbd\u0dd2,\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4,\u0dc3\u0dd0\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca,\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca,\u200d\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca,\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca","inserttime_desc":"\u0dc0\u0dda\u0dbd\u0dcf\u0dc0 \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","insertdate_desc":"\u0daf\u0dd2\u0db1\u0dba \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","time_fmt":"%\u0db4\u0dd0\u0dba:%\u0db8\u0dd2\u0dc3:%\u0dad\u0dad\u0dca","date_fmt":"%\u0d85\u0dc0\u0dd4-%\u0db8\u0dcf\u0dc3-%\u0daf\u0dd2\u0db1"},print:{"print_desc":"\u0db8\u0dd4\u0daf\u0dca\u200d\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dc0\u0dcf"},preview:{"preview_desc":"\u0db4\u0dd6\u0dbb\u0dca\u0dc0 \u0daf\u0dbb\u0dca\u0dc1\u0db1\u0dba"},directionality:{"rtl_desc":"\u0daf\u0d9a\u0dd4\u0dab\u0dda \u0dc3\u0dd2\u0da7 \u0dc0\u0db8\u0da7 \u0daf\u0dd2\u0dc1\u0dcf\u0dc0","ltr_desc":"\u0dc0\u0db8\u0dda \u0dc3\u0dd2\u0da7 \u0daf\u0d9a\u0dd4\u0dab\u0da7 \u0daf\u0dd2\u0dc1\u0dcf\u0dc0"},layer:{content:"\u0d85\u0dbd\u0dd4\u0dad\u0dca \u0dc3\u0dca\u0dae\u0dbb\u0dba\u0d9a\u0dca...","absolute_desc":"Toggle absolute positioning","backward_desc":"\u0db4\u0dc3\u0dd4\u0db4\u0dc3\u0da7 \u0d9c\u0dd9\u0db1\u0dba\u0db1\u0dca\u0db1","forward_desc":"\u0d89\u0daf\u0dd2\u0dbb\u0dd2\u0dba\u0da7 \u0d9c\u0dd9\u0db1\u0dba\u0db1\u0dca\u0db1","insertlayer_desc":"\u0d85\u0db5\u0dad\u0dca \u0dc3\u0dca\u0dae\u0dbb\u0dba\u0d9a\u0dca \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1"},save:{"save_desc":"\u0dc3\u0dd4\u0dbb\u0d9a\u0dd2\u0db1\u0dca\u0db1","cancel_desc":"\u0d85\u0dc0\u0dbd\u0d82\u0d9c\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell \u0d85\u0db1\u0dcf\u0dc0\u0dbb\u0db1\u0dba \u0dc0\u0dd6\u0dba\u0dda \u0db1\u0dd0\u0dad. \u0d94\u0db6\u0da7 \u0d91\u0dba \u0db4\u0dd2\u0dc4\u0dd2\u0da7\u0dd4\u0dc0\u0dd3\u0db8\u0da7 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0daf?","iespell_desc":"\u0d85\u0d9a\u0dca\u0dc2\u0dbb \u0dc0\u0dd2\u0db1\u0dca\u200d\u0dba\u0dcf\u0dc3\u0dba \u0db4\u0dbb\u0dd3\u0d9a\u0dc2\u0dcf \u0d9a\u0dbb\u0db1\u0dca\u0db1"},advhr:{"advhr_desc":"Horizontale rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sk.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sk.js
new file mode 100644
index 000000000..f25f268ac
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sk:{common:{"more_colors":"Viac farieb...","invalid_data":"Chyba: Boli zadan\u00e9 neplatn\u00e9 hodnoty a tieto boli ozna\u010den\u00e9 \u010dervenou farbou.","popup_blocked":"Blokovanie vyskakovac\u00edch okien neumo\u017enilo otvori\u0165 okno, ktor\u00e9 poskytuje funk\u010dnos\u0165 aplik\u00e1cie. Pre pln\u00e9 vyu\u017eitie mo\u017enost\u00ed aplik\u00e1cie mus\u00edte vypn\u00fa\u0165 blokovanie vyskakovac\u00edch okien pre tento web.","clipboard_no_support":"T\u00e1to funkcia nie je va\u0161\u00edm prehliada\u010dom podporovan\u00e1. Pou\u017eite namiesto toho kl\u00e1vesov\u00fa skratku.","clipboard_msg":"Funkcie kop\u00edrova\u0165/vystrihn\u00fa\u0165/vlo\u017ei\u0165 nie s\u00fa prehliada\u010dom Mozilla Firefox podporovan\u00e9.\nChcete viac inform\u00e1ci\u00ed o tomto probl\u00e9me?","not_set":"-- Nezadan\u00e9 --","class_name":"Trieda",browse:"Prech\u00e1dza\u0165",close:"Zavrie\u0165",cancel:"Storno",update:"Aktualizova\u0165",insert:"Vlo\u017ei\u0165",apply:"Pou\u017ei\u0165","edit_confirm":"Chcete pou\u017ei\u0165 WYSIWYG re\u017eim pre tento text?","invalid_data_number":"{#field} mus\u00ed by\u0165 \u010d\u00edslo","invalid_data_min":"{#field} mus\u00ed by\u0165 \u010d\u00edslo v\u00e4\u010d\u0161ie ako {#min}","invalid_data_size":"{#field} mus\u00ed by\u0165 \u010d\u00edslo lebo percento",value:"(hodnota)"},contextmenu:{full:"Do bloku",right:"Doprava",center:"Na stred",left:"Do\u013eava",align:"Zarovnanie"},insertdatetime:{"day_short":"Ne,Po,Ut,St,\u0160t,Pi,So,Ne","day_long":"Nede\u013ea,Pondelok,Utorok,Streda,\u0160tvrtok,Piatok,Sobota,Nede\u013ea","months_short":"Jan,Feb,Mar,Apr,M\u00e1j,J\u00fan,J\u00fal,Aug,Sep,Okt,Nov,Dec","months_long":"Janu\u00e1r,Febru\u00e1r,Marec,Apr\u00edl,M\u00e1j,J\u00fan,J\u00fal,August,September,Okt\u00f3ber,November,December","inserttime_desc":"Vlo\u017ei\u0165 \u010das","insertdate_desc":"Vlo\u017ei\u0165 d\u00e1tum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Tla\u010d"},preview:{"preview_desc":"N\u00e1h\u013ead"},directionality:{"rtl_desc":"Smer sprava do\u013eava","ltr_desc":"Smer z\u013eava doprava"},layer:{content:"Nov\u00e1 vrstva...","absolute_desc":"Prepn\u00fa\u0165 na absol\u00fatne poz\u00edciovanie","backward_desc":"Presun\u00fa\u0165 dozadu","forward_desc":"Presun\u00fa\u0165 dopredu","insertlayer_desc":"Vlo\u017ei\u0165 nov\u00fa vrstvu"},save:{"save_desc":"Ulo\u017ei\u0165","cancel_desc":"Zru\u0161i\u0165 v\u0161etky zmeny"},nonbreaking:{"nonbreaking_desc":"Vlo\u017ei\u0165 nerozdelite\u013en\u00fa medzeru"},iespell:{download:"Pr\u00edtomnos\u0165 slovn\u00edkaieSpell nebola zisten\u00e1. Chcete slovn\u00edk nain\u0161talova\u0165?","iespell_desc":"Spusti\u0165 kontrolu pravopisu"},advhr:{"advhr_desc":"Vodorovn\u00fd odde\u013eova\u010d","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotikony","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"H\u013eada\u0165 a nahradi\u0165","search_desc":"H\u013eada\u0165","delta_width":"","delta_height":""},advimage:{"delta_width":"40","image_desc":"Vlo\u017ei\u0165/upravi\u0165 obr\u00e1zok","delta_height":""},advlink:{"link_desc":"Vlo\u017ei\u0165/upravi\u0165 odkaz","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Vlo\u017ei\u0165/upravi\u0165 atrib\u00faty","ins_desc":"Pridan\u00fd text","del_desc":"Odstr\u00e1nen\u00fd text","acronym_desc":"Akronym","abbr_desc":"Skratka","cite_desc":"Cit\u00e1cia","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_width":"35",desc:"Upravi\u0165 CSS \u0161t\u00fdl","delta_height":""},paste:{"plaintext_mode":"Funkcia vlo\u017ei\u0165 je teraz v re\u017eime prost\u00fd text. Op\u00e4tovn\u00e9 kliknutie prepne t\u00fato funkciu nasp\u00e4\u0165 do norm\u00e1lneho re\u017eimu.","plaintext_mode_sticky":"Funkcia vlo\u017ei\u0165 je teraz v re\u017eime prost\u00fd text. Op\u00e4tovn\u00e9 kliknutie prepne t\u00fato funkciu nasp\u00e4\u0165 do norm\u00e1lneho re\u017eimu. Po vlo\u017een\u00ed \u010dohoko\u013evek bude t\u00e1to funkcia navr\u00e1ten\u00e1 sp\u00e4\u0165 do norm\u00e1lneho re\u017eimu.","selectall_desc":"Ozna\u010di\u0165 v\u0161etko","paste_word_desc":"Vlo\u017ei\u0165 z MS Word","paste_text_desc":"Vlo\u017ei\u0165 ako prost\u00fd text"},"paste_dlg":{"word_title":"Pou\u017eite CTRL+V pre vlo\u017eenie textu do okna.","text_linebreaks":"Zachova\u0165 zalamovanie riadkov","text_title":"Pou\u017eite CTRL+V pre vlo\u017eenie textu do okna."},table:{"table_delta_width":"50","cellprops_delta_width":"105",cell:"Bunka",col:"St\u013apec",row:"Riadok",del:"Odstr\u00e1ni\u0165 tabu\u013eku","copy_row_desc":"Kop\u00edrova\u0165 riadok tabu\u013eky","cut_row_desc":"Vystrihn\u00fa\u0165 riadok tabu\u013eky","paste_row_after_desc":"Vlo\u017ei\u0165 riadok za","paste_row_before_desc":"Vlo\u017ei\u0165 riadok pred","props_desc":"Vlastnosti tabu\u013eky","cell_desc":"Vlastnosti bunky","row_desc":"Vlastnosti riadky tabu\u013eky","merge_cells_desc":"Zl\u00fa\u010di\u0165 bunky","split_cells_desc":"Rozdeli\u0165 bunky","delete_col_desc":"Odstr\u00e1ni\u0165 st\u013apec tabu\u013eky","col_after_desc":"Vlo\u017ei\u0165 st\u013apec za","col_before_desc":"Vlo\u017ei\u0165 st\u013apec pred","delete_row_desc":"Odstr\u00e1ni\u0165 riadok tabu\u013eky","row_after_desc":"Vlo\u017ei\u0165 riadok za","row_before_desc":"Vlo\u017ei\u0165 riadok pred",desc:"Vlo\u017ei\u0165 nov\u00fa tabu\u013eku","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Pokia\u013e obnov\u00edte ulo\u017een\u00fd obsah, strat\u00edte t\u00fdm v\u0161etok obsah, ktor\u00fd je pr\u00e1ve v okne editora.\n\nSkuto\u010dne chcete obnovi\u0165 ulo\u017een\u00fd obsah?","restore_content":"Obnovi\u0165 automaticky ulo\u017een\u00fd obsah.","unload_msg":"Preveden\u00e9 zmeny m\u00f4\u017eu by\u0165 straten\u00e9, ak opust\u00edte t\u00fato str\u00e1nku."},fullscreen:{desc:"Prepn\u00fa\u0165 na celostr\u00e1nkov\u00e9 zobrazenie"},media:{"delta_width":"180",edit:"Upravi\u0165 pripojen\u00e9 m\u00e9di\u00e1",desc:"Vlo\u017ei\u0165/upravi\u0165 m\u00e9di\u00e1","delta_height":""},fullpage:{desc:"Vlastnosti dokumentu","delta_width":"","delta_height":""},template:{desc:"Vlo\u017ei\u0165 preddefinovan\u00fd obsah zo \u0161abl\u00f3ny"},visualchars:{desc:"Zobrazenie skryt\u00fdch znakov zap/vyp"},spellchecker:{desc:"Prepn\u00fa\u0165 kontrolu pravopisu",menu:"Nastavenie kontroly pravopisu","ignore_word":"Vynecha\u0165 slovo","ignore_words":"Vynecha\u0165 v\u0161etky",langs:"Jazyky",wait:"\u010cakajte pros\u00edm...",sug:"Ponuky","no_sug":"\u017diadne ponuky","no_mpell":"Bez pravopisn\u00fdch ch\u00fdb.","learn_word":"Nau\u010di\u0165 slovo"},pagebreak:{desc:"Vlo\u017ei\u0165 zalomenie str\u00e1nky."},advlist:{types:"Typ",def:"Predvolen\u00fd","lower_alpha":"Mal\u00e9 p\u00edsmen\u00e1","lower_greek":"Mal\u00e9 gr\u00e9cke p\u00edsmen\u00e1","lower_roman":"Mal\u00e9 r\u00edmske \u010d\u00edslice","upper_alpha":"Ve\u013ek\u00e9 p\u00edsmen\u00e1","upper_roman":"Ve\u013ek\u00e9 r\u00edmske \u010d\u00edslice",circle:"Kr\u00fa\u017eok",disc:"Pln\u00e9 koliesko",square:"\u0160tvor\u010dek"},colors:{"333300":"Tmavo olivov\u00e1","993300":"Tmavo oran\u017eov\u00e1","000000":"\u010cierna","003300":"Tmavo zelen\u00e1","003366":"Tmavo az\u00farov\u00e1","000080":"N\u00e1morn\u00edcka modr\u00e1","333399":"Indigo modr\u00e1","333333":"Tmavo siv\u00e1","800000":"Tmavo \u010derven\u00e1",FF6600:"Oran\u017eov\u00e1","808000":"Olivov\u00e1","008000":"Zelen\u00e1","008080":"Modrozelen\u00e1","0000FF":"Modr\u00e1","666699":"\u0160edomodr\u00e1","808080":"Siv\u00e1",FF0000:"\u010cerven\u00e1",FF9900:"Jant\u00e1rov\u00e1","99CC00":"\u017dltozelen\u00e1","339966":"Morsky zelen\u00e1","33CCCC":"Tyrkysov\u00e1","3366FF":"Kr\u00e1\u013eovsk\u00e1 modr\u00e1","800080":"Nachov\u00e1","999999":"Svetlo siv\u00e1",FF00FF:"Purpurov\u00e1",FFCC00:"Zlat\u00e1",FFFF00:"\u017dlt\u00e1","00FF00":"Limetkov\u00e1","00FFFF":"Vodov\u00e1","00CCFF":"Nebesk\u00e1 modr\u00e1","993366":"Hned\u00e1",C0C0C0:"Strieborn\u00e1",FF99CC:"Ru\u017eov\u00e1",FFCC99:"Brosky\u0148ov\u00e1",FFFF99:"Svetlo\u017elt\u00e1",CCFFCC:"Svetlo zelen\u00e1",CCFFFF:"Svetlo az\u00farov\u00e1","99CCFF":"Svetl\u00e1 nebesk\u00e1 modr\u00e1",CC99FF:"Slivkov\u00e1",FFFFFF:"Biela"},aria:{"rich_text_area":"Oblas\u0165 s form\u00e1tovan\u00fdm textom"},wordcount:{words:"Po\u010det slov: "}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sl.js
new file mode 100644
index 000000000..26d858ed5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sl:{common:{"more_colors":"Ve\u010d barv","invalid_data":"Napaka: vne\u0161ene so bile nepravilne vrednosti, ozna\u010dene so z rde\u010do.","popup_blocked":"\u017dal va\u0161e orodje za prepre\u010devanje odpiranja neza\u017eelenih oken (popup-blocker) ne omogo\u010da prikaza pomo\u017enega okna izbranega orodja. Prepre\u010devanje odpiranja oken morate onemogo\u010diti.","clipboard_no_support":"Trenutno ni podporto v va\u0161em brskalniku. Uporabite bli\u017enjice tipkovnice.","clipboard_msg":"Delo z odlo\u017ei\u0161\u010dem ni mogo\u010de v tem brskalniku. Lahko uporabljate kombinacije tipk Ctrl+X, Ctrl+C, Ctrl+V.\n\u017delite ve\u010d informacij o tem?","not_set":"-- ni nastavljeno --","class_name":"Razred",browse:"Prebrskaj",close:"Zapri",cancel:"Prekli\u010di",update:"Posodobi",insert:"Vstavi",apply:"Uporabi","edit_confirm":"\u017delite uporabiti na\u010din \\\'videz ne vara\\\' (WYSIWYG) za to vnosno polje?","invalid_data_number":"{#field} mora biti veljavno \u0161tevilo","invalid_data_min":"{#field} mora biti ve\u010dje od {#min}","invalid_data_size":"{#field} mora biti \u0161tevilo ali odstotek",value:"(vrednost)"},contextmenu:{full:"Polno",right:"Desno",center:"Sredina",left:"Levo",align:"Poravnava"},insertdatetime:{"day_short":"ned,pon,tor,sre,\u010det,pet,sob,ned","day_long":"nedelja,ponedeljek,torek,sreda,\u010detrtek,petek,sobota,nedelja","months_short":"jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec","months_long":"januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december","inserttime_desc":"Vstavi \u010das","insertdate_desc":"Vstavi datum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Natisni"},preview:{"preview_desc":"Predogled"},directionality:{"rtl_desc":"Smer od desne proti levi","ltr_desc":"Smer od leve proti desni"},layer:{content:"Nov sloj...","absolute_desc":"Preklop absolutnega polo\u017eaja","backward_desc":"Premakni v ozadje","forward_desc":"Premakni v ospredje","insertlayer_desc":"Vstavi nov sloj"},save:{"save_desc":"Shrani","cancel_desc":"Prekli\u010di vse spremembe"},nonbreaking:{"nonbreaking_desc":"Vstavi nedeljivi presledek"},iespell:{download:"ieSpell ni zaznan. \u017delite, da ga namestim?","iespell_desc":"Za\u017eeni preverjanje \u010drkovanja"},advhr:{"delta_height":"spremeba_vi\u0161ine","delta_width":"sprememba_\u0161irine","advhr_desc":"Vodoravna \u010drta"},emotions:{"delta_height":"delta_vi\u0161ina","delta_width":"delta_\u0161irina","emotions_desc":"Sme\u0161ki"},searchreplace:{"replace_desc":"Najdi/zamenjaj","search_desc":"Najdi","delta_width":"","delta_height":""},advimage:{"image_desc":"Vstavi/uredi sliko","delta_width":"","delta_height":""},advlink:{"link_desc":"Vstavi/uredi povezavo","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Vstavi/uredi atribute","ins_desc":"Vstavljeno","del_desc":"Izbrisano","acronym_desc":"Kratica","abbr_desc":"Okraj\u0161ava","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Uredi sloge CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Operacija prilepi je sedaj v na\u010dinu \"golo besedilo\". \u010ce jo \u017eelite vrniti v obi\u010dajen na\u010din, kliknite \u0161e enkrat.","plaintext_mode_sticky":"Operacija prilepi je sedaj v na\u010dinu \"golo besedilo\". \u010ce jo \u017eelite vrniti v obi\u010dajen na\u010din, kliknite \u0161e enkrat. Po izvedbi lepljenja se bo nastavitev povrnila v obi\u010dajen na\u010din.","selectall_desc":"Izberi vse","paste_word_desc":"Prilepi iz Word-a","paste_text_desc":"Prilepi kot golo besedilo"},"paste_dlg":{"word_title":"Uporabite kombinacijo tipk CTRL+V, da prilepite vsebino v okno.","text_linebreaks":"Obdr\u017ei prelome vrstic","text_title":"Uporabite kombinacijo tipk CTRL+V, da prilepite vsebino v okno."},table:{"cellprops_delta_width":"100",cell:"Celica",col:"Stolpec",row:"Vrstica",del:"Odstrani tabelo","copy_row_desc":"Kopiraj vrstico","cut_row_desc":"Izre\u017ei vrstico","paste_row_after_desc":"Prilepi vrstico po","paste_row_before_desc":"Prilepi vrstico pred","props_desc":"Lastnosti tabele","cell_desc":"Lastnosti celice","row_desc":"Lastnosti vrstice","merge_cells_desc":"Spoji celice","split_cells_desc":"Razcepi celico","delete_col_desc":"Odstrani stolpec","col_after_desc":"Vstavi stolpec po","col_before_desc":"Vstavi stolpec pred","delete_row_desc":"Odstrani vrstico","row_after_desc":"Vstavi vrstico pod","row_before_desc":"Vstavi vrstico nad",desc:"Vstavi/posodobi tabelo","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u010ce povrnete shranjeno vsebino, boste prepisali trenutno vsebino urejevalnika.nnSte prepri\u010dani, da \u017eelite nadaljevati?","restore_content":"Povrni na zadnje shranjeno vsebino.","unload_msg":"\u010ce nadaljujete, bodo spremembe izgubljene."},fullscreen:{desc:"Preklopi celozaslonski na\u010din"},media:{"delta_height":"delta_\u0161irina","delta_width":"delta_\u0161irina",edit:"Uredi multimedijsko vsebino",desc:"Vstavi / uredi multimedijsko vsebino"},fullpage:{desc:"Lastnosti dokumenta","delta_width":"sprememba_\u0161irine","delta_height":"sprememba_vi\u0161ine"},template:{desc:"Vstavi pripravljeno vsebino predloge"},visualchars:{desc:"Preklopi prikaz nadzornih znakov."},spellchecker:{desc:"Preklopi \u010drkovalnik",menu:"Nastavitve \u010drkovalnika","ignore_word":"Prezri besedo","ignore_words":"Prezri vse",langs:"Jeziki",wait:"Prosim po\u010dakaj...",sug:"Predlogi","no_sug":"Ni predlogov","no_mpell":"Napa\u010dnega \u010drkovanja nisem na\u0161el.","learn_word":"Zapomni si besedo"},pagebreak:{desc:"Vstavi lom strani."},advlist:{types:"Tipi",def:"Privzeto","lower_alpha":"Mali znaki","lower_greek":"Male gr\u0161ke \u010drke","lower_roman":"Male latinske \u010drke","upper_alpha":"Veliki znaki","upper_roman":"Velike latinske \u010drke",circle:"Krog",disc:"Disk",square:"Kvadrat"},colors:{"333300":"Temno olivna","993300":"Za\u017egano oran\u017ena","000000":"\u010crna","003300":"Temno zelena","003366":"Sinje temna","000080":"Mornarsko modra","333399":"Indigo","333333":"Zelo temno siva","800000":"Kostanjevo rde\u010da",FF6600:"Oran\u017ena","808000":"Olivna","008000":"Zelena","008080":"Temno sinje modra","0000FF":"Modra","666699":"Sivo modra","808080":"Siva",FF0000:"Rde\u010da",FF9900:"Jantarna","99CC00":"Rumeno zelena","339966":"Morsko zelena","33CCCC":"Turkizna","3366FF":"Kraljevsko modra","800080":"Vijoli\u010dna","999999":"Srednje siva",FF00FF:"Svetlo vijoli\u010dna",FFCC00:"Zlata",FFFF00:"Rumena","00FF00":"Citronsko zelena","00FFFF":"Akvarijsko modra","00CCFF":"Nebe\u0161ko modra","993366":"Rjava",C0C0C0:"Srebrna",FF99CC:"Roza",FFCC99:"Mareli\u010dna",FFFF99:"Svetlo rumena",CCFFCC:"Bledo zelena",CCFFFF:"Bledo turkizna","99CCFF":"Svetlo nebe\u0161ko modra",CC99FF:"Slivova",FFFFFF:"Bela"},aria:{"rich_text_area":"Polje z obogatenim besedilom"},wordcount:{words:"Besed:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sq.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sq.js
new file mode 100644
index 000000000..c3fa4687c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sq.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sq:{common:{"more_colors":"M\u00eb shum\u00eb ngjyra","invalid_data":"Gabim: Keni futur vlera t\u00eb pavlefshme, t\u00eb cilat jan\u00eb sh\u00ebnuar me t\u00eb kuqe.","popup_blocked":"Ju k\u00ebrkojm\u00eb ndjes\u00eb, por bllokuesi i popup-eve ka bllokuar nj\u00eb dritare q\u00eb ofron funksjonalitet p\u00ebr programin. Duhet t\'a \u00e7aktivizoni bllokuesin e popup-eve n\u00eb m\u00ebnyr\u00eb q\u00eb t\'i p\u00ebrdorni opsionet.","clipboard_no_support":"Aktualisht nuk suportohet nga Shfletuesi juaj, p\u00ebrdorni tastjer\u00ebn.","clipboard_msg":"Kopja/Prerja/Ngjitja nuk suportohen n\u00eb Mozilla dhe Firefox.\nD\u00ebshironi m\u00eb shum\u00eb informacione p\u00ebr k\u00ebt\u00eb \u00e7\u00ebshtje?","not_set":"-- pa v\u00ebn\u00eb --","class_name":"Klasa",browse:"Shfleto",close:"Mbyll",cancel:"Anulo",update:"Rifresko",insert:"Fut",apply:"Zbato","edit_confirm":"Doni t\u00eb p\u00ebrdorni m\u00ebnyr\u00ebn WYSIWYG p\u00ebr k\u00ebt\u00eb tekst?","invalid_data_number":"{#field} duhet t\u00eb jet\u00eb num\u00ebr","invalid_data_min":"{#field} duhet t\u00eb jet\u00eb num\u00ebr m\u00eb i madh se {#min}","invalid_data_size":"{#field} duhet t\u00eb jet\u00eb num\u00ebr ose p\u00ebrqindje",value:"(vler\u00eb)"},contextmenu:{full:"I Plot\u00eb",right:"Djathtas",center:"Qend\u00ebr",left:"Majtas",align:"Drejtimi"},insertdatetime:{"day_short":"Dje,H\u00ebn,Mar,M\u00ebr,Enj,Pre,Sht,Dje","day_long":"E Djel\u00eb,E H\u00ebn\u00eb,E Mart\u00eb,E M\u00ebrkur\u00eb,E Enjte,E Premte,E Shtun\u00eb,E Djel\u00eb","months_short":"Jan,Shk,Mar,Pri,Maj,Qer,Kor,Gus,Sht,Tet,N\u00ebn,Dhj","months_long":"Janar,Shkurt,Mars,Prill,Maj,Qershor,Korrik,Gusht,Shtator,Tetor,N\u00ebntor,Dhjetor","inserttime_desc":"Fut or\u00ebn","insertdate_desc":"Fut dat\u00ebn","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%y"},print:{"print_desc":"Printo"},preview:{"preview_desc":"Paraqitje"},directionality:{"rtl_desc":"Drejtimi djathtas-majtas","ltr_desc":"Drejtimi majtas-djathtas"},layer:{content:"Shtres\u00eb e re...","absolute_desc":"Aktivizo/\u00e7aktivizo pozicionimin absolut","backward_desc":"L\u00ebviz prapa","forward_desc":"L\u00ebviz para","insertlayer_desc":"Fut shtres\u00eb t\u00eb re"},save:{"save_desc":"Ruaj","cancel_desc":"Anuloji t\u00eb gjitha ndryshimet"},nonbreaking:{"nonbreaking_desc":"Fut hap\u00ebsir\u00eb"},iespell:{download:"ieSpell nuk u detektua. D\u00ebshironi ta instaloni?","iespell_desc":"Kontrollo p\u00ebr gabime drejt\u00ebshkrimore"},advhr:{"advhr_desc":"Linj\u00eb horizontale","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emocionet","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"K\u00ebrko/Z\u00ebvend\u00ebso","search_desc":"K\u00ebrko","delta_width":"","delta_height":""},advimage:{"image_desc":"Fut/edito foto","delta_width":"","delta_height":""},advlink:{"link_desc":"Fut/edito lidhje","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Fut/Edito Tipare","ins_desc":"Futje","del_desc":"Fshirje","acronym_desc":"Akronim","abbr_desc":"Shkurtim","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edito Stilet CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Ngjitja tani \u00ebsht\u00eb e thjesht\u00eb. Kliko p\u00ebrs\u00ebri p\u00ebr tu kthyer n\u00eb m\u00ebnyr\u00ebn standarte.","plaintext_mode_sticky":"Ngjitja tani \u00ebsht\u00eb e thjesht\u00eb. Kliko p\u00ebrs\u00ebri p\u00ebr tu kthyer n\u00eb m\u00ebnyr\u00ebn standarte. Pasi ngjisni di\u00e7ka, do t\u00eb ktheheni p\u00ebrs\u00ebri n\u00eb m\u00ebnyr\u00ebn standarte.","selectall_desc":"Zgjidhi t\u00eb gjitha","paste_word_desc":"Ngjit nga Word","paste_text_desc":"Ngjit si Tekst"},"paste_dlg":{"word_title":"P\u00ebrdor CTRL+V p\u00ebr t\u00eb ngjitur tekstin.","text_linebreaks":"Ruaj linjat e reja","text_title":"P\u00ebrdor CTRL+V p\u00ebr t\u00eb ngjitur tekstin."},table:{cell:"Qeliz\u00eb",col:"Kolon\u00eb",row:"Rresht",del:"Fshi tabel\u00ebn","copy_row_desc":"Kopjo rreshtin","cut_row_desc":"Prit rreshtin","paste_row_after_desc":"Ngjite rreshtin pas","paste_row_before_desc":"Ngjite rreshtin p\u00ebrpara","props_desc":"Tiparet e tabel\u00ebs","cell_desc":"Tiparet e qeliz\u00ebs","row_desc":"Tiparet e rreshtit","merge_cells_desc":"Bashkoji qelizat","split_cells_desc":"Ndaji qelizat e bashkuara","delete_col_desc":"Fshi kolon\u00ebn","col_after_desc":"Fut kolon\u00eb pas","col_before_desc":"Fut kolon\u00eb p\u00ebrpara","delete_row_desc":"Fshi rreshtin","row_after_desc":"Fut rresht pas","row_before_desc":"Fut rresht p\u00ebrpara",desc:"Fut nj\u00eb tabel\u00eb t\u00eb re","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"N\u00ebse riktheni versionin e ruajtur, do t\u00eb humbisni p\u00ebrmbajtjen q\u00eb ndodhet aktualisht n\u00eb editor.\n\nJeni t\u00eb sigurt q\u00eb doni ta riktheni?","restore_content":"Riktheni p\u00ebrmbajtjen e ruajtur.","unload_msg":"Ndryshimet q\u00eb keni b\u00ebr\u00eb do t\u00eb humbasin n\u00ebse largoheni nga kjo faqe."},fullscreen:{desc:"Aktivizo/\u00e7aktivizo pamjen e plot\u00eb"},media:{edit:"Edito media",desc:"Fut / edito media","delta_height":"","delta_width":""},fullpage:{desc:"Tiparet e dokumentit","delta_width":"","delta_height":""},template:{desc:"Fut p\u00ebrmbajtje shabllon"},visualchars:{desc:"Karakteret e kontrollit vizual: on/off."},spellchecker:{desc:"Aktivizo/\u00e7aktivizo kontrolluesin e gabimeve",menu:"Tiparet e kontrolluesit t\u00eb gabimeve","ignore_word":"Injoro fjal\u00ebn","ignore_words":"Injoroji t\u00eb gjitha",langs:"Gjuh\u00ebt",wait:"Ju lutem prisni...",sug:"Sygjerimet","no_sug":"Asnj\u00eb sygjerim","no_mpell":"Nuk u gjet asnj\u00eb gabim.","learn_word":"M\u00ebso fjal\u00ebn"},pagebreak:{desc:"Fut thyerje faqeje."},advlist:{types:"Tipet",def:"Paracaktuar","lower_alpha":"Alf. i Vog\u00ebl","lower_greek":"Grek i Vog\u00ebl","lower_roman":"Roman i Vog\u00ebl","upper_alpha":"Alf. i Madh","upper_roman":"Roman i Madh",circle:"Qark",disc:"Disk",square:"Katror"},colors:{"333300":"Ulli i err\u00ebt","993300":"Portokalli e djegur","000000":"I zi","003300":"E gjelb\u00ebr e err\u00ebt","003366":"Boj\u00ebqielli e err\u00ebt","000080":"Blu marine","333399":"Indigo","333333":"Gri shum\u00eb e err\u00ebt","800000":"G\u00ebshtenj\u00eb",FF6600:"Portokalli","808000":"Ulli","008000":"E gjelb\u00ebr","008080":"Blu e gjelb\u00ebr","0000FF":"Blu","666699":"Blue gri","808080":"Gri",FF0000:"E kuqe",FF9900:"Qelibar","99CC00":"E gjelb\u00ebr e verdh\u00eb","339966":"E gjelb\u00ebr deti","33CCCC":"Gurkali","3366FF":"Blu mbret\u00ebrore","800080":"Vjollc\u00eb","999999":"Gri e mesme",FF00FF:"Magenta",FFCC00:"Flori",FFFF00:"E verdh\u00eb","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Blu qielli","993366":"Boj\u00ebkafe",C0C0C0:"Argjend",FF99CC:"Roz\u00eb",FFCC99:"Pjeshk\u00eb",FFFF99:"E verdh\u00eb e hapur",CCFFCC:"E gjelb\u00ebr e zbeht\u00eb",CCFFFF:"Cyan e zbeht\u00eb","99CCFF":"Blu qielli e hapur",CC99FF:"Kumbull",FFFFFF:"E bardh\u00eb"},aria:{"rich_text_area":"Zon\u00eb e Pasur"},wordcount:{words:"Fjal\u00eb:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sr.js
new file mode 100644
index 000000000..18166540e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sr:{common:{"more_colors":"Jo\u0161 boja","invalid_data":"Gre\u0161ka: Une\u0161ene su nedozvoljene vrednosti, i ozna\u010dene su crvenom bojom.","popup_blocked":"\u017dao nam je, izgleda da je va\u0161 popup-bloker onemogu\u0107io popup prozor u sklopu ovog programa. Morate isklju\u010diti blokiranje popup prozora da bi u potpunosti iskoristili ovu alatku.","clipboard_no_support":"Va\u0161 web \u010dita\u0161 trenutno ne podr\u017eava ovo, upotrebite pre\u010dice na tastaturi.","clipboard_msg":"Kopiraj/Iseci/Zalepi nije omogu\u0107eno u Mozilla i Firefox web \u010dita\u010dima.\n\u017delite li vi\u0161e informacija o ovom problemu?","not_set":"---","class_name":"Klasa",browse:"Potra\u017ei",close:"Zatvori",cancel:"Odustani",update:"A\u017euriraj",insert:"Umetni",apply:"Primeni","edit_confirm":"Da li \u017eelite da koristite WYSIWYG re\u017eim rada za ovo tekstualno polje?","invalid_data_number":"{#field} mora biti broj","invalid_data_min":"{#field} mora biti broj ve\u0107i od {#min}","invalid_data_size":"{#field} mora biti broj ili procenat",value:"(value)"},contextmenu:{full:"Obostrano",right:"Desno",center:"Po sredini",left:"Levo",align:"Ravnanje"},insertdatetime:{"day_short":"ned,pon,uto,sre,\u010det,pet,sub,ned","day_long":"nedelja,ponedjeljak,utorak,sreda,\u010detvrtak,petak,subota,nedelja","months_short":"jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec","months_long":"januar,februar,mart,april,maj,juni,juli,avgust,septembar,oktobar,novembar,decembar","inserttime_desc":"Umetni vreme","insertdate_desc":"Umetni datum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y."},print:{"print_desc":"\u0160tampaj"},preview:{"preview_desc":"Preliminarni prikaz"},directionality:{"rtl_desc":"Zdesna nalevo","ltr_desc":"Sleva nadesno"},layer:{content:"Novi sloj...","absolute_desc":"Uklju\u010di/Isklju\u010di apsolutno pozicioniranje","backward_desc":"Pomeri unazad","forward_desc":"Pomeri unapred","insertlayer_desc":"Umetni novi sloj"},save:{"save_desc":"Sa\u010duvaj","cancel_desc":"Odustani od svih promena"},nonbreaking:{"nonbreaking_desc":"Ubaci neprelomivi razmak"},iespell:{download:"ieSpell (za proveru pravopisa) nije instaliran. \u017delite li da ga instalirate sada?","iespell_desc":"Pokreni proveru pravopisa"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Horizontalna linija"},emotions:{"delta_height":"","delta_width":"","emotions_desc":"Smajli"},searchreplace:{"replace_desc":"Prona\u0111i/Zameni","delta_width":"","delta_height":"","search_desc":"Prona\u0111i"},advimage:{"delta_width":"50","image_desc":"Umetni/Uredi sliku","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Umetni/Uredi link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Umetni/Uredi atribute","ins_desc":"Umetanje","del_desc":"Brisanje","acronym_desc":"Akronim","abbr_desc":"Skra\u0107enica","cite_desc":"Citat"},style:{"delta_height":"","delta_width":"50",desc:"Uredi CSS stil"},paste:{"plaintext_mode":"\'Zalepi\' je sada u re\u017eimu rada sa obi\u010dnim tekstom. Kliknite ponovo za povratak u standardni re\u017eim.","plaintext_mode_sticky":"\'Zalepi\' je sada u re\u017eimu rada sa obi\u010dnim tekstom. Kliknite ponovo za povratak u standardni re\u017eim. Nakon \u0161to zalepite ne\u0161to bi\u0107ete automatski vra\u0107eni u standardni re\u017eim.","selectall_desc":"Odaberi sve","paste_word_desc":"Zalepi iz Worda","paste_text_desc":"Zalepi kao obi\u010dan tekst"},"paste_dlg":{"word_title":"Koristite CTRL V na tastaturi da zalepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prelome linija","text_title":"Koristite CTRL+V na tastaturi da zalepite tekst u prozor."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"\u0106elija",col:"Kolona",row:"Red",del:"Obri\u0161i tabelu","copy_row_desc":"Kopiraj red","cut_row_desc":"Iseci red","paste_row_after_desc":"Zalepi red iza","paste_row_before_desc":"Zalepi red ispred","props_desc":"Osobine tabele","cell_desc":"Osobine \u0107elije","row_desc":"Osobine reda","merge_cells_desc":"Spoj \u0107elije","split_cells_desc":"Razdvoj spojene \u0107elije","delete_col_desc":"Ukloni kolonu","col_after_desc":"Ubaci kolonu iza","col_before_desc":"Ubaci kolonu ispred","delete_row_desc":"Obri\u0161i red","row_after_desc":"Ubaci red iza","row_before_desc":"Ubaci red ispred",desc:"Umetni novu tabelu"},autosave:{"warning_message":"Ako povratite sa\u010duvani sadr\u017eaj, izgubi\u0107ete sav sadr\u017eaj koji je trenutno u editoru.\n\nDa li ste sigurni da \u017eelite da povratite sa\u010duvani sadr\u017eaj?","restore_content":"Povrati automatski-sa\u010duvan sadr\u017eaj","unload_msg":"Promene koje ste napravili bi\u0107e poni\u0161tene ako napustite ovu stranicu."},fullscreen:{desc:"Uklju\u010di/Isklju\u010di prikaz preko celog ekrana"},media:{"delta_height":"","delta_width":"",edit:"Uredi integrisani multimedijalni sadr\u017eaj",desc:"Umetni/Uredi integrisani multimedijalni sadr\u017eaj"},fullpage:{desc:"Osobine dokumenta","delta_width":"","delta_height":""},template:{desc:"Umetni predefinisani sadr\u017eaj \u0161ablona"},visualchars:{desc:"Vizuelni kontrolni simboli uklju\u010deni/isklju\u010deni."},spellchecker:{desc:"Uklju\u010di/Isklju\u010di proveru pravopisa",menu:"Pode\u0161avanja za proveru pravopisa","ignore_word":"Zanemari re\u010d","ignore_words":"Zanemari sve",langs:"Jezici",wait:"Sa\u010dekajte...",sug:"Predlozi","no_sug":"Nema predloga","no_mpell":"Nije prona\u0111ena nijedna pravopisna gre\u0161ka.","learn_word":"Nau\u010di re\u010d"},pagebreak:{desc:"Umetni prelom strane"},advlist:{types:"Vrste",def:"Podrazumevano","lower_alpha":"Mala slova abecede","lower_greek":"Mala gr\u010dka slova","lower_roman":"Rimski br. malim slovima","upper_alpha":"Velika slova abecede","upper_roman":"Rimski br. velikim slovima",circle:"Prazan kru\u017ei\u0107",disc:"Pun kru\u017ei\u0107",square:"Kvadrati\u0107"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Re\u010di:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sv.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sv.js
new file mode 100644
index 000000000..a2a3d77ff
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sv:{common:{"more_colors":"Fler f\u00e4rger","invalid_data":"Fel: Inkorrekta v\u00e4rden har matats in, dessa \u00e4r markerade i r\u00f6tt.","popup_blocked":"Popup blockerare detekterad. St\u00e4ng av den s\u00e5 att dialogerna kan \u00f6ppnas.","clipboard_no_support":"Funktionen \u00e4r inte tillg\u00e4nglig i din webbl\u00e4sare, anv\u00e4nd tangentbordsgenv\u00e4garna i st\u00e4llet.","clipboard_msg":"Kopiera/klipp ut/klistra in \u00e4r inte tillg\u00e4ngligt i din webbl\u00e4sare.\nVill du veta mer?","not_set":"-- Inte satt --","class_name":"Klass",browse:"Bl\u00e4ddra",close:"St\u00e4ng",cancel:"Avbryt",update:"Uppdatera",insert:"Infoga",apply:"Applicera","edit_confirm":"Vill du anv\u00e4nda WYSIWYG f\u00f6r denna textarea?","invalid_data_number":"{#field} m\u00e5ste vara ett nummer","invalid_data_min":"{#field} m\u00e5ste vara ett nummer st\u00f6rren \u00e4n {#min}","invalid_data_size":"{#field} m\u00e5ste vara ett nummer eller i procent",value:"(V\u00e4rde)"},contextmenu:{full:"Utfyllnad",right:"H\u00f6ger",center:"Centrerad",left:"V\u00e4nster",align:"Justering"},insertdatetime:{"day_short":"S\u00f6n,M\u00e5n,Tis,Ons,Tors,Fre,L\u00f6r,S\u00f6n","day_long":"S\u00f6ndag,M\u00e5ndag,Tisdag,Onsdag,Torsdag,Fredag,L\u00f6rdag,S\u00f6ndag","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","months_long":"Januari,Februari,Mars,April,Maj,Juni,Juli,Augusti,September,Oktober,November,December","inserttime_desc":"Infoga tid","insertdate_desc":"Infoga datum","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d "},print:{"print_desc":"Skriv ut"},preview:{"preview_desc":"F\u00f6rhandsgranska"},directionality:{"rtl_desc":"Skriftl\u00e4ge - h\u00f6ger till v\u00e4nster","ltr_desc":"Skriftl\u00e4ge - v\u00e4nster till h\u00f6ger"},layer:{content:"Nytt lager...","absolute_desc":"Sl\u00e5 av/p\u00e5 absolut positionering","backward_desc":"Flytta bak\u00e5t","forward_desc":"Flytta fram\u00e5t","insertlayer_desc":"Infoga nytt lager"},save:{"save_desc":"Spara","cancel_desc":"Hoppa \u00f6ver alla f\u00f6r\u00e4ndringar"},nonbreaking:{"nonbreaking_desc":"Infoga icke radbrytande mellanslag"},iespell:{download:"ieSpell kunde inte hittas, vill du installera denna nu?","iespell_desc":"R\u00e4ttstava"},advhr:{"advhr_desc":"Horisontell skiljelinje","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smileys","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f6k/ers\u00e4tt","search_desc":"S\u00f6k","delta_width":"","delta_height":""},advimage:{"image_desc":"Infoga/redigera bild","delta_width":"","delta_height":""},advlink:{"link_desc":"Infoga/redigera l\u00e4nk","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Redigera attribut","ins_desc":"Markera som tillagt","del_desc":"Markera som struket","acronym_desc":"Akronym","abbr_desc":"F\u00f6rkortning","cite_desc":"citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Redigera inline CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Inklistring \u00e4r nu i textl\u00e4ge.","plaintext_mode_sticky":"Inklistring \u00e4r nu i textl\u00e4ge. Efter att du klistrat in kommer den att \u00e5terg\u00e5 till normall\u00e4ge.","selectall_desc":"Markera allt","paste_word_desc":"Klistra in fr\u00e5n Word","paste_text_desc":"Klistra in som text"},"paste_dlg":{"word_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster.","text_linebreaks":"Spara radbrytningar","text_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster."},table:{cell:"Cell",col:"Kolumn",row:"Rad",del:"Radera tabell","copy_row_desc":"Klistra in rad","cut_row_desc":"Klipp ut rad","paste_row_after_desc":"Klistra in rad efter","paste_row_before_desc":"Klistra in rad ovanf\u00f6r","props_desc":"Tabellinst\u00e4llningar","cell_desc":"Tabellcellsinst\u00e4llningar","row_desc":"Tabellradsinst\u00e4llningar","merge_cells_desc":"Sammanfoga celler","split_cells_desc":"Separera sammansatta celler","delete_col_desc":"Radera kolumn","col_after_desc":"Infoga kolumn efter","col_before_desc":"Infoga kolumn f\u00f6re","delete_row_desc":"Radera rad","row_after_desc":"Infoga ny rad efter","row_before_desc":"Infoga ny rad f\u00f6re",desc:"Infoga/redigera ny tabell","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Om du \u00e5terskapar inneh\u00e5ll s\u00e5 kommer det nuvarande inneh\u00e5llet i f\u00e4ltet att raderas.\n\n\u00c4r du s\u00e4ker p\u00e5 att du vill g\u00f6ra detta?","restore_content":"\u00c5terskapa automatiskt sparat inneh\u00e5ll.","unload_msg":"De f\u00f6r\u00e4ndringar som du gjort kommer att g\u00e5 f\u00f6rlorade om du l\u00e4mnar sidan."},fullscreen:{desc:"Sl\u00e5 av/p\u00e5 fullsk\u00e4rmsl\u00e4ge"},media:{edit:"Redigera inb\u00e4ddad media",desc:"Infoga/redigera inb\u00e4ddad media","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentinst\u00e4llningar","delta_width":"","delta_height":""},template:{desc:"Infoga en f\u00e4rdig mall"},visualchars:{desc:"Visa osynliga tecken"},spellchecker:{desc:"Sl\u00e5 av/p\u00e5 r\u00e4ttstavningskontroll",menu:"R\u00e4ttstavningsinst\u00e4llningar","ignore_word":"Ignorera ord","ignore_words":"Ignorera alla",langs:"Spr\u00e5k",wait:"Var god v\u00e4nta...",sug:"F\u00f6rslag","no_sug":"Inga f\u00f6rslag","no_mpell":"Inga felstavningar funna.","learn_word":"L\u00e4r ord"},pagebreak:{desc:"Infoga sidbrytning"},advlist:{types:"Typer",def:"Standard","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Cirkel",disc:"Disc",square:"Fyrkant"},colors:{"333300":"M\u00f6rkoliv","993300":"Br\u00e4ndorange","000000":"Svart","003300":"M\u00f6rkgr\u00f6n","003366":"M\u00f6rkazur","000080":"Marinbl\u00e5","333399":"Indigo","333333":"Mycket m\u00f6rkgr\u00e5","800000":"R\u00f6dbrun",FF6600:"Orange","808000":"Oliv","008000":"Gr\u00f6n","008080":"Kricka","0000FF":"Bl\u00e5","666699":"Gr\u00e5bl\u00e5","808080":"Gr\u00e5",FF0000:"R\u00f6d",FF9900:"B\u00e4rnsten","99CC00":"Gulgr\u00f6n","339966":"Havsbl\u00e5","33CCCC":"Turkos","3366FF":"Kungligtbl\u00e5tt","800080":"Lila","999999":"Medelgr\u00e5",FF00FF:"Magenta",FFCC00:"Guld",FFFF00:"Gul","00FF00":"Lime","00FFFF":"Vatten","00CCFF":"Himmelsbl\u00e5","993366":"Brun",C0C0C0:"Silver",FF99CC:"Rosa",FFCC99:"Periska",FFFF99:"Ljusgul",CCFFCC:"Blekgr\u00f6n",CCFFFF:"Blekcyan","99CCFF":"Ljus himmel",CC99FF:"Plommon",FFFFFF:"Vitt"},aria:{"rich_text_area":"Redigeringsarea"},wordcount:{words:"Ord:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sy.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sy.js
new file mode 100644
index 000000000..11d0520f5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/sy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sy:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert Time","insertdate_desc":"Insert Date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction Right to Left","ltr_desc":"Direction Left to Right"},layer:{content:"New layer...","absolute_desc":"Toggle Absolute Positioning","backward_desc":"Move Backward","forward_desc":"Move Forward","insertlayer_desc":"Insert New Layer"},save:{"save_desc":"Save","cancel_desc":"Cancel All Changes"},nonbreaking:{"nonbreaking_desc":"Insert Non-Breaking Space Character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Check Spelling"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Insert Horizontal Line"},emotions:{"emotions_desc":"\u0722\u0712\u0742\u0717\u0308\u0710","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","delta_width":"","delta_height":"","search_desc":"Find"},advimage:{"delta_width":"","image_desc":"Insert/Edit Image","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Insert/Edit Link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation"},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"Cell",col:"Column",row:"Row",del:"Delete Table","copy_row_desc":"Copy Table Row","cut_row_desc":"Cut Table Row","paste_row_after_desc":"Paste Table Row After","paste_row_before_desc":"Paste Table Row Before","props_desc":"Table Properties","cell_desc":"Table Cell Properties","row_desc":"Table Row Properties","merge_cells_desc":"Merge Table Cells","split_cells_desc":"Split Merged Table Cells","delete_col_desc":"Delete Column","col_after_desc":"Insert Column After","col_before_desc":"Insert Column Before","delete_row_desc":"Delete Row","row_after_desc":"Insert Row After","row_before_desc":"Insert Row Before",desc:"Insert/Edit Table"},autosave:{"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?","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"\u072b\u071a\u0720\u0726 \u0720\u0710\u0723\u071f\u071d\u0721\u0710 \u0715\u072b\u072b\u072c\u0710 \u0721\u0720\u071d\u072c\u0710"},media:{edit:"\u0723\u071d\u0721\u072c\u0710 \u0715\u071a\u0712\u0742\u072b\u072c\u0710 \u0715\u0721\u071d\u0715\u071d\u0710",desc:"\u0721\u0725\u0712\u0742\u072a/\u0723\u071d\u0718\u0721 \u0721\u071d\u0715\u071d\u0710 \u071a\u0712\u0742\u071d\u072b\u072c\u0710","delta_height":"","delta_width":""},fullpage:{desc:"Document Properties","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"Toggle Spell Checker",menu:"Spell Checker Settings","ignore_word":"Ignore Word","ignore_words":"Ignore All",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No Suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert Page Break for Printing"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ta.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ta.js
new file mode 100644
index 000000000..bd4f3e9d4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ta.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ta:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"\u0b9e\u0bbe,\u0ba4\u0bbf,\u0b9a\u0bc6,\u0baa\u0bc1,\u0bb5\u0bbf,\u0bb5\u0bc6,\u0b9a","day_long":"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8","months_short":"\u0b9c\u0ba9,\u0baa\u0bbf\u0baa\u0bcd,\u0bae\u0bbe\u0bb0\u0bcd,\u0b8f\u0baa\u0bcd,\u0bae\u0bc7,\u0b9c\u0bc2\u0ba9\u0bcd,\u0b9c\u0bc2\u0bb2\u0bc8,\u0b86\u0b95,\u0b9a\u0bc6\u0baa\u0bcd,\u0b85\u0b95\u0bcd,\u0ba8\u0bb5,\u0b9f\u0bbf\u0b9a","months_long":"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf,\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf,\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd,\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd,\u0bae\u0bc7,\u0b9c\u0bc2\u0ba9\u0bcd,\u0b9c\u0bc2\u0bb2\u0bc8,\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd,\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd,\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd,\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd,\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd","inserttime_desc":"\u0ba8\u0bc7\u0bb0\u0bae\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95","insertdate_desc":"\u0ba4\u0bc7\u0ba4\u0bbf \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95"},preview:{"preview_desc":"\u0bae\u0bc1\u0ba9\u0bcd-\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"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?.","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"\u0b9a\u0bca\u0bb2\u0bcd\u0bb2\u0bc8 \u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95","ignore_words":"\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95",langs:"\u0bae\u0bca\u0bb4\u0bbf\u0b95\u0bb3\u0bcd",wait:"\u0ba4\u0baf\u0bb5\u0bc1\u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bc1 \u0b95\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc1\u0b95\u0bcd\u0b95...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"\u0baa\u0b95\u0bcd\u0b95\u0baa\u0bcd \u0baa\u0bbf\u0bb0\u0bbf\u0baa\u0bcd\u0baa\u0bc8\u0b9a\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95."},advlist:{types:"\u0bb5\u0b95\u0bc8\u0b95\u0bb3\u0bcd",def:"\u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"\u0bb5\u0b9f\u0bcd\u0b9f\u0bae\u0bcd",disc:"Disc",square:"\u0b9a\u0ba4\u0bc1\u0bb0\u0bae\u0bcd"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text \u0baa\u0b95\u0bc1\u0ba4\u0bbf"},wordcount:{words:"\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/te.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/te.js
new file mode 100644
index 000000000..6919d55c8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/te.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({te:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/th.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/th.js
new file mode 100644
index 000000000..73b113ac6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/th.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({th:{common:{"more_colors":"\u0e2a\u0e35\u0e2d\u0e37\u0e48\u0e19\u0e46","invalid_data":"\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14: \u0e1b\u0e49\u0e2d\u0e19\u0e04\u0e48\u0e32\u0e43\u0e19\u0e0a\u0e49\u0e2d\u0e07\u0e2a\u0e35\u0e41\u0e14\u0e07\u0e43\u0e2b\u0e49\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07","popup_blocked":"\u0e02\u0e2d\u0e2d\u0e20\u0e31\u0e22\u0e41\u0e15\u0e48\u0e40\u0e23\u0e32\u0e1e\u0e1a\u0e27\u0e48\u0e32\u0e04\u0e38\u0e13\u0e21\u0e35\u0e23\u0e30\u0e1a\u0e1a\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e1b\u0e4a\u0e2d\u0e1b\u0e2d\u0e31\u0e1b \u0e04\u0e38\u0e13\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e01\u0e32\u0e23\u0e1a\u0e25\u0e47\u0e2d\u0e04\u0e1b\u0e4a\u0e2d\u0e1b\u0e2d\u0e31\u0e1b","clipboard_no_support":"\u0e02\u0e13\u0e30\u0e19\u0e35\u0e49\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19\u0e40\u0e1a\u0e23\u0e32\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49\u0e41\u0e1b\u0e49\u0e19\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e25\u0e31\u0e14\u0e41\u0e17\u0e19","clipboard_msg":"\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01 / \u0e15\u0e31\u0e14 / \u0e27\u0e32\u0e07\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e21\u0e35\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e43\u0e19 Mozilla \u0e41\u0e25\u0e30 Firefox.\nDo \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e19\u0e35\u0e49\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?","not_set":"-- \u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 --","class_name":"css \u0e04\u0e25\u0e32\u0e2a",browse:"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e44\u0e1f\u0e25\u0e4c",close:"\u0e1b\u0e34\u0e14",cancel:"\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01",update:"\u0e2d\u0e31\u0e1e\u0e40\u0e14\u0e15",insert:"\u0e40\u0e1e\u0e34\u0e48\u0e21",apply:"\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19","edit_confirm":"\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e42\u0e2b\u0e21\u0e14 WYSIWYG \u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e1a\u0e17\u0e04\u0e27\u0e32\u0e21\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48 ?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u0e40\u0e15\u0e47\u0e21",right:"\u0e02\u0e27\u0e32",center:"\u0e01\u0e25\u0e32\u0e07",left:"\u0e0b\u0e49\u0e32\u0e22",align:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e08\u0e31\u0e14\u0e27\u0e32\u0e07"},insertdatetime:{"day_short":"\u0e2d\u0e32,\u0e08,\u0e2d\u0e31\u0e07,\u0e1e,\u0e1e\u0e24,\u0e28,\u0e2a,\u0e2d","day_long":"\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c,\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c,\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23,\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18,\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35,\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c,\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c,\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c","months_short":"\u0e21.\u0e04.,\u0e01.\u0e1e.,\u0e21\u0e35.\u0e04.,\u0e40\u0e21.\u0e22.,\u0e1e.\u0e04.,\u0e21\u0e34.\u0e22.,\u0e01.\u0e04.,\u0e2a.\u0e04.,\u0e01.\u0e22.,\u0e15.\u0e04.,\u0e1e.\u0e22.,\u0e18.\u0e04.","months_long":"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21,\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c,\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21,\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19,\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21,\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19,\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21,\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21,\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19,\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21,\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19,\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21","inserttime_desc":"\u0e41\u0e17\u0e23\u0e01\u0e40\u0e27\u0e25\u0e32","insertdate_desc":"\u0e41\u0e17\u0e23\u0e01\u0e27\u0e31\u0e19\u0e17\u0e35\u0e48","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u0e1e\u0e34\u0e21\u0e1e\u0e4c"},preview:{"preview_desc":"\u0e14\u0e39\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07"},directionality:{"rtl_desc":"\u0e2d\u0e48\u0e32\u0e19\u0e08\u0e32\u0e01\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22","ltr_desc":"\u0e2d\u0e48\u0e32\u0e19\u0e08\u0e32\u0e01\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32"},layer:{content:"\u0e40\u0e25\u0e40\u0e22\u0e2d\u0e23\u0e4c\u0e43\u0e2b\u0e21\u0e48...","absolute_desc":"\u0e2a\u0e25\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e27\u0e32\u0e07","backward_desc":"\u0e22\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e25\u0e31\u0e07","forward_desc":"\u0e22\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32","insertlayer_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e25\u0e40\u0e22\u0e2d\u0e23\u0e4c\u0e43\u0e2b\u0e21\u0e48"},save:{"save_desc":"\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01","cancel_desc":"\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e17\u0e38\u0e01\u0e2d\u0e22\u0e48\u0e32\u0e07"},nonbreaking:{"nonbreaking_desc":"\u0e41\u0e17\u0e23\u0e01\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e27\u0e48\u0e32\u0e07"},iespell:{download:"\u0e2b\u0e32\u0e01\u0e23\u0e30\u0e1a\u0e1a\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e04\u0e33\u0e1c\u0e34\u0e14\u0e44\u0e21\u0e48\u0e1e\u0e1a \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07\u0e40\u0e14\u0e35\u0e4b\u0e22\u0e27\u0e19\u0e35\u0e49 ?","iespell_desc":"\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\u0e15\u0e23\u0e27\u0e08\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14"},advhr:{"advhr_desc":"\u0e40\u0e2a\u0e49\u0e19\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0e44\u0e2d\u0e04\u0e2d\u0e19\u0e41\u0e2a\u0e14\u0e07\u0e2d\u0e32\u0e23\u0e21\u0e13\u0e4c","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0e04\u0e49\u0e19\u0e2b\u0e32/\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48","search_desc":"\u0e04\u0e49\u0e19\u0e2b\u0e32","delta_width":"","delta_height":""},advimage:{"image_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e23\u0e39\u0e1b","delta_width":"","delta_height":""},advlink:{"link_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e41\u0e2d\u0e17\u0e17\u0e23\u0e34\u0e1a\u0e34\u0e27","ins_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21","del_desc":"\u0e25\u0e1a","acronym_desc":"\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e22\u0e48\u0e2d","abbr_desc":"\u0e15\u0e31\u0e27\u0e22\u0e48\u0e2d","cite_desc":"\u0e01\u0e32\u0e23\u0e2d\u0e49\u0e32\u0e07\u0e2d\u0e34\u0e07","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0e41\u0e01\u0e49\u0e44\u0e02 CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14","paste_word_desc":"\u0e27\u0e32\u0e07\u0e08\u0e32\u0e01\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 Word","paste_text_desc":"\u0e27\u0e32\u0e07\u0e42\u0e14\u0e22\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e18\u0e23\u0e23\u0e21\u0e14\u0e32"},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"\u0e40\u0e0b\u0e25\u0e25\u0e4c",col:"\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c",row:"\u0e41\u0e16\u0e27",del:"\u0e25\u0e1a\u0e15\u0e32\u0e23\u0e32\u0e07","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"\u0e25\u0e1a\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c","col_after_desc":"\u0e41\u0e17\u0e23\u0e01\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e08\u0e32\u0e01\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e25\u0e31\u0e07","col_before_desc":"\u0e41\u0e17\u0e23\u0e01\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e08\u0e32\u0e01\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32","delete_row_desc":"\u0e25\u0e1a\u0e41\u0e16\u0e27","row_after_desc":"\u0e41\u0e17\u0e23\u0e01\u0e41\u0e16\u0e27\u0e08\u0e32\u0e01\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e25\u0e31\u0e07","row_before_desc":"\u0e41\u0e17\u0e23\u0e01\u0e41\u0e16\u0e27\u0e08\u0e32\u0e01\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"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?.","restore_content":"Restore auto-saved content.","unload_msg":"\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e17\u0e33\u0e08\u0e30\u0e2b\u0e32\u0e22\u0e44\u0e1b\u0e2b\u0e32\u0e01\u0e04\u0e38\u0e13\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e2b\u0e19\u0e49\u0e32\u0e19\u0e35\u0e49"},fullscreen:{desc:"\u0e2a\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e41\u0e2a\u0e14\u0e07\u0e41\u0e1a\u0e1a\u0e40\u0e15\u0e47\u0e21\u0e2b\u0e19\u0e49\u0e32"},media:{edit:"\u0e41\u0e01\u0e49\u0e44\u0e02\u0e21\u0e35\u0e40\u0e14\u0e35\u0e22",desc:"\u0e40\u0e1e\u0e34\u0e48\u0e21 / \u0e41\u0e01\u0e49\u0e44\u0e02 \u0e21\u0e35\u0e40\u0e14\u0e35\u0e22","delta_height":"","delta_width":""},fullpage:{desc:"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23","delta_width":"","delta_height":""},template:{desc:"\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23"},visualchars:{desc:"\u0e01\u0e32\u0e23\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23 \u0e40\u0e1b\u0e34\u0e14/\u0e1b\u0e34\u0e14"},spellchecker:{desc:"\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14\u0e04\u0e33",menu:"\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14\u0e04\u0e33","ignore_word":"\u0e25\u0e30\u0e40\u0e27\u0e49\u0e19\u0e1a\u0e32\u0e07\u0e04\u0e33","ignore_words":"\u0e25\u0e30\u0e40\u0e27\u0e49\u0e19\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14",langs:"\u0e20\u0e32\u0e29\u0e32",wait:"\u0e42\u0e1b\u0e23\u0e14\u0e23\u0e2d...",sug:"\u0e04\u0e33\u0e41\u0e19\u0e30\u0e19\u0e33","no_sug":"\u0e44\u0e21\u0e48\u0e21\u0e35\u0e04\u0e33\u0e41\u0e19\u0e30\u0e19\u0e33","no_mpell":"\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e23\u0e30\u0e1a\u0e1a\u0e2a\u0e30\u0e01\u0e14\u0e04\u0e33\u0e1c\u0e34\u0e14","learn_word":"Learn word"},pagebreak:{desc:"\u0e43\u0e2a\u0e48\u0e40\u0e2a\u0e49\u0e19\u0e41\u0e1a\u0e48\u0e07\u0e2b\u0e19\u0e49\u0e32"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tn.js
new file mode 100644
index 000000000..0b3eeaff3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({tn:{common:{"more_colors":"Mebala e mentsi","invalid_data":"Phoso: Gase-gone mo go tsentsweng, mo go tswailwe ka botshibidu.","popup_blocked":"Maitswarelo,mme re lemogile gore popup-blocker e tila gore window e fang pereko ya porokereme. O tla thoka go tila sekganedi sa popup mo saeteng gore o kgone go sologela-mosola thuloso e","clipboard_no_support":"Ga e letelelwe ke boraosara jwa gago gompieno, dirisa dikhutswe tsa kiboto.","clipboard_msg":"Kopa/Sega/Kgomaretsa ga e yo mo Mozila Firefox.\nA o batla molaetsa ka lebaka le?","not_set":"-- Ga ya Baakangwa --","class_name":"Tlase",browse:"Boraose",close:"Tswala",cancel:"Khansela",update:"Tokafatsa",insert:"Tsenya",apply:"Apolaya","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"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?.","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tr.js
new file mode 100644
index 000000000..40b3d5af4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({tr:{common:{"more_colors":"Daha fazla renk","invalid_data":"Hata: Ge\u00e7ersiz de\u011fer girildi, bunlar k\u0131rm\u0131z\u0131yla i\u015faretlenmi\u015ftir.","popup_blocked":"\u00dczg\u00fcn\u00fcz, a\u00e7\u0131l\u0131r pencere engelleyiciniz uygulama i\u00e7in gerekli bir pencereyi engelledi. Bu arac\u0131 tam olarak kullanabilmek i\u00e7in a\u00e7\u0131l\u0131r pencere engelleyicisini kapat\u0131n\u0131z.","clipboard_no_support":"\u015eu an kulland\u0131\u011f\u0131n\u0131z taray\u0131c\u0131n\u0131z klavye k\u0131sayollar\u0131n\u0131 desteklememektedir.","clipboard_msg":"Mozilla Firefox da Kes/Kopyala/Yap\u0131\u015ft\u0131r \u00f6zelli\u011fi kullan\u0131lmamaktad\u0131r. \nBu konu hakk\u0131nda bilgi almak ister misiniz?","not_set":"-- Ayarlanmad\u0131 --","class_name":"S\u0131n\u0131f",browse:"G\u00f6zat",close:"Kapat",cancel:"\u0130ptal",update:"G\u00fcncelle",insert:"Ekle",apply:"Uygula","edit_confirm":"Metin giri\u015fi i\u00e7in WYSIWYG modunu kullanmak ister misiniz?","invalid_data_number":"{#field} rakam olmal\u0131","invalid_data_min":"{#field}, {#min} de\u011ferinden b\u00fcy\u00fck ve rakam olmal\u0131","invalid_data_size":"{#field} rakam veya y\u00fczde olmal\u0131",value:"(de\u011fer)"},contextmenu:{full:"Tam",right:"Sa\u011f",center:"Orta",left:"Sol",align:"Hizalama"},insertdatetime:{"day_short":"Paz,Pzt,Sal,\u00c7r\u015f,Per,Cum,Cts","day_long":"Pazar,Pazartesi,Sal\u0131,\u00c7ar\u015famba,Per\u015fembe,Cuma,Cumartesi","months_short":"Oca,\u015eub,Mar,Nis,May,Haz,Tem,A\u011fu,Eyl,Eki,Kas,Ara","months_long":"Ocak,\u015eubat,Mart,Nisan,May\u0131s,Haziran,Temmuz,A\u011fustos,Eyl\u00fcl,Ekim,Kas\u0131m,Aral\u0131k","inserttime_desc":"Saat ekle","insertdate_desc":"Tarih ekle","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Yazd\u0131r"},preview:{"preview_desc":"\u00d6nizleme"},directionality:{"rtl_desc":"Soldan sa\u011fa y\u00f6nlendir","ltr_desc":"Sa\u011fdan sola y\u00f6nlendir"},layer:{content:"Yeni katman...","absolute_desc":"Mutlaka konumu de\u011fi\u015ftir","backward_desc":"Arkaya al","forward_desc":"\u00d6ne getir","insertlayer_desc":"Yeni katman ekle"},save:{"save_desc":"Kaydet","cancel_desc":"T\u00fcm de\u011fi\u015fiklikleri iptal et"},nonbreaking:{"nonbreaking_desc":"B\u00f6l\u00fcnemez bo\u015fluk karakteri ekle"},iespell:{download:"ieSpell bulunamad\u0131. \u015eimdi kurmak ister misiniz?","iespell_desc":"\u0130mla kontrol\u00fcn\u00fc ba\u015flat"},advhr:{"advhr_desc":"Yatay \u00e7izgi","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0130fadeler","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Bul/De\u011fi\u015ftir","search_desc":"Bul","delta_width":"","delta_height":""},advimage:{"delta_width":"Geni\u015flik_fark\u0131","image_desc":"Resim ekle/d\u00fczenle","delta_height":"Y\u00fckseklik_fark\u0131"},advlink:{"link_desc":"Ba\u011flant\u0131 ekle/d\u00fczenle","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Nitelik ekle/d\u00fczenle","ins_desc":"Ekleme","del_desc":"Silme","acronym_desc":"K\u0131sa ad","abbr_desc":"K\u0131saltma","cite_desc":"Al\u0131nt\u0131","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS Stilini D\u00fczenle","delta_height":"","delta_width":""},paste:{"plaintext_mode":"D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Normal yap\u0131\u015ft\u0131rma moduna ge\u00e7mek i\u00e7in tekrar t\u0131klay\u0131n.","plaintext_mode_sticky":"D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Normal yap\u0131\u015ft\u0131rma moduna ge\u00e7mek i\u00e7in tekrar t\u0131klay\u0131n. Yap\u0131\u015ft\u0131rma i\u015fleminden sonra normal yap\u0131\u015ft\u0131rma moduna ge\u00e7ilecektir.","selectall_desc":"T\u00fcm\u00fcn\u00fc se\u00e7","paste_word_desc":"Word\'den yap\u0131\u015ft\u0131r","paste_text_desc":"D\u00fcz metin olarak yap\u0131\u015ft\u0131r"},"paste_dlg":{"word_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n.","text_linebreaks":"Sat\u0131r kesmelerini tut","text_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n."},table:{cell:"H\u00fccre",col:"S\u00fctun",row:"Sat\u0131r",del:"Tablo sil","copy_row_desc":"Tablo sat\u0131r\u0131n\u0131 kopyala","cut_row_desc":"Tablo sat\u0131r\u0131n\u0131 kes","paste_row_after_desc":"Alt\u0131na tablo sat\u0131r\u0131 yap\u0131\u015ft\u0131r","paste_row_before_desc":"\u00dcst\u00fcne tablo sat\u0131r\u0131 yap\u0131\u015ft\u0131r","props_desc":"Tablo \u00f6zellikleri","cell_desc":"Tablo h\u00fccre \u00f6zellikleri","row_desc":"Tablo sat\u0131r \u00f6zellikleri","merge_cells_desc":"Tablo h\u00fccrelerini birle\u015ftir","split_cells_desc":"Birle\u015ftirilmi\u015f tablo h\u00fccrelerini b\u00f6l","delete_col_desc":"S\u00fctun sil","col_after_desc":"Sa\u011f\u0131na s\u00fctun ekle","col_before_desc":"Soluna s\u00fctun ekle","delete_row_desc":"Sat\u0131r sil","row_after_desc":"Alt\u0131na sat\u0131r ekle","row_before_desc":"\u00dcst\u00fcne sat\u0131r ekle",desc:"Yeni tablo ekle","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"E\u011fer geri y\u00fckleme i\u00e7eri\u011fe otomatik kay\u0131t edilirse, edit\u00f6rde varolan t\u00fcm i\u00e7eri\u011fi kaybedebilirsiniz.\n\nGeri y\u00fcklemenin i\u00e7eri\u011fe kaydedilmesini istedi\u011finizden emin misiniz?","restore_content":"Geri y\u00fckleme i\u00e7eri\u011fe otomatik kaydedildi.","unload_msg":"Bu sayfadan \u00e7\u0131karsan\u0131z yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikler kaybolabilir."},fullscreen:{desc:"Tam ekran modunu a\u00e7/kapat"},media:{edit:"T\u00fcmle\u015fik medya d\u00fczenle",desc:"T\u00fcmle\u015fik medya ekle / d\u00fczenle","delta_height":"","delta_width":""},fullpage:{desc:"Belge \u00f6zellikleri","delta_width":"","delta_height":""},template:{desc:"\u00d6ntan\u0131ml\u0131 i\u00e7erik \u015fablonu kullan"},visualchars:{desc:"G\u00f6rsel karakter kontrol\u00fc a\u00e7\u0131k/kapal\u0131."},spellchecker:{desc:"\u0130mla kontrol\u00fcn\u00fc a\u00e7/kapat",menu:"\u0130mla kontrol\u00fc ayarlar\u0131","ignore_word":"S\u00f6zc\u00fc\u011f\u00fc yoksay","ignore_words":"T\u00fcm\u00fcn\u00fc yoksay",langs:"Diller",wait:"L\u00fctfen bekleyin...",sug:"\u00d6neriler","no_sug":"\u00d6neri yok","no_mpell":"\u0130mla hatas\u0131 bulunamad\u0131.","learn_word":"S\u00f6zc\u00fc\u011f\u00fc \u00f6\u011fren"},pagebreak:{desc:"Sayfa sonu ekle."},advlist:{types:"Tipler",def:"Varsay\u0131lan","lower_alpha":"K\u00fc\u00e7\u00fck harf alfa","lower_greek":"K\u00fc\u00e7\u00fck harf grek","lower_roman":"K\u00fc\u00e7\u00fck harf roman","upper_alpha":"B\u00fcy\u00fck harf alfa","upper_roman":"B\u00fcy\u00fck harf roman",circle:"\u00c7ember",disc:"Daire",square:"Kare"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Zengin Metin Alan\u0131"},wordcount:{words:"Kelimeler:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tt.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tt.js
new file mode 100644
index 000000000..697b7a270
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({tt:{common:{"more_colors":"\u66f4\u591a\u9854\u8272","invalid_data":"\u932f\u8aa4\uff1a\u8f38\u5165\u4e86\u7121\u6548\u7684\u503c\uff0c\u5df2\u6a19\u8a18\u7232\u7d05\u8272\u3002","popup_blocked":"\u5c0d\u4e0d\u8d77\uff0c\u60a8\u7684\u5feb\u986f\u8996\u7a97\u963b\u6b62\u7a0b\u5f0f\u5df2\u7d93\u963b\u6b62\u4e86\u672c\u5feb\u986f\u8996\u7a97\uff0c\u8acb\u8abf\u6574\u4f60\u7684\u700f\u89bd\u5668\u8a2d\u5b9a\uff0c\u5141\u8a31\u672c\u7db2\u7ad9\u5f48\u51fa\u65b0\u7a97\u53e3\uff0c\u4ee5\u4fbf\u4f7f\u7528\u6b64\u529f\u80fd","clipboard_no_support":"\u5c1a\u4e0d\u652f\u63f4\u60a8\u6240\u4f7f\u7528\u7684\u700f\u89bd\u5668\uff0c\u8acb\u4f7f\u7528\u9375\u76e4\u65b9\u5f0f\u64cd\u4f5c","clipboard_msg":"\u8907\u88fd\u3001\u526a\u4e0b\u548c\u8cbc\u4e0a\u529f\u80fd\u5728Mozilla \u548c Firefox\u4e2d\u7121\u6cd5\u4f7f\u7528","not_set":"-- \u672a\u8a2d\u5b9a --","class_name":"\u6a23\u5f0f\u985e\u540d",browse:"\u700f\u89bd",close:"\u95dc\u9589",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u61c9\u7528","edit_confirm":"\u662f\u5426\u5728\u8a72text area\u5167\u5553\u7528\u6240\u898b\u5373\u6240\u5f97\u6a21\u5f0f\uff1f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u5169\u7aef\u5c0d\u9f4a",right:"\u9760\u53f3\u5c0d\u9f4a",center:"\u7f6e\u4e2d",left:"\u9760\u5de6\u5c0d\u9f4a",align:"\u5c0d\u9f4a\u65b9\u5f0f"},insertdatetime:{"day_short":"\u9031\u65e5,\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u73fe\u5728\u6642\u9593","insertdate_desc":"\u63d2\u5165\u4eca\u5929\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9810\u89bd"},directionality:{"rtl_desc":"\u6587\u5b57\u5f9e\u53f3\u5230\u5de6","ltr_desc":"\u6587\u5b57\u5f9e\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u589e\u5c64...","absolute_desc":"\u7d55\u5c0d\u4f4d\u7f6e","backward_desc":"\u5f8c\u7f6e","forward_desc":"\u524d\u7f6e","insertlayer_desc":"\u63d2\u5165\u5c64"},save:{"save_desc":"\u5b58\u6a94","cancel_desc":"\u653e\u68c4\u6240\u6709\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u767d\u5b57\u5143"},iespell:{download:"\u672a\u6aa2\u6e2c\u5230ieSpell\u5143\u4ef6\uff0c\u662f\u5426\u73fe\u5728\u5b89\u88dd ?","iespell_desc":"\u57f7\u884c\u62fc\u5b57\u6aa2\u67e5"},advhr:{"advhr_desc":"\u5206\u9694\u7dda","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u8868\u60c5","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u641c\u5c0b/\u53d6\u4ee3","search_desc":"\u641c\u5c0b","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7de8\u8f2f \u5716\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7de8\u8f2f \u9023\u7d50","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u63d2\u5165/\u7de8\u8f2f \u5c6c\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u522a\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7e2e\u5beb","abbr_desc":"\u7e2e\u5beb","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7de8\u8f2f CSS \u6a23\u5f0f\u8868","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u5168\u9078","paste_word_desc":"\u8cbc\u4e0a\u7232Word\u683c\u5f0f","paste_text_desc":"\u8cbc\u4e0a\u7232\u7d14\u6587\u5b57","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u5c07\u8907\u88fd(CTRL + C)\u7684\u5167\u5bb9\u8cbc\u4e0a(CTRL + V)\u5230\u8996\u7a97\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u865f\u865f","text_title":"\u5c07\u8907\u88fd(CTRL + C)\u7684\u5167\u5bb9\u8cbc\u4e0a(CTRL + V)\u5230\u8996\u7a97\u3002"},table:{cell:"\u5132\u5b58\u683c",col:"\u5217",row:"\u884c",del:"\u522a\u9664\u8868\u683c","copy_row_desc":"\u8907\u88fd\u7576\u524d\u5217","cut_row_desc":"\u526a\u4e0b\u7576\u524d\u5217","paste_row_after_desc":"\u8cbc\u4e0a\u884c\u5230\u4e0b\u65b9","paste_row_before_desc":"\u8cbc\u4e0a\u884c\u5230\u4e0a\u65b9","props_desc":"\u8868\u683c \u5c6c\u6027","cell_desc":"\u5132\u5b58\u683c \u5c6c\u6027","row_desc":"\u5217 \u5c6c\u6027","merge_cells_desc":"\u5408\u4f75\u5132\u5b58\u683c","split_cells_desc":"\u62c6\u5206\u5132\u5b58\u683c","delete_col_desc":"\u522a\u9664\u7576\u524d\u5217","col_after_desc":"\u5728\u53f3\u5074\u63d2\u5165\u5217","col_before_desc":"\u5728\u5de6\u5074\u63d2\u5165\u5217","delete_row_desc":"\u522a\u9664\u7576\u524d\u884c","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u5982\u679c\u96e2\u958b\u8a72\u9801\u5c07\u5c0e\u81f4\u6240\u6709\u4fee\u6539\u5168\u90e8\u907a\u5931\u3002","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u5168\u87a2\u5e55\u6a21\u5f0f"},media:{edit:"\u7de8\u8f2f \u5a92\u9ad4",desc:"\u63d2\u5165/\u7de8\u8f2f \u5a92\u9ad4","delta_height":"","delta_width":""},fullpage:{desc:"\u6587\u4ef6","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9078\u5b9a\u7684\u7bc4\u672c"},visualchars:{desc:"\u986f\u793a\u63a7\u5236\u7b26\u865f\u3002"},spellchecker:{desc:"\u62fc\u5b57\u6aa2\u67e5",menu:"\u62fc\u5b57\u6aa2\u67e5 \u8a2d\u5b9a","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8a9e\u8a00\u6e05\u55ae",wait:"\u8acb\u7a0d\u5019...",sug:"\u5efa\u8b70\u8a5e","no_sug":"\u7121\u62fc\u5b57\u5efa\u8b70","no_mpell":"\u7121\u62fc\u5b57\u932f\u8aa4","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9801\u7b26\u865f"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tw.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tw.js
new file mode 100644
index 000000000..0503679ca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({tw:{common:{"more_colors":"\u66f4\u591a\u984f\u8272...","invalid_data":"\u60a8\u8f38\u5165\u7684\u8cc7\u6599\u6709\u932f\u8aa4\uff08\u7d05\u8272\u90e8\u5206\uff09","popup_blocked":"\u60a8\u7684\u700f\u89bd\u5668\u7981\u6b62\u5f48\u51fa\u8996\u7a97\u3002","clipboard_no_support":"\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u8a72\u529f\u80fd\uff0c\u8acb\u4f7f\u7528Ctrl + C\u9375\u4ee3\u66ff\u3002","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u8907\u88fd\u529f\u80fd\u3002","not_set":"--\u5c1a\u672a\u8a2d\u5b9a--","class_name":"\u985e\u5225",browse:"\u9810\u89bd",close:"\u95dc\u9589",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5957\u7528","edit_confirm":"\u662f\u5426\u9700\u8981\u958b\u555f\u6587\u5b57\u7de8\u8f2f\u5668\uff1f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u5de6\u53f3\u5c0d\u9f4a",right:"\u9760\u53f3\u5c0d\u9f4a",center:"\u7f6e\u4e2d\u5c0d\u9f4a",left:"\u9760\u5de6\u5c0d\u9f4a",align:"\u5c0d\u9f4a"},insertdatetime:{"day_short":"\u9031\u65e5,\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u76ee\u524d\u6642\u9593","insertdate_desc":"\u63d2\u5165\u76ee\u524d\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y/%m/%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9810\u89bd"},directionality:{"rtl_desc":"\u5f9e\u53f3\u5230\u5de6","ltr_desc":"\u5f9e\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u5efa\u5716\u5c64...","absolute_desc":"\u5207\u63db\u5230\u7d55\u5c0d\u4f4d\u7f6e","backward_desc":"\u7f6e\u5f8c","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u5716\u5c64"},save:{"save_desc":"\u5b58\u6a94","cancel_desc":"\u53d6\u6d88\u6240\u6709\u8b8a\u66f4"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u683c"},iespell:{download:"\u6aa2\u67e5\u4e0d\u5230ieSpell\u5916\u639b\u7a0b\u5f0f\u7a0b\u5f0f\uff0c\u662f\u5426\u7acb\u5373\u5b89\u88dd\uff1f","iespell_desc":"\u62fc\u5b57\u6aa2\u67e5"},advhr:{"advhr_desc":"\u6c34\u5e73\u7dda","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u8868\u60c5","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u641c\u5c0b/\u53d6\u4ee3","search_desc":"\u641c\u5c0b","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7de8\u8f2f\u8d85\u9023\u7d50","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"60","attribs_delta_width":"40","attribs_desc":"\u63d2\u5165/\u7de8\u8f2f\u5c6c\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u522a\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7e2e\u5beb","abbr_desc":"\u7e2e\u5beb","cite_desc":"\u5f15\u7528","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7de8\u8f2f CSS \u6a23\u5f0f\u8868","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u76ee\u524d\u70ba\u4e00\u822c\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u518d\u9ede\u9ede\u95b1\u4e00\u6b21\u5207\u63db\u56de\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\u3002","plaintext_mode_sticky":"\u76ee\u524d\u70ba\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u518d\u9ede\u95b1\u4e00\u6b21\u5207\u63db\u56de\u4e00\u822c\u6a21\u5f0f\u3002","selectall_desc":"\u5168\u9078","paste_word_desc":"\u4ee5Word\u683c\u5f0f\u8cbc\u4e0a","paste_text_desc":"\u4ee5\u7d14\u6587\u5b57\u8cbc\u4e0a"},"paste_dlg":{"word_title":"\u7528 Ctrl+V \u5c07\u5167\u5bb9\u8cbc\u4e0a\u3002","text_linebreaks":"\u4fdd\u7559\u63db\u884c\u7b26\u865f","text_title":"\u7528 Ctrl+V \u5c07\u5167\u5bb9\u8cbc\u4e0a\u3002"},table:{"merge_cells_delta_height":"40","merge_cells_delta_width":"40","table_delta_height":"60","table_delta_width":"40","cellprops_delta_height":"10","cellprops_delta_width":"10",cell:"\u5132\u5b58\u683c",col:"\u6b04",row:"\u884c",del:"\u522a\u9664\u8868\u683c","copy_row_desc":"\u8907\u88fd\u9078\u64c7\u884c","cut_row_desc":"\u526a\u4e0b\u9078\u64c7\u884c","paste_row_after_desc":"\u5728\u4e0b\u65b9\u8cbc\u4e0a\u884c","paste_row_before_desc":"\u5728\u4e0a\u65b9\u8cbc\u4e0a\u884c","props_desc":"\u8868\u683c\u5c6c\u6027","cell_desc":"\u5132\u5b58\u683c\u5c6c\u6027","row_desc":"\u884c\u5c6c\u6027","merge_cells_desc":"\u5408\u4f75\u5132\u5b58\u683c","split_cells_desc":"\u5206\u5272\u5132\u5b58\u683c","delete_col_desc":"\u522a\u9664\u76ee\u524d\u6b04","col_after_desc":"\u5728\u53f3\u5074\u63d2\u5165\u6b04","col_before_desc":"\u5728\u5de6\u5074\u63d2\u5165\u6b04","delete_row_desc":"\u522a\u9664\u76ee\u524d\u884c","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u6062\u5fa9\u5148\u524d\u5132\u5b58\u7684\u5167\u5bb9\uff0c\u60a8\u5c07\u5931\u53bb\u7de8\u8f2f\u5668\u4e2d\u73fe\u6709\u7684\u5167\u5bb9\u3002 \n\n\u60a8\u78ba\u5b9a\u8981\u6062\u5fa9\u5148\u524d\u5132\u5b58\u7684\u5167\u5bb9\u55ce\uff1f","restore_content":"\u6062\u5fa9\u81ea\u52d5\u5132\u5b58\u7684\u5167\u5bb9\u3002","unload_msg":"\u60a8\u5c1a\u672a\u5132\u5b58\u8cc7\u6599\uff0c\u60a8\u8f38\u5165\u7684\u8cc7\u6599\u53ef\u80fd\u6703\u907a\u5931..."},fullscreen:{desc:"\u5168\u87a2\u5e55\u7de8\u8f2f"},media:{edit:"\u7de8\u8f2f\u5f71\u7247",desc:"\u63d2\u5165/\u7de8\u8f2f\u5f71\u7247","delta_height":"","delta_width":""},fullpage:{desc:"\u6a94\u6848\u5c6c\u6027","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9810\u8a2d\u6a21\u677f"},visualchars:{desc:"\u986f\u793a/\u96b1\u85cf\u4e0d\u53ef\u898b\u5b57\u5143"},spellchecker:{desc:"\u958b\u95dc\u62fc\u5b57\u6aa2\u67e5",menu:"\u62fc\u5b57\u6aa2\u67e5\u8a2d\u5b9a","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8a9e\u8a00",wait:"\u8acb\u7a0d\u5019...",sug:"\u5efa\u8b70","no_sug":"\u7121\u5efa\u8b70","no_mpell":"\u7121\u62fc\u5b57\u932f\u8aa4","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9801\u7b26\u865f"},advlist:{types:"\u6a23\u5f0f",def:"\u9810\u8a2d","lower_alpha":"\u5c0f\u5beb\u7684\u82f1\u6587\u5b57","lower_greek":"\u5c0f\u5beb\u7684\u5e0c\u81d8\u6587\u5b57","lower_roman":"\u5c0f\u5beb\u7684\u7f85\u99ac\u6578\u5b57","upper_alpha":"\u5927\u5beb\u7684\u82f1\u6587\u5b57","upper_roman":"\u5927\u5beb\u7684\u7f85\u99ac\u6578\u5b57",circle:"\u5713\u5708",disc:"\u5713\u9ede",square:"\u65b9\u584a"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/uk.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/uk.js
new file mode 100644
index 000000000..514b66be9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/uk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({uk:{common:{"more_colors":"\u0411\u0456\u043b\u044c\u0448\u0435 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432","invalid_data":"\u041f\u043e\u043c\u0438\u043b\u043a\u0430: \u0412\u0432\u0435\u0434\u0435\u043d\u043e \u043f\u043e\u043c\u0438\u043b\u043a\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f, \u0432\u0456\u0434\u043c\u0456\u0447\u0435\u043d\u0435 \u0447\u0435\u0440\u0432\u043e\u043d\u0438\u043c.","popup_blocked":"\u0414\u0443\u0436\u0435 \u043f\u0440\u0438\u043a\u0440\u043e, \u0430\u043b\u0435 \u0432\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0437\u0430\u0431\u043b\u043e\u043a\u0443\u0432\u0430\u0432 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e. \u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0439\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0442\u0430\u043a, \u0449\u043e\u0431 \u0432\u0456\u043d \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0432 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0456 \u0432\u0456\u043a\u043d\u0430 \u0437 \u0446\u044c\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0443.","clipboard_no_support":"\u041d\u0430\u0440\u0430\u0437\u0456 \u0446\u044f \u0444\u0443\u043d\u043a\u0446\u0456\u044f \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u0432\u0430\u0448\u043e\u043c\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456, \u0430\u043b\u0435 \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0443 \u0437\u0430\u043c\u0456\u0441\u0442\u044c \u0446\u044c\u043e\u0433\u043e.","clipboard_msg":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438/\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438/\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 Mozilla \u0442\u0430 Firefox.\n\u0412\u0430\u043c \u0446\u0456\u043a\u0430\u0432\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u043f\u0440\u043e \u0446\u0435?","not_set":"-- \u043d\u0435 \u0432\u0438\u0431\u0440\u0430\u043d\u043e --","class_name":"\u041a\u043b\u0430\u0441",browse:"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434",close:"\u0417\u0430\u043a\u0440\u0438\u0442\u0438",cancel:"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438",update:"\u041e\u043d\u043e\u0432\u0438\u0442\u0438",insert:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438",apply:"\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438","edit_confirm":"\u0412\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 WYSIWYG \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u043f\u043e\u043b\u044f?","invalid_data_number":"{#field} \u043f\u043e\u0432\u0438\u043d\u043d\u0435 \u0431\u0443\u0442\u0438 \u0447\u0438\u0441\u043b\u043e\u043c","invalid_data_min":"{#field} \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0432\u0438\u043d\u043d\u0435 \u0431\u0443\u0442\u0438 \u0431\u0456\u043b\u044c\u0448\u0435 \u043d\u0456\u0436 {#min}","invalid_data_size":"{#field} \u043f\u043e\u0432\u0438\u043d\u043d\u0435 \u0431\u0443\u0442\u0438 \u0447\u0438\u0441\u043b\u043e\u043c \u0430\u0431\u043e \u0432\u0456\u0434\u0441\u043e\u0442\u043a\u043e\u043c",value:"(\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f)"},contextmenu:{full:"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0456",right:"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",center:"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",left:"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f"},insertdatetime:{"day_short":"\u041d\u0434,\u041f\u043d,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041f\u0442,\u0421\u0431,\u041d\u0434","day_long":"\u041d\u0435\u0434\u0456\u043b\u044f,\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a,\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a,\u0421\u0435\u0440\u0435\u0434\u0430,\u0427\u0435\u0442\u0432\u0435\u0440,\u041f\'\u044f\u0442\u043d\u0438\u0446\u044f,\u0421\u0443\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0456\u043b\u044f","months_short":"\u0421\u0456\u0447,\u041b\u044e\u0442,\u0411\u0435\u0440,\u041a\u0432\u0456,\u0422\u0440\u0430,\u0427\u0435\u0440,\u041b\u0438\u043f,\u0421\u0435\u0440,\u0412\u0435\u0440,\u0416\u043e\u0432,\u041b\u0438\u0441,\u0413\u0440\u0443","months_long":"\u0421\u0456\u0447\u0435\u043d\u044c,\u041b\u044e\u0442\u0438\u0439,\u0411\u0435\u0440\u0435\u0437\u0435\u043d\u044c,\u041a\u0432\u0456\u0442\u0435\u043d\u044c,\u0422\u0440\u0430\u0432\u0435\u043d\u044c,\u0427\u0435\u0440\u0432\u0435\u043d\u044c,\u041b\u0438\u043f\u0435\u043d\u044c,\u0421\u0435\u0440\u043f\u0435\u043d\u044c,\u0412\u0435\u0440\u0435\u0441\u0435\u043d\u044c,\u0416\u043e\u0432\u0442\u0435\u043d\u044c,\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434,\u0413\u0440\u0443\u0434\u0435\u043d\u044c","inserttime_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0447\u0430\u0441","insertdate_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0434\u0430\u0442\u0443","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438"},preview:{"preview_desc":"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434"},directionality:{"rtl_desc":"\u041d\u0430\u043f\u0440\u044f\u043c \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e","ltr_desc":"\u041d\u0430\u043f\u0440\u044f\u043c \u0437\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e"},layer:{content:"\u041d\u043e\u0432\u0438\u0439 \u043f\u0440\u043e\u0448\u0430\u0440\u043e\u043a...","absolute_desc":"\u041f\u0435\u0440\u0435\u043c\u0438\u043a\u043d\u0443\u0442\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0435 \u043f\u043e\u0437\u0438\u0446\u0456\u044e\u0432\u0430\u043d\u043d\u044f","backward_desc":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u043d\u0430\u0437\u0430\u0434","forward_desc":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0432\u043f\u0435\u0440\u0435\u0434","insertlayer_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u043f\u0440\u043e\u0448\u0430\u0440\u043e\u043a"},save:{"save_desc":"\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438","cancel_desc":"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0456 \u0437\u043c\u0456\u043d\u0438"},nonbreaking:{"nonbreaking_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u0435\u0440\u043e\u0437\u0440\u0438\u0432\u043d\u0438\u0439 \u043f\u0440\u043e\u043c\u0456\u0436\u043e\u043a"},iespell:{download:"\u0414\u043e\u0434\u0430\u0442\u043e\u043a ieSpell \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e. \u0411\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438?","iespell_desc":"\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0443 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0457"},advhr:{"advhr_desc":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0438\u043a","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0421\u043c\u0430\u0439\u043b\u0438","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0428\u0443\u043a\u0430\u0442\u0438/\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438","search_desc":"\u0428\u0443\u043a\u0430\u0442\u0438","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","delta_height":""},xhtmlxtras:{"attribs_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","ins_desc":"\u0412\u0441\u0442\u0430\u0432\u043a\u0430","del_desc":"\u0412\u0438\u0434\u0430\u043b\u0435\u043d\u043d\u044f","acronym_desc":"\u0410\u043a\u0440\u043e\u043d\u0456\u043c","abbr_desc":"\u0410\u0431\u0440\u0435\u0432\u0456\u0430\u0442\u0443\u0440\u0430","cite_desc":"\u0426\u0438\u0442\u0430\u0442\u0430","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 CSS \u0441\u0442\u0438\u043b\u044c","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u0412 \u0434\u0430\u043d\u0438\u0439 \u0447\u0430\u0441 \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0456 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u0437\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u043d\u043d\u044f \u043d\u0430\u0437\u0430\u0434 \u0432 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0412\u0441\u0442\u0430\u0432\u043a\u0438.","plaintext_mode_sticky":"\u0412 \u0434\u0430\u043d\u0438\u0439 \u0447\u0430\u0441 \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0456 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u0437\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u043d\u043d\u044f \u043d\u0430\u0437\u0430\u0434 \u0432 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0412\u0441\u0442\u0430\u0432\u043a\u0438.. \u041f\u0456\u0441\u043b\u044f \u0442\u043e\u0433\u043e, \u044f\u043a \u0412\u0438 \u0449\u043e-\u043d\u0435\u0431\u0443\u0434\u044c \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u0435, \u0412\u0438 \u043f\u043e\u0432\u0435\u0440\u043d\u0435\u0442\u0435\u0441\u044c \u0432 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u043c\u0439 \u0440\u0435\u0436\u0438\u043c \u0412\u0441\u0442\u0430\u0432\u043a\u0438.","selectall_desc":"\u0412\u0438\u0434\u0456\u043b\u0438\u0442\u0438 \u0432\u0441\u0435","paste_word_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0437 Word","paste_text_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u044f\u043a \u0442\u0435\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e.","text_linebreaks":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438 \u0440\u044f\u0434\u043a\u0456\u0432","text_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e."},table:{"cellprops_delta_width":"30",cell:"\u041a\u043e\u043c\u0456\u0440\u043a\u0430",col:"\u0421\u0442\u043e\u0432\u043f\u0435\u0446\u044c",row:"\u0420\u044f\u0434\u043e\u043a",del:"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e","copy_row_desc":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","cut_row_desc":"\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","paste_row_after_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u043f\u0456\u0441\u043b\u044f","paste_row_before_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0434\u043e","props_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","cell_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0440\u044f\u0434\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","merge_cells_desc":"\u041e\u0431\'\u0454\u0434\u043d\u0430\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438","split_cells_desc":"\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438","delete_col_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c","col_after_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043f\u0456\u0441\u043b\u044f","col_before_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u0434\u043e","delete_row_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a","row_after_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u043f\u0456\u0441\u043b\u044f","row_before_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0434\u043e",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u043e\u0432\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044e","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u042f\u043a\u0449\u043e \u0432\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0439 \u0432\u043c\u0456\u0441\u0442, \u0442\u043e \u0432\u0438 \u0432\u0442\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u0435\u0441\u044c \u0432\u043c\u0456\u0441\u0442, \u044f\u043a\u0438\u0439 \u0432 \u0434\u0430\u043d\u0438\u0439 \u0447\u0430\u0441 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0456. \n\n\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0439 \u0437\u043c\u0456\u0441\u0442?.","restore_content":"\u0412\u0456\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043e\u0433\u043e \u0432\u043c\u0456\u0441\u0442\u0443.","unload_msg":"\u0417\u043c\u0456\u043d\u0438, \u044f\u043a\u0456 \u0432\u0438 \u0437\u0440\u043e\u0431\u0438\u043b\u0438, \u0431\u0443\u0434\u0443\u0442\u044c \u0432\u0442\u0440\u0430\u0447\u0435\u043d\u0456, \u044f\u043a\u0449\u043e \u0432\u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442\u0435 \u0437 \u0446\u0456\u0454\u0457 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438."},fullscreen:{desc:"\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u0438 \u043d\u0430 \u0432\u0435\u0441\u044c \u0435\u043a\u0440\u0430\u043d"},media:{edit:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u0456 \u043c\u0435\u0434\u0456\u0430",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 / \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u0456 \u043c\u0435\u0434\u0456\u0430","delta_height":"","delta_width":""},fullpage:{desc:"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","delta_width":"","delta_height":""},template:{desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442"},visualchars:{desc:"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432 \u0432\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043d\u044f / \u0432\u0438\u043c\u043a\u043d\u0435\u043d\u043d\u044f."},spellchecker:{desc:"\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0443",menu:"\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438","ignore_word":"\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438 \u0441\u043b\u043e\u0432\u043e","ignore_words":"\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438 \u0432\u0441\u0435",langs:"\u041c\u043e\u0432\u0438",wait:"\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0437\u0430\u0447\u0435\u043a\u0430\u0439\u0442\u0435...",sug:"\u0412\u0430\u0440\u0456\u0430\u043d\u0442\u0438","no_sug":"\u041d\u0435\u043c\u0430\u0454 \u0432\u0430\u0440\u0456\u0430\u043d\u0442\u0456\u0432","no_mpell":"\u041f\u043e\u043c\u0438\u043b\u043e\u043a \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e.","learn_word":"\u0417\u0430\u043f\u0430\u043c\'\u044f\u0442\u0430\u0442\u0438 \u0441\u043b\u043e\u0432\u043e"},pagebreak:{desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0438\u043a \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438."},advlist:{types:"\u0422\u0438\u043f\u0438",def:"\u0417\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0430\u043d\u043d\u044f\u043c","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"\u041a\u043e\u043b\u043e",disc:"\u0414\u0438\u0441\u043a",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442"},colors:{"333300":"\u0422\u0435\u043c\u043d\u043e-\u043e\u043b\u0438\u0432\u043a\u043e\u0432\u0438\u0439","993300":"\u041f\u043e\u043c\u0430\u0440\u0430\u043d\u0447\u0435\u0432\u0438\u0439","000000":"\u0427\u043e\u0440\u043d\u0438\u0439","003300":"\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439",FF6600:"\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u0438\u0439","808000":"\u041e\u043b\u0438\u0432\u043a\u043e\u0432\u0438\u0439","008000":"\u0417\u0435\u043b\u0435\u043d\u0438\u0439","0000FF":"\u0421\u0438\u043d\u0456\u0439","666699":"\u0421\u0456\u0440\u043e-\u0433\u043e\u043b\u0443\u0431\u0438\u0439","808080":"\u0421\u0456\u0440\u0438\u0439",FF0000:"\u0427\u0435\u0440\u0432\u043e\u043d\u0438\u0439","99CC00":"\u0416\u043e\u0432\u0442\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439","339966":"Sea green ",FFCC00:"\u0417\u043e\u043b\u043e\u0442\u0438\u0439",FFFF00:"\u0416\u043e\u0432\u0442\u0438\u0439","993366":"\u041a\u043e\u0440\u0438\u0447\u043d\u0435\u0432\u0438\u0439",C0C0C0:"\u0421\u0440\u0456\u0431\u043b\u044f\u0441\u0442\u0438\u0439",FF99CC:"\u0420\u043e\u0436\u0435\u0432\u0438\u0439",FFFF99:"\u0421\u0432\u0456\u0442\u043b\u043e \u0436\u043e\u0432\u0442\u0438\u0439",CC99FF:"\u0421\u043b\u0438\u0432\u043e\u0432\u0438\u0439",FFFFFF:"\u0411\u0456\u043b\u0438\u0439","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon","008080":"Teal",FF9900:"Amber","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue",FFCC99:"Peach",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue"},aria:{"rich_text_area":"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440"},wordcount:{words:"\u0421\u043b\u0456\u0432:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ur.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ur.js
new file mode 100644
index 000000000..99b40c699
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/ur.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ur:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"\u0627\u0653\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u06cc\u06c1 \u0633\u06c1\u0648\u0644\u062a \u0645\u06cc\u0633\u0631 \u0646\u06c1\u06cc\u06ba\u06d4 \u06a9\u06cc \u0628\u0648\u0631\u0688 \u0634\u0627\u0631\u0679 \u06a9\u0679 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- \u0646\u0627\u0679 \u0633\u06cc\u0679 --","class_name":"\u06a9\u0644\u0627\u0633",browse:"\u0628\u0631\u0627\u0624\u0632",close:"\u0628\u0646\u062f",cancel:"\u06a9\u06cc\u0646\u0633\u0644",update:"\u0627\u067e \u0688\u06cc\u0679",insert:"\u062f\u0627\u062e\u0644 \u06a9\u0631\u06cc\u06ba",apply:"\u0627\u067e\u0644\u0627\u0626\u06cc","edit_confirm":"\u06a9\u06cc\u0627 \u0627\u0653\u067e \u0627\u0633 \u0679\u06cc\u06a9\u0633\u0679 \u0627\u06cc\u0631\u06cc\u0627 \u06a9\u06cc\u0644\u0626\u06d2 \u0648\u0632\u06cc \u0648\u06af \u0645\u0648\u0688 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u061f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/vi.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/vi.js
new file mode 100644
index 000000000..966a38ac1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/vi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({vi:{common:{"more_colors":"M\u00e0u kh\u00e1c","invalid_data":"L\u1ed7i: Gi\u00e1 tr\u1ecb nh\u1eadp v\u00e0o kh\u00f4ng h\u1ee3p l\u1ec7. (\u0110\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u \u0111\u1ecf)","popup_blocked":"Xin l\u1ed7i, Nh\u01b0ng ch\u1ebf \u0111\u1ed9 c\u1eeda s\u1ed5 popup \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u ho\u00e1. B\u1ea1n s\u1ebd c\u1ea7n ph\u1ea3i t\u1eaft ch\u1ee9c n\u0103ng ch\u1eb7n popup tr\u00ean trang web n\u00e0y \u0111\u1ec3 s\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 n\u00e0y ho\u00e0n to\u00e0n.","clipboard_no_support":"S\u1eed d\u1ee5ng ph\u00edm t\u1eaft kh\u00f4ng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong tr\u00ecnh duy\u1ec7t hi\u1ec7n t\u1ea1i.","clipboard_msg":"Copy/Cut/Paste kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 trong tr\u00ecnh duy\u1ec7t web n\u00e0y.\nB\u1ea1n c\u00f3 mu\u1ed1n bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 v\u1ea5n \u0111\u1ec1 n\u00e0y kh\u00f4ng??","not_set":"-- Ch\u01b0a \u0111\u1eb7t --","class_name":"L\u1edbp",browse:"T\u00ecm",close:"Tho\u00e1t",cancel:"H\u1ee7y b\u1ecf",update:"C\u1eadp nh\u1eadt",insert:"Th\u00eam",apply:"Thay \u0111\u1ed5i","edit_confirm":"B\u1ea1n c\u00f3 mu\u1ed1n s\u1eed d\u1ee5ng ch\u1ebf \u0111\u1ed9 WYSIWYG cho textarea n\u00e0y?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u0110\u1ea7y",right:"Ph\u1ea3i",center:"Gi\u1eefa",left:"Tr\u00e1i",align:"Canh l\u1ec1"},insertdatetime:{"day_short":"CN,T2,T3,T4,T5,T6,T7,CN","day_long":"Ch\u1ee7 Nh\u1eadt,Th\u1ee9 Hai,Th\u1ee9 Ba,Th\u1ee9 T\u01b0,Th\u1ee9 N\u0103m,Th\u1ee9 S\u00e1u,Th\u1ee9 B\u1ea3y,Ch\u1ee7 Nh\u1eadt","months_short":"Thg1,Thg2,Thg3,Thg4,Thg5,Thg6,Thg7,Thg8,Thg9,Th10,Th11,Th12","months_long":"Th\u00e1ng M\u1ed9t,Th\u00e1ng Hai,Th\u00e1ng Ba,Th\u00e1ng T\u01b0,Th\u00e1ng N\u0103m,Th\u00e1ng S\u00e1u,Th\u00e1ng B\u1ea3y,Th\u00e1ng T\u00e1m,Th\u00e1ng Ch\u00edn,Th\u00e1ng M\u01b0\u1eddi,Th\u00e1ng M\u01b0\u1eddi M\u1ed9t,Th\u00e1ng M\u01b0\u1eddi Hai","inserttime_desc":"Ch\u00e8n gi\u1edd","insertdate_desc":"Ch\u00e8n ng\u00e0y","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"In"},preview:{"preview_desc":"Xem tr\u01b0\u1edbc"},directionality:{"rtl_desc":"H\u01b0\u1edbng ph\u1ea3i qua tr\u00e1i","ltr_desc":"H\u01b0\u1edbng tr\u00e1i qua ph\u1ea3i"},layer:{content:"L\u1edbp m\u1edbi...","absolute_desc":"\u0110\u1ea3o v\u1ecb tr\u00ed c\u1ed1 \u0111\u1ecbnh","backward_desc":"Di chuy\u1ec3n v\u1ec1 sau","forward_desc":"Di chuy\u1ec3n v\u1ec1 tr\u01b0\u1edbc","insertlayer_desc":"Ch\u00e8n l\u1edbp m\u1edbi"},save:{"save_desc":"L\u01b0u","cancel_desc":"H\u1ee7y b\u1ecf t\u1ea5t c\u1ea3 thay \u0111\u1ed5i"},nonbreaking:{"nonbreaking_desc":"Ch\u00e8n k\u00fd t\u1ef1 kho\u1ea3ng c\u00e1ch kh\u00f4ng b\u1ecb ng\u1eaft"},iespell:{download:"ieSpell kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e1t hi\u1ec7n. B\u1ea1n c\u00f3 mu\u1ed1n c\u00e0i \u0111\u1eb7t n\u00f3 b\u00e2y gi\u1edd?","iespell_desc":"Ch\u1ea1y tr\u00ecnh ki\u1ec3m tra ch\u00ednh t\u1ea3"},advhr:{"advhr_desc":"Th\u01b0\u1edbc ngang","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Bi\u1ec3u T\u01b0\u1ee3ng C\u1ea3m X\u00fac","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"T\u00ecm/Thay th\u1ebf","search_desc":"T\u00ecm","delta_width":"","delta_height":""},advimage:{"image_desc":"Ch\u00e8n/s\u1eeda \u1ea3nh","delta_width":"","delta_height":""},advlink:{"link_desc":"Th\u00eam/S\u1eeda Link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Ch\u00e8n/S\u1eeda c\u00e1c thu\u1ed9c t\u00ednh","ins_desc":"Ch\u00e8n","del_desc":"X\u00f3a","acronym_desc":"T\u1eeb vi\u1ebft t\u1eaft","abbr_desc":"T\u00ean vi\u1ebft t\u1eaft","cite_desc":"Bi\u00ea\u0309u ch\u01b0\u01a1ng","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"S\u1eeda ki\u1ec3u d\u00e1ng CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Ch\u1ecdn t\u1ea5t","paste_word_desc":"D\u00e1n t\u1eeb Word","paste_text_desc":"D\u00e1nh nh\u01b0 Plain Text"},"paste_dlg":{"word_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5.","text_linebreaks":"Gi\u1eef ng\u1eaft d\u00f2ng","text_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5."},table:{cell:"\u00d4",col:"C\u1ed9t",row:"H\u00e0ng",del:"X\u00f3a b\u1ea3ng","copy_row_desc":"Sao ch\u00e9p h\u00e0ng","cut_row_desc":"C\u1eaft h\u00e0ng","paste_row_after_desc":"D\u00e1n hang v\u00e0o sau","paste_row_before_desc":"D\u00e1n hang v\u00e0o tr\u01b0\u1edbc","props_desc":"Thu\u1ed9c t\u00ednh b\u1ea3ng","cell_desc":"Thu\u1ed9c t\u00ednh \u00f4","row_desc":"Thu\u1ed9c t\u00ednh h\u00e0ng","merge_cells_desc":"K\u1ebft h\u1ee3p c\u00e1c \u00f4 c\u1ee7a b\u1ea3ng","split_cells_desc":"T\u00e1ch c\u00e1c \u00f4 \u0111\u00e3 k\u1ebft h\u1ee3p c\u1ee7a b\u1ea3ng","delete_col_desc":"Lo\u1ea1i b\u1ecf c\u1ed9t","col_after_desc":"Ch\u00e8n c\u1ed9t v\u00e0o sau","col_before_desc":"Ch\u00e8n c\u1ed9t v\u00e0o tr\u01b0\u1edbc","delete_row_desc":"X\u00f3a d\u00f2ng","row_after_desc":"Ch\u00e8n h\u00e0ng v\u00e0o sau","row_before_desc":"Ch\u00e8n h\u00e0ng v\u00e0o tr\u01b0\u1edbc",desc:"Ch\u00e8n m\u1ed9t b\u1ea3ng m\u1edbi","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"N\u1ebfu b\u1ea1n kh\u00f4i ph\u1ee5c l\u1ea1i n\u1ed9i dung \u0111\u00e3 l\u01b0u, b\u1ea1n s\u1ebd m\u1ea5t t\u1ea5t c\u1ea3 c\u00e1c n\u1ed9i dung m\u00e0 hi\u1ec7n \u0111ang trong tr\u00ecnh so\u1ea1n th\u1ea3o.\n\nB\u1ea1n c\u00f3 ch\u1eafc l\u00e0 b\u1ea1n mu\u1ed1n kh\u00f4i ph\u1ee5c l\u1ea1i n\u1ed9i dung \u0111\u00e3 l\u01b0u?.","restore_content":"Kh\u00f4i ph\u1ee5c n\u1ed9i dung t\u1ef1 \u0111\u1ed9ng l\u01b0u l\u1ea1i.","unload_msg":"Nh\u1eefng thay \u0111\u1ed5i b\u1ea1n \u0111\u00e3 th\u1ef1c hi\u1ec7n s\u1ebd b\u1ecb m\u1ea5t n\u1ebfu b\u1ea1n \u0111i\u1ec1u h\u01b0\u1edbng \u0111i t\u1eeb trang n\u00e0y."},fullscreen:{desc:"B\u1eadt/t\u1eaft ch\u1ebf \u0111\u1ed9 to\u00e0n m\u00e0n h\u00ecnh"},media:{edit:"S\u1eeda ph\u01b0\u01a1ng ti\u1ec7n truy\u1ec1n th\u00f4ng nh\u00fang",desc:"Ch\u00e8n / s\u1eeda ph\u01b0\u01a1ng ti\u1ec7n truy\u1ec1n th\u00f4ng nh\u00fang","delta_height":"","delta_width":""},fullpage:{desc:"Thu\u1ed9c t\u00ednh v\u0103n b\u1ea3n","delta_width":"","delta_height":""},template:{desc:"Ch\u00e8n m\u1ed9t n\u1ed9i dung m\u1eabu \u0111\u1ecbnh ngh\u0129a tr\u01b0\u1edbc"},visualchars:{desc:"B\u1eb7t/T\u1eaft c\u00e1c k\u00fd t\u1ef1 \u0111i\u1ec1u khi\u1ec3n tr\u1ef1c quan."},spellchecker:{desc:"B\u1eadt/T\u1eaft ki\u1ec3m tra ch\u00ednh t\u1ea3",menu:"Thi\u1ebft l\u1eadp ki\u1ec3m tra ch\u00ednh t\u1ea3","ignore_word":"B\u1ecf qua t\u1eeb ng\u1eef","ignore_words":"B\u1ecf qua t\u1ea5t c\u1ea3",langs:"Ng\u00f4n ng\u1eef",wait:"Vui l\u00f2ng ch\u1edd...",sug:"G\u1ee3i \u00fd","no_sug":"Kh\u00f4ng c\u00f3 g\u1ee3i \u00fd","no_mpell":"Kh\u00f4ng c\u00f3 l\u1ed7i ch\u00ednh t\u1ea3 \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y.","learn_word":"Learn word"},pagebreak:{desc:"Ch\u00e8n ng\u1eaft trang."},advlist:{types:"Ki\u1ec3u",def:"M\u1eb7c \u0111\u1ecbnh","lower_alpha":"K\u00fd hi\u1ec7u alpha th\u01b0\u1eddng","lower_greek":"K\u00fd hi\u1ec7u Hy-l\u1ea1p th\u01b0\u1eddng","lower_roman":"K\u00fd hi\u1ec7u La m\u00e3 th\u01b0\u1eddng","upper_alpha":"K\u00fd hi\u1ec7u alpha cao","upper_roman":"K\u00fd hi\u1ec7u La m\u00e3 hoa",circle:"Tr\u00f2ng",disc:"\u0110\u0129a",square:"Vu\u00f4ng"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh-cn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh-cn.js
new file mode 100644
index 000000000..42f7abbc9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh-cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({"zh-cn":{common:{"more_colors":"\u66f4\u591a\u989c\u8272","invalid_data":"\u9519\u8bef\uff1a\u6807\u8bb0\u4e3a\u7ea2\u8272\u7684\u90e8\u5206\u6709\u8bef\u3002","popup_blocked":"\u62b1\u6b49\uff0c\u60a8\u7981\u7528\u4e86\u5f39\u51fa\u7a97\u53e3\u529f\u80fd\u3002\u4e3a\u4e86\u4f7f\u7528\u8be5\u5de5\u5177\u7684\u5168\u90e8\u529f\u80fd\uff0c\u60a8\u9700\u8981\u5141\u8bb8\u5f39\u51fa\u7a97\u53e3\u3002","clipboard_no_support":"\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\uff0c\u4f7f\u7528\u5feb\u6377\u952e\u4ee3\u66ff\u3002","clipboard_msg":"\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u590d\u5236/\u7c98\u8d34/\u526a\u5207\u3002\u60a8\u8981\u67e5\u770b\u8be5\u95ee\u9898\u66f4\u591a\u7684\u4fe1\u606f\u5417\uff1f","not_set":"-- \u672a\u8bbe\u7f6e --","class_name":"\u7c7b\u522b",browse:"\u6d4f\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5e94\u7528","edit_confirm":"\u8be5\u6587\u672c\u57df\u662f\u5426\u9700\u8981\u4f7f\u7528\u6240\u89c1\u5373\u6240\u5f97\u6a21\u5f0f\uff1f","invalid_data_number":"{#field} \u5fc5\u987b\u4e3a\u6570\u5b57","invalid_data_min":"{#field} \u5fc5\u987b\u4e3a\u5927\u4e8e {#min} \u7684\u6570\u5b57","invalid_data_size":"{#field} \u5fc5\u987b\u4e3a\u6570\u5b57\u6216\u767e\u5206\u6570",value:"(value)"},contextmenu:{full:"\u4e24\u7aef\u5bf9\u9f50",right:"\u53f3\u5bf9\u9f50",center:"\u5c45\u4e2d",left:"\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50"},insertdatetime:{"day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u6253\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u6587\u5b57\u65b9\u5411\u4e3a\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u6587\u5b57\u65b9\u5411\u4e3a\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u5efa\u5c42...","absolute_desc":"\u5207\u6362\u5230\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u7f6e\u540e","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u65b0\u5c42"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u53d6\u6d88\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u4e0d\u95f4\u65ad\u7a7a\u683c\u7b26"},iespell:{download:"\u62fc\u5199\u68c0\u67e5\u672a\u5b89\u88c5\uff0c\u662f\u5426\u9a6c\u4e0a\u5b89\u88c5\uff1f","iespell_desc":"\u62fc\u5199\u68c0\u67e5"},advhr:{"delta_height":"\u9ad8\u5ea6","delta_width":"\u5bbd\u5ea6","advhr_desc":"\u6c34\u5e73\u7ebf"},emotions:{"emotions_desc":"\u8868\u60c5","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u67e5\u627e/\u66ff\u6362","search_desc":"\u67e5\u627e","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7f16\u8f91CSS\u6837\u5f0f","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u6a21\u5f0f\u7c98\u8d34\uff0c\u518d\u6b21\u70b9\u51fb\u8fd4\u56de\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002","plaintext_mode_sticky":"\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u6a21\u5f0f\u7c98\u8d34\u3002\u518d\u6b21\u70b9\u51fb\u8fd4\u56de\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\uff0c\u5728\u60a8\u7c98\u8d34\u5185\u5bb9\u540e\u5c06\u8fd4\u56de\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002","selectall_desc":"\u5168\u9009","paste_word_desc":"\u4eceWord\u7c98\u8d34","paste_text_desc":"\u4ee5\u7eaf\u6587\u672c\u7c98\u8d34"},"paste_dlg":{"word_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002","text_linebreaks":"\u4fdd\u7559\u65ad\u884c","text_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002"},table:{cell:"\u5355\u5143\u683c",col:"\u5217",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u884c","cut_row_desc":"\u526a\u5207\u884c","paste_row_after_desc":"\u5728\u4e0b\u65b9\u7c98\u8d34\u884c","paste_row_before_desc":"\u5728\u4e0a\u65b9\u7c98\u8d34\u884c","props_desc":"\u8868\u683c\u5c5e\u6027","cell_desc":"\u5355\u5143\u683c\u5c5e\u6027","row_desc":"\u884c\u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u5355\u5143\u683c","split_cells_desc":"\u5206\u5272\u5355\u5143\u683c","delete_col_desc":"\u5220\u9664\u5217","col_after_desc":"\u5728\u53f3\u4fa7\u63d2\u5165\u5217","col_before_desc":"\u5728\u5de6\u4fa7\u63d2\u5165\u5217","delete_row_desc":"\u5220\u9664\u884c","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u6062\u590d\u4fdd\u5b58\u7684\u5185\u5bb9\uff0c\u60a8\u5f53\u524d\u7f16\u8f91\u7684\u6240\u6709\u7684\u5185\u5bb9\u5c06\u4e22\u5931\u3002nn\u60a8\u786e\u5b9a\u8981\u6062\u590d\u4fdd\u5b58\u7684\u5185\u5bb9\u5417\uff1f","restore_content":"\u6062\u590d\u81ea\u52a8\u4fdd\u5b58\u7684\u5185\u5bb9\u3002","unload_msg":"\u5982\u679c\u9000\u51fa\u8be5\u9875\uff0c\u60a8\u6240\u505a\u7684\u66f4\u6539\u5c06\u4e22\u5931\u3002"},fullscreen:{desc:"\u5207\u6362\u5168\u5c4f\u6a21\u5f0f"},media:{edit:"\u7f16\u8f91\u5d4c\u5165\u5f0f\u5a92\u4f53",desc:"\u63d2\u5165/\u7f16\u8f91 \u5d4c\u5165\u5f0f\u5a92\u4f53","delta_height":"","delta_width":""},fullpage:{desc:"\u6587\u4ef6\u5c5e\u6027","delta_width":"\u5bbd\u5ea6","delta_height":"\u9ad8\u5ea6"},template:{desc:"\u63d2\u5165\u9884\u8bbe\u7684\u6a21\u677f\u5185\u5bb9"},visualchars:{desc:"\u663e\u793a/\u9690\u85cf \u975e\u53ef\u89c1\u5b57\u7b26"},spellchecker:{desc:"\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5199\u68c0\u67e5\u8bbe\u7f6e","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8bed\u8a00",wait:"\u8bf7\u7a0d\u5019...",sug:"\u5efa\u8bae","no_sug":"\u65e0\u5efa\u8bae","no_mpell":"\u65e0\u62fc\u5199\u9519\u8bef","learn_word":"\u5b66\u4e60\u8bcd\u7ec4"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26"},advlist:{types:"\u6837\u5f0f",def:"\u9ed8\u8ba4","lower_alpha":"\u5c0f\u5199\u5b57\u6bcd","lower_greek":"\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd","lower_roman":"\u5c0f\u5199\u7f57\u9a6c\u6570\u5b57","upper_alpha":"\u5927\u5199\u5b57\u6bcd","upper_roman":"\u5927\u5199\u7f57\u9a6c\u6570\u5b57",circle:"\u5706\u5708",disc:"\u5706\u70b9",square:"\u65b9\u5757"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"\u5bcc\u6587\u672c\u57df"},wordcount:{words:"\u5b57\u6570:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh-tw.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh-tw.js
new file mode 100644
index 000000000..9352b2649
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh-tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({"zh-tw":{common:{"more_colors":"\u5176\u4ed6\u984f\u8272","invalid_data":"\u7d05\u8272\u6a19\u793a\u8d77\u4f86\u7684\u5730\u65b9\u6709\u932f\u8aa4","popup_blocked":"\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u9019\u500b\u529f\u80fd\uff0c\u8acb\u6539\u8b8a\u8edf\u9ad4\u6709\u95dc\u5f48\u8df3\u8996\u7a97\u8a2d\u5b9a\uff0c\u8acb\u5141\u8a31\u4ed6\uff0c\u7a0b\u5f0f\u624d\u80fd\u6b63\u5e38\u904b\u4f5c","clipboard_no_support":"\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u9019\u500b\u529f\u80fd\uff0c\u8acb\u4f7f\u7528\u9375\u76e4\u4e0a\u7684\u5feb\u901f\u9375\u8a66\u8a66\u770b\uff0c\u656c\u8acb\u898b\u8ad2","clipboard_msg":"\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u529f\u80fd\u5594\uff01\u5efa\u8b70\u4f7f\u7528\u9375\u76e4\u4e0a\u7684 Ctrl X (\u526a\u4e0b) \u6216 Ctrl V (\u8cbc\u4e0a) \u4ee3\u66ff","not_set":"- \u672a\u8a2d\u5b9a -","class_name":"Class \u985e\u5225",browse:"\u700f\u89bd",close:"\u95dc\u9589\u756b\u9762",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u52a0\u5165",apply:"\u9810\u89bd","edit_confirm":"\u4f60\u8981\u4f7f\u7528\u300c\u6587\u5b57\u7de8\u8f2f\u5668\u300d\u4f86\u7de8\u8f2f\u4f60\u7684\u6587\u7ae0\u55ce\uff1f","invalid_data_number":"{#field} \u61c9\u8a72\u8981\u586b\u6578\u5b57","invalid_data_min":"{#field} \u4f60\u586b\u5beb\u7684\u6578\u5b57\uff0c\u5fc5\u9808\u5927\u65bc {#min}","invalid_data_size":"{#field} \u61c9\u8a72\u8981\u586b\u5beb\u6578\u5b57 \u6216 \u767e\u5206\u6bd4 (%)",value:"(value)"},contextmenu:{full:"\u5206\u6563\u5c0d\u9f4a",right:"\u5411\u53f3\u908a",center:"\u7f6e\u4e2d",left:"\u5411\u5de6\u908a",align:"\u5c0d\u9f4a\u65b9\u5f0f"},insertdatetime:{"day_short":"\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5","day_long":"\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u6642\u9593","insertdate_desc":"\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9810\u89bd"},directionality:{"rtl_desc":"\u5f9e\u53f3\u908a\u5230\u5de6\u908a","ltr_desc":"\u5f9e\u5de6\u908a\u5230\u53f3\u908a"},layer:{content:"\u65b0\u589e\u7db2\u9801\u5716\u5c64","absolute_desc":"\u5b9a\u4f4d","backward_desc":"\u653e\u5230\u5f8c\u9762","forward_desc":"\u6392\u5728\u524d\u9762","insertlayer_desc":"\u65b0\u589e\u7db2\u9801\u5716\u5c64"},save:{"save_desc":"\u5b58\u6a94","cancel_desc":"\u5168\u90e8\u53d6\u6d88"},nonbreaking:{"nonbreaking_desc":"\u52a0\u5165\u4e0d\u65b7\u884c\u7684\u7b26\u865f"},iespell:{download:"\u7a0b\u5f0f\u627e\u4e0d\u5230 ieSpell \uff0c\u4f60\u8981\u5b89\u88dd\u5b83\u55ce\uff1f","iespell_desc":"\u6aa2\u67e5\u82f1\u6587\u8a9e\u6cd5"},advhr:{"delta_height":"\u9ad8","delta_width":"\u5bec","advhr_desc":"\u6c34\u5e73\u7dda"},emotions:{"delta_height":"","emotions_desc":"\u8868\u60c5\u7b26\u865f","delta_width":""},searchreplace:{"replace_desc":"\u641c\u5c0b\u53d6\u4ee3","search_desc":"\u641c\u5c0b","delta_width":"","delta_height":""},advimage:{"image_desc":"\u52a0\u5165 / \u7de8\u8f2f\u5716\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u52a0\u5165 / \u7de8\u8f2f\u7db2\u5740","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u65b0\u589e / \u7de8\u8f2f\u5c6c\u6027","ins_desc":"\u65b0\u589e","del_desc":"\u522a\u9664","acronym_desc":"\u982d\u5b57\u8a9e (\u975e\u4e00\u822c\u82f1\u6587\u7e2e\u5beb)","abbr_desc":"\u82f1\u6587\u7e2e\u5beb","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7de8\u8f2f CSS \u6a23\u5f0f","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u73fe\u5728\u662f\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u4f60\u73fe\u5728\u8cbc\u4e0a\u7684\u8cc7\u6599\u53ea\u6703\u51fa\u73fe\u6587\u5b57","plaintext_mode_sticky":"\u73fe\u5728\u662f\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u4f60\u73fe\u5728\u8cbc\u4e0a\u7684\u8cc7\u6599\u53ea\u6703\u51fa\u73fe\u6587\u5b57\uff0c\u4f46\u4f60\u8cbc\u4e0a\u8cc7\u6599\u5f8c\u5c07\u56de\u5230\u4e00\u822c\u6a21\u5f0f\u53ef\u4ee5\u8cbc\u4e0a\u5716\u7247\u3001\u5f71\u7247\u7b49\u7b49","selectall_desc":"\u5168\u9078","paste_word_desc":"\u5f9e Word \u8cbc\u4e0a","paste_text_desc":"\u53ea\u8cbc\u4e0a\u6587\u5b57"},"paste_dlg":{"word_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8907\u88fd) \u8cc7\u6599\u5230\u756b\u9762\u4e0a","text_linebreaks":"\u4fdd\u7559\u6587\u7ae0\u4e2d\u7684\u63db\u884c","text_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8cbc\u4e0a) \u8cc7\u6599\u5230\u756b\u9762\u4e0a"},table:{cell:"\u5132\u5b58\u683c",col:"\u6b04",row:"\u5217",del:"\u522a\u9664\u8868\u683c","copy_row_desc":"\u8907\u88fd\u8868\u683c\u4e0a\u7684\u5217","cut_row_desc":"\u526a\u4e0b\u8868\u683c\u7684\u5217","paste_row_after_desc":"\u8cbc\u5728\u9019\u689d\u5217\u7684\u5f8c\u9762","paste_row_before_desc":"\u8cbc\u5728\u9019\u689d\u5217\u7684\u524d\u9762","props_desc":"\u8868\u683c\u8a2d\u5b9a","cell_desc":"\u5132\u5b58\u683c\u7684\u8a2d\u5b9a","row_desc":"\u5217\u7684\u8a2d\u5b9a","merge_cells_desc":"\u5408\u4f75\u8868\u683c","split_cells_desc":"\u5206\u5272\u5132\u5b58\u683c","delete_col_desc":"\u79fb\u9664\u8868\u683c\u6b04\u4f4d","col_after_desc":"\u5728\u53f3\u908a\u52a0\u5165\u4e00\u500b\u6b04\u4f4d","col_before_desc":"\u5728\u5de6\u908a\u52a0\u5165\u4e00\u500b\u6b04\u4f4d","delete_row_desc":"\u522a\u9664\u9019\u6574\u5217","row_after_desc":"\u5728\u4e0b\u65b9\u52a0\u5165\u4e00\u5217","row_before_desc":"\u5728\u4e0a\u65b9\u52a0\u5165\u4e00\u5217",desc:"\u65b0\u589e\u4e00\u500b\u8868\u683c","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u4f60\u8981\u9084\u539f\u8cc7\u6599\u7684\u8a71\uff0c\u4f60\u73fe\u5728\u7684\u6587\u7ae0\u5c07\u88ab\u522a\u9664\uff0c\u78ba\u5b9a\u8981\u9084\u539f\u55ce\uff1f","restore_content":"\u9084\u539f","unload_msg":"\u4f60\u5982\u679c\u96e2\u958b\u9019\u500b\u756b\u9762\uff0c\u7a0b\u5f0f\u6703\u79fb\u9664\u6587\u7ae0\u5099\u4efd (\u4f46\u4e0d\u5f71\u97ff\u5230\u7db2\u7ad9\u904b\u4f5c)"},fullscreen:{desc:"\u653e\u5927\u5230\u6574\u500b\u87a2\u5e55"},media:{"delta_height":"",edit:"\u6539\u8b8a\u8a2d\u5b9a",desc:"\u52a0\u5165\u5d4c\u5165\u8a9e\u6cd5","delta_width":""},fullpage:{desc:"\u9801\u9762\u5c6c\u6027","delta_width":"","delta_height":""},template:{desc:"\u4f7f\u7528\u7248\u578b"},visualchars:{desc:"\u986f\u793a\u96b1\u85cf\u7684\u5b57"},spellchecker:{desc:"\u4f7f\u7528\u82f1\u6587\u8a9e\u6cd5\u6aa2\u67e5",menu:"\u8a2d\u5b9a","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8a9e\u8a00",wait:"\u7a0d\u7b49",sug:"\u62fc\u5b57\u5efa\u8b70","no_sug":"\u7121","no_mpell":"\u6c92\u6709\u8a9e\u6cd5\u4e0a\u7684\u554f\u984c","learn_word":"\u81ea\u52d5\u5b78\u7fd2\u529f\u80fd"},pagebreak:{desc:"\u52a0\u4e0a\u5206\u9801\u7b26\u865f"},advlist:{types:"\u5f62\u5f0f",def:"\u9810\u8a2d","lower_alpha":"\u5c0f\u5beb\u7684\u82f1\u6587","lower_greek":"\u5e0c\u81d8\u6587","lower_roman":"\u5c0f\u5beb\u7684\u7f85\u99ac\u6578\u5b57","upper_alpha":"\u5927\u5beb\u7684\u82f1\u6587","upper_roman":"\u5927\u5beb\u7684\u7f85\u99ac\u6578\u5b57",circle:"\u7a7a\u5fc3\u7684\u5713\u5708\u5708",disc:"\u5713\u5708\u5708",square:"\u6b63\u65b9\u5f62"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"\u6587\u5b57\u7de8\u8f2f\u5340"},wordcount:{words:"\u6587\u7ae0\u5167\u7684\u5b57\u6578: "}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh.js
new file mode 100644
index 000000000..65488254d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zh.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({zh:{common:{"more_colors":"\u66f4\u591a\u984f\u8272","invalid_data":"\u932f\u8aa4: \u7d05\u8272\u6a19\u8a18\u7684\u90e8\u4efd, \u70ba\u60a8\u8f38\u5165\u7684\u503c\u662f\u7121\u6548\u7684.","popup_blocked":"\u5f88\u62b1\u6b49, \u6211\u5011\u6ce8\u610f\u5230\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u5141\u8a31\u5f48\u8df3\u8996\u7a97. \u8acb\u70ba\u6b64\u7ad9\u89e3\u9664\u5feb\u986f\u5c01\u9396\u7a0b\u5f0f, \u4ee5\u6709\u6548\u5229\u7528\u6b64\u7de8\u8f2f\u5668\u5de5\u5177.","clipboard_no_support":"\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u6b64\u529f\u80fd, \u8acb\u4f7f\u7528\u9375\u76e4\u5feb\u6377\u9375\u64cd\u4f5c.","clipboard_msg":"Mozilla \u548c Firefox \u4e0d\u652f\u63f4\u8907\u88fd/\u526a\u4e0b/\u8cbc\u4e0a. \n\u60a8\u9700\u8981\u95dc\u65bc\u6b64\u554f\u984c\u66f4\u9032\u4e00\u6b65\u7684\u8cc7\u8a0a\u55ce?","not_set":"--\u5c1a\u672a\u8a2d\u5b9a--","class_name":"\u985e\u5225",browse:"\u9810\u89bd",close:"\u95dc\u9589",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5957\u7528","edit_confirm":"\u662f\u5426\u9700\u8981\u958b\u555f\u6587\u5b57\u7de8\u8f2f\u5668\uff1f","invalid_data_number":"{#field} \u5fc5\u9808\u662f\u6578\u5b57","invalid_data_min":"{#field} \u5fc5\u9808\u662f\u5927\u65bc {#min} \u7684\u6578\u5b57","invalid_data_size":"{#field} \u5fc5\u9808\u662f\u6578\u5b57\u6216\u767e\u5206\u6bd4",value:"(\u6578\u503c)"},contextmenu:{full:"\u5de6\u53f3\u5c0d\u9f4a",right:"\u9760\u53f3\u5c0d\u9f4a",center:"\u7f6e\u4e2d\u5c0d\u9f4a",left:"\u9760\u5de6\u5c0d\u9f4a",align:"\u5c0d\u9f4a"},insertdatetime:{"day_short":"\u65e5,\u4e00,\u4e8c,\u4e09,\u56db,\u4e94,\u516d","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u53c1\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708 \u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u76ee\u524d\u6642\u9593","insertdate_desc":"\u63d2\u5165\u76ee\u524d\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y/%m/%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9810\u89bd"},directionality:{"rtl_desc":"\u5f9e\u53f3\u5230\u5de6","ltr_desc":"\u5f9e\u5de6\u5230\u53f3"},layer:{content:"\u5efa\u7acb\u65b0\u5716\u5c64...","absolute_desc":"\u5207\u63db\u5230\u7d55\u5c0d\u4f4d\u7f6e","backward_desc":"\u79fb\u81f3\u5f8c\u65b9","forward_desc":"\u79fb\u81f3\u524d\u65b9","insertlayer_desc":"\u63d2\u5165\u5716\u5c64"},save:{"save_desc":"\u5132\u5b58","cancel_desc":"\u53d6\u6d88\u6240\u6709\u8b8a\u66f4"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u683c"},iespell:{download:"\u672a\u5075\u6e2c\u5230 ieSpell \u63d2\u4ef6, \u662f\u5426\u73fe\u5728\u5b89\u88dd?","iespell_desc":"\u62fc\u5b57\u6aa2\u67e5"},advhr:{"advhr_desc":"\u6c34\u5e73\u7dda","delta_height":"","delta_width":""},emotions:{"delta_height":"","delta_width":"","emotions_desc":"\u8868\u60c5"},searchreplace:{"replace_desc":"\u5c0b\u627e/\u53d6\u4ee3","delta_width":"","search_desc":"\u5c0b\u627e","delta_height":""},advimage:{"delta_width":"","image_desc":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"60","attribs_delta_width":"40","attribs_desc":"\u63d2\u5165/\u7de8\u8f2f\u5c6c\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u522a\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7e2e\u5beb","abbr_desc":"\u7e2e\u5beb","cite_desc":"\u5f15\u7528","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_height":"","delta_width":"",desc:"\u7de8\u8f2f CSS \u6a23\u5f0f\u8868"},paste:{"plaintext_mode":"\u76ee\u524d\u70ba\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f, \u8acb\u518d\u9ede\u64ca\u4e00\u6b21\u5207\u63db\u56de\u4e00\u822c\u8cbc\u4e0a\u6a21\u5f0f.","plaintext_mode_sticky":"\u76ee\u524d\u70ba\u4e00\u822c\u8cbc\u4e0a\u6a21\u5f0f, \u8acb\u518d\u9ede\u64ca\u4e00\u6b21\u5207\u63db\u56de\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f. \u7576\u5b8c\u6210\u8cbc\u4e0a\u52d5\u4f5c\u5f8c\u5c07\u6703\u5207\u63db\u6210\u4e00\u822c\u8cbc\u4e0a\u6a21\u5f0f.","selectall_desc":"\u5168\u9078","paste_word_desc":"\u4ee5 Word \u683c\u5f0f\u8cbc\u4e0a","paste_text_desc":"\u4ee5\u7d14\u6587\u5b57\u8cbc\u4e0a"},"paste_dlg":{"word_title":"\u8acb\u4f7f\u7528 CTRL V \u5c07\u5167\u5bb9\u8cbc\u4e0a.","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u865f","text_title":"\u8acb\u4f7f\u7528 CTRL V \u5c07\u5167\u5bb9\u8cbc\u4e0a."},table:{"merge_cells_delta_height":"40","merge_cells_delta_width":"40","table_delta_height":"60","table_delta_width":"40","cellprops_delta_height":"10","cellprops_delta_width":"10",cell:"\u5132\u5b58\u683c",col:"\u6b04",row:"\u5217",del:"\u522a\u9664\u8868\u683c","copy_row_desc":"\u8907\u88fd\u9078\u64c7\u7684\u8868\u683c\u5217","cut_row_desc":"\u526a\u4e0b\u9078\u64c7\u7684\u8868\u683c\u5217","paste_row_after_desc":"\u5728\u4e0b\u65b9\u8cbc\u4e0a\u5217","paste_row_before_desc":"\u5728\u4e0a\u65b9\u8cbc\u4e0a\u5217","props_desc":"\u8868\u683c\u5c6c\u6027","cell_desc":"\u5132\u5b58\u683c\u5c6c\u6027","row_desc":"\u5217\u5c6c\u6027","merge_cells_desc":"\u5408\u4f75\u5132\u5b58\u683c","split_cells_desc":"\u5206\u5272\u5132\u5b58\u683c","delete_col_desc":"\u522a\u9664\u76ee\u524d\u6b04","col_after_desc":"\u5728\u53f3\u5074\u63d2\u5165\u6b04","col_before_desc":"\u5728\u5de6\u5074\u63d2\u5165\u6b04","delete_row_desc":"\u522a\u9664\u76ee\u524d\u5217","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u5217","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u5217",desc:"\u63d2\u5165\u65b0\u8868\u683c","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u60a8\u8981\u6062\u5fa9\u5df2\u5132\u5b58\u7684\u5167\u5bb9, \u5c07\u6703\u6d41\u5931\u76ee\u524d\u6b63\u5728\u7de8\u8f2f\u7684\u5167\u5bb9.\n\n\u60a8\u78ba\u5b9a\u8981\u6062\u5fa9\u5df2\u5132\u5b58\u7684\u5167\u5bb9\u55ce?","restore_content":"\u6062\u5fa9\u81ea\u52d5\u5132\u5b58\u7684\u5167\u5bb9.","unload_msg":"\u5982\u679c\u60a8\u76f4\u63a5\u96e2\u958b\u6b64\u9801\u5c07\u6703\u6d41\u5931\u60a8\u6240\u7de8\u8f2f\u7684\u5167\u5bb9."},fullscreen:{desc:"\u5168\u87a2\u5e55\u7de8\u8f2f"},media:{edit:"\u7de8\u8f2f\u591a\u5a92\u9ad4",desc:"\u63d2\u5165/\u7de8\u8f2f\u591a\u5a92\u9ad4","delta_height":"","delta_width":""},fullpage:{desc:"\u6587\u4ef6\u5c6c\u6027","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u5df2\u5b9a\u7fa9\u7684\u6a23\u677f"},visualchars:{desc:"\u986f\u793a/\u96b1\u85cf\u975e\u53ef\u898b\u5b57\u5143."},spellchecker:{desc:"\u958b/\u95dc\u62fc\u5beb\u6aa2\u67e5",menu:"\u62fc\u5beb\u6aa2\u67e5\u8a2d\u5b9a","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8a9e\u8a00",wait:"\u8acb\u7a0d\u5f8c...",sug:"\u5efa\u8b70","no_sug":"\u7121\u5efa\u8b70","no_mpell":"\u7121\u62fc\u5beb\u932f\u8aa4","learn_word":"\u52a0\u5165\u5b57\u5f59"},pagebreak:{desc:"\u63d2\u5165\u5206\u9801\u7b26\u865f"},advlist:{types:"\u985e\u578b",def:"\u9810\u8a2d","lower_alpha":"\u5c0f\u5beb\u7684\u82f1\u6587\u5b57","lower_greek":"\u5c0f\u5beb\u7684\u5e0c\u81d8\u5b57","lower_roman":"\u5c0f\u5beb\u7684\u7f85\u99ac\u5b57","upper_alpha":"\u5927\u5beb\u82f1\u6587\u5b57","upper_roman":"\u5927\u5beb\u7684\u7f85\u99ac\u5b57",circle:"\u5713\u5708",disc:"\u5713\u9ede",square:"\u65b9\u584a"},colors:{"333300":"\u6df1\u6a44\u6b16\u8272","993300":"\u7126\u6a59\u8272","000000":"\u9ed1\u8272","003300":"\u6df1\u7da0\u8272","003366":"\u6df1\u5929\u85cd\u8272","000080":"\u6d77\u6d0b\u85cd","333399":"\u975b\u85cd\u8272","333333":"\u6697\u7070\u8272","800000":"\u6817\u8272",FF6600:"\u6a59\u8272","808000":"\u6a44\u6b16\u8272","008000":"\u7da0\u8272","008080":"\u6c34\u9d28\u8272","0000FF":"\u85cd\u8272","666699":"\u7070\u85cd\u8272","808080":"\u7070\u8272",FF0000:"\u7d05\u8272",FF9900:"\u7425\u73c0\u8272","99CC00":"\u9ec3\u7da0\u8272","339966":"\u6d77\u7da0\u8272","33CCCC":"\u7da0\u677e\u8272","3366FF":"\u5bf6\u85cd\u8272","800080":"\u7d2b\u8272","999999":"\u4e2d\u7070\u8272",FF00FF:"\u6d0b\u7d05\u8272",FFCC00:"\u91d1\u8272",FFFF00:"\u9ec3\u8272","00FF00":"\u840a\u59c6\u7da0\u8272","00FFFF":"\u6c34\u7da0\u8272","00CCFF":"\u5929\u85cd\u8272","993366":"\u68d5\u8272",C0C0C0:"\u9280\u8272",FF99CC:"\u7c89\u7d05\u8272",FFCC99:"\u871c\u6843\u8272",FFFF99:"\u6de1\u9ec3\u8272",CCFFCC:"\u6de1\u7da0\u8272",CCFFFF:"\u6de1\u85cd\u8272","99CCFF":"\u6dfa\u5929\u85cd\u8272",CC99FF:"\u694a\u674e\u8272",FFFFFF:"\u767d\u8272"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"\u76ee\u524d\u5b57\u6578:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zu.js
new file mode 100644
index 000000000..9d08b2872
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/langs/zu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({zu:{common:{"more_colors":"\u66f4\u591a\u989c\u8272","invalid_data":"\u9519\u8bef:\u65e0\u6548\u8f93\u5165\u503c\uff0c\u5df2\u6807\u8bb0\u4e3a\u7ea2\u8272\u3002","popup_blocked":"\u62b1\u6b49\uff01\u5feb\u663e\u89c6\u7a97\u5df2\u88ab\u963b\u6b62\uff0c\u8bf7\u8c03\u6574\u6d41\u89c8\u5668\u8bbe\u7f6e\uff0c\u5141\u8bb8\u6b64\u7f51\u7ad9\u53ef\u5f39\u51fa\u65b0\u89c6\u7a97\uff0c\u4ee5\u4fbf\u4f7f\u7528\u6b64\u5de5\u5177","clipboard_no_support":"\u8fd8\u4e0d\u652f\u63f4\u60a8\u7684\u6d41\u89c8\u5668\uff0c\u8bf7\u4f7f\u7528\u952e\u76d8\u5feb\u901f\u952e","clipboard_msg":"\u590d\u5236\u3001\u526a\u4e0b\u3001\u8d34\u4e0a\u529f\u80fd\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u3002 \n\u662f\u5426\u9700\u8981\u4e86\u89e3\u66f4\u591a\u6709\u5173\u6b64\u95ee\u9898\u7684\u8d44\u8baf\uff1f","not_set":"--\u672a\u8bbe\u7f6e--","class_name":"\u6837\u5f0f",browse:"\u6d41\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5e94\u7528","edit_confirm":"\u662f\u5426\u5728\u6b64textarea\u6807\u7b7e\u5185\u4f7f\u7528\"\u6240\u89c1\u5373\u6240\u5f97\"\u6a21\u5f0f\uff1f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u4e24\u7aef\u5bf9\u9f50",right:"\u9760\u53f3\u5bf9\u9f50",center:"\u5c45\u4e2d\u5bf9\u9f50",left:"\u9760\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50\u65b9\u5f0f"},insertdatetime:{"day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u73b0\u5728\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u4eca\u5929\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u6587\u5b57\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u6587\u5b57\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u589e\u5c42...","absolute_desc":"\u5f00\u5173\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u7f6e\u540e","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u5c42"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u53d6\u6d88\u6240\u6709\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u767d\u683c"},iespell:{download:"\u672a\u68c0\u6d4b\u5230ieSpell\u7684\u5b58\u5728\u3002\u662f\u5426\u73b0\u5728\u7acb\u5373\u5b89\u88c5\uff1f","iespell_desc":"\u62fc\u5199\u68c0\u67e5"},advhr:{"advhr_desc":"\u6c34\u5e73\u7ebf","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u56fe\u91ca","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u67e5\u627e/\u66ff\u6362","search_desc":"\u67e5\u627e","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"60","attribs_delta_width":"40","attribs_desc":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u9996\u5b57\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u6587","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7f16\u8f91CSS\u6837\u5f0f\u8868","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u5168\u9009","paste_word_desc":"\u4eceWord\u8d34\u4e0a","paste_text_desc":"\u4ee5\u7eaf\u6587\u5b57\u8d34\u4e0a","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7\u53f7","text_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002"},table:{"merge_cells_delta_height":"40","merge_cells_delta_width":"40","table_delta_height":"60","table_delta_width":"40","cellprops_delta_height":"10","cellprops_delta_width":"10",cell:"\u50a8\u5b58\u683c",col:"\u5217",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u9009\u62e9\u884c","cut_row_desc":"\u526a\u4e0b\u9009\u62e9\u884c","paste_row_after_desc":"\u8d34\u5728\u4e0b\u884c","paste_row_before_desc":"\u8d34\u5728\u4e0a\u884c","props_desc":"\u8868\u683c\u5c5e\u6027","cell_desc":"\u50a8\u5b58\u683c\u5c5e\u6027","row_desc":"\u884c\u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u50a8\u5b58\u683c","split_cells_desc":"\u5206\u5272\u50a8\u5b58\u683c","delete_col_desc":"\u5220\u9664\u6240\u5728\u5217","col_after_desc":"\u63d2\u5165\u53f3\u65b9\u5217","col_before_desc":"\u63d2\u5165\u5de6\u65b9\u5217","delete_row_desc":"\u5220\u9664\u6240\u5728\u884c","row_after_desc":"\u63d2\u5165\u4e0b\u65b9\u884c","row_before_desc":"\u63d2\u5165\u4e0a\u65b9\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u5982\u679c\u79bb\u5f00\u6b64\u9875\u9762\u5c06\u5bfc\u81f4\u6240\u505a\u7684\u66f4\u6539\u5168\u90e8\u4e22\u5931\u3002","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u5f00\u5173\u5168\u5c4f\u6a21\u5f0f"},media:{edit:"\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53",desc:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53","delta_height":"","delta_width":""},fullpage:{desc:"\u6863\u6848\u5c5e\u6027","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9884\u5b9a\u7684\u8303\u672c\u5185\u5bb9"},visualchars:{desc:"\u663e\u793a\u63a7\u5236\u7b26\u53f7\u5f00/\u5173\u3002"},spellchecker:{desc:"\u5f00\u5173\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5199\u68c0\u67e5\u8bbe\u7f6e","ignore_word":"\u7565\u8fc7","ignore_words":"\u5168\u90e8\u7565\u8fc7",langs:"\u8bed\u8a00",wait:"\u8bf7\u7a0d\u5019...",sug:"\u63a8\u8350\u5b57\u8bcd","no_sug":"\u65e0\u62fc\u5199\u63a8\u8350","no_mpell":"\u672a\u53d1\u73b0\u62fc\u5199\u9519\u8bef","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26\u53f7"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/license.txt b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/license.txt
new file mode 100644
index 000000000..60d6d4c8f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/license.txt
@@ -0,0 +1,504 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css
new file mode 100644
index 000000000..0e2283498
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/css/advhr.css
@@ -0,0 +1,5 @@
+input.radio {border:1px none #000; background:transparent; vertical-align:middle;}
+.panel_wrapper div.current {height:80px;}
+#width {width:50px; vertical-align:middle;}
+#width2 {width:50px; vertical-align:middle;}
+#size {width:100px;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js
new file mode 100644
index 000000000..4d3b062de
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js
new file mode 100644
index 000000000..0c652d330
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/editor_plugin_src.js
@@ -0,0 +1,57 @@
+/**
+ * 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.AdvancedHRPlugin', {
+ init : function(ed, url) {
+ // Register commands
+ ed.addCommand('mceAdvancedHr', function() {
+ ed.windowManager.open({
+ file : url + '/rule.htm',
+ width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)),
+ height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ // Register buttons
+ ed.addButton('advhr', {
+ title : 'advhr.advhr_desc',
+ cmd : 'mceAdvancedHr'
+ });
+
+ ed.onNodeChange.add(function(ed, cm, n) {
+ cm.setActive('advhr', n.nodeName == 'HR');
+ });
+
+ ed.onClick.add(function(ed, e) {
+ e = e.target;
+
+ if (e.nodeName === 'HR')
+ ed.selection.select(e);
+ });
+ },
+
+ 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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js
new file mode 100644
index 000000000..b6cbd66c7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/js/rule.js
@@ -0,0 +1,43 @@
+var AdvHRDialog = {
+ init : function(ed) {
+ var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w;
+
+ w = dom.getAttrib(n, 'width');
+ f.width.value = w ? parseInt(w) : (dom.getStyle('width') || '');
+ f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || '';
+ f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width');
+ selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px');
+ },
+
+ update : function() {
+ var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = '';
+
+ h = '<hr';
+
+ if (f.size.value) {
+ h += ' size="' + f.size.value + '"';
+ st += ' height:' + f.size.value + 'px;';
+ }
+
+ if (f.width.value) {
+ h += ' width="' + f.width.value + (f.width2.value == '%' ? '%' : '') + '"';
+ st += ' width:' + f.width.value + (f.width2.value == '%' ? '%' : 'px') + ';';
+ }
+
+ if (f.noshade.checked) {
+ h += ' noshade="noshade"';
+ st += ' border-width: 1px; border-style: solid; border-color: #CCCCCC; color: #ffffff;';
+ }
+
+ if (ed.settings.inline_styles)
+ h += ' style="' + tinymce.trim(st) + '"';
+
+ h += ' />';
+
+ ed.execCommand("mceInsertContent", false, h);
+ tinyMCEPopup.close();
+ }
+};
+
+tinyMCEPopup.requireLangPack();
+tinyMCEPopup.onInit.add(AdvHRDialog.init, AdvHRDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ar_dlg.js
new file mode 100644
index 000000000..9ee0c398f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.advhr_dlg',{size:"\u0627\u0644\u0627\u0631\u062a\u0641\u0627\u0639",noshade:"\u0644\u0627 \u0638\u0644",width:"\u0627\u0644\u0639\u0631\u0636",normal:"\u0627\u0644\u0637\u0628\u064a\u0639\u064a",widthunits:"\u0627\u0644\u0648\u062d\u062f\u0627\u062a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/az_dlg.js
new file mode 100644
index 000000000..a1d0ecc81
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.advhr_dlg',{size:"H\u00fcnd\u00fcrl\u00fcy\u00fc",noshade:"K\u00f6lg\u0259 yoxdur",width:"Eni",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/be_dlg.js
new file mode 100644
index 000000000..de0ef3daf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.advhr_dlg',{size:"\u0412\u044b\u0448\u044b\u043d\u044f",noshade:"\u0411\u0435\u0437 \u0446\u0435\u043d\u044e",width:"\u0428\u044b\u0440\u044b\u043d\u044f",normal:"\u0417\u0432\u044b\u0447\u0430\u0439\u043d\u0430\u044f",widthunits:"\u0410\u0434\u0437\u0456\u043d\u043a\u0456 \u0432\u044b\u043c\u044f\u0440\u044d\u043d\u043d\u044f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bg_dlg.js
new file mode 100644
index 000000000..50d9d37f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.advhr_dlg',{size:"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430",noshade:"\u0411\u0435\u0437 \u0441\u044f\u043d\u043a\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",normal:"\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u0430",widthunits:"\u0415\u0434\u0438\u043d\u0438\u0446\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bn_dlg.js
new file mode 100644
index 000000000..2077a114c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/br_dlg.js
new file mode 100644
index 000000000..e38132066
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.advhr_dlg',{size:"Altura",noshade:"Sem sombra",width:"Largura",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bs_dlg.js
new file mode 100644
index 000000000..430597420
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.advhr_dlg',{size:"Visina",noshade:"Bez sjene",width:"\u0160irina",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ca_dlg.js
new file mode 100644
index 000000000..4ef722285
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.advhr_dlg',{size:"Al\u00e7ada",noshade:"Sense sombra",width:"Amplada",normal:"Normal",widthunits:"Unitats"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ch_dlg.js
new file mode 100644
index 000000000..6ff358c9b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.advhr_dlg',{size:"\u9ad8\u5ea6",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd\u5ea6",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cn_dlg.js
new file mode 100644
index 000000000..8661c718b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.advhr_dlg',{size:"\u9ad8\u5ea6",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd\u5ea6",normal:"\u5e38\u89c4",widthunits:"\u5355\u4f4d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cs_dlg.js
new file mode 100644
index 000000000..a74dd2072
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.advhr_dlg',{size:"V\u00fd\u0161ka",noshade:"Bez st\u00ednu",width:"\u0160\u00ed\u0159ka",normal:"Norm\u00e1ln\u00ed",widthunits:"Jednotky"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cy_dlg.js
new file mode 100644
index 000000000..d98b73597
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.advhr_dlg',{size:"Uchder",noshade:"Dim cysgod",width:"Lled",normal:"Normal",widthunits:"Unedau"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/da_dlg.js
new file mode 100644
index 000000000..3f9657c9e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.advhr_dlg',{size:"H\u00f8jde",noshade:"Ingen skygge",width:"Bredde",normal:"Normal",widthunits:"Enheder"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/de_dlg.js
new file mode 100644
index 000000000..7c5143e57
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.advhr_dlg',{size:"H\u00f6he",noshade:"Kein Schatten",width:"Breite",normal:"Normal",widthunits:"Einheiten"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/dv_dlg.js
new file mode 100644
index 000000000..d61b9d2af
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/el_dlg.js
new file mode 100644
index 000000000..3ca3adfd5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.advhr_dlg',{size:"\u038e\u03c8\u03bf\u03c2",noshade:"\u03a7\u03c9\u03c1\u03af\u03c2 \u03c3\u03ba\u03b9\u03ac",width:"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js
new file mode 100644
index 000000000..0c3bf15e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.advhr_dlg',{size:"Height",noshade:"No Shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/eo_dlg.js
new file mode 100644
index 000000000..e5eddda44
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.advhr_dlg',{size:"Alteco",noshade:"Sen ombro",width:"Lar\u011deco",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/es_dlg.js
new file mode 100644
index 000000000..dacd6385f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.advhr_dlg',{size:"Alto",noshade:"Sin sombra",width:"Ancho",normal:"Normal",widthunits:"Unidades"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/et_dlg.js
new file mode 100644
index 000000000..5b0b2ba42
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.advhr_dlg',{size:"K\u00f5rgus",noshade:"Ilma varjuta",width:"Laius",normal:"Normaalne",widthunits:"\u00dchikud"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/eu_dlg.js
new file mode 100644
index 000000000..aaed07db6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.advhr_dlg',{size:"Altuera",noshade:"Itzalik gabe",width:"Zabalera",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fa_dlg.js
new file mode 100644
index 000000000..9b1760557
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.advhr_dlg',{size:"\u0627\u0631\u062a\u0641\u0627\u0639",noshade:"\u0628\u062f\u0648\u0646 \u0633\u0627\u06cc\u0647",width:"\u067e\u0647\u0646\u0627",normal:"\u0645\u0639\u0645\u0648\u0644\u06cc",widthunits:"\u0648\u0627\u062d\u062f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fi_dlg.js
new file mode 100644
index 000000000..3318d1f69
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.advhr_dlg',{size:"Korkeus",noshade:"Ei varjoa",width:"Leveys",normal:"Normaali",widthunits:"Yksik\u00f6t"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fr_dlg.js
new file mode 100644
index 000000000..4b6995cf6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.advhr_dlg',{size:"Hauteur",noshade:"Pas d\'ombre",width:"Largeur",normal:"Normal",widthunits:"Unit\u00e9s"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/gl_dlg.js
new file mode 100644
index 000000000..71adc8e91
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.advhr_dlg',{size:"Alto",noshade:"Sen sombra",width:"Ancho",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/gu_dlg.js
new file mode 100644
index 000000000..ac6758edd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/he_dlg.js
new file mode 100644
index 000000000..fd491ea4a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.advhr_dlg',{size:"\u05d2\u05d5\u05d1\u05d4",noshade:"\u05dc\u05dc\u05d0 \u05e6\u05dc",width:"\u05e8\u05d5\u05d7\u05d1",normal:"\u05e8\u05d2\u05d9\u05dc",widthunits:"\u05d9\u05d7\u05d9\u05d3\u05d5\u05ea"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hi_dlg.js
new file mode 100644
index 000000000..1ac67b0f4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hr_dlg.js
new file mode 100644
index 000000000..626838dbc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.advhr_dlg',{size:"Visina",noshade:"Bez sjene",width:"\u0160irina",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hu_dlg.js
new file mode 100644
index 000000000..f9ed72887
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.advhr_dlg',{size:"Magass\u00e1g",noshade:"\u00c1rny\u00e9k n\u00e9lk\u00fcl",width:"Sz\u00e9less\u00e9g",normal:"Norm\u00e1l",widthunits:"M\u00e9rt\u00e9kegys\u00e9gek"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hy_dlg.js
new file mode 100644
index 000000000..6638262cb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.advhr_dlg',{size:"\u0532\u0561\u0580\u0571\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",noshade:"\u0531\u057c\u0561\u0576\u0581 \u057d\u057f\u057e\u0565\u0580\u056b",width:"\u053c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ia_dlg.js
new file mode 100644
index 000000000..b293cfa95
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.advhr_dlg',{size:"\u957f",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/id_dlg.js
new file mode 100644
index 000000000..88f4f060e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.advhr_dlg',{size:"Tinggi",noshade:"Tanpa bayangan",width:"Lebar",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/is_dlg.js
new file mode 100644
index 000000000..72b210dfd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.advhr_dlg',{size:"H\u00e6\u00f0",noshade:"Enginn skuggi",width:"Breidd",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/it_dlg.js
new file mode 100644
index 000000000..db513340d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.advhr_dlg',{size:"Altezza",noshade:"Senza ombreggiatura",width:"Larghezza",normal:"Normale",widthunits:"Unit\u00e0"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ja_dlg.js
new file mode 100644
index 000000000..70adc8b5d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.advhr_dlg',{size:"\u9ad8\u3055",noshade:"\u5f71\u306a\u3057",width:"\u5e45",normal:"\u901a\u5e38",widthunits:"\u5358\u4f4d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ka_dlg.js
new file mode 100644
index 000000000..ddd77a683
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.advhr_dlg',{size:"\u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4",noshade:"\u10e9\u10e0\u10d3\u10d8\u10da\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4",width:"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/kl_dlg.js
new file mode 100644
index 000000000..40b6dc6cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/km_dlg.js
new file mode 100644
index 000000000..dd994b0e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.advhr_dlg',{size:"\u1780\u1798\u17d2\u1796\u179f\u17cb",noshade:"\u1782\u17d2\u1798\u17b6\u1793\u179f\u17d2\u179a\u1798\u17c4\u179b",width:"\u1791\u1791\u17b9\u1784",normal:"\u1792\u1798\u17d2\u1798\u178f\u17b6",widthunits:"\u17af\u1780\u178f\u17b6"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ko_dlg.js
new file mode 100644
index 000000000..bde22ebd9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.advhr_dlg',{size:"\ub192\uc774",noshade:"\uadf8\ub9bc\uc790 \uc5c6\uc74c",width:"\ud3ed",normal:"\ubcf4\ud1b5",widthunits:"\ub2e8\uc704"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/kz_dlg.js
new file mode 100644
index 000000000..1a40f4f6b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.advhr_dlg',{size:"\u0411\u0438\u0456\u043a\u0442\u0456\u0433\u0456",noshade:"\u041a\u04e9\u043b\u0435\u04a3\u043a\u0435\u0441\u0456\u0437",width:"\u0415\u043d\u0456",normal:"\u049a\u0430\u0440\u0430\u043f\u0430\u0439\u044b\u043c",widthunits:"\u04e8\u043b\u0448\u0435\u043c \u0431\u0456\u0440\u043b\u0456\u0433\u0456"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lb_dlg.js
new file mode 100644
index 000000000..31c02edb5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.advhr_dlg',{size:"H\u00e9icht",noshade:"Kee Schiet",width:"Breet",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lt_dlg.js
new file mode 100644
index 000000000..07294cba4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.advhr_dlg',{size:"Auk\u0161tis",noshade:"Be \u0161e\u0161\u0117lio",width:"Ilgis",normal:"Normalus",widthunits:"Vienetai"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lv_dlg.js
new file mode 100644
index 000000000..6f6a9032d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.advhr_dlg',{size:"Augstums",noshade:"Bez \u0113nas",width:"Platums",normal:"Norm\u0101ls",widthunits:"Vien\u012bbas"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/mk_dlg.js
new file mode 100644
index 000000000..06ac8785b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.advhr_dlg',{size:"\u0412\u0438\u0441\u0438\u043d\u0430",noshade:"\u0411\u0435\u0437 \u0441\u0435\u043d\u043a\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",normal:"\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u043e",widthunits:"\u0415\u0434\u0438\u043d\u0438\u0446\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ml_dlg.js
new file mode 100644
index 000000000..addafb446
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/mn_dlg.js
new file mode 100644
index 000000000..703d494af
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.advhr_dlg',{size:"\u04e8\u043d\u0434\u04e9\u0440",noshade:"\u0421\u04af\u04af\u0434\u044d\u0440\u0433\u04af\u0439",width:"\u04e8\u0440\u0433\u04e9\u043d",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ms_dlg.js
new file mode 100644
index 000000000..f448e086e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.advhr_dlg',{size:"Tinggi",noshade:"Tanpa bayang",width:"Lebar",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/my_dlg.js
new file mode 100644
index 000000000..d3e71d73c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.advhr_dlg',{size:"\u1021\u103c\u1019\u1004\u103a\u1037",noshade:"\u1021\u101b\u102d\u1015\u103a\u1019\u1011\u103d\u1000\u103a",width:"\u1021\u1000\u103b\u101a\u103a",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nb_dlg.js
new file mode 100644
index 000000000..e41c2f477
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.advhr_dlg',{size:"St\u00f8rrelse",noshade:"Ingen skygge",width:"Bredde",normal:"Normal",widthunits:"Enheter"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nl_dlg.js
new file mode 100644
index 000000000..d3ab5acb5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.advhr_dlg',{size:"Hoogte",noshade:"Geen schaduw",width:"Breedte",normal:"Normaal",widthunits:"Eenheden"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nn_dlg.js
new file mode 100644
index 000000000..535505af1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.advhr_dlg',{size:"Storleik",noshade:"Inga skugge",width:"Breidd",normal:"Normal",widthunits:"Einingar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/no_dlg.js
new file mode 100644
index 000000000..3ca75eec3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.advhr_dlg',{size:"H\u00f8yde",noshade:"Ingen skygge",width:"Bredde",normal:"Normal",widthunits:"Enheter"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/pl_dlg.js
new file mode 100644
index 000000000..f4e513887
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.advhr_dlg',{size:"Wysoko\u015b\u0107",noshade:"Bez cienia",width:"Szeroko\u015b\u0107",normal:"Normalny",widthunits:"Jednostki"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ps_dlg.js
new file mode 100644
index 000000000..a13f8706b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/pt_dlg.js
new file mode 100644
index 000000000..531022082
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.advhr_dlg',{size:"Altura",noshade:"Sem sombra",width:"Largura",normal:"Normal",widthunits:"Unids"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ro_dlg.js
new file mode 100644
index 000000000..d501da3a5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.advhr_dlg',{size:"\u00cen\u0103l\u021bime",noshade:"F\u0103r\u0103 umbre",width:"L\u0103\u021bime",normal:"Normal",widthunits:"Unit\u0103\u021bi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ru_dlg.js
new file mode 100644
index 000000000..553f03f4d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.advhr_dlg',{size:"\u0412\u044b\u0441\u043e\u0442\u0430",noshade:"\u0411\u0435\u0437 \u0442\u0435\u043d\u0438",width:"\u0428\u0438\u0440\u0438\u043d\u0430",normal:"\u041e\u0431\u044b\u0447\u043d\u0430\u044f",widthunits:"\u0415\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sc_dlg.js
new file mode 100644
index 000000000..b3c29307c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.advhr_dlg',{size:"\u957f",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/se_dlg.js
new file mode 100644
index 000000000..f1dba5032
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.advhr_dlg',{size:"H\u00f6jd",noshade:"Ingen skugga",width:"Bredd",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/si_dlg.js
new file mode 100644
index 000000000..3e2c500de
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sk_dlg.js
new file mode 100644
index 000000000..60ae5bcf2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.advhr_dlg',{size:"V\u00fd\u0161ka",noshade:"Bez tie\u0148a",width:"\u0160\u00edrka",normal:"Norm\u00e1lne",widthunits:"Jednotky"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sl_dlg.js
new file mode 100644
index 000000000..23ca296d1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.advhr_dlg',{size:"Vi\u0161ina",noshade:"Brez sen\u010denja",width:"\u0160irina",normal:"Obi\u010dajno",widthunits:"Enote"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sq_dlg.js
new file mode 100644
index 000000000..a6ee979b5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.advhr_dlg',{size:"Gjat\u00ebsia",noshade:"Pa hije",width:"Gjer\u00ebsia",normal:"Normal",widthunits:"Nj\u00ebsi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sr_dlg.js
new file mode 100644
index 000000000..603e50c17
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.advhr_dlg',{size:"Visina",noshade:"Bez senke",width:"\u0160irina",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sv_dlg.js
new file mode 100644
index 000000000..f2601e34e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.advhr_dlg',{size:"H\u00f6jd",noshade:"Ingen skugga",width:"Bredd",normal:"Normal",widthunits:"Enheter"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sy_dlg.js
new file mode 100644
index 000000000..c6e036138
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.advhr_dlg',{size:"\u072a\u0721\u0718\u072c\u0710",noshade:"\u0720\u071d\u072c \u071b\u0720\u0710",width:"\u0726\u072c\u071d\u0718\u072c\u0710",normal:"\u0725\u071d\u0715\u071d\u0710",widthunits:"\u071a\u0715\u071d\u0718\u072c\u0718\u072c\u0308\u0710"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ta_dlg.js
new file mode 100644
index 000000000..c05c36585
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/te_dlg.js
new file mode 100644
index 000000000..1838510c7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/th_dlg.js
new file mode 100644
index 000000000..93e932cb2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.advhr_dlg',{size:"\u0e2a\u0e39\u0e07",noshade:"\u0e44\u0e21\u0e48\u0e21\u0e35\u0e40\u0e07\u0e32",width:"\u0e01\u0e27\u0e49\u0e32\u0e07",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tn_dlg.js
new file mode 100644
index 000000000..8c19b1dc4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tr_dlg.js
new file mode 100644
index 000000000..fb999ebb4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.advhr_dlg',{size:"Y\u00fckseklik",noshade:"G\u00f6lge yok",width:"Geni\u015flik",normal:"Normal",widthunits:"Birimler"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tt_dlg.js
new file mode 100644
index 000000000..e7ffd754e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.advhr_dlg',{size:"\u9577",noshade:"\u7121\u9670\u5f71",width:"\u5bec",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tw_dlg.js
new file mode 100644
index 000000000..33c806794
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.advhr_dlg',{size:"\u9ad8\u5ea6",noshade:"\u7121\u9670\u5f71",width:"\u5bec\u5ea6",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/uk_dlg.js
new file mode 100644
index 000000000..296ccb661
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.advhr_dlg',{size:"\u0412\u0438\u0441\u043e\u0442\u0430",noshade:"\u0411\u0435\u0437 \u0442\u0456\u043d\u0456",width:"\u0428\u0438\u0440\u0438\u043d\u0430",normal:"\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0438\u0439",widthunits:"\u041e\u0434\u0438\u043d\u0438\u0446\u0456 \u0432\u0438\u043c\u0456\u0440\u0443"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ur_dlg.js
new file mode 100644
index 000000000..f75769754
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/vi_dlg.js
new file mode 100644
index 000000000..b1d552513
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.advhr_dlg',{size:"Chi\u1ec1u r\u1ed9ng",noshade:"Kh\u00f4ng c\u00f3 b\u00f3ng",width:"Chi\u1ec1u d\u00e0i",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..c8912162a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.advhr_dlg',{size:"\u9ad8\u5ea6",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd\u5ea6",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..33bfb609a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.advhr_dlg',{size:"\u9ad8",noshade:"\u7121\u9670\u5f71\u6548\u679c",width:"\u5bec",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh_dlg.js
new file mode 100644
index 000000000..c57db6621
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.advhr_dlg',{size:"\u9ad8\u5ea6",noshade:"\u7121\u9670\u5f71",width:"\u5bec\u5ea6",normal:"\u6a19\u6e96",widthunits:"\u55ae\u4f4d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zu_dlg.js
new file mode 100644
index 000000000..b7dacd5d8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.advhr_dlg',{size:"\u957f",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm
new file mode 100644
index 000000000..843e1f8f0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advhr/rule.htm
@@ -0,0 +1,58 @@
+<!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>{#advhr.advhr_desc}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/rule.js"></script>
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>
+ <link href="css/advhr.css" rel="stylesheet" type="text/css" />
+</head>
+<body role="application">
+<form onsubmit="AdvHRDialog.update();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr role="group" aria-labelledby="width_label">
+ <td><label id="width_label" for="width">{#advhr_dlg.width}</label></td>
+ <td class="nowrap">
+ <input id="width" name="width" type="text" value="" class="mceFocus" />
+ <span style="display:none;" id="width_unit_label">{#advhr_dlg.widthunits}</span>
+ <select name="width2" id="width2" aria-labelledby="width_unit_label">
+ <option value="">px</option>
+ <option value="%">%</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td><label for="size">{#advhr_dlg.size}</label></td>
+ <td><select id="size" name="size">
+ <option value="">{#advhr_dlg.normal}</option>
+ <option value="1">1</option>
+ <option value="2">2</option>
+ <option value="3">3</option>
+ <option value="4">4</option>
+ <option value="5">5</option>
+ </select></td>
+ </tr>
+ <tr>
+ <td><label for="noshade">{#advhr_dlg.noshade}</label></td>
+ <td><input type="checkbox" name="noshade" id="noshade" class="radio" /></td>
+ </tr>
+ </table>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css
new file mode 100644
index 000000000..0a6251a69
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/css/advimage.css
@@ -0,0 +1,13 @@
+#src_list, #over_list, #out_list {width:280px;}
+.mceActionPanel {margin-top:7px;}
+.alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;}
+.checkbox {border:0;}
+.panel_wrapper div.current {height:305px;}
+#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;}
+#align, #classlist {width:150px;}
+#width, #height {vertical-align:middle; width:50px; text-align:center;}
+#vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;}
+#class_list {width:180px;}
+input {width: 280px;}
+#constrain, #onmousemovecheck {width:auto;}
+#id, #dir, #lang, #usemap, #longdesc {width:200px;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js
new file mode 100644
index 000000000..d613a6139
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js
new file mode 100644
index 000000000..d2678cbcf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/editor_plugin_src.js
@@ -0,0 +1,50 @@
+/**
+ * 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.AdvancedImagePlugin', {
+ init : function(ed, url) {
+ // Register commands
+ ed.addCommand('mceAdvImage', function() {
+ // Internal image object like a flash placeholder
+ if (ed.dom.getAttrib(ed.selection.getNode(), 'class', '').indexOf('mceItem') != -1)
+ return;
+
+ ed.windowManager.open({
+ file : url + '/image.htm',
+ width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)),
+ height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ // Register buttons
+ ed.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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm
new file mode 100644
index 000000000..ed16b3d4a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/image.htm
@@ -0,0 +1,235 @@
+<!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>{#advimage_dlg.dialog_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/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/validate.js"></script>
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
+ <script type="text/javascript" src="js/image.js"></script>
+ <link href="css/advimage.css" rel="stylesheet" type="text/css" />
+</head>
+<body id="advimage" style="display: none" role="application" aria-labelledby="app_title">
+ <span id="app_title" style="display:none">{#advimage_dlg.dialog_title}</span>
+ <form onsubmit="ImageDialog.insert();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <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>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#advimage_dlg.general}</legend>
+
+ <table role="presentation" class="properties">
+ <tr>
+ <td class="column1"><label id="srclabel" for="src">{#advimage_dlg.src}</label></td>
+ <td colspan="2"><table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input name="src" type="text" id="src" value="" class="mceFocus" onchange="ImageDialog.showPreviewImage(this.value);" aria-required="true" /></td>
+ <td id="srcbrowsercontainer">&nbsp;</td>
+ </tr>
+ </table></td>
+ </tr>
+ <tr>
+ <td><label for="src_list">{#advimage_dlg.image_list}</label></td>
+ <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>
+ </tr>
+ <tr>
+ <td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td>
+ <td colspan="2"><input id="alt" name="alt" type="text" value="" /></td>
+ </tr>
+ <tr>
+ <td class="column1"><label id="titlelabel" for="title">{#advimage_dlg.title}</label></td>
+ <td colspan="2"><input id="title" name="title" type="text" value="" /></td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>{#advimage_dlg.preview}</legend>
+ <div id="prev"></div>
+ </fieldset>
+ </div>
+
+ <div id="appearance_panel" class="panel">
+ <fieldset>
+ <legend>{#advimage_dlg.tab_appearance}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td class="column1"><label id="alignlabel" for="align">{#advimage_dlg.align}</label></td>
+ <td><select id="align" name="align" onchange="ImageDialog.updateStyle('align');ImageDialog.changeAppearance();">
+ <option value="">{#not_set}</option>
+ <option value="baseline">{#advimage_dlg.align_baseline}</option>
+ <option value="top">{#advimage_dlg.align_top}</option>
+ <option value="middle">{#advimage_dlg.align_middle}</option>
+ <option value="bottom">{#advimage_dlg.align_bottom}</option>
+ <option value="text-top">{#advimage_dlg.align_texttop}</option>
+ <option value="text-bottom">{#advimage_dlg.align_textbottom}</option>
+ <option value="left">{#advimage_dlg.align_left}</option>
+ <option value="right">{#advimage_dlg.align_right}</option>
+ </select>
+ </td>
+ <td rowspan="6" valign="top">
+ <div class="alignPreview">
+ <img id="alignSampleImg" src="img/sample.gif" alt="{#advimage_dlg.example_img}" />
+ Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam
+ nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum
+ edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam
+ erat volutpat.
+ </div>
+ </td>
+ </tr>
+
+ <tr role="group" aria-labelledby="widthlabel">
+ <td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td>
+ <td class="nowrap">
+ <span style="display:none" id="width_voiceLabel">{#advimage_dlg.width}</span>
+ <input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" aria-labelledby="width_voiceLabel" /> x
+ <span style="display:none" id="height_voiceLabel">{#advimage_dlg.height}</span>
+ <input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" aria-labelledby="height_voiceLabel" /> px
+ </td>
+ </tr>
+
+ <tr>
+ <td>&nbsp;</td>
+ <td><table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>
+ <td><label id="constrainlabel" for="constrain">{#advimage_dlg.constrain_proportions}</label></td>
+ </tr>
+ </table></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label id="vspacelabel" for="vspace">{#advimage_dlg.vspace}</label></td>
+ <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();" />
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label id="hspacelabel" for="hspace">{#advimage_dlg.hspace}</label></td>
+ <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>
+ </tr>
+
+ <tr>
+ <td class="column1"><label id="borderlabel" for="border">{#advimage_dlg.border}</label></td>
+ <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>
+ </tr>
+
+ <tr>
+ <td><label for="class_list">{#class_name}</label></td>
+ <td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"><option value=""></option></select></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label id="stylelabel" for="style">{#advimage_dlg.style}</label></td>
+ <td colspan="2"><input id="style" name="style" type="text" value="" onchange="ImageDialog.changeAppearance();" /></td>
+ </tr>
+
+ <!-- <tr>
+ <td class="column1"><label id="classeslabel" for="classes">{#advimage_dlg.classes}</label></td>
+ <td colspan="2"><input id="classes" name="classes" type="text" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>
+ </tr> -->
+ </table>
+ </fieldset>
+ </div>
+
+ <div id="advanced_panel" class="panel">
+ <fieldset>
+ <legend>{#advimage_dlg.swap_image}</legend>
+
+ <input type="checkbox" id="onmousemovecheck" name="onmousemovecheck" class="checkbox" onclick="ImageDialog.setSwapImage(this.checked);" aria-controls="onmouseoversrc onmouseoutsrc" />
+ <label id="onmousemovechecklabel" for="onmousemovecheck">{#advimage_dlg.alt_image}</label>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">
+ <tr>
+ <td class="column1"><label id="onmouseoversrclabel" for="onmouseoversrc">{#advimage_dlg.mouseover}</label></td>
+ <td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="onmouseoversrc" name="onmouseoversrc" type="text" value="" /></td>
+ <td id="onmouseoversrccontainer">&nbsp;</td>
+ </tr>
+ </table></td>
+ </tr>
+ <tr>
+ <td><label for="over_list">{#advimage_dlg.image_list}</label></td>
+ <td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>
+ </tr>
+ <tr>
+ <td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td>
+ <td class="column2"><table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="onmouseoutsrc" name="onmouseoutsrc" type="text" value="" /></td>
+ <td id="onmouseoutsrccontainer">&nbsp;</td>
+ </tr>
+ </table></td>
+ </tr>
+ <tr>
+ <td><label for="out_list">{#advimage_dlg.image_list}</label></td>
+ <td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>{#advimage_dlg.misc}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td class="column1"><label id="idlabel" for="id">{#advimage_dlg.id}</label></td>
+ <td><input id="id" name="id" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label id="dirlabel" for="dir">{#advimage_dlg.langdir}</label></td>
+ <td>
+ <select id="dir" name="dir" onchange="ImageDialog.changeAppearance();">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#advimage_dlg.ltr}</option>
+ <option value="rtl">{#advimage_dlg.rtl}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label id="langlabel" for="lang">{#advimage_dlg.langcode}</label></td>
+ <td>
+ <input id="lang" name="lang" type="text" value="" />
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label id="usemaplabel" for="usemap">{#advimage_dlg.map}</label></td>
+ <td>
+ <input id="usemap" name="usemap" type="text" value="" />
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label id="longdesclabel" for="longdesc">{#advimage_dlg.long_desc}</label></td>
+ <td><table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="longdesc" name="longdesc" type="text" value="" /></td>
+ <td id="longdesccontainer">&nbsp;</td>
+ </tr>
+ </table></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+ </form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif
new file mode 100644
index 000000000..53bf6890b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/img/sample.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js
new file mode 100644
index 000000000..546b69c0d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/js/image.js
@@ -0,0 +1,462 @@
+var ImageDialog = {
+ preInit : function() {
+ var url;
+
+ tinyMCEPopup.requireLangPack();
+
+ if (url = tinyMCEPopup.getParam("external_image_list_url"))
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
+ },
+
+ init : function(ed) {
+ 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');
+
+ tinyMCEPopup.resizeToInnerSize();
+ this.fillClassList('class_list');
+ this.fillFileList('src_list', fl);
+ this.fillFileList('over_list', fl);
+ this.fillFileList('out_list', fl);
+ TinyMCE_EditableSelects.init();
+
+ if (n.nodeName == 'IMG') {
+ nl.src.value = dom.getAttrib(n, 'src');
+ nl.width.value = dom.getAttrib(n, 'width');
+ nl.height.value = dom.getAttrib(n, 'height');
+ nl.alt.value = dom.getAttrib(n, 'alt');
+ nl.title.value = dom.getAttrib(n, 'title');
+ nl.vspace.value = this.getAttrib(n, 'vspace');
+ nl.hspace.value = this.getAttrib(n, 'hspace');
+ nl.border.value = this.getAttrib(n, 'border');
+ selectByValue(f, 'align', this.getAttrib(n, 'align'));
+ selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true);
+ nl.style.value = dom.getAttrib(n, 'style');
+ nl.id.value = dom.getAttrib(n, 'id');
+ nl.dir.value = dom.getAttrib(n, 'dir');
+ nl.lang.value = dom.getAttrib(n, 'lang');
+ nl.usemap.value = dom.getAttrib(n, 'usemap');
+ nl.longdesc.value = dom.getAttrib(n, 'longdesc');
+ nl.insert.value = ed.getLang('update');
+
+ if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover')))
+ nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');
+
+ if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout')))
+ nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');
+
+ if (ed.settings.inline_styles) {
+ // Move attribs to styles
+ if (dom.getAttrib(n, 'align'))
+ this.updateStyle('align');
+
+ if (dom.getAttrib(n, 'hspace'))
+ this.updateStyle('hspace');
+
+ if (dom.getAttrib(n, 'border'))
+ this.updateStyle('border');
+
+ if (dom.getAttrib(n, 'vspace'))
+ this.updateStyle('vspace');
+ }
+ }
+
+ // Setup browse button
+ document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
+ if (isVisible('srcbrowser'))
+ document.getElementById('src').style.width = '260px';
+
+ // Setup browse button
+ document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image');
+ if (isVisible('overbrowser'))
+ document.getElementById('onmouseoversrc').style.width = '260px';
+
+ // Setup browse button
+ document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image');
+ if (isVisible('outbrowser'))
+ document.getElementById('onmouseoutsrc').style.width = '260px';
+
+ // If option enabled default contrain proportions to checked
+ if (ed.getParam("advimage_constrain_proportions", true))
+ f.constrain.checked = true;
+
+ // Check swap image if valid data
+ if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value)
+ this.setSwapImage(true);
+ else
+ this.setSwapImage(false);
+
+ this.changeAppearance();
+ this.showPreviewImage(nl.src.value, 1);
+ },
+
+ insert : function(file, title) {
+ var ed = tinyMCEPopup.editor, t = this, f = document.forms[0];
+
+ if (f.src.value === '') {
+ if (ed.selection.getNode().nodeName == 'IMG') {
+ ed.dom.remove(ed.selection.getNode());
+ ed.execCommand('mceRepaint');
+ }
+
+ tinyMCEPopup.close();
+ return;
+ }
+
+ if (tinyMCEPopup.getParam("accessibility_warnings", 1)) {
+ if (!f.alt.value) {
+ tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) {
+ if (s)
+ t.insertAndClose();
+ });
+
+ return;
+ }
+ }
+
+ t.insertAndClose();
+ },
+
+ insertAndClose : function() {
+ var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el;
+
+ tinyMCEPopup.restoreSelection();
+
+ // Fixes crash in Safari
+ if (tinymce.isWebKit)
+ ed.getWin().focus();
+
+ if (!ed.settings.inline_styles) {
+ args = {
+ vspace : nl.vspace.value,
+ hspace : nl.hspace.value,
+ border : nl.border.value,
+ align : getSelectValue(f, 'align')
+ };
+ } else {
+ // Remove deprecated values
+ args = {
+ vspace : '',
+ hspace : '',
+ border : '',
+ align : ''
+ };
+ }
+
+ tinymce.extend(args, {
+ src : nl.src.value.replace(/ /g, '%20'),
+ width : nl.width.value,
+ height : nl.height.value,
+ alt : nl.alt.value,
+ title : nl.title.value,
+ 'class' : getSelectValue(f, 'class_list'),
+ style : nl.style.value,
+ id : nl.id.value,
+ dir : nl.dir.value,
+ lang : nl.lang.value,
+ usemap : nl.usemap.value,
+ longdesc : nl.longdesc.value
+ });
+
+ args.onmouseover = args.onmouseout = '';
+
+ if (f.onmousemovecheck.checked) {
+ if (nl.onmouseoversrc.value)
+ args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';";
+
+ if (nl.onmouseoutsrc.value)
+ args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';";
+ }
+
+ el = ed.selection.getNode();
+
+ if (el && el.nodeName == 'IMG') {
+ ed.dom.setAttribs(el, args);
+ } else {
+ tinymce.each(args, function(value, name) {
+ if (value === "") {
+ delete args[name];
+ }
+ });
+
+ ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1});
+ ed.undoManager.add();
+ }
+
+ tinyMCEPopup.editor.execCommand('mceRepaint');
+ tinyMCEPopup.editor.focus();
+ tinyMCEPopup.close();
+ },
+
+ getAttrib : function(e, at) {
+ var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;
+
+ if (ed.settings.inline_styles) {
+ switch (at) {
+ case 'align':
+ if (v = dom.getStyle(e, 'float'))
+ return v;
+
+ if (v = dom.getStyle(e, 'vertical-align'))
+ return v;
+
+ break;
+
+ case 'hspace':
+ v = dom.getStyle(e, 'margin-left')
+ v2 = dom.getStyle(e, 'margin-right');
+
+ if (v && v == v2)
+ return parseInt(v.replace(/[^0-9]/g, ''));
+
+ break;
+
+ case 'vspace':
+ v = dom.getStyle(e, 'margin-top')
+ v2 = dom.getStyle(e, 'margin-bottom');
+ if (v && v == v2)
+ return parseInt(v.replace(/[^0-9]/g, ''));
+
+ break;
+
+ case 'border':
+ v = 0;
+
+ tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {
+ sv = dom.getStyle(e, 'border-' + sv + '-width');
+
+ // False or not the same as prev
+ if (!sv || (sv != v && v !== 0)) {
+ v = 0;
+ return false;
+ }
+
+ if (sv)
+ v = sv;
+ });
+
+ if (v)
+ return parseInt(v.replace(/[^0-9]/g, ''));
+
+ break;
+ }
+ }
+
+ if (v = dom.getAttrib(e, at))
+ return v;
+
+ return '';
+ },
+
+ setSwapImage : function(st) {
+ var f = document.forms[0];
+
+ f.onmousemovecheck.checked = st;
+ setBrowserDisabled('overbrowser', !st);
+ setBrowserDisabled('outbrowser', !st);
+
+ if (f.over_list)
+ f.over_list.disabled = !st;
+
+ if (f.out_list)
+ f.out_list.disabled = !st;
+
+ f.onmouseoversrc.disabled = !st;
+ f.onmouseoutsrc.disabled = !st;
+ },
+
+ fillClassList : function(id) {
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
+
+ if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {
+ cl = [];
+
+ tinymce.each(v.split(';'), function(v) {
+ var p = v.split('=');
+
+ cl.push({'title' : p[0], 'class' : p[1]});
+ });
+ } else
+ cl = tinyMCEPopup.editor.dom.getClasses();
+
+ if (cl.length > 0) {
+ lst.options.length = 0;
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
+
+ tinymce.each(cl, function(o) {
+ lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);
+ });
+ } else
+ dom.remove(dom.getParent(id, 'tr'));
+ },
+
+ fillFileList : function(id, l) {
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
+
+ l = typeof(l) === 'function' ? l() : window[l];
+ lst.options.length = 0;
+
+ if (l && l.length > 0) {
+ lst.options[lst.options.length] = new Option('', '');
+
+ tinymce.each(l, function(o) {
+ lst.options[lst.options.length] = new Option(o[0], o[1]);
+ });
+ } else
+ dom.remove(dom.getParent(id, 'tr'));
+ },
+
+ resetImageData : function() {
+ var f = document.forms[0];
+
+ f.elements.width.value = f.elements.height.value = '';
+ },
+
+ updateImageData : function(img, st) {
+ var f = document.forms[0];
+
+ if (!st) {
+ f.elements.width.value = img.width;
+ f.elements.height.value = img.height;
+ }
+
+ this.preloadImg = img;
+ },
+
+ changeAppearance : function() {
+ var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg');
+
+ if (img) {
+ if (ed.getParam('inline_styles')) {
+ ed.dom.setAttrib(img, 'style', f.style.value);
+ } else {
+ img.align = f.align.value;
+ img.border = f.border.value;
+ img.hspace = f.hspace.value;
+ img.vspace = f.vspace.value;
+ }
+ }
+ },
+
+ changeHeight : function() {
+ var f = document.forms[0], tp, t = this;
+
+ if (!f.constrain.checked || !t.preloadImg) {
+ return;
+ }
+
+ if (f.width.value == "" || f.height.value == "")
+ return;
+
+ tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height;
+ f.height.value = tp.toFixed(0);
+ },
+
+ changeWidth : function() {
+ var f = document.forms[0], tp, t = this;
+
+ if (!f.constrain.checked || !t.preloadImg) {
+ return;
+ }
+
+ if (f.width.value == "" || f.height.value == "")
+ return;
+
+ tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width;
+ f.width.value = tp.toFixed(0);
+ },
+
+ updateStyle : function(ty) {
+ var dom = tinyMCEPopup.dom, b, bStyle, bColor, v, isIE = tinymce.isIE, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value});
+
+ if (tinyMCEPopup.editor.settings.inline_styles) {
+ // Handle align
+ if (ty == 'align') {
+ dom.setStyle(img, 'float', '');
+ dom.setStyle(img, 'vertical-align', '');
+
+ v = getSelectValue(f, 'align');
+ if (v) {
+ if (v == 'left' || v == 'right')
+ dom.setStyle(img, 'float', v);
+ else
+ img.style.verticalAlign = v;
+ }
+ }
+
+ // Handle border
+ if (ty == 'border') {
+ b = img.style.border ? img.style.border.split(' ') : [];
+ bStyle = dom.getStyle(img, 'border-style');
+ bColor = dom.getStyle(img, 'border-color');
+
+ dom.setStyle(img, 'border', '');
+
+ v = f.border.value;
+ if (v || v == '0') {
+ if (v == '0')
+ img.style.border = isIE ? '0' : '0 none none';
+ else {
+ if (b.length == 3 && b[isIE ? 2 : 1])
+ bStyle = b[isIE ? 2 : 1];
+ else if (!bStyle || bStyle == 'none')
+ bStyle = 'solid';
+ if (b.length == 3 && b[isIE ? 0 : 2])
+ bColor = b[isIE ? 0 : 2];
+ else if (!bColor || bColor == 'none')
+ bColor = 'black';
+ img.style.border = v + 'px ' + bStyle + ' ' + bColor;
+ }
+ }
+ }
+
+ // Handle hspace
+ if (ty == 'hspace') {
+ dom.setStyle(img, 'marginLeft', '');
+ dom.setStyle(img, 'marginRight', '');
+
+ v = f.hspace.value;
+ if (v) {
+ img.style.marginLeft = v + 'px';
+ img.style.marginRight = v + 'px';
+ }
+ }
+
+ // Handle vspace
+ if (ty == 'vspace') {
+ dom.setStyle(img, 'marginTop', '');
+ dom.setStyle(img, 'marginBottom', '');
+
+ v = f.vspace.value;
+ if (v) {
+ img.style.marginTop = v + 'px';
+ img.style.marginBottom = v + 'px';
+ }
+ }
+
+ // Merge
+ dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img');
+ }
+ },
+
+ changeMouseMove : function() {
+ },
+
+ showPreviewImage : function(u, st) {
+ if (!u) {
+ tinyMCEPopup.dom.setHTML('prev', '');
+ return;
+ }
+
+ if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true))
+ this.resetImageData();
+
+ u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u);
+
+ if (!st)
+ tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />');
+ else
+ tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />');
+ }
+};
+
+ImageDialog.preInit();
+tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ar_dlg.js
new file mode 100644
index 000000000..e6a5eb8cb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.advimage_dlg',{"image_list":"Image list","align_right":"\u064a\u0645\u064a\u0646","align_left":"\u064a\u0633\u0627\u0631","align_textbottom":"\u0627\u0633\u0641\u0644 \u0627\u0644\u0646\u0635","align_texttop":"\u0627\u0639\u0644\u0649 \u0627\u0644\u0646\u0635","align_bottom":"\u0627\u0633\u0641\u0644","align_middle":"\u0648\u0633\u0637","align_top":"\u0627\u0644\u0627\u0639\u0644\u0649","align_baseline":"Baseline",align:"\u0645\u062d\u0627\u0632\u0627\u0647",hspace:"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0627\u0641\u0642\u064a\u0647",vspace:"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0631\u0623\u0633\u064a\u0647",dimensions:"\u0627\u0644\u0623\u0628\u0639\u0627\u062f",border:"\u0627\u0644\u0625\u0637\u0627\u0631",list:"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0635\u0648\u0631",alt:"\u0648\u0635\u0641 \u0627\u0644\u0635\u0648\u0631\u0647",src:"\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0635\u0648\u0631\u0647","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"\u0645\u0634\u0627\u0647\u062f\u0647",title:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646",general:"\u0639\u0627\u0645","tab_advanced":"\u062e\u064a\u0627\u0631\u0627\u062a \u0645\u062a\u0642\u062f\u0645\u0647","tab_appearance":"\u0627\u0644\u0645\u0638\u0647\u0631","tab_general":"\u0639\u0627\u0645",width:"\u0627\u0644\u0639\u0631\u0636",height:"\u0627\u0644\u0627\u0631\u062a\u0641\u0627\u0639"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/az_dlg.js
new file mode 100644
index 000000000..beebea126
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.advimage_dlg',{"image_list":"\u015e\u0259kil siyah\u0131s\u0131","align_right":"Sa\u011fa","align_left":"Sola","align_textbottom":"M\u0259tn a\u015fa\u011f\u0131s\u0131 il\u0259","align_texttop":"M\u0259tn yuxar\u0131 il\u0259","align_bottom":"A\u015fa\u011f\u0131 il\u0259","align_middle":"M\u0259rk\u0259z il\u0259","align_top":"Yuxar\u0131 il\u0259","align_baseline":"Bin\u00f6vr\u0259 il\u0259",align:"Tarazla\u015fd\u0131rma",hspace:"\u00dcf\u00fcqi f\u0259za",vspace:"\u015eaquli f\u0259za",dimensions:"\u00d6l\u00e7\u00fcl\u0259r",border:"S\u0259rh\u0259d",list:"\u015e\u0259kil siyah\u0131s\u0131",alt:"\u015e\u0259kil t\u0259sviri",src:"\u015e\u0259kil \u00fcnvan\u0131","dialog_title":"\u015e\u0259kil \u0259lav\u0259/redakt\u0259 et","missing_alt":"\u018fminsiniz ki, \u015f\u0259kl\u0259 t\u0259svir yazmadan davam etm\u0259k ist\u0259yirsiniz? T\u0259svirsiz \u015f\u0259kil i\u015f qabiliyy\u0259ti a\u015fa\u011f\u0131 olan v\u0259 ya \u015f\u0259klin s\u00f6nd\u00fcr\u00fclm\u00fc\u015f funksiyas\u0131 il\u0259 m\u0259tn b\u0259l\u0259d\u00e7isind\u0259n istifad\u0259 ed\u0259n istifad\u0259\u00e7il\u0259r\u0259 \u0259l\u00e7atmaz ola bil\u0259r.","example_img":"Xarici g\u00f6r\u00fcn\u00fc\u015f\u0259 ilkin bax\u0131\u015f",misc:"M\u00fcxt\u0259lif",mouseout:"si\u00e7an\u0131 uzaqla\u015fd\u0131rd\u0131qda",mouseover:"si\u00e7an\u0131 g\u0259tirdikd\u0259","alt_image":"Alternativ \u015f\u0259kil","swap_image":"\u015e\u0259kli d\u0259yi\u015f",map:"X\u0259rit\u0259-\u015f\u0259kil",id:"\u0130dentifikator",rtl:"Sa\u011fda-sola",ltr:"Solda-sa\u011fa",classes:"Sinifl\u0259r",style:"Stil","long_desc":"\u018ftrafl\u0131 t\u0259svir\u0259 ke\u00e7id",langcode:"Dil kodu",langdir:"Dilin istiqam\u0259tl\u0259ndirilm\u0259si","constrain_proportions":"Proporsiyalar\u0131 saxla",preview:"\u0130lkin bax\u0131\u015f",title:"Ad\u0131",general:"\u00dcmumi","tab_advanced":"\u018flav\u0259","tab_appearance":"G\u00f6r\u00fcn\u00fc\u015f","tab_general":"\u00dcmumi",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/be_dlg.js
new file mode 100644
index 000000000..bc9817566
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.advimage_dlg',{"image_list":"\u0421\u043f\u0456\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430\u045e","align_right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u0440\u0430\u0456","align_left":"\u041f\u0430 \u043b\u0435\u0432\u044b\u043c \u043a\u0440\u0430\u0456","align_textbottom":"\u041f\u0430 \u043d\u0456\u0437\u0435 \u0442\u044d\u043a\u0441\u0442\u0443","align_texttop":"\u041f\u0430 \u0432\u0435\u0440\u0441\u0435 \u0442\u044d\u043a\u0441\u0442\u0443","align_bottom":"\u041f\u0430 \u043d\u0456\u0437\u0435","align_middle":"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","align_top":"\u041f\u0430 \u0432\u0435\u0440\u0441\u0435","align_baseline":"\u041f\u0430 \u0431\u0430\u0437\u0430\u0432\u0430\u0439 \u043b\u0456\u043d\u0456\u0456",align:"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435",hspace:"\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b \u0432\u043e\u0434\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u044b \u0432\u043e\u0434\u0441\u0442\u0443\u043f",dimensions:"\u041f\u0430\u043c\u0435\u0440\u044b",border:"\u041c\u044f\u0436\u0430",list:"\u0421\u043f\u0456\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430\u045e",alt:"\u0410\u043f\u0456\u0441\u0430\u043d\u043d\u0435 \u043c\u0430\u043b\u044e\u043d\u043a\u0430",src:"\u0410\u0434\u0440\u0430\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430","dialog_title":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0430\u043b\u044e\u043d\u0430\u043a","missing_alt":"\u0412\u044b \u045e\u043f\u044d\u045e\u043d\u0435\u043d\u044b\u044f, \u0448\u0442\u043e \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u043f\u0440\u0430\u0446\u044f\u0433\u043d\u0443\u0446\u044c \u0431\u0435\u0437 \u0430\u043f\u0456\u0441\u0430\u043d\u043d\u044f \u043c\u0430\u043b\u044e\u043d\u043a\u0430? \u0411\u0435\u0437 \u044f\u0433\u043e \u043c\u0430\u043b\u044e\u043d\u0430\u043a \u043c\u043e\u0436\u0430 \u0431\u044b\u0446\u044c \u043d\u0435\u0434\u0430\u0441\u0442\u0443\u043f\u043d\u0430 \u043a\u0430\u0440\u044b\u0441\u0442\u0430\u043b\u044c\u043d\u0456\u043a\u0430\u043c \u0437 \u0430\u0431\u043c\u0435\u0436\u0430\u0432\u0430\u043d\u0430\u0439 \u043f\u0440\u0430\u0446\u0430\u0437\u0434\u043e\u043b\u044c\u043d\u0430\u0441\u0446\u044e, \u0430\u0431\u043e \u043a\u0430\u0440\u044b\u0441\u0442\u0430\u043b\u044c\u043d\u0456\u043a\u0430\u043c \u0442\u044d\u043a\u0441\u0442\u0430\u0432\u044b\u0445 \u0431\u0440\u0430\u045e\u0437\u0435\u0440\u0430\u045e, \u0430\u0431\u043e \u044f\u043a\u0456\u044f \u0433\u043b\u044f\u0434\u0437\u044f\u0446\u044c \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0456 \u0437 \u0430\u0434\u043a\u043b\u044e\u0447\u0430\u043d\u044b\u043c\u0456 \u043c\u0430\u043b\u044e\u043d\u043a\u0430\u043c\u0456.","example_img":"\u041f\u0440\u044b\u043a\u043b\u0430\u0434 \u043c\u0430\u043b\u044e\u043d\u043a\u0443",misc:"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",mouseout:"\u041f\u0440\u044b \u0430\u0434\u0432\u044f\u0434\u0437\u0435\u043d\u043d\u0456 \u043c\u044b\u0448\u044b",mouseover:"\u041f\u0440\u044b \u043d\u0430\u0432\u044f\u0434\u0437\u0435\u043d\u043d\u0456 \u043c\u044b\u0448\u044b","alt_image":"\u0410\u043b\u044c\u0442\u044d\u0440\u043d\u0430\u0442\u044b\u045e\u043d\u044b \u043c\u0430\u043b\u044e\u043d\u0430\u043a","swap_image":"\u041f\u0430\u043c\u044f\u043d\u044f\u0446\u044c \u043c\u0430\u043b\u044e\u043d\u0430\u043a",map:"\u041c\u0430\u043b\u044e\u043d\u0430\u043a-\u043a\u0430\u0440\u0442\u0430",id:"\u0406\u0434\u044d\u043d\u0442\u044b\u0444\u0456\u043a\u0430\u0442\u0430\u0440",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430",ltr:"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430",classes:"\u041a\u043b\u0430\u0441\u044b",style:"\u0421\u0442\u044b\u043b\u044c","long_desc":"\u0421\u043f\u0430\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u0430\u0434\u0440\u0430\u0431\u044f\u0437\u043d\u0430\u0435 \u0430\u043f\u0456\u0441\u0430\u043d\u043d\u0435",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u044b",langdir:"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u043c\u043e\u0432\u044b","constrain_proportions":"\u0417\u0430\u0445\u043e\u045e\u0432\u0430\u0446\u044c \u043f\u0440\u0430\u043f\u043e\u0440\u0446\u044b\u0456",preview:"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u0456 \u043f\u0440\u0430\u0433\u043b\u044f\u0434",title:"\u041d\u0430\u0437\u0432\u0430",general:"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f","tab_advanced":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f","tab_appearance":"\u0412\u043e\u043d\u043a\u0430\u0432\u044b \u0432\u044b\u0433\u043b\u044f\u0434","tab_general":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f",width:"\u0428\u044b\u0440\u044b\u043d\u044f",height:"\u0412\u044b\u0448\u044b\u043d\u044f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bg_dlg.js
new file mode 100644
index 000000000..762154144
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.advimage_dlg',{"image_list":"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438","align_right":"\u0414\u044f\u0441\u043d\u043e","align_left":"\u041b\u044f\u0432\u043e","align_textbottom":"\u0422\u0435\u043a\u0441\u0442 \u0434\u043e\u043b\u0443","align_texttop":"\u0422\u0435\u043a\u0441\u0442 \u0433\u043e\u0440\u0435","align_bottom":"\u0414\u043e\u043b\u0443","align_middle":"\u0426\u0435\u043d\u0442\u044a\u0440","align_top":"\u0413\u043e\u0440\u0435","align_baseline":"\u0411\u0430\u0437\u043e\u0432\u0430 \u043b\u0438\u043d\u0438\u044f",align:"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",hspace:"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u0440\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435",vspace:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u0440\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435",dimensions:"\u0420\u0430\u0437\u043c\u0435\u0440\u0438",border:"\u0420\u0430\u043c\u043a\u0430",list:"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438",alt:"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430",src:"URL \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","dialog_title":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","missing_alt":"\u0421\u0438\u0433\u0443\u0440\u0435\u043d \u043b\u0438 \u0441\u0442\u0435 \u0447\u0435 \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u0430 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435 \u0431\u0435\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0442\u0430? \u0411\u0435\u0437 \u043d\u0435\u0433\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0442\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u044a\u043f\u043d\u0430 \u0437\u0430 \u043d\u044f\u043a\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 \u0441 \u043d\u0435\u0434\u044a\u0437\u0438, \u0438\u043b\u0438 \u0437\u0430 \u0442\u0435\u0437\u0438 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0449\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0431\u0440\u0430\u0443\u0437\u044a\u0440, \u0438\u043b\u0438 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0449\u0438 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0441 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438.","example_img":"\u041f\u0440\u0435\u0433\u043b\u0435\u0434 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0442\u0430",misc:"\u0420\u0430\u0437\u043d\u0438",mouseout:"\u0437\u0430 mouse out",mouseover:"\u0437\u0430 mouse over","alt_image":"\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","swap_image":"\u0421\u043c\u0435\u043d\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430",map:"\u041a\u0430\u0440\u0442\u0438\u043d\u0430 \u043a\u0430\u0440\u0442\u0430",id:"Id",rtl:"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e",ltr:"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e",classes:"\u041a\u043b\u0430\u0441\u043e\u0432\u0435",style:"\u0421\u0442\u0438\u043b","long_desc":"\u0425\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 \u043a\u044a\u043c \u0434\u044a\u043b\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430",langdir:"\u041f\u043e\u0441\u043e\u043a\u0430 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430","constrain_proportions":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438\u0442\u0435",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434",title:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",general:"\u041e\u0431\u0449\u0438","tab_advanced":"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","tab_appearance":"\u0412\u044a\u043d\u0448\u0435\u043d \u0432\u0438\u0434","tab_general":"\u041e\u0431\u0449\u0438",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bn_dlg.js
new file mode 100644
index 000000000..d105bc52d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/br_dlg.js
new file mode 100644
index 000000000..13a5a0a4c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.advimage_dlg',{"image_list":"Lista de imagens","align_right":"Direita","align_left":"Esquerda","align_textbottom":"Base do texto","align_texttop":"Topo do texto","align_bottom":"Abaixo","align_middle":"Meio","align_top":"Topo","align_baseline":"Sobre a linha de texto",align:"Alinhamento",hspace:"Espa\u00e7o horizontal",vspace:"Espa\u00e7o vertical",dimensions:"Dimens\u00f5es",border:"Limite",list:"Lista de imagens",alt:"Descri\u00e7\u00e3o da imagem",src:"Endere\u00e7o da imagem","dialog_title":"Inserir/editar imagem","missing_alt":"Tem certeza que deseja continuar sem acrescentar uma descri\u00e7\u00e3o \u00e0\u00a0imagem? (Isto pode gerar problemas de acessibilidade em alguns navegadores)","example_img":"Pr\u00e9-visualiza\u00e7\u00e3o",misc:"Misto",mouseout:"mouseout",mouseover:"mouseover","alt_image":"Imagem alternativa","swap_image":"Trocar imagem",map:"Mapa de imagem",id:"Id",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",classes:"Classes",style:"Estilo","long_desc":"Descri\u00e7\u00e3o extensa",langcode:"C\u00f3digo de idioma",langdir:"Dire\u00e7\u00e3o do texto","constrain_proportions":"Manter propor\u00e7\u00f5es",preview:"Pr\u00e9-Visualiza\u00e7\u00e3o",title:"T\u00edtulo",general:"Geral","tab_advanced":"Avan\u00e7ado","tab_appearance":"Apar\u00eancia","tab_general":"Geral",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bs_dlg.js
new file mode 100644
index 000000000..0cde4aed8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.advimage_dlg',{"image_list":"Lista slika","align_right":"Desno","align_left":"Lijevo","align_textbottom":"Dno teksta","align_texttop":"Vrh teksta","align_bottom":"Dno","align_middle":"Sredina","align_top":"Vrh","align_baseline":"Osnovna linija",align:"Poravnavanje",hspace:"Vodoravni razmak",vspace:"Okomiti razmak",dimensions:"Dimenzije",border:"Obrub",list:"Lista slika",alt:"Opis slike",src:"URL slike","dialog_title":"Umetni/uredi sliku","missing_alt":"Jeste li sigurni da \u017eelite izostaviti opis slike? Slika mo\u017ee biti nedostupna ljudima s pote\u0161ko\u0107ama ili onima koji koriste preglednike bez prikaza slika.","example_img":"Prikaz slike",misc:"Razno",mouseout:"za izlazak mi\u0161a van slike",mouseover:"za prelazak mi\u0161a preko slike","alt_image":"Alternativna slika","swap_image":"Izmjenjiva slika",map:"Karta slike",id:"Id",rtl:"S desna na lijevo",ltr:"S lijeva na desno",classes:"Klase",style:"Stil","long_desc":"Poveznica dugog opisa",langcode:"Kod jezika",langdir:"Smjer jezika","constrain_proportions":"Zadr\u017ei proporcije",preview:"Prikaz",title:"Naslov",general:"Osnovno","tab_advanced":"Napredno","tab_appearance":"Izgled","tab_general":"Osnovno",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ca_dlg.js
new file mode 100644
index 000000000..14250bdfb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.advimage_dlg',{"image_list":"Llista d\'imatges","align_right":"A la dreta","align_left":"A l\'esquerra","align_textbottom":"Baix del text","align_texttop":"Dalt del text","align_bottom":"Inferior","align_middle":"Mitjan lloc","align_top":"Superior","align_baseline":"L\u00ednia de base",align:"Alineaci\u00f3",hspace:"Espai horitzontal",vspace:"Espai vertical",dimensions:"Dimensions",border:"Vora",list:"Llista de la imatge",alt:"Descripci\u00f3 de la imatge",src:"URL de la imatge","dialog_title":"Insereix/edita imatge","missing_alt":"Esteu segur que voleu continuar sense incloure una descripci\u00f3 de la imatge? La imatge pot no ser accessible a usuaris amb discapacitats, o a aquells que utilitzin navegadors de text o que naveguin amb les imatges desactivades.","example_img":"Aparen\u00e7a imatge previsualitzada",misc:"Miscel\u00b7l\u00e0nia",mouseout:"quan el ratol\u00ed marxa",mouseover:"quan el ratol\u00ed arriba","alt_image":"Imatge alternativa","swap_image":"Canvia imatge",map:"Mapa de la imatge",id:"Id",rtl:"De dreta a esquerra",ltr:"D\'esquerra a dreta",classes:"Classes",style:"Estil","long_desc":"Enlla\u00e7 a la descripci\u00f3 llarga",langcode:"Codi de l\'idioma",langdir:"Direcci\u00f3 de l\'idioma","constrain_proportions":"Mant\u00e9 la proporci\u00f3",preview:"Previsualitzaci\u00f3",title:"T\u00edtol",general:"General","tab_advanced":"Avan\u00e7at","tab_appearance":"Aparen\u00e7a","tab_general":"General",width:"Amplada",height:"Al\u00e7ada"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ch_dlg.js
new file mode 100644
index 000000000..0b20faca8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.advimage_dlg',{"image_list":"\u56fe\u7247\u6e05\u5355","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u9760\u4e0b","align_middle":"\u7f6e\u4e2d","align_top":"\u9760\u4e0a","align_baseline":"\u57fa\u51c6\u7ebf",align:"\u5bf9\u9f50\u65b9\u5f0f",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u6e05\u5355",alt:"\u56fe\u7247\u8bf4\u660e",src:"\u56fe\u7247URL","dialog_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","missing_alt":"\u56fe\u7247\u6ca1\u6709\u8bf4\u660e\u6587\u5b57\uff0c\u662f\u5426\u7ee7\u7eed\uff1f","example_img":"\u56fe\u7247\u5916\u89c2\u9884\u89c8",misc:"\u5176\u5b83",mouseout:"\u9f20\u6807\u79fb\u51fa",mouseover:"\u9f20\u6807\u79fb\u5165","alt_image":"\u53d6\u4ee3\u56fe\u7247","swap_image":"\u56fe\u7247\u5207\u6362",map:"\u56fe\u7247 Map",id:"ID",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",classes:"\u7c7b\u522b",style:"\u6837\u5f0f","long_desc":"\u957f\u8fde\u7ed3",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","constrain_proportions":"\u7ea6\u675f\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u6807\u9898",general:"\u4e00\u822c","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u4e00\u822c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cn_dlg.js
new file mode 100644
index 000000000..c00a84ca1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.advimage_dlg',{"image_list":"\u56fe\u7247\u5217\u8868","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u5e95\u90e8","align_texttop":"\u6587\u5b57\u9876\u90e8","align_bottom":"\u5e95\u90e8","align_middle":"\u4e2d\u95f4","align_top":"\u9876\u90e8","align_baseline":"\u57fa\u7ebf",align:"\u5bf9\u9f50",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u5217\u8868",alt:"\u56fe\u7247\u8bf4\u660e",src:"\u56fe\u7247\u5730\u5740URL","dialog_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","missing_alt":"\u56fe\u7247\u6ca1\u6709\u8bf4\u660e\u6587\u5b57\uff0c\u662f\u5426\u7ee7\u7eed\uff1f","example_img":"\u56fe\u7247\u9884\u89c8",misc:"\u5176\u5b83",mouseout:"\u9f20\u6807\u79fb\u51fa",mouseover:"\u9f20\u6807\u79fb\u5165","alt_image":"\u66ff\u4ee3\u56fe\u7247","swap_image":"\u56fe\u7247\u5207\u6362",map:"\u56fe\u8c61\u6620\u5c04",id:"ID\u540d\u79f0",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",classes:"\u7c7b\u522b",style:"\u6837\u5f0f","long_desc":"\u957f\u8fde\u7ed3",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u6587\u672c\u65b9\u5411","constrain_proportions":"\u7ea6\u675f\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u6807\u9898",general:"\u5e38\u89c4","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u5e38\u89c4",width:"\u5bbd\u5ea6",height:"\u9ad8\u5ea6"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cs_dlg.js
new file mode 100644
index 000000000..cb9cb5878
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.advimage_dlg',{"image_list":"Seznam obr\u00e1zk\u016f","align_right":"Vpravo","align_left":"Vlevo","align_textbottom":"Se spodkem \u0159\u00e1dku","align_texttop":"S vrchem \u0159\u00e1dku","align_bottom":"Dol\u016f","align_middle":"Na st\u0159ed \u0159\u00e1dku","align_top":"Nahoru","align_baseline":"Na z\u00e1kladnu",align:"Zarovn\u00e1n\u00ed",hspace:"Horizont\u00e1ln\u00ed odsazen\u00ed",vspace:"Vertik\u00e1ln\u00ed odsazen\u00ed",dimensions:"Rozm\u011bry",border:"R\u00e1me\u010dek",list:"Seznam obr\u00e1zk\u016f",alt:"Popis obr\u00e1zku",src:"URL obr\u00e1zku","dialog_title":"Vlo\u017eit/upravit obr\u00e1zek","missing_alt":"Skute\u010dn\u011b chcete pokra\u010dovat bez vlo\u017een\u00e9ho popisu obr\u00e1zku? Bez popisu m\u016f\u017ee b\u00fdt obr\u00e1zek nep\u0159\u00edstupn\u00fd u\u017eivatel\u016fm se zrakov\u00fdm posti\u017een\u00edm, u\u017eivatel\u016fm textov\u00fdch prohl\u00ed\u017ee\u010d\u016f nebo u\u017eivatel\u016fm, kte\u0159\u00ed maj\u00ed vypnuto zobrazov\u00e1n\u00ed obr\u00e1zk\u016f.","example_img":"P\u0159\u00edklad obr\u00e1zku",misc:"R\u016fzn\u00e9",mouseout:"Po odjet\u00ed my\u0161i...",mouseover:"P\u0159i najet\u00ed my\u0161i...","alt_image":"Alternativn\u00ed obr\u00e1zek","swap_image":"P\u0159epnout obr\u00e1zek",map:"Obr\u00e1zkov\u00e1 mapa",id:"ID",rtl:"Zprava doleva",ltr:"Zleva doprava",classes:"T\u0159\u00eddy",style:"Styl","long_desc":"Dlouh\u00fd popis",langcode:"K\u00f3d jazyka",langdir:"Sm\u011br textu","constrain_proportions":"Zachovat proporce",preview:"N\u00e1hled",title:"Titulek",general:"Obecn\u00e9 parametry","tab_advanced":"Roz\u0161\u00ed\u0159en\u00e9","tab_appearance":"Vzhled","tab_general":"Obecn\u00e9",width:"\u0160\u00ed\u0159ka",height:"V\u00fd\u0161ka"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cy_dlg.js
new file mode 100644
index 000000000..5a1ad955a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.advimage_dlg',{"image_list":"Rhestr delweddau","align_right":"De","align_left":"Chwith","align_textbottom":"Gwaelod testun","align_texttop":"Pen testun","align_bottom":"Gwaelod","align_middle":"Canol","align_top":"Pen","align_baseline":"Gwaelodlin",align:"Aliniad",hspace:"Gofod llorweddol",vspace:"Gofod fertigol",dimensions:"Dimensiynau",border:"Border",list:"Rhestr delweddau",alt:"Disgrifiad delwedd",src:"URL delwedd","dialog_title":"Mewnosod/golygu delwedd","missing_alt":"A ydych chi\'n si\u0175r eich bod eisiau parhau heb cynnwys Disgrifiad Delwedd? Hebddo fo ni fydd y delwedd yn hygyrchol i ddefnyddwyr gyda anableddau, neu sy\'n defnyddio porwr testun, neu sy\'n pori\'r we gyda delweddau wedi\'u diffodd.","example_img":"Delwedd rhagolygiad ymddangosiad",misc:"Amrywiol",mouseout:"ar gyfer llygoden allan",mouseover:"ar gyfer llygoden drosti","alt_image":"Delwedd arall","swap_image":"Cyfnewid delwedd",map:"Map delweddau",id:"Id",rtl:"De i\'r chwith",ltr:"Chwith i\'r dde",classes:"Dosbarthiadau",style:"Arddull","long_desc":"Cyswllt disgrifiad hir",langcode:"Cod iaith",langdir:"Cyfeiriad iaith","constrain_proportions":"Cynfyngu cyfraneddau",preview:"Rhagolwg",title:"Teitl",general:"Cyffredinol","tab_advanced":"Uwch","tab_appearance":"Ymddangosiad","tab_general":"Cyffredinol",width:"Lled",height:"Uchder"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/da_dlg.js
new file mode 100644
index 000000000..66aa88be9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.advimage_dlg',{"image_list":"Billedliste","align_right":"H\u00f8jre","align_left":"Venstre","align_textbottom":"Tekstbund","align_texttop":"Teksttop","align_bottom":"Bund","align_middle":"Midte","align_top":"Top","align_baseline":"Grundlinje",align:"Justering",hspace:"Horisontal afstand",vspace:"Vertikal afstand",dimensions:"Dimensioner",border:"Kant",list:"Billedliste",alt:"Billedbeskrivelse",src:"Billed-URL","dialog_title":"Inds\u00e6t/rediger billede","missing_alt":"Er du sikker p\u00e5, at du vil forts\u00e6tte uden at inkludere en billedebeskrivelse? Uden denne er billedet m\u00e5ske ikke tilg\u00e6ngeligt for nogle brugere med handicaps, eller for dem der bruger en tekstbrowser, eller som browser internettet med billeder sl\u00e5et fra.","example_img":"Forh\u00e5ndsvisning af billede",misc:"Diverse",mouseout:"for mus-ud",mouseover:"for mus-over","alt_image":"Alternativt billede","swap_image":"Byt billede",map:"Billede map",id:"Id",rtl:"H\u00f8jre til venstre",ltr:"Venstre til h\u00f8jre",classes:"Klasser",style:"Stil","long_desc":"Lang beskrivelseslink",langcode:"Sprogkode",langdir:"Sprogretning","constrain_proportions":"Bibehold proportioner",preview:"Vis",title:"Titel",general:"Generelt","tab_advanced":"Avanceret","tab_appearance":"Udseende","tab_general":"Generelt",width:"Bredde",height:"H\u00f8jde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/de_dlg.js
new file mode 100644
index 000000000..fc0f6d1e5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.advimage_dlg',{"image_list":"Bilderliste","align_right":"Rechts","align_left":"Links","align_textbottom":"Unten im Text","align_texttop":"Oben im Text","align_bottom":"Unten","align_middle":"Mittig","align_top":"Oben","align_baseline":"Zeile",align:"Ausrichtung",hspace:"Horizontaler Abstand",vspace:"Vertikaler Abstand",dimensions:"Ausma\u00dfe",border:"Rahmen",list:"Bilderliste",alt:"Beschreibung",src:"Adresse","dialog_title":"Bild einf\u00fcgen/ver\u00e4ndern","missing_alt":"Wollen Sie wirklich keine Beschreibung eingeben? Bestimmte Benutzer mit k\u00f6rperlichen Einschr\u00e4nkungen k\u00f6nnen so nicht darauf zugreifen, ebenso solche, die einen Textbrowser benutzen oder die Anzeige von Bildern deaktiviert haben.","example_img":"Vorschau auf das Aussehen",misc:"Verschiedenes",mouseout:"bei keinem Mauskontakt",mouseover:"bei Mauskontakt","alt_image":"Alternatives Bild","swap_image":"Bild austauschen",map:"Image-Map",id:"ID",rtl:"Rechts nach links",ltr:"Links nach rechts",classes:"Klassen",style:"Format","long_desc":"Ausf\u00fchrliche Beschreibung",langcode:"Sprachcode",langdir:"Schriftrichtung","constrain_proportions":"Seitenverh\u00e4ltnis beibehalten",preview:"Vorschau",title:"Titel",general:"Allgemein","tab_advanced":"Erweitert","tab_appearance":"Aussehen","tab_general":"Allgemein",width:"Breite",height:"H\u00f6he"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/dv_dlg.js
new file mode 100644
index 000000000..5898a97be
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/el_dlg.js
new file mode 100644
index 000000000..4caf910d3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.advimage_dlg',{"image_list":"\u039b\u03af\u03c3\u03c4\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd","align_right":"\u0394\u03b5\u03be\u03b9\u03ac","align_left":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","align_textbottom":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03ba\u03ac\u03c4\u03c9","align_texttop":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03c0\u03ac\u03bd\u03c9","align_bottom":"\u039a\u03ac\u03c4\u03c9","align_middle":"\u039c\u03ad\u03c3\u03b7","align_top":"\u03a0\u03ac\u03bd\u03c9","align_baseline":"\u0393\u03c1\u03b1\u03bc\u03bc\u03ae \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd",align:"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",hspace:"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1",vspace:"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03ac\u03b8\u03b5\u03c4\u03b7",dimensions:"\u0394\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2",border:"\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf",list:"\u039b\u03af\u03c3\u03c4\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd",alt:"\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",src:"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","dialog_title":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","missing_alt":"\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5 \u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2; \u03a7\u03c9\u03c1\u03af\u03c2 \u03b1\u03c5\u03c4\u03ae\u03bd\u03b7 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03c1\u03bf\u03c3\u03b2\u03ac\u03c3\u03b9\u03bc\u03b7 \u03c3\u03b5 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf\u03c5\u03c2 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b5\u03c2 \u03bc\u03b5 \u03c0\u03c1\u03bf\u03b2\u03bb\u03ae\u03bc\u03b1\u03c4\u03b1, \u03ae \u03c3\'\u03b1\u03c5\u03c4\u03bf\u03cd\u03c2 \u03c0\u03bf\u03c5 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bd \u03c6\u03c5\u03bb\u03bb\u03bf\u03bc\u03b5\u03c4\u03c1\u03b7\u03c4\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5, \u03ae \u03b2\u03bb\u03ad\u03c0\u03bf\u03c5\u03bd \u03c4\u03bf \u0399\u03bd\u03c4\u03b5\u03c1\u03bd\u03b5\u03c4 \u03c7\u03c9\u03c1\u03af\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2.","example_img":"\u0394\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1",misc:"\u0394\u03b9\u03ac\u03c6\u03bf\u03c1\u03b1",mouseout:"\u03b3\u03b9\u03b1 mouse out",mouseover:"\u03b3\u03b9\u03b1 mouse over","alt_image":"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1","swap_image":"\u0391\u03bd\u03c4\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",map:"\u03a7\u03ac\u03c1\u03c4\u03b7\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",id:"Id",rtl:"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",ltr:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac",classes:"\u039a\u03bb\u03ac\u03c3\u03b5\u03b9\u03c2",style:"\u03a3\u03c4\u03c5\u03bb","long_desc":"\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2 \u03c0\u03bb\u03ae\u03c1\u03bf\u03c5\u03c2 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2",langcode:"\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2",langdir:"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2","constrain_proportions":"\u0394\u03b9\u03b1\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7 \u03b1\u03bd\u03b1\u03bb\u03bf\u03b3\u03af\u03b1\u03c2 \u03c0\u03bb. - \u03cd\u03c8\u03bf\u03c5\u03c2",preview:"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7",title:"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2",general:"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac","tab_advanced":"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2","tab_appearance":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7","tab_general":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac",width:"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",height:"\u038e\u03c8\u03bf\u03c2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js
new file mode 100644
index 000000000..5f122e2cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","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.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/eo_dlg.js
new file mode 100644
index 000000000..b3ea0b2a4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.advimage_dlg',{"image_list":"Listo de bildoj","align_right":"Dekstre","align_left":"Maldekstre","align_textbottom":"Tekstosubo","align_texttop":"Tekstosupro","align_bottom":"Sube","align_middle":"Meze","align_top":"Supre","align_baseline":"Sur tekstlinio",align:"Liniigo",hspace:"Horizontala spaco",vspace:"Vertikala spaco",dimensions:"Dimensioj",border:"Bordero",list:"Listo de bildoj",alt:"Priskribo de bildo",src:"Adreso de bildo","dialog_title":"Enmeti/redakti bildon","missing_alt":"\u0108u vi certas ke vi volas da\u016drigi sen aldoni priskribon al la bildo? (Tio povas ka\u016dzi problemojn pri alireblo en iuj retumiloj)","example_img":"Anta\u016dvido",misc:"Cetera",mouseout:"Muso for",mouseover:"Muso \u015dvebado","alt_image":"Bildalternativo","swap_image":"\u015can\u011di bildon",map:"Bildomapo",id:"Id",rtl:"Dekstre-Maldekstren",ltr:"Maldekstre-Dekstren",classes:"Klasoj",style:"Stilo","long_desc":"Longa priskribo",langcode:"Lingvokodo",langdir:"Tekstodirekto","constrain_proportions":"Konservi proporcion",preview:"Anta\u016dvido",title:"Titolo",general:"\u011ceneralaj","tab_advanced":"Spertaj","tab_appearance":"Aspekto","tab_general":"\u011ceneralaj",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/es_dlg.js
new file mode 100644
index 000000000..6b6a5130c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.advimage_dlg',{"image_list":"Lista de imagen","align_right":"Derecha","align_left":"Izquierda","align_textbottom":"Texto abajo","align_texttop":"Texto arriba","align_bottom":"Debajo","align_middle":"Medio","align_top":"Arriba","align_baseline":"L\u00ednea base",align:"Alineaci\u00f3n",hspace:"Espacio horizontal",vspace:"Espacio vertical",dimensions:"Dimensiones",border:"Bordes",list:"Lista de imagen",alt:"Descripci\u00f3n de la imagen",src:"URL de la imagen","dialog_title":"Insertar/editar imagen","missing_alt":" \u00bfEsta seguro de continuar sin introducir una descripci\u00f3n a la imagen? Sin ella puede no ser accesible para usuarios con discapacidades, o para aquellos que usen navegadores de modo texto, o tengan deshabilitadas las im\u00e1genes de la p\u00e1gina.","example_img":"Vista previa de la imagen",misc:"Miscel\u00e1neo",mouseout:"para mouseout",mouseover:"para mouseover","alt_image":"Imagen alternativa","swap_image":"Intercambiar imagen",map:"Mapa de imagen",id:"Id",rtl:"Derecha a izquierda",ltr:"Izquierda a derecha",classes:"Clases",style:"Estilos","long_desc":"V\u00ednculo para descripci\u00f3n larga",langcode:"C\u00f3digo del lenguaje",langdir:"Direcci\u00f3n del lenguaje","constrain_proportions":"Bloquear relaci\u00f3n de aspecto",preview:"Vista previa",title:"T\u00edtulo",general:"General","tab_advanced":"Avanzado","tab_appearance":"Apariencia","tab_general":"General",width:"Ancho",height:"Alto"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/et_dlg.js
new file mode 100644
index 000000000..0b2e77492
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.advimage_dlg',{"image_list":"Piltide nimekiri","align_right":"Paremal","align_left":"Vasakul","align_textbottom":"Tekst all","align_texttop":"Tekst \u00fcleval","align_bottom":"All","align_middle":"Keskel","align_top":"\u00dcleval","align_baseline":"Baas",align:"Joondus",hspace:"Horisontaalne vahe",vspace:"Vertikaalne vahe",dimensions:"M\u00f5\u00f5tmed",border:"Raam",list:"Piltide nimekiri",alt:"Pildi kirjeldus",src:"Pildi URL","dialog_title":"Sisesta/muuda pilti","missing_alt":"Oled kindel, et soovid j\u00e4tkata pildile kirjeldust lisamata?","example_img":"Eelvaate pildi v\u00e4limus",misc:"Mitmesugune",mouseout:"\u201eKursor maas\u201c",mouseover:"\u201eKursor peal\u201c","alt_image":"Alternatiivne pilt","swap_image":"Vaheta pilti",map:"Pildi kaart",id:"ID",rtl:"Paremalt vasakule",ltr:"Vasakult paremale",classes:"Klassid",style:"Stiil","long_desc":"Pikk kirjelduse link",langcode:"Keele kood",langdir:"Keele suund","constrain_proportions":"Piira proportioone",preview:"Eelvaade",title:"Pealkiri",general:"\u00dcldine","tab_advanced":"P\u00f5hjalikum","tab_appearance":"V\u00e4limus","tab_general":"\u00dcldine",width:"Laius",height:"K\u00f5rgus"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/eu_dlg.js
new file mode 100644
index 000000000..ea4132041
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.advimage_dlg',{"image_list":"Irudi-zerrenda","align_right":"Eskuinean","align_left":"Ezkerrean","align_textbottom":"Testua behean","align_texttop":"Testua goian","align_bottom":"Behean","align_middle":"Tartean","align_top":"Goian","align_baseline":"Oinarri-marra",align:"Alineazioa",hspace:"Tarte horizontala",vspace:"Tarte bertikala",dimensions:"Tamaina",border:"Inguruko marra",list:"Irudi-zerrenda",alt:"Irudiaren deskribapena",src:"Irudiaren URL helbidea","dialog_title":"Irudia txertatu/editatu","missing_alt":"Irudiaren deskribapena gehitu gabe jarraitu nahi duzu? Hau horrela, ezgaitasunak dituztenentzat edo testu nabigatzaile bat darabiltenentzat ez da irisgarria izango.","example_img":"Nola ikusiko den",misc:"Bestelakoak",mouseout:"xagua kentzen denean",mouseover:"xagua gainean dagoenean","alt_image":"Ordezko irudia","swap_image":"Irudia ordezkatu",map:"Irudi-mapa",id:"Id",rtl:"Eskuinetik ezkerrera",ltr:"Ezkerretik eskuinera",classes:"Klaseak",style:"Estiloa","long_desc":"Deskribapen luzearen lotura",langcode:"Hizkuntza-kodea",langdir:"Hizkuntzaren norabidea","constrain_proportions":"Proportzioak mantendu",preview:"Aurrebista",title:"Izenburua",general:"Orokorra","tab_advanced":"Aurreratua","tab_appearance":"Itxura","tab_general":"Orokorra",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fa_dlg.js
new file mode 100644
index 000000000..a52e737d5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.advimage_dlg',{"image_list":"\u0644\u06cc\u0633\u062a \u062a\u0635\u0648\u06cc\u0631","align_right":"\u0631\u0627\u0633\u062a","align_left":"\u0686\u067e","align_textbottom":"\u0645\u062a\u0646 \u067e\u0627\u06cc\u06cc\u0646","align_texttop":"\u0645\u062a\u0646 \u0628\u0627\u0644\u0627","align_bottom":"\u067e\u0627\u06cc\u06cc\u0646","align_middle":"\u0648\u0633\u0637","align_top":"\u0628\u0627\u0644\u0627","align_baseline":"\u062e\u0637 \u067e\u0627\u06cc\u0647",align:"\u062a\u0631\u0627\u0632",hspace:"\u0641\u0627\u0635\u0644\u0647 \u0627\u0641\u0642\u06cc",vspace:"\u0641\u0627\u0635\u0644\u0647 \u0639\u0645\u0648\u062f\u06cc",dimensions:"\u0627\u0628\u0639\u0627\u062f",border:"\u062d\u0627\u0634\u06cc\u0647",list:"\u0644\u06cc\u0633\u062a \u062a\u0635\u0648\u06cc\u0631",alt:"\u062a\u0648\u0636\u06cc\u062d \u062a\u0635\u0648\u06cc\u0631",src:"\u0622\u062f\u0631\u0633 \u062a\u0635\u0648\u06cc\u0631","dialog_title":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631","missing_alt":"\u0622\u06cc\u0627 \u0634\u0645\u0627 \u0627\u0632 \u0627\u062f\u0627\u0645\u0647 \u0628\u062f\u0648\u0646 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u062a\u0648\u0636\u06cc\u062d \u0628\u0631\u0627\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062f\u0627\u0631\u06cc\u062f\u061f \u0628\u062f\u0648\u0646 \u0622\u0646 \u0645\u0645\u06a9\u0646 \u0646\u06cc\u0633\u062a \u062a\u0635\u0627\u0648\u06cc\u0631 \u0628\u0631\u0627\u06cc \u0628\u0631\u062e\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646\u06cc \u06a9\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a \u062f\u06cc\u062f\u0646 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0631\u0627 \u0646\u062f\u0627\u0631\u0646\u062f \u060c \u06cc\u0627 \u0622\u0646\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0632 \u06cc\u06a9 \u0645\u0631\u0648\u0631\u06af\u0631 \u0645\u062a\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f \u060c \u06cc\u0627 \u062f\u0631 \u062d\u0627\u0644 \u062f\u06cc\u062f\u0646 \u0648\u0628 \u0628\u062f\u0648\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0645\u06cc \u0628\u0627\u0634\u0646\u062f \u060c \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0628\u0627\u0634\u062f.","example_img":"\u062a\u0635\u0648\u06cc\u0631 \u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634 \u0638\u0627\u0647\u0631",misc:"\u0645\u062a\u0641\u0631\u0642\u0647",mouseout:"\u0628\u0631\u0627\u06cc \u0631\u0641\u062a\u0646 \u0645\u0648\u0633",mouseover:"\u0628\u0631\u0627\u06cc \u0622\u0645\u062f\u0646 \u0645\u0648\u0633","alt_image":"\u062a\u0635\u0648\u06cc\u0631 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646","swap_image":"\u062a\u0639\u0648\u06cc\u0636 \u062a\u0635\u0648\u06cc\u0631",map:"\u0646\u0642\u0634\u0647 \u062a\u0635\u0648\u06cc\u0631",id:"\u0634\u0646\u0627\u0633\u0647",rtl:"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e",ltr:"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a",classes:"\u06a9\u0644\u0627\u0633 \u0647\u0627",style:"\u0627\u0633\u062a\u0627\u06cc\u0644","long_desc":"\u0644\u06cc\u0646\u06a9 \u062a\u0648\u0636\u06cc\u062d \u0637\u0648\u0644\u0627\u0646\u06cc",langcode:"\u06a9\u062f \u0632\u0628\u0627\u0646",langdir:"\u062c\u0647\u062a \u0632\u0628\u0627\u0646","constrain_proportions":"\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628",preview:"\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634",title:"\u0639\u0646\u0648\u0627\u0646",general:"\u0639\u0645\u0648\u0645\u06cc","tab_advanced":"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647","tab_appearance":"\u0638\u0627\u0647\u0631","tab_general":"\u0639\u0645\u0648\u0645\u06cc",width:"\u067e\u0647\u0646\u0627",height:"\u0627\u0631\u062a\u0641\u0627\u0639"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fi_dlg.js
new file mode 100644
index 000000000..f85c1ec31
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.advimage_dlg',{"image_list":"Kuvalista","align_right":"Oikealla","align_left":"Vasemmalla","align_textbottom":"Teksti alhaalla","align_texttop":"Teksti ylh\u00e4\u00e4ll\u00e4","align_bottom":"Alhaalla","align_middle":"Keskell\u00e4","align_top":"Ylh\u00e4\u00e4ll\u00e4","align_baseline":"Rivill\u00e4",align:"Tasaus",hspace:"vaakasuora tila",vspace:"pystysuora tila",dimensions:"Mitat",border:"Kehys",list:"Kuvalista",alt:"Kuvan kuvaus",src:"Kuvan URL","dialog_title":"Lis\u00e4\u00e4/muokkaa kuvaa","missing_alt":"Haluatko varmasti jatkaa lis\u00e4\u00e4m\u00e4tt\u00e4 kuvausta? Kuvauksen puuttuminen saattaa h\u00e4irit\u00e4 sellaisia, jotka k\u00e4ytt\u00e4v\u00e4t tekstipohjaista selainta tai ovat kytkeneet kuvien n\u00e4kymisen pois p\u00e4\u00e4lt\u00e4.","example_img":"Ulkoasun esikatselukuva",misc:"Sekalaiset",mouseout:"mouseoutille",mouseover:"mouseoverille","alt_image":"Vaihtoehtoinen kuva","swap_image":"Vaihda kuva",map:"Kuvakartta",id:"Id",rtl:"Oikealta vasemmalle",ltr:"Vasemmalta oikealle",classes:"Luokat",style:"Tyyli","long_desc":"Pitk\u00e4n kuvauksen linkki",langcode:"Kielen koodi",langdir:"Kielen suunta","constrain_proportions":"S\u00e4ilyt\u00e4 mittasuhteet",preview:"Esikatselu",title:"Otsikko",general:"Yleiset","tab_advanced":"Edistynyt","tab_appearance":"N\u00e4kyminen","tab_general":"Yleiset",width:"Leveys",height:"Korkeus"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fr_dlg.js
new file mode 100644
index 000000000..1479bf194
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.advimage_dlg',{"image_list":"Liste d\'images","align_right":"Droite (flottant)","align_left":"Gauche (flottant)","align_textbottom":"Texte en bas","align_texttop":"Texte en haut","align_bottom":"En bas","align_middle":"Au milieu","align_top":"En haut","align_baseline":"Normal",align:"Alignement",hspace:"Espacement horizontal",vspace:"Espacement vertical",dimensions:"Dimensions",border:"Bordure",list:"Liste d\'images",alt:"Description de l\'image",src:"URL de l\'image","dialog_title":"Ins\u00e9rer / \u00e9diter une image","missing_alt":"\u00cates-vous s\u00fbr de vouloir continuer sans d\u00e9finir de description pour l\'image ? Sans elle, l\'image peut ne pas \u00eatre accessible \u00e0 certains utilisateurs handicap\u00e9s, ceux utilisant un navigateur texte ou ceux qui naviguent sans affichage des images.","example_img":"Apparence de l\'image",misc:"Divers",mouseout:"\u00e0 la sortie de la souris",mouseover:"au survol de la souris","alt_image":"Image alternative","swap_image":"Image de remplacement",map:"Image cliquable",id:"Id",rtl:"De droite \u00e0 gauche",ltr:"De gauche \u00e0 droite",classes:"Classes",style:"Style","long_desc":"Description longue du lien",langcode:"Code de la langue",langdir:"Sens de lecture","constrain_proportions":"Conserver les proportions",preview:"Pr\u00e9visualisation",title:"Titre",general:"G\u00e9n\u00e9ral","tab_advanced":"Avanc\u00e9","tab_appearance":"Apparence","tab_general":"G\u00e9n\u00e9ral",width:"Largeur",height:"Hauteur"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/gl_dlg.js
new file mode 100644
index 000000000..aeac4bd6e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.advimage_dlg',{"image_list":"Lista de imaxes","align_right":"Dereita","align_left":"Esquerda","align_textbottom":"Texto abaixo","align_texttop":"Texto arriba","align_bottom":"Abaixo","align_middle":"Medio","align_top":"Arriba","align_baseline":"Li\u00f1a base",align:"Ali\u00f1amento",hspace:"Espacio horizontal",vspace:"Espacio vertical",dimensions:"Dimensi\u00f3ns",border:"Bordes",list:"Lista de imaxes",alt:"Descripci\u00f3n da imaxe",src:"URL da imaxe","dialog_title":"Insertar/editar imaxe","missing_alt":"\u00bfEsta seguro de continuar sen introducir unha descripci\u00f3n \u00e1 imaxe? Sen ela pode non ser accesible pra usuarios con discapacidades, ou pra aqueles que usen navegadores de modo texto, ou te\u00f1an deshabilitadas as imaxes da p\u00e1xina.","example_img":"Vista previa da imaxe",misc:"Miscel\u00e1neo",mouseout:"pra mouseout",mouseover:"pra mouseover","alt_image":"Imaxe alternativa","swap_image":"Intercambiar imaxe",map:"Mapa de imaxe",id:"Id",rtl:"Dereita a esquerda",ltr:"Esquerda a dereita",classes:"Clases",style:"Estilos","long_desc":"V\u00ednculo pra descripci\u00f3n larga",langcode:"C\u00f3digo do idioma",langdir:"Direcci\u00f3n do idioma","constrain_proportions":"Bloquear proporci\u00f3ns",preview:"Vista previa",title:"T\u00edtulo",general:"Xeral","tab_advanced":"Avanzado","tab_appearance":"Apariencia","tab_general":"Xeral",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/gu_dlg.js
new file mode 100644
index 000000000..30543603a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/he_dlg.js
new file mode 100644
index 000000000..fb3ea2ac6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.advimage_dlg',{"image_list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea","align_right":"\u05dc\u05d9\u05de\u05d9\u05df","align_left":"\u05dc\u05e9\u05de\u05d0\u05dc","align_textbottom":"\u05d8\u05e7\u05e1\u05d8 \u05ea\u05d7\u05ea\u05d5\u05df","align_texttop":"\u05d8\u05e7\u05e1\u05d8 \u05e2\u05dc\u05d9\u05d5\u05df","align_bottom":"\u05ea\u05d7\u05ea\u05d9\u05ea","align_middle":"\u05d0\u05de\u05e6\u05e2","align_top":"\u05e2\u05dc\u05d9\u05d5\u05df","align_baseline":"\u05e7\u05d5 \u05d1\u05e1\u05d9\u05e1\u05d9",align:"\u05d9\u05e9\u05d5\u05e8",hspace:"\u05e7\u05d5 \u05d0\u05d5\u05e4\u05e7\u05d9",vspace:"\u05e7\u05d5 \u05d0\u05e0\u05db\u05d9",dimensions:"\u05de\u05d9\u05de\u05d3\u05d9\u05dd",border:"\u05d2\u05d1\u05d5\u05dc",list:"\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea",alt:"\u05ea\u05d9\u05d0\u05d5\u05e8 \u05d4\u05ea\u05de\u05d5\u05e0\u05d4",src:"URL \u05e9\u05dc \u05d4\u05ea\u05de\u05d5\u05e0\u05d4","dialog_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05ea\u05de\u05d5\u05e0\u05d4","missing_alt":"\u05dc\u05d4\u05de\u05e9\u05d9\u05da \u05de\u05d1\u05dc\u05d9 \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05ea\u05d9\u05d0\u05d5\u05e8 \u05dc\u05ea\u05de\u05d5\u05e0\u05d4?","example_img":"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4 \u05e9\u05dc \u05d4\u05ea\u05de\u05d5\u05e0\u05d4",misc:"\u05e9\u05d5\u05e0\u05d5\u05ea",mouseout:"\u05d4\u05e1\u05de\u05df \u05e2\u05d1\u05e8 \u05d0\u05ea \u05d4\u05ea\u05de\u05d5\u05e0\u05d4",mouseover:"\u05d1\u05e2\u05ea \u05de\u05e2\u05d1\u05e8 \u05d4\u05e1\u05de\u05df \u05e2\u05dc \u05d4\u05ea\u05de\u05d5\u05e0\u05d4","alt_image":"\u05ea\u05de\u05d5\u05e0\u05d4 \u05d7\u05dc\u05d9\u05e4\u05d9\u05ea","swap_image":"\u05d4\u05d7\u05dc\u05e4\u05ea \u05ea\u05de\u05d5\u05e0\u05d4",map:"Image map",id:"Id",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",classes:"Classes",style:"\u05e1\u05d2\u05e0\u05d5\u05df","long_desc":"\u05ea\u05d9\u05d0\u05d5\u05e8 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e8\u05d5\u05da",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4","constrain_proportions":"\u05e9\u05de\u05d9\u05e8\u05d4 \u05e2\u05dc \u05e4\u05e8\u05d5\u05e4\u05d5\u05e8\u05e6\u05d9\u05d5\u05ea",preview:"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4",title:"\u05db\u05d5\u05ea\u05e8\u05ea",general:"\u05db\u05dc\u05dc\u05d9","tab_advanced":"\u05de\u05ea\u05e7\u05d3\u05dd","tab_appearance":"\u05de\u05e8\u05d0\u05d4","tab_general":"\u05db\u05dc\u05dc\u05d9",width:"\u05e8\u05d5\u05d7\u05d1",height:"\u05d2\u05d5\u05d1\u05d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hi_dlg.js
new file mode 100644
index 000000000..f7b2361d1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hr_dlg.js
new file mode 100644
index 000000000..441370071
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.advimage_dlg',{"image_list":"Lista slika","align_right":"Na desno","align_left":"Na lijevo","align_textbottom":"Na dno teksta","align_texttop":"Na vrh teksta","align_bottom":"Na dno","align_middle":"Na sredinu","align_top":"Na vrh","align_baseline":"Osnovna linija",align:"Poravnavanje",hspace:"Vodoravni razmak",vspace:"Okomiti razmak",dimensions:"Dimenzije",border:"Obrub",list:"Lista slika",alt:"Opis slike",src:"URL slike","dialog_title":"Umetni/uredi sliku","missing_alt":"Jeste li sigurni da \u017eelite izostaviti opis slike? Slika mo\u017ee biti nedostupna ljudima s pote\u0161ko\u0107ama ili onima koji koriste preglednike bez prikaza slika.","example_img":"Predprikaz slike",misc:"Razno",mouseout:"za izlazak mi\u0161a van slike",mouseover:"za prelazak mi\u0161a preko slike","alt_image":"Alternativna slika","swap_image":"Izmjenjiva slika",map:"Karta slike",id:"Id",rtl:"S desna na lijevo",ltr:"S lijeva na desno",classes:"Klase",style:"Stil","long_desc":"Poveznica dugog opisa",langcode:"Kod jezika",langdir:"Smjer jezika","constrain_proportions":"Zadr\u017ei proporcije",preview:"Predprikaz",title:"Naslov",general:"Op\u0107e","tab_advanced":"Napredno","tab_appearance":"Izgled","tab_general":"Op\u0107e",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hu_dlg.js
new file mode 100644
index 000000000..d692d27a8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.advimage_dlg',{"image_list":"K\u00e9plista","align_right":"Jobbra","align_left":"Balra","align_textbottom":"Sz\u00f6veg alj\u00e1hoz","align_texttop":"Sz\u00f6veg tetej\u00e9hez","align_bottom":"Lentre","align_middle":"K\u00f6z\u00e9pre","align_top":"Fentre","align_baseline":"Alapvonalhoz",align:"Igaz\u00edt\u00e1s",hspace:"V\u00edzszintes t\u00e1vols\u00e1g",vspace:"F\u00fcgg\u0151leges t\u00e1vols\u00e1g",dimensions:"M\u00e9retek",border:"Keret",list:"K\u00e9plista",alt:"K\u00e9p helyettes\u00edt\u0151 sz\u00f6vege",src:"K\u00e9p internet c\u00edme","dialog_title":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","missing_alt":"Biztosan folytatja helyettes\u00edt\u0151 sz\u00f6veg n\u00e9lk\u00fcl? En\u00e9lk\u00fcl a korl\u00e1toz\u00e1ssal \u00e9l\u0151k, sz\u00f6veges b\u00f6ng\u00e9sz\u0151t haszn\u00e1l\u00f3k \u00e9s a k\u00e9pek megjelen\u00edt\u00e9s\u00e9t letilt\u00f3 felhaszn\u00e1l\u00f3k h\u00e1tr\u00e1nyban lesznek.","example_img":"El\u0151n\u00e9zeti k\u00e9p",misc:"Vegyes",mouseout:"K\u00e9p az eg\u00e9rkurzor lev\u00e9telekor",mouseover:"K\u00e9p az eg\u00e9rkurzor f\u00f6l\u00e9vitelekor","alt_image":"Alternat\u00edv k\u00e9p","swap_image":"K\u00e9pcsere",map:"K\u00e9p t\u00e9rk\u00e9p",id:"Id",rtl:"Jobbr\u00f3l balra",ltr:"Balr\u00f3l jobbra",classes:"Oszt\u00e1lyok",style:"CSS St\u00edlus","long_desc":"B\u0151vebb le\u00edr\u00e1s link",langcode:"Nyelv k\u00f3d",langdir:"Nyelv \u00edr\u00e1s ir\u00e1ny","constrain_proportions":"Ar\u00e1nytart\u00e1s",preview:"El\u0151n\u00e9zet",title:"C\u00edm",general:"\u00c1ltal\u00e1nos","tab_advanced":"Halad\u00f3","tab_appearance":"Megjelen\u00e9s","tab_general":"\u00c1ltal\u00e1nos",width:"Sz\u00e9less\u00e9g",height:"Magass\u00e1g"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hy_dlg.js
new file mode 100644
index 000000000..581d4f606
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.advimage_dlg',{"image_list":"\u0546\u056f\u0561\u0580\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f","align_right":"\u0538\u057d\u057f \u0561\u057b \u0565\u0566\u0580\u056b","align_left":"\u0538\u057d\u057f \u0571\u0561\u056d \u0565\u0566\u0580\u056b","align_textbottom":"\u0538\u057d\u057f \u057f\u0565\u0584\u057d\u057f\u056b \u057d\u057f\u0578\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","align_texttop":"\u0538\u057d\u057f \u057f\u0565\u0584\u057d\u057f\u056b \u057e\u0565\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","align_bottom":"\u0538\u057d\u057f \u057d\u057f\u0578\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","align_middle":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0581\u0576\u0565\u056c","align_top":"\u0538\u057d\u057f \u057e\u0565\u0580\u056b \u0565\u0566\u0580\u056b","align_baseline":"\u0538\u057d\u057f \u0562\u0561\u0566\u0561\u0575\u056b\u0576 \u0563\u056e\u056b",align:"\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574",hspace:"\u0540\u0578\u0580\u056b\u0566. \u0570\u0565\u057c\u0561\u0581\u0578\u0582\u0574",vspace:"\u0548\u0582\u0572\u0572. \u0570\u0565\u057c\u0561\u0581\u0578\u0582\u0574",dimensions:"\u0549\u0561\u0583\u057d\u0565\u0580",border:"\u0535\u0566\u0580",list:"\u0546\u056f\u0561\u0580\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f",alt:"\u0546\u056f\u0561\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",src:"\u0546\u056f\u0561\u0580\u056b \u0570\u0561\u057d\u0581\u0565","dialog_title":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0576\u056f\u0561\u0580","missing_alt":"\u0534\u0578\u0582\u0584 \u056b\u0580\u0578\u055e\u0584 \u0579\u0565\u0584 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u0574 \u0576\u056f\u0561\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576 \u0576\u0565\u0580\u0561\u057c\u0565\u056c\u0589","example_img":"\u0546\u056f\u0561\u0580\u056b \u0564\u056b\u057f\u0574\u0561\u0576 \u057f\u0565\u057d\u0584",misc:"\u0531\u0575\u056c",mouseout:"\u0570\u0565\u057c\u0561\u0581\u0574\u0561\u0576 \u057a\u0561\u0570\u056b\u0576",mouseover:"\u0544\u0578\u057f\u0565\u0581\u0574\u0561\u0576 \u057a\u0561\u0570\u056b\u0576","alt_image":"\u0531\u056c\u057f\u0565\u0580\u0576\u0561\u057f\u056b\u057e \u0576\u056f\u0561\u0580","swap_image":"Swap",map:"\u0546\u056f\u0561\u0580\u056b map",id:"Id",rtl:"\u0531\u057b\u056b\u0581 \u0571\u0561\u056d",ltr:"\u0541\u0561\u056d\u056b\u0581 \u0561\u057b",classes:"\u0534\u0561\u057d\u0565\u0580",style:"\u0548\u0573","long_desc":"\u0544\u0561\u0576\u0580\u0561\u0574\u0561\u057d\u0576 \u0562\u0561\u0581\u0561\u057f\u0580\u0578\u0582\u0569\u0575\u0561\u0576 \u0570\u0572\u0578\u0582\u0574",langcode:"\u053c\u0565\u0566\u057e\u056b \u056f\u0578\u0564",langdir:"\u053c\u0565\u0566\u057e\u056b \u0578\u0582\u0572\u0572\u057e\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568","constrain_proportions":"\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c \u0579\u0561\u0583\u0565\u0580\u056b \u0570\u0561\u0580\u0561\u0562\u0565\u0580\u0561\u056f\u0581\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568",preview:"\u0546\u0561\u056d\u0561\u0564\u056b\u057f\u0578\u0582\u0574",title:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580",general:"\u0540\u056b\u0574\u0576\u0561\u056f\u0561\u0576","tab_advanced":"\u053c\u0580\u0561\u0581\u0578\u0582\u0581\u056b\u0579","tab_appearance":"\u054f\u0565\u057d\u0584","tab_general":"\u0540\u056b\u0574\u0576\u0561\u056f\u0561\u0576",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ia_dlg.js
new file mode 100644
index 000000000..f540c79c4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.advimage_dlg',{"image_list":"\u56fe\u7247\u6e05\u5355","align_right":"\u5c45\u53f3","align_left":"\u5c45\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u5e95\u90e8","align_middle":"\u4e2d\u90e8","align_top":"\u9876\u90e8","align_baseline":"\u57fa\u7ebf",align:"\u5bf9\u9f50\u65b9\u5f0f",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u6e05\u5355",alt:"\u56fe\u7247\u8bf4\u660e",src:"\u56fe\u7247\u5730\u5740","dialog_title":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","missing_alt":" \u662f\u5426\u4e0d\u4e3a\u56fe\u7247\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff0c\u5982\u679c\u4e0d\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff0c\u5c06\u5bfc\u81f4\u4e0d\u652f\u6301\u56fe\u7247\u7684\u6d4f\u89c8\u5668\u5ffd\u7565\u672c\u5185\u5bb9","example_img":"\u9884\u89c8\u56fe\u7247",misc:"\u5176\u5b83",mouseout:"\u9f20\u6807\u79fb\u51fa",mouseover:"\u9f20\u6807\u5212\u8fc7","alt_image":"\u4ea4\u66ff\u56fe\u7247","swap_image":"\u5207\u6362\u56fe\u7247",map:"\u56fe\u7247\u70ed\u70b9",id:"Id",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",classes:"\u6837\u5f0f\u7c7b",style:"\u6837\u5f0f","long_desc":"\u63cf\u8ff0",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u67e5\u627e",general:"\u57fa\u672c","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u57fa\u672c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/id_dlg.js
new file mode 100644
index 000000000..e7bc7c631
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.advimage_dlg',{"image_list":"Daftar Gambar","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensi",border:"Border",list:"Daftar Gambar",alt:"Deskripsi Gambar",src:"URL Gambar","dialog_title":"sisipkan/Ubah Gambar","missing_alt":"Yakin ingin melanjutkan tanpa menyertakan deskripsi gambar? Gambar mungkin tidak dapat diakses oleh beberapa pengguna yang yang memiliki keterbatasan, atau mereka yang menggunakan modus teks browser, atau berselancar di Web dengan gambar dimatikan.","example_img":"Gambar pra-tampil",misc:"Rupa-rupa",mouseout:"untuk mouse out",mouseover:"untuk mouse over","alt_image":"Alternatif gambar","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",classes:"Classes",style:"Style","long_desc":"Deskripsi panjang link",langcode:"Kode bahasa",langdir:"Bahasa","constrain_proportions":"Proporsi dibatasi",preview:"Preview",title:"Judul",general:"Umun","tab_advanced":"Advanced","tab_appearance":"Tampilan","tab_general":"Umum",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/is_dlg.js
new file mode 100644
index 000000000..f127dac73
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"J\u00f6fnun",hspace:"L\u00e1r\u00e9tt loftun",vspace:"L\u00f3\u00f0r\u00e9tt loftun",dimensions:"St\u00e6r\u00f0ir",border:"Rammi",list:"Myndalisti",alt:"L\u00fdsing",src:"Sl\u00f3\u00f0 \u00e1 mynd","dialog_title":"Setja inn/breyta mynd","missing_alt":"Ertu viss um a\u00f0 halda \u00e1fram \u00e1n l\u00fdsingu myndar? \u00c1n hennar er myndin \u00f3a\u00f0genginleg fyrir suma notendur me\u00f0 skj\u00e1lesara, texta vafra e\u00f0a me\u00f0 sl\u00f6kkt \u00e1 birtingu mynda \u00ed vafranum s\u00ednum.","example_img":"Birting prufumyndar",misc:"\u00ddmislegt",mouseout:"\u00feegar m\u00fas fer af",mouseover:"\u00feegar m\u00fas er yfir","alt_image":"\u00d6nnur mynd","swap_image":"Skipta mynd \u00fat",map:"Image map",id:"Id",rtl:"H\u00e6gri til vinstri",ltr:"Vinstri til h\u00e6gri",classes:"Klasar",style:"St\u00edll","long_desc":"L\u00f6ng l\u00fdsing \u00e1 hlekki",langcode:"K\u00f3\u00f0i tungum\u00e1ls",langdir:"\u00c1tt tungum\u00e1ls","constrain_proportions":"Halda hlutf\u00f6llum",preview:"Forsko\u00f0un",title:"Titill",general:"Almennt","tab_advanced":"N\u00e1nar","tab_appearance":"\u00datlit","tab_general":"Almennt",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/it_dlg.js
new file mode 100644
index 000000000..9195c9623
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.advimage_dlg',{"image_list":"Lista immagini","align_right":"A destra","align_left":"A sinistra","align_textbottom":"In basso al testo","align_texttop":"In alto al testo","align_bottom":"In basso","align_middle":"In mezzo","align_top":"In alto","align_baseline":"Alla base",align:"Allineamento",hspace:"Spaziatura orizzontale",vspace:"Spaziatura verticale",dimensions:"Dimensioni",border:"Bordo",list:"Lista immagini",alt:"Descrizione immagine",src:"URL immagine","dialog_title":"Inserisci/modifica immagine","missing_alt":"Sicuro di continuare senza includere una descrizione dell\'immagine? Senza di essa l\'immagine pu\u00f2 non essere accessibile ad alcuni utenti con disabilit\u00e0, o per coloro che usano un browser testuale oppure che hanno disabilitato la visualizzazione delle immagini nel loro browser.","example_img":"Anteprima aspetto immagine",misc:"Impostazioni varie",mouseout:"quando mouse fuori",mouseover:"quando mouse sopra","alt_image":"Immagine alternativa","swap_image":"Sostituisci immagine",map:"Immagine come mappa",id:"Id",rtl:"Destra verso sinistraa",ltr:"Sinistra verso destra",classes:"Classe",style:"Stile","long_desc":"Descrizione del collegamento",langcode:"codice lingua",langdir:"Direzione testo","constrain_proportions":"Mantieni proporzioni",preview:"Anteprima",title:"Titolo",general:"Generale","tab_advanced":"Avanzate","tab_appearance":"Aspetto","tab_general":"Generale",width:"Larghezza",height:"Altezza"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ja_dlg.js
new file mode 100644
index 000000000..f8449c423
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.advimage_dlg',{"image_list":"\u753b\u50cf\u306e\u4e00\u89a7","align_right":"\u53f3\u5bc4\u305b","align_left":"\u5de6\u5bc4\u305b","align_textbottom":"\u30c6\u30ad\u30b9\u30c8\u3092\u4e0b\u7aef\u63c3\u3048","align_texttop":"\u30c6\u30ad\u30b9\u30c8\u3092\u4e0a\u7aef\u63c3\u3048","align_bottom":"\u4e0b\u63c3\u3048","align_middle":"\u4e2d\u592e\u63c3\u3048","align_top":"\u4e0a\u63c3\u3048","align_baseline":"\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u63c3\u3048",align:"\u914d\u7f6e",hspace:"\u5de6\u53f3\u306e\u4f59\u767d",vspace:"\u4e0a\u4e0b\u306e\u4f59\u767d",dimensions:"\u5bf8\u6cd5",border:"\u67a0\u7dda",list:"\u753b\u50cf\u306e\u4e00\u89a7",alt:"\u753b\u50cf\u306e\u8aac\u660e",src:"\u753b\u50cf\u306eURL","dialog_title":"\u753b\u50cf\u3092\u633f\u5165/\u7de8\u96c6","missing_alt":"\u753b\u50cf\u306e\u8aac\u660e\u3092\u542b\u3081\u305a\u306b\u7d9a\u3051\u307e\u3059\u304b? \u753b\u50cf\u306e\u8aac\u660e\u304c\u306a\u3044\u3068\u76ee\u306e\u4e0d\u81ea\u7531\u306a\u65b9\u3001\u30c6\u30ad\u30b9\u30c8\u8868\u793a\u3060\u3051\u306e\u30d6\u30e9\u30a6\u30b6\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u65b9\u3001\u753b\u50cf\u306e\u8868\u793a\u3092\u6b62\u3081\u3066\u308b\u65b9\u304c\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002","example_img":"\u753b\u50cf\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u69d8\u5b50",misc:"\u305d\u306e\u4ed6",mouseout:"\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u5916\u308c\u308b\u6642",mouseover:"\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u304b\u304b\u308b\u6642","alt_image":"\u5225\u306e\u753b\u50cf","swap_image":"\u753b\u50cf\u306e\u5165\u308c\u66ff\u3048",map:"\u30a4\u30e1\u30fc\u30b8\u30de\u30c3\u30d7",id:"ID",rtl:"\u53f3\u304b\u3089\u5de6",ltr:"\u5de6\u304b\u3089\u53f3",classes:"\u30af\u30e9\u30b9",style:"\u30b9\u30bf\u30a4\u30eb","long_desc":"\u8a73\u7d30\u306a\u8aac\u660e\u306e\u30ea\u30f3\u30af",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9",langdir:"\u6587\u7ae0\u306e\u65b9\u5411","constrain_proportions":"\u7e26\u6a2a\u6bd4\u306e\u7dad\u6301",preview:"\u30d7\u30ec\u30d3\u30e5\u30fc",title:"\u30bf\u30a4\u30c8\u30eb",general:"\u4e00\u822c","tab_advanced":"\u9ad8\u5ea6\u306a\u8a2d\u5b9a","tab_appearance":"\u8868\u793a","tab_general":"\u4e00\u822c",width:"\u5e45",height:"\u9ad8\u3055"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ka_dlg.js
new file mode 100644
index 000000000..6ab7d35d3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.advimage_dlg',{"image_list":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0","align_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_textbottom":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_texttop":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_bottom":"\u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_middle":"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d6\u10d4","align_top":"\u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_baseline":"\u10e1\u10d0\u10d1\u10d0\u10d6\u10d8\u10e1\u10dd \u10ee\u10d0\u10d6\u10d6\u10d4",align:"\u10db\u10dd\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",hspace:"\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",vspace:"\u10d5\u10d4\u10e0\u10e2. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",dimensions:"\u10d6\u10dd\u10db\u10d4\u10d1\u10d8",border:"\u10e9\u10d0\u10e0\u10e9\u10dd",list:"\u10e1\u10d8\u10d0",alt:"\u10d0\u10e6\u10ec\u10d4\u10e0\u10d0",src:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8","dialog_title":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","missing_alt":"\u10d0\u10e0 \u10d2\u10e1\u10e3\u10e0\u10d7 \u10d0\u10e6\u10ec\u10d4\u10e0\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0? \u10d0\u10e6\u10ec\u10d4\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4 \u10e1\u10e3\u10e0\u10d0\u10d7\u10d8 \u10e8\u10d4\u10d8\u10eb\u10da\u10d4\u10d1\u10d0 \u10d6\u10dd\u10d2\u10d8 \u10db\u10dc\u10d0\u10ee\u10d5\u10d4\u10da\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1 \u10d8\u10e7\u10dd\u10e1 \u10db\u10d8\u10e3\u10ec\u10d5\u10d3\u10dd\u10db\u10d4\u10da\u10d8.","example_img":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",misc:"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",mouseout:"\u10e1\u10d8\u10db\u10e8\u10d5\u10d8\u10d3\u10d4\u10e8\u10d8",mouseover:"\u10d9\u10e3\u10e0\u10e1\u10dd\u10e0\u10d8\u10e1 \u10db\u10d8\u10e7\u10d5\u10d0\u10dc\u10d8\u10e1\u10d0\u10e1","alt_image":"\u10d0\u10da\u10e2\u10d4\u10e0\u10dc\u10d0\u10e2\u10d8\u10e3\u10da\u10d8 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d0","swap_image":"\u10d3\u10d8\u10dc\u10d0\u10db\u10d8\u10e3\u10e0\u10d8 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d0",map:"\u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10e0\u10e3\u10e5\u10d0",id:"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0",rtl:"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10e1\u10dc\u10d8\u10d5",ltr:"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",classes:"\u10d9\u10da\u10d0\u10e1\u10d4\u10d1\u10d8",style:"\u10e1\u10e2\u10d8\u10da\u10d8","long_desc":"\u10d1\u10db\u10e3\u10da\u10d8 \u10e1\u10e0\u10e3\u10da \u10d0\u10e6\u10ec\u10d4\u10e0\u10d0\u10d6\u10d4",langcode:"\u10d4\u10dc\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8",langdir:"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0","constrain_proportions":"\u10de\u10e0\u10dd\u10de\u10dd\u10e0\u10ea\u10d8\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0",preview:"\u10ec\u10d8\u10dc\u10d0\u10e1\u10ec\u10d0\u10e0 \u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10d4\u10e0\u10d4\u10d1\u10d0",title:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8",general:"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","tab_advanced":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7","tab_appearance":"\u10db\u10d3\u10d2\u10dd\u10db\u10d0\u10e0\u10d4\u10dd\u10d1\u10d0","tab_general":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/kl_dlg.js
new file mode 100644
index 000000000..54ec3c210
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/km_dlg.js
new file mode 100644
index 000000000..d27bf1787
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.advimage_dlg',{"image_list":"\u1794\u1789\u17d2\u1787\u17b8\u179a\u17bc\u1794\u1797\u17b6\u1796","align_right":"\u179f\u17d2\u178f\u17b6\u17c6","align_left":"\u1786\u17d2\u179c\u17c1\u1784","align_textbottom":"\u1780\u17d2\u179a\u17c4\u1798\u17a2\u178f\u17d2\u1790\u1794\u1791","align_texttop":"\u179b\u17be\u17a2\u178f\u17d2\u1790\u1794\u1791","align_bottom":"\u1780\u17d2\u179a\u17c4\u1798","align_middle":"\u1780\u178e\u17d2\u178f\u17b6\u179b","align_top":"\u179b\u17be","align_baseline":"\u1781\u17d2\u179f\u17c2\u1782\u17c4\u179b",align:"\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17b9\u1798",hspace:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1795\u17d2\u178f\u17c1\u1780",vspace:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1794\u1789\u17d2\u1788\u179a",dimensions:"\u179c\u17b7\u1798\u17b6\u178f\u17d2\u179a",border:"\u179f\u17ca\u17bb\u1798",list:"\u1794\u1789\u17d2\u1787\u17b8\u179a\u17bc\u1794\u1797\u17b6\u1796",alt:"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u179a\u17bc\u1794\u1797\u17b6\u1796",src:"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793URL\u179a\u17bc\u1794\u1797\u17b6\u1796","dialog_title":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u17bc\u1794\u1797\u17b6\u1796","missing_alt":"\u178f\u17be\u17a2\u17d2\u1793\u1780\u1796\u17b7\u178f\u1787\u17b6\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u179a\u178a\u17c4\u1799\u1798\u17b7\u1793\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1780\u17b6\u179a\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u179a\u17bc\u1794\u1797\u17b6\u1796\u17ac? \u1794\u17be\u1798\u17b7\u1793\u1798\u17b6\u1793\u17a2\u178f\u17d2\u1790\u1794\u1791\u1796\u178e\u17cc\u1793\u17b6\u1791\u17c1 \u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793\u178a\u17c2\u179b\u1787\u17b6\u1787\u1793\u17a2\u179f\u1798\u178f\u17d2\u178f\u1797\u17b6\u1796 \u17ac\u1780\u17cf\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u17a7\u1794\u1780\u179a\u178e\u17cd\u179a\u17bb\u1780\u179a\u1780\u178f\u17c2\u17a2\u178f\u17d2\u1790\u1794\u1791 \u1793\u17b7\u1784\u17a2\u17d2\u1793\u1780\u178a\u17c2\u179b\u179a\u1780\u1798\u17be\u179b\u179b\u17be\u1794\u178e\u17d2\u178f\u17b6\u1789\u178a\u17c4\u1799\u1794\u17b7\u1791\u179a\u17bc\u1794\u1797\u17b6\u1796 \u1793\u17b9\u1784\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1798\u17be\u179b\u1783\u17be\u1789\u179a\u17bc\u1794\u1797\u17b6\u1796\u1793\u17c1\u17c7\u1794\u17b6\u1793\u17a1\u17be\u1799\u17d4","example_img":"\u1798\u17be\u179b\u179a\u17bc\u1794\u179a\u17b6\u1784\u179a\u17bc\u1794\u1797\u17b6\u1796\u1787\u17b6\u1798\u17bb\u1793",misc:"\u1795\u17d2\u179f\u17c1\u1784\u17d7",mouseout:"\u1780\u178e\u17d2\u178f\u17bb\u179a\u1785\u17c1\u1789\u1780\u17d2\u179a\u17c5",mouseover:"\u1780\u178e\u17d2\u178f\u17bb\u179a\u178a\u17b6\u1780\u17cb\u179b\u17be","alt_image":"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1787\u17c6\u1793\u17bd\u179f","swap_image":"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1794\u17d2\u178a\u17bc\u179a",map:"\u1795\u17c2\u1793\u1791\u17b8\u179a\u17bc\u1794\u1797\u17b6\u1796",id:"\u179b.\u179f.",rtl:"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784",ltr:"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6",classes:"\u1790\u17d2\u1793\u17b6\u1780\u17cb",style:"\u179a\u1785\u1793\u17b6\u1794\u17d2\u1798\u17d0\u1791","long_desc":"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u1796\u17b7\u179f\u17d2\u178f\u17b6\u179a\u178f\u17c6\u178e",langcode:"\u1780\u17bc\u178a\u1797\u17b6\u179f\u17b6",langdir:"\u1791\u17b7\u179f\u1797\u17b6\u179f\u17b6","constrain_proportions":"\u1794\u1784\u17d2\u1781\u17c6\u17b2\u17d2\u1799\u1798\u17b6\u1793\u179f\u1798\u17b6\u1798\u17b6\u178f\u17d2\u179a",preview:"\u1798\u17be\u179b\u1787\u17b6\u1798\u17bb\u1793",title:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784",general:"\u1791\u17bc\u1791\u17c5","tab_advanced":"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","tab_appearance":"\u179a\u17bc\u1794\u179a\u17b6\u1784","tab_general":"\u1791\u17bc\u1791\u17c5",width:"\u1791\u1791\u17b9\u1784",height:"\u1780\u1798\u17d2\u1796\u179f\u17cb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ko_dlg.js
new file mode 100644
index 000000000..f2fcb3ba6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.advimage_dlg',{"image_list":"\uc774\ubbf8\uc9c0 \ubaa9\ub85d","align_right":"\uc624\ub978\ucabd","align_left":"\uc67c\ucabd","align_textbottom":"\ubb38\uc790 \ud558\ub2e8","align_texttop":"\ubb38\uc790 \uc0c1\ub2e8","align_bottom":"\ud558\ub2e8","align_middle":"\uc911\uc559","align_top":"\uc0c1\ub2e8","align_baseline":"\uae30\uc900\uc120",align:"\uc904\ub9de\ucda4",hspace:"\uc88c\uc6b0 \uc5ec\ubc31",vspace:"\uc0c1\ud558 \uc5ec\ubc31",dimensions:"\ud06c\uae30",border:"\ud14c\ub450\ub9ac \uc120",list:"\uc774\ubbf8\uc9c0 \ubaa9\ub85d",alt:"\uc774\ubbf8\uc9c0 \uc124\uba85",src:"\uc774\ubbf8\uc9c0 URL","dialog_title":"\uc774\ubbf8\uc9c0 \uc0bd\uc785/\ud3b8\uc9d1","missing_alt":"\uc774\ubbf8\uc9c0 \uc124\uba85\uc744 \ub123\uc9c0 \uc54a\uace0 \uc9c4\ud589\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? \uc774\ubbf8\uc9c0 \uc124\uba85\uc774 \uc5c6\uc73c\uba74 \uc7a5\uc560\uac00 \uc788\ub294 \uc77c\ubd80 \uc0ac\uc6a9\uc790\ub098 \ud14d\uc2a4\ud2b8 \ube0c\ub77c\uc6b0\uc800 \uc0ac\uc6a9\uc790, \uc774\ubbf8\uc9c0 \ud45c\uc2dc\ub97c \ub048 \uc0c1\ud0dc\uc5d0\uc11c \uc6f9\uc744 \ubcf4\ub294 \uc0ac\uc6a9\uc790\ub294 \uc774\ubbf8\uc9c0\ub97c \uc561\uc138\uc2a4\ud558\uc9c0 \ubabb\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","example_img":"\ubbf8\ub9ac \ubcf4\uae30 \uc774\ubbf8\uc9c0",misc:"\uae30\ud0c0",mouseout:"\ub9c8\uc6b0\uc2a4 \ube7c\ub0c8\uc744 \ub54c",mouseover:"\ub9c8\uc6b0\uc2a4 \uc62c\ub838\uc744 \ub54c","alt_image":"\ub300\uccb4 \uc774\ubbf8\uc9c0","swap_image":"\ub864 \uc624\ubc84 \ud6a8\uacfc",map:"\uc774\ubbf8\uc9c0 \ub9f5",id:"ID",rtl:"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c",ltr:"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c",classes:"\ud074\ub798\uc2a4",style:"\uc11c\uc2dd","long_desc":"\uae34 \uc124\uba85 \ub9c1\ud06c",langcode:"\uc5b8\uc5b4 \ucf54\ub4dc",langdir:"\ubb38\uc790 \ubc29\ud5a5","constrain_proportions":"\uc885\ud6a1\ube44 \ubcf4\uc874",preview:"\ubbf8\ub9ac \ubcf4\uae30",title:"\uc81c\ubaa9",general:"\uc77c\ubc18","tab_advanced":"\uc138\ubd80 \uc0ac\ud56d","tab_appearance":"\ud45c\uc2dc","tab_general":"\uc77c\ubc18",width:"\ud3ed",height:"\ub192\uc774"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/kz_dlg.js
new file mode 100644
index 000000000..e761aea98
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","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.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lb_dlg.js
new file mode 100644
index 000000000..01ce51f68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.advimage_dlg',{"image_list":"Billerl\u00ebscht","align_right":"Riets","align_left":"L\u00e9nks","align_textbottom":"\u00cbnnen am Text","align_texttop":"Uewen am Text","align_bottom":"\u00cbnnen","align_middle":"M\u00ebtteg","align_top":"Uewen","align_baseline":"Zeil",align:"Ausriichtung",hspace:"Horizontalen Ofstand",vspace:"Vertikalen Ofstand",dimensions:"Ausmoossen",border:"Rumm",list:"Billerl\u00ebschten",alt:"Beschreiwung",src:"Adress","dialog_title":"Bild af\u00fcgen/beaarbechten","missing_alt":"W\u00ebll Dir wierklech keng Beschreiwung aginn? Best\u00ebmmt Benotzer mat kierperlechen Aschr\u00e4nkungen k\u00ebnnen sou net dorop zougr\u00e4ifen, genau sou d\u00e9i, d\u00e9i een Textbrowser benotzen oder d\'Uweise vu Biller desaktiv\u00e9iert hunn.","example_img":"Ausgesinn vun der Virschau",misc:"Verschiddenes",mouseout:"bei kengem Mauskontakt",mouseover:"bei Mauskontakt","alt_image":"Alternativt Bild","swap_image":"Bild austauschen",map:"Image-Map",id:"ID",rtl:"Riets no l\u00e9nks",ltr:"L\u00e9nks no riets",classes:"Klassen",style:"Format","long_desc":"Ausf\u00e9ierlech Beschreiwung",langcode:"Sproochcode",langdir:"Schr\u00ebftrichtung","constrain_proportions":"S\u00e4iteverh\u00e4ltnis b\u00e4ibehalen",preview:"Virschau",title:"Titel",general:"Allgemeng","tab_advanced":"Erweidert","tab_appearance":"Ausgesinn","tab_general":"Allgemeng",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lt_dlg.js
new file mode 100644
index 000000000..8f85e7aa4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.advimage_dlg',{"image_list":"Paveiksl\u0117li\u0173 s\u0105ra\u0161as","align_right":"De\u0161in\u0117je","align_left":"Kair\u0117je","align_textbottom":"Teksto apa\u010dioje","align_texttop":"Teksto vir\u0161uje","align_bottom":"Apa\u010dioje","align_middle":"Viduryje","align_top":"Vir\u0161uje","align_baseline":"Pradiniame ta\u0161ke",align:"Lygiavimas",hspace:"Horizontalus tarpas",vspace:"Vertikalus tarpas",dimensions:"I\u0161matavimai",border:"R\u0117melis",list:"Paveiksl\u0117li\u0173 s\u0105ra\u0161as",alt:"Paveiksl\u0117lio apra\u0161as",src:"Paveiksl\u0117lio URL adresas","dialog_title":"\u012eterpti/redaguoti paveiksl\u0117l\u012f","missing_alt":"Ar norite t\u0119sti ne\u012fved\u0119 paveiksl\u0117lio apra\u0161o? Be apra\u0161o jo neatpa\u017eins \u017emon\u0117s su negalia, tie kurie naudoja tekstines nar\u0161ykles, arba tie, kurie nar\u0161o internet\u0105 i\u0161jung\u0119 paveiksl\u0117li\u0173 rodym\u0105.","example_img":"I\u0161vaizdos per\u017ei\u016bros paveiksl\u0117lis",misc:"\u012evair\u016bs",mouseout:"nuvedant pel\u0119",mouseover:"u\u017evedant pele","alt_image":"Alternatyvus paveiksl\u0117lis","swap_image":"Sukeisti paveiksl\u0117l\u012f",map:"Paveiksl\u0117lio planas",id:"Id",rtl:"I\u0161 de\u0161in\u0117s \u012f kair\u0119",ltr:"I\u0161 kair\u0117s \u012f de\u0161in\u0119",classes:"Klas\u0117s",style:"Stilius","long_desc":"Ilgo apra\u0161o nuoroda",langcode:"Kalbos kodas",langdir:"Kalbos teksto kryptis","constrain_proportions":"Priverstin\u0117s proporcijos",preview:"Per\u017ei\u016bra",title:"Pavadinimas",general:"Bendra","tab_advanced":"I\u0161pl\u0117sta","tab_appearance":"I\u0161vaizda","tab_general":"Bendra",width:"Plotis",height:"Auk\u0161tis"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lv_dlg.js
new file mode 100644
index 000000000..836aec61d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.advimage_dlg',{"image_list":"Att\u0113lu saraksts","align_right":"Pa labi","align_left":"Pa kreisi","align_textbottom":"Teksta apak\u0161a","align_texttop":"Teksta aug\u0161a","align_bottom":"Apak\u0161a","align_middle":"Vidus","align_top":"Aug\u0161a","align_baseline":"Pati apak\u0161a",align:"Novietojums",hspace:"Horizont\u0101l\u0101 atstarpe",vspace:"Vertik\u0101l\u0101 atstarpe",dimensions:"Izm\u0113ri",border:"Apmale",list:"Att\u0113lu saraksts",alt:"Att\u0113la apraksts",src:"Att\u0113la URL","dialog_title":"Ievietot/Redi\u0123\u0113t att\u0113lu","missing_alt":"Vai esat p\u0101rliecin\u0101ti, ka v\u0113laties turpin\u0101t, neiek\u013caujot bildes aprakstu? Bez apraksta bilde neb\u016bs saprotama lietot\u0101jiem ar nesp\u0113ju redz\u0113t, vai lietotajiem, kas lieto teksta p\u0101rl\u016bkus, vai izsl\u0113gu\u0161i bil\u017eu r\u0101d\u012b\u0161anu.","example_img":"Att\u0113la izskata priek\u0161skats",misc:"Da\u017e\u0101di",mouseout:"kad pele \u0101rpus",mouseover:"kad pele virs","alt_image":"Otra bilde","swap_image":"Main\u012bt bildi",map:"Att\u0113lkarte",id:"Id",rtl:"No lab\u0101s uz kreiso",ltr:"No kreis\u0101s uz labo",classes:"Klases",style:"Stils","long_desc":"Saite uz garo aprakstu",langcode:"Valodas kods",langdir:"Valodas virziens","constrain_proportions":"Saglab\u0101t proporcijas",preview:"Priek\u0161skats",title:"Nosaukums",general:"Iestat\u012bjumi","tab_advanced":"Papildiestat\u012bjumi","tab_appearance":"Izskats","tab_general":"Iestat\u012bjumi",width:"Platums",height:"Augstums"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/mk_dlg.js
new file mode 100644
index 000000000..c866cb42d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.advimage_dlg',{"image_list":"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u0441\u043b\u0438\u043a\u0438","align_right":"\u0414\u0435\u0441\u043d\u043e","align_left":"\u041b\u0435\u0432\u043e","align_textbottom":"\u041a\u0440\u0430\u0458 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442","align_texttop":"\u041f\u043e\u0447\u0435\u0442\u043e\u043a \u043d\u0430 \u0442\u0435\u043a\u0441\u0442","align_bottom":"\u041d\u0430\u0458\u0434\u043e\u043b\u0435","align_middle":"\u0421\u0440\u0435\u0434\u0438\u043d\u0430","align_top":"\u041d\u0430\u0458\u0433\u043e\u0440\u0435","align_baseline":"\u041e\u0441\u043d\u043e\u0432\u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430",align:"\u041f\u043e\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435",hspace:"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u043f\u0440\u0430\u0437\u043d\u043e \u043c\u0435\u0441\u0442\u043e",vspace:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u0440\u0430\u0437\u043d\u043e \u043c\u0435\u0441\u0442\u043e",dimensions:"\u0414\u0438\u043c\u0435\u043d\u0437\u0438\u0438",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430/\u0440\u0430\u0431\u043e\u0432\u0438",list:"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u0441\u043b\u0438\u043a\u0438",alt:"\u041e\u043f\u0438\u0441 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430",src:"\u0423\u0420\u041b \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430","dialog_title":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0441\u043b\u0438\u043a\u0430","missing_alt":"\u0414\u0430\u043b\u0438 \u0441\u0442\u0435 \u0441\u0438\u0433\u0443\u0440\u043d\u0438 \u0434\u0435\u043a\u0430 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435 \u0431\u0435\u0437 \u0432\u043a\u043b\u0443\u0447\u0435\u043d \u043e\u043f\u0438\u0441 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430 ? \u0411\u0435\u0437 \u043d\u0435\u0433\u043e, \u0441\u043b\u0438\u043a\u0430\u0442\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u043d\u0435 \u0431\u0438\u0434\u0435 \u0434\u043e\u0441\u0442\u0430\u043f\u043d\u0438 \u0437\u0430 \u043d\u0435\u043a\u043e\u0438 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438 \u0441\u043e \u043f\u043e\u0441\u0435\u0431\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438, \u0438\u043b\u0438 \u0437\u0430 \u043e\u043d\u0438\u0435 \u043a\u043e\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0430\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u0435\u043d \u043f\u0440\u0435\u043b\u0438\u0441\u0442\u0443\u0432\u0430\u0447, \u0438\u043b\u0438 \u043f\u0440\u0435\u043b\u0438\u0441\u0442\u0443\u0432\u0430\u0430\u0442 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0441\u043e \u0438\u0441\u043a\u043b\u0443\u0447\u0435\u043d\u0438 \u0441\u043b\u0438\u043a\u0438.","example_img":"\u041f\u0440\u0435\u0433\u043b\u0435\u0434 \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434\u043e\u0442 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430",misc:"\u0420\u0430\u0437\u043d\u043e",mouseout:"\u0417\u0430 \u0438\u0437\u043b\u0435\u0437 \u043d\u0430 \u0433\u043b\u0443\u0432\u0447\u0435\u0442\u043e \u043e\u0434 \u0441\u043b\u0438\u043a\u0430\u0442\u0430",mouseover:"\u0417\u0430 \u043f\u0440\u0435\u043c\u0438\u043d\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0433\u043b\u0443\u0432\u0447\u0435\u0442\u043e \u043f\u0440\u0435\u043a\u0443 \u0441\u043b\u0438\u043a\u0430\u0442\u0430","alt_image":"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430 \u0441\u043b\u0438\u043a\u0430","swap_image":"\u0417\u0430\u043c\u0435\u043d\u0438\u0458\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430",map:"\u041a\u0430\u0440\u0442\u0430 \u043d\u0430 \u0441\u043b\u0438\u043a\u0438\u0442\u0435",id:"\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0433\u0430\u0446\u0438\u0458\u0430 (Id)",rtl:"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e",ltr:"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e",classes:"\u041a\u043b\u0430\u0441\u0438",style:"\u0421\u0442\u0438\u043b","long_desc":"\u0414\u043e\u043b\u0433 \u043e\u043f\u0438\u0441 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0442",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442",langdir:"\u041d\u0430\u0441\u043e\u043a\u0430 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442","constrain_proportions":"\u0417\u0430\u0434\u0440\u0436\u0438 \u0433\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438\u0442\u0435",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434",title:"\u041d\u0430\u0441\u043b\u043e\u0432",general:"\u041e\u0441\u043d\u043e\u0432\u043d\u043e","tab_advanced":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e","tab_appearance":"\u0418\u0437\u0433\u043b\u0435\u0434","tab_general":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u0438\u043d\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ml_dlg.js
new file mode 100644
index 000000000..a44c7b767
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/mn_dlg.js
new file mode 100644
index 000000000..f2ce00f77
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.advimage_dlg',{"image_list":"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442","align_right":"\u0411\u0430\u0440\u0443\u0443\u043d","align_left":"\u0417\u04af\u04af\u043d","align_textbottom":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u0434\u043e\u043e\u0440","align_texttop":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u0434\u044d\u044d\u0440","align_bottom":"\u0414\u043e\u043e\u0440","align_middle":"\u0414\u0443\u043d\u0434","align_top":"\u0414\u044d\u044d\u0440","align_baseline":"\u041c\u04e9\u0440",align:"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",hspace:"\u0425\u044d\u0432\u0442\u044d\u044d \u0430\u043b\u0441\u043b\u0430\u043b\u0442",vspace:"\u0411\u043e\u0441\u043e\u043e \u0430\u043b\u0441\u043b\u0430\u043b\u0442",dimensions:"\u0425\u044d\u043c\u0436\u044d\u044d\u0441",border:"\u0425\u04af\u0440\u044d\u044d",list:"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442",alt:"\u0422\u0430\u0439\u043b\u0431\u0430\u0440",src:"\u0425\u0430\u044f\u0433","dialog_title":"\u0417\u0443\u0440\u0430\u0433 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0430\u0445","missing_alt":"\u0422\u0430 \u04af\u043d\u044d\u0445\u044d\u044d\u0440 \u0442\u0430\u0439\u043b\u0431\u0430\u0440 \u0445\u0438\u0439\u0445\u0433\u04af\u0439 \u0431\u0430\u0439\u0445\u044b\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443? \u0417\u0430\u0440\u0438\u043c \u0445\u04e9\u0433\u0436\u043b\u0438\u0439\u043d \u0431\u044d\u0440\u0445\u0448\u044d\u044d\u043b\u0442\u044d\u0439 \u044d\u0441\u0432\u044d\u043b \u0431\u0438\u0447\u0432\u044d\u0440 \u0445\u04e9\u0442\u04e9\u0447 \u0430\u0448\u0438\u0433\u043b\u0430\u0436 \u0431\u0443\u0439 \u044d\u0441\u0432\u044d\u043b \u0437\u0443\u0440\u0430\u0433 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0445\u0430\u0430\u0441\u0430\u043d \u0445\u044d\u0440\u044d\u0433\u043b\u044d\u0433\u0447\u0438\u0434 \u0445\u0430\u043d\u0434\u0430\u0445 \u0431\u043e\u043b\u043e\u043c\u0436\u0433\u04af\u0439\u0433 \u0430\u043d\u0445\u0430\u0430\u0440\u043d\u0430 \u0443\u0443.","example_img":"\u041d\u044f\u0433\u0442\u043b\u0430\u043d \u0445\u0430\u0440\u0430\u0445",misc:"\u042f\u043d\u0437 \u0431\u04af\u0440\u0438\u0439\u043d \u0437\u04af\u0439\u043b\u0441",mouseout:"\u0425\u0443\u043b\u0433\u0430\u043d\u0430 \u0433\u0430\u0440\u0430\u0445\u0430\u0434",mouseover:"\u0425\u0443\u043b\u0433\u0430\u043d\u0430 \u043e\u0440\u043e\u0445\u043e\u0434","alt_image":"\u0425\u043e\u0451\u0440\u0434\u043e\u0433\u0447 \u0437\u0443\u0440\u0430\u0433","swap_image":"\u0417\u0443\u0440\u0430\u0433 \u0441\u043e\u043b\u0438\u0445",map:"\u0411\u04af\u0441\u0447\u0438\u043b\u0441\u0430\u043d \u0437\u0443\u0440\u0430\u0433",id:"\u0422\u0422",rtl:"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d",ltr:"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d",classes:"\u0410\u043d\u0433\u0438",style:"\u0424\u043e\u0440\u043c\u0430\u0442","long_desc":"\u0414\u044d\u043b\u0433\u044d\u0440\u044d\u043d\u0433\u04af\u0439 \u0442\u0430\u0439\u043b\u0431\u0430\u0440",langcode:"\u0425\u044d\u043b\u043d\u0438\u0439 \u043a\u043e\u0434",langdir:"\u0411\u0438\u0447\u0433\u0438\u0439\u043d \u0447\u0438\u0433\u043b\u044d\u043b","constrain_proportions":"\u0425\u044d\u043c\u0436\u044d\u044d\u0441",preview:"\u041d\u044f\u0433\u0442\u043b\u0430\u043d \u0445\u0430\u0440\u0430\u0445",title:"\u0413\u0430\u0440\u0447\u0438\u0433",general:"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439","tab_advanced":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d","tab_appearance":"\u0425\u0430\u0440\u0430\u0433\u0434\u0430\u0446","tab_general":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ms_dlg.js
new file mode 100644
index 000000000..07e85382c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.advimage_dlg',{"image_list":"Senarai imej","align_right":"Kanan","align_left":"Kiri","align_textbottom":"Teks bawah","align_texttop":"Teks atas","align_bottom":"Bawah","align_middle":"Tengah","align_top":"Atas","align_baseline":"Garis pangkal",align:"Penyelarian",hspace:"Ruangan ufuk",vspace:"Ruangan tegak",dimensions:"Dimensi",border:"Sempadan",list:"Senarai imej",alt:"Huraian imej",src:"URL imej","dialog_title":"Sisip/sunting imej","missing_alt":"Adakah anda pasti untuk teruskan tanpa masukkan huraian imej? Tanpa huraian, imej mungkin tidak dapat difahami oleh orang yang kurang upaya, orang yang menggunakan pelayaran teks.","example_img":"Penglihatan pratonton imej",misc:"Pelbagai",mouseout:"untuk tetikus di luar",mouseover:"untuk tetikus di atas","alt_image":"Imej alternatif","swap_image":"Tukar imej",map:"Imej map",id:"Id",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",classes:"Kelas-kelas",style:"Gaya","long_desc":"Pautan huraian panjang",langcode:"Kod bahasa",langdir:"Arah bahasa","constrain_proportions":"Kadar tahanan",preview:"Pratonton",title:"Tajuk",general:"Am","tab_advanced":"Lanjutan","tab_appearance":"Penglihatan","tab_general":"Am",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/my_dlg.js
new file mode 100644
index 000000000..6224e993d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.advimage_dlg',{"image_list":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1005\u102c\u101b\u1004\u103a\u1038","align_right":"\u100a\u102c","align_left":"\u1018\u101a\u103a","align_textbottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u1010\u103d\u1004\u103a \u1005\u102c\u101e\u102c\u1038","align_texttop":"\u1011\u102d\u1015\u103a\u1010\u103d\u1004\u103a \u1005\u102c\u101e\u102c\u1038","align_bottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001","align_middle":"\u1021\u101c\u101a\u103a","align_top":"\u1011\u102d\u1015\u103a","align_baseline":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u1019\u103b\u1009\u103a\u1038",align:"\u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f",hspace:"\u1021\u101c\u103b\u103e\u102c\u1038\u101c\u102d\u102f\u1000\u103a \u1000\u103d\u1000\u103a\u101c\u1015\u103a",vspace:"\u1031\u1012\u102b\u1004\u103a\u101c\u102d\u102f\u1000\u103a \u1000\u103d\u1000\u103a\u101c\u1015\u103a",dimensions:"\u1021\u1010\u102d\u102f\u1004\u103a\u1038\u1021\u1011\u103d\u102c\u1019\u103b\u102c\u1038",border:"\u1014\u101a\u103a\u1005\u100a\u103a\u1038",list:"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1005\u102c\u101b\u1004\u103a\u1038",alt:"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1005\u102c\u100a\u103d\u103e\u1014\u103a\u1038",src:"\u101b\u102f\u1015\u103a\u1015\u1036\u102f URL","dialog_title":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","missing_alt":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f\u1005\u102c\u100a\u103d\u103e\u1014\u103a\u1038\u1019\u1015\u102b\u1018\u1032 \u1006\u1000\u103a\u101c\u1000\u103a\u101c\u102f\u1015\u103a\u1031\u1006\u102c\u1004\u103a\u101c\u102d\u102f\u1010\u102c \u1031\u101e\u1001\u103b\u102c\u101b\u1032\u1037\u101c\u102c\u1038? \u1011\u102d\u102f\u101e\u102d\u102f\u1037 \u1031\u1016\u102c\u103a\u103c\u1015\u1001\u103b\u1000\u103a \u1005\u102c\u100a\u103d\u103e\u1014\u103a\u1038 \u1019\u1015\u102b\u101c\u103b\u103e\u1004\u103a \u101b\u102f\u1015\u103a\u1015\u1036\u102f\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1015\u102d\u1010\u103a\u1011\u102c\u1038\u103c\u1015\u102e\u1038 Web \u1000\u102d\u102f\u103c\u1000\u100a\u103a\u1037\u101b\u103e\u102f\u1031\u1014\u1031\u101e\u102c (\u101e\u102d\u102f\u1037) \u1005\u102c\u101e\u102c\u1038 \u1018\u1031\u101b\u102c\u1000\u103a\u1007\u102c\u1000\u102d\u102f \u1021\u101e\u1036\u102f\u1038\u103c\u1015\u102f\u1031\u1014\u1031\u101e\u102c (\u101e\u102d\u102f\u1037) \u1000\u102d\u102f\u101a\u103a\u1001\u1014\u1039\u1013\u102c\u1019\u101e\u1014\u103a\u1005\u103d\u1019\u103a\u1038\u1031\u101e\u102c \u1021\u1001\u103b\u102d\u102f\u1037\u101e\u1036\u102f\u1038\u101e\u1030\u1019\u103b\u102c\u1038 \u1011\u102d\u102f\u101b\u102f\u1015\u103a\u1015\u1036\u102f\u1000\u102d\u102f \u101b\u101a\u1030\u101e\u1036\u102f\u1038\u1005\u103d\u1032\u1014\u102d\u102f\u1004\u103a\u1019\u100a\u103a \u1019\u101f\u102f\u1010\u103a\u1015\u102b\u104b","example_img":"\u1021\u1005\u1019\u103a\u1038\u103c\u1000\u100a\u103a\u1037 \u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1021\u101e\u103d\u1004\u103a\u1021\u103c\u1015\u1004\u103a",misc:"\u1031\u101e\u102c\u1004\u103a\u1038\u1031\u103c\u1015\u102c\u1004\u103a\u1038\u1031\u1011\u103d\u101c\u102c",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"\u1021\u1011\u1030\u1038\u103c\u1015\u102f \u101b\u102f\u1015\u103a\u1015\u1036\u102f","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"\u100a\u102c\u1019\u103e \u1018\u101a\u103a",ltr:"\u1018\u101a\u103a\u1019\u103e \u100a\u102c",classes:"Class \u1019\u103b\u102c\u1038",style:"\u1005\u1010\u102d\u102f\u1004\u103a","long_desc":"\u101b\u103e\u100a\u103a\u101c\u103b\u102c\u1038\u1031\u101e\u102c \u1031\u1016\u102c\u103a\u103c\u1015\u1001\u103b\u1000\u103a \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c",langcode:"\u1018\u102c\u101e\u102c\u1005\u1000\u102c\u1038 \u1000\u102f\u1010\u103a",langdir:"\u1005\u102c\u1031\u101b\u1038\u101e\u102c\u1038\u1019\u103e\u102f \u1025\u102e\u1038\u1010\u100a\u103a\u1001\u103b\u1000\u103a","constrain_proportions":"\u1021\u1001\u103b\u102d\u102f\u1038\u1021\u1005\u102c\u1038 \u1011\u102d\u1014\u103a\u1038\u100a\u102d\u103e",preview:"\u1021\u1005\u1019\u103a\u1038\u103c\u1000\u100a\u103a\u1037",title:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u102e\u1038\u1021\u1019\u100a\u103a",general:"\u1021\u1031\u1011\u103d\u1031\u1011\u103d","tab_advanced":"\u1021\u1011\u1030\u1038","tab_appearance":"\u1021\u101e\u103d\u1004\u103a\u1021\u103c\u1015\u1004\u103a","tab_general":"\u1021\u1031\u1011\u103d\u1031\u1011\u103d",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nb_dlg.js
new file mode 100644
index 000000000..c8f843797
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.advimage_dlg',{"image_list":"Bildeliste","align_right":"H\u00f8yre","align_left":"Venstre","align_textbottom":"Tekst bunn","align_texttop":"Tekst topp","align_bottom":"Bunn","align_middle":"Midtstilt","align_top":"Topp","align_baseline":"Grunnlinje",align:"Justering",hspace:"Horisontal avstand",vspace:"Vertikal avstand",dimensions:"Dimensjoner",border:"Ramme",list:"Bildeliste",alt:"Bildebeskrivelse",src:"Bildets URL","dialog_title":"Sett inn / endre bilde","missing_alt":"Er du sikker p\u00e5 at du vil fortsette uten \u00e5 sette inn en beskrivelse av bildet? Uten beskrivelse vil bildet ikke gi mening for enkelte funksjonshemmede eller for personer som bruker en nettleser med bildevisning avsl\u00e5tt.","example_img":"Utseende Forh\u00e5ndsvisning bilde",misc:"Annet",mouseout:"for musepeker utenfor",mouseover:"for musepeker p\u00e5","alt_image":"Alternativt bilde","swap_image":"Bytt bilde",map:"Bildekart",id:"Id",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",classes:"Klasser",style:"Stil","long_desc":"Lang beskrivelse",langcode:"Spr\u00e5kkode",langdir:"Skriftretning","constrain_proportions":"Behold st\u00f8rrelsesforhold",preview:"Forh\u00e5ndsvisning",title:"Tittel",general:"Generelt","tab_advanced":"Avansert","tab_appearance":"Utseende","tab_general":"Generelt",width:"Bredde",height:"H\u00f8yde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nl_dlg.js
new file mode 100644
index 000000000..ea7272812
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.advimage_dlg',{"image_list":"Lijst","align_right":"Rechts","align_left":"Links","align_textbottom":"Onderkant tekst","align_texttop":"Bovenkant tekst","align_bottom":"Onder","align_middle":"Midden","align_top":"Boven","align_baseline":"Basislijn",align:"Uitlijning",hspace:"Horizontale ruimte",vspace:"Verticale ruimte",dimensions:"Afmetingen",border:"Rand",list:"Lijst",alt:"Beschrijving",src:"Bestand/URL","dialog_title":"Afbeelding invoegen/bewerken","missing_alt":"Wilt u de afbeelding zonder beschrijving invoegen? De afbeelding wordt dan mogelijk niet opgemerkt door mensen met een visuele handicap, of mensen die zonder afbeeldingen browsen.","example_img":"Voorbeeldweergave",misc:"Diversen",mouseout:"Bij muis uit",mouseover:"Bij muis over","alt_image":"Alternatieve afbeeldingen","swap_image":"Afbeelding wisselen",map:"Afbeeldingsplattegrond",id:"Id",rtl:"Van rechts naar links",ltr:"Van links naar rechts",classes:"Klasses",style:"Stijl","long_desc":"Uitgebreide beschrijving",langcode:"Taalcode",langdir:"Taalrichting","constrain_proportions":"Verhouding behouden",preview:"Voorbeeld",title:"Titel",general:"Algemeen","tab_advanced":"Geavanceerd","tab_appearance":"Weergave","tab_general":"Algemeen",width:"Breedte",height:"Hoogte"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nn_dlg.js
new file mode 100644
index 000000000..2c0b2caad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.advimage_dlg',{"image_list":"Liste med bilete","align_right":"H\u00f8gre","align_left":"Venstre","align_textbottom":"Tekst botn","align_texttop":"Tekst topp","align_bottom":"Botn","align_middle":"Midtstilt","align_top":"Topp","align_baseline":"Basislinje",align:"Justering",hspace:"Horisontal avstand",vspace:"Vertikal avstand",dimensions:"Dimensjonar",border:"Ramme",list:"Bileteliste",alt:"Bileteomtale",src:"Bilete-URL","dialog_title":"Set inn / endre bilete","missing_alt":"Er du sikker p\u00e5 at du vil fortsetje utan \u00e5 setje inn ei omtale av biletet? Utan omtale vil biletet ikkje gje meining for enkelte funksjonshemma eller for personar som bruker ein nettlesar med biletvisinga avsl\u00e5tt.","example_img":"Sj\u00e5 f\u00f8rebels utkast av bilete",misc:"Anna",mouseout:"for musepeikar utanfor",mouseover:"for musepeikar over","alt_image":"Alternativt bilete","swap_image":"Byt bilete",map:"Biletekart",id:"Id",rtl:"H\u00f8gre mot venstre",ltr:"Venstre mot h\u00f8gre",classes:"Klasser",style:"Stil","long_desc":"Lang omtale",langcode:"Spr\u00e5kkode",langdir:"Skriftretning","constrain_proportions":"Behald proporsjonar",preview:"Sj\u00e5 f\u00f8rebels utkast",title:"Tittel",general:"Generelt","tab_advanced":"Avansert","tab_appearance":"Utsj\u00e5nad","tab_general":"Generelt",width:"Breidde",height:"H\u00f8gde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/no_dlg.js
new file mode 100644
index 000000000..b8227b44b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.advimage_dlg',{"image_list":"Liste over bilder","align_right":"H\u00f8yre","align_left":"Venstre","align_textbottom":"Tekst bunn","align_texttop":"Tekst topp","align_bottom":"Bunn","align_middle":"Midtstilt","align_top":"Topp","align_baseline":"Basislinje",align:"Justering",hspace:"Horisontal avstand",vspace:"Vertikal avstand",dimensions:"Dimensjoner",border:"Ramme",list:"Bildeliste",alt:"Bildebeskrivelse",src:"Bilde URL","dialog_title":"Sett inn/editer bilde","missing_alt":"Er du sikker du vil fortsette uten \u00e5 sette inn bildebeskrivelse? Uten beskrivelse vil ikke bildet gi mening for enkelte funksjonshemmde eller personer som bruker nettleser med avsl\u00e5tt bildevising.","example_img":"Utseende forh\u00e5ndsvisning",misc:"Diverse",mouseout:"for musepeker utenfor",mouseover:"for musepeker over","alt_image":"Alternativt bilde","swap_image":"Bytt bilde",map:"Bildekart",id:"Id",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",classes:"Klasse",style:"Stil","long_desc":"Lang beskrivelse",langcode:"Spr\u00e5k kode",langdir:"Skriftretning","constrain_proportions":"Behold proporsjoner",preview:"Forh\u00e5ndsvisning",title:"Tittel",general:"Generelt","tab_advanced":"Avansert","tab_appearance":"Utseende","tab_general":"Generelt",width:"Bredde",height:"H\u00f8yde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/pl_dlg.js
new file mode 100644
index 000000000..c32f718ac
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.advimage_dlg',{"image_list":"Lista obrazk\u00f3w","align_right":"Prawy","align_left":"Lewy","align_textbottom":"Tekst dolny","align_texttop":"Tekst g\u00f3rny","align_bottom":"Dolny","align_middle":"\u015arodkowy","align_top":"G\u00f3rny","align_baseline":"G\u0142\u00f3wna linia",align:"Wyr\u00f3wnanie",hspace:"Odst\u0119p poziomy",vspace:"Odst\u0119p pionowy",dimensions:"Rozmiary",border:"Obramowanie",list:"Lista obrazk\u00f3w",alt:"Opis obrazka",src:"URL obrazka","dialog_title":"Wklej/edytuj obraz","missing_alt":"Czy jeste\u015b pewien, \u017ce chcesz kontynuowa\u0107 bez opisu obrazka? Obrazek bez opisu mo\u017ce nie by\u0107 dost\u0119pny dla u\u017cytkownik\u00f3w u\u017cywaj\u0105cych tekstowe przegl\u0105darki lub przegl\u0105daj\u0105cych stron\u0119 z wy\u0142\u0105czonymi obrazkami.","example_img":"Podgl\u0105d wygl\u0105du obrazka",misc:"R\u00f3\u017cne",mouseout:"dla mouseout",mouseover:"dla mouseover","alt_image":"alternatywny obrazek","swap_image":"Zamiana obrazka",map:"Mapa obrazu",id:"Id",rtl:"Z prawej do lewej",ltr:"Z lewej do prawej",classes:"Klasy",style:"Styl","long_desc":"D\u0142ugi opis linku",langcode:"Kod j\u0119zyka",langdir:"Kierunek j\u0119zyka","constrain_proportions":"Zachowaj proporcje",preview:"Podgl\u0105d",title:"Tytu\u0142",general:"Og\u00f3lne","tab_advanced":"Zaawansowane","tab_appearance":"Wygl\u0105d","tab_general":"Og\u00f3lne",width:"Szeroko\u015b\u0107",height:"Wysoko\u015b\u0107"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ps_dlg.js
new file mode 100644
index 000000000..58852bc19
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/pt_dlg.js
new file mode 100644
index 000000000..513319ffc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.advimage_dlg',{"image_list":"Lista de imagens","align_right":"Direita","align_left":"Esquerda","align_textbottom":"Base do texto","align_texttop":"Topo do texto","align_bottom":"Abaixo","align_middle":"Meio","align_top":"Topo","align_baseline":"Sobre a linha de texto",align:"Alinhamento",hspace:"Espa\u00e7o horizontal",vspace:"Espa\u00e7o vertical",dimensions:"Dimens\u00f5es",border:"Limite",list:"Lista de imagens",alt:"Descri\u00e7\u00e3o da imagem",src:"Endere\u00e7o da imagem","dialog_title":"Inserir/editar imagem","missing_alt":"Tem certeza que deseja continuar sem acrescentar uma descri\u00e7\u00e3o \u00e0 imagem? (Isto pode gerar problemas de acessibilidade em alguns navegadores)","example_img":"Pr\u00e9-Visualiza\u00e7\u00e3o",misc:"Misto",mouseout:"mouseout",mouseover:"mouseover","alt_image":"Imagem alternativa","swap_image":"Trocar imagem",map:"Mapa de imagem",id:"Id",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",classes:"Classes",style:"Estilo","long_desc":"Descri\u00e7\u00e3o extensa",langcode:"C\u00f3digo do idioma",langdir:"Dire\u00e7\u00e3o do texto","constrain_proportions":"Manter propor\u00e7\u00f5es",preview:"Pr\u00e9-Visualiza\u00e7\u00e3o",title:"T\u00edtulo",general:"Geral","tab_advanced":"Avan\u00e7ado","tab_appearance":"Apar\u00eancia","tab_general":"Geral",width:"Largura",height:"Altura"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ro_dlg.js
new file mode 100644
index 000000000..d8d4ef956
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.advimage_dlg',{"image_list":"List\u0103 de imagini","align_right":"Dreapta","align_left":"St\u00e2nga","align_textbottom":"Textul jos","align_texttop":"Textul sus","align_bottom":"Jos","align_middle":"La mijloc","align_top":"Sus","align_baseline":"Baseline",align:"Aliniere",hspace:"Spa\u021biu orizontal",vspace:"Spa\u021biu vertical",dimensions:"Dimensiuni",border:"Bordur\u0103",list:"List\u0103 imagini",alt:"Descriere imagine",src:"URL imagine","dialog_title":"Inserare/editare imagine","missing_alt":"Sigur vrei s\u0103 continui f\u0103r\u0103 s\u0103 introduci o descriere a imaginii? F\u0103r\u0103 aceasta, imaginea ar putea fi inaccesibil\u0103 anumitor utilizatori cu dizabilit\u0103\u021bi sau acelora care folosesc un navigator text sau cu imaginile dezactivate.","example_img":"Imagine mic\u0103",misc:"Diverse",mouseout:"Pentru maus \u00een afar\u0103",mouseover:"Pentru maus deasupra","alt_image":"Imagine alternativ\u0103","swap_image":"Schimb\u0103 imaginea",map:"Hart\u0103 imagine",id:"Id",rtl:"De la dreapta la st\u00e2nga",ltr:"De la st\u00e2nga la dreapta",classes:"Clase",style:"Stil","long_desc":"Descriere leg\u0103tur\u0103",langcode:"Cod limb\u0103",langdir:"Direc\u021bie limb\u0103","constrain_proportions":"Men\u021bine propor\u021biile",preview:"Previzualizare",title:"Titlu",general:"General","tab_advanced":"Avansat","tab_appearance":"Afi\u0219are","tab_general":"General",width:"L\u0103\u021bime",height:"\u00cen\u0103l\u021bime"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ru_dlg.js
new file mode 100644
index 000000000..3e341d1f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.advimage_dlg',{"image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043b\u0438\u043d\u0438\u0438",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",hspace:"\u0413\u043e\u0440\u0438\u0437. \u043e\u0442\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442. \u043e\u0442\u0441\u0442\u0443\u043f",dimensions:"\u0420\u0430\u0437\u043c\u0435\u0440",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430",list:"\u0421\u043f\u0438\u0441\u043e\u043a",alt:"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",src:"\u0410\u0434\u0440\u0435\u0441","dialog_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","missing_alt":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0431\u0435\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f? \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438\u043b\u0438 \u0442\u0435\u043c, \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0438\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u0439\u0442\u044b \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438.","example_img":"\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",misc:"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",mouseout:"\u0412 \u043f\u043e\u043a\u043e\u0435",mouseover:"\u041f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438","alt_image":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","swap_image":"\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",map:"\u041a\u0430\u0440\u0442\u0430 \u0441\u0441\u044b\u043b\u043e\u043a",id:"\u0418\u043c\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",classes:"\u041a\u043b\u0430\u0441\u0441\u044b",style:"\u0421\u0442\u0438\u043b\u044c","long_desc":"\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430","constrain_proportions":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",preview:"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440",title:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",general:"\u041e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","tab_advanced":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","tab_appearance":"\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435","tab_general":"\u041e\u0431\u0449\u0435\u0435",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u044b\u0441\u043e\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sc_dlg.js
new file mode 100644
index 000000000..eefb93fcc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.advimage_dlg',{"image_list":"\u56fe\u7247\u5217\u8868","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u4e0b\u65b9","align_middle":"\u5c45\u4e2d","align_top":"\u4e0a\u65b9","align_baseline":"\u57fa\u7ebf",align:"\u5bf9\u9f50\u65b9\u5f0f",hspace:"\u5782\u76f4\u95f4\u8ddd",vspace:"\u6c34\u51c6\u95f4\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u5217\u8868",alt:"\u56fe\u7247\u8bf4\u660e",src:"\u56fe\u7247\u7f51\u5740","dialog_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","missing_alt":"\u8bf7\u95ee\u662f\u5426\u786e\u5b9a\u4e0d\u4e3a\u56fe\u7247\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff1f\u82e5\u6ca1\u6709\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff0c\u5f53\u7528\u6237\u4f7f\u7528\u4e0d\u8bfb\u5165\u56fe\u7247\u6216\u6587\u5b57\u4f53\u7684\u6d41\u89c8\u5668\u65f6\uff0c\u5c06\u4f1a\u770b\u4e0d\u5230\u8fd9\u4e2a\u56fe\u7247\u3002 ","example_img":"\u9884\u89c8\u56fe\u7247",misc:"\u5176\u4ed6",mouseout:"\u6ed1\u9f20\u79fb\u51fa\u56fe\u7247",mouseover:"\u6ed1\u9f20\u79fb\u5165\u56fe\u7247","alt_image":"\u66ff\u6362\u56fe\u7247","swap_image":"\u5bf9\u6362\u56fe\u7247",map:"\u56fe\u7247\u5730\u56fe",id:"Id",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",classes:"\u7c7b\u578b",style:"\u6837\u5f0f","long_desc":"\u957f\u63cf\u8ff0\u8fde\u7ed3",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u67e5\u627e",general:"\u4e00\u822c","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u4e00\u822c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/se_dlg.js
new file mode 100644
index 000000000..2fa54bda7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.advimage_dlg',{"image_list":"Bildlista","align_right":"V\u00e4nster","align_left":"H\u00f6ger","align_textbottom":"Botten av texten","align_texttop":"Toppen av texten","align_bottom":"Botten","align_middle":"Mitten","align_top":"Toppen","align_baseline":"Baslinje",align:"Justering",hspace:"Horisontalrymd",vspace:"Vertikalrymd",dimensions:"Dimensioner",border:"Ram",list:"Bildlista",alt:"Bildens beskrivning",src:"Bildens URL","dialog_title":"Infoga/redigera bild","missing_alt":"Vill du forts\u00e4tta utan bildbeskrivning. Icke grafiska webbl\u00e4sare kommer inte kunna tolka bilden f\u00f6r anv\u00e4ndaren.","example_img":"Exempelbild",misc:"\u00d6vrigt",mouseout:"vid musen utanf\u00f6r",mouseover:"vid musen ovanf\u00f6r","alt_image":"Alternativbild","swap_image":"Utbytningsbild",map:"L\u00e4nkkarta",id:"Id",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",classes:"Klasser",style:"Stil","long_desc":"L\u00e5ng beskrivning",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning","constrain_proportions":"Bibeh\u00e5ll proportionerna",preview:"F\u00f6rhandsvisning",title:"Titel",general:"Generellt","tab_advanced":"Avancerat","tab_appearance":"Utseende","tab_general":"Generellt",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/si_dlg.js
new file mode 100644
index 000000000..7eac6ba49
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sk_dlg.js
new file mode 100644
index 000000000..2be48c336
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.advimage_dlg',{"image_list":"Zoznam obr\u00e1zkov","align_right":"Vpravo","align_left":"V\u013eavo","align_textbottom":"So spodkom riadku","align_texttop":"S vrcholom riadku","align_bottom":"Dole","align_middle":"Na stred riadku","align_top":"Hore","align_baseline":"Na z\u00e1klad\u0148u",align:"Zarovnanie",hspace:"Horizont\u00e1lne odsadenie",vspace:"Vertik\u00e1lne odsadenie",dimensions:"Rozmery",border:"Or\u00e1movanie",list:"Zoznam obr\u00e1zkov",alt:"Popis obr\u00e1zku",src:"URL obr\u00e1zka","dialog_title":"Vlo\u017ei\u0165/upravi\u0165 obr\u00e1zok","missing_alt":"Naozaj chcete pokra\u010dova\u0165 bez vlo\u017een\u00e9ho popisu obr\u00e1zka? Bez popisu m\u00f4\u017ee by\u0165 obr\u00e1zok nepr\u00edstupn\u00fd u\u017e\u00edvate\u013eom so zrakov\u00fdm postihnut\u00edm, u\u017e\u00edvate\u013eom textov\u00fdch prehliada\u010dov alebo u\u017e\u00edvate\u013eom, ktor\u00ed maj\u00fa vypnut\u00e9 zobrazovanie obr\u00e1zkov.","example_img":"Pr\u00edklad obr\u00e1zka",misc:"R\u00f4zne",mouseout:"Po odjazden\u00ed my\u0161i",mouseover:"Pri nabehnut\u00ed my\u0161i","alt_image":"Alternat\u00edvny obr\u00e1zok","swap_image":"Prepnutie obr\u00e1zka",map:"Obr\u00e1zkov\u00e1 mapa",id:"ID",rtl:"Sprava do\u013eava",ltr:"Z\u013eava doprava",classes:"Triedy",style:"\u0160t\u00fdl","long_desc":"Dlh\u00fd popis",langcode:"K\u00f3d jazyka",langdir:"Smer textu","constrain_proportions":"Zachova\u0165 pomer str\u00e1n",preview:"N\u00e1h\u013ead",title:"Titulok",general:"Obecn\u00e9 parametre","tab_advanced":"Roz\u0161\u00edren\u00e9","tab_appearance":"Vzh\u013ead","tab_general":"Obecn\u00e9",width:"\u0160\u00edrka",height:"V\u00fd\u0161ka"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sl_dlg.js
new file mode 100644
index 000000000..b2e990d11
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.advimage_dlg',{"image_list":"Seznam slik","align_right":"desno, plavajo\u010de","align_left":"levo, plavajo\u010de","align_textbottom":"dno besedila","align_texttop":"vrh besedila","align_bottom":"dno","align_middle":"sredina","align_top":"vrh","align_baseline":"osnovna \u010drta",align:"Poravnava",hspace:"Prostor le/de",vspace:"Prostor zg/sp",dimensions:"Dimenzije",border:"Obroba",list:"Seznam slik",alt:"Opis slike",src:"Naslov URL slike","dialog_title":"Vstavi/uredi sliko","missing_alt":"Zares \u017eelite nadaljevati, brez da bi dolo\u010dili opis slike? Brez njega slika nekaterim uporabnikom ne bo na voljo (izklopljen prikaz slik, tekstni brskalnik ali ljudje s slab\u0161im vidom).","example_img":"Predogled izgleda",misc:"Razno",mouseout:"pri mi\u0161ki izven",mouseover:"pri mi\u0161ki nad","alt_image":"Nadomestna slika","swap_image":"Zamenjava slike",map:"Karta slike",id:"Id",rtl:"Od desne proti levi",ltr:"Od leve proti desni",classes:"Razredi",style:"Slog","long_desc":"Povezava do opisa",langcode:"Koda jezika",langdir:"Smer jezika","constrain_proportions":"Zakleni razmerje",preview:"Predogled",title:"Naslov",general:"Splo\u0161no","tab_advanced":"Napredno","tab_appearance":"Izgled","tab_general":"Splo\u0161no",width:"\u0160irina",height:"Vi\u0161ina"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sq_dlg.js
new file mode 100644
index 000000000..780605269
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.advimage_dlg',{"image_list":"Lista e fotove","align_right":"Djathtas","align_left":"Majtas","align_textbottom":"Posht\u00eb tekstit","align_texttop":"Sip\u00ebr tekstit","align_bottom":"Fund","align_middle":"Mes","align_top":"Krye","align_baseline":"Vij\u00eb fundore",align:"Drejtimi",hspace:"Hap\u00ebsira horizontale",vspace:"Hap\u00ebsira vertikale",dimensions:"P\u00ebrmasat",border:"Korniza",list:"Lista e fotove",alt:"P\u00ebrshkrimi i fotos",src:"URL e fotos","dialog_title":"Fut/edito foto","missing_alt":"Jeni t\u00eb sigurt q\u00eb doni t\u00eb vazhdoni pa p\u00ebrfshir\u00eb nj\u00eb p\u00ebrshkrim alternativ? Pa t\u00eb, foto mund t\u00eb jet\u00eb e pa aksesueshme nga njer\u00ebz me shikim t\u00eb kufizuar, q\u00eb p\u00ebrdorin shfletues q\u00eb nuk i shfaqin fotot apo i kan\u00eb \u00e7aktivizuar ato.","example_img":"Paraqitje e fotos",misc:"T\u00eb Ndryshme",mouseout:"n\u00eb mouse-in jasht\u00eb",mouseover:"n\u00eb mouse-in sip\u00ebr","alt_image":"P\u00ebrshkrimi alternativ","swap_image":"Nd\u00ebrro foto",map:"Harta e fotos",id:"Id",rtl:"Djathtas-Majtas",ltr:"Majtas-Djathtas",classes:"Klasat",style:"Stili","long_desc":"Lidhja e p\u00ebrshkrimit t\u00eb gjat\u00eb",langcode:"Kodi i gjuh\u00ebs",langdir:"Drejtimi i gjuh\u00ebs","constrain_proportions":"Ruaj raportet",preview:"Paraqitje",title:"Titulli",general:"T\u00eb P\u00ebrgjithshme","tab_advanced":"T\u00eb Avancuara","tab_appearance":"Pamja","tab_general":"T\u00eb P\u00ebrgjithshme",width:"Gjer\u00ebsia",height:"Gjat\u00ebsia"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sr_dlg.js
new file mode 100644
index 000000000..49c197aba
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.advimage_dlg',{"image_list":"Slika (sa liste)","align_right":"Desno","align_left":"Levo","align_textbottom":"Dno teksta","align_texttop":"Vrh teksta","align_bottom":"Dole","align_middle":"Sredina","align_top":"Gore","align_baseline":"Osnovna linija",align:"Poravnavanje",hspace:"Horizontalni razmak",vspace:"Vertikalni razmak",dimensions:"Dimenzije",border:"Ivice",list:"Slika (sa liste)",alt:"Opis slike",src:"URL slike","dialog_title":"Umetni/Uredi sliku","missing_alt":"Da li ste sigurni da \u017eelite da izostavite opis slike? Slika mo\u017ee biti nedostupna ljudima sa pote\u0161ko\u0107ama ili onima koji koriste web \u010dita\u010de bez prikaza slika.","example_img":"Izgled preliminarnog prikaza slike",misc:"Razno",mouseout:"Za odlazak mi\u0161a sa slike",mouseover:"Za dolazak mi\u0161a na sliku","alt_image":"Alternativna slika","swap_image":"Interaktivna slika",map:"Mapa slike",id:"Id",rtl:"Zdesna nalevo",ltr:"Sleva nadesno",classes:"Klase",style:"Stil","long_desc":"Link ka du\u017eem opisu",langcode:"Kod jezika",langdir:"Smer jezika","constrain_proportions":"Zadr\u017ei proporcije",preview:"Preliminarni prikaz",title:"Naslov",general:"Osnovno","tab_advanced":"Napredno","tab_appearance":"Izgled","tab_general":"Osnovno",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sv_dlg.js
new file mode 100644
index 000000000..af1e61c55
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.advimage_dlg',{"image_list":"Bildlista","align_right":"H\u00f6ger","align_left":"V\u00e4nster","align_textbottom":"Botten av texten","align_texttop":"Toppen av texten","align_bottom":"Botten","align_middle":"Mitten","align_top":"Toppen","align_baseline":"Baslinje",align:"Justering",hspace:"Horisontalrymd",vspace:"Vertikalrymd",dimensions:"Dimensioner",border:"Ram",list:"Bildlista",alt:"Bildens beskrivning",src:"Bildens URL","dialog_title":"Infoga/redigera bild","missing_alt":"Vill du forts\u00e4tta utan bildbeskrivning?\nIcke grafiska webbl\u00e4sare kommer inte att kunna tolka bilden f\u00f6r anv\u00e4ndaren.","example_img":"Exempelbild",misc:"\u00d6vrigt",mouseout:"vid musen utanf\u00f6r",mouseover:"vid musen ovanf\u00f6r","alt_image":"Alternativbild","swap_image":"Utbytningsbild",map:"L\u00e4nkkarta",id:"Id",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",classes:"Klasser",style:"Stil","long_desc":"L\u00e5ng beskrivning",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning","constrain_proportions":"Bibeh\u00e5ll proportionerna",preview:"F\u00f6rhandsvisning",title:"Titel",general:"Generellt","tab_advanced":"Avancerat","tab_appearance":"Utseende","tab_general":"Generellt",width:"Bredd",height:"H\u00f6jd"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sy_dlg.js
new file mode 100644
index 000000000..ca284a4c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","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.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ta_dlg.js
new file mode 100644
index 000000000..efb4f91f0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/te_dlg.js
new file mode 100644
index 000000000..5e52a7950
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/th_dlg.js
new file mode 100644
index 000000000..f8dff4fab
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.advimage_dlg',{"image_list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e23\u0e39\u0e1b","align_right":"\u0e02\u0e27\u0e32","align_left":"\u0e0b\u0e49\u0e32\u0e22","align_textbottom":"\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e2d\u0e22\u0e39\u0e48\u0e25\u0e48\u0e32\u0e07","align_texttop":"\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e19","align_bottom":"\u0e25\u0e48\u0e32\u0e07","align_middle":"\u0e01\u0e25\u0e32\u0e07","align_top":"\u0e1a\u0e19","align_baseline":"\u0e40\u0e2a\u0e49\u0e19\u0e1e\u0e37\u0e49\u0e19",align:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e08\u0e31\u0e14\u0e27\u0e32\u0e07",hspace:"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19",vspace:"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07",dimensions:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07",border:"\u0e01\u0e23\u0e2d\u0e1a",list:"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e23\u0e39\u0e1b",alt:"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e23\u0e39\u0e1b",src:"\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e23\u0e39\u0e1b","dialog_title":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 image","missing_alt":"\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e14\u0e33\u0e40\u0e19\u0e34\u0e19\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d\u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e43\u0e2a\u0e48\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e ? \u0e01\u0e32\u0e23\u0e43\u0e2a\u0e48\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e23\u0e39\u0e1b\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e1c\u0e39\u0e49\u0e1e\u0e34\u0e01\u0e32\u0e23\u0e17\u0e32\u0e07\u0e2a\u0e32\u0e22\u0e15\u0e32\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e23\u0e39\u0e49\u0e44\u0e14\u0e49\u0e27\u0e48\u0e32\u0e23\u0e39\u0e1b\u0e04\u0e38\u0e13\u0e04\u0e37\u0e2d\u0e23\u0e39\u0e1b\u0e2d\u0e30\u0e44\u0e23","example_img":"\u0e14\u0e39\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e25\u0e31\u0e01\u0e29\u0e13\u0e30\u0e02\u0e2d\u0e07\u0e23\u0e39\u0e1b",misc:"\u0e40\u0e1a\u0e47\u0e14\u0e40\u0e15\u0e25\u0e47\u0e14",mouseout:"\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2d\u0e32\u0e40\u0e21\u0e49\u0e32\u0e2a\u0e4c\u0e2d\u0e2d\u0e01",mouseover:"\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2d\u0e32\u0e40\u0e21\u0e49\u0e32\u0e2a\u0e4c\u0e0a\u0e35\u0e49","alt_image":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e23\u0e39\u0e1b","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22",ltr:"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32",classes:"\u0e04\u0e25\u0e32\u0e2a",style:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","long_desc":"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c",langcode:"\u0e42\u0e04\u0e49\u0e14\u0e20\u0e32\u0e29\u0e32",langdir:"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e2d\u0e48\u0e32\u0e19","constrain_proportions":"\u0e04\u0e07\u0e2a\u0e31\u0e14\u0e2a\u0e48\u0e27\u0e19",preview:"\u0e14\u0e39\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07",title:"\u0e0a\u0e37\u0e48\u0e2d",general:"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","tab_advanced":"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","tab_appearance":"\u0e25\u0e31\u0e01\u0e29\u0e13\u0e30","tab_general":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tn_dlg.js
new file mode 100644
index 000000000..03785a646
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tr_dlg.js
new file mode 100644
index 000000000..0a1868d1e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.advimage_dlg',{"image_list":"Resim listesi","align_right":"Sa\u011f","align_left":"Sol","align_textbottom":"Metin altta","align_texttop":"Metin \u00fcstte","align_bottom":"Alt","align_middle":"Orta","align_top":"\u00dcst","align_baseline":"Taban hizas\u0131",align:"Hizalama",hspace:"Yatay bo\u015fluk",vspace:"Dikey bo\u015fluk",dimensions:"Boyutlar",border:"Kenarl\u0131k",list:"Resim listesi",alt:"Resim a\u00e7\u0131klamas\u0131",src:"Resmin URL\'si","dialog_title":"Resim ekle/d\u00fczenle","missing_alt":"Resim a\u00e7\u0131klamas\u0131 girmeden devam etmek istedi\u011finize emini misiniz? Bu olmadan taray\u0131c\u0131da resimleri kapatanlar, metin bazl\u0131 taray\u0131c\u0131lar veya resim baz\u0131 engelli kullan\u0131c\u0131lar g\u00f6remeyeceklerdir.","example_img":"Resim \u00f6nizleme g\u00f6r\u00fcn\u00fcm\u00fc",misc:"\u00c7e\u015fitli",mouseout:"Fare d\u0131\u015f\u0131ndayken",mouseover:"Fare \u00fczerindeyken","alt_image":"Alternatif resim","swap_image":"Resmi takas et",map:"Resim haritas\u0131",id:"Id",rtl:"Soldan sa\u011fa",ltr:"Sa\u011fdan sola",classes:"S\u0131n\u0131fla",style:"Stil","long_desc":"Uzun a\u00e7\u0131klamal\u0131 ba\u011flant\u0131",langcode:"Dil kodu",langdir:"Dil y\u00f6n\u00fc","constrain_proportions":"Oran\u0131 s\u0131n\u0131rla",preview:"\u00d6nizleme",title:"Ba\u015fl\u0131k",general:"Genel","tab_advanced":"Geli\u015fmi\u015f","tab_appearance":"G\u00f6r\u00fcn\u00fcm","tab_general":"Genel",width:"Geni\u015flik",height:"Y\u00fckseklik"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tt_dlg.js
new file mode 100644
index 000000000..023769746
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.advimage_dlg',{"image_list":"\u5716\u7247\u6e05\u55ae","align_right":"\u5c45\u53f3","align_left":"\u5c45\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u5e95\u90e8","align_middle":"\u4e2d\u90e8","align_top":"\u9802\u90e8","align_baseline":"\u57fa\u7dda",align:"\u5c0d\u9f4a\u65b9\u5f0f",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u908a\u6846",list:"\u5716\u7247\u6e05\u55ae",alt:"\u5716\u7247\u8aaa\u660e",src:"\u5716\u7247\u4f4d\u5740","dialog_title":"\u63d2\u5165/\u7de8\u8f2f \u5716\u7247","missing_alt":" \u662f\u5426\u4e0d\u7232\u5716\u7247\u52a0\u5165\u8aaa\u660e\u6587\u5b57\uff0c\u5982\u679c\u4e0d\u52a0\u5165\u8aaa\u660e\u6587\u5b57\uff0c\u5c07\u5c0e\u81f4\u4e0d\u652f\u63f4\u5716\u7247\u7684\u700f\u89bd\u5668\u5ffd\u7565\u672c\u5167\u5bb9","example_img":"\u9810\u89bd\u5716\u7247",misc:"\u5176\u4ed6",mouseout:"\u6ed1\u9f20\u79fb\u51fa",mouseover:"\u6ed1\u9f20\u5283\u904e","alt_image":"\u4ea4\u66ff\u5716\u7247","swap_image":"\u5207\u63db\u5716\u7247",map:"\u5716\u7247\u71b1\u9ede",id:"Id",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",classes:"\u6a23\u5f0f\u985e",style:"\u6a23\u5f0f","long_desc":"\u63cf\u8ff0",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",preview:"\u9810\u89bd",title:"\u641c\u5c0b",general:"\u57fa\u672c","tab_advanced":"\u9032\u968e","tab_appearance":"\u5916\u89c0","tab_general":"\u57fa\u672c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tw_dlg.js
new file mode 100644
index 000000000..25d4d8665
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.advimage_dlg',{"image_list":"\u5716\u7247\u6e05\u55ae","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u9760\u4e0b","align_middle":"\u7f6e\u4e2d","align_top":"\u9760\u4e0a","align_baseline":"\u57fa\u6e96\u7dda",align:"\u5c0d\u9f4a\u65b9\u5f0f",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u908a\u6846",list:"\u5716\u7247\u6e05\u55ae",alt:"\u5716\u7247\u8aaa\u660e",src:"\u5716\u7247URL","dialog_title":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","missing_alt":"\u5716\u7247\u6c92\u6709\u8aaa\u660e\u6587\u5b57\uff0c\u662f\u5426\u7e7c\u7e8c\uff1f","example_img":"\u5716\u7247\u5916\u89c0\u9810\u89bd",misc:"\u5176\u5b83",mouseout:"\u6ed1\u9f20\u79fb\u51fa",mouseover:"\u6ed1\u9f20\u79fb\u5165","alt_image":"\u53d6\u4ee3\u5716\u7247","swap_image":"\u5716\u7247\u5207\u63db",map:"\u5716\u7247 Map",id:"ID",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",classes:"\u985e\u5225",style:"\u6a23\u5f0f","long_desc":"\u9577\u63cf\u8ff0\u9023\u7d50",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","constrain_proportions":"\u9396\u5b9a\u6bd4\u4f8b",preview:"\u9810\u89bd",title:"\u6a19\u984c",general:"\u4e00\u822c","tab_advanced":"\u9032\u968e","tab_appearance":"\u5916\u89c0","tab_general":"\u4e00\u822c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/uk_dlg.js
new file mode 100644
index 000000000..d083a13bb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.advimage_dlg',{"image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u0456\u0439 \u043b\u0456\u043d\u0456\u0457",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",hspace:"\u0413\u043e\u0440\u0438\u0437. \u0432\u0456\u0434\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442. \u0432\u0456\u0434\u0441\u0442\u0443\u043f",dimensions:"\u0420\u043e\u0437\u043c\u0456\u0440\u0438",border:"\u0420\u0430\u043c\u043a\u0430",list:"\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c",alt:"\u041e\u043f\u0438\u0441",src:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","dialog_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","missing_alt":"\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u043d\u0456, \u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438 \u0431\u0435\u0437 \u043e\u043f\u0438\u0441\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f? \u0411\u0435\u0437 \u0446\u044c\u043e\u0433\u043e, \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0435 \u0431\u0443\u0434\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u043c \u0434\u0435\u044f\u043a\u0438\u043c \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u043c \u0437 \u0432\u0430\u0434\u0430\u043c\u0438, \u0430\u0431\u043e \u0442\u0438\u043c, \u0445\u0442\u043e \u043a\u043e\u0440\u0438\u0442\u0443\u0454\u0442\u044c\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0447\u0430\u043c\u0438, \u0430\u0431\u043e \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u0430\u0454 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u0437 \u0432\u0438\u043c\u043a\u043d\u0435\u043d\u0438\u043c\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f\u043c\u0438.","example_img":"\u0412\u0438\u0433\u043b\u044f\u0434 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",misc:"\u0406\u043d\u0448\u0435",mouseout:"\u043f\u0440\u0438 \u0432\u0456\u0434\u0432\u0435\u0434\u0435\u043d\u043d\u0456",mouseover:"\u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043d\u0456","alt_image":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","swap_image":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u0456\u043d\u043d\u0438\u043a",map:"\u041c\u0430\u043f\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043b\u0456\u0432\u043e\u0440\u0443\u0447",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",classes:"\u041a\u043b\u0430\u0441\u0438",style:"\u0421\u0442\u0438\u043b\u044c","long_desc":"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u043f\u043e\u0432\u043d\u0438\u0439 \u043e\u043f\u0438\u0441",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c\u043e\u043a \u043c\u043e\u0432\u0438","constrain_proportions":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0456\u0457",preview:"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434",title:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",general:"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","tab_advanced":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","tab_appearance":"\u0412\u0438\u0433\u043b\u044f\u0434","tab_general":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u043e\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ur_dlg.js
new file mode 100644
index 000000000..704061336
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/vi_dlg.js
new file mode 100644
index 000000000..361b0b883
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.advimage_dlg',{"image_list":"Danh s\u00e1ch \u1ea3nh","align_right":"Ph\u1ea3i","align_left":"Tr\u00e1i","align_textbottom":"V\u0103n b\u1ea3n d\u01b0\u1edbi c\u00f9ng","align_texttop":"V\u0103n b\u1ea3n tr\u00ean c\u00f9ng","align_bottom":"D\u01b0\u1edbi c\u00f9ng","align_middle":"Gi\u1eefa","align_top":"Tr\u00ean c\u00f9ng","align_baseline":"D\u00f2ng c\u01a1 s\u1edf",align:"Canh l\u1ec1",hspace:"Kho\u1ea3ng c\u00e1ch ngang",vspace:"Kho\u1ea3ng c\u00e1ch d\u1ecdc",dimensions:"K\u00edch th\u01b0\u1edbc",border:"Vi\u1ec1n",list:"Danh s\u00e1ch \u1ea3nh",alt:"M\u00f4 t\u1ea3 \u1ea3nh",src:"URL \u1ea3nh","dialog_title":"Ch\u00e8n/s\u1eeda \u1ea3nh","missing_alt":"Ti\u1ebfp t\u1ee5c v\u1edbi \u0111\u01b0\u1eddng d\u1eabn kh\u00f4ng t\u1ed3n t\u1ea1i ?.","example_img":"Hi\u1ec3n th\u1ecb h\u00ecnh \u1ea3nh xem tr\u01b0\u1edbc",misc:"Linh tinh",mouseout:"cho chu\u1ed9t ra",mouseover:"cho chu\u1ed9t l\u00ean","alt_image":"\u1ea2nh thay th\u1ebf","swap_image":"Trao \u0111\u1ed5i \u1ea3nh",map:"S\u01a1 \u0111\u1ed3 \u1ea3nh",id:"Id",rtl:"Ph\u1ea3i qua tr\u00e1i",ltr:"Tr\u00e1i qua ph\u1ea3i",classes:"L\u1edbp",style:"Ki\u1ec3u d\u00e1ng","long_desc":"Li\u00ean k\u1ebft m\u00f4 t\u1ea3 d\u00e0i",langcode:"M\u00e3 ng\u00f4n ng\u1eef",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef","constrain_proportions":"R\u00e0ng bu\u1ed9c t\u1ec9 l\u1ec7",preview:"Xem tr\u01b0\u1edbc",title:"Ti\u00eau \u0111\u1ec1",general:"Chung","tab_advanced":"N\u00e2ng cao","tab_appearance":"Xu\u1ea5t hi\u1ec7n","tab_general":"Chung",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..5cf6bf5c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.advimage_dlg',{"image_list":"\u56fe\u7247\u5217\u8868","align_right":"\u53f3\u5bf9\u9f50","align_left":"\u5de6\u5bf9\u9f50","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u5e95\u7aef\u5bf9\u9f50","align_middle":"\u5c45\u4e2d\u5bf9\u9f50","align_top":"\u9876\u7aef\u5bf9\u9f50","align_baseline":"\u5e95\u7ebf",align:"\u5bf9\u9f50",hspace:"\u6c34\u5e73\u8ddd\u79bb",vspace:"\u5782\u76f4\u8ddd\u79bb",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u5217\u8868",alt:"\u56fe\u7247\u63cf\u8ff0",src:"\u56fe\u7247\u94fe\u63a5","dialog_title":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","missing_alt":"\u56fe\u7247\u6ca1\u6709\u8bf4\u660e\u6587\u5b57\uff0c\u60a8\u662f\u5426\u8981\u7ee7\u7eed\uff1f\u6ca1\u6709\u8bf4\u660e\u6587\u5b57\u7684\u56fe\u7247\uff0c\u53ef\u80fd\u7ed9\u6b8b\u75be\u4eba\u58eb\u3001\u6587\u672c\u6d4f\u89c8\u5668\u6216\u5173\u95ed\u56fe\u7247\u529f\u80fd\u7684\u6d4f\u89c8\u5668\u8bbf\u95ee\u9020\u6210\u56f0\u96be\u3002","example_img":"\u5916\u89c2\u9884\u89c8\u56fe",misc:"\u5176\u4ed6",mouseout:"\u9f20\u6807\u6ed1\u51fa",mouseover:"\u9f20\u6807\u6ed1\u5165","alt_image":"\u66ff\u6362\u56fe\u7247","swap_image":"\u56fe\u7247\u5207\u6362",map:"\u56fe\u7247map",id:"ID",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",classes:"\u7c7b\u522b",style:"\u6837\u5f0f","long_desc":"\u957f\u63cf\u8ff0\u94fe\u63a5",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u6587\u5b57\u65b9\u5411","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u6807\u9898",general:"\u666e\u901a","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u666e\u901a",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..9f51ade2f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.advimage_dlg',{"image_list":"\u5716\u7247\u6e05\u55ae","align_right":"\u5411\u53f3\u5c0d\u9f4a","align_left":"\u5411\u5de6\u5c0d\u9f4a","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u81ea\u4e0a\u65b9","align_bottom":"\u4e0b\u65b9","align_middle":"\u4e2d\u9593","align_top":"\u4e0a\u65b9","align_baseline":"\u57fa\u6e96\u7dda",align:"\u5c0d\u9f4a\u65b9\u5f0f",hspace:"\u6c34\u5e73\u8ddd\u96e2",vspace:"\u5782\u76f4\u8ddd\u96e2",dimensions:"\u5c3a\u5bf8",border:"\u6846\u67b6",list:"\u5716\u7247\u6e05\u55ae",alt:"\u5716\u7247\u8aaa\u660e",src:"\u5716\u7247 URL","dialog_title":"\u52a0\u5165 / \u8a2d\u5b9a\u5716\u7247","missing_alt":"\u60a8\u7684\u5716\u7247\u6c92\u6709\u8aaa\u660e\uff0c\u9019\u53ef\u80fd\u6703\u8b93\u4e00\u4e9b\u7db2\u53cb\u700f\u89bd\u6642\u6709\u4e9b\u9ebb\u7169\uff0c\u60a8\u78ba\u5b9a\u8981\u5ffd\u7565\u5b83\u55ce\uff1f","example_img":"\u9810\u89bd\u5716\u7247",misc:"\u5176\u4ed6\u8a2d\u5b9a",mouseout:"\u6ed1\u9f20\u79fb\u958b\u7684\u6642\u5019",mouseover:"\u6ed1\u9f20\u79fb\u5230\u5716\u7247\u4e0a\u7684\u6642\u5019","alt_image":"\u66ff\u63db\u5716\u7247","swap_image":"\u66f4\u63db\u5716\u7247\u6548\u679c",map:"\u5f71\u50cf\u5730\u5716",id:"\u5716\u7247\u7684 ID",rtl:"\u5411\u53f3\u908a\u5230\u5de6\u908a",ltr:"\u5411\u5de6\u908a\u5230\u53f3\u908a",classes:"\u985e\u5225 (Class)",style:"\u6a23\u5f0f","long_desc":"\u66ff\u4ee3\u5716\u7247",langcode:"\u8a9e\u7cfb\u4ee3\u865f",langdir:"\u66f8\u5beb\u65b9\u5411","constrain_proportions":"\u7dad\u6301\u5716\u7247\u6bd4\u4f8b",preview:"\u9810\u89bd",title:"\u6a19\u984c",general:"\u4e00\u822c","tab_advanced":"\u5176\u4ed6\u8a2d\u5b9a","tab_appearance":"\u5916\u89c0\u6a23\u5f0f","tab_general":"\u4e00\u822c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh_dlg.js
new file mode 100644
index 000000000..74b39c863
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.advimage_dlg',{"image_list":"\u5716\u7247\u6e05\u55ae","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u9760\u4e0b","align_middle":"\u7f6e\u4e2d","align_top":"\u9760\u4e0a","align_baseline":"\u57fa\u6e96\u7dda",align:"\u5c0d\u9f4a\u65b9\u5f0f",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u908a\u6846",list:"\u5716\u7247\u6e05\u55ae",alt:"\u5716\u7247\u8aaa\u660e",src:"\u5716\u7247 URL \u9023\u7d50","dialog_title":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","missing_alt":"\u60a8\u5c1a\u672a\u586b\u5beb\u5716\u7247\u8aaa\u660e\u6587\u5b57\u662f\u5426\u8981\u7e7c\u7e8c? \u5982\u679c\u4e0d\u586b\u5beb\u8aaa\u660e\u6587\u5b57, \u5c0d\u4f7f\u7528\u975e\u53ef\u8996\u6216\u5c0d\u8a2d\u5b9a\u70ba\u4e0d\u986f\u793a\u5716\u7247\u7684\u700f\u89bd\u5668\u4f7f\u7528\u8005\u5c07\u66f4\u96e3\u95b1\u8b80\u6216\u7406\u89e3\u6b64\u5716\u7247.","example_img":"\u5716\u7247\u9810\u89bd",misc:"\u5176\u4ed6",mouseout:"\u6e38\u6a19\u79fb\u51fa",mouseover:"\u6e38\u6a19\u79fb\u5165","alt_image":"\u53d6\u4ee3\u5716\u7247","swap_image":"\u5716\u7247\u5207\u63db",map:"\u5f71\u50cf\u5730\u5716",id:"ID",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",classes:"\u985e\u5225",style:"\u6a23\u5f0f","long_desc":"\u9577\u9023\u7d50",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","constrain_proportions":"\u56fa\u5b9a\u6bd4\u4f8b",preview:"\u9810\u89bd",title:"\u5716\u7247\u6a19\u984c",general:"\u4e00\u822c","tab_advanced":"\u9032\u968e","tab_appearance":"\u5916\u89c0","tab_general":"\u4e00\u822c",width:"\u5bec",height:"\u9ad8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zu_dlg.js
new file mode 100644
index 000000000..735ea4992
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advimage/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.advimage_dlg',{"image_list":"\u56fe\u7247\u6e05\u5355","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u4e0b\u65b9","align_middle":"\u5c45\u4e2d","align_top":"\u4e0a\u65b9","align_baseline":"\u57fa\u7ebf",align:"\u5bf9\u9f50\u65b9\u5f0f",hspace:"\u5782\u76f4\u95f4\u8ddd",vspace:"\u6c34\u51c6\u95f4\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u6e05\u5355",alt:"\u56fe\u7247\u8bf4\u660e",src:"\u56fe\u7247\u7f51\u5740","dialog_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","missing_alt":"\u8bf7\u95ee\u662f\u5426\u786e\u5b9a\u4e0d\u4e3a\u56fe\u7247\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff1f\u82e5\u6ca1\u6709\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff0c\u5f53\u4f7f\u7528\u8005\u4f7f\u7528\u4e0d\u8bfb\u5165\u56fe\u7247\u6216\u6587\u5b57\u4f53\u7684\u6d41\u89c8\u5668\u65f6\uff0c\u5c06\u4f1a\u770b\u4e0d\u5230\u8fd9\u4e2a\u56fe\u7247\u3002","example_img":"\u9884\u89c8\u56fe\u7247",misc:"\u5176\u5b83",mouseout:"\u6ed1\u9f20\u79fb\u51fa\u56fe\u7247",mouseover:"\u6ed1\u9f20\u79fb\u5165\u56fe\u7247","alt_image":"\u66ff\u6362\u56fe\u7247","swap_image":"\u5bf9\u6362\u56fe\u7247",map:"\u56fe\u7247\u5730\u56fe",id:"Id",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",classes:"\u7c7b\u578b",style:"\u6837\u5f0f","long_desc":"\u957f\u63cf\u8ff0\u8fde\u7ed3",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u67e5\u627e",general:"\u4e00\u822c","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u4e00\u822c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css
new file mode 100644
index 000000000..14364316a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/css/advlink.css
@@ -0,0 +1,8 @@
+.mceLinkList, .mceAnchorList, #targetlist {width:280px;}
+.mceActionPanel {margin-top:7px;}
+.panel_wrapper div.current {height:320px;}
+#classlist, #title, #href {width:280px;}
+#popupurl, #popupname {width:200px;}
+#popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;}
+#id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;}
+#events_panel input {width:200px;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js
new file mode 100644
index 000000000..983fe5a9c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js
new file mode 100644
index 000000000..14e46a762
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/editor_plugin_src.js
@@ -0,0 +1,61 @@
+/**
+ * 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.AdvancedLinkPlugin', {
+ init : function(ed, url) {
+ this.editor = ed;
+
+ // Register commands
+ ed.addCommand('mceAdvLink', function() {
+ var se = ed.selection;
+
+ // No selection and not in link
+ if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A'))
+ return;
+
+ ed.windowManager.open({
+ file : url + '/link.htm',
+ width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)),
+ height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ // Register buttons
+ ed.addButton('link', {
+ title : 'advlink.link_desc',
+ cmd : 'mceAdvLink'
+ });
+
+ ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink');
+
+ ed.onNodeChange.add(function(ed, cm, n, co) {
+ cm.setDisabled('link', co && n.nodeName != 'A');
+ cm.setActive('link', n.nodeName == 'A' && !n.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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js
new file mode 100644
index 000000000..837c937c6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/js/advlink.js
@@ -0,0 +1,532 @@
+/* Functions for the advlink plugin popup */
+
+tinyMCEPopup.requireLangPack();
+
+var templates = {
+ "window.open" : "window.open('${url}','${target}','${options}')"
+};
+
+function preinit() {
+ var url;
+
+ if (url = tinyMCEPopup.getParam("external_link_list_url"))
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
+}
+
+function changeClass() {
+ var f = document.forms[0];
+
+ f.classes.value = getSelectValue(f, 'classlist');
+}
+
+function init() {
+ tinyMCEPopup.resizeToInnerSize();
+
+ var formObj = document.forms[0];
+ var inst = tinyMCEPopup.editor;
+ var elm = inst.selection.getNode();
+ var action = "insert";
+ var html;
+
+ document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink');
+ document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink');
+ document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target');
+
+ // Link list
+ html = getLinkListHTML('linklisthref','href');
+ if (html == "")
+ document.getElementById("linklisthrefrow").style.display = 'none';
+ else
+ document.getElementById("linklisthrefcontainer").innerHTML = html;
+
+ // Anchor list
+ html = getAnchorListHTML('anchorlist','href');
+ if (html == "")
+ document.getElementById("anchorlistrow").style.display = 'none';
+ else
+ document.getElementById("anchorlistcontainer").innerHTML = html;
+
+ // Resize some elements
+ if (isVisible('hrefbrowser'))
+ document.getElementById('href').style.width = '260px';
+
+ if (isVisible('popupurlbrowser'))
+ document.getElementById('popupurl').style.width = '180px';
+
+ elm = inst.dom.getParent(elm, "A");
+ if (elm != null && elm.nodeName == "A")
+ action = "update";
+
+ formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true);
+
+ setPopupControlsDisabled(true);
+
+ if (action == "update") {
+ var href = inst.dom.getAttrib(elm, 'href');
+ var onclick = inst.dom.getAttrib(elm, 'onclick');
+
+ // Setup form data
+ setFormValue('href', href);
+ setFormValue('title', inst.dom.getAttrib(elm, 'title'));
+ setFormValue('id', inst.dom.getAttrib(elm, 'id'));
+ setFormValue('style', inst.dom.getAttrib(elm, "style"));
+ setFormValue('rel', inst.dom.getAttrib(elm, 'rel'));
+ setFormValue('rev', inst.dom.getAttrib(elm, 'rev'));
+ setFormValue('charset', inst.dom.getAttrib(elm, 'charset'));
+ setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang'));
+ setFormValue('dir', inst.dom.getAttrib(elm, 'dir'));
+ setFormValue('lang', inst.dom.getAttrib(elm, 'lang'));
+ setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));
+ setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));
+ setFormValue('type', inst.dom.getAttrib(elm, 'type'));
+ setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus'));
+ setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur'));
+ setFormValue('onclick', onclick);
+ setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick'));
+ setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown'));
+ setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup'));
+ setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover'));
+ setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove'));
+ setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout'));
+ setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress'));
+ setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown'));
+ setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup'));
+ setFormValue('target', inst.dom.getAttrib(elm, 'target'));
+ setFormValue('classes', inst.dom.getAttrib(elm, 'class'));
+
+ // Parse onclick data
+ if (onclick != null && onclick.indexOf('window.open') != -1)
+ parseWindowOpen(onclick);
+ else
+ parseFunction(onclick);
+
+ // Select by the values
+ selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir'));
+ selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel'));
+ selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev'));
+ selectByValue(formObj, 'linklisthref', href);
+
+ if (href.charAt(0) == '#')
+ selectByValue(formObj, 'anchorlist', href);
+
+ addClassesToList('classlist', 'advlink_styles');
+
+ selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true);
+ selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true);
+ } else
+ addClassesToList('classlist', 'advlink_styles');
+}
+
+function checkPrefix(n) {
+ if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email')))
+ n.value = 'mailto:' + n.value;
+
+ if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external')))
+ n.value = 'http://' + n.value;
+}
+
+function setFormValue(name, value) {
+ document.forms[0].elements[name].value = value;
+}
+
+function parseWindowOpen(onclick) {
+ var formObj = document.forms[0];
+
+ // Preprocess center code
+ if (onclick.indexOf('return false;') != -1) {
+ formObj.popupreturn.checked = true;
+ onclick = onclick.replace('return false;', '');
+ } else
+ formObj.popupreturn.checked = false;
+
+ var onClickData = parseLink(onclick);
+
+ if (onClickData != null) {
+ formObj.ispopup.checked = true;
+ setPopupControlsDisabled(false);
+
+ var onClickWindowOptions = parseOptions(onClickData['options']);
+ var url = onClickData['url'];
+
+ formObj.popupname.value = onClickData['target'];
+ formObj.popupurl.value = url;
+ formObj.popupwidth.value = getOption(onClickWindowOptions, 'width');
+ formObj.popupheight.value = getOption(onClickWindowOptions, 'height');
+
+ formObj.popupleft.value = getOption(onClickWindowOptions, 'left');
+ formObj.popuptop.value = getOption(onClickWindowOptions, 'top');
+
+ if (formObj.popupleft.value.indexOf('screen') != -1)
+ formObj.popupleft.value = "c";
+
+ if (formObj.popuptop.value.indexOf('screen') != -1)
+ formObj.popuptop.value = "c";
+
+ formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";
+ formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";
+ formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";
+ formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";
+ formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";
+ formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";
+ formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";
+
+ buildOnClick();
+ }
+}
+
+function parseFunction(onclick) {
+ var formObj = document.forms[0];
+ var onClickData = parseLink(onclick);
+
+ // TODO: Add stuff here
+}
+
+function getOption(opts, name) {
+ return typeof(opts[name]) == "undefined" ? "" : opts[name];
+}
+
+function setPopupControlsDisabled(state) {
+ var formObj = document.forms[0];
+
+ formObj.popupname.disabled = state;
+ formObj.popupurl.disabled = state;
+ formObj.popupwidth.disabled = state;
+ formObj.popupheight.disabled = state;
+ formObj.popupleft.disabled = state;
+ formObj.popuptop.disabled = state;
+ formObj.popuplocation.disabled = state;
+ formObj.popupscrollbars.disabled = state;
+ formObj.popupmenubar.disabled = state;
+ formObj.popupresizable.disabled = state;
+ formObj.popuptoolbar.disabled = state;
+ formObj.popupstatus.disabled = state;
+ formObj.popupreturn.disabled = state;
+ formObj.popupdependent.disabled = state;
+
+ setBrowserDisabled('popupurlbrowser', state);
+}
+
+function parseLink(link) {
+ link = link.replace(new RegExp('&#39;', 'g'), "'");
+
+ var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");
+
+ // Is function name a template function
+ var template = templates[fnName];
+ if (template) {
+ // Build regexp
+ var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));
+ var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";
+ var replaceStr = "";
+ for (var i=0; i<variableNames.length; i++) {
+ // Is string value
+ if (variableNames[i].indexOf("'${") != -1)
+ regExp += "'(.*)'";
+ else // Number value
+ regExp += "([0-9]*)";
+
+ replaceStr += "$" + (i+1);
+
+ // Cleanup variable name
+ variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");
+
+ if (i != variableNames.length-1) {
+ regExp += "\\s*,\\s*";
+ replaceStr += "<delim>";
+ } else
+ regExp += ".*";
+ }
+
+ regExp += "\\);?";
+
+ // Build variable array
+ var variables = [];
+ variables["_function"] = fnName;
+ var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');
+ for (var i=0; i<variableNames.length; i++)
+ variables[variableNames[i]] = variableValues[i];
+
+ return variables;
+ }
+
+ return null;
+}
+
+function parseOptions(opts) {
+ if (opts == null || opts == "")
+ return [];
+
+ // Cleanup the options
+ opts = opts.toLowerCase();
+ opts = opts.replace(/;/g, ",");
+ opts = opts.replace(/[^0-9a-z=,]/g, "");
+
+ var optionChunks = opts.split(',');
+ var options = [];
+
+ for (var i=0; i<optionChunks.length; i++) {
+ var parts = optionChunks[i].split('=');
+
+ if (parts.length == 2)
+ options[parts[0]] = parts[1];
+ }
+
+ return options;
+}
+
+function buildOnClick() {
+ var formObj = document.forms[0];
+
+ if (!formObj.ispopup.checked) {
+ formObj.onclick.value = "";
+ return;
+ }
+
+ var onclick = "window.open('";
+ var url = formObj.popupurl.value;
+
+ onclick += url + "','";
+ onclick += formObj.popupname.value + "','";
+
+ if (formObj.popuplocation.checked)
+ onclick += "location=yes,";
+
+ if (formObj.popupscrollbars.checked)
+ onclick += "scrollbars=yes,";
+
+ if (formObj.popupmenubar.checked)
+ onclick += "menubar=yes,";
+
+ if (formObj.popupresizable.checked)
+ onclick += "resizable=yes,";
+
+ if (formObj.popuptoolbar.checked)
+ onclick += "toolbar=yes,";
+
+ if (formObj.popupstatus.checked)
+ onclick += "status=yes,";
+
+ if (formObj.popupdependent.checked)
+ onclick += "dependent=yes,";
+
+ if (formObj.popupwidth.value != "")
+ onclick += "width=" + formObj.popupwidth.value + ",";
+
+ if (formObj.popupheight.value != "")
+ onclick += "height=" + formObj.popupheight.value + ",";
+
+ if (formObj.popupleft.value != "") {
+ if (formObj.popupleft.value != "c")
+ onclick += "left=" + formObj.popupleft.value + ",";
+ else
+ onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";
+ }
+
+ if (formObj.popuptop.value != "") {
+ if (formObj.popuptop.value != "c")
+ onclick += "top=" + formObj.popuptop.value + ",";
+ else
+ onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";
+ }
+
+ if (onclick.charAt(onclick.length-1) == ',')
+ onclick = onclick.substring(0, onclick.length-1);
+
+ onclick += "');";
+
+ if (formObj.popupreturn.checked)
+ onclick += "return false;";
+
+ // tinyMCE.debug(onclick);
+
+ formObj.onclick.value = onclick;
+
+ if (formObj.href.value == "")
+ formObj.href.value = url;
+}
+
+function setAttrib(elm, attrib, value) {
+ var formObj = document.forms[0];
+ var valueElm = formObj.elements[attrib.toLowerCase()];
+ var dom = tinyMCEPopup.editor.dom;
+
+ if (typeof(value) == "undefined" || value == null) {
+ value = "";
+
+ if (valueElm)
+ value = valueElm.value;
+ }
+
+ // Clean up the style
+ if (attrib == 'style')
+ value = dom.serializeStyle(dom.parseStyle(value), 'a');
+
+ dom.setAttrib(elm, attrib, value);
+}
+
+function getAnchorListHTML(id, target) {
+ var ed = tinyMCEPopup.editor, nodes = ed.dom.select('a'), name, i, len, html = "";
+
+ for (i=0, len=nodes.length; i<len; i++) {
+ if ((name = ed.dom.getAttrib(nodes[i], "name")) != "")
+ html += '<option value="#' + name + '">' + name + '</option>';
+ }
+
+ if (html == "")
+ return "";
+
+ html = '<select id="' + id + '" name="' + id + '" class="mceAnchorList"'
+ + ' onchange="this.form.' + target + '.value=this.options[this.selectedIndex].value"'
+ + '>'
+ + '<option value="">---</option>'
+ + html
+ + '</select>';
+
+ return html;
+}
+
+function insertAction() {
+ var inst = tinyMCEPopup.editor;
+ var elm, elementArray, i;
+
+ elm = inst.selection.getNode();
+ checkPrefix(document.forms[0].href);
+
+ elm = inst.dom.getParent(elm, "A");
+
+ // Remove element if there is no href
+ if (!document.forms[0].href.value) {
+ i = inst.selection.getBookmark();
+ inst.dom.remove(elm, 1);
+ inst.selection.moveToBookmark(i);
+ tinyMCEPopup.execCommand("mceEndUndoLevel");
+ tinyMCEPopup.close();
+ return;
+ }
+
+ // Create new anchor elements
+ if (elm == null) {
+ inst.getDoc().execCommand("unlink", false, null);
+ tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1});
+
+ elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';});
+ for (i=0; i<elementArray.length; i++)
+ setAllAttribs(elm = elementArray[i]);
+ } else
+ setAllAttribs(elm);
+
+ // Don't move caret if selection was image
+ if (elm.childNodes.length != 1 || elm.firstChild.nodeName != 'IMG') {
+ inst.focus();
+ inst.selection.select(elm);
+ inst.selection.collapse(0);
+ tinyMCEPopup.storeSelection();
+ }
+
+ tinyMCEPopup.execCommand("mceEndUndoLevel");
+ tinyMCEPopup.close();
+}
+
+function setAllAttribs(elm) {
+ var formObj = document.forms[0];
+ var href = formObj.href.value.replace(/ /g, '%20');
+ var target = getSelectValue(formObj, 'targetlist');
+
+ setAttrib(elm, 'href', href);
+ setAttrib(elm, 'title');
+ setAttrib(elm, 'target', target == '_self' ? '' : target);
+ setAttrib(elm, 'id');
+ setAttrib(elm, 'style');
+ setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));
+ setAttrib(elm, 'rel');
+ setAttrib(elm, 'rev');
+ setAttrib(elm, 'charset');
+ setAttrib(elm, 'hreflang');
+ setAttrib(elm, 'dir');
+ setAttrib(elm, 'lang');
+ setAttrib(elm, 'tabindex');
+ setAttrib(elm, 'accesskey');
+ setAttrib(elm, 'type');
+ setAttrib(elm, 'onfocus');
+ setAttrib(elm, 'onblur');
+ setAttrib(elm, 'onclick');
+ setAttrib(elm, 'ondblclick');
+ setAttrib(elm, 'onmousedown');
+ setAttrib(elm, 'onmouseup');
+ setAttrib(elm, 'onmouseover');
+ setAttrib(elm, 'onmousemove');
+ setAttrib(elm, 'onmouseout');
+ setAttrib(elm, 'onkeypress');
+ setAttrib(elm, 'onkeydown');
+ setAttrib(elm, 'onkeyup');
+
+ // Refresh in old MSIE
+ if (tinyMCE.isMSIE5)
+ elm.outerHTML = elm.outerHTML;
+}
+
+function getSelectValue(form_obj, field_name) {
+ var elm = form_obj.elements[field_name];
+
+ if (!elm || elm.options == null || elm.selectedIndex == -1)
+ return "";
+
+ return elm.options[elm.selectedIndex].value;
+}
+
+function getLinkListHTML(elm_id, target_form_element, onchange_func) {
+ if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)
+ return "";
+
+ var html = "";
+
+ html += '<select id="' + elm_id + '" name="' + elm_id + '"';
+ html += ' class="mceLinkList" onfoc2us="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
+ html += 'this.options[this.selectedIndex].value;';
+
+ if (typeof(onchange_func) != "undefined")
+ html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';
+
+ html += '"><option value="">---</option>';
+
+ for (var i=0; i<tinyMCELinkList.length; i++)
+ html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';
+
+ html += '</select>';
+
+ return html;
+
+ // tinyMCE.debug('-- image list start --', html, '-- image list end --');
+}
+
+function getTargetListHTML(elm_id, target_form_element) {
+ var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';');
+ var html = '';
+
+ html += '<select id="' + elm_id + '" name="' + elm_id + '" onf2ocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';
+ html += 'this.options[this.selectedIndex].value;">';
+ html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';
+ html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';
+ html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';
+ html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';
+
+ for (var i=0; i<targets.length; i++) {
+ var key, value;
+
+ if (targets[i] == "")
+ continue;
+
+ key = targets[i].split('=')[0];
+ value = targets[i].split('=')[1];
+
+ html += '<option value="' + key + '">' + value + ' (' + key + ')</option>';
+ }
+
+ html += '</select>';
+
+ return html;
+}
+
+// While loading
+preinit();
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ar_dlg.js
new file mode 100644
index 000000000..8a2bc7de9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.advlink_dlg',{"target_name":"\u0627\u0633\u0645 \u0627\u0644\u0647\u062f\u0641",classes:"\u0635\u0646\u0641",style:"\u0634\u0643\u0644",id:"Id","popup_position":"\u0645\u0648\u0642\u0639 (X/Y)",langdir:"\u0627\u062a\u062c\u0627\u0647 \u0627\u0644\u0644\u063a\u0629","popup_size":"\u062d\u062c\u0645","popup_dependent":"\u062e\u0627\u0636\u0639 (Mozilla/Firefox only)","popup_resizable":"\u062a\u063a\u064a\u064a\u0631 \u062d\u062c\u0645 \u0646\u0627\u0641\u0630\u0629","popup_location":"\u0639\u0631\u0636 \u0634\u0631\u064a\u0637 \u0627\u0644\u0645\u0648\u0642\u0639","popup_menubar":"\u0639\u0631\u0636 \u0634\u0631\u064a\u0637 \u0627\u0644\u0642\u0648\u0627\u0626\u0645","popup_toolbar":"\u0625\u0638\u0647\u0627\u0631 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a","popup_statusbar":"\u0639\u0631\u0636 \u0634\u0631\u064a\u0637 \u0627\u0644\u062d\u0627\u0644\u0629","popup_scrollbars":"\u0639\u0631\u0636 \u0623\u0634\u0631\u0637\u0629 \u0627\u0644\u062a\u0645\u0631\u064a\u0631","popup_return":"\u0625\u062f\u0631\u0627\u062c \'\u0639\u0648\u062f\u0629 \u0643\u0627\u0630\u0628\u0629\' \'return false\'","popup_name":"\u0627\u0633\u0645 \u0627\u0644\u0646\u0627\u0641\u0630\u0629","popup_url":"\u0631\u0627\u0628\u0637 \u0637\u0641\u0648 \u0639\u0644\u0649 \u0627\u0644\u0633\u0637\u062d",popup:"\u062c\u0627\u0641\u0627 \u0633\u0643\u0631\u064a\u0628\u062a","target_blank":"\u0641\u064a \u0641\u062a\u062d \u0646\u0627\u0641\u0630\u0629 \u062c\u062f\u064a\u062f\u0629","target_top":"\u0641\u062a\u062d \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631 \u0627\u0644\u0639\u0644\u0648\u064a (\u064a\u062d\u0644 \u0645\u062d\u0644 \u0643\u0627\u0641\u0629 \u0627\u0644\u0625\u0637\u0627\u0631\u0627\u062a)","target_parent":"\u0641\u062a\u062d \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631 \u0627\u0644\u0623\u0635\u0644","target_same":"\u0641\u062a\u062d \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u0625\u0637\u0627\u0631","anchor_names":"\u0645\u0631\u062a\u0643\u0632\u0627\u062a","popup_opts":"\u062e\u064a\u0627\u0631\u0627\u062a","advanced_props":"\u062e\u0635\u0627\u0626\u0635 \u0645\u062a\u0642\u062f\u0645\u0629","event_props":"\u0623\u062d\u062f\u0627\u062b","popup_props":"\u062e\u0635\u0627\u0626\u0635 \u0645\u0631\u0628\u0639 \u0637\u0641\u0648 \u0639\u0644\u0649 \u0627\u0644\u0633\u0637\u062d ","general_props":"\u0627\u0644\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0639\u0627\u0645\u0629","advanced_tab":"\u0645\u062a\u0642\u062f\u0645","events_tab":"\u0623\u062d\u062f\u0627\u062b","popup_tab":"\u064a\u0645\u0631\u0628\u0639 \u0637\u0641\u0648 \u0639\u0644\u0649 \u0627\u0644\u0633\u0637\u062d","general_tab":"\u0639\u0627\u0645",list:"\u0642\u0627\u0626\u0645\u0647 \u0627\u0644\u0645\u0648\u0627\u0642\u0639","is_external":"\u0627\u0644\u0631\u0627\u0628\u0637 \u064a\u0628\u062f\u0648 \u0627\u0646\u0647 \u0644\u0645\u0648\u0642\u0639 \u062e\u0627\u0631\u062c\u0649 \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u0646\u0636\u0639 http://","is_email":"\u0627\u0644\u0631\u0627\u0628\u0637 \u064a\u0628\u062f\u0648 \u0628\u0631\u064a\u062f \u0627\u0644\u0627\u0643\u062a\u0631\u0648\u0646\u0649 \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u0646\u0636\u0639 \u0648\u0633\u0645 \u0631\u0627\u0628\u0637 \u0627\u0644\u0628\u0631\u064a\u062f",titlefield:"\u0627\u0633\u0645 \u0627\u0644\u0631\u0627\u0628\u0637",target:"\u0627\u0644\u0647\u062f\u0641",url:"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0631\u0627\u0628\u0637",title:"\u0627\u062f\u062e\u0627\u0644 -\u062a\u0639\u062f\u064a\u0644 \u0631\u0627\u0628\u0637","link_list":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0631\u0648\u0627\u0628\u0637",rtl:"\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631",ltr:"\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646",accesskey:"\u0645\u0641\u062a\u0627\u062d \u0627\u0644\u0648\u0635\u0648\u0644",tabindex:" Tab \u0641\u0647\u0631\u0633",rev:"\u0639\u0644\u0627\u0642\u0629 \u0627\u0644\u0647\u062f\u0641 \u0628\u0627\u0644\u0635\u0641\u062d\u0629",rel:"\u0639\u0644\u0627\u0642\u0629 \u0627\u0644\u0635\u0641\u062d\u0629 \u0628\u0627\u0644\u0647\u062f\u0641",mime:"\u0646\u0648\u0639 \u0645\u0644\u0641 \u0627\u0644\u0647\u062f\u0641",encoding:"\u0631\u0645\u0632 \u0627\u0644\u0644\u063a\u0629",langcode:"\u0643\u0648\u062f \u0627\u0644\u0644\u063a\u0647","target_langcode":"\u0644\u063a\u0629 \u0627\u0644\u0647\u062f\u0641",width:"\u0627\u0644\u0639\u0631\u0636",height:"\u0627\u0644\u0627\u0631\u062a\u0641\u0627\u0639"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/az_dlg.js
new file mode 100644
index 000000000..fe0eee299
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.advlink_dlg',{"target_name":"H\u0259d\u0259f ad\u0131",classes:"Sinifl\u0259r",style:"Sil",id:"\u0130dentifikator","popup_position":"M\u00f6vqe (X/Y)",langdir:"Dil istiqam\u0259ti","popup_size":"\u00f6l\u00e7\u00fc","popup_dependent":"As\u0131l\u0131 olan (yaln\u0131z Mozilla/Firefox)","popup_resizable":"P\u0259nc\u0259r\u0259 \u00f6l\u00e7\u00fcs\u00fcn\u00fc d\u0259yi\u015fil\u0259n et","popup_location":"\u00dcnvan s\u0259trini g\u00f6st\u0259r","popup_menubar":"Menyu s\u0259trini g\u00f6st\u0259r","popup_toolbar":"Al\u0259tl\u0259r panelini g\u00f6st\u0259r","popup_statusbar":"M\u0259tn v\u0259ziyy\u0259tini g\u00f6st\u0259r","popup_scrollbars":"F\u0131rlanan\u0131n zolaqlar\u0131n\u0131 g\u00f6st\u0259r","popup_return":"\'return false\' \u0259lav\u0259 et","popup_name":"P\u0259nc\u0259r\u0259nin ad\u0131","popup_url":"\u00dcz\u0259 \u00e7\u0131xan p\u0259nc\u0259r\u0259nin \u00fcnvan\u0131",popup:"\u00dcz\u0259 \u00e7\u0131xan Javascript-p\u0259nc\u0259r\u0259","target_blank":"Yeni p\u0259nc\u0259r\u0259d\u0259 a\u00e7","target_top":"Yuxar\u0131 \u00e7\u0259r\u00e7iv\u0259d\u0259 a\u00e7 (dig\u0259rl\u0259rini d\u0259 doldurur)","target_parent":"Ana p\u0259nc\u0259r\u0259d\u0259 a\u00e7 / \u00e7\u0259r\u00e7iv\u0259","target_same":"Bu p\u0259nc\u0259r\u0259d\u0259 a\u00e7 / \u00e7\u0259r\u00e7iv\u0259","anchor_names":"L\u00f6vb\u0259r","popup_opts":"Parametrl\u0259r","advanced_props":"\u018flav\u0259 x\u00fcsusiyy\u0259tl\u0259r","event_props":"Hadis\u0259l\u0259r","popup_props":"\u00dcz\u0259 \u00e7\u0131xan p\u0259nc\u0259r\u0259l\u0259rin x\u00fcsusiyy\u0259tl\u0259ti","general_props":"\u00dcmumi x\u00fcsusiyy\u0259tl\u0259ri","advanced_tab":"\u018flav\u0259l\u0259r","events_tab":"Hadis\u0259l\u0259r","popup_tab":"\u00dcz\u0259 \u00e7\u0131xan p\u0259nc\u0259r\u0259","general_tab":"\u00dcmumi",list:"Ke\u00e7id siyah\u0131s\u0131","is_external":"Daxil edil\u0259n \u00fcnvan xarici ke\u00e7id\u0259 b\u0259nz\u0259yir. http:// prefiksini \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?","is_email":"Daxil edil\u0259n \u00fcnvan e-po\u00e7ta b\u0259nz\u0259yir. mailto: prefiksini \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?",titlefield:"Ad\u0131",target:"H\u0259d\u0259f",url:"Ke\u00e7id \u00fcnvan\u0131",title:"Ke\u00e7idi \u0259lav\u0259/redakt\u0259 et","link_list":"Ke\u00e7id siyah\u0131s\u0131",rtl:"Sa\u011fda-sola",ltr:"Solda-sa\u011fa",accesskey:"Giri\u015f klavi\u015fi",tabindex:"Hesab indeksi",rev:"H\u0259d\u0259fin p\u0259nc\u0259r\u0259y\u0259 m\u00fcnasib\u0259ti",rel:"P\u0259nc\u0259r\u0259nin h\u0259d\u0259f\u0259 m\u00fcnasib\u0259ti",mime:"H\u0259d\u0259fli MIME-n\u00f6v",encoding:"H\u0259d\u0259fli kodla\u015fd\u0131rma",langcode:"Dil kodu","target_langcode":"H\u0259d\u0259fli dil",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/be_dlg.js
new file mode 100644
index 000000000..e4dcb3046
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.advlink_dlg',{"target_name":"\u0406\u043c\u044f \u043c\u044d\u0442\u044b",classes:"\u041a\u043b\u0430\u0441\u044b",style:"\u0421\u0442\u044b\u043b\u044c",id:"\u0406\u0434\u044d\u043d\u0442\u044b\u0444\u0456\u043a\u0430\u0442\u0430\u0440","popup_position":"\u041f\u0430\u0437\u0456\u0446\u044b\u044f (X/Y)",langdir:"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u043c\u043e\u0432\u044b","popup_size":"\u041f\u0430\u043c\u0435\u0440","popup_dependent":"\u0417\u0430\u043b\u0435\u0436\u043d\u044b\u044f (\u0442\u043e\u043b\u044c\u043a\u0456 Mozilla/Firefox)","popup_resizable":"\u0414\u0430\u0437\u0432\u043e\u043b\u0456\u0446\u044c \u0437\u043c\u044f\u043d\u044f\u0446\u044c \u043f\u0430\u043c\u0435\u0440","popup_location":"\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0430\u0434\u0440\u0430\u0441\u0443","popup_menubar":"\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u043c\u0435\u043d\u044e","popup_toolbar":"\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u043f\u0430\u043d\u044d\u043b\u0456 \u043f\u0440\u044b\u043b\u0430\u0434","popup_statusbar":"\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0441\u0442\u0430\u043d\u0443","popup_scrollbars":"\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u043f\u0430\u043b\u043e\u0441\u044b \u043f\u0440\u0430\u0433\u043e\u0440\u0442\u043a\u0456","popup_return":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \'return false\'","popup_name":"\u041d\u0430\u0437\u0432\u0430 \u0430\u043a\u043d\u0430","popup_url":"\u0410\u0434\u0440\u0430\u0441 \u0443\u0441\u043f\u043b\u044b\u0432\u0430\u043b\u044c\u043d\u0430\u0433\u0430 \u0430\u043a\u043d\u0430",popup:"\u0423\u0441\u043f\u043b\u044b\u0432\u0430\u043b\u044c\u043d\u0430\u0435 Javascript-\u0430\u043a\u043d\u043e","target_blank":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0443 \u043d\u043e\u0432\u044b\u043c \u0430\u043a\u043d\u0435","target_top":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0443 \u0432\u0435\u0440\u0445\u043d\u0456\u043c \u0444\u0440\u044d\u0439\u043c\u0435 (\u0437\u0430\u043c\u044f\u0448\u0447\u0430\u0435 \u045e\u0441\u0451 \u0430\u0441\u0442\u0430\u0442\u043d\u0456\u044f)","target_parent":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0443 \u0431\u0430\u0446\u044c\u043a\u043e\u045e\u0441\u043a\u0456\u043c \u0430\u043a\u043d\u0435 / \u0444\u0440\u044d\u0439\u043c\u0435","target_same":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0443 \u0433\u044d\u0442\u044b\u043c \u0430\u043a\u043d\u0435 / \u0444\u0440\u044d\u0439\u043c\u0435","anchor_names":"\u042f\u043a\u0430\u0440\u044b","popup_opts":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","advanced_props":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f \u045e\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456","event_props":"\u041f\u0430\u0434\u0437\u0435\u0456","popup_props":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u045e\u0441\u043f\u043b\u044b\u0432\u0430\u043b\u044c\u043d\u0430\u0433\u0430 \u0430\u043a\u043d\u0430","general_props":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f \u045e\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456","advanced_tab":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f","events_tab":"\u041f\u0430\u0434\u0437\u0435\u0456","popup_tab":"\u0423\u0441\u043f\u043b\u044b\u0432\u0430\u043b\u044c\u043d\u0430\u0435 \u0430\u043a\u043d\u043e","general_tab":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f",list:"\u0421\u043f\u0456\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a","is_external":"\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 \u0432\u043e\u043d\u043a\u0430\u0432\u0443\u044e \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443, \u0432\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043f\u0440\u044d\u0444\u0456\u043a\u0441 http://?","is_email":"\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 email, \u0432\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043f\u0440\u044d\u0444\u0456\u043a\u0441 mailto:?",titlefield:"\u041d\u0430\u0437\u0432\u0430",target:"\u041c\u044d\u0442\u0430",url:"\u0410\u0434\u0440\u0430\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456",title:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","link_list":"\u0421\u043f\u0456\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430",ltr:"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430",accesskey:"\u041a\u043b\u0430\u0432\u0456\u0448\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0443",tabindex:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a",rev:"\u0421\u0442\u0430\u045e\u043b\u0435\u043d\u043d\u0435 \u043c\u044d\u0442\u0430 \u0434\u0430 \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0456",rel:"\u0421\u0442\u0430\u045e\u043b\u0435\u043d\u043d\u0435 \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0430 \u0434\u0430 \u043c\u044d\u0442\u044b",mime:"\u041c\u044d\u0442\u0430\u0432\u044b MIME-\u0442\u044b\u043f",encoding:"\u041a\u0430\u0434\u0437\u0456\u0440\u043e\u045e\u043a\u0430 \u043c\u044d\u0442\u044b",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u044b","target_langcode":"\u041c\u043e\u0432\u0430 \u043c\u044d\u0442\u044b",width:"\u0428\u044b\u0440\u044b\u043d\u044f",height:"\u0412\u044b\u0448\u044b\u043d\u044f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bg_dlg.js
new file mode 100644
index 000000000..3b83fe4e4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.advlink_dlg',{"target_name":"\u0418\u043c\u0435 \u043d\u0430 \u0446\u0435\u043b",classes:"\u041a\u043b\u0430\u0441\u043e\u0432\u0435",style:"\u0421\u0442\u0438\u043b",id:"Id","popup_position":"\u041f\u043e\u0437\u0438\u0446\u0438\u044f (X/Y)",langdir:"\u041f\u043e\u0441\u043e\u043a\u0430 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430","popup_size":"\u0420\u0430\u0437\u043c\u0435\u0440","popup_dependent":"\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u0438 (Mozilla/Firefox only)","popup_resizable":"\u0420\u0430\u0437\u0440\u0435\u0448\u0438 \u043f\u0440\u0435\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u043e\u0437\u043e\u0440\u0446\u0438\u0442\u0435","popup_location":"\u041f\u043e\u043a\u0430\u0436\u0438 location bar","popup_menubar":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043b\u0435\u043d\u0442\u0430\u0442\u0430 \u0441 \u043c\u0435\u043d\u044e\u0442\u0430","popup_toolbar":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043b\u0435\u043d\u0442\u0438\u0442\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438","popup_statusbar":"\u041f\u043e\u043a\u0430\u0436\u0438 status bar","popup_scrollbars":"\u041f\u043e\u043a\u0430\u0436\u0438 \u0441\u043a\u0440\u043e\u043b\u0435\u0440\u0438","popup_return":"\u0412\u043c\u044a\u043a\u043d\u0438 \'return false\'","popup_name":"\u0418\u043c\u0435 \u043d\u0430 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u0430","popup_url":"URL \u043d\u0430 popup-\u0430",popup:"Javascript popup","target_blank":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432 \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446","target_top":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432 \u043d\u0430\u0439-\u0433\u043e\u0440\u043d\u0438\u044f \u0444\u0440\u0435\u0439\u043c (\u0437\u0430\u043c\u0435\u0441\u0442\u0432\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0444\u0440\u0435\u0439\u043c\u043e\u0432\u0435)","target_parent":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432 \u0433\u043e\u0440\u043d\u0438\u044f \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 / \u0444\u0440\u0435\u0439\u043c","target_same":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432 \u0442\u043e\u0437\u0438 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 / \u0444\u0440\u0435\u0439\u043c","anchor_names":"\u041a\u043e\u0442\u0432\u0438","popup_opts":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","advanced_props":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","event_props":"\u0421\u044a\u0431\u0438\u0442\u0438\u044f","popup_props":"Popup \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","general_props":"\u041e\u0431\u0449\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","advanced_tab":"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","events_tab":"\u0421\u044a\u0431\u0438\u0442\u0438\u044f","popup_tab":"Popup","general_tab":"\u041e\u0431\u0449\u0438",list:"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438","is_external":"URL-\u0442\u043e, \u043a\u043e\u0435\u0442\u043e \u0432\u044a\u0432\u0435\u0434\u043e\u0445\u0442\u0435 \u0435 \u0432\u044a\u043d\u0448\u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430, \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u0438\u044f\u0442 http:// \u043f\u0440\u0435\u0444\u0438\u043a\u0441?","is_email":"URL-\u0442\u043e, \u043a\u043e\u0435\u0442\u043e \u0432\u044a\u0432\u0435\u0434\u043e\u0445\u0442\u0435 \u0435 email \u0430\u0434\u0440\u0435\u0441, \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u0438\u044f\u0442 mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441?",titlefield:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",target:"\u0426\u0435\u043b",url:"URL \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430",title:"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","link_list":"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438",rtl:"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e",ltr:"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e",accesskey:"\u041a\u043b\u0430\u0432\u0438\u0448",tabindex:"\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u043d\u043e\u0441\u0442",rev:"\u0412\u0437\u0430\u0438\u043c\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0446\u0435\u043b - \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430",rel:"\u0412\u0437\u0430\u0438\u043c\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 - \u0446\u0435\u043b",mime:"MIME \u0442\u0438\u043f",encoding:"\u041a\u043e\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0442\u0435",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430","target_langcode":"\u0415\u0437\u0438\u043a",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bn_dlg.js
new file mode 100644
index 000000000..34e337219
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/br_dlg.js
new file mode 100644
index 000000000..8c341beda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.advlink_dlg',{"target_name":"Nome do alvo",classes:"Classes",style:"Estilo",id:"Id","popup_position":"Posi\u00e7\u00e3o (X/Y)",langdir:"Dire\u00e7\u00e3o do texto","popup_size":"Tamanho","popup_dependent":"Dependente (Mozilla/Firefox apenas)","popup_resizable":"Permitir altera\u00e7\u00e3o do tamanho da janela","popup_location":"Mostrar barra de endere\u00e7os","popup_menubar":"Mostrar barra de menu","popup_toolbar":"Mostrar barras de ferramentas","popup_statusbar":"Mostrar barra de status","popup_scrollbars":"Mostrar barras de scroll","popup_return":"Inserir \'return false\'","popup_name":"Nome da janela","popup_url":"URL do popup",popup:"Popup javascript","target_blank":"Abrir numa nova janela","target_top":"Abrir na p\u00e1gina inteira (substitui todos os quadros)","target_parent":"Abrir na janela/quadro pai","target_same":"Abrir nesta janela/quadro","anchor_names":"\u00c2ncoras","popup_opts":"Op\u00e7\u00f5es","advanced_props":"Propriedades avan\u00e7adas","event_props":"Eventos","popup_props":"Propriedades de popup","general_props":"Propriedades gerais","advanced_tab":"Avan\u00e7ado","events_tab":"Eventos","popup_tab":"Popup","general_tab":"Geral",list:"Lista de hyperlinks","is_external":"A URL digitada parece conduzir a um link externo. Deseja acrescentar o (necess\u00e1rio) prefixo http://?","is_email":"A URL digitada parece ser um endere\u00e7o de e-mail. Deseja acrescentar o (necess\u00e1rio) prefixo mailto:?",titlefield:"T\u00edtulo",target:"Alvo",url:"URL do hyperlink",title:"Inserir/editar hyperlink","link_list":"Lista de hyperlinks",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",accesskey:"Chave de acesso",tabindex:"Tabindex",rev:"Rela\u00e7\u00e3o alvo/p\u00e1gina",rel:"Rela\u00e7\u00e3o p\u00e1gina/alvo",mime:"Tipo MIME alvo",encoding:"Codifica\u00e7\u00e3o de caracteres",langcode:"C\u00f3digo da linguagem","target_langcode":"linguagem alvo",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bs_dlg.js
new file mode 100644
index 000000000..ae841aae1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.advlink_dlg',{"target_name":"Ime mete",classes:"Klasa",style:"Stil",id:"Id","popup_position":"Pozicija (X/Y)",langdir:"Smjer jezika","popup_size":"Veli\u010dina","popup_dependent":"Ovisan (samo za Mozilla/Firefox)","popup_resizable":"Prozor promjenjive veli\u010dine","popup_location":"Poka\u017ei traku lokacije","popup_menubar":"Poka\u017ei izbornik","popup_toolbar":"Poka\u017ei alatne trake","popup_statusbar":"Poka\u017ei statusnu traku","popup_scrollbars":"Poka\u017ei kliza\u010de","popup_return":"Umetni \'return false\'","popup_name":"Ime prozora","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Otvori u novom prozoru","target_top":"Otvori u gornjem okviru (zamjenjuje sve okvire)","target_parent":"Otvori u izvornom prozoru / okvir","target_same":"Otovori u novom prozoru / okviru","anchor_names":"Sidra","popup_opts":"Opcije","advanced_props":"Napredna svojstva","event_props":"Doga\u0111aji","popup_props":"Svojstva popup prozora","general_props":"Osnovna svojstva","advanced_tab":"Napredno","events_tab":"Doga\u0111aj","popup_tab":"Popup","general_tab":"Osnovno",list:"Lista poveznica","is_external":"URL koji ste unijeli izgleda kao vanjska poveznica, \u017eelite li dodati potrebni http:// prefiks?","is_email":"URL koji ste unijeli izgleda kao e-mail adresa, \u017eelite li dodati potrebni mailto: prefiks?",titlefield:"Naslov",target:"Meta",url:"URL poveznice",title:"Umetni/uredi poveznicu","link_list":"Lista poveznica",rtl:"S desna na lijevo",ltr:"S lijeva na desno",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Odnos mete prema stranici",rel:"Odnos stranice prema meti",mime:"MIME tip",encoding:"Kodiranje znakova",langcode:"Kod jezika","target_langcode":"Jezik",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ca_dlg.js
new file mode 100644
index 000000000..c580f73c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.advlink_dlg',{"target_name":"Nom del dest\u00ed",classes:"Classes",style:"Estil",id:"Id","popup_position":"Posici\u00f3 (X/Y)",langdir:"Direcci\u00f3 de l\'idioma","popup_size":"Mida","popup_dependent":"Dependent (nom\u00e9s Mozilla/Firefox)","popup_resizable":"Fes la finestra redimensionable","popup_location":"Mostra la barra d\'ubicaci\u00f3","popup_menubar":"Mostra la barra de men\u00fa","popup_toolbar":"Mostra la barra d\'eines","popup_statusbar":"Mostra la barra d\'estat","popup_scrollbars":"Mostra les barres de despla\u00e7ament","popup_return":"Insereix \'return false\'","popup_name":"Nom de la finestra","popup_url":"URL de la finestra emergent",popup:"Finestra emergent javascript","target_blank":"Obre en una nova finestra","target_top":"Obre en el marc superior (reempla\u00e7a tots els marcs)","target_parent":"Obre en la finestra / marc pare","target_same":"Obre en aquesta finestra / marc","anchor_names":"\u00c0ncores","popup_opts":"Opcions","advanced_props":"Propietats avan\u00e7ades","event_props":"Esdeveniments","popup_props":"Propietats de la finestra emergent","general_props":"Propietats generals","advanced_tab":"Avan\u00e7at","events_tab":"Esdeveniments","popup_tab":"Finestra emergent","general_tab":"General",list:"Llista d\'enlla\u00e7os","is_external":"L\'URL que heu introdu\u00eft sembla ser un enlla\u00e7 extern, voleu afegir-hi el prefix requerit http:// ?","is_email":"L\'URL que heu introdu\u00eft sembla ser una adre\u00e7a de correu electr\u00f2nic, voleu afegir-hi el prefix requerit mailto: ?",titlefield:"T\u00edtol",target:"Objectiu",url:"URL de l\'enlla\u00e7",title:"Insereix/edita enlla\u00e7","link_list":"Llista d\'enlla\u00e7os",rtl:"De dreta a esquerra",ltr:"D\'esquerra a dreta",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relaci\u00f3 de dest\u00ed a p\u00e0gina",rel:"Relaci\u00f3 de p\u00e0gina a dest\u00ed",mime:"Tipus MIME del dest\u00ed",encoding:"Codificaci\u00f3 de car\u00e0cters del dest\u00ed",langcode:"Codi de l\'idioma","target_langcode":"Idioma del dest\u00ed",width:"Amplada",height:"Al\u00e7ada"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ch_dlg.js
new file mode 100644
index 000000000..64fb278f2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u7c7b\u522b",style:"\u6837\u5f0f",id:"ID","popup_position":"\u4f4d\u7f6e\uff08X/Y\uff09",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u6d4f\u89c8\u5668\u9650\u5236\uff08\u4ec5\u652f\u63f4 Mozilla/Firefox\uff09","popup_resizable":"\u5f39\u7a97\u53ef\u8c03\u6574\u5927\u5c0f","popup_location":"\u663e\u793a\u5730\u5740\u680f","popup_menubar":"\u663e\u793a\u83dc\u5355\u5217","popup_toolbar":"\u663e\u793a\u5de5\u5177\u5217","popup_statusbar":"\u663e\u793a\u72b6\u6001\u5217","popup_scrollbars":"\u663e\u793a\u6eda\u52a8\u6761","popup_return":"\u63d2\u5165 \"return false\"","popup_name":"\u89c6\u7a97\u540d\u79f0","popup_url":"\u5f39\u51fa\u89c6\u7a97URL",popup:"JavaScript \u5f39\u51fa\u89c6\u7a97","target_blank":"\u5728\u65b0\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","target_top":"\u5728\u9876\u90e8\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","target_parent":"\u5728\u7236\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","target_same":"\u5728\u76ee\u524d\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","anchor_names":"\u4e66\u7b7e","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5f39\u51fa\u89c6\u7a97\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7\u5c5e\u6027","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5f39\u51fa\u89c6\u7a97","general_tab":"\u4e00\u822c",list:"\u8d85\u8fde\u7ed3\u6e05\u5355","is_external":"\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u4e3a\u5916\u90e8\u8d85\u8fde\u7ed3\uff0c\u662f\u5426\u8981\u52a0\u4e0a \"http://\" ?","is_email":"\u60a8\u8f93\u5165\u7684\u4f3c\u4e4e\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u52a0 mailto:?",titlefield:"\u6807\u9898",target:"\u76ee\u6807",url:"\u8d85\u8fde\u7ed3URL",title:"\u63d2\u5165/\u7f16\u8f91\u8d85\u8fde\u7ed3","link_list":"\u8d85\u8fde\u7ed3\u6e05\u5355",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",accesskey:"\u5feb\u901f\u952e",tabindex:"Tab\u7d22\u5f15",rev:"\u76ee\u6807\u5230\u7f51\u9875\u7684\u5173\u7cfb",rel:"\u7f51\u9875\u5230\u76ee\u6807\u7684\u5173\u7cfb",mime:"\u76ee\u6807MIME\u7c7b\u578b",encoding:"\u76ee\u6807\u8bed\u8a00\u7f16\u7801",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u6807\u8bed\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cn_dlg.js
new file mode 100644
index 000000000..b59b56031
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u7c7b\u522b",style:"\u6837\u5f0f",id:"Id\u7f16\u53f7","popup_position":"\u4f4d\u7f6e (X/Y)",langdir:"\u6587\u672c\u65b9\u5411","popup_size":"\u6587\u672c\u5927\u5c0f","popup_dependent":"\u6d4f\u89c8\u5668\u9650\u5236(\u4ec5\u652f\u6280Mozilla/Firefox)","popup_resizable":"\u7a97\u53e3\u5927\u5c0f\u53ef\u8c03","popup_location":"\u663e\u793a\u5730\u5740\u680f","popup_menubar":"\u663e\u793a\u83dc\u5355\u680f","popup_toolbar":"\u663e\u793a\u5de5\u5177\u680f","popup_statusbar":"\u663e\u793a\u72b6\u6001\u680f","popup_scrollbars":"\u663e\u793a\u6eda\u52a8\u6761","popup_return":"\u63d2\u5165 \"return false\"","popup_name":"\u65b0\u7a97\u53e3\u540d\u79f0","popup_url":"\u5f39\u7a97URL\u5730\u5740",popup:"JavaScript \u5f39\u51fa","target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00","target_top":"\u5728\u9876\u90e8\u7a97\u53e3\u6253\u5f00\u8d85\u94fe\u63a5","target_parent":"\u5728\u7236\u7ea7\u7a97\u53e3\u6253\u5f00\u8d85\u94fe\u63a5","target_same":"\u5728\u76ee\u524d\u7a97\u53e3\u6253\u5f00\u8d85\u94fe\u63a5","anchor_names":"\u951a\u70b9","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5f39\u51fa\u5c5e\u6027","general_props":"\u5e38\u89c4\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5f39\u7a97","general_tab":"\u5e38\u89c4",list:"\u94fe\u63a5\u5217\u8868","is_external":"\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u4e3a\u5916\u90e8\u8d85\u8fde\u7ed3\uff0c\u662f\u5426\u8981\u52a0\u4e0a \u201chttp://\u201d\u524d\u7f00?","is_email":"\u60a8\u8f93\u5165\u7684\u4f3c\u4e4e\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740,\u662f\u5426\u9700\u8981\u52a0 mailto:\uff1f",titlefield:"\u6807\u9898",target:"\u76ee\u6807",url:"\u94fe\u63a5URL\u5730\u5740",title:"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","link_list":"\u94fe\u63a5\u5217\u8868",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",accesskey:"\u5feb\u6377\u952e",tabindex:"Tab\u952e\u8bbf\u95ee\u987a\u5e8f",rev:"\u76ee\u6807\u5230\u7f51\u9875\u7684\u5173\u7cfb",rel:"\u7f51\u9875\u5230\u76ee\u6807\u7684\u5173\u7cfb",mime:"\u76ee\u6807MIME\u7c7b\u578b",encoding:"\u76ee\u6807\u5b57\u7b26\u96c6\uff08UTF-8\uff09",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u6807\u8bed\u8a00",width:"\u5bbd\u5ea6",height:"\u9ad8\u5ea6"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cs_dlg.js
new file mode 100644
index 000000000..d63122959
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.advlink_dlg',{"target_name":"N\u00e1zev c\u00edle",classes:"T\u0159\u00eddy",style:"Styl",id:"ID","popup_position":"Um\u00edst\u011bn\u00ed (X/Y)",langdir:"Sm\u011br textu","popup_size":"Velikost","popup_dependent":"Z\u00e1vislost (pouze Mozilla/Firefox)","popup_resizable":"Umo\u017enit zm\u011bnu velikosti","popup_location":"Zobrazit pole s adresou","popup_menubar":"Zobrazit nab\u00eddku","popup_toolbar":"Zobrazit panel n\u00e1stroj\u016f","popup_statusbar":"Zobrazit stavov\u00fd \u0159\u00e1dek","popup_scrollbars":"Zobrazit posuvn\u00edky","popup_return":"Vlo\u017eit \'return false\'","popup_name":"N\u00e1zev okna","popup_url":"URL vyskakovac\u00edho okna",popup:"Javascriptov\u00e9 okno","target_blank":"Otev\u0159\u00edt v nov\u00e9m okn\u011b/r\u00e1mu","target_top":"Otev\u0159\u00edt v hlavn\u00edm okn\u011b/r\u00e1mu (nahradit v\u0161echny r\u00e1my)","target_parent":"Otev\u0159\u00edt v nad\u0159azen\u00e9m okn\u011b/r\u00e1mu","target_same":"Otev\u0159\u00edt v tomto okn\u011b/r\u00e1mu","anchor_names":"Z\u00e1lo\u017eka","popup_opts":"Mo\u017enosti","advanced_props":"Roz\u0161\u00ed\u0159en\u00e9 parametry","event_props":"Ud\u00e1losti","popup_props":"Vlastnosti vyskakovac\u00edho okna","general_props":"Obecn\u00e9 parametry","advanced_tab":"Roz\u0161\u00ed\u0159en\u00e9","events_tab":"Ud\u00e1losti","popup_tab":"Vyskakovac\u00ed okno","general_tab":"Obecn\u00e9",list:"Seznam odkaz\u016f","is_external":"Zadan\u00e9 URL vypad\u00e1 jako extern\u00ed odkaz, chcete doplnit povinn\u00fd prefix http://?","is_email":"Zadan\u00e9 URL vypad\u00e1 jako e-mailov\u00e1 adresa, chcete doplnit povinn\u00fd prefix mailto:?",titlefield:"Titulek",target:"C\u00edl",url:"URL odkazu",title:"Vlo\u017eit/upravit odkaz","link_list":"Seznam odkaz\u016f",rtl:"Zprava doleva",ltr:"Zleva doprava",accesskey:"Kl\u00e1vesov\u00e1 zkratka",tabindex:"Po\u0159ad\u00ed pro tabul\u00e1tor",rev:"Vztah c\u00edle ke str\u00e1nce",rel:"Vztah str\u00e1nky k c\u00edli",mime:"MIME typ",encoding:"K\u00f3dov\u00e1n\u00ed",langcode:"K\u00f3d jazyka","target_langcode":"Jazyk c\u00edle",width:"\u0160\u00ed\u0159ka",height:"V\u00fd\u0161ka"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cy_dlg.js
new file mode 100644
index 000000000..770aeea9d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.advlink_dlg',{"target_name":"Enw targed",classes:"Dosbarthiadau",style:"Arddull",id:"Id","popup_position":"Safle (X/Y)",langdir:"Cyfeiriad iaith","popup_size":"Maint","popup_dependent":"Dibynnol (dim ond Mozilla/Firefox)","popup_resizable":"Gwneud ffenest yn ailfeintiol","popup_location":"Dangos bar lleoliad","popup_menubar":"Dangos bar dewislen","popup_toolbar":"Dangos barrau offer","popup_statusbar":"Dangor bar statws","popup_scrollbars":"Dangos bar sgrolio","popup_return":"Mewnosod \'return false\'","popup_name":"Enw ffenest","popup_url":"URL naidlen",popup:"Naidlen JavaScript","target_blank":"Agor mewn ffenest newydd","target_top":"Agor mewn pen ffr\u00e2m (amnewid pob ffr\u00e2m)","target_parent":"Agos mewn y ffenest / ffr\u00e2m rhiant","target_same":"Agos mewn y ffenest / ffr\u00e2m yma","anchor_names":"Angorau","popup_opts":"Dewisiadau","advanced_props":"Priodweddau uwch","event_props":"Digwyddiadau","popup_props":"Priodweddau cyffredinol","general_props":"Priodweddau cyfferdinol","advanced_tab":"Uwch","events_tab":"Digwyddiadau","popup_tab":"Naidlen","general_tab":"Cyffredinol",list:"Rhestr cysylltau","is_external":"Mae\'r URL a rydych wedi rhoi yn edrych fel cyswllt allannol, ydych chi eisiau ychwanegu\'r rhagddodiad http:// sydd angen?","is_email":"Mae\'r URL a rydych wedi rhoi yn edrych fel cyferiad e-bost, ydych chi eisiau ychwanegu\'r rhagddodiad mailto: sydd angen?",titlefield:"Teitl",target:"Targed",url:"URL cyswllt",title:"Mewnosod/Golygu cyswllt","link_list":"Rhestr cysylltau",rtl:"De i\'r chwith",ltr:"Chwith i\'r dde",accesskey:"Bysell mynediad",tabindex:"Trefn tabio",rev:"Perthynas y targed i\'r tudalen",rel:"Perthynas y tudalen i\'r targed",mime:"Math MIME targed",encoding:"Amgodiad nodau targed",langcode:"Cod iaith","target_langcode":"Iaith targed",width:"Lled",height:"Uchder"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/da_dlg.js
new file mode 100644
index 000000000..06f7fe3d8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.advlink_dlg',{"target_name":"Destinationsnavn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Position (X/Y)",langdir:"Sprogretning","popup_size":"St\u00f8rrelse","popup_dependent":"Afh\u00e6ngig (Kun Mozilla/Firefox)","popup_resizable":"Lad det v\u00e6re muligt at \u00e6ndre st\u00f8rrelsen p\u00e5 vinduet","popup_location":"Vis adresselinje","popup_menubar":"Vis menulinje","popup_toolbar":"Vis v\u00e6rkt\u00f8jslinjer","popup_statusbar":"Vis statuslinje","popup_scrollbars":"Vis rullepanel","popup_return":"Inds\u00e6t \'return false\'","popup_name":"Vinduesnavn","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u00c5ben i nyt vindue","target_top":"\u00c5ben i \u00f8verste vindue / ramme (erstatter alle rammer)","target_parent":"\u00c5ben i overliggende vindue / ramme","target_same":"\u00c5ben i dette vindue / ramme","anchor_names":"Ankre","popup_opts":"Indstillinger","advanced_props":"Avancerede egenskaber","event_props":"H\u00e6ndelser","popup_props":"Popup egenskaber","general_props":"Generelle egenskaber","advanced_tab":"Advanceret","events_tab":"H\u00e6ndelser","popup_tab":"Popup","general_tab":"Generelt",list:"Liste over links","is_external":"Den URL, der er indtastet, ser ud til at v\u00e6re et eksternt link. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede http:// foran?","is_email":"Den URL, der er indtastet, ser ud til at v\u00e6re en emailadresse. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede mailto: foran?",titlefield:"Titel",target:"M\u00e5l",url:"Link URL",title:"Inds\u00e6t/rediger link","link_list":"Liste over links",rtl:"H\u00f8jre mod venstre",ltr:"Venstre mod h\u00f8jre",accesskey:"Genvejstast",tabindex:"Tabindex",rev:"Relativ destination til side",rel:"Relativ side til destination",mime:"Destinations-MIME-type",encoding:"Destinationstegns\u00e6t",langcode:"Sprogkode","target_langcode":"Destinationssprog",width:"Bredde",height:"H\u00f8jde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/de_dlg.js
new file mode 100644
index 000000000..bb0d3e35b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.advlink_dlg',{"target_name":"Name der Zielseite",classes:"Klassen",style:"Format",id:"ID","popup_position":"Position (X/Y)",langdir:"Schriftrichtung","popup_size":"Gr\u00f6\u00dfe","popup_dependent":"Vom Elternfenster abh\u00e4ngig <br /> (nur Mozilla/Firefox) ","popup_resizable":"Vergr\u00f6\u00dfern des Fenster zulassen","popup_location":"Adressleiste anzeigen","popup_menubar":"Browsermen\u00fc anzeigen","popup_toolbar":"Werkzeugleisten anzeigen","popup_statusbar":"Statusleiste anzeigen","popup_scrollbars":"Scrollbalken anzeigen","popup_return":"Link trotz Popup folgen","popup_name":"Name des Fensters","popup_url":"Popup-Adresse",popup:"JavaScript-Popup","target_blank":"In neuem Fenster \u00f6ffnen","target_top":"Im obersten Frame \u00f6ffnen (sprengt das Frameset)","target_parent":"Im \u00fcbergeordneten Fenster/Frame \u00f6ffnen","target_same":"Im selben Fenster/Frame \u00f6ffnen","anchor_names":"Anker","popup_opts":"Optionen","advanced_props":"Erweiterte Eigenschaften","event_props":"Ereignisse","popup_props":"Popup-Eigenschaften","general_props":"Allemeine Eigenschaften","advanced_tab":"Erweitert","events_tab":"Ereignisse","popup_tab":"Popup","general_tab":"Allgemein",list:"Linkliste","is_external":"Diese Adresse scheint ein externer Link zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"http://\" voranstellen?","is_email":"Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"mailto:\" voranstellen?",titlefield:"Titel",target:"Fenster",url:"Adresse",title:"Link einf\u00fcgen/bearbeiten","link_list":"Linkliste",rtl:"Rechts nach links",ltr:"Links nach rechts",accesskey:"Tastenk\u00fcrzel",tabindex:"Tabindex",rev:"Beziehung des Linkziels zur Seite",rel:"Beziehung der Seite zum Linkziel",mime:"MIME-Type der Zielseite",encoding:"Zeichenkodierung der Zielseite",langcode:"Sprachcode","target_langcode":"Sprache der Zielseite",width:"Breite",height:"H\u00f6he"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/dv_dlg.js
new file mode 100644
index 000000000..8a326f876
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/el_dlg.js
new file mode 100644
index 000000000..dc093991e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.advlink_dlg',{"target_name":"\u038c\u03bd\u03bf\u03bc\u03b1 \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",classes:"\u039a\u03bb\u03ac\u03c3\u03b5\u03b9\u03c2",style:"\u03a3\u03c4\u03c5\u03bb",id:"Id","popup_position":"\u0398\u03ad\u03c3\u03b7 (X/Y)",langdir:"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2","popup_size":"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2","popup_dependent":"\u0395\u03be\u03b1\u03c1\u03c4\u03ce\u03bc\u03b5\u03bd\u03bf (\u03bc\u03cc\u03bd\u03bf \u03b3\u03b9\u03b1 Mozilla/Firefox)","popup_resizable":"\u039d\u03b1 \u03b1\u03bb\u03bb\u03ac\u03b6\u03bf\u03c5\u03bd \u03bf\u03b9 \u03b4\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 \u03c0\u03b1\u03c1\u03b1\u03b8\u03cd\u03c1\u03bf\u03c5","popup_location":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1\u03c2","popup_menubar":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03bc\u03b5\u03bd\u03bf\u03cd","popup_toolbar":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd","popup_statusbar":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2","popup_scrollbars":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c1\u03ac\u03b2\u03b4\u03c9\u03bd \u03ba\u03cd\u03bb\u03b9\u03c3\u03b7\u03c2","popup_return":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \'return false\'","popup_name":"\u038c\u03bd\u03bf\u03bc\u03b1 \u03c0\u03b1\u03c1\u03b1\u03b8\u03cd\u03c1\u03bf\u03c5","popup_url":"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c4\u03bf\u03c5 Popup",popup:"Javascript popup","target_blank":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03b5 \u03bd\u03ad\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf","target_top":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03c4\u03bf \u03c0\u03b9\u03bf \u03c0\u03ac\u03bd\u03c9 frame (\u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03b8\u03b9\u03c3\u03c4\u03ac \u03cc\u03bb\u03b1 \u03c4\u03b1 frames)","target_parent":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03c4\u03bf \u03b3\u03bf\u03bd\u03b9\u03ba\u03cc window / frame","target_same":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03b5 \u03af\u03b4\u03b9\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf / frame","anchor_names":"Anchors","popup_opts":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2","advanced_props":"\u03a0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b9\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","event_props":"\u0393\u03b5\u03b3\u03bf\u03bd\u03cc\u03c4\u03b1","popup_props":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 Popup","general_props":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ad\u03c2 \u03b9\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","advanced_tab":"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2","events_tab":"\u0393\u03b5\u03b3\u03bf\u03bd\u03cc\u03c4\u03b1","popup_tab":"Popup","general_tab":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac",list:"\u039b\u03af\u03c3\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd","is_external":"\u0397 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b1\u03c4\u03b5 \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2, \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c4\u03b5\u03b8\u03b5\u03af \u03c4\u03bf \u03b1\u03c0\u03b1\u03c1\u03b1\u03af\u03c4\u03b7\u03c4\u03bf http:// ;","is_email":"\u0397 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b1\u03c4\u03b5 \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 email, \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c4\u03b5\u03b8\u03b5\u03af \u03c4\u03bf \u03b1\u03c0\u03b1\u03c1\u03b1\u03af\u03c4\u03b7\u03c4\u03bf mailto: ;",titlefield:"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2",target:"\u03a3\u03c4\u03cc\u03c7\u03bf\u03c2",url:"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5",title:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","link_list":"\u039b\u03af\u03c3\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd",rtl:"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",ltr:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac",accesskey:"\u03a0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2",tabindex:"Tabindex",rev:"\u03a3\u03c7\u03ad\u03c3\u03b7 \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5 \u03c0\u03c1\u03bf\u03c2 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 (REV)",rel:"\u03a3\u03c7\u03ad\u03c3\u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2 \u03c0\u03c1\u03bf\u03c2 \u03c3\u03c4\u03cc\u03c7\u03bf (REL)",mime:"\u03a4\u03cd\u03c0\u03bf\u03c2 MIME \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",encoding:"\u039a\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",langcode:"\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2","target_langcode":"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1 \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",width:"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",height:"\u038e\u03c8\u03bf\u03c2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js
new file mode 100644
index 000000000..3169a5658
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/eo_dlg.js
new file mode 100644
index 000000000..2d13c2c2d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.advlink_dlg',{"target_name":"Nomo de celo",classes:"Klasoj",style:"Stilo",id:"Id","popup_position":"Pozicio (X/Y)",langdir:"Tekstodirekto","popup_size":"Grandeco","popup_dependent":"Dependa (nur Mozilla/Firefox)","popup_resizable":"Permesi \u015dan\u011di la grandecon de fenestro","popup_location":"Montri adresbreton","popup_menubar":"Montri menubreton","popup_toolbar":"Montri ilobreton","popup_statusbar":"Montri statbreton","popup_scrollbars":"Montri rulumskalojn","popup_return":"Enmeti \"return false\"","popup_name":"Nomo de la fenestro","popup_url":"URL de la \u015dprucfenestro",popup:"\u015cprucfenestro Javascript","target_blank":"Malfermi en novan fenestron","target_top":"Malfermi en la plej supran nivelon (anstata\u016digas \u0109iujn kadrojn)","target_parent":"Malfermi en la patran fenestron/kadron","target_same":"Malfermi en \u0109i tiun fenestron/kadron","anchor_names":"Ankroj","popup_opts":"Agordoj","advanced_props":"Spertaj atributoj","event_props":"Eventoj","popup_props":"Atributoj de \u015dprucfenestro","general_props":"\u011ceneralaj atributoj","advanced_tab":"Spertaj","events_tab":"Eventoj","popup_tab":"\u015cprucfenestro","general_tab":"\u011ceneralaj",list:"Listo de ligiloj","is_external":"La entajpita adreso \u015dajne kondukas al ekstera ligilo. \u0108u vi volas aldoni la necesan prefikson http://?","is_email":"La entajpita adreso \u015dajnas retpo\u015dtadreso. \u0108u vi volas aldoni la necesan prefikson mailto:?",titlefield:"Titolo",target:"Celo",url:"Adreso de ligilo",title:"Enmeti/redakti ligilon","link_list":"Listo de ligiloj",rtl:"Dekstre-Maldekstren",ltr:"Maldekstre-Dekstren",accesskey:"Alir\u015dlosilo",tabindex:"TabIndekso",rev:"Rilato celo/pa\u011do",rel:"Rilato pa\u011do/celo",mime:"MIME-Tipo de la celo",encoding:"Signa enkodigo",langcode:"Lingvokodo","target_langcode":"Cellingvo",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/es_dlg.js
new file mode 100644
index 000000000..2f48a3715
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.advlink_dlg',{"target_name":"Nombre del Target",classes:"Clases",style:"Estilo",id:"Id","popup_position":"Posici\u00f3n (X/Y)",langdir:"Direcci\u00f3n del lenguaje","popup_size":"Tama\u00f1o","popup_dependent":"Dependientes (s\u00f3lo Mozilla/Firefox)","popup_resizable":"Permitir cambiar el tama\u00f1o de la ventana","popup_location":"Barra de localizaci\u00f3n","popup_menubar":"Barra de men\u00fa","popup_toolbar":"Barra de herramientas","popup_statusbar":"Barra de estado","popup_scrollbars":"Barras de desplazamiento","popup_return":"Insertar \'return false\'","popup_name":"Nombre de la ventana","popup_url":"URL de la ventana emergente",popup:"Javascript popup","target_blank":"Abrir en ventana nueva","target_top":"Abrir en el marco superior (reemplaza todos los marcos)","target_parent":"Abrir en ventana padre / marco","target_same":"Abrir en esta ventana / marco","anchor_names":"Anclas","popup_opts":"Opciones","advanced_props":"Propiedades avanzadas","event_props":"Eventos","popup_props":"Propiedades de ventanas emergentes","general_props":"Propiedades generales","advanced_tab":"Avanzado","events_tab":"Eventos","popup_tab":"Ventana emergente","general_tab":"General",list:"Lista de v\u00ednculos","is_external":"La URL que ha introducido parece ser un v\u00ednculo externo, \u00bfdesea agregar el prefijo http:// necesario?","is_email":"La URL que ha introducido parece ser una direci\u00f3n de correo, \u00bfdesea agregar el prefijo mailto: necesario?",titlefield:"T\u00edtulo",target:"Destino",url:"URL del hiperv\u00ednculo",title:"Insertar/editar hiperv\u00ednculo","link_list":"Lista de v\u00ednculo",rtl:"Derecha a izquierda",ltr:"Izquierda a derecha",accesskey:"Tecla de acceso",tabindex:"Indice de tabulaci\u00f3n",rev:"Relaci\u00f3n target a p\u00e1gina",rel:"Relaci\u00f3n p\u00e1gina a target",mime:"Tipo MIME del Target",encoding:"Codificaci\u00f3n de caracteres del Target",langcode:"C\u00f3digo del lenguaje","target_langcode":"Lenguaje del Target",width:"Ancho",height:"Alto"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/et_dlg.js
new file mode 100644
index 000000000..f8431bdea
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.advlink_dlg',{"target_name":"Sihtm\u00e4rgi nimi",classes:"Klassid",style:"Stiil",id:"ID","popup_position":"Positsioon (X/Y)",langdir:"Keele suund","popup_size":"Suurus","popup_dependent":"S\u00f5ltuv (ainult Mozilla/Firefox)","popup_resizable":"Muuda akna suurus muudetavaks","popup_location":"N\u00e4ita asukohariba","popup_menubar":"N\u00e4ita men\u00fc\u00fcriba","popup_toolbar":"N\u00e4ita seadistusriba","popup_statusbar":"N\u00e4ita staatuse riba","popup_scrollbars":"N\u00e4ita kerimisribasid","popup_return":"Sisesta \'tagasiminek eba\u00f5nnestus\'","popup_name":"Akna nimi","popup_url":"Pop-up\u2019i URL",popup:"Javascript\u2019i pop-up","target_blank":"Ava uues aknas","target_top":"Ava k\u00f5rgeimas raamis (asenda k\u00f5ik raamid)","target_parent":"Ava pea-aknas/raamis","target_same":"Ava selles aknas/raamis","anchor_names":"Ankrud","popup_opts":"Valikud","advanced_props":"\u00dcldised seadistused","event_props":"S\u00fcndmused","popup_props":"Pop-up\u2019i seadistus","general_props":"\u00dcldised seadistused","advanced_tab":"P\u00f5hjalikum","events_tab":"S\u00fcndmused","popup_tab":"Pop-up","general_tab":"\u00dcldine",list:"Linkide nimekiri","is_external":"URL, mille sisestasid, tundub olevat v\u00e4line link, kas soovid sellele lisada http://?","is_email":" URL, mille sisestasid, tundub olevat e-posti aadress, kas soovid sellele lisada mailto: funktsiooni?",titlefield:"Pealkiri",target:"Sihtm\u00e4rk",url:" URL\u2019i link",title:"Sisesta muuda linki","link_list":"Linkide list",rtl:"Paremalt vasakule",ltr:"Vasakult paremale",accesskey:"Ligip\u00e4\u00e4suklahv",tabindex:"Sisujuht",rev:"Seo sihtm\u00e4rk lehega",rel:"Seo leht sihtm\u00e4rgiga",mime:"M\u00e4rgista MIME t\u00fc\u00fcp",encoding:"Sihtm\u00e4rgi kodeering",langcode:"Keele kood","target_langcode":"Sihtm\u00e4rgi keel",width:"Laius",height:"K\u00f5rgus"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/eu_dlg.js
new file mode 100644
index 000000000..5e6c7ef52
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.advlink_dlg',{"target_name":"Helburuaren izena",classes:"Klaseak",style:"Estiloa",id:"Id","popup_position":"Kokapena (X/Y)",langdir:"Hizkuntzaren norabidea","popup_size":"Tamaina","popup_dependent":"Menpekoa (Mozilla/Firefoxen bakarrik)","popup_resizable":"Leihoaren tamaina aldatzea aktibatu","popup_location":"Helbide-barra erakutsi","popup_menubar":"Menu-barra erakutsi","popup_toolbar":"Tresna-barrak erakutsi","popup_statusbar":"Egoera-barra erakutsi","popup_scrollbars":"Gora-behera barra erakutsi","popup_return":"\'return false\' txertatu","popup_name":"Leihoaren izena","popup_url":"Popuparen URL helbidea",popup:"Javascript popupa","target_blank":"Leiho berrian ireki","target_top":"Gorengo markoan ireki (marko guztiak ordezkatzen ditu)","target_parent":"Leiho/marko gurasoan ireki","target_same":"Leiho/marko honetan ireki","anchor_names":"Aingurak","popup_opts":"Aukerak","advanced_props":"Aukera aurreratuak","event_props":"Ebentuak","popup_props":"Popuparen aukerak","general_props":"Aukera orokorrak","advanced_tab":"Gehigarriak","events_tab":"Ebentuak","popup_tab":"Popupa","general_tab":"Orokorra",list:"Lotura-zerrenda","is_external":"Sartutako helbideak kanpoko webgune batena dirudi, aurretik http:// gehitzea nahi duzu?","is_email":"Sartutako helbideak e-posta bat dirudi, aurretik mailto: gehitzea nahi duzu?",titlefield:"Izenburua",target:"Helburua",url:"Loturaren URL helbidea",title:"Lotura txertatu/editatu","link_list":"Lotura-zerrenda",rtl:"Eskuinetik ezkerrera",ltr:"Ezkerretik eskuinera",accesskey:"Laster-tekla",tabindex:"Tabulazio ordena",rev:"Helburuaren eta orrialdearen arteko erlazioa",rel:"Orrialdearen eta helburuaren arteko erlazioa",mime:"Helburuaren MIME mota",encoding:"Helburuaren karaktere-kodeketa",langcode:"Hizkuntza-kodea","target_langcode":"Helburu-hizkuntza",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fa_dlg.js
new file mode 100644
index 000000000..d500971a7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.advlink_dlg',{"target_name":"\u0646\u0627\u0645 \u0645\u0642\u0635\u062f (Target)",classes:"\u06a9\u0644\u0627\u0633 \u0647\u0627",style:"\u0627\u0633\u062a\u0627\u06cc\u0644",id:"\u0634\u0646\u0627\u0633\u0647","popup_position":"\u0645\u0648\u0642\u0639\u06cc\u062a (X/Y)",langdir:"\u062c\u0647\u062a \u0632\u0628\u0627\u0646","popup_size":"\u0627\u0646\u062f\u0627\u0632\u0647","popup_dependent":"\u0648\u0627\u0628\u0633\u062a\u0647 (\u0641\u0642\u0637 Mozilla/Firefox)","popup_resizable":"\u0627\u06cc\u062c\u0627\u062f \u067e\u0646\u062c\u0631\u0647 \u0642\u0627\u0628\u0644 \u0627\u0646\u062f\u0627\u0632\u0647 \u0628\u0646\u062f\u06cc \u0645\u062c\u062f\u062f","popup_location":"\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u0627\u0631 \u0645\u06a9\u0627\u0646","popup_menubar":"\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u0627\u0631 \u0645\u0646\u0648","popup_toolbar":"\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631","popup_statusbar":"\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u0627\u0631 \u0648\u0636\u0639\u06cc\u062a","popup_scrollbars":"\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u0627\u0631 \u067e\u06cc\u0645\u0627\u06cc\u0634 \u0647\u0627","popup_return":"\u062f\u0631\u062c \'return false\'","popup_name":"\u0646\u0627\u0645 \u067e\u0646\u062c\u0631\u0647","popup_url":"\u0622\u062f\u0631\u0633 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648 (Popup)",popup:"\u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648\u06cc Javascript","target_blank":"\u0628\u0627\u0632\u0634\u062f\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u062c\u062f\u06cc\u062f","target_top":"\u0628\u0627\u0632\u0634\u062f\u0646 \u062f\u0631 \u0642\u0627\u0628 \u0628\u0627\u0644\u0627 (Top Frame) (\u062a\u0645\u0627\u0645\u06cc \u0642\u0627\u0628 \u0647\u0627 \u0631\u0627 \u062a\u0639\u0648\u06cc\u0636 \u0645\u06cc \u06a9\u0646\u062f)","target_parent":"\u0628\u0627\u0632\u0634\u062f\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 / \u0642\u0627\u0628 \u0648\u0627\u0644\u062f (Parent Frame)","target_same":"\u0628\u0627\u0632\u0634\u062f\u0646 \u062f\u0631 \u0627\u06cc\u0646 \u067e\u0646\u062c\u0631\u0647 / \u0642\u0627\u0628 (Frame)","anchor_names":"\u0644\u0646\u06af\u0631\u0647\u0627 (Anchor)","popup_opts":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a","advanced_props":"\u0645\u0634\u062e\u0635\u0627\u062a \u067e\u06cc\u0634\u0631\u0641\u062a\u0647","event_props":"\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627","popup_props":"\u0645\u0634\u062e\u0635\u0627\u062a \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648 (Popup)","general_props":"\u0645\u0634\u062e\u0635\u0627\u062a \u0639\u0645\u0648\u0645\u06cc","advanced_tab":"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647","events_tab":"\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627","popup_tab":"\u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648 (Popup)","general_tab":"\u0639\u0645\u0648\u0645\u06cc",list:"\u0644\u06cc\u0633\u062a \u0644\u06cc\u0646\u06a9","is_external":"\u0622\u062f\u0631\u0633 \u0648\u0628\u06cc \u06a9\u0647 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0622\u06cc\u062f \u06a9\u0647 \u06cc\u06a9 \u0644\u06cc\u0646\u06a9 \u062e\u0627\u0631\u062c\u06cc \u0645\u06cc \u0628\u0627\u0634\u062f \u060c \u0622\u06cc\u0627 \u0645\u0627\u06cc\u0644\u06cc\u062f \u062a\u0627 \u067e\u06cc\u0634\u0648\u0646\u062f \u0644\u0627\u0632\u0645\u0647 //:http \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f\u061f","is_email":"\u0622\u062f\u0631\u0633 \u0648\u0628\u06cc \u06a9\u0647 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0622\u06cc\u062f \u06a9\u0647 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644 \u0645\u06cc \u0628\u0627\u0634\u062f \u060c \u0622\u06cc\u0627 \u0645\u0627\u06cc\u0644\u06cc\u062f \u062a\u0627 \u067e\u06cc\u0634\u0648\u0646\u062f \u0644\u0627\u0632\u0645\u0647 :mailto \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f\u061f",titlefield:"\u0639\u0646\u0648\u0627\u0646",target:"\u0645\u0642\u0635\u062f (Target)",url:"\u0622\u062f\u0631\u0633 \u0644\u06cc\u0646\u06a9",title:"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u06cc\u0646\u06a9","link_list":"\u0644\u06cc\u0633\u062a \u0644\u06cc\u0646\u06a9",rtl:"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e",ltr:"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a",accesskey:"\u06a9\u0644\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc",tabindex:"TabIndex",rev:"\u0631\u0627\u0628\u0637\u0647 \u0645\u0642\u0635\u062f (Target) \u0628\u0627 \u0635\u0641\u062d\u0647",rel:"\u0631\u0627\u0628\u0637\u0647 \u0635\u0641\u062d\u0647 \u0628\u0627 \u0645\u0642\u0635\u062f (Target)",mime:"\u0646\u0648\u0639 MIME \u0645\u0642\u0635\u062f (Target)",encoding:"\u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0645\u0642\u0635\u062f (Target)",langcode:"\u06a9\u062f \u0632\u0628\u0627\u0646","target_langcode":"\u0632\u0628\u0627\u0646 \u0645\u0642\u0635\u062f (Target)",width:"\u067e\u0647\u0646\u0627",height:"\u0627\u0631\u062a\u0641\u0627\u0639"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fi_dlg.js
new file mode 100644
index 000000000..e49488e73
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.advlink_dlg',{"target_name":"Kohteen nimi",classes:"Luokat",style:"Tyyli",id:"Id","popup_position":"Sijainti (X/Y)",langdir:"Kielen suunta","popup_size":"Koko","popup_dependent":"Riippuvainen (vain Mozilla/Firefox)","popup_resizable":"Tee ikkunan koko muokattavaksi","popup_location":"N\u00e4yt\u00e4 sijaintipalkki","popup_menubar":"N\u00e4yt\u00e4 valikkopalkki","popup_toolbar":"N\u00e4yt\u00e4 ty\u00f6kalut","popup_statusbar":"N\u00e4yt\u00e4 tilapalkki","popup_scrollbars":"N\u00e4yt\u00e4 vierityspalkit","popup_return":"Lis\u00e4\u00e4 \'return false\'","popup_name":"Ikkunan nimi","popup_url":"Ponnahdusikkunan URL",popup:"JavaScript-ponnahdusikkuna","target_blank":"Avaa uudessa ikkunassa","target_top":"Avaa ylimm\u00e4ss\u00e4 ruudussa (korvaa kaikki ruudut)","target_parent":"Avaa ylemm\u00e4ss\u00e4 ikkunassa","target_same":"Avaa t\u00e4ss\u00e4 ikkunassa","anchor_names":"Ankkurit","popup_opts":"Valinta","advanced_props":"Edistyneet asetukset","event_props":"Tapahtumat (events)","popup_props":"Ponnahdusikkunan asetukset","general_props":"Yleiset asetukset","advanced_tab":"Edistynyt","events_tab":"Tapahtumat","popup_tab":"Ponnahdusikkuna","general_tab":"Yleiset",list:"Linkkilista","is_external":"Sy\u00f6tt\u00e4m\u00e4si URL n\u00e4ytt\u00e4\u00e4 olevan sivuston ulkoinen osoite, haluatko lis\u00e4t\u00e4 http://-etuliitteen?","is_email":"Sy\u00f6tt\u00e4m\u00e4si URL n\u00e4ytt\u00e4\u00e4 olevan s\u00e4hk\u00f6postiosoite, haluatko lis\u00e4t\u00e4 mailto:-etuliitteen?",titlefield:"Otsikko",target:"Kohde (target)",url:"Linkin URL",title:"Lis\u00e4\u00e4/muokkaa linkki\u00e4","link_list":"Linkkilista",rtl:"Oikealta vasemmalle",ltr:"Vasemmalta oikealle",accesskey:"Pikan\u00e4pp\u00e4in",tabindex:"Tabulaattori-indeksi",rev:"Kohteen suhde sivuun",rel:"Sivun suhde kohteeseen",mime:"Kohteen MIME-tyyppi",encoding:"Kohteen merkist\u00f6koodaus",langcode:"Kielen koodi","target_langcode":"Kohteen kieli",width:"Leveys",height:"Korkeus"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fr_dlg.js
new file mode 100644
index 000000000..38e5a7858
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.advlink_dlg',{"target_name":"Nom de la cible",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Sens de lecture","popup_size":"Taille","popup_dependent":"D\u00e9pendante (seulement sous Mozilla/Firefox)","popup_resizable":"Autoriser le redimensionnement de la fen\u00eatre","popup_location":"Afficher la barre d\'adresse","popup_menubar":"Afficher la barre de menu","popup_toolbar":"Afficher la barre d\'outils","popup_statusbar":"Afficher la barre d\'\u00e9tat","popup_scrollbars":"Afficher les ascenseurs","popup_return":"Ins\u00e9rer \'return false\'","popup_name":"Nom de la fen\u00eatre","popup_url":"URL de la popup",popup:"Popup Javascript","target_blank":"Ouvrir dans une nouvelle fen\u00eatre","target_top":"Ouvrir dans le cadre principal (remplace tous les cadres)","target_parent":"Ouvrir dans la fen\u00eatre / le cadre parent","target_same":"Ouvrir dans cette fen\u00eatre / dans ce cadre","anchor_names":"Ancres","popup_opts":"Options","advanced_props":"Propri\u00e9t\u00e9s avanc\u00e9es","event_props":"\u00c9v\u00e8nements","popup_props":"Propri\u00e9t\u00e9s de la popup","general_props":"Propri\u00e9t\u00e9s g\u00e9n\u00e9rales","advanced_tab":"Avanc\u00e9","events_tab":"\u00c9v\u00e8nements","popup_tab":"Popup","general_tab":"G\u00e9n\u00e9ral",list:"Liste de liens","is_external":"L\'URL que vous avez saisie semble \u00eatre une adresse web externe. Souhaitez-vous ajouter le pr\u00e9fixe \u00ab http:// \u00bb ?","is_email":"L\'URL que vous avez saisie semble \u00eatre une adresse e-mail, souhaitez-vous ajouter le pr\u00e9fixe \u00ab mailto: \u00bb ?",titlefield:"Titre",target:"Cible",url:"URL du lien",title:"Ins\u00e9rer / \u00e9diter un lien","link_list":"Liste des liens",rtl:"Droite \u00e0 gauche",ltr:"Gauche \u00e0 droite",accesskey:"Touche d\'acc\u00e8s rapide",tabindex:"Tabindex",rev:"Relation de la cible \u00e0 la page",rel:"Relation de la page \u00e0 la cible",mime:"Type MIME de la cible",encoding:"Encodage de la cible",langcode:"Code de la langue","target_langcode":"Langue de la cible",width:"Largeur",height:"Hauteur"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/gl_dlg.js
new file mode 100644
index 000000000..8b38a8e7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.advlink_dlg',{"target_name":"Nome do obxetivo",classes:"Clases",style:"Estilo",id:"Id","popup_position":"Posici\u00f3n (X/Y)",langdir:"Direcci\u00f3n da lenguaxe","popup_size":"Tama\u00f1o","popup_dependent":"Dependentes (s\u00f3lo Mozilla/Firefox)","popup_resizable":"Permitir cambia-lo tama\u00f1o da vent\u00e1","popup_location":"Barra de localizaci\u00f3n","popup_menubar":"Barra de men\u00fa","popup_toolbar":"Barra de ferramentas","popup_statusbar":"Barra de estado","popup_scrollbars":"Barras de desprazamento","popup_return":"Insertar \'return false\'","popup_name":"Nome da vent\u00e1","popup_url":"URL da vent\u00e1 emerxente",popup:"Javascript popup","target_blank":"Abrir en vent\u00e1 nova","target_top":"Abrir no marco superior (reemplaza todo-los marcos)","target_parent":"Abrir na vent\u00e1 / marco padre","target_same":"Abrir nesta vent\u00e1 / marco","anchor_names":"\u00c1ncoras","popup_opts":"Opci\u00f3ns","advanced_props":"Propiedades avanzadas","event_props":"Eventos","popup_props":"Propiedades de vent\u00e1s emerxentes","general_props":"Propiedades xerales","advanced_tab":"Avanzado","events_tab":"Eventos","popup_tab":"Ventana emerxente","general_tab":"Xeral",list:"Lista de v\u00ednculos","is_external":"A URL introducida semella ser un v\u00ednculo externo, \u00bfDesexa engadi-lo prefixo necesario http://?","is_email":"A URL introducida semella ser un enderezo de e-mail, \u00bfDesexa engadi-lo prefixo necesario mailto:?",titlefield:"T\u00edtulo",target:"Destino",url:"URL do hiperv\u00ednculo",title:"Insertar/editar hiperv\u00ednculo","link_list":"Lista de v\u00ednculo",rtl:"Dereita a esquerda",ltr:"Esquerda a dereita",accesskey:"Tecla de acceso",tabindex:"\u00cdndice de tabulaci\u00f3n",rev:"Relaci\u00f3n obxetivo a p\u00e1xina",rel:"Relaci\u00f3n p\u00e1xina a obxetivo",mime:"Tipo MIME do obxetivo",encoding:"Codificaci\u00f3n de caracteres do obxetivo",langcode:"C\u00f3digo da lenguaxe","target_langcode":"Lenguaxe do obxetivo",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/gu_dlg.js
new file mode 100644
index 000000000..10464f090
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/he_dlg.js
new file mode 100644
index 000000000..7ea21bdaa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"\u05e1\u05d2\u05e0\u05d5\u05df",id:"\u05de\u05e1\u05e4\u05e8 \u05e1\u05d9\u05d3\u05d5\u05e8\u05d9","popup_position":"\u05de\u05d9\u05e7\u05d5\u05dd (X/Y)",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4","popup_size":"\u05d2\u05d5\u05d3\u05dc","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"\u05d7\u05dc\u05d5\u05df \u05d3\u05d9\u05e0\u05d0\u05de\u05d9(resizable)","popup_location":"\u05d4\u05e6\u05d2\u05ea location bar ","popup_menubar":"\u05d4\u05e6\u05d2\u05ea \u05ea\u05e4\u05e8\u05d9\u05d8","popup_toolbar":"\u05d4\u05e6\u05d2\u05ea \u05e1\u05e8\u05d2\u05dc\u05d9 \u05db\u05dc\u05d9\u05dd","popup_statusbar":"\u05d4\u05e6\u05d2\u05ea \u05e9\u05d5\u05e8\u05ea \u05e1\u05d8\u05d0\u05d8\u05d5\u05e1","popup_scrollbars":"\u05d4\u05e6\u05d2\u05ea \u05e4\u05e1 \u05d2\u05dc\u05d9\u05dc\u05d4","popup_return":"\u05d9\u05e9 \u05dc\u05d4\u05db\u05e0\u05d9\u05e1 \'return false\'","popup_name":"\u05e9\u05dd \u05d4\u05d7\u05dc\u05d5\u05df","popup_url":"\u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5 URL",popup:"\u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5 javascript","target_blank":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9","target_top":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05d7\u05dc\u05d5\u05df \u05d4\u05d1\u05df \u05d4\u05e8\u05d0\u05e9\u05d9(\u05de\u05d7\u05dc\u05d9\u05e3 \u05d0\u05ea \u05db\u05dc \u05d7\u05dc\u05d5\u05e0\u05d5\u05ea \u05d4\u05d1\u05e0\u05d9\u05dd)","target_parent":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05dc\u05d5\u05df \u05d4\u05d0\u05d1\u05d0/\u05d7\u05dc\u05d5\u05df \u05d1\u05df","target_same":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9/\u05d7\u05dc\u05d5\u05df \u05d1\u05df","anchor_names":"\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05e1\u05d9\u05de\u05e0\u05d9\u05d4","popup_opts":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea","advanced_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05de\u05ea\u05e7\u05d3\u05de\u05d5\u05ea","event_props":"\u05de\u05d0\u05d5\u05e8\u05e2\u05d5\u05ea","popup_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5","general_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05db\u05dc\u05dc\u05d9\u05d5\u05ea","advanced_tab":"\u05de\u05ea\u05e7\u05d3\u05dd","events_tab":"\u05d0\u05e8\u05d5\u05e2\u05d9\u05dd","popup_tab":"\u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5","general_tab":"\u05db\u05dc\u05dc\u05d9",list:"\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd","is_external":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9 \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea http:// \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?","is_email":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05db\u05ea\u05d5\u05d1\u05ea \u05de\u05d9\u05d9\u05dc \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea MAILTO \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?",titlefield:"\u05db\u05d5\u05ea\u05e8\u05ea \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8",target:"\u05d9\u05e2\u05d3",url:"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8",title:"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","link_list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4","target_langcode":"Target language",width:"\u05e8\u05d5\u05d7\u05d1",height:"\u05d2\u05d5\u05d1\u05d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hi_dlg.js
new file mode 100644
index 000000000..5c31c6d2e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hr_dlg.js
new file mode 100644
index 000000000..37001bd12
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.advlink_dlg',{"target_name":"Ime mete",classes:"Klasa",style:"Stil",id:"Id","popup_position":"Pozicija (X/Y)",langdir:"Smjer jezika","popup_size":"Veli\u010dina","popup_dependent":"Ovisan (samo za Mozilla/Firefox)","popup_resizable":"Prozor promjenjive veli\u010dine","popup_location":"Poka\u017ei traku lokacije","popup_menubar":"Poka\u017ei izbornik","popup_toolbar":"Poka\u017ei alatne trake","popup_statusbar":"Poka\u017ei statusnu traku","popup_scrollbars":"Poka\u017ei kliza\u010de","popup_return":"Umetni \'return false\'","popup_name":"Ime prozora","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Otvori u novom prozoru","target_top":"Otvori u gornjem okviru (zamjenjuje sve okvire) (_top)","target_parent":"Otvori u izvornom prozoru / okvir","target_same":"Otovori u ovom prozoru / okviru","anchor_names":"Sidra","popup_opts":"Opcije","advanced_props":"Napredna svojstva","event_props":"Doga\u0111aji","popup_props":"Svojstva popup prozora","general_props":"Osnovna svojstva","advanced_tab":"Napredno","events_tab":"Doga\u0111aj","popup_tab":"Popup","general_tab":"Op\u0107e",list:"Lista linkova","is_external":"URL koji ste unijeli izgleda kao vanjski link, \u017eelite li dodati potrebni http:// prefiks?","is_email":"URL koji ste unijeli izgleda kao e-mail adresa, \u017eelite li dodati potrebni mailto: prefiks?",titlefield:"Naslov",target:"Meta",url:"URL linkovi",title:"Umetni/uredi link","link_list":"Lista linkova",rtl:"S desna na lijevo",ltr:"S lijeva na desno",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Odnos mete prema stranici",rel:"Odnos stranice prema meti",mime:"MIME tip",encoding:"Kodiranje znakova",langcode:"Kod jezika","target_langcode":"Jezik mete",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hu_dlg.js
new file mode 100644
index 000000000..9cf1c8fbe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.advlink_dlg',{"target_name":"C\u00e9l neve",classes:"Class-ok",style:"Style",id:"Id","popup_position":"Poz\u00edci\u00f3 (X/Y)",langdir:"Nyelv \u00edr\u00e1s ir\u00e1ny","popup_size":"M\u00e9ret","popup_dependent":"F\u00fcgg\u0151 (csak Mozilla/Firefox)","popup_resizable":"\u00c1tm\u00e9retezhet\u0151 ablak","popup_location":"C\u00edm mez\u0151 mutat\u00e1sa","popup_menubar":"Men\u00fcsor mutat\u00e1sa","popup_toolbar":"Eszk\u00f6zsor mutat\u00e1sa","popup_statusbar":"St\u00e1tuszsor mutat\u00e1sa","popup_scrollbars":"G\u00f6rget\u0151s\u00e1vok mutat\u00e1sa","popup_return":"\'return false\' besz\u00far\u00e1sa","popup_name":"Ablakn\u00e9v","popup_url":"Felugr\u00f3 ablak URL",popup:"JavaScript felugr\u00f3 ablak","target_blank":"\u00daj ablakban megnyit\u00e1s","target_top":"Azonos ablakban/keretben megnyit\u00e1s legfel\u00fcl","target_parent":"Sz\u00fcl\u0151 ablakban/keretben megnyit\u00e1s","target_same":"Azonos ablakban/keretben megnyit\u00e1s","anchor_names":"Horgonyok","popup_opts":"Be\u00e1ll\u00edt\u00e1sok","advanced_props":"Halad\u00f3 tulajdons\u00e1gok","event_props":"Esem\u00e9nyek","popup_props":"Felugr\u00f3 ablak tulajdons\u00e1gai","general_props":"\u00c1ltal\u00e1nos tulajdons\u00e1gok","advanced_tab":"Halad\u00f3","events_tab":"Esem\u00e9nyek","popup_tab":"Felugr\u00f3 ablak","general_tab":"\u00c1ltal\u00e1nos",list:"Link lista","is_external":"A be\u00edrt URL k\u00fcls\u0151 hivatkoz\u00e1snak t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges http://-t el\u00e9 tenni?","is_email":"A be\u00edrt URL e-mail c\u00edmnek t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges mailto:-t el\u00e9 tenni?",titlefield:"C\u00edm",target:"Target",url:"Link URL",title:"Link besz\u00far\u00e1s/szerkeszt\u00e9s","link_list":"Link lista",rtl:"Jobbr\u00f3l balra",ltr:"Balr\u00f3l jobbra",accesskey:"Gyorsgomb",tabindex:"Tabindex",rev:"C\u00e9l kapcsolata az oldallal",rel:"Oldal kapcsolata a c\u00e9llal",mime:"C\u00e9l MIME t\u00edpus",encoding:"C\u00e9l karakterk\u00f3dol\u00e1s",langcode:"Nyelv k\u00f3d","target_langcode":"C\u00e9l nyelv",width:"Sz\u00e9less\u00e9g",height:"Magass\u00e1g"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hy_dlg.js
new file mode 100644
index 000000000..f713e3154
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.advlink_dlg',{"target_name":"Target name",classes:"\u0534\u0561\u057d\u0565\u0580",style:"\u0548\u0573",id:"Id","popup_position":"\u054f\u0565\u0572\u0561\u056f\u0561\u0575\u0578\u0582\u0574 (X / Y)",langdir:"\u0548\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576","popup_size":"\u0549\u0561\u0583\u057d","popup_dependent":"Dependent (\u0574\u056b\u0561\u0575\u0576 Mozilla / Firefox)","popup_resizable":"\u0539\u0578\u0582\u0575\u056c\u0561\u057f\u0580\u0565\u056c \u0579\u0561\u0583\u0565\u0580\u056b \u0583\u0578\u0583\u0578\u056d\u0578\u0582\u0574","popup_location":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c location \u057e\u0561\u0570\u0561\u0576\u0561\u056f\u0568","popup_menubar":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u0574\u0565\u0576\u0575\u0578\u0582\u0576","popup_toolbar":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u0563\u0578\u0580\u056e\u056b\u0584\u0561\u0575\u056b\u0576 \u057e\u0561\u0570\u0561\u0576\u0561\u056f\u0576\u0565\u0580\u0568","popup_statusbar":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u057d\u057f\u0561\u057f\u0578\u0582\u057d\u0568","popup_scrollbars":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u057d\u0584\u0580\u0578\u056c\u056c\u0576\u0565\u0580\u0568","popup_return":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \'return false\'","popup_name":"\u054a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u056b \u0561\u0576\u057e\u0561\u0576\u0578\u0582\u0574","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u0532\u0561\u0581\u0565\u056c \u0576\u0578\u0580 \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0578\u0582\u0574","target_top":"\u0532\u0561\u0581\u0565\u056c \u057e\u0565\u0580\u056b\u0576 \u0586\u0580\u0565\u0575\u0574\u0578\u0582\u0574 (\u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0562\u0578\u056c\u0578\u0580 \u0586\u0580\u0565\u0575\u0574\u0565\u0580\u0568)","target_parent":"\u0532\u0561\u0581\u0565\u056c \u0570\u056b\u0574\u0576\u0561\u056f\u0561\u0576 \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0578\u0582\u0574 / \u0586\u0580\u0565\u0575\u0574\u0578\u0582\u0574","target_same":"\u0532\u0561\u0581\u0565\u056c \u0561\u0575\u057d \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0578\u0582\u0574 / \u0586\u0580\u0565\u0575\u0574\u0578\u0582\u0574","anchor_names":"\u053d\u0561\u0580\u056b\u057d\u056d","popup_opts":"\u054a\u0561\u0580\u0561\u0574\u0565\u057f\u0580\u0565\u0580","advanced_props":"\u053c\u0580\u0561\u0581\u0578\u0582\u0581\u056b\u0579 \u0564\u0565\u057a\u0584\u0565\u0580","event_props":"\u0534\u0565\u057a\u0584\u0565\u0580","popup_props":"Popup \u057a\u0561\u0580\u0561\u0574\u0565\u057f\u0580\u0565\u0580","general_props":"\u0538\u0576\u0564\u0570\u0561\u0576\u0578\u0582\u0580 \u057a\u0561\u0580\u0561\u0574\u0565\u057f\u0580\u0565\u0580","advanced_tab":"\u053c\u0580\u0561\u0581\u0578\u0582\u0581\u056b\u0579","events_tab":"\u0534\u0565\u057a\u0584\u0565\u0580","popup_tab":"Popup","general_tab":"\u0540\u056b\u0574\u0576\u0561\u056f\u0561\u0576",list:"\u0540\u0572\u0578\u0582\u0574\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f","is_external":"\u0546\u0565\u0580\u0561\u056e\u057e\u0561\u056e URL \u0570\u0561\u057d\u0581\u0565\u0576 \u0576\u0574\u0561\u0576 \u0567 \u0561\u0580\u057f\u0561\u0584\u056b\u0576 \u0570\u0572\u0574\u0561\u0576, \u0534\u0578\u0582\u0584 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u055e\u0574 \u0565\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c http://","is_email":"\u0546\u0565\u0580\u0561\u056e\u057e\u0561\u056e URL \u0570\u0561\u057d\u0581\u0565\u0576 \u0576\u0574\u0561\u0576 \u0567 email \u0570\u0561\u057d\u0581\u0565\u056b, \u0534\u0578\u0582\u0584 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u055e\u0574 \u0565\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c mailto:",titlefield:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580",target:"\u0532\u0561\u0581\u0565\u056c ...",url:"\u0540\u0561\u057d\u0581\u0565",title:"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0570\u0572\u0578\u0582\u0574","link_list":"\u0540\u0572\u0578\u0582\u0574\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f",rtl:"\u0531\u057b\u056b\u0581 \u0571\u0561\u056d",ltr:"\u0541\u0561\u056d\u056b\u0581 \u0561\u057b",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"\u053c\u0565\u0566\u057e\u056b \u056f\u0578\u0564","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ia_dlg.js
new file mode 100644
index 000000000..2d6c33d32
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u6837\u5f0f\u7c7b",style:"\u6837\u5f0f",id:"Id","popup_position":"\u5750\u6807 (X/Y)",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u4ece\u5c5e\u4e8e ( \u4ec5 Mozilla/Firefox \u6709\u6548 )","popup_resizable":"\u53ef\u8c03\u6574\u7a97\u53e3\u5927\u5c0f","popup_location":"\u663e\u793a\u5730\u5740\u680f","popup_menubar":"\u663e\u793a\u83dc\u5355\u5217","popup_toolbar":"\u663e\u793a\u5de5\u5177\u5217","popup_statusbar":"\u663e\u793a\u72b6\u6001\u5217","popup_scrollbars":"\u663e\u793a\u6eda\u52a8\u6761","popup_return":"\u63d2\u5165 \'return false\'","popup_name":"\u7a97\u53e3\u540d\u79f0","popup_url":"\u5f39\u51fa\u7a97\u53e3\u5730\u5740",popup:"Javascript \u5feb\u663e\u7a97\u53e3","target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00","target_top":"\u5728\u9876\u5c42\u7a97\u53e3\u6253\u5f00","target_parent":"\u5728\u7236\u7a97\u53e3\u6253\u5f00","target_same":"\u5728\u5f53\u524d\u7a97\u53e3\u6253\u5f00","anchor_names":"\u951a\u70b9","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5feb\u663e\u7a97\u53e3\u5c5e\u6027","general_props":"\u57fa\u672c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5feb\u663e\u7a97\u53e3","general_tab":"\u57fa\u672c",list:"\u8fde\u7ed3\u6e05\u5355","is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u52a0\u4e0a http:// ?","is_email":"\u60a8\u8f93\u5165\u7684\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u52a0\u4e0a mailto: ? ",titlefield:"\u67e5\u627e",target:"\u76ee\u6807",url:"\u8fde\u7ed3\u5730\u5740",title:"\u63d2\u5165/\u7f16\u8f91 \u8fde\u7ed3","link_list":"\u8fde\u7ed3\u6e05\u5355",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",accesskey:"\u5feb\u901f\u952e",tabindex:"Tab\u7d22\u5f15",rev:"rev",rel:"rel",mime:"\u76ee\u6807 MIME \u7c7b\u578b",encoding:"\u76ee\u6807\u8bed\u8a00\u7f16\u7801",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u6807\u8bed\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/id_dlg.js
new file mode 100644
index 000000000..deff7d775
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.advlink_dlg',{"target_name":"Nama Target",classes:"Classes",style:"Style",id:"Id","popup_position":"Posisi (X/Y)",langdir:"Bahasa","popup_size":"Ukuran","popup_dependent":"Tergantung (khusus Mozilla/Firefox)","popup_resizable":"Jadikan window resizable","popup_location":"Tampilkan location bar","popup_menubar":"Tampilkan menu bar","popup_toolbar":"Tampilkan toolbars","popup_statusbar":"Tampilkan status bar","popup_scrollbars":"Tampilkan scrollbars","popup_return":"sisipkan \'return false\'","popup_name":"Nama Window","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Buka pada Window baru","target_top":"Buka pada frame atas (Gantikan semua frame)","target_parent":"Buka pada parent window/frame","target_same":"Buka pada window/frame ini","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Properti Pop-Up","general_props":"Properti Umum","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"Umum",list:"Daftar Link","is_external":"URL yang Anda sisipkan tampaknya link eksternal, Anda ingin menambahkan awalan \'http://\'?","is_email":"URL yang Anda sisipkan tampaknya e-mail, Anda ingin menambahkan awalan \'mailto:\'?",titlefield:"Judul",target:"Target",url:"Link URL",title:"Sisipkan/Ubah link","link_list":"Daftar Link",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Hubungan target dengan page",rel:"Hubungan page dengan target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Kode Bahasa","target_langcode":"Bahasa Target",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/is_dlg.js
new file mode 100644
index 000000000..a89252ee0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.advlink_dlg',{"target_name":"Target heiti",classes:"Klasi",style:"St\u00edll",id:"Id","popup_position":"Sta\u00f0setning (X/Y)",langdir:"\u00c1tt tungum\u00e1ls","popup_size":"St\u00e6r\u00f0","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Leyfa breytingu st\u00e6r\u00f0ar \u00e1 glugga","popup_location":"Birta vefsl\u00f3\u00f0","popup_menubar":"Birta valmynd","popup_toolbar":"Show toolbars","popup_statusbar":"Birta st\u00f6\u00f0u sl\u00e1","popup_scrollbars":"Birta runusl\u00e1","popup_return":"B\u00e6ta vi\u00f0 \'return false\'","popup_name":"Heiti gluggans","popup_url":"Sl\u00f3\u00f0 sprettigluggans",popup:"Javascript sprettigluggi","target_blank":"Opna \u00ed n\u00fdjum glugga","target_top":"Opna \u00ed efsta ramma (kemur \u00ed sta\u00f0inn fyrir alla ramma)","target_parent":"Opna \u00ed yfir glugga / ramma","target_same":"Opna \u00ed \u00feessum glugga / ramma","anchor_names":"Anchors","popup_opts":"M\u00f6guleikar","advanced_props":"Frekari eiginleikar","event_props":"Vi\u00f0bur\u00f0ir","popup_props":"Eiginleikar sprettiglugga","general_props":"Almennir eiginleikar","advanced_tab":"N\u00e1nar","events_tab":"Vi\u00f0bur\u00f0ir","popup_tab":"Sprettigluggi","general_tab":"Almennt",list:"Listi hlekkja","is_external":"Sl\u00f3\u00f0in sem \u00fe\u00fa skr\u00e1\u00f0ir vir\u00f0ist vera sl\u00f3\u00f0 utan vefs, vilt \u00fe\u00fa b\u00e6ta vi\u00f0 forskeytinu http://?","is_email":"Sl\u00f3\u00f0in sem \u00fe\u00fa skr\u00e1\u00f0ir vir\u00f0ist vera netfang, vilt \u00fe\u00fa b\u00e6ta vi\u00f0 forskeytinu mailto:?",titlefield:"Titill",target:"Target",url:"Sl\u00f3\u00f0",title:"Setja inn/breyta hlekk","link_list":"Listi hlekkja",rtl:"H\u00e6gri til vinstri",ltr:"Vinstri til h\u00e6gri",accesskey:"Fl\u00fdtihnappur",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"K\u00f3\u00f0i tungum\u00e1ls","target_langcode":"\u00c6tla\u00f0 tungum\u00e1l",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/it_dlg.js
new file mode 100644
index 000000000..bf19659d0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.advlink_dlg',{"target_name":"Nome target",classes:"Classe",style:"Stile",id:"Id","popup_position":"Posizione (X/Y)",langdir:"Direzione del testo","popup_size":"Dimensioni","popup_dependent":"Dipendente (Solo in Mozilla/Firefox)","popup_resizable":"Rendi la finestra ridimensionabile","popup_location":"Mostra barra navigazione","popup_menubar":"Mostra barra menu","popup_toolbar":"Mostra barre strumenti","popup_statusbar":"Mostra barra di stato","popup_scrollbars":"Mostra barre di scorrimento","popup_return":"Inserisci \'return false\'","popup_name":"Nome finestra","popup_url":"URL Popup",popup:"Popup Javascript","target_blank":"Apri in una nuova finestra","target_top":"Apri nella cornice superiore (sostituisce tutte le cornici)","target_parent":"Apri nella finestra / cornice genitore","target_same":"Apri in questa finestra / cornice","anchor_names":"Ancore","popup_opts":"Opzioni","advanced_props":"Propriet\u00e0 avanzate","event_props":"Eventi","popup_props":"Propriet\u00e0 popup","general_props":"Propriet\u00e0 generali","advanced_tab":"Avanzate","events_tab":"Eventi","popup_tab":"Popup","general_tab":"Generale",list:"Lista collegamenti","is_external":"L\'URL inserito sembra essere un link esterno. Aggiungere il necessario prefisso http:// ?","is_email":"L\'URL inserito sembra essere un indirizzo email. Aggiungere il necessario prefisso mailto: ?",titlefield:"Titolo",target:"Target",url:"URL collegamento",title:"Inserisci/modifica link","link_list":"Lista collegamenti",rtl:"Destra verso sinistra",ltr:"Sinistra verso destra",accesskey:"Carattere di accesso",tabindex:"Indice tabulazione",rev:"Relazione da target a pagina",rel:"Relazione da pagina a target",mime:"Tipo MIME del target",encoding:"Codifica carattere del target",langcode:"Lingua","target_langcode":"Lingua del target",width:"Larghezza",height:"Altezza"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ja_dlg.js
new file mode 100644
index 000000000..68ebcd2e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.advlink_dlg',{"target_name":"\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u540d\u524d",classes:"\u30af\u30e9\u30b9",style:"\u30b9\u30bf\u30a4\u30eb",id:"ID","popup_position":"\u4f4d\u7f6e (X/Y)",langdir:"\u6587\u7ae0\u306e\u65b9\u5411","popup_size":"\u5927\u304d\u3055","popup_dependent":"\u4f9d\u5b58(Mozilla\u3068Firefox\u3060\u3051)","popup_resizable":"\u30a6\u30a4\u30f3\u30c9\u30a6\u306e\u30b5\u30a4\u30ba\u5909\u66f4\u3092\u8a31\u53ef","popup_location":"\u30a2\u30c9\u30ec\u30b9\u30d0\u30fc\u3092\u8868\u793a","popup_menubar":"\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u3092\u8868\u793a","popup_toolbar":"\u30c4\u30fc\u30eb\u30d0\u30fc\u3092\u8868\u793a","popup_statusbar":"\u30b9\u30c6\u30fc\u30bf\u30b9\u30d0\u30fc\u3092\u8868\u793a","popup_scrollbars":"\u30b9\u30af\u30ed\u30fc\u30eb\u30d0\u30fc\u3092\u8868\u793a","popup_return":"\'return false\'\u3092\u633f\u5165","popup_name":"\u30a6\u30a4\u30f3\u30c9\u30a6\u306e\u540d\u524d","popup_url":"\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u306eURL",popup:"Javascript\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7","target_blank":"\u65b0\u3057\u3044\u30a6\u30a4\u30f3\u30c9\u30a6\u3067\u958b\u304f","target_top":"\u30c8\u30c3\u30d7\u306e\u30d5\u30ec\u30fc\u30e0\u3067\u958b\u304f(\u3059\u3079\u3066\u306e\u30d5\u30ec\u30fc\u30e0\u3092\u7f6e\u304d\u63db\u3048)","target_parent":"\u89aa\u30a6\u30a4\u30f3\u30c9\u30a6/\u89aa\u30d5\u30ec\u30fc\u30e0\u3067\u958b\u304f","target_same":"\u3053\u306e\u30a6\u30a4\u30f3\u30c9\u30a6/\u30d5\u30ec\u30fc\u30e0\u3067\u958b\u304f","anchor_names":"\u30a2\u30f3\u30ab\u30fc","popup_opts":"\u30aa\u30d7\u30b7\u30e7\u30f3","advanced_props":"\u9ad8\u5ea6\u306a\u5c5e\u6027","event_props":"\u30a4\u30d9\u30f3\u30c8","popup_props":"\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7","general_props":"\u4e00\u822c","advanced_tab":"\u5c02\u9580\u7684","events_tab":"\u30a4\u30d9\u30f3\u30c8","popup_tab":"\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7","general_tab":"\u4e00\u822c",list:"\u30ea\u30f3\u30af\u306e\u4e00\u89a7","is_external":"\u5165\u529b\u3057\u305fURL\u306f\u5916\u90e8\u306e\u30ea\u30f3\u30af\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b http:// \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?","is_email":"\u5165\u529b\u3057\u305fURL\u306f\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b mailto: \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?",titlefield:"\u30bf\u30a4\u30c8\u30eb",target:"\u30bf\u30fc\u30b2\u30c3\u30c8",url:"\u30ea\u30f3\u30af\u306eURL",title:"\u30ea\u30f3\u30af\u306e\u633f\u5165/\u7de8\u96c6","link_list":"\u30ea\u30f3\u30af\u306e\u4e00\u89a7",rtl:"\u53f3\u304b\u3089\u5de6",ltr:"\u5de6\u304b\u3089\u53f3",accesskey:"\u30a2\u30af\u30bb\u30b9\u30ad\u30fc",tabindex:"\u30bf\u30d6\u30a4\u30f3\u30c7\u30c3\u30af\u30b9",rev:"\u30bf\u30fc\u30b2\u30c3\u30c8\u304b\u3089\u30da\u30fc\u30b8\u306e\u95a2\u4fc2",rel:"\u30da\u30fc\u30b8\u304b\u3089\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u95a2\u4fc2",mime:"\u30bf\u30fc\u30b2\u30c3\u30c8\u306eMIME\u30bf\u30a4\u30d7",encoding:"\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9","target_langcode":"\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u8a00\u8a9e",width:"\u5e45",height:"\u9ad8\u3055"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ka_dlg.js
new file mode 100644
index 000000000..5ea6a4da6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.advlink_dlg',{"target_name":"\u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8",classes:"\u10d9\u10da\u10d0\u10e1\u10d4\u10d1\u10d8",style:"\u10e1\u10e2\u10d8\u10da\u10d8",id:"\u10e1\u10d0\u10ee\u10d4\u10da\u10d8","popup_position":"\u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10d0 (X/Y)",langdir:"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d1\u10d0","popup_size":"\u10d6\u10dd\u10db\u10d0","popup_dependent":"\u10d3\u10d0\u10db\u10dd\u10d9\u10d8\u10d3\u10d4\u10d1\u10e3\u10da\u10d4\u10d1\u10d0 (\u10db\u10ee\u10dd\u10da\u10dd\u10d3 Firefox)","popup_resizable":"\u10d6\u10dd\u10db\u10d8\u10e1 \u10ea\u10d5\u10da\u10d8\u10da\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10e8\u10d5\u10d4\u10d1\u10d0","popup_location":"\u10d2\u10d0\u10dc\u10da\u10d0\u10d2\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10dc\u10d4\u10da\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0","popup_menubar":"\u10db\u10d4\u10dc\u10d8\u10e3\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0","popup_toolbar":"\u10d8\u10dc\u10e1\u10e2\u10e0\u10e3\u10db\u10d4\u10dc\u10e2\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10dc\u10d4\u10da\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0","popup_statusbar":"\u10db\u10d3\u10d2\u10dd\u10db\u10d0\u10e0\u10d4\u10dd\u10d1\u10d8\u10e1 \u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0","popup_scrollbars":"\u10d2\u10d0\u10d3\u10d0\u10ee\u10d5\u10d4\u10d5\u10d8\u10e1 \u10d5\u10d4\u10da\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0","popup_return":"\'return false\' \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","popup_name":"\u10e4\u10d0\u10dc\u10ef\u10e0\u10d8\u10e1 \u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","popup_url":"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8",popup:"\u10d2\u10d0\u10e8\u10da\u10d0 Java-\u10e1 \u10d2\u10d0\u10db\u10dd\u10e7\u10d4\u10dc\u10d4\u10d1\u10d8\u10d7","target_blank":"\u10d0\u10ee\u10d0\u10da \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","target_top":"\u10d6\u10d4\u10d3\u10d0 \u10d9\u10d0\u10d3\u10e0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","target_parent":"\u10e1\u10d0\u10d9\u10e3\u10d7\u10d0\u10e0\u10d0 \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","target_same":"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","anchor_names":"\u10e6\u10e3\u10d6\u10d4\u10d1\u10d8","popup_opts":"\u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8","advanced_props":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","event_props":"\u10db\u10dd\u10d5\u10da\u10d4\u10dc\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","popup_props":"\u10d2\u10d0\u10e8\u10da\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","general_props":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","advanced_tab":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7","events_tab":"\u10db\u10dd\u10d5\u10da\u10d4\u10dc\u10d0","popup_tab":"\u10d2\u10d0\u10e8\u10da\u10d0","general_tab":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd",list:"\u10e1\u10d8\u10d0","is_external":"\u10e8\u10d4\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10d2\u10d0\u10d5\u10e1 \u10d2\u10d0\u10e0\u10d4 \u10d1\u10db\u10e3\u10da\u10e1, \u10d3\u10d0\u10d5\u10d0\u10db\u10d0\u10d7\u10dd\u10e2 \u10de\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8 http://?","is_email":" \u10e8\u10d4\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10d2\u10d0\u10d5\u10e1 \u10d4\u10da.\u10e4\u10dd\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10e1, \u10d3\u10d0\u10d5\u10d0\u10db\u10d0\u10e2\u10dd\u10d7 \u10de\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8 mailto:?",titlefield:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8",target:"\u10db\u10d8\u10d6\u10d0\u10dc\u10d8",url:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8",title:"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","link_list":"\u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0",rtl:"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5",ltr:"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",accesskey:"\u10e8\u10d4\u10e0\u10ec\u10d4\u10d5\u10d8\u10e1 \u10d2\u10d0\u10e1\u10d0\u10e6\u10d4\u10d1\u10d8",tabindex:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8",rev:"\u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10d3\u10d0\u10db\u10dd\u10d9\u10d8\u10d3\u10d4\u10d1\u10e3\u10da\u10d4\u10d1\u10d0 \u10d2\u10d5\u10d4\u10e0\u10d3\u10d7\u10d0\u10dc",rel:"\u10d2\u10d5\u10d4\u10e0\u10d3\u10d8\u10e1 \u10d3\u10d0\u10db\u10dd\u10d9\u10d8\u10d3\u10d4\u10d1\u10e3\u10da\u10d4\u10d1\u10d0 \u10db\u10d8\u10d6\u10d0\u10dc\u10d7\u10d0\u10dc",mime:"MIME \u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8",encoding:"\u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8\u10e0\u10d4\u10d1\u10d0",langcode:"\u10d4\u10dc\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8","target_langcode":"\u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10d4\u10dc\u10d0",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/kl_dlg.js
new file mode 100644
index 000000000..c3a82e022
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/km_dlg.js
new file mode 100644
index 000000000..a39ce6066
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.advlink_dlg',{"target_name":"\u1788\u17d2\u1798\u17c4\u17c7\u1782\u17c4\u179b\u178a\u17c5",classes:"\u1790\u17d2\u1793\u17b6\u1780\u17cb",style:"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",id:"\u179b\u179f.","popup_position":"\u1791\u17b8\u178f\u17b6\u17c6\u1784 (X/Y)",langdir:"\u1791\u17b7\u179f\u178a\u17c5\u1797\u17b6\u179f\u17b6","popup_size":"\u1791\u17c6\u17a0\u17c6","popup_dependent":"\u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799 (Mozilla/Firefox \u178f\u17c2\u1794\u17c9\u17bb\u178e\u17d2\u178e\u17c4\u17c7)","popup_resizable":"\u17b1\u17d2\u1799\u1794\u1784\u17d2\u17a2\u17bd\u1785\u17a2\u17b6\u1785\u1794\u17d2\u178f\u17bc\u179a\u1791\u17c6\u17a0\u17c6\u1794\u17b6\u1793","popup_location":"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1794\u17b6\u179a\u1791\u17b8\u178f\u17b6\u17c6\u1784","popup_menubar":"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1794\u17b6\u179a\u1798\u17c9\u17ba\u1793\u17bb\u1799","popup_toolbar":"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1794\u17b6\u179a\u17a7\u1794\u1780\u179a\u178e\u17cd","popup_statusbar":"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1794\u17b6\u179a\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796","popup_scrollbars":"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1794\u17b6\u179a\u179a\u1798\u17bc\u179a","popup_return":"\u1794\u1789\u17d2\u1785\u17bc\u179b\'return false\'","popup_name":"\u1788\u17d2\u1798\u17c4\u17c7\u1794\u1784\u17d2\u17a2\u17bc\u1785","popup_url":"\u17a2\u17b6\u179f\u178a\u17d2\u178b\u17b6\u1793\u1794\u1784\u17d2\u17a2\u17bd\u1785\u179b\u17c1\u1785\u17a1\u17be\u1784",popup:"\u1794\u1784\u17d2\u17a2\u17bd\u1785\u179b\u17c1\u1785\u17a1\u17be\u1784 Javascript","target_blank":"\u1794\u17be\u1780\u1780\u17d2\u1793\u17bb\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1790\u17d2\u1798\u17b8","target_top":"\u1794\u17be\u1780\u1780\u17d2\u1793\u17bb\u1784\u179f\u17ca\u17bb\u1798\u179b\u17be (\u1787\u17c6\u1793\u17bd\u179f\u1782\u17d2\u179a\u1794\u17cb\u179f\u17ca\u17bb\u1798\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb)","target_parent":"\u1794\u17be\u1780\u1780\u17d2\u1793\u17bb\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785/\u179f\u17ca\u17bb\u1798\u1798\u17c1","target_same":"\u1794\u17be\u1780\u1780\u17d2\u1793\u17bb\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785/\u179f\u17ca\u17bb\u1798\u1793\u17c1\u17c7","anchor_names":"\u1799\u17bb\u1790\u17d2\u1780\u17b6","popup_opts":"\u1787\u1798\u17d2\u179a\u17be\u179f\u179b\u17c1\u1785\u17a1\u17be\u1784","advanced_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","event_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1796\u17d2\u179a\u17b9\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17cd","popup_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u179b\u17c1\u1785\u17a1\u17be\u1784","general_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1791\u17bc\u1791\u17c5","advanced_tab":"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","events_tab":"\u1796\u17d2\u179a\u17b9\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17cd","popup_tab":"\u179b\u17c1\u1785\u17a1\u17be\u1784","general_tab":"\u1791\u17bc\u1791\u17c5",list:"\u1794\u1789\u17d2\u1787\u17b8\u178f\u17c6\u178e","is_external":"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c6\u1793\u1784\u1787\u17b6\u178f\u17c6\u178e\u1791\u17c5\u1780\u17d2\u179a\u17c5, \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u179a\u179f\u17c1\u179a http:// \u1793\u17c5\u178a\u17be\u1798\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17c1?","is_email":"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c6\u1793\u1784\u1787\u17b6\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u17a2\u17ca\u17b8\u1798\u17c2\u179b, \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u179a\u179f\u17c1\u179a mailto: \u1793\u17c5\u178a\u17be\u1798\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17c1?",titlefield:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784",target:"\u1782\u17c4\u179b\u178a\u17c5",url:"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178f\u17c6\u178e",title:"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u178f\u17c6\u178e","link_list":"\u1794\u1789\u17d2\u1787\u17b8\u178f\u17c6\u178e",rtl:"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784",ltr:"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6",accesskey:"\u1782\u17d2\u179a\u17b6\u1794\u17cb\u1785\u17bb\u1785\u1795\u17d2\u179b\u17bc\u179c\u1780\u17b6\u178f\u17cb",tabindex:"\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179b\u17b7\u1794\u17b7\u1780\u17d2\u179a\u1798",rev:"\u1791\u17c6\u1793\u17b6\u1780\u17cb\u1791\u17c6\u1793\u1784\u1782\u17c4\u179b\u178a\u17c5\u1791\u17c5\u1793\u17b9\u1784\u1791\u17c6\u1796\u17d0\u179a",rel:"\u1791\u17c6\u1793\u17b6\u1780\u17cb\u1791\u17c6\u1793\u1784\u1791\u17c6\u1796\u17d0\u179a\u1791\u17c5\u1793\u17b9\u1784\u1782\u17c4\u179b\u178a\u17c5",mime:"\u1794\u17d2\u179a\u1797\u17c1\u1791 MIME \u1782\u17c4\u179b\u178a\u17c5",encoding:"\u1780\u17b6\u179a\u179c\u17c1\u1785\u1780\u17bc\u178a\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u179a\u1794\u179f\u17cb\u1782\u17c4\u179b\u178a\u17c5",langcode:"\u1780\u17bc\u178a\u1797\u17b6\u179f\u17b6","target_langcode":"\u1797\u17b6\u179f\u17b6\u1782\u17c4\u179b\u178a\u17c5",width:"\u1791\u1791\u17b9\u1784",height:"\u1780\u1798\u17d2\u1796\u179f\u17cb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ko_dlg.js
new file mode 100644
index 000000000..21aaa4e35
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.advlink_dlg',{"target_name":"Target \uc774\ub984",classes:"\ud074\ub798\uc2a4",style:"\uc11c\uc2dd",id:"ID","popup_position":"\uc704\uce58(X/Y)",langdir:"\ubb38\uc790 \ubc29\ud5a5","popup_size":"\ud06c\uae30","popup_dependent":"\uc5f0\ub3d9 (Mozilla/Firefox\ub9cc)","popup_resizable":"\ucc3d \ud06c\uae30 \ubcc0\uacbd \uac00\ub2a5","popup_location":"\uc8fc\uc18c \ud45c\uc2dc\uc904 \ubcf4\uc784","popup_menubar":"\uba54\ub274 \ud45c\uc2dc\uc904 \ubcf4\uc784","popup_toolbar":"\ub3c4\uad6c \ubaa8\uc74c \ubcf4\uc784","popup_statusbar":"\uc0c1\ud0dc \ud45c\uc2dc\uc904 \ubcf4\uc784","popup_scrollbars":"\uc2a4\ud06c\ub864\ubc14 \ubcf4\uc784","popup_return":"\'return false\' \uc0bd\uc785","popup_name":"\ucc3d \uc774\ub984","popup_url":"\ud31d\uc5c5 URL",popup:"Javascript \ud31d\uc5c5","target_blank":"\uc0c8 \ucc3d\uc73c\ub85c \uc5f4\uae30","target_top":"\ucd5c\uc0c1\uc704 \ud504\ub808\uc784\uc5d0 \uc5f4\uae30 (\ubaa8\ub4e0 \ud504\ub808\uc784\uc774 \ubc14\ub01c)","target_parent":"\ubd80\ubaa8 \ucc3d/\ud504\ub808\uc784\uc5d0 \uc5f4\uae30","target_same":"\uc774 \ucc3d/\ud504\ub808\uc784\uc5d0 \uc5f4\uae30","anchor_names":"\uc575\ucee4","popup_opts":"\uc635\uc158","advanced_props":"\uc138\ubd80 \uc18d\uc131","event_props":"\uc774\ubca4\ud2b8","popup_props":"\ud31d\uc5c5 \uc18d\uc131","general_props":"\uc77c\ubc18 \uc18d\uc131","advanced_tab":"\uc138\ubd80 \uc0ac\ud56d","events_tab":"\uc774\ubca4\ud2b8","popup_tab":"\ud31d\uc5c5","general_tab":"\uc77c\ubc18",list:"\ub9c1\ud06c \ubaa9\ub85d","is_external":"\uc785\ub825\ud558\uc2e0 URL\uc740 \uc678\ubd80 \ub9c1\ud06c\ub85c \ud310\ub2e8\ub429\ub2c8\ub2e4. URL \uc55e\uc5d0 \ud544\uc218\uc801\uc778 http://\ub97c \ubd99\uc774\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","is_email":"\uc785\ub825\ud558\uc2e0 URL\uc740 e\uba54\uc77c \uc8fc\uc18c\ub85c \ud310\ub2e8\ub429\ub2c8\ub2e4. URL \uc55e\uc5d0 \ud544\uc218\uc801\uc778 mailto:\ub97c \ubd99\uc774\uc2dc\uaca0\uc2b5\ub2c8\uae4c?",titlefield:"\uc81c\ubaa9",target:"Target",url:"\ub9c1\ud06c URL",title:"\ub9c1\ud06c \uc0bd\uc785/\ud3b8\uc9d1","link_list":"\ub9c1\ud06c \ubaa9\ub85d",rtl:"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c",ltr:"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c",accesskey:"\uc561\uc138\uc2a4 \ud0a4",tabindex:"\ud0ed \uc778\ub371\uc2a4",rev:"\ub9c1\ud06c\ub85c\ubd80\ud130\uc758 \uad00\uacc4",rel:"\ub9c1\ud06c\uc5d0 \uad00\uacc4",mime:"\ud0c0\uac9f MIME \uc720\ud615",encoding:"\ud0c0\uac9f \ubb38\uc790 \uc778\ucf54\ub529",langcode:"\uc5b8\uc5b4 \ucf54\ub4dc","target_langcode":"\ud0c0\uac9f \uc5b8\uc5b4",width:"\ud3ed",height:"\ub192\uc774"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/kz_dlg.js
new file mode 100644
index 000000000..7e5e3185a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lb_dlg.js
new file mode 100644
index 000000000..35adf4ee9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.advlink_dlg',{"target_name":"Numm vun der Zils\u00e4it",classes:"Klassen",style:"Format",id:"ID","popup_position":"Positioun (X/Y)",langdir:"Schr\u00ebftrichtung","popup_size":"Gr\u00e9isst","popup_dependent":"Vun der Elteref\u00ebnster onofh\u00e4ngeg <br /> (n\u00ebmmen Mozilla/Firefox) ","popup_resizable":"Vergr\u00e9isseren vun der F\u00ebnster zouloossen","popup_location":"Adressleescht uweisen","popup_menubar":"Browsermen\u00fc uweisen","popup_toolbar":"Geschirleeschten uweisen","popup_statusbar":"Statusleeschten uweisen","popup_scrollbars":"Scrollbalken uweisen","popup_return":"Link trotz Popup suiv\u00e9ieren","popup_name":"Numm vun der F\u00ebnster","popup_url":"Popup-Adress",popup:"JavaScript-Popup","target_blank":"An enger neier F\u00ebnster opmaachen","target_top":"Am ieweschte Frame opmaacheen (sprengt d\'Frameset)","target_parent":"An der iwwergeuerdneter F\u00ebnster/Frame opmaachen","target_same":"An der selwechter F\u00ebnster/Frame opmaachen","anchor_names":"Anker","popup_opts":"Optiounen","advanced_props":"Erweidert Eegeschaften","event_props":"Evenement","popup_props":"Popup-Eegeschaften","general_props":"Allgemeng Eegeschaften","advanced_tab":"Erweidert","events_tab":"Evenement","popup_tab":"Popup","general_tab":"Allgemeng",list:"Linkl\u00ebscht","is_external":"D\u00ebs Adress sch\u00e9ngt een externe Link ze sinn. W\u00ebllt Dir den dofir ben\u00e9idegte Pr\u00e4fix \"http://\" virdru setzen?","is_email":"D\u00ebs Adress sch\u00e9ngt eng Email-Adress ze sinn. W\u00ebllt Dir den dofir ben\u00e9idegte Pr\u00e4fix \"mailto:\" virdru setzen?",titlefield:"Titel",target:"F\u00ebnster",url:"Adress",title:"Link af\u00fcgen/beaarbechten","link_list":"Linkl\u00ebscht",rtl:"Riets no l\u00e9nks",ltr:"L\u00e9nks no riets",accesskey:"Tastekierzel",tabindex:"Tabindex",rev:"Bez\u00e9iung vum Linkzil zur S\u00e4it",rel:"Bez\u00e9iung vun der S\u00e4it zum Linkzil",mime:"MIME-Typ vun der Zils\u00e4it",encoding:"Zeechekod\u00e9ierung vun der Zils\u00e4it",langcode:"Sproochcode","target_langcode":"Sprooch vun der Zils\u00e4it",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lt_dlg.js
new file mode 100644
index 000000000..7a48ca4e4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.advlink_dlg',{"target_name":"Paskirties vardas",classes:"Klas\u0117s",style:"Stilius",id:"Id","popup_position":"Pozicija (X/Y)",langdir:"Kalbos kryptis","popup_size":"Dydis","popup_dependent":"Proporcionaliai (tik Mozilla/Firefox)","popup_resizable":"Galima koreguoti lango i\u0161matavimus","popup_location":"Rodyti adres\u0173 juost\u0105","popup_menubar":"Rodyti meniu juost\u0105","popup_toolbar":"Rodyti \u012franki\u0173 juost\u0105","popup_statusbar":"Rodyti b\u016bsenos juost\u0105","popup_scrollbars":"Rodyti slankjuostes","popup_return":"\u012eterpti \u201ereturn false\u201c","popup_name":"Lango vardas","popup_url":"I\u0161kylan\u010dio lango URL adresas",popup:"Javascript i\u0161kylantis langas","target_blank":"Atverti naujame lange","target_top":"Atverti vir\u0161utiniame lange (pakei\u010dia visus langus)","target_parent":"Atverti t\u0117viniame lange","target_same":"Atverti tame pa\u010diame lange","anchor_names":"Prierai\u0161ai","popup_opts":"Nustatymai","advanced_props":"I\u0161pl\u0117stiniai nustatymai","event_props":"\u012evykiai","popup_props":"I\u0161kylan\u010dio lango nustatymai","general_props":"Bendri nustatymai","advanced_tab":"I\u0161pl\u0117sta","events_tab":"\u012evykiai","popup_tab":"I\u0161kylantis langas","general_tab":"Bendra",list:"Nuorod\u0173 s\u0105ra\u0161as","is_external":"URL adresas, kur\u012f \u012fved\u0117te yra i\u0161orin\u0117 nuoroda, ar norite prid\u0117ti reikaling\u0105 http:// prefiks\u0105?","is_email":"URL adresas, kur\u012f \u012fved\u0117te yra el. pa\u0161to adresas, ar norite prid\u0117ti reikaling\u0105 mailto: prefiks\u0105?",titlefield:"Pavadinimas",target:"Paskirtis",url:"Nuorodos URL adresas",title:"\u012eterpti/Redaguoti nuorod\u0105","link_list":"Nuorod\u0173 s\u0105ra\u0161as",rtl:"I\u0161 de\u0161in\u0117s \u012f kair\u0119",ltr:"I\u0161 kair\u0117s \u012f de\u0161in\u0119",accesskey:"Prieigos klavi\u0161as",tabindex:"Tabuliavimo indeksas",rev:"Ry\u0161ys paskirties su puslapiu",rel:"Ry\u0161ys puslapio su paskirtimi",mime:"Paskirties MIME tipas",encoding:"Kalbos koduot\u0117",langcode:"Kalbos kodas","target_langcode":"Paskirties kalba",width:"Plotis",height:"Auk\u0161tis"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lv_dlg.js
new file mode 100644
index 000000000..3df0d1dd7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.advlink_dlg',{"target_name":"M\u0113r\u0137a nosaukums",classes:"Klases",style:"St\u012bls",id:"Id","popup_position":"Poz\u012bcija (X/Y)",langdir:"Valodas virziens","popup_size":"Izm\u0113rs","popup_dependent":"Atkar\u012bgs (tikai priek\u0161 Mozilla/Firefox)","popup_resizable":"Iedot iesp\u0113ju main\u012bt loga izmerus","popup_location":"Par\u0101d\u012bt adreses joslu","popup_menubar":"Par\u0101d\u012bt izvelnes joslu","popup_toolbar":"Par\u0101d\u012bt r\u012bkjoslu","popup_statusbar":"Par\u0101d\u012bt status bar","popup_scrollbars":"Par\u0101d\u012bt scrollbars","popup_return":"Ielikt \'return false\'","popup_name":"Loga nosaukums","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Atvert jaun\u0101j\u0101 log\u0101","target_top":"Atvert pa virsu \u0161im r\u0101m\u012bm (aizvieto visus r\u0101mjus)","target_parent":"Atvert \u0161aj\u0101 log\u0101 / r\u0101m\u012b","target_same":"Atvert \u0161aj\u0101 log\u0101 / r\u0101m\u012b","anchor_names":"Enkuri","popup_opts":"Opcijas","advanced_props":"Advanced \u012bpa\u0161\u012bbas","event_props":"Notikumi","popup_props":"Popup \u012bpa\u0161\u012bbas","general_props":"Kop\u012bgas \u012bpa\u0161\u012bbas","advanced_tab":"Advanced","events_tab":"Notikumi","popup_tab":"Popup","general_tab":"Kop\u012bgais",list:"Link list","is_external":"Ievad\u012btais URL \u0161\u0137iet ir \u0101r\u0113j\u0101 saite, vai J\u016bs v\u0113laties pirms t\u0101s pievienot http:// pried\u0113kli?","is_email":"Ievad\u012btais URL \u0161\u0137iet ir e-pasta adrese, vai J\u016bs v\u0113laties pirms t\u0101s pievienot mailto: pried\u0113kli?",titlefield:"Nosaukums",target:"M\u0113r\u0137is",url:"Saites URL",title:"Ievietot/Redi\u0123\u0113t saiti","link_list":"Sakaru saraksts",rtl:"No labas puses uz kreiso",ltr:"No kreisas puses uz labo",accesskey:"Pieejas poga",tabindex:"Tabindex",rev:"M\u0113r\u0137a attiec\u012bbas pret lapu",rel:"Lapas attiec\u012bbas pret m\u0113r\u0137i",mime:"M\u0113r\u0137a MIME tips",encoding:"M\u0113r\u0137a valodas koda tabula",langcode:"Valodas kods","target_langcode":"M\u0113r\u0137a valoda",width:"Platums",height:"Augstums"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/mk_dlg.js
new file mode 100644
index 000000000..6c8f0b649
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.advlink_dlg',{"target_name":"\u0418\u043c\u0435 \u043d\u0430 \u0446\u0435\u043b\u0442\u0430",classes:"\u041a\u043b\u0430\u0441\u0430",style:"\u0421\u0442\u0438\u043b",id:"\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0458\u0430 (Id)","popup_position":"\u041f\u043e\u0437\u0438\u0446\u0438\u0458\u0430 (X/Y)",langdir:"\u0421\u043c\u0435\u0440 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442","popup_size":"\u0413\u043e\u043b\u0435\u043c\u0438\u043d\u0430","popup_dependent":"\u0417\u0430\u0432\u0438\u0441\u0435\u043d (\u0441\u0430\u043c\u043e \u0437\u0430 Mozilla/Firefox)","popup_resizable":"\u041f\u0440\u043e\u0437\u043e\u0440 \u0441\u043e \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0430 \u0433\u043e\u043b\u0435\u043c\u0438\u043d\u0430","popup_location":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043b\u0438\u043d\u0438\u0458\u0430 \u043d\u0430 \u043b\u043e\u043a\u0430\u0446\u0438\u0458\u0430","popup_menubar":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043c\u0435\u043d\u0438","popup_toolbar":"\u041f\u043e\u043a\u0430\u0436\u0438 \u0430\u043b\u0430\u0442\u043a\u0438","popup_statusbar":"\u041f\u043e\u043a\u0430\u0436\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430","popup_scrollbars":"\u041f\u0440\u0438\u043a\u0430\u0436\u0438 \u043b\u0438\u0437\u0433\u0430\u0447\u0438","popup_return":"\u0412\u043c\u0435\u0442\u043d\u0438 \'return false\'","popup_name":"\u0418\u043c\u0435 \u043d\u0430 \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432\u043e \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440","target_top":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432\u043e \u0433\u043e\u0440\u043d\u0430\u0442\u0430 \u0440\u0430\u043c\u043a\u0430(\u0433\u0438 \u0437\u0430\u043c\u0435\u043d\u0443\u0432\u0430 \u0441\u0438\u0442\u0435 \u0440\u0430\u043c\u043a\u0438)","target_parent":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432\u043e \u0438\u0437\u0432\u043e\u0440\u043d\u0438\u043e\u0442 \u043f\u0440\u043e\u0437\u043e\u0440/\u0440\u0430\u043c\u043a\u0430","target_same":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432\u043e \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440/\u0440\u0430\u043c\u043a\u0430","anchor_names":"\u0421\u0438\u0434\u0440\u0430","popup_opts":"\u041c\u043e\u0436\u043d\u043e\u0441\u0442\u0438","advanced_props":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u0438 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430","event_props":"\u041d\u0430\u0441\u0442\u0430\u043d\u0438","popup_props":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 popup \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442","general_props":"\u041e\u0441\u043d\u043e\u0432\u043d\u0438 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430","advanced_tab":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e","events_tab":"\u041d\u0430\u0441\u0442\u0430\u043d\u0438","popup_tab":"Popup","general_tab":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e",list:"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0432\u0438","is_external":"\u0423\u0420\u041b \u0430\u0434\u0440\u0435\u0441\u0442\u0430 \u0448\u0442\u043e \u0458\u0430 \u0432\u043d\u0435\u0441\u043e\u0432\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u043a\u0430\u043a\u043e \u043d\u0430\u0434\u0432\u043e\u0440\u0435\u0448\u0435\u043d \u043b\u0438\u043d\u043a. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u0434\u043e\u0434\u0430\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u0438\u043e\u0442 \u201ehttp://:\u201c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ?","is_email":"\u0423\u0420\u041b \u0430\u0434\u0440\u0435\u0441\u0442\u0430 \u0448\u0442\u043e \u0458\u0430 \u0432\u043d\u0435\u0441\u043e\u0432\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u043a\u0430\u043a\u043e \u0435-\u043f\u043e\u0448\u0442\u0430. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u0434\u043e\u0434\u0430\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u0438\u043e\u0442 \u201emailto:\u201c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ?",titlefield:"\u041d\u0430\u0441\u043b\u043e\u0432",target:"\u0426\u0435\u043b",url:"\u0423\u0420\u041b \u043b\u0438\u043d\u043a",title:"\u0412\u043c\u0435\u0442\u043d\u0438/\u0443\u0440\u0435\u0434\u0438 \u043b\u0438\u043d\u043a","link_list":"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0432\u0438",rtl:"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e",ltr:"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e",accesskey:"\u041a\u043b\u0443\u0447 \u0437\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u043f",tabindex:"Tabindex",rev:"\u041e\u0434\u043d\u043e\u0441 \u043d\u0430 \u0446\u0435\u043b\u0442\u0430 \u0441\u043f\u0440\u0435\u043c\u0430 \u0441\u0442\u0440\u0430\u043d\u0430\u0442\u0430",rel:"\u041e\u0434\u043d\u043e\u0441 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0430\u0442\u0430 \u0441\u043f\u0440\u0435\u043c\u0430 \u0446\u0435\u043b\u0442\u0430",mime:"MIME \u0442\u0438\u043f",encoding:"\u041a\u043e\u0434\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0437\u043d\u0430\u0446\u0438\u0442\u0435",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442","target_langcode":"\u0408\u0430\u0437\u0438\u043a",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u0438\u043d\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ml_dlg.js
new file mode 100644
index 000000000..8db545b36
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/mn_dlg.js
new file mode 100644
index 000000000..4b4acb5f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.advlink_dlg',{"target_name":"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u0443\u0443\u0434\u0430\u0441\u043d\u044b \u043d\u044d\u0440",classes:"\u0410\u043d\u0433\u0438",style:"\u0424\u043e\u0440\u043c\u0430\u0442",id:"\u0422\u0422","popup_position":"\u0411\u0430\u0439\u0440\u043b\u0430\u043b (X/Y)",langdir:"\u0411\u0438\u0447\u0433\u0438\u0439\u043d \u0447\u0438\u0433\u043b\u044d\u043b","popup_size":"\u0425\u044d\u043c\u0436\u044d\u044d","popup_dependent":"\u042d\u0445 \u0446\u043e\u043d\u0445\u043d\u043e\u043e\u0441 \u0445\u0430\u043c\u0430\u0430\u0440\u0430\u043b\u0442\u0430\u0439 (\u0417\u04e9\u0432\u0445\u04e9\u043d Mozilla/Firefox)","popup_resizable":"\u0426\u043e\u043d\u0445 \u0442\u043e\u043c\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0437\u04e9\u0432\u0448\u04e9\u04e9\u0440\u04e9\u0445","popup_location":"\u0425\u0430\u044f\u0433\u0438\u0439\u043d \u0441\u0430\u043c\u0431\u0430\u0440 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445","popup_menubar":"\u0425\u04e9\u0442\u04e9\u0447\u0438\u0439\u043d \u0446\u044d\u0441 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445","popup_toolbar":"\u0411\u0430\u0433\u0430\u0436 \u0441\u0430\u043c\u0431\u0430\u0440 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445","popup_statusbar":"\u0422\u04e9\u043b\u04e9\u0432 \u0441\u0430\u043c\u0431\u0430\u0440 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445","popup_scrollbars":"\u0413\u04af\u0439\u043b\u0433\u044d\u0433\u0447 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445","popup_return":"\u041f\u043e\u043f\u0430\u043f \u0431\u0430\u0439\u0441\u0430\u043d \u0447 \u0445\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u0433 \u0434\u0430\u0433\u0430\u043d\u0430","popup_name":"\u0426\u043e\u043d\u0445\u043d\u044b \u043d\u044d\u0440","popup_url":"\u041f\u043e\u043f\u0430\u043f-\u0445\u0430\u044f\u0433",popup:"\u0416\u0430\u0432\u0430\u0441\u043a\u0440\u0438\u043f\u0442-\u043f\u043e\u043f\u0430\u043f","target_blank":"\u0428\u0438\u043d\u044d \u0446\u043e\u043d\u0445\u043e\u043d\u0434 \u043d\u044d\u044d\u0445","target_top":"\u0425\u0430\u043c\u0433\u0438\u0439\u043d \u0434\u044d\u044d\u0434 \u0446\u043e\u043d\u0445/\u0444\u0440\u044d\u0439\u043c\u0434 \u043d\u044d\u044d\u0445","target_parent":"\u042d\u0445 \u0446\u043e\u043d\u0445/\u0444\u0440\u044d\u0439\u043c\u0434 \u043d\u044d\u044d\u0445","target_same":"\u0422\u0443\u0445\u0430\u0439\u043d \u0446\u043e\u043d\u0445/\u0444\u0440\u044d\u0439\u043c\u0434 \u043d\u044d\u044d\u0445","anchor_names":"\u0413\u0430\u0434\u0430\u0441","popup_opts":"\u0421\u043e\u043d\u0433\u043e\u043b\u0442","advanced_props":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d \u0448\u0438\u043d\u0436","event_props":"\u04ae\u0437\u044d\u0433\u0434\u044d\u043b","popup_props":"\u041f\u043e\u043f\u0430\u043f-\u0448\u0438\u043d\u0436","general_props":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439 \u0448\u0438\u043d\u0436","advanced_tab":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d","events_tab":"\u04ae\u0437\u044d\u0433\u0434\u044d\u043b","popup_tab":"\u041f\u043e\u043f\u0430\u043f","general_tab":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439",list:"\u0425\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442","is_external":"\u0425\u0430\u044f\u0433 \u0434\u044d\u044d\u0440 \u0433\u0430\u0434\u0430\u0430\u0434 \u0445\u043e\u043b\u0431\u043e\u043e\u0441 \u0431\u0430\u0439\u0433\u0430\u0430 \u0445\u0430\u0440\u0430\u0433\u0434\u0430\u043d\u0430. \u0422\u0430 \u0437\u04e9\u0432 \u0445\u043e\u043b\u0431\u043e\u043e\u0441 \u0431\u043e\u043b\u0433\u043e\u0445\u044b\u043d \u0442\u0443\u043b\u0434 http:// \u043d\u044d\u043c\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","is_email":"\u0425\u0430\u044f\u0433 \u0434\u044d\u044d\u0440 \u0418\u043c\u044d\u0439\u043b \u0445\u0430\u044f\u0433 \u0431\u0430\u0439\u0445 \u0448\u0438\u0433 \u0445\u0430\u0440\u0430\u0433\u0434\u0430\u043d\u0430. \u0422\u0430 \u0442\u04af\u04af\u043d\u0434 \u0448\u0430\u0430\u0440\u0434\u043b\u0430\u0433\u0430\u0442\u0430\u0439 mailto: \u043d\u044d\u043c\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?",titlefield:"\u0413\u0430\u0440\u0447\u0438\u0433",target:"\u0426\u043e\u043d\u0445",url:"\u0425\u0430\u044f\u0433",title:"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0430\u0445","link_list":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442",rtl:"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d",ltr:"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d",accesskey:"\u0422\u043e\u0432\u0447\u0438\u043b\u0431\u043e\u0440",tabindex:"\u0422\u0430\u0431\u0443\u043b\u0430\u0442\u043e\u0440 \u0438\u043d\u0434\u0435\u043a\u0441",rev:"\u0425\u0443\u0443\u0434\u0430\u0441\u043d\u0430\u0430\u0441 \u0442\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u043e\u043b\u0431\u043e\u043e\u0441\u043e\u043e\u0441 \u0445\u043e\u043b\u0431\u043e\u043b\u0442",rel:"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u043e\u043b\u0431\u043e\u043e\u0441\u043e\u043e\u0441 \u0445\u0443\u0443\u0434\u0430\u0441\u043d\u044b \u0445\u043e\u043b\u0431\u043e\u043b\u0442",mime:"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u0443\u0443\u0434\u0430\u0441\u043d\u044b MIME \u0442\u04e9\u0440\u04e9\u043b",encoding:"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u0443\u0443\u0434\u0430\u0441\u043d\u044b \u043a\u043e\u0434\u0447\u0438\u043b\u043e\u043b",langcode:"\u0425\u044d\u043b\u043d\u0438\u0439 \u043a\u043e\u0434","target_langcode":"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u0443\u0443\u0434\u0430\u0441\u043d\u044b \u0445\u044d\u043b",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ms_dlg.js
new file mode 100644
index 000000000..80c0621c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.advlink_dlg',{"target_name":"Nama sasaran",classes:"Kelas-kelas",style:"Gaya",id:"Id","popup_position":"Posisi (X/Y)",langdir:"Arah bahasa","popup_size":"Saiz","popup_dependent":"Tanggungan (Hanya Mozilla/Firefox)","popup_resizable":"Jadikan tetingkap boleh diubahsuai","popup_location":"Tunjuk bar lokasi","popup_menubar":"Tunjuk bar menu","popup_toolbar":"Tunjuk bar alatan","popup_statusbar":"Tunjuk bar status","popup_scrollbars":"Tunjuk bar gulung","popup_return":"Masukkan \'return false\'","popup_name":"Nama tetingkap","popup_url":"Popup URL",popup:"Popup Javascript ","target_blank":"Buka dalam tetingkap baru.","target_top":"Buka bingkaian atas (gantikan kesemua bingkai)","target_parent":"Buka dalam tetingkap yang lain","target_same":"Buka tetingkap ini","anchor_names":"Sauh","popup_opts":"Pilihan","advanced_props":"Alatan lanjutan","event_props":"Peristiwa","popup_props":"Alatan Popup","general_props":"Alatan am","advanced_tab":"Lanjutan","events_tab":"Peristiwa","popup_tab":"Popup","general_tab":"Am",list:"Senarai pautan","is_external":"URL yang dimasukkan adalah pautan luar, tambah \"http://\" di awalan?","is_email":"URL yang dimasukkan adalah alamat emel, tambah \"mailto\": di awalan?",titlefield:"Tajuk",target:"Sasaran",url:"Pautan URL",title:"Sisip/sunting pautan","link_list":"Senarai pautan",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",accesskey:"Kunci akses",tabindex:"Tanda indeks",rev:"Kaitan sasaran kepada halaman",rel:"Kaitan halaman kepada sasaran",mime:"Sasaran jenis MIME",encoding:"Sasaran enkod perkataan",langcode:"Kod bahasa","target_langcode":"Bahasa sasaran",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/my_dlg.js
new file mode 100644
index 000000000..d57f01b4f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nb_dlg.js
new file mode 100644
index 000000000..ea316c334
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.advlink_dlg',{"target_name":"M\u00e5lnavn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Posisjon (X/Y)",langdir:"Skriftretning","popup_size":"St\u00f8rrelse","popup_dependent":"Avhengig vindu (bare i Mozilla/Firefox)","popup_resizable":"Gj\u00f8r vinduet skalerbart","popup_location":"Vis plasseringslinje","popup_menubar":"Vis menylinje","popup_toolbar":"Vis verkt\u00f8ylinjer","popup_statusbar":"Vis statuslinje","popup_scrollbars":"Vis rullefelt","popup_return":"Sett inn \'return false\'","popup_name":"Vindunavn","popup_url":"Popup URL",popup:"Javascript-popup","target_blank":"\u00c5pne i nytt vindu","target_top":"\u00c5pne i toppvindu (erstatter alle rammer)","target_parent":"\u00c5pne i overordnet vindu/ramme","target_same":"\u00c5pne i samme vindu/ramme","anchor_names":"Anker","popup_opts":"Innstillinger","advanced_props":"Generelle egenskaper","event_props":"Hendelser","popup_props":"Popup-egenskaper","general_props":"Generelle egenskaper","advanced_tab":"Avansert","events_tab":"Hendelser","popup_tab":"Popup","general_tab":"Generelt",list:"Lenkeliste","is_external":"URL\'en du oppga synes \u00e5 v\u00e6re en ekstern lenke, \u00f8nsker du \u00e5 legge til den n\u00f8dvendige http:// prefix?","is_email":"URL\'en du oppga synes \u00e5 v\u00e6re en email adresse, \u00f8nsker du \u00e5 legge til den n\u00f8dvendige mailto: prefix?",titlefield:"Tittel",target:"M\u00e5l",url:"Lenkens URL",title:"Sett inn / rediger lenke","link_list":"Lenkeliste",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",accesskey:"Hurtigtast",tabindex:"Tabulatorindeks",rev:"M\u00e5lets forhold til siden",rel:"Sidens forhold til m\u00e5let",mime:"M\u00e5lets MIME-type",encoding:"Tegnkonvertering",langcode:"Spr\u00e5kkode","target_langcode":"M\u00e5lspr\u00e5k",width:"Bredde",height:"H\u00f8yde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nl_dlg.js
new file mode 100644
index 000000000..b2924758b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.advlink_dlg',{"target_name":"Doel",classes:"Klasses",style:"Stijl",id:"Id","popup_position":"Positie (X/Y)",langdir:"Taalrichting","popup_size":"Grootte","popup_dependent":"Afhankelijk (Alleen Mozilla/Firefox)","popup_resizable":"Aanpasbaar venster","popup_location":"Lokatiebalk weergeven","popup_menubar":"Menubalk weergeven","popup_toolbar":"Werkbalk weergeven","popup_statusbar":"Statusbalk weergeven","popup_scrollbars":"Scrollbalken weergeven","popup_return":"\'return false\' invoegen","popup_name":"Vensternaam","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"In nieuw venster openen","target_top":"In bovenste frame openen (vervangt gehele pagina)","target_parent":"In bovenliggend venster / frame openen","target_same":"In dit venster / frame openen","anchor_names":"Ankers","popup_opts":"Opties","advanced_props":"Geavanceerde eigenschappen","event_props":"Gebeurtenissen","popup_props":"Popup eigenschappen","general_props":"Algemene eigenschappen","advanced_tab":"Geavanceerd","events_tab":"Gebeurtenissen","popup_tab":"Popup","general_tab":"Algemeen",list:"Lijst","is_external":"De ingevoerde URL lijkt op een externe link. Wilt u de vereiste http:// tekst voorvoegen?","is_email":"De ingevoerde URL lijkt op een e-mailadres. Wilt u de vereiste mailto: tekst voorvoegen?",titlefield:"Titel",target:"Doel",url:"URL",title:"Link invoegen/bewerken","link_list":"Lijst",rtl:"Van rechts naar links",ltr:"Van links naar rechts",accesskey:"Toegangstoets",tabindex:"Tabvolgorde",rev:"Relatie van doel tot pagina",rel:"Relatie van pagina tot doel",mime:"MIME type",encoding:"Taalcodering",langcode:"Taalcode","target_langcode":"Taal",width:"Breedte",height:"Hoogte"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nn_dlg.js
new file mode 100644
index 000000000..8644b0bc0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.advlink_dlg',{"target_name":"M\u00e5lnamn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Posisjon (X/Y)",langdir:"Skriftretning","popup_size":"Storleik","popup_dependent":"Avhengig vindu (berre i Mozilla/Firefox)","popup_resizable":"Gjer vindauget skalerbart","popup_location":"Vis plasseringsline","popup_menubar":"Vis menyline","popup_toolbar":"Vis verktyliner","popup_statusbar":"Vis statusline","popup_scrollbars":"Vis rullefelt","popup_return":"Set inn \\\'return false\\\'","popup_name":"Namn p\u00e5 vindauge","popup_url":"Popup URL",popup:"Javascript-popup","target_blank":"Opne i nytt vindauge","target_top":"Opne i toppvindauge (erstattar alle rammer)","target_parent":"Opne i overordna vindauge/ramme","target_same":"Opne i same vindauge/ramme","anchor_names":"Anker","popup_opts":"Innstillingar","advanced_props":"Generelle eigenskapar","event_props":"Hendingar","popup_props":"Popup-eigenskapar","general_props":"Generelt","advanced_tab":"Avansert","events_tab":"Hendingar","popup_tab":"Popup","general_tab":"Generelt",list:"Lenkjeliste","is_external":"URL-en du skreiv inn ser ut til \u00e5 vere ei eksern lenkje. \u00d8nskjer du \u00e5 leggje til det obligatoriske http://-prefikset?","is_email":"URL-en du skreiv inn ser ut til \u00e5 vere ei e-postadresse. \u00d8nskjer du \u00e5 leggje til det obligatoriske mailto:-prefikset?",titlefield:"Tittel",target:"M\u00e5l",url:"Lenkje-URL",title:"Set inn / rediger lenkje","link_list":"Lenkjeliste",rtl:"H\u00f8gre mot venstre",ltr:"Venstre mot h\u00f8gre",accesskey:"Hurtigtast",tabindex:"Tabulatorindeks",rev:"M\u00e5let sitt forhold til sida",rel:"Sida sitt forhold til m\u00e5let",mime:"M\u00e5let sin MIME-type",encoding:"Teiknkonvertering",langcode:"Spr\u00e5kkode","target_langcode":"M\u00e5lspr\u00e5k",width:"Breidde",height:"H\u00f8gde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/no_dlg.js
new file mode 100644
index 000000000..6289918fc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.advlink_dlg',{"target_name":"M\u00e5lnavn",classes:"Klasse",style:"Stil",id:"Id","popup_position":"Posisjon (X/Y)",langdir:"Skriftretning","popup_size":"St\u00f8rrelse","popup_dependent":"Avhengig vindu (kun i Mozilla/Firefox)","popup_resizable":"Gj\u00f8r vinduet skalerbart","popup_location":"Vis plasseringslinje","popup_menubar":"Vis menylinje","popup_toolbar":"Vis verkt\u00f8ylinjer","popup_statusbar":"Vis statusline","popup_scrollbars":"Vis rullefelt","popup_return":"Sett inn \\\'return false\\\'","popup_name":"Navn p\u00e5 vindu","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u00c5pne i nytt vindu","target_top":"\u00c5pne i toppvindu (erstatter alle rammer)","target_parent":"\u00c5pne i overordnet vindu/ramme","target_same":"\u00c5pne i samme vindu/ramme","anchor_names":"Anker","popup_opts":"Innstillinger","advanced_props":"Avanserte egenskaper","event_props":"Hendelser","popup_props":"Popup egenskaper","general_props":"Generelle egenskaper","advanced_tab":"Avansert","events_tab":"Hendelser","popup_tab":"Popup","general_tab":"Generelt",list:"Liste over lenker","is_external":"URLen du skrev inn ser ut til \u00e5 v\u00e6re en ekstern lenke. \u00d8nsker du \u00e5 legge til obligatorisk http://-prefiks?","is_email":"URLen du skrev inn ser ut til \u00e5 v\u00e6re Epost adresse. \u00d8nsker du \u00e5 legge til obligatorisk mailto:-prefiks?",titlefield:"Tittel",target:"M\u00e5l",url:"Lenke URL",title:"Sett inn/editer lenke","link_list":"Liste over lenker",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",accesskey:"Hurtigtast",tabindex:"Tabulator indeks",rev:"Forholdet mellom m\u00e5l og side",rel:"Forholdet mellom side og m\u00e5l",mime:"M\u00e5l MIME type",encoding:"M\u00e5l karakter koding",langcode:"Spr\u00e5kkode","target_langcode":"M\u00e5lspr\u00e5k",width:"Bredde",height:"H\u00f8yde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/pl_dlg.js
new file mode 100644
index 000000000..d529d7ad1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.advlink_dlg',{"target_name":"Nazwa celu",classes:"Klasy",style:"Styl",id:"Id","popup_position":"Pozycja (X/Y)",langdir:"Kierunek czytania tekstu","popup_size":"Rozmiar","popup_dependent":"Zale\u017cny (Mozilla/Firefox wy\u0142\u0105cznie)","popup_resizable":"Stw\u00f3rz okno z mo\u017cliwo\u015bci\u0105 zmiany rozmiaru","popup_location":"Poka\u017c pasek adresu","popup_menubar":"Poka\u017c pasek menu","popup_toolbar":"Poka\u017c narz\u0119dzia","popup_statusbar":"Poka\u017c pasek statusu","popup_scrollbars":"Poka\u017c paski przewijania","popup_return":"Wstaw \'return false\'","popup_name":"Nazwa okna","popup_url":"URL okna",popup:"Wyskakuj\u0105ce okno","target_blank":"Otw\u00f3rz w nowym oknie","target_top":"Otw\u00f3rz w g\u00f3rnej ramce (zamie\u0144 wszystkie ramki)","target_parent":"Otw\u00f3rz w nadrz\u0119dnym oknie / ramce","target_same":"Otw\u00f3rz w tym oknie / ramce","anchor_names":"Kotwice","popup_opts":"Opcje","advanced_props":"Zaawansowae w\u0142a\u015bciwo\u015bci","event_props":"Zdarzenia","popup_props":"W\u0142a\u015bciwo\u015bci okna","general_props":"W\u0142a\u015bciwo\u015bci og\u00f3lne","advanced_tab":"Zaawansowane","events_tab":"Zdarzenia","popup_tab":"Popup","general_tab":"Og\u00f3lne",list:"Lista link\u00f3w","is_external":"Podany adres wydaje si\u0119 by\u0107 zewn\u0119trznym linkiem, czy chcesz doda\u0107 wymagany prefiks http://?","is_email":"Podany adres wydaje si\u0119 by\u0107 adresem emailowym, czy chcesz doda\u0107 wymagany prefiks mailto:?",titlefield:"Tytu\u0142",target:"Cel",url:"URL linka",title:"Wstaw/edytuj link","link_list":"Lista odno\u015bnik\u00f3w",rtl:"Kierunek z prawej do lewej",ltr:"Kierunek z lewej do prawej",accesskey:"Klawisz skr\u00f3tu",tabindex:"Numer tab",rev:"Relacje celu do strony",rel:"Relacje strony do celu",mime:"Docelowy typ MIME",encoding:"Kodowanie znak\u00f3w celu",langcode:"Kod j\u0119zyka","target_langcode":"Docelowy kod j\u0119zyka",width:"Szeroko\u015b\u0107",height:"Wysoko\u015b\u0107"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ps_dlg.js
new file mode 100644
index 000000000..b0f91e22c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/pt_dlg.js
new file mode 100644
index 000000000..816785544
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.advlink_dlg',{"target_name":"Nome do alvo",classes:"Classes",style:"Estilo",id:"Id","popup_position":"Posi\u00e7\u00e3o (X/Y)",langdir:"Dire\u00e7\u00e3o do texto","popup_size":"Tamanho","popup_dependent":"Dependente (Mozilla/Firefox apenas)","popup_resizable":"Permitir altera\u00e7\u00e3o do tamanho da janela","popup_location":"Mostrar a barra de endere\u00e7os","popup_menubar":"Mostrar a barra de menu","popup_toolbar":"Mostrar a barra de ferramentas","popup_statusbar":"Mostrar a barra de status","popup_scrollbars":"Mostrar as barras de scroll","popup_return":"Inserir \"return false\"","popup_name":"Nome da janela","popup_url":"URL do popup",popup:"Popup javascript","target_blank":"Abrir numa nova janela","target_top":"Abrir na p\u00e1gina inteira (substitui todos os quadros)","target_parent":"Abrir na janela/quadro pai","target_same":"Abrir nesta janela/quadro","anchor_names":"\u00c2ncoras","popup_opts":"Op\u00e7\u00f5es","advanced_props":"Propriedades avan\u00e7adas","event_props":"Eventos","popup_props":"Propriedades de popup","general_props":"Propriedades gerais","advanced_tab":"Avan\u00e7ado","events_tab":"Eventos","popup_tab":"Popup","general_tab":"Geral",list:"Lista de hyperlinks","is_external":"A URL digitada parece conduzir a um link externo. Deseja acrescentar o prefixo necess\u00e1rio http://?","is_email":"A URL digitada parece ser um endere\u00e7o de e-mail. Deseja acrescentar o prefixo necess\u00e1rio mailto:?",titlefield:"T\u00edtulo",target:"Alvo",url:"URL do hyperlink",title:"Inserir/editar hyperlink","link_list":"Lista de hyperlinks",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",accesskey:"Chave de acesso",tabindex:"Tabindex",rev:"Rela\u00e7\u00e3o alvo/p\u00e1gina",rel:"Rela\u00e7\u00e3o p\u00e1gina/alvo",mime:"Tipo MIME alvo",encoding:"Codifica\u00e7\u00e3o de caracteres",langcode:"C\u00f3digo do idioma","target_langcode":"Idioma alvo",width:"Largura",height:"Altura"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ro_dlg.js
new file mode 100644
index 000000000..dc12a9821
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.advlink_dlg',{"target_name":"Nume \u021bint\u0103",classes:"Clase",style:"Stil",id:"Id","popup_position":"Pozi\u021bie (X/Y)",langdir:"Direc\u021bie limb\u0103","popup_size":"M\u0103rime","popup_dependent":"Dependent (Mozilla/Firefox)?","popup_resizable":"Fereastr\u0103 redimensionabil\u0103?","popup_location":"Arat\u0103 bara de adrese","popup_menubar":"Arat\u0103 meniul","popup_toolbar":"Arat\u0103 toolbar-uri","popup_statusbar":"Arat\u0103 bara de stare","popup_scrollbars":"Arat\u0103 barele de derulare","popup_return":"Insereaz\u0103 \'return false\'","popup_name":"Nume fereastr\u0103","popup_url":"URL Popup",popup:"Javascript Popup","target_blank":"Deschide \u00een fereastr\u0103 nou\u0103","target_top":"Deschide \u00een cadrul cel mai mare (\u00eenlocuie\u0219te celelalte cadre)","target_parent":"Deschide leg\u0103tura \u00een fereastra/cadrul p\u0103rinte","target_same":"Deschide leg\u0103tura \u00een fereastra/cadrul de fa\u021b\u0103","anchor_names":"Ancore","popup_opts":"Op\u021biuni","advanced_props":"Propriet\u0103\u021bi avansate","event_props":"Evenimente","popup_props":"Propriet\u0103\u021bi popup","general_props":"Propriet\u0103\u021bi generale","advanced_tab":"Avansat","events_tab":"Evenimente","popup_tab":"Popup","general_tab":"General",list:"List\u0103 de leg\u0103turi","is_external":"URL-ul pe care l-ai introdus pare a fi o leg\u0103tur\u0103 extern\u0103. Vrei s\u0103 adaug \u0219i prefixul http:// necesar?","is_email":"URL-ul pe care l-ai introdus pare a fi o adres\u0103 de e-mail. Vrei s\u0103 adaug \u0219i prefixul mailto: necesar?",titlefield:"Titlu",target:"\u021aint\u0103",url:"URL leg\u0103tur\u0103",title:"Insereaz\u0103/editeaz\u0103 link","link_list":"List\u0103 leg\u0103turi",rtl:"Dreapta la st\u00e2nga",ltr:"St\u00e2nga la dreapta",accesskey:"Cheie de acces",tabindex:"Tabindex",rev:"Rela\u0163ia \u0163intei cu pagina",rel:"Rela\u021bia paginii cu \u021binta",mime:"MIME type \u021bint\u0103",encoding:"Set de caractere \u021bint\u0103",langcode:"Cod limb\u0103","target_langcode":"Limb\u0103",width:"L\u0103\u021bime",height:"\u00cen\u0103l\u021bime"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ru_dlg.js
new file mode 100644
index 000000000..faa628578
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.advlink_dlg',{"target_name":"\u0418\u043c\u044f \u0446\u0435\u043b\u0438",classes:"\u041a\u043b\u0430\u0441\u0441\u044b",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0418\u043c\u044f","popup_position":"\u041f\u043e\u0437\u0438\u0446\u0438\u044f (X/Y)",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430","popup_size":"\u0420\u0430\u0437\u043c\u0435\u0440","popup_dependent":"\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Firefox)","popup_resizable":"\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440","popup_location":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f","popup_menubar":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043c\u0435\u043d\u044e","popup_toolbar":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432","popup_statusbar":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f","popup_scrollbars":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0441\u044b \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438","popup_return":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \'return false\'","popup_name":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430","popup_url":"\u0410\u0434\u0440\u0435\u0441",popup:"\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Java","target_blank":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435","target_top":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043a\u0430\u0434\u0440\u0435 (\u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043a\u0430\u0434\u0440\u044b)","target_parent":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043e\u043a\u043d\u0435/\u043a\u0430\u0434\u0440\u0435","target_same":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043e\u043a\u043d\u0435/\u043a\u0430\u0434\u0440\u0435","anchor_names":"\u042f\u043a\u043e\u0440\u044f","popup_opts":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430","advanced_props":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","event_props":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u0439","popup_props":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f","general_props":"\u041e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","events_tab":"\u0421\u043e\u0431\u044b\u0442\u0438\u044f","popup_tab":"\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435","general_tab":"\u041e\u0431\u0449\u0435\u0435",list:"\u0421\u043f\u0438\u0441\u043e\u043a","is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 http://?","is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 mailto:?",titlefield:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",target:"\u0426\u0435\u043b\u044c",url:"\u0410\u0434\u0440\u0435\u0441",title:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0441\u044b\u043b\u043a\u0438","link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",accesskey:"\u041a\u043b\u044e\u0447 \u0434\u043e\u0441\u0442\u0443\u043f\u0430",tabindex:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",rev:"\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u0438 \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435",rel:"\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043a \u0446\u0435\u043b\u0438",mime:"MIME \u0442\u0438\u043f \u0446\u0435\u043b\u0438",encoding:"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0446\u0435\u043b\u0438",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430","target_langcode":"\u042f\u0437\u044b\u043a \u0446\u0435\u043b\u0438",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u044b\u0441\u043e\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sc_dlg.js
new file mode 100644
index 000000000..dfb752460
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u7c7b\u578b",style:"\u6837\u5f0f",id:"Id","popup_position":"\u5ea7\u6807(X/Y)",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","popup_size":"\u5c3a\u5bf8","popup_dependent":"\u4ece\u5c5e(\u53ea\u6709Mozilla/Firefox\u6709\u6548)","popup_resizable":"\u53ef\u8c03\u6574\u89c6\u7a97\u5c3a\u5bf8","popup_location":"\u663e\u793a\u7f51\u5740\u5217","popup_menubar":"\u663e\u793a\u529f\u80fd\u8868","popup_toolbar":"\u663e\u793a\u5de5\u5177\u680f","popup_statusbar":"\u663e\u793a\u72b6\u6001\u680f","popup_scrollbars":"\u663e\u793a\u8fb9\u6761","popup_return":"\u63d2\u5165\'return false\'","popup_name":"\u7a97\u53e3\u540d\u79f0","popup_url":"\u5f39\u51fa\u7a97\u53e3\u7f51\u5740",popup:"Javascript\u5f39\u51fa\u7a97\u53e3","target_blank":"\u6253\u5f00\u5728\u65b0\u89c6\u7a97","target_top":"\u6253\u5f00\u5728\u6700\u4e0a\u5c42\u7684\u6846\u67b6(\u66ff\u6362\u6240\u6709\u6846\u67b6)","target_parent":"\u6253\u5f00\u5728\u7236\u89c6\u7a97/\u6846\u67b6","target_same":"\u6253\u5f00\u5728\u65b0\u89c6\u7a97/\u6846\u67b6","anchor_names":"\u951a\u70b9","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5f39\u51fa\u89c6\u7a97\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5f39\u51fa\u7a97\u53e3","general_tab":"\u4e00\u822c",list:"\u94fe\u7ed3\u6e05\u5355","is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u65b9\u52a0\u5165http://\uff1f ","is_email":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u4f4d\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u90ae\u5740\u524d\u65b9\u52a0\u5165mailto:\uff1f ",titlefield:"\u67e5\u627e",target:"\u76ee\u6807",url:"\u94fe\u7ed3\u4f4d\u5740",title:"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","link_list":"\u94fe\u7ed3\u6e05\u5355",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",accesskey:"\u5feb\u6377\u952e",tabindex:"Tab\u7d22\u5f15",rev:"\u76ee\u6807\u5230\u9875\u7684\u5173\u7cfb",rel:"\u9875\u5230\u76ee\u6807\u7684\u5173\u7cfb",mime:"\u76ee\u6807MIME\u7c7b\u578b",encoding:"\u7f16\u7801",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u7684\u8bed\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/se_dlg.js
new file mode 100644
index 000000000..fd3d52f5f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.advlink_dlg',{"target_name":"M\u00e5lnamn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Position (x/y)",langdir:"Skriftriktning","popup_size":"Storlek","popup_dependent":"Beroende av (Mozilla/Firefox enbart)","popup_resizable":"Skalbart f\u00f6nster","popup_location":"Adressraden","popup_menubar":"Menyrad","popup_toolbar":"Verktygsf\u00e4lt","popup_statusbar":"Statusf\u00e4lt","popup_scrollbars":"Rullningslister","popup_return":"Infoga \'return false\'","popup_name":"F\u00f6nsternamn","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u00d6ppna i nytt f\u00f6nster","target_top":"\u00d6ppna i toppramen (ers\u00e4tter alla ramar)","target_parent":"\u00d6ppna i \u00f6verliggande f\u00f6nster/ram","target_same":"\u00d6ppna i detta f\u00f6nster/ram","anchor_names":"Bokm\u00e4rken","popup_opts":"Inst\u00e4llningar","advanced_props":"Avancerade inst\u00e4llningar","event_props":"H\u00e4ndelser","popup_props":"Popup-inst\u00e4llningar","general_props":"Generella inst\u00e4llningar","advanced_tab":"Avancerat","events_tab":"H\u00e4ndelser","popup_tab":"Popup","general_tab":"Generellt",list:"L\u00e4nklista","is_external":"L\u00e4nken du angav verkar vara en extern adress. Vill du infoga http:// prefixet p\u00e5 l\u00e4nken?","is_email":"L\u00e4nken du angav verkar vara en e-post adress. Vill du infoga mailto: prefixet p\u00e5 l\u00e4nken?",titlefield:"Titel",target:"M\u00e5l",url:"L\u00e4nkens URL",title:"Infoga/redigera l\u00e4nk","link_list":"L\u00e4nklista",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",accesskey:"Snabbtangent",tabindex:"Tabbindex",rev:"Omv\u00e4nd relation (rev)",rel:"Relation (rel attribut)",mime:"MIME type",encoding:"Teckenformattering",langcode:"Spr\u00e5kkod","target_langcode":"M\u00e5lspr\u00e5k",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/si_dlg.js
new file mode 100644
index 000000000..c3cc3ba21
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sk_dlg.js
new file mode 100644
index 000000000..288ece53b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.advlink_dlg',{"target_name":"N\u00e1zov cie\u013ea",classes:"Triedy",style:"\u0160t\u00fdl",id:"ID","popup_position":"Umiestnenie (X/Y)",langdir:"Smer textu","popup_size":"Ve\u013ekos\u0165","popup_dependent":"Z\u00e1vislos\u0165 (iba Mozilla Firefox)","popup_resizable":"Umo\u017eni\u0165 zmenu ve\u013ekosti","popup_location":"Zobrazi\u0165 li\u0161tu umiestnen\u00ed","popup_menubar":"Zobrazi\u0165 ponuku","popup_toolbar":"Zobrazi\u0165 panel n\u00e1strojov","popup_statusbar":"Zobrazi\u0165 stavov\u00fd riadok","popup_scrollbars":"Zobrazi\u0165 posuvn\u00edky","popup_return":"Vlo\u017ei\u0165 \'return false\'","popup_name":"N\u00e1zov okna","popup_url":"URL vyskakovacieho okna",popup:"JavaScriptov\u00e9 okno","target_blank":"Otvori\u0165 v novom okne","target_top":"Otvori\u0165 v hlavnom okne/r\u00e1me (nahradi\u0165 v\u0161etky r\u00e1my)","target_parent":"Otvori\u0165 v nadradenom okne/r\u00e1me","target_same":"Otvori\u0165 v rovnakom okne/r\u00e1me","anchor_names":"Z\u00e1lo\u017eka","popup_opts":"Mo\u017enosti","advanced_props":"Roz\u0161\u00edren\u00e9 parametre","event_props":"Udalosti","popup_props":"Vlastnosti vyskakovacieho okna","general_props":"Obecn\u00e9 parametre","advanced_tab":"Roz\u0161\u00edren\u00e9","events_tab":"Udalosti","popup_tab":"Vyskakovacie okno","general_tab":"Obecn\u00e9",list:"Zoznam odkazov","is_external":"Zadan\u00e1 URL vyzer\u00e1 ako extern\u00fd odkaz, chcete doplni\u0165 povinn\u00fd prefix http://?","is_email":"Zadan\u00e1 URL vyzer\u00e1 ako e-mailov\u00e1 adresa, chcete doplni\u0165 povinn\u00fd prefix mailto:?",titlefield:"Titulok",target:"Cie\u013e",url:"URL odkazu",title:"Vlo\u017ei\u0165/upravi\u0165 odkaz","link_list":"Zoznam odkazov",rtl:"Sprava do\u013eava",ltr:"Z\u013eava doprava",accesskey:"Kl\u00e1vesov\u00e1 skratka",tabindex:"Poradie pre tabul\u00e1tor",rev:"Vz\u0165ah cie\u013ea k str\u00e1nke",rel:"Vz\u0165ah str\u00e1nky k cie\u013eu",mime:"MIME typ",encoding:"K\u00f3dovanie",langcode:"K\u00f3d jazyka","target_langcode":"Jazyk cie\u013ea",width:"\u0160\u00edrka",height:"V\u00fd\u0161ka"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sl_dlg.js
new file mode 100644
index 000000000..34a398b7e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.advlink_dlg',{"target_name":"Ime cilja",classes:"Razredi",style:"Slog",id:"Id","popup_position":"Polo\u017eaj (X/Y)",langdir:"Smer pisave","popup_size":"Velikost","popup_dependent":"Odvisno (le za Mozillo/Firefox)","popup_resizable":"Omogo\u010di pvoe\u010devanje okna","popup_location":"Prika\u017ei vrstico naslova","popup_menubar":"Prika\u017ei meni","popup_toolbar":"Prika\u017ei orodjarno","popup_statusbar":"Prika\u017ei vrstico stanja","popup_scrollbars":"Prika\u017ei drsnike","popup_return":"Vstavi \'return false\'","popup_name":"Ime okna","popup_url":"Naslov URL okna",popup:"Dodatno okno z javascriptom","target_blank":"Odpri v novem oknu","target_top":"Odpri v vrhnjem okviru (nadomesti vse okvire)","target_parent":"Odpri v nadrejenem oknu / okviru","target_same":"Odpri v tem oknu / okviru","anchor_names":"Sidra","popup_opts":"Mo\u017enosti","advanced_props":"Napredne lastnosti","event_props":"Dogodki","popup_props":"Lastnosti okna","general_props":"Splo\u0161ne lastnosti","advanced_tab":"Napredno","events_tab":"Dogodki","popup_tab":"Dodatno okno","general_tab":"Splo\u0161no",list:"Seznam povezav","is_external":"Vneseni naslov verjetno predstavlja zunanjo povezavo, \u017eelite da dodam zahtevano predpono","is_email":"Vneseni naslov verjetno prestavlja e-naslov, \u017eelite da dodam zahtevano predpono \\\'mailto:\\\'?",titlefield:"Naslov",target:"Cilj",url:"Naslov URL",title:"Vstavi/uredi povezavo","link_list":"Seznam povezav",rtl:"Od desne proti levi",ltr:"Od leve proti desni",accesskey:"Tipka dostopa",tabindex:"Zap. \u0161t.",rev:"Razmerje cilja do strani",rel:"Razmerje strani do cilja",mime:"Tip MIME cilja",encoding:"Kodiranje znakov cilja",langcode:"Koda jezika","target_langcode":"Jezik cilja",width:"\u0160irina",height:"Vi\u0161ina"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sq_dlg.js
new file mode 100644
index 000000000..67e428683
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.advlink_dlg',{"target_name":"Emri",classes:"Klasat",style:"Stili",id:"Id","popup_position":"Pozicioni (X/Y)",langdir:"Drejtimi i gjuh\u00ebs","popup_size":"Madh\u00ebsia","popup_dependent":"I varur (vet\u00ebm Mozilla/Firefox)","popup_resizable":"B\u00ebje dritaren t\u00eb zmadhueshme","popup_location":"Shfaq shiritin e adres\u00ebs","popup_menubar":"Shfaq menun\u00eb","popup_toolbar":"Shfaq butonat","popup_statusbar":"Shfaq shiritin e statusit","popup_scrollbars":"Shfaq ashensor\u00ebt","popup_return":"Fut \'return false\'","popup_name":"Emri i dritares","popup_url":"URL e popup",popup:"Popup me Javascript","target_blank":"Hape n\u00eb dritare t\u00eb re","target_top":"Hape n\u00eb frame-in e m\u00ebsip\u00ebrm","target_parent":"Hape n\u00eb dritaren m\u00ebm\u00eb / frame","target_same":"Hape n\u00eb k\u00ebt\u00eb dritare / frame","anchor_names":"Lidhjet","popup_opts":"Opsionet","advanced_props":"Tipare t\u00eb avancuara","event_props":"Ngjarjet","popup_props":"Tiparet e popup","general_props":"Tipare t\u00eb p\u00ebrgjithshme","advanced_tab":"T\u00eb Avancuara","events_tab":"Ngjarjet","popup_tab":"Popup","general_tab":"T\u00eb P\u00ebrgjithshme",list:"Lista e lidhjeve","is_external":"Adresa q\u00eb keni futur duket si lidhje e jashtme. D\u00ebshironi t\u00eb shtoni prefiksin http://?","is_email":"Adresa q\u00eb keni futur duket si email. D\u00ebshironi t\u00eb shtoni prefiksin mailto:?",titlefield:"Titulli",target:"Sh\u00ebnjestra",url:"URL e lidhjes",title:"Fut/edito lidhje","link_list":"Lista e lidhjeve",rtl:"Djathtas-Majtas",ltr:"Majtas-Djathtas",accesskey:"Butoni i aksesit",tabindex:"Indeksi i Tab",rev:"Marr\u00ebdh\u00ebnia sh\u00ebnjest\u00ebr-faqe",rel:"Marr\u00ebdh\u00ebnia faqe-sh\u00ebnjest\u00ebr",mime:"Tipi MIME i sh\u00ebnjestr\u00ebs",encoding:"Kodimi i karaktereve t\u00eb sh\u00ebnjestr\u00ebs",langcode:"Kodi i gjuh\u00ebs","target_langcode":"Gjuha e sh\u00ebnjestr\u00ebs",width:"Gjer\u00ebsia",height:"Gjat\u00ebsia"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sr_dlg.js
new file mode 100644
index 000000000..6e4bef205
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.advlink_dlg',{"target_name":"Naziv mete",classes:"Klase",style:"Stil",id:"Id","popup_position":"Pozicija (X/Y)",langdir:"Smer jezika","popup_size":"Veli\u010dina","popup_dependent":"Zavistan (samo za Mozilla/Firefox)","popup_resizable":"Prozor promenljive veli\u010dine","popup_location":"Prika\u017ei traku lokacije","popup_menubar":"Prika\u017ei traku menija","popup_toolbar":"Prika\u017ei trake sa alatkama","popup_statusbar":"Prika\u017ei statusnu traku","popup_scrollbars":"Prika\u017ei kliza\u010de","popup_return":"Umetni \'return false\'","popup_name":"Naziv prozora","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Otvori u novom prozoru","target_top":"Otvori u okviru na vrhu (zamenjuje sve okvire)","target_parent":"Otvori u izvornom prozoru/okviru","target_same":"Otovori u ovom prozoru/okviru","anchor_names":"Sidra","popup_opts":"Opcije","advanced_props":"Napredne osobine","event_props":"Doga\u0111aji","popup_props":"Osobine popup-a","general_props":"Osnovne osobine","advanced_tab":"Napredno","events_tab":"Doga\u0111aji","popup_tab":"Popup","general_tab":"Osnovno",list:"Lista linkova","is_external":"URL koji ste uneli izgleda kao spolja\u0161nji link, da li \u017eelite da dodate neophodni http:// prefiks?","is_email":"URL koji ste uneli izgleda kao e-mail adresa, da li \u017eelite da dodate neophodni mailto: prefiks?",titlefield:"Naslov",target:"Meta",url:"URL linka",title:"Umetni/Uredi link","link_list":"Lista linkova",rtl:"Zdesna nalevo",ltr:"Sleva nadesno",accesskey:"Taster za pristup",tabindex:"Tabindex",rev:"Odnos mete prema stranici",rel:"Odnos stranice prema meti",mime:"Odabrani MIME tip",encoding:"Odabrano kodiranje znakova",langcode:"Kod jezika","target_langcode":"Odabrani jezik",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sv_dlg.js
new file mode 100644
index 000000000..8a6194472
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.advlink_dlg',{"target_name":"M\u00e5lnamn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Position (x/y)",langdir:"Skriftriktning","popup_size":"Storlek","popup_dependent":"Beroende av (Mozilla/Firefox enbart)","popup_resizable":"Skalbart f\u00f6nster","popup_location":"Adressraden","popup_menubar":"Menyrad","popup_toolbar":"Verktygsf\u00e4lt","popup_statusbar":"Statusf\u00e4lt","popup_scrollbars":"Rullningslister","popup_return":"Infoga \'return false\'","popup_name":"F\u00f6nsternamn","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u00d6ppna i nytt f\u00f6nster","target_top":"\u00d6ppna i toppramen (ers\u00e4tter alla ramar)","target_parent":"\u00d6ppna i \u00f6verliggande f\u00f6nster/ram","target_same":"\u00d6ppna i detta f\u00f6nster/ram","anchor_names":"Bokm\u00e4rken","popup_opts":"Inst\u00e4llningar","advanced_props":"Avancerade inst\u00e4llningar","event_props":"H\u00e4ndelser","popup_props":"Popup-inst\u00e4llningar","general_props":"Generella inst\u00e4llningar","advanced_tab":"Avancerat","events_tab":"H\u00e4ndelser","popup_tab":"Popup","general_tab":"Generellt",list:"L\u00e4nklista","is_external":"L\u00e4nken du angav verkar vara en extern adress. Vill du infoga http:// prefixet p\u00e5 l\u00e4nken?","is_email":"L\u00e4nken du angav verkar vara en e-post adress. Vill du infoga mailto: prefixet p\u00e5 l\u00e4nken?",titlefield:"Titel",target:"M\u00e5l",url:"L\u00e4nkens URL",title:"Infoga/redigera l\u00e4nk","link_list":"L\u00e4nklista",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",accesskey:"Snabbtangent",tabindex:"Tabbindex",rev:"Omv\u00e4nd relation (rev)",rel:"Relation (rel attribut)",mime:"MIME type",encoding:"Teckenformattering",langcode:"Spr\u00e5kkod","target_langcode":"M\u00e5lspr\u00e5k",width:"Bredd",height:"H\u00f6jd"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sy_dlg.js
new file mode 100644
index 000000000..c47caeae8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ta_dlg.js
new file mode 100644
index 000000000..4cf49c312
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/te_dlg.js
new file mode 100644
index 000000000..323cf02c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/th_dlg.js
new file mode 100644
index 000000000..ab37a3c6f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.advlink_dlg',{"target_name":"\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22",classes:"\u0e04\u0e25\u0e32\u0e2a",style:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",id:"Id","popup_position":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07 (X/Y)",langdir:"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e2d\u0e48\u0e32\u0e19","popup_size":"\u0e02\u0e19\u0e32\u0e14","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e02\u0e19\u0e32\u0e14\u0e02\u0e2d\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e44\u0e14\u0e49","popup_location":"\u0e41\u0e2a\u0e14\u0e07\u0e0a\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48","popup_menubar":"\u0e41\u0e2a\u0e14\u0e07\u0e41\u0e16\u0e1a\u0e40\u0e21\u0e19\u0e39","popup_toolbar":"\u0e41\u0e2a\u0e14\u0e07\u0e17\u0e39\u0e25\u0e1a\u0e32\u0e23\u0e4c","popup_statusbar":"\u0e41\u0e2a\u0e14\u0e07\u0e41\u0e16\u0e1a\u0e2a\u0e16\u0e32\u0e19\u0e30","popup_scrollbars":"\u0e41\u0e2a\u0e14\u0e07\u0e2a\u0e01\u0e23\u0e2d\u0e25\u0e1a\u0e32\u0e23\u0e4c","popup_return":"\u0e40\u0e1e\u0e34\u0e48\u0e21 \'return false\'","popup_name":"\u0e0a\u0e37\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07","popup_url":"\u0e1b\u0e4a\u0e2d\u0e1b-\u0e2d\u0e31\u0e1e URL",popup:"\u0e08\u0e32\u0e27\u0e32 \u0e1b\u0e4a\u0e2d\u0e1b-\u0e2d\u0e31\u0e1e","target_blank":"\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48","target_top":"\u0e40\u0e1b\u0e34\u0e14\u0e17\u0e35\u0e48\u0e40\u0e1f\u0e23\u0e21\u0e1a\u0e19 (\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e17\u0e38\u0e01\u0e40\u0e1f\u0e23\u0e21)","target_parent":"\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e40\u0e14\u0e34\u0e21 / \u0e40\u0e1f\u0e23\u0e21","target_same":"\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48 / \u0e40\u0e1f\u0e23\u0e21","anchor_names":"\u0e0a\u0e37\u0e48\u0e2d\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","popup_opts":"\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01","advanced_props":"\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","event_props":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21","popup_props":"\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e1b\u0e4a\u0e2d\u0e1b-\u0e2d\u0e31\u0e1e","general_props":"\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","advanced_tab":"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","events_tab":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21","popup_tab":"\u0e1b\u0e4a\u0e2d\u0e1b-\u0e2d\u0e31\u0e1e","general_tab":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b",list:"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","is_external":"URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e1b\u0e49\u0e2d\u0e19\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01\u0e25\u0e34\u0e07\u0e04\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21 http:// \u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48 ?","is_email":"URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e1b\u0e49\u0e2d\u0e19\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e08\u0e30\u0e21\u0e35\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e2d\u0e22\u0e39\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21 mailto: \u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48 ",titlefield:"\u0e0a\u0e37\u0e48\u0e2d",target:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22",url:"\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48 \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c",title:"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","link_list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c",rtl:"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22",ltr:"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22 MIME type",encoding:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23",langcode:"\u0e42\u0e04\u0e49\u0e14\u0e20\u0e32\u0e29\u0e32","target_langcode":"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22 \u0e20\u0e32\u0e29\u0e32",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tn_dlg.js
new file mode 100644
index 000000000..f7d6e8c44
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tr_dlg.js
new file mode 100644
index 000000000..447cc3a0d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.advlink_dlg',{"target_name":"Hedef ad\u0131",classes:"S\u0131n\u0131fla",style:"Stil",id:"Id","popup_position":"Konum (X/Y)",langdir:"Dil y\u00f6n\u00fc","popup_size":"Boyut","popup_dependent":"Ba\u011f\u0131ml\u0131 (Sadece Mozilla Firefox)","popup_resizable":"Pencereyi boyutland\u0131r\u0131labilir yap","popup_location":"Aderes \u00e7ubu\u011funu g\u00f6ster","popup_menubar":"Men\u00fc \u00e7ubu\u011funu g\u00f6ster","popup_toolbar":"Ara\u00e7 kutusunu g\u00f6ster","popup_statusbar":"Durum \u00e7ubu\u011funu g\u00f6ster","popup_scrollbars":"Kayd\u0131rma \u00e7ubuklar\u0131n\u0131 g\u00f6ster","popup_return":"Ekle \'return false\'","popup_name":"Pencere ad\u0131","popup_url":"A\u00e7\u0131l\u0131r pencere URL\'si",popup:"Javascript a\u00e7\u0131l\u0131r pencere","target_blank":"Yeni pencerede a\u00e7","target_top":"\u00dcst \u00e7er\u00e7evede a\u00e7 (t\u00fcm \u00e7er\u00e7eveleri de\u011fi\u015ftir) ","target_parent":"Ana pencerede / \u00e7er\u00e7evede a\u00e7","target_same":"Pencerede / \u00e7er\u00e7evede a\u00e7","anchor_names":"Nesne tutucular","popup_opts":"Se\u00e7enekler","advanced_props":"Geli\u015fmi\u015f \u00f6zellikler","event_props":"Olaylar","popup_props":"A\u00e7\u0131l\u0131r pencere \u00f6zellikleri","general_props":"Genel \u00f6zellikler","advanced_tab":"Geli\u015fmi\u015f","events_tab":"Olaylar","popup_tab":"A\u00e7\u0131l\u0131r pencere","general_tab":"Genel",list:"Ba\u011flant\u0131 listesi","is_external":"Girdi\u011fiz URL d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan http:// \u00f6nekinin eklenmesini ister misiniz?","is_email":"Girdi\u011finiz URL e-posta adresi gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan mailto: \u00f6nekinin eklenmesini ister misiniz? prefix?",titlefield:"Ba\u015fl\u0131k",target:"Hedef",url:"Ba\u011flant\u0131 URL\'si",title:"Ba\u011flant\u0131 ekle/d\u00fczenle","link_list":"Ba\u011flant\u0131 listesi",rtl:"Soldan sa\u011fa",ltr:"Sa\u011fdan sola",accesskey:"Eri\u015fim tu\u015fu",tabindex:"Sekme indeksi",rev:"Sayfadan hedefe ili\u015fki",rel:"Hedeften sayfaya ili\u015fki",mime:"Hedef MIME tipi",encoding:"Hedef karakter kodlama",langcode:"Dil kodu","target_langcode":"Hedef dil",width:"Geni\u015flik",height:"Y\u00fckseklik"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tt_dlg.js
new file mode 100644
index 000000000..9ee04edb3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.advlink_dlg',{"target_name":"\u76ee\u6a19\u540d\u7a31",classes:"\u6a23\u5f0f\u985e",style:"\u6a23\u5f0f",id:"Id","popup_position":"\u5ea7\u6a19 (X/Y)",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u5f9e\u5c6c\u65bc ( \u50c5 Mozilla/Firefox \u6709\u6548 )","popup_resizable":"\u53ef\u8abf\u6574\u7a97\u53e3\u5927\u5c0f","popup_location":"\u986f\u793a\u4f4d\u5740\u6b04","popup_menubar":"\u986f\u793a\u529f\u80fd\u8868\u5217","popup_toolbar":"\u986f\u793a\u5de5\u5177\u5217","popup_statusbar":"\u986f\u793a\u72c0\u614b\u5217","popup_scrollbars":"\u986f\u793a\u6372\u8ef8","popup_return":"\u63d2\u5165 \'return false\'","popup_name":"\u7a97\u53e3\u540d\u7a31","popup_url":"\u5f48\u51fa\u7a97\u53e3\u4f4d\u5740",popup:"Javascript \u5feb\u986f\u7a97\u53e3","target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u958b","target_top":"\u5728\u9802\u5c64\u7a97\u53e3\u6253\u958b","target_parent":"\u5728\u7236\u7a97\u53e3\u6253\u958b","target_same":"\u5728\u7576\u524d\u7a97\u53e3\u6253\u958b","anchor_names":"\u9328\u9ede","popup_opts":"\u9078\u9805","advanced_props":"\u9032\u968e\u5c6c\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5feb\u986f\u8996\u7a97\u5c6c\u6027","general_props":"\u57fa\u672c\u5c6c\u6027","advanced_tab":"\u9032\u968e","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5feb\u986f\u7a97\u53e3","general_tab":"\u57fa\u672c",list:"\u9023\u7d50\u6e05\u55ae","is_external":"\u60a8\u8f38\u5165\u7684\u7db2\u5740\u61c9\u8a72\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\uff0c\u662f\u5426\u9700\u8981\u5728\u7db2\u5740\u524d\u52a0\u4e0a http:// ?","is_email":"\u60a8\u8f38\u5165\u7684\u61c9\u8a72\u662f\u4e00\u500b\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u7db2\u5740\u524d\u52a0\u4e0a mailto: ? ",titlefield:"\u641c\u5c0b",target:"\u76ee\u6a19",url:"\u9023\u7d50\u5730\u5740",title:"\u63d2\u5165/\u7de8\u8f2f \u9023\u7d50","link_list":"\u9023\u7d50\u6e05\u55ae",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",accesskey:"\u5feb\u901f\u9375",tabindex:"Tab\u7d22\u5f15",rev:"rev",rel:"rel",mime:"\u76ee\u6a19 MIME \u985e\u578b",encoding:"\u76ee\u7684\u8a9e\u8a00\u7de8\u78bc",langcode:"\u8a9e\u8a00\u7de8\u78bc","target_langcode":"\u76ee\u7684\u8a9e\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tw_dlg.js
new file mode 100644
index 000000000..f715bacfa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.advlink_dlg',{"target_name":"\u76ee\u6a19\u540d\u7a31",classes:"\u985e\u5225",style:"\u6a23\u5f0f",id:"ID","popup_position":"\u4f4d\u7f6e(X/Y)",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u700f\u89bd\u5668\u9650\u5236(\u50c5\u652f\u63f4 Mozilla/Firefox)","popup_resizable":"\u5f48\u7a97\u53ef\u8abf\u6574\u5927\u5c0f","popup_location":"\u986f\u793a\u5730\u5740\u6b04","popup_menubar":"\u986f\u793a\u529f\u80fd\u9078\u55ae\u5217","popup_toolbar":"\u986f\u793a\u5de5\u5177\u5217","popup_statusbar":"\u986f\u793a\u72c0\u614b\u5217","popup_scrollbars":"\u986f\u793a\u6efe\u52d5\u689d","popup_return":"\u63d2\u5165 \"return false\"","popup_name":"\u8996\u7a97\u540d\u7a31","popup_url":"\u5f48\u51fa\u8996\u7a97URL",popup:"JavaScript \u5f48\u51fa\u8996\u7a97","target_blank":"\u5728\u65b0\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","target_top":"\u5728\u9802\u90e8\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","target_parent":"\u5728\u7236\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","target_same":"\u5728\u76ee\u524d\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","anchor_names":"\u66f8\u7c64","popup_opts":"\u9078\u9805","advanced_props":"\u9ad8\u7d1a\u5c6c\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5f48\u51fa\u8996\u7a97\u5c6c\u6027","general_props":"\u4e00\u822c\u5c6c\u6027","advanced_tab":"\u9ad8\u7d1a\u5c6c\u6027","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5f48\u51fa\u8996\u7a97","general_tab":"\u4e00\u822c",list:"\u8d85\u9023\u7d50\u6e05\u55ae","is_external":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u70ba\u5916\u90e8\u8d85\u9023\u7d50\uff0c\u662f\u5426\u8981\u52a0\u4e0a \"http://\" \uff1f","is_email":"\u60a8\u8f38\u5165\u7684\u4f3c\u4e4e\u662f\u96fb\u5b50\u90f5\u4ef6\u5730\u5740,\u662f\u5426\u9700\u8981\u52a0 mailto:\uff1f",titlefield:"\u6a19\u984c",target:"\u76ee\u6a19",url:"\u8d85\u9023\u7d50URL",title:"\u63d2\u5165/\u7de8\u8f2f\u8d85\u9023\u7d50","link_list":"\u8d85\u9023\u7d50\u6e05\u55ae",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",accesskey:"\u5feb\u901f\u9375",tabindex:"Tab\u7d22\u5f15",rev:"\u76ee\u6a19\u5230\u7db2\u9801\u7684\u95dc\u4fc2",rel:"\u7db2\u9801\u5230\u76ee\u6a19\u7684\u95dc\u4fc2",mime:"\u76ee\u6a19MIME\u985e\u578b",encoding:"\u76ee\u6a19\u8a9e\u8a00\u7de8\u78bc",langcode:"\u8a9e\u8a00\u7de8\u78bc","target_langcode":"\u76ee\u6a19\u8a9e\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/uk_dlg.js
new file mode 100644
index 000000000..91d935ea8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.advlink_dlg',{"target_name":"\u041d\u0430\u0437\u0432\u0430 \u0446\u0456\u043b\u0456",classes:"\u041a\u043b\u0430\u0441\u0438",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440","popup_position":"\u041f\u043e\u0437\u0438\u0446\u0456\u044f (X/Y)",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c \u043c\u043e\u0432\u0438","popup_size":"\u0420\u043e\u0437\u043c\u0456\u0440","popup_dependent":"\u0417\u0430\u043b\u0435\u0436\u043d\u0438\u0439 (\u043b\u0438\u0448\u0435 \u0434\u043b\u044f Mozilla/Firefox)","popup_resizable":"\u0414\u043e\u0437\u0432\u043e\u043b\u044f\u0442\u0438 \u0437\u043c\u0456\u043d\u044e\u0432\u0430\u0442\u0438 \u0440\u043e\u0437\u043c\u0456\u0440","popup_location":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043f\u0430\u043d\u0435\u043b\u044c location","popup_menubar":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043c\u0435\u043d\u044e","popup_toolbar":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043f\u0430\u043d\u0435\u043b\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432","popup_statusbar":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0441\u0442\u0430\u0442\u0443\u0441","popup_scrollbars":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0441\u043a\u0440\u043e\u043b\u0435\u0440\u0438","popup_return":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \'return false\'","popup_name":"\u041d\u0430\u0437\u0432\u0430 \u0432\u0456\u043a\u043d\u0430","popup_url":"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e",popup:"\u0412\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e Javascript","target_blank":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432 \u043d\u043e\u0432\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456","target_top":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0443 \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0456 (\u0437\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0456 \u0444\u0440\u0435\u0439\u043c\u0438)","target_parent":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432 \u0431\u0430\u0442\u044c\u043a\u0456\u0432\u0441\u044c\u043a\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456 / \u0444\u0440\u0435\u0439\u043c\u0456","target_same":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432 \u0446\u044c\u043e\u043c\u0443 \u0436 \u0432\u0456\u043a\u043d\u0456 / \u0444\u0440\u0435\u0439\u043c\u0456","anchor_names":"\u042f\u043a\u043e\u0440\u0456","popup_opts":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","advanced_props":"\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","event_props":"\u041f\u043e\u0434\u0456\u0457","popup_props":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u043e\u0433\u043e \u0432\u0456\u043a\u043d\u0430","general_props":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","advanced_tab":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","events_tab":"\u041f\u043e\u0434\u0456\u0457","popup_tab":"\u0412\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e","general_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",list:"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c","is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 http://?","is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0457 \u043f\u043e\u0448\u0442\u0438, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 mailto:?",titlefield:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",target:"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432...",url:"\u0410\u0434\u0440\u0435\u0441\u0430",title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043b\u0456\u0432\u043e\u0440\u0443\u0447",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",accesskey:"\u041a\u043b\u0430\u0432\u0456\u0448\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0443",tabindex:"\u0422\u0430\u0431\u0456\u043d\u0434\u0435\u043a\u0441",rev:"\u0417\u0432\'\u044f\u0437\u043e\u043a \u043c\u0456\u0436 \u0446\u0456\u043b\u043b\u044e \u0442\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e",rel:"\u0417\u0432\'\u044f\u0437\u043e\u043a \u043c\u0456\u0436 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e \u0442\u0430 \u0446\u0456\u043b\u043b\u044e",mime:"MIME \u0442\u0438\u043f \u0446\u0456\u043b\u0456",encoding:"\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f \u0446\u0456\u043b\u0456",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438","target_langcode":"\u041c\u043e\u0432\u0430 \u0446\u0456\u043b\u0456",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u043e\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ur_dlg.js
new file mode 100644
index 000000000..69434e9fe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/vi_dlg.js
new file mode 100644
index 000000000..01400dee8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.advlink_dlg',{"target_name":"T\u00ean \u0111\u00edch",classes:"L\u1edbp",style:"Ki\u1ec3u d\u00e1ng",id:"Id","popup_position":"V\u1ecb tr\u00ed (X/Y)",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef","popup_size":"K\u00edch th\u01b0\u1edbc","popup_dependent":"Ph\u1ee5 thu\u1ed9c (ch\u1ec9 Mozilla/Firefox)","popup_resizable":"L\u00e0m cho c\u1eeda s\u1ed5 c\u00f3 th\u1ec3 thay \u0111\u1ed5i k\u00edch c\u1ee1","popup_location":"Hi\u1ec7n th\u1ecb thanh v\u1ecb tr\u00ed","popup_menubar":"Hi\u1ec3n th\u1ecb thanh th\u1ef1c \u0111\u01a1n","popup_toolbar":"Hi\u1ec7n th\u1ecb thanh c\u00f4ng c\u1ee5","popup_statusbar":"Hi\u1ec7n th\u1ecb thanh tr\u1ea1ng th\u00e1i","popup_scrollbars":"Hi\u1ec3n th\u1ecb thanh cu\u1ed9n","popup_return":"Ch\u00e8n \'return false\'","popup_name":"T\u00ean c\u1eeda s\u1ed5","popup_url":"URL b\u1eadt l\u00ean",popup:"Javascript b\u1eadt l\u00ean","target_blank":"M\u1edf trong c\u1eeda s\u1ed5 m\u1edbi","target_top":"M\u1edf trong khung tr\u00ean c\u00f9ng (thay th\u1ebf t\u1ea5t c\u00e1c khung)","target_parent":"M\u1edf trong c\u1eeda s\u1ed5/khung cha","target_same":"M\u1edf trong c\u1eeda s\u1ed5/khung n\u00e0y","anchor_names":"M\u1ecf neo","popup_opts":"T\u00f9y ch\u1ecdn","advanced_props":"Thu\u1ed9c t\u00ednh n\u00e2ng cao","event_props":"S\u1ef1 ki\u1ec7n","popup_props":"Thu\u1ed9c t\u00ednh b\u1eadt l\u00ean","general_props":"Thu\u1ed9c t\u00ednh chung","advanced_tab":"N\u00e2ng cao","events_tab":"S\u1ef1 ki\u1ec7n","popup_tab":"B\u1eadt l\u00ean","general_tab":"Chung",list:"Danh s\u00e1ch li\u00ean k\u1ebft","is_external":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t li\u00ean k\u1ebft ngo\u00e0i, b\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 http://?","is_email":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t \u0111\u1ecba ch\u1ec9 \u0111i\u1ec7n th\u01b0, B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 mailto?",titlefield:"Ti\u00eau \u0111\u1ec1",target:"\u0110\u00edch",url:"URL Li\u00ean k\u1ebft",title:"Th\u00eam/S\u1eeda Li\u00ean k\u1ebft","link_list":"Danh s\u00e1ch li\u00ean k\u1ebft",rtl:"Ph\u1ea3i qua tr\u00e1i",ltr:"Tr\u00e1i qua ph\u1ea3i",accesskey:"Ph\u00edm truy c\u1eadp",tabindex:"Ch\u1ec9 m\u1ee5c th\u1ebb",rev:"\u0110\u00edch li\u00ean quan t\u1edbi trang",rel:"Trang li\u00ean quan t\u1edbi \u0111\u00edch",mime:"Ki\u1ec3u MIME \u0111\u00edch",encoding:"M\u00e3 h\u00f3a k\u00fd t\u1ef1 \u0111\u00edch",langcode:"M\u00e3 ng\u00f4n ng\u1eef","target_langcode":"Ng\u00f4n ng\u1eef \u0111\u00edch",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..fb228f594
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u7c7b\u522b",style:"\u6837\u5f0f",id:"ID","popup_position":"\u4f4d\u7f6e(X/Y)",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u9650\u5236(\u4ec5\u652f\u6301Mozilla/Firefox)","popup_resizable":"\u7a97\u53e3\u53ef\u8c03\u6574\u5927\u5c0f","popup_location":"\u663e\u793a\u5730\u5740\u680f","popup_menubar":"\u663e\u793a\u83dc\u5355\u680f","popup_toolbar":"\u663e\u793a\u5de5\u5177\u680f","popup_statusbar":"\u663e\u793a\u72b6\u6001\u680f","popup_scrollbars":"\u663e\u793a\u6eda\u52a8\u6761","popup_return":"\u63d2\u5165\'return false\'","popup_name":"\u7a97\u53e3\u540d\u79f0","popup_url":"\u5f39\u51faURL",popup:"Javascript\u5f39\u7a97","target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00","target_top":"\u5728\u9876\u90e8\u6846\u67b6\u6253\u5f00\uff08\u91cd\u7f6e\u6240\u6709\u6846\u67b6\uff09","target_parent":"\u5728\u7236\u7a97\u53e3/\u6846\u67b6\u6253\u5f00","target_same":"\u5728\u5f53\u524d\u7a97\u53e3/\u6846\u67b6\u6253\u5f00","anchor_names":"\u951a","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5f39\u51fa\u5c5e\u6027","general_props":"\u666e\u901a\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5f39\u51fa","general_tab":"\u666e\u901a",list:"\u94fe\u63a5\u5217\u8868","is_external":"\u60a8\u8f93\u5165\u7684URL\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\uff0c\u662f\u5426\u8981\u52a0\u4e0a\"http://\"\u524d\u7f00\uff1f","is_email":"\u60a8\u8f93\u5165URL\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u52a0\"mailto:\"\u524d\u7f00\uff1f",titlefield:"\u6807\u9898",target:"\u6253\u5f00\u65b9\u5f0f",url:"\u8d85\u94fe\u63a5URL",title:"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","link_list":"\u94fe\u63a5\u5217\u8868",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",accesskey:"\u5feb\u6377\u952e",tabindex:"Tab\u7d22\u5f15",rev:"\u76ee\u6807\u5230\u7f51\u9875\u7684\u5173\u7cfb",rel:"\u7f51\u9875\u5230\u76ee\u6807\u7684\u5173\u7cfb",mime:"\u76ee\u6807MIME\u7c7b\u578b",encoding:"\u76ee\u6807\u8bed\u8a00\u7f16\u7801",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u6807\u8bed\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..56819393e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.advlink_dlg',{"target_name":"\u76ee\u6a19\u540d\u7a31",classes:"\u985e\u5225 (Class)",style:"\u6a23\u5f0f",id:"\u9023\u7d50\u7684 ID","popup_position":"\u4f4d\u7f6e (X/Y)",langdir:"\u66f8\u5beb\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u9650\u5236 (\u50c5 Firefox \u652f\u63f4)","popup_resizable":"\u53ef\u4ee5\u8abf\u6574\u8996\u7a97\u5927\u5c0f","popup_location":"\u986f\u793a\u7db2\u5740\u5217","popup_menubar":"\u986f\u793a\u7a0b\u5f0f\u9078\u55ae","popup_toolbar":"\u986f\u793a\u5de5\u5177\u5217","popup_statusbar":"\u986f\u793a\u72c0\u614b\u5217","popup_scrollbars":"\u986f\u793a\u7db2\u9801\u6372\u8ef8","popup_return":"\u52a0\u5165\u4e00\u500b Javascript Return False \u8a9e\u6cd5","popup_name":"\u8996\u7a97\u540d\u7a31","popup_url":"\u5f48\u8df3\u8996\u7a97\u7684\u7db2\u5740",popup:"\u4f7f\u7528 Javascript \u7a0b\u5f0f\u8a9e\u8a00\u505a\u5f48\u8df3\u6548\u679c","target_blank":"\u958b\u4e00\u500b\u65b0\u8996\u7a97","target_top":"\u76f4\u63a5\u958b\u555f (\u6846\u67b6\u4e5f\u84cb\u6389)","target_parent":"\u958b\u5728\u4e3b\u8981\u756b\u9762","target_same":"\u76f4\u63a5\u958b\u555f","anchor_names":"\u9328\u9ede (\u66f8\u7c64)","popup_opts":"\u9078\u9805","advanced_props":"\u66f4\u591a\u8a2d\u5b9a","event_props":"\u4e8b\u4ef6","popup_props":"\u5f48\u8df3\u8a2d\u5b9a","general_props":"\u4e00\u822c","advanced_tab":"\u66f4\u591a","events_tab":"\u7a0b\u5f0f\u4e8b\u4ef6","popup_tab":"\u5f48\u8df3\u8996\u7a97","general_tab":"\u4e00\u822c",list:"\u9023\u7d50\u6e05\u55ae","is_external":"\u60a8\u7684\u7db2\u5740\u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b http:// \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f","is_email":"\u60a8\u7684 E-Mail \u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b mailto: \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f",titlefield:"\u6a19\u984c",target:"\u958b\u555f\u65b9\u5f0f",url:"\u9023\u7d50 URL",title:"\u52a0\u5165 / \u7de8\u8f2f\u7db2\u5740\u9023\u7d50","link_list":"\u9023\u7d50\u6e05\u55ae",rtl:"\u5f9e\u53f3\u908a\u5230\u5de6\u908a",ltr:"\u5f9e\u5de6\u908a\u5230\u53f3\u908a",accesskey:"HTML \u5feb\u901f\u9375",tabindex:"Tab \u7d22\u5f15\u4f4d\u7f6e (Tabindex)",rev:"\u9023\u7d50\u8207\u7db2\u9801\u7684\u95dc\u4fc2",rel:"\u7db2\u9801\u8207\u9023\u7d50\u7684\u95dc\u4fc2",mime:"\u9023\u7d50\u7684 MIME \u985e\u578b",encoding:"\u9023\u7d50\u4e2d\u7684\u5b57\u5143\u7de8\u78bc",langcode:"\u8a9e\u7cfb\u4ee3\u865f","target_langcode":"\u9023\u7d50\u7684\u8a9e\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh_dlg.js
new file mode 100644
index 000000000..baecf1f8d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.advlink_dlg',{"target_name":"\u9023\u7d50\u76ee\u6a19\u540d\u7a31",classes:"\u985e\u5225",style:"\u6a23\u5f0f",id:"ID","popup_position":"\u4f4d\u7f6e (X/Y)",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u700f\u89bd\u5668\u9650\u5236 (\u50c5\u652f\u63f4 Mozilla/Firefox)","popup_resizable":"\u53ef\u8abf\u6574\u5927\u5c0f\u7684\u5f48\u8df3\u8996\u7a97","popup_location":"\u986f\u793a\u7db2\u5740\u5217","popup_menubar":"\u986f\u793a\u9078\u55ae\u5217","popup_toolbar":"\u986f\u793a\u5de5\u5177\u5217","popup_statusbar":"\u986f\u793a\u72c0\u614b\u5217","popup_scrollbars":"\u986f\u793a\u6372\u8ef8","popup_return":"\u63d2\u5165 \'return false\'","popup_name":"\u8996\u7a97\u540d\u7a31","popup_url":"\u5f48\u8df3\u8996\u7a97\u7684 URL",popup:"JavaScript \u5f48\u8df3\u8996\u7a97","target_blank":"\u5728\u65b0\u8996\u7a97\u6253\u958b\u9023\u7d50","target_top":"\u5728 top \u6846\u67b6\u6253\u958b\u9023\u7d50 (\u5957\u7528\u5728\u6240\u6709\u6846\u67b6)","target_parent":"\u5728\u7236(\u4e0a\u5c64)\u8996\u7a97/\u6846\u67b6\u6253\u958b\u9023\u7d50","target_same":"\u5728\u76ee\u524d\u8996\u7a97\u6253\u958b\u9023\u7d50","anchor_names":"\u9328\u9ede","popup_opts":"\u9078\u9805","advanced_props":"\u9032\u968e\u5c6c\u6027","event_props":"Javascript \u89f8\u767c\u4e8b\u4ef6","popup_props":"\u5f48\u8df3\u8996\u7a97\u5c6c\u6027","general_props":"\u4e00\u822c\u5c6c\u6027","advanced_tab":"\u9032\u968e","events_tab":"Javascript \u89f8\u767c\u4e8b\u4ef6","popup_tab":"\u5f48\u8df3\u8996\u7a97","general_tab":"\u4e00\u822c",list:"\u9023\u7d50\u6e05\u55ae","is_external":"\u60a8\u6240\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u70ba\u5916\u90e8\u9023\u7d50, \u662f\u5426\u9700\u8981\u52a0\u4e0a http:// \u524d\u7db4?","is_email":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u96fb\u5b50\u90f5\u4ef6\u4f4d\u5740, \u662f\u5426\u9700\u8981\u52a0\u4e0a mailto: \u524d\u7db4?",titlefield:"\u9023\u7d50\u6a19\u984c",target:"\u9023\u7d50\u76ee\u6a19",url:"URL \u9023\u7d50",title:"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","link_list":"\u9023\u7d50\u6e05\u55ae",rtl:"\u5f9e\u5de6\u5230\u53f3",ltr:"\u5f9e\u53f3\u5230\u5de6",accesskey:"\u5feb\u6377\u9375",tabindex:"Tab \u7d22\u5f15",rev:"\u76ee\u6a19\u5230\u7db2\u9801\u7684\u95dc\u4fc2",rel:"\u7db2\u9801\u5230\u76ee\u6a19\u7684\u95dc\u4fc2",mime:"\u76ee\u6a19 MIME \u985e\u578b",encoding:"\u76ee\u6a19\u8a9e\u8a00\u7de8\u78bc",langcode:"\u8a9e\u8a00\u7de8\u78bc","target_langcode":"\u76ee\u6a19\u8a9e\u8a00",width:"\u5bec",height:"\u9ad8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zu_dlg.js
new file mode 100644
index 000000000..36423c489
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u7c7b\u578b",style:"\u6837\u5f0f",id:"Id","popup_position":"\u5ea7\u6807(X/Y)",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","popup_size":"\u5c3a\u5bf8","popup_dependent":"\u4ece\u5c5e(\u53ea\u6709Mozilla/Firefox\u6709\u6548)","popup_resizable":"\u53ef\u8c03\u6574\u89c6\u7a97\u5c3a\u5bf8","popup_location":"\u663e\u793a\u7f51\u5740\u5217","popup_menubar":"\u663e\u793a\u529f\u80fd\u8868","popup_toolbar":"\u663e\u793a\u5de5\u5177\u5217","popup_statusbar":"\u663e\u793a\u72b6\u6001\u680f","popup_scrollbars":"\u663e\u793a\u8fb9\u6761","popup_return":"\u63d2\u5165\'return false\'","popup_name":"\u7a97\u53e3\u540d\u79f0","popup_url":"\u5feb\u663e\u89c6\u7a97\u7f51\u5740",popup:"Javascript\u5feb\u663e\u89c6\u7a97","target_blank":"\u6253\u5f00\u5728\u65b0\u89c6\u7a97","target_top":"\u6253\u5f00\u5728\u6700\u4e0a\u5c42\u7684\u6846\u67b6(\u66ff\u6362\u6240\u6709\u6846\u67b6)","target_parent":"\u6253\u5f00\u5728\u7236\u89c6\u7a97/\u6846\u67b6","target_same":"\u6253\u5f00\u5728\u65b0\u89c6\u7a97/\u6846\u67b6","anchor_names":"\u951a\u70b9","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5feb\u663e\u89c6\u7a97\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5feb\u663e\u89c6\u7a97","general_tab":"\u4e00\u822c",list:"\u8fde\u7ed3\u6e05\u5355","is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u65b9\u52a0\u5165http://\uff1f","is_email":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u90ae\u5740\u524d\u65b9\u52a0\u5165mailto:\uff1f",titlefield:"\u67e5\u627e",target:"\u76ee\u6807",url:"\u8fde\u7ed3\u4f4d\u5740",title:"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","link_list":"\u8fde\u7ed3\u6e05\u5355",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",accesskey:"\u5feb\u901f\u952e",tabindex:"Tab\u7d22\u5f15",rev:"\u76ee\u6807\u5230\u9875\u7684\u5173\u7cfb",rel:"\u9875\u5230\u76ee\u6807\u7684\u5173\u7cfb",mime:"\u76ee\u6807MIME\u7c7b\u578b",encoding:"\u7f16\u7801",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u7684\u8bed\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm
new file mode 100644
index 000000000..8ab7c2a95
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlink/link.htm
@@ -0,0 +1,338 @@
+<!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>{#advlink_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/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/validate.js"></script>
+ <script type="text/javascript" src="js/advlink.js"></script>
+ <link href="css/advlink.css" rel="stylesheet" type="text/css" />
+</head>
+<body id="advlink" style="display: none" role="application" onload="javascript:mcTabs.displayTab('general_tab','general_panel', true);" aria-labelledby="app_label">
+ <span class="mceVoiceLabel" id="app_label" style="display:none;">{#advlink_dlg.title}</span>
+ <form onsubmit="insertAction();return false;" action="#">
+ <div class="tabs" role="presentation">
+ <ul>
+ <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>
+ <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>
+ <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>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper" role="presentation">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#advlink_dlg.general_props}</legend>
+
+ <table border="0" cellpadding="4" cellspacing="0" role="presentation">
+ <tr>
+ <td class="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td>
+ <td><table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" aria-required="true" /></td>
+ <td id="hrefbrowsercontainer">&nbsp;</td>
+ </tr>
+ </table></td>
+ </tr>
+ <tr id="linklisthrefrow">
+ <td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td>
+ <td colspan="2" id="linklisthrefcontainer"><select id="linklisthref"><option value=""></option></select></td>
+ </tr>
+ <tr id="anchorlistrow">
+ <td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td>
+ <td colspan="2" id="anchorlistcontainer"><select id="anchorlist"><option value=""></option></select></td>
+ </tr>
+ <tr>
+ <td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td>
+ <td id="targetlistcontainer"><select id="targetlist"><option value=""></option></select></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td>
+ <td><input id="title" name="title" type="text" value="" /></td>
+ </tr>
+ <tr>
+ <td><label id="classlabel" for="classlist">{#class_name}</label></td>
+ <td>
+ <select id="classlist" name="classlist" onchange="changeClass();">
+ <option value="" selected="selected">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+
+ <div id="popup_panel" class="panel">
+ <fieldset>
+ <legend>{#advlink_dlg.popup_props}</legend>
+
+ <input type="checkbox" id="ispopup" name="ispopup" class="radio" onclick="setPopupControlsDisabled(!this.checked);buildOnClick();" />
+ <label id="ispopuplabel" for="ispopup">{#advlink_dlg.popup}</label>
+
+ <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
+ <tr>
+ <td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label>&nbsp;</td>
+ <td>
+ <table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input type="text" name="popupurl" id="popupurl" value="" onchange="buildOnClick();" /></td>
+ <td id="popupurlbrowsercontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label>&nbsp;</td>
+ <td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td>
+ </tr>
+ <tr role="group" aria-labelledby="popup_size_label">
+ <td class="nowrap"><label id="popup_size_label">{#advlink_dlg.popup_size}</label>&nbsp;</td>
+ <td class="nowrap">
+ <span style="display:none" id="width_voiceLabel">{#advlink_dlg.width}</span>
+ <input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" aria-labelledby="width_voiceLabel" /> x
+ <span style="display:none" id="height_voiceLabel">{#advlink_dlg.height}</span>
+ <input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" aria-labelledby="height_voiceLabel" /> px
+ </td>
+ </tr>
+ <tr role="group" aria-labelledby="popup_position_label center_hint">
+ <td class="nowrap" id="labelleft"><label id="popup_position_label">{#advlink_dlg.popup_position}</label>&nbsp;</td>
+ <td class="nowrap">
+ <span style="display:none" id="x_voiceLabel">X</span>
+ <input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" aria-labelledby="x_voiceLabel" /> /
+ <span style="display:none" id="y_voiceLabel">Y</span>
+ <input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" aria-labelledby="y_voiceLabel" /> <span id="center_hint">(c /c = center)</span>
+ </td>
+ </tr>
+ </table>
+
+ <fieldset>
+ <legend>{#advlink_dlg.popup_opts}</legend>
+
+ <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
+ <tr>
+ <td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td>
+ <td class="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td>
+ <td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td>
+ <td class="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td>
+ </tr>
+ <tr>
+ <td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td>
+ <td class="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td>
+ <td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td>
+ <td class="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td>
+ </tr>
+ <tr>
+ <td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td>
+ <td class="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td>
+ <td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td>
+ <td class="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td>
+ </tr>
+ <tr>
+ <td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td>
+ <td class="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td>
+ <td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td>
+ <td class="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td>
+ </tr>
+ </table>
+ </fieldset>
+ </fieldset>
+ </div>
+
+ <div id="advanced_panel" class="panel">
+ <fieldset>
+ <legend>{#advlink_dlg.advanced_props}</legend>
+
+ <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
+ <tr>
+ <td class="column1"><label id="idlabel" for="id">{#advlink_dlg.id}</label></td>
+ <td><input id="id" name="id" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td><label id="stylelabel" for="style">{#advlink_dlg.style}</label></td>
+ <td><input type="text" id="style" name="style" value="" /></td>
+ </tr>
+
+ <tr>
+ <td><label id="classeslabel" for="classes">{#advlink_dlg.classes}</label></td>
+ <td><input type="text" id="classes" name="classes" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>
+ </tr>
+
+ <tr>
+ <td><label id="targetlabel" for="target">{#advlink_dlg.target_name}</label></td>
+ <td><input type="text" id="target" name="target" value="" onchange="selectByValue(this.form,'targetlist',this.value,true);" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label id="dirlabel" for="dir">{#advlink_dlg.langdir}</label></td>
+ <td>
+ <select id="dir" name="dir">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#advlink_dlg.ltr}</option>
+ <option value="rtl">{#advlink_dlg.rtl}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label id="hreflanglabel" for="hreflang">{#advlink_dlg.target_langcode}</label></td>
+ <td><input type="text" id="hreflang" name="hreflang" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label id="langlabel" for="lang">{#advlink_dlg.langcode}</label></td>
+ <td>
+ <input id="lang" name="lang" type="text" value="" />
+ </td>
+ </tr>
+
+ <tr>
+ <td><label id="charsetlabel" for="charset">{#advlink_dlg.encoding}</label></td>
+ <td><input type="text" id="charset" name="charset" value="" /></td>
+ </tr>
+
+ <tr>
+ <td><label id="typelabel" for="type">{#advlink_dlg.mime}</label></td>
+ <td><input type="text" id="type" name="type" value="" /></td>
+ </tr>
+
+ <tr>
+ <td><label id="rellabel" for="rel">{#advlink_dlg.rel}</label></td>
+ <td><select id="rel" name="rel">
+ <option value="">{#not_set}</option>
+ <option value="lightbox">Lightbox</option>
+ <option value="alternate">Alternate</option>
+ <option value="designates">Designates</option>
+ <option value="stylesheet">Stylesheet</option>
+ <option value="start">Start</option>
+ <option value="next">Next</option>
+ <option value="prev">Prev</option>
+ <option value="contents">Contents</option>
+ <option value="index">Index</option>
+ <option value="glossary">Glossary</option>
+ <option value="copyright">Copyright</option>
+ <option value="chapter">Chapter</option>
+ <option value="subsection">Subsection</option>
+ <option value="appendix">Appendix</option>
+ <option value="help">Help</option>
+ <option value="bookmark">Bookmark</option>
+ <option value="nofollow">No Follow</option>
+ <option value="tag">Tag</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label id="revlabel" for="rev">{#advlink_dlg.rev}</label></td>
+ <td><select id="rev" name="rev">
+ <option value="">{#not_set}</option>
+ <option value="alternate">Alternate</option>
+ <option value="designates">Designates</option>
+ <option value="stylesheet">Stylesheet</option>
+ <option value="start">Start</option>
+ <option value="next">Next</option>
+ <option value="prev">Prev</option>
+ <option value="contents">Contents</option>
+ <option value="index">Index</option>
+ <option value="glossary">Glossary</option>
+ <option value="copyright">Copyright</option>
+ <option value="chapter">Chapter</option>
+ <option value="subsection">Subsection</option>
+ <option value="appendix">Appendix</option>
+ <option value="help">Help</option>
+ <option value="bookmark">Bookmark</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label id="tabindexlabel" for="tabindex">{#advlink_dlg.tabindex}</label></td>
+ <td><input type="text" id="tabindex" name="tabindex" value="" /></td>
+ </tr>
+
+ <tr>
+ <td><label id="accesskeylabel" for="accesskey">{#advlink_dlg.accesskey}</label></td>
+ <td><input type="text" id="accesskey" name="accesskey" value="" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+
+ <div id="events_panel" class="panel">
+ <fieldset>
+ <legend>{#advlink_dlg.event_props}</legend>
+
+ <table border="0" cellpadding="0" cellspacing="4" role="presentation" >
+ <tr>
+ <td class="column1"><label for="onfocus">onfocus</label></td>
+ <td><input id="onfocus" name="onfocus" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="onblur">onblur</label></td>
+ <td><input id="onblur" name="onblur" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="onclick">onclick</label></td>
+ <td><input id="onclick" name="onclick" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="ondblclick">ondblclick</label></td>
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="onmousedown">onmousedown</label></td>
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="onmouseup">onmouseup</label></td>
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="onmouseover">onmouseover</label></td>
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="onmousemove">onmousemove</label></td>
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="onmouseout">onmouseout</label></td>
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="onkeypress">onkeypress</label></td>
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="onkeydown">onkeydown</label></td>
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="onkeyup">onkeyup</label></td>
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+ </form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js
new file mode 100644
index 000000000..57ecce6e0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin.js
@@ -0,0 +1 @@
+(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,i,g=f.editor;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){i=f[d][0]}function c(j,l){var k=true;a(l.styles,function(n,m){if(g.dom.getStyle(j,m)!=n){k=false;return false}});return k}function h(){var k,l=g.dom,j=g.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,i)){g.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(i){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,i.styles);k.removeAttribute("data-mce-style")}}g.focus()}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){h()}});e.onRenderMenu.add(function(j,k){k.onHideMenu.add(function(){if(f.bookmark){g.selection.moveToBookmark(f.bookmark);f.bookmark=0}});k.onShowMenu.add(function(){var n=g.dom,m=n.getParent(g.selection.getNode(),"ol,ul"),l;if(m||i){l=f[d];a(k.items,function(o){var p=true;o.setSelected(0);if(m&&!o.isDisabled()){a(l,function(q){if(q.id==o.id){if(!c(m,q)){p=false;return false}}});if(p){o.setSelected(1)}}});if(!m){k.items[i.id].setSelected(1)}}g.focus();if(tinymce.isIE){f.bookmark=g.selection.getBookmark(1)}});k.add({id:g.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle",titleItem:true}).setDisabled(1);a(f[d],function(l){if(f.isIE7&&l.styles.listStyleType=="lower-greek"){return}l.id=g.dom.uniqueId();k.add({id:l.id,title:l.title,onclick:function(){i=l;h()}})})});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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js
new file mode 100644
index 000000000..a8f046b41
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/advlist/editor_plugin_src.js
@@ -0,0 +1,176 @@
+/**
+ * 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() {
+ var each = tinymce.each;
+
+ tinymce.create('tinymce.plugins.AdvListPlugin', {
+ init : function(ed, url) {
+ var t = this;
+
+ t.editor = ed;
+
+ function buildFormats(str) {
+ var formats = [];
+
+ each(str.split(/,/), function(type) {
+ formats.push({
+ title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')),
+ styles : {
+ listStyleType : type == 'default' ? '' : type
+ }
+ });
+ });
+
+ return formats;
+ };
+
+ // Setup number formats from config or default
+ t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");
+ t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square");
+
+ if (tinymce.isIE && /MSIE [2-7]/.test(navigator.userAgent))
+ t.isIE7 = true;
+ },
+
+ createControl: function(name, cm) {
+ var t = this, btn, format, editor = t.editor;
+
+ if (name == 'numlist' || name == 'bullist') {
+ // Default to first item if it's a default item
+ if (t[name][0].title == 'advlist.def')
+ format = t[name][0];
+
+ function hasFormat(node, format) {
+ var state = true;
+
+ each(format.styles, function(value, name) {
+ // Format doesn't match
+ if (editor.dom.getStyle(node, name) != value) {
+ state = false;
+ return false;
+ }
+ });
+
+ return state;
+ };
+
+ function applyListFormat() {
+ var list, dom = editor.dom, sel = editor.selection;
+
+ // Check for existing list element
+ list = dom.getParent(sel.getNode(), 'ol,ul');
+
+ // Switch/add list type if needed
+ if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format))
+ editor.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList');
+
+ // Append styles to new list element
+ if (format) {
+ list = dom.getParent(sel.getNode(), 'ol,ul');
+ if (list) {
+ dom.setStyles(list, format.styles);
+ list.removeAttribute('data-mce-style');
+ }
+ }
+
+ editor.focus();
+ };
+
+ btn = cm.createSplitButton(name, {
+ title : 'advanced.' + name + '_desc',
+ 'class' : 'mce_' + name,
+ onclick : function() {
+ applyListFormat();
+ }
+ });
+
+ btn.onRenderMenu.add(function(btn, menu) {
+ menu.onHideMenu.add(function() {
+ if (t.bookmark) {
+ editor.selection.moveToBookmark(t.bookmark);
+ t.bookmark = 0;
+ }
+ });
+
+ menu.onShowMenu.add(function() {
+ var dom = editor.dom, list = dom.getParent(editor.selection.getNode(), 'ol,ul'), fmtList;
+
+ if (list || format) {
+ fmtList = t[name];
+
+ // Unselect existing items
+ each(menu.items, function(item) {
+ var state = true;
+
+ item.setSelected(0);
+
+ if (list && !item.isDisabled()) {
+ each(fmtList, function(fmt) {
+ if (fmt.id == item.id) {
+ if (!hasFormat(list, fmt)) {
+ state = false;
+ return false;
+ }
+ }
+ });
+
+ if (state)
+ item.setSelected(1);
+ }
+ });
+
+ // Select the current format
+ if (!list)
+ menu.items[format.id].setSelected(1);
+ }
+
+ editor.focus();
+
+ // IE looses it's selection so store it away and restore it later
+ if (tinymce.isIE) {
+ t.bookmark = editor.selection.getBookmark(1);
+ }
+ });
+
+ menu.add({id : editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle', titleItem: true}).setDisabled(1);
+
+ each(t[name], function(item) {
+ // IE<8 doesn't support lower-greek, skip it
+ if (t.isIE7 && item.styles.listStyleType == 'lower-greek')
+ return;
+
+ item.id = editor.dom.uniqueId();
+
+ menu.add({id : item.id, title : item.title, onclick : function() {
+ format = item;
+ applyListFormat();
+ }});
+ });
+ });
+
+ return btn;
+ }
+ },
+
+ 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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js
new file mode 100644
index 000000000..fd293dca4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin.js
@@ -0,0 +1 @@
+(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("createlink",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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js
new file mode 100644
index 000000000..604da8b42
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autolink/editor_plugin_src.js
@@ -0,0 +1,172 @@
+/**
+ * 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('createlink',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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js
new file mode 100644
index 000000000..6c4ff0d5d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js
new file mode 100644
index 000000000..7d113419d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autoresize/editor_plugin_src.js
@@ -0,0 +1,137 @@
+/**
+ * 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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js
new file mode 100644
index 000000000..f7d057600
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin.js
@@ -0,0 +1 @@
+(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,j=h.storage,i;if(j){i=j.getItem(h.key);if(i){h.editor.setContent(i);h.onRestoreDraft.dispatch(h,{content:i})}}},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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js
new file mode 100644
index 000000000..8311483f9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/editor_plugin_src.js
@@ -0,0 +1,431 @@
+/**
+ * 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
+ *
+ * Adds auto-save capability to the TinyMCE text editor to rescue content
+ * inadvertently lost. This plugin was originally developed by Speednet
+ * and that project can be found here: http://code.google.com/p/tinyautosave/
+ *
+ * TECHNOLOGY DISCUSSION:
+ *
+ * The plugin attempts to use the most advanced features available in the current browser to save
+ * as much content as possible. There are a total of four different methods used to autosave the
+ * content. In order of preference, they are:
+ *
+ * 1. localStorage - A new feature of HTML 5, localStorage can store megabytes of data per domain
+ * on the client computer. Data stored in the localStorage area has no expiration date, so we must
+ * manage expiring the data ourselves. localStorage is fully supported by IE8, and it is supposed
+ * to be working in Firefox 3 and Safari 3.2, but in reality is is flaky in those browsers. As
+ * HTML 5 gets wider support, the AutoSave plugin will use it automatically. In Windows Vista/7,
+ * localStorage is stored in the following folder:
+ * C:\Users\[username]\AppData\Local\Microsoft\Internet Explorer\DOMStore\[tempFolder]
+ *
+ * 2. sessionStorage - A new feature of HTML 5, sessionStorage works similarly to localStorage,
+ * except it is designed to expire after a certain amount of time. Because the specification
+ * around expiration date/time is very loosely-described, it is preferrable to use locaStorage and
+ * manage the expiration ourselves. sessionStorage has similar storage characteristics to
+ * localStorage, although it seems to have better support by Firefox 3 at the moment. (That will
+ * certainly change as Firefox continues getting better at HTML 5 adoption.)
+ *
+ * 3. UserData - A very under-exploited feature of Microsoft Internet Explorer, UserData is a
+ * way to store up to 128K of data per "document", or up to 1MB of data per domain, on the client
+ * computer. The feature is available for IE 5+, which makes it available for every version of IE
+ * supported by TinyMCE. The content is persistent across browser restarts and expires on the
+ * date/time specified, just like a cookie. However, the data is not cleared when the user clears
+ * cookies on the browser, which makes it well-suited for rescuing autosaved content. UserData,
+ * like other Microsoft IE browser technologies, is implemented as a behavior attached to a
+ * specific DOM object, so in this case we attach the behavior to the same DOM element that the
+ * TinyMCE editor instance is attached to.
+ */
+
+(function(tinymce) {
+ // Setup constants to help the compressor to reduce script size
+ var PLUGIN_NAME = 'autosave',
+ RESTORE_DRAFT = 'restoredraft',
+ TRUE = true,
+ undefined,
+ unloadHandlerAdded,
+ Dispatcher = tinymce.util.Dispatcher;
+
+ /**
+ * This plugin adds auto-save capability to the TinyMCE text editor to rescue content
+ * inadvertently lost. By using localStorage.
+ *
+ * @class tinymce.plugins.AutoSave
+ */
+ tinymce.create('tinymce.plugins.AutoSave', {
+ /**
+ * 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.
+ *
+ * @method init
+ * @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 self = this, settings = ed.settings;
+
+ self.editor = ed;
+
+ // Parses the specified time string into a milisecond number 10m, 10s etc.
+ function parseTime(time) {
+ var multipels = {
+ s : 1000,
+ m : 60000
+ };
+
+ time = /^(\d+)([ms]?)$/.exec('' + time);
+
+ return (time[2] ? multipels[time[2]] : 1) * parseInt(time);
+ };
+
+ // Default config
+ tinymce.each({
+ ask_before_unload : TRUE,
+ interval : '30s',
+ retention : '20m',
+ minlength : 50
+ }, function(value, key) {
+ key = PLUGIN_NAME + '_' + key;
+
+ if (settings[key] === undefined)
+ settings[key] = value;
+ });
+
+ // Parse times
+ settings.autosave_interval = parseTime(settings.autosave_interval);
+ settings.autosave_retention = parseTime(settings.autosave_retention);
+
+ // Register restore button
+ ed.addButton(RESTORE_DRAFT, {
+ title : PLUGIN_NAME + ".restore_content",
+ onclick : function() {
+ if (ed.getContent({draft: true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) {
+ // Show confirm dialog if the editor isn't empty
+ ed.windowManager.confirm(
+ PLUGIN_NAME + ".warning_message",
+ function(ok) {
+ if (ok)
+ self.restoreDraft();
+ }
+ );
+ } else
+ self.restoreDraft();
+ }
+ });
+
+ // Enable/disable restoredraft button depending on if there is a draft stored or not
+ ed.onNodeChange.add(function() {
+ var controlManager = ed.controlManager;
+
+ if (controlManager.get(RESTORE_DRAFT))
+ controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft());
+ });
+
+ ed.onInit.add(function() {
+ // Check if the user added the restore button, then setup auto storage logic
+ if (ed.controlManager.get(RESTORE_DRAFT)) {
+ // Setup storage engine
+ self.setupStorage(ed);
+
+ // Auto save contents each interval time
+ setInterval(function() {
+ self.storeDraft();
+ ed.nodeChanged();
+ }, settings.autosave_interval);
+ }
+ });
+
+ /**
+ * This event gets fired when a draft is stored to local storage.
+ *
+ * @event onStoreDraft
+ * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
+ * @param {Object} draft Draft object containing the HTML contents of the editor.
+ */
+ self.onStoreDraft = new Dispatcher(self);
+
+ /**
+ * This event gets fired when a draft is restored from local storage.
+ *
+ * @event onStoreDraft
+ * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
+ * @param {Object} draft Draft object containing the HTML contents of the editor.
+ */
+ self.onRestoreDraft = new Dispatcher(self);
+
+ /**
+ * This event gets fired when a draft removed/expired.
+ *
+ * @event onRemoveDraft
+ * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.
+ * @param {Object} draft Draft object containing the HTML contents of the editor.
+ */
+ self.onRemoveDraft = new Dispatcher(self);
+
+ // Add ask before unload dialog only add one unload handler
+ if (!unloadHandlerAdded) {
+ window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler;
+ unloadHandlerAdded = TRUE;
+ }
+ },
+
+ /**
+ * Returns information about the plugin as a name/value array.
+ * The current keys are longname, author, authorurl, infourl and version.
+ *
+ * @method getInfo
+ * @return {Object} Name/value array containing information about the plugin.
+ */
+ 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 : tinymce.majorVersion + "." + tinymce.minorVersion
+ };
+ },
+
+ /**
+ * Returns an expiration date UTC string.
+ *
+ * @method getExpDate
+ * @return {String} Expiration date UTC string.
+ */
+ getExpDate : function() {
+ return new Date(
+ new Date().getTime() + this.editor.settings.autosave_retention
+ ).toUTCString();
+ },
+
+ /**
+ * This method will setup the storage engine. If the browser has support for it.
+ *
+ * @method setupStorage
+ */
+ setupStorage : function(ed) {
+ var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK";
+
+ self.key = PLUGIN_NAME + ed.id;
+
+ // Loop though each storage engine type until we find one that works
+ tinymce.each([
+ function() {
+ // Try HTML5 Local Storage
+ if (localStorage) {
+ localStorage.setItem(testKey, testVal);
+
+ if (localStorage.getItem(testKey) === testVal) {
+ localStorage.removeItem(testKey);
+
+ return localStorage;
+ }
+ }
+ },
+
+ function() {
+ // Try HTML5 Session Storage
+ if (sessionStorage) {
+ sessionStorage.setItem(testKey, testVal);
+
+ if (sessionStorage.getItem(testKey) === testVal) {
+ sessionStorage.removeItem(testKey);
+
+ return sessionStorage;
+ }
+ }
+ },
+
+ function() {
+ // Try IE userData
+ if (tinymce.isIE) {
+ ed.getElement().style.behavior = "url('#default#userData')";
+
+ // Fake localStorage on old IE
+ return {
+ autoExpires : TRUE,
+
+ setItem : function(key, value) {
+ var userDataElement = ed.getElement();
+
+ userDataElement.setAttribute(key, value);
+ userDataElement.expires = self.getExpDate();
+
+ try {
+ userDataElement.save("TinyMCE");
+ } catch (e) {
+ // Ignore, saving might fail if "Userdata Persistence" is disabled in IE
+ }
+ },
+
+ getItem : function(key) {
+ var userDataElement = ed.getElement();
+
+ try {
+ userDataElement.load("TinyMCE");
+ return userDataElement.getAttribute(key);
+ } catch (e) {
+ // Ignore, loading might fail if "Userdata Persistence" is disabled in IE
+ return null;
+ }
+ },
+
+ removeItem : function(key) {
+ ed.getElement().removeAttribute(key);
+ }
+ };
+ }
+ },
+ ], function(setup) {
+ // Try executing each function to find a suitable storage engine
+ try {
+ self.storage = setup();
+
+ if (self.storage)
+ return false;
+ } catch (e) {
+ // Ignore
+ }
+ });
+ },
+
+ /**
+ * This method will store the current contents in the the storage engine.
+ *
+ * @method storeDraft
+ */
+ storeDraft : function() {
+ var self = this, storage = self.storage, editor = self.editor, expires, content;
+
+ // Is the contents dirty
+ if (storage) {
+ // If there is no existing key and the contents hasn't been changed since
+ // it's original value then there is no point in saving a draft
+ if (!storage.getItem(self.key) && !editor.isDirty())
+ return;
+
+ // Store contents if the contents if longer than the minlength of characters
+ content = editor.getContent({draft: true});
+ if (content.length > editor.settings.autosave_minlength) {
+ expires = self.getExpDate();
+
+ // Store expiration date if needed IE userData has auto expire built in
+ if (!self.storage.autoExpires)
+ self.storage.setItem(self.key + "_expires", expires);
+
+ self.storage.setItem(self.key, content);
+ self.onStoreDraft.dispatch(self, {
+ expires : expires,
+ content : content
+ });
+ }
+ }
+ },
+
+ /**
+ * This method will restore the contents from the storage engine back to the editor.
+ *
+ * @method restoreDraft
+ */
+ restoreDraft : function() {
+ var self = this, storage = self.storage, content;
+
+ if (storage) {
+ content = storage.getItem(self.key);
+
+ if (content) {
+ self.editor.setContent(content);
+ self.onRestoreDraft.dispatch(self, {
+ content : content
+ });
+ }
+ }
+ },
+
+ /**
+ * This method will return true/false if there is a local storage draft available.
+ *
+ * @method hasDraft
+ * @return {boolean} true/false state if there is a local draft.
+ */
+ hasDraft : function() {
+ var self = this, storage = self.storage, expDate, exists;
+
+ if (storage) {
+ // Does the item exist at all
+ exists = !!storage.getItem(self.key);
+ if (exists) {
+ // Storage needs autoexpire
+ if (!self.storage.autoExpires) {
+ expDate = new Date(storage.getItem(self.key + "_expires"));
+
+ // Contents hasn't expired
+ if (new Date().getTime() < expDate.getTime())
+ return TRUE;
+
+ // Remove it if it has
+ self.removeDraft();
+ } else
+ return TRUE;
+ }
+ }
+
+ return false;
+ },
+
+ /**
+ * Removes the currently stored draft.
+ *
+ * @method removeDraft
+ */
+ removeDraft : function() {
+ var self = this, storage = self.storage, key = self.key, content;
+
+ if (storage) {
+ // Get current contents and remove the existing draft
+ content = storage.getItem(key);
+ storage.removeItem(key);
+ storage.removeItem(key + "_expires");
+
+ // Dispatch remove event if we had any contents
+ if (content) {
+ self.onRemoveDraft.dispatch(self, {
+ content : content
+ });
+ }
+ }
+ },
+
+ "static" : {
+ // Internal unload handler will be called before the page is unloaded
+ _beforeUnloadHandler : function(e) {
+ var msg;
+
+ tinymce.each(tinyMCE.editors, function(ed) {
+ // Store a draft for each editor instance
+ if (ed.plugins.autosave)
+ ed.plugins.autosave.storeDraft();
+
+ // Never ask in fullscreen mode
+ if (ed.getParam("fullscreen_is_enabled"))
+ return;
+
+ // Setup a return message if the editor is dirty
+ if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload"))
+ msg = ed.getLang("autosave.unload_msg");
+ });
+
+ return msg;
+ }
+ }
+ });
+
+ tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave);
+})(tinymce);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js
new file mode 100644
index 000000000..fce6bd3e1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/autosave/langs/en.js
@@ -0,0 +1,4 @@
+tinyMCE.addI18n('en.autosave',{
+restore_content: "Restore auto-saved content",
+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?"
+}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js
new file mode 100644
index 000000000..8f8821fd6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js
new file mode 100644
index 000000000..4e7eb3377
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/bbcode/editor_plugin_src.js
@@ -0,0 +1,120 @@
+/**
+ * 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.BBCodePlugin', {
+ init : function(ed, url) {
+ var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase();
+
+ ed.onBeforeSetContent.add(function(ed, o) {
+ o.content = t['_' + dialect + '_bbcode2html'](o.content);
+ });
+
+ ed.onPostProcess.add(function(ed, o) {
+ if (o.set)
+ o.content = t['_' + dialect + '_bbcode2html'](o.content);
+
+ if (o.get)
+ o.content = t['_' + dialect + '_html2bbcode'](o.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
+ };
+ },
+
+ // Private methods
+
+ // HTML -> BBCode in PunBB dialect
+ _punbb_html2bbcode : function(s) {
+ s = tinymce.trim(s);
+
+ function rep(re, str) {
+ s = s.replace(re, str);
+ };
+
+ // example: <strong> to [b]
+ rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");
+ rep(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");
+ rep(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");
+ rep(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");
+ rep(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");
+ rep(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");
+ rep(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");
+ rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");
+ rep(/<font>(.*?)<\/font>/gi,"$1");
+ rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");
+ rep(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");
+ rep(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");
+ rep(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");
+ rep(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");
+ rep(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");
+ rep(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");
+ rep(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");
+ rep(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");
+ rep(/<\/(strong|b)>/gi,"[/b]");
+ rep(/<(strong|b)>/gi,"[b]");
+ rep(/<\/(em|i)>/gi,"[/i]");
+ rep(/<(em|i)>/gi,"[i]");
+ rep(/<\/u>/gi,"[/u]");
+ rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");
+ rep(/<u>/gi,"[u]");
+ rep(/<blockquote[^>]*>/gi,"[quote]");
+ rep(/<\/blockquote>/gi,"[/quote]");
+ rep(/<br \/>/gi,"\n");
+ rep(/<br\/>/gi,"\n");
+ rep(/<br>/gi,"\n");
+ rep(/<p>/gi,"");
+ rep(/<\/p>/gi,"\n");
+ rep(/&nbsp;|\u00a0/gi," ");
+ rep(/&quot;/gi,"\"");
+ rep(/&lt;/gi,"<");
+ rep(/&gt;/gi,">");
+ rep(/&amp;/gi,"&");
+
+ return s;
+ },
+
+ // BBCode -> HTML from PunBB dialect
+ _punbb_bbcode2html : function(s) {
+ s = tinymce.trim(s);
+
+ function rep(re, str) {
+ s = s.replace(re, str);
+ };
+
+ // example: [b] to <strong>
+ rep(/\n/gi,"<br />");
+ rep(/\[b\]/gi,"<strong>");
+ rep(/\[\/b\]/gi,"</strong>");
+ rep(/\[i\]/gi,"<em>");
+ rep(/\[\/i\]/gi,"</em>");
+ rep(/\[u\]/gi,"<u>");
+ rep(/\[\/u\]/gi,"</u>");
+ rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");
+ rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");
+ rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");
+ rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<font color=\"$1\">$2</font>");
+ rep(/\[code\](.*?)\[\/code\]/gi,"<span class=\"codeStyle\">$1</span>&nbsp;");
+ rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<span class=\"quoteStyle\">$1</span>&nbsp;");
+
+ return s;
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js
new file mode 100644
index 000000000..af7ae5445
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js
new file mode 100644
index 000000000..956fbea99
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js
@@ -0,0 +1,160 @@
+/**
+ * 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() {
+ var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;
+
+ /**
+ * This plugin a context menu to TinyMCE editor instances.
+ *
+ * @class tinymce.plugins.ContextMenu
+ */
+ tinymce.create('tinymce.plugins.ContextMenu', {
+ /**
+ * 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.
+ *
+ * @method init
+ * @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) {
+ var t = this, showMenu, contextmenuNeverUseNative, realCtrlKey;
+
+ t.editor = ed;
+
+ contextmenuNeverUseNative = ed.settings.contextmenu_never_use_native;
+
+ /**
+ * This event gets fired when the context menu is shown.
+ *
+ * @event onContextMenu
+ * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event.
+ * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed.
+ */
+ t.onContextMenu = new tinymce.util.Dispatcher(this);
+
+ showMenu = ed.onContextMenu.add(function(ed, e) {
+ // Block TinyMCE menu on ctrlKey and work around Safari issue
+ if ((realCtrlKey !== 0 ? realCtrlKey : e.ctrlKey) && !contextmenuNeverUseNative)
+ return;
+
+ Event.cancel(e);
+
+ // Select the image if it's clicked. WebKit would other wise expand the selection
+ if (e.target.nodeName == 'IMG')
+ ed.selection.select(e.target);
+
+ t._getMenu(ed).showMenu(e.clientX || e.pageX, e.clientY || e.pageY);
+ Event.add(ed.getDoc(), 'click', function(e) {
+ hide(ed, e);
+ });
+
+ ed.nodeChanged();
+ });
+
+ ed.onRemove.add(function() {
+ if (t._menu)
+ t._menu.removeAll();
+ });
+
+ function hide(ed, e) {
+ realCtrlKey = 0;
+
+ // Since the contextmenu event moves
+ // the selection we need to store it away
+ if (e && e.button == 2) {
+ realCtrlKey = e.ctrlKey;
+ return;
+ }
+
+ if (t._menu) {
+ t._menu.removeAll();
+ t._menu.destroy();
+ Event.remove(ed.getDoc(), 'click', hide);
+ }
+ };
+
+ ed.onMouseDown.add(hide);
+ ed.onKeyDown.add(hide);
+ ed.onKeyDown.add(function(ed, e) {
+ if (e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode === 121) {
+ Event.cancel(e);
+ showMenu(ed, e);
+ }
+ });
+ },
+
+ /**
+ * Returns information about the plugin as a name/value array.
+ * The current keys are longname, author, authorurl, infourl and version.
+ *
+ * @method getInfo
+ * @return {Object} Name/value array containing information about the plugin.
+ */
+ 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(ed) {
+ var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p;
+
+ if (m) {
+ m.removeAll();
+ m.destroy();
+ }
+
+ p = DOM.getPos(ed.getContentAreaContainer());
+
+ m = ed.controlManager.createDropMenu('contextmenu', {
+ offset_x : p.x + ed.getParam('contextmenu_offset_x', 0),
+ offset_y : p.y + ed.getParam('contextmenu_offset_y', 0),
+ constrain : 1,
+ keyboard_focus: true
+ });
+
+ t._menu = m;
+
+ m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col);
+ m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col);
+ m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'});
+
+ if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) {
+ m.addSeparator();
+ m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
+ m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
+ }
+
+ m.addSeparator();
+ m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
+
+ m.addSeparator();
+ am = m.addMenu({title : 'contextmenu.align'});
+ am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'});
+ am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'});
+ am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'});
+ am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'});
+
+ t.onContextMenu.dispatch(t, m, el, col);
+
+ return m;
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu);
+})();
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js
new file mode 100644
index 000000000..bce8e7399
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js
new file mode 100644
index 000000000..4444959bf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/directionality/editor_plugin_src.js
@@ -0,0 +1,82 @@
+/**
+ * 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.Directionality', {
+ init : function(ed, url) {
+ var t = this;
+
+ t.editor = ed;
+
+ ed.addCommand('mceDirectionLTR', function() {
+ var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);
+
+ if (e) {
+ if (ed.dom.getAttrib(e, "dir") != "ltr")
+ ed.dom.setAttrib(e, "dir", "ltr");
+ else
+ ed.dom.setAttrib(e, "dir", "");
+ }
+
+ ed.nodeChanged();
+ });
+
+ ed.addCommand('mceDirectionRTL', function() {
+ var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);
+
+ if (e) {
+ if (ed.dom.getAttrib(e, "dir") != "rtl")
+ ed.dom.setAttrib(e, "dir", "rtl");
+ else
+ ed.dom.setAttrib(e, "dir", "");
+ }
+
+ ed.nodeChanged();
+ });
+
+ ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'});
+ ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'});
+
+ ed.onNodeChange.add(t._nodeChange, t);
+ },
+
+ 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
+ };
+ },
+
+ // Private methods
+
+ _nodeChange : function(ed, cm, n) {
+ var dom = ed.dom, dir;
+
+ n = dom.getParent(n, dom.isBlock);
+ if (!n) {
+ cm.setDisabled('ltr', 1);
+ cm.setDisabled('rtl', 1);
+ return;
+ }
+
+ dir = dom.getAttrib(n, 'dir');
+ cm.setActive('ltr', dir == "ltr");
+ cm.setDisabled('ltr', 0);
+ cm.setActive('rtl', dir == "rtl");
+ cm.setDisabled('rtl', 0);
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js
new file mode 100644
index 000000000..dbdd8ffb5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js
new file mode 100644
index 000000000..71d541697
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/editor_plugin_src.js
@@ -0,0 +1,43 @@
+/**
+ * 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) {
+ tinymce.create('tinymce.plugins.EmotionsPlugin', {
+ init : function(ed, url) {
+ // Register commands
+ ed.addCommand('mceEmotion', function() {
+ ed.windowManager.open({
+ file : url + '/emotions.htm',
+ width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)),
+ height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ // Register buttons
+ ed.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 : tinymce.majorVersion + "." + tinymce.minorVersion
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);
+})(tinymce); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm
new file mode 100644
index 000000000..7d9a68cfe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/emotions.htm
@@ -0,0 +1,42 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>{#emotions_dlg.title}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/emotions.js"></script>
+</head>
+<body style="display: none" role="application" aria-labelledby="app_title">
+<span style="display:none;" id="app_title">{#emotions_dlg.title}</span>
+<div align="center">
+ <div class="title">{#emotions_dlg.title}:<br /><br /></div>
+
+ <table id="emoticon_table" role="presentation" border="0" cellspacing="0" cellpadding="4">
+ <tr>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.cool}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.cry}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.embarassed}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.foot_in_mouth}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ </tr>
+ <tr>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.frown}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.innocent}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.kiss}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.laughing}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ </tr>
+ <tr>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.money_mouth}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}"/></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.sealed}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.smile}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.surprised}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ </tr>
+ <tr>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.tongue-out}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.undecided}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.wink}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ <td><a class="emoticon_link" role="button" title="{#emotions_dlg.yell}. {#emotions_dlg.usage}" 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}. {#emotions_dlg.usage}" /></a></td>
+ </tr>
+ </table>
+ <div>{#emotions_dlg.usage}</div>
+</div>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif
new file mode 100644
index 000000000..ba90cc36f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cool.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif
new file mode 100644
index 000000000..74d897a4f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-cry.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif
new file mode 100644
index 000000000..963a96b8a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif
new file mode 100644
index 000000000..c7cf1011d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif
new file mode 100644
index 000000000..716f55e16
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-frown.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif
new file mode 100644
index 000000000..334d49e0e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif
new file mode 100644
index 000000000..4efd549ed
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif
new file mode 100644
index 000000000..82c5b182e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif
new file mode 100644
index 000000000..ca2451e10
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif
new file mode 100644
index 000000000..fe66220c2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif
new file mode 100644
index 000000000..fd27edfaa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-smile.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif
new file mode 100644
index 000000000..0cc9bb71c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif
new file mode 100644
index 000000000..2075dc160
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif
new file mode 100644
index 000000000..bef7e2573
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif
new file mode 100644
index 000000000..0631c7616
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-wink.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif
new file mode 100644
index 000000000..648e6e879
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/img/smiley-yell.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js
new file mode 100644
index 000000000..b360f20b6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/js/emotions.js
@@ -0,0 +1,43 @@
+tinyMCEPopup.requireLangPack();
+
+var EmotionsDialog = {
+ addKeyboardNavigation: function(){
+ var tableElm, cells, settings;
+
+ cells = tinyMCEPopup.dom.select("a.emoticon_link", "emoticon_table");
+
+ settings ={
+ root: "emoticon_table",
+ items: cells
+ };
+ cells[0].tabindex=0;
+ tinyMCEPopup.dom.addClass(cells[0], "mceFocus");
+ if (tinymce.isGecko) {
+ cells[0].focus();
+ } else {
+ setTimeout(function(){
+ cells[0].focus();
+ }, 100);
+ }
+ tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);
+ },
+ init : function(ed) {
+ tinyMCEPopup.resizeToInnerSize();
+ this.addKeyboardNavigation();
+ },
+
+ insert : function(file, title) {
+ var ed = tinyMCEPopup.editor, dom = ed.dom;
+
+ tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', {
+ src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file,
+ alt : ed.getLang(title),
+ title : ed.getLang(title),
+ border : 0
+ }));
+
+ tinyMCEPopup.close();
+ }
+};
+
+tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ar_dlg.js
new file mode 100644
index 000000000..80f94027c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.emotions_dlg',{cry:"\u0628\u0643\u0627\u0621",cool:"\u062c\u064a\u062f",desc:"\u0627\u0644\u0648\u0633\u0648\u0645",title:"\u0627\u0636\u0627\u0641\u0647 \u0648\u0633\u0645 \u062a\u0639\u0628\u064a\u0631\u0649",yell:"\u064a\u0635\u064a\u062d",wink:"\u063a\u0645\u0632\u0629",undecided:"\u0628\u0639\u062f","tongue_out":"\u0627\u0644\u0644\u0633\u0627\u0646 \u062e\u0627\u0631\u062c",surprised:"\u0645\u0646\u062f\u0647\u0634\u0629",smile:"\u0627\u0628\u062a\u0633\u0627\u0645\u0629",sealed:"\u0627\u0644\u0645\u062e\u062a\u0648\u0645\u0629","money_mouth":"\u0645\u062d\u0628 \u0627\u0644\u0645\u0627\u0644",laughing:"\u0627\u0644\u0636\u062d\u0643",kiss:"\u0642\u0628\u0644\u0647",innocent:"\u0627\u0644\u0628\u0631\u0627\u0621\u0647",frown:"\u0627\u0644\u062a\u062c\u0647\u0645","foot_in_mouth":"\u062d\u0630\u0627\u0621 \u0641\u0649 \u0627\u0644\u0641\u0645 (\u0627\u062e\u0631\u0633)",embarassed:"\u0627\u062d\u0631\u0627\u062c",usage:"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u0633\u0647\u0645 \u0627\u0644\u0623\u064a\u0645\u0646 \u0648\u0627\u0644\u0623\u064a\u0633\u0631 \u0644\u0644\u062a\u0646\u0642\u0644."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/az_dlg.js
new file mode 100644
index 000000000..919ef500f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.emotions_dlg',{cry:"A\u011flay\u0131r",cool:"Bomba",desc:"Smayllar",title:"Smayl \u0259lav\u0259 et",yell:"Ba\u011f\u0131r\u0131r",wink:"G\u00f6z vurur",undecided:"Q\u0259rars\u0131zl\u0131qda","tongue_out":"Dil g\u00f6st\u0259rir",surprised:"T\u0259\u0259c\u00fcbl\u0259nib",smile:"G\u00fcl\u00fcms\u0259yir",sealed:"M\u00f6h\u00fcrl\u0259nib","money_mouth":"\u00c7oxlu pul",laughing:"G\u00fcl\u00fcr",kiss:"\u00d6p\u00fc\u015f",innocent:"G\u00fcnahs\u0131z",frown:"Qa\u015fqabaql\u0131","foot_in_mouth":"Ayaqlar_m\u0259nim_a\u011fz\u0131ma!",embarassed:"Mat qalm\u0131\u015f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/be_dlg.js
new file mode 100644
index 000000000..99689795b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.emotions_dlg',{cry:"\u041f\u043b\u0430\u0447\u0430",cool:"\u041a\u043b\u0451\u0432\u044b",desc:"\u0421\u043c\u0430\u0439\u043b\u0456\u043a\u0456",title:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0441\u043c\u0430\u0439\u043b\u0456\u043a",yell:"\u041b\u044f\u043c\u0430\u043d\u0442\u0443\u0435",wink:"\u041f\u0430\u0434\u043c\u0456\u0440\u0433\u0432\u0430\u0435",undecided:"\u0423 \u043d\u0435\u0440\u0430\u0448\u0443\u0447\u0430\u0441\u0446\u0456","tongue_out":"\u041f\u0430\u043a\u0430\u0437\u0432\u0430\u0435 \u044f\u0437\u044b\u043a",surprised:"\u0417\u0434\u0437\u0456\u045e\u043b\u0435\u043d\u044b",smile:"\u0423\u0441\u043c\u0456\u0445\u0430\u0435\u0446\u0446\u0430",sealed:"\u041c\u0430\u045e\u0447\u044b\u0446\u044c","money_mouth":"\u0428\u043c\u0430\u0442 \u0433\u0440\u043e\u0448\u0430\u0439",laughing:"\u0421\u043c\u044f\u0435\u0446\u0446\u0430",kiss:"\u041f\u0430\u0446\u0430\u043b\u0443\u043d\u0430\u043a",innocent:"\u041d\u044f\u0432\u0456\u043d\u043d\u0430\u0441\u0446\u044c",frown:"\u0425\u043c\u0443\u0440\u043d\u044b","foot_in_mouth":"\u0423 \u0440\u043e\u0442 \u043c\u043d\u0435 \u043d\u043e\u0433\u0456!",embarassed:"\u0427\u044b\u0440\u0432\u0430\u043d\u0435\u0435",usage:"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u043e\u045e\u0432\u0430\u0439\u0446\u0435 \u043a\u043b\u0430\u0432\u0456\u0448\u044b \"\u041d\u0430\u043b\u0435\u0432\u0430\" \u0456 \"\u041d\u0430\u043f\u0440\u0430\u0432\u0430\" \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u044b\u0456."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bg_dlg.js
new file mode 100644
index 000000000..b15ff1cb0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"\u0415\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438",title:"\u0412\u043c\u044a\u043a\u043d\u0438 \u0435\u043c\u043e\u0442\u0438\u043a\u043e\u043d",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed",usage:"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438\u0442\u0435 \u043d\u0430\u043b\u044f\u0432\u043e \u0438 \u043d\u0430\u0434\u044f\u0441\u043d\u043e, \u0437\u0430 \u0434\u0430 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043d\u044f\u043a\u043e\u044f \u0435\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u043a\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bn_dlg.js
new file mode 100644
index 000000000..ff99a6526
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/br_dlg.js
new file mode 100644
index 000000000..d482e034b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.emotions_dlg',{cry:"Chor\u00e3o",cool:"Fixe",desc:"Emoticons",title:"Inserir emoticon",yell:"Irado",wink:"Piscadela",undecided:"Indeciso","tongue_out":"L\u00edngua de fora",surprised:"Surpresa",smile:"Sorriso",sealed:"Boca Fechada","money_mouth":"Avarez",laughing:"Riso",kiss:"Beijo",innocent:"Inocente",frown:"Decep\u00e7\u00e3o","foot_in_mouth":"Disse asneira",embarassed:"Embara\u00e7ado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bs_dlg.js
new file mode 100644
index 000000000..c34a7655e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.emotions_dlg',{cry:"Pla\u010d",cool:"Cool",desc:"Emocije",title:"Umetni emociju",yell:"Vi\u010de",wink:"Namigiva",undecided:"Neodlu\u010dan","tongue_out":"Belji se",surprised:"Iznena\u0111en",smile:"Osmijeh",sealed:"\u0160utim","money_mouth":"Bogata\u0161",laughing:"Smijeh",kiss:"Poljubac",innocent:"Nevina\u0161ce",frown:"Mr\u0161ti se","foot_in_mouth":"Izlanuo se",embarassed:"Sramim se"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ca_dlg.js
new file mode 100644
index 000000000..6aaba39bf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.emotions_dlg',{cry:"Plorant",cool:"Guai",desc:"Emoticones",title:"Insereix una emoticona",yell:"Cridant",wink:"Fent l\'ullet",undecided:"Indec\u00eds","tongue_out":"Llengua a fora",surprised:"Sorpr\u00e8s",smile:"Somriure",sealed:"Censurat","money_mouth":"Amb fam de diners",laughing:"Rient",kiss:"Pet\u00f3",innocent:"Innocent",frown:"Arrufant les celles","foot_in_mouth":"Amb un peu a la boca",embarassed:"Avergonyit",usage:"Feu servir fletxes esquerra i dreta per navegar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ch_dlg.js
new file mode 100644
index 000000000..66a83fb66
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u9177",desc:"\u8868\u60c5\u5217\u8868",title:"\u63d2\u5165\u8868\u60c5",yell:"\u5927\u53eb",wink:"\u7728\u773c",undecided:"\u601d\u8003","tongue_out":"\u5410\u820c\u5934",surprised:"\u60ca\u8bb6",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c34\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cn_dlg.js
new file mode 100644
index 000000000..b1d8a33f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u9177",desc:"\u8868\u60c5",title:"\u63d2\u5165\u8868\u60c5",yell:"\u53eb\u558a",wink:"\u7728\u773c",undecided:"\u672a\u5b9a","tongue_out":"\u5410\u820c\u5934",surprised:"\u5403\u60ca",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22\u4e86",laughing:"\u5927\u7b11",kiss:"\u4eb2\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c34\u5c2c",usage:"\u4f7f\u7528\u5de6\u53f3\u952e\u8df3\u8f6c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cs_dlg.js
new file mode 100644
index 000000000..625608bcc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.emotions_dlg',{cry:"Pla\u010d\u00edc\u00ed",cool:"\u00da\u017easn\u00fd",desc:"Emotikony",title:"Vlo\u017eit emotikonu",yell:"K\u0159i\u010d\u00edc\u00ed",wink:"Mrkaj\u00edc\u00ed",undecided:"Nerozhodn\u00fd","tongue_out":"S vyplazen\u00fdm jazykem",surprised:"P\u0159ekvapen\u00fd",smile:"Usm\u00edvaj\u00edc\u00ed se",sealed:"Ml\u010d\u00edc\u00ed","money_mouth":"Je na prachy",laughing:"Sm\u011bj\u00edc\u00ed se",kiss:"L\u00edbaj\u00edc\u00ed",innocent:"Nevinn\u00fd",frown:"Zamra\u010den\u00fd","foot_in_mouth":"\u0160l\u00e1pnul vedle",embarassed:"Rozpa\u010dit\u00fd",usage:"Pro navigaci pou\u017eijte \u0161ipky vlevo a vpravo."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cy_dlg.js
new file mode 100644
index 000000000..6e40f0cb2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.emotions_dlg',{cry:"Crio",cool:"Iawn",desc:"Emosiynau",title:"Mewnosod Emosiwn",yell:"Gweiddi",wink:"Wincio",undecided:"Heb benderfynu","tongue_out":"Tafod allan",surprised:"Wedi synnu",smile:"Gw\u00ean",sealed:"Wedi\'i selio","money_mouth":"Ceg arian",laughing:"Chwerthin",kiss:"Cusan",innocent:"Dieuog",frown:"Gwgu","foot_in_mouth":"Troed yn y geg",embarassed:"Embaras",usage:"Defnyddiwch saethau dde a chwith i fforio."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/da_dlg.js
new file mode 100644
index 000000000..165137e7b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.emotions_dlg',{cry:"Gr\u00e6de",cool:"Cool",desc:"Hum\u00f8rikoner",title:"Inds\u00e6t hum\u00f8rikon",yell:"R\u00e5be",wink:"Vink",undecided:"Ubeslutsom","tongue_out":"Tunge ud",surprised:"Overrasket",smile:"Smil",sealed:"Lukket","money_mouth":"Pengemund",laughing:"Grine",kiss:"Kys",innocent:"Uskyldig",frown:"Forskr\u00e6kket","foot_in_mouth":"Fod i munden",embarassed:"Flov",usage:"Brug venstre og h\u00f8jre piletaster til at navigere"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/de_dlg.js
new file mode 100644
index 000000000..9ef427cbb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.emotions_dlg',{cry:"Weinend",cool:"Cool",desc:"Smilies",title:"Smiley einf\u00fcgen",yell:"Br\u00fcllend",wink:"Zwinkernd",undecided:"Unentschlossen","tongue_out":"Zunge raus",surprised:"\u00dcberrascht",smile:"L\u00e4chelnd",sealed:"Verschlossen","money_mouth":"Geld",laughing:"Lachend",kiss:"K\u00fcssend",innocent:"Unschuldig",frown:"Stirnrunzelnd","foot_in_mouth":"Reingefallen",embarassed:"Verlegen",usage:"Navigation mit linken und rechten Pfeilen."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/dv_dlg.js
new file mode 100644
index 000000000..dfc0a9f6a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/el_dlg.js
new file mode 100644
index 000000000..c847eb29c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.emotions_dlg',{cry:"\u0394\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2",cool:"\u0386\u03bd\u03b5\u03c4\u03bf\u03c2",desc:"\u03a3\u03c5\u03bd\u03b1\u03b9\u03c3\u03b8\u03ae\u03bc\u03b1\u03c4\u03b1",title:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c5\u03bd\u03b1\u03b9\u03c3\u03b8\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2",yell:"\u03a6\u03c9\u03bd\u03ac\u03b6\u03c9",wink:"\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf \u03bc\u03b1\u03c4\u03b9\u03bf\u03cd",undecided:"\u0391\u03bd\u03b1\u03c0\u03bf\u03c6\u03ac\u03c3\u03b9\u03c3\u03c4\u03bf\u03c2","tongue_out":"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1 \u03ad\u03be\u03c9",surprised:"\u0388\u03ba\u03c0\u03bb\u03b7\u03ba\u03c4\u03bf\u03c2",smile:"\u03a7\u03b1\u03bc\u03cc\u03b3\u03b5\u03bb\u03bf",sealed:"\u03a3\u03c6\u03c1\u03b1\u03b3\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03c3\u03c4\u03cc\u03bc\u03b1","money_mouth":"\u039b\u03b5\u03c6\u03c4\u03ac \u03c9\u03c2 \u03c3\u03c4\u03cc\u03bc\u03b1",laughing:"\u0393\u03ad\u03bb\u03b9\u03bf",kiss:"\u03a6\u03b9\u03bb\u03af",innocent:"\u0391\u03b8\u03ce\u03bf\u03c2",frown:"\u039a\u03b1\u03c4\u03c3\u03bf\u03c5\u03c6\u03b9\u03b1\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2","foot_in_mouth":"\u039a\u03bb\u03c9\u03c4\u03c3\u03b9\u03ac \u03c3\u03c4\u03bf \u03c3\u03c4\u03cc\u03bc\u03b1",embarassed:"\u0391\u03bc\u03ae\u03c7\u03b1\u03bd\u03bf\u03c2",usage:"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03cc \u03ba\u03b1\u03b9 \u03c4\u03bf \u03b4\u03b5\u03be\u03af \u03b2\u03ad\u03bb\u03bf\u03c2 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03b8\u03b5\u03af\u03c4\u03b5."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js
new file mode 100644
index 000000000..f5aafc390
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed",usage:"Use left and right arrows to navigate."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/eo_dlg.js
new file mode 100644
index 000000000..47a7bdfee
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.emotions_dlg',{cry:"Ploranta",cool:"Mojosa",desc:"Viza\u011detoj",title:"Enmeti viza\u011deton",yell:"Kolera",wink:"Okulumo",undecided:"Sendecida","tongue_out":"Lango",surprised:"Surprizita",smile:"Rideto",sealed:"Bu\u015do Fermita","money_mouth":"Avara",laughing:"Rido",kiss:"Kiso",innocent:"Senkulpa",frown:"Malgajo","foot_in_mouth":"Rubo",embarassed:"Hontema"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/es_dlg.js
new file mode 100644
index 000000000..bdff36a57
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.emotions_dlg',{cry:"Llora",cool:"Todo bien",desc:"Emoticones",title:"Insertar emoticon",yell:"Enfadado",wink:"Gui\u00f1o",undecided:"Indeciso","tongue_out":"Lengua fuera",surprised:"Sorprendido",smile:"Sonrisa",sealed:"Sellado","money_mouth":"Dinero boca",laughing:"Risa",kiss:"Beso",innocent:"Inocente",frown:"Triste","foot_in_mouth":"Pie en la boca",embarassed:"Verg\u00fcenza",usage:"Use las flechas para navegar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/et_dlg.js
new file mode 100644
index 000000000..1b1d632a0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.emotions_dlg',{cry:"Nutt",cool:"Lahe",desc:"Emotsioonid",title:"Sisesta emotsioon",yell:"Karje",wink:"Silmapilgutus",undecided:"K\u00f5hklev","tongue_out":"Keel v\u00e4ljas",surprised:"\u00dcllatunud",smile:"Naeratus",sealed:"Suletud","money_mouth":"Rahasuu",laughing:"Naermine",kiss:"Suudlus",innocent:"S\u00fc\u00fctu",frown:"Kulmu kortsutamine","foot_in_mouth":"Jalg suus",embarassed:"H\u00e4bitunne",usage:"Kasuta navigeerimiseks vasak ja parem nooli."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/eu_dlg.js
new file mode 100644
index 000000000..e8c51bcfb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.emotions_dlg',{cry:"Negarrez",cool:"Ondo",desc:"Ikonotsoak",title:"Ikonotxoa sartu",yell:"Oihua",wink:"Keinua",undecided:"Zalantzan","tongue_out":"Mihia atera",surprised:"Harrituta",smile:"Irriparra",sealed:"Ixilik","money_mouth":"Ahoa diruz beteta",laughing:"Barrez",kiss:"Muxua",innocent:"Ni ez naiz izan",frown:"Desadostasuna","foot_in_mouth":"Hanka ahoan",embarassed:"Lotsatuta"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fa_dlg.js
new file mode 100644
index 000000000..1c1d57c0d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.emotions_dlg',{cry:"\u06af\u0631\u06cc\u0647",cool:"\u0622\u0631\u0627\u0645",desc:"\u0634\u06a9\u0644\u06a9 \u0647\u0627",title:"\u062f\u0631\u062c \u0634\u06a9\u0644\u06a9",yell:"\u0641\u0631\u06cc\u0627\u062f",wink:"\u0686\u0634\u0645\u06a9",undecided:"\u0645\u0631\u062f\u062f","tongue_out":"\u0632\u0628\u0627\u0646 \u062f\u0631\u0627\u0632\u06cc",surprised:"\u0645\u062a\u0639\u062c\u0628",smile:"\u0644\u0628\u062e\u0646\u062f",sealed:"\u0645\u0647\u0631 \u0634\u062f\u0647","money_mouth":"\u067e\u0648\u0644 \u062f\u0631 \u062f\u0647\u0627\u0646",laughing:"\u062e\u0646\u062f\u0647",kiss:"\u0628\u0648\u0633\u0647",innocent:"\u0628\u06cc \u062a\u0642\u0635\u06cc\u0631",frown:"\u0627\u062e\u0645","foot_in_mouth":"\u067e\u0627 \u062f\u0631 \u062f\u0647\u0627\u0646",embarassed:"\u062e\u062c\u0627\u0644\u062a\u06cc",usage:"\u0627\u0632 \u06a9\u0644\u06cc\u062f \u0647\u0627\u06cc \u0686\u067e \u0648 \u0631\u0627\u0633\u062a \u062c\u0647\u062a \u062d\u0631\u06a9\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fi_dlg.js
new file mode 100644
index 000000000..7e620dd5f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.emotions_dlg',{cry:"Itku",cool:"Cool",desc:"Hymi\u00f6t",title:"Lis\u00e4\u00e4 hymi\u00f6",yell:"Huuto",wink:"Silm\u00e4nisku",undecided:"P\u00e4\u00e4tt\u00e4m\u00e4t\u00f6n","tongue_out":"Kieli ulkona",surprised:"Yll\u00e4ttynyt",smile:"Hymy",sealed:"Tukittu","money_mouth":"Klink Klink (raha)",laughing:"Nauru",kiss:"Pusu",innocent:"Viaton",frown:"Otsan rypistys","foot_in_mouth":"Jalka suussa",embarassed:"Nolostunut",usage:"K\u00e4yt\u00e4 vasenta ja oikeata nuolin\u00e4pp\u00e4int\u00e4 navigointiin."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fr_dlg.js
new file mode 100644
index 000000000..971cf0966
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.emotions_dlg',{cry:"En pleurs",cool:"Cool",desc:"\u00c9motic\u00f4nes",title:"Ins\u00e9rer une \u00e9motic\u00f4ne",yell:"Criant",wink:"Clin d\'\u0153il",undecided:"Incertain","tongue_out":"Langue tir\u00e9e",surprised:"Surpris",smile:"Sourire",sealed:"Bouche cousue","money_mouth":"Avare",laughing:"Rigolant",kiss:"Bisou",innocent:"Innocent",frown:"D\u00e9\u00e7u","foot_in_mouth":"Pied de nez",embarassed:"Embarrass\u00e9",usage:"Utilisez les fl\u00e8ches gauche et droite pour naviguer."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/gl_dlg.js
new file mode 100644
index 000000000..790050a70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.emotions_dlg',{cry:"Chora",cool:"Guay",desc:"Emoticones",title:"Insertar emoticon",yell:"Anoxado",wink:"Gui\u00f1o",undecided:"Indeciso","tongue_out":"Canso",surprised:"Sorprendido",smile:"Sorriso",sealed:"Selado","money_mouth":"Cartos",laughing:"Risa",kiss:"Beso",innocent:"Inocente",frown:"Triste","foot_in_mouth":"A que dixen",embarassed:"Vergo\u00f1a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/gu_dlg.js
new file mode 100644
index 000000000..6adace002
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/he_dlg.js
new file mode 100644
index 000000000..2664cd224
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.emotions_dlg',{cry:"\u05d1\u05d5\u05db\u05d4",cool:"\u05de\u05d2\u05e0\u05d9\u05d1",desc:"\u05e1\u05de\u05d9\u05d9\u05dc\u05d9\u05dd",title:"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e1\u05de\u05d9\u05d9\u05dc\u05d9",yell:"\u05e6\u05e2\u05e7\u05d4",wink:"\u05e7\u05e8\u05d9\u05e6\u05d4",undecided:"\u05d4\u05e1\u05e0\u05e0\u05d9","tongue_out":"\u05dc\u05e9\u05d5\u05df \u05d1\u05d7\u05d5\u05e5",surprised:"\u05de\u05d5\u05e4\u05ea\u05e2",smile:"\u05d7\u05d9\u05d5\u05da",sealed:"\u05d0\u05d8\u05d5\u05dd","money_mouth":"\u05db\u05e1\u05e3",laughing:"\u05e6\u05d5\u05d7\u05e7",kiss:"\u05e0\u05e9\u05d9\u05e7\u05d4",innocent:"\u05ea\u05de\u05d9\u05dd",frown:"\u05de\u05d6\u05e2\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e4\u05d4","foot_in_mouth":"\u05e8\u05d2\u05dc \u05d1\u05e4\u05d4",embarassed:"\u05e0\u05d1\u05d5\u05da",usage:"\u05d4\u05e9\u05ea\u05de\u05e9\u05d5 \u05d1\u05d7\u05e5 \u05d9\u05de\u05d9\u05e0\u05d4 \u05d5\u05e9\u05de\u05d0\u05dc\u05d4 \u05dc\u05e0\u05d9\u05d5\u05d5\u05d8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hi_dlg.js
new file mode 100644
index 000000000..aee9ef395
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hr_dlg.js
new file mode 100644
index 000000000..d71e4a26c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.emotions_dlg',{cry:"Pla\u010d",cool:"Cool",desc:"Emotikoni",title:"Umetni emotikona",yell:"Vi\u010de",wink:"Namiguje",undecided:"Neodlu\u010dan","tongue_out":"Plazi jezik",surprised:"Iznena\u0111en",smile:"Osmijeh",sealed:"\u0160uti","money_mouth":"Bogata\u0161",laughing:"Smije se",kiss:"Poljubac",innocent:"Nevina\u0161ce",frown:"Mr\u0161ti se","foot_in_mouth":"Izlanuo se",embarassed:"Srami se"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hu_dlg.js
new file mode 100644
index 000000000..b48285bb5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.emotions_dlg',{cry:"S\u00edr\u00f3s",cool:"Kir\u00e1ly",desc:"Hangulatjelek",title:"Hangulatjel besz\u00far\u00e1sa",yell:"\u00dcv\u00f6lt\u00e9s",wink:"Kacsint\u00e1s",undecided:"Hat\u00e1rozatlan","tongue_out":"Nyelv\u00f6lt\u00e9s",surprised:"Meglepett",smile:"Vigyor",sealed:"Lakat a sz\u00e1j\u00e1n","money_mouth":"P\u00e9nz besz\u00e9l",laughing:"Nevet\u00e9s",kiss:"Cs\u00f3k",innocent:"\u00c1rtatlan",frown:"Rosszall","foot_in_mouth":"L\u00e1b a sz\u00e1jban",embarassed:"Zavarban van",usage:"A navig\u00e1l\u00e1shoz haszn\u00e1ld a bal \u00e9s jobb oldali nyilat."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hy_dlg.js
new file mode 100644
index 000000000..a43f53f8b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"\u054d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580",title:"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057d\u0574\u0561\u0575\u056c\u056b\u056f",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ia_dlg.js
new file mode 100644
index 000000000..3795d6874
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u51b7\u9177",desc:"\u8868\u60c5\u5217\u8868",title:"\u63d2\u5165\u8868\u60c5",yell:"\u53eb\u56b7",wink:"\u7728\u773c",undecided:"\u601d\u8003","tongue_out":"\u5410\u820c\u5934",surprised:"\u60ca\u5413",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c34\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/id_dlg.js
new file mode 100644
index 000000000..72270f404
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"sisipkan emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/is_dlg.js
new file mode 100644
index 000000000..e47753cd2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.emotions_dlg',{cry:"Gr\u00e1tandi",cool:"T\u00f6ff",desc:"Broskarlar",title:"Setja inn broskall",yell:"\u00d6skrandi",wink:"Blikk",undecided:"\u00d3\u00e1kve\u00f0inn","tongue_out":"Tungan \u00fat",surprised:"Hissa",smile:"Bros",sealed:"Rennil\u00e1samunnur","money_mouth":"Peningamunnur",laughing:"Hl\u00e6gjandi",kiss:"Koss",innocent:"Saklaus",frown:"Frown","foot_in_mouth":"F\u00f3tur \u00ed munni",embarassed:"Skammast s\u00edn"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/it_dlg.js
new file mode 100644
index 000000000..06998660a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.emotions_dlg',{cry:"Piango",cool:"Fico",desc:"Faccina",title:"Inserisci faccina",yell:"Arrabbiato",wink:"Occhiolino",undecided:"Indeciso","tongue_out":"Linguaccia",surprised:"Sorpreso",smile:"Sorridente",sealed:"Bocca sigillata","money_mouth":"Bocca danarosa",laughing:"Risatona",kiss:"Bacio",innocent:"Santarellino",frown:"Triste","foot_in_mouth":"Piede in bocca",embarassed:"Imbarazzato",usage:"Utilizza le freccie sinistra e destra per navigare."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ja_dlg.js
new file mode 100644
index 000000000..7ff287f39
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.emotions_dlg',{cry:"\u6ce3\u304d\u9854",cool:"\u30af\u30fc\u30eb",desc:"\u8868\u60c5\u30a2\u30a4\u30b3\u30f3",title:"\u8868\u60c5\u30a2\u30a4\u30b3\u30f3\u306e\u633f\u5165",yell:"\u30a8\u30fc\u30eb",wink:"\u30a6\u30a3\u30f3\u30af",undecided:"\u672a\u6c7a\u5b9a","tongue_out":"\u30a2\u30c3\u30ab\u30f3\u30d9\u30fc",surprised:"\u9a5a\u304d",smile:"\u7b11\u9854",sealed:"\u5c01\u5370","money_mouth":"\u53e3\u306b\u304a\u91d1",laughing:"\u7b11\u3044",kiss:"\u30ad\u30b9",innocent:"\u7d14\u771f\u7121\u57a2",frown:"\u6e0b\u9762","foot_in_mouth":"\u53e3\u306b\u8db3",embarassed:"\u56f0\u60d1",usage:"\u5de6\u3068\u53f3\u306e\u30ab\u30fc\u30bd\u30eb\u30ad\u30fc\u3067\u79fb\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ka_dlg.js
new file mode 100644
index 000000000..a2b76b378
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.emotions_dlg',{cry:"\u10d5\u10e2\u10d8\u10e0\u10d8\u10d5\u10d0\u10e0",cool:"\u10db\u10d0\u10d2\u10d0\u10e0\u10d8\u10d0!",desc:"\u10e1\u10db\u10d0\u10d8\u10da\u10d4\u10d1\u10d8",title:"\u10e1\u10db\u10d0\u10d8\u10da\u10d8\u10e1 \u10d0\u10e0\u10e9\u10d4\u10d5\u10d0",yell:"\u10d5\u10e7\u10d5\u10d8\u10e0\u10d8\u10d5\u10d0\u10e0",wink:"\u10d7\u10d5\u10d0\u10da\u10e1 \u10d2\u10d8\u10de\u10d0\u10ed\u10e3\u10dc\u10d4\u10d1",undecided:"\u10d5\u10d4\u10e0 \u10d2\u10d0\u10d3\u10d0\u10d5\u10ec\u10e7\u10d5\u10d8\u10e2\u10d4","tongue_out":"\u10d4\u10dc\u10d0\u10e1 \u10d2\u10d8\u10e7\u10dd\u10e4",surprised:"\u10d2\u10d0\u10db\u10d8\u10d9\u10d5\u10d8\u10e0\u10d3\u10d0",smile:"\u10d5\u10d8\u10e6\u10d8\u10db\u10d8",sealed:"\u10e1\u10d0\u10d8\u10d3\u10e3\u10db\u10da\u10dd \u10e9\u10d4\u10db\u10d7\u10d0\u10dc \u10d4\u10e0\u10d7\u10d0\u10d3 \u10db\u10dd\u10d9\u10d5\u10d3\u10d4\u10d1\u10d0","money_mouth":"\u10e4\u10e3\u10da\u10d8! \u10e4\u10e3\u10da\u10d8!",laughing:"\u10d2\u10e0\u10d4\u10e9\u10d8\u10ee\u10d0 \u10db\u10d0\u10d8\u10dc\u10ea \u10e0\u10d0 \u10d3\u10d4\u10d1\u10d8\u10da\u10d8\u10d0!",kiss:"\u10d2\u10d9\u10dd\u10ea\u10dc\u10d8",innocent:"\u10e3\u10db\u10d0\u10dc\u10d9\u10dd \u10d5\u10d0\u10e0",frown:"\u10d5\u10d8\u10e6\u10e0\u10e3\u10d1\u10da\u10d4\u10d1\u10d8","foot_in_mouth":"\u10e2\u10e4\u10e3\u10d8",embarassed:"\u10d2\u10d0\u10d5\u10ec\u10d8\u10d7\u10da\u10d3\u10d8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/kl_dlg.js
new file mode 100644
index 000000000..f359dac9f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/km_dlg.js
new file mode 100644
index 000000000..7a3962e36
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.emotions_dlg',{cry:"\u1799\u17c6",cool:"\u179f\u17bf\u1784",desc:"\u179f\u1789\u17d2\u1789\u17b6\u17a2\u17b6\u179a\u1798\u17d2\u1798\u178e\u17cd",title:"\u1794\u1789\u17d2\u1785\u17bc\u179b\u179f\u1789\u17d2\u1789\u17b6\u17a2\u17b6\u179a\u1798\u17d2\u1798\u178e\u17cd",yell:"\u179f\u17d2\u179a\u17c2\u1780",wink:"\u1798\u17b7\u1785\u1797\u17d2\u1793\u17c2\u1780",undecided:"\u17a2\u179b\u17cb\u17a2\u17c2\u1780","tongue_out":"\u179b\u17c0\u1793\u17a2\u178e\u17d2\u178a\u17b6\u178f",surprised:"\u1797\u17d2\u1789\u17b6\u1780\u17cb\u1795\u17d2\u17a2\u17be\u179b",smile:"\u1789\u1789\u17b9\u1798",sealed:"\u1780\u17bb\u17c6\u1794\u17d2\u179a\u17b6\u1794\u17cb\u1782\u17c1","money_mouth":"\u1798\u17b6\u178f\u17cb\u179b\u17bb\u1799-\u1792\u17bc\u179a\u1792\u17b6\u179a",laughing:"\u179f\u17be\u1785",kiss:"\u1790\u17be\u1794",innocent:"\u1798\u17b7\u1793\u178a\u17b9\u1784\u17a2\u17d2\u179c\u17b8",frown:"\u1785\u1784\u1785\u17b7\u1789\u17d2\u1785\u17be\u1798","foot_in_mouth":"\u179a\u17a2\u17c0\u179f\u1781\u17d2\u179b\u17bd\u1793",embarassed:"\u1781\u17d2\u1798\u17b6\u179f\u17a2\u17c0\u1793",usage:"\u1794\u17d2\u179a\u17be\u179f\u1789\u17d2\u1789\u17b6\u1796\u17d2\u179a\u17bd\u1789\u179f\u17d2\u178a\u17b6\u17c6 \u1793\u17b7\u1784\u1786\u17d2\u179c\u17c1\u1784\u178a\u17be\u1798\u17d2\u1794\u17b8\u1793\u17b6\u17c6\u1791\u17b7\u179f\u00a0\u17d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ko_dlg.js
new file mode 100644
index 000000000..ac481fcfd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.emotions_dlg',{cry:"\uc6b8\uc74c",cool:"\ucfe8\ud568",desc:"\uc774\ubaa8\ud2f0\ucf58",title:"\uc774\ubaa8\ud2f0\ucf58 \uc0bd\uc785",yell:"\uace0\ud568",wink:"\uc719\ud06c",undecided:"\uace0\ubbfc","tongue_out":"\uba54\ub871",surprised:"\ub180\ub78c",smile:"\ubbf8\uc18c",sealed:"\ubd09\uc778","money_mouth":"\ub3c8",laughing:"\uc6c3\uc74c",kiss:"\ud0a4\uc2a4",innocent:"\uc21c\uc9c4",frown:"\ucc21\uadf8\ub9b0 \uc5bc\uad74","foot_in_mouth":"\uc2e4\uc5b8",embarassed:"\ubd80\ub044\ub7ec\uc6c0",usage:"\uc88c\uc6b0 \ud654\uc0b4\ud45c\ub97c \uc0ac\uc6a9\ud574 \uc120\ud0dd\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/kz_dlg.js
new file mode 100644
index 000000000..a5e61bf30
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.emotions_dlg',{cry:"\u0416\u044b\u043b\u0430\u0443\u0434\u0430\u043c\u044b\u043d",cool:"\u041c\u044b\u049b\u0442\u044b\u043c\u044b\u043d",desc:"\u0421\u043c\u0430\u0439\u043b\u0434\u0430\u0440",title:"\u0421\u043c\u0430\u0439\u043b\u0434\u044b \u0442\u0430\u04a3\u0434\u0430\u0443",yell:"\u0410\u0439\u049b\u0430\u0439\u043b\u0430\u0443\u0434\u0430\u043c\u044b\u043d",undecided:"\u0428\u0435\u0448\u0456\u043c \u049b\u0430\u0431\u044b\u043b\u0434\u0430\u0439 \u0430\u043b\u043c\u0430\u0443\u0434\u0430\u043c\u044b\u043d",surprised:"\u0422\u0430\u04a3 \u049b\u0430\u043b\u0443\u0434\u0430\u043c\u044b\u043d",smile:"\u0416\u044b\u043c\u0438\u044e\u0434\u0430\u043c\u044b\u043d",sealed:"\u04ae\u043d\u0441\u0456\u0437\u0434\u0456\u043a\u0442\u0435\u043c\u0456\u043d","money_mouth":"\u0410\u049b\u0448\u0430",laughing:"\u041a\u04af\u043b\u0443\u0434\u0435\u043c\u0456\u043d",innocent:"\u041f\u0435\u0440\u0456\u0448\u0442\u0435",embarassed:"\u049a\u044b\u0437\u0430\u0440\u0443\u0434\u0430\u043c\u044b\u043d",usage:"\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u04af\u0448\u0456\u043d \"\u041e\u04a3\u0493\u0430\" \u0436\u04d9\u043d\u0435 \"\u0421\u043e\u043b\u0493\u0430\" \u043f\u0435\u0440\u043d\u0435\u043b\u0435\u0440\u0456\u043d \u049b\u043e\u043b\u0434\u0430\u043d\u044b\u04a3\u044b\u0437",wink:"Wink","tongue_out":"Tongue Out",kiss:"Kiss",frown:"Frown","foot_in_mouth":"Foot in Mouth"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lb_dlg.js
new file mode 100644
index 000000000..009fe755f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.emotions_dlg',{cry:"Kr\u00e4ischend",cool:"Cool",desc:"Smileyen",title:"Smiley af\u00fcgen",yell:"Br\u00ebllend",wink:"Zwinkernd",undecided:"Onentschloss","tongue_out":"Zong eraus",surprised:"Iwwerrascht",smile:"Laachend",sealed:"Verschlossen","money_mouth":"Suen",laughing:"Laachend",kiss:"Kussend",innocent:"Onsch\u00eblleg",frown:"D\'Stir ronzelend","foot_in_mouth":"Eragefall",embarassed:"Gen\u00e9iert"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lt_dlg.js
new file mode 100644
index 000000000..d1d4006ea
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.emotions_dlg',{cry:"Verksmas",cool:"J\u0117ga",desc:"Jaustukai",title:"\u012eterpti jaustuk\u0105",yell:"Klyksmas",wink:"Mirk\u010diojimas",undecided:"Neapsisprend\u0119s","tongue_out":"I\u0161ki\u0161tas lie\u017euvis",surprised:"Nusteb\u0119s",smile:"\u0160ypsena",sealed:"Sandarus","money_mouth":"Piniginga burna",laughing:"Juokimasis",kiss:"Bu\u010dinys",innocent:"Nekaltas",frown:"Susirauk\u0119s","foot_in_mouth":"Koja burnoje",embarassed:"Susig\u0117d\u0119s",usage:"Naudokite kair\u0117s ir de\u0161in\u0117s rodykles norint nar\u0161yti."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lv_dlg.js
new file mode 100644
index 000000000..dbd57d1fa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.emotions_dlg',{cry:"Raudul\u012bgais",cool:"V\u0113sais",desc:"Smaidi\u0146i",title:"Ievietot smaidi\u0146u",yell:"Kliedzo\u0161s",wink:"Aci miedzo\u0161s",undecided:"Neizl\u0113m\u012bgs","tongue_out":"M\u0113d\u012bgs",surprised:"P\u0101rsteigts",smile:"Smaid\u012bgs",sealed:"Nosl\u0113gts","money_mouth":"Naudmutis",laughing:"Smejo\u0161s",kiss:"Sk\u016bpsts",innocent:"Nevain\u012bgs",frown:"Satraukts","foot_in_mouth":"K\u0101jmutis",embarassed:"Nokautr\u0113jies",usage:"Izmantojiet kreis\u0101s un lab\u0101s puses r\u0101d\u012bt\u0101jus, ja v\u0113laties p\u0101rl\u016bkot"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/mk_dlg.js
new file mode 100644
index 000000000..52fce732c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.emotions_dlg',{cry:"\u041f\u043b\u0430\u0447\u0435\u045a\u0435",cool:"\u0424\u0440\u0430\u0435\u0440",desc:"\u0415\u043c\u043e\u0446\u0438\u0438",title:"\u0412\u043c\u0435\u0442\u043d\u0438 \u0435\u043c\u043e\u0446\u0438\u0438",yell:"\u0412\u0438\u043a\u0430\u045a\u0435",wink:"\u041d\u0430\u043c\u0438\u0433\u043d\u0443\u0432\u0430\u045a\u0435",undecided:"\u041d\u0435\u043e\u0434\u043b\u0443\u0447\u0435\u043d","tongue_out":"\u041f\u043b\u0430\u0437\u0435\u045a\u0435",surprised:"Iznena\u0111en",smile:"\u041e\u0441\u043c\u0435\u0445",sealed:"\u040c\u0443\u0442\u0435\u045a\u0435","money_mouth":"\u0423\u0441\u0442\u0430 \u0441\u043e \u043f\u0430\u0440\u0438",laughing:"\u0421\u043c\u0435\u0435\u045a\u0435",kiss:"\u0411\u0430\u043b\u043d\u0435\u0436",innocent:"\u041d\u0435\u0432\u0438\u043d\u0430\u0448\u0447\u0435",frown:"\u0421\u0435 \u043c\u0443\u0440\u0442\u0438","foot_in_mouth":"\u0425\u0440\u0430\u043d\u0430 \u0432\u043e \u0443\u0441\u0442\u0430",embarassed:"\u0417\u0430\u0441\u0440\u0430\u043c\u0435\u043d",usage:"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 \u043b\u0435\u0432\u0430 \u0438 \u0434\u0435\u0441\u043d\u0430 \u0441\u0442\u0440\u0435\u043b\u043a\u0430 \u0437\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0458\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ml_dlg.js
new file mode 100644
index 000000000..6e73928ee
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/mn_dlg.js
new file mode 100644
index 000000000..c8270565f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.emotions_dlg',{cry:"\u0423\u0439\u043b\u0430\u0445",cool:"\u0414\u043e\u0440\u0438\u0443\u043d",desc:"\u0421\u044d\u0442\u0433\u044d\u043b \u0445\u04e9\u0434\u043b\u04e9\u043b",title:"\u0421\u044d\u0442\u0433\u044d\u043b \u0445\u04e9\u0434\u043b\u04e9\u043b \u043e\u0440\u0443\u0443\u043b\u0430\u0445",yell:"\u041e\u0440\u0438\u043b\u043e\u0445",wink:"\u041d\u04af\u0434 \u0438\u0440\u043c\u044d\u0445",undecided:"\u0428\u0438\u0439\u0434\u044d\u044d\u0433\u04af\u0439","tongue_out":"\u0425\u044d\u043b\u044d\u044d \u0433\u0430\u0440\u0433\u0430\u0445",surprised:"\u0413\u0430\u0439\u0445\u0441\u0430\u043d",smile:"\u0418\u043d\u044d\u044d\u0445",sealed:"\u0411\u0438\u0442\u04af\u04af\u043c\u0436\u0438\u043b\u0441\u044d\u043d","money_mouth":"\u041c\u04e9\u043d\u0433\u04e9",laughing:"\u0418\u043d\u044d\u044d\u0445",kiss:"\u04ae\u043d\u0441\u044d\u0445",innocent:"\u0411\u0443\u0440\u0443\u0443\u0433\u04af\u0439",frown:"\u0425\u04e9\u043c\u0441\u04e9\u0433 \u0437\u0430\u043d\u0433\u0438\u0434\u0430\u0445","foot_in_mouth":"\u0425\u0443\u0443\u0440\u0442\u0430\u0433\u0434\u0430\u0445",embarassed:"\u0421\u0430\u043d\u0434\u0430\u0440\u0441\u0430\u043d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ms_dlg.js
new file mode 100644
index 000000000..fd03f6aef
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.emotions_dlg',{cry:"Menangis",cool:"Tampan",desc:"Simbol Emosi",title:"Masukkan emosi",yell:"Menguap",wink:"Kenyit",undecided:"Tak pasti","tongue_out":"Jelir lidah",surprised:"Terkejut",smile:"Senyum",sealed:"Kacip","money_mouth":"Duit mulut",laughing:"Gelak",kiss:"Cium",innocent:"Tidak bersalah",frown:"Mengerut","foot_in_mouth":"Kaki dalam mulut",embarassed:"Malu"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/my_dlg.js
new file mode 100644
index 000000000..1f4c08568
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.emotions_dlg',{cry:"\u1004\u102d\u102f\u101c\u102d\u102f\u1000\u103a\u1019\u101a\u103a",cool:"\u1019\u102d\u102f\u1000\u103a\u1010\u101a\u103a",desc:"\u1005\u102d\u1010\u103a\u1001\u1036\u1005\u102c\u1038\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038",title:"\u1005\u102d\u1010\u103a\u1001\u1036\u1005\u102c\u1038\u1001\u103b\u1000\u103a \u1011\u100a\u103a\u1037\u1015\u102b",yell:"\u1031\u1021\u102c\u103a\u101f\u1005\u103a",wink:"\u1019\u103b\u1000\u103a\u1005\u102d\u1010\u1005\u103a\u1016\u1000\u103a\u1019\u103e\u102d\u1010\u103a\u103c\u1015",undecided:"\u1019\u1006\u1036\u102f\u1038\u103c\u1016\u1010\u103a\u1010\u1010\u103a\u1018\u1030\u1038","tongue_out":"\u101c\u103e\u103b\u102c\u1011\u102f\u1010\u103a\u103c\u1015",surprised:"\u1021\u1036\u1037\u1029\u1010\u101a\u103a",smile:"\u103c\u1015\u1036\u102f\u1038\u1010\u102f\u1036\u1037\u1010\u1036\u102f\u1037",sealed:"\u1014\u103e\u102f\u1010\u103a\u1015\u102d\u1010\u103a\u1011\u102c\u1038","money_mouth":"\u1031\u101b\u103d\u103e\u1015\u102b\u1038\u1005\u1015\u103a \u1031\u1004\u103d\u1015\u102b\u1038\u1005\u1015\u103a",laughing:"\u1021\u102c\u1038\u101b\u1015\u102b\u1038\u101b \u101b\u101a\u103a\u101c\u102d\u102f\u1000\u103a\u1019\u101a\u103a",kiss:"\u1031\u1019\u103d\u103e\u1038\u1031\u1019\u103d\u103e\u1038\u1031\u1015\u1038\u101c\u102d\u102f\u1000\u103a\u1019\u101a\u103a",innocent:"\u1021\u103c\u1015\u1005\u103a\u1000\u1004\u103a\u1038\u101e\u1030\u1015\u102b",frown:"\u1019\u103b\u1000\u103a\u1031\u1019\u103e\u102c\u1004\u103a\u1000\u103b\u1036\u102f\u1037","foot_in_mouth":"\u1014\u102c\u1038\u1014\u1032\u1037\u1019\u1014\u102c \u1016\u101d\u102b\u1038\u1014\u1032\u1037\u1014\u102c\u1015\u102b",embarassed:"\u101b\u103e\u1000\u103a\u101c\u102d\u102f\u1000\u103a\u1010\u102c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nb_dlg.js
new file mode 100644
index 000000000..24757d24a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.emotions_dlg',{cry:"Gr\u00e5ter",cool:"Kul",desc:"Hum\u00f8rfjes",title:"Sett inn hum\u00f8rfjes",yell:"Rope",wink:"Blunke",undecided:"Skeptisk","tongue_out":"Rekke tunge",surprised:"Overrasket",smile:"Smile",sealed:"Hemmelig","money_mouth":"Penger i munnen",laughing:"Ler",kiss:"Kyss",innocent:"Uskyldig",frown:"Skuffet","foot_in_mouth":"Fot i munnen",embarassed:"Flau",usage:"Bruk venstre og h\u00f8yre piltast for \u00e5 navigere."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nl_dlg.js
new file mode 100644
index 000000000..0e7d7babb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.emotions_dlg',{cry:"Huilen",cool:"Stoer",desc:"Emoties",title:"Emotie invoegen",yell:"Roepen",wink:"Knipogen",undecided:"Onbeslist","tongue_out":"Tong uitsteken",surprised:"Verrast",smile:"Lachen",sealed:"Afgesloten","money_mouth":"Hebberig",laughing:"Lachen",kiss:"Zoenen",innocent:"Onschuldig",frown:"Wenkbrauw ophalen","foot_in_mouth":"Verstomd",embarassed:"Schamen",usage:"Gebruik linker en rechter pijltjestoetsen om te navigeren."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nn_dlg.js
new file mode 100644
index 000000000..17ad594c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.emotions_dlg',{cry:"Gret",cool:"Cool",desc:"Hum\u00f8rfjes",title:"Set inn hum\u00f8rfjes",yell:"Skri",wink:"Blunke",undecided:"Skeptisk","tongue_out":"Rekkje tunge",surprised:"Overraska",smile:"Glad",sealed:"Hemmeleg","money_mouth":"Pengar i munnen",laughing:"Ler",kiss:"Kyss",innocent:"Uskyldig",frown:"Skuffa","foot_in_mouth":"Fot i munnen",embarassed:"Flau",usage:"Bruk venstre og h\u00f8gre piltast for \u00e5 navigere"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/no_dlg.js
new file mode 100644
index 000000000..66973a807
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.emotions_dlg',{cry:"Griner",cool:"Cool",desc:"Hum\u00f8rfjes",title:"Sett inn hum\u00f8rfjes",yell:"Skrik",wink:"Blunke",undecided:"Skeptisk","tongue_out":"Rekke tunge",surprised:"Overrasket",smile:"Smil",sealed:"Lukket","money_mouth":"Penger i munnen",laughing:"Ler",kiss:"Kyss",innocent:"Uskyldig",frown:"Skummer","foot_in_mouth":"Fot i munnen",embarassed:"Flau",usage:"Bruk h\u00f8yre og venstre piler for \u00e5 velge."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/pl_dlg.js
new file mode 100644
index 000000000..4e676926b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.emotions_dlg',{cry:"P\u0142acz",cool:"Wyluzowany",desc:"Emotikony",title:"Wstaw emotikon\u0119",yell:"Krzyk",wink:"Mrugni\u0119cie",undecided:"Niezdecydowany","tongue_out":"Wystawiony j\u0119zyk",surprised:"Zaskoczony",smile:"U\u015bmiech",sealed:"Zaklepany","money_mouth":"Zaanga\u017cowany",laughing:"\u015amiech",kiss:"Poca\u0142unek",innocent:"Niewinny",frown:"Dezaprobata","foot_in_mouth":"Niewyparzona g\u0119ba",embarassed:"Zmieszany",usage:"U\u017cywaj strza\u0142ek w lewo i w prawo do nawigacji."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ps_dlg.js
new file mode 100644
index 000000000..f8340f3d2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/pt_dlg.js
new file mode 100644
index 000000000..220959478
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.emotions_dlg',{cry:"Chor\u00e3o",cool:"Fixe",desc:"Emoticons",title:"Inserir emoticon",yell:"Irado",wink:"Piscadela",undecided:"Indeciso","tongue_out":"L\u00edngua de fora",surprised:"Surpresa",smile:"Sorriso",sealed:"Boca Fechada","money_mouth":"Avarez",laughing:"Riso",kiss:"Beijo",innocent:"Inocente",frown:"Decep\u00e7\u00e3o","foot_in_mouth":"Disse asneira",embarassed:"Embara\u00e7ado",usage:"Use as setas esquerda e direita para navegar."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ro_dlg.js
new file mode 100644
index 000000000..ca0aa34bb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.emotions_dlg',{cry:"Trist",cool:"Cool",desc:"Figurine emotive",title:"Insereaz\u0103 o figurin\u0103",yell:"\u021aip\u0103",wink:"Face cu ochiul",undecided:"Indecis","tongue_out":"Cu limba afar\u0103",surprised:"Surprins",smile:"Z\u00e2mbet",sealed:"Sigilat","money_mouth":"Bani \u00een gur\u0103",laughing:"R\u00e2de",kiss:"Pupic",innocent:"Nevinovat",frown:"\u00cencruntat","foot_in_mouth":"Picior \u00een gur\u0103",embarassed:"Ru\u015finat",usage:"Folose\u0219te s\u0103ge\u021bile st\u00e2nga \u0219i dreapta pentru navigare."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ru_dlg.js
new file mode 100644
index 000000000..be9f3bca9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.emotions_dlg',{cry:"\u041f\u043b\u0430\u0447\u0443",cool:"\u041a\u0440\u0443\u0442\u043e\u0439",desc:"\u0421\u043c\u0430\u0439\u043b\u044b",title:"\u0412\u044b\u0431\u043e\u0440 \u0441\u043c\u0430\u0439\u043b\u0430",yell:"\u041a\u0440\u0438\u0447\u0443",wink:"\u041f\u043e\u0434\u043c\u0438\u0433\u0438\u0432\u0430\u044e",undecided:"\u0412 \u043d\u0435\u0440\u0435\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438","tongue_out":"\u0414\u0440\u0430\u0437\u043d\u044e\u0441\u044c",surprised:"\u0423\u0434\u0438\u0432\u043b\u044f\u044e\u0441\u044c",smile:"\u0423\u043b\u044b\u0431\u0430\u044e\u0441\u044c",sealed:"\u041d\u0435\u043c \u043a\u0430\u043a \u0440\u044b\u0431\u0430","money_mouth":"\u0414\u0435\u043d\u044c\u0433\u0438",laughing:"\u0421\u043c\u0435\u044e\u0441\u044c",kiss:"\u041f\u043e\u0446\u0435\u043b\u0443\u0439",innocent:"\u0410\u043d\u0433\u0435\u043b",frown:"\u0425\u043c\u0443\u0440\u044e\u0441\u044c","foot_in_mouth":"\u0412 \u0440\u043e\u0442 \u043c\u043d\u0435 \u043d\u043e\u0433\u0438",embarassed:"\u041a\u0440\u0430\u0441\u043d\u0435\u044e",usage:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \"\u0412\u043b\u0435\u0432\u043e\" \u0438 \"\u0412\u043f\u0440\u0430\u0432\u043e\" \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sc_dlg.js
new file mode 100644
index 000000000..b44e719b0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u51b7\u9177",desc:"\u56fe\u91ca",title:"\u63d2\u5165\u56fe\u91ca",yell:"\u53eb\u56b7",wink:"\u7728\u773c",undecided:"\u8003\u8651","tongue_out":"\u5410\u820c\u5934",surprised:"\u60ca\u5413",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c34\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/se_dlg.js
new file mode 100644
index 000000000..454923b8f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.emotions_dlg',{cry:"Gr\u00e5ter",cool:"Cool",desc:"Smileys",title:"Infoga smiley",yell:"Skrikandes",wink:"Fl\u00f6rt",undecided:"Obest\u00e4md","tongue_out":"Tungan ute",surprised:"F\u00f6rv\u00e5nad",smile:"Glad",sealed:"Tyst","money_mouth":"Guld i mun",laughing:"Skrattande",kiss:"Kyss",innocent:"Oskyldig",frown:"Rynkar p\u00e5 n\u00e4san","foot_in_mouth":"Foten i munnen",embarassed:"Sk\u00e4ms"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/si_dlg.js
new file mode 100644
index 000000000..cc41b2555
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sk_dlg.js
new file mode 100644
index 000000000..34187f357
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.emotions_dlg',{cry:"Pla\u010d\u00faci",cool:"\u00da\u017easn\u00fd",desc:"Emotikony",title:"Vlo\u017ei\u0165 emotikonu",yell:"Kri\u010diaci",wink:"\u017dmurkaj\u00faci",undecided:"Nerozhodn\u00fd","tongue_out":"S vyplazen\u00fdm jazykom",surprised:"Prekvapen\u00fd",smile:"Usmiaty",sealed:"Ml\u010diaci","money_mouth":"Je na prachy",laughing:"Smej\u00faci sa",kiss:"Bozkaj\u00faci",innocent:"Nevinn\u00fd",frown:"Zamra\u010den\u00fd","foot_in_mouth":"\u0160liapol ved\u013ea",embarassed:"Zahanben\u00fd",usage:"Pou\u017eite \u0161\u00edpky vpravo a v\u013eavo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sl_dlg.js
new file mode 100644
index 000000000..17879d28d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.emotions_dlg',{cry:"jok",cool:"kul",desc:"Sme\u0161ki",title:"Vstavi sme\u0161ka",yell:"krik",wink:"me\u017eik",undecided:"neodlo\u010den","tongue_out":"ka\u017ee jezik",surprised:"presene\u010den",smile:"nasmeh",sealed:"zape\u010dateno","money_mouth":"zlati kljun",laughing:"smeh",kiss:"poljub",innocent:"nedol\u017een",frown:"nagubano \u010delo","foot_in_mouth":"zare\u010deni kruh",embarassed:"v zadregi",usage:"Za navigacijo uporabite tipki levo in desno"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sq_dlg.js
new file mode 100644
index 000000000..5156819cf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.emotions_dlg',{cry:"Qaj",cool:"I/e lezetsh\u00ebm",desc:"Emocionet",title:"Fut emocion",yell:"B\u00ebrtit",wink:"Shkel syrin",undecided:"I/e pavendosur","tongue_out":"Gjuha jasht\u00eb",surprised:"I/e \u00e7uditur",smile:"Buz\u00ebqesh",sealed:"Dh\u00ebmb\u00ebt e mbyllur","money_mouth":"Lek\u00eb n\u00eb goj\u00eb",laughing:"Qesh",kiss:"Puth",innocent:"I/e pafajsh\u00ebm",frown:"Rrudh vetullat","foot_in_mouth":"K\u00ebmba n\u00eb goj\u00eb",embarassed:"Turp",usage:"P\u00ebrdorni butonat majtas dhe djathtas p\u00ebr navigim"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sr_dlg.js
new file mode 100644
index 000000000..4fa96ec5c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.emotions_dlg',{cry:"Pla\u010de",cool:"Kul",desc:"Smajli",title:"Umetni smajli",yell:"Vi\u010de",wink:"Namiguje",undecided:"Neodlu\u010dan","tongue_out":"Plazi se",surprised:"Iznena\u0111en",smile:"Osmehuje se",sealed:"\u0106uti kao zaliven","money_mouth":"Bogata\u0161",laughing:"Smeje se",kiss:"\u0160alje poljubac",innocent:"Nevina\u0161ce",frown:"Namr\u0161ten","foot_in_mouth":"Izletelo mu...",embarassed:"Posti\u0111en"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sv_dlg.js
new file mode 100644
index 000000000..c36ebee3d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.emotions_dlg',{cry:"Gr\u00e5ter",cool:"Cool",desc:"Smileys",title:"Infoga smiley",yell:"Skrikandes",wink:"Fl\u00f6rt",undecided:"Obest\u00e4md","tongue_out":"Tungan ute",surprised:"F\u00f6rv\u00e5nad",smile:"Glad",sealed:"Tyst","money_mouth":"Guld i mun",laughing:"Skrattande",kiss:"Kyss",innocent:"Oskyldig",frown:"Rynkar p\u00e5 n\u00e4san","foot_in_mouth":"Foten i munnen",embarassed:"Sk\u00e4ms",usage:"Anv\u00e4nd v\u00e4nster och h\u00f6ger pil f\u00f6r att navigera"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sy_dlg.js
new file mode 100644
index 000000000..0e1c57927
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.emotions_dlg',{cry:"\u0712\u071f\u0742\u071d\u072c\u0710",cool:"\u0723\u0718\u0715\u0722\u0710",desc:"\u0722\u0712\u0742\u0717\u0710",title:"\u0721\u0725\u0712\u0742\u072a \u0722\u0712\u0742\u0717\u0710",yell:"\u0721\u0729\u0718\u071a\u072c\u0710",wink:"\u0720\u0713\u0719\u0710",undecided:"\u0720\u0710 \u0726\u0723\u071d\u0729\u0718\u072c\u0710","tongue_out":"\u0720\u0721\u0722\u0710 \u0712\u072a\u071d\u0710",surprised:"\u0715\u0721\u072a\u0720\u0717",smile:"\u0712\u072a\u0723\u0721\u072c\u0710",sealed:"\u071a\u072c\u0721\u0710","money_mouth":"\u0726\u0718\u0721\u0710 \u0715\u0719\u0718\u0719\u0710",laughing:"\u0712\u071f\u071a\u071f\u0710",kiss:"\u0721\u0722\u072b\u0718\u0729\u072c\u0710",innocent:"\u0719\u071f\u071d\u0710",frown:"\u071f\u0721\u071d\u072a\u0718\u072c\u0710","foot_in_mouth":"\u0710\u0729\u0720\u0710 \u0713\u0718 \u0726\u0718\u0721\u0710",embarassed:"\u0722\u071f\u0742\u0726\u0720\u0717",usage:"\u0721\u0726\u0720\u071a \u0713\u0710\u072a\u0308\u0710 \u0723\u0721\u0720\u071d\u0308\u0710 \u0718 \u071d\u0721\u071d\u0722\u071d\u0308\u0710 \u0720\u0721\u0720\u071a\u0718\u072c\u0710"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ta_dlg.js
new file mode 100644
index 000000000..1842bb1e2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/te_dlg.js
new file mode 100644
index 000000000..507cd05dd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/th_dlg.js
new file mode 100644
index 000000000..6039d65d7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.emotions_dlg',{cry:"\u0e23\u0e49\u0e2d\u0e07\u0e44\u0e2b\u0e49",cool:"\u0e40\u0e08\u0e4b\u0e07",desc:"\u0e44\u0e2d\u0e04\u0e2d\u0e19\u0e41\u0e2a\u0e14\u0e07\u0e2d\u0e32\u0e23\u0e21\u0e13\u0e4c",title:"\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e44\u0e2d\u0e04\u0e2d\u0e19\u0e41\u0e2a\u0e14\u0e07\u0e2d\u0e32\u0e23\u0e21\u0e13\u0e4c",yell:"\u0e42\u0e27\u0e22\u0e27\u0e32\u0e22",wink:"\u0e02\u0e22\u0e34\u0e1a\u0e15\u0e32",undecided:"\u0e25\u0e31\u0e07\u0e40\u0e25","tongue_out":"\u0e41\u0e25\u0e1a\u0e25\u0e34\u0e49\u0e19",surprised:"\u0e1b\u0e23\u0e30\u0e2b\u0e25\u0e32\u0e14\u0e43\u0e08",smile:"Smile",sealed:"\u0e1b\u0e34\u0e14\u0e1b\u0e32\u0e01","money_mouth":"\u0e40\u0e07\u0e34\u0e19\u0e46\u0e46\u0e46",laughing:"\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e32\u0e30",kiss:"\u0e08\u0e39\u0e1a",innocent:"\u0e44\u0e23\u0e49\u0e40\u0e14\u0e35\u0e22\u0e07\u0e2a\u0e32",frown:"\u0e1a\u0e36\u0e49\u0e07\u0e15\u0e36\u0e07","foot_in_mouth":"\u0e1b\u0e34\u0e14\u0e1b\u0e32\u0e01",embarassed:"\u0e2d\u0e32\u0e22",usage:"\u0e43\u0e0a\u0e49\u0e25\u0e39\u0e01\u0e28\u0e23\u0e0b\u0e49\u0e32\u0e22\u0e41\u0e25\u0e30\u0e02\u0e27\u0e32\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e19\u0e33\u0e17\u0e32\u0e07"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tn_dlg.js
new file mode 100644
index 000000000..463d1cebf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tr_dlg.js
new file mode 100644
index 000000000..27491734e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.emotions_dlg',{cry:"A\u011flayan",cool:"Sakin",desc:"\u0130fadeler",title:"\u0130fade ekle",yell:"Ba\u011f\u0131rma",wink:"G\u00f6z k\u0131rpma",undecided:"Karars\u0131z","tongue_out":"Dil \u00e7\u0131karma",surprised:"\u015ea\u015f\u0131rma",smile:"G\u00fcl\u00fcmseme",sealed:"Gizli","money_mouth":"Para g\u00f6z",laughing:"Kahkaha",kiss:"\u00d6p\u00fcc\u00fck",innocent:"Masum",frown:"As\u0131k","foot_in_mouth":"Pot k\u0131rm\u0131\u015f",embarassed:"Utanga\u00e7",usage:"Gezinmek i\u00e7in sa\u011f ve sol oklar\u0131 kullan\u0131n."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tt_dlg.js
new file mode 100644
index 000000000..39127b064
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u51b7\u9177",desc:"\u8868\u60c5\u5217\u8868",title:"\u63d2\u5165\u8868\u60c5",yell:"\u53eb\u56b7",wink:"\u7728\u773c",undecided:"\u601d\u8003","tongue_out":"\u5410\u820c\u982d",surprised:"\u9a5a\u5687",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u767c\u8ca1",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76ba\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c37\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tw_dlg.js
new file mode 100644
index 000000000..49a9319cf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u9177",desc:"\u8868\u60c5\u5217\u8868",title:"\u63d2\u5165\u8868\u60c5",yell:"\u5927\u53eb",wink:"\u7728\u773c",undecided:"\u601d\u8003","tongue_out":"\u5410\u820c\u982d",surprised:"\u9a5a\u8a1d",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u767c\u8ca1",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76ba\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c37\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/uk_dlg.js
new file mode 100644
index 000000000..8798e9eca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.emotions_dlg',{cry:"\u041f\u043b\u0430\u0447",cool:"Cool",desc:"\u041f\u043e\u0441\u043c\u0456\u0448\u043a\u0438",title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u043c\u0456\u0448\u043a\u0443",yell:"\u0417\u043e\u0439\u043a",wink:"\u041f\u0456\u0434\u043c\u043e\u0440\u0433\u0443\u0454",undecided:"\u041d\u0435\u0440\u0456\u0448\u0443\u0447\u0456\u0441\u0442\u044c","tongue_out":"\u041f\u043e\u043a\u0430\u0437\u0443\u0454 \u044f\u0437\u0438\u043a\u0430",surprised:"\u0417\u0434\u0438\u0432\u043e\u0432\u0430\u043d\u0456\u0441\u0442\u044c",smile:"\u041f\u043e\u0441\u043c\u0456\u0448\u043a\u0430",sealed:"Sealed","money_mouth":"\u0413\u0440\u043e\u0449\u0456 \u0432 \u0440\u043e\u0442\u0456",laughing:"\u0421\u043c\u0456\u0445",kiss:"\u041f\u043e\u0446\u0456\u043b\u0443\u043d\u043e\u043a",innocent:"\u041d\u0435\u0432\u0438\u043d\u043d\u0456\u0441\u0442\u044c",frown:"\u041d\u0430\u0441\u0443\u043f\u043b\u0435\u043d\u043d\u0456\u0441\u0442\u044c","foot_in_mouth":"\u041d\u043e\u0433\u0430 \u0432 \u0440\u043e\u0442\u0456",embarassed:"\u0417\u0431\u0435\u043d\u0442\u0435\u0436\u0435\u043d\u043d\u044f",usage:"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0456\u043b\u043a\u0438 \u0432\u043b\u0456\u0432\u043e \u0442\u0430 \u0432\u043f\u0440\u0430\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u0457"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ur_dlg.js
new file mode 100644
index 000000000..65020d0b9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/vi_dlg.js
new file mode 100644
index 000000000..b77323ca7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.emotions_dlg',{cry:"Kh\u00f3c",cool:"Kh\u00f4ng bi\u1ebft ng\u01b0\u1ee3ng",desc:"Bi\u1ec3u T\u01b0\u1ee3ng C\u1ea3m X\u00fac",title:"Bi\u1ec3u T\u01b0\u1ee3ng C\u1ea3m X\u00fac",yell:"La h\u00e9t",wink:"Nh\u00e1y m\u1eaft",undecided:"L\u01b0\u1ee1ng l\u1ef1","tongue_out":"L\u00e8 l\u01b0\u1ee1i",surprised:"Ng\u1ea1c nhi\u00ean",smile:"M\u1ec9m c\u01b0\u1eddi",sealed:"K\u00edn mi\u1ec7ng","money_mouth":"S\u00e1ng m\u1eaft v\u00ec $",laughing:"C\u01b0\u1eddi nh\u0103n r\u0103ng",kiss:"N\u1ee5 h\u00f4n",innocent:"Ng\u00e2y th\u01a1",frown:"Cau m\u00e0y","foot_in_mouth":"L\u1ee1 l\u1eddi",embarassed:"X\u1ea5u h\u1ed5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..1dece2ce2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.emotions_dlg',{cry:"\u54ed",cool:"\u9177",desc:"\u8868\u60c5",title:"\u63d2\u5165\u8868\u60c5",yell:"\u53eb\u558a",wink:"\u7728\u773c",undecided:"\u72b9\u8c6b","tongue_out":"\u5410\u820c\u5934",surprised:"\u60ca\u8bb6",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u8822\u8bdd",embarassed:"\u5c34\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..4b670b0f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.emotions_dlg',{cry:"\u597d\u60f3\u54ed",cool:"\u9177\u554a\uff01",desc:"\u8868\u60c5",title:"\u4f7f\u7528\u8868\u60c5\u7b26\u865f",yell:"\u554a\u554a\u554a\u554a\uff01",wink:"Wink\uff01",undecided:"\u597d\u7336\u8c6b","tongue_out":"\u5566~",surprised:"\u7d66\u4f60\u4e00\u500b\u9a5a\u559c\uff01",smile:"\u5fae\u7b11",sealed:"(\u4e0d\u80fd\u8aaa)","money_mouth":"\u9322\u9322\u9322",laughing:"\u54c8\u54c8",kiss:"\u89aa\u4e00\u500b",innocent:"\u88dd\u7121\u8f9c",frown:"\u7709\u982d\u6df1\u9396","foot_in_mouth":"\u5931\u8a00",embarassed:"\u597d\u5c37\u5c2c\u2026"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh_dlg.js
new file mode 100644
index 000000000..a50e3e3cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u9177",desc:"\u8868\u60c5\u5217\u8868",title:"\u63d2\u5165\u8868\u60c5",yell:"\u5927\u53eb",wink:"\u7728\u773c",undecided:"\u601d\u8003","tongue_out":"\u5410\u820c\u982d",surprised:"\u9a5a\u8a1d",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u767c\u8ca1",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76ba\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c37\u5c2c",usage:"\u4f7f\u7528\u5de6\u53f3\u65b9\u5411\u9375\u5207\u63db\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zu_dlg.js
new file mode 100644
index 000000000..c0386564a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/emotions/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u51b7\u9177",desc:"\u56fe\u91ca",title:"\u63d2\u5165\u56fe\u91ca",yell:"\u53eb\u56b7",wink:"\u7728\u773c",undecided:"\u8003\u8651","tongue_out":"\u5410\u820c\u5934",surprised:"\u60ca\u5413",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c34\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm
new file mode 100644
index 000000000..50b2b3445
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/dialog.htm
@@ -0,0 +1,22 @@
+<!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>{#example_dlg.title}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/dialog.js"></script>
+</head>
+<body>
+
+<form onsubmit="ExampleDialog.insert();return false;" action="#">
+ <p>Here is a example dialog.</p>
+ <p>Selected text: <input id="someval" name="someval" type="text" class="text" /></p>
+ <p>Custom arg: <input id="somearg" name="somearg" type="text" class="text" /></p>
+
+ <div class="mceActionPanel">
+ <input type="button" id="insert" name="insert" value="{#insert}" onclick="ExampleDialog.insert();" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js
new file mode 100644
index 000000000..ec1f81ea4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js
new file mode 100644
index 000000000..9a0e7da15
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/editor_plugin_src.js
@@ -0,0 +1,84 @@
+/**
+ * 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() {
+ // Load plugin specific language pack
+ tinymce.PluginManager.requireLangPack('example');
+
+ tinymce.create('tinymce.plugins.ExamplePlugin', {
+ /**
+ * 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) {
+ // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
+ ed.addCommand('mceExample', function() {
+ ed.windowManager.open({
+ file : url + '/dialog.htm',
+ width : 320 + parseInt(ed.getLang('example.delta_width', 0)),
+ height : 120 + parseInt(ed.getLang('example.delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url, // Plugin absolute URL
+ some_custom_arg : 'custom arg' // Custom argument
+ });
+ });
+
+ // Register example button
+ ed.addButton('example', {
+ title : 'example.desc',
+ cmd : 'mceExample',
+ image : url + '/img/example.gif'
+ });
+
+ // Add a node change handler, selects the button in the UI when a image is selected
+ ed.onNodeChange.add(function(ed, cm, n) {
+ cm.setActive('example', n.nodeName == 'IMG');
+ });
+ },
+
+ /**
+ * Creates control instances based in the incomming name. This method is normally not
+ * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons
+ * but you sometimes need to create more complex controls like listboxes, split buttons etc then this
+ * method can be used to create those.
+ *
+ * @param {String} n Name of the control to create.
+ * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.
+ * @return {tinymce.ui.Control} New control instance or null if no control was created.
+ */
+ createControl : function(n, cm) {
+ return null;
+ },
+
+ /**
+ * 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 plugin',
+ author : 'Some author',
+ authorurl : 'http://tinymce.moxiecode.com',
+ infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',
+ version : "1.0"
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/img/example.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/img/example.gif
new file mode 100644
index 000000000..1ab5da446
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/img/example.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js
new file mode 100644
index 000000000..fa8341132
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/js/dialog.js
@@ -0,0 +1,19 @@
+tinyMCEPopup.requireLangPack();
+
+var ExampleDialog = {
+ init : function() {
+ var f = document.forms[0];
+
+ // Get the selected contents as text and place it in the input
+ f.someval.value = tinyMCEPopup.editor.selection.getContent({format : 'text'});
+ f.somearg.value = tinyMCEPopup.getWindowArg('some_custom_arg');
+ },
+
+ insert : function() {
+ // Insert the contents from the input into the document
+ tinyMCEPopup.editor.execCommand('mceInsertContent', false, document.forms[0].someval.value);
+ tinyMCEPopup.close();
+ }
+};
+
+tinyMCEPopup.onInit.add(ExampleDialog.init, ExampleDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/langs/en.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/langs/en.js
new file mode 100644
index 000000000..e0784f80f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/langs/en.js
@@ -0,0 +1,3 @@
+tinyMCE.addI18n('en.example',{
+ desc : 'This is just a template button'
+});
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js
new file mode 100644
index 000000000..ebcf948da
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example/langs/en_dlg.js
@@ -0,0 +1,3 @@
+tinyMCE.addI18n('en.example_dlg',{
+ title : 'This is just a example title'
+});
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin.js
new file mode 100644
index 000000000..0a4551d38
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js
new file mode 100644
index 000000000..e1c55e41b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/example_dependency/editor_plugin_src.js
@@ -0,0 +1,50 @@
+/**
+ * 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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css
new file mode 100644
index 000000000..2675cec15
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/css/fullpage.css
@@ -0,0 +1,143 @@
+/* Hide the advanced tab */
+#advanced_tab {
+ display: none;
+}
+
+#metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright {
+ width: 280px;
+}
+
+#doctype, #docencoding {
+ width: 200px;
+}
+
+#langcode {
+ width: 30px;
+}
+
+#bgimage {
+ width: 220px;
+}
+
+#fontface {
+ width: 240px;
+}
+
+#leftmargin, #rightmargin, #topmargin, #bottommargin {
+ width: 50px;
+}
+
+.panel_wrapper div.current {
+ height: 400px;
+}
+
+#stylesheet, #style {
+ width: 240px;
+}
+
+#doctypes {
+ width: 200px;
+}
+
+/* Head list classes */
+
+.headlistwrapper {
+ width: 100%;
+}
+
+.selected {
+ border: 1px solid #0A246A;
+ background-color: #B6BDD2;
+}
+
+.toolbar {
+ width: 100%;
+}
+
+#headlist {
+ width: 100%;
+ margin-top: 3px;
+ font-size: 11px;
+}
+
+#info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element {
+ display: none;
+}
+
+#addmenu {
+ position: absolute;
+ border: 1px solid gray;
+ display: none;
+ z-index: 100;
+ background-color: white;
+}
+
+#addmenu a {
+ display: block;
+ width: 100%;
+ line-height: 20px;
+ text-decoration: none;
+ background-color: white;
+}
+
+#addmenu a:hover {
+ background-color: #B6BDD2;
+ color: black;
+}
+
+#addmenu span {
+ padding-left: 10px;
+ padding-right: 10px;
+}
+
+#updateElementPanel {
+ display: none;
+}
+
+#script_element .panel_wrapper div.current {
+ height: 108px;
+}
+
+#style_element .panel_wrapper div.current {
+ height: 108px;
+}
+
+#link_element .panel_wrapper div.current {
+ height: 140px;
+}
+
+#element_script_value {
+ width: 100%;
+ height: 100px;
+}
+
+#element_comment_value {
+ width: 100%;
+ height: 120px;
+}
+
+#element_style_value {
+ width: 100%;
+ height: 100px;
+}
+
+#element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title {
+ width: 250px;
+}
+
+.updateElementButton {
+ margin-top: 3px;
+}
+
+/* MSIE specific styles */
+
+* html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton {
+ width: 22px;
+ height: 22px;
+}
+
+textarea {
+ height: 55px;
+}
+
+.panel_wrapper div.current {height:420px;} \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js
new file mode 100644
index 000000000..dcf76024d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin.js
@@ -0,0 +1 @@
+(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")||""})}e.remove("fullpage_styles");if(l){e.add(m.editor.getDoc().getElementsByTagName("head")[0],"style",{id:"fullpage_styles"},l);j=e.get("fullpage_styles");if(j.styleSheet){j.styleSheet.cssText=l}}},_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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js
new file mode 100644
index 000000000..23de7c5a1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/editor_plugin_src.js
@@ -0,0 +1,405 @@
+/**
+ * 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() {
+ var each = tinymce.each, Node = tinymce.html.Node;
+
+ tinymce.create('tinymce.plugins.FullPagePlugin', {
+ init : function(ed, url) {
+ var t = this;
+
+ t.editor = ed;
+
+ // Register commands
+ ed.addCommand('mceFullPageProperties', function() {
+ ed.windowManager.open({
+ file : url + '/fullpage.htm',
+ width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)),
+ height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url,
+ data : t._htmlToData()
+ });
+ });
+
+ // Register buttons
+ ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'});
+
+ ed.onBeforeSetContent.add(t._setContent, t);
+ ed.onGetContent.add(t._getContent, t);
+ },
+
+ 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
+ };
+ },
+
+ // Private plugin internal methods
+
+ _htmlToData : function() {
+ var headerFragment = this._parseHeader(), data = {}, nodes, elm, matches, editor = this.editor;
+
+ function getAttr(elm, name) {
+ var value = elm.attr(name);
+
+ return value || '';
+ };
+
+ // Default some values
+ data.fontface = editor.getParam("fullpage_default_fontface", "");
+ data.fontsize = editor.getParam("fullpage_default_fontsize", "");
+
+ // Parse XML PI
+ elm = headerFragment.firstChild;
+ if (elm.type == 7) {
+ data.xml_pi = true;
+ matches = /encoding="([^"]+)"/.exec(elm.value);
+ if (matches)
+ data.docencoding = matches[1];
+ }
+
+ // Parse doctype
+ elm = headerFragment.getAll('#doctype')[0];
+ if (elm)
+ data.doctype = '<!DOCTYPE' + elm.value + ">";
+
+ // Parse title element
+ elm = headerFragment.getAll('title')[0];
+ if (elm && elm.firstChild) {
+ data.metatitle = elm.firstChild.value;
+ }
+
+ // Parse meta elements
+ each(headerFragment.getAll('meta'), function(meta) {
+ var name = meta.attr('name'), httpEquiv = meta.attr('http-equiv'), matches;
+
+ if (name)
+ data['meta' + name.toLowerCase()] = meta.attr('content');
+ else if (httpEquiv == "Content-Type") {
+ matches = /charset\s*=\s*(.*)\s*/gi.exec(meta.attr('content'));
+
+ if (matches)
+ data.docencoding = matches[1];
+ }
+ });
+
+ // Parse html attribs
+ elm = headerFragment.getAll('html')[0];
+ if (elm)
+ data.langcode = getAttr(elm, 'lang') || getAttr(elm, 'xml:lang');
+
+ // Parse stylesheet
+ elm = headerFragment.getAll('link')[0];
+ if (elm && elm.attr('rel') == 'stylesheet')
+ data.stylesheet = elm.attr('href');
+
+ // Parse body parts
+ elm = headerFragment.getAll('body')[0];
+ if (elm) {
+ data.langdir = getAttr(elm, 'dir');
+ data.style = getAttr(elm, 'style');
+ data.visited_color = getAttr(elm, 'vlink');
+ data.link_color = getAttr(elm, 'link');
+ data.active_color = getAttr(elm, 'alink');
+ }
+
+ return data;
+ },
+
+ _dataToHtml : function(data) {
+ var headerFragment, headElement, html, elm, value, dom = this.editor.dom;
+
+ function setAttr(elm, name, value) {
+ elm.attr(name, value ? value : undefined);
+ };
+
+ function addHeadNode(node) {
+ if (headElement.firstChild)
+ headElement.insert(node, headElement.firstChild);
+ else
+ headElement.append(node);
+ };
+
+ headerFragment = this._parseHeader();
+ headElement = headerFragment.getAll('head')[0];
+ if (!headElement) {
+ elm = headerFragment.getAll('html')[0];
+ headElement = new Node('head', 1);
+
+ if (elm.firstChild)
+ elm.insert(headElement, elm.firstChild, true);
+ else
+ elm.append(headElement);
+ }
+
+ // Add/update/remove XML-PI
+ elm = headerFragment.firstChild;
+ if (data.xml_pi) {
+ value = 'version="1.0"';
+
+ if (data.docencoding)
+ value += ' encoding="' + data.docencoding + '"';
+
+ if (elm.type != 7) {
+ elm = new Node('xml', 7);
+ headerFragment.insert(elm, headerFragment.firstChild, true);
+ }
+
+ elm.value = value;
+ } else if (elm && elm.type == 7)
+ elm.remove();
+
+ // Add/update/remove doctype
+ elm = headerFragment.getAll('#doctype')[0];
+ if (data.doctype) {
+ if (!elm) {
+ elm = new Node('#doctype', 10);
+
+ if (data.xml_pi)
+ headerFragment.insert(elm, headerFragment.firstChild);
+ else
+ addHeadNode(elm);
+ }
+
+ elm.value = data.doctype.substring(9, data.doctype.length - 1);
+ } else if (elm)
+ elm.remove();
+
+ // Add/update/remove title
+ elm = headerFragment.getAll('title')[0];
+ if (data.metatitle) {
+ if (!elm) {
+ elm = new Node('title', 1);
+ elm.append(new Node('#text', 3)).value = data.metatitle;
+ addHeadNode(elm);
+ }
+ }
+
+ // Add meta encoding
+ if (data.docencoding) {
+ elm = null;
+ each(headerFragment.getAll('meta'), function(meta) {
+ if (meta.attr('http-equiv') == 'Content-Type')
+ elm = meta;
+ });
+
+ if (!elm) {
+ elm = new Node('meta', 1);
+ elm.attr('http-equiv', 'Content-Type');
+ elm.shortEnded = true;
+ addHeadNode(elm);
+ }
+
+ elm.attr('content', 'text/html; charset=' + data.docencoding);
+ }
+
+ // Add/update/remove meta
+ each('keywords,description,author,copyright,robots'.split(','), function(name) {
+ var nodes = headerFragment.getAll('meta'), i, meta, value = data['meta' + name];
+
+ for (i = 0; i < nodes.length; i++) {
+ meta = nodes[i];
+
+ if (meta.attr('name') == name) {
+ if (value)
+ meta.attr('content', value);
+ else
+ meta.remove();
+
+ return;
+ }
+ }
+
+ if (value) {
+ elm = new Node('meta', 1);
+ elm.attr('name', name);
+ elm.attr('content', value);
+ elm.shortEnded = true;
+
+ addHeadNode(elm);
+ }
+ });
+
+ // Add/update/delete link
+ elm = headerFragment.getAll('link')[0];
+ if (elm && elm.attr('rel') == 'stylesheet') {
+ if (data.stylesheet)
+ elm.attr('href', data.stylesheet);
+ else
+ elm.remove();
+ } else if (data.stylesheet) {
+ elm = new Node('link', 1);
+ elm.attr({
+ rel : 'stylesheet',
+ text : 'text/css',
+ href : data.stylesheet
+ });
+ elm.shortEnded = true;
+
+ addHeadNode(elm);
+ }
+
+ // Update body attributes
+ elm = headerFragment.getAll('body')[0];
+ if (elm) {
+ setAttr(elm, 'dir', data.langdir);
+ setAttr(elm, 'style', data.style);
+ setAttr(elm, 'vlink', data.visited_color);
+ setAttr(elm, 'link', data.link_color);
+ setAttr(elm, 'alink', data.active_color);
+
+ // Update iframe body as well
+ dom.setAttribs(this.editor.getBody(), {
+ style : data.style,
+ dir : data.dir,
+ vLink : data.visited_color,
+ link : data.link_color,
+ aLink : data.active_color
+ });
+ }
+
+ // Set html attributes
+ elm = headerFragment.getAll('html')[0];
+ if (elm) {
+ setAttr(elm, 'lang', data.langcode);
+ setAttr(elm, 'xml:lang', data.langcode);
+ }
+
+ // Serialize header fragment and crop away body part
+ html = 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(headerFragment);
+
+ this.head = html.substring(0, html.indexOf('</body>'));
+ },
+
+ _parseHeader : function() {
+ // Parse the contents with a DOM parser
+ return new tinymce.html.DomParser({
+ validate: false,
+ root_name: '#document'
+ }).parse(this.head);
+ },
+
+ _setContent : function(ed, o) {
+ var self = this, startPos, endPos, content = o.content, headerFragment, styles = '', dom = self.editor.dom, elm;
+
+ function low(s) {
+ return s.replace(/<\/?[A-Z]+/g, function(a) {
+ return a.toLowerCase();
+ })
+ };
+
+ // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate
+ if (o.format == 'raw' && self.head)
+ return;
+
+ if (o.source_view && ed.getParam('fullpage_hide_in_source_view'))
+ return;
+
+ // Parse out head, body and footer
+ content = content.replace(/<(\/?)BODY/gi, '<$1body');
+ startPos = content.indexOf('<body');
+
+ if (startPos != -1) {
+ startPos = content.indexOf('>', startPos);
+ self.head = low(content.substring(0, startPos + 1));
+
+ endPos = content.indexOf('</body', startPos);
+ if (endPos == -1)
+ endPos = content.length;
+
+ o.content = content.substring(startPos + 1, endPos);
+ self.foot = low(content.substring(endPos));
+ } else {
+ self.head = this._getDefaultHeader();
+ self.foot = '\n</body>\n</html>';
+ }
+
+ // Parse header and update iframe
+ headerFragment = self._parseHeader();
+ each(headerFragment.getAll('style'), function(node) {
+ if (node.firstChild)
+ styles += node.firstChild.value;
+ });
+
+ elm = headerFragment.getAll('body')[0];
+ if (elm) {
+ dom.setAttribs(self.editor.getBody(), {
+ style : elm.attr('style') || '',
+ dir : elm.attr('dir') || '',
+ vLink : elm.attr('vlink') || '',
+ link : elm.attr('link') || '',
+ aLink : elm.attr('alink') || ''
+ });
+ }
+
+ dom.remove('fullpage_styles');
+
+ if (styles) {
+ dom.add(self.editor.getDoc().getElementsByTagName('head')[0], 'style', {id : 'fullpage_styles'}, styles);
+
+ // Needed for IE 6/7
+ elm = dom.get('fullpage_styles');
+ if (elm.styleSheet)
+ elm.styleSheet.cssText = styles;
+ }
+ },
+
+ _getDefaultHeader : function() {
+ var header = '', editor = this.editor, value, styles = '';
+
+ if (editor.getParam('fullpage_default_xml_pi'))
+ header += '<?xml version="1.0" encoding="' + editor.getParam('fullpage_default_encoding', 'ISO-8859-1') + '" ?>\n';
+
+ 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">');
+ header += '\n<html>\n<head>\n';
+
+ if (value = editor.getParam('fullpage_default_title'))
+ header += '<title>' + value + '</title>\n';
+
+ if (value = editor.getParam('fullpage_default_encoding'))
+ header += '<meta http-equiv="Content-Type" content="text/html; charset=' + value + '" />\n';
+
+ if (value = editor.getParam('fullpage_default_font_family'))
+ styles += 'font-family: ' + value + ';';
+
+ if (value = editor.getParam('fullpage_default_font_size'))
+ styles += 'font-size: ' + value + ';';
+
+ if (value = editor.getParam('fullpage_default_text_color'))
+ styles += 'color: ' + value + ';';
+
+ header += '</head>\n<body' + (styles ? ' style="' + styles + '"' : '') + '>\n';
+
+ return header;
+ },
+
+ _getContent : function(ed, o) {
+ var self = this;
+
+ if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))
+ o.content = tinymce.trim(self.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(self.foot);
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin);
+})();
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm
new file mode 100644
index 000000000..14ab8652e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/fullpage.htm
@@ -0,0 +1,259 @@
+<!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>{#fullpage_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/form_utils.js"></script>
+ <script type="text/javascript" src="js/fullpage.js"></script>
+ <link href="css/fullpage.css" rel="stylesheet" type="text/css" />
+</head>
+<body id="fullpage" style="display: none">
+<form onsubmit="FullPageDialog.update();return false;" name="fullpage" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <li id="appearance_tab"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#fullpage_dlg.appearance_tab}</a></span></li>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="meta_panel" class="panel current">
+ <fieldset>
+ <legend>{#fullpage_dlg.meta_props}</legend>
+
+ <table border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td class="nowrap"><label for="metatitle">{#fullpage_dlg.meta_title}</label>&nbsp;</td>
+ <td><input type="text" id="metatitle" name="metatitle" value="" class="mceFocus" /></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="metakeywords">{#fullpage_dlg.meta_keywords}</label>&nbsp;</td>
+ <td><textarea id="metakeywords" name="metakeywords" rows="4"></textarea></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="metadescription">{#fullpage_dlg.meta_description}</label>&nbsp;</td>
+ <td><textarea id="metadescription" name="metadescription" rows="4"></textarea></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="metaauthor">{#fullpage_dlg.author}</label>&nbsp;</td>
+ <td><input type="text" id="metaauthor" name="metaauthor" value="" /></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="metacopyright">{#fullpage_dlg.copyright}</label>&nbsp;</td>
+ <td><input type="text" id="metacopyright" name="metacopyright" value="" /></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="metarobots">{#fullpage_dlg.meta_robots}</label>&nbsp;</td>
+ <td>
+ <select id="metarobots" name="metarobots">
+ <option value="">{#not_set}</option>
+ <option value="index,follow">{#fullpage_dlg.meta_index_follow}</option>
+ <option value="index,nofollow">{#fullpage_dlg.meta_index_nofollow}</option>
+ <option value="noindex,follow">{#fullpage_dlg.meta_noindex_follow}</option>
+ <option value="noindex,nofollow">{#fullpage_dlg.meta_noindex_nofollow}</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>{#fullpage_dlg.langprops}</legend>
+
+ <table border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td class="column1"><label for="docencoding">{#fullpage_dlg.encoding}</label></td>
+ <td>
+ <select id="docencoding" name="docencoding">
+ <option value="">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="doctype">{#fullpage_dlg.doctypes}</label>&nbsp;</td>
+ <td>
+ <select id="doctype" name="doctype">
+ <option value="">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="langcode">{#fullpage_dlg.langcode}</label>&nbsp;</td>
+ <td><input type="text" id="langcode" name="langcode" value="" /></td>
+ </tr>
+ <tr>
+ <td class="column1"><label for="langdir">{#fullpage_dlg.langdir}</label></td>
+ <td>
+ <select id="langdir" name="langdir">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#fullpage_dlg.ltr}</option>
+ <option value="rtl">{#fullpage_dlg.rtl}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="xml_pi">{#fullpage_dlg.xml_pi}</label>&nbsp;</td>
+ <td><input type="checkbox" id="xml_pi" name="xml_pi" class="checkbox" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+
+ <div id="appearance_panel" class="panel">
+ <fieldset>
+ <legend>{#fullpage_dlg.appearance_textprops}</legend>
+
+ <table border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td class="column1"><label for="fontface">{#fullpage_dlg.fontface}</label></td>
+ <td>
+ <select id="fontface" name="fontface" onchange="FullPageDialog.changedStyleProp();">
+ <option value="">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="fontsize">{#fullpage_dlg.fontsize}</label></td>
+ <td>
+ <select id="fontsize" name="fontsize" onchange="FullPageDialog.changedStyleProp();">
+ <option value="">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="textcolor">{#fullpage_dlg.textcolor}</label></td>
+ <td>
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="textcolor" name="textcolor" type="text" value="" size="9" onchange="updateColor('textcolor_pick','textcolor');FullPageDialog.changedStyleProp();" /></td>
+ <td id="textcolor_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>{#fullpage_dlg.appearance_bgprops}</legend>
+
+ <table border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td class="column1"><label for="bgimage">{#fullpage_dlg.bgimage}</label></td>
+ <td>
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="bgimage" name="bgimage" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
+ <td id="bgimage_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td class="column1"><label for="bgcolor">{#fullpage_dlg.bgcolor}</label></td>
+ <td>
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');FullPageDialog.changedStyleProp();" /></td>
+ <td id="bgcolor_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>{#fullpage_dlg.appearance_marginprops}</legend>
+
+ <table border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td class="column1"><label for="leftmargin">{#fullpage_dlg.left_margin}</label></td>
+ <td><input id="leftmargin" name="leftmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
+ <td class="column1"><label for="rightmargin">{#fullpage_dlg.right_margin}</label></td>
+ <td><input id="rightmargin" name="rightmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
+ </tr>
+ <tr>
+ <td class="column1"><label for="topmargin">{#fullpage_dlg.top_margin}</label></td>
+ <td><input id="topmargin" name="topmargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
+ <td class="column1"><label for="bottommargin">{#fullpage_dlg.bottom_margin}</label></td>
+ <td><input id="bottommargin" name="bottommargin" type="text" value="" onchange="FullPageDialog.changedStyleProp();" /></td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>{#fullpage_dlg.appearance_linkprops}</legend>
+
+ <table border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td class="column1"><label for="link_color">{#fullpage_dlg.link_color}</label></td>
+ <td>
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="link_color" name="link_color" type="text" value="" size="9" onchange="updateColor('link_color_pick','link_color');FullPageDialog.changedStyleProp();" /></td>
+ <td id="link_color_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+
+ <td class="column1"><label for="visited_color">{#fullpage_dlg.visited_color}</label></td>
+ <td>
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="visited_color" name="visited_color" type="text" value="" size="9" onchange="updateColor('visited_color_pick','visited_color');FullPageDialog.changedStyleProp();" /></td>
+ <td id="visited_color_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="active_color">{#fullpage_dlg.active_color}</label></td>
+ <td>
+ <table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="active_color" name="active_color" type="text" value="" size="9" onchange="updateColor('active_color_pick','active_color');FullPageDialog.changedStyleProp();" /></td>
+ <td id="active_color_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+
+ <td>&nbsp;</td>
+ <td>&nbsp;</td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>{#fullpage_dlg.appearance_style}</legend>
+
+ <table border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td class="column1"><label for="stylesheet">{#fullpage_dlg.stylesheet}</label></td>
+ <td><table border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="stylesheet" name="stylesheet" type="text" value="" /></td>
+ <td id="stylesheet_browsercontainer">&nbsp;</td>
+ </tr>
+ </table></td>
+ </tr>
+ <tr>
+ <td class="column1"><label for="style">{#fullpage_dlg.style}</label></td>
+ <td><input id="style" name="style" type="text" value="" onchange="FullPageDialog.changedStyle();" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="update" value="{#update}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js
new file mode 100644
index 000000000..3f672ad3b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/js/fullpage.js
@@ -0,0 +1,232 @@
+/**
+ * fullpage.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+(function() {
+ tinyMCEPopup.requireLangPack();
+
+ var defaultDocTypes =
+ 'XHTML 1.0 Transitional=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">,' +
+ 'XHTML 1.0 Frameset=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">,' +
+ 'XHTML 1.0 Strict=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">,' +
+ 'XHTML 1.1=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">,' +
+ 'HTML 4.01 Transitional=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">,' +
+ 'HTML 4.01 Strict=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">,' +
+ 'HTML 4.01 Frameset=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">';
+
+ var defaultEncodings =
+ 'Western european (iso-8859-1)=iso-8859-1,' +
+ 'Central European (iso-8859-2)=iso-8859-2,' +
+ 'Unicode (UTF-8)=utf-8,' +
+ 'Chinese traditional (Big5)=big5,' +
+ 'Cyrillic (iso-8859-5)=iso-8859-5,' +
+ 'Japanese (iso-2022-jp)=iso-2022-jp,' +
+ 'Greek (iso-8859-7)=iso-8859-7,' +
+ 'Korean (iso-2022-kr)=iso-2022-kr,' +
+ 'ASCII (us-ascii)=us-ascii';
+
+ 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';
+ var defaultFontSizes = '10px,11px,12px,13px,14px,15px,16px';
+
+ function setVal(id, value) {
+ var elm = document.getElementById(id);
+
+ if (elm) {
+ value = value || '';
+
+ if (elm.nodeName == "SELECT")
+ selectByValue(document.forms[0], id, value);
+ else if (elm.type == "checkbox")
+ elm.checked = !!value;
+ else
+ elm.value = value;
+ }
+ };
+
+ function getVal(id) {
+ var elm = document.getElementById(id);
+
+ if (elm.nodeName == "SELECT")
+ return elm.options[elm.selectedIndex].value;
+
+ if (elm.type == "checkbox")
+ return elm.checked;
+
+ return elm.value;
+ };
+
+ window.FullPageDialog = {
+ changedStyle : function() {
+ var val, styles = tinyMCEPopup.editor.dom.parseStyle(getVal('style'));
+
+ setVal('fontface', styles['font-face']);
+ setVal('fontsize', styles['font-size']);
+ setVal('textcolor', styles['color']);
+
+ if (val = styles['background-image'])
+ setVal('bgimage', val.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"));
+ else
+ setVal('bgimage', '');
+
+ setVal('bgcolor', styles['background-color']);
+
+ // Reset margin form elements
+ setVal('topmargin', '');
+ setVal('rightmargin', '');
+ setVal('bottommargin', '');
+ setVal('leftmargin', '');
+
+ // Expand margin
+ if (val = styles['margin']) {
+ val = val.split(' ');
+ styles['margin-top'] = val[0] || '';
+ styles['margin-right'] = val[1] || val[0] || '';
+ styles['margin-bottom'] = val[2] || val[0] || '';
+ styles['margin-left'] = val[3] || val[0] || '';
+ }
+
+ if (val = styles['margin-top'])
+ setVal('topmargin', val.replace(/px/, ''));
+
+ if (val = styles['margin-right'])
+ setVal('rightmargin', val.replace(/px/, ''));
+
+ if (val = styles['margin-bottom'])
+ setVal('bottommargin', val.replace(/px/, ''));
+
+ if (val = styles['margin-left'])
+ setVal('leftmargin', val.replace(/px/, ''));
+
+ updateColor('bgcolor_pick', 'bgcolor');
+ updateColor('textcolor_pick', 'textcolor');
+ },
+
+ changedStyleProp : function() {
+ var val, dom = tinyMCEPopup.editor.dom, styles = dom.parseStyle(getVal('style'));
+
+ styles['font-face'] = getVal('fontface');
+ styles['font-size'] = getVal('fontsize');
+ styles['color'] = getVal('textcolor');
+ styles['background-color'] = getVal('bgcolor');
+
+ if (val = getVal('bgimage'))
+ styles['background-image'] = "url('" + val + "')";
+ else
+ styles['background-image'] = '';
+
+ delete styles['margin'];
+
+ if (val = getVal('topmargin'))
+ styles['margin-top'] = val + "px";
+ else
+ styles['margin-top'] = '';
+
+ if (val = getVal('rightmargin'))
+ styles['margin-right'] = val + "px";
+ else
+ styles['margin-right'] = '';
+
+ if (val = getVal('bottommargin'))
+ styles['margin-bottom'] = val + "px";
+ else
+ styles['margin-bottom'] = '';
+
+ if (val = getVal('leftmargin'))
+ styles['margin-left'] = val + "px";
+ else
+ styles['margin-left'] = '';
+
+ // Serialize, parse and reserialize this will compress redundant styles
+ setVal('style', dom.serializeStyle(dom.parseStyle(dom.serializeStyle(styles))));
+ this.changedStyle();
+ },
+
+ update : function() {
+ var data = {};
+
+ tinymce.each(tinyMCEPopup.dom.select('select,input,textarea'), function(node) {
+ data[node.id] = getVal(node.id);
+ });
+
+ tinyMCEPopup.editor.plugins.fullpage._dataToHtml(data);
+ tinyMCEPopup.close();
+ }
+ };
+
+ function init() {
+ var form = document.forms[0], i, item, list, editor = tinyMCEPopup.editor;
+
+ // Setup doctype select box
+ list = editor.getParam("fullpage_doctypes", defaultDocTypes).split(',');
+ for (i = 0; i < list.length; i++) {
+ item = list[i].split('=');
+
+ if (item.length > 1)
+ addSelectValue(form, 'doctype', item[0], item[1]);
+ }
+
+ // Setup fonts select box
+ list = editor.getParam("fullpage_fonts", defaultFontNames).split(';');
+ for (i = 0; i < list.length; i++) {
+ item = list[i].split('=');
+
+ if (item.length > 1)
+ addSelectValue(form, 'fontface', item[0], item[1]);
+ }
+
+ // Setup fontsize select box
+ list = editor.getParam("fullpage_fontsizes", defaultFontSizes).split(',');
+ for (i = 0; i < list.length; i++)
+ addSelectValue(form, 'fontsize', list[i], list[i]);
+
+ // Setup encodings select box
+ list = editor.getParam("fullpage_encodings", defaultEncodings).split(',');
+ for (i = 0; i < list.length; i++) {
+ item = list[i].split('=');
+
+ if (item.length > 1)
+ addSelectValue(form, 'docencoding', item[0], item[1]);
+ }
+
+ // Setup color pickers
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
+ document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color');
+ document.getElementById('visited_color_pickcontainer').innerHTML = getColorPickerHTML('visited_color_pick','visited_color');
+ document.getElementById('active_color_pickcontainer').innerHTML = getColorPickerHTML('active_color_pick','active_color');
+ document.getElementById('textcolor_pickcontainer').innerHTML = getColorPickerHTML('textcolor_pick','textcolor');
+ document.getElementById('stylesheet_browsercontainer').innerHTML = getBrowserHTML('stylesheetbrowser','stylesheet','file','fullpage');
+ document.getElementById('bgimage_pickcontainer').innerHTML = getBrowserHTML('bgimage_browser','bgimage','image','fullpage');
+
+ // Resize some elements
+ if (isVisible('stylesheetbrowser'))
+ document.getElementById('stylesheet').style.width = '220px';
+
+ if (isVisible('link_href_browser'))
+ document.getElementById('element_link_href').style.width = '230px';
+
+ if (isVisible('bgimage_browser'))
+ document.getElementById('bgimage').style.width = '210px';
+
+ // Update form
+ tinymce.each(tinyMCEPopup.getWindowArg('data'), function(value, key) {
+ setVal(key, value);
+ });
+
+ FullPageDialog.changedStyle();
+
+ // Update colors
+ updateColor('textcolor_pick', 'textcolor');
+ updateColor('bgcolor_pick', 'bgcolor');
+ updateColor('visited_color_pick', 'visited_color');
+ updateColor('active_color_pick', 'active_color');
+ updateColor('link_color_pick', 'link_color');
+ };
+
+ tinyMCEPopup.onInit.add(init);
+})();
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ar_dlg.js
new file mode 100644
index 000000000..634642b2e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.fullpage_dlg',{title:"Document properties","meta_tab":"\u0639\u0627\u0645","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u0639\u0627\u0645","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/az_dlg.js
new file mode 100644
index 000000000..2d09ff333
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.fullpage_dlg',{title:"S\u0259n\u0259d x\u00fcsusiyy\u0259tl\u0259ri","meta_tab":"\u00dcmumi","appearance_tab":"G\u00f6r\u00fcn\u00fc\u015f","advanced_tab":"\u018flav\u0259l\u0259r","meta_props":"Meta m\u0259lumat",langprops:"Dil v\u0259 kodla\u015fd\u0131rma","meta_title":"Ba\u015fl\u0131q","meta_keywords":"A\u00e7ar s\u00f6zl\u0259ri","meta_description":"T\u0259svir","meta_robots":"Robotlar",doctypes:"S\u0259n\u0259d n\u00f6v\u00fc",langcode:"Dil kodu",langdir:"Dil istiqam\u0259ti",ltr:"Soldan sa\u011fa",rtl:"Sa\u011fdan sola","xml_pi":"XML t\u0259rifi",encoding:"\u0130\u015far\u0259 kodla\u015fd\u0131rmas\u0131","appearance_bgprops":"Arxa plan x\u00fcsusiyy\u0259tl\u0259ri","appearance_marginprops":"G\u00f6vd\u0259 k\u0259narlar\u0131","appearance_linkprops":"Ke\u00e7id r\u0259ngl\u0259ri","appearance_textprops":"M\u0259tn x\u00fcsusiyy\u0259tl\u0259ri",bgcolor:"Arxa plan r\u0259ngi",bgimage:"Arxa plan \u015f\u0259kli","left_margin":"Sol bo\u015fluq","right_margin":"Sa\u011f bo\u015fluq","top_margin":"\u00dcst bo\u015fluq","bottom_margin":"Alt bo\u015fluq","text_color":"M\u0259tn r\u0259ngi","font_size":"\u015erift \u00f6l\u00e7\u00fcs\u00fc","font_face":"\u015erift n\u00f6v\u00fc","link_color":"Ke\u00e7id r\u0259ngi","hover_color":"\u00dcz\u0259rind\u0259ki r\u0259ng","visited_color":"Bax\u0131lm\u0131\u015f r\u0259ng","active_color":"Aktiv r\u0259ng",textcolor:"R\u0259ng",fontsize:"\u015erift \u00f6l\u00e7\u00fcs\u00fc",fontface:"\u015erift ail\u0259si","meta_index_follow":"\u0130ndeks et v\u0259 ke\u00e7idi izl\u0259","meta_index_nofollow":"\u0130ndeks et lakin ke\u00e7idi izl\u0259m\u0259","meta_noindex_follow":"\u0130ndeks etm\u0259 lakin ke\u00e7idi izl\u0259","meta_noindex_nofollow":"\u0130ndeks etm\u0259 v\u0259 ke\u00e7idl\u0259ri izl\u0259m\u0259","appearance_style":"Stil v\u0259r\u0259qi v\u0259 x\u00fcsusiyy\u0259tl\u0259ri",stylesheet:"Stil v\u0259r\u0259qi",style:"Stil",author:"M\u00fc\u0259llif",copyright:"M\u00fc\u0259llif h\u00fcququ",add:"Yeni element \u0259lav\u0259 et",remove:"Se\u00e7ilmi\u015f elementi sil",moveup:"Se\u00e7il\u0259n elementi yuxar\u0131 \u00e7\u0259k",movedown:"Se\u00e7il\u0259n elementi a\u015fa\u011f\u0131 \u00e7\u0259k","head_elements":"Ba\u015f elementl\u0259r",info:"M\u0259lumat","add_title":"Ba\u015fl\u0131q elementi","add_meta":"Meta elementi","add_script":"Skript elementi","add_style":"Stil elementi","add_link":"Ke\u00e7id elementi","add_base":"Baza elementi","add_comment":"\u015e\u0259rh d\u00fcy\u00fcn\u00fc","title_element":"Ba\u015fl\u0131q elementi","script_element":"Skript elementi","style_element":"Stil elementi","base_element":"Baza elementi","link_element":"Ke\u00e7id elementi","meta_element":"Meta elementi","comment_element":"\u015e\u0259rh",src:"Src",language:"Dil",href:"Href",target:"H\u0259d\u0259f",type:"N\u00f6v",charset:"\u00c7arset",defer:"T\u0259xir\u0259 sal",media:"Media",properties:"X\u00fcsusiyy\u0259tl\u0259r",name:"Ad\u0131",value:"D\u0259y\u0259r",content:"M\u0259zmun",rel:"Rel",rev:"Rev",hreflang:"Href dili","general_props":"\u00dcmumi","advanced_props":"\u018flav\u0259l\u0259r"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/be_dlg.js
new file mode 100644
index 000000000..7a15a2c44
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.fullpage_dlg',{title:"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0434\u0430\u043a\u0443\u043c\u0435\u043d\u0442\u0443","meta_tab":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f","appearance_tab":"\u0412\u0456\u0434","advanced_tab":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u0430","meta_props":"\u041c\u044d\u0442\u0430 \u0456\u043d\u0444\u0430\u0440\u043c\u0430\u0446\u044b\u0456",langprops:"\u041c\u043e\u0432\u0430 \u0456 \u043a\u0430\u0434\u0437\u0456\u0440\u043e\u045e\u043a\u0456","meta_title":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a","meta_keywords":"\u0410\u0441\u043d\u043e\u045e\u043d\u044b\u044f \u0441\u043b\u043e\u0432\u044b","meta_description":"\u0410\u043f\u0456\u0441\u0430\u043d\u043d\u0435","meta_robots":"\u0420\u043e\u0431\u0430\u0442\u044b",doctypes:"\u0422\u044b\u043f",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u044b",langdir:"\u041d\u0430\u043f\u0440\u0430\u043c\u0430\u043a \u0442\u044d\u043a\u0441\u0442\u0443",ltr:"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430","xml_pi":"\u0410\u0431\'\u044f\u045e\u043b\u0435\u043d\u043d\u0435 XML",encoding:"\u041a\u0430\u0434\u0437\u0456\u0440\u043e\u045e\u043a\u0430","appearance_bgprops":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0444\u043e\u043d\u0443","appearance_marginprops":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f\u044b","appearance_linkprops":"\u041a\u043e\u043b\u0435\u0440 \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a","appearance_textprops":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0442\u044d\u043a\u0441\u0442\u0443",bgcolor:"\u041a\u043e\u043b\u0435\u0440 \u0444\u043e\u043d\u0443",bgimage:"\u0424\u043e\u043d\u0430\u0432\u044b \u043c\u0430\u043b\u044e\u043d\u0430\u043a","left_margin":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f \u0437\u043b\u0435\u0432\u0430","right_margin":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f \u0441\u043f\u0440\u0430\u0432\u0430","top_margin":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f \u0437\u0432\u0435\u0440\u0445\u0443","bottom_margin":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f \u0437\u043d\u0456\u0437\u0443","text_color":"\u041a\u043e\u043b\u0435\u0440 \u0442\u044d\u043a\u0441\u0442\u0443","font_size":"\u041f\u0430\u043c\u0435\u0440 \u0448\u0440\u044b\u0444\u0442\u0430","font_face":"\u0428\u0440\u044b\u0444\u0442","link_color":"\u041a\u043e\u043b\u0435\u0440 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456","hover_color":"\u041a\u043e\u043b\u0435\u0440 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456 \u043f\u0440\u044b \u043d\u0430\u0432\u044f\u0434\u0437\u0435\u043d\u043d\u0456","visited_color":"\u041a\u043e\u043b\u0435\u0440 \u043d\u0430\u0446\u0456\u0441\u043d\u0443\u0442\u0430\u0439 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456","active_color":"\u041a\u043e\u043b\u0435\u0440 \u0430\u043a\u0442\u044b\u045e\u043d\u0430\u0439 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456",textcolor:"\u041a\u043e\u043b\u0435\u0440",fontsize:"\u041f\u0430\u043c\u0435\u0440 \u0448\u0440\u044b\u0444\u0442\u0430",fontface:"\u0421\u044f\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u0448\u0440\u044b\u0444\u0442\u043e\u045e","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"\u041b\u0456\u0441\u0442 \u0456 \u045e\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0441\u0442\u044b\u043b\u044f\u045e",stylesheet:"\u041b\u0456\u0441\u0442 \u0441\u0442\u044b\u043b\u044f\u045e",style:"\u0421\u0442\u044b\u043b\u044c",author:"\u0410\u045e\u0442\u0430\u0440",copyright:"\u041a\u0430\u043f\u0456\u0440\u0430\u0439\u0442",add:"\u0414\u0430\u0434\u0430\u0446\u044c \u043d\u043e\u0432\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0432\u044b\u043b\u0443\u0447\u0430\u043d\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0435\u0440\u0430\u043c\u044f\u0441\u0446\u0456\u0446\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u0432\u0435\u0440\u0445",movedown:"\u041f\u0435\u0440\u0430\u043c\u044f\u0441\u0446\u0456\u0446\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u043d\u0456\u0437","head_elements":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Header",info:"\u0406\u043d\u0444\u0430\u0440\u043c\u0430\u0446\u044b\u044f","add_title":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Title","add_meta":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Meta","add_script":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Script","add_style":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Style","add_link":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Link","add_base":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Base","add_comment":"\u041a\u0430\u043c\u0435\u043d\u0442\u0430\u0440\u044b\u0439","title_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Title","script_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Script","style_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Style","base_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Base","link_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Link","meta_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Meta","comment_element":"\u041a\u0430\u043c\u0435\u043d\u0442\u0430\u0440\u044b\u0439",src:"Src",language:"\u041c\u043e\u0432\u0430",href:"\u0421\u043f\u0430\u0441\u044b\u043b\u043a\u0430",target:"\u041c\u044d\u0442\u0430",type:"\u0422\u044b\u043f",charset:"\u041a\u0430\u0434\u0437\u0456\u0440\u043e\u045e\u043a\u0430",defer:"\u0410\u0434\u0442\u044d\u0440\u043c\u0456\u043d\u043e\u045e\u043a\u0430",media:"\u041c\u0435\u0434\u044b\u044f",properties:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",name:"\u041d\u0430\u0437\u0432\u0430",value:"\u0417\u043d\u0430\u0447\u044d\u043d\u043d\u0435",content:"\u0417\u043c\u0435\u0441\u0446\u0456\u0432\u0430",rel:"Rel",rev:"Rev",hreflang:"\u041c\u043e\u0432\u0430 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456","general_props":"\u0410\u0433\u0443\u043b\u044c\u043d\u0430\u0435","advanced_props":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bg_dlg.js
new file mode 100644
index 000000000..2076714c3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.fullpage_dlg',{title:"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","meta_tab":"\u041e\u0431\u0449\u0438","appearance_tab":"\u0412\u044a\u043d\u0448\u0435\u043d \u0432\u0438\u0434","advanced_tab":"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","meta_props":"Meta \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f",langprops:"\u0415\u0437\u0438\u043a \u0438 \u043a\u043e\u0434\u0438\u0440\u0430\u043d\u0435","meta_title":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435","meta_keywords":"\u041a\u043b\u044e\u0447\u043e\u0432\u0438 \u0434\u0443\u043c\u0438","meta_description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","meta_robots":"\u0420\u043e\u0431\u043e\u0442\u0438",doctypes:"\u0422\u0438\u043f",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430",langdir:"\u041f\u043e\u0441\u043e\u043a\u0430 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430",ltr:"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e",rtl:"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e","xml_pi":"XML \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438",encoding:"\u041a\u043e\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0442\u0435","appearance_bgprops":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0444\u043e\u043d\u0430","appearance_marginprops":"Body margins","appearance_linkprops":"\u0426\u0432\u0435\u0442\u043e\u0432\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435","appearance_textprops":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430",bgcolor:"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0434\u043e\u043d\u0430",bgimage:"\u0424\u043e\u043d\u043e\u0432\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","left_margin":"\u041b\u044f\u0432 margin","right_margin":"\u0414\u0435\u0430\u0441\u0435\u043d margin","top_margin":"\u0413\u043e\u0440\u0435\u043d margin","bottom_margin":"\u0414\u043e\u043b\u0435\u043d margin","text_color":"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430","font_face":"\u0428\u0440\u0438\u0444\u0442","link_color":"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430","hover_color":"\u0426\u0432\u044f\u0442 \u043f\u0440\u0438 hover","visited_color":"\u0426\u0432\u044f\u0442 \u0437\u0430 \u043f\u043e\u0441\u0435\u0442\u0435\u043d\u0438 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438","active_color":"\u0410\u043a\u0442\u0438\u0432\u0435\u043d \u0446\u0432\u044f\u0442",textcolor:"\u0426\u0432\u044f\u0442",fontsize:"\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430",fontface:"\u0428\u0440\u0438\u0444\u0442","meta_index_follow":"\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0439 \u0438 \u0441\u043b\u0435\u0434\u0432\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435","meta_index_nofollow":"\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0439 \u0438 \u043d\u0435 \u0441\u043b\u0435\u0434\u0432\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435","meta_noindex_follow":"\u041d\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0439 \u043d\u043e \u0441\u043b\u0435\u0434\u0432\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435","meta_noindex_nofollow":"\u041d\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0439 \u0438 \u043d\u0435 \u0441\u043b\u0435\u0434\u0432\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435","appearance_style":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 Stylesheet \u0438 \u0441\u0442\u0438\u043b\u0430",stylesheet:"Stylesheet",style:"\u0421\u0442\u0438\u043b",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"Copyright",add:"\u0414\u043e\u0431\u0430\u0432\u0438 \u043d\u043e\u0432 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0440\u0438\u0434\u0432\u0438\u0436\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0433\u043e\u0440\u0435",movedown:"\u041f\u0440\u0438\u0434\u0432\u0438\u0436\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0434\u043e\u043b\u0443","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u041e\u0431\u0449\u0438","advanced_props":"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bn_dlg.js
new file mode 100644
index 000000000..833c995b8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/br_dlg.js
new file mode 100644
index 000000000..e271584a3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.fullpage_dlg',{title:"Propriedades do documento","meta_tab":"Geral","appearance_tab":"Apar\u00eancia","advanced_tab":"Avan\u00e7ado","meta_props":"Meta-informa\u00e7\u00e3o",langprops:"Linguagem e codifica\u00e7\u00e3o","meta_title":"T\u00edtulo","meta_keywords":"Palavras-chave","meta_description":"Descri\u00e7\u00e3o","meta_robots":"Robots",doctypes:"Doctype",langcode:"C\u00f3digo de linguagem",langdir:"Dire\u00e7\u00e3o do texto",ltr:"Esquerda para direita",rtl:"Direita para esquerda","xml_pi":"Declara\u00e7\u00e3o XML",encoding:"Codifica\u00e7\u00e3o de caracteres","appearance_bgprops":"Propriedades do plano de fundo","appearance_marginprops":"Margens (BODY)","appearance_linkprops":"Cores dos links","appearance_textprops":"Propriedades de texto",bgcolor:"Cor de fundo",bgimage:"Imagem de fundo","left_margin":"Margem esquerda","right_margin":"Margem direita","top_margin":"Margem topo","bottom_margin":"Margem base","text_color":"Cor do texto","font_size":"Tamanho fonte","font_face":"Fonte","link_color":"Cores dos links","hover_color":"Hover","visited_color":"Visited","active_color":"Active",textcolor:"Cor",fontsize:"Tamanho fonte",fontface:"Fonte","meta_index_follow":"Indexar e seguir os hyperlinks","meta_index_nofollow":"Indexar e n\u00e3o seguir os hyperlinks","meta_noindex_follow":"Seguir hyperlinks, mas n\u00e3o indexar","meta_noindex_nofollow":"N\u00e3o indexar / n\u00e3o seguir hyperlinks.","appearance_style":"Propriedades de folhas de estilo",stylesheet:"Folha de estilo",style:"Estilo",author:"Autor",copyright:"Copyright",add:"Acrescentar Novo elemento",remove:"Remover elemento selecionado",moveup:"Subir elemento selecionado",movedown:"Descer elemento selecionado","head_elements":"Elementos HEAD",info:"Informa\u00e7\u00e3o","add_title":"TITLE","add_meta":"META","add_script":"SCRIPT","add_style":"STYLE","add_link":"LINK","add_base":"BASE","add_comment":"Coment\u00e1rio","title_element":"TITLE","script_element":"SCRIPT","style_element":"STYLE","base_element":"BASE","link_element":"LINK","meta_element":"META","comment_element":"Coment\u00e1rio",src:"Src",language:"Idioma",href:"Href",target:"Alvo",type:"Tipo",charset:"Charset",defer:"Adiar",media:"Media",properties:"Propriedades",name:"Nome",value:"Valor",content:"Conte\u00fado",rel:"rel",rev:"rev",hreflang:"Href lang","general_props":"Geral","advanced_props":"Avan\u00e7ado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bs_dlg.js
new file mode 100644
index 000000000..85d8502b2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.fullpage_dlg',{title:"Svojstva dokumenta","meta_tab":"Osnovno","appearance_tab":"Izgled","advanced_tab":"Napredno","meta_props":"Meta informacije",langprops:"Jezik i kodiranje","meta_title":"Naslov","meta_keywords":"Klju\u010dne rije\u010di","meta_description":"Opis","meta_robots":"Robots",doctypes:"Doctype",langcode:"Kod jezika",langdir:"Smjer jezika",ltr:"S lijeva na desno",rtl:"S desna na lijevo","xml_pi":"XML deklaracija",encoding:"Kodiranje znakova","appearance_bgprops":"Svojstva pozadine","appearance_marginprops":"Margina","appearance_linkprops":"Boja poveznica","appearance_textprops":"Svojstva teksta",bgcolor:"Boja pozadine",bgimage:"Pozadinska slika","left_margin":"Lijeva margina","right_margin":"Desna margina","top_margin":"Gornja margina","bottom_margin":"Donja margina","text_color":"Boja teksta","font_size":"Veli\u010dina pisma","font_face":"Pismo","link_color":"Boja poveznice","hover_color":"Boja poveznice ispod mi\u0161a","visited_color":"Boja posje\u0107ene poveznice","active_color":"Boja aktivne poveznice",textcolor:"Boja",fontsize:"Veli\u010dina pisma",fontface:"Skupina pisama","meta_index_follow":"Indeksiraj i slijedi poveznice","meta_index_nofollow":"Indeksiraj i ne slijedi poveznice","meta_noindex_follow":"Ne indeksiraj i slijedi poveznice","meta_noindex_nofollow":"Ne indeksiraj i ne slijedi poveznice","appearance_style":"CSS i svojstva stila",stylesheet:"CSS",style:"Stil",author:"Autor",copyright:"Autorska prava",add:"Dodaj novi element",remove:"Ukloni odabrani element",moveup:"Pomakni odabrani element prema gore",movedown:"Pomakni odabrani element prema dolje","head_elements":"Zaglavni elementi",info:"Informacije","add_title":"Naslovni element","add_meta":"Meta element","add_script":"Skriptni element","add_style":"Sitlski element","add_link":"Element poveznice","add_base":"Osnovni element","add_comment":"Komentar","title_element":"Naslovni element","script_element":"Skriptni element","style_element":"Stilski element","base_element":"Osnovni element","link_element":"Element poveznice","meta_element":"Meta element","comment_element":"Komentar",src:"Src",language:"Jezik",href:"Href",target:"Meta",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Svojstva",name:"Ime",value:"Vrijednost",content:"Sadr\u017eaj",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Osnovno","advanced_props":"Napredno"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ca_dlg.js
new file mode 100644
index 000000000..a8f72d071
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.fullpage_dlg',{title:"Propietats del document","meta_tab":"General","appearance_tab":"Aparen\u00e7a","advanced_tab":"Avan\u00e7at","meta_props":"Metainformaci\u00f3",langprops:"Idioma i codificaci\u00f3","meta_title":"T\u00edtol","meta_keywords":"Paraules clau","meta_description":"Descripci\u00f3","meta_robots":"Robots",doctypes:"Doctype",langcode:"Codi d\'idioma",langdir:"Direcci\u00f3 de l\'idioma",ltr:"D\'esquerra a dreta",rtl:"De dreta a esquerra","xml_pi":"Declaraci\u00f3 XML",encoding:"Codificaci\u00f3 dels car\u00e0cters","appearance_bgprops":"Propietats del fons","appearance_marginprops":"Marges del cos","appearance_linkprops":"Colors d\'enlla\u00e7","appearance_textprops":"Propietats del text",bgcolor:"Color del fons",bgimage:"Imatge del fons","left_margin":"Marge esquerre","right_margin":"Marge dret","top_margin":"Marge superior","bottom_margin":"Marge inferior","text_color":"Color del text","font_size":"Mida de la font","font_face":"Font","link_color":"Color d\'enlla\u00e7","hover_color":"Color quan es passi per sobre","visited_color":"Color quan ja \u00e9s visitat","active_color":"Color quan \u00e9s actiu",textcolor:"Color",fontsize:"Mida de la font",fontface:"Fam\u00edlia de la font","meta_index_follow":"Indexa i segueix els enlla\u00e7os","meta_index_nofollow":"Indexa i no segueixis els enlla\u00e7os","meta_noindex_follow":"No indexis per\u00f2 segueix els enlla\u00e7os","meta_noindex_nofollow":"No indexis i no segueixis els enlla\u00e7os","appearance_style":"Full d\'estils i propietats dels estils",stylesheet:"Full d\'estils",style:"Estil",author:"Autor",copyright:"Copyright",add:"Afegeix un nou element",remove:"Elimina l\'element seleccionat",moveup:"Mou amunt l\'element seleccionat",movedown:"Mou avall l\'element seleccionat","head_elements":"Elements d\'encap\u00e7alament",info:"Informaci\u00f3","add_title":"Element t\u00edtol","add_meta":"Element meta","add_script":"Element script","add_style":"Element estil","add_link":"Element enlla\u00e7","add_base":"Element base","add_comment":"Node comentari","title_element":"Element t\u00edtol","script_element":"Element script","style_element":"Element estil","base_element":"Element base","link_element":"Element enlla\u00e7","meta_element":"Element meta","comment_element":"Comentari",src:"Src",language:"Idioma",href:"Href",target:"Dest\u00ed",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Propietats",name:"Nom",value:"Valor",content:"Contingut",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Avan\u00e7at"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ch_dlg.js
new file mode 100644
index 000000000..a506a7852
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.fullpage_dlg',{title:"\u6863\u6848\u5c5e\u6027","meta_tab":"\u6807\u51c6","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"Mata\u8baf\u606f",langprops:"\u8bed\u8a00\u7f16\u7801","meta_title":"\u6807\u9898","meta_keywords":"\u5173\u952e\u5b57","meta_description":"\u8bf4\u660e","meta_robots":"Robots",doctypes:"DocType",langcode:"\u6587\u5b57\u7f16\u7801",langdir:"\u6587\u5b57\u4e66\u5199\u65b9\u5411",ltr:"\u4ece\u5de6\u5230\u53f3",rtl:"\u4ece\u53f3\u5230\u5de6","xml_pi":"XML\u58f0\u660e",encoding:"\u8bed\u8a00\u7f16\u7801","appearance_bgprops":"\u80cc\u666f\u989c\u8272","appearance_marginprops":"\u8fb9\u8ddd","appearance_linkprops":"\u8d85\u8fde\u7ed3\u989c\u8272","appearance_textprops":"\u6587\u5b57\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u8fb9\u8ddd","right_margin":"\u53f3\u8fb9\u8ddd","top_margin":"\u4e0a\u8fb9\u8ddd","bottom_margin":"\u4e0b\u8fb9\u8ddd","text_color":"\u6587\u5b57\u989c\u8272","font_size":"\u6587\u5b57\u5927\u5c0f","font_face":"\u5b57\u4f53","link_color":"\u8d85\u8fde\u7ed3\u989c\u8272","hover_color":"Hover \u989c\u8272","visited_color":"Visited \u989c\u8272","active_color":"Active \u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u6587\u5b57\u5927\u5c0f",fontface:"\u5b57\u4f53","meta_index_follow":"\u7d22\u5f15\u5e76\u8fde\u7ed3","meta_index_nofollow":"\u7d22\u5f15\u4f46\u4e0d\u8fde\u7ed3","meta_noindex_follow":"\u4e0d\u7d22\u5f15\u4f46\u8fde\u7ed3","meta_noindex_nofollow":"\u4e0d\u7d22\u5f15\u4e5f\u4e0d\u8fde\u7ed3","appearance_style":"\u6837\u5f0f\u5217\u8868\u4e0e\u6837\u5f0f\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u5217\u8868",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743\u58f0\u660e",add:"\u65b0\u589e\u5143\u7d20",remove:"\u5220\u9664\u9009\u62e9\u5143\u7d20",moveup:"\u4e0a\u79fb\u9009\u62e9\u5143\u7d20",movedown:"\u4e0b\u79fb\u9009\u62e9\u5143\u7d20","head_elements":"Head \u5143\u7d20",info:"\u4fe1\u606f","add_title":"Title \u5143\u7d20","add_meta":"Meta \u5143\u7d20","add_script":"Script \u5143\u7d20","add_style":"Style \u5143\u7d20","add_link":"Link \u5143\u7d20","add_base":"Base \u5143\u7d20","add_comment":"\u6ce8\u91ca","title_element":"Title \u5143\u7d20","script_element":"Script \u5143\u7d20","style_element":"Style \u5143\u7d20","base_element":"Base \u5143\u7d20","link_element":"Link \u5143\u7d20","meta_element":"Meta \u5143\u7d20","comment_element":"\u6ce8\u91ca",src:"src",language:"\u8bed\u8a00",href:"href",target:"\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u7b26\u96c6",defer:"Defer",media:"\u5f71\u7247",properties:"\u5c5e\u6027",name:"\u540d\u79f0",value:"\u503c",content:"\u5185\u5bb9",rel:"rel",rev:"rev",hreflang:"href lang","general_props":"\u6807\u51c6","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cn_dlg.js
new file mode 100644
index 000000000..045ba71bf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.fullpage_dlg',{title:"\u6587\u6863\u5c5e\u6027","meta_tab":"\u5e38\u89c4","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"Meta\u4fe1\u606f",langprops:"\u8bed\u8a00\u4e0e\u5b57\u7b26\u96c6","meta_title":"\u6807\u9898","meta_keywords":"\u5173\u952e\u5b57","meta_description":"\u63cf\u8ff0","meta_robots":"\u641c\u7d22\u673a\u5668\u4eba",doctypes:"\u6587\u6863\u7c7b\u578b",langcode:"\u8bed\u8a00\u4ee3\u53f7",langdir:"\u6587\u5b57\u65b9\u5411",ltr:"\u4ece\u5de6\u5230\u53f3",rtl:"\u4ece\u53f3\u5230\u5de6","xml_pi":"XML\u58f0\u660e",encoding:"\u5b57\u7b26\u96c6","appearance_bgprops":"\u80cc\u666f\u5c5e\u6027","appearance_marginprops":"Body\u5916\u8fb9\u6846","appearance_linkprops":"\u94fe\u63a5\u989c\u8272","appearance_textprops":"\u6587\u672c\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u5916\u8fb9\u8ddd","right_margin":"\u53f3\u5916\u8fb9\u8ddd","top_margin":"\u4e0a\u5916\u8fb9\u8ddd","bottom_margin":"\u4e0b\u5916\u8fb9\u8ddd","text_color":"\u6587\u672c\u989c\u8272","font_size":"\u5b57\u4f53\u5927\u5c0f","font_face":"\u5b57\u4f53\u5916\u89c2","link_color":"\u94fe\u63a5\u989c\u8272","hover_color":"\u9f20\u6807\u60ac\u505c\u989c\u8272","visited_color":"\u5df2\u8bbf\u95ee\u989c\u8272","active_color":"\u6fc0\u6d3b\u65f6\u7684\u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u5b57\u4f53\u5927\u5c0f",fontface:"\u5b57\u4f53","meta_index_follow":"\u7d22\u5f15\u5e76\u8fde\u7ed3","meta_index_nofollow":"\u7d22\u5f15\u4f46\u4e0d\u8fde\u7ed3","meta_noindex_follow":"\u4e0d\u7d22\u5f15\u4f46\u8fde\u7ed3","meta_noindex_nofollow":"\u4e0d\u7d22\u5f15\u4e5f\u4e0d\u8fde\u7ed3","appearance_style":"\u6837\u5f0f\u5217\u8868\u4e0e\u6837\u5f0f\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u5217\u8868",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743",add:"\u6dfb\u52a0\u65b0\u5143\u7d20",remove:"\u5220\u9664\u5df2\u9009\u5143\u7d20",moveup:"\u5411\u4e0a\u79fb\u52a8\u5df2\u9009\u5143\u7d20",movedown:"\u5411\u4e0b\u79fb\u52a8\u5df2\u9009\u5143\u7d20","head_elements":"Head\u5143\u7d20",info:"\u4fe1\u606f","add_title":"Title\u5143\u7d20","add_meta":"Meta\u5143\u7d20","add_script":"Script\u5143\u7d20","add_style":"Style\u5143\u7d20","add_link":"Link\u5143\u7d20","add_base":"Base\u5143\u7d20","add_comment":"\u6ce8\u91ca","title_element":"Title\u5143\u7d20","script_element":"Script\u5143\u7d20","style_element":"Style\u5143\u7d20","base_element":"Base\u5143\u7d20","link_element":"Link\u5143\u7d20","meta_element":"Meta\u5143\u7d20","comment_element":"\u6ce8\u91ca",src:"Src\u5730\u5740",language:"\u8bed\u8a00",href:"Href\u94fe\u63a5",target:"Target\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u7b26\u96c6",defer:"Defer\u5b9a\u4e49",media:"\u5a92\u4f53",properties:"\u5c5e\u6027",name:"\u540d\u79f0",value:"\u503c",content:"\u5185\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u5e38\u89c4","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cs_dlg.js
new file mode 100644
index 000000000..7b9d5808d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.fullpage_dlg',{title:"Vlastnosti dokumentu","meta_tab":"Obecn\u00e9","appearance_tab":"Vzhled","advanced_tab":"Roz\u0161\u00ed\u0159en\u00e9","meta_props":"Meta informace",langprops:"Jazyk a k\u00f3dov\u00e1n\u00ed","meta_title":"Titulek","meta_keywords":"Kl\u00ed\u010dov\u00e1 slova","meta_description":"Popis","meta_robots":"Roboti",doctypes:"Typ dokumentu",langcode:"K\u00f3d jazyka",langdir:"Sm\u011br textu",ltr:"Zleva doprava",rtl:"Zprava doleva","xml_pi":"XML deklarace",encoding:"K\u00f3dov\u00e1n\u00ed","appearance_bgprops":"Vlastnosti pozad\u00ed","appearance_marginprops":"Okraje t\u011bla dokumentu","appearance_linkprops":"Vlastnosti odkaz\u016f","appearance_textprops":"Vlastnosti textu",bgcolor:"Barva pozad\u00ed",bgimage:"Obr\u00e1zek pozad\u00ed","left_margin":"Lev\u00fd okraj","right_margin":"Prav\u00fd okraj","top_margin":"Horn\u00ed okraj","bottom_margin":"Spodn\u00ed okraj","text_color":"Barva textu","font_size":"Velikost p\u00edsma","font_face":"Typ p\u00edsma","link_color":"Barva odkazu","hover_color":"Barva zvolen\u00e9ho odkazu","visited_color":"Barva nav\u0161t\u00edven\u00e9ho odkazu","active_color":"Barva aktivn\u00edho odkazu",textcolor:"Barva",fontsize:"Velikost p\u00edsma",fontface:"Typ p\u00edsma","meta_index_follow":"Indexovat a sledovat odkazy","meta_index_nofollow":"Indexovat a nesledovat odkazy","meta_noindex_follow":"Neindexovat, ale sledovat odkazy","meta_noindex_nofollow":"Neindexovat a nesledovat odkazy","appearance_style":"Vlastnosti styl\u016f",stylesheet:"Stylopis",style:"Styl",author:"Autor",copyright:"Autorsk\u00e1 pr\u00e1va",add:"P\u0159idat nov\u00fd element",remove:"Odebrat ozna\u010den\u00fd element",moveup:"P\u0159esu\u0148 ozna\u010den\u00fd element v\u00fd\u0161",movedown:"P\u0159esu\u0148 ozna\u010den\u00fd element n\u00ed\u017e","head_elements":"Hlavi\u010dky",info:"Informace","add_title":"Vlo\u017eit titulek","add_meta":"Vlo\u017eit meta informace","add_script":"Vlo\u017eit skript","add_style":"Vlo\u017eit styl","add_link":"Vlo\u017eit nezobrazovan\u00fd odkaz","add_base":"Vlo\u017eit z\u00e1kladn\u00ed um\u00edst\u011bn\u00ed","add_comment":"Vlo\u017eit koment\u00e1\u0159","title_element":"Titulek","script_element":"Skript","style_element":"Styl","base_element":"Z\u00e1kladn\u00ed um\u00edst\u011bn\u00ed","link_element":"Nezobrazovan\u00fd odkaz","meta_element":"Meta informace","comment_element":"Koment\u00e1\u0159",src:"Zdroj",language:"Jazyk",href:"Soubor/URL",target:"C\u00edl",type:"Typ",charset:"Znakov\u00e1 sada",defer:"Odlo\u017eit (defer)",media:"M\u00e9dia",properties:"Vlastnosti",name:"N\u00e1zev",value:"Hodnota",content:"Obsah",rel:"Vztah str\u00e1nky k c\u00edli",rev:"Vztah c\u00edle ke str\u00e1nce",hreflang:"Jazyk odkazu","general_props":"Obecn\u00e9 parametry","advanced_props":"Roz\u0161\u00ed\u0159en\u00e9 parametry"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cy_dlg.js
new file mode 100644
index 000000000..d1cf795e3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.fullpage_dlg',{title:"Priodweddau dogfen","meta_tab":"Cyffredinol","appearance_tab":"Ymddangosiad","advanced_tab":"Uwch","meta_props":"Gwybodaeth meta",langprops:"Iaith ac amgodiad","meta_title":"Teitl","meta_keywords":"Allweddair","meta_description":"Disgrifiad","meta_robots":"Robotau",doctypes:"Math dogfen",langcode:"Cod iaith",langdir:"Cyfeiriad iaith",ltr:"Chwith i\'r dde",rtl:"De i\'r chwith","xml_pi":"Datganiad XML",encoding:"Amgodiad nodau","appearance_bgprops":"Priodweddau cefndir","appearance_marginprops":"Ymylon corff","appearance_linkprops":"Lliwiau cysylltau","appearance_textprops":"Priodweddau testun",bgcolor:"Lliw cefndir",bgimage:"Delwedd cefndir","left_margin":"Ymyl chwith","right_margin":"Ymyl dde","top_margin":"Ymyl brig","bottom_margin":"Ymyl gwaelod","text_color":"Lliw testun","font_size":"Maint ffont","font_face":"Wyneb ffont","link_color":"Lliw cysylltau","hover_color":"Lliw hofran","visited_color":"Lliw ymwelwyd","active_color":"Lliw actif",textcolor:"Lliw",fontsize:"Maint ffont",fontface:"Teulu ffont","meta_index_follow":"Mynegeio a ddilyn y cysylltau","meta_index_nofollow":"Mynegeio a peidio ddilyn y cysylltau","meta_noindex_follow":"Peidio mynegeio ond ddilyn y cysylltau","meta_noindex_nofollow":"Peidio mynegeio a peidio ddilyn y cysylltau","appearance_style":"Priodweddau dalen-arddull ac arddull",stylesheet:"Dalen-arddull",style:"Arddull",author:"Awdur",copyright:"Hawlfraint",add:"Ychwanegu elfen newydd",remove:"Tynnu elfen dewisedig",moveup:"Symud elfen dewisedig i fyny",movedown:"Symud elfen dewisedig i lawr","head_elements":"Elfennau pen",info:"Gwybodaeth","add_title":"Elfen teitl","add_meta":"Elfen meta","add_script":"Elfen sgript","add_style":"Elfen arddull","add_link":"Elfen cyswllt","add_base":"Elfen sail","add_comment":"Nod sylw","title_element":"Elfen teitl","script_element":"Elfen sgript","style_element":"Elfen arddull","base_element":"Elfen sail","link_element":"Elfen cyswllt","meta_element":"Elfen meta","comment_element":"Sylw",src:"Fynhonell",language:"Iaith",href:"Href",target:"Targed",type:"Math",charset:"Set nodau",defer:"Gohirio",media:"Cyfryngau",properties:"Priodweddau",name:"Enw",value:"Gwerth",content:"Cynnwys",rel:"Perthynas",rev:"Diwygiad",hreflang:"Iaith href","general_props":"Cyfferdinol","advanced_props":"Uwch"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/da_dlg.js
new file mode 100644
index 000000000..79fd65897
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.fullpage_dlg',{title:"Dokumentegenskaber","meta_tab":"Generelt","appearance_tab":"Udseende","advanced_tab":"Advanceret","meta_props":"Meta-information",langprops:"Sprog og kodning","meta_title":"Titel","meta_keywords":"N\u00f8gleord","meta_description":"Beskrivelse","meta_robots":"Robots",doctypes:"Doctype",langcode:"Sprogkode",langdir:"Sprogretning",ltr:"Venstre mod h\u00f8jre",rtl:"H\u00f8jre md venstre","xml_pi":"XML declaration",encoding:"Tegns\u00e6t","appearance_bgprops":"Baggrundsegenskaber","appearance_marginprops":"Body margins","appearance_linkprops":"Link farver","appearance_textprops":"Tekstegenskaber",bgcolor:"Baggrundsfarve",bgimage:"Baggrundsbillede","left_margin":"Venstre margin","right_margin":"H\u00f8jre margin","top_margin":"Topmargin","bottom_margin":"Bundmargin","text_color":"Tekstfarve","font_size":"Skriftst\u00f8rrelse","font_face":"Skrifttype","link_color":"Linkfarve","hover_color":"Farve ved aktivering","visited_color":"Farve efter museklik","active_color":"Farve ved museklik",textcolor:"Farve",fontsize:"Skriftst\u00f8rrelse",fontface:"Skrifttype","meta_index_follow":"Indeks og f\u00f8lg links","meta_index_nofollow":"Indeks og f\u00f8lg ikke links","meta_noindex_follow":"Ingen indeks, men f\u00f8lg links","meta_noindex_nofollow":"Ingen indeks og f\u00f8lg ikke links","appearance_style":"Stylesheet og style-egenskaber",stylesheet:"Stylesheet",style:"Style",author:"Forfatter",copyright:"Copyright",add:"Tilf\u00f8j nyt element",remove:"Slet valgte element",moveup:"Flyt valgte element op",movedown:"Flyt valgte element ned","head_elements":"Hovedelement",info:"Information","add_title":"Titelelement","add_meta":"Meta-element","add_script":"Script-element","add_style":"Style-element","add_link":"Link-element","add_base":"Base-element","add_comment":"Kommentar-node","title_element":"Titelelement","script_element":"Script-element","style_element":"Style-element","base_element":"Base-element","link_element":"Link-element","meta_element":"Meta-element","comment_element":"Kommentar",src:"Src",language:"Sprog",href:"Href",target:"Destination",type:"Type",charset:"Tegns\u00e6t",defer:"Defer",media:"Media",properties:"Egenskaber",name:"Navn",value:"V\u00e6rdi",content:"Indhold",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Generelt","advanced_props":"Advanceret"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/de_dlg.js
new file mode 100644
index 000000000..ecdff9ed6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.fullpage_dlg',{title:"Dokument-Eigenschaften","meta_tab":"Allgemein","appearance_tab":"Aussehen","advanced_tab":"Erweitert","meta_props":"Meta-Information",langprops:"Sprache und Codierung","meta_title":"Titel","meta_keywords":"Keywords","meta_description":"Beschreibung","meta_robots":"Robots",doctypes:"DocType",langcode:"Sprachcode",langdir:"Sprachrichtung",ltr:"Links nach Rechts",rtl:"Rechts nach Links","xml_pi":"XML Deklaration",encoding:"Zeichencodierung","appearance_bgprops":"Hintergrund-Eigenschaften","appearance_marginprops":"Abst\u00e4nde des Body","appearance_linkprops":"Linkfarben","appearance_textprops":"Text-Eigenschaften",bgcolor:"Hintergrundfarbe",bgimage:"Hintergrundbild","left_margin":"Linker Abstand","right_margin":"Rechter Abstand","top_margin":"Oberer Abstand","bottom_margin":"Unterer Abstand","text_color":"Textfarbe","font_size":"Schriftgr\u00f6\u00dfe","font_face":"Schriftart","link_color":"Linkfarbe","hover_color":"Hover-Farbe","visited_color":"Visited-Farbe","active_color":"Active-Farbe",textcolor:"Farbe",fontsize:"Schriftgr\u00f6\u00dfe",fontface:"Schriftart","meta_index_follow":"Indizieren und den Links folgen","meta_index_nofollow":"Indizieren, aber den Links nicht folgen","meta_noindex_follow":"Nicht indizieren, aber den Links folgen","meta_noindex_nofollow":"Nicht indizieren und auch nicht den Links folgen","appearance_style":"CSS-Stylesheet und Stileigenschaften",stylesheet:"CSS-Stylesheet",style:"CSS-Stil",author:"Autor",copyright:"Copyright",add:"Neues Element hinzuf\u00fcgen",remove:"Ausgew\u00e4hltes Element entfernen",moveup:"Ausgew\u00e4hltes Element nach oben bewegen",movedown:"Ausgew\u00e4hltes Element nach unten bewegen","head_elements":"\u00dcberschriftenelemente",info:"Information","add_title":"Titel-Element","add_meta":"Meta-Element","add_script":"Script-Element","add_style":"Style-Element","add_link":"Link-Element","add_base":"Base-Element","add_comment":"HTML-Kommentar","title_element":"Titel-Element","script_element":"Script-Element","style_element":"Style-Element","base_element":"Base-Element","link_element":"Link-Element","meta_element":"Meta_Element","comment_element":"Kommentar",src:"Src",language:"Sprache",href:"Href",target:"Ziel",type:"Typ",charset:"Zeichensatz",defer:"Defer",media:"Media",properties:"Eigenschaften",name:"Name",value:"Wert",content:"Inhalt",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Allgemein","advanced_props":"Erweitert"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/dv_dlg.js
new file mode 100644
index 000000000..7e931dc80
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/el_dlg.js
new file mode 100644
index 000000000..457946ddd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.fullpage_dlg',{title:"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c6\u03bf\u03c5","meta_tab":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac","appearance_tab":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7","advanced_tab":"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2","meta_props":"\u039c\u03b5\u03c4\u03b1-\u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2",langprops:"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1 \u03ba\u03b1\u03b9 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7","meta_title":"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2","meta_keywords":"\u039b\u03ad\u03be\u03b5\u03b9\u03c2 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03ac","meta_description":"\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae","meta_robots":"\u03a1\u03bf\u03bc\u03c0\u03cc\u03c4",doctypes:"Doctype",langcode:"\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2",langdir:"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2",ltr:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac",rtl:"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","xml_pi":"\u0394\u03ae\u03bb\u03c9\u03c3\u03b7 XML",encoding:"\u039a\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd","appearance_bgprops":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5","appearance_marginprops":"\u03a0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03b1 \u03c3\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2","appearance_linkprops":"\u03a7\u03c1\u03ce\u03bc\u03b1\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd","appearance_textprops":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5",bgcolor:"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5",bgimage:"\u0395\u03b9\u03ba\u03cc\u03bd\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5","left_margin":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03cc \u03c0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03bf","right_margin":"\u0394\u03b5\u03be\u03b9\u03cc \u03c0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03bf","top_margin":"\u03a0\u03ac\u03bd\u03c9 \u03c0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03bf","bottom_margin":"\u039a\u03ac\u03c4\u03c9 \u03c0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03bf","text_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","font_size":"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd","font_face":"\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac","link_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","hover_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 (Hover)","visited_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 (Visited)","active_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 (Active)",textcolor:"\u03a7\u03c1\u03ce\u03bc\u03b1",fontsize:"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd",fontface:"\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac","meta_index_follow":"\u039a\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03b7\u03b8\u03bf\u03cd\u03bd \u03bf\u03b9 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03b9","meta_index_nofollow":"\u039a\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03bc\u03b7\u03bd \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03b7\u03b8\u03bf\u03cd\u03bd \u03bf\u03b9 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03b9","meta_noindex_follow":"\u03a7\u03c9\u03c1\u03af\u03c2 \u03ba\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03b7\u03b8\u03bf\u03cd\u03bd \u03bf\u03b9 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03b9","meta_noindex_nofollow":"\u03a7\u03c9\u03c1\u03af\u03c2 \u03ba\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03bc\u03b7\u03bd \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03b7\u03b8\u03bf\u03cd\u03bd \u03bf\u03b9 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03b9","appearance_style":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c3\u03c4\u03c5\u03bb \u03ba\u03b1\u03b9 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03c3\u03c4\u03c5\u03bb",stylesheet:"\u0391\u03c1\u03c7\u03b5\u03af\u03bf \u03c3\u03c4\u03c5\u03bb",style:"\u03a3\u03c4\u03c5\u03bb",author:"\u03a3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ad\u03b1\u03c2",copyright:"\u0394\u03b9\u03ba\u03b1\u03af\u03c9\u03bc\u03b1 \u03ba\u03b1\u03c4\u03b1\u03c3\u03ba\u03b5\u03c5\u03b1\u03c3\u03c4\u03ae",add:"\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5",remove:"\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5",moveup:"\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5 \u03c0\u03ac\u03bd\u03c9",movedown:"\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5 \u03ba\u03ac\u03c4\u03c9","head_elements":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03ba\u03b5\u03c6\u03b1\u03bb\u03ae\u03c2",info:"\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2","add_title":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c4\u03af\u03c4\u03bb\u03bf\u03c5","add_meta":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03bc\u03b5\u03c4\u03b1-\u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b1\u03c2","add_script":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf Script","add_style":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c3\u03c4\u03c5\u03bb","add_link":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","add_base":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03b2\u03ac\u03c3\u03b7\u03c2","add_comment":"\u039a\u03cc\u03bc\u03b2\u03bf\u03c2 \u03c3\u03c7\u03bf\u03bb\u03af\u03bf\u03c5","title_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c4\u03af\u03c4\u03bb\u03bf\u03c5","script_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf Script","style_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c3\u03c4\u03c5\u03bb","base_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03b2\u03ac\u03c3\u03b7\u03c2","link_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","meta_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03bc\u03b5\u03c4\u03b1-\u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b1\u03c2","comment_element":"\u03a3\u03c7\u03cc\u03bb\u03b9\u03bf",src:"\u03a0\u03b7\u03b3\u03ae",language:"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1",href:"Href",target:"\u03a3\u03c4\u03cc\u03c7\u03bf\u03c2",type:"\u03a4\u03cd\u03c0\u03bf\u03c2",charset:"\u03a3\u03b5\u03c4 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd",defer:"Defer",media:"Media",properties:"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2",name:"\u038c\u03bd\u03bf\u03bc\u03b1",value:"\u03a4\u03b9\u03bc\u03ae",content:"\u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf",rel:"Rel",rev:"Rev",hreflang:"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1 Href","general_props":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac","advanced_props":"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js
new file mode 100644
index 000000000..516edc74f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/eo_dlg.js
new file mode 100644
index 000000000..bd11ff311
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.fullpage_dlg',{title:"Atributoj de la dokumento","meta_tab":"\u011ceneralaj","appearance_tab":"Aspekto","advanced_tab":"Spertaj","meta_props":"Meta-informo",langprops:"Lingvo kaj enkodigo","meta_title":"Titolo","meta_keywords":"\u015closilvortoj","meta_description":"Priskribo","meta_robots":"Robotoj",doctypes:"Doctype",langcode:"Lingvokodo",langdir:"Tekstodirekto",ltr:"Maldekstre-Dekstren",rtl:"Dekstre-Maldekstren","xml_pi":"Deklaro XML",encoding:"Signa enkodigo","appearance_bgprops":"Fonaj atributoj","appearance_marginprops":"Mar\u011denoj (BODY)","appearance_linkprops":"Koloroj de ligiloj","appearance_textprops":"Atributoj de teksto",bgcolor:"Koloro de fono",bgimage:"Bildo de fono","left_margin":"Maldekstra mar\u011deno","right_margin":"Dekstra mar\u011deno","top_margin":"Supra mar\u011deno","bottom_margin":"Suba mar\u011deno","text_color":"Tekstokoloro","font_size":"Grandeco de tiparo","font_face":"Tiparo","link_color":"Koloro de ligiloj","hover_color":"Koloro dum \u015dvebo","visited_color":"Koloro de vizitita ligilo","active_color":"Koloro de aktiva ligilo",textcolor:"Koloro",fontsize:"Grandeco de tiparo",fontface:"Tiparo","meta_index_follow":"Indeksi kaj sekvi ligilojn","meta_index_nofollow":"Indeksi kaj ne sekvi ligilojn","meta_noindex_follow":"Sekvi ligilojn, sed ne indeksi","meta_noindex_nofollow":"Ne indeksi / ne sekvi ligilojn.","appearance_style":"Atributoj de stilfolio",stylesheet:"Stilfolio",style:"Stilo",author:"A\u016dtoro",copyright:"Kopirajto",add:"Aldoni novan elementon",remove:"Forigi elektitan elementon",moveup:"Suprenigi elektitan elementon",movedown:"Subigi elektitan elementon","head_elements":"Elementoj HEAD",info:"Informo","add_title":"TITLE","add_meta":"META","add_script":"SCRIPT","add_style":"STYLE","add_link":"LINK","add_base":"BASE","add_comment":"Komento","title_element":"TITLE","script_element":"SCRIPT","style_element":"STYLE","base_element":"BASE","link_element":"LINK","meta_element":"META","comment_element":"Komento",src:"src",language:"Lingvo",href:"href",target:"Celo",type:"Tipo",charset:"Signa enkodigo",defer:"Prokrasti",media:"Enhavkomunikilo",properties:"Atributoj",name:"Nomo",value:"Valoro",content:"Enhavo",rel:"rel",rev:"rev",hreflang:"href lang","general_props":"\u0108efaj","advanced_props":"Spertaj"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/es_dlg.js
new file mode 100644
index 000000000..94e52a71f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.fullpage_dlg',{title:"Propiedades del documento","meta_tab":"General","appearance_tab":"Apariencia","advanced_tab":"Avanzado","meta_props":"Informaci\u00f3n Meta",langprops:"Lenguaje y codificaci\u00f3n","meta_title":"T\u00edtulo","meta_keywords":"Palabras clave","meta_description":"Descripci\u00f3n","meta_robots":"Robots",doctypes:"Tipo de doc.",langcode:"C\u00f3digo del lenguaje",langdir:"Direcci\u00f3n del lenguaje",ltr:"Izquierda a derecha",rtl:"Derecha a izquierda","xml_pi":"Declaraci\u00f3n XML",encoding:"Codificaci\u00f3n de caracteres","appearance_bgprops":"Propiedades del fondo","appearance_marginprops":"M\u00e1rgenes","appearance_linkprops":"Colores del v\u00ednculo","appearance_textprops":"Propiedades de texto",bgcolor:"Color de fondo",bgimage:"Imagen de fondo","left_margin":"Margen izquierdo","right_margin":"Margen derecho","top_margin":"Margen superior","bottom_margin":"Margen inferior","text_color":"Color del texto","font_size":"Tama\u00f1o de fuente","font_face":"Fuente","link_color":"Color de v\u00ednculo","hover_color":"Color rat\u00f3n encima","visited_color":"Color visitado","active_color":"Color activo",textcolor:"Color",fontsize:"Tama\u00f1o de fuente",fontface:"Fuente","meta_index_follow":"Indexar y seguir los v\u00ednculos","meta_index_nofollow":"Indexar y no seguir los v\u00ednculos","meta_noindex_follow":"No indexar pero seguir v\u00ednculos","meta_noindex_nofollow":"No indexar y no seguir v\u00ednculos","appearance_style":"Propiedades de hoja de estilos y estilo",stylesheet:"Hoja de estilo",style:"Estilo",author:"Autor",copyright:"Copyright",add:"Agregar nuevo elemento",remove:"Eliminar elemento seleccionado",moveup:"Mover elemento seleccionado hacia arriba",movedown:"Mover elemento seleccionado hacia abajo","head_elements":"Elemento Head",info:"Informaci\u00f3n","add_title":"Elemento Title","add_meta":"Elemento Meta","add_script":"Elemento Script","add_style":"Elemento Style","add_link":"Elemento Link","add_base":"Elemento Base","add_comment":"Nodo Comment","title_element":"Elemento Title","script_element":"Elemento Script","style_element":"Elemento Style","base_element":"Elemento Base","link_element":"Elemento Link","meta_element":"Elemento Meta","comment_element":"Comentario",src:"Src",language:"Lenguaje",href:"Href",target:"Target",type:"Tipo",charset:"Charset",defer:"Defer",media:"Medio",properties:"Propiedades",name:"Nombre",value:"Valor",content:"Contenido",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Avanzado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/et_dlg.js
new file mode 100644
index 000000000..f55f77639
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.fullpage_dlg',{title:"Dokumendi omadused","meta_tab":"\u00dcldine","appearance_tab":"V\u00e4limus","advanced_tab":"P\u00f5hjalikum","meta_props":"\u201eMeta\u201c informatioon",langprops:"Keel ja kodeering","meta_title":"Pealkiri","meta_keywords":"M\u00e4rks\u00f5nad","meta_description":"Kirjeldus","meta_robots":"Robotid",doctypes:"Dokumendi t\u00fc\u00fcp",langcode:"Keele kood",langdir:"Keele suund",ltr:"Vasakult paremale",rtl:"Paremalt vasakule","xml_pi":"XML avaldus",encoding:"Karakteri kodeering","appearance_bgprops":"Tausta seadistus","appearance_marginprops":"Sisu piir","appearance_linkprops":"Lingi v\u00e4rv","appearance_textprops":"Teksti seaded",bgcolor:"Tausta v\u00e4rv",bgimage:"Tausta pilt","left_margin":"Vasak piir","right_margin":"Parem piir","top_margin":"\u00dclemine piir","bottom_margin":"Alumine piir","text_color":"Teksti v\u00e4rv","font_size":"Fondi suurus","font_face":"Fondi n\u00e4gu","link_color":"Lingi v\u00e4rv","hover_color":"\u00dcle-v\u00e4rv","visited_color":"K\u00fclastatud-v\u00e4rv","active_color":"Aktiivne-v\u00e4rv",textcolor:"V\u00f6rv",fontsize:"Fondi suurus",fontface:"Font","meta_index_follow":"M\u00e4rgi ja j\u00e4rgi linki","meta_index_nofollow":"M\u00e4rgi ja \u00e4ra j\u00e4rgi linki","meta_noindex_follow":"\u00c4ra m\u00e4rgi linki, aga j\u00e4rgi linki","meta_noindex_nofollow":"\u00c4ra m\u00e4rgi linki ja \u00e4ra j\u00e4rgi linki","appearance_style":"Stiilileht ja stiili seaded",stylesheet:"Stiilileht",style:"Stiil",author:"Autor",copyright:"Autorikaitse",add:"Lisa uus element",remove:"Eemalda valitud element",moveup:"Liiguta valitud element \u00fclesse",movedown:"Liiguta valitud element alla","head_elements":"P\u00f5hielemendid",info:"Informatioon","add_title":"Pealkirja element","add_meta":"\u201eMeta\u201c element","add_script":"Skript\u2019i element","add_style":"Stiili element","add_link":"Lingi element","add_base":"Baaselement","add_comment":"Kommentaar","title_element":"Pealkirja element","script_element":"Skript\u2019i element","style_element":"Stiili element","base_element":"Baaselement","link_element":"Lingi element","meta_element":"\u201eMeta\u201c element","comment_element":"kommentaar",src:"Src",language:"Keel",href:"Href",target:"Sihtm\u00e4rk",type:"T\u00fc\u00fcp",charset:"Charset",defer:"Edasi l\u00fckkamine",media:"Meedia",properties:"Seaded",name:"Nimi",value:"V\u00e4\u00e4rtus",content:"Sisu",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u00dcldine","advanced_props":"T\u00e4psustatud"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/eu_dlg.js
new file mode 100644
index 000000000..4ca2fd9a9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.fullpage_dlg',{title:"Dokumentuaren ezaugarriak","meta_tab":"Orokorra","appearance_tab":"Itxura","advanced_tab":"Aurreratua","meta_props":"Meta datuak",langprops:"Hizkuntza eta kodeketa","meta_title":"Izenburua","meta_keywords":"Hitz-gakoak","meta_description":"Deskribapena","meta_robots":"Robotak",doctypes:"Dokumentu mota",langcode:"Hizkuntza kodea",langdir:"Hizkuntza norabidea",ltr:"Ezkerretik eskuinera",rtl:"Eskuinetik ezkerrera","xml_pi":"XML zehaztapena",encoding:"Karaktere kodeketa","appearance_bgprops":"Atzeko ezaugarriak","appearance_marginprops":"Gorputzaren marginak","appearance_linkprops":"Lotura koloreak","appearance_textprops":"Testu ezaugarriak",bgcolor:"Atzeko kolorea",bgimage:"Atzeko irudia","left_margin":"Ezker margina","right_margin":"Eskuin margina","top_margin":"Goiko margina","bottom_margin":"Beheko margina","text_color":"Testu kolorea","font_size":"Letra tamaina","font_face":"Letra mota","link_color":"Loturaren kolorea","hover_color":"Lotura gainean kolorea","visited_color":"Bisitatutako lotura kolorea","active_color":"Lotura aktiboaren kolorea",textcolor:"Kolorea",fontsize:"Letra tamaina",fontface:"Letra mota","meta_index_follow":"Indexatu eta jarraitu loturak","meta_index_nofollow":"Indexatu eta ez jarraitu loturak","meta_noindex_follow":"Ez indexatu, baina jarraitu loturak","meta_noindex_nofollow":"Ez indexatu eta ez jarraitu loturak","appearance_style":"Estilo orri eta estilo ezaugarriak",stylesheet:"Estilo orria",style:"Estiloa",author:"Egilea",copyright:"Copyright",add:"Gehitu elementua",remove:"Ezabatu aukeratutako elementua",moveup:"Mugitu aukeratutako elementua gora",movedown:"Mugitu aukeratutako elementua behera","head_elements":"Goiburuko elementuak",info:"Informazioa","add_title":"Title elementua","add_meta":"Meta elementua","add_script":"Script elementua","add_style":"Style elementua","add_link":"Link elementua","add_base":"Base elementua","add_comment":"Comment nodoa","title_element":"Title elementua","script_element":"Script elementua","style_element":"Style elementua","base_element":"Base elementua","link_element":"Link elementua","meta_element":"Meta elementua","comment_element":"Iruzkina",src:"Src",language:"Hizkuntza",href:"Href",target:"Helburua",type:"Mota",charset:"Karaktereak",defer:"Defer",media:"Media",properties:"Ezaugarriak",name:"Izena",value:"Balioa",content:"Edukia",rel:"Rel",rev:"Rev",hreflang:"Href hizkuntza","general_props":"Orokorra","advanced_props":"Aurreratua"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fa_dlg.js
new file mode 100644
index 000000000..f826495f0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.fullpage_dlg',{title:"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0646\u062f","meta_tab":"\u0639\u0645\u0648\u0645\u06cc","appearance_tab":"\u0638\u0627\u0647\u0631","advanced_tab":"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647","meta_props":"\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062a\u0627 (Meta)",langprops:"\u0632\u0628\u0627\u0646 \u0648 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc (Encoding)","meta_title":"\u0639\u0646\u0648\u0627\u0646","meta_keywords":"\u06a9\u0644\u0645\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc","meta_description":"\u062a\u0648\u0636\u06cc\u062d","meta_robots":"\u0631\u0648\u0628\u0627\u062a \u0647\u0627 (Robots)",doctypes:"\u0646\u0648\u0639 \u0633\u0646\u062f",langcode:"\u06a9\u062f \u0632\u0628\u0627\u0646",langdir:"\u062c\u0647\u062a \u0632\u0628\u0627\u0646",ltr:"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a",rtl:"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e","xml_pi":"\u0627\u0639\u0644\u0627\u0646 XML",encoding:"\u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc (Encoding) \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631","appearance_bgprops":"\u0645\u0634\u062e\u0635\u0627\u062a \u0632\u0645\u06cc\u0646\u0647","appearance_marginprops":"\u062d\u0627\u0634\u06cc\u0647 \u0647\u0627\u06cc \u0628\u062f\u0646\u0647 (Body)","appearance_linkprops":"\u0631\u0646\u06af \u0647\u0627\u06cc \u0644\u06cc\u0646\u06a9","appearance_textprops":"\u0645\u0634\u062e\u0635\u0627\u062a \u0645\u062a\u0646",bgcolor:"\u0631\u0646\u06af \u0632\u0645\u06cc\u0646\u0647",bgimage:"\u062a\u0635\u0648\u06cc\u0631 \u0632\u0645\u06cc\u0646\u0647","left_margin":"\u062d\u0627\u0634\u06cc\u0647 \u0686\u067e","right_margin":"\u062d\u0627\u0634\u06cc\u0647 \u0631\u0627\u0633\u062a","top_margin":"\u062d\u0627\u0634\u06cc\u0647 \u0628\u0627\u0644\u0627","bottom_margin":"\u062d\u0627\u0634\u06cc\u0647 \u067e\u0627\u06cc\u06cc\u0646","text_color":"\u0631\u0646\u06af \u0645\u062a\u0646","font_size":"\u0627\u0646\u062f\u0627\u0632\u0647 \u0642\u0644\u0645","font_face":"\u0638\u0627\u0647\u0631 \u0642\u0644\u0645","link_color":"\u0631\u0646\u06af \u0642\u0644\u0645","hover_color":"\u0631\u0646\u06af \u062f\u0631 \u062d\u0627\u0644\u062a \u0642\u0631\u0627\u0631\u06af\u06cc\u0631\u06cc \u0645\u0648\u0633","visited_color":"\u0631\u0646\u06af \u062f\u0631 \u062d\u0627\u0644\u062a \u0628\u0627\u0632\u062f\u06cc\u062f \u0634\u062f\u0647","active_color":"\u0631\u0646\u06af \u062f\u0631 \u062d\u0627\u0644\u062a \u0641\u0639\u0627\u0644",textcolor:"\u0631\u0646\u06af",fontsize:"\u0627\u0646\u062f\u0627\u0632\u0647 \u0642\u0644\u0645",fontface:"\u062e\u0627\u0646\u0648\u0627\u062f\u0647 \u0642\u0644\u0645","meta_index_follow":"\u0641\u0647\u0631\u0633\u062a \u0648 \u062f\u0646\u0628\u0627\u0644\u0647 \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u0647\u0627","meta_index_nofollow":"\u0641\u0647\u0631\u0633\u062a \u0648 \u0639\u062f\u0645 \u062f\u0646\u0628\u0627\u0644\u0647 \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u0647\u0627","meta_noindex_follow":"\u0639\u062f\u0645 \u0641\u0647\u0631\u0633\u062a \u0627\u0645\u0627 \u062f\u0646\u0628\u0627\u0644\u0647 \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u0647\u0627","meta_noindex_nofollow":"\u0639\u062f\u0645 \u0641\u0647\u0631\u0633\u062a \u0648 \u0639\u062f\u0645 \u062f\u0646\u0628\u0627\u0644\u0647 \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u0647\u0627","appearance_style":"\u0648\u0631\u0642\u0647 \u0627\u0633\u062a\u0627\u06cc\u0644 \u0648 \u0645\u0634\u062e\u0635\u0627\u062a \u0627\u0633\u062a\u0627\u06cc\u0644",stylesheet:"\u0648\u0631\u0642\u0647 \u0627\u0633\u062a\u0627\u06cc\u0644",style:"\u0627\u0633\u062a\u0627\u06cc\u0644",author:"\u0645\u0624\u0644\u0641",copyright:"\u062d\u0642 \u0627\u0646\u062d\u0635\u0627\u0631\u06cc",add:"\u0627\u0641\u0632\u0648\u062f\u0646 \u0639\u0646\u0635\u0631 \u062c\u062f\u06cc\u062f",remove:"\u062d\u0630\u0641 \u0639\u0646\u0635\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647",moveup:"\u0627\u0646\u062a\u0642\u0627\u0644 \u0639\u0646\u0635\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0628\u0647 \u0628\u0627\u0644\u0627",movedown:"\u0627\u0646\u062a\u0642\u0627\u0644 \u0639\u0646\u0635\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0628\u0647 \u067e\u0627\u06cc\u06cc\u0646","head_elements":"\u0639\u0646\u0627\u0635\u0631 \u0633\u0631 (Head)",info:"\u0627\u0637\u0644\u0627\u0639\u0627\u062a","add_title":"\u0639\u0646\u0635\u0631 \u0639\u0646\u0648\u0627\u0646","add_meta":"\u0639\u0646\u0635\u0631 \u0645\u062a\u0627 (Meta)","add_script":"\u0639\u0646\u0635\u0631 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a (Script)","add_style":"\u0639\u0646\u0635\u0631 \u0627\u0633\u062a\u0627\u06cc\u0644 (Style)","add_link":"\u0639\u0646\u0635\u0631 \u0644\u06cc\u0646\u06a9 (Link)","add_base":"\u0639\u0646\u0635\u0631 \u067e\u0627\u06cc\u0647 (Base)","add_comment":"\u06af\u0631\u0647 \u062a\u0648\u0636\u06cc\u062d","title_element":"\u0639\u0646\u0635\u0631 \u0639\u0646\u0648\u0627\u0646 (Title)","script_element":"\u0639\u0646\u0635\u0631 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a (Script)","style_element":"\u0639\u0646\u0635\u0631 \u0627\u0633\u062a\u0627\u06cc\u0644 (Style)","base_element":"\u0639\u0646\u0635\u0631 \u067e\u0627\u06cc\u0647","link_element":"\u0639\u0646\u0635\u0631 \u0644\u06cc\u0646\u06a9","meta_element":"\u0639\u0646\u0635\u0631 \u0645\u062a\u0627 (Meta)","comment_element":"\u062a\u0648\u0636\u06cc\u062d",src:"\u0645\u0646\u0628\u0639 (Src)",language:"\u0632\u0628\u0627\u0646",href:"\u0622\u062f\u0631\u0633 (Href)",target:"\u0645\u0642\u0635\u062f (Target)",type:"\u0646\u0648\u0639",charset:"\u0645\u062c\u0645\u0648\u0639\u0647 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 (Charset)",defer:"Defer",media:"\u0631\u0633\u0627\u0646\u0647 (Media)",properties:"\u0645\u0634\u062e\u0635\u0627\u062a",name:"\u0646\u0627\u0645",value:"\u0645\u0642\u062f\u0627\u0631",content:"\u0645\u062d\u062a\u0648\u0627",rel:"Rel",rev:"Rev",hreflang:"\u0632\u0628\u0627\u0646 Href","general_props":"\u0639\u0645\u0648\u0645\u06cc","advanced_props":"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fi_dlg.js
new file mode 100644
index 000000000..3f1fb393f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.fullpage_dlg',{title:"Tiedoston asetukset","meta_tab":"Yleinen","appearance_tab":"Ulkoasu","advanced_tab":"Edistynyt","meta_props":"Metatiedot",langprops:"Kieli ja koodaus","meta_title":"Otsikko","meta_keywords":"Avainsanat","meta_description":"Kuvaus","meta_robots":"Robotit",doctypes:"Dokumenttityypit",langcode:"Kielen koodi",langdir:"Kielen suunta",ltr:"Vasemmalta oikealle",rtl:"Oikealta vasemmalle","xml_pi":"XML-ilmoitus",encoding:"Tekstin koodaus","appearance_bgprops":"Taustan asetukset","appearance_marginprops":"Body-marginaalit","appearance_linkprops":"Linkkien v\u00e4rit","appearance_textprops":"Tekstin asetukset",bgcolor:"Taustan v\u00e4ri",bgimage:"Taustakuva","left_margin":"Vasen marginaali","right_margin":"Oikea marginaali","top_margin":"Yl\u00e4marginaali","bottom_margin":"Alamarginaali","text_color":"Tekstin v\u00e4ri","font_size":"Fonttikoko","font_face":"Fontti","link_color":"Linkin v\u00e4ri","hover_color":"Hover-v\u00e4ri","visited_color":"Vierailtu v\u00e4ri","active_color":"Aktiivinen v\u00e4ri",textcolor:"V\u00e4ri",fontsize:"Fonttikoko",fontface:"Fontti","meta_index_follow":"Indeksoi ja seuraa linkkej\u00e4","meta_index_nofollow":"Indeksoi, mutta \u00e4l\u00e4 seuraa linkkej\u00e4","meta_noindex_follow":"\u00c4l\u00e4 indeksoi, mutta seuraa linkkej\u00e4.","meta_noindex_nofollow":"\u00c4l\u00e4 indeksoi, \u00e4l\u00e4k\u00e4 seuraa linkkej\u00e4","appearance_style":"Tyylitiedosto ja tyylin asetukset",stylesheet:"Tyylitiedosto",style:"Tyyli",author:"Kirjoittaja",copyright:"Copyright",add:"Lis\u00e4\u00e4 uusi elementti",remove:"Poista valittu elementti",moveup:"Siirr\u00e4 valittua elementti\u00e4 yl\u00f6s",movedown:"Siirr\u00e4 valittua elementti\u00e4 alas","head_elements":"P\u00e4\u00e4elementti",info:"Informaatio","add_title":"Otsikkoelementti","add_meta":"Meta-elementti","add_script":"Script-elementti","add_style":"Tyylielementti","add_link":"Linkkielementti","add_base":"Base-elementti","add_comment":"Yleinen elementti","title_element":"Otsikkoelementti","script_element":"Script-elementti","style_element":"Tyylielementti","base_element":"Base-elementti","link_element":"Linkkielementti","meta_element":"Meta-elementti","comment_element":"Kommentti",src:"L\u00e4hde",language:"Kieli",href:"Href",target:"Kohde",type:"Tyyppi",charset:"Kirjasintyyppi",defer:"Mukautuminen",media:"Media",properties:"Asetukset",name:"Nimi",value:"Arvo",content:"Sis\u00e4lt\u00f6",rel:"Rel",rev:"Rev",hreflang:"Href-kieli","general_props":"Yleinen","advanced_props":"Edistynyt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fr_dlg.js
new file mode 100644
index 000000000..c2ddc65db
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.fullpage_dlg',{title:"Propri\u00e9t\u00e9s du document","meta_tab":"G\u00e9n\u00e9ral","appearance_tab":"Apparence","advanced_tab":"Avanc\u00e9","meta_props":"Metadonn\u00e9es",langprops:"Langue et encodage","meta_title":"Titre","meta_keywords":"Mots-cl\u00e9s","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Code de la langue",langdir:"Sens de lecture",ltr:"De gauche \u00e0 droite",rtl:"De droite \u00e0 gauche","xml_pi":"D\u00e9claration XML",encoding:"Encodage des caract\u00e8res","appearance_bgprops":"Propri\u00e9t\u00e9s du fond","appearance_marginprops":"Marge du corps de la page","appearance_linkprops":"Couleurs des liens","appearance_textprops":"Propri\u00e9t\u00e9s du texte",bgcolor:"Couleur de fond",bgimage:"Image de fond","left_margin":"Marge de gauche","right_margin":"Marge de droite","top_margin":"Marge du haut","bottom_margin":"Marge du bas","text_color":"Couleur du texte","font_size":"Taille de la police","font_face":"Nom de la police","link_color":"Couleur des liens","hover_color":"Couleur au survol","visited_color":"Couleur des liens visit\u00e9s","active_color":"Couleur du lien actif",textcolor:"Couleur",fontsize:"Taille de police",fontface:"Nom de la police","meta_index_follow":"Indexer et suivre les liens","meta_index_nofollow":"Indexer et ne pas suivre les liens","meta_noindex_follow":"Ne pas indexer et suivre les liens","meta_noindex_nofollow":"Ne pas indexer et ne pas suivre les liens","appearance_style":"Propri\u00e9t\u00e9s de la feuille de style et du style",stylesheet:"Feuille de style",style:"Style",author:"Auteur",copyright:"Copyright",add:"Ajouter un nouvel \u00e9l\u00e9ment",remove:"Retirer l\'\u00e9l\u00e9ment s\u00e9lectionn\u00e9",moveup:"D\u00e9placer l\'\u00e9l\u00e9ment s\u00e9lectionn\u00e9 vers le haut",movedown:"D\u00e9placer l\'\u00e9l\u00e9ment s\u00e9lectionn\u00e9 vers le bas","head_elements":"\u00c9l\u00e9ments d\'en-t\u00eate",info:"Information","add_title":"\u00c9l\u00e9ment de titre","add_meta":"\u00c9l\u00e9ment Meta","add_script":"\u00c9l\u00e9ment de script","add_style":"\u00c9l\u00e9ment de style","add_link":"\u00c9l\u00e9ment de lien","add_base":"\u00c9l\u00e9ment de base","add_comment":"Commentaire","title_element":"\u00c9l\u00e9ment de titre","script_element":"\u00c9l\u00e9ment de script","style_element":"\u00c9l\u00e9ment de style","base_element":"\u00c9l\u00e9ment de base","link_element":"\u00c9l\u00e9ment de lien","meta_element":"\u00c9l\u00e9ment Meta","comment_element":"Commentaire",src:"Source",language:"Langue",href:"Href",target:"Cible",type:"Type",charset:"Charset",defer:"D\u00e9f\u00e9rer",media:"M\u00e9dia",properties:"Propri\u00e9t\u00e9s",name:"Nom",value:"Valeur",content:"Contenu",rel:"Rel",rev:"Rev",hreflang:"langue Href","general_props":"G\u00e9n\u00e9ral","advanced_props":"Avanc\u00e9"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/gl_dlg.js
new file mode 100644
index 000000000..d497cfc65
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.fullpage_dlg',{title:"Propiedades do documento","meta_tab":"Xeral","appearance_tab":"Apariencia","advanced_tab":"Avanzado","meta_props":"Informaci\u00f3n Meta",langprops:"Lenguaxe e codificaci\u00f3n","meta_title":"T\u00edtulo","meta_keywords":"Verbas chave","meta_description":"Descripci\u00f3n","meta_robots":"Robots",doctypes:"Tipo de doc.",langcode:"C\u00f3digo da lenguaxe",langdir:"Direcci\u00f3n da lenguaxe",ltr:"Esquerda a dereita",rtl:"Dereita a esquerda","xml_pi":"Declaraci\u00f3n XML",encoding:"Codificaci\u00f3n de caracteres","appearance_bgprops":"Propiedades do fondo","appearance_marginprops":"Marxes","appearance_linkprops":"Cores do v\u00ednculo","appearance_textprops":"Propiedades de texto",bgcolor:"Cor de fondo",bgimage:"Imaxe de fondo","left_margin":"Marxe esquerdo","right_margin":"Marxe dereito","top_margin":"Marxe superior","bottom_margin":"Marxe inferior","text_color":"Cor do texto","font_size":"Tama\u00f1o de fonte","font_face":"Fonte","link_color":"Cor de v\u00ednculo","hover_color":"Cor rato encima","visited_color":"Cor visitado","active_color":"Cor activo",textcolor:"Cor",fontsize:"Tama\u00f1o de fonte",fontface:"Fonte","meta_index_follow":"Indexar e segui-los v\u00ednculos","meta_index_nofollow":"Indexar e non segui-los v\u00ednculos","meta_noindex_follow":"Non indexar pero seguir v\u00ednculos","meta_noindex_nofollow":"Non indexar e non seguir v\u00ednculos","appearance_style":"Propiedades de folla de estilos e estilo",stylesheet:"Folla de estilo",style:"Estilo",author:"Autor",copyright:"Copyright",add:"Agregar novo elemento",remove:"Eliminar elemento seleccionado",moveup:"Mover elemento seleccionado arriba",movedown:"Mover elemento seleccionado abaixo","head_elements":"Elementos Head",info:"Informaci\u00f3n","add_title":"Elemento Title","add_meta":"Elemento Meta","add_script":"Elemento Script","add_style":"Elemento Style","add_link":"Elemento Link","add_base":"Elemento Base","add_comment":"Nodo Comment","title_element":"Elemento Title","script_element":"Elemento Script","style_element":"Elemento Style","base_element":"Elemento Base","link_element":"Elemento Link","meta_element":"Elemento Meta","comment_element":"Comentario",src:"Src",language:"Lenguaxe",href:"Href",target:"Obxetivo",type:"Tipo",charset:"Charset",defer:"Defer",media:"Medio",properties:"Propiedades",name:"Nome",value:"Valor",content:"Contido",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Xeral","advanced_props":"Avanzado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/gu_dlg.js
new file mode 100644
index 000000000..d7a3e45c3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/he_dlg.js
new file mode 100644
index 000000000..69faae39a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.fullpage_dlg',{title:"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05de\u05e1\u05de\u05da","meta_tab":"\u05db\u05dc\u05dc\u05d9","appearance_tab":"\u05de\u05e8\u05d0\u05d4","advanced_tab":"\u05de\u05ea\u05e7\u05d3\u05dd","meta_props":"\u05ea\u05d2\u05d9 \u05de\u05d8\u05d4",langprops:"\u05e9\u05e4\u05d4 \u05d5\u05e7\u05d9\u05d3\u05d5\u05d3","meta_title":"\u05db\u05d5\u05ea\u05e8\u05ea","meta_keywords":"\u05de\u05d9\u05dc\u05d5\u05ea \u05de\u05e4\u05ea\u05d7","meta_description":"\u05ea\u05d9\u05d0\u05d5\u05e8","meta_robots":"\u05e8\u05d5\u05d1\u05d5\u05d8\u05d9\u05dd",doctypes:"Doctype",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc","xml_pi":"XML declaration",encoding:"\u05e7\u05d9\u05d3\u05d5\u05d3 \u05ea\u05d5\u05d5\u05d9\u05dd","appearance_bgprops":"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e8\u05e7\u05e2","appearance_marginprops":"Body margins","appearance_linkprops":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd","appearance_textprops":"Text properties",bgcolor:"\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2",bgimage:"\u05ea\u05de\u05d5\u05e0\u05ea \u05e8\u05e7\u05e2","left_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05e9\u05de\u05d0\u05dc\u05d9\u05d9\u05dd","right_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05d9\u05de\u05e0\u05d9\u05d9\u05dd","top_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05e2\u05dc\u05d9\u05d5\u05e0\u05d9\u05dd","bottom_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05ea\u05d7\u05ea\u05d9\u05d9\u05dd","text_color":"\u05e6\u05d1\u05e2 \u05d8\u05e7\u05e1\u05d8","font_size":"\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05df","font_face":"\u05e1\u05d5\u05d2 \u05d2\u05d5\u05e4\u05df","link_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8","hover_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1\u05de\u05e2\u05d1\u05e8 \u05e2\u05db\u05d1\u05e8","visited_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05e9\u05e0\u05e6\u05e4\u05d4","active_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05e4\u05e2\u05d9\u05dc",textcolor:"\u05e6\u05d1\u05e2",fontsize:"\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05df",fontface:"\u05d2\u05d5\u05e4\u05df","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"\u05e1\u05d2\u05e0\u05d5\u05df \u05e2\u05d9\u05e6\u05d5\u05d1",style:"\u05e2\u05d9\u05e6\u05d5\u05d1",author:"\u05db\u05d5\u05ea\u05d1",copyright:"\u05d6\u05db\u05d5\u05d9\u05d5\u05ea \u05d9\u05d5\u05e6\u05e8\u05d9\u05dd",add:"\u05d4\u05d5\u05e1\u05e3 \u05d0\u05dc\u05de\u05e0\u05d8 \u05d7\u05d3\u05e9",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"\u05de\u05d9\u05d3\u05e2","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"\u05d0\u05dc\u05de\u05e0\u05d8 \u05e2\u05d9\u05e6\u05d5\u05d1","base_element":"\u05d0\u05dc\u05de\u05e0\u05d8 \u05d1\u05e1\u05d9\u05e1","link_element":"\u05d0\u05dc\u05de\u05e0\u05d8 \u05e7\u05d9\u05e9\u05d5\u05e8","meta_element":"Meta element","comment_element":"\u05ea\u05d2\u05d5\u05d1\u05d4",src:"\u05db\u05ea\u05d5\u05d1\u05ea \u05de\u05e7\u05d5\u05e8",language:"\u05e9\u05e4\u05d4",href:"HREF",target:"\u05d9\u05e2\u05d3",type:"\u05e1\u05d5\u05d2",charset:"\u05e7\u05d9\u05d3\u05d5\u05d3",defer:"Defer",media:"\u05de\u05d3\u05d9\u05d4",properties:"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9\u05dd",name:"\u05e9\u05dd",value:"\u05e2\u05e8\u05da",content:"\u05ea\u05d5\u05db\u05df",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u05db\u05dc\u05dc\u05d9","advanced_props":"\u05de\u05ea\u05e7\u05d3\u05dd"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hi_dlg.js
new file mode 100644
index 000000000..aea6db5f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hr_dlg.js
new file mode 100644
index 000000000..8c8f40cc1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.fullpage_dlg',{title:"Svojstva dokumenta","meta_tab":"Op\u0107e","appearance_tab":"Izgled","advanced_tab":"Napredno","meta_props":"Meta informacije",langprops:"Jezik i kodiranje","meta_title":"Naslov","meta_keywords":"Klju\u010dne rije\u010di","meta_description":"Opis","meta_robots":"Roboti",doctypes:"Doctype",langcode:"Kod jezika",langdir:"Smjer jezika",ltr:"S lijeva na desno",rtl:"S desna na lijevo","xml_pi":"XML deklaracija",encoding:"Kodiranje znakova","appearance_bgprops":"Svojstva pozadine","appearance_marginprops":"Margina","appearance_linkprops":"Boja linka","appearance_textprops":"Svojstva teksta",bgcolor:"Boja pozadine",bgimage:"Pozadinska slika","left_margin":"Lijeva margina","right_margin":"Desna margina","top_margin":"Gornja margina","bottom_margin":"Donja margina","text_color":"Boja teksta","font_size":"Veli\u010dina pisma","font_face":"Pismo","link_color":"Boja linka","hover_color":"Boja linka ispod mi\u0161a","visited_color":"Boja posje\u0107enog linka","active_color":"Boja aktivnog linka",textcolor:"Boja",fontsize:"Veli\u010dina fonta",fontface:"Skupina fontova","meta_index_follow":"Indeksiraj i slijedi linkove","meta_index_nofollow":"Indeksiraj i ne slijedi linkove","meta_noindex_follow":"Ne indeksiraj i slijedi linkove","meta_noindex_nofollow":"Ne indeksiraj i ne slijedi linkove","appearance_style":"CSS i svojstva stila",stylesheet:"CSS",style:"Stil",author:"Autor",copyright:"Autorska prava",add:"Dodaj novi element",remove:"Ukloni odabrani element",moveup:"Pomakni odabrani element prema gore",movedown:"Pomakni odabrani element prema dolje","head_elements":"Elementi zaglavlja",info:"Informacije","add_title":"Naslovni element","add_meta":"Meta element","add_script":"Skriptni element","add_style":"Sitlski element","add_link":"Element linka","add_base":"Osnovni element","add_comment":"Komentar","title_element":"Naslovni element","script_element":"Skriptni element","style_element":"Stilski element","base_element":"Temeljni element","link_element":"Element linka","meta_element":"Meta element","comment_element":"Komentar",src:"Src",language:"Jezik",href:"Href",target:"Meta",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Svojstva",name:"Ime",value:"Vrijednost",content:"Sadr\u017eaj",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Op\u0107e","advanced_props":"Napredno"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hu_dlg.js
new file mode 100644
index 000000000..b20670532
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.fullpage_dlg',{title:"Dokumentum tulajdons\u00e1gai","meta_tab":"\u00c1ltal\u00e1nos","appearance_tab":"Megjelen\u00e9s","advanced_tab":"Halad\u00f3","meta_props":"Meta inform\u00e1ci\u00f3",langprops:"Nyelv \u00e9s k\u00f3dol\u00e1s","meta_title":"C\u00edm","meta_keywords":"Kulcsszavak","meta_description":"Le\u00edr\u00e1s","meta_robots":"Robotok",doctypes:"Doctype",langcode:"Nyelvk\u00f3d",langdir:"\u00cdr\u00e1s ir\u00e1nya",ltr:"Balr\u00f3l jobra",rtl:"Jobbr\u00f3l balra","xml_pi":"XML deklar\u00e1ci\u00f3",encoding:"Karakterk\u00f3dol\u00e1s","appearance_bgprops":"H\u00e1tt\u00e9r tulajdons\u00e1gai","appearance_marginprops":"Test keret","appearance_linkprops":"Link sz\u00ednek","appearance_textprops":"Sz\u00f6veg tulajdons\u00e1gai",bgcolor:"H\u00e1tt\u00e9rsz\u00edn",bgimage:"H\u00e1tt\u00e9rk\u00e9p","left_margin":"Bal marg\u00f3","right_margin":"Jobb marg\u00f3","top_margin":"Fels\u0151 marg\u00f3","bottom_margin":"Als\u00f3 marg\u00f3","text_color":"Sz\u00f6vegsz\u00edn","font_size":"Bet\u0171m\u00e9ret","font_face":"Bet\u0171t\u00edpus","link_color":"Link sz\u00edn","hover_color":"F\u00f6l\u00e9vitt sz\u00edn","visited_color":"L\u00e1togatva sz\u00edn","active_color":"Akt\u00edv sz\u00edn",textcolor:"Sz\u00edn",fontsize:"Bet\u0171m\u00e9ret",fontface:"Bet\u0171t\u00edpus","meta_index_follow":"Indexel \u00e9s k\u00f6veti a linkeket","meta_index_nofollow":"Indexel, de nem k\u00f6veti a linkeket","meta_noindex_follow":"Nem indexel, de k\u00f6veti a linkeket","meta_noindex_nofollow":"Nem indexel \u00e9s nem k\u00f6veti a linkeket","appearance_style":"Stylesheet \u00e9s style tulajdons\u00e1gok",stylesheet:"Stylesheet",style:"Style",author:"Szerz\u0151",copyright:"Copyright",add:"\u00daj elem hozz\u00e1ad\u00e1sa",remove:"Kijel\u00f6lt elem t\u00f6rl\u00e9se",moveup:"Kijel\u00f6lt elem felfel\u00e9 mozgat\u00e1sa",movedown:"Kijel\u00f6lt elem lefel\u00e9 mozgat\u00e1sa","head_elements":"Fej elemek",info:"Inform\u00e1ci\u00f3","add_title":"C\u00edm elem","add_meta":"Meta elem","add_script":"Script elem","add_style":"Style elem","add_link":"Link elem","add_base":"Base elem","add_comment":"Comment elem","title_element":"Title elem","script_element":"Script elem","style_element":"Style elem","base_element":"Base elem","link_element":"Link elem","meta_element":"Meta elem","comment_element":"Megjegyz\u00e9s",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u00c1ltal\u00e1nos","advanced_props":"Halad\u00f3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hy_dlg.js
new file mode 100644
index 000000000..3e5bda301
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.fullpage_dlg',{title:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","meta_tab":"\u041e\u0431\u0449\u0435\u0435","appearance_tab":"\u0412\u0438\u0434","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","meta_props":"\u0426\u0435\u043b\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438",langprops:"\u042f\u0437\u044b\u043a \u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f","meta_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","meta_keywords":"\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430","meta_description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","meta_robots":"\u0420\u0430\u0431\u043e\u0442\u044b",doctypes:"Doctype",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","xml_pi":"XML declaration",encoding:"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430","appearance_bgprops":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0444\u043e\u043d\u0430","appearance_marginprops":"\u041e\u0442\u0441\u0442\u0443\u043f\u044b","appearance_linkprops":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043e\u043a","appearance_textprops":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0430",bgcolor:"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430",bgimage:"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","left_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043b\u0435\u0432\u0430","right_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043f\u0440\u0430\u0432\u0430","top_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u0432\u0435\u0440\u0445\u0443","bottom_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043d\u0438\u0437\u0443","text_color":"\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430","font_face":"\u0428\u0440\u0438\u0444\u0442","link_color":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438","hover_color":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438","visited_color":"\u0426\u0432\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438","active_color":"\u0426\u0432\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438",textcolor:"\u0426\u0432\u0435\u0442",fontsize:"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",fontface:"\u0421\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0448\u0440\u0438\u0444\u0442\u0430","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don \\ \'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"\u0421\u0442\u0438\u043b\u044c",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"\u041a\u043e\u043f\u0438\u0440\u0430\u0439\u0442",add:"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0432\u0435\u0440\u0445",movedown:"\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u043d\u0438\u0437","head_elements":"Head elements",info:"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta \u044d\u043b\u0435\u043c\u0435\u043d\u0442","comment_element":"\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439",src:"Src",language:"\u042f\u0437\u044b\u043a",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",value:"\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435",content:"\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u041e\u0431\u0449\u0435\u0435","advanced_props":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ia_dlg.js
new file mode 100644
index 000000000..454263f9c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.fullpage_dlg',{title:"\u6863\u6848\u5c5e\u6027","meta_tab":"\u57fa\u672c","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"\u4e2d\u7ee7\u6570\u636e\u5377\u6807\u5c5e\u6027",langprops:"\u8bed\u8a00","meta_title":"\u6807\u9898","meta_keywords":"\u5173\u952e\u8bcd","meta_description":"\u5185\u5bb9\u8bf4\u660e","meta_robots":"\u673a\u5668\u4eba",doctypes:"DocType",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",ltr:"\u4ece\u5de6\u5230\u53f3",rtl:"\u4ece\u53f3\u5230\u5de6","xml_pi":"XML \u58f0\u660e",encoding:"\u5b57\u7b26\u7f16\u7801","appearance_bgprops":"\u80cc\u666f\u5c5e\u6027","appearance_marginprops":"\u8fb9\u8ddd","appearance_linkprops":"\u8fde\u7ed3\u989c\u8272","appearance_textprops":"\u6587\u5b57\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u8fb9\u8ddd","right_margin":"\u53f3\u8fb9\u8ddd","top_margin":"\u4e0a\u8fb9\u8ddd","bottom_margin":"\u4e0b\u8fb9\u8ddd","text_color":"\u6587\u5b57\u989c\u8272","font_size":"\u6587\u5b57\u5927\u5c0f","font_face":"\u5b57\u4f53","link_color":"\u8fde\u7ed3\u989c\u8272","hover_color":"Hover \u989c\u8272","visited_color":"Visited \u989c\u8272","active_color":"Active \u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u6587\u5b57\u5927\u5c0f",fontface:"\u5b57\u4f53","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"\u6837\u5f0f\u8868\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u8868",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743",add:"\u6dfb\u52a0\u65b0\u5bf9\u8c61",remove:"\u5220\u9664\u9009\u62e9\u7684\u5bf9\u8c61",moveup:"\u5411\u4e0a\u79fb\u52a8\u9009\u62e9\u7684\u5bf9\u8c61",movedown:"\u5411\u4e0b\u79fb\u52a8\u9009\u62e9\u7684\u5bf9\u8c61","head_elements":"\u5934\u5bf9\u8c61",info:"\u4fe1\u606f","add_title":"\u67e5\u627e\u5bf9\u8c61","add_meta":"\u5143\u5bf9\u8c61","add_script":"\u811a\u672c\u5bf9\u8c61","add_style":"\u6837\u5f0f\u5bf9\u8c61","add_link":"\u8fde\u7ed3\u5316\u5bf9\u8c61","add_base":"Base\u5bf9\u8c61","add_comment":"\u6ce8\u91ca\u5bf9\u8c61","title_element":"\u67e5\u627e\u5bf9\u8c61","script_element":"\u811a\u672c\u5bf9\u8c61","style_element":"\u6837\u5f0f\u5bf9\u8c61","base_element":"Base\u5bf9\u8c61","link_element":"\u8fde\u7ed3\u5316\u5bf9\u8c61","meta_element":"\u5143\u5bf9\u8c61","comment_element":"\u6ce8\u91ca\u5bf9\u8c61",src:"Src",language:"\u8bed\u8a00",href:"Href",target:"\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u7b26\u96c6",defer:"Defer",media:"\u5a92\u4f53",properties:"\u5c5e\u6027",name:"\u540d",value:"\u503c",content:"\u5185\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u57fa\u672c","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/id_dlg.js
new file mode 100644
index 000000000..051788f42
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/is_dlg.js
new file mode 100644
index 000000000..73f4cf7f1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.fullpage_dlg',{title:"Valm\u00f6guleikar skjals","meta_tab":"Almennt","appearance_tab":"\u00datlit","advanced_tab":"\u00cdtarlegt","meta_props":"Meta uppl\u00fdsingar",langprops:"Tungum\u00e1l","meta_title":"Titill","meta_keywords":"Leitaror\u00f0","meta_description":"L\u00fdsing","meta_robots":"Robots",doctypes:"Doctype",langcode:"Tungum\u00e1la k\u00f3\u00f0i",langdir:"Tungum\u00e1la \u00e1tt",ltr:"Vinstri til h\u00e6gri",rtl:"H\u00e6gri til vinstri","xml_pi":"XML declaration",encoding:"Stafa enk\u00f3\u00f0un","appearance_bgprops":"Bakgrunns m\u00f6guleikar","appearance_marginprops":"innihalds sp\u00e1ss\u00eda","appearance_linkprops":"Litir \u00e1 hlekkjum","appearance_textprops":"Text properties",bgcolor:"Bakgrunnslitur",bgimage:"Bakgrunnsmynd","left_margin":"vinstri sp\u00e1ss\u00eda","right_margin":"H\u00e6gri sp\u00e1ss\u00eda","top_margin":"Top sp\u00e1ss\u00eda","bottom_margin":"Botn sp\u00e1ss\u00eda","text_color":"Textalitur","font_size":"Stafast\u00e6r\u00f0","font_face":"Stafager\u00f0","link_color":"Litur \u00e1 hlekk","hover_color":"hover litur","visited_color":"Heims\u00f3ttur litur","active_color":"Virkur litur",textcolor:"Litur",fontsize:"Stafast\u00e6r\u00f0",fontface:"Stafa fj\u00f6lskylda","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"St\u00edlsni\u00f0 og eiginleikar",stylesheet:"St\u00edlsni\u00f0",style:"St\u00edll",author:"H\u00f6fundur",copyright:"Eignar\u00e9ttur",add:"B\u00e6ta vi\u00f0 n\u00fdjum hlut",remove:"Fjarl\u00e6gja valinn hlut",moveup:"F\u00e6ra valinn hlut upp",movedown:"F\u00e6ra valinn hlut ni\u00f0ur","head_elements":"A\u00f0al hlutur",info:"Uppl\u00fdsingar","add_title":"Titill hluts","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"B\u00e6ta vi\u00f0 athugasemd","title_element":"Titill hluts","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Tungum\u00e1l",href:"Href",target:"\u00c1\u00e6tlunarsta\u00f0ur",type:"Tegund",charset:"stafasett",defer:"V\u00edsun",media:"Margmi\u00f0lun",properties:"Eiginleikar",name:"Nafn",value:"Value",content:"Innihald",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Almennt","advanced_props":"\u00cdtarlegt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/it_dlg.js
new file mode 100644
index 000000000..d5445e832
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.fullpage_dlg',{title:"Propriet\u00e0 Documento","meta_tab":"Generale","appearance_tab":"Aspetto","advanced_tab":"Avanzate","meta_props":"Informazioni Metatag",langprops:"Lingua e codifica","meta_title":"Titolo","meta_keywords":"Parole chiave","meta_description":"Descrizione","meta_robots":"Robots",doctypes:"Doctype",langcode:"Codice lingua",langdir:"Direzione testo",ltr:"Sinistra verso destra",rtl:"Destra verso sinistra","xml_pi":"Dichiarazione XML",encoding:"Codifica carattere","appearance_bgprops":"Propriet\u00e0 sfondo","appearance_marginprops":"Margini body","appearance_linkprops":"Colori collegamenti","appearance_textprops":"Propriet\u00e0 testo",bgcolor:"Colore sfondo",bgimage:"Immagine sfondo","left_margin":"Margine sinistro","right_margin":"Margine destro","top_margin":"Margine superiore","bottom_margin":"Margine inferiore","text_color":"Colore testo","font_size":"Dimensione carattere","font_face":"Tipo carattere","link_color":"Colore collegamento","hover_color":"Colore \\\'Hover\\\'","visited_color":"Colore \\\'Visited\\\'","active_color":"Colore \\\'Active\\\'",textcolor:"Colore",fontsize:"Dimensione carattere",fontface:"Famiglia carattere","meta_index_follow":"Indicizzare e seguire collegamenti","meta_index_nofollow":"Indicizzare e non segure collegamenti","meta_noindex_follow":"Non indicizzare ma seguire collegamenti","meta_noindex_nofollow":"Non indicizzare e non seguire collegamenti","appearance_style":"Propriet\u00e0 stili e fogli di stile",stylesheet:"Fogli di stile",style:"Stile",author:"Autore",copyright:"Copyright",add:"Aggiungi nuovo elemento",remove:"Rimuovi elemento selezionato",moveup:"Sposta elemento selezionato in alto",movedown:"Sposta elemento selezionato in basso","head_elements":"Elementi Head",info:"Informazioni","add_title":"Elemento Titolo","add_meta":"Elemento Meta","add_script":"Elemento Script","add_style":"Elemento Style","add_link":"Elemento Link","add_base":"Elemento Base","add_comment":"Nodo Commento","title_element":"Elemento Titolo","script_element":"Elemento Script","style_element":"Elemento Style","base_element":"Elemento Base","link_element":"Elemento Link","meta_element":"Elemento Meta","comment_element":"Commento",src:"Sorgente",language:"Linguaggio",href:"Href",target:"Target",type:"Tipo",charset:"Set caratteri",defer:"Defer",media:"Media",properties:"Propriet\u00e0",name:"Nome",value:"Valore",content:"Contenuto",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Generale","advanced_props":"Avanzate"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ja_dlg.js
new file mode 100644
index 000000000..656436305
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.fullpage_dlg',{title:"\u30da\u30fc\u30b8\u306e\u5c5e\u6027","meta_tab":"\u4e00\u822c","appearance_tab":"\u8868\u793a","advanced_tab":"\u9ad8\u5ea6\u306a\u8a2d\u5b9a","meta_props":"\u30e1\u30bf\u60c5\u5831",langprops:"\u8a00\u8a9e\u3068\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0","meta_title":"\u30bf\u30a4\u30c8\u30eb","meta_keywords":"\u30ad\u30fc\u30ef\u30fc\u30c9","meta_description":"\u8aac\u660e","meta_robots":"\u691c\u7d22\u30ed\u30dc\u30c3\u30c8\u306e\u5236\u5fa1",doctypes:"\u6587\u66f8\u578b",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9",langdir:"\u6587\u7ae0\u306e\u65b9\u5411",ltr:"\u5de6\u304b\u3089\u53f3",rtl:"\u53f3\u304b\u3089\u5de6","xml_pi":"XML\u5ba3\u8a00",encoding:"\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0","appearance_bgprops":"\u80cc\u666f\u306e\u5c5e\u6027","appearance_marginprops":"Body\u306e\u4f59\u767d","appearance_linkprops":"\u30ea\u30f3\u30af\u306e\u8272","appearance_textprops":"\u6587\u5b57\u306e\u5c5e\u6027",bgcolor:"\u80cc\u666f\u306e\u8272",bgimage:"\u80cc\u666f\u306e\u753b\u50cf","left_margin":"\u5de6\u306e\u4f59\u767d","right_margin":"\u53f3\u306e\u4f59\u767d","top_margin":"\u4e0a\u306e\u4f59\u767d","bottom_margin":"\u4e0b\u306e\u4f59\u767d","text_color":"\u6587\u5b57\u306e\u8272","font_size":"\u6587\u5b57\u306e\u5927\u304d\u3055","font_face":"\u30d5\u30a9\u30f3\u30c8","link_color":"\u30ea\u30f3\u30af\u306e\u8272","hover_color":"\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u3042\u308b\u30ea\u30f3\u30af\u306e\u8272(hover)","visited_color":"\u65e2\u306b\u8aad\u3093\u3060\u30ea\u30f3\u30af\u306e\u8272(visited)","active_color":"\u30af\u30ea\u30c3\u30af\u3057\u305f\u77ac\u9593\u306e\u30ea\u30f3\u30af\u306e\u8272(active)",textcolor:"\u8272",fontsize:"\u6587\u5b57\u306e\u5927\u304d\u3055",fontface:"\u30d5\u30a9\u30f3\u30c8","meta_index_follow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u3066\u30ea\u30f3\u30af\u3092\u305f\u3069\u308b","meta_index_nofollow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u3066\u30ea\u30f3\u30af\u306f\u305f\u3069\u3089\u306a\u3044","meta_noindex_follow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u306a\u3044\u304c\u30ea\u30f3\u30af\u3092\u305f\u3069\u308b","meta_noindex_nofollow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u306a\u3044\u3067\u30ea\u30f3\u30af\u3082\u305f\u3069\u3089\u306a\u3044","appearance_style":"\u30b9\u30bf\u30a4\u30eb\u30b7\u30fc\u30c8\u3068\u30b9\u30bf\u30a4\u30eb\u306e\u5c5e\u6027",stylesheet:"\u30b9\u30bf\u30a4\u30eb\u30b7\u30fc\u30c8",style:"\u30b9\u30bf\u30a4\u30eb",author:"\u4f5c\u6210\u8005",copyright:"\u8457\u4f5c\u6a29",add:"\u65b0\u3057\u304f\u8981\u7d20\u3092\u8ffd\u52a0",remove:"\u9078\u629e\u3057\u305f\u8981\u7d20\u3092\u524a\u9664",moveup:"\u9078\u629e\u3057\u305f\u8981\u7d20\u3092\u4e0a\u306b\u79fb\u52d5",movedown:"\u9078\u629e\u3057\u305f\u8981\u7d20\u3092\u4e0b\u306b\u79fb\u52d5","head_elements":"Head\u8981\u7d20",info:"\u60c5\u5831","add_title":"Title\u8981\u7d20","add_meta":"Meta\u8981\u7d20","add_script":"Script\u8981\u7d20","add_style":"Style\u8981\u7d20","add_link":"Link\u8981\u7d20","add_base":"Base\u8981\u7d20","add_comment":"Comment\u30ce\u30fc\u30c9","title_element":"Title\u8981\u7d20","script_element":"Script\u8981\u7d20","style_element":"Style\u8981\u7d20","base_element":"Base\u8981\u7d20","link_element":"Link\u8981\u7d20","meta_element":"Meta\u8981\u7d20","comment_element":"\u30b3\u30e1\u30f3\u30c8",src:"src",language:"\u8a00\u8a9e",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href\u306e\u8a00\u8a9e","general_props":"\u4e00\u822c","advanced_props":"\u8a73\u7d30\u306a\u8a2d\u5b9a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ka_dlg.js
new file mode 100644
index 000000000..0bf678976
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.fullpage_dlg',{title:"\u10d3\u10dd\u10d9\u10e3\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8","meta_tab":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd","appearance_tab":"\u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10d0","advanced_tab":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7","meta_props":"\u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d8\u10e1 \u10db\u10d8\u10d6\u10d0\u10dc\u10d8",langprops:"\u10d4\u10dc\u10d0 \u10d3\u10d0 \u10d9\u10dd\u10d3\u10d8\u10e0\u10d4\u10d1\u10d0","meta_title":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","meta_keywords":"\u10e1\u10d0\u10d9\u10d5\u10d0\u10dc\u10eb\u10dd \u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10d8","meta_description":"\u10d0\u10e0\u10ec\u10d4\u10e0\u10d0","meta_robots":"\u10dc\u10d0\u10db\u10e3\u10e8\u10d4\u10d5\u10e0\u10d4\u10d1\u10d8",doctypes:"\u10e2\u10d8\u10de\u10d8",langcode:"\u10d4\u10dc\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8",langdir:"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0",ltr:"\u10db\u10d0\u10e0\u10ea\u10e1\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",rtl:"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","xml_pi":"XML \u10d2\u10d0\u10dc\u10ea\u10ee\u10d0\u10d3\u10d4\u10d1\u10d0",encoding:"\u10d9\u10dd\u10d3\u10d8\u10e0\u10d4\u10d1\u10d0","appearance_bgprops":"\u10e4\u10dd\u10dc\u10d8\u10e1 \u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8","appearance_marginprops":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d4\u10d1\u10d8","appearance_linkprops":"\u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","appearance_textprops":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d0\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8",bgcolor:"\u10e4\u10dd\u10dc\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8",bgimage:"\u10e4\u10dd\u10dc\u10e3\u10e0\u10d8 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d0","left_margin":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ea\u10e1\u10dc\u10d8\u10d3\u10d0\u10dc","right_margin":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc","top_margin":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0 \u10d6\u10d4\u10db\u10dd\u10d3\u10d0\u10dc","bottom_margin":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0 \u10e5\u10d5\u10d4\u10db\u10dd\u10d3\u10d0\u10dc","text_color":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","font_size":"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8\u10e1 \u10d6\u10dd\u10db\u10d0","font_face":"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8","link_color":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","hover_color":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8 \u10d2\u10d0\u10d0\u10e5\u10e2\u10d8\u10e3\u10e0\u10d4\u10d1\u10d8\u10e1\u10d0\u10e1","visited_color":"\u10d2\u10d0\u10d0\u10e5\u10e2\u10d8\u10e3\u10e0\u10d4\u10d1\u10e3\u10da\u10d8 \u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","active_color":"\u10d0\u10e5\u10e2\u10d8\u10e3\u10e0\u10d8 \u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8",textcolor:"\u10e4\u10d4\u10e0\u10d8",fontsize:"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8\u10e1 \u10d6\u10dd\u10db\u10d0",fontface:"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8\u10e1 \u10d9\u10d0\u10e2\u10d4\u10d2\u10dd\u10e0\u10d8\u10d0","meta_index_follow":"\u10d3\u10d0\u10d5\u10d0\u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10dd\u10d7 \u10d3\u10d0 \u10d2\u10d0\u10d5\u10e7\u10d5\u10d4\u10d7 \u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10e1","meta_index_nofollow":"\u10d3\u10d0\u10d5\u10d0\u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10dd\u10d7 \u10d3\u10d0 \u10d0\u10e0 \u10d2\u10d0\u10d5\u10e7\u10d5\u10d4\u10d7 \u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10e1","meta_noindex_follow":"\u10d0\u10e0 \u10d3\u10d0\u10d5\u10d0\u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10dd\u10d7, \u10db\u10d0\u10d2\u10e0\u10d0\u10db \u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10e1 \u10d2\u10d0\u10d5\u10e7\u10d5\u10d4\u10d7","meta_noindex_nofollow":"\u10d0\u10e0 \u10d3\u10d0\u10d5\u10d0\u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10dd\u10d7 \u10d3\u10d0 \u10d0\u10e0 \u10d2\u10d0\u10d5\u10e7\u10d5\u10d4\u10d7 \u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10e1","appearance_style":"\u10e1\u10e2\u10d8\u10da\u10d4\u10d1\u10d8\u10e1 \u10db\u10d0\u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10da\u10d4\u10d1\u10d8 \u10d3\u10d0 \u10e1\u10d8\u10d0",stylesheet:"\u10e1\u10e2\u10d8\u10da\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0",style:"\u10e1\u10e2\u10d8\u10da\u10d8",author:"\u10d0\u10d5\u10e2\u10dd\u10e0\u10d8",copyright:"\u10d9\u10dd\u10de\u10d8\u10e0\u10d0\u10d8\u10e2\u10d8",add:"\u10d0\u10ee\u10d0\u10da\u10d8 \u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0",remove:"\u10db\u10dd\u10dc\u10d8\u10e8\u10dc\u10e3\u10da\u10d8 \u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0",moveup:"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10d6\u10d4\u10db\u10dd\u10d7 \u10d2\u10d0\u10d3\u10d0\u10d0\u10d3\u10d2\u10d8\u10da\u10d4\u10d1\u10d0",movedown:"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10e5\u10d5\u10d4\u10db\u10dd\u10d7 \u10d2\u10d0\u10d3\u10d0\u10d0\u10d3\u10d2\u10d8\u10da\u10d4\u10d1\u10d0","head_elements":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Header",info:"\u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d0","add_title":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Title","add_meta":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Meta","add_script":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Script","add_style":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Style","add_link":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Link","add_base":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Base","add_comment":"\u10d9\u10dd\u10db\u10d4\u10dc\u10e2\u10d0\u10e0\u10d8","title_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Title","script_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Script","style_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Style","base_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Base","link_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Link","meta_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Meta","comment_element":"\u10d9\u10dd\u10db\u10d4\u10dc\u10e2\u10d8\u10d0\u10e0\u10d8",src:"Src",language:"\u10d4\u10dc\u10d0",href:"\u10d1\u10db\u10e3\u10da\u10d8",target:"\u10db\u10d8\u10d6\u10d0\u10dc\u10d8",type:"\u10e2\u10d8\u10de\u10d8",charset:"\u10d9\u10dd\u10d3\u10d8\u10e0\u10d4\u10d1\u10d0",defer:"\u10d2\u10d0\u10d3\u10d0\u10e2\u10d0\u10dc\u10d0",media:"\u10db\u10d4\u10d3\u10d8\u10d0",properties:"\u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",name:"\u10e1\u10d0\u10ee\u10d4\u10da\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0",value:"\u10db\u10d0\u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10d4\u10da\u10d8",content:"\u10e8\u10d8\u10dc\u10d0\u10d0\u10e0\u10e1\u10d8",rel:"Rel",rev:"Rev",hreflang:"\u10d4\u10dc\u10d8\u10e1 \u10d1\u10db\u10e3\u10da\u10d8","general_props":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd","advanced_props":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/kl_dlg.js
new file mode 100644
index 000000000..d4d19268d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/km_dlg.js
new file mode 100644
index 000000000..12a01c208
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.fullpage_dlg',{title:"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u17af\u1780\u179f\u17b6\u179a","meta_tab":"\u1791\u17bc\u1791\u17c5","appearance_tab":"\u179a\u17bc\u1794\u179a\u17b6\u1784","advanced_tab":"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","meta_props":"\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u1798\u17c1\u178f\u17b6",langprops:"\u1797\u17b6\u179f\u17b6 \u1793\u17b7\u1784 \u1780\u17bc\u178a\u179f\u17d2\u179a\u17b6\u1799","meta_title":"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784","meta_keywords":"\u1796\u17b6\u1780\u17d2\u1799\u1782\u1793\u17d2\u179b\u17b9\u17c7","meta_description":"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6","meta_robots":"\u1798\u1793\u17bb\u179f\u17d2\u179f\u1799\u1793\u17d2\u178f",doctypes:"\u1794\u17d2\u179a\u1797\u17c1\u1791\u17af\u1780\u179f\u17b6\u179a",langcode:"\u1780\u17bc\u178a\u1797\u17b6\u179f\u17b6",langdir:"\u1791\u17b7\u179f\u178a\u17c5\u1797\u17b6\u179f\u17b6",ltr:"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6",rtl:"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784","xml_pi":"\u1780\u17b6\u179a\u1794\u17d2\u179a\u1780\u17b6\u179f XML",encoding:"\u1780\u17bc\u178a\u179f\u17d2\u179a\u17b6\u1799\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a","appearance_bgprops":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","appearance_marginprops":"\u179a\u17b9\u1798\u178f\u17bd","appearance_linkprops":"\u1796\u178e\u17cc\u178f\u17c6\u178e","appearance_textprops":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u17a2\u178f\u17d2\u1790\u1794\u1791",bgcolor:"\u1796\u178e\u17cc\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799",bgimage:"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","left_margin":"\u179a\u17b9\u1798\u1786\u17d2\u179c\u17c1\u1784","right_margin":"\u179a\u17b9\u1798\u179f\u17d2\u178f\u17b6\u17c6","top_margin":"\u179a\u17b9\u1798\u179b\u17be","bottom_margin":"\u179a\u17b9\u1798\u1780\u17d2\u179a\u17c4\u1798","text_color":"\u1796\u178e\u17cc\u17a2\u178f\u17d2\u1790\u1794\u1791","font_size":"\u1791\u17c6\u17a0\u17c6\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a","font_face":"\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a\u179f\u1793\u17d2\u1798\u178f","link_color":"\u1796\u178e\u17cc\u178f\u17c6\u178e","hover_color":"\u1796\u178e\u17cc\u178a\u17b6\u1780\u17cb\u179b\u17be","visited_color":"\u1796\u178e\u17cc\u1791\u179f\u17d2\u179f\u1793\u17b6\u179a\u17bd\u1785","active_color":"\u1796\u178e\u17cc\u179f\u1780\u1798\u17d2\u1798",textcolor:"\u1796\u178e\u17cc",fontsize:"\u1791\u17c6\u17a0\u17c6\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a",fontface:"\u179f\u17d2\u179a\u179b\u17b6\u1799\u17a2\u1780\u17d2\u179f\u179a","meta_index_follow":"\u1785\u1784\u17d2\u17a2\u17bb\u179b \u1793\u17b7\u1784 \u178f\u17b6\u1798\u178f\u17c6\u178e\u1791\u17b6\u17c6\u1784\u1793\u17c1\u17c7","meta_index_nofollow":"\u1785\u1784\u17d2\u17a2\u17bb\u179b \u1793\u17b7\u1784\u1798\u17b7\u1793\u178f\u17b6\u1798\u178f\u17c6\u178e\u1791\u17b6\u17c6\u1784\u1793\u17c1\u17c7","meta_noindex_follow":"\u1780\u17bb\u17c6\u1785\u1784\u17d2\u17a2\u17bb\u179b \u1793\u17b7\u1784\u178f\u17b6\u1798\u178f\u17c6\u178e\u1791\u17b6\u17c6\u1784\u1793\u17c1\u17c7","meta_noindex_nofollow":"\u1780\u17bb\u17c6\u1785\u1784\u17d2\u17a2\u17bb\u179b \u1793\u17b7\u1784 \u1780\u17bb\u17c6\u178f\u17b6\u1798\u178f\u17c6\u178e\u1791\u17b6\u17c6\u1784\u1793\u17c1\u17c7","appearance_style":"\u179f\u1793\u17d2\u179b\u17b9\u1780\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798 \u1793\u17b7\u1784 \u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",stylesheet:"\u179f\u1793\u17d2\u179b\u17b9\u1780\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",style:"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",author:"\u17a2\u17d2\u1793\u1780\u1793\u17b7\u1796\u1793\u17d2\u1792",copyright:"\u179a\u1780\u17d2\u179f\u17b6\u179f\u17b7\u1791\u17d2\u1792\u17b7",add:"\u1794\u1793\u17d2\u1790\u17c2\u1798\u1792\u17b6\u178f\u17bb\u1790\u17d2\u1798\u17b8",remove:"\u178a\u1780\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u1785\u17c1\u1789",moveup:"\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u17a1\u17be\u1784\u179b\u17be",movedown:"\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u1785\u17bb\u17c7\u1780\u17d2\u179a\u17c4\u1798","head_elements":"\u1792\u17b6\u178f\u17bb\u1787\u17b6\u1780\u17d2\u1794\u17b6\u179b",info:"\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793","add_title":"\u1792\u17b6\u178f\u17bb\u1785\u17c6\u178e\u1784\u1787\u17be\u1784","add_meta":"\u1792\u17b6\u178f\u17bb\u1798\u17c1\u178f\u17b6","add_script":"\u1792\u17b6\u178f\u17bb\u179f\u17d2\u1782\u17d2\u179a\u17b8\u1794","add_style":"\u1792\u17b6\u178f\u17bb\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798","add_link":"\u1792\u17b6\u178f\u17bb\u178f\u17c6\u178e","add_base":"\u1792\u17b6\u178f\u17bb\u1782\u17c4\u179b","add_comment":"\u1790\u17d2\u1793\u17b6\u17c6\u1784\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u17a2\u1792\u17b7\u1794\u17d2\u1794\u17b6\u1799","title_element":"\u1792\u17b6\u178f\u17bb\u1785\u17c6\u178e\u1784\u1787\u17be\u1784","script_element":"\u1792\u17b6\u178f\u17bb\u179f\u17d2\u179a\u17d2\u1782\u17b8\u1794","style_element":"\u1792\u17b6\u178f\u17bb\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798","base_element":"\u1792\u17b6\u178f\u17bb\u1782\u17c4\u179b","link_element":"\u1792\u17b6\u178f\u17bb\u178f\u17c6\u178e","meta_element":"\u1792\u17b6\u178f\u17bb\u1798\u17c1\u178f\u17b6","comment_element":"\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u17a2\u1792\u17b7\u1794\u17d2\u1794\u17b6\u1799",src:"\u1794\u17d2\u179a\u1797\u1796src",language:"\u1797\u17b6\u179f\u17b6",href:"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793Href",target:"\u1782\u17c4\u179b\u178a\u17c5",type:"\u1794\u17d2\u179a\u1797\u17c1\u1791",charset:"\u179f\u17c6\u178e\u17bb\u17c6\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a",defer:"\u1796\u1793\u17d2\u1799\u17b6\u1796\u17c1\u179b",media:"\u1798\u17c1\u178c\u17c0",properties:"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7",name:"\u1788\u17d2\u1798\u17c4\u17c7",value:"\u178f\u1798\u17d2\u179b\u17c3",content:"\u1798\u17b6\u178f\u17b7\u1780\u17b6",rel:"Rel",rev:"Rev",hreflang:"Href","general_props":"\u1791\u17bc\u1791\u17c5","advanced_props":"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ko_dlg.js
new file mode 100644
index 000000000..b3d629852
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.fullpage_dlg',{title:"\ubb38\uc11c \uc18d\uc131","meta_tab":"\uc77c\ubc18","appearance_tab":"\ud45c\uc2dc","advanced_tab":"\uc138\ubd80 \uc0ac\ud56d","meta_props":"\uba54\ud0c0 \uc815\ubcf4",langprops:"\uc5b8\uc5b4 \ubc0f \uc778\ucf54\ub529","meta_title":"\uc81c\ubaa9","meta_keywords":"\ud0a4\uc6cc\ub4dc","meta_description":"\uc124\uba85","meta_robots":"\ub85c\ubd07",doctypes:"Doctype",langcode:"\uc5b8\uc5b4 \ucf54\ub4dc",langdir:"\ubb38\uc790 \ubc29\ud5a5",ltr:"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c",rtl:"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c","xml_pi":"XML \uc120\uc5b8",encoding:"\ubb38\uc790 \uc778\ucf54\ub529","appearance_bgprops":"\ubc30\uacbd \uc18d\uc131","appearance_marginprops":"Body \ub9c8\uc9c4","appearance_linkprops":"\ub9c1\ud06c\uc0c9","appearance_textprops":"\ud14d\uc2a4\ud2b8 \uc18d\uc131",bgcolor:"\ubc30\uacbd\uc0c9",bgimage:"\ubc30\uacbd \uc774\ubbf8\uc9c0","left_margin":"\uc67c\ucabd \ub9c8\uc9c4","right_margin":"\uc624\ub978\ucabd \ub9c8\uc9c4","top_margin":"\uc704 \ub9c8\uc9c4","bottom_margin":"\uc544\ub798 \ub9c8\uc9c4","text_color":"\ubb38\uc790\uc0c9","font_size":"\uae00\uaf34 \ud06c\uae30","font_face":"\uae00\uaf34\uba85","link_color":"\ub9c1\ud06c\uc0c9","hover_color":"\ub9c1\ud06c\uc0c9(hover)","visited_color":"\ub9c1\ud06c\uc0c9(visited)","active_color":"\ub9c1\ud06c\uc0c9(active)",textcolor:"\uc0c9",fontsize:"\uae00\uaf34 \ud06c\uae30",fontface:"\uae00\uaf34\uad70","meta_index_follow":"\ubaa8\ub450 \ud5c8\uac00","meta_index_nofollow":"\ud398\uc774\uc9c0\ub97c \ud5c8\uac00\ud558\uc9c0\ub9cc \ub9c1\ud06c \uae08\uc9c0","meta_noindex_follow":"\ud398\uc774\uc9c0\ub97c \uae08\uc9c0\ud558\uace0 \ub9c1\ud06c \ud5c8\uac00","meta_noindex_nofollow":"\ubaa8\ub450 \uae08\uc9c0","appearance_style":"\uc2a4\ud0c0\uc77c\uc2dc\ud2b8 \ubc0f \uc11c\uc2dd \uc18d\uc131",stylesheet:"\uc2a4\ud0c0\uc77c\uc2dc\ud2b8",style:"\uc11c\uc2dd",author:"\uc81c\uc791\uc790",copyright:"\uc800\uc791\uad8c",add:"\uc0c8 \uc694\uc18c \ucd94\uac00",remove:"\uc120\ud0dd\ud55c \uc694\uc18c \uc0ad\uc81c",moveup:"\uc120\ud0dd\ud55c \uc694\uc18c\ub97c \uc704\ub85c \uc774\ub3d9",movedown:"\uc120\ud0dd\ud55c \uc694\uc18c\ub97c \uc544\ub798\ub85c \uc774\ub3d9","head_elements":"Head \uc694\uc18c",info:"\uc815\ubcf4","add_title":"Title \uc694\uc18c","add_meta":"Meta \uc694\uc18c","add_script":"Script \uc694\uc18c","add_style":"Style \uc694\uc18c","add_link":"Link \uc694\uc18c","add_base":"Base \uc694\uc18c","add_comment":"\uc8fc\uc11d \uc694\uc18c","title_element":"Title \uc694\uc18c","script_element":"Script \uc694\uc18c","style_element":"Style \uc694\uc18c","base_element":"Base \uc694\uc18c","link_element":"Link \uc694\uc18c","meta_element":"Meta \uc694\uc18c","comment_element":"\uc8fc\uc11d",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"\uc18d\uc131",name:"\uc774\ub984",value:"\uac12",content:"\ub0b4\uc6a9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\uc77c\ubc18","advanced_props":"\uc138\ubd80 \uc0ac\ud56d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/kz_dlg.js
new file mode 100644
index 000000000..1c9fcc49b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lb_dlg.js
new file mode 100644
index 000000000..173913911
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.fullpage_dlg',{title:"Dokument-Eegeschaften","meta_tab":"Allgemeng","appearance_tab":"Ausgesinn","advanced_tab":"Erweidert","meta_props":"Meta-Informatioun",langprops:"Sprooch a Kod\u00e9ierung","meta_title":"Titel","meta_keywords":"Sch\u00ebsselwierder","meta_description":"Beschreiwung","meta_robots":"Roboter",doctypes:"DocType",langcode:"Sproochcode",langdir:"Spoochrichtung",ltr:"L\u00e9nks no Riets",rtl:"Riets no L\u00e9nks","xml_pi":"XML Deklaratioun",encoding:"Zeechekod\u00e9ierung","appearance_bgprops":"Hannergrond-Eegeschaften","appearance_marginprops":"Ofst\u00e4nn vum Body","appearance_linkprops":"Linkfuerwen","appearance_textprops":"Text-Eegeschaften",bgcolor:"Hannergrondfuerf",bgimage:"Hannergrondbild","left_margin":"L\u00e9nken Ofstand","right_margin":"Rietsen Ofstand","top_margin":"Ieweschten Ofstand","bottom_margin":"\u00cbnneschten Ofstand","text_color":"Textfuerf","font_size":"Schr\u00ebftgr\u00e9isst","font_face":"Schr\u00ebftaart","link_color":"Linkfuerf","hover_color":"Hover-Fuerf","visited_color":"Besicht-Fuerf","active_color":"Aktiv-Fuerf",textcolor:"Fuerf",fontsize:"Schr\u00ebftgr\u00e9ist",fontface:"Schr\u00ebftaart","meta_index_follow":"Indiz\u00e9ieren, an de Linken nogoen","meta_index_nofollow":"Indiz\u00e9ieren, m\u00e4 de Linken net nogoen","meta_noindex_follow":"Net indiz\u00e9ieren, m\u00e4 de Linken nogoen","meta_noindex_nofollow":"Net indiz\u00e9ieren an och net de Linken nogoen","appearance_style":"CSS-Stil Blat a Stileegeschaften",stylesheet:"CSS-Stil Blat",style:"CSS-Stil",author:"Auteur",copyright:"Copyright",add:"Neit Element b\u00e4if\u00fcgen",remove:"Ausgewielt Element ewechhuelen",moveup:"Ausgewielt Element nach uewen beweegen",movedown:"Ausgewielt Element no \u00ebnnen beweegen","head_elements":"Iwwerschr\u00ebftenelementer",info:"Informatioun","add_title":"Titel-Element","add_meta":"Meta-Element","add_script":"Script-Element","add_style":"Stil-Element","add_link":"Link-Element","add_base":"Basis-Element","add_comment":"HTML-Kommentar","title_element":"Titel-Element","script_element":"Script-Element","style_element":"Stil-Element","base_element":"Basis-Element","link_element":"Link-Element","meta_element":"Meta_Element","comment_element":"Kommentar",src:"Src",language:"Sprooche",href:"Href",target:"Zil",type:"Typ",charset:"Zeechesaz",defer:"Defer",media:"Media",properties:"Eegeschaften",name:"Numm",value:"W\u00e4ert",content:"Inhalt",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Allgemeng","advanced_props":"Erweidert"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lt_dlg.js
new file mode 100644
index 000000000..de70876a0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.fullpage_dlg',{title:"Dokumento nustatymai","meta_tab":"Bendra","appearance_tab":"I\u0161vaizda","advanced_tab":"I\u0161pl\u0117sta","meta_props":"Meta informacija",langprops:"Kalba ir koduot\u0117","meta_title":"Pavadinimas","meta_keywords":"Rakta\u017eod\u017eiai","meta_description":"Apra\u0161as","meta_robots":"Robotai",doctypes:"Dokumento tipas",langcode:"Kalbos kodas",langdir:"Kalbos kryptis",ltr:"I\u0161 kair\u0117s \u012f de\u0161in\u0119",rtl:"I\u0161 de\u0161in\u0117s \u012f kair\u0119","xml_pi":"XML deklaracijos",encoding:"Simboli\u0173 koduot\u0117","appearance_bgprops":"Fono nustatymai","appearance_marginprops":"K\u016bno para\u0161t\u0117s","appearance_linkprops":"Nuorod\u0173 spalvos","appearance_textprops":"Teksto nustatymai",bgcolor:"Fono spalva",bgimage:"Fono paveiksl\u0117lis","left_margin":"Kair\u0117 para\u0161t\u0117","right_margin":"De\u0161in\u0117 para\u0161t\u0117","top_margin":"Vir\u0161utin\u0117 para\u0161t\u0117","bottom_margin":"Apatin\u0117 para\u0161t\u0117","text_color":"Teksto spalva","font_size":"\u0160rifto dydis","font_face":"\u0160riftas","link_color":"Nuorodos spalva","hover_color":"U\u017evedus pele spalva","visited_color":"Aplankytos spalva","active_color":"Aktyvios spalva",textcolor:"Spalva",fontsize:"\u0160rifto dydis",fontface:"\u0160rifto \u0161eima","meta_index_follow":"Indeksuoti ir sekti nuorodomis","meta_index_nofollow":"Indeksuoti ir nesekti nuorodomis","meta_noindex_follow":"Neindeksuoti, bet sekti nuorodomis","meta_noindex_nofollow":"Neindeksuoti ir nesekti nuorodomis","appearance_style":"Stili\u0173 lapo ir stiliaus nustatymai",stylesheet:"Stili\u0173 lapas",style:"Stilius",author:"Autorius",copyright:"Autoriaus teis\u0117s",add:"Prid\u0117ti nauj\u0105 element\u0105",remove:"Pa\u0161alinti pa\u017eym\u0117t\u0105 element\u0105",moveup:"Perkelti pa\u017eym\u0117t\u0105 element\u0105 \u012f vir\u0161\u0173",movedown:"Perkelti pa\u017eym\u0117t\u0105 element\u0105 \u012f apa\u010di\u0105","head_elements":"Antra\u0161t\u0117s elementai",info:"Informacija","add_title":"Pavadinimo elementas","add_meta":"Meta elementas","add_script":"Skripto elementas","add_style":"Stiliaus elementas","add_link":"Nuorodos elementas","add_base":"Bazinis elementas","add_comment":"Komentaro mazgas","title_element":"Pavadinimo elementas","script_element":"Skripto elementas","style_element":"Stiliaus elementas","base_element":"Bazinis elementas","link_element":"Nuorodos elementas","meta_element":"Meta elementas","comment_element":"Komentaras",src:"\u0160altinis",language:"Kalba",href:"Href",target:"Paskirtis",type:"Tipas",charset:"Koduot\u0117",defer:"Atid\u0117ti",media:"Medija",properties:"Nustatymai",name:"Vardas",value:"Reik\u0161m\u0117",content:"Turinys",rel:"Laida",rev:"Pataisa",hreflang:"Href kalba","general_props":"Bendra","advanced_props":"I\u0161pl\u0117sta"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lv_dlg.js
new file mode 100644
index 000000000..c3c578127
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/mk_dlg.js
new file mode 100644
index 000000000..e70b7cab3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.fullpage_dlg',{title:"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0442","meta_tab":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e","appearance_tab":"\u0418\u0437\u0433\u043b\u0435\u0434","advanced_tab":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e","meta_props":"\u041c\u0435\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0458\u0430",langprops:"\u0408\u0430\u0437\u0438\u043a \u0438 \u043a\u043e\u0434\u0438\u0440\u0430\u045a\u0435","meta_title":"\u041d\u0430\u0441\u043b\u043e\u0432","meta_keywords":"\u041a\u043b\u0443\u0447\u043d\u0438 \u0437\u0431\u043e\u0440\u043e\u0432\u0438","meta_description":"\u041e\u043f\u0438\u0441","meta_robots":"\u0420\u043e\u0431\u043e\u0442\u0438",doctypes:"\u0422\u0438\u043f \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0442",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442",langdir:"\u041d\u0430\u0441\u043e\u043a\u0430 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442",ltr:"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e",rtl:"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e","xml_pi":"XML \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0458\u0430",encoding:"\u041a\u043e\u0434\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0437\u043d\u0430\u0446\u0438\u0442\u0435","appearance_bgprops":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430\u0442\u0430","appearance_marginprops":"\u041c\u0430\u0440\u0433\u0438\u043d\u0438 \u043d\u0430 \u0442\u0435\u043b\u043e\u0442\u043e","appearance_linkprops":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0432\u0438\u0442\u0435","appearance_textprops":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u043e \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0442",bgcolor:"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430\u0442\u0430",bgimage:"\u041f\u043e\u0437\u0430\u0434\u0438\u043d\u0441\u043a\u0430 \u0441\u043b\u0438\u043a\u0430","left_margin":"\u041b\u0435\u0432\u0430 \u043c\u0430\u0440\u0433\u0438\u043d\u0430","right_margin":"\u0414\u0435\u0441\u043d\u0430 \u043c\u0430\u0440\u0433\u0438\u043d\u0430","top_margin":"\u0413\u043e\u0440\u043d\u0430 \u043c\u0430\u0440\u0433\u0438\u043d\u0430","bottom_margin":"\u0414\u043e\u043b\u043d\u0430 \u043c\u0430\u0440\u0438\u043d\u0430","text_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0442","font_size":"\u0413\u043e\u043b\u0435\u043c\u0438\u043d\u0430 \u043d\u0430 \u0444\u043e\u043d\u0442\u043e\u0442","font_face":"\u0418\u0437\u0433\u043b\u0440\u0434 \u043d\u0430 \u0444\u043e\u043d\u0442\u043e\u0442","link_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0442","hover_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0442 \u043f\u0440\u0438 \u043f\u0440\u0435\u043c\u0438\u043d\u0443\u0432\u0430\u045a\u0435 \u043f\u0440\u0435\u043a\u0443 \u043d\u0435\u0433\u043e","visited_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043f\u043e\u0441\u0435\u0442\u0435\u043d\u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0438","active_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u043b\u0438\u043d\u043a",textcolor:"\u0411\u043e\u0458\u0430",fontsize:"\u0413\u043e\u043b\u0435\u043c\u0438\u043d\u0430 \u043d\u0430 \u0444\u043e\u043d\u0442\u043e\u0442",fontface:"\u0413\u0440\u0443\u043f\u0430 \u043d\u0430 \u0444\u043e\u043d\u0442\u043e\u0432\u0438","meta_index_follow":"\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0458 \u0438 \u0441\u043b\u0435\u0434\u0438 \u0433\u043e \u043b\u0438\u043d\u043a\u043e\u0442","meta_index_nofollow":"\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0458 \u0438 \u043d\u0435 \u0433\u043e \u0441\u043b\u0435\u0434\u0438 \u043b\u0438\u043d\u043a\u043e\u0442","meta_noindex_follow":"\u041d\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0458 \u043d\u043e \u0441\u043b\u0435\u0434\u0438 \u0433\u043e \u043b\u0438\u043d\u043a\u043e\u0442","meta_noindex_nofollow":"\u041d\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0458 \u0438 \u043d\u0435 \u0433\u043e \u0441\u043b\u0435\u0434\u0438 \u043b\u0438\u043d\u043a\u043e\u0442","appearance_style":"CSS \u0438 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0441\u0442\u0438\u043b\u043e\u0442",stylesheet:"CSS",style:"\u0421\u0442\u0438\u043b",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438 \u043f\u0440\u0430\u0432\u0430",add:"\u0414\u043e\u0434\u0430\u0458 \u043d\u043e\u0432 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u041e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 \u0433\u043e \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u043e\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u043e\u043c\u0435\u0441\u0442\u0438 \u0433\u043e \u0438\u0437\u0431\u0440\u0430\u043d\u043e\u0438\u043e\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0433\u043e\u0440\u0435",movedown:"\u041f\u043e\u043c\u0435\u0441\u0442\u0438 \u0433\u043e \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u043e\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0434\u043e\u043b\u0435","head_elements":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0437\u0430\u0433\u043b\u0430\u0432\u0438\u0458\u0430",info:"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0458\u0430","add_title":"\u041d\u0430\u0441\u043b\u043e\u0432\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_meta":"\u041c\u0435\u0442\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_script":"\u0421\u043a\u0440\u0438\u043f\u0442\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_style":"\u0421\u0442\u0438\u043b\u0441\u043a\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_link":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u043f\u043e\u0432\u0440\u0437\u0438\u0432\u0430\u045a\u0435 (\u043b\u0438\u043d\u043a)","add_base":"\u041e\u0441\u043d\u043e\u0432\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_comment":"\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440","title_element":"\u041d\u0430\u0441\u043b\u043e\u0432\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","script_element":"\u0421\u043a\u0440\u0438\u043f\u0442\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","style_element":"\u0421\u0442\u0438\u043b\u0441\u043a\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442","base_element":"\u041e\u0441\u043d\u043e\u0432\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","link_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u043f\u043e\u0432\u0440\u0437\u0443\u0432\u0430\u045a\u0435 (\u043b\u0438\u043d\u043a)","meta_element":"\u041c\u0435\u0442\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442","comment_element":"\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440",src:"\u0418\u0437\u0432\u043e\u0440",language:"\u0408\u0430\u0437\u0438\u043a",href:"Href",target:"\u041c\u0435\u0442\u0430",type:"\u0422\u0438\u043f",charset:"Charset",defer:"Defer",media:"\u041c\u0435\u0434\u0438\u0443\u043c\u0438",properties:"\u0421\u043e\u0458\u0441\u0442\u0432\u0430",name:"\u0418\u043c\u0435",value:"\u0412\u0440\u0435\u0434\u043d\u043e\u0441\u0442",content:"\u0421\u043e\u0434\u0440\u0436\u0438\u043d\u0430",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e","advanced_props":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ml_dlg.js
new file mode 100644
index 000000000..3bd2777c7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/mn_dlg.js
new file mode 100644
index 000000000..3ea446a32
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.fullpage_dlg',{title:"\u0411\u0430\u0440\u0438\u043c\u0442\u044b\u043d \u0442\u043e\u0434\u0440\u0443\u0443\u043b\u0433\u0430","meta_tab":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439","appearance_tab":"\u0425\u0430\u0440\u0430\u0433\u0434\u0430\u0446","advanced_tab":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d","meta_props":"Meta-\u043c\u044d\u0434\u044d\u044d\u043b\u044d\u043b",langprops:"\u0425\u044d\u043b \u0431\u0430 \u043a\u043e\u0434\u0447\u0438\u043b\u043e\u043b","meta_title":"\u0413\u0430\u0440\u0447\u0438\u0433","meta_keywords":"Keywords","meta_description":"\u0422\u0430\u0439\u043b\u0431\u0430\u0440","meta_robots":"Robots",doctypes:"DocType",langcode:"\u0425\u044d\u043b\u043d\u0438\u0439 \u043a\u043e\u0434",langdir:"\u0425\u044d\u043b\u043d\u0438\u0439 \u0447\u0438\u0433\u043b\u044d\u043b",ltr:"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d",rtl:"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d","xml_pi":"XML \u0442\u043e\u0434\u043e\u0440\u0445\u043e\u0439\u043b\u043e\u043b\u0442",encoding:"\u0422\u044d\u043c\u0434\u044d\u0433\u0442 \u043a\u043e\u0434\u0447\u0438\u043b\u043e\u043b","appearance_bgprops":"\u0414\u044d\u0432\u0441\u0433\u044d\u0440\u0438\u0439\u043d \u0448\u0438\u043d\u0436\u04af\u04af\u0434","appearance_marginprops":"\u042d\u0445 \u0431\u0438\u0435\u0438\u0439\u043d \u044d\u043c\u0436\u044d\u044d\u0440","appearance_linkprops":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u043d \u04e9\u043d\u0433\u04e9","appearance_textprops":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u0448\u0438\u043d\u0436\u04af\u04af\u0434",bgcolor:"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u04e9\u043d\u0433\u04e9",bgimage:"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u0437\u0443\u0440\u0430\u0433","left_margin":"\u0417\u04af\u04af\u043d \u0430\u043b\u0441\u043b\u0430\u043b\u0442","right_margin":"\u0411\u0430\u0440\u0443\u0443\u043d \u0430\u043b\u0441\u043b\u0430\u043b\u0442","top_margin":"\u0414\u044d\u044d\u0434 \u0430\u043b\u0441\u043b\u0430\u043b\u0442","bottom_margin":"\u0414\u043e\u043e\u0434 \u0430\u043b\u0441\u043b\u0430\u043b\u0442","text_color":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u04e9\u043d\u0433\u04e9","font_size":"\u0411\u0438\u0447\u0433\u0438\u0439\u043d \u0445\u044d\u043c\u0436\u044d\u044d","font_face":"\u0424\u043e\u043d\u0442","link_color":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u043d \u04e9\u043d\u0433\u04e9","hover_color":"\u0414\u044d\u044d\u0440 \u043d\u044c \u0445\u04af\u0440\u044d\u0445 \u04e9\u043d\u0433\u04e9","visited_color":"\u0417\u043e\u0447\u0438\u043b\u0441\u043e\u043d \u04e9\u043d\u0433\u04e9","active_color":"\u0418\u0434\u044d\u0432\u0445\u0442\u044d\u0439 \u04e9\u043d\u0433\u04e9",textcolor:"\u04e8\u043d\u0433\u04e9",fontsize:"\u0411\u0438\u0447\u0433\u0438\u0439\u043d \u0445\u044d\u043c\u0436\u044d\u044d",fontface:"\u0424\u043e\u043d\u0442","meta_index_follow":"\u0418\u043d\u0434\u0435\u043a\u0441\u043b\u044d\u044d\u0434 \u0434\u0430\u0433\u0430\u043d\u0430","meta_index_nofollow":"\u0418\u043d\u0434\u0435\u043a\u0441\u043b\u044d\u044d\u0434 \u0434\u0430\u0433\u0430\u0445\u0433\u04af\u0439","meta_noindex_follow":"\u0418\u043d\u0434\u0435\u043a\u0441\u043b\u044d\u0445\u0433\u04af\u0439 \u0434\u0430\u0433\u0430\u043d\u0430","meta_noindex_nofollow":"\u0418\u043d\u0434\u0435\u043a\u0441\u043b\u044d\u0445\u0433\u04af\u0439 \u0434\u0430\u0433\u0430\u0445\u0433\u04af\u0439","appearance_style":"CSS-Stylesheet \u0431\u0430 \u0445\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442",stylesheet:"CSS-Stylesheet",style:"CSS-Stil",author:"\u0417\u043e\u0445\u0438\u043e\u0433\u0447",copyright:"\u0417\u043e\u0445\u0438\u043e\u0433\u0447\u0438\u0439\u043d \u044d\u0440\u0445",add:"\u0428\u0438\u043d\u044d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u044d\u043c\u044d\u0445",remove:"\u0421\u043e\u043d\u0433\u043e\u0441\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0439\u0433 \u0443\u0441\u0442\u0433\u0430\u0445",moveup:"\u0421\u043e\u043d\u0433\u043e\u0441\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0439\u0433 \u0434\u044d\u044d\u0448 \u0445\u04e9\u0434\u04e9\u043b\u0433\u04e9\u0445",movedown:"\u0421\u043e\u043d\u0433\u043e\u0441\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0439\u0433 \u0434\u043e\u043e\u0448 \u0445\u04e9\u0434\u04e9\u043b\u0433\u04e9\u0445","head_elements":"\u0413\u0430\u0440\u0447\u0438\u0433 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",info:"\u041c\u044d\u0434\u044d\u044d\u043b\u044d\u043b","add_title":"\u0413\u0430\u0440\u0447\u0438\u0433-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_meta":"Meta-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_script":"\u0421\u043a\u0440\u0438\u043f\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_style":"\u0417\u0430\u0433\u0432\u0430\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_link":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_base":"\u0421\u0443\u0443\u0440\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_comment":"HTML-\u0442\u0430\u0439\u043b\u0431\u0430\u0440","title_element":"\u0411\u0438\u0447\u0432\u044d\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442","script_element":"Script-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","style_element":"Style-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","base_element":"\u0421\u0443\u0443\u0440\u044c-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","link_element":"\u0417\u04af\u04af\u043d-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","meta_element":"\u0411\u0430\u0440\u0443\u0443\u043d","comment_element":"\u0422\u0430\u0439\u043b\u0431\u0430\u0440",src:"\u042d\u0445",language:"\u0425\u044d\u043b",href:"Href",target:"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d",type:"\u0422\u04e9\u0440\u04e9\u043b",charset:"\u0422\u044d\u043c\u0434\u044d\u0433\u0442\u0438\u0439\u043d \u043e\u043b\u043e\u043d\u043b\u043e\u0433",defer:"Defer",media:"\u041c\u0435\u0434\u0438\u0430",properties:"\u0422\u043e\u0434\u0440\u0443\u0443\u043b\u0433\u0430",name:"\u041d\u044d\u0440",value:"\u0423\u0442\u0433\u0430",content:"\u0410\u0433\u0443\u0443\u043b\u0433\u0430",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439","advanced_props":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ms_dlg.js
new file mode 100644
index 000000000..83751480a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.fullpage_dlg',{title:"Alatan dokumen","meta_tab":"Am","appearance_tab":"Penglihatan","advanced_tab":"Lanjutan","meta_props":"Meta informasi",langprops:"Bahasa dan enkod","meta_title":"Tajuk","meta_keywords":"Kata kunci","meta_description":"Huraian","meta_robots":"Robot",doctypes:"Doctype",langcode:"Kod bahasa",langdir:"Arah bahasa",ltr:"Kiri ke kanan",rtl:"Kanan ke kiri","xml_pi":"XML deklarasi",encoding:"PengKod aksara","appearance_bgprops":"Alatan latar belakang","appearance_marginprops":"Ruangan tepi isi kandungan","appearance_linkprops":"Pautan warna","appearance_textprops":"Alatan teks",bgcolor:"Warna latar belakang",bgimage:"Imej latar belakang","left_margin":"Ruangan tepi kiri","right_margin":"Ruangan tepi kanan","top_margin":"Ruangan tepi atas","bottom_margin":"Ruangan tepi bawah","text_color":"Warna teks","font_size":"Saiz Huruf","font_face":"Jenis Huruf","link_color":"Pautan Warna","hover_color":"Warna di atas","visited_color":"Warna telah lawat","active_color":"Warna aktif",textcolor:"Warna",fontsize:"Saiz huruf",fontface:"Keluarga huruf","meta_index_follow":"Indeks dan ikut pautan","meta_index_nofollow":"Indeks dan jangan ikut pautan","meta_noindex_follow":"Jangan indeks tapi ikut pautan","meta_noindex_nofollow":"Jangan indeks dan ikut pautan","appearance_style":"Stylesheet dan alatan gaya",stylesheet:"Stylesheet",style:"Gaya",author:"Pengarang",copyright:"Hakcipta",add:"Tambah unsur baru",remove:"Alih unsur yang dipilih",moveup:"Alih unsur yang dipilih ke atas",movedown:"Alih unsur yang dipilih ke bawah","head_elements":"Unsur pembuka",info:"Informasi","add_title":"Unsur tajuk","add_meta":"Unsur meta","add_script":"Unsur skrip","add_style":"Unsur gaya","add_link":"Unsur pautan","add_base":"Unsur dasar","add_comment":"Nod komen","title_element":"Unsur tajuk","script_element":"Unsur skrip","style_element":"Unsur gaya","base_element":"Unsur dasar","link_element":"Unsur pautan","meta_element":"Unsur meta","comment_element":"Komen",src:"Src",language:"Bahasa",href:"Href",target:"Sasaran",type:"Jenis",charset:"Set huruf",defer:"Menangguhkan",media:"Media",properties:"Alatan",name:"Nama",value:"Nilai",content:"Isi kandungan",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Am","advanced_props":"Lanjutan"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/my_dlg.js
new file mode 100644
index 000000000..035281b04
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.fullpage_dlg',{title:"\u1005\u102c\u101b\u103d\u1000\u103a\u1005\u102c\u1010\u1019\u103a\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","meta_tab":"\u1021\u1031\u1011\u103d\u1031\u1011\u103d","appearance_tab":"\u1021\u101e\u103d\u1004\u103a\u1021\u103c\u1015\u1004\u103a","advanced_tab":"\u1021\u1011\u1030\u1038","meta_props":"Meta \u1021\u1001\u103b\u1000\u103a\u1021\u101c\u1000\u103a\u1019\u103b\u102c\u1038",langprops:"\u1018\u102c\u101e\u102c\u1005\u1000\u102c\u1038\u1014\u103e\u1004\u103a\u1037 \u1000\u102f\u1010\u103a\u101d\u103e\u1000\u103a\u1005\u1014\u1005\u103a","meta_title":"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u102e\u1038\u1021\u1019\u100a\u103a","meta_keywords":"\u1031\u101e\u102c\u1037\u1001\u103b\u1000\u103a\u1005\u1000\u102c\u1038\u101c\u1036\u102f\u1038\u1019\u103b\u102c\u1038","meta_description":"\u1031\u1016\u102c\u103a\u103c\u1015\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038","meta_robots":"\u101b\u102d\u102f\u1037\u1031\u1018\u102c\u1037\u1019\u103b\u102c\u1038",doctypes:"DocType",langcode:"\u1018\u102c\u101e\u102c\u1005\u1000\u102c\u1038 \u1000\u102f\u1010\u103a",langdir:"\u1005\u102c\u1031\u101b\u1038\u101e\u102c\u1038\u1019\u103e\u102f \u1025\u102e\u1038\u1010\u100a\u103a\u1001\u103b\u1000\u103a",ltr:"\u1018\u101a\u103a\u1019\u103e \u100a\u102c",rtl:"\u100a\u102c\u1019\u103e \u1018\u101a\u103a","xml_pi":"XML \u1031\u103c\u1000\u102c\u103a\u103c\u1004\u102c\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038",encoding:"\u1021\u1000\u1039\u1001\u101b\u102c \u1000\u102f\u1010\u103a\u101d\u103e\u1000\u103a\u1005\u1014\u1005\u103a","appearance_bgprops":"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","appearance_marginprops":"\u1000\u102d\u102f\u101a\u103a\u1011\u100a\u103a \u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038\u1019\u103b\u102c\u1038","appearance_linkprops":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1021\u1031\u101b\u102c\u1004\u103a\u1019\u103b\u102c\u1038","appearance_textprops":"\u1005\u102c\u101e\u102c\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038",bgcolor:"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u1021\u1031\u101b\u102c\u1004\u103a",bgimage:"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u101b\u102f\u1015\u103a\u1015\u1036\u102f","left_margin":"\u1018\u101a\u103a\u1018\u1000\u103a \u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038","right_margin":"\u100a\u102c\u1018\u1000\u103a \u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038","top_margin":"\u1011\u102d\u1015\u103a\u1015\u102d\u102f\u1004\u103a\u1038 \u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038","bottom_margin":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001 \u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038","text_color":"\u1005\u102c\u101e\u102c\u1038\u1021\u1031\u101b\u102c\u1004\u103a","font_size":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1031\u1016\u102c\u1004\u103a\u1037\u1021\u101b\u103d\u101a\u103a","font_face":"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1016\u102c\u1004\u103a\u1037 \u1019\u102d\u101e\u102c\u1038\u1005\u102f","link_color":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1021\u1031\u101b\u102c\u1004\u103a","hover_color":"Hover \u1021\u1031\u101b\u102c\u1004\u103a","visited_color":"Visited \u1021\u1031\u101b\u102c\u1004\u103a","active_color":"Active \u1021\u1031\u101b\u102c\u1004\u103a",textcolor:"\u1021\u1031\u101b\u102c\u1004\u103a",fontsize:"\u1005\u102c\u101c\u1036\u102f\u1038 \u1031\u1016\u102c\u1004\u103a\u1037\u1021\u101b\u103d\u101a\u103a",fontface:"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1016\u102c\u1004\u103a\u1037 \u1019\u102d\u101e\u102c\u1038\u1005\u102f","meta_index_follow":"\u1021\u100a\u103d\u103e\u1014\u103a\u1038\u103c\u1015\u102f\u101c\u102f\u1015\u103a\u104d \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1031\u1014\u102c\u1000\u103a\u101c\u102d\u102f\u1000\u103a\u1015\u102b","meta_index_nofollow":"\u1021\u100a\u103d\u103e\u1014\u103a\u1038\u103c\u1015\u102f\u101c\u102f\u1015\u103a\u103c\u1015\u102e\u1038 \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1031\u1014\u102c\u1000\u103a\u1019\u101c\u102d\u102f\u1000\u103a\u1015\u102b\u1014\u103e\u1004\u103a\u1037","meta_noindex_follow":"\u1021\u100a\u103d\u103e\u1014\u103a\u1038\u1019\u103c\u1015\u102f\u101c\u102f\u1015\u103a\u1018\u1032 \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1031\u1014\u102c\u1000\u103a\u101c\u102d\u102f\u1000\u103a\u1015\u102b","meta_noindex_nofollow":"\u1021\u100a\u103d\u103e\u1014\u103a\u1038\u1019\u101c\u102f\u1015\u103a\u1015\u102b \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1031\u1014\u102c\u1000\u103a\u101c\u100a\u103a\u1038 \u1019\u101c\u102d\u102f\u1000\u103a\u1015\u102b","appearance_style":"Stylesheet \u1014\u103e\u1004\u103a \u1005\u1010\u102d\u102f\u1004\u103a \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038",stylesheet:"\u1005\u1010\u102d\u102f\u1004\u103a \u1005\u102c\u101b\u103d\u1000\u103a",style:"\u1005\u1010\u102d\u102f\u1004\u103a",author:"\u1031\u101b\u1038\u101e\u1030",copyright:"\u1019\u1030\u1015\u102d\u102f\u1004\u103a\u1001\u103d\u1004\u103a\u1037",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nb_dlg.js
new file mode 100644
index 000000000..3c4b2696f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.fullpage_dlg',{title:"Dokumentegenskaper","meta_tab":"Generelt","appearance_tab":"Utseende","advanced_tab":"Avansert","meta_props":"Metainformasjon",langprops:"Spr\u00e5k og koding","meta_title":"Tittel","meta_keywords":"N\u00f8kkelord","meta_description":"Beskrivelse","meta_robots":"Roboter",doctypes:"Doctype",langcode:"Spr\u00e5kkode",langdir:"Skriftretning",ltr:"Venstre mot h\u00f8yre",rtl:"H\u00f8yre mot venstre","xml_pi":"XML-deklarasjon",encoding:"Tegnkonvertering","appearance_bgprops":"Bakgrunnsegenskaper","appearance_marginprops":"Body-marg","appearance_linkprops":"Lenkefarger","appearance_textprops":"Tekstegenskaper",bgcolor:"Bakgrunn",bgimage:"Bakgrunnsbilde","left_margin":"Venstre marg","right_margin":"H\u00f8yre marg","top_margin":"Toppmarg","bottom_margin":"Bunnmarg","text_color":"Farge","font_size":"Skriftst\u00f8rrelse","font_face":"Skrifttype","link_color":"Lenkefarge","hover_color":"Mus over-farge","visited_color":"Bes\u00f8kt-farge","active_color":"Aktive farge",textcolor:"Farge",fontsize:"Skriftst\u00f8rrelse",fontface:"Skrifttype","meta_index_follow":"Indekser, og f\u00f8lg lenkene","meta_index_nofollow":"Indekser, men ikke f\u00f8lg lenkene","meta_noindex_follow":"Ikke indekser, men f\u00f8lg lenkene","meta_noindex_nofollow":"Ikke indekser, og ikke f\u00f8lg lenkene","appearance_style":"Stilark og stilegenskaper",stylesheet:"Stilark",style:"Stil",author:"Forfatter",copyright:"Copyright",add:"Legg til nytt element",remove:"Fjern",moveup:"Flytt markert element opp",movedown:"Flytt markert element ned","head_elements":"Overskriftselementer",info:"Informasjon","add_title":"Tittelelement","add_meta":"Metaelement","add_script":"Skriptelement","add_style":"Stilelement","add_link":"Lenkeelement","add_base":"Basiselement","add_comment":"Kommentarnode","title_element":"Tittelelement","script_element":"Skriptelement","style_element":"Stilelement","base_element":"Basiselement","link_element":"Lenkeelement","meta_element":"Metaelement","comment_element":"Kommentar",src:"Skjerm",language:"Spr\u00e5k",href:"Href",target:"M\u00e5l",type:"Type",charset:"Tegnsett",defer:"Defer",media:"Objekt",properties:"Egenskaper",name:"Navn",value:"Verdi",content:"Innhold",rel:"Sidens forhold til m\u00e5let",rev:"M\u00e5lets forhold til siden",hreflang:"Href lang","general_props":"Generelt","advanced_props":"Avasert"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nl_dlg.js
new file mode 100644
index 000000000..9124146ce
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.fullpage_dlg',{title:"Documenteigenschappen","meta_tab":"Algemeen","appearance_tab":"Weergave","advanced_tab":"Geavanceerd","meta_props":"Meta informatie",langprops:"Taal en codering","meta_title":"Titel","meta_keywords":"Sleutelwoorden","meta_description":"Beschrijving","meta_robots":"Robots",doctypes:"Doctype",langcode:"Taalcode",langdir:"Taalrichting",ltr:"Van links naar rechts",rtl:"Van rechts naar links","xml_pi":"XML toewijzing",encoding:"Karaktercodering","appearance_bgprops":"Achtergrondeigenschappen","appearance_marginprops":"Bodymarge","appearance_linkprops":"Linkkleuren","appearance_textprops":"Teksteigenschappen",bgcolor:"Achtergrondkleur",bgimage:"Achtergrondafbeelding","left_margin":"Linkermarge","right_margin":"Rechtermarge","top_margin":"Bovenmarge","bottom_margin":"Ondermarge","text_color":"Tekstkleur","font_size":"Tekengrootte","font_face":"Lettertype","link_color":"Linkkleur","hover_color":"Hoverkleur","visited_color":"Bezocht kleur","active_color":"Actieve kleur",textcolor:"Kleur",fontsize:"Tekengrootte",fontface:"Lettertype","meta_index_follow":"Links indexeren en volgen","meta_index_nofollow":"Links indexeren maar niet volgen","meta_noindex_follow":"Links volgen maar niet indexeren","meta_noindex_nofollow":"Links niet indexeren en niet volgen","appearance_style":"Stijlblad en stijleigenschappen",stylesheet:"Stijlblad",style:"Stijl",author:"Auteur",copyright:"Copyright",add:"Nieuw element toevoegen",remove:"Geselecteerde elementen verwijderen",moveup:"Geselecteerde elementen omhoog verplaatsen",movedown:"Geselecteerde elementen omlaag verplaatsen","head_elements":"Kopelementen",info:"Informatie","add_title":"Titelelement","add_meta":"Meta-element","add_script":"Scriptelement","add_style":"Stijlelement","add_link":"Linkelement","add_base":"Basiselement","add_comment":"Opmerkingknooppunt","title_element":"Titelelement","script_element":"Scriptelement","style_element":"Stijlelement","base_element":"Basiselement","link_element":"Linkelement","meta_element":"Meta-element","comment_element":"Opmerking",src:"Bron",language:"Taal",href:"HREF",target:"Doel",type:"Type",charset:"Karakterset",defer:"Uitstellen",media:"Media",properties:"Eigenschappen",name:"Naam",value:"Waarde",content:"Inhoud",rel:"Rel",rev:"Rev",hreflang:"HREF taal","general_props":"Algemeen","advanced_props":"Geavanceerd"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nn_dlg.js
new file mode 100644
index 000000000..433cfab06
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.fullpage_dlg',{title:"Dokumenteigenskapar","meta_tab":"Generelt","appearance_tab":"Utsj\u00e5nad","advanced_tab":"Avansert","meta_props":"Metainformasjon",langprops:"Spr\u00e5k og koding","meta_title":"Tittel","meta_keywords":"N\u00f8kkelord","meta_description":"Omtale","meta_robots":"Roboter",doctypes:"Doctype",langcode:"Spr\u00e5kkode",langdir:"Skriftretning",ltr:"Venstre mot h\u00f8gre",rtl:"H\u00f8gre mot venstre","xml_pi":"XML-deklarasjon",encoding:"Teiknkonvertering","appearance_bgprops":"Bakgrunnseigenskapar","appearance_marginprops":"Body-marg","appearance_linkprops":"Lenkjefargar","appearance_textprops":"Teksteigenskapar",bgcolor:"Bakgrunn",bgimage:"Bakgrunnsbilete","left_margin":"Venstre marg","right_margin":"H\u00f8gre marg","top_margin":"Toppmarg","bottom_margin":"Botnmarg","text_color":"Farge","font_size":"Skriftstorleik","font_face":"Skrifttype","link_color":"Lenkjefarge","hover_color":"Mus-over-farge","visited_color":"Bes\u00f8kt-farge","active_color":"Aktiv farge",textcolor:"Farge",fontsize:"Skriftstorleik",fontface:"Skriftfamile","meta_index_follow":"Indekser, og f\u00f8lg lenkjene","meta_index_nofollow":"Indekser, men ikkje f\u00f8lg lenkjene","meta_noindex_follow":"Ikkje indekser, men f\u00f8lg lenkjene","meta_noindex_nofollow":"Ikkje indekser, og ikkje f\u00f8lg lenkjene","appearance_style":"Stilark og stileigenskapar",stylesheet:"Stilark",style:"Stil",author:"Forfattar",copyright:"Copyright",add:"Legg til nytt element",remove:"Fjern",moveup:"Flytt markert element opp",movedown:"Flytt markert element ned","head_elements":"Overskriftselement",info:"Informasjon","add_title":"Tittelelement","add_meta":"Metaelement","add_script":"Skriptelement","add_style":"Stilelement","add_link":"Lenkjeelement","add_base":"Basiselement","add_comment":"Kommentarnode","title_element":"Tittelelement","script_element":"Skriptelement","style_element":"Stilelement","base_element":"Basiselement","link_element":"Lenkjeelement","meta_element":"Metaelement","comment_element":"Kommentar",src:"Skjerm",language:"Spr\u00e5k",href:"Href",target:"M\u00e5l",type:"Type",charset:"Teiknsett",defer:"Defer",media:"Objekt",properties:"Eigenskapar",name:"Namn",value:"Verdi",content:"Nytt lag...",rel:"Sida sitt tilh\u00f8ve til m\u00e5let",rev:"M\u00e5let sitt tilh\u00f8ve til sida",hreflang:"Href lang","general_props":"Generelt","advanced_props":"Generelle eigenskapar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/no_dlg.js
new file mode 100644
index 000000000..66fc8ce4e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.fullpage_dlg',{title:"Dokumentegenskaper","meta_tab":"Generelt","appearance_tab":"Utseende","advanced_tab":"Avansert","meta_props":"Meta informasjon",langprops:"Spr\u00e5k og koding","meta_title":"Tittel","meta_keywords":"N\u00f8kkelord","meta_description":"Beskrivelse","meta_robots":"Roboter",doctypes:"Dokument type",langcode:"Spr\u00e5kkode",langdir:"Skriftretning",ltr:"Venstre mot h\u00f8yre",rtl:"H\u00f8yre mot venstre","xml_pi":"XML deklarering",encoding:"Karakter konvertering","appearance_bgprops":"Bakgrunnsegenskaper","appearance_marginprops":"Body marg","appearance_linkprops":"Lenke farger","appearance_textprops":"Tekst egenskaper",bgcolor:"Bakgrunnsfarge",bgimage:"Bakgrunnsbilde","left_margin":"Venstre marg","right_margin":"H\u00f8yre marg","top_margin":"Topp marg","bottom_margin":"Bunn marg","text_color":"Tekstfarge","font_size":"Skriftst\u00f8rrelse","font_face":"Skrifttype","link_color":"Lenke farge","hover_color":"Mus-over farge","visited_color":"Bes\u00f8kt farge","active_color":"Aktiv farge",textcolor:"Farge",fontsize:"Skriftst\u00f8rrelse",fontface:"Skriftfamile","meta_index_follow":"Indekser og f\u00f8lg lenkene","meta_index_nofollow":"Indekser og ikke f\u00f8lg lenkene","meta_noindex_follow":"Ikke indekser, men f\u00f8lg lenkene","meta_noindex_nofollow":"Ikke indekser, og ikke f\u00f8lg lenkene","appearance_style":"Stilark og stilegenskaper",stylesheet:"Stilark",style:"Stil",author:"Forfatter",copyright:"Copyright",add:"Legg til nytt element",remove:"Fjerne valgt element",moveup:"Flytt markert element opp",movedown:"Flytt markert element ned","head_elements":"Overskriftselement",info:"Informasjon","add_title":"Tittelelement","add_meta":"Metaelement","add_script":"Skriptelement","add_style":"Stilelement","add_link":"Lenkeelement","add_base":"Basiselement","add_comment":"Kommentar","title_element":"Tittelelement","script_element":"Skriptelement","style_element":"Stilelement","base_element":"Basiselement","link_element":"Lenkeelement","meta_element":"Metaelement","comment_element":"Kommentar",src:"Kilde",language:"Spr\u00e5k",href:"Href",target:"M\u00e5l",type:"Type",charset:"Tegnsett",defer:"Henstille",media:"Objekt",properties:"Egenskaper",name:"Navn",value:"Verdi",content:"Innhold",rel:"Rel",rev:"Rev",hreflang:"Href spr\u00e5k","general_props":"Generelt","advanced_props":"Avansert"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/pl_dlg.js
new file mode 100644
index 000000000..b94005264
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.fullpage_dlg',{title:"W\u0142a\u015bciwo\u015bci dokumentu","meta_tab":"Og\u00f3lne","appearance_tab":"Wygl\u0105d","advanced_tab":"Zaawansowane","meta_props":"Meta informacje",langprops:"J\u0119zyk i kodowanie","meta_title":"Tytu\u0142","meta_keywords":"S\u0142owa kluczowe","meta_description":"Opis","meta_robots":"Roboty",doctypes:"Typ dokumentu",langcode:"Oznaczenie kodowe j\u0119zyka",langdir:"Kierunek czytania tekstu",ltr:"Kierunek z lewej do prawej",rtl:"Kierunek z prawej do lewej","xml_pi":"Deklaracja XML",encoding:"Kodowanie znak\u00f3w","appearance_bgprops":"W\u0142a\u015bciwo\u015bci t\u0142a","appearance_marginprops":"Marginesy strony","appearance_linkprops":"Kolor odno\u015bnik\u00f3w","appearance_textprops":"W\u0142a\u015bciwo\u015bci tekstu",bgcolor:"Kolor t\u0142a",bgimage:"Obrazek t\u0142a","left_margin":"Lewy margines","right_margin":"Prawy margines","top_margin":"G\u00f3rny margines","bottom_margin":"Dolny margines","text_color":"Kolor tekstu","font_size":"Rozmiar czcionki","font_face":"Czcionka","link_color":"Kolor odno\u015bnika","hover_color":"Kolor po najechaniu myszk\u0105","visited_color":"Kolor odwiedzonych link\u00f3w","active_color":"Kolor aktywnych link\u00f3w",textcolor:"Kolor",fontsize:"Rozmiar czcionki",fontface:"Rodzaj czcionki","meta_index_follow":"Indeksuj i pod\u0105\u017caj za linkami","meta_index_nofollow":"Indeksuj i nie pod\u0105\u017caj za odno\u015bnikami","meta_noindex_follow":"Nie indeksuj i pod\u0105\u017caj za odno\u015bnikami","meta_noindex_nofollow":"Nie indeksuj i nie pod\u0105\u017caj za odno\u015bnikami","appearance_style":"Arkusze i w\u0142a\u015bciwo\u015bci styl\u00f3w",stylesheet:"Arkusz styl\u00f3w",style:"Styl",author:"Autor",copyright:"Prawa autorskie",add:"Dodaj nowy element",remove:"Usu\u0144 wybrany element",moveup:"Przesu\u0144 wybrane element do g\u00f3ry",movedown:"Przesu\u0144 wybrane element w d\u00f3\u0142","head_elements":"Elementy nag\u0142\u00f3wka",info:"Informacja","add_title":"Tytu\u0142","add_meta":"Meta tag","add_script":"Skrypt","add_style":"Styl","add_link":"Odno\u015bnik","add_base":"Baza","add_comment":"Komentarz","title_element":"Tytu\u0142","script_element":"Skrypt","style_element":"Styl","base_element":"Baza","link_element":"Odno\u015bnik","meta_element":"Meta tag","comment_element":"Komentarz",src:"\u0179r\u00f3d\u0142o",language:"J\u0119zyk",href:"Odno\u015bnik",target:"Cel",type:"Typ",charset:"Kodowanie",defer:"Defer",media:"Media",properties:"W\u0142a\u015bciwo\u015bci",name:"Nazwa",value:"Warto\u015b\u0107",content:"Zawarto\u015b\u0107",rel:"Rel",rev:"Rev",hreflang:"J\u0119zyk odno\u015bnika","general_props":"G\u0142\u00f3wne","advanced_props":"Zaawansowane"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ps_dlg.js
new file mode 100644
index 000000000..d62c50907
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/pt_dlg.js
new file mode 100644
index 000000000..749f86859
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.fullpage_dlg',{title:"Propriedades do documento","meta_tab":"Geral","appearance_tab":"Apar\u00eancia","advanced_tab":"Avan\u00e7ado","meta_props":"Meta-informa\u00e7\u00e3o",langprops:"Idioma e codifica\u00e7\u00e3o","meta_title":"T\u00edtulo","meta_keywords":"Palavras-chave","meta_description":"Descri\u00e7\u00e3o","meta_robots":"Robots",doctypes:"Doctype",langcode:"C\u00f3digo do idioma",langdir:"Dire\u00e7\u00e3o do texto",ltr:"Esquerda para direita",rtl:"Direita para esquerda","xml_pi":"Declara\u00e7\u00e3o XML",encoding:"Codifica\u00e7\u00e3o de caracteres","appearance_bgprops":"Propriedades do plano de fundo","appearance_marginprops":"Margens (BODY)","appearance_linkprops":"Cores dos links","appearance_textprops":"Propriedades de texto",bgcolor:"Cor de fundo",bgimage:"Imagem de fundo","left_margin":"Margem esquerda","right_margin":"Margem direita","top_margin":"Margem topo","bottom_margin":"Margem base","text_color":"Cor do texto","font_size":"Tamanho fonte","font_face":"Fonte","link_color":"Cores dos links","hover_color":"Hover","visited_color":"Visitado","active_color":"Ativo",textcolor:"Cor",fontsize:"Tamanho fonte",fontface:"Fonte","meta_index_follow":"Indexar e seguir os hyperlinks","meta_index_nofollow":"Indexar e n\u00e3o seguir os hyperlinks","meta_noindex_follow":"Seguir hyperlinks, mas n\u00e3o indexar","meta_noindex_nofollow":"N\u00e3o indexar / n\u00e3o seguir hyperlinks.","appearance_style":"Propriedades de folhas de estilo",stylesheet:"Folha de estilo",style:"Estilo",author:"Autor",copyright:"Copyright",add:"Acrescentar novo elemento",remove:"Remover elemento selecionado",moveup:"Subir elemento selecionado",movedown:"Descer elemento selecionado","head_elements":"Elementos HEAD",info:"Informa\u00e7\u00e3o","add_title":"TITLE","add_meta":"META","add_script":"SCRIPT","add_style":"STYLE","add_link":"LINK","add_base":"BASE","add_comment":"Coment\u00e1rio","title_element":"TITLE","script_element":"SCRIPT","style_element":"STYLE","base_element":"BASE","link_element":"LINK","meta_element":"META","comment_element":"Coment\u00e1rio",src:"src",language:"Idioma",href:"href",target:"Alvo",type:"Tipo",charset:"Charset",defer:"Adiar",media:"Media",properties:"Propriedades",name:"Nome",value:"Valor",content:"Conte\u00fado",rel:"rel",rev:"rev",hreflang:"href lang","general_props":"Geral","advanced_props":"Avan\u00e7ado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ro_dlg.js
new file mode 100644
index 000000000..db0a58bc8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.fullpage_dlg',{title:"Propriet\u0103\u021bi document","meta_tab":"General","appearance_tab":"Aspect","advanced_tab":"Avansat","meta_props":"Meta informa\u021bii",langprops:"Limb\u0103 \u0219i codare","meta_title":"Titlu","meta_keywords":"Cuvinte cheie","meta_description":"Descriere","meta_robots":"Robo\u021bi",doctypes:"Doctype",langcode:"Cod limb\u0103",langdir:"Direc\u021bie limb\u0103",ltr:"De la st\u00e2nga la dreapta",rtl:"De la dreapta la st\u00e2nga","xml_pi":"Declara\u021bie XML",encoding:"Cod caractere","appearance_bgprops":"Propriet\u0103\u021bi fundal","appearance_marginprops":"Margini corp","appearance_linkprops":"Culoare leg\u0103turi","appearance_textprops":"Propriet\u0103\u021bi text",bgcolor:"Culoare de fundal",bgimage:"Imagine de fundal","left_margin":"Margine st\u00e2nga","right_margin":"Margine dreapta","top_margin":"Margine sus","bottom_margin":"Margine jos","text_color":"Culoare text","font_size":"Dimensiune font","font_face":"Tip font","link_color":"Culoare leg\u0103tur\u0103","hover_color":"Culoare leg\u0103tur\u0103 la maus deasupra","visited_color":"Leg\u0103tur\u0103 vizitat\u0103","active_color":"Leg\u0103tur\u0103 activ\u0103",textcolor:"Culoare",fontsize:"Dimensiune font",fontface:"Tip font","meta_index_follow":"Indexeaz\u0103 \u0219i urm\u0103re\u0219te aceste leg\u0103turi","meta_index_nofollow":"Indexeaz\u0103 \u0219i nu urm\u0103ri aceste leg\u0103turi","meta_noindex_follow":"Nu indexa, dar urm\u0103re\u0219te aceste leg\u0103turi","meta_noindex_nofollow":"Nu indexa \u0219i nu urm\u0103ri aceste leg\u0103turi","appearance_style":"Stil",stylesheet:"Foaie de stil",style:"Stil",author:"Autor",copyright:"Copyright",add:"Adaug\u0103 un element",remove:"\u0218terge elementul selectat",moveup:"Mut\u0103 elementul selectat \u00een sus",movedown:"Mut\u0103 elementul selectat \u00een jos","head_elements":"Elemente de antet",info:"Informa\u021bii","add_title":"Titlu","add_meta":"Meta","add_script":"Script","add_style":"Stil","add_link":"Link","add_base":"Base","add_comment":"Comentariu","title_element":"Title","script_element":"Script","style_element":"Stil","base_element":"Base","link_element":"Link","meta_element":"Meta","comment_element":"Comentariu",src:"Src",language:"Limb\u0103",href:"Href",target:"\u021aint\u0103",type:"Tip",charset:"Set de caractere",defer:"Defer",media:"Media",properties:"Propriet\u0103\u021bi",name:"Nume",value:"Valoare",content:"Con\u021binut",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Avansat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ru_dlg.js
new file mode 100644
index 000000000..1ae10de0a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.fullpage_dlg',{title:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","meta_tab":"\u041e\u0431\u0449\u0435\u0435","appearance_tab":"\u0412\u0438\u0434","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","meta_props":"\u0426\u0435\u043b\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438",langprops:"\u042f\u0437\u044b\u043a \u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f","meta_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","meta_keywords":"\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430","meta_description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","meta_robots":"\u0420\u0430\u0431\u043e\u0442\u044b",doctypes:"\u0422\u0438\u043f",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","xml_pi":"\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 XML",encoding:"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430","appearance_bgprops":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0444\u043e\u043d\u0430","appearance_marginprops":"\u041e\u0442\u0441\u0442\u0443\u043f\u044b","appearance_linkprops":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043e\u043a","appearance_textprops":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0430",bgcolor:"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430",bgimage:"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","left_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043b\u0435\u0432\u0430","right_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043f\u0440\u0430\u0432\u0430","top_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u0432\u0435\u0440\u0445\u0443","bottom_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043d\u0438\u0437\u0443","text_color":"\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430","font_face":"\u0428\u0440\u0438\u0444\u0442","link_color":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438","hover_color":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438","visited_color":"\u0426\u0432\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438","active_color":"\u0426\u0432\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438",textcolor:"\u0426\u0432\u0435\u0442",fontsize:"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",fontface:"\u0421\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0448\u0440\u0438\u0444\u0442\u043e\u0432","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don \\ \'t follow the links","appearance_style":"\u041b\u0438\u0441\u0442 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u0438\u043b\u0435\u0439",stylesheet:"\u041b\u0438\u0441\u0442 \u0441\u0442\u0438\u043b\u0435\u0439",style:"\u0421\u0442\u0438\u043b\u044c",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"\u041a\u043e\u043f\u0438\u0440\u0430\u0439\u0442",add:"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0432\u0435\u0440\u0445",movedown:"\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u043d\u0438\u0437","head_elements":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Header",info:"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f","add_title":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Title","add_meta":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Meta","add_script":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Script","add_style":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Style","add_link":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Link","add_base":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Base","add_comment":"\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439","title_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Title","script_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Script","style_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Style","base_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Base","link_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Link","meta_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Meta","comment_element":"\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439",src:"Src",language:"\u042f\u0437\u044b\u043a",href:"\u0441\u0441\u044b\u043b\u043a\u0430",target:"\u0426\u0435\u043b\u044c",type:"Type",charset:"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430",defer:"\u041e\u0442\u0441\u0440\u043e\u0447\u043a\u0430",media:"\u041c\u0435\u0434\u0438\u0430",properties:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",name:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",value:"\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435",content:"\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435",rel:"Rel",rev:"Rev",hreflang:"\u042f\u0437\u044b\u043a \u0441\u0441\u044b\u043b\u043a\u0438","general_props":"\u041e\u0431\u0449\u0435\u0435","advanced_props":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sc_dlg.js
new file mode 100644
index 000000000..17b20d5cc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.fullpage_dlg',{title:"\u6863\u5c5e\u6027","meta_tab":"\u4e00\u822c","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"\u6807\u7b7e( Meta )\u4fe1\u606f",langprops:"\u8bed\u8a00\u4e0e\u7f16\u7801","meta_title":"\u6807\u9898","meta_keywords":"\u5173\u952e\u5b57","meta_description":"\u5185\u5bb9\u8bf4\u660e","meta_robots":"Robots",doctypes:"Doctype",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",ltr:"\u7531\u5de6\u5230\u53f3",rtl:"\u7531\u53f3\u5230\u5de6","xml_pi":"XML\u5ba3\u544a",encoding:"\u5b57\u5143\u7f16\u7801","appearance_bgprops":"\u80cc\u666f\u5c5e\u6027","appearance_marginprops":"Body margins","appearance_linkprops":"\u8fde\u7ed3\u989c\u8272","appearance_textprops":"\u6587\u672c\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u8fb9\u754c","right_margin":"\u53f3\u8fb9\u754c","top_margin":"\u4e0a\u8fb9\u754c","bottom_margin":"\u4e0b\u8fb9\u754c","text_color":"\u6587\u5b57\u989c\u8272","font_size":"\u5b57\u4f53\u5c3a\u5bf8","font_face":"\u5b57\u4f53","link_color":"\u8fde\u7ed3\u989c\u8272","hover_color":"Hover\u989c\u8272","visited_color":"Visited\u989c\u8272","active_color":"Active\u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u5b57\u4f53\u5927\u5c0f",fontface:"\u5b57\u5f62\u4f53\u7cfb","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"\u6837\u5f0f\u8868\u5355\u53ca\u6837\u5f0f\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u8868\u5355",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743",add:"\u6dfb\u52a0\u65b0\u5143\u7d20",remove:"\u79fb\u9664\u9009\u5b9a\u5143\u7d20",moveup:"\u4e0a\u79fb\u9009\u5b9a\u5143\u7d20",movedown:"\u4e0b\u79fb\u9009\u5b9a\u5143\u7d20","head_elements":"Head elements",info:"\u4fe1\u606f","add_title":"\u67e5\u627e\u5143\u7d20","add_meta":"Meta\u5143\u7d20","add_script":"Script\u5143\u7d20","add_style":"Style\u5143\u7d20","add_link":"Link\u5143\u7d20","add_base":"Base\u5143\u7d20","add_comment":"Comment node","title_element":"\u67e5\u627eelement","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"\u8bed\u8a00",href:"Href",target:"\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u5143\u96c6",defer:"\u5ef6\u7f13",media:"\u5a92\u4f53",properties:"\u5c5e\u6027",name:"\u540d\u79f0",value:"\u503c",content:"\u5185\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u4e00\u822c","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/se_dlg.js
new file mode 100644
index 000000000..c9de76c94
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.fullpage_dlg',{title:"Dokumentinst\u00e4llningar","meta_tab":"Generella","appearance_tab":"Utseende","advanced_tab":"Avancerat","meta_props":"Metainformation",langprops:"Spr\u00e5k och kodning","meta_title":"Titel","meta_keywords":"Nyckelord","meta_description":"Bekrivning","meta_robots":"Robots",doctypes:"Doctype",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning",ltr:"V\u00e4nster till h\u00f6ger",rtl:"H\u00f6ger till v\u00e4nster","xml_pi":"XML deklaration",encoding:"Teckenkodning","appearance_bgprops":"Bakgrundsinst\u00e4llningar","appearance_marginprops":"Body marginaler","appearance_linkprops":"L\u00e4nkf\u00e4rger","appearance_textprops":"Textinst\u00e4llningar",bgcolor:"Bakgrundsf\u00e4rg",bgimage:"Bakgrundsbild","left_margin":"V\u00e4nstermarginal","right_margin":"H\u00f6germarginal","top_margin":"Toppmarginal","bottom_margin":"Bottenmarginal","text_color":"Textf\u00e4rg","font_size":"Textstorlek","font_face":"Textstil","link_color":"L\u00e4nkf\u00e4rg","hover_color":"Hover f\u00e4rg","visited_color":"Visited f\u00e4rg","active_color":"Active f\u00e4rg",textcolor:"F\u00e4rg",fontsize:"Textstorlek",fontface:"Textstil","meta_index_follow":"Indexera och f\u00f6lj l\u00e4nkar","meta_index_nofollow":"Indexera men f\u00f6lj ej l\u00e4nkar","meta_noindex_follow":"Indexera inte men f\u00f6lj l\u00e4nkar","meta_noindex_nofollow":"Indexera inte och f\u00f6lj ej l\u00e4nkar","appearance_style":"Stilmall och stilegenskaper",stylesheet:"Stilmall",style:"Stil",author:"F\u00f6rfattare",copyright:"Copyright",add:"L\u00e4gg till element",remove:"Radera det markerade elementet",moveup:"Flytta det markerade elementet upp\u00e5t",movedown:"Flytta det markerade elementet ned\u00e5t","head_elements":"Head element",info:"Information","add_title":"Titel-element","add_meta":"Meta-element","add_script":"Script-element","add_style":"Stil-element","add_link":"L\u00e4nk-element","add_base":"Base-element","add_comment":"Kommentarsnod","title_element":"Titel-element","script_element":"Script-element","style_element":"Style-element","base_element":"Base-element","link_element":"Link-element","meta_element":"Meta-element","comment_element":"Comment-element",src:"Src",language:"Spr\u00e5k",href:"Href",target:"M\u00e5l",type:"Typ",charset:"Teckenupps\u00e4ttning",defer:"Defer",media:"Media",properties:"Egenskaper",name:"Name",value:"Value",content:"Inneh\u00e5ll",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Generellt","advanced_props":"Avancerat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/si_dlg.js
new file mode 100644
index 000000000..3cfc4f1d7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sk_dlg.js
new file mode 100644
index 000000000..4c7a8537a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.fullpage_dlg',{title:"Vlastnosti dokumentu","meta_tab":"Obecn\u00e9","appearance_tab":"Vzh\u013ead","advanced_tab":"Roz\u0161\u00edren\u00e9","meta_props":"Meta inform\u00e1cie",langprops:"Jazyk a k\u00f3dovanie","meta_title":"Titulok","meta_keywords":"K\u013e\u00fa\u010dov\u00e9 slov\u00e1","meta_description":"Popis","meta_robots":"Roboti",doctypes:"Typ dokumentu",langcode:"K\u00f3d jazyka",langdir:"Smer textu",ltr:"Z\u013eava doprava",rtl:"Sprava do\u013eava","xml_pi":"XML deklar\u00e1cia",encoding:"K\u00f3dovanie","appearance_bgprops":"Vlastnosti pozadia","appearance_marginprops":"Okraje tela dokumentu","appearance_linkprops":"Vlastnosti odkazov","appearance_textprops":"Vlastnosti textu",bgcolor:"Farba pozadia",bgimage:"Obr\u00e1zok pozadia","left_margin":"\u013dav\u00fd okraj","right_margin":"Prav\u00fd okraj","top_margin":"Horn\u00fd okraj","bottom_margin":"Doln\u00fd okraj","text_color":"Farba textu","font_size":"Ve\u013ekos\u0165 p\u00edsma","font_face":"Typ p\u00edsma","link_color":"Farba odkazu","hover_color":"Farba vybrat\u00e9ho odkazu","visited_color":"Farba nav\u0161t\u00edven\u00e9ho odkazu","active_color":"Farba akt\u00edvneho odkazu",textcolor:"Farba",fontsize:"Ve\u013ekos\u0165 p\u00edsma",fontface:"Typ p\u00edsma","meta_index_follow":"Indexova\u0165 a n\u00e1sledova\u0165 odkazy","meta_index_nofollow":"Indexova\u0165 a nen\u00e1sledova\u0165 odkazy","meta_noindex_follow":"Neindexova\u0165, ale n\u00e1sledova\u0165 odkazy","meta_noindex_nofollow":"Neindexova\u0165 a nen\u00e1sledova\u0165 odkazy","appearance_style":"Vlastnosti \u0161t\u00fdlov",stylesheet:"\u0160t\u00fdlopis",style:"\u0160t\u00fdl",author:"Autor",copyright:"Autorsk\u00e9 pr\u00e1va",add:"Prida\u0165 nov\u00fd element",remove:"Odstr\u00e1ni\u0165 ozna\u010den\u00fd element",moveup:"Presun\u00fa\u0165 ozna\u010den\u00fd element vy\u0161\u0161ie ",movedown:"Presun\u00fa\u0165 ozna\u010den\u00fd element ni\u017e\u0161ie","head_elements":"Hlavi\u010dky",info:"Inform\u00e1cie","add_title":"Vlo\u017ei\u0165 titulok","add_meta":"Vlo\u017ei\u0165 meta inform\u00e1cie","add_script":"Vlo\u017ei\u0165 skript","add_style":"Vlo\u017ei\u0165 \u0161t\u00fdl","add_link":"Vlo\u017ei\u0165 nezobrazovan\u00fd odkaz","add_base":"Vlo\u017ei\u0165 z\u00e1kladn\u00e9 umiestnenie","add_comment":"Vlo\u017ei\u0165 koment\u00e1r","title_element":"Titulok","script_element":"Skript","style_element":"\u0160t\u00fdl","base_element":"Z\u00e1kladn\u00e9 umiestnenie","link_element":"Nezobrazovan\u00fd odkaz","meta_element":"Meta inform\u00e1cie","comment_element":"Koment\u00e1r",src:"Zdroj",language:"Jazyk",href:"S\u00fabor/URL",target:"Cie\u013e",type:"Typ",charset:"K\u00f3dovanie",defer:"Odlo\u017ei\u0165 (defer)",media:"M\u00e9di\u00e1",properties:"Vlastnosti",name:"N\u00e1zov",value:"Hodnota",content:"Obsah",rel:"Vz\u0165ah str\u00e1nky k cie\u013eu",rev:"Vz\u0165ah cie\u013ea k str\u00e1nke",hreflang:"Jazyk odkazu","general_props":"Obecn\u00e9 parametre","advanced_props":"Roz\u0161\u00edren\u00e9 parametre"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sl_dlg.js
new file mode 100644
index 000000000..bb71c2048
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.fullpage_dlg',{title:"Lastnosti dokumenta","meta_tab":"Splo\u0161no","appearance_tab":"Izgled","advanced_tab":"Napredno","meta_props":"Meta podatki",langprops:"Jezik in kodiranje","meta_title":"Naslov","meta_keywords":"Klju\u010dne besede","meta_description":"Opis","meta_robots":"Roboti",doctypes:"Doctype",langcode:"Koda jezika",langdir:"Smer pisave",ltr:"Od leve proti desni",rtl:"Od desne proti levi","xml_pi":"Najava XML",encoding:"Kodiranje znakov","appearance_bgprops":"Lastnosti ozadja","appearance_marginprops":"Robovi telesa","appearance_linkprops":"Barve povezav","appearance_textprops":"Lastnosti besedila",bgcolor:"Barva ozadja",bgimage:"Slika ozadja","left_margin":"Levi rob","right_margin":"Desni rob","top_margin":"Zgornji rob","bottom_margin":"Spodnji rob","text_color":"Barva pisave","font_size":"Velikost pisave","font_face":"Vrsta pisave","link_color":"Barva povezave","hover_color":"Barva nakazane povezave","visited_color":"Barva obiskane povezave","active_color":"Barva dejavne povezave",textcolor:"Barva",fontsize:"Velikost pisave",fontface:"Dru\u017eina pisave","meta_index_follow":"Indeksiraj in sledi povezavam","meta_index_nofollow":"Indeksiraj a ne sledi povezavam","meta_noindex_follow":"Ne indeksiraj a sledi pvoezavams","meta_noindex_nofollow":"Ne indeksiraj in ne sledi povezavam","appearance_style":"Lastnosti slogov",stylesheet:"Slogi",style:"Slog",author:"Avtor",copyright:"Copyright",add:"Dodaj element",remove:"Odstrani izbrani element",moveup:"Premakni izbrani element navzgor",movedown:"Premakni izbrani element navzdol","head_elements":"Elementi glave",info:"Informacija","add_title":"element Title","add_meta":"element Meta","add_script":"element Script","add_style":"element Style","add_link":"element Link","add_base":"element Base","add_comment":"komentar","title_element":"element Title","script_element":"element Script","style_element":"element Style","base_element":"element Base","link_element":"element Link","meta_element":"element Meta","comment_element":"komentar",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Lastnosti",name:"ime",value:"vrednost",content:"vsebina",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Splo\u0161no","advanced_props":"Napredno"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sq_dlg.js
new file mode 100644
index 000000000..dfa9b43ae
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.fullpage_dlg',{title:"Tiparet e dokumentit","meta_tab":"T\u00eb P\u00ebrgjithshme","appearance_tab":"Pamja","advanced_tab":"T\u00eb Avancuara","meta_props":"Informacioni Meta",langprops:"Gjuha dhe kodimi","meta_title":"Titulli","meta_keywords":"Fjal\u00ebt ky\u00e7e","meta_description":"P\u00ebrshkrimi","meta_robots":"Robot\u00ebt",doctypes:"Doctype",langcode:"Kodi i gjuh\u00ebs",langdir:"Drejtimi i gjuh\u00ebs",ltr:"Majtas-djathtas",rtl:"Djathtas-majtas","xml_pi":"Deklarimi XML",encoding:"Kodimi i karakter\u00ebve","appearance_bgprops":"Tiparet e fush\u00ebs","appearance_marginprops":"Hap\u00ebsirat e trupit","appearance_linkprops":"Ngjyra e lidhjeve","appearance_textprops":"Tiparet e tekstit",bgcolor:"Ngjyra e fush\u00ebs",bgimage:"Foto e fush\u00ebs","left_margin":"Hap\u00ebsira majtas","right_margin":"Hap\u00ebsira djathtas","top_margin":"Hap\u00ebsira n\u00eb krye","bottom_margin":"Hap\u00ebsira n\u00eb fund","text_color":"Ngjyra e tekstit","font_size":"Madh\u00ebsia e g\u00ebrmave","font_face":"Tipi i g\u00ebrm\u00ebs","link_color":"Ngjyra e lidhjes","hover_color":"Ngjyra e hover","visited_color":"Ngjyra e vizituar","active_color":"Ngjyra aktive",textcolor:"Ngjyra",fontsize:"Madh\u00ebsia e g\u00ebrmave",fontface:"Tipi i g\u00ebrm\u00ebs","meta_index_follow":"Indekso dhe ndiq lidhjet","meta_index_nofollow":"Indekso por mos ndiq lidhjet","meta_noindex_follow":"Mos indekso por ndiq lidhjet","meta_noindex_nofollow":"Mos indekso e as mos ndiq lidhjet","appearance_style":"Faqja e stileve dhe tiparete tyre",stylesheet:"Faqja e stileve",style:"Stili",author:"Autori",copyright:"T\u00eb drejtat e kopjes",add:"Shto nj\u00eb element t\u00eb ri",remove:"Fshi elementin e zgjedhur",moveup:"L\u00ebviz elementin sip\u00ebr",movedown:"L\u00ebviz elementin posht\u00eb","head_elements":"Element\u00ebt e kok\u00ebs",info:"Informacion","add_title":"Element titull","add_meta":"Element meta","add_script":"Element script","add_style":"Element stil","add_link":"Element lidhej","add_base":"Element baz\u00eb","add_comment":"Komento","title_element":"Element titull","script_element":"Element script","style_element":"Element stil","base_element":"Element baz\u00eb","link_element":"Element lidhje","meta_element":"Element meta","comment_element":"Komento",src:"Src",language:"Gjuha",href:"Href",target:"Sh\u00ebnjestra",type:"Tipi",charset:"Charset",defer:"Defer",media:"Media",properties:"Tiparet",name:"Emri",value:"Vlera",content:"P\u00ebrmbajtja",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"T\u00eb P\u00ebrgjithshme","advanced_props":"T\u00eb Avancuara"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sr_dlg.js
new file mode 100644
index 000000000..f1fbb0d68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.fullpage_dlg',{title:"Osobine dokumenta","meta_tab":"Osnovno","appearance_tab":"Izgled","advanced_tab":"Napredno","meta_props":"Meta informacije",langprops:"Jezik i kodiranje","meta_title":"Naslov","meta_keywords":"Klju\u010dne re\u010di","meta_description":"Opis","meta_robots":"Robots",doctypes:"Doctype",langcode:"Kod jezika",langdir:"Smer jezika",ltr:"Sleva nadesno",rtl:"Zdesna nalevo","xml_pi":"XML deklaracija",encoding:"Kodiranje znakova","appearance_bgprops":"Osobine pozadine","appearance_marginprops":"Margine sadr\u017eaja","appearance_linkprops":"Boje linka","appearance_textprops":"Osobine teksta",bgcolor:"Boja pozadine",bgimage:"Slika u pozadini","left_margin":"Leva margina","right_margin":"Desna margina","top_margin":"Gornja margina","bottom_margin":"Donja margina","text_color":"Boja teksta","font_size":"Veli\u010dina pisma","font_face":"Pismo (Font face)","link_color":"Boja linka","hover_color":"Boja linka pod mi\u0161em","visited_color":"Boja pose\u0107enog linka","active_color":"Boja aktivnog linka",textcolor:"Boja",fontsize:"Veli\u010dina pisma",fontface:"Pismo","meta_index_follow":"Indeksiraj i sledi linkove","meta_index_nofollow":"Indeksiraj i ne sledi linkove","meta_noindex_follow":"Ne indeksiraj ali sledi linkove","meta_noindex_nofollow":"Ne indeksiraj i ne sledi linkove","appearance_style":"CSS i osobine stila",stylesheet:"CSS",style:"Stil",author:"Autor",copyright:"Autorska prava",add:"Dodaj nov element",remove:"Ukloni odabrani element",moveup:"Pomeri odabrani element nagore",movedown:"Pomakni odabrani element nadole","head_elements":"Elementi zaglavlja",info:"Informacije","add_title":"Element \'title\' (naslov)","add_meta":"Element \'meta\'","add_script":"Element \'script\'","add_style":"Element \'style\'","add_link":"Element \'link\'","add_base":"Element \'base\'","add_comment":"Komentar","title_element":"Element \'title\' (naslov)","script_element":"Element \'script\'","style_element":"Element \'style\'","base_element":"Element \'base\'","link_element":"Element \'link\'","meta_element":"Element \'meta\'","comment_element":"Komentar",src:"Src",language:"Jezik",href:"Href",target:"Meta",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Osobine",name:"Naziv",value:"Vrednost",content:"Sadr\u017eaj",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Osnovno","advanced_props":"Napredno"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sv_dlg.js
new file mode 100644
index 000000000..c141b235a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.fullpage_dlg',{title:"Dokumentinst\u00e4llningar","meta_tab":"Generella","appearance_tab":"Utseende","advanced_tab":"Avancerat","meta_props":"Metainformation",langprops:"Spr\u00e5k och kodning","meta_title":"Titel","meta_keywords":"Nyckelord","meta_description":"Bekrivning","meta_robots":"Robots",doctypes:"Doctype",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning",ltr:"V\u00e4nster till h\u00f6ger",rtl:"H\u00f6ger till v\u00e4nster","xml_pi":"XML deklaration",encoding:"Teckenkodning","appearance_bgprops":"Bakgrundsinst\u00e4llningar","appearance_marginprops":"Body marginaler","appearance_linkprops":"L\u00e4nkf\u00e4rger","appearance_textprops":"Textinst\u00e4llningar",bgcolor:"Bakgrundsf\u00e4rg",bgimage:"Bakgrundsbild","left_margin":"V\u00e4nstermarginal","right_margin":"H\u00f6germarginal","top_margin":"Toppmarginal","bottom_margin":"Bottenmarginal","text_color":"Textf\u00e4rg","font_size":"Textstorlek","font_face":"Textstil","link_color":"L\u00e4nkf\u00e4rg","hover_color":"Hover f\u00e4rg","visited_color":"Visited f\u00e4rg","active_color":"Active f\u00e4rg",textcolor:"F\u00e4rg",fontsize:"Textstorlek",fontface:"Textstil","meta_index_follow":"Indexera och f\u00f6lj l\u00e4nkar","meta_index_nofollow":"Indexera men f\u00f6lj ej l\u00e4nkar","meta_noindex_follow":"Indexera inte men f\u00f6lj l\u00e4nkar","meta_noindex_nofollow":"Indexera inte och f\u00f6lj ej l\u00e4nkar","appearance_style":"Stilmall och stilegenskaper",stylesheet:"Stilmall",style:"Stil",author:"F\u00f6rfattare",copyright:"Copyright",add:"L\u00e4gg till element",remove:"Radera det markerade elementet",moveup:"Flytta det markerade elementet upp\u00e5t",movedown:"Flytta det markerade elementet ned\u00e5t","head_elements":"Head element",info:"Information","add_title":"Titel-element","add_meta":"Meta-element","add_script":"Script-element","add_style":"Stil-element","add_link":"L\u00e4nk-element","add_base":"Base-element","add_comment":"Kommentarsnod","title_element":"Titel-element","script_element":"Script-element","style_element":"Style-element","base_element":"Base-element","link_element":"Link-element","meta_element":"Meta-element","comment_element":"Comment-element",src:"Src",language:"Spr\u00e5k",href:"Href",target:"M\u00e5l",type:"Typ",charset:"Teckenupps\u00e4ttning",defer:"Defer",media:"Media",properties:"Egenskaper",name:"Name",value:"Value",content:"Inneh\u00e5ll",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Generellt","advanced_props":"Avancerat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sy_dlg.js
new file mode 100644
index 000000000..39cc13a32
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ta_dlg.js
new file mode 100644
index 000000000..6a38095b2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/te_dlg.js
new file mode 100644
index 000000000..0072c8d1d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/th_dlg.js
new file mode 100644
index 000000000..2200f9a4e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.fullpage_dlg',{title:"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23","meta_tab":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","appearance_tab":"\u0e23\u0e39\u0e1b\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c","advanced_tab":"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","meta_props":"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e40\u0e21\u0e15\u0e49\u0e32",langprops:"\u0e20\u0e32\u0e29\u0e32 \u0e41\u0e25\u0e30 \u0e01\u0e32\u0e23\u0e40\u0e02\u0e49\u0e32\u0e23\u0e2b\u0e31\u0e2a","meta_title":"\u0e0a\u0e37\u0e48\u0e2d","meta_keywords":"\u0e04\u0e33\u0e2a\u0e33\u0e04\u0e31\u0e0d","meta_description":"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14","meta_robots":"Robots",doctypes:"Doctype",langcode:"\u0e42\u0e04\u0e4a\u0e14\u0e20\u0e32\u0e29\u0e32",langdir:"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e2d\u0e48\u0e32\u0e19",ltr:"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32",rtl:"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07","appearance_marginprops":"Body margins","appearance_linkprops":"\u0e2a\u0e35\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","appearance_textprops":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21",bgcolor:"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07 color",bgimage:"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07 image","left_margin":"\u0e02\u0e2d\u0e1a\u0e0b\u0e49\u0e32\u0e22","right_margin":"\u0e02\u0e2d\u0e1a\u0e02\u0e27\u0e32","top_margin":"\u0e02\u0e2d\u0e1a\u0e1a\u0e21","bottom_margin":"\u0e02\u0e2d\u0e1a\u0e25\u0e48\u0e32\u0e07","text_color":"\u0e2a\u0e35\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","font_size":"\u0e02\u0e19\u0e32\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","font_face":"\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","link_color":"\u0e2a\u0e35\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"\u0e2a\u0e35",fontsize:"\u0e02\u0e19\u0e32\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23",fontface:"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e2d\u0e01\u0e29\u0e23","meta_index_follow":"Index and follow the \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4cs","meta_index_nofollow":"Index and don\'t follow the \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4cs","meta_noindex_follow":"Do not index but follow the \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4cs","meta_noindex_nofollow":"Do not index and don\\\'t follow the \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4cs","appearance_style":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1asheet and style properties",stylesheet:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1asheet",style:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"\u0e0a\u0e37\u0e48\u0e2d element","add_meta":"Meta element","add_script":"Script element","add_style":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"\u0e0a\u0e37\u0e48\u0e2d element","script_element":"Script element","style_element":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"\u0e20\u0e32\u0e29\u0e32",href:"Href",target:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","advanced_props":"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tn_dlg.js
new file mode 100644
index 000000000..5fdbd6cde
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tr_dlg.js
new file mode 100644
index 000000000..8f2a44b68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.fullpage_dlg',{title:"Belge \u00f6zellikleri","meta_tab":"Genel","appearance_tab":"G\u00f6r\u00fcn\u00fcm","advanced_tab":"Geli\u015fmi\u015f","meta_props":"Meta bilgisi",langprops:"Dil ve kodlama","meta_title":"Ba\u015fl\u0131k","meta_keywords":"Anahtar kelimeler","meta_description":"A\u00e7\u0131klama","meta_robots":"Robotlar",doctypes:"Belge tipi",langcode:"Dil kodu",langdir:"Dil y\u00f6n\u00fc",ltr:"Sa\u011fdan sola",rtl:"Soldan sa\u011fa","xml_pi":"XML tan\u0131m\u0131",encoding:"Karakter kodlamas\u0131","appearance_bgprops":"Arkaplan \u00f6zellikleri","appearance_marginprops":"G\u00f6vde bo\u015fluklar\u0131","appearance_linkprops":"Ba\u011flant\u0131 renkleri","appearance_textprops":"Metin \u00f6zellikleri",bgcolor:"Arkaplan rengi",bgimage:"Arkaplan resmi","left_margin":"Sol bo\u015fluk","right_margin":"Sa\u011f bo\u015fluk","top_margin":"\u00dcst bo\u015fluk","bottom_margin":"Alt bo\u015fluk","text_color":"Metin rengi","font_size":"Yaz\u0131 boyutu","font_face":"Yaz\u0131 tipi","link_color":"Ba\u011flant\u0131 rengi","hover_color":"Fare \u00fcst\u00fcnde rengi","visited_color":"Ziyaret edilmi\u015f ba\u011flant\u0131 rengi","active_color":"Ge\u00e7erli renk",textcolor:"Renk",fontsize:"Yaz\u0131 boyutu",fontface:"Yaz\u0131 tipi","meta_index_follow":"\u0130ndeksle ve ba\u011flant\u0131lar\u0131 izle.","meta_index_nofollow":"\u0130ndeksle ve ba\u011flant\u0131lar\u0131 izleme.","meta_noindex_follow":"\u0130ndeksleme ama ba\u011flant\u0131lar\u0131 izle.","meta_noindex_nofollow":"\u0130ndeksleme ve ba\u011flant\u0131lar\u0131 izleme.","appearance_style":"Stil ve stil sayfas\u0131 \u00f6zellikleri",stylesheet:"Stil sayfas\u0131",style:"Stil",author:"Yazar",copyright:"Telik hakk\u0131",add:"Yeni nesne ekle",remove:"Se\u00e7ili nesneyi kald\u0131r",moveup:"Se\u00e7ili nesneyi yukar\u0131 ta\u015f\u0131",movedown:"Se\u00e7ili nesneyi a\u015fa\u011f\u0131 ta\u015f\u0131","head_elements":"Ba\u015fl\u0131k nesneleri",info:"Bilgi","add_title":"Ba\u015fl\u0131k nesnesi","add_meta":"Meta nesnesi","add_script":"Script nesnesi","add_style":"Stil nesnesi","add_link":"Ba\u011flant\u0131 nesnesi","add_base":"Temel nesne","add_comment":"Yorum d\u00fc\u011f\u00fcm\u00fc","title_element":"Ba\u015fl\u0131k nesnesi","script_element":"Script nesnesi","style_element":"Stil nesnesi","base_element":"Temel nesne","link_element":"Ba\u011flant\u0131 nesnesi","meta_element":"Meta nesnesi","comment_element":"Yorum",src:"Src",language:"Dil",href:"Href",target:"Hedef",type:"Tip",charset:"Karakter seti",defer:"Erteleme",media:"Medya",properties:"\u00d6zellikler",name:"\u0130sim",value:"De\u011fer",content:"\u0130\u00e7erik",rel:"Rel",rev:"Rev",hreflang:"Href dili","general_props":"Genel","advanced_props":"Geli\u015fmi\u015f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tt_dlg.js
new file mode 100644
index 000000000..bbbcb017b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.fullpage_dlg',{title:"\u6a94\u6848\u5c6c\u6027","meta_tab":"\u57fa\u672c","appearance_tab":"\u5916\u89c0","advanced_tab":"\u9032\u968e","meta_props":"\u4e2d\u7e7c\u8cc7\u6599\u5377\u6a19\u5c6c\u6027",langprops:"\u8a9e\u8a00","meta_title":"\u6a19\u984c","meta_keywords":"\u95dc\u9375\u5b57","meta_description":"\u5167\u5bb9\u8aaa\u660e","meta_robots":"\u6a5f\u5668\u4eba",doctypes:"DocType",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411",ltr:"\u5f9e\u5de6\u5230\u53f3",rtl:"\u5f9e\u53f3\u5230\u5de6","xml_pi":"XML \u8072\u660e",encoding:"\u5b57\u5143\u7de8\u78bc","appearance_bgprops":"\u80cc\u666f\u5c6c\u6027","appearance_marginprops":"\u908a\u8ddd","appearance_linkprops":"\u9023\u7d50\u9854\u8272","appearance_textprops":"\u6587\u5b57\u5c6c\u6027",bgcolor:"\u80cc\u666f\u9854\u8272",bgimage:"\u80cc\u666f\u5716\u7247","left_margin":"\u5de6\u908a\u8ddd","right_margin":"\u53f3\u908a\u8ddd","top_margin":"\u4e0a\u908a\u8ddd","bottom_margin":"\u4e0b\u908a\u8ddd","text_color":"\u6587\u5b57\u9854\u8272","font_size":"\u6587\u5b57\u5927\u5c0f","font_face":"\u5b57\u9ad4","link_color":"\u9023\u7d50\u9854\u8272","hover_color":"Hover \u9854\u8272","visited_color":"Visited \u9854\u8272","active_color":"Active \u9854\u8272",textcolor:"\u9854\u8272",fontsize:"\u6587\u5b57\u5927\u5c0f",fontface:"\u5b57\u9ad4","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"\u6a23\u5f0f\u8868\u5c6c\u6027",stylesheet:"\u6a23\u5f0f\u8868",style:"\u6a23\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6b0a",add:"\u65b0\u589e\u6587\u4ef6\u65b0\u7269\u4ef6",remove:"\u522a\u9664\u9078\u64c7\u7684\u7269\u4ef6",moveup:"\u5411\u4e0a\u79fb\u52d5\u9078\u64c7\u7684\u7269\u4ef6",movedown:"\u5411\u4e0b\u79fb\u52d5\u9078\u64c7\u7684\u7269\u4ef6","head_elements":"\u524d\u982d\u7269\u4ef6",info:"\u8cc7\u8a0a","add_title":"\u641c\u5c0b\u7269\u4ef6","add_meta":"\u5143\u7269\u4ef6","add_script":"\u8173\u672c\u7269\u4ef6","add_style":"\u6a23\u5f0f\u7269\u4ef6","add_link":"\u9023\u7d50\u5316\u7269\u4ef6","add_base":"Base\u7269\u4ef6","add_comment":"\u6ce8\u91cb\u7269\u4ef6","title_element":"\u641c\u5c0b\u7269\u4ef6","script_element":"\u8173\u672c\u7269\u4ef6","style_element":"\u6a23\u5f0f\u7269\u4ef6","base_element":"Base\u7269\u4ef6","link_element":"\u9023\u7d50\u5316\u7269\u4ef6","meta_element":"\u5143\u7269\u4ef6","comment_element":"\u6ce8\u91cb\u7269\u4ef6",src:"Src",language:"\u8a9e\u8a00",href:"Href",target:"\u76ee\u6a19",type:"\u985e\u578b",charset:"\u5b57\u5143\u96c6",defer:"Defer",media:"\u5a92\u9ad4",properties:"\u5c6c\u6027",name:"\u540d",value:"\u503c",content:"\u5167\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u57fa\u672c","advanced_props":"\u9032\u968e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tw_dlg.js
new file mode 100644
index 000000000..25aa134b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.fullpage_dlg',{title:"\u6a94\u6848\u5c6c\u6027","meta_tab":"\u6a19\u6e96","appearance_tab":"\u5916\u89c0","advanced_tab":"\u9032\u968e","meta_props":"Mata\u8a0a\u606f",langprops:"\u8a9e\u8a00\u548c\u7de8\u78bc","meta_title":"\u6a19\u984c","meta_keywords":"\u95dc\u9375\u5b57","meta_description":"\u8aaa\u660e","meta_robots":"Robots",doctypes:"DocType",langcode:"\u6587\u5b57\u7de8\u78bc",langdir:"\u6587\u5b57\u66f8\u5beb\u65b9\u5411",ltr:"\u5f9e\u5de6\u5230\u53f3",rtl:"\u5f9e\u53f3\u5230\u5de6","xml_pi":"XML\u8072\u660e",encoding:"\u5b57\u5143\u7de8\u78bc","appearance_bgprops":"\u80cc\u666f\u984f\u8272","appearance_marginprops":"\u908a\u8ddd","appearance_linkprops":"\u8d85\u9023\u7d50\u984f\u8272","appearance_textprops":"\u6587\u5b57\u5c6c\u6027",bgcolor:"\u80cc\u666f\u984f\u8272",bgimage:"\u80cc\u666f\u5716\u7247","left_margin":"\u5de6\u908a\u8ddd","right_margin":"\u53f3\u908a\u8ddd","top_margin":"\u4e0a\u908a\u8ddd","bottom_margin":"\u4e0b\u908a\u8ddd","text_color":"\u6587\u5b57\u984f\u8272","font_size":"\u6587\u5b57\u5927\u5c0f","font_face":"\u5b57\u9ad4","link_color":"\u8d85\u9023\u7d50\u984f\u8272","hover_color":"Hover \u984f\u8272","visited_color":"Visited \u984f\u8272","active_color":"Active \u984f\u8272",textcolor:"\u984f\u8272",fontsize:"\u6587\u5b57\u5927\u5c0f",fontface:"\u5b57\u9ad4","meta_index_follow":"\u7d22\u5f15\u4e26\u9023\u7d50","meta_index_nofollow":"\u7d22\u5f15\u4f46\u4e0d\u9023\u7d50","meta_noindex_follow":"\u4e0d\u7d22\u5f15\u4f46\u9023\u7d50","meta_noindex_nofollow":"\u4e0d\u7d22\u5f15\u4e5f\u4e0d\u9023\u7d50","appearance_style":"\u6a23\u5f0f\u5217\u8868\u8207\u6a23\u5f0f\u5c6c\u6027",stylesheet:"\u6a23\u5f0f\u5217\u8868",style:"\u6a23\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6b0a\u8072\u660e",add:"\u65b0\u589e\u5143\u7d20",remove:"\u522a\u9664\u9078\u64c7\u5143\u7d20",moveup:"\u4e0a\u79fb\u9078\u64c7\u5143\u7d20",movedown:"\u4e0b\u79fb\u9078\u64c7\u5143\u7d20","head_elements":"Head \u5143\u7d20",info:"\u8cc7\u8a0a","add_title":"Title \u5143\u7d20","add_meta":"Meta \u5143\u7d20","add_script":"Script \u5143\u7d20","add_style":"Style \u5143\u7d20","add_link":"Link \u5143\u7d20","add_base":"Base \u5143\u7d20","add_comment":"\u8a3b\u91cb","title_element":"Title \u5143\u7d20","script_element":"Script \u5143\u7d20","style_element":"Style \u5143\u7d20","base_element":"Base \u5143\u7d20","link_element":"Link \u5143\u7d20","meta_element":"Meta \u5143\u7d20","comment_element":"\u8a3b\u91cb",src:"src",language:"\u8a9e\u8a00",href:"href",target:"\u76ee\u6a19",type:"\u985e\u578b",charset:"\u5b57\u5143\u96c6",defer:"Defer",media:"\u5f71\u7247",properties:"\u5c6c\u6027",name:"\u540d\u7a31",value:"\u503c",content:"\u5167\u5bb9",rel:"rel",rev:"rev",hreflang:"href lang","general_props":"\u4e00\u822c","advanced_props":"\u9032\u968e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/uk_dlg.js
new file mode 100644
index 000000000..f1e6a7f0b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.fullpage_dlg',{title:"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","meta_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","appearance_tab":"\u0412\u0438\u0433\u043b\u044f\u0434","advanced_tab":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","meta_props":"\u041c\u0435\u0442\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f",langprops:"\u041c\u043e\u0432\u0430 \u0442\u0430 \u043a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f","meta_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","meta_keywords":"\u041a\u043b\u044e\u0447\u043e\u0432\u0456 \u0441\u043b\u043e\u0432\u0430","meta_description":"\u041e\u043f\u0438\u0441","meta_robots":"\u0420\u043e\u0431\u043e\u0442\u0438",doctypes:"Doctype",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c \u043c\u043e\u0432\u0438",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043b\u0456\u0432\u043e\u0440\u0443\u0447","xml_pi":"\u041e\u0431\'\u044f\u0432\u043b\u0435\u043d\u043d\u044f XML",encoding:"\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432","appearance_bgprops":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0444\u043e\u043d\u0443","appearance_marginprops":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438","appearance_linkprops":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c","appearance_textprops":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0442\u0435\u043a\u0441\u0442\u0443",bgcolor:"\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443",bgimage:"\u0424\u043e\u043d\u043e\u0432\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","left_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0437\u043b\u0456\u0432\u0430","right_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0441\u043f\u0440\u0430\u0432\u0430","top_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0437\u0432\u0435\u0440\u0445\u0443","bottom_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0437\u043d\u0438\u0437\u0443","text_color":"\u041a\u043e\u043b\u0456\u0440 \u0442\u0435\u043a\u0441\u0442\u0443","font_size":"\u0420\u043e\u0437\u043c\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0430","font_face":"\u0428\u0440\u0438\u0444\u0442","link_color":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","hover_color":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043d\u0456","visited_color":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043f\u0440\u0438 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u043d\u043d\u0456","active_color":"\u041a\u043e\u043b\u0456\u0440 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",textcolor:"\u041a\u043e\u043b\u0456\u0440",fontsize:"\u0420\u043e\u0437\u043c\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",fontface:"\u0421\u0456\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0448\u0440\u0438\u0444\u0442\u0430","meta_index_follow":"\u0406\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438 \u0456 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","meta_index_nofollow":"\u0406\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438 \u0456 \u043d\u0435 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","meta_noindex_follow":"\u041d\u0435 \u0456\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438, \u0430\u043b\u0435 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","meta_noindex_nofollow":"\u041d\u0435 \u0456\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438 \u0456 \u043d\u0435 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","appearance_style":"\u0422\u0430\u0431\u043b\u0438\u0446\u044f \u0441\u0442\u0438\u043b\u044e \u0442\u0430 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0441\u0442\u0438\u043b\u044e",stylesheet:"\u0422\u0430\u0431\u043b\u0438\u0446\u044f \u0441\u0442\u0438\u043b\u044e",style:"\u0421\u0442\u0438\u043b\u044c",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"\u0410\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0435 \u043f\u0440\u0430\u0432\u043e",add:"\u0414\u043e\u0434\u0430\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0432\u0438\u0434\u0456\u043b\u0435\u043d\u0438\u0439 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0433\u043e\u0440\u0443",movedown:"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u043d\u0438\u0437","head_elements":"Head \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438",info:"\u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f","add_title":"Title \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_meta":"Meta \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_script":"Script \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_style":"Style \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_link":"Link \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_base":"Base \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_comment":"\u0412\u0443\u0437\u043e\u043b \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u044f","title_element":"Title \u0435\u043b\u0435\u043c\u0435\u043d\u0442","script_element":"Script \u0435\u043b\u0435\u043c\u0435\u043d\u0442","style_element":"Style \u0435\u043b\u0435\u043c\u0435\u043d\u0442","base_element":"Base \u0435\u043b\u0435\u043c\u0435\u043d\u0442","link_element":"Link \u0435\u043b\u0435\u043c\u0435\u043d\u0442","meta_element":"Meta \u0435\u043b\u0435\u043c\u0435\u043d\u0442","comment_element":"\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440",src:"\u0414\u0436\u0435\u0440\u0435\u043b\u043e",language:"\u041c\u043e\u0432\u0430",href:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",target:"\u0426\u0456\u043b\u044c",type:"\u0422\u0438\u043f",charset:"\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f",defer:"Defer",media:"\u041c\u0435\u0434\u0456\u0430",properties:"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456",name:"\u041d\u0430\u0437\u0432\u0430",value:"\u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f",content:"\u0417\u043c\u0456\u0441\u0442",rel:"\u0417\u0432\'\u044f\u0437\u043e\u043a",rev:"Rev",hreflang:"\u041c\u043e\u0432\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","general_props":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","advanced_props":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ur_dlg.js
new file mode 100644
index 000000000..2ed25fcfc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/vi_dlg.js
new file mode 100644
index 000000000..3222b6739
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.fullpage_dlg',{title:"Thu\u1ed9c t\u00ednh v\u0103n b\u1ea3n","meta_tab":"Chung","appearance_tab":"Xu\u1ea5t hi\u1ec7n","advanced_tab":"N\u00e2ng cao","meta_props":"Th\u00f4ng tin Meta",langprops:"Ng\u00f4n ng\u1eef v\u00e0 m\u00e3 h\u00f3a","meta_title":"Ti\u00eau \u0111\u1ec1","meta_keywords":"T\u1eeb kh\u00f3a","meta_description":"M\u00f4 t\u1ea3","meta_robots":"Robots",doctypes:"Ki\u1ec3u t\u00e0i li\u1ec7u",langcode:"M\u00e3 ng\u00f4n ng\u1eef",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef",ltr:"Tr\u00e1i qua ph\u1ea3i",rtl:"Ph\u1ea3i qua tr\u00e1i","xml_pi":"Khai b\u00e1o XML",encoding:"M\u00e3 h\u00f3a k\u00fd t\u1ef1","appearance_bgprops":"Thu\u1ed9c t\u00ednh n\u1ec1n","appearance_marginprops":"Bi\u00ean c\u1ee7a th\u00e2n t\u00e0i li\u1ec7u","appearance_linkprops":"M\u00e0u li\u00ean k\u1ebft","appearance_textprops":"Thu\u00f4c t\u00ednh v\u0103n b\u1ea3n",bgcolor:"M\u00e0u n\u1ec1n",bgimage:"\u1ea2nh n\u1ec1n","left_margin":"Bi\u00ean tr\u00e1i","right_margin":"Bi\u00ean ph\u1ea3i","top_margin":"Bi\u00ean tr\u00ean","bottom_margin":"Bi\u00ean d\u01b0\u1edbi","text_color":"M\u00e0u v\u0103n b\u1ea3n","font_size":"K\u00edch c\u1ee1 ph\u00f4ng","font_face":"Ph\u00f4ng ch\u1eef","link_color":"M\u00e0u li\u00ean k\u1ebft","hover_color":"M\u00e0u khi tr\u1ecf chu\u1ed9t","visited_color":"M\u00e0u \u0111\u00e3 gh\u00e9 th\u0103m","active_color":"M\u00e0u ho\u1ea1t \u0111\u1ed9ng",textcolor:"M\u00e0u",fontsize:"K\u00edch c\u1ee1 ph\u00f4ng",fontface:"T\u1eadp h\u1ee3p ph\u00f4ng","meta_index_follow":"Ch\u1ec9 s\u1ed1 v\u00e0 theo li\u00ean k\u1ebft","meta_index_nofollow":"Ch\u1ec9 s\u1ed1 v\u00e0 kh\u00f4ng theo li\u00ean k\u1ebft","meta_noindex_follow":"Kh\u00f4ng ch\u1ec9 s\u1ed1 nh\u01b0ng theo li\u00ean k\u1ebft","meta_noindex_nofollow":"Kh\u00f4ng ch\u1ec9 s\u1ed1 v\u00e0 kh\u00f4ng theo li\u00ean k\u1ebft","appearance_style":"Thu\u1ed9c t\u00ednh ki\u1ec3u d\u00e1ng v\u00e0 stylesheet",stylesheet:"Stylesheet",style:"Ki\u1ec3u d\u00e1ng",author:"T\u00e1c gi\u1ea3",copyright:"B\u1ea3n quy\u1ec1n",add:"Th\u00eam ph\u1ea7n t\u1eed m\u1edbi",remove:"Lo\u1ea1i b\u1ecf ph\u1ea7n t\u1eed \u0111\u00e3 ch\u1ecdn",moveup:"Di chuy\u1ec3n ph\u1ea7n t\u1eed \u0111\u00e3 ch\u1ecdn \u0111i l\u00ean",movedown:"Di chuy\u1ec3n ph\u1ea7n t\u1eed \u0111\u00e3 ch\u1ecdn \u0111i xu\u1ed1ng","head_elements":"Ph\u1ea7n t\u1eed \u0111\u1ea7u \u0111\u1ec1",info:"Th\u00f4ng tin","add_title":"Ph\u1ea7n t\u1eed ti\u00eau \u0111\u1ec1","add_meta":"Ph\u1ea7n t\u1eed meta","add_script":"Ph\u1ea7n t\u1eed script","add_style":"Ph\u1ea7n t\u1eed ki\u1ec3u d\u00e1ng","add_link":"Ph\u1ea7n t\u1eed li\u00ean k\u1ebft","add_base":"Ph\u1ea7n t\u1eed c\u01a1 s\u1edf","add_comment":"Comment node","title_element":"Ph\u1ea7n t\u1eed ti\u00eau \u0111\u1ec1","script_element":"Ph\u1ea7n t\u1eed script","style_element":"Ph\u1ea7n t\u1eed ki\u1ec3u d\u00e1ng","base_element":"Ph\u1ea7n t\u1eed c\u01a1 s\u1edf","link_element":"Ph\u1ea7n t\u1eed li\u00ean k\u1ebft","meta_element":"Ph\u1ea7n t\u1eed meta","comment_element":"Ch\u00fa th\u00edch",src:"Src",language:"Ng\u00f4n ng\u1eef",href:"Href",target:"\u0110\u00edch",type:"Ki\u1ec3u",charset:"T\u1eadp k\u00fd t\u1ef1",defer:"Tr\u00ec ho\u00e3n",media:"Ph\u01b0\u01a1ng ti\u1ec7n",properties:"Thu\u1ed9c t\u00ednh",name:"T\u00ean",value:"Gi\u00e1 tr\u1ecb",content:"N\u1ed9i dung",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Chung","advanced_props":"N\u00e2ng cao"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..de0a74ac5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.fullpage_dlg',{title:"\u6587\u4ef6\u5c5e\u6027","meta_tab":"\u666e\u901a","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"Meta\u4fe1\u606f",langprops:"\u8bed\u8a00\u548c\u7f16\u7801","meta_title":"\u6807\u9898","meta_keywords":"Meta \u5173\u952e\u5b57","meta_description":"Meta \u63cf\u8ff0","meta_robots":"\u641c\u7d22\u673a\u5668\u4eba",doctypes:"\u6587\u6863\u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u6587\u5b57\u65b9\u5411",ltr:"\u4ece\u5de6\u5230\u53f3",rtl:"\u4ece\u53f3\u5230\u5de6","xml_pi":"XML\u7533\u660e",encoding:"\u5b57\u7b26\u7f16\u7801","appearance_bgprops":"\u80cc\u666f\u5c5e\u6027","appearance_marginprops":"\u9875\u8fb9\u8ddd","appearance_linkprops":"\u8d85\u94fe\u63a5\u989c\u8272","appearance_textprops":"\u6587\u672c\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u8fb9\u8ddd","right_margin":"\u53f3\u8fb9\u8ddd","top_margin":"\u4e0a\u8fb9\u8ddd","bottom_margin":"\u4e0b\u8fb9\u8ddd","text_color":"\u6587\u672c\u989c\u8272","font_size":"\u5b57\u4f53\u5927\u5c0f","font_face":"\u5b57\u4f53","link_color":"\u8d85\u94fe\u63a5\u989c\u8272","hover_color":"Hover\u989c\u8272","visited_color":"Visited\u989c\u8272","active_color":"Active\u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u5b57\u4f53\u5927\u5c0f",fontface:"\u5b57\u4f53","meta_index_follow":"\u7d22\u5f15\u5e76\u8fde\u7ed3","meta_index_nofollow":"\u7d22\u5f15\u4f46\u4e0d\u8fde\u7ed3","meta_noindex_follow":"\u4e0d\u7d22\u5f15\u4f46\u8fde\u7ed3","meta_noindex_nofollow":"\u4e0d\u7d22\u5f15\u4e5f\u4e0d\u8fde\u7ed3","appearance_style":"\u6837\u5f0f\u8868\u4e0e\u6837\u5f0f\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u8868",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743\u58f0\u660e",add:"\u6dfb\u52a0\u5143\u7d20",remove:"\u5220\u9664\u9009\u62e9\u5143\u7d20",moveup:"\u4e0a\u79fb\u9009\u62e9\u5143\u7d20",movedown:"\u4e0b\u79fb\u9009\u62e9\u5143\u7d20","head_elements":"Head\u5143\u7d20",info:"\u4fe1\u606f","add_title":"Title\u5143\u7d20","add_meta":"Meta\u5143\u7d20","add_script":"Script\u5143\u7d20","add_style":"Style\u5143\u7d20","add_link":"Link\u5143\u7d20","add_base":"Base\u5143\u7d20","add_comment":"\u6ce8\u91ca","title_element":"Title\u5143\u7d20","script_element":"Script\u5143\u7d20","style_element":"Style\u5143\u7d20","base_element":"Base\u5143\u7d20","link_element":"Link\u5143\u7d20","meta_element":"Meta\u5143\u7d20","comment_element":"\u6ce8\u91ca",src:"\u5730\u5740",language:"\u8bed\u8a00",href:"Href",target:"\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u7b26\u96c6",defer:"Defer",media:"\u5a92\u4f53",properties:"\u5c5e\u6027",name:"\u540d\u79f0",value:"\u503c",content:"\u5185\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href\u8bed\u8a00","general_props":"\u5e38\u89c4","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..5a9b05433
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.fullpage_dlg',{title:"\u9801\u9762\u8a2d\u5b9a","meta_tab":"\u4e00\u822c","appearance_tab":"\u5916\u89c0","advanced_tab":"\u66f4\u591a\u8a2d\u5b9a","meta_props":"Meta \u8cc7\u8a0a",langprops:"\u8a9e\u8a00\u8207\u7de8\u78bc\u8a2d\u5b9a","meta_title":"\u6a19\u984c","meta_keywords":"\u95dc\u9375\u5b57","meta_description":"\u63cf\u8ff0","meta_robots":"\u641c\u5c0b\u5f15\u64ce\u7684\u6a5f\u5668\u4eba",doctypes:"\u6587\u4ef6\u985e\u578b (Doctype)",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u66f8\u5beb\u65b9\u5f0f",ltr:"\u5f9e\u5de6\u5230\u53f3",rtl:"\u5f9e\u53f3\u5230\u5de6","xml_pi":"XML \u5b9a\u7fa9 (XML declaration)",encoding:"\u5b57\u5143\u7de8\u78bc","appearance_bgprops":"\u80cc\u666f\u8a2d\u5b9a","appearance_marginprops":"\u7db2\u9801\u7684\u908a\u8ddd","appearance_linkprops":"\u9023\u7d50\u7684\u984f\u8272","appearance_textprops":"\u6587\u5b57\u8a2d\u5b9a",bgcolor:"\u80cc\u666f\u984f\u8272",bgimage:"\u80cc\u666f\u5716","left_margin":"\u5de6\u908a\u8ddd","right_margin":"\u53f3\u908a\u8ddd","top_margin":"\u4e0a\u65b9\u908a\u8ddd","bottom_margin":"\u4e0b\u65b9\u908a\u8ddd","text_color":"\u6587\u5b57\u984f\u8272","font_size":"\u5b57\u9ad4\u5927\u5c0f","font_face":"\u5b57\u9ad4\u6a23\u5f0f","link_color":"\u9810\u8a2d\u7684\u984f\u8272\u6a23\u5f0f","hover_color":"\u6ed1\u9f20\u79fb\u904e\u53bb\u7684\u984f\u8272\u6a23\u5f0f","visited_color":"\u9ede\u904e\u5f8c\u7684\u984f\u8272\u6a23\u5f0f","active_color":"\u6309\u4e0b\u53bb\u5f8c\u7684\u984f\u8272",textcolor:"\u984f\u8272",fontsize:"\u6309\u4e0b\u53bb\u5f8c\u7684\u984f\u8272\u6a23\u5f0f",fontface:"\u5b57\u9ad4\u6a23\u5f0f","meta_index_follow":"\u516c\u958b\u7d66\u641c\u5c0b\u5f15\u64ce\u77e5\u9053","meta_index_nofollow":"\u544a\u8a34\u641c\u5c0b\u5f15\u64ce\u53ef\u4ee5\u5206\u4eab\u9023\u7d50\u7d66\u5927\u5bb6\uff0c\u4f46\u4e0d\u8981\u8b93\u641c\u5c0b\u5f15\u64ce\u5f9e\u9019\u88e1\u627e\u8cc7\u6599","meta_noindex_follow":"\u544a\u8a34\u641c\u5c0b\u5f15\u64ce\u4e0d\u8981\u8b93\u5927\u5bb6\u77e5\u9053\u6709\u9019\u500b\u9023\u7d50\uff0c\u53ea\u8b93\u641c\u5c0b\u5f15\u64ce\u77e5\u9053\u3001\u627e\u8cc7\u6599","meta_noindex_nofollow":"\u544a\u8a34\u641c\u5c0b\u5f15\u64ce\u8df3\u904e\u9019\u500b\u9023\u7d50","appearance_style":"\u6a23\u5f0f\u8868\u8207\u6a23\u5f0f\u7684\u5c6c\u6027\u8a2d\u5b9a",stylesheet:"\u6a23\u5f0f\u8868",style:"\u6a23\u5f0f",author:"\u9328\u9ede (\u66f8\u7c64)",copyright:"\u8457\u4f5c/\u6388\u6b0a",add:"\u65b0\u589e HTML \u6a19\u7c64",remove:"\u522a\u9664\u6240\u9078\u7684\u6a19\u7c64",moveup:"\u79fb\u52d5\u9078\u64c7\u7684\u6a19\u7c64 (\u5f80\u4e0a)",movedown:"\u79fb\u52d5\u9078\u64c7\u7684\u6a19\u7c64 (\u5f80\u4e0b)","head_elements":"HTML \u7684 Head \u6a19\u7c64",info:"\u8cc7\u8a0a","add_title":"HTML \u7684 Title \u6a19\u7c64","add_meta":"HTML \u7684 Meta \u6a19\u7c64","add_script":"HTML \u7684 Script \u6a19\u7c64","add_style":"HTML \u7684 Style \u6a19\u7c64","add_link":"HTML \u7684 Link \u6a19\u7c64","add_base":"HTML \u7684 Base \u6a19\u7c64","add_comment":"\u8a3b\u6587","title_element":"HTML \u7684 Title \u6a19\u7c64","script_element":"HTML \u7684 Script \u6a19\u7c64","style_element":"HTML \u7684 Style \u6a19\u7c64","base_element":"HTML \u7684 Base \u6a19\u7c64","link_element":"HTML \u7684 Link \u6a19\u7c64","meta_element":"HTML \u7684 Meta \u6a19\u7c64","comment_element":"\u8a3b\u89e3",src:"\u4f86\u6e90",language:"\u8a9e\u8a00",href:"\u9023\u7d50\u4f4d\u7f6e",target:"\u958b\u555f\u65b9\u5f0f",type:"\u5f62\u5f0f",charset:"\u5b57\u5143",defer:"\u5ef6\u7de9",media:"\u5f71\u97f3/\u5a92\u9ad4",properties:"\u5c6c\u6027",name:"\u540d\u7a31",value:"\u503c",content:"\u5167\u5bb9",rel:"\u8a72\u9023\u7d50\u662f\u4ec0\u9ebc (Rel)",rev:"\u8a72\u9023\u7d50\u8207\u7db2\u7ad9\u7684\u95dc\u4fc2 (Rev)",hreflang:"\u8a72\u9023\u7d50\u7684\u8a9e\u7cfb","general_props":"\u4e00\u822c","advanced_props":"\u66f4\u591a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh_dlg.js
new file mode 100644
index 000000000..35729048d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.fullpage_dlg',{title:"\u6587\u4ef6\u5c6c\u6027","meta_tab":"\u4e00\u822c","appearance_tab":"\u5916\u89c0","advanced_tab":"\u9032\u968e","meta_props":"Mata \u8cc7\u8a0a",langprops:"\u8a9e\u8a00\u548c\u7de8\u78bc","meta_title":"\u6a19\u984c","meta_keywords":"\u95dc\u9375\u5b57","meta_description":"\u8aaa\u660e","meta_robots":"Robots",doctypes:"DocType",langcode:"\u6587\u4ef6\u7de8\u78bc",langdir:"\u6587\u5b57\u66f8\u5beb\u65b9\u5411",ltr:"\u5f9e\u5de6\u5230\u53f3",rtl:"\u5f9e\u53f3\u5230\u5de6","xml_pi":"XML \u751f\u660e",encoding:"\u8a9e\u8a00\u7de8\u78bc","appearance_bgprops":"\u80cc\u666f\u984f\u8272","appearance_marginprops":"\u756b\u9762\u908a\u8ddd","appearance_linkprops":"\u9023\u7d50\u984f\u8272","appearance_textprops":"\u6587\u5b57\u5c6c\u6027",bgcolor:"\u80cc\u666f\u984f\u8272",bgimage:"\u80cc\u666f\u5716\u7247","left_margin":"\u5de6\u908a\u8ddd","right_margin":"\u53f3\u908a\u8ddd","top_margin":"\u4e0a\u908a\u8ddd","bottom_margin":"\u4e0b\u908a\u8ddd","text_color":"\u5b57\u9ad4\u984f\u8272","font_size":"\u5b57\u9ad4\u5927\u5c0f","font_face":"\u5b57\u9ad4","link_color":"\u9023\u7d50\u984f\u8272","hover_color":"\u7576\u6ed1\u9f20\u79fb\u5230\u9023\u7d50\u4e0a\u7684\u984f\u8272","visited_color":"\u8a2a\u554f\u904e\u7684\u9023\u7d50\u984f\u8272","active_color":"\u52d5\u4f5c\u4e2d\u7684\u9023\u7d50\u984f\u8272",textcolor:"\u5b57\u9ad4\u984f\u8272",fontsize:"\u5b57\u9ad4\u5927\u5c0f",fontface:"\u81ea\u9ad4","meta_index_follow":"\u7d22\u5f15\u4e26\u9023\u7d50","meta_index_nofollow":"\u7d22\u5f15\u4f46\u4e0d\u9023\u7d50","meta_noindex_follow":"\u4e0d\u7d22\u5f15\u4f46\u9023\u7d50","meta_noindex_nofollow":"\u4e0d\u7d22\u5f15\u4e5f\u4e0d\u9023\u7d50","appearance_style":"\u6a23\u5f0f\u8868\u8207\u6a23\u5f0f\u5c6c\u6027",stylesheet:"\u6a23\u5f0f\u8868",style:"\u6a23\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6b0a\u8072\u660e",add:"\u65b0\u589e\u5143\u7d20",remove:"\u522a\u9664\u9078\u64c7\u7684\u5143\u7d20",moveup:"\u4e0a\u79fb\u9078\u64c7\u7684\u5143\u7d20",movedown:"\u4e0b\u79fb\u9078\u64c7\u7684\u5143\u7d20","head_elements":"Head \u5143\u7d20",info:"\u8cc7\u8a0a","add_title":"Title \u5143\u7d20","add_meta":"Meta \u5143\u7d20","add_script":"Script \u5143\u7d20","add_style":"Style \u5143\u7d20","add_link":"Link \u5143\u7d20","add_base":"Base \u5143\u7d20","add_comment":"\u8a3b\u89e3","title_element":"Title \u5143\u7d20","script_element":"Script \u5143\u7d20","style_element":"Style \u5143\u7d20","base_element":"Base \u5143\u7d20","link_element":"Link \u5143\u7d20","meta_element":"Meta \u5143\u7d20","comment_element":"\u8a3b\u89e3",src:"Src",language:"\u8a9e\u8a00",href:"Href",target:"\u76ee\u6a19",type:"\u985e\u578b",charset:"\u5b57\u5143",defer:"Defer",media:"\u591a\u5a92\u9ad4",properties:"\u5c6c\u6027",name:"\u540d\u7a31",value:"\u503c",content:"\u5167\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u4e00\u822c","advanced_props":"\u9032\u968e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zu_dlg.js
new file mode 100644
index 000000000..0ccd232b7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullpage/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.fullpage_dlg',{title:"\u6863\u6848\u5c5e\u6027","meta_tab":"\u4e00\u822c","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"\u6807\u7b7e( Meta )\u4fe1\u606f",langprops:"\u8bed\u8a00\u4e0e\u7f16\u7801","meta_title":"\u6807\u9898","meta_keywords":"\u5173\u952e\u5b57","meta_description":"\u5185\u5bb9\u8bf4\u660e","meta_robots":"Robots",doctypes:"Doctype",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",ltr:"\u7531\u5de6\u5230\u53f3",rtl:"\u7531\u53f3\u5230\u5de6","xml_pi":"XML\u5ba3\u544a",encoding:"\u5b57\u5143\u7f16\u7801","appearance_bgprops":"\u80cc\u666f\u5c5e\u6027","appearance_marginprops":"Body margins","appearance_linkprops":"\u8fde\u7ed3\u989c\u8272","appearance_textprops":"\u6587\u5b57\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u8fb9\u754c","right_margin":"\u53f3\u8fb9\u754c","top_margin":"\u4e0a\u8fb9\u754c","bottom_margin":"\u4e0b\u8fb9\u754c","text_color":"\u6587\u5b57\u989c\u8272","font_size":"\u5b57\u4f53\u5c3a\u5bf8","font_face":"\u5b57\u4f53","link_color":"\u8fde\u7ed3\u989c\u8272","hover_color":"Hover\u989c\u8272","visited_color":"Visited\u989c\u8272","active_color":"Active\u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u5b57\u4f53\u5927\u5c0f",fontface:"\u5b57\u5f62\u4f53\u7cfb","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"\u6837\u5f0f\u8868\u53ca\u6837\u5f0f\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u8868",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743",add:"\u6dfb\u52a0\u65b0\u5143\u7d20",remove:"\u79fb\u9664\u9009\u5b9a\u5143\u7d20",moveup:"\u4e0a\u79fb\u9009\u5b9a\u5143\u7d20",movedown:"\u4e0b\u79fb\u9009\u5b9a\u5143\u7d20","head_elements":"Head elements",info:"\u4fe1\u606f","add_title":"\u67e5\u627e\u5143\u7d20","add_meta":"Meta\u5143\u7d20","add_script":"Script\u5143\u7d20","add_style":"Style\u5143\u7d20","add_link":"Link\u5143\u7d20","add_base":"Base\u5143\u7d20","add_comment":"Comment node","title_element":"\u67e5\u627eelement","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"\u8bed\u8a00",href:"Href",target:"\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u5143\u96c6",defer:"\u5ef6\u7f13",media:"\u5a92\u4f53",properties:"\u5c5e\u6027",name:"\u540d\u79f0",value:"\u503c",content:"\u5185\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u4e00\u822c","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js
new file mode 100644
index 000000000..a6456f89d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin.js
@@ -0,0 +1 @@
+(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());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());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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
new file mode 100644
index 000000000..afa4f9b46
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
@@ -0,0 +1,159 @@
+/**
+ * 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() {
+ var DOM = tinymce.DOM;
+
+ tinymce.create('tinymce.plugins.FullScreenPlugin', {
+ init : function(ed, url) {
+ var t = this, s = {}, vp, posCss;
+
+ t.editor = ed;
+
+ // Register commands
+ ed.addCommand('mceFullScreen', function() {
+ var win, de = DOM.doc.documentElement;
+
+ if (ed.getParam('fullscreen_is_enabled')) {
+ if (ed.getParam('fullscreen_new_window'))
+ closeFullscreen(); // Call to close in new window
+ else {
+ DOM.win.setTimeout(function() {
+ tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc);
+ tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent());
+ tinyMCE.remove(ed);
+ DOM.remove('mce_fullscreen_container');
+ de.style.overflow = ed.getParam('fullscreen_html_overflow');
+ DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow'));
+ DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly'));
+ tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings
+ }, 10);
+ }
+
+ return;
+ }
+
+ if (ed.getParam('fullscreen_new_window')) {
+ 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);
+ try {
+ win.resizeTo(screen.availWidth, screen.availHeight);
+ } catch (e) {
+ // Ignore
+ }
+ } else {
+ tinyMCE.oldSettings = tinyMCE.settings; // Store old settings
+ s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto';
+ s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1);
+ vp = DOM.getViewPort();
+ s.fullscreen_scrollx = vp.x;
+ s.fullscreen_scrolly = vp.y;
+
+ // Fixes an Opera bug where the scrollbars doesn't reappear
+ if (tinymce.isOpera && s.fullscreen_overflow == 'visible')
+ s.fullscreen_overflow = 'auto';
+
+ // Fixes an IE bug where horizontal scrollbars would appear
+ if (tinymce.isIE && s.fullscreen_overflow == 'scroll')
+ s.fullscreen_overflow = 'auto';
+
+ // Fixes an IE bug where the scrollbars doesn't reappear
+ if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll'))
+ s.fullscreen_html_overflow = 'auto';
+
+ if (s.fullscreen_overflow == '0px')
+ s.fullscreen_overflow = '';
+
+ DOM.setStyle(DOM.doc.body, 'overflow', 'hidden');
+ de.style.overflow = 'hidden'; //Fix for IE6/7
+ vp = DOM.getViewPort();
+ DOM.win.scrollTo(0, 0);
+
+ if (tinymce.isIE)
+ vp.h -= 1;
+
+ // Use fixed position if it exists
+ if (tinymce.isIE6)
+ posCss = 'absolute;top:' + vp.y;
+ else
+ posCss = 'fixed;top:0';
+
+ n = DOM.add(DOM.doc.body, 'div', {
+ id : 'mce_fullscreen_container',
+ style : 'position:' + posCss + ';left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'});
+ DOM.add(n, 'div', {id : 'mce_fullscreen'});
+
+ tinymce.each(ed.settings, function(v, n) {
+ s[n] = v;
+ });
+
+ s.id = 'mce_fullscreen';
+ s.width = n.clientWidth;
+ s.height = n.clientHeight - 15;
+ s.fullscreen_is_enabled = true;
+ s.fullscreen_editor_id = ed.id;
+ s.theme_advanced_resizing = false;
+ s.save_onsavecallback = function() {
+ ed.setContent(tinyMCE.get(s.id).getContent());
+ ed.execCommand('mceSave');
+ };
+
+ tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) {
+ s[k] = v;
+ });
+
+ if (s.theme_advanced_toolbar_location === 'external')
+ s.theme_advanced_toolbar_location = 'top';
+
+ t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s);
+ t.fullscreenEditor.onInit.add(function() {
+ t.fullscreenEditor.setContent(ed.getContent());
+ t.fullscreenEditor.focus();
+ });
+
+ t.fullscreenEditor.render();
+
+ t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container');
+ t.fullscreenElement.update();
+ //document.body.overflow = 'hidden';
+
+ t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() {
+ var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize;
+
+ // Get outer/inner size to get a delta size that can be used to calc the new iframe size
+ outerSize = fed.dom.getSize(fed.getContainer().firstChild);
+ innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]);
+
+ fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h);
+ });
+ }
+ });
+
+ // Register buttons
+ ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'});
+
+ ed.onNodeChange.add(function(ed, cm) {
+ cm.setActive('fullscreen', ed.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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm
new file mode 100644
index 000000000..ffe528e41
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/fullscreen/fullscreen.htm
@@ -0,0 +1,110 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title></title>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+ <script type="text/javascript" src="../../tiny_mce.js"></script>
+ <script type="text/javascript">
+ function patchCallback(settings, key) {
+ if (settings[key])
+ settings[key] = "window.opener." + settings[key];
+ }
+
+ var settings = {}, paSe = window.opener.tinyMCE.activeEditor.settings, oeID = window.opener.tinyMCE.activeEditor.id;
+
+ // Clone array
+ for (var n in paSe)
+ settings[n] = paSe[n];
+
+ // Override options for fullscreen
+ for (var n in paSe.fullscreen_settings)
+ settings[n] = paSe.fullscreen_settings[n];
+
+ // Patch callbacks, make them point to window.opener
+ patchCallback(settings, 'urlconverter_callback');
+ patchCallback(settings, 'insertlink_callback');
+ patchCallback(settings, 'insertimage_callback');
+ patchCallback(settings, 'setupcontent_callback');
+ patchCallback(settings, 'save_callback');
+ patchCallback(settings, 'onchange_callback');
+ patchCallback(settings, 'init_instance_callback');
+ patchCallback(settings, 'file_browser_callback');
+ patchCallback(settings, 'cleanup_callback');
+ patchCallback(settings, 'execcommand_callback');
+ patchCallback(settings, 'oninit');
+
+ // Set options
+ delete settings.id;
+ settings['mode'] = 'exact';
+ settings['elements'] = 'fullscreenarea';
+ settings['add_unload_trigger'] = false;
+ settings['ask'] = false;
+ settings['document_base_url'] = window.opener.tinyMCE.activeEditor.documentBaseURI.getURI();
+ settings['fullscreen_is_enabled'] = true;
+ settings['fullscreen_editor_id'] = oeID;
+ settings['theme_advanced_resizing'] = false;
+ settings['strict_loading_mode'] = true;
+
+ settings.save_onsavecallback = function() {
+ window.opener.tinyMCE.get(oeID).setContent(tinyMCE.get('fullscreenarea').getContent({format : 'raw'}), {format : 'raw'});
+ window.opener.tinyMCE.get(oeID).execCommand('mceSave');
+ window.close();
+ };
+
+ function unloadHandler(e) {
+ moveContent();
+ }
+
+ function moveContent() {
+ window.opener.tinyMCE.get(oeID).setContent(tinyMCE.activeEditor.getContent());
+ }
+
+ function closeFullscreen() {
+ moveContent();
+ window.close();
+ }
+
+ function doParentSubmit() {
+ moveContent();
+
+ if (window.opener.tinyMCE.selectedInstance.formElement.form)
+ window.opener.tinyMCE.selectedInstance.formElement.form.submit();
+
+ window.close();
+
+ return false;
+ }
+
+ function render() {
+ var e = document.getElementById('fullscreenarea'), vp, ed, ow, oh, dom = tinymce.DOM;
+
+ e.value = window.opener.tinyMCE.get(oeID).getContent();
+
+ vp = dom.getViewPort();
+ settings.width = vp.w;
+ settings.height = vp.h - 15;
+
+ tinymce.dom.Event.add(window, 'resize', function() {
+ var vp = dom.getViewPort();
+
+ tinyMCE.activeEditor.theme.resizeTo(vp.w, vp.h);
+ });
+
+ tinyMCE.init(settings);
+ }
+
+ // Add onunload
+ tinymce.dom.Event.add(window, "beforeunload", unloadHandler);
+ </script>
+</head>
+<body style="margin:0;overflow:hidden;width:100%;height:100%" scrolling="no" scroll="no">
+<form onsubmit="doParentSubmit();">
+<textarea id="fullscreenarea" style="width:100%; height:100%"></textarea>
+</form>
+
+<script type="text/javascript">
+ render();
+</script>
+
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js
new file mode 100644
index 000000000..e9cba106c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js
new file mode 100644
index 000000000..1b2bb9846
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/iespell/editor_plugin_src.js
@@ -0,0 +1,54 @@
+/**
+ * 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.IESpell', {
+ init : function(ed, url) {
+ var t = this, sp;
+
+ if (!tinymce.isIE)
+ return;
+
+ t.editor = ed;
+
+ // Register commands
+ ed.addCommand('mceIESpell', function() {
+ try {
+ sp = new ActiveXObject("ieSpell.ieSpellExtension");
+ sp.CheckDocumentNode(ed.getDoc().documentElement);
+ } catch (e) {
+ if (e.number == -2146827859) {
+ ed.windowManager.confirm(ed.getLang("iespell.download"), function(s) {
+ if (s)
+ window.open('http://www.iespell.com/download.php', 'ieSpellDownload', '');
+ });
+ } else
+ ed.windowManager.alert("Error Loading ieSpell: Exception " + e.number);
+ }
+ });
+
+ // Register buttons
+ ed.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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js
new file mode 100644
index 000000000..8bb96f9cb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin.js
@@ -0,0 +1 @@
+(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=="mceClose"){z.close(null,i);return a.cancel(t)}else{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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js
new file mode 100644
index 000000000..67123ca31
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js
@@ -0,0 +1,699 @@
+/**
+ * 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() {
+ var DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;
+
+ tinymce.create('tinymce.plugins.InlinePopups', {
+ init : function(ed, url) {
+ // Replace window manager
+ ed.onBeforeRenderUI.add(function() {
+ ed.windowManager = new tinymce.InlineWindowManager(ed);
+ DOM.loadCSS(url + '/skins/' + (ed.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(ed) {
+ var t = this;
+
+ t.parent(ed);
+ t.zIndex = 300000;
+ t.count = 0;
+ t.windows = {};
+ },
+
+ open : function(f, p) {
+ var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u, parentWindow;
+
+ f = f || {};
+ p = p || {};
+
+ // Run native windows
+ if (!f.inline)
+ return t.parent(f, p);
+
+ parentWindow = t._frontWindow();
+ if (parentWindow && DOM.get(parentWindow.id + '_ifr')) {
+ parentWindow.focussedElement = DOM.get(parentWindow.id + '_ifr').contentWindow.document.activeElement;
+ }
+
+ // Only store selection if the type is a normal window
+ if (!f.type)
+ t.bookmark = ed.selection.getBookmark(1);
+
+ id = DOM.uniqueId();
+ vp = DOM.getViewPort();
+ f.width = parseInt(f.width || 320);
+ f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0);
+ f.min_width = parseInt(f.min_width || 150);
+ f.min_height = parseInt(f.min_height || 100);
+ f.max_width = parseInt(f.max_width || 2000);
+ f.max_height = parseInt(f.max_height || 2000);
+ f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0)));
+ f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0)));
+ f.movable = f.resizable = true;
+ p.mce_width = f.width;
+ p.mce_height = f.height;
+ p.mce_inline = true;
+ p.mce_window_id = id;
+ p.mce_auto_focus = f.auto_focus;
+
+ // Transpose
+// po = DOM.getPos(ed.getContainer());
+// f.left -= po.x;
+// f.top -= po.y;
+
+ t.features = f;
+ t.params = p;
+ t.onOpen.dispatch(t, f, p);
+
+ if (f.type) {
+ opt += ' mceModal';
+
+ if (f.type)
+ opt += ' mce' + f.type.substring(0, 1).toUpperCase() + f.type.substring(1);
+
+ f.resizable = false;
+ }
+
+ if (f.statusbar)
+ opt += ' mceStatusbar';
+
+ if (f.resizable)
+ opt += ' mceResizable';
+
+ if (f.minimizable)
+ opt += ' mceMinimizable';
+
+ if (f.maximizable)
+ opt += ' mceMaximizable';
+
+ if (f.movable)
+ opt += ' mceMovable';
+
+ // Create DOM objects
+ t._addAll(DOM.doc.body,
+ ['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'},
+ ['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt},
+ ['div', {id : id + '_top', 'class' : 'mceTop'},
+ ['div', {'class' : 'mceLeft'}],
+ ['div', {'class' : 'mceCenter'}],
+ ['div', {'class' : 'mceRight'}],
+ ['span', {id : id + '_title'}, f.title || '']
+ ],
+
+ ['div', {id : id + '_middle', 'class' : 'mceMiddle'},
+ ['div', {id : id + '_left', 'class' : 'mceLeft', tabindex : '0'}],
+ ['span', {id : id + '_content'}],
+ ['div', {id : id + '_right', 'class' : 'mceRight', tabindex : '0'}]
+ ],
+
+ ['div', {id : id + '_bottom', 'class' : 'mceBottom'},
+ ['div', {'class' : 'mceLeft'}],
+ ['div', {'class' : 'mceCenter'}],
+ ['div', {'class' : 'mceRight'}],
+ ['span', {id : id + '_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 : id + '_resize_n', 'class' : 'mceResize mceResizeN', tabindex : '-1', href : 'javascript:;'}],
+ ['a', {id : id + '_resize_s', 'class' : 'mceResize mceResizeS', tabindex : '-1', href : 'javascript:;'}],
+ ['a', {id : id + '_resize_w', 'class' : 'mceResize mceResizeW', tabindex : '-1', href : 'javascript:;'}],
+ ['a', {id : id + '_resize_e', 'class' : 'mceResize mceResizeE', tabindex : '-1', href : 'javascript:;'}],
+ ['a', {id : id + '_resize_nw', 'class' : 'mceResize mceResizeNW', tabindex : '-1', href : 'javascript:;'}],
+ ['a', {id : id + '_resize_ne', 'class' : 'mceResize mceResizeNE', tabindex : '-1', href : 'javascript:;'}],
+ ['a', {id : id + '_resize_sw', 'class' : 'mceResize mceResizeSW', tabindex : '-1', href : 'javascript:;'}],
+ ['a', {id : id + '_resize_se', 'class' : 'mceResize mceResizeSE', tabindex : '-1', href : 'javascript:;'}]
+ ]
+ ]
+ );
+
+ DOM.setStyles(id, {top : -10000, left : -10000});
+
+ // Fix gecko rendering bug, where the editors iframe messed with window contents
+ if (tinymce.isGecko)
+ DOM.setStyle(id, 'overflow', 'auto');
+
+ // Measure borders
+ if (!f.type) {
+ dw += DOM.get(id + '_left').clientWidth;
+ dw += DOM.get(id + '_right').clientWidth;
+ dh += DOM.get(id + '_top').clientHeight;
+ dh += DOM.get(id + '_bottom').clientHeight;
+ }
+
+ // Resize window
+ DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh});
+
+ u = f.url || f.file;
+ if (u) {
+ if (tinymce.relaxedDomain)
+ u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain;
+
+ u = tinymce._addVer(u);
+ }
+
+ if (!f.type) {
+ DOM.add(id + '_content', 'iframe', {id : id + '_ifr', src : 'javascript:""', frameBorder : 0, style : 'border:0;width:10px;height:10px'});
+ DOM.setStyles(id + '_ifr', {width : f.width, height : f.height});
+ DOM.setAttrib(id + '_ifr', 'src', u);
+ } else {
+ DOM.add(id + '_wrapper', 'a', {id : id + '_ok', 'class' : 'mceButton mceOk', href : 'javascript:;', onmousedown : 'return false;'}, 'Ok');
+
+ if (f.type == 'confirm')
+ DOM.add(id + '_wrapper', 'a', {'class' : 'mceButton mceCancel', href : 'javascript:;', onmousedown : 'return false;'}, 'Cancel');
+
+ DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'});
+ DOM.setHTML(id + '_content', f.content.replace('\n', '<br />'));
+
+ Event.add(id, 'keyup', function(evt) {
+ var VK_ESCAPE = 27;
+ if (evt.keyCode === VK_ESCAPE) {
+ f.button_func(false);
+ return Event.cancel(evt);
+ }
+ });
+
+ Event.add(id, 'keydown', function(evt) {
+ var cancelButton, VK_TAB = 9;
+ if (evt.keyCode === VK_TAB) {
+ cancelButton = DOM.select('a.mceCancel', id + '_wrapper')[0];
+ if (cancelButton && cancelButton !== evt.target) {
+ cancelButton.focus();
+ } else {
+ DOM.get(id + '_ok').focus();
+ }
+ return Event.cancel(evt);
+ }
+ });
+ }
+
+ // Register events
+ mdf = Event.add(id, 'mousedown', function(e) {
+ var n = e.target, w, vp;
+
+ w = t.windows[id];
+ t.focus(id);
+
+ if (n.nodeName == 'A' || n.nodeName == 'a') {
+ if (n.className == 'mceClose') {
+ t.close(null, id);
+ return Event.cancel(e);
+ } else if (n.className == 'mceMax') {
+ w.oldPos = w.element.getXY();
+ w.oldSize = w.element.getSize();
+
+ vp = DOM.getViewPort();
+
+ // Reduce viewport size to avoid scrollbars
+ vp.w -= 2;
+ vp.h -= 2;
+
+ w.element.moveTo(vp.x, vp.y);
+ w.element.resizeTo(vp.w, vp.h);
+ DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight});
+ DOM.addClass(id + '_wrapper', 'mceMaximized');
+ } else if (n.className == 'mceMed') {
+ // Reset to old size
+ w.element.moveTo(w.oldPos.x, w.oldPos.y);
+ w.element.resizeTo(w.oldSize.w, w.oldSize.h);
+ w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight);
+
+ DOM.removeClass(id + '_wrapper', 'mceMaximized');
+ } else if (n.className == 'mceMove')
+ return t._startDrag(id, e, n.className);
+ else if (DOM.hasClass(n, 'mceResize'))
+ return t._startDrag(id, e, n.className.substring(13));
+ }
+ });
+
+ clf = Event.add(id, 'click', function(e) {
+ var n = e.target;
+
+ t.focus(id);
+
+ if (n.nodeName == 'A' || n.nodeName == 'a') {
+ switch (n.className) {
+ case 'mceClose':
+ t.close(null, id);
+ return Event.cancel(e);
+
+ case 'mceButton mceOk':
+ case 'mceButton mceCancel':
+ f.button_func(n.className == 'mceButton mceOk');
+ return Event.cancel(e);
+ }
+ }
+ });
+
+ // Make sure the tab order loops within the dialog.
+ Event.add([id + '_left', id + '_right'], 'focus', function(evt) {
+ var iframe = DOM.get(id + '_ifr');
+ if (iframe) {
+ var body = iframe.contentWindow.document.body;
+ var focusable = DOM.select(':input:enabled,*[tabindex=0]', body);
+ if (evt.target.id === (id + '_left')) {
+ focusable[focusable.length - 1].focus();
+ } else {
+ focusable[0].focus();
+ }
+ } else {
+ DOM.get(id + '_ok').focus();
+ }
+ });
+
+ // Add window
+ w = t.windows[id] = {
+ id : id,
+ mousedown_func : mdf,
+ click_func : clf,
+ element : new Element(id, {blocker : 1, container : ed.getContainer()}),
+ iframeElement : new Element(id + '_ifr'),
+ features : f,
+ deltaWidth : dw,
+ deltaHeight : dh
+ };
+
+ w.iframeElement.on('focus', function() {
+ t.focus(id);
+ });
+
+ // Setup blocker
+ if (t.count == 0 && t.editor.getParam('dialog_type', 'modal') == 'modal') {
+ DOM.add(DOM.doc.body, 'div', {
+ id : 'mceModalBlocker',
+ 'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker',
+ style : {zIndex : t.zIndex - 1}
+ });
+
+ DOM.show('mceModalBlocker'); // Reduces flicker in IE
+ DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'true');
+ } else
+ DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1);
+
+ if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel))
+ DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});
+
+ DOM.setAttrib(id, 'aria-hidden', 'false');
+ t.focus(id);
+ t._fixIELayout(id, 1);
+
+ // Focus ok button
+ if (DOM.get(id + '_ok'))
+ DOM.get(id + '_ok').focus();
+ t.count++;
+
+ return w;
+ },
+
+ focus : function(id) {
+ var t = this, w;
+
+ if (w = t.windows[id]) {
+ w.zIndex = this.zIndex++;
+ w.element.setStyle('zIndex', w.zIndex);
+ w.element.update();
+
+ id = id + '_wrapper';
+ DOM.removeClass(t.lastId, 'mceFocus');
+ DOM.addClass(id, 'mceFocus');
+ t.lastId = id;
+
+ if (w.focussedElement) {
+ w.focussedElement.focus();
+ } else if (DOM.get(id + '_ok')) {
+ DOM.get(w.id + '_ok').focus();
+ } else if (DOM.get(w.id + '_ifr')) {
+ DOM.get(w.id + '_ifr').focus();
+ }
+ }
+ },
+
+ _addAll : function(te, ne) {
+ var i, n, t = this, dom = tinymce.DOM;
+
+ if (is(ne, 'string'))
+ te.appendChild(dom.doc.createTextNode(ne));
+ else if (ne.length) {
+ te = te.appendChild(dom.create(ne[0], ne[1]));
+
+ for (i=2; i<ne.length; i++)
+ t._addAll(te, ne[i]);
+ }
+ },
+
+ _startDrag : function(id, se, ac) {
+ 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;
+
+ // Get positons and sizes
+// cp = DOM.getPos(t.editor.getContainer());
+ cp = {x : 0, y : 0};
+ vp = DOM.getViewPort();
+
+ // Reduce viewport size to avoid scrollbars while dragging
+ vp.w -= 2;
+ vp.h -= 2;
+
+ sex = se.screenX;
+ sey = se.screenY;
+ dx = dy = dw = dh = 0;
+
+ // Handle mouse up
+ mu = Event.add(d, 'mouseup', function(e) {
+ Event.remove(d, 'mouseup', mu);
+ Event.remove(d, 'mousemove', mm);
+
+ if (eb)
+ eb.remove();
+
+ we.moveBy(dx, dy);
+ we.resizeBy(dw, dh);
+ sz = we.getSize();
+ DOM.setStyles(id + '_ifr', {width : sz.w - w.deltaWidth, height : sz.h - w.deltaHeight});
+ t._fixIELayout(id, 1);
+
+ return Event.cancel(e);
+ });
+
+ if (ac != 'Move')
+ startMove();
+
+ function startMove() {
+ if (eb)
+ return;
+
+ t._fixIELayout(id, 0);
+
+ // Setup event blocker
+ DOM.add(d.body, 'div', {
+ id : 'mceEventBlocker',
+ 'class' : 'mceEventBlocker ' + (t.editor.settings.inlinepopups_skin || 'clearlooks2'),
+ style : {zIndex : t.zIndex + 1}
+ });
+
+ if (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel))
+ DOM.setStyles('mceEventBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});
+
+ eb = new Element('mceEventBlocker');
+ eb.update();
+
+ // Setup placeholder
+ p = we.getXY();
+ sz = we.getSize();
+ sx = cp.x + p.x - vp.x;
+ sy = cp.y + p.y - vp.y;
+ DOM.add(eb.get(), 'div', {id : 'mcePlaceHolder', 'class' : 'mcePlaceHolder', style : {left : sx, top : sy, width : sz.w, height : sz.h}});
+ ph = new Element('mcePlaceHolder');
+ };
+
+ // Handle mouse move/drag
+ mm = Event.add(d, 'mousemove', function(e) {
+ var x, y, v;
+
+ startMove();
+
+ x = e.screenX - sex;
+ y = e.screenY - sey;
+
+ switch (ac) {
+ case 'ResizeW':
+ dx = x;
+ dw = 0 - x;
+ break;
+
+ case 'ResizeE':
+ dw = x;
+ break;
+
+ case 'ResizeN':
+ case 'ResizeNW':
+ case 'ResizeNE':
+ if (ac == "ResizeNW") {
+ dx = x;
+ dw = 0 - x;
+ } else if (ac == "ResizeNE")
+ dw = x;
+
+ dy = y;
+ dh = 0 - y;
+ break;
+
+ case 'ResizeS':
+ case 'ResizeSW':
+ case 'ResizeSE':
+ if (ac == "ResizeSW") {
+ dx = x;
+ dw = 0 - x;
+ } else if (ac == "ResizeSE")
+ dw = x;
+
+ dh = y;
+ break;
+
+ case 'mceMove':
+ dx = x;
+ dy = y;
+ break;
+ }
+
+ // Boundary check
+ if (dw < (v = w.features.min_width - sz.w)) {
+ if (dx !== 0)
+ dx += dw - v;
+
+ dw = v;
+ }
+
+ if (dh < (v = w.features.min_height - sz.h)) {
+ if (dy !== 0)
+ dy += dh - v;
+
+ dh = v;
+ }
+
+ dw = Math.min(dw, w.features.max_width - sz.w);
+ dh = Math.min(dh, w.features.max_height - sz.h);
+ dx = Math.max(dx, vp.x - (sx + vp.x));
+ dy = Math.max(dy, vp.y - (sy + vp.y));
+ dx = Math.min(dx, (vp.w + vp.x) - (sx + sz.w + vp.x));
+ dy = Math.min(dy, (vp.h + vp.y) - (sy + sz.h + vp.y));
+
+ // Move if needed
+ if (dx + dy !== 0) {
+ if (sx + dx < 0)
+ dx = 0;
+
+ if (sy + dy < 0)
+ dy = 0;
+
+ ph.moveTo(sx + dx, sy + dy);
+ }
+
+ // Resize if needed
+ if (dw + dh !== 0)
+ ph.resizeTo(sz.w + dw, sz.h + dh);
+
+ return Event.cancel(e);
+ });
+
+ return Event.cancel(se);
+ },
+
+ resizeBy : function(dw, dh, id) {
+ var w = this.windows[id];
+
+ if (w) {
+ w.element.resizeBy(dw, dh);
+ w.iframeElement.resizeBy(dw, dh);
+ }
+ },
+
+ close : function(win, id) {
+ var t = this, w, d = DOM.doc, fw, id;
+
+ id = t._findId(id || win);
+
+ // Probably not inline
+ if (!t.windows[id]) {
+ t.parent(win);
+ return;
+ }
+
+ t.count--;
+
+ if (t.count == 0) {
+ DOM.remove('mceModalBlocker');
+ DOM.setAttrib(DOM.doc.body, 'aria-hidden', 'false');
+ t.editor.focus();
+ }
+
+ if (w = t.windows[id]) {
+ t.onClose.dispatch(t);
+ Event.remove(d, 'mousedown', w.mousedownFunc);
+ Event.remove(d, 'click', w.clickFunc);
+ Event.clear(id);
+ Event.clear(id + '_ifr');
+
+ DOM.setAttrib(id + '_ifr', 'src', 'javascript:""'); // Prevent leak
+ w.element.remove();
+ delete t.windows[id];
+
+ fw = t._frontWindow();
+
+ if (fw)
+ t.focus(fw.id);
+ }
+ },
+
+ // Find front most window
+ _frontWindow : function() {
+ var fw, ix = 0;
+ // Find front most window and focus that
+ each (this.windows, function(w) {
+ if (w.zIndex > ix) {
+ fw = w;
+ ix = w.zIndex;
+ }
+ });
+ return fw;
+ },
+
+ setTitle : function(w, ti) {
+ var e;
+
+ w = this._findId(w);
+
+ if (e = DOM.get(w + '_title'))
+ e.innerHTML = DOM.encode(ti);
+ },
+
+ alert : function(txt, cb, s) {
+ var t = this, w;
+
+ w = t.open({
+ title : t,
+ type : 'alert',
+ button_func : function(s) {
+ if (cb)
+ cb.call(s || t, s);
+
+ t.close(null, w.id);
+ },
+ content : DOM.encode(t.editor.getLang(txt, txt)),
+ inline : 1,
+ width : 400,
+ height : 130
+ });
+ },
+
+ confirm : function(txt, cb, s) {
+ var t = this, w;
+
+ w = t.open({
+ title : t,
+ type : 'confirm',
+ button_func : function(s) {
+ if (cb)
+ cb.call(s || t, s);
+
+ t.close(null, w.id);
+ },
+ content : DOM.encode(t.editor.getLang(txt, txt)),
+ inline : 1,
+ width : 400,
+ height : 130
+ });
+ },
+
+ // Internal functions
+
+ _findId : function(w) {
+ var t = this;
+
+ if (typeof(w) == 'string')
+ return w;
+
+ each(t.windows, function(wo) {
+ var ifr = DOM.get(wo.id + '_ifr');
+
+ if (ifr && w == ifr.contentWindow) {
+ w = wo.id;
+ return false;
+ }
+ });
+
+ return w;
+ },
+
+ _fixIELayout : function(id, s) {
+ var w, img;
+
+ if (!tinymce.isIE6)
+ return;
+
+ // Fixes the bug where hover flickers and does odd things in IE6
+ each(['n','s','w','e','nw','ne','sw','se'], function(v) {
+ var e = DOM.get(id + '_resize_' + v);
+
+ DOM.setStyles(e, {
+ width : s ? e.clientWidth : '',
+ height : s ? e.clientHeight : '',
+ cursor : DOM.getStyle(e, 'cursor', 1)
+ });
+
+ DOM.setStyle(id + "_bottom", 'bottom', '-1px');
+
+ e = 0;
+ });
+
+ // Fixes graphics glitch
+ if (w = this.windows[id]) {
+ // Fixes rendering bug after resize
+ w.element.hide();
+ w.element.show();
+
+ // Forced a repaint of the window
+ //DOM.get(id).style.filter = '';
+
+ // IE has a bug where images used in CSS won't get loaded
+ // sometimes when the cache in the browser is disabled
+ // This fix tries to solve it by loading the images using the image object
+ each(DOM.select('div,a', id), function(e, i) {
+ if (e.currentStyle.backgroundImage != 'none') {
+ img = new Image();
+ img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '$1');
+ }
+ });
+
+ DOM.get(id).style.filter = '';
+ }
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('inlinepopups', tinymce.plugins.InlinePopups);
+})();
+
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif
new file mode 100644
index 000000000..219139857
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif
new file mode 100644
index 000000000..f957e49a3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif
new file mode 100644
index 000000000..6baf64ad3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif
new file mode 100644
index 000000000..20acbbf7a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif
new file mode 100644
index 000000000..d5de1cc23
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif
new file mode 100644
index 000000000..c2a2ad454
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif
new file mode 100644
index 000000000..0b4cc3682
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css
new file mode 100644
index 000000000..a50d4fc57
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css
@@ -0,0 +1,90 @@
+/* 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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm
new file mode 100644
index 000000000..f9ec64219
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/inlinepopups/template.htm
@@ -0,0 +1,387 @@
+<!-- <!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>Template for dialogs</title>
+<link rel="stylesheet" type="text/css" href="skins/clearlooks2/window.css" />
+</head>
+<body>
+
+<div class="mceEditor">
+ <div class="clearlooks2" style="width:400px; height:100px; left:10px;">
+ <div class="mceWrapper">
+ <div class="mceTop">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Blured</span>
+ </div>
+
+ <div class="mceMiddle">
+ <div class="mceLeft"></div>
+ <span>Content</span>
+ <div class="mceRight"></div>
+ </div>
+
+ <div class="mceBottom">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Statusbar text.</span>
+ </div>
+
+ <a class="mceMove" href="#"></a>
+ <a class="mceMin" href="#"></a>
+ <a class="mceMax" href="#"></a>
+ <a class="mceMed" href="#"></a>
+ <a class="mceClose" href="#"></a>
+ <a class="mceResize mceResizeN" href="#"></a>
+ <a class="mceResize mceResizeS" href="#"></a>
+ <a class="mceResize mceResizeW" href="#"></a>
+ <a class="mceResize mceResizeE" href="#"></a>
+ <a class="mceResize mceResizeNW" href="#"></a>
+ <a class="mceResize mceResizeNE" href="#"></a>
+ <a class="mceResize mceResizeSW" href="#"></a>
+ <a class="mceResize mceResizeSE" href="#"></a>
+ </div>
+ </div>
+
+ <div class="clearlooks2" style="width:400px; height:100px; left:420px;">
+ <div class="mceWrapper mceMovable mceFocus">
+ <div class="mceTop">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Focused</span>
+ </div>
+
+ <div class="mceMiddle">
+ <div class="mceLeft"></div>
+ <span>Content</span>
+ <div class="mceRight"></div>
+ </div>
+
+ <div class="mceBottom">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Statusbar text.</span>
+ </div>
+
+ <a class="mceMove" href="#"></a>
+ <a class="mceMin" href="#"></a>
+ <a class="mceMax" href="#"></a>
+ <a class="mceMed" href="#"></a>
+ <a class="mceClose" href="#"></a>
+ <a class="mceResize mceResizeN" href="#"></a>
+ <a class="mceResize mceResizeS" href="#"></a>
+ <a class="mceResize mceResizeW" href="#"></a>
+ <a class="mceResize mceResizeE" href="#"></a>
+ <a class="mceResize mceResizeNW" href="#"></a>
+ <a class="mceResize mceResizeNE" href="#"></a>
+ <a class="mceResize mceResizeSW" href="#"></a>
+ <a class="mceResize mceResizeSE" href="#"></a>
+ </div>
+ </div>
+
+ <div class="clearlooks2" style="width:400px; height:100px; left:10px; top:120px;">
+ <div class="mceWrapper mceMovable mceFocus mceStatusbar">
+ <div class="mceTop">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Statusbar</span>
+ </div>
+
+ <div class="mceMiddle">
+ <div class="mceLeft"></div>
+ <span>Content</span>
+ <div class="mceRight"></div>
+ </div>
+
+ <div class="mceBottom">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Statusbar text.</span>
+ </div>
+
+ <a class="mceMove" href="#"></a>
+ <a class="mceMin" href="#"></a>
+ <a class="mceMax" href="#"></a>
+ <a class="mceMed" href="#"></a>
+ <a class="mceClose" href="#"></a>
+ <a class="mceResize mceResizeN" href="#"></a>
+ <a class="mceResize mceResizeS" href="#"></a>
+ <a class="mceResize mceResizeW" href="#"></a>
+ <a class="mceResize mceResizeE" href="#"></a>
+ <a class="mceResize mceResizeNW" href="#"></a>
+ <a class="mceResize mceResizeNE" href="#"></a>
+ <a class="mceResize mceResizeSW" href="#"></a>
+ <a class="mceResize mceResizeSE" href="#"></a>
+ </div>
+ </div>
+
+ <div class="clearlooks2" style="width:400px; height:100px; left:420px; top:120px;">
+ <div class="mceWrapper mceMovable mceFocus mceStatusbar mceResizable">
+ <div class="mceTop">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Statusbar, Resizable</span>
+ </div>
+
+ <div class="mceMiddle">
+ <div class="mceLeft"></div>
+ <span>Content</span>
+ <div class="mceRight"></div>
+ </div>
+
+ <div class="mceBottom">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Statusbar text.</span>
+ </div>
+
+ <a class="mceMove" href="#"></a>
+ <a class="mceMin" href="#"></a>
+ <a class="mceMax" href="#"></a>
+ <a class="mceMed" href="#"></a>
+ <a class="mceClose" href="#"></a>
+ <a class="mceResize mceResizeN" href="#"></a>
+ <a class="mceResize mceResizeS" href="#"></a>
+ <a class="mceResize mceResizeW" href="#"></a>
+ <a class="mceResize mceResizeE" href="#"></a>
+ <a class="mceResize mceResizeNW" href="#"></a>
+ <a class="mceResize mceResizeNE" href="#"></a>
+ <a class="mceResize mceResizeSW" href="#"></a>
+ <a class="mceResize mceResizeSE" href="#"></a>
+ </div>
+ </div>
+
+ <div class="clearlooks2" style="width:400px; height:100px; left:10px; top:230px;">
+ <div class="mceWrapper mceMovable mceFocus mceResizable mceMaximizable">
+ <div class="mceTop">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Resizable, Maximizable</span>
+ </div>
+
+ <div class="mceMiddle">
+ <div class="mceLeft"></div>
+ <span>Content</span>
+ <div class="mceRight"></div>
+ </div>
+
+ <div class="mceBottom">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Statusbar text.</span>
+ </div>
+
+ <a class="mceMove" href="#"></a>
+ <a class="mceMin" href="#"></a>
+ <a class="mceMax" href="#"></a>
+ <a class="mceMed" href="#"></a>
+ <a class="mceClose" href="#"></a>
+ <a class="mceResize mceResizeN" href="#"></a>
+ <a class="mceResize mceResizeS" href="#"></a>
+ <a class="mceResize mceResizeW" href="#"></a>
+ <a class="mceResize mceResizeE" href="#"></a>
+ <a class="mceResize mceResizeNW" href="#"></a>
+ <a class="mceResize mceResizeNE" href="#"></a>
+ <a class="mceResize mceResizeSW" href="#"></a>
+ <a class="mceResize mceResizeSE" href="#"></a>
+ </div>
+ </div>
+
+ <div class="clearlooks2" style="width:400px; height:100px; left:420px; top:230px;">
+ <div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximizable">
+ <div class="mceTop">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Blurred, Maximizable, Statusbar, Resizable</span>
+ </div>
+
+ <div class="mceMiddle">
+ <div class="mceLeft"></div>
+ <span>Content</span>
+ <div class="mceRight"></div>
+ </div>
+
+ <div class="mceBottom">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Statusbar text.</span>
+ </div>
+
+ <a class="mceMove" href="#"></a>
+ <a class="mceMin" href="#"></a>
+ <a class="mceMax" href="#"></a>
+ <a class="mceMed" href="#"></a>
+ <a class="mceClose" href="#"></a>
+ <a class="mceResize mceResizeN" href="#"></a>
+ <a class="mceResize mceResizeS" href="#"></a>
+ <a class="mceResize mceResizeW" href="#"></a>
+ <a class="mceResize mceResizeE" href="#"></a>
+ <a class="mceResize mceResizeNW" href="#"></a>
+ <a class="mceResize mceResizeNE" href="#"></a>
+ <a class="mceResize mceResizeSW" href="#"></a>
+ <a class="mceResize mceResizeSE" href="#"></a>
+ </div>
+ </div>
+
+ <div class="clearlooks2" style="width:400px; height:100px; left:10px; top:340px;">
+ <div class="mceWrapper mceMovable mceFocus mceResizable mceMaximized mceMinimizable mceMaximizable">
+ <div class="mceTop">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Maximized, Maximizable, Minimizable</span>
+ </div>
+
+ <div class="mceMiddle">
+ <div class="mceLeft"></div>
+ <span>Content</span>
+ <div class="mceRight"></div>
+ </div>
+
+ <div class="mceBottom">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Statusbar text.</span>
+ </div>
+
+ <a class="mceMove" href="#"></a>
+ <a class="mceMin" href="#"></a>
+ <a class="mceMax" href="#"></a>
+ <a class="mceMed" href="#"></a>
+ <a class="mceClose" href="#"></a>
+ <a class="mceResize mceResizeN" href="#"></a>
+ <a class="mceResize mceResizeS" href="#"></a>
+ <a class="mceResize mceResizeW" href="#"></a>
+ <a class="mceResize mceResizeE" href="#"></a>
+ <a class="mceResize mceResizeNW" href="#"></a>
+ <a class="mceResize mceResizeNE" href="#"></a>
+ <a class="mceResize mceResizeSW" href="#"></a>
+ <a class="mceResize mceResizeSE" href="#"></a>
+ </div>
+ </div>
+
+ <div class="clearlooks2" style="width:400px; height:100px; left:420px; top:340px;">
+ <div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximized mceMinimizable mceMaximizable">
+ <div class="mceTop">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Blured</span>
+ </div>
+
+ <div class="mceMiddle">
+ <div class="mceLeft"></div>
+ <span>Content</span>
+ <div class="mceRight"></div>
+ </div>
+
+ <div class="mceBottom">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Statusbar text.</span>
+ </div>
+
+ <a class="mceMove" href="#"></a>
+ <a class="mceMin" href="#"></a>
+ <a class="mceMax" href="#"></a>
+ <a class="mceMed" href="#"></a>
+ <a class="mceClose" href="#"></a>
+ <a class="mceResize mceResizeN" href="#"></a>
+ <a class="mceResize mceResizeS" href="#"></a>
+ <a class="mceResize mceResizeW" href="#"></a>
+ <a class="mceResize mceResizeE" href="#"></a>
+ <a class="mceResize mceResizeNW" href="#"></a>
+ <a class="mceResize mceResizeNE" href="#"></a>
+ <a class="mceResize mceResizeSW" href="#"></a>
+ <a class="mceResize mceResizeSE" href="#"></a>
+ </div>
+ </div>
+
+ <div class="clearlooks2" style="width:400px; height:130px; left:10px; top:450px;">
+ <div class="mceWrapper mceMovable mceFocus mceModal mceAlert">
+ <div class="mceTop">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Alert</span>
+ </div>
+
+ <div class="mceMiddle">
+ <div class="mceLeft"></div>
+ <span>
+ This is a very long error message. This is a very long error message.
+ This is a very long error message. This is a very long error message.
+ This is a very long error message. This is a very long error message.
+ This is a very long error message. This is a very long error message.
+ This is a very long error message. This is a very long error message.
+ This is a very long error message. This is a very long error message.
+ </span>
+ <div class="mceRight"></div>
+ <div class="mceIcon"></div>
+ </div>
+
+ <div class="mceBottom">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ </div>
+
+ <a class="mceMove" href="#"></a>
+ <a class="mceButton mceOk" href="#">Ok</a>
+ <a class="mceClose" href="#"></a>
+ </div>
+ </div>
+
+ <div class="clearlooks2" style="width:400px; height:130px; left:420px; top:450px;">
+ <div class="mceWrapper mceMovable mceFocus mceModal mceConfirm">
+ <div class="mceTop">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ <span>Confirm</span>
+ </div>
+
+ <div class="mceMiddle">
+ <div class="mceLeft"></div>
+ <span>
+ This is a very long error message. This is a very long error message.
+ This is a very long error message. This is a very long error message.
+ This is a very long error message. This is a very long error message.
+ This is a very long error message. This is a very long error message.
+ This is a very long error message. This is a very long error message.
+ This is a very long error message. This is a very long error message.
+ </span>
+ <div class="mceRight"></div>
+ <div class="mceIcon"></div>
+ </div>
+
+ <div class="mceBottom">
+ <div class="mceLeft"></div>
+ <div class="mceCenter"></div>
+ <div class="mceRight"></div>
+ </div>
+
+ <a class="mceMove" href="#"></a>
+ <a class="mceButton mceOk" href="#">Ok</a>
+ <a class="mceButton mceCancel" href="#">Cancel</a>
+ <a class="mceClose" href="#"></a>
+ </div>
+ </div>
+</div>
+
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js
new file mode 100644
index 000000000..938ce6b17
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js
new file mode 100644
index 000000000..181c791ec
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js
@@ -0,0 +1,83 @@
+/**
+ * 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.InsertDateTime', {
+ init : function(ed, url) {
+ var t = this;
+
+ t.editor = ed;
+
+ ed.addCommand('mceInsertDate', function() {
+ var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_dateFormat", ed.getLang('insertdatetime.date_fmt')));
+
+ ed.execCommand('mceInsertContent', false, str);
+ });
+
+ ed.addCommand('mceInsertTime', function() {
+ var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_timeFormat", ed.getLang('insertdatetime.time_fmt')));
+
+ ed.execCommand('mceInsertContent', false, str);
+ });
+
+ ed.addButton('insertdate', {title : 'insertdatetime.insertdate_desc', cmd : 'mceInsertDate'});
+ ed.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
+ };
+ },
+
+ // Private methods
+
+ _getDateTime : function(d, fmt) {
+ var ed = this.editor;
+
+ function addZeros(value, len) {
+ value = "" + value;
+
+ if (value.length < len) {
+ for (var i=0; i<(len-value.length); i++)
+ value = "0" + value;
+ }
+
+ return value;
+ };
+
+ fmt = fmt.replace("%D", "%m/%d/%y");
+ fmt = fmt.replace("%r", "%I:%M:%S %p");
+ fmt = fmt.replace("%Y", "" + d.getFullYear());
+ fmt = fmt.replace("%y", "" + d.getYear());
+ fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));
+ fmt = fmt.replace("%d", addZeros(d.getDate(), 2));
+ fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));
+ fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));
+ fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));
+ fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));
+ fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));
+ fmt = fmt.replace("%B", "" + ed.getLang("insertdatetime.months_long").split(',')[d.getMonth()]);
+ fmt = fmt.replace("%b", "" + ed.getLang("insertdatetime.months_short").split(',')[d.getMonth()]);
+ fmt = fmt.replace("%A", "" + ed.getLang("insertdatetime.day_long").split(',')[d.getDay()]);
+ fmt = fmt.replace("%a", "" + ed.getLang("insertdatetime.day_short").split(',')[d.getDay()]);
+ fmt = fmt.replace("%%", "%");
+
+ return fmt;
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('insertdatetime', tinymce.plugins.InsertDateTime);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js
new file mode 100644
index 000000000..ca3857a74
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin.js
@@ -0,0 +1 @@
+(function(){function a(b){do{if(b.className&&b.className.indexOf("mceItemLayer")!=-1){return b}}while(b=b.parentNode)}tinymce.create("tinymce.plugins.Layer",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceInsertLayer",d._insertLayer,d);b.addCommand("mceMoveForward",function(){d._move(1)});b.addCommand("mceMoveBackward",function(){d._move(-1)});b.addCommand("mceMakeAbsolute",function(){d._toggleAbsolute()});b.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});b.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});b.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});b.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});b.onInit.add(function(){var e=b.dom;if(tinymce.isIE){b.getDoc().execCommand("2D-Position",false,true)}});b.onMouseUp.add(function(f,h){var g=a(h.target);if(g){f.dom.setAttrib(g,"data-mce-style","")}});b.onMouseDown.add(function(f,j){var h=j.target,i=f.getDoc(),g;if(tinymce.isGecko){if(a(h)){if(i.designMode!=="on"){i.designMode="on";h=i.body;g=h.parentNode;g.removeChild(h);g.appendChild(h)}}else{if(i.designMode=="on"){i.designMode="off"}}}});b.onNodeChange.add(d._nodeChange,d);b.onVisualAid.add(d._visualAid,d)},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(c,b,f){var d,e;d=this._getParentLayer(f);e=c.dom.getParent(f,"DIV,P,IMG");if(!e){b.setDisabled("absolute",1);b.setDisabled("moveforward",1);b.setDisabled("movebackward",1)}else{b.setDisabled("absolute",0);b.setDisabled("moveforward",!d);b.setDisabled("movebackward",!d);b.setActive("absolute",d&&d.style.position.toLowerCase()=="absolute")}},_visualAid:function(b,d,c){var f=b.dom;tinymce.each(f.select("div,p",d),function(g){if(/^(absolute|relative|fixed)$/i.test(g.style.position)){if(c){f.addClass(g,"mceItemVisualAid")}else{f.removeClass(g,"mceItemVisualAid")}f.addClass(g,"mceItemLayer")}})},_move:function(j){var c=this.editor,g,h=[],f=this._getParentLayer(c.selection.getNode()),e=-1,k=-1,b;b=[];tinymce.walk(c.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){b.push(d)}},"childNodes");for(g=0;g<b.length;g++){h[g]=b[g].style.zIndex?parseInt(b[g].style.zIndex):0;if(e<0&&b[g]==f){e=g}}if(j<0){for(g=0;g<h.length;g++){if(h[g]<h[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{if(h[e]>0){b[e].style.zIndex=h[e]-1}}}else{for(g=0;g<h.length;g++){if(h[g]>h[e]){k=g;break}}if(k>-1){b[e].style.zIndex=h[k];b[k].style.zIndex=h[e]}else{b[e].style.zIndex=h[e]+1}}c.execCommand("mceRepaint")},_getParentLayer:function(b){return this.editor.dom.getParent(b,function(c){return c.nodeType==1&&/^(absolute|relative|static)$/i.test(c.style.position)})},_insertLayer:function(){var c=this.editor,e=c.dom,d=e.getPos(e.getParent(c.selection.getNode(),"*")),b=c.getBody();c.dom.add(b,"div",{style:{position:"absolute",left:d.x,top:(d.y>20?d.y:20),width:100,height:100},"class":"mceItemVisualAid mceItemLayer"},c.selection.getContent()||c.getLang("layer.content"));if(tinymce.isIE){e.setHTML(b,b.innerHTML)}},_toggleAbsolute:function(){var b=this.editor,c=this._getParentLayer(b.selection.getNode());if(!c){c=b.dom.getParent(b.selection.getNode(),"DIV,P,IMG")}if(c){if(c.style.position.toLowerCase()=="absolute"){b.dom.setStyles(c,{position:"",left:"",top:"",width:"",height:""});b.dom.removeClass(c,"mceItemVisualAid");b.dom.removeClass(c,"mceItemLayer")}else{if(c.style.left==""){c.style.left=20+"px"}if(c.style.top==""){c.style.top=20+"px"}if(c.style.width==""){c.style.width=c.width?(c.width+"px"):"100px"}if(c.style.height==""){c.style.height=c.height?(c.height+"px"):"100px"}c.style.position="absolute";b.dom.setAttrib(c,"data-mce-style","");b.addVisual(b.getBody())}b.execCommand("mceRepaint");b.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js
new file mode 100644
index 000000000..daed2806c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js
@@ -0,0 +1,262 @@
+/**
+ * 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() {
+ function findParentLayer(node) {
+ do {
+ if (node.className && node.className.indexOf('mceItemLayer') != -1) {
+ return node;
+ }
+ } while (node = node.parentNode);
+ };
+
+ tinymce.create('tinymce.plugins.Layer', {
+ init : function(ed, url) {
+ var t = this;
+
+ t.editor = ed;
+
+ // Register commands
+ ed.addCommand('mceInsertLayer', t._insertLayer, t);
+
+ ed.addCommand('mceMoveForward', function() {
+ t._move(1);
+ });
+
+ ed.addCommand('mceMoveBackward', function() {
+ t._move(-1);
+ });
+
+ ed.addCommand('mceMakeAbsolute', function() {
+ t._toggleAbsolute();
+ });
+
+ // Register buttons
+ ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'});
+ ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'});
+ ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'});
+ ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'});
+
+ ed.onInit.add(function() {
+ var dom = ed.dom;
+
+ if (tinymce.isIE)
+ ed.getDoc().execCommand('2D-Position', false, true);
+ });
+
+ // Remove serialized styles when selecting a layer since it might be changed by a drag operation
+ ed.onMouseUp.add(function(ed, e) {
+ var layer = findParentLayer(e.target);
+
+ if (layer) {
+ ed.dom.setAttrib(layer, 'data-mce-style', '');
+ }
+ });
+
+ // Fixes edit focus issues with layers on Gecko
+ // This will enable designMode while inside a layer and disable it when outside
+ ed.onMouseDown.add(function(ed, e) {
+ var node = e.target, doc = ed.getDoc(), parent;
+
+ if (tinymce.isGecko) {
+ if (findParentLayer(node)) {
+ if (doc.designMode !== 'on') {
+ doc.designMode = 'on';
+
+ // Repaint caret
+ node = doc.body;
+ parent = node.parentNode;
+ parent.removeChild(node);
+ parent.appendChild(node);
+ }
+ } else if (doc.designMode == 'on') {
+ doc.designMode = 'off';
+ }
+ }
+ });
+
+ ed.onNodeChange.add(t._nodeChange, t);
+ ed.onVisualAid.add(t._visualAid, t);
+ },
+
+ 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
+ };
+ },
+
+ // Private methods
+
+ _nodeChange : function(ed, cm, n) {
+ var le, p;
+
+ le = this._getParentLayer(n);
+ p = ed.dom.getParent(n, 'DIV,P,IMG');
+
+ if (!p) {
+ cm.setDisabled('absolute', 1);
+ cm.setDisabled('moveforward', 1);
+ cm.setDisabled('movebackward', 1);
+ } else {
+ cm.setDisabled('absolute', 0);
+ cm.setDisabled('moveforward', !le);
+ cm.setDisabled('movebackward', !le);
+ cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute");
+ }
+ },
+
+ // Private methods
+
+ _visualAid : function(ed, e, s) {
+ var dom = ed.dom;
+
+ tinymce.each(dom.select('div,p', e), function(e) {
+ if (/^(absolute|relative|fixed)$/i.test(e.style.position)) {
+ if (s)
+ dom.addClass(e, 'mceItemVisualAid');
+ else
+ dom.removeClass(e, 'mceItemVisualAid');
+
+ dom.addClass(e, 'mceItemLayer');
+ }
+ });
+ },
+
+ _move : function(d) {
+ var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl;
+
+ nl = [];
+ tinymce.walk(ed.getBody(), function(n) {
+ if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position))
+ nl.push(n);
+ }, 'childNodes');
+
+ // Find z-indexes
+ for (i=0; i<nl.length; i++) {
+ z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0;
+
+ if (ci < 0 && nl[i] == le)
+ ci = i;
+ }
+
+ if (d < 0) {
+ // Move back
+
+ // Try find a lower one
+ for (i=0; i<z.length; i++) {
+ if (z[i] < z[ci]) {
+ fi = i;
+ break;
+ }
+ }
+
+ if (fi > -1) {
+ nl[ci].style.zIndex = z[fi];
+ nl[fi].style.zIndex = z[ci];
+ } else {
+ if (z[ci] > 0)
+ nl[ci].style.zIndex = z[ci] - 1;
+ }
+ } else {
+ // Move forward
+
+ // Try find a higher one
+ for (i=0; i<z.length; i++) {
+ if (z[i] > z[ci]) {
+ fi = i;
+ break;
+ }
+ }
+
+ if (fi > -1) {
+ nl[ci].style.zIndex = z[fi];
+ nl[fi].style.zIndex = z[ci];
+ } else
+ nl[ci].style.zIndex = z[ci] + 1;
+ }
+
+ ed.execCommand('mceRepaint');
+ },
+
+ _getParentLayer : function(n) {
+ return this.editor.dom.getParent(n, function(n) {
+ return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position);
+ });
+ },
+
+ _insertLayer : function() {
+ var ed = this.editor, dom = ed.dom, p = dom.getPos(dom.getParent(ed.selection.getNode(), '*')), body = ed.getBody();
+
+ ed.dom.add(body, 'div', {
+ style : {
+ position : 'absolute',
+ left : p.x,
+ top : (p.y > 20 ? p.y : 20),
+ width : 100,
+ height : 100
+ },
+ 'class' : 'mceItemVisualAid mceItemLayer'
+ }, ed.selection.getContent() || ed.getLang('layer.content'));
+
+ // Workaround for IE where it messes up the JS engine if you insert a layer on IE 6,7
+ if (tinymce.isIE)
+ dom.setHTML(body, body.innerHTML);
+ },
+
+ _toggleAbsolute : function() {
+ var ed = this.editor, le = this._getParentLayer(ed.selection.getNode());
+
+ if (!le)
+ le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG');
+
+ if (le) {
+ if (le.style.position.toLowerCase() == "absolute") {
+ ed.dom.setStyles(le, {
+ position : '',
+ left : '',
+ top : '',
+ width : '',
+ height : ''
+ });
+
+ ed.dom.removeClass(le, 'mceItemVisualAid');
+ ed.dom.removeClass(le, 'mceItemLayer');
+ } else {
+ if (le.style.left == "")
+ le.style.left = 20 + 'px';
+
+ if (le.style.top == "")
+ le.style.top = 20 + 'px';
+
+ if (le.style.width == "")
+ le.style.width = le.width ? (le.width + 'px') : '100px';
+
+ if (le.style.height == "")
+ le.style.height = le.height ? (le.height + 'px') : '100px';
+
+ le.style.position = "absolute";
+
+ ed.dom.setAttrib(le, 'data-mce-style', '');
+ ed.addVisual(ed.getBody());
+ }
+
+ ed.execCommand('mceRepaint');
+ ed.nodeChanged();
+ }
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('layer', tinymce.plugins.Layer);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js
new file mode 100644
index 000000000..b3a4ce31c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js
new file mode 100644
index 000000000..e627ec76e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/legacyoutput/editor_plugin_src.js
@@ -0,0 +1,139 @@
+/**
+ * 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
+ *
+ * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align
+ * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash
+ *
+ * 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
+ * not apart of the newer specifications for HTML and XHTML.
+ */
+
+(function(tinymce) {
+ // Override inline_styles setting to force TinyMCE to produce deprecated contents
+ tinymce.onAddEditor.addToTop(function(tinymce, editor) {
+ editor.settings.inline_styles = false;
+ });
+
+ // Create the legacy ouput plugin
+ tinymce.create('tinymce.plugins.LegacyOutput', {
+ init : function(editor) {
+ editor.onInit.add(function() {
+ var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img',
+ fontSizes = tinymce.explode(editor.settings.font_size_style_values),
+ schema = editor.schema;
+
+ // Override some internal formats to produce legacy elements and attributes
+ editor.formatter.register({
+ // Change alignment formats to use the deprecated align attribute
+ alignleft : {selector : alignElements, attributes : {align : 'left'}},
+ aligncenter : {selector : alignElements, attributes : {align : 'center'}},
+ alignright : {selector : alignElements, attributes : {align : 'right'}},
+ alignfull : {selector : alignElements, attributes : {align : 'justify'}},
+
+ // Change the basic formatting elements to use deprecated element types
+ 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}
+ ],
+
+ // Change font size and font family to use the deprecated font element
+ fontname : {inline : 'font', attributes : {face : '%value'}},
+ fontsize : {
+ inline : 'font',
+ attributes : {
+ size : function(vars) {
+ return tinymce.inArray(fontSizes, vars.value) + 1;
+ }
+ }
+ },
+
+ // Setup font elements for colors as well
+ forecolor : {inline : 'font', styles : {color : '%value'}},
+ hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}}
+ });
+
+ // Check that deprecated elements are allowed if not add them
+ tinymce.each('b,i,u,strike'.split(','), function(name) {
+ schema.addValidElements(name + '[*]');
+ });
+
+ // Add font element if it's missing
+ if (!schema.getElementRule("font"))
+ schema.addValidElements("font[face|size|color|style]");
+
+ // Add the missing and depreacted align attribute for the serialization engine
+ tinymce.each(alignElements.split(','), function(name) {
+ var rule = schema.getElementRule(name), found;
+
+ if (rule) {
+ if (!rule.attributes.align) {
+ rule.attributes.align = {};
+ rule.attributesOrder.push('align');
+ }
+ }
+ });
+
+ // Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes
+ editor.onNodeChange.add(function(editor, control_manager) {
+ var control, fontElm, fontName, fontSize;
+
+ // Find font element get it's name and size
+ fontElm = editor.dom.getParent(editor.selection.getNode(), 'font');
+ if (fontElm) {
+ fontName = fontElm.face;
+ fontSize = fontElm.size;
+ }
+
+ // Select/unselect the font name in droplist
+ if (control = control_manager.get('fontselect')) {
+ control.select(function(value) {
+ return value == fontName;
+ });
+ }
+
+ // Select/unselect the font size in droplist
+ if (control = control_manager.get('fontsizeselect')) {
+ control.select(function(value) {
+ var index = tinymce.inArray(fontSizes, value.fontSize);
+
+ return index + 1 == fontSize;
+ });
+ }
+ });
+ });
+ },
+
+ 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 : tinymce.majorVersion + "." + tinymce.minorVersion
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput);
+})(tinymce);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin.js
new file mode 100644
index 000000000..86b8b1a40
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin.js
@@ -0,0 +1 @@
+(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{return v&&u.tagName==="P"&&t.tagName==="P"}}}}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(y){var v="TABBING";var s="EMPTY";var I="ESCAPE";var z="PARAGRAPH";var M="UNKNOWN";var x=M;function E(T){return T.keyCode===tinymce.VK.TAB&&!(T.altKey||T.ctrlKey)&&(y.queryCommandState("InsertUnorderedList")||y.queryCommandState("InsertOrderedList"))}function D(){var T=y.selection.getRng();var U=T.startContainer;if(U.nodeType==3){return(T.endOffset==U.nodeValue.length)}else{if(U.nodeType==1){return T.endOffset==U.childNodes.length}}return false}function N(){var U=y.selection.getNode();var T=U.tagName==="P"&&U.parentNode.tagName==="LI"&&U.parentNode.lastChild===U;return y.selection.isCollapsed()&&T&&D()}function w(){var T=B();var V=T.parentNode.parentNode;var U=T.parentNode.lastChild===T;return U&&!t(V)&&O(T)}function t(T){if(n(T)){return T.parentNode&&T.parentNode.tagName==="LI"}else{return T.tagName==="LI"}}function F(){return y.selection.isCollapsed()&&O(B())}function B(){var T=y.selection.getStart();return((T.tagName=="BR"||T.tagName=="")&&T.parentNode.tagName=="LI")?T.parentNode:T}function O(T){var U=T.childNodes.length;if(T.tagName==="LI"){return U==0?true:U==1&&(T.firstChild.tagName==""||T.firstChild.tagName=="BR"||H(T))}return false}function H(T){var U=tinymce.grep(T.parentNode.childNodes,function(X){return X.tagName=="LI"});var V=T==U[U.length-1];var W=T.firstChild;return tinymce.isIE9&&V&&(W.nodeValue==String.fromCharCode(160)||W.nodeValue==String.fromCharCode(32))}function S(T){return T.keyCode===tinymce.VK.ENTER}function A(T){return S(T)&&!T.shiftKey}function L(T){if(E(T)){return v}else{if(A(T)&&w()){return I}else{if(A(T)&&F()){return s}else{if(A(T)&&N()){return z}else{return M}}}}}function C(T,U){if(x==v||x==s||tinymce.isGecko&&x==I){r.cancel(U)}}function J(V,X){if(x==z){var W=V.selection.getNode();var U=V.dom.create("li");var T=V.dom.getParent(W,"li");V.dom.insertAfter(U,T);if(tinyMCE.isIE8){U.appendChild(V.dom.create("&nbsp;"));V.selection.setCursorLocation(U,1)}else{if(tinyMCE.isGecko){setTimeout(function(){var Y=V.getDoc().createTextNode("\uFEFF");U.appendChild(Y);V.selection.setCursorLocation(U,0)},0)}else{V.selection.setCursorLocation(U,0)}}r.cancel(X)}}function u(W,Y){var ab;if(!tinymce.isGecko){return}var U=W.selection.getStart();if(Y.keyCode!=tinymce.VK.BACKSPACE||U.tagName!=="IMG"){return}function V(af){var ag=af.firstChild;var ae=null;do{if(!ag){break}if(ag.tagName==="LI"){ae=ag}}while(ag=ag.nextSibling);return ae}function ad(af,ae){while(af.childNodes.length>0){ae.appendChild(af.childNodes[0])}}ab=U.parentNode.previousSibling;if(!ab){return}var Z;if(ab.tagName==="UL"||ab.tagName==="OL"){Z=ab}else{if(ab.previousSibling&&(ab.previousSibling.tagName==="UL"||ab.previousSibling.tagName==="OL")){Z=ab.previousSibling}else{return}}var ac=V(Z);var T=W.dom.createRng();T.setStart(ac,1);T.setEnd(ac,1);W.selection.setRng(T);W.selection.collapse(true);var X=W.selection.getBookmark();var aa=U.parentNode.cloneNode(true);if(aa.tagName==="P"||aa.tagName==="DIV"){ad(aa,ac)}else{ac.appendChild(aa)}U.parentNode.parentNode.removeChild(U.parentNode);W.selection.moveToBookmark(X)}function G(T){var U=y.dom.getParent(T,"ol,ul");if(U!=null){var V=U.lastChild;V.appendChild(y.getDoc().createElement(""));y.selection.setCursorLocation(V,0)}}this.ed=y;y.addCommand("Indent",this.indent,this);y.addCommand("Outdent",this.outdent,this);y.addCommand("InsertUnorderedList",function(){this.applyList("UL","OL")},this);y.addCommand("InsertOrderedList",function(){this.applyList("OL","UL")},this);y.onInit.add(function(){y.editorCommands.addCommands({outdent:function(){var U=y.selection,V=y.dom;function T(W){W=V.getParent(W,V.isBlock);return W&&(parseInt(y.dom.getStyle(W,"margin-left")||0,10)+parseInt(y.dom.getStyle(W,"padding-left")||0,10))>0}return T(U.getStart())||T(U.getEnd())||y.queryCommandState("InsertOrderedList")||y.queryCommandState("InsertUnorderedList")}},"state")});y.onKeyUp.add(function(U,V){if(x==v){U.execCommand(V.shiftKey?"Outdent":"Indent",true,null);x=M;return r.cancel(V)}else{if(x==s){var T=B();var X=U.settings.list_outdent_on_enter===true||V.shiftKey;U.execCommand(X?"Outdent":"Indent",true,null);if(tinymce.isIE){G(T)}return r.cancel(V)}else{if(x==I){if(tinymce.isIE8){var W=U.getDoc().createTextNode("\uFEFF");U.selection.getNode().appendChild(W)}else{if(tinymce.isIE9||tinymce.isGecko){U.execCommand("Outdent");return r.cancel(V)}}}}}});function K(U,T){var V=y.getDoc().createTextNode("\uFEFF");U.insertBefore(V,T);y.selection.setCursorLocation(V,0);y.execCommand("mceRepaint")}function Q(U,W){if(S(W)){var T=B();if(T){var V=T.parentNode;var X=V&&V.parentNode;if(X&&X.nodeName=="LI"&&X.firstChild==V&&T==V.firstChild){K(X,V)}}}}function R(U,W){if(S(W)){var T=B();if(U.dom.select("ul li",T).length===1){var V=T.firstChild;K(T,V)}}}function P(U,Y){function V(ac,Z){var ab=[];var ad=new tinymce.dom.TreeWalker(Z,ac);for(var aa=ad.current();aa;aa=ad.next()){if(U.dom.is(aa,"ol,ul,li")){ab.push(aa)}}return ab}if(Y.keyCode==tinymce.VK.BACKSPACE){var T=B();if(T){var X=U.dom.getParent(T,"ol,ul");if(X&&X.firstChild===T){var W=V(X,T);U.execCommand("Outdent",false,W);U.undoManager.add();return r.cancel(Y)}}}}y.onKeyDown.add(function(T,U){x=L(U)});y.onKeyDown.add(C);y.onKeyDown.add(u);y.onKeyDown.add(J);if(tinymce.isGecko){y.onKeyUp.add(Q)}if(tinymce.isIE8){y.onKeyUp.add(R)}if(tinymce.isGecko||tinymce.isWebKit){y.onKeyDown.add(P)}},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){J(P,O,M.tagName==="BODY"?null:P.parentNode);t=P.parentNode;L(t);E(O)});if(t){if(t.tagName==="LI"&&(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(P,L,N){var t,O=P,M;while(!I.isBlock(P.parentNode)&&P.parentNode!==I.getRoot()){P=I.split(P.parentNode,P.previousSibling);P=P.nextSibling;O=P}if(N){t=N.cloneNode(true);P.parentNode.insertBefore(t,P);while(t.firstChild){I.remove(t.firstChild)}t=I.rename(t,"li")}else{t=I.create("li");P.parentNode.insertBefore(t,P)}while(O&&O!=L){M=O.nextSibling;t.appendChild(O);O=M}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(U){if(U.hasAttribute&&U.hasAttribute("_mce_bogus")){return true}if(P(N,U)){I.addClass(U,"_mce_tagged_br");N=S(U)}});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&&!H||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,elements:this.selectedBlocks()}}else{B={defaultAction:x,elements:this.selectedBlocks()}}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),elements:this.selectedBlocks()})},outdent:function(y,x){var w=this,u=w.ed,z=u.dom,s=[];function A(t){var C,B,D;if(!d(u,t,s)){if(z.getStyle(t,"margin-left")!==""||z.getStyle(t,"padding-left")!==""){return w.adjustPaddingFunction(false)(t)}D=z.getStyle(t,"text-align",true);if(D==="center"||D==="right"){z.setStyle(t,"text-align","left");return}t=c(t,z);C=t.parentNode;B=t.parentNode.parentNode;if(B.tagName==="P"){z.split(B,t.parentNode)}else{z.split(C,t);if(B.tagName==="LI"){z.split(B,t)}else{if(!z.is(B,"ol,ul")){z.rename(t,"p")}}}s.push(t)}}var v=x&&tinymce.is(x,"array")?x:this.selectedBlocks();this.process({LI:A,defaultAction:this.adjustPaddingFunction(false),elements:v});e(s,m)},process:function(y){var F=this,w=F.ed.selection,z=F.ed.dom,E,u;function B(t){var s=tinymce.grep(t.childNodes,function(H){return !(H.nodeName==="BR"||H.nodeName==="SPAN"&&z.getAttrib(H,"data-mce-type")=="bookmark"||H.nodeType==3&&(H.nodeValue==String.fromCharCode(160)||H.nodeValue==""))});return s.length===0}function x(s){z.removeClass(s,"_mce_act_on");if(!s||s.nodeType!==1||E.length>1&&B(s)){return}s=k(s,z);var t=y[s.tagName];if(!t){t=y.defaultAction}t(s)}function v(s){F.splitSafeEach(s.childNodes,x)}function C(s,t){return t>=0&&s.hasChildNodes()&&t<s.childNodes.length&&s.childNodes[t].tagName==="BR"}function D(){var t=w.getNode();var s=z.getParent(t,"td");return s!==null}E=y.elements;u=w.getRng(true);if(!u.collapsed){if(C(u.endContainer,u.endOffset-1)){u.setEnd(u.endContainer,u.endOffset-1);w.setRng(u)}if(C(u.startContainer,u.startOffset)){u.setStart(u.startContainer,u.startOffset+1);w.setRng(u)}}if(tinymce.isIE8){var G=F.ed.selection.getNode();if(G.tagName==="LI"&&!(G.parentNode.lastChild===G)){var A=F.ed.getDoc().createTextNode("\uFEFF");G.appendChild(A)}}g=w.getBookmark();y.OL=y.UL=v;F.splitSafeEach(E,x);w.moveToBookmark(g);g=null;if(!D()){F.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:"")}},selectedBlocks:function(){var s=this.ed;var t=s.selection.getSelectedBlocks();return t.length==0?[s.dom.getRoot()]:t},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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js
new file mode 100644
index 000000000..a3bd16cab
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/lists/editor_plugin_src.js
@@ -0,0 +1,925 @@
+/**
+ * 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 return mergeParagraphs && e1.tagName === 'P' && e2.tagName === 'P';
+ }
+
+ 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) {
+ var LIST_TABBING = 'TABBING';
+ var LIST_EMPTY_ITEM = 'EMPTY';
+ var LIST_ESCAPE = 'ESCAPE';
+ var LIST_PARAGRAPH = 'PARAGRAPH';
+ var LIST_UNKNOWN = 'UNKNOWN';
+ var state = LIST_UNKNOWN;
+
+ function isTabInList(e) {
+ // Don't indent on Ctrl+Tab or Alt+Tab
+ return e.keyCode === tinymce.VK.TAB && !(e.altKey || e.ctrlKey) &&
+ (ed.queryCommandState('InsertUnorderedList') || ed.queryCommandState('InsertOrderedList'));
+ }
+
+ function isCursorAtEndOfContainer() {
+ var range = ed.selection.getRng();
+ var startContainer = range.startContainer;
+ if (startContainer.nodeType == 3) {
+ return (range.endOffset == startContainer.nodeValue.length);
+ } else if (startContainer.nodeType == 1) {
+ return range.endOffset == startContainer.childNodes.length;
+ }
+ return false;
+ }
+
+ // If we are at the end of a paragraph in a list item, pressing enter should create a new list item instead of a new paragraph.
+ function isEndOfParagraph() {
+ var node = ed.selection.getNode();
+ var isLastParagraphOfLi = node.tagName === 'P' && node.parentNode.tagName === 'LI' && node.parentNode.lastChild === node;
+ return ed.selection.isCollapsed() && isLastParagraphOfLi && isCursorAtEndOfContainer();
+ }
+
+ function isOnLastListItem() {
+ var li = getLi();
+ var grandParent = li.parentNode.parentNode;
+ var isLastItem = li.parentNode.lastChild === li;
+ return isLastItem && !isNestedList(grandParent) && isEmptyListItem(li);
+ }
+
+ function isNestedList(grandParent) {
+ if (isList(grandParent)) {
+ return grandParent.parentNode && grandParent.parentNode.tagName === 'LI';
+ } else {
+ return grandParent.tagName === 'LI';
+ }
+ }
+
+ function isInEmptyListItem() {
+ return ed.selection.isCollapsed() && isEmptyListItem(getLi());
+ }
+
+ function getLi() {
+ var n = ed.selection.getStart();
+ // Get start will return BR if the LI only contains a BR or an empty element as we use these to fix caret position
+ return ((n.tagName == 'BR' || n.tagName == '') && n.parentNode.tagName == 'LI') ? n.parentNode : n;
+ }
+
+ function isEmptyListItem(li) {
+ var numChildren = li.childNodes.length;
+ if (li.tagName === 'LI') {
+ return numChildren == 0 ? true : numChildren == 1 && (li.firstChild.tagName == '' || li.firstChild.tagName == 'BR' || isEmptyIE9Li(li));
+ }
+ return false;
+ }
+
+ function isEmptyIE9Li(li) {
+ // only consider this to be last item if there is no list item content or that content is nbsp or space since IE9 creates these
+ var lis = tinymce.grep(li.parentNode.childNodes, function(n) {return n.tagName == 'LI'});
+ var isLastLi = li == lis[lis.length - 1];
+ var child = li.firstChild;
+ return tinymce.isIE9 && isLastLi && (child.nodeValue == String.fromCharCode(160) || child.nodeValue == String.fromCharCode(32));
+ }
+
+ function isEnter(e) {
+ return e.keyCode === tinymce.VK.ENTER;
+ }
+
+ function isEnterWithoutShift(e) {
+ return isEnter(e) && !e.shiftKey;
+ }
+
+ function getListKeyState(e) {
+ if (isTabInList(e)) {
+ return LIST_TABBING;
+ } else if (isEnterWithoutShift(e) && isOnLastListItem()) {
+ return LIST_ESCAPE;
+ } else if (isEnterWithoutShift(e) && isInEmptyListItem()) {
+ return LIST_EMPTY_ITEM;
+ } else if (isEnterWithoutShift(e) && isEndOfParagraph()) {
+ return LIST_PARAGRAPH;
+ } else {
+ return LIST_UNKNOWN;
+ }
+ }
+
+ function cancelDefaultEvents(ed, e) {
+ // list escape is done manually using outdent as it does not create paragraphs correctly in td's
+ if (state == LIST_TABBING || state == LIST_EMPTY_ITEM || tinymce.isGecko && state == LIST_ESCAPE) {
+ Event.cancel(e);
+ }
+ }
+
+ // Creates a new list item after the current selection's list item parent
+ function createNewLi(ed, e) {
+ if (state == LIST_PARAGRAPH) {
+ var node = ed.selection.getNode();
+ var li = ed.dom.create("li");
+ var parentLi = ed.dom.getParent(node, 'li');
+ ed.dom.insertAfter(li, parentLi);
+
+ // Move caret to new list element.
+ if (tinyMCE.isIE8) {
+ li.appendChild(ed.dom.create("&nbsp;")); // IE needs an element within the bullet point
+ ed.selection.setCursorLocation(li, 1);
+ } else if (tinyMCE.isGecko) {
+ // This setTimeout is a hack as FF behaves badly if there is no content after the bullet point
+ setTimeout(function () {
+ var n = ed.getDoc().createTextNode('\uFEFF');
+ li.appendChild(n);
+ ed.selection.setCursorLocation(li, 0);
+ }, 0);
+ } else {
+ ed.selection.setCursorLocation(li, 0);
+ }
+ Event.cancel(e);
+ }
+ }
+
+ function imageJoiningListItem(ed, e) {
+ var prevSibling;
+
+ if (!tinymce.isGecko)
+ return;
+
+ var n = ed.selection.getStart();
+ if (e.keyCode != tinymce.VK.BACKSPACE || 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]);
+ }
+
+ // Check if there is a previous sibling
+ prevSibling = n.parentNode.previousSibling;
+ if (!prevSibling)
+ return;
+
+ var ul;
+ if (prevSibling.tagName === 'UL' || prevSibling.tagName === 'OL')
+ ul = prevSibling;
+ else if (prevSibling.previousSibling && (prevSibling.previousSibling.tagName === 'UL' || prevSibling.previousSibling.tagName === 'OL'))
+ ul = prevSibling.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);
+ }
+
+ // fix the cursor position to ensure it is correct in IE
+ function setCursorPositionToOriginalLi(li) {
+ var list = ed.dom.getParent(li, 'ol,ul');
+ if (list != null) {
+ var lastLi = list.lastChild;
+ lastLi.appendChild(ed.getDoc().createElement(''));
+ ed.selection.setCursorLocation(lastLi, 0);
+ }
+ }
+
+ 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) {
+ if (state == LIST_TABBING) {
+ ed.execCommand(e.shiftKey ? 'Outdent' : 'Indent', true, null);
+ state = LIST_UNKNOWN;
+ return Event.cancel(e);
+ } else if (state == LIST_EMPTY_ITEM) {
+ var li = getLi();
+ var shouldOutdent = ed.settings.list_outdent_on_enter === true || e.shiftKey;
+ ed.execCommand(shouldOutdent ? 'Outdent' : 'Indent', true, null);
+ if (tinymce.isIE) {
+ setCursorPositionToOriginalLi(li);
+ }
+
+ return Event.cancel(e);
+ } else if (state == LIST_ESCAPE) {
+ if (tinymce.isIE8) {
+ // append a zero sized nbsp so that caret is positioned correctly in IE8 after escaping and applying formatting.
+ // if there is no text then applying formatting for e.g a H1 to the P tag immediately following list after
+ // escaping from it will cause the caret to be positioned on the last li instead of staying the in P tag.
+ var n = ed.getDoc().createTextNode('\uFEFF');
+ ed.selection.getNode().appendChild(n);
+ } else if (tinymce.isIE9 || tinymce.isGecko) {
+ // IE9 does not escape the list so we use outdent to do this and cancel the default behaviour
+ // Gecko does not create a paragraph outdenting inside a TD so default behaviour is cancelled and we outdent ourselves
+ ed.execCommand('Outdent');
+ return Event.cancel(e);
+ }
+ }
+ });
+
+ function fixListItem(parent, reference) {
+ // a zero-sized non-breaking space is placed in the empty list item so that the nested list is
+ // displayed on the below line instead of next to it
+ var n = ed.getDoc().createTextNode('\uFEFF');
+ parent.insertBefore(n, reference);
+ ed.selection.setCursorLocation(n, 0);
+ // repaint to remove rendering artifact. only visible when creating new list
+ ed.execCommand('mceRepaint');
+ }
+
+ function fixIndentedListItemForGecko(ed, e) {
+ if (isEnter(e)) {
+ var li = getLi();
+ if (li) {
+ var parent = li.parentNode;
+ var grandParent = parent && parent.parentNode;
+ if (grandParent && grandParent.nodeName == 'LI' && grandParent.firstChild == parent && li == parent.firstChild) {
+ fixListItem(grandParent, parent);
+ }
+ }
+ }
+ }
+
+ function fixIndentedListItemForIE8(ed, e) {
+ if (isEnter(e)) {
+ var li = getLi();
+ if (ed.dom.select('ul li', li).length === 1) {
+ var list = li.firstChild;
+ fixListItem(li, list);
+ }
+ }
+ }
+
+ function fixDeletingFirstCharOfList(ed, e) {
+ function listElements(list, li) {
+ var elements = [];
+ var walker = new tinymce.dom.TreeWalker(li, list);
+ for (var node = walker.current(); node; node = walker.next()) {
+ if (ed.dom.is(node, 'ol,ul,li')) {
+ elements.push(node);
+ }
+ }
+ return elements;
+ }
+
+ if (e.keyCode == tinymce.VK.BACKSPACE) {
+ var li = getLi();
+ if (li) {
+ var list = ed.dom.getParent(li, 'ol,ul');
+ if (list && list.firstChild === li) {
+ var elements = listElements(list, li);
+ ed.execCommand("Outdent", false, elements);
+ ed.undoManager.add();
+ return Event.cancel(e);
+ }
+ }
+ }
+ }
+
+ ed.onKeyDown.add(function(_, e) { state = getListKeyState(e); });
+ ed.onKeyDown.add(cancelDefaultEvents);
+ ed.onKeyDown.add(imageJoiningListItem);
+ ed.onKeyDown.add(createNewLi);
+
+ if (tinymce.isGecko) {
+ ed.onKeyUp.add(fixIndentedListItemForGecko);
+ }
+ if (tinymce.isIE8) {
+ ed.onKeyUp.add(fixIndentedListItemForIE8);
+ }
+ if (tinymce.isGecko || tinymce.isWebKit) {
+ ed.onKeyDown.add(fixDeletingFirstCharOfList);
+ }
+ },
+
+ 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) {
+ doWrapList(startSection, br, element.tagName === 'BODY' ? null : startSection.parentNode);
+ li = startSection.parentNode;
+ adjustIndentForNewList(li);
+ cleanupBr(br);
+ });
+ if (li) {
+ if (li.tagName === 'LI' && (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;
+ 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) {
+ 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 &&!hasSameType || 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,
+ elements: this.selectedBlocks()
+ };
+ } else {
+ actions = {
+ defaultAction: convertListItemToParagraph,
+ elements: this.selectedBlocks()
+ };
+ }
+ 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),
+ elements: this.selectedBlocks()
+ });
+
+ },
+
+ outdent: function(ui, elements) {
+ 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);
+ }
+ }
+
+ var listElements = elements && tinymce.is(elements, 'array') ? elements : this.selectedBlocks();
+ this.process({
+ 'LI': outdentLI,
+ defaultAction: this.adjustPaddingFunction(false),
+ elements: listElements
+ });
+
+ each(outdented, attemptMergeWithAdjacent);
+ },
+
+ process: function(actions) {
+ var t = this, sel = t.ed.selection, dom = t.ed.dom, selectedBlocks, r;
+
+ function isEmptyElement(element) {
+ var excludeBrsAndBookmarks = tinymce.grep(element.childNodes, function(n) {
+ return !(n.nodeName === 'BR' || n.nodeName === 'SPAN' && dom.getAttrib(n, 'data-mce-type') == 'bookmark'
+ || n.nodeType == 3 && (n.nodeValue == String.fromCharCode(160) || n.nodeValue == ''));
+ });
+ return excludeBrsAndBookmarks.length === 0;
+ }
+
+ function processElement(element) {
+ dom.removeClass(element, '_mce_act_on');
+ if (!element || element.nodeType !== 1 || selectedBlocks.length > 1 && isEmptyElement(element)) {
+ 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';
+ }
+
+ function isInTable() {
+ var n = sel.getNode();
+ var p = dom.getParent(n, 'td');
+ return p !== null;
+ }
+
+ selectedBlocks = actions.elements;
+
+ 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);
+ }
+ }
+
+
+ if (tinymce.isIE8) {
+ // append a zero sized nbsp so that caret is restored correctly using bookmark
+ var s = t.ed.selection.getNode();
+ if (s.tagName === 'LI' && !(s.parentNode.lastChild === s)) {
+ var i = t.ed.getDoc().createTextNode('\uFEFF');
+ s.appendChild(i);
+ }
+ }
+
+ bookmark = sel.getBookmark();
+ actions.OL = actions.UL = recurse;
+ t.splitSafeEach(selectedBlocks, processElement);
+ sel.moveToBookmark(bookmark);
+ bookmark = null;
+
+ // we avoid doing repaint in a table as this will move the caret out of the table in Firefox 3.6
+ if (!isInTable()) {
+ // 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 : '');
+ };
+ },
+
+ selectedBlocks: function() {
+ var ed = this.ed
+ var selectedBlocks = ed.selection.getSelectedBlocks();
+ return selectedBlocks.length == 0 ? [ ed.dom.getRoot() ] : selectedBlocks;
+ },
+
+ 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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/css/media.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/css/media.css
new file mode 100644
index 000000000..0c45c7ff6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/css/media.css
@@ -0,0 +1,17 @@
+#id, #name, #hspace, #vspace, #class_name, #align { width: 100px }
+#hspace, #vspace { width: 50px }
+#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { width: 100px }
+#flash_base, #flash_flashvars, #html5_altsource1, #html5_altsource2, #html5_poster { width: 240px }
+#width, #height { width: 40px }
+#src, #media_type { width: 250px }
+#class { width: 120px }
+#prev { margin: 0; border: 1px solid black; width: 380px; height: 260px; overflow: auto }
+.panel_wrapper div.current { height: 420px; overflow: auto }
+#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options { display: none }
+.mceAddSelectValue { background-color: #DDDDDD }
+#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 }
+#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume { width: 70px }
+#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks { width: 70px }
+#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle { width: 90px }
+#qt_qtsrc { width: 200px }
+iframe {border: 1px solid gray}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js
new file mode 100644
index 000000000..37b4320bd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin.js
@@ -0,0 +1 @@
+(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"],["EmbeddedAudio"],["Audio"]];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,mpeg;shockwave=dcr;windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;realmedia=rm,ra,ram;java=jar;audio=mp3,ogg").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,hspace:m.hspace,vspace:m.vspace,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||(m.type=="audio"?"300":"320");n.height=m.height||(m.type=="audio"?"32":"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(z,o){var u=this,p=u.editor,C,H,j,t,I,y,G,w,k,E,s,q,A,D,m,x,l,B,F;function r(i,n){var M,L,N,K,J;J=p.getParam("flash_video_player_url",u.convertUrl(u.url+"/moxieplayer.swf"));if(J){M=p.documentBaseURI;G.params.src=J;if(p.getParam("flash_video_player_absvideourl",true)){i=M.toAbsolute(i||"",true);n=M.toAbsolute(n||"",true)}N="";L=p.getParam("flash_video_player_flashvars",{url:"$url",poster:"$poster"});tinymce.each(L,function(P,O){P=P.replace(/\$url/,i||"");P=P.replace(/\$poster/,n||"");if(P.length>0){N+=(N?"&":"")+O+"="+escape(P)}});if(N.length){G.params.flashvars=N}K=p.getParam("flash_video_player_params",{allowfullscreen:true,allowscriptaccess:true});tinymce.each(K,function(P,O){G.params[O]=""+P})}}G=z.attr("data-mce-json");if(!G){return}G=g.parse(G);q=this.getType(z.attr("class"));B=z.attr("data-mce-style");if(!B){B=z.attr("style");if(B){B=p.dom.serializeStyle(p.dom.parseStyle(B,"img"))}}if(q.name==="Iframe"){x=new b("iframe",1);tinymce.each(d,function(i){var n=z.attr(i);if(i=="class"&&n){n=n.replace(/mceItem.+ ?/g,"")}if(n&&n.length>0){x.attr(i,n)}});for(I in G.params){x.attr(I,G.params[I])}x.attr({style:B,src:G.params.src});z.replace(x);return}if(this.editor.settings.media_use_script){x=new b("script",1).attr("type","text/javascript");y=new b("#text",3);y.value="write"+q.name+"("+g.serialize(tinymce.extend(G.params,{width:z.attr("width"),height:z.attr("height")}))+");";x.append(y);z.replace(x);return}if(q.name==="Video"&&G.video.sources[0]){C=new b("video",1).attr(tinymce.extend({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);for(A=0;A<k.length;A++){if(/\.mp4$/.test(k[A].src)){m=k[A].src}}if(!k[0].type){C.attr("src",k[0].src);k.splice(0,1)}for(A=0;A<k.length;A++){w=new b("source",1).attr(k[A]);w.shortEnded=true;C.append(w)}if(m){r(m,l);q=u.getType("flash")}else{G.params.src=""}}if(q.name==="Audio"&&G.video.sources[0]){F=new b("audio",1).attr(tinymce.extend({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B},G.video.attrs));if(G.video.attrs){l=G.video.attrs.poster}k=G.video.sources=c(G.video.sources);if(!k[0].type){F.attr("src",k[0].src);k.splice(0,1)}for(A=0;A<k.length;A++){w=new b("source",1).attr(k[A]);w.shortEnded=true;F.append(w)}G.params.src=""}if(q.name==="EmbeddedAudio"){j=new b("embed",1);j.shortEnded=true;j.attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B,type:z.attr("type")});for(I in G.params){j.attr(I,G.params[I])}tinymce.each(d,function(i){if(G[i]&&i!="type"){j.attr(i,G[i])}});G.params.src=""}if(G.params.src){if(/\.flv$/i.test(G.params.src)){r(G.params.src,"")}if(o&&o.force_absolute){G.params.src=p.documentBaseURI.toAbsolute(G.params.src)}H=new b("object",1).attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B});tinymce.each(d,function(i){var n=G[i];if(i=="class"&&n){n=n.replace(/mceItem.+ ?/g,"")}if(n&&i!="type"){H.attr(i,n)}});for(I in G.params){s=new b("param",1);s.shortEnded=true;y=G.params[I];if(I==="src"&&q.name==="WindowsMedia"){I="url"}s.attr({name:I,value:y});H.append(s)}if(this.editor.getParam("media_strict",true)){H.attr({data:G.params.src,type:q.mimes[0]})}else{H.attr({classid:"clsid:"+q.clsids[0],codebase:q.codebase});j=new b("embed",1);j.shortEnded=true;j.attr({id:z.attr("id"),width:z.attr("width"),height:z.attr("height"),style:B,type:q.mimes[0]});for(I in G.params){j.attr(I,G.params[I])}tinymce.each(d,function(i){if(G[i]&&i!="type"){j.attr(i,G[i])}});H.append(j)}if(G.object_html){y=new b("#text",3);y.raw=true;y.value=G.object_html;H.append(y)}if(C){C.append(H)}}if(C){if(G.video_html){y=new b("#text",3);y.raw=true;y.value=G.video_html;C.append(y)}}if(F){if(G.video_html){y=new b("#text",3);y.raw=true;y.value=G.video_html;F.append(y)}}var v=C||F||H||j;if(v){z.replace(v)}else{z.remove()}},objectToImg:function(C){var L,k,F,s,M,N,y,A,x,G,E,t,q,I,B,l,K,o,H=this.lookup,m,z,v=this.editor.settings.url_converter,n=this.editor.settings.url_converter_scope,w,r,D,j;function u(i){return new tinymce.html.Serializer({inner:true,validate:false}).serialize(i)}function J(O,i){return H[(O.attr(i)||"").toLowerCase()]}function p(O){var i=O.replace(/^.*\.([^.]+)$/,"$1");return H[i.toLowerCase()||""]}if(!C.parent){return}if(C.name==="script"){if(C.firstChild){m=a.exec(C.firstChild.value)}if(!m){return}o=m[1];K={video:{},params:g.parse(m[2])};A=K.params.width;x=K.params.height}K=K||{video:{},params:{}};M=new b("img",1);M.attr({src:this.editor.theme.url+"/img/trans.gif"});N=C.name;if(N==="video"||N=="audio"){F=C;L=C.getAll("object")[0];k=C.getAll("embed")[0];A=F.attr("width");x=F.attr("height");y=F.attr("id");K.video={attrs:{},sources:[]};z=K.video.attrs;for(N in F.attributes.map){z[N]=F.attributes.map[N]}B=C.attr("src");if(B){K.video.sources.push({src:v.call(n,B,"src",C.name)})}l=F.getAll("source");for(E=0;E<l.length;E++){B=l[E].remove();K.video.sources.push({src:v.call(n,B.attr("src"),"src","source"),type:B.attr("type"),media:B.attr("media")})}if(z.poster){z.poster=v.call(n,z.poster,"poster",C.name)}}if(C.name==="object"){L=C;k=C.getAll("embed")[0]}if(C.name==="embed"){k=C}if(C.name==="iframe"){s=C;o="Iframe"}if(L){A=A||L.attr("width");x=x||L.attr("height");G=G||L.attr("style");y=y||L.attr("id");w=w||L.attr("hspace");r=r||L.attr("vspace");D=D||L.attr("align");j=j||L.attr("bgcolor");K.name=L.attr("name");I=L.getAll("param");for(E=0;E<I.length;E++){q=I[E];N=q.remove().attr("name");if(!h[N]){K.params[N]=q.attr("value")}}K.params.src=K.params.src||L.attr("data")}if(k){A=A||k.attr("width");x=x||k.attr("height");G=G||k.attr("style");y=y||k.attr("id");w=w||k.attr("hspace");r=r||k.attr("vspace");D=D||k.attr("align");j=j||k.attr("bgcolor");for(N in k.attributes.map){if(!h[N]&&!K.params[N]){K.params[N]=k.attributes.map[N]}}}if(s){A=s.attr("width");x=s.attr("height");G=G||s.attr("style");y=s.attr("id");w=s.attr("hspace");r=s.attr("vspace");D=s.attr("align");j=s.attr("bgcolor");tinymce.each(d,function(i){M.attr(i,s.attr(i))});for(N in s.attributes.map){if(!h[N]&&!K.params[N]){K.params[N]=s.attributes.map[N]}}}if(K.params.movie){K.params.src=K.params.src||K.params.movie;delete K.params.movie}if(K.params.src){K.params.src=v.call(n,K.params.src,"src","object")}if(F){if(C.name==="video"){o=H.video.name}else{if(C.name==="audio"){o=H.audio.name}}}if(L&&!o){o=(J(L,"clsid")||J(L,"classid")||J(L,"type")||{}).name}if(k&&!o){o=(J(k,"type")||p(K.params.src)||{}).name}if(k&&o=="EmbeddedAudio"){K.params.type=k.attr("type")}C.replace(M);if(k){k.remove()}if(L){t=u(L.remove());if(t){K.object_html=t}}if(F){t=u(F.remove());if(t){K.video_html=t}}K.hspace=w;K.vspace=r;K.align=D;K.bgcolor=j;M.attr({id:y,"class":"mceItemMedia mceItem"+(o||"Flash"),style:G,width:A||(C.name=="audio"?"300":"320"),height:x||(C.name=="audio"?"32":"240"),hspace:w,vspace:r,align:D,bgcolor:j,"data-mce-json":g.serialize(K,"'")})}});tinymce.PluginManager.add("media",tinymce.plugins.MediaPlugin)})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js
new file mode 100644
index 000000000..ea79db18a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/editor_plugin_src.js
@@ -0,0 +1,890 @@
+/**
+ * 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() {
+ var rootAttributes = tinymce.explode('id,name,width,height,style,align,class,hspace,vspace,bgcolor,type'), excludedAttrs = tinymce.makeMap(rootAttributes.join(',')), Node = tinymce.html.Node,
+ mediaTypes, scriptRegExp, JSON = tinymce.util.JSON, mimeTypes;
+
+ // Media types supported by this plugin
+ mediaTypes = [
+ // Type, clsid:s, mime types, codebase
+ ["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"],
+ ["EmbeddedAudio"],
+ ["Audio"]
+ ];
+
+ function toArray(obj) {
+ var undef, out, i;
+
+ if (obj && !obj.splice) {
+ out = [];
+
+ for (i = 0; true; i++) {
+ if (obj[i])
+ out[i] = obj[i];
+ else
+ break;
+ }
+
+ return out;
+ }
+
+ return obj;
+ };
+
+ tinymce.create('tinymce.plugins.MediaPlugin', {
+ init : function(ed, url) {
+ var self = this, lookup = {}, i, y, item, name;
+
+ function isMediaImg(node) {
+ return node && node.nodeName === 'IMG' && ed.dom.hasClass(node, 'mceItemMedia');
+ };
+
+ self.editor = ed;
+ self.url = url;
+
+ // Parse media types into a lookup table
+ scriptRegExp = '';
+ for (i = 0; i < mediaTypes.length; i++) {
+ name = mediaTypes[i][0];
+
+ item = {
+ name : name,
+ clsids : tinymce.explode(mediaTypes[i][1] || ''),
+ mimes : tinymce.explode(mediaTypes[i][2] || ''),
+ codebase : mediaTypes[i][3]
+ };
+
+ for (y = 0; y < item.clsids.length; y++)
+ lookup['clsid:' + item.clsids[y]] = item;
+
+ for (y = 0; y < item.mimes.length; y++)
+ lookup[item.mimes[y]] = item;
+
+ lookup['mceItem' + name] = item;
+ lookup[name.toLowerCase()] = item;
+
+ scriptRegExp += (scriptRegExp ? '|' : '') + name;
+ }
+
+ // Handle the media_types setting
+ tinymce.each(ed.getParam("media_types",
+ "video=mp4,m4v,ogv,webm;" +
+ "silverlight=xap;" +
+ "flash=swf,flv;" +
+ "shockwave=dcr;" +
+ "quicktime=mov,qt,mpg,mpeg;" +
+ "shockwave=dcr;" +
+ "windowsmedia=avi,wmv,wm,asf,asx,wmx,wvx;" +
+ "realmedia=rm,ra,ram;" +
+ "java=jar;" +
+ "audio=mp3,ogg"
+ ).split(';'), function(item) {
+ var i, extensions, type;
+
+ item = item.split(/=/);
+ extensions = tinymce.explode(item[1].toLowerCase());
+ for (i = 0; i < extensions.length; i++) {
+ type = lookup[item[0].toLowerCase()];
+
+ if (type)
+ lookup[extensions[i]] = type;
+ }
+ });
+
+ scriptRegExp = new RegExp('write(' + scriptRegExp + ')\\(([^)]+)\\)');
+ self.lookup = lookup;
+
+ ed.onPreInit.add(function() {
+ // Allow video elements
+ ed.schema.addValidElements('object[id|style|width|height|classid|codebase|*],param[name|value],embed[id|style|width|height|type|src|*],video[*],audio[*],source[*]');
+
+ // Convert video elements to image placeholder
+ ed.parser.addNodeFilter('object,embed,video,audio,script,iframe', function(nodes) {
+ var i = nodes.length;
+
+ while (i--)
+ self.objectToImg(nodes[i]);
+ });
+
+ // Convert image placeholders to video elements
+ ed.serializer.addNodeFilter('img', function(nodes, name, args) {
+ var i = nodes.length, node;
+
+ while (i--) {
+ node = nodes[i];
+ if ((node.attr('class') || '').indexOf('mceItemMedia') !== -1)
+ self.imgToObject(node, args);
+ }
+ });
+ });
+
+ ed.onInit.add(function() {
+ // Display "media" instead of "img" in element path
+ if (ed.theme && ed.theme.onResolveName) {
+ ed.theme.onResolveName.add(function(theme, path_object) {
+ if (path_object.name === 'img' && ed.dom.hasClass(path_object.node, 'mceItemMedia'))
+ path_object.name = 'media';
+ });
+ }
+
+ // Add contect menu if it's loaded
+ if (ed && ed.plugins.contextmenu) {
+ ed.plugins.contextmenu.onContextMenu.add(function(plugin, menu, element) {
+ if (element.nodeName === 'IMG' && element.className.indexOf('mceItemMedia') !== -1)
+ menu.add({title : 'media.edit', icon : 'media', cmd : 'mceMedia'});
+ });
+ }
+ });
+
+ // Register commands
+ ed.addCommand('mceMedia', function() {
+ var data, img;
+
+ img = ed.selection.getNode();
+ if (isMediaImg(img)) {
+ data = ed.dom.getAttrib(img, 'data-mce-json');
+ if (data) {
+ data = JSON.parse(data);
+
+ // Add some extra properties to the data object
+ tinymce.each(rootAttributes, function(name) {
+ var value = ed.dom.getAttrib(img, name);
+
+ if (value)
+ data[name] = value;
+ });
+
+ data.type = self.getType(img.className).name.toLowerCase();
+ }
+ }
+
+ if (!data) {
+ data = {
+ type : 'flash',
+ video: {sources:[]},
+ params: {}
+ };
+ }
+
+ ed.windowManager.open({
+ file : url + '/media.htm',
+ width : 430 + parseInt(ed.getLang('media.delta_width', 0)),
+ height : 500 + parseInt(ed.getLang('media.delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url,
+ data : data
+ });
+ });
+
+ // Register buttons
+ ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'});
+
+ // Update media selection status
+ ed.onNodeChange.add(function(ed, cm, node) {
+ cm.setActive('media', isMediaImg(node));
+ });
+ },
+
+ convertUrl : function(url, force_absolute) {
+ var self = this, editor = self.editor, settings = editor.settings,
+ urlConverter = settings.url_converter,
+ urlConverterScope = settings.url_converter_scope || self;
+
+ if (!url)
+ return url;
+
+ if (force_absolute)
+ return editor.documentBaseURI.toAbsolute(url);
+
+ return urlConverter.call(urlConverterScope, url, '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
+ };
+ },
+
+ /**
+ * Converts the JSON data object to an img node.
+ */
+ dataToImg : function(data, force_absolute) {
+ var self = this, editor = self.editor, baseUri = editor.documentBaseURI, sources, attrs, img, i;
+
+ data.params.src = self.convertUrl(data.params.src, force_absolute);
+
+ attrs = data.video.attrs;
+ if (attrs)
+ attrs.src = self.convertUrl(attrs.src, force_absolute);
+
+ if (attrs)
+ attrs.poster = self.convertUrl(attrs.poster, force_absolute);
+
+ sources = toArray(data.video.sources);
+ if (sources) {
+ for (i = 0; i < sources.length; i++)
+ sources[i].src = self.convertUrl(sources[i].src, force_absolute);
+ }
+
+ img = self.editor.dom.create('img', {
+ id : data.id,
+ style : data.style,
+ align : data.align,
+ hspace : data.hspace,
+ vspace : data.vspace,
+ src : self.editor.theme.url + '/img/trans.gif',
+ 'class' : 'mceItemMedia mceItem' + self.getType(data.type).name,
+ 'data-mce-json' : JSON.serialize(data, "'")
+ });
+
+ img.width = data.width || (data.type == 'audio' ? "300" : "320");
+ img.height = data.height || (data.type == 'audio' ? "32" : "240");
+
+ return img;
+ },
+
+ /**
+ * Converts the JSON data object to a HTML string.
+ */
+ dataToHtml : function(data, force_absolute) {
+ return this.editor.serializer.serialize(this.dataToImg(data, force_absolute), {forced_root_block : '', force_absolute : force_absolute});
+ },
+
+ /**
+ * Converts the JSON data object to a HTML string.
+ */
+ htmlToData : function(html) {
+ var fragment, img, data;
+
+ data = {
+ type : 'flash',
+ video: {sources:[]},
+ params: {}
+ };
+
+ fragment = this.editor.parser.parse(html);
+ img = fragment.getAll('img')[0];
+
+ if (img) {
+ data = JSON.parse(img.attr('data-mce-json'));
+ data.type = this.getType(img.attr('class')).name.toLowerCase();
+
+ // Add some extra properties to the data object
+ tinymce.each(rootAttributes, function(name) {
+ var value = img.attr(name);
+
+ if (value)
+ data[name] = value;
+ });
+ }
+
+ return data;
+ },
+
+ /**
+ * Get type item by extension, class, clsid or mime type.
+ *
+ * @method getType
+ * @param {String} value Value to get type item by.
+ * @return {Object} Type item object or undefined.
+ */
+ getType : function(value) {
+ var i, values, typeItem;
+
+ // Find type by checking the classes
+ values = tinymce.explode(value, ' ');
+ for (i = 0; i < values.length; i++) {
+ typeItem = this.lookup[values[i]];
+
+ if (typeItem)
+ return typeItem;
+ }
+ },
+
+ /**
+ * Converts a tinymce.html.Node image element to video/object/embed.
+ */
+ imgToObject : function(node, args) {
+ var self = this, editor = self.editor, video, object, embed, iframe, name, value, data,
+ source, sources, params, param, typeItem, i, item, mp4Source, replacement,
+ posterSrc, style, audio;
+
+ // Adds the flash player
+ function addPlayer(video_src, poster_src) {
+ var baseUri, flashVars, flashVarsOutput, params, flashPlayer;
+
+ flashPlayer = editor.getParam('flash_video_player_url', self.convertUrl(self.url + '/moxieplayer.swf'));
+ if (flashPlayer) {
+ baseUri = editor.documentBaseURI;
+ data.params.src = flashPlayer;
+
+ // Convert the movie url to absolute urls
+ if (editor.getParam('flash_video_player_absvideourl', true)) {
+ video_src = baseUri.toAbsolute(video_src || '', true);
+ poster_src = baseUri.toAbsolute(poster_src || '', true);
+ }
+
+ // Generate flash vars
+ flashVarsOutput = '';
+ flashVars = editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'});
+ tinymce.each(flashVars, function(value, name) {
+ // Replace $url and $poster variables in flashvars value
+ value = value.replace(/\$url/, video_src || '');
+ value = value.replace(/\$poster/, poster_src || '');
+
+ if (value.length > 0)
+ flashVarsOutput += (flashVarsOutput ? '&' : '') + name + '=' + escape(value);
+ });
+
+ if (flashVarsOutput.length)
+ data.params.flashvars = flashVarsOutput;
+
+ params = editor.getParam('flash_video_player_params', {
+ allowfullscreen: true,
+ allowscriptaccess: true
+ });
+
+ tinymce.each(params, function(value, name) {
+ data.params[name] = "" + value;
+ });
+ }
+ };
+
+ data = node.attr('data-mce-json');
+ if (!data)
+ return;
+
+ data = JSON.parse(data);
+ typeItem = this.getType(node.attr('class'));
+
+ style = node.attr('data-mce-style')
+ if (!style) {
+ style = node.attr('style');
+
+ if (style)
+ style = editor.dom.serializeStyle(editor.dom.parseStyle(style, 'img'));
+ }
+
+ // Handle iframe
+ if (typeItem.name === 'Iframe') {
+ replacement = new Node('iframe', 1);
+
+ tinymce.each(rootAttributes, function(name) {
+ var value = node.attr(name);
+
+ if (name == 'class' && value)
+ value = value.replace(/mceItem.+ ?/g, '');
+
+ if (value && value.length > 0)
+ replacement.attr(name, value);
+ });
+
+ for (name in data.params)
+ replacement.attr(name, data.params[name]);
+
+ replacement.attr({
+ style: style,
+ src: data.params.src
+ });
+
+ node.replace(replacement);
+
+ return;
+ }
+
+ // Handle scripts
+ if (this.editor.settings.media_use_script) {
+ replacement = new Node('script', 1).attr('type', 'text/javascript');
+
+ value = new Node('#text', 3);
+ value.value = 'write' + typeItem.name + '(' + JSON.serialize(tinymce.extend(data.params, {
+ width: node.attr('width'),
+ height: node.attr('height')
+ })) + ');';
+
+ replacement.append(value);
+ node.replace(replacement);
+
+ return;
+ }
+
+ // Add HTML5 video element
+ if (typeItem.name === 'Video' && data.video.sources[0]) {
+ // Create new object element
+ video = new Node('video', 1).attr(tinymce.extend({
+ id : node.attr('id'),
+ width: node.attr('width'),
+ height: node.attr('height'),
+ style : style
+ }, data.video.attrs));
+
+ // Get poster source and use that for flash fallback
+ if (data.video.attrs)
+ posterSrc = data.video.attrs.poster;
+
+ sources = data.video.sources = toArray(data.video.sources);
+ for (i = 0; i < sources.length; i++) {
+ if (/\.mp4$/.test(sources[i].src))
+ mp4Source = sources[i].src;
+ }
+
+ if (!sources[0].type) {
+ video.attr('src', sources[0].src);
+ sources.splice(0, 1);
+ }
+
+ for (i = 0; i < sources.length; i++) {
+ source = new Node('source', 1).attr(sources[i]);
+ source.shortEnded = true;
+ video.append(source);
+ }
+
+ // Create flash fallback for video if we have a mp4 source
+ if (mp4Source) {
+ addPlayer(mp4Source, posterSrc);
+ typeItem = self.getType('flash');
+ } else
+ data.params.src = '';
+ }
+
+ // Add HTML5 audio element
+ if (typeItem.name === 'Audio' && data.video.sources[0]) {
+ // Create new object element
+ audio = new Node('audio', 1).attr(tinymce.extend({
+ id : node.attr('id'),
+ width: node.attr('width'),
+ height: node.attr('height'),
+ style : style
+ }, data.video.attrs));
+
+ // Get poster source and use that for flash fallback
+ if (data.video.attrs)
+ posterSrc = data.video.attrs.poster;
+
+ sources = data.video.sources = toArray(data.video.sources);
+ if (!sources[0].type) {
+ audio.attr('src', sources[0].src);
+ sources.splice(0, 1);
+ }
+
+ for (i = 0; i < sources.length; i++) {
+ source = new Node('source', 1).attr(sources[i]);
+ source.shortEnded = true;
+ audio.append(source);
+ }
+
+ data.params.src = '';
+ }
+
+ if (typeItem.name === 'EmbeddedAudio') {
+ embed = new Node('embed', 1);
+ embed.shortEnded = true;
+ embed.attr({
+ id: node.attr('id'),
+ width: node.attr('width'),
+ height: node.attr('height'),
+ style : style,
+ type: node.attr('type')
+ });
+
+ for (name in data.params)
+ embed.attr(name, data.params[name]);
+
+ tinymce.each(rootAttributes, function(name) {
+ if (data[name] && name != 'type')
+ embed.attr(name, data[name]);
+ });
+
+ data.params.src = '';
+ }
+
+ // Do we have a params src then we can generate object
+ if (data.params.src) {
+ // Is flv movie add player for it
+ if (/\.flv$/i.test(data.params.src))
+ addPlayer(data.params.src, '');
+
+ if (args && args.force_absolute)
+ data.params.src = editor.documentBaseURI.toAbsolute(data.params.src);
+
+ // Create new object element
+ object = new Node('object', 1).attr({
+ id : node.attr('id'),
+ width: node.attr('width'),
+ height: node.attr('height'),
+ style : style
+ });
+
+ tinymce.each(rootAttributes, function(name) {
+ var value = data[name];
+
+ if (name == 'class' && value)
+ value = value.replace(/mceItem.+ ?/g, '');
+
+ if (value && name != 'type')
+ object.attr(name, value);
+ });
+
+ // Add params
+ for (name in data.params) {
+ param = new Node('param', 1);
+ param.shortEnded = true;
+ value = data.params[name];
+
+ // Windows media needs to use url instead of src for the media URL
+ if (name === 'src' && typeItem.name === 'WindowsMedia')
+ name = 'url';
+
+ param.attr({name: name, value: value});
+ object.append(param);
+ }
+
+ // Setup add type and classid if strict is disabled
+ if (this.editor.getParam('media_strict', true)) {
+ object.attr({
+ data: data.params.src,
+ type: typeItem.mimes[0]
+ });
+ } else {
+ object.attr({
+ classid: "clsid:" + typeItem.clsids[0],
+ codebase: typeItem.codebase
+ });
+
+ embed = new Node('embed', 1);
+ embed.shortEnded = true;
+ embed.attr({
+ id: node.attr('id'),
+ width: node.attr('width'),
+ height: node.attr('height'),
+ style : style,
+ type: typeItem.mimes[0]
+ });
+
+ for (name in data.params)
+ embed.attr(name, data.params[name]);
+
+ tinymce.each(rootAttributes, function(name) {
+ if (data[name] && name != 'type')
+ embed.attr(name, data[name]);
+ });
+
+ object.append(embed);
+ }
+
+ // Insert raw HTML
+ if (data.object_html) {
+ value = new Node('#text', 3);
+ value.raw = true;
+ value.value = data.object_html;
+ object.append(value);
+ }
+
+ // Append object to video element if it exists
+ if (video)
+ video.append(object);
+ }
+
+ if (video) {
+ // Insert raw HTML
+ if (data.video_html) {
+ value = new Node('#text', 3);
+ value.raw = true;
+ value.value = data.video_html;
+ video.append(value);
+ }
+ }
+
+ if (audio) {
+ // Insert raw HTML
+ if (data.video_html) {
+ value = new Node('#text', 3);
+ value.raw = true;
+ value.value = data.video_html;
+ audio.append(value);
+ }
+ }
+
+ var n = video || audio || object || embed;
+ if (n)
+ node.replace(n);
+ else
+ node.remove();
+ },
+
+ /**
+ * Converts a tinymce.html.Node video/object/embed to an img element.
+ *
+ * The video/object/embed will be converted into an image placeholder with a JSON data attribute like this:
+ * <img class="mceItemMedia mceItemFlash" width="100" height="100" data-mce-json="{..}" />
+ *
+ * The JSON structure will be like this:
+ * {'params':{'flashvars':'something','quality':'high','src':'someurl'}, 'video':{'sources':[{src: 'someurl', type: 'video/mp4'}]}}
+ */
+ objectToImg : function(node) {
+ var object, embed, video, iframe, img, name, id, width, height, style, i, html,
+ param, params, source, sources, data, type, lookup = this.lookup,
+ matches, attrs, urlConverter = this.editor.settings.url_converter,
+ urlConverterScope = this.editor.settings.url_converter_scope,
+ hspace, vspace, align, bgcolor;
+
+ function getInnerHTML(node) {
+ return new tinymce.html.Serializer({
+ inner: true,
+ validate: false
+ }).serialize(node);
+ };
+
+ function lookupAttribute(o, attr) {
+ return lookup[(o.attr(attr) || '').toLowerCase()];
+ }
+
+ function lookupExtension(src) {
+ var ext = src.replace(/^.*\.([^.]+)$/, '$1');
+ return lookup[ext.toLowerCase() || ''];
+ }
+
+ // If node isn't in document
+ if (!node.parent)
+ return;
+
+ // Handle media scripts
+ if (node.name === 'script') {
+ if (node.firstChild)
+ matches = scriptRegExp.exec(node.firstChild.value);
+
+ if (!matches)
+ return;
+
+ type = matches[1];
+ data = {video : {}, params : JSON.parse(matches[2])};
+ width = data.params.width;
+ height = data.params.height;
+ }
+
+ // Setup data objects
+ data = data || {
+ video : {},
+ params : {}
+ };
+
+ // Setup new image object
+ img = new Node('img', 1);
+ img.attr({
+ src : this.editor.theme.url + '/img/trans.gif'
+ });
+
+ // Video element
+ name = node.name;
+ if (name === 'video' || name == 'audio') {
+ video = node;
+ object = node.getAll('object')[0];
+ embed = node.getAll('embed')[0];
+ width = video.attr('width');
+ height = video.attr('height');
+ id = video.attr('id');
+ data.video = {attrs : {}, sources : []};
+
+ // Get all video attributes
+ attrs = data.video.attrs;
+ for (name in video.attributes.map)
+ attrs[name] = video.attributes.map[name];
+
+ source = node.attr('src');
+ if (source)
+ data.video.sources.push({src : urlConverter.call(urlConverterScope, source, 'src', node.name)});
+
+ // Get all sources
+ sources = video.getAll("source");
+ for (i = 0; i < sources.length; i++) {
+ source = sources[i].remove();
+
+ data.video.sources.push({
+ src: urlConverter.call(urlConverterScope, source.attr('src'), 'src', 'source'),
+ type: source.attr('type'),
+ media: source.attr('media')
+ });
+ }
+
+ // Convert the poster URL
+ if (attrs.poster)
+ attrs.poster = urlConverter.call(urlConverterScope, attrs.poster, 'poster', node.name);
+ }
+
+ // Object element
+ if (node.name === 'object') {
+ object = node;
+ embed = node.getAll('embed')[0];
+ }
+
+ // Embed element
+ if (node.name === 'embed')
+ embed = node;
+
+ // Iframe element
+ if (node.name === 'iframe') {
+ iframe = node;
+ type = 'Iframe';
+ }
+
+ if (object) {
+ // Get width/height
+ width = width || object.attr('width');
+ height = height || object.attr('height');
+ style = style || object.attr('style');
+ id = id || object.attr('id');
+ hspace = hspace || object.attr('hspace');
+ vspace = vspace || object.attr('vspace');
+ align = align || object.attr('align');
+ bgcolor = bgcolor || object.attr('bgcolor');
+ data.name = object.attr('name');
+
+ // Get all object params
+ params = object.getAll("param");
+ for (i = 0; i < params.length; i++) {
+ param = params[i];
+ name = param.remove().attr('name');
+
+ if (!excludedAttrs[name])
+ data.params[name] = param.attr('value');
+ }
+
+ data.params.src = data.params.src || object.attr('data');
+ }
+
+ if (embed) {
+ // Get width/height
+ width = width || embed.attr('width');
+ height = height || embed.attr('height');
+ style = style || embed.attr('style');
+ id = id || embed.attr('id');
+ hspace = hspace || embed.attr('hspace');
+ vspace = vspace || embed.attr('vspace');
+ align = align || embed.attr('align');
+ bgcolor = bgcolor || embed.attr('bgcolor');
+
+ // Get all embed attributes
+ for (name in embed.attributes.map) {
+ if (!excludedAttrs[name] && !data.params[name])
+ data.params[name] = embed.attributes.map[name];
+ }
+ }
+
+ if (iframe) {
+ // Get width/height
+ width = iframe.attr('width');
+ height = iframe.attr('height');
+ style = style || iframe.attr('style');
+ id = iframe.attr('id');
+ hspace = iframe.attr('hspace');
+ vspace = iframe.attr('vspace');
+ align = iframe.attr('align');
+ bgcolor = iframe.attr('bgcolor');
+
+ tinymce.each(rootAttributes, function(name) {
+ img.attr(name, iframe.attr(name));
+ });
+
+ // Get all iframe attributes
+ for (name in iframe.attributes.map) {
+ if (!excludedAttrs[name] && !data.params[name])
+ data.params[name] = iframe.attributes.map[name];
+ }
+ }
+
+ // Use src not movie
+ if (data.params.movie) {
+ data.params.src = data.params.src || data.params.movie;
+ delete data.params.movie;
+ }
+
+ // Convert the URL to relative/absolute depending on configuration
+ if (data.params.src)
+ data.params.src = urlConverter.call(urlConverterScope, data.params.src, 'src', 'object');
+
+ if (video) {
+ if (node.name === 'video')
+ type = lookup.video.name;
+ else if (node.name === 'audio')
+ type = lookup.audio.name;
+ }
+
+ if (object && !type)
+ type = (lookupAttribute(object, 'clsid') || lookupAttribute(object, 'classid') || lookupAttribute(object, 'type') || {}).name;
+
+ if (embed && !type)
+ type = (lookupAttribute(embed, 'type') || lookupExtension(data.params.src) || {}).name;
+
+ // for embedded audio we preserve the original specified type
+ if (embed && type == 'EmbeddedAudio') {
+ data.params.type = embed.attr('type');
+ }
+
+ // Replace the video/object/embed element with a placeholder image containing the data
+ node.replace(img);
+
+ // Remove embed
+ if (embed)
+ embed.remove();
+
+ // Serialize the inner HTML of the object element
+ if (object) {
+ html = getInnerHTML(object.remove());
+
+ if (html)
+ data.object_html = html;
+ }
+
+ // Serialize the inner HTML of the video element
+ if (video) {
+ html = getInnerHTML(video.remove());
+
+ if (html)
+ data.video_html = html;
+ }
+
+ data.hspace = hspace;
+ data.vspace = vspace;
+ data.align = align;
+ data.bgcolor = bgcolor;
+
+ // Set width/height of placeholder
+ img.attr({
+ id : id,
+ 'class' : 'mceItemMedia mceItem' + (type || 'Flash'),
+ style : style,
+ width : width || (node.name == 'audio' ? "300" : "320"),
+ height : height || (node.name == 'audio' ? "32" : "240"),
+ hspace : hspace,
+ vspace : vspace,
+ align : align,
+ bgcolor : bgcolor,
+ "data-mce-json" : JSON.serialize(data, "'")
+ });
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin);
+})();
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js
new file mode 100644
index 000000000..f8dc81052
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/embed.js
@@ -0,0 +1,73 @@
+/**
+ * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.
+ */
+
+function writeFlash(p) {
+ writeEmbed(
+ 'D27CDB6E-AE6D-11cf-96B8-444553540000',
+ 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
+ 'application/x-shockwave-flash',
+ p
+ );
+}
+
+function writeShockWave(p) {
+ writeEmbed(
+ '166B1BCA-3F9C-11CF-8075-444553540000',
+ 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',
+ 'application/x-director',
+ p
+ );
+}
+
+function writeQuickTime(p) {
+ writeEmbed(
+ '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
+ 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',
+ 'video/quicktime',
+ p
+ );
+}
+
+function writeRealMedia(p) {
+ writeEmbed(
+ 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',
+ 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
+ 'audio/x-pn-realaudio-plugin',
+ p
+ );
+}
+
+function writeWindowsMedia(p) {
+ p.url = p.src;
+ writeEmbed(
+ '6BF52A52-394A-11D3-B153-00C04F79FAA6',
+ 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
+ 'application/x-mplayer2',
+ p
+ );
+}
+
+function writeEmbed(cls, cb, mt, p) {
+ var h = '', n;
+
+ h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
+ h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';
+ h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';
+ h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';
+ h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';
+ h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';
+ h += '>';
+
+ for (n in p)
+ h += '<param name="' + n + '" value="' + p[n] + '">';
+
+ h += '<embed type="' + mt + '"';
+
+ for (n in p)
+ h += n + '="' + p[n] + '" ';
+
+ h += '></embed></object>';
+
+ document.write(h);
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/media.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/media.js
new file mode 100644
index 000000000..45d88fe1b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/js/media.js
@@ -0,0 +1,464 @@
+(function() {
+ var url;
+
+ if (url = tinyMCEPopup.getParam("media_external_list_url"))
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
+
+ function get(id) {
+ return document.getElementById(id);
+ }
+
+ function clone(obj) {
+ var i, len, copy, attr;
+
+ if (null == obj || "object" != typeof obj)
+ return obj;
+
+ // Handle Array
+ if ('length' in obj) {
+ copy = [];
+
+ for (i = 0, len = obj.length; i < len; ++i) {
+ copy[i] = clone(obj[i]);
+ }
+
+ return copy;
+ }
+
+ // Handle Object
+ copy = {};
+ for (attr in obj) {
+ if (obj.hasOwnProperty(attr))
+ copy[attr] = clone(obj[attr]);
+ }
+
+ return copy;
+ }
+
+ function getVal(id) {
+ var elm = get(id);
+
+ if (elm.nodeName == "SELECT")
+ return elm.options[elm.selectedIndex].value;
+
+ if (elm.type == "checkbox")
+ return elm.checked;
+
+ return elm.value;
+ }
+
+ function setVal(id, value, name) {
+ if (typeof(value) != 'undefined') {
+ var elm = get(id);
+
+ if (elm.nodeName == "SELECT")
+ selectByValue(document.forms[0], id, value);
+ else if (elm.type == "checkbox") {
+ if (typeof(value) == 'string') {
+ value = value.toLowerCase();
+ value = (!name && value === 'true') || (name && value === name.toLowerCase());
+ }
+ elm.checked = !!value;
+ } else
+ elm.value = value;
+ }
+ }
+
+ window.Media = {
+ init : function() {
+ var html, editor, self = this;
+
+ self.editor = editor = tinyMCEPopup.editor;
+
+ // Setup file browsers and color pickers
+ get('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');
+ get('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','quicktime_qtsrc','media','media');
+ get('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
+ get('video_altsource1_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource1','video_altsource1','media','media');
+ get('video_altsource2_filebrowser').innerHTML = getBrowserHTML('video_filebrowser_altsource2','video_altsource2','media','media');
+ get('audio_altsource1_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource1','audio_altsource1','media','media');
+ get('audio_altsource2_filebrowser').innerHTML = getBrowserHTML('audio_filebrowser_altsource2','audio_altsource2','media','media');
+ get('video_poster_filebrowser').innerHTML = getBrowserHTML('filebrowser_poster','video_poster','media','image');
+
+ html = self.getMediaListHTML('medialist', 'src', 'media', 'media');
+ if (html == "")
+ get("linklistrow").style.display = 'none';
+ else
+ get("linklistcontainer").innerHTML = html;
+
+ if (isVisible('filebrowser'))
+ get('src').style.width = '230px';
+
+ if (isVisible('video_filebrowser_altsource1'))
+ get('video_altsource1').style.width = '220px';
+
+ if (isVisible('video_filebrowser_altsource2'))
+ get('video_altsource2').style.width = '220px';
+
+ if (isVisible('audio_filebrowser_altsource1'))
+ get('audio_altsource1').style.width = '220px';
+
+ if (isVisible('audio_filebrowser_altsource2'))
+ get('audio_altsource2').style.width = '220px';
+
+ if (isVisible('filebrowser_poster'))
+ get('video_poster').style.width = '220px';
+
+ editor.dom.setOuterHTML(get('media_type'), self.getMediaTypeHTML(editor));
+
+ self.setDefaultDialogSettings(editor);
+ self.data = clone(tinyMCEPopup.getWindowArg('data'));
+ self.dataToForm();
+ self.preview();
+
+ updateColor('bgcolor_pick', 'bgcolor');
+ },
+
+ insert : function() {
+ var editor = tinyMCEPopup.editor;
+
+ this.formToData();
+ editor.execCommand('mceRepaint');
+ tinyMCEPopup.restoreSelection();
+ editor.selection.setNode(editor.plugins.media.dataToImg(this.data));
+ tinyMCEPopup.close();
+ },
+
+ preview : function() {
+ get('prev').innerHTML = this.editor.plugins.media.dataToHtml(this.data, true);
+ },
+
+ moveStates : function(to_form, field) {
+ var data = this.data, editor = this.editor,
+ mediaPlugin = editor.plugins.media, ext, src, typeInfo, defaultStates, src;
+
+ defaultStates = {
+ // QuickTime
+ quicktime_autoplay : true,
+ quicktime_controller : true,
+
+ // Flash
+ flash_play : true,
+ flash_loop : true,
+ flash_menu : true,
+
+ // WindowsMedia
+ windowsmedia_autostart : true,
+ windowsmedia_enablecontextmenu : true,
+ windowsmedia_invokeurls : true,
+
+ // RealMedia
+ realmedia_autogotourl : true,
+ realmedia_imagestatus : true
+ };
+
+ function parseQueryParams(str) {
+ var out = {};
+
+ if (str) {
+ tinymce.each(str.split('&'), function(item) {
+ var parts = item.split('=');
+
+ out[unescape(parts[0])] = unescape(parts[1]);
+ });
+ }
+
+ return out;
+ };
+
+ function setOptions(type, names) {
+ var i, name, formItemName, value, list;
+
+ if (type == data.type || type == 'global') {
+ names = tinymce.explode(names);
+ for (i = 0; i < names.length; i++) {
+ name = names[i];
+ formItemName = type == 'global' ? name : type + '_' + name;
+
+ if (type == 'global')
+ list = data;
+ else if (type == 'video' || type == 'audio') {
+ list = data.video.attrs;
+
+ if (!list && !to_form)
+ data.video.attrs = list = {};
+ } else
+ list = data.params;
+
+ if (list) {
+ if (to_form) {
+ setVal(formItemName, list[name], type == 'video' || type == 'audio' ? name : '');
+ } else {
+ delete list[name];
+
+ value = getVal(formItemName);
+ if ((type == 'video' || type == 'audio') && value === true)
+ value = name;
+
+ if (defaultStates[formItemName]) {
+ if (value !== defaultStates[formItemName]) {
+ value = "" + value;
+ list[name] = value;
+ }
+ } else if (value) {
+ value = "" + value;
+ list[name] = value;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if (!to_form) {
+ data.type = get('media_type').options[get('media_type').selectedIndex].value;
+ data.width = getVal('width');
+ data.height = getVal('height');
+
+ // Switch type based on extension
+ src = getVal('src');
+ if (field == 'src') {
+ ext = src.replace(/^.*\.([^.]+)$/, '$1');
+ if (typeInfo = mediaPlugin.getType(ext))
+ data.type = typeInfo.name.toLowerCase();
+
+ setVal('media_type', data.type);
+ }
+
+ if (data.type == "video" || data.type == "audio") {
+ if (!data.video.sources)
+ data.video.sources = [];
+
+ data.video.sources[0] = {src: getVal('src')};
+ }
+ }
+
+ // Hide all fieldsets and show the one active
+ get('video_options').style.display = 'none';
+ get('audio_options').style.display = 'none';
+ get('flash_options').style.display = 'none';
+ get('quicktime_options').style.display = 'none';
+ get('shockwave_options').style.display = 'none';
+ get('windowsmedia_options').style.display = 'none';
+ get('realmedia_options').style.display = 'none';
+ get('embeddedaudio_options').style.display = 'none';
+
+ if (get(data.type + '_options'))
+ get(data.type + '_options').style.display = 'block';
+
+ setVal('media_type', data.type);
+
+ setOptions('flash', 'play,loop,menu,swliveconnect,quality,scale,salign,wmode,base,flashvars');
+ setOptions('quicktime', 'loop,autoplay,cache,controller,correction,enablejavascript,kioskmode,autohref,playeveryframe,targetcache,scale,starttime,endtime,target,qtsrcchokespeed,volume,qtsrc');
+ setOptions('shockwave', 'sound,progress,autostart,swliveconnect,swvolume,swstretchstyle,swstretchhalign,swstretchvalign');
+ setOptions('windowsmedia', 'autostart,enabled,enablecontextmenu,fullscreen,invokeurls,mute,stretchtofit,windowlessvideo,balance,baseurl,captioningid,currentmarker,currentposition,defaultframe,playcount,rate,uimode,volume');
+ setOptions('realmedia', 'autostart,loop,autogotourl,center,imagestatus,maintainaspect,nojava,prefetch,shuffle,console,controls,numloop,scriptcallbacks');
+ setOptions('video', 'poster,autoplay,loop,muted,preload,controls');
+ setOptions('audio', 'autoplay,loop,preload,controls');
+ setOptions('embeddedaudio', 'autoplay,loop,controls');
+ setOptions('global', 'id,name,vspace,hspace,bgcolor,align,width,height');
+
+ if (to_form) {
+ if (data.type == 'video') {
+ if (data.video.sources[0])
+ setVal('src', data.video.sources[0].src);
+
+ src = data.video.sources[1];
+ if (src)
+ setVal('video_altsource1', src.src);
+
+ src = data.video.sources[2];
+ if (src)
+ setVal('video_altsource2', src.src);
+ } else if (data.type == 'audio') {
+ if (data.video.sources[0])
+ setVal('src', data.video.sources[0].src);
+
+ src = data.video.sources[1];
+ if (src)
+ setVal('audio_altsource1', src.src);
+
+ src = data.video.sources[2];
+ if (src)
+ setVal('audio_altsource2', src.src);
+ } else {
+ // Check flash vars
+ if (data.type == 'flash') {
+ tinymce.each(editor.getParam('flash_video_player_flashvars', {url : '$url', poster : '$poster'}), function(value, name) {
+ if (value == '$url')
+ data.params.src = parseQueryParams(data.params.flashvars)[name] || data.params.src || '';
+ });
+ }
+
+ setVal('src', data.params.src);
+ }
+ } else {
+ src = getVal("src");
+
+ // YouTube *NEW*
+ if (src.match(/youtu.be\/[a-z1-9.-_]+/)) {
+ data.width = 425;
+ data.height = 350;
+ data.params.frameborder = '0';
+ data.type = 'iframe';
+ src = 'http://www.youtube.com/embed/' + src.match(/youtu.be\/([a-z1-9.-_]+)/)[1];
+ setVal('src', src);
+ setVal('media_type', data.type);
+ }
+
+ // YouTube
+ if (src.match(/youtube.com(.+)v=([^&]+)/)) {
+ data.width = 425;
+ data.height = 350;
+ data.params.frameborder = '0';
+ data.type = 'iframe';
+ src = 'http://www.youtube.com/embed/' + src.match(/v=([^&]+)/)[1];
+ setVal('src', src);
+ setVal('media_type', data.type);
+ }
+
+ // Google video
+ if (src.match(/video.google.com(.+)docid=([^&]+)/)) {
+ data.width = 425;
+ data.height = 326;
+ data.type = 'flash';
+ src = 'http://video.google.com/googleplayer.swf?docId=' + src.match(/docid=([^&]+)/)[1] + '&hl=en';
+ setVal('src', src);
+ setVal('media_type', data.type);
+ }
+
+ if (data.type == 'video') {
+ if (!data.video.sources)
+ data.video.sources = [];
+
+ data.video.sources[0] = {src : src};
+
+ src = getVal("video_altsource1");
+ if (src)
+ data.video.sources[1] = {src : src};
+
+ src = getVal("video_altsource2");
+ if (src)
+ data.video.sources[2] = {src : src};
+ } else if (data.type == 'audio') {
+ if (!data.video.sources)
+ data.video.sources = [];
+
+ data.video.sources[0] = {src : src};
+
+ src = getVal("audio_altsource1");
+ if (src)
+ data.video.sources[1] = {src : src};
+
+ src = getVal("audio_altsource2");
+ if (src)
+ data.video.sources[2] = {src : src};
+ } else
+ data.params.src = src;
+
+ // Set default size
+ setVal('width', data.width || (data.type == 'audio' ? 300 : 320));
+ setVal('height', data.height || (data.type == 'audio' ? 32 : 240));
+ }
+ },
+
+ dataToForm : function() {
+ this.moveStates(true);
+ },
+
+ formToData : function(field) {
+ if (field == "width" || field == "height")
+ this.changeSize(field);
+
+ if (field == 'source') {
+ this.moveStates(false, field);
+ setVal('source', this.editor.plugins.media.dataToHtml(this.data));
+ this.panel = 'source';
+ } else {
+ if (this.panel == 'source') {
+ this.data = clone(this.editor.plugins.media.htmlToData(getVal('source')));
+ this.dataToForm();
+ this.panel = '';
+ }
+
+ this.moveStates(false, field);
+ this.preview();
+ }
+ },
+
+ beforeResize : function() {
+ this.width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10);
+ this.height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10);
+ },
+
+ changeSize : function(type) {
+ var width, height, scale, size;
+
+ if (get('constrain').checked) {
+ width = parseInt(getVal('width') || (this.data.type == 'audio' ? "300" : "320"), 10);
+ height = parseInt(getVal('height') || (this.data.type == 'audio' ? "32" : "240"), 10);
+
+ if (type == 'width') {
+ this.height = Math.round((width / this.width) * height);
+ setVal('height', this.height);
+ } else {
+ this.width = Math.round((height / this.height) * width);
+ setVal('width', this.width);
+ }
+ }
+ },
+
+ getMediaListHTML : function() {
+ if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {
+ var html = "";
+
+ html += '<select id="linklist" name="linklist" style="width: 250px" onchange="this.form.src.value=this.options[this.selectedIndex].value;Media.formToData(\'src\');">';
+ html += '<option value="">---</option>';
+
+ for (var i=0; i<tinyMCEMediaList.length; i++)
+ html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';
+
+ html += '</select>';
+
+ return html;
+ }
+
+ return "";
+ },
+
+ getMediaTypeHTML : function(editor) {
+ function option(media_type){
+ return '<option value="'+media_type+'">'+tinyMCEPopup.editor.translate("media_dlg."+media_type)+'</option>'
+ }
+ var html = "";
+ html += '<select id="media_type" name="media_type" onchange="Media.formToData(\'type\');">';
+ html += option("video");
+ html += option("audio");
+ html += option("flash");
+ html += option("quicktime");
+ html += option("shockwave");
+ html += option("windowsmedia");
+ html += option("realmedia");
+ html += option("iframe");
+
+ if (editor.getParam('media_embedded_audio', false)) {
+ html += option('embeddedaudio');
+ }
+
+ html += '</select>';
+ return html;
+ },
+
+ setDefaultDialogSettings : function(editor) {
+ var defaultDialogSettings = editor.getParam("media_dialog_defaults", {});
+ tinymce.each(defaultDialogSettings, function(v, k) {
+ setVal(k, v);
+ });
+ }
+ };
+
+ tinyMCEPopup.requireLangPack();
+ tinyMCEPopup.onInit.add(function() {
+ Media.init();
+ });
+})();
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ar_dlg.js
new file mode 100644
index 000000000..bc7446814
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.media_dlg',{list:"\u0642\u0627\u0626\u0645\u0647",file:"\u0645\u0644\u0641/\u0639\u0646\u0648\u0627\u0646URL",advanced:"\u0645\u062a\u0642\u062f\u0645",general:"\u0639\u0627\u0645",title:"\u0627\u0636\u0641/ \u0639\u062f\u0644 \u0641\u0644\u0627\u0634 \u0627\u0648 \u0641\u064a\u062f\u064a\u0648","align_top_left":"\u0627\u0639\u0644\u0649 \u064a\u0633\u0627\u0631","align_center":"\u0648\u0633\u0637","align_left":"\u064a\u0633\u0627\u0631","align_bottom":"\u0627\u0633\u0641\u0644","align_right":"\u064a\u0645\u064a\u0646","align_top":"\u0627\u0644\u0627\u0639\u0644\u0649","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..",qtsrc:"QT Src",progress:"\u062a\u0642\u062f\u0645",sound:"\u0635\u0648\u062a",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"\u0627\u0639\u0644\u0649 \u064a\u0645\u064a\u0646",uimode:"UI Mode",rate:"\u0645\u0639\u062f\u0644",playcount:"\u0639\u062f\u062f \u0645\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0636",defaultframe:"\u0627\u0644\u0627\u0637\u0627\u0631 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u0649",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"\u0641\u064a\u062f\u064a\u0648 \u0628\u0644\u0627 \u0627\u0637\u0627\u0631",stretchtofit:"\u0645\u0637\u0647 \u0644\u064a\u0646\u0627\u0633\u0628",mute:"\u0628\u0644\u0627 \u0635\u0648\u062a",invokeurls:"Invoke URLs",fullscreen:"\u0628\u0643\u0627\u0645\u0644 \u0627\u0644\u0634\u0627\u0634\u0647",enabled:"\u0645\u062a\u0627\u062d",autostart:"\u0628\u062f\u0621 \u062a\u0644\u0642\u0627\u0626\u0649",volume:"\u0639\u0644\u0648 \u0627\u0644\u0635\u0648\u062a",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u0648\u0642\u062a \u0627\u0644\u0646\u0647\u0627\u064a\u0647",starttime:"\u0648\u0642\u062a \u0627\u0644\u0628\u062f\u0627\u064a\u0647",enablejavascript:"Enable JavaScript",correction:"\u0628\u0644\u0627 \u062a\u0635\u062d\u064a\u062d",targetcache:"Target cache",playeveryframe:"\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u0643\u0627\u062f\u0631\u0627\u062a",kioskmode:"Kiosk mode",controller:"Controller",menu:"\u0627\u0638\u0647\u0631 \u0627\u0644\u0642\u0627\u0626\u0645\u0647",loop:"\u062a\u0643\u0631\u0627\u0631",play:"\u062a\u0634\u063a\u064a\u0644 \u062a\u0644\u0642\u0627\u0626\u0649",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"\u0627\u0633\u0645",id:"Id",type:"\u0646\u0648\u0639",size:"\u0627\u0628\u0639\u0627\u062f",preview:"\u0645\u0639\u0627\u064a\u0646\u0647","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"\u0639\u062f\u062f \u0627\u0644\u062a\u0643\u0631\u0627\u0631\u0627\u062a",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"\u062e\u0644\u0641\u064a\u0647",wmode:"WMode",salign:"SAlign",align:"\u0645\u062d\u0627\u0632\u0627\u0647",scale:"Scale",quality:"\u062c\u0648\u062f\u0647",shuffle:"Shuffle",prefetch:"\u0627\u062d\u0636\u0627\u0631 \u0645\u0633\u0628\u0642",nojava:"\u0644\u0627 \u062c\u0627\u0641\u0627",maintainaspect:"\u0627\u0644\u062d\u0641\u0627\u0638 \u0639\u0644\u0649 \u0646\u0633\u0628\u0629 \u0627\u0644\u0637\u0648\u0644 \u0644\u0644\u0639\u0631\u0636",imagestatus:"\u062d\u0627\u0644\u0629 \u0627\u0644\u0635\u0648\u0631\u0647",center:"\u0648\u0633\u0637",autogotourl:"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0630\u0647\u0627\u0628 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"\u062e\u0635\u0627\u0626\u0635 \u0645\u064a\u062f\u064a\u0627 \u0628\u0644\u0627\u064a\u0631","qt_options":"\u062e\u0635\u0627\u0626\u0635 \u0643\u0648\u064a\u0643 \u062a\u0627\u064a\u0645","flash_options":"\u062e\u0635\u0627\u0626\u0635 \u0641\u0644\u0627\u0634",hidden:"\u062e\u0641\u0649","align_bottom_left":"\u0627\u0633\u0641\u0644 \u064a\u0633\u0627\u0631","align_bottom_right":"\u0627\u0633\u0641\u0644 \u064a\u0645\u064a\u0646",flash:"flash",quicktime:"quicktime ","embedded_audio_options":"\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0635\u0648\u062a \u0627\u0644\u0645\u062f\u0645\u062c\u0629",windowsmedia:"windowsmedia ",realmedia:"realmedia ",shockwave:"shockwave",audio:"\u0627\u0644\u0635\u0648\u062a",video:"\u0627\u0644\u0641\u064a\u062f\u064a\u0648","html5_video_options":"\u062e\u0635\u0627\u0626\u0635 \u0641\u064a\u062f\u064a\u0648 HTML5",altsource1:"\u0627\u0644\u0628\u062f\u064a\u0644 \u0627\u0644\u0627\u0648\u0644 \u0644\u0644\u0645\u0635\u062f\u0631",altsource2:"\u0627\u0644\u0628\u062f\u064a\u0644 \u0627\u0644\u062b\u0627\u0646\u0649 \u0644\u0644\u0645\u0635\u062f\u0631",preload:"\u062a\u062d\u0645\u064a\u0644 \u0645\u0633\u0628\u0642",poster:"Poster",source:"\u0645\u0635\u062f\u0631","html5_audio_options":"\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0635\u0648\u062a","preload_none":"\u0644\u0627 \u0627\u0644\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0633\u0628\u0642","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",iframe:"iframe ",embeddedaudio:"embedded audio "}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/az_dlg.js
new file mode 100644
index 000000000..5fd1f6b6c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.media_dlg',{list:"Siyah\u0131",file:"Fayl/\u00fcnvan",advanced:"\u018flav\u0259l\u0259r",general:"\u00dcmumi",title:"Mediya-obyekti \u0259lav\u0259/redakt\u0259 et","align_top_left":"\u00dcst sol","align_center":"M\u0259tk\u0259z","align_left":"Sol","align_bottom":"Alt","align_right":"Sa\u011f","align_top":"\u00dcst","qt_stream_warn":"Haz\u0131rki ax\u0131lan rtsp m\u0259nb\u0259l\u0259ri QT Src sah\u0259sin\u0259 \u0259lav\u0259 edilm\u0259lidir.\nSiz h\u0259m\u00e7inin Src sah\u0259sin\u0259 qeyri-ax\u0131lan versiyan\u0131 da \u0259lav\u0259 etm\u0259lisiniz..",qtsrc:"QT Src",progress:"\u0130l\u0259rl\u0259yi\u015f",sound:"S\u0259s",swstretchvalign:"Uzat D-D\u00fczl\u0259ndir",swstretchhalign:"Uzat Y-D\u00fczl\u0259ndir",swstretchstyle:"Uzatma stili",scriptcallbacks:"Skript \u00e7a\u011f\u0131r\u0131mlar\u0131","align_top_right":"\u00dcst sa\u011f",uimode:"UI \u00dcsulu",rate:"Norma",playcount:"Oynatma say\u0131",defaultframe:"Susmaya g\u00f6r\u0259 \u00e7\u0259r\u00e7iv\u0259",currentposition:"Haz\u0131rki m\u00f6vqe",currentmarker:"Haz\u0131rki marker",captioningid:"Ba\u015fl\u0131qland\u0131rma id",baseurl:"Baza URL",balance:"Balans",windowlessvideo:"P\u0259nc\u0259r\u0259siz vide",stretchtofit:"S\u0131\u011facaq q\u0259d\u0259r \u00f6l\u00e7\u00fcl\u0259ndir",mute:"S\u0259ssiz",invokeurls:"\u00c7a\u011f\u0131r\u0131lacaq URL \u00fcnvanlar",fullscreen:"Tam ekran",enabled:"Yan\u0131l\u0131b",autostart:"Avtomatik ba\u015flat",volume:"S\u0259s",target:"H\u0259d\u0259f",qtsrcchokespeed:"Drossel s\u00fcr\u0259ti",href:"Href",endtime:"Bit\u0259c\u0259k zaman",starttime:"Ba\u015flan\u011f\u0131c zaman",enablejavascript:"JavaScript-i yand\u0131r",correction:"D\u0259yi\u015fiklik yoxdur",targetcache:"H\u0259d\u0259f ke\u015f",playeveryframe:"H\u0259r \u00e7\u0259r\u00e7iv\u0259ni oynat",kioskmode:"Kiosk \u00fcsulu",controller:"\u0130dar\u0259\u00e7i",menu:"Menyunu g\u00f6st\u0259r",loop:"\u0130lm\u0259k",play:"Avtomatik oynat",hspace:"\u00dcf\u00fcqi f\u0259za",vspace:"\u015eaquli f\u0259za","class_name":"Sinif",name:"Ad\u0131",id:"\u0130dentifikator",type:"N\u00f6v",size:"\u00d6\u00e7\u00fcl\u0259ri",preview:"\u0130lkin bax\u0131\u015f","constrain_proportions":"Proporsiyalar\u0131 saxla",controls:"Kontroller",numloop:"R\u0259q\u0259mli ilm\u0259l\u0259r",console:"Konsol",cache:"Ke\u015f",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"T\u0259m\u0259l",bgcolor:"Fon",wmode:"WMode",salign:"SAlign",align:"Tarazla\u015fmaq",scale:"Miqyas",quality:"Keyfiyy\u0259t",shuffle:"Qar\u0131\u015fd\u0131r",prefetch:"\u00d6n-g\u0259tirm\u0259",nojava:"Java yox",maintainaspect:"Aspekti qoru",imagestatus:"\u015e\u0259kil statusu",center:"M\u0259rk\u0259z",autogotourl:"Avtomatik gedil\u0259c\u0259k URL","shockwave_options":"Shockwave nizamlamalar\u0131","rmp_options":"Real media player nizamlamalar\u0131","wmp_options":"Windows media player nizamlamalar\u0131","qt_options":"Quicktime nizamlamalar\u0131","flash_options":"Flash nizamlamalar\u0131",hidden:"Gizli","align_bottom_left":"A\u015fa\u011f\u0131 sol","align_bottom_right":"A\u015fa\u011f\u0131 sa\u011f","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/be_dlg.js
new file mode 100644
index 000000000..f7afc1a75
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.media_dlg',{list:"\u0421\u043f\u0456\u0441",file:"\u0424\u0430\u0439\u043b/\u0430\u0434\u0440\u0430\u0441",advanced:"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u0430",general:"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f",title:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0435\u0434\u044b\u044f-\u0430\u0431\'\u0435\u043a\u0442","align_top_left":"\u041f\u0430 \u043b\u0435\u0432\u0430\u043c\u0443 \u0432\u0435\u0440\u0445\u043d\u044f\u043c\u0443 \u043a\u0440\u0430\u044e","align_center":"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","align_left":"\u041f\u0430 \u043b\u0435\u0432\u0430\u043c\u0443 \u043a\u0440\u0430\u044e","align_bottom":"\u041f\u0430 \u043d\u0456\u0436\u043d\u044f\u043c\u0443 \u043a\u0440\u0430\u044e","align_right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u0430\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u0430 \u0432\u0435\u0440\u0445\u043d\u044f\u043c\u0443 \u043a\u0440\u0430\u044e","qt_stream_warn":"\u041f\u0430\u0442\u043e\u043a\u0430\u0432\u044b\u044f RTSP \u0440\u044d\u0441\u0443\u0440\u0441\u044b \u043f\u0430\u0432\u0456\u043d\u044b \u0431\u044b\u0446\u044c \u0434\u0430\u0434\u0430\u043d\u044b\u044f \u045e \u043f\u043e\u043b\u0435 QT Src \u043f\u0430\u0434 \u0443\u043a\u043b\u0430\u0434\u043a\u0430\u0439 \u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u0430.\n\u0412\u044b \u0442\u0430\u043a\u0441\u0430\u043c\u0430 \u043f\u0430\u0432\u0456\u043d\u044b \u0434\u0430\u0434\u0430\u0446\u044c \u043d\u0435 \u043f\u0430\u0442\u043e\u043a\u0430\u0432\u044b\u044f \u0432\u0435\u0440\u0441\u0456\u0456 \u045e \u043f\u043e\u043b\u0435 \u041a\u0440\u044b\u043d\u0456\u0446\u0430.",qtsrc:"QT Src",progress:"\u041f\u0440\u0430\u0433\u0440\u044d\u0441",sound:"\u0413\u0443\u043a",swstretchvalign:"\u0412\u0435\u0440\u0442. \u0432\u044b\u0440-\u044f \u0440\u0430\u0441\u0446\u044f\u0436\u044d\u043d\u043d\u0456",swstretchhalign:"\u0413\u0430\u0440. \u0432\u044b\u0440-\u044f \u0440\u0430\u0441\u0446\u044f\u0436\u044d\u043d\u043d\u0456",swstretchstyle:"\u0421\u0442\u044b\u043b\u044c \u0440\u0430\u0441\u0446\u044f\u0436\u044d\u043d\u043d\u044f",scriptcallbacks:"\u041f\u0430\u0434\u0442\u0440\u044b\u043c\u043a\u0430 \u0441\u043a\u0440\u044b\u043f\u0442\u0430","align_top_right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u0430\u043c\u0443 \u0432\u0435\u0440\u0445\u043d\u0456\u043c \u043a\u0440\u0430\u0456",uimode:"\u0420\u044d\u0436\u044b\u043c \u0456\u043d\u0442\u044d\u0440\u0444\u0435\u0439\u0441\u0443",rate:"\u0420\u044d\u0439\u0442\u044b\u043d\u0433",playcount:"\u041b\u0456\u0447\u044b\u043b\u044c\u043d\u0456\u043a \u043f\u0440\u0430\u0439\u0433\u0440\u0430\u0432\u0430\u043d\u043d\u044f",defaultframe:"\u0410\u0441\u043d\u043e\u045e\u043d\u044b \u043a\u0430\u0434\u0440",currentposition:"\u0411\u044f\u0433\u0443\u0447\u0430\u044f \u043f\u0430\u0437\u0456\u0446\u044b\u044f",currentmarker:"\u0411\u044f\u0433\u0443\u0447\u044b \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u0406\u043c\u044f \u0441\u0443\u0431\u0442\u044b\u0442\u0440\u0430\u045e",baseurl:"\u0411\u0430\u0437\u0430\u0432\u044b \u0430\u0434\u0440\u0430\u0441",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"\u0410\u043a\u043e\u043d\u043d\u0430\u0435 \u0432\u0456\u0434\u044d\u0430",stretchtofit:"\u041f\u0430\u0434 \u043f\u0430\u043c\u0435\u0440 \u0430\u043a\u043d\u0430",mute:"\u0411\u0435\u0437 \u0433\u0443\u043a\u0443",invokeurls:"\u0412\u044b\u043a\u043b\u0456\u043a\u0430\u0446\u044c \u0430\u0434\u0440\u0430\u0441",fullscreen:"\u041d\u0430 \u045e\u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d",enabled:"\u0423\u043a\u043b\u044e\u0447\u0430\u043d\u0430",autostart:"\u0410\u045e\u0442\u0430\u0437\u0430\u043f\u0443\u0441\u043a",volume:"\u0413\u0443\u0447\u043d\u0430\u0441\u0446\u044c",target:"\u041c\u044d\u0442\u0430",qtsrcchokespeed:"Choke speed",href:"\u0421\u043f\u0430\u0441\u044b\u043b\u043a\u0430",endtime:"\u0427\u0430\u0441 \u0437\u0430\u043a\u0430\u043d\u0447\u044d\u043d\u043d\u044f",starttime:"\u0427\u0430\u0441 \u043f\u0430\u0447\u0430\u0442\u043a\u0443",enablejavascript:"\u0423\u043a\u043b\u044e\u0447\u044b\u0446\u044c JavaScript",correction:"\u0411\u0435\u0437 \u043a\u0430\u0440\u044d\u043a\u0446\u0456\u0440\u043e\u045e\u043a\u0443",targetcache:"\u041a\u044d\u0448 \u043c\u044d\u0442\u044b",playeveryframe:"\u041f\u0440\u0430\u0439\u0433\u0440\u0430\u0446\u044c \u043a\u043e\u0436\u043d\u044b \u043a\u0430\u0434\u0440",kioskmode:"\u0420\u044d\u0436\u044b\u043c \u041a\u0456\u0451\u0441\u043a",controller:"\u041a\u0456\u0440\u0430\u0432\u0430\u043d\u043d\u0435",menu:"\u0410\u0434\u043b\u044e\u0441\u0442\u0440\u043e\u045e\u0432\u0430\u0446\u044c \u043c\u0435\u043d\u044e",loop:"\u041f\u0430\u045e\u0442\u043e\u0440",play:"\u041f\u0440\u0430\u0439\u0433\u0440\u0430\u0432\u0430\u0446\u044c \u0430\u045e\u0442\u0430\u043c\u0430\u0442\u044b\u0447\u043d\u0430",hspace:"\u0413\u0430\u0440. \u0432\u043e\u0434\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442. \u0432\u043e\u0434\u0441\u0442\u0443\u043f","class_name":"\u041a\u043b\u0430\u0441",name:"\u041d\u0430\u0437\u0432\u0430",id:"\u0406\u0434\u044d\u043d\u0442\u044b\u0444\u0456\u043a\u0430\u0442\u0430\u0440",type:"\u0422\u044b\u043f",size:"\u041f\u0430\u043c\u0435\u0440\u044b",preview:"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u0456 \u043f\u0440\u0430\u0433\u043b\u044f\u0434","constrain_proportions":"\u0417\u0430\u0445\u043e\u045e\u0432\u0430\u0446\u044c \u043f\u0440\u0430\u043f\u043e\u0440\u0446\u044b\u0456",controls:"\u041a\u0456\u0440\u0430\u0432\u0430\u043d\u043d\u0435",numloop:"\u041f\u0430\u045e\u0442\u043e\u0440\u044b",console:"\u041a\u0430\u043d\u0441\u043e\u043b\u044c",cache:"\u041a\u044d\u0448",autohref:"\u0410\u045e\u0442\u0430-\u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0430",liveconnect:"SWLiveConnect",flashvars:"Flash \u043a\u0430\u043c\u0430\u043d\u0434\u044b",base:"\u0410\u0441\u043d\u043e\u0432\u0430",bgcolor:"\u0424\u043e\u043d",wmode:"\u0410\u043a\u043d\u043e",salign:"\u0412\u044b\u0440-\u043d\u0435",align:"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435",scale:"\u041c\u0430\u0448\u0442\u0430\u0431",quality:"\u042f\u043a\u0430\u0441\u0446\u044c",shuffle:"\u0423\u0440\u043e\u0441\u043a\u0456\u0434",prefetch:"\u041f\u0430\u043f\u0435\u0440\u0430\u0434\u0436\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u044b\u0431\u0430\u0440\u043a\u0430",nojava:"\u0411\u0435\u0437 Java",maintainaspect:"\u0417\u0430\u043f\u043e\u043c\u043d\u0456\u0446\u044c \u043f\u0430\u043c\u0435\u0440",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430",center:"\u0426\u044d\u043d\u0442\u0440",autogotourl:"\u0410\u045e\u0442\u0430\u043f\u0435\u0440\u0430\u0445\u043e\u0434 \u043f\u0430 \u0430\u0434\u0440\u0430\u0441\u0443","shockwave_options":"\u041e\u043f\u0446\u044b\u0456 Shockwave","rmp_options":"\u041e\u043f\u0446\u044b\u0456 Real Media Player","wmp_options":"\u041e\u043f\u0446\u044b\u0456 Windows Media Player","qt_options":"\u041e\u043f\u0446\u044b\u0456 QuickTime","flash_options":"\u041e\u043f\u0446\u044b\u0456 Flash",hidden:"\u0421\u0445\u0430\u0432\u0430\u043d\u044b","align_bottom_left":"\u041f\u0430 \u043b\u0435\u0432\u0430\u043c\u0443 \u043d\u0456\u0436\u043d\u044f\u043c\u0443 \u043a\u0440\u0430\u044e","align_bottom_right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u0430\u043c\u0443 \u043d\u0456\u0436\u043d\u044f\u043c\u0443 \u043a\u0440\u0430\u044e",flash:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 flash \u0444\u0430\u0439\u043b\u0430",quicktime:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 quicktime \u0444\u0430\u0439\u043b\u0430","embedded_audio_options":"\u041e\u043f\u0446\u044b\u0456 \u045e\u043a\u0430\u0440\u0430\u043d\u0451\u043d\u0430\u0433\u0430 \u0430\u045e\u0434\u044b\u0451",windowsmedia:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 windowsmedia \u0444\u0430\u0439\u043b\u0430",realmedia:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 realmedia \u0444\u0430\u0439\u043b\u0430",shockwave:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 shockwave \u0444\u0430\u0439\u043b\u0430",audio:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 \u0430\u045e\u0434\u044b\u0451 \u0444\u0430\u0439\u043b\u0430",video:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 \u0432\u0456\u0434\u044d\u0430 \u0444\u0430\u0439\u043b\u0430","html5_video_options":"\u041e\u043f\u0446\u044b\u0456 HTML5 Video",altsource1:"\u0410\u043b\u044c\u0442\u044d\u0440\u043d\u0430\u0442\u044b\u045e\u043d\u0430\u044f \u043a\u0440\u044b\u043d\u0456\u0446\u0430 1",altsource2:"\u0410\u043b\u044c\u0442\u044d\u0440\u043d\u0430\u0442\u044b\u045e\u043d\u0430\u044f \u043a\u0440\u044b\u043d\u0456\u0446\u0430 2",preload:"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u044f\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430",poster:"\u041f\u043e\u0441\u0442\u044d\u0440",source:"\u041a\u0440\u044b\u043d\u0456\u0446\u0430","html5_audio_options":"\u041e\u043f\u0446\u044b\u0456 \u0430\u045e\u0434\u044b\u0451","preload_none":"\u0411\u0435\u0437 \u043f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u044f\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0456","preload_metadata":"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u044f\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u044b\u0445 \u0432\u0456\u0434\u044d\u0430","preload_auto":"\u041d\u0430 \u043c\u0435\u0440\u043a\u0430\u0432\u0430\u043d\u043d\u0435 \u0431\u0440\u0430\u045e\u0437\u0435\u0440\u0430",iframe:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 iframe \u0444\u0430\u0439\u043b\u0430",embeddedaudio:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 embeddedaudio \u0444\u0430\u0439\u043b\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bg_dlg.js
new file mode 100644
index 000000000..0b16481f9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.media_dlg',{list:"\u0421\u043f\u0438\u0441\u044a\u043a",file:"\u0424\u0430\u0439\u043b/URL",advanced:"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438",general:"\u041e\u0431\u0449\u0438",title:"\u0412\u043c\u044a\u043a\u043d\u0438/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043c\u0435\u0434\u0438\u044f","align_top_left":"\u0413\u043e\u0440\u0435 \u043b\u044f\u0432\u043e","align_center":"\u0426\u0435\u043d\u0442\u044a\u0440","align_left":"\u041b\u044f\u0432\u043e","align_bottom":"\u0414\u043e\u043b\u0443","align_right":"\u0414\u044f\u0441\u043d\u043e","align_top":"\u0413\u043e\u0440\u0435","qt_stream_warn":"\u041f\u043e\u0442\u043e\u0447\u043d\u0438\u0442\u0435 rtsp \u0440\u0435\u0441\u0443\u0440\u0441\u0438 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0441\u0435 \u0434\u043e\u0431\u0430\u0432\u044f\u0442 \u0432 QT Src \u043f\u043e\u043b\u0435\u0442\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0437\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438.\n\u0422\u0440\u044f\u0431\u0432\u0430 \u0441\u044a\u0449\u043e \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0435 \u043f\u043e\u0442\u043e\u0447\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u0432 Src \u043f\u043e\u043b\u0435\u0442\u043e..",qtsrc:"QT \u0418\u0437\u0442\u043e\u0447\u043d\u0438\u043a",progress:"\u041f\u0440\u043e\u0433\u0440\u0435\u0441",sound:"\u0417\u0432\u0443\u043a",swstretchvalign:"\u0420\u0430\u0437\u043f\u044a\u0432\u0430\u043d\u0435 V-Align",swstretchhalign:"\u0420\u0430\u0437\u043f\u044a\u0432\u0430\u043d\u0435 H-Align",swstretchstyle:"\u0421\u0442\u0438\u043b \u043d\u0430 \u0440\u0430\u0437\u043f\u044a\u0432\u0430\u043d\u0435",scriptcallbacks:"\u0421\u043a\u0440\u0438\u043f\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u0438 \u0438\u0437\u0432\u0438\u043a\u0432\u0430\u043d\u0438\u044f","align_top_right":"\u0413\u043e\u0440\u0435 \u0434\u044f\u0441\u043d\u043e",uimode:"UI \u0440\u0435\u0436\u0438\u043c",rate:"\u0411\u044a\u0440\u0437\u0438\u043d\u0430",playcount:"\u0411\u0440\u043e\u0439 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f",defaultframe:"\u041d\u0430\u0447\u0430\u043b\u0435\u043d \u043a\u0430\u0434\u044a\u0440",currentposition:"\u0422\u0435\u043a\u0443\u0449\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f",currentmarker:"\u0422\u0435\u043a\u0443\u0449 \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u041d\u0430\u0434\u043f\u0438\u0441\u0432\u0430\u043d\u0435 id",baseurl:"\u0411\u0430\u0437\u043e\u0432\u043e URL",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"\u0412\u0438\u0434\u0435\u043e \u0431\u0435\u0437 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446",stretchtofit:"\u0420\u0430\u0437\u043f\u044a\u043d\u0438",mute:"\u0417\u0430\u0433\u043b\u0443\u0448\u0438",invokeurls:"\u0418\u0437\u0432\u0438\u043a\u0430\u0439\u0442\u0435 URL-\u0442\u0430",fullscreen:"\u0426\u044f\u043b \u0435\u043a\u0440\u0430\u043d",enabled:"\u0412\u043a\u043b\u044e\u0447\u0435\u043d",autostart:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435",volume:"\u0421\u0438\u043b\u0430 \u043d\u0430 \u0437\u0432\u0443\u043a\u0430",target:"\u0426\u0435\u043b",qtsrcchokespeed:"\u041f\u0440\u0435\u0434\u0435\u043b\u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442",href:"Href",endtime:"\u0412\u0440\u0435\u043c\u0435 \u0437\u0430 \u043a\u0440\u0430\u0439",starttime:"\u0412\u0440\u0435\u043c\u0435 \u0437\u0430 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435",enablejavascript:"\u0412\u043a\u043b\u044e\u0447\u0438 JavaScript",correction:"\u0411\u0435\u0437 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0438",targetcache:"\u0426\u0435\u043b\u0435\u0432\u0438 \u043a\u0435\u0448",playeveryframe:"\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u0439 \u0432\u0441\u0435\u043a\u0438 \u043a\u0430\u0434\u044a\u0440",kioskmode:"Kiosk \u0440\u0435\u0436\u0438\u043c",controller:"\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440",menu:"\u041f\u043e\u043a\u0430\u0436\u0438 \u043c\u0435\u043d\u044e",loop:"\u041f\u043e\u0432\u0442\u0430\u0440\u044f\u0439",play:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u0443\u0441\u043a\u0430\u043d\u0435",hspace:"H-Space",vspace:"V-Space","class_name":"\u041a\u043b\u0430\u0441",name:"\u0418\u043c\u0435",id:"Id",type:"\u0422\u0438\u043f",size:"\u0420\u0430\u0437\u043c\u0435\u0440\u0438",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434","constrain_proportions":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438\u0442\u0435",controls:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435",numloop:"\u0411\u0440\u043e\u0439 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f",console:"\u041a\u043e\u043d\u0437\u043e\u043b\u0430",cache:"\u041a\u0435\u0448",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"\u0424\u043b\u0430\u0448 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0438",base:"\u041e\u0441\u043d\u043e\u0432\u0430",bgcolor:"\u0424\u043e\u043d",wmode:"WMode",salign:"SAlign",align:"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",scale:"\u041f\u0440\u0435\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u0438",quality:"\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e",shuffle:"\u0420\u0430\u0437\u0431\u044a\u0440\u043a\u0430\u0439",prefetch:"\u0421\u0432\u0430\u043b\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e",nojava:"\u0411\u0435\u0437 JAVA",maintainaspect:"\u041f\u043e\u0434\u0434\u044a\u0440\u0436\u0430\u0439 \u0441\u044a\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u0442\u043e",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430",center:"\u0426\u0435\u043d\u0442\u044a\u0440",autogotourl:"\u041e\u0442\u0438\u0434\u0438 \u043d\u0430 URL","shockwave_options":"\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Shockwave","rmp_options":"\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Real media player","wmp_options":"\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Windows media player","qt_options":"\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Quicktime","flash_options":"\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Flash",hidden:"\u0421\u043a\u0440\u0438\u0442","align_bottom_left":"\u0414\u043e\u043b\u0443 \u043b\u044f\u0432\u043e","align_bottom_right":"\u0414\u043e\u043b\u0443 \u0434\u044f\u0441\u043d\u043e",flash:"\u0424\u043b\u0430\u0448 \u0444\u0430\u0439\u043b",quicktime:"Quick Time","embedded_audio_options":"\u0412\u0433\u0440\u0430\u0434\u0435\u043d\u0438 \u0430\u0443\u0434\u0438\u043e \u043e\u043f\u0446\u0438\u0438",windowsmedia:"Windows Media Player",realmedia:"Real Media",shockwave:"Shockwave",audio:"\u0417\u0432\u0443\u043a",video:"\u0412\u0438\u0434\u0435\u043e","html5_video_options":"HTML5 \u0412\u0438\u0434\u0435\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438",altsource1:"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0438\u0437\u0442\u043e\u0447\u043d\u0438\u043a 1",altsource2:"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0438\u0437\u0442\u043e\u0447\u043d\u0438\u043a 2",preload:"\u041f\u0440\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435",poster:"\u041f\u043b\u0430\u043a\u0430\u0442",source:"\u0418\u0437\u0442\u043e\u0447\u043d\u0438\u043a","html5_audio_options":"\u0410\u0443\u0434\u0438\u043e \u041e\u043f\u0446\u0438\u0438","preload_none":"\u041d\u0435 \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u0439 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e","preload_metadata":"\u0417\u0430\u0440\u0435\u0434\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u0432\u0438\u0435\u0434\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u0438\u0442\u0435","preload_auto":"\u041d\u0435\u043a\u0430 \u0431\u0440\u0430\u0443\u0437\u044a\u0440\u044a\u0442 \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f \u0440\u0435\u0448\u0438",iframe:"\u041b\u043e\u043a\u0430\u043b\u0435\u043d \u0444\u0440\u0435\u0439\u043c(iframe)",embeddedaudio:"\u0412\u0433\u0440\u0430\u0434\u0435\u043d\u043e \u0430\u0443\u0434\u0438\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bn_dlg.js
new file mode 100644
index 000000000..216365a9d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.media_dlg',{list:"\u09b2\u09bf\u09b8\u09cd\u099f",file:"\u09ab\u09be\u0987\u09b2/\u0987\u0989 \u0986\u09b0 \u098f\u09b2",advanced:"\u098f\u09a1\u09ad\u09be\u09a8\u09cd\u09b8\u09a1",general:"\u099c\u09c7\u09a8\u09be\u09b0\u09c7\u09b2",title:"\u0987\u09a8\u09b8\u09be\u09b0\u09cd\u099f/ \u098f\u09ae\u09ac\u09c7\u09a1\u09c7\u09a1 \u09ae\u09bf\u09a1\u09bf\u09df\u09be \u098f\u09a1\u09bf\u099f \u0995\u09b0\u09be","align_top_left":"\u0989\u09aa\u09b0\u09c7\u09b0 \u09ac\u09be\u09ae \u0995\u09cb\u09a8\u09c7","align_center":"\u09ae\u09be\u099d\u0996\u09be\u09a8\u09c7","align_left":"\u09ac\u09be\u09ae\u09c7","align_bottom":"\u09a8\u09bf\u099a\u09c7","align_right":"\u09a1\u09be\u09a8\u09c7","align_top":"\u0989\u09aa\u09b0\u09c7","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/br_dlg.js
new file mode 100644
index 000000000..81d197820
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.media_dlg',{list:"Lista",file:"Arquivo/URL",advanced:"Avan\u00e7ado",general:"Geral",title:"Inserir/Editar m\u00eddia incorporada","align_top_left":"Topo \u00e0\u00a0 esquerda","align_center":"Centro","align_left":"Esquerda","align_bottom":"Abaixo","align_right":"Direita","align_top":"Topo","qt_stream_warn":"Fluxos de recursos rtsp devem ser acrescentados ao campo QT Src no Modo Avan\u00e7ado.\\NUma vers\u00e3o sem fluxo tamb\u00e9m deve ser acrescentada ao campo Src.",qtsrc:"QT Src",progress:"Progresso",sound:"Som",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"callbacks de script","align_top_right":"Topo \u00e0\u00a0 direita",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Frame padr\u00e3o",currentposition:"Posi\u00e7\u00e3o actual",currentmarker:"Marcador actual",captioningid:"Id de legenda",baseurl:"Base URL",balance:"Stereo",windowlessvideo:"V\u00eddeo sem janela",stretchtofit:"Estender",mute:"Mudo",invokeurls:"Invocar URLs",fullscreen:"Ecr\u00e3 inteiro",enabled:"Activado",autostart:"Execu\u00e7\u00e3o autom\u00e1tica",volume:"Volume",target:"Alvo",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Hora do fim",starttime:"Hora de in\u00edcio",enablejavascript:"Disponibilizar javaScript",correction:"Sem correc\u00e7\u00f5es",targetcache:"Cache alvo",playeveryframe:"Executar todas as frames",kioskmode:"Modo Quiosque",controller:"Controlador",menu:"Mostrar menu",loop:"Repeti\u00e7\u00e3o autom\u00e1tica",play:"Execu\u00e7\u00e3o autom\u00e1tica",hspace:"Espa\u00e7o horizontal",vspace:"Espa\u00e7o vertical","class_name":"Classe",name:"Nome",id:"Id",type:"Tipo",size:"Dimens\u00f5es",preview:"Previs\u00e3o","constrain_proportions":"Manter propor\u00e7\u00f5es",controls:"Controles",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Fundo",wmode:"WMode",salign:"SAlign",align:"Alinhamento",scale:"Escala",quality:"Qualidade",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Centro",autogotourl:"Auto goto URL","shockwave_options":"Op\u00e7\u00f5es Shockwave","rmp_options":"Op\u00e7\u00f5es Real Media Player","wmp_options":"Op\u00e7\u00f5es Windows Media Player","qt_options":"Op\u00e7\u00f5es Quicktime","flash_options":"Op\u00e7\u00f5es Flash",hidden:"Oculto","align_bottom_left":"Abaixo \u00e0\u00a0 esquerda","align_bottom_right":"Abaixo \u00e0\u00a0 direita","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bs_dlg.js
new file mode 100644
index 000000000..1a5cb2390
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ca_dlg.js
new file mode 100644
index 000000000..1162d4e7e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.media_dlg',{list:"Llista",file:"Fitxer/URL",advanced:"Avan\u00e7at",general:"General",title:"Insereix / edita multim\u00e8dia incrustada","align_top_left":"Superior esquerra","align_center":"Centre","align_left":"Esquerra","align_bottom":"Inferior","align_right":"Dreta","align_top":"Superior","qt_stream_warn":"Els recursos rtsp fets flux s\'haurien d\'afegir al camp QT Src sota la pestanya avan\u00e7ada.\nTamb\u00e9 haur\u00edeu d\'afegir una versi\u00f3 no feta flux al camp Src..",qtsrc:"QT Src",progress:"Progr\u00e9s",sound:"S\u00f2",swstretchvalign:"Alineaci\u00f3 vertical de l\'extensor",swstretchhalign:"Alineaci\u00f3 horitzontal de l\'extensor",swstretchstyle:"Estil de l\'extensor",scriptcallbacks:"Crides de retorn a script","align_top_right":"Superior dreta",uimode:"Mode UI",rate:"Velocitat",playcount:"Compte de reproducci\u00f3",defaultframe:"Marc per defecte",currentposition:"Posici\u00f3 actual",currentmarker:"Retolador actual",captioningid:"Id nominal",baseurl:"URL base",balance:"Equilibri",windowlessvideo:"V\u00eddeo sense finestra",stretchtofit:"Estirar fins a encaixar",mute:"Silenci",invokeurls:"Invoca els URL",fullscreen:"Pantalla completa",enabled:"Habilitat",autostart:"Inici autom\u00e0tic",volume:"Volumen",target:"Dest\u00ed",qtsrcchokespeed:"Velocitat",href:"Href",endtime:"Fi",starttime:"Inici",enablejavascript:"Habilita el javascript",correction:"Sense correcci\u00f3",targetcache:"Target cache",playeveryframe:"Reprodueix cada marc",kioskmode:"Mode quiosc",controller:"Controlador",menu:"Mostra el men\u00fa",loop:"Bucle",play:"Reproducci\u00f3 autom\u00e0tica",hspace:"Espai horitzontal",vspace:"Espai vertical","class_name":"Classe",name:"Nom",id:"Id",type:"Tipus",size:"Dimensions",preview:"Previsualitzaci\u00f3","constrain_proportions":"Mant\u00e9 les proporcions",controls:"Controls",numloop:"Nre. bucles",console:"Consola",cache:"Mem\u00f2ria cau",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Fons",wmode:"Mode W",salign:"Alinea S",align:"Alinea",scale:"Escala",quality:"Qualitat",shuffle:"Shuffle",prefetch:"Prec\u00e0rrega",nojava:"Sense java",maintainaspect:"Mant\u00e9 l\'aspecte",imagestatus:"Estat de la imatge",center:"Alinea al centre",autogotourl:"URL goto autom\u00e0tic","shockwave_options":"Opcions del Shockwave","rmp_options":"Opcions del Real media player","wmp_options":"Opcions del Windows media player","qt_options":"Opcions del Quicktime","flash_options":"Opcions del Flash",hidden:"Ocult","align_bottom_left":"Inferior esquerra","align_bottom_right":"Inferior dreta",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opcions d\'audio incrustat",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Opcions de v\u00eddeo HTML5",altsource1:"Font alternatiu 1",altsource2:"Font alternatiu 2",preload:"Pre-c\u00e0rrega",poster:"Anunci",source:"Font","html5_audio_options":"Opcions d\'audio","preload_none":"No precarregar","preload_metadata":"Precarregar metadata de v\u00eddeo","preload_auto":"Deixar decidir a l\'usuari del navegador",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ch_dlg.js
new file mode 100644
index 000000000..3f2c02b2d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.media_dlg',{list:"\u5217\u8868",file:"\u5a92\u4f53URL",advanced:"\u9ad8\u7ea7",general:"\u4e00\u822c",title:"\u63d2\u5165/\u7f16\u8f91\u5a92\u4f53","align_top_left":"\u5de6\u4e0a","align_center":"\u7f6e\u4e2d","align_left":"\u9760\u5de6","align_bottom":"\u9760\u4e0b","align_right":"\u9760\u53f3","align_top":"\u9760\u4e0a","qt_stream_warn":"\u4e32\u6d41\u5a92\u4f53rtsp\u8d44\u6e90\u5e94\u8be5\u52a0\u5230\u300c\u9ad8\u7ea7\u300d\u4e2dQT src. \n\u540c\u65f6\u589e\u52a0\u975e\u4e32\u6d41\u5a92\u4f53\u8d44\u6e90\u5230src.",qtsrc:"QT Src",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u7f29\u653e\u81f3\u5782\u76f4\u5bf9\u9f50",swstretchhalign:"\u7f29\u653e\u81f3\u6c34\u5e73\u5bf9\u9f50",swstretchstyle:"\u7f29\u653e\u6837\u5f0f",scriptcallbacks:"Script \u553f\u53eb","align_top_right":"\u53f3\u4e0a",uimode:"\u9762\u677f\u6a21\u5f0f",rate:"\u6bd4\u7387",playcount:"\u64ad\u653e\u6b21\u6570",defaultframe:"\u9884\u8bbe\u753b\u9762",currentposition:"\u76ee\u524d\u4f4d\u7f6e",currentmarker:"\u76ee\u524d\u6807\u8bb0",captioningid:"\u5b57\u5e55\u7f16\u53f7",baseurl:"\u57fa\u5e95 URL",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u89c6\u7a97\u64ad\u653e",stretchtofit:"\u7f29\u653e\u81f3\u6700\u4f73\u5927\u5c0f",mute:"\u9759\u97f3",invokeurls:"\u5f15\u7528\u7684 URLs",fullscreen:"\u5168\u8424\u5e55",enabled:"\u53ef\u7528",autostart:"\u81ea\u52a8\u64ad\u653e",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"\u963b\u585e\u901f\u5ea6",href:"\u8d85\u8fde\u7ed3",endtime:"\u7ed3\u675f\u65f6\u95f4",starttime:"\u5f00\u59cb\u65f6\u95f4",enablejavascript:"\u542f\u7528 JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u9010\u683c\u64ad\u653e",kioskmode:"Kiosk\u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u663e\u793a\u9009\u9879",loop:"\u5faa\u73af",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd","class_name":"\u7c7b\u522b",name:"\u540d\u79f0",id:"ID",type:"\u7c7b\u578b",size:"\u5927\u5c0f",preview:"\u9884\u89c8","constrain_proportions":"\u7ea6\u675f\u6bd4\u4f8b",controls:"\u63a7\u5236",numloop:"\u5faa\u73af\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash \u53d8\u91cf",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f\u8272",wmode:"\u89c6\u7a97\u6a21\u5f0f",salign:"SAlign",align:"\u5bf9\u9f50",scale:"\u7f29\u653e",quality:"\u54c1\u8d28",shuffle:"\u968f\u673a",prefetch:"\u9884\u8f7d",nojava:"No Java",maintainaspect:"\u9501\u5b9a\u6bd4\u4f8b",imagestatus:"\u56fe\u7247\u72b6\u6001",center:"\u7f6e\u4e2d",autogotourl:"\u81ea\u52a8\u8f6c\u81f3 URL","shockwave_options":"Shockwave \u9009\u9879","rmp_options":"Real Media Player \u9009\u9879","wmp_options":"Windows Media Player \u9009\u9879","qt_options":"Quick Time \u9009\u9879","flash_options":"Flash \u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cn_dlg.js
new file mode 100644
index 000000000..6c559464b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6\u4f4d\u7f6e/URL",advanced:"\u9ad8\u7ea7",general:"\u5e38\u89c4",title:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5f0f\u5a92\u4f53","align_top_left":"\u5de6\u4e0a","align_center":"\u5c45\u4e2d","align_left":"\u5c45\u5de6","align_bottom":"\u5c45\u4e0b","align_right":"\u5c45\u53f3","align_top":"\u5c45\u4e0a","qt_stream_warn":"\u6d41\u5a92\u4f53\u7684RTSP\u8d44\u6e90\u5e94\u6dfb\u52a0\u5230\u5728\u9ad8\u7ea7\u9009\u9879\u5361\u7684Qt src\u5b57\u6bb5\u3002\\ n\u60a8\u4e5f\u53ef\u4ee5\u6dfb\u52a0\u975e\u6d41\u5a92\u4f53\u7248\u672c\u7684",qtsrc:"QuickTime\u6e90\u6587\u4ef6",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u7f29\u653e\u81f3\u5782\u76f4\u5bf9\u9f50",swstretchhalign:"\u7f29\u653e\u81f3\u6c34\u5e73\u5bf9\u9f50",swstretchstyle:"\u7f29\u653e\u6837\u5f0f",scriptcallbacks:"\u811a\u672c\u8fd4\u56de","align_top_right":"\u53f3\u4e0a",uimode:"\u9762\u677f\u6a21\u5f0f",rate:"\u6bd4\u7279\u7387",playcount:"\u64ad\u653e\u6b21\u6570",defaultframe:"\u9884\u8bbe\u753b\u9762",currentposition:"\u5f53\u524d\u4f4d\u7f6e",currentmarker:"\u5f53\u524d\u6807\u8bc6",captioningid:"\u5b57\u5e55\u6807\u8bc6",baseurl:"\u57fa\u672cURL",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u89c6\u7a97\u64ad\u653e",stretchtofit:"\u7f29\u653e\u81f3\u6700\u4f73\u5927\u5c0f",mute:"\u9759\u97f3",invokeurls:"\u5f15\u7528\u7684 URLs",fullscreen:"\u5168\u5c4f",enabled:"\u53ef\u7528",autostart:"\u81ea\u52a8\u64ad\u653e",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"\u963b\u585e\u901f\u5ea6",href:"\u8d85\u94fe\u63a5",endtime:"\u5f00\u59cb\u65f6\u95f4",starttime:"\u7ed3\u675f\u65f6\u95f4",enablejavascript:"\u542f\u7528JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u9010\u5e27\u64ad\u653e",kioskmode:"Kiosk\u6a21\u5f0f",controller:"\u63a7\u5236\u5668",menu:"\u663e\u793a\u83dc\u5355",loop:"\u5faa\u73af",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd","class_name":"\u7c7b\u522b",name:"\u540d\u79f0",id:"Id\u7f16\u53f7",type:"\u5a92\u4f53\u7c7b\u578b",size:"\u5c3a\u5bf8",preview:"\u9884\u89c8","constrain_proportions":"\u7ea6\u675f\u6bd4\u4f8b",controls:"\u63a7\u4ef6",numloop:"\u5faa\u73af\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"\u81ea\u52a8\u94fe\u63a5",liveconnect:"SWLiveConnect\u5c5e\u6027",flashvars:"Flash\u53c2\u6570",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f",wmode:"\u7a97\u53e3\u6a21\u5f0f",salign:"SAlign\u53c2\u6570",align:"\u5bf9\u9f50",scale:"\u7f29\u653e",quality:"\u54c1\u8d28",shuffle:"\u968f\u673a",prefetch:"\u9884\u8f7d",nojava:"\u5173\u95edjava",maintainaspect:"\u9501\u5b9a\u6bd4\u4f8b",imagestatus:"\u56fe\u7247\u72b6\u6001",center:"\u5c45\u4e2d",autogotourl:"\u81ea\u52a8\u8f6c\u81f3 URL","shockwave_options":"Shockwave\u9009\u9879","rmp_options":"Real media player\u9009\u9879","wmp_options":"Windows media player\u9009\u9879","qt_options":"Quicktime\u9009\u9879","flash_options":"Flash\u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b",flash:"Flash",quicktime:"Quicktime","embedded_audio_options":"\u5185\u5d4c\u97f3\u9891\u9009\u9879",windowsmedia:"Windows media",realmedia:"Real media",shockwave:"Shockwave",audio:"\u97f3\u9891",video:"\u89c6\u9891","html5_video_options":"HTML5 Video\u9009\u9879",altsource1:"\u66ff\u4ee3\u6765\u6e901",altsource2:"\u66ff\u4ee3\u6765\u6e902",preload:"\u9884\u8f7d",poster:"\u6807\u8bed",source:"\u6e90\u4ee3\u7801","html5_audio_options":"\u97f3\u9891\u9009\u9879","preload_none":"\u4e0d\u8fdb\u884c\u9884\u8f7d","preload_metadata":"\u9884\u8f7d\u89c6\u9891\u5143\u6570\u636e","preload_auto":"\u8ba9\u7528\u6237\u7684\u6d4f\u89c8\u5668\u51b3\u5b9a",iframe:"Iframe",embeddedaudio:"\u5185\u5d4c\u97f3\u9891"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cs_dlg.js
new file mode 100644
index 000000000..b1268617f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.media_dlg',{list:"Seznam",file:"Soubor/URL",advanced:"Roz\u0161\u00ed\u0159en\u00e9",general:"Obecn\u00e9",title:"Vlo\u017eit/upravit vkl\u00e1dan\u00e1 m\u00e9dia","align_top_left":"Nahoru vlevo","align_center":"Na st\u0159ed","align_left":"Vlevo","align_bottom":"Dol\u016f","align_right":"Vpravo","align_top":"Nahoru","qt_stream_warn":"Streamovan\u00e9 rtsp zdroje mohou b\u00fdt p\u0159id\u00e1ny do pole \'Soubor/URL streamu pro QT\' na z\u00e1lo\u017ece \'Roz\u0161\u00ed\u0159en\u00e9\'.\nYM\u016f\u017eete tak\u00e9 p\u0159idat nestreamovanou verzi do pole \'Soubor/URL\'.",qtsrc:"Soubor/URL streamu pro QT",progress:"Pr\u016fb\u011bh",sound:"Zvuk",swstretchvalign:"Zarovn\u00e1n\u00ed vert. rozta\u017een\u00ed",swstretchhalign:"Zarovn\u00e1n\u00ed horiz. rozta\u017een\u00ed",swstretchstyle:"Styl rozta\u017een\u00ed",scriptcallbacks:"Skripty zp\u011btn\u00fdch vol\u00e1n\u00ed","align_top_right":"Nahoru vpravo",uimode:"Re\u017eim ovl\u00e1dac\u00edho panelu",rate:"Relativn\u00ed rychlost",playcount:"Po\u010det p\u0159ehr\u00e1n\u00ed",defaultframe:"V\u00fdchoz\u00ed sn\u00edmek",currentposition:"Aktu\u00e1ln\u00ed pozice",currentmarker:"Aktu\u00e1ln\u00ed z\u00e1lo\u017eka",captioningid:"ID popisku m\u00e9dia",baseurl:"Z\u00e1kladn\u00ed URL",balance:"Vyv\u00e1\u017een\u00ed",windowlessvideo:"Video bez okna",stretchtofit:"Rozt\u00e1hnout do okna",mute:"Ztlumit",invokeurls:"Po\u017eadovat URL",fullscreen:"Cel\u00e1 obrazovka",enabled:"Povolit ovl\u00e1dac\u00ed panel",autostart:"Automatick\u00e9 spu\u0161t\u011bn\u00ed",volume:"Hlasitost",target:"C\u00edl",qtsrcchokespeed:"Sn\u00ed\u017een\u00ed rychlosti",href:"Odkaz",endtime:"\u010cas ukon\u010den\u00ed",starttime:"Po\u010d\u00e1te\u010dn\u00ed \u010das",enablejavascript:"Povolit Javascript",correction:"Bez korekc\u00ed",targetcache:"C\u00edlov\u00e1 mezipam\u011b\u0165",playeveryframe:"P\u0159ehr\u00e1t ka\u017ed\u00fd sn\u00edmek",kioskmode:"Zak\u00e1zat ukl\u00e1d\u00e1n\u00ed",controller:"Ovl\u00e1dac\u00ed panel",menu:"Zobrazit nab\u00eddku",loop:"Opakov\u00e1n\u00ed",play:"Automatick\u00e9 p\u0159ehr\u00e1v\u00e1n\u00ed",hspace:"Horizont\u00e1ln\u00ed odsazen\u00ed",vspace:"Vertik\u00e1ln\u00ed odsazen\u00ed","class_name":"T\u0159\u00edda",name:"N\u00e1zev",id:"ID",type:"Typ",size:"Rozm\u011bry",preview:"N\u00e1hled","constrain_proportions":"Zachovat proporce",controls:"Ovl\u00e1dac\u00ed panel",numloop:"Po\u010det opakov\u00e1n\u00ed",console:"Konzola",cache:"Mezipam\u011b\u0165",autohref:"Automatick\u00e9 na\u010dten\u00ed",liveconnect:"Spustit Javu (SWLiveConnect)",flashvars:"Parametry (Flashvars)",base:"Z\u00e1kladn\u00ed slo\u017eka",bgcolor:"Pozad\u00ed",wmode:"Re\u017eim okna",salign:"Zarovn\u00e1n\u00ed okna",align:"Zarovn\u00e1n\u00ed",scale:"Pom\u011br",quality:"Kvalita",shuffle:"N\u00e1hodn\u011b",prefetch:"P\u0159edna\u010dten\u00ed",nojava:"Nespout\u011bt Javu",maintainaspect:"Zachovat pom\u011br stran",imagestatus:"Stav obrazu",center:"Na st\u0159ed",autogotourl:"Automatick\u00fd p\u0159echod na URL","shockwave_options":"Mo\u017enosti Shockwave","rmp_options":"Mo\u017enosti p\u0159ehr\u00e1va\u010de Real media","wmp_options":"Mo\u017enosti p\u0159ehr\u00e1va\u010de Windows media","qt_options":"Mo\u017enosti Quicktime","flash_options":"Mo\u017enosti Flashe",hidden:"Skr\u00fdt","align_bottom_left":"Dol\u016f vlevo","align_bottom_right":"Dol\u016f vpravo",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Volby vlo\u017een\u00e9ho audio souboru",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Mo\u017enosti HTML5 video",altsource1:"Alternativn\u00ed zdroj 1",altsource2:"Alternativn\u00ed zdroj 2",preload:"P\u0159edna\u010d\u00edst",poster:"Obr\u00e1zek (zobraz\u00ed se p\u0159i nedostupnosti videa)",source:"Zdroj","html5_audio_options":"Parametry zvuku","preload_none":"Nena\u010d\u00edtat p\u0159edem","preload_metadata":"Na\u010d\u00edst video metadata p\u0159edem","preload_auto":"Ur\u010d\u00ed prohl\u00ed\u017ee\u010d",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cy_dlg.js
new file mode 100644
index 000000000..122a78fe9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.media_dlg',{list:"Rhestr",file:"Ffeil/URL",advanced:"Uwch",general:"Cyffredinol",title:"Mewnosod/Golygu Cyfrwng wedi\'i Fewnosod","align_top_left":"Pen Chwith","align_center":"Canol","align_left":"Chwith","align_bottom":"Gwaelod","align_right":"Dde","align_top":"Pen","qt_stream_warn":"Dylai adnoddau RTSP ffrydiedig gael eu hychwanegu i\'r maes Ffynhonnell QT o dan y tab Uwch.\nDylech chi hefyd ychwanegu fersiwn heb ffrydio i\'r maes Ffynhonnell.",qtsrc:"Ffynhonnell QT",progress:"Cynnydd",sound:"Sain",swstretchvalign:"Ymestyn Aliniad Fertigol",swstretchhalign:"Ymestyn Aliniad Llorweddol",swstretchstyle:"Arddull Ymestyn",scriptcallbacks:"Sgriptiau N\u00f4l-Galw ","align_top_right":"Pen Dde",uimode:"Modd UI",rate:"Cyfradd",playcount:"Cyfrif Chwarae",defaultframe:"Ffr\u00e2m Ddiofyn",currentposition:"Lleoliad Cyfredol",currentmarker:"Marciwr Cyfredol",captioningid:"Id Penawdu",baseurl:"URL y B\u00f4n",balance:"Cydbwysedd",windowlessvideo:"Fideo Heb-Ffenest",stretchtofit:"Ymestyn i Ffitio",mute:"Mudo",invokeurls:"Defnyddio URLs",fullscreen:"Sgrin Llawn",enabled:"Galluogwyd",autostart:"Awto Cychwyn",volume:"Seinfannedd",target:"Targed",qtsrcchokespeed:"Cyflymder Tagu",href:"HREF",endtime:"Amser Gorffen",starttime:"Amser Dechrau",enablejavascript:"Galluogi JavaScript",correction:"Dim Cywiriad",targetcache:"Storfa Targed",playeveryframe:"Chwarae Pob Ffr\u00e2m",kioskmode:"Modd Ciosg",controller:"Rheolydd",menu:"Dangos Dewislen",loop:"Cylchu",play:"Awto Chwarae",hspace:"Gofod Llorweddol",vspace:"Gofod Fertigol","class_name":"Dosbarth",name:"Enw",id:"ID",type:"Math",size:"Dimensiynau",preview:"Rhagolwg","constrain_proportions":"Gorfodi Cyfranedd",controls:"Rheolyddion",numloop:"Nifer y Cylchau",console:"Consol",cache:"Storfa",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Sail",bgcolor:"Cefndir",wmode:"Modd-W",salign:"Alinio-S",align:"Alinio",scale:"Graddfa",quality:"Ansawdd",shuffle:"Cymysgu",prefetch:"Prefetch",nojava:"Dim Java",maintainaspect:"Cadw\'r Agwedd",imagestatus:"Statws y Ddelwedd",center:"Canol",autogotourl:"URL Diofyn","shockwave_options":"Opsiynau Shockwave","rmp_options":"Opsiynau Real Media Player","wmp_options":"Opsiynau Windows Media Player","qt_options":"Opsiynau Quicktime","flash_options":"Opsiynau Flash",hidden:"Cudd","align_bottom_left":"Gwaelod Chwith","align_bottom_right":"Gwaelod Dde",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opsiynau Sain wedi\'i Fewnosod",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"sain",video:"fideo","html5_video_options":"Opsiynau Fideo HTML5",altsource1:"Ffynhonnell amgen 1",altsource2:"Ffynhonnell amgen 2",preload:"Cyn-lwytho",poster:"Postiwr",source:"Ffynhonnell","html5_audio_options":"Opsiynau Sain","preload_none":"Peidiwch \u00e2 Cyn-lwytho","preload_metadata":"Cyn-lwytho metadata fideo","preload_auto":"Gadael porwr y defnyddiwr i benderfynu",iframe:"iframe",embeddedaudio:"sainmewnosodiedig"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/da_dlg.js
new file mode 100644
index 000000000..d9a88d1fa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.media_dlg',{list:"Liste",file:"Fil/URL",advanced:"Avanceret",general:"Generelt",title:"Inds\u00e6t/rediger indlejret mediefil","align_top_left":"\u00d8verste venstre hj\u00f8rne","align_center":"Centreret","align_left":"Venstre","align_bottom":"Bund","align_right":"H\u00f8jret","align_top":"Top","qt_stream_warn":"Streamede rtsp resourcer skal tilf\u00f8jes til QT Src feltet under tabben avanceret.\nDu skal ogs\u00e5 tilf\u00f8je en ikke streamet version til Src feltet..",qtsrc:"QT Src",progress:"Fremskridt",sound:"Lyd",swstretchvalign:"Str\u00e6k V-justering",swstretchhalign:"Str\u00e6k H-justering",swstretchstyle:"Str\u00e6k stil",scriptcallbacks:"Script callbacks","align_top_right":"\u00d8verste h\u00f8jre hj\u00f8rne",uimode:"UI-tilstand",rate:"Vurder",playcount:"Afspil indhold",defaultframe:"Standard ramme",currentposition:"Aktuel position",currentmarker:"Aktuel mark\u00f8r",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Vinduesl\u00f8s video",stretchtofit:"Str\u00e6k for at tilpasse",mute:"Lydl\u00f8s",invokeurls:"Aktiver URL\'er",fullscreen:"Fuldsk\u00e6rm",enabled:"Valgt",autostart:"Afspil automatisk",volume:"Lydstyrke",target:"M\u00e5l",qtsrcchokespeed:"Choke-hastighed",href:"Href",endtime:"Sluttidspunkt",starttime:"Starttidspunkt",enablejavascript:"Tillad JavaScript",correction:"Ingen korrektion",targetcache:"M\u00e5l-cache",playeveryframe:"Afsplil alle rammer",kioskmode:"Kiosk-tilstand",controller:"Controller",menu:"Vis menu",loop:"Gentag",play:"Start",hspace:"H-afstand",vspace:"V-afstand","class_name":"Klasse",name:"Navn",id:"Id",type:"Type",size:"Dimensioner",preview:"Vis udskrift","constrain_proportions":"Bevar proportioner",controls:"Kontroller",numloop:"Antal loops",console:"Konsol",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Baggrund",wmode:"WMode",salign:"SAlign",align:"Juster",scale:"Skaler",quality:"Kvalitet",shuffle:"Bland",prefetch:"Forh\u00e5ndshent",nojava:"Ingen java",maintainaspect:"Bevar aspekt",imagestatus:"Billedstatus",center:"Center",autogotourl:"Auto g\u00e5 til URL","shockwave_options":"Shockwave options","rmp_options":"Real media player egenskaber","wmp_options":"Windows media player egenskaber","qt_options":"Quicktime egenskaber","flash_options":"Flash egenskaber",hidden:"Skjul","align_bottom_left":"Nederste venstre hj\u00f8rne","align_bottom_right":"\u00d8verste h\u00f8jre hj\u00f8rne",flash:"Flash",quicktime:"Quicktime","embedded_audio_options":"Indstillinger for indlejret audio",windowsmedia:"Windows Media",realmedia:"Realmedia",shockwave:"Shockwave",audio:"Lyd",video:"Video","html5_video_options":"HTML5 Video Indstillinger",altsource1:"Alternativ kilde 1",altsource2:"Alternativ kilde 2",preload:"Forudindl\u00e6s",poster:"Poster",source:"Kilde","html5_audio_options":"Audio indstillinger","preload_none":"Preindl\u00e6s ikke","preload_metadata":"Preindl\u00e6s video metadata","preload_auto":"Lad brugerens browser v\u00e6lge",iframe:"iframe",embeddedaudio:"Indlejret lyd"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/de_dlg.js
new file mode 100644
index 000000000..6d0de767c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.media_dlg',{list:"Liste",file:"Datei/URL",advanced:"Erweitert",general:"Allgemein",title:"Multimedia-Inhalte einf\u00fcgen/bearbeiten","align_top_left":"Oben Links","align_center":"Zentriert","align_left":"Links","align_bottom":"Unten","align_right":"Rechts","align_top":"Oben","qt_stream_warn":"In den Erweiterten Einstellungen sollten im Feld \'QT Src\' gestreamte RTSP Resourcen hinzugef\u00fcgt werden.\nZus\u00e4tzlich sollten Sie dort auch eine nicht-gestreamte Resource angeben.",qtsrc:"Angabe zu QT Src",progress:"Fortschritt",sound:"Ton",swstretchvalign:"Stretch V-Ausrichtung",swstretchhalign:"Stretch H-Ausrichtung",swstretchstyle:"Stretch-Art",scriptcallbacks:"Script callbacks","align_top_right":"Oben Rechts",uimode:"UI Modus",rate:"Rate",playcount:"Z\u00e4hler",defaultframe:"Frame-Voreinstellung",currentposition:"Aktuelle Position",currentmarker:"Aktueller Marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Fensterloses Video",stretchtofit:"Anzeigefl\u00e4che an verf\u00fcgbaren Platz anpassen",mute:"Stumm",invokeurls:"Invoke URLs",fullscreen:"Vollbild",enabled:"Aktiviert",autostart:"Autostart",volume:"Lautst\u00e4rke",target:"Ziel",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Endzeitpunkt",starttime:"Startzeitpunkt",enablejavascript:"JavaScript aktivieren",correction:"Ohne Korrektur",targetcache:"Ziel zwischenspeichern",playeveryframe:"Jeden Frame abspielen",kioskmode:"Kioskmodus",controller:"Controller",menu:"Men\u00fc anzeigen",loop:"Wiederholung",play:"Automatisches Abspielen",hspace:"Horizontaler Abstand",vspace:"Vertikaler Abstand","class_name":"CSS-Klasse",name:"Name",id:"Id",type:"Typ",size:"Abmessungen",preview:"Vorschau","constrain_proportions":"Proportionen erhalten",controls:"Steuerung",numloop:"Anzahl Wiederholungen",console:"Konsole",cache:"Zwischenspeicher",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvariablen",base:"Base",bgcolor:"Hintergrund",wmode:"WMode",salign:"S-Ausrichtung",align:"Ausrichtung",scale:"Skalierung",quality:"Qualit\u00e4t",shuffle:"Zuf\u00e4llige Wiedergabe",prefetch:"Prefetch",nojava:"Kein Java",maintainaspect:"Bildverh\u00e4ltnis beibehalten",imagestatus:"Bildstatus",center:"Zentriert",autogotourl:"Auto goto URL","shockwave_options":"Shockwave-Optionen","rmp_options":"Optionen f\u00fcr Real Media Player","wmp_options":"Optionen f\u00fcr Windows Media Player","qt_options":"Quicktime-Optionen","flash_options":"Flash-Optionen",hidden:"Versteckt","align_bottom_left":"Unten Links","align_bottom_right":"Unten Rechts",flash:"Flash",quicktime:"QuickTime","embedded_audio_options":"Integrierte Audio Optionen",windowsmedia:"WindowsMedia",realmedia:"RealMedia",shockwave:"ShockWave",audio:"Audio",video:"Video","html5_video_options":"HTML5 Video Optionen",altsource1:"Alternative Quelle 1",altsource2:"Alternative Quelle 2",preload:"Preload",poster:"Poster",source:"Quelle","html5_audio_options":"Audio Optionen","preload_none":"Nicht vorladen","preload_metadata":"Video Metadaten vorladen","preload_auto":"Benutzer Browser entscheidet automatisch",iframe:"iFrame",embeddedaudio:"Audio (eingebunden)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/dv_dlg.js
new file mode 100644
index 000000000..25300221f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/el_dlg.js
new file mode 100644
index 000000000..157767dc1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.media_dlg',{list:"\u039b\u03af\u03c3\u03c4\u03b1",file:"\u0391\u03c1\u03c7\u03b5\u03af\u03bf/URL",advanced:"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2",general:"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac",title:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03c9\u03bd media","align_top_left":"\u03a0\u03ac\u03bd\u03c9 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","align_center":"\u039a\u03ad\u03bd\u03c4\u03c1\u03bf","align_left":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","align_bottom":"\u039a\u03ac\u03c4\u03c9","align_right":"\u0394\u03b5\u03be\u03b9\u03ac","align_top":"\u03a0\u03ac\u03bd\u03c9","qt_stream_warn":"\u03a0\u03b7\u03b3\u03ad\u03c2 \u03c1\u03bf\u03ce\u03bd rtsp \u03b8\u03b1 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c4\u03b5\u03b8\u03bf\u03cd\u03bd \u03c3\u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf \u03a0\u03b7\u03b3\u03ae QT \u03ba\u03ac\u03c4\u03c9 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03ba\u03b1\u03c1\u03c4\u03ad\u03bb\u03b1 \u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2.\n\u0395\u03c0\u03af\u03c3\u03b7\u03c2 \u03ba\u03b1\u03bb\u03cc \u03b8\u03b1 \u03ae\u03c4\u03b1\u03bd \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b1\u03c0\u03bb\u03ae (\u03cc\u03c7\u03b9 \u03c1\u03bf\u03ae\u03c2) \u03c0\u03b7\u03b3\u03ae..",qtsrc:"\u03a0\u03b7\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5",progress:"\u03a0\u03c1\u03cc\u03bf\u03b4\u03bf\u03c2",sound:"\u0389\u03c7\u03bf\u03c2",swstretchvalign:"\u039a\u03b1\u03c4\u03b1\u03ba\u03cc\u03c1\u03c5\u03c6\u03b7 \u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7",swstretchhalign:"\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7",swstretchstyle:"\u03a3\u03c4\u03c5\u03bb \u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7\u03c2",scriptcallbacks:"Script callbacks","align_top_right":"\u03a0\u03ac\u03bd\u03c9 \u03b4\u03b5\u03be\u03b9\u03ac",uimode:"\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 UI",rate:"\u03a1\u03c5\u03b8\u03bc\u03cc\u03c2",playcount:"\u03a0\u03cc\u03c3\u03b5\u03c2 \u03c6\u03bf\u03c1\u03ad\u03c2 \u03b8\u03b1 \u03c0\u03b1\u03af\u03be\u03b5\u03b9",defaultframe:"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf \u03ba\u03b1\u03c1\u03ad",currentposition:"\u03a4\u03c1\u03ad\u03c7\u03bf\u03c5\u03c3\u03b1 \u03b8\u03ad\u03c3\u03b7",currentmarker:"\u03a4\u03c1\u03ad\u03c7\u03bf\u03bd \u03c3\u03b7\u03bc\u03ac\u03b4\u03b9",captioningid:"Captioning id",baseurl:"URL \u03b2\u03ac\u03c3\u03b7\u03c2",balance:"\u0399\u03c3\u03bf\u03c1\u03c1\u03bf\u03c0\u03af\u03b1",windowlessvideo:"\u0392\u03af\u03bd\u03c4\u03b5\u03bf \u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf",stretchtofit:"\u0395\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7 \u03ce\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03c7\u03c9\u03c1\u03ad\u03c3\u03b5\u03b9",mute:"\u03a3\u03af\u03b3\u03b1\u03c3\u03b7",invokeurls:"\u039a\u03bb\u03ae\u03c3\u03b7 URLs",fullscreen:"\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7",enabled:"\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",autostart:"\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7 \u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7",volume:"\u0388\u03bd\u03c4\u03b1\u03c3\u03b7",target:"\u03a3\u03c4\u03cc\u03c7\u03bf\u03c2",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u03a7\u03c1\u03cc\u03bd\u03bf\u03c2 \u03bb\u03ae\u03be\u03b7\u03c2",starttime:"\u03a7\u03c1\u03cc\u03bd\u03bf\u03c2 \u03ad\u03bd\u03b1\u03c1\u03be\u03b7\u03c2",enablejavascript:"\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 JavaScript",correction:"\u03a7\u03c9\u03c1\u03af\u03c2 \u03b4\u03b9\u03cc\u03c1\u03b8\u03c9\u03c3\u03b7",targetcache:"\u039c\u03bd\u03ae\u03bc\u03b7 cache \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",playeveryframe:"\u03a0\u03b1\u03af\u03be\u03b9\u03bc\u03bf \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03ba\u03b1\u03c1\u03ad",kioskmode:"\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 Kiosk",controller:"\u0395\u03bb\u03b5\u03b3\u03ba\u03c4\u03ae\u03c2",menu:"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03bc\u03b5\u03bd\u03bf\u03cd",loop:"\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7",play:"\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03bf \u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7",hspace:"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1",vspace:"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03ac\u03b8\u03b5\u03c4\u03b7","class_name":"\u039a\u03bb\u03ac\u03c3\u03b7",name:"\u038c\u03bd\u03bf\u03bc\u03b1",id:"Id",type:"\u03a4\u03cd\u03c0\u03bf\u03c2",size:"\u0394\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2",preview:"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7","constrain_proportions":"\u0394\u03b9\u03b1\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7 \u03b1\u03bd\u03b1\u03bb\u03bf\u03b3\u03af\u03b1\u03c2 \u03c0\u03bb. - \u03cd\u03c8\u03bf\u03c5\u03c2",controls:"\u03a7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c1\u03b9\u03b1",numloop:"\u03a0\u03cc\u03c3\u03b5\u03c2 \u03c6\u03bf\u03c1\u03ad\u03c2 \u03b8\u03b1 \u03c0\u03b1\u03af\u03be\u03b5\u03b9",console:"\u039a\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1",cache:"\u039c\u03bd\u03ae\u03bc\u03b7 cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"\u039c\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ad\u03c2 Flash",base:"\u0392\u03ac\u03c3\u03b7",bgcolor:"\u03a6\u03cc\u03bd\u03c4\u03bf",wmode:"WMode",salign:"SAlign",align:"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",scale:"\u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1",quality:"\u03a0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1",shuffle:"\u03a4\u03c5\u03c7\u03b1\u03af\u03b1 \u03c3\u03b5\u03b9\u03c1\u03ac",prefetch:"\u03a0\u03c1\u03bf\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7",nojava:"\u03a7\u03c9\u03c1\u03af\u03c2 java",maintainaspect:"\u0394\u03b9\u03b1\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7 \u03b1\u03bd\u03b1\u03bb\u03bf\u03b3\u03af\u03b1\u03c2 \u03c0\u03bb. - \u03cd\u03c8\u03bf\u03c5\u03c2",imagestatus:"\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",center:"\u039a\u03ad\u03bd\u03c4\u03c1\u03bf",autogotourl:"\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7 \u03bc\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf URL","shockwave_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 Shockwave","rmp_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 Real media player","wmp_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 Windows media player","qt_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 Quicktime","flash_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 Flash",hidden:"\u039a\u03c1\u03c5\u03c6\u03cc","align_bottom_left":"\u039a\u03ac\u03c4\u03c9 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","align_bottom_right":"\u039a\u03ac\u03c4\u03c9 \u03b4\u03b5\u03be\u03b9\u03ac","html5_video_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 HTML5 Video",altsource1:"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03c0\u03b7\u03b3\u03ae 1",altsource2:"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03c0\u03b7\u03b3\u03ae 2",preload:"\u03a0\u03c1\u03bf\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7",poster:"\u0391\u03c6\u03af\u03c3\u03b1",source:"\u03a0\u03b7\u03b3\u03ae","html5_audio_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03ae\u03c7\u03bf\u03c5","embedded_audio_options":"Embedded Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js
new file mode 100644
index 000000000..b247f85cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right",flash:"",quicktime:"","embedded_audio_options":"Embedded Audio Options",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/eo_dlg.js
new file mode 100644
index 000000000..73b1fb956
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.media_dlg',{list:"Listo",file:"Dosiero/Adreso",advanced:"Sperta",general:"\u0108efa",title:"Enmeti/Redakti enhavon enkonstruitan","align_top_left":"Supre-maldekstre","align_center":"Meze","align_left":"Maldekstre","align_bottom":"Sube","align_right":"Dekstre","align_top":"Supre","qt_stream_warn":"Fluoj de risurcoj rtsp devas esti aldonitaj al la kampo QT Src en la Sperta Re\u011dimo.\nVersio sen fluo anka\u016d devas esti aldonita al la kampo Src.",qtsrc:"QT Src",progress:"Progreso",sound:"Sono",swstretchvalign:"Devigi V-Liniigon",swstretchhalign:"Devigi H-Liniigon",swstretchstyle:"Devigi Stilon",scriptcallbacks:"Revokojn de skriptoj","align_top_right":"Supre-dekstre",uimode:"UI-re\u011dimo",rate:"Rapido",playcount:"Kalkulo de a\u016dskultantoj",defaultframe:"Defa\u016dlta kadro",currentposition:"Aktuala pozicio",currentmarker:"Aktuala markilo",captioningid:"ID de subteksto",baseurl:"Baza URL",balance:"Stereo",windowlessvideo:"Video sen fenestro",stretchtofit:"Etendi",mute:"Sen sono",invokeurls:"Voki URL-oj",fullscreen:"Plenekrane",enabled:"Aktiva",autostart:"A\u016dtomata starto",volume:"La\u016dteco",target:"Celo",qtsrcchokespeed:"Malrapidigi",href:"Ligilo",endtime:"Tempo de fino",starttime:"Tempo de komenco",enablejavascript:"Aktivigi JavaScript-on",correction:"Sen correktoj",targetcache:"Cela ka\u015dmemoro",playeveryframe:"Ludi \u0109iujn kadrojn",kioskmode:"Kioskre\u011dimo",controller:"Kontrolilo",menu:"Montri menuon",loop:"A\u016dtomata ripetado",play:"A\u016dtomata starto",hspace:"Horizontala spaco",vspace:"Verticala spaco","class_name":"Klaso",name:"Nomo",id:"Id",type:"Tipo",size:"Dimensioj",preview:"Anta\u016dvido","constrain_proportions":"Konservi proporcion",controls:"Komandoj",numloop:"Ripetado",console:"Konzolo",cache:"Ka\u015dmemoro",autohref:"A\u016dtoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Bazo",bgcolor:"Fono",wmode:"WMode",salign:"SAlign",align:"Liniigo",scale:"Skalo",quality:"Kvalito",shuffle:"Hazarda ordo",prefetch:"Anta\u016dvenigi",nojava:"Sen Java",maintainaspect:"Konservi aspekton",imagestatus:"Stato de bildo",center:"Centro",autogotourl:"A\u016dtomate malfermi adreson","shockwave_options":"Agordoj de Shockwave","rmp_options":"Agordoj de Real Media Player","wmp_options":"Agordoj de Windows Media Player","qt_options":"Agordoj de Quicktime","flash_options":"Agordoj de Flash",hidden:"Ka\u015dita","align_bottom_left":"Sube-maldekstre","align_bottom_right":"Sube-dekstre","html5_video_options":"Agordoj pri HTML5-video",altsource1:"Alternativa kodo 1",altsource2:"Alternativa kodo 2",preload:"Anta\u016d\u015dargi",poster:"Afi\u015do",source:"Fonto","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/es_dlg.js
new file mode 100644
index 000000000..4d84bb156
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.media_dlg',{list:"Lista",file:"Archivo/URL",advanced:"Avanzado",general:"General",title:"Insertar/editar medio embebido","align_top_left":"Arriba Izda.","align_center":"Centrado","align_left":"Izquierda","align_bottom":"Debajo","align_right":"Derecha","align_top":"Arriba","qt_stream_warn":"Los recursos rtsp de Streaming deber\u00edan a\u00f1adirse en el campo QT Src de la pesta\u00f1a avanzada.\nAdem\u00e1s deber\u00eda a\u00f1adir una versi\u00f3n no Streaming en el campo Src.",qtsrc:"QT Src",progress:"Progreso",sound:"Sonido",swstretchvalign:"Alin. V. Estiramiento",swstretchhalign:"Alin. H. Estiramiento",swstretchstyle:"Estilo estiramiento",scriptcallbacks:"Script callbacks","align_top_right":"Arriba Dcha.",uimode:"Modo UI",rate:"Ratio",playcount:"Cuantas reproducciones",defaultframe:"Frame predet.",currentposition:"Posici\u00f3n actual",currentmarker:"Marcador actual",captioningid:"Captioning id",baseurl:"URL Base",balance:"Balance",windowlessvideo:"Video sin ventana",stretchtofit:"Estirar para ajustar",mute:"Silencio",invokeurls:"Invocar URLs",fullscreen:"Pantalla Completa",enabled:"Habilitado",autostart:"Comienzo Autom\u00e1tico",volume:"Volumen",target:"Target",qtsrcchokespeed:"Vel. de choque",href:"Href",endtime:"Fin",starttime:"Inicio",enablejavascript:"Habilitar JavaScript",correction:"Sin correci\u00f3n",targetcache:"Cach\u00e9 de destino",playeveryframe:"Reproducir todo los frames",kioskmode:"Modo Kiosko",controller:"Controlador",menu:"Mostrar Men\u00fa",loop:"Repetitivo",play:"Comienzo Autom\u00e1tico",hspace:"H-Space",vspace:"V-Space","class_name":"Clase",name:"Nombre",id:"Id",type:"Tipo",size:"Dimensiones",preview:"Vista Previa","constrain_proportions":"Bloquear relaci\u00f3n de aspecto",controls:"Controles",numloop:"N\u00fam. repeticiones",console:"Consola",cache:"Cach\u00e9",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Variables de flash",base:"Base",bgcolor:"Fondo",wmode:"WMode",salign:"SAlign",align:"Alineaci\u00f3n",scale:"Escalar",quality:"Calidad",shuffle:"Aleatorio",prefetch:"Preb\u00fasqueda",nojava:"Sin java",maintainaspect:"Mantener aspecto",imagestatus:"Estado de imagen",center:"Centrado",autogotourl:"Ir a URL autom\u00e1t.","shockwave_options":"Opciones Shockwave","rmp_options":"Opciones Real media player","wmp_options":"Opciones Windows media player","qt_options":"Opciones Quicktime","flash_options":"Opciones Flash",hidden:"Oculto","align_bottom_left":"Debajo Izda.","align_bottom_right":"Debajo Dcha.",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opciones sobre Audio incrustado",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Opciones Video HTML5",altsource1:"Fuente alternativa 1",altsource2:"Fuente alternativa 2",preload:"Precarga",poster:"P\u00f3ster",source:"Fuente","html5_audio_options":"Opciones de audio","preload_none":"No recargar","preload_metadata":"Metadatos de la precarga de v\u00eddeo","preload_auto":"Permitir que decida el navegador del usuario",iframe:"iframe",embeddedaudio:"audio incrustado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/et_dlg.js
new file mode 100644
index 000000000..0e305b0af
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.media_dlg',{list:"Nimekiri",file:"Fail/URL",advanced:"T\u00e4psem",general:"\u00dcldine",title:"Sisesta/muuda meediat","align_top_left":"\u00dcleval vasakul","align_center":"Keskel","align_left":"Vasakul","align_bottom":"All","align_right":"Paremal","align_top":"\u00dcleval","qt_stream_warn":"Striimitav variant peaks olema lisatud.",qtsrc:"QT Src",progress:"Progress",sound:"Heli",swstretchvalign:"Venita V-joondust",swstretchhalign:"Venita H-joondust",swstretchstyle:"Venita stiili",scriptcallbacks:"Skripti tagasikutse","align_top_right":"Pleval paremal",uimode:"UI Reziim",rate:"Hinda",playcount:"M\u00e4ngukorrad",defaultframe:"Vaikimisi raam",currentposition:"Antud positioon",currentmarker:"Antud marker",captioningid:"Tiitri ID",baseurl:"Baas URL",balance:"Tasakaal",windowlessvideo:"Aknata video",stretchtofit:"Venita sobivaks",mute:"Vaigista",invokeurls:"N\u00e4ita URL\u2019e",fullscreen:"T\u00e4isekraan",enabled:"Lubatud",autostart:"Auto-start",volume:"Valjudus",target:"Sihtm\u00e4rk",qtsrcchokespeed:"Kiirus",href:"Href",endtime:"L\u00f5pu aeg",starttime:"Stardi aeg",enablejavascript:"Luba JavaScript\u2019i",correction:"Parandust ei ole",targetcache:"Sihtm\u00e4rgi vahem\u00e4lu",playeveryframe:"M\u00e4ngi igat raami",kioskmode:"Kioski reziim",controller:"Kontrollija",menu:"N\u00e4ita men\u00fc\u00fcd",loop:"Auto-kordus",play:"Auto-start",hspace:"H-vahe",vspace:"V-vahe","class_name":"Klass",name:"Nime",id:"ID",type:"T\u00fc\u00fcp",size:"M\u00f5\u00f5dud",preview:"Eelvaade","constrain_proportions":"S\u00e4ilita proportsioon",controls:"Kontrollid",numloop:"Kordused",console:"Konsool",cache:"Vahem\u00e4lu",autohref:"Auto-HREF",liveconnect:"SWLive-\u00dchendus",flashvars:"Flashiv\u00e4rk",base:"Baas",bgcolor:"Taust",wmode:"WMoodus",salign:"SJoondus",align:"Joondus",scale:"M\u00f5\u00f5tkava",quality:"Kvaliteet",shuffle:"Sega",prefetch:"Prefetch",nojava:"Ilma java\u2019ta",maintainaspect:"S\u00e4ilitamise aspekt",imagestatus:"Pildi staatus",center:"Keskel",autogotourl:"Auto-URL","shockwave_options":"Shockwave\u2019i seaded","rmp_options":"Real media player\u2019i seaded","wmp_options":"Windows media player\u2019i seaded","qt_options":"Quicktime\u2019 seaded","flash_options":"Flash\u2019i seaded",hidden:"Peidetud","align_bottom_left":"All vasakul","align_bottom_right":"All paremal",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Manustatud heli valikud",windowsmedia:"windowsmedia",realmedia:"realmedia ",shockwave:"shockwave ",audio:"audio",video:"video","html5_video_options":"HTML5 video valikud",altsource1:"Alternatiivallikas 1",altsource2:"Alternatiivallikas 2",preload:"Eellae",poster:"Poster",source:"Allikas","html5_audio_options":"Heli valikud","preload_none":"\u00c4ra eellae","preload_metadata":"Eellae video metaandmed","preload_auto":"Lase kasutaja brauseril otsustada",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/eu_dlg.js
new file mode 100644
index 000000000..679338944
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.media_dlg',{list:"Zerrenda",file:"Fitxategia/URL",advanced:"Aurreratua",general:"Orokorra",title:"Sartu / editatu ahokatutako euskarria","align_top_left":"Goian ezkerran","align_center":"Erdian","align_left":"Ezkerrean","align_bottom":"Behean","align_right":"Eskuinean","align_top":"Goian","qt_stream_warn":"Streaming bidez ematen diren rtsp baliabideak aurreratuak fitxa n dagoen QT Src eremuan gehitu behar dira.\n Streaming gabeko bertsio bat ere gehitu beharko zenuke.",qtsrc:"QT Src",progress:"Aurrerapena",sound:"Soinua",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Goian eskuinean",uimode:"UI Modua",rate:"Rate",playcount:"Play count",defaultframe:"Lehenetsitako fotograma",currentposition:"Uneko posizioa",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balanzea",windowlessvideo:"Lehiogabeko bideoa",stretchtofit:"Neurrikoa izateko zabaldu",mute:"Ixilik",invokeurls:"URLa deitu",fullscreen:"Pantaila osoa",enabled:"Gaituta",autostart:"Automatikoki hasi",volume:"Bolumena",target:"Helburua",qtsrcchokespeed:"Talka abiadura",href:"Href",endtime:"Noiz bukatu",starttime:"Noiz hasi",enablejavascript:"Gaitu JavaScript",correction:"Zuzenketarik ez",targetcache:"Helburu katxea",playeveryframe:"Marko guztiak erreproduzitu",kioskmode:"Kiosko modua",controller:"Controller",menu:"Erakutsi menua",loop:"Begizta",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Klasea",name:"Izena",id:"Id",type:"Mota",size:"Tamaina",preview:"Aurrebista","constrain_proportions":"Itxura erlazioa blokeatu",controls:"Kontrolak",numloop:"Begizta kopurua",console:"Konsola",cache:"Katxea",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Oinarria",bgcolor:"Atzea",wmode:"WMode",salign:"SAlign",align:"Lerrokatu",scale:"Eskalatu",quality:"Kalitatea",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"Java ez",maintainaspect:"Itxura mantendu",imagestatus:"Irudi edoera",center:"Erdian",autogotourl:"Automatikoi joan URLra","shockwave_options":"Shockwave aukerak","rmp_options":"Real media player aukerak","wmp_options":"Windows media player aukerak","qt_options":"Quicktime aukerak","flash_options":"Flash aukerak",hidden:"Ezkutuan","align_bottom_left":"Behean ezkerrean","align_bottom_right":"Behean eskuinean","html5_video_options":"HTML5 bideo aukerak",altsource1:"Ordezko iturria 1",altsource2:"Ordezko iturria 2",preload:"Aurrekargatu",poster:"Posterra",source:"Iturria","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fa_dlg.js
new file mode 100644
index 000000000..13ac8b4f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.media_dlg',{list:"\u0644\u06cc\u0633\u062a",file:"\u0641\u0627\u06cc\u0644/\u0622\u062f\u0631\u0633 \u0648\u0628",advanced:"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647",general:"\u0639\u0645\u0648\u0645\u06cc",title:"\u062f\u0631\u062c / \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0633\u0627\u0646\u0647 \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 (Embeded Media)","align_top_left":"\u0628\u0627\u0644\u0627 \u0686\u067e","align_center":"\u0648\u0633\u0637","align_left":"\u0686\u067e","align_bottom":"\u067e\u0627\u06cc\u06cc\u0646","align_right":"\u0631\u0627\u0633\u062a","align_top":"\u0628\u0627\u0644\u0627","qt_stream_warn":"\u0645\u0646\u0627\u0628\u0639 Streamed rtsp \u0628\u0627\u06cc\u062f \u062f\u0631 \u0628\u0631\u06af\u0647 (Tab) \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u062f\u0631 \u0641\u06cc\u0644\u062f \u0645\u0646\u0628\u0639 QT \u0627\u0636\u0627\u0641\u0647 \u0634\u0648\u062f.\n\u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0647\u0645\u0686\u0646\u06cc\u0646 \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u063a\u06cc\u0631 streamed \u0631\u0627 \u062f\u0631 \u0641\u06cc\u0644\u062f \u0645\u0646\u0628\u0639 \u0627\u0636\u0627\u0641\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f..",qtsrc:"\u0645\u0646\u0628\u0639 QT",progress:"\u067e\u06cc\u0634\u0631\u0641\u062a",sound:"\u0635\u062f\u0627",swstretchvalign:"\u06a9\u0634\u06cc\u062f\u0646 \u062a\u0631\u0627\u0632 \u0639\u0645\u0648\u062f\u06cc",swstretchhalign:"\u06a9\u0634\u06cc\u062f\u0646 \u062a\u0631\u0627\u0632 \u0627\u0641\u0642\u06cc",swstretchstyle:"\u06a9\u0634\u06cc\u062f\u0646 \u0627\u0633\u062a\u0627\u06cc\u0644",scriptcallbacks:"\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a Callbacks","align_top_right":"\u0628\u0627\u0644\u0627 \u0631\u0627\u0633\u062a",uimode:"\u062d\u0627\u0644\u062a UI",rate:"\u0646\u0631\u062e",playcount:"\u062a\u0639\u062f\u0627\u062f \u067e\u062e\u0634",defaultframe:"\u0641\u0631\u06cc\u0645 \u067e\u06cc\u0634\u0641\u0631\u0636",currentposition:"\u0645\u0648\u0642\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc",currentmarker:"\u0646\u0634\u0627\u0646\u06af\u0631 \u0641\u0639\u0644\u06cc",captioningid:"\u0634\u0646\u0627\u0633\u0647 \u0639\u0646\u0648\u0627\u0646",baseurl:"\u0622\u062f\u0631\u0633 \u067e\u0627\u06cc\u0647",balance:"\u062a\u0648\u0627\u0632\u0646 (Balance)",windowlessvideo:"\u0648\u06cc\u062f\u0626\u0648\u06cc \u0628\u062f\u0648\u0646 \u067e\u0646\u062c\u0631\u0647",stretchtofit:"\u06a9\u0634\u06cc\u062f\u0646 \u062c\u0647\u062a \u06af\u0646\u062c\u0627\u0646\u062f\u0646 \u06a9\u0627\u0645\u0644",mute:"\u0628\u06cc \u0635\u062f\u0627",invokeurls:"\u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0622\u062f\u0631\u0633 \u0647\u0627",fullscreen:"\u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647",enabled:"\u0641\u0639\u0627\u0644 \u0634\u062f\u0647",autostart:"\u0634\u0631\u0648\u0639 \u0627\u062a\u0648\u0645\u0627\u062a\u06cc\u06a9",volume:"\u0628\u0644\u0646\u062f\u06cc \u0635\u062f\u0627",target:"\u0645\u0642\u0635\u062f (Target)",qtsrcchokespeed:"\u0633\u0631\u0639\u062a Choke",href:"HREF",endtime:"\u0632\u0645\u0627\u0646 \u067e\u0627\u06cc\u0627\u0646",starttime:"\u0632\u0645\u0627\u0646 \u0634\u0631\u0648\u0639",enablejavascript:"\u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 JavaScript",correction:"\u0628\u062f\u0648\u0646 \u062a\u0635\u062d\u06cc\u062d",targetcache:"\u06a9\u0634 \u0645\u0642\u0635\u062f (Target Cache)",playeveryframe:"\u067e\u062e\u0634 \u0647\u0631 \u0641\u0631\u06cc\u0645 (Frame)",kioskmode:"\u062d\u0627\u0644\u062a \u06a9\u06cc\u0648\u0633\u06a9",controller:"\u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647",menu:"\u0646\u0645\u0627\u06cc\u0634 \u0645\u0646\u0648",loop:"\u062d\u0644\u0642\u0647 (Loop)",play:"\u067e\u062e\u0634 \u0627\u062a\u0648\u0645\u0627\u062a\u06cc\u06a9",hspace:"\u0641\u0627\u0635\u0644\u0647 \u0627\u0641\u0642\u06cc",vspace:"\u0641\u0627\u0635\u0644\u0647 \u0639\u0645\u0648\u062f\u06cc","class_name":"\u06a9\u0644\u0627\u0633",name:"\u0646\u0627\u0645",id:"\u0634\u0646\u0627\u0633\u0647",type:"\u0646\u0648\u0639",size:"\u0627\u0628\u0639\u0627\u062f",preview:"\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634","constrain_proportions":"\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628",controls:"\u06a9\u0646\u062a\u0631\u0644 \u0647\u0627",numloop:"\u062a\u0639\u062f\u0627\u062f \u062d\u0644\u0642\u0647 \u0647\u0627",console:"\u06a9\u0646\u0633\u0648\u0644",cache:"\u06a9\u0634",autohref:"HREF \u0627\u062a\u0648\u0645\u0627\u062a\u06cc\u06a9",liveconnect:"\u0627\u0631\u062a\u0628\u0627\u0637 SWLive",flashvars:"\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc Flash",base:"\u067e\u0627\u06cc\u0647 (Base)",bgcolor:"\u067e\u0633 \u0632\u0645\u06cc\u0646\u0647",wmode:"WMode",salign:"SAlign",align:"\u062a\u0631\u0627\u0632",scale:"\u0645\u0642\u06cc\u0627\u0633",quality:"\u06a9\u06cc\u0641\u06cc\u062a",shuffle:"\u062f\u0631 \u0647\u0645 \u0622\u0645\u06cc\u062e\u062a\u0647",prefetch:"\u067e\u06cc\u0634 \u0648\u0627\u06a9\u0634\u06cc",nojava:"\u0628\u062f\u0648\u0646 java",maintainaspect:"\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628 \u0648\u062c\u0648\u0647",imagestatus:"\u0648\u0636\u0639\u06cc\u062a \u062a\u0635\u0648\u06cc\u0631",center:"\u0648\u0633\u0637",autogotourl:"\u0631\u0641\u062a\u0646 \u0627\u062a\u0648\u0645\u0627\u062a\u06cc\u06a9 \u0628\u0647 URL","shockwave_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a Shockwave","rmp_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a Real media player","wmp_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a Windows media player","qt_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a Quicktime","flash_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a Flash",hidden:"\u0645\u062e\u0641\u06cc","align_bottom_left":"\u067e\u0627\u06cc\u06cc\u0646 \u0686\u067e","align_bottom_right":"\u067e\u0627\u06cc\u06cc\u0646 \u0631\u0627\u0633\u062a",flash:"flash",quicktime:"quicktime","embedded_audio_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0635\u062f\u0627\u06cc \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"\u0635\u062f\u0627",video:"\u0648\u06cc\u062f\u0626\u0648","html5_video_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0648\u06cc\u062f\u0626\u0648\u06cc HTML5",altsource1:"\u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 1",altsource2:"\u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 2",preload:"\u067e\u06cc\u0634\u200c \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc",poster:"\u067e\u0648\u0633\u062a\u0631",source:"\u0645\u0646\u0628\u0639","html5_audio_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0635\u062f\u0627","preload_none":"\u067e\u06cc\u0634 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0646\u06a9\u0646","preload_metadata":" \u067e\u06cc\u0634 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0648\u06cc\u062f\u0626\u0648\u06cc\u06cc","preload_auto":"\u062a\u0635\u0645\u06cc\u0645 \u0628\u0627 \u0645\u0631\u0648\u0631\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fi_dlg.js
new file mode 100644
index 000000000..2ac2fcac1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.media_dlg',{list:"Lista",file:"Tiedosto/URL",advanced:"Edistyneet",general:"Yleiset",title:"Lis\u00e4\u00e4/muokkaa upotettua mediaa","align_top_left":"Yl\u00e4-vasemmalla","align_center":"Keskell\u00e4","align_left":"Vasemmalla","align_bottom":"Alhaalla","align_right":"Oikealla","align_top":"Ylh\u00e4\u00e4ll\u00e4","qt_stream_warn":"Streamatut rtsp-resurssit tulisi lis\u00e4t\u00e4 QT Src -kentt\u00e4\u00e4n edistynyt-v\u00e4lilehdelle.\nSinun kannattaa lis\u00e4t\u00e4 my\u00f6s ei-streamattu versio Src-kentt\u00e4\u00e4n.",qtsrc:"QT Src",progress:"Eteneminen",sound:"\u00c4\u00e4ni",swstretchvalign:"Venyt\u00e4 pystysuunnassa",swstretchhalign:"Venyt\u00e4 vaakasuunnassa",swstretchstyle:"Venytystyyli",scriptcallbacks:"Skriptin takaisinkutsut","align_top_right":"Yl\u00e4-oikealla",uimode:"UI-moodi",rate:"Rate",playcount:"Toistolaskin",defaultframe:"Oletusruutu",currentposition:"T\u00e4m\u00e4nhetkinen sijainti",currentmarker:"T\u00e4m\u00e4nhetkinen merkki",captioningid:"Otsikointi-id",baseurl:"Perus URL-osoitteet",balance:"Tasapaino",windowlessvideo:"Ikkunaton video",stretchtofit:"Venyt\u00e4 sopimaan",mute:"Hiljennys",invokeurls:"Kutsu URL-osoitteet",fullscreen:"Kokoruutu",enabled:"P\u00e4\u00e4ll\u00e4",autostart:"Automaattinen aloitus",volume:"\u00c4\u00e4nen voimakkuus",target:"Kohde",qtsrcchokespeed:"Choke-nopeus",href:"Href",endtime:"Lopetusaika",starttime:"Aloitusaika",enablejavascript:"Salli JavaScript",correction:"Ei korjausta",targetcache:"Kohteen v\u00e4limuisti",playeveryframe:"Toista jokainen ruutu",kioskmode:"Kioskitila",controller:"Ohjain",menu:"N\u00e4yt\u00e4 valikko",loop:"Silmukka",play:"Automaattinen toisto",hspace:"Vaakatason tila",vspace:"Pystytason tila","class_name":"Luokka",name:"Nimi",id:"Tunniste",type:"Tyyppi",size:"Mitat",preview:"Esikatselu","constrain_proportions":"S\u00e4ilyt\u00e4 mittasuhteet",controls:"Kontrollit",numloop:"Toistojen m\u00e4\u00e4r\u00e4",console:"Konsoli",cache:"V\u00e4limuisti",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-muuttujat",base:"Perusta",bgcolor:"Tausta",wmode:"WMode",salign:"SAlign",align:"Tasaus",scale:"Skaala",quality:"Laatu",shuffle:"Sekoita",prefetch:"Esinouda",nojava:"Ei Javaa",maintainaspect:"S\u00e4ilyt\u00e4 kuvasuhde",imagestatus:"Kuvan tila",center:"Keskit\u00e4",autogotourl:"Mene automaattisesti URL:iin","shockwave_options":"Shockwaven asetukset","rmp_options":"Real media playerin asetukset","wmp_options":"Windows media playerin asetukset","qt_options":"Quicktimen asetukset","flash_options":"Flashin asetukset",hidden:"Piilotettu","align_bottom_left":"Ala-vasemmalla","align_bottom_right":"Ala-oikealla",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Upotetun \u00e4\u00e4nen asetukset",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"HTML5 videoasetukset",altsource1:"Vaihtoehtoinen l\u00e4hde 1",altsource2:"Vaihtoehtoinen l\u00e4hde 2",preload:"Esilataa",poster:"Posteri",source:"L\u00e4hde","html5_audio_options":"\u00c4\u00e4niasetukset","preload_none":"\u00c4l\u00e4 esilataa","preload_metadata":"Esilataa videon metatiedot","preload_auto":"Anna k\u00e4ytt\u00e4j\u00e4n selaimen p\u00e4\u00e4tt\u00e4\u00e4",iframe:"iframe",embeddedaudio:"upotettu audio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fr_dlg.js
new file mode 100644
index 000000000..90b0102dd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.media_dlg',{list:"Liste",file:"Fichier / URL",advanced:"Avanc\u00e9",general:"G\u00e9n\u00e9ral",title:"Ins\u00e9rer / \u00e9diter un fichier m\u00e9dia","align_top_left":"En haut \u00e0 gauche","align_center":"Centr\u00e9","align_left":"Gauche","align_bottom":"Bas","align_right":"Droite","align_top":"Haut","qt_stream_warn":"Les ressources rtsp en streaming doivent \u00eatre ajout\u00e9es au champ \u00ab Source QT \u00bb dans l\'onglet avanc\u00e9.\nVous devriez aussi ajouter une version n\'\u00e9tant pas en streaming au champ \u00ab source QT \u00bb.",qtsrc:"Source QT",progress:"Progression",sound:"Son",swstretchvalign:"Stretch vertical",swstretchhalign:"Stretch horizontal",swstretchstyle:"Stretch style",scriptcallbacks:"Callback de script","align_top_right":"En haut \u00e0 droite",uimode:"Mode UI",rate:"Taux",playcount:"Compteur",defaultframe:"Image par d\u00e9faut",currentposition:"Position actuelle",currentmarker:"Marqueur actuel",captioningid:"ID sous-titrage",baseurl:"Adresse de base",balance:"Balance",windowlessvideo:"Vid\u00e9o sans fen\u00eatre",stretchtofit:"\u00c9tendre pour adapter la taille",mute:"Muet",invokeurls:"Invoquer URLs",fullscreen:"Plein \u00e9cran",enabled:"Activ\u00e9",autostart:"Lire automatiquement",volume:"Volume",target:"Cible",qtsrcchokespeed:"D\u00e9bit maximum",href:"Href",endtime:"Fin",starttime:"D\u00e9but",enablejavascript:"Activer le JavaScript",correction:"Pas de correction",targetcache:"Cache cible",playeveryframe:"Jouer toutes les images",kioskmode:"Mode kiosque",controller:"Contr\u00f4leur",menu:"Afficher le menu",loop:"Lire en boucle",play:"Lecture automatique",hspace:"Espacement horizontal",vspace:"Espacement vertical","class_name":"Classe",name:"Nom",id:"Id",type:"Type",size:"Dimensions",preview:"Pr\u00e9visualisation","constrain_proportions":"Conserver les proportions",controls:"Contr\u00f4les",numloop:"Nombre de tours",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Variables flash",base:"Base",bgcolor:"Fond",wmode:"WMode",salign:"SAlign",align:"Alignement",scale:"\u00c9chelle",quality:"Qualit\u00e9",shuffle:"Al\u00e9atoire",prefetch:"Pr\u00e9chargement",nojava:"Pas java",maintainaspect:"Maintenir l\'aspect",imagestatus:"Statut de l\'image",center:"Centrer",autogotourl:"Aller automatiquement \u00e0 l\'URL","shockwave_options":"Options Shockwave","rmp_options":"Options Real media player","wmp_options":"Windows media player options","qt_options":"Options Quicktime","flash_options":"Options Flash",hidden:"Cach\u00e9","align_bottom_left":"En bas \u00e0 gauche","align_bottom_right":"En bas \u00e0 droite",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Options audio int\u00e9gr\u00e9es",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"vid\u00e9o","html5_video_options":"Options Vid\u00e9o HTML 5",altsource1:"Source alternative 1",altsource2:"Source alternative 2",preload:"Pr\u00e9chargement",poster:"Poster",source:"Source","html5_audio_options":"Options audio","preload_none":"Ne pas pr\u00e9charger","preload_metadata":"Pr\u00e9charger les m\u00e9tadonn\u00e9es vid\u00e9o","preload_auto":"Laisser le fureteur de l\'utilisateur d\u00e9cider",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/gl_dlg.js
new file mode 100644
index 000000000..c4848f39f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.media_dlg',{list:"Lista",file:"Arquivo/URL",advanced:"Avanzado",general:"Xeral",title:"Insertar/editar medio embebido","align_top_left":"Arriba Izda.","align_center":"Centrado","align_left":"Esquerda","align_bottom":"Abaixo","align_right":"Dereita","align_top":"Arriba","qt_stream_warn":"Os recursos rtsp de Streaming deber\u00edan engadirse no campo QT Src da pesta\u00f1a avanzada.\nAdem\u00e1is deber\u00eda engadir unha versi\u00f3n no Streaming no campo Src.",qtsrc:"QT Src",progress:"Progreso",sound:"Son",swstretchvalign:"Esturar ali\u00f1. V.",swstretchhalign:"Estirar ali\u00f1. H.",swstretchstyle:"Estilo estiramento",scriptcallbacks:"Script callbacks","align_top_right":"Arriba Dta.",uimode:"Modo UI",rate:"Relaci\u00f3n",playcount:"Cantas reproducci\u00f3ns",defaultframe:"Frame predet.",currentposition:"Posici\u00f3n actual",currentmarker:"Marcador actual",captioningid:"Id de lenda",baseurl:"URL Base",balance:"Balance",windowlessvideo:"Video sen vent\u00e1",stretchtofit:"Estirar pra axustar",mute:"Silencio",invokeurls:"Invocar URLs",fullscreen:"Pantalla Completa",enabled:"Habilitado",autostart:"Comezo Autom\u00e1tico",volume:"Volume",target:"Obxetivo",qtsrcchokespeed:"Vel. de choque",href:"Href",endtime:"Fin",starttime:"Inicio",enablejavascript:"Habilitar JavaScript",correction:"Sen correci\u00f3n",targetcache:"Obxetivo cache",playeveryframe:"Reproducir t\u00f3dolos frames",kioskmode:"Modo kiosco",controller:"Controller",menu:"Mostrar Men\u00fa",loop:"Repetitivo",play:"Comezo Autom\u00e1tico",hspace:"Espacio H.",vspace:"Espacio V.","class_name":"Clase",name:"Nome",id:"Id",type:"Tipo",size:"Tama\u00f1o",preview:"Vista Previa","constrain_proportions":"Bloquear proporci\u00f3ns",controls:"Controis",numloop:"N\u00fam. repetici\u00f3ns",console:"Consola",cache:"Cach\u00e9",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Fondo",wmode:"WMode",salign:"SAlign",align:"Ali\u00f1aci\u00f3n",scale:"Escala",quality:"Calidade",shuffle:"Aleatorio",prefetch:"PreBusca",nojava:"No java",maintainaspect:"Manter aspecto",imagestatus:"Estado de imaxe",center:"Centrado",autogotourl:"Ir a URL autom\u00e1t.","shockwave_options":"Opci\u00f3ns Shockwave","rmp_options":"Opci\u00f3ns Real media player","wmp_options":"Opci\u00f3ns Windows media player","qt_options":"Opci\u00f3ns Quicktime","flash_options":"Opci\u00f3ns Flash",hidden:"Oculto","align_bottom_left":"Abaixo Izda.","align_bottom_right":"Abaixo Dta.","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/gu_dlg.js
new file mode 100644
index 000000000..cecb0e3e8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/he_dlg.js
new file mode 100644
index 000000000..4bd005821
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.media_dlg',{list:"\u05e8\u05e9\u05d9\u05de\u05d4",file:"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5",advanced:"\u05de\u05ea\u05e7\u05d3\u05dd",general:"\u05db\u05dc\u05dc\u05d9",title:"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05e8\u05d8\u05d5\u05df","align_top_left":"\u05e9\u05de\u05d0\u05dc \u05dc\u05de\u05e2\u05dc\u05d4","align_center":"\u05de\u05e8\u05db\u05d6","align_left":"\u05dc\u05e9\u05de\u05d0\u05dc","align_bottom":"\u05dc\u05de\u05d8\u05d4","align_right":"\u05d9\u05de\u05d9\u05df","align_top":"\u05dc\u05de\u05e2\u05dc\u05d4","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..",qtsrc:"QT Src",progress:"\u05d4\u05ea\u05e7\u05d3\u05de\u05d5\u05ea",sound:"\u05e6\u05dc\u05d9\u05dc",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"\u05d9\u05de\u05d9\u05df \u05dc\u05de\u05e2\u05dc\u05d4",uimode:"\u05de\u05e6\u05d1 \u05ea\u05e6\u05d5\u05d2\u05d4",rate:"\u05e7\u05e6\u05d1",playcount:"\u05de\u05e1\u05e4\u05e8 \u05d4\u05e9\u05de\u05e2\u05d5\u05ea",defaultframe:"\u05e4\u05e8\u05d9\u05d9\u05dd \u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc",currentposition:"\u05de\u05d9\u05e7\u05d5\u05dd \u05e0\u05d5\u05db\u05d7\u05d9",currentmarker:"\u05e1\u05de\u05df \u05e0\u05d5\u05db\u05d7\u05d9",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"\u05de\u05ea\u05d7 \u05dc\u05d4\u05ea\u05d0\u05de\u05d4",mute:"\u05d4\u05e9\u05ea\u05e7",invokeurls:"Invoke URLs",fullscreen:"\u05de\u05e1\u05da \u05de\u05dc\u05d0",enabled:"\u05de\u05d5\u05e4\u05e2\u05dc",autostart:"\u05d4\u05ea\u05d7\u05dc \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea",volume:"\u05e2\u05d5\u05e6\u05de\u05d4",target:"\u05de\u05d8\u05e8\u05d4",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u05d6\u05de\u05df \u05e1\u05d9\u05d5\u05dd",starttime:"\u05d6\u05de\u05df \u05d4\u05ea\u05d7\u05dc\u05d4",enablejavascript:"\u05d0\u05e4\u05e9\u05e8 JavaScript",correction:"\u05dc\u05dc\u05d0 \u05ea\u05d9\u05e7\u05d5\u05df",targetcache:"Target cache",playeveryframe:"\u05e0\u05d2\u05df \u05db\u05dc \u05e4\u05e8\u05d9\u05d9\u05dd",kioskmode:"Kiosk mode",controller:"Controller",menu:"\u05d4\u05e6\u05d2\u05ea \u05ea\u05e4\u05e8\u05d9\u05d8",loop:"\u05e0\u05d2\u05d9\u05e0\u05d4 \u05de\u05d7\u05d6\u05d5\u05e8\u05d9\u05ea",play:"\u05e0\u05d2\u05d9\u05e0\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05e2\u05dd \u05d4\u05d8\u05e2\u05d9\u05e0\u05d4",hspace:"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05d5\u05e4\u05e7\u05d9",vspace:"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05e0\u05db\u05d9","class_name":"\u05de\u05d7\u05dc\u05e7\u05d4",name:"\u05e9\u05dd",id:"Id",type:"\u05e1\u05d5\u05d2",size:"\u05e8\u05d5\u05d7\u05d1 \u05d5\u05d2\u05d5\u05d1\u05d4",preview:"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4","constrain_proportions":"\u05e9\u05de\u05d5\u05e8 \u05e2\u05dc \u05e4\u05e8\u05d5\u05e4\u05d5\u05e8\u05e6\u05d9\u05d5\u05ea",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"\u05de\u05e7\u05d5\u05e8",bgcolor:"\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2",wmode:"WMode",salign:"SAlign",align:"\u05d9\u05d9\u05e9\u05d5\u05e8",scale:"Scale",quality:"\u05d0\u05d9\u05db\u05d5\u05ea \u05d4\u05e1\u05e8\u05d8\u05d5\u05df",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"\u05de\u05e8\u05db\u05d6",autogotourl:"Auto goto URL","shockwave_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea Shockwave","rmp_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05e0\u05d2\u05df Real Media","wmp_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05de\u05d3\u05d9\u05d4 \u05e4\u05dc\u05d9\u05d9\u05e8","qt_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea Quicktime","flash_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05e4\u05dc\u05d0\u05e9",hidden:"Hidden","align_bottom_left":"\u05dc\u05de\u05d8\u05d4 \u05de\u05e9\u05de\u05d0\u05dc","align_bottom_right":"\u05dc\u05de\u05d8\u05d4 \u05de\u05d9\u05de\u05d9\u05df",flash:"Flash",quicktime:"quicktime","embedded_audio_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d0\u05d5\u05d3\u05d9\u05d5 \u05de\u05e9\u05d5\u05dc\u05d1",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d5\u05d9\u05d3\u05d0\u05d5 HTML5",altsource1:"\u05de\u05e7\u05d5\u05e8 \u05d7\u05dc\u05d5\u05e4\u05d9 1",altsource2:"\u05de\u05e7\u05d5\u05e8 \u05d7\u05dc\u05d5\u05e4\u05d9 2",preload:"Preload",poster:"\u05e4\u05d5\u05e1\u05d8\u05e8",source:"\u05de\u05e7\u05d5\u05e8","html5_audio_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d0\u05d5\u05d3\u05d9\u05d5","preload_none":"Don\'t Preload","preload_metadata":"\u05d8\u05e2\u05df \u05de\u05d8\u05d4-\u05d8\u05d0\u05d2 \u05dc\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5","preload_auto":"\u05d0\u05ea\u05df \u05dc\u05d3\u05e4\u05d3\u05e4\u05df \u05dc\u05d1\u05d7\u05d5\u05e8",iframe:"iframe",embeddedaudio:"embeddedaudio "}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hi_dlg.js
new file mode 100644
index 000000000..ea5656d07
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hr_dlg.js
new file mode 100644
index 000000000..7a19994fe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.media_dlg',{list:"Lista",file:"Datoteka/URL",advanced:"Napredno",general:"Op\u0107e",title:"Dodaj / uredi ugra\u0111enu multimediju","align_top_left":"Gore lijevo","align_center":"Sredina","align_left":"Lijevo","align_bottom":"Dno","align_right":"Desno","align_top":"Gore","qt_stream_warn":"Izvori rtsp streamanja trebali bi biti dodani u QT Src polje u naprednom tabu.\nTako\u0111er, trebali bi dodati i obi\u010dnu verziju u Src polje...",qtsrc:"QT Src (Izvor)",progress:"Napredak",sound:"Zvuk",swstretchvalign:"Ra\u0161iri okomito",swstretchhalign:"Ra\u0161iri vodoravno",swstretchstyle:"Stil \u0161irenja",scriptcallbacks:"Poziv (callback) skripte","align_top_right":"Gore desno",uimode:"UI Mod",rate:"Brzina",playcount:"Broj izvedbi",defaultframe:"Osnovni okvir",currentposition:"Trenutna pozicija",currentmarker:"Trenutni znak",captioningid:"Id titlova",baseurl:"Osnovni URL",balance:"Balans",windowlessvideo:"Video bez prozora",stretchtofit:"Ra\u0161iri da stane",mute:"Isklju\u010di zvuk",invokeurls:"Dozovi URLove",fullscreen:"Cijeli ekran",enabled:"Omogu\u0107eno",autostart:"Automatsko pokretanje",volume:"Ja\u010dina zvuka",target:"Meta",qtsrcchokespeed:"Brzina kliza\u010da",href:"Href (lokacija)",endtime:"Vrijeme zavr\u0161etka",starttime:"Vrijeme po\u010detka",enablejavascript:"Omogu\u0107i JavaScript",correction:"Bez ispravka",targetcache:"Cache meta",playeveryframe:"Prila\u017ei svaki frame",kioskmode:"Kiosk mod",controller:"Kontrolor",menu:"Prila\u017ei izbornik",loop:"Kru\u017ena izvedba",play:"Automatska izvedba",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Ime (Name)",id:"Id",type:"Tip",size:"Dimenzije",preview:"Predpregled","constrain_proportions":"Zadr\u017ei proporcije",controls:"Kontrole",numloop:"Broj prikazivanja",console:"Konzola",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Pozadina",wmode:"WMode",salign:"SAlign",align:"Poravnanje",scale:"Veli\u010dina",quality:"Kvaliteta",shuffle:"Mije\u0161ani redoslijed",prefetch:"Prethodno punjenje",nojava:"Bez jave",maintainaspect:"Zadr\u017ei aspekt",imagestatus:"Status slike",center:"Sredina",autogotourl:"Automatski idi na URL","shockwave_options":"Shockwave opcije","rmp_options":"Real media player opcije","wmp_options":"Windows media player opcije","qt_options":"Quicktime opcije","flash_options":"Flash opcije",hidden:"Skriveno","align_bottom_left":"Dolje lijevo","align_bottom_right":"Dolje desno","html5_video_options":"HTML5 Video Opcije",altsource1:"Alternativni izvor 1",altsource2:"Alternativni izvor 2",preload:"Predhodno u\u010ditavanje",poster:"Poster",source:"Izvor","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hu_dlg.js
new file mode 100644
index 000000000..cccb421f1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.media_dlg',{list:"Lista",file:"F\u00e1jl/URL",advanced:"Halad\u00f3",general:"\u00c1ltal\u00e1nos",title:"Be\u00e1gyazott m\u00e9dia besz\u00far\u00e1sa/szerkeszt\u00e9se","align_top_left":"Bal-fent","align_center":"K\u00f6z\u00e9pen","align_left":"Balra","align_bottom":"Lent","align_right":"Jobbra","align_top":"Fent","qt_stream_warn":"Streamelt rtsp forr\u00e1sok a QT Src mez\u0151be val\u00f3k a halad\u00f3 lapon.\nHozz\u00e1 kellene adnia egy nem streamelt verzi\u00f3t a Src mez\u0151ben.",qtsrc:"QT Src",progress:"Folyamat",sound:"Hang",swstretchvalign:"Ny\u00fajt\u00e1s F-igaz\u00edt\u00e1s",swstretchhalign:"Ny\u00fajt\u00e1s V-igaz\u00edt\u00e1s",swstretchstyle:"Ny\u00fajt\u00e1s st\u00edlusa",scriptcallbacks:"Script callbacks","align_top_right":"Jobbra fent",uimode:"UI M\u00f3d",rate:"\u00c9rt\u00e9kel\u00e9s",playcount:"Lej\u00e1tsz\u00e1ssz\u00e1m",defaultframe:"Alap\u00e9rtelmezett frame",currentposition:"Aktu\u00e1lis poz\u00edci\u00f3",currentmarker:"Aktu\u00e1lis marker",captioningid:"Captioning id",baseurl:"Alap URL",balance:"Balance",windowlessvideo:"Ablak n\u00e9lk\u00fcli vide\u00f3",stretchtofit:"Ny\u00fajtva igaz\u00edt\u00e1s",mute:"N\u00e9ma",invokeurls:"URL-ek bevon\u00e1sa",fullscreen:"Teljes k\u00e9perny\u0151",enabled:"Enged\u00e9lyezve",autostart:"Automatikus kezd\u00e9s",volume:"Hanger\u0151",target:"C\u00e9l",qtsrcchokespeed:"Folyt\u00e1s sebess\u00e9ge",href:"Href",endtime:"Z\u00e1r\u00f3 id\u0151",starttime:"Kezd\u00e9si id\u0151",enablejavascript:"JavaScript enged\u00e9se",correction:"Nincs jav\u00edt\u00e1s",targetcache:"C\u00e9l cache",playeveryframe:"Minden kocka lej\u00e1tsz\u00e1sa",kioskmode:"Kiosk m\u00f3d",controller:"Vez\u00e9rl\u0151",menu:"Men\u00fc mutat\u00e1sa",loop:"Ism\u00e9tl\u00e9s",play:"Automatikus lej\u00e1tsz\u00e1s",hspace:"V-t\u00e1v",vspace:"F-t\u00e1v","class_name":"Oszt\u00e1ly",name:"N\u00e9v",id:"Id",type:"T\u00edpus",size:"M\u00e9retek",preview:"El\u0151n\u00e9zet","constrain_proportions":"Ar\u00e1nytart\u00e1s",controls:"Kezel\u0151k",numloop:"Ism\u00e9tl\u00e9ssz\u00e1m",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"H\u00e1tt\u00e9r",wmode:"WM\u00f3d",salign:"SElrendez\u00e9s",align:"Elrendez\u00e9s",scale:"Nagy\u00edt\u00e1s",quality:"Min\u0151s\u00e9g",shuffle:"V\u00e9letlenszer\u0171",prefetch:"El\u0151t\u00f6lt\u00e9s",nojava:"Nincs java",maintainaspect:"Ar\u00e1nytart\u00e1s",imagestatus:"K\u00e9p \u00e1llapot",center:"K\u00f6z\u00e9pre",autogotourl:"Automatikus URL-re ugr\u00e1s","shockwave_options":"Shockwave be\u00e1ll\u00edt\u00e1sai","rmp_options":"Real media player be\u00e1ll\u00edt\u00e1sai","wmp_options":"Windows media player be\u00e1ll\u00edt\u00e1sai","qt_options":"Quicktime be\u00e1ll\u00edt\u00e1sai","flash_options":"Flash be\u00e1ll\u00edt\u00e1sai",hidden:"Rejtett","align_bottom_left":"Bal-lent","align_bottom_right":"Bal-jobbra","embedded_audio_options":"Be\u00e1gyazott hang be\u00e1ll\u00edt\u00e1sok","html5_video_options":"HTML5 Video be\u00e1ll\u00edt\u00e1sok",altsource1:"Alternat\u00edv forr\u00e1s 1",altsource2:"Alternat\u00edv forr\u00e1s 2",preload:"El\u0151t\u00f6lt\u00e9s",poster:"Hozz\u00e1ad\u00f3",source:"Forr\u00e1s","html5_audio_options":"Audi\u00f3 be\u00e1ll\u00edt\u00e1sok","preload_none":"Nincs el\u0151reolvas\u00e1s","preload_metadata":"Vide\u00f3 metaadatok el\u0151reolvas\u00e1sa","preload_auto":"Hagyjuk a felhaszn\u00e1l\u00f3 b\u00f6ng\u00e9sz\u0151j\u00e9nek eld\u00f6nteni",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hy_dlg.js
new file mode 100644
index 000000000..2b4c15899
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.media_dlg',{list:"\u0421\u043f\u0438\u0441\u043e\u043a",file:"\u0424\u0430\u0439\u043b / URL",advanced:"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e",general:"\u041e\u0431\u0449\u0435\u0435",title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c / \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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 ..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"\u0410\u0432\u0442\u043e\u0441\u0442\u0430\u0440\u0442",volume:"\u0413\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044e",loop:"\u041b\u0443\u043f",play:"\u0410\u0432\u0442\u043e\u043f\u043b\u0435\u0439",hspace:"\u0433\u043e\u0440. \u043e\u0442\u0441\u0442\u0443\u043f",vspace:"\u0432\u0435\u0440\u0442. \u043e\u0442\u0441\u0442\u0443\u043f","class_name":"\u041a\u043b\u0430\u0441\u0441",name:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",id:"Id",type:"\u0422\u0438\u043f",size:"\u0420\u0430\u0437\u043c\u0435\u0440\u044b",preview:"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440","constrain_proportions":"\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",controls:"Controls",numloop:"Num loops",console:"Console",cache:"\u041a\u044d\u0448",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"\u0424\u043e\u043d",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ia_dlg.js
new file mode 100644
index 000000000..28cf56a03
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6/\u5730\u5740",advanced:"\u9ad8\u7ea7",general:"\u57fa\u672c",title:"\u63d2\u5165/\u7f16\u8f91 \u5a92\u4f53","align_top_left":"\u9876\u90e8\u5c45\u5de6","align_center":"\u5c45\u4e2d","align_left":"\u5c45\u5de6","align_bottom":"\u5e95\u90e8","align_right":"\u5c45\u53f3","align_top":"\u9876\u90e8","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..",qtsrc:"QT Src",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u7f29\u653e\u81f3\u5782\u76f4\u5bf9\u9f50",swstretchhalign:"\u7f29\u653e\u81f3\u6c34\u5e73\u5bf9\u9f50",swstretchstyle:"\u7f29\u653e\u6837\u5f0f",scriptcallbacks:"\u811a\u672c\u56de\u6863","align_top_right":"\u9876\u90e8\u5c45\u53f3",uimode:"UI \u6a21\u5f0f",rate:"\u7801\u7387",playcount:"\u64ad\u653e\u6b21\u6570",defaultframe:"\u9ed8\u8ba4\u5e27",currentposition:"\u5f53\u524d\u4f4d\u7f6e",currentmarker:"\u5f53\u524d\u6807\u7b7e",captioningid:"\u5b57\u5e55 id",baseurl:"Base URL",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u7a97\u53e3\u89c6\u9891",stretchtofit:"\u7f29\u653e\u81f3\u5408\u9002\u5927\u5c0f",mute:"\u9759\u97f3",invokeurls:"\u8c03\u7528\u7684URLs",fullscreen:"\u5168\u5c4f\u5e55",enabled:"\u542f\u7528",autostart:"\u81ea\u52a8\u5f00\u59cb",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u7ed3\u675f\u65f6\u95f4",starttime:"\u5f00\u59cb\u65f6\u95f4",enablejavascript:"\u542f\u7528 JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u9010\u5e27\u64ad\u653e",kioskmode:"Kiosk \u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u663e\u793a\u83dc\u5355",loop:"\u5faa\u73af",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd","class_name":"\u7c7b\u540d",name:"\u540d\u79f0",id:"Id",type:"\u7c7b\u578b",size:"\u5927\u5c0f",preview:"\u9884\u89c8","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",controls:"\u63a7\u5236",numloop:"\u5faa\u73af\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash\u53d8\u6570",base:"\u57fa\u7ebf",bgcolor:"\u80cc\u666f\u8272",wmode:"WMode",salign:"SAlign",align:"\u5bf9\u9f50",scale:"\u7f29\u653e",quality:"\u54c1\u8d28",shuffle:"\u968f\u673a",prefetch:"\u9884\u8bfb",nojava:"No java",maintainaspect:"\u7ef4\u62a4\u72b6\u6001",imagestatus:"\u56fe\u50cf\u72b6\u6001",center:"\u5c45\u4e2d",autogotourl:"\u81ea\u52a8\u8df3\u8f6c URL","shockwave_options":"Shockwave \u9009\u9879","rmp_options":"Real media player \u9009\u9879","wmp_options":"Windows media player \u9009\u9879","qt_options":"Quicktime \u9009\u9879","flash_options":"Flash \u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5e95\u90e8\u5c45\u5de6","align_bottom_right":"\u5e95\u90e8\u5c45\u53f3","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/id_dlg.js
new file mode 100644
index 000000000..3aab79b8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Atas Kiri","align_center":"Tengah","align_left":"Kiri","align_bottom":"Bawah","align_right":"Kanan","align_top":"Atas","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Atas Kanan",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bawah Kiri","align_bottom_right":"Bawah kanan","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/is_dlg.js
new file mode 100644
index 000000000..61cc8bfd5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.media_dlg',{list:"Listi",file:"Skr\u00e1/Sl\u00f3\u00f0",advanced:"\u00cdtarlegt",general:"Almennt",title:"Setja inn / Breyta birtingu margmi\u00f0lunar","align_top_left":"Efst vinstri","align_center":"Mi\u00f0ja","align_left":"Vinstri","align_bottom":"Ne\u00f0st","align_right":"H\u00e6gri","align_top":"Efst","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..",qtsrc:"QT Src",progress:"Sta\u00f0a",sound:"Hlj\u00f3\u00f0",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Efst h\u00e6gri",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Upprunalegur rammi",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Gluggalaust myndband",stretchtofit:"Teigja til a\u00f0 passa",mute:"Dempa",invokeurls:"Virkja sl\u00f3\u00f0ir",fullscreen:"Heilskj\u00e1r",enabled:"Virkt",autostart:"Byrja sj\u00e1lfvirkt",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"S\u00fdna valmynd",loop:"Endurtaka",play:"Sj\u00e1lfvirk spilun",hspace:"L\u00e1r-bil",vspace:"L\u00f3\u00f0r-bil","class_name":"Flokkur",name:"Nafn",id:"Id",type:"Ger\u00f0",size:"V\u00edddir",preview:"Forsko\u00f0un","constrain_proportions":"Halda hlutf\u00f6llum",controls:"Stj\u00f3rn",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Bakgrunnur",wmode:"WMode",salign:"SAlign",align:"J\u00f6fnun",scale:"A\u00f0l\u00f6gun",quality:"G\u00e6\u00f0i",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"Ekkert java",maintainaspect:"Halda hlutf\u00f6llum",imagestatus:"Sta\u00f0a myndar",center:"Mi\u00f0ja",autogotourl:"Auto goto URL","shockwave_options":"Shockwave m\u00f6guleikar","rmp_options":"Real media player m\u00f6guleikar","wmp_options":"Windows media player m\u00f6guleikar","qt_options":"Quicktime m\u00f6guleikar","flash_options":"Flash m\u00f6guleikar",hidden:"Hidden","align_bottom_left":"Ne\u00f0st vinstri","align_bottom_right":"Ne\u00f0st h\u00e6gri","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/it_dlg.js
new file mode 100644
index 000000000..f335edebb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.media_dlg',{list:"Lista",file:"File/URL",advanced:"Avanzate",general:"Generale",title:"Inserisci/modifica file multimediale","align_top_left":"Alto a sinistra","align_center":"Centro","align_left":"Sinistra","align_bottom":"Basso","align_right":"Destra","align_top":"Alto","qt_stream_warn":"Le risorse rstp \'streamed\' devono essere aggiunte al campo Sorgente QT nella tabella Avanzate.\nSi dovrebbe inserire anche una versione non \'streamed\' al campo Sorgente..",qtsrc:"Sorgente QT",progress:"Avanzamento",sound:"Suono",swstretchvalign:"Tratto V-Allineamento",swstretchhalign:"Tratto H-Allineamento",swstretchstyle:"Stile Tratto",scriptcallbacks:"Script richiamato","align_top_right":"Alto a destra",uimode:"Modalit\u00e0 Interfaccia Utente",rate:"Qualit\u00e0",playcount:"Conteggio esecuzione",defaultframe:"Frame predefinito",currentposition:"Posizione corrente",currentmarker:"Indicatore corrente",captioningid:"Didascalia dell\'Id",baseurl:"URL base",balance:"Bilanciamento",windowlessvideo:"Video senza finestra",stretchtofit:"Adatta dimensioni",mute:"Muto",invokeurls:"Invoca URLs",fullscreen:"Tutto schermo",enabled:"Abilitato",autostart:"Avvio automatico",volume:"Volume",target:"Target",qtsrcchokespeed:"Velocit\u00e0 cursore",href:"Href",endtime:"Ora fine",starttime:"Ora inizio",enablejavascript:"Abilita JavaScript",correction:"Nessuna Correzione",targetcache:"Cache del target",playeveryframe:"Esegui ogni frame",kioskmode:"Modalit\u00e0 Kiosk",controller:"Controller",menu:"Mostra menu",loop:"Riproduzione ciclica",play:"Esecuzione automatica",hspace:"H-Spazio",vspace:"V-Spazio","class_name":"Classe",name:"Nome",id:"Id",type:"Tipo",size:"Dimensioni",preview:"Anteprima","constrain_proportions":"Mantieni Proporzioni",controls:"Controlli",numloop:"Numero Cicli",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Sfondo",wmode:"WMode",salign:"SAlign",align:"Allineamento",scale:"Scala",quality:"Qualit\u00e0",shuffle:"Shuffle",prefetch:"Precaricamento",nojava:"No java",maintainaspect:"Mantieni Aspetto",imagestatus:"Stato Immagine",center:"Centra",autogotourl:"Vai a URL automatico","shockwave_options":"Opzioni Shockwave","rmp_options":"Opzioni Real media player","wmp_options":"Opzioni Windows media player","qt_options":"Opzioni Quicktime","flash_options":"Opzioni Flash",hidden:"Nascosto","align_bottom_left":"Basso a Sinistra","align_bottom_right":"Basso a Destra",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opzioni Audio Embedded",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Opzioni Video HTML5",altsource1:"Sorgente alternativa 1",altsource2:"Sorgente alternativa 2",preload:"Precarica",poster:"Poster",source:"Sorgente","html5_audio_options":"Opzioni Audio","preload_none":"Non Precaricare","preload_metadata":"Precarica i metadati video","preload_auto":"Lascia decidere al browser dell\'utente",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ja_dlg.js
new file mode 100644
index 000000000..9752ca22e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.media_dlg',{list:"\u4e00\u89a7",file:"\u30d5\u30a1\u30a4\u30eb\u3084URL",advanced:"\u8a73\u7d30",general:"\u4e00\u822c",title:"\u57cb\u3081\u8fbc\u307f\u30e1\u30c7\u30a3\u30a2\u306e\u633f\u5165\u3084\u7de8\u96c6","align_top_left":"\u5de6\u4e0a","align_center":"\u4e2d\u592e","align_left":"\u5de6","align_bottom":"\u4e0b","align_right":"\u53f3","align_top":"\u4e0a","qt_stream_warn":"RTSP\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u30ea\u30bd\u30fc\u30b9\u3092\u300c\u9ad8\u5ea6\u300d\u306e\u30bf\u30d6\u306e\u300cQT\u306e\u30bd\u30fc\u30b9\u300d\u6b04\u306b\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u307e\u305f\u3001\u300c\u30bd\u30fc\u30b9\u300d\u6b04\u306b\u306f\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u3067\u306f\u306a\u3044\u30d0\u30fc\u30b8\u30e7\u30fc\u30f3\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002",qtsrc:"QT\u306e\u30bd\u30fc\u30b9",progress:"\u9032\u5c55",sound:"\u30b5\u30a6\u30f3\u30c9",swstretchvalign:"\u5782\u76f4\u306e\u914d\u7f6e",swstretchhalign:"\u6c34\u5e73\u306e\u914d\u7f6e",swstretchstyle:"\u4f38\u7e2e\u306e\u30b9\u30bf\u30a4\u30eb",scriptcallbacks:"\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af","align_top_right":"\u53f3\u4e0a",uimode:"UI\u3092\u8868\u793a\u3059\u308b\u30e2\u30fc\u30c9",rate:"\u518d\u751f\u30ec\u30fc\u30c8",playcount:"\u518d\u751f\u56de\u6570",defaultframe:"\u521d\u671f\u72b6\u614b\u306e\u30d5\u30ec\u30fc\u30e0",currentposition:"\u518d\u751f\u4f4d\u7f6e(\u79d2\u5358\u4f4d)",currentmarker:"\u30de\u30fc\u30ab\u30fc\u756a\u53f7",captioningid:"\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3\u8868\u793a\u8981\u7d20ID",baseurl:"\u57fa\u6e96\u306eURL",balance:"\u30b9\u30c6\u30ec\u30aa\u306e\u30d0\u30e9\u30f3\u30b9",windowlessvideo:"\u30a6\u30a3\u30f3\u30c9\u30a6\u306a\u3057\u306e\u52d5\u753b",stretchtofit:"\u5408\u308f\u305b\u3066\u62e1\u5927",mute:"\u6d88\u97f3",invokeurls:"URL\u3092\u958b\u304f",fullscreen:"\u5168\u753b\u9762",enabled:"\u6709\u52b9",autostart:"\u81ea\u52d5\u518d\u751f",volume:"\u97f3\u91cf",target:"\u30bf\u30fc\u30b2\u30c3\u30c8",qtsrcchokespeed:"\u518d\u751f\u30c7\u30fc\u30bf\u30ec\u30fc\u30c8",href:"\u30ea\u30f3\u30af\u5148URL",endtime:"\u7d42\u4e86\u6642\u9593",starttime:"\u958b\u59cb\u6642\u9593",enablejavascript:"JavaScript\u3092\u6709\u52b9",correction:"\u8a02\u6b63\u306a\u3057",targetcache:"\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u30ad\u30e3\u30c3\u30b7\u30e5",playeveryframe:"\u3059\u3079\u3066\u306e\u30d5\u30ec\u30fc\u30e0\u3092\u518d\u751f",kioskmode:"Kiosk\u30e2\u30fc\u30c9",controller:"\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u8868\u793a",menu:"\u30e1\u30cb\u30e5\u30fc\u3092\u8868\u793a",loop:"\u7e70\u308a\u8fd4\u3057",play:"\u81ea\u52d5\u518d\u751f",hspace:"\u5de6\u53f3\u306e\u4f59\u767d",vspace:"\u4e0a\u4e0b\u306e\u4f59\u767d","class_name":"\u30af\u30e9\u30b9",name:"\u540d\u524d",id:"ID",type:"\u30bf\u30a4\u30d7",size:"\u5bf8\u6cd5",preview:"\u30d7\u30ec\u30d3\u30e5\u30fc","constrain_proportions":"\u7e26\u6a2a\u6bd4\u3092\u7dad\u6301",controls:"\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u8868\u793a",numloop:"\u7e70\u308a\u8fd4\u3057\u306e\u56de\u6570",console:"\u30b3\u30f3\u30bd\u30fc\u30eb",cache:"\u30ad\u30e3\u30c3\u30b7\u30e5",autohref:"\u81ea\u52d5\u8aad\u8fbc",liveconnect:"SWLiveConnect\u5c5e\u6027",flashvars:"Flash Vars",base:"Base",bgcolor:"\u80cc\u666f\u8272",wmode:"WMode",salign:"SAlign",align:"\u914d\u7f6e",scale:"\u4f38\u7e2e",quality:"\u54c1\u8cea",shuffle:"\u30b7\u30e3\u30c3\u30d5\u30eb",prefetch:"\u5148\u8aad\u307f",nojava:"Java\u3092\u7981\u6b62",maintainaspect:"\u7e26\u6a2a\u6bd4\u306e\u7dad\u6301",imagestatus:"\u753b\u50cf\u306e\u72b6\u614b",center:"\u4e2d\u592e\u63c3\u3048",autogotourl:"URL\u306b\u81ea\u52d5\u79fb\u52d5","shockwave_options":"Shockwave\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","rmp_options":"Real media player\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","wmp_options":"Windows media player\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","qt_options":"Quicktime\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","flash_options":"Flash\u306e\u30aa\u30d7\u30b7\u30e7\u30f3",hidden:"\u975e\u8868\u793a","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b",flash:"flash",quicktime:"quicktime","embedded_audio_options":"\u57cb\u3081\u8fbc\u307fAudio\u306e\u30aa\u30d7\u30b7\u30e7\u30f3",windowsmedia:"Windows\u30e1\u30c7\u30a3\u30a2",realmedia:"realmedia",shockwave:"shockwave",audio:"\u30aa\u30fc\u30c7\u30a3\u30aa",video:"\u52d5\u753b","html5_video_options":"HTML5 Video\u306e\u30aa\u30d7\u30b7\u30e7\u30f3",altsource1:"\u4ee3\u66ff\u30bd\u30fc\u30b91",altsource2:"\u4ee3\u66ff\u30bd\u30fc\u30b92",preload:"preload\u5c5e\u6027",poster:"poster\u5c5e\u6027",source:"HTML","html5_audio_options":"Audio \u30aa\u30d7\u30b7\u30e7\u30f3","preload_none":"\u5148\u8aad\u307f\u3057\u306a\u3044","preload_metadata":"\u52d5\u753b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u5148\u8aad\u307f","preload_auto":"\u30e6\u30fc\u30b6\u30fc\u306e\u30d6\u30e9\u30a6\u30b6\u30fc\u306b\u5f93\u3046",iframe:"iframe",embeddedaudio:"\u57cb\u3081\u8fbc\u307f\u97f3\u58f0"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ka_dlg.js
new file mode 100644
index 000000000..e84713166
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.media_dlg',{list:"\u10e9\u10d0\u10db\u10dd\u10dc\u10d0\u10d7\u10d5\u10d0\u10da\u10d8",file:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8",advanced:"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7",general:"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd",title:"\u10d9\u10da\u10d8\u10de\u10d8\u10e1 \u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8","align_top_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d6\u10d4\u10d3\u10d0 \u10d9\u10e3\u10d7\u10ee\u10d4","align_center":"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d8","align_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_bottom":"\u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_top":"\u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","qt_stream_warn":"\u10dc\u10d0\u10d9\u10d0\u10d3\u10dd\u10d5\u10d0\u10dc\u10d8 rtsp \u10e0\u10d4\u10e1\u10e3\u10e0\u10e1\u10d4\u10d1\u10d8 \u10e3\u10dc\u10d3\u10d0 \u10e9\u10d0\u10d0\u10db\u10d0\u10e2\u10dd\u10d7 QT Src \u10d5\u10d4\u10da\u10e8\u10d8, \"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\" \u10d2\u10d5\u10d4\u10e0\u10d3\u10d6\u10d4.\n\u10ee\u10dd\u10da\u10dd \u10d0\u10e0\u10d0 \u10dc\u10d0\u10d9\u10d0\u10d3\u10dd\u10d5\u10d0\u10dc\u10d8 \u10d5\u10d4\u10e0\u10e1\u10d8\u10d0 - Src \u10d5\u10d4\u10da\u10e8\u10d8.",qtsrc:"QT Src",progress:"\u10de\u10e0\u10dd\u10d2\u10e0\u10d4\u10e1\u10d8",sound:"\u10ee\u10db\u10d0",swstretchvalign:"\u10d5\u10d4\u10e0\u10e2. \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0 \u10d2\u10d0\u10ec\u10d4\u10da\u10d5\u10d8\u10d7",swstretchhalign:"\u10f0\u10dd\u10e0\u10d8\u10d6. \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0 \u10d2\u10d0\u10ec\u10d4\u10da\u10d5\u10d8\u10d7",swstretchstyle:"\u10d2\u10d0\u10ec\u10d4\u10da\u10d5\u10d8\u10e1 \u10e1\u10e2\u10d8\u10da\u10d8",scriptcallbacks:"\u10e1\u10e5\u10e0\u10d8\u10de\u10e2\u10d8\u10e1 \u10db\u10ee\u10d0\u10e0\u10d3\u10d0\u10ed\u10d4\u10e0\u10d0","align_top_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d6\u10d4\u10d3\u10d0 \u10d9\u10e3\u10d7\u10ee\u10d4",uimode:"\u10d8\u10dc\u10e2\u10d4\u10e0\u10e4\u10d4\u10d8\u10e1\u10d8\u10e1 \u10e0\u10d4\u10df\u10d8\u10db\u10d8",rate:"\u10e0\u10d4\u10d8\u10e2\u10d8\u10dc\u10d2\u10d8",playcount:"\u10dc\u10d0\u10ee\u10d5\u10d4\u10d1\u10d8\u10e1 \u10db\u10d7\u10d5\u10da\u10d4\u10da\u10d8",defaultframe:"\u10db\u10d7\u10d0\u10d5\u10d0\u10e0\u10d8 \u10d9\u10d0\u10d3\u10e0\u10d8",currentposition:"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10d0",currentmarker:"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10db\u10d0\u10e0\u10d9\u10d4\u10e0\u10d8",captioningid:"\u10e1\u10e3\u10d1\u10e2\u10d8\u10e2\u10e0\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8",baseurl:"\u10e1\u10d0\u10d1\u10d0\u10d6\u10d8\u10e1\u10dd \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8",balance:"\u10d1\u10d0\u10da\u10d0\u10dc\u10e1\u10d8",windowlessvideo:"\u10e4\u10d0\u10dc\u10ef\u10e0\u10d8\u10e1 \u10d5\u10d8\u10d3\u10d4\u10dd",stretchtofit:"\u10e4\u10d0\u10dc\u10ef\u10e0\u10d8\u10e1 \u10d6\u10dd\u10db\u10d0\u10d6\u10d4",mute:"\u10ee\u10db\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4",invokeurls:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10eb\u10d0\u10ee\u10d4\u10d1\u10d0",fullscreen:"\u10db\u10d7\u10d4\u10da \u10d4\u10d9\u10e0\u10d0\u10dc\u10d6\u10d4",enabled:"\u10e9\u10d0\u10e0\u10d7\u10e3\u10da\u10d8\u10d0",autostart:"\u10d0\u10d5\u10e2\u10dd\u10d2\u10d0\u10e8\u10d5\u10d4\u10d1\u10d0",volume:"\u10ee\u10db\u10d0",target:"\u10db\u10d8\u10d6\u10d0\u10dc\u10d8",qtsrcchokespeed:"\u10e1\u10d8\u10ee\u10e8\u10d8\u10e0\u10d4",href:"\u10d1\u10db\u10e3\u10da\u10d8",endtime:"\u10d3\u10d0\u10e1\u10e0\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10d3\u10e0\u10dd",starttime:"\u10d3\u10d0\u10ec\u10e7\u10d4\u10d1\u10d8\u10e1 \u10d3\u10e0\u10dd",enablejavascript:"JavaScript-\u10d8\u10e1 \u10e9\u10d0\u10e0\u10d7\u10d5\u10d0",correction:"\u10d9\u10dd\u10e0\u10d4\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4",targetcache:"\u10e5\u10d4\u10e8\u10d8",playeveryframe:"\u10e7\u10d5\u10d4\u10da\u10d0 \u10d9\u10d0\u10d3\u10e0\u10d8\u10e1 \u10d0\u10e1\u10d0\u10ee\u10d5\u10d0",kioskmode:"\u10d9\u10d8\u10dd\u10e1\u10d9\u10d8\u10e1 \u10e0\u10d4\u10df\u10d8\u10db\u10d8",controller:"\u10db\u10d0\u10e0\u10d7\u10d5\u10d0",menu:"\u10db\u10d4\u10dc\u10d8\u10e3\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0",loop:"\u10d2\u10d0\u10db\u10d4\u10dd\u10e0\u10d4\u10d1\u10d0",play:"\u10d0\u10d5\u10e2\u10dd\u10d2\u10d0\u10e8\u10d5\u10d4\u10d1\u10d0",hspace:"\u10f0\u10dd\u10e0\u10d8\u10d6. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",vspace:"\u10d5\u10d4\u10e0\u10e2. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","class_name":"\u10d9\u10da\u10d0\u10e1\u10d8",name:"\u10e1\u10d0\u10ee\u10d4\u10da\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0",id:"\u10d8\u10d3\u10d4\u10dc\u10e2\u10d8\u10e4\u10d8\u10d9\u10d0\u10e2\u10dd\u10e0\u10d8",type:"\u10e2\u10d8\u10de\u10d8",size:"\u10d6\u10dd\u10db\u10d4\u10d1\u10d8",preview:"\u10ec\u10d8\u10dc\u10d0\u10e1\u10ec\u10d0\u10e0\u10d8 \u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10d4\u10e0\u10d4\u10d1\u10d0","constrain_proportions":"\u10de\u10e0\u10dd\u10de\u10dd\u10e0\u10ea\u10d8\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10dc\u10d0\u10e0\u10e9\u10e3\u10dc\u10d4\u10d1\u10d0",controls:"\u10db\u10d0\u10e0\u10d7\u10d5\u10d0",numloop:"\u10d2\u10d0\u10db\u10d4\u10dd\u10e0\u10d4\u10d1\u10d0\u10d7\u10d0 \u10e0\u10d8\u10ea\u10ee\u10d5\u10d8",console:"\u10d9\u10dd\u10dc\u10e1\u10dd\u10da\u10d8",cache:"\u10e5\u10d4\u10e8\u10d8",autohref:"\u10d0\u10d5\u10e2\u10dd \u10d1\u10db\u10e3\u10da\u10d8",liveconnect:"SWLiveConnect",flashvars:"Flas \u10d1\u10e0\u10eb\u10d0\u10dc\u10d4\u10d1\u10d4\u10d1\u10d8",base:"Base",bgcolor:"\u10e4\u10dd\u10dc\u10d8",wmode:"\u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0",salign:"\u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",align:"\u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",scale:"\u10db\u10d8\u10d3\u10d0\u10db\u10dd",quality:"\u10ee\u10d0\u10e0\u10d8\u10e1\u10ee\u10d8",shuffle:"\u0412 \u0440\u0430\u0437\u0431\u0440\u043e\u0441",prefetch:"\u10d0\u10db\u10dd\u10d9\u10e0\u10d4\u10e4\u10d0",nojava:"Java-\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4",maintainaspect:"\u10d6\u10dd\u10db\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10ee\u10e1\u10dd\u10d5\u10e0\u10d4\u10d1\u10d0",imagestatus:"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10e1\u10e2\u10d0\u10e2\u10e3\u10e1\u10d8",center:"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d8",autogotourl:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d6\u10d4 \u10d0\u10d5\u10e2\u10dd \u10d2\u10d0\u10d3\u10d0\u10e1\u10d5\u10da\u10d0","shockwave_options":"Shockwave \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","rmp_options":"Real Media \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","wmp_options":"Windows Media \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","qt_options":"Quicktime \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","flash_options":"Flash \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",hidden:"\u10d3\u10d0\u10e4\u10d0\u10e0\u10e3\u10da\u10d8","align_bottom_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10e3\u10d7\u10ee\u10d4","align_bottom_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10e3\u10d7\u10ee\u10d4","html5_video_options":"HTML5-\u10d5\u10d8\u10d3\u10d4\u10dd\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",altsource1:"\u10d0\u10da\u10e2\u10d4\u10e0\u10dc\u10d0\u10e2\u10d8\u10e3\u10da\u10d8 \u10ec\u10e7\u10d0\u10e0\u10dd 1",altsource2:"\u10d0\u10da\u10e2\u10d4\u10e0\u10dc\u10d0\u10e2\u10d8\u10e3\u10da\u10d8 \u10ec\u10e7\u10d0\u10e0\u10dd 2",preload:"\u10ec\u10d8\u10dc\u10d0\u10e1\u10ec\u10d0\u10e0\u10d8 \u10e9\u10d0\u10db\u10dd\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d0",poster:"\u10de\u10dd\u10e1\u10e2\u10d4\u10e0\u10d8",source:"\u10ec\u10e7\u10d0\u10e0\u10dd","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/kl_dlg.js
new file mode 100644
index 000000000..4fb966224
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/km_dlg.js
new file mode 100644
index 000000000..31f2f0710
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.media_dlg',{list:"\u1794\u1789\u17d2\u1787\u17b8",file:"\u17af\u1780\u179f\u17b6\u179a/\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u00a0URL",advanced:"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb",general:"\u1791\u17bc\u1791\u17c5",title:"\u1794\u1789\u17d2\u1785\u17bc\u179b / \u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1798\u17c1\u178c\u17c0\u1794\u1784\u17d2\u1780\u1794\u17cb","align_top_left":"\u179b\u17be\u1786\u17d2\u179c\u17c1\u1784","align_center":"\u1780\u178e\u17d2\u178a\u17b6\u179b","align_left":"\u1786\u17d2\u179c\u17c1\u1784","align_bottom":"\u1794\u17b6\u178f","align_right":"\u179f\u17d2\u178a\u17b6\u17c6","align_top":"\u1780\u17c6\u1796\u17bc\u179b","qt_stream_warn":"\u1794\u17d2\u179a\u1797\u1796\u179f\u17d2\u1791\u17d2\u179a\u17b8\u1798 rtsp (\u1796\u17b7\u1792\u17b8\u1780\u17b6\u179a\u1794\u1784\u17d2\u17a0\u17bc\u179a\u1796\u17c1\u179b\u1796\u17b7\u178f)\u1782\u17bd\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u1793\u17d2\u1790\u17c2\u1798\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u179c\u17b6\u179b QT Src \u1780\u17d2\u179a\u17c4\u1798\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb\u00a0\u17d4n\u179f\u17d2\u179a\u1794\u1782\u17d2\u1793\u17b6\u1793\u17c1\u17c7 \u17a2\u17d2\u1793\u1780\u1782\u17bd\u179a\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17c6\u178e\u17c2\u1798\u17b7\u1793\u1798\u17c2\u1793\u179f\u17d2\u1791\u17d2\u179a\u17b8\u1798\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u179c\u17b6\u179b\u1794\u17d2\u179a\u1797\u1796 Src\u00a0\u17d4\"",qtsrc:"\u1794\u17d2\u179a\u1797\u1796 QT",progress:"\u179c\u178c\u17d2\u178d\u1793\u1797\u17b6\u1796",sound:"\u179f\u1798\u17d2\u179b\u17c1\u1784",swstretchvalign:"\u1791\u17b6\u1789\u178f\u1798\u17d2\u179a\u17b9\u1798\u1794\u1789\u17d2\u1788\u179a",swstretchhalign:"\u1791\u17b6\u1789\u178f\u1798\u17d2\u179a\u17b9\u1798\u1795\u17d2\u178a\u17c1\u1780",swstretchstyle:"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798\u1791\u17b6\u1789\u179c\u17c2\u1784",scriptcallbacks:"\u179f\u17d2\u1782\u17d2\u179a\u17b8\u1794\u17a0\u17c5\u1798\u1780\u179c\u17b7\u1789","align_top_right":"\u179b\u17be\u179f\u17d2\u178a\u17b6\u17c6",uimode:"\u1798\u17c9\u17bc\u178a UI",rate:"\u17a2\u178f\u17d2\u179a\u17b6",playcount:"\u1785\u17c6\u1793\u17bd\u1793\u178a\u1784\u1785\u17b6\u1780\u17cb",defaultframe:"\u179f\u1793\u17d2\u179b\u17b9\u1780\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798",currentposition:"\u1791\u17b8\u178f\u17b6\u17c6\u1784\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793",currentmarker:"\u1785\u17c6\u178e\u17b6\u17c6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793",captioningid:"\u179f\u179b.\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u178f\u17bc\u1785",baseurl:"URL\u00a0\u1782\u17c4\u179b",balance:"\u179f\u1798\u178f\u17bb\u179b\u17d2\u1799",windowlessvideo:"\u1797\u17b6\u1796\u1799\u1793\u17d2\u178f\u1782\u17d2\u1798\u17b6\u1793\u1794\u1784\u17d2\u17a2\u17bd\u1785",stretchtofit:"\u1791\u17b6\u1789\u17b1\u17d2\u1799\u179f\u1798",mute:"\u1794\u17b7\u1791\u179f\u1798\u17d2\u179b\u17c1\u1784",invokeurls:"\u17a0\u17c5 URLs",fullscreen:"\u1796\u17c1\u1789\u17a2\u17c1\u1780\u17d2\u179a\u1784\u17cb",enabled:"\u1794\u17b6\u1793\u1794\u17be\u1780\u1794\u17d2\u179a\u17be",autostart:"\u179f\u17d2\u179c\u17d0\u1799\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178a\u17be\u1798",volume:"\u1780\u1798\u17d2\u179a\u17b7\u178f\u179f\u1798\u17d2\u179b\u17c1\u1784",target:"\u1782\u17c4\u179b\u178a\u17c5",qtsrcchokespeed:"\u1794\u1784\u17d2\u17a2\u1793\u17cb\u179b\u17d2\u1794\u17bf\u1793",href:"\u178f\u17c6\u178e\u1781\u17d2\u1796\u179f\u17cb",endtime:"\u179c\u17c1\u179b\u17b6\u1794\u1789\u17d2\u1785\u1794\u17cb",starttime:"\u179c\u17c1\u179b\u17b6\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178a\u17be\u1798",enablejavascript:"\u1794\u17be\u1780\u1794\u17d2\u179a\u17be\u00a0JavaScript",correction:"\u1782\u17d2\u1798\u17b6\u1793\u1780\u17b6\u179a\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c",targetcache:"\u1783\u17d2\u179b\u17b6\u17c6\u1784\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1782\u17c4\u179b\u178a\u17c5",playeveryframe:"\u1785\u17b6\u1780\u17cb\u1782\u17d2\u179a\u1794\u17cb\u179f\u1793\u17d2\u179b\u17b9\u1780",kioskmode:"\u1798\u17c9\u17bc\u178a Kiosk",controller:"\u1794\u17d2\u179a\u178a\u17b6\u1794\u17cb\u1794\u1789\u17d2\u1787\u17b6",menu:"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1798\u17c9\u17ba\u1793\u17bb\u1799",loop:"\u179a\u1784\u17d2\u179c\u17b7\u179b\u1787\u17bb\u17c6",play:"\u1785\u17b6\u1780\u17cb\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7",hspace:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1795\u17d2\u178a\u17c1\u1780",vspace:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1794\u1789\u17d2\u1788\u179a","class_name":"\u1790\u17d2\u1793\u17b6\u1780\u17cb",name:"\u1788\u17d2\u1798\u17c4\u17c7",id:"\u179b\u179f.",type:"\u1794\u17d2\u179a\u1797\u17c1\u1791",size:"\u179c\u17b7\u1798\u17b6\u178f\u17d2\u179a",preview:"\u1798\u17be\u179b\u1787\u17b6\u1798\u17bb\u1793","constrain_proportions":"\u1794\u1784\u17d2\u1781\u17c6\u17b2\u17d2\u1799\u1798\u17b6\u1793\u179f\u1798\u17b6\u1798\u17b6\u178f\u17d2\u179a",controls:"\u1794\u1789\u17d2\u1787\u17b6",numloop:"\u1785\u17c6\u1793\u17bd\u1793\u179a\u1784\u17d2\u179c\u17b7\u179b\u1787\u17bb\u17c6",console:"\u1786\u17b6\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784",cache:"\u1783\u17d2\u179b\u17b6\u17c6\u1784\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb",autohref:"\u179f\u17d2\u179c\u17d0\u1799HREF",liveconnect:"SW\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1795\u17d2\u1791\u17b6\u179b\u17cb",flashvars:"\u17a2\u1790\u17c1\u179a Flash",base:"\u1782\u17c4\u179b",bgcolor:"\u1795\u17d2\u1791\u17c2\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799",wmode:"\u1798\u17c9\u17bc\u178a\u1794\u1784\u17d2\u17a2\u17bd\u1785",salign:"\u178f\u1798\u17d2\u179a\u17b9\u1798\u1787\u17d2\u179a\u17bb\u1784",align:"\u178f\u1798\u17d2\u179a\u17b9\u1798",scale:"\u1798\u17b6\u178f\u17d2\u179a\u178a\u17d2\u178b\u17b6\u1793",quality:"\u1782\u17bb\u178e\u1797\u17b6\u1796",shuffle:"\u1794\u1784\u17d2\u17a2\u17bc\u179f",prefetch:"\u1799\u1780\u1798\u17bb\u1793",nojava:"\u1782\u17d2\u1798\u17b6\u1793 java",maintainaspect:"\u179a\u1780\u17d2\u179f\u17b6\u179f\u1798\u17b6\u1798\u17b6\u178f\u17d2\u179a",imagestatus:"\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u179a\u17bc\u1794\u1797\u17b6\u1796",center:"\u1780\u178e\u17d2\u178a\u17b6\u179b",autogotourl:"\u179f\u17d2\u179c\u17d0\u1799\u1791\u17c5\u1780\u17b6\u1793\u17cb URL","shockwave_options":"\u1787\u1798\u17d2\u179a\u17be\u179f Shockwav","rmp_options":"\u1787\u1798\u17d2\u179a\u17be\u179f\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1785\u17b6\u1780\u17cb Real Media","wmp_options":"\u1787\u1798\u17d2\u179a\u17be\u179f\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1785\u17b6\u1780\u17cb Window Media","qt_options":"\u1787\u1798\u17d2\u179a\u17be\u179f Quicktime","flash_options":"\u1787\u1798\u17d2\u179a\u17be\u179f Flash",hidden:"\u1794\u17c6\u1796\u17bd\u1793","align_bottom_left":"\u1780\u17d2\u179a\u17c4\u1798\u1786\u17d2\u179c\u17c1\u1784","align_bottom_right":"\u1780\u17d2\u179a\u17c4\u1798\u179f\u17d2\u178a\u17b6\u17c6",flash:"\u17a0\u17d2\u179c\u17d2\u179b\u17b6\u179f\u17cb",quicktime:"\u1783\u17d2\u179c\u17b8\u1783\u1790\u17b6\u1798","embedded_audio_options":"\u1787\u1798\u17d2\u179a\u17be\u179f\u1794\u1784\u17d2\u1780\u1794\u17cb\u179f\u1798\u17d2\u179b\u17c1\u1784",windowsmedia:"\u179c\u17b8\u1793\u178a\u17bc\u1798\u17c1\u178c\u17c0",realmedia:"\u1798\u17c1\u178c\u17c0\u1796\u17b7\u178f",shockwave:"\u179f\u1781\u17cb\u179c\u17c1\u179c",audio:"\u179f\u1798\u17d2\u179b\u17c1\u1784",video:"\u1797\u17b6\u1796\u1799\u1793\u17d2\u178f","html5_video_options":"\u1787\u1798\u17d2\u179a\u17be\u179f\u1797\u17b6\u1796\u1799\u1793\u17d2\u178f HTML5",altsource1:"\u1794\u17d2\u179a\u1797\u1796\u1787\u17c6\u1793\u17bd\u179f\u17e1",altsource2:"\u1794\u17d2\u179a\u1797\u1796\u1787\u17c6\u1793\u17bd\u179f\u17e2",preload:"\u1795\u17d2\u1791\u17bb\u1780\u1787\u17b6\u1798\u17bb\u1793",poster:"\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1795\u17d2\u179f\u1796\u17d2\u179c\u1795\u17d2\u179f\u17b6\u1799",source:"\u1794\u17d2\u179a\u1797\u1796","html5_audio_options":"\u1787\u1798\u17d2\u179a\u17be\u179f\u179f\u1798\u17d2\u179b\u17c1\u1784","preload_none":"\u1780\u17bb\u17c6\u1795\u17d2\u1791\u17bb\u1780\u1787\u17b6\u1798\u17bb\u1793","preload_metadata":"\u1795\u17d2\u1791\u17bb\u1780\u1798\u17c1\u178f\u17b6\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u1797\u17b6\u1796\u1799\u1793\u17d2\u178f\u1787\u17b6\u1798\u17bb\u1793","preload_auto":"\u1791\u17bb\u1780\u17b2\u17d2\u1799\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u179a\u17bb\u1780\u179a\u1780\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u179f\u1798\u17d2\u179a\u17c1\u1785",iframe:"\u17a2\u17b6\u1799\u17a0\u17d2\u179c\u17d2\u179a\u17c1\u1798",embeddedaudio:"\u179f\u1798\u17d2\u179b\u17c1\u1784\u1794\u1784\u17d2\u1780\u1794\u17cb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ko_dlg.js
new file mode 100644
index 000000000..1b6848747
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.media_dlg',{list:"\ubaa9\ub85d",file:"\ud30c\uc77c/URL",advanced:"\uace0\uae09",general:"\uc77c\ubc18",title:"\ubbf8\ub514\uc5b4 \uc0bd\uc785/\ud3b8\uc9d1","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"JavaScript\ub97c \ud5c8\uac00",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"\uba54\ub274 \ud45c\uc2dc",loop:"\uc5f0\uc18d \uc7ac\uc0dd",play:"\uc790\ub3d9 \uc7ac\uc0dd",hspace:"\uc88c\uc6b0 \uc5ec\ubc31",vspace:"\uc0c1\ud558 \uc5ec\ubc31","class_name":"Class",name:"Name",id:"Id",type:"\ud0c0\uc785",size:"\ud06c\uae30",preview:"\ubbf8\ub9ac\ubcf4\uae30","constrain_proportions":"\uc885\ud6a1\ube44 \uc720\uc9c0",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"\uc2a4\ucf00\uc77c",quality:"\ud488\uc9c8",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","embedded_audio_options":"Embedded Audio Options","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/kz_dlg.js
new file mode 100644
index 000000000..81d634ac3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right",flash:"",quicktime:"","embedded_audio_options":"Embedded Audio Options",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lb_dlg.js
new file mode 100644
index 000000000..1eab32287
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.media_dlg',{list:"L\u00ebscht",file:"Datei/URL",advanced:"Erweidert",general:"Allgemeng",title:"Multimedia-Inhalt abannen/beaarbechten","align_top_left":"Uewe L\u00e9nks","align_center":"Zentr\u00e9iert","align_left":"L\u00e9nks","align_bottom":"\u00cbnnen","align_right":"Riets","align_top":"Uewen","qt_stream_warn":"An den erweiderten Astellunge sollten am Feld \'QT Src\' gestreamte RTSP Ressourcen b\u00e4igesat ginn.\nZous\u00e4tzlech sollt Dir do och eng net-gestreamte Ressource uginn.",qtsrc:"QT Src",progress:"Fortschr\u00ebtt",sound:"Toun",swstretchvalign:"Stretch V-Ausriichtung",swstretchhalign:"Stretch H-Ausriichtung",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Uewe Riets",uimode:"UI Modus",rate:"Quote",playcount:"Zieler",defaultframe:"Frame-Virastellung",currentposition:"Aktuell Positioun",currentmarker:"Aktuelle Marker",captioningid:"Beschr\u00ebftungs Id",baseurl:"Basis-URL",balance:"Balance",windowlessvideo:"F\u00ebnsterlose Video",stretchtofit:"Breet un d\u00e9i verf\u00fcgbar Plaz upassen",mute:"Stomm",invokeurls:"URLen opruffen",fullscreen:"Vollbild",enabled:"Aktiv\u00e9iert",autostart:"Autostart",volume:"Lautst\u00e4rkt",target:"Zil",qtsrcchokespeed:"Vitesse drosselen",href:"Href",endtime:"Endz\u00e4itpunkt",starttime:"Startz\u00e4itpunkt",enablejavascript:"JavaScript aktiv\u00e9ieren",correction:"Ouni Korrektur",targetcache:"Zil zw\u00ebschesp\u00e4icheren",playeveryframe:"All Frame ofspillen",kioskmode:"Kioskmodus",controller:"Kontroller",menu:"Men\u00fc uweisen",loop:"Widderhuelung",play:"Automatesch Ofspillen",hspace:"Horizontalen Ofstand",vspace:"Vertikalen Ofstand","class_name":"CSS-Klass",name:"Numm",id:"Id",type:"Typ",size:"Ofmiessungen",preview:"Virschau","constrain_proportions":"Proportiounen erhalen",controls:"Steierung",numloop:"Unzuel Widderhuelungen",console:"Konsol",cache:"Zw\u00ebschesp\u00e4icher",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-Variablen",base:"Basis",bgcolor:"Hannergrond",wmode:"WMode",salign:"S-Ausriichtung",align:"Ausriichtung",scale:"Skal\u00e9ierung",quality:"Qualit\u00e9it",shuffle:"Zouf\u00e4lleg Widdergab",prefetch:"Prefetch",nojava:"Kee Java",maintainaspect:"Bildverh\u00e4ltnis b\u00e4ibehalen",imagestatus:"Bildstatus",center:"Zentr\u00e9iert",autogotourl:"Auto goto URL","shockwave_options":"Shockwave-Optiounen","rmp_options":"Optiounen fir Real Media Player","wmp_options":"Optiounen fir Windows Media Player","qt_options":"Quicktime-Optiounen","flash_options":"Flash-Optiounen",hidden:"Verstoppt","align_bottom_left":"\u00cbnne L\u00e9nks","align_bottom_right":"\u00cbnne Riets","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lt_dlg.js
new file mode 100644
index 000000000..14efd23f2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.media_dlg',{list:"S\u0105ra\u0161as",file:"Failas/URL",advanced:"I\u0161pl\u0117sta",general:"Bendra",title:"\u012eterpti/redaguoti integruot\u0105 daugialyp\u0119 terp\u0119","align_top_left":"Vir\u0161uje, kair\u0117je","align_center":"Centre","align_left":"Kair\u0117je","align_bottom":"Apa\u010dioje","align_right":"De\u0161in\u0117je","align_top":"Vir\u0161uje","qt_stream_warn":"Transliuojami rtsp i\u0161tekliai tur\u0117t\u0173 b\u016bti prid\u0117ti prie QT Src lauko \u201ePapildom\u0173 nustatym\u0173\u201c kortel\u0117je.\nTaip pat reikt\u0173 prid\u0117ti ir netransliuojam\u0105j\u0105 Src lauko versij\u0105.",qtsrc:"QT Src",progress:"Progresas",sound:"Garsas",swstretchvalign:"I\u0161tempti V-lygiavim\u0105",swstretchhalign:"I\u0161tempti H-lygiavim\u0105",swstretchstyle:"I\u0161tempti stili\u0173",scriptcallbacks:"Scenarijaus atgalinis atsakas","align_top_right":"Vir\u0161uje, de\u0161in\u0117je",uimode:"UI re\u017eimas",rate:"Da\u017enis",playcount:"Grojimo kartai",defaultframe:"Numatytas kadras",currentposition:"Dabartin\u0117 pozicija",currentmarker:"Dabartinis \u017eymeklis",captioningid:"Antra\u0161t\u0117s id",baseurl:"Prad\u017eios URL adresas",balance:"Balansas",windowlessvideo:"Vaizdas be lango",stretchtofit:"I\u0161tempti iki atitikimo",mute:"Nutildyti",invokeurls:"I\u0161kviesti URL adresus",fullscreen:"Viso ekrano re\u017eimas",enabled:"\u012ejungta",autostart:"Automatinis paleidimas",volume:"Garsis",target:"Paskirtis",qtsrcchokespeed:"Dusinimo greitis",href:"Adresas",endtime:"Pabaigos laikas",starttime:"Prad\u017eios laikas",enablejavascript:"\u012egalinti JavaScript",correction:"Joki\u0173 korekcij\u0173",targetcache:"Paskirties laikinoji talpykla",playeveryframe:"Paleisti kiekvien\u0105 kadr\u0105",kioskmode:"Kiosko re\u017eimas",controller:"Valdiklis",menu:"Rodyti meniu",loop:"Kartoti",play:"Automatinis paleidimas",hspace:"Horizontalus tarpas",vspace:"Vertikalus tarpas","class_name":"Klas\u0117",name:"Vardas",id:"Id",type:"Tipas",size:"I\u0161matavimai",preview:"Per\u017ei\u016bra","constrain_proportions":"Priverstin\u0117s proporcijos",controls:"Valdikliai",numloop:"Cikl\u0173 kiekis",console:"Konsol\u0117",cache:"Laikinoji talpykla",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash kintamieji",base:"Baz\u0117",bgcolor:"Fono spalva",wmode:"W-re\u017eimas",salign:"S-lygiavimas",align:"Lygiavimas",scale:"Mastelis",quality:"Kokyb\u0117",shuffle:"Atsitiktinis mai\u0161ymasis",prefetch:"I\u0161ankstinis duom. i\u0161rinkimas",nojava:"Be Java",maintainaspect:"I\u0161laikyti aspekt\u0105",imagestatus:"Paveiksl\u0117lio b\u016bsena",center:"Centre",autogotourl:"Automatinis \u0117jimas URL adresu","shockwave_options":"Shockwave nustatymai","rmp_options":"Real media player nustatymai","wmp_options":"Windows media player nustatymai","qt_options":"Quicktime nustatymai","flash_options":"Flash nustatymai",hidden:"Pasl\u0117pta","align_bottom_left":"Apa\u010dioje, kair\u0117je","align_bottom_right":"Apa\u010dioje, de\u0161in\u0117je",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Embedded Audio Options",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"HTML5 video nustatymai",altsource1:"Kitas video formatas 1",altsource2:"Kitas video formatas 2",preload:"Automati\u0161kai prad\u0117ti parsiuntim\u0105",poster:"Video paveiksl\u0117lis",source:"Kodo per\u017ei\u016bra","html5_audio_options":"Garso nustatymai","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Listi nuspresti vartotojo nar\u0161yklei",iframe:"iframe",embeddedaudio:"embeddedaydio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lv_dlg.js
new file mode 100644
index 000000000..0f662d515
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Nosaukums",id:"Id",type:"Tips",size:"Izm\u0113ri",preview:"Priek\u0161skat\u012bjums","constrain_proportions":"Constrain proportions",controls:"Kontroles",numloop:"Num loops",console:"Console",cache:"Ke\u0161atmi\u0146a",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Fons",wmode:"WMode",salign:"SAlign",align:"L\u012bdzin\u0101jums",scale:"Scale",quality:"Kvalit\u0101te",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Bildes status",center:"Centr\u0113ts",autogotourl:"Auto goto URL","shockwave_options":"Shockwave opcijas","rmp_options":"Real Media Player opcijas","wmp_options":"Windows Media Player opcijas","qt_options":"Quicktime opcijas","flash_options":"Flash opcijas",hidden:"Pasl\u0113pts","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","embedded_audio_options":"Ska\u0146as izv\u0113les","html5_video_options":"HTML5 video izv\u0113les",altsource1:"Cits video form\u0101ts 1",altsource2:"Cits video form\u0101ts 2",preload:"Autom\u0101tiski uzs\u0101kt lejupl\u0101di",poster:"Bilde",source:"Koda caurskate","html5_audio_options":"Ska\u0146as uzst\u0101d\u012bjumi","preload_none":"Neuzs\u0101kt autom\u0101tisku lejupl\u0101di","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/mk_dlg.js
new file mode 100644
index 000000000..85afd9fed
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.media_dlg',{list:"\u041b\u0438\u0441\u0442\u0430",file:"\u0414\u0430\u0442\u043e\u0442\u0435\u043a\u0430/\u0423\u0420\u041b",advanced:"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e",general:"\u041e\u0441\u043d\u043e\u0432\u043d\u043e",title:"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0432\u0433\u0440\u0430\u0434\u0435\u043d\u0438 \u043c\u0435\u0434\u0438\u0443\u043c\u0438","align_top_left":"\u041d\u0430\u0458\u0433\u043e\u0440\u0435 \u043b\u0435\u0432\u043e","align_center":"\u0421\u0440\u0435\u0434\u0438\u043d\u0430","align_left":"\u041b\u0435\u0432\u043e","align_bottom":"\u041d\u0430\u0458\u0434\u043e\u043b\u0435","align_right":"\u0414\u0435\u0441\u043d\u043e","align_top":"\u041d\u0430\u0458\u0433\u043e\u0440\u0435","qt_stream_warn":"RTSP \u0440\u0435\u0441\u0443\u0440\u0441\u0438\u0442\u0435 \u0442\u0440\u0435\u0431\u0430 \u0434\u0430 \u0441\u0435 \u0434\u043e\u0434\u0430\u0434\u0435 \u043d\u0430 Q\u0422 \u0438\u0437\u0432\u043e\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0430 \u043f\u043e\u0434 Advanced \u0442\u0430\u0431\u043e\u0442. \n\u041c\u043e\u0436\u0435, \u0438\u0441\u0442\u043e \u0442\u0430\u043a\u0430, \u0442\u0440\u0435\u0431\u0430 \u0434\u0430 \u0441\u0435 \u0434\u043e\u0434\u0430\u0434\u0435 \u043d\u0435 \u0435\u043c\u0438\u0442\u0443\u0432\u0430\u043d\u0430 \u0432\u0435\u0440\u0437\u0438\u0458\u0430 \u043d\u0430 \u043f\u043e\u043b\u0435\u0442\u043e Src ..",qtsrc:"QT \u0438\u0437\u0432\u043e\u0440",progress:"\u041d\u0430\u043f\u0440\u0435\u0434\u043e\u043a",sound:"\u0417\u0432\u0443\u043a",swstretchvalign:"\u0420\u0430\u0448\u0438\u0440\u0438 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0430",swstretchhalign:"\u0420\u0430\u0448\u0438\u0440\u0438 \u043f\u043e \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0430",swstretchstyle:"\u0420\u0430\u0448\u0438\u0440\u0435\u043d \u0441\u0442\u0438\u043b",scriptcallbacks:"Script callbacks","align_top_right":"\u0413\u043e\u0440\u0435 \u0434\u0435\u0441\u043d\u043e",uimode:"UI \u043c\u043e\u0434",rate:"\u0411\u0440\u0437\u0438\u043d\u0430",playcount:"\u0411\u0440\u043e\u0458 \u043d\u0430 \u0438\u0433\u0440\u0438",defaultframe:"\u041f\u0440\u0435\u0432\u0437\u0435\u043c\u0435\u043d\u0430 \u0440\u0430\u043c\u043a\u0430",currentposition:"\u041c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0458\u0430",currentmarker:"\u041c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u0435\u043d \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u0414\u043e\u0434\u0435\u043b\u0443\u0432\u0430\u043d\u0458\u0435 \u0438\u043c\u0435 \u043d\u0430 ID",baseurl:"\u041e\u0441\u043d\u043e\u0432\u0435\u043d \u0423\u0420\u041b",balance:"\u0420\u0430\u043c\u043d\u043e\u0442\u0435\u0436\u0430",windowlessvideo:"Windowless video",stretchtofit:"\u0420\u0430\u0448\u0438\u0440\u0438 \u0434\u043e \u043a\u0440\u0430\u0458",mute:"\u0411\u0435\u0437 \u0433\u043b\u0430\u0441",invokeurls:"\u041f\u043e\u0432\u0438\u043a\u0430\u0458 \u0423\u0420\u041b-\u0430",fullscreen:"\u0426\u0435\u043b \u0435\u043a\u0440\u0430\u043d",enabled:"\u041e\u0432\u043e\u0437\u043c\u043e\u0436\u0438",autostart:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u0438 \u0441\u0442\u0430\u0440\u0442",volume:"\u0413\u043b\u0430\u0441\u043d\u043e\u0441\u0442",target:"\u0426\u0435\u043b",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u0412\u0440\u0435\u043c\u0435 \u043d\u0430 \u043a\u0440\u0430\u0458",starttime:"\u0412\u0440\u0435\u043c\u0435 \u043d\u0430 \u043f\u043e\u0447\u0435\u0442\u043e\u043a",enablejavascript:"\u041e\u0432\u043e\u0437\u043c\u043e\u0436\u0438 JavaScript",correction:"\u0411\u0435\u0437 \u043a\u043e\u0440\u0435\u043a\u0446\u0438\u0458\u0430",targetcache:"\u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0430\u0442\u0430 \u0446\u0435\u043b",playeveryframe:"\u041f\u0443\u0448\u0442\u0438\u0458\u0430 \u0441\u0435\u043a\u043e\u0458\u0430 \u0440\u0430\u043c\u043a\u0430",kioskmode:"Kiosk \u043c\u043e\u0434",controller:"\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440",menu:"\u041f\u043e\u043a\u0430\u0436\u0438 \u043c\u0435\u043d\u0438",loop:"\u0408\u0430\u043c\u043a\u0430",play:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u0438 \u043e\u0434\u0438\u0433\u0440\u0430\u0458",hspace:"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u043c\u0435\u0441\u0442\u043e",vspace:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043c\u0435\u0441\u0442\u043e","class_name":"\u041a\u043b\u0430\u0441\u0430",name:"\u0418\u043c\u0435",id:"\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0458\u0430 (Id)",type:"\u0422\u0438\u043f",size:"\u0414\u0438\u043c\u0435\u043d\u0437\u0438\u0438",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434","constrain_proportions":"\u0417\u0430\u0434\u0440\u0436\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",controls:"\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0438",numloop:"\u0411\u0440\u043e\u0458 \u043d\u0430 \u0458\u0430\u043c\u043a\u0438",console:"\u041a\u043e\u043d\u0437\u043e\u043b\u0430",cache:"\u041a\u0435\u0448",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0438",base:"\u041e\u0441\u043d\u043e\u0432\u0430",bgcolor:"\u041f\u043e\u0437\u0430\u0434\u0438\u043d\u0430",wmode:"WMode",salign:"SAlign",align:"\u041f\u043e\u0430\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435",scale:"\u0420\u0430\u0437\u043c\u0435\u0440",quality:"\u041a\u0432\u0430\u043b\u0438\u0442\u0435\u0442",shuffle:"\u041c\u0435\u0448\u0430\u0458",prefetch:"Prefetch",nojava:"\u041d\u0435\u043c\u0430 java",maintainaspect:"\u0410\u0441\u043f\u0435\u043a\u0442 \u043d\u0430 \u043e\u0434\u0440\u0436\u0443\u0432\u0430\u045a\u0435",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430",center:"\u0426\u0435\u043d\u0442\u0430\u0440/\u0441\u0440\u0435\u0434\u0438\u043d\u0430",autogotourl:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u0438 \u043e\u0434\u0438 \u043d\u0430 \u0423\u0420\u041b","shockwave_options":"\u041e\u043f\u0446\u0438\u0438 \u043d\u0430 Shockwave ","rmp_options":"\u041e\u043f\u0446\u0438\u0438 \u043d\u0430 Real media player","wmp_options":"\u041e\u043f\u0446\u0438\u0438 \u043d\u0435 Windows media player","qt_options":"\u041e\u043f\u0446\u0438\u0438 \u043d\u0430 Quicktime","flash_options":"\u041e\u043f\u0446\u0438\u0438 \u043d\u0430 Flash",hidden:"\u0421\u043e\u043a\u0440\u0438\u0435\u043d\u043e","align_bottom_left":"\u0414\u043e\u043b\u0435 \u043b\u0435\u0432\u043e","align_bottom_right":"\u0414\u043e\u043b\u0435 \u0434\u0435\u0441\u043d\u043e",flash:"flash",quicktime:"quicktime","embedded_audio_options":"\u0412\u0433\u0440\u0430\u0434\u0435\u043d\u0438 \u0430\u0443\u0434\u0438\u043e \u043e\u043f\u0446\u0438\u0438",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"\u0430\u0443\u0434\u0438\u043e",video:"\u0432\u0438\u0434\u0435\u043e","html5_video_options":"HTML5 \u0412\u0438\u0434\u0435\u043e \u043e\u043f\u0446\u0438\u0438",altsource1:"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0438\u0437\u0432\u043e\u0440 1",altsource2:"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0438\u0437\u0437\u0432\u043e\u0440 2",preload:"\u041d\u0430\u043b\u043e\u0436\u0438 \u043f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u043e",poster:"\u041f\u043e\u0441\u0442\u0435\u0440",source:"\u0418\u0437\u0432\u043e\u0440","html5_audio_options":"\u0410\u0443\u0434\u0438\u043e \u043e\u043f\u0446\u0438\u0438","preload_none":"\u0411\u0435\u0437 \u043f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u043e \u043d\u0430\u043b\u0430\u0433\u0430\u045a\u0435","preload_metadata":"\u041f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u043e \u043d\u0430\u043b\u043e\u0436\u0438 \u0432\u0438\u0434\u0435\u043e \u043c\u0435\u0442\u0430 \u043f\u043e\u0434\u0430\u0442\u043e\u0446\u0438","preload_auto":"\u041d\u0435\u043a\u0430 \u043e\u0434\u043b\u0443\u0447\u0438 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0447\u043a\u0438\u043e\u0442 \u043f\u0440\u0435\u043b\u0438\u0441\u0442\u0443\u0432\u0430\u0447",iframe:"iframe",embeddedaudio:"\u0432\u0433\u0440\u0430\u0434\u0435\u043d\u043e \u0430\u0443\u0434\u0438\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ml_dlg.js
new file mode 100644
index 000000000..22f4e5519
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/mn_dlg.js
new file mode 100644
index 000000000..49c2a52e1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.media_dlg',{list:"\u0416\u0430\u0433\u0441\u0430\u0430\u043b\u0442",file:"\u0424\u0430\u0439\u043b/URL",advanced:"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d",general:"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439",title:"\u041c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u0430\u0433\u0443\u0443\u043b\u0433\u0430 \u0431\u0443\u0443\u043b\u0433\u0430\u0445/ \u0437\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0445","align_top_left":"\u0417\u04af\u04af\u043d \u0434\u044d\u044d\u0434","align_center":"\u0413\u043e\u043b\u0434","align_left":"\u0417\u04af\u04af\u043d","align_bottom":"\u0414\u043e\u043e\u0440","align_right":"\u0411\u0430\u0440\u0443\u0443\u043d","align_top":"\u0414\u044d\u044d\u0440","qt_stream_warn":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e\u043d \u0434\u0430\u0445\u044c \'QT Src\' \u0442\u0430\u043b\u0431\u0430\u0440\u0442 \u0446\u0430\u0446\u0430\u0436 \u0431\u0443\u0439 rtsp \u043d\u04e9\u04e9\u0446\u0438\u0439\u0433 \u043e\u0440\u0443\u0443\u043b\u0436 \u04e9\u0433\u043d\u04e9.\n\u041c\u04e9\u043d \u0442\u0430 \u0442\u044d\u043d\u0434 \u0446\u0430\u0446\u0430\u0430\u0433\u04af\u0439 \u043d\u04e9\u04e9\u0446\u0438\u0439\u0433 \u043d\u044d\u043c\u044d\u0445 \u0445\u044d\u0440\u044d\u0433\u0442\u044d\u0439.",qtsrc:"QT Src",progress:"\u042f\u0432\u0446",sound:"\u0414\u0443\u0443",swstretchvalign:"Stretch V-\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",swstretchhalign:"Stretch H-\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"\u0411\u0430\u0440\u0443\u0443\u043d \u0434\u044d\u044d\u0434",uimode:"UI \u0433\u043e\u0440\u0438\u043c",rate:"Rate",playcount:"\u0422\u043e\u043e\u043b\u0443\u0443\u0440",defaultframe:"\u0424\u0440\u044d\u0439\u043c-\u04e9\u0433\u04e9\u0433\u0434\u043c\u04e9\u043b \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e",currentposition:"\u0418\u0434\u044d\u0432\u0445\u0442\u044d\u0439 \u0431\u0430\u0439\u0440\u043b\u0430\u043b",currentmarker:"\u0418\u0434\u044d\u0432\u0445\u0442\u044d\u0439 \u0442\u044d\u043c\u0434\u044d\u0433\u043b\u044d\u0433\u0447",captioningid:"Captioning id",baseurl:"\u04ae\u043d\u0434\u0441\u044d\u043d URL",balance:"\u0422\u044d\u043d\u0446\u0432\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442",windowlessvideo:"\u0426\u043e\u043d\u0445\u0433\u04af\u0439 \u0432\u0438\u0434\u0435\u043e",stretchtofit:"\u0425\u0430\u0440\u0443\u0443\u043b\u0430\u0445 \u043c\u0443\u0436\u0438\u0439\u0433 \u0441\u0443\u043b \u0431\u0430\u0439\u0433\u0430\u0430 \u0437\u0430\u0439\u0434 \u0442\u0430\u0430\u0440\u0443\u0443\u043b\u0430\u0445",mute:"\u0414\u0443\u0443\u0433\u04af\u0439",invokeurls:"\u0414\u0443\u0443\u0434\u0430\u0445 URLs",fullscreen:"\u0414\u044d\u043b\u0433\u044d\u0446 \u0434\u04af\u04af\u0440\u044d\u043d",enabled:"\u0418\u0434\u044d\u0432\u0445\u0442\u044d\u0439",autostart:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u044d\u0445\u043b\u044d\u043b",volume:"\u0414\u0443\u0443",target:"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u0422\u04e9\u0433\u0441\u04e9\u0445 \u0446\u0430\u0433",starttime:"\u042d\u0445\u043b\u044d\u0445 \u0446\u0430\u0433",enablejavascript:"JavaScript \u0438\u0434\u044d\u0432\u0445\u0436\u04af\u04af\u043b\u044d\u0445",correction:"\u0417\u0430\u0441\u0432\u0430\u0440\u0433\u04af\u0439",targetcache:"\u0417\u043e\u0440\u0438\u043b\u0433\u044b\u0433 \u0442\u04af\u0440 \u0445\u0430\u0434\u0433\u0430\u043b\u043d\u0430",playeveryframe:"\u0424\u0440\u044d\u0439\u043c \u0431\u04af\u0440\u0438\u0439\u0433 \u0442\u043e\u0433\u043b\u0443\u0443\u043b\u043d\u0430",kioskmode:"\u041a\u0438\u043e\u0441\u043a \u0433\u043e\u0440\u0438\u043c",controller:"Controller",menu:"\u0426\u044d\u0441 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445",loop:"\u0414\u0430\u0432\u0442\u0430\u043b\u0442",play:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0430\u0430\u0440 \u0442\u043e\u0433\u043b\u0443\u0443\u043b\u043d\u0430",hspace:"\u0425\u044d\u0432\u0442\u044d\u044d \u0430\u043b\u0441\u043b\u0430\u043b\u0442",vspace:"\u0411\u043e\u0441\u043e\u043e \u0430\u043b\u0441\u043b\u0430\u043b\u0442","class_name":"CSS-\u0430\u043d\u0433\u0438",name:"\u041d\u044d\u0440",id:"\u0422\u0442",type:"\u0422\u04e9\u0440\u04e9\u043b",size:"\u0425\u044d\u043c\u0436\u044d\u044d",preview:"\u041d\u044f\u0433\u0442\u043b\u0430\u0445","constrain_proportions":"\u0425\u0430\u0440\u044c\u0446\u0430\u0430\u0433 \u0431\u0430\u0440\u0438\u0445",controls:"\u0423\u0434\u0438\u0440\u0434\u043b\u0430\u0433\u0430",numloop:"\u0414\u0430\u0432\u0442\u0430\u0445 \u0442\u043e\u043e",console:"\u041a\u043e\u043d\u0441\u043e\u043b",cache:"\u0417\u0430\u0432\u0441\u0440\u044b\u043d \u0445\u0430\u0434\u0433\u0430\u043b\u0430\u0433\u0447",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"\u0424\u043b\u044d\u0439\u0448 \u0445\u0443\u0432\u044c\u0441\u0430\u0433\u0447",base:"\u0421\u0443\u0443\u0440\u044c",bgcolor:"\u0414\u044d\u0432\u0441\u0433\u044d\u0440",wmode:"WMode",salign:"S-\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",align:"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",scale:"\u0425\u0443\u0432\u0430\u0430\u0440\u0438\u043b\u0430\u043b\u0442",quality:"\u0427\u0430\u043d\u0430\u0440",shuffle:"\u0421\u0430\u043d\u0430\u043c\u0441\u0430\u0440\u0433\u04af\u0439\u0433\u044d\u044d\u0440 \u0442\u043e\u0433\u043b\u0443\u0443\u043b\u0430\u0445",prefetch:"Prefetch",nojava:"\u0416\u0430\u0432\u0430\u0433\u04af\u0439",maintainaspect:"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0445\u0430\u0440\u044c\u0446\u0430\u0430\u0433 \u0445\u0430\u0434\u0433\u0430\u043b\u0430\u043d\u0430",imagestatus:"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0442\u04e9\u043b\u04e9\u0432",center:"\u0413\u043e\u043b\u043b\u0443\u0443\u043b\u0441\u0430\u043d",autogotourl:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0430\u0430\u0440 \u043e\u0447\u0438\u0445 URL","shockwave_options":"Shockwave-\u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","rmp_options":"Real Media Player-\u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","wmp_options":"Windows Media Player-\u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","qt_options":"Quicktime-\u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","flash_options":"\u0424\u043b\u044d\u0439\u0448-\u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e",hidden:"\u0414\u0430\u043b\u0434\u0430\u043b\u0441\u0430\u043d","align_bottom_left":"\u0417\u04af\u04af\u043d \u0434\u043e\u043e\u0434","align_bottom_right":"\u0411\u0430\u0440\u0443\u0443\u043d \u0434\u043e\u043e\u0434","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ms_dlg.js
new file mode 100644
index 000000000..c73ae0a15
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.media_dlg',{list:"Senarai",file:"Fail/URL",advanced:"Lanjutan",general:"Am",title:"Masukkan / sunting media","align_top_left":"Kiri atas","align_center":"Tengah","align_left":"Kiri","align_bottom":"Bawah","align_right":"Kanan","align_top":"Atas",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch Selarian-Tegak",swstretchhalign:"Bentangan Selarian-Ufuk",swstretchstyle:"Gaya bentangan",scriptcallbacks:"Panggilan balik skrip","align_top_right":"Kanan atas",uimode:"Mod Grafik",rate:"Undi",playcount:"Kira",defaultframe:"Bingkai asal",currentposition:"Posisi semasa",currentmarker:"Penanda semasa",captioningid:"Tajuk id",baseurl:"URL dasar",balance:"Baki",windowlessvideo:"Tetingkap tanpa video",stretchtofit:"Bujurkan supaya sesuai",mute:"Bisu",invokeurls:"Panggil URL",fullscreen:"Skrin penuh",enabled:"Dibolehkan",autostart:"Auto mula",volume:"Ketinggian suara",target:"Sasaran",qtsrcchokespeed:"Kelajuan sumbatan",href:"Href",endtime:"Masa tamat",starttime:"Masa bermula",enablejavascript:"Bolehkan JavaScript",correction:"Tiada pembetulan",targetcache:"Sasaran tersembunyi",playeveryframe:"Main setiap bingkai",kioskmode:"Mode toko",controller:"Kendali",menu:"Tunjuk menu",loop:"Gelung",play:"Auto main",hspace:"Ruangan-Datar",vspace:"Ruangan-Tegak","class_name":"Kelas",name:"Nama",id:"Id",type:"Jenis",size:"Dimensi",preview:"Pratonton","constrain_proportions":"Kadar tahanan",controls:"Kendali",numloop:"Nombor gelungan",console:"Konsol",cache:"Tempat menyembunyikan",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Dasar",bgcolor:"Latar belakang",wmode:"WMod",salign:"SLuruskan",align:"Luruskan",scale:"Ukuran",quality:"Kualiti",shuffle:"Merangkak",prefetch:"Preambilan",nojava:"Java tidak dibenarkan",maintainaspect:"Pelihara aspek",imagestatus:"Status imej",center:"Tengah",autogotourl:"Auto pergi-ke URL","shockwave_options":"Shockwave","rmp_options":"Pemain Real media","wmp_options":"Pemain Windows media","qt_options":"Quicktime","flash_options":"Flash",hidden:"Tersorok","align_bottom_left":"Bawah kiri","align_bottom_right":"Bawah kanan","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/my_dlg.js
new file mode 100644
index 000000000..81d89cc8a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.media_dlg',{list:"\u1005\u102c\u101b\u1004\u103a\u1038",file:"\u1016\u102d\u102f\u1004\u103a/URL",advanced:"\u1021\u1011\u1030\u1038",general:"\u1021\u1031\u1011\u103d\u1031\u1011\u103d",title:"\u1019\u102e\u1012\u102e\u101a\u102c \u103c\u1019\u103e\u102f\u1015\u103a\u1011\u100a\u103a\u1037 / \u103c\u1015\u102f\u103c\u1015\u1004\u103a","align_top_left":"\u1011\u102d\u1015\u103a\u1006\u1036\u102f\u1038\u1018\u101a\u103a\u1018\u1000\u103a","align_center":"\u1021\u101c\u101a\u103a\u1017\u101f\u102d\u102f","align_left":"\u1018\u101a\u103a","align_bottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001","align_right":"\u100a\u102c\u1018\u1000\u103a","align_top":"\u1011\u102d\u1015\u103a\u1015\u102d\u102f\u1004\u103a\u1038","qt_stream_warn":"Streamed rtsp resources \u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1021\u1011\u1030\u1038 tab \u1031\u1021\u102c\u1000\u103a\u101b\u103e\u102d QT Src field \u1010\u103d\u1004\u103a \u1011\u100a\u103a\u1037\u101e\u1004\u103a\u1037\u101e\u100a\u103a\u104bn non streamed version \u1000\u102d\u102f\u101c\u100a\u103a\u1038 Src field.. \u1010\u103d\u1004\u103a \u1011\u100a\u103a\u1037\u1031\u1015\u1038\u101e\u1004\u103a\u1037\u101e\u100a\u103a\u104b",qtsrc:"QT SRC",progress:"\u101c\u102f\u1015\u103a\u1031\u1006\u102c\u1004\u103a\u1019\u103e\u102f \u1021\u1031\u103c\u1001\u1021\u1031\u1014",sound:"\u1021\u101e\u1036",swstretchvalign:"V-Align \u103c\u1016\u1004\u103a\u1037 \u1006\u103d\u1032\u1006\u1014\u103a\u1037",swstretchhalign:"H-Align \u103c\u1016\u1004\u103a\u1037 \u1006\u103d\u1032\u1006\u1014\u103a\u1037",swstretchstyle:"\u1006\u103d\u1032\u1006\u1014\u103a\u1037\u1019\u103e\u102f \u1005\u1010\u102d\u102f\u1004\u103a",scriptcallbacks:"Script callbacks","align_top_right":"\u1011\u102d\u1015\u103a\u1006\u1036\u102f\u1038 \u100a\u102c\u1018\u1000\u103a",uimode:"UI \u1019\u102f(\u1012\u103a)",rate:"\u1014\u103e\u102f\u1014\u103a\u1038",playcount:"\u1016\u103d\u1004\u103a\u1037\u101c\u103e\u1005\u103a\u1019\u103e\u102f \u1021\u1031\u101b\u1021\u1010\u103d\u1000\u103a",defaultframe:"\u1019\u1030\u101c \u1016\u101b\u102d\u1019\u103a",currentposition:"\u101c\u1000\u103a\u101b\u103e\u102d \u1031\u1014\u101b\u102c",currentmarker:"\u101c\u1000\u103a\u101b\u103e\u102d \u1021\u1019\u103e\u1010\u103a\u1021\u101e\u102c\u1038",captioningid:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1010\u1015\u103a\u103c\u1001\u1004\u103a\u1038 id",baseurl:"\u1021\u1031\u103c\u1001\u1001\u1036 URL",balance:"\u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f",windowlessvideo:"\u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1019\u1015\u102b\u1031\u101e\u102c \u1017\u103d\u102e\u1012\u102e\u101a\u102d\u102f",stretchtofit:"\u1021\u1036\u1037\u1000\u102d\u102f\u1000\u103a\u103c\u1016\u1005\u103a\u1031\u1005\u101b\u1014\u103a \u1006\u103d\u1032\u1006\u1014\u103a\u1037",mute:"\u1021\u101e\u1036\u1015\u102d\u1010\u103a",invokeurls:"\u1031\u1016\u102c\u103a\u103c\u1015 URL \u1019\u103b\u102c\u1038",fullscreen:"\u1005\u1000\u101b\u1004\u103a \u1021\u103c\u1015\u100a\u103a\u1037",enabled:"\u1016\u103d\u1004\u103a\u1037\u1011\u102c\u1038\u1031\u101e\u102c",autostart:"\u1021\u101c\u102d\u102f\u101c\u102d\u102f \u1005\u1016\u103d\u1004\u103a\u1037",volume:"\u1021\u101e\u1036 \u1021\u1010\u102d\u102f\u1038\u1021\u1000\u103b\u101a\u103a",target:"\u101b\u100a\u103a\u1019\u103e\u1014\u103a\u1038\u1001\u103b\u1000\u103a(\u1010\u102c\u1038\u1002\u1000\u103a)",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"\u1021\u1006\u1036\u102f\u1038\u101e\u1010\u103a\u1001\u103b\u102d\u1014\u103a",starttime:"\u1021\u1005\u103c\u1015\u102f\u1001\u103b\u102d\u1014\u103a",enablejavascript:"JavaScript \u1016\u103d\u1004\u103a\u1037\u101b\u1014\u103a",correction:"\u1021\u1019\u103e\u1014\u103a\u1019\u103c\u1015\u1004\u103a\u1015\u102b",targetcache:"\u1010\u102c\u1038\u1002\u1000\u103a cache",playeveryframe:"\u1016\u101b\u102d\u1019\u103a\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1016\u103d\u1004\u103a\u1037\u1015\u102b",kioskmode:"Kiosk \u1019\u102f(\u1012\u103a)",controller:"\u1011\u102d\u1014\u103a\u1038\u1001\u103b\u102f\u1015\u103a\u1001\u101c\u102f\u1015\u103a",menu:"\u1019\u102e\u1014\u1030\u1038\u1005\u102c\u101b\u1004\u103a\u1038\u1000\u102d\u102f \u103c\u1015\u1011\u102c\u1038\u1015\u102b",loop:"\u103c\u1015\u1014\u103a\u101b\u1005\u103a\u1016\u103d\u1004\u103a\u1037\u1015\u102b",play:"\u1021\u101c\u102d\u102f\u101c\u102d\u102f\u1016\u103d\u1004\u103a\u1037",hspace:"H-\u1000\u103d\u1000\u103a\u101c\u1015\u103a",vspace:"V-\u1000\u103d\u1000\u103a\u101c\u1015\u103a","class_name":"class \u1021\u1019\u100a\u103a",name:"\u1021\u1019\u100a\u103a",id:"ID",type:"\u1021\u1019\u103b\u102d\u102f\u1038\u1021\u1005\u102c\u1038",size:"\u1021\u1010\u102d\u102f\u1004\u103a\u1038\u1021\u1011\u103d\u102c\u1019\u103b\u102c\u1038",preview:"\u1021\u1005\u1019\u103a\u1038\u103c\u1000\u100a\u103a\u1037\u101b\u1014\u103a","constrain_proportions":"\u103c\u1019\u1004\u103a\u1000\u103d\u1004\u103a\u1038\u1021\u1001\u103b\u102d\u102f\u1038\u1000\u102d\u102f \u1011\u102d\u1014\u103a\u1038\u100a\u103e\u102d\u1015\u102b",controls:"\u1011\u102d\u1014\u103a\u1038\u1001\u103b\u102f\u1015\u103a\u1019\u103e\u102f\u1019\u103b\u102c\u1038",numloop:"\u103c\u1015\u1014\u103a\u101b\u1005\u103a\u101b\u1014\u103a \u1021\u103c\u1000\u102d\u1019\u103a\u1021\u1031\u101b\u1021\u1010\u103d\u1000\u103a",console:"CONSOLE",cache:"CACHE",autohref:"\u1021\u101c\u102d\u102f\u101c\u102d\u102fHREF\u1011\u100a\u103a\u1037",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"\u1021\u1031\u103c\u1001\u1001\u1036",bgcolor:"\u1031\u1014\u102c\u1000\u103a\u1001\u1036",wmode:"WMode",salign:"SAlign",align:"Align",scale:"\u1005\u1031\u1000\u1038",quality:"\u1021\u101b\u100a\u103a\u1021\u1031\u101e\u103d\u1038",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain aspect",imagestatus:"\u101b\u102f\u1015\u103a\u1015\u1036\u102f\u1021\u1031\u103c\u1001\u1021\u1031\u1014",center:"\u1021\u101c\u101a\u103a\u1017\u101f\u102d\u102f",autogotourl:"\u1021\u101c\u102d\u102f\u101c\u102d\u102f\u101e\u103d\u102c\u1038\u101b\u1014\u103a URL","shockwave_options":"Shockwave \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038","rmp_options":"Real media player \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038","wmp_options":"Windows media player \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038","qt_options":"Quicktime \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038","flash_options":"Flash \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038",hidden:"\u101d\u103e\u1000\u103a\u1011\u102c\u1038\u1031\u101e\u102c","align_bottom_left":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u1018\u101a\u103a","align_bottom_right":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u100a\u102c","html5_video_options":"HTML5 \u1017\u103d\u102e\u1012\u102e\u101a\u102d\u102f \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"\u1015\u102d\u102f\u1005\u1010\u102c",source:"\u101b\u1004\u103a\u1038\u103c\u1019\u1005\u103a","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nb_dlg.js
new file mode 100644
index 000000000..162beda16
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.media_dlg',{list:"Liste",file:"Fil/URL",advanced:"Avansert",general:"Generelt",title:"Sett inn / rediger inkludert objekt","align_top_left":"Topp venstre","align_center":"Midtstill","align_left":"Venstre","align_bottom":"Bunn","align_right":"H\u00f8yre","align_top":"Topp","qt_stream_warn":"Streamede rtsp-ressurser b\u00f8r legges til QT Src-felt i avansert-fanen.\nDu b\u00f8r ogs\u00e5 legge til en ikke-streamet versjon i Src-felt",qtsrc:"QT Src",progress:"Framdrift",sound:"Lyd",swstretchvalign:"Strekk V-justering",swstretchhalign:"Strekk H-justering",swstretchstyle:"Strekkstil",scriptcallbacks:"Skript-referanser","align_top_right":"Topp h\u00f8yre",uimode:"UI-modus",rate:"Rate",playcount:"Teller",defaultframe:"Standardramme",currentposition:"Aktiv posisjon",currentmarker:"Aktiv mark\u00f8r",captioningid:"Fang opp id",baseurl:"Utgangsadresse (URL)",balance:"Balanse",windowlessvideo:"Video uten vindu",stretchtofit:"Strekk for \u00e5 passe inn",mute:"Demp",invokeurls:"Aktiviser URL-er",fullscreen:"Fullskjerm",enabled:"Kj\u00f8rbar",autostart:"Autostart",volume:"Volum",target:"M\u00e5l",qtsrcchokespeed:"Choke-hastighet",href:"Href",endtime:"Stopptid",starttime:"Starttid",enablejavascript:"Tillat Javaskript",correction:"Ingen korreksjon",targetcache:"M\u00e5l-mellomlagring",playeveryframe:"Spill hver ramme",kioskmode:"Kiosk-modus",controller:"Kontroller",menu:"Vis meny",loop:"L\u00f8kke",play:"Autostart",hspace:"Horisontal avstand",vspace:"Vertikal avstand","class_name":"Klasse",name:"Navn",id:"Id",type:"Type",size:"St\u00f8rrelse",preview:"Forh\u00e5ndsvisning","constrain_proportions":"Behold st\u00f8rrelsesforhold",controls:"Kontroller",numloop:"Antall gjennoml\u00f8p",console:"Konsoll",cache:"Mellomlager",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-variabler",base:"Base",bgcolor:"Bakgrunn",wmode:"W-modus",salign:"S-justering",align:"Justering",scale:"Skalering",quality:"Kvalitet",shuffle:"Miks",prefetch:"Forh\u00e5ndsregistrer",nojava:"Ingen Java",maintainaspect:"Behold st\u00f8rrelsesforhold",imagestatus:"Bildestatus",center:"Midtstill",autogotourl:"Auto-g\u00e5-til-URL","shockwave_options":"Shockwave-innstillinger","rmp_options":"Real mediaplayer-innstillinger","wmp_options":"Windows mediaplayer-innstillinger","qt_options":"Quicktime-innstillinger","flash_options":"Flash-egenskaper",hidden:"Skjult","align_bottom_left":"Bunn venstre","align_bottom_right":"Bunn h\u00f8yre",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Innebygd lyd-valg",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"lyd",video:"video","html5_video_options":"HTML5-videovalg",altsource1:"Alternativ kilde 1",altsource2:"Alternativ kilde 2",preload:"Forh\u00e5ndsvis",poster:"Poster",source:"Kilde","html5_audio_options":"Lydvalg","preload_none":"Ikke forh\u00e5ndslast","preload_metadata":"Forh\u00e5ndslast videos metadata","preload_auto":"La nettleser bestemme",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nl_dlg.js
new file mode 100644
index 000000000..68ae6b008
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.media_dlg',{list:"Lijst",file:"Bestand/URL",advanced:"Geavanceerd",general:"Algemeen",title:"Media invoegen/bewerken","align_top_left":"Linksboven","align_center":"Centreren","align_left":"Links","align_bottom":"Onder","align_right":"Rechts","align_top":"Boven","qt_stream_warn":"Gestreamde RTSP bronnen dienen op het tabblad geavanceerd bij Quicktime bron te worden opgegeven.\nDe niet-gestreamde versie kan dan bij het tabblad algemeen worden opgegeven.",qtsrc:"Quicktime bron",progress:"Voortgang",sound:"Geluid",swstretchvalign:"V-Schaal",swstretchhalign:"H-Schaal",swstretchstyle:"Schaal",scriptcallbacks:"Script callbacks","align_top_right":"Rechtsboven",uimode:"UI Modus",rate:"Snelheid",playcount:"Afspeelteller",defaultframe:"Standaard frame",currentposition:"Huidige positie",currentmarker:"Huidige markering",captioningid:"Ondertiteling id",baseurl:"Basis URL",balance:"Balans",windowlessvideo:"Video zonder venster",stretchtofit:"Passend maken",mute:"Dempen",invokeurls:"URLs laden",fullscreen:"Volledig scherm",enabled:"Ingeschakeld",autostart:"Automatisch afspelen",volume:"Volume",target:"Doel",qtsrcchokespeed:"Chokesnelheid",href:"Href",endtime:"Eindtijd",starttime:"Starttijd",enablejavascript:"JavaScript Inschakelen",correction:"Geen correctie",targetcache:"Doelcache",playeveryframe:"Elk frame afspelen",kioskmode:"Kioskmodus",controller:"Controller",menu:"Menu weergeven",loop:"Herhalen",play:"Automatisch afspelen",hspace:"H-Ruimte",vspace:"V-Ruimte","class_name":"Klasse",name:"Naam",id:"Id",type:"Type",size:"Afmetingen",preview:"Voorbeeld","constrain_proportions":"Verhouding bewaren",controls:"Bediening",numloop:"Aantal herhalingen",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Variabelen",base:"Basis",bgcolor:"Achtergrond",wmode:"WMode",salign:"Schaaluitlijning",align:"Uitlijning",scale:"Schaal",quality:"Kwaliteit",shuffle:"Willekeurige volgorde",prefetch:"Voorladen",nojava:"Geen Java",maintainaspect:"Verhouding bewaren",imagestatus:"Afbeeldingstatus",center:"Centreren",autogotourl:"Automatisch naar URL","shockwave_options":"Shockwave opties","rmp_options":"Real Media Player Opties","wmp_options":"Windows Media Player Opties","qt_options":"Quicktime opties","flash_options":"Flash opties",hidden:"Verborgen","align_bottom_left":"Linksonder","align_bottom_right":"Rechtsonder",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Ge\u00efntegreerd Geluid Opties",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"geluid",video:"video","html5_video_options":"HTML5 Video Opties",altsource1:"Alternatieve bron 1",altsource2:"Alternatieve bron 2",preload:"Voorladen",poster:"Poster",source:"Bron","html5_audio_options":"Audio Opties","preload_none":"Niet voorladen","preload_metadata":"Video metadata voorladen","preload_auto":"Laat browser beslissen",iframe:"iframe",embeddedaudio:"ge\u00efntegreerd geluid"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nn_dlg.js
new file mode 100644
index 000000000..dc37b11bc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.media_dlg',{list:"Liste",file:"Fil/URL",advanced:"Avansert",general:"Generelt",title:"Set inn / rediger inkludert objekt","align_top_left":"Topp venstre","align_center":"Midt","align_left":"Venstre","align_bottom":"Botn","align_right":"H\u00f8gre","align_top":"Topp","qt_stream_warn":"Streama rtsp-ressursar b\u00f8r leggsst til QT Src field i avansert-fana.\nDu b\u00f8r ogs\u00e5 leggje til ein ikkje-streama versjon i src field",qtsrc:"QT Src",progress:"Framdrift",sound:"Lyd",swstretchvalign:"Strekk V-justering",swstretchhalign:"Strekk H-justering",swstretchstyle:"Strekkstil",scriptcallbacks:"Skript-referanser","align_top_right":"Top h\u00f8gre",uimode:"UI-modus",rate:"Rate",playcount:"Tellar",defaultframe:"Standardramme",currentposition:"Aktiv posisjon",currentmarker:"Aktiv mark\u00f8r",captioningid:"Fange opp id",baseurl:"Base URL",balance:"Balanse",windowlessvideo:"Video utan vindauge",stretchtofit:"Strekk for \u00e5 passe inn",mute:"Demp",invokeurls:"Aktiviser URL-ar",fullscreen:"Fullskjerm",enabled:"K\u00f8yrbar",autostart:"Autostart",volume:"Volum",target:"M\u00e5l",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Stopptid",starttime:"Starttid",enablejavascript:"Tillat Javaskript",correction:"Ingen korreksjon",targetcache:"M\u00e5l-cache",playeveryframe:"Spel kvar ramme",kioskmode:"Kiosk-modus",controller:"Kontroller",menu:"Vis meny",loop:"Lykkje",play:"Autostart",hspace:"Horisontal avstand",vspace:"Vertikal avstand","class_name":"Klasse",name:"Namn",id:"Id",type:"Type",size:"Storleik",preview:"Sj\u00e5 f\u00f8rebels utkast","constrain_proportions":"Behald proporsjonar",controls:"Kontroller",numloop:"Antal gjennoml\u00f8p",console:"Konsoll",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-variablar",base:"Base",bgcolor:"Bakgrunn",wmode:"W-modus",salign:"S-justering",align:"Justering",scale:"Skalering",quality:"Kvalitet",shuffle:"Miks",prefetch:"Registrer p\u00e5 f\u00f8rehand",nojava:"Ikke Java",maintainaspect:"Behald proporsjonar",imagestatus:"Status for bilete",center:"Midtstill",autogotourl:"Auto-g\u00e5-til-URL","shockwave_options":"Shockwave-innstillinger","rmp_options":"Real mediaplayer-innstillingar","wmp_options":"Windows mediaplayer-innstillingar","qt_options":"Quicktime-innstillingar","flash_options":"Flash-eigenskapar",hidden:"Skjult","align_bottom_left":"Botn venste","align_bottom_right":"Botn h\u00f8gre","embedded_audio_options":"Embedded Audio Options","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/no_dlg.js
new file mode 100644
index 000000000..5eb98fcd7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.media_dlg',{list:"Liste",file:"Fil/URL",advanced:"Avansert",general:"Generelt",title:"Sett inn/rediger inkludert objekt","align_top_left":"Topp venstre","align_center":"Midten","align_left":"Venstre","align_bottom":"Bunn","align_right":"H\u00f8yre","align_top":"Topp","qt_stream_warn":"Streamede rtsp ressurser b\u00f8r legges til QT Src-feltet under fanen avansert.\nDu b\u00f8r ogs\u00e5 legge til en ikke-streamet versjon i src-feltet.",qtsrc:"QT Src",progress:"Fremdrift",sound:"Lyd",swstretchvalign:"Strekk V-justering",swstretchhalign:"Strekk H-justering",swstretchstyle:"Strekk stil",scriptcallbacks:"Skript referanser","align_top_right":"Topp h\u00f8yre",uimode:"UI-modus",rate:"Rate",playcount:"Teller",defaultframe:"Standard ramme",currentposition:"Aktiv posisjon",currentmarker:"Aktiv mark\u00f8r",captioningid:"Fange opp id",baseurl:"Utgangsadresse (URL)",balance:"Balanse",windowlessvideo:"Video uten vindu",stretchtofit:"Strekk for \u00e5 passe",mute:"Dempe",invokeurls:"Aktiver URLer",fullscreen:"Fullskjerm",enabled:"Aktivert",autostart:"Autostart",volume:"Volum",target:"M\u00e5l",qtsrcchokespeed:"Choke-hastighet",href:"Href",endtime:"Stopp tid",starttime:"Start tid",enablejavascript:"Tillat Javaskript",correction:"Ingen korreksjon",targetcache:"M\u00e5l-mellomlagring",playeveryframe:"Spill hver ramme",kioskmode:"Kiosk-modus",controller:"Kontroller",menu:"Vis meny",loop:"L\u00f8kke",play:"Autostart",hspace:"H-avstand",vspace:"V-avstand","class_name":"Klasse",name:"Navn",id:"Id",type:"Type",size:"Dimmensjoner",preview:"Forh\u00e5ndsvis","constrain_proportions":"Behold proporsjoner",controls:"Kontroller",numloop:"Antall gjennomganger",console:"Konsoll",cache:"Mellomlager",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash variabler",base:"Base",bgcolor:"Bakgrunn",wmode:"W-modus",salign:"S-justering",align:"Justering",scale:"Skala",quality:"Kvalitet",shuffle:"Mikse",prefetch:"Hente p\u00e5 forh\u00e5nd",nojava:"Ingen Java",maintainaspect:"Behold st\u00f8rrelsesforhold",imagestatus:"Bildestatus",center:"Midtstill",autogotourl:"Auto g\u00e5-til URL","shockwave_options":"Shockwave egenskaper","rmp_options":"Real Media Player egenskaper","wmp_options":"Windows Media Player egenskaper","qt_options":"Quicktime egenskaper","flash_options":"Flash egenskaper",hidden:"Skjult","align_bottom_left":"Bunn venste","align_bottom_right":"Bunn h\u00f8gre",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Embedded lyd egenskaper",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"lyd",video:"video","html5_video_options":"HTML5-videovalg",altsource1:"Alternativ kilde 1",altsource2:"Alternativ kilde 2",preload:"Forh\u00e5ndsvis",poster:"Poster",source:"Kilde","html5_audio_options":"Lyd egenskaper","preload_none":"Ikke hent p\u00e5 forh\u00e5nd","preload_metadata":"Hent video metadata p\u00e5 forh\u00e5nd","preload_auto":"La brukerens nettleser avgj\u00f8re",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/pl_dlg.js
new file mode 100644
index 000000000..9e054b21d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.media_dlg',{list:"Lista",file:"Plik/URL",advanced:"Zaawansowane",general:"G\u0142\u00f3wne",title:"Wstaw/Edytuj wbudowane media","align_top_left":"G\u00f3rny lewy","align_center":"\u015arodek","align_left":"Lewo","align_bottom":"D\u00f3\u0142","align_right":"Prawo","align_top":"G\u00f3ra","qt_stream_warn":"Emitowane \u017ar\u00f3d\u0142a rtsp powinny by\u0107 dodane do pola QT Src w zak\u0142adce zaawansowane.nPowiniene\u015b r\u00f3wnie\u017c doda\u0107 niestrumieniow\u0105 wersj\u0119 do pola Src.",qtsrc:"QT Src",progress:"Post\u0119p",sound:"D\u017awi\u0119k",swstretchvalign:"Wyr\u00f3wnaj w pionie",swstretchhalign:"Wyr\u00f3wnaj w poziomie",swstretchstyle:"Styl rozci\u0105gania",scriptcallbacks:"Funkcje zwrotne skryptu","align_top_right":"G\u00f3rny prawy",uimode:"Tryb UI",rate:"Tempo",playcount:"Ilo\u015b\u0107 odtworze\u0144",defaultframe:"Domy\u015blna ramka",currentposition:"Aktualna pozycja",currentmarker:"Aktualny znacznik",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balans",windowlessvideo:"Wideo bez okienka",stretchtofit:"Rozci\u0105gnij aby dopasowa\u0107",mute:"Wycisz",invokeurls:"Odwo\u0142aj si\u0119 do URLi",fullscreen:"Pe\u0142ny ekran",enabled:"Aktywny",autostart:"Auto start",volume:"G\u0142o\u015bno\u015b\u0107",target:"Cel",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Ko\u0144cowy czas",starttime:"Pocz\u0105tkowy czas",enablejavascript:"W\u0142\u0105cz JavaScript",correction:"Bez korekcji",targetcache:"Target cache",playeveryframe:"Odtwarzaj ka\u017cd\u0105 ramk\u0119",kioskmode:"Tryb kiosku",controller:"Kontroler",menu:"Poka\u017c menu",loop:"Zap\u0119tlenie",play:"Autoodtwarzanie",hspace:"H-Space",vspace:"V-Space","class_name":"Klasa",name:"Nazwa",id:"Id",type:"Typ",size:"Wymiary",preview:"Podgl\u0105d","constrain_proportions":"Zachowaj proporcje",controls:"Controls",numloop:"Liczba powt\u00f3rze\u0144",console:"Konsola",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Baza",bgcolor:"T\u0142o",wmode:"WMode",salign:"SAlign",align:"Wyr\u00f3wnaj",scale:"Skala",quality:"Jako\u015b\u0107",shuffle:"Losuj",prefetch:"Prze\u0142aduj",nojava:"Bez javy",maintainaspect:"Utrzymaj aspekt",imagestatus:"Obraz statusu",center:"Wy\u015brodkuj",autogotourl:"Automatycznie przejd\u017a pod adres","shockwave_options":"Opcje Shockwave","rmp_options":"Opcje Real media player","wmp_options":"Opcje Windows media player","qt_options":"Opcje Quicktime","flash_options":"Opcje flasha",hidden:"Ukryty","align_bottom_left":"Dolny lewy","align_bottom_right":"Dolny prawy",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opcje Embedded Audio",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Opcje HTML5 Video",altsource1:"Alternatywne \u017ar\u00f3d\u0142o 1",altsource2:"Alternatywne \u017ar\u00f3d\u0142o 2",preload:"Prze\u0142aduj",poster:"Obraz",source:"\u0179r\u00f3d\u0142o","html5_audio_options":"Opcje audio","preload_none":"Nie \u0142\u0105duj wst\u0119pnie","preload_metadata":"\u0141aduj wst\u0119pnie metadane video","preload_auto":"Pozw\u00f3l zdecydowa\u0107 przegl\u0105darce u\u017cytkownika",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ps_dlg.js
new file mode 100644
index 000000000..6589c9be1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/pt_dlg.js
new file mode 100644
index 000000000..f578cd750
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.media_dlg',{list:"Lista",file:"Arquivo/URL",advanced:"Avan\u00e7ado",general:"Geral",title:"Inserir/Editar m\u00eddia embutida","align_top_left":"Topo esquerda","align_center":"Centro","align_left":"Esquerda","align_bottom":"Abaixo","align_right":"Direita","align_top":"Topo","qt_stream_warn":"Fluxos de recursos RTSP devem ser acrescentados ao campo QT Src no Modo Avan\u00e7ado.\nUma vers\u00e3o sem fluxo tamb\u00e9m deve ser acrescentada ao campo Src.",qtsrc:"QT Src",progress:"Progresso",sound:"Som",swstretchvalign:"For\u00e7ar V-Alinhamento",swstretchhalign:"For\u00e7ar H-Alinhamento",swstretchstyle:"For\u00e7ar Estilo",scriptcallbacks:"Retornos de chamada de script","align_top_right":"Topo direita",uimode:"Modo UI",rate:"Taxa",playcount:"Contagem de ouvintes",defaultframe:"Frame padr\u00e3o",currentposition:"Posi\u00e7\u00e3o atual",currentmarker:"Marcador atual",captioningid:"Id de legenda",baseurl:"URL Base",balance:"Stereo",windowlessvideo:"V\u00eddeo sem janela",stretchtofit:"Estender",mute:"Mudo",invokeurls:"Chamar URLs",fullscreen:"Tela inteira",enabled:"Ativado",autostart:"Execu\u00e7\u00e3o autom\u00e1tica",volume:"Volume",target:"Alvo",qtsrcchokespeed:"Diminuir Velocidade",href:"Link",endtime:"Hora do fim",starttime:"Hora de in\u00edcio",enablejavascript:"Permitir JavaScript",correction:"Sem correc\u00e7\u00f5es",targetcache:"Cache alvo",playeveryframe:"Executar todas as frames",kioskmode:"Modo Kiosk",controller:"Controlador",menu:"Mostrar menu",loop:"Repeti\u00e7\u00e3o autom\u00e1tica",play:"Execu\u00e7\u00e3o autom\u00e1tica",hspace:"Espa\u00e7o horizontal",vspace:"Espa\u00e7o vertical","class_name":"Classe",name:"Nome",id:"ID",type:"Tipo",size:"Dimens\u00f5es",preview:"Previs\u00e3o","constrain_proportions":"Manter propor\u00e7\u00f5es",controls:"Controles",numloop:"Repeti\u00e7\u00f5es",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Fundo",wmode:"WMode",salign:"SAlign",align:"Alinhamento",scale:"Escala",quality:"Qualidade",shuffle:"Aleat\u00f3rio",prefetch:"Pr\u00e9-buscar",nojava:"Sem Java",maintainaspect:"Manter aspecto",imagestatus:"Status da imagem",center:"Centro",autogotourl:"Auto abrir URL","shockwave_options":"Op\u00e7\u00f5es Shockwave","rmp_options":"Op\u00e7\u00f5es Real Media Player","wmp_options":"Op\u00e7\u00f5es Windows Media Player","qt_options":"Op\u00e7\u00f5es Quicktime","flash_options":"Op\u00e7\u00f5es Flash",hidden:"Oculto","align_bottom_left":"Abaixo esquerda","align_bottom_right":"Abaixo direita",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Op\u00e7\u00f5es de \u00c1udio Embutido",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockware",audio:"\u00e1udio",video:"v\u00eddeo","html5_video_options":"Op\u00e7\u00f5es de v\u00eddeo HTML5",altsource1:"C\u00f3digo alternativo 1",altsource2:"C\u00f3digo alternativo 2",preload:"Pr\u00e9-carregar",poster:"Poster",source:"Fonte","html5_audio_options":"Op\u00e7\u00f5es de Audio","preload_none":"N\u00e3o Pr\u00e9-carregar","preload_metadata":"Pr\u00e9-carregar metadata de v\u00eddeo","preload_auto":"Deixar que navegador do usu\u00e1rio decida",iframe:"iframe",embeddedaudio:"\u00e1udio embutido"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ro_dlg.js
new file mode 100644
index 000000000..6b4bfb316
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.media_dlg',{list:"List\u0103",file:"Fi\u0219ier/URL",advanced:"Avansat\u0103",general:"General",title:"Insereaz\u0103 / editeaz\u0103 media","align_top_left":"St\u00e2nga sus","align_center":"Centru","align_left":"St\u00e2nga","align_bottom":"Jos","align_right":"Dreapta","align_top":"Sus","qt_stream_warn":"Resursele de tip flux rtsp trebuie ad\u0103ugate \u00een c\u00e2mpul QT Src din fila avansat.\nAr trebui de asemenea s\u0103 adaugi \u00een c\u00e2mpul Src o variant\u0103 care nu este de tip flux.",qtsrc:"QT Src",progress:"Progres",sound:"Sunet",swstretchvalign:"\u00centindere V-Aliniere",swstretchhalign:"\u00centindere H-Aliniere",swstretchstyle:"Stil \u00eentindere",scriptcallbacks:"Script callback","align_top_right":"Dreapta sus",uimode:"Mod UI",rate:"Vot",playcount:"Numar red\u0103ri",defaultframe:"Frame implicit",currentposition:"Pozi\u021bie curent\u0103",currentmarker:"Marcator curent",captioningid:"Titlu id",baseurl:"URL baz\u0103",balance:"Balan\u021b\u0103",windowlessvideo:"Video f\u0103r\u0103 fereastr\u0103",stretchtofit:"\u00centinde pentru a se \u00eencadra",mute:"Mut",invokeurls:"Invoc\u0103 URL-uri",fullscreen:"Ecran complet",enabled:"Activat",autostart:"Pornire automat\u0103",volume:"Volum",target:"Tin\u0163a",qtsrcchokespeed:"Viteza de sufocare",href:"Href",endtime:"Timp de sf\u00e2r\u0219it",starttime:"Timp de \u00eenceput",enablejavascript:"Activeaz\u0103 JavaScript",correction:"F\u0103r\u0103 corecturi",targetcache:"Memoria tampon \u021bint\u0103",playeveryframe:"Red\u0103 fiecare cadru",kioskmode:"Mod chio\u0219c",controller:"Controler",menu:"Arat\u0103 meniu",loop:"Repetare",play:"Redare automat\u0103",hspace:"H-Space",vspace:"V-Space","class_name":"Clas\u0103",name:"Nume",id:"Id",type:"Tip",size:"Dimensiuni",preview:"Previzualizare","constrain_proportions":"Men\u0163inere propor\u021bii",controls:"Controale",numloop:"Num\u0103r de repet\u0103ri",console:"Consol\u0103",cache:"Memorie tampon",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Variabile Flash",base:"URL de baz\u0103",bgcolor:"Fundal",wmode:"WMode",salign:"SAlign",align:"Aliniere",scale:"Scar\u0103",quality:"Calitate",shuffle:"Aleator",prefetch:"Prefetch",nojava:"F\u0103r\u0103 java",maintainaspect:"Men\u021bine aspect",imagestatus:"Status imagine",center:"Centru",autogotourl:"Mergi automat la URL","shockwave_options":"Op\u021biuni Shockwave","rmp_options":"Op\u021biuni Real media player","wmp_options":"Op\u021biuni Windows media player","qt_options":"Op\u021biuni QuickTime","flash_options":"Op\u021biuni Flash",hidden:"Ascuns","align_bottom_left":"St\u00e2nga jos","align_bottom_right":"Dreapta jos",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Op\u021biuni de includere audio",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Op\u021biuni video HTML5",altsource1:"Sursa alternativ\u0103 1",altsource2:"Sursa alternativ\u0103 2",preload:"Pre\u00eencarc\u0103",poster:"Afi\u0219",source:"Surs\u0103","html5_audio_options":"Op\u021biuni audio","preload_none":"Nu pre\u00eenc\u0103rca","preload_metadata":"Pre\u00eencarc\u0103 metadatele video","preload_auto":"Las\u0103 navigatorul utilizatorului s\u0103 decid\u0103",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ru_dlg.js
new file mode 100644
index 000000000..fbb186b9b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.media_dlg',{list:"\u0421\u043f\u0438\u0441\u043e\u043a",file:"\u0410\u0434\u0440\u0435\u0441",advanced:"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e",general:"\u041e\u0431\u0449\u0435\u0435",title:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043b\u0438\u043f\u0430","align_top_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_center":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","qt_stream_warn":"\u041f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0435 rtsp \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043f\u043e\u043b\u0435 QT Src.",qtsrc:"QT Src",progress:"\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441",sound:"\u0417\u0432\u0443\u043a",swstretchvalign:"\u0412\u0435\u0440. \u0432\u044b\u0440-\u0435 \u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u044f",swstretchhalign:"\u0413\u043e\u0440. \u0432\u044b\u0440-\u0435 \u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u044f",swstretchstyle:"\u0421\u0442\u0438\u043b\u044c \u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u0435",scriptcallbacks:"\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430","align_top_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",uimode:"\u0420\u0435\u0436\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430",rate:"\u0420\u0435\u0439\u0442\u0438\u043d\u0433",playcount:"\u0429\u0435\u0442\u0447\u0438\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439",defaultframe:"\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u0430\u0434\u0440",currentposition:"\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f",currentmarker:"\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u0418\u043c\u044f \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432",baseurl:"\u0411\u0430\u0437\u043e\u0440\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"\u041e\u043a\u043e\u043d\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e",stretchtofit:"\u041f\u043e\u0434 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430",mute:"\u0411\u0435\u0437 \u0437\u0432\u0443\u043a\u0430",invokeurls:"\u0412\u044b\u0437\u0432\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441",fullscreen:"\u041d\u0430 \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d",enabled:"\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e",autostart:"\u0410\u0432\u0442\u043e\u0437\u0430\u043f\u0443\u0441\u043a",volume:"\u0413\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c",target:"\u0426\u0435\u043b\u044c",qtsrcchokespeed:"Choke speed",href:"\u0421\u0441\u044b\u043b\u043a\u0430",endtime:"\u0412\u0440\u0435\u043c\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f",starttime:"\u0412\u0440\u0435\u043c\u044f \u043d\u0430\u0447\u0430\u043b\u0430",enablejavascript:"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c JavaScript",correction:"\u0411\u0435\u0437 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438",targetcache:"\u041a\u044d\u0448 \u0446\u0435\u043b\u0438",playeveryframe:"\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440",kioskmode:"\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043e\u0441\u043a",controller:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435",menu:"\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044e",loop:"\u041f\u043e\u0432\u0442\u043e\u0440",play:"\u0410\u0432\u0442\u0437\u0430\u043f\u0443\u0441\u043a",hspace:"\u0413\u043e\u0440. \u043e\u0442\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442. \u043e\u0442\u0441\u0442\u0443\u043f","class_name":"\u041a\u043b\u0430\u0441\u0441",name:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",id:"\u0418\u043c\u044f",type:"\u0422\u0438\u043f",size:"\u0420\u0430\u0437\u043c\u0435\u0440\u044b",preview:"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440","constrain_proportions":"\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",controls:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435",numloop:"\u041f\u043e\u0432\u0442\u043e\u0440\u044b",console:"\u041a\u043e\u043d\u0441\u043e\u043b\u044c",cache:"\u041a\u044d\u0448",autohref:"\u0410\u0432\u0442\u043e-\u0441\u0441\u044b\u043b\u043a\u0430",liveconnect:"SWLiveConnect",flashvars:"Flash \u043a\u043e\u043c\u0430\u043d\u0434\u044b",base:"Base",bgcolor:"\u0424\u043e\u043d",wmode:"\u041e\u043a\u043d\u043e",salign:"\u0412\u044b\u0440-\u0435",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",scale:"\u041e\u0431\u043b\u0430\u0441\u0442\u044c",quality:"\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e",shuffle:"\u0412 \u0440\u0430\u0437\u0431\u0440\u043e\u0441",prefetch:"\u0423\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430",nojava:"\u0411\u0435\u0437 Java",maintainaspect:"\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",center:"\u0426\u0435\u043d\u0442\u0440",autogotourl:"\u0410\u0432\u0442\u043e\u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441","shockwave_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Shockwave","rmp_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Real Media","wmp_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Windows Media","qt_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Quicktime","flash_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Flash",hidden:"\u0421\u043a\u0440\u044b\u0442\u044b\u0439","align_bottom_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_bottom_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",flash:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Flash \u0444\u0430\u0439\u043b\u0430",quicktime:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Quick Time \u0444\u0430\u0439\u043b\u0430","embedded_audio_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u043d\u0435\u0434\u0440\u0451\u043d\u043d\u043e\u0433\u043e \u0430\u0443\u0434\u0438\u043e",windowsmedia:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Windows Media \u0444\u0430\u0439\u043b\u0430",realmedia:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Real Media \u0444\u0430\u0439\u043b\u0430",shockwave:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Shockwave \u0444\u0430\u0439\u043b\u0430",audio:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 HTML5 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430",video:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 HTML5 \u0432\u0438\u0434\u0435\u043e \u0444\u0430\u0439\u043b\u0430","html5_video_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b HTML5 Video",altsource1:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a 1",altsource2:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a 2",preload:"\u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430",poster:"\u041f\u043e\u0441\u0442\u0435\u0440",source:"\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a","html5_audio_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0430\u0443\u0434\u0438\u043e","preload_none":"\u0411\u0435\u0437 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","preload_metadata":"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0438\u0434\u0435\u043e","preload_auto":"\u041d\u0430 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430",iframe:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441 \u0432 IFrame",embeddedaudio:"\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0417\u0432\u0443\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sc_dlg.js
new file mode 100644
index 000000000..21f564eb3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6/\u7f51\u5740",advanced:"\u9ad8\u7ea7",general:"\u4e00\u822c",title:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53","align_top_left":"\u5de6\u4e0a","align_center":"\u4e2d\u95f4","align_left":"\u9760\u5de6","align_bottom":"\u4e0b\u65b9","align_right":"\u9760\u53f3","align_top":"\u4e0a\u65b9","qt_stream_warn":"\u6d41\u5f0frtsp\u8d44\u6e90\u5e94\u8be5\u6dfb\u52a0\u5230\u300c\u9ad8\u7ea7\u300d\u4e2dQT Src\u3002 \n\u540c\u65f6\u6dfb\u52a0\u975e\u6d41\u5f0f\u8d44\u6e90\u5230Src\u3002 ",qtsrc:"QT Src",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u5782\u76f4\u62c9\u5347",swstretchhalign:"\u6c34\u51c6\u62c9\u5347",swstretchstyle:"\u62c9\u5347\u6a21\u5f0f",scriptcallbacks:"\u811a\u672c\u56de\u8c03","align_top_right":"\u53f3\u4e0a",uimode:"\u5916\u89c2\u6a21\u5f0f",rate:"\u5e27\u7387",playcount:"\u64ad\u653e\u8ba1\u6570",defaultframe:"\u9ed8\u8ba4\u5e27",currentposition:"\u5f53\u524d\u4f4d\u7f6e",currentmarker:"\u5f53\u524d\u6807\u8bb0",captioningid:"Captioning id",baseurl:"\u57fa\u51c6URL",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u8fb9\u6846",stretchtofit:"\u62c9\u4f38",mute:"\u9759\u97f3",invokeurls:"\u76f8\u5173URLs",fullscreen:"\u5168\u5c4f",enabled:"\u542f\u7528",autostart:"\u81ea\u52a8\u5f00\u59cb",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"Choke speed",href:"\u8fde\u7ed3",endtime:"\u7ed3\u675f\u65f6\u95f4",starttime:"\u5f00\u59cb\u65f6\u95f4",enablejavascript:"\u542f\u7528JavaScript",correction:"\u6ca1\u6709\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u64ad\u653e\u6bcf\u4e00\u5e27",kioskmode:"Kiosk\u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u663e\u793a\u529f\u80fd\u8868",loop:"\u56de\u5708\u64ad\u653e",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u5782\u76f4\u95f4\u8ddd",vspace:"\u6c34\u51c6\u95f4\u8ddd","class_name":"\u7c7b\u578b",name:"\u540d\u79f0",id:"Id",type:"\u7c7b\u578b",size:"\u5c3a\u5bf8",preview:"\u9884\u89c8","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",controls:"\u63a7\u5236\u5668",numloop:"\u56de\u5708\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"\u81ea\u52a8HREF",liveconnect:"SWLiveConnect",flashvars:"\u53c2\u6570",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f\u8272",wmode:"\u89c6\u7a97\u6a21\u5f0f",salign:"SAlign",align:"\u5bf9\u9f50",scale:"\u6bd4\u4f8b",quality:"\u54c1\u8d28",shuffle:"Shuffle",prefetch:"\u9884\u8bfb\u53d6",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"\u56fe\u50cf\u72b6\u6001",center:"\u4e2d\u5fc3",autogotourl:"\u81ea\u52a8\u8f6c\u5230URL","shockwave_options":"Shockwave\u9009\u9879","rmp_options":"Real media player\u9009\u9879","wmp_options":"Windows media player\u9009\u9879","qt_options":"Quicktime\u9009\u9879","flash_options":"Flash\u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/se_dlg.js
new file mode 100644
index 000000000..1bb0170db
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.media_dlg',{list:"Lista",file:"Fil/URL",advanced:"Avancerat",general:"Generellt",title:"Infoga/redigera inb\u00e4ddad media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullsk\u00e4rm",enabled:"Enabled",autostart:"Starta automatiskt",volume:"Volym",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Spela varje bildruta",kioskmode:"Kiosk mode",controller:"Controller",menu:"Visa menyn",loop:"Loopa",play:"Spela upp automatiskt",hspace:"H-Space",vspace:"V-Space","class_name":"Klass",name:"Namn",id:"Id",type:"Typ",size:"Dimensioner",preview:"F\u00f6rhandsvisning","constrain_proportions":"Bibeh\u00e5ll proportionerna",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Bakgrundsf\u00e4rg",wmode:"WMode",salign:"SAlign",align:"Justera",scale:"Skala",quality:"Kvalit\u00e9",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/si_dlg.js
new file mode 100644
index 000000000..7b8989d52
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sk_dlg.js
new file mode 100644
index 000000000..eb96783f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.media_dlg',{list:"Zoznam",file:"S\u00fabor/URL",advanced:"Roz\u0161\u00edren\u00e9",general:"Obecn\u00e9",title:"Vlo\u017ei\u0165/upravi\u0165 vkladan\u00e9 m\u00e9di\u00e1","align_top_left":"Hore v\u013eavo","align_center":"Na stred","align_left":"V\u013eavo","align_bottom":"Dolu","align_right":"Vpravo","align_top":"Hore","qt_stream_warn":"Streamovan\u00e9 RTSP zdroje m\u00f4\u017eu by\u0165 pridan\u00e9 do polia \'S\u00fabor/URL streamu pre QT\' na z\u00e1lo\u017eke \'Roz\u0161\u00edren\u00e9\'.\nM\u00f4\u017ete tie\u017e prida\u0165 nie streamovan\u00fa verziu do polia \'S\u00fabor/URL\'.",qtsrc:"S\u00fabor/URL streamu pre QT",progress:"Priebeh",sound:"Zvuk",swstretchvalign:"Zarovnanie vert. roztiahnutia",swstretchhalign:"Zarovnanie horiz. roztiahnutia",swstretchstyle:"\u0160t\u00fdl roztiahnutia",scriptcallbacks:"Skripty sp\u00e4tn\u00fdch volan\u00ed","align_top_right":"Hore vpravo",uimode:"Re\u017eim ovl\u00e1dacieho panelu",rate:"Relat\u00edvna r\u00fdchlos\u0165",playcount:"Po\u010d\u00edtadlo prehrat\u00ed",defaultframe:"Predvolen\u00fd sn\u00edmok",currentposition:"Aktu\u00e1lna poz\u00edcia",currentmarker:"Aktu\u00e1lna z\u00e1lo\u017eka",captioningid:"ID popisku m\u00e9dia",baseurl:"Z\u00e1kladn\u00e1 URL",balance:"Rovnov\u00e1ha",windowlessvideo:"Video bez okna",stretchtofit:"Roztiahn\u00fa\u0165 do okna",mute:"Uml\u010da\u0165",invokeurls:"Po\u017eadova\u0165 URL",fullscreen:"Cel\u00e1 obrazovka",enabled:"Povoli\u0165 ovl\u00e1dac\u00ed panel",autostart:"Automatick\u00e9 spustenie",volume:"Hlasitos\u0165",target:"Cie\u013e",qtsrcchokespeed:"Zn\u00ed\u017eenie r\u00fdchlosti",href:"Odkaz",endtime:"Koncov\u00fd \u010das",starttime:"Po\u010diato\u010dn\u00fd \u010das",enablejavascript:"Povoli\u0165 JavaScript",correction:"Bez korekci\u00ed",targetcache:"Cie\u013eov\u00e1 medzipam\u00e4\u0165",playeveryframe:"Prehra\u0165 ka\u017ed\u00fd sn\u00edmok",kioskmode:"Zak\u00e1za\u0165 ukladanie",controller:"Ovl\u00e1dac\u00ed panel",menu:"Zobrazi\u0165 ponuku",loop:"Opakovanie",play:"Automatick\u00e9 prehr\u00e1vanie",hspace:"Horizont\u00e1lne odsadenie",vspace:"Vertik\u00e1lne odsadenie","class_name":"Trieda",name:"N\u00e1zov",id:"ID",type:"Typ",size:"Rozmery",preview:"N\u00e1h\u013ead","constrain_proportions":"Zachova\u0165 proporcie",controls:"Ovl\u00e1dac\u00ed panel",numloop:"Po\u010det opakovan\u00ed",console:"Konzola",cache:"Medzipam\u00e4\u0165",autohref:"Automatick\u00e9 na\u010d\u00edtanie",liveconnect:"Spusti\u0165 Javu (SWLiveConnect)",flashvars:"Parametre (Flashvars)",base:"Z\u00e1kladn\u00fd prie\u010dinok",bgcolor:"Pozadie",wmode:"Re\u017eim okna",salign:"Zarovnanie okna",align:"Zarovnanie",scale:"Pomer",quality:"Kvalita",shuffle:"N\u00e1hodne",prefetch:"Predna\u010d\u00edtanie",nojava:"Nesp\u00fa\u0161\u0165a\u0165 Javu",maintainaspect:"Zachova\u0165 pomer str\u00e1n",imagestatus:"Stav obrazu",center:"Na stred",autogotourl:"Automatick\u00fd prechod na URL","shockwave_options":"Mo\u017enosti Shockwave","rmp_options":"Mo\u017enosti prehr\u00e1va\u010da Real media","wmp_options":"Mo\u017enosti prehr\u00e1va\u010da Windows media","qt_options":"Mo\u017enosti Quicktime","flash_options":"Mo\u017enosti Flashu",hidden:"Skry\u0165","align_bottom_left":"Dolu v\u013eavo","align_bottom_right":"Dolu vpravo",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Mo\u017enosti vlo\u017een\u00e9ho audio s\u00faboru",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Mo\u017enosti HTML5 video",altsource1:"Alternat\u00edvny zdroj 1",altsource2:"Alternat\u00edvny zdroj 2",preload:"Predna\u010d\u00edtanie",poster:"Obr\u00e1zok (zobraz\u00ed sa pri nedostupnosti videa)",source:"Zdroj","html5_audio_options":"Vlastnosti audia","preload_none":"Nepred\u010d\u00edtaj","preload_metadata":"Nepred\u010d\u00edtaj meta-\u00fadaje videa","preload_auto":"Ponechajte vo\u013eba pri v\u00fdbere prehliada\u010da na u\u017e\u00edvate\u013eovi",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sl_dlg.js
new file mode 100644
index 000000000..fc02c62ea
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.media_dlg',{list:"Seznam",file:"Datoteka/URL",advanced:"Napredno",general:"Splo\u0161no",title:"Vstavi / uredi multimedijsko vsebino","align_top_left":"zgoraj levo","align_center":"sredina","align_left":"levo","align_bottom":"spodaj","align_right":"desno","align_top":"zgoraj","qt_stream_warn":"V polje \"QT vir\" pod zavihkom napredno, morajo biti dodani preto\u010dni RTSP viri.\nNepreto\u010dna razli\u010dica mora biti dodana v polje \"vir\".",qtsrc:"QT vir",progress:"Napredek",sound:"Zvok",swstretchvalign:"raztegni n-poravnano",swstretchhalign:"raztegni v-poravnano",swstretchstyle:"Slog raztegovanja",scriptcallbacks:"Povratni klici","align_top_right":"zgoraj desno",uimode:"Na\u010din uporabni\u0161kega vmesnika",rate:"Ocena",playcount:"\u0160tevilo predvajanj",defaultframe:"Privzeti okvir",currentposition:"Trenutni polo\u017eaj",currentmarker:"Trenutna oznaka",captioningid:"Oznaka podnapisov",baseurl:"Temeljni URL",balance:"Ravnovesje",windowlessvideo:"Video brez okna",stretchtofit:"Raz\u0161iri",mute:"Uti\u0161aj",invokeurls:"Naslovi URLje",fullscreen:"Cel zaslon",enabled:"Omogo\u010deno",autostart:"Samodejno predvajaj",volume:"Glasnost",target:"Cilj",qtsrcchokespeed:"Hitrost predpomnenja",href:"Povezava",endtime:"Kon\u010dni \u010das",starttime:"Za\u010detni \u010das",enablejavascript:"Omogo\u010di JavaScript",correction:"Brez popravkov",targetcache:"Ciljno predpomnjenje",playeveryframe:"Predvajaj vsak okvir",kioskmode:"Kiosk na\u010din",controller:"Nadzorni element",menu:"Prika\u017ei meni",loop:"Ponavljaj",play:"Samodejno predvajaj",hspace:"H-razmik",vspace:"V-razmik","class_name":"Razred",name:"Ime",id:"Id",type:"Tip",size:"Dimenzije",preview:"Predogled","constrain_proportions":"Obdr\u017ei razmerje",controls:"Nadzorni elementi",numloop:"\u0160t. zank",console:"Konzola",cache:"Predpomnjenje",autohref:"Avtomatska povezava",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Osnova",bgcolor:"Ozadje",wmode:"WM na\u010din",salign:"S-poravnava",align:"Poravnava",scale:"Stopnja pove\u010dave",quality:"Kakovost",shuffle:"Pome\u0161aj",prefetch:"Predpomnenje",nojava:"Brez Jave",maintainaspect:"Zakleni razmerje",imagestatus:"Slika stanja",center:"Sredina",autogotourl:"Samodejno na URL","shockwave_options":"Mo\u017enosti Shockwave","rmp_options":"Mo\u017enosti Real media player","wmp_options":"Mo\u017enosti Windows media player","qt_options":"Mo\u017enosti Quicktime","flash_options":"Mo\u017enosti Flash",hidden:"Skrito","align_bottom_left":"spodaj levo","align_bottom_right":"spodaj desno",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Nastavitve za vstavljeni zvok",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"HTML5 video nastavitve",altsource1:"Alternativni vir 1",altsource2:"Alternativni vir 2",preload:"Predpomnenje",poster:"Poster",source:"Vir","html5_audio_options":"Nastavitve za zvok","preload_none":"Brez prednalaganja","preload_metadata":"Prednalo\u017ei mata podatke za video ","preload_auto":"Privzeta nastavitev brskalnika",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sq_dlg.js
new file mode 100644
index 000000000..efe1332ef
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.media_dlg',{list:"Lista",file:"Skedari/URL",advanced:"T\u00eb Avancuara",general:"T\u00eb P\u00ebrgjithshme",title:"Fut / edito media","align_top_left":"Krye-majtas","align_center":"Qend\u00ebr","align_left":"Majtas","align_bottom":"Fund","align_right":"Djathtas","align_top":"Krye","qt_stream_warn":"Risurset RTSP duhet t\u00eb shtohen n\u00eb fush\u00ebn QT Src n\u00eb opsionet e avancuara.\nDuhet t\u00eb shtoni gjithashtu nj\u00eb version jo stream n\u00eb fush\u00ebn src..",qtsrc:"QT Src",progress:"Progresi",sound:"Z\u00ebri",swstretchvalign:"Zmadho Drejtim-V",swstretchhalign:"Zmadho Drejtim-H",swstretchstyle:"Stili i zmadhimit",scriptcallbacks:"Script Callbacks","align_top_right":"Krye-djathtas",uimode:"M\u00ebnyra UI",rate:"Raporti",playcount:"Numri i luajtjeve",defaultframe:"Kuadri fillestar",currentposition:"Pozicioni aktual",currentmarker:"Sh\u00ebnjuesi aktual",captioningid:"Id e titullit",baseurl:"URL baz\u00eb",balance:"Balanci",windowlessvideo:"Video pa dritare",stretchtofit:"Zmadho me p\u00ebrshtatje",mute:"Mbyll z\u00ebrin",invokeurls:"Th\u00ebrrit URL",fullscreen:"Pamje e plot\u00eb",enabled:"Aktivizuar",autostart:"Nisje automatike",volume:"Volumi",target:"Sh\u00ebnjestra",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Koha e p\u00ebrfundimit",starttime:"Koha e nisjes",enablejavascript:"Aktivizo JavaScript",correction:"Pa rregullime",targetcache:"Cache sh\u00ebnjestr\u00ebn",playeveryframe:"Luaj \u00e7do kuader",kioskmode:"M\u00ebnyra Kiosk",controller:"Kontrollues",menu:"Shfaq menu",loop:"Lak",play:"Luaj automatikisht",hspace:"Hap\u00ebsira-H",vspace:"Hap\u00ebsira-V","class_name":"Klasa",name:"Emri",id:"Id",type:"Tipi",size:"P\u00ebrmasat",preview:"Paraqitje","constrain_proportions":"Ruaj raportet",controls:"Kontrollet",numloop:"Numri lak\u00ebve",console:"Konsola",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Baza",bgcolor:"Fusha",wmode:"WMode",salign:"Drejtimi S",align:"Drejtimi",scale:"Shkalla",quality:"Cil\u00ebsia",shuffle:"Shuffle",prefetch:"Para ngarko",nojava:"Pa Java",maintainaspect:"Ruaj raportet",imagestatus:"Statusi fotos",center:"Qend\u00ebr",autogotourl:"Shko n\u00eb URL automatikisht","shockwave_options":"Opsionet e Shockwave","rmp_options":"Opsionet e Real media player","wmp_options":"Opsionet e Windows media player","qt_options":"Opsionet e Quicktime","flash_options":"Opsionet e Flash",hidden:"Fshehur","align_bottom_left":"Fund-majtas","align_bottom_right":"Fund-djathtas","embedded_audio_options":"Opsionet e Muzik\u00ebs","html5_video_options":"Opsionet e Videos HTML5",altsource1:"Burim Alternativ 1",altsource2:"Burim Alternativ 2",preload:"Para-ngarko",poster:"Poster",source:"Burim","html5_audio_options":"Opsionet e Muzik\u00ebs","preload_none":"Mos para-ngarko","preload_metadata":"Para-ngarko t\u00eb dh\u00ebnat meta t\u00eb videos","preload_auto":"L\u00ebrini shfletuesin ta vendos\u00eb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sr_dlg.js
new file mode 100644
index 000000000..7351c30fe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.media_dlg',{list:"Lista",file:"Fajl/URL",advanced:"Napredno",general:"Osnovno",title:"Umetni/Uredi multimedijalni sadr\u017eaj","align_top_left":"Gore levo","align_center":"Sredina","align_left":"Levo","align_bottom":"Dole","align_right":"Desno","align_top":"Gore","qt_stream_warn":"Rtsp izvori za striming bi trebali biti dodati u \'QT Src\' polje kartice \'Napredno\'.\nTrebalo bi tako\u0111e dodati i ne-striming verzije u \'Src\' polje.",qtsrc:"QT Src",progress:"Napredak",sound:"Zvuk",swstretchvalign:"Razvuci V-Poravnanje",swstretchhalign:"Razvuci H-Poravnanje",swstretchstyle:"Na\u010din razvla\u010denja",scriptcallbacks:"Script callbacks","align_top_right":"Gore desno",uimode:"UI re\u017eim",rate:"Tempo",playcount:"Broj izvo\u0111enje",defaultframe:"Podrazumevani frejm",currentposition:"Trenutna pozicija",currentmarker:"Trenutni marker",captioningid:"Id naslova",baseurl:"Osnovni URL",balance:"Balans",windowlessvideo:"Video bez prozora",stretchtofit:"Razvuci da se uklopi",mute:"Izklju\u010di zvuk",invokeurls:"U\u010ditaj URL-ove",fullscreen:"Preko celog ekrana",enabled:"Omogu\u0107eno",autostart:"Automatsko pokretanje",volume:"Ja\u010dina zvuka",target:"Meta",qtsrcchokespeed:"Brzina u\u010ditavanja",href:"Href",endtime:"Vreme zavr\u0161etka",starttime:"Vreme po\u010detka",enablejavascript:"Omogu\u0107i JavaScript",correction:"Bez korekcije",targetcache:"Odabrani ke\u0161",playeveryframe:"Prika\u017ei svaki frejm",kioskmode:"Kiosk re\u017eim",controller:"Kontrolor",menu:"Prika\u017ei meni",loop:"Vrti u krug",play:"Automatsko prikazivanje",hspace:"H-Space",vspace:"V-Space","class_name":"Klasa",name:"Naziv",id:"Id",type:"Vrsta",size:"Dimenzije",preview:"Preliminarni prikaz","constrain_proportions":"Zadr\u017ei proporcije",controls:"Kontrole",numloop:"Broj izvo\u0111enja",console:"Konzola",cache:"Ke\u0161",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Pozadina",wmode:"WMode",salign:"SAlign",align:"Poravnanje",scale:"Promena veli\u010dine",quality:"Kvalitet",shuffle:"Nasumi\u010dni redosled",prefetch:"Predpunjenje",nojava:"Bez jave",maintainaspect:"O\u010duvaj izgled",imagestatus:"Status slike",center:"Sredina",autogotourl:"Automatski idi na URL","shockwave_options":"Shockwave opcije","rmp_options":"Real media player opcije","wmp_options":"Windows media player opcije","qt_options":"Quicktime opcije","flash_options":"Flash opcije",hidden:"Sakriveno","align_bottom_left":"Dole levo","align_bottom_right":"Dole desno","html5_video_options":"HTML5 Video opcije",altsource1:"Alternativni izvor 1",altsource2:"Alternativni izvor 2",preload:"U\u010ditaj unapred",source:"Izvor",poster:"Poster","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sv_dlg.js
new file mode 100644
index 000000000..4f71780a9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.media_dlg',{list:"Lista",file:"Fil/URL",advanced:"Avancerat",general:"Generellt",title:"Infoga/redigera inb\u00e4ddad media","align_top_left":"Top left","align_center":"Center","align_left":"V\u00e4nster","align_bottom":"Botten","align_right":"H\u00f6ger","align_top":"Toppen","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..",qtsrc:"QT Src",progress:"Progress",sound:"Ljud",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullsk\u00e4rm",enabled:"Aktiverad",autostart:"Starta automatiskt",volume:"Volym",target:"M\u00e5l",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Slut tid",starttime:"Start tid",enablejavascript:"Aktivera JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Spela varje bildruta",kioskmode:"Kiosk mode",controller:"Controller",menu:"Visa menyn",loop:"Loopa",play:"Spela upp automatiskt",hspace:"H-Space",vspace:"V-Space","class_name":"Klass",name:"Namn",id:"Id",type:"Typ",size:"Dimensioner",preview:"F\u00f6rhandsvisning","constrain_proportions":"Bibeh\u00e5ll proportionerna",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Bakgrundsf\u00e4rg",wmode:"WMode",salign:"SAlign",align:"Justera",scale:"Skala",quality:"Kvalit\u00e9",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Bild status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Inst\u00e4llningar f\u00f6r Shockwave","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"G\u00f6md","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right",flash:"flash",quicktime:"quicktime ","embedded_audio_options":"Inst\u00e4llningar f\u00f6r inb\u00e4ddatljud",windowsmedia:"windowsmedia ",realmedia:"realmedia ",shockwave:"shockwave ",audio:"ljud",video:"video","html5_video_options":"HTML5 Filmegenskaper",altsource1:"Alternativk\u00e4lla 1",altsource2:"Alternativk\u00e4lla 2",preload:"F\u00f6rladda",poster:"Poster",source:"K\u00e4lla","html5_audio_options":"Ljudinst\u00e4llningar","preload_none":"F\u00f6rladda inte","preload_metadata":"F\u00f6rladda metadata","preload_auto":"L\u00e5t webbl\u00e4saren v\u00e4lja",iframe:"iframe",embeddedaudio:"inb\u00e4ddat ljud"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sy_dlg.js
new file mode 100644
index 000000000..f62810027
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.media_dlg',{list:"\u0720\u071d\u0723\u072c\u0710",file:"\u071f\u0722\u0726\u072a\u0710/URL",advanced:"\u072b\u0718\u072b\u071b\u0710",general:"\u0713\u0718\u0722\u071d\u0710",title:"\u0721\u0725\u0712\u0742\u072a/\u0723\u071d\u0718\u0721 \u071d\u0718\u0715\u0725\u0710 \u071a\u0712\u0742\u071d\u072b\u0710","align_top_left":"\u0723\u0721\u0720\u0710 \u0715\u0729\u072a\u0729\u0726\u072c\u0710","align_center":"\u0721\u0728\u0725\u0710","align_left":"\u0723\u0721\u0720\u0710","align_bottom":"\u072b\u072c\u0710","align_right":"\u071d\u0721\u071d\u0722\u0710","align_top":"\u0729\u072a\u0729\u0726\u072c\u0710","qt_stream_warn":"\u072a\u0715\u071d\u0718\u072c\u0710 \u0715\u0721\u0712\u0718\u0725\u0710 \u0715 RTSP \u0710\u0720\u071d\u0728\u072c\u0710 \u071d\u0720\u0717\u0307 \u0715\u0726\u071d\u072b\u0710 \u0721\u072c\u0718\u0723\u0726\u072c\u0710 \u0725\u0720 \u071a\u0729\u0720\u0710 \u0715\u0721\u0712\u0718\u0725\u0710 QT \u072c\u071a\u0718\u072c \u071b\u0712\u0720\u071d\u072c\u0710.\n \u0710\u0726 \u0710\u0720\u071d\u0728\u0710 \u071d\u0718\u072c \u0715\u072c\u0718\u0723\u0726\u072c \u071a\u0715\u0710 \u0720\u0710 \u0640 \u0721\u0722\u072c\u0710 \u0715\u072a\u0715\u071d\u0718\u072c\u0710 \u0725\u0720 \u0721\u0712\u0718\u0725\u0710 \u0715\u071a\u0729\u0720\u0710.",qtsrc:"\u0721\u0712\u0718\u0725 \u0715QT",progress:"\u0721\u072c\u0729\u0715\u0721\u0722\u0718\u072c\u0710",sound:"\u0729\u0720\u0710",swstretchvalign:"\u0721\u072c\u071a\u072c\u0710 \u0715\u0721\u0723\u0715\u072a\u0718\u072c\u0710 \u0640 V",swstretchhalign:"\u0721\u072c\u071a\u072c\u0710 \u0715\u0721\u0723\u0715\u072a\u0718\u072c\u0710 \u0640 V",swstretchstyle:"\u0710\u0723\u071f\u071d\u0721\u0710 \u0715\u0721\u072c\u071a\u072c\u0710",scriptcallbacks:"\u0729\u072a\u071d\u072c\u0710 \u0712\u072c\u072a\u071d\u072c\u0710 \u0715\u0723\u071f\u072a\u071d\u0726\u072c","align_top_right":"\u0729\u072a\u0729\u0726\u072c\u072c\u0742 \u071d\u0721\u071d\u0722\u0710",uimode:"\u0710\u0723\u071f\u071d\u0721\u0710 UI",rate:"\u0721\u071b\u071d\u0721\u0722\u0718\u072c\u0710",playcount:"\u071a\u0718\u072b\u0712\u0718\u0722\u0710 \u0715\u071b\u0710\u0720\u072c\u0710",defaultframe:"\u0710\u071b\u072a\u0710 \u072a\u072b\u071d\u0721\u0710",currentposition:"\u0715\u0718\u071f\u0710 \u0729\u0710\u071d\u0721\u071d\u0710",currentmarker:"\u072a\u0308\u0721\u0719\u0710 \u0729\u0710\u071d\u0721\u071d\u0308\u0710",captioningid:"\u0728\u071a\u071a\u0710 \u0715\u0728\u0718\u072a\u072c\u0710 ID",baseurl:"\u0710\u0723\u0710 \u0715 URL",balance:"\u072c\u0729\u071d\u0720\u0718\u072c\u0742\u0710",windowlessvideo:"\u0712\u0742\u071d\u0715\u071d\u0718 \u0715\u0720\u0710 \u0712\u0742\u071d\u0722\u0715\u0718\u0719",stretchtofit:"\u0721\u072c\u071a\u072c\u0710 \u0715\u0720\u071a\u071d\u0721\u0718\u072c\u0710",mute:"\u072b\u072c\u0729\u0718\u072c\u0710",invokeurls:"\u0729\u072a\u071d\u072c\u0710 \u0715URLs",fullscreen:"\u072b\u072b\u072c\u0710 \u0721\u0720\u071d\u072c\u0710",enabled:"\u0721\u0718\u0726\u0725\u0720\u0710",autostart:"\u072b\u0718\u072a\u071d\u0710 \u071d\u072c\u071d\u0710",volume:"\u0715\u0718\u0712\u0729\u0710",target:"\u0722\u071d\u072b\u0710",qtsrcchokespeed:"\u0723\u0718\u072a\u0717\u0712\u0742\u0710 \u0715\u071f\u0330\u0718\u071f",endtime:"\u0726\u072a\u0729\u072c\u0710 \u0715\u0725\u0715\u0722\u0710",starttime:"\u072b\u0718\u072a\u071d\u0710 \u0715\u0725\u0715\u0722\u0710",enablejavascript:"\u0721\u0726\u0725\u0720 \u071d\u0710\u0712\u0742\u0710\u0723\u071f\u072a\u071d\u0726\u072c",correction:"\u0720\u071d\u072c \u072c\u072a\u071d\u0728\u0718\u072c\u0710",targetcache:"\u0722\u071d\u072b\u0710 \u0715\u0715\u071f\u0742\u0718\u072a\u0710",playeveryframe:"\u071b\u0710\u0720 \u071f\u0720 \u0710\u071b\u072a\u0710",kioskmode:"\u0710\u0723\u071f\u071d\u0721\u0710 \u0715\u071f\u0718\u072b\u071f\u0710",controller:"\u0721\u072b\u0720\u071b\u0722\u0718\u072c\u0308\u0710",menu:"\u0721\u071a\u0719\u071d \u0720\u0718\u071a\u071d\u072c\u0710",loop:"\u0715\u0718\u072a\u072c\u0710",play:"\u071b\u0710\u0720\u072c\u0710 \u071d\u072c\u071d\u072c\u0710",hspace:"\u0723\u0726\u071d\u0729\u0718\u072c\u0710 \u0640 H",vspace:"\u0723\u071a\u071d\u0729\u0718\u072c\u0710 \u0640 V","class_name":"\u0723\u0715\u072a\u0710",name:"\u072b\u0721\u0710",id:"\u0717\u071d\u071d\u0718\u072c\u0710 ID",type:"\u0710\u0715\u072b\u0710",size:"\u072a\u071a\u0729\u071d\u0718\u072c\u0308\u0710",preview:"\u071a\u071d\u072a\u072c\u0710","constrain_proportions":"\u0710\u0723\u071d\u072a\u0718\u072c \u0721\u071b\u0718\u072c\u0722\u071d\u072c\u0710",controls:"\u0721\u072b\u0720\u071b\u0722\u0718\u072c\u0308\u0710",numloop:"\u072a\u0729\u0721\u0710 \u0715\u0715\u0718\u072a\u0308\u071d\u072c\u0710",console:"\u0720\u0718\u071a\u0710 \u0715\u0715\u0718\u0729\u0710",cache:"\u0715\u071f\u0742\u0718\u072a\u0710",autohref:" HREF \u071d\u072c\u071d\u0710",liveconnect:"\u0721\u0718\u071b\u071d\u0710 \u071a\u071d\u0710 \u0715SW",base:"\u0710\u0723\u0710",bgcolor:"\u0712\u072c\u0742\u072a\u071d\u0718\u072c\u0742\u0710",wmode:"\u0710\u0723\u071f\u071d\u0721\u0710 \u0715W",salign:"\u0721\u0713\u0722\u072c\u0710 \u0715S",align:"\u0721\u0713\u0330\u072a\u0713\u0722\u072c\u0710",scale:"\u0723\u0718\u072a\u0713\u0715\u0710",quality:"\u071b\u072a\u0729\u0718\u072c\u0742\u0710",shuffle:"\u071a\u0712\u0742\u071b\u072c\u0710\u060c \u0721\u0715\u072a\u0723\u072c\u0710\u060c \u0719\u0717\u071d\u072a\u0718\u072c\u0710",prefetch:"\u0721\u071b\u071d\u0712\u0742\u072c\u0710",nojava:"\u0720\u071d\u072c Java",maintainaspect:"\u0721\u0712\u071d\u0722\u072c\u0710 \u0715\u0722\u071b\u071d\u072a\u0718\u072c\u0710",imagestatus:"\u0710\u071d\u071f\u0722\u071d\u0718\u072c\u0742 \u0728\u0718\u072a\u072c\u0710",center:"\u0721\u0728\u0725\u0710",autogotourl:"\u071d\u072c\u071d\u0718\u072c\u0710 \u0715\u072a\u071a\u072b\u072c\u0710 \u0720 URL","shockwave_options":"\u0713\u0718\u0712\u071d\u0710 shockwave","rmp_options":"\u0713\u0718\u0712\u071d\u0710 \u0715\u071a\u0718\u072a\u0719\u0710 Real Media Player","wmp_options":"\u0713\u0718\u0712\u071d\u0308\u0710 \u0715\u071b\u0710\u0720\u0722\u0710 \u0715\u0721\u071d\u0715\u071d\u0710 \u0715\u0712\u0742\u071d\u0722\u0715\u0718\u0719","qt_options":"\u0713\u0718\u0712\u071d\u0308\u0710 \u0715Queck Time","flash_options":"\u0713\u0718\u0712\u071d\u0308\u0710 \u0715Flash",hidden:"\u071b\u072b\u071d\u0710","align_bottom_left":"\u0723\u0721\u0720\u0710 \u0715\u072b\u072c\u0710","align_bottom_right":"\u071d\u0721\u071d\u0722\u0710 \u0715\u072b\u072c\u0710","embedded_audio_options":"\u0713\u0718\u0712\u071d\u0710 \u0715\u071a\u0712\u0742\u071d\u072b\u0718\u072c\u0710 \u0715\u0729\u0720\u0710","html5_video_options":"\u0713\u0718\u0712\u071d\u0710 \u0715\u0712\u0742\u071d\u0715\u071d\u0718 HTML5",altsource1:"\u072c\u071a\u0720\u0718\u0726\u0710 \u0715\u0721\u0712\u0718\u0725\u07101",altsource2:"\u072c\u071a\u0720\u0718\u0726\u0710 \u0715\u0721\u0712\u0718\u0725\u07102",preload:"\u072c\u0722\u071d \u0721\u071b\u0725\u0722\u072c\u0710",poster:"\u072b\u0718\u072c\u0726\u071d\u072c\u0308\u0710",source:"\u0721\u0712\u0718\u0725\u0710","html5_audio_options":"\u0713\u0718\u0712\u071d\u0308\u0710 \u0715\u0729\u0720\u0710","preload_none":"\u0720\u0710 \u072c\u0722\u071d \u0721\u071b\u0725\u0722\u072c\u0710","preload_metadata":"\u072c\u0722\u071d \u0721\u071b\u0725\u0722\u072c\u0710 \u0715\u0721\u0718\u0715\u0725\u0722\u0718\u0722\u0718\u072c \u0721\u071d\u072c\u0710","preload_auto":"\u072b\u0712\u0742\u0718\u0729 \u0720\u0726\u0718\u0723\u0729\u0722\u0710 \u0715\u0721\u0729\u0720\u0712\u0722\u0710 \u0715\u0721\u0726\u0720\u071a\u0722\u0308\u0710",href:"HREF",flashvars:"Flash Vars",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ta_dlg.js
new file mode 100644
index 000000000..1b70c97f3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/te_dlg.js
new file mode 100644
index 000000000..4a97bd0cf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/th_dlg.js
new file mode 100644
index 000000000..091d4b88f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.media_dlg',{list:"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23",file:"\u0e44\u0e1f\u0e25\u0e4c/URL",advanced:"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07",general:"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b",title:"\u0e40\u0e1e\u0e34\u0e48\u0e21 / \u0e41\u0e01\u0e49\u0e44\u0e02 \u0e21\u0e35\u0e40\u0e14\u0e35\u0e22","align_top_left":"\u0e1a\u0e19 \u0e0b\u0e49\u0e32\u0e22","align_center":"\u0e01\u0e25\u0e32\u0e07","align_left":"\u0e0b\u0e49\u0e32\u0e22","align_bottom":"\u0e25\u0e48\u0e32\u0e07","align_right":"\u0e02\u0e27\u0e32","align_top":"\u0e1a\u0e19","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"\u0e1a\u0e19 \u0e02\u0e27\u0e32",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"\u0e40\u0e25\u0e48\u0e19\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34",volume:"Volume",target:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22 cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"\u0e41\u0e1c\u0e07\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21",menu:"\u0e41\u0e2a\u0e14\u0e07\u0e40\u0e21\u0e19\u0e39",loop:"\u0e40\u0e25\u0e48\u0e19\u0e0b\u0e49\u0e33",play:"\u0e40\u0e25\u0e48\u0e19\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34",hspace:"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19",vspace:"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07","class_name":"\u0e04\u0e25\u0e32\u0e2a",name:"\u0e0a\u0e37\u0e48\u0e2d",id:"Id",type:"\u0e0a\u0e19\u0e34\u0e14",size:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07",preview:"\u0e14\u0e39\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07","constrain_proportions":"\u0e04\u0e07\u0e2d\u0e31\u0e15\u0e23\u0e32\u0e2a\u0e48\u0e27\u0e19",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07",wmode:"WMode",salign:"SAlign",align:"Align",scale:"\u0e02\u0e19\u0e32\u0e14",quality:"\u0e04\u0e27\u0e32\u0e21\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"\u0e25\u0e48\u0e32\u0e07 \u0e0b\u0e49\u0e32\u0e22","align_bottom_right":"\u0e25\u0e48\u0e32\u0e07 \u0e02\u0e27\u0e32","embedded_audio_options":"Embedded Audio Options","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tn_dlg.js
new file mode 100644
index 000000000..3a6363a7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tr_dlg.js
new file mode 100644
index 000000000..a939d4099
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.media_dlg',{list:"Listele",file:"Dosya/URL",advanced:"Geli\u015fmi\u015f",general:"Genel",title:"T\u00fcmle\u015fik medya ekle / d\u00fczenle","align_top_left":"Sol \u00fcst","align_center":"Orta","align_left":"Sol","align_bottom":"Alt","align_right":"Sa\u011f","align_top":"\u00dcst","qt_stream_warn":"Ak\u0131\u015f rtsp kaynaklar\u0131 geli\u015fmi\u015f alt\u0131ndaki QT Kay. alan\u0131na girilmeli.\nKay. alan\u0131na ayr\u0131ca ak\u0131\u015fkan olmayan eklenir.",qtsrc:"QT Kay.",progress:"\u0130lerle",sound:"Ses",swstretchvalign:"Esnetme D-Hiza",swstretchhalign:"Esnetme Y-Hiza",swstretchstyle:"Esnetme stili",scriptcallbacks:"Script \u00e7a\u011f\u0131r","align_top_right":"Sa\u011f \u00fcst",uimode:"UI Modu",rate:"Oran",playcount:"Oynatma say\u0131s\u0131",defaultframe:"Varsay\u0131lan \u00e7er\u00e7eve",currentposition:"Se\u00e7ili konum",currentmarker:"Se\u00e7ili i\u015faret\u00e7i",captioningid:"Ba\u015fl\u0131k id",baseurl:"Ge\u00e7erli URL",balance:"Denge",windowlessvideo:"Penceresiz video",stretchtofit:"S\u0131\u011facak \u015fekilde boyutland\u0131r",mute:"Sessiz",invokeurls:"Ba\u015flatma URL\'si",fullscreen:"Tam ekran",enabled:"Aktif",autostart:"Otomatik ba\u015flat",volume:"Ses d\u00fczeyi",target:"Hedef",qtsrcchokespeed:"S\u0131k\u0131\u015ft\u0131rma h\u0131z\u0131",href:"Href",endtime:"Biti\u015f zaman\u0131",starttime:"Ba\u015flang\u0131\u00e7 zaman\u0131",enablejavascript:"Javascript Aktif",correction:"D\u00fczeltme yok",targetcache:"Hedef \u00f6nbellek",playeveryframe:"Her \u00e7er\u00e7eveyi oynat",kioskmode:"Kiosk modu",controller:"Kontroller",menu:"Men\u00fcy\u00fc g\u00f6ster",loop:"D\u00f6nd\u00fcr",play:"Otomatik oynat",hspace:"Yatay bo\u015fluk",vspace:"Dikey bo\u015fluk","class_name":"S\u0131n\u0131f",name:"\u0130sim",id:"Id",type:"Tip",size:"Boyutlar",preview:"\u00d6nizleme","constrain_proportions":"Oran\u0131 s\u0131n\u0131rla",controls:"Kontroller",numloop:"D\u00f6ng\u00fc say\u0131s\u0131",console:"Konsol",cache:"\u00d6nbellek",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash de\u011fi\u015fkeni",base:"Taban",bgcolor:"Arkaplan",wmode:"WModu",salign:"SHizala",align:"Hizala",scale:"\u00d6l\u00e7ek",quality:"Kalite",shuffle:"Kar\u0131\u015ft\u0131r",prefetch:"\u00d6n belle\u011fe al",nojava:"Java yok",maintainaspect:"Orant\u0131y\u0131 koru",imagestatus:"Resim durumu",center:"Orta",autogotourl:"URL\'e otomatik git","shockwave_options":"Shockware se\u00e7enekleri","rmp_options":"Real media player se\u00e7enekleri","wmp_options":"Windows media player se\u00e7enekleri","qt_options":"Quicktime se\u00e7enekleri","flash_options":"Flash se\u00e7enekleri",hidden:"Gizli","align_bottom_left":"Sol alt","align_bottom_right":"Sa\u011f alt",flash:"flash",quicktime:"quicktime","embedded_audio_options":"G\u00f6m\u00fcl\u00fc Ses Ayarlar\u0131",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"ses",video:"video","html5_video_options":"HTML5 Video Ayarlar\u0131",altsource1:"Alternatif Kaynak 1",altsource2:"Alternatif Kaynak 2",preload:"\u00d6ny\u00fckleme",poster:"Poster",source:"Kaynak","html5_audio_options":"Ses Ayarlar\u0131","preload_none":"\u00d6ny\u00fckleme Yapma","preload_metadata":"Vide metadata \u00f6ny\u00fckleme","preload_auto":"Kullan\u0131c\u0131n\u0131n taray\u0131c\u0131s\u0131 karar versin",iframe:"iframe",embeddedaudio:"g\u00f6m\u00fcl\u00fc ses"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tt_dlg.js
new file mode 100644
index 000000000..89b30ae17
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6/\u5730\u5740",advanced:"\u9032\u968e",general:"\u57fa\u672c",title:"\u63d2\u5165/\u7de8\u8f2f \u5a92\u9ad4","align_top_left":"\u9802\u90e8\u5c45\u5de6","align_center":"\u7f6e\u4e2d","align_left":"\u5c45\u5de6","align_bottom":"\u5e95\u90e8","align_right":"\u5c45\u53f3","align_top":"\u9802\u90e8","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..",qtsrc:"QT Src",progress:"\u9032\u5ea6",sound:"\u8072\u97f3",swstretchvalign:"\u7e2e\u653e\u81f3\u5782\u76f4\u5c0d\u9f4a",swstretchhalign:"\u7e2e\u653e\u81f3\u6c34\u5e73\u5c0d\u9f4a",swstretchstyle:"\u7e2e\u653e\u6a23\u5f0f",scriptcallbacks:"\u8173\u672c\u56de\u6a94","align_top_right":"\u9802\u90e8\u5c45\u53f3",uimode:"UI \u6a21\u5f0f",rate:"\u78bc\u7387",playcount:"\u64ad\u653e\u6b21\u6578",defaultframe:"\u9810\u8a2d\u683c",currentposition:"\u7576\u524d\u4f4d\u7f6e",currentmarker:"\u7576\u524d\u6a19\u7c64",captioningid:"\u5b57\u5e55 id",baseurl:"Base URL",balance:"\u5e73\u8861",windowlessvideo:"\u7121\u8996\u7a97\u5f71\u50cf",stretchtofit:"\u7e2e\u653e\u81f3\u5408\u9069\u5927\u5c0f",mute:"\u975c\u97f3",invokeurls:"\u8abf\u7528\u7684URLs",fullscreen:"\u5168\u87a2\u5e55",enabled:"\u5553\u7528",autostart:"\u81ea\u52d5\u958b\u59cb",volume:"\u97f3\u91cf",target:"\u76ee\u6a19",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u7d50\u675f\u6642\u9593",starttime:"\u958b\u59cb\u6642\u9593",enablejavascript:"\u5553\u7528 JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6a19\u66ab\u5b58",playeveryframe:"\u9010\u683c\u64ad\u653e",kioskmode:"Kiosk \u6a21\u5f0f",controller:"\u63a7\u5236\u81fa",menu:"\u986f\u793a\u529f\u80fd\u8868",loop:"\u8ff4\u5708",play:"\u81ea\u52d5\u64ad\u653e",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd","class_name":"\u985e\u540d",name:"\u540d\u7a31",id:"Id",type:"\u985e\u578b",size:"\u5927\u5c0f",preview:"\u9810\u89bd","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",controls:"\u63a7\u5236",numloop:"\u8ff4\u5708\u6b21\u6578",console:"\u63a7\u5236\u81fa",cache:"\u66ab\u5b58",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash\u8b8a\u6578",base:"\u57fa\u7dda",bgcolor:"\u80cc\u666f\u8272",wmode:"WMode",salign:"SAlign",align:"\u5c0d\u9f4a",scale:"\u7e2e\u653e",quality:"\u54c1\u8cea",shuffle:"\u96a8\u6a5f",prefetch:"\u9810\u8b80",nojava:"No java",maintainaspect:"\u7dad\u8b77\u72c0\u614b",imagestatus:"\u5716\u50cf\u72c0\u614b",center:"\u7f6e\u4e2d",autogotourl:"\u81ea\u52d5\u8df3\u8f49 URL","shockwave_options":"Shockwave \u9078\u9805","rmp_options":"Real media player \u9078\u9805","wmp_options":"Windows media player \u9078\u9805","qt_options":"Quicktime \u9078\u9805","flash_options":"Flash \u9078\u9805",hidden:"\u96b1\u85cf","align_bottom_left":"\u5e95\u90e8\u5c45\u5de6","align_bottom_right":"\u5e95\u90e8\u5c45\u53f3","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tw_dlg.js
new file mode 100644
index 000000000..a28423a3f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.media_dlg',{list:"\u5217\u8868",file:"\u5a92\u9ad4URL",advanced:"\u9032\u968e",general:"\u4e00\u822c",title:"\u63d2\u5165/\u7de8\u8f2f\u5a92\u9ad4","align_top_left":"\u5de6\u4e0a","align_center":"\u7f6e\u4e2d","align_left":"\u9760\u5de6","align_bottom":"\u9760\u4e0b","align_right":"\u9760\u53f3","align_top":"\u9760\u4e0a","qt_stream_warn":"\u4e32\u6d41\u5a92\u9ad4rtsp\u8cc7\u6e90\u61c9\u8a72\u52a0\u5230\u300c\u9032\u968e\u300d\u4e2dQT src\u3002 \n\u540c\u6642\u589e\u52a0\u975e\u4e32\u6d41\u5a92\u9ad4\u8cc7\u6e90\u5230src\u3002",qtsrc:"QT Src",progress:"\u9032\u5ea6",sound:"\u8072\u97f3",swstretchvalign:"\u7e2e\u653e\u81f3\u5782\u76f4\u5c0d\u9f4a",swstretchhalign:"\u7e2e\u653e\u81f3\u6c34\u5e73\u5c0d\u9f4a",swstretchstyle:"\u7e2e\u653e\u6a23\u5f0f",scriptcallbacks:"Script \u547c\u53eb","align_top_right":"\u53f3\u4e0a",uimode:"\u5916\u89c0\u6a21\u5f0f",rate:"\u6bd4\u7387",playcount:"\u64ad\u653e\u6b21\u6578",defaultframe:"\u9810\u8a2d\u756b\u9762",currentposition:"\u76ee\u524d\u4f4d\u7f6e",currentmarker:"\u76ee\u524d\u6a19\u8a18",captioningid:"\u5b57\u5e55\u7de8\u865f",baseurl:"\u57fa\u5e95 URL",balance:"\u5e73\u8861",windowlessvideo:"\u7121\u8996\u7a97\u64ad\u653e",stretchtofit:"\u7e2e\u653e\u81f3\u9069\u5408\u5927\u5c0f",mute:"\u975c\u97f3",invokeurls:"\u5f15\u7528\u7684 URLs",fullscreen:"\u5168\u87a2\u5e55",enabled:"\u53ef\u7528",autostart:"\u81ea\u52d5\u64ad\u653e",volume:"\u97f3\u91cf",target:"\u76ee\u6a19",qtsrcchokespeed:"\u963b\u585e\u901f\u5ea6",href:"\u8d85\u9023\u7d50",endtime:"\u7d50\u675f\u6642\u9593",starttime:"\u958b\u59cb\u6642\u9593",enablejavascript:"\u555f\u7528 JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6a19\u66ab\u5b58",playeveryframe:"\u9010\u756b\u9762\u64ad\u653e",kioskmode:"Kiosk\u6a21\u5f0f",controller:"\u63a7\u5236\u9762\u677f",menu:"\u986f\u793a\u9078\u9805",loop:"\u5faa\u74b0",play:"\u81ea\u52d5\u64ad\u653e",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd","class_name":"\u985e\u5225",name:"\u540d\u7a31",id:"ID",type:"\u985e\u578b",size:"\u5927\u5c0f",preview:"\u9810\u89bd","constrain_proportions":"\u9396\u5b9a\u6bd4\u4f8b",controls:"\u63a7\u5236",numloop:"\u5faa\u74b0\u6b21\u6578",console:"\u63a7\u5236\u53f0",cache:"\u66ab\u5b58",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash \u8b8a\u6578",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f\u8272",wmode:"\u8996\u7a97\u6a21\u5f0f",salign:"SAlign",align:"\u5c0d\u9f4a",scale:"\u7e2e\u653e",quality:"\u54c1\u8cea",shuffle:"\u96a8\u6a5f",prefetch:"\u9810\u5148\u8f09\u5165",nojava:"No Java",maintainaspect:"\u9396\u5b9a\u6bd4\u4f8b",imagestatus:"\u5716\u7247\u72c0\u614b",center:"\u7f6e\u4e2d",autogotourl:"\u81ea\u52d5\u8f49\u81f3 URL","shockwave_options":"Shockwave \u9078\u9805","rmp_options":"Real Media Player \u9078\u9805","wmp_options":"Windows Media Player \u9078\u9805","qt_options":"Quick Time \u9078\u9805","flash_options":"Flash \u9078\u9805",hidden:"\u96b1\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/uk_dlg.js
new file mode 100644
index 000000000..6f7a4b43f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.media_dlg',{list:"\u0421\u043f\u0438\u0441\u043e\u043a",file:"\u0424\u0430\u0439\u043b/URL",advanced:"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e",general:"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 / \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u0456 \u043c\u0435\u0434\u0456\u0430","align_top_left":"\u0417\u0432\u0435\u0440\u0445\u0443 \u0437\u043b\u0456\u0432\u0430","align_center":"\u0426\u0435\u043d\u0442\u0440","align_left":"\u041b\u0456\u0432\u043e","align_bottom":"\u041d\u0438\u0437","align_right":"\u041f\u0440\u0430\u0432\u043e","align_top":"\u0412\u0435\u0440\u0445","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..",qtsrc:"\u0414\u0436\u0435\u0440\u0435\u043b\u043e QT",progress:"\u0425\u0456\u0434",sound:"\u0417\u0432\u0443\u043a",swstretchvalign:"\u0420\u043e\u0437\u0442\u044f\u0433\u043d\u0443\u0442\u0438 \u0432\u0435\u0440\u0442. \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0430\u043d\u043d\u044f",swstretchhalign:"\u0420\u043e\u0437\u0442\u044f\u0433\u043d\u0443\u0442\u0438 \u0433\u043e\u0440\u0438\u0437. \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0430\u043d\u043d\u044f",swstretchstyle:"\u0420\u043e\u0437\u0442\u044f\u0433\u043d\u0443\u0442\u0438\u0439 \u0441\u0442\u0438\u043b\u044c",scriptcallbacks:"\u0417\u0432\u043e\u0440\u043e\u0442\u043d\u0456\u0439 \u0432\u0438\u043a\u043b\u0438\u043a \u0441\u0446\u0435\u043d\u0430\u0440\u0456\u044e","align_top_right":"\u0417\u0432\u0435\u0440\u0445\u0443 \u0437\u043f\u0440\u0430\u0432\u0430",uimode:"\u0420\u0435\u0436\u0438\u043c \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443",rate:"\u0428\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c",playcount:"\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u043d\u044c",defaultframe:"\u041a\u0430\u0434\u0440 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0430\u043d\u043d\u044f\u043c",currentposition:"\u041f\u043e\u0442\u043e\u0447\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0456\u044f",currentmarker:"\u041f\u043e\u0442\u043e\u0447\u043d\u0438\u0439 \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u0434\u043f\u0438\u0441\u0443",baseurl:"\u041e\u0441\u043d\u043e\u0432\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"Windowless video",stretchtofit:"\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438, \u0449\u043e\u0431 \u0432\u043c\u0456\u0441\u0442\u0438\u043b\u043e\u0441\u044c",mute:"\u0417\u0430\u0433\u043b\u0443\u0448\u0438\u0442\u0438",invokeurls:"\u0412\u0438\u043a\u043b\u0438\u043a\u0430\u0442\u0438 URLs",fullscreen:"\u041f\u043e\u0432\u043d\u0438\u0439 \u0435\u043a\u0440\u0430\u043d",enabled:"\u0414\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u0438\u0439",autostart:"\u0410\u0432\u0442\u043e\u0441\u0442\u0430\u0440\u0442",volume:"\u0413\u0443\u0447\u043d\u0456\u0441\u0442\u044c",target:"\u0426\u0456\u043b\u044c",qtsrcchokespeed:"\u0428\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u0437\u0430\u0433\u0430\u0441\u0430\u043d\u043d\u044f",href:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",endtime:"\u0427\u0430\u0441 \u043a\u0456\u043d\u0446\u044f",starttime:"\u0427\u0430\u0441 \u043f\u043e\u0447\u0430\u0442\u043a\u0443",enablejavascript:"\u0414\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0438 JavaScript",correction:"\u0411\u0435\u0437 \u043a\u043e\u0440\u0435\u043a\u0446\u0456\u0457",targetcache:"\u0426\u0456\u043b\u044c\u043e\u0432\u0438\u0439 \u043a\u0435\u0448",playeveryframe:"\u041f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u0442\u0438 \u043a\u043e\u0436\u0435\u043d \u043a\u0430\u0434\u0440",kioskmode:"\u041f\u043e\u0432\u043d\u043e\u0435\u043a\u0440\u0430\u043d\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c",controller:"\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440",menu:"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043c\u0435\u043d\u044e",loop:"\u041f\u043e\u0432\u0442\u043e\u0440\u044e\u0432\u0430\u0442\u0438",play:"\u0410\u0432\u0442\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u0432\u043d\u043d\u044f",hspace:"\u0433\u043e\u0440.\u0432\u0456\u0434\u0441\u0442\u0443\u043f",vspace:"\u0432\u0435\u0440\u0442.\u0432\u0456\u0434\u0441\u0442\u0443\u043f","class_name":"\u041a\u043b\u0430\u0441",name:"\u041d\u0430\u0437\u0432\u0430",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440",type:"\u0422\u0438\u043f",size:"\u0420\u043e\u0437\u043c\u0456\u0440\u0438",preview:"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434","constrain_proportions":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0456\u0457",controls:"\u041a\u0435\u0440\u0443\u0432\u0430\u043d\u043d\u044f",numloop:"\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0446\u0438\u043a\u043b\u0456\u0432",console:"\u041a\u043e\u043d\u0441\u043e\u043b\u044c",cache:"\u041a\u0435\u0448",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438",base:"\u0411\u0430\u0437\u0430",bgcolor:"\u0424\u043e\u043d",wmode:"W-\u0440\u0435\u0436\u0438\u043c",salign:"S-\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",scale:"\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043d\u043d\u044f",quality:"\u042f\u043a\u0456\u0441\u0442\u044c",shuffle:"\u041f\u0435\u0440\u0435\u0442\u0430\u0441\u0443\u0432\u0430\u0442\u0438",prefetch:"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0454 \u0432\u0438\u043b\u0443\u0447\u0435\u043d\u043d\u044f",nojava:"\u0411\u0435\u0437 Java",maintainaspect:"\u0412\u0434\u0435\u0440\u0436\u0443\u0432\u0430\u0442\u0438 \u0440\u0430\u043a\u0443\u0440\u0441",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",center:"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",autogotourl:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0430\u0432\u0442\u043e\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443","shockwave_options":"\u041e\u043f\u0446\u0456\u0457 Shockwave","rmp_options":"\u041e\u043f\u0446\u0456\u0457 Real media player","wmp_options":"\u041e\u043f\u0446\u0456\u0457 Windows media player","qt_options":"\u041e\u043f\u0446\u0456\u0457 Quicktime","flash_options":"\u041e\u043f\u0446\u0456\u0457 Flash",hidden:"\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u043d\u0438\u0439","align_bottom_left":"\u0417\u043d\u0438\u0437\u0443 \u0437\u043b\u0456\u0432\u0430","align_bottom_right":"\u0417\u043d\u0438\u0437\u0443 \u0437\u043f\u0440\u0430\u0432\u0430",flash:"flash",quicktime:"quicktime","embedded_audio_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u043e\u0433\u043e \u0437\u0432\u0443\u043a\u0443",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"\u0412\u0456\u0434\u0435\u043e \u043e\u043f\u0446\u0456\u0457 HTML5",altsource1:"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e 1",altsource2:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e 2",preload:"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0454 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f",poster:"\u041f\u043e\u0441\u0442\u0435\u0440",source:"\u0414\u0436\u0435\u0440\u0435\u043b\u043e","html5_audio_options":"\u0410\u0443\u0434\u0456\u043e \u043e\u043f\u0446\u0456\u0457","preload_none":"\u0411\u0435\u0437 \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e\u0457 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","preload_metadata":"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0438\u0445 \u0432\u0456\u0434\u0435\u043e","preload_auto":"\u041d\u0430 \u0440\u043e\u0437\u0441\u0443\u0434 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ur_dlg.js
new file mode 100644
index 000000000..6f368a83c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/vi_dlg.js
new file mode 100644
index 000000000..04fca2d58
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.media_dlg',{list:"Danh s\u00e1ch",file:"T\u1eadp tin/URL",advanced:"N\u00e2ng cao",general:"Chung",title:"Ch\u00e8n / s\u1eeda ph\u01b0\u01a1ng ti\u1ec7n truy\u1ec1n th\u00f4ng nh\u00fang","align_top_left":"Tr\u00ean c\u00f9ng tr\u00e1i","align_center":"Gi\u1eefa","align_left":"Tr\u00e1i","align_bottom":"D\u01b0\u1edbi c\u00f9ng","align_right":"Ph\u1ea3i","align_top":"Tr\u00ean c\u00f9ng","qt_stream_warn":"Ngu\u1ed3n rtsp theo lu\u1ed3ng n\u00ean \u0111\u01b0\u1ee3c th\u00eam v\u00e0o tr\u01b0\u1eddng QT Src d\u01b0\u1edbi th\u1ebb n\u00e2ng cao.\nB\u1ea1n c\u0169ng n\u00ean th\u00eam m\u1ed9t phi\u00ean b\u1ea3n kh\u00f4ng theo lu\u1ed3ng v\u00e0o tr\u01b0\u1eddng Src..",qtsrc:"QT Src",progress:"\u0110ang ti\u1ebfn tri\u1ec3n",sound:"\u00c2m thanh",swstretchvalign:"D\u00e3n theo V-Align",swstretchhalign:"D\u00e3n theo H-Align",swstretchstyle:"Ki\u1ec3u d\u00e3n",scriptcallbacks:"H\u00e0m g\u1ecdi ng\u01b0\u1ee3c Script","align_top_right":"Tr\u00ean c\u00f9ng ph\u1ea3i",uimode:"Ch\u1ebf \u0111\u1ed9 UI",rate:"T\u1ed1c \u0111\u1ed9",playcount:"\u0110\u1ebfm l\u1ea7n ph\u00e1t",defaultframe:"Khung m\u1eb7c \u0111\u1ecbnh",currentposition:"V\u1ecb tr\u00ed hi\u1ec7n th\u1eddi",currentmarker:"B\u1ed9 t\u1ea1o hi\u1ec7n th\u1eddi",captioningid:"id \u0111\u1ea7u \u0111\u1ec1",baseurl:"Base URL",balance:"C\u00e2n b\u1eb1ng",windowlessvideo:"Video kh\u00f4ng c\u1eeda s\u1ed5",stretchtofit:"D\u00e3n \u0111\u1ec3 ph\u00f9 h\u1ee3p",mute:"T\u1eaft \u00e2m thanh",invokeurls:"URL tri\u1ec7u g\u1ecdi",fullscreen:"To\u00e0n m\u00e0n h\u00ecnh",enabled:"Cho ph\u00e9p",autostart:"T\u1ef1 \u0111\u1ed9ng b\u1eaft \u0111\u1ea7u",volume:"\u00c2m l\u01b0\u1ee3ng",target:"\u0110\u00edch",qtsrcchokespeed:"T\u1ed1c \u0111\u1ed9 Choke",href:"Href",endtime:"Th\u1eddi gian k\u1ebft th\u00fac",starttime:"Th\u1eddi gian b\u1eaft \u0111\u1ea7u",enablejavascript:"Cho ph\u00e9p JavaScript",correction:"Kh\u00f4ng ch\u1ec9nh",targetcache:"B\u1ed9 nh\u1edb \u0111\u1ec7m \u0111\u00edch",playeveryframe:"Ph\u00e1t t\u1ea5t c\u1ea3 khung",kioskmode:"Ch\u1ebf \u0111\u1ed9 Kiosk",controller:"Tr\u00ecnh \u0111i\u1ec1u khi\u1ec3n",menu:"Hi\u1ec3n th\u1ecb menu",loop:"L\u1eb7p",play:"T\u1ef1 \u0111\u1ed9ng ph\u00e1t",hspace:"H-Space",vspace:"V-Space","class_name":"L\u1edbp",name:"T\u00ean",id:"Id",type:"Ki\u1ec3u",size:"K\u00edch th\u01b0\u1edbc",preview:"Xem tr\u01b0\u1edbc","constrain_proportions":"R\u00e0ng bu\u1ed9c t\u1ec9 l\u1ec7",controls:"\u0110i\u1ec1u khi\u1ec3n",numloop:"S\u1ed1 l\u1eb7p",console:"B\u00e0n \u0111i\u1ec1u khi\u1ec3n",cache:"B\u1ed9 nh\u1edb \u0111\u1ec7m",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"C\u01a1 s\u1edf",bgcolor:"N\u1ec1n",wmode:"WMode",salign:"SAlign",align:"Canh l\u1ec1",scale:"T\u1ec9 l\u1ec7",quality:"Ch\u1ea5t l\u01b0\u1ee3ng",shuffle:"Kh\u00f4ng theo tr\u1eadt t\u1ef1",prefetch:"T\u00ecm n\u1ea1p tr\u01b0\u1edbc",nojava:"Kh\u00f4ng c\u00f3 java",maintainaspect:"Duy tr\u00ec c\u1ea1nh",imagestatus:"Tr\u1ea1ng th\u00e1i \u1ea3nh",center:"Gi\u1eefa",autogotourl:"T\u1ef1 \u0111\u1ed9ng nh\u1ea3y t\u1edbi URL","shockwave_options":"T\u00f9y ch\u1ecdn Shockwave","rmp_options":"T\u00f9y ch\u1ecdn tr\u00ecnh ch\u01a1i media Real","wmp_options":"T\u00f9y ch\u1ecdn tr\u00ecnh ch\u01a1i media Windows","qt_options":"T\u00f9y ch\u1ecdn Quicktime","flash_options":"T\u00f9y ch\u1ecdn Flash",hidden:"\u1ea8n","align_bottom_left":"D\u01b0\u1edbi c\u00f9ng tr\u00e1i","align_bottom_right":"D\u01b0\u1edbi c\u00f9ng ph\u1ea3i","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..273a48f0c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6/URL",advanced:"\u9ad8\u7ea7",general:"\u666e\u901a",title:"\u63d2\u5165/\u7f16\u8f91 \u5d4c\u5165\u5f0f\u5a92\u4f53","align_top_left":"\u5de6\u4e0a","align_center":"\u5c45\u4e2d","align_left":"\u5c45\u5de6","align_bottom":"\u5c45\u4e0b","align_right":"\u5c45\u53f3","align_top":"\u5c45\u4e0a","qt_stream_warn":"\u6d41\u5a92\u4f53RTSP\u8d44\u6e90\u5e94\u6dfb\u52a0\u5230\u9ad8\u7ea7\u9009\u9879\u7684QT\u8d44\u6e90\u4e2d\u3002n\u540c\u65f6\uff0c\u60a8\u4e5f\u53ef\u4ee5\u5728\u8fd9\u91cc\u52a0\u5165\u4e00\u4e2a\u975e\u6d41\u5a92\u4f53\u3002",qtsrc:"QT\u8d44\u6e90",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u5782\u76f4\u62c9\u4f38",swstretchhalign:"\u6c34\u5e73\u62c9\u4f38",swstretchstyle:"\u62c9\u4f38\u65b9\u5f0f",scriptcallbacks:"\u811a\u672c\u56de\u8c03","align_top_right":"\u53f3\u4e0a",uimode:"\u5916\u89c2\u6a21\u5f0f",rate:"\u6bd4\u7387",playcount:"\u64ad\u653e\u6b21\u6570",defaultframe:"\u9ed8\u8ba4\u5e27",currentposition:"\u5f53\u524d\u4f4d\u7f6e",currentmarker:"\u5f53\u524d\u6807\u8bb0",captioningid:"\u5b57\u5e55ID",baseurl:"\u57fa\u7840\u8def\u5f84",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u8fb9\u6846",stretchtofit:"\u62c9\u4f38\u5230\u9002\u5408",mute:"\u9759\u97f3",invokeurls:"\u5f15\u7528URL",fullscreen:"\u5168\u5c4f",enabled:"\u542f\u7528",autostart:"\u81ea\u52a8\u64ad\u653e",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"\u9650\u5236\u901f\u5ea6",href:"\u8d85\u94fe\u63a5",endtime:"\u7ed3\u675f\u65f6\u95f4",starttime:"\u5f00\u59cb\u65f6\u95f4",enablejavascript:"\u542f\u7528JavaScript",correction:"\u65e0\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u9010\u5e27\u64ad\u653e",kioskmode:"\u5168\u5c4f\u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u663e\u793a\u83dc\u5355",loop:"\u5faa\u73af",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u6c34\u5e73\u8ddd\u79bb",vspace:"\u5782\u76f4\u8ddd\u79bb","class_name":"\u7c7b\u522b",name:"\u540d\u79f0",id:"ID",type:"\u7c7b\u578b",size:"\u5c3a\u5bf8",preview:"\u9884\u89c8","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",controls:"\u64ad\u653e\u63a7\u5236",numloop:"\u5faa\u73af\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"\u81ea\u52a8\u8df3\u8f6c",liveconnect:"JavaScript\u5f00\u542f",flashvars:"Flash\u53d8\u91cf",base:"\u57fa\u7840\u8def\u5f84",bgcolor:"\u80cc\u666f",wmode:"\u7a97\u4f53\u6a21\u5f0f",salign:"\u5a92\u4f53\u5bf9\u9f50",align:"\u6587\u672c\u5bf9\u9f50",scale:"\u7f29\u653e",quality:"\u753b\u8d28",shuffle:"\u968f\u673a",prefetch:"\u9884\u52a0\u8f7d",nojava:"\u65e0java",maintainaspect:"\u4fdd\u6301\u5916\u89c2",imagestatus:"\u56fe\u7247\u72b6\u6001",center:"\u5c45\u4e2d",autogotourl:"\u81ea\u52a8\u8f6c\u5230URL","shockwave_options":"Shockwave\u9009\u9879","rmp_options":"Real media player\u9009\u9879","wmp_options":"Windows media player\u9009\u9879","qt_options":"Quicktime\u9009\u9879","flash_options":"Flash\u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b","html5_video_options":"HTML5\u89c6\u9891\u9009\u9879",altsource1:"\u66ff\u4ee3\u8d44\u6e901",altsource2:"\u66ff\u4ee3\u8d44\u6e902",preload:"\u9884\u52a0\u8f7d",poster:"\u6d77\u62a5",source:"\u8d44\u6e90","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..da608d42f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.media_dlg',{"qt_stream_warn":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",source:"\u5d4c\u5165\u539f\u59cb\u6a94",list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh_dlg.js
new file mode 100644
index 000000000..d18a853f9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.media_dlg',{list:"\u5217\u8868",file:"\u6a94\u6848/URL",advanced:"\u9032\u968e\u8a2d\u5b9a",general:"\u4e00\u822c",title:"\u63d2\u5165/\u7de8\u8f2f\u5d4c\u5165\u5a92\u9ad4","align_top_left":"\u5de6\u4e0a","align_center":"\u7f6e\u4e2d","align_left":"\u9760\u5de6","align_bottom":"\u9760\u4e0b","align_right":"\u9760\u53f3","align_top":"\u9760\u4e0a","qt_stream_warn":"\u4e32\u6d41\u5a92\u9ad4 rtsp \u7db2\u5740\u61c9\u586b\u5beb\u300e\u9032\u968e\u300f\u4e2d\u7684 QT Src \u6b04\u4f4d.\n\u540c\u6642\u5728 Src \u6b04\u4f4d\u4e2d\u586b\u5beb\u975e\u4e32\u6d41\u5a92\u9ad4\u7db2\u5740.",qtsrc:"QT Src",progress:"\u9032\u5ea6",sound:"\u8072\u97f3",swstretchvalign:"\u7e2e\u653e\u81f3\u5782\u76f4\u5c0d\u9f4a",swstretchhalign:"\u7e2e\u653e\u81f3\u6c34\u5e73\u5c0d\u9f4a",swstretchstyle:"\u7e2e\u653e\u6a23\u5f0f",scriptcallbacks:"Script \u547c\u53eb","align_top_right":"\u53f3\u4e0a",uimode:"\u9762\u677f\u6a21\u5f0f",rate:"\u6bd4\u4f8b",playcount:"\u64ad\u653e\u6b21\u6578",defaultframe:"\u9810\u8a2d\u756b\u9762",currentposition:"\u76ee\u524d\u4f4d\u7f6e",currentmarker:"\u76ee\u524d\u6a19\u8a18",captioningid:"\u5b57\u5e55ID",baseurl:"\u57fa\u5e95 URL",balance:"\u5e73\u8861",windowlessvideo:"\u7121\u8996\u7a97\u64ad\u653e",stretchtofit:"\u7e2e\u653e\u81f3\u6700\u4f73\u5927\u5c0f",mute:"\u975c\u97f3",invokeurls:"\u5f15\u7528\u7684 URLs",fullscreen:"\u5168\u87a2\u5e55",enabled:"\u53ef\u7528",autostart:"\u81ea\u52d5\u64ad\u653e",volume:"\u97f3\u91cf",target:"\u76ee\u6a19",qtsrcchokespeed:"\u9650\u5236\u901f\u5ea6",href:"\u8d85\u9023\u7d50",endtime:"\u7d50\u675f\u6642\u9593",starttime:"\u958b\u59cb\u6642\u9593",enablejavascript:"\u555f\u7528 JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6a19\u7de9\u5b58",playeveryframe:"\u9010\u683c\u64ad\u653e",kioskmode:"Kiosk \u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u986f\u793a\u9078\u55ae",loop:"\u5faa\u74b0\u64ad\u653e",play:"\u81ea\u52d5\u64ad\u653e",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd","class_name":"\u985e\u5225",name:"\u540d\u7a31",id:"ID",type:"\u985e\u578b",size:"\u5927\u5c0f",preview:"\u9810\u89bd","constrain_proportions":"\u56fa\u5b9a\u6bd4\u4f8b",controls:"\u63a7\u5236",numloop:"\u5faa\u74b0\u6b21\u6578",console:"\u63a7\u5236\u53f0",cache:"\u7de9\u5b58",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash \u53c3\u6578",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f\u984f\u8272",wmode:"\u8996\u7a97\u6a21\u5f0f",salign:"\u5c0d\u9f4a\u4f4d\u7f6e",align:"\u5c0d\u9f4a",scale:"\u7e2e\u653e",quality:"\u54c1\u8cea",shuffle:"\u96a8\u6a5f",prefetch:"\u9810\u8f09",nojava:"No Java",maintainaspect:"\u56fa\u5b9a\u6bd4\u4f8b",imagestatus:"\u5716\u7247\u72c0\u614b",center:"\u7f6e\u4e2d",autogotourl:"\u81ea\u52d5\u8df3\u8f49 URL","shockwave_options":"Shockwave \u9078\u9805","rmp_options":"Real Media Player \u9078\u9805","wmp_options":"Windows Media Player \u9078\u9805","qt_options":"Quick Time \u9078\u9805","flash_options":"Flash \u9078\u9805",hidden:"\u96b1\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b",flash:"Flash",quicktime:"QuickTime","embedded_audio_options":"\u5d4c\u5165\u8072\u97f3\u9078\u9805",windowsmedia:"Windows Media",realmedia:"Real Media",shockwave:"Shockwave",audio:"HTML5 Audio",video:"HTML5 Video","html5_video_options":"HTML5 Video \u9078\u9805",altsource1:"\u66ff\u4ee3\u4f86\u6e90 1",altsource2:"\u66ff\u4ee3\u4f86\u6e90 2",preload:"\u9810\u5148\u8f09\u5165",poster:"\u5f71\u7247\u7e2e\u5716",source:"\u539f\u59cb\u78bc","html5_audio_options":"\u8072\u97f3\u9078\u9805","preload_none":"\u7121\u9810\u5148\u8f09\u5165","preload_metadata":"\u9810\u5148\u8f09\u5165\u5f71\u756bMetadata","preload_auto":"\u8b93\u7528\u6236\u700f\u89bd\u5668\u6c7a\u5b9a",iframe:"Iframe",embeddedaudio:"Embedded Audio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zu_dlg.js
new file mode 100644
index 000000000..d76e333bd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6/\u7f51\u5740",advanced:"\u9ad8\u7ea7",general:"\u4e00\u822c",title:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53","align_top_left":"\u5de6\u4e0a","align_center":"\u4e2d\u95f4","align_left":"\u9760\u5de6","align_bottom":"\u4e0b\u65b9","align_right":"\u9760\u53f3","align_top":"\u4e0a\u65b9","qt_stream_warn":"\u6d41\u5f0frtsp\u8d44\u6e90\u5e94\u8be5\u6dfb\u52a0\u5230\u201c\u9ad8\u7ea7\u201d\u4e2dQT Src\u3002\n\u540c\u65f6\u6dfb\u52a0\u975e\u6d41\u5f0f\u8d44\u6e90\u5230Src\u3002",qtsrc:"QT Src",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u5782\u76f4\u62c9\u5347",swstretchhalign:"\u6c34\u51c6\u62c9\u5347",swstretchstyle:"\u62c9\u5347\u6a21\u5f0f",scriptcallbacks:"\u811a\u672c\u56de\u6863","align_top_right":"\u53f3\u4e0a",uimode:"\u9762\u677f\u6a21\u5f0f",rate:"\u5e27\u7387",playcount:"\u64ad\u653e\u8ba1\u6570",defaultframe:"\u9ed8\u8ba4\u5e27",currentposition:"\u5f53\u524d\u4f4d\u7f6e",currentmarker:"\u5f53\u524d\u6807\u8bb0",captioningid:"Captioning id",baseurl:"\u57fa\u51c6URL",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u8fb9\u6846",stretchtofit:"\u62c9\u4f38",mute:"\u9759\u97f3",invokeurls:"\u76f8\u5173URLs",fullscreen:"\u5168\u5c4f",enabled:"\u542f\u7528",autostart:"\u81ea\u52a8\u5f00\u59cb",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"Choke speed",href:"\u8fde\u7ed3",endtime:"\u7ed3\u675f\u65f6\u95f4",starttime:"\u5f00\u59cb\u65f6\u95f4",enablejavascript:"\u542f\u7528JavaScript",correction:"\u6ca1\u6709\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u64ad\u653e\u6bcf\u4e00\u5e27",kioskmode:"Kiosk\u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u663e\u793a\u529f\u80fd\u8868",loop:"\u56de\u5708\u64ad\u653e",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u5782\u76f4\u95f4\u8ddd",vspace:"\u6c34\u51c6\u95f4\u8ddd","class_name":"\u7c7b\u578b",name:"\u540d\u79f0",id:"Id",type:"\u7c7b\u578b",size:"\u5c3a\u5bf8",preview:"\u9884\u89c8","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",controls:"\u63a7\u5236\u5668",numloop:"\u56de\u5708\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"\u81ea\u52a8HREF",liveconnect:"SWLiveConnect",flashvars:"\u53c2\u6570",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f\u8272",wmode:"\u89c6\u7a97\u6a21\u5f0f",salign:"SAlign",align:"\u5bf9\u9f50",scale:"\u6bd4\u4f8b",quality:"\u54c1\u8d28",shuffle:"Shuffle",prefetch:"\u9884\u8bfb\u53d6",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"\u56fe\u50cf\u72b6\u6001",center:"\u4e2d\u5fc3",autogotourl:"\u81ea\u52a8\u8f6c\u5230URL","shockwave_options":"Shockwave\u9009\u9879","rmp_options":"Real media player\u9009\u9879","wmp_options":"Windows media player\u9009\u9879","qt_options":"Quicktime\u9009\u9879","flash_options":"Flash\u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/media.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/media.htm
new file mode 100644
index 000000000..957d83a68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/media.htm
@@ -0,0 +1,922 @@
+<!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>{#media_dlg.title}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/media.js"></script>
+ <script type="text/javascript" src="../../utils/mctabs.js"></script>
+ <script type="text/javascript" src="../../utils/validate.js"></script>
+ <script type="text/javascript" src="../../utils/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
+ <link href="css/media.css" rel="stylesheet" type="text/css" />
+</head>
+<body style="display: none" role="application">
+<form onsubmit="Media.insert();return false;" action="#">
+ <div class="tabs" role="presentation">
+ <ul>
+ <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>
+ <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>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#media_dlg.general}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td><label for="media_type">{#media_dlg.type}</label></td>
+ <td>
+ <select id="media_type"></select>
+ </td>
+ </tr>
+ <tr>
+ <td><label for="src">{#media_dlg.file}</label></td>
+ <td>
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="src" name="src" type="text" value="" class="mceFocus" onchange="Media.formToData();" /></td>
+ <td id="filebrowsercontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr id="linklistrow">
+ <td><label for="linklist">{#media_dlg.list}</label></td>
+ <td id="linklistcontainer"><select id="linklist"><option value=""></option></select></td>
+ </tr>
+ <tr>
+ <td><label for="width">{#media_dlg.size}</label></td>
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <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>
+ <td>&nbsp;&nbsp;<input id="constrain" type="checkbox" name="constrain" class="checkbox" checked="checked" /></td>
+ <td><label id="constrainlabel" for="constrain">{#media_dlg.constrain_proportions}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset>
+ <legend>{#media_dlg.preview}</legend>
+ <div id="prev"></div>
+ </fieldset>
+ </div>
+
+ <div id="advanced_panel" class="panel">
+ <fieldset>
+ <legend>{#media_dlg.advanced}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">
+ <tr>
+ <td><label for="id">{#media_dlg.id}</label></td>
+ <td><input type="text" id="id" name="id" onchange="Media.formToData();" /></td>
+ <td><label for="name">{#media_dlg.name}</label></td>
+ <td><input type="text" id="name" name="name" onchange="Media.formToData();" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="align">{#media_dlg.align}</label></td>
+ <td>
+ <select id="align" name="align" onchange="Media.formToData();">
+ <option value="">{#not_set}</option>
+ <option value="top">{#media_dlg.align_top}</option>
+ <option value="right">{#media_dlg.align_right}</option>
+ <option value="bottom">{#media_dlg.align_bottom}</option>
+ <option value="left">{#media_dlg.align_left}</option>
+ </select>
+ </td>
+
+ <td><label for="bgcolor">{#media_dlg.bgcolor}</label></td>
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');Media.formToData();" /></td>
+ <td id="bgcolor_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="vspace">{#media_dlg.vspace}</label></td>
+ <td><input type="text" id="vspace" name="vspace" class="number" onchange="Media.formToData();" /></td>
+ <td><label for="hspace">{#media_dlg.hspace}</label></td>
+ <td><input type="text" id="hspace" name="hspace" class="number" onchange="Media.formToData();" /></td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset id="video_options">
+ <legend>{#media_dlg.html5_video_options}</legend>
+
+ <table role="presentation">
+ <tr>
+ <td><label for="video_altsource1">{#media_dlg.altsource1}</label></td>
+ <td>
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input type="text" id="video_altsource1" name="video_altsource1" onchange="Media.formToData();" style="width: 240px" /></td>
+ <td id="video_altsource1_filebrowser">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="video_altsource2">{#media_dlg.altsource2}</label></td>
+ <td>
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input type="text" id="video_altsource2" name="video_altsource2" onchange="Media.formToData();" style="width: 240px" /></td>
+ <td id="video_altsource2_filebrowser">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="video_poster">{#media_dlg.poster}</label></td>
+ <td>
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input type="text" id="video_poster" name="video_poster" onchange="Media.formToData();" style="width: 240px" /></td>
+ <td id="video_poster_filebrowser">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="video_preload">{#media_dlg.preload}</label></td>
+ <td>
+ <select id="video_preload" name="video_preload" onchange="Media.formToData();">
+ <option value="none">{#media_dlg.preload_none}</option>
+ <option value="metadata">{#media_dlg.preload_metadata}</option>
+ <option value="auto">{#media_dlg.preload_auto}</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="video_autoplay" name="video_autoplay" onchange="Media.formToData();" /></td>
+ <td><label for="video_autoplay">{#media_dlg.play}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="video_muted" name="video_muted" onchange="Media.formToData();" /></td>
+ <td><label for="video_muted">{#media_dlg.mute}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="video_loop" name="video_loop" onchange="Media.formToData();" /></td>
+ <td><label for="video_loop">{#media_dlg.loop}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="video_controls" name="video_controls" onchange="Media.formToData();" /></td>
+ <td><label for="video_controls">{#media_dlg.controls}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset id="embeddedaudio_options">
+ <legend>{#media_dlg.embedded_audio_options}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="embeddedaudio_autoplay" name="audio_autoplay" onchange="Media.formToData();" /></td>
+ <td><label for="audio_autoplay">{#media_dlg.play}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="embeddedaudio_loop" name="audio_loop" onchange="Media.formToData();" /></td>
+ <td><label for="audio_loop">{#media_dlg.loop}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="embeddedaudio_controls" name="audio_controls" onchange="Media.formToData();" /></td>
+ <td><label for="audio_controls">{#media_dlg.controls}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset id="audio_options">
+ <legend>{#media_dlg.html5_audio_options}</legend>
+
+ <table role="presentation">
+ <tr>
+ <td><label for="audio_altsource1">{#media_dlg.altsource1}</label></td>
+ <td>
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input type="text" id="audio_altsource1" name="audio_altsource1" onchange="Media.formToData();" style="width: 240px" /></td>
+ <td id="audio_altsource1_filebrowser">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="audio_altsource2">{#media_dlg.altsource2}</label></td>
+ <td>
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input type="text" id="audio_altsource2" name="audio_altsource2" onchange="Media.formToData();" style="width: 240px" /></td>
+ <td id="audio_altsource2_filebrowser">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="audio_preload">{#media_dlg.preload}</label></td>
+ <td>
+ <select id="audio_preload" name="audio_preload" onchange="Media.formToData();">
+ <option value="none">{#media_dlg.preload_none}</option>
+ <option value="metadata">{#media_dlg.preload_metadata}</option>
+ <option value="auto">{#media_dlg.preload_auto}</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="audio_autoplay" name="audio_autoplay" onchange="Media.formToData();" /></td>
+ <td><label for="audio_autoplay">{#media_dlg.play}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="audio_loop" name="audio_loop" onchange="Media.formToData();" /></td>
+ <td><label for="audio_loop">{#media_dlg.loop}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="audio_controls" name="audio_controls" onchange="Media.formToData();" /></td>
+ <td><label for="audio_controls">{#media_dlg.controls}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset id="flash_options">
+ <legend>{#media_dlg.flash_options}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td><label for="flash_quality">{#media_dlg.quality}</label></td>
+ <td>
+ <select id="flash_quality" name="flash_quality" onchange="Media.formToData();">
+ <option value="">{#not_set}</option>
+ <option value="high">high</option>
+ <option value="low">low</option>
+ <option value="autolow">autolow</option>
+ <option value="autohigh">autohigh</option>
+ <option value="best">best</option>
+ </select>
+ </td>
+
+ <td><label for="flash_scale">{#media_dlg.scale}</label></td>
+ <td>
+ <select id="flash_scale" name="flash_scale" onchange="Media.formToData();">
+ <option value="">{#not_set}</option>
+ <option value="showall">showall</option>
+ <option value="noborder">noborder</option>
+ <option value="exactfit">exactfit</option>
+ <option value="noscale">noscale</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="flash_wmode">{#media_dlg.wmode}</label></td>
+ <td>
+ <select id="flash_wmode" name="flash_wmode" onchange="Media.formToData();">
+ <option value="">{#not_set}</option>
+ <option value="window">window</option>
+ <option value="opaque">opaque</option>
+ <option value="transparent">transparent</option>
+ </select>
+ </td>
+
+ <td><label for="flash_salign">{#media_dlg.salign}</label></td>
+ <td>
+ <select id="flash_salign" name="flash_salign" onchange="Media.formToData();">
+ <option value="">{#not_set}</option>
+ <option value="l">{#media_dlg.align_left}</option>
+ <option value="t">{#media_dlg.align_top}</option>
+ <option value="r">{#media_dlg.align_right}</option>
+ <option value="b">{#media_dlg.align_bottom}</option>
+ <option value="tl">{#media_dlg.align_top_left}</option>
+ <option value="tr">{#media_dlg.align_top_right}</option>
+ <option value="bl">{#media_dlg.align_bottom_left}</option>
+ <option value="br">{#media_dlg.align_bottom_right}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="flash_play" name="flash_play" checked="checked" onchange="Media.formToData();" /></td>
+ <td><label for="flash_play">{#media_dlg.play}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="flash_loop" name="flash_loop" checked="checked" onchange="Media.formToData();" /></td>
+ <td><label for="flash_loop">{#media_dlg.loop}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="flash_menu" name="flash_menu" checked="checked" onchange="Media.formToData();" /></td>
+ <td><label for="flash_menu">{#media_dlg.menu}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="flash_swliveconnect" name="flash_swliveconnect" onchange="Media.formToData();" /></td>
+ <td><label for="flash_swliveconnect">{#media_dlg.liveconnect}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+
+ <table role="presentation">
+ <tr>
+ <td><label for="flash_base">{#media_dlg.base}</label></td>
+ <td><input type="text" id="flash_base" name="flash_base" onchange="Media.formToData();" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="flash_flashvars">{#media_dlg.flashvars}</label></td>
+ <td><input type="text" id="flash_flashvars" name="flash_flashvars" onchange="Media.formToData();" /></td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset id="quicktime_options">
+ <legend>{#media_dlg.qt_options}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="quicktime_loop" name="quicktime_loop" onchange="Media.formToData();" /></td>
+ <td><label for="quicktime_loop">{#media_dlg.loop}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="quicktime_autoplay" name="quicktime_autoplay" checked="checked" onchange="Media.formToData();" /></td>
+ <td><label for="quicktime_autoplay">{#media_dlg.play}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="quicktime_cache" name="quicktime_cache" onchange="Media.formToData();" /></td>
+ <td><label for="quicktime_cache">{#media_dlg.cache}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="quicktime_controller" name="quicktime_controller" checked="checked" onchange="Media.formToData();" /></td>
+ <td><label for="quicktime_controller">{#media_dlg.controller}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="quicktime_correction" name="quicktime_correction" onchange="Media.formToData();" /></td>
+ <td><label for="quicktime_correction">{#media_dlg.correction}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="quicktime_enablejavascript" name="quicktime_enablejavascript" onchange="Media.formToData();" /></td>
+ <td><label for="quicktime_enablejavascript">{#media_dlg.enablejavascript}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="quicktime_kioskmode" name="quicktime_kioskmode" onchange="Media.formToData();" /></td>
+ <td><label for="quicktime_kioskmode">{#media_dlg.kioskmode}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="quicktime_autohref" name="quicktime_autohref" onchange="Media.formToData();" /></td>
+ <td><label for="quicktime_autohref">{#media_dlg.autohref}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="quicktime_playeveryframe" name="quicktime_playeveryframe" onchange="Media.formToData();" /></td>
+ <td><label for="quicktime_playeveryframe">{#media_dlg.playeveryframe}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="quicktime_targetcache" name="quicktime_targetcache" onchange="Media.formToData();" /></td>
+ <td><label for="quicktime_targetcache">{#media_dlg.targetcache}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="quicktime_scale">{#media_dlg.scale}</label></td>
+ <td><select id="quicktime_scale" name="quicktime_scale" class="mceEditableSelect" onchange="Media.formToData();">
+ <option value="">{#not_set}</option>
+ <option value="tofit">tofit</option>
+ <option value="aspect">aspect</option>
+ </select>
+ </td>
+
+ <td colspan="2">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><label for="quicktime_starttime">{#media_dlg.starttime}</label></td>
+ <td><input type="text" id="quicktime_starttime" name="quicktime_starttime" onchange="Media.formToData();" /></td>
+
+ <td><label for="quicktime_endtime">{#media_dlg.endtime}</label></td>
+ <td><input type="text" id="quicktime_endtime" name="quicktime_endtime" onchange="Media.formToData();" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="quicktime_target">{#media_dlg.target}</label></td>
+ <td><input type="text" id="quicktime_target" name="quicktime_target" onchange="Media.formToData();" /></td>
+
+ <td><label for="quicktime_href">{#media_dlg.href}</label></td>
+ <td><input type="text" id="quicktime_href" name="quicktime_href" onchange="Media.formToData();" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="quicktime_qtsrcchokespeed">{#media_dlg.qtsrcchokespeed}</label></td>
+ <td><input type="text" id="quicktime_qtsrcchokespeed" name="quicktime_qtsrcchokespeed" onchange="Media.formToData();" /></td>
+
+ <td><label for="quicktime_volume">{#media_dlg.volume}</label></td>
+ <td><input type="text" id="quicktime_volume" name="quicktime_volume" onchange="Media.formToData();" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="quicktime_qtsrc">{#media_dlg.qtsrc}</label></td>
+ <td colspan="4">
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input type="text" id="quicktime_qtsrc" name="quicktime_qtsrc" onchange="Media.formToData();" /></td>
+ <td id="qtsrcfilebrowsercontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset id="windowsmedia_options">
+ <legend>{#media_dlg.wmp_options}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="windowsmedia_autostart" name="windowsmedia_autostart" checked="checked" onchange="Media.formToData();" /></td>
+ <td><label for="windowsmedia_autostart">{#media_dlg.autostart}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="windowsmedia_enabled" name="windowsmedia_enabled" onchange="Media.formToData();" /></td>
+ <td><label for="windowsmedia_enabled">{#media_dlg.enabled}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="windowsmedia_enablecontextmenu" name="windowsmedia_enablecontextmenu" checked="checked" onchange="Media.formToData();" /></td>
+ <td><label for="windowsmedia_enablecontextmenu">{#media_dlg.menu}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="windowsmedia_fullscreen" name="windowsmedia_fullscreen" onchange="Media.formToData();" /></td>
+ <td><label for="windowsmedia_fullscreen">{#media_dlg.fullscreen}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="windowsmedia_invokeurls" name="windowsmedia_invokeurls" checked="checked" onchange="Media.formToData();" /></td>
+ <td><label for="windowsmedia_invokeurls">{#media_dlg.invokeurls}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="windowsmedia_mute" name="windowsmedia_mute" onchange="Media.formToData();" /></td>
+ <td><label for="windowsmedia_mute">{#media_dlg.mute}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="windowsmedia_stretchtofit" name="windowsmedia_stretchtofit" onchange="Media.formToData();" /></td>
+ <td><label for="windowsmedia_stretchtofit">{#media_dlg.stretchtofit}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="windowsmedia_windowlessvideo" name="windowsmedia_windowlessvideo" onchange="Media.formToData();" /></td>
+ <td><label for="windowsmedia_windowlessvideo">{#media_dlg.windowlessvideo}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="windowsmedia_balance">{#media_dlg.balance}</label></td>
+ <td><input type="text" id="windowsmedia_balance" name="windowsmedia_balance" onchange="Media.formToData();" /></td>
+
+ <td><label for="windowsmedia_baseurl">{#media_dlg.baseurl}</label></td>
+ <td><input type="text" id="windowsmedia_baseurl" name="windowsmedia_baseurl" onchange="Media.formToData();" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="windowsmedia_captioningid">{#media_dlg.captioningid}</label></td>
+ <td><input type="text" id="windowsmedia_captioningid" name="windowsmedia_captioningid" onchange="Media.formToData();" /></td>
+
+ <td><label for="windowsmedia_currentmarker">{#media_dlg.currentmarker}</label></td>
+ <td><input type="text" id="windowsmedia_currentmarker" name="windowsmedia_currentmarker" onchange="Media.formToData();" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="windowsmedia_currentposition">{#media_dlg.currentposition}</label></td>
+ <td><input type="text" id="windowsmedia_currentposition" name="windowsmedia_currentposition" onchange="Media.formToData();" /></td>
+
+ <td><label for="windowsmedia_defaultframe">{#media_dlg.defaultframe}</label></td>
+ <td><input type="text" id="windowsmedia_defaultframe" name="windowsmedia_defaultframe" onchange="Media.formToData();" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="windowsmedia_playcount">{#media_dlg.playcount}</label></td>
+ <td><input type="text" id="windowsmedia_playcount" name="windowsmedia_playcount" onchange="Media.formToData();" /></td>
+
+ <td><label for="windowsmedia_rate">{#media_dlg.rate}</label></td>
+ <td><input type="text" id="windowsmedia_rate" name="windowsmedia_rate" onchange="Media.formToData();" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="windowsmedia_uimode">{#media_dlg.uimode}</label></td>
+ <td><input type="text" id="windowsmedia_uimode" name="windowsmedia_uimode" onchange="Media.formToData();" /></td>
+
+ <td><label for="windowsmedia_volume">{#media_dlg.volume}</label></td>
+ <td><input type="text" id="windowsmedia_volume" name="windowsmedia_volume" onchange="Media.formToData();" /></td>
+ </tr>
+
+ </table>
+ </fieldset>
+
+ <fieldset id="realmedia_options">
+ <legend>{#media_dlg.rmp_options}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="realmedia_autostart" name="realmedia_autostart" onchange="Media.formToData();" /></td>
+ <td><label for="realmedia_autostart">{#media_dlg.autostart}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="realmedia_loop" name="realmedia_loop" onchange="Media.formToData();" /></td>
+ <td><label for="realmedia_loop">{#media_dlg.loop}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="realmedia_autogotourl" name="realmedia_autogotourl" checked="checked" onchange="Media.formToData();" /></td>
+ <td><label for="realmedia_autogotourl">{#media_dlg.autogotourl}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="realmedia_center" name="realmedia_center" onchange="Media.formToData();" /></td>
+ <td><label for="realmedia_center">{#media_dlg.center}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="realmedia_imagestatus" name="realmedia_imagestatus" checked="checked" onchange="Media.formToData();" /></td>
+ <td><label for="realmedia_imagestatus">{#media_dlg.imagestatus}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="realmedia_maintainaspect" name="realmedia_maintainaspect" onchange="Media.formToData();" /></td>
+ <td><label for="realmedia_maintainaspect">{#media_dlg.maintainaspect}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="realmedia_nojava" name="realmedia_nojava" onchange="Media.formToData();" /></td>
+ <td><label for="realmedia_nojava">{#media_dlg.nojava}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="realmedia_prefetch" name="realmedia_prefetch" onchange="Media.formToData();" /></td>
+ <td><label for="realmedia_prefetch">{#media_dlg.prefetch}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="realmedia_shuffle" name="realmedia_shuffle" onchange="Media.formToData();" /></td>
+ <td><label for="realmedia_shuffle">{#media_dlg.shuffle}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ &nbsp;
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="realmedia_console">{#media_dlg.console}</label></td>
+ <td><input type="text" id="realmedia_console" name="realmedia_console" onchange="Media.formToData();" /></td>
+
+ <td><label for="realmedia_controls">{#media_dlg.controls}</label></td>
+ <td><input type="text" id="realmedia_controls" name="realmedia_controls" onchange="Media.formToData();" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="realmedia_numloop">{#media_dlg.numloop}</label></td>
+ <td><input type="text" id="realmedia_numloop" name="realmedia_numloop" onchange="Media.formToData();" /></td>
+
+ <td><label for="realmedia_scriptcallbacks">{#media_dlg.scriptcallbacks}</label></td>
+ <td><input type="text" id="realmedia_scriptcallbacks" name="realmedia_scriptcallbacks" onchange="Media.formToData();" /></td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <fieldset id="shockwave_options">
+ <legend>{#media_dlg.shockwave_options}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td><label for="shockwave_swstretchstyle">{#media_dlg.swstretchstyle}</label></td>
+ <td>
+ <select id="shockwave_swstretchstyle" name="shockwave_swstretchstyle" onchange="Media.formToData();">
+ <option value="none">{#not_set}</option>
+ <option value="meet">Meet</option>
+ <option value="fill">Fill</option>
+ <option value="stage">Stage</option>
+ </select>
+ </td>
+
+ <td><label for="shockwave_swvolume">{#media_dlg.volume}</label></td>
+ <td><input type="text" id="shockwave_swvolume" name="shockwave_swvolume" onchange="Media.formToData();" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="shockwave_swstretchhalign">{#media_dlg.swstretchhalign}</label></td>
+ <td>
+ <select id="shockwave_swstretchhalign" name="shockwave_swstretchhalign" onchange="Media.formToData();">
+ <option value="none">{#not_set}</option>
+ <option value="left">{#media_dlg.align_left}</option>
+ <option value="center">{#media_dlg.align_center}</option>
+ <option value="right">{#media_dlg.align_right}</option>
+ </select>
+ </td>
+
+ <td><label for="shockwave_swstretchvalign">{#media_dlg.swstretchvalign}</label></td>
+ <td>
+ <select id="shockwave_swstretchvalign" name="shockwave_swstretchvalign" onchange="Media.formToData();">
+ <option value="none">{#not_set}</option>
+ <option value="meet">Meet</option>
+ <option value="fill">Fill</option>
+ <option value="stage">Stage</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="shockwave_autostart" name="shockwave_autostart" onchange="Media.formToData();" checked="checked" /></td>
+ <td><label for="shockwave_autostart">{#media_dlg.autostart}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="shockwave_sound" name="shockwave_sound" onchange="Media.formToData();" checked="checked" /></td>
+ <td><label for="shockwave_sound">{#media_dlg.sound}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="shockwave_swliveconnect" name="shockwave_swliveconnect" onchange="Media.formToData();" /></td>
+ <td><label for="shockwave_swliveconnect">{#media_dlg.liveconnect}</label></td>
+ </tr>
+ </table>
+ </td>
+
+ <td colspan="2">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input type="checkbox" class="checkbox" id="shockwave_progress" name="shockwave_progress" onchange="Media.formToData();" checked="checked" /></td>
+ <td><label for="shockwave_progress">{#media_dlg.progress}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+
+ <div id="source_panel" class="panel">
+ <fieldset>
+ <legend>{#media_dlg.source}</legend>
+ <textarea id="source" style="width: 99%; height: 390px"></textarea>
+ </fieldset>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+ </form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/moxieplayer.swf b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/moxieplayer.swf
new file mode 100644
index 000000000..585d772d6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/media/moxieplayer.swf
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js
new file mode 100644
index 000000000..687f54866
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin.js
@@ -0,0 +1 @@
+(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(f.keyCode==9){f.preventDefault();d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking")}})}},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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js
new file mode 100644
index 000000000..d492fbefe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js
@@ -0,0 +1,54 @@
+/**
+ * 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.Nonbreaking', {
+ init : function(ed, url) {
+ var t = this;
+
+ t.editor = ed;
+
+ // Register commands
+ ed.addCommand('mceNonBreaking', function() {
+ ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>' : '&nbsp;');
+ });
+
+ // Register buttons
+ ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'});
+
+ if (ed.getParam('nonbreaking_force_tab')) {
+ ed.onKeyDown.add(function(ed, e) {
+ if (e.keyCode == 9) {
+ e.preventDefault();
+
+ ed.execCommand('mceNonBreaking');
+ ed.execCommand('mceNonBreaking');
+ ed.execCommand('mceNonBreaking');
+ }
+ });
+ }
+ },
+
+ 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
+ };
+ }
+
+ // Private methods
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js
new file mode 100644
index 000000000..2d60138ee
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin.js
@@ -0,0 +1 @@
+(function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b,g;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(i,h,l){var k,j;k=i.dom.getParent(i.selection.getStart(),function(m){return i.dom.hasClass(m,b)});j=i.dom.getParent(i.selection.getEnd(),function(m){return i.dom.hasClass(m,b)});if(k||j){g=1;f._setDisabled(1);return false}else{if(g==1){f._setDisabled(0);g=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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
new file mode 100644
index 000000000..916dce29c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
@@ -0,0 +1,95 @@
+/**
+ * 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() {
+ var Event = tinymce.dom.Event;
+
+ tinymce.create('tinymce.plugins.NonEditablePlugin', {
+ init : function(ed, url) {
+ var t = this, editClass, nonEditClass, state;
+
+ t.editor = ed;
+ editClass = ed.getParam("noneditable_editable_class", "mceEditable");
+ nonEditClass = ed.getParam("noneditable_noneditable_class", "mceNonEditable");
+
+ ed.onNodeChange.addToTop(function(ed, cm, n) {
+ var sc, ec;
+
+ // Block if start or end is inside a non editable element
+ sc = ed.dom.getParent(ed.selection.getStart(), function(n) {
+ return ed.dom.hasClass(n, nonEditClass);
+ });
+
+ ec = ed.dom.getParent(ed.selection.getEnd(), function(n) {
+ return ed.dom.hasClass(n, nonEditClass);
+ });
+
+ // Block or unblock
+ if (sc || ec) {
+ state = 1;
+ t._setDisabled(1);
+ return false;
+ } else if (state == 1) {
+ t._setDisabled(0);
+ state = 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(ed, e) {
+ var k = e.keyCode;
+
+ // Don't block arrow keys, pg up/down, and F1-F12
+ if ((k > 32 && k < 41) || (k > 111 && k < 124))
+ return;
+
+ return Event.cancel(e);
+ },
+
+ _setDisabled : function(s) {
+ var t = this, ed = t.editor;
+
+ tinymce.each(ed.controlManager.controls, function(c) {
+ c.setDisabled(s);
+ });
+
+ if (s !== t.disabled) {
+ if (s) {
+ ed.onKeyDown.addToTop(t._block);
+ ed.onKeyPress.addToTop(t._block);
+ ed.onKeyUp.addToTop(t._block);
+ ed.onPaste.addToTop(t._block);
+ ed.onContextMenu.addToTop(t._block);
+ } else {
+ ed.onKeyDown.remove(t._block);
+ ed.onKeyPress.remove(t._block);
+ ed.onKeyUp.remove(t._block);
+ ed.onPaste.remove(t._block);
+ ed.onContextMenu.remove(t._block);
+ }
+
+ t.disabled = s;
+ }
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js
new file mode 100644
index 000000000..35085e8ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js
new file mode 100644
index 000000000..a094c1916
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js
@@ -0,0 +1,74 @@
+/**
+ * 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.PageBreakPlugin', {
+ init : function(ed, url) {
+ var pb = '<img src="' + ed.theme.url + '/img/trans.gif" class="mcePageBreak mceItemNoResize" />', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', '<!-- pagebreak -->'), pbRE;
+
+ pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g');
+
+ // Register commands
+ ed.addCommand('mcePageBreak', function() {
+ ed.execCommand('mceInsertContent', 0, pb);
+ });
+
+ // Register buttons
+ ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls});
+
+ ed.onInit.add(function() {
+ if (ed.theme.onResolveName) {
+ ed.theme.onResolveName.add(function(th, o) {
+ if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls))
+ o.name = 'pagebreak';
+ });
+ }
+ });
+
+ ed.onClick.add(function(ed, e) {
+ e = e.target;
+
+ if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls))
+ ed.selection.select(e);
+ });
+
+ ed.onNodeChange.add(function(ed, cm, n) {
+ cm.setActive('pagebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls));
+ });
+
+ ed.onBeforeSetContent.add(function(ed, o) {
+ o.content = o.content.replace(pbRE, pb);
+ });
+
+ ed.onPostProcess.add(function(ed, o) {
+ if (o.get)
+ o.content = o.content.replace(/<img[^>]+>/g, function(im) {
+ if (im.indexOf('class="mcePageBreak') !== -1)
+ im = sep;
+
+ return im;
+ });
+ });
+ },
+
+ 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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js
new file mode 100644
index 000000000..e47a5c630
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin.js
@@ -0,0 +1 @@
+(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:"combined",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(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"))}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:o.encode(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="<p>"+o.encode(r).replace(/\r?\n\r?\n/g,"</p><p>").replace(/\r?\n/g,"<br />")+"</p>"}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(g){var d=this.editor,e=b(d,"paste_text_linebreaktype"),i=b(d,"paste_text_replacements"),f=tinymce.is;function h(j){c(j,function(k){if(k.constructor==RegExp){g=g.replace(k,"")}else{g=g.replace(k[0],k[1])}})}if((typeof(g)==="string")&&(g.length>0)){if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(g)){h([/[\n\r]+/g])}else{h([/\r+/g])}h([[/<\/(?: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"]]);g=d.dom.decode(tinymce.html.Entities.encodeRaw(g));if(f(i,"array")){h(i)}else{if(f(i,"string")){h(new RegExp(i,"gi"))}}if(e=="none"){h([[/\n+/g," "]])}else{if(e=="br"){h([[/\n/g,"<br />"]])}else{if(e=="p"){h([[/\n+/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"]])}else{h([[/\n\n/g,"</p><p>"],[/^(.*<\/p>)(<p>)$/,"<p>$1"],[/\n/g,"<br />"]])}}}d.execCommand("mceInsertContent",false,g)}},_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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
new file mode 100644
index 000000000..73fe7fe9a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/editor_plugin_src.js
@@ -0,0 +1,871 @@
+/**
+ * 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() {
+ var each = tinymce.each,
+ defs = {
+ 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 : "combined",
+ paste_text_replacements : [
+ [/\u2026/g, "..."],
+ [/[\x93\x94\u201c\u201d]/g, '"'],
+ [/[\x60\x91\x92\u2018\u2019]/g, "'"]
+ ]
+ };
+
+ function getParam(ed, name) {
+ return ed.getParam(name, defs[name]);
+ }
+
+ tinymce.create('tinymce.plugins.PastePlugin', {
+ init : function(ed, url) {
+ var t = this;
+
+ t.editor = ed;
+ t.url = url;
+
+ // Setup plugin events
+ t.onPreProcess = new tinymce.util.Dispatcher(t);
+ t.onPostProcess = new tinymce.util.Dispatcher(t);
+
+ // Register default handlers
+ t.onPreProcess.add(t._preProcess);
+ t.onPostProcess.add(t._postProcess);
+
+ // Register optional preprocess handler
+ t.onPreProcess.add(function(pl, o) {
+ ed.execCallback('paste_preprocess', pl, o);
+ });
+
+ // Register optional postprocess
+ t.onPostProcess.add(function(pl, o) {
+ ed.execCallback('paste_postprocess', pl, o);
+ });
+
+ ed.onKeyDown.addToTop(function(ed, e) {
+ // Block ctrl+v from adding an undo level since the default logic in tinymce.Editor will add that
+ if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
+ return false; // Stop other listeners
+ });
+
+ // Initialize plain text flag
+ ed.pasteAsPlainText = getParam(ed, 'paste_text_sticky_default');
+
+ // This function executes the process handlers and inserts the contents
+ // force_rich overrides plain text mode set by user, important for pasting with execCommand
+ function process(o, force_rich) {
+ var dom = ed.dom, rng;
+
+ // Execute pre process handlers
+ t.onPreProcess.dispatch(t, o);
+
+ // Create DOM structure
+ o.node = dom.create('div', 0, o.content);
+
+ // If pasting inside the same element and the contents is only one block
+ // remove the block and keep the text since Firefox will copy parts of pre and h1-h6 as a pre element
+ if (tinymce.isGecko) {
+ rng = ed.selection.getRng(true);
+ if (rng.startContainer == rng.endContainer && rng.startContainer.nodeType == 3) {
+ // Is only one block node and it doesn't contain word stuff
+ if (o.node.childNodes.length === 1 && /^(p|h[1-6]|pre)$/i.test(o.node.firstChild.nodeName) && o.content.indexOf('__MCE_ITEM__') === -1)
+ dom.remove(o.node.firstChild, true);
+ }
+ }
+
+ // Execute post process handlers
+ t.onPostProcess.dispatch(t, o);
+
+ // Serialize content
+ o.content = ed.serializer.serialize(o.node, {getInner : 1, forced_root_block : ''});
+
+ // Plain text option active?
+ if ((!force_rich) && (ed.pasteAsPlainText)) {
+ t._insertPlainText(o.content);
+
+ if (!getParam(ed, "paste_text_sticky")) {
+ ed.pasteAsPlainText = false;
+ ed.controlManager.setActive("pastetext", false);
+ }
+ } else {
+ t._insert(o.content);
+ }
+ }
+
+ // Add command for external usage
+ ed.addCommand('mceInsertClipboardContent', function(u, o) {
+ process(o, true);
+ });
+
+ if (!getParam(ed, "paste_text_use_dialog")) {
+ ed.addCommand('mcePasteText', function(u, v) {
+ var cookie = tinymce.util.Cookie;
+
+ ed.pasteAsPlainText = !ed.pasteAsPlainText;
+ ed.controlManager.setActive('pastetext', ed.pasteAsPlainText);
+
+ if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) {
+ if (getParam(ed, "paste_text_sticky")) {
+ ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));
+ } else {
+ ed.windowManager.alert(ed.translate('paste.plaintext_mode'));
+ }
+
+ if (!getParam(ed, "paste_text_notifyalways")) {
+ cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31))
+ }
+ }
+ });
+ }
+
+ ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'});
+ ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'});
+
+ // This function grabs the contents from the clipboard by adding a
+ // hidden div and placing the caret inside it and after the browser paste
+ // is done it grabs that contents and processes that
+ function grabContent(e) {
+ var n, or, rng, oldRng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY, textContent;
+
+ // Check if browser supports direct plaintext access
+ if (e.clipboardData || dom.doc.dataTransfer) {
+ textContent = (e.clipboardData || dom.doc.dataTransfer).getData('Text');
+
+ if (ed.pasteAsPlainText) {
+ e.preventDefault();
+ process({content : dom.encode(textContent).replace(/\r?\n/g, '<br />')});
+ return;
+ }
+ }
+
+ if (dom.get('_mcePaste'))
+ return;
+
+ // Create container to paste into
+ n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste', 'data-mce-bogus' : '1'}, '\uFEFF\uFEFF');
+
+ // If contentEditable mode we need to find out the position of the closest element
+ if (body != ed.getDoc().body)
+ posY = dom.getPos(ed.selection.getStart(), body).y;
+ else
+ posY = body.scrollTop + dom.getViewPort(ed.getWin()).y;
+
+ // Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles
+ // If also needs to be in view on IE or the paste would fail
+ dom.setStyles(n, {
+ position : 'absolute',
+ 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
+ top : posY - 25,
+ width : 1,
+ height : 1,
+ overflow : 'hidden'
+ });
+
+ if (tinymce.isIE) {
+ // Store away the old range
+ oldRng = sel.getRng();
+
+ // Select the container
+ rng = dom.doc.body.createTextRange();
+ rng.moveToElementText(n);
+ rng.execCommand('Paste');
+
+ // Remove container
+ dom.remove(n);
+
+ // Check if the contents was changed, if it wasn't then clipboard extraction failed probably due
+ // to IE security settings so we pass the junk though better than nothing right
+ if (n.innerHTML === '\uFEFF\uFEFF') {
+ ed.execCommand('mcePasteWord');
+ e.preventDefault();
+ return;
+ }
+
+ // Restore the old range and clear the contents before pasting
+ sel.setRng(oldRng);
+ sel.setContent('');
+
+ // For some odd reason we need to detach the the mceInsertContent call from the paste event
+ // It's like IE has a reference to the parent element that you paste in and the selection gets messed up
+ // when it tries to restore the selection
+ setTimeout(function() {
+ // Process contents
+ process({content : n.innerHTML});
+ }, 0);
+
+ // Block the real paste event
+ return tinymce.dom.Event.cancel(e);
+ } else {
+ function block(e) {
+ e.preventDefault();
+ };
+
+ // Block mousedown and click to prevent selection change
+ dom.bind(ed.getDoc(), 'mousedown', block);
+ dom.bind(ed.getDoc(), 'keydown', block);
+
+ or = ed.selection.getRng();
+
+ // Move select contents inside DIV
+ n = n.firstChild;
+ rng = ed.getDoc().createRange();
+ rng.setStart(n, 0);
+ rng.setEnd(n, 2);
+ sel.setRng(rng);
+
+ // Wait a while and grab the pasted contents
+ window.setTimeout(function() {
+ var h = '', nl;
+
+ // Paste divs duplicated in paste divs seems to happen when you paste plain text so lets first look for that broken behavior in WebKit
+ if (!dom.select('div.mcePaste > div.mcePaste').length) {
+ nl = dom.select('div.mcePaste');
+
+ // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string
+ each(nl, function(n) {
+ var child = n.firstChild;
+
+ // WebKit inserts a DIV container with lots of odd styles
+ if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) {
+ dom.remove(child, 1);
+ }
+
+ // Remove apply style spans
+ each(dom.select('span.Apple-style-span', n), function(n) {
+ dom.remove(n, 1);
+ });
+
+ // Remove bogus br elements
+ each(dom.select('br[data-mce-bogus]', n), function(n) {
+ dom.remove(n);
+ });
+
+ // WebKit will make a copy of the DIV for each line of plain text pasted and insert them into the DIV
+ if (n.parentNode.className != 'mcePaste')
+ h += n.innerHTML;
+ });
+ } else {
+ // Found WebKit weirdness so force the content into paragraphs this seems to happen when you paste plain text from Nodepad etc
+ // So this logic will replace double enter with paragraphs and single enter with br so it kind of looks the same
+ h = '<p>' + dom.encode(textContent).replace(/\r?\n\r?\n/g, '</p><p>').replace(/\r?\n/g, '<br />') + '</p>';
+ }
+
+ // Remove the nodes
+ each(dom.select('div.mcePaste'), function(n) {
+ dom.remove(n);
+ });
+
+ // Restore the old selection
+ if (or)
+ sel.setRng(or);
+
+ process({content : h});
+
+ // Unblock events ones we got the contents
+ dom.unbind(ed.getDoc(), 'mousedown', block);
+ dom.unbind(ed.getDoc(), 'keydown', block);
+ }, 0);
+ }
+ }
+
+ // Check if we should use the new auto process method
+ if (getParam(ed, "paste_auto_cleanup_on_paste")) {
+ // Is it's Opera or older FF use key handler
+ if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {
+ ed.onKeyDown.addToTop(function(ed, e) {
+ if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
+ grabContent(e);
+ });
+ } else {
+ // Grab contents on paste event on Gecko and WebKit
+ ed.onPaste.addToTop(function(ed, e) {
+ return grabContent(e);
+ });
+ }
+ }
+
+ ed.onInit.add(function() {
+ ed.controlManager.setActive("pastetext", ed.pasteAsPlainText);
+
+ // Block all drag/drop events
+ if (getParam(ed, "paste_block_drop")) {
+ ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) {
+ e.preventDefault();
+ e.stopPropagation();
+
+ return false;
+ });
+ }
+ });
+
+ // Add legacy support
+ t._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(pl, o) {
+ var ed = this.editor,
+ h = o.content,
+ grep = tinymce.grep,
+ explode = tinymce.explode,
+ trim = tinymce.trim,
+ len, stripClass;
+
+ //console.log('Before preprocess:' + o.content);
+
+ function process(items) {
+ each(items, function(v) {
+ // Remove or replace
+ if (v.constructor == RegExp)
+ h = h.replace(v, '');
+ else
+ h = h.replace(v[0], v[1]);
+ });
+ }
+
+ if (ed.settings.paste_enable_default_filters == false) {
+ return;
+ }
+
+ // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser
+ if (tinymce.isIE && document.documentMode >= 9) {
+ // IE9 adds BRs before/after block elements when contents is pasted from word or for example another browser
+ 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']]);
+
+ // IE9 also adds an extra BR element for each soft-linefeed and it also adds a BR for each word wrap break
+ process([
+ [/<br><br>/g, '<BR><BR>'], // Replace multiple BR elements with uppercase BR to keep them intact
+ [/<br>/g, ' '], // Replace single br elements with space since they are word wrap BR:s
+ [/<BR><BR>/g, '<br>'] // Replace back the double brs but into a single BR
+ ]);
+ }
+
+ // Detect Word content and process it more aggressive
+ if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) {
+ o.wordContent = true; // Mark the pasted contents as word specific content
+ //console.log('Word contents detected.');
+
+ // Process away some basic content
+ process([
+ /^\s*(&nbsp;)+/gi, // &nbsp; entities at the start of contents
+ /(&nbsp;|<br[^>]*>)+\s*$/gi // &nbsp; entities at the end of contents
+ ]);
+
+ if (getParam(ed, "paste_convert_headers_to_strong")) {
+ h = h.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>");
+ }
+
+ if (getParam(ed, "paste_convert_middot_lists")) {
+ process([
+ [/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker
+ [/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__'], // Convert mso-list and symbol spans to item markers
+ [/(<p[^>]+(?:MsoListParagraph)[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list and symbol paragraphs to item markers (FF)
+ ]);
+ }
+
+ process([
+ // Word comments like conditional comments etc
+ /<!--[\s\S]+?-->/gi,
+
+ // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags
+ /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,
+
+ // Convert <s> into <strike> for line-though
+ [/<(\/?)s>/gi, "<$1strike>"],
+
+ // Replace nsbp entites to char since it's easier to handle
+ [/&nbsp;/gi, "\u00a0"]
+ ]);
+
+ // Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag.
+ // 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.
+ do {
+ len = h.length;
+ h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");
+ } while (len != h.length);
+
+ // Remove all spans if no styles is to be retained
+ if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) {
+ h = h.replace(/<\/?span[^>]*>/gi, "");
+ } else {
+ // We're keeping styles, so at least clean them up.
+ // CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx
+
+ process([
+ // Convert <span style="mso-spacerun:yes">___</span> to string of alternating breaking/non-breaking spaces of same length
+ [/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,
+ function(str, spaces) {
+ return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : "";
+ }
+ ],
+
+ // Examine all styles: delete junk, transform some, and keep the rest
+ [/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,
+ function(str, tag, style) {
+ var n = [],
+ i = 0,
+ s = explode(trim(style).replace(/&quot;/gi, "'"), ";");
+
+ // Examine each style definition within the tag's style attribute
+ each(s, function(v) {
+ var name, value,
+ parts = explode(v, ":");
+
+ function ensureUnits(v) {
+ return v + ((v !== "0") && (/\d$/.test(v)))? "px" : "";
+ }
+
+ if (parts.length == 2) {
+ name = parts[0].toLowerCase();
+ value = parts[1].toLowerCase();
+
+ // Translate certain MS Office styles into their CSS equivalents
+ switch (name) {
+ 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":
+ n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value);
+ return;
+
+ case "horiz-align":
+ n[i++] = "text-align:" + value;
+ return;
+
+ case "vert-align":
+ n[i++] = "vertical-align:" + value;
+ return;
+
+ case "font-color":
+ case "mso-foreground":
+ n[i++] = "color:" + value;
+ return;
+
+ case "mso-background":
+ case "mso-highlight":
+ n[i++] = "background:" + value;
+ return;
+
+ case "mso-default-height":
+ n[i++] = "min-height:" + ensureUnits(value);
+ return;
+
+ case "mso-default-width":
+ n[i++] = "min-width:" + ensureUnits(value);
+ return;
+
+ case "mso-padding-between-alt":
+ n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value);
+ return;
+
+ case "text-line-through":
+ if ((value == "single") || (value == "double")) {
+ n[i++] = "text-decoration:line-through";
+ }
+ return;
+
+ case "mso-zero-height":
+ if (value == "yes") {
+ n[i++] = "display:none";
+ }
+ return;
+ }
+
+ // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name
+ 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)) {
+ return;
+ }
+
+ // If it reached this point, it must be a valid CSS style
+ n[i++] = name + ":" + parts[1]; // Lower-case name, but keep value case
+ }
+ });
+
+ // If style attribute contained any valid styles the re-write it; otherwise delete style attribute.
+ if (i > 0) {
+ return tag + ' style="' + n.join(';') + '"';
+ } else {
+ return tag;
+ }
+ }
+ ]
+ ]);
+ }
+ }
+
+ // Replace headers with <strong>
+ if (getParam(ed, "paste_convert_headers_to_strong")) {
+ process([
+ [/<h[1-6][^>]*>/gi, "<p><strong>"],
+ [/<\/h[1-6][^>]*>/gi, "</strong></p>"]
+ ]);
+ }
+
+ process([
+ // Copy paste from Java like Open Office will produce this junk on FF
+ [/Version:[\d.]+\nStartHTML:\d+\nEndHTML:\d+\nStartFragment:\d+\nEndFragment:\d+/gi, '']
+ ]);
+
+ // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso").
+ // Note:- paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation.
+ stripClass = getParam(ed, "paste_strip_class_attributes");
+
+ if (stripClass !== "none") {
+ function removeClasses(match, g1) {
+ if (stripClass === "all")
+ return '';
+
+ var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "),
+ function(v) {
+ return (/^(?!mso)/i.test(v));
+ }
+ );
+
+ return cls.length ? ' class="' + cls.join(" ") + '"' : '';
+ };
+
+ h = h.replace(/ class="([^"]+)"/gi, removeClasses);
+ h = h.replace(/ class=([\-\w]+)/gi, removeClasses);
+ }
+
+ // Remove spans option
+ if (getParam(ed, "paste_remove_spans")) {
+ h = h.replace(/<\/?span[^>]*>/gi, "");
+ }
+
+ //console.log('After preprocess:' + h);
+
+ o.content = h;
+ },
+
+ /**
+ * Various post process items.
+ */
+ _postProcess : function(pl, o) {
+ var t = this, ed = t.editor, dom = ed.dom, styleProps;
+
+ if (ed.settings.paste_enable_default_filters == false) {
+ return;
+ }
+
+ if (o.wordContent) {
+ // Remove named anchors or TOC links
+ each(dom.select('a', o.node), function(a) {
+ if (!a.href || a.href.indexOf('#_Toc') != -1)
+ dom.remove(a, 1);
+ });
+
+ if (getParam(ed, "paste_convert_middot_lists")) {
+ t._convertLists(pl, o);
+ }
+
+ // Process styles
+ styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties
+
+ // Process only if a string was specified and not equal to "all" or "*"
+ if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) {
+ styleProps = tinymce.explode(styleProps.replace(/^none$/i, ""));
+
+ // Retains some style properties
+ each(dom.select('*', o.node), function(el) {
+ var newStyle = {}, npc = 0, i, sp, sv;
+
+ // Store a subset of the existing styles
+ if (styleProps) {
+ for (i = 0; i < styleProps.length; i++) {
+ sp = styleProps[i];
+ sv = dom.getStyle(el, sp);
+
+ if (sv) {
+ newStyle[sp] = sv;
+ npc++;
+ }
+ }
+ }
+
+ // Remove all of the existing styles
+ dom.setAttrib(el, 'style', '');
+
+ if (styleProps && npc > 0)
+ dom.setStyles(el, newStyle); // Add back the stored subset of styles
+ else // Remove empty span tags that do not have class attributes
+ if (el.nodeName == 'SPAN' && !el.className)
+ dom.remove(el, true);
+ });
+ }
+ }
+
+ // Remove all style information or only specifically on WebKit to avoid the style bug on that browser
+ if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) {
+ each(dom.select('*[style]', o.node), function(el) {
+ el.removeAttribute('style');
+ el.removeAttribute('data-mce-style');
+ });
+ } else {
+ if (tinymce.isWebKit) {
+ // 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 ..." />
+ // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles
+ each(dom.select('*', o.node), function(el) {
+ el.removeAttribute('data-mce-style');
+ });
+ }
+ }
+ },
+
+ /**
+ * Converts the most common bullet and number formats in Office into a real semantic UL/LI list.
+ */
+ _convertLists : function(pl, o) {
+ var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html;
+
+ // Convert middot lists into real semantic lists
+ each(dom.select('p', o.node), function(p) {
+ var sib, val = '', type, html, idx, parents;
+
+ // Get text node value at beginning of paragraph
+ for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling)
+ val += sib.nodeValue;
+
+ val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/&nbsp;/g, '\u00a0');
+
+ // Detect unordered lists look for bullets
+ if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*\u00a0*/.test(val))
+ type = 'ul';
+
+ // Detect ordered lists 1., a. or ixv.
+ if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0+/.test(val))
+ type = 'ol';
+
+ // Check if node value matches the list pattern: o&nbsp;&nbsp;
+ if (type) {
+ margin = parseFloat(p.style.marginLeft || 0);
+
+ if (margin > lastMargin)
+ levels.push(margin);
+
+ if (!listElm || type != lastType) {
+ listElm = dom.create(type);
+ dom.insertAfter(listElm, p);
+ } else {
+ // Nested list element
+ if (margin > lastMargin) {
+ listElm = li.appendChild(dom.create(type));
+ } else if (margin < lastMargin) {
+ // Find parent level based on margin value
+ idx = tinymce.inArray(levels, margin);
+ parents = dom.getParents(listElm.parentNode, type);
+ listElm = parents[parents.length - 1 - idx] || listElm;
+ }
+ }
+
+ // Remove middot or number spans if they exists
+ each(dom.select('span', p), function(span) {
+ var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, '');
+
+ // Remove span with the middot or the number
+ if (type == 'ul' && /^__MCE_ITEM__[\u2022\u00b7\u00a7\u00d8o\u25CF]/.test(html))
+ dom.remove(span);
+ else if (/^__MCE_ITEM__[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(html))
+ dom.remove(span);
+ });
+
+ html = p.innerHTML;
+
+ // Remove middot/list items
+ if (type == 'ul')
+ html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o\u25CF]\s*(&nbsp;|\u00a0)+\s*/, '');
+ else
+ html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/, '');
+
+ // Create li and add paragraph data into the new li
+ li = listElm.appendChild(dom.create('li', 0, html));
+ dom.remove(p);
+
+ lastMargin = margin;
+ lastType = type;
+ } else
+ listElm = lastMargin = 0; // End list element
+ });
+
+ // Remove any left over makers
+ html = o.node.innerHTML;
+ if (html.indexOf('__MCE_ITEM__') != -1)
+ o.node.innerHTML = html.replace(/__MCE_ITEM__/g, '');
+ },
+
+ /**
+ * Inserts the specified contents at the caret position.
+ */
+ _insert : function(h, skip_undo) {
+ var ed = this.editor, r = ed.selection.getRng();
+
+ // First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells.
+ if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer)
+ ed.getDoc().execCommand('Delete', false, null);
+
+ ed.execCommand('mceInsertContent', false, h, {skip_undo : skip_undo});
+ },
+
+ /**
+ * Instead of the old plain text method which tried to re-create a paste operation, the
+ * new approach adds a plain text mode toggle switch that changes the behavior of paste.
+ * This function is passed the same input that the regular paste plugin produces.
+ * It performs additional scrubbing and produces (and inserts) the plain text.
+ * This approach leverages all of the great existing functionality in the paste
+ * plugin, and requires minimal changes to add the new functionality.
+ * Speednet - June 2009
+ */
+ _insertPlainText : function(content) {
+ var ed = this.editor,
+ linebr = getParam(ed, "paste_text_linebreaktype"),
+ rl = getParam(ed, "paste_text_replacements"),
+ is = tinymce.is;
+
+ function process(items) {
+ each(items, function(v) {
+ if (v.constructor == RegExp)
+ content = content.replace(v, "");
+ else
+ content = content.replace(v[0], v[1]);
+ });
+ };
+
+ if ((typeof(content) === "string") && (content.length > 0)) {
+ // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line
+ if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(content)) {
+ process([
+ /[\n\r]+/g
+ ]);
+ } else {
+ // Otherwise just get rid of carriage returns (only need linefeeds)
+ process([
+ /\r+/g
+ ]);
+ }
+
+ process([
+ [/<\/(?: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
+ [/<br[^>]*>|<\/tr>/gi, "\n"], // Single linebreak for <br /> tags and table rows
+ [/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"], // Table cells get tabs betweem them
+ /<[a-z!\/?][^>]*>/gi, // Delete all remaining tags
+ [/&nbsp;/gi, " "], // Convert non-break spaces to regular spaces (remember, *plain text*)
+ [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"],// Cool little RegExp deletes whitespace around linebreak chars.
+ [/\n{3,}/g, "\n\n"] // Max. 2 consecutive linebreaks
+ ]);
+
+ content = ed.dom.decode(tinymce.html.Entities.encodeRaw(content));
+
+ // Perform default or custom replacements
+ if (is(rl, "array")) {
+ process(rl);
+ } else if (is(rl, "string")) {
+ process(new RegExp(rl, "gi"));
+ }
+
+ // Treat paragraphs as specified in the config
+ if (linebr == "none") {
+ // Convert all line breaks to space
+ process([
+ [/\n+/g, " "]
+ ]);
+ } else if (linebr == "br") {
+ // Convert all line breaks to <br />
+ process([
+ [/\n/g, "<br />"]
+ ]);
+ } else if (linebr == "p") {
+ // Convert all line breaks to <p>...</p>
+ process([
+ [/\n+/g, "</p><p>"],
+ [/^(.*<\/p>)(<p>)$/, '<p>$1']
+ ]);
+ } else {
+ // defaults to "combined"
+ // Convert single line breaks to <br /> and double line breaks to <p>...</p>
+ process([
+ [/\n\n/g, "</p><p>"],
+ [/^(.*<\/p>)(<p>)$/, '<p>$1'],
+ [/\n/g, "<br />"]
+ ]);
+ }
+
+ ed.execCommand('mceInsertContent', false, content);
+ }
+ },
+
+ /**
+ * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine.
+ */
+ _legacySupport : function() {
+ var t = this, ed = t.editor;
+
+ // Register command(s) for backwards compatibility
+ ed.addCommand("mcePasteWord", function() {
+ ed.windowManager.open({
+ file: t.url + "/pasteword.htm",
+ width: parseInt(getParam(ed, "paste_dialog_width")),
+ height: parseInt(getParam(ed, "paste_dialog_height")),
+ inline: 1
+ });
+ });
+
+ if (getParam(ed, "paste_text_use_dialog")) {
+ ed.addCommand("mcePasteText", function() {
+ ed.windowManager.open({
+ file : t.url + "/pastetext.htm",
+ width: parseInt(getParam(ed, "paste_dialog_width")),
+ height: parseInt(getParam(ed, "paste_dialog_height")),
+ inline : 1
+ });
+ });
+ }
+
+ // Register button for backwards compatibility
+ ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"});
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin);
+})();
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js
new file mode 100644
index 000000000..c524f9eb0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/js/pastetext.js
@@ -0,0 +1,36 @@
+tinyMCEPopup.requireLangPack();
+
+var PasteTextDialog = {
+ init : function() {
+ this.resize();
+ },
+
+ insert : function() {
+ var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines;
+
+ // Convert linebreaks into paragraphs
+ if (document.getElementById('linebreaks').checked) {
+ lines = h.split(/\r?\n/);
+ if (lines.length > 1) {
+ h = '';
+ tinymce.each(lines, function(row) {
+ h += '<p>' + row + '</p>';
+ });
+ }
+ }
+
+ tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h});
+ tinyMCEPopup.close();
+ },
+
+ resize : function() {
+ var vp = tinyMCEPopup.dom.getViewPort(window), el;
+
+ el = document.getElementById('content');
+
+ el.style.width = (vp.w - 20) + 'px';
+ el.style.height = (vp.h - 90) + 'px';
+ }
+};
+
+tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js
new file mode 100644
index 000000000..a52731c36
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/js/pasteword.js
@@ -0,0 +1,51 @@
+tinyMCEPopup.requireLangPack();
+
+var PasteWordDialog = {
+ init : function() {
+ var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = '';
+
+ // Create iframe
+ el.innerHTML = '<iframe id="iframe" src="javascript:\'\';" frameBorder="0" style="border: 1px solid gray"></iframe>';
+ ifr = document.getElementById('iframe');
+ doc = ifr.contentWindow.document;
+
+ // Force absolute CSS urls
+ css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")];
+ css = css.concat(tinymce.explode(ed.settings.content_css) || []);
+ tinymce.each(css, function(u) {
+ cssHTML += '<link href="' + ed.documentBaseURI.toAbsolute('' + u) + '" rel="stylesheet" type="text/css" />';
+ });
+
+ // Write content into iframe
+ doc.open();
+ doc.write('<html><head>' + cssHTML + '</head><body class="mceContentBody" spellcheck="false"></body></html>');
+ doc.close();
+
+ doc.designMode = 'on';
+ this.resize();
+
+ window.setTimeout(function() {
+ ifr.contentWindow.focus();
+ }, 10);
+ },
+
+ insert : function() {
+ var h = document.getElementById('iframe').contentWindow.document.body.innerHTML;
+
+ tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true});
+ tinyMCEPopup.close();
+ },
+
+ resize : function() {
+ var vp = tinyMCEPopup.dom.getViewPort(window), el;
+
+ el = document.getElementById('iframe');
+
+ if (el) {
+ el.style.width = (vp.w - 20) + 'px';
+ el.style.height = (vp.h - 90) + 'px';
+ }
+ }
+};
+
+tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ar_dlg.js
new file mode 100644
index 000000000..f4fb2aba2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.paste_dlg',{"word_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL+V )","text_linebreaks":"\u0627\u062d\u062a\u0641\u0638 \u0628\u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0623\u0633\u0637\u0631","text_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL+V )"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/az_dlg.js
new file mode 100644
index 000000000..98a7fe1ce
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.paste_dlg',{"word_title":"P\u0259nc\u0259r\u0259y\u0259 s\u00f6z \u0259lav\u0259 etm\u0259k \u00fc\u00e7\u00fcn CTRL+V klavi\u015f birl\u0259\u015fm\u0259sini istifad\u0259 edin.","text_linebreaks":"S\u0259tr s\u0131nmalar\u0131n\u0131 saxla","text_title":"P\u0259nc\u0259r\u0259y\u0259 m\u0259tn \u0259lav\u0259 etm\u0259k \u00fc\u00e7\u00fcn CTRL+V klavi\u015f birl\u0259\u015fm\u0259sini istifad\u0259 edin."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/be_dlg.js
new file mode 100644
index 000000000..035880180
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.paste_dlg',{"word_title":"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0439\u0446\u0435 \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u0435 \u043a\u043b\u0430\u0432\u0456\u0448 CTRL+V \u043a\u0430\u0431 \u0443\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0442\u044d\u043a\u0441\u0442 \u0443 \u0430\u043a\u043d\u043e.","text_linebreaks":"\u0417\u0430\u0445\u043e\u045e\u0432\u0430\u0446\u044c \u043f\u0430\u0440\u044b\u0432\u044b \u0440\u0430\u0434\u043a\u043e\u045e","text_title":"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0439\u0446\u0435 \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u0435 \u043a\u043b\u0430\u0432\u0456\u0448 CTRL+V \u043a\u0430\u0431 \u0443\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0442\u044d\u043a\u0441\u0442 \u0443 \u0430\u043a\u043d\u043e."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bg_dlg.js
new file mode 100644
index 000000000..722ecdc56
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.paste_dlg',{"word_title":"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 CTRL V \u043e\u0442 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u0442\u0430, \u0437\u0430 \u0434\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u0430.","text_linebreaks":"\u0417\u0430\u043f\u0430\u0437\u0438 \u0437\u043d\u0430\u0446\u0438\u0442\u0435 \u0437\u0430 \u043d\u043e\u0432\u0438 \u0440\u0435\u0434\u043e\u0432\u0435","text_title":"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 CTRL V \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u0442\u0430, \u0437\u0430 \u0434\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u0430."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bn_dlg.js
new file mode 100644
index 000000000..592080db9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/br_dlg.js
new file mode 100644
index 000000000..41832e433
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.paste_dlg',{"word_title":"Use CTRL+V para colar o texto na janela.","text_linebreaks":"Manter quebras de linha","text_title":"Use CTRL+V para colar o texto na janela."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bs_dlg.js
new file mode 100644
index 000000000..0e6c62cb5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.paste_dlg',{"word_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prijelome","text_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ca_dlg.js
new file mode 100644
index 000000000..ac180fb11
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.paste_dlg',{"word_title":"Amb el teclat utilitzeu CTRL+V per a enganxar el text dins la finestra.","text_linebreaks":"Conserva els salts de l\u00ednia","text_title":"Amb el teclat utilitzeu CTRL+V per a enganxar el text dins la finestra."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ch_dlg.js
new file mode 100644
index 000000000..1bee88404
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.paste_dlg',{"word_title":"\u7528 Ctrl+V \u5c06\u5185\u5bb9\u8d34\u4e0a\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7","text_title":"\u7528 Ctrl+V \u5c06\u5185\u5bb9\u8d34\u4e0a\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cn_dlg.js
new file mode 100644
index 000000000..274905a94
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.paste_dlg',{"word_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u5185\u5bb9","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7","text_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u5185\u5bb9"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cs_dlg.js
new file mode 100644
index 000000000..66936bbab
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.paste_dlg',{"word_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna.","text_linebreaks":"Zachovat zalamov\u00e1n\u00ed \u0159\u00e1dk\u016f","text_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cy_dlg.js
new file mode 100644
index 000000000..d1c91b9aa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.paste_dlg',{"word_title":"Defnyddiwch CTRL+V ar eich bysellfwrdd i ludo\'r testun i fewn i\'r ffenest.","text_linebreaks":"Cadw toriadau llinell","text_title":"Defnyddiwch CTRL+V ar eich bysellfwrdd i ludo\'r testun i fewn i\'r ffenest."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/da_dlg.js
new file mode 100644
index 000000000..7e1b96183
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.paste_dlg',{"word_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten.","text_linebreaks":"Bevar linieskift","text_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/de_dlg.js
new file mode 100644
index 000000000..84b9bc620
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.paste_dlg',{"word_title":"Dr\u00fccken Sie auf Ihrer Tastatur Strg+V, um den Text einzuf\u00fcgen.","text_linebreaks":"Zeilenumbr\u00fcche beibehalten","text_title":"Dr\u00fccken Sie auf Ihrer Tastatur Strg+V, um den Text einzuf\u00fcgen."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/dv_dlg.js
new file mode 100644
index 000000000..e12d44e57
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/el_dlg.js
new file mode 100644
index 000000000..563ecc761
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.paste_dlg',{"word_title":"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 CTRL+V \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf.","text_linebreaks":"\u039d\u03b1 \u03ba\u03c1\u03b1\u03c4\u03b7\u03b8\u03bf\u03cd\u03bd \u03c4\u03b1 linebreaks","text_title":"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 CTRL+V \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js
new file mode 100644
index 000000000..bc74daf85
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/eo_dlg.js
new file mode 100644
index 000000000..e6613b739
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.paste_dlg',{"word_title":"Uzu CTRL V por alglui tekston en la fenestron.","text_linebreaks":"Konservi linisaltojn","text_title":"Uzu CTRL V por alglui tekston en la fenestron."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/es_dlg.js
new file mode 100644
index 000000000..aa54f98cc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.paste_dlg',{"word_title":"Use CTRL+V en su teclado para pegar el texto en la ventana.","text_linebreaks":"Mantener saltos de l\u00ednea","text_title":"Use CTRL+V en su teclado para pegar el texto en la ventana."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/et_dlg.js
new file mode 100644
index 000000000..8949d832d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.paste_dlg',{"word_title":"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks.","text_linebreaks":"J\u00e4ta reavahetused","text_title":"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/eu_dlg.js
new file mode 100644
index 000000000..3296bd5b1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.paste_dlg',{"word_title":"Erabili CTRL+V testua lehioan itsasteko.","text_linebreaks":"Mantendu lerro-jauziak","text_title":"Erabili CTRL+V testua lehioan itsasteko."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fa_dlg.js
new file mode 100644
index 000000000..cb554bcad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.paste_dlg',{"word_title":"\u062c\u0647\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u0627\u0632 CTRL+V \u0628\u0631 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f.","text_linebreaks":"\u062d\u0641\u0638 \u0642\u0637\u0639 \u062e\u0637\u0648\u0637","text_title":"\u062c\u0647\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u0627\u0632 CTRL+V \u0628\u0631 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fi_dlg.js
new file mode 100644
index 000000000..530e507cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.paste_dlg',{"word_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan.","text_linebreaks":"S\u00e4ilyt\u00e4 rivinvaihdot","text_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fr_dlg.js
new file mode 100644
index 000000000..acc5d639f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.paste_dlg',{"word_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre.","text_linebreaks":"Conserver les retours \u00e0 la ligne","text_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/gl_dlg.js
new file mode 100644
index 000000000..3fc652da5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.paste_dlg',{"word_title":"Use CTRL+V no teclado pra pega-lo texto na vent\u00e1.","text_linebreaks":"Manter salto de li\u00f1as","text_title":"Use CTRL+V no teclado pra pega-lo texto na vent\u00e1."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/gu_dlg.js
new file mode 100644
index 000000000..30a5882a0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/he_dlg.js
new file mode 100644
index 000000000..5fe796a6a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.paste_dlg',{"word_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V.","text_linebreaks":"\u05d4\u05e9\u05d0\u05e8 \u05d0\u05ea \u05e9\u05d5\u05e8\u05d5\u05ea \u05d4\u05e8\u05d5\u05d5\u05d7","text_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hi_dlg.js
new file mode 100644
index 000000000..51c6566c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hr_dlg.js
new file mode 100644
index 000000000..60433743e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.paste_dlg',{"word_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prijelome","text_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hu_dlg.js
new file mode 100644
index 000000000..7f4fb7e7b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.paste_dlg',{"word_title":"Haszn\u00e1lja a Ctrl+V-t a billenty\u0171zet\u00e9n a beilleszt\u00e9shez.","text_linebreaks":"Sort\u00f6r\u00e9sek megtart\u00e1sa","text_title":"Haszn\u00e1lja a Ctrl+V-t a billenty\u0171zet\u00e9n a beilleszt\u00e9shez."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hy_dlg.js
new file mode 100644
index 000000000..adc0b318d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.paste_dlg',{"word_title":"\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0565\u0584 CTRL + V \u057a\u0561\u057f\u0573\u0565\u0576\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u056b \u057f\u0565\u0572\u0561\u0564\u0580\u0574\u0561\u0576 \u0570\u0561\u0574\u0561\u0580","text_linebreaks":"\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c \u057f\u0578\u0572\u0561\u0564\u0561\u0580\u0571\u0565\u0580\u0568","text_title":"\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0565\u0584 CTRL + V \u057a\u0561\u057f\u0573\u0565\u0576\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u056b \u057f\u0565\u0572\u0561\u0564\u0580\u0574\u0561\u0576 \u0570\u0561\u0574\u0561\u0580"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ia_dlg.js
new file mode 100644
index 000000000..37f601ab9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.paste_dlg',{"word_title":"\u5c06\u590d\u5236(CTRL + C)\u7684\u5185\u5bb9\u7c98\u8d34(CTRL + V)\u5230\u7a97\u53e3\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7\u53f7","text_title":"\u5c06\u590d\u5236(CTRL + C)\u7684\u5185\u5bb9\u7c98\u8d34(CTRL + V)\u5230\u7a97\u53e3\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/id_dlg.js
new file mode 100644
index 000000000..f3e05b52c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.paste_dlg',{"word_title":"Gunakan CTRL+V pada keyboard untuk paste.","text_linebreaks":"Keep linebreaks","text_title":"Gunakan CTRL+V pada keyboard untuk paste."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/is_dlg.js
new file mode 100644
index 000000000..cbacd611f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.paste_dlg',{"word_title":"Nota\u00f0u CTRL+V \u00e1 lyklabo\u00f0rinu til a\u00f0 l\u00edma textanum \u00ed ritilinn.","text_linebreaks":"Halda endingu l\u00edna","text_title":"Nota\u00f0u CTRL+V \u00e1 lyklabor\u00f0inu til a\u00f0 l\u00edma textanum \u00ed ritilinn."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/it_dlg.js
new file mode 100644
index 000000000..f1b8dc7e0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.paste_dlg',{"word_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra.","text_linebreaks":"Mantieni interruzioni di riga","text_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ja_dlg.js
new file mode 100644
index 000000000..5af598227
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.paste_dlg',{"word_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002","text_linebreaks":"\u6539\u884c\u3092\u4fdd\u6301","text_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ka_dlg.js
new file mode 100644
index 000000000..dedcfd33b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.paste_dlg',{"word_title":"\u0418\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e9\u10d0\u10e1\u10d0\u10e1\u10db\u10d4\u10da\u10d0\u10d3 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d7 \u10d9\u10da\u10d0\u10d5\u10d8\u10d0\u10e2\u10e3\u10e0\u10e3\u10da\u10d8 \u10d9\u10dd\u10db\u10d1\u10d8\u10dc\u10d0\u10ea\u10d8\u10d0 CTRL+V.","text_linebreaks":"\u10d2\u10d0\u10d3\u10d0\u10e2\u10d0\u10dc\u10d8\u10da\u10d8 \u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0","text_title":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e9\u10d0\u10e1\u10d0\u10e1\u10db\u10d4\u10da\u10d0\u10d3 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d7 \u10d9\u10da\u10d0\u10d5\u10d8\u10d0\u10e2\u10e3\u10e0\u10e3\u10da\u10d8 \u10d9\u10dd\u10db\u10d1\u10d8\u10dc\u10d0\u10ea\u10d8\u10d0 CTRL+V."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/kl_dlg.js
new file mode 100644
index 000000000..652ef1c21
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/km_dlg.js
new file mode 100644
index 000000000..2c5e48c77
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.paste_dlg',{"word_title":"\u1794\u17d2\u179a\u17be CTRL V \u1793\u17c5\u179b\u17be\u1780\u17d2\u178a\u17b6\u179a\u1785\u17bb\u1785\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u1791\u17c5\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1793\u17c1\u17c7\u00a0\u17d4","text_linebreaks":"\u179a\u1780\u17d2\u179f\u17b6\u179f\u1789\u17d2\u1789\u17b6\u1785\u17bb\u17c7\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb","text_title":"\u1794\u17d2\u179a\u17be CTRL V \u1793\u17c5\u179b\u17be\u1780\u17d2\u178a\u17b6\u179a\u1785\u17bb\u1785\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u1791\u17c5\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1793\u17c1\u17c7\u00a0\u17d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ko_dlg.js
new file mode 100644
index 000000000..3fb6c9762
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.paste_dlg',{"word_title":"\ud0a4\ubcf4\ub4dc\uc5d0\uc11c Ctrl-V\ub97c \uc0ac\uc6a9\ud558\uba74 \ud14d\uc2a4\ud2b8\ub97c \ucc3d\uc5d0 \ubd99\uc5ec\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","text_linebreaks":"\uc904\ubc14\uafc8 \uc720\uc9c0","text_title":"\ud0a4\ubcf4\ub4dc\uc5d0\uc11c Ctrl-V\ub97c \uc0ac\uc6a9\ud558\uba74 \ud14d\uc2a4\ud2b8\ub97c \ucc3d\uc5d0 \ubd99\uc5ec\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/kz_dlg.js
new file mode 100644
index 000000000..b4c7f8206
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lb_dlg.js
new file mode 100644
index 000000000..66955c018
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.paste_dlg',{"word_title":"Dr\u00e9ckt op \u00c4rer Tastatur Ctrl+V, um den Text an ze f\u00fcgen.","text_linebreaks":"Zeilen\u00ebmbr\u00ebch b\u00e4ibehalen","text_title":"Dr\u00e9ckt op \u00c4rer Tastatur Ctrl+V, fir den Text an ze f\u00fcgen."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lt_dlg.js
new file mode 100644
index 000000000..7cf928dab
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.paste_dlg',{"word_title":"Naudokite CTRL+V tekstui \u012fd\u0117ti \u012f \u0161\u012f lang\u0105.","text_linebreaks":"Palikti eilu\u010di\u0173 l\u016b\u017eius","text_title":"Naudokite CTRL+V tekstui \u012fd\u0117ti \u012f \u0161\u012f lang\u0105."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lv_dlg.js
new file mode 100644
index 000000000..ae02a1864
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.paste_dlg',{"word_title":"Izmantojiet CTRL+V uz j\u016bsu tastat\u016bras lai iekop\u0113t tekstu log\u0101.","text_linebreaks":"Sagl\u0101b\u0101t l\u012bniju sadal\u012bt\u0101jus","text_title":"Izmantojiet CTRL+V uz j\u016bsu tastat\u016bras lai iekop\u0113t tekstu log\u0101."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/mk_dlg.js
new file mode 100644
index 000000000..bebf74f7b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.paste_dlg',{"word_title":"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 CTRL V \u043e\u0434 \u0442\u0430\u0441\u0442\u0430\u0442\u0443\u0440\u0430\u0442\u0430 \u0437\u0430 \u0434\u0430 \u0433\u043e \u0437\u0430\u043b\u0435\u043f\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u0432\u043e \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442.","text_linebreaks":"\u0417\u0430\u0434\u0440\u0436\u0438 \u0433\u0438 \u043f\u0430\u0443\u0437\u0438\u0442\u0435 \u043f\u043e\u043c\u0435\u0453\u0443 \u043b\u0438\u043d\u0438\u0438\u0442\u0435","text_title":"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 CTRL V \u043e\u0434 \u0442\u0430\u0441\u0442\u0430\u0442\u0443\u0440\u0430\u0442\u0430 \u0437\u0430 \u0434\u0430 \u0433\u043e \u0437\u0430\u043b\u0435\u043f\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u0432\u043e \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ml_dlg.js
new file mode 100644
index 000000000..3bee52560
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/mn_dlg.js
new file mode 100644
index 000000000..1f9b96ee5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.paste_dlg',{"word_title":"\u0422\u0430 \u0431\u0438\u0447\u0432\u044d\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u0432\u044d\u043b Ctrl+V \u0434\u044d\u044d\u0440 \u0434\u0430\u0440\u043d\u0430 \u0443\u0443.","text_linebreaks":"\u041c\u04e9\u0440 \u0442\u0430\u0441\u043b\u0430\u043b\u0442\u044b\u0433 \u04af\u043b\u0434\u044d\u044d\u043d\u044d","text_title":"\u0422\u0430 \u0431\u0438\u0447\u0432\u044d\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u0432\u044d\u043b Ctrl+V \u0434\u044d\u044d\u0440 \u0434\u0430\u0440\u043d\u0430 \u0443\u0443."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ms_dlg.js
new file mode 100644
index 000000000..547d849d0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.paste_dlg',{"word_title":"Guna CTRL+V pada papan kekunci anda untuk teks ke dalam tetingkap.","text_linebreaks":"Biarkan garisan pemisah","text_title":"Guna CTRL+V pada papan kekunci anda untuk Tempel teks ke dalam tetingkap."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/my_dlg.js
new file mode 100644
index 000000000..b5938b045
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.paste_dlg',{"word_title":"\u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1011\u1032\u101e\u102d\u102f\u1037 \u1005\u102c\u101e\u102c\u1038\u1000\u102d\u102f \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u101b\u1014\u103a \u101e\u1004\u103a\u1037 \u1000\u102e\u1038\u1018\u102f\u1010\u103a\u101c\u1000\u103a\u1000\u103d\u1000\u103a\u101b\u103e\u102d CTRL V \u1000\u102d\u102f \u101e\u1036\u102f\u1038\u1015\u102b","text_linebreaks":"\u1005\u102c\u1031\u103c\u1000\u102c\u1004\u103a\u1038\u1001\u103d\u1032\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1001\u103d\u1032\u101c\u103b\u103e\u1000\u103a\u1011\u102c\u1038\u1015\u102b","text_title":"\u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1011\u1032\u101e\u102d\u102f\u1037 \u1005\u102c\u101e\u102c\u1038\u1000\u102d\u102f \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u101b\u1014\u103a \u101e\u1004\u103a\u1037 \u1000\u102e\u1038\u1018\u102f\u1010\u103a\u101c\u1000\u103a\u1000\u103d\u1000\u103a\u101b\u103e\u102d CTRL V \u1000\u102d\u102f \u101e\u1036\u102f\u1038\u1015\u102b"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nb_dlg.js
new file mode 100644
index 000000000..bfb2266f8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.paste_dlg',{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vinduet.","text_linebreaks":"Behold tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vinduet."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nl_dlg.js
new file mode 100644
index 000000000..bac8ac046
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.paste_dlg',{"word_title":"Gebruik Ctrl+V om tekst in het venster te plakken.","text_linebreaks":"Regelafbreking bewaren","text_title":"Gebruik Ctrl+V om tekst in het venster te plakken."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nn_dlg.js
new file mode 100644
index 000000000..be58ae572
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.paste_dlg',{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vindauget.","text_linebreaks":"Behald tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vindauget."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/no_dlg.js
new file mode 100644
index 000000000..3f8e333d0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.paste_dlg',{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn teksten i dette vinduet.","text_linebreaks":"Behold tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn teksten i dette vinduet."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/pl_dlg.js
new file mode 100644
index 000000000..54fd41c37
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.paste_dlg',{"word_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna.","text_linebreaks":"Zachowaj ko\u0144ce linii.","text_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ps_dlg.js
new file mode 100644
index 000000000..a2a054660
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/pt_dlg.js
new file mode 100644
index 000000000..c9601cf94
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.paste_dlg',{"word_title":"Use CTRL+V para colar o texto na janela.","text_linebreaks":"Manter quebras de linha","text_title":"Use CTRL+V para colar o texto na janela."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ro_dlg.js
new file mode 100644
index 000000000..897bc01fc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.paste_dlg',{"word_title":"Folose\u0219te CTRL V pentru a lipi \u00een aceast\u0103 zon\u0103.","text_linebreaks":"P\u0103streaz\u0103 separatoarele de linii.","text_title":"Folose\u0219te CTRL V pentru a lipi \u00een aceast\u0103 zon\u0103."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ru_dlg.js
new file mode 100644
index 000000000..b360b075d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.paste_dlg',{"word_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e.","text_linebreaks":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u0441\u0442\u0440\u043e\u043a","text_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sc_dlg.js
new file mode 100644
index 000000000..851950f22
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.paste_dlg',{"word_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002 ","text_linebreaks":"\u4fdd\u7559\u6362\u884c\u7b26\u53f7","text_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002 "}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/se_dlg.js
new file mode 100644
index 000000000..b5f03733f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.paste_dlg',{"word_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster.","text_linebreaks":"Spara radbrytningar","text_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/si_dlg.js
new file mode 100644
index 000000000..c72fcae8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sk_dlg.js
new file mode 100644
index 000000000..a3745f300
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.paste_dlg',{"word_title":"Pou\u017eite CTRL+V pre vlo\u017eenie textu do okna.","text_linebreaks":"Zachova\u0165 zalamovanie riadkov","text_title":"Pou\u017eite CTRL+V pre vlo\u017eenie textu do okna."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sl_dlg.js
new file mode 100644
index 000000000..eca8bd1d3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.paste_dlg',{"word_title":"Uporabite kombinacijo tipk CTRL+V, da prilepite vsebino v okno.","text_linebreaks":"Obdr\u017ei prelome vrstic","text_title":"Uporabite kombinacijo tipk CTRL+V, da prilepite vsebino v okno."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sq_dlg.js
new file mode 100644
index 000000000..741461421
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.paste_dlg',{"word_title":"P\u00ebrdor CTRL+V p\u00ebr t\u00eb ngjitur tekstin.","text_linebreaks":"Ruaj linjat e reja","text_title":"P\u00ebrdor CTRL+V p\u00ebr t\u00eb ngjitur tekstin."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sr_dlg.js
new file mode 100644
index 000000000..51dc0ddad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.paste_dlg',{"word_title":"Koristite CTRL V na tastaturi da zalepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prelome linija","text_title":"Koristite CTRL+V na tastaturi da zalepite tekst u prozor."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sv_dlg.js
new file mode 100644
index 000000000..1c99e2b1b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.paste_dlg',{"word_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster.","text_linebreaks":"Spara radbrytningar","text_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sy_dlg.js
new file mode 100644
index 000000000..9cbe5d1bb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ta_dlg.js
new file mode 100644
index 000000000..03eb3e075
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/te_dlg.js
new file mode 100644
index 000000000..768b6b5ca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/th_dlg.js
new file mode 100644
index 000000000..9616c4102
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tn_dlg.js
new file mode 100644
index 000000000..ba07557c3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tr_dlg.js
new file mode 100644
index 000000000..16864b474
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.paste_dlg',{"word_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n.","text_linebreaks":"Sat\u0131r kesmelerini tut","text_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tt_dlg.js
new file mode 100644
index 000000000..fec28fed7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.paste_dlg',{"word_title":"\u5c07\u8907\u88fd(CTRL + C)\u7684\u5167\u5bb9\u8cbc\u4e0a(CTRL + V)\u5230\u8996\u7a97\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u865f\u865f","text_title":"\u5c07\u8907\u88fd(CTRL + C)\u7684\u5167\u5bb9\u8cbc\u4e0a(CTRL + V)\u5230\u8996\u7a97\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tw_dlg.js
new file mode 100644
index 000000000..5022d8d8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.paste_dlg',{"word_title":"\u7528 Ctrl+V \u5c07\u5167\u5bb9\u8cbc\u4e0a\u3002","text_linebreaks":"\u4fdd\u7559\u63db\u884c\u7b26\u865f","text_title":"\u7528 Ctrl+V \u5c07\u5167\u5bb9\u8cbc\u4e0a\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/uk_dlg.js
new file mode 100644
index 000000000..b62328956
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.paste_dlg',{"word_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e.","text_linebreaks":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438 \u0440\u044f\u0434\u043a\u0456\u0432","text_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ur_dlg.js
new file mode 100644
index 000000000..23f2aec55
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/vi_dlg.js
new file mode 100644
index 000000000..25694d9c1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.paste_dlg',{"word_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5.","text_linebreaks":"Gi\u1eef ng\u1eaft d\u00f2ng","text_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..4abd1a96c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.paste_dlg',{"word_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002","text_linebreaks":"\u4fdd\u7559\u65ad\u884c","text_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..ea2f214ee
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.paste_dlg',{"word_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8907\u88fd) \u8cc7\u6599\u5230\u756b\u9762\u4e0a","text_linebreaks":"\u4fdd\u7559\u6587\u7ae0\u4e2d\u7684\u63db\u884c","text_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8cbc\u4e0a) \u8cc7\u6599\u5230\u756b\u9762\u4e0a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh_dlg.js
new file mode 100644
index 000000000..9755a5773
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.paste_dlg',{"word_title":"\u8acb\u4f7f\u7528 CTRL V \u5c07\u5167\u5bb9\u8cbc\u4e0a.","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u865f","text_title":"\u8acb\u4f7f\u7528 CTRL V \u5c07\u5167\u5bb9\u8cbc\u4e0a."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zu_dlg.js
new file mode 100644
index 000000000..456781a08
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.paste_dlg',{"word_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7\u53f7","text_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm
new file mode 100644
index 000000000..b65594547
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pastetext.htm
@@ -0,0 +1,27 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>{#paste.paste_text_desc}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/pastetext.js"></script>
+</head>
+<body onresize="PasteTextDialog.resize();" style="display:none; overflow:hidden;">
+ <form name="source" onsubmit="return PasteTextDialog.insert();" action="#">
+ <div style="float: left" class="title">{#paste.paste_text_desc}</div>
+
+ <div style="float: right">
+ <input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label>
+ </div>
+
+ <br style="clear: both" />
+
+ <div>{#paste_dlg.text_title}</div>
+
+ <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>
+
+ <div class="mceActionPanel">
+ <input type="submit" name="insert" value="{#insert}" id="insert" />
+ <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
+ </div>
+ </form>
+</body>
+</html> \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm
new file mode 100644
index 000000000..0f6bb4121
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/paste/pasteword.htm
@@ -0,0 +1,21 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>{#paste.paste_word_desc}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/pasteword.js"></script>
+</head>
+<body onresize="PasteWordDialog.resize();" style="display:none; overflow:hidden;">
+ <form name="source" onsubmit="return PasteWordDialog.insert();" action="#">
+ <div class="title">{#paste.paste_word_desc}</div>
+
+ <div>{#paste_dlg.word_title}</div>
+
+ <div id="iframecontainer"></div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+ </form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js
new file mode 100644
index 000000000..507909c5f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js
new file mode 100644
index 000000000..80f00f0d9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/editor_plugin_src.js
@@ -0,0 +1,53 @@
+/**
+ * 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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/example.html b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/example.html
new file mode 100644
index 000000000..b2c3d90ce
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/example.html
@@ -0,0 +1,28 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<script language="javascript" src="../../tiny_mce_popup.js"></script>
+<script type="text/javascript" src="jscripts/embed.js"></script>
+<script type="text/javascript">
+tinyMCEPopup.onInit.add(function(ed) {
+ var dom = tinyMCEPopup.dom;
+
+ // Load editor content_css
+ tinymce.each(ed.settings.content_css.split(','), function(u) {
+ dom.loadCSS(ed.documentBaseURI.toAbsolute(u));
+ });
+
+ // Place contents inside div container
+ dom.setHTML('content', ed.getContent());
+});
+</script>
+<title>Example of a custom preview page</title>
+</head>
+<body>
+
+Editor contents: <br />
+<div id="content">
+<!-- Gets filled with editor contents -->
+</div>
+
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js
new file mode 100644
index 000000000..f8dc81052
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/jscripts/embed.js
@@ -0,0 +1,73 @@
+/**
+ * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.
+ */
+
+function writeFlash(p) {
+ writeEmbed(
+ 'D27CDB6E-AE6D-11cf-96B8-444553540000',
+ 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
+ 'application/x-shockwave-flash',
+ p
+ );
+}
+
+function writeShockWave(p) {
+ writeEmbed(
+ '166B1BCA-3F9C-11CF-8075-444553540000',
+ 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',
+ 'application/x-director',
+ p
+ );
+}
+
+function writeQuickTime(p) {
+ writeEmbed(
+ '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
+ 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',
+ 'video/quicktime',
+ p
+ );
+}
+
+function writeRealMedia(p) {
+ writeEmbed(
+ 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',
+ 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
+ 'audio/x-pn-realaudio-plugin',
+ p
+ );
+}
+
+function writeWindowsMedia(p) {
+ p.url = p.src;
+ writeEmbed(
+ '6BF52A52-394A-11D3-B153-00C04F79FAA6',
+ 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
+ 'application/x-mplayer2',
+ p
+ );
+}
+
+function writeEmbed(cls, cb, mt, p) {
+ var h = '', n;
+
+ h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
+ h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';
+ h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';
+ h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';
+ h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';
+ h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';
+ h += '>';
+
+ for (n in p)
+ h += '<param name="' + n + '" value="' + p[n] + '">';
+
+ h += '<embed type="' + mt + '"';
+
+ for (n in p)
+ h += n + '="' + p[n] + '" ';
+
+ h += '></embed></object>';
+
+ document.write(h);
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/preview.html b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/preview.html
new file mode 100644
index 000000000..67e7b142f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/preview/preview.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+<script type="text/javascript" src="jscripts/embed.js"></script>
+<script type="text/javascript"><!--
+document.write('<base href="' + tinyMCEPopup.getWindowArg("base") + '">');
+// -->
+</script>
+<title>{#preview.preview_desc}</title>
+</head>
+<body id="content">
+<script type="text/javascript">
+ document.write(tinyMCEPopup.editor.getContent());
+</script>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js
new file mode 100644
index 000000000..b5b3a55ed
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js
new file mode 100644
index 000000000..3933fe656
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/print/editor_plugin_src.js
@@ -0,0 +1,34 @@
+/**
+ * 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.Print', {
+ init : function(ed, url) {
+ ed.addCommand('mcePrint', function() {
+ ed.getWin().print();
+ });
+
+ ed.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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('print', tinymce.plugins.Print);
+})();
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js
new file mode 100644
index 000000000..8e9399667
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js
new file mode 100644
index 000000000..f5a3de8f5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/save/editor_plugin_src.js
@@ -0,0 +1,101 @@
+/**
+ * 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.Save', {
+ init : function(ed, url) {
+ var t = this;
+
+ t.editor = ed;
+
+ // Register commands
+ ed.addCommand('mceSave', t._save, t);
+ ed.addCommand('mceCancel', t._cancel, t);
+
+ // Register buttons
+ ed.addButton('save', {title : 'save.save_desc', cmd : 'mceSave'});
+ ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'});
+
+ ed.onNodeChange.add(t._nodeChange, t);
+ ed.addShortcut('ctrl+s', ed.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
+ };
+ },
+
+ // Private methods
+
+ _nodeChange : function(ed, cm, n) {
+ var ed = this.editor;
+
+ if (ed.getParam('save_enablewhendirty')) {
+ cm.setDisabled('save', !ed.isDirty());
+ cm.setDisabled('cancel', !ed.isDirty());
+ }
+ },
+
+ // Private methods
+
+ _save : function() {
+ var ed = this.editor, formObj, os, i, elementId;
+
+ formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form');
+
+ if (ed.getParam("save_enablewhendirty") && !ed.isDirty())
+ return;
+
+ tinyMCE.triggerSave();
+
+ // Use callback instead
+ if (os = ed.getParam("save_onsavecallback")) {
+ if (ed.execCallback('save_onsavecallback', ed)) {
+ ed.startContent = tinymce.trim(ed.getContent({format : 'raw'}));
+ ed.nodeChanged();
+ }
+
+ return;
+ }
+
+ if (formObj) {
+ ed.isNotDirty = true;
+
+ if (formObj.onsubmit == null || formObj.onsubmit() != false)
+ formObj.submit();
+
+ ed.nodeChanged();
+ } else
+ ed.windowManager.alert("Error: No form element found.");
+ },
+
+ _cancel : function() {
+ var ed = this.editor, os, h = tinymce.trim(ed.startContent);
+
+ // Use callback instead
+ if (os = ed.getParam("save_oncancelcallback")) {
+ ed.execCallback('save_oncancelcallback', ed);
+ return;
+ }
+
+ ed.setContent(h);
+ ed.undoManager.clear();
+ ed.nodeChanged();
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('save', tinymce.plugins.Save);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css
new file mode 100644
index 000000000..ecdf58c7b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/css/searchreplace.css
@@ -0,0 +1,6 @@
+.panel_wrapper {height:85px;}
+.panel_wrapper div.current {height:85px;}
+
+/* IE */
+* html .panel_wrapper {height:100px;}
+* html .panel_wrapper div.current {height:100px;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js
new file mode 100644
index 000000000..165bc12df
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js
new file mode 100644
index 000000000..4c87e8fa7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js
@@ -0,0 +1,61 @@
+/**
+ * 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.SearchReplacePlugin', {
+ init : function(ed, url) {
+ function open(m) {
+ // Keep IE from writing out the f/r character to the editor
+ // instance while initializing a new dialog. See: #3131190
+ window.focus();
+
+ ed.windowManager.open({
+ file : url + '/searchreplace.htm',
+ width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)),
+ height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)),
+ inline : 1,
+ auto_focus : 0
+ }, {
+ mode : m,
+ search_string : ed.selection.getContent({format : 'text'}),
+ plugin_url : url
+ });
+ };
+
+ // Register commands
+ ed.addCommand('mceSearch', function() {
+ open('search');
+ });
+
+ ed.addCommand('mceReplace', function() {
+ open('replace');
+ });
+
+ // Register buttons
+ ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'});
+ ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'});
+
+ ed.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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js
new file mode 100644
index 000000000..80284b9f3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/js/searchreplace.js
@@ -0,0 +1,142 @@
+tinyMCEPopup.requireLangPack();
+
+var SearchReplaceDialog = {
+ init : function(ed) {
+ var t = this, f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");
+
+ t.switchMode(m);
+
+ f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");
+
+ // Focus input field
+ f[m + '_panel_searchstring'].focus();
+
+ mcTabs.onChange.add(function(tab_id, panel_id) {
+ t.switchMode(tab_id.substring(0, tab_id.indexOf('_')));
+ });
+ },
+
+ switchMode : function(m) {
+ var f, lm = this.lastMode;
+
+ if (lm != m) {
+ f = document.forms[0];
+
+ if (lm) {
+ f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;
+ f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;
+ f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;
+ f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;
+ }
+
+ mcTabs.displayTab(m + '_tab', m + '_panel');
+ document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";
+ document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";
+ this.lastMode = m;
+ }
+ },
+
+ searchNext : function(a) {
+ 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;
+
+ // Get input
+ f = document.forms[0];
+ s = f[m + '_panel_searchstring'].value;
+ b = f[m + '_panel_backwardsu'].checked;
+ ca = f[m + '_panel_casesensitivebox'].checked;
+ rs = f['replace_panel_replacestring'].value;
+
+ if (tinymce.isIE) {
+ r = ed.getDoc().selection.createRange();
+ }
+
+ if (s == '')
+ return;
+
+ function fix() {
+ // Correct Firefox graphics glitches
+ // TODO: Verify if this is actually needed any more, maybe it was for very old FF versions?
+ r = se.getRng().cloneRange();
+ ed.getDoc().execCommand('SelectAll', false, null);
+ se.setRng(r);
+ };
+
+ function replace() {
+ ed.selection.setContent(rs); // Needs to be duplicated due to selection bug in IE
+ };
+
+ // IE flags
+ if (ca)
+ fl = fl | 4;
+
+ switch (a) {
+ case 'all':
+ // Move caret to beginning of text
+ ed.execCommand('SelectAll');
+ ed.selection.collapse(true);
+
+ if (tinymce.isIE) {
+ ed.focus();
+ r = ed.getDoc().selection.createRange();
+
+ while (r.findText(s, b ? -1 : 1, fl)) {
+ r.scrollIntoView();
+ r.select();
+ replace();
+ fo = 1;
+
+ if (b) {
+ r.moveEnd("character", -(rs.length)); // Otherwise will loop forever
+ }
+ }
+
+ tinyMCEPopup.storeSelection();
+ } else {
+ while (w.find(s, ca, b, false, false, false, false)) {
+ replace();
+ fo = 1;
+ }
+ }
+
+ if (fo)
+ tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));
+ else
+ tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
+
+ return;
+
+ case 'current':
+ if (!ed.selection.isCollapsed())
+ replace();
+
+ break;
+ }
+
+ se.collapse(b);
+ r = se.getRng();
+
+ // Whats the point
+ if (!s)
+ return;
+
+ if (tinymce.isIE) {
+ ed.focus();
+ r = ed.getDoc().selection.createRange();
+
+ if (r.findText(s, b ? -1 : 1, fl)) {
+ r.scrollIntoView();
+ r.select();
+ } else
+ tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
+
+ tinyMCEPopup.storeSelection();
+ } else {
+ if (!w.find(s, ca, b, false, false, false, false))
+ tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));
+ else
+ fix();
+ }
+ }
+};
+
+tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ar_dlg.js
new file mode 100644
index 000000000..4e6674b7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.searchreplace_dlg',{findwhat:"\u0627\u0628\u062d\u062b \u0639\u0646",replacewith:"\u0627\u0633\u062a\u0628\u062f\u0644 \u0628\u0640",direction:"\u0627\u0644\u0627\u062a\u062c\u0627\u0647",up:"\u0644\u0623\u0639\u0644\u0649",down:"\u0644\u0623\u0633\u0641\u0644",mcase:"\u062d\u0627\u0644\u0647 \u0627\u0644\u062a\u0637\u0627\u0628\u0642",findnext:"\u0627\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u062a\u0627\u0644\u0649",allreplaced:"\u062a\u0645\u062a \u0639\u0645\u0644\u064a\u0647 \u0627\u0644\u0627\u0633\u062a\u0628\u062f\u0627\u0644","searchnext_desc":"\u0628\u062d\u062b \u0645\u0631\u0647 \u0627\u062e\u0631\u0649",notfound:"\u0644\u0642\u062f \u0627\u0646\u062a\u0647\u0649 \u0627\u0644\u0628\u062d\u062b \u0648\u0644\u0645 \u0646\u0639\u062b\u0631 \u0639\u0644\u0649 \u0627\u0649 \u0646\u062a\u064a\u062c\u0647","search_title":"\u0628\u062d\u062b","replace_title":"\u0628\u062d\u062b/\u0627\u0633\u062a\u0628\u062f\u0627\u0644",replaceall:"\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0627\u0644\u0643\u0644",replace:"\u0627\u0633\u062a\u0628\u062f\u0627\u0644"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/az_dlg.js
new file mode 100644
index 000000000..d9085f847
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.searchreplace_dlg',{findwhat:"N\u0259 axtar\u0131ls\u0131n",replacewith:"N\u0259y\u0259 d\u0259yi\u015filsin",direction:"\u0130stiqam\u0259tl\u0259ndirm\u0259",up:"Yuxar\u0131",down:"A\u015fa\u011f\u0131",mcase:"Registr\u0131 n\u0259z\u0259r\u0259 al",findnext:"Sonrak\u0131n\u0131 axtar",allreplaced:"B\u00fct\u00fcn qar\u015f\u0131la\u015fm\u0131\u015f s\u0259trl\u0259r d\u0259yi\u015fdirildi.","searchnext_desc":"S\u00f6zl\u0259ri axtar",notfound:"Axtar\u0131\u015f bitdi. S\u0259tr tap\u0131lmad\u0131.","search_title":"Axtar","replace_title":"Axtar/D\u0259yi\u015f",replaceall:"Ham\u0131s\u0131n\u0131 d\u0259yi\u015f",replace:"D\u0259yi\u015f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/be_dlg.js
new file mode 100644
index 000000000..a7d9635c2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.searchreplace_dlg',{findwhat:"\u0428\u0442\u043e \u0437\u043d\u0430\u0439\u0441\u0446\u0456",replacewith:"\u0417\u0430\u043c\u044f\u043d\u0456\u0446\u044c \u043d\u0430",direction:"\u041a\u0456\u0440\u0443\u043d\u0430\u043a",up:"\u0423\u0432\u0435\u0440\u0445",down:"\u0423\u043d\u0456\u0437",mcase:"\u0423\u043b\u0456\u0447\u0432\u0430\u0446\u044c \u0440\u044d\u0433\u0456\u0441\u0442\u0440",findnext:"\u0417\u043d\u0430\u0439\u0441\u0446\u0456 \u0434\u0430\u043b\u0435\u0439",allreplaced:"\u0423\u0441\u0435 \u0441\u0443\u0441\u0442\u0440\u0430\u043a\u0430\u0435\u043c\u044b\u044f \u0440\u0430\u0434\u043a\u0456 \u0431\u044b\u043b\u0456 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b\u044f.","searchnext_desc":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456 \u0437\u043d\u043e\u045e",notfound:"\u041f\u043e\u0448\u0443\u043a \u0441\u043a\u043e\u043d\u0447\u0430\u043d\u044b. \u0420\u0430\u0434\u043e\u043a \u043d\u0435 \u0437\u043d\u043e\u0439\u0434\u0437\u0435\u043d\u044b.","search_title":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456","replace_title":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456/\u0417\u0430\u043c\u044f\u043d\u0456\u0446\u044c",replaceall:"\u0417\u0430\u043c\u044f\u043d\u0456\u0446\u044c \u0443\u0441\u0451",replace:"\u0417\u0430\u043c\u044f\u043d\u0456\u0446\u044c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bg_dlg.js
new file mode 100644
index 000000000..6560e0f87
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.searchreplace_dlg',{findwhat:"\u0422\u044a\u0440\u0441\u0438",replacewith:"\u0417\u0430\u043c\u0435\u0441\u0442\u0438 \u0441",direction:"\u041f\u043e\u0441\u043e\u043a\u0430",up:"\u041d\u0430\u0433\u043e\u0440\u0435",down:"\u041d\u0430\u0434\u043e\u043b\u0443",mcase:"\u0421\u044a\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u044a\u0440\u0430",findnext:"\u0422\u044a\u0440\u0441\u0438 \u0441\u043b\u0435\u0434\u0432\u0430\u0449\u0438",allreplaced:"\u0412\u0441\u0438\u0447\u043a\u0438 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u0434\u0443\u043c\u0438 \u0431\u044f\u0445\u0430 \u0437\u0430\u043c\u0435\u0441\u0442\u0435\u043d\u0438.","searchnext_desc":"\u0422\u044a\u0440\u0441\u0438 \u043e\u0442\u043d\u043e\u0432\u043e",notfound:"\u0422\u044a\u0440\u0441\u0435\u043d\u0435\u0442\u043e \u0437\u0430\u0432\u044a\u0440\u0448\u0438. \u0422\u044a\u0440\u0441\u0435\u043d\u0438\u0442\u0435 \u0434\u0443\u043c\u0438 \u043d\u0435 \u0431\u044f\u0445\u0430 \u043e\u0442\u043a\u0440\u0438\u0442\u0438.","search_title":"\u0422\u044a\u0440\u0441\u0438","replace_title":"\u0422\u044a\u0440\u0441\u0438/\u0417\u0430\u043c\u0435\u0441\u0442\u0438",replaceall:"\u0417\u0430\u043c\u0435\u0441\u0442\u0438 \u0432\u0441\u0438\u0447\u043a\u0438",replace:"\u0417\u0430\u043c\u0435\u0441\u0442\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bn_dlg.js
new file mode 100644
index 000000000..607e623c4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/br_dlg.js
new file mode 100644
index 000000000..9313b8346
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.searchreplace_dlg',{findwhat:"Localizar",replacewith:"Substituir com",direction:"Dire\u00e7\u00e3o",up:"Acima",down:"Abaixo",mcase:"Diferenciar mai\u00fasculas/min\u00fasculas",findnext:"Localizar pr\u00f3ximo",allreplaced:"Todas as substitui\u00e7\u00f5es foram efetuadas.","searchnext_desc":"Localizar novamente",notfound:"A pesquisa foi conclu\u00edda sem resultados.","search_title":"Localizar","replace_title":"Localizar/substituir",replaceall:"Substituir todos",replace:"Substituir"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bs_dlg.js
new file mode 100644
index 000000000..358f15c87
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.searchreplace_dlg',{findwhat:"Prona\u0111i tekst",replacewith:"Zamijeni sa",direction:"Smjer",up:"Gore",down:"Dolje",mcase:"Match case",findnext:"Prona\u0111i sljede\u0107e",allreplaced:"Sva pojavljivanja tra\u017eenog teksta su zamijenjena.","searchnext_desc":"Prona\u0111i opet",notfound:"Pretra\u017eivanje je zavr\u0161eno. Tra\u017eeni tekst nije prona\u0111en.","search_title":"Prona\u0111i","replace_title":"Prona\u0111i/Zamijeni",replaceall:"Zamijeni sve",replace:"Zamijeni"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ca_dlg.js
new file mode 100644
index 000000000..da37295f3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.searchreplace_dlg',{findwhat:"Cerca",replacewith:"Reempla\u00e7a amb",direction:"Direcci\u00f3",up:"Amunt",down:"Avall",mcase:"Distingeix maj\u00fascules/min\u00fascules",findnext:"Seg\u00fcent",allreplaced:"S\'han reempla\u00e7at totes les ocurr\u00e8ncies de la cadena cercada.","searchnext_desc":"Cerca de nou",notfound:"S\'ha completat la cerca. No s\'ha trobat la cadena cercada.","search_title":"Cerca","replace_title":"Cerca/Reempla\u00e7a",replaceall:"Reempla\u00e7a-ho tot",replace:"Reempla\u00e7a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ch_dlg.js
new file mode 100644
index 000000000..112f4e9ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.searchreplace_dlg',{findwhat:"\u641c\u5bfb\u76ee\u6807",replacewith:"\u53d6\u4ee3\u4e3a",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u533a\u5206\u5927\u5c0f\u5199",findnext:"\u5bfb\u627e\u4e0b\u4e00\u4e2a",allreplaced:"\u6240\u6709\u7b26\u5408\u7684\u5b57\u7b26\u4e32\u5747\u5df2\u53d6\u4ee3\u3002","searchnext_desc":"\u7ee7\u7eed\u641c\u5bfb",notfound:"\u641c\u5bfb\u5b8c\u6bd5\uff0c\u6ca1\u6709\u627e\u5230\u7b26\u5408\u7684\u5b57\u7b26\u4e32\u3002","search_title":"\u641c\u5bfb","replace_title":"\u641c\u5bfb/\u53d6\u4ee3",replaceall:"\u5168\u90e8\u53d6\u4ee3",replace:"\u53d6\u4ee3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cn_dlg.js
new file mode 100644
index 000000000..4513a8798
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.searchreplace_dlg',{findwhat:"\u67e5\u627e\u76ee\u6807",replacewith:"\u66ff\u6362",direction:"\u67e5\u627e\u65b9\u5411",up:"\u5411\u4e0a\u67e5\u627e",down:"\u5411\u4e0b\u67e5\u627e",mcase:"\u533a\u5206\u5927\u5c0f\u5199",findnext:"\u67e5\u627e\u4e0b\u4e00\u4e2a",allreplaced:"\u6240\u6709\u7b26\u5408\u7684\u5b57\u7b26\u5c06\u4f1a\u88ab\u66ff\u6362","searchnext_desc":"\u91cd\u65b0\u67e5\u627e",notfound:"\u67e5\u627e\u5b8c\u6bd5\uff0c\u6ca1\u6709\u627e\u5230\u4efb\u4f55\u7b26\u5408\u7684\u5b57\u7b26","search_title":"\u67e5\u627e","replace_title":"\u67e5\u627e/\u66ff\u6362",replaceall:"\u66ff\u6362\u5168\u90e8",replace:"\u66ff\u6362"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cs_dlg.js
new file mode 100644
index 000000000..81654085b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.searchreplace_dlg',{findwhat:"Co hledat",replacewith:"\u010c\u00edm nahradit",direction:"Sm\u011br",up:"Nahoru",down:"Dol\u016f",mcase:"Rozli\u0161ovat velikost",findnext:"Naj\u00edt dal\u0161\u00ed",allreplaced:"V\u0161echny v\u00fdskyty byly nahrazeny.","searchnext_desc":"Naj\u00edt dal\u0161\u00ed",notfound:"Hled\u00e1n\u00ed bylo dokon\u010deno. Hledan\u00fd text nebyl nalezen.","search_title":"Naj\u00edt","replace_title":"Naj\u00edt/nahradit",replaceall:"Nahradit v\u0161e",replace:"Nahradit"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cy_dlg.js
new file mode 100644
index 000000000..204824f55
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.searchreplace_dlg',{findwhat:"Canfod beth",replacewith:"Adnewid gyda",direction:"Cyfeiriad",up:"I fyny",down:"I lawr",mcase:"Cydweddu priflythrennedd",findnext:"Canfod nesaf",allreplaced:"Amnewidwyd pob digwyddiad o\'r llinyn chwiliad.","searchnext_desc":"Canfod eto",notfound:"Mae\'r chwiliad wedi cwblhau. Methu canfod y llinyn chwiliad.","search_title":"Canfod","replace_title":"Canfod/Amnewid",replaceall:"Amnewid pob un",replace:"Amnewid"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/da_dlg.js
new file mode 100644
index 000000000..b551cea04
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.searchreplace_dlg',{findwhat:"S\u00f8g efter",replacewith:"Erstat med",direction:"Retning",up:"Op",down:"Ned",mcase:"Forskel p\u00e5 store og sm\u00e5 bogstaver",findnext:"Find n\u00e6ste",allreplaced:"Alle forekomster af s\u00f8gestrengen er erstattet.","searchnext_desc":"S\u00f8g igen",notfound:"S\u00f8gningen gav intet resultat.","search_title":"S\u00f8g","replace_title":"S\u00f8g / erstat",replaceall:"Erstat alle",replace:"Erstat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/de_dlg.js
new file mode 100644
index 000000000..7c40acd9e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.searchreplace_dlg',{findwhat:"Zu suchender Text",replacewith:"Ersetzen durch",direction:"Suchrichtung",up:"Aufw\u00e4rts",down:"Abw\u00e4rts",mcase:"Gro\u00df-/Kleinschreibung beachten",findnext:"Weitersuchen",allreplaced:"Alle Vorkommen der Zeichenkette wurden ersetzt.","searchnext_desc":"Weitersuchen",notfound:"Die Suche ist am Ende angelangt. Die Zeichenkette konnte nicht gefunden werden.","search_title":"Suchen","replace_title":"Suchen/Ersetzen",replaceall:"Alle ersetzen",replace:"Ersetzen"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/dv_dlg.js
new file mode 100644
index 000000000..481f124dc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/el_dlg.js
new file mode 100644
index 000000000..10e564dc8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.searchreplace_dlg',{findwhat:"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5",replacewith:"\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bc\u03b5",direction:"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7",up:"\u03a0\u03ac\u03bd\u03c9",down:"\u039a\u03ac\u03c4\u03c9",mcase:"\u03a4\u03b1\u03af\u03c1\u03b9\u03b1\u03c3\u03bc\u03b1 \u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1/\u03bc\u03b9\u03ba\u03c1\u03ac",findnext:"\u0392\u03c1\u03b5\u03c2 \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf",allreplaced:"\u038c\u03bb\u03b5\u03c2 \u03bf\u03b9 \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 \u03b6\u03b7\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ac\u03b8\u03b7\u03ba\u03b1\u03bd.","searchnext_desc":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03be\u03b1\u03bd\u03ac",notfound:"\u0397 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03c4\u03b5\u03bb\u03b5\u03af\u03c9\u03c3\u03b5. \u03a4\u03bf \u03b6\u03b7\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5.","search_title":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7","replace_title":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7/\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7",replaceall:"\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4. \u03cc\u03bb\u03c9\u03bd",replace:"\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js
new file mode 100644
index 000000000..8a6590097
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/eo_dlg.js
new file mode 100644
index 000000000..3cd418510
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.searchreplace_dlg',{findwhat:"Ser\u0109i",replacewith:"Anstata\u016digi per",direction:"Direkto",up:"Supren",down:"Suben",mcase:"Usklecodistinga",findnext:"Ser\u0109i sekvan",allreplaced:"\u0108iuj anstata\u016digoj estas faritaj.","searchnext_desc":"Ser\u0109i denove",notfound:"La ser\u0109o fini\u011dis sen rezultoj.","search_title":"Ser\u0109i","replace_title":"Ser\u0109i/anstata\u016digi",replaceall:"Anstata\u016digi \u0109iujn",replace:"Anstata\u016digi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/es_dlg.js
new file mode 100644
index 000000000..62e178de6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.searchreplace_dlg',{findwhat:"Qu\u00e9 buscar",replacewith:"Reemplazar por",direction:"Direcci\u00f3n",up:"Arriba",down:"Abajo",mcase:"Min\u00fas./May\u00fas.",findnext:"Buscar siguiente",allreplaced:"Se ha reemplazado el texto.","searchnext_desc":"Buscar de nuevo",notfound:"La b\u00fasqueda se ha completado. No se encontr\u00f3 el texto introducido.","search_title":"Buscar","replace_title":"Buscar/Reemplazar",replaceall:"Reemplazar todo",replace:"Reemplazar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/et_dlg.js
new file mode 100644
index 000000000..ef567f7bd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.searchreplace_dlg',{findwhat:"Otsi mida",replacewith:"Asenda millega",direction:"Suund",up:"\u00dcles",down:"Alla",mcase:"Vasta suurusele",findnext:"Otsi j\u00e4rgmine",allreplaced:"K\u00f5ik otsis\u00f5na ilmingud on asendatud.","searchnext_desc":"Otsi uuesti",notfound:"Otsing on l\u00f5petatud. Otsis\u00f5na ei leitud.","search_title":"Otsi","replace_title":"Otsi/Asenda",replaceall:"Asenda k\u00f5ik",replace:"Asenda"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/eu_dlg.js
new file mode 100644
index 000000000..602cfa8bc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.searchreplace_dlg',{findwhat:"Zer bilatu",replacewith:"Zerekin ordezkatu",direction:"Norabidea",up:"Gorantz",down:"Beherantz",mcase:"Maiuskulak eta minuskulak kontuan hartu",findnext:"Hurrengoa",allreplaced:"Bilatutakoaren agerpen guztiak ordezkatu dira.","searchnext_desc":"Berriz bilatu",notfound:"Bilaketa bukatu da. Bilatutakoa ez da aurkitu.","search_title":"Bilatu","replace_title":"Bilatu/Ordezkatu",replaceall:"Ordezkatu guztiak",replace:"Ordezkatu"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fa_dlg.js
new file mode 100644
index 000000000..d8c5d4b72
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.searchreplace_dlg',{findwhat:"\u062c\u0633\u062a\u062c\u0648\u06cc",replacewith:"\u062a\u0639\u0648\u06cc\u0636 \u0628\u0627",direction:"\u062c\u0647\u062a",up:"\u0628\u0627\u0644\u0627",down:"\u067e\u0627\u06cc\u06cc\u0646",mcase:"\u0647\u0645\u0633\u0627\u0646 \u0628\u0648\u062f\u0646 \u062d\u0631\u0648\u0641",findnext:"\u062c\u0633\u062a\u062c\u0648\u06cc \u0628\u0639\u062f\u06cc",allreplaced:"\u062a\u0645\u0627\u0645\u06cc \u06a9\u0644\u0645\u0627\u062a \u06cc\u0627\u0641\u062a \u0634\u062f\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u0627\u0641\u062a\u0646\u062f","searchnext_desc":"\u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u062c\u062f\u062f",notfound:"\u062c\u0633\u062a\u062c\u0648 \u06a9\u0627\u0645\u0644 \u0634\u062f. \u06a9\u0644\u0645\u0647 \u062c\u0633\u062a\u062c\u0648 \u0634\u062f\u0647 \u06cc\u0627\u0641\u062a \u0646\u0634\u062f","search_title":"\u062c\u0633\u062a\u062c\u0648","replace_title":"\u062c\u0633\u062a\u062c\u0648/\u062a\u0639\u0648\u06cc\u0636",replaceall:"\u062a\u0639\u0648\u06cc\u0636 \u0647\u0645\u0647",replace:"\u062a\u0639\u0648\u06cc\u0636"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fi_dlg.js
new file mode 100644
index 000000000..c2617c337
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.searchreplace_dlg',{findwhat:"Etsit\u00e4\u00e4n",replacewith:"Korvataan",direction:"Suunta",up:"Yl\u00f6s",down:"Alas",mcase:"Huomioi isot ja pienet kirjaimet",findnext:"Etsi seuraavaa",allreplaced:"Kaikki l\u00f6ydetyt merkkijonot korvattiin.","searchnext_desc":"Etsi uudestaan",notfound:"Haku on valmis. Haettua teksti\u00e4 ei l\u00f6ytynyt.","search_title":"Haku","replace_title":"Etsi ja korvaa",replaceall:"Korvaa kaikki",replace:"Korvaa"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fr_dlg.js
new file mode 100644
index 000000000..707b5c2a9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.searchreplace_dlg',{findwhat:"Rechercher ceci",replacewith:"Remplacer par",direction:"Direction",up:"Vers le haut",down:"Vers le bas",mcase:"Sensible \u00e0 la casse",findnext:"Rechercher le suivant",allreplaced:"Toutes les occurrences de la cha\u00eene recherch\u00e9e ont \u00e9t\u00e9 remplac\u00e9es.","searchnext_desc":"Suivant",notfound:"La recherche est termin\u00e9e. La cha\u00eene recherch\u00e9e n\'a pas \u00e9t\u00e9 trouv\u00e9e.","search_title":"Rechercher","replace_title":"Rechercher / remplacer",replaceall:"Tout remplacer",replace:"Remplacer"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/gl_dlg.js
new file mode 100644
index 000000000..72be08cda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.searchreplace_dlg',{findwhat:"Localizar",replacewith:"Reemplazar por",direction:"Direcci\u00f3n",up:"Arriba",down:"Abaixo",mcase:"Min\u00fas./Mai\u00fas.",findnext:"Buscar seginte",allreplaced:"T\u00f3da-las coincidencias do texto buscado foron reemplazadas.","searchnext_desc":"Buscar outra vez",notfound:"A busca rematou. No se atopou o texto buscado.","search_title":"Buscar","replace_title":"Buscar/Reemplazar",replaceall:"Reemplazar todo",replace:"Reemplazar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/gu_dlg.js
new file mode 100644
index 000000000..153358ee7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/he_dlg.js
new file mode 100644
index 000000000..c5861bbd4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.searchreplace_dlg',{findwhat:"\u05dc\u05d7\u05e4\u05e9 \u05d0\u05ea",replacewith:"\u05dc\u05d4\u05d7\u05dc\u05d9\u05e3 \u05d1",direction:"\u05db\u05d9\u05d5\u05d5\u05df",up:"\u05dc\u05de\u05e2\u05dc\u05d4",down:"\u05dc\u05de\u05d8\u05d4",mcase:"\u05d4\u05ea\u05d0\u05dd \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea",findnext:"\u05d7\u05e4\u05e9 \u05d0\u05ea \u05d4\u05d1\u05d0",allreplaced:"\u05db\u05dc \u05e4\u05e8\u05d9\u05d8\u05d9 \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05d5\u05d7\u05dc\u05e4\u05d5","searchnext_desc":"\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05d1\u05d0",notfound:"\u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05e1\u05ea\u05d9\u05d9\u05dd. \u05e4\u05e8\u05d9\u05d8 \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0.","search_title":"\u05d7\u05d9\u05e4\u05d5\u05e9","replace_title":"\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d5\u05d4\u05d7\u05dc\u05e4\u05d4",replaceall:"\u05d4\u05d7\u05dc\u05e4\u05ea \u05d4\u05db\u05dc",replace:"\u05d4\u05d7\u05dc\u05e4\u05d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hi_dlg.js
new file mode 100644
index 000000000..a65ceb8ae
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hr_dlg.js
new file mode 100644
index 000000000..9dafb4511
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.searchreplace_dlg',{findwhat:"Prona\u0111i tekst",replacewith:"Zamijeni sa",direction:"Smjer",up:"Gore",down:"Dolje",mcase:"Usporedi velika/mala slova",findnext:"Prona\u0111i sljede\u0107e",allreplaced:"Sva pojavljivanja tra\u017eenog teksta su zamijenjena.","searchnext_desc":"Prona\u0111i opet",notfound:"Pretra\u017eivanje je zavr\u0161eno. Tra\u017eeni tekst nije prona\u0111en.","search_title":"Prona\u0111i","replace_title":"Prona\u0111i/Zamijeni",replaceall:"Zamijeni sve",replace:"Zamijeni"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hu_dlg.js
new file mode 100644
index 000000000..4165838c6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.searchreplace_dlg',{findwhat:"Mit keres",replacewith:"Mire cser\u00e9l",direction:"Ir\u00e1ny",up:"Fel",down:"Le",mcase:"Kis- \u00e9s nagybet\u0171k megk\u00fcl\u00f6nb\u00f6ztet\u00e9se",findnext:"K\u00f6vetkez\u0151",allreplaced:"A keresett r\u00e9szsz\u00f6veg minden el\u0151fordul\u00e1sa cser\u00e9lve lett.","searchnext_desc":"Keres\u00e9s megint",notfound:"A keres\u00e9s v\u00e9get \u00e9rt. A keresett sz\u00f6vegr\u00e9sz nem tal\u00e1lhat\u00f3.","search_title":"Keres\u00e9s","replace_title":"Keres\u00e9s/Csere",replaceall:"\u00d6sszes cser\u00e9je",replace:"Csere"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hy_dlg.js
new file mode 100644
index 000000000..c2cdadb43
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.searchreplace_dlg',{findwhat:"\u0548\u0580\u0578\u0576\u0565\u056c",replacewith:"\u0553\u0578\u0583\u0578\u056d\u0565\u056c",direction:"\u0548\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576",up:"\u054e\u0565\u0580\u0587 ",down:"\u0546\u0565\u0580\u0584\u0587",mcase:"\u0540\u0561\u0577\u057e\u056b \u0561\u057c\u0576\u0565\u056c \u057c\u0565\u0563\u056b\u057d\u057f\u0578\u0580\u0568",findnext:"\u0533\u057f\u0576\u0565\u056c \u0570\u0561\u057b\u0578\u0580\u0564\u0568",allreplaced:"\u0532\u0578\u056c\u0578\u0580 \u0563\u057f\u0576\u057e\u0561\u056e\u0576\u0565\u0580\u0568 \u0583\u0578\u0583\u0578\u056d\u057e\u0565\u0581\u056b\u0576","searchnext_desc":"\u0546\u0578\u0580\u056b\u0581 \u0578\u0580\u0578\u0576\u0565\u056c",notfound:"\u0548\u0580\u0578\u0576\u0578\u0582\u0574\u0568 \u0561\u057e\u0561\u0580\u057f\u057e\u0565\u0581\u0589 \u0548\u0579\u056b\u0576\u0579 \u0579\u056b \u0563\u057f\u0576\u057e\u0565\u056c","search_title":"\u0548\u0580\u0578\u0576\u0565\u056c","replace_title":"\u0548\u0580\u0578\u0576\u0565\u056c / \u0553\u0578\u0583\u0578\u056d\u0565\u056c",replaceall:"\u0553\u0578\u0583\u0578\u056d\u0565\u056c \u0562\u0561\u056c\u0578\u0580\u0568",replace:"\u0553\u0578\u0583\u0578\u056d\u0565\u056c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ia_dlg.js
new file mode 100644
index 000000000..44e9adafc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.searchreplace_dlg',{findwhat:"\u67e5\u627e\u76ee\u6807",replacewith:"\u66ff\u6362\u4e3a",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u533a\u5206\u5927\u5c0f\u5199",findnext:"\u67e5\u627e\u4e0b\u4e00\u4e2a",allreplaced:"\u5df2\u66ff\u6362\u6240\u6709\u5339\u914d\u7684\u5b57\u7b26\u4e32.","searchnext_desc":"\u518d\u6b21\u67e5\u627e",notfound:"\u67e5\u627e\u5df2\u5b8c\u6210 ! \u627e\u4e0d\u5230\u4efb\u4f55\u76ee\u6807\u3002 ","search_title":"\u67e5\u627e","replace_title":"\u67e5\u627e/\u66ff\u6362",replaceall:"\u5168\u90e8\u66ff\u6362",replace:"\u66ff\u6362"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/id_dlg.js
new file mode 100644
index 000000000..3d6ce654f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.searchreplace_dlg',{findwhat:"Cari apa...",replacewith:"Ganti dengan...",direction:"Arah",up:"Atas",down:"Bawah",mcase:"Match case",findnext:"Cari selanjutnya",allreplaced:"Seluruh kata dari string pencarian telah digantikan","searchnext_desc":"Cari Lagi",notfound:"Pencarian selesai. Hasil tidak ditemukan.","search_title":"Cari","replace_title":"Cari/Ganti",replaceall:"Ganti semua",replace:"Ganti"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/is_dlg.js
new file mode 100644
index 000000000..94004afdf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.searchreplace_dlg',{findwhat:"Finna hva\u00f0",replacewith:"Skipta \u00fat me\u00f0",direction:"\u00c1tt",up:"Upp",down:"Ni\u00f0ur",mcase:"Match case",findnext:"Finna n\u00e6sta",allreplaced:"\u00d6llum ni\u00f0urst\u00f6\u00f0um leitar var skipt \u00fat.","searchnext_desc":"Finna aftur",notfound:"Leitinni er loki\u00f0. Leitarstrengurinn fannst ekki.","search_title":"Finna","replace_title":"Finna/Skipta \u00fat",replaceall:"Skipta \u00fat \u00f6llu",replace:"Skipta \u00fat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/it_dlg.js
new file mode 100644
index 000000000..da34e5d83
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.searchreplace_dlg',{findwhat:"Trova:",replacewith:"Sostituisci con:",direction:"Direzione",up:"Avanti",down:"Indietro",mcase:"Maiuscole/minuscole",findnext:"Trova succ.",allreplaced:"Tutte le occorrenze del criterio di ricerca sono state sostituite.","searchnext_desc":"Trova successivo",notfound:"Ricerca completata. Nessun risultato trovato.","search_title":"Trova","replace_title":"Trova/Sostituisci",replaceall:"Sost. tutto",replace:"Sostituisci"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ja_dlg.js
new file mode 100644
index 000000000..a12eb7830
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.searchreplace_dlg',{findwhat:"\u691c\u7d22\u3059\u308b\u6587\u5b57\u5217",replacewith:"\u7f6e\u63db\u5f8c\u306e\u6587\u5b57\u5217",direction:"\u65b9\u5411",up:"\u4e0a\u3078",down:"\u4e0b\u3078",mcase:"\u5927\u6587\u5b57\u30fb\u5c0f\u6587\u5b57\u306e\u533a\u5225",findnext:"\u6b21\u3092\u691c\u7d22",allreplaced:"\u3059\u3079\u3066\u7f6e\u63db\u3057\u307e\u3057\u305f\u3002","searchnext_desc":"\u518d\u691c\u7d22",notfound:"\u691c\u7d22\u3092\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002\u691c\u7d22\u6587\u5b57\u5217\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002","search_title":"\u691c\u7d22","replace_title":"\u691c\u7d22\u3068\u7f6e\u63db",replaceall:"\u3059\u3079\u3066\u7f6e\u63db",replace:"\u7f6e\u63db"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ka_dlg.js
new file mode 100644
index 000000000..fdf508fc4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.searchreplace_dlg',{findwhat:"\u10eb\u10d4\u10d5\u10dc\u10d0",replacewith:"\u10e8\u10d4\u10ea\u10d5\u10da\u10d0 ..",direction:"\u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0",up:"\u10d6\u10d4\u10db\u10dd\u10d7 ",down:"\u10e5\u10d5\u10d4\u10db\u10dd\u10d7",mcase:"\u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d8\u10e1 \u10d2\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10e1\u10ec\u10d8\u10dc\u10d4\u10d1\u10d0",findnext:"\u10d8\u10de\u10dd\u10d5\u10dc\u10d4 \u10e8\u10d4\u10db\u10d3\u10d4\u10d2",allreplaced:"\u10e7\u10d5\u10d4\u10da\u10d0 \u10db\u10dc\u10d8\u10e8\u10dc\u10d4\u10da\u10dd\u10d1\u10d0 \u10e8\u10d4\u10ea\u10d5\u10da\u10d8\u10da\u10d8\u10d0.","searchnext_desc":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7 \u10de\u10dd\u10d5\u10dc\u10d0",notfound:"\u10eb\u10d4\u10d1\u10dc\u10d0 \u10d3\u10d0\u10e1\u10e0\u10e3\u10da\u10d4\u10d1\u10e3\u10da\u10d8\u10d0. \u10e8\u10d4\u10e1\u10d0\u10e2\u10e7\u10d5\u10d8\u10e1\u10d1\u10d8 \u10d0\u10e0 \u10d0\u10e0\u10d8\u10e1 \u10dc\u10d0\u10de\u10dd\u10d5\u10dc\u10d8.","search_title":"\u10eb\u10d8\u10d4\u10d1\u10d0","replace_title":"\u10db\u10dd\u10eb\u10d4\u10d1\u10dc\u10d0 \u10d3\u10d0 \u10e8\u10d4\u10ea\u10d5\u10da\u10d0",replaceall:"\u10e7\u10d5\u10d4\u10da\u10d0\u10e4\u10d4\u10e0\u10d8\u10e1 \u10e8\u10d4\u10ea\u10d5\u10da\u10d0",replace:"\u10e8\u10d4\u10ea\u10d5\u10da\u10d0"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/kl_dlg.js
new file mode 100644
index 000000000..be9cd6950
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/km_dlg.js
new file mode 100644
index 000000000..c6390bb8f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.searchreplace_dlg',{findwhat:"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u17d2\u179c\u17b8",replacewith:"\u1787\u17c6\u1793\u17bd\u179f\u178a\u17c4\u1799",direction:"\u1791\u17b7\u179f\u178a\u17c5",up:"\u17a1\u17be\u1784\u179b\u17be",down:"\u1785\u17bb\u17c7\u1780\u17d2\u179a\u17c4\u1798",mcase:"\u1780\u179a\u178e\u17b8\u178a\u17c6\u178e\u17bc\u1785",findnext:"\u179a\u1780\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb",allreplaced:"\u1781\u17d2\u179f\u17c2\u17a2\u1780\u17d2\u179f\u179a\u178a\u17c2\u179b\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1787\u17bd\u1794\u1794\u17d2\u179a\u1791\u17c7\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17c6\u1793\u17bd\u179f\u00a0\u17d4","searchnext_desc":"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f",notfound:"\u1780\u17b6\u179a\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u1794\u17cb\u00a0\u17d4 \u1781\u17d2\u179f\u17c2\u17a2\u1780\u17d2\u179f\u179a\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u1783\u17be\u1789\u00a0\u17d4","search_title":"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780","replace_title":"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780/\u1787\u17c6\u1793\u17bd\u179f",replaceall:"\u1787\u17c6\u1793\u17bd\u179f\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb",replace:"\u1787\u17c6\u1793\u17bd\u179f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ko_dlg.js
new file mode 100644
index 000000000..15587c91b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.searchreplace_dlg',{findwhat:"\ucc3e\uc744 \ub0b4\uc6a9",replacewith:"\ubc14\uafc0 \ub0b4\uc6a9",direction:"\ubc29\ud5a5",up:"\uc704\ub85c",down:"\uc544\ub798\ub85c",mcase:"\ub300\uc18c\ubb38\uc790 \uad6c\ubcc4",findnext:"\ub2e4\uc74c \ucc3e\uae30",allreplaced:"\uac80\uc0c9 \ubb38\uc790\uc5f4\uc744 \ubaa8\ub450 \ucc3e\uc544 \ubc14\uafe8\uc2b5\ub2c8\ub2e4.","searchnext_desc":"\ub2e4\uc2dc \ucc3e\uae30",notfound:"\uac80\uc0c9\uc774 \uc644\ub8cc\ub410\uc2b5\ub2c8\ub2e4. \uac80\uc0c9 \ubb38\uc790\uc5f4\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.","search_title":"\ucc3e\uae30","replace_title":"\ucc3e\uae30/\ubc14\uafb8\uae30",replaceall:"\ubaa8\ub450 \ubc14\uafb8\uae30",replace:"\ubc14\uafb8\uae30"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/kz_dlg.js
new file mode 100644
index 000000000..725203e34
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lb_dlg.js
new file mode 100644
index 000000000..c73710971
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.searchreplace_dlg',{findwhat:"Ze sichenden Text",replacewith:"Ersetzen duerch",direction:"Sichrichtung",up:"No uewen",down:"No \u00ebnnen",mcase:"Grouss-/Klengschreiwung beuechten",findnext:"Weidersichen",allreplaced:"All d\'Virkomme vun der Zeechekette goufen ersat.","searchnext_desc":"Weidersichen",notfound:"D\'Sich ass um Enn ukomm. D\'Zeechekette konnt net fonnt ginn.","search_title":"Sichen","replace_title":"Sichen/Ersetzen",replaceall:"All ersetzen",replace:"Ersetzen"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lt_dlg.js
new file mode 100644
index 000000000..bc35477fd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.searchreplace_dlg',{findwhat:"Ko ie\u0161koti",replacewith:"Kuo pakeisti",direction:"Kryptis",up:"\u012e vir\u0161\u0173",down:"\u012e apa\u010di\u0105",mcase:"Visi\u0161kas atitikimas",findnext:"Ie\u0161koti sek.",allreplaced:"Visi paie\u0161kos fraz\u0117s pasikartojimai pakeisti.","searchnext_desc":"Ie\u0161koti dar kart\u0105",notfound:"Paie\u0161ka baigta. Paie\u0161kos fraz\u0117 nerasta.","search_title":"Ie\u0161koti","replace_title":"Ie\u0161koti/Pakeisti",replaceall:"Pakeisti visus",replace:"Pakeisti"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lv_dlg.js
new file mode 100644
index 000000000..f093dd5c2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.searchreplace_dlg',{findwhat:"Ko atrast",replacewith:"Aizvietot ar",direction:"Virziens",up:"Uz aug\u0161u",down:"Uz leju",mcase:"Re\u0123istrj\u016bt\u012bgs",findnext:"Mekl\u0113t n\u0101kamo",allreplaced:"Visas fr\u0101zes/v\u0101rdi tika veiksm\u012bgi aizvietoti.","searchnext_desc":"Mekl\u0113t v\u0113lreiz",notfound:"Mekl\u0113\u0161ana pabeigta. Mekl\u0113t\u0101 fr\u0101ze/v\u0101rds netika atrasta.","search_title":"Mekl\u0113t","replace_title":"Mekl\u0113t/Aizvietot",replaceall:"Aizvietot visu",replace:"Aizvietot"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/mk_dlg.js
new file mode 100644
index 000000000..bf3828a15
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.searchreplace_dlg',{findwhat:"\u041d\u0430\u0458\u0434\u0438 \u0442\u0435\u043a\u0441\u0442",replacewith:"\u0417\u0430\u043c\u0435\u043d\u0438 \u0441\u043e",direction:"\u0421\u043c\u0435\u0440",up:"\u0413\u043e\u0440\u0435",down:"\u0414\u043e\u043b\u0435",mcase:"\u0441\u043b\u0443\u0447\u0430\u0458 \u043a\u043e\u0433\u0430 \u0435 \u043f\u043e\u0433\u043e\u0434\u0435\u043d\u043e",findnext:"\u041d\u0430\u0458\u0434\u0438 \u0441\u043b\u0435\u0434\u043d\u043e",allreplaced:"\u0421\u0438\u0442\u0435 \u043f\u043e\u0458\u0430\u0432\u0443\u0432\u0430\u045a\u0430 \u043d\u0430 \u0431\u0430\u0440\u0430\u043d\u0438\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u0441\u0435 \u0437\u0430\u043c\u0435\u043d\u0435\u0442\u0438","searchnext_desc":"\u041d\u0430\u0458\u0434\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e",notfound:"\u0411\u0430\u0440\u0430\u045a\u0435\u0442\u043e \u0437\u0430\u0432\u0440\u0448\u0438. \u0411\u0430\u0440\u0430\u043d\u0438\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0435 \u043d\u0430\u0458\u0434\u0435\u043d.","search_title":"\u041d\u0430\u0458\u0434\u0438","replace_title":"\u041d\u0430\u0458\u0434\u0438/\u0417\u0430\u043c\u0435\u043d\u0438",replaceall:"\u0417\u0430\u043c\u0435\u043d\u0438 \u0433\u0438 \u0441\u0438\u0442\u0435",replace:"\u0417\u0430\u043c\u0435\u043d\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ml_dlg.js
new file mode 100644
index 000000000..d5758fe12
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/mn_dlg.js
new file mode 100644
index 000000000..454a247aa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.searchreplace_dlg',{findwhat:"\u0425\u0430\u0439\u0445 \u0431\u0438\u0447\u0432\u044d\u0440",replacewith:"\u041e\u0440\u043b\u0443\u0443\u043b\u0430\u0433\u0430",direction:"\u0425\u0430\u0439\u0445 \u0447\u0438\u0433\u043b\u044d\u043b",up:"\u0413\u044d\u0434\u0440\u044d\u0433",down:"\u0426\u0430\u0430\u0448",mcase:"\u0422\u043e\u043c/\u0416\u0438\u0436\u0438\u0433 \u0431\u0438\u0447\u0438\u043b\u0442 \u044f\u043b\u0433\u0430\u0445",findnext:"\u0426\u0430\u0430\u0448 \u0445\u0430\u0439\u0445",allreplaced:"\u0422\u044d\u043c\u0434\u044d\u0433\u0442 \u043c\u04e9\u0440\u0438\u0439\u043d \u0431\u04af\u0445 \u0442\u043e\u0445\u0438\u043e\u043b\u0434\u043b\u0443\u0443\u0434 \u043e\u0440\u043b\u0443\u0443\u043b\u0430\u0433\u0434\u0441\u0430\u043d.","searchnext_desc":"\u0426\u0430\u0430\u0448 \u0445\u0430\u0439\u0445",notfound:"\u0425\u0430\u0439\u043b\u0442 \u0442\u04e9\u0433\u0441\u0433\u04e9\u043b\u0434 \u0445\u04af\u0440\u044d\u0432. \u0422\u044d\u043c\u0434\u044d\u0433\u0442 \u043c\u04e9\u0440 \u043e\u043b\u0434\u0441\u043e\u043d\u0433\u04af\u0439.","search_title":"\u0425\u0430\u0439\u0445","replace_title":"\u0425\u0430\u0439\u0445/\u043e\u0440\u043b\u0443\u0443\u043b\u0430\u0445",replaceall:"\u0411\u04af\u0433\u0434\u0438\u0439\u0433 \u043e\u0440\u043b\u0443\u0443\u043b",replace:"\u041e\u0440\u043b\u0443\u0443\u043b"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ms_dlg.js
new file mode 100644
index 000000000..6ec6c1554
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.searchreplace_dlg',{findwhat:"Cari apa",replacewith:"Ganti dengan",direction:"Arah",up:"Atas",down:"Bawah",mcase:"Samakan kes",findnext:"Carian seterusnya",allreplaced:"Kesemua perkataan telah digantikan.","searchnext_desc":"Cari lagi",notfound:"Carian tamat. Perkataan yang dicari tiada.","search_title":"Cari","replace_title":"Cari/Ganti",replaceall:"Ganti kesemuanya",replace:"Ganti"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/my_dlg.js
new file mode 100644
index 000000000..8ca415e16
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.searchreplace_dlg',{findwhat:"\u101b\u103e\u102c\u101b\u1014\u103a",replacewith:"\u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038\u101b\u1014\u103a",direction:"\u1025\u102e\u1038\u1010\u100a\u103a\u1001\u103b\u1000\u103a",up:"\u1021\u1031\u1015\u102b\u103a",down:"\u1031\u1021\u102c\u1000\u103a",mcase:"\u1005\u102c\u101c\u1036\u102f\u1038 \u1021\u103c\u1000\u102e\u1038\u1031\u101e\u1038\u1010\u102d\u102f\u1000\u103a",findnext:"\u1031\u1014\u102c\u1000\u103a\u1005\u102c\u101c\u1036\u102f\u1038 \u101b\u103e\u102c",allreplaced:"\u101b\u103e\u102c\u1031\u1016\u103d\u1019\u103e\u102f \u1005\u102c\u1010\u1014\u103a\u1038\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038\u103c\u1015\u102e\u1038\u103c\u1015\u102e\u104b","searchnext_desc":"\u1031\u1014\u102c\u1000\u103a\u1010\u1005\u103a\u1001\u102b\u101b\u103e\u102c\u1015\u102b",notfound:"\u101b\u103e\u102c\u101c\u102d\u102f\u1037\u103c\u1015\u102e\u1038\u1015\u102b\u103c\u1015\u102e\u104b \u101b\u103e\u102c\u1031\u1016\u103d\u1031\u101e\u102c \u1005\u102c\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1019\u1031\u1010\u103d\u1037\u1015\u102b\u104b","search_title":"\u101b\u103e\u102c\u1015\u102b","replace_title":"\u101b\u103e\u102c/\u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038",replaceall:"\u1021\u102c\u1038\u101c\u1036\u102f\u1038 \u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038",replace:"\u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nb_dlg.js
new file mode 100644
index 000000000..222de644a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.searchreplace_dlg',{findwhat:"Finn hva",replacewith:"Erstatt med",direction:"Retning",up:"Oppover",down:"Nedover",mcase:"Skill mellom store og sm\u00e5 tegn",findnext:"Finn neste",allreplaced:"Alle forekomster av s\u00f8kestrengen er erstattet.","searchnext_desc":"S\u00f8k igjen",notfound:"S\u00f8ket er avsluttet. Fant ikke s\u00f8kestrengen.","search_title":"S\u00f8k","replace_title":"S\u00f8k/Erstatt",replaceall:"Erstatt alt",replace:"Erstatt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nl_dlg.js
new file mode 100644
index 000000000..afda5f032
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.searchreplace_dlg',{findwhat:"Zoeken naar",replacewith:"Vervangen door",direction:"Richting",up:"Omhoog",down:"Omlaag",mcase:"Identieke hoofdletters/kleine letters",findnext:"Zoeken",allreplaced:"Alle instanties van de zoekterm zijn vervangen.","searchnext_desc":"Opnieuw zoeken",notfound:"Het doorzoeken is voltooid. De zoekterm kon niet meer worden gevonden.","search_title":"Zoeken","replace_title":"Zoeken/Vervangen",replaceall:"Alles verv.",replace:"Vervangen"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nn_dlg.js
new file mode 100644
index 000000000..3dddb7fc0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.searchreplace_dlg',{findwhat:"Finn kva",replacewith:"Erstatt med",direction:"Retning",up:"Oppover",down:"Nedover",mcase:"Skill mellom store og sm\u00e5 teikn",findnext:"Finn neste",allreplaced:"Alle f\u00f8rekomstar av s\u00f8kjestrengen er erstatta.","searchnext_desc":"S\u00f8k igjen",notfound:"S\u00f8ket avslutta. Fann ikkje s\u00f8kjestrengen.","search_title":"S\u00f8k","replace_title":"S\u00f8k/Erstatt",replaceall:"Erstatt alt",replace:"Erstatt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/no_dlg.js
new file mode 100644
index 000000000..a623c9390
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.searchreplace_dlg',{findwhat:"Finn hva",replacewith:"Erstatt med",direction:"Retning",up:"Oppover",down:"Nedover",mcase:"Skille mellom store og sm\u00e5 bokstaver",findnext:"Finn neste",allreplaced:"Alle forekomster av s\u00f8kestrengen er erstattet.","searchnext_desc":"S\u00f8k igjen",notfound:"S\u00f8ket avsluttet. Fant ikke s\u00f8kestrengen.","search_title":"S\u00f8k","replace_title":"S\u00f8k/Erstatt",replaceall:"Erstatt alle",replace:"Erstatt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/pl_dlg.js
new file mode 100644
index 000000000..df815de1c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.searchreplace_dlg',{findwhat:"Znajd\u017a...",replacewith:"Zamie\u0144 na...",direction:"Kierunek",up:"W g\u00f3r\u0119",down:"W d\u00f3\u0142",mcase:"Uwzgl\u0119dniaj wielko\u015b\u0107 liter",findnext:"Znajd\u017a nast\u0119pny",allreplaced:"Wszystkie wyst\u0105pienia szukanego fragmentu zosta\u0142y zast\u0105pione.","searchnext_desc":"Znajd\u017a ponownie",notfound:"Wyszukiwanie zako\u0144czone. Poszukiwany fragment nie zosta\u0142 znaleziony.","search_title":"Znajd\u017a","replace_title":"Znajd\u017a/zamie\u0144",replaceall:"Zamie\u0144 wszystko",replace:"Zamie\u0144"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ps_dlg.js
new file mode 100644
index 000000000..4a69379af
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/pt_dlg.js
new file mode 100644
index 000000000..25c9a42c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.searchreplace_dlg',{findwhat:"Localizar",replacewith:"Substituir com",direction:"Dire\u00e7\u00e3o",up:"Acima",down:"Abaixo",mcase:"Diferenciar mai\u00fasculas",findnext:"Localizar pr\u00f3x.",allreplaced:"Todas as substitui\u00e7\u00f5es foram efetuadas.","searchnext_desc":"Localizar novamente",notfound:"A pesquisa foi conclu\u00edda sem resultados.","search_title":"Localizar","replace_title":"Localizar/substituir",replaceall:"Subst. todos",replace:"Substituir"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ro_dlg.js
new file mode 100644
index 000000000..d07670777
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.searchreplace_dlg',{findwhat:"Termen c\u0103utat:",replacewith:"\u00cenlocuie\u0219te cu:",direction:"Direc\u021bia",up:"\u00cen sus",down:"\u00cen jos",mcase:"Conteaz\u0103 literele mici/mari?",findnext:"Mai caut\u0103",allreplaced:"Toate instan\u021bele termenului c\u0103utat au fost \u00eenlocuite.","searchnext_desc":"Caut\u0103 din nou",notfound:"C\u0103utarea a fost terminat\u0103. Nu am g\u0103sit termenul c\u0103utat.","search_title":"Caut\u0103","replace_title":"C\u0103utare/\u00eenlocuire",replaceall:"\u00cenlocuie\u0219te tot",replace:"\u00cenlocuie\u0219te"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ru_dlg.js
new file mode 100644
index 000000000..3cc2af8d4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.searchreplace_dlg',{findwhat:"\u041f\u043e\u0438\u0441\u043a",replacewith:"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430",direction:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435",up:"\u0412\u0432\u0435\u0440\u0445 ",down:"\u0412\u043d\u0438\u0437",mcase:"\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440",findnext:"\u041d\u0430\u0439\u0442\u0438 \u0434\u0430\u043b\u0435\u0435",allreplaced:"\u0412\u0441\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b.","searchnext_desc":"\u041d\u0430\u0439\u0442\u0438 \u0435\u0449\u0435",notfound:"\u041f\u043e\u0438\u0441\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d. \u0421\u043e\u043e\u0442\u0432\u0435\u0441\u0442\u0432\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.","search_title":"\u041f\u043e\u0438\u0441\u043a","replace_title":"\u041f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430",replaceall:"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435",replace:"\u0417\u0430\u043c\u0435\u043d\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sc_dlg.js
new file mode 100644
index 000000000..731946b82
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.searchreplace_dlg',{findwhat:"\u67e5\u627e\u76ee\u6807",replacewith:"\u66ff\u6362\u4e3a",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u5927\u5c0f\u5199\u5339\u914d",findnext:"\u4e0b\u4e00\u4e2a",allreplaced:"\u5df2\u66ff\u6362\u6240\u6709\u5339\u914d\u7684\u7b26\u4e32.","searchnext_desc":"\u518d\u6b21\u67e5\u627e",notfound:"\u67e5\u627e\u5df2\u5b8c\u6210!\u627e\u4e0d\u5230\u4efb\u4f55\u76ee\u6807\u3002 ","search_title":"\u67e5\u627e","replace_title":"\u67e5\u627e/\u66ff\u6362",replaceall:"\u66ff\u6362\u5168\u90e8",replace:"\u66ff\u6362"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/se_dlg.js
new file mode 100644
index 000000000..c9cf43b3f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.searchreplace_dlg',{findwhat:"Hitta vad",replacewith:"Ers\u00e4tt med",direction:"Riktning",up:"Upp\u00e5t",down:"Ner\u00e5t",mcase:"Matcha gemener/versaler",findnext:"Hitta n\u00e4sta",allreplaced:"Alla st\u00e4llen d\u00e4r s\u00f6kstr\u00e4ngen kunde hittas har ersatts.","searchnext_desc":"S\u00f6k igen",notfound:"S\u00f6kningen har slutf\u00f6rts. S\u00f6kstr\u00e4ngen kunde inte hittas.","search_title":"S\u00f6k","replace_title":"S\u00f6k/ers\u00e4tt",replaceall:"Ers\u00e4tt alla",replace:"Ers\u00e4tt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/si_dlg.js
new file mode 100644
index 000000000..cfa3a2dda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sk_dlg.js
new file mode 100644
index 000000000..569888671
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.searchreplace_dlg',{findwhat:"H\u013eada\u0165 \u010do",replacewith:"Nahradi\u0165 \u010d\u00edm",direction:"Smer",up:"Nahor",down:"Nadol",mcase:"Rozli\u0161ova\u0165 mal\u00e9 a VE\u013dK\u00c9 p\u00edsmen\u00e1",findnext:"H\u013eada\u0165 \u010falej",allreplaced:"V\u0161etky v\u00fdskyty boli nahraden\u00e9.","searchnext_desc":"H\u013eada\u0165 \u010falej",notfound:"H\u013eadanie bolo dokon\u010den\u00e9. H\u013eadan\u00fd text nebol n\u00e1jden\u00fd.","search_title":"H\u013eada\u0165","replace_title":"H\u013eada\u0165 a nahradi\u0165",replaceall:"Nahradi\u0165 v\u0161etko",replace:"Nahradi\u0165"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sl_dlg.js
new file mode 100644
index 000000000..828fc6472
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.searchreplace_dlg',{findwhat:"I\u0161\u010dem za",replacewith:"Zamenjam z",direction:"Smer",up:"navzgor",down:"navzdol",mcase:"ujemanje velikosti",findnext:"Najdi nasled.",allreplaced:"Vse pojavitve iskanega besedila so bile zamenjane.","searchnext_desc":"Najdi znova",notfound:"Preiskovanje zaklju\u010deno. Iskanega besedila nisem na\u0161el.","search_title":"Najdi","replace_title":"Najdi/zamenjaj",replaceall:"Zamenjaj vse",replace:"Zamenjaj"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sq_dlg.js
new file mode 100644
index 000000000..851befdbe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.searchreplace_dlg',{findwhat:"K\u00ebrko p\u00ebr",replacewith:"Z\u00ebvend\u00ebso me",direction:"Drejtimi",up:"Lart",down:"Posht\u00eb",mcase:"P\u00ebrshtat madh\u00ebsin\u00eb e g\u00ebrm\u00ebs",findnext:"K\u00ebrko tjetr\u00ebn",allreplaced:"T\u00eb gjitha tekstet e gjetura u z\u00ebvend\u00ebsuan.","searchnext_desc":"K\u00ebrko p\u00ebrs\u00ebri",notfound:"K\u00ebrkimi p\u00ebrfundoi dhe nuk ktheu asnj\u00eb rezultat.","search_title":"K\u00ebrko","replace_title":"K\u00ebrko/Z\u00ebvend\u00ebso",replaceall:"Z\u00ebv. t\u00eb gjitha",replace:"Z\u00ebvend\u00ebso"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sr_dlg.js
new file mode 100644
index 000000000..0ce4906b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.searchreplace_dlg',{findwhat:"Prona\u0111i",replacewith:"Zameni sa",direction:"Smer",up:"Gore",down:"Dole",mcase:"Podudaranje velikih/malih slova",findnext:"Na\u0111i slede\u0107e",allreplaced:"Sva pojavljivanja tra\u017eenog teksta su zamenjena.","searchnext_desc":"Prona\u0111i ponovo",notfound:"Pretra\u017eivanje je zavr\u0161eno. Tra\u017eeni tekst nije prona\u0111en.","search_title":"Prona\u0111i","replace_title":"Prona\u0111i/Zameni",replaceall:"Zameni sve",replace:"Zameni"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sv_dlg.js
new file mode 100644
index 000000000..d503ec86d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.searchreplace_dlg',{findwhat:"Hitta vad",replacewith:"Ers\u00e4tt med",direction:"Riktning",up:"Upp\u00e5t",down:"Ner\u00e5t",mcase:"Matcha gemener/versaler",findnext:"Hitta n\u00e4sta",allreplaced:"Alla st\u00e4llen d\u00e4r s\u00f6kstr\u00e4ngen kunde hittas har ersatts.","searchnext_desc":"S\u00f6k igen",notfound:"S\u00f6kningen har slutf\u00f6rts. S\u00f6kstr\u00e4ngen kunde inte hittas.","search_title":"S\u00f6k","replace_title":"S\u00f6k/ers\u00e4tt",replaceall:"Ers\u00e4tt alla",replace:"Ers\u00e4tt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sy_dlg.js
new file mode 100644
index 000000000..94061d999
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ta_dlg.js
new file mode 100644
index 000000000..908bf7fe5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/te_dlg.js
new file mode 100644
index 000000000..e7adbeded
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/th_dlg.js
new file mode 100644
index 000000000..cd02e1880
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.searchreplace_dlg',{findwhat:"\u0e04\u0e49\u0e19\u0e2b\u0e32",replacewith:"\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e14\u0e49\u0e27\u0e22",direction:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07",up:"\u0e1a\u0e19",down:"\u0e25\u0e48\u0e32\u0e07",mcase:"\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e17\u0e38\u0e01\u0e2d\u0e22\u0e48\u0e32\u0e07",findnext:"\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e15\u0e48\u0e2d\u0e44\u0e1b",allreplaced:"\u0e17\u0e38\u0e01\u0e04\u0e33\u0e17\u0e35\u0e48\u0e43\u0e2a\u0e48\u0e16\u0e39\u0e01\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27","searchnext_desc":"\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07",notfound:"\u0e01\u0e32\u0e23\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e2a\u0e34\u0e49\u0e19\u0e2a\u0e38\u0e14 \u0e40\u0e23\u0e32\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2d\u0e30\u0e44\u0e23\u0e40\u0e25\u0e22","search_title":"\u0e04\u0e49\u0e19\u0e2b\u0e32","replace_title":"\u0e04\u0e49\u0e19\u0e2b\u0e32/\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48",replaceall:"\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14",replace:"\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tn_dlg.js
new file mode 100644
index 000000000..58712cdec
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tr_dlg.js
new file mode 100644
index 000000000..e5ef98ce5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.searchreplace_dlg',{findwhat:"Aranan",replacewith:"Yeni de\u011fer",direction:"Y\u00f6n",up:"Yukar\u0131",down:"A\u015fa\u011f\u0131",mcase:"B\u00fcy\u00fck/k\u00fc\u00e7\u00fck duyarl\u0131",findnext:"Sonrakini bul",allreplaced:"Aranan metin bulundu\u011fu yerlede de\u011fi\u015ftirildi.","searchnext_desc":"Tekrar ara",notfound:"Arama tamamland\u0131. Aranan metin bulunamad\u0131.","search_title":"Bul","replace_title":"Bul/De\u011fi\u015ftir",replaceall:"T\u00fcm\u00fcn\u00fc de\u011fi\u015ftir",replace:"De\u011fi\u015ftir"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tt_dlg.js
new file mode 100644
index 000000000..66b73a14f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.searchreplace_dlg',{findwhat:"\u641c\u5c0b\u76ee\u6a19",replacewith:"\u53d6\u4ee3\u7232",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u5340\u5206\u5927\u5c0f\u5beb",findnext:"\u641c\u5c0b\u4e0b\u4e00\u500b",allreplaced:"\u5df2\u53d6\u4ee3\u6240\u6709\u5339\u914d\u7684\u5b57\u4e32.","searchnext_desc":"\u518d\u6b21\u641c\u5c0b",notfound:"\u641c\u5c0b\u5df2\u5b8c\u6210 ! \u627e\u4e0d\u5230\u4efb\u4f55\u76ee\u6a19\u3002 ","search_title":"\u641c\u5c0b","replace_title":"\u641c\u5c0b/\u53d6\u4ee3",replaceall:"\u5168\u90e8\u53d6\u4ee3",replace:"\u53d6\u4ee3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tw_dlg.js
new file mode 100644
index 000000000..9b0894b3d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.searchreplace_dlg',{findwhat:"\u641c\u5c0b\u76ee\u6a19",replacewith:"\u53d6\u4ee3\u70ba",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u5340\u5206\u5927\u5c0f\u5beb",findnext:"\u5c0b\u627e\u4e0b\u4e00\u500b",allreplaced:"\u6240\u6709\u7b26\u5408\u7684\u5b57\u5143\u4e32\u5747\u5df2\u53d6\u4ee3\u3002","searchnext_desc":"\u7e7c\u7e8c\u641c\u5c0b",notfound:"\u641c\u5c0b\u5b8c\u7562\uff0c\u6c92\u6709\u627e\u5230\u7b26\u5408\u7684\u5b57\u5143\u4e32\u3002","search_title":"\u641c\u5c0b","replace_title":"\u641c\u5c0b/\u53d6\u4ee3",replaceall:"\u5168\u90e8\u53d6\u4ee3",replace:"\u53d6\u4ee3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/uk_dlg.js
new file mode 100644
index 000000000..cdb46ab59
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.searchreplace_dlg',{findwhat:"\u0417\u043d\u0430\u0439\u0442\u0438",replacewith:"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u043d\u0430",direction:"\u041d\u0430\u043f\u0440\u044f\u043c\u043e\u043a \u043f\u043e\u0448\u0443\u043a\u0443",up:"\u0412\u0433\u043e\u0440\u0443",down:"\u0412\u043d\u0438\u0437",mcase:"\u0412\u0440\u0430\u0445\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0440\u0435\u0454\u0441\u0442\u0440",findnext:"\u0417\u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0435",allreplaced:"\u0412\u0441\u0456 \u0432\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f \u0440\u044f\u0434\u043a\u0430 \u0431\u0443\u043b\u0438 \u0437\u0430\u043c\u0456\u043d\u0435\u043d\u0456.","searchnext_desc":"\u0417\u043d\u0430\u0439\u0442\u0438 \u0449\u0435",notfound:"\u041f\u043e\u0448\u0443\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e. \u041f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u0439 \u0440\u044f\u0434\u043e\u043a \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e.","search_title":"\u0428\u0443\u043a\u0430\u0442\u0438","replace_title":"\u0428\u0443\u043a\u0430\u0442\u0438/\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438",replaceall:"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0435",replace:"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ur_dlg.js
new file mode 100644
index 000000000..71e1cc103
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/vi_dlg.js
new file mode 100644
index 000000000..f291ee775
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.searchreplace_dlg',{findwhat:"T\u00ecm ki\u1ebfm g\u00ec",replacewith:"Thay th\u1ebf v\u1edbi",direction:"H\u01b0\u1edbng",up:"L\u00ean",down:"Xu\u1ed1ng",mcase:"Theo c\u1ea3 ch\u1eef hoa",findnext:"T\u00ecm k\u1ebf ti\u1ebfp",allreplaced:"T\u1ea5t c\u1ea3 c\u00e1c l\u1ea7n xu\u1ea5t hi\u1ec7n c\u1ee7a c\u00e1c chu\u1ed7i t\u00ecm ki\u1ebfm \u0111\u01b0\u1ee3c thay th\u1ebf.","searchnext_desc":"T\u00ecm l\u1ea1i",notfound:"Vi\u1ec7c t\u00ecm ki\u1ebfm \u0111\u00e3 ho\u00e0n th\u00e0nh. Chu\u1ed7i t\u00ecm ki\u1ebfm kh\u00f4ng \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y.","search_title":"T\u00ecm ki\u1ebfm","replace_title":"T\u00ecm/Thay th\u1ebf",replaceall:"Thay th\u1ebf t\u1ea5t",replace:"Thay th\u1ebf"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..88912474f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.searchreplace_dlg',{findwhat:"\u67e5\u627e\u76ee\u6807",replacewith:"\u66ff\u6362\u4e3a",direction:"\u67e5\u627e\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u533a\u5206\u5927\u5c0f\u5199",findnext:"\u67e5\u627e\u4e0b\u4e00\u4e2a",allreplaced:"\u6240\u6709\u51fa\u73b0\u7684\u5b57\u7b26\u5747\u5df2\u66ff\u6362\u3002","searchnext_desc":"\u7ee7\u7eed\u67e5\u627e",notfound:"\u67e5\u627e\u5b8c\u6210\uff0c\u672a\u627e\u5230\u7b26\u5408\u7684\u6587\u5b57\u3002","search_title":"\u67e5\u627e","replace_title":"\u67e5\u627e/\u66ff\u6362",replaceall:"\u5168\u90e8\u66ff\u6362",replace:"\u66ff\u6362"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..f60db8e39
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.searchreplace_dlg',{findwhat:"\u5c0b\u627e",replacewith:"\u53d6\u4ee3\u6210",direction:"\u5c0b\u627e\u7684\u65b9\u5411",up:"\u5f80\u4e0a\u627e",down:"\u5f80\u4e0b\u627e",mcase:"\u5927\u5c0f\u5beb\u5340\u5206\u958b\u4f86",findnext:"\u627e\u4e0b\u4e00\u500b",allreplaced:"\u53d6\u4ee3\u5b8c\u6210","searchnext_desc":"\u518d\u627e\u4e00\u6b21",notfound:"\u627e\u4e0d\u5230\u7b26\u5408\u7684\u8cc7\u6599","search_title":"\u5c0b\u627e","replace_title":"\u5c0b\u627e / \u53d6\u4ee3",replaceall:"\u5168\u90e8\u53d6\u4ee3",replace:"\u53d6\u4ee3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh_dlg.js
new file mode 100644
index 000000000..98e7555e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.searchreplace_dlg',{findwhat:"\u5c0b\u627e\u76ee\u6a19",replacewith:"\u53d6\u4ee3\u6210",direction:"\u5c0b\u627e\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u5340\u5225\u5927\u5c0f\u5beb",findnext:"\u5c0b\u627e\u4e0b\u4e00\u500b",allreplaced:"\u6240\u6709\u7b26\u5408\u7684\u5b57\u4e32\u90fd\u5df2\u88ab\u53d6\u4ee3.","searchnext_desc":"\u7e7c\u7e8c\u5c0b\u627e",notfound:"\u5b8c\u6210\u641c\u5c0b, \u5df2\u627e\u4e0d\u5230\u5c0b\u627e\u76ee\u6a19.","search_title":"\u5c0b\u627e","replace_title":"\u5c0b\u627e/\u53d6\u4ee3",replaceall:"\u5168\u90e8\u53d6\u4ee3",replace:"\u53d6\u4ee3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zu_dlg.js
new file mode 100644
index 000000000..0666035b6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.searchreplace_dlg',{findwhat:"\u67e5\u627e\u76ee\u6807",replacewith:"\u66ff\u6362\u4e3a",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u5927\u5c0f\u5199\u5339\u914d",findnext:"\u4e0b\u4e00\u4e2a",allreplaced:"\u5df2\u66ff\u6362\u6240\u6709\u5339\u914d\u7684\u7b26\u4e32.","searchnext_desc":"\u518d\u6b21\u67e5\u627e",notfound:"\u67e5\u627e\u5df2\u5b8c\u6210!\u627e\u4e0d\u5230\u4efb\u4f55\u76ee\u6807\u3002","search_title":"\u67e5\u627e","replace_title":"\u67e5\u627e/\u66ff\u6362",replaceall:"\u66ff\u6362\u5168\u90e8",replace:"\u66ff\u6362"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm
new file mode 100644
index 000000000..5a22d8aa4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/searchreplace/searchreplace.htm
@@ -0,0 +1,100 @@
+<!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>{#searchreplace_dlg.replace_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/form_utils.js"></script>
+ <script type="text/javascript" src="js/searchreplace.js"></script>
+ <link rel="stylesheet" type="text/css" href="css/searchreplace.css" />
+</head>
+<body style="display:none;" role="application" aria-labelledby="app_title">
+<span id="app_title" style="display:none">{#searchreplace_dlg.replace_title}</span>
+<form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <li id="search_tab" aria-controls="search_panel"><span><a href="javascript:SearchReplaceDialog.switchMode('search');" onmousedown="return false;">{#searchreplace.search_desc}</a></span></li>
+ <li id="replace_tab" aria-controls="replace_panel"><span><a href="javascript:SearchReplaceDialog.switchMode('replace');" onmousedown="return false;">{#searchreplace_dlg.replace}</a></span></li>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="search_panel" class="panel">
+ <table role="presentation" border="0" cellspacing="0" cellpadding="2">
+ <tr>
+ <td><label for="search_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>
+ <td><input type="text" id="search_panel_searchstring" name="search_panel_searchstring" style="width: 200px" aria-required="true" /></td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0" class="direction">
+ <tr role="group" aria-labelledby="search_panel_backwards_label">
+ <td><label id="search_panel_backwards_label">{#searchreplace_dlg.direction}</label></td>
+ <td><input id="search_panel_backwardsu" name="search_panel_backwards" class="radio" type="radio" /></td>
+ <td><label for="search_panel_backwardsu">{#searchreplace_dlg.up}</label></td>
+ <td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" checked="checked" /></td>
+ <td><label for="search_panel_backwardsd">{#searchreplace_dlg.down}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="search_panel_casesensitivebox" name="search_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>
+ <td><label for="search_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+
+ <div id="replace_panel" class="panel">
+ <table role="presentation" border="0" cellspacing="0" cellpadding="2">
+ <tr>
+ <td><label for="replace_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>
+ <td><input type="text" id="replace_panel_searchstring" name="replace_panel_searchstring" style="width: 200px" aria-required="true" /></td>
+ </tr>
+ <tr>
+ <td><label for="replace_panel_replacestring">{#searchreplace_dlg.replacewith}</label></td>
+ <td><input type="text" id="replace_panel_replacestring" name="replace_panel_replacestring" style="width: 200px" aria-required="true" /></td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0" class="direction">
+ <tr role="group" aria-labelledby="replace_panel_dir_label">
+ <td><label id="replace_panel_dir_label">{#searchreplace_dlg.direction}</label></td>
+ <td><input id="replace_panel_backwardsu" name="replace_panel_backwards" class="radio" type="radio" /></td>
+ <td><label for="replace_panel_backwardsu">{#searchreplace_dlg.up}</label></td>
+ <td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" checked="checked" /></td>
+ <td><label for="replace_panel_backwardsd">{#searchreplace_dlg.down}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2">
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="replace_panel_casesensitivebox" name="replace_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>
+ <td><label for="replace_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </div>
+
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#searchreplace_dlg.findnext}" />
+ <input type="button" class="button" id="replaceBtn" name="replaceBtn" value="{#searchreplace_dlg.replace}" onclick="SearchReplaceDialog.searchNext('current');" />
+ <input type="button" class="button" id="replaceAllBtn" name="replaceAllBtn" value="{#searchreplace_dlg.replaceall}" onclick="SearchReplaceDialog.searchNext('all');" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css
new file mode 100644
index 000000000..24efa0217
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/css/content.css
@@ -0,0 +1 @@
+.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js
new file mode 100644
index 000000000..71fbb68a6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin.js
@@ -0,0 +1 @@
+(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)}if(h.getParam("show_ignore_words",true)){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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js
new file mode 100644
index 000000000..fb32af434
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js
@@ -0,0 +1,436 @@
+/**
+ * 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() {
+ var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = 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(ed, url) {
+ var t = this, cm;
+
+ t.url = url;
+ t.editor = ed;
+ t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}");
+
+ if (t.rpcUrl == '{backend}') {
+ // Sniff if the browser supports native spellchecking (Don't know of a better way)
+ if (tinymce.isIE)
+ return;
+
+ t.hasSupport = true;
+
+ // Disable the context menu when spellchecking is active
+ ed.onContextMenu.addToTop(function(ed, e) {
+ if (t.active)
+ return false;
+ });
+ }
+
+ // Register commands
+ ed.addCommand('mceSpellCheck', function() {
+ if (t.rpcUrl == '{backend}') {
+ // Enable/disable native spellchecker
+ t.editor.getBody().spellcheck = t.active = !t.active;
+ return;
+ }
+
+ if (!t.active) {
+ ed.setProgressState(1);
+ t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) {
+ if (r.length > 0) {
+ t.active = 1;
+ t._markWords(r);
+ ed.setProgressState(0);
+ ed.nodeChanged();
+ } else {
+ ed.setProgressState(0);
+
+ if (ed.getParam('spellchecker_report_no_misspellings', true))
+ ed.windowManager.alert('spellchecker.no_mpell');
+ }
+ });
+ } else
+ t._done();
+ });
+
+ if (ed.settings.content_css !== false)
+ ed.contentCSS.push(url + '/css/content.css');
+
+ ed.onClick.add(t._showMenu, t);
+ ed.onContextMenu.add(t._showMenu, t);
+ ed.onBeforeGetContent.add(function() {
+ if (t.active)
+ t._removeWords();
+ });
+
+ ed.onNodeChange.add(function(ed, cm) {
+ cm.setActive('spellchecker', t.active);
+ });
+
+ ed.onSetContent.add(function() {
+ t._done();
+ });
+
+ ed.onBeforeGetContent.add(function() {
+ t._done();
+ });
+
+ ed.onBeforeExecCommand.add(function(ed, cmd) {
+ if (cmd == 'mceFullScreen')
+ t._done();
+ });
+
+ // Find selected language
+ t.languages = {};
+ 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) {
+ if (k.indexOf('+') === 0) {
+ k = k.substring(1);
+ t.selectedLang = v;
+ }
+
+ t.languages[k] = v;
+ });
+ },
+
+ createControl : function(n, cm) {
+ var t = this, c, ed = t.editor;
+
+ if (n == 'spellchecker') {
+ // Use basic button if we use the native spellchecker
+ if (t.rpcUrl == '{backend}') {
+ // Create simple toggle button if we have native support
+ if (t.hasSupport)
+ c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});
+
+ return c;
+ }
+
+ c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});
+
+ c.onRenderMenu.add(function(c, m) {
+ m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
+ each(t.languages, function(v, k) {
+ var o = {icon : 1}, mi;
+
+ o.onclick = function() {
+ if (v == t.selectedLang) {
+ return;
+ }
+ mi.setSelected(1);
+ t.selectedItem.setSelected(0);
+ t.selectedItem = mi;
+ t.selectedLang = v;
+ };
+
+ o.title = k;
+ mi = m.add(o);
+ mi.setSelected(v == t.selectedLang);
+
+ if (v == t.selectedLang)
+ t.selectedItem = mi;
+ })
+ });
+
+ return c;
+ }
+ },
+
+ // Internal functions
+
+ _walk : function(n, f) {
+ var d = this.editor.getDoc(), w;
+
+ if (d.createTreeWalker) {
+ w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);
+
+ while ((n = w.nextNode()) != null)
+ f.call(this, n);
+ } else
+ tinymce.walk(n, f, 'childNodes');
+ },
+
+ _getSeparators : function() {
+ var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');
+
+ // Build word separator regexp
+ for (i=0; i<str.length; i++)
+ re += '\\' + str.charAt(i);
+
+ return re;
+ },
+
+ _getWords : function() {
+ var ed = this.editor, wl = [], tx = '', lo = {}, rawWords = [];
+
+ // Get area text
+ this._walk(ed.getBody(), function(n) {
+ if (n.nodeType == 3)
+ tx += n.nodeValue + ' ';
+ });
+
+ // split the text up into individual words
+ if (ed.getParam('spellchecker_word_pattern')) {
+ // look for words that match the pattern
+ rawWords = tx.match('(' + ed.getParam('spellchecker_word_pattern') + ')', 'gi');
+ } else {
+ // Split words by separator
+ tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');
+ tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));
+ rawWords = tx.split(' ');
+ }
+
+ // Build word array and remove duplicates
+ each(rawWords, function(v) {
+ if (!lo[v]) {
+ wl.push(v);
+ lo[v] = 1;
+ }
+ });
+
+ return wl;
+ },
+
+ _removeWords : function(w) {
+ var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark();
+
+ each(dom.select('span').reverse(), function(n) {
+ if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) {
+ if (!w || dom.decode(n.innerHTML) == w)
+ dom.remove(n, 1);
+ }
+ });
+
+ se.moveToBookmark(b);
+ },
+
+ _markWords : function(wl) {
+ var ed = this.editor, dom = ed.dom, doc = ed.getDoc(), se = ed.selection, b = se.getBookmark(), nl = [],
+ w = wl.join('|'), re = this._getSeparators(), rx = new RegExp('(^|[' + re + '])(' + w + ')(?=[' + re + ']|$)', 'g');
+
+ // Collect all text nodes
+ this._walk(ed.getBody(), function(n) {
+ if (n.nodeType == 3) {
+ nl.push(n);
+ }
+ });
+
+ // Wrap incorrect words in spans
+ each(nl, function(n) {
+ var node, elem, txt, pos, v = n.nodeValue;
+
+ if (rx.test(v)) {
+ // Encode the content
+ v = dom.encode(v);
+ // Create container element
+ elem = dom.create('span', {'class' : 'mceItemHidden'});
+
+ // Following code fixes IE issues by creating text nodes
+ // using DOM methods instead of innerHTML.
+ // Bug #3124: <PRE> elements content is broken after spellchecking.
+ // Bug #1408: Preceding whitespace characters are removed
+ // @TODO: I'm not sure that both are still issues on IE9.
+ if (tinymce.isIE) {
+ // Enclose mispelled words with temporal tag
+ v = v.replace(rx, '$1<mcespell>$2</mcespell>');
+ // Loop over the content finding mispelled words
+ while ((pos = v.indexOf('<mcespell>')) != -1) {
+ // Add text node for the content before the word
+ txt = v.substring(0, pos);
+ if (txt.length) {
+ node = doc.createTextNode(dom.decode(txt));
+ elem.appendChild(node);
+ }
+ v = v.substring(pos+10);
+ pos = v.indexOf('</mcespell>');
+ txt = v.substring(0, pos);
+ v = v.substring(pos+11);
+ // Add span element for the word
+ elem.appendChild(dom.create('span', {'class' : 'mceItemHiddenSpellWord'}, txt));
+ }
+ // Add text node for the rest of the content
+ if (v.length) {
+ node = doc.createTextNode(dom.decode(v));
+ elem.appendChild(node);
+ }
+ } else {
+ // Other browsers preserve whitespace characters on innerHTML usage
+ elem.innerHTML = v.replace(rx, '$1<span class="mceItemHiddenSpellWord">$2</span>');
+ }
+
+ // Finally, replace the node with the container
+ dom.replace(elem, n);
+ }
+ });
+
+ se.moveToBookmark(b);
+ },
+
+ _showMenu : function(ed, e) {
+ var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target;
+
+ e = 0; // Fixes IE memory leak
+
+ if (!m) {
+ m = ed.controlManager.createDropMenu('spellcheckermenu', {'class' : 'mceNoIcons'});
+ t._menu = m;
+ }
+
+ if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) {
+ m.removeAll();
+ m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
+
+ t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) {
+ var ignoreRpc;
+
+ m.removeAll();
+
+ if (r.length > 0) {
+ m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
+ each(r, function(v) {
+ m.add({title : v, onclick : function() {
+ dom.replace(ed.getDoc().createTextNode(v), wordSpan);
+ t._checkDone();
+ }});
+ });
+
+ m.addSeparator();
+ } else
+ m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
+
+ if (ed.getParam('show_ignore_words', true)) {
+ ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", '');
+ m.add({
+ title : 'spellchecker.ignore_word',
+ onclick : function() {
+ var word = wordSpan.innerHTML;
+
+ dom.remove(wordSpan, 1);
+ t._checkDone();
+
+ // tell the server if we need to
+ if (ignoreRpc) {
+ ed.setProgressState(1);
+ t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) {
+ ed.setProgressState(0);
+ });
+ }
+ }
+ });
+
+ m.add({
+ title : 'spellchecker.ignore_words',
+ onclick : function() {
+ var word = wordSpan.innerHTML;
+
+ t._removeWords(dom.decode(word));
+ t._checkDone();
+
+ // tell the server if we need to
+ if (ignoreRpc) {
+ ed.setProgressState(1);
+ t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) {
+ ed.setProgressState(0);
+ });
+ }
+ }
+ });
+ }
+
+ if (t.editor.getParam("spellchecker_enable_learn_rpc")) {
+ m.add({
+ title : 'spellchecker.learn_word',
+ onclick : function() {
+ var word = wordSpan.innerHTML;
+
+ dom.remove(wordSpan, 1);
+ t._checkDone();
+
+ ed.setProgressState(1);
+ t._sendRPC('learnWord', [t.selectedLang, word], function(r) {
+ ed.setProgressState(0);
+ });
+ }
+ });
+ }
+
+ m.update();
+ });
+
+ p1 = DOM.getPos(ed.getContentAreaContainer());
+ m.settings.offset_x = p1.x;
+ m.settings.offset_y = p1.y;
+
+ ed.selection.select(wordSpan);
+ p1 = dom.getPos(wordSpan);
+ m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y);
+
+ return tinymce.dom.Event.cancel(e);
+ } else
+ m.hideMenu();
+ },
+
+ _checkDone : function() {
+ var t = this, ed = t.editor, dom = ed.dom, o;
+
+ each(dom.select('span'), function(n) {
+ if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) {
+ o = true;
+ return false;
+ }
+ });
+
+ if (!o)
+ t._done();
+ },
+
+ _done : function() {
+ var t = this, la = t.active;
+
+ if (t.active) {
+ t.active = 0;
+ t._removeWords();
+
+ if (t._menu)
+ t._menu.hideMenu();
+
+ if (la)
+ t.editor.nodeChanged();
+ }
+ },
+
+ _sendRPC : function(m, p, cb) {
+ var t = this;
+
+ JSONRequest.sendRPC({
+ url : t.rpcUrl,
+ method : m,
+ params : p,
+ success : cb,
+ error : function(e, x) {
+ t.editor.setProgressState(0);
+ t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText));
+ }
+ });
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin);
+})();
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif
new file mode 100644
index 000000000..7d0a4dbca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/spellchecker/img/wline.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/css/props.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/css/props.css
new file mode 100644
index 000000000..eb1f26496
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/css/props.css
@@ -0,0 +1,13 @@
+#text_font {width:250px;}
+#text_size {width:70px;}
+.mceAddSelectValue {background:#DDD;}
+select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left {width:70px;}
+#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex {width:70px;}
+#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left {width:70px;}
+#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left {width:70px;}
+.panel_wrapper div.current {padding-top:10px;height:230px;}
+.delim {border-left:1px solid gray;}
+.tdelim {border-bottom:1px solid gray;}
+#block_display {width:145px;}
+#list_type {width:115px;}
+.disabled {background:#EEE;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js
new file mode 100644
index 000000000..cab2153c4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js
new file mode 100644
index 000000000..5f7755f18
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/editor_plugin_src.js
@@ -0,0 +1,55 @@
+/**
+ * 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.StylePlugin', {
+ init : function(ed, url) {
+ // Register commands
+ ed.addCommand('mceStyleProps', function() {
+ ed.windowManager.open({
+ file : url + '/props.htm',
+ width : 480 + parseInt(ed.getLang('style.delta_width', 0)),
+ height : 320 + parseInt(ed.getLang('style.delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url,
+ style_text : ed.selection.getNode().style.cssText
+ });
+ });
+
+ ed.addCommand('mceSetElementStyle', function(ui, v) {
+ if (e = ed.selection.getNode()) {
+ ed.dom.setAttrib(e, 'style', v);
+ ed.execCommand('mceRepaint');
+ }
+ });
+
+ ed.onNodeChange.add(function(ed, cm, n) {
+ cm.setDisabled('styleprops', n.nodeName === 'BODY');
+ });
+
+ // Register buttons
+ ed.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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/js/props.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/js/props.js
new file mode 100644
index 000000000..6800a9a9a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/js/props.js
@@ -0,0 +1,635 @@
+tinyMCEPopup.requireLangPack();
+
+var defaultFonts = "" +
+ "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" +
+ "Times New Roman, Times, serif=Times New Roman, Times, serif;" +
+ "Courier New, Courier, mono=Courier New, Courier, mono;" +
+ "Times New Roman, Times, serif=Times New Roman, Times, serif;" +
+ "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" +
+ "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" +
+ "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif";
+
+var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger";
+var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";
+var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%";
+var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";
+var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900";
+var defaultTextStyle = "normal;italic;oblique";
+var defaultVariant = "normal;small-caps";
+var defaultLineHeight = "normal";
+var defaultAttachment = "fixed;scroll";
+var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y";
+var defaultPosH = "left;center;right";
+var defaultPosV = "top;center;bottom";
+var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom";
+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";
+var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset";
+var defaultBorderWidth = "thin;medium;thick";
+var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none";
+
+function init() {
+ var ce = document.getElementById('container'), h;
+
+ ce.style.cssText = tinyMCEPopup.getWindowArg('style_text');
+
+ h = getBrowserHTML('background_image_browser','background_image','image','advimage');
+ document.getElementById("background_image_browser").innerHTML = h;
+
+ document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color');
+ document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color');
+ document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top');
+ document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right');
+ document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom');
+ document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left');
+
+ fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true);
+ fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true);
+ fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true);
+ fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true);
+ fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true);
+ fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true);
+ fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true);
+ fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true);
+
+ fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true);
+ fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true);
+
+ fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true);
+
+ fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true);
+ fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true);
+
+ fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true);
+ fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true);
+ fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true);
+ fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true);
+ fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true);
+ fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true);
+ fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true);
+ fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true);
+ fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true);
+
+ fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true);
+ fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true);
+ fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true);
+
+ fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true);
+ fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true);
+ fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true);
+ fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true);
+
+ fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true);
+ fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true);
+ fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true);
+ fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true);
+
+ fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true);
+
+ fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true);
+ fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true);
+
+ fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true);
+ fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true);
+
+ fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true);
+
+ fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true);
+
+ fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true);
+ fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true);
+
+ TinyMCE_EditableSelects.init();
+ setupFormData();
+ showDisabledControls();
+}
+
+function setupFormData() {
+ var ce = document.getElementById('container'), f = document.forms[0], s, b, i;
+
+ // Setup text fields
+
+ selectByValue(f, 'text_font', ce.style.fontFamily, true, true);
+ selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true);
+ selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize));
+ selectByValue(f, 'text_weight', ce.style.fontWeight, true, true);
+ selectByValue(f, 'text_style', ce.style.fontStyle, true, true);
+ selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true);
+ selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight));
+ selectByValue(f, 'text_case', ce.style.textTransform, true, true);
+ selectByValue(f, 'text_variant', ce.style.fontVariant, true, true);
+ f.text_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.color);
+ updateColor('text_color_pick', 'text_color');
+ f.text_underline.checked = inStr(ce.style.textDecoration, 'underline');
+ f.text_overline.checked = inStr(ce.style.textDecoration, 'overline');
+ f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through');
+ f.text_blink.checked = inStr(ce.style.textDecoration, 'blink');
+
+ // Setup background fields
+
+ f.background_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.backgroundColor);
+ updateColor('background_color_pick', 'background_color');
+ f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
+ selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true);
+ selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true);
+ selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true);
+ selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0)));
+ selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true);
+ selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1)));
+
+ // Setup block fields
+
+ selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true);
+ selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing));
+ selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true);
+ selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing));
+ selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true);
+ selectByValue(f, 'block_text_align', ce.style.textAlign, true, true);
+ f.block_text_indent.value = getNum(ce.style.textIndent);
+ selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent));
+ selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true);
+ selectByValue(f, 'block_display', ce.style.display, true, true);
+
+ // Setup box fields
+
+ f.box_width.value = getNum(ce.style.width);
+ selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width));
+
+ f.box_height.value = getNum(ce.style.height);
+ selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height));
+ selectByValue(f, 'box_float', ce.style.cssFloat || ce.style.styleFloat, true, true);
+
+ selectByValue(f, 'box_clear', ce.style.clear, true, true);
+
+ setupBox(f, ce, 'box_padding', 'padding', '');
+ setupBox(f, ce, 'box_margin', 'margin', '');
+
+ // Setup border fields
+
+ setupBox(f, ce, 'border_style', 'border', 'Style');
+ setupBox(f, ce, 'border_width', 'border', 'Width');
+ setupBox(f, ce, 'border_color', 'border', 'Color');
+
+ updateColor('border_color_top_pick', 'border_color_top');
+ updateColor('border_color_right_pick', 'border_color_right');
+ updateColor('border_color_bottom_pick', 'border_color_bottom');
+ updateColor('border_color_left_pick', 'border_color_left');
+
+ f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value);
+ f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value);
+ f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value);
+ f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value);
+
+ // Setup list fields
+
+ selectByValue(f, 'list_type', ce.style.listStyleType, true, true);
+ selectByValue(f, 'list_position', ce.style.listStylePosition, true, true);
+ f.list_bullet_image.value = ce.style.listStyleImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
+
+ // Setup box fields
+
+ selectByValue(f, 'positioning_type', ce.style.position, true, true);
+ selectByValue(f, 'positioning_visibility', ce.style.visibility, true, true);
+ selectByValue(f, 'positioning_overflow', ce.style.overflow, true, true);
+ f.positioning_zindex.value = ce.style.zIndex ? ce.style.zIndex : "";
+
+ f.positioning_width.value = getNum(ce.style.width);
+ selectByValue(f, 'positioning_width_measurement', getMeasurement(ce.style.width));
+
+ f.positioning_height.value = getNum(ce.style.height);
+ selectByValue(f, 'positioning_height_measurement', getMeasurement(ce.style.height));
+
+ setupBox(f, ce, 'positioning_placement', '', '', ['top', 'right', 'bottom', 'left']);
+
+ s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1");
+ s = s.replace(/,/g, ' ');
+
+ if (!hasEqualValues([getVal(s, 0), getVal(s, 1), getVal(s, 2), getVal(s, 3)])) {
+ f.positioning_clip_top.value = getNum(getVal(s, 0));
+ selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0)));
+ f.positioning_clip_right.value = getNum(getVal(s, 1));
+ selectByValue(f, 'positioning_clip_right_measurement', getMeasurement(getVal(s, 1)));
+ f.positioning_clip_bottom.value = getNum(getVal(s, 2));
+ selectByValue(f, 'positioning_clip_bottom_measurement', getMeasurement(getVal(s, 2)));
+ f.positioning_clip_left.value = getNum(getVal(s, 3));
+ selectByValue(f, 'positioning_clip_left_measurement', getMeasurement(getVal(s, 3)));
+ } else {
+ f.positioning_clip_top.value = getNum(getVal(s, 0));
+ selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0)));
+ f.positioning_clip_right.value = f.positioning_clip_bottom.value = f.positioning_clip_left.value;
+ }
+
+// setupBox(f, ce, '', 'border', 'Color');
+}
+
+function getMeasurement(s) {
+ return s.replace(/^([0-9.]+)(.*)$/, "$2");
+}
+
+function getNum(s) {
+ if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s))
+ return s.replace(/[^0-9.]/g, '');
+
+ return s;
+}
+
+function inStr(s, n) {
+ return new RegExp(n, 'gi').test(s);
+}
+
+function getVal(s, i) {
+ var a = s.split(' ');
+
+ if (a.length > 1)
+ return a[i];
+
+ return "";
+}
+
+function setValue(f, n, v) {
+ if (f.elements[n].type == "text")
+ f.elements[n].value = v;
+ else
+ selectByValue(f, n, v, true, true);
+}
+
+function setupBox(f, ce, fp, pr, sf, b) {
+ if (typeof(b) == "undefined")
+ b = ['Top', 'Right', 'Bottom', 'Left'];
+
+ if (isSame(ce, pr, sf, b)) {
+ f.elements[fp + "_same"].checked = true;
+
+ setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf]));
+ f.elements[fp + "_top"].disabled = false;
+
+ f.elements[fp + "_right"].value = "";
+ f.elements[fp + "_right"].disabled = true;
+ f.elements[fp + "_bottom"].value = "";
+ f.elements[fp + "_bottom"].disabled = true;
+ f.elements[fp + "_left"].value = "";
+ f.elements[fp + "_left"].disabled = true;
+
+ if (f.elements[fp + "_top_measurement"]) {
+ selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf]));
+ f.elements[fp + "_left_measurement"].disabled = true;
+ f.elements[fp + "_bottom_measurement"].disabled = true;
+ f.elements[fp + "_right_measurement"].disabled = true;
+ }
+ } else {
+ f.elements[fp + "_same"].checked = false;
+
+ setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf]));
+ f.elements[fp + "_top"].disabled = false;
+
+ setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf]));
+ f.elements[fp + "_right"].disabled = false;
+
+ setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf]));
+ f.elements[fp + "_bottom"].disabled = false;
+
+ setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf]));
+ f.elements[fp + "_left"].disabled = false;
+
+ if (f.elements[fp + "_top_measurement"]) {
+ selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf]));
+ selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf]));
+ selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf]));
+ selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf]));
+ f.elements[fp + "_left_measurement"].disabled = false;
+ f.elements[fp + "_bottom_measurement"].disabled = false;
+ f.elements[fp + "_right_measurement"].disabled = false;
+ }
+ }
+}
+
+function isSame(e, pr, sf, b) {
+ var a = [], i, x;
+
+ if (typeof(b) == "undefined")
+ b = ['Top', 'Right', 'Bottom', 'Left'];
+
+ if (typeof(sf) == "undefined" || sf == null)
+ sf = "";
+
+ a[0] = e.style[pr + b[0] + sf];
+ a[1] = e.style[pr + b[1] + sf];
+ a[2] = e.style[pr + b[2] + sf];
+ a[3] = e.style[pr + b[3] + sf];
+
+ for (i=0; i<a.length; i++) {
+ if (a[i] == null)
+ return false;
+
+ for (x=0; x<a.length; x++) {
+ if (a[x] != a[i])
+ return false;
+ }
+ }
+
+ return true;
+};
+
+function hasEqualValues(a) {
+ var i, x;
+
+ for (i=0; i<a.length; i++) {
+ if (a[i] == null)
+ return false;
+
+ for (x=0; x<a.length; x++) {
+ if (a[x] != a[i])
+ return false;
+ }
+ }
+
+ return true;
+}
+
+function applyAction() {
+ var ce = document.getElementById('container'), ed = tinyMCEPopup.editor;
+
+ generateCSS();
+
+ tinyMCEPopup.restoreSelection();
+ ed.dom.setAttrib(ed.selection.getSelectedBlocks(), 'style', tinyMCEPopup.editor.dom.serializeStyle(tinyMCEPopup.editor.dom.parseStyle(ce.style.cssText)));
+}
+
+function updateAction() {
+ applyAction();
+ tinyMCEPopup.close();
+}
+
+function generateCSS() {
+ var ce = document.getElementById('container'), f = document.forms[0], num = new RegExp('[0-9]+', 'g'), s, t;
+
+ ce.style.cssText = "";
+
+ // Build text styles
+ ce.style.fontFamily = f.text_font.value;
+ ce.style.fontSize = f.text_size.value + (isNum(f.text_size.value) ? (f.text_size_measurement.value || 'px') : "");
+ ce.style.fontStyle = f.text_style.value;
+ ce.style.lineHeight = f.text_lineheight.value + (isNum(f.text_lineheight.value) ? f.text_lineheight_measurement.value : "");
+ ce.style.textTransform = f.text_case.value;
+ ce.style.fontWeight = f.text_weight.value;
+ ce.style.fontVariant = f.text_variant.value;
+ ce.style.color = f.text_color.value;
+
+ s = "";
+ s += f.text_underline.checked ? " underline" : "";
+ s += f.text_overline.checked ? " overline" : "";
+ s += f.text_linethrough.checked ? " line-through" : "";
+ s += f.text_blink.checked ? " blink" : "";
+ s = s.length > 0 ? s.substring(1) : s;
+
+ if (f.text_none.checked)
+ s = "none";
+
+ ce.style.textDecoration = s;
+
+ // Build background styles
+
+ ce.style.backgroundColor = f.background_color.value;
+ ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : "";
+ ce.style.backgroundRepeat = f.background_repeat.value;
+ ce.style.backgroundAttachment = f.background_attachment.value;
+
+ if (f.background_hpos.value != "") {
+ s = "";
+ s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " ";
+ s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : "");
+ ce.style.backgroundPosition = s;
+ }
+
+ // Build block styles
+
+ ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : "");
+ ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : "");
+ ce.style.verticalAlign = f.block_vertical_alignment.value;
+ ce.style.textAlign = f.block_text_align.value;
+ ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : "");
+ ce.style.whiteSpace = f.block_whitespace.value;
+ ce.style.display = f.block_display.value;
+
+ // Build box styles
+
+ ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : "");
+ ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : "");
+ ce.style.styleFloat = f.box_float.value;
+ ce.style.cssFloat = f.box_float.value;
+
+ ce.style.clear = f.box_clear.value;
+
+ if (!f.box_padding_same.checked) {
+ ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : "");
+ ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : "");
+ ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : "");
+ ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : "");
+ } else
+ ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : "");
+
+ if (!f.box_margin_same.checked) {
+ ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : "");
+ ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : "");
+ ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : "");
+ ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : "");
+ } else
+ ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : "");
+
+ // Build border styles
+
+ if (!f.border_style_same.checked) {
+ ce.style.borderTopStyle = f.border_style_top.value;
+ ce.style.borderRightStyle = f.border_style_right.value;
+ ce.style.borderBottomStyle = f.border_style_bottom.value;
+ ce.style.borderLeftStyle = f.border_style_left.value;
+ } else
+ ce.style.borderStyle = f.border_style_top.value;
+
+ if (!f.border_width_same.checked) {
+ ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : "");
+ ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : "");
+ ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : "");
+ ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : "");
+ } else
+ ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : "");
+
+ if (!f.border_color_same.checked) {
+ ce.style.borderTopColor = f.border_color_top.value;
+ ce.style.borderRightColor = f.border_color_right.value;
+ ce.style.borderBottomColor = f.border_color_bottom.value;
+ ce.style.borderLeftColor = f.border_color_left.value;
+ } else
+ ce.style.borderColor = f.border_color_top.value;
+
+ // Build list styles
+
+ ce.style.listStyleType = f.list_type.value;
+ ce.style.listStylePosition = f.list_position.value;
+ ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : "";
+
+ // Build positioning styles
+
+ ce.style.position = f.positioning_type.value;
+ ce.style.visibility = f.positioning_visibility.value;
+
+ if (ce.style.width == "")
+ ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : "");
+
+ if (ce.style.height == "")
+ ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : "");
+
+ ce.style.zIndex = f.positioning_zindex.value;
+ ce.style.overflow = f.positioning_overflow.value;
+
+ if (!f.positioning_placement_same.checked) {
+ ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : "");
+ ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : "");
+ ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : "");
+ ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : "");
+ } else {
+ s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : "");
+ ce.style.top = s;
+ ce.style.right = s;
+ ce.style.bottom = s;
+ ce.style.left = s;
+ }
+
+ if (!f.positioning_clip_same.checked) {
+ s = "rect(";
+ s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " ";
+ s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " ";
+ s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " ";
+ s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto");
+ s += ")";
+
+ if (s != "rect(auto auto auto auto)")
+ ce.style.clip = s;
+ } else {
+ s = "rect(";
+ t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto";
+ s += t + " ";
+ s += t + " ";
+ s += t + " ";
+ s += t + ")";
+
+ if (s != "rect(auto auto auto auto)")
+ ce.style.clip = s;
+ }
+
+ ce.style.cssText = ce.style.cssText;
+}
+
+function isNum(s) {
+ return new RegExp('[0-9]+', 'g').test(s);
+}
+
+function showDisabledControls() {
+ var f = document.forms, i, a;
+
+ for (i=0; i<f.length; i++) {
+ for (a=0; a<f[i].elements.length; a++) {
+ if (f[i].elements[a].disabled)
+ tinyMCEPopup.editor.dom.addClass(f[i].elements[a], "disabled");
+ else
+ tinyMCEPopup.editor.dom.removeClass(f[i].elements[a], "disabled");
+ }
+ }
+}
+
+function fillSelect(f, s, param, dval, sep, em) {
+ var i, ar, p, se;
+
+ f = document.forms[f];
+ sep = typeof(sep) == "undefined" ? ";" : sep;
+
+ if (em)
+ addSelectValue(f, s, "", "");
+
+ ar = tinyMCEPopup.getParam(param, dval).split(sep);
+ for (i=0; i<ar.length; i++) {
+ se = false;
+
+ if (ar[i].charAt(0) == '+') {
+ ar[i] = ar[i].substring(1);
+ se = true;
+ }
+
+ p = ar[i].split('=');
+
+ if (p.length > 1) {
+ addSelectValue(f, s, p[0], p[1]);
+
+ if (se)
+ selectByValue(f, s, p[1]);
+ } else {
+ addSelectValue(f, s, p[0], p[0]);
+
+ if (se)
+ selectByValue(f, s, p[0]);
+ }
+ }
+}
+
+function toggleSame(ce, pre) {
+ var el = document.forms[0].elements, i;
+
+ if (ce.checked) {
+ el[pre + "_top"].disabled = false;
+ el[pre + "_right"].disabled = true;
+ el[pre + "_bottom"].disabled = true;
+ el[pre + "_left"].disabled = true;
+
+ if (el[pre + "_top_measurement"]) {
+ el[pre + "_top_measurement"].disabled = false;
+ el[pre + "_right_measurement"].disabled = true;
+ el[pre + "_bottom_measurement"].disabled = true;
+ el[pre + "_left_measurement"].disabled = true;
+ }
+ } else {
+ el[pre + "_top"].disabled = false;
+ el[pre + "_right"].disabled = false;
+ el[pre + "_bottom"].disabled = false;
+ el[pre + "_left"].disabled = false;
+
+ if (el[pre + "_top_measurement"]) {
+ el[pre + "_top_measurement"].disabled = false;
+ el[pre + "_right_measurement"].disabled = false;
+ el[pre + "_bottom_measurement"].disabled = false;
+ el[pre + "_left_measurement"].disabled = false;
+ }
+ }
+
+ showDisabledControls();
+}
+
+function synch(fr, to) {
+ var f = document.forms[0];
+
+ f.elements[to].value = f.elements[fr].value;
+
+ if (f.elements[fr + "_measurement"])
+ selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value);
+}
+
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ar_dlg.js
new file mode 100644
index 000000000..8621f097d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.style_dlg',{"text_lineheight":"\u0627\u0631\u062a\u0641\u0627\u0639 \u0627\u0644\u062e\u0637","text_variant":"\u0634\u0643\u0644 \u0645\u062e\u062a\u0644\u0641","text_style":"\u0633\u0645\u0647","text_weight":"\u0627\u0644\u0639\u0631\u0636","text_size":"\u062d\u062c\u0645","text_font":"\u062e\u0637","text_props":"\u0646\u0635","positioning_tab":"\u0648\u0636\u0639","list_tab":"\u0642\u0627\u0626\u0645\u0647","border_tab":"\u0627\u0637\u0627\u0631","box_tab":"\u0635\u0646\u062f\u0648\u0642","block_tab":"\u0628\u0644\u0648\u0643","background_tab":"\u062e\u0644\u0641\u064a\u0647","text_tab":"\u0646\u0635",apply:"\u0627\u062f\u0631\u0627\u062c",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"\u0627\u0644\u0628\u0639\u062f \u0627\u0644\u062b\u0627\u0644\u062b",visibility:"\u0627\u0644\u0638\u0647\u0648\u0631","positioning_type":"\u0646\u0648\u0639",position:"Position","bullet_image":"Bullet image","list_type":"\u0646\u0648\u0639",color:"\u0644\u0648\u0646",height:"\u0627\u0631\u062a\u0641\u0627\u0639",width:"\u0639\u0631\u0636",style:"\u0633\u0645\u0647",margin:"Margin",left:"\u064a\u0633\u0627\u0631",bottom:"\u0627\u0633\u0641\u0644",right:"\u064a\u0645\u064a\u0646",top:"\u0627\u0644\u0627\u0639\u0644\u0649",same:"\u0645\u062a\u0633\u0627\u0648\u0649 \u0644\u0644\u0643\u0644",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"\u0627\u0631\u062a\u0641\u0627\u0639","box_width":"\u0639\u0631\u0636","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"\u0645\u062d\u0627\u0632\u0627\u0647 \u0631\u0623\u0633\u064a\u0647","block_letterspacing":"\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u062d\u0631\u0648\u0641","block_wordspacing":"\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u0643\u0644\u0645\u0627\u062a","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"\u0645\u0631\u0641\u0642\u0627\u062a","background_repeat":"\u062a\u0643\u0631\u0627\u0631","background_image":"\u0635\u0648\u0631\u0629 \u0627\u0644\u062e\u0644\u0641\u064a\u0647","background_color":"\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0647","text_none":"\u0644\u0627 \u0634\u0626","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"\u062a\u062d\u062a\u0647 \u062e\u0637","text_overline":"\u0641\u0648\u0642\u0647 \u062e\u0637","text_decoration":"Decoration","text_color":"\u0644\u0648\u0646",text:"\u0646\u0635",background:"\u0627\u0644\u062e\u0644\u0641\u064a\u0629",block:"\u0628\u0644\u0648\u0643",box:"\u0635\u0646\u062f\u0648\u0642",border:"\u062d\u062f\u0648\u062f",list:"\u0642\u0627\u0626\u0645\u0629"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/az_dlg.js
new file mode 100644
index 000000000..81d8cdca5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.style_dlg',{"text_lineheight":"S\u0259tr h\u00fcnd\u00fcrl\u00fcy\u00fc","text_variant":"Variant","text_style":"Stil","text_weight":"\u00c7\u0259kisi","text_size":"\u00d6l\u00e7\u00fcs\u00fc","text_font":"\u015erift","text_props":"M\u0259tn","positioning_tab":"M\u00f6vqe","list_tab":"Siyah\u0131","border_tab":"S\u0259rh\u0259d","box_tab":"Konteyner","block_tab":"Blok","background_tab":"Fon","text_tab":"M\u0259tn",apply:"T\u0259tbiq et",title:"CSS stili redakt\u0259 et",clip:"K\u0259sm\u0259k",placement:"Yerl\u0259\u015fdirm\u0259",overflow:"Axma",zindex:"Z-indeks",visibility:"G\u00f6r\u00fcn\u00fc\u015f","positioning_type":"N\u00f6v",position:"M\u00f6vqe","bullet_image":"Marker \u015f\u0259kli","list_type":"N\u00f6v",color:"R\u0259ng",height:"H\u00fcnd\u00fcrl\u00fck",width:"En",style:"Stil",margin:"Sah\u0259l\u0259r",left:"Soldan",bottom:"A\u015fa\u011f\u0131dan",right:"Sa\u011fdan",top:"Yuxar\u0131dan",same:"Ham\u0131s\u0131 \u00fc\u00e7\u00fcn eyni",padding:"Doldurma","box_clear":"T\u0259mizl\u0259","box_float":"\u00dcz\u0259n","box_height":"Uzunlu\u011fu","box_width":"Eni","block_display":"N\u00fcmayis","block_whitespace":"Bo\u015fluq","block_text_indent":"M\u0259tn bo\u015flu\u011fu","block_text_align":"M\u0259tn tara\u015fla\u015fd\u0131r\u0131lmas\u0131","block_vertical_alignment":"\u015eaquli tarazla\u015fd\u0131r\u0131lma","block_letterspacing":"Simvol aras\u0131 bo\u015fluqlar","block_wordspacing":"S\u00f6zaras\u0131 bo\u015fluqlar","background_vpos":"\u015eaquli m\u00f6vqe","background_hpos":"\u00dcf\u00fcqi m\u00f6vqe","background_attachment":"B\u0259rkitm\u0259k","background_repeat":"T\u0259krar","background_image":"fon \u015f\u0259kli","background_color":"Fon r\u0259ngi","text_none":"he\u00e7 biri","text_blink":"Yan\u0131b-s\u00f6n\u0259n","text_case":"Registr","text_striketrough":"\u00fcst\u00fcnd\u0259n x\u0259tt","text_underline":"alt\u0131ndan x\u0259tt","text_overline":"\u00fcz\u0259rind\u0259n x\u0259tt","text_decoration":"B\u0259z\u0259k","text_color":"\u015e\u0259kil",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/be_dlg.js
new file mode 100644
index 000000000..b4c731595
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.style_dlg',{"text_lineheight":"\u0412\u044b\u0448\u044b\u043d\u044f \u0440\u0430\u0434\u043a\u0430","text_variant":"\u0412\u0430\u0440\u044b\u044f\u043d\u0442","text_style":"\u0421\u0442\u044b\u043b\u044c","text_weight":"\u0422\u0430\u045e\u0448\u0447\u044b\u043d\u044f","text_size":"\u041f\u0430\u043c\u0435\u0440","text_font":"\u0428\u0440\u044b\u0444\u0442","text_props":"\u0422\u044d\u043a\u0441\u0442","positioning_tab":"\u041f\u0430\u0437\u0456\u0446\u044b\u044f\u043d\u0430\u0432\u0430\u043d\u043d\u0435","list_tab":"\u0421\u043f\u0456\u0441","border_tab":"\u041c\u044f\u0436\u0430","box_tab":"\u041a\u0430\u043d\u0442\u044d\u0439\u043d\u0435\u0440","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0424\u043e\u043d","text_tab":"\u0422\u044d\u043a\u0441\u0442",apply:"\u0423\u0436\u044b\u0446\u044c",title:"\u0420\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u0442\u044b\u043b\u044c CSS",clip:"\u0410\u0431\u0440\u0430\u0437\u0430\u043d\u043d\u0435",placement:"\u0420\u0430\u0437\u043c\u044f\u0448\u0447\u044d\u043d\u043d\u0435",overflow:"\u041f\u0435\u0440\u0430\u043f\u0430\u045e\u043d\u0435\u043d\u043d\u0435",zindex:"Z-\u0430\u0437\u043d\u0430\u0447\u043d\u0456\u043a",visibility:"\u0411\u0430\u0447\u043d\u0430\u0441\u0446\u044c","positioning_type":"\u0422\u044b\u043f",position:"\u041f\u0430\u0437\u0456\u0446\u044b\u044f","bullet_image":"\u041c\u0430\u0440\u043a\u0435\u0440","list_type":"\u0422\u044b\u043f",color:"\u041a\u043e\u043b\u0435\u0440",height:"\u0412\u044b\u0448\u044b\u043d\u044f",width:"\u0428\u044b\u0440\u044b\u043d\u044f",style:"\u0421\u0442\u044b\u043b\u044c",margin:"\u0412\u043e\u0434\u0441\u0442\u0443\u043f",left:"\u0417\u043b\u0435\u0432\u0430",bottom:"\u0417\u043d\u0456\u0437\u0443",right:"\u0421\u043f\u0440\u0430\u0432\u0430",top:"\u0417\u0432\u0435\u0440\u0445\u0443",same:"\u0410\u0434\u043d\u043e\u043b\u044c\u043a\u0430\u0432\u0430 \u0434\u043b\u044f \u045e\u0441\u0456\u0445",padding:"\u041f\u0430\u043b\u0456","box_clear":"\u0410\u0447\u044b\u0441\u0446\u0456\u0446\u044c","box_float":"\u041f\u043b\u0430\u0432\u0430\u044e\u0447\u044b","box_height":"\u0412\u044b\u0448\u044b\u043d\u044f","box_width":"\u0428\u044b\u0440\u044b\u043d\u044f","block_display":"\u0410\u0434\u043b\u044e\u0441\u0442\u0440\u0430\u0432\u0430\u043d\u043d\u0435","block_whitespace":"\u041f\u0440\u0430\u0431\u0435\u043b","block_text_indent":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f \u0442\u044d\u043a\u0441\u0442\u0443","block_text_align":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435 \u0442\u044d\u043a\u0441\u0442\u0443","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u0430\u0435 \u0432\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435","block_letterspacing":"\u041f\u0440\u0430\u043c\u0435\u0436\u043a\u0456 \u043f\u0430\u043c\u0456\u0436 \u043b\u0456\u0442\u0430\u0440\u0430\u043c\u0456","block_wordspacing":"\u041f\u0440\u0430\u043c\u0435\u0436\u043a\u0456 \u043f\u0430\u043c\u0456\u0436 \u0441\u043b\u043e\u0432\u0430\u043c\u0456","background_vpos":"\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u0437\u0456\u0446\u044b\u044f","background_hpos":"\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u0437\u0456\u0446\u044b\u044f","background_attachment":"\u041f\u0440\u044b\u043c\u0430\u0446\u0430\u0432\u0430\u043d\u043d\u0435","background_repeat":"\u041f\u0430\u045e\u0442\u043e\u0440","background_image":"\u0424\u043e\u043d\u0430\u0432\u044b \u043c\u0430\u043b\u044e\u043d\u0430\u043a","background_color":"\u041a\u043e\u043b\u0435\u0440 \u0444\u043e\u043d\u0443","text_none":"\u0411\u0435\u0437 \u0443\u0441\u044f\u0433\u043e","text_blink":"\u041c\u0456\u0433\u0430\u0442\u043b\u0456\u0432\u044b","text_case":"\u0420\u044d\u0433\u0456\u0441\u0442\u0440","text_striketrough":"\u041f\u0435\u0440\u0430\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","text_underline":"\u041f\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","text_overline":"\u041d\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","text_decoration":"\u0410\u0444\u0430\u0440\u043c\u043b\u0435\u043d\u043d\u0435","text_color":"\u041a\u043e\u043b\u0435\u0440",text:"\u0422\u044d\u043a\u0441\u0442",background:"\u0424\u043e\u043d",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u0430\u043d\u0442\u044d\u0439\u043d\u0435\u0440",border:"\u041c\u044f\u0436\u0430",list:"\u0421\u043f\u0456\u0441"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bg_dlg.js
new file mode 100644
index 000000000..1be3bbab8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.style_dlg',{"text_lineheight":"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430 \u043d\u0430 \u0440\u0435\u0434\u0430","text_variant":"\u041f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432","text_style":"\u0421\u0442\u0438\u043b","text_weight":"\u0422\u0435\u0433\u043b\u043e","text_size":"\u0420\u0430\u0437\u043c\u0435\u0440","text_font":"\u0428\u0440\u0438\u0444\u0442","text_props":"\u0422\u0435\u043a\u0441\u0442","positioning_tab":"\u041f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0430\u043d\u0435","list_tab":"\u0421\u043f\u0438\u0441\u044a\u043a","border_tab":"\u0420\u0430\u043c\u043a\u0430","box_tab":"\u041a\u0443\u0442\u0438\u044f","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0424\u043e\u043d","text_tab":"\u0422\u0435\u043a\u0441\u0442",apply:"\u041f\u043e\u0442\u0432\u044a\u0440\u0434\u0438",title:"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 CSS \u0441\u0442\u0438\u043b",clip:"\u041e\u0442\u0440\u0435\u0436\u0438",placement:"\u0420\u0430\u0437\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435",overflow:"Overflow",zindex:"Z-\u0438\u043d\u0434\u0435\u043a\u0441",visibility:"\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442","positioning_type":"\u0422\u0438\u043f",position:"\u041f\u043e\u0437\u0438\u0446\u0438\u044f","bullet_image":"\u0413\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430 \u0432\u043e\u0434\u0430\u0447\u0438\u0442\u0435","list_type":"\u0422\u0438\u043f",color:"\u0426\u0432\u044f\u0442",height:"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",style:"\u0421\u0442\u0438\u043b",margin:"\u041e\u0442\u0441\u0442\u044a\u043f \u043e\u0442\u0432\u044a\u043d",left:"\u041b\u044f\u0432\u043e",bottom:"\u0414\u043e\u043b\u0443",right:"\u0414\u044f\u0441\u043d\u043e",top:"\u0413\u043e\u0440\u0435",same:"\u0417\u0430 \u0432\u0441\u0438\u0447\u043a\u0438",padding:"\u041e\u0442\u0441\u0442\u044a\u043f \u043d\u0430\u0432\u044a\u0442\u0440\u0435","box_clear":"\u0418\u0437\u0447\u0438\u0441\u0442\u0438","box_float":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","box_height":"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430","box_width":"\u0428\u0438\u0440\u0438\u043d\u0430","block_display":"\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435","block_whitespace":"\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b","block_text_indent":"\u041e\u0442\u0441\u0442\u044a\u043f \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430","block_text_align":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","block_letterspacing":"\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0431\u0443\u043a\u0432\u0438\u0442\u0435","block_wordspacing":"\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0434\u0443\u043c\u0438\u0442\u0435","background_vpos":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f","background_hpos":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f","background_attachment":"\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u0438","background_repeat":"\u041f\u043e\u0432\u0442\u043e\u0440\u0438","background_image":"\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0437\u0430 \u0444\u043e\u043d","background_color":"\u0426\u0432\u044f\u0442 \u0437\u0430 \u0444\u043e\u043d","text_none":"\u043d\u0438\u0449\u043e","text_blink":"\u043c\u0438\u0433\u0430","text_case":"\u0420\u0435\u0433\u0438\u0441\u0442\u044a\u0440","text_striketrough":"\u0437\u0430\u0447\u0435\u0440\u0442\u0430\u043d","text_underline":"\u043f\u043e\u0434\u0447\u0435\u0440\u0442\u0430\u043d","text_overline":"\u043d\u0430\u0434\u0447\u0435\u0440\u0442\u0430\u043d","text_decoration":"\u0414\u0435\u043a\u043e\u0440\u0430\u0446\u0438\u044f","text_color":"\u0426\u0432\u044f\u0442",text:"\u0422\u0435\u043a\u0441\u0442",background:"\u0424\u043e\u043d",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u0443\u0442\u0438\u044f",border:"\u0420\u0430\u043c\u043a\u0430",list:"\u0421\u043f\u0438\u0441\u044a\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bn_dlg.js
new file mode 100644
index 000000000..77db89017
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/br_dlg.js
new file mode 100644
index 000000000..c8cabcd28
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.style_dlg',{"text_lineheight":"Altura da linha","text_variant":"Variante","text_style":"Estilo","text_weight":"Peso","text_size":"Tamanho","text_font":"Fonte","text_props":"Texto","positioning_tab":"Posicionamento","list_tab":"Lista","border_tab":"Limites","box_tab":"Caixa","block_tab":"Bloco","background_tab":"Fundo","text_tab":"Texto",apply:"Aplicar",title:"Editar CSS",clip:"Clip",placement:"Posicionamento",overflow:"Overflow",zindex:"Z-index",visibility:"Visibilidade","positioning_type":"Tipo",position:"Posi\u00e7\u00e3o","bullet_image":"Imagem de lista","list_type":"Tipo",color:"Cor",height:"Altura",width:"Largura",style:"Estilo",margin:"Margem",left:"Esquerda",bottom:"Abaixo",right:"Direita",top:"Topo",same:"O mesmo para todos",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Altura","box_width":"Largura","block_display":"Display","block_whitespace":"Espa\u00e7o","block_text_indent":"Indent","block_text_align":"Alinhamento de texto","block_vertical_alignment":"Alinhamento vertical","block_letterspacing":"Espa\u00e7amento de letras","block_wordspacing":"Espa\u00e7amento de palavras","background_vpos":"Posi\u00e7\u00e3o vertical","background_hpos":"Posi\u00e7\u00e3o horizontal","background_attachment":"Fixar","background_repeat":"Repetir","background_image":"Imagem de fundo","background_color":"Cor de fundo","text_none":"nenhum","text_blink":"Piscar","text_case":"Mai\u00fascula/min\u00fascula","text_striketrough":"Riscado","text_underline":"Sublinhado","text_overline":"Sobrelinha","text_decoration":"Decora\u00e7\u00e3o","text_color":"Cor",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bs_dlg.js
new file mode 100644
index 000000000..56bd50590
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ca_dlg.js
new file mode 100644
index 000000000..466109a0f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.style_dlg',{"text_lineheight":"Al\u00e7ada de l\u00ednia","text_variant":"Variant","text_style":"Estil","text_weight":"Pes","text_size":"Mida","text_font":"Font","text_props":"Text","positioning_tab":"Posicionament","list_tab":"Llista","border_tab":"Contorn","box_tab":"Quadre","block_tab":"Bloc","background_tab":"Fons","text_tab":"Text",apply:"Aplica",title:"Edita l\'estil CSS",clip:"Retall",placement:"Empla\u00e7ament",overflow:"Desbordament",zindex:"\u00cdndex Z",visibility:"Visibilitat","positioning_type":"Tipus",position:"Posici\u00f3","bullet_image":"Imatge pic","list_type":"Tipus",color:"Color",height:"Al\u00e7ada",width:"Amplada",style:"Estil",margin:"Marge",left:"Esquerra",bottom:"Avall",right:"Dreta",top:"Dalt",same:"Igual per a tot",padding:"Separaci\u00f3","box_clear":"Buida","box_float":"Flota","box_height":"Al\u00e7ada","box_width":"Amplada","block_display":"Visualitzaci\u00f3","block_whitespace":"Espai en blanc","block_text_indent":"Sagna el text","block_text_align":"Alinea el text","block_vertical_alignment":"Alineaci\u00f3 vertical","block_letterspacing":"Espaiat entre lletres","block_wordspacing":"Espaiat entre paraules","background_vpos":"Posici\u00f3 vertical","background_hpos":"Posici\u00f3 horitzontal","background_attachment":"Adjunt","background_repeat":"Repeteix","background_image":"Imatge de fons","background_color":"Color de fons","text_none":"cap","text_blink":"parpelleig","text_case":"Cas","text_striketrough":"barrat","text_underline":"subratllat","text_overline":"sobreratllat","text_decoration":"Decoraci\u00f3","text_color":"Color",text:"Text",background:"Fons",block:"Bloc",box:"Caixa",border:"Contorn",list:"Llista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ch_dlg.js
new file mode 100644
index 000000000..b2bfe0b79
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u53d8\u91cf","text_style":"\u6837\u5f0f","text_weight":"\u5b57\u91cd","text_size":"\u6587\u5b57\u5927\u5c0f","text_font":"\u5b57\u4f53","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u65b9\u5757","block_tab":"\u533a\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5957\u7528",title:"\u7f16\u8f91 CSS \u6837\u5f0f\u8868",clip:"\u526a\u8f91",placement:"\u653e\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z-\u5750\u6807",visibility:"\u53ef\u89c1","positioning_type":"\u7c7b\u578b",position:"\u4f4d\u7f6e","bullet_image":"\u56fe\u7247\u9879\u76ee\u7b26\u53f7","list_type":"\u7c7b\u8868\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8",width:"\u5bbd",style:"\u6837\u5f0f",margin:"\u5916\u8fb9\u8ddd",left:"\u5de6\u4fa7",bottom:"\u9760\u4e0b",right:"\u53f3\u4fa7",top:"\u5b9a\u90e8",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5185\u8fb9\u8ddd","box_clear":"\u6e05\u9664\u6d6e\u52a8","box_float":"\u6d6e\u52a8","box_height":"\u9ad8","box_width":"\u5bbd","block_display":"\u663e\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7f29\u6392","block_text_align":"\u6587\u5b57\u5bf9\u9f50","block_vertical_alignment":"\u5782\u76f4\u5bf9\u9f50","block_letterspacing":"\u5b57\u6bcd\u95f4\u8ddd","block_wordspacing":"\u95f4\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u578b","text_striketrough":"\u5220\u9664\u7ebf","text_underline":"\u5e95\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u88c5\u9970","text_color":"\u989c\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cn_dlg.js
new file mode 100644
index 000000000..b5bebff98
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u6587\u672c\u53d8\u91cf\uff08\u4e2d\u6587\u65e0\u6548\uff09","text_style":"\u6837\u5f0f","text_weight":"\u9ad8\u5ea6","text_size":"\u5b57\u4f53\u5927\u5c0f","text_font":"\u5b57\u4f53","text_props":"\u6587\u672c","positioning_tab":"\u653e\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u65b9\u5757","block_tab":"\u533a\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u672c",apply:"\u5e94\u7528",title:"\u7f16\u8f91CSS\u6837\u5f0f",clip:"\u526a\u8f91",placement:"\u653e\u7f6e",overflow:"\u6ea2\u51fa",zindex:"\u5143\u7d20\u5806\u53e0\u987a\u5e8f\uff08Z-index)",visibility:"\u53ef\u89c1","positioning_type":"\u7c7b\u578b",position:"\u4f4d\u7f6e","bullet_image":"\u56fe\u7247\u9879\u76ee\u7b26\u53f7","list_type":"\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",style:"\u6837\u5f0f",margin:"\u5916\u8fb9\u6846",left:"\u5de6\u4fa7",bottom:"\u5e95\u90e8",right:"\u53f3\u4fa7",top:"\u9876\u90e8",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5185\u8fb9\u6846","box_clear":"\u6e05\u9664\u6d6e\u52a8","box_float":"\u6d6e\u52a8","box_height":"\u9ad8\u5ea6","box_width":"\u5bbd\u5ea6","block_display":"\u663e\u793a\u65b9\u5f0f","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u672c\u7f29\u8fdb","block_text_align":"\u6587\u672c\u5bf9\u9f50\u65b9\u5f0f","block_vertical_alignment":"\u5782\u76f4\u5bf9\u9f50","block_letterspacing":"\u5b57\u6bcd\u95f4\u8ddd","block_wordspacing":"\u95f4\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u578b","text_striketrough":"\u5220\u9664\u7ebf","text_underline":"\u4e0b\u5212\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u88c5\u9970","text_color":"\u989c\u8272",text:"\u6587\u672c",background:"\u80cc\u666f",block:"\u533a\u5757",box:"\u76d2\u6a21\u5f0f",border:"\u8fb9\u6846",list:"\u5217\u8868"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cs_dlg.js
new file mode 100644
index 000000000..8e6dc60cc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.style_dlg',{"text_lineheight":"V\u00fd\u0161ka \u0159\u00e1dku","text_variant":"Varianta","text_style":"Styl textu","text_weight":"Tu\u010dnost p\u00edsma","text_size":"Velikost","text_font":"P\u00edsmo","text_props":"Text","positioning_tab":"Um\u00edst\u011bn\u00ed","list_tab":"Seznam","border_tab":"Ohrani\u010den\u00ed","box_tab":"Box","block_tab":"Blok","background_tab":"Pozad\u00ed","text_tab":"Text",apply:"Pou\u017e\u00edt",title:"Upravit CSS styl",clip:"O\u0159ez\u00e1n\u00ed (clip)",placement:"Um\u00edst\u011bni",overflow:"P\u0159ete\u010den\u00ed (overflow)",zindex:"Z-index",visibility:"Viditelnost","positioning_type":"Typ",position:"Um\u00edst\u011bn\u00ed","bullet_image":"Styl odr\u00e1\u017eek","list_type":"Typ",color:"Barva",height:"V\u00fd\u0161ka",width:"\u0160\u00ed\u0159ka",style:"Styl",margin:"Okraje (margin)",left:"Vlevo",bottom:"Dole",right:"Vpravo",top:"Naho\u0159e",same:"Stejn\u00e9 pro v\u0161echny",padding:"Odsazen\u00ed (padding)","box_clear":"Vy\u010distit","box_float":"Plovouc\u00ed","box_height":"V\u00fd\u0161ka","box_width":"\u0160\u00ed\u0159ka","block_display":"Blokov\u00e9 zobrazen\u00ed","block_whitespace":"Zalamov\u00e1n\u00ed textu","block_text_indent":"Odsazen\u00ed textu","block_text_align":"Zarovn\u00e1n\u00ed textu","block_vertical_alignment":"Vertik\u00e1ln\u00ed zarovn\u00e1n\u00ed","block_letterspacing":"Rozestup znak\u016f","block_wordspacing":"Rozestup slov","background_vpos":"Vertik\u00e1ln\u00ed um\u00edst\u011bn\u00ed","background_hpos":"Horizont\u00e1ln\u00ed um\u00edst\u011bn\u00ed","background_attachment":"Rolov\u00e1n\u00ed","background_repeat":"Opakov\u00e1n\u00ed","background_image":"Obr\u00e1zek pozad\u00ed","background_color":"Barva pozad\u00ed","text_none":"\u017d\u00e1dn\u00e1","text_blink":"Blik\u00e1n\u00ed","text_case":"Velk\u00e1 p\u00edsmena","text_striketrough":"P\u0159e\u0161krtnut\u00ed","text_underline":"Podtr\u017een\u00ed","text_overline":"Nadtr\u017een\u00ed","text_decoration":"Dekorace","text_color":"Barva",text:"Text",background:"Pozad\u00ed",block:"Blok",box:"Box",border:"Okraj",list:"Seznam"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cy_dlg.js
new file mode 100644
index 000000000..3b5515510
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.style_dlg',{"text_lineheight":"Uchder Llinell","text_variant":"Amrywiad","text_style":"Arddull","text_weight":"Pwysau","text_size":"Maint","text_font":"Ffont","text_props":"Testun","positioning_tab":"Lleoli","list_tab":"Rhestr","border_tab":"Border","box_tab":"Blwch","block_tab":"Bloc","background_tab":"Cefndir","text_tab":"Testun",apply:"Gosod",title:"Golygu Arddull CSS",clip:"Clip",placement:"Gosodiad",overflow:"Gorlif",zindex:"Indecs-Z",visibility:"Gwelededd","positioning_type":"Math",position:"Lleoliad","bullet_image":"Delwedd bwled","list_type":"Math",color:"Lliw",height:"Uchder",width:"Lled",style:"Arddull",margin:"Ymyl",left:"Chwith",bottom:"Gwaelod",right:"De",top:"Pen",same:"Yr un ar gyfer pob un",padding:"Padio","box_clear":"Clirio","box_float":"Arnofio","box_height":"Uchder","box_width":"Lled","block_display":"Arddangos","block_whitespace":"Whitespace","block_text_indent":"Mewnoliad testun","block_text_align":"Aliniad testun","block_vertical_alignment":"Aliniad fertigol","block_letterspacing":"Bylchiad llythyren","block_wordspacing":"Bylchiad gair","background_vpos":"Lleoliad fertigol","background_hpos":"Lleoliad llorweddol","background_attachment":"Atodiad","background_repeat":"Ailadrodd","background_image":"Delwedd cefndir","background_color":"Lliw cefndir","text_none":"Dim un","text_blink":"Blincio","text_case":"Llythrennau bach/mawr","text_striketrough":"Taro drwodd","text_underline":"Tanlinellu","text_overline":"Uwchlinellu","text_decoration":"Addurniadau","text_color":"Lliw",text:"Testun",background:"Cefndir",block:"Bloc",box:"Blwch",border:"Border",list:"Rhestr"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/da_dlg.js
new file mode 100644
index 000000000..733249f1d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.style_dlg',{"text_lineheight":"Linieh\u00f8jde","text_variant":"Variant","text_style":"Stil","text_weight":"V\u00e6gt","text_size":"St\u00f8rrelse","text_font":"Skrifttype","text_props":"Tekst","positioning_tab":"Positionering","list_tab":"Liste","border_tab":"Kant","box_tab":"Boks","block_tab":"Blok","background_tab":"Baggrund","text_tab":"Tekst",apply:"Anvend",title:"Rediger CSS stil",clip:"Klip",placement:"Placering",overflow:"Overl\u00f8b",zindex:"Z-index",visibility:"Synlighed","positioning_type":"Type",position:"Position","bullet_image":"Punktopstillings-billede","list_type":"Type",color:"Farve",height:"H\u00f8jde",width:"Bredde",style:"Style",margin:"Margin",left:"Venstre",bottom:"Bund",right:"H\u00f8jre",top:"Top",same:"Ens for alle",padding:"Afstand til indhold","box_clear":"Ryd","box_float":"Flydende","box_height":"H\u00f8jde","box_width":"Bredde","block_display":"Vis","block_whitespace":"Mellemrum","block_text_indent":"Tekstindrykning","block_text_align":"Tekstjustering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Afstand mellem bogstaver","block_wordspacing":"Afstand mellem ord","background_vpos":"Vertikal position","background_hpos":"Horisontal position","background_attachment":"Vedh\u00e6ftede fil","background_repeat":"Gentag","background_image":"Baggrundsbillede","background_color":"Baggrundsfarve","text_none":"ingen","text_blink":"blink","text_case":"Vesaltilstand","text_striketrough":"gennemstreget","text_underline":"understreget","text_overline":"overstreget","text_decoration":"Dekoration","text_color":"Farve",text:"Tekst",background:"Baggrund",block:"Blok",box:"Boks",border:"Kant",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/de_dlg.js
new file mode 100644
index 000000000..ad04664e1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.style_dlg',{"text_lineheight":"Zeilenh\u00f6he","text_variant":"Variante","text_style":"Stil","text_weight":"Dicke","text_size":"Gr\u00f6\u00dfe","text_font":"Schriftart","text_props":"Text","positioning_tab":"Positionierung","list_tab":"Liste","border_tab":"Rahmen","box_tab":"Box","block_tab":"Block","background_tab":"Hintergrund","text_tab":"Text",apply:"\u00dcbernehmen",title:"CSS-Styles bearbeiten",clip:"Ausschnitt",placement:"Platzierung",overflow:"Verhalten bei \u00dcbergr\u00f6\u00dfe",zindex:"Z-Wert",visibility:"Sichtbar","positioning_type":"Art der Positionierung",position:"Positionierung","bullet_image":"Listenpunkt-Grafik","list_type":"Listenpunkt-Art",color:"Textfarbe",height:"H\u00f6he",width:"Breite",style:"Format",margin:"\u00c4u\u00dferer Abstand",left:"Links",bottom:"Unten",right:"Rechts",top:"Oben",same:"Alle gleich",padding:"Innerer Abstand","box_clear":"Umflie\u00dfung verhindern","box_float":"Umflie\u00dfung","box_height":"H\u00f6he","box_width":"Breite","block_display":"Umbruchverhalten","block_whitespace":"Automatischer Umbruch","block_text_indent":"Einr\u00fcckung","block_text_align":"Ausrichtung","block_vertical_alignment":"Vertikale Ausrichtung","block_letterspacing":"Buchstabenabstand","block_wordspacing":"Wortabstand","background_vpos":"Position Y","background_hpos":"Position X","background_attachment":"Wasserzeicheneffekt","background_repeat":"Wiederholung","background_image":"Hintergrundbild","background_color":"Hintergrundfarbe","text_none":"keine","text_blink":"blinkend","text_case":"Schreibung","text_striketrough":"durchgestrichen","text_underline":"unterstrichen","text_overline":"\u00fcberstrichen","text_decoration":"Gestaltung","text_color":"Farbe",text:"Text",background:"Hintergrund",block:"Block",box:"Box",border:"Rahmen",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/dv_dlg.js
new file mode 100644
index 000000000..34ef37fb1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/el_dlg.js
new file mode 100644
index 000000000..8ae651b6e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.style_dlg',{"text_lineheight":"\u038e\u03c8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","text_variant":"\u03a0\u03b1\u03c1\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae","text_style":"\u03a3\u03c4\u03c5\u03bb","text_weight":"\u0392\u03ac\u03c1\u03bf\u03c2","text_size":"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd","text_font":"\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac","text_props":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf","positioning_tab":"\u03a4\u03bf\u03c0\u03bf\u03b8\u03ad\u03c4\u03b7\u03c3\u03b7","list_tab":"\u039b\u03af\u03c3\u03c4\u03b1","border_tab":"\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf","box_tab":"\u039a\u03bf\u03c5\u03c4\u03af","block_tab":"\u039c\u03c0\u03bb\u03bf\u03ba","background_tab":"\u03a6\u03cc\u03bd\u03c4\u03bf","text_tab":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf",apply:"\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae",title:"\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03a3\u03c4\u03c5\u03bb CSS",clip:"Clip",placement:"\u03a4\u03bf\u03c0\u03bf\u03b8\u03ad\u03c4\u03b7\u03c3\u03b7",overflow:"\u03a5\u03c0\u03b5\u03c1\u03c7\u03b5\u03af\u03bb\u03b9\u03c3\u03b7",zindex:"Z-index",visibility:"\u039f\u03c1\u03b1\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1","positioning_type":"\u03a4\u03cd\u03c0\u03bf\u03c2",position:"\u0398\u03ad\u03c3\u03b7","bullet_image":"\u0395\u03b9\u03ba\u03cc\u03bd\u03b1 \u03c4\u03b5\u03bb\u03b5\u03af\u03b1\u03c2","list_type":"\u03a4\u03cd\u03c0\u03bf\u03c2",color:"\u03a7\u03c1\u03ce\u03bc\u03b1",height:"\u038e\u03c8\u03bf\u03c2",width:"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",style:"\u03a3\u03c4\u03c5\u03bb",margin:"\u03a0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03bf",left:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",bottom:"\u039a\u03ac\u03c4\u03c9",right:"\u0394\u03b5\u03be\u03b9\u03ac",top:"\u03a0\u03ac\u03bd\u03c9",same:"\u038a\u03b4\u03b9\u03bf \u03b3\u03b9\u03b1 \u03cc\u03bb\u03b1",padding:"\u0393\u03ad\u03bc\u03b9\u03c3\u03bc\u03b1","box_clear":"Clear","box_float":"Float","box_height":"\u038e\u03c8\u03bf\u03c2","box_width":"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2","block_display":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7","block_whitespace":"\u039a\u03b5\u03bd\u03cc\u03c2 \u03c7\u03ce\u03c1\u03bf\u03c2","block_text_indent":"\u0395\u03c3\u03bf\u03c7\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","block_text_align":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","block_vertical_alignment":"\u039a\u03b1\u03c4\u03b1\u03ba\u03cc\u03c1\u03c5\u03c6\u03b7 \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7","block_letterspacing":"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd","block_wordspacing":"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bb\u03ad\u03be\u03b5\u03c9\u03bd","background_vpos":"\u039a\u03b1\u03c4\u03b1\u03ba\u03cc\u03c1\u03c5\u03c6\u03b7 \u03b8\u03ad\u03c3\u03b7","background_hpos":"\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b8\u03ad\u03c3\u03b7","background_attachment":"\u03a0\u03c1\u03bf\u03c3\u03ac\u03c1\u03c4\u03b7\u03bc\u03b1","background_repeat":"\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7","background_image":"\u0395\u03b9\u03ba\u03cc\u03bd\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5","background_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5","text_none":"\u039a\u03b1\u03bc\u03af\u03b1","text_blink":"\u039d\u03b1 \u03b1\u03bd\u03b1\u03b2\u03bf\u03c3\u03b2\u03ae\u03bd\u03b5\u03b9","text_case":"\u039a\u03b5\u03c6./\u039c\u03b9\u03ba\u03c1\u03ac","text_striketrough":"\u0394\u03b9\u03b1\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7","text_underline":"\u03a5\u03c0\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7","text_overline":"\u03a5\u03c0\u03b5\u03c1\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7","text_decoration":"\u0394\u03b9\u03b1\u03ba\u03cc\u03c3\u03bc\u03b7\u03c3\u03b7","text_color":"\u03a7\u03c1\u03ce\u03bc\u03b1",text:"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf",background:"\u03a6\u03cc\u03bd\u03c4\u03bf",border:"\u03a0\u03b5\u03c1\u03af\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1",list:"\u039b\u03af\u03c3\u03c4\u03b1",block:"Block",box:"Box"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js
new file mode 100644
index 000000000..9a1d4a223
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.style_dlg',{"text_lineheight":"Line Height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet Image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for All",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text Indent","block_text_align":"Text Align","block_vertical_alignment":"Vertical Alignment","block_letterspacing":"Letter Spacing","block_wordspacing":"Word Spacing","background_vpos":"Vertical Position","background_hpos":"Horizontal Position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background Image","background_color":"Background Color","text_none":"None","text_blink":"Blink","text_case":"Case","text_striketrough":"Strikethrough","text_underline":"Underline","text_overline":"Overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/eo_dlg.js
new file mode 100644
index 000000000..29822e8f1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.style_dlg',{"text_lineheight":"Alteco de linio","text_variant":"Varianto","text_style":"Stilo","text_weight":"Pezo","text_size":"Grandeco","text_font":"Tiparo","text_props":"Teksto","positioning_tab":"Pozicio","list_tab":"Listo","border_tab":"Bordero","box_tab":"Skatolo","block_tab":"Bloko","background_tab":"Fono","text_tab":"Teksto",apply:"Apliki",title:"Redakti CSS",clip:"Tondi",placement:"Pozicio",overflow:"Elfluo",zindex:"Z-indekso",visibility:"Videbleco","positioning_type":"Pozicitipo",position:"Pozicio","bullet_image":"Listbildo","list_type":"Tipo",color:"Koloro",height:"Alteco",width:"Lar\u011deco",style:"Stilo",margin:"Mar\u011deno",left:"Maldekstre",bottom:"Sube",right:"Dekstre",top:"Supre",same:"Same por \u0109iuj",padding:"Ena kromspaco","box_clear":"Kvitigi","box_float":"Flosado","box_height":"Alteco","box_width":"Lar\u011deco","block_display":"Montro","block_whitespace":"Spaco","block_text_indent":"Alineo","block_text_align":"Tekstoliniigo","block_vertical_alignment":"Vertikala liniigo","block_letterspacing":"Spaco inter literoj","block_wordspacing":"Spaco inter vortoj","background_vpos":"Vertikala pozicio","background_hpos":"Horizontala pozicio","background_attachment":"Fiksi","background_repeat":"Ripeti","background_image":"Fona bildo","background_color":"Fona koloro","text_none":"Neniu","text_blink":"Lumpulsi","text_case":"Majuskle","text_striketrough":"Strekite","text_underline":"Substrekite","text_overline":"Superstrekite","text_decoration":"Ornamado","text_color":"Koloro",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/es_dlg.js
new file mode 100644
index 000000000..7a63754a7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.style_dlg',{"text_lineheight":"Ancho de la fila","text_variant":"Variante","text_style":"Estilo","text_weight":"Peso","text_size":"Tama\u00f1o","text_font":"Fuente","text_props":"Texto","positioning_tab":"Posicionamiento","list_tab":"Lista","border_tab":"Borde","box_tab":"Caja","block_tab":"Bloque","background_tab":"Fondo","text_tab":"Texto",apply:"Aplicar",title:"Editar Estilo CSS",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibilidad","positioning_type":"Tipo",position:"Posici\u00f3n","bullet_image":"Imagen de la vi\u00f1eta","list_type":"Tipo",color:"Color",height:"Alto",width:"Ancho",style:"Estilo",margin:"Margen",left:"Izquierda",bottom:"Inferior",right:"Derecha",top:"Superior",same:"Lo mismo en todos",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Alto","box_width":"Ancho","block_display":"Display","block_whitespace":"Espacio en blanco","block_text_indent":"Sangr\u00eda","block_text_align":"Alineaci\u00f3n del texto","block_vertical_alignment":"Alineaci\u00f3n vertical","block_letterspacing":"Espacio entre letra","block_wordspacing":"Espacio entre palabra","background_vpos":"Posici\u00f3n vertical","background_hpos":"Posici\u00f3n horizontal","background_attachment":"Adjunto","background_repeat":"Repetici\u00f3n","background_image":"Imagen de fondo","background_color":"Color de fondo","text_none":"Ninguno","text_blink":"Parpadeo","text_case":"Min\u00fas./May\u00fas.","text_striketrough":"Tachado","text_underline":"Subrayado","text_overline":"Subrayado superior","text_decoration":"Decorativos","text_color":"Color",text:"Texto",background:"Fondo",block:"Bloque",box:"Caja",border:"Borde",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/et_dlg.js
new file mode 100644
index 000000000..89de41d8f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.style_dlg',{"text_lineheight":"Joone k\u00f5rgus","text_variant":"Variant","text_style":"Stiil","text_weight":"Raskus","text_size":"Suurus","text_font":"Font","text_props":"Tekst","positioning_tab":"Positsioneerimine","list_tab":"Nimekiri","border_tab":"Raam","box_tab":"Kast","block_tab":"Plokk","background_tab":"Taust","text_tab":"Tekst",apply:"Rakenda",title:"Muuda CSS stiili",clip:"Klipp",placement:"Asetus",overflow:"\u00dclevool",zindex:"Z-viit",visibility:"N\u00e4htavus","positioning_type":"T\u00fc\u00fcp",position:"Positsioon","bullet_image":"Punkt pilt","list_type":"T\u00fc\u00fcp",color:"V\u00e4rv",height:"K\u00f5rgus",width:"Laius",style:"Stiil",margin:"Serv",left:"Vasakul",bottom:"All",right:"Paremal",top:"\u00dcleval",same:"Sama k\u00f5igile",padding:"T\u00e4idis","box_clear":"Puhas","box_float":"H\u00f5ljuv","box_height":"K\u00f5rgus","box_width":"Laius","block_display":"Kuva","block_whitespace":"T\u00fchimik","block_text_indent":"Teksti taandus","block_text_align":"Teksti joondus","block_vertical_alignment":"Vertikaalne joondus","block_letterspacing":"T\u00e4he avardamine","block_wordspacing":"S\u00f5nade avardamine","background_vpos":"Vertikaalne asend","background_hpos":"Horisontaalne asend","background_attachment":"Manus","background_repeat":"Kordus","background_image":"Tausta pilt","background_color":"Tausta v\u00e4rv","text_none":"mitte \u00fckski","text_blink":"vilgutus","text_case":"Kast","text_striketrough":"l\u00e4bikriipsutus","text_underline":"alajoon","text_overline":"\u00fclejoon","text_decoration":"Dekoratioon","text_color":"V\u00e4rv",text:"Tekst",background:"Taust",block:"Plokk",box:"Kast",border:"Joon",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/eu_dlg.js
new file mode 100644
index 000000000..961e98a13
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.style_dlg',{"text_lineheight":"Lerro garaiera","text_variant":"Aldaera","text_style":"Estiloa","text_weight":"Pisua","text_size":"Tamaina","text_font":"Letra-tipoa","text_props":"Testua","positioning_tab":"Kokapena","list_tab":"Zerrenda","border_tab":"Ertza","box_tab":"Kaxa","block_tab":"Blokea","background_tab":"Atzea","text_tab":"Testua",apply:"Apikatu",title:"Aldatu CSS estiloa",clip:"Klip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Ikusgarritasuna","positioning_type":"Mota",position:"Kokapena","bullet_image":"Bulet-irudia","list_type":"Mota",color:"Kolorea",height:"Altuera",width:"Zabalera",style:"Estiloa",margin:"Margina",left:"Ezkerra",bottom:"Behera",right:"Eskuina",top:"Gora",same:"Guztientzat berdina",padding:"Padding","box_clear":"Garbitu","box_float":"Flotatu","box_height":"Altuera","box_width":"Zabalera","block_display":"Erakutsi","block_whitespace":"Zuriunea","block_text_indent":"Koska","block_text_align":"Testu lerrokatzea","block_vertical_alignment":"Lerrokatze bertikala","block_letterspacing":"Letra banaketa","block_wordspacing":"Hitz banaketa","background_vpos":"Posizio bertikala","background_hpos":"Posizio horizontala","background_attachment":"Eranskina","background_repeat":"Errepikatu","background_image":"Atzeko irudia","background_color":"Atzeko kolorea","text_none":"Bat ere ez","text_blink":"Keinada","text_case":"Minus./Maius.","text_striketrough":"Marratua","text_underline":"Azpimarra","text_overline":"Goimarra","text_decoration":"Apaingarriak","text_color":"Kolorea",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fa_dlg.js
new file mode 100644
index 000000000..d00a708b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.style_dlg',{"text_lineheight":"\u0628\u0644\u0646\u062f\u06cc \u062e\u0637","text_variant":"\u0646\u0648\u0639 \u062a\u063a\u06cc\u06cc\u0631","text_style":"\u0627\u0633\u062a\u0627\u06cc\u0644","text_weight":"\u062d\u0627\u0644\u062a","text_size":"\u0627\u0646\u062f\u0627\u0632\u0647","text_font":"\u0642\u0644\u0645","text_props":"\u0645\u062a\u0646","positioning_tab":"\u0645\u0648\u0642\u0639\u06cc\u062a","list_tab":"\u0644\u06cc\u0633\u062a","border_tab":"\u062d\u0627\u0634\u06cc\u0647","box_tab":"\u062c\u0639\u0628\u0647","block_tab":"\u0628\u0644\u0648\u06a9","background_tab":"\u067e\u0633 \u0632\u0645\u06cc\u0646\u0647","text_tab":"\u0645\u062a\u0646",apply:"\u0628\u06a9\u0627\u0631\u06af\u06cc\u0631\u06cc",title:"\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0633\u062a\u0627\u06cc\u0644 CSS",clip:"\u0628\u0631\u0634 (Clip)",placement:"\u0645\u0648\u0642\u0639\u06cc\u062a \u0645\u06a9\u0627\u0646\u06cc",overflow:"\u0633\u0631 \u0631\u06cc\u0632",zindex:"\u0645\u062d\u0648\u0631 Z",visibility:"\u0642\u0627\u0628\u0644\u06cc\u062a \u0631\u0648\u06cc\u062a","positioning_type":"\u0646\u0648\u0639",position:"\u0645\u0648\u0642\u0639\u06cc\u062a","bullet_image":"\u062a\u0635\u0648\u06cc\u0631 \u06af\u0644\u0648\u0644\u0647","list_type":"\u0646\u0648\u0639",color:"\u0631\u0646\u06af",height:"\u0627\u0631\u062a\u0641\u0627\u0639",width:"\u067e\u0647\u0646\u0627",style:"\u0627\u0633\u062a\u0627\u06cc\u0644",margin:"\u0644\u0628\u0647",left:"\u0686\u067e",bottom:"\u067e\u0627\u06cc\u06cc\u0646",right:"\u0631\u0627\u0633\u062a",top:"\u0628\u0627\u0644\u0627",same:"\u0647\u0645\u0633\u0627\u0646 \u0628\u0631\u0627\u06cc \u0647\u0645\u0647",padding:"\u0644\u0627\u06cc\u0647 \u06af\u0630\u0627\u0631\u06cc","box_clear":"\u067e\u0627\u06a9 \u0633\u0627\u0632\u06cc","box_float":"\u0634\u0646\u0627\u0648\u0631","box_height":"\u0627\u0631\u062a\u0641\u0627\u0639","box_width":"\u067e\u0647\u0646\u0627","block_display":"\u0646\u0645\u0627\u06cc\u0634","block_whitespace":"\u0641\u0627\u0635\u0644\u0647 \u0633\u0641\u06cc\u062f","block_text_indent":"\u062a\u0648\u0631\u0641\u062a\u06af\u06cc \u0645\u062a\u0646","block_text_align":"\u062a\u0631\u0627\u0632 \u0645\u062a\u0646","block_vertical_alignment":"\u062a\u0631\u0627\u0632 \u0639\u0645\u0648\u062f\u06cc","block_letterspacing":"\u0641\u0627\u0635\u0644\u0647 \u062d\u0631\u0648\u0641","block_wordspacing":"\u0641\u0627\u0635\u0644\u0647 \u06a9\u0644\u0645\u0627\u062a","background_vpos":"\u0645\u0648\u0642\u0639\u06cc\u062a \u0639\u0645\u0648\u062f\u06cc","background_hpos":"\u0645\u0648\u0642\u0639\u06cc\u062a \u0627\u0641\u0642\u06cc","background_attachment":"\u0641\u0627\u06cc\u0644 \u0636\u0645\u06cc\u0645\u0647","background_repeat":"\u062a\u06a9\u0631\u0627\u0631","background_image":"\u062a\u0635\u0648\u06cc\u0631 \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647","background_color":"\u0631\u0646\u06af \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647","text_none":"\u0647\u06cc\u0686 \u06a9\u062f\u0627\u0645","text_blink":"\u0686\u0634\u0645\u06a9 \u0632\u0646","text_case":"\u062d\u0627\u0644\u062a","text_striketrough":"\u062e\u0637 \u062e\u0648\u0631\u062f\u0647","text_underline":"\u0632\u06cc\u0631 \u062e\u0637","text_overline":"\u0628\u0627\u0644\u0627 \u062e\u0637","text_decoration":"\u0622\u0631\u0627\u06cc\u0634","text_color":"\u0631\u0646\u06af",text:"\u0645\u062a\u0646",background:"\u067e\u0633 \u0632\u0645\u06cc\u0646\u0647",block:"\u0628\u0644\u0648\u06a9",box:"\u062c\u0639\u0628\u0647",border:"\u062d\u0627\u0634\u06cc\u0647",list:"\u0644\u06cc\u0633\u062a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fi_dlg.js
new file mode 100644
index 000000000..4f174cc71
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.style_dlg',{"text_lineheight":"Rivin korkeus","text_variant":"Variantti","text_style":"Tyyli","text_weight":"Paino","text_size":"Koko","text_font":"Kirjasin","text_props":"Teksti","positioning_tab":"Sijainti","list_tab":"Lista","border_tab":"Kehys","box_tab":"Laatikko","block_tab":"Palkki","background_tab":"Tausta","text_tab":"Teksti",apply:"K\u00e4yt\u00e4",title:"Muokkaa CSS-tyyli\u00e4",clip:"Leike",placement:"Sijoittelu",overflow:"Ylivuoto",zindex:"Z-indeksi",visibility:"N\u00e4kyvyys","positioning_type":"Tyyppi",position:"Sijainti","bullet_image":"Listauskuva","list_type":"Tyyppi",color:"V\u00e4ri",height:"Korkeus",width:"Leveys",style:"Tyyli",margin:"Marginaali",left:"Vasemmalla",bottom:"Alhaalla",right:"Oikealla",top:"Ylh\u00e4\u00e4ll\u00e4",same:"Sama kaikille",padding:"Tyhj\u00e4 tila","box_clear":"Nollaus","box_float":"Kellunta","box_height":"Korkeus","box_width":"Leveys","block_display":"N\u00e4ytt\u00f6","block_whitespace":"Tyhj\u00e4 tila","block_text_indent":"Tekstin sisennys","block_text_align":"Tekstin asettelu","block_vertical_alignment":"Pystyasettelu","block_letterspacing":"Kirjainten v\u00e4listys","block_wordspacing":"Sanojen v\u00e4listys","background_vpos":"Pystyasettelu","background_hpos":"Vaaka-asettelu","background_attachment":"Liite","background_repeat":"Toistuvuus","background_image":"Taustakuva","background_color":"Taustav\u00e4ri","text_none":"ei mit\u00e4\u00e4n","text_blink":"V\u00e4l\u00e4hdys","text_case":"Isot/pienet kirjaimet","text_striketrough":"Yliviivattu","text_underline":"Alleviivattu (Ctrl+U)","text_overline":"Yliviivattu","text_decoration":"Koristelu","text_color":"V\u00e4ri",text:"Teksti",background:"Tausta",block:"Lohko",box:"Laatikko",border:"Reunus",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fr_dlg.js
new file mode 100644
index 000000000..3f7bdb92d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.style_dlg',{"text_lineheight":"Hauteur de ligne","text_variant":"Variante","text_style":"Style","text_weight":"Gras","text_size":"Taille","text_font":"Police","text_props":"Texte","positioning_tab":"Positionnement","list_tab":"Liste","border_tab":"Bordure","box_tab":"Bo\u00eete","block_tab":"Bloc","background_tab":"Fond","text_tab":"Texte",apply:"Appliquer",title:"\u00c9diter la feuille de style",clip:"Clip",placement:"Placement",overflow:"D\u00e9bordement",zindex:"Z-index",visibility:"Visibilit\u00e9","positioning_type":"Type",position:"Position","bullet_image":"Image de puce","list_type":"Type",color:"Couleur",height:"Hauteur",width:"Largeur",style:"Style",margin:"Marge",left:"Gauche",bottom:"Bas",right:"Droit",top:"Haut",same:"Identique pour tous",padding:"Espacement","box_clear":"Vider","box_float":"Flottant","box_height":"Hauteur","box_width":"Largeur","block_display":"Affichage","block_whitespace":"Fin de ligne","block_text_indent":"Indentation du texte","block_text_align":"Alignement du texte","block_vertical_alignment":"Alignement vertical","block_letterspacing":"Espacement des lettres","block_wordspacing":"Espacement des mots ","background_vpos":"Position verticale","background_hpos":"Position horizontale","background_attachment":"Attachement","background_repeat":"R\u00e9p\u00e9ter","background_image":"Image de fond","background_color":"Couleur de fond","text_none":"aucun","text_blink":"clignotant","text_case":"Casse","text_striketrough":"barr\u00e9","text_underline":"soulign\u00e9","text_overline":"ligne au-dessus","text_decoration":"D\u00e9coration","text_color":"Couleur",text:"Texte",background:"Fond",block:"Bloc",box:"Bo\u00eete",border:"Bordure",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/gl_dlg.js
new file mode 100644
index 000000000..e5d85d245
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.style_dlg',{"text_lineheight":"Ancho da fila","text_variant":"Variante","text_style":"Estilo","text_weight":"Peso","text_size":"Tama\u00f1o","text_font":"Fonte","text_props":"Texto","positioning_tab":"Posici\u00f3n","list_tab":"Lista","border_tab":"Borde","box_tab":"Caixa","block_tab":"Bloque","background_tab":"Fondo","text_tab":"Texto",apply:"Aplicar",title:"Editar Estilo CSS",clip:"Clip",placement:"Colocaci\u00f3n",overflow:"Desbodramento",zindex:"\u00cdndize Z",visibility:"Visibilidade","positioning_type":"Tipo",position:"Posici\u00f3n","bullet_image":"Imaxe da vi\u00f1eta","list_type":"Tipo",color:"Cor",height:"Alto",width:"Ancho",style:"Estilo",margin:"Marxe",left:"Esquerda",bottom:"Abaixo",right:"Dereita",top:"Arriba",same:"O mesmo en todos",padding:"Recheo","box_clear":"Limpar","box_float":"Float","box_height":"Alto","box_width":"Ancho","block_display":"Display","block_whitespace":"Espacio en branco","block_text_indent":"Sangr\u00eda","block_text_align":"Ali\u00f1aci\u00f3n do texto","block_vertical_alignment":"Ali\u00f1aci\u00f3n vertical","block_letterspacing":"Espacio entre letras","block_wordspacing":"Espacio entre verbas","background_vpos":"Posici\u00f3n vertical","background_hpos":"Posici\u00f3n horizontal","background_attachment":"Adxunto","background_repeat":"Repetir","background_image":"Imaxe de fondo","background_color":"Cor de fondo","text_none":"Neng\u00fan","text_blink":"Parpadeo","text_case":"Min\u00fas./May\u00fas.","text_striketrough":"Tachado","text_underline":"Suli\u00f1ado","text_overline":"Li\u00f1a superior","text_decoration":"Decorativos","text_color":"Cor",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/gu_dlg.js
new file mode 100644
index 000000000..12303ba24
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/he_dlg.js
new file mode 100644
index 000000000..22680ba67
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.style_dlg',{"text_lineheight":"\u05d2\u05d5\u05d1\u05d4 \u05e9\u05d5\u05e8\u05d4","text_variant":"\u05de\u05e9\u05ea\u05e0\u05d4","text_style":"\u05e1\u05d2\u05e0\u05d5\u05df","text_weight":"\u05e2\u05d5\u05d1\u05d9","text_size":"\u05d2\u05d5\u05d3\u05dc","text_font":"\u05e4\u05d5\u05e0\u05d8","text_props":"\u05d8\u05e7\u05e1\u05d8","positioning_tab":"\u05de\u05d9\u05e7\u05d5\u05dd","list_tab":"\u05e8\u05e9\u05d9\u05de\u05d4","border_tab":"\u05d2\u05d1\u05d5\u05dc","box_tab":"\u05e7\u05d5\u05e4\u05e1\u05d0","block_tab":"\u05d7\u05e1\u05d5\u05dd","background_tab":"\u05e8\u05e7\u05e2","text_tab":"\u05d8\u05e7\u05e1\u05d8",apply:"\u05d4\u05d7\u05dc",title:"\u05e2\u05d3\u05db\u05d5\u05df \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea CSS",clip:"\u05e7\u05dc\u05d9\u05e4",placement:"\u05de\u05d9\u05e7\u05d5\u05dd",overflow:"\u05d2\u05dc\u05d9\u05e9\u05d4",zindex:"Z-index",visibility:"\u05e8\u05d0\u05d5\u05ea","positioning_type":"\u05e1\u05d5\u05d2",position:"\u05de\u05d9\u05e7\u05d5\u05dd","bullet_image":"\u05ea\u05de\u05d5\u05e0\u05ea \u05ea\u05d1\u05dc\u05d9\u05d8","list_type":"\u05e1\u05d5\u05d2",color:"\u05e6\u05d1\u05e2",height:"\u05d2\u05d5\u05d1\u05d4",width:"\u05e8\u05d5\u05d7\u05d1",style:"\u05e1\u05d2\u05e0\u05d5\u05df",margin:"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd",left:"\u05e9\u05de\u05d0\u05dc",bottom:"\u05ea\u05d7\u05ea\u05d9\u05ea",right:"\u05d9\u05de\u05d9\u05df",top:"\u05e2\u05dc\u05d9\u05d5\u05df",same:"\u05d0\u05d5\u05ea\u05d5 \u05d3\u05d1\u05e8 \u05e2\u05d1\u05d5\u05e8 \u05db\u05d5\u05dc\u05dd",padding:"\u05e8\u05d9\u05e4\u05d5\u05d3","box_clear":"\u05e0\u05e7\u05d4","box_float":"\u05d4\u05e6\u05e4\u05d4","box_height":"\u05d2\u05d5\u05d1\u05d4","box_width":"\u05e8\u05d5\u05d7\u05d1","block_display":"\u05d4\u05e6\u05d2","block_whitespace":"\u05e8\u05d5\u05d5\u05d7","block_text_indent":"\u05d4\u05d6\u05d7\u05d4","block_text_align":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8","block_vertical_alignment":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e0\u05db\u05d9","block_letterspacing":"\u05de\u05e8\u05d7\u05e7 \u05d1\u05d9\u05df \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea","block_wordspacing":"\u05de\u05e8\u05d7\u05e7 \u05d1\u05d9\u05df \u05de\u05d9\u05dc\u05d9\u05dd","background_vpos":"\u05de\u05d9\u05e7\u05d5\u05dd \u05e8\u05d5\u05d7\u05d1\u05d9","background_hpos":"\u05de\u05d9\u05e7\u05d5\u05dd \u05d0\u05d5\u05e4\u05e7\u05d9","background_attachment":"\u05e7\u05d1\u05e6\u05d9\u05dd \u05de\u05e6\u05d5\u05e8\u05e4\u05d9\u05dd","background_repeat":"\u05d7\u05d6\u05d5\u05e8","background_image":"\u05ea\u05de\u05d5\u05e0\u05ea \u05e8\u05e7\u05e2","background_color":"\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2","text_none":"\u05dc\u05dc\u05d0","text_blink":"\u05d4\u05d1\u05d4\u05d5\u05d1","text_case":"Case","text_striketrough":"\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4","text_underline":"\u05e9\u05d5\u05e8\u05d4 \u05de\u05ea\u05d7\u05ea","text_overline":"\u05e9\u05d5\u05e8\u05d4 \u05de\u05e2\u05dc","text_decoration":"\u05e2\u05d9\u05e6\u05d5\u05d1","text_color":"\u05e6\u05d1\u05e2",text:"\u05d8\u05e7\u05e1\u05d8",background:"\u05e8\u05e7\u05e2",block:"\u05d1\u05dc\u05d5\u05e7",box:"\u05ea\u05d9\u05d1\u05d4",border:"\u05d2\u05d1\u05d5\u05dc",list:"\u05e8\u05e9\u05d9\u05de\u05d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hi_dlg.js
new file mode 100644
index 000000000..8b0f31555
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hr_dlg.js
new file mode 100644
index 000000000..48cf6b90e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.style_dlg',{"text_lineheight":"Visina linije","text_variant":"Varijanta","text_style":"Stil","text_weight":"Te\u017eina","text_size":"Veli\u010dina","text_font":"Font","text_props":"Tekst","positioning_tab":"Pozicioniranje","list_tab":"Lista","border_tab":"Obrub","box_tab":"Okvir","block_tab":"Blok","background_tab":"Pozadina","text_tab":"Tekst",apply:"Primjeni",title:"Uredi CSS Stil",clip:"Obre\u017ei (clip)",placement:"Polo\u017eaj",overflow:"Prelijevanje (Overflow)",zindex:"Z-index",visibility:"Vidljivost (Visibility)","positioning_type":"Tip",position:"Pozicija (Position)","bullet_image":"Bullet slika","list_type":"Tip",color:"Boja",height:"Visina",width:"\u0160irina",style:"Stil",margin:"Margine",left:"Lijevo",bottom:"Dno",right:"Desno",top:"Vrh",same:"Isto za sve",padding:"Ispunjenje (Padding)","box_clear":"Clear","box_float":"Float","box_height":"Visina","box_width":"\u0160irina","block_display":"Prikaz (Display)","block_whitespace":"Razmak (Whitespace)","block_text_indent":"Uvu\u010deni tekst","block_text_align":"Pozicioniranje teksta","block_vertical_alignment":"Okomito poravnanje","block_letterspacing":"Razmak izme\u0111u slova","block_wordspacing":"Razmak izme\u0111u rije\u010di","background_vpos":"Okomita pozicija","background_hpos":"Vodoravna pozicija","background_attachment":"Privitak","background_repeat":"Ponavljanje","background_image":"Pozadinska slika","background_color":"Pozadinska boja","text_none":"ni\u0161ta","text_blink":"blink","text_case":"Velika / mala slova","text_striketrough":"Precrtano","text_underline":"Podcrtano","text_overline":"Nadcrtano","text_decoration":"Ukras (Decoration)","text_color":"Boja",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hu_dlg.js
new file mode 100644
index 000000000..b60f3f73d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.style_dlg',{"text_lineheight":"Sormagass\u00e1g","text_variant":"V\u00e1ltozat","text_style":"St\u00edlus","text_weight":"Sz\u00e9less\u00e9g","text_size":"M\u00e9ret","text_font":"Bet\u0171t\u00edpus","text_props":"Sz\u00f6veg","positioning_tab":"Poz\u00edci\u00f3","list_tab":"Lista","border_tab":"Keret","box_tab":"Doboz","block_tab":"Blokk","background_tab":"H\u00e1tt\u00e9r","text_tab":"Sz\u00f6veg",apply:"Alkalmaz",title:"CSS st\u00edlus szerkest\u00e9se",clip:"Lev\u00e1g\u00e1s",placement:"Elhelyez\u00e9s",overflow:"Kifut\u00e1s",zindex:"Z-index",visibility:"L\u00e1that\u00f3s\u00e1g","positioning_type":"T\u00edpus",position:"Poz\u00edci\u00f3","bullet_image":"Elemk\u00e9p","list_type":"T\u00edpus",color:"Sz\u00edn",height:"Magass\u00e1g",width:"Sz\u00e9less\u00e9g",style:"St\u00edlus",margin:"Marg\u00f3",left:"Balra",bottom:"Lent",right:"Jobbra",top:"Fel\u00fcl",same:"Mindenhol ugyanaz",padding:"Bels\u0151 marg\u00f3","box_clear":"Lebeg\u00e9s (float) t\u00f6rl\u00e9se","box_float":"Lebeg\u00e9s (float)","box_height":"Magass\u00e1g","box_width":"Sz\u00e9less\u00e9g","block_display":"Megjelen\u00edt\u00e9s","block_whitespace":"T\u00e9rk\u00f6z","block_text_indent":"Sz\u00f6veg beh\u00faz\u00e1sa","block_text_align":"Sz\u00f6veg igaz\u00edt\u00e1sa","block_vertical_alignment":"F\u00fcgg\u0151leges igaz\u00edt\u00e1s","block_letterspacing":"Bet\u0171t\u00e1vols\u00e1g","block_wordspacing":"Sz\u00f3t\u00e1vols\u00e1g","background_vpos":"F\u00fcgg\u0151leges hely","background_hpos":"V\u00edzszintes hely","background_attachment":"Csatolm\u00e1ny","background_repeat":"Ism\u00e9tl\u00e9s","background_image":"H\u00e1tt\u00e9rk\u00e9p","background_color":"H\u00e1tt\u00e9rsz\u00edn","text_none":"egyik sem","text_blink":"villog\u00e1s","text_case":"eset","text_striketrough":"\u00e1th\u00fazott","text_underline":"al\u00e1h\u00fazott","text_overline":"fel\u00fclh\u00fazott","text_decoration":"dekor\u00e1ci\u00f3","text_color":"sz\u00edn",text:"Sz\u00f6veg",background:"H\u00e1tt\u00e9r",block:"Blokk",box:"Doboz",border:"Keret",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hy_dlg.js
new file mode 100644
index 000000000..4b9885b07
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.style_dlg',{"text_lineheight":"\u054f\u0578\u0572\u056b \u0562\u0561\u0580\u0571\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","text_variant":"Variant","text_style":"\u0548\u0573","text_weight":"\u0540\u0561\u057d\u057f\u0578\u0582\u0569\u0575\u0578\u0582\u0576","text_size":"\u0549\u0561\u0583\u057d","text_font":"\u054f\u0561\u057c\u0561\u057f\u0565\u057d\u0561\u056f","text_props":"\u054f\u0565\u0584\u057d\u057f","positioning_tab":"\u054f\u0565\u0572\u0561\u056f\u0561\u0575\u0578\u0582\u0574","list_tab":"\u0551\u0578\u0582\u0581\u0561\u056f","border_tab":"\u0535\u0566\u0580","box_tab":"Box","block_tab":"\u0532\u056c\u0578\u056f","background_tab":"\u0556\u0578\u0576","text_tab":"\u054f\u0565\u0584\u057d\u057f",apply:"\u0540\u0561\u057d\u057f\u0561\u057f\u0565\u056c",title:"CSS \u0578\u0573\u0565\u0580\u056b \u056d\u0574\u0562\u0561\u0563\u0580\u0578\u0582\u0574",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"\u054f\u0565\u057d\u0561\u0576\u0565\u056c\u056b\u0578\u0582\u0569\u0575\u0578\u0582\u0576","positioning_type":"\u054f\u0565\u057d\u0561\u056f",position:"\u0534\u056b\u0580\u0584","bullet_image":"Bullet image","list_type":"\u054f\u0565\u057d\u0561\u056f",color:"\u0533\u0578\u0582\u0575\u0576",height:"\u0532\u0561\u0580\u0571\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",width:"\u053c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576",style:"\u0548\u0573",margin:"Margin",left:"\u0541\u0561\u056d\u056b\u0581",bottom:"\u0546\u0565\u0580\u0584\u0587\u056b\u0581",right:"\u0531\u057b\u056b\u0581",top:"\u054e\u0565\u0580\u0587\u056b\u0581",same:"\u0544\u056b\u0587\u0576\u0578\u0582\u0575\u0576 \u0561\u0574\u0565\u0576 \u056b\u0576\u0579\u056b \u0570\u0561\u0574\u0561\u0580",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"\u0532\u0561\u0580\u0571\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","box_width":"\u053c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"\u054f\u0565\u0584\u057d\u057f\u056b \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","block_vertical_alignment":"\u0548\u0582\u0572\u0572\u0561\u0570\u0561\u0575\u0561\u0581 \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","block_letterspacing":"\u0532\u0561\u0581\u0561\u0580\u056f\u0576\u0565\u0580 \u057f\u0561\u057c\u0565\u0580\u056b \u0574\u056b\u057b\u0587","block_wordspacing":"\u0532\u0561\u0581\u0561\u0580\u056f\u0576\u0565\u0580 \u0562\u0561\u057c\u0565\u0580\u056b \u0574\u056b\u057b\u0587","background_vpos":"\u0548\u0582\u0572\u0572\u0561\u0570\u0561\u0575\u0561\u0581 \u057f\u0565\u0572\u0561\u056f\u0561\u0575\u0578\u0582\u0574","background_hpos":"\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u057f\u0565\u0572\u0561\u056f\u0561\u0575\u0578\u0582\u0574","background_attachment":"Attachment","background_repeat":"\u053f\u0580\u056f\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","background_image":"\u0556\u0578\u0576\u0561\u0575\u056b\u0576 \u0576\u056f\u0561\u0580","background_color":"\u0556\u0578\u0576\u056b \u0563\u0578\u0582\u0575\u0576","text_none":"\u0578\u0579\u056b\u0576\u0579","text_blink":"\u0569\u0561\u0580\u0569\u0578\u0582\u0574\u0576\u0565\u0580","text_case":"Case","text_striketrough":"\u0561\u0580\u057f\u0561\u0563\u056e\u057e\u0561\u056e","text_underline":"\u057d\u057f\u0578\u0580\u056b\u0576 \u0563\u056b\u056e","text_overline":"\u057e\u0565\u0580\u056b\u0576 \u0563\u056b\u056e","text_decoration":"\u0541\u0587\u0561\u057e\u0578\u0580\u0578\u0582\u0574","text_color":"\u0533\u0578\u0582\u0575\u0576",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ia_dlg.js
new file mode 100644
index 000000000..7b5fc7d4f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u53d8\u4f53","text_style":"\u6837\u5f0f","text_weight":"\u5bbd\u5ea6","text_size":"\u5927\u5c0f","text_font":"\u5b57\u4f53","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u76d2\u6a21\u578b","block_tab":"\u533a\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5e94\u7528",title:"\u7f16\u8f91 CSS \u6837\u5f0f\u8868",clip:"\u526a\u8f91",placement:"\u5e03\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z\u5750\u6807",visibility:"\u662f\u5426\u53ef\u89c1","positioning_type":"\u4f4d\u7f6e\u7c7b\u578b",position:"\u56fe\u7247\u4f4d\u7f6e","bullet_image":"\u6e05\u5355\u56fe\u7247","list_type":"\u5217\u8868\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",style:"\u6837\u5f0f",margin:"\u8fb9\u8ddd",left:"\u5de6\u4fa7",bottom:"\u5e95\u90e8",right:"\u53f3\u4fa7",top:"\u9876\u90e8",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5185\u8fb9\u8ddd","box_clear":"\u6e05\u9664","box_float":"\u6d6e\u52a8","box_height":"\u9ad8\u5ea6","box_width":"\u5bbd\u5ea6","block_display":"\u663e\u793a\u65b9\u5f0f","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7f29\u8fdb","block_text_align":"\u6587\u5b57\u5bf9\u9f50","block_vertical_alignment":"\u5782\u76f4\u5bf9\u9f50\u65b9\u5f0f","block_letterspacing":"\u5b57\u6bcd\u95f4\u8ddd","block_wordspacing":"\u8bcd\u95f4\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u4f53","text_striketrough":"\u4e2d\u5212\u7ebf","text_underline":"\u5e95\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u88c5\u9970","text_color":"\u989c\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/id_dlg.js
new file mode 100644
index 000000000..b8862d617
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/is_dlg.js
new file mode 100644
index 000000000..433672f68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/it_dlg.js
new file mode 100644
index 000000000..401b72770
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.style_dlg',{"text_lineheight":"Altezza linea","text_variant":"Variante","text_style":"Stile","text_weight":"Spessore","text_size":"Dimensione","text_font":"Carattere","text_props":"Testo","positioning_tab":"Posizionamento","list_tab":"Liste","border_tab":"Bordi","box_tab":"Contenitore","block_tab":"Blocco","background_tab":"Sfondo","text_tab":"Testo",apply:"Applica",title:"Modifica stile CSS",clip:"Clip",placement:"Piazzamento",overflow:"Overflow",zindex:"Z-index",visibility:"Visibilit\u00e0","positioning_type":"Tipo",position:"Posizione","bullet_image":"Immagine Punto","list_type":"Tipo",color:"Colore",height:"Altezza",width:"Larghezza",style:"Stile",margin:"Margine",left:"Sinistro",bottom:"Inferiore",right:"Destro",top:"Superiore",same:"Uguale per tutti",padding:"Spazio dal bordo","box_clear":"Pulito","box_float":"Fluttuante","box_height":"Altezza","box_width":"Larghezza","block_display":"Visualizzazione","block_whitespace":"Whitespace","block_text_indent":"Indentazione testo","block_text_align":"Allineamento testo","block_vertical_alignment":"Allineamento verticale","block_letterspacing":"Spaziatura caratteri","block_wordspacing":"Spaziatura parole","background_vpos":"Posizione verticale","background_hpos":"Posizione orizzontale","background_attachment":"Allegato","background_repeat":"Repetizione","background_image":"Immagine sfondo","background_color":"Colore sfondo","text_none":"nessuna","text_blink":"lampeggiante","text_case":"Tipo","text_striketrough":"barrato","text_underline":"sottolineato","text_overline":"sopralineato","text_decoration":"Decorazione","text_color":"Colore",text:"Testo",background:"Sfondo",block:"Blocco",box:"Box",border:"Bordo",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ja_dlg.js
new file mode 100644
index 000000000..4d5953cf4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.style_dlg',{"text_lineheight":"\u884c\u306e\u9ad8\u3055","text_variant":"\u5909\u5f62","text_style":"\u30b9\u30bf\u30a4\u30eb","text_weight":"\u592a\u3055","text_size":"\u5927\u304d\u3055","text_font":"\u30d5\u30a9\u30f3\u30c8","text_props":"\u30c6\u30ad\u30b9\u30c8","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u7b87\u6761\u66f8\u304d","border_tab":"\u67a0\u7dda","box_tab":"\u30dc\u30c3\u30af\u30b9","block_tab":"\u30d6\u30ed\u30c3\u30af","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u9069\u7528",title:"CSS\u306e\u30b9\u30bf\u30a4\u30eb\u3092\u7de8\u96c6",clip:"\u5207\u308a\u629c\u304d",placement:"\u914d\u7f6e",overflow:"\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc",zindex:"Z-index",visibility:"\u53ef\u8996\u6027","positioning_type":"\u914d\u7f6e\u65b9\u6cd5",position:"\u8868\u793a\u4f4d\u7f6e","bullet_image":"\u884c\u982d\u6587\u5b57","list_type":"\u7b87\u6761\u66f8\u304d\u306e\u7a2e\u985e",color:"\u8272",height:"\u9ad8\u3055",width:"\u5e45",style:"\u30b9\u30bf\u30a4\u30eb",margin:"\u30de\u30fc\u30b8\u30f3",left:"\u5de6",bottom:"\u4e0b",right:"\u53f3",top:"\u4e0a",same:"\u3059\u3079\u3066\u540c\u3058",padding:"\u30d1\u30c7\u30a3\u30f3\u30b0","box_clear":"\u56de\u308a\u8fbc\u307f\u89e3\u9664","box_float":"\u56de\u308a\u8fbc\u307f","box_height":"\u9ad8\u3055","box_width":"\u5e45","block_display":"\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4","block_whitespace":"\u7a7a\u767d\u6587\u5b57","block_text_indent":"\u30c6\u30ad\u30b9\u30c8\u306e\u5b57\u4e0b\u3052","block_text_align":"\u30c6\u30ad\u30b9\u30c8\u306e\u6c34\u5e73\u914d\u7f6e","block_vertical_alignment":"\u5782\u76f4\u914d\u7f6e","block_letterspacing":"\u6587\u5b57\u9593\u9694","block_wordspacing":"\u5358\u8a9e\u9593\u9694","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u6dfb\u4ed8","background_repeat":"\u7e70\u308a\u8fd4\u3057","background_image":"\u80cc\u666f\u753b\u50cf","background_color":"\u80cc\u666f\u8272","text_none":"\u306a\u3057","text_blink":"\u70b9\u6ec5","text_case":"\u5927\u6587\u5b57/\u5c0f\u6587\u5b57","text_striketrough":"\u6253\u6d88\u3057\u7dda","text_underline":"\u4e0b\u7dda","text_overline":"\u4e0a\u7dda","text_decoration":"\u88c5\u98fe","text_color":"\u8272",text:"\u6587\u5b57",background:"\u80cc\u666f",block:"\u30d6\u30ed\u30c3\u30af",box:"\u30dc\u30c3\u30af\u30b9",border:"\u67a0\u7dda",list:"\u7b87\u6761\u66f8\u304d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ka_dlg.js
new file mode 100644
index 000000000..442f54efa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.style_dlg',{"text_lineheight":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4","text_variant":"\u10d5\u10d0\u10e0\u10d8\u10d0\u10dc\u10e2\u10d8","text_style":"\u10e1\u10e2\u10d8\u10da\u10d8","text_weight":"\u10e1\u10d8\u10e1\u10e5\u10d4","text_size":"\u10d6\u10dd\u10db\u10d0","text_font":"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8","text_props":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8","positioning_tab":"\u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10dd\u10dc\u10d8\u10e0\u10d4\u10d1\u10d0","list_tab":"\u10e1\u10d8\u10d0","border_tab":"\u10e1\u10d0\u10d6\u10e6\u10d5\u10d0\u10e0\u10d8","box_tab":"\u10d9\u10d8\u10d3\u10d4\u10d4\u10d1\u10d8","block_tab":"\u10d1\u10da\u10dd\u10d9\u10d8","background_tab":"\u10e4\u10dd\u10dc\u10d8","text_tab":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8",apply:"\u10d2\u10d0\u10db\u10dd\u10d5\u10d8\u10e7\u10d4\u10dc\u10dd\u10d7",title:"CSS \u10e1\u10e2\u10d8\u10da\u10d8\u10e1 \u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10dd\u10e0\u10d8",clip:"\u10db\u10dd\u10d9\u10d5\u10d4\u10d7\u10d0",placement:"\u10d2\u10d0\u10dc\u10d7\u10d0\u10d5\u10e1\u10d4\u10d1\u10d0",overflow:"\u10d2\u10d0\u10d3\u10d0\u10d5\u10e1\u10d4\u10d1\u10d0",zindex:"Z-\u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10d8",visibility:"\u10ee\u10d8\u10da\u10d5\u10d0\u10d3\u10dd\u10d1\u10d0","positioning_type":"\u10e2\u10d8\u10de\u10d8",position:"\u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10d0","bullet_image":"\u10db\u10d0\u10e0\u10d9\u10d4\u10e0\u10d8","list_type":"\u10e2\u10d8\u10de\u10d8",color:"\u10e4\u10d4\u10e0\u10d8",height:"\u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4",width:"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4",style:"\u10e1\u10e2\u10d8\u10da\u10d8",margin:"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",left:"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5",bottom:"\u10e5\u10d5\u10d4\u10db\u10dd\u10d7",right:"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",top:"\u10d6\u10d4\u10db\u10dd\u10d7",same:"\u10e7\u10d5\u10d4\u10da\u10d0\u10e1\u10d7\u10d5\u10d8\u10e1 \u10d4\u10e0\u10d7\u10dc\u10d0\u10d4\u10e0\u10d0\u10d3",padding:"\u10db\u10d8\u10dc\u10d3\u10d5\u10e0\u10d4\u10d1\u10d8","box_clear":"\u10db\u10dd\u10e1\u10e3\u10e4\u10d7\u10d0\u10d5\u10d4\u10d1\u10d0","box_float":"\u10db\u10dd\u10ea\u10e3\u10e0\u10d0\u10d5\u10d4","box_height":"\u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4","box_width":"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4","block_display":"\u10d0\u10e1\u10d0\u10ee\u10d5\u10d0","block_whitespace":"\u10e1\u10d8\u10d5\u10e0\u10ea\u10d4","block_text_indent":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","block_text_align":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","block_vertical_alignment":"\u10d5\u10d4\u10e0\u10e2\u10d8\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","block_letterspacing":"\u10d0\u10e1\u10dd\u10d4\u10d1\u10e1 \u10e8\u10dd\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","block_wordspacing":"\u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10e1 \u10e8\u10dd\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","background_vpos":"\u10d5\u10d4\u10e0\u10e2\u10d8\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10d0","background_hpos":"\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2\u10d0\u10da\u10e3\u10e0\u10d8 \u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10d0","background_attachment":"\u10db\u10d8\u10d1\u10db\u10d0","background_repeat":"\u10d2\u10d0\u10db\u10d4\u10dd\u10e0\u10d4\u10d1\u10d0","background_image":"\u10e4\u10dd\u10dc\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d0","background_color":"\u10e4\u10dd\u10dc\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","text_none":"\u10e7\u10d5\u10d4\u10da\u10d0\u10e4\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4","text_blink":"\u10db\u10dd\u10ea\u10d8\u10db\u10ea\u10d8\u10db\u10d4","text_case":"\u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d8","text_striketrough":"\u10d2\u10d0\u10d3\u10d0\u10ee\u10d0\u10d6\u10e3\u10da\u10d8","text_underline":"\u10db\u10dd\u10ee\u10d0\u10d6\u10e3\u10da\u10d8","text_overline":"\u10d6\u10d4\u10d3\u10d0 \u10ee\u10d0\u10d6\u10d8\u10d7","text_decoration":"\u10d2\u10d0\u10e4\u10dd\u10e0\u10db\u10d4\u10d1\u10d0","text_color":"\u10e4\u10d4\u10e0\u10d8",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/kl_dlg.js
new file mode 100644
index 000000000..f916e26dd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/km_dlg.js
new file mode 100644
index 000000000..4215fac3e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.style_dlg',{"text_lineheight":"\u1780\u1798\u17d2\u1796\u179f\u17cb\u1787\u17bd\u179a","text_variant":"\u1780\u17c6\u179b\u17b6\u1799","text_style":"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798","text_weight":"\u1780\u1798\u17d2\u179a\u17b6\u179f\u17cb","text_size":"\u1791\u17c6\u17a0\u17c6","text_font":"\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a","text_props":"\u17a2\u178f\u17d2\u1790\u1794\u1791","positioning_tab":"\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1791\u17b8\u178f\u17b6\u17c6\u1784","list_tab":"\u1794\u1789\u17d2\u1787\u17b8","border_tab":"\u179f\u17ca\u17bb\u1798","box_tab":"\u1794\u17d2\u179a\u17a2\u1794\u17cb","block_tab":"\u1794\u17d2\u179b\u17bb\u1780","background_tab":"\u1795\u17d2\u1791\u17c2\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","text_tab":"\u17a2\u178f\u17d2\u1790\u1794\u1791",apply:"\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f",title:"\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798 CSS",clip:"\u178f\u1798\u17d2\u1794\u17c0\u178f\u1781\u17d2\u1791\u17b6\u179f\u17cb",placement:"\u1780\u17b6\u179a\u178a\u17b6\u1780\u17cb",overflow:"\u179b\u17be\u179f\u1785\u17c6\u178e\u17bb\u17c7",zindex:"\u17a2\u17d0\u1780\u17d2\u179f Z",visibility:"\u1797\u17b6\u1796\u17a2\u17b6\u1785\u1798\u17be\u179b\u1783\u17be\u1789","positioning_type":"\u1794\u17d2\u179a\u1797\u17c1\u1791",position:"\u1791\u17b8\u178f\u17b6\u17c6\u1784","bullet_image":"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1785\u17c6\u178e\u17bb\u1785","list_type":"\u1794\u17d2\u179a\u1797\u17c1\u1791",color:"\u1796\u178e\u17cc",height:"\u1780\u1798\u17d2\u1796\u179f\u17cb",width:"\u1791\u1791\u17b9\u1784",style:"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",margin:"\u179a\u17b9\u1798",left:"\u1786\u17d2\u179c\u17c1\u1784",bottom:"\u1794\u17b6\u178f",right:"\u179f\u17d2\u178a\u17b6\u17c6",top:"\u1780\u17c6\u1796\u17bc\u179b",same:"\u178f\u17bc\u1785\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb",padding:"\u1785\u1793\u17d2\u179b\u17c4\u17c7","box_clear":"\u179f\u17c6\u17a2\u17b6\u178f","box_float":"\u17a2\u178e\u17d2\u178a\u17c2\u178f","box_height":"\u1780\u1798\u17d2\u1796\u179f\u17cb","box_width":"\u1791\u1791\u17b9\u1784","block_display":"\u1794\u1784\u17d2\u17a0\u17b6\u1789","block_whitespace":"\u1791\u1791\u17c1\u179f\u17d2\u17a2\u17b6\u178f","block_text_indent":"\u1785\u17bc\u179b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791","block_text_align":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u17a2\u178f\u17d2\u1790\u1794\u1791","block_vertical_alignment":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u1794\u1789\u17d2\u1788\u179a","block_letterspacing":"\u1782\u1798\u17d2\u179b\u17b6\u178f\u17a2\u1780\u17d2\u179f\u179a","block_wordspacing":"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1796\u17b6\u1780\u17d2\u1799","background_vpos":"\u1791\u17b8\u178f\u17b6\u17c6\u1784\u1794\u1789\u17d2\u1788\u179a","background_hpos":"\u1791\u17b8\u178f\u17b6\u17c6\u1784\u1795\u17d2\u178a\u17c1\u1780","background_attachment":"\u17af\u1780\u179f\u17b6\u179a\u1797\u17d2\u1787\u17b6\u1794\u17cb","background_repeat":"\u1792\u17d2\u179c\u17be\u1798\u17d2\u178a\u1784\u1791\u17c0\u178f","background_image":"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","background_color":"\u1796\u178e\u17cc\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","text_none":"\u1782\u17d2\u1798\u17b6\u1793","text_blink":"\u1797\u17d2\u179b\u17b9\u1794\u1797\u17d2\u179b\u17c2\u178f","text_case":"\u1780\u179a\u178e\u17b8","text_striketrough":"\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1786\u17bc\u178f","text_underline":"\u1782\u17bc\u179f\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1780\u17d2\u179a\u17c4\u1798","text_overline":"\u1782\u17bc\u179f\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u179b\u17be","text_decoration":"\u1780\u17b6\u179a\u178f\u17bb\u1794\u178f\u17c2\u1784","text_color":"\u1796\u178e\u17cc",text:"\u17a2\u178f\u17d2\u1790\u1794\u1791",background:"\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799",block:"\u1794\u17d2\u179b\u17bb\u1780",box:"\u1794\u17d2\u179a\u17a2\u1794\u17cb",border:"\u179f\u17ca\u17bb\u1798",list:"\u1794\u1789\u17d2\u1787\u17b8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ko_dlg.js
new file mode 100644
index 000000000..c326368fd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.style_dlg',{"text_lineheight":"\ud589 \ub192\uc774","text_variant":"Variant","text_style":"\uc2a4\ud0c0\uc77c","text_weight":"\uad75\uae30","text_size":"\ud06c\uae30","text_font":"\uae00\uaf34","text_props":"\ud14d\uc2a4\ud2b8","positioning_tab":"\uc704\uce58","list_tab":"\ub9ac\uc2a4\ud2b8","border_tab":"\ud14c\ub450\ub9ac\uc120","box_tab":"\ubc15\uc2a4","block_tab":"\ube14\ub85d","background_tab":"\ubc30\uacbd","text_tab":"\ud14d\uc2a4\ud2b8",apply:"\uc801\uc6a9",title:"CSS \ud3b8\uc9d1",clip:"Clip",placement:"\uc704\uce58(placement)",overflow:"\uc624\ubc84\ud50c\ub85c\uc6b0",zindex:"Z-index",visibility:"\uac00\uc2dc\uc131","positioning_type":"\ud0c0\uc785",position:"\uc704\uce58","bullet_image":"\ubd88\ub9bf \uc774\ubbf8\uc9c0","list_type":"\ubaa9\ub85d\uc885\ub958",color:"\uc0c9",height:"\ub192\uc774",width:"\ud3ed",style:"\uc2a4\ud0c0\uc77c",margin:"\ub9c8\uc9c4",left:"\uc88c",bottom:"\ud558",right:"\uc6b0",top:"\uc0c1",same:"\ubaa8\ub450 \ub611\uac19\uc774",padding:"padding","box_clear":"Clear","box_float":"float","box_height":"\ub192\uc774","box_width":"\ud3ed","block_display":"\ud45c\uc2dc","block_whitespace":"\uacf5\ubc31 \ubb38\uc790","block_text_indent":"\ub4e4\uc5ec\uc4f0\uae30","block_text_align":"\uc88c\uc6b0 \ub9de\ucda4","block_vertical_alignment":"\uc138\ub85c \ub9de\ucda4","block_letterspacing":"\ubb38\uc790 \uac04\uaca9","block_wordspacing":"\ub2e8\uc5b4 \uac04\uaca9","background_vpos":"\uc138\ub85c \uc704\uce58","background_hpos":"\uac00\ub85c \uc704\uce58","background_attachment":"\ucca8\ubd80","background_repeat":"\ubc18\ubcf5","background_image":"\ubc30\uacbd \uc774\ubbf8\uc9c0","background_color":"\ubc30\uacbd\uc0c9","text_none":"\uc5c6\uc74c","text_blink":"\uc810\uba78","text_case":"\ub300/\uc18c\ubb38\uc790","text_striketrough":"\ucde8\uc18c\uc120","text_underline":"\ubc11\uc904","text_overline":"\uc717\uc904","text_decoration":"\uc7a5\uc2dd","text_color":"\uc0c9",text:"\ud14d\uc2a4\ud2b8",background:"\ubc30\uacbd",block:"\ube14\ub85d",border:"\ud14c\ub450\ub9ac\uc120",list:"\ubaa9\ub85d",box:"Box"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/kz_dlg.js
new file mode 100644
index 000000000..573237b8a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.style_dlg',{"text_style":"\u0421\u0442\u0438\u043b\u044c","text_lineheight":"Line Height","text_variant":"Variant","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet Image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for All",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text Indent","block_text_align":"Text Align","block_vertical_alignment":"Vertical Alignment","block_letterspacing":"Letter Spacing","block_wordspacing":"Word Spacing","background_vpos":"Vertical Position","background_hpos":"Horizontal Position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background Image","background_color":"Background Color","text_none":"None","text_blink":"Blink","text_case":"Case","text_striketrough":"Strikethrough","text_underline":"Underline","text_overline":"Overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lb_dlg.js
new file mode 100644
index 000000000..060db7b8a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.style_dlg',{"text_lineheight":"Zeilenh\u00e9icht","text_variant":"Variant","text_style":"Stil","text_weight":"D\u00e9ckt","text_size":"Gr\u00e9isst","text_font":"Schr\u00ebftaart","text_props":"Text","positioning_tab":"Position\u00e9ierung","list_tab":"L\u00ebscht","border_tab":"Rumm","box_tab":"Box","block_tab":"Block","background_tab":"Hannergrond","text_tab":"Text",apply:"Iwwerhuelen",title:"CSS-Styles beaarbechten",clip:"Ausschn\u00ebtt",placement:"Plaz\u00e9ierung",overflow:"Verhale bei Iwwergr\u00e9isst",zindex:"Z-W\u00e4ert",visibility:"Siichtbar","positioning_type":"Aart vun der Position\u00e9ierung",position:"Position\u00e9ierung","bullet_image":"L\u00ebschtepunkt-Grafik","list_type":"L\u00ebschtepunkt-Aart",color:"Textfuerf",height:"H\u00e9icht",width:"Breet",style:"Format",margin:"Baussechten Ofstand",left:"L\u00e9nks",bottom:"\u00cbnnen",right:"Riets",top:"Uewen",same:"All selwecht",padding:"Banneschten Ofstand","box_clear":"\u00cbmfl\u00e9issung verh\u00ebnneren","box_float":"\u00cbmfl\u00e9issung","box_height":"H\u00e9icht","box_width":"Breet","block_display":"\u00cbmbrochverhalen","block_whitespace":"Automateschen \u00cbmbroch","block_text_indent":"Ar\u00e9ckung","block_text_align":"Ausriichtung","block_vertical_alignment":"Vertikal Ausriichtung","block_letterspacing":"Buschtawenofstand","block_wordspacing":"Wuertofstand","background_vpos":"Positioun Y","background_hpos":"Positioun X","background_attachment":"Waasserzeecheneffekt","background_repeat":"Widderhuelung","background_image":"Hannergrondbild","background_color":"Hannergrondfuerf","text_none":"keng","text_blink":"bl\u00ebnkend","text_case":"Schreiwung","text_striketrough":"duerchgestrach","text_underline":"\u00ebnnerstrach","text_overline":"iwwerstrach","text_decoration":"Gestaltung","text_color":"Fuerf",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lt_dlg.js
new file mode 100644
index 000000000..c8bc04271
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.style_dlg',{"text_lineheight":"Eilut\u0117s auk\u0161tis","text_variant":"Variantas","text_style":"Stilius","text_weight":"Storis","text_size":"Dydis","text_font":"\u0160riftas","text_props":"Tekstas","positioning_tab":"Pozicionavimas","list_tab":"S\u0105ra\u0161as","border_tab":"R\u0117melis","box_tab":"D\u0117\u017eut\u0117","block_tab":"Blokas","background_tab":"Fonas","text_tab":"Tekstas",apply:"Taikyti",title:"Redaguoti CSS stili\u0173",clip:"\u012era\u0161as",placement:"Talpinimas",overflow:"Perpildymas",zindex:"Z-indeksas",visibility:"Matomumas","positioning_type":"Tipas",position:"Pozicija","bullet_image":"\u017denklelio paveiksl\u0117lis","list_type":"Tipas",color:"Spalva",height:"Auk\u0161tis",width:"Ilgis",style:"Stilius",margin:"Para\u0161t\u0117",left:"Kair\u0117je",bottom:"Apa\u010dioje",right:"De\u0161in\u0117je",top:"Vir\u0161uje",same:"Tas pats visiems",padding:"U\u017epildymas","box_clear":"I\u0161valyti","box_float":"Slankus","box_height":"Auk\u0161tis","box_width":"Ilgis","block_display":"Rodymas","block_whitespace":"Tarpai","block_text_indent":"Teksto atitraukimas","block_text_align":"Teksto lygiavimas","block_vertical_alignment":"Vertikalus lygiavimas","block_letterspacing":"Tarpai tarp raid\u017ei\u0173","block_wordspacing":"Tarpai tarp \u017eod\u017ei\u0173","background_vpos":"Vertikali pozicija","background_hpos":"Horizontali pozicija","background_attachment":"Priedas","background_repeat":"Kartoti","background_image":"Fono paveiksl\u0117lis","background_color":"Fono spalva","text_none":"joks","text_blink":"mirks\u0117jimas","text_case":"Ma\u017eosios/did\u017eiosios raid\u0117s","text_striketrough":"perbraukta","text_underline":"pabraukta apa\u010dioje","text_overline":"pabraukta vir\u0161uje","text_decoration":"Dekoracija","text_color":"Spalva",text:"Tekstas",background:"Fonas",block:"Blokuoti",box:"D\u0117\u017e\u0117",border:"Siena",list:"\u0160\u0105ra\u0161as"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lv_dlg.js
new file mode 100644
index 000000000..9f0d3f246
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Klips",placement:"Izvietojums",overflow:"P\u0101rm\u0113rs",zindex:"Z-index",visibility:"Redzam\u012bba","positioning_type":"Tips",position:"Poz\u012bcija","bullet_image":"Bullet bilde","list_type":"Tips",color:"Kr\u0101sa",height:"Augstums",width:"Platums",style:"St\u012bls",margin:"Mala",left:"Pa kreisi",bottom:"Apak\u0161a",right:"Pa labi",top:"Aug\u0161a",same:"Same for all",padding:"Atstarpe","box_clear":"Clear","box_float":"Float","box_height":"Augstums","box_width":"Platums","block_display":"Display","block_whitespace":"Tuk\u0161ais laukums","block_text_indent":"\u00c9crit indent","block_text_align":"Teksta izl\u012bdzin\u0101jums","block_vertical_alignment":"Vertik\u0101lais izl\u012bdzin\u0101jums","block_letterspacing":"Burtu atstarpe","block_wordspacing":"V\u0101rdu atstarpe","background_vpos":"Vertik\u0101l\u0101 poz\u012bcija","background_hpos":"Horizont\u0101l\u0101 poz\u012bcija","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Teksts",background:"Fons",block:"Blo\u0137\u0113t",box:"Kaste",border:"Siena",list:"Saraksts"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/mk_dlg.js
new file mode 100644
index 000000000..ce8ab5d8d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.style_dlg',{"text_lineheight":"\u0412\u0438\u0441\u0438\u043d\u0430 \u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430","text_variant":"\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u0430","text_style":"\u0421\u0442\u0438\u043b","text_weight":"\u0428\u0438\u0440\u0438\u043d\u0430","text_size":"\u0413\u043e\u043b\u0435\u043c\u0438\u043d\u0430","text_font":"\u0424\u043e\u043d\u0442","text_props":"\u0422\u0435\u043a\u0441\u0442","positioning_tab":"\u041f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0430\u045a\u0435","list_tab":"\u041b\u0438\u0441\u0442\u0430","border_tab":"\u0413\u0440\u0430\u043d\u0438\u0446\u0438","box_tab":"\u041a\u0443\u0442\u0438\u0458\u0430","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u041f\u043e\u0437\u0430\u0434\u0438\u043d\u0430","text_tab":"\u0422\u0435\u043a\u0441\u0442",apply:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438",title:"\u0423\u0440\u0435\u0434\u0438 \u0433\u043e CSS \u0441\u0442\u0438\u043b\u043e\u0442",clip:"\u041a\u043b\u0438\u043f",placement:"\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e\u0441\u0442",overflow:"\u041f\u0440\u0435\u043b\u0435\u0432\u0430\u045a\u0435",zindex:"Z-index",visibility:"\u0412\u0438\u0434\u043b\u0438\u0432\u043e\u0441\u0442","positioning_type":"\u0422\u0438\u043f",position:"\u041f\u043e\u0437\u0438\u0446\u0438\u0458\u0430","bullet_image":"Bullet \u0441\u043b\u0438\u043a\u0430","list_type":"\u0422\u0438\u043f",color:"\u0411\u043e\u0458\u0430",height:"\u0412\u0438\u0441\u0438\u043d\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",style:"\u0421\u0442\u0438\u043b",margin:"\u041c\u0430\u0440\u0433\u0438\u043d\u0430",left:"\u041b\u0435\u0432\u043e",bottom:"\u0414\u043e\u043b\u0435",right:"\u0414\u0435\u0441\u043d\u043e",top:"\u0413\u043e\u0440\u0435",same:"\u0418\u0441\u0442\u043e \u0437\u0430 \u0441\u0438\u0442\u0435",padding:"\u041f\u043e\u043c\u0435\u0441\u0442\u0443\u0432\u0430\u045a\u0435","box_clear":"\u0418\u0441\u0447\u0438\u0441\u0442\u0438","box_float":"\u041f\u043e\u043c\u0435\u0441\u0442\u0443\u0432\u0430\u045a\u0435","box_height":"\u0412\u0438\u0441\u0438\u043d\u0430","box_width":"\u0428\u0438\u0440\u0438\u043d\u0430","block_display":"\u041f\u0440\u0438\u043a\u0430\u0436\u0438","block_whitespace":"\u041f\u0440\u0430\u0437\u043d\u043e \u043c\u0435\u0441\u0442\u043e","block_text_indent":"\u0422\u0435\u043a\u0441\u0442 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444","block_text_align":"\u041f\u043e\u0440\u0430\u043c\u043d\u0438 \u0433\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0442","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u043e\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435","block_letterspacing":"\u0420\u0430\u0441\u0442\u043e\u0430\u0458\u043d\u0438\u0435 \u043c\u0435\u0453\u0443 \u0431\u0443\u043a\u0432\u0438\u0442\u0435","block_wordspacing":"\u0420\u0430\u0441\u0442\u043e\u0458\u0430\u043d\u0438\u0435 \u043c\u0435\u0453\u0443 \u0437\u0431\u043e\u0440\u043e\u0432\u0438\u0442\u0435","background_vpos":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0458\u0430","background_hpos":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0458\u0430","background_attachment":"\u041f\u0440\u0438\u043b\u043e\u0433","background_repeat":"\u041f\u043e\u0432\u0442\u043e\u0440\u0438","background_image":"\u041f\u043e\u0437\u0430\u0434\u043d\u0438\u043d\u0441\u043a\u0430 \u0441\u043b\u0438\u043a\u0430","background_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430\u0442\u0430","text_none":"\u043d\u0438\u0448\u0442\u043e","text_blink":"\u0442\u0440\u0435\u043f\u043a\u0430\u045a\u0435","text_case":"\u0421\u043b\u0443\u0447\u0430\u0458","text_striketrough":"\u043f\u0440\u0435\u0446\u0440\u0442\u0430\u043d\u043e","text_underline":"\u043f\u043e\u0434\u0432\u043b\u0435\u0448\u0435\u043d\u043e","text_overline":"\u043d\u0430\u0434 \u043b\u0438\u043d\u0438\u0458\u0430","text_decoration":"\u0414\u0435\u043a\u043e\u0440\u0430\u0446\u0438\u0458\u0430","text_color":"\u0411\u043e\u0458\u0430",text:"\u0422\u0435\u043a\u0441\u0442",background:"\u041f\u043e\u0437\u0430\u0434\u0438\u043d\u0430",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u0443\u0442\u0438\u0458\u0430",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0438/\u0440\u0430\u0431\u043e\u0432\u0438",list:"\u041b\u0438\u0441\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ml_dlg.js
new file mode 100644
index 000000000..730fd04cf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/mn_dlg.js
new file mode 100644
index 000000000..a7faed295
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.style_dlg',{"text_lineheight":"\u041c\u04e9\u0440\u043d\u0438\u0439 \u04e9\u043d\u0434\u04e9\u0440","text_variant":"\u0412\u0430\u0440\u0438\u0430\u043d\u0442","text_style":"\u0425\u044d\u043b\u0431\u044d\u0440","text_weight":"\u04e8\u0440\u0433\u04e9\u043d \u043d\u0430\u0440\u0438\u0439\u043d","text_size":"\u0425\u044d\u043c\u0436\u044d\u044d","text_font":"\u0424\u043e\u043d\u0442","text_props":"\u0411\u0438\u0447\u0432\u044d\u0440","positioning_tab":"\u0411\u0430\u0439\u0440\u0448\u0438\u043b","list_tab":"\u0416\u0430\u0433\u0441\u0430\u0430\u043b\u0442","border_tab":"\u0425\u04af\u0440\u044d\u044d","box_tab":"\u0425\u0430\u0439\u0440\u0446\u0430\u0433","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0414\u044d\u0432\u0441\u0433\u044d\u0440","text_tab":"\u0411\u0438\u0447\u0432\u044d\u0440",apply:"\u0425\u044d\u0440\u044d\u0433\u043b\u044d\u0445",title:"CSS-Styles \u0437\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0445",clip:"\u0422\u0430\u0439\u0440\u0434\u0430\u0441",placement:"\u0411\u0430\u0439\u0440\u0448\u0438\u043b",overflow:"\u0425\u044d\u0442\u044d\u0440\u0441\u044d\u043d \u0445\u044d\u043c\u0436\u044d\u044d\u043d\u0438\u0439 \u0445\u0430\u0440\u044c\u0446\u0430\u0430",zindex:"Z \u0443\u0442\u0433\u0430",visibility:"\u0425\u0430\u0440\u0430\u0433\u0434\u0430\u0445\u0443\u0439\u0446","positioning_type":"\u0411\u0430\u0439\u0440\u0448\u043b\u044b\u043d \u0442\u04e9\u0440\u04e9\u043b",position:"\u0411\u0430\u0439\u0440\u0448\u0438\u043b","bullet_image":"\u0413\u0440\u0430\u0444\u0438\u043a \u0442\u043e\u043e\u0447\u0438\u043b\u0442\u044b\u043d \u0446\u044d\u0433","list_type":"\u0422\u043e\u043e\u0447\u0438\u043b\u0442\u044b\u043d \u0446\u044d\u0433\u0438\u0439\u043d \u0445\u044d\u043b\u0431\u044d\u0440",color:"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u04e9\u043d\u0433\u04e9",height:"\u04e8\u043d\u0434\u04e9\u0440",width:"\u04e8\u0440\u0433\u04e9\u043d",style:"\u0424\u043e\u0440\u043c\u0430\u0442",margin:"\u0413\u0430\u0434\u0430\u0430\u0434 \u0437\u0430\u0439",left:"\u0417\u04af\u04af\u043d",bottom:"\u0414\u043e\u043e\u0440",right:"\u0411\u0430\u0440\u0443\u0443\u043d",top:"\u0414\u044d\u044d\u0440",same:"\u0411\u04af\u0433\u0434 \u0438\u0436\u0438\u043b",padding:"\u0414\u043e\u0442\u043e\u043e\u0434 \u0437\u0430\u0439","box_clear":"\u0413\u04af\u0439\u043b\u0433\u044d\u043b\u0442 \u0445\u0430\u0430\u0445","box_float":"\u0413\u04af\u0439\u043b\u0433\u044d\u043b\u0442","box_height":"\u04e8\u043d\u0434\u04e9\u0440","box_width":"\u04e8\u0440\u0433\u04e9\u043d","block_display":"\u041e\u0440\u043e\u043e\u0445 \u0445\u044d\u043b\u0431\u044d\u0440","block_whitespace":"\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u043c\u04e9\u0440 \u043e\u0440\u043e\u043e\u043b\u0442","block_text_indent":"\u0414\u043e\u0433\u043e\u043b \u043c\u04e9\u0440","block_text_align":"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442","block_vertical_alignment":"\u0411\u043e\u0441\u043e\u043e \u0436\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442","block_letterspacing":"\u04ae\u0441\u044d\u0433 \u0445\u043e\u043e\u0440\u043e\u043d\u0434\u044b\u043d \u0437\u0430\u0439","block_wordspacing":"\u04ae\u0433 \u0445\u043e\u043e\u0440\u043e\u043d\u0434\u044b\u043d \u0437\u0430\u0439","background_vpos":"\u0411\u0430\u0439\u0440\u043b\u0430\u043b Y","background_hpos":"\u0411\u0430\u0439\u0440\u043b\u0430\u043b X","background_attachment":"\u0423\u0441\u0430\u043d \u0442\u044d\u043c\u0434\u0433\u0438\u0439\u043d \u044d\u0444\u0444\u0435\u043a\u0442","background_repeat":"\u0414\u0430\u0432\u0442\u0430\u043b\u0442","background_image":"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u0437\u0443\u0440\u0430\u0433","background_color":"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u04e9\u043d\u0433\u04e9","text_none":"\u0431\u0430\u0439\u0445\u0433\u04af\u0439","text_blink":"\u0430\u043d\u0438\u0432\u0447\u0438\u043b\u0442","text_case":"\u0411\u0438\u0447\u0432\u044d\u0440","text_striketrough":"\u0434\u0430\u0440\u0441\u0430\u043d","text_underline":"\u0434\u043e\u043e\u0433\u0443\u0443\u0440 \u043d\u044c \u0437\u0443\u0440\u0441\u0430\u043d","text_overline":"\u0434\u044d\u044d\u0433\u04af\u04af\u0440 \u043d\u044c \u0437\u0443\u0440\u0441\u0430\u043d","text_decoration":"\u0427\u0438\u043c\u044d\u0433\u043b\u044d\u043b","text_color":"\u04e8\u043d\u0433\u04e9",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ms_dlg.js
new file mode 100644
index 000000000..518a3be20
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.style_dlg',{"text_lineheight":"Tinggi garisan","text_variant":"Varian","text_style":"Gaya","text_weight":"Beban","text_size":"Saiz","text_font":"Huruf","text_props":"Teks","positioning_tab":"Kedudukan","list_tab":"Senarai","border_tab":"Sempadan","box_tab":"Kotak","block_tab":"Landasan","background_tab":"Latar belakang","text_tab":"Teks",apply:"Guna",title:"Sunting Gaya CSS",clip:"Klip",placement:"Penempatan",overflow:"Limpahan",zindex:"Indeks-Z",visibility:"Kelihatan","positioning_type":"Jenis",position:"Posisi","bullet_image":"Imej peluru","list_type":"Jenis",color:"Warna",height:"Tinggi",width:"Lebar",style:"Gaya",margin:"Ruangan tepi",left:"Kiri",bottom:"Bawah",right:"Kanan",top:"Atas",same:"Samakan kesemuanya",padding:"Lapisan","box_clear":"Ruangan jelas","box_float":"Apungan","box_height":"Tinggi","box_width":"Lebar","block_display":"Pamer","block_whitespace":"Ruangan putih","block_text_indent":"Takukan teks","block_text_align":"Penjajaran teks","block_vertical_alignment":"Penjajaran tegak","block_letterspacing":"Jarak huruf","block_wordspacing":"Jarak perkataan","background_vpos":"Posisi tegak","background_hpos":"Posisi mengufuk","background_attachment":"Sisipan","background_repeat":"Ulangan","background_image":"Imej Latar","background_color":"Warna Latar","text_none":"tiada","text_blink":"kelip","text_case":"Kes","text_striketrough":"garis tengah","text_underline":"garis bawah","text_overline":"garis atas","text_decoration":"Dekorasi","text_color":"Warna",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/my_dlg.js
new file mode 100644
index 000000000..7634d8f40
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.style_dlg',{"text_lineheight":"\u1005\u102c\u1031\u103c\u1000\u102c\u1004\u103a\u1038 \u1021\u103c\u1019\u1004\u103a\u1037","text_variant":"\u1015\u1036\u102f\u1005\u1036\u1000\u103d\u1032","text_style":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1005\u1010\u102d\u102f\u1004\u103a","text_weight":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1021\u1011\u1030\u1021\u1015\u102b\u1038","text_size":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1021\u101b\u103d\u101a\u103a","text_font":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1031\u1016\u102c\u1004\u103a\u1037","text_props":"\u1005\u102c\u101e\u102c\u1038","positioning_tab":"\u1010\u100a\u103a\u1031\u1014\u101b\u102c","list_tab":"\u1005\u102c\u101b\u1004\u103a\u1038","border_tab":"\u1014\u101a\u103a\u1005\u100a\u103a\u1038","box_tab":"\u1015\u1036\u102f\u1038","block_tab":"\u1021\u1000\u103d\u1000\u103a","background_tab":"\u1031\u1014\u102c\u1000\u103a\u1001","text_tab":"\u1005\u102c\u101e\u102c\u1038",apply:"\u1021\u101e\u1036\u102f\u1038\u103c\u1015\u102f\u1019\u100a\u103a",title:"CSS \u1005\u1010\u102d\u102f\u1004\u103a \u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a",clip:"\u1000\u101c\u1005\u103a",placement:"\u1031\u1014\u101b\u102c\u1021\u1011\u102c\u1038\u1021\u101e\u102d\u102f",overflow:"\u101c\u103b\u103e\u1036\u1011\u103d\u1000\u103a\u1019\u103e\u102f",zindex:"Z-Index",visibility:"\u103c\u1019\u1004\u103a\u1014\u102d\u102f\u1004\u103a\u1005\u103d\u1019\u103a\u1038","positioning_type":"\u1021\u1019\u103b\u102d\u102f\u1038\u1021\u1005\u102c\u1038",position:"\u1010\u100a\u103a\u1031\u1014\u101b\u102c","bullet_image":"\u1021\u1019\u103e\u1010\u103a\u1021\u101e\u102c\u1038 \u101b\u102f\u1015\u103a\u1015\u1036\u102f","list_type":"\u1021\u1019\u102d\u103b\u102f\u1038\u1021\u1005\u102c\u1038",color:"\u1021\u1031\u101b\u102c\u1004\u103a",height:"\u1021\u103c\u1019\u1004\u103a\u1037",width:"\u1021\u1000\u103b\u101a\u103a",style:"\u1005\u1010\u102d\u102f\u1004\u103a",margin:"\u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038",left:"\u1018\u101a\u103a",bottom:"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001",right:"\u100a\u102c",top:"\u1021\u1011\u1000\u103a",same:"\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1021\u1010\u1030\u1010\u1030",padding:"\u1031\u1018\u1038\u1021\u1000\u102c\u1000\u103d\u1000\u103a\u101c\u1015\u103a","box_clear":"\u1015\u101a\u103a\u101b\u103e\u1004\u103a\u1038","box_float":"\u1031\u1019\u103b\u102c\u101c\u103d\u1004\u103a\u1037","box_height":"\u1021\u103c\u1019\u1004\u103a\u1037","box_width":"\u1021\u1000\u103b\u101a\u103a","block_display":"\u103c\u1015\u101e\u1015\u1036\u102f \u103c\u1019\u1004\u103a\u1000\u103d\u1004\u103a\u1038","block_whitespace":"\u1021\u103c\u1016\u1030\u1031\u101b\u102c\u1004\u103a\u1000\u103d\u1000\u103a\u101c\u1015\u103a","block_text_indent":"\u1005\u102c\u101e\u102c\u1038 Indent","block_text_align":"\u1005\u102c\u101e\u102c\u1038 \u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1015\u1036\u102f","block_vertical_alignment":"\u1031\u1012\u102b\u1004\u103a\u101c\u102d\u102f\u1000\u103a \u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f","block_letterspacing":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1021\u1000\u103d\u102c\u1021\u1031\u101d\u1038","block_wordspacing":"\u1005\u1000\u102c\u1038\u101c\u1036\u102f\u1038 \u1021\u1000\u103d\u102c\u1021\u1031\u101d\u1038","background_vpos":"\u1031\u1012\u102b\u1004\u103a\u101c\u102d\u102f\u1000\u103a \u1010\u100a\u103a\u1031\u1014\u101b\u102c","background_hpos":"\u1021\u101c\u103b\u102c\u1038\u101c\u102d\u102f\u1000\u103a \u1010\u100a\u103a\u1031\u1014\u101b\u102c","background_attachment":"\u1010\u103d\u1032\u1001\u103b\u102d\u1010\u103a\u1019\u103e\u102f","background_repeat":"\u103c\u1015\u1014\u103a\u1031\u1000\u103b\u102c\u1037","background_image":"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u101b\u102f\u1015\u103a\u1015\u1036\u102f","background_color":"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u1021\u1031\u101b\u102c\u1004\u103a","text_none":"\u1010\u1005\u103a\u1001\u102f\u1019\u103b\u103e\u1019\u101f\u102f\u1010\u103a","text_blink":"\u1019\u103e\u102d\u1010\u103a\u1010\u102f\u1010\u103a\u1019\u103e\u102d\u1010\u103a\u1010\u102f\u1010\u103a","text_case":"\u1031\u1000\u1037\u1005\u103a(\u1005\u102c\u101c\u1036\u102f\u1038\u1021\u103c\u1000\u102e\u1038\u1021\u1031\u101e\u1038)","text_striketrough":"\u103c\u1016\u1010\u103a\u1019\u103b\u1009\u103a\u1038","text_underline":"\u1031\u1021\u102c\u1000\u103a\u1019\u103b\u1009\u103a\u1038","text_overline":"\u1021\u1031\u1015\u102b\u103a\u1019\u103b\u1009\u103a\u1038","text_decoration":"\u1021\u101c\u103e\u1021\u1015\u1021\u103c\u1015\u1004\u103a\u1021\u1006\u1004\u103a","text_color":"\u1021\u1031\u101b\u102c\u1004\u103a",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nb_dlg.js
new file mode 100644
index 000000000..c17857477
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.style_dlg',{"text_lineheight":"Linjeh\u00f8yde","text_variant":"Variant","text_style":"Skriftstil","text_weight":"Skriftvekt","text_size":"Skriftst\u00f8rrelse","text_font":"Skrifttype","text_props":"Skriftegenskaper","positioning_tab":"Posisjon","list_tab":"Liste","border_tab":"Ramme","box_tab":"Boks","block_tab":"Blokk","background_tab":"Bakgrunn","text_tab":"Tekst",apply:"Legg til",title:"Rediger CSS-stil",clip:"Klipp",placement:"Plassering",overflow:"Overfyll",zindex:"Z-indeks",visibility:"Synlighet","positioning_type":"Type",position:"Posisjon","bullet_image":"Punktbilde","list_type":"Type",color:"Farge",height:"H\u00f8yde",width:"Bredde",style:"Stil",margin:"Marg",left:"Venstre",bottom:"Bunn",right:"H\u00f8yre",top:"Topp",same:"Lik i alle",padding:"Utfylling","box_clear":"Slett","box_float":"Flyt","box_height":"H\u00f8yde","box_width":"Bredde","block_display":"Framvising","block_whitespace":"Mellomrom","block_text_indent":"Innrykk","block_text_align":"Justering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Bokstavmellomrom","block_wordspacing":"Ordmellomrom","background_vpos":"Vertikal posisjon","background_hpos":"Horisontal posisjon","background_attachment":"Vedlegg","background_repeat":"Gjenta","background_image":"Bakgrunnsbilde","background_color":"Bakgrunnsfarge","text_none":"Ingen","text_blink":"Blink","text_case":"Store / sm\u00e5 bokstaver","text_striketrough":"Gjennomstreking","text_underline":"Senke skrift","text_overline":"Heve skrift","text_decoration":"Dekorasjon","text_color":"Farge",text:"Tekst",background:"Bakgrunn",block:"Blokk",box:"Boks",border:"Ramme",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nl_dlg.js
new file mode 100644
index 000000000..ad81f8f85
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.style_dlg',{"text_lineheight":"Lijnhoogte","text_variant":"Variant","text_style":"Stijl","text_weight":"Gewicht","text_size":"Tekengrootte","text_font":"Lettertype","text_props":"Tekst","positioning_tab":"Positionering","list_tab":"Lijst","border_tab":"Rand","box_tab":"Box","block_tab":"Blok","background_tab":"Achtergrond","text_tab":"Tekst",apply:"Toepassen",title:"CSS Stijl bewerken",clip:"Clip",placement:"Plaatsing",overflow:"Overvloeien",zindex:"Z-index",visibility:"Zichtbaarheid","positioning_type":"Type",position:"Positie","bullet_image":"Opsommingsteken","list_type":"Type",color:"Kleur",height:"Hoogte",width:"Breedte",style:"Stijl",margin:"Marge",left:"Links",bottom:"Onder",right:"Rechts",top:"Boven",same:"Alles hetzelfde",padding:"Opening","box_clear":"Vrijhouden","box_float":"Zweven","box_height":"Hoogte","box_width":"Breedte","block_display":"Weergave","block_whitespace":"Witruimte","block_text_indent":"Inspringen","block_text_align":"Tekstuitlijning","block_vertical_alignment":"Verticale uitlijning","block_letterspacing":"Letterruimte","block_wordspacing":"Woordruimte","background_vpos":"Verticale positie","background_hpos":"Horizontale positie","background_attachment":"Bijlage","background_repeat":"Herhalen","background_image":"Achtergrondafbeelding","background_color":"Achtergrondkleur","text_none":"Niets","text_blink":"Knipperen","text_case":"Hoofdlettergebruik","text_striketrough":"Doorhalen","text_underline":"Onderstrepen","text_overline":"Overhalen","text_decoration":"Decoratie","text_color":"Kleur",text:"Tekst",background:"Achtergrond",block:"Blok",box:"Box",border:"Rand",list:"Lijst"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nn_dlg.js
new file mode 100644
index 000000000..8b891c131
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.style_dlg',{"text_lineheight":"Linjeh\u00f8gd","text_variant":"Variant","text_style":"Skriftstil","text_weight":"Skriftvekt","text_size":"Skriftstorleik","text_font":"Skrifttype","text_props":"Eigenskapar for skrift","positioning_tab":"Posisjon","list_tab":"Liste","border_tab":"Ramme","box_tab":"Boks","block_tab":"Blokk","background_tab":"Bakgrunn","text_tab":"Tekst",apply:"Legg til",title:"Rediger CSS-stil",clip:"Klipp",placement:"Plassering",overflow:"Overfylt",zindex:"Z-indeks",visibility:"Synlegheit","positioning_type":"Type",position:"Posisjon","bullet_image":"Kulepunktbilete","list_type":"Type",color:"Farge",height:"H\u00f8gd",width:"Breidd",style:"Stil",margin:"Marg",left:"Venstre",bottom:"Bunn",right:"H\u00f8gre",top:"Topp",same:"Likt i alle",padding:"Utfylling","box_clear":"Slett","box_float":"Flyt","box_height":"H\u00f8gd","box_width":"Breidd","block_display":"Framsyning","block_whitespace":"Mellomrom","block_text_indent":"Innrykk","block_text_align":"Justering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Bokstavmellomrom","block_wordspacing":"Ordmellomrom","background_vpos":"Vertikal posisjon","background_hpos":"Horisontal posisjon","background_attachment":"Vedlegg","background_repeat":"Gjenta","background_image":"Bakgrunnsbilete","background_color":"Bakgrunnsfarge","text_none":"Ingen","text_blink":"Blink","text_case":"Kapitelar/minusklar","text_striketrough":"Gjennomstreking","text_underline":"Senka skrift","text_overline":"Heva skrift","text_decoration":"Dekorasjon","text_color":"Farge",text:"Tekst",background:"Bakgrunn",block:"Blokk",box:"Boks",border:"Ramme",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/no_dlg.js
new file mode 100644
index 000000000..5591c2f70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.style_dlg',{"text_lineheight":"Linjeh\u00f8yde","text_variant":"Variant","text_style":"Skriftstil","text_weight":"Skriftvekt","text_size":"Skriftst\u00f8rrelse","text_font":"Skrifttype","text_props":"Tekst","positioning_tab":"Posisjon","list_tab":"Liste","border_tab":"Ramme","box_tab":"Boks","block_tab":"Blokk","background_tab":"Bakgrunn","text_tab":"Tekst",apply:"Bruk",title:"Rediger CSS-stil",clip:"Klipp",placement:"Plassering",overflow:"Overfylt",zindex:"Z-indeks",visibility:"Synlighet","positioning_type":"Type",position:"Posisjon","bullet_image":"Punkt bilde","list_type":"Type",color:"Farge",height:"H\u00f8yde",width:"Bredde",style:"Stil",margin:"Marg",left:"Venstre",bottom:"Bunn",right:"H\u00f8yre",top:"Topp",same:"Likt for alle",padding:"Utfylling","box_clear":"Slette","box_float":"Flytende","box_height":"H\u00f8yde","box_width":"Bredde","block_display":"Visning","block_whitespace":"Mellomrom","block_text_indent":"Innrykk","block_text_align":"Justering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Bokstav mellomrom","block_wordspacing":"Mellomrom","background_vpos":"Vertikal posisjon","background_hpos":"Horisontal posisjon","background_attachment":"Vedlegg","background_repeat":"Repetere","background_image":"Bakgrunnsbilde","background_color":"Bakgrunnsfarge","text_none":"Ingen","text_blink":"Blinke","text_case":"Store/sm\u00e5 bokstaver","text_striketrough":"Gjennomstreke","text_underline":"Senke skrift","text_overline":"Heve skrift","text_decoration":"Dekorasjon","text_color":"Farge",text:"Tekst",background:"Bakgrunn",block:"Blokk",box:"Boks",border:"Ramme",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/pl_dlg.js
new file mode 100644
index 000000000..1dd01ce03
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.style_dlg',{"text_lineheight":"Wysoko\u015b\u0107 linii","text_variant":"Wariant","text_style":"Styl","text_weight":"Waga","text_size":"Rozmiar","text_font":"Wz\u00f3r czcionki","text_props":"Tekst","positioning_tab":"Pozycjonowanie","list_tab":"Lista","border_tab":"Obramowanie","box_tab":"Pud\u0142o (box)","block_tab":"Blok","background_tab":"T\u0142o","text_tab":"Text",apply:"Zastosuj",title:"Edytuj style CSS",clip:"Klip",placement:"Umieszczenie",overflow:"Przepe\u0142niony",zindex:"Z-index",visibility:"Widoczno\u015b\u0107","positioning_type":"Typ",position:"Pozycja","bullet_image":"Obrazek listy","list_type":"Typ",color:"Kolor",height:"Wysoko\u015b\u0107",width:"Szeroko\u015b\u0107",style:"Styl",margin:"Margines",left:"Lewy",bottom:"D\u00f3\u0142",right:"Prawy",top:"G\u00f3ra",same:"To samo dla wszystkich",padding:"Odst\u0119py","box_clear":"Op\u0142ywanie (Clear)","box_float":"Op\u0142ywanie (Float)","box_height":"Wysoko\u015b\u0107","box_width":"Szeroko\u015b\u0107","block_display":"Spos\u00f3b wy\u015bwietlania","block_whitespace":"Bia\u0142e znaki","block_text_indent":"Przesuni\u0119cie tekstu","block_text_align":"Wyr\u00f3wnanie tekstu","block_vertical_alignment":"Pionowe wyr\u00f3wnanie","block_letterspacing":"Odst\u0119p mi\u0119dzy literami","block_wordspacing":"Odst\u0119p mi\u0119dzy wyrazami","background_vpos":"Pozycja pionowa","background_hpos":"Pozycja pozioma","background_attachment":"Za\u0142\u0105cznik","background_repeat":"Powt\u00f3rz","background_image":"Obrazek t\u0142a","background_color":"Kolor t\u0142a","text_none":"\u017caden","text_blink":"miganie","text_case":"Znaki","text_striketrough":"przekre\u015blenie","text_underline":"podkre\u015blenie","text_overline":"nadkre\u015blenie","text_decoration":"Dekoracja","text_color":"Kolor",text:"Tekst",background:"T\u0142o",block:"Blok",box:"Pud\u0142o (box)",border:"Obramowanie",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ps_dlg.js
new file mode 100644
index 000000000..aa85aad72
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/pt_dlg.js
new file mode 100644
index 000000000..21c6b5e16
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.style_dlg',{"text_lineheight":"Altura da linha","text_variant":"Variante","text_style":"Estilo","text_weight":"Peso","text_size":"Tamanho","text_font":"Fonte","text_props":"Texto","positioning_tab":"Posicionamento","list_tab":"Lista","border_tab":"Limites","box_tab":"Caixa","block_tab":"Bloco","background_tab":"Fundo","text_tab":"Texto",apply:"Aplicar",title:"Editar CSS",clip:"Clip",placement:"Posicionamento",overflow:"Overflow",zindex:"Z-index",visibility:"Visibilidade","positioning_type":"Tipo",position:"Posi\u00e7\u00e3o","bullet_image":"Imagem de lista","list_type":"Tipo",color:"Cor",height:"Altura",width:"Largura",style:"Estilo",margin:"Margem",left:"Esquerda",bottom:"Abaixo",right:"Direita",top:"Topo",same:"O mesmo para todos",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Altura","box_width":"Largura","block_display":"Display","block_whitespace":"Espa\u00e7o","block_text_indent":"Indent","block_text_align":"Alinhamento de texto","block_vertical_alignment":"Alinhamento vertical","block_letterspacing":"Espa\u00e7amento de letras","block_wordspacing":"Espa\u00e7amento de palavras","background_vpos":"Posi\u00e7\u00e3o vertical","background_hpos":"Posi\u00e7\u00e3o horizontal","background_attachment":"Fixar","background_repeat":"Repetir","background_image":"Imagem de fundo","background_color":"Cor de fundo","text_none":"nenhum","text_blink":"Piscar","text_case":"Mai\u00fascula","text_striketrough":"Riscado","text_underline":"Sublinhado","text_overline":"Sobrelinha","text_decoration":"Decora\u00e7\u00e3o","text_color":"Cor",text:"Texto",background:"Fundo",block:"Bloco",box:"Caixa",border:"Borda",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ro_dlg.js
new file mode 100644
index 000000000..98a160574
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.style_dlg',{"text_lineheight":"\u00cen\u0103l\u021bime linie","text_variant":"Variant\u0103","text_style":"Stil","text_weight":"Greutate","text_size":"M\u0103rime","text_font":"Font","text_props":"Text","positioning_tab":"Pozi\u021bionare","list_tab":"List\u0103","border_tab":"Bordur\u0103","box_tab":"Box","block_tab":"Block","background_tab":"Fundal","text_tab":"Text",apply:"Aplic\u0103",title:"Editare CSS",clip:"Clip",placement:"Plasament",overflow:"Overflow",zindex:"Z-index",visibility:"Vizibilitate","positioning_type":"Tip",position:"Pozi\u021bionare","bullet_image":"Imagine","list_type":"Tip",color:"Culoare",height:"\u00cen\u0103l\u021bime",width:"L\u0103\u021bime",style:"Stil",margin:"Margini",left:"St\u00e2nga",bottom:"Jos",right:"Dreapta",top:"Sus",same:"La fel pentru toate",padding:"Margini interne","box_clear":"Normal\u0103","box_float":"Plutitoare","box_height":"\u00cen\u0103l\u021bime","box_width":"L\u0103\u0163ime","block_display":"Afi\u0219are","block_whitespace":"Spa\u0163iu alb","block_text_indent":"Indentare text","block_text_align":"Aliniere text","block_vertical_alignment":"Aliniere vertical\u0103","block_letterspacing":"Spa\u021biere litere","block_wordspacing":"Spa\u021biere cuvinte","background_vpos":"Pozi\u021bionare vertical\u0103","background_hpos":"Pozi\u021bionare orizontal\u0103","background_attachment":"Ata\u0219ament","background_repeat":"Repet\u0103","background_image":"Imagine fundal","background_color":"Culoare fundal","text_none":"Nici unul","text_blink":"Clipire","text_case":"Caz","text_striketrough":"T\u0103iere","text_underline":"Sub linie","text_overline":"Peste linie","text_decoration":"Decora\u021bii","text_color":"Culoare",text:"Text",background:"Fundal",block:"Bloc",box:"Cutie",border:"Bordur\u0103",list:"List\u0103"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ru_dlg.js
new file mode 100644
index 000000000..857077c93
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.style_dlg',{"text_lineheight":"\u0412\u044b\u0441\u043e\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0438","text_variant":"\u0412\u0430\u0440\u0438\u0430\u043d\u0442","text_style":"\u0421\u0442\u0438\u043b\u044c","text_weight":"\u0422\u043e\u043b\u0449\u0438\u043d\u0430","text_size":"\u0420\u0430\u0437\u043c\u0435\u0440","text_font":"\u0428\u0440\u0438\u0444\u0442","text_props":"\u0422\u0435\u043a\u0441\u0442","positioning_tab":"\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435","list_tab":"\u0421\u043f\u0438\u0441\u043e\u043a","border_tab":"\u0413\u0440\u0430\u043d\u0438\u0446\u0430","box_tab":"\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0424\u043e\u043d","text_tab":"\u0422\u0435\u043a\u0441\u0442",apply:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c",title:"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 CSS \u0441\u0442\u0438\u043b\u044f",clip:"\u041e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435",placement:"\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435",overflow:"\u041f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435",zindex:"Z-\u0438\u043d\u0434\u0435\u043a\u0441",visibility:"\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c","positioning_type":"\u0422\u0438\u043f",position:"\u041f\u043e\u0437\u0438\u0446\u0438\u044f","bullet_image":"\u041c\u0430\u0440\u043a\u0435\u0440","list_type":"\u0422\u0438\u043f",color:"\u0426\u0432\u0435\u0442",height:"\u0412\u044b\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",style:"\u0421\u0442\u0438\u043b\u044c",margin:"\u041e\u0442\u0441\u0442\u0443\u043f",left:"\u0421\u043b\u0435\u0432\u0430",bottom:"\u0421\u043d\u0438\u0437\u0443",right:"\u0421\u043f\u0440\u0430\u0432\u0430",top:"\u0412\u0432\u0435\u0440\u0445",same:"\u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445",padding:"\u041f\u043e\u043b\u044f","box_clear":"\u042f\u0432\u043d\u044b\u0439","box_float":"\u041f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u0439","box_height":"\u0412\u044b\u0441\u043e\u0442\u0430","box_width":"\u0428\u0438\u0440\u0438\u043d\u0430","block_display":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","block_whitespace":"\u041f\u0440\u043e\u0431\u0435\u043b","block_text_indent":"\u041e\u0442\u0441\u0442\u0443\u043f \u0442\u0435\u043a\u0441\u0442\u0430","block_text_align":"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","block_letterspacing":"\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u043c\u0435\u0436\u0434\u0443 \u0431\u0443\u043a\u0432\u0430\u043c\u0438","block_wordspacing":"\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u043e\u0432\u0430\u043c\u0438","background_vpos":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f","background_hpos":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f","background_attachment":"\u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430","background_repeat":"\u041f\u043e\u0432\u0442\u043e\u0440","background_image":"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","background_color":"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430","text_none":"\u0411\u0435\u0437 \u0432\u0441\u0435\u0433\u043e","text_blink":"\u041c\u0435\u0440\u0446\u0430\u044e\u0449\u0438\u0439","text_case":"\u0420\u0435\u0433\u0438\u0441\u0442\u0440","text_striketrough":"\u0417\u0430\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","text_underline":"\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","text_overline":"\u0421 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0435\u0440\u0442\u043e\u0439","text_decoration":"\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435","text_color":"\u0426\u0432\u0435\u0442",text:"\u0422\u0435\u043a\u0441\u0442",background:"\u0424\u043e\u043d",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430",list:"\u0421\u043f\u0438\u0441\u043e\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sc_dlg.js
new file mode 100644
index 000000000..b50719be3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u53d8\u4f53","text_style":"\u6837\u5f0f","text_weight":"\u5bbd\u5ea6","text_size":"\u5c3a\u5bf8","text_font":"\u5b57\u4f53","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u7bb1\u578b","block_tab":"\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5e94\u7528",title:"\u7f16\u8f91CSS\u6837\u5f0f\u8868\u5355",clip:"\u526a\u8f91",placement:"\u5e03\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z\u8f74\u6df1\u5ea6",visibility:"\u53ef\u89c1\u6027","positioning_type":"\u7c7b\u578b",position:"\u56fe\u793a\u4f4d\u7f6e","bullet_image":"\u4e13\u6848\u56fe\u793a","list_type":"\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",style:"\u6837\u5f0f",margin:"\u8fb9\u754c",left:"\u9760\u5de6",bottom:"\u4e0b\u65b9",right:"\u9760\u53f3",top:"\u4e0a\u65b9",same:"\u5168\u90e8\u4e00\u6837",padding:"\u7559\u767d","box_clear":"\u6e05\u9664","box_float":"\u6d6e\u52a8","box_height":"\u9ad8\u5ea6","box_width":"\u5bbd\u5ea6","block_display":"\u663e\u793a\u65b9\u5f0f","block_whitespace":"\u7a7a\u767d","block_text_indent":"\u6587\u5b57\u7f29\u6392","block_text_align":"\u6587\u5b57\u5bf9\u9f50","block_vertical_alignment":"\u6c34\u51c6\u5bf9\u9f50\u65b9\u5f0f","block_letterspacing":"\u5b57\u5143\u95f4\u8ddd","block_wordspacing":"\u5355\u5b57\u95f4\u8ddd","background_vpos":"\u6c34\u51c6\u4f4d\u7f6e","background_hpos":"\u5782\u76f4\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u4f53","text_striketrough":"\u5220\u9664\u7ebf","text_underline":"\u5e95\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u4fee\u9970","text_color":"\u989c\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/se_dlg.js
new file mode 100644
index 000000000..4927d6993
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.style_dlg',{"text_lineheight":"Radh\u00f6jd","text_variant":"Variant","text_style":"Stil","text_weight":"Tjocklek","text_size":"Storlek","text_font":"Typsnitt","text_props":"Text","positioning_tab":"Positionering","list_tab":"Listor","border_tab":"Ramar","box_tab":"Box","block_tab":"Block","background_tab":"Bakgrund","text_tab":"Text",apply:"Applicera",title:"Redigera inline CSS",clip:"Besk\u00e4rning",placement:"Placering",overflow:"\u00d6verfl\u00f6de",zindex:"Z-index",visibility:"Synlighet","positioning_type":"Positionstyp",position:"Position","bullet_image":"Punktbild","list_type":"Listtyp",color:"F\u00e4rg",height:"H\u00f6jd",width:"Bredd",style:"Stil",margin:"Marginal",left:"V\u00e4nster",bottom:"Botten",right:"H\u00f6ger",top:"Toppen",same:"Samma f\u00f6r alla",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"H\u00f6jd","box_width":"Bredd","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Textindrag","block_text_align":"Textjustering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Teckenmellanrum","block_wordspacing":"Ordavbrytning","background_vpos":"Vertikal position","background_hpos":"Horisontell position","background_attachment":"F\u00e4stpunkt","background_repeat":"Upprepning","background_image":"Bakgrundsbild","background_color":"Bakgrundsf\u00e4rg","text_none":"Inget","text_blink":"Blinka","text_case":"Sm\u00e5/stora","text_striketrough":"Genomstruken","text_underline":"Understruken","text_overline":"\u00d6verstruken","text_decoration":"Dekoration","text_color":"F\u00e4rg",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/si_dlg.js
new file mode 100644
index 000000000..3d6725022
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sk_dlg.js
new file mode 100644
index 000000000..d184cd34e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.style_dlg',{"text_lineheight":"V\u00fd\u0161ka riadkov","text_variant":"Varianta","text_style":"\u0160t\u00fdl textu","text_weight":"Tu\u010dnos\u0165 p\u00edsma","text_size":"Ve\u013ekos\u0165","text_font":"P\u00edsmo","text_props":"Text","positioning_tab":"Umiestnenie","list_tab":"Zoznam","border_tab":"Or\u00e1movanie","box_tab":"Box","block_tab":"Blok","background_tab":"Pozadie","text_tab":"Text",apply:"Pou\u017ei\u0165",title:"Upravi\u0165 CSS \u0161t\u00fdl",clip:"Orezanie (clip)",placement:"Umiestnenie",overflow:"Prete\u010denie (overflow)",zindex:"Z-index",visibility:"Vidite\u013enos\u0165","positioning_type":"Typ",position:"Umiestnenie","bullet_image":"\u0160t\u00fdl odr\u00e1\u017eok","list_type":"Typ",color:"Farba",height:"V\u00fd\u0161ka",width:"\u0160\u00edrka",style:"\u0160t\u00fdl",margin:"Okraje (margin)",left:"V\u013eavo",bottom:"Dole",right:"Vpravo",top:"Hore",same:"Rovnak\u00e9 pre v\u0161etky",padding:"Odsadenie (padding)","box_clear":"Vy\u010disti\u0165","box_float":"Pl\u00e1vaj\u00faci","box_height":"V\u00fd\u0161ka","box_width":"\u0160\u00edrka","block_display":"Blokov\u00e9 zobrazenie","block_whitespace":"Zalamovanie textu","block_text_indent":"Odsadenie textu","block_text_align":"Zarovnanie textu","block_vertical_alignment":"Vertik\u00e1lne zarovnanie","block_letterspacing":"Rozstup znakov","block_wordspacing":"Rozstup slov","background_vpos":"Vertik\u00e1lne umiestnenie","background_hpos":"Horizont\u00e1lne umiestnenie","background_attachment":"Rolovanie","background_repeat":"Opakovanie","background_image":"Obr\u00e1zok pozadia","background_color":"Farba pozadia","text_none":"\u017eiadna","text_blink":"blikanie","text_case":"Ve\u013ek\u00e9 p\u00edsmen\u00e1","text_striketrough":"pre\u010diarknutie","text_underline":"pod\u010diarknutie","text_overline":"nad\u010diarknutie","text_decoration":"Dekor\u00e1cia","text_color":"Farba",text:"Text",background:"Pozadie",block:"Blok",box:"Box",border:"Or\u00e1movanie",list:"Zoznam"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sl_dlg.js
new file mode 100644
index 000000000..e2b8f2e1d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.style_dlg',{"text_lineheight":"Vi\u0161ina vrstice","text_variant":"Razli\u010dica","text_style":"Slog","text_weight":"Ute\u017e","text_size":"Velikost","text_font":"Pisava","text_props":"Besedilo","positioning_tab":"Polo\u017eaj","list_tab":"Seznam","border_tab":"Obroba","box_tab":"Okvir","block_tab":"Blok","background_tab":"Ozadje","text_tab":"Besedilo",apply:"Uporabi",title:"Uredi sloge CSS",clip:"Obre\u017ei",placement:"Polo\u017eaj",overflow:"Prelivanje",zindex:"Z-indeks",visibility:"Vidnost","positioning_type":"Vrsta",position:"Polo\u017eaj","bullet_image":"Slika alineje","list_type":"Vrsta",color:"Barva",height:"Vi\u0161ina",width:"\u0160irina",style:"Slog",margin:"Rob",left:"Levo",bottom:"Spodaj",right:"Desno",top:"Zgoraj",same:"Enako za vse",padding:"Podlaganje","box_clear":"\u010cisto","box_float":"Plavojo\u010de","box_height":"Vi\u0161ina","box_width":"\u0160irina","block_display":"Prikaz","block_whitespace":"Beli prostor","block_text_indent":"Zamik besedila","block_text_align":"Poravnava besedila","block_vertical_alignment":"Navpi\u010dna poravnava","block_letterspacing":"Razmik znakov","block_wordspacing":"Razmik besed","background_vpos":"Navpi\u010dni polo\u017eaj","background_hpos":"Vodoravni polo\u017eaj","background_attachment":"Priponka","background_repeat":"Ponavljaj","background_image":"Slika ozadja","background_color":"Barva ozadja","text_none":"brez","text_blink":"utripajo\u010de","text_case":"Velikost","text_striketrough":"pre\u010drtano","text_underline":"pod\u010drtano","text_overline":"nad\u010drtano","text_decoration":"Dekoracija","text_color":"Barva",text:"Besedilo",background:"Ozadje",block:"Blok",box:"Okvir",border:"Obroba",list:"Seznam"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sq_dlg.js
new file mode 100644
index 000000000..01517670d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.style_dlg',{"text_lineheight":"Gjat\u00ebsia e linj\u00ebs","text_variant":"Varianti","text_style":"Stili","text_weight":"Pesha","text_size":"Madh\u00ebsia","text_font":"G\u00ebrma","text_props":"Teksti","positioning_tab":"Pozicionimi","list_tab":"Lista","border_tab":"Korniza","box_tab":"Kuti","block_tab":"Bllok","background_tab":"Sfondi","text_tab":"Teksti",apply:"Apliko",title:"Edito t\u00eb gjitha stilet",clip:"Prerja",placement:"Vendosja",overflow:"Mbivendosja",zindex:"Indeksi Z",visibility:"Shikueshm\u00ebria","positioning_type":"Tipi",position:"Pozicioni","bullet_image":"Foto e List\u00ebs","list_type":"Tipi",color:"Ngjyra",height:"Gjat\u00ebsia",width:"Gjer\u00ebsia",style:"Stili",margin:"Hap\u00ebsira",left:"Majtas",bottom:"Fund",right:"Djathtas",top:"Krye",same:"E nj\u00ebjt\u00eb p\u00ebr t\u00eb gjitha",padding:"Hap\u00ebsira e br\u00ebndshme","box_clear":"Pastro","box_float":"Pluskimi","box_height":"Gjat\u00ebsia","box_width":"Gjer\u00ebsia","block_display":"Shfaqja","block_whitespace":"Hap\u00ebsira bosh","block_text_indent":"Kryerradha","block_text_align":"Drejtimi i tekstit","block_vertical_alignment":"Drejtimi vertikal","block_letterspacing":"Hap\u00ebsira e g\u00ebrmave","block_wordspacing":"Hap\u00ebsira e fjal\u00ebve","background_vpos":"Pozicionimi vertikal","background_hpos":"Pozicionimi horizontal","background_attachment":"Bashk\u00ebngjitja","background_repeat":"P\u00ebrs\u00ebritja","background_image":"Foto e Sfondit","background_color":"Ngjyra e Sfondit","text_none":"Asnj\u00eb","text_blink":"Fik-Ndiz","text_case":"Madh\u00ebsia e g\u00ebrm\u00ebs","text_striketrough":"N\u00eb mes","text_underline":"N\u00ebn linj\u00eb","text_overline":"Mbi linj\u00eb","text_decoration":"Zbukurimi","text_color":"Ngjyra",text:"Teskt",background:"Sfondi",block:"Bllok",box:"Kuti",border:"Korniz\u00eb",list:"List\u00eb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sr_dlg.js
new file mode 100644
index 000000000..8765f5bc8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.style_dlg',{"text_lineheight":"Visina reda","text_variant":"Varijanta","text_style":"Oblik","text_weight":"Podebljanost","text_size":"Veli\u010dina","text_font":"Pismo","text_props":"Tekst","positioning_tab":"Pozicioniranje","list_tab":"Nabrajanje","border_tab":"Ivice","box_tab":"Okvir","block_tab":"Blok teksta","background_tab":"Pozadina","text_tab":"Tekst",apply:"Primeni",title:"Uredi CSS stil",clip:"Odsecanje (clip)",placement:"Postavljanje (placement)",overflow:"Prelivanje (overflow)",zindex:"Z-index",visibility:"Vidljivost","positioning_type":"Vrsta",position:"Pozicija","bullet_image":"Slika (za znak)","list_type":"Tip znaka",color:"Boja",height:"Visina",width:"\u0160irina",style:"Oblik",margin:"Margine",left:"Levo",bottom:"Dole",right:"Desno",top:"Gore",same:"Isto za sve",padding:"Dopuna (padding)","box_clear":"O\u010disti (clear)","box_float":"Pliva (float)","box_height":"Visina","box_width":"\u0160irina","block_display":"Prikaz (display)","block_whitespace":"Razmaci (white-space)","block_text_indent":"Uvla\u010denje teksta","block_text_align":"Poravnanje teksta","block_vertical_alignment":"Vertikalno poravnanje","block_letterspacing":"Razmak slova","block_wordspacing":"Razmak re\u010di","background_vpos":"Vertikalna pozicija","background_hpos":"Horizontalna pozicija","background_attachment":"Ka\u010denje","background_repeat":"Ponavljanje","background_image":"Slika u pozadini","background_color":"Boja pozadine","text_none":"ni\u0161ta","text_blink":"treperi","text_case":"Velika/Mala slova","text_striketrough":"precrtano","text_underline":"podvu\u010deno","text_overline":"nadvu\u010deno","text_decoration":"Dekoracija","text_color":"Boja",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sv_dlg.js
new file mode 100644
index 000000000..4a529541e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.style_dlg',{"text_lineheight":"Radh\u00f6jd","text_variant":"Variant","text_style":"Stil","text_weight":"Tjocklek","text_size":"Storlek","text_font":"Typsnitt","text_props":"Text","positioning_tab":"Positionering","list_tab":"Listor","border_tab":"Ramar","box_tab":"Box","block_tab":"Block","background_tab":"Bakgrund","text_tab":"Text",apply:"Applicera",title:"Redigera inline CSS",clip:"Besk\u00e4rning",placement:"Placering",overflow:"\u00d6\u0096verfl\u00f6de",zindex:"Z-index",visibility:"Synlighet","positioning_type":"Positionstyp",position:"Position","bullet_image":"Punktbild","list_type":"Listtyp",color:"F\u00e4rg",height:"H\u00f6jd",width:"Bredd",style:"Stil",margin:"Marginal",left:"V\u00e4nster",bottom:"Botten",right:"H\u00f6ger",top:"Toppen",same:"Samma f\u00f6r alla",padding:"Padding","box_clear":"Rensa","box_float":"Flyt","box_height":"H\u00f6jd","box_width":"Bredd","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Textindrag","block_text_align":"Textjustering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Teckenmellanrum","block_wordspacing":"Ordavbrytning","background_vpos":"Vertikal position","background_hpos":"Horisontell position","background_attachment":"F\u00e4stpunkt","background_repeat":"Upprepning","background_image":"Bakgrundsbild","background_color":"Bakgrundsf\u00e4rg","text_none":"Inget","text_blink":"Blinka","text_case":"Sm\u00e5/stora","text_striketrough":"Genomstruken","text_underline":"Understruken","text_overline":"\u00d6verstruken","text_decoration":"Dekoration","text_color":"F\u00e4rg",text:"Text",background:"Bakgrund",block:"Block",box:"Box",border:"Ram",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sy_dlg.js
new file mode 100644
index 000000000..d335f8019
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.style_dlg',{"text_lineheight":"\u072a\u0721\u0718\u072c\u0710 \u0715\u0723\u072a\u071b\u0710","text_variant":"\u072c\u071a\u0720\u0718\u0726\u0710","text_style":"\u0710\u0723\u071f\u071d\u0721\u0710","text_weight":"\u071d\u0718\u0729\u072a\u0710","text_size":"\u0721\u072b\u0718\u071a\u072c\u0710","text_font":"\u0723\u072a\u071b\u0710","text_props":"\u0728\u071a\u071a\u0710","positioning_tab":"\u0721\u072c\u0712\u0742\u072c\u0710","list_tab":"\u0720\u071d\u0723\u072c\u0710","border_tab":"\u072c\u071a\u0718\u0721\u0308\u0710","box_tab":"\u0728\u0722\u0715\u0718\u0729\u0710","block_tab":"\u0713\u0718\u072b\u0721\u0710","background_tab":"\u0712\u072c\u0742\u072a\u071d\u0718\u072c\u0742\u0710","text_tab":"\u0728\u071a\u071a\u0710",apply:"\u0721\u0726\u0720\u071a",title:"\u0723\u071d\u0721\u072c\u0710 \u0715\u0710\u0723\u071f\u071d\u0721\u0710 \u0715css",clip:"\u0729\u071d\u0728\u072c\u0710",placement:"\u0721\u072c\u0712\u0742\u072c\u0710",overflow:"\u072b\u0726\u071d\u0725\u0718\u072c\u0742\u0710",zindex:"\u0717\u0715\u071d\u0722\u0710\u0640z",visibility:"\u0729\u072a\u071d\u071a\u0718\u072c\u0710","positioning_type":"\u0710\u0715\u072b\u0710",position:"\u0715\u0718\u071f\u0710","bullet_image":"\u0728\u0718\u072a\u072c\u0710 \u0715\u0713\u0718\u0720\u0720\u0710","list_type":"\u0710\u0715\u072b\u0710",color:"\u0713\u0718\u0722\u0710",height:"\u072a\u0721\u0718\u072c\u0710",width:"\u0726\u072c\u0742\u071d\u0718\u072c\u0742\u0710",style:"\u0710\u0723\u071f\u071d\u0721\u0710",margin:"\u0723\u0726\u072c\u0742\u0710",left:"\u0723\u0721\u0720\u0710",bottom:"\u072b\u072c\u0710",right:"\u071d\u0721\u071d\u0722\u0710",top:"\u0729\u072a\u0729\u0726\u072c\u0710",same:"\u0717\u072a \u0717\u0307\u0718 \u0720\u071f\u0720\u071d\u0717\u071d",padding:"\u0726\u072c\u071d\u071a\u0718\u072c \u0723\u072a\u0308\u071b\u0710","box_clear":"\u0721\u072b\u071d\u072c\u0710","box_float":"\u071b\u071d\u0726\u072c\u0710","box_height":"\u072a\u0721\u0718\u072c\u0710","box_width":"\u0726\u072c\u071d\u0718\u072c\u0710","block_display":"\u0721\u071a\u0719\u071d\u072c\u0710","block_whitespace":"\u0723\u0726\u071d\u0729\u0718\u072c\u0710 \u071a\u0718\u072a\u072c\u0710","block_text_indent":"\u0723\u0726\u071d\u0729\u0718\u072c\u0710 \u0729\u0715\u0721\u0721 \u0728\u071a\u071a\u0710","block_text_align":"\u0721\u0713\u0330\u072a\u0713\u0722\u072c\u0710 \u0715\u0728\u071a\u071a\u0710","block_vertical_alignment":"\u0721\u0713\u0330\u072a\u0713\u0722\u072c\u0710 \u0725\u0721\u0718\u0715\u071d\u072c\u0710","block_letterspacing":"\u0723\u0726\u071d\u0729\u0718\u072c\u0710 \u0712\u071d\u0722\u072c \u0710\u072c\u0718\u072c\u0308\u0710","block_wordspacing":"\u0723\u0726\u071d\u0729\u0718\u072c\u0710 \u0712\u071d\u0722\u072c \u0721\u0720\u0308\u0710","background_vpos":"\u072b\u0718\u0726\u0710 \u0725\u0721\u0718\u0715\u071d\u0710","background_hpos":"\u072b\u0718\u0726\u0710 \u0710\u0718\u0726\u0729\u071d\u0710","background_attachment":"\u0710\u0747\u0723\u071d\u072a\u0718\u072c\u0710","background_repeat":"\u072c\u0722\u071d\u072c\u0710","background_image":"\u0728\u0718\u072a\u072c\u0710 \u0715\u071a\u072a\u071d\u0718\u072c\u0710","background_color":"\u0713\u0718\u0722\u0710 \u0715\u071a\u072a\u071d\u0718\u072c\u0710","text_none":"\u0717\u071d\u071f\u0330 \u071a\u0715","text_blink":"\u0719\u0720\u0713\u0710","text_case":"\u0722\u0729\u071d\u0726\u0718\u072c\u0710","text_striketrough":"\u0723\u072a\u071b\u0710 \u0712\u0713\u0718","text_underline":"\u072c\u071a\u0718\u072c \u0723\u072a\u071b\u0710","text_overline":"\u0725\u0720 \u0723\u072a\u071b\u0710","text_decoration":"\u072b\u0726\u072a\u0722\u072c\u0710","text_color":"\u0713\u0718\u0722\u0710",text:"\u0728\u071a\u071a\u0710",background:"\u071a\u072a\u071d\u0718\u072c\u0710",block:"\u0713\u0718\u072b\u0721\u0710",box:"\u0728\u0722\u0715\u0718\u0729\u0710",border:"\u072c\u071a\u0718\u0721\u0308\u0710",list:"\u0720\u071d\u0723\u072c\u0710"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ta_dlg.js
new file mode 100644
index 000000000..4968e4563
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/te_dlg.js
new file mode 100644
index 000000000..176d6eb83
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/th_dlg.js
new file mode 100644
index 000000000..264f85ada
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.style_dlg',{"text_lineheight":"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14","text_variant":"Variant","text_style":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","text_weight":"\u0e19\u0e49\u0e33\u0e2b\u0e19\u0e31\u0e01","text_size":"\u0e02\u0e19\u0e32\u0e14","text_font":"\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23","text_props":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","positioning_tab":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07","list_tab":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23","border_tab":"\u0e02\u0e2d\u0e1a","box_tab":"\u0e01\u0e25\u0e48\u0e2d\u0e07","block_tab":"Block","background_tab":"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07","text_tab":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21",apply:"\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19",title:"\u0e41\u0e01\u0e49\u0e44\u0e02\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a CSS",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"\u0e2a\u0e35",height:"\u0e2a\u0e39\u0e07",width:"\u0e01\u0e27\u0e49\u0e32\u0e07",style:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",margin:"Margin",left:"\u0e0b\u0e49\u0e32\u0e22",bottom:"\u0e25\u0e48\u0e32\u0e07",right:"\u0e02\u0e27\u0e32",top:"\u0e1a\u0e19",same:"Same for all",padding:"Padding","box_clear":"\u0e25\u0e49\u0e32\u0e07","box_float":"\u0e25\u0e2d\u0e22","box_height":"\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e39\u0e07","box_width":"\u0e04\u0e27\u0e32\u0e21\u0e01\u0e27\u0e49\u0e32\u0e07","block_display":"\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25","block_whitespace":"Whitespace","block_text_indent":"\u0e22\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","block_text_align":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","block_vertical_alignment":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07","block_letterspacing":"\u0e40\u0e27\u0e49\u0e19\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e0a\u0e48\u0e2d\u0e07\u0e44\u0e1f","block_wordspacing":"\u0e40\u0e27\u0e49\u0e19\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e04\u0e33","background_vpos":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07","background_hpos":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19","background_attachment":"\u0e2a\u0e34\u0e48\u0e07\u0e17\u0e35\u0e48\u0e41\u0e19\u0e1a","background_repeat":"\u0e0b\u0e49\u0e33","background_image":"\u0e23\u0e39\u0e1b\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07","background_color":"\u0e2a\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07","text_none":"\u0e44\u0e21\u0e48\u0e21\u0e35","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"\u0e02\u0e35\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e43\u0e15\u0e49","text_overline":"overline","text_decoration":"Decoration","text_color":"\u0e2a\u0e35",text:"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21",background:"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07",box:"\u0e01\u0e25\u0e48\u0e2d\u0e07",border:"\u0e02\u0e2d\u0e1a",list:"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23",block:"Block"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tn_dlg.js
new file mode 100644
index 000000000..0b6191af9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tr_dlg.js
new file mode 100644
index 000000000..bc12209f3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.style_dlg',{"text_lineheight":"\u00c7izgi y\u00fcksekli\u011fi","text_variant":"De\u011fi\u015fken","text_style":"Stil","text_weight":"Kal\u0131nl\u0131k","text_size":"Boyut","text_font":"Yaz\u0131 tipi","text_props":"Metin","positioning_tab":"Konumland\u0131rma","list_tab":"Listele","border_tab":"Kenarl\u0131k","box_tab":"Kutu","block_tab":"Blok","background_tab":"Arkaplan","text_tab":"Metin",apply:"Uygula",title:"CSS Stilini D\u00fczenle",clip:"K\u0131rp",placement:"Yerle\u015ftir",overflow:"Ta\u015fma",zindex:"Z-indeksi",visibility:"G\u00f6r\u00fcn\u00fcrl\u00fck","positioning_type":"Tip",position:"Konum","bullet_image":"Madde imi resmi","list_type":"Tip",color:"Renk",height:"Y\u00fckseklik",width:"Geni\u015flik",style:"Stil",margin:"Kenar bo\u015flu\u011fu",left:"Sol",bottom:"Alt",right:"Sa\u011f",top:"\u00dcst",same:"T\u00fcm\u00fc i\u00e7in",padding:"Dolgu","box_clear":"Serbest","box_float":"Kayan","box_height":"Y\u00fckseklik","box_width":"Geni\u015flik","block_display":"G\u00f6r\u00fcnt\u00fcle","block_whitespace":"Bo\u015fluk","block_text_indent":"Metnin girintisini art\u0131r","block_text_align":"Metin hizala","block_vertical_alignment":"Dikey hizalama","block_letterspacing":"harf bo\u015flu\u011fu","block_wordspacing":"Kelime bo\u015flu\u011fu","background_vpos":"Dikey konum","background_hpos":"Yatay konum","background_attachment":"Eklenti","background_repeat":"Tekrarla","background_image":"Arkaplan resmi","background_color":"Arkaplan rengi","text_none":"hi\u00e7biri","text_blink":"yan\u0131p s\u00f6nen","text_case":"Ko\u015ful","text_striketrough":"\u00fcst\u00fc \u00e7izgili","text_underline":"alt \u00e7izgi","text_overline":"\u00fcst \u00e7izgi","text_decoration":"Dekorasyon","text_color":"Renk",text:"Yaz\u0131",background:"Arkaplan",block:"Blok",box:"Kutu",border:"S\u0131n\u0131r",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tt_dlg.js
new file mode 100644
index 000000000..0bf4675ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u8b8a\u9ad4","text_style":"\u6a23\u5f0f","text_weight":"\u5bec\u5ea6","text_size":"\u5927\u5c0f","text_font":"\u5b57\u9ad4","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u908a\u6846","box_tab":"\u76d2\u6a21\u578b","block_tab":"\u5340\u584a","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u61c9\u7528",title:"\u7de8\u8f2f CSS \u6a23\u5f0f\u8868",clip:"\u526a\u8f2f",placement:"\u4f48\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z\u5ea7\u6a19",visibility:"\u662f\u5426\u53ef\u898b","positioning_type":"\u4f4d\u7f6e\u985e\u578b",position:"\u5716\u7247\u4f4d\u7f6e","bullet_image":"\u6e05\u55ae\u5716\u7247","list_type":"\u5217\u8868\u985e\u578b",color:"\u9854\u8272",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",style:"\u6a23\u5f0f",margin:"\u908a\u8ddd",left:"\u5de6\u5074",bottom:"\u5e95\u90e8",right:"\u53f3\u5074",top:"\u9802\u90e8",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5167\u908a\u8ddd","box_clear":"\u6e05\u9664","box_float":"\u6d6e\u52d5","box_height":"\u9ad8\u5ea6","box_width":"\u5bec\u5ea6","block_display":"\u986f\u793a\u65b9\u5f0f","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7e2e\u6392","block_text_align":"\u6587\u5b57\u5c0d\u9f4a","block_vertical_alignment":"\u5782\u76f4\u5c0d\u9f4a\u65b9\u5f0f","block_letterspacing":"\u5b57\u6bcd\u9593\u8ddd","block_wordspacing":"\u8a5e\u9593\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u5fa9","background_image":"\u80cc\u666f\u5716\u7247","background_color":"\u80cc\u666f\u9854\u8272","text_none":"\u7121","text_blink":"\u9583\u720d","text_case":"\u5b57\u9ad4","text_striketrough":"\u4e2d\u5283\u7dda","text_underline":"\u5e95\u7dda","text_overline":"\u4e0a\u5283\u7dda","text_decoration":"\u88dd\u98fe","text_color":"\u9854\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tw_dlg.js
new file mode 100644
index 000000000..0581023fb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u8b8a\u9ad4","text_style":"\u6a23\u5f0f","text_weight":"\u5b57\u5bec","text_size":"\u5b57\u578b\u5927\u5c0f","text_font":"\u5b57\u9ad4","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u908a\u6846","box_tab":"\u65b9\u584a","block_tab":"\u5340\u584a","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5957\u7528",title:"\u7de8\u8f2f CSS \u6a23\u5f0f\u8868",clip:"\u526a\u8f2f",placement:"\u4f48\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z-\u5750\u6a19",visibility:"\u53ef\u898b","positioning_type":"\u985e\u578b",position:"\u4f4d\u7f6e","bullet_image":"\u5716\u7247\u9805\u76ee\u7b26\u865f","list_type":"\u985e\u578b\u5217\u8868",color:"\u984f\u8272",height:"\u9ad8",width:"\u5bec",style:"\u6a23\u5f0f",margin:"\u5916\u908a\u8ddd",left:"\u5de6\u5074",bottom:"\u9760\u4e0b",right:"\u53f3\u5074",top:"\u9802\u90e8",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5167\u908a\u8ddd","box_clear":"\u6e05\u9664\u6d6e\u52d5","box_float":"\u6d6e\u52d5","box_height":"\u9ad8","box_width":"\u5bec","block_display":"\u986f\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7e2e\u6392","block_text_align":"\u6587\u5b57\u5c0d\u9f4a","block_vertical_alignment":"\u5782\u76f4\u5c0d\u9f4a","block_letterspacing":"\u5b57\u6bcd\u9593\u8ddd","block_wordspacing":"\u8a5e\u9593\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u8907","background_image":"\u80cc\u666f\u5716\u7247","background_color":"\u80cc\u666f\u984f\u8272","text_none":"\u7121","text_blink":"\u9583\u720d","text_case":"\u5b57\u578b","text_striketrough":"\u522a\u9664\u7dda","text_underline":"\u5e95\u7dda","text_overline":"\u4e0a\u5283\u7dda","text_decoration":"\u88dd\u98fe","text_color":"\u984f\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/uk_dlg.js
new file mode 100644
index 000000000..4c07a44c7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.style_dlg',{"text_lineheight":"\u0412\u0438\u0441\u043e\u0442\u0430 \u0440\u044f\u0434\u043a\u0443","text_variant":"\u0412\u0430\u0440\u0456\u0430\u043d\u0442","text_style":"\u0421\u0442\u0438\u043b\u044c","text_weight":"\u0422\u043e\u0432\u0449\u0438\u043d\u0430","text_size":"\u0420\u043e\u0437\u043c\u0456\u0440","text_font":"\u0428\u0440\u0438\u0444\u0442","text_props":"\u0422\u0435\u043a\u0441\u0442","positioning_tab":"\u041f\u043e\u0437\u0438\u0446\u0456\u043e\u043d\u0443\u0432\u0430\u043d\u043d\u044f","list_tab":"\u0421\u043f\u0438\u0441\u043e\u043a","border_tab":"\u0420\u0430\u043c\u043a\u0430","box_tab":"\u042f\u0449\u0438\u043a(box)","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0424\u043e\u043d","text_tab":"\u0422\u0435\u043a\u0441\u0442",apply:"\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438",title:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f CSS \u0441\u0442\u0438\u043b\u044e",clip:"\u0421\u043a\u0440\u0456\u043f\u043b\u0435\u043d\u043d\u044f",placement:"\u0420\u043e\u0437\u043c\u0456\u0449\u0435\u043d\u043d\u044f",overflow:"\u041f\u0435\u0440\u0435\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f",zindex:"Z-\u0456\u043d\u0434\u0435\u043a\u0441",visibility:"\u0412\u0438\u0434\u0438\u043c\u0456\u0441\u0442\u044c","positioning_type":"\u0422\u0438\u043f",position:"\u041f\u043e\u0437\u0438\u0446\u0456\u044f","bullet_image":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u043d\u0430\u0447\u043a\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0443","list_type":"\u0422\u0438\u043f",color:"\u041a\u043e\u043b\u0456\u0440",height:"\u0412\u0438\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",style:"\u0421\u0442\u0438\u043b\u044c",margin:"Margin",left:"\u041b\u0456\u0432\u043e\u0440\u0443\u0447",bottom:"\u0417\u043d\u0438\u0437\u0443",right:"\u041f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",top:"\u0412\u0433\u043e\u0440\u0443",same:"\u041e\u0434\u043d\u0430\u043a\u043e\u0435 \u0434\u043b\u044f \u0432\u0441\u0456\u0445",padding:"\u0412\u043d\u0443\u0442\u0440\u0456\u0448\u043d\u0456\u0439 \u0432\u0456\u0434\u0441\u0442\u0443\u043f","box_clear":"\u041e\u0447\u0438\u0441\u0442\u043a\u0430","box_float":"\u041f\u043b\u0430\u0432\u0430\u043d\u043d\u044f","box_height":"\u0412\u0438\u0441\u043e\u0442\u0430","box_width":"\u0428\u0438\u0440\u0438\u043d\u0430","block_display":"\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u0438","block_whitespace":"\u041f\u0440\u043e\u0431\u0456\u043b","block_text_indent":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f","block_text_align":"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","block_letterspacing":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438 \u043c\u0456\u0436 \u043b\u0456\u0442\u0435\u0440\u0430\u043c\u0438","block_wordspacing":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438 \u043c\u0456\u0436 \u0441\u043b\u043e\u0432\u0430\u043c\u0438","background_vpos":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0456\u044f","background_hpos":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0456\u044f","background_attachment":"\u0412\u043a\u043b\u0430\u0434\u0435\u043d\u043d\u044f","background_repeat":"\u041f\u043e\u0432\u0442\u043e\u0440","background_image":"\u0424\u043e\u043d\u043e\u0432\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","background_color":"\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443","text_none":"\u041d\u0456\u0447\u043e\u0433\u043e","text_blink":"\u041c\u0435\u0440\u0435\u0445\u0442\u0456\u043d\u043d\u044f","text_case":"\u0420\u0435\u0433\u0456\u0441\u0442\u0440","text_striketrough":"\u0417\u0430\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","text_underline":"\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","text_overline":"\u041d\u0430\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","text_decoration":"\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f","text_color":"\u041a\u043e\u043b\u0456\u0440",text:"\u0422\u0435\u043a\u0441\u0442",background:"\u0424\u043e\u043d",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0456",list:"\u0421\u043f\u0438\u0441\u043e\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ur_dlg.js
new file mode 100644
index 000000000..60c39b577
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/vi_dlg.js
new file mode 100644
index 000000000..ee7136b66
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.style_dlg',{"text_lineheight":"Chi\u1ec1u cao \u0111\u01b0\u1eddng","text_variant":"Bi\u1ebfn \u0111\u1ed5i","text_style":"Ki\u1ec3u d\u00e1ng","text_weight":"Tr\u1ecdng l\u01b0\u1ee3ng","text_size":"K\u00edch c\u1ee1","text_font":"Ph\u00f4ng","text_props":"V\u0103n b\u1ea3n","positioning_tab":"V\u1ecb tr\u00ed","list_tab":"Danh s\u00e1ch","border_tab":"Vi\u1ec1n","box_tab":"H\u1ed9p","block_tab":"Kh\u1ed1i","background_tab":"N\u1ec1n","text_tab":"V\u0103n b\u1ea3n",apply:"\u00c1p d\u1ee5ng",title:"S\u1eeda ki\u1ec3u d\u00e1ng CSS",clip:"Ghim",placement:"S\u1eafp \u0111\u1eb7t",overflow:"Tr\u00e0n",zindex:"Ch\u1ec9 m\u1ee5c Z",visibility:"Nh\u00ecn th\u1ea5y","positioning_type":"Ki\u1ec3u",position:"V\u1ecb tr\u00ed","bullet_image":"\u1ea2nh Bullet","list_type":"Ki\u1ec3u",color:"M\u00e0u",height:"Chi\u1ec1u cao",width:"Chi\u1ec1u r\u1ed9ng",style:"Ki\u1ec3u",margin:"Bi\u00ean",left:"Tr\u00e1i",bottom:"D\u01b0\u1edbi",right:"Ph\u1ea3i",top:"Tr\u00ean",same:"\u00c1p d\u1ee5ng cho t\u1ea5t c\u1ea3",padding:"\u0110\u1ec7m l\u00f3t","box_clear":"L\u00e0m s\u1ea1ch","box_float":"N\u1ed5i","box_height":"Chi\u1ec1u cao","box_width":"Chi\u1ec1u r\u1ed9ng","block_display":"Hi\u1ec3n th\u1ecb","block_whitespace":"Kho\u1ea3ng tr\u1eafng","block_text_indent":"Th\u1ee5t d\u00f2ng v\u0103n b\u1ea3n","block_text_align":"Canh l\u1ec1 v\u0103n b\u1ea3n","block_vertical_alignment":"Canh l\u1ec1 d\u1ecdc","block_letterspacing":"Kho\u1ea3ng c\u00e1c k\u00fd t\u1ef1","block_wordspacing":"Kho\u1ea3ng c\u00e1c t\u1eeb","background_vpos":"V\u1ecb tr\u00ed d\u1ecdc","background_hpos":"V\u1ecb tr\u00ed ngang","background_attachment":"\u0110\u00ednh k\u00e8m","background_repeat":"L\u1eb7p l\u1ea1i","background_image":"\u1ea2nh n\u1ec1n","background_color":"M\u00e0u n\u1ec1n","text_none":"kh\u00f4ng","text_blink":"nh\u1ea5p nh\u00e1y","text_case":"Bo\u0323c","text_striketrough":"g\u1ea1ch xuy\u00ean","text_underline":"g\u1ea1ch d\u01b0\u1edbi","text_overline":"g\u1ea1ch tr\u00ean","text_decoration":"Trang tr\u00ed","text_color":"M\u00e0u",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..c5fc08b1f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u53d8\u5f62","text_style":"\u6837\u5f0f","text_weight":"\u7c97\u7ec6","text_size":"\u5927\u5c0f","text_font":"\u5b57\u4f53","text_props":"\u6587\u672c","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"Box","block_tab":"\u533a\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u672c",apply:"\u5e94\u7528",title:"\u7f16\u8f91CSS\u6837\u5f0f",clip:"\u526a\u8f91",placement:"\u653e\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z-Index",visibility:"\u53ef\u89c1","positioning_type":"\u7c7b\u578b",position:"\u4f4d\u7f6e","bullet_image":"\u56fe\u7247\u9879\u76ee\u7b26\u53f7","list_type":"\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",style:"\u6837\u5f0f",margin:"\u5916\u8fb9\u8ddd",left:"\u5de6",bottom:"\u4e0b",right:"\u53f3",top:"\u4e0a",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5185\u8fb9\u8ddd","box_clear":"\u6e05\u9664\u6d6e\u52a8","box_float":"\u6d6e\u52a8","box_height":"\u9ad8\u5ea6","box_width":"\u5bbd\u5ea6","block_display":"\u663e\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7f29\u6392","block_text_align":"\u6587\u5b57\u5bf9\u9f50","block_vertical_alignment":"\u5782\u76f4\u5bf9\u9f50","block_letterspacing":"\u5b57\u95f4\u8ddd","block_wordspacing":"\u8bcd\u95f4\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u4f53\u5f62\u5f0f","text_striketrough":"\u5220\u9664\u7ebf","text_underline":"\u4e0b\u5212\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u5b57\u4f53\u88c5\u9970","text_color":"\u989c\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..22774ebd7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.style_dlg',{"text_lineheight":"\u6587\u5b57\u884c\u9ad8","text_variant":"\u7279\u6b8a\u5b57\u9ad4","text_style":"\u6a23\u5f0f","text_weight":"\u5b57\u9ad4\u7c97\u7d30","text_size":"\u5b57\u9ad4\u5927\u5c0f","text_font":"\u5b57\u9ad4","text_props":"\u5b57\u578b","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u908a\u6846","box_tab":"\u65b9\u584a","block_tab":"\u5340\u584a","background_tab":"\u80cc\u666f","text_tab":"\u5b57\u578b",apply:"\u5957\u7528",title:"\u7de8\u8f2f CSS \u6a23\u5f0f",clip:"\u526a\u8f2f",placement:"\u653e\u7f6e",overflow:"\u5377\u8ef8\u8a2d\u5b9a (Overflow)",zindex:"Z \u8ef8",visibility:"\u80fd\u898b\u5ea6","positioning_type":"\u5f62\u5f0f",position:"\u4f4d\u7f6e","bullet_image":"\u9805\u76ee\u7b26\u865f (\u6709\u5716\u7247)","list_type":"\u5f62\u5f0f",color:"\u984f\u8272",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",style:"\u6a23\u5f0f",margin:"\u908a\u8ddd",left:"\u5de6\u908a",bottom:"\u4e0b\u65b9",right:"\u53f3\u908a",top:"\u4e0a\u65b9",same:"\u5168\u90e8\u4e00\u6a23",padding:"\u5167\u8ddd","box_clear":"\u79fb\u9664\u6d6e\u52d5\u6548\u679c","box_float":"\u6d6e\u52d5\u6548\u679c","box_height":"\u9ad8\u5ea6","box_width":"\u9ad8\u5ea6","block_display":"\u986f\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7e2e\u6392","block_text_align":"\u6587\u5b57\u5c0d\u9f4a","block_vertical_alignment":"\u5782\u76f4\u5c0d\u9f4a","block_letterspacing":"\u6587\u5b57\u9593\u9694","block_wordspacing":"\u5b57\u8a5e\u9593\u9694","background_vpos":"\u5782\u76f4","background_hpos":"\u6c34\u5e73","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u8907","background_image":"\u80cc\u666f\u5716\u7247","background_color":"\u80cc\u666f\u984f\u8272","text_none":"\u7121","text_blink":"\u9583\u720d\u6548\u679c","text_case":"\u5b57\u9ad4\u6a23\u5f0f","text_striketrough":"\u522a\u9664\u7dda","text_underline":"\u5e95\u7dda","text_overline":"\u4e00\u689d\u7dda\u5728\u4e0a\u9762","text_decoration":"\u7dda\u689d\u6a23\u5f0f","text_color":"\u984f\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh_dlg.js
new file mode 100644
index 000000000..3e8b7c367
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u7279\u6b8a\u5b57\u4f53","text_style":"\u6837\u5f0f","text_weight":"\u7c97\u4f53","text_size":"\u5b57\u4f53\u5927\u5c0f","text_font":"\u5b57\u4f53","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u65b9\u5757","block_tab":"\u533a\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5e94\u7528",title:"\u7f16\u8f91CSS\u6837\u5f0f",clip:"\u526a\u8f91",placement:"\u653e\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z-\u5ea7\u6807",visibility:"\u53ef\u89c1","positioning_type":"\u7c7b\u578b",position:"\u4f4d\u7f6e","bullet_image":"\u56fe\u7247\u9879\u76ee\u7b26\u53f7","list_type":"\u5217\u8868\u7c7b\u578b",color:"\u984f\u8272",height:"\u9ad8",width:"\u5bec",style:"\u6a23\u5f0f",margin:"\u5916\u908a\u8ddd",left:"\u5de6\u5074",bottom:"\u4e0b\u5074",right:"\u53f3\u5074",top:"\u4e0a\u5074",same:"\u4e00\u81f4",padding:"\u5167\u908a\u8ddd","box_clear":"\u6e05\u9664\u6d6e\u52d5","box_float":"\u6d6e\u52d5","box_height":"\u9ad8","box_width":"\u5bec","block_display":"\u986f\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7e2e\u6392","block_text_align":"\u6587\u5b57\u5c0d\u9f4a","block_vertical_alignment":"\u5782\u76f4\u5c0d\u9f4a","block_letterspacing":"\u5b57\u6bcd\u9593\u8ddd","block_wordspacing":"\u9593\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u8986","background_image":"\u80cc\u666f\u5716\u7247","background_color":"\u80cc\u666f\u984f\u8272","text_none":"\u7121","text_blink":"\u9583\u720d","text_case":"\u5b57\u578b","text_striketrough":"\u522a\u9664\u7dda","text_underline":"\u5e95\u7dda","text_overline":"\u4e0a\u5283\u7dda","text_decoration":"\u88dd\u98fe","text_color":"\u984f\u8272",text:"\u6587\u5b57",background:"\u80cc\u666f",block:"\u5206\u6bb5",box:"\u5323\u5b50",border:"\u908a\u6846",list:"\u5217\u8868"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zu_dlg.js
new file mode 100644
index 000000000..cc07dd1f3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u53d8\u4f53","text_style":"\u6837\u5f0f","text_weight":"\u5bbd\u5ea6","text_size":"\u5c3a\u5bf8","text_font":"\u5b57\u4f53","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u7bb1\u578b","block_tab":"\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5e94\u7528",title:"\u7f16\u8f91CSS\u6837\u5f0f\u8868",clip:"\u526a\u8f91",placement:"\u5e03\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z\u8f74\u6df1\u5ea6",visibility:"\u53ef\u89c1\u6027","positioning_type":"\u7c7b\u578b",position:"\u56fe\u793a\u4f4d\u7f6e","bullet_image":"\u9879\u76ee\u56fe\u793a","list_type":"\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",style:"\u6837\u5f0f",margin:"\u8fb9\u754c",left:"\u9760\u5de6",bottom:"\u4e0b\u65b9",right:"\u9760\u53f3",top:"\u4e0a\u65b9",same:"\u5168\u90e8\u4e00\u6837",padding:"\u7559\u767d","box_clear":"\u6e05\u9664","box_float":"\u6d6e\u52a8","box_height":"\u9ad8\u5ea6","box_width":"\u5bbd\u5ea6","block_display":"\u663e\u793a\u65b9\u5f0f","block_whitespace":"\u7a7a\u767d","block_text_indent":"\u6587\u5b57\u7f29\u6392","block_text_align":"\u6587\u5b57\u5bf9\u9f50","block_vertical_alignment":"\u6c34\u51c6\u5bf9\u9f50\u65b9\u5f0f","block_letterspacing":"\u5b57\u5143\u95f4\u8ddd","block_wordspacing":"\u5355\u5b57\u95f4\u8ddd","background_vpos":"\u6c34\u51c6\u4f4d\u7f6e","background_hpos":"\u5782\u76f4\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u4f53","text_striketrough":"\u5220\u9664\u7ebf","text_underline":"\u5e95\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u4fee\u9970","text_color":"\u989c\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/props.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/props.htm
new file mode 100644
index 000000000..76ab68d89
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/style/props.htm
@@ -0,0 +1,840 @@
+<!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>
+ </fieldset>
+
+<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>
+</fieldset>
+
+<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>
+</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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js
new file mode 100644
index 000000000..42a82d112
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin.js
@@ -0,0 +1 @@
+(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(t){n=c.select(":input:enabled,*[tabindex]");function s(v){return v.nodeName==="BODY"||(v.type!="hidden"&&!(v.style.display=="none")&&!(v.style.visibility=="hidden")&&s(v.parentNode))}function i(v){return v.attributes.tabIndex.specified||v.nodeName=="INPUT"||v.nodeName=="TEXTAREA"}function u(){return tinymce.isIE6||tinymce.isIE7}function r(v){return((!u()||i(v)))&&v.getAttribute("tabindex")!="-1"&&s(v)}d(n,function(w,v){if(w.id==l.id){j=v;return false}});if(t>0){for(m=j+1;m<n.length;m++){if(r(n[m])){return n[m]}}}else{for(m=j-1;m>=0;m--){if(r(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js
new file mode 100644
index 000000000..a1579c85f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js
@@ -0,0 +1,122 @@
+/**
+ * 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() {
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;
+
+ tinymce.create('tinymce.plugins.TabFocusPlugin', {
+ init : function(ed, url) {
+ function tabCancel(ed, e) {
+ if (e.keyCode === 9)
+ return Event.cancel(e);
+ }
+
+ function tabHandler(ed, e) {
+ var x, i, f, el, v;
+
+ function find(d) {
+ el = DOM.select(':input:enabled,*[tabindex]');
+
+ function canSelectRecursive(e) {
+ return e.nodeName==="BODY" || (e.type != 'hidden' &&
+ !(e.style.display == "none") &&
+ !(e.style.visibility == "hidden") && canSelectRecursive(e.parentNode));
+ }
+ function canSelectInOldIe(el) {
+ return el.attributes["tabIndex"].specified || el.nodeName == "INPUT" || el.nodeName == "TEXTAREA";
+ }
+ function isOldIe() {
+ return tinymce.isIE6 || tinymce.isIE7;
+ }
+ function canSelect(el) {
+ return ((!isOldIe() || canSelectInOldIe(el))) && el.getAttribute("tabindex") != '-1' && canSelectRecursive(el);
+ }
+
+ each(el, function(e, i) {
+ if (e.id == ed.id) {
+ x = i;
+ return false;
+ }
+ });
+ if (d > 0) {
+ for (i = x + 1; i < el.length; i++) {
+ if (canSelect(el[i]))
+ return el[i];
+ }
+ } else {
+ for (i = x - 1; i >= 0; i--) {
+ if (canSelect(el[i]))
+ return el[i];
+ }
+ }
+
+ return null;
+ }
+
+ if (e.keyCode === 9) {
+ v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));
+
+ if (v.length == 1) {
+ v[1] = v[0];
+ v[0] = ':prev';
+ }
+
+ // Find element to focus
+ if (e.shiftKey) {
+ if (v[0] == ':prev')
+ el = find(-1);
+ else
+ el = DOM.get(v[0]);
+ } else {
+ if (v[1] == ':next')
+ el = find(1);
+ else
+ el = DOM.get(v[1]);
+ }
+
+ if (el) {
+ if (el.id && (ed = tinymce.get(el.id || el.name)))
+ ed.focus();
+ else
+ window.setTimeout(function() {
+ if (!tinymce.isWebKit)
+ window.focus();
+ el.focus();
+ }, 10);
+
+ return Event.cancel(e);
+ }
+ }
+ }
+
+ ed.onKeyUp.add(tabCancel);
+
+ if (tinymce.isGecko) {
+ ed.onKeyPress.add(tabHandler);
+ ed.onKeyDown.add(tabCancel);
+ } else
+ ed.onKeyDown.add(tabHandler);
+
+ },
+
+ 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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin);
+})();
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/cell.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/cell.htm
new file mode 100644
index 000000000..a72a8d697
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/cell.htm
@@ -0,0 +1,180 @@
+<!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>{#table_dlg.cell_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/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/validate.js"></script>
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
+ <script type="text/javascript" src="js/cell.js"></script>
+ <link href="css/cell.css" rel="stylesheet" type="text/css" />
+</head>
+<body id="tablecell" style="display: none" role="application">
+ <form onsubmit="updateAction();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#table_dlg.general_props}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td><label for="align">{#table_dlg.align}</label></td>
+ <td>
+ <select id="align" name="align" class="mceFocus">
+ <option value="">{#not_set}</option>
+ <option value="center">{#table_dlg.align_middle}</option>
+ <option value="left">{#table_dlg.align_left}</option>
+ <option value="right">{#table_dlg.align_right}</option>
+ </select>
+ </td>
+
+ <td><label for="celltype">{#table_dlg.cell_type}</label></td>
+ <td>
+ <select id="celltype" name="celltype">
+ <option value="td">{#table_dlg.td}</option>
+ <option value="th">{#table_dlg.th}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="valign">{#table_dlg.valign}</label></td>
+ <td>
+ <select id="valign" name="valign">
+ <option value="">{#not_set}</option>
+ <option value="top">{#table_dlg.align_top}</option>
+ <option value="middle">{#table_dlg.align_middle}</option>
+ <option value="bottom">{#table_dlg.align_bottom}</option>
+ </select>
+ </td>
+
+ <td><label for="scope">{#table_dlg.scope}</label></td>
+ <td>
+ <select id="scope" name="scope">
+ <option value="">{#not_set}</option>
+ <option value="col">{#table.col}</option>
+ <option value="row">{#table.row}</option>
+ <option value="rowgroup">{#table_dlg.rowgroup}</option>
+ <option value="colgroup">{#table_dlg.colgroup}</option>
+ </select>
+ </td>
+
+ </tr>
+
+ <tr>
+ <td><label for="width">{#table_dlg.width}</label></td>
+ <td><input id="width" name="width" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
+
+ <td><label for="height">{#table_dlg.height}</label></td>
+ <td><input id="height" name="height" type="text" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
+ </tr>
+
+ <tr id="styleSelectRow">
+ <td><label for="class">{#class_name}</label></td>
+ <td colspan="3">
+ <select id="class" name="class" class="mceEditableSelect">
+ <option value="" selected="selected">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+
+ <div id="advanced_panel" class="panel">
+ <fieldset>
+ <legend>{#table_dlg.advanced_props}</legend>
+
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="column1"><label for="id">{#table_dlg.id}</label></td>
+ <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="style">{#table_dlg.style}</label></td>
+ <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
+ <td>
+ <select id="dir" name="dir" style="width: 200px">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#table_dlg.ltr}</option>
+ <option value="rtl">{#table_dlg.rtl}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td>
+ <td>
+ <input id="lang" name="lang" type="text" value="" style="width: 200px" />
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>
+ <td id="backgroundimagebrowsercontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr role="group" aria-labelledby="bordercolor_label">
+ <td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td>
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>
+ <td id="bordercolor_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr role="group" aria-labelledby="bgcolor_label">
+ <td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td>
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
+ <td id="bgcolor_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <div>
+ <select id="action" name="action">
+ <option value="cell">{#table_dlg.cell_cell}</option>
+ <option value="row">{#table_dlg.cell_row}</option>
+ <option value="col">{#table_dlg.cell_col}</option>
+ <option value="all">{#table_dlg.cell_all}</option>
+ </select>
+ </div>
+
+ <input type="submit" id="insert" name="insert" value="{#update}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+ </form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css
new file mode 100644
index 000000000..a067ecdfe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/cell.css
@@ -0,0 +1,17 @@
+/* CSS file for cell dialog in the table plugin */
+
+.panel_wrapper div.current {
+ height: 200px;
+}
+
+.advfield {
+ width: 200px;
+}
+
+#action {
+ margin-bottom: 3px;
+}
+
+#class {
+ width: 150px;
+} \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/row.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/row.css
new file mode 100644
index 000000000..1f7755daf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/row.css
@@ -0,0 +1,25 @@
+/* CSS file for row dialog in the table plugin */
+
+.panel_wrapper div.current {
+ height: 200px;
+}
+
+.advfield {
+ width: 200px;
+}
+
+#action {
+ margin-bottom: 3px;
+}
+
+#rowtype,#align,#valign,#class,#height {
+ width: 150px;
+}
+
+#height {
+ width: 50px;
+}
+
+.col2 {
+ padding-left: 20px;
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/table.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/table.css
new file mode 100644
index 000000000..d11c3f69c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/css/table.css
@@ -0,0 +1,13 @@
+/* CSS file for table dialog in the table plugin */
+
+.panel_wrapper div.current {
+ height: 245px;
+}
+
+.advfield {
+ width: 200px;
+}
+
+#class {
+ width: 150px;
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js
new file mode 100644
index 000000000..2f3b0e2d7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin.js
@@ -0,0 +1 @@
+(function(d){var e=d.each;function c(g,h){var j=h.ownerDocument,f=j.createRange(),k;f.setStartBefore(h);f.setEnd(g.endContainer,g.endOffset);k=j.createElement("body");k.appendChild(f.cloneContents());return k.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length==0}function a(g,f){return parseInt(g.getAttribute(f)||1)}function b(H,G,K){var g,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;g=[];e(["thead","tbody","tfoot"],function(N){var O=G.select("> "+N+" tr",H);e(O,function(P,Q){Q+=M;e(G.select("> td, > th",P),function(W,R){var S,T,U,V;if(g[Q]){while(g[Q][R]){R++}}U=a(W,"rowspan");V=a(W,"colspan");for(T=Q;T<Q+U;T++){if(!g[T]){g[T]=[]}for(S=R;S<R+V;S++){g[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=g[O];if(N){return N[M]}}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=[];e(H.rows,function(N){e(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 f(M){var N;d.walk(M,function(P){var O;if(P.nodeType==3){e(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=d.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(!d.isIE){M.innerHTML='<br data-mce-bogus="1" />'}}return M}function q(){var M=G.createRng();e(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}e(G.select("thead,tbody,tfoot",H),function(N){if(N.rows.length==0){G.remove(N)}});t();row=g[Math.min(g.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=g[Q][S].elm.parentNode;for(M=1;M<=U;M++){P=G.getNext(P,"tr");if(P){for(N=S;N>=0;N--){T=g[Q+M][N].elm;if(T.parentNode==P){for(O=1;O<=R;O++){G.insertAfter(f(T),T)}break}}if(N==-1){for(O=1;O<=R;O++){P.insertBefore(f(P.cells[0]),P.cells[0])}}}}}function C(){e(g,function(M,N){e(M,function(P,O){var S,R,T,Q;if(j(P)){P=P.elm;S=a(P,"colspan");R=a(P,"rowspan");if(S>1||R>1){s(P,"rowSpan",1);s(P,"colSpan",1);for(Q=0;Q<S-1;Q++){G.insertAfter(f(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(!g[R]||!g[R][U]){continue}V=g[R][U].elm;if(V!=T){N=d.grep(V.childNodes);e(N,function(Z){T.appendChild(Z)});if(N.length){N=d.grep(T.childNodes);Q=0;e(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;e(g,function(W,X){e(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<g[0].length;R++){if(!g[M][R]){continue}S=g[M][R].elm;if(S!=P){if(!Q){O=a(S,"rowspan");if(O>1){s(S,"rowSpan",O+1);continue}}else{if(M>0&&g[M-1][R]){V=g[M-1][R].elm;O=a(V,"rowSpan");if(O>1){s(V,"rowSpan",O+1);continue}}}N=f(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 h(N){var O,M;e(g,function(P,Q){e(P,function(S,R){if(j(S)){O=R;if(N){return false}}});if(N){return !O}});e(g,function(S,T){var P,Q,R;if(!S[O]){return}P=S[O].elm;if(P!=M){R=a(P,"colspan");Q=a(P,"rowspan");if(R==1){if(!N){G.insertAfter(f(P),P);u(O,T,Q-1,R)}else{P.parentNode.insertBefore(f(P),P);u(O,T,Q-1,R)}}else{s(P,"colSpan",P.colSpan+1)}M=P}})}function n(){var M=[];e(g,function(N,O){e(N,function(Q,P){if(j(Q)&&d.inArray(M,P)===-1){e(g,function(T){var R=T[P].elm,S;S=a(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");e(Q.cells,function(S){var T=a(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]);e(g[R.y],function(S){var T;S=S.elm;if(S!=O){T=a(S,"rowSpan");if(T<=1){G.remove(S)}else{s(S,"rowSpan",T-1)}O=S}})}N=k();e(N.reverse(),function(O){M(O)});q()}function E(){var M=k();G.remove(M);q();return M}function J(){var M=k();e(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;e(g,function(S){var R;Q=0;e(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()}e(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(f(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;e(g,function(O,P){e(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;e(g,function(P,Q){e(P,function(S,R){var U,T;if(j(S)){S=g[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=g[y][P];if(!S.real){if(P-(S.colspan-1)<P){P-=S.colspan-1}}}for(x=P;x<=N;x++){S=g[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=g[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(g[y][x]){G.addClass(g[y][x].elm,"mceSelected")}}}}}d.extend(this,{deleteTable:r,split:C,merge:p,insertRow:l,insertCol:h,deleteCols:n,deleteRows:m,cutRows:E,copyRows:J,pasteRows:B,getPos:F,setStartCell:w,setEndCell:v})}d.create("tinymce.plugins.TablePlugin",{init:function(g,h){var f,m,j=true;function l(p){var o=g.selection,n=g.dom.getParent(p||o.getNode(),"table");if(n){return new b(n,g.dom,o)}}function k(){g.getBody().style.webkitUserSelect="";if(j){g.dom.removeClass(g.dom.select("td.mceSelected,th.mceSelected"),"mceSelected");j=false}}e([["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(n){g.addButton(n[0],{title:n[1],cmd:n[2],ui:n[3]})});if(!d.isIE){g.onClick.add(function(n,o){o=o.target;if(o.nodeName==="TABLE"){n.selection.select(o);n.nodeChanged()}})}g.onPreProcess.add(function(o,p){var n,q,r,t=o.dom,s;n=t.select("table",p.node);q=n.length;while(q--){r=n[q];t.setAttrib(r,"data-mce-style","");if((s=t.getAttrib(r,"width"))){t.setStyle(r,"width",s);t.setAttrib(r,"width","")}if((s=t.getAttrib(r,"height"))){t.setStyle(r,"height",s);t.setAttrib(r,"height","")}}});g.onNodeChange.add(function(q,o,s){var r;s=q.selection.getStart();r=q.dom.getParent(s,"td,th,caption");o.setActive("table",s.nodeName==="TABLE"||!!r);if(r&&r.nodeName==="CAPTION"){r=0}o.setDisabled("delete_table",!r);o.setDisabled("delete_col",!r);o.setDisabled("delete_table",!r);o.setDisabled("delete_row",!r);o.setDisabled("col_after",!r);o.setDisabled("col_before",!r);o.setDisabled("row_after",!r);o.setDisabled("row_before",!r);o.setDisabled("row_props",!r);o.setDisabled("cell_props",!r);o.setDisabled("split_cells",!r);o.setDisabled("merge_cells",!r)});g.onInit.add(function(r){var p,t,q=r.dom,u;f=r.windowManager;r.onMouseDown.add(function(w,z){if(z.button!=2){k();t=q.getParent(z.target,"td,th");p=q.getParent(t,"table")}});q.bind(r.getDoc(),"mouseover",function(C){var A,z,B=C.target;if(t&&(u||B!=t)&&(B.nodeName=="TD"||B.nodeName=="TH")){z=q.getParent(B,"table");if(z==p){if(!u){u=l(z);u.setStartCell(t);r.getBody().style.webkitUserSelect="none"}u.setEndCell(B);j=true}A=r.selection.getSel();try{if(A.removeAllRanges){A.removeAllRanges()}else{A.empty()}}catch(w){}C.preventDefault()}});r.onMouseUp.add(function(F,G){var z,B=F.selection,H,I=B.getSel(),w,C,A,E;if(t){if(u){F.getBody().style.webkitUserSelect=""}function D(J,L){var K=new d.dom.TreeWalker(J,J);do{if(J.nodeType==3&&d.trim(J.nodeValue).length!=0){if(L){z.setStart(J,0)}else{z.setEnd(J,J.nodeValue.length)}return}if(J.nodeName=="BR"){if(L){z.setStartBefore(J)}else{z.setEndBefore(J)}return}}while(J=(L?K.next():K.prev()))}H=q.select("td.mceSelected,th.mceSelected");if(H.length>0){z=q.createRng();C=H[0];E=H[H.length-1];z.setStartBefore(C);z.setEndAfter(C);D(C,1);w=new d.dom.TreeWalker(C,q.getParent(H[0],"table"));do{if(C.nodeName=="TD"||C.nodeName=="TH"){if(!q.hasClass(C,"mceSelected")){break}A=C}}while(C=w.next());D(A);B.setRng(z)}F.nodeChanged();t=u=p=null}});r.onKeyUp.add(function(w,z){k()});r.onKeyDown.add(function(w,z){n(w)});r.onMouseDown.add(function(w,z){if(z.button!=2){n(w)}});function o(D,z,A,F){var B=3,G=D.dom.getParent(z.startContainer,"TABLE"),C,w,E;if(G){C=G.parentNode}w=z.startContainer.nodeType==B&&z.startOffset==0&&z.endOffset==0&&F&&(A.nodeName=="TR"||A==C);E=(A.nodeName=="TD"||A.nodeName=="TH")&&!F;return w||E}function n(A){if(!d.isWebKit){return}var z=A.selection.getRng();var C=A.selection.getNode();var B=A.dom.getParent(z.startContainer,"TD,TH");if(!o(A,z,C,B)){return}if(!B){B=C}var w=B.lastChild;while(w.lastChild){w=w.lastChild}z.setEnd(w,w.nodeValue.length);A.selection.setRng(z)}r.plugins.table.fixTableCellSelection=n;if(r&&r.plugins.contextmenu){r.plugins.contextmenu.onContextMenu.add(function(A,w,C){var D,B=r.selection,z=B.getNode()||r.getBody();if(r.dom.getParent(C,"td")||r.dom.getParent(C,"th")||r.dom.select("td.mceSelected,th.mceSelected").length){w.removeAll();if(z.nodeName=="A"&&!r.dom.getAttrib(z,"name")){w.add({title:"advanced.link_desc",icon:"link",cmd:r.plugins.advlink?"mceAdvLink":"mceLink",ui:true});w.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});w.addSeparator()}if(z.nodeName=="IMG"&&z.className.indexOf("mceItem")==-1){w.add({title:"advanced.image_desc",icon:"image",cmd:r.plugins.advimage?"mceAdvImage":"mceImage",ui:true});w.addSeparator()}w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});w.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});w.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});w.addSeparator();D=w.addMenu({title:"table.cell"});D.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});D.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});D.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});D=w.addMenu({title:"table.row"});D.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});D.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});D.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});D.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});D.addSeparator();D.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});D.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});D.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!m);D.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!m);D=w.addMenu({title:"table.col"});D.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});D.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});D.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{w.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(d.isWebKit){function v(C,N){var L=d.VK;var Q=N.keyCode;function O(Y,U,S){var T=Y?"previousSibling":"nextSibling";var Z=C.dom.getParent(U,"tr");var X=Z[T];if(X){z(C,U,X,Y);d.dom.Event.cancel(S);return true}else{var aa=C.dom.getParent(Z,"table");var W=Z.parentNode;var R=W.nodeName.toLowerCase();if(R==="tbody"||R===(Y?"tfoot":"thead")){var V=w(Y,aa,W,"tbody");if(V!==null){return K(Y,V,U,S)}}return M(Y,Z,T,aa,S)}}function w(V,T,U,X){var S=C.dom.select(">"+X,T);var R=S.indexOf(U);if(V&&R===0||!V&&R===S.length-1){return B(V,T)}else{if(R===-1){var W=U.tagName.toLowerCase()==="thead"?0:S.length-1;return S[W]}else{return S[R+(V?-1:1)]}}}function B(U,T){var S=U?"thead":"tfoot";var R=C.dom.select(">"+S,T);return R.length!==0?R[0]:null}function K(V,T,S,U){var R=J(T,V);R&&z(C,S,R,V);d.dom.Event.cancel(U);return true}function M(Y,U,R,X,W){var S=X[R];if(S){F(S);return true}else{var V=C.dom.getParent(X,"td,th");if(V){return O(Y,V,W)}else{var T=J(U,!Y);F(T);return d.dom.Event.cancel(W)}}}function J(S,R){return S&&S[R?"lastChild":"firstChild"]}function F(R){C.selection.setCursorLocation(R,0)}function A(){return Q==L.UP||Q==L.DOWN}function D(R){var T=R.selection.getNode();var S=R.dom.getParent(T,"tr");return S!==null}function P(S){var R=0;var T=S;while(T.previousSibling){T=T.previousSibling;R=R+a(T,"colspan")}return R}function E(T,R){var U=0;var S=0;e(T.children,function(V,W){U=U+a(V,"colspan");S=W;if(U>R){return false}});return S}function z(T,W,Y,V){var X=P(T.dom.getParent(W,"td,th"));var S=E(Y,X);var R=Y.childNodes[S];var U=J(R,V);F(U||R)}function H(R){var T=C.selection.getNode();var U=C.dom.getParent(T,"td,th");var S=C.dom.getParent(R,"td,th");return U&&U!==S&&I(U,S)}function I(S,R){return C.dom.getParent(S,"TABLE")===C.dom.getParent(R,"TABLE")}if(A()&&D(C)){var G=C.selection.getNode();setTimeout(function(){if(H(G)){O(!N.shiftKey&&Q===L.UP,G,N)}},0)}}r.onKeyDown.add(v)}if(!d.isIE){function s(){var w;for(w=r.getBody().lastChild;w&&w.nodeType==3&&!w.nodeValue.length;w=w.previousSibling){}if(w&&w.nodeName=="TABLE"){r.dom.add(r.getBody(),"p",null,'<br mce_bogus="1" />')}}if(d.isGecko){r.onKeyDown.add(function(z,B){var w,A,C=z.dom;if(B.keyCode==37||B.keyCode==38){w=z.selection.getRng();A=C.getParent(w.startContainer,"table");if(A&&z.getBody().firstChild==A){if(c(w,A)){w=C.createRng();w.setStartBefore(A);w.setEndBefore(A);z.selection.setRng(w);B.preventDefault()}}}})}r.onKeyUp.add(s);r.onSetContent.add(s);r.onVisualAid.add(s);r.onPreProcess.add(function(w,A){var z=A.node.lastChild;if(z&&z.childNodes.length==1&&z.firstChild.nodeName=="BR"){w.dom.remove(z)}});s();r.startContent=r.getContent({format:"raw"})}});e({mceTableSplitCells:function(n){n.split()},mceTableMergeCells:function(o){var p,q,n;n=g.dom.getParent(g.selection.getNode(),"th,td");if(n){p=n.rowSpan;q=n.colSpan}if(!g.dom.select("td.mceSelected,th.mceSelected").length){f.open({url:h+"/merge_cells.htm",width:240+parseInt(g.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(g.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:p,cols:q,onaction:function(r){o.merge(n,r.cols,r.rows)},plugin_url:h})}else{o.merge()}},mceTableInsertRowBefore:function(n){n.insertRow(true)},mceTableInsertRowAfter:function(n){n.insertRow()},mceTableInsertColBefore:function(n){n.insertCol(true)},mceTableInsertColAfter:function(n){n.insertCol()},mceTableDeleteCol:function(n){n.deleteCols()},mceTableDeleteRow:function(n){n.deleteRows()},mceTableCutRow:function(n){m=n.cutRows()},mceTableCopyRow:function(n){m=n.copyRows()},mceTablePasteRowBefore:function(n){n.pasteRows(m,true)},mceTablePasteRowAfter:function(n){n.pasteRows(m)},mceTableDelete:function(n){n.deleteTable()}},function(o,n){g.addCommand(n,function(){var p=l();if(p){o(p);g.execCommand("mceRepaint");k()}})});e({mceInsertTable:function(n){f.open({url:h+"/table.htm",width:400+parseInt(g.getLang("table.table_delta_width",0)),height:320+parseInt(g.getLang("table.table_delta_height",0)),inline:1},{plugin_url:h,action:n?n.action:0})},mceTableRowProps:function(){f.open({url:h+"/row.htm",width:400+parseInt(g.getLang("table.rowprops_delta_width",0)),height:295+parseInt(g.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:h})},mceTableCellProps:function(){f.open({url:h+"/cell.htm",width:400+parseInt(g.getLang("table.cellprops_delta_width",0)),height:295+parseInt(g.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:h})}},function(o,n){g.addCommand(n,function(p,q){o(q)})})}});d.PluginManager.add("table",d.plugins.TablePlugin)})(tinymce); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js
new file mode 100644
index 000000000..8170e4ed4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/editor_plugin_src.js
@@ -0,0 +1,1408 @@
+/**
+ * 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) {
+ var each = tinymce.each;
+
+ // Checks if the selection/caret is at the start of the specified block element
+ function isAtStart(rng, par) {
+ var doc = par.ownerDocument, rng2 = doc.createRange(), elm;
+
+ rng2.setStartBefore(par);
+ rng2.setEnd(rng.endContainer, rng.endOffset);
+
+ elm = doc.createElement('body');
+ elm.appendChild(rng2.cloneContents());
+
+ // Check for text characters of other elements that should be treated as content
+ return elm.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi, '-').replace(/<[^>]+>/g, '').length == 0;
+ };
+
+ function getSpanVal(td, name) {
+ return parseInt(td.getAttribute(name) || 1);
+ }
+
+ /**
+ * Table Grid class.
+ */
+ function TableGrid(table, dom, selection) {
+ var grid, startPos, endPos, selectedCell;
+
+ buildGrid();
+ selectedCell = dom.getParent(selection.getStart(), 'th,td');
+ if (selectedCell) {
+ startPos = getPos(selectedCell);
+ endPos = findEndPos();
+ selectedCell = getCell(startPos.x, startPos.y);
+ }
+
+ function cloneNode(node, children) {
+ node = node.cloneNode(children);
+ node.removeAttribute('id');
+
+ return node;
+ }
+
+ function buildGrid() {
+ var startY = 0;
+
+ grid = [];
+
+ each(['thead', 'tbody', 'tfoot'], function(part) {
+ var rows = dom.select('> ' + part + ' tr', table);
+
+ each(rows, function(tr, y) {
+ y += startY;
+
+ each(dom.select('> td, > th', tr), function(td, x) {
+ var x2, y2, rowspan, colspan;
+
+ // Skip over existing cells produced by rowspan
+ if (grid[y]) {
+ while (grid[y][x])
+ x++;
+ }
+
+ // Get col/rowspan from cell
+ rowspan = getSpanVal(td, 'rowspan');
+ colspan = getSpanVal(td, 'colspan');
+
+ // Fill out rowspan/colspan right and down
+ for (y2 = y; y2 < y + rowspan; y2++) {
+ if (!grid[y2])
+ grid[y2] = [];
+
+ for (x2 = x; x2 < x + colspan; x2++) {
+ grid[y2][x2] = {
+ part : part,
+ real : y2 == y && x2 == x,
+ elm : td,
+ rowspan : rowspan,
+ colspan : colspan
+ };
+ }
+ }
+ });
+ });
+
+ startY += rows.length;
+ });
+ };
+
+ function getCell(x, y) {
+ var row;
+
+ row = grid[y];
+ if (row)
+ return row[x];
+ };
+
+ function setSpanVal(td, name, val) {
+ if (td) {
+ val = parseInt(val);
+
+ if (val === 1)
+ td.removeAttribute(name, 1);
+ else
+ td.setAttribute(name, val, 1);
+ }
+ }
+
+ function isCellSelected(cell) {
+ return cell && (dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell);
+ };
+
+ function getSelectedRows() {
+ var rows = [];
+
+ each(table.rows, function(row) {
+ each(row.cells, function(cell) {
+ if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) {
+ rows.push(row);
+ return false;
+ }
+ });
+ });
+
+ return rows;
+ };
+
+ function deleteTable() {
+ var rng = dom.createRng();
+
+ rng.setStartAfter(table);
+ rng.setEndAfter(table);
+
+ selection.setRng(rng);
+
+ dom.remove(table);
+ };
+
+ function cloneCell(cell) {
+ var formatNode;
+
+ // Clone formats
+ tinymce.walk(cell, function(node) {
+ var curNode;
+
+ if (node.nodeType == 3) {
+ each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) {
+ node = cloneNode(node, false);
+
+ if (!formatNode)
+ formatNode = curNode = node;
+ else if (curNode)
+ curNode.appendChild(node);
+
+ curNode = node;
+ });
+
+ // Add something to the inner node
+ if (curNode)
+ curNode.innerHTML = tinymce.isIE ? '&nbsp;' : '<br data-mce-bogus="1" />';
+
+ return false;
+ }
+ }, 'childNodes');
+
+ cell = cloneNode(cell, false);
+ setSpanVal(cell, 'rowSpan', 1);
+ setSpanVal(cell, 'colSpan', 1);
+
+ if (formatNode) {
+ cell.appendChild(formatNode);
+ } else {
+ if (!tinymce.isIE)
+ cell.innerHTML = '<br data-mce-bogus="1" />';
+ }
+
+ return cell;
+ };
+
+ function cleanup() {
+ var rng = dom.createRng();
+
+ // Empty rows
+ each(dom.select('tr', table), function(tr) {
+ if (tr.cells.length == 0)
+ dom.remove(tr);
+ });
+
+ // Empty table
+ if (dom.select('tr', table).length == 0) {
+ rng.setStartAfter(table);
+ rng.setEndAfter(table);
+ selection.setRng(rng);
+ dom.remove(table);
+ return;
+ }
+
+ // Empty header/body/footer
+ each(dom.select('thead,tbody,tfoot', table), function(part) {
+ if (part.rows.length == 0)
+ dom.remove(part);
+ });
+
+ // Restore selection to start position if it still exists
+ buildGrid();
+
+ // Restore the selection to the closest table position
+ row = grid[Math.min(grid.length - 1, startPos.y)];
+ if (row) {
+ selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true);
+ selection.collapse(true);
+ }
+ };
+
+ function fillLeftDown(x, y, rows, cols) {
+ var tr, x2, r, c, cell;
+
+ tr = grid[y][x].elm.parentNode;
+ for (r = 1; r <= rows; r++) {
+ tr = dom.getNext(tr, 'tr');
+
+ if (tr) {
+ // Loop left to find real cell
+ for (x2 = x; x2 >= 0; x2--) {
+ cell = grid[y + r][x2].elm;
+
+ if (cell.parentNode == tr) {
+ // Append clones after
+ for (c = 1; c <= cols; c++)
+ dom.insertAfter(cloneCell(cell), cell);
+
+ break;
+ }
+ }
+
+ if (x2 == -1) {
+ // Insert nodes before first cell
+ for (c = 1; c <= cols; c++)
+ tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]);
+ }
+ }
+ }
+ };
+
+ function split() {
+ each(grid, function(row, y) {
+ each(row, function(cell, x) {
+ var colSpan, rowSpan, newCell, i;
+
+ if (isCellSelected(cell)) {
+ cell = cell.elm;
+ colSpan = getSpanVal(cell, 'colspan');
+ rowSpan = getSpanVal(cell, 'rowspan');
+
+ if (colSpan > 1 || rowSpan > 1) {
+ setSpanVal(cell, 'rowSpan', 1);
+ setSpanVal(cell, 'colSpan', 1);
+
+ // Insert cells right
+ for (i = 0; i < colSpan - 1; i++)
+ dom.insertAfter(cloneCell(cell), cell);
+
+ fillLeftDown(x, y, rowSpan - 1, colSpan);
+ }
+ }
+ });
+ });
+ };
+
+ function merge(cell, cols, rows) {
+ var startX, startY, endX, endY, x, y, startCell, endCell, cell, children, count;
+
+ // Use specified cell and cols/rows
+ if (cell) {
+ pos = getPos(cell);
+ startX = pos.x;
+ startY = pos.y;
+ endX = startX + (cols - 1);
+ endY = startY + (rows - 1);
+ } else {
+ // Use selection
+ startX = startPos.x;
+ startY = startPos.y;
+ endX = endPos.x;
+ endY = endPos.y;
+ }
+
+ // Find start/end cells
+ startCell = getCell(startX, startY);
+ endCell = getCell(endX, endY);
+
+ // Check if the cells exists and if they are of the same part for example tbody = tbody
+ if (startCell && endCell && startCell.part == endCell.part) {
+ // Split and rebuild grid
+ split();
+ buildGrid();
+
+ // Set row/col span to start cell
+ startCell = getCell(startX, startY).elm;
+ setSpanVal(startCell, 'colSpan', (endX - startX) + 1);
+ setSpanVal(startCell, 'rowSpan', (endY - startY) + 1);
+
+ // Remove other cells and add it's contents to the start cell
+ for (y = startY; y <= endY; y++) {
+ for (x = startX; x <= endX; x++) {
+ if (!grid[y] || !grid[y][x])
+ continue;
+
+ cell = grid[y][x].elm;
+
+ if (cell != startCell) {
+ // Move children to startCell
+ children = tinymce.grep(cell.childNodes);
+ each(children, function(node) {
+ startCell.appendChild(node);
+ });
+
+ // Remove bogus nodes if there is children in the target cell
+ if (children.length) {
+ children = tinymce.grep(startCell.childNodes);
+ count = 0;
+ each(children, function(node) {
+ if (node.nodeName == 'BR' && dom.getAttrib(node, 'data-mce-bogus') && count++ < children.length - 1)
+ startCell.removeChild(node);
+ });
+ }
+
+ // Remove cell
+ dom.remove(cell);
+ }
+ }
+ }
+
+ // Remove empty rows etc and restore caret location
+ cleanup();
+ }
+ };
+
+ function insertRow(before) {
+ var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell, rowSpan;
+
+ // Find first/last row
+ each(grid, function(row, y) {
+ each(row, function(cell, x) {
+ if (isCellSelected(cell)) {
+ cell = cell.elm;
+ rowElm = cell.parentNode;
+ newRow = cloneNode(rowElm, false);
+ posY = y;
+
+ if (before)
+ return false;
+ }
+ });
+
+ if (before)
+ return !posY;
+ });
+
+ for (x = 0; x < grid[0].length; x++) {
+ // Cell not found could be because of an invalid table structure
+ if (!grid[posY][x])
+ continue;
+
+ cell = grid[posY][x].elm;
+
+ if (cell != lastCell) {
+ if (!before) {
+ rowSpan = getSpanVal(cell, 'rowspan');
+ if (rowSpan > 1) {
+ setSpanVal(cell, 'rowSpan', rowSpan + 1);
+ continue;
+ }
+ } else {
+ // Check if cell above can be expanded
+ if (posY > 0 && grid[posY - 1][x]) {
+ otherCell = grid[posY - 1][x].elm;
+ rowSpan = getSpanVal(otherCell, 'rowSpan');
+ if (rowSpan > 1) {
+ setSpanVal(otherCell, 'rowSpan', rowSpan + 1);
+ continue;
+ }
+ }
+ }
+
+ // Insert new cell into new row
+ newCell = cloneCell(cell);
+ setSpanVal(newCell, 'colSpan', cell.colSpan);
+
+ newRow.appendChild(newCell);
+
+ lastCell = cell;
+ }
+ }
+
+ if (newRow.hasChildNodes()) {
+ if (!before)
+ dom.insertAfter(newRow, rowElm);
+ else
+ rowElm.parentNode.insertBefore(newRow, rowElm);
+ }
+ };
+
+ function insertCol(before) {
+ var posX, lastCell;
+
+ // Find first/last column
+ each(grid, function(row, y) {
+ each(row, function(cell, x) {
+ if (isCellSelected(cell)) {
+ posX = x;
+
+ if (before)
+ return false;
+ }
+ });
+
+ if (before)
+ return !posX;
+ });
+
+ each(grid, function(row, y) {
+ var cell, rowSpan, colSpan;
+
+ if (!row[posX])
+ return;
+
+ cell = row[posX].elm;
+ if (cell != lastCell) {
+ colSpan = getSpanVal(cell, 'colspan');
+ rowSpan = getSpanVal(cell, 'rowspan');
+
+ if (colSpan == 1) {
+ if (!before) {
+ dom.insertAfter(cloneCell(cell), cell);
+ fillLeftDown(posX, y, rowSpan - 1, colSpan);
+ } else {
+ cell.parentNode.insertBefore(cloneCell(cell), cell);
+ fillLeftDown(posX, y, rowSpan - 1, colSpan);
+ }
+ } else
+ setSpanVal(cell, 'colSpan', cell.colSpan + 1);
+
+ lastCell = cell;
+ }
+ });
+ };
+
+ function deleteCols() {
+ var cols = [];
+
+ // Get selected column indexes
+ each(grid, function(row, y) {
+ each(row, function(cell, x) {
+ if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) {
+ each(grid, function(row) {
+ var cell = row[x].elm, colSpan;
+
+ colSpan = getSpanVal(cell, 'colSpan');
+
+ if (colSpan > 1)
+ setSpanVal(cell, 'colSpan', colSpan - 1);
+ else
+ dom.remove(cell);
+ });
+
+ cols.push(x);
+ }
+ });
+ });
+
+ cleanup();
+ };
+
+ function deleteRows() {
+ var rows;
+
+ function deleteRow(tr) {
+ var nextTr, pos, lastCell;
+
+ nextTr = dom.getNext(tr, 'tr');
+
+ // Move down row spanned cells
+ each(tr.cells, function(cell) {
+ var rowSpan = getSpanVal(cell, 'rowSpan');
+
+ if (rowSpan > 1) {
+ setSpanVal(cell, 'rowSpan', rowSpan - 1);
+ pos = getPos(cell);
+ fillLeftDown(pos.x, pos.y, 1, 1);
+ }
+ });
+
+ // Delete cells
+ pos = getPos(tr.cells[0]);
+ each(grid[pos.y], function(cell) {
+ var rowSpan;
+
+ cell = cell.elm;
+
+ if (cell != lastCell) {
+ rowSpan = getSpanVal(cell, 'rowSpan');
+
+ if (rowSpan <= 1)
+ dom.remove(cell);
+ else
+ setSpanVal(cell, 'rowSpan', rowSpan - 1);
+
+ lastCell = cell;
+ }
+ });
+ };
+
+ // Get selected rows and move selection out of scope
+ rows = getSelectedRows();
+
+ // Delete all selected rows
+ each(rows.reverse(), function(tr) {
+ deleteRow(tr);
+ });
+
+ cleanup();
+ };
+
+ function cutRows() {
+ var rows = getSelectedRows();
+
+ dom.remove(rows);
+ cleanup();
+
+ return rows;
+ };
+
+ function copyRows() {
+ var rows = getSelectedRows();
+
+ each(rows, function(row, i) {
+ rows[i] = cloneNode(row, true);
+ });
+
+ return rows;
+ };
+
+ function pasteRows(rows, before) {
+ var selectedRows = getSelectedRows(),
+ targetRow = selectedRows[before ? 0 : selectedRows.length - 1],
+ targetCellCount = targetRow.cells.length;
+
+ // Calc target cell count
+ each(grid, function(row) {
+ var match;
+
+ targetCellCount = 0;
+ each(row, function(cell, x) {
+ if (cell.real)
+ targetCellCount += cell.colspan;
+
+ if (cell.elm.parentNode == targetRow)
+ match = 1;
+ });
+
+ if (match)
+ return false;
+ });
+
+ if (!before)
+ rows.reverse();
+
+ each(rows, function(row) {
+ var cellCount = row.cells.length, cell;
+
+ // Remove col/rowspans
+ for (i = 0; i < cellCount; i++) {
+ cell = row.cells[i];
+ setSpanVal(cell, 'colSpan', 1);
+ setSpanVal(cell, 'rowSpan', 1);
+ }
+
+ // Needs more cells
+ for (i = cellCount; i < targetCellCount; i++)
+ row.appendChild(cloneCell(row.cells[cellCount - 1]));
+
+ // Needs less cells
+ for (i = targetCellCount; i < cellCount; i++)
+ dom.remove(row.cells[i]);
+
+ // Add before/after
+ if (before)
+ targetRow.parentNode.insertBefore(row, targetRow);
+ else
+ dom.insertAfter(row, targetRow);
+ });
+ };
+
+ function getPos(target) {
+ var pos;
+
+ each(grid, function(row, y) {
+ each(row, function(cell, x) {
+ if (cell.elm == target) {
+ pos = {x : x, y : y};
+ return false;
+ }
+ });
+
+ return !pos;
+ });
+
+ return pos;
+ };
+
+ function setStartCell(cell) {
+ startPos = getPos(cell);
+ };
+
+ function findEndPos() {
+ var pos, maxX, maxY;
+
+ maxX = maxY = 0;
+
+ each(grid, function(row, y) {
+ each(row, function(cell, x) {
+ var colSpan, rowSpan;
+
+ if (isCellSelected(cell)) {
+ cell = grid[y][x];
+
+ if (x > maxX)
+ maxX = x;
+
+ if (y > maxY)
+ maxY = y;
+
+ if (cell.real) {
+ colSpan = cell.colspan - 1;
+ rowSpan = cell.rowspan - 1;
+
+ if (colSpan) {
+ if (x + colSpan > maxX)
+ maxX = x + colSpan;
+ }
+
+ if (rowSpan) {
+ if (y + rowSpan > maxY)
+ maxY = y + rowSpan;
+ }
+ }
+ }
+ });
+ });
+
+ return {x : maxX, y : maxY};
+ };
+
+ function setEndCell(cell) {
+ var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan;
+
+ endPos = getPos(cell);
+
+ if (startPos && endPos) {
+ // Get start/end positions
+ startX = Math.min(startPos.x, endPos.x);
+ startY = Math.min(startPos.y, endPos.y);
+ endX = Math.max(startPos.x, endPos.x);
+ endY = Math.max(startPos.y, endPos.y);
+
+ // Expand end positon to include spans
+ maxX = endX;
+ maxY = endY;
+
+ // Expand startX
+ for (y = startY; y <= maxY; y++) {
+ cell = grid[y][startX];
+
+ if (!cell.real) {
+ if (startX - (cell.colspan - 1) < startX)
+ startX -= cell.colspan - 1;
+ }
+ }
+
+ // Expand startY
+ for (x = startX; x <= maxX; x++) {
+ cell = grid[startY][x];
+
+ if (!cell.real) {
+ if (startY - (cell.rowspan - 1) < startY)
+ startY -= cell.rowspan - 1;
+ }
+ }
+
+ // Find max X, Y
+ for (y = startY; y <= endY; y++) {
+ for (x = startX; x <= endX; x++) {
+ cell = grid[y][x];
+
+ if (cell.real) {
+ colSpan = cell.colspan - 1;
+ rowSpan = cell.rowspan - 1;
+
+ if (colSpan) {
+ if (x + colSpan > maxX)
+ maxX = x + colSpan;
+ }
+
+ if (rowSpan) {
+ if (y + rowSpan > maxY)
+ maxY = y + rowSpan;
+ }
+ }
+ }
+ }
+
+ // Remove current selection
+ dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
+
+ // Add new selection
+ for (y = startY; y <= maxY; y++) {
+ for (x = startX; x <= maxX; x++) {
+ if (grid[y][x])
+ dom.addClass(grid[y][x].elm, 'mceSelected');
+ }
+ }
+ }
+ };
+
+ // Expose to public
+ tinymce.extend(this, {
+ deleteTable : deleteTable,
+ split : split,
+ merge : merge,
+ insertRow : insertRow,
+ insertCol : insertCol,
+ deleteCols : deleteCols,
+ deleteRows : deleteRows,
+ cutRows : cutRows,
+ copyRows : copyRows,
+ pasteRows : pasteRows,
+ getPos : getPos,
+ setStartCell : setStartCell,
+ setEndCell : setEndCell
+ });
+ };
+
+ tinymce.create('tinymce.plugins.TablePlugin', {
+ init : function(ed, url) {
+ var winMan, clipboardRows, hasCellSelection = true; // Might be selected cells on reload
+
+ function createTableGrid(node) {
+ var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table');
+
+ if (tblElm)
+ return new TableGrid(tblElm, ed.dom, selection);
+ };
+
+ function cleanup() {
+ // Restore selection possibilities
+ ed.getBody().style.webkitUserSelect = '';
+
+ if (hasCellSelection) {
+ ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');
+ hasCellSelection = false;
+ }
+ };
+
+ // Register buttons
+ each([
+ ['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(c) {
+ ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});
+ });
+
+ // Select whole table is a table border is clicked
+ if (!tinymce.isIE) {
+ ed.onClick.add(function(ed, e) {
+ e = e.target;
+
+ if (e.nodeName === 'TABLE') {
+ ed.selection.select(e);
+ ed.nodeChanged();
+ }
+ });
+ }
+
+ ed.onPreProcess.add(function(ed, args) {
+ var nodes, i, node, dom = ed.dom, value;
+
+ nodes = dom.select('table', args.node);
+ i = nodes.length;
+ while (i--) {
+ node = nodes[i];
+ dom.setAttrib(node, 'data-mce-style', '');
+
+ if ((value = dom.getAttrib(node, 'width'))) {
+ dom.setStyle(node, 'width', value);
+ dom.setAttrib(node, 'width', '');
+ }
+
+ if ((value = dom.getAttrib(node, 'height'))) {
+ dom.setStyle(node, 'height', value);
+ dom.setAttrib(node, 'height', '');
+ }
+ }
+ });
+
+ // Handle node change updates
+ ed.onNodeChange.add(function(ed, cm, n) {
+ var p;
+
+ n = ed.selection.getStart();
+ p = ed.dom.getParent(n, 'td,th,caption');
+ cm.setActive('table', n.nodeName === 'TABLE' || !!p);
+
+ // Disable table tools if we are in caption
+ if (p && p.nodeName === 'CAPTION')
+ p = 0;
+
+ cm.setDisabled('delete_table', !p);
+ cm.setDisabled('delete_col', !p);
+ cm.setDisabled('delete_table', !p);
+ cm.setDisabled('delete_row', !p);
+ cm.setDisabled('col_after', !p);
+ cm.setDisabled('col_before', !p);
+ cm.setDisabled('row_after', !p);
+ cm.setDisabled('row_before', !p);
+ cm.setDisabled('row_props', !p);
+ cm.setDisabled('cell_props', !p);
+ cm.setDisabled('split_cells', !p);
+ cm.setDisabled('merge_cells', !p);
+ });
+
+ ed.onInit.add(function(ed) {
+ var startTable, startCell, dom = ed.dom, tableGrid;
+
+ winMan = ed.windowManager;
+
+ // Add cell selection logic
+ ed.onMouseDown.add(function(ed, e) {
+ if (e.button != 2) {
+ cleanup();
+
+ startCell = dom.getParent(e.target, 'td,th');
+ startTable = dom.getParent(startCell, 'table');
+ }
+ });
+
+ dom.bind(ed.getDoc(), 'mouseover', function(e) {
+ var sel, table, target = e.target;
+
+ if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) {
+ table = dom.getParent(target, 'table');
+ if (table == startTable) {
+ if (!tableGrid) {
+ tableGrid = createTableGrid(table);
+ tableGrid.setStartCell(startCell);
+
+ ed.getBody().style.webkitUserSelect = 'none';
+ }
+
+ tableGrid.setEndCell(target);
+ hasCellSelection = true;
+ }
+
+ // Remove current selection
+ sel = ed.selection.getSel();
+
+ try {
+ if (sel.removeAllRanges)
+ sel.removeAllRanges();
+ else
+ sel.empty();
+ } catch (ex) {
+ // IE9 might throw errors here
+ }
+
+ e.preventDefault();
+ }
+ });
+
+ ed.onMouseUp.add(function(ed, e) {
+ var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode;
+
+ // Move selection to startCell
+ if (startCell) {
+ if (tableGrid)
+ ed.getBody().style.webkitUserSelect = '';
+
+ function setPoint(node, start) {
+ var walker = new tinymce.dom.TreeWalker(node, node);
+
+ do {
+ // Text node
+ if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {
+ if (start)
+ rng.setStart(node, 0);
+ else
+ rng.setEnd(node, node.nodeValue.length);
+
+ return;
+ }
+
+ // BR element
+ if (node.nodeName == 'BR') {
+ if (start)
+ rng.setStartBefore(node);
+ else
+ rng.setEndBefore(node);
+
+ return;
+ }
+ } while (node = (start ? walker.next() : walker.prev()));
+ }
+
+ // Try to expand text selection as much as we can only Gecko supports cell selection
+ selectedCells = dom.select('td.mceSelected,th.mceSelected');
+ if (selectedCells.length > 0) {
+ rng = dom.createRng();
+ node = selectedCells[0];
+ endNode = selectedCells[selectedCells.length - 1];
+ rng.setStartBefore(node);
+ rng.setEndAfter(node);
+
+ setPoint(node, 1);
+ walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table'));
+
+ do {
+ if (node.nodeName == 'TD' || node.nodeName == 'TH') {
+ if (!dom.hasClass(node, 'mceSelected'))
+ break;
+
+ lastNode = node;
+ }
+ } while (node = walker.next());
+
+ setPoint(lastNode);
+
+ sel.setRng(rng);
+ }
+
+ ed.nodeChanged();
+ startCell = tableGrid = startTable = null;
+ }
+ });
+
+ ed.onKeyUp.add(function(ed, e) {
+ cleanup();
+ });
+
+ ed.onKeyDown.add(function (ed, e) {
+ fixTableCellSelection(ed);
+ });
+
+ ed.onMouseDown.add(function (ed, e) {
+ if (e.button != 2) {
+ fixTableCellSelection(ed);
+ }
+ });
+ function tableCellSelected(ed, rng, n, currentCell) {
+ // The decision of when a table cell is selected is somewhat involved. The fact that this code is
+ // required is actually a pointer to the root cause of this bug. A cell is selected when the start
+ // and end offsets are 0, the start container is a text, and the selection node is either a TR (most cases)
+ // or the parent of the table (in the case of the selection containing the last cell of a table).
+ var TEXT_NODE = 3, table = ed.dom.getParent(rng.startContainer, 'TABLE'),
+ tableParent, allOfCellSelected, tableCellSelection;
+ if (table)
+ tableParent = table.parentNode;
+ allOfCellSelected =rng.startContainer.nodeType == TEXT_NODE &&
+ rng.startOffset == 0 &&
+ rng.endOffset == 0 &&
+ currentCell &&
+ (n.nodeName=="TR" || n==tableParent);
+ tableCellSelection = (n.nodeName=="TD"||n.nodeName=="TH")&& !currentCell;
+ return allOfCellSelected || tableCellSelection;
+ // return false;
+ }
+
+ // this nasty hack is here to work around some WebKit selection bugs.
+ function fixTableCellSelection(ed) {
+ if (!tinymce.isWebKit)
+ return;
+
+ var rng = ed.selection.getRng();
+ var n = ed.selection.getNode();
+ var currentCell = ed.dom.getParent(rng.startContainer, 'TD,TH');
+
+ if (!tableCellSelected(ed, rng, n, currentCell))
+ return;
+ if (!currentCell) {
+ currentCell=n;
+ }
+
+ // Get the very last node inside the table cell
+ var end = currentCell.lastChild;
+ while (end.lastChild)
+ end = end.lastChild;
+
+ // Select the entire table cell. Nothing outside of the table cell should be selected.
+ rng.setEnd(end, end.nodeValue.length);
+ ed.selection.setRng(rng);
+ }
+ ed.plugins.table.fixTableCellSelection=fixTableCellSelection;
+
+ // Add context menu
+ if (ed && ed.plugins.contextmenu) {
+ ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
+ var sm, se = ed.selection, el = se.getNode() || ed.getBody();
+
+ if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) {
+ m.removeAll();
+
+ if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {
+ m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
+ m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
+ m.addSeparator();
+ }
+
+ if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {
+ m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
+ m.addSeparator();
+ }
+
+ m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}});
+ m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'});
+ m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'});
+ m.addSeparator();
+
+ // Cell menu
+ sm = m.addMenu({title : 'table.cell'});
+ sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'});
+ sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'});
+ sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'});
+
+ // Row menu
+ sm = m.addMenu({title : 'table.row'});
+ sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'});
+ sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});
+ sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});
+ sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});
+ sm.addSeparator();
+ sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});
+ sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});
+ sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows);
+ sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows);
+
+ // Column menu
+ sm = m.addMenu({title : 'table.col'});
+ sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});
+ sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});
+ sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});
+ } else
+ m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'});
+ });
+ }
+
+ // Fix to allow navigating up and down in a table in WebKit browsers.
+ if (tinymce.isWebKit) {
+ function moveSelection(ed, e) {
+ var VK = tinymce.VK;
+ var key = e.keyCode;
+
+ function handle(upBool, sourceNode, event) {
+ var siblingDirection = upBool ? 'previousSibling' : 'nextSibling';
+ var currentRow = ed.dom.getParent(sourceNode, 'tr');
+ var siblingRow = currentRow[siblingDirection];
+
+ if (siblingRow) {
+ moveCursorToRow(ed, sourceNode, siblingRow, upBool);
+ tinymce.dom.Event.cancel(event);
+ return true;
+ } else {
+ var tableNode = ed.dom.getParent(currentRow, 'table');
+ var middleNode = currentRow.parentNode;
+ var parentNodeName = middleNode.nodeName.toLowerCase();
+ if (parentNodeName === 'tbody' || parentNodeName === (upBool ? 'tfoot' : 'thead')) {
+ var targetParent = getTargetParent(upBool, tableNode, middleNode, 'tbody');
+ if (targetParent !== null) {
+ return moveToRowInTarget(upBool, targetParent, sourceNode, event);
+ }
+ }
+ return escapeTable(upBool, currentRow, siblingDirection, tableNode, event);
+ }
+ }
+
+ function getTargetParent(upBool, topNode, secondNode, nodeName) {
+ var tbodies = ed.dom.select('>' + nodeName, topNode);
+ var position = tbodies.indexOf(secondNode);
+ if (upBool && position === 0 || !upBool && position === tbodies.length - 1) {
+ return getFirstHeadOrFoot(upBool, topNode);
+ } else if (position === -1) {
+ var topOrBottom = secondNode.tagName.toLowerCase() === 'thead' ? 0 : tbodies.length - 1;
+ return tbodies[topOrBottom];
+ } else {
+ return tbodies[position + (upBool ? -1 : 1)];
+ }
+ }
+
+ function getFirstHeadOrFoot(upBool, parent) {
+ var tagName = upBool ? 'thead' : 'tfoot';
+ var headOrFoot = ed.dom.select('>' + tagName, parent);
+ return headOrFoot.length !== 0 ? headOrFoot[0] : null;
+ }
+
+ function moveToRowInTarget(upBool, targetParent, sourceNode, event) {
+ var targetRow = getChildForDirection(targetParent, upBool);
+ targetRow && moveCursorToRow(ed, sourceNode, targetRow, upBool);
+ tinymce.dom.Event.cancel(event);
+ return true;
+ }
+
+ function escapeTable(upBool, currentRow, siblingDirection, table, event) {
+ var tableSibling = table[siblingDirection];
+ if (tableSibling) {
+ moveCursorToStartOfElement(tableSibling);
+ return true;
+ } else {
+ var parentCell = ed.dom.getParent(table, 'td,th');
+ if (parentCell) {
+ return handle(upBool, parentCell, event);
+ } else {
+ var backUpSibling = getChildForDirection(currentRow, !upBool);
+ moveCursorToStartOfElement(backUpSibling);
+ return tinymce.dom.Event.cancel(event);
+ }
+ }
+ }
+
+ function getChildForDirection(parent, up) {
+ return parent && parent[up ? 'lastChild' : 'firstChild'];
+ }
+
+ function moveCursorToStartOfElement(n) {
+ ed.selection.setCursorLocation(n, 0);
+ }
+
+ function isVerticalMovement() {
+ return key == VK.UP || key == VK.DOWN;
+ }
+
+ function isInTable(ed) {
+ var node = ed.selection.getNode();
+ var currentRow = ed.dom.getParent(node, 'tr');
+ return currentRow !== null;
+ }
+
+ function columnIndex(column) {
+ var colIndex = 0;
+ var c = column;
+ while (c.previousSibling) {
+ c = c.previousSibling;
+ colIndex = colIndex + getSpanVal(c, "colspan");
+ }
+ return colIndex;
+ }
+
+ function findColumn(rowElement, columnIndex) {
+ var c = 0;
+ var r = 0;
+ each(rowElement.children, function(cell, i) {
+ c = c + getSpanVal(cell, "colspan");
+ r = i;
+ if (c > columnIndex)
+ return false;
+ });
+ return r;
+ }
+
+ function moveCursorToRow(ed, node, row, upBool) {
+ var srcColumnIndex = columnIndex(ed.dom.getParent(node, 'td,th'));
+ var tgtColumnIndex = findColumn(row, srcColumnIndex);
+ var tgtNode = row.childNodes[tgtColumnIndex];
+ var rowCellTarget = getChildForDirection(tgtNode, upBool);
+ moveCursorToStartOfElement(rowCellTarget || tgtNode);
+ }
+
+ function shouldFixCaret(preBrowserNode) {
+ var newNode = ed.selection.getNode();
+ var newParent = ed.dom.getParent(newNode, 'td,th');
+ var oldParent = ed.dom.getParent(preBrowserNode, 'td,th');
+ return newParent && newParent !== oldParent && checkSameParentTable(newParent, oldParent)
+ }
+
+ function checkSameParentTable(nodeOne, NodeTwo) {
+ return ed.dom.getParent(nodeOne, 'TABLE') === ed.dom.getParent(NodeTwo, 'TABLE');
+ }
+
+ if (isVerticalMovement() && isInTable(ed)) {
+ var preBrowserNode = ed.selection.getNode();
+ setTimeout(function() {
+ if (shouldFixCaret(preBrowserNode)) {
+ handle(!e.shiftKey && key === VK.UP, preBrowserNode, e);
+ }
+ }, 0);
+ }
+ }
+
+ ed.onKeyDown.add(moveSelection);
+ }
+
+ // Fixes an issue on Gecko where it's impossible to place the caret behind a table
+ // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled
+ if (!tinymce.isIE) {
+ function fixTableCaretPos() {
+ var last;
+
+ // Skip empty text nodes form the end
+ for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ;
+
+ if (last && last.nodeName == 'TABLE')
+ ed.dom.add(ed.getBody(), 'p', null, '<br mce_bogus="1" />');
+ };
+
+ // Fixes an bug where it's impossible to place the caret before a table in Gecko
+ // this fix solves it by detecting when the caret is at the beginning of such a table
+ // and then manually moves the caret infront of the table
+ if (tinymce.isGecko) {
+ ed.onKeyDown.add(function(ed, e) {
+ var rng, table, dom = ed.dom;
+
+ // On gecko it's not possible to place the caret before a table
+ if (e.keyCode == 37 || e.keyCode == 38) {
+ rng = ed.selection.getRng();
+ table = dom.getParent(rng.startContainer, 'table');
+
+ if (table && ed.getBody().firstChild == table) {
+ if (isAtStart(rng, table)) {
+ rng = dom.createRng();
+
+ rng.setStartBefore(table);
+ rng.setEndBefore(table);
+
+ ed.selection.setRng(rng);
+
+ e.preventDefault();
+ }
+ }
+ }
+ });
+ }
+
+ ed.onKeyUp.add(fixTableCaretPos);
+ ed.onSetContent.add(fixTableCaretPos);
+ ed.onVisualAid.add(fixTableCaretPos);
+
+ ed.onPreProcess.add(function(ed, o) {
+ var last = o.node.lastChild;
+
+ if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR')
+ ed.dom.remove(last);
+ });
+
+ fixTableCaretPos();
+ ed.startContent = ed.getContent({format : 'raw'});
+ }
+ });
+
+ // Register action commands
+ each({
+ mceTableSplitCells : function(grid) {
+ grid.split();
+ },
+
+ mceTableMergeCells : function(grid) {
+ var rowSpan, colSpan, cell;
+
+ cell = ed.dom.getParent(ed.selection.getNode(), 'th,td');
+ if (cell) {
+ rowSpan = cell.rowSpan;
+ colSpan = cell.colSpan;
+ }
+
+ if (!ed.dom.select('td.mceSelected,th.mceSelected').length) {
+ winMan.open({
+ url : url + '/merge_cells.htm',
+ width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)),
+ height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)),
+ inline : 1
+ }, {
+ rows : rowSpan,
+ cols : colSpan,
+ onaction : function(data) {
+ grid.merge(cell, data.cols, data.rows);
+ },
+ plugin_url : url
+ });
+ } else
+ grid.merge();
+ },
+
+ mceTableInsertRowBefore : function(grid) {
+ grid.insertRow(true);
+ },
+
+ mceTableInsertRowAfter : function(grid) {
+ grid.insertRow();
+ },
+
+ mceTableInsertColBefore : function(grid) {
+ grid.insertCol(true);
+ },
+
+ mceTableInsertColAfter : function(grid) {
+ grid.insertCol();
+ },
+
+ mceTableDeleteCol : function(grid) {
+ grid.deleteCols();
+ },
+
+ mceTableDeleteRow : function(grid) {
+ grid.deleteRows();
+ },
+
+ mceTableCutRow : function(grid) {
+ clipboardRows = grid.cutRows();
+ },
+
+ mceTableCopyRow : function(grid) {
+ clipboardRows = grid.copyRows();
+ },
+
+ mceTablePasteRowBefore : function(grid) {
+ grid.pasteRows(clipboardRows, true);
+ },
+
+ mceTablePasteRowAfter : function(grid) {
+ grid.pasteRows(clipboardRows);
+ },
+
+ mceTableDelete : function(grid) {
+ grid.deleteTable();
+ }
+ }, function(func, name) {
+ ed.addCommand(name, function() {
+ var grid = createTableGrid();
+
+ if (grid) {
+ func(grid);
+ ed.execCommand('mceRepaint');
+ cleanup();
+ }
+ });
+ });
+
+ // Register dialog commands
+ each({
+ mceInsertTable : function(val) {
+ winMan.open({
+ url : url + '/table.htm',
+ width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)),
+ height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url,
+ action : val ? val.action : 0
+ });
+ },
+
+ mceTableRowProps : function() {
+ winMan.open({
+ url : url + '/row.htm',
+ width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)),
+ height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ },
+
+ mceTableCellProps : function() {
+ winMan.open({
+ url : url + '/cell.htm',
+ width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)),
+ height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ }
+ }, function(func, name) {
+ ed.addCommand(name, function(ui, val) {
+ func(val);
+ });
+ });
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin);
+})(tinymce);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js
new file mode 100644
index 000000000..d6f329059
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/cell.js
@@ -0,0 +1,319 @@
+tinyMCEPopup.requireLangPack();
+
+var ed;
+
+function init() {
+ ed = tinyMCEPopup.editor;
+ tinyMCEPopup.resizeToInnerSize();
+
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
+ document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')
+
+ var inst = ed;
+ var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th");
+ var formObj = document.forms[0];
+ var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));
+
+ // Get table cell data
+ var celltype = tdElm.nodeName.toLowerCase();
+ var align = ed.dom.getAttrib(tdElm, 'align');
+ var valign = ed.dom.getAttrib(tdElm, 'valign');
+ var width = trimSize(getStyle(tdElm, 'width', 'width'));
+ var height = trimSize(getStyle(tdElm, 'height', 'height'));
+ var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));
+ var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));
+ var className = ed.dom.getAttrib(tdElm, 'class');
+ var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
+ var id = ed.dom.getAttrib(tdElm, 'id');
+ var lang = ed.dom.getAttrib(tdElm, 'lang');
+ var dir = ed.dom.getAttrib(tdElm, 'dir');
+ var scope = ed.dom.getAttrib(tdElm, 'scope');
+
+ // Setup form
+ addClassesToList('class', 'table_cell_styles');
+ TinyMCE_EditableSelects.init();
+
+ if (!ed.dom.hasClass(tdElm, 'mceSelected')) {
+ formObj.bordercolor.value = bordercolor;
+ formObj.bgcolor.value = bgcolor;
+ formObj.backgroundimage.value = backgroundimage;
+ formObj.width.value = width;
+ formObj.height.value = height;
+ formObj.id.value = id;
+ formObj.lang.value = lang;
+ formObj.style.value = ed.dom.serializeStyle(st);
+ selectByValue(formObj, 'align', align);
+ selectByValue(formObj, 'valign', valign);
+ selectByValue(formObj, 'class', className, true, true);
+ selectByValue(formObj, 'celltype', celltype);
+ selectByValue(formObj, 'dir', dir);
+ selectByValue(formObj, 'scope', scope);
+
+ // Resize some elements
+ if (isVisible('backgroundimagebrowser'))
+ document.getElementById('backgroundimage').style.width = '180px';
+
+ updateColor('bordercolor_pick', 'bordercolor');
+ updateColor('bgcolor_pick', 'bgcolor');
+ } else
+ tinyMCEPopup.dom.hide('action');
+}
+
+function updateAction() {
+ var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];
+
+ if (!AutoValidator.validate(formObj)) {
+ tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');
+ return false;
+ }
+
+ tinyMCEPopup.restoreSelection();
+ el = ed.selection.getStart();
+ tdElm = ed.dom.getParent(el, "td,th");
+ trElm = ed.dom.getParent(el, "tr");
+ tableElm = ed.dom.getParent(el, "table");
+
+ // Cell is selected
+ if (ed.dom.hasClass(tdElm, 'mceSelected')) {
+ // Update all selected sells
+ tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) {
+ updateCell(td);
+ });
+
+ ed.addVisual();
+ ed.nodeChanged();
+ inst.execCommand('mceEndUndoLevel');
+ tinyMCEPopup.close();
+ return;
+ }
+
+ switch (getSelectValue(formObj, 'action')) {
+ case "cell":
+ var celltype = getSelectValue(formObj, 'celltype');
+ var scope = getSelectValue(formObj, 'scope');
+
+ function doUpdate(s) {
+ if (s) {
+ updateCell(tdElm);
+
+ ed.addVisual();
+ ed.nodeChanged();
+ inst.execCommand('mceEndUndoLevel');
+ tinyMCEPopup.close();
+ }
+ };
+
+ if (ed.getParam("accessibility_warnings", 1)) {
+ if (celltype == "th" && scope == "")
+ tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate);
+ else
+ doUpdate(1);
+
+ return;
+ }
+
+ updateCell(tdElm);
+ break;
+
+ case "row":
+ var cell = trElm.firstChild;
+
+ if (cell.nodeName != "TD" && cell.nodeName != "TH")
+ cell = nextCell(cell);
+
+ do {
+ cell = updateCell(cell, true);
+ } while ((cell = nextCell(cell)) != null);
+
+ break;
+
+ case "col":
+ var curr, col = 0, cell = trElm.firstChild, rows = tableElm.getElementsByTagName("tr");
+
+ if (cell.nodeName != "TD" && cell.nodeName != "TH")
+ cell = nextCell(cell);
+
+ do {
+ if (cell == tdElm)
+ break;
+ col += cell.getAttribute("colspan");
+ } while ((cell = nextCell(cell)) != null);
+
+ for (var i=0; i<rows.length; i++) {
+ cell = rows[i].firstChild;
+
+ if (cell.nodeName != "TD" && cell.nodeName != "TH")
+ cell = nextCell(cell);
+
+ curr = 0;
+ do {
+ if (curr == col) {
+ cell = updateCell(cell, true);
+ break;
+ }
+ curr += cell.getAttribute("colspan");
+ } while ((cell = nextCell(cell)) != null);
+ }
+
+ break;
+
+ case "all":
+ var rows = tableElm.getElementsByTagName("tr");
+
+ for (var i=0; i<rows.length; i++) {
+ var cell = rows[i].firstChild;
+
+ if (cell.nodeName != "TD" && cell.nodeName != "TH")
+ cell = nextCell(cell);
+
+ do {
+ cell = updateCell(cell, true);
+ } while ((cell = nextCell(cell)) != null);
+ }
+
+ break;
+ }
+
+ ed.addVisual();
+ ed.nodeChanged();
+ inst.execCommand('mceEndUndoLevel');
+ tinyMCEPopup.close();
+}
+
+function nextCell(elm) {
+ while ((elm = elm.nextSibling) != null) {
+ if (elm.nodeName == "TD" || elm.nodeName == "TH")
+ return elm;
+ }
+
+ return null;
+}
+
+function updateCell(td, skip_id) {
+ var inst = ed;
+ var formObj = document.forms[0];
+ var curCellType = td.nodeName.toLowerCase();
+ var celltype = getSelectValue(formObj, 'celltype');
+ var doc = inst.getDoc();
+ var dom = ed.dom;
+
+ if (!skip_id)
+ dom.setAttrib(td, 'id', formObj.id.value);
+
+ dom.setAttrib(td, 'align', formObj.align.value);
+ dom.setAttrib(td, 'vAlign', formObj.valign.value);
+ dom.setAttrib(td, 'lang', formObj.lang.value);
+ dom.setAttrib(td, 'dir', getSelectValue(formObj, 'dir'));
+ dom.setAttrib(td, 'style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));
+ dom.setAttrib(td, 'scope', formObj.scope.value);
+ dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
+
+ // Clear deprecated attributes
+ ed.dom.setAttrib(td, 'width', '');
+ ed.dom.setAttrib(td, 'height', '');
+ ed.dom.setAttrib(td, 'bgColor', '');
+ ed.dom.setAttrib(td, 'borderColor', '');
+ ed.dom.setAttrib(td, 'background', '');
+
+ // Set styles
+ td.style.width = getCSSSize(formObj.width.value);
+ td.style.height = getCSSSize(formObj.height.value);
+ if (formObj.bordercolor.value != "") {
+ td.style.borderColor = formObj.bordercolor.value;
+ td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;
+ td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;
+ } else
+ td.style.borderColor = '';
+
+ td.style.backgroundColor = formObj.bgcolor.value;
+
+ if (formObj.backgroundimage.value != "")
+ td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
+ else
+ td.style.backgroundImage = '';
+
+ if (curCellType != celltype) {
+ // changing to a different node type
+ var newCell = doc.createElement(celltype);
+
+ for (var c=0; c<td.childNodes.length; c++)
+ newCell.appendChild(td.childNodes[c].cloneNode(1));
+
+ for (var a=0; a<td.attributes.length; a++)
+ ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));
+
+ td.parentNode.replaceChild(newCell, td);
+ td = newCell;
+ }
+
+ dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));
+
+ return td;
+}
+
+function changedBackgroundImage() {
+ var formObj = document.forms[0];
+ var st = ed.dom.parseStyle(formObj.style.value);
+
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
+
+ formObj.style.value = ed.dom.serializeStyle(st);
+}
+
+function changedSize() {
+ var formObj = document.forms[0];
+ var st = ed.dom.parseStyle(formObj.style.value);
+
+ var width = formObj.width.value;
+ if (width != "")
+ st['width'] = getCSSSize(width);
+ else
+ st['width'] = "";
+
+ var height = formObj.height.value;
+ if (height != "")
+ st['height'] = getCSSSize(height);
+ else
+ st['height'] = "";
+
+ formObj.style.value = ed.dom.serializeStyle(st);
+}
+
+function changedColor() {
+ var formObj = document.forms[0];
+ var st = ed.dom.parseStyle(formObj.style.value);
+
+ st['background-color'] = formObj.bgcolor.value;
+ st['border-color'] = formObj.bordercolor.value;
+
+ formObj.style.value = ed.dom.serializeStyle(st);
+}
+
+function changedStyle() {
+ var formObj = document.forms[0];
+ var st = ed.dom.parseStyle(formObj.style.value);
+
+ if (st['background-image'])
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
+ else
+ formObj.backgroundimage.value = '';
+
+ if (st['width'])
+ formObj.width.value = trimSize(st['width']);
+
+ if (st['height'])
+ formObj.height.value = trimSize(st['height']);
+
+ if (st['background-color']) {
+ formObj.bgcolor.value = st['background-color'];
+ updateColor('bgcolor_pick','bgcolor');
+ }
+
+ if (st['border-color']) {
+ formObj.bordercolor.value = st['border-color'];
+ updateColor('bordercolor_pick','bordercolor');
+ }
+}
+
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js
new file mode 100644
index 000000000..7ee4bf040
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/merge_cells.js
@@ -0,0 +1,27 @@
+tinyMCEPopup.requireLangPack();
+
+var MergeCellsDialog = {
+ init : function() {
+ var f = document.forms[0];
+
+ f.numcols.value = tinyMCEPopup.getWindowArg('cols', 1);
+ f.numrows.value = tinyMCEPopup.getWindowArg('rows', 1);
+ },
+
+ merge : function() {
+ var func, f = document.forms[0];
+
+ tinyMCEPopup.restoreSelection();
+
+ func = tinyMCEPopup.getWindowArg('onaction');
+
+ func({
+ cols : f.numcols.value,
+ rows : f.numrows.value
+ });
+
+ tinyMCEPopup.close();
+ }
+};
+
+tinyMCEPopup.onInit.add(MergeCellsDialog.init, MergeCellsDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/row.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/row.js
new file mode 100644
index 000000000..a13d69592
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/row.js
@@ -0,0 +1,237 @@
+tinyMCEPopup.requireLangPack();
+
+function init() {
+ tinyMCEPopup.resizeToInnerSize();
+
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
+
+ var inst = tinyMCEPopup.editor;
+ var dom = inst.dom;
+ var trElm = dom.getParent(inst.selection.getStart(), "tr");
+ var formObj = document.forms[0];
+ var st = dom.parseStyle(dom.getAttrib(trElm, "style"));
+
+ // Get table row data
+ var rowtype = trElm.parentNode.nodeName.toLowerCase();
+ var align = dom.getAttrib(trElm, 'align');
+ var valign = dom.getAttrib(trElm, 'valign');
+ var height = trimSize(getStyle(trElm, 'height', 'height'));
+ var className = dom.getAttrib(trElm, 'class');
+ var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));
+ var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
+ var id = dom.getAttrib(trElm, 'id');
+ var lang = dom.getAttrib(trElm, 'lang');
+ var dir = dom.getAttrib(trElm, 'dir');
+
+ selectByValue(formObj, 'rowtype', rowtype);
+
+ // Any cells selected
+ if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) {
+ // Setup form
+ addClassesToList('class', 'table_row_styles');
+ TinyMCE_EditableSelects.init();
+
+ formObj.bgcolor.value = bgcolor;
+ formObj.backgroundimage.value = backgroundimage;
+ formObj.height.value = height;
+ formObj.id.value = id;
+ formObj.lang.value = lang;
+ formObj.style.value = dom.serializeStyle(st);
+ selectByValue(formObj, 'align', align);
+ selectByValue(formObj, 'valign', valign);
+ selectByValue(formObj, 'class', className, true, true);
+ selectByValue(formObj, 'dir', dir);
+
+ // Resize some elements
+ if (isVisible('backgroundimagebrowser'))
+ document.getElementById('backgroundimage').style.width = '180px';
+
+ updateColor('bgcolor_pick', 'bgcolor');
+ } else
+ tinyMCEPopup.dom.hide('action');
+}
+
+function updateAction() {
+ var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];
+ var action = getSelectValue(formObj, 'action');
+
+ if (!AutoValidator.validate(formObj)) {
+ tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');
+ return false;
+ }
+
+ tinyMCEPopup.restoreSelection();
+ trElm = dom.getParent(inst.selection.getStart(), "tr");
+ tableElm = dom.getParent(inst.selection.getStart(), "table");
+
+ // Update all selected rows
+ if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {
+ tinymce.each(tableElm.rows, function(tr) {
+ var i;
+
+ for (i = 0; i < tr.cells.length; i++) {
+ if (dom.hasClass(tr.cells[i], 'mceSelected')) {
+ updateRow(tr, true);
+ return;
+ }
+ }
+ });
+
+ inst.addVisual();
+ inst.nodeChanged();
+ inst.execCommand('mceEndUndoLevel');
+ tinyMCEPopup.close();
+ return;
+ }
+
+ switch (action) {
+ case "row":
+ updateRow(trElm);
+ break;
+
+ case "all":
+ var rows = tableElm.getElementsByTagName("tr");
+
+ for (var i=0; i<rows.length; i++)
+ updateRow(rows[i], true);
+
+ break;
+
+ case "odd":
+ case "even":
+ var rows = tableElm.getElementsByTagName("tr");
+
+ for (var i=0; i<rows.length; i++) {
+ if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))
+ updateRow(rows[i], true, true);
+ }
+
+ break;
+ }
+
+ inst.addVisual();
+ inst.nodeChanged();
+ inst.execCommand('mceEndUndoLevel');
+ tinyMCEPopup.close();
+}
+
+function updateRow(tr_elm, skip_id, skip_parent) {
+ var inst = tinyMCEPopup.editor;
+ var formObj = document.forms[0];
+ var dom = inst.dom;
+ var curRowType = tr_elm.parentNode.nodeName.toLowerCase();
+ var rowtype = getSelectValue(formObj, 'rowtype');
+ var doc = inst.getDoc();
+
+ // Update row element
+ if (!skip_id)
+ dom.setAttrib(tr_elm, 'id', formObj.id.value);
+
+ dom.setAttrib(tr_elm, 'align', getSelectValue(formObj, 'align'));
+ dom.setAttrib(tr_elm, 'vAlign', getSelectValue(formObj, 'valign'));
+ dom.setAttrib(tr_elm, 'lang', formObj.lang.value);
+ dom.setAttrib(tr_elm, 'dir', getSelectValue(formObj, 'dir'));
+ dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));
+ dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
+
+ // Clear deprecated attributes
+ dom.setAttrib(tr_elm, 'background', '');
+ dom.setAttrib(tr_elm, 'bgColor', '');
+ dom.setAttrib(tr_elm, 'height', '');
+
+ // Set styles
+ tr_elm.style.height = getCSSSize(formObj.height.value);
+ tr_elm.style.backgroundColor = formObj.bgcolor.value;
+
+ if (formObj.backgroundimage.value != "")
+ tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";
+ else
+ tr_elm.style.backgroundImage = '';
+
+ // Setup new rowtype
+ if (curRowType != rowtype && !skip_parent) {
+ // first, clone the node we are working on
+ var newRow = tr_elm.cloneNode(1);
+
+ // next, find the parent of its new destination (creating it if necessary)
+ var theTable = dom.getParent(tr_elm, "table");
+ var dest = rowtype;
+ var newParent = null;
+ for (var i = 0; i < theTable.childNodes.length; i++) {
+ if (theTable.childNodes[i].nodeName.toLowerCase() == dest)
+ newParent = theTable.childNodes[i];
+ }
+
+ if (newParent == null) {
+ newParent = doc.createElement(dest);
+
+ if (theTable.firstChild.nodeName == 'CAPTION')
+ inst.dom.insertAfter(newParent, theTable.firstChild);
+ else
+ theTable.insertBefore(newParent, theTable.firstChild);
+ }
+
+ // append the row to the new parent
+ newParent.appendChild(newRow);
+
+ // remove the original
+ tr_elm.parentNode.removeChild(tr_elm);
+
+ // set tr_elm to the new node
+ tr_elm = newRow;
+ }
+
+ dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));
+}
+
+function changedBackgroundImage() {
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
+ var st = dom.parseStyle(formObj.style.value);
+
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
+
+ formObj.style.value = dom.serializeStyle(st);
+}
+
+function changedStyle() {
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
+ var st = dom.parseStyle(formObj.style.value);
+
+ if (st['background-image'])
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
+ else
+ formObj.backgroundimage.value = '';
+
+ if (st['height'])
+ formObj.height.value = trimSize(st['height']);
+
+ if (st['background-color']) {
+ formObj.bgcolor.value = st['background-color'];
+ updateColor('bgcolor_pick','bgcolor');
+ }
+}
+
+function changedSize() {
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
+ var st = dom.parseStyle(formObj.style.value);
+
+ var height = formObj.height.value;
+ if (height != "")
+ st['height'] = getCSSSize(height);
+ else
+ st['height'] = "";
+
+ formObj.style.value = dom.serializeStyle(st);
+}
+
+function changedColor() {
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
+ var st = dom.parseStyle(formObj.style.value);
+
+ st['background-color'] = formObj.bgcolor.value;
+
+ formObj.style.value = dom.serializeStyle(st);
+}
+
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/table.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/table.js
new file mode 100644
index 000000000..b21eaa6e7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/js/table.js
@@ -0,0 +1,484 @@
+tinyMCEPopup.requireLangPack();
+
+var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;
+
+function insertTable() {
+ var formObj = document.forms[0];
+ var inst = tinyMCEPopup.editor, dom = inst.dom;
+ var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules;
+ var html = '', capEl, elm;
+ var cellLimit, rowLimit, colLimit;
+
+ tinyMCEPopup.restoreSelection();
+
+ if (!AutoValidator.validate(formObj)) {
+ tinyMCEPopup.alert(AutoValidator.getErrorMessages(formObj).join('. ') + '.');
+ return false;
+ }
+
+ elm = dom.getParent(inst.selection.getNode(), 'table');
+
+ // Get form data
+ cols = formObj.elements['cols'].value;
+ rows = formObj.elements['rows'].value;
+ border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;
+ cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";
+ cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";
+ align = getSelectValue(formObj, "align");
+ frame = getSelectValue(formObj, "tframe");
+ rules = getSelectValue(formObj, "rules");
+ width = formObj.elements['width'].value;
+ height = formObj.elements['height'].value;
+ bordercolor = formObj.elements['bordercolor'].value;
+ bgcolor = formObj.elements['bgcolor'].value;
+ className = getSelectValue(formObj, "class");
+ id = formObj.elements['id'].value;
+ summary = formObj.elements['summary'].value;
+ style = formObj.elements['style'].value;
+ dir = formObj.elements['dir'].value;
+ lang = formObj.elements['lang'].value;
+ background = formObj.elements['backgroundimage'].value;
+ caption = formObj.elements['caption'].checked;
+
+ cellLimit = tinyMCEPopup.getParam('table_cell_limit', false);
+ rowLimit = tinyMCEPopup.getParam('table_row_limit', false);
+ colLimit = tinyMCEPopup.getParam('table_col_limit', false);
+
+ // Validate table size
+ if (colLimit && cols > colLimit) {
+ tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit));
+ return false;
+ } else if (rowLimit && rows > rowLimit) {
+ tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit));
+ return false;
+ } else if (cellLimit && cols * rows > cellLimit) {
+ tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit));
+ return false;
+ }
+
+ // Update table
+ if (action == "update") {
+ dom.setAttrib(elm, 'cellPadding', cellpadding, true);
+ dom.setAttrib(elm, 'cellSpacing', cellspacing, true);
+
+ if (!isCssSize(border)) {
+ dom.setAttrib(elm, 'border', border);
+ } else {
+ dom.setAttrib(elm, 'border', '');
+ }
+
+ if (border == '') {
+ dom.setStyle(elm, 'border-width', '');
+ dom.setStyle(elm, 'border', '');
+ dom.setAttrib(elm, 'border', '');
+ }
+
+ dom.setAttrib(elm, 'align', align);
+ dom.setAttrib(elm, 'frame', frame);
+ dom.setAttrib(elm, 'rules', rules);
+ dom.setAttrib(elm, 'class', className);
+ dom.setAttrib(elm, 'style', style);
+ dom.setAttrib(elm, 'id', id);
+ dom.setAttrib(elm, 'summary', summary);
+ dom.setAttrib(elm, 'dir', dir);
+ dom.setAttrib(elm, 'lang', lang);
+
+ capEl = inst.dom.select('caption', elm)[0];
+
+ if (capEl && !caption)
+ capEl.parentNode.removeChild(capEl);
+
+ if (!capEl && caption) {
+ capEl = elm.ownerDocument.createElement('caption');
+
+ if (!tinymce.isIE)
+ capEl.innerHTML = '<br data-mce-bogus="1"/>';
+
+ elm.insertBefore(capEl, elm.firstChild);
+ }
+
+ if (width && inst.settings.inline_styles) {
+ dom.setStyle(elm, 'width', width);
+ dom.setAttrib(elm, 'width', '');
+ } else {
+ dom.setAttrib(elm, 'width', width, true);
+ dom.setStyle(elm, 'width', '');
+ }
+
+ // Remove these since they are not valid XHTML
+ dom.setAttrib(elm, 'borderColor', '');
+ dom.setAttrib(elm, 'bgColor', '');
+ dom.setAttrib(elm, 'background', '');
+
+ if (height && inst.settings.inline_styles) {
+ dom.setStyle(elm, 'height', height);
+ dom.setAttrib(elm, 'height', '');
+ } else {
+ dom.setAttrib(elm, 'height', height, true);
+ dom.setStyle(elm, 'height', '');
+ }
+
+ if (background != '')
+ elm.style.backgroundImage = "url('" + background + "')";
+ else
+ elm.style.backgroundImage = '';
+
+/* if (tinyMCEPopup.getParam("inline_styles")) {
+ if (width != '')
+ elm.style.width = getCSSSize(width);
+ }*/
+
+ if (bordercolor != "") {
+ elm.style.borderColor = bordercolor;
+ elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;
+ elm.style.borderWidth = cssSize(border);
+ } else
+ elm.style.borderColor = '';
+
+ elm.style.backgroundColor = bgcolor;
+ elm.style.height = getCSSSize(height);
+
+ inst.addVisual();
+
+ // Fix for stange MSIE align bug
+ //elm.outerHTML = elm.outerHTML;
+
+ inst.nodeChanged();
+ inst.execCommand('mceEndUndoLevel');
+
+ // Repaint if dimensions changed
+ if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)
+ inst.execCommand('mceRepaint');
+
+ tinyMCEPopup.close();
+ return true;
+ }
+
+ // Create new table
+ html += '<table';
+
+ html += makeAttrib('id', id);
+ if (!isCssSize(border)) {
+ html += makeAttrib('border', border);
+ }
+
+ html += makeAttrib('cellpadding', cellpadding);
+ html += makeAttrib('cellspacing', cellspacing);
+ html += makeAttrib('data-mce-new', '1');
+
+ if (width && inst.settings.inline_styles) {
+ if (style)
+ style += '; ';
+
+ // Force px
+ if (/^[0-9\.]+$/.test(width))
+ width += 'px';
+
+ style += 'width: ' + width;
+ } else
+ html += makeAttrib('width', width);
+
+/* if (height) {
+ if (style)
+ style += '; ';
+
+ style += 'height: ' + height;
+ }*/
+
+ //html += makeAttrib('height', height);
+ //html += makeAttrib('bordercolor', bordercolor);
+ //html += makeAttrib('bgcolor', bgcolor);
+ html += makeAttrib('align', align);
+ html += makeAttrib('frame', frame);
+ html += makeAttrib('rules', rules);
+ html += makeAttrib('class', className);
+ html += makeAttrib('style', style);
+ html += makeAttrib('summary', summary);
+ html += makeAttrib('dir', dir);
+ html += makeAttrib('lang', lang);
+ html += '>';
+
+ if (caption) {
+ if (!tinymce.isIE)
+ html += '<caption><br data-mce-bogus="1"/></caption>';
+ else
+ html += '<caption></caption>';
+ }
+
+ for (var y=0; y<rows; y++) {
+ html += "<tr>";
+
+ for (var x=0; x<cols; x++) {
+ if (!tinymce.isIE)
+ html += '<td><br data-mce-bogus="1"/></td>';
+ else
+ html += '<td></td>';
+ }
+
+ html += "</tr>";
+ }
+
+ html += "</table>";
+
+ // Move table
+ if (inst.settings.fix_table_elements) {
+ var patt = '';
+
+ inst.focus();
+ inst.selection.setContent('<br class="_mce_marker" />');
+
+ tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) {
+ if (patt)
+ patt += ',';
+
+ patt += n + ' ._mce_marker';
+ });
+
+ tinymce.each(inst.dom.select(patt), function(n) {
+ inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n);
+ });
+
+ dom.setOuterHTML(dom.select('br._mce_marker')[0], html);
+ } else
+ inst.execCommand('mceInsertContent', false, html);
+
+ tinymce.each(dom.select('table[data-mce-new]'), function(node) {
+ var tdorth = dom.select('td,th', node);
+
+ try {
+ // IE9 might fail to do this selection
+ inst.selection.setCursorLocation(tdorth[0], 0);
+ } catch (ex) {
+ // Ignore
+ }
+
+ dom.setAttrib(node, 'data-mce-new', '');
+ });
+
+ inst.addVisual();
+ inst.execCommand('mceEndUndoLevel');
+
+ tinyMCEPopup.close();
+}
+
+function makeAttrib(attrib, value) {
+ var formObj = document.forms[0];
+ var valueElm = formObj.elements[attrib];
+
+ if (typeof(value) == "undefined" || value == null) {
+ value = "";
+
+ if (valueElm)
+ value = valueElm.value;
+ }
+
+ if (value == "")
+ return "";
+
+ // XML encode it
+ value = value.replace(/&/g, '&amp;');
+ value = value.replace(/\"/g, '&quot;');
+ value = value.replace(/</g, '&lt;');
+ value = value.replace(/>/g, '&gt;');
+
+ return ' ' + attrib + '="' + value + '"';
+}
+
+function init() {
+ tinyMCEPopup.resizeToInnerSize();
+
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
+ document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
+ document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
+ document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
+
+ var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');
+ var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";
+ var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules = "", frame = "";
+ var inst = tinyMCEPopup.editor, dom = inst.dom;
+ var formObj = document.forms[0];
+ var elm = dom.getParent(inst.selection.getNode(), "table");
+
+ action = tinyMCEPopup.getWindowArg('action');
+
+ if (!action)
+ action = elm ? "update" : "insert";
+
+ if (elm && action != "insert") {
+ var rowsAr = elm.rows;
+ var cols = 0;
+ for (var i=0; i<rowsAr.length; i++)
+ if (rowsAr[i].cells.length > cols)
+ cols = rowsAr[i].cells.length;
+
+ cols = cols;
+ rows = rowsAr.length;
+
+ st = dom.parseStyle(dom.getAttrib(elm, "style"));
+ border = trimSize(getStyle(elm, 'border', 'borderWidth'));
+ cellpadding = dom.getAttrib(elm, 'cellpadding', "");
+ cellspacing = dom.getAttrib(elm, 'cellspacing', "");
+ width = trimSize(getStyle(elm, 'width', 'width'));
+ height = trimSize(getStyle(elm, 'height', 'height'));
+ bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));
+ bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));
+ align = dom.getAttrib(elm, 'align', align);
+ frame = dom.getAttrib(elm, 'frame');
+ rules = dom.getAttrib(elm, 'rules');
+ className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));
+ id = dom.getAttrib(elm, 'id');
+ summary = dom.getAttrib(elm, 'summary');
+ style = dom.serializeStyle(st);
+ dir = dom.getAttrib(elm, 'dir');
+ lang = dom.getAttrib(elm, 'lang');
+ background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
+ formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;
+
+ orgTableWidth = width;
+ orgTableHeight = height;
+
+ action = "update";
+ formObj.insert.value = inst.getLang('update');
+ }
+
+ addClassesToList('class', "table_styles");
+ TinyMCE_EditableSelects.init();
+
+ // Update form
+ selectByValue(formObj, 'align', align);
+ selectByValue(formObj, 'tframe', frame);
+ selectByValue(formObj, 'rules', rules);
+ selectByValue(formObj, 'class', className, true, true);
+ formObj.cols.value = cols;
+ formObj.rows.value = rows;
+ formObj.border.value = border;
+ formObj.cellpadding.value = cellpadding;
+ formObj.cellspacing.value = cellspacing;
+ formObj.width.value = width;
+ formObj.height.value = height;
+ formObj.bordercolor.value = bordercolor;
+ formObj.bgcolor.value = bgcolor;
+ formObj.id.value = id;
+ formObj.summary.value = summary;
+ formObj.style.value = style;
+ formObj.dir.value = dir;
+ formObj.lang.value = lang;
+ formObj.backgroundimage.value = background;
+
+ updateColor('bordercolor_pick', 'bordercolor');
+ updateColor('bgcolor_pick', 'bgcolor');
+
+ // Resize some elements
+ if (isVisible('backgroundimagebrowser'))
+ document.getElementById('backgroundimage').style.width = '180px';
+
+ // Disable some fields in update mode
+ if (action == "update") {
+ formObj.cols.disabled = true;
+ formObj.rows.disabled = true;
+ }
+}
+
+function changedSize() {
+ var formObj = document.forms[0];
+ var st = dom.parseStyle(formObj.style.value);
+
+/* var width = formObj.width.value;
+ if (width != "")
+ st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";
+ else
+ st['width'] = "";*/
+
+ var height = formObj.height.value;
+ if (height != "")
+ st['height'] = getCSSSize(height);
+ else
+ st['height'] = "";
+
+ formObj.style.value = dom.serializeStyle(st);
+}
+
+function isCssSize(value) {
+ return /^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)$/.test(value);
+}
+
+function cssSize(value, def) {
+ value = tinymce.trim(value || def);
+
+ if (!isCssSize(value)) {
+ return parseInt(value, 10) + 'px';
+ }
+
+ return value;
+}
+
+function changedBackgroundImage() {
+ var formObj = document.forms[0];
+ var st = dom.parseStyle(formObj.style.value);
+
+ st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
+
+ formObj.style.value = dom.serializeStyle(st);
+}
+
+function changedBorder() {
+ var formObj = document.forms[0];
+ var st = dom.parseStyle(formObj.style.value);
+
+ // Update border width if the element has a color
+ if (formObj.border.value != "" && (isCssSize(formObj.border.value) || formObj.bordercolor.value != ""))
+ st['border-width'] = cssSize(formObj.border.value);
+ else {
+ if (!formObj.border.value) {
+ st['border'] = '';
+ st['border-width'] = '';
+ }
+ }
+
+ formObj.style.value = dom.serializeStyle(st);
+}
+
+function changedColor() {
+ var formObj = document.forms[0];
+ var st = dom.parseStyle(formObj.style.value);
+
+ st['background-color'] = formObj.bgcolor.value;
+
+ if (formObj.bordercolor.value != "") {
+ st['border-color'] = formObj.bordercolor.value;
+
+ // Add border-width if it's missing
+ if (!st['border-width'])
+ st['border-width'] = cssSize(formObj.border.value, 1);
+ }
+
+ formObj.style.value = dom.serializeStyle(st);
+}
+
+function changedStyle() {
+ var formObj = document.forms[0];
+ var st = dom.parseStyle(formObj.style.value);
+
+ if (st['background-image'])
+ formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");
+ else
+ formObj.backgroundimage.value = '';
+
+ if (st['width'])
+ formObj.width.value = trimSize(st['width']);
+
+ if (st['height'])
+ formObj.height.value = trimSize(st['height']);
+
+ if (st['background-color']) {
+ formObj.bgcolor.value = st['background-color'];
+ updateColor('bgcolor_pick','bgcolor');
+ }
+
+ if (st['border-color']) {
+ formObj.bordercolor.value = st['border-color'];
+ updateColor('bordercolor_pick','bordercolor');
+ }
+}
+
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ar_dlg.js
new file mode 100644
index 000000000..bb2d617d7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.table_dlg',{"rules_border":"\u0627\u0644\u0628\u0631\u0648\u0627\u0632","rules_box":"\u0635\u0646\u062f\u0648\u0642","rules_vsides":"\u0627\u0644\u062c\u0648\u0627\u0646\u0628 \u0627\u0644\u0639\u0645\u0648\u062f\u064a\u0629","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"\u0627\u0644\u062c\u0648\u0627\u0646\u0628 \u0627\u0644\u0623\u0641\u0642\u064a\u0629","rules_below":"\u0623\u062f\u0646\u0627\u0647","rules_above":"\u0623\u0639\u0644\u0649","rules_void":"\u0623\u0644\u063a\u0649",rules:"\u0642\u0648\u0627\u0639\u062f","frame_all":"\u0643\u0627\u0641\u0629","frame_cols":"\u0639\u062f\u062f \u0627\u0644\u0623\u0639\u0645\u062f\u0629","frame_rows":"\u0639\u062f\u062f \u0627\u0644\u0635\u0641\u0648\u0641","frame_groups":"\u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0627\u062a","frame_none":"\u0644\u0627 \u0634\u064a\u0621",frame:"\u0627\u0644\u0625\u0637\u0627\u0631",caption:"\u0627\u0644\u062c\u062f\u0648\u0644 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a\u0629","missing_scope":"\u0647\u0644 \u0627\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0627\u0646\u0643 \u062a\u0631\u064a\u062f \u0627\u0644\u0625\u0633\u062a\u0645\u0631\u0627\u0631 \u0628\u062f\u0648\u0646 \u062a\u062d\u062f\u064a\u062f \u0631\u0623\u0633 \u0644\u0644\u062c\u062f\u0648\u0644.. \u0642\u062f \u064a\u0643\u0648\u0646 \u0635\u0639\u0628 \u0639\u0644\u0649 \u0632\u0648\u0649 \u0627\u0644\u0625\u062d\u062a\u064a\u0627\u062c\u0627\u062a \u0627\u0644\u062e\u0627\u0635\u0647 \u0641\u0647\u0645 \u0645\u062d\u062a\u0648\u064a\u0627\u062a \u062c\u062f\u0648\u0644\u0643","cell_limit":"\u0644\u0642\u062f \u062a\u062c\u0627\u0648\u0632\u062a \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062f\u062f \u0645\u0646 \u0627\u0644\u062e\u0644\u0627\u064a\u0627 {$cells}.","row_limit":"\u0644\u0642\u062f \u062a\u062c\u0627\u0648\u0632\u062a \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062f\u062f \u0627\u0644\u0635\u0641\u0648\u0641 {$rows}.","col_limit":"\u0644\u0642\u062f \u062a\u062c\u0627\u0648\u0632\u062a \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062f\u062f \u0623\u0639\u0645\u062f\u0629 {$cols}.",colgroup:"\u0645\u062c\u0645\u0648\u0639\u0629 \u0623\u0639\u0645\u062f\u0629 ",rowgroup:" \u0645\u062c\u0645\u0648\u0639\u0629 \u0635\u0641",scope:"\u0646\u0637\u0627\u0642",tfoot:"\u0645\u0624\u062e\u0631\u0629 \u0627\u0644\u062c\u062f\u0648\u0644",tbody:"\u062c\u0633\u0645 \u0627\u0644\u062c\u062f\u0648\u0644",thead:"\u0631\u0623\u0633 \u0627\u0644\u062c\u062f\u0648\u0644","row_all":"\u062a\u062d\u062f\u064a\u062b \u0643\u0627\u0641\u0629 \u0627\u0644\u0635\u0641\u0648\u0641 \u0641\u064a \u0627\u0644\u062c\u062f\u0648\u0644","row_even":" \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0635\u0641\u0648\u0641 \u0627\u0644\u0632\u0648\u062c\u064a\u0647 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","row_odd":"\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0635\u0641\u0648\u0641 \u0627\u0644\u0641\u0631\u062f\u064a\u0647 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","row_row":"\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0635\u0641 \u0627\u0644\u062d\u0627\u0644\u064a","cell_all":"\u062a\u062d\u062f\u064a\u062b \u0643\u0644 \u062e\u0644\u0627\u064a\u0627 \u0627\u0644\u062c\u062f\u0648\u0644","cell_row":"\u062a\u062d\u062f\u064a\u062b \u0643\u0627\u0641\u0629 \u0627\u0644\u062e\u0644\u0627\u064a\u0627 \u0641\u064a \u0627\u0644\u0635\u0641","cell_cell":"\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u062e\u0644\u064a\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629",th:"\u0631\u0623\u0633",td:"\u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a",summary:"\u0645\u0644\u062e\u0635",bgimage:"\u0635\u0648\u0631\u0629 \u0627\u0644\u062e\u0644\u0641\u064a\u0629",rtl:"\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631",ltr:"\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646",mime:"\u0627\u0644\u0647\u062f\u0641 \u0646\u0648\u0639 \u0627\u0644\u0645\u0644\u0641",langcode:"\u0631\u0645\u0632 \u0627\u0644\u0644\u063a\u0629",langdir:"\u0627\u062a\u062c\u0627\u0647 \u0644\u063a\u0629",style:"\u0634\u0643\u0644",id:"\u0627\u0644 \u0623\u064a \u062f\u064a Id","merge_cells_title":"\u062f\u0645\u062c \u0627\u0644\u062e\u0644\u0627\u064a\u0627",bgcolor:"\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0629",bordercolor:"\u0644\u0648\u0646 \u0627\u0644\u062d\u062f\u0648\u062f","align_bottom":"\u0627\u0633\u0641\u0644","align_top":"\u0627\u0639\u0644\u0649",valign:"\u0627\u0644\u0645\u062d\u0627\u0630\u0627\u0629 \u0627\u0644\u0631\u0623\u0633\u064a\u0647","cell_type":"\u0646\u0648\u0639 \u0627\u0644\u062e\u0644\u064a\u0629","cell_title":"\u062e\u0635\u0627\u0626\u0635 \u062e\u0644\u064a\u0629 \u062c\u062f\u0648\u0644","row_title":"\u062e\u0635\u0627\u0626\u0635 \u0635\u0641 \u062c\u062f\u0648\u0644","align_middle":"\u0648\u0633\u0637","align_right":"\u064a\u0645\u064a\u0646","align_left":"\u064a\u0633\u0627\u0631","align_default":"\u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a",align:"\u0627\u0644\u0645\u062d\u0627\u0630\u0627\u0629",border:"\u0627\u0644\u062d\u062f\u0648\u062f",cellpadding:"\u0628\u0637\u0627\u0646\u0629 \u0627\u0644\u062e\u0644\u0627\u064a\u0627",cellspacing:"\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u062e\u0644\u0627\u064a\u0627 ",rows:"\u0627\u0644\u0635\u0641\u0648\u0641",cols:"\u0623\u0639\u0645\u062f\u0629",height:"\u0627\u0631\u062a\u0641\u0627\u0639",width:"\u0639\u0631\u0636",title:"\u0625\u062f\u0631\u0627\u062c/\u062a\u0639\u062f\u064a\u0644 \u062c\u062f\u0648\u0644",rowtype:"\u0635\u0641 \u0641\u064a \u062c\u0632\u0621 \u0627\u0644\u062c\u062f\u0648\u0644","advanced_props":"\u062e\u0635\u0627\u0626\u0635 \u0645\u062a\u0642\u062f\u0645\u0647","general_props":"\u062e\u0635\u0627\u0626\u0635 \u0639\u0627\u0645\u0647","advanced_tab":"\u0645\u062a\u0642\u062f\u0645","general_tab":"\u0639\u0627\u0645","cell_col":"\u062a\u062d\u062f\u064a\u062b \u0643\u0644 \u0627\u0644\u062e\u0644\u0627\u064a\u0627 \u0641\u0649 \u0639\u0645\u0648\u062f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/az_dlg.js
new file mode 100644
index 000000000..5d5deca5b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.table_dlg',{"rules_border":"s\u0259rh\u0259d","rules_box":"konteyner","rules_vsides":"\u015faquli t\u0259r\u0259fl\u0259r","rules_rhs":"sa\u011f \u00fcf\u00fcqi t\u0259r\u0259fl\u0259r","rules_lhs":"sol \u00fcf\u00fcqi t\u0259r\u0259fl\u0259r","rules_hsides":"\u00fcf\u00fcqi t\u0259r\u0259fl\u0259r","rules_below":"a\u015fa\u011f\u0131dan","rules_above":"yuxar\u0131dan","rules_void":"he\u00e7 n\u0259",rules:"X\u0259ttl\u0259r","frame_all":"ham\u0131s\u0131","frame_cols":"s\u00fctunlar","frame_rows":"s\u0259trl\u0259r","frame_groups":"qruplar","frame_none":"he\u00e7n\u0259",frame:"\u00c7\u0259r\u00e7iv\u0259",caption:"C\u0259dv\u0259l ba\u015fl\u0131\u011f\u0131","missing_scope":"\u018fminsiniz ki, ba\u015fl\u0131q \u00f6z\u0259yinin h\u0259ddini g\u00f6st\u0259rm\u0259d\u0259n davam etm\u0259k ist\u0259yirsiniz? Bunsuz b\u0259zi i\u015f qabiliyy\u0259ti a\u015fa\u011f\u0131 olan istifad\u0259\u00e7il\u0259r\u0259 c\u0259dv\u0259lin m\u0259lumatlar\u0131 v\u0259 t\u0259rkibini anlamaq \u00e7\u0259tin olacaq.","cell_limit":"Siz \u00f6z\u0259kl\u0259rd\u0259 {$cells} maksimum say\u0131 a\u015fd\u0131n\u0131z.","row_limit":"Siz s\u0259trl\u0259rd\u0259 {$rows} maksimum say\u0131 a\u015fd\u0131n\u0131z.","col_limit":"Siz s\u00fctunlarda {$cols} maksimum say\u0131 a\u015fd\u0131n\u0131z.",colgroup:"S\u00fctun qrupu",rowgroup:"S\u0259tr qrupu",scope:"H\u0259dd",tfoot:"C\u0259dv\u0259lin a\u015fa\u011f\u0131 hiss\u0259si",tbody:"C\u0259dv\u0259lin \u0259sas hiss\u0259si",thead:"C\u0259dv\u0259lin yuxar\u0131 hiss\u0259si","row_all":"C\u0259dv\u0259ld\u0259ki b\u00fct\u00fcn s\u0259trl\u0259ri yenil\u0259","row_even":"C\u0259dv\u0259ld\u0259ki c\u00fct (\u0259d\u0259d) s\u0259trl\u0259ri yenil\u0259","row_odd":"C\u0259d\u0259ld\u0259ki t\u0259k (\u0259d\u0259d) s\u0259trl\u0259ri yenil\u0259","row_row":"Haz\u0131rki s\u0259tri yenil\u0259","cell_all":"C\u0259dv\u0259ld\u0259ki b\u00fct\u00fcn \u00f6z\u0259kl\u0259ri yenil\u0259","cell_row":"S\u0259trd\u0259ki b\u00fct\u00fcn \u00f6z\u0259kl\u0259ri yenil\u0259","cell_cell":"Haz\u0131rki \u00f6z\u0259yi yenil\u0259",th:"Ba\u015fl\u0131q",td:"Veril\u0259nl\u0259r",summary:"X\u00fclas\u0259",bgimage:"Fon \u015f\u0259kli",rtl:"Sa\u011fda-sola",ltr:"Solda-sa\u011fa",mime:"H\u0259d\u0259fli MIME-n\u00f6v",langcode:"Dil kodu",langdir:"Dil istiqam\u0259ti",style:"Stil",id:"\u0130dentifikator","merge_cells_title":"\u00d6z\u0259k stili",bgcolor:"Fon r\u0259ngi",bordercolor:"S\u0259rh\u0259d r\u0259ngi","align_bottom":"A\u015fa\u011f\u0131 il\u0259","align_top":"Yuxar\u0131 il\u0259",valign:"\u015eaquli tarazla\u015fma","cell_type":"\u00d6z\u0259k n\u00f6v\u00fc","cell_title":"\u00d6z\u0259k x\u00fcsusiyy\u0259ti","row_title":"S\u0259tr x\u00fcsusiyy\u0259ti","align_middle":"M\u0259rk\u0259z il\u0259","align_right":"Sa\u011fa","align_left":"Sola","align_default":"Default",align:"Tarazla\u015fd\u0131rma",border:"S\u0259rh\u0259d",cellpadding:"\u00d6z\u0259kl\u0259rd\u0259 doldurma",cellspacing:"\u00d6z\u0259kl\u0259r aras\u0131ndak\u0131 m\u0259saf\u0259",rows:"S\u0259trl\u0259r",cols:"S\u00fctunlar",height:"H\u00fcnd\u00fcrl\u00fcy\u00fc",width:"Eni",title:"C\u0259dv\u0259li \u0259lav\u0259 et/d\u0259yi\u015fdir",rowtype:"C\u0259dv\u0259l hiss\u0259sind\u0259ki s\u0259tr","advanced_props":"\u018flav\u0259 x\u00fcsusiyy\u0259tl\u0259r","general_props":"\u00dcmumi x\u00fcsusiyy\u0259tl\u0259r","advanced_tab":"\u018flav\u0259l\u0259r","general_tab":"\u00dcmumi","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/be_dlg.js
new file mode 100644
index 000000000..3d0d7f953
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.table_dlg',{"rules_border":"\u043c\u044f\u0436\u0430","rules_box":"\u043a\u0430\u043d\u0442\u044d\u0439\u043d\u0435\u0440","rules_vsides":"\u0432\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u044f \u0431\u0430\u043a\u0456","rules_rhs":"\u043f\u0440\u0430\u0432\u044b\u044f \u0433\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u044f \u0431\u0430\u043a\u0456","rules_lhs":"\u043b\u0435\u0432\u044b\u044f \u0433\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u044f \u0431\u0430\u043a\u0456","rules_hsides":"\u0433\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u044f \u0431\u0430\u043a\u0456","rules_below":"\u0437\u043d\u0456\u0437\u0443","rules_above":"\u0437\u0432\u0435\u0440\u0445\u0443","rules_void":"\u043d\u0456\u0448\u0442\u043e",rules:"\u041f\u0440\u0430\u0432\u0456\u043b\u044b","frame_all":"\u0443\u0441\u0451","frame_cols":"\u0441\u043b\u0443\u043f\u043a\u0456","frame_rows":"\u0440\u0430\u0434\u043a\u0456","frame_groups":"\u0433\u0440\u0443\u043f\u044b","frame_none":"\u043d\u0456\u0447\u043e\u0433\u0430",frame:"\u0420\u0430\u043c\u043a\u0430",caption:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a \u0442\u0430\u0431\u043b\u0456\u0446\u044b","missing_scope":"\u0412\u044b \u0441\u0430\u043f\u0440\u0430\u045e\u0434\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u043f\u0440\u0430\u0446\u044f\u0433\u043d\u0443\u0446\u044c \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044f \u043c\u0435\u0436 \u0433\u044d\u0442\u0430\u0439 \u044f\u0447\u044d\u0439\u043a\u0456 \u0437\u0430\u0433\u0430\u043b\u043e\u045e\u043a\u0430? \u0411\u0435\u0437 \u0433\u044d\u0442\u0430\u0433\u0430 \u043d\u0435\u043a\u0430\u0442\u043e\u0440\u044b\u043c \u043a\u0430\u0440\u044b\u0441\u0442\u0430\u043b\u044c\u043d\u0456\u043a\u0430\u043c \u0437 \u0430\u0431\u043c\u0435\u0436\u0430\u0432\u0430\u043d\u0430\u0439 \u043f\u0440\u0430\u0446\u0430\u0437\u0434\u043e\u043b\u044c\u043d\u0430\u0441\u0446\u044e \u043c\u043e\u0436\u0430 \u0431\u044b\u0446\u044c \u0446\u044f\u0436\u043a\u0430 \u0437\u0440\u0430\u0437\u0443\u043c\u0435\u0446\u044c \u0443\u0442\u0440\u044b\u043c\u0430\u043d\u043d\u0435 \u0430\u0431\u043e \u0434\u0430\u043d\u044b\u044f \u0442\u0430\u0431\u043b\u0456\u0446\u044b.","cell_limit":"\u0412\u044b \u043f\u0435\u0440\u0430\u0432\u044b\u0441\u0456\u043b\u0456 \u043c\u0430\u043a\u0441\u0456\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043b\u044c\u043a\u0430\u0441\u0446\u044c \u0443 {$cells} \u044f\u0447\u044d\u0435\u043a.","row_limit":"\u0412\u044b \u043f\u0435\u0440\u0430\u0432\u044b\u0441\u0456\u043b\u0456 \u043c\u0430\u043a\u0441\u0456\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043b\u044c\u043a\u0430\u0441\u0446\u044c \u0443 {$rows} \u0440\u0430\u0434\u043a\u043e\u045e.","col_limit":"\u0412\u044b \u043f\u0435\u0440\u0430\u0432\u044b\u0441\u0456\u043b\u0456 \u043c\u0430\u043a\u0441\u0456\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043b\u044c\u043a\u0430\u0441\u0446\u044c \u0443 {$cols} \u0441\u043b\u0443\u043f\u043a\u043e\u045e.",colgroup:"\u0413\u0440\u0443\u043f\u0430 \u0441\u043b\u0443\u043f\u043a\u043e\u045e",rowgroup:"\u0413\u0440\u0443\u043f\u0430 \u0440\u0430\u0434\u043a\u043e\u045e",scope:"\u041c\u0435\u0436\u044b",tfoot:"\u041d\u0456\u0436\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u043a\u0430 \u0442\u0430\u0431\u043b\u0456\u0446\u044b",tbody:"\u0410\u0441\u043d\u043e\u045e\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043a\u0430 \u0442\u0430\u0431\u043b\u0456\u0446\u044b",thead:"\u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u043a\u0430 \u0442\u0430\u0431\u043b\u0456\u0446\u044b","row_all":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0443\u0441\u0435 \u0440\u0430\u0434\u043a\u0456 \u045e \u0442\u0430\u0431\u043b\u0456\u0446\u044b","row_even":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0446\u043e\u0442\u043d\u044b\u044f \u0440\u0430\u0434\u043a\u0456 \u045e \u0442\u0430\u0431\u043b\u0456\u0446\u044b","row_odd":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u043d\u044f\u0446\u043e\u0442\u043d\u044b\u044f \u0440\u0430\u0434\u043a\u0456 \u045e \u0442\u0430\u0431\u043b\u0456\u0446\u044b","row_row":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0431\u044f\u0433\u0443\u0447\u044b \u0440\u0430\u0434\u043e\u043a","cell_all":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0443\u0441\u0435 \u044f\u0447\u044d\u0439\u043a\u0456 \u045e \u0442\u0430\u0431\u043b\u0456\u0446\u044b","cell_row":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0443\u0441\u0435 \u044f\u0447\u044d\u0439\u043a\u0456 \u045e \u0440\u0430\u0434\u043a\u0443","cell_cell":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0431\u044f\u0433\u0443\u0447\u0443\u044e \u044f\u0447\u044d\u0439\u043a\u0443",th:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a",td:"\u0414\u0430\u043d\u044b\u044f",summary:"\u0410\u0433\u0443\u043b\u044c\u043d\u0430\u0435",bgimage:"\u0424\u043e\u043d\u0430\u0432\u044b \u043c\u0430\u043b\u044e\u043d\u0430\u043a",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430",ltr:"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430",mime:"\u041c\u044d\u0442\u0430\u0432\u044b MIME-\u0442\u044b\u043f",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u044b",langdir:"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u043c\u043e\u0432\u044b",style:"\u0421\u0442\u044b\u043b\u044c",id:"\u0406\u0434\u044d\u043d\u0442\u044b\u0444\u0456\u043a\u0430\u0442\u0430\u0440","merge_cells_title":"\u0417\u043b\u0456\u0446\u044c \u044f\u0447\u044d\u0439\u043a\u0456",bgcolor:"\u041a\u043e\u043b\u0435\u0440 \u0444\u043e\u043d\u0443",bordercolor:"\u041a\u043e\u043b\u0435\u0440 \u043c\u044f\u0436\u044b","align_bottom":"\u041f\u0430 \u043d\u0456\u0437\u0435","align_top":"\u041f\u0430 \u0432\u0435\u0440\u0441\u0435",valign:"\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u0430\u0435 \u0432\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435","cell_type":"\u0422\u044b\u043f \u044f\u0447\u044d\u0439\u043a\u0456","cell_title":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u044f\u0447\u044d\u0439\u043a\u0456","row_title":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0440\u0430\u0434\u043a\u0430","align_middle":"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","align_right":"\u041d\u0430\u043f\u0440\u0430\u0432\u0430","align_left":"\u041d\u0430\u043b\u0435\u0432\u0430","align_default":"\u041f\u0430 \u0437\u043c\u0430\u045e\u0447\u0430\u043d\u043d\u0456",align:"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435",border:"\u041c\u044f\u0436\u0430",cellpadding:"\u0412\u043e\u0434\u0441\u0442\u0443\u043f\u044b \u045e \u044f\u0447\u044d\u0439\u043a\u0430\u0445",cellspacing:"\u0410\u0434\u043b\u0435\u0433\u043b\u0430\u0441\u0446\u044c \u043f\u0430\u043c\u0456\u0436 \u044f\u0447\u044d\u0439\u043a\u0430\u043c\u0456",rows:"\u0420\u0430\u0434\u043a\u0456",cols:"\u0421\u043b\u0443\u043f\u043a\u0456",height:"\u0412\u044b\u0448\u044b\u043d\u044f",width:"\u0428\u044b\u0440\u044b\u043d\u044f",title:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0437\u043c\u044f\u043d\u0456\u0446\u044c \u0442\u0430\u0431\u043b\u0456\u0446\u0443",rowtype:"\u0422\u044b\u043f \u0440\u0430\u0434\u043a\u0430","advanced_props":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f \u045e\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456","general_props":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f \u045e\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456","advanced_tab":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f","general_tab":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f","cell_col":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0443\u0441\u0435 \u044f\u0447\u044d\u0439\u043a\u0456 \u045e \u0441\u043b\u0443\u043f\u043a\u0443"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bg_dlg.js
new file mode 100644
index 000000000..30d4181d2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.table_dlg',{"rules_border":"\u0433\u0440\u0430\u043d\u0438\u0446\u0430","rules_box":"\u043a\u0443\u0442\u0438\u044f","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u0441\u043b\u0435\u0434","rules_above":"\u043f\u0440\u0435\u0434\u0438","rules_void":"void",rules:"\u041f\u0440\u0430\u0432\u0438\u043b\u0430","frame_all":"\u0432\u0441\u0438\u0447\u043a\u0438","frame_cols":"\u043a\u043e\u043b\u043e\u043d\u0438","frame_rows":"\u0440\u0435\u0434\u043e\u0432\u0435","frame_groups":"\u0433\u0440\u0443\u043f\u0438","frame_none":"\u0431\u0435\u0437",frame:"\u0424\u0440\u0435\u0439\u043c",caption:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","missing_scope":"\u0421\u0438\u0433\u0443\u0440\u0435\u043d \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u0430 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435 \u0431\u0435\u0437 \u0434\u0430 \u0441\u043b\u043e\u0436\u0438\u0442\u0435 \u043e\u0431\u0445\u0432\u0430\u0442 \u043d\u0430 \u0433\u043b\u0430\u0432\u0430\u0442\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430. \u0411\u0435\u0437 \u043d\u0435\u0433\u043e, \u043d\u044f\u043a\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 \u0441 \u0443\u0432\u0440\u0435\u0436\u0434\u0430\u043d\u0438\u044f \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0438\u043c\u0430\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0434\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0430\u0442 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430.","cell_limit":"\u041f\u0440\u0435\u0432\u0438\u0448\u0438\u0445\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0430\u0442\u0430 \u0431\u0440\u043e\u0439\u043a\u0430 \u043a\u043b\u0435\u0442\u043a\u0438: {$cells}.","row_limit":"\u041f\u0440\u0435\u0432\u0438\u0448\u0438\u0445\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0430\u0442\u0430 \u0431\u0440\u043e\u0439\u043a\u0430 \u0440\u0435\u0434\u043e\u0432\u0435: {$rows}.","col_limit":"\u041f\u0440\u0435\u0432\u0438\u0448\u0438\u0445\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0430\u0442\u0430 \u0431\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043b\u043e\u043d\u0438: {$cols}.",colgroup:"\u0413\u0440\u0443\u043f\u0430 \u043a\u043e\u043b\u043e\u043d\u0438",rowgroup:"\u0413\u0440\u0443\u043f\u0430 \u0440\u0435\u0434\u043e\u0432\u0435",scope:"\u041e\u0431\u0445\u0432\u0430\u0442",tfoot:"\u0414\u044a\u043d\u043e \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430",tbody:"\u0422\u044f\u043b\u043e \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430",thead:"\u0413\u043b\u0430\u0432\u0430 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","row_all":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u0440\u0435\u0434\u043e\u0432\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","row_even":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0447\u0435\u0442\u043d\u0438\u0442\u0435 \u0440\u0435\u0434\u043e\u0432\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","row_odd":"\u041e\u0431\u043d\u043e\u0432\u0438 \u043d\u0435\u0447\u0435\u0442\u043d\u0438\u0442\u0435 \u0440\u0435\u0434\u043e\u0432\u0435 \u0432 \u0442\u0430\u043b\u0438\u0446\u0430\u0442\u0430","row_row":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u044f \u0440\u0435\u0434","cell_all":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u043a\u043b\u0435\u0442\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","cell_row":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u043a\u043b\u0435\u0442\u043a\u0438 \u043d\u0430 \u0440\u0435\u0434\u0430","cell_cell":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u0442\u0430 \u043a\u043b\u0435\u0442\u043a\u0430",th:"\u0413\u043b\u0430\u0432\u0430",td:"\u0414\u0430\u043d\u0438\u043d",summary:"\u041e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435",bgimage:"\u0424\u043e\u043d\u043e\u0432\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430",rtl:"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e",ltr:"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e",mime:"MIME \u0442\u0438\u043f",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430",langdir:"\u041f\u043e\u0441\u043e\u043a\u0430 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430",style:"\u0421\u0442\u0438\u043b",id:"Id","merge_cells_title":"\u0421\u043b\u0435\u0439 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435",bgcolor:"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0444\u043e\u043d\u0430",bordercolor:"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0440\u0430\u043c\u043a\u0430\u0442\u0430","align_bottom":"\u0414\u043e\u043b\u0443","align_top":"\u0413\u043e\u0440\u0435",valign:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","cell_type":"\u0422\u0438\u043f \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","cell_title":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","row_title":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0434\u0430","align_middle":"\u0426\u0435\u043d\u0442\u044a\u0440","align_right":"\u0414\u044f\u0441\u043d\u043e","align_left":"\u041b\u044f\u0432\u043e","align_default":"\u041f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435",align:"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",border:"\u0420\u0430\u043c\u043a\u0430",cellpadding:"\u041e\u0442\u0441\u0442\u044a\u043f \u0432 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435",cellspacing:"\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u044a\u0436\u0434\u0443 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435",rows:"\u0420\u0435\u0434\u043e\u0432\u0435",cols:"\u041a\u043e\u043b\u043e\u043d\u0438",height:"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0430",rowtype:"\u0420\u043e\u043b\u044f \u043d\u0430 \u0440\u0435\u0434\u0430","advanced_props":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","general_props":"\u041e\u0431\u0449\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","advanced_tab":"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","general_tab":"\u041e\u0431\u0449\u0438","cell_col":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u043a\u043b\u0435\u0442\u043a\u0438 \u0432 \u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bn_dlg.js
new file mode 100644
index 000000000..c422b3ac9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/br_dlg.js
new file mode 100644
index 000000000..0572c22e9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.table_dlg',{"rules_border":"Limites","rules_box":"Box","rules_vsides":"Vsides","rules_rhs":"Rhs","rules_lhs":"Lhs","rules_hsides":"Hsides","rules_below":"abaixo","rules_above":"acima","rules_void":"void",rules:"Regras","frame_all":"Todos","frame_cols":"colunas","frame_rows":"Linhas","frame_groups":"Grupos","frame_none":"Nenhum",frame:"Frame",caption:"T\u00edtulo da tabela","missing_scope":"Tem certeza de que quer continuar sem especificar um escopo para esta c\u00e9lula? (Isso poder\u00e1 causar dificuldades a usu\u00e1rios deficientes)","cell_limit":"Excedeu o n\u00famero m\u00e1ximo de c\u00e9lulas de {$cells}.","row_limit":"Excedeu o n\u00famero m\u00e1ximo de linhas de {$rows}.","col_limit":"Excedeu o n\u00famero m\u00e1ximo de colunas de {$cols}.",colgroup:"Grupo colunas",rowgroup:"Grupo linhas",scope:"Alcance",tfoot:"Rodap\u00e9 da tabela",tbody:"Corpo da tabela",thead:"Topo da tabela","row_all":"Atualizar todas as linhas","row_even":"Atualizar linhas pares","row_odd":"Atualizar linhas \u00edmpares","row_row":"Atcualizar esta linha","cell_all":"Atualizar todas as c\u00e9lulas na tabela","cell_row":"Atualizar todas as c\u00e9lulas na linha","cell_cell":"Atualizar esta c\u00e9lula",th:"Campo",td:"Dados",summary:"Sum\u00e1rio",bgimage:"Imagem de fundo",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",mime:"MIME alvo",langcode:"C\u00f3digo da linguagem",langdir:"Dire\u00e7\u00e3o do texto",style:"Estilo",id:"Id","merge_cells_title":"Unir c\u00e9lulas",bgcolor:"Cor de fundo",bordercolor:"Cor dos limites","align_bottom":"Abaixo","align_top":"Topo",valign:"Alinhamento vertical","cell_type":"Tipo de c\u00e9lula","cell_title":"Propriedades de c\u00e9lulas","row_title":"Propriedades de linhas","align_middle":"Centro","align_right":"Direita","align_left":"Esquerda","align_default":"Padr\u00e3o",align:"Alinhamento",border:"Limites",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Linhas",cols:"Colunas",height:"Altura",width:"Largura",title:"Inserir/modificar tabela",rowtype:"Linha na parte da tabela","advanced_props":"Propriedades avan\u00e7adas","general_props":"Propriedades gerais","advanced_tab":"Avan\u00e7ado","general_tab":"Geral","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bs_dlg.js
new file mode 100644
index 000000000..11f5d170a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Opis tablice","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.","cell_limit":"Prema\u0161ili ste maksimalni broj \u0107elija ({$cells}).","row_limit":"Prema\u0161ili ste maksimalni broj redaka ({$rows}).","col_limit":"Prema\u0161ili ste maksimalni broj stupaca ({$cols}).",colgroup:"Grupa stupaca",rowgroup:"Grupa redaka",scope:"Domet",tfoot:"Podno\u017eje tablice",tbody:"Tijelo tablice",thead:"Zaglavlje tablice","row_all":"Primjeni na sve retke u tablici","row_even":"Primjeni na parne retke u tablici","row_odd":"Primjeni na neparne retke u tablici","row_row":"Primjeni na odabrani redak","cell_all":"Primjeni na sve \u0107elije u tablici","cell_row":"Primjeni na sve \u0107elije u retku","cell_cell":"Primjeni na odabranu \u0107eliju",th:"Zaglavlje",td:"Podatkovna",summary:"Sa\u017eetak",bgimage:"Slika pozadine",rtl:"S desna na lijevo",ltr:"S lijeva na desno",mime:"MIME tip",langcode:"Kod jezika",langdir:"Smjer jezika",style:"Stil",id:"Id","merge_cells_title":"Spoji \u0107elije",bgcolor:"Background color",bordercolor:"Boja obruba","align_bottom":"Dno","align_top":"Vrh",valign:"Okomito poravnavanje","cell_type":"Tip \u0107elije","cell_title":"Svojstva \u0107elije","row_title":"Svojstva retka","align_middle":"Sredina","align_right":"Desno","align_left":"Lijevo","align_default":"Zadano",align:"Poravnavanje",border:"Obrub",cellpadding:"Dopuna \u0107elije",cellspacing:"Razmak \u0107elija",rows:"Redaka",cols:"Stupaca",height:"Visina",width:"\u0160irina",title:"Umetni/uredi tablicu",rowtype:"Row in table part","advanced_props":"Napredna svojstva","general_props":"Osnovna svojstva","advanced_tab":"Napredno","general_tab":"Osnovno","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ca_dlg.js
new file mode 100644
index 000000000..881c0ae41
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.table_dlg',{"rules_border":"vora","rules_box":"quadre","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"per sota de","rules_above":"per damunt de","rules_void":"buit",rules:"Regles","frame_all":"tot","frame_cols":"columnes","frame_rows":"files","frame_groups":"grups","frame_none":"cap",frame:"Marc",caption:"T\u00edtol de la taula","missing_scope":"Esteu segur que voleu continuar sense indicar un abast per a aquesta cel\u00b7la de cap\u00e7alera. Pot ser dif\u00edcil per a alguns usuaris amb discapacitats entendre el contingut o les dades mostrades a la taula.","cell_limit":"Heu superat el nombre m\u00e0xim de cel\u00b7les de {$cells}..","row_limit":"Heu superat el nombre m\u00e0xim de files de {$rows}.","col_limit":"Heu superat el nombre m\u00e0xim de columnes de {$cols}.",colgroup:"Grup de columnes",rowgroup:"Grup de files",scope:"Abast",tfoot:"Peu de la taula",tbody:"Cos de la taula",thead:"Cap\u00e7alera de la taula","row_all":"Actualitza totes les files","row_even":"Actualitza les files parells","row_odd":"Actualitza les files senars","row_row":"Actualitza la fila","cell_all":"Actualitza totes les cel\u00b7les de la taula","cell_row":"Actualitza totes les cel\u00b7les de la fila","cell_cell":"Actualitza la cel\u00b7la",th:"Cap\u00e7alera",td:"Dades",summary:"Resum",bgimage:"Imatge de fons",rtl:"De dreta a esquerra",ltr:"D\'esquerra a dreta",mime:"Tipus MIME",langcode:"Codi de l\'idioma",langdir:"Direcci\u00f3 de l\'idioma",style:"Estil",id:"Id","merge_cells_title":"Fusiona cel\u00b7les",bgcolor:"Color de fons",bordercolor:"Color de vora","align_bottom":"A baix","align_top":"A dalt",valign:"Alineaci\u00f3 vertical","cell_type":"Tipus de cel\u00b7la","cell_title":"Propietats de cel\u00b7la","row_title":"Propietats de fila","align_middle":"Centre","align_right":"Dreta","align_left":"Esquerra","align_default":"Per defecte",align:"Alineaci\u00f3",border:"Vora",cellpadding:"Separaci\u00f3 de cel\u00b7la",cellspacing:"Espaiat de cel\u00b7la",rows:"Files",cols:"Columnes",height:"Al\u00e7ada",width:"Amplada",title:"Insereix/Modifica taula",rowtype:"Fila","advanced_props":"Propietats avan\u00e7ades","general_props":"Propietats generals","advanced_tab":"Avan\u00e7at","general_tab":"General","cell_col":"Actuaitza totes les cel\u00b7les en la columna"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ch_dlg.js
new file mode 100644
index 000000000..962bb7a7d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.table_dlg',{"rules_border":"\u5916\u6846","rules_box":"\u76d2\u578b","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u8fb9","rules_lhs":"\u5de6\u8fb9","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u89c4\u5219","frame_all":"\u5168\u90e8","frame_cols":"\u680f","frame_rows":"\u884c","frame_groups":"\u7fa4\u7ec4","frame_none":"\u65e0",frame:"\u6846\u67b6",caption:"\u8868\u683c\u6807\u9898","missing_scope":"\u4f60\u786e\u5b9a\u4e0d\u6307\u5b9a\u8868\u683c\u5934\u90e8\u50a8\u5b58\u683c\u4e00\u4e2a\u8303\u56f4\u5417\uff1f\u6ca1\u6709\u5b83\uff0c\u6216\u8bb8\u5bf9\u90a3\u4e9b\u6709\u969c\u788d\u7684\u7528\u6237\u7406\u89e3\u8868\u683c\u5c55\u793a\u7684\u5185\u5bb9\u6216\u6570\u636e\u66f4\u52a0\u7684\u56f0\u96be\u3002","cell_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u50a8\u5b58\u683c\u9650\u5236{$cells} \u50a8\u5b58\u683c\u3002","row_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u884c\u6570\u9650\u5236 {$rows} \u5217\u3002","col_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u680f\u6570\u9650\u5236 {$cols} \u680f\u3002",colgroup:"\u680f\u7fa4\u7ec4",rowgroup:"\u884c\u7fa4\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u5c3e",tbody:"\u8868\u683c\u4e3b\u4f53",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u6240\u6709\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u76ee\u524d\u884c","cell_all":"\u66f4\u65b0\u6240\u6709\u50a8\u5b58\u683c","cell_row":"\u66f4\u65b0\u76ee\u524d\u884c\u7684\u50a8\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u50a8\u5b58\u683c",th:"\u8868\u5934",td:"\u5185\u5bb9",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",mime:"MIME \u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"ID","merge_cells_title":"\u5408\u5e76\u50a8\u5b58\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u9760\u4e0a",valign:"\u5782\u76f4\u5bf9\u9f50","cell_type":"\u50a8\u5b58\u683c\u7c7b\u578b","cell_title":"\u50a8\u5b58\u683c\u6807\u9898","row_title":"\u884c\u5c5e\u6027","align_middle":"\u7f6e\u4e2d\u5bf9\u9f50","align_right":"\u9760\u53f3\u5bf9\u9f50","align_left":"\u9760\u5de6\u5bf9\u9f50","align_default":"\u9ed8\u8ba4",align:"\u5bf9\u9f50\u65b9\u5f0f",border:"\u8fb9\u6846",cellpadding:"\u50a8\u5b58\u683c\u8fb9\u8ddd",cellspacing:"\u50a8\u5b58\u683c\u95f4\u8ddd",rows:"\u884c\u6570",cols:"\u680f\u6570",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u7f16\u8f91\u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u4e00\u822c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cn_dlg.js
new file mode 100644
index 000000000..2b3fc1052
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.table_dlg',{"rules_border":"\u8868\u683c\u8fb9\u6846","rules_box":"\u65b9\u5757","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u8fb9","rules_lhs":"\u5de6\u8fb9","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u89c4\u5219","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u7ec4","frame_none":"\u65e0",frame:"\u6846\u67b6",caption:"\u8868\u683c\u6807\u9898","missing_scope":"\u4f60\u786e\u5b9a\u4e0d\u6307\u5b9a\u8868\u683c\u5934\u90e8\u50a8\u5b58\u683c\u4e00\u4e2a\u8303\u56f4\u5417\uff1f\u6ca1\u6709\u5b83\uff0c\u6216\u8bb8\u5bf9\u90a3\u4e9b\u6709\u969c\u788d\u7684\u7528\u6237\u7406\u89e3\u8868\u683c\u5c55\u793a\u7684\u5185\u5bb9\u6216\u6570\u636e\u66f4\u52a0\u7684\u56f0\u96be\u3002","cell_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u50a8\u5b58\u683c\u9650\u5236{$cells} \u50a8\u5b58\u683c\u3002","row_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u884c\u6570\u9650\u5236 {$rows} \u884c","col_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u884c\u6570\u9650\u5236 {$cols} \u5217",colgroup:"\u5217\u7ec4",rowgroup:"\u884c\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u5c3e",tbody:"\u8868\u683c\u4e3b\u4f53",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u6240\u6709\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u76ee\u524d\u884c","cell_all":"\u66f4\u65b0\u6240\u6709\u50a8\u5b58\u683c","cell_row":"\u66f4\u65b0\u76ee\u524d\u884c\u7684\u50a8\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u50a8\u5b58\u683c",th:"\u8868\u5934",td:"\u5185\u5bb9",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",mime:"MIME \u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"Id\u7f16\u53f7","merge_cells_title":"\u5408\u4f75\u50a8\u5b58\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u5c45\u4e0b","align_top":"\u5c45\u4e0a",valign:"\u5782\u76f4\u5bf9\u9f50","cell_type":"\u50a8\u5b58\u683c\u7c7b\u578b","cell_title":"\u50a8\u5b58\u683c\u5c5e\u6027","row_title":"\u884c\u5c5e\u6027","align_middle":"\u5c45\u4e2d","align_right":"\u5c45\u53f3","align_left":"\u5c45\u5de6","align_default":"\u9ed8\u8ba4",align:"\u5bf9\u9f50",border:"\u8fb9\u6846",cellpadding:"\u8868\u683c\u8fb9\u8ddd",cellspacing:"\u8868\u683c\u95f4\u8ddd",rows:"\u884c",cols:"\u5217",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u4fee\u6539\u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u9009\u9879","general_props":"\u5e38\u89c4\u9009\u9879","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u5e38\u89c4","cell_col":"\u66f4\u65b0\u5217\u7684\u6240\u6709\u5355\u5143\u683c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cs_dlg.js
new file mode 100644
index 000000000..735c5214d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.table_dlg',{"rules_border":"r\u00e1me\u010dek okolo","rules_box":"box okolo","rules_vsides":"vlevo a vpravo","rules_rhs":"vpravo","rules_lhs":"vlevo","rules_hsides":"naho\u0159e a dole","rules_below":"dole","rules_above":"naho\u0159e","rules_void":"\u017e\u00e1dn\u00fd",rules:"Vykreslen\u00ed m\u0159\u00ed\u017eky","frame_all":"v\u0161e","frame_cols":"sloupce","frame_rows":"\u0159\u00e1dky","frame_groups":"oblasti a skupiny sloupc\u016f","frame_none":"\u017e\u00e1dn\u00e1",frame:"R\u00e1me\u010dek tabulky",caption:"Nadpis tabulky","missing_scope":"Skute\u010dn\u011b chcete pokra\u010dovat bez ur\u010den\u00ed oblasti hlavi\u010dky t\u00e9to tabulky? Bez n\u00ed m\u016f\u017ee u n\u011bkter\u00fdch u\u017eivatel\u016f doch\u00e1zet k ur\u010dit\u00fdm probl\u00e9m\u016fm p\u0159i interpretaci a zobrazov\u00e1n\u00ed dat v tabulce.","cell_limit":"P\u0159ekro\u010dili jste maxim\u00e1ln\u00ed po\u010det bun\u011bk {$cells}.","row_limit":"P\u0159ekro\u010dili jste maxim\u00e1ln\u00ed po\u010det \u0159\u00e1dk\u016f {$rows}.","col_limit":"P\u0159ekro\u010dili jste maxim\u00e1ln\u00ed po\u010det sloupc\u016f {$cols}.",colgroup:"Skupina sloupc\u016f",rowgroup:"Skupina \u0159\u00e1dk\u016f",scope:"Hlavi\u010dka pro",tfoot:"Pata tabulky",tbody:"T\u011blo tabulky",thead:"Hlavi\u010dka tabulky","row_all":"Aktualizovat v\u0161echny \u0159\u00e1dky tabulky","row_even":"Aktualizovat sud\u00e9 \u0159\u00e1dky tabulky","row_odd":"Aktualizovat lich\u00e9 \u0159\u00e1dky tabulky","row_row":"Aktualizovat zvolen\u00fd \u0159\u00e1dek","cell_all":"Aktualizovat v\u0161echny bu\u0148ky v tabulce","cell_row":"Aktualizovat v\u0161echny bu\u0148ky v \u0159\u00e1dku","cell_cell":"Aktualizovat zvolenou bu\u0148ku",th:"Z\u00e1hlav\u00ed",td:"Data",summary:"Shrnut\u00ed obsahu",bgimage:"Obr\u00e1zek pozad\u00ed",rtl:"Zprava doleva",ltr:"Zleva doprava",mime:"MIME typ c\u00edle",langcode:"K\u00f3d jazyka",langdir:"Sm\u011br textu",style:"Styl",id:"ID","merge_cells_title":"Spojit bu\u0148ky",bgcolor:"Barva pozad\u00ed",bordercolor:"Barva r\u00e1me\u010dku","align_bottom":"Dol\u016f","align_top":"Nahoru",valign:"Vertik\u00e1ln\u00ed zarovn\u00e1n\u00ed","cell_type":"Typ bu\u0148ky","cell_title":"Vlastnosti bu\u0148ky","row_title":"Vlastnosti \u0159\u00e1dku","align_middle":"Na st\u0159ed","align_right":"Vpravo","align_left":"Vlevo","align_default":"V\u00fdchoz\u00ed",align:"Zarovn\u00e1n\u00ed",border:"R\u00e1me\u010dek",cellpadding:"Odsazen\u00ed obsahu",cellspacing:"Rozestup bun\u011bk",rows:"\u0158\u00e1dky",cols:"Sloupce",height:"V\u00fd\u0161ka",width:"\u0160\u00ed\u0159ka",title:"Vlo\u017eit/upravit tabulku",rowtype:"Typ \u0159\u00e1dku","advanced_props":"Roz\u0161\u00ed\u0159en\u00e9 parametry","general_props":"Obecn\u00e9 parametry","advanced_tab":"Roz\u0161\u00ed\u0159en\u00e9","general_tab":"Obecn\u00e9","cell_col":"Aktualizovat v\u0161echny bu\u0148ky ve sloupci"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cy_dlg.js
new file mode 100644
index 000000000..6a4bc6537
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"o dan","rules_above":"above","rules_void":"void",rules:"Rheolau","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Ffr\u00e2m",caption:"Egluryn tabl","missing_scope":"A ydych chi\'n si\u0175r eich bod eisiau parhau heb penodi cwmpas i\'r cell pennyn yma? Hebddo fo, efallai fydd o\'n anodd i rhai ddefnyddwyr gyda anableddau i ddeallt y cynnwys neu\'r data yn y tabl.","cell_limit":"Rydych wedi mynd tu twnt i\'r nifer uchafswm {$cells} o celloedd.","row_limit":"Rydych wedi mynd tu twnt i\'r nifer uchafswm {$rows} o rhesi.","col_limit":"Rydych wedi mynd tu twnt i\'r nifer uchafswm {$cols} o golofnau.",colgroup:"Gr\u0175p Colofnau",rowgroup:"Gr\u0175p Rhesi",scope:"Cwmpas",tfoot:"Troed Tabl",tbody:"Corff Tabl",thead:"Pen Tabl","row_all":"Diweddaru pob rhes yn y tabl","row_even":"Diweddaru rhesi eilrif yn y tabl","row_odd":"Diweddaru rhesi odrif yn y tabl","row_row":"Diweddaru rhes cyfredol","cell_all":"Diweddaru pob cell yn y tabl","cell_row":"Diweddaru pob cell yn y rhes","cell_cell":"Diweddaru cell cyfredol",th:"Pennyn",td:"Data",summary:"Crynodeb",bgimage:"Delwedd cefndir",rtl:"De i\'r chwith",ltr:"Chwith i\'r dde",mime:"Math MIME targed",langcode:"Cod iaith",langdir:"Cyfeiriad iaith",style:"Arddull",id:"Id","merge_cells_title":"Cyfuno celloedd tabl",bgcolor:"Lliw cefndir",bordercolor:"Lliw border","align_bottom":"Gwaelod","align_top":"Pen",valign:"Aliniad ferigol","cell_type":"Math cell","cell_title":"Priodweddau cell tabl","row_title":"Priodweddau rhes tabl","align_middle":"Canol","align_right":"De","align_left":"Chwith","align_default":"Rhagosodedig",align:"Aliniad",border:"Border",cellpadding:"Padio celloedd",cellspacing:"Bylchiad celloedd",rows:"Rhesi",cols:"Colofnau",height:"Uchder",width:"Lled",title:"Mewnosod/Golygu tabl",rowtype:"Rhes mewn rhan tabl","advanced_props":"Priodweddau uwch","general_props":"Priodweddau cyffredinol","advanced_tab":"Uwch","general_tab":"Cyffredinol","cell_col":"Diweddaru pob cell yn y colofn"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/da_dlg.js
new file mode 100644
index 000000000..13220a5a1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.table_dlg',{"rules_border":"kant","rules_box":"boks","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"under","rules_above":"over","rules_void":"void",rules:"Regler","frame_all":"alle","frame_cols":"kolonner","frame_rows":"r\u00e6kker","frame_groups":"grupper","frame_none":"ingen",frame:"Ramme",caption:"Tabeloverskrift","missing_scope":"Er du sikker p\u00e5, du vil forts\u00e6tte uden at angive forklaring for denne overskriftscelle? Uden forklaring vil v\u00e6re sv\u00e6rt for f.ek.s blinde at l\u00e6se og forst\u00e5 indholdet i tabellen.","cell_limit":"Du har overskredet antallet af tilladte celler p\u00e5 {$cells}.","row_limit":"Du har overskredet antallet af tilladte r\u00e6kker p\u00e5 {$rows}.","col_limit":"Du har overskredet antallet af tilladte kolonner p\u00e5 {$cols}.",colgroup:"Kolonnegruppe",rowgroup:"R\u00e6kkegruppe",scope:"Forklaring",tfoot:"Tabelfod",tbody:"Tabelkrop",thead:"Tabelhoved","row_all":"Opdater alle r\u00e6kker","row_even":"Opdater lige r\u00e6kker","row_odd":"Opdater ulige r\u00e6kker","row_row":"Opdater aktuelle celle","cell_all":"Opdater alle celler i tabellen","cell_row":"Opdater alle celler i r\u00e6kken","cell_cell":"Opdater aktuelle celle",th:"Hoved",td:"Data",summary:"Beskrivelse",bgimage:"Baggrundsbillede",rtl:"H\u00f8jre mod venstre",ltr:"Venstre mod h\u00f8jre",mime:"Destinations-MIME-type",langcode:"Sprogkode",langdir:"Sprogretning",style:"Style",id:"Id","merge_cells_title":"Flet celler",bgcolor:"Baggrundsfarve",bordercolor:"Kantfarve","align_bottom":"Bund","align_top":"Top",valign:"Vertikal justering","cell_type":"Celletype","cell_title":"Celleegenskaber","row_title":"R\u00e6kkeegenskaber","align_middle":"Centreret","align_right":"H\u00f8jre","align_left":"Venstre","align_default":"Standard",align:"Justering",border:"Kant",cellpadding:"Afstand til celleindhold",cellspacing:"Afstand mellem celler",rows:"R\u00e6kker",cols:"Kolonner",height:"H\u00f8jde",width:"Bredde",title:"Inds\u00e6t/rediger tabel",rowtype:"R\u00e6kke i tabel del","advanced_props":"Avancerede egenskaber","general_props":"Generelle egenskaber","advanced_tab":"Avanceret","general_tab":"Generelt","cell_col":"Opdat\u00e9r alle celler i en s\u00f8jle"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/de_dlg.js
new file mode 100644
index 000000000..5a64ebd72
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.table_dlg',{"rules_border":"alle 4 Seiten (Border)","rules_box":"alle 4 Seiten (Box)","rules_vsides":"links und rechts","rules_rhs":"nur rechts","rules_lhs":"nur links","rules_hsides":"oben und unten","rules_below":"nur unten","rules_above":"nur oben","rules_void":"keins",rules:"Gitter","frame_all":"zwischen allen Zellen","frame_cols":"zwischen Spalten","frame_rows":"zwischen Zeilen","frame_groups":"zwischen Gruppen","frame_none":"keine",frame:"Rahmen",caption:"Beschriftung der Tabelle","missing_scope":"Wollen Sie wirklich keine Beziehung f\u00fcr diese \u00dcberschrift angeben? Benutzer mit k\u00f6rperlichen Einschr\u00e4nkungen k\u00f6nnten Schwierigkeiten haben, den Inhalt der Tabelle zu verstehen.","cell_limit":"Sie haben die maximale Zellenzahl von {$cells} \u00fcberschritten.","row_limit":"Sie haben die maximale Zeilenzahl von {$rows} \u00fcberschritten.","col_limit":"Sie haben die maximale Spaltenzahl von {$cols} \u00fcberschritten.",colgroup:"Horizontal gruppieren",rowgroup:"Vertikal gruppieren",scope:"Bezug",tfoot:"Tabellenfu\u00df",tbody:"Tabelleninhalt",thead:"Tabellenkopf","row_all":"Alle Zeilen ver\u00e4ndern","row_even":"Gerade Zeilen ver\u00e4ndern","row_odd":"Ungerade Zeilen ver\u00e4ndern","row_row":"Diese Zeile ver\u00e4ndern","cell_all":"Alle Zellen der Tabelle ver\u00e4ndern","cell_row":"Alle Zellen in dieser Zeile ver\u00e4ndern","cell_cell":"Diese Zelle ver\u00e4ndern",th:"\u00dcberschrift",td:"Textzelle",summary:"Zusammenfassung",bgimage:"Hintergrundbild",rtl:"Rechts nach links",ltr:"Links nach rechts",mime:"MIME-Type des Inhalts",langcode:"Sprachcode",langdir:"Schriftrichtung",style:"Format",id:"ID","merge_cells_title":"Zellen vereinen",bgcolor:"Hintergrundfarbe",bordercolor:"Rahmenfarbe","align_bottom":"Unten","align_top":"Oben",valign:"Vertikale Ausrichtung","cell_type":"Zellentyp","cell_title":"Eigenschaften der Zelle","row_title":"Eigenschaften der Zeile","align_middle":"Mittig","align_right":"Rechts","align_left":"Links","align_default":"Standard",align:"Ausrichtung",border:"Rahmen",cellpadding:"Abstand innerhalb der Zellen",cellspacing:"Zellenabstand",rows:"Zeilen",cols:"Spalten",height:"H\u00f6he",width:"Breite",title:"Tabelle einf\u00fcgen/bearbeiten",rowtype:"Gruppierung","advanced_props":"Erweiterte Einstellungen","general_props":"Allgemeine Einstellungen","advanced_tab":"Erweitert","general_tab":"Allgemein","cell_col":"Alle Zellen in dieser Spalte aktualisieren"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/dv_dlg.js
new file mode 100644
index 000000000..7778f20e2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/el_dlg.js
new file mode 100644
index 000000000..f2510f083
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.table_dlg',{"rules_border":"\u03c0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf","rules_box":"\u03ba\u03bf\u03c5\u03c4\u03af","rules_vsides":"\u03ba\u03ac\u03b8\u03b5\u03c4\u03b5\u03c2 \u03c0\u03bb\u03b5\u03c5\u03c1\u03ad\u03c2","rules_rhs":"\u03b4\u03b5\u03be\u03b9\u03ac \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03c0\u03bb\u03b5\u03c5\u03c1\u03ac","rules_lhs":"\u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ae \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03c0\u03bb\u03b5\u03c5\u03c1\u03ac","rules_hsides":"\u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b5\u03c2 \u03c0\u03bb\u03b5\u03c5\u03c1\u03ad\u03c2","rules_below":"\u03b1\u03c0\u03cc \u03ba\u03ac\u03c4\u03c9","rules_above":"\u03b1\u03c0\u03cc \u03c0\u03ac\u03bd\u03c9","rules_void":"\u03ba\u03b5\u03bd\u03cc",rules:"\u039a\u03b1\u03bd\u03cc\u03bd\u03b5\u03c2","frame_all":"\u03cc\u03bb\u03b1","frame_cols":"\u03c3\u03c4\u03ae\u03bb\u03b5\u03c2","frame_rows":"\u03b3\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2","frame_groups":"\u03bf\u03bc\u03ac\u03b4\u03b5\u03c2","frame_none":"\u03ba\u03b1\u03bd\u03ad\u03bd\u03b1",frame:"Frame",caption:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","missing_scope":"\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5 \u03c7\u03c9\u03c1\u03af\u03c2 \u03bd\u03b1 \u03ad\u03c7\u03b5\u03c4\u03b5 \u03ba\u03b1\u03b8\u03bf\u03c1\u03af\u03c3\u03b5\u03b9 \u03c4\u03b7\u03bd \u03b5\u03bc\u03b2\u03ad\u03bb\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd \u03c4\u03b7\u03c2 \u03ba\u03bf\u03c1\u03c5\u03c6\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1. \u03a7\u03c9\u03c1\u03af\u03c2 \u03b1\u03c5\u03c4\u03ae, \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03cd\u03c3\u03ba\u03bf\u03bb\u03bf \u03b3\u03b9\u03b1 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf\u03c5\u03c2 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b5\u03c2 \u03bc\u03b5 \u03c0\u03c1\u03bf\u03b2\u03bb\u03ae\u03bc\u03b1\u03c4\u03b1 \u03bd\u03b1 \u03ba\u03b1\u03c4\u03b1\u03bb\u03ac\u03b2\u03bf\u03c5\u03bd \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03c4\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1.","cell_limit":"\u0388\u03c7\u03b5\u03c4\u03b5 \u03be\u03b5\u03c0\u03b5\u03c1\u03ac\u03c3\u03b5\u03b9 \u03c4\u03bf \u03cc\u03c1\u03b9\u03bf \u03c4\u03c9\u03bd \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c0\u03bf\u03c5 \u03b5\u03af\u03bd\u03b1\u03b9 {$cells}.","row_limit":"\u0388\u03c7\u03b5\u03c4\u03b5 \u03be\u03b5\u03c0\u03b5\u03c1\u03ac\u03c3\u03b5\u03b9 \u03c4\u03bf \u03cc\u03c1\u03b9\u03bf \u03c4\u03c9\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03c0\u03bf\u03c5 \u03b5\u03af\u03bd\u03b1\u03b9 {$rows}.","col_limit":"\u0388\u03c7\u03b5\u03c4\u03b5 \u03be\u03b5\u03c0\u03b5\u03c1\u03ac\u03c3\u03b5\u03b9 \u03c4\u03bf \u03cc\u03c1\u03b9\u03bf \u03c4\u03c9\u03bd \u03c3\u03c4\u03b7\u03bb\u03c9\u03bd \u03c0\u03bf\u03c5 \u03b5\u03af\u03bd\u03b1\u03b9 {$cols}.",colgroup:"\u039f\u03bc\u03ac\u03b4\u03b1 \u03c3\u03c4\u03b7\u03bb\u03ce\u03bd",rowgroup:"\u039f\u03bc\u03ac\u03b4\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd",scope:"\u0395\u03bc\u03b2\u03ad\u03bb\u03b5\u03b9\u03b1",tfoot:"\u0392\u03ac\u03c3\u03b7 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",tbody:"\u03a3\u03ce\u03bc\u03b1 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",thead:"\u039a\u03bf\u03c1\u03c5\u03c6\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_all":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03c4\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_even":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03b6\u03c5\u03b3\u03ce\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03c4\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_odd":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03bc\u03bf\u03bd\u03ce\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03c4\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_row":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03c4\u03c1\u03ad\u03c7\u03bf\u03c5\u03c3\u03b1\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","cell_all":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c4\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","cell_row":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c4\u03b7\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","cell_cell":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c4\u03c1\u03ad\u03c7\u03bf\u03bd\u03c4\u03bf\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd",th:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1",td:"\u0394\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1",summary:"\u03a0\u03b5\u03c1\u03af\u03bb\u03b7\u03c8\u03b7",bgimage:"\u0395\u03b9\u03ba\u03cc\u03bd\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5",rtl:"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",ltr:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac",mime:"\u03a4\u03cd\u03c0\u03bf\u03c2 MIME \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",langcode:"\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2",langdir:"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2",style:"\u03a3\u03c4\u03c5\u03bb",id:"Id","merge_cells_title":"\u03a3\u03c5\u03b3\u03c7\u03ce\u03bd\u03b5\u03c5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",bgcolor:"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5",bordercolor:"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c0\u03bb\u03b1\u03b9\u03c3\u03af\u03bf\u03c5","align_bottom":"\u039a\u03ac\u03c4\u03c9","align_top":"\u03a0\u03ac\u03bd\u03c9",valign:"\u039a\u03b1\u03c4\u03b1\u03ba\u03cc\u03c1\u03c5\u03c6\u03b7 \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7","cell_type":"\u03a4\u03cd\u03c0\u03bf\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd","cell_title":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_title":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","align_middle":"\u039a\u03ad\u03bd\u03c4\u03c1\u03bf","align_right":"\u0394\u03b5\u03be\u03b9\u03ac","align_left":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","align_default":"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03b7",align:"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",border:"\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf",cellpadding:"\u0393\u03ad\u03bc\u03b9\u03c3\u03bc\u03b1 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd",cellspacing:"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd",rows:"\u0393\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2",cols:"\u03a3\u03c4\u03ae\u03bb\u03b5\u03c2",height:"\u038e\u03c8\u03bf\u03c2",width:"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",title:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",rowtype:"\u0393\u03c1\u03b1\u03bc\u03bc\u03ae \u03c3\u03b5 \u03bc\u03ad\u03c1\u03bf\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","advanced_props":"\u03a0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b9\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","general_props":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ad\u03c2 \u03b9\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","advanced_tab":"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2","general_tab":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac","cell_col":"\u0391\u03bd\u03b1\u03bd\u03ad\u03c9\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c3\u03c4\u03b7\u03bd \u03c3\u03c4\u03ae\u03bb\u03b7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js
new file mode 100644
index 000000000..463e09ee1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/eo_dlg.js
new file mode 100644
index 000000000..d31f078b7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.table_dlg',{"rules_border":"Bordero","rules_box":"Skatolo","rules_vsides":"Vsides","rules_rhs":"Rhs","rules_lhs":"Lhs","rules_hsides":"Hsides","rules_below":"sube","rules_above":"supre","rules_void":"void",rules:"Reguloj","frame_all":"\u0108iuj","frame_cols":"Kolumnoj","frame_rows":"Linioj","frame_groups":"Grupoj","frame_none":"Neniu",frame:"Kadro",caption:"Titolo de la tabelo","missing_scope":"\u0108u vi certas ke vi volas da\u016drigi sen specifi amplekson por \u0109i tiu \u0109elo? (Tio povos ka\u016dzi malfacila\u0135on al handikapuloj)","cell_limit":"La maksimuma nombro da \u0109eloj {$cells} estis superita.","row_limit":"La maksimuma nombro da linioj {$rows} estis superita.","col_limit":"La maksimuma nombro da kolumnoj {$cols} estis superita.",colgroup:"Kolumnogrupo",rowgroup:"Linigrupo",scope:"Amplekso",tfoot:"Tabelpiedo",tbody:"Tabelkorpo",thead:"Tabelkapo","row_all":"\u011cisdatigi \u0109iujn liniojn","row_even":"\u011cisdatigi parajn liniojn","row_odd":"\u011cisdatigi neparajn liniojn","row_row":"\u011cisdatigi \u0109i tiun linion","cell_all":"\u011cisdatigi \u0109iujn \u0109elojn en la tabelo","cell_row":"\u011cisdatigi \u0109iujn \u0109elojn en la linio","cell_cell":"\u011cisdatigi \u0109i tiun \u0109elon",th:"Kampo",td:"Datumoj",summary:"Resumo",bgimage:"Fonbildo",rtl:"Dekstre-Maldekstren",ltr:"Maldekstre-Dekstren",mime:"Cela MIME",langcode:"Lingvokodo",langdir:"Tekstodirekto",style:"Stilo",id:"Id","merge_cells_title":"Unuigi \u0109elojn",bgcolor:"Fonkoloro",bordercolor:"Borderkoloro","align_bottom":"Sube","align_top":"Supre",valign:"Vert. liniigo","cell_type":"\u0108eltipo","cell_title":"Atributoj de \u0109eloj","row_title":"Atributoj de linioj","align_middle":"Meze","align_right":"Dekstre","align_left":"Maldekstre","align_default":"Defa\u016dlte",align:"Liniigo",border:"Bordero",cellpadding:"Ena kromspaco de \u0109elo",cellspacing:"Kromspaco de \u0109elo",rows:"Linioj",cols:"Kolumnoj",height:"Alteco",width:"Lar\u011deco",title:"Enmeti/redakti tabelon",rowtype:"Tabellinio","advanced_props":"Spertaj atributoj","general_props":"\u011ceneralaj atributoj","advanced_tab":"Sperta","general_tab":"\u011cenerala","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/es_dlg.js
new file mode 100644
index 000000000..32701a8d1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"debajo","rules_above":"encima","rules_void":"vac\u00edo",rules:"Reglas","frame_all":"todos","frame_cols":"cols","frame_rows":"filas","frame_groups":"grupos","frame_none":"ninguno",frame:"Recuadro",caption:"Subt\u00edtulo de la tabla","missing_scope":" \u00bfEst\u00e1 seguro que desea continuar sin especificar el alcance del encabezado de celda? Sin \u00e9l podr\u00eda ser dificultoso para algunos usuarios entender el contenido o los datos mostrados en la tabla.","cell_limit":"Ha superado el n\u00famero m\u00e1ximo de celdas: {$cells}.","row_limit":"Ha superado el n\u00famero m\u00e1ximo de filas: {$rows}.","col_limit":"Ha superado el n\u00famero m\u00e1ximo de columnas: {$cols}.",colgroup:"Grupo de columnas",rowgroup:"Grupo de filas",scope:"Alcance",tfoot:"Pie de la tabla",tbody:"Cuerpo de la tabla",thead:"Encabezado de la tabla","row_all":"Actualizar todas las filas","row_even":"Actualizar filas pares","row_odd":"Actualizar filas impares","row_row":"Actualizar fila actual","cell_all":"Actualizar todas las celdas en la tabla","cell_row":"Actualizar todas las celdas en la fila","cell_cell":"Actualizar celda actual",th:"Encabezado",td:"Datos",summary:"Resumen",bgimage:"Imagen de fondo",rtl:"Derecha a izquierda",ltr:"Izquierda a derecha",mime:"Tipo MIME",langcode:"C\u00f3digo del lenguaje",langdir:"Direcci\u00f3n del lenguaje",style:"Estilo",id:"Id","merge_cells_title":"Vincular celdas",bgcolor:"Color de fondo",bordercolor:"Color del borde","align_bottom":"Debajo","align_top":"Arriba",valign:"Alineaci\u00f3n vertical","cell_type":"Tipo de celda","cell_title":"Propiedades de la celda","row_title":"Propiedades de la fila","align_middle":"Centrado","align_right":"Derecha","align_left":"Izquierda","align_default":"Predet.",align:"Alineaci\u00f3n",border:"Borde",cellpadding:"Relleno de celda",cellspacing:"Espaciado de celda",rows:"Filas",cols:"Cols",height:"Alto",width:"Ancho",title:"Insertar/Modificar tabla",rowtype:"Tipo de fila","advanced_props":"Propiedades avanzadas","general_props":"Propiedades generales","advanced_tab":"Avanzado","general_tab":"General","cell_col":"Actualizar todas las celdas en la columna"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/et_dlg.js
new file mode 100644
index 000000000..61e05ffff
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.table_dlg',{"rules_border":"raam","rules_box":"kast","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"all","rules_above":"\u00fcleval","rules_void":"t\u00fchi",rules:"Reeglid","frame_all":"k\u00f5ik","frame_cols":"veerud","frame_rows":"read","frame_groups":"grupid","frame_none":"mitte \u00fckski",frame:"Raam",caption:"Tabeli seletus","missing_scope":"Oled kindel, et soovid j\u00e4tkata t\u00e4psustamata antud tabeli p\u00e4ise nime?","cell_limit":"Oled j\u00f5udnud maksimaalse arvu elementideni","row_limit":"Oled j\u00f5udnud maksimaalse arvu ridadeni","col_limit":"Oled j\u00f5udnud maksemaalse arvu veegudeni.",colgroup:"Veeru grupp",rowgroup:"Rea grupp",scope:"Ulatus",tfoot:"Tabeli jalus",tbody:"Tabeli sisu",thead:"Tabeli p\u00e4is","row_all":"Uuenda k\u00f5iki ridu tabelis","row_even":"Uuenda paaris ridu tabelis","row_odd":"Uuenda paarituid ridu tabelis","row_row":"Uuenda antud rida","cell_all":"Uuenda k\u00f5iki lahtreid tabelis","cell_row":"Uuenda k\u00f5iki lahtreid reas","cell_cell":"Uuenda antud lahtrit",th:"P\u00e4is",td:"Info",summary:"Kokkuv\u00f5te",bgimage:"Tausta pilt",rtl:"Paremalt vasakule",ltr:"Vasakult paremale",mime:"M\u00e4rgista MIME t\u00fc\u00fcp",langcode:"Keele kood",langdir:"Keele suund",style:"Stiil",id:"ID","merge_cells_title":"\u00dchenda lahtrid",bgcolor:"Tausta v\u00e4rv",bordercolor:"Raami v\u00e4rv","align_bottom":"All","align_top":"\u00dcleval",valign:"Vertikaalne joondus","cell_type":"Veeru t\u00fc\u00fcp","cell_title":"Tabeli veeru seaded","row_title":"Tabeli rea seaded","align_middle":"Keskel","align_right":"Parem","align_left":"Vasak","align_default":"Vaikimisi",align:"Joondus",border:"Raam",cellpadding:"Veeru t\u00e4ide",cellspacing:"Veeru laius",rows:"Ridu",cols:"Veerge",height:"K\u00f5rgus",width:"Laius",title:"Sisesta/muuda tabelit",rowtype:"Rida rea osas","advanced_props":"T\u00e4psustatud seaded","general_props":"\u00dcldised seaded","advanced_tab":"T\u00e4psustatud","general_tab":"\u00dcldine","cell_col":"Uuenda k\u00f5ik veeru lahtrid"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/eu_dlg.js
new file mode 100644
index 000000000..b27211535
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"azpian","rules_above":"gainean","rules_void":"hutsa",rules:"Erregelak","frame_all":"guztiak","frame_cols":"zutabeak","frame_rows":"lerroak","frame_groups":"taldeak","frame_none":"Bat ere ez",frame:"Markoa",caption:"Taularen azpititulua","missing_scope":"Taularen goiburukoari eremu bat zehaztu gabe jarritu nahi duzula ziur zaude? Eremu hori gabe, ezintasunak dituzten erabiltzaileentzat zaila izango da taularen datuak ulertzea.","cell_limit":"Gelaxka kopuru maximoa ({$cells}) gainditu duzu..","row_limit":"Lerro kopuru maximoa ({$rows}) gainditu duzu.","col_limit":"Zutabe kopuru maximoa ({$cols}) gainditu duzu.",colgroup:"Zutabe Taldea",rowgroup:"Lerro Taldea",scope:"Eremua",tfoot:"Taularen Oina",tbody:"Taularen Gorputza",thead:"Taularen Goiburukoa","row_all":"Eguneratu lerro guztiak","row_even":"Eguneratu lerro bikoitiak","row_odd":"Eguneratu lerro bakoitiak","row_row":"Eguneratu uneko lerroa","cell_all":"Eguneratu gelaxka guztiak","cell_row":"Eguneratu lerroko gelaxka guztiak","cell_cell":"Eguneratu uneko gelaxka",th:"Goiburua",td:"Datuak",summary:"Laburpena",bgimage:"Atzeko irudia",rtl:"Eskuinetik ezkerrera",ltr:"Ezkerretik eskuinera",mime:"Helburuareb MIME mota",langcode:"Hizkuntza kodea",langdir:"Hizkuntza norabidea",style:"Estiloa",id:"Id","merge_cells_title":"Bateratu gelaxkak",bgcolor:"Atzeko kolorea",bordercolor:"Ertz kolorea","align_bottom":"Behean","align_top":"Goian",valign:"Lerrokatze bertikala","cell_type":"Gelaxka mota","cell_title":"Gelaxka ezaugarriak","row_title":"Lerro ezaugarriak","align_middle":"Erdian","align_right":"Eskuinera","align_left":"Ezkerrera","align_default":"Lehenetsia",align:"Lerrokatzea",border:"Ertza",cellpadding:"Gelaxkaren betegarria",cellspacing:"Gelaxkaren tartea",rows:"Lerroak",cols:"Zutabeak",height:"Altuera",width:"Zabalera",title:"Txertatu/Aldatu taula",rowtype:"Lerro mota","advanced_props":"Ezaugarri aurreratuak","general_props":"Ezaugarri orokorrak","advanced_tab":"Aurreratua","general_tab":"Orokorra","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fa_dlg.js
new file mode 100644
index 000000000..d26a9375c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.table_dlg',{"rules_border":"\u062d\u0627\u0634\u06cc\u0647","rules_box":"\u062c\u0639\u0628\u0647","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u067e\u0627\u06cc\u06cc\u0646","rules_above":"\u0628\u0627\u0644\u0627","rules_void":"\u062e\u0627\u0644\u06cc",rules:"\u062e\u0637 \u0647\u0627","frame_all":"\u0647\u0645\u0647","frame_cols":"\u0633\u062a\u0648\u0646 \u0647\u0627","frame_rows":"\u0633\u0637\u0631\u0647\u0627","frame_groups":"\u06af\u0631\u0648\u0647 \u0647\u0627","frame_none":"\u0647\u06cc\u0686 \u06a9\u062f\u0627\u0645",frame:"\u0642\u0627\u0628 (Frame)",caption:"\u0639\u0646\u0648\u0627\u0646 \u062c\u062f\u0648\u0644","missing_scope":"\u0622\u06cc\u0627 \u0628\u062f\u0648\u0646 \u062a\u0639\u06cc\u06cc\u0646 \u0645\u062d\u062f\u0648\u062f\u0647 \u0628\u0631\u0627\u06cc \u0633\u0644\u0648\u0644 \u0639\u0646\u0648\u0627\u0646 \u062c\u062f\u0648\u0644\u060c \u0627\u062f\u0627\u0645\u0647 \u0645\u06cc \u062f\u0647\u06cc\u062f\u061f. \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0631\u06a9 \u0645\u062d\u062a\u0648\u0627 \u06cc\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0631\u0627\u06cc \u0628\u0639\u0636\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u0634\u06a9\u0644 \u0628\u0627\u0634\u062f.","cell_limit":"\u0634\u0645\u0627 \u0627\u0632 \u062a\u0639\u062f\u0627\u062f \u062d\u062f\u0627\u06a9\u062b\u0631 {$cells} \u0633\u0644\u0648\u0644 \u062a\u062c\u0627\u0648\u0632 \u06a9\u0631\u062f\u06cc\u062f.","row_limit":"\u0634\u0645\u0627 \u0627\u0632 \u062a\u0639\u062f\u0627\u062f \u062d\u062f\u0627\u06a9\u062b\u0631 {$rows} \u0633\u0637\u0631 \u062a\u062c\u0627\u0648\u0632 \u06a9\u0631\u062f\u06cc\u062f.","col_limit":"\u0634\u0645\u0627 \u0627\u0632 \u062a\u0639\u062f\u0627\u062f \u062d\u062f\u0627\u06a9\u062b\u0631 {$cols} \u0633\u062a\u0648\u0646 \u062a\u062c\u0627\u0648\u0632 \u06a9\u0631\u062f\u06cc\u062f.",colgroup:"\u06af\u0631\u0648\u0647 \u0633\u062a\u0648\u0646",rowgroup:"\u06af\u0631\u0648\u0647 \u0633\u0637\u0631",scope:"\u0645\u062d\u062f\u0648\u062f\u0647",tfoot:"\u067e\u0627\u06cc\u06cc\u0646 \u062c\u062f\u0648\u0644",tbody:"\u0628\u062f\u0646\u0647 \u062c\u062f\u0648\u0644",thead:"\u0628\u0627\u0644\u0627\u06cc \u062c\u062f\u0648\u0644","row_all":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062a\u0645\u0627\u0645\u06cc \u0633\u0637\u0631\u0647\u0627 \u062f\u0631 \u062c\u062f\u0648\u0644","row_even":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0633\u0637\u0631\u0647\u0627\u06cc \u0632\u0648\u062c \u062f\u0631 \u062c\u062f\u0648\u0644","row_odd":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0633\u0637\u0631\u0647\u0627\u06cc \u0641\u0631\u062f \u062f\u0631 \u062c\u062f\u0648\u0644","row_row":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0633\u0637\u0631 \u0641\u0639\u0644\u06cc","cell_all":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062a\u0645\u0627\u0645\u06cc \u0633\u0644\u0648\u0644 \u0647\u0627\u06cc \u062c\u062f\u0648\u0644","cell_row":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062a\u0645\u0627\u0645\u06cc \u0633\u0644\u0648\u0644 \u0647\u0627\u06cc \u0633\u0637\u0631","cell_cell":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0633\u0644\u0648\u0644 \u0641\u0639\u0644\u06cc",th:"\u0633\u0631 \u062c\u062f\u0648\u0644",td:"\u062f\u0627\u062f\u0647",summary:"\u062e\u0644\u0627\u0635\u0647",bgimage:"\u062a\u0635\u0648\u06cc\u0631 \u0632\u0645\u06cc\u0646\u0647",rtl:"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e",ltr:"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a",mime:"\u0646\u0648\u0639 MIME \u0645\u0642\u0635\u062f (Target)",langcode:"\u06a9\u062f \u0632\u0628\u0627\u0646",langdir:"\u062c\u0647\u062a \u0632\u0628\u0627\u0646",style:"\u0627\u0633\u062a\u0627\u06cc\u0644",id:"\u0634\u0646\u0627\u0633\u0647","merge_cells_title":"\u0627\u062f\u063a\u0627\u0645 \u0633\u0644\u0648\u0644 \u0647\u0627\u06cc \u062c\u062f\u0648\u0644",bgcolor:"\u0631\u0646\u06af \u0632\u0645\u06cc\u0646\u0647",bordercolor:"\u0631\u0646\u06af \u062d\u0627\u0634\u06cc\u0647","align_bottom":"\u067e\u0627\u06cc\u06cc\u0646","align_top":"\u0628\u0627\u0644\u0627",valign:"\u062a\u0631\u0627\u0632 \u0639\u0645\u0648\u062f\u06cc","cell_type":"\u0646\u0648\u0639 \u0633\u0644\u0648\u0644","cell_title":"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0644\u0648\u0644 \u062c\u062f\u0648\u0644","row_title":"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0637\u0631 \u062c\u062f\u0648\u0644","align_middle":"\u0648\u0633\u0637","align_right":"\u0631\u0627\u0633\u062a","align_left":"\u0686\u067e","align_default":"\u067e\u06cc\u0634\u0641\u0631\u0636",align:"\u062a\u0631\u0627\u0632",border:"\u062d\u0627\u0634\u06cc\u0647",cellpadding:"\u0644\u0627\u06cc\u0647 \u06af\u0630\u0627\u0631\u06cc \u0633\u0644\u0648\u0644 \u0647\u0627",cellspacing:"\u0641\u0627\u0635\u0644\u0647 \u0633\u0644\u0648\u0644 \u0647\u0627",rows:"\u0633\u0637\u0631\u0647\u0627",cols:"\u0633\u062a\u0648\u0646 \u0647\u0627",height:"\u0627\u0631\u062a\u0641\u0627\u0639",width:"\u067e\u0647\u0646\u0627",title:"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062c\u062f\u0648\u0644",rowtype:"\u0646\u0648\u0639 \u0633\u0637\u0631","advanced_props":"\u0645\u0634\u062e\u0635\u0627\u062a \u067e\u06cc\u0634\u0631\u0641\u062a\u0647","general_props":"\u0645\u0634\u062e\u0635\u0627\u062a \u0639\u0645\u0648\u0645\u06cc","advanced_tab":"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647","general_tab":"\u0639\u0645\u0648\u0645\u06cc","cell_col":"\u0628\u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062a\u0645\u0627\u0645 \u0633\u0644\u0648\u0644\u200c\u0647\u0627 \u062f\u0631 \u0633\u062a\u0648\u0646"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fi_dlg.js
new file mode 100644
index 000000000..87ed83649
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.table_dlg',{"rules_border":"kehys","rules_box":"laatikko","rules_vsides":"pystysuorat reunat","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"vaakasuorat reunat","rules_below":"alapuoli","rules_above":"yl\u00e4puoli","rules_void":"tyhj\u00e4",rules:"S\u00e4\u00e4nn\u00f6t","frame_all":"kaikki","frame_cols":"sarakkeet","frame_rows":"rivit","frame_groups":"ryhm\u00e4t","frame_none":"ei mit\u00e4\u00e4n",frame:"kehys",caption:"Taulukon seloste","missing_scope":"Haluatko varmasti jatkaa m\u00e4\u00e4ritt\u00e4m\u00e4tt\u00e4 tilaa t\u00e4lle taulukon otsakesolulle? Ilman sit\u00e4 joidenkin k\u00e4ytt\u00e4jien voi olla vaikea ymm\u00e4rt\u00e4\u00e4 taulukon sis\u00e4lt\u00e4m\u00e4\u00e4 informaatiota.","cell_limit":"Olet ylitt\u00e4nyt suurimman sallitun m\u00e4\u00e4r\u00e4n soluja {$cells}.","row_limit":"Olet ylitt\u00e4nyt suurimman sallitun m\u00e4\u00e4r\u00e4n rivej\u00e4 {$rows}.","col_limit":"Olet ylitt\u00e4nyt suurimman sallitun m\u00e4\u00e4r\u00e4n sarakkeita {$cols}.",colgroup:"Sarake ryhm\u00e4",rowgroup:"Rivi ryhm\u00e4",scope:"Tila",tfoot:"Taulukon alaosa",tbody:"Taulukon runko",thead:"Taulukon otsake","row_all":"P\u00e4ivit\u00e4 kaikki taulukon rivit","row_even":"P\u00e4ivit\u00e4 taulukon parilliset rivit","row_odd":"P\u00e4ivit\u00e4 taulukon parittomat rivit","row_row":"P\u00e4ivit\u00e4 rivi","cell_all":"P\u00e4ivit\u00e4 kaikki taulukon solut","cell_row":"P\u00e4ivit\u00e4 kaikki rivin solut","cell_cell":"P\u00e4ivit\u00e4 solu",th:"Otsake",td:"Tietue",summary:"Yhteenveto",bgimage:"Taustakuva",rtl:"Oikealta vasemmalle",ltr:"Vasemmalta oikealle",mime:"Kohteen MIME-tyyppi",langcode:"Kielen koodi",langdir:"Kielen suunta",style:"Tyyli",id:"Id","merge_cells_title":"Yhdist\u00e4 taulukon solut",bgcolor:"Taustan v\u00e4ri",bordercolor:"Kehyksen v\u00e4ri","align_bottom":"Alas","align_top":"Yl\u00f6s",valign:"Pystysuunnan tasaus","cell_type":"Solun tyyppi","cell_title":"Taulukon solun asetukset","row_title":"Taulukon rivin asetukset","align_middle":"Keskitetty","align_right":"Oikea","align_left":"Vasen","align_default":"Oletus",align:"Tasaus",border:"Kehys",cellpadding:"Solun tyhj\u00e4 tila",cellspacing:"Solun v\u00e4li",rows:"Rivit",cols:"Sarakkeet",height:"Korkeus",width:"Leveys",title:"Lis\u00e4\u00e4/muokkaa taulukkoa",rowtype:"Rivi taulukon osassa","advanced_props":"Edistyneet asetukset","general_props":"Yleiset asetukset","advanced_tab":"Edistynyt","general_tab":"Yleiset","cell_col":"P\u00e4ivit\u00e4 kaikki sarakkeen solut"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fr_dlg.js
new file mode 100644
index 000000000..9f9488af5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.table_dlg',{"rules_border":"bordure","rules_box":"bo\u00eete","rules_vsides":"verticales","rules_rhs":"\u00e0 droite","rules_lhs":"\u00e0 gauche","rules_hsides":"horizontales","rules_below":"au-dessous","rules_above":"au-dessus","rules_void":"aucune",rules:"R\u00e8gles","frame_all":"tous","frame_cols":"colonnes","frame_rows":"lignes","frame_groups":"groupe","frame_none":"aucun",frame:"Cadre",caption:"Afficher la l\u00e9gende du tableau","missing_scope":"\u00cates-vous s\u00fbr de vouloir continuer sans sp\u00e9cifier de port\u00e9e pour cette cellule de titre ? Sans port\u00e9e, cela peut \u00eatre difficile pour certains utilisateurs de comprendre le contenu ou les donn\u00e9es affich\u00e9es dans le tableau.","cell_limit":"Vous avez d\u00e9pass\u00e9 le nombre maximum de cellules ({$cells}).","row_limit":"Vous avez d\u00e9pass\u00e9 le nombre maximum de lignes ({$rows}).","col_limit":"Vous avez d\u00e9pass\u00e9 le nombre maximum de colonnes ({$cols}).",colgroup:"Groupe de colonnes",rowgroup:"Groupe de lignes",scope:"Port\u00e9e",tfoot:"Pied de tableau",tbody:"Corps de tableau",thead:"En-t\u00eates de tableau","row_all":"Mettre \u00e0 jour toutes les lignes du tableau","row_even":"Mettre \u00e0 jour les lignes paires","row_odd":"Mettre \u00e0 jour les lignes impaires","row_row":"Mettre \u00e0 jour la ligne courante","cell_all":"Mettre \u00e0 jour toutes les cellules du tableau","cell_row":"Mettre \u00e0 jour toutes les cellules de la ligne","cell_cell":"Mettre \u00e0 jour la cellule courante",th:"Titre",td:"Donn\u00e9es",summary:"R\u00e9sum\u00e9",bgimage:"Image de fond",rtl:"de droite \u00e0 gauche",ltr:"De gauche \u00e0 droite",mime:"Type MIME de la cible",langcode:"Code de la langue",langdir:"Sens de lecture",style:"Style",id:"Id","merge_cells_title":"Fusionner les cellules",bgcolor:"Couleur du fond",bordercolor:"Couleur de la bordure","align_bottom":"Bas","align_top":"Haut",valign:"Alignement vertical","cell_type":"Type de cellule","cell_title":"Propri\u00e9t\u00e9s de la cellule","row_title":"Propri\u00e9t\u00e9s de la ligne","align_middle":"Centr\u00e9","align_right":"Droite","align_left":"Gauche","align_default":"Par d\u00e9faut",align:"Alignement",border:"Bordure",cellpadding:"Espacement dans les cellules",cellspacing:"Espacement entre les cellules",rows:"Lignes",cols:"Colonnes",height:"Hauteur",width:"Largeur",title:"Ins\u00e9rer / modifier un tableau",rowtype:"Type de ligne","advanced_props":"Propri\u00e9t\u00e9s avanc\u00e9es","general_props":"Propri\u00e9t\u00e9s g\u00e9n\u00e9rales","advanced_tab":"Avanc\u00e9","general_tab":"G\u00e9n\u00e9ral","cell_col":"Mettre \u00e0 jour toutes les cellules de la colonne"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/gl_dlg.js
new file mode 100644
index 000000000..c992348fe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.table_dlg',{"rules_border":"borde","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"debaixo","rules_above":"encima","rules_void":"vac\u00edo",rules:"Regras","frame_all":"todos","frame_cols":"columnas","frame_rows":"filas","frame_groups":"grupos","frame_none":"ning\u00fan",frame:"Recadro",caption:"Subt\u00edtulo da t\u00e1boa","missing_scope":"\u00bfEst\u00e1 seguro que desexa continuar sen especifica-lo \u00e1mbito do encabezado de celda? Sen \u00e9l podr\u00eda ser dificultoso pra algunos usuarios entende-lo contido ou os datos mostrados na t\u00e1boa.","cell_limit":"Super\u00f3u o n\u00famero m\u00e1ximo de celdas: {$cells}.","row_limit":"Super\u00f3u o n\u00famero m\u00e1ximo de filas: {$rows}.","col_limit":"Super\u00f3u o n\u00famero m\u00e1ximo de columnas: {$cols}.",colgroup:"Grupo de columnas",rowgroup:"Grupo de filas",scope:"\u00c1mbito",tfoot:"Pe da t\u00e1boa",tbody:"Corpo da t\u00e1boa",thead:"Encabezamento da t\u00e1boa","row_all":"Actualizar todalas filas","row_even":"Actualizar filas pares","row_odd":"Actualizar filas impares","row_row":"Actualizar fila actual","cell_all":"Actualizar todalas celdas na t\u00e1boa","cell_row":"Actualizar todalas celdas na fila","cell_cell":"Actualizar celda actual",th:"Encabezamento",td:"Datos",summary:"Resumen",bgimage:"Imaxe de fondo",rtl:"Dereita a esquerda",ltr:"Esquerda a dereita",mime:"Tipo MIME",langcode:"C\u00f3digo da lenguaxe",langdir:"Direcci\u00f3n da lenguaxe",style:"Estilo",id:"Id","merge_cells_title":"Unir celdas",bgcolor:"Cor de fondo",bordercolor:"Cor do borde","align_bottom":"Abaixo","align_top":"Arriba",valign:"Ali\u00f1aci\u00f3n vertical","cell_type":"Tipo de celda","cell_title":"Propiedades da celda","row_title":"Propiedades da fila","align_middle":"Centrado","align_right":"Dereita","align_left":"Esquerda","align_default":"Predet.",align:"Ali\u00f1aci\u00f3n",border:"Borde",cellpadding:"Relleno de celda",cellspacing:"Espaciado de celda",rows:"Filas",cols:"Cols",height:"Alto",width:"Ancho",title:"Insertar/Modificar t\u00e1boa",rowtype:"Tipo de fila","advanced_props":"Propiedades avanzadas","general_props":"Propiedades xerales","advanced_tab":"Avanzado","general_tab":"Xeral","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/gu_dlg.js
new file mode 100644
index 000000000..a25eaa409
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/he_dlg.js
new file mode 100644
index 000000000..25371ea70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.table_dlg',{"rules_border":"\u05d2\u05d1\u05d5\u05dc","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u05de\u05ea\u05d7\u05ea","rules_above":"\u05de\u05e2\u05dc","rules_void":"void",rules:"\u05d7\u05d5\u05e7\u05d9\u05dd","frame_all":"\u05d4\u05db\u05d5\u05dc","frame_cols":"\u05e2\u05de\u05d5\u05d3\u05d5\u05ea","frame_rows":"\u05e9\u05d5\u05e8\u05d5\u05ea","frame_groups":"\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea","frame_none":"\u05dc\u05dc\u05d0",frame:"Frame",caption:"\u05db\u05d5\u05ea\u05e8\u05ea \u05d4\u05d8\u05d1\u05dc\u05d4","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.","cell_limit":"\u05d7\u05e8\u05d9\u05d2\u05d4 \u05de\u05de\u05e1\u05e4\u05e8 \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05d0\u05dc\u05d9 \u05e9\u05dc \u05d4\u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4 \u05e9\u05dc {$cells}.","row_limit":"\u05d7\u05e8\u05d9\u05d2\u05d4 \u05de\u05de\u05e1\u05e4\u05e8 \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05d0\u05dc\u05d9 \u05e9\u05dc \u05d4\u05e9\u05d5\u05e8\u05d5\u05ea \u05e9\u05dc {$rows}.","col_limit":"\u05d7\u05e8\u05d9\u05d2\u05d4 \u05de\u05de\u05e1\u05e4\u05e8 \u05d4\u05e2\u05de\u05d5\u05d3\u05d5\u05ea \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05d0\u05dc\u05d9 \u05e9\u05dc {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"\u05e9\u05d5\u05e8\u05d4 \u05ea\u05d7\u05ea\u05d9\u05ea",tbody:"\u05e9\u05d5\u05e8\u05d4 \u05e8\u05d2\u05d9\u05dc\u05d4",thead:"\u05e9\u05d5\u05e8\u05ea \u05db\u05d5\u05ea\u05e8\u05ea","row_all":"\u05e2\u05d3\u05db\u05d5\u05df\u05db\u05dc \u05d4\u05e9\u05d5\u05e8\u05d5\u05ea \u05d1\u05d8\u05d1\u05dc\u05d4","row_even":"\u05e2\u05d3\u05db\u05d5\u05df \u05e9\u05d5\u05e8\u05d5\u05ea \u05d6\u05d5\u05d2\u05d9\u05d5\u05ea \u05d1\u05d8\u05d1\u05dc\u05d4","row_odd":"\u05e2\u05d3\u05db\u05d5\u05df \u05e9\u05d5\u05e8\u05d5\u05ea \u05d0\u05d9-\u05d6\u05d5\u05d2\u05d9\u05d5\u05ea \u05d1\u05d8\u05d1\u05dc\u05d4","row_row":"\u05e2\u05d3\u05db\u05d5\u05df \u05e9\u05d5\u05e8\u05d4 \u05e0\u05d5\u05db\u05d7\u05d9\u05ea","cell_all":"\u05e2\u05d3\u05db\u05d5\u05df \u05db\u05dc \u05ea\u05d0\u05d9 \u05d4\u05d8\u05d1\u05dc\u05d4","cell_row":"\u05e2\u05d3\u05db\u05d5\u05df \u05db\u05dc \u05ea\u05d0\u05d9 \u05d4\u05e9\u05d5\u05e8\u05d4","cell_cell":"\u05e2\u05d3\u05db\u05d5\u05df \u05ea\u05d0 \u05e0\u05d5\u05db\u05d7\u05d9",th:"\u05db\u05d5\u05ea\u05e8\u05ea",td:"\u05ea\u05d0 \u05de\u05d9\u05d3\u05e2",summary:"\u05ea\u05de\u05e6\u05d9\u05ea",bgimage:"\u05ea\u05de\u05d5\u05e0\u05ea \u05e8\u05e7\u05e2",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",mime:"Target MIME type",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4",style:"\u05e2\u05d9\u05e6\u05d5\u05d1",id:"Id","merge_cells_title":"\u05d0\u05d7\u05d3 \u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4",bgcolor:"\u05e6\u05d1\u05e2 \u05d4\u05e8\u05e7\u05e2",bordercolor:"\u05e6\u05d1\u05e2 \u05d4\u05d2\u05d1\u05d5\u05dc","align_bottom":"\u05ea\u05d7\u05ea\u05d9\u05ea","align_top":"\u05e2\u05dc\u05d9\u05d5\u05df",valign:"\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e0\u05db\u05d9","cell_type":"\u05e1\u05d2\u05e0\u05d5\u05df \u05d4\u05ea\u05d0","cell_title":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05ea\u05d0 \u05d1\u05d8\u05d1\u05dc\u05d4","row_title":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","align_middle":"\u05d0\u05de\u05e6\u05e2","align_right":"\u05dc\u05d9\u05de\u05d9\u05df","align_left":"\u05dc\u05e9\u05de\u05d0\u05dc","align_default":"Default",align:"\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d5\u05e4\u05e7\u05d9",border:"\u05d2\u05d1\u05d5\u05dc",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"\u05e9\u05d5\u05e8\u05d5\u05ea",cols:"\u05e2\u05de\u05d5\u05d3\u05d5\u05ea",height:"\u05d2\u05d5\u05d1\u05d4",width:"\u05e8\u05d5\u05d7\u05d1",title:"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05d8\u05d1\u05dc\u05d4",rowtype:"\u05e1\u05d5\u05d2 \u05d4\u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","advanced_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05de\u05ea\u05e7\u05d3\u05de\u05d5\u05ea","general_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05db\u05dc\u05dc\u05d9\u05d5\u05ea","advanced_tab":"\u05de\u05ea\u05e7\u05d3\u05dd","general_tab":"\u05db\u05dc\u05dc\u05d9","cell_col":"\u05e2\u05d3\u05db\u05df \u05d0\u05ea \u05db\u05dc \u05d4\u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d5\u05e8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hi_dlg.js
new file mode 100644
index 000000000..bf2a8911a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hr_dlg.js
new file mode 100644
index 000000000..0760d72ef
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.table_dlg',{"rules_border":"okvir","rules_box":"sve strane","rules_vsides":"lijevo i desno","rules_rhs":"samo desno","rules_lhs":"samo lijevo","rules_hsides":"gornja i doljnja","rules_below":"ispod","rules_above":"iznad","rules_void":"prazno",rules:"Linije","frame_all":"sve","frame_cols":"stupci","frame_rows":"redovi","frame_groups":"grupe","frame_none":"bez okvira",frame:"Okvir",caption:"Opis tablice","missing_scope":"Jeste li sigurni da \u017eelite nastaviti bez da ste odredili podru\u010dje zaglavlja za ovu tablicu. Bez toga postoji mogu\u0107nost da \u0107e neki korisnici sa pote\u0161ko\u0107ama te\u0161ko razumjeti sadr\u017eaj ili podatke va\u0161e tablice.","cell_limit":"Pre\u0161li ste maksimalan broj \u0107elija ({$cells}).","row_limit":"Pre\u0161li ste maksimalan broj redaka ({$rows}).","col_limit":"Pre\u0161li ste maksimalan broj stupaca ({$cols}).",colgroup:"Grupa stupaca",rowgroup:"Grupa redaka",scope:"Domet",tfoot:"Podno\u017eje tablice",tbody:"Tijelo tablice",thead:"Zaglavlje tablice","row_all":"Primjeni na sve retke u tablici","row_even":"Primjeni na parne retke u tablici","row_odd":"Primjeni na neparne retke u tablici","row_row":"Primjeni na odabrani redak","cell_all":"Primjeni na sve \u0107elije u tablici","cell_row":"Primjeni na sve \u0107elije u retku","cell_cell":"Primjeni na odabranu \u0107eliju",th:"Zaglavlje",td:"Podatkovna",summary:"Sa\u017eetak",bgimage:"Slika pozadine",rtl:"S desna na lijevo",ltr:"S lijeva na desno",mime:"MIME tip",langcode:"Kod jezika",langdir:"Smjer jezika",style:"Stil",id:"Id","merge_cells_title":"Spoji \u0107elije",bgcolor:"Boja pozadine",bordercolor:"Boja obruba","align_bottom":"Dno","align_top":"Vrh",valign:"Okomito poravnavanje","cell_type":"Tip \u0107elije","cell_title":"Svojstva \u0107elije","row_title":"Svojstva retka","align_middle":"Sredina","align_right":"Desno","align_left":"Lijevo","align_default":"Osnovno",align:"Poravnavanje",border:"Obrub",cellpadding:"Dopuna \u0107elije",cellspacing:"Razmak \u0107elija",rows:"Redaka",cols:"Stupaca",height:"Visina",width:"\u0160irina",title:"Umetni/uredi tablicu",rowtype:"Redak u dijelu tablice","advanced_props":"Napredna svojstva","general_props":"Op\u0107a svojstva","advanced_tab":"Napredno","general_tab":"Op\u0107e","cell_col":"A\u017euriraj sve stanice u stupcu"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hu_dlg.js
new file mode 100644
index 000000000..518c3ad10
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.table_dlg',{"rules_border":"keret","rules_box":"doboz","rules_vsides":"f. oldalak","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"v. oldalak","rules_below":"alatta","rules_above":"f\u00f6l\u00f6tte","rules_void":"sehol",rules:"Vonalak","frame_all":"mind","frame_cols":"oszlopok","frame_rows":"sorok","frame_groups":"csoportok","frame_none":"nincs",frame:"Keret",caption:"C\u00edmsor","missing_scope":"Biztosan folytatni akarja an\u00e9lk\u00fcl, hogy hat\u00f3k\u00f6rt adna ennek a fejl\u00e9ccell\u00e1nak? Korl\u00e1toz\u00e1sokkal \u00e9l\u0151k sz\u00e1m\u00e1ra neh\u00e9z lesz meg\u00e9rteni a t\u00e1bl\u00e1zat tartalm\u00e1t.","cell_limit":"T\u00fall\u00e9pte a maxim\u00e1lis cellasz\u00e1mot, ami {$cells}.","row_limit":"T\u00fall\u00e9pte a maxim\u00e1lis sorsz\u00e1mot, ami {$rows}.","col_limit":"T\u00fall\u00e9pte a maxim\u00e1lis oszlopsz\u00e1mot, ami {$cols}.",colgroup:"Oszlop csoport",rowgroup:"Sor csoport",scope:"Hat\u00f3k\u00f6r",tfoot:"T\u00e1bl\u00e1zat l\u00e1bl\u00e9c",tbody:"T\u00e1bl\u00e1zat tartalom",thead:"T\u00e1bl\u00e1zat fejl\u00e9c","row_all":"Minden sor friss\u00edt\u00e9se","row_even":"P\u00e1ros sorok friss\u00edt\u00e9se","row_odd":"P\u00e1ratlan sorok friss\u00edt\u00e9se","row_row":"Sor friss\u00edt\u00e9se","cell_all":"T\u00e1bl\u00e1zat \u00f6sszes cell\u00e1j\u00e1nak friss\u00edt\u00e9se","cell_row":"Sor \u00f6sszes cell\u00e1j\u00e1nak friss\u00edt\u00e9se","cell_cell":"Cella friss\u00edt\u00e9se",th:"Fejl\u00e9c",td:"Adat",summary:"\u00d6sszegz\u00e9s",bgimage:"H\u00e1tt\u00e9rk\u00e9p",rtl:"Jobbr\u00f3l balra",ltr:"Balr\u00f3l jobbra",mime:"C\u00e9l MIME t\u00edpus",langcode:"Nyelvk\u00f3d",langdir:"\u00cdr\u00e1s ir\u00e1ny",style:"St\u00edlus",id:"Id","merge_cells_title":"Cell\u00e1k \u00f6sszevon\u00e1sa",bgcolor:"H\u00e1tt\u00e9rsz\u00edn",bordercolor:"Keretsz\u00edn","align_bottom":"Le","align_top":"Fel",valign:"F\u00fcgg\u0151leges igaz\u00edt\u00e1s","cell_type":"Cellat\u00edpus","cell_title":"Cella tulajdons\u00e1gai","row_title":"Sor tulajdons\u00e1gai","align_middle":"K\u00f6z\u00e9pre","align_right":"Jobbra","align_left":"Balra","align_default":"Alap\u00e9rtelmezett",align:"Igaz\u00edt\u00e1s",border:"Keret",cellpadding:"Cella bels\u0151 marg\u00f3",cellspacing:"Cella t\u00e1vols\u00e1g",rows:"Sorok",cols:"Oszlopok",height:"Magass\u00e1g",width:"Sz\u00e9less\u00e9g",title:"T\u00e1bl\u00e1zat besz\u00far\u00e1sa/szerkeszt\u00e9se",rowtype:"Sor a t\u00e1bl\u00e1ban","advanced_props":"Halad\u00f3 tulajdons\u00e1gok","general_props":"\u00c1ltal\u00e1nos tulajdons\u00e1gok","advanced_tab":"Halad\u00f3","general_tab":"\u00c1ltal\u00e1nos","cell_col":"\u00d6sszes cella friss\u00edt\u00e9se az oszlopban"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hy_dlg.js
new file mode 100644
index 000000000..5b3222b70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"\u0424\u0440\u0435\u0439\u043c",caption:"Table caption","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","cell_limit":"You\'ve exceeded the maximum number of cells of ($ cells)","row_limit":"You\'ve exceeded the maximum number of rows of ($ rows)","col_limit":"You\'ve exceeded the maximum number of columns of ($ cols)",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"\u041d\u0438\u0436\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u0441\u0438\u043d\u0430",tbody:"\u0422\u0435\u043b\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u044b",thead:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b","row_all":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_even":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0447\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_odd":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_row":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443","cell_all":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","cell_row":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435","cell_cell":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443",th:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",td:"\u0414\u0430\u043d\u043d\u044b\u0435",summary:"\u041e\u0431\u0449\u0435\u0435",bgimage:"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",mime:"Target MIME-\u0442\u0438\u043f",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430",style:"\u0421\u0442\u0438\u043b\u044c",id:"Id","merge_cells_title":"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438",bgcolor:"\u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430",bordercolor:"\u0446\u0432\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",valign:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","cell_type":"\u0422\u0438\u043f \u044f\u0447\u0435\u0439\u043a\u0438","cell_title":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","row_title":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_default":"\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430",cellpadding:"\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445",cellspacing:"\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438",rows:"\u0421\u0440\u043e\u043a\u0438",cols:"\u0421\u0442\u043e\u043b\u0431\u0446\u044b",height:"\u0412\u044b\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 / \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b",rowtype:"Row in table part","advanced_props":"\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430","general_props":"\u041e\u0431\u0449\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","general_tab":"\u041e\u0431\u0449\u0435\u0435","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ia_dlg.js
new file mode 100644
index 000000000..cc79f911f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.table_dlg',{"rules_border":"\u8fb9\u6846","rules_box":"\u76d2","rules_vsides":"\u5782\u76f4\u5927\u5c0f","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"\u6c34\u5e73\u5927\u5c0f","rules_below":"\u4e4b\u4e0b","rules_above":"\u4e4b\u4e0a","rules_void":"\u7a7a",rules:"\u6807\u5c3a","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u7ec4","frame_none":"\u65e0",frame:"\u8fb9\u6846",caption:"\u8868\u683c\u6807\u9898","missing_scope":"\u60a8\u786e\u5b9a\u4e0d\u6307\u5b9a\u8868\u5934\u50a8\u5b58\u683c\u7684\u8303\u56f4\u5417\uff1f\u5982\u679c\u4e0d\u6307\u5b9a\uff0c\u90e8\u5206\u4f7f\u7528\u8005\u5c06\u5f88\u96be\u67e5\u770b\u8868\u683c\u5185\u5bb9","cell_limit":"\u5df2\u8d85\u8fc7\u9650\u5236\uff0c\u6700\u591a\u4e3a{$cells} \u50a8\u5b58\u683c\u3002","row_limit":"\u5df2\u8d85\u8fc7\u9650\u5236\uff0c\u6700\u591a\u4e3a {$rows} \u884c\u3002","col_limit":"\u5df2\u8d85\u8fc7\u9650\u5236\uff0c\u6700\u591a\u4e3a {$cols} \u5217\u3002",colgroup:"\u5217\u7ec4",rowgroup:"\u884c\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u811a",tbody:"\u8868\u4f53",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u5168\u90e8\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u6240\u5728\u884c","cell_all":"\u66f4\u65b0\u5168\u90e8\u50a8\u5b58\u683c","cell_row":"\u66f4\u65b0\u5f53\u524d\u884c\u7684\u50a8\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u7684\u50a8\u5b58\u683c",th:"\u8868\u5934",td:"\u8868\u683c",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",mime:"\u76ee\u6807 MIME \u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"Id","merge_cells_title":"\u5408\u5e76\u50a8\u5b58\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u5e95\u90e8","align_top":"\u9876\u90e8",valign:"\u5782\u76f4\u5bf9\u9f50\u65b9\u5f0f","cell_type":"\u50a8\u5b58\u683c \u7c7b\u522b","cell_title":"\u50a8\u5b58\u683c \u5c5e\u6027","row_title":"\u884c \u5c5e\u6027","align_middle":"\u5c45\u4e2d","align_right":"\u5c45\u53f3","align_left":"\u5c45\u5de6","align_default":"\u9ed8\u8ba4",align:"\u5bf9\u9f50\u65b9\u5f0f",border:"\u8fb9\u6846",cellpadding:"\u50a8\u5b58\u683c\u5185\u8ddd",cellspacing:"\u50a8\u5b58\u683c\u95f4\u8ddd",rows:"\u884c\u6570",cols:"\u5217\u6570",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u7f16\u8f91 \u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","general_props":"\u57fa\u672c \u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u57fa\u672c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/id_dlg.js
new file mode 100644
index 000000000..e67d2e6e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","missing_scope":"Yakin ingin melanjutkan tanpa menetapkan cakupan sel header tabel ini. Tanpa itu, mungkin sulit bagi beberapa pengguna yang memiliki keterbatasan untuk memahami isi atau data yang ditampilkan dari tabel.","cell_limit":"Anda telah melebihi jumlah maksimum cell {$cells}.","row_limit":"Anda telah melebihi jumlah maksimum row {$rows}.","col_limit":"Anda telah melebihi jumlah maksimum kolom {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Gambar Background",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",mime:"Target MIME type",langcode:"Kode Bahasa",langdir:"Bahasa",style:"Style",id:"Id","merge_cells_title":"Merge cell tabel",bgcolor:"Warna Background",bordercolor:"Warna Border","align_bottom":"Bawah","align_top":"Atas",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Properti cell tabel","row_title":"Properti row tabel","align_middle":"Tengah","align_right":"Kanan","align_left":"Kiri","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Tinggi",width:"Lebar",title:"Sisipkan/Ubah Tabel",rowtype:"Row in table part","advanced_props":"Properti Advanced","general_props":"Properti Umum","advanced_tab":"Advanced","general_tab":"Umum","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/is_dlg.js
new file mode 100644
index 000000000..8b4b1ffc6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.table_dlg',{"rules_border":"rammi","rules_box":"box","rules_vsides":"vsides","rules_rhs":"hhl","rules_lhs":"vhl","rules_hsides":"hli\u00f0ar","rules_below":"ne\u00f0an","rules_above":"ofan","rules_void":"\u00f3gilt",rules:"Rules","frame_all":"allt","frame_cols":"d\u00e1lkar","frame_rows":"ra\u00f0ir","frame_groups":"h\u00f3par","frame_none":"ekkert",frame:"rammi",caption:"T\u00f6fluval","missing_scope":"Ertu viss um a\u00f0 \u00fe\u00fa viljir halda \u00e1fram \u00e1n \u00feess a\u00f0 skilgreina innihaldi\u00f0 fyrir \u00feessa t\u00f6flu fyrirs\u00f6gn. \u00c1n hennar getur veri\u00f0 erfitt fyrir suma notendur me\u00f0 h\u00f6mlun a\u00f0 skilja innihaldi\u00f0 e\u00f0a \u00fea\u00f0 efni sem er til sta\u00f0ar \u00ed t\u00f6flunni.","cell_limit":"\u00de\u00fa ert komin yfir leyfilegan fj\u00f6lda reita {$cells}.","row_limit":"\u00de\u00fa ert komin yfir leyfilegna fj\u00f6lda ra\u00f0a {$rows}.","col_limit":"\u00de\u00fa ert komin yfir leyfilegan fj\u00f6lda d\u00e1lka {$cols}.",colgroup:"D\u00e1lkah\u00f3pur",rowgroup:"Ra\u00f0arh\u00f3pur",scope:"Umfang",tfoot:"T\u00f6fluf\u00f3tur",tbody:"T\u00f6flusv\u00e6\u00f0i",thead:"Fyrirs\u00f6gn t\u00f6flu","row_all":"Uppf\u00e6ra allar ra\u00f0ir \u00ed t\u00f6flunni","row_even":"Uppf\u00e6ra sl\u00e9ttra\u00f0ir","row_odd":"Uppf\u00e6ra oodara\u00f0ir","row_row":"Uppf\u00e6ra n\u00faverandi r\u00f6\u00f0","cell_all":"Uppf\u00e6ra alla reiti i t\u00f6flunni","cell_row":"Uppf\u00e6ra alla reiti \u00ed r\u00f6\u00f0inni","cell_cell":"Uppf\u00e6ra n\u00faverandi reit",th:"Fyrirs\u00f6gn",td:"G\u00f6gn",summary:"Yfirlit",bgimage:"Bakgrunnsmynd",rtl:"Fr\u00e1 h\u00e6gri til vinstri",ltr:"Fr\u00e1 vinstri til h\u00e6gri",mime:"Velja MIME tegund",langcode:"Tungum\u00e1la k\u00f3\u00f0i",langdir:"Tungum\u00e1la \u00e1tt",style:"St\u00edll",id:"id","merge_cells_title":"Sameina reiti",bgcolor:"Bakgrunnslitur",bordercolor:"Rammalitur","align_bottom":"Ne\u00f0st","align_top":"Efst",valign:"L\u00f3\u00f0r\u00e9tt j\u00f6fnun","cell_type":"Reitartegund","cell_title":"Eiginleikar reits","row_title":"Eiginleikar ra\u00f0ar","align_middle":"Mi\u00f0ja","align_right":"H\u00e6gri","align_left":"Vinstri","align_default":"St\u00f6\u00f0lu\u00f0",align:"J\u00f6fnun",border:"Rammi",cellpadding:"Reita \u00f6ndun",cellspacing:"Reitabil",rows:"Ra\u00f0ir",cols:"Cols",height:"H\u00e6\u00f0",width:"Breidd",title:"Setja inn/Breyta t\u00f6flu",rowtype:"R\u00f6\u00f0 \u00ed t\u00f6fluhluta","advanced_props":"Frekari eiginleikar","general_props":"Almennir eiginleikar","advanced_tab":"N\u00e1nar","general_tab":"Almennt","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/it_dlg.js
new file mode 100644
index 000000000..2a847ed62
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.table_dlg',{"rules_border":"bordo","rules_box":"box","rules_vsides":"lato vert.","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"lato orizz.","rules_below":"sotto","rules_above":"sopra","rules_void":"vuoto",rules:"Regole","frame_all":"tutte","frame_cols":"colonne","frame_rows":"righe","frame_groups":"gruppi","frame_none":"nessuna",frame:"Cornice",caption:"Didascalia tabella","missing_scope":"Sicuro di proseguire senza aver specificato uno scope per l\'intestazione di questa tabella? Senza di esso, potrebbe essere difficoltoso per alcuni utenti con disabilit\u00e0 capire il contenuto o i dati mostrati nella tabella.","cell_limit":"Superato il numero massimo di celle di {$cells}.","row_limit":"Superato il numero massimo di righe di {$rows}.","col_limit":"Superato il numero massimo di colonne di {$cols}.",colgroup:"Gruppo colonna",rowgroup:"Gruppo riga",scope:"Scope",tfoot:"Pedice tabella",tbody:"Corpo tabella",thead:"Intestazione tabella","row_all":"Update tutte le righe della tabella","row_even":"Aggiorna righe pari della tabella","row_odd":"Aggiorna righe dispari della tabella","row_row":"Aggiorna riga corrente","cell_all":"Aggiorna tutte le celle della tabella","cell_row":"Aggiorna tutte le celle della riga","cell_cell":"Aggiorna cella corrente",th:"Intestazione",td:"Data",summary:"Sommario",bgimage:"Immagine sfondo",rtl:"Destra verso sinistra",ltr:"Sinistra verso destra",mime:"Tipo MIME del target",langcode:"Lingua",langdir:"Direzione testo",style:"Stile",id:"Id","merge_cells_title":"Unisci celle",bgcolor:"Colore sfondo",bordercolor:"Colore bordo","align_bottom":"In basso","align_top":"In alto",valign:"Allineamento verticale","cell_type":"Tipo cella","cell_title":"Propriet\u00e0 cella","row_title":"Propriet\u00e0 riga","align_middle":"Centra","align_right":"A destra","align_left":"A sinistra","align_default":"Predefinito",align:"Allineamento",border:"Bordo",cellpadding:"Padding celle",cellspacing:"Spaziatura celle",rows:"Righe",cols:"Colonne",height:"Altezza",width:"Larghezza",title:"Inserisci/Modifica tabella",rowtype:"Riga in una parte di tabella","advanced_props":"Propriet\u00e0 avanzate","general_props":"Propriet\u00e0 generali","advanced_tab":"Avanzate","general_tab":"Generale","cell_col":"Aggiorna tutte le celle della colonna"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ja_dlg.js
new file mode 100644
index 000000000..ad3358642
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.table_dlg',{"rules_border":"\u67a0\u7dda(\u4e0a\u4e0b\u5de6\u53f3)","rules_box":"\u30dc\u30c3\u30af\u30b9(\u4e0a\u4e0b\u5de6\u53f3)","rules_vsides":"\u5de6\u53f3\u306e\u7e26\u7dda","rules_rhs":"\u53f3\u306e\u7e26\u7dda","rules_lhs":"\u5de6\u306e\u7e26\u7dda","rules_hsides":"\u4e0a\u4e0b\u306e\u6a2a\u7dda","rules_below":"\u4e0b\u306e\u6a2a\u7dda","rules_above":"\u4e0a\u306e\u6a2a\u7dda","rules_void":"\u306a\u3057",rules:"\u8868\u306e\u5916\u67a0","frame_all":"\u3059\u3079\u3066","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u30b0\u30eb\u30fc\u30d7\u6bce","frame_none":"\u306a\u3057",frame:"\u30bb\u30eb\u306e\u67a0",caption:"\u8868\u306e\u898b\u51fa\u3057","missing_scope":"\u3053\u306e\u8868\u306e\u30d8\u30c3\u30c0\u30fc\u306e\u30bb\u30eb\u306e\u7bc4\u56f2\u3092\u8a2d\u5b9a\u3057\u306a\u3044\u3067\u672c\u5f53\u306b\u7d9a\u3051\u307e\u3059\u304b? \u3053\u306e\u307e\u307e\u3067\u306f\u76ee\u306e\u4e0d\u81ea\u7531\u306a\u65b9\u304c\u8868\u306e\u5185\u5bb9\u3084\u8868\u793a\u3055\u308c\u308b\u30c7\u30fc\u30bf\u3092\u7406\u89e3\u3059\u308b\u306e\u304c\u56f0\u96e3\u306b\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002","cell_limit":"\u30bb\u30eb\u306e\u6700\u5927\u6570\u306e${cells}\u3092\u8d85\u3048\u307e\u3057\u305f\u3002","row_limit":"\u884c\u306e\u6700\u5927\u6570\u306e${rows}\u3092\u8d85\u3048\u307e\u3057\u305f\u3002","col_limit":"\u5217\u306e\u6700\u5927\u6570\u306e${cols}\u3092\u8d85\u3048\u307e\u3057\u305f\u3002",colgroup:"\u5217\u30b0\u30eb\u30fc\u30d7",rowgroup:"\u884c\u30b0\u30eb\u30fc\u30d7",scope:"\u30b9\u30b3\u30fc\u30d7",tfoot:"\u8868\u306e\u30d5\u30c3\u30bf\u30fc",tbody:"\u8868\u306e\u30dc\u30c7\u30a3",thead:"\u8868\u306e\u30d8\u30c3\u30c0\u30fc","row_all":"\u3059\u3079\u3066\u306e\u884c\u3092\u66f4\u65b0","row_even":"\u5076\u6570\u884c\u3092\u66f4\u65b0","row_odd":"\u5947\u6570\u884c\u3092\u66f4\u65b0","row_row":"\u9078\u629e\u3057\u3066\u3044\u308b\u884c\u3092\u66f4\u65b0","cell_all":"\u3059\u3079\u3066\u306e\u30bb\u30eb\u3092\u66f4\u65b0","cell_row":"\u884c\u5185\u306e\u30bb\u30eb\u3092\u66f4\u65b0","cell_cell":"\u9078\u629e\u3057\u3066\u3044\u308b\u30bb\u30eb\u3092\u66f4\u65b0",th:"\u30d8\u30c3\u30c0\u30fc",td:"\u30c7\u30fc\u30bf",summary:"\u30b5\u30de\u30ea\u30fc",bgimage:"\u80cc\u666f\u306e\u753b\u50cf",rtl:"\u53f3\u304b\u3089\u5de6",ltr:"\u5de6\u304b\u3089\u53f3",mime:"\u30bf\u30fc\u30b2\u30c3\u30c8\u306eMIME\u30bf\u30a4\u30d7",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9",langdir:"\u6587\u7ae0\u306e\u65b9\u5411",style:"\u30b9\u30bf\u30a4\u30eb",id:"ID","merge_cells_title":"\u30bb\u30eb\u3092\u7d50\u5408",bgcolor:"\u80cc\u666f\u306e\u8272",bordercolor:"\u67a0\u7dda\u306e\u8272","align_bottom":"\u4e0b\u63c3\u3048","align_top":"\u4e0a\u63c3\u3048",valign:"\u5782\u76f4\u65b9\u5411\u306e\u914d\u7f6e","cell_type":"\u30bb\u30eb\u306e\u7a2e\u985e","cell_title":"\u30bb\u30eb\u306e\u5c5e\u6027","row_title":"\u884c\u306e\u5c5e\u6027","align_middle":"\u4e2d\u592e\u63c3\u3048","align_right":"\u53f3\u63c3\u3048","align_left":"\u5de6\u63c3\u3048","align_default":"\u521d\u671f\u72b6\u614b",align:"\u914d\u7f6e",border:"\u67a0\u7dda",cellpadding:"\u30bb\u30eb\u306e\u30d1\u30c7\u30a3\u30f3\u30b0(cellpadding)",cellspacing:"\u30bb\u30eb\u306e\u9593\u9694(cellspacing)",rows:"\u884c",cols:"\u5217",height:"\u9ad8\u3055",width:"\u5e45",title:"\u8868\u306e\u633f\u5165\u3084\u7de8\u96c6",rowtype:"\u884c","advanced_props":"\u9ad8\u5ea6\u306a\u5c5e\u6027","general_props":"\u4e00\u822c\u7684\u306a\u5c5e\u6027","advanced_tab":"\u9ad8\u5ea6","general_tab":"\u4e00\u822c","cell_col":"\u3059\u3079\u3066\u306e\u30bb\u30eb\u3092\u66f4\u65b0"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ka_dlg.js
new file mode 100644
index 000000000..ff8b1bef9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.table_dlg',{"rules_border":"\u10e1\u10d0\u10d6\u10e6\u10d5\u10d0\u10e0\u10d8","rules_box":"\u10d9\u10dd\u10da\u10dd\u10e4\u10d8","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"wesebi","frame_all":"\u10e7\u10d5\u10d4\u10da\u10d0","frame_cols":"\u10e1\u10d5\u10d4\u10e2\u10d4\u10d1\u10d8","frame_rows":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8","frame_groups":"\u10ef\u10d2\u10e3\u10e4\u10d4\u10d1\u10d8","frame_none":"none",frame:"\u10d9\u10d0\u10d3\u10e0\u10d8",caption:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","missing_scope":"\u10d7\u10e3 \u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 \u10d0\u10e0 \u10d8\u10e5\u10dc\u10d4\u10d1\u10d0 \u10db\u10d8\u10d7\u10d8\u10d7\u10d4\u10d1\u10e3\u10da\u10d8, \u10e8\u10d4\u10d8\u10eb\u10da\u10d4\u10d1\u10d0 \u10e7\u10d5\u10d4\u10da\u10d0\u10db \u10d5\u10d4\u10e0 \u10dc\u10d0\u10ee\u10dd\u10e1 \u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d0.","cell_limit":"\u10db\u10d8\u10e6\u10ec\u10d4\u10e3\u10da\u10d8\u10d0 \u10db\u10d0\u10e5\u10e1\u10d8\u10db\u10d0\u10da\u10e3\u10e0\u10d8 \u10d6\u10e6\u10d5\u10d0\u10e0\u10d8, $ \u10e3\u10ef\u10e0\u10d0.","row_limit":"\u10db\u10d8\u10e6\u10ec\u10d4\u10e3\u10da\u10d8\u10d0 \u10db\u10d0\u10e5\u10e1\u10d8\u10db\u10d0\u10da\u10e3\u10e0\u10d8 \u10d6\u10e6\u10d5\u10d0\u10e0\u10d8, $ \u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8.","col_limit":"\u10db\u10d8\u10e6\u10ec\u10d4\u10e3\u10da\u10d8\u10d0 \u10db\u10d0\u10e5\u10e1\u10d8\u10db\u10d0\u10da\u10e3\u10e0\u10d8 \u10d6\u10e6\u10d5\u10d0\u10e0\u10d8, $ \u10e1\u10d5\u10d4\u10e2\u10d8.",colgroup:"\u10e1\u10d5\u10d4\u10e2\u10d4\u10d1\u10d8\u10e1 \u10ef\u10d2\u10e3\u10e4\u10d8",rowgroup:"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8\u10e1 \u10ef\u10d2\u10e3\u10e4\u10d8",scope:"\u10db\u10d8\u10d3\u10d0\u10db\u10dd",tfoot:"\u10d3\u10d0\u10e1\u10e0\u10e3\u10da\u10d4\u10d1\u10d0",tbody:"\u10e1\u10ee\u10d4\u10e3\u10da\u10d8",thead:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","row_all":"\u10ea\u10ee\u10e0\u10d8\u10da\u10e1\u10d8 \u10e7\u10d5\u10d4\u10da\u10d0 \u10e3\u10ef\u10e0\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","row_even":"\u10ea\u10ee\u10e0\u10d8\u10da\u10e8\u10d8 \u10da\u10e3\u10ec\u10d8\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","row_odd":"\u10ea\u10ee\u10e0\u10e3\u10da\u10e1\u10d8 \u10d9\u10d4\u10dc\u10e2\u10d8 \u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","row_row":"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10e1\u10e2\u10d8\u10e0\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","cell_all":"\u10ea\u10ee\u10e0\u10d8\u10da\u10e1\u10d8 \u10e7\u10d5\u10d4\u10da\u10d0 \u10e3\u10ef\u10e0\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","cell_row":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10e8\u10d8 \u10e7\u10d5\u10d4\u10da\u10d0 \u10e3\u10ef\u10e0\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","cell_cell":"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10e3\u10ef\u10e0\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0",th:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8",td:"\u10db\u10dd\u10dc\u10d0\u10ea\u10d4\u10db\u10d4\u10d1\u10d8",summary:"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd",bgimage:"\u10e4\u10dd\u10dc\u10e3\u10e0\u10d8 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d1\u10d0",rtl:"\u10db\u10d0\u10e0\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5",ltr:"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",mime:"MIME \u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8",langcode:"\u10d4\u10dc\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8",langdir:"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0",style:"\u10e1\u10e2\u10d8\u10da\u10d8",id:"\u10e1\u10d0\u10ee\u10d4\u10da\u10d8","merge_cells_title":"\u10e3\u10ef\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10d4\u10e0\u10d7\u10d8\u10d0\u10dc\u10d4\u10d1\u10d0",bgcolor:"\u10e8\u10d4\u10d5\u10e1\u10d4\u10d1\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8",bordercolor:"\u10e1\u10d0\u10d6\u10e6\u10d5\u10e0\u10d4\u10d1\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","align_bottom":"\u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_top":"\u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4",valign:"\u10d5\u10d4\u10e0\u10e2\u10d8\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","cell_type":"\u10e2\u10d8\u10de\u10d8","cell_title":"\u10e3\u10ef\u10e0\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","row_title":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","align_middle":"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d6\u10d4","align_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_default":"\u10e1\u10d0\u10ec\u10d8\u10e1\u10d0\u10d3",align:"\u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",border:"\u10e1\u10d0\u10d6\u10e6\u10d5\u10d0\u10e0\u10d8",cellpadding:"\u10e3\u10ef\u10e0\u10d4\u10d1\u10e1 \u10e8\u10dd\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",cellspacing:"\u10e3\u10ef\u10e0\u10d4\u10d1\u10e1 \u10e8\u10dd\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",rows:"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8",cols:"\u10e1\u10d5\u10d4\u10e2\u10d4\u10d1\u10d8",height:"\u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4",width:"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4",title:"\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",rowtype:"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10e0\u10d8\u10de\u10d8","advanced_props":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","general_props":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","advanced_tab":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7","general_tab":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/kl_dlg.js
new file mode 100644
index 000000000..bca3dd66d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/km_dlg.js
new file mode 100644
index 000000000..26e46fcc8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.table_dlg',{"rules_border":"\u179f\u17ca\u17bb\u1798","rules_box":"\u1794\u17d2\u179a\u17a2\u1794\u17cb","rules_vsides":"\u1782\u17c2\u1798\u1794\u1789\u17d2\u1788\u179a","rules_rhs":"\u1782\u17c2\u1798\u179f\u17d2\u178a\u17b6\u17c6","rules_lhs":"\u1782\u17c2\u1798\u1786\u17d2\u179c\u17c1\u1784","rules_hsides":"\u1782\u17c2\u1798\u1795\u17d2\u178a\u17c1\u1780","rules_below":"\u1780\u17d2\u179a\u17c4\u1798","rules_above":"\u179b\u17be","rules_void":"\u1791\u17b8\u1785\u17c6\u17a0",rules:"\u1785\u17d2\u1794\u17b6\u1794\u17cb","frame_all":"\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb","frame_cols":"\u1785\u17c6\u1793\u17bd\u1793\u1787\u17bd\u179a\u1788\u179a","frame_rows":"\u1785\u17c6\u1793\u17bd\u1793\u1787\u17bd\u179a\u1795\u17d2\u178a\u17c1\u1780","frame_groups":"\u1780\u17d2\u179a\u17bb\u1798","frame_none":"\u1782\u17d2\u1798\u17b6\u1793",frame:"\u179f\u1793\u17d2\u179b\u17b9\u1780",caption:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u178f\u17bc\u1785\u178f\u17b6\u179a\u17b6\u1784","missing_scope":"\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17b6\u1780\u178a\u1787\u17b6\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u178a\u17c4\u1799\u1798\u17b7\u1793\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u179c\u17b7\u179f\u17b6\u179b\u1797\u17b6\u1796\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17d2\u179a\u17a1\u17b6\u1780\u17d2\u1794\u17b6\u179b\u17ac? \u1794\u17be\u1782\u17d2\u1798\u17b6\u1793\u179c\u17b6 \u1782\u17ba\u17a2\u17b6\u1785\u1787\u17b6\u1780\u17b6\u179a\u179b\u17c6\u1794\u17b6\u1780\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17a2\u179f\u1798\u178f\u17d2\u1790\u1797\u17b6\u1796\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1799\u179b\u17cb\u17a2\u178f\u17d2\u1790\u1793\u17d0\u1799 \u17ac\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u178a\u17c2\u179b\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784\u1798\u17bd\u1799\u1793\u17c1\u17c7 \u17d4","cell_limit":"\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u179b\u17be\u179f\u1785\u17c6\u1793\u17bd\u1793\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6{$cells}\u1793\u17c3\u1780\u17d2\u179a\u17a1\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u00a0\u17d4","row_limit":"\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u179b\u17be\u179f\u1785\u17c6\u1793\u17bd\u1793\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6{$rows}\u1793\u17c3\u1787\u17bd\u179a\u178a\u17c1\u1780\u00a0\u17d4","col_limit":"\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u179b\u17be\u179f\u1785\u17c6\u1793\u17bd\u1793\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6{$cols}\u1793\u17c3\u1787\u17bd\u179a\u1788\u179a\u00a0\u17d4",colgroup:"\u1780\u17d2\u179a\u17bb\u1798\u1787\u17bd\u179a\u1788\u179a",rowgroup:"\u1780\u17d2\u179a\u17bb\u1798\u1787\u17bd\u179a\u178a\u17c1\u1780",scope:"\u179c\u17b7\u179f\u17b6\u179b\u1797\u17b6\u1796",tfoot:"\u1787\u17be\u1784\u178f\u17b6\u179a\u17b6\u1784",tbody:"\u178f\u17bd\u178f\u17b6\u179a\u17b6\u1784",thead:"\u1780\u17d2\u1794\u17b6\u179b\u178f\u17b6\u179a\u17b6\u1784","row_all":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1787\u17bd\u179a\u178a\u17c1\u1780\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784","row_even":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1787\u17bd\u179a\u178a\u17c1\u1780\u1782\u17bc\u179a\u1791\u17b6\u17c6\u1784\u17a1\u17b6\u1799\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784","row_odd":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1787\u17bd\u179a\u178a\u17c1\u1780\u179f\u17c1\u179f\u1791\u17b6\u17c6\u1784\u17a1\u17b6\u1799\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784","row_row":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1787\u17bd\u179a\u178a\u17c1\u1780\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793","cell_all":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1780\u17d2\u179a\u17a1\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784","cell_row":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1780\u17d2\u179a\u17a1\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1780\u17d2\u1793\u17bb\u1784\u1787\u17bd\u179a\u178a\u17c1\u1780","cell_cell":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1780\u17d2\u179a\u17a1\u17b6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793",th:"\u1780\u17d2\u1794\u17b6\u179b\u178f\u17b6\u179a\u17b6\u1784",td:"\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799",summary:"\u179f\u1784\u17d2\u1781\u17c1\u1794",bgimage:"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799",rtl:"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784",ltr:"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178a\u17b6\u17c6",mime:"\u1794\u17d2\u179a\u1797\u17c1\u1791\u1782\u17c4\u179b\u178a\u17c5 MIME",langcode:"\u1780\u17bc\u178a\u1797\u17b6\u179f\u17b6",langdir:"\u1791\u17b7\u179f\u178a\u17c5\u1797\u17b6\u179f\u17b6",style:"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",id:"\u179b\u179f.","merge_cells_title":"\u179a\u17c6\u179b\u17b6\u1799\u1780\u17d2\u179a\u17a1\u17b6\u178f\u17b6\u179a\u17b6\u1784\u1794\u1789\u17d2\u1785\u17bc\u179b\u1782\u17d2\u1793\u17b6",bgcolor:"\u1796\u178e\u17cc\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799",bordercolor:"\u1796\u178e\u17cc\u179f\u17ca\u17bb\u1798","align_bottom":"\u1794\u17b6\u178f","align_top":"\u1780\u17c6\u1796\u17bc\u179b",valign:"\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17b9\u1798\u1794\u1789\u17d2\u1788\u179a","cell_type":"\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17d2\u179a\u17a1\u17b6","cell_title":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1780\u17d2\u179a\u17a1\u17b6\u178f\u17b6\u179a\u17b6\u1784","row_title":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784","align_middle":"\u1780\u178e\u17d2\u178a\u17b6\u179b","align_right":"\u179f\u17d2\u178a\u17b6\u17c6","align_left":"\u1786\u17d2\u179c\u17c1\u1784","align_default":"\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798",align:"\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17b9\u1798",border:"\u179f\u17ca\u17bb\u1798",cellpadding:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1780\u17d2\u179a\u17a1\u17b6",cellspacing:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1780\u17d2\u1793\u17bb\u1784\u1780\u17d2\u179a\u17a1\u17b6",rows:"\u1785\u17c6\u1793\u17bd\u1793\u1787\u17bd\u179a\u178a\u17c1\u1780",cols:"\u1785\u17c6\u1793\u17bd\u1793\u1787\u17bd\u179a\u1788\u179a",height:"\u1780\u1798\u17d2\u1796\u179f\u17cb",width:"\u1791\u1791\u17b9\u1784",title:"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u178f\u17b6\u179a\u17b6\u1784",rowtype:"\u1791\u17b8\u178f\u17b6\u17c6\u1784\u1787\u17bd\u179a\u178a\u17c1\u1780\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784","advanced_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","general_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1791\u17bc\u1791\u17c5","advanced_tab":"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","general_tab":"\u1791\u17bc\u1791\u17c5","cell_col":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1780\u17d2\u179a\u17a1\u17b6\u1791\u17b6\u17c6\u1784\u17a1\u17b6\u1799\u1780\u17d2\u1793\u17bb\u1784\u1787\u17bd\u179a\u1788\u179a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ko_dlg.js
new file mode 100644
index 000000000..67c7d8d71
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"\uc88c\uc6b0\ubc94\uc704\ub9cc","rules_rhs":"\uc6b0\uce21 \ubc94\uc704\ub9cc","rules_lhs":"\uc88c\uce21 \ubc94\uc704\ub9cc","rules_hsides":"\uc0c1\ud558\ubc94\uc704\ub9cc","rules_below":"\uc544\ub798","rules_above":"\uc704","rules_void":"Void",rules:"Rules","frame_all":"\ubaa8\ub450","frame_cols":"\uc5f4","frame_rows":"\ud589","frame_groups":"\uadf8\ub8f9","frame_none":"\uc5c6\uc74c",frame:"Frame",caption:"\ud45c \uc81c\ubaa9","missing_scope":"\uc774 \ud45c \ud5e4\ub354\uc140\uc5d0 scope\uc18d\uc131\uc744 \uc9c0\uc815\ud558\uc9c0\uc54a\uc544\ub3c4 \uad1c\ucc2e\uc2b5\ub2c8\uae4c? \uc9c0\uc815\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0, \uc2dc\uac04\uc801\uc73c\ub85c \ud14c\uc774\ube14\uc758 \uad6c\uc870\ub97c \ud30c\uc545\ud558\ub294 \uac83\uc774 \uc5b4\ub824\uc6b4 \ubd84\uc758 \uc811\uadfc\uc131\uc774 \uc800\ud558\ud569\ub2c8\ub2e4.","cell_limit":"\uc140\uc218\uc758 \uc0c1\ud55c{$cells}\ub97c \ub118\uc5c8\uc2b5\ub2c8\ub2e4.","row_limit":"\ud589\uc218\uc758 \uc0c1\ud55c{$rows}\ub97c \ub118\uc5c8\uc2b5\ub2c8\ub2e4.","col_limit":"\uc5f4 \uc218\uc758 \uc0c1\ud55c{$cols}\ub97c \ub118\uc5c8\uc2b5\ub2c8\ub2e4.",colgroup:"\uc5f4 \uadf8\ub8f9",rowgroup:"\ud589 \uadf8\ub8f9",scope:"Scope",tfoot:"\ubc14\ub2e5\uae00",tbody:"\ubcf8\ubb38",thead:"\uba38\ub9bf\uae00","row_all":"\ud45c\uc758 \ubaa8\ub4e0 \ud589 \uac31\uc2e0","row_even":"\ud45c\uc758 \uc9dd\uc218 \ud589 \uac31\uc2e0","row_odd":"\ud45c\uc758 \ud640\uc218 \ud589 \uac31\uc2e0","row_row":"\ud604\uc7ac \ud589 \uac31\uc2e0","cell_all":"\ud45c\uc758 \ubaa8\ub4e0 \uc140 \uac31\uc2e0","cell_row":"\ud589\uc758 \ubaa8\ub4e0 \uc140 \uac31\uc2e0","cell_cell":"\ud604\uc7ac \uc140 \uac31\uc2e0",th:"\uba38\ub9bf\uae00",td:"\ub370\uc774\ud130",summary:"\uc694\uc57d",bgimage:"\ubc30\uacbd \uc774\ubbf8\uc9c0",rtl:"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c",ltr:"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c",mime:"Target MIME \ud0c0\uc785",langcode:"\uc5b8\uc5b4 \ucf54\ub4dc",langdir:"\ubb38\uc790 \ubc29\ud5a5",style:"\uc11c\uc2dd",id:"ID","merge_cells_title":"\uc140 \ubcd1\ud569",bgcolor:"\ubc30\uacbd\uc0c9",bordercolor:"\ud14c\ub450\ub9ac \uc0c9","align_bottom":"\ud558","align_top":"\uc0c1",valign:"\uc138\ub85c \ub9de\ucda4","cell_type":"\uc140 \uc885\ub958","cell_title":"\uc140 \uc18d\uc131","row_title":"\ud589 \uc18d\uc131","align_middle":"\uac00\uc6b4\ub370 \ub9de\ucda4","align_right":"\uc624\ub978\ucabd \ub9de\ucda4","align_left":"\uc67c\ucabd \ub9de\ucda4","align_default":"\uae30\ubcf8\uac12",align:"\uc904 \ub9de\ucda4",border:"\ud14c\ub450\ub9ac\uc120",cellpadding:"\uc140\ub0b4 \uc5ec\ubc31",cellspacing:"\uc140 \uac04\uaca9",rows:"\ud589",cols:"\uc5f4",height:"\ub192\uc774",width:"\ud3ed",title:"\ud45c \uc0bd\uc785/\ud3b8\uc9d1",rowtype:"\ud589 \uc885\ub958","advanced_props":"\uc138\ubd80 \uc18d\uc131","general_props":"\uc77c\ubc18 \uc18d\uc131","advanced_tab":"\uc138\ubd80 \uc0ac\ud56d","general_tab":"\uc77c\ubc18","cell_col":"\uc5f4\uc758 \ubaa8\ub4e0 \uc140 \uac31\uc2e0"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/kz_dlg.js
new file mode 100644
index 000000000..e6358fccf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lb_dlg.js
new file mode 100644
index 000000000..bbddbcfda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.table_dlg',{"rules_border":"all 4 S\u00e4iten (Bord)","rules_box":"all 4 S\u00e4iten (Box)","rules_vsides":"l\u00e9nks a riets","rules_rhs":"n\u00ebmmen riets","rules_lhs":"n\u00ebmmen l\u00e9nks","rules_hsides":"uewen an \u00ebnnen","rules_below":"n\u00ebmmen \u00ebnnen","rules_above":"n\u00ebmmen uewen","rules_void":"keen",rules:"Gitter","frame_all":"zw\u00ebschen allen Zellen","frame_cols":"zw\u00ebschen Spalten","frame_rows":"zw\u00ebschen Zeilen","frame_groups":"zw\u00ebschen Gruppen","frame_none":"keng",frame:"Rumm",caption:"Beschr\u00ebftung vun der Tabelle","missing_scope":"W\u00ebllt Dir wierklech keng Bez\u00e9iung fir d\u00ebs Iwwerschr\u00ebft uginn? Benotzer mat kierperlechen Aschr\u00e4nkungen k\u00ebnne Schwieregkeeten hunn, den Inhalt vun der Tabelle ze verstoen.","cell_limit":"Dir hutt d\u00e9i maximal Zellenzuel vun {$cells} iwwerschratt.","row_limit":"Dir hutt d\u00e9i maximal Zeilenzuel vun {$rows} iwwerschratt.","col_limit":"Dir hutt d\u00e9i maximal Spaltenzuel vun {$cols} iwwerschratt.",colgroup:"Horizontal grupp\u00e9ieren",rowgroup:"Vertikal grupp\u00e9ieren",scope:"Bezuch",tfoot:"Tabellefouss",tbody:"Tabelleninhalt",thead:"Tabellekapp","row_all":"All d\'Zeilen ver\u00e4nneren","row_even":"Grued Zeilen ver\u00e4nneren","row_odd":"Ongrued Zeilen ver\u00e4nneren","row_row":"D\u00ebs Zeil ver\u00e4nneren","cell_all":"All Zellen der Tabelle ver\u00e4nneren","cell_row":"All Zellen an d\u00ebser Zeil ver\u00e4nneren","cell_cell":"D\u00ebs Zell ver\u00e4nneren",th:"Iwwerschr\u00ebft",td:"Textzell",summary:"Zesummefaassung",bgimage:"Hannergrondbild",rtl:"Riets no l\u00e9nks",ltr:"L\u00e9nks no riets",mime:"MIME-Typ vum Inhalt",langcode:"Sproochecode",langdir:"Schr\u00ebftrichtung",style:"Format",id:"ID","merge_cells_title":"Zelle vereenen",bgcolor:"Hannergrondfuerf",bordercolor:"Fuerf vun der Rumm","align_bottom":"\u00cbnnen","align_top":"Uewen",valign:"Vertikal Ausriichtung","cell_type":"Zellentyp","cell_title":"Eegeschafte vun der Zell","row_title":"Eegeschafte vun der Zeil","align_middle":"M\u00ebtteg","align_right":"Riets","align_left":"L\u00e9nks","align_default":"Standard",align:"Ausriichtung",border:"Rumm",cellpadding:"Ofstand innerhalb vun den Zellen",cellspacing:"Zellenofstand",rows:"Zeilen",cols:"Spalten",height:"H\u00e9icht",width:"Breet",title:"Tabelle af\u00fcgen/beaarbechten",rowtype:"Grupp\u00e9ierung","advanced_props":"Erweidert Astellungen","general_props":"Allgemeng Astellungen","advanced_tab":"Erweidert","general_tab":"Allgemeng","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lt_dlg.js
new file mode 100644
index 000000000..754fd7d07
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.table_dlg',{"rules_border":"r\u0117melis","rules_box":"d\u0117\u017eut\u0117","rules_vsides":"vert. pus\u0117s","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hor. pus\u0117s","rules_below":"apatinis","rules_above":"vir\u0161utinis","rules_void":"negaliojantis",rules:"Taisykl\u0117s","frame_all":"visi","frame_cols":"stulpeliai","frame_rows":"eilut\u0117s","frame_groups":"grup\u0117s","frame_none":"joks",frame:"R\u0117melis",caption:"Lentel\u0117s antra\u0161t\u0117","missing_scope":"Ar norite t\u0119sti nenurod\u0119 galiojimo srities \u0161iam lentel\u0117s vir\u0161utiniam langeliui. Be nurodymo, kai kuriems naudotojams su negalia gali b\u016bti sunku suprasti lentel\u0117je atvaizduojam\u0173 duomen\u0173 turin\u012f.","cell_limit":"Vir\u0161ijote did\u017eiausi\u0105 ({$cells}) langeli\u0173 kiek\u012f.","row_limit":"Vir\u0161ijote did\u017eiausi\u0105 ({$rows}) eilu\u010di\u0173 kiek\u012f.","col_limit":"Vir\u0161ijote did\u017eiausi\u0105 ({$cols}) stulpeli\u0173 kiek\u012f.",colgroup:"Stulpeli\u0173 grup\u0117",rowgroup:"Eilu\u010di\u0173 grup\u0117",scope:"Galiojimo sritis",tfoot:"Lentel\u0117s apa\u010dia",tbody:"Lentel\u0117s vidus",thead:"Lentel\u0117s vir\u0161us","row_all":"Atnaujinti visas lentel\u0117s eilutes","row_even":"Atnaujinti lygines lentel\u0117s eilutes","row_odd":"Atnaujinti nelygines lentel\u0117s eilutes","row_row":"Atnaujinti dabartin\u0119 eilut\u0119","cell_all":"Atnaujinti visus lentel\u0117s langelius","cell_row":"Atnaujinti visus eilut\u0117s langelius","cell_cell":"Atnaujinti dabartin\u012f langel\u012f",th:"Antra\u0161t\u0117",td:"Duomenys",summary:"Apibendrinimas",bgimage:"Fono paveiksl\u0117lis",rtl:"I\u0161 de\u0161in\u0117s \u012f kair\u0119",ltr:"I\u0161 kair\u0117s \u012f de\u0161in\u0119",mime:"Paskirties MIME tipas",langcode:"Kalbos kodas",langdir:"Kalbos kryptis",style:"Stilius",id:"Id","merge_cells_title":"Sujungti lentel\u0117s langelius",bgcolor:"Fono spalva",bordercolor:"R\u0117melio spalva","align_bottom":"Apa\u010dioje","align_top":"Vir\u0161uje",valign:"Vertikalus lygiavimas","cell_type":"Langelio tipas","cell_title":"Lentel\u0117s langeli\u0173 nustatymai","row_title":"Lentel\u0117s eilut\u0117s nustatymai","align_middle":"Centruoti","align_right":"Lygiuoti de\u0161in\u0117je","align_left":"Lygiuoti kair\u0117je","align_default":"Standartinis",align:"Lygiavimas",border:"R\u0117melis",cellpadding:"Tarpas langelio viduje",cellspacing:"Tarpas tarp langeli\u0173",rows:"Eilut\u0117s",cols:"Stulpeliai",height:"Auk\u0161tis",width:"Ilgis",title:"\u012eterpti/modifikuoti lentel\u0119",rowtype:"Eilut\u0117 lentel\u0117s dalyje","advanced_props":"I\u0161pl\u0117stiniai nustatymai","general_props":"Bendri nustatymai","advanced_tab":"I\u0161pl\u0117sta","general_tab":"Bendra","cell_col":"Atnaujinti visus langelius stulpelyje"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lv_dlg.js
new file mode 100644
index 000000000..6920325d8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Atjaunot visus logus ail\u0113"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/mk_dlg.js
new file mode 100644
index 000000000..6bf049b19
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.table_dlg',{"rules_border":"\u0433\u0440\u0430\u043d\u0438\u0446\u0430","rules_box":"\u043a\u0443\u0442\u0438\u0458\u0430","rules_vsides":"\u043b\u0435\u0432\u043e \u0438 \u0434\u0435\u0441\u043d\u043e","rules_rhs":"\u043e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e","rules_lhs":"\u043e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e","rules_hsides":"\u0433\u043e\u0440\u0435 \u0438 \u0434\u043e\u043b\u0435","rules_below":"\u043f\u043e\u0434","rules_above":"\u043d\u0430\u0434","rules_void":"\u043f\u0440\u0430\u0437\u043d\u043e",rules:"\u041f\u0440\u0430\u0432\u0438\u043b\u0430","frame_all":"\u0441\u0435/\u0441\u0438\u0442\u0435","frame_cols":"\u043a\u043e\u043b\u043e\u043d\u0438","frame_rows":"\u0440\u0435\u0434\u043e\u0432\u0438","frame_groups":"\u0433\u0440\u0443\u043f\u0438","frame_none":"\u043d\u0438\u0448\u0442\u043e",frame:"\u0420\u0430\u043c\u043a\u0430",caption:"\u041e\u043f\u0438\u0441 \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","missing_scope":"\u0414\u0430\u043b\u0438 \u0441\u0442\u0435 \u0441\u0438\u0433\u0443\u0440\u043d\u0438 \u0434\u0435\u043a\u0430 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435 \u0431\u0435\u0437 \u043e\u0434\u0440\u0435\u0434\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u043e\u043f\u0441\u0435\u0433\u043e\u0442 \u043d\u0430 \u043d\u0430\u0441\u043b\u043e\u0432\u043d\u0430\u0442\u0430 \u043a\u043b\u0435\u0442\u043a\u0430 \u043d\u0430 \u043e\u0432\u0430\u0430 \u0442\u0430\u0431\u0435\u043b\u0430. \u0411\u0435\u0437 \u043d\u0435\u0433\u043e, \u0442\u043e\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0442\u0435\u0448\u043a\u043e \u0437\u0430 \u043d\u0435\u043a\u043e\u0438 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438 \u0441\u043e \u043f\u043e\u0441\u0435\u0431\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438 \u0434\u0430 \u0441\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430\u0442\u0430 \u0438\u043b\u0438 \u043f\u043e\u0434\u0430\u0442\u043e\u0446\u0438 \u043f\u0440\u0438\u043a\u0430\u0436\u0430\u043d\u0438 \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430.","cell_limit":"\u0413\u043e \u043d\u0430\u0434\u043c\u0438\u043d\u0430\u0432\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0438\u043e\u0442 \u0431\u0440\u043e\u0458 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0438 ({$cells}).","row_limit":"\u0413\u043e \u043d\u0430\u0434\u043c\u0438\u043d\u0430\u0432\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u043e\u043e\u0442 \u0431\u0440\u043e\u0458 \u043d\u0430 \u0440\u0435\u0434\u043e\u0432\u0438 ({$rows}).","col_limit":"\u0413\u043e \u043d\u0430\u0434\u043c\u0438\u043d\u0430\u0432\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u043e\u043e\u0442 \u0431\u0440\u043e\u0458 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0438 ({$cols}).",colgroup:"\u0413\u0440\u0443\u043f\u0430 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0438",rowgroup:"\u0413\u0440\u0443\u043f\u0430 \u043d\u0430 \u0440\u0435\u0434\u043e\u0432\u0438",scope:"\u041e\u043f\u0441\u0435\u0433",tfoot:"\u041e\u043f\u0430\u0448\u043a\u0430/\u043f\u043e\u0434\u043d\u043e\u0436\u0458\u0435 \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430",tbody:"\u0422\u0435\u043b\u043e \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430",thead:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","row_all":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u0440\u0435\u0434\u043e\u0432\u0438 \u0432\u043e \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","row_even":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043f\u0430\u0440\u043d\u0438 \u0440\u0435\u0434\u043e\u0432\u0438 \u0432\u043e \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","row_odd":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043d\u0435\u043f\u0430\u0440\u043d\u0438 \u0440\u0435\u0434\u043e\u0432\u0438 \u0432\u043e \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","row_row":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u043d\u0438\u043e\u0442 \u0440\u0435\u0434","cell_all":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043a\u043b\u0435\u0442\u043a\u0438 \u0432\u043e \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","cell_row":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043a\u043b\u0435\u0442\u043a\u0438 \u0432\u043e \u0440\u0435\u0434\u043e\u0442","cell_cell":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0458\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u043d\u0430\u0442\u0430 \u043a\u043b\u0435\u0442\u043a\u0430",th:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",td:"\u041f\u043e\u0434\u0430\u0442\u043e\u0446\u0438",summary:"\u0420\u0435\u0437\u0438\u043c\u0435",bgimage:"\u0421\u043b\u0438\u043a\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430\u0442\u0430",rtl:"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e",ltr:"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e",mime:"MIME \u0442\u0438\u043f",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442",langdir:"\u0421\u043c\u0435\u0440 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442",style:"\u0421\u0442\u0438\u043b",id:"\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0458\u0430 (Id)","merge_cells_title":"\u0421\u043f\u043e\u0438 \u0433\u0438 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435",bgcolor:"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430\u0442\u0430",bordercolor:"\u0411\u043e\u0458\u0430 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0442\u0430/\u0440\u0430\u0431\u043e\u0442","align_bottom":"\u0414\u043e\u043b\u0435","align_top":"\u0413\u043e\u0440\u0435",valign:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u0438\u0437\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435","cell_type":"\u0422\u0438\u043f \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430","cell_title":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","row_title":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0434\u043e\u0442","align_middle":"\u0421\u0440\u0435\u0434\u0438\u043d\u0430","align_right":"\u0414\u0435\u0441\u043d\u043e","align_left":"\u041b\u0435\u0432\u043e","align_default":"\u041f\u0440\u0435\u0432\u0437\u0435\u043c\u0435\u043d\u043e",align:"\u0418\u0437\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430 / \u0440\u0430\u0431",cellpadding:"\u0414\u043e\u043f\u043e\u043b\u043d\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430",cellspacing:"\u0420\u0430\u0441\u0442\u043e\u0458\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430",rows:"\u0420\u0435\u0434\u043e\u0432\u0438",cols:"\u041a\u043e\u043b\u043e\u043d\u0438",height:"\u0412\u0438\u0441\u0438\u043d\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u0412\u043c\u0435\u0442\u043d\u0438/\u0443\u0440\u0435\u0434\u0438 \u0442\u0430\u0431\u0435\u043b\u0430",rowtype:"\u0422\u0438\u043f \u043d\u0430 \u0440\u0435\u0434\u043e\u0442","advanced_props":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u0438 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430","general_props":"\u041e\u0441\u043d\u043e\u0432\u043d\u0438 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430","advanced_tab":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e","general_tab":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e","cell_col":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043a\u043b\u0435\u0442\u043a\u0438 \u0432\u043e \u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ml_dlg.js
new file mode 100644
index 000000000..ddab4fc70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.table_dlg',{"rules_border":"\u0d05\u0d24\u0d3f\u0d30\u0d41\u0d4d","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u0d24\u0d3e\u0d34\u0d46","rules_above":"\u0d2e\u0d41\u0d15\u0d33\u0d3f\u0d32\u0d4d\u200d","rules_void":"void",rules:"Rules","frame_all":"\u0d0e\u0d32\u0d4d\u0d32\u0d3e\u0d02","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/mn_dlg.js
new file mode 100644
index 000000000..dfb04fcef
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u0434\u043e\u043e\u0440","rules_above":"\u0434\u044d\u044d\u0440","rules_void":"void",rules:"\u0428\u0443\u0433\u0430\u043c","frame_all":"\u0431\u04af\u0445","frame_cols":"\u0411\u0430\u0433\u0430\u043d\u0430","frame_rows":"\u041c\u04e9\u0440","frame_groups":"\u0411\u04af\u043b\u044d\u0433","frame_none":"\u0431\u0430\u0439\u0445\u0433\u04af\u0439",frame:"\u0424\u0440\u044d\u0439\u043c",caption:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0442\u0430\u0439\u043b\u0431\u0430\u0440","missing_scope":"\u0422\u0430 \u044d\u043d\u044d \u0433\u0430\u0440\u0447\u0433\u0438\u0439\u043d \u0445\u0443\u0432\u044c\u0434 \u04af\u043d\u044d\u0445\u044d\u044d\u0440 \u0442\u0430\u0439\u043b\u0431\u0430\u0440 \u0445\u0438\u0439\u0445\u0433\u04af\u0439 \u0431\u0430\u0439\u0445\u044b\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443? \u0417\u0430\u0440\u0438\u043c \u0445\u04e9\u0433\u0436\u043b\u0438\u0439\u043d \u0431\u044d\u0440\u0445\u0448\u044d\u044d\u043b\u0442\u044d\u0439 \u0445\u04af\u043c\u04af\u04af\u0441 \u0445\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0430\u0433\u0443\u0443\u043b\u0433\u044b\u0433 \u043e\u0439\u043b\u0433\u043e\u0445\u043e\u0434 \u0445\u04af\u043d\u0434\u0440\u044d\u043b\u0442\u044d\u0439 \u0431\u0430\u0439\u0445 \u0431\u043e\u043b\u043d\u043e.","cell_limit":"\u041d\u04af\u0434\u043d\u0438\u0439 \u0442\u043e\u043e\u043d\u044b \u0445\u044f\u0437\u0433\u0430\u0430\u0440 {$cells}-\u0441 \u0445\u044d\u0442\u044d\u0440\u043b\u044d\u044d.","row_limit":"\u041c\u04e9\u0440\u0438\u0439\u043d \u0442\u043e\u043e\u043d\u044b \u0445\u044f\u0437\u0433\u0430\u0430\u0440 {$rows}-\u0441 \u0445\u044d\u0442\u044d\u0440\u043b\u044d\u044d.","col_limit":"\u0411\u0430\u0433\u0430\u043d\u044b\u043d \u0442\u043e\u043e\u043d\u044b \u0445\u044f\u0437\u0433\u0430\u0430\u0440 {$cols}-\u0441 \u0445\u044d\u0442\u044d\u0440\u043b\u044d\u044d.",colgroup:"\u0425\u044d\u0432\u0442\u044d\u044d \u0431\u04af\u043b\u044d\u0433\u043b\u044d\u0445",rowgroup:"\u0411\u043e\u0441\u043e\u043e \u0431\u04af\u043b\u044d\u0433\u043b\u044d\u0445",scope:"\u0423\u044f\u043b\u0434\u0430\u0430",tfoot:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0445\u04e9\u043b",tbody:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0430\u0433\u0443\u0443\u043b\u0433\u0430",thead:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0442\u043e\u043b\u0433\u043e\u0439","row_all":"\u0411\u04af\u0445 \u043c\u04e9\u0440\u0438\u0439\u043d \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","row_even":"\u0422\u044d\u0433\u0448 \u043c\u04e9\u0440\u04af\u04af\u0434\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","row_odd":"\u0421\u043e\u043d\u0434\u0433\u043e\u0439 \u043c\u04e9\u0440\u04af\u04af\u0434\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","row_row":"\u042d\u043d\u044d \u043c\u04e9\u0440\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","cell_all":"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0431\u04af\u0445 \u043d\u04af\u0434\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","cell_row":"\u042d\u043d\u044d \u043c\u04e9\u0440\u04e9\u043d \u0434\u04e9\u0445 \u0431\u04af\u0445 \u043d\u04af\u0434\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","cell_cell":"\u042d\u043d\u044d \u043d\u04af\u0434\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445",th:"\u0413\u0430\u0440\u0447\u0438\u0433",td:"\u0411\u0438\u0447\u0432\u044d\u0440 \u043d\u04af\u0434",summary:"\u0414\u04af\u0433\u043d\u044d\u043b\u0442",bgimage:"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u0437\u0443\u0440\u0430\u0433",rtl:"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d",ltr:"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d",mime:"\u0410\u0433\u0443\u0443\u043b\u0433\u044b\u043d MIME-\u0442\u04e9\u0440\u04e9\u043b",langcode:"\u0425\u044d\u043b\u043d\u0438\u0439 \u043a\u043e\u0434",langdir:"\u0411\u0438\u0447\u0433\u0438\u0439\u043d \u0447\u0438\u0433\u043b\u044d\u043b",style:"\u0425\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442",id:"\u0422\u0422","merge_cells_title":"\u041d\u04af\u0434 \u043d\u044d\u0433\u0442\u0433\u044d\u0445",bgcolor:"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u04e9\u043d\u0433\u04e9",bordercolor:"\u0425\u04af\u0440\u044d\u044d\u043d\u0438\u0439 \u04e9\u043d\u0433\u04e9","align_bottom":"\u0414\u043e\u043e\u0440","align_top":"\u0414\u044d\u044d\u0440",valign:"\u0411\u043e\u0441\u043e\u043e \u0436\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442","cell_type":"\u041d\u04af\u0434\u043d\u0438\u0439 \u0442\u04e9\u0440\u04e9\u043b","cell_title":"\u041d\u04af\u0434\u043d\u0438\u0439 \u0448\u0438\u043d\u0436","row_title":"\u041c\u04e9\u0440\u0438\u0439\u043d \u0448\u0438\u043d\u0436","align_middle":"\u0413\u043e\u043b\u0434","align_right":"\u0411\u0430\u0440\u0443\u0443\u043d","align_left":"\u0417\u04af\u04af\u043d","align_default":"\u04e8\u0433\u04e9\u0433\u0434\u043c\u04e9\u043b",align:"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",border:"\u0425\u04af\u0440\u044d\u044d",cellpadding:"\u041d\u04af\u0434\u043d\u0438\u0439 \u0434\u043e\u0442\u043e\u043e\u0434 \u0430\u043b\u0441\u043b\u0430\u043b\u0442",cellspacing:"\u041d\u04af\u0434\u043d\u0438\u0439 \u0430\u043b\u0441\u043b\u0430\u043b\u0442",rows:"\u041c\u04e9\u0440",cols:"\u0411\u0430\u0433\u0430\u043d\u0430",height:"\u04e8\u043d\u0434\u04e9\u0440",width:"\u04e8\u0440\u0433\u04e9\u043d",title:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0430\u0445",rowtype:"\u041c\u04e9\u0440\u0438\u0439\u043d \u0442\u04e9\u0440\u04e9\u043b","advanced_props":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","general_props":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439 \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","advanced_tab":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d","general_tab":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ms_dlg.js
new file mode 100644
index 000000000..d32483f93
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.table_dlg',{"rules_border":"sempadan","rules_box":"kotak","rules_vsides":"tepian tegak","rules_rhs":"hs-kanan","rules_lhs":"hs-kiri","rules_hsides":"tepian datar","rules_below":"bawah","rules_above":"atas","rules_void":"batal",rules:"Peraturan","frame_all":"semua","frame_cols":"kol","frame_rows":"row","frame_groups":"kumpulan","frame_none":"tiada",frame:"Bingkai",caption:"Tajuk jadual","missing_scope":"Adakah anda pasti terhadap skop sel jadual ini. Ia mungkin memberi kesan kepada OKU memahami isi jadual.","cell_limit":"Anda telah melebihi maxima sel dibenarkan iaitu {$cells}.","row_limit":"Anda telah melebihi maxima row dibenarkan iaitu {$rows}.","col_limit":"Anda telah melebihi maxima kolum dibenarkan iaitu {$cols}.",colgroup:"Kumpulan kol",rowgroup:"Kumpulan row",scope:"Skop",tfoot:"Penutup jadual Foot",tbody:"Isi jadual",thead:"Pembuka jadual","row_all":"Baharui semua row dalam jadual","row_even":"Baharui row genap dalam jadual","row_odd":"Baharui row ganjil dalam jadual","row_row":"Baharui row semasa","cell_all":"Baharui semua sel dalam jadual","cell_row":"Baharui semua sel dalam row","cell_cell":"Baharui sel ini",th:"Kepala",td:"Data",summary:"Kesimpulan",bgimage:"Imej latar",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",mime:"Sasaran jenis MIME",langcode:"Kod bahasa",langdir:"Arah bahasa",style:"Gaya",id:"Id","merge_cells_title":"Gabung sel jadual",bgcolor:"Warna latar",bordercolor:"Warna sempadan","align_bottom":"Bawah","align_top":"Atas",valign:"Penjajaran tegak","cell_type":"Jenis sel","cell_title":"Alatan sel jadual","row_title":"Alatan row jadual","align_middle":"Tengah","align_right":"Kanan","align_left":"Kiri","align_default":"Asal",align:"Penyelarian",border:"Sempadan",cellpadding:"Lapisan sel",cellspacing:"Ruang sel",rows:"Row",cols:"Kol",height:"Tinggi",width:"Lebar",title:"Masuk/Ubah jadual",rowtype:"Row dalam jadual","advanced_props":"Alatan lanjutan","general_props":"Alatan am","advanced_tab":"Lanjutan","general_tab":"Am","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/my_dlg.js
new file mode 100644
index 000000000..b84c324fb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.table_dlg',{"rules_border":"\u1014\u101a\u103a\u1005\u100a\u103a\u1038","rules_box":"\u1015\u1036\u102f\u1038","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u1031\u1021\u102c\u1000\u103a\u1010\u103d\u1004\u103a","rules_above":"\u1021\u1011\u1000\u103a\u1010\u103d\u1004\u103a","rules_void":"void",rules:"\u1005\u100a\u103a\u1038\u1019\u103b\u1009\u103a\u1038\u1019\u103b\u102c\u1038","frame_all":"\u1021\u102c\u1038\u101c\u1036\u102f\u1038","frame_cols":"\u1031\u1000\u102c\u103a\u101c\u1036\u1019\u103b\u102c\u1038","frame_rows":"\u1021\u1010\u1014\u103a\u1038\u1019\u103b\u102c\u1038","frame_groups":"\u1021\u102f\u1015\u103a\u1005\u102f\u1019\u103b\u102c\u1038","frame_none":"\u1010\u1005\u103a\u1001\u102f\u1019\u103b\u103e\u1019\u101f\u102f\u1010\u103a",frame:"\u1016\u101b\u102d\u1019\u103a",caption:"\u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a \u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a","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.","cell_limit":"You","row_limit":"You","col_limit":"You",colgroup:"\u1031\u1000\u102c\u103a\u101c\u1036 \u1021\u102f\u1015\u103a\u1005\u102f",rowgroup:"\u1021\u1010\u1014\u103a\u1038 \u1021\u102f\u1015\u103a\u1005\u102f",scope:"Scope",tfoot:"\u1007\u101a\u102c\u1038 \u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001",tbody:"\u1007\u101a\u102c\u1038 \u1000\u102d\u102f\u101a\u103a\u1011\u100a\u103a",thead:"\u1007\u101a\u102c\u1038 \u1014\u1016\u1030\u1038\u1005\u100a\u103a\u1038","row_all":"\u1007\u101a\u102c\u1038\u1011\u1032\u1019\u103e \u1021\u1010\u1014\u103a\u1038\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","row_even":"\u1007\u101a\u102c\u1038\u1011\u1032\u1019\u103e \u1005\u1036\u102f \u1021\u1010\u1014\u103a\u1038\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","row_odd":"\u1007\u101a\u102c\u1038\u1011\u1032\u1019\u103e \u1019 \u1021\u1010\u1014\u103a\u1038\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","row_row":"\u101c\u1000\u103a\u101b\u103e\u102d \u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","cell_all":"\u1007\u101a\u102c\u1038\u1011\u1032\u1019\u103e \u1021\u1000\u103d\u1000\u103a\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","cell_row":"\u1021\u1010\u1014\u103a\u1038\u1011\u1032\u1019\u103e \u1021\u1000\u103d\u1000\u103a\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","cell_cell":"\u101c\u1000\u103a\u101b\u103e\u102d \u1021\u1000\u103d\u1000\u103a\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b",th:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u102e\u1038\u1015\u102d\u102f\u1004\u103a\u1038",td:"\u1021\u1001\u103b\u1000\u103a\u1021\u101c\u1000\u103a",summary:"\u1021\u1014\u103e\u1005\u103a\u1001\u103b\u102f\u1015\u103a",bgimage:"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u101b\u102f\u1015\u103a\u1015\u1036\u102f",rtl:"\u100a\u102c\u1019\u103e \u1018\u101a\u103a",ltr:"\u1018\u101a\u103a\u1019\u103e \u100a\u102c",mime:"Target MIME type",langcode:"\u1018\u102c\u101e\u102c\u1005\u1000\u102c\u1038 \u1000\u102f\u1010\u103a",langdir:"\u1005\u102c\u1031\u101b\u1038\u101e\u102c\u1038\u1019\u103e\u102f \u1025\u102e\u1038\u1010\u100a\u103a\u1001\u103b\u1000\u103a",style:"\u1005\u1010\u102d\u102f\u1004\u103a",id:"ID","merge_cells_title":"\u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1031\u1015\u102b\u1004\u103a\u1038\u1015\u102b",bgcolor:"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u1021\u1031\u101b\u102c\u1004\u103a",bordercolor:"\u1014\u101a\u103a\u1005\u100a\u103a\u1038 \u1021\u1031\u101b\u102c\u1004\u103a","align_bottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001","align_top":"\u1011\u102d\u1015\u103a",valign:"\u1031\u1012\u102b\u1004\u103a\u101c\u102d\u102f\u1000\u103a \u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f","cell_type":"\u1021\u1000\u103d\u1000\u103a \u1021\u1019\u103b\u102d\u102f\u1038\u1021\u1005\u102c\u1038","cell_title":"\u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a \u101d\u102d\u1031\u101e\u101e \u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","row_title":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038 \u101d\u102d\u1031\u101e\u101e \u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","align_middle":"\u1017\u101f\u102d\u102f","align_right":"\u100a\u102c","align_left":"\u1018\u101a\u103a","align_default":"\u1019\u1030\u101c",align:"\u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f",border:"\u1014\u101a\u103a\u1005\u1015\u103a\u1005\u100a\u103a\u1038",cellpadding:"\u1000\u103d\u1000\u103a\u1031\u1018\u1038\u1031\u1014\u101b\u102c\u101c\u103d\u1010\u103a",cellspacing:"\u1000\u103d\u1000\u103a\u103c\u1000\u102c\u1038\u101c\u1015\u103a",rows:"\u1021\u1010\u1014\u103a\u1038",cols:"\u1031\u1000\u102c\u103a\u101c\u1036",height:"\u1021\u103c\u1019\u1004\u103a\u1037",width:"\u1021\u1000\u103b\u101a\u103a",title:"\u1007\u101a\u102c\u1038 \u1011\u100a\u103a\u1037/\u103c\u1015\u102f\u103c\u1015\u1004\u103a",rowtype:"\u1021\u1010\u1014\u103a\u1038\u101b\u103e\u102d\u1019\u100a\u103a\u1037 \u1007\u101a\u102c\u1038 \u1021\u1015\u102d\u102f\u1004\u103a\u1038","advanced_props":"\u1021\u1011\u1030\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","general_props":"\u1021\u1031\u1011\u103d\u1031\u1011\u103d \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","advanced_tab":"\u1021\u1011\u1030\u1038","general_tab":"\u1021\u1031\u1011\u103d\u1031\u1011\u103d","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nb_dlg.js
new file mode 100644
index 000000000..2fc6c4fb7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.table_dlg',{"rules_border":"ramme","rules_box":"boks","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsider","rules_below":"under","rules_above":"over","rules_void":"ingen",rules:"Streker","frame_all":"alle","frame_cols":"kolonner","frame_rows":"rader","frame_groups":"grupper","frame_none":"ingen",frame:"Ramme",caption:"Tabelloverskrift","missing_scope":"Er du sikker p\u00e5 at du vil fortsette uten \u00e5 angi et omr\u00e5de for denne overskrifscellen? Uten dette kan det bli vanskelig for enkelte funksjonshemmede brukere \u00e5 forst\u00e5 innholdet eller dataene som blir presentert i tabellen.","cell_limit":"Du har overskredet maksimalt antall celler p\u00e5 {$cells}.","row_limit":"Du har overskredet maksimalt antall rader p\u00e5 {$rows}.","col_limit":"Du har overskredet maksimalt antall kolonner p\u00e5 {$cols}.",colgroup:"Kolonnegruppe",rowgroup:"Radgruppe",scope:"Omr\u00e5de",tfoot:"Tabellfot",tbody:"Tabellkropp",thead:"Tabellhode","row_all":"Oppdater alle rader","row_even":"Oppdater partallsrader","row_odd":"Oppdater oddetallsrader","row_row":"Oppdater aktuell rad","cell_all":"Oppdater alle celler i tabellen","cell_row":"Oppdater alle celler i raden","cell_cell":"Oppdater aktuell celle",th:"Overskrift",td:"Data",summary:"Sammendrag",bgimage:"Bakgrunnsbilde",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",mime:"M\u00e5lets MIME-type",langcode:"Spr\u00e5kkode",langdir:"Skriftretning",style:"Stil",id:"Id","merge_cells_title":"Sl\u00e5 sammen celler",bgcolor:"Bakgrunn",bordercolor:"Rammefarge","align_bottom":"Bunn","align_top":"Topp",valign:"Vertikal justering","cell_type":"Celletype","cell_title":"Celleegenskaper","row_title":"Radegenskaper","align_middle":"Midtstilt","align_right":"H\u00f8yre","align_left":"Venstre","align_default":"Standard",align:"Justering",border:"Ramme",cellpadding:"Cellefylling",cellspacing:"Celleavstand",rows:"Rader",cols:"Kolonner",height:"H\u00f8yde",width:"Bredde",title:"Sett inn / rediger tabell",rowtype:"Rad i tabell","advanced_props":"Generelle egenskaper","general_props":"Generelt","advanced_tab":"Avansert","general_tab":"Generelt","cell_col":"Oppdater alle celler i kolonnen"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nl_dlg.js
new file mode 100644
index 000000000..ebc25e70e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.table_dlg',{"rules_border":"Rand","rules_box":"Box","rules_vsides":"Verticale zijden","rules_rhs":"Rechterzijkant","rules_lhs":"Linkerzijkant","rules_hsides":"Horizontale zijden","rules_below":"Onder","rules_above":"Boven","rules_void":"Geen",rules:"Hulplijnen","frame_all":"Alles","frame_cols":"Kolommen","frame_rows":"Rijen","frame_groups":"Groepen","frame_none":"Geen",frame:"Frame",caption:"Tabelbeschrijving","missing_scope":"Weet u zeker dat u door wilt gaan met het toewijzen van een kop zonder een bereik op te geven? Mensen met een visuele handicap kunnen hierdoor waarschijnlijk slecht bij de gegevens.","cell_limit":"U heeft het maximale aantal cellen van {$cells} overschreden.","row_limit":"U heeft hebt het maximale aantal rijen van {$rows} overschreden.","col_limit":"U heeft het maximale aantal kolommen van {$cols} overschreden.",colgroup:"Kolomgroep",rowgroup:"Rijgroep",scope:"Bereik",tfoot:"Tabelvoet",tbody:"Tabellichaam",thead:"Tabelkop","row_all":"Alle rijen bijwerken","row_even":"Even rijen bijwerken","row_odd":"Oneven rijen bijwerken","row_row":"Huidige rij bijwerken","cell_all":"Alle cellen in tabel bijwerken","cell_row":"Alle cellen in rij bijwerken","cell_cell":"Huidige cel bijwerken",th:"Kop",td:"Gegevens",summary:"Samenvatting",bgimage:"Achtergrondafbeelding",rtl:"Van rechts naar links",ltr:"Van links naar rechts",mime:"Doel MIME type",langcode:"Taalcode",langdir:"Taalrichting",style:"Stijl",id:"Id","merge_cells_title":"Cellen samenvoegen",bgcolor:"Achtergrondkleur",bordercolor:"Randkleur","align_bottom":"Onder","align_top":"Boven",valign:"Verticale uitlijning","cell_type":"Celtype","cell_title":"Celeigenschappen","row_title":"Rij-eigenschappen","align_middle":"Centreren","align_right":"Rechts","align_left":"Links","align_default":"Standaard",align:"Uitlijning",border:"Rand",cellpadding:"Ruimte in cel",cellspacing:"Ruimte om cel",rows:"Rijen",cols:"Kolommen",height:"Hoogte",width:"Breedte",title:"Tabel invoegen/bewerken",rowtype:"Rijtype","advanced_props":"Geavanceerde eigenschappen","general_props":"Algemene eigenschappen","advanced_tab":"Geavanceerd","general_tab":"Algemeen","cell_col":"Alle cellen in de kolom bijwerken"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nn_dlg.js
new file mode 100644
index 000000000..ac1ea85ca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.table_dlg',{"rules_border":"ramme","rules_box":"boks","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"under","rules_above":"over","rules_void":"ingen",rules:"Strekar","frame_all":"alle","frame_cols":"kolonnar","frame_rows":"rader","frame_groups":"grupper","frame_none":"ingen",frame:"Ramme",caption:"Tabelloverskrift","missing_scope":"Er du sikker p\u00e5 at du vil fortsetje utan \u00e5 angi eit omr\u00e5de for denne overskrifscella? Utan dette kan det bli vanskeleg for enkelte funksjonshemma brukarar \u00e5 forst\u00e5 innhaldet eller dataane som blir presenterte i tabellen.","cell_limit":"Du har fleire enn maksimalt tal celler p\u00e5 {$cells}.","row_limit":"Du har fleire enn maksimalt tal rader p\u00e5 {$rows}.","col_limit":"Du har fleire enn maksimalt tal kolonner p\u00e5 {$cols}.",colgroup:"Kolonnegruppe",rowgroup:"Radgruppe",scope:"Omr\u00e5de",tfoot:"Tabellfot",tbody:"Tabellkropp",thead:"Tabellhovud","row_all":"Oppdater alle rader","row_even":"Oppdater partallrader","row_odd":"Oppdater oddetallrader","row_row":"Oppdater aktuell rad","cell_all":"Oppdater alle celler i tabellen","cell_row":"Oppdater alle celler i rada","cell_cell":"Oppdater aktuell celle",th:"Overskrift",td:"Data",summary:"Samandrag",bgimage:"Bakgrunnsbilete",rtl:"H\u00f8gre mot venstre",ltr:"Venstre mot h\u00f8gre",mime:"M\u00e5let sin MIME-type",langcode:"Spr\u00e5kkode",langdir:"Skriftretning",style:"Stil",id:"Id","merge_cells_title":"Sl\u00e5 saman celler",bgcolor:"Bakgrunn",bordercolor:"Rammefarge","align_bottom":"Botn","align_top":"Topp",valign:"Vertikal justering","cell_type":"Celletype","cell_title":"Celleeigenskapar","row_title":"Radeigenskapar","align_middle":"Midtstilt","align_right":"H\u00f8gre","align_left":"Venstre","align_default":"Standard",align:"Justering",border:"Ramme",cellpadding:"Cellefylling",cellspacing:"Celleavstand",rows:"Rader",cols:"Kolonner",height:"H\u00f8gd",width:"Breidd",title:"Set inn / rediger tabell",rowtype:"Rad i tabell","advanced_props":"Generelle eigenskapar","general_props":"Generelt","advanced_tab":"Avansert","general_tab":"Generelt","cell_col":"Oppdater alle celler i kolonne"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/no_dlg.js
new file mode 100644
index 000000000..26d1da7aa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.table_dlg',{"rules_border":"ramme","rules_box":"boks","rules_vsides":"vside","rules_rhs":"hs","rules_lhs":"vs","rules_hsides":"hside","rules_below":"under","rules_above":"over","rules_void":"tom",rules:"Streker","frame_all":"alle","frame_cols":"kolonner","frame_rows":"rader","frame_groups":"grupper","frame_none":"ingen",frame:"Ramme",caption:"Tabell tittel","missing_scope":"Er du sikker du vil fortsette uten \u00e5 angi tittel for denne overskrifscellen? Uten denne kan det bli vanskelig for enkelte funksjonshemmede brukere \u00e5 forst\u00e5 innhold eller data som presenteres i tabellen.","cell_limit":"Du har overg\u00e5tt maksimalt antall tillatt celler p\u00e5 {$cells}.","row_limit":"Du har overg\u00e5tt maksimalt antall tillatte rader p\u00e5 {$rows}.","col_limit":"Du har overg\u00e5tt maksimalt antall tillatte kolonner p\u00e5 {$cols}.",colgroup:"Kolonne gruppe",rowgroup:"Rad gruppe",scope:"Tittel",tfoot:"Tabell foot",tbody:"Tabell body",thead:"Tabell head","row_all":"Oppdater alle rader","row_even":"Oppdater rader med partall","row_odd":"Oppdater rader med oddetall","row_row":"Oppdater aktuell rad","cell_all":"Oppdater alle celler i tabellen","cell_row":"Oppdater alle celler i raden","cell_cell":"Oppdater aktuell celle",th:"Overskrift",td:"Data",summary:"Sammendrag",bgimage:"Bakgrunnsbilde",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",mime:"M\u00e5lets MIME-type",langcode:"Spr\u00e5k kode",langdir:"Skriftretning",style:"Stil",id:"Id","merge_cells_title":"Sl\u00e5 sammen celler",bgcolor:"Bakgrunnsfarge",bordercolor:"Rammefarge","align_bottom":"Bunn","align_top":"Topp",valign:"Vertikal justering","cell_type":"Celle type","cell_title":"Celle egenskaper","row_title":"Rad egenskaper","align_middle":"Midtstilt","align_right":"H\u00f8yre","align_left":"Venstre","align_default":"Standard",align:"Justering",border:"Ramme",cellpadding:"Cellefylling",cellspacing:"Celleavstand",rows:"Rader",cols:"Kolonner",height:"H\u00f8yde",width:"Bredde",title:"Sett inn/editer tabell",rowtype:"Rad i tabell","advanced_props":"Avanserte egenskaper","general_props":"Generelle egenskaper","advanced_tab":"Avansert","general_tab":"Generelt","cell_col":"Oppdater alle cellene i kolonnen"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/pl_dlg.js
new file mode 100644
index 000000000..8bbe7c83b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.table_dlg',{"rules_border":"granica","rules_box":"ramka","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"pod","rules_above":"nad","rules_void":"void",rules:"Prowadnice","frame_all":"wszystkie","frame_cols":"kolumny","frame_rows":"wiersze","frame_groups":"grupy","frame_none":"brak",frame:"Ramka",caption:"Nag\u0142\u00f3wek tabeli","missing_scope":"Jeste\u015b pewny \u017ce chcesz kontynuowa\u0107 bez definiowania zasi\u0119gu dla kom\u00f3rki tabeli. Bez niej, mo\u017ce by\u0107 trudne dla niekt\u00f3rych u\u017cytkownik\u00f3w zrozuminie zawarto\u015bci albo danych wy\u015bwietlanych poza tabel\u0105.","cell_limit":"Przekroczy\u0142e\u015b maksymaln\u0105 liczb\u0119 kom\u00f3rek kt\u00f3ra wynosi {$cells}.","row_limit":"Przekroczy\u0142e\u015b maksymaln\u0105 liczb\u0119 wierszy kt\u00f3ra wynosi {$rows}.","col_limit":"Przekroczy\u0142e\u015b maksymaln\u0105 liczb\u0119 kolumn kt\u00f3ra wynosi {$cols}.",colgroup:"Grupa kolumn",rowgroup:"Grupa wierszy",scope:"Zakres",tfoot:"Stopka tabeli",tbody:"Cia\u0142o tabeli",thead:"Nag\u0142\u00f3wek tabeli","row_all":"Zmie\u0144 wszystkie wiersze","row_even":"Zmie\u0144 parzyste wiersze","row_odd":"Zmie\u0144 nieparzyste wiersze","row_row":"Zmie\u0144 aktualny wiersz","cell_all":"Zmie\u0144 wszytkie kom\u00f3rki w tabeli","cell_row":"Zmie\u0144 wszytkie kom\u00f3rki w wierszu","cell_cell":"Zmie\u0144 aktualn\u0105 kom\u00f3rk\u0119",th:"Nag\u0142owek",td:"Dane",summary:"Podsumowanie",bgimage:"Obrazek t\u0142a",rtl:"Kierunek z prawej do lewej",ltr:"Kierunek z lewej do prawej",mime:"Docelowy typ MIME",langcode:"Kod j\u0119zyka",langdir:"Kierunek czytania tekstu",style:"Styl",id:"Id","merge_cells_title":"Po\u0142\u0105cz kom\u00f3rki",bgcolor:"Kolor t\u0142a",bordercolor:"Kolor ramki","align_bottom":"D\u00f3\u0142","align_top":"G\u00f3ra",valign:"Pionowe wyr\u00f3wnanie","cell_type":"Typ kom\u00f3rki","cell_title":"W\u0142a\u015bciwo\u015bci kom\u00f3rki","row_title":"W\u0142a\u015bciwo\u015bci wiersza","align_middle":"\u015arodek","align_right":"Prawy","align_left":"Lewy","align_default":"Domy\u015blnie",align:"Wyr\u00f3wnanie",border:"Ramka",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Wiersze",cols:"Kolumny",height:"Wysoko\u015b\u0107",width:"Szeroko\u015b\u0107",title:"Wklej/Zmie\u0144 tabel\u0119",rowtype:"Wiersz w cz\u0119\u015bci tabeli","advanced_props":"Zaawansowane w\u0142a\u015bciwo\u015bci","general_props":"G\u0142\u00f3wne w\u0142a\u015bciwo\u015bci","advanced_tab":"Zaawansowane","general_tab":"G\u0142\u00f3wne","cell_col":"Zaktualizuj wszystkie kom\u00f3rki w kolumnie"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ps_dlg.js
new file mode 100644
index 000000000..b34a45a57
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/pt_dlg.js
new file mode 100644
index 000000000..fb54400da
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.table_dlg',{"rules_border":"Limites","rules_box":"Box","rules_vsides":"Vsides","rules_rhs":"Rhs","rules_lhs":"Lhs","rules_hsides":"Hsides","rules_below":"abaixo","rules_above":"acima","rules_void":"void",rules:"Regras","frame_all":"Todos","frame_cols":"colunas","frame_rows":"Linhas","frame_groups":"Grupos","frame_none":"Nenhum",frame:"Frame",caption:"T\u00edtulo da tabela","missing_scope":"Tem certeza de que quer continuar sem especificar um escopo para esta c\u00e9lula? (Isso poder\u00e1 causar dificuldades a usu\u00e1rios deficientes)","cell_limit":"Excedeu o n\u00famero m\u00e1ximo de c\u00e9lulas de {$cells}.","row_limit":"Excedeu o n\u00famero m\u00e1ximo de linhas de {$rows}.","col_limit":"Excedeu o n\u00famero m\u00e1ximo de colunas de {$cols}.",colgroup:"Grupo colunas",rowgroup:"Grupo linhas",scope:"Alcance",tfoot:"Rodap\u00e9 da tabela",tbody:"Corpo da tabela",thead:"Topo da tabela","row_all":"Atualizar todas as linhas","row_even":"Atualizar linhas pares","row_odd":"Atualizar linhas \u00edmpares","row_row":"Atualizar esta linha","cell_all":"Atualizar todas as c\u00e9lulas na tabela","cell_row":"Atualizar todas as c\u00e9lulas na linha","cell_cell":"Atualizar esta c\u00e9lula",th:"Campo",td:"Dados",summary:"Sum\u00e1rio",bgimage:"Imagem de fundo",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",mime:"MIME alvo",langcode:"C\u00f3digo do idioma",langdir:"Dire\u00e7\u00e3o do texto",style:"Estilo",id:"Id","merge_cells_title":"Unir c\u00e9lulas",bgcolor:"Cor de fundo",bordercolor:"Cor dos limites","align_bottom":"Abaixo","align_top":"Topo",valign:"Alinha. vert.","cell_type":"Tipo c\u00e9l.","cell_title":"Propriedades de c\u00e9lulas","row_title":"Propriedades de linhas","align_middle":"Centro","align_right":"Direita","align_left":"Esquerda","align_default":"Padr\u00e3o",align:"Alinha.",border:"Limites",cellpadding:"Enchimento da C\u00e9lula",cellspacing:"Espa\u00e7amento da C\u00e9lula",rows:"Linhas",cols:"Colunas",height:"Altura",width:"Largura",title:"Inserir/modificar tabela",rowtype:"Linha na parte da tabela","advanced_props":"Propriedades avan\u00e7adas","general_props":"Propriedades gerais","advanced_tab":"Avan\u00e7ado","general_tab":"Geral","cell_col":"Atualizar todas as c\u00e9lulas na coluna"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ro_dlg.js
new file mode 100644
index 000000000..c1974ed00
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"dedesubt","rules_above":"deasupra","rules_void":"gol",rules:"Reguli","frame_all":"toate","frame_cols":"coloane","frame_rows":"r\u00e2nduri","frame_groups":"grupuri","frame_none":"niciuna",frame:"Frame",caption:"Titlu tabel","missing_scope":"Sigur vrei s\u0103 continui f\u0103r\u0103 s\u0103 completezi scopul acestei celule antet? F\u0103r\u0103 acesta, anumi\u021bi utilizatori cu dizabilit\u0103\u021bi ar putea avea dificult\u0103\u021bi \u00een \u00een\u021belegerea datelor afi\u0219ate \u00een tabel.","cell_limit":"Ai dep\u0103\u0219it num\u0103rul maxim de celule: {$cells}.","row_limit":"Ai dep\u0103\u0219it num\u0103rul maxim de r\u00e2nduri: {$rows}.","col_limit":"Ai dep\u0103\u0219it num\u0103rul maxim de coloane: {$cols}.",colgroup:"Grupeaz\u0103 celulele",rowgroup:"Grupeaz\u0103 r\u00e2ndurile",scope:"Scop",tfoot:"Subsol tabel",tbody:"Corp tabel",thead:"Antet tabel","row_all":"Actualizeaz\u0103 toate r\u00e2ndurile","row_even":"Actualizeaz\u0103 r\u00e2ndurile pare","row_odd":"Actualizeaz\u0103 r\u00e2ndurile impare","row_row":"Actualizeaz\u0103 r\u00e2nd curent","cell_all":"Actualizeaz\u0103 toate celulele din tabel","cell_row":"Actualizeaz\u0103 toate celulele din r\u00e2nd","cell_cell":"Actualizeaz\u0103 celula curent\u0103",th:"Antet",td:"Date",summary:"Sumar",bgimage:"Imagine de fundal",rtl:"De la dreapta la st\u00e2nga",ltr:"De la st\u00e2nga la dreapta",mime:"MIME type \u021bint\u0103",langcode:"Cod limb\u0103",langdir:"Direc\u021bie limb\u0103",style:"Stil",id:"Id","merge_cells_title":"Une\u015fte celulele",bgcolor:"Culoare fundal",bordercolor:"Culoare bordur\u0103","align_bottom":"Jos","align_top":"Sus",valign:"Aliniere vertical\u0103","cell_type":"Tip celul\u0103","cell_title":"Propriet\u0103\u021bi celul\u0103","row_title":"Propriet\u0103\u021bi r\u00e2nd","align_middle":"Centru","align_right":"Dreapta","align_left":"St\u00e2nga","align_default":"Implicit\u0103",align:"Aliniere",border:"Bordur\u0103",cellpadding:"Spa\u021biu \u00een celule",cellspacing:"Spa\u021biu \u00eentre celule",rows:"R\u00e2nduri",cols:"Coloane",height:"\u00cen\u0103l\u021bime",width:"L\u0103\u021bime",title:"Inserare/editare tabel",rowtype:"Tip de r\u00e2nd","advanced_props":"Propriet\u0103\u021bi avansate","general_props":"Propriet\u0103\u021bi generale","advanced_tab":"Avansat","general_tab":"General","cell_col":"Actualizeaz\u0103 toate celulele din coloan\u0103"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ru_dlg.js
new file mode 100644
index 000000000..3bd88153f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"\u041f\u0440\u0430\u0432\u0438\u043b\u0430","frame_all":"\u0432\u0441\u0435","frame_cols":"\u043a\u043e\u043b\u043e\u043d\u043a\u0438","frame_rows":"\u0440\u044f\u0434\u044b","frame_groups":"\u0433\u0440\u0443\u043f\u043f\u044b","frame_none":"\u043d\u0435\u0442",frame:"\u041a\u0430\u0434\u0440",caption:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b","missing_scope":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0431\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0437\u0430\u0433\u043b\u043e\u043b\u0432\u043a\u0430? \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c.","cell_limit":"\u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0432\u0439 \u043f\u0440\u0435\u0434\u0435\u043b, \u0432 $ \u044f\u0447\u0435\u0435\u043a.","row_limit":"\u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0432\u0439 \u043f\u0440\u0435\u0434\u0435\u043b, \u0432 $ \u0441\u0442\u0440\u043e\u043a.","col_limit":"\u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0432\u0439 \u043f\u0440\u0435\u0434\u0435\u043b, \u0432 $ \u043a\u043e\u043b\u043e\u043d\u043e\u043a.",colgroup:"\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432",rowgroup:"\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u0440\u043e\u043a",scope:"\u041e\u0431\u043b\u0430\u0441\u0442\u044c",tfoot:"\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435",tbody:"\u0422\u0435\u043b\u043e",thead:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","row_all":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_even":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0447\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_odd":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_row":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443","cell_all":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","cell_row":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435","cell_cell":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443",th:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",td:"\u0414\u0430\u043d\u043d\u044b\u0435",summary:"\u041e\u0431\u0449\u0435\u0435",bgimage:"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",mime:"MIME \u0442\u0438\u043f \u0446\u0435\u043b\u0438",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0418\u043c\u044f","merge_cells_title":"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438",bgcolor:"\u0426\u0432\u0435\u0442 \u0437\u0430\u043b\u0438\u0432\u043a\u0438",bordercolor:"\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",valign:"\u0412\u0435\u0440\u0442. \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","cell_type":"\u0422\u0438\u043f","cell_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u0435\u0439\u043a\u0438","row_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0440\u043e\u043a\u0438","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_default":"\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430",cellpadding:"\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445",cellspacing:"\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438",rows:"\u0421\u0442\u0440\u043e\u043a\u0438",cols:"\u0421\u0442\u043e\u043b\u0431\u0446\u044b",height:"\u0412\u044b\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b",rowtype:"\u0422\u0438\u043f \u0441\u0442\u0440\u043e\u043a\u0438","advanced_props":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","general_props":"\u041e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","general_tab":"\u041e\u0431\u0449\u0435\u0435","cell_col":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sc_dlg.js
new file mode 100644
index 000000000..930c052bb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.table_dlg',{"rules_border":"\u5916\u6846","rules_box":"\u76d2\u578b","rules_vsides":"\u5782\u76f4\u8fb9","rules_rhs":"\u53f3\u8fb9","rules_lhs":"\u5de6\u8fb9","rules_hsides":"\u6c34\u51c6\u8fb9","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u7ebf\u6761","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u7fa4\u7ec4","frame_none":"\u65e0",frame:"\u8fb9\u6846",caption:"\u8868\u683c\u6807\u9898","missing_scope":"\u6807\u9898\u884c\u7f3a\u5931\uff01 ","cell_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u5355\u683c\u6570\u4e3a{$cells}\u683c\u3002 ","row_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u884c\u6570\u4e3a{$rows}\u884c\u3002 ","col_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u5217\u6570\u4e3a{$cols}\u5217\u3002 ",colgroup:"\u5217\u7fa4\u7ec4",rowgroup:"\u884c\u7fa4\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u5c3e",tbody:"\u8868\u8eab",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u5185\u5168\u90e8\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u6240\u5728\u884c","cell_all":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5168\u90e8\u5355\u683c","cell_row":"\u66f4\u65b0\u6240\u5728\u884c\u7684\u5168\u90e8\u5355\u683c","cell_cell":"\u66f4\u65b0\u6240\u7684\u5355\u683c",th:"\u8868\u5934",td:"\u6570\u636e",summary:"\u6982\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",mime:"\u76ee\u6807MIME\u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"Id","merge_cells_title":"\u5408\u5e76\u5355\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u4e0b\u65b9","align_top":"\u4e0a\u65b9",valign:"\u6c34\u51c6\u5bf9\u9f50\u65b9\u5f0f","cell_type":"\u5355\u683c\u522b","cell_title":"\u5355\u683c\u5c5e\u6027","row_title":"\u884c\u5c5e\u6027","align_middle":"\u5c45\u4e2d","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_default":"\u9884\u8bbe",align:"\u5bf9\u9f50\u65b9\u5f0f",border:"\u8fb9\u6846",cellpadding:"\u5355\u683c\u7559\u767d",cellspacing:"\u5355\u683c\u95f4\u8ddd",rows:"\u884c\u6570",cols:"\u5217\u6570",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u7f16\u8f91\u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u4e00\u822c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/se_dlg.js
new file mode 100644
index 000000000..258c6d5cc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Regler","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Ram",caption:"\u00d6verskrift","missing_scope":"\u00c4r du s\u00e4ker p\u00e5 att du vill forts\u00e4tta utan att ange en omfattning, denna underl\u00e4ttar f\u00f6r icke-grafiska webbl\u00e4sare.","cell_limit":"Du kan inte skapa en tabell med fler \u00e4n {$cells} celler.","row_limit":"Du kan inte ange fler \u00e4n {$rows} rader.","col_limit":"Du kan inte ange fler \u00e4n {$cols} kolumner.",colgroup:"Kolumngrupp",rowgroup:"Radgrupp",scope:"Omfattning",tfoot:"tabellfot",tbody:"tabellkropp",thead:"tabellhuvud","row_all":"Uppdatera alla rader i tabellen","row_even":"Uppdatera j\u00e4mna rader i tabellen","row_odd":"Uppdatera udda rader i tabellen","row_row":"Uppdatera nuvarande rad","cell_all":"Uppdatera alla celler i tabellen","cell_row":"Uppdatera alla celler i raden","cell_cell":"Uppdatera nuvarande cell",th:"Huvud",td:"Data",summary:"Sammanfattning",bgimage:"Bakgrundsbild",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning",style:"Stil",id:"Id","merge_cells_title":"Sammanfoga celler",bgcolor:"Bakgrundsf\u00e4rg",bordercolor:"Ramf\u00e4rg","align_bottom":"Botten","align_top":"Toppen",valign:"Vertikal justering","cell_type":"Celltyp","cell_title":"Tabellcellsinst\u00e4llningar","row_title":"Tabellradsinst\u00e4llningar","align_middle":"Mitten","align_right":"H\u00f6ger","align_left":"V\u00e4nster","align_default":"Ingen",align:"Justering",border:"Ram",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rader",cols:"Kolumner",height:"H\u00f6jd",width:"Bredd",title:"Infoga/redigera ny tabell",rowtype:"Radtyp","advanced_props":"Avancerade inst\u00e4llningar","general_props":"Generella inst\u00e4llningar","advanced_tab":"Avancerat","general_tab":"Generellt",mime:"Target MIME Type","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/si_dlg.js
new file mode 100644
index 000000000..5dcb178f5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sk_dlg.js
new file mode 100644
index 000000000..817f0e00c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.table_dlg',{"rules_border":"or\u00e1movanie okolo","rules_box":"box okolo","rules_vsides":"v\u013eavo a vpravo","rules_rhs":"vpravo","rules_lhs":"v\u013eavo","rules_hsides":"hore a dole","rules_below":"dole","rules_above":"hore","rules_void":"\u017eiadne",rules:"Vykreslenie mrie\u017eky","frame_all":"v\u0161etko","frame_cols":"st\u013apce","frame_rows":"riadky","frame_groups":"oblasti a skupiny st\u013apcov","frame_none":"\u017eiadna",frame:"Or\u00e1movanie tabu\u013eky",caption:"Nadpis tabu\u013eky","missing_scope":"Skuto\u010dne chcete pokra\u010dova\u0165 bez ur\u010denia oblasti hlavi\u010dky tejto tabu\u013eky? Bez nej m\u00f4\u017ee u niektor\u00fdch u\u017e\u00edvate\u013eov doch\u00e1dza\u0165 k ur\u010dit\u00fdm probl\u00e9mom pri inrtepret\u00e1cii a zobrazovan\u00ed d\u00e1t v tabu\u013eke.","cell_limit":"Prekro\u010dili ste maxim\u00e1lny po\u010det buniek {$cells}.","row_limit":"Prekro\u010dili ste maxim\u00e1lny po\u010det riadkov {$rows}.","col_limit":"Prekro\u010dili ste maxim\u00e1lny po\u010det st\u013apcov {$cols}.",colgroup:"Skupina st\u013apcov",rowgroup:"Skupina riadkov",scope:"Hlavi\u010dka pre",tfoot:"P\u00e4ta tabu\u013eky",tbody:"Telo tabu\u013eky",thead:"Hlavi\u010dka tabu\u013eky","row_all":"Aktualizova\u0165 v\u0161etky riadky tabu\u013eky","row_even":"Aktualizova\u0165 p\u00e1rne riadky tabu\u013eky","row_odd":"Aktualizova\u0165 nep\u00e1rne riadky tabu\u013eky","row_row":"Aktualizova\u0165 aktu\u00e1lny riadok","cell_all":"Aktualizova\u0165 v\u0161etky bunky v tabu\u013eke","cell_row":"Aktualizova\u0165 v\u0161etky bunky v riadku","cell_cell":"Aktualizova\u0165 aktu\u00e1lnu bunku",th:"Hlavi\u010dka",td:"D\u00e1ta",summary:"Obsah tabu\u013eky",bgimage:"Obr\u00e1zok pozadia",rtl:"Sprava do\u013eava",ltr:"Z\u013eava doprava",mime:"MIME typ cie\u013ea",langcode:"K\u00f3d jazyka",langdir:"Smer textu",style:"\u0160t\u00fdl",id:"ID","merge_cells_title":"Zl\u00fa\u010di\u0165 bunky",bgcolor:"Farba pozadia",bordercolor:"Farba or\u00e1movania","align_bottom":"Dolu","align_top":"Hore",valign:"Vertik\u00e1lne zarovnanie","cell_type":"Typ bunky","cell_title":"Vlastnosti bunky","row_title":"Vlastnosti riadkov","align_middle":"Na stred","align_right":"Vpravo","align_left":"V\u013eavo","align_default":"Predvolen\u00e9",align:"Zarovnanie",border:"Or\u00e1movanie",cellpadding:"Odsadenie obsahu",cellspacing:"Rozstup buniek",rows:"Riadky",cols:"St\u013apce",height:"V\u00fd\u0161ka",width:"\u0160\u00edrka",title:"Vlo\u017ei\u0165/Upravi\u0165 tabu\u013eku",rowtype:"Typ riadku","advanced_props":"Roz\u0161\u00edren\u00e9 parametre","general_props":"Obecn\u00e9 parametre","advanced_tab":"Roz\u0161\u00edren\u00e9","general_tab":"Obecn\u00e9","cell_col":"Aktualizova\u0165 v\u0161etky bunky v st\u013apci"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sl_dlg.js
new file mode 100644
index 000000000..52e1efe7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.table_dlg',{"rules_border":"obroba","rules_box":"\u0161katla","rules_vsides":"n-strani","rules_rhs":"d-strani","rules_lhs":"l-strani","rules_hsides":"v-strani","rules_below":"pod","rules_above":"nad","rules_void":"prazno",rules:"Pravila","frame_all":"vse","frame_cols":"stolpci","frame_rows":"vrstice","frame_groups":"skupine","frame_none":"brez",frame:"Okvir",caption:"Opis tabele","missing_scope":"Ste prepri\u010dani, da \u017eelite nadaljevati brez dolo\u010denega dosega? Brez dosega je razumevanje tabele lahko ote\u017eeno ljudem s slab\u0161o zaznavo!","cell_limit":"Presegli ste dovoljeno \u0161tevilo celic: {$cells}.","row_limit":"Presegli ste dovoljeno \u0161tevilo vrstic: {$rows}.","col_limit":"Presegli ste dovoljeno \u0161tevilo stolpcev: {$cols}.",colgroup:"Skup. stolp.",rowgroup:"Skup. vrst.",scope:"Doseg",tfoot:"Noga tabele",tbody:"Telo tabele",thead:"Glava tabele","row_all":"Posodobi vse vrstice","row_even":"Posodobi sode vrstice","row_odd":"Posodobi lihe vrstice","row_row":"Posodobi trenutno vrstico","cell_all":"Posodobi vse celice tabele","cell_row":"Posodobi vse celice vrstice","cell_cell":"Posodobi trenutno celico",th:"Glava",td:"Podatek",summary:"Povzetek",bgimage:"Slika ozadja",rtl:"Od desne proti levi",ltr:"Od leve proti desni",mime:"Ciljni tip MIME",langcode:"Koda jezika",langdir:"Smer pisave",style:"Slog",id:"Oznaka","merge_cells_title":"Spoji celice",bgcolor:"Barva ozadja",bordercolor:"Barva obrobe","align_bottom":"Dno","align_top":"Vrh",valign:"Navpi\u010dna poravnava","cell_type":"Tip celice","cell_title":"Lastnosti celice","row_title":"Lastnosti vrstice","align_middle":"Sredina","align_right":"Desno","align_left":"Levo","align_default":"Privzeto",align:"Poravnava",border:"Obroba",cellpadding:"Podlaganje celic",cellspacing:"Razmik celic",rows:"Vrstic",cols:"Stolpcev",height:"Vi\u0161ina",width:"\u0160irina",title:"Vstavi/posodobi tabelo",rowtype:"Vrstica v tabeli","advanced_props":"Napredne lastnosti","general_props":"Splo\u0161ne lastnosti","advanced_tab":"Napredno","general_tab":"Splo\u0161no","cell_col":"Posodobi vse celice v stolpcu"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sq_dlg.js
new file mode 100644
index 000000000..c9bd5a8e1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.table_dlg',{"rules_border":"korniz\u00eb","rules_box":"kuti","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"posht\u00eb","rules_above":"sip\u00ebr","rules_void":"zbrazur",rules:"Rregullat","frame_all":"t\u00eb gjitha","frame_cols":"kolona","frame_rows":"rreshta","frame_groups":"grupe","frame_none":"asnj\u00eb",frame:"Korniza",caption:"Krijo hap\u00ebsir\u00eb p\u00ebr titull","missing_scope":"Jeni t\u00eb sigurt q\u00eb nuk doni t\u00eb vendosni objektiv p\u00ebr k\u00ebt\u00eb qeliz\u00eb t\u00eb kok\u00ebs. Pa t\u00eb mund t\u00eb jet\u00eb e v\u00ebshtir\u00eb p\u00ebr disa p\u00ebrdorues me aft\u00ebsi t\u00eb kufizuara t\u00eb lexojn\u00eb p\u00ebrmbajtjen e tabel\u00ebs.","cell_limit":"Keni kaluar numrin maksimal t\u00eb qelizave {$cells}.","row_limit":"Keni kaluar numrin maksimal t\u00eb rreshtave: {$rows}.","col_limit":"Keni kaluar numrin maksimal t\u00eb kolonave: {$cols}.",colgroup:"Grup Kolonash",rowgroup:"Grup Rreshtash",scope:"Objektivi",tfoot:"K\u00ebmb\u00ebt e Tabel\u00ebs",tbody:"Trupin e Tabel\u00ebs",thead:"Kok\u00ebn e Tabel\u00ebs","row_all":"Rifresko t\u00eb gjitha rreshtat n\u00eb tabel\u00eb","row_even":"Rifresko rreshtat \u00e7ift","row_odd":"Rifresko rreshtat tek","row_row":"Rifresko rreshtin aktual","cell_all":"Rifresko t\u00eb gjitha qelizat","cell_row":"Rifresko t\u00eb gjitha qelizat n\u00eb rresht","cell_cell":"Rifresko qeliz\u00ebn aktuale",th:"Kok\u00eb",td:"T\u00eb dh\u00ebna",summary:"P\u00ebrmbledhja",bgimage:"Foto e fush\u00ebs",rtl:"Djathtas-Majtas",ltr:"Majtas-Djathtas",mime:"Tipi MIME i sh\u00ebnjestr\u00ebs",langcode:"Kodi i gjuh\u00ebs",langdir:"Drejtimi i gjuh\u00ebs",style:"Stili",id:"Id","merge_cells_title":"Bashko qelizat",bgcolor:"Ngjyra e fush\u00ebs",bordercolor:"Ngjyra e korniz\u00ebs","align_bottom":"Fund","align_top":"Krye",valign:"Drejtimi vertikal","cell_type":"Tipi i qeliz\u00ebs","cell_title":"Tiparet e qeliz\u00ebs","row_title":"Tiparet e rreshtit","align_middle":"Qend\u00ebr","align_right":"Djathtas","align_left":"Majtas","align_default":"Paracaktuar",align:"Drejtimi",border:"Korniza",cellpadding:"Hap\u00ebsira e br\u00ebndshme",cellspacing:"Hap\u00ebsira midis qelizave",rows:"Rreshta",cols:"Kolona",height:"Gjat\u00ebsia",width:"Gjer\u00ebsia",title:"Fut/Edito tabel\u00eb",rowtype:"Rresht n\u00eb","advanced_props":"Tipare t\u00eb avancuara","general_props":"Tipare t\u00eb p\u00ebrgjithshme","advanced_tab":"T\u00eb avancuara","general_tab":"T\u00eb p\u00ebrgjithshme","cell_col":"P\u00ebrdit\u00ebsoni t\u00eb gjitha qelizat n\u00eb kolon\u00eb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sr_dlg.js
new file mode 100644
index 000000000..1ef0d8d15
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.table_dlg',{"rules_border":"sa svih strana (border)","rules_box":"sa svih strana (box)","rules_vsides":"levo i desno","rules_rhs":"samo desno","rules_lhs":"samo levo","rules_hsides":"gore i dole","rules_below":"samo dole","rules_above":"samo gore","rules_void":"ni sa jedne strane",rules:"Unutra\u0161nje linije","frame_all":"sve","frame_cols":"izme\u0111u kolona","frame_rows":"izme\u0111u redova","frame_groups":"izme\u0111u grupa","frame_none":"ni jedna",frame:"Linije okvira",caption:"Opis tabele","missing_scope":"Da li ste sigurni da \u017eelite da nastavite bez definisanog podru\u010dja delovanja \u0107elije zaglavlja tabele. Bez toga, korisnicima sa smetnjama u razvoju mo\u017eda ne\u0107e biti razumljiv njihov sadr\u017eaj.","cell_limit":"Prema\u0161ili ste maksimalni broj \u0107elija ({$cells}).","row_limit":"Prema\u0161ili ste maksimalni broj redova ({$rows}).","col_limit":"Prema\u0161ili ste maksimalni broj kolona ({$cols}).",colgroup:"Grupa kolona",rowgroup:"Grupa redova",scope:"Podru\u010dje delovanja",tfoot:"Podno\u017eje tabele",tbody:"Sadr\u017eaj tabele",thead:"Zaglavlje tabele","row_all":"A\u017euriraj sve redove u tabeli","row_even":"A\u017euriraj parne redove u tabeli","row_odd":"A\u017euriraj neparne redove u tabeli","row_row":"A\u017euriraj teku\u0107i red","cell_all":"A\u017euriraj sve \u0107elije u tabeli","cell_row":"A\u017euriraj sve \u0107elije u redu","cell_cell":"A\u017euriraj teku\u0107u \u0107eliju",th:"Zaglavlje",td:"Podaci",summary:"Sa\u017eeti opis",bgimage:"Slika u pozadini",rtl:"Zdesna nalevo",ltr:"Sleva nadesno",mime:"Odabrani MIME tip",langcode:"Kod jezika",langdir:"Smer jezika",style:"Stil",id:"Id","merge_cells_title":"Spoj \u0107elije",bgcolor:"Boja pozadine",bordercolor:"Boja ivica","align_bottom":"Dole","align_top":"Gore",valign:"Vertikalno poravnanje","cell_type":"Vrsta \u0107elije","cell_title":"Osobine \u0107elije","row_title":"Osobine reda","align_middle":"Sredina","align_right":"Desno","align_left":"Levo","align_default":"Podrazumevano",align:"Poravnanje",border:"Ivice (debljina)",cellpadding:"Dopuna \u0107elije (cellpadding)",cellspacing:"Razmak \u0107elija (cellspacing)",rows:"Broj redova",cols:"Broj kolona",height:"Visina",width:"\u0160irina",title:"Umetni/Uredi tabelu",rowtype:"Red je u delu tabele","advanced_props":"Napredne osobine","general_props":"Osnovne osobine","advanced_tab":"Napredno","general_tab":"Osnovno","cell_col":"A\u017euriraj sve \u0107elije u kolonama"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sv_dlg.js
new file mode 100644
index 000000000..d058bcb85
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.table_dlg',{"rules_border":"kant","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"under","rules_above":"\u00f6ver","rules_void":"void",rules:"Regler","frame_all":"alla","frame_cols":"kolumner ","frame_rows":"rader","frame_groups":"grupper","frame_none":"ingen",frame:"Ram",caption:"\u00d6verskrift","missing_scope":"\u00c4r du s\u00e4ker p\u00e5 att du vill forts\u00e4tta utan att ange en omfattning, denna underl\u00e4ttar f\u00f6r icke-grafiska webbl\u00e4sare.","cell_limit":"Du kan inte skapa en tabell med fler \u00e4n {$cells} celler.","row_limit":"Du kan inte ange fler \u00e4n {$rows} rader.","col_limit":"Du kan inte ange fler \u00e4n {$cols} kolumner.",colgroup:"Kolumngrupp",rowgroup:"Radgrupp",scope:"Omfattning",tfoot:"tabellfot",tbody:"tabellkropp",thead:"tabellhuvud","row_all":"Uppdatera alla rader i tabellen","row_even":"Uppdatera j\u00e4mna rader i tabellen","row_odd":"Uppdatera udda rader i tabellen","row_row":"Uppdatera nuvarande rad","cell_all":"Uppdatera alla celler i tabellen","cell_row":"Uppdatera alla celler i raden","cell_cell":"Uppdatera nuvarande cell",th:"Huvud",td:"Data",summary:"Sammanfattning",bgimage:"Bakgrundsbild",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",mime:"Target MIME type",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning",style:"Stil",id:"Id","merge_cells_title":"Sammanfoga celler",bgcolor:"Bakgrundsf\u00e4rg",bordercolor:"Ramf\u00e4rg","align_bottom":"Botten","align_top":"Toppen",valign:"Vertikal justering","cell_type":"Celltyp","cell_title":"Tabellcellsinst\u00e4llningar","row_title":"Tabellradsinst\u00e4llningar","align_middle":"Mitten","align_right":"H\u00f6ger","align_left":"V\u00e4nster","align_default":"Standard",align:"Justering",border:"Ram",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rader",cols:"Kolumner",height:"H\u00f6jd",width:"Bredd",title:"Infoga/redigera ny tabell",rowtype:"Radtyp","advanced_props":"Avancerade inst\u00e4llningar","general_props":"Generella inst\u00e4llningar","advanced_tab":"Avancerat","general_tab":"Generellt","cell_col":"Uppdatera alla celler i kolumn"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sy_dlg.js
new file mode 100644
index 000000000..16ed93a8a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ta_dlg.js
new file mode 100644
index 000000000..5917ec35c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/te_dlg.js
new file mode 100644
index 000000000..55f99afed
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/th_dlg.js
new file mode 100644
index 000000000..e16138049
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07 image",rtl:"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22",ltr:"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32",mime:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22 MIME type",langcode:"\u0e42\u0e04\u0e4a\u0e14\u0e20\u0e32\u0e29\u0e32",langdir:"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e2d\u0e48\u0e32\u0e19",style:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"\u0e2a\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07",bordercolor:"\u0e2a\u0e35\u0e01\u0e23\u0e2d\u0e1a","align_bottom":"\u0e25\u0e48\u0e32\u0e07","align_top":"\u0e1a\u0e19",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e40\u0e0b\u0e25\u0e25\u0e4c\u0e43\u0e19\u0e32\u0e23\u0e32\u0e07","row_title":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e41\u0e16\u0e27\u0e43\u0e19\u0e15\u0e32\u0e23\u0e32\u0e07","align_middle":"\u0e01\u0e25\u0e32\u0e07","align_right":"\u0e02\u0e27\u0e32","align_left":"\u0e0b\u0e49\u0e32\u0e22","align_default":"\u0e04\u0e48\u0e32\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19",align:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e08\u0e31\u0e14\u0e27\u0e32\u0e07",border:"\u0e01\u0e23\u0e2d\u0e1a",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"\u0e41\u0e16\u0e27",cols:"\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e1e\u0e4c",height:"\u0e2a\u0e39\u0e07",width:"\u0e01\u0e27\u0e49\u0e32\u0e07",title:"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e15\u0e32\u0e23\u0e32\u0e07",rowtype:"Row in table part","advanced_props":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","general_props":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","advanced_tab":"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","general_tab":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tn_dlg.js
new file mode 100644
index 000000000..479c8b8f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tr_dlg.js
new file mode 100644
index 000000000..28020cf8b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.table_dlg',{"rules_border":"kenarl\u0131k","rules_box":"kutu","rules_vsides":"dikey kenarlar","rules_rhs":"sa\u011f yatay kenarlar","rules_lhs":"sol yatay kenarlar","rules_hsides":"yatay kenarlar","rules_below":"alt\u0131nda","rules_above":"\u00fcst\u00fcnde","rules_void":"yok",rules:"\u00c7izgiler","frame_all":"t\u00fcm\u00fc","frame_cols":"s\u00fctunlar","frame_rows":"sat\u0131rlar","frame_groups":"gruplar","frame_none":"hi\u00e7biri",frame:"\u00c7er\u00e7eve",caption:"Tablo ba\u015fl\u0131\u011f\u0131","missing_scope":"Tablo ba\u015fl\u0131k h\u00fccresi i\u00e7in bir kapsam belirlemeden devam etmek istedi\u011finize emin misiniz? Bu de\u011fer olmadan, engelli kullan\u0131c\u0131lar tabloda g\u00f6sterilen verileri ve i\u00e7eri\u011fi anlamas\u0131 zordur.","cell_limit":"Maksimum h\u00fccre say\u0131s\u0131 ($cells) a\u015f\u0131ld\u0131.","row_limit":"Maksimum sat\u0131r say\u0131s\u0131 ($rows) a\u015f\u0131ld\u0131.","col_limit":"Maksimum s\u00fctun say\u0131s\u0131 ($cols) a\u015f\u0131ld\u0131.",colgroup:"S\u00fctun Grubu",rowgroup:"Sat\u0131r Grubu",scope:"Kapsam",tfoot:"Tablo Alt\u0131",tbody:"Tablo G\u00f6vdesi",thead:"Tablo Ba\u015fl\u0131\u011f\u0131","row_all":"Tablodaki t\u00fcm sat\u0131rlar\u0131 g\u00fcncelle","row_even":"Tablodaki \u00e7ift nolu sat\u0131rlar\u0131 g\u00fcncelle","row_odd":"Tablodaki tek nolu sat\u0131rlar\u0131 g\u00fcncelle","row_row":"Se\u00e7ili sat\u0131r\u0131 g\u00fcncelle","cell_all":"Tablodaki t\u00fcm h\u00fccreleri g\u00fcncelle","cell_row":"Sat\u0131rdaki t\u00fcm h\u00fccreleri g\u00fcncelle","cell_cell":"Se\u00e7ili h\u00fccreleri g\u00fcncelle",th:"Ba\u015fl\u0131k",td:"Veri",summary:"\u00d6zet",bgimage:"Arkaplan resmi",rtl:"Soldan sa\u011fa",ltr:"Sa\u011fdan sola",mime:"Hedef MIME tipi",langcode:"Dil kodu",langdir:"Dil y\u00f6n\u00fc",style:"Stil",id:"Id","merge_cells_title":"Tablo h\u00fccrelerini birle\u015ftir",bgcolor:"Arkaplan rengi",bordercolor:"Kenarl\u0131k rengi","align_bottom":"Alt","align_top":"\u00dcst",valign:"Dikey hizalama","cell_type":"H\u00fccre tipi","cell_title":"Tablo h\u00fccre \u00f6zellikleri","row_title":"Tablo sat\u0131r \u00f6zellikleri","align_middle":"Orta","align_right":"Sa\u011f","align_left":"Sol","align_default":"Varsay\u0131lan",align:"Hizalama",border:"Kenarl\u0131k",cellpadding:"H\u00fccre d\u0131\u015f\u0131 bo\u015flu\u011fu",cellspacing:"H\u00fccre i\u00e7i bo\u015flu\u011fu",rows:"Sat\u0131rlar",cols:"S\u00fctunlar",height:"Y\u00fckseklik",width:"Geni\u015flik",title:"Tablo Ekle/D\u00fczenle",rowtype:"Tablo b\u00f6l\u00fcm\u00fcndeki sat\u0131r","advanced_props":"Geli\u015fmi\u015f \u00f6zellikler","general_props":"Genel \u00f6zellikler","advanced_tab":"Geli\u015fmi\u015f","general_tab":"Genel","cell_col":"S\u00fctundaki b\u00fct\u00fcn h\u00fccreleri g\u00fcncelle"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tt_dlg.js
new file mode 100644
index 000000000..880f27fc9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.table_dlg',{"rules_border":"\u908a\u6846","rules_box":"\u76d2","rules_vsides":"\u5782\u76f4\u5927\u5c0f","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"\u6c34\u5e73\u5927\u5c0f","rules_below":"\u4e4b\u4e0b","rules_above":"\u4e4b\u4e0a","rules_void":"\u7a7a",rules:"\u5c3a\u898f","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u7d44","frame_none":"\u7121",frame:"\u908a\u6846",caption:"\u8868\u683c\u6a19\u984c","missing_scope":"\u60a8\u78ba\u5b9a\u4e0d\u6307\u5b9a\u8868\u982d\u5132\u5b58\u683c\u7684\u7bc4\u570d\u55ce\uff1f\u5982\u679c\u4e0d\u6307\u5b9a\uff0c\u90e8\u5206\u4f7f\u7528\u8005\u5c07\u5f88\u96e3\u67e5\u770b\u8868\u683c\u5167\u5bb9","cell_limit":"\u5df2\u8d85\u904e\u9650\u5236\uff0c\u6700\u591a\u7232{$cells} \u5132\u5b58\u683c\u3002","row_limit":"\u5df2\u8d85\u904e\u9650\u5236\uff0c\u6700\u591a\u7232 {$rows} \u884c\u3002","col_limit":"\u5df2\u8d85\u904e\u9650\u5236\uff0c\u6700\u591a\u7232 {$cols} \u5217\u3002",colgroup:"\u5217\u7d44",rowgroup:"\u884c\u7d44",scope:"\u7bc4\u570d",tfoot:"\u8868\u8173",tbody:"\u8868\u9ad4",thead:"\u8868\u982d","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u5168\u90e8\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6578\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6578\u884c","row_row":"\u66f4\u65b0\u6240\u5728\u884c","cell_all":"\u66f4\u65b0\u5168\u90e8\u5132\u5b58\u683c","cell_row":"\u66f4\u65b0\u7576\u524d\u884c\u7684\u5132\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u7684\u5132\u5b58\u683c",th:"\u8868\u982d",td:"\u8868\u683c",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u5716\u7247",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",mime:"\u76ee\u6a19 MIME \u985e\u578b",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411",style:"\u6a23\u5f0f",id:"Id","merge_cells_title":"\u5408\u4f75\u5132\u5b58\u683c",bgcolor:"\u80cc\u666f\u9854\u8272",bordercolor:"\u908a\u6846\u9854\u8272","align_bottom":"\u5e95\u90e8","align_top":"\u9802\u90e8",valign:"\u5782\u76f4\u5c0d\u9f4a\u65b9\u5f0f","cell_type":"\u5132\u5b58\u683c \u985e\u5225","cell_title":"\u5132\u5b58\u683c \u5c6c\u6027","row_title":"\u884c \u5c6c\u6027","align_middle":"\u7f6e\u4e2d","align_right":"\u5c45\u53f3","align_left":"\u5c45\u5de6","align_default":"\u9810\u8a2d",align:"\u5c0d\u9f4a\u65b9\u5f0f",border:"\u908a\u6846",cellpadding:"\u5132\u5b58\u683c\u5167\u8ddd",cellspacing:"\u5132\u5b58\u683c\u9593\u8ddd",rows:"\u884c\u6578",cols:"\u5217\u6578",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",title:"\u63d2\u5165/\u7de8\u8f2f \u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9032\u968e\u5c6c\u6027","general_props":"\u57fa\u672c \u5c6c\u6027","advanced_tab":"\u9032\u968e","general_tab":"\u57fa\u672c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tw_dlg.js
new file mode 100644
index 000000000..12c3c448e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.table_dlg',{"rules_border":"\u5916\u6846","rules_box":"\u76d2\u578b","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u908a","rules_lhs":"\u5de6\u908a","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u898f\u5247","frame_all":"\u5168\u90e8","frame_cols":"\u6b04","frame_rows":"\u884c","frame_groups":"\u7fa4\u7d44","frame_none":"\u7121",frame:"\u6846\u67b6",caption:"\u8868\u683c\u6a19\u984c","missing_scope":"\u60a8\u78ba\u5b9a\u4e0d\u6307\u5b9a\u8868\u683c\u982d\u90e8\u5132\u5b58\u683c\u4e00\u500b\u7bc4\u570d\u55ce\uff1f\u6c92\u6709\u5b83\uff0c\u6216\u8a31\u5c0d\u90a3\u4e9b\u6709\u969c\u7919\u7684\u4f7f\u7528\u8005\u7406\u89e3\u8868\u683c\u5c55\u793a\u7684\u5167\u5bb9\u6216\u6578\u64da\u66f4\u52a0\u7684\u56f0\u96e3\u3002","cell_limit":"\u5df2\u8d85\u904e\u6700\u5927\u5132\u5b58\u683c\u9650\u5236{$cells} \u5132\u5b58\u683c\u3002","row_limit":"\u5df2\u8d85\u904e\u6700\u5927\u884c\u6578\u9650\u5236 {$rows} \u5217\u3002","col_limit":"\u5df2\u8d85\u904e\u6700\u5927\u6b04\u6578\u9650\u5236 {$cols} \u6b04\u3002",colgroup:"\u6b04\u7fa4\u7d44",rowgroup:"\u884c\u7fa4\u7d44",scope:"\u7bc4\u570d",tfoot:"\u8868\u5c3e",tbody:"\u8868\u683c\u4e3b\u9ad4",thead:"\u8868\u982d","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u6240\u6709\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6578\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6578\u884c","row_row":"\u66f4\u65b0\u76ee\u524d\u884c","cell_all":"\u66f4\u65b0\u6240\u6709\u5132\u5b58\u683c","cell_row":"\u66f4\u65b0\u76ee\u524d\u884c\u7684\u5132\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u5132\u5b58\u683c",th:"\u8868\u982d",td:"\u8cc7\u6599",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u5716\u7247",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",mime:"MIME \u985e\u578b",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411",style:"\u6a23\u5f0f",id:"ID","merge_cells_title":"\u5408\u4f75\u5132\u5b58\u683c",bgcolor:"\u80cc\u666f\u984f\u8272",bordercolor:"\u908a\u6846\u984f\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u9760\u4e0a",valign:"\u5782\u76f4\u5c0d\u9f4a","cell_type":"\u5132\u5b58\u683c\u985e\u578b","cell_title":"\u5132\u5b58\u683c\u6a19\u984c","row_title":"\u884c\u5c6c\u6027","align_middle":"\u7f6e\u4e2d\u5c0d\u9f4a","align_right":"\u9760\u53f3\u5c0d\u9f4a","align_left":"\u9760\u5de6\u5c0d\u9f4a","align_default":"\u9810\u8a2d",align:"\u5c0d\u9f4a\u65b9\u5f0f",border:"\u908a\u6846",cellpadding:"\u5132\u5b58\u683c\u908a\u8ddd",cellspacing:"\u5132\u5b58\u683c\u9593\u8ddd",rows:"\u884c\u6578",cols:"\u6b04\u6578",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",title:"\u63d2\u5165/\u7de8\u8f2f\u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9032\u968e\u5c6c\u6027","general_props":"\u4e00\u822c\u5c6c\u6027","advanced_tab":"\u9032\u968e","general_tab":"\u4e00\u822c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/uk_dlg.js
new file mode 100644
index 000000000..396cbb621
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.table_dlg',{"rules_border":"\u0440\u0430\u043c\u043a\u0430","rules_box":"\u0431\u043e\u043a\u0441","rules_vsides":"v-\u0441\u0442\u043e\u0440\u043e\u043d\u0438","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"h-\u0441\u0442\u043e\u0440\u043e\u043d\u0438","rules_below":"\u0437\u043d\u0438\u0437\u0443","rules_above":"\u0437\u0432\u0435\u0440\u0445\u0443","rules_void":"\u043f\u0443\u0441\u0442\u043e",rules:"\u041f\u0440\u0430\u0432\u0438\u043b\u0430","frame_all":"\u0432\u0441\u0456","frame_cols":"\u0441\u0442\u043e\u0432\u043f\u0446\u0456","frame_rows":"\u0440\u044f\u0434\u043a\u0438","frame_groups":"\u0433\u0440\u0443\u043f\u0438","frame_none":"\u043d\u0456\u044f\u043a\u0438\u0439",frame:"\u0424\u0440\u0435\u0439\u043c",caption:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","missing_scope":"\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438 \u043d\u0435 \u0432\u043a\u0430\u0437\u0430\u0432\u0448\u0438 \u043c\u0435\u0436\u0456 \u0434\u043b\u044f \u0446\u0456\u0454\u0457 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443. \u0411\u0435\u0437 \u0446\u044c\u043e\u0433\u043e \u0434\u0435\u044f\u043a\u0438\u043c \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u043c \u0431\u0443\u0434\u0435 \u0432\u0430\u0436\u043a\u043e \u0437\u0440\u043e\u0437\u0443\u043c\u0456\u0442\u0438 \u0437\u043c\u0456\u0441\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0456.","cell_limit":"\u0412\u0438 \u043f\u0435\u0440\u0435\u0432\u0438\u0449\u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043a\u043e\u043c\u0456\u0440\u043e\u043a: {$cells}.","row_limit":"\u0412\u0438 \u043f\u0435\u0440\u0435\u0432\u0438\u0449\u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0440\u044f\u0434\u043a\u0456\u0432: {$rows}.","col_limit":"\u0412\u0438 \u043f\u0435\u0440\u0435\u0432\u0438\u0449\u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432: {$cols}.",colgroup:"\u0413\u0440\u0443\u043f\u0430 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432",rowgroup:"\u0413\u0440\u0443\u043f\u0430 \u043a\u043e\u043c\u0456\u0440\u043e\u043a",scope:"\u0420\u043e\u0437\u043c\u0430\u0445",tfoot:"\u041d\u0438\u0436\u043d\u044f \u0447\u0430\u0441\u0442\u0438\u043d\u0430",tbody:"\u0422\u0456\u043b\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0456",thead:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_all":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u0440\u044f\u0434\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_even":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u0430\u0440\u043d\u0456 \u0440\u044f\u0434\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_odd":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043d\u0435\u043f\u0430\u0440\u043d\u0456 \u0440\u044f\u0434\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446","row_row":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u043e\u0442\u043e\u0447\u043d\u0438\u0439 \u0440\u044f\u0434\u043e\u043a","cell_all":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","cell_row":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0432 \u0440\u044f\u0434\u043a\u0443","cell_cell":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u043e\u0442\u043e\u0447\u043d\u0443 \u043a\u043e\u043c\u0456\u0440\u043a\u0443",th:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",td:"\u0414\u0430\u043d\u043d\u0456",summary:"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",bgimage:"\u0424\u043e\u043d\u043e\u0432\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",mime:"MIME-\u0442\u0438\u043f \u0446\u0456\u043b\u0456",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c \u043c\u043e\u0432\u0438",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440","merge_cells_title":"\u041e\u0431\'\u0454\u0434\u043d\u0430\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438",bgcolor:"\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443",bordercolor:"\u041a\u043e\u043b\u0456\u0440 \u0433\u0440\u0430\u043d\u0438\u0446\u0456","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",valign:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","cell_type":"\u0422\u0438\u043f \u043a\u043e\u043c\u0456\u0440\u043a\u0438","cell_title":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_title":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0440\u044f\u0434\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_default":"\u0417\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0430\u043d\u043d\u044f\u043c",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",border:"\u0420\u0430\u043c\u043a\u0430",cellpadding:"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438 \u0443 \u043a\u043e\u043c\u0456\u0440\u043a\u0430\u0445",cellspacing:"\u0412\u0456\u0434\u0441\u0442\u0430\u043d\u044c \u043c\u0456\u0436 \u043a\u043e\u043c\u0456\u0440\u043a\u0430\u043c\u0438",rows:"\u0420\u044f\u0434\u043a\u0438",cols:"\u0421\u0442\u043e\u0432\u043f\u0446\u0456",height:"\u0412\u0438\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u0414\u043e\u0434\u0430\u0442\u0438/\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e",rowtype:"\u0420\u044f\u0434\u043e\u043a \u0432 \u0447\u0430\u0441\u0442\u0438\u043d\u0456 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","advanced_props":"\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","general_props":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","advanced_tab":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","general_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","cell_col":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u043a\u043b\u0456\u0442\u0438\u043d\u043a\u0438 \u0432 \u043a\u043e\u043b\u043e\u043d\u0446\u0456"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ur_dlg.js
new file mode 100644
index 000000000..ec2d0c947
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/vi_dlg.js
new file mode 100644
index 000000000..64318f607
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.table_dlg',{"rules_border":"vi\u1ec1n","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"d\u01b0\u1edbi","rules_above":"tr\u00ean","rules_void":"tr\u1ed1ng kh\u00f4ng",rules:"Th\u01b0\u1edbc","frame_all":"t\u1ea5t","frame_cols":"c\u1ed9t","frame_rows":"h\u00e0ng","frame_groups":"nh\u00f3m","frame_none":"kh\u00f4ng",frame:"Khung",caption:"Ch\u00fa t\u00edch b\u1ea3ng","missing_scope":"Ti\u1ebfp t\u1ee5c v\u1edbi \u0111\u01b0\u1eddng d\u1eabn kh\u00f4ng t\u1ed3n t\u1ea1i ?","cell_limit":"B\u1ea1n \u0111\u00e3 v\u01b0\u1ee3t qu\u00e1 s\u1ed1 t\u1ed1i \u0111a \u00f4 c\u1ee7a {$cells}.","row_limit":"B\u1ea1n \u0111\u00e3 v\u01b0\u1ee3t qu\u00e1 s\u1ed1 t\u1ed1i \u0111a h\u00e0ng c\u1ee7a {$rows}.","col_limit":"B\u1ea1n \u0111\u00e3 v\u01b0\u1ee3t qu\u00e1 s\u1ed1 t\u1ed1i \u0111a c\u1ed9t c\u1ee7a {$cols}.",colgroup:"Nh\u00f3m c\u1ed9t",rowgroup:"Nh\u00f3m h\u00e0ng",scope:"Ph\u1ea1m vi",tfoot:"Ch\u00e2n b\u1ea3ng",tbody:"Th\u00e2n b\u1ea3n",thead:"\u0110\u1ea7u b\u1ea3ng","row_all":"C\u1eadp nh\u1eadt t\u1ea5t h\u00e0ng trong b\u1ea3ng","row_even":"C\u1eadp nh\u1eadt h\u00e0ng ch\u1eb5n trong b\u1ea3ng","row_odd":"C\u1eadp nh\u1eadt h\u00e0ng l\u1ebb trong b\u1ea3ng","row_row":"C\u1eadp nh\u1eadt h\u00e0ng hi\u1ec7n th\u1eddi","cell_all":"C\u1eadp nh\u1ea5t t\u1ea5t c\u00e1c \u00f4 trong b\u1ea3ng","cell_row":"C\u1eadp nh\u1ea5t t\u1ea5t c\u00e1c \u00f4 trong h\u00e0ng","cell_cell":"C\u1eadp nh\u1eadt \u00f4 hi\u1ec7n th\u1eddi",th:"\u0110\u1ea7u \u0111\u1ec1",td:"D\u1eef li\u1ec7u",summary:"T\u00f3m l\u01b0\u1ee3c",bgimage:"\u1ea2nh n\u1ec1n",rtl:"Ph\u1ea3i qua tr\u00e1i",ltr:"Tr\u00e1i qua ph\u1ea3i",mime:"Ki\u1ec3u MIME \u0111\u00edch",langcode:"M\u00e3 ng\u00f4n ng\u1eef",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef",style:"Ki\u1ec3u d\u00e1ng",id:"Id","merge_cells_title":"K\u1ebft h\u1ee3p c\u00e1c \u00f4 c\u1ee7a b\u1ea3ng",bgcolor:"M\u00e0u n\u1ec1n",bordercolor:"M\u00e0u vi\u1ec1n","align_bottom":"D\u01b0\u1edbi","align_top":"Tr\u00ean",valign:"Canh l\u1ec1 d\u1ecdc","cell_type":"Lo\u1ea1i \u00f4","cell_title":"Thu\u1ed9c t\u00ednh \u00f4","row_title":"Thu\u1ed9c t\u00ednh h\u00e0ng","align_middle":"Gi\u1eefa","align_right":"Ph\u1ea3i","align_left":"Tr\u00e1i","align_default":"M\u1eb7c \u0111\u1ecbnh",align:"Canh l\u1ec1",border:"Vi\u1ec1n",cellpadding:"Kho\u1ea3ng l\u00f3t \u00f4",cellspacing:"Kho\u1ea3ng c\u00e1ch \u00f4",rows:"H\u00e0ng",cols:"C\u1ed9t",height:"Chi\u1ec1u cao",width:"Chi\u1ec1u r\u1ed9ng",title:"Ch\u00e8n/S\u1eeda b\u1ea3ng",rowtype:"H\u00e0ng trong t\u1eebng ph\u1ea7n b\u1ea3ng","advanced_props":"Thu\u1ed9c t\u00ednh n\u00e2ng cao","general_props":"Thu\u1ed9c t\u00ednh chung","advanced_tab":"N\u00e2ng cao","general_tab":"Chung","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..4fe30035f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.table_dlg',{"rules_border":"\u8fb9\u6846","rules_box":"\u6846","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u8fb9","rules_lhs":"\u5de6\u8fb9","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u89c4\u5219","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u5206\u7ec4","frame_none":"\u65e0",frame:"\u6846\u67b6",caption:"\u683c\u6807\u9898","missing_scope":"\u60a8\u6ca1\u6709\u6307\u5b9a\u8868\u683c\u7684\u6807\u9898\u5355\u5143\uff0c\u5982\u679c\u4e0d\u8bbe\u7f6e\uff0c\u53ef\u80fd\u4f1a\u4f7f\u7528\u6237\u96be\u4ee5\u7406\u89e3\u60a8\u7684\u8868\u683c\u7684\u5185\u5bb9\u3002\u60a8\u8981\u7ee7\u7eed\u5417\uff1f","cell_limit":"\u5df2\u7ecf\u8d85\u51fa\u6700\u5927\u5355\u5143\u683c\u6570{$cells}\u3002","row_limit":"\u5df2\u7ecf\u8d85\u51fa\u6700\u5927\u884c\u6570{$rows}\u3002","col_limit":"\u5df2\u7ecf\u8d85\u51fa\u6700\u5927\u5217\u6570{$cols}\u3002",colgroup:"\u5217\u5206\u7ec4",rowgroup:"\u884c\u5206\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u5c3e",tbody:"\u8868\u683c\u4e3b\u4f53",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u6240\u6709\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u5f53\u524d\u884c","cell_all":"\u66f4\u65b0\u6240\u6709\u5355\u5143\u683c","cell_row":"\u66f4\u65b0\u5f53\u524d\u884c\u7684\u5355\u5143\u683c","cell_cell":"\u66f4\u65b0\u5f53\u524d\u5355\u5143\u683c",th:"\u8868\u5934",td:"\u5185\u5bb9",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",mime:"\u76ee\u6807MIME\u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"ID","merge_cells_title":"\u5408\u5e76\u5355\u5143\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u9760\u4e0a",valign:"\u5782\u76f4\u5bf9\u9f50","cell_type":"\u5355\u5143\u683c\u7c7b\u578b","cell_title":"\u5355\u5143\u683c\u5c5e\u6027","row_title":"\u884c\u5c5e\u6027","align_middle":"\u5c45\u4e2d","align_right":"\u53f3\u5bf9\u9f50","align_left":"\u5de6\u5bf9\u9f50","align_default":"\u9ed8\u8ba4",align:"\u5bf9\u9f50",border:"\u8fb9\u6846",cellpadding:"\u5355\u5143\u683c\u8fb9\u8ddd",cellspacing:"\u5355\u5143\u683c\u95f4\u8ddd",rows:"\u884c\u6570",cols:"\u5217\u6570",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u7f16\u8f91 \u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","general_props":"\u666e\u901a\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u666e\u901a","cell_col":"\u66f4\u65b0\u8be5\u5217\u5168\u90e8\u5355\u5143\u683c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..7a89be3f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.table_dlg',{"rules_border":"\u908a\u6846","rules_box":"\u6846","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u908a","rules_lhs":"\u5de6\u908a","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b\u65b9","rules_above":"\u4e0a\u65b9","rules_void":"\u7121\u6548",rules:"\u898f\u5247","frame_all":"\u5168\u90e8","frame_cols":"\u6b04","frame_rows":"\u5217","frame_groups":"\u7fa4\u7d44","frame_none":"\u7121",frame:"\u6846\u67b6",caption:"\u8868\u683c\u8aaa\u660e","missing_scope":"\u60a8\u8868\u683c\u7b2c\u4e00\u884c\u7684\u8868\u683c\u6c92\u6709\u8a2d\u5b9a\u6a19\u984c\u5132\u5b58\u683c (TH)\uff0c\u9019\u53ef\u80fd\u4e0d\u5229\u65bc\u7db2\u9801 SEO \u8207 \u7121\u969c\u7919\u7a7a\u9593\u898f\u7bc4\uff0c\u60a8\u78ba\u5b9a\u8981\u5ffd\u7565\u9019\u500b\u55ce\uff1f","cell_limit":"\u8868\u683c\u5167\u7684\u683c\u5b57\u592a\u591a\uff0c\u529f\u80fd\u7121\u6cd5\u904b\u4f5c\uff0c\u5df2\u7d93\u8d85\u904e {$cells} \u500b\u3002","row_limit":"\u8868\u683c\u5167\u7684\u5217\u6578\u592a\u591a\uff0c\u529f\u80fd\u7121\u6cd5\u904b\u4f5c\uff0c\u5df2\u7d93\u8d85\u904e {$rows} \u5217\u3002","col_limit":"\u8868\u683c\u5167\u7684\u6b04\u4f4d\u592a\u591a\uff0c\u529f\u80fd\u7121\u6cd5\u904b\u4f5c\uff0c\u5df2\u7d93\u8d85\u904e {$cols} \u6b04\u3002",colgroup:"\u6b04\u4f4d\u7fa4\u7d44",rowgroup:"\u5217\u7fa4\u7d44",scope:"\u5957\u7528\u7bc4\u570d",tfoot:"\u8868\u683c\u5c3e\u90e8",tbody:"\u8868\u683c\u4e3b\u9ad4",thead:"\u8868\u683c\u4e0a\u982d","row_all":"\u66f4\u65b0\u5168\u90e8\u7684\u5217","row_even":"\u53ea\u66f4\u65b0\u8868\u683c\u4e0a\u7684\u5076\u6578\u5217","row_odd":"\u53ea\u66f4\u65b0\u8868\u683c\u4e0a\u7684\u5947\u6578\u5217","row_row":"\u53ea\u66f4\u65b0\u76ee\u524d\u9019\u5217","cell_all":"\u66f4\u65b0\u5168\u90e8\u5132\u5b58\u683c","cell_row":"\u66f4\u65b0\u76ee\u524d\u9019\u5217\u4e0a\u7684\u683c\u5b50","cell_cell":"\u66f4\u65b0\u76ee\u524d\u7684\u683c\u5b50\u5c31\u597d",th:"\u8868\u982d",td:"\u8cc7\u6599",summary:"\u8868\u683c\u6458\u8981",bgimage:"\u80cc\u666f\u5716",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",mime:"\u76ee\u6a19 MIME \u985e\u578b",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u66f8\u5beb\u65b9\u5411",style:"\u6a23\u5f0f",id:"\u8868\u683c\u7684 ID","merge_cells_title":"\u5408\u4f75\u5132\u5b58\u683c",bgcolor:"\u80cc\u666f\u984f\u8272",bordercolor:"\u908a\u6846\u7684\u984f\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u9760\u4e0a",valign:"\u5782\u76f4\u5c0d\u9f4a","cell_type":"\u5132\u5b58\u683c\u7684\u5f62\u5f0f","cell_title":"\u8868\u683c\u683c\u5b50\u7684\u5c6c\u6027","row_title":"\u8868\u683c\u5217\u7684\u5c6c\u6027","align_middle":"\u4e2d\u9593","align_right":"\u53f3\u908a","align_left":"\u5de6\u908a","align_default":"\u9810\u8a2d",align:"\u5c0d\u9f4a\u65b9\u5f0f",border:"\u908a\u6846",cellpadding:"\u683c\u5b50\u7684\u5167\u8ddd",cellspacing:"\u683c\u5b50\u9593\u7684\u8ddd\u96e2",rows:"\u5217",cols:"\u6b04",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",title:"\u52a0\u5165 / \u8a2d\u5b9a\u8868\u683c",rowtype:"\u76ee\u524d\u4f4d\u7f6e\u5217\u7684\u4f4d\u7f6e","advanced_props":"\u66f4\u591a\u5c6c\u6027","general_props":"\u5c6c\u6027\u8a2d\u5b9a","advanced_tab":"\u66f4\u591a","general_tab":"\u4e00\u822c","cell_col":"\u66f4\u65b0\u9019\u6b04\u4e0b\u7684\u6240\u6709\u683c\u5b50"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh_dlg.js
new file mode 100644
index 000000000..3d786d236
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.table_dlg',{"rules_border":"\u908a\u6846","rules_box":"\u76d2\u578b","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u908a","rules_lhs":"\u5de6\u908a","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u898f\u5247","frame_all":"\u5168\u90e8","frame_cols":"\u6b04\u8868\u982d","frame_rows":"\u5217\u8868\u982d","frame_groups":"\u7fa4\u7d44","frame_none":"\u7121",frame:"\u6846\u67b6",caption:"\u8868\u683c\u6a19\u984c","missing_scope":"\u60a8\u78ba\u5b9a\u4e0d\u70ba\u8868\u982d\u5132\u5b58\u683c\u6307\u5b9a\u4e00\u500b\u7bc4\u570d\u55ce? \u5982\u679c\u4e0d\u6307\u5b9a, \u5c0d\u4f7f\u7528\u975e\u53ef\u8996\u700f\u89bd\u5668\u7684\u4f7f\u7528\u8005\u5c07\u66f4\u96e3\u95b1\u8b80\u6216\u7406\u89e3\u8868\u683c\u5167\u5bb9.","cell_limit":"\u5df2\u9054\u5230\u6700\u591a {$cells} \u500b\u5132\u5b58\u683c\u7684\u4e0a\u9650.","row_limit":"\u5df2\u9054\u5230\u6700\u591a {$rows} \u5217\u5132\u5b58\u683c\u7684\u4e0a\u9650.","col_limit":"\u5df2\u9054\u5230\u6700\u591a {$cols} \u6b04\u5132\u5b58\u683c\u7684\u4e0a\u9650.",colgroup:"\u6b04\u7fa4\u7d44\u8868\u982d",rowgroup:"\u5217\u7fa4\u7d44\u8868\u982d",scope:"\u8868\u982d\u7bc4\u570d",tfoot:"\u8868\u5c3e",tbody:"\u8868\u683c\u4e3b\u9ad4",thead:"\u8868\u982d","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u6240\u6709\u5217","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6578\u6b04\u5217","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6578\u5217","row_row":"\u66f4\u65b0\u76ee\u524d\u7684\u5217","cell_all":"\u66f4\u65b0\u8868\u683c\u6240\u6709\u7684\u5132\u5b58\u683c","cell_row":"\u66f4\u65b0\u5217\u6240\u6709\u5217\u5132\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u7684\u5132\u5b58\u683c",th:"\u8868\u982d",td:"\u8868\u683c\u5167\u5bb9",summary:"\u8868\u683c\u6458\u8981",bgimage:"\u80cc\u666f\u5716\u7247",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",mime:"\u76ee\u6a19 MIME \u985e\u578b",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411",style:"\u6a23\u5f0f",id:"ID","merge_cells_title":"\u5408\u4f75\u5132\u5b58\u683c",bgcolor:"\u80cc\u666f\u984f\u8272",bordercolor:"\u908a\u6846\u984f\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u8003\u4e0a",valign:"\u5782\u76f4\u5c0d\u9f4a","cell_type":"\u5132\u5b58\u683c\u985e\u578b","cell_title":"\u5132\u5b58\u683c\u5c6c\u6027","row_title":"\u8868\u683c\u7684\u5217\u5c6c\u6027","align_middle":"\u7f6e\u4e2d\u5c0d\u9f4a","align_right":"\u9760\u53f3\u5c0d\u9f4a","align_left":"\u9760\u5de6\u5c0d\u9f4a","align_default":"\u9810\u8a2d",align:"\u5c0d\u9f4a\u65b9\u5411",border:"\u908a\u6846",cellpadding:"\u5132\u5b58\u683c\u908a\u8ddd",cellspacing:"\u5132\u5b58\u683c\u9593\u8ddd",rows:"\u5217\u6578",cols:"\u6b04\u6578",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",title:"\u63d2\u5165/\u7de8\u8f2f\u5132\u5b58\u683c",rowtype:"\u5217\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9032\u968e\u5c6c\u6027","general_props":"\u4e00\u822c\u5c6c\u6027","advanced_tab":"\u9032\u968e","general_tab":"\u4e00\u822c","cell_col":"\u66f4\u65b0\u6b04\u5217\u6240\u6709\u5132\u5b58\u683c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zu_dlg.js
new file mode 100644
index 000000000..ef8d68899
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.table_dlg',{"rules_border":"\u5916\u6846","rules_box":"\u76d2\u578b","rules_vsides":"\u5782\u76f4\u8fb9","rules_rhs":"\u53f3\u8fb9","rules_lhs":"\u5de6\u8fb9","rules_hsides":"\u6c34\u51c6\u8fb9","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u7ebf\u6761","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u7fa4\u7ec4","frame_none":"\u65e0",frame:"\u8fb9\u6846",caption:"\u8868\u683c\u6807\u9898","missing_scope":"\u6807\u9898\u884c\u7f3a\u5931\uff01","cell_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u50a8\u5b58\u683c\u6570\u4e3a{$cells}\u683c\u3002","row_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u884c\u6570\u4e3a{$rows}\u884c\u3002","col_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u5217\u6570\u4e3a{$cols}\u5217\u3002",colgroup:"\u5217\u7fa4\u7ec4",rowgroup:"\u884c\u7fa4\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u5c3e",tbody:"\u8868\u8eab",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u5185\u5168\u90e8\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u6240\u5728\u884c","cell_all":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5168\u90e8\u50a8\u5b58\u683c","cell_row":"\u66f4\u65b0\u6240\u5728\u884c\u7684\u5168\u90e8\u50a8\u5b58\u683c","cell_cell":"\u66f4\u65b0\u6240\u7684\u50a8\u5b58\u683c",th:"\u8868\u5934",td:"\u6570\u636e",summary:"\u6982\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",mime:"\u76ee\u6807MIME\u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"Id","merge_cells_title":"\u5408\u5e76\u50a8\u5b58\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u4e0b\u65b9","align_top":"\u4e0a\u65b9",valign:"\u6c34\u51c6\u5bf9\u9f50\u65b9\u5f0f","cell_type":"\u50a8\u5b58\u683c\u522b","cell_title":"\u50a8\u5b58\u683c\u5c5e\u6027","row_title":"\u884c\u5c5e\u6027","align_middle":"\u5c45\u4e2d","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_default":"\u9884\u8bbe",align:"\u5bf9\u9f50\u65b9\u5f0f",border:"\u8fb9\u6846",cellpadding:"\u50a8\u5b58\u683c\u7559\u767d",cellspacing:"\u50a8\u5b58\u683c\u95f4\u8ddd",rows:"\u884c\u6570",cols:"\u5217\u6570",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u7f16\u8f91\u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u4e00\u822c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm
new file mode 100644
index 000000000..d231090e7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/merge_cells.htm
@@ -0,0 +1,32 @@
+<!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>{#table_dlg.merge_cells_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/validate.js"></script>
+ <script type="text/javascript" src="js/merge_cells.js"></script>
+</head>
+<body style="margin: 8px" role="application">
+<form onsubmit="MergeCellsDialog.merge();return false;" action="#">
+ <fieldset>
+ <legend>{#table_dlg.merge_cells_title}</legend>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="3" width="100%">
+ <tr>
+ <td><label for="numcols">{#table_dlg.cols}</label>:</td>
+ <td align="right"><input type="text" id="numcols" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" aria-required="true" /></td>
+ </tr>
+ <tr>
+ <td><label for="numrows">{#table_dlg.rows}</label>:</td>
+ <td align="right"><input type="text" id="numrows" name="numrows" value="" class="number min1" style="width: 30px" aria-required="true" /></td>
+ </tr>
+ </table>
+ </fieldset>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#update}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/row.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/row.htm
new file mode 100644
index 000000000..1885401f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/row.htm
@@ -0,0 +1,158 @@
+<!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>{#table_dlg.row_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/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/validate.js"></script>
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
+ <script type="text/javascript" src="js/row.js"></script>
+ <link href="css/row.css" rel="stylesheet" type="text/css" />
+</head>
+<body id="tablerow" style="display: none" role="application">
+ <form onsubmit="updateAction();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#table_dlg.general_props}</legend>
+
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td><label for="rowtype">{#table_dlg.rowtype}</label></td>
+ <td class="col2">
+ <select id="rowtype" name="rowtype" class="mceFocus">
+ <option value="thead">{#table_dlg.thead}</option>
+ <option value="tbody">{#table_dlg.tbody}</option>
+ <option value="tfoot">{#table_dlg.tfoot}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="align">{#table_dlg.align}</label></td>
+ <td class="col2">
+ <select id="align" name="align">
+ <option value="">{#not_set}</option>
+ <option value="center">{#table_dlg.align_middle}</option>
+ <option value="left">{#table_dlg.align_left}</option>
+ <option value="right">{#table_dlg.align_right}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="valign">{#table_dlg.valign}</label></td>
+ <td class="col2">
+ <select id="valign" name="valign">
+ <option value="">{#not_set}</option>
+ <option value="top">{#table_dlg.align_top}</option>
+ <option value="middle">{#table_dlg.align_middle}</option>
+ <option value="bottom">{#table_dlg.align_bottom}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr id="styleSelectRow">
+ <td><label for="class">{#class_name}</label></td>
+ <td class="col2">
+ <select id="class" name="class" class="mceEditableSelect">
+ <option value="" selected="selected">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td><label for="height">{#table_dlg.height}</label></td>
+ <td class="col2"><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+
+ <div id="advanced_panel" class="panel">
+ <fieldset>
+ <legend>{#table_dlg.advanced_props}</legend>
+
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="column1"><label for="id">{#table_dlg.id}</label></td>
+ <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="style">{#table_dlg.style}</label></td>
+ <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
+ <td>
+ <select id="dir" name="dir" style="width: 200px">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#table_dlg.ltr}</option>
+ <option value="rtl">{#table_dlg.rtl}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td>
+ <td>
+ <input id="lang" name="lang" type="text" value="" style="width: 200px" />
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>
+ <td id="backgroundimagebrowsercontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="bgcolor" id="bgcolor_label">{#table_dlg.bgcolor}</label></td>
+ <td>
+ <span role="group" aria-labelledby="bgcolor_label">
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
+ <td id="bgcolor_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </span>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <div>
+ <select id="action" name="action">
+ <option value="row">{#table_dlg.row_row}</option>
+ <option value="odd">{#table_dlg.row_odd}</option>
+ <option value="even">{#table_dlg.row_even}</option>
+ <option value="all">{#table_dlg.row_all}</option>
+ </select>
+ </div>
+
+ <input type="submit" id="insert" name="insert" value="{#update}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+ </form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/table.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/table.htm
new file mode 100644
index 000000000..b92fa741e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/table/table.htm
@@ -0,0 +1,188 @@
+<!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>{#table_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/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/validate.js"></script>
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
+ <script type="text/javascript" src="js/table.js"></script>
+ <link href="css/table.css" rel="stylesheet" type="text/css" />
+</head>
+<body id="table" style="display: none" role="application" aria-labelledby="app_title">
+ <span style="display:none;" id="app_title">{#table_dlg.title}</span>
+ <form onsubmit="insertTable();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#table_dlg.general_props}</legend>
+ <table role="presentation" border="0" cellpadding="4" cellspacing="0" width="100%">
+ <tr>
+ <td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>
+ <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" aria-required="true" /></td>
+ <td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>
+ <td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" aria-required="true" /></td>
+ </tr>
+ <tr>
+ <td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>
+ <td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>
+ <td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>
+ <td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>
+ </tr>
+ <tr>
+ <td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>
+ <td><select id="align" name="align">
+ <option value="">{#not_set}</option>
+ <option value="center">{#table_dlg.align_middle}</option>
+ <option value="left">{#table_dlg.align_left}</option>
+ <option value="right">{#table_dlg.align_right}</option>
+ </select></td>
+ <td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>
+ <td><input id="border" name="border" type="text" value="" size="3" maxlength="5" onchange="changedBorder();" class="size" /></td>
+ </tr>
+ <tr id="width_row">
+ <td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>
+ <td><input name="width" type="text" id="width" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
+ <td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>
+ <td><input name="height" type="text" id="height" value="" size="7" maxlength="7" onchange="changedSize();" class="size" /></td>
+ </tr>
+ <tr id="styleSelectRow" >
+ <td><label id="classlabel" for="class">{#class_name}</label></td>
+ <td colspan="3" >
+ <select id="class" name="class" class="mceEditableSelect">
+ <option value="" selected="selected">{#not_set}</option>
+ </select></td>
+ </tr>
+ <tr>
+ <td class="column1" ><label for="caption">{#table_dlg.caption}</label></td>
+ <td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+
+ <div id="advanced_panel" class="panel">
+ <fieldset>
+ <legend>{#table_dlg.advanced_props}</legend>
+
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="column1"><label for="id">{#table_dlg.id}</label></td>
+ <td><input id="id" name="id" type="text" value="" class="advfield" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="summary">{#table_dlg.summary}</label></td>
+ <td><input id="summary" name="summary" type="text" value="" class="advfield" /></td>
+ </tr>
+
+ <tr>
+ <td><label for="style">{#table_dlg.style}</label></td>
+ <td><input type="text" id="style" name="style" value="" class="advfield" onchange="changedStyle();" /></td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label id="langlabel" for="lang">{#table_dlg.langcode}</label></td>
+ <td>
+ <input id="lang" name="lang" type="text" value="" class="advfield" />
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
+ <td>
+ <table role="presentation" aria-labelledby="backgroundimage_label" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="backgroundimage" name="backgroundimage" type="text" value="" class="advfield" onchange="changedBackgroundImage();" /></td>
+ <td id="backgroundimagebrowsercontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="tframe">{#table_dlg.frame}</label></td>
+ <td>
+ <select id="tframe" name="tframe" class="advfield">
+ <option value="">{#not_set}</option>
+ <option value="void">{#table_dlg.rules_void}</option>
+ <option value="above">{#table_dlg.rules_above}</option>
+ <option value="below">{#table_dlg.rules_below}</option>
+ <option value="hsides">{#table_dlg.rules_hsides}</option>
+ <option value="lhs">{#table_dlg.rules_lhs}</option>
+ <option value="rhs">{#table_dlg.rules_rhs}</option>
+ <option value="vsides">{#table_dlg.rules_vsides}</option>
+ <option value="box">{#table_dlg.rules_box}</option>
+ <option value="border">{#table_dlg.rules_border}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="rules">{#table_dlg.rules}</label></td>
+ <td>
+ <select id="rules" name="rules" class="advfield">
+ <option value="">{#not_set}</option>
+ <option value="none">{#table_dlg.frame_none}</option>
+ <option value="groups">{#table_dlg.frame_groups}</option>
+ <option value="rows">{#table_dlg.frame_rows}</option>
+ <option value="cols">{#table_dlg.frame_cols}</option>
+ <option value="all">{#table_dlg.frame_all}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
+ <td>
+ <select id="dir" name="dir" class="advfield">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#table_dlg.ltr}</option>
+ <option value="rtl">{#table_dlg.rtl}</option>
+ </select>
+ </td>
+ </tr>
+
+ <tr role="group" aria-labelledby="bordercolor_label">
+ <td class="column1"><label id="bordercolor_label" for="bordercolor">{#table_dlg.bordercolor}</label></td>
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>
+ <td id="bordercolor_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+
+ <tr role="group" aria-labelledby="bgcolor_label">
+ <td class="column1"><label id="bgcolor_label" for="bgcolor">{#table_dlg.bgcolor}</label></td>
+ <td>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="0">
+ <tr>
+ <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>
+ <td id="bgcolor_pickcontainer">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+ </form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/blank.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/blank.htm
new file mode 100644
index 000000000..ecde53fae
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/blank.htm
@@ -0,0 +1,12 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>blank_page</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+ <script type="text/javascript">
+ parent.TemplateDialog.loadCSSFiles(document);
+ </script>
+</head>
+<body id="mceTemplatePreview" class="mceContentBody">
+
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/css/template.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/css/template.css
new file mode 100644
index 000000000..2d23a4938
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/css/template.css
@@ -0,0 +1,23 @@
+#frmbody {
+ padding: 10px;
+ background-color: #FFF;
+ border: 1px solid #CCC;
+}
+
+.frmRow {
+ margin-bottom: 10px;
+}
+
+#templatesrc {
+ border: none;
+ width: 320px;
+ height: 240px;
+}
+
+.title {
+ padding-bottom: 5px;
+}
+
+.mceActionPanel {
+ padding-top: 5px;
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js
new file mode 100644
index 000000000..ebe3c27d7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js
new file mode 100644
index 000000000..9cac26991
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/editor_plugin_src.js
@@ -0,0 +1,159 @@
+/**
+ * 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() {
+ var each = tinymce.each;
+
+ tinymce.create('tinymce.plugins.TemplatePlugin', {
+ init : function(ed, url) {
+ var t = this;
+
+ t.editor = ed;
+
+ // Register commands
+ ed.addCommand('mceTemplate', function(ui) {
+ ed.windowManager.open({
+ file : url + '/template.htm',
+ width : ed.getParam('template_popup_width', 750),
+ height : ed.getParam('template_popup_height', 600),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ ed.addCommand('mceInsertTemplate', t._insertTemplate, t);
+
+ // Register buttons
+ ed.addButton('template', {title : 'template.desc', cmd : 'mceTemplate'});
+
+ ed.onPreProcess.add(function(ed, o) {
+ var dom = ed.dom;
+
+ each(dom.select('div', o.node), function(e) {
+ if (dom.hasClass(e, 'mceTmpl')) {
+ each(dom.select('*', e), function(e) {
+ if (dom.hasClass(e, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|')))
+ e.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format")));
+ });
+
+ t._replaceVals(e);
+ }
+ });
+ });
+ },
+
+ 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(ui, v) {
+ var t = this, ed = t.editor, h, el, dom = ed.dom, sel = ed.selection.getContent();
+
+ h = v.content;
+
+ each(t.editor.getParam('template_replace_values'), function(v, k) {
+ if (typeof(v) != 'function')
+ h = h.replace(new RegExp('\\{\\$' + k + '\\}', 'g'), v);
+ });
+
+ el = dom.create('div', null, h);
+
+ // Find template element within div
+ n = dom.select('.mceTmpl', el);
+ if (n && n.length > 0) {
+ el = dom.create('div', null);
+ el.appendChild(n[0].cloneNode(true));
+ }
+
+ function hasClass(n, c) {
+ return new RegExp('\\b' + c + '\\b', 'g').test(n.className);
+ };
+
+ each(dom.select('*', el), function(n) {
+ // Replace cdate
+ if (hasClass(n, ed.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|')))
+ n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_cdate_format", ed.getLang("template.cdate_format")));
+
+ // Replace mdate
+ if (hasClass(n, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|')))
+ n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format")));
+
+ // Replace selection
+ if (hasClass(n, ed.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|')))
+ n.innerHTML = sel;
+ });
+
+ t._replaceVals(el);
+
+ ed.execCommand('mceInsertContent', false, el.innerHTML);
+ ed.addVisual();
+ },
+
+ _replaceVals : function(e) {
+ var dom = this.editor.dom, vl = this.editor.getParam('template_replace_values');
+
+ each(dom.select('*', e), function(e) {
+ each(vl, function(v, k) {
+ if (dom.hasClass(e, k)) {
+ if (typeof(vl[k]) == 'function')
+ vl[k](e);
+ }
+ });
+ });
+ },
+
+ _getDateTime : function(d, fmt) {
+ if (!fmt)
+ return "";
+
+ function addZeros(value, len) {
+ var i;
+
+ value = "" + value;
+
+ if (value.length < len) {
+ for (i=0; i<(len-value.length); i++)
+ value = "0" + value;
+ }
+
+ return value;
+ }
+
+ fmt = fmt.replace("%D", "%m/%d/%y");
+ fmt = fmt.replace("%r", "%I:%M:%S %p");
+ fmt = fmt.replace("%Y", "" + d.getFullYear());
+ fmt = fmt.replace("%y", "" + d.getYear());
+ fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));
+ fmt = fmt.replace("%d", addZeros(d.getDate(), 2));
+ fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));
+ fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));
+ fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));
+ fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));
+ fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));
+ fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]);
+ fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]);
+ fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]);
+ fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]);
+ fmt = fmt.replace("%%", "%");
+
+ return fmt;
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('template', tinymce.plugins.TemplatePlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/js/template.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/js/template.js
new file mode 100644
index 000000000..bc3045d24
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/js/template.js
@@ -0,0 +1,106 @@
+tinyMCEPopup.requireLangPack();
+
+var TemplateDialog = {
+ preInit : function() {
+ var url = tinyMCEPopup.getParam("template_external_list_url");
+
+ if (url != null)
+ document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></sc'+'ript>');
+ },
+
+ init : function() {
+ var ed = tinyMCEPopup.editor, tsrc, sel, x, u;
+
+ tsrc = ed.getParam("template_templates", false);
+ sel = document.getElementById('tpath');
+
+ // Setup external template list
+ if (!tsrc && typeof(tinyMCETemplateList) != 'undefined') {
+ for (x=0, tsrc = []; x<tinyMCETemplateList.length; x++)
+ tsrc.push({title : tinyMCETemplateList[x][0], src : tinyMCETemplateList[x][1], description : tinyMCETemplateList[x][2]});
+ }
+
+ for (x=0; x<tsrc.length; x++)
+ sel.options[sel.options.length] = new Option(tsrc[x].title, tinyMCEPopup.editor.documentBaseURI.toAbsolute(tsrc[x].src));
+
+ this.resize();
+ this.tsrc = tsrc;
+ },
+
+ resize : function() {
+ var w, h, e;
+
+ if (!self.innerWidth) {
+ w = document.body.clientWidth - 50;
+ h = document.body.clientHeight - 160;
+ } else {
+ w = self.innerWidth - 50;
+ h = self.innerHeight - 170;
+ }
+
+ e = document.getElementById('templatesrc');
+
+ if (e) {
+ e.style.height = Math.abs(h) + 'px';
+ e.style.width = Math.abs(w - 5) + 'px';
+ }
+ },
+
+ loadCSSFiles : function(d) {
+ var ed = tinyMCEPopup.editor;
+
+ tinymce.each(ed.getParam("content_css", '').split(','), function(u) {
+ d.write('<link href="' + ed.documentBaseURI.toAbsolute(u) + '" rel="stylesheet" type="text/css" />');
+ });
+ },
+
+ selectTemplate : function(u, ti) {
+ var d = window.frames['templatesrc'].document, x, tsrc = this.tsrc;
+
+ if (!u)
+ return;
+
+ d.body.innerHTML = this.templateHTML = this.getFileContents(u);
+
+ for (x=0; x<tsrc.length; x++) {
+ if (tsrc[x].title == ti)
+ document.getElementById('tmpldesc').innerHTML = tsrc[x].description || '';
+ }
+ },
+
+ insert : function() {
+ tinyMCEPopup.execCommand('mceInsertTemplate', false, {
+ content : this.templateHTML,
+ selection : tinyMCEPopup.editor.selection.getContent()
+ });
+
+ tinyMCEPopup.close();
+ },
+
+ getFileContents : function(u) {
+ var x, d, t = 'text/plain';
+
+ function g(s) {
+ x = 0;
+
+ try {
+ x = new ActiveXObject(s);
+ } catch (s) {
+ }
+
+ return x;
+ };
+
+ x = window.ActiveXObject ? g('Msxml2.XMLHTTP') || g('Microsoft.XMLHTTP') : new XMLHttpRequest();
+
+ // Synchronous AJAX load file
+ x.overrideMimeType && x.overrideMimeType(t);
+ x.open("GET", u, false);
+ x.send(null);
+
+ return x.responseText;
+ }
+};
+
+TemplateDialog.preInit();
+tinyMCEPopup.onInit.add(TemplateDialog.init, TemplateDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ar_dlg.js
new file mode 100644
index 000000000..5bae50d37
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.template_dlg',{title:"Templates",label:"Template","desc_label":"\u0627\u0644\u0648\u0635\u0641",desc:"Insert predefined template content",select:"Select a template",preview:"\u0645\u0639\u0627\u064a\u0646\u0647",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u064a\u0646\u0627\u064a\u0631 \u060c \u0641\u0628\u0631\u0627\u064a\u0631 \u060c \u0622\u0630\u0627\u0631 \u060c \u0646\u064a\u0633\u0627\u0646 \u060c \u0623\u064a\u0627\u0631 \u060c \u062d\u0632\u064a\u0631\u0627\u0646 \u060c \u062a\u0645\u0648\u0632 \u060c \u0622\u0628 \u060c \u0623\u064a\u0644\u0648\u0644 / \u0633\u0628\u062a\u0645\u0628\u0631 \u060c \u0623\u0643\u062a\u0648\u0628\u0631 \u060c \u0646\u0648\u0641\u0645\u0628\u0631 \u060c \u062f\u064a\u0633\u0645\u0628\u0631","months_short":"\u064a\u0646\u0627\u064a\u0631 \u060c \u0641\u0628\u0631\u0627\u064a\u0631 \u060c \u0645\u0627\u0631\u0633 \u060c \u0623\u0628\u0631\u064a\u0644 \u0648\u0645\u0627\u064a\u0648 \u0648\u064a\u0648\u0646\u064a\u0648 \u060c \u064a\u0648\u0644\u064a\u0648 \u060c \u0623\u063a\u0633\u0637\u0633 \u060c \u0633\u0628\u062a\u0645\u0628\u0631 \u060c \u0623\u0643\u062a\u0648\u0628\u0631 \u060c \u0646\u0648\u0641\u0645\u0628\u0631 \u060c \u062f\u064a\u0633\u0645\u0628\u0631","day_long":"\u0627\u0644\u0623\u062d\u062f \u060c \u0627\u0644\u0627\u062b\u0646\u064a\u0646 \u060c \u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621 \u060c \u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621 \u060c \u0627\u0644\u062e\u0645\u064a\u0633 \u060c \u0627\u0644\u062c\u0645\u0639\u0629 \u060c \u0627\u0644\u0633\u0628\u062a \u060c \u0627\u0644\u0623\u062d\u062f","day_short":"\u0623\u062d\u062f \u060c \u0627\u0644\u0627\u062b\u0646\u064a\u0646 \u060c \u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621 \u060c \u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621 \u060c \u0627\u0644\u062e\u0645\u064a\u0633 \u060c \u0627\u0644\u062c\u0645\u0639\u0629 \u060c \u0627\u0644\u0633\u0628\u062a \u0648\u0627\u0644\u0623\u062d\u062f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/az_dlg.js
new file mode 100644
index 000000000..c7e8834d3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.template_dlg',{title:"\u015eablonlar",label:"\u015eablon","desc_label":"T\u0259svir",desc:"\u018fvv\u0259ld\u0259n m\u00fc\u0259yy\u0259n edil\u0259n \u015fablon daxil et",select:"\u015eablon se\u00e7",preview:"\u0130lkin bax\u0131\u015f",warning:"T\u0259hl\u00fck\u0259: Bir \u015fablonu bir ba\u015fqas\u0131yla aktualla\u015fd\u0131rmaq m\u0259lumat itkisin\u0259 yol a\u00e7a bil\u0259r.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Yanvar,Fevral,Mart,Aprel,May,\u0130yun,\u0130yul,Avqust,Sentaybr,Oktaybr,Noyabr,Dekabr","months_short":"Yan,Fev,Mar,Ape,May,\u0130yn,\u0130yl,Avq,Sen,Okt,Noy,Dek","day_long":"Bazar,Bazar ert\u0259si,\u00c7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131,\u00c7\u0259r\u015f\u0259nb\u0259,C\u00fcm\u0259 ax\u015fam\u0131,C\u00fcm\u0259,\u015e\u0259nb\u0259,Bazar","day_short":"B,Be,\u00c7a,\u00c7,Ca,C,\u015e,B"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/be_dlg.js
new file mode 100644
index 000000000..f5dd5fd32
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.template_dlg',{title:"\u0428\u0430\u0431\u043b\u043e\u043d\u044b",label:"\u0428\u0430\u0431\u043b\u043e\u043d","desc_label":"\u0410\u043f\u0456\u0441\u0430\u043d\u043d\u0435",desc:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0448\u0430\u0431\u043b\u043e\u043d",select:"\u0410\u0431\u044f\u0440\u044b\u0446\u0435 \u0448\u0430\u0431\u043b\u043e\u043d",preview:"\u041f\u0440\u0430\u0433\u043b\u044f\u0434",warning:"\u0423\u0432\u0430\u0433\u0430: \u0437\u043c\u044f\u043d\u0435\u043d\u043d\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u043c\u043e\u0436\u0430 \u043f\u0440\u044b\u0432\u0435\u0441\u0446\u0456 \u0434\u0430 \u0441\u0442\u0440\u0430\u0442\u044b \u0434\u0430\u043d\u044b\u0445.","mdate_format":"%Y.%m.%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0421\u0442\u0443\u0434\u0437\u0435\u043d\u044c,\u041b\u044e\u0442\u044b,\u0421\u0430\u043a\u0430\u0432\u0456\u043a,\u041a\u0440\u0430\u0441\u0430\u0432\u0456\u043a,\u041c\u0430\u0439,\u0427\u044d\u0440\u0432\u0435\u043d\u044c,\u041b\u0456\u043f\u0435\u043d\u044c,\u0410\u045e\u0433\u0443\u0441\u0442,\u0412\u0435\u0440\u0430\u0441\u0435\u043d\u044c,\u041a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a,\u041b\u0456\u0441\u0442\u0430\u043f\u0430\u0434,\u0421\u043d\u0435\u0436\u0430\u043d\u044c","months_short":"\u0421\u0442\u0443,\u041b\u044e\u0442,\u0421\u0430\u043a,\u041a\u0440\u0430,\u041c\u0430\u0439,\u0427\u044d\u0440,\u041b\u0456\u043f,\u0410\u045e\u0433,\u0412\u0435\u0440,\u041a\u0430\u0441,\u041b\u0456\u0441,\u0421\u043d\u0435","day_long":"\u041d\u044f\u0434\u0437\u0435\u043b\u044f,\u041f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a,\u0410\u045e\u0442\u043e\u0440\u0430\u043a,\u0421\u0435\u0440\u0430\u0434\u0430,\u0427\u0430\u0446\u0432\u0435\u0440,\u041f\u044f\u0442\u043d\u0456\u0446\u0430,\u0421\u0443\u0431\u043e\u0442\u0430,\u041d\u044f\u0434\u0437\u0435\u043b\u044f","day_short":"\u041d\u0434,\u041f\u043d,\u0410\u0442,\u0421\u0440,\u0427\u0446,\u041f\u0442,\u0421\u0431,\u041d\u0434"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bg_dlg.js
new file mode 100644
index 000000000..8791dcfed
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.template_dlg',{title:"\u0422\u0435\u043c\u043f\u043b\u0435\u0439\u0442\u0438",label:"\u0422\u0435\u043c\u043f\u043b\u0435\u0439\u0442","desc_label":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",desc:"\u0412\u043c\u044a\u043a\u043d\u0438 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442",select:"\u0418\u0437\u0431\u0435\u0440\u0438 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434",warning:"\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u041e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0435\u0434\u0438\u043d \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442 \u0441 \u0434\u0440\u0443\u0433 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0434\u043e\u0432\u0435\u0434\u0435 \u0434\u043e \u0437\u0430\u0433\u0443\u0431\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u0438.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u042f\u043d\u0443\u0430\u0440\u0438,\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438,\u041c\u0430\u0440\u0442,\u0410\u043f\u0440\u0438\u043b,\u041c\u0430\u0439,\u042e\u043d\u0438,\u042e\u043b\u0438,\u0410\u0432\u0433\u0443\u0441\u0442,\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438,\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438,\u041d\u043e\u0435\u043c\u0432\u0440\u0438,\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438","months_short":"\u042f\u043d\u0443,\u0424\u0435\u0432,\u041c\u0430\u0440,\u0410\u043f\u0440,\u041c\u0430\u0439,\u042e\u043d\u0438,\u042e\u043b\u0438,\u0410\u0432\u0433,\u0421\u0435\u043f,\u041e\u043a\u0442,\u041d\u043e\u0435,\u0414\u0435\u043a","day_long":"\u041d\u0435\u0434\u0435\u043b\u044f,\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a,\u0412\u0442\u043e\u0440\u043d\u0438\u043a,\u0421\u0440\u044f\u0434\u0430,\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a,\u041f\u0435\u0442\u044a\u043a,\u0421\u044a\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0435\u043b\u044f","day_short":"\u041d\u0434,\u041f\u043d,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041f\u0442,\u0421\u0431,\u041d\u0434"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bn_dlg.js
new file mode 100644
index 000000000..c7c09fb74
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/br_dlg.js
new file mode 100644
index 000000000..803df2ae5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.template_dlg',{title:"Templates",label:"Template","desc_label":"Descri\u00e7\u00e3o",desc:"Inserir template",select:"Selecionar template",preview:"Pr\u00e9-Visualiza\u00e7\u00e3o",warning:"Aten\u00e7\u00e3o: Atualizar um template com outro pode causar a perda de dados.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Janeiro,Fevereiro,Mar\u00e7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro","months_short":"Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez","day_long":"Domingo,Segunda-Feira,Ter\u00e7a-Feira,Quarta-Feira,Quinta-Feira,Sexta-Feira,S\u00e1bado,Domingo","day_short":"Dom,Seg,Ter,Qua,Qui,Sex,Sab,Dom"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bs_dlg.js
new file mode 100644
index 000000000..89dd021e2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.template_dlg',{title:"Predlo\u0161ci",label:"Predlo\u017eak","desc_label":"Opis",desc:"Umetni sadr\u017eaj predlo\u0161ka",select:"Odaberite predlo\u017eak",preview:"Prikaz",warning:"Upozorenje: Nadopuna predlo\u0161ka novim mo\u017ee uzrokovati gubitak podataka.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"sije\u010danj,velja\u010da,o\u017eujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac","months_short":"sij,velj,o\u017eu,tra,svi,lip,srp,kol,ruj,lis,stu,pro","day_long":"nedjelja,ponedjeljak,utorak,srijeda,\u010detvrtak,petak,subota,nedjelja","day_short":"ned,pon,uto,sri,\u010det,pet,sub,ned"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ca_dlg.js
new file mode 100644
index 000000000..8c713109e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.template_dlg',{title:"Plantilles",label:"Plantilla","desc_label":"Descripci\u00f3",desc:"Insereix el contingut de plantilla predefinit",select:"Seleccioneu una plantilla",preview:"Previsualitzaci\u00f3",warning:"Av\u00eds: Actualitzar una plantilla amb una altra diferent pot provocar p\u00e8rdua d\'informaci\u00f3.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"gener,febrer,mar\u00e7,abril,maig,juny,juliol,agost,setembre,octubre,novembre,desembre","months_short":"gen.,febr.,mar\u00e7,abr.,maig,juny,jul.,ag.,set.,oct.,nov.,des.","day_long":"diumenge,dilluns,dimarts,dimecres,dijous,divendres,dissabte,diumenge","day_short":"dg.,dl.,dt.,dc.,dj.,dv.,ds.,dg."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ch_dlg.js
new file mode 100644
index 000000000..dc428cdbf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.template_dlg',{title:"\u6a21\u677f\u6807\u9898",label:"\u6a21\u677f","desc_label":"\u8bf4\u660e",desc:"\u63d2\u5165\u9884\u8bbe\u6a21\u677f",select:"\u9009\u62e9\u6a21\u677f",preview:"\u9884\u89c8",warning:"\u8b66\u544a\uff1a\u5957\u7528\u4e0d\u540c\u7684\u6a21\u677f\u6709\u53ef\u80fd\u5bfc\u81f4\u5185\u5bb9\u4e22\u5931\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708\uff0c\u4e8c\u6708\uff0c\u53c1\u6708\uff0c\u56db\u6708\uff0c\u4e94\u6708\uff0c\u516d\u6708\uff0c\u4e03\u6708\uff0c\u516b\u6708\uff0c\u4e5d\u6708\uff0c\u5341\u6708\uff0c\u5341\u4e00\u6708\uff0c\u5341\u4e8c\u6708","months_short":"1\u6708\uff0c2\u6708\uff0c3\u6708\uff0c4\u6708\uff0c5\u6708\uff0c6\u6708\uff0c7\u6708\uff0c8\u6708\uff0c9\u6708\uff0c10\u6708\uff0c11\u6708\uff0c12\u6708","day_long":"\u661f\u671f\u65e5\uff0c\u661f\u671f\u4e00\uff0c\u661f\u671f\u4e8c\uff0c\u661f\u671f\u53c1\uff0c\u661f\u671f\u56db\uff0c\u661f\u671f\u4e94\uff0c\u661f\u671f\u516d\uff0c\u661f\u671f\u65e5","day_short":"\u5468\u65e5\uff0c\u5468\u4e00\uff0c\u5468\u4e8c\uff0c\u5468\u53c1\uff0c\u5468\u56db\uff0c\u5468\u4e94\uff0c\u5468\u516d\uff0c\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cn_dlg.js
new file mode 100644
index 000000000..17b614011
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.template_dlg',{title:"\u6a21\u677f",label:"\u6a21\u677f","desc_label":"\u63cf\u8ff0",desc:"\u63d2\u5165\u9884\u6a21\u677f",select:"\u9009\u62e9\u6a21\u677f",preview:"\u9884\u89c8",warning:"\u8b66\u544a:\u5957\u7528\u4e0d\u540c\u7684\u6a21\u677f\u6709\u53ef\u80fd\u5bfc\u81f4\u5185\u5bb9\u4e22\u5931\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u53c1\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u53c1,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u53c1,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cs_dlg.js
new file mode 100644
index 000000000..acf5e146e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.template_dlg',{title:"\u0160ablony",label:"\u0160ablona","desc_label":"Popis",desc:"Vlo\u017eit p\u0159eddefinovan\u00fd obsah ze \u0161ablony",select:"Vybrat \u0161ablonu",preview:"N\u00e1hled",warning:"Upozorn\u011bn\u00ed: Aktualizace \u0161ablony jinou zp\u016fsob\u00ed ztr\u00e1tu dat.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"Leden,\u00danor,B\u0159ezen,Duben,Kv\u011bten,\u010cerven,\u010cervenec,Srpen,Z\u00e1\u0159\u00ed,\u0158\u00edjen,Listopad,Prosinec","months_short":"Led,\u00dano,B\u0159e,Dub,Kv\u011b,\u010cer,\u010cvc,Srp,Z\u00e1\u0159,\u0158\u00edj,Lis,Pro","day_long":"Ned\u011ble,Pond\u011bl\u00ed,\u00dater\u00fd,St\u0159eda,\u010ctvrtek,P\u00e1tek,Sobota,Ned\u011ble","day_short":"Ne,Po,\u00dat,St,\u010ct,P\u00e1,So,Ne"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cy_dlg.js
new file mode 100644
index 000000000..e6b10b2ca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.template_dlg',{title:"Templedi",label:"Templedi","desc_label":"Disgrifiad",desc:"Mewnosod cynnwys templed rhagosodol",select:"Dewis templed",preview:"Rhagolygiad",warning:"Rhybudd: Gall diweddaru templed gyda un arall achosi colled data.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Ionawr,Chwefror,Mawrth,Ebrill,Mai,Mehefin,Goffennaf,Awst,Medi,Hydref,Tachwedd,Rhagfyr","months_short":"Ion,Chw,Maw,Ebr,Mai,Meh,Gor,Aws,Med,Hyd,Tac,Rha","day_long":"Sul,Llun,Mawrth,Mercher,Iau,Gwener,Sadwrn,Sul","day_short":"Sul,Llu,Maw,Mer,Iau,Gwe,Sad,Sul"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/da_dlg.js
new file mode 100644
index 000000000..5728ce193
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.template_dlg',{title:"Skabeloner",label:"Skabelon","desc_label":"Beskrivelse",desc:"Inds\u00e6t pr\u00e6defineret skabelonindhold",select:"V\u00e6lg en skabelon",preview:"Vis udskrift",warning:"Advarsel: Opdatering af en skabelon med en anden kan betyde datatab.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januar,Februar,Marts,April,Maj,Juni,Juli,August,September,Oktober,November,December","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","day_long":"S\u00f8ndag,Mandag,Tirsdag,Onsdag,Torsdag,Fredag,L\u00f8rdag,S\u00f8ndag","day_short":"S\u00f8n,Man,Tirs,Ons,Tors,Fre,L\u00f8r,S\u00f8n"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/de_dlg.js
new file mode 100644
index 000000000..04c9fa1a8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.template_dlg',{title:"Vorlagen",label:"Vorlage","desc_label":"Beschreibung",desc:"Inhalt aus Vorlage einf\u00fcgen",select:"Vorlage ausw\u00e4hlen",preview:"Vorschau",warning:"Warnung: Eine Vorlage mit einer anderen zu aktualisieren kann zu einem Datenverlust f\u00fchren!","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januar,Februar,M\u00e4rz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember","months_short":"Jan,Feb,M\u00e4r,Apr,Mai,Juni,Juli,Aug,Sept,Okt,Nov,Dez","day_long":"Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag","day_short":"So,Mo,Di,Mi,Do,Fr,Sa,So"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/dv_dlg.js
new file mode 100644
index 000000000..6d8129536
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/el_dlg.js
new file mode 100644
index 000000000..4f5372256
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.template_dlg',{title:"\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b1",label:"\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf","desc_label":"\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae",desc:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03c0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf",select:"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c0\u03c1\u03bf\u03c4\u03cd\u03c0\u03bf\u03c5",preview:"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7",warning:"\u03a0\u03c1\u03bf\u03c3\u03bf\u03c7\u03ae : \u0395\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03bd\u03bf\u03bd\u03c4\u03b1\u03c2 \u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf \u03bc\u03b5 \u03ad\u03bd\u03b1 \u03ac\u03bb\u03bb\u03bf, \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c0\u03c1\u03bf\u03ba\u03b1\u03bb\u03ad\u03c3\u03b5\u03b9 \u03b1\u03c0\u03ce\u03bb\u03b5\u03b9\u03b1 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2,\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2,\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2,\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2,\u039c\u03ac\u03b9\u03bf\u03c2,\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2,\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2,\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2,\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2,\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2,\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2,\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2","months_short":"\u0399\u03b1\u03bd,\u03a6\u03b5\u03b2,\u039c\u03ac\u03c1,\u0391\u03c0\u03c1,\u039c\u03ac\u03b9,\u0399\u03bf\u03cd\u03bd,\u0399\u03bf\u03cd\u03bb,\u0391\u03cd\u03b3,\u03a3\u03b5\u03c0,\u039f\u03ba\u03c4,\u039d\u03bf\u03ad,\u0394\u03b5\u03ba","day_long":"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae,\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1,\u03a4\u03c1\u03af\u03c4\u03b7,\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7,\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7,\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae,\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf","day_short":"\u039a\u03c5,\u0394\u03b5,\u03a4\u03c1,\u03a4\u03b5\u03c4,\u03a0\u03ad\u03bc,\u03a0\u03b1\u03c1,\u03a3\u03b1\u03b2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js
new file mode 100644
index 000000000..83e599d68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert Predefined Template Content",select:"Select a Template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/eo_dlg.js
new file mode 100644
index 000000000..e54079f2e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.template_dlg',{title:"\u015cablonoj",label:"\u015cablono","desc_label":"Priskribo",desc:"Enmeti \u015dablonon",select:"Elekti \u015dablonon",preview:"Anta\u016dvido",warning:"Atentu: \u011cisdatigi \u015dablonon per alia povas ka\u016dzi datumperdon.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januaro,Februaro,Marto,Aprilo,Majo,Junio,Julio,A\u016dgusto,Septembro,Oktobro,Novembro,Decembro","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,A\u016dg,Sep,Okt,Nov,Dec","day_long":"Diman\u0109o,Lundo,Mardo,Merkredo,\u0134a\u016ddo,Vendredo,Sabato,Diman\u0109o","day_short":"Dim,Lun,Mar,Mer,\u0134a\u016d,Ven,Sab,Dim"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/es_dlg.js
new file mode 100644
index 000000000..185e45a45
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.template_dlg',{title:"Plantillas",label:"Plantilla","desc_label":"Descripci\u00f3n",desc:"Insertar contenido de plantilla predefinida",select:"Elegir plantilla",preview:"Vista previa",warning:"Cuidado: Actualizar una plantilla con otra puede causar p\u00e9rdida de datos.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre","months_short":"Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic","day_long":"Domingo,Lunes,Martes,Mi\u00e9rcoles,Jueves,Viernes,S\u00e1bado,Domingo","day_short":"Dom,Lun,Mar,Mie,Jue,Vie,Sab,Dom"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/et_dlg.js
new file mode 100644
index 000000000..a1ad87888
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.template_dlg',{title:"\u0160abloonid",label:"\u0160abloon","desc_label":"Kirjeldus",desc:"Sisesta eeldefineeritud \u0161ablooni sisu",select:"Vali \u0161abloon",preview:"Eelvaade",warning:"Hoiatus: \u0160ablooni uuendamine teistsugusega v\u00f5ib kaasa tuua andmete kaotsiminemist.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Jaanuar,Veebruar,M\u00e4rts,Aprill,Mai,Juuni,Juuli,August,September,Oktoober,November,Detsember","months_short":"Jaan,Veeb,M\u00e4rts,Apr,Mai,Juuni,Juuli,Aug,Sep,Okt,Nov,Dets","day_long":"P\u00fchap\u00e4ev,Esmasp\u00e4ev,Teisip\u00e4ev,Kolmap\u00e4ev,Neljap\u00e4ev,reede,Laup\u00e4ev,P\u00fchap\u00e4ev","day_short":"P,E,T,K,N,R,L,P"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/eu_dlg.js
new file mode 100644
index 000000000..b458e9ae6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.template_dlg',{title:"Txantiloiak",label:"Txantiloia","desc_label":"Deskribapena",desc:"Txertatu aurredefinitutako txantiloi edukia",select:"Aukeratu txantiloia",preview:"Aurreikusi",warning:"Kontuz: Txantiloi bat beste batekin eguneratzeak data galera sor dezake.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Urtarrila,Otsaila,Martxoa,Apirila,Maiatza,Ekaina,Uztaila,Abuztua,Iraila,Urria,Azaroa,Abendua","months_short":"Urt,Ots,Mar,Apr,Mai,Eka,Uzt,Abu,Ira,Urr,Aza,Abe","day_long":"Igandea,Astelehena,Asteartea,Asteazkena,Osteguna,Ostirala,Larunbata,Igandea","day_short":"Ig,Al,As,Az,Og,Or,Lr,Ig"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fa_dlg.js
new file mode 100644
index 000000000..7ee0976c3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.template_dlg',{title:"\u0642\u0627\u0644\u0628 \u0647\u0627",label:"\u0642\u0627\u0644\u0628","desc_label":"\u062a\u0648\u0636\u06cc\u062d",desc:"\u062f\u0631\u062c \u0645\u062d\u062a\u0648\u0627\u06cc \u0642\u0627\u0644\u0628 \u0627\u0632 \u067e\u06cc\u0634 \u062a\u0639\u06cc\u06cc\u0646 \u0634\u062f\u0647",select:"\u0627\u0646\u062a\u062e\u0627\u0628 \u06cc\u06a9 \u0642\u0627\u0644\u0628",preview:"\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634",warning:"\u0647\u0634\u062f\u0627\u0631: \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06cc\u06a9 \u0642\u0627\u0644\u0628 \u0628\u0627 \u06cc\u06a9 \u0646\u0648\u0639 \u0645\u062a\u0641\u0627\u0648\u062a \u062f\u06cc\u06af\u0631 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0627\u0639\u062b \u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0634\u0648\u062f.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0698\u0627\u0646\u0648\u06cc\u0647,\u0641\u0648\u0631\u06cc\u0647,\u0645\u0627\u0631\u0633,\u0622\u0648\u0631\u06cc\u0644,\u0645\u0647,\u0698\u0648\u0626\u0646,\u0698\u0648\u0626\u06cc\u0647,\u0627\u0648\u062a,\u0633\u067e\u062a\u0627\u0645\u0628\u0631,\u0627\u06a9\u062a\u0628\u0631,\u0646\u0648\u0627\u0645\u0628\u0631,\u062f\u0633\u0627\u0645\u0628\u0631","months_short":"\u0698\u0627\u0646\u0648\u06cc\u0647,\u0641\u0648\u0631\u06cc\u0647,\u0645\u0627\u0631\u0633,\u0622\u0648\u0631\u06cc\u0644,\u0645\u0647,\u0698\u0648\u0626\u0646,\u0698\u0648\u0626\u06cc\u0647,\u0627\u0648\u062a,\u0633\u067e\u062a\u0627\u0645\u0628\u0631,\u0627\u06a9\u062a\u0628\u0631,\u0646\u0648\u0627\u0645\u0628\u0631,\u062f\u0633\u0627\u0645\u0628\u0631","day_long":"\u06cc\u06a9\u0634\u0646\u0628\u0647,\u062f\u0648\u0634\u0646\u0628\u0647,\u0633\u0647 \u0634\u0646\u0628\u0647,\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647,\u067e\u0646\u062c \u0634\u0646\u0628\u0647,\u062c\u0645\u0639\u0647,\u0634\u0646\u0628\u0647,\u06cc\u06a9\u0634\u0646\u0628\u0647","day_short":"\u06cc\u06a9\u0634\u0646\u0628\u0647,\u062f\u0648\u0634\u0646\u0628\u0647,\u0633\u0647 \u0634\u0646\u0628\u0647,\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647,\u067e\u0646\u062c \u0634\u0646\u0628\u0647,\u062c\u0645\u0639\u0647,\u0634\u0646\u0628\u0647,\u06cc\u06a9\u0634\u0646\u0628\u0647"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fi_dlg.js
new file mode 100644
index 000000000..d3ce43703
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.template_dlg',{title:"Sivupohjat",label:"Sivupohja","desc_label":"Kuvaus",desc:"Lis\u00e4\u00e4 esim\u00e4\u00e4ritetty\u00e4 sivupohjasis\u00e4lt\u00f6\u00e4",select:"Valitse sivupohja",preview:"Esikatselu",warning:"Varoitus: Sivupohjan p\u00e4ivitt\u00e4minen toisella saattaa aiheuttaa tiedon menetyksen.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"Tammikuu,Helmikuu,Maaliskuu,Huhtikuu,Toukokuu,Kes\u00e4kuu,Hein\u00e4kuu,Elokuu,Syyskuu,Lokakuu,Marraskuu,Joulukuu","months_short":"Tammi,Helmi,Maalis,Huhti,Touko,Kes\u00e4,Hein\u00e4,Elo,Syys,Loka,Marras,Joulu","day_long":"sunnuntai,maanantai,tiistai,keskiviikko,torstai,perjantai,lauantai,sunnuntai","day_short":"su,ma,ti,ke,to,pe,la,su"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fr_dlg.js
new file mode 100644
index 000000000..a9ee12412
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.template_dlg',{title:"Mod\u00e8les",label:"Mod\u00e8le","desc_label":"Description",desc:"Ins\u00e9rer un mod\u00e8le pr\u00e9d\u00e9fini",select:"Choisir un mod\u00e8le",preview:"Pr\u00e9visualisation",warning:"Attention : Mettre \u00e0 jour un mod\u00e8le pour un autre peut entra\u00eener une perte de donn\u00e9es !","mdate_format":"%d/%m/%Y %H:%M:%S","cdate_format":"%d/%m/%Y %H:%M:%S","months_long":"Janvier,F\u00e9vrier,Mars,Avril,Mai,Juin,Juillet,Ao\u00fbt,Septembre,Octobre,Novembre,D\u00e9cembre","months_short":"Jan,F\u00e9v,Mar,Avr,Mai,Juin,Juil,Ao\u00fbt,Sep,Oct,Nov,D\u00e9c","day_long":"Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche","day_short":"Dim,Lun,Mar,Mer,Jeu,Ven,Sam,Dim"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/gl_dlg.js
new file mode 100644
index 000000000..b74388bb1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.template_dlg',{title:"Plantillas",label:"Plantilla","desc_label":"Descripci\u00f3n",desc:"Insertar contido de plantilla predefinida",select:"Seleccionar plantilla",preview:"Vista previa",warning:"Coidado: Actualizar unha plantilla con outra pode causar p\u00e9rdida de datos.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Xaneito,Febreiro,Marzo,Abril,Maio,Xu\u00f1o,Xullo,Agosto,Setembro,Outubro,Novembro,Decembro","months_short":"Xan,Feb,Mar,Abr,Mai,Xu\u00f1,Xul,Ago,Set,Out,Nov,Dec","day_long":"Domingo,Luns,Martes,M\u00e9rcores,Xoves,Venres,S\u00e1bado,Domingo","day_short":"Dom,Lun,Mar,M\u00e9r,Xov,Ver,S\u00e1b,Dom"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/gu_dlg.js
new file mode 100644
index 000000000..14755e899
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/he_dlg.js
new file mode 100644
index 000000000..cb2f785f1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.template_dlg',{title:"\u05ea\u05d1\u05e0\u05d9\u05d5\u05ea",label:"\u05ea\u05d1\u05e0\u05d9\u05ea","desc_label":"\u05ea\u05d9\u05d0\u05d5\u05e8",desc:"Insert predefined template content",select:"\u05d1\u05d7\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea",preview:"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"\u05e8\u05d0\u05e9\u05d5\u05df,\u05e9\u05e0\u05d9,\u05e9\u05dc\u05d9\u05e9\u05d9,\u05e8\u05d1\u05d9\u05e2\u05d9,\u05d7\u05de\u05d9\u05e9\u05d9,\u05e9\u05d9\u05e9\u05d9,\u05e9\u05d1\u05ea","day_short":"\u05e8\u05d0\u05e9\u05d5\u05df,\u05e9\u05e0\u05d9,\u05e9\u05dc\u05d9\u05e9\u05d9,\u05e8\u05d1\u05d9\u05e2\u05d9,\u05d7\u05de\u05d9\u05e9\u05d9,\u05e9\u05d9\u05e9\u05d9,\u05e9\u05d1\u05ea"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hi_dlg.js
new file mode 100644
index 000000000..35f38ddda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hr_dlg.js
new file mode 100644
index 000000000..c2bce38a5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.template_dlg',{title:"Predlo\u0161ci",label:"Predlo\u017eak","desc_label":"Opis",desc:"Umetni predefinirani sadr\u017eaj predlo\u0161ka",select:"Odaberite predlo\u017eak",preview:"Predpregled",warning:"Upozorenje: A\u017euriranje predlo\u0161ka novim mo\u017ee uzrokovati gubitak podataka.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"sije\u010danj,velja\u010da,o\u017eujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac","months_short":"sij,velj,o\u017eu,tra,svi,lip,srp,kol,ruj,lis,stu,pro","day_long":"nedjelja,ponedjeljak,utorak,srijeda,\u010detvrtak,petak,subota,nedjelja","day_short":"ned,pon,uto,sri,\u010det,pet,sub,ned"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hu_dlg.js
new file mode 100644
index 000000000..b28de5b98
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.template_dlg',{title:"Sablon beilleszt\u00e9se",label:"Sablon","desc_label":"Le\u00edr\u00e1s",desc:"Sablon beilleszt\u00e9se",select:"Sablon v\u00e1laszt\u00e1sa",preview:"El\u0151n\u00e9zet",warning:"Figyelem: Egy m\u00e1r alkalmazott sablon friss\u00edt\u00e9se m\u00e1sikkal adatveszt\u00e9ssel j\u00e1rhat.","mdate_format":"%Y.%m.%d. %H:%M:%S","cdate_format":"%Y.%m.%d. %H:%M:%S","months_long":"janu\u00e1r,febru\u00e1r,m\u00e1rcius,\u00e1prilis,m\u00e1jus,j\u00fanius,j\u00falius,augusztus,szeptember,okt\u00f3ber,november,december","months_short":"jan,feb,m\u00e1r,\u00e1pr,m\u00e1j,j\u00fan,j\u00fal,aug,szep,okt,nov,dec","day_long":"vas\u00e1rnap,h\u00e9tf\u0151,kedd,szerda,cs\u00fct\u00f6rt\u00f6k,p\u00e9ntek,szombat,vas\u00e1rnap","day_short":"V,H,K,Sze,Cs,P,Szo,V"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hy_dlg.js
new file mode 100644
index 000000000..447eec34b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.template_dlg',{title:"\u0428\u0430\u0431\u043b\u043e\u043d\u044b",label:"\u0428\u0430\u0431\u043b\u043e\u043d","desc_label":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442",select:"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d",preview:"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440",warning:"\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u0442\u0435\u0440\u044f\u043c \u0434\u0430\u043d\u043d\u044b\u0445","mdate_format":"% Y-% m-% d% H:% M:% S","cdate_format":"% Y-% m-% d% H:% M:% S","months_long":"\u044f\u043d\u0432\u0430\u0440\u044c, \u0444\u0435\u0432\u0440\u0430\u043b\u044c, \u043c\u0430\u0440\u0442, \u0430\u043f\u0440\u0435\u043b\u044c, \u043c\u0430\u0439, \u0438\u044e\u043d\u044c, \u0438\u044e\u043b\u044c, \u0430\u0432\u0433\u0443\u0441\u0442, \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c, \u043e\u043a\u0442\u044f\u0431\u0440\u044c, \u043d\u043e\u044f\u0431\u0440\u044c, \u0434\u0435\u043a\u0430\u0431\u0440\u044c","months_short":"\u044f\u043d\u0432\u0430\u0440\u044c, \u0444\u0435\u0432\u0440\u0430\u043b\u044c, \u043c\u0430\u0440\u0442, \u0430\u043f\u0440\u0435\u043b\u044c, \u043c\u0430\u0439, \u0438\u044e\u043d\u044c, \u0438\u044e\u043b\u044c, \u0430\u0432\u0433\u0443\u0441\u0442, \u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c, \u041e\u043a\u0442\u044f\u0431\u0440\u044c, \u041d\u043e\u044f\u0431\u0440\u044c, \u0414\u0435\u043a\u0430\u0431\u0440\u044c","day_long":"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435, \u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a, \u0432\u0442\u043e\u0440\u043d\u0438\u043a, \u0441\u0440\u0435\u0434\u0430, \u0447\u0435\u0442\u0432\u0435\u0440\u0433, \u043f\u044f\u0442\u043d\u0438\u0446\u0443, \u0441\u0443\u0431\u0431\u043e\u0442\u0443, \u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435","day_short":"\u0412\u0441, \u041f\u043d, \u0412\u0442, \u0421\u0440, \u0427\u0442, \u041f\u0442, \u0421\u0431, \u0412\u0441"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ia_dlg.js
new file mode 100644
index 000000000..4c2b11430
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.template_dlg',{title:"\u6a21\u677f\u6e05\u5355",label:"\u8303\u672c","desc_label":"\u63cf\u8ff0",desc:"\u63d2\u5165\u9009\u5b9a\u7684\u8303\u672c",select:"\u9009\u62e9\u6a21\u677f",preview:"\u9884\u89c8",warning:"\u8b66\u544a: \u66f4\u65b0\u6a21\u677f\u6709\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u4e22\u5931","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/id_dlg.js
new file mode 100644
index 000000000..27a930057
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Menyisipkan template standar isi",select:"Select a template",preview:"Preview",warning:"Warning: mengupdate template yang berbeda dapat menyebabkan kehilangan data","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januari,Februari,Maren,April,Mei,Juni,Juli,Agustus,September,Oktober,November,Desember","months_short":"Jan,Feb,Mar,Apr,Mei,Jun,Jul,Ags,Sep,Okt,Nov,Des","day_long":"Minggu,Senin,Selasa,Rabu,Kamis,Jumat,Sabtu,Minggu","day_short":"Min,Sen,Sel,Rab,Kam,Jum,Sab,Min"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/is_dlg.js
new file mode 100644
index 000000000..c84fb1753
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.template_dlg',{title:"Sni\u00f0",label:"Sni\u00f0","desc_label":"L\u00fdsing",desc:"Setja inn tilb\u00fai\u00f0 sni\u00f0",select:"Velja sni\u00f0",preview:"Sko\u00f0a",warning:"Vi\u00f0v\u00f6run: Me\u00f0 \u00fev\u00ed a\u00f0 uppf\u00e6ra sni\u00f0 \u00f6\u00f0ru sni\u00f0i g\u00e6ti leitt til \u00feess a\u00f0 g\u00f6gn t\u00fdnist.","mdate_format":"%d. %m %Y %H:%M:%S","cdate_format":"%d. %m %Y %H:%M:%S","months_long":"jan\u00faar,febr\u00faar,mars,apr\u00edl,ma\u00ed,j\u00fan\u00ed,j\u00fal\u00ed,\u00e1g\u00fast,september,okt\u00f3ber,n\u00f3vember,desember","months_short":"jan,feb,mar,apr,ma\u00ed,j\u00fan,j\u00fal,\u00e1g\u00fa,sep,okt,nov,des","day_long":"sunnudagur,m\u00e1nudagur,\u00feri\u00f0judagur,mi\u00f0vikudagur,fimmtudagur,f\u00f6studagur,laugardagur,sunnudagur","day_short":"sun,m\u00e1n,\u00feri,mi\u00f0,fim,f\u00f6s,lau,sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/it_dlg.js
new file mode 100644
index 000000000..78abd1f09
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.template_dlg',{title:"Modelli",label:"Modello","desc_label":"Descrizione",desc:"Inserisci contenuto da modello predefinito",select:"Seleziona un modello",preview:"Anteprima",warning:"Attenzione: Aggiornare un modello con un altro differente pu\u00f2 causare perdite di dati.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre","months_short":"Gen,Feb,Mar,Apr,Mag,Giu,Lug,Ago,Set,Ott,Nov,Dic","day_long":"Domenica,Luned\u00ec,Marted\u00ec,Mercoled\u00ec,Gioved\u00ec,Venerd\u00ec,Sabato,Domenica","day_short":"Dom,Lun,Mar,Mer,Gio,Ven,Sab,Dom"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ja_dlg.js
new file mode 100644
index 000000000..4aae93377
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.template_dlg',{title:"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8",label:"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8","desc_label":"\u8aac\u660e",desc:"\u5b9a\u7fa9\u6e08\u307f\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u633f\u5165",select:"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u9078\u629e",preview:"\u30d7\u30ec\u30d3\u30e5\u30fc",warning:"\u8b66\u544a\uff1a\u7570\u306a\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u66f4\u65b0\u3059\u308b\u3068\u30c7\u30fc\u30bf\u3092\u5931\u3046\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_short":"1,2,3,4,5,6,7,8,9,10,11,12","day_long":"\u65e5\u66dc\u65e5,\u6708\u66dc\u65e5,\u706b\u66dc\u65e5,\u6c34\u66dc\u65e5,\u6728\u66dc\u65e5,\u91d1\u66dc\u65e5,\u571f\u66dc\u65e5,\u65e5\u66dc\u65e5","day_short":"(\u65e5),(\u6708),(\u706b),(\u6c34),(\u6728),(\u91d1),(\u571f),(\u65e5)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ka_dlg.js
new file mode 100644
index 000000000..30605c2e2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.template_dlg',{title:"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d4\u10d1\u10d8",label:"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8","desc_label":"\u10d0\u10e6\u10ec\u10d4\u10e0\u10d0",desc:"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0",select:"\u10d0\u10d8\u10e0\u10e9\u10d8\u10d4\u10d7 \u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8",preview:"\u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10e0\u10d4\u10d1\u10d0",warning:"\u10e7\u10e3\u10e0\u10d0\u10d3\u10e6\u10d4\u10d1\u10d0: \u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8\u10e1 \u10d0\u10e0\u10e9\u10d4\u10d5\u10d0\u10db \u10e8\u10d4\u10d8\u10eb\u10da\u10d4\u10d1\u10d0 \u10d2\u10d0\u10db\u10dd\u10d8\u10ec\u10d5\u10d8\u10dd\u10e1 \u10db\u10dd\u10dc\u10d0\u10ea\u10d4\u10db\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10d9\u10d0\u10e0\u10d2\u10d5\u10d0/","mdate_format":"%Y.%m.%d %H:%M:%S","cdate_format":"%Y.%m.%d %H:%M:%S","months_long":"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8,\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8,\u10db\u10d0\u10e0\u10e2\u10d8,\u10d0\u10de\u10e0\u10d8\u10da\u10d8,\u10db\u10d0\u10d8\u10e1\u10d8,\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8,\u10d8\u10d5\u10da\u10d8\u10e1\u10d8,\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd,\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8,\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8,\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8,\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8","months_short":"\u10d8\u10d0\u10dc,\u10d7\u10d4\u10d1,\u10db\u10d0\u10e0\u10e2,\u10d0\u10de\u10e0,\u10db\u10d0\u10d8\u10e1\u10d8,\u10d8\u10d5\u10dc,\u10d8\u10d5\u10da,\u10d0\u10d2\u10d5,\u10e1\u10d4\u10e5,\u10dd\u10e5\u10e2,\u10dc\u10dd\u10d4\u10db,\u10d3\u10d4\u10d9","day_long":"\u10d9\u10d5\u10d8\u10e0\u10d0,\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8,\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10d9\u10d5\u10d8\u10e0\u10d0","day_short":"\u10d9\u10d5,\u10dd\u10e0\u10e8,\u10e1\u10d0\u10db\u10e8,\u10dd\u10d7\u10ee\u10e8,\u10ee\u10e3\u10d7,\u10de\u10d0\u10e0,\u10e8\u10d0\u10d1,\u10d9\u10d5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/kl_dlg.js
new file mode 100644
index 000000000..65c9b032f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/km_dlg.js
new file mode 100644
index 000000000..706b4c9c0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.template_dlg',{title:"\u1796\u17bb\u1798\u17d2\u1796",label:"\u1796\u17bb\u1798\u17d2\u1796","desc_label":"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6",desc:"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1798\u17b6\u178f\u17b7\u1780\u17b6\u1796\u17bb\u1798\u17d2\u1796\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1787\u17b6\u1798\u17bb\u1793",select:"\u1787\u17d2\u179a\u17be\u179f\u1796\u17bb\u1798\u17d2\u1796\u1798\u17bd\u1799",preview:"\u1798\u17be\u179b\u1787\u17b6\u1798\u17bb\u1793",warning:"\u1780\u17b6\u179a\u1796\u17d2\u179a\u1798\u17b6\u1793\u17d6 \u1780\u17b6\u179a\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1787\u17b6\u1798\u17bd\u1799\u1793\u17b9\u1784\u1796\u17bb\u1798\u17d2\u1796\u1790\u17d2\u1798\u17b8\u17a2\u17b6\u1785\u1794\u178e\u17d2\u178f\u17b6\u179b\u17b2\u17d2\u1799\u1794\u17b6\u178f\u17cb\u1794\u1784\u17cb\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u00a0\u17d4","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u1781\u17c2\u1798\u1780\u179a\u17b6,\u1781\u17c2\u1780\u17bb\u1798\u17d2\u1797\u17c8,\u1781\u17c2\u1798\u17b8\u1793\u17b6,\u1781\u17c2\u1798\u17c1\u179f\u17b6,\u1781\u17c2\u17a7\u179f\u1797\u17b6,\u1781\u17c2\u1798\u17b7\u1790\u17bb\u1793\u17b6,\u1781\u17c2\u1780\u1780\u17d2\u1780\u178a\u17b6,\u1781\u17c2\u179f\u17b8\u17a0\u17b6,\u1781\u17c2\u1780\u1789\u17d2\u1789\u17b6,\u1781\u17c2\u178f\u17bb\u179b\u17b6,\u1781\u17c2\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6,\u1781\u17c2\u1792\u17d2\u1793\u17bc","months_short":"\u1798\u1780\u179a\u17b6,\u1780\u17bb\u1798\u17d2\u1797\u17c8,\u1798\u17b8\u1793\u17b6,\u1798\u17c1\u179f\u17b6,\u17a7\u179f\u1797\u17b6,\u1798\u17b7\u1790\u17bb\u1793\u17b6,\u1780\u1780\u17d2\u1780\u178a\u17b6,\u179f\u17b8\u17a0\u17b6,\u1780\u1789\u17d2\u1789\u17b6,\u178f\u17bb\u179b\u17b6,\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6,\u1792\u17d2\u1793\u17bc","day_long":"\u1790\u17d2\u1784\u17c3\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799,\u1790\u17d2\u1784\u17c3\u1785\u17d0\u1793\u17d2\u1791,\u1790\u17d2\u1784\u17c3\u17a2\u1784\u17d2\u1782\u17b6\u179a,\u1790\u17d2\u1784\u17c3\u1796\u17bb\u1792,\u1790\u17d2\u1784\u17c3\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd,\u1790\u17d2\u1784\u17c3\u179f\u17bb\u1780\u17d2\u179a,\u1790\u17d2\u1784\u17c3\u179f\u17c5\u179a\u17cd,\u1790\u17d2\u1784\u17c3\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799","day_short":"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799,\u1785\u17d0\u1793\u17d2\u1791,\u17a2\u1784\u17d2\u1782\u17b6\u179a,\u1796\u17bb\u1792,\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd,\u179f\u17bb\u1780\u17d2\u179a,\u179f\u17c5\u179a\u17cd,\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ko_dlg.js
new file mode 100644
index 000000000..3919ced43
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.template_dlg',{title:"\ud15c\ud50c\ub9bf",label:"\ud15c\ud50c\ub9bf","desc_label":"\uc124\uba85",desc:"\ubbf8\ub9ac \uc815\uc758\ub41c \ud15c\ud50c\ub9bf \uc0bd\uc785",select:"\ud15c\ud50c\ub9bf \uc120\ud0dd",preview:"\ubbf8\ub9ac \ubcf4\uae30",warning:"\uacbd\uace0: \ub2e4\ub978 \ud15c\ud50c\ub9bf\uc73c\ub85c \ubcc0\uacbd\ud558\uba74 \ub370\uc774\ud130\uac00 \uc720\uc2e4\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"1\uc6d4,2\uc6d4,3\uc6d4,4\uc6d4,5\uc6d4,6\uc6d4,7\uc6d4,8\uc6d4,9\uc6d4,10\uc6d4,11\uc6d4,12\uc6d4","months_short":"1,2,3,4,5,6,7,8,9,10,11,12","day_long":"\uc77c\uc694\uc77c,\uc6d4\uc694\uc77c,\ud654\uc694\uc77c,\uc218\uc694\uc77c,\ubaa9\uc694\uc77c,\uae08\uc694\uc77c,\ud1a0\uc694\uc77c,\uc77c\uc694\uc77c","day_short":"\uc77c,\uc6d4,\ud654,\uc218,\ubaa9,\uae08,\ud1a0,\uc77c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/kz_dlg.js
new file mode 100644
index 000000000..9b70dc19e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert Predefined Template Content",select:"Select a Template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lb_dlg.js
new file mode 100644
index 000000000..206a8435b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.template_dlg',{title:"Virlagen",label:"Virlag","desc_label":"Beschreiwung",desc:"Virgef\u00e4erdegte Virlageninhalt af\u00fcgen",select:"Virlag auswielen",preview:"Virschau",warning:"Warnung: Eng Virlag mat enger anerer ze aktualis\u00e9iere kann zu Dateverloscht f\u00e9ieren!","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januar,Februar,M\u00e4erz,Abr\u00ebll,Mee,Juni,Juli,August,September,Oktober,November,Dezember","months_short":"Jan,Feb,M\u00e4erz,Abr,Mee,Juni,Juli,Aug,Sept,Okt,Nov,Dez","day_long":"Sonndeg,M\u00e9indeg,D\u00ebnschdeg,M\u00ebttwoch,Donneschdeg,Freides,Samschdeg,Sonndeg","day_short":"So,M\u00e9,D\u00eb,M\u00eb,Do,Fr,Sa,So"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lt_dlg.js
new file mode 100644
index 000000000..2a28ead94
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.template_dlg',{title:"\u0160ablonai",label:"\u0160ablonas","desc_label":"Apra\u0161as",desc:"\u012eterpti numatyt\u0105 \u0161ablono turin\u012f",select:"Pasirinkti \u0161ablon\u0105",preview:"Per\u017ei\u016bra",warning:"Persp\u0117jimas: \u0160ablono pakeitimas kitu gali sukelti duomen\u0173 praradim\u0105.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Sausis,Vasaris,Kovas,Balandis,Gegu\u017e\u0117,Bir\u017eelis,Liepa,Rugpj\u016btis,Rugs\u0117jis,Spalis,Lapkritis,Gruodis","months_short":"Sau,Vas,Kov,Bal,Geg,Bir,Lie,Rugpj,Rugs,Spa,Lapkr,Gruo","day_long":"Sekmadienis,Pirmadienis,Antradienis,Tre\u010diadienis,Ketvirtadienis,Penktadienis,\u0160e\u0161tadienis,Sekmadienis","day_short":"Sekm,Pirm,Antr,Tre\u010d,Ketv,Penk,\u0160e\u0161t,Sekm"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lv_dlg.js
new file mode 100644
index 000000000..e6c59f99d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/mk_dlg.js
new file mode 100644
index 000000000..5e47b4f7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.template_dlg',{title:"\u041f\u0440\u0438\u043c\u0435\u0440\u043e\u0446\u0438",label:"\u041f\u0440\u0438\u043c\u0435\u0440\u043e\u043a","desc_label":"\u041e\u043f\u0438\u0441",desc:"\u0412\u043d\u0435\u0441\u0438 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430 \u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0442",select:"\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043a",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434",warning:"\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0443\u0432\u0430\u045a\u0435: \u0410\u0436\u0443\u0440\u0438\u0440\u0430\u045a\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043a\u043e\u0442 \u0441\u043e \u0434\u0440\u0443\u0433 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u0442\u0438\u0440\u0430 \u0432\u043e \u0437\u0430\u0433\u0443\u0431\u0430 \u043d\u0430 \u043f\u043e\u0434\u0430\u0442\u043e\u0446\u0438\u0442\u0435.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"\u0408\u0430\u043d\u0443\u0430\u0440\u0438,\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438,\u041c\u0430\u0440\u0442,\u0410\u043f\u0440\u0438\u043b,\u041c\u0430\u0458,\u0408\u0443\u043d\u0438,\u0408\u0443\u043b\u0438,\u0410\u0432\u0433\u0443\u0441\u0442,\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438,\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438,\u041d\u043e\u0435\u043c\u0432\u0440\u0438,\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438","months_short":"\u0408\u0430\u043d,\u0424\u0435\u0432,\u041c\u0430\u0440,\u0410\u043f\u0440,\u041c\u0430\u0458,\u0408\u0443\u043d,\u0408\u0443\u043b,\u0410\u0432\u0433,\u0421\u0435\u043f,\u041e\u043a\u0442,\u041d\u043e\u0435,\u0414\u0435\u043a","day_long":"\u041d\u0435\u0434\u0435\u043b\u0430,\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a,\u0412\u0442\u043e\u0440\u043d\u0438\u043a,\u0421\u0440\u0435\u0434\u0430,\u0427\u0435\u0442\u0432\u0440\u0442\u043e\u043a,\u041f\u0435\u0442\u043e\u043a,\u0421\u0430\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0435\u043b\u0430","day_short":"\u041d\u0435\u0434,\u041f\u043e\u043d,\u0412\u0442\u043e,\u0421\u0440\u0435,\u0427\u0435\u0442,\u041f\u0435\u0442,\u0421\u0430\u0431,\u041d\u0435\u0434"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ml_dlg.js
new file mode 100644
index 000000000..ce9cc5f6f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f, \u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f, \u0d2e\u0d3e\u0d30\u0d4d\u200d\u0d1a\u0d4d\u0d1a\u0d41\u0d4d, \u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d\u200d, \u0d2e\u0d46\u0d2f\u0d4d, \u0d1c\u0d41\u0d23\u0d4d\u200d, \u0d1c\u0d42\u0d32\u0d3e\u0d2f\u0d4d, \u0d06\u0d17\u0d38\u0d4d\u0d24\u0d4d, \u0d38\u0d46\u0d2a\u0d4d\u0d24\u0d02\u0d2c\u0d30\u0d4d\u200d, \u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d\u200d, \u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d\u200d, \u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d\u200d","months_short":"\u0d1c\u0d28\u0d41, \u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41, \u0d2e\u0d3e\u0d30\u0d4d\u200d, \u0d0f\u0d2a\u0d4d\u0d30\u0d3f, \u0d2e\u0d46, \u0d1c\u0d41\u0d23\u0d4d\u200d, \u0d1c\u0d42\u0d32\u0d3e, \u0d06\u0d17, \u0d38\u0d46\u0d2a\u0d4d\u0d24\u0d02, \u0d12\u0d15\u0d4d\u0d1f\u0d4b, \u0d28\u0d35\u0d02, \u0d21\u0d3f\u0d38\u0d02","day_long":"\u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d, \u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d, \u0d1a\u0d4a\u0d35\u0d4d\u0d35, \u0d2c\u0d41\u0d27\u0d28\u0d4d\u200d, \u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02, \u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f, \u0d36\u0d28\u0d3f, \u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d","day_short":"\u0d1e\u0d3e, \u0d24\u0d3f, \u0d1a\u0d4a, \u0d2c\u0d41, \u0d35\u0d4d\u0d2f\u0d3e, \u0d35\u0d46, \u0d36, \u0d1e\u0d3e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/mn_dlg.js
new file mode 100644
index 000000000..2d053438d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.template_dlg',{title:"\u0425\u044d\u0432",label:"\u0425\u044d\u0432","desc_label":"\u0422\u0430\u0439\u043b\u0431\u0430\u0440",desc:"\u0411\u044d\u043b\u0442\u0433\u044d\u0441\u044d\u043d \u0445\u044d\u0432 \u043e\u0440\u0443\u0443\u043b\u0430\u0445",select:"\u0425\u044d\u0432 \u0441\u043e\u043d\u0433\u043e\u0445",preview:"\u041d\u044f\u0433\u0442\u043b\u0430\u043d \u0445\u0430\u0440\u0430\u0445",warning:"\u0421\u0430\u043d\u0430\u043c\u0436: \u0425\u044d\u0432 \u04e9\u04e9\u0440 \u0448\u0438\u043d\u044d\u0447\u043b\u044d\u0445\u044d\u0434 \u04e9\u0433\u04e9\u0433\u0434\u043b\u0438\u0439\u043d \u0430\u043b\u0434\u0430\u0433\u0434\u0430\u043b \u0433\u0430\u0440\u0447 \u0431\u043e\u043b\u0437\u043e\u0448\u0433\u04af\u0439!","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0425\u0443\u043b\u0433\u0430\u043d\u0430,\u04ae\u0445\u044d\u0440,\u0411\u0430\u0440,\u0422\u0443\u0443\u043b\u0430\u0439,\u041b\u0443\u0443,\u041c\u043e\u0433\u043e\u0439,\u041c\u043e\u0440\u044c,\u0425\u043e\u043d\u044c,\u0411\u0438\u0447,\u0422\u0430\u0445\u0438\u0430,\u041d\u043e\u0445\u043e\u0439,\u0413\u0430\u0445\u0430\u0439","months_short":"\u0425\u0443\u043b,\u04ae\u0445\u044d,\u0411\u0430\u0440,\u0422\u0443\u0443,\u041b\u0443\u0443,\u041c\u043e\u0433,\u041c\u043e\u0440,\u0425\u043e\u043d,\u0411\u0438\u0447,\u0422\u0430\u0445,\u041d\u043e\u0445,\u0413\u0430\u0445","day_long":"\u041d\u044f\u043c,\u0414\u0430\u0432\u0430\u0430,\u041c\u044f\u0433\u043c\u0430\u0440,\u041b\u0445\u0430\u0433\u0432\u0430,\u041f\u04af\u0440\u044d\u0432,\u0411\u0430\u0430\u0441\u0430\u043d,\u0411\u044f\u043c\u0431\u0430,\u041d\u044f\u043c","day_short":"\u041d\u044f,\u0414\u0430,\u041c\u044f,\u041b\u0445,\u041f\u04af,\u0411\u0430,\u0411\u044f,\u041d\u044f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ms_dlg.js
new file mode 100644
index 000000000..52a065480
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.template_dlg',{title:"Templet",label:"Templet","desc_label":"Huraian",desc:"Masukkan pra takrifan kandungan templet",select:"Pilih templet",preview:"Pratonton",warning:"Amaran: Memperbaharui template dengan yang lain akan menyebabkan kehilangan data.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januari,Febuari,Mac,April,Mei,Jun,Julai,Ogos,September,Oktober,November,Disember","months_short":"Jan,Feb,Mac,Apr,Mei,Jun,Jul,Ogo,Sep,Okt,Nov,Dis","day_long":"Ahad,Isnin,Selasa,Rabu,Khamis,Jumaat,Sabtu,Ahad","day_short":"Aha,Isn,Sel,Rab,Kha,Jum,Sab,Aha"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/my_dlg.js
new file mode 100644
index 000000000..2f663ae9b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.template_dlg',{"mdate_format":"\">%Y-\u1001\u102f\u1014\u103e\u1005\u103a\u104a %B\u101c\u104a %d-\u101b\u1000\u103a\u1031\u1014\u1037 %H \u1014\u102c\u101b\u102e : %M \u1019\u102d\u1014\u1005\u103a : %S \u1005\u1000\u1039\u1000\u1014\u103a\u1037","cdate_format":"%Y-\u1001\u102f\u1014\u103e\u1005\u103a\u104a %B\u101c\u104a %d-\u101b\u1000\u103a\u1031\u1014\u1037 %H \u1014\u102c\u101b\u102e : %M \u1019\u102d\u1014\u1005\u103a : %S \u1005\u1000\u1039\u1000\u1014\u103a\u1037","months_long":"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e,\u1031\u1016\u1031\u1016\u102c\u103a\u101d\u102b\u101b\u102e,\u1019\u1010\u103a,\u1027\u103c\u1015\u102e,\u1031\u1019,\u1007\u103d\u1014\u103a,\u1007\u1030\u101c\u102d\u102f\u1004\u103a,\u1029\u1002\u102f\u1010\u103a,\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c,\u1031\u1021\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c,\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c,\u1012\u102e\u1007\u1004\u103a\u1018\u102c","months_short":"\u1007\u1014\u103a,\u1031\u1016,\u1019\u1010\u103a,\u1027\u103c\u1015\u102e,\u1031\u1019,\u1007\u103d\u1014\u103a,\u1007\u1030,\u1029,\u1005\u1000\u103a,\u1031\u1021\u102c\u1000\u103a,\u1014\u102d\u102f\u101d\u1004\u103a,\u1012\u102e\u1007\u1004\u103a","day_long":"\u1010\u1014\u1002\u1004\u103a\u1039\u1031\u1014\u103d,\u1010\u1014\u101c\u1004\u103a\u1039\u102c,\u1021\u1002\u1004\u103a\u1039\u102b,\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038,\u103c\u1000\u102c\u101e\u1015\u1031\u1010\u1038,\u1031\u101e\u102c\u103c\u1000\u102c,\u1005\u1031\u1014,\u1010\u1014\u1002\u1004\u103a\u1039\u1031\u1014\u103d","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun",title:"Templates",label:"Template","desc_label":"Description",desc:"Insert Predefined Template Content",select:"Select a Template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nb_dlg.js
new file mode 100644
index 000000000..4f2bc593d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.template_dlg',{title:"Maler",label:"Mal","desc_label":"Beskrivelse",desc:"Sett inn forh\u00e5ndsdefinert malinnhold",select:"Velg en mal",preview:"Forh\u00e5ndsvisning",warning:"Advarsel: Utskifting av en mal med en annen kan f\u00f8re til at data g\u00e5r tapt.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des","day_long":"s\u00f8ndag,mandag,tirsdag,onsdag,torsdag,fredag,l\u00f8rdag,s\u00f8ndag","day_short":"s\u00f8n,man,tir,ons,tor,fre,l\u00f8r,s\u00f8n"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nl_dlg.js
new file mode 100644
index 000000000..acd330419
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.template_dlg',{title:"Sjablonen",label:"Sjabloon","desc_label":"Beschrijving",desc:"Voorgedefinieerd sjabloon invoegen",select:"Selecteer een sjabloon",preview:"Voorbeeld",warning:"Waarschuwing: het bijwerken van een sjabloon met een andere kan het verlies van informatie tot gevolg hebben.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Januari,Februari,Maart,April,Mei,Juni,Juli,Augustus,September,Oktober,November,December","months_short":"Jan,Feb,Mar,Apr,Mei,Jun,Jul,Aug,Sep,Okt,Nov,Dec","day_long":"Zondag,Maandag,Dinsdag,Woensdag,Donderdag,Vrijdag,Zaterdag,Zondag","day_short":"zo,ma,di,wo,do,vr,za,zo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nn_dlg.js
new file mode 100644
index 000000000..8900919a2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.template_dlg',{title:"Malar",label:"Mal","desc_label":"Omtale",desc:"Set inn f\u00f8rehandsdefinert malinnhald",select:"Vel ein mal",preview:"Sj\u00e5 f\u00f8rebels utkast",warning:"\u00c5tvaring: Utskifting av ein mal med ein annen kan f\u00f8re til at data g\u00e5r tapt.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des","day_long":"sundag,mandag,tirsdag,onsdag,torsdag,fredag,laurdag,sundag","day_short":"sun,man,tir,ons,tor,fre,l\u00f8r,sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/no_dlg.js
new file mode 100644
index 000000000..f735b6631
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.template_dlg',{title:"Maler",label:"Mal","desc_label":"Beskrivelse",desc:"Sett inn forh\u00e5ndsdefinert malinnhold",select:"Velg en mal",preview:"Forh\u00e5ndsvis",warning:"Advarsel: Oppdatering av mal med en annen kan f\u00f8re til tap av data.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des","day_long":"s\u00f8ndag,mandag,tirsdag,onsdag,torsdag,fredag,l\u00f8rdag,s\u00f8ndag","day_short":"S\u00f8n,Man,Tir,Ons,Tor,Fre,L\u00f8r,S\u00f8n"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/pl_dlg.js
new file mode 100644
index 000000000..82fbb64c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.template_dlg',{title:"Szablony",label:"Szablon","desc_label":"Opis",desc:"Wstaw tre\u015b\u0107 szablonu",select:"Wybierz szablon",preview:"Podgl\u0105d",warning:"Uwaga: Aktualizacja szablon\u00f3w mo\u017ce spowodowa\u0107 utrat\u0119 danych.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Stycze\u0144,Luty,Marzec.Kwiecie\u0144,Maj,Czerwiec,Lipiec,Sierpie\u0144,Wrzesie\u0144,Pa\u017adziernik,Listopad,Grudzie\u0144","months_short":"Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,Pa\u017a,Lis,Gru","day_long":"Niedziela,Poniedzia\u0142ek,Wtorek,\u015aroda,Czwartek,Pi\u0105tek,Sobota,Niedziela","day_short":"N,Pn,Wt,\u015ar,Cz,Pt,So,N"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ps_dlg.js
new file mode 100644
index 000000000..06d005e62
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/pt_dlg.js
new file mode 100644
index 000000000..bc4101435
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.template_dlg',{title:"Templates",label:"Template","desc_label":"Descri\u00e7\u00e3o",desc:"Inserir template",select:"Selecionar template",preview:"Pr\u00e9-Visualiza\u00e7\u00e3o",warning:"Aten\u00e7\u00e3o: Atualizar um template com outro pode causar a perda de dados.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Janeiro,Fevereiro,Mar\u00e7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro","months_short":"Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez","day_long":"Domingo,Segunda-feira,Ter\u00e7a-feira,Quarta-feira,Quinta-feira,Sexta-feira,S\u00e1bado,Domingo","day_short":"Dom,Seg,Ter,Qua,Qui,Sex,Sab,Dom"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ro_dlg.js
new file mode 100644
index 000000000..c326651aa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.template_dlg',{title:"\u0218abloane",label:"\u0218ablon","desc_label":"Descriere",desc:"Insereaz\u0103 \u0219ablon",select:"Selecteaz\u0103 \u0219ablon",preview:"Previzualizare",warning:"Aten\u0163ie: Schimbarea \u0219ablonului poate provoca pierderi de date","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Ianuarie,Februarie,Martie,Aprilie,Mai,Iunie,Iulie,August,Septembrie,Octombrie,Noiembrie,Decembrie","months_short":"Ian,Feb,Mar,Apr,Mai,Iun,Iul,Aug,Sep,Oct,Noi,Dec","day_long":"Duminic\u0103,Luni,Mar\u021bi,Miercuri,Joi,Vineri,S\u00e2mb\u0103t\u0103,Duminic\u0103","day_short":"Dum,Lun,Mar,Mie,Joi,Vin,S\u00e2m,Dum"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ru_dlg.js
new file mode 100644
index 000000000..86d2137f5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.template_dlg',{title:"\u0428\u0430\u0431\u043b\u043e\u043d\u044b",label:"\u0428\u0430\u0431\u043b\u043e\u043d","desc_label":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d",select:"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d",preview:"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440",warning:"\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u0442\u0435\u0440\u044f\u043c \u0434\u0430\u043d\u043d\u044b\u0445/","mdate_format":"%Y.%m.%d %H:%M:%S","cdate_format":"%Y.%m.%d %H:%M:%S","months_long":"\u044f\u043d\u0432\u0430\u0440\u044c,\u0444\u0435\u0432\u0440\u0430\u043b\u044c,\u043c\u0430\u0440\u0442,\u0430\u043f\u0440\u0435\u043b\u044c,\u043c\u0430\u0439,\u0438\u044e\u043d\u044c,\u0438\u044e\u043b\u044c,\u0430\u0432\u0433\u0443\u0441\u0442,\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c,\u043e\u043a\u0442\u044f\u0431\u0440\u044c,\u043d\u043e\u044f\u0431\u0440\u044c,\u0434\u0435\u043a\u0430\u0431\u0440\u044c","months_short":"\u044f\u043d\u0432,\u0444\u0435\u0432,\u043c\u0430\u0440\u0442,\u0430\u043f\u0440,\u043c\u0430\u0439,\u0438\u044e\u043d\u044c,\u0438\u044e\u043b\u044c,\u0430\u0432\u0433,\u0441\u0435\u043d,\u043e\u043a\u0442,\u043d\u043e\u044f,\u0434\u0435\u043a","day_long":"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435,\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a,\u0432\u0442\u043e\u0440\u043d\u0438\u043a,\u0441\u0440\u0435\u0434\u0430,\u0447\u0435\u0442\u0432\u0435\u0440\u0433,\u043f\u044f\u0442\u043d\u0438\u0446\u0443,\u0441\u0443\u0431\u0431\u043e\u0442\u0430,\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435","day_short":"\u0432\u0441,\u043f\u043d,\u0432\u0442,\u0441\u0440,\u0447\u0442,\u043f\u0442,\u0441\u0431,\u0432\u0441"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sc_dlg.js
new file mode 100644
index 000000000..de67d9560
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.template_dlg',{title:"\u8303\u672c\u6807\u9898",label:"\u8303\u672c","desc_label":"\u63cf\u8ff0",desc:"\u63d2\u5165\u9884\u5b9a\u7684\u8303\u672c\u5185\u5bb9",select:"\u9009\u62e9\u8303\u672c",preview:"\u9884\u89c8",warning:"\u8b66\u544a:\u66f4\u65b0\u8303\u672c\u6709\u53ef\u80fd\u5bfc\u81f4\u8d44\u6599\u9057\u5931\u3002 ","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708\uff0c\u4e8c\u6708\uff0c\u4e09\u6708\uff0c\u56db\u6708\uff0c\u4e94\u6708\uff0c\u516d\u6708\uff0c\u4e03\u6708\uff0c\u516b\u6708\uff0c\u4e5d\u6708\uff0c\u5341\u6708\uff0c\u5341\u4e00\u6708\uff0c\u5341\u4e8c\u6708","months_short":"1\u6708\uff0c2\u6708\uff0c3\u6708\uff0c4\u6708\uff0c5\u6708\uff0c6\u6708\uff0c7\u6708\uff0c8\u6708\uff0c9\u6708\uff0c10\u6708\uff0c11\u6708\uff0c12\u6708","day_long":"\u661f\u671f\u65e5\uff0c\u661f\u671f\u4e00\uff0c\u661f\u671f\u4e8c\uff0c\u661f\u671f\u4e09\uff0c\u661f\u671f\u56db\uff0c\u661f\u671f\u4e94\uff0c\u661f\u671f\u516d\uff0c\u661f\u671f\u65e5","day_short":"\u5468\u65e5\uff0c\u5468\u4e00\uff0c\u5468\u4e8c\uff0c\u5468\u4e09\uff0c\u5468\u56db\uff0c\u5468\u4e94\uff0c\u5468\u516d\uff0c\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/se_dlg.js
new file mode 100644
index 000000000..e0a010782
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.template_dlg',{title:"Mallar",label:"Mall","desc_label":"Beskrivning",desc:"Infoga en f\u00e4rdig mall",select:"V\u00e4lj en mall",preview:"F\u00f6rhandsgranska",warning:"Varning: Uppdaterar en mall men en ny kan inneb\u00e4ra att data f\u00f6rsvinner.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januari,Februari,Mars,April,Maj,Juni,Juli,Augusti,September,Oktober,November,December","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","day_long":"S\u00f6ndag,M\u00e5ndag,Tisdag,Onsdag,Torsdag,Fredag,L\u00f6rdag,S\u00f6ndag","day_short":"S\u00f6n,M\u00e5n,Tis,Ons,Tors,Fre,L\u00f6r,S\u00f6n"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/si_dlg.js
new file mode 100644
index 000000000..727d66d13
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sk_dlg.js
new file mode 100644
index 000000000..a6ce09c93
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.template_dlg',{title:"\u0160abl\u00f3ny",label:"\u0160abl\u00f3na","desc_label":"Popis",desc:"Vlo\u017ei\u0165 preddefinovan\u00fd obsah zo \u0161abl\u00f3ny",select:"Vyber \u0161abl\u00f3nu",preview:"N\u00e1h\u013ead",warning:"Upozornenie: Aktualiz\u00e1cia \u0161abl\u00f3ny inou, sp\u00f4sob\u00ed stratu d\u00e1t.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"Janu\u00e1r,Febru\u00e1r,Marec,Apr\u00edl,M\u00e1j,J\u00fan,J\u00fal,August,September,Okt\u00f3ber,November,December","months_short":"Jan,Feb,Mar,Apr,M\u00e1j,J\u00fan,J\u00fal,Aug,Sep,Okt,Nov,Dec","day_long":"Nede\u013ea,Pondelok,Utorok,Streda,\u0160tvrtok,Piatok,Sobota,Nede\u013ea","day_short":"Ne,Po,Ut,St,\u0160t,Pi,So,Ne"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sl_dlg.js
new file mode 100644
index 000000000..8c08beb80
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.template_dlg',{title:"Predloge",label:"Predloga","desc_label":"Opis",desc:"Vstavi pripravljeno vsebino predloge",select:"Izberite predlogo",preview:"Predogled",warning:"Opozorilo: posodabljanje predloge lahko pripelje od izgube podatkov.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december","months_short":"jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec","day_long":"nedelja,ponedeljek,torek,sreda,\u010detrtek,petek,sobota,nedelja","day_short":"ned,pon,tor,sre,\u010det,pet,sob,ned"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sq_dlg.js
new file mode 100644
index 000000000..80392164e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.template_dlg',{title:"Shabllonet",label:"Shabllon","desc_label":"P\u00ebrshkrimi",desc:"Fut p\u00ebrmbajtje shabllon",select:"Zgjidh nj\u00eb shabllon",preview:"Paraqitje",warning:"Kujdes: N\u00ebse rifreskoni nj\u00eb shabllon me nj\u00eb tjeter, mund t\u00eb humbisni t\u00eb dh\u00ebnat.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Janar,Shkurt,Mars,Prill,Maj,Qershor,Korrik,Gusht,Shtator,Tetor,N\u00ebntor,Dhjetor","months_short":"Jan,Shk,Mar,Pri,Maj,Qer,Kor,Gus,Sht,Tet,N\u00ebn,Dhj","day_long":"E Djel\u00eb,E H\u00ebn\u00eb,E Mart\u00eb,E M\u00ebrkur\u00eb,E Enjte,E Premte,E Shtun\u00eb,E Djel\u00eb","day_short":"Dje,H\u00ebn,Mar,M\u00ebr,Enj,Pre,Sht,Dje"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sr_dlg.js
new file mode 100644
index 000000000..d50032d5e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.template_dlg',{title:"\u0160abloni",label:"\u0160ablon","desc_label":"Opis",desc:"Umetni predefinisani sadr\u017eaj \u0161ablona",select:"Odaberi \u0161ablon",preview:"Preliminarni prikaz",warning:"Upozorenje: A\u017euriranje \u0161ablona druga\u010dijim \u0161ablonom mo\u017ee da dovede do gubitka podataka.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"januar,februar,mart,april,maj,juni,juli,avgust,septembar,oktobar,novembar,decembar","months_short":"jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec","day_long":"nedelja,ponedeljak,utorak,sreda,\u010detvrtak,petak,subota,nedelja","day_short":"ned,pon,uto,sri,\u010det,pet,sub,ned"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sv_dlg.js
new file mode 100644
index 000000000..add47e87f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.template_dlg',{title:"Mallar",label:"Mall","desc_label":"Beskrivning",desc:"Infoga en f\u00e4rdig mall",select:"V\u00e4lj en mall",preview:"F\u00f6rhandsgranska",warning:"Varning: Uppdaterar en mall med en ny kan inneb\u00e4ra att data f\u00f6rsvinner.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januari,Februari,Mars,April,Maj,Juni,Juli,Augusti,September,Oktober,November,December","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","day_long":"S\u00f6ndag,M\u00e5ndag,Tisdag,Onsdag,Torsdag,Fredag,L\u00f6rdag,S\u00f6ndag","day_short":"S\u00f6n,M\u00e5n,Tis,Ons,Tors,Fre,L\u00f6r,S\u00f6n"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sy_dlg.js
new file mode 100644
index 000000000..69f88d987
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert Predefined Template Content",select:"Select a Template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ta_dlg.js
new file mode 100644
index 000000000..aae601780
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/te_dlg.js
new file mode 100644
index 000000000..076fcbece
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/th_dlg.js
new file mode 100644
index 000000000..97ce1d0a8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.template_dlg',{title:"\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23",label:"\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23","desc_label":"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14",desc:"\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32",select:"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23",preview:"\u0e14\u0e39\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07",warning:"\u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19: \u0e01\u0e32\u0e23\u0e1b\u0e23\u0e31\u0e1a\u0e1b\u0e23\u0e38\u0e07\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23\u0e17\u0e35\u0e48\u0e41\u0e15\u0e01\u0e15\u0e48\u0e32\u0e07\u0e01\u0e31\u0e19\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e2d\u0e32\u0e08\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2a\u0e39\u0e0d\u0e2b\u0e32\u0e22","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21,\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c,\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21,\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19,\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21,\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19,\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21,\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21,\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19,\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21,\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19,\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21","months_short":"\u0e21.\u0e04.,\u0e01.\u0e1e.,\u0e21\u0e35.\u0e04.,\u0e40\u0e21.\u0e22.,\u0e1e.\u0e04.,\u0e21\u0e34.\u0e22.,\u0e01.\u0e04.,\u0e2a.\u0e04.,\u0e01.\u0e22.,\u0e15.\u0e04.,\u0e1e.\u0e22.,\u0e18.\u0e04.","day_long":"\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c,\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c,\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23,\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18,\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35,\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c,\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c,\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c","day_short":"\u0e2d\u0e32,\u0e08,\u0e2d,\u0e1e,\u0e1e\u0e24,\u0e28,\u0e2a,\u0e2d\u0e32"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tn_dlg.js
new file mode 100644
index 000000000..3389195f3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tr_dlg.js
new file mode 100644
index 000000000..dfa9f2d9d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.template_dlg',{title:"\u015eablonlar",label:"\u015eablon","desc_label":"A\u00e7\u0131klama",desc:"\u00d6ntan\u0131ml\u0131 i\u00e7erik \u015fablonu kullan",select:"\u015eablonu se\u00e7",preview:"\u00d6nizleme",warning:"Uyar\u0131: Bir \u015fablonu bir di\u011feriyle g\u00fcncellemek veri kayb\u0131na yol a\u00e7abilir.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Ocak,\u015eubat,Mart,Nisan,May\u0131s,Haziran,Temmuz,A\u011fustos,Eyl\u00fcl,Ekim,Kas\u0131m,Aral\u0131k","months_short":"Oca,\u015eub,Mar,Nis,May,Haz,Tem,A\u011fu,Eyl,Eki,Kas,Ara","day_long":"Pazar,Pazartesi,Sal\u0131,\u00c7ar\u015famba,Per\u015fembe,Cuma,Cumartesi","day_short":"Paz,Pzt,Sal,\u00c7r\u015f,Per,Cum,Cts"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tt_dlg.js
new file mode 100644
index 000000000..3cd6c9579
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.template_dlg',{title:"\u6a21\u677f\u6e05\u55ae",label:"\u7bc4\u672c","desc_label":"\u63cf\u8ff0",desc:"\u63d2\u5165\u9078\u5b9a\u7684\u7bc4\u672c",select:"\u9078\u64c7\u6a21\u677f",preview:"\u9810\u89bd",warning:"\u8b66\u544a: \u66f4\u65b0\u6a21\u677f\u6709\u53ef\u80fd\u5c0e\u81f4\u8cc7\u6599\u907a\u5931","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u9031\u65e5,\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tw_dlg.js
new file mode 100644
index 000000000..30b77629f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.template_dlg',{title:"\u6a21\u677f\u6a19\u984c",label:"\u6a21\u677f","desc_label":"\u8aaa\u660e",desc:"\u63d2\u5165\u9810\u8a2d\u6a21\u677f",select:"\u9078\u64c7\u6a21\u677f",preview:"\u9810\u89bd",warning:"\u8b66\u544a:\u5957\u7528\u4e0d\u540c\u7684\u6a21\u677f\u6709\u53ef\u80fd\u5c0e\u81f4\u5167\u5bb9\u907a\u5931\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u9031\u65e5,\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/uk_dlg.js
new file mode 100644
index 000000000..a457122eb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.template_dlg',{title:"\u0428\u0430\u0431\u043b\u043e\u043d\u0438",label:"\u0428\u0430\u0431\u043b\u043e\u043d","desc_label":"\u041e\u043f\u0438\u0441",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442",select:"\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d",preview:"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434",warning:"\u0423\u0432\u0430\u0433\u0430: \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043d\u0430 \u0456\u043d\u0448\u0438\u0439 \u043c\u043e\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0434\u043e \u0432\u0442\u0440\u0430\u0442 \u0434\u0430\u043d\u0438\u0445.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0421\u0456\u0447\u0435\u043d\u044c,\u041b\u044e\u0442\u0438\u0439,\u0411\u0435\u0440\u0435\u0437\u0435\u043d\u044c,\u041a\u0432\u0456\u0442\u0435\u043d\u044c,\u0422\u0440\u0430\u0432\u0435\u043d\u044c,\u0427\u0435\u0440\u0432\u0435\u043d\u044c,\u041b\u0438\u043f\u0435\u043d\u044c,\u0421\u0435\u0440\u043f\u0435\u043d\u044c,\u0412\u0435\u0440\u0435\u0441\u0435\u043d\u044c,\u0416\u043e\u0432\u0442\u0435\u043d\u044c,\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434,\u0413\u0440\u0443\u0434\u0435\u043d\u044c","months_short":"\u0421\u0456\u0447,\u041b\u044e\u0442,\u0411\u0435\u0440,\u041a\u0432\u0456,\u0422\u0440\u0430,\u0427\u0435\u0440,\u041b\u0438\u043f,\u0421\u0435\u0440,\u0412\u0435\u0440,\u0416\u043e\u0432,\u041b\u0438\u0441,\u0413\u0440\u0443","day_long":"\u041d\u0435\u0434\u0456\u043b\u044f,\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a,\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a,\u0421\u0435\u0440\u0435\u0434\u0430,\u0427\u0435\u0442\u0432\u0435\u0440,\u041f\'\u044f\u0442\u043d\u0438\u0446\u044f,\u0421\u0443\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0456\u043b\u044f","day_short":"\u041d\u0434,\u041f\u043d,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041f\u0442,\u0421\u0431,\u041d\u0434"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ur_dlg.js
new file mode 100644
index 000000000..9a72b4d62
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/vi_dlg.js
new file mode 100644
index 000000000..1c19becd1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.template_dlg',{title:"M\u1eabu",label:"M\u1eabu","desc_label":"M\u00f4 t\u1ea3",desc:"Ch\u00e8n m\u1ed9t n\u1ed9i dung m\u1eabu \u0111\u1ecbnh ngh\u0129a tr\u01b0\u1edbc",select:"Ch\u1ecdn m\u1ed9t m\u1eabu",preview:"Xem tr\u01b0\u1edbc",warning:"C\u1ea3nh b\u00e1o: C\u1eadp nh\u1eadt m\u1ed9t m\u1eabu v\u1edbi m\u1ed9t s\u1ef1 sai kh\u00e1c c\u00f3 th\u1ec3 l\u00e0m m\u1ea5t d\u1eef li\u1ec7u.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Th\u00e1ng M\u1ed9t,Th\u00e1ng Hai,Th\u00e1ng Ba,Th\u00e1ng T\u01b0,Th\u00e1ng N\u0103m,Th\u00e1ng S\u00e1u,Th\u00e1ng B\u1ea3y,Th\u00e1ng T\u00e1m,Th\u00e1ng Ch\u00edn,Th\u00e1ng M\u01b0\u1eddi,Th\u00e1ng M\u01b0\u1eddi M\u1ed9t,Th\u00e1ng M\u01b0\u1eddi Hai","months_short":"Thg1,Thg2,Thg3,Thg4,Thg5,Thg6,Thg7,Thg8,Thg9,Th10,Th11,Th12","day_long":"Ch\u1ee7 Nh\u1eadt,Th\u1ee9 Hai,Th\u1ee9 Ba,Th\u1ee9 T\u01b0,Th\u1ee9 N\u0103m,Th\u1ee9 S\u00e1u,Th\u1ee9 B\u1ea3y,Ch\u1ee7 Nh\u1eadt","day_short":"CN,T2,T3,T4,T5,T6,T7,CN"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..a6217b9b7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.template_dlg',{title:"\u6a21\u677f",label:"\u6a21\u677f","desc_label":"\u8bf4\u660e",desc:"\u63d2\u5165\u9884\u8bbe\u7684\u6a21\u677f\u5185\u5bb9",select:"\u9009\u62e9\u6a21\u677f",preview:"\u9884\u89c8",warning:"\u8b66\u544a\uff1a\u66f4\u65b0\u6a21\u677f\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u4e22\u5931\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..e86dd3d77
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.template_dlg',{title:"\u7248\u578b",label:"\u7248\u578b","desc_label":"\u8a3b\u89e3",desc:"\u5957\u7248\u7248\u578b\u7684\u5167\u5bb9",select:"\u9078\u4e00\u500b\u7248\u578b",preview:"\u9810\u89bd",warning:"\u66f4\u65b0\u7248\u578b\u53ef\u80fd\u6703\u628a\u4e4b\u524d\u7684\u8cc7\u6599\u5f04\u4e0d\u898b\u5594\uff01","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","day_long":"\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh_dlg.js
new file mode 100644
index 000000000..7142a96d6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.template_dlg',{title:"\u6a23\u677f\u6a19\u984c",label:"\u6a23\u677f","desc_label":"\u8aaa\u660e",desc:"\u63d2\u5165\u5df2\u5b9a\u7fa9\u7684\u6a23\u677f",select:"\u9078\u64c7\u6a23\u677f",preview:"\u9810\u89bd",warning:"\u8b66\u544a: \u5957\u7528\u4e0d\u540c\u7684\u6a23\u677f\u6709\u53ef\u80fd\u5c0e\u81f4\u8cc7\u6599\u6d41\u5931.","mdate_format":"%Y/%m/%d %H:%M:%S","cdate_format":"%Y/%m/%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u65e5,\u4e00,\u4e8c,\u4e09,\u56db,\u4e94,\u516d,\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zu_dlg.js
new file mode 100644
index 000000000..3603c430a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.template_dlg',{title:"\u8303\u672c\u6807\u9898",label:"\u8303\u672c","desc_label":"\u63cf\u8ff0",desc:"\u63d2\u5165\u9884\u5b9a\u7684\u8303\u672c\u5185\u5bb9",select:"\u9009\u62e9\u8303\u672c",preview:"\u9884\u89c8",warning:"\u8b66\u544a:\u66f4\u65b0\u8303\u672c\u6709\u53ef\u80fd\u5bfc\u81f4\u8d44\u6599\u9057\u5931\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708\uff0c\u4e8c\u6708\uff0c\u4e09\u6708\uff0c\u56db\u6708\uff0c\u4e94\u6708\uff0c\u516d\u6708\uff0c\u4e03\u6708\uff0c\u516b\u6708\uff0c\u4e5d\u6708\uff0c\u5341\u6708\uff0c\u5341\u4e00\u6708\uff0c\u5341\u4e8c\u6708","months_short":"1\u6708\uff0c2\u6708\uff0c3\u6708\uff0c4\u6708\uff0c5\u6708\uff0c6\u6708\uff0c7\u6708\uff0c8\u6708\uff0c9\u6708\uff0c10\u6708\uff0c11\u6708\uff0c12\u6708","day_long":"\u661f\u671f\u65e5\uff0c\u661f\u671f\u4e00\uff0c\u661f\u671f\u4e8c\uff0c\u661f\u671f\u4e09\uff0c\u661f\u671f\u56db\uff0c\u661f\u671f\u4e94\uff0c\u661f\u671f\u516d\uff0c\u661f\u671f\u65e5","day_short":"\u5468\u65e5\uff0c\u5468\u4e00\uff0c\u5468\u4e8c\uff0c\u5468\u4e09\uff0c\u5468\u56db\uff0c\u5468\u4e94\uff0c\u5468\u516d\uff0c\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/template.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/template.htm
new file mode 100644
index 000000000..b2182e632
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/template/template.htm
@@ -0,0 +1,31 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>{#template_dlg.title}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/template.js"></script>
+ <link href="css/template.css" rel="stylesheet" type="text/css" />
+</head>
+<body onresize="TemplateDialog.resize();">
+ <form onsubmit="TemplateDialog.insert();return false;">
+ <div id="frmbody">
+ <div class="title">{#template_dlg.desc}</div>
+ <div class="frmRow"><label for="tpath" title="{#template_dlg.select}">{#template_dlg.label}:</label>
+ <select id="tpath" name="tpath" onchange="TemplateDialog.selectTemplate(this.options[this.selectedIndex].value, this.options[this.selectedIndex].text);" class="mceFocus">
+ <option value="">{#template_dlg.select}...</option>
+ </select>
+ <span id="warning"></span></div>
+ <div class="frmRow"><label for="tdesc">{#template_dlg.desc_label}:</label>
+ <span id="tmpldesc"></span></div>
+ <fieldset>
+ <legend>{#template_dlg.preview}</legend>
+ <iframe id="templatesrc" name="templatesrc" src="blank.htm" width="690" height="400" frameborder="0"></iframe>
+ </fieldset>
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+ </form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js
new file mode 100644
index 000000000..1a148e8b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js
new file mode 100644
index 000000000..df985905b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/visualchars/editor_plugin_src.js
@@ -0,0 +1,83 @@
+/**
+ * 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.VisualChars', {
+ init : function(ed, url) {
+ var t = this;
+
+ t.editor = ed;
+
+ // Register commands
+ ed.addCommand('mceVisualChars', t._toggleVisualChars, t);
+
+ // Register buttons
+ ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'});
+
+ ed.onBeforeGetContent.add(function(ed, o) {
+ if (t.state && o.format != 'raw' && !o.draft) {
+ t.state = true;
+ t._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
+ };
+ },
+
+ // Private methods
+
+ _toggleVisualChars : function(bookmark) {
+ var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm;
+
+ t.state = !t.state;
+ ed.controlManager.setActive('visualchars', t.state);
+
+ if (bookmark)
+ bm = s.getBookmark();
+
+ if (t.state) {
+ nl = [];
+ tinymce.walk(b, function(n) {
+ if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1)
+ nl.push(n);
+ }, 'childNodes');
+
+ for (i = 0; i < nl.length; i++) {
+ nv = nl[i].nodeValue;
+ nv = nv.replace(/(\u00a0)/g, '<span data-mce-bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');
+
+ div = ed.dom.create('div', null, nv);
+ while (node = div.lastChild)
+ ed.dom.insertAfter(node, nl[i]);
+
+ ed.dom.remove(nl[i]);
+ }
+ } else {
+ nl = ed.dom.select('span.mceItemNbsp', b);
+
+ for (i = nl.length - 1; i >= 0; i--)
+ ed.dom.remove(nl[i], 1);
+ }
+
+ s.moveToBookmark(bm);
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js
new file mode 100644
index 000000000..a752ad32a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin.js
@@ -0,0 +1 @@
+(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(){if(!a.destroyed){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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js
new file mode 100644
index 000000000..e94743bae
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/wordcount/editor_plugin_src.js
@@ -0,0 +1,114 @@
+/**
+ * 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.WordCount', {
+ block : 0,
+ id : null,
+ countre : null,
+ cleanre : null,
+
+ init : function(ed, url) {
+ var t = this, last = 0;
+
+ t.countre = ed.getParam('wordcount_countregex', /[\w\u2019\'-]+/g); // u2019 == &rsquo;
+ t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$?\'\"_+=\\\/-]*/g);
+ t.id = ed.id + '-word-count';
+
+ ed.onPostRender.add(function(ed, cm) {
+ var row, id;
+
+ // Add it to the specified id or the theme advanced path
+ id = ed.getParam('wordcount_target_id');
+ if (!id) {
+ row = tinymce.DOM.get(ed.id + '_path_row');
+
+ if (row)
+ tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '<span id="' + t.id + '">0</span>');
+ } else {
+ tinymce.DOM.add(id, 'span', {}, '<span id="' + t.id + '">0</span>');
+ }
+ });
+
+ ed.onInit.add(function(ed) {
+ ed.selection.onSetContent.add(function() {
+ t._count(ed);
+ });
+
+ t._count(ed);
+ });
+
+ ed.onSetContent.add(function(ed) {
+ t._count(ed);
+ });
+
+ ed.onKeyUp.add(function(ed, e) {
+ if (e.keyCode == last)
+ return;
+
+ if (13 == e.keyCode || 8 == last || 46 == last)
+ t._count(ed);
+
+ last = e.keyCode;
+ });
+ },
+
+ _getCount : function(ed) {
+ var tc = 0;
+ var tx = ed.getContent({ format: 'raw' });
+
+ if (tx) {
+ tx = tx.replace(/\.\.\./g, ' '); // convert ellipses to spaces
+ tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/&nbsp;|&#160;/gi, ' '); // remove html tags and space chars
+
+ // deal with html entities
+ tx = tx.replace(/(\w+)(&.+?;)+(\w+)/, "$1$3").replace(/&.+?;/g, ' ');
+ tx = tx.replace(this.cleanre, ''); // remove numbers and punctuation
+
+ var wordArray = tx.match(this.countre);
+ if (wordArray) {
+ tc = wordArray.length;
+ }
+ }
+
+ return tc;
+ },
+
+ _count : function(ed) {
+ var t = this;
+
+ // Keep multiple calls from happening at the same time
+ if (t.block)
+ return;
+
+ t.block = 1;
+
+ setTimeout(function() {
+ if (!ed.destroyed) {
+ var tc = t._getCount(ed);
+ tinymce.DOM.setHTML(t.id, tc.toString());
+ setTimeout(function() {t.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);
+})();
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm
new file mode 100644
index 000000000..30a894f7c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/abbr.htm
@@ -0,0 +1,142 @@
+<!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>{#xhtmlxtras_dlg.title_abbr_element}</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/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
+ <script type="text/javascript" src="js/element_common.js"></script>
+ <script type="text/javascript" src="js/abbr.js"></script>
+ <link rel="stylesheet" type="text/css" href="css/popup.css" />
+</head>
+<body style="display: none" role="application" aria-labelledby="app_title">
+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_abbr_element}</span>
+<form onsubmit="insertAbbr();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
+ <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
+ <td><input id="id" name="id" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td>
+ <td>
+ <select id="class" name="class" class="field mceEditableSelect">
+ <option value="">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
+ <td><input id="style" name="style" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
+ <td>
+ <select id="dir" name="dir" class="field">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option>
+ <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
+ <td>
+ <input id="lang" name="lang" type="text" value="" class="field" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ <div id="events_panel" class="panel">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
+
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label for="onfocus">onfocus</label>:</td>
+ <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onblur">onblur</label>:</td>
+ <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onclick">onclick</label>:</td>
+ <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td>
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td>
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td>
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td>
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td>
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td>
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td>
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td>
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td>
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#update}" />
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAbbr();" style="display: none;" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm
new file mode 100644
index 000000000..c10934592
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/acronym.htm
@@ -0,0 +1,142 @@
+<!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>{#xhtmlxtras_dlg.title_acronym_element}</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/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
+ <script type="text/javascript" src="js/element_common.js"></script>
+ <script type="text/javascript" src="js/acronym.js"></script>
+ <link rel="stylesheet" type="text/css" href="css/popup.css" />
+</head>
+<body style="display: none" role="application" aria-labelledby="app_title">
+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_acronym_element}</span>
+<form onsubmit="insertAcronym();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
+ <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
+ <td><input id="id" name="id" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td>
+ <td>
+ <select id="class" name="class" class="field mceEditableSelect">
+ <option value="">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
+ <td><input id="style" name="style" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
+ <td>
+ <select id="dir" name="dir" class="field">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option>
+ <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
+ <td>
+ <input id="lang" name="lang" type="text" value="" class="field" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ <div id="events_panel" class="panel">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
+
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label for="onfocus">onfocus</label>:</td>
+ <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onblur">onblur</label>:</td>
+ <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onclick">onclick</label>:</td>
+ <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td>
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td>
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td>
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td>
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td>
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td>
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td>
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td>
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td>
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#update}" />
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAcronym();" style="display: none;" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm
new file mode 100644
index 000000000..e8d606a34
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/attributes.htm
@@ -0,0 +1,149 @@
+<!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>{#xhtmlxtras_dlg.attribs_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/attributes.js"></script>
+ <link rel="stylesheet" type="text/css" href="css/attributes.css" />
+</head>
+<body style="display: none" role="application" aria-labelledby="app_title">
+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.attribs_title}</span>
+<form onsubmit="insertAction();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.attribute_attrib_tab}</legend>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
+ <td><input id="title" name="title" type="text" value="" class="mceFocus" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
+ <td><input id="id" name="id" type="text" value="" /></td>
+ </tr>
+ <tr>
+ <td><label id="classlabel" for="classlist">{#class_name}</label></td>
+ <td>
+ <select id="classlist" name="classlist" class="mceEditableSelect">
+ <option value="" selected="selected">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
+ <td><input id="style" name="style" type="text" value="" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
+ <td>
+ <select id="dir" name="dir">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#xhtmlxtras_dlg.option_ltr}</option>
+ <option value="rtl">{#xhtmlxtras_dlg.option_rtl}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
+ <td>
+ <input id="lang" name="lang" type="text" value="" />
+ </td>
+ </tr>
+ <tr>
+ <td><label id="tabindexlabel" for="tabindex">{#xhtmlxtras_dlg.attribute_label_tabindex}</label></td>
+ <td><input type="text" id="tabindex" name="tabindex" value="" /></td>
+ </tr>
+
+ <tr>
+ <td><label id="accesskeylabel" for="accesskey">{#xhtmlxtras_dlg.attribute_label_accesskey}</label></td>
+ <td><input type="text" id="accesskey" name="accesskey" value="" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ <div id="events_panel" class="panel">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.attribute_events_tab}</legend>
+
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label for="onfocus">onfocus</label>:</td>
+ <td><input id="onfocus" name="onfocus" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onblur">onblur</label>:</td>
+ <td><input id="onblur" name="onblur" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onclick">onclick</label>:</td>
+ <td><input id="onclick" name="onclick" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td>
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td>
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td>
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td>
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td>
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td>
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td>
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td>
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td>
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm
new file mode 100644
index 000000000..0ac6bdb66
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/cite.htm
@@ -0,0 +1,142 @@
+<!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>{#xhtmlxtras_dlg.title_cite_element}</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/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
+ <script type="text/javascript" src="js/element_common.js"></script>
+ <script type="text/javascript" src="js/cite.js"></script>
+ <link rel="stylesheet" type="text/css" href="css/popup.css" />
+</head>
+<body style="display: none" role="application" aria-labelledby="app_title">
+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_cite_element}</span>
+<form onsubmit="insertCite();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
+ <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
+ <td><input id="id" name="id" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td>
+ <td>
+ <select id="class" name="class" class="field mceEditableSelect">
+ <option value="">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
+ <td><input id="style" name="style" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
+ <td>
+ <select id="dir" name="dir" class="field">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option>
+ <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
+ <td>
+ <input id="lang" name="lang" type="text" value="" class="field" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ <div id="events_panel" class="panel">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
+
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label for="onfocus">onfocus</label>:</td>
+ <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onblur">onblur</label>:</td>
+ <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onclick">onclick</label>:</td>
+ <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td>
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td>
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td>
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td>
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td>
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td>
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td>
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td>
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td>
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#update}" />
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeCite();" style="display: none;" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css
new file mode 100644
index 000000000..9a6a235c3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css
@@ -0,0 +1,11 @@
+.panel_wrapper div.current {
+ height: 290px;
+}
+
+#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey {
+ width: 200px;
+}
+
+#events_panel input {
+ width: 200px;
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css
new file mode 100644
index 000000000..e67114dba
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/css/popup.css
@@ -0,0 +1,9 @@
+input.field, select.field {width:200px;}
+input.picker {width:179px; margin-left: 5px;}
+input.disabled {border-color:#F2F2F2;}
+img.picker {vertical-align:text-bottom; cursor:pointer;}
+h1 {padding: 0 0 5px 0;}
+.panel_wrapper div.current {height:160px;}
+#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;}
+a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;}
+#datetime {width:180px;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm
new file mode 100644
index 000000000..5f667510f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/del.htm
@@ -0,0 +1,162 @@
+<!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>{#xhtmlxtras_dlg.title_del_element}</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/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
+ <script type="text/javascript" src="js/element_common.js"></script>
+ <script type="text/javascript" src="js/del.js"></script>
+ <link rel="stylesheet" type="text/css" href="css/popup.css" />
+</head>
+<body id="xhtmlxtrasins" style="display: none" role="application" aria-labelledby="app_title">
+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_del_element}</span>
+<form onsubmit="insertDel();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td>
+ <td>
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td>
+ <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>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td>
+ <td><input id="cite" name="cite" type="text" value="" class="field" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
+ <td><input id="title" name="title" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
+ <td><input id="id" name="id" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td>
+ <td>
+ <select id="class" name="class" class="field mceEditableSelect">
+ <option value="">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
+ <td><input id="style" name="style" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
+ <td>
+ <select id="dir" name="dir" class="field">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option>
+ <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
+ <td>
+ <input id="lang" name="lang" type="text" value="" class="field" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ <div id="events_panel" class="panel">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
+
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label for="onfocus">onfocus</label>:</td>
+ <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onblur">onblur</label>:</td>
+ <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onclick">onclick</label>:</td>
+ <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td>
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td>
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td>
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td>
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td>
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td>
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td>
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td>
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td>
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#update}" />
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeDel();" style="display: none;" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js
new file mode 100644
index 000000000..9b98a5154
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js
new file mode 100644
index 000000000..f24057211
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js
@@ -0,0 +1,132 @@
+/**
+ * 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.XHTMLXtrasPlugin', {
+ init : function(ed, url) {
+ // Register commands
+ ed.addCommand('mceCite', function() {
+ ed.windowManager.open({
+ file : url + '/cite.htm',
+ width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)),
+ height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ ed.addCommand('mceAcronym', function() {
+ ed.windowManager.open({
+ file : url + '/acronym.htm',
+ width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),
+ height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ ed.addCommand('mceAbbr', function() {
+ ed.windowManager.open({
+ file : url + '/abbr.htm',
+ width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),
+ height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ ed.addCommand('mceDel', function() {
+ ed.windowManager.open({
+ file : url + '/del.htm',
+ width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),
+ height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ ed.addCommand('mceIns', function() {
+ ed.windowManager.open({
+ file : url + '/ins.htm',
+ width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),
+ height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ ed.addCommand('mceAttributes', function() {
+ ed.windowManager.open({
+ file : url + '/attributes.htm',
+ width : 380 + parseInt(ed.getLang('xhtmlxtras.attr_delta_width', 0)),
+ height : 370 + parseInt(ed.getLang('xhtmlxtras.attr_delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ // Register buttons
+ ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'});
+ ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'});
+ ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'});
+ ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'});
+ ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'});
+ ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'});
+
+ ed.onNodeChange.add(function(ed, cm, n, co) {
+ n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS');
+
+ cm.setDisabled('cite', co);
+ cm.setDisabled('acronym', co);
+ cm.setDisabled('abbr', co);
+ cm.setDisabled('del', co);
+ cm.setDisabled('ins', co);
+ cm.setDisabled('attribs', n && n.nodeName == 'BODY');
+ cm.setActive('cite', 0);
+ cm.setActive('acronym', 0);
+ cm.setActive('abbr', 0);
+ cm.setActive('del', 0);
+ cm.setActive('ins', 0);
+
+ // Activate all
+ if (n) {
+ do {
+ cm.setDisabled(n.nodeName.toLowerCase(), 0);
+ cm.setActive(n.nodeName.toLowerCase(), 1);
+ } while (n = n.parentNode);
+ }
+ });
+
+ ed.onPreInit.add(function() {
+ // Fixed IE issue where it can't handle these elements correctly
+ ed.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
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin);
+})(); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm
new file mode 100644
index 000000000..d001ac7c4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/ins.htm
@@ -0,0 +1,162 @@
+<!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>{#xhtmlxtras_dlg.title_ins_element}</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/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/editable_selects.js"></script>
+ <script type="text/javascript" src="js/element_common.js"></script>
+ <script type="text/javascript" src="js/ins.js"></script>
+ <link rel="stylesheet" type="text/css" href="css/popup.css" />
+</head>
+<body id="xhtmlxtrasins" style="display: none" role="application" aria-labelledby="app_title">
+<span style="display:none;" id="app_title">{#xhtmlxtras_dlg.title_ins_element}</span>
+<form onsubmit="insertIns();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td>
+ <td>
+ <table role="presentation" border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td>
+ <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>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr >
+ <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td>
+ <td><input id="cite" name="cite" type="text" value="" class="field" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
+ <td><input id="title" name="title" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
+ <td><input id="id" name="id" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td>
+ <td>
+ <select id="class" name="class" class="field mceEditableSelect">
+ <option value="">{#not_set}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
+ <td><input id="style" name="style" type="text" value="" class="field" /></td>
+ </tr>
+ <tr>
+ <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
+ <td>
+ <select id="dir" name="dir" class="field">
+ <option value="">{#not_set}</option>
+ <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option>
+ <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option>
+ </select>
+ </td>
+ </tr>
+ <tr>
+ <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
+ <td>
+ <input id="lang" name="lang" type="text" value="" class="field" />
+ </td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ <div id="events_panel" class="panel">
+ <fieldset>
+ <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
+
+ <table role="presentation" border="0" cellpadding="0" cellspacing="4">
+ <tr>
+ <td class="label"><label for="onfocus">onfocus</label>:</td>
+ <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onblur">onblur</label>:</td>
+ <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onclick">onclick</label>:</td>
+ <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="ondblclick">ondblclick</label>:</td>
+ <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousedown">onmousedown</label>:</td>
+ <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseup">onmouseup</label>:</td>
+ <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseover">onmouseover</label>:</td>
+ <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmousemove">onmousemove</label>:</td>
+ <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onmouseout">onmouseout</label>:</td>
+ <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeypress">onkeypress</label>:</td>
+ <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeydown">onkeydown</label>:</td>
+ <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td>
+ </tr>
+
+ <tr>
+ <td class="label"><label for="onkeyup">onkeyup</label>:</td>
+ <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td>
+ </tr>
+ </table>
+ </fieldset>
+ </div>
+ </div>
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#update}" />
+ <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeIns();" style="display: none;" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js
new file mode 100644
index 000000000..4b51a2572
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js
@@ -0,0 +1,28 @@
+/**
+ * abbr.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+function init() {
+ SXE.initElementDialog('abbr');
+ if (SXE.currentAction == "update") {
+ SXE.showRemoveButton();
+ }
+}
+
+function insertAbbr() {
+ SXE.insertElement('abbr');
+ tinyMCEPopup.close();
+}
+
+function removeAbbr() {
+ SXE.removeElement('abbr');
+ tinyMCEPopup.close();
+}
+
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js
new file mode 100644
index 000000000..6ec2f8871
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js
@@ -0,0 +1,28 @@
+/**
+ * acronym.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+function init() {
+ SXE.initElementDialog('acronym');
+ if (SXE.currentAction == "update") {
+ SXE.showRemoveButton();
+ }
+}
+
+function insertAcronym() {
+ SXE.insertElement('acronym');
+ tinyMCEPopup.close();
+}
+
+function removeAcronym() {
+ SXE.removeElement('acronym');
+ tinyMCEPopup.close();
+}
+
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js
new file mode 100644
index 000000000..9c99995ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js
@@ -0,0 +1,111 @@
+/**
+ * attributes.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+function init() {
+ tinyMCEPopup.resizeToInnerSize();
+ var inst = tinyMCEPopup.editor;
+ var dom = inst.dom;
+ var elm = inst.selection.getNode();
+ var f = document.forms[0];
+ var onclick = dom.getAttrib(elm, 'onclick');
+
+ setFormValue('title', dom.getAttrib(elm, 'title'));
+ setFormValue('id', dom.getAttrib(elm, 'id'));
+ setFormValue('style', dom.getAttrib(elm, "style"));
+ setFormValue('dir', dom.getAttrib(elm, 'dir'));
+ setFormValue('lang', dom.getAttrib(elm, 'lang'));
+ setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));
+ setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));
+ setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));
+ setFormValue('onblur', dom.getAttrib(elm, 'onblur'));
+ setFormValue('onclick', onclick);
+ setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));
+ setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));
+ setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));
+ setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));
+ setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));
+ setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));
+ setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));
+ setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));
+ setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));
+ className = dom.getAttrib(elm, 'class');
+
+ addClassesToList('classlist', 'advlink_styles');
+ selectByValue(f, 'classlist', className, true);
+
+ TinyMCE_EditableSelects.init();
+}
+
+function setFormValue(name, value) {
+ if(value && document.forms[0].elements[name]){
+ document.forms[0].elements[name].value = value;
+ }
+}
+
+function insertAction() {
+ var inst = tinyMCEPopup.editor;
+ var elm = inst.selection.getNode();
+
+ setAllAttribs(elm);
+ tinyMCEPopup.execCommand("mceEndUndoLevel");
+ tinyMCEPopup.close();
+}
+
+function setAttrib(elm, attrib, value) {
+ var formObj = document.forms[0];
+ var valueElm = formObj.elements[attrib.toLowerCase()];
+ var inst = tinyMCEPopup.editor;
+ var dom = inst.dom;
+
+ if (typeof(value) == "undefined" || value == null) {
+ value = "";
+
+ if (valueElm)
+ value = valueElm.value;
+ }
+
+ dom.setAttrib(elm, attrib.toLowerCase(), value);
+}
+
+function setAllAttribs(elm) {
+ var f = document.forms[0];
+
+ setAttrib(elm, 'title');
+ setAttrib(elm, 'id');
+ setAttrib(elm, 'style');
+ setAttrib(elm, 'class', getSelectValue(f, 'classlist'));
+ setAttrib(elm, 'dir');
+ setAttrib(elm, 'lang');
+ setAttrib(elm, 'tabindex');
+ setAttrib(elm, 'accesskey');
+ setAttrib(elm, 'onfocus');
+ setAttrib(elm, 'onblur');
+ setAttrib(elm, 'onclick');
+ setAttrib(elm, 'ondblclick');
+ setAttrib(elm, 'onmousedown');
+ setAttrib(elm, 'onmouseup');
+ setAttrib(elm, 'onmouseover');
+ setAttrib(elm, 'onmousemove');
+ setAttrib(elm, 'onmouseout');
+ setAttrib(elm, 'onkeypress');
+ setAttrib(elm, 'onkeydown');
+ setAttrib(elm, 'onkeyup');
+
+ // Refresh in old MSIE
+// if (tinyMCE.isMSIE5)
+// elm.outerHTML = elm.outerHTML;
+}
+
+function insertAttribute() {
+ tinyMCEPopup.close();
+}
+
+tinyMCEPopup.onInit.add(init);
+tinyMCEPopup.requireLangPack();
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js
new file mode 100644
index 000000000..009b71546
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/cite.js
@@ -0,0 +1,28 @@
+/**
+ * cite.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+function init() {
+ SXE.initElementDialog('cite');
+ if (SXE.currentAction == "update") {
+ SXE.showRemoveButton();
+ }
+}
+
+function insertCite() {
+ SXE.insertElement('cite');
+ tinyMCEPopup.close();
+}
+
+function removeCite() {
+ SXE.removeElement('cite');
+ tinyMCEPopup.close();
+}
+
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js
new file mode 100644
index 000000000..1f957dc78
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/del.js
@@ -0,0 +1,53 @@
+/**
+ * del.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+function init() {
+ SXE.initElementDialog('del');
+ if (SXE.currentAction == "update") {
+ setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));
+ setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));
+ SXE.showRemoveButton();
+ }
+}
+
+function setElementAttribs(elm) {
+ setAllCommonAttribs(elm);
+ setAttrib(elm, 'datetime');
+ setAttrib(elm, 'cite');
+ elm.removeAttribute('data-mce-new');
+}
+
+function insertDel() {
+ var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL');
+
+ if (elm == null) {
+ var s = SXE.inst.selection.getContent();
+ if(s.length > 0) {
+ insertInlineElement('del');
+ var elementArray = SXE.inst.dom.select('del[data-mce-new]');
+ for (var i=0; i<elementArray.length; i++) {
+ var elm = elementArray[i];
+ setElementAttribs(elm);
+ }
+ }
+ } else {
+ setElementAttribs(elm);
+ }
+ tinyMCEPopup.editor.nodeChanged();
+ tinyMCEPopup.execCommand('mceEndUndoLevel');
+ tinyMCEPopup.close();
+}
+
+function removeDel() {
+ SXE.removeElement('del');
+ tinyMCEPopup.close();
+}
+
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js
new file mode 100644
index 000000000..4e5d9c3bb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js
@@ -0,0 +1,229 @@
+/**
+ * element_common.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+tinyMCEPopup.requireLangPack();
+
+function initCommonAttributes(elm) {
+ var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
+
+ // Setup form data for common element attributes
+ setFormValue('title', dom.getAttrib(elm, 'title'));
+ setFormValue('id', dom.getAttrib(elm, 'id'));
+ selectByValue(formObj, 'class', dom.getAttrib(elm, 'class'), true);
+ setFormValue('style', dom.getAttrib(elm, 'style'));
+ selectByValue(formObj, 'dir', dom.getAttrib(elm, 'dir'));
+ setFormValue('lang', dom.getAttrib(elm, 'lang'));
+ setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));
+ setFormValue('onblur', dom.getAttrib(elm, 'onblur'));
+ setFormValue('onclick', dom.getAttrib(elm, 'onclick'));
+ setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));
+ setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));
+ setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));
+ setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));
+ setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));
+ setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));
+ setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));
+ setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));
+ setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));
+}
+
+function setFormValue(name, value) {
+ if(document.forms[0].elements[name]) document.forms[0].elements[name].value = value;
+}
+
+function insertDateTime(id) {
+ document.getElementById(id).value = getDateTime(new Date(), "%Y-%m-%dT%H:%M:%S");
+}
+
+function getDateTime(d, fmt) {
+ fmt = fmt.replace("%D", "%m/%d/%y");
+ fmt = fmt.replace("%r", "%I:%M:%S %p");
+ fmt = fmt.replace("%Y", "" + d.getFullYear());
+ fmt = fmt.replace("%y", "" + d.getYear());
+ fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));
+ fmt = fmt.replace("%d", addZeros(d.getDate(), 2));
+ fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));
+ fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));
+ fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));
+ fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));
+ fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));
+ fmt = fmt.replace("%%", "%");
+
+ return fmt;
+}
+
+function addZeros(value, len) {
+ var i;
+
+ value = "" + value;
+
+ if (value.length < len) {
+ for (i=0; i<(len-value.length); i++)
+ value = "0" + value;
+ }
+
+ return value;
+}
+
+function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
+ if (!form_obj || !form_obj.elements[field_name])
+ return;
+
+ var sel = form_obj.elements[field_name];
+
+ var found = false;
+ for (var i=0; i<sel.options.length; i++) {
+ var option = sel.options[i];
+
+ if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
+ option.selected = true;
+ found = true;
+ } else
+ option.selected = false;
+ }
+
+ if (!found && add_custom && value != '') {
+ var option = new Option('Value: ' + value, value);
+ option.selected = true;
+ sel.options[sel.options.length] = option;
+ }
+
+ return found;
+}
+
+function setAttrib(elm, attrib, value) {
+ var formObj = document.forms[0];
+ var valueElm = formObj.elements[attrib.toLowerCase()];
+ tinyMCEPopup.editor.dom.setAttrib(elm, attrib, value || valueElm.value);
+}
+
+function setAllCommonAttribs(elm) {
+ setAttrib(elm, 'title');
+ setAttrib(elm, 'id');
+ setAttrib(elm, 'class');
+ setAttrib(elm, 'style');
+ setAttrib(elm, 'dir');
+ setAttrib(elm, 'lang');
+ /*setAttrib(elm, 'onfocus');
+ setAttrib(elm, 'onblur');
+ setAttrib(elm, 'onclick');
+ setAttrib(elm, 'ondblclick');
+ setAttrib(elm, 'onmousedown');
+ setAttrib(elm, 'onmouseup');
+ setAttrib(elm, 'onmouseover');
+ setAttrib(elm, 'onmousemove');
+ setAttrib(elm, 'onmouseout');
+ setAttrib(elm, 'onkeypress');
+ setAttrib(elm, 'onkeydown');
+ setAttrib(elm, 'onkeyup');*/
+}
+
+SXE = {
+ currentAction : "insert",
+ inst : tinyMCEPopup.editor,
+ updateElement : null
+}
+
+SXE.focusElement = SXE.inst.selection.getNode();
+
+SXE.initElementDialog = function(element_name) {
+ addClassesToList('class', 'xhtmlxtras_styles');
+ TinyMCE_EditableSelects.init();
+
+ element_name = element_name.toLowerCase();
+ var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());
+ if (elm != null && elm.nodeName.toUpperCase() == element_name.toUpperCase()) {
+ SXE.currentAction = "update";
+ }
+
+ if (SXE.currentAction == "update") {
+ initCommonAttributes(elm);
+ SXE.updateElement = elm;
+ }
+
+ document.forms[0].insert.value = tinyMCEPopup.getLang(SXE.currentAction, 'Insert', true);
+}
+
+SXE.insertElement = function(element_name) {
+ var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase()), h, tagName;
+
+ if (elm == null) {
+ var s = SXE.inst.selection.getContent();
+ if(s.length > 0) {
+ tagName = element_name;
+
+ insertInlineElement(element_name);
+ var elementArray = tinymce.grep(SXE.inst.dom.select(element_name));
+ for (var i=0; i<elementArray.length; i++) {
+ var elm = elementArray[i];
+
+ if (SXE.inst.dom.getAttrib(elm, 'data-mce-new')) {
+ elm.id = '';
+ elm.setAttribute('id', '');
+ elm.removeAttribute('id');
+ elm.removeAttribute('data-mce-new');
+
+ setAllCommonAttribs(elm);
+ }
+ }
+ }
+ } else {
+ setAllCommonAttribs(elm);
+ }
+ SXE.inst.nodeChanged();
+ tinyMCEPopup.execCommand('mceEndUndoLevel');
+}
+
+SXE.removeElement = function(element_name){
+ element_name = element_name.toLowerCase();
+ elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());
+ if(elm && elm.nodeName.toUpperCase() == element_name.toUpperCase()){
+ tinyMCE.execCommand('mceRemoveNode', false, elm);
+ SXE.inst.nodeChanged();
+ tinyMCEPopup.execCommand('mceEndUndoLevel');
+ }
+}
+
+SXE.showRemoveButton = function() {
+ document.getElementById("remove").style.display = '';
+}
+
+SXE.containsClass = function(elm,cl) {
+ return (elm.className.indexOf(cl) > -1) ? true : false;
+}
+
+SXE.removeClass = function(elm,cl) {
+ if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) {
+ return true;
+ }
+ var classNames = elm.className.split(" ");
+ var newClassNames = "";
+ for (var x = 0, cnl = classNames.length; x < cnl; x++) {
+ if (classNames[x] != cl) {
+ newClassNames += (classNames[x] + " ");
+ }
+ }
+ elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end
+}
+
+SXE.addClass = function(elm,cl) {
+ if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl;
+ return true;
+}
+
+function insertInlineElement(en) {
+ var ed = tinyMCEPopup.editor, dom = ed.dom;
+
+ ed.getDoc().execCommand('FontName', false, 'mceinline');
+ tinymce.each(dom.select('span,font'), function(n) {
+ if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline')
+ dom.replace(dom.create(en, {'data-mce-new' : 1}), n, 1);
+ });
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js
new file mode 100644
index 000000000..c4addfb01
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/js/ins.js
@@ -0,0 +1,53 @@
+/**
+ * ins.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+function init() {
+ SXE.initElementDialog('ins');
+ if (SXE.currentAction == "update") {
+ setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));
+ setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));
+ SXE.showRemoveButton();
+ }
+}
+
+function setElementAttribs(elm) {
+ setAllCommonAttribs(elm);
+ setAttrib(elm, 'datetime');
+ setAttrib(elm, 'cite');
+ elm.removeAttribute('data-mce-new');
+}
+
+function insertIns() {
+ var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS');
+
+ if (elm == null) {
+ var s = SXE.inst.selection.getContent();
+ if(s.length > 0) {
+ insertInlineElement('ins');
+ var elementArray = SXE.inst.dom.select('ins[data-mce-new]');
+ for (var i=0; i<elementArray.length; i++) {
+ var elm = elementArray[i];
+ setElementAttribs(elm);
+ }
+ }
+ } else {
+ setElementAttribs(elm);
+ }
+ tinyMCEPopup.editor.nodeChanged();
+ tinyMCEPopup.execCommand('mceEndUndoLevel');
+ tinyMCEPopup.close();
+}
+
+function removeIns() {
+ SXE.removeElement('ins');
+ tinyMCEPopup.close();
+}
+
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ar_dlg.js
new file mode 100644
index 000000000..e7a5633bd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"\u064a\u0645\u064a\u0646 \u0627\u0644\u0649 \u064a\u0633\u0627\u0631","option_ltr":"\u064a\u0633\u0627\u0631 \u0627\u0644\u0649 \u064a\u0645\u064a\u0646","insert_date":"Insert current date/time",remove:"\u062d\u0630\u0641","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"\u0627\u0639\u062f\u0627\u062f\u0627\u062a \u0639\u0627\u0645\u0647","events_tab":"\u0627\u062d\u062f\u0627\u062b","attrib_tab":"Attributes","general_tab":"\u0639\u0627\u0645","attribute_attrib_tab":"Attributes","attribute_events_tab":"\u0627\u062d\u062f\u0627\u062b","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"\u064a\u0645\u064a\u0646 \u0627\u0644\u0649 \u064a\u0633\u0627\u0631","attribute_option_ltr":"\u064a\u0633\u0627\u0631 \u0627\u0644\u0649 \u064a\u0645\u064a\u0646","attribute_label_langdir":"\u0627\u062a\u062c\u0627\u0647 \u0627\u0644\u0643\u062a\u0627\u0628\u0647","attribute_label_datetime":"\u062a\u0627\u0631\u064a\u062e / \u0632\u0645\u0646","attribute_label_cite":"Cite","attribute_label_style":"\u0648\u0633\u0645","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"\u0639\u0646\u0648\u0627\u0646"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/az_dlg.js
new file mode 100644
index 000000000..2378cf605
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.xhtmlxtras_dlg',{"attribs_title":"Atribut \u0259lav\u0259/redakt\u0259 et","option_rtl":"Sa\u011fda-sola","option_ltr":"Solda-sa\u011fa","insert_date":"Haz\u0131rki tarixi/vaxt\u0131 \u0259lav\u0259 et",remove:"L\u0259\u011fv et","title_cite_element":"Sitat elementi","title_abbr_element":"Abbreviatura elementi","title_acronym_element":"Akronim elementi","title_del_element":"Silinmi\u015f m\u0259tnin elementi","title_ins_element":"\u018flav\u0259 edilmi\u015f m\u0259tnin elementi","fieldset_events_tab":"Element hadis\u0259l\u0259ri","fieldset_attrib_tab":"Element atributlar\u0131","fieldset_general_tab":"\u00dcmumi nizamlamalar","events_tab":"Hadis\u0259l\u0259r","attrib_tab":"Atributlar","general_tab":"\u00dcmumi","attribute_attrib_tab":"Atributlar","attribute_events_tab":"Hadis\u0259l\u0259r","attribute_label_accesskey":"Giri\u015f klavi\u015fi","attribute_label_tabindex":"Hesab indeksi","attribute_label_langcode":"Dil","attribute_option_rtl":"Sa\u011fda-sola","attribute_option_ltr":"Solda-sa\u011fa","attribute_label_langdir":"M\u0259tnin istiqam\u0259ti","attribute_label_datetime":"Tarix/vaxt","attribute_label_cite":"Sitat","attribute_label_style":"Stil","attribute_label_class":"Sinif","attribute_label_id":"\u0130dentifikator","attribute_label_title":"Ad\u0131"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/be_dlg.js
new file mode 100644
index 000000000..d367ce12d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.xhtmlxtras_dlg',{"attribs_title":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0430\u0442\u0440\u044b\u0431\u0443\u0442\u044b","option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430","option_ltr":"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430","insert_date":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0431\u044f\u0433\u0443\u0447\u0443\u044e \u0434\u0430\u0442\u0443/\u0447\u0430\u0441",remove:"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c","title_cite_element":"\u0426\u044b\u0442\u0430\u0432\u0430\u043d\u043d\u0435","title_abbr_element":"\u0410\u0431\u0440\u044d\u0432\u0456\u044f\u0442\u0443\u0440\u0430","title_acronym_element":"\u0410\u043a\u0440\u043e\u043d\u0456\u043c","title_del_element":"\u0412\u044b\u0434\u0430\u043b\u0435\u043d\u043d\u0435","title_ins_element":"\u0417\u0430\u043c\u0435\u043d\u0430","fieldset_events_tab":"\u041f\u0430\u0434\u0437\u0435\u0456 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_attrib_tab":"\u0410\u0442\u0440\u044b\u0431\u0443\u0442\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_general_tab":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f \u043d\u0430\u043b\u0430\u0434\u044b","events_tab":"\u041f\u0430\u0434\u0437\u0435\u0456","attrib_tab":"\u0410\u0442\u0440\u044b\u0431\u0443\u0442\u044b","general_tab":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f","attribute_attrib_tab":"\u0410\u0442\u0440\u044b\u0431\u0443\u0442\u044b","attribute_events_tab":"\u041f\u0430\u0434\u0437\u0435\u0456","attribute_label_accesskey":"\u041a\u043b\u0430\u0432\u0456\u0448\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0443","attribute_label_tabindex":"\u0410\u0437\u043d\u0430\u0447\u043d\u0456\u043a \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u044b\u0456","attribute_label_langcode":"\u041c\u043e\u0432\u0430","attribute_option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430","attribute_option_ltr":"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430","attribute_label_langdir":"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u0442\u044d\u043a\u0441\u0442\u0443","attribute_label_datetime":"\u0414\u0430\u0442\u0430/\u0447\u0430\u0441","attribute_label_cite":"\u0412\u044b\u043d\u044f\u0442\u043a\u0430","attribute_label_style":"\u0421\u0442\u044b\u043b\u044c","attribute_label_class":"\u041a\u043b\u0430\u0441","attribute_label_id":"\u0406\u0434\u044d\u043d\u0442\u044b\u0444\u0456\u043a\u0430\u0442\u0430\u0440","attribute_label_title":"\u041d\u0430\u0437\u0432\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bg_dlg.js
new file mode 100644
index 000000000..4cf4ef9f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.xhtmlxtras_dlg',{"attribs_title":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","option_rtl":"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e","option_ltr":"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e","insert_date":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u0442\u0430 \u0434\u0430\u0442\u0430/\u0446\u0430\u0441",remove:"\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438","title_cite_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0426\u0438\u0442\u0430\u0442","title_abbr_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0421\u044a\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435","title_acronym_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0410\u043a\u0440\u043e\u043d\u0438\u043c","title_del_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435","title_ins_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435","fieldset_events_tab":"\u0421\u044a\u0431\u0438\u0442\u0438\u044f \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_general_tab":"\u041e\u0431\u0449\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","events_tab":"\u0421\u044a\u0431\u0438\u0442\u0438\u044f","attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","general_tab":"\u041e\u0431\u0449\u0438","attribute_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","attribute_events_tab":"\u0421\u044a\u0431\u0438\u0442\u0438\u044f","attribute_label_accesskey":"\u041a\u043b\u0430\u0432\u0438\u0448","attribute_label_tabindex":"\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u043d\u043e\u0441\u0442","attribute_label_langcode":"\u0415\u0437\u0438\u043a","attribute_option_rtl":"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e","attribute_option_ltr":"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e","attribute_label_langdir":"\u041f\u043e\u0441\u043e\u043a\u0430 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430","attribute_label_datetime":"\u0414\u0430\u0442\u0430/\u0412\u0440\u0435\u043c\u0435","attribute_label_cite":"\u0426\u0438\u0442\u0430\u0442","attribute_label_style":"\u0421\u0442\u0438\u043b","attribute_label_class":"\u041a\u043b\u0430\u0441","attribute_label_id":"ID","attribute_label_title":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bn_dlg.js
new file mode 100644
index 000000000..085ed82e9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/br_dlg.js
new file mode 100644
index 000000000..0c75ca89e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.xhtmlxtras_dlg',{"attribs_title":"Inserir/editar atributos","option_rtl":"Da direita para a esquerda","option_ltr":"Da esquerda para a direita","insert_date":"Inserir data/hora",remove:"Remover","title_cite_element":"Cita\u00e7\u00e3o","title_abbr_element":"Abrevia\u00e7\u00e3o","title_acronym_element":"Acr\u00f4nimo","title_del_element":"Apagar","title_ins_element":"Inserir","fieldset_events_tab":"Eventos","fieldset_attrib_tab":"Atributos","fieldset_general_tab":"Configura\u00e7\u00f5es gerais","events_tab":"Eventos","attrib_tab":"Atributos","general_tab":"Geral","attribute_attrib_tab":"Atributos","attribute_events_tab":"Eventos","attribute_label_accesskey":"Tecla de Atalho","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Linguagem","attribute_option_rtl":"Da direita para a esquerda","attribute_option_ltr":"Da esquerda para a direita","attribute_label_langdir":"Dire\u00e7\u00e3o do texto","attribute_label_datetime":"Data/Hora","attribute_label_cite":"Citar","attribute_label_style":"Estilo","attribute_label_class":"Classe","attribute_label_id":"ID","attribute_label_title":"T\u00edtulo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bs_dlg.js
new file mode 100644
index 000000000..5d931ec3d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.xhtmlxtras_dlg',{"attribs_title":"Umetni/uredi atribute","option_rtl":"S desna na lijevo","option_ltr":"S lijeva na desno","insert_date":"Umetni trenuta\u010dni datum/vrijeme",remove:"Ukloni","title_cite_element":"Element citata","title_abbr_element":"Element kratice","title_acronym_element":"Element akronima","title_del_element":"Element za brisanje","title_ins_element":"Element za unos","fieldset_events_tab":"Doga\u0111aji elemenata","fieldset_attrib_tab":"Atributi elemenata","fieldset_general_tab":"Osnovne postavke","events_tab":"Doga\u0111aji","attrib_tab":"Atributi","general_tab":"Osnovno","attribute_attrib_tab":"Atributi","attribute_events_tab":"Doga\u0111aji","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Jezik","attribute_option_rtl":"S desna na lijevo","attribute_option_ltr":"S lijeva na desno","attribute_label_langdir":"Smjer teksta","attribute_label_datetime":"Datum/vrijeme","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klasa","attribute_label_id":"ID","attribute_label_title":"Naslov"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ca_dlg.js
new file mode 100644
index 000000000..5c548b5e7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.xhtmlxtras_dlg',{"attribs_title":"Insereix/Edita atributs","option_rtl":"De dreta a esquerra","option_ltr":"D\'esquerra a dreta","insert_date":"Insereix la data/hora actuals",remove:"Elimina","title_cite_element":"Element de menci\u00f3","title_abbr_element":"Element d\'abreviatura","title_acronym_element":"Element d\'acr\u00f2nim","title_del_element":"Element d\'eliminaci\u00f3","title_ins_element":"Element d\'inserci\u00f3","fieldset_events_tab":"Esdeveniments d\'element","fieldset_attrib_tab":"Atributs d\'element","fieldset_general_tab":"Configuraci\u00f3 general","events_tab":"Esdeveniments","attrib_tab":"Atributs","general_tab":"General","attribute_attrib_tab":"Atributs","attribute_events_tab":"Esdeveniments","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Idioma","attribute_option_rtl":"De dreta a esquerra","attribute_option_ltr":"D\'esquerra a dreta","attribute_label_langdir":"Direcci\u00f3 del text","attribute_label_datetime":"Data/Hora","attribute_label_cite":"Cita","attribute_label_style":"Estil","attribute_label_class":"Classe","attribute_label_id":"ID","attribute_label_title":"T\u00edtol"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ch_dlg.js
new file mode 100644
index 000000000..36b325a75
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","option_rtl":"\u4ece\u53f3\u5230\u5de6","option_ltr":"\u4ece\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u76ee\u524d\u65e5\u671f/\u65f6\u95f4",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5143\u7d20","title_abbr_element":"\u7f29\u5199\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u6bcd\u7f29\u5199\u5143\u7d20","title_del_element":"\u5220\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c5e\u6027","fieldset_general_tab":"\u4e00\u822c\u8bbe\u5b9a","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u952e","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u4ece\u53f3\u5230\u5de6","attribute_option_ltr":"\u4ece\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u4e66\u5199\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u7c7b\u522b","attribute_label_id":"ID","attribute_label_title":"\u6807\u9898"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cn_dlg.js
new file mode 100644
index 000000000..04a1c2ca5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","option_rtl":"\u4ece\u53f3\u5230\u5de6","option_ltr":"\u4ece\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u5f53\u524d\u65e5\u671f/\u65f6\u95f4",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5143\u7d20","title_abbr_element":"\u7f29\u5199\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u6bcd\u7f29\u5199\u5143\u7d20","title_del_element":"\u5220\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c5e\u6027","fieldset_general_tab":"\u5e38\u89c4\u8bbe\u7f6e","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u5e38\u89c4","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u952e","attribute_label_tabindex":"Tab\u952e\u8bbf\u95ee\u987a\u5e8f","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u4ece\u53f3\u5230\u5de6","attribute_option_ltr":"\u4ece\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u672c\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u7c7b","attribute_label_id":"ID\u5c5e\u6027","attribute_label_title":"\u6807\u9898"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cs_dlg.js
new file mode 100644
index 000000000..55c8cab8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.xhtmlxtras_dlg',{"attribs_title":"Vlo\u017eit/upravit atributy","option_rtl":"Zprava doleva","option_ltr":"Zleva doprava","insert_date":"Vlo\u017eit aktu\u00e1ln\u00ed datum/\u010das",remove:"Odstranit","title_cite_element":"Citace","title_abbr_element":"Zkratka","title_acronym_element":"Akronym","title_del_element":"Odstran\u011bn\u00fd text","title_ins_element":"P\u0159idan\u00fd text","fieldset_events_tab":"Atributy ud\u00e1losti","fieldset_attrib_tab":"Atributy prvku","fieldset_general_tab":"Obecn\u00e9 parametry","events_tab":"Ud\u00e1losti","attrib_tab":"Atributy","general_tab":"Obecn\u00e9","attribute_attrib_tab":"Atributy","attribute_events_tab":"Ud\u00e1losti","attribute_label_accesskey":"Kl\u00e1vesov\u00e1 zkratka","attribute_label_tabindex":"Po\u0159ad\u00ed pro tabul\u00e1tor","attribute_label_langcode":"Jazyk","attribute_option_rtl":"Zprava doleva","attribute_option_ltr":"Zleva doprava","attribute_label_langdir":"Sm\u011br textu","attribute_label_datetime":"Datum/\u010cas","attribute_label_cite":"Citace","attribute_label_style":"Styl","attribute_label_class":"T\u0159\u00edda","attribute_label_id":"ID","attribute_label_title":"Titulek"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cy_dlg.js
new file mode 100644
index 000000000..981483939
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.xhtmlxtras_dlg',{"attribs_title":"Mewnosod/Golygu Priodoleddau","option_rtl":"De i\'r chwith","option_ltr":"Chwith i\'r dde","insert_date":"Mewnosod dyddiad/amser presennol",remove:"Tynnu","title_cite_element":"Elfen Dyfyniad","title_abbr_element":"Elfen Talfyriad","title_acronym_element":"Elfen Acronym","title_del_element":"Elfen Dilead","title_ins_element":"Elfen Mewnosodiad","fieldset_events_tab":"Digwyddiadau Elfen","fieldset_attrib_tab":"Priodoleddau Elfen","fieldset_general_tab":"Gosodiadau Cyfredinol","events_tab":"Digwyddiadau","attrib_tab":"Priodoleddau","general_tab":"Cyffredinol","attribute_attrib_tab":"Priodoleddau","attribute_events_tab":"Digwyddiadau","attribute_label_accesskey":"Bysell mynediad","attribute_label_tabindex":"Trefn tabio","attribute_label_langcode":"Iaith","attribute_option_rtl":"De i\'r chwith","attribute_option_ltr":"Chwith i\'r dde","attribute_label_langdir":"Cyfeiriad Testun","attribute_label_datetime":"Dyddiad/Amser","attribute_label_cite":"Dyfynnu","attribute_label_style":"Arddull","attribute_label_class":"Dosbarth","attribute_label_id":"ID","attribute_label_title":"Teitl"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/da_dlg.js
new file mode 100644
index 000000000..cd9eb4085
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.xhtmlxtras_dlg',{"attribs_title":"Inds\u00e6t/rediger attributter","option_rtl":"H\u00f8jre mod venstre","option_ltr":"Venstre mod h\u00f8jre","insert_date":"Inds\u00e6t nuv\u00e6rende dato/tid",remove:"Slet","title_cite_element":"Citationselement","title_abbr_element":"Forkortet element","title_acronym_element":"Akronym element","title_del_element":"Sletteklart element","title_ins_element":"Inds\u00e6tbart element","fieldset_events_tab":"Element-h\u00e6ndelser","fieldset_attrib_tab":"Element-attributter","fieldset_general_tab":"Genererelle indstillinger","events_tab":"H\u00e6ndelser","attrib_tab":"Attributter","general_tab":"Generelt","attribute_attrib_tab":"Attributter","attribute_events_tab":"H\u00e6ndelser","attribute_label_accesskey":"Adgangsn\u00f8gle","attribute_label_tabindex":"Tab-indeks","attribute_label_langcode":"Sprog","attribute_option_rtl":"H\u00f8jre mod venstre","attribute_option_ltr":"Venstre mod h\u00f8jre","attribute_label_langdir":"Tekstretning","attribute_label_datetime":"Dato/tid","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/de_dlg.js
new file mode 100644
index 000000000..4994355b9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.xhtmlxtras_dlg',{"attribs_title":"Attribute einf\u00fcgen/bearbeiten","option_rtl":"Rechts nach links","option_ltr":"Links nach rechts","insert_date":"Aktuelle Zeit/Datum einf\u00fcgen",remove:"Entfernen","title_cite_element":"Quellenangabe","title_abbr_element":"Abk\u00fcrzung","title_acronym_element":"Akronym","title_del_element":"Entfernter Text","title_ins_element":"Eingef\u00fcgter Text","fieldset_events_tab":"Ereignisse","fieldset_attrib_tab":"Attribute","fieldset_general_tab":"Allgemeine Einstellungen","events_tab":"Ereignisse","attrib_tab":"Attribute","general_tab":"Allgemein","attribute_attrib_tab":"Attribute","attribute_events_tab":"Ereignisse","attribute_label_accesskey":"Tastenk\u00fcrzel","attribute_label_tabindex":"Tabindex","attribute_label_langcode":"Sprache","attribute_option_rtl":"Rechts nach links","attribute_option_ltr":"Links nach rechts","attribute_label_langdir":"Schriftrichtung","attribute_label_datetime":"Zeit/Datum","attribute_label_cite":"Quellenangabe","attribute_label_style":"Format","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/dv_dlg.js
new file mode 100644
index 000000000..a9c0f1475
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/el_dlg.js
new file mode 100644
index 000000000..cbc5fbb16
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.xhtmlxtras_dlg',{"attribs_title":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b9\u03b4\u03b9\u03bf\u03c4\u03ae\u03c4\u03c9\u03bd","option_rtl":"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","option_ltr":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac","insert_date":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c4\u03c1\u03ad\u03c7\u03bf\u03c5\u03c3\u03b1\u03c2 \u03b7\u03bc\u03ad\u03c1\u03b1\u03c2/\u03ce\u03c1\u03b1\u03c2",remove:"\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7","title_cite_element":"Citation \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","title_abbr_element":"\u03a3\u03c5\u03bd\u03c4\u03bf\u03bc\u03bf\u03b3\u03c1\u03b1\u03c6\u03af\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","title_acronym_element":"\u0391\u03ba\u03c1\u03bf\u03bd\u03cd\u03bc\u03b9\u03bf \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","title_del_element":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","title_ins_element":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","fieldset_events_tab":"\u0393\u03b5\u03b3\u03bf\u03bd\u03cc\u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","fieldset_attrib_tab":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","fieldset_general_tab":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ad\u03c2 \u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2","events_tab":"\u0393\u03b5\u03b3\u03bf\u03bd\u03cc\u03c4\u03b1","attrib_tab":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","general_tab":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac","attribute_attrib_tab":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","attribute_events_tab":"\u0393\u03b5\u03b3\u03bf\u03bd\u03cc\u03c4\u03b1","attribute_label_accesskey":"\u03a0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1","attribute_option_rtl":"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","attribute_option_ltr":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac","attribute_label_langdir":"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","attribute_label_datetime":"\u0397\u03bc\u03ad\u03c1\u03b1/\u038f\u03c1\u03b1","attribute_label_cite":"Cite","attribute_label_style":"\u03a3\u03c4\u03c5\u03bb","attribute_label_class":"\u039a\u03bb\u03ac\u03c3\u03b7","attribute_label_id":"ID","attribute_label_title":"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js
new file mode 100644
index 000000000..c4569f85e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to Left","option_ltr":"Left to Right","insert_date":"Insert Current Date/Time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to Left","attribute_option_ltr":"Left to Right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/eo_dlg.js
new file mode 100644
index 000000000..c0e977686
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.xhtmlxtras_dlg',{"attribs_title":"Enmeti/redakti atributojn","option_rtl":"Dekstre-Maldekstren","option_ltr":"Maldekstre-Dekstren","insert_date":"Enmeti daton/horon",remove:"Forigi","title_cite_element":"Cita\u0135o","title_abbr_element":"Mallongigo","title_acronym_element":"Akronimo","title_del_element":"Forvi\u015di","title_ins_element":"Enmeti","fieldset_events_tab":"Eventoj","fieldset_attrib_tab":"Atributoj","fieldset_general_tab":"\u011ceneralaj agorda\u0135oj","events_tab":"Eventoj","attrib_tab":"Atributoj","general_tab":"\u011ceneralaj","attribute_attrib_tab":"Atributoj","attribute_events_tab":"Eventoj","attribute_label_accesskey":"Klavkombino","attribute_label_tabindex":"TabIndekso","attribute_label_langcode":"Lingvo","attribute_option_rtl":"Dekstre-Maldekstren","attribute_option_ltr":"Maldekstre-Dekstren","attribute_label_langdir":"Tekstodirekto","attribute_label_datetime":"Dato/Horo","attribute_label_cite":"Citi","attribute_label_style":"Stilo","attribute_label_class":"Klaso","attribute_label_id":"ID","attribute_label_title":"Titolo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/es_dlg.js
new file mode 100644
index 000000000..676e20086
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.xhtmlxtras_dlg',{"attribs_title":"Insertar/Editar atributos","option_rtl":"Derecha a izquierda","option_ltr":"Izquierda a derecha","insert_date":"Insertar fecha/hora actuales",remove:"Suprimir","title_cite_element":"Cita","title_abbr_element":"Abreviatura","title_acronym_element":"Acr\u00f3nimo","title_del_element":"Borrar","title_ins_element":"Insertar","fieldset_events_tab":"Evento","fieldset_attrib_tab":"Atributos","fieldset_general_tab":"Configuraci\u00f3n general","events_tab":"Eventos","attrib_tab":"Atributos","general_tab":"General","attribute_attrib_tab":"Atributos","attribute_events_tab":"Eventos","attribute_label_accesskey":"Tecla de acceso","attribute_label_tabindex":"Orden de tabulaci\u00f3n","attribute_label_langcode":"Lenguaje","attribute_option_rtl":"Derecha a izquierda","attribute_option_ltr":"Izquierda a derecha","attribute_label_langdir":"Direcci\u00f3n de texto","attribute_label_datetime":"Fecha/Hora","attribute_label_cite":"Cita","attribute_label_style":"Estilo","attribute_label_class":"Clase","attribute_label_id":"ID","attribute_label_title":"T\u00edtulo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/et_dlg.js
new file mode 100644
index 000000000..6e7ffcc7d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.xhtmlxtras_dlg',{"attribs_title":"Sisesta/muuda atribuute","option_rtl":"Paremalt vasakule","option_ltr":"Vasakult paremale","insert_date":"Sisesta hetke kuup\u00e4ev/aeg",remove:"Eemalda","title_cite_element":"Elemendi tsitaat","title_abbr_element":"Elemendi l\u00fchend","title_acronym_element":"Elemendi akron\u00fc\u00fcm","title_del_element":"Elemendi kustutus","title_ins_element":"Elemendi sisestus","fieldset_events_tab":"Elementide s\u00fcndmused","fieldset_attrib_tab":"Elementide atribuudid","fieldset_general_tab":"\u00dcldised seaded","events_tab":"S\u00fcndmused","attrib_tab":"Atribuudid","general_tab":"\u00dcldine","attribute_attrib_tab":"Atribuudid","attribute_events_tab":"S\u00fcndmused","attribute_label_accesskey":"Ligip\u00e4\u00e4suklahv","attribute_label_tabindex":"Sisujuht","attribute_label_langcode":"Keel","attribute_option_rtl":"Paremalt vasakule","attribute_option_ltr":"Vasakult paremale","attribute_label_langdir":"Teksti suund","attribute_label_datetime":"Kuup\u00e4ev/aeg","attribute_label_cite":"Tsitaat","attribute_label_style":"Stiil","attribute_label_class":"Klass","attribute_label_id":"ID","attribute_label_title":"Pealkiri"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/eu_dlg.js
new file mode 100644
index 000000000..16997b852
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.xhtmlxtras_dlg',{"attribs_title":"Atributuak txertatu/editatu","option_rtl":"Eskuinetik ezkerrera","option_ltr":"Ezkerretik eskuinera","insert_date":"Data/ordua txertatu",remove:"Ezabatu","title_cite_element":"Elementuaren zita","title_abbr_element":"Elementuaren laburdura","title_acronym_element":"Elementuaren akronimoa","title_del_element":"Elementuaren ezabaketa","title_ins_element":"Elementuaren txertaketa","fieldset_events_tab":"Elementuen ebentuak","fieldset_attrib_tab":"Elementuen atributuak","fieldset_general_tab":"Aukera orokorrak","events_tab":"Ebentuak","attrib_tab":"Atributuak","general_tab":"Orokorra","attribute_attrib_tab":"Atributuak","attribute_events_tab":"Ebentuak","attribute_label_accesskey":"Laster-tekla","attribute_label_tabindex":"Tabulazio ordena","attribute_label_langcode":"Hizkuntza","attribute_option_rtl":"Eskuinetik ezkerrera","attribute_option_ltr":"Ezkerretik eskuinera","attribute_label_langdir":"Testuaren norabidea","attribute_label_datetime":"Data/Ordua","attribute_label_cite":"Zita","attribute_label_style":"Estiloa","attribute_label_class":"Klasea","attribute_label_id":"ID","attribute_label_title":"Izenburua"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fa_dlg.js
new file mode 100644
index 000000000..a37c26b7d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.xhtmlxtras_dlg',{"attribs_title":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627","option_rtl":"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e","option_ltr":"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a","insert_date":"\u062f\u0631\u062c \u062a\u0627\u0631\u06cc\u062e/\u0632\u0645\u0627\u0646 \u0641\u0639\u0644\u06cc",remove:"\u062d\u0630\u0641","title_cite_element":"\u0639\u0646\u0635\u0631 \u0646\u0642\u0644 \u0642\u0648\u0644","title_abbr_element":"\u0639\u0646\u0635\u0631 \u0627\u062e\u062a\u0635\u0627\u0631","title_acronym_element":"\u0639\u0646\u0635\u0631 \u0645\u062e\u0641\u0641","title_del_element":"\u0639\u0646\u0635\u0631 \u062d\u0630\u0641","title_ins_element":"\u0639\u0646\u0635\u0631 \u062f\u0631\u062c","fieldset_events_tab":"\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0639\u0646\u0635\u0631","fieldset_attrib_tab":"\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0639\u0646\u0635\u0631","fieldset_general_tab":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0639\u0645\u0648\u0645\u06cc","events_tab":"\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627","attrib_tab":"\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627","general_tab":"\u0639\u0645\u0648\u0645\u06cc","attribute_attrib_tab":"\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627","attribute_events_tab":"\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"\u0632\u0628\u0627\u0646","attribute_option_rtl":"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e","attribute_option_ltr":"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a","attribute_label_langdir":"\u062c\u0647\u062a \u0645\u062a\u0646","attribute_label_datetime":"\u062a\u0627\u0631\u06cc\u062e/\u0632\u0645\u0627\u0646","attribute_label_cite":"\u0627\u0639\u0644\u0627\u0645\u06cc\u0647","attribute_label_style":"\u0627\u0633\u062a\u0627\u06cc\u0644","attribute_label_class":"\u06a9\u0644\u0627\u0633","attribute_label_id":"\u0634\u0646\u0627\u0633\u0647","attribute_label_title":"\u0639\u0646\u0648\u0627\u0646"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fi_dlg.js
new file mode 100644
index 000000000..58c4e7e95
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.xhtmlxtras_dlg',{"attribs_title":"Lis\u00e4\u00e4/muokkaa attribuutteja","option_rtl":"Oikealta vasemmalle","option_ltr":"Vasemmalta oikealle","insert_date":"Lis\u00e4\u00e4 t\u00e4m\u00e4nhetkinen p\u00e4iv\u00e4/aika",remove:"Poista","title_cite_element":"Sitaatti elementit","title_abbr_element":"Lyhenne elementit","title_acronym_element":"Kirjainlyhenne elementit","title_del_element":"Poisto elementit","title_ins_element":"Lis\u00e4ys elementit","fieldset_events_tab":"Elementin tapahtumat","fieldset_attrib_tab":"Elementin attribuutit","fieldset_general_tab":"Yleiset asetukset","events_tab":"Tapahtumat","attrib_tab":"Attribuutit","general_tab":"Yleiset","attribute_attrib_tab":"Attribuutit","attribute_events_tab":"Tapahtumat","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Kieli","attribute_option_rtl":"Oikealta vasemmalle","attribute_option_ltr":"Vasemmalta oikealle","attribute_label_langdir":"Tekstin suunta","attribute_label_datetime":"P\u00e4iv\u00e4/Aika","attribute_label_cite":"Sitaatti","attribute_label_style":"Tyyli","attribute_label_class":"Luokka","attribute_label_id":"ID","attribute_label_title":"Otsikko"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fr_dlg.js
new file mode 100644
index 000000000..4ae5a3baf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.xhtmlxtras_dlg',{"attribs_title":"Ins\u00e9rer / \u00e9diter les attributs","option_rtl":"De droite \u00e0 gauche","option_ltr":"De gauche \u00e0 droite","insert_date":"Ins\u00e9rer la date et l\'heure actuelles",remove:"Enlever","title_cite_element":"Citation","title_abbr_element":"Abr\u00e9viation","title_acronym_element":"Acronyme","title_del_element":"Suppression","title_ins_element":"Insertion","fieldset_events_tab":"\u00c9v\u00e9nements","fieldset_attrib_tab":"Attributs","fieldset_general_tab":"Param\u00e8tres g\u00e9n\u00e9raux","events_tab":"\u00c9v\u00e9nements","attrib_tab":"Attributs","general_tab":"G\u00e9n\u00e9ral","attribute_attrib_tab":"Attributs","attribute_events_tab":"\u00c9v\u00e8nements","attribute_label_accesskey":"Accesskey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Langue","attribute_option_rtl":"De droite \u00e0 gauche","attribute_option_ltr":"De gauche \u00e0 droite","attribute_label_langdir":"Sens de lecture","attribute_label_datetime":"Date / heure","attribute_label_cite":"Citation","attribute_label_style":"Style","attribute_label_class":"Classe","attribute_label_id":"ID","attribute_label_title":"Titre"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/gl_dlg.js
new file mode 100644
index 000000000..59fb5fe8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.xhtmlxtras_dlg',{"attribs_title":"Insertar/Editar atributos","option_rtl":"Dereita a esquerda","option_ltr":"Esquerda a dereita","insert_date":"Insertar data/hora actuais",remove:"Suprimir","title_cite_element":"Cita","title_abbr_element":"Abreviatura","title_acronym_element":"Acr\u00f3nimo","title_del_element":"Borrar","title_ins_element":"Insertar","fieldset_events_tab":"Evento","fieldset_attrib_tab":"Atributos","fieldset_general_tab":"Configuraci\u00f3n xeral","events_tab":"Eventos","attrib_tab":"Atributos","general_tab":"Xeral","attribute_attrib_tab":"Atributos","attribute_events_tab":"Eventos","attribute_label_accesskey":"Tecla de acceso","attribute_label_tabindex":"Orde de tabulaci\u00f3n","attribute_label_langcode":"Lenguaxe","attribute_option_rtl":"Dereita a esquerda","attribute_option_ltr":"Esquerda a dereita","attribute_label_langdir":"Direcci\u00f3n de texto","attribute_label_datetime":"Data/Hora","attribute_label_cite":"Cita","attribute_label_style":"Estilo","attribute_label_class":"Clase","attribute_label_id":"ID","attribute_label_title":"T\u00edtulo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/gu_dlg.js
new file mode 100644
index 000000000..31ee0dd56
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/he_dlg.js
new file mode 100644
index 000000000..515536f61
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.xhtmlxtras_dlg',{"attribs_title":"\u05d4\u05db\u05e0\u05e1\u05ea/\u05e2\u05d3\u05db\u05d5\u05df \u05ea\u05db\u05d5\u05e0\u05d5\u05ea","option_rtl":"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc","option_ltr":"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df","insert_date":"\u05d4\u05db\u05e0\u05e1\u05ea \u05d6\u05de\u05df/\u05ea\u05d0\u05e8\u05d9\u05da \u05e0\u05d5\u05db\u05d7\u05d9",remove:"\u05d4\u05e1\u05e8","title_cite_element":"\u05e6\u05d9\u05d8\u05d5\u05d8 \u05d0\u05dc\u05de\u05e0\u05d8","title_abbr_element":"\u05e7\u05d9\u05e6\u05d5\u05e8 \u05d0\u05dc\u05de\u05e0\u05d8","title_acronym_element":"\u05e8\u05d0\u05e9\u05d9 \u05ea\u05d9\u05d1\u05d5\u05ea \u05d4\u05d0\u05dc\u05de\u05e0\u05d8","title_del_element":"\u05de\u05d7\u05d9\u05e7\u05ea \u05d0\u05dc\u05de\u05e0\u05d8","title_ins_element":"\u05d4\u05db\u05e0\u05e1\u05ea \u05d0\u05dc\u05de\u05e0\u05d8","fieldset_events_tab":"\u05d0\u05d9\u05e8\u05d5\u05e2\u05d9 \u05d4\u05d0\u05dc\u05de\u05e0\u05d8","fieldset_attrib_tab":" \u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05d4\u05d0\u05dc\u05de\u05e0\u05d8","fieldset_general_tab":"\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05db\u05dc\u05dc\u05d9\u05d5\u05ea","events_tab":"\u05d0\u05d9\u05e8\u05d5\u05e2\u05d9\u05dd","attrib_tab":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea","general_tab":"\u05db\u05dc\u05dc\u05d9","attribute_attrib_tab":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea","attribute_events_tab":"\u05d0\u05d9\u05e8\u05d5\u05e2\u05d9\u05dd","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"\u05e9\u05e4\u05d4","attribute_option_rtl":"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc","attribute_option_ltr":"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df","attribute_label_langdir":"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05d8\u05e7\u05e1\u05d8","attribute_label_datetime":"\u05ea\u05d0\u05e8\u05d9\u05da/\u05d6\u05de\u05df","attribute_label_cite":"\u05e6\u05d9\u05d8\u05d5\u05d8","attribute_label_style":"\u05e2\u05d9\u05e6\u05d5\u05d1","attribute_label_class":"\u05de\u05d7\u05dc\u05e7\u05d4","attribute_label_id":"ID","attribute_label_title":"\u05db\u05d5\u05ea\u05e8\u05ea"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hi_dlg.js
new file mode 100644
index 000000000..36d773c20
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hr_dlg.js
new file mode 100644
index 000000000..38c19db82
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.xhtmlxtras_dlg',{"attribs_title":"Umetni/uredi atribute","option_rtl":"S desna na lijevo","option_ltr":"S lijeva na desno","insert_date":"Umetni trenutni datum/vrijeme",remove:"Ukloni","title_cite_element":"Element citata","title_abbr_element":"Element kratice","title_acronym_element":"Element akronima","title_del_element":"Element za brisanje","title_ins_element":"Element za unos","fieldset_events_tab":"Doga\u0111aji elemenata","fieldset_attrib_tab":"Atributi elemenata","fieldset_general_tab":"Osnovne postavke","events_tab":"Doga\u0111aji","attrib_tab":"Atributi","general_tab":"Osnovno","attribute_attrib_tab":"Atributi","attribute_events_tab":"Doga\u0111aji","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Jezik","attribute_option_rtl":"S desna na lijevo","attribute_option_ltr":"S lijeva na desno","attribute_label_langdir":"Smjer teksta","attribute_label_datetime":"Datum/vrijeme","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klasa","attribute_label_id":"ID","attribute_label_title":"Naslov"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hu_dlg.js
new file mode 100644
index 000000000..8af166632
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.xhtmlxtras_dlg',{"attribs_title":"Tulajdons\u00e1gok besz\u00far\u00e1sa/szerkeszt\u00e9se","option_rtl":"Jobbr\u00f3l balra","option_ltr":"Balr\u00f3l jobra","insert_date":"Aktu\u00e1lis d\u00e1tum/id\u0151 besz\u00far\u00e1sa",remove:"Elt\u00e1vol\u00edt\u00e1s","title_cite_element":"Id\u00e9zet elem","title_abbr_element":"R\u00f6vid\u00edt\u00e9s elem","title_acronym_element":"Bet\u0171sz\u00f3 elem","title_del_element":"T\u00f6r\u00f6lt elem","title_ins_element":"Besz\u00fart elem","fieldset_events_tab":"Elem esem\u00e9nyek","fieldset_attrib_tab":"Elem tulajdons\u00e1gok","fieldset_general_tab":"\u00c1ltal\u00e1nos be\u00e1ll\u00edt\u00e1sok","events_tab":"Esem\u00e9nyek","attrib_tab":"Tulajdons\u00e1gok","general_tab":"\u00c1ltal\u00e1nos","attribute_attrib_tab":"Tulajdons\u00e1gok","attribute_events_tab":"Esem\u00e9nyek","attribute_label_accesskey":"Gyorsbilenty\u0171","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Nyelv","attribute_option_rtl":"Jobbr\u00f3l balra","attribute_option_ltr":"Balr\u00f3l jobbra","attribute_label_langdir":"Sz\u00f6veg ir\u00e1nya","attribute_label_datetime":"D\u00e1tum/Id\u0151","attribute_label_cite":"Id\u00e9zet","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"C\u00edm"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hy_dlg.js
new file mode 100644
index 000000000..2f9a0483d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.xhtmlxtras_dlg',{"attribs_title":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0561\u057f\u0580\u056b\u0562\u0578\u0582\u057f\u0576\u0565\u0580","option_rtl":"\u0531\u057b\u056b\u0581 \u0571\u0561\u056d","option_ltr":"\u0541\u0561\u056d\u056b\u0581 \u0561\u057b","insert_date":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0568\u0576\u0569\u0561\u0581\u056b\u056f \u0561\u0574\u057d\u0561\u0569\u056b\u057e\u0568 / \u056a\u0561\u0574\u0568",remove:"\u0540\u0565\u057c\u0561\u0581\u0576\u0565\u056c","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"\u0538\u0576\u0564\u0570\u0561\u0576\u0578\u0582\u0580 \u057a\u0561\u0580\u0561\u0574\u0565\u057f\u0580\u0565\u0580","events_tab":"\u0534\u0565\u057a\u0584\u0565\u0580","attrib_tab":"\u0531\u057f\u0580\u056b\u0562\u0578\u0582\u057f\u0576\u0565\u0580","general_tab":"\u0540\u056b\u0574\u0576\u0561\u056f\u0561\u0576","attribute_attrib_tab":"\u0531\u0568\u0580\u056b\u0562\u0578\u0582\u057f\u0576\u0565\u0580","attribute_events_tab":"\u0534\u0565\u057a\u0584\u0565\u0580","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"\u053c\u0565\u0566\u0578\u0582","attribute_option_rtl":"\u0531\u057b\u056b\u0581 \u0571\u0561\u056d","attribute_option_ltr":"\u0541\u0561\u056d\u056b\u0581 \u0561\u057b","attribute_label_langdir":"\u054f\u0565\u0584\u057d\u057f\u056b \u0578\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576","attribute_label_datetime":"\u0531\u0574\u057d\u0561\u0569\u056b\u057e / \u053a\u0561\u0574\u0561\u0576\u0561\u056f","attribute_label_cite":"\u0544\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","attribute_label_style":"\u0548\u0573","attribute_label_class":"\u0534\u0561\u057d","attribute_label_id":"ID","attribute_label_title":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ia_dlg.js
new file mode 100644
index 000000000..080ae1d78
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91 \u5c5e\u6027","option_rtl":"\u4ece\u53f3\u5230\u5de6","option_ltr":"\u4ece\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u5f53\u524d\u65e5\u671f/\u65f6\u95f4",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5bf9\u8c61","title_abbr_element":"\u7f29\u5199\u5bf9\u8c61","title_acronym_element":"\u9996\u5b57\u6bcd\u7f29\u5199\u5bf9\u8c61","title_del_element":"\u5220\u9664\u5bf9\u8c61","title_ins_element":"\u63d2\u5165\u5bf9\u8c61","fieldset_events_tab":"\u5bf9\u8c61\u4e8b\u4ef6","fieldset_attrib_tab":"\u5bf9\u8c61\u5c5e\u6027","fieldset_general_tab":"\u57fa\u672c","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u57fa\u672c","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u901f\u952e","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u4ece\u53f3\u5230\u5de6","attribute_option_ltr":"\u4ece\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u4e66\u5199\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u6837\u5f0f\u7c7b","attribute_label_id":"ID","attribute_label_title":"\u67e5\u627e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/id_dlg.js
new file mode 100644
index 000000000..f9a392c95
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.xhtmlxtras_dlg',{"attribs_title":"Sisipkan/Ubah atribut","option_rtl":"Kanan ke kiri","option_ltr":"Kiri ke kanan","insert_date":"Sisipkan tanggal/waktu sekarang",remove:"Hapus","title_cite_element":"Elemen Kutipan","title_abbr_element":"Elemen Singkatan","title_acronym_element":"Elemen Akronim","title_del_element":"Elemen penghapusan","title_ins_element":"Elemen Penyisipak","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Atribut Element","fieldset_general_tab":"Pengaturan Umum","events_tab":"Events","attrib_tab":"Atribut","general_tab":"Umum","attribute_attrib_tab":"Atribut","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Bahasa","attribute_option_rtl":"Kanan ke kiri","attribute_option_ltr":"Kiri ke kanan","attribute_label_langdir":"Arah Text","attribute_label_datetime":"Tanggal/waktu","attribute_label_cite":"Kutip","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Judul"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/is_dlg.js
new file mode 100644
index 000000000..71a87c972
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/it_dlg.js
new file mode 100644
index 000000000..726be22c6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.xhtmlxtras_dlg',{"attribs_title":"Inserisci/modifica attributi","option_rtl":"Destra verso sinistra","option_ltr":"Sinistra verso destra","insert_date":"Inserisci data/ora corrente",remove:"Rimuovi","title_cite_element":"Citazione elemento","title_abbr_element":"Abbreviazione elemento","title_acronym_element":"Acronimo elemento","title_del_element":"Cancellazione elemento","title_ins_element":"Inserimento elemento","fieldset_events_tab":"Eventi elemento","fieldset_attrib_tab":"Attributi elemento","fieldset_general_tab":"Impostazioni Generali","events_tab":"Eventi","attrib_tab":"Attributi","general_tab":"Generale","attribute_attrib_tab":"Attributi","attribute_events_tab":"Eventi","attribute_label_accesskey":"Tasto di accesso","attribute_label_tabindex":"Indice tabulazione","attribute_label_langcode":"Lingua","attribute_option_rtl":"Destra verso sinistra","attribute_option_ltr":"Sinistra verso destra","attribute_label_langdir":"Direzione del testo","attribute_label_datetime":"Date/Time","attribute_label_cite":"Citazione","attribute_label_style":"Style","attribute_label_class":"Classe","attribute_label_id":"ID","attribute_label_title":"Titolo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ja_dlg.js
new file mode 100644
index 000000000..888522c9e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.xhtmlxtras_dlg',{"attribs_title":"\u5c5e\u6027\u306e\u633f\u5165\u3084\u524a\u9664","option_rtl":"\u53f3\u304b\u3089\u5de6","option_ltr":"\u5de6\u304b\u3089\u53f3","insert_date":"\u73fe\u5728\u306e\u65e5\u4ed8\u3084\u6642\u523b\u3092\u633f\u5165",remove:"\u524a\u9664","title_cite_element":"\u5f15\u7528\u8981\u7d20","title_abbr_element":"\u7565\u8a9e\u8981\u7d20","title_acronym_element":"\u982d\u5b57\u8a9e\u8981\u7d20","title_del_element":"\u8981\u7d20\u3092\u524a\u9664","title_ins_element":"\u8981\u7d20\u3092\u633f\u5165","fieldset_events_tab":"\u8981\u7d20\u306e\u30a4\u30d9\u30f3\u30c8","fieldset_attrib_tab":"\u8981\u7d20\u306e\u5c5e\u6027","fieldset_general_tab":"\u4e00\u822c\u7684\u306a\u8a2d\u5b9a","events_tab":"\u30a4\u30d9\u30f3\u30c8","attrib_tab":"\u5c5e\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u30a4\u30d9\u30f3\u30c8","attribute_label_accesskey":"\u30a2\u30af\u30bb\u30b9\u30ad\u30fc","attribute_label_tabindex":"\u30bf\u30d6\u30a4\u30f3\u30c7\u30c3\u30af\u30b9","attribute_label_langcode":"\u8a00\u8a9e","attribute_option_rtl":"\u53f3\u304b\u3089\u5de6","attribute_option_ltr":"\u5de6\u304b\u3089\u53f3","attribute_label_langdir":"\u6587\u7ae0\u306e\u65b9\u5411","attribute_label_datetime":"\u65e5\u4ed8/\u6642\u523b","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u30b9\u30bf\u30a4\u30eb","attribute_label_class":"\u30af\u30e9\u30b9","attribute_label_id":"ID","attribute_label_title":"\u30bf\u30a4\u30c8\u30eb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ka_dlg.js
new file mode 100644
index 000000000..9898869b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.xhtmlxtras_dlg',{"attribs_title":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d4\u10d1\u10d8","option_rtl":"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","option_ltr":"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5","insert_date":"\u10d7\u10d0\u10e0\u10d8\u10e6\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0",remove:"\u10ec\u10d0\u10e8\u10da\u10d0","title_cite_element":"\u10ea\u10d8\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","title_abbr_element":"\u10e8\u10d4\u10db\u10dd\u10d9\u10da\u10d4\u10d1\u10d0","title_acronym_element":"\u10d0\u10d1\u10e0\u10d8\u10d5\u10d8\u10d0\u10ea\u10d8\u10d0","title_del_element":"\u10ec\u10d0\u10e8\u10da\u10d0","title_ins_element":"\u10e8\u10d4\u10ea\u10d5\u10da\u10d0","fieldset_events_tab":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d4\u10d1\u10d8\u10e1 \u10db\u10dd\u10d5\u10da\u10d4\u10dc\u10d4\u10d1\u10d8","fieldset_attrib_tab":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","fieldset_general_tab":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","events_tab":"\u10db\u10dd\u10d5\u10da\u10d4\u10dc\u10d0","attrib_tab":"\u10d0\u10e2\u10e0\u10d8\u10d1\u10e3\u10e2\u10d8","general_tab":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd","attribute_attrib_tab":"\u10d0\u10e2\u10e0\u10d8\u10d1\u10e3\u10e2\u10d8","attribute_events_tab":"\u10db\u10dd\u10d5\u10da\u10d4\u10dc\u10d0","attribute_label_accesskey":"\u10ec\u10d5\u10d3\u10dd\u10db\u10d8\u10e1 \u10d2\u10d0\u10e1\u10d0\u10e6\u10d4\u10d1\u10d8","attribute_label_tabindex":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","attribute_label_langcode":"\u10d4\u10dc\u10d0","attribute_option_rtl":"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","attribute_option_ltr":"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5","attribute_label_langdir":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10db\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0","attribute_label_datetime":"\u10d7\u10d0\u10e0\u10d8\u10e6\u10d8/\u10d3\u10e0\u10dd","attribute_label_cite":"\u10ea\u10d8\u10e2\u10d0\u10e2\u10d0","attribute_label_style":"\u10e1\u10e2\u10d8\u10da\u10d8","attribute_label_class":"\u10d9\u10da\u10d0\u10e1\u10d8","attribute_label_id":"\u10e1\u10d0\u10ee\u10d4\u10da\u10d8","attribute_label_title":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/kl_dlg.js
new file mode 100644
index 000000000..fcdd05b74
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/km_dlg.js
new file mode 100644
index 000000000..8ae02df38
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.xhtmlxtras_dlg',{"attribs_title":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8","option_rtl":"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784","option_ltr":"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6","insert_date":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791/\u1798\u17c9\u17c4\u1784",remove:"\u1799\u1780\u1785\u17c1\u1789","title_cite_element":"\u1792\u17b6\u178f\u17bb\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u178a\u1780\u179f\u17d2\u179a\u1784\u17cb","title_abbr_element":"\u1792\u17b6\u178f\u17bb\u17a2\u1780\u17d2\u179f\u179a\u179f\u1784\u17d2\u1781\u17c1\u1794","title_acronym_element":"\u1792\u17b6\u178f\u17bb\u1796\u17b6\u1780\u17d2\u1799\u1780\u17b6\u178f\u17cb\u1799\u1780\u17a2\u1780\u17d2\u179f\u179a\u178a\u17be\u1798","title_del_element":"\u1792\u17b6\u178f\u17bb\u179b\u17bb\u1794","title_ins_element":"\u1792\u17b6\u178f\u17bb\u1794\u1789\u17d2\u1785\u17bc\u179b","fieldset_events_tab":"\u1792\u17b6\u178f\u17bb\u1796\u17d2\u179a\u17b9\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17cd","fieldset_attrib_tab":"\u1792\u17b6\u178f\u17bb\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8","fieldset_general_tab":"\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1791\u17bc\u1791\u17c5","events_tab":"\u1796\u17d2\u179a\u17b9\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17cd","attrib_tab":"\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8","general_tab":"\u1791\u17bc\u1791\u17c5","attribute_attrib_tab":"\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8","attribute_events_tab":"\u1796\u17d2\u179a\u17b9\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17cd","attribute_label_accesskey":"\u1782\u17d2\u179a\u17b6\u1794\u17cb\u1785\u17bb\u1785\u1795\u17d2\u179b\u17bc\u179c\u1780\u17b6\u178f\u17cb","attribute_label_tabindex":"\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179b\u17b7\u1794\u17b7\u1780\u17d2\u179a\u1798","attribute_label_langcode":"\u1797\u17b6\u179f\u17b6","attribute_option_rtl":"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784","attribute_option_ltr":"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6","attribute_label_langdir":"\u1791\u17b7\u179f\u178a\u17c5\u17a2\u178f\u17d2\u1790\u1794\u1791","attribute_label_datetime":"\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791/\u1798\u17c9\u17c4\u1784","attribute_label_cite":"\u178a\u1780\u179f\u17d2\u179a\u1784\u17cb","attribute_label_style":"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798","attribute_label_class":"\u1790\u17d2\u1793\u17b6\u1780\u17cb","attribute_label_id":"\u179b.\u179f.","attribute_label_title":"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ko_dlg.js
new file mode 100644
index 000000000..b89bd9dc6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.xhtmlxtras_dlg',{"attribs_title":"\uc18d\uc131 \uc0bd\uc785/\ud3b8\uc9d1","option_rtl":"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c","option_ltr":"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c","insert_date":"\ud604\uc7ac \ub0a0\uc9dc/\uc2dc\uac04 \uc0bd\uc785",remove:"\uc81c\uac70","title_cite_element":"\uc778\uc6a9 \uc694\uc18c","title_abbr_element":"\uc57d\uc5b4 \uc694\uc18c","title_acronym_element":"\uba38\ub9bf\uae00\uc790 \uc694\uc18c","title_del_element":"\uc0ad\uc81c \uc694\uc18c","title_ins_element":"\uc0bd\uc785 \uc694\uc18c","fieldset_events_tab":"\uc694\uc18c \uc774\ubca4\ud2b8","fieldset_attrib_tab":"\uc694\uc18c \uc18d\uc131","fieldset_general_tab":"\uc77c\ubc18 \uc124\uc815","events_tab":"\uc774\ubca4\ud2b8","attrib_tab":"\uc18d\uc131","general_tab":"\uc77c\ubc18","attribute_attrib_tab":"\uc18d\uc131","attribute_events_tab":"\uc774\ubca4\ud2b8","attribute_label_accesskey":"\uc561\uc138\uc2a4 \ud0a4","attribute_label_tabindex":"\ud0ed \uc778\ub371\uc2a4","attribute_label_langcode":"\uc5b8\uc5b4","attribute_option_rtl":"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c","attribute_option_ltr":"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c","attribute_label_langdir":"\ubb38\uc790 \ubc29\ud5a5","attribute_label_datetime":"\ub0a0\uc9dc/\uc2dc\uac04","attribute_label_cite":"\uc778\uc6a9","attribute_label_style":"\uc11c\uc2dd","attribute_label_class":"\ud074\ub798\uc2a4","attribute_label_id":"ID","attribute_label_title":"\uc81c\ubaa9"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/kz_dlg.js
new file mode 100644
index 000000000..c0165efbe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to Left","option_ltr":"Left to Right","insert_date":"Insert Current Date/Time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to Left","attribute_option_ltr":"Left to Right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lb_dlg.js
new file mode 100644
index 000000000..035f3e756
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.xhtmlxtras_dlg',{"attribs_title":"Attributer af\u00fcgen/beaarbechten","option_rtl":"Riets no l\u00e9nks","option_ltr":"L\u00e9nks no riets","insert_date":"Aktuell Z\u00e4it/Datum af\u00fcgen",remove:"Ewechhuelen","title_cite_element":"Quellenangab","title_abbr_element":"Ofkierzung","title_acronym_element":"Akronym","title_del_element":"Ewechgehollenen Text","title_ins_element":"Agef\u00fcgtenen Text","fieldset_events_tab":"Ereegnes","fieldset_attrib_tab":"Attributer","fieldset_general_tab":"Allgemeng Astellungen","events_tab":"Ereegnes","attrib_tab":"Attributer","general_tab":"Allgemeng","attribute_attrib_tab":"Attributer","attribute_events_tab":"Ereegnes","attribute_label_accesskey":"Tastekierzel","attribute_label_tabindex":"Tabindex","attribute_label_langcode":"Sproochen","attribute_option_rtl":"Riets no l\u00e9nks","attribute_option_ltr":"L\u00e9nks no riets","attribute_label_langdir":"Schr\u00ebftrichtung","attribute_label_datetime":"Z\u00e4it/Datum","attribute_label_cite":"Quellenangab","attribute_label_style":"Format","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lt_dlg.js
new file mode 100644
index 000000000..ebf7cfb31
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.xhtmlxtras_dlg',{"attribs_title":"\u012eterpti/Redaguoti atributus","option_rtl":"I\u0161 de\u0161in\u0117s \u012f kair\u0119","option_ltr":"I\u0161 kair\u0117s \u012f de\u0161in\u0119","insert_date":"\u012eterpti dabartin\u0119 dat\u0105/laik\u0105",remove:"Pa\u0161alinti","title_cite_element":"Citatos elementas","title_abbr_element":"Santrumpos elementas","title_acronym_element":"Akronimo elementas","title_del_element":"Pa\u0161alinimo elementas","title_ins_element":"\u012eterpimo elementas","fieldset_events_tab":"Elemento \u012fvykiai","fieldset_attrib_tab":"Elemento atributai","fieldset_general_tab":"Bendri nustatymai","events_tab":"\u012evykiai","attrib_tab":"Atributai","general_tab":"Bendra","attribute_attrib_tab":"Atributai","attribute_events_tab":"\u012evykiai","attribute_label_accesskey":"Prieigos klavi\u0161as","attribute_label_tabindex":"Tabuliavimo indeksas","attribute_label_langcode":"Kalba","attribute_option_rtl":"I\u0161 de\u0161in\u0117s \u012f kair\u0119","attribute_option_ltr":"I\u0161 kair\u0117s \u012f de\u0161in\u0119","attribute_label_langdir":"Kalbos teksto kryptis","attribute_label_datetime":"Data/Laikas","attribute_label_cite":"Citata","attribute_label_style":"Stilius","attribute_label_class":"Klas\u0117","attribute_label_id":"ID","attribute_label_title":"Pavadinimas"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lv_dlg.js
new file mode 100644
index 000000000..f41b5045d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"\u012apa\u0161\u012bbas","attribute_events_tab":"Notikumi","attribute_label_accesskey":"Pieejas poga","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Valoda","attribute_option_rtl":"No labas puses uz kreiso","attribute_option_ltr":"No kreisas puses uz labo","attribute_label_langdir":"Teksta v\u012brziens","attribute_label_datetime":"Datums/Laiks","attribute_label_cite":"Cite","attribute_label_style":"Stils","attribute_label_class":"Klase","attribute_label_id":"ID","attribute_label_title":"Nosaukums"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/mk_dlg.js
new file mode 100644
index 000000000..0e7d13a11
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.xhtmlxtras_dlg',{"attribs_title":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","option_rtl":"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e","option_ltr":"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e","insert_date":"\u0412\u043d\u0435\u0441\u0438 \u0442\u0435\u043a\u043e\u0432\u0435\u043d \u0434\u0430\u0442\u0443\u043c/\u0432\u0440\u0435\u043c\u0435",remove:"\u041e\u0434\u0441\u0442\u0440\u0430\u043d\u0438","title_cite_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0446\u0438\u0442\u0430\u0442","title_abbr_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u043a\u0440\u0430\u0442\u0435\u043d\u043a\u0430","title_acronym_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0430\u043a\u0440\u043e\u043d\u0438\u043c","title_del_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u0431\u0440\u0438\u0448\u0435\u045a\u0435","title_ins_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u0432\u043d\u0435\u0441","fieldset_events_tab":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u043d\u0430\u0441\u0442\u0430\u043d\u0438","fieldset_attrib_tab":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","fieldset_general_tab":"\u041e\u0441\u043d\u043e\u0432\u043d\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0443\u0432\u0430\u045a\u0430","events_tab":"\u041d\u0430\u0441\u0442\u0430\u043d\u0438","attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","general_tab":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e","attribute_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","attribute_events_tab":"\u041d\u0430\u0441\u0442\u0430\u043d\u0438","attribute_label_accesskey":"\u041a\u043b\u0443\u0447 \u0437\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u043f","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"\u0408\u0430\u0437\u0438\u043a","attribute_option_rtl":"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e","attribute_option_ltr":"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e","attribute_label_langdir":"\u0421\u043c\u0435\u0440 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442","attribute_label_datetime":"\u0414\u0430\u0442\u0443\u043c/\u0432\u0440\u0435\u043c\u0435","attribute_label_cite":"\u0426\u0438\u0442\u0430\u0442","attribute_label_style":"\u0421\u0442\u0438\u043b","attribute_label_class":"\u041a\u043b\u0430\u0441\u0430","attribute_label_id":"\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0458\u0430 (Id)","attribute_label_title":"\u041d\u0430\u0441\u043b\u043e\u0432"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ml_dlg.js
new file mode 100644
index 000000000..2f1cca92d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/mn_dlg.js
new file mode 100644
index 000000000..4e8296a3a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.xhtmlxtras_dlg',{"attribs_title":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0445","option_rtl":"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d","option_ltr":"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d","insert_date":"\u0418\u0434\u044d\u0432\u0445\u0442\u044d\u0439 \u0446\u0430\u0433/\u043e\u0433\u043d\u043e\u043e \u0431\u0443\u0443\u043b\u0433\u0430\u0445",remove:"\u0423\u0441\u0442\u0433\u0430\u0445","title_cite_element":"\u042d\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b","title_abbr_element":"\u0422\u043e\u0432\u0447\u043b\u043e\u043b","title_acronym_element":"\u0422\u043e\u0432\u0447\u0438\u043b\u0441\u043e\u043d \u04af\u0433","title_del_element":"\u0423\u0441\u0442\u0441\u0430\u043d \u0431\u0438\u0447\u0432\u044d\u0440","title_ins_element":"\u0411\u0443\u0443\u043b\u0433\u0430\u0441\u0430\u043d \u0431\u0438\u0447\u0432\u044d\u0440","fieldset_events_tab":"\u04ae\u0437\u044d\u0433\u0434\u044d\u043b","fieldset_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442","fieldset_general_tab":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439 \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","events_tab":"\u04ae\u0437\u044d\u0433\u0434\u044d\u043b","attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442","general_tab":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439","attribute_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442","attribute_events_tab":"\u04ae\u0437\u044d\u0433\u0434\u044d\u043b","attribute_label_accesskey":"\u0422\u043e\u0432\u0447\u0438\u043b\u0431\u043e\u0440","attribute_label_tabindex":"\u0422\u0430\u0431\u0443\u043b\u0430\u0442\u043e\u0440 \u0438\u043d\u0434\u0435\u043a\u0441","attribute_label_langcode":"\u0425\u044d\u043b","attribute_option_rtl":"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d","attribute_option_ltr":"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d","attribute_label_langdir":"\u0425\u044d\u043b\u043d\u0438\u0439 \u0447\u0438\u0433\u043b\u044d\u043b","attribute_label_datetime":"\u0426\u0430\u0433/\u041e\u0433\u043d\u043e\u043e","attribute_label_cite":"\u042d\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b","attribute_label_style":"\u0425\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442","attribute_label_class":"\u0410\u043d\u0433\u0438","attribute_label_id":"\u0422\u0422","attribute_label_title":"\u0413\u0430\u0440\u0447\u0438\u0433"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ms_dlg.js
new file mode 100644
index 000000000..19db57528
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.xhtmlxtras_dlg',{"attribs_title":"Masukkan/Sunting Ciri-ciri","option_rtl":"Kanan ke kiri","option_ltr":"Kiri ke kanan","insert_date":"Masukkan tarikh/masa sekarang",remove:"Alih","title_cite_element":"Kutipan Unsur","title_abbr_element":"Singkatan Unsur","title_acronym_element":"Akronim Unsur","title_del_element":"Pemadaman Unsur","title_ins_element":"Kemasukkan Unsur","fieldset_events_tab":"Unsur Peristiwa","fieldset_attrib_tab":"Unsur Ciri-ciri","fieldset_general_tab":"Susunan Am","events_tab":"Peristiwa","attrib_tab":"Ciri-ciri","general_tab":"Am","attribute_attrib_tab":"Ciri-ciri","attribute_events_tab":"Peristiwa","attribute_label_accesskey":"Kunci akses","attribute_label_tabindex":"Tanda indeks","attribute_label_langcode":"Bahasa","attribute_option_rtl":"Kanan ke kiri","attribute_option_ltr":"Kiri ke kanan","attribute_label_langdir":"Arah Teks","attribute_label_datetime":"Tarikh/Masa","attribute_label_cite":"Cuplik","attribute_label_style":"Gaya","attribute_label_class":"Kelas","attribute_label_id":"ID","attribute_label_title":"Tajuk"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/my_dlg.js
new file mode 100644
index 000000000..b79183a64
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to Left","option_ltr":"Left to Right","insert_date":"Insert Current Date/Time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to Left","attribute_option_ltr":"Left to Right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nb_dlg.js
new file mode 100644
index 000000000..e5207ebc6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.xhtmlxtras_dlg',{"attribs_title":"Sett inn / endre attributter","option_rtl":"H\u00f8yre mot venstre","option_ltr":"Venstre mot h\u00f8yre","insert_date":"Sett inn dato/tid",remove:"Fjern","title_cite_element":"Sitatelement","title_abbr_element":"Forkortelseselement","title_acronym_element":"Akronymelement","title_del_element":"Sletteelement","title_ins_element":"Innsettingselement","fieldset_events_tab":"Elementhendelser","fieldset_attrib_tab":"Elementattributter","fieldset_general_tab":"Generelle innstillinger","events_tab":"Hendelser","attrib_tab":"Attributter","general_tab":"Generelt","attribute_attrib_tab":"Attributter","attribute_events_tab":"Hendelser","attribute_label_accesskey":"Tilgangsn\u00f8kkel","attribute_label_tabindex":"Tabuleringsindeks","attribute_label_langcode":"Spr\u00e5k","attribute_option_rtl":"H\u00f8yre til venstre","attribute_option_ltr":"Venstre til h\u00f8yre","attribute_label_langdir":"Tekstretning","attribute_label_datetime":"Dato/tid","attribute_label_cite":"Sted","attribute_label_style":"Stil","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Tittel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nl_dlg.js
new file mode 100644
index 000000000..5708ddfe4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.xhtmlxtras_dlg',{"attribs_title":"Attributen Invoegen/bewerken","option_rtl":"Van rechts naar links","option_ltr":"Van links naar rechts","insert_date":"Huidige datum/tijd invoegen",remove:"Verwijderen","title_cite_element":"Citaat","title_abbr_element":"Afkorting","title_acronym_element":"Synoniem","title_del_element":"Verwijderingselement","title_ins_element":"Invoegingselement","fieldset_events_tab":"Element Gebeurtenissen","fieldset_attrib_tab":"Elementattributen","fieldset_general_tab":"Algemene instellingen","events_tab":"Gebeurtenissen","attrib_tab":"Attributen","general_tab":"Algemeen","attribute_attrib_tab":"Attributen","attribute_events_tab":"Gebeurtenissen","attribute_label_accesskey":"Toegangstoets","attribute_label_tabindex":"Tabvolgorde","attribute_label_langcode":"Taal","attribute_option_rtl":"Van rechts naar links","attribute_option_ltr":"Van links naar rechts","attribute_label_langdir":"Tekstrichting","attribute_label_datetime":"Datum/Tijd","attribute_label_cite":"Citaat","attribute_label_style":"Stijl","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nn_dlg.js
new file mode 100644
index 000000000..415d7245e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.xhtmlxtras_dlg',{"attribs_title":"Set inn / endre attributt","option_rtl":"H\u00f8gre mot venstre","option_ltr":"Venstre mot h\u00f8gre","insert_date":"Set inn dato/ti",remove:"Fjern","title_cite_element":"Sitatelement","title_abbr_element":"Forkortingselement","title_acronym_element":"Akronymelement","title_del_element":"Sletteelement","title_ins_element":"Innsetjingselement","fieldset_events_tab":"Elementhendingar","fieldset_attrib_tab":"Elementattributtar","fieldset_general_tab":"Generelle innstillingar","events_tab":"Hendingar","attrib_tab":"Attributtar","general_tab":"Generelt","attribute_attrib_tab":"Attributt","attribute_events_tab":"Hendingar","attribute_label_accesskey":"Tilgangsn\u00f8kkel","attribute_label_tabindex":"Tabuleringsindeks","attribute_label_langcode":"Spr\u00e5k","attribute_option_rtl":"H\u00f8gre mot venstre","attribute_option_ltr":"Venstre mot h\u00f8gre","attribute_label_langdir":"Tekstretning","attribute_label_datetime":"Dato/tid","attribute_label_cite":"Stad","attribute_label_style":"Stil","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Tittel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/no_dlg.js
new file mode 100644
index 000000000..7949e642a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.xhtmlxtras_dlg',{"attribs_title":"Sett inn/editer attributt","option_rtl":"H\u00f8yre mot venstre","option_ltr":"Venstre mot h\u00f8yre","insert_date":"Sett inn dato/tid",remove:"Fjerne","title_cite_element":"Sitat element","title_abbr_element":"Forkorting element","title_acronym_element":"Akronym element","title_del_element":"Slette element","title_ins_element":"Innsetting element","fieldset_events_tab":"Element hendelser","fieldset_attrib_tab":"Element attributter","fieldset_general_tab":"Generelle innstillinger","events_tab":"Hendelser","attrib_tab":"Attributter","general_tab":"Generelt","attribute_attrib_tab":"Attributter","attribute_events_tab":"Hendelser","attribute_label_accesskey":"Tilgangsn\u00f8kkel","attribute_label_tabindex":"Tab indeks","attribute_label_langcode":"Spr\u00e5k","attribute_option_rtl":"H\u00f8yre mot venstre","attribute_option_ltr":"Venstre mot h\u00f8yre","attribute_label_langdir":"Tekstretning","attribute_label_datetime":"Dato/tid","attribute_label_cite":"Sted","attribute_label_style":"Stil","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Tittel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/pl_dlg.js
new file mode 100644
index 000000000..a409dd326
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.xhtmlxtras_dlg',{"attribs_title":"Wklej/edytuj atrybuty","option_rtl":"Kierunek z prawej do lewej","option_ltr":"Kierunek z lewej do prawej","insert_date":"Wklej aktualn\u0105 dat\u0119/czas",remove:"Usu\u0144","title_cite_element":"Cytat","title_abbr_element":"Skr\u00f3t","title_acronym_element":"Akronim","title_del_element":"Usuni\u0119cie","title_ins_element":"Wstawienie","fieldset_events_tab":"Zdarzenia","fieldset_attrib_tab":"Atrybuty","fieldset_general_tab":"G\u0142\u00f3wne ustawienia","events_tab":"Zdarzenia","attrib_tab":"Atrybuty","general_tab":"G\u0142\u00f3wny","attribute_attrib_tab":"Atrybuty","attribute_events_tab":"Zdarzenia","attribute_label_accesskey":"Klawisz skr\u00f3tu","attribute_label_tabindex":"Numer tabulacji","attribute_label_langcode":"J\u0119zyk","attribute_option_rtl":"Kierunek z prawej do lewej","attribute_option_ltr":"Kierunek z lewej do prawej","attribute_label_langdir":"Kierunek czytania tekstu","attribute_label_datetime":"Data/Czas","attribute_label_cite":"Cytat","attribute_label_style":"Styl","attribute_label_class":"Klasa","attribute_label_id":"ID","attribute_label_title":"Tytu\u0142"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ps_dlg.js
new file mode 100644
index 000000000..e0d668add
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/pt_dlg.js
new file mode 100644
index 000000000..520eaa535
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.xhtmlxtras_dlg',{"attribs_title":"Inserir/editar atributos","option_rtl":"Da direita para a esquerda","option_ltr":"Da esquerda para a direita","insert_date":"Inserir data/hora",remove:"Remover","title_cite_element":"Cita\u00e7\u00e3o","title_abbr_element":"Abrevia\u00e7\u00e3o","title_acronym_element":"Acr\u00f4nimo","title_del_element":"Apagar","title_ins_element":"Inserir","fieldset_events_tab":"Eventos","fieldset_attrib_tab":"Atributos","fieldset_general_tab":"Configura\u00e7\u00f5es gerais","events_tab":"Eventos","attrib_tab":"Atributos","general_tab":"Geral","attribute_attrib_tab":"Atributos","attribute_events_tab":"Eventos","attribute_label_accesskey":"Tecla de Atalho","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Idioma","attribute_option_rtl":"Da direita para a esquerda","attribute_option_ltr":"Da esquerda para a direita","attribute_label_langdir":"Dire\u00e7\u00e3o do texto","attribute_label_datetime":"Data/Hora","attribute_label_cite":"Citar","attribute_label_style":"Estilo","attribute_label_class":"Classe","attribute_label_id":"ID","attribute_label_title":"T\u00edtulo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ro_dlg.js
new file mode 100644
index 000000000..bb802193c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.xhtmlxtras_dlg',{"attribs_title":"Inserare atribute","option_rtl":"De la dreapta la st\u00e2nga","option_ltr":"De la st\u00e2nga la dreapta","insert_date":"Inserare dat\u0103/or\u0103 curent\u0103",remove:"Scoate","title_cite_element":"Citare","title_abbr_element":"Abreviere","title_acronym_element":"Acronim","title_del_element":"\u0218tergere element","title_ins_element":"Inserare element","fieldset_events_tab":"Evenimente element","fieldset_attrib_tab":"Atribute element","fieldset_general_tab":"Set\u0103ri generale","events_tab":"Evenimente","attrib_tab":"Atribute","general_tab":"General","attribute_attrib_tab":"Atribute","attribute_events_tab":"Evenimente","attribute_label_accesskey":"Tast\u0103 de acces","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Limb\u0103","attribute_option_rtl":"De la dreapta la st\u00e2nga","attribute_option_ltr":"De la st\u00e2nga la dreapta","attribute_label_langdir":"Direc\u021bie text","attribute_label_datetime":"Dat\u0103/or\u0103","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Clas\u0103","attribute_label_id":"ID","attribute_label_title":"Titlu"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ru_dlg.js
new file mode 100644
index 000000000..bd25335d6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.xhtmlxtras_dlg',{"attribs_title":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430","option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","option_ltr":"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e","insert_date":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0434\u0430\u0442\u0443/\u0432\u0440\u0435\u043c\u044f",remove:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c","title_cite_element":"\u0426\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","title_abbr_element":"\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435","title_acronym_element":"\u0410\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0446\u0438\u044f","title_del_element":"\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435","title_ins_element":"\u0417\u0430\u043c\u0435\u043d\u0430","fieldset_events_tab":"\u0421\u043e\u0431\u044b\u0442\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_attrib_tab":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_general_tab":"\u041e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","events_tab":"\u0421\u043e\u0431\u044b\u0442\u0438\u044f","attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b","general_tab":"\u041e\u0431\u0449\u0435\u0435","attribute_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b","attribute_events_tab":"\u0421\u043e\u0431\u044b\u0442\u0438\u044f","attribute_label_accesskey":"\u041a\u043b\u044e\u0447 \u0434\u043e\u0441\u0442\u0443\u043f\u0430","attribute_label_tabindex":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","attribute_label_langcode":"\u042f\u0437\u044b\u043a","attribute_option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","attribute_option_ltr":"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e","attribute_label_langdir":"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430","attribute_label_datetime":"\u0414\u0430\u0442\u0430/\u0412\u0440\u0435\u043c\u044f","attribute_label_cite":"\u0426\u0438\u0442\u0430\u0442\u0430","attribute_label_style":"\u0421\u0442\u0438\u043b\u044c","attribute_label_class":"\u041a\u043b\u0430\u0441\u0441","attribute_label_id":"\u0418\u043c\u044f","attribute_label_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sc_dlg.js
new file mode 100644
index 000000000..065334569
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","option_rtl":"\u7531\u53f3\u5230\u5de6","option_ltr":"\u7531\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u73b0\u5728\u65e5\u671f/\u65f6\u95f4",remove:"\u5220\u9664","title_cite_element":"\u5f15\u6587\u5143\u7d20","title_abbr_element":"\u7f29\u5199\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u7f29\u5199\u5143\u7d20","title_del_element":"\u5220\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c5e\u6027","fieldset_general_tab":"\u4e00\u822c","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u952e","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u7531\u53f3\u5230\u5de6","attribute_option_ltr":"\u7531\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u4e66\u5199\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u6587","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u7c7b\u578b","attribute_label_id":"ID","attribute_label_title":"\u67e5\u627e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/se_dlg.js
new file mode 100644
index 000000000..a8c468df4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.xhtmlxtras_dlg',{"attribs_title":"Redigera attribut","option_rtl":"H\u00f6ger till v\u00e4nster","option_ltr":"V\u00e4nster till h\u00f6ger","insert_date":"Infoga nuvarande datum och tid",remove:"Radera","title_cite_element":"Citat","title_abbr_element":"F\u00f6rkortning","title_acronym_element":"Akronym","title_del_element":"Markera som struket","title_ins_element":"Markera som tillagt","fieldset_events_tab":"H\u00e4ndelser","fieldset_attrib_tab":"Attribut","fieldset_general_tab":"Generella inst\u00e4llningar","events_tab":"H\u00e4ndelser","attrib_tab":"Attribut","general_tab":"Generellt","attribute_attrib_tab":"Attribut","attribute_events_tab":"H\u00e4ndelser","attribute_label_accesskey":"Snabbtangent","attribute_label_tabindex":"Tabbindex","attribute_label_langcode":"Spr\u00e5k","attribute_option_rtl":"H\u00f6ger till v\u00e4nster","attribute_option_ltr":"V\u00e4nster till h\u00f6ger","attribute_label_langdir":"Skriftriktning","attribute_label_datetime":"Datum/Tid","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klass","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/si_dlg.js
new file mode 100644
index 000000000..4d44aa567
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sk_dlg.js
new file mode 100644
index 000000000..3ee6e8b5d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.xhtmlxtras_dlg',{"attribs_title":"Vlo\u017ei\u0165/upravi\u0165 atrib\u00faty","option_rtl":"Sprava do\u013eava","option_ltr":"Z\u013eava doprava","insert_date":"Vlo\u017ei\u0165 aktu\u00e1lny d\u00e1tum/\u010das",remove:"Odstr\u00e1ni\u0165","title_cite_element":"Cit\u00e1cia","title_abbr_element":"Skratka","title_acronym_element":"Akronym","title_del_element":"Odstr\u00e1nen\u00fd text","title_ins_element":"Pridan\u00fd text","fieldset_events_tab":"Atrib\u00faty udalost\u00ed","fieldset_attrib_tab":"Atrib\u00faty prvku","fieldset_general_tab":"Obecn\u00e9 parametre","events_tab":"Udalosti","attrib_tab":"Atrib\u00faty","general_tab":"Obecn\u00e9","attribute_attrib_tab":"Atrib\u00faty","attribute_events_tab":"Udalosti","attribute_label_accesskey":"Kl\u00e1vesov\u00e1 skratka","attribute_label_tabindex":"Poradie pre tabul\u00e1tor","attribute_label_langcode":"Jazyk","attribute_option_rtl":"Sprava do\u013eava","attribute_option_ltr":"Z\u013eava doprava","attribute_label_langdir":"Smer textu","attribute_label_datetime":"D\u00e1tum/\u010das","attribute_label_cite":"Cit\u00e1cia","attribute_label_style":"\u0160t\u00fdl","attribute_label_class":"Trieda","attribute_label_id":"ID","attribute_label_title":"Titulok"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sl_dlg.js
new file mode 100644
index 000000000..09cb321e5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.xhtmlxtras_dlg',{"attribs_title":"Vstavi/uredi atribute","option_rtl":"Od desne proti levi","option_ltr":"Od leve proti desni","insert_date":"Vstavi trenutni datum/\u010das",remove:"Odstrani","title_cite_element":"Citat","title_abbr_element":"Okraj\u0161ava","title_acronym_element":"Kratica","title_del_element":"Izbrisano","title_ins_element":"Vstavljeno","fieldset_events_tab":"Dogodki elementa","fieldset_attrib_tab":"Atributi elementa","fieldset_general_tab":"Splo\u0161ne nastavitve","events_tab":"Dogodki","attrib_tab":"Atributi","general_tab":"Splo\u0161no","attribute_attrib_tab":"Atributi","attribute_events_tab":"Dogodki","attribute_label_accesskey":"Tipka dostopa","attribute_label_tabindex":"Zap. \u0161t.","attribute_label_langcode":"Jezik","attribute_option_rtl":"Od desne proti levi","attribute_option_ltr":"Od leve proti desni","attribute_label_langdir":"Smer pisave","attribute_label_datetime":"Datum/ura","attribute_label_cite":"Citat","attribute_label_style":"Slog","attribute_label_class":"Razred","attribute_label_id":"Id","attribute_label_title":"Naslov"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sq_dlg.js
new file mode 100644
index 000000000..27641487a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.xhtmlxtras_dlg',{"attribs_title":"Fut/Edito Tipare","option_rtl":"Djathtas-Majtas","option_ltr":"Majtas-Djathtas","insert_date":"Fut dat\u00ebn/or\u00ebn aktuale",remove:"Fshi","title_cite_element":"Element Citat","title_abbr_element":"Element Shkurtimi","title_acronym_element":"Element Akronim","title_del_element":"Element Fshir\u00ebs","title_ins_element":"Element Fut\u00ebs","fieldset_events_tab":"Ngjarjet e elementit","fieldset_attrib_tab":"Tiparet e elementit","fieldset_general_tab":"Opsionet e P\u00ebrgjithshme","events_tab":"Ngjarjet","attrib_tab":"Tiparet","general_tab":"T\u00eb P\u00ebrgjithshme","attribute_attrib_tab":"Tiparet","attribute_events_tab":"Ngjarjet","attribute_label_accesskey":"Butoni i aksesit","attribute_label_tabindex":"Indeksi i Tab","attribute_label_langcode":"Gjuha","attribute_option_rtl":"Djathtas-Majtas","attribute_option_ltr":"Majtas-Djathtas","attribute_label_langdir":"Drejtimi i tekstit","attribute_label_datetime":"Data/Ora","attribute_label_cite":"Citati","attribute_label_style":"Stili","attribute_label_class":"Klasa","attribute_label_id":"ID","attribute_label_title":"Titulli"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sr_dlg.js
new file mode 100644
index 000000000..8d72ccc67
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.xhtmlxtras_dlg',{"attribs_title":"Umetni/Uredi atribute","option_rtl":"Zdesna nalevo","option_ltr":"Sleva nadesno","insert_date":"Ubaci sada\u0161nji datum/vreme",remove:"Ukloni","title_cite_element":"Element za citat","title_abbr_element":"Element za skra\u0107enicu","title_acronym_element":"Element za akronim","title_del_element":"Element za brisanje","title_ins_element":"Element za umetanje ","fieldset_events_tab":"Element za doga\u0111aje","fieldset_attrib_tab":"Element za atribute","fieldset_general_tab":"Osnovna pode\u0161avanja","events_tab":"Doga\u0111aji","attrib_tab":"Atributi","general_tab":"Osnovno","attribute_attrib_tab":"Atributi","attribute_events_tab":"Doga\u0111aji","attribute_label_accesskey":"Taster za pristup","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Jezik","attribute_option_rtl":"Zdesna nalevo","attribute_option_ltr":"Sleva nadesno","attribute_label_langdir":"Smer teksta","attribute_label_datetime":"Datum/Vreme","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klasa","attribute_label_id":"ID","attribute_label_title":"Naslov"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sv_dlg.js
new file mode 100644
index 000000000..71847974c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.xhtmlxtras_dlg',{"attribs_title":"Redigera attribut","option_rtl":"H\u00f6ger till v\u00e4nster","option_ltr":"V\u00e4nster till h\u00f6ger","insert_date":"Infoga nuvarande datum och tid",remove:"Radera","title_cite_element":"Citat","title_abbr_element":"F\u00f6rkortning","title_acronym_element":"Akronym","title_del_element":"Markera som struket","title_ins_element":"Markera som tillagt","fieldset_events_tab":"H\u00e4ndelser","fieldset_attrib_tab":"Attribut","fieldset_general_tab":"Generella inst\u00e4llningar","events_tab":"H\u00e4ndelser","attrib_tab":"Attribut","general_tab":"Generellt","attribute_attrib_tab":"Attribut","attribute_events_tab":"H\u00e4ndelser","attribute_label_accesskey":"Snabbtangent","attribute_label_tabindex":"Tabbindex","attribute_label_langcode":"Spr\u00e5k","attribute_option_rtl":"H\u00f6ger till v\u00e4nster","attribute_option_ltr":"V\u00e4nster till h\u00f6ger","attribute_label_langdir":"Skriftriktning","attribute_label_datetime":"Datum/Tid","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klass","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sy_dlg.js
new file mode 100644
index 000000000..84e20e652
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to Left","option_ltr":"Left to Right","insert_date":"Insert Current Date/Time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to Left","attribute_option_ltr":"Left to Right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ta_dlg.js
new file mode 100644
index 000000000..3079423b1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/te_dlg.js
new file mode 100644
index 000000000..9e6d8eac9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/th_dlg.js
new file mode 100644
index 000000000..c5e2eb43e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.xhtmlxtras_dlg',{"attribs_title":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 Attributes","option_rtl":"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22","option_ltr":"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32","insert_date":"\u0e40\u0e1e\u0e34\u0e48\u0e21 \u0e27\u0e31\u0e19/\u0e40\u0e27\u0e25\u0e32",remove:"\u0e25\u0e1a","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Event","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","events_tab":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21","attrib_tab":"Attributes","general_tab":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","attribute_attrib_tab":"Attributes","attribute_events_tab":"Event","attribute_label_accesskey":"\u0e1b\u0e38\u0e48\u0e21\u0e25\u0e31\u0e14","attribute_label_tabindex":"\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e41\u0e17\u0e47\u0e1a","attribute_label_langcode":"\u0e20\u0e32\u0e29\u0e32","attribute_option_rtl":"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22","attribute_option_ltr":"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32","attribute_label_langdir":"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","attribute_label_datetime":"\u0e27\u0e31\u0e19/\u0e40\u0e27\u0e25\u0e32","attribute_label_cite":"Cite","attribute_label_style":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","attribute_label_class":"\u0e04\u0e25\u0e32\u0e2a","attribute_label_id":"ID","attribute_label_title":"\u0e0a\u0e37\u0e48\u0e2d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tn_dlg.js
new file mode 100644
index 000000000..a26d16291
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tr_dlg.js
new file mode 100644
index 000000000..cca543566
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.xhtmlxtras_dlg',{"attribs_title":"Nitelik ekle/d\u00fczenle","option_rtl":"Soldan sa\u011fa","option_ltr":"Sa\u011fdan sola","insert_date":"\u015euan ki tarih/saati ekle",remove:"Sil","title_cite_element":"Nesne Al\u0131nt\u0131s\u0131","title_abbr_element":"Nesne K\u0131saltmas\u0131","title_acronym_element":"Nense K\u0131sa ad\u0131","title_del_element":"Nesne Silme","title_ins_element":"Nesne Ekleme","fieldset_events_tab":"Nesne Olaylar\u0131","fieldset_attrib_tab":"Nesne Nitelikleri","fieldset_general_tab":"Genel Ayarlar","events_tab":"Olaylar","attrib_tab":"Nitelikler","general_tab":"Genel","attribute_attrib_tab":"Nitelikler","attribute_events_tab":"Olaylar","attribute_label_accesskey":"Eri\u015fim Tu\u015fu","attribute_label_tabindex":"Sekme indeksi","attribute_label_langcode":"Dil","attribute_option_rtl":"Soldan sa\u011fa","attribute_option_ltr":"Sa\u011fdan sola","attribute_label_langdir":"Metnin y\u00f6n\u00fc","attribute_label_datetime":"Tarih/Saat","attribute_label_cite":"Al\u0131nt\u0131 yapmak","attribute_label_style":"Stil","attribute_label_class":"S\u0131n\u0131f","attribute_label_id":"ID","attribute_label_title":"Ba\u015fl\u0131k"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tt_dlg.js
new file mode 100644
index 000000000..3e678a1ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7de8\u8f2f \u5c6c\u6027","option_rtl":"\u5f9e\u53f3\u5230\u5de6","option_ltr":"\u5f9e\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u7576\u524d\u65e5\u671f/\u6642\u9593",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u7269\u4ef6","title_abbr_element":"\u7e2e\u5beb\u7269\u4ef6","title_acronym_element":"\u9996\u5b57\u6bcd\u7e2e\u5beb\u7269\u4ef6","title_del_element":"\u522a\u9664\u7269\u4ef6","title_ins_element":"\u63d2\u5165\u7269\u4ef6","fieldset_events_tab":"\u7269\u4ef6\u4e8b\u4ef6","fieldset_attrib_tab":"\u7269\u4ef6\u5c6c\u6027","fieldset_general_tab":"\u57fa\u672c","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c6c\u6027","general_tab":"\u57fa\u672c","attribute_attrib_tab":"\u5c6c\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u901f\u9375","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8a9e\u8a00","attribute_option_rtl":"\u5f9e\u53f3\u5230\u5de6","attribute_option_ltr":"\u5f9e\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u66f8\u5beb\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u6642\u9593","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6a23\u5f0f","attribute_label_class":"\u6a23\u5f0f\u985e","attribute_label_id":"ID","attribute_label_title":"\u641c\u5c0b"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tw_dlg.js
new file mode 100644
index 000000000..470b9a566
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7de8\u8f2f\u5c6c\u6027","option_rtl":"\u5f9e\u53f3\u5230\u5de6","option_ltr":"\u5f9e\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u76ee\u524d\u65e5\u671f/\u6642\u9593",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5143\u7d20","title_abbr_element":"\u7e2e\u5beb\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u6bcd\u7e2e\u5beb\u5143\u7d20","title_del_element":"\u522a\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c6c\u6027","fieldset_general_tab":"\u4e00\u822c\u8a2d\u5b9a","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c6c\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c6c\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u9375","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8a9e\u8a00","attribute_option_rtl":"\u5f9e\u53f3\u5230\u5de6","attribute_option_ltr":"\u5f9e\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u66f8\u5beb\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u6642\u9593","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6a23\u5f0f","attribute_label_class":"\u985e\u5225","attribute_label_id":"ID","attribute_label_title":"\u6a19\u984c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/uk_dlg.js
new file mode 100644
index 000000000..1dbf92892
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.xhtmlxtras_dlg',{"attribs_title":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043b\u0456\u0432\u043e\u0440\u0443\u0447","option_ltr":"\u0417\u043b\u0456\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447","insert_date":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0442\u043e\u0447\u043d\u0456 \u0434\u0430\u0442\u0443/\u0447\u0430\u0441",remove:"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438","title_cite_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0446\u0438\u0442\u0443\u0432\u0430\u043d\u043d\u044f","title_abbr_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0430\u0431\u0440\u0435\u0432\u0456\u0430\u0442\u0443\u0440\u0438","title_acronym_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0430\u043a\u0440\u043e\u043d\u0456\u043c\u0443","title_del_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0438\u0434\u0430\u043b\u0435\u043d\u043d\u044f","title_ins_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0441\u0442\u0430\u0432\u043a\u0438","fieldset_events_tab":"\u041f\u043e\u0434\u0456\u0457 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0443","fieldset_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0443","fieldset_general_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f","events_tab":"\u041f\u043e\u0434\u0456\u0457","attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","general_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","attribute_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","attribute_events_tab":"\u041f\u043e\u0434\u0456\u0457","attribute_label_accesskey":"\u041a\u043b\u0430\u0432\u0456\u0448\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0443","attribute_label_tabindex":"\u0422\u0430\u0431\u0456\u043d\u0434\u0435\u043a\u0441","attribute_label_langcode":"\u041c\u043e\u0432\u0430","attribute_option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e","attribute_option_ltr":"\u0417\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e","attribute_label_langdir":"\u041d\u0430\u043f\u0440\u044f\u043c \u0442\u0435\u043a\u0441\u0442\u0443","attribute_label_datetime":"\u0414\u0430\u0442\u0430/\u0427\u0430\u0441","attribute_label_cite":"\u0426\u0438\u0442\u0430\u0442\u0430","attribute_label_style":"\u0421\u0442\u0438\u043b\u044c","attribute_label_class":"\u041a\u043b\u0430\u0441","attribute_label_id":"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440","attribute_label_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ur_dlg.js
new file mode 100644
index 000000000..ccf709db6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/vi_dlg.js
new file mode 100644
index 000000000..227659a5e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.xhtmlxtras_dlg',{"attribs_title":"Ch\u00e8n/S\u1eeda thu\u1ed9c t\u00ednh","option_rtl":"Ph\u1ea3i qua tr\u00e1i","option_ltr":"Tr\u00e1i qua ph\u1ea3i","insert_date":"Ch\u00e8n ng\u00e0y/gi\u1edd hi\u1ec7n th\u1eddi",remove:"Lo\u1ea1i b\u1ecf","title_cite_element":"Bi\u00ea\u0309u ch\u01b0\u01a1ng ph\u1ea7n t\u1eed","title_abbr_element":"T\u00ean vi\u1ebft t\u1eaft ph\u1ea7n t\u1eed","title_acronym_element":"Vi\u1ebft t\u1eaft ph\u1ea7n t\u1eed","title_del_element":"X\u00f3a ph\u1ea7n t\u1eed","title_ins_element":"Ch\u00e8n ph\u1ea7n t\u1eed","fieldset_events_tab":"S\u1ef1 ki\u1ec7n ph\u1ea7n t\u1eed","fieldset_attrib_tab":"Thu\u1ed9c t\u00ednh ph\u1ea7n t\u1eed","fieldset_general_tab":"Thi\u1ebft l\u1eadp chung","events_tab":"S\u1ef1 ki\u1ec7n","attrib_tab":"Thu\u1ed9c t\u00ednh","general_tab":"Chung","attribute_attrib_tab":"Thu\u1ed9c t\u00ednh","attribute_events_tab":"S\u1ef1 ki\u1ec7n","attribute_label_accesskey":"Ph\u00edm truy c\u1eadp","attribute_label_tabindex":"Ch\u1ec9 m\u1ee5c th\u1ebb","attribute_label_langcode":"Ng\u00f4n ng\u1eef","attribute_option_rtl":"Ph\u1ea3i qua tr\u00e1i","attribute_option_ltr":"Tr\u00e1i qua ph\u1ea3i","attribute_label_langdir":"H\u01b0\u1edbng v\u0103n b\u1ea3n","attribute_label_datetime":"Ng\u00e0y/gi\u1edd","attribute_label_cite":"Ch\u00fa th\u00edch","attribute_label_style":"Ki\u1ec3u d\u00e1ng","attribute_label_class":"L\u1edbp","attribute_label_id":"ID","attribute_label_title":"Ti\u00eau \u0111\u1ec1"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..eccbdf676
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91 \u5c5e\u6027","option_rtl":"\u4ece\u53f3\u5230\u5de6","option_ltr":"\u4ece\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u5f53\u524d\u65e5\u671f/\u65f6\u95f4",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5143\u7d20","title_abbr_element":"\u7f29\u5199\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u6bcd\u7f29\u5199\u5143\u7d20","title_del_element":"\u5220\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c5e\u6027","fieldset_general_tab":"\u666e\u901a\u8bbe\u7f6e","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u666e\u901a","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u952e","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u4ece\u53f3\u5230\u5de6","attribute_option_ltr":"\u4ece\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u4e66\u5199\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u7c7b\u522b","attribute_label_id":"ID","attribute_label_title":"\u6807\u9898"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..d0fec64de
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.xhtmlxtras_dlg',{"attribs_title":"\u52a0\u5165 / \u8a2d\u5b9a\u5c6c\u6027","option_rtl":"\u5f9e\u53f3\u5230\u5de6","option_ltr":"\u5f9e\u5de6\u5230\u53f3","insert_date":"\u52a0\u5165\u76ee\u524d\u7684\u6642\u9593\u3001\u65e5\u671f",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u6a19\u7c64","title_abbr_element":"\u7e2e\u5beb\u6a19\u7c64","title_acronym_element":"\u982d\u5b57\u8a9e\u6a19\u7c64","title_del_element":"\u79fb\u9664 HTML \u6a19\u7c64","title_ins_element":"\u65b0\u589e HTML \u6a19\u7c64","fieldset_events_tab":"\u6a19\u7c64\u4e8b\u4ef6","fieldset_attrib_tab":"\u6a19\u7c64\u5c6c\u6027","fieldset_general_tab":"\u8a2d\u5b9a","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c6c\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c6c\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"HTML \u5feb\u901f\u9375 (AccessKey)","attribute_label_tabindex":"Tab \u7d22\u5f15\u4f4d\u7f6e (TabIndex)","attribute_label_langcode":"\u8a9e\u7cfb","attribute_option_rtl":"\u5f9e\u53f3\u908a\u5230\u5de6\u908a","attribute_option_ltr":"\u5f9e\u5de6\u908a\u5230\u53f3\u908a","attribute_label_langdir":"\u66f8\u5beb\u65b9\u5f0f","attribute_label_datetime":"\u6642\u9593\u65e5\u671f","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6a23\u5f0f","attribute_label_class":"\u985e\u5225 (Class)","attribute_label_id":"\u6a19\u7c64\u7684 ID ","attribute_label_title":"\u6a19\u984c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh_dlg.js
new file mode 100644
index 000000000..b5deeda2a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7de8\u8f2f\u5c6c\u6027","option_rtl":"\u5f9e\u5de6\u5230\u53f3","option_ltr":"\u5f9e\u53f3\u5230\u5de6","insert_date":"\u63d2\u5165\u76ee\u524d\u65e5\u671f/\u6642\u9593",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5143\u7d20","title_abbr_element":"\u7e2e\u5beb\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u6bcd\u7e2e\u5beb\u5143\u7d20","title_del_element":"\u522a\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c6c\u6027","fieldset_general_tab":"\u4e00\u822c\u8a2d\u5b9a","events_tab":"Javascript \u89f8\u767c\u4e8b\u4ef6","attrib_tab":"\u5c6c\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c6c\u6027","attribute_events_tab":"Javascript \u89f8\u767c\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u9375","attribute_label_tabindex":"Tab \u7d22\u5f15","attribute_label_langcode":"\u8a9e\u8a00","attribute_option_rtl":"\u5f9e\u5de6\u5230\u53f3","attribute_option_ltr":"\u5f9e\u53f3\u5230\u5de6","attribute_label_langdir":"\u6587\u5b57\u66f8\u5beb\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u6642\u9593","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6a23\u5f0f","attribute_label_class":"\u985e\u5225","attribute_label_id":"ID","attribute_label_title":"\u6a19\u984c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zu_dlg.js
new file mode 100644
index 000000000..035f3eb23
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/plugins/xhtmlxtras/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","option_rtl":"\u7531\u53f3\u5230\u5de6","option_ltr":"\u7531\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u73b0\u5728\u65e5\u671f/\u65f6\u95f4",remove:"\u5220\u9664","title_cite_element":"\u5f15\u6587\u5143\u7d20","title_abbr_element":"\u7f29\u5199\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u7f29\u5199\u5143\u7d20","title_del_element":"\u5220\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c5e\u6027","fieldset_general_tab":"\u4e00\u822c","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u901f\u952e","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u7531\u53f3\u5230\u5de6","attribute_option_ltr":"\u7531\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u4e66\u5199\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u6587","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u7c7b\u578b","attribute_label_id":"ID","attribute_label_title":"\u67e5\u627e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/about.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/about.htm
new file mode 100644
index 000000000..7a97cb715
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/about.htm
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>{#advanced_dlg.about_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="js/about.js"></script>
+</head>
+<body id="about" style="display: none">
+ <div class="tabs">
+ <ul>
+ <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>
+ <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>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <h3>{#advanced_dlg.about_title}</h3>
+ <p>Version: <span id="version"></span> (<span id="date"></span>)</p>
+ <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>
+ by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>
+ <p>Copyright &copy; 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>
+ <p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>
+
+ <div id="buttoncontainer">
+ <a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>
+ </div>
+ </div>
+
+ <div id="plugins_panel" class="panel">
+ <div id="pluginscontainer">
+ <h3>{#advanced_dlg.about_loaded}</h3>
+
+ <div id="plugintablecontainer">
+ </div>
+
+ <p>&nbsp;</p>
+ </div>
+ </div>
+
+ <div id="help_panel" class="panel noscroll" style="overflow: visible;">
+ <div id="iframecontainer"></div>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />
+ </div>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm
new file mode 100644
index 000000000..75c93b799
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/anchor.htm
@@ -0,0 +1,26 @@
+<!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>{#advanced_dlg.anchor_title}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/anchor.js"></script>
+</head>
+<body style="display: none" role="application" aria-labelledby="app_title">
+<form onsubmit="AnchorDialog.update();return false;" action="#">
+ <table border="0" cellpadding="4" cellspacing="0" role="presentation">
+ <tr>
+ <td colspan="2" class="title" id="app_title">{#advanced_dlg.anchor_title}</td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="anchorName">{#advanced_dlg.anchor_name}:</label></td>
+ <td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" aria-required="true" /></td>
+ </tr>
+ </table>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#update}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm
new file mode 100644
index 000000000..d4b6bdfb7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/charmap.htm
@@ -0,0 +1,55 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>{#advanced_dlg.charmap_title}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/charmap.js"></script>
+</head>
+<body id="charmap" style="display:none" role="application">
+<table align="center" border="0" cellspacing="0" cellpadding="2" role="presentation">
+ <tr>
+ <td colspan="2" class="title" ><label for="charmapView" id="charmap_label">{#advanced_dlg.charmap_title}</label></td>
+ </tr>
+ <tr>
+ <td id="charmapView" rowspan="2" align="left" valign="top">
+ <!-- Chars will be rendered here -->
+ </td>
+ <td width="100" align="center" valign="top">
+ <table border="0" cellpadding="0" cellspacing="0" width="100" style="height:100px" role="presentation">
+ <tr>
+ <td id="codeV">&nbsp;</td>
+ </tr>
+ <tr>
+ <td id="codeN">&nbsp;</td>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td valign="bottom" style="padding-bottom: 3px;">
+ <table width="100" align="center" border="0" cellpadding="2" cellspacing="0" role="presentation">
+ <tr>
+ <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>
+ </tr>
+ <tr>
+ <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>
+ </tr>
+ <tr>
+ <td style="font-size: 1px;">&nbsp;</td>
+ </tr>
+ <tr>
+ <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>
+ </tr>
+ <tr>
+ <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>
+ </tr>
+ </table>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2" id="charmap_usage">{#advanced_dlg.charmap_usage}</td>
+ </tr>
+
+</table>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm
new file mode 100644
index 000000000..ad1bb0f6c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/color_picker.htm
@@ -0,0 +1,74 @@
+<!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>{#advanced_dlg.colorpicker_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="js/color_picker.js"></script>
+</head>
+<body id="colorpicker" style="display: none" role="application" aria-labelledby="app_label">
+ <span class="mceVoiceLabel" id="app_label" style="display:none;">{#advanced_dlg.colorpicker_title}</span>
+<form onsubmit="insertAction();return false" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ <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>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="picker_panel" class="panel current">
+ <fieldset>
+ <legend>{#advanced_dlg.colorpicker_picker_title}</legend>
+ <div id="picker">
+ <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="" />
+
+ <div id="light">
+ <!-- Will be filled with divs -->
+ </div>
+
+ <br style="clear: both" />
+ </div>
+ </fieldset>
+ </div>
+
+ <div id="rgb_panel" class="panel">
+ <fieldset>
+ <legend id="webcolors_title">{#advanced_dlg.colorpicker_palette_title}</legend>
+ <div id="webcolors">
+ <!-- Gets filled with web safe colors-->
+ </div>
+
+ <br style="clear: both" />
+ </fieldset>
+ </div>
+
+ <div id="named_panel" class="panel">
+ <fieldset id="named_picker_label">
+ <legend id="named_title">{#advanced_dlg.colorpicker_named_title}</legend>
+ <div id="namedcolors" role="listbox" tabindex="0" aria-labelledby="named_picker_label">
+ <!-- Gets filled with named colors-->
+ </div>
+
+ <br style="clear: both" />
+
+ <div id="colornamecontainer">
+ {#advanced_dlg.colorpicker_name} <span id="colorname"></span>
+ </div>
+ </fieldset>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#apply}" />
+
+ <div id="preview"></div>
+
+ <div id="previewblock">
+ <label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" class="text mceFocus" aria-required="true" />
+ </div>
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js
new file mode 100644
index 000000000..812578d0b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template.js
@@ -0,0 +1 @@
+(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){if(e.isWebKit){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",tabIndex:"-1"});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:260+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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js
new file mode 100644
index 000000000..a3713b29e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/editor_template_src.js
@@ -0,0 +1,1362 @@
+/**
+ * editor_template_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) {
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode;
+
+ // Tell it to load theme specific language pack(s)
+ tinymce.ThemeManager.requireLangPack('advanced');
+
+ tinymce.create('tinymce.themes.AdvancedTheme', {
+ sizes : [8, 10, 12, 14, 18, 24, 36],
+
+ // Control name lookup, format: title, command
+ 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(ed, url) {
+ var t = this, s, v, o;
+
+ t.editor = ed;
+ t.url = url;
+ t.onResolveName = new tinymce.util.Dispatcher(this);
+
+ ed.forcedHighContrastMode = ed.settings.detect_highcontrast && t._isHighContrast();
+ ed.settings.skin = ed.forcedHighContrastMode ? 'highcontrast' : ed.settings.skin;
+
+ // Default settings
+ t.settings = s = extend({
+ 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 : ed.settings.readonly
+ }, ed.settings);
+
+ // Setup default font_size_style_values
+ if (!s.font_size_style_values)
+ s.font_size_style_values = "8pt,10pt,12pt,14pt,18pt,24pt,36pt";
+
+ if (tinymce.is(s.theme_advanced_font_sizes, 'string')) {
+ s.font_size_style_values = tinymce.explode(s.font_size_style_values);
+ s.font_size_classes = tinymce.explode(s.font_size_classes || '');
+
+ // Parse string value
+ o = {};
+ ed.settings.theme_advanced_font_sizes = s.theme_advanced_font_sizes;
+ each(ed.getParam('theme_advanced_font_sizes', '', 'hash'), function(v, k) {
+ var cl;
+
+ if (k == v && v >= 1 && v <= 7) {
+ k = v + ' (' + t.sizes[v - 1] + 'pt)';
+ cl = s.font_size_classes[v - 1];
+ v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt');
+ }
+
+ if (/^\s*\./.test(v))
+ cl = v.replace(/\./g, '');
+
+ o[k] = cl ? {'class' : cl} : {fontSize : v};
+ });
+
+ s.theme_advanced_font_sizes = o;
+ }
+
+ if ((v = s.theme_advanced_path_location) && v != 'none')
+ s.theme_advanced_statusbar_location = s.theme_advanced_path_location;
+
+ if (s.theme_advanced_statusbar_location == 'none')
+ s.theme_advanced_statusbar_location = 0;
+
+ if (ed.settings.content_css !== false)
+ ed.contentCSS.push(ed.baseURI.toAbsolute(url + "/skins/" + ed.settings.skin + "/content.css"));
+
+ // Init editor
+ ed.onInit.add(function() {
+ if (!ed.settings.readonly) {
+ ed.onNodeChange.add(t._nodeChanged, t);
+ ed.onKeyUp.add(t._updateUndoStatus, t);
+ ed.onMouseUp.add(t._updateUndoStatus, t);
+ ed.dom.bind(ed.dom.getRoot(), 'dragend', function() {
+ t._updateUndoStatus(ed);
+ });
+ }
+ });
+
+ ed.onSetProgressState.add(function(ed, b, ti) {
+ var co, id = ed.id, tb;
+
+ if (b) {
+ t.progressTimer = setTimeout(function() {
+ co = ed.getContainer();
+ co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild);
+ tb = DOM.get(ed.id + '_tbl');
+
+ DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}});
+ DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}});
+ }, ti || 0);
+ } else {
+ DOM.remove(id + '_blocker');
+ DOM.remove(id + '_progress');
+ clearTimeout(t.progressTimer);
+ }
+ });
+
+ DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css");
+
+ if (s.skin_variant)
+ DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css");
+ },
+
+ _isHighContrast : function() {
+ var actualColor, div = DOM.add(DOM.getRoot(), 'div', {'style': 'background-color: rgb(171,239,86);'});
+
+ actualColor = (DOM.getStyle(div, 'background-color', true) + '').toLowerCase().replace(/ /g, '');
+ DOM.remove(div);
+
+ return actualColor != 'rgb(171,239,86)' && actualColor != '#abef56';
+ },
+
+ createControl : function(n, cf) {
+ var cd, c;
+
+ if (c = cf.createControl(n))
+ return c;
+
+ switch (n) {
+ 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 ((cd = this.controls[n]))
+ return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]});
+ },
+
+ execCommand : function(cmd, ui, val) {
+ var f = this['_' + cmd];
+
+ if (f) {
+ f.call(this, ui, val);
+ return true;
+ }
+
+ return false;
+ },
+
+ _importClasses : function(e) {
+ var ed = this.editor, ctrl = ed.controlManager.get('styleselect');
+
+ if (ctrl.getLength() == 0) {
+ each(ed.dom.getClasses(), function(o, idx) {
+ var name = 'style_' + idx;
+
+ ed.formatter.register(name, {
+ inline : 'span',
+ attributes : {'class' : o['class']},
+ selector : '*'
+ });
+
+ ctrl.add(o['class'], name);
+ });
+ }
+ },
+
+ _createStyleSelect : function(n) {
+ var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl;
+
+ // Setup style select box
+ ctrl = ctrlMan.createListBox('styleselect', {
+ title : 'advanced.style_select',
+ onselect : function(name) {
+ var matches, formatNames = [];
+
+ each(ctrl.items, function(item) {
+ formatNames.push(item.value);
+ });
+
+ ed.focus();
+ ed.undoManager.add();
+
+ // Toggle off the current format
+ matches = ed.formatter.matchAll(formatNames);
+ if (!name || matches[0] == name) {
+ if (matches[0])
+ ed.formatter.remove(matches[0]);
+ } else
+ ed.formatter.apply(name);
+
+ ed.undoManager.add();
+ ed.nodeChanged();
+
+ return false; // No auto select
+ }
+ });
+
+ // Handle specified format
+ ed.onInit.add(function() {
+ var counter = 0, formats = ed.getParam('style_formats');
+
+ if (formats) {
+ each(formats, function(fmt) {
+ var name, keys = 0;
+
+ each(fmt, function() {keys++;});
+
+ if (keys > 1) {
+ name = fmt.name = fmt.name || 'style_' + (counter++);
+ ed.formatter.register(name, fmt);
+ ctrl.add(fmt.title, name);
+ } else
+ ctrl.add(fmt.title);
+ });
+ } else {
+ each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) {
+ var name;
+
+ if (val) {
+ name = 'style_' + (counter++);
+
+ ed.formatter.register(name, {
+ inline : 'span',
+ classes : val,
+ selector : '*'
+ });
+
+ ctrl.add(t.editor.translate(key), name);
+ }
+ });
+ }
+ });
+
+ // Auto import classes if the ctrl box is empty
+ if (ctrl.getLength() == 0) {
+ ctrl.onPostRender.add(function(ed, n) {
+ if (!ctrl.NativeListBox) {
+ Event.add(n.id + '_text', 'focus', t._importClasses, t);
+ Event.add(n.id + '_text', 'mousedown', t._importClasses, t);
+ Event.add(n.id + '_open', 'focus', t._importClasses, t);
+ Event.add(n.id + '_open', 'mousedown', t._importClasses, t);
+ } else
+ Event.add(n.id, 'focus', t._importClasses, t);
+ });
+ }
+
+ return ctrl;
+ },
+
+ _createFontSelect : function() {
+ var c, t = this, ed = t.editor;
+
+ c = ed.controlManager.createListBox('fontselect', {
+ title : 'advanced.fontdefault',
+ onselect : function(v) {
+ var cur = c.items[c.selectedIndex];
+
+ if (!v && cur) {
+ ed.execCommand('FontName', false, cur.value);
+ return;
+ }
+
+ ed.execCommand('FontName', false, v);
+
+ // Fake selection, execCommand will fire a nodeChange and update the selection
+ c.select(function(sv) {
+ return v == sv;
+ });
+
+ if (cur && cur.value == v) {
+ c.select(null);
+ }
+
+ return false; // No auto select
+ }
+ });
+
+ if (c) {
+ each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) {
+ c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''});
+ });
+ }
+
+ return c;
+ },
+
+ _createFontSizeSelect : function() {
+ var t = this, ed = t.editor, c, i = 0, cl = [];
+
+ c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) {
+ var cur = c.items[c.selectedIndex];
+
+ if (!v && cur) {
+ cur = cur.value;
+
+ if (cur['class']) {
+ ed.formatter.toggle('fontsize_class', {value : cur['class']});
+ ed.undoManager.add();
+ ed.nodeChanged();
+ } else {
+ ed.execCommand('FontSize', false, cur.fontSize);
+ }
+
+ return;
+ }
+
+ if (v['class']) {
+ ed.focus();
+ ed.undoManager.add();
+ ed.formatter.toggle('fontsize_class', {value : v['class']});
+ ed.undoManager.add();
+ ed.nodeChanged();
+ } else
+ ed.execCommand('FontSize', false, v.fontSize);
+
+ // Fake selection, execCommand will fire a nodeChange and update the selection
+ c.select(function(sv) {
+ return v == sv;
+ });
+
+ if (cur && (cur.value.fontSize == v.fontSize || cur.value['class'] == v['class'])) {
+ c.select(null);
+ }
+
+ return false; // No auto select
+ }});
+
+ if (c) {
+ each(t.settings.theme_advanced_font_sizes, function(v, k) {
+ var fz = v.fontSize;
+
+ if (fz >= 1 && fz <= 7)
+ fz = t.sizes[parseInt(fz) - 1] + 'pt';
+
+ c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))});
+ });
+ }
+
+ return c;
+ },
+
+ _createBlockFormats : function() {
+ var c, fmts = {
+ 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'
+ }, t = this;
+
+ c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', onselect : function(v) {
+ t.editor.execCommand('FormatBlock', false, v);
+ return false;
+ }});
+
+ if (c) {
+ each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) {
+ c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v});
+ });
+ }
+
+ return c;
+ },
+
+ _createForeColorMenu : function() {
+ var c, t = this, s = t.settings, o = {}, v;
+
+ if (s.theme_advanced_more_colors) {
+ o.more_colors_func = function() {
+ t._mceColorPicker(0, {
+ color : c.value,
+ func : function(co) {
+ c.setColor(co);
+ }
+ });
+ };
+ }
+
+ if (v = s.theme_advanced_text_colors)
+ o.colors = v;
+
+ if (s.theme_advanced_default_foreground_color)
+ o.default_color = s.theme_advanced_default_foreground_color;
+
+ o.title = 'advanced.forecolor_desc';
+ o.cmd = 'ForeColor';
+ o.scope = this;
+
+ c = t.editor.controlManager.createColorSplitButton('forecolor', o);
+
+ return c;
+ },
+
+ _createBackColorMenu : function() {
+ var c, t = this, s = t.settings, o = {}, v;
+
+ if (s.theme_advanced_more_colors) {
+ o.more_colors_func = function() {
+ t._mceColorPicker(0, {
+ color : c.value,
+ func : function(co) {
+ c.setColor(co);
+ }
+ });
+ };
+ }
+
+ if (v = s.theme_advanced_background_colors)
+ o.colors = v;
+
+ if (s.theme_advanced_default_background_color)
+ o.default_color = s.theme_advanced_default_background_color;
+
+ o.title = 'advanced.backcolor_desc';
+ o.cmd = 'HiliteColor';
+ o.scope = this;
+
+ c = t.editor.controlManager.createColorSplitButton('backcolor', o);
+
+ return c;
+ },
+
+ renderUI : function(o) {
+ var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl;
+
+ if (ed.settings) {
+ ed.settings.aria_label = s.aria_label + ed.getLang('advanced.help_shortcut');
+ }
+
+ // TODO: ACC Should have an aria-describedby attribute which is user-configurable to describe what this field is actually for.
+ // Maybe actually inherit it from the original textara?
+ 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) : '')});
+ DOM.add(n, 'span', {'class': 'mceVoiceLabel', 'style': 'display:none;', id: ed.id + '_voice'}, s.aria_label);
+
+ if (!DOM.boxModel)
+ n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'});
+
+ n = sc = DOM.add(n, 'table', {role : "presentation", id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0});
+ n = tb = DOM.add(n, 'tbody');
+
+ switch ((s.theme_advanced_layout_manager || '').toLowerCase()) {
+ case "rowlayout":
+ ic = t._rowLayout(s, tb, o);
+ break;
+
+ case "customlayout":
+ ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p);
+ break;
+
+ default:
+ ic = t._simpleLayout(s, tb, o, p);
+ }
+
+ n = o.targetNode;
+
+ // Add classes to first and last TRs
+ nl = sc.rows;
+ DOM.addClass(nl[0], 'mceFirst');
+ DOM.addClass(nl[nl.length - 1], 'mceLast');
+
+ // Add classes to first and last TDs
+ each(DOM.select('tr', tb), function(n) {
+ DOM.addClass(n.firstChild, 'mceFirst');
+ DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast');
+ });
+
+ if (DOM.get(s.theme_advanced_toolbar_container))
+ DOM.get(s.theme_advanced_toolbar_container).appendChild(p);
+ else
+ DOM.insertAfter(p, n);
+
+ Event.add(ed.id + '_path_row', 'click', function(e) {
+ e = e.target;
+
+ if (e.nodeName == 'A') {
+ t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1'));
+
+ return Event.cancel(e);
+ }
+ });
+/*
+ if (DOM.get(ed.id + '_path_row')) {
+ Event.add(ed.id + '_tbl', 'mouseover', function(e) {
+ var re;
+
+ e = e.target;
+
+ if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) {
+ re = DOM.get(ed.id + '_path_row');
+ t.lastPath = re.innerHTML;
+ DOM.setHTML(re, e.parentNode.title);
+ }
+ });
+
+ Event.add(ed.id + '_tbl', 'mouseout', function(e) {
+ if (t.lastPath) {
+ DOM.setHTML(ed.id + '_path_row', t.lastPath);
+ t.lastPath = 0;
+ }
+ });
+ }
+*/
+
+ if (!ed.getParam('accessibility_focus'))
+ Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();});
+
+ if (s.theme_advanced_toolbar_location == 'external')
+ o.deltaHeight = 0;
+
+ t.deltaHeight = o.deltaHeight;
+ o.targetNode = null;
+
+ ed.onKeyDown.add(function(ed, evt) {
+ var DOM_VK_F10 = 121, DOM_VK_F11 = 122;
+
+ if (evt.altKey) {
+ if (evt.keyCode === DOM_VK_F10) {
+ // Make sure focus is given to toolbar in Safari.
+ // We can't do this in IE as it prevents giving focus to toolbar when editor is in a frame
+ if (tinymce.isWebKit) {
+ window.focus();
+ }
+ t.toolbarGroup.focus();
+ return Event.cancel(evt);
+ } else if (evt.keyCode === DOM_VK_F11) {
+ DOM.get(ed.id + '_path_row').focus();
+ return Event.cancel(evt);
+ }
+ }
+ });
+
+ // alt+0 is the UK recommended shortcut for accessing the list of access controls.
+ ed.addShortcut('alt+0', '', 'mceShortcuts', t);
+
+ return {
+ iframeContainer : ic,
+ editorContainer : ed.id + '_parent',
+ sizeContainer : sc,
+ deltaHeight : o.deltaHeight
+ };
+ },
+
+ getInfo : function() {
+ return {
+ longname : 'Advanced theme',
+ author : 'Moxiecode Systems AB',
+ authorurl : 'http://tinymce.moxiecode.com',
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
+ }
+ },
+
+ resizeBy : function(dw, dh) {
+ var e = DOM.get(this.editor.id + '_ifr');
+
+ this.resizeTo(e.clientWidth + dw, e.clientHeight + dh);
+ },
+
+ resizeTo : function(w, h, store) {
+ var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr');
+
+ // Boundery fix box
+ w = Math.max(s.theme_advanced_resizing_min_width || 100, w);
+ h = Math.max(s.theme_advanced_resizing_min_height || 100, h);
+ w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w);
+ h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h);
+
+ // Resize iframe and container
+ DOM.setStyle(e, 'height', '');
+ DOM.setStyle(ifr, 'height', h);
+
+ if (s.theme_advanced_resize_horizontal) {
+ DOM.setStyle(e, 'width', '');
+ DOM.setStyle(ifr, 'width', w);
+
+ // Make sure that the size is never smaller than the over all ui
+ if (w < e.clientWidth) {
+ w = e.clientWidth;
+ DOM.setStyle(ifr, 'width', e.clientWidth);
+ }
+ }
+
+ // Store away the size
+ if (store && s.theme_advanced_resizing_use_cookie) {
+ Cookie.setHash("TinyMCE_" + ed.id + "_size", {
+ cw : w,
+ ch : h
+ });
+ }
+ },
+
+ destroy : function() {
+ var id = this.editor.id;
+
+ Event.clear(id + '_resize');
+ Event.clear(id + '_path_row');
+ Event.clear(id + '_external_close');
+ },
+
+ // Internal functions
+
+ _simpleLayout : function(s, tb, o, p) {
+ var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c;
+
+ if (s.readonly) {
+ n = DOM.add(tb, 'tr');
+ n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});
+ return ic;
+ }
+
+ // Create toolbar container at top
+ if (lo == 'top')
+ t._addToolbars(tb, o);
+
+ // Create external toolbar
+ if (lo == 'external') {
+ n = c = DOM.create('div', {style : 'position:relative'});
+ n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'});
+ DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'});
+ n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0});
+ etb = DOM.add(n, 'tbody');
+
+ if (p.firstChild.className == 'mceOldBoxModel')
+ p.firstChild.appendChild(c);
+ else
+ p.insertBefore(c, p.firstChild);
+
+ t._addToolbars(etb, o);
+
+ ed.onMouseUp.add(function() {
+ var e = DOM.get(ed.id + '_external');
+ DOM.show(e);
+
+ DOM.hide(lastExtID);
+
+ var f = Event.add(ed.id + '_external_close', 'click', function() {
+ DOM.hide(ed.id + '_external');
+ Event.remove(ed.id + '_external_close', 'click', f);
+ });
+
+ DOM.show(e);
+ DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1);
+
+ // Fixes IE rendering bug
+ DOM.hide(e);
+ DOM.show(e);
+ e.style.filter = '';
+
+ lastExtID = ed.id + '_external';
+
+ e = null;
+ });
+ }
+
+ if (sl == 'top')
+ t._addStatusBar(tb, o);
+
+ // Create iframe container
+ if (!s.theme_advanced_toolbar_container) {
+ n = DOM.add(tb, 'tr');
+ n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});
+ }
+
+ // Create toolbar container at bottom
+ if (lo == 'bottom')
+ t._addToolbars(tb, o);
+
+ if (sl == 'bottom')
+ t._addStatusBar(tb, o);
+
+ return ic;
+ },
+
+ _rowLayout : function(s, tb, o) {
+ var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a;
+
+ dc = s.theme_advanced_containers_default_class || '';
+ da = s.theme_advanced_containers_default_align || 'center';
+
+ each(explode(s.theme_advanced_containers || ''), function(c, i) {
+ var v = s['theme_advanced_container_' + c] || '';
+
+ switch (c.toLowerCase()) {
+ case 'mceeditor':
+ n = DOM.add(tb, 'tr');
+ n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});
+ break;
+
+ case 'mceelementpath':
+ t._addStatusBar(tb, o);
+ break;
+
+ default:
+ a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase();
+ a = 'mce' + t._ufirst(a);
+
+ n = DOM.add(DOM.add(tb, 'tr'), 'td', {
+ 'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da
+ });
+
+ to = cf.createToolbar("toolbar" + i);
+ t._addControls(v, to);
+ DOM.setHTML(n, to.renderHTML());
+ o.deltaHeight -= s.theme_advanced_row_height;
+ }
+ });
+
+ return ic;
+ },
+
+ _addControls : function(v, tb) {
+ var t = this, s = t.settings, di, cf = t.editor.controlManager;
+
+ if (s.theme_advanced_disable && !t._disabled) {
+ di = {};
+
+ each(explode(s.theme_advanced_disable), function(v) {
+ di[v] = 1;
+ });
+
+ t._disabled = di;
+ } else
+ di = t._disabled;
+
+ each(explode(v), function(n) {
+ var c;
+
+ if (di && di[n])
+ return;
+
+ // Compatiblity with 2.x
+ if (n == 'tablecontrols') {
+ each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) {
+ n = t.createControl(n, cf);
+
+ if (n)
+ tb.add(n);
+ });
+
+ return;
+ }
+
+ c = t.createControl(n, cf);
+
+ if (c)
+ tb.add(c);
+ });
+ },
+
+ _addToolbars : function(c, o) {
+ var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a, toolbarGroup;
+
+ toolbarGroup = cf.createToolbarGroup('toolbargroup', {
+ 'name': ed.getLang('advanced.toolbar'),
+ 'tab_focus_toolbar':ed.getParam('theme_advanced_tab_focus_toolbar')
+ });
+
+ t.toolbarGroup = toolbarGroup;
+
+ a = s.theme_advanced_toolbar_align.toLowerCase();
+ a = 'mce' + t._ufirst(a);
+
+ n = DOM.add(DOM.add(c, 'tr', {role: 'presentation'}), 'td', {'class' : 'mceToolbar ' + a, "role":"presentation"});
+
+ // Create toolbar and add the controls
+ for (i=1; (v = s['theme_advanced_buttons' + i]); i++) {
+ tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i});
+
+ if (s['theme_advanced_buttons' + i + '_add'])
+ v += ',' + s['theme_advanced_buttons' + i + '_add'];
+
+ if (s['theme_advanced_buttons' + i + '_add_before'])
+ v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v;
+
+ t._addControls(v, tb);
+ toolbarGroup.add(tb);
+
+ o.deltaHeight -= s.theme_advanced_row_height;
+ }
+ h.push(toolbarGroup.renderHTML());
+ h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));
+ DOM.setHTML(n, h.join(''));
+ },
+
+ _addStatusBar : function(tb, o) {
+ var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td;
+
+ n = DOM.add(tb, 'tr');
+ n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'});
+ n = DOM.add(n, 'div', {id : ed.id + '_path_row', 'role': 'group', 'aria-labelledby': ed.id + '_path_voice'});
+ if (s.theme_advanced_path) {
+ DOM.add(n, 'span', {id: ed.id + '_path_voice'}, ed.translate('advanced.path'));
+ DOM.add(n, 'span', {}, ': ');
+ } else {
+ DOM.add(n, 'span', {}, '&#160;');
+ }
+
+
+ if (s.theme_advanced_resizing) {
+ DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize', tabIndex:"-1"});
+
+ if (s.theme_advanced_resizing_use_cookie) {
+ ed.onPostRender.add(function() {
+ var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl');
+
+ if (!o)
+ return;
+
+ t.resizeTo(o.cw, o.ch);
+ });
+ }
+
+ ed.onPostRender.add(function() {
+ Event.add(ed.id + '_resize', 'click', function(e) {
+ e.preventDefault();
+ });
+
+ Event.add(ed.id + '_resize', 'mousedown', function(e) {
+ var mouseMoveHandler1, mouseMoveHandler2,
+ mouseUpHandler1, mouseUpHandler2,
+ startX, startY, startWidth, startHeight, width, height, ifrElm;
+
+ function resizeOnMove(e) {
+ e.preventDefault();
+
+ width = startWidth + (e.screenX - startX);
+ height = startHeight + (e.screenY - startY);
+
+ t.resizeTo(width, height);
+ };
+
+ function endResize(e) {
+ // Stop listening
+ Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1);
+ Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2);
+ Event.remove(DOM.doc, 'mouseup', mouseUpHandler1);
+ Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2);
+
+ width = startWidth + (e.screenX - startX);
+ height = startHeight + (e.screenY - startY);
+ t.resizeTo(width, height, true);
+ };
+
+ e.preventDefault();
+
+ // Get the current rect size
+ startX = e.screenX;
+ startY = e.screenY;
+ ifrElm = DOM.get(t.editor.id + '_ifr');
+ startWidth = width = ifrElm.clientWidth;
+ startHeight = height = ifrElm.clientHeight;
+
+ // Register envent handlers
+ mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove);
+ mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove);
+ mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize);
+ mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize);
+ });
+ });
+ }
+
+ o.deltaHeight -= 21;
+ n = tb = null;
+ },
+
+ _updateUndoStatus : function(ed) {
+ var cm = ed.controlManager, um = ed.undoManager;
+
+ cm.setDisabled('undo', !um.hasUndo() && !um.typing);
+ cm.setDisabled('redo', !um.hasRedo());
+ },
+
+ _nodeChanged : function(ed, cm, n, co, ob) {
+ var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, fc, bc, formatNames, matches;
+
+ tinymce.each(t.stateControls, function(c) {
+ cm.setActive(c, ed.queryCommandState(t.controls[c][1]));
+ });
+
+ function getParent(name) {
+ var i, parents = ob.parents, func = name;
+
+ if (typeof(name) == 'string') {
+ func = function(node) {
+ return node.nodeName == name;
+ };
+ }
+
+ for (i = 0; i < parents.length; i++) {
+ if (func(parents[i]))
+ return parents[i];
+ }
+ };
+
+ cm.setActive('visualaid', ed.hasVisual);
+ t._updateUndoStatus(ed);
+ cm.setDisabled('outdent', !ed.queryCommandState('Outdent'));
+
+ p = getParent('A');
+ if (c = cm.get('link')) {
+ if (!p || !p.name) {
+ c.setDisabled(!p && co);
+ c.setActive(!!p);
+ }
+ }
+
+ if (c = cm.get('unlink')) {
+ c.setDisabled(!p && co);
+ c.setActive(!!p && !p.name);
+ }
+
+ if (c = cm.get('anchor')) {
+ c.setActive(!co && !!p && p.name);
+ }
+
+ p = getParent('IMG');
+ if (c = cm.get('image'))
+ c.setActive(!co && !!p && n.className.indexOf('mceItem') == -1);
+
+ if (c = cm.get('styleselect')) {
+ t._importClasses();
+
+ formatNames = [];
+ each(c.items, function(item) {
+ formatNames.push(item.value);
+ });
+
+ matches = ed.formatter.matchAll(formatNames);
+ c.select(matches[0]);
+ }
+
+ if (c = cm.get('formatselect')) {
+ p = getParent(DOM.isBlock);
+
+ if (p)
+ c.select(p.nodeName.toLowerCase());
+ }
+
+ // Find out current fontSize, fontFamily and fontClass
+ getParent(function(n) {
+ if (n.nodeName === 'SPAN') {
+ if (!cl && n.className)
+ cl = n.className;
+ }
+
+ if (ed.dom.is(n, s.theme_advanced_font_selector)) {
+ if (!fz && n.style.fontSize)
+ fz = n.style.fontSize;
+
+ if (!fn && n.style.fontFamily)
+ fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase();
+
+ if (!fc && n.style.color)
+ fc = n.style.color;
+
+ if (!bc && n.style.backgroundColor)
+ bc = n.style.backgroundColor;
+ }
+
+ return false;
+ });
+
+ if (c = cm.get('fontselect')) {
+ c.select(function(v) {
+ return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn;
+ });
+ }
+
+ // Select font size
+ if (c = cm.get('fontsizeselect')) {
+ // Use computed style
+ if (s.theme_advanced_runtime_fontsize && !fz && !cl)
+ fz = ed.dom.getStyle(n, 'fontSize', true);
+
+ c.select(function(v) {
+ if (v.fontSize && v.fontSize === fz)
+ return true;
+
+ if (v['class'] && v['class'] === cl)
+ return true;
+ });
+ }
+
+ if (s.theme_advanced_show_current_color) {
+ function updateColor(controlId, color) {
+ if (c = cm.get(controlId)) {
+ if (!color)
+ color = c.settings.default_color;
+ if (color !== c.value) {
+ c.displayColor(color);
+ }
+ }
+ }
+ updateColor('forecolor', fc);
+ updateColor('backcolor', bc);
+ }
+
+ if (s.theme_advanced_show_current_color) {
+ function updateColor(controlId, color) {
+ if (c = cm.get(controlId)) {
+ if (!color)
+ color = c.settings.default_color;
+ if (color !== c.value) {
+ c.displayColor(color);
+ }
+ }
+ };
+
+ updateColor('forecolor', fc);
+ updateColor('backcolor', bc);
+ }
+
+ if (s.theme_advanced_path && s.theme_advanced_statusbar_location) {
+ p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'});
+
+ if (t.statusKeyboardNavigation) {
+ t.statusKeyboardNavigation.destroy();
+ t.statusKeyboardNavigation = null;
+ }
+
+ DOM.setHTML(p, '');
+
+ getParent(function(n) {
+ var na = n.nodeName.toLowerCase(), u, pi, ti = '';
+
+ // Ignore non element and bogus/hidden elements
+ if (n.nodeType != 1 || na === 'br' || n.getAttribute('data-mce-bogus') || DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved'))
+ return;
+
+ // Handle prefix
+ if (tinymce.isIE && n.scopeName !== 'HTML')
+ na = n.scopeName + ':' + na;
+
+ // Remove internal prefix
+ na = na.replace(/mce\:/g, '');
+
+ // Handle node name
+ switch (na) {
+ case 'b':
+ na = 'strong';
+ break;
+
+ case 'i':
+ na = 'em';
+ break;
+
+ case 'img':
+ if (v = DOM.getAttrib(n, 'src'))
+ ti += 'src: ' + v + ' ';
+
+ break;
+
+ case 'a':
+ if (v = DOM.getAttrib(n, 'name')) {
+ ti += 'name: ' + v + ' ';
+ na += '#' + v;
+ }
+
+ if (v = DOM.getAttrib(n, 'href'))
+ ti += 'href: ' + v + ' ';
+
+ break;
+
+ case 'font':
+ if (v = DOM.getAttrib(n, 'face'))
+ ti += 'font: ' + v + ' ';
+
+ if (v = DOM.getAttrib(n, 'size'))
+ ti += 'size: ' + v + ' ';
+
+ if (v = DOM.getAttrib(n, 'color'))
+ ti += 'color: ' + v + ' ';
+
+ break;
+
+ case 'span':
+ if (v = DOM.getAttrib(n, 'style'))
+ ti += 'style: ' + v + ' ';
+
+ break;
+ }
+
+ if (v = DOM.getAttrib(n, 'id'))
+ ti += 'id: ' + v + ' ';
+
+ if (v = n.className) {
+ v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, '')
+
+ if (v) {
+ ti += 'class: ' + v + ' ';
+
+ if (DOM.isBlock(n) || na == 'img' || na == 'span')
+ na += '.' + v;
+ }
+ }
+
+ na = na.replace(/(html:)/g, '');
+ na = {name : na, node : n, title : ti};
+ t.onResolveName.dispatch(t, na);
+ ti = na.title;
+ na = na.name;
+
+ //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');";
+ pi = DOM.create('a', {'href' : "javascript:;", role: 'button', onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na);
+
+ if (p.hasChildNodes()) {
+ p.insertBefore(DOM.create('span', {'aria-hidden': 'true'}, '\u00a0\u00bb '), p.firstChild);
+ p.insertBefore(pi, p.firstChild);
+ } else
+ p.appendChild(pi);
+ }, ed.getBody());
+
+ if (DOM.select('a', p).length > 0) {
+ t.statusKeyboardNavigation = new tinymce.ui.KeyboardNavigation({
+ root: ed.id + "_path_row",
+ items: DOM.select('a', p),
+ excludeFromTabOrder: true,
+ onCancel: function() {
+ ed.focus();
+ }
+ }, DOM);
+ }
+ }
+ },
+
+ // Commands gets called by execCommand
+
+ _sel : function(v) {
+ this.editor.execCommand('mceSelectNodeDepth', false, v);
+ },
+
+ _mceInsertAnchor : function(ui, v) {
+ var ed = this.editor;
+
+ ed.windowManager.open({
+ url : this.url + '/anchor.htm',
+ width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)),
+ height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)),
+ inline : true
+ }, {
+ theme_url : this.url
+ });
+ },
+
+ _mceCharMap : function() {
+ var ed = this.editor;
+
+ ed.windowManager.open({
+ url : this.url + '/charmap.htm',
+ width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)),
+ height : 260 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)),
+ inline : true
+ }, {
+ theme_url : this.url
+ });
+ },
+
+ _mceHelp : function() {
+ var ed = this.editor;
+
+ ed.windowManager.open({
+ url : this.url + '/about.htm',
+ width : 480,
+ height : 380,
+ inline : true
+ }, {
+ theme_url : this.url
+ });
+ },
+
+ _mceShortcuts : function() {
+ var ed = this.editor;
+ ed.windowManager.open({
+ url: this.url + '/shortcuts.htm',
+ width: 480,
+ height: 380,
+ inline: true
+ }, {
+ theme_url: this.url
+ });
+ },
+
+ _mceColorPicker : function(u, v) {
+ var ed = this.editor;
+
+ v = v || {};
+
+ ed.windowManager.open({
+ url : this.url + '/color_picker.htm',
+ width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)),
+ height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)),
+ close_previous : false,
+ inline : true
+ }, {
+ input_color : v.color,
+ func : v.func,
+ theme_url : this.url
+ });
+ },
+
+ _mceCodeEditor : function(ui, val) {
+ var ed = this.editor;
+
+ ed.windowManager.open({
+ url : this.url + '/source_editor.htm',
+ width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)),
+ height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)),
+ inline : true,
+ resizable : true,
+ maximizable : true
+ }, {
+ theme_url : this.url
+ });
+ },
+
+ _mceImage : function(ui, val) {
+ var ed = this.editor;
+
+ // Internal image object like a flash placeholder
+ if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1)
+ return;
+
+ ed.windowManager.open({
+ url : this.url + '/image.htm',
+ width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)),
+ height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)),
+ inline : true
+ }, {
+ theme_url : this.url
+ });
+ },
+
+ _mceLink : function(ui, val) {
+ var ed = this.editor;
+
+ ed.windowManager.open({
+ url : this.url + '/link.htm',
+ width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)),
+ height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)),
+ inline : true
+ }, {
+ theme_url : this.url
+ });
+ },
+
+ _mceNewDocument : function() {
+ var ed = this.editor;
+
+ ed.windowManager.confirm('advanced.newdocument', function(s) {
+ if (s)
+ ed.execCommand('mceSetContent', false, '');
+ });
+ },
+
+ _mceForeColor : function() {
+ var t = this;
+
+ this._mceColorPicker(0, {
+ color: t.fgColor,
+ func : function(co) {
+ t.fgColor = co;
+ t.editor.execCommand('ForeColor', false, co);
+ }
+ });
+ },
+
+ _mceBackColor : function() {
+ var t = this;
+
+ this._mceColorPicker(0, {
+ color: t.bgColor,
+ func : function(co) {
+ t.bgColor = co;
+ t.editor.execCommand('HiliteColor', false, co);
+ }
+ });
+ },
+
+ _ufirst : function(s) {
+ return s.substring(0, 1).toUpperCase() + s.substring(1);
+ }
+ });
+
+ tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme);
+}(tinymce));
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/image.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/image.htm
new file mode 100644
index 000000000..b8ba729f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/image.htm
@@ -0,0 +1,80 @@
+<!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>{#advanced_dlg.image_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/form_utils.js"></script>
+ <script type="text/javascript" src="js/image.js"></script>
+</head>
+<body id="image" style="display: none">
+<form onsubmit="ImageDialog.update();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <table border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>
+ <td><table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>
+ <td id="srcbrowsercontainer">&nbsp;</td>
+ </tr>
+ </table></td>
+ </tr>
+ <tr>
+ <td><label for="image_list">{#advanced_dlg.image_list}</label></td>
+ <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>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>
+ <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>
+ <td><select id="align" name="align" onchange="ImageDialog.updateStyle();">
+ <option value="">{#not_set}</option>
+ <option value="baseline">{#advanced_dlg.image_align_baseline}</option>
+ <option value="top">{#advanced_dlg.image_align_top}</option>
+ <option value="middle">{#advanced_dlg.image_align_middle}</option>
+ <option value="bottom">{#advanced_dlg.image_align_bottom}</option>
+ <option value="text-top">{#advanced_dlg.image_align_texttop}</option>
+ <option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>
+ <option value="left">{#advanced_dlg.image_align_left}</option>
+ <option value="right">{#advanced_dlg.image_align_right}</option>
+ </select></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>
+ <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />
+ x
+ <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>
+ <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>
+ <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>
+ <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
+ </tr>
+ </table>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg
new file mode 100644
index 000000000..b1a377aba
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/colorpicker.jpg
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/flash.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/flash.gif
new file mode 100644
index 000000000..dec3f7c70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/flash.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif
new file mode 100644
index 000000000..641a9e3d3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/icons.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/iframe.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/iframe.gif
new file mode 100644
index 000000000..410c7ad08
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/iframe.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/pagebreak.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/pagebreak.gif
new file mode 100644
index 000000000..acdf4085f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/pagebreak.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/quicktime.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/quicktime.gif
new file mode 100644
index 000000000..8f10e7aa6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/quicktime.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/realmedia.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/realmedia.gif
new file mode 100644
index 000000000..fdfe0b9ac
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/realmedia.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/shockwave.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/shockwave.gif
new file mode 100644
index 000000000..9314d0447
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/shockwave.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/trans.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/trans.gif
new file mode 100644
index 000000000..388486517
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/trans.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/video.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/video.gif
new file mode 100644
index 000000000..357010407
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/video.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/windowsmedia.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/windowsmedia.gif
new file mode 100644
index 000000000..ab50f2d88
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/img/windowsmedia.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js
new file mode 100644
index 000000000..5b3584576
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/about.js
@@ -0,0 +1,73 @@
+tinyMCEPopup.requireLangPack();
+
+function init() {
+ var ed, tcont;
+
+ tinyMCEPopup.resizeToInnerSize();
+ ed = tinyMCEPopup.editor;
+
+ // Give FF some time
+ window.setTimeout(insertHelpIFrame, 10);
+
+ tcont = document.getElementById('plugintablecontainer');
+ document.getElementById('plugins_tab').style.display = 'none';
+
+ var html = "";
+ html += '<table id="plugintable">';
+ html += '<thead>';
+ html += '<tr>';
+ html += '<td>' + ed.getLang('advanced_dlg.about_plugin') + '</td>';
+ html += '<td>' + ed.getLang('advanced_dlg.about_author') + '</td>';
+ html += '<td>' + ed.getLang('advanced_dlg.about_version') + '</td>';
+ html += '</tr>';
+ html += '</thead>';
+ html += '<tbody>';
+
+ tinymce.each(ed.plugins, function(p, n) {
+ var info;
+
+ if (!p.getInfo)
+ return;
+
+ html += '<tr>';
+
+ info = p.getInfo();
+
+ if (info.infourl != null && info.infourl != '')
+ html += '<td width="50%" title="' + n + '"><a href="' + info.infourl + '" target="_blank">' + info.longname + '</a></td>';
+ else
+ html += '<td width="50%" title="' + n + '">' + info.longname + '</td>';
+
+ if (info.authorurl != null && info.authorurl != '')
+ html += '<td width="35%"><a href="' + info.authorurl + '" target="_blank">' + info.author + '</a></td>';
+ else
+ html += '<td width="35%">' + info.author + '</td>';
+
+ html += '<td width="15%">' + info.version + '</td>';
+ html += '</tr>';
+
+ document.getElementById('plugins_tab').style.display = '';
+
+ });
+
+ html += '</tbody>';
+ html += '</table>';
+
+ tcont.innerHTML = html;
+
+ tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion;
+ tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate;
+}
+
+function insertHelpIFrame() {
+ var html;
+
+ if (tinyMCEPopup.getParam('docs_url')) {
+ html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';
+ document.getElementById('iframecontainer').innerHTML = html;
+ document.getElementById('help_tab').style.display = 'block';
+ document.getElementById('help_tab').setAttribute("aria-hidden", "false");
+ }
+}
+
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js
new file mode 100644
index 000000000..04f41e0ca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/anchor.js
@@ -0,0 +1,43 @@
+tinyMCEPopup.requireLangPack();
+
+var AnchorDialog = {
+ init : function(ed) {
+ var action, elm, f = document.forms[0];
+
+ this.editor = ed;
+ elm = ed.dom.getParent(ed.selection.getNode(), 'A');
+ v = ed.dom.getAttrib(elm, 'name');
+
+ if (v) {
+ this.action = 'update';
+ f.anchorName.value = v;
+ }
+
+ f.insert.value = ed.getLang(elm ? 'update' : 'insert');
+ },
+
+ update : function() {
+ var ed = this.editor, elm, name = document.forms[0].anchorName.value;
+
+ if (!name || !/^[a-z][a-z0-9\-\_:\.]*$/i.test(name)) {
+ tinyMCEPopup.alert('advanced_dlg.anchor_invalid');
+ return;
+ }
+
+ tinyMCEPopup.restoreSelection();
+
+ if (this.action != 'update')
+ ed.selection.collapse(1);
+
+ elm = ed.dom.getParent(ed.selection.getNode(), 'A');
+ if (elm) {
+ elm.setAttribute('name', name);
+ elm.name = name;
+ } else
+ ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : name, 'class' : 'mceItemAnchor'}, ''));
+
+ tinyMCEPopup.close();
+ }
+};
+
+tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js
new file mode 100644
index 000000000..bb1869558
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/charmap.js
@@ -0,0 +1,363 @@
+/**
+ * charmap.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+tinyMCEPopup.requireLangPack();
+
+var charmap = [
+ ['&nbsp;', '&#160;', true, 'no-break space'],
+ ['&amp;', '&#38;', true, 'ampersand'],
+ ['&quot;', '&#34;', true, 'quotation mark'],
+// finance
+ ['&cent;', '&#162;', true, 'cent sign'],
+ ['&euro;', '&#8364;', true, 'euro sign'],
+ ['&pound;', '&#163;', true, 'pound sign'],
+ ['&yen;', '&#165;', true, 'yen sign'],
+// signs
+ ['&copy;', '&#169;', true, 'copyright sign'],
+ ['&reg;', '&#174;', true, 'registered sign'],
+ ['&trade;', '&#8482;', true, 'trade mark sign'],
+ ['&permil;', '&#8240;', true, 'per mille sign'],
+ ['&micro;', '&#181;', true, 'micro sign'],
+ ['&middot;', '&#183;', true, 'middle dot'],
+ ['&bull;', '&#8226;', true, 'bullet'],
+ ['&hellip;', '&#8230;', true, 'three dot leader'],
+ ['&prime;', '&#8242;', true, 'minutes / feet'],
+ ['&Prime;', '&#8243;', true, 'seconds / inches'],
+ ['&sect;', '&#167;', true, 'section sign'],
+ ['&para;', '&#182;', true, 'paragraph sign'],
+ ['&szlig;', '&#223;', true, 'sharp s / ess-zed'],
+// quotations
+ ['&lsaquo;', '&#8249;', true, 'single left-pointing angle quotation mark'],
+ ['&rsaquo;', '&#8250;', true, 'single right-pointing angle quotation mark'],
+ ['&laquo;', '&#171;', true, 'left pointing guillemet'],
+ ['&raquo;', '&#187;', true, 'right pointing guillemet'],
+ ['&lsquo;', '&#8216;', true, 'left single quotation mark'],
+ ['&rsquo;', '&#8217;', true, 'right single quotation mark'],
+ ['&ldquo;', '&#8220;', true, 'left double quotation mark'],
+ ['&rdquo;', '&#8221;', true, 'right double quotation mark'],
+ ['&sbquo;', '&#8218;', true, 'single low-9 quotation mark'],
+ ['&bdquo;', '&#8222;', true, 'double low-9 quotation mark'],
+ ['&lt;', '&#60;', true, 'less-than sign'],
+ ['&gt;', '&#62;', true, 'greater-than sign'],
+ ['&le;', '&#8804;', true, 'less-than or equal to'],
+ ['&ge;', '&#8805;', true, 'greater-than or equal to'],
+ ['&ndash;', '&#8211;', true, 'en dash'],
+ ['&mdash;', '&#8212;', true, 'em dash'],
+ ['&macr;', '&#175;', true, 'macron'],
+ ['&oline;', '&#8254;', true, 'overline'],
+ ['&curren;', '&#164;', true, 'currency sign'],
+ ['&brvbar;', '&#166;', true, 'broken bar'],
+ ['&uml;', '&#168;', true, 'diaeresis'],
+ ['&iexcl;', '&#161;', true, 'inverted exclamation mark'],
+ ['&iquest;', '&#191;', true, 'turned question mark'],
+ ['&circ;', '&#710;', true, 'circumflex accent'],
+ ['&tilde;', '&#732;', true, 'small tilde'],
+ ['&deg;', '&#176;', true, 'degree sign'],
+ ['&minus;', '&#8722;', true, 'minus sign'],
+ ['&plusmn;', '&#177;', true, 'plus-minus sign'],
+ ['&divide;', '&#247;', true, 'division sign'],
+ ['&frasl;', '&#8260;', true, 'fraction slash'],
+ ['&times;', '&#215;', true, 'multiplication sign'],
+ ['&sup1;', '&#185;', true, 'superscript one'],
+ ['&sup2;', '&#178;', true, 'superscript two'],
+ ['&sup3;', '&#179;', true, 'superscript three'],
+ ['&frac14;', '&#188;', true, 'fraction one quarter'],
+ ['&frac12;', '&#189;', true, 'fraction one half'],
+ ['&frac34;', '&#190;', true, 'fraction three quarters'],
+// math / logical
+ ['&fnof;', '&#402;', true, 'function / florin'],
+ ['&int;', '&#8747;', true, 'integral'],
+ ['&sum;', '&#8721;', true, 'n-ary sumation'],
+ ['&infin;', '&#8734;', true, 'infinity'],
+ ['&radic;', '&#8730;', true, 'square root'],
+ ['&sim;', '&#8764;', false,'similar to'],
+ ['&cong;', '&#8773;', false,'approximately equal to'],
+ ['&asymp;', '&#8776;', true, 'almost equal to'],
+ ['&ne;', '&#8800;', true, 'not equal to'],
+ ['&equiv;', '&#8801;', true, 'identical to'],
+ ['&isin;', '&#8712;', false,'element of'],
+ ['&notin;', '&#8713;', false,'not an element of'],
+ ['&ni;', '&#8715;', false,'contains as member'],
+ ['&prod;', '&#8719;', true, 'n-ary product'],
+ ['&and;', '&#8743;', false,'logical and'],
+ ['&or;', '&#8744;', false,'logical or'],
+ ['&not;', '&#172;', true, 'not sign'],
+ ['&cap;', '&#8745;', true, 'intersection'],
+ ['&cup;', '&#8746;', false,'union'],
+ ['&part;', '&#8706;', true, 'partial differential'],
+ ['&forall;', '&#8704;', false,'for all'],
+ ['&exist;', '&#8707;', false,'there exists'],
+ ['&empty;', '&#8709;', false,'diameter'],
+ ['&nabla;', '&#8711;', false,'backward difference'],
+ ['&lowast;', '&#8727;', false,'asterisk operator'],
+ ['&prop;', '&#8733;', false,'proportional to'],
+ ['&ang;', '&#8736;', false,'angle'],
+// undefined
+ ['&acute;', '&#180;', true, 'acute accent'],
+ ['&cedil;', '&#184;', true, 'cedilla'],
+ ['&ordf;', '&#170;', true, 'feminine ordinal indicator'],
+ ['&ordm;', '&#186;', true, 'masculine ordinal indicator'],
+ ['&dagger;', '&#8224;', true, 'dagger'],
+ ['&Dagger;', '&#8225;', true, 'double dagger'],
+// alphabetical special chars
+ ['&Agrave;', '&#192;', true, 'A - grave'],
+ ['&Aacute;', '&#193;', true, 'A - acute'],
+ ['&Acirc;', '&#194;', true, 'A - circumflex'],
+ ['&Atilde;', '&#195;', true, 'A - tilde'],
+ ['&Auml;', '&#196;', true, 'A - diaeresis'],
+ ['&Aring;', '&#197;', true, 'A - ring above'],
+ ['&AElig;', '&#198;', true, 'ligature AE'],
+ ['&Ccedil;', '&#199;', true, 'C - cedilla'],
+ ['&Egrave;', '&#200;', true, 'E - grave'],
+ ['&Eacute;', '&#201;', true, 'E - acute'],
+ ['&Ecirc;', '&#202;', true, 'E - circumflex'],
+ ['&Euml;', '&#203;', true, 'E - diaeresis'],
+ ['&Igrave;', '&#204;', true, 'I - grave'],
+ ['&Iacute;', '&#205;', true, 'I - acute'],
+ ['&Icirc;', '&#206;', true, 'I - circumflex'],
+ ['&Iuml;', '&#207;', true, 'I - diaeresis'],
+ ['&ETH;', '&#208;', true, 'ETH'],
+ ['&Ntilde;', '&#209;', true, 'N - tilde'],
+ ['&Ograve;', '&#210;', true, 'O - grave'],
+ ['&Oacute;', '&#211;', true, 'O - acute'],
+ ['&Ocirc;', '&#212;', true, 'O - circumflex'],
+ ['&Otilde;', '&#213;', true, 'O - tilde'],
+ ['&Ouml;', '&#214;', true, 'O - diaeresis'],
+ ['&Oslash;', '&#216;', true, 'O - slash'],
+ ['&OElig;', '&#338;', true, 'ligature OE'],
+ ['&Scaron;', '&#352;', true, 'S - caron'],
+ ['&Ugrave;', '&#217;', true, 'U - grave'],
+ ['&Uacute;', '&#218;', true, 'U - acute'],
+ ['&Ucirc;', '&#219;', true, 'U - circumflex'],
+ ['&Uuml;', '&#220;', true, 'U - diaeresis'],
+ ['&Yacute;', '&#221;', true, 'Y - acute'],
+ ['&Yuml;', '&#376;', true, 'Y - diaeresis'],
+ ['&THORN;', '&#222;', true, 'THORN'],
+ ['&agrave;', '&#224;', true, 'a - grave'],
+ ['&aacute;', '&#225;', true, 'a - acute'],
+ ['&acirc;', '&#226;', true, 'a - circumflex'],
+ ['&atilde;', '&#227;', true, 'a - tilde'],
+ ['&auml;', '&#228;', true, 'a - diaeresis'],
+ ['&aring;', '&#229;', true, 'a - ring above'],
+ ['&aelig;', '&#230;', true, 'ligature ae'],
+ ['&ccedil;', '&#231;', true, 'c - cedilla'],
+ ['&egrave;', '&#232;', true, 'e - grave'],
+ ['&eacute;', '&#233;', true, 'e - acute'],
+ ['&ecirc;', '&#234;', true, 'e - circumflex'],
+ ['&euml;', '&#235;', true, 'e - diaeresis'],
+ ['&igrave;', '&#236;', true, 'i - grave'],
+ ['&iacute;', '&#237;', true, 'i - acute'],
+ ['&icirc;', '&#238;', true, 'i - circumflex'],
+ ['&iuml;', '&#239;', true, 'i - diaeresis'],
+ ['&eth;', '&#240;', true, 'eth'],
+ ['&ntilde;', '&#241;', true, 'n - tilde'],
+ ['&ograve;', '&#242;', true, 'o - grave'],
+ ['&oacute;', '&#243;', true, 'o - acute'],
+ ['&ocirc;', '&#244;', true, 'o - circumflex'],
+ ['&otilde;', '&#245;', true, 'o - tilde'],
+ ['&ouml;', '&#246;', true, 'o - diaeresis'],
+ ['&oslash;', '&#248;', true, 'o slash'],
+ ['&oelig;', '&#339;', true, 'ligature oe'],
+ ['&scaron;', '&#353;', true, 's - caron'],
+ ['&ugrave;', '&#249;', true, 'u - grave'],
+ ['&uacute;', '&#250;', true, 'u - acute'],
+ ['&ucirc;', '&#251;', true, 'u - circumflex'],
+ ['&uuml;', '&#252;', true, 'u - diaeresis'],
+ ['&yacute;', '&#253;', true, 'y - acute'],
+ ['&thorn;', '&#254;', true, 'thorn'],
+ ['&yuml;', '&#255;', true, 'y - diaeresis'],
+ ['&Alpha;', '&#913;', true, 'Alpha'],
+ ['&Beta;', '&#914;', true, 'Beta'],
+ ['&Gamma;', '&#915;', true, 'Gamma'],
+ ['&Delta;', '&#916;', true, 'Delta'],
+ ['&Epsilon;', '&#917;', true, 'Epsilon'],
+ ['&Zeta;', '&#918;', true, 'Zeta'],
+ ['&Eta;', '&#919;', true, 'Eta'],
+ ['&Theta;', '&#920;', true, 'Theta'],
+ ['&Iota;', '&#921;', true, 'Iota'],
+ ['&Kappa;', '&#922;', true, 'Kappa'],
+ ['&Lambda;', '&#923;', true, 'Lambda'],
+ ['&Mu;', '&#924;', true, 'Mu'],
+ ['&Nu;', '&#925;', true, 'Nu'],
+ ['&Xi;', '&#926;', true, 'Xi'],
+ ['&Omicron;', '&#927;', true, 'Omicron'],
+ ['&Pi;', '&#928;', true, 'Pi'],
+ ['&Rho;', '&#929;', true, 'Rho'],
+ ['&Sigma;', '&#931;', true, 'Sigma'],
+ ['&Tau;', '&#932;', true, 'Tau'],
+ ['&Upsilon;', '&#933;', true, 'Upsilon'],
+ ['&Phi;', '&#934;', true, 'Phi'],
+ ['&Chi;', '&#935;', true, 'Chi'],
+ ['&Psi;', '&#936;', true, 'Psi'],
+ ['&Omega;', '&#937;', true, 'Omega'],
+ ['&alpha;', '&#945;', true, 'alpha'],
+ ['&beta;', '&#946;', true, 'beta'],
+ ['&gamma;', '&#947;', true, 'gamma'],
+ ['&delta;', '&#948;', true, 'delta'],
+ ['&epsilon;', '&#949;', true, 'epsilon'],
+ ['&zeta;', '&#950;', true, 'zeta'],
+ ['&eta;', '&#951;', true, 'eta'],
+ ['&theta;', '&#952;', true, 'theta'],
+ ['&iota;', '&#953;', true, 'iota'],
+ ['&kappa;', '&#954;', true, 'kappa'],
+ ['&lambda;', '&#955;', true, 'lambda'],
+ ['&mu;', '&#956;', true, 'mu'],
+ ['&nu;', '&#957;', true, 'nu'],
+ ['&xi;', '&#958;', true, 'xi'],
+ ['&omicron;', '&#959;', true, 'omicron'],
+ ['&pi;', '&#960;', true, 'pi'],
+ ['&rho;', '&#961;', true, 'rho'],
+ ['&sigmaf;', '&#962;', true, 'final sigma'],
+ ['&sigma;', '&#963;', true, 'sigma'],
+ ['&tau;', '&#964;', true, 'tau'],
+ ['&upsilon;', '&#965;', true, 'upsilon'],
+ ['&phi;', '&#966;', true, 'phi'],
+ ['&chi;', '&#967;', true, 'chi'],
+ ['&psi;', '&#968;', true, 'psi'],
+ ['&omega;', '&#969;', true, 'omega'],
+// symbols
+ ['&alefsym;', '&#8501;', false,'alef symbol'],
+ ['&piv;', '&#982;', false,'pi symbol'],
+ ['&real;', '&#8476;', false,'real part symbol'],
+ ['&thetasym;','&#977;', false,'theta symbol'],
+ ['&upsih;', '&#978;', false,'upsilon - hook symbol'],
+ ['&weierp;', '&#8472;', false,'Weierstrass p'],
+ ['&image;', '&#8465;', false,'imaginary part'],
+// arrows
+ ['&larr;', '&#8592;', true, 'leftwards arrow'],
+ ['&uarr;', '&#8593;', true, 'upwards arrow'],
+ ['&rarr;', '&#8594;', true, 'rightwards arrow'],
+ ['&darr;', '&#8595;', true, 'downwards arrow'],
+ ['&harr;', '&#8596;', true, 'left right arrow'],
+ ['&crarr;', '&#8629;', false,'carriage return'],
+ ['&lArr;', '&#8656;', false,'leftwards double arrow'],
+ ['&uArr;', '&#8657;', false,'upwards double arrow'],
+ ['&rArr;', '&#8658;', false,'rightwards double arrow'],
+ ['&dArr;', '&#8659;', false,'downwards double arrow'],
+ ['&hArr;', '&#8660;', false,'left right double arrow'],
+ ['&there4;', '&#8756;', false,'therefore'],
+ ['&sub;', '&#8834;', false,'subset of'],
+ ['&sup;', '&#8835;', false,'superset of'],
+ ['&nsub;', '&#8836;', false,'not a subset of'],
+ ['&sube;', '&#8838;', false,'subset of or equal to'],
+ ['&supe;', '&#8839;', false,'superset of or equal to'],
+ ['&oplus;', '&#8853;', false,'circled plus'],
+ ['&otimes;', '&#8855;', false,'circled times'],
+ ['&perp;', '&#8869;', false,'perpendicular'],
+ ['&sdot;', '&#8901;', false,'dot operator'],
+ ['&lceil;', '&#8968;', false,'left ceiling'],
+ ['&rceil;', '&#8969;', false,'right ceiling'],
+ ['&lfloor;', '&#8970;', false,'left floor'],
+ ['&rfloor;', '&#8971;', false,'right floor'],
+ ['&lang;', '&#9001;', false,'left-pointing angle bracket'],
+ ['&rang;', '&#9002;', false,'right-pointing angle bracket'],
+ ['&loz;', '&#9674;', true, 'lozenge'],
+ ['&spades;', '&#9824;', true, 'black spade suit'],
+ ['&clubs;', '&#9827;', true, 'black club suit'],
+ ['&hearts;', '&#9829;', true, 'black heart suit'],
+ ['&diams;', '&#9830;', true, 'black diamond suit'],
+ ['&ensp;', '&#8194;', false,'en space'],
+ ['&emsp;', '&#8195;', false,'em space'],
+ ['&thinsp;', '&#8201;', false,'thin space'],
+ ['&zwnj;', '&#8204;', false,'zero width non-joiner'],
+ ['&zwj;', '&#8205;', false,'zero width joiner'],
+ ['&lrm;', '&#8206;', false,'left-to-right mark'],
+ ['&rlm;', '&#8207;', false,'right-to-left mark'],
+ ['&shy;', '&#173;', false,'soft hyphen']
+];
+
+tinyMCEPopup.onInit.add(function() {
+ tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());
+ addKeyboardNavigation();
+});
+
+function addKeyboardNavigation(){
+ var tableElm, cells, settings;
+
+ cells = tinyMCEPopup.dom.select("a.charmaplink", "charmapgroup");
+
+ settings ={
+ root: "charmapgroup",
+ items: cells
+ };
+ cells[0].tabindex=0;
+ tinyMCEPopup.dom.addClass(cells[0], "mceFocus");
+ if (tinymce.isGecko) {
+ cells[0].focus();
+ } else {
+ setTimeout(function(){
+ cells[0].focus();
+ }, 100);
+ }
+ tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', settings, tinyMCEPopup.dom);
+}
+
+function renderCharMapHTML() {
+ var charsPerRow = 20, tdWidth=20, tdHeight=20, i;
+ var html = '<div id="charmapgroup" aria-labelledby="charmap_label" tabindex="0" role="listbox">'+
+ '<table role="presentation" border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) +
+ '"><tr height="' + tdHeight + '">';
+ var cols=-1;
+
+ for (i=0; i<charmap.length; i++) {
+ var previewCharFn;
+
+ if (charmap[i][2]==true) {
+ cols++;
+ previewCharFn = 'previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');';
+ html += ''
+ + '<td class="charmap">'
+ + '<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] + ' '+ tinyMCEPopup.editor.translate("advanced_dlg.charmap_usage")+'">'
+ + charmap[i][1]
+ + '</a></td>';
+ if ((cols+1) % charsPerRow == 0)
+ html += '</tr><tr height="' + tdHeight + '">';
+ }
+ }
+
+ if (cols % charsPerRow > 0) {
+ var padd = charsPerRow - (cols % charsPerRow);
+ for (var i=0; i<padd-1; i++)
+ html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap">&nbsp;</td>';
+ }
+
+ html += '</tr></table></div>';
+ html = html.replace(/<tr height="20"><\/tr>/g, '');
+
+ return html;
+}
+
+function insertChar(chr) {
+ tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');
+
+ // Refocus in window
+ if (tinyMCEPopup.isWindow)
+ window.focus();
+
+ tinyMCEPopup.editor.focus();
+ tinyMCEPopup.close();
+}
+
+function previewChar(codeA, codeB, codeN) {
+ var elmA = document.getElementById('codeA');
+ var elmB = document.getElementById('codeB');
+ var elmV = document.getElementById('codeV');
+ var elmN = document.getElementById('codeN');
+
+ if (codeA=='#160;') {
+ elmV.innerHTML = '__';
+ } else {
+ elmV.innerHTML = '&' + codeA;
+ }
+
+ elmB.innerHTML = '&amp;' + codeA;
+ elmA.innerHTML = '&amp;' + codeB;
+ elmN.innerHTML = codeN;
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js
new file mode 100644
index 000000000..f51e703b0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/color_picker.js
@@ -0,0 +1,329 @@
+tinyMCEPopup.requireLangPack();
+
+var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;
+
+var colors = [
+ "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",
+ "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",
+ "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",
+ "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033",
+ "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399",
+ "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff",
+ "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333",
+ "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399",
+ "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff",
+ "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633",
+ "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699",
+ "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff",
+ "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633",
+ "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999",
+ "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff",
+ "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933",
+ "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999",
+ "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff",
+ "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33",
+ "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99",
+ "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff",
+ "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33",
+ "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99",
+ "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff",
+ "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",
+ "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",
+ "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"
+];
+
+var named = {
+ '#F0F8FF':'Alice Blue','#FAEBD7':'Antique White','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',
+ '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'Blanched Almond','#0000FF':'Blue','#8A2BE2':'Blue Violet','#A52A2A':'Brown',
+ '#DEB887':'Burly Wood','#5F9EA0':'Cadet Blue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'Cornflower Blue',
+ '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'Dark Blue','#008B8B':'Dark Cyan','#B8860B':'Dark Golden Rod',
+ '#A9A9A9':'Dark Gray','#A9A9A9':'Dark Grey','#006400':'Dark Green','#BDB76B':'Dark Khaki','#8B008B':'Dark Magenta','#556B2F':'Dark Olive Green',
+ '#FF8C00':'Darkorange','#9932CC':'Dark Orchid','#8B0000':'Dark Red','#E9967A':'Dark Salmon','#8FBC8F':'Dark Sea Green','#483D8B':'Dark Slate Blue',
+ '#2F4F4F':'Dark Slate Gray','#2F4F4F':'Dark Slate Grey','#00CED1':'Dark Turquoise','#9400D3':'Dark Violet','#FF1493':'Deep Pink','#00BFFF':'Deep Sky Blue',
+ '#696969':'Dim Gray','#696969':'Dim Grey','#1E90FF':'Dodger Blue','#B22222':'Fire Brick','#FFFAF0':'Floral White','#228B22':'Forest Green',
+ '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'Ghost White','#FFD700':'Gold','#DAA520':'Golden Rod','#808080':'Gray','#808080':'Grey',
+ '#008000':'Green','#ADFF2F':'Green Yellow','#F0FFF0':'Honey Dew','#FF69B4':'Hot Pink','#CD5C5C':'Indian Red','#4B0082':'Indigo','#FFFFF0':'Ivory',
+ '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'Lavender Blush','#7CFC00':'Lawn Green','#FFFACD':'Lemon Chiffon','#ADD8E6':'Light Blue',
+ '#F08080':'Light Coral','#E0FFFF':'Light Cyan','#FAFAD2':'Light Golden Rod Yellow','#D3D3D3':'Light Gray','#D3D3D3':'Light Grey','#90EE90':'Light Green',
+ '#FFB6C1':'Light Pink','#FFA07A':'Light Salmon','#20B2AA':'Light Sea Green','#87CEFA':'Light Sky Blue','#778899':'Light Slate Gray','#778899':'Light Slate Grey',
+ '#B0C4DE':'Light Steel Blue','#FFFFE0':'Light Yellow','#00FF00':'Lime','#32CD32':'Lime Green','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',
+ '#66CDAA':'Medium Aqua Marine','#0000CD':'Medium Blue','#BA55D3':'Medium Orchid','#9370D8':'Medium Purple','#3CB371':'Medium Sea Green','#7B68EE':'Medium Slate Blue',
+ '#00FA9A':'Medium Spring Green','#48D1CC':'Medium Turquoise','#C71585':'Medium Violet Red','#191970':'Midnight Blue','#F5FFFA':'Mint Cream','#FFE4E1':'Misty Rose','#FFE4B5':'Moccasin',
+ '#FFDEAD':'Navajo White','#000080':'Navy','#FDF5E6':'Old Lace','#808000':'Olive','#6B8E23':'Olive Drab','#FFA500':'Orange','#FF4500':'Orange Red','#DA70D6':'Orchid',
+ '#EEE8AA':'Pale Golden Rod','#98FB98':'Pale Green','#AFEEEE':'Pale Turquoise','#D87093':'Pale Violet Red','#FFEFD5':'Papaya Whip','#FFDAB9':'Peach Puff',
+ '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'Powder Blue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'Rosy Brown','#4169E1':'Royal Blue',
+ '#8B4513':'Saddle Brown','#FA8072':'Salmon','#F4A460':'Sandy Brown','#2E8B57':'Sea Green','#FFF5EE':'Sea Shell','#A0522D':'Sienna','#C0C0C0':'Silver',
+ '#87CEEB':'Sky Blue','#6A5ACD':'Slate Blue','#708090':'Slate Gray','#708090':'Slate Grey','#FFFAFA':'Snow','#00FF7F':'Spring Green',
+ '#4682B4':'Steel Blue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',
+ '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'White Smoke','#FFFF00':'Yellow','#9ACD32':'Yellow Green'
+};
+
+var namedLookup = {};
+
+function init() {
+ var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color')), key, value;
+
+ tinyMCEPopup.resizeToInnerSize();
+
+ generatePicker();
+ generateWebColors();
+ generateNamedColors();
+
+ if (inputColor) {
+ changeFinalColor(inputColor);
+
+ col = convertHexToRGB(inputColor);
+
+ if (col)
+ updateLight(col.r, col.g, col.b);
+ }
+
+ for (key in named) {
+ value = named[key];
+ namedLookup[value.replace(/\s+/, '').toLowerCase()] = key.replace(/#/, '').toLowerCase();
+ }
+}
+
+function toHexColor(color) {
+ var matches, red, green, blue, toInt = parseInt;
+
+ function hex(value) {
+ value = parseInt(value).toString(16);
+
+ return value.length > 1 ? value : '0' + value; // Padd with leading zero
+ };
+
+ color = color.replace(/[\s#]+/g, '').toLowerCase();
+ color = namedLookup[color] || color;
+ 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);
+
+ if (matches) {
+ if (matches[1]) {
+ red = toInt(matches[1]);
+ green = toInt(matches[2]);
+ blue = toInt(matches[3]);
+ } else if (matches[4]) {
+ red = toInt(matches[4], 16);
+ green = toInt(matches[5], 16);
+ blue = toInt(matches[6], 16);
+ } else if (matches[7]) {
+ red = toInt(matches[7] + matches[7], 16);
+ green = toInt(matches[8] + matches[8], 16);
+ blue = toInt(matches[9] + matches[9], 16);
+ }
+
+ return '#' + hex(red) + hex(green) + hex(blue);
+ }
+
+ return '';
+}
+
+function insertAction() {
+ var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');
+
+ tinyMCEPopup.restoreSelection();
+
+ if (f)
+ f(toHexColor(color));
+
+ tinyMCEPopup.close();
+}
+
+function showColor(color, name) {
+ if (name)
+ document.getElementById("colorname").innerHTML = name;
+
+ document.getElementById("preview").style.backgroundColor = color;
+ document.getElementById("color").value = color.toUpperCase();
+}
+
+function convertRGBToHex(col) {
+ var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
+
+ if (!col)
+ return col;
+
+ var rgb = col.replace(re, "$1,$2,$3").split(',');
+ if (rgb.length == 3) {
+ r = parseInt(rgb[0]).toString(16);
+ g = parseInt(rgb[1]).toString(16);
+ b = parseInt(rgb[2]).toString(16);
+
+ r = r.length == 1 ? '0' + r : r;
+ g = g.length == 1 ? '0' + g : g;
+ b = b.length == 1 ? '0' + b : b;
+
+ return "#" + r + g + b;
+ }
+
+ return col;
+}
+
+function convertHexToRGB(col) {
+ if (col.indexOf('#') != -1) {
+ col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
+
+ r = parseInt(col.substring(0, 2), 16);
+ g = parseInt(col.substring(2, 4), 16);
+ b = parseInt(col.substring(4, 6), 16);
+
+ return {r : r, g : g, b : b};
+ }
+
+ return null;
+}
+
+function generatePicker() {
+ var el = document.getElementById('light'), h = '', i;
+
+ for (i = 0; i < detail; i++){
+ h += '<div id="gs'+i+'" style="background-color:#000000; width:15px; height:3px; border-style:none; border-width:0px;"'
+ + ' onclick="changeFinalColor(this.style.backgroundColor)"'
+ + ' onmousedown="isMouseDown = true; return false;"'
+ + ' onmouseup="isMouseDown = false;"'
+ + ' onmousemove="if (isMouseDown && isMouseOver) changeFinalColor(this.style.backgroundColor); return false;"'
+ + ' onmouseover="isMouseOver = true;"'
+ + ' onmouseout="isMouseOver = false;"'
+ + '></div>';
+ }
+
+ el.innerHTML = h;
+}
+
+function generateWebColors() {
+ var el = document.getElementById('webcolors'), h = '', i;
+
+ if (el.className == 'generated')
+ return;
+
+ // TODO: VoiceOver doesn't seem to support legend as a label referenced by labelledby.
+ h += '<div role="listbox" aria-labelledby="webcolors_title" tabindex="0"><table role="presentation" border="0" cellspacing="1" cellpadding="0">'
+ + '<tr>';
+
+ for (i=0; i<colors.length; i++) {
+ h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'
+ + '<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;">';
+ if (tinyMCEPopup.editor.forcedHighContrastMode) {
+ h += '<canvas class="mceColorSwatch" height="10" width="10" data-color="' + colors[i] + '"></canvas>';
+ }
+ h += '<span class="mceVoiceLabel" style="display:none;" id="web_colors_' + i + '">' + colors[i].toUpperCase() + '</span>';
+ h += '</a></td>';
+ if ((i+1) % 18 == 0)
+ h += '</tr><tr>';
+ }
+
+ h += '</table></div>';
+
+ el.innerHTML = h;
+ el.className = 'generated';
+
+ paintCanvas(el);
+ enableKeyboardNavigation(el.firstChild);
+}
+
+function paintCanvas(el) {
+ tinyMCEPopup.getWin().tinymce.each(tinyMCEPopup.dom.select('canvas.mceColorSwatch', el), function(canvas) {
+ var context;
+ if (canvas.getContext && (context = canvas.getContext("2d"))) {
+ context.fillStyle = canvas.getAttribute('data-color');
+ context.fillRect(0, 0, 10, 10);
+ }
+ });
+}
+function generateNamedColors() {
+ var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;
+
+ if (el.className == 'generated')
+ return;
+
+ for (n in named) {
+ v = named[n];
+ 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 + '">';
+ if (tinyMCEPopup.editor.forcedHighContrastMode) {
+ h += '<canvas class="mceColorSwatch" height="10" width="10" data-color="' + colors[i] + '"></canvas>';
+ }
+ h += '<span class="mceVoiceLabel" style="display:none;" id="named_colors_' + i + '">' + v + '</span>';
+ h += '</a>';
+ i++;
+ }
+
+ el.innerHTML = h;
+ el.className = 'generated';
+
+ paintCanvas(el);
+ enableKeyboardNavigation(el);
+}
+
+function enableKeyboardNavigation(el) {
+ tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {
+ root: el,
+ items: tinyMCEPopup.dom.select('a', el)
+ }, tinyMCEPopup.dom);
+}
+
+function dechex(n) {
+ return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);
+}
+
+function computeColor(e) {
+ var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB, pos = tinyMCEPopup.dom.getPos(e.target);
+
+ x = e.offsetX ? e.offsetX : (e.target ? e.clientX - pos.x : 0);
+ y = e.offsetY ? e.offsetY : (e.target ? e.clientY - pos.y : 0);
+
+ partWidth = document.getElementById('colors').width / 6;
+ partDetail = detail / 2;
+ imHeight = document.getElementById('colors').height;
+
+ 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;
+ 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);
+ 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);
+
+ coef = (imHeight - y) / imHeight;
+ r = 128 + (r - 128) * coef;
+ g = 128 + (g - 128) * coef;
+ b = 128 + (b - 128) * coef;
+
+ changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));
+ updateLight(r, g, b);
+}
+
+function updateLight(r, g, b) {
+ var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color;
+
+ for (i=0; i<detail; i++) {
+ if ((i>=0) && (i<partDetail)) {
+ finalCoef = i / partDetail;
+ finalR = dechex(255 - (255 - r) * finalCoef);
+ finalG = dechex(255 - (255 - g) * finalCoef);
+ finalB = dechex(255 - (255 - b) * finalCoef);
+ } else {
+ finalCoef = 2 - i / partDetail;
+ finalR = dechex(r * finalCoef);
+ finalG = dechex(g * finalCoef);
+ finalB = dechex(b * finalCoef);
+ }
+
+ color = finalR + finalG + finalB;
+
+ setCol('gs' + i, '#'+color);
+ }
+}
+
+function changeFinalColor(color) {
+ if (color.indexOf('#') == -1)
+ color = convertRGBToHex(color);
+
+ setCol('preview', color);
+ document.getElementById('color').value = color;
+}
+
+function setCol(e, c) {
+ try {
+ document.getElementById(e).style.backgroundColor = c;
+ } catch (ex) {
+ // Ignore IE warning
+ }
+}
+
+tinyMCEPopup.onInit.add(init);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js
new file mode 100644
index 000000000..6c2489a16
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/image.js
@@ -0,0 +1,251 @@
+var ImageDialog = {
+ preInit : function() {
+ var url;
+
+ tinyMCEPopup.requireLangPack();
+
+ if (url = tinyMCEPopup.getParam("external_image_list_url"))
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
+ },
+
+ init : function() {
+ var f = document.forms[0], ed = tinyMCEPopup.editor;
+
+ // Setup browse button
+ document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
+ if (isVisible('srcbrowser'))
+ document.getElementById('src').style.width = '180px';
+
+ e = ed.selection.getNode();
+
+ this.fillFileList('image_list', tinyMCEPopup.getParam('external_image_list', 'tinyMCEImageList'));
+
+ if (e.nodeName == 'IMG') {
+ f.src.value = ed.dom.getAttrib(e, 'src');
+ f.alt.value = ed.dom.getAttrib(e, 'alt');
+ f.border.value = this.getAttrib(e, 'border');
+ f.vspace.value = this.getAttrib(e, 'vspace');
+ f.hspace.value = this.getAttrib(e, 'hspace');
+ f.width.value = ed.dom.getAttrib(e, 'width');
+ f.height.value = ed.dom.getAttrib(e, 'height');
+ f.insert.value = ed.getLang('update');
+ this.styleVal = ed.dom.getAttrib(e, 'style');
+ selectByValue(f, 'image_list', f.src.value);
+ selectByValue(f, 'align', this.getAttrib(e, 'align'));
+ this.updateStyle();
+ }
+ },
+
+ fillFileList : function(id, l) {
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
+
+ l = typeof(l) === 'function' ? l() : window[l];
+
+ if (l && l.length > 0) {
+ lst.options[lst.options.length] = new Option('', '');
+
+ tinymce.each(l, function(o) {
+ lst.options[lst.options.length] = new Option(o[0], o[1]);
+ });
+ } else
+ dom.remove(dom.getParent(id, 'tr'));
+ },
+
+ update : function() {
+ var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;
+
+ tinyMCEPopup.restoreSelection();
+
+ if (f.src.value === '') {
+ if (ed.selection.getNode().nodeName == 'IMG') {
+ ed.dom.remove(ed.selection.getNode());
+ ed.execCommand('mceRepaint');
+ }
+
+ tinyMCEPopup.close();
+ return;
+ }
+
+ if (!ed.settings.inline_styles) {
+ args = tinymce.extend(args, {
+ vspace : nl.vspace.value,
+ hspace : nl.hspace.value,
+ border : nl.border.value,
+ align : getSelectValue(f, 'align')
+ });
+ } else
+ args.style = this.styleVal;
+
+ tinymce.extend(args, {
+ src : f.src.value.replace(/ /g, '%20'),
+ alt : f.alt.value,
+ width : f.width.value,
+ height : f.height.value
+ });
+
+ el = ed.selection.getNode();
+
+ if (el && el.nodeName == 'IMG') {
+ ed.dom.setAttribs(el, args);
+ tinyMCEPopup.editor.execCommand('mceRepaint');
+ tinyMCEPopup.editor.focus();
+ } else {
+ tinymce.each(args, function(value, name) {
+ if (value === "") {
+ delete args[name];
+ }
+ });
+
+ ed.execCommand('mceInsertContent', false, tinyMCEPopup.editor.dom.createHTML('img', args), {skip_undo : 1});
+ ed.undoManager.add();
+ }
+
+ tinyMCEPopup.close();
+ },
+
+ updateStyle : function() {
+ var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];
+
+ if (tinyMCEPopup.editor.settings.inline_styles) {
+ st = tinyMCEPopup.dom.parseStyle(this.styleVal);
+
+ // Handle align
+ v = getSelectValue(f, 'align');
+ if (v) {
+ if (v == 'left' || v == 'right') {
+ st['float'] = v;
+ delete st['vertical-align'];
+ } else {
+ st['vertical-align'] = v;
+ delete st['float'];
+ }
+ } else {
+ delete st['float'];
+ delete st['vertical-align'];
+ }
+
+ // Handle border
+ v = f.border.value;
+ if (v || v == '0') {
+ if (v == '0')
+ st['border'] = '0';
+ else
+ st['border'] = v + 'px solid black';
+ } else
+ delete st['border'];
+
+ // Handle hspace
+ v = f.hspace.value;
+ if (v) {
+ delete st['margin'];
+ st['margin-left'] = v + 'px';
+ st['margin-right'] = v + 'px';
+ } else {
+ delete st['margin-left'];
+ delete st['margin-right'];
+ }
+
+ // Handle vspace
+ v = f.vspace.value;
+ if (v) {
+ delete st['margin'];
+ st['margin-top'] = v + 'px';
+ st['margin-bottom'] = v + 'px';
+ } else {
+ delete st['margin-top'];
+ delete st['margin-bottom'];
+ }
+
+ // Merge
+ st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img');
+ this.styleVal = dom.serializeStyle(st, 'img');
+ }
+ },
+
+ getAttrib : function(e, at) {
+ var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;
+
+ if (ed.settings.inline_styles) {
+ switch (at) {
+ case 'align':
+ if (v = dom.getStyle(e, 'float'))
+ return v;
+
+ if (v = dom.getStyle(e, 'vertical-align'))
+ return v;
+
+ break;
+
+ case 'hspace':
+ v = dom.getStyle(e, 'margin-left')
+ v2 = dom.getStyle(e, 'margin-right');
+ if (v && v == v2)
+ return parseInt(v.replace(/[^0-9]/g, ''));
+
+ break;
+
+ case 'vspace':
+ v = dom.getStyle(e, 'margin-top')
+ v2 = dom.getStyle(e, 'margin-bottom');
+ if (v && v == v2)
+ return parseInt(v.replace(/[^0-9]/g, ''));
+
+ break;
+
+ case 'border':
+ v = 0;
+
+ tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {
+ sv = dom.getStyle(e, 'border-' + sv + '-width');
+
+ // False or not the same as prev
+ if (!sv || (sv != v && v !== 0)) {
+ v = 0;
+ return false;
+ }
+
+ if (sv)
+ v = sv;
+ });
+
+ if (v)
+ return parseInt(v.replace(/[^0-9]/g, ''));
+
+ break;
+ }
+ }
+
+ if (v = dom.getAttrib(e, at))
+ return v;
+
+ return '';
+ },
+
+ resetImageData : function() {
+ var f = document.forms[0];
+
+ f.width.value = f.height.value = "";
+ },
+
+ updateImageData : function() {
+ var f = document.forms[0], t = ImageDialog;
+
+ if (f.width.value == "")
+ f.width.value = t.preloadImg.width;
+
+ if (f.height.value == "")
+ f.height.value = t.preloadImg.height;
+ },
+
+ getImageData : function() {
+ var f = document.forms[0];
+
+ this.preloadImg = new Image();
+ this.preloadImg.onload = this.updateImageData;
+ this.preloadImg.onerror = this.resetImageData;
+ this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);
+ }
+};
+
+ImageDialog.preInit();
+tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js
new file mode 100644
index 000000000..53ff409e7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/link.js
@@ -0,0 +1,153 @@
+tinyMCEPopup.requireLangPack();
+
+var LinkDialog = {
+ preInit : function() {
+ var url;
+
+ if (url = tinyMCEPopup.getParam("external_link_list_url"))
+ document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
+ },
+
+ init : function() {
+ var f = document.forms[0], ed = tinyMCEPopup.editor;
+
+ // Setup browse button
+ document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link');
+ if (isVisible('hrefbrowser'))
+ document.getElementById('href').style.width = '180px';
+
+ this.fillClassList('class_list');
+ this.fillFileList('link_list', 'tinyMCELinkList');
+ this.fillTargetList('target_list');
+
+ if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) {
+ f.href.value = ed.dom.getAttrib(e, 'href');
+ f.linktitle.value = ed.dom.getAttrib(e, 'title');
+ f.insert.value = ed.getLang('update');
+ selectByValue(f, 'link_list', f.href.value);
+ selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target'));
+ selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class'));
+ }
+ },
+
+ update : function() {
+ var f = document.forms[0], ed = tinyMCEPopup.editor, e, b, href = f.href.value.replace(/ /g, '%20');
+
+ tinyMCEPopup.restoreSelection();
+ e = ed.dom.getParent(ed.selection.getNode(), 'A');
+
+ // Remove element if there is no href
+ if (!f.href.value) {
+ if (e) {
+ b = ed.selection.getBookmark();
+ ed.dom.remove(e, 1);
+ ed.selection.moveToBookmark(b);
+ tinyMCEPopup.execCommand("mceEndUndoLevel");
+ tinyMCEPopup.close();
+ return;
+ }
+ }
+
+ // Create new anchor elements
+ if (e == null) {
+ ed.getDoc().execCommand("unlink", false, null);
+ tinyMCEPopup.execCommand("mceInsertLink", false, "#mce_temp_url#", {skip_undo : 1});
+
+ tinymce.each(ed.dom.select("a"), function(n) {
+ if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') {
+ e = n;
+
+ ed.dom.setAttribs(e, {
+ href : href,
+ title : f.linktitle.value,
+ target : f.target_list ? getSelectValue(f, "target_list") : null,
+ 'class' : f.class_list ? getSelectValue(f, "class_list") : null
+ });
+ }
+ });
+ } else {
+ ed.dom.setAttribs(e, {
+ href : href,
+ title : f.linktitle.value,
+ target : f.target_list ? getSelectValue(f, "target_list") : null,
+ 'class' : f.class_list ? getSelectValue(f, "class_list") : null
+ });
+ }
+
+ // Don't move caret if selection was image
+ if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') {
+ ed.focus();
+ ed.selection.select(e);
+ ed.selection.collapse(0);
+ tinyMCEPopup.storeSelection();
+ }
+
+ tinyMCEPopup.execCommand("mceEndUndoLevel");
+ tinyMCEPopup.close();
+ },
+
+ checkPrefix : function(n) {
+ if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))
+ n.value = 'mailto:' + n.value;
+
+ if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))
+ n.value = 'http://' + n.value;
+ },
+
+ fillFileList : function(id, l) {
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
+
+ l = window[l];
+
+ if (l && l.length > 0) {
+ lst.options[lst.options.length] = new Option('', '');
+
+ tinymce.each(l, function(o) {
+ lst.options[lst.options.length] = new Option(o[0], o[1]);
+ });
+ } else
+ dom.remove(dom.getParent(id, 'tr'));
+ },
+
+ fillClassList : function(id) {
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
+
+ if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {
+ cl = [];
+
+ tinymce.each(v.split(';'), function(v) {
+ var p = v.split('=');
+
+ cl.push({'title' : p[0], 'class' : p[1]});
+ });
+ } else
+ cl = tinyMCEPopup.editor.dom.getClasses();
+
+ if (cl.length > 0) {
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
+
+ tinymce.each(cl, function(o) {
+ lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);
+ });
+ } else
+ dom.remove(dom.getParent(id, 'tr'));
+ },
+
+ fillTargetList : function(id) {
+ var dom = tinyMCEPopup.dom, lst = dom.get(id), v;
+
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self');
+ lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank');
+
+ if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) {
+ tinymce.each(v.split(','), function(v) {
+ v = v.split('=');
+ lst.options[lst.options.length] = new Option(v[0], v[1]);
+ });
+ }
+ }
+};
+
+LinkDialog.preInit();
+tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog);
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js
new file mode 100644
index 000000000..84546ad52
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/js/source_editor.js
@@ -0,0 +1,56 @@
+tinyMCEPopup.requireLangPack();
+tinyMCEPopup.onInit.add(onLoadInit);
+
+function saveContent() {
+ tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true});
+ tinyMCEPopup.close();
+}
+
+function onLoadInit() {
+ tinyMCEPopup.resizeToInnerSize();
+
+ // Remove Gecko spellchecking
+ if (tinymce.isGecko)
+ document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");
+
+ document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true});
+
+ if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {
+ setWrap('soft');
+ document.getElementById('wraped').checked = true;
+ }
+
+ resizeInputs();
+}
+
+function setWrap(val) {
+ var v, n, s = document.getElementById('htmlSource');
+
+ s.wrap = val;
+
+ if (!tinymce.isIE) {
+ v = s.value;
+ n = s.cloneNode(false);
+ n.setAttribute("wrap", val);
+ s.parentNode.replaceChild(n, s);
+ n.value = v;
+ }
+}
+
+function toggleWordWrap(elm) {
+ if (elm.checked)
+ setWrap('soft');
+ else
+ setWrap('off');
+}
+
+function resizeInputs() {
+ var vp = tinyMCEPopup.dom.getViewPort(window), el;
+
+ el = document.getElementById('htmlSource');
+
+ if (el) {
+ el.style.width = (vp.w - 20) + 'px';
+ el.style.height = (vp.h - 65) + 'px';
+ }
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ar.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ar.js
new file mode 100644
index 000000000..9bdeef027
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ar.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.advanced',{"underline_desc":"\u062a\u062d\u062a\u0647 \u062e\u0637 (Ctrl U)","italic_desc":"\u0645\u0627\u0626\u0644 (Ctrl+I)","bold_desc":"\u0639\u0631\u064a\u0636 (Ctrl+B)",dd:"\u0627\u0644\u0648\u0635\u0641",dt:"\u062a\u0639\u0631\u064a\u0641 \u0645\u0635\u0637\u0644\u062d",samp:"Code sample",code:"\u0642\u0627\u0646\u0648\u0646",blockquote:"\u0639\u0644\u0627\u0645\u0629 \u0627\u0642\u062a\u0628\u0627\u0633 \u0641\u0642\u0631\u0629",h6:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 6",h5:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 5",h4:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 4",h3:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 3",h2:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 2",h1:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 1",pre:"\u0645\u0647\u064a\u0623 \u0645\u0633\u0628\u0642",address:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646",div:"\u0627\u0644\u062f\u0631\u062c\u0629",paragraph:"\u0627\u0644\u0646\u0635",block:"\u0627\u0644\u0647\u064a\u0626\u0647",fontdefault:"\u0639\u0627\u0626\u0644\u0647 \u0627\u0644\u062e\u0637","font_size":"\u062d\u062c\u0645 \u0627\u0644\u062e\u0637","style_select":"\u0627\u0644\u0633\u0645\u0627\u062a","more_colors":"\u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0623\u0644\u0648\u0627\u0646","toolbar_focus":"\u0644\u0644\u062a\u062d\u0631\u0643 \u0627\u0644\u0633\u0631\u064a\u0639 \u0627\u0636\u063a\u0637 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d Alt Q \u0644\u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0623\u062f\u0648\u0627\u062a\u060c Alt-Z \u0644\u0644\u0645\u062d\u0631\u0631 \u060c Alt-X \u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0639\u0646\u0635\u0631",newdocument:"\u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0623\u0646\u0643 \u062a\u0631\u064a\u062f \u0645\u0633\u062d \u0643\u0627\u0641\u0629 \u0645\u062d\u062a\u0648\u064a\u0627\u062a\u061f",path:"\u0645\u0633\u0627\u0631","clipboard_msg":"\u0646\u0633\u062e/\u0642\u0635/\u0644\u0635\u0642 \u063a\u064a\u0631 \u0645\u062a\u0648\u0627\u0641\u0631 \u0641\u064a \u0641\u064a\u0631 \u0641\u0648\u0643\u0633 \u062d\u0627\u0644\u064a\u0627 \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u062a\u0639\u0631\u0641 \u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a\u061f","blockquote_desc":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0642\u062a\u0628\u0627\u0633 \u0641\u0642\u0631\u0629","help_desc":"\u0645\u0633\u0627\u0639\u062f\u0647","newdocument_desc":"\u0645\u0633\u062a\u0646\u062f \u062c\u062f\u064a\u062f","image_props_desc":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0635\u0648\u0631\u0629","paste_desc":"\u0644\u0635\u0642","copy_desc":"\u0646\u0633\u062e","cut_desc":"\u0642\u0635","anchor_desc":"\u0625\u062f\u0631\u0627\u062c / \u062a\u062d\u0631\u064a\u0631 \u0645\u0631\u0633\u0627\u0629","visualaid_desc":"\u0627\u0644\u0645\u0628\u0627\u062f\u0626 \u0627\u0644\u062a\u0648\u062c\u064a\u0647\u064a\u0629 \u062a\u0628\u062f\u064a\u0644 / \u0639\u0646\u0627\u0635\u0631 \u063a\u064a\u0631 \u0645\u0631\u0626\u064a\u0629","charmap_desc":"\u0627\u062f\u062e\u0627\u0644 \u0631\u0645\u0632 \u062c\u062f\u064a\u062f","backcolor_desc":"\u0627\u062e\u062a\u0631 \u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0647","forecolor_desc":"\u0627\u062e\u062a\u0631 \u0644\u0648\u0646 \u0627\u0644\u0646\u0635","custom1_desc":"\u0627\u062f\u062e\u0644 \u0627\u0644\u0648\u0635\u0641 \u0647\u0646","removeformat_desc":"\u0627\u0632\u0627\u0644\u0647 \u0627\u0644\u062a\u0646\u0633\u064a\u0642","hr_desc":"\u0627\u062f\u0631\u0627\u062c \u062e\u0637 \u0627\u0641\u0642\u0649","sup_desc":"\u0645\u0631\u062a\u0641\u0639","sub_desc":"\u0645\u0646\u062e\u0641\u0636","code_desc":"\u062a\u0639\u062f\u064a\u0644 \u0634\u0641\u0631\u0647 \u0627\u0644 \u0623\u062a\u0634 \u062a\u064a \u0623\u0645 \u0623\u0644","cleanup_desc":"\u062a\u0646\u0638\u064a\u0641 \u0627\u0644\u0643\u0648\u062f","image_desc":"\u0627\u0636\u0627\u0641\u0647 / \u062d\u0630\u0641 \u0635\u0648\u0631\u0647","unlink_desc":"\u062d\u0630\u0641 \u0627\u0644\u0631\u0627\u0628\u0637","link_desc":"\u0627\u0636\u0627\u0641\u0647 / \u062a\u0639\u062f\u064a\u0644 \u0631\u0627\u0628\u0637","redo_desc":"\u0627\u0644\u0625\u0639\u0627\u062f\u0629 (\u0627\u0644\u0633\u064a\u0637\u0631\u0629 + \u0635)","undo_desc":"\u062a\u0631\u0627\u062c\u0639 (\u0627\u0644\u0633\u064a\u0637\u0631\u0629 + \u0649)","indent_desc":"\u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629","outdent_desc":"\u0625\u0646\u0642\u0627\u0635 \u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629 \u0642\u0628\u0644","numlist_desc":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0631\u062a\u0628\u0629","bullist_desc":"\u0642\u0627\u0626\u0645\u0629 \u063a\u064a\u0631 \u0645\u0631\u062a\u0628\u0629","justifyfull_desc":"\u0645\u062d\u0627\u0630\u0627\u0647 \u0643\u0644\u064a\u0647","justifyright_desc":"\u062a\u0648\u0633\u064a\u0637 \u064a\u0645\u064a\u0646","justifycenter_desc":"\u062a\u0648\u0633\u064a\u0637 \u0648\u0633\u0637","justifyleft_desc":"\u062a\u0648\u0633\u064a\u0637 \u064a\u0633\u0627\u0631","striketrough_desc":"\u062a\u0648\u0633\u064a\u0637 \u062e\u0637","help_shortcut":"\u0627\u0636\u063a\u0637 ALT-F10 \u0644\u0634\u0631\u064a\u0637 \u0627\u0644\u0627\u062f\u0648\u0627\u062a. \u0627\u0636\u063a\u0637 ALT-0 \u0644\u0644\u0645\u0633\u0627\u0639\u062f\u0647","rich_text_area":"\u0645\u0646\u0637\u0642\u0629 \u0627\u0644\u062a\u0639\u062f\u064a\u0644\u0627\u062a","shortcuts_desc":"Accessability Help",toolbar:"\u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ar_dlg.js
new file mode 100644
index 000000000..6cfc8ad59
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.advanced_dlg',{"link_list":"\u0642\u0627\u0626\u0645\u0647 \u0627\u0644\u0648\u0635\u0644\u0627\u062a","link_is_external":"\u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u064a\u0628\u062f\u0648 \u0631\u0627\u0628\u0637 \u062e\u0627\u0631\u062c\u064a \u060c \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0628\u0627\u062f\u0626\u0629 http:// \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629\u061f","link_is_email":"\u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u064a\u0628\u062f\u0648 \u0623\u0646 \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u060c \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0645\u064a\u0644\u062a\u0648 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 :\u061f \u0628\u0627\u062f\u0626\u0629","link_titlefield":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646","link_target_blank":"\u0641\u062a\u062d \u0627\u0644\u0631\u0627\u0628\u0637 \u0641\u0649 \u0646\u0627\u0641\u0630\u0647 \u062c\u062f\u064a\u062f\u0647","link_target_same":"\u0641\u062a\u062d \u0627\u0644\u0631\u0627\u0628\u0637 \u0641\u0649 \u0646\u0641\u0633 \u0627\u0644\u0646\u0627\u0641\u0630\u0647","link_target":"\u0627\u0644\u0647\u062f\u0641","link_url":"\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0648\u0635\u0644\u0647","link_title":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0648\u0635\u0644\u0647","image_align_right":"\u064a\u0645\u064a\u0646","image_align_left":"\u064a\u0633\u0627\u0631","image_align_textbottom":"\u0627\u0633\u0641\u0644 \u0627\u0644\u0646\u0635","image_align_texttop":"\u0627\u0644\u0646\u0635 \u0627\u0644\u0623\u0639\u0644\u0649","image_align_bottom":"\u0627\u0644\u0642\u0627\u0639","image_align_middle":"\u0627\u0644\u0623\u0648\u0633\u0637","image_align_top":"\u0627\u0644\u0623\u0639\u0644\u0649","image_align_baseline":"\u0627\u0644\u0623\u0633\u0627\u0633","image_align":"\u0645\u062d\u0627\u0630\u0627\u0629","image_hspace":"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0627\u0641\u0642\u064a\u0647","image_vspace":"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0639\u0645\u0648\u062f\u064a\u0647","image_dimensions":"\u0627\u0644\u0623\u0628\u0639\u0627\u062f","image_alt":"\u0648\u0635\u0641 \u0627\u0644\u0635\u0648\u0631\u0647","image_list":"\u0642\u0627\u0626\u0645\u0647 \u0627\u0644\u0635\u0648\u0631","image_border":"\u0627\u0644\u062d\u062f\u0648\u062f","image_src":"\u0631\u0627\u0628\u0637 \u0627\u0644\u0635\u0648\u0631\u0647","image_title":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0635\u0648\u0631\u0629","charmap_title":"\u0627\u062e\u062a\u064a\u0627\u0631 \u062d\u0631\u0641 \u0645\u062e\u0635\u0635","colorpicker_name":"\u0627\u0633\u0645:","colorpicker_color":"\u0627\u0644\u0644\u0648\u0646 :","colorpicker_named_title":"\u0627\u0644\u0623\u0644\u0648\u0627\u0646 \u0627\u0644\u0645\u0633\u0645\u0627\u0629","colorpicker_named_tab":"\u0627\u0644\u0645\u0633\u0645\u0627\u0629","colorpicker_palette_title":"\u0644\u0648\u062d \u0627\u0644\u0623\u0644\u0648\u0627\u0646","colorpicker_palette_tab":"\u0644\u0648\u062d","colorpicker_picker_title":"\u0643\u0627\u0634\u0641 \u0627\u0644\u0644\u0648\u0646","colorpicker_picker_tab":"\u0627\u0644\u0643\u0627\u0634\u0641","colorpicker_title":"\u0627\u062e\u062a\u0631 \u0627\u0644\u0644\u0648\u0646","code_wordwrap":"\u0627\u0644\u062a\u0641\u0627\u0641 \u0627\u0644\u0646\u0635","code_title":"\u062a\u0639\u062f\u064a\u0644 \u0627 \u0644\u0634\u064a\u0641\u0631\u0647 \u0627\u0644\u0628\u0631\u0645\u062c\u064a\u0647","anchor_name":"\u0627\u0633\u0645 \u0627\u0644\u0645\u0631\u0633\u0627\u0647","anchor_title":"\u0625\u062f\u0631\u0627\u062c / \u062a\u062d\u0631\u064a\u0631 \u0645\u0631\u0633\u0627\u0629","about_loaded":"\u0627\u0644\u0627\u0636\u0627\u0641\u0627\u062a \u0627\u0644\u0645\u062d\u0645\u0644\u0647","about_version":"\u0627\u0644\u0627\u0635\u062f\u0627\u0631","about_author":"\u0627\u0644\u0643\u0627\u062a\u0628","about_plugin":"\u0627\u0644\u0645\u0648\u0642\u0639","about_plugins":"\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062a","about_license":"\u0627\u0644\u062a\u0631\u062e\u064a\u0635","about_help":"\u0645\u0633\u0627\u0639\u062f\u0647","about_general":"\u0639\u0646","about_title":"\u0639\u0646 \u0627\u0644\u0645\u062d\u0631\u0631","charmap_usage":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u0633\u0647\u0645 \u0627\u0644\u0623\u064a\u0645\u0646 \u0648\u0627\u0644\u0623\u064a\u0633\u0631 \u0644\u0644\u062a\u0646\u0642\u0644.","anchor_invalid":"\u0627\u0644\u0631\u062c\u0627\u0621 \u062a\u062d\u062f\u064a\u062f \u0625\u0633\u0645 \u064a\u0635\u0644\u062d \u0644\u0644\u0645\u0631\u0633\u0627\u0647","accessibility_help":"\u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0627\u0644\u0648\u0635\u0648\u0644","accessibility_usage_title":"\u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0639\u0627\u0645","invalid_color_value":"\u0642\u064a\u0645\u0647 \u062e\u0637\u0623 \u0644\u0644\u0648\u0646"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/az.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/az.js
new file mode 100644
index 000000000..1edbec24d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/az.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.advanced',{"underline_desc":"Altdan x\u0259tt (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Yar\u0131qal\u0131n (Ctrl+B)",dd:"Terminin m\u00fc\u0259yy\u0259n edilm\u0259si",dt:"M\u00fc\u0259yy\u0259n edil\u0259n termin",samp:"Kod n\u00fcmun\u0259si",code:"Kod",blockquote:"Sitat bloku",h6:"Ba\u015fl\u0131q 6",h5:"Ba\u015fl\u0131q 5",h4:"Ba\u015fl\u0131q 4",h3:"Ba\u015fl\u0131q 3",h2:"Ba\u015fl\u0131q 2",h1:"Ba\u015fl\u0131q 1",pre:"Formatlanm\u0131\u015f m\u0259tn",address:"\u00dcnvan",div:"B\u00f6lm\u0259",paragraph:"Abzas",block:"Format",fontdefault:"\u015erift","font_size":"\u015erift \u00f6l\u00e7\u00fc\u015f\u00fc","style_select":"Still\u0259r","image_delta_width":"65","more_colors":"Daha \u00e7ox r\u0259ng","toolbar_focus":"Alt+Q - al\u0259t d\u00fcym\u0259l\u0259rin\u0259 ke\u00e7, Alt-Z - redaktoruna ke\u00e7, Alt-X - elementl\u0259r yoluna ke\u00e7",newdocument:"\u0130\u00e7ind\u0259kil\u0259ri tam t\u0259mizl\u0259m\u0259kd\u0259 \u0259minsiniz?",path:"Yol","clipboard_msg":"Kopyalama/\u018flav\u0259 et Mozilla v\u0259 Firefox-da i\u015fl\u0259mir.\nN\u0259 ba\u015f verdiyi haqda daha \u0259trafl\u0131 \u00f6yr\u0259nm\u0259k ist\u0259yirsiniz?","blockquote_desc":"Sitat bloku","help_desc":"K\u00f6m\u0259k","newdocument_desc":"Yeni s\u0259n\u0259d","image_props_desc":"\u015e\u0259kil x\u00fcsusiyy\u0259ti","paste_desc":"\u018flav\u0259 et","copy_desc":"Kopyala","cut_desc":"K\u0259s","anchor_desc":"L\u00f6vb\u0259r \u0259lav\u0259/redakt\u0259 et","visualaid_desc":"G\u00f6nd\u0259ril\u0259n/g\u00f6r\u00fcnm\u0259z elementl\u0259ri yand\u0131r/s\u00f6nd\u00fcr","charmap_desc":"X\u00fcsusi simvol \u0259lav\u0259 et","backcolor_desc":"Fonun r\u0259ngini se\u00e7","forecolor_desc":"M\u0259tnin r\u0259ngini se\u00e7","custom1_desc":"\u00d6z t\u0259svirinizi daxil edin","removeformat_desc":"Formatlaman\u0131 l\u0259\u011fv et","hr_desc":"\u00dcf\u00fcqi x\u0259tt \u0259lav\u0259 et","sup_desc":"Yuxar\u0131 indeks","sub_desc":"A\u015fa\u011f\u0131 indeks","code_desc":"HTML-m\u0259nb\u0259ni redakt\u0259 et","cleanup_desc":"\u018fyri kodu t\u0259mizl\u0259","image_desc":"\u018flav\u0259 et/\u015f\u0259kili redakt\u0259 et","unlink_desc":"Ke\u00e7idi sil","link_desc":"\u018flav\u0259 et/ke\u00e7idi redakt\u0259 et","redo_desc":"T\u0259krarla (Ctrl+Y)","undo_desc":"L\u0259\u011fv et (Ctrl+Z)","indent_desc":"Bo\u015f yeri b\u00f6y\u00fct","outdent_desc":"Bo\u015f yeri ki\u00e7ilt","numlist_desc":"N\u00f6mr\u0259l\u0259nmi\u015f siyah\u0131","bullist_desc":"Qeyd edilmi\u015f siyah\u0131","justifyfull_desc":"Enin\u0259 d\u00fczl\u0259ndir","justifyright_desc":"Sa\u011fdan d\u00fczl\u0259ndir","justifycenter_desc":"M\u0259rk\u0259z\u0259 d\u00fczl\u0259ndir","justifyleft_desc":"Soldan d\u00fczl\u0259ndir","striketrough_desc":"Qaralanm\u0131\u015f","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/az_dlg.js
new file mode 100644
index 000000000..de9a2f46a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.advanced_dlg',{"link_list":"Ke\u00e7idl\u0259r siyah\u0131s\u0131","link_is_external":"Daxil edil\u0259n \u00fcnvan xarici ke\u00e7id\u0259 b\u0259nz\u0259yir. http:// prefiksini \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?","link_is_email":"Daxil edil\u0259n \u00fcnvan e-po\u00e7ta b\u0259nz\u0259yir. mailto: prefiksini \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?","link_titlefield":"Ad\u0131","link_target_blank":"Ke\u00e7idi yeni p\u0259nc\u0259r\u0259d\u0259 a\u00e7","link_target_same":"Ke\u00e7idi h\u0259min p\u0259nc\u0259r\u0259d\u0259 a\u00e7","link_target":"H\u0259d\u0259f","link_url":"Ke\u00e7id \u00fcnvan\u0131","link_title":"Ke\u00e7idi \u0259lav\u0259/redakt\u0259 et","image_align_right":"Sa\u011fa","image_align_left":"Sola","image_align_textbottom":"M\u0259tn a\u015fa\u011f\u0131s\u0131 \u00fczr\u0259","image_align_texttop":"M\u0259tn yuxar\u0131s\u0131 il\u0259","image_align_bottom":"A\u015fa\u011f\u0131 il\u0259","image_align_middle":"M\u0259rk\u0259z il\u0259","image_align_top":"Yuxar\u0131 il\u0259","image_align_baseline":"Bazis liniyas\u0131 \u00fczr\u0259","image_align":"Tarazla\u015fd\u0131r","image_hspace":"\u00dcf\u00fcqi f\u0259za","image_vspace":"\u015eaquli f\u0259za","image_dimensions":"\u00d6l\u00e7\u00fcl\u0259r","image_alt":"\u015e\u0259klin t\u0259sviri","image_list":"\u015e\u0259kil siyah\u0131s\u0131","image_border":"S\u0259rh\u0259d","image_src":"\u015e\u0259klin \u00fcnvan\u0131","image_title":"\u015e\u0259kli \u0259lav\u0259/redakt\u0259 et","charmap_title":"X\u00fcsusi simvol se\u00e7in","colorpicker_name":"Ad\u0131:","colorpicker_color":"R\u0259ng:","colorpicker_named_title":"Adland\u0131r\u0131lm\u0131\u015f r\u0259ngl\u0259r","colorpicker_named_tab":"Adland\u0131r\u0131lm\u0131\u015f","colorpicker_palette_title":"Palitra r\u0259ngl\u0259ri","colorpicker_palette_tab":"Palitra","colorpicker_picker_title":"R\u0259ng se\u00e7imi","colorpicker_picker_tab":"Se\u00e7im","colorpicker_title":"R\u0259ngi se\u00e7","code_wordwrap":"S\u00f6zl\u0259rin s\u0259tr\u0259 ke\u00e7idi","code_title":"HTML-m\u0259nb\u0259 redaktoru","anchor_name":"L\u00f6vb\u0259r ad\u0131","anchor_title":"L\u00f6bv\u0259r \u0259lav\u0259/redakt\u0259 et","about_loaded":"Y\u00fckl\u0259nil\u0259n plaginl\u0259r","about_version":"Versiya","about_author":"M\u00fc\u0259llif","about_plugin":"Plaginl\u0259r","about_plugins":"Plaginl\u0259r","about_license":"Lisenziya","about_help":"K\u00f6m\u0259k","about_general":"Proqram haqq\u0131nda","about_title":"TinyMCE haqda","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/be.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/be.js
new file mode 100644
index 000000000..35785e035
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/be.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.advanced',{"underline_desc":"\u041f\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0456\u045e (Ctrl+I)","bold_desc":"\u0422\u043b\u0443\u0441\u0442\u044b (Ctrl B)",dd:"\u0410\u0437\u043d\u0430\u0447\u044d\u043d\u043d\u0435 \u0442\u044d\u0440\u043c\u0456\u043d\u0430",dt:"\u0412\u044b\u0437\u043d\u0430\u0447\u0430\u0435\u043c\u044b \u0442\u044d\u0440\u043c\u0456\u043d",samp:"\u041f\u0440\u044b\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0430",code:"\u041a\u043e\u0434",blockquote:"\u0426\u044b\u0442\u0430\u0442\u0430",h6:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 6",h5:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 5",h4:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 4",h3:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 3",h2:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 2",h1:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 1",pre:"\u0410\u0434\u0444\u0430\u0440\u043c\u0430\u0442\u0430\u0432\u0430\u043d\u044b \u0442\u044d\u043a\u0441\u0442",address:"\u0410\u0434\u0440\u0430\u0441",div:"DIV",paragraph:"\u0410\u0431\u0437\u0430\u0446",block:"\u0424\u0430\u0440\u043c\u0430\u0442",fontdefault:"\u0428\u0440\u044b\u0444\u0442","font_size":"\u041f\u0430\u043c\u0435\u0440 \u0448\u0440\u044b\u0444\u0442\u0430","style_select":"\u0421\u0442\u044b\u043b\u044c","more_colors":"\u0406\u043d\u0448\u044b\u044f \u043a\u043e\u043b\u0435\u0440\u044b...","toolbar_focus":"\u041f\u0435\u0440\u0430\u0439\u0441\u0446\u0456 \u0434\u0430 \u043f\u0430\u043d\u044d\u043b\u0456 \u043a\u043d\u043e\u043f\u0430\u043a - Alt Q, \u041f\u0435\u0440\u0430\u0439\u0441\u0446\u0456 \u0434\u0430 \u0440\u044d\u0434\u0430\u043a\u0442\u0430\u0440\u0430 - Alt-Z, \u041f\u0435\u0440\u0430\u0439\u0441\u0446\u0456 \u0434\u0430 \u0448\u043b\u044f\u0445\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 - Alt-X",newdocument:"\u0412\u044b \u045e\u043f\u044d\u045e\u043d\u0435\u043d\u044b\u044f, \u0448\u0442\u043e \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0430\u0447\u044b\u0441\u0446\u0456\u0446\u044c \u0443\u0441\u0451 \u0437\u043c\u0435\u0441\u0446\u0456\u0432\u0430?",path:"\u0422\u044d\u0433\u0456","clipboard_msg":"\u041a\u0430\u043f\u0456\u0440\u0430\u0432\u0430\u043d\u043d\u0435, \u0432\u044b\u0440\u0430\u0437\u043a\u0430 \u0456 \u0443\u0441\u0442\u0430\u045e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0430\u0446\u0443\u044e\u0446\u044c \u045e Mozilla \u0456 Firefox. \u0416\u0430\u0434\u0430\u0435\u0446\u0435 \u0430\u0442\u0440\u044b\u043c\u0430\u0446\u044c \u0431\u043e\u043b\u044c\u0448 \u043f\u0430\u0434\u0440\u0430\u0431\u044f\u0437\u043d\u0443\u044e \u0456\u043d\u0444\u0430\u0440\u043c\u0430\u0446\u044b\u044e?","blockquote_desc":"\u0411\u043b\u043e\u043a \u0446\u044b\u0442\u0430\u0442\u044b","help_desc":"\u0414\u0430\u043f\u0430\u043c\u043e\u0433\u0430","newdocument_desc":"\u041d\u043e\u0432\u044b \u0434\u0430\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u043c\u0430\u043b\u044e\u043d\u043a\u0430","paste_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c","copy_desc":"\u041a\u0430\u043f\u0456\u0440\u0430\u0432\u0430\u0446\u044c","cut_desc":"\u0412\u044b\u0440\u0430\u0437\u0430\u0446\u044c","anchor_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u044f\u043a\u0430\u0440","visualaid_desc":"\u0423\u043b\u0443\u0447\u044b\u0446\u044c/\u0432\u044b\u043a\u043b\u044e\u0447\u044b\u0446\u044c \u043d\u0430\u043a\u0456\u0440\u0430\u0432\u0430\u043b\u044c\u043d\u044b\u044f/\u043d\u044f\u0431\u0430\u0447\u043d\u044b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b","charmap_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0430\u0434\u043c\u044b\u0441\u043b\u043e\u0432\u044b \u0437\u043d\u0430\u043a","backcolor_desc":"\u0410\u0431\u0440\u0430\u0446\u044c \u043a\u043e\u043b\u0435\u0440 \u0444\u043e\u043d\u0443","forecolor_desc":"\u0410\u0431\u0440\u0430\u0446\u044c \u043a\u043e\u043b\u0435\u0440 \u0442\u044d\u043a\u0441\u0442\u0443","custom1_desc":"\u0423\u0432\u044f\u0434\u0437\u0456\u0446\u0435 \u0432\u0430\u0448\u0430 \u0430\u043f\u0456\u0441\u0430\u043d\u043d\u0435","removeformat_desc":"\u0410\u0447\u044b\u0441\u0446\u0456\u0446\u044c \u0444\u0430\u0440\u043c\u0430\u0442\u0430\u0432\u0430\u043d\u043d\u0435","hr_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0433\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u043b\u0456\u043d\u0456\u044e","sup_desc":"\u041d\u0430\u0434\u0440\u0430\u0434\u043a\u043e\u0432\u044b","sub_desc":"\u041f\u0430\u0434\u0440\u0430\u0434\u043a\u043e\u0432\u044b","code_desc":"\u0420\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c HTML-\u0437\u044b\u0445\u043e\u0434\u043d\u0456\u043a","cleanup_desc":"\u041f\u0430\u0447\u044b\u0441\u0446\u0456\u0446\u044c \u0431\u0440\u0443\u0434\u043d\u044b \u043a\u043e\u0434","image_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0430\u043b\u044e\u043d\u0430\u043a","unlink_desc":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","link_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","redo_desc":"\u041f\u0430\u045e\u0442\u0430\u0440\u044b\u0446\u044c (Ctrl+Y)","undo_desc":"\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c (Ctrl+Z)","indent_desc":"\u041f\u0430\u0432\u044f\u043b\u0456\u0447\u044b\u0446\u044c \u0432\u043e\u0434\u0441\u0442\u0443\u043f","outdent_desc":"\u041f\u0430\u043c\u0435\u043d\u0448\u044b\u0446\u044c \u0432\u043e\u0434\u0441\u0442\u0443\u043f","numlist_desc":"\u041d\u0443\u043c\u0430\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441","bullist_desc":"\u041c\u0430\u0440\u043a\u0456\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441","justifyfull_desc":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435 \u043f\u0430 \u0448\u044b\u0440\u044b\u043d\u0456","justifyright_desc":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u0430","justifycenter_desc":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435 \u043f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","justifyleft_desc":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435 \u043d\u0430\u043b\u0435\u0432\u0430","striketrough_desc":"\u041f\u0435\u0440\u0430\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","help_shortcut":"\u041d\u0430\u0446\u0456\u0441\u043d\u0456\u0446\u0435 ALT-F10 \u0434\u043b\u044f \u043f\u0430\u043d\u044d\u043b\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u045e. \u041d\u0430\u0446\u0456\u0441\u043d\u0456\u0446\u0435 ALT-0 \u0434\u043b\u044f \u0434\u0430\u0432\u0435\u0434\u043a\u0456.","rich_text_area":"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u044b \u0440\u044d\u0434\u0430\u043a\u0442\u0430\u0440","shortcuts_desc":"\u0414\u0430\u043f\u0430\u043c\u043e\u0433\u0430 \u043f\u0430 \u0434\u0430\u0441\u0442\u0443\u043f\u043d\u0430\u0441\u0446\u0456",toolbar:"\u041f\u0430\u043d\u044d\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u045e","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/be_dlg.js
new file mode 100644
index 000000000..92c90df43
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.advanced_dlg',{"link_list":"\u0421\u043f\u0456\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a","link_is_external":"\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 \u0432\u043e\u043d\u043a\u0430\u0432\u0443\u044e \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443, \u0432\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043f\u0440\u044d\u0444\u0456\u043a\u0441 http://?","link_is_email":"\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 email, \u0432\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043f\u0440\u044d\u0444\u0456\u043a\u0441 mailto:?","link_titlefield":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a","link_target_blank":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443 \u045e \u043d\u043e\u0432\u044b\u043c \u0430\u043a\u043d\u0435","link_target_same":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443 \u045e \u0442\u044b\u043c \u0436\u0430 \u0430\u043a\u043d\u0435","link_target":"\u041c\u044d\u0442\u0430","link_url":"\u0410\u0434\u0440\u0430\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456","link_title":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","image_align_right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u0440\u0430\u0456","image_align_left":"\u041f\u0430 \u043b\u0435\u0432\u044b\u043c \u043a\u0440\u0430\u0456","image_align_textbottom":"\u041f\u0430 \u043d\u0456\u0437\u0435 \u0442\u044d\u043a\u0441\u0442\u0443","image_align_texttop":"\u041f\u0430 \u0432\u0435\u0440\u0441\u0435 \u0442\u044d\u043a\u0441\u0442\u0443","image_align_bottom":"\u041f\u0430 \u043d\u0456\u0437\u0435","image_align_middle":"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","image_align_top":"\u041f\u0430 \u0432\u0435\u0440\u0441\u0435","image_align_baseline":"\u041f\u0430 \u0431\u0430\u0437\u0456\u0441\u043d\u0430\u0439 \u043b\u0456\u043d\u0456\u0456","image_align":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435","image_hspace":"\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b \u0432\u043e\u0434\u0441\u0442\u0443\u043f","image_vspace":"\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u044b \u0432\u043e\u0434\u0441\u0442\u0443\u043f","image_dimensions":"\u041f\u0430\u043c\u0435\u0440","image_alt":"\u0410\u043f\u0456\u0441\u0430\u043d\u043d\u0435 \u043c\u0430\u043b\u044e\u043d\u043a\u0430","image_list":"\u0421\u043f\u0456\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430\u045e","image_border":"\u041c\u044f\u0436\u0430","image_src":"\u0410\u0434\u0440\u0430\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430","image_title":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0430\u043b\u044e\u043d\u0430\u043a","charmap_title":"\u0410\u0431\u044f\u0440\u044b\u0446\u0435 \u0430\u0434\u043c\u044b\u0441\u043b\u043e\u0432\u044b \u0437\u043d\u0430\u043a","colorpicker_name":"\u041d\u0430\u0437\u043e\u045e:","colorpicker_color":"\u041a\u043e\u043b\u0435\u0440:","colorpicker_named_title":"\u041d\u0430\u0439\u043c\u0435\u043d\u043d\u044b\u044f \u043a\u043e\u043b\u0435\u0440\u044b","colorpicker_named_tab":"\u041d\u0430\u0439\u043c\u0435\u043d\u043d\u044b","colorpicker_palette_title":"\u041a\u043e\u043b\u0435\u0440\u044b \u043f\u0430\u043b\u0456\u0442\u0440\u044b","colorpicker_palette_tab":"\u041f\u0430\u043b\u0456\u0442\u0440\u0430","colorpicker_picker_title":"\u0412\u044b\u0431\u0430\u0440 \u043a\u043e\u043b\u0435\u0440\u0443","colorpicker_picker_tab":"\u0412\u044b\u0431\u0430\u0440","colorpicker_title":"\u0410\u0431\u044f\u0440\u044b\u0446\u0435 \u043a\u043e\u043b\u0435\u0440","code_wordwrap":"\u041f\u0435\u0440\u0430\u043d\u043e\u0441 \u0441\u043b\u043e\u045e","code_title":"\u0420\u044d\u0434\u0430\u043a\u0442\u0430\u0440 HTML-\u0437\u044b\u0445\u043e\u0434\u043d\u0456\u043a\u0430","anchor_name":"\u0406\u043c\u044f \u044f\u043a\u0430\u0440\u0430","anchor_title":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0420\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u044f\u043a\u0430\u0440","about_loaded":"\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u043d\u044b\u044f \u043f\u043b\u0430\u0433\u0456\u043d\u044b","about_version":"\u0412\u0435\u0440\u0441\u0456\u044f","about_author":"\u0410\u045e\u0442\u0430\u0440","about_plugin":"\u041f\u043b\u0430\u0433\u0456\u043d","about_plugins":"\u041f\u043b\u0430\u0433\u0456\u043d\u044b","about_license":"\u041b\u0456\u0446\u044d\u043d\u0437\u0456\u044f","about_help":"\u0414\u0430\u043f\u0430\u043c\u043e\u0433\u0430","about_general":"\u0410\u0431 \u043f\u0440\u0430\u0433\u0440\u0430\u043c\u0435","about_title":"\u0410\u0431 TinyMCE","charmap_usage":"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u043e\u045e\u0432\u0430\u0439\u0446\u0435 \u043a\u043b\u0430\u0432\u0456\u0448\u044b \"\u041d\u0430\u043b\u0435\u0432\u0430\" \u0456 \"\u041d\u0430\u043f\u0440\u0430\u0432\u0430\" \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u044b\u0456.","anchor_invalid":"\u041a\u0430\u043b\u0456 \u043b\u0430\u0441\u043a\u0430, \u043f\u0430\u0437\u043d\u0430\u0447\u0446\u0435 \u043a\u0430\u0440\u044d\u043a\u0442\u043d\u0430\u0435 \u0456\u043c\u044f \u044f\u043a\u0430\u0440\u0443.","accessibility_help":"\u0414\u0430\u0441\u0442\u0443\u043f\u043d\u0430\u0441\u0446\u044c \u0434\u0430\u043f\u0430\u043c\u043e\u0433\u0456","accessibility_usage_title":"\u0410\u0433\u0443\u043b\u044c\u043d\u0430\u0435 \u0432\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u043e\u045e\u0432\u0430\u043d\u043d\u0435","invalid_color_value":"\u041d\u044f\u043f\u0440\u0430\u0432\u0456\u043b\u044c\u043d\u0430\u0435 \u0437\u043d\u0430\u0447\u044d\u043d\u043d\u0435 \u043a\u043e\u043b\u0435\u0440\u0443"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bg.js
new file mode 100644
index 000000000..6587c7391
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.advanced',{"underline_desc":"\u041f\u043e\u0434\u0447\u0435\u0440\u0442\u0430\u043d (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u041f\u043e\u043b\u0443\u0447\u0435\u0440 (Ctrl+B)",dd:"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0434\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u044f",dt:"\u0414\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u044f ",samp:"\u041f\u0440\u043e\u043c\u0435\u0440\u0435\u043d \u043a\u043e\u0434",code:"\u041a\u043e\u0434",blockquote:"\u0426\u0438\u0442\u0430\u0442",h6:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 6",h5:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 5",h4:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 4",h3:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 3",h2:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 2",h1:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 1",pre:"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d",address:"\u0410\u0434\u0440\u0435\u0441",div:"Div",paragraph:"\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444",block:"\u0424\u043e\u0440\u043c\u0430\u0442",fontdefault:"\u0428\u0440\u0438\u0444\u0442","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430","style_select":"\u0421\u0442\u0438\u043b\u043e\u0432\u0435","anchor_delta_height":"","more_colors":"\u041e\u0449\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u0435","toolbar_focus":"\u041e\u0442\u0438\u0434\u0438 \u043f\u0440\u0438 \u0431\u0443\u0442\u043e\u043d\u0438\u0442\u0435 - Alt+Q, \u041e\u0442\u0438\u0434\u0438 \u043f\u0440\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 - Alt-Z, \u041e\u0442\u0438\u0434\u0438 \u043f\u0440\u0438 \u043f\u044a\u0442\u0435\u043a\u0430\u0442\u0430 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0442\u0435 - Alt-X",newdocument:"\u0421\u0438\u0433\u0443\u0440\u0435\u043d \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u0438\u0437\u0447\u0438\u0441\u0442\u0438\u0442\u0435 \u0446\u044f\u043b\u043e\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435?",path:"\u041f\u044a\u0442","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435/\u041e\u0442\u0440\u044f\u0437\u0432\u0430\u043d\u0435/\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0435 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u043d\u043e \u043f\u043e\u0434 Mozilla \u0438 Firefox.\n\u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430?","blockquote_desc":"\u0426\u0438\u0442\u0430\u0442","help_desc":"\u041f\u043e\u043c\u043e\u0449","newdocument_desc":"\u041d\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0442\u0430","paste_desc":"\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435","copy_desc":"\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435","cut_desc":"\u0418\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435","anchor_desc":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043a\u043e\u0442\u0432\u0430","visualaid_desc":"\u0412\u043a\u043b./\u0438\u0437\u043a\u043b. \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0438\u0442\u0435 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438","charmap_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0441\u0438\u043c\u0432\u043e\u043b","backcolor_desc":"\u0418\u0437\u0431\u0435\u0440\u0438 \u0446\u0432\u044f\u0442 \u043d\u0430 \u0444\u043e\u043d\u0430","forecolor_desc":"\u0418\u0437\u0431\u0435\u0440\u0438 \u0446\u0432\u044f\u0442 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430","custom1_desc":"\u0412\u0430\u0448\u0435\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0443\u043a","removeformat_desc":"\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435\u0442\u043e","hr_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043b\u0438\u043d\u0438\u044f","sup_desc":"\u0413\u043e\u0440\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441","sub_desc":"\u0414\u043e\u043b\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441","code_desc":"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 HTML","cleanup_desc":"\u0418\u0437\u0447\u0438\u0441\u0442\u0438 \u043a\u043e\u0434\u0430","image_desc":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435/\u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","unlink_desc":"\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","link_desc":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435/\u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","redo_desc":"\u0412\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 (Ctrl+Y)","undo_desc":"\u041e\u0442\u043c\u044f\u043d\u0430 (Ctrl+Z)","indent_desc":"\u0423\u0432\u0435\u043b\u0438\u0447\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0441\u0442\u044a\u043f\u0430","outdent_desc":"\u041d\u0430\u043c\u0430\u043b\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0441\u0442\u044a\u043f\u0430","numlist_desc":"\u041d\u043e\u043c\u0435\u0440\u0430","bullist_desc":"\u0412\u043e\u0434\u0430\u0447\u0438","justifyfull_desc":"\u0414\u0432\u0443\u0441\u0442\u0440\u0430\u043d\u043d\u043e","justifyright_desc":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043e\u0442\u0434\u044f\u0441\u043d\u043e","justifycenter_desc":"\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u043d\u043e","justifyleft_desc":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043e\u0442\u043b\u044f\u0432\u043e","striketrough_desc":"\u0417\u0430\u0447\u0435\u0440\u0442\u0430\u043d","help_shortcut":"\u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 ALT-F10 \u0437\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 ALT-0 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449","rich_text_area":"\u0417\u043e\u043d\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d \u0442\u0435\u043a\u0441\u0442","shortcuts_desc":"\u0417\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e Help",toolbar:"\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bg_dlg.js
new file mode 100644
index 000000000..7df3449c6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.advanced_dlg',{"link_list":"\u0421\u043f\u0438\u0441\u044a\u043a \u043b\u0438\u043d\u043a\u043e\u0432\u0435","link_is_external":"URL-\u0442\u043e \u043a\u043e\u0435\u0442\u043e \u0432\u044a\u0432\u0435\u0434\u043e\u0445\u0442\u0435 \u0435 \u0432\u044a\u043d\u0448\u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430, \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u0438\u044f\u0442 http:// \u043f\u0440\u0435\u0444\u0438\u043a\u0441?","link_is_email":"URL-\u0442\u043e \u043a\u043e\u0435\u0442\u043e \u0432\u044a\u0432\u0435\u0434\u043e\u0445\u0442\u0435 \u0435 email \u0430\u0434\u0440\u0435\u0441, \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u0438\u044f\u0442 mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441?","link_titlefield":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435","link_target_blank":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0432 \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446","link_target_same":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0432 \u0441\u044a\u0449\u0438\u044f\u0442 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446","link_target":"\u0426\u0435\u043b","link_url":"URL \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","link_title":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","image_align_right":"\u0414\u044f\u0441\u043d\u043e","image_align_left":"\u041b\u044f\u0432\u043e","image_align_textbottom":"\u0422\u0435\u043a\u0441\u0442 \u0434\u043e\u043b\u0443","image_align_texttop":"\u0422\u0435\u043a\u0441\u0442 \u0433\u043e\u0440\u0435","image_align_bottom":"\u0414\u043e\u043b\u0443","image_align_middle":"\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u043d\u0435","image_align_top":"\u0413\u043e\u0440\u0435","image_align_baseline":"\u0411\u0430\u0437\u043e\u0432\u0430 \u043b\u0438\u043d\u0438\u044f","image_align":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","image_hspace":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u0440\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435","image_vspace":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u0440\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435","image_dimensions":"\u0420\u0430\u0437\u043c\u0435\u0440\u0438","image_alt":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","image_list":"\u0421\u043f\u0438\u0441\u044a\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438","image_border":"\u0420\u0430\u043c\u043a\u0430","image_src":"URL \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","image_title":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","charmap_title":"\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0441\u0438\u043c\u0432\u043e\u043b","colorpicker_name":"\u0418\u043c\u0435:","colorpicker_color":"\u0426\u0432\u044f\u0442:","colorpicker_named_title":"\u0418\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0438 \u0446\u0432\u0435\u0442\u043e\u0432\u0435","colorpicker_named_tab":"\u0418\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0438","colorpicker_palette_title":"\u0426\u0432\u0435\u0442\u043e\u0432\u0430 \u043f\u0430\u043b\u0438\u0442\u0440\u0430","colorpicker_palette_tab":"\u041f\u0430\u043b\u0438\u0442\u0440\u0430","colorpicker_picker_title":"\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u0446\u0432\u044f\u0442","colorpicker_picker_tab":"\u0418\u0437\u0431\u043e\u0440","colorpicker_title":"\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0446\u0432\u044f\u0442","code_wordwrap":"\u041f\u0440\u0435\u043d\u043e\u0441 \u043d\u0430 \u0434\u0443\u043c\u0438","code_title":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0430 HTML","anchor_name":"\u0418\u043c\u0435 \u043d\u0430 \u043a\u043e\u0442\u0432\u0430\u0442\u0430","anchor_title":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043a\u043e\u0442\u0432\u0430","about_loaded":"\u0417\u0430\u0440\u0435\u0434\u0435\u043d\u0438 \u0434\u043e\u0431\u0430\u0432\u043a\u0438","about_version":"\u0412\u0435\u0440\u0441\u0438\u044f","about_author":"\u0410\u0432\u0442\u043e\u0440","about_plugin":"\u0414\u043e\u0431\u0430\u0432\u043a\u0430","about_plugins":"\u0414\u043e\u0431\u0430\u0432\u043a\u0438","about_license":"\u041b\u0438\u0446\u0435\u043d\u0437","about_help":"\u041f\u043e\u043c\u043e\u0449","about_general":"\u041e\u0442\u043d\u043e\u0441\u043d\u043e","about_title":"\u041e\u0442\u043d\u043e\u0441\u043d\u043e TinyMCE","charmap_usage":"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438\u0442\u0435 \u043d\u0430\u043b\u044f\u0432\u043e \u0438 \u043d\u0430\u0434\u044f\u0441\u043d\u043e, \u0437\u0430 \u0434\u0430 \u043d\u0430\u0432\u0438\u0433\u0438\u0440\u0430\u0442\u0435.","anchor_invalid":"\u041c\u043e\u043b\u044f \u0437\u0430\u0434\u0430\u0439\u0442\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0438\u043c\u0435 \u0437\u0430 \u043a\u043e\u0442\u0432\u0430.","accessibility_help":"\u041f\u043e\u043c\u043e\u0449 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f\u043d\u043e\u0441\u0442","accessibility_usage_title":"\u041e\u0431\u0449\u0430 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0430","invalid_color_value":"\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442 \u0437\u0430 \u0446\u0432\u044f\u0442"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bn.js
new file mode 100644
index 000000000..3b2e4f858
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bn_dlg.js
new file mode 100644
index 000000000..6be9a341b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/br.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/br.js
new file mode 100644
index 000000000..f73f53c72
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/br.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.advanced',{"underline_desc":"Sublinhado (Ctrl+U)","italic_desc":"It\u00e1lico (Ctrl+I)","bold_desc":"Negrito (Ctrl+B)",dd:"Descri\u00e7\u00e3o de defini\u00e7\u00e3o",dt:"Termo de defini\u00e7\u00e3o",samp:"Amostra de c\u00f3digo",code:"C\u00f3digo",blockquote:"Cita\u00e7\u00e3o em bloco",h6:"Cabe\u00e7alho 6",h5:"Cabe\u00e7alho 5",h4:"Cabe\u00e7alho 4",h3:"Cabe\u00e7alho 3",h2:"Cabe\u00e7alho 2",h1:"Cabe\u00e7alho 1",pre:"Pr\u00e9-formatado",address:"Endere\u00e7o",div:"Div",paragraph:"Par\u00e1grafo",block:"Formata\u00e7\u00e3o",fontdefault:"Fam\u00edlia(Fonte)","font_size":"Tamanho","style_select":"Estilos","more_colors":"Mais cores","toolbar_focus":"Ir para ferramentas - Alt+Q, Ir para o editor - Alt-Z, Ir para endere\u00e7o do elemento - Alt-X",newdocument:"Tem certeza de que deseja apagar tudo?",path:"Endere\u00e7o","clipboard_msg":"Copiar/cortar/colar n\u00e3o est\u00e1 dispon\u00edvel no Mozilla e Firefox. Deseja obter mais informa\u00e7\u00f5es sobre isso?","blockquote_desc":"Cita\u00e7\u00e3o em bloco","help_desc":"Ajuda","newdocument_desc":"Novo documento","image_props_desc":"Propriedades de imagem","paste_desc":"Colar","copy_desc":"Copiar","cut_desc":"Cortar","anchor_desc":"Inserir/editar \u00e2ncora","visualaid_desc":"Alternar guias/elementos invis\u00edveis","charmap_desc":"Inserir caracteres especiais","backcolor_desc":"Selecionar cor de fundo","forecolor_desc":"Selecionar cor do texto","custom1_desc":"Insira aqui a sua descri\u00e7\u00e3o personalizada","removeformat_desc":"Remover formata\u00e7\u00e3o","hr_desc":"Inserir separador horizontal","sup_desc":"Superscrito","sub_desc":"Subscrito","code_desc":"Editar c\u00f3digo fonte","cleanup_desc":"Limpar c\u00f3digo incorreto","image_desc":"Inserir/editar imagem","unlink_desc":"Remover hyperlink","link_desc":"Inserir/editar hyperlink","redo_desc":"Refazer (Ctrl+Y)","undo_desc":"Desfazer (Ctrl+Z)","indent_desc":"Aumentar recuo","outdent_desc":"Diminuir recuo","numlist_desc":"Numera\u00e7\u00e3o","bullist_desc":"Marcadores","justifyfull_desc":"Justificar","justifyright_desc":"Alinhar \u00e0 direita","justifycenter_desc":"Centralizar","justifyleft_desc":"Alinhar \u00e0 esquerda","striketrough_desc":"Riscado","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/br_dlg.js
new file mode 100644
index 000000000..bcb26f1b7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.advanced_dlg',{"link_list":"Lista de Links","link_is_external":"A URL digitada parece conduzir a um link externo. Deseja acrescentar o (necess\u00e1rio) prefixo http://?","link_is_email":"A URL digitada parece ser um endere\u00e7o de e-mail. Deseja acrescentar o (necess\u00e1rio) prefixo mailto:?","link_titlefield":"T\u00edtulo","link_target_blank":"Abrir hyperlink em nova janela","link_target_same":"Abrir hyperlink na mesma janela","link_target":"Alvo","link_url":"URL do hyperink","link_title":"Inserir/editar hyperlink","image_align_right":"Direita","image_align_left":"Esquerda","image_align_textbottom":"Base do texto","image_align_texttop":"Topo do texto","image_align_bottom":"Abaixo","image_align_middle":"Meio","image_align_top":"Topo","image_align_baseline":"Sobre a linha de texto","image_align":"Alinhamento","image_hspace":"Espa\u00e7o Horizontal","image_vspace":"Espa\u00e7o Vertical","image_dimensions":"Dimens\u00f5es","image_alt":"Descri\u00e7\u00e3o da imagem","image_list":"Lista de imagens","image_border":"Limites","image_src":"Endere\u00e7o da imagem","image_title":"Inserir/editar imagem","charmap_title":"Selecionar caracteres personalizados","colorpicker_name":"Nome:","colorpicker_color":"Cor:","colorpicker_named_title":"Cores Personalizadas","colorpicker_named_tab":"Personalizadas","colorpicker_palette_title":"Paleta de Cores","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Editor de Cores","colorpicker_picker_tab":"Editor","colorpicker_title":"Seleccione uma cor","code_wordwrap":"Quebra autom\u00e1tica de linha","code_title":"Editor HTML","anchor_name":"Nome da \u00e2ncora","anchor_title":"Inserir/editar \u00e2ncora","about_loaded":"Plugins Instalados","about_version":"Vers\u00e3o","about_author":"Autor","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Licen\u00e7a","about_help":"Ajuda","about_general":"Sobre","about_title":"Sobre o TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bs.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bs.js
new file mode 100644
index 000000000..ae5081790
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.advanced',{"underline_desc":"Podcrtaj (Ctrl+U)","italic_desc":"Kurziv (Ctrl+I)","bold_desc":"Podebljaj (Ctrl+B)",dd:"Opis definicije",dt:"Definicija pojma",samp:"Primjer koda",code:"Kod",blockquote:"Citat",h6:"Naslov 6",h5:"Naslov 5",h4:"Naslov 4",h3:"Naslov 3",h2:"Naslov 2",h1:"Naslov 1",pre:"Oblikovano",address:"Adresa",div:"Div",paragraph:"Paragraf",block:"Format",fontdefault:"Vrsta pisma","font_size":"Veli\u010dina pisma","style_select":"Stilovi","more_colors":"Vi\u0161e boja","toolbar_focus":"Prije\u0111i na alatnu traku - Alt+Q, prije\u0111i na ure\u0111iva\u010d - Alt-Z, prije\u0111i na element path - Alt-X",newdocument:"Jeste li sigurni da \u017eelite izbrisati cijeli sadr\u017eaj?",path:"Staza","clipboard_msg":"Kopiraj/Izre\u017ei/Zalijepi nije dostupno u Mozilla i Firefox preglednicima. Vi\u0161e informacija?","blockquote_desc":"Citiraj","help_desc":"Pomo\u0107","newdocument_desc":"Novi dokument","image_props_desc":"Svojstva slike","paste_desc":"Zalijepi","copy_desc":"Kopiraj","cut_desc":"Izre\u017ei","anchor_desc":"Umetni/uredi sidro","visualaid_desc":"Vodilice/nevidljivi elementi","charmap_desc":"Umetni vlastiti znak","backcolor_desc":"Odaberite boju pozadine","forecolor_desc":"Odaberite boju teksta","custom1_desc":"Vlastiti opis ovdje","removeformat_desc":"Poni\u0161ti oblikovanje","hr_desc":"Umetni vodoravnu crtu","sup_desc":"Eksponent","sub_desc":"Indeks","code_desc":"Uredi HTML izvor","cleanup_desc":"Po\u010disti kod","image_desc":"Umetni/uredi sliku","unlink_desc":"Poni\u0161ti poveznicu","link_desc":"Umetni/uredi poveznicu","redo_desc":"Ponovi (Ctrl+Y)","undo_desc":"Poni\u0161ti (Ctrl+Z)","indent_desc":"Izvuci","outdent_desc":"Uvuci","numlist_desc":"Ure\u0111ena lista","bullist_desc":"Neure\u0111ena lista","justifyfull_desc":"Poravnaj potpuno","justifyright_desc":"Poravnaj desno","justifycenter_desc":"Centriraj","justifyleft_desc":"Poravnaj lijevo","striketrough_desc":"Precrtaj","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bs_dlg.js
new file mode 100644
index 000000000..d2fd3614d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.advanced_dlg',{"link_list":"Lista poveznica","link_is_external":"URL koji ste unijeli izgleda kao vanjska poveznica, \u017eelite li dodati potrebni http:// prefiks?","link_is_email":"URL koji ste unijeli izgleda kao e-mail adresa, \u017eelite li dodati potrebni mailto: prefiks?","link_titlefield":"Naslov","link_target_blank":"Otvori poveznicu u novom prozoru","link_target_same":"Otvori poveznicu u istom prozoru","link_target":"Meta","link_url":"URL poveznice","link_title":"Umetni/uredi poveznicu","image_align_right":"Desno","image_align_left":"Lijevo","image_align_textbottom":"Dno teksta","image_align_texttop":"Vrh teksta","image_align_bottom":"Dno","image_align_middle":"Sredina","image_align_top":"Vrh","image_align_baseline":"Osnovna linija","image_align":"Poravnavanje","image_hspace":"Vodoravni razmak","image_vspace":"Okomiti razmak","image_dimensions":"Dimenzije","image_alt":"Opis slike","image_list":"Lista slika","image_border":"Obrub","image_src":"URL slike","image_title":"Umetni/uredi sliku","charmap_title":"Odaberite znak","colorpicker_name":"Naziv:","colorpicker_color":"Boja:","colorpicker_named_title":"Imenovane boje","colorpicker_named_tab":"Imenovano","colorpicker_palette_title":"Paleta boja","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Odabir boje","colorpicker_picker_tab":"Odabir","colorpicker_title":"Izbor boje","code_wordwrap":"Omatanje teksta","code_title":"HTML ure\u0111iva\u010d","anchor_name":"Ime sidra","anchor_title":"Umetni/uredi sidro","about_loaded":"Postoje\u0107i dodaci","about_version":"Verzija","about_author":"Autor","about_plugin":"Dodatak","about_plugins":"Dodaci","about_license":"Licenca","about_help":"Pomo\u0107","about_general":"O programu","about_title":"TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ca.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ca.js
new file mode 100644
index 000000000..4e4be8e20
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ca.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.advanced',{"underline_desc":"Subratllat (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negreta (Ctrl+B)",dd:"Descripci\u00f3 de definici\u00f3",dt:"Terme de definici\u00f3 ",samp:"Mostra el Codi",code:"Codi",blockquote:"Citabloc",h6:"Encap\u00e7alament 6",h5:"Encap\u00e7alament 5",h4:"Encap\u00e7alament 4",h3:"Encap\u00e7alament 3",h2:"Encap\u00e7alament 2",h1:"Encap\u00e7alament 1",pre:"Preformatat",address:"Adre\u00e7a",div:"Capa",paragraph:"Par\u00e0graf",block:"Format",fontdefault:"Fam\u00edlia de font","font_size":"Mida de font","style_select":"Estils","more_colors":"M\u00e9s colors","toolbar_focus":"Salta als botons d\'eina - Alt Q, Salta a l\'editor - Alt-Z, Salta al cam\u00ed de l\'element - Alt-X",newdocument:"Esteu segur que voleu buidar tots els continguts?",path:"Cam\u00ed","clipboard_msg":"Copia/Retalla/Enganxa no es troba disponible ni al Mozilla ni al Firefox. Voleu m\u00e9s informaci\u00f3 sobre aix\u00f2?","blockquote_desc":"Citabloc","help_desc":"Ajuda","newdocument_desc":"Nou document","image_props_desc":"Propietats de la imatge","paste_desc":"Enganxa","copy_desc":"Copia","cut_desc":"Retalla","anchor_desc":"Insereix/edita \u00e0ncora","visualaid_desc":"Commuta elements guies/invisibles","charmap_desc":"Insereix un car\u00e0cter","backcolor_desc":"Selecci\u00f3 del color de fons","forecolor_desc":"Selecci\u00f3 del color de text","custom1_desc":"Aqu\u00ed la vostra pr\u00f2pia descripci\u00f3","removeformat_desc":"Elimina el format","hr_desc":"Insereix un filet horitzontal","sup_desc":"Super\u00edndex","sub_desc":"Sub\u00edndex","code_desc":"Edita el codi font HTML","cleanup_desc":"Poleix el codi","image_desc":"Insereix/edita imatge","unlink_desc":"Desenlla\u00e7a","link_desc":"Insereix/edita enlla\u00e7","redo_desc":"Ref\u00e9s (Ctrl+Y)","undo_desc":"Desf\u00e9s (Ctrl+Z)","indent_desc":"Augmenta el sagnat","outdent_desc":"Redueix el sagnat","numlist_desc":"Llista numerada","bullist_desc":"Llista no numerada","justifyfull_desc":"Justificat","justifyright_desc":"Alineaci\u00f3 dreta","justifycenter_desc":"Alineaci\u00f3 al centre","justifyleft_desc":"Alineaci\u00f3 esquerra","striketrough_desc":"Barrat","help_shortcut":"Prem ALT-F10 per barra d\'eines. Prem ALT-0 per ajuda","rich_text_area":"\u00c0rea de Text Enriquit","shortcuts_desc":"Ajuda d\'Accessabilitat",toolbar:"Barra d\'eines","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ca_dlg.js
new file mode 100644
index 000000000..d1b3776c2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.advanced_dlg',{"link_list":"Llista d\'enlla\u00e7os","link_is_external":"L\'URL que heu introdu\u00eft sembla ser un enlla\u00e7 extern, voleu afegir-hi el prefix requerit http:// ?","link_is_email":"L\'URL que heu introdu\u00eft sembla ser una adre\u00e7a de correu, voleu afegir-hi el prefix requerit mailto: ?","link_titlefield":"T\u00edtol","link_target_blank":"Obre l\'enlla\u00e7 a una nova finestra","link_target_same":"Obre l\'enlla\u00e7 a la mateixa finestra","link_target":"Dest\u00ed","link_url":"URL de l\'enlla\u00e7","link_title":"Insereix/edita enlla\u00e7","image_align_right":"Dreta","image_align_left":"Esquerra","image_align_textbottom":"Part inferior del text","image_align_texttop":"Part superior del text","image_align_bottom":"A baix","image_align_middle":"Al Mig","image_align_top":"A dalt","image_align_baseline":"L\u00ednia de base","image_align":"Alineaci\u00f3","image_hspace":"Espai horitzontal","image_vspace":"Espai vertical","image_dimensions":"Dimensions","image_alt":"Descripci\u00f3 de la imatge","image_list":"Llista de la imatge","image_border":"Vora","image_src":"URL de la imatge","image_title":"Insereix/edita imatge","charmap_title":"Selecci\u00f3 de car\u00e0cter","colorpicker_name":"Nom:","colorpicker_color":"Color:","colorpicker_named_title":"Colors pel seu nom","colorpicker_named_tab":"Per nom","colorpicker_palette_title":"Paleta de colors","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Capturador de color","colorpicker_picker_tab":"Capturador","colorpicker_title":"Selecci\u00f3 de color","code_wordwrap":"Embolcall de paraula","code_title":"Editor de codi font HTML","anchor_name":"Nom de l\'\u00e0ncora","anchor_title":"Insereix/edita \u00e0ncora","about_loaded":"Connectors carregats","about_version":"Versi\u00f3","about_author":"Autor","about_plugin":"Connector","about_plugins":"Connectors","about_license":"Llic\u00e8ncia","about_help":"Ajuda","about_general":"Quant a","about_title":"Quant al TinyMCE","charmap_usage":"Feu servir fletxes esquerra i dreta per navegar","anchor_invalid":"Sisplau, especifiqueu un nom d\'\u00e0ncora v\u00e0lid.","accessibility_help":"Ajuda d\'accessibilitat","accessibility_usage_title":"Us general","invalid_color_value":"Valor de color inv\u00e0lid"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ch.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ch.js
new file mode 100644
index 000000000..6f93d7130
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ch.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.advanced',{"underline_desc":"\u5e95\u7ebf \uff08Ctrl+U\uff09","italic_desc":"\u659c\u4f53 \uff08Ctrl+I\uff09","bold_desc":"\u7c97\u4f53 \uff08Ctrl+B\uff09",dd:"\u540d\u8bcd\u63cf\u8ff0",dt:"\u540d\u8bcd\u5b9a\u4e49",samp:"\u4ee3\u7801\u8303\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"\u6807\u98986",h5:"\u6807\u98985",h4:"\u6807\u98984",h3:"\u6807\u98983",h2:"\u6807\u98982",h1:"\u6807\u98981",pre:"\u9884\u8bbe\u683c\u5f0f",address:"\u5730\u5740",div:"DIV\u5c42\u7ea7",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u4f53","font_size":"\u6587\u5b57\u5927\u5c0f","style_select":"\u6837\u5f0f","link_delta_height":"60","link_delta_width":"40","more_colors":"\u66f4\u591a\u989c\u8272\u2026","toolbar_focus":"\u5b9a\u4f4d\u5230\u5de5\u5177\u5217\uff1aAlt+Q,\u5b9a\u4f4d\u5230\u7f16\u8f91\u6846\uff1aAlt+Z\u5b9a\u4f4d\u5230\u5de5\u5177\u5217- Alt+Q,\u5b9a\u4f4d\u5230\u5143\u7d20\u8def\u5f84\uff1aAlt+X.",newdocument:"\u786e\u8ba4\u6e05\u9664\u76ee\u524d\u7f16\u8f91\u7684\u5185\u5bb9\u5417\uff1f",path:"\u5143\u7d20\u8def\u5f84","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u63f4\u590d\u5236\u529f\u80fd\u3002","blockquote_desc":"\u5f15\u7528","help_desc":"\u8bf4\u660e","newdocument_desc":"\u65b0\u5efa\u6587\u4ef6","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u8d34\u4e0a \uff08Ctrl+V\uff09","copy_desc":"\u590d\u5236 \uff08Ctrl+C\uff09","cut_desc":"\u526a\u4e0b \uff08Ctrl+X\uff09","anchor_desc":"\u63d2\u5165/\u7f16\u8f91\u4e66\u7b7e","visualaid_desc":"\u663e\u793a/\u9690\u85cf\u76ee\u6807","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","backcolor_desc":"\u80cc\u666f\u989c\u8272","forecolor_desc":"\u6587\u5b57\u989c\u8272","custom1_desc":"\u5728\u6b64\u8f93\u5165\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u683c\u5f0f","hr_desc":"\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"Html\u4ee3\u7801\u6a21\u5f0f","cleanup_desc":"\u6e05\u9664\u683c\u5f0f","image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","unlink_desc":"\u5220\u9664\u8d85\u8d85\u8fde\u7ed3","link_desc":"\u63d2\u5165/\u7f16\u8f91\u8d85\u8fde\u7ed3","redo_desc":"\u53d6\u6d88\u6062\u590d \uff08Ctrl+Y\uff09","undo_desc":"\u6062\u590d \uff08Ctrl+Z\uff09","indent_desc":"\u589e\u52a0\u7f29\u6392","outdent_desc":"\u51cf\u5c11\u7f29\u6392","numlist_desc":"\u7f16\u53f7\u5217\u8868","bullist_desc":"\u9879\u76ee\u5217\u8868","justifyfull_desc":"\u5de6\u53f3\u5bf9\u9f50","justifyright_desc":"\u9760\u53f3\u5bf9\u9f50","justifycenter_desc":"\u7f6e\u4e2d\u5bf9\u9f50","justifyleft_desc":"\u9760\u5de6\u5bf9\u9f50","striketrough_desc":"\u5220\u9664\u7ebf","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ch_dlg.js
new file mode 100644
index 000000000..e5e855f70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.advanced_dlg',{"link_list":"\u8d85\u8fde\u7ed3\u6e05\u5355","link_is_external":"\u60a8\u8f93\u5165\u7684 URL \u662f\u4e00\u4e2a\u5916\u90e8\u8d85\u8fde\u7ed3\uff0c\u662f\u5426\u8981\u52a0\u4e0a http:// ?","link_is_email":"\u60a8\u8f93\u5165\u7684\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u52a0 mailto:?","link_titlefield":"\u6807\u9898","link_target_blank":"\u65b0\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","link_target_same":"\u76ee\u524d\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","link_target":"\u76ee\u6807","link_url":"\u8d85\u8fde\u7ed3URL","link_title":"\u63d2\u5165/\u7f16\u8f91\u8d85\u8fde\u7ed3","image_align_right":"\u9760\u53f3","image_align_left":"\u9760\u5de6","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u9760\u4e0b","image_align_middle":"\u7f6e\u4e2d","image_align_top":"\u9760\u4e0a","image_align_baseline":"\u57fa\u51c6\u7ebf","image_align":"\u5bf9\u9f50\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u95f4\u8ddd","image_vspace":"\u5782\u76f4\u95f4\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u8bf4\u660e","image_list":"\u56fe\u7247\u6e05\u5355","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247URL","image_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","colorpicker_name":"\u540d\u79f0\uff1a","colorpicker_color":"\u989c\u8272\uff1a","colorpicker_named_title":"\u5e38\u7528\u989c\u8272","colorpicker_named_tab":"\u5e38\u7528\u989c\u8272","colorpicker_palette_title":"WEB\u989c\u8272","colorpicker_palette_tab":"\u5b89\u5168\u8272","colorpicker_picker_title":"\u8c03\u8272\u76d8","colorpicker_picker_tab":"\u8c03\u8272\u76d8","colorpicker_title":"\u9009\u62e9\u989c\u8272","code_wordwrap":"\u81ea\u52a8\u6362\u884c","code_title":"\u4ee3\u7801\u6807\u9898","anchor_name":"\u4e66\u7b7e\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91\u4e66\u7b7e","about_loaded":"\u5df2\u542f\u7528\u7684\u63d2\u4ef6","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u63d2\u4ef6","about_plugins":"\u63d2\u4ef6","about_license":"\u6388\u6743","about_help":"\u8bf4\u660e","about_general":"\u5173\u65bc","about_title":"\u5173\u65bc TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cn.js
new file mode 100644
index 000000000..1c1775d41
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.advanced',{"underline_desc":"\u4e0b\u5212\u7ebf (Ctrl U)","italic_desc":"\u659c\u4f53 (Ctrl I)","bold_desc":"\u7c97\u4f53 (Ctrl B)",dd:"\u540d\u8bcd\u63cf\u8ff0",dt:"\u540d\u8bcd\u5b9a\u4e49",samp:"\u4ee3\u7801\u8303\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"6\u7ea7\u6807\u9898",h5:"5\u7ea7\u6807\u9898",h4:"4\u7ea7\u6807\u9898",h3:"3\u7ea7\u6807\u9898",h2:"2\u7ea7\u6807\u9898",h1:"1\u7ea7\u6807\u9898",pre:"\u9884\u8bbe\u683c\u5f0f",address:"\u5730\u5740\u683c\u5f0f",div:"Div\u533a\u5757",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u4f53","font_size":"\u5b57\u4f53\u5927\u5c0f","style_select":"\u5b57\u4f53\u6837\u5f0f","anchor_delta_height":"\u951a\u6807\u8bb0\u9ad8\u5ea6","anchor_delta_width":"\u951a\u6807\u8bb0\u5bbd\u5ea6","charmap_delta_height":"\u5b57\u7b26\u8868\u9ad8\u5ea6","charmap_delta_width":"\u5b57\u7b26\u8868\u5bbd\u5ea6","colorpicker_delta_height":"\u62fe\u8272\u5668\u9ad8\u5ea6","colorpicker_delta_width":"\u62fe\u8272\u5668\u5bbd\u5ea6","link_delta_height":"\u94fe\u63a5\u9ad8\u5ea6","link_delta_width":"\u94fe\u63a5\u5bbd\u5ea6","image_delta_height":"\u56fe\u7247\u9ad8\u5ea6","image_delta_width":"\u56fe\u7247\u5bbd\u5ea6","more_colors":"\u66f4\u591a\u989c\u8272","toolbar_focus":"\u5b9a\u4f4d\u5230\u5de5\u5177\u5217\uff1aAlt Q\uff0c\u5b9a\u4f4d\u5230\u7f16\u8f91\u6846\uff1aAlt Z\u5b9a\u4f4d\u5230\u5de5\u5177\u5217- Alt Q\uff0c\u5b9a\u4f4d\u5230\u5143\u7d20\u8def\u5f84\uff1aAlt X\u3002",newdocument:"\u786e\u8ba4\u6e05\u9664\u76ee\u524d\u7f16\u8f91\u7684\u5185\u5bb9\u5417\uff1f",path:"\u5143\u7d20\u8def\u5f84","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u8be5\u529f\u80fd\u3002","blockquote_desc":"\u5f15\u7528","help_desc":"\u5e2e\u52a9","newdocument_desc":"\u65b0\u6587\u6863","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u7c98\u8d34","copy_desc":"\u590d\u5236","cut_desc":"\u526a\u5207","anchor_desc":"\u63d2\u5165/\u7f16\u8f91\u4e66\u7b7e","visualaid_desc":"\u663e\u793a/\u9690\u85cf\u4e0d\u53ef\u89c1\u5185\u5bb9","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","backcolor_desc":"\u9009\u62e9\u80cc\u666f\u989c\u8272","forecolor_desc":"\u9009\u62e9\u6587\u672c\u989c\u8272","custom1_desc":"\u5728\u6b64\u8f93\u5165\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u683c\u5f0f","hr_desc":"\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"\u7f16\u8f91 HTML \u6e90\u4ee3\u7801","cleanup_desc":"\u6e05\u9664\u591a\u4f59\u683c\u5f0f","image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","unlink_desc":"\u6e05\u9664\u94fe\u63a5","link_desc":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","redo_desc":"\u91cd\u505a (Ctrl Y)","undo_desc":"\u64a4\u9500 (Ctrl Z)","indent_desc":"\u589e\u52a0\u7f29\u8fdb","outdent_desc":"\u51cf\u5c11\u7f29\u8fdb","numlist_desc":"\u6709\u5e8f\u7f16\u53f7","bullist_desc":"\u65e0\u5e8f\u7f16\u53f7","justifyfull_desc":"\u5de6\u53f3\u5bf9\u9f50","justifyright_desc":"\u53f3\u5bf9\u9f50","justifycenter_desc":"\u5c45\u4e2d\u5bf9\u9f50","justifyleft_desc":"\u5de6\u5bf9\u9f50","striketrough_desc":"\u5220\u9664\u7ebf","help_shortcut":"\u4f7f\u7528 ALT-F10 \u542f\u7528\u5de5\u5177\u680f. \u4f7f\u7528 ALT-0 \u6253\u5f00\u5e2e\u52a9","rich_text_area":"\u5bcc\u6587\u672c\u533a\u57df","shortcuts_desc":"Accessability\u5e2e\u52a9",toolbar:"\u5de5\u5177\u680f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cn_dlg.js
new file mode 100644
index 000000000..0e7ba5244
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.advanced_dlg',{"link_list":"\u94fe\u63a5\u5217\u8868","link_is_external":"\u60a8\u8f93\u5165\u7684 URL \u662f\u4e00\u4e2a\u5916\u90e8\u8d85\u94fe\u63a5\uff0c\u662f\u5426\u8981\u52a0\u4e0a http:// \uff1f","link_is_email":"\u60a8\u8f93\u5165\u7684\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740,\u662f\u5426\u9700\u8981\u52a0 mailto:\uff1f","link_titlefield":"\u6807\u9898","link_target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00\u94fe\u63a5","link_target_same":"\u5728\u540c\u4e00\u7a97\u53e3\u6253\u5f00\u94fe\u63a5","link_target":"\u94fe\u63a5\u76ee\u6807","link_url":"\u94fe\u63a5URL","link_title":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","image_align_right":"\u9760\u53f3","image_align_left":"\u9760\u5de6","image_align_textbottom":"\u6587\u5b57\u5e95\u90e8","image_align_texttop":"\u6587\u5b57\u9876\u90e8","image_align_bottom":"\u5e95\u90e8","image_align_middle":"\u4e2d\u95f4","image_align_top":"\u9876\u90e8","image_align_baseline":"\u57fa\u7ebf","image_align":"\u5bf9\u9f50\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u95f4\u8ddd","image_vspace":"\u5782\u76f4\u95f4\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u63cf\u8ff0","image_list":"\u56fe\u7247\u5217\u8868","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247URL","image_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","charmap_title":"\u9009\u62e9\u7279\u6b8a\u5b57\u7b26","colorpicker_name":"\u540d\u79f0:","colorpicker_color":"\u989c\u8272:","colorpicker_named_title":"\u5e38\u7528\u989c\u8272","colorpicker_named_tab":"\u5e38\u7528","colorpicker_palette_title":"WEB\u989c\u8272","colorpicker_palette_tab":"\u5b89\u5168\u8272","colorpicker_picker_title":"\u62fe\u8272\u5668","colorpicker_picker_tab":"\u62fe\u8272\u5668","colorpicker_title":"\u9009\u62e9\u4e00\u79cd\u989c\u8272","code_wordwrap":"\u81ea\u52a8\u6362\u884c","code_title":"HTML\u6e90\u7801\u7f16\u8f91\u5668","anchor_name":"\u4e66\u7b7e\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91\u4e66\u7b7e","about_loaded":"\u5df2\u542f\u7528\u7684\u63d2\u4ef6","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u63d2\u4ef6","about_plugins":"\u63d2\u4ef6","about_license":"\u6388\u6743","about_help":"\u5e2e\u52a9","about_general":"\u5173\u4e8e","about_title":"\u5173\u4e8eTinyMCE","charmap_usage":"\u4f7f\u7528\u5de6\u53f3\u952e\u8df3\u8f6c","anchor_invalid":"\u8bf7\u6307\u5b9a\u4e00\u4e2a\u6709\u6548\u7684\u4e66\u7b7e\u7684\u540d\u79f0","accessibility_help":"\u65e0\u969c\u788d\u8bbe\u8ba1\u8bf4\u660e","accessibility_usage_title":"\u901a\u7528","invalid_color_value":"\u65e0\u6548\u989c\u8272\u503c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cs.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cs.js
new file mode 100644
index 000000000..9d88d4c9c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.advanced',{"underline_desc":"Podtr\u017een\u00e9 (Ctrl+U)","italic_desc":"Kurz\u00edva (Ctrl+I)","bold_desc":"Tu\u010dn\u00e9 (Ctrl+B)",dd:"Popis definice",dt:"Term\u00edn definice",samp:"Uk\u00e1zka k\u00f3du",code:"K\u00f3d",blockquote:"Blokov\u00e1 citace",h6:"Nadpis 6",h5:"Nadpis 5",h4:"Nadpis 4",h3:"Nadpis 3",h2:"Nadpis 2",h1:"Nadpis 1",pre:"P\u0159edform\u00e1tov\u00e1no",address:"Adresa",div:"Odd\u00edl",paragraph:"Odstavec",block:"Form\u00e1t",fontdefault:"P\u00edsmo","font_size":"Velikost p\u00edsma","style_select":"Styly","more_colors":"Dal\u0161\u00ed barvy","toolbar_focus":"P\u0159echod na panel n\u00e1stroj\u016f - Alt Q, p\u0159echod do editoru - Alt Z, p\u0159echod na cestu prvk\u016f - Alt X",newdocument:"Jste si opravdu jisti, \u017ee chcete odstranit ve\u0161ker\u00fd obsah?",path:"Cesta","clipboard_msg":"Funkce kop\u00edrovat/vyjmout/vlo\u017eit nejsou podporovan\u00e9 v prohl\u00ed\u017ee\u010d\u00edch Mozilla a Firefox.\nChcete v\u00edce informac\u00ed o tomto probl\u00e9mu?","blockquote_desc":"Blokov\u00e1 citace","help_desc":"N\u00e1pov\u011bda","newdocument_desc":"Nov\u00fd dokument","image_props_desc":"Vlastnosti obr\u00e1zku","paste_desc":"Vlo\u017eit","copy_desc":"Kop\u00edrovat","cut_desc":"Vyjmout","anchor_desc":"Vlo\u017eit/upravit z\u00e1lo\u017eku (kotvu)","visualaid_desc":"Zobrazit pomocn\u00e9 linky/skryt\u00e9 prvky","charmap_desc":"Vlo\u017eit speci\u00e1ln\u00ed znak","backcolor_desc":"Barva pozad\u00ed","forecolor_desc":"Barva textu","custom1_desc":"Libovoln\u00fd popisek","removeformat_desc":"Odstranit form\u00e1tov\u00e1n\u00ed","hr_desc":"Vlo\u017eit vodorovn\u00fd odd\u011blova\u010d","sup_desc":"Horn\u00ed index","sub_desc":"Doln\u00ed index","code_desc":"Upravit HTML zdroj","cleanup_desc":"Vy\u010distit k\u00f3d","image_desc":"Vlo\u017eit/upravit obr\u00e1zek","unlink_desc":"Odebrat odkaz","link_desc":"Vlo\u017eit/upravit odkaz","redo_desc":"Znovu (Ctrl+Y)","undo_desc":"Zp\u011bt (Ctrl+Z)","indent_desc":"Zv\u011bt\u0161it odsazen\u00ed","outdent_desc":"Zmen\u0161it odsazen\u00ed","numlist_desc":"\u010c\u00edslovan\u00fd seznam","bullist_desc":"Seznam s odr\u00e1\u017ekami","justifyfull_desc":"Zarovnat do bloku","justifyright_desc":"Zarovnat doprava","justifycenter_desc":"Zarovnat na st\u0159ed","justifyleft_desc":"Zarovnat doleva","striketrough_desc":"P\u0159e\u0161krtnut\u00e9","help_shortcut":"Stiskn\u011bte ALT F10 pro panel n\u00e1stroj\u016f. Stiskn\u011bte ALT 0 pro n\u00e1pov\u011bdu.","rich_text_area":"Oblast s form\u00e1tovan\u00fdm textem","shortcuts_desc":"N\u00e1pov\u011bda",toolbar:"Panel n\u00e1stroj\u016f","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cs_dlg.js
new file mode 100644
index 000000000..35c165a8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.advanced_dlg',{"link_list":"Seznam odkaz\u016f","link_is_external":"Zadan\u00e9 URL vypad\u00e1 jako extern\u00ed odkaz, chcete doplnit povinn\u00fd prefix http://?","link_is_email":"Zadan\u00e9 URL vypad\u00e1 jako e-mailov\u00e1 adresa, chcete doplnit povinn\u00fd prefix mailto:?","link_titlefield":"Titulek","link_target_blank":"Otev\u0159\u00edt odkaz v nov\u00e9m okn\u011b","link_target_same":"Otev\u0159\u00edt odkaz ve stejn\u00e9m okn\u011b","link_target":"C\u00edl","link_url":"URL odkazu","link_title":"Vlo\u017eit/upravit odkaz","image_align_right":"Vpravo","image_align_left":"Vlevo","image_align_textbottom":"Se spodkem \u0159\u00e1dku","image_align_texttop":"S vrchem \u0159\u00e1dku","image_align_bottom":"Dol\u016f","image_align_middle":"Na st\u0159ed \u0159\u00e1dku","image_align_top":"Nahoru","image_align_baseline":"Na z\u00e1kladnu","image_align":"Zarovn\u00e1n\u00ed","image_hspace":"Horizont\u00e1ln\u00ed odsazen\u00ed","image_vspace":"Vertik\u00e1ln\u00ed odsazen\u00ed","image_dimensions":"Rozm\u011bry","image_alt":"Popis obr\u00e1zku","image_list":"Seznam obr\u00e1zk\u016f","image_border":"R\u00e1me\u010dek","image_src":"URL obr\u00e1zku","image_title":"Vlo\u017eit/upravit obr\u00e1zek","charmap_title":"Vlo\u017eit speci\u00e1ln\u00ed znak","colorpicker_name":"N\u00e1zev:","colorpicker_color":"Vybran\u00e1 barva:","colorpicker_named_title":"Pojmenovan\u00e9 barvy","colorpicker_named_tab":"N\u00e1zvy","colorpicker_palette_title":"Paleta barev","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Kap\u00e1tko","colorpicker_picker_tab":"Kap\u00e1tko","colorpicker_title":"V\u00fdb\u011br barvy","code_wordwrap":"Zalamov\u00e1n\u00ed \u0159\u00e1dk\u016f","code_title":"Editor HTML","anchor_name":"N\u00e1zev z\u00e1lo\u017eky","anchor_title":"Vlo\u017eit/upravit z\u00e1lo\u017eku (kotvu)","about_loaded":"Na\u010dten\u00e9 z\u00e1suvn\u00e9 moduly","about_version":"Verze","about_author":"Autor","about_plugin":"Z\u00e1suvn\u00fd modul","about_plugins":"Z\u00e1suvn\u00e9 moduly","about_license":"Licence","about_help":"N\u00e1pov\u011bda","about_general":"O programu","about_title":"O TinyMCE","charmap_usage":"Pro navigaci pou\u017eijte \u0161ipky vlevo a vpravo.","anchor_invalid":"Zadejte, pros\u00edm, platn\u00fd n\u00e1zev z\u00e1lo\u017eky (kotvy).","accessibility_help":"N\u00e1pov\u011bda pro p\u0159\u00edstupnost","accessibility_usage_title":"Obecn\u00e9 pou\u017eit\u00ed","invalid_color_value":"Neplatn\u00fd k\u00f3d barvy"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cy.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cy.js
new file mode 100644
index 000000000..d8b099ff3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.advanced',{"underline_desc":"Tanlinellu (Ctrl+U)","italic_desc":"Italig (Ctrl+I)","bold_desc":"Trwm (Ctrl+B)",dd:"Disgrifiad diffiniad",dt:"Term diffiniad ",samp:"Sampl c\u00f4d",code:"C\u00f4d",blockquote:"Dyfyniad bloc",h6:"Pennawd 6",h5:"Pennawd 5",h4:"Pennawd 4",h3:"Pennawd 3",h2:"Pennawd 2",h1:"Pennawd 1",pre:"Rhagffomatiwyd",address:"Cyfeririad",div:"Div",paragraph:"Paragraff",block:"Fformat",fontdefault:"Teulu ffont","font_size":"Maint Ffont","style_select":"Ardulliau","more_colors":"Mwy o liwiau","toolbar_focus":"Neidio i botymau offeryn - Alt+Q, Neidio i olygydd - Alt-Z, Neidio i lwybr elfen - Alt-X",newdocument:"A ydych chi\'n si\u0175r eich bod eisiau clirio\'r holl cynnwys?",path:"Llwybr","clipboard_msg":"Nid yw Cop\u00efo/Torri/Gludo ar gael mewn Mozilla a Firefox.\nYdych chi eisiau mwy o wybodaeth am y mater yma?","blockquote_desc":"Dyfyniad bloc","help_desc":"Cymorth","newdocument_desc":"Dogfen newydd","image_props_desc":"Priodweddau delwedd","paste_desc":"Gludo","copy_desc":"Cop\u00efo","cut_desc":"Torri","anchor_desc":"Mewnosod/golygu angor","visualaid_desc":"Toglu llinellau cyfeirydd/elfennau anweledig","charmap_desc":"Mewnosod n\u00f4d addasiedig","backcolor_desc":"Dewis lliw cefndir","forecolor_desc":"Dewis lliw testun","custom1_desc":"Eich disgrifiad addasiedig yma","removeformat_desc":"Tynnu fformatio","hr_desc":"Mewnosod mesurydd llorweddol","sup_desc":"Uwchysgrif","sub_desc":"Isysgrif","code_desc":"Golygu Ffynhonell HTML","cleanup_desc":"Glanhau c\u00f4d anhrefnus","image_desc":"Mewnosod/golygu delwedd","unlink_desc":"Datgysylltu","link_desc":"Mewnosod/golygu cyswllt","redo_desc":"Ailwneud (Ctrl+Y)","undo_desc":"Dadwneud (Ctrl+Z)","indent_desc":"Mewnoli","outdent_desc":"Alloli","numlist_desc":"Rhestr trenus","bullist_desc":"Rhestr didrenus","justifyfull_desc":"Alinio llawn","justifyright_desc":"Alinio i\'r dde","justifycenter_desc":"Alinio i\'r canol","justifyleft_desc":"Alinio i\'r chwith","striketrough_desc":"Taro drwodd","help_shortcut":"Pwyswch ALT-F10 ar gyfer bar offer. Pwyswch ALT-0 am gymorth","rich_text_area":"Ardal Testun Cyfoethog","shortcuts_desc":"Cymorth Hygyrchedd",toolbar:"Bar Offer","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cy_dlg.js
new file mode 100644
index 000000000..4df78cbe8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.advanced_dlg',{"link_list":"Rhestr cysylltau","link_is_external":"Mae\'r URL a rydych wedi rhoi yn edrych fel cyswllt allannol, ydych chi eisiau ychwanegu\'r rhagddodiad http:// sydd angen?","link_is_email":"Mae\'r URL a rydych wedi rhoi yn edrych fel cyferiad e-bost, ydych chi eisiau ychwanegu\'r rhagddodiad mailto: sydd angen?","link_titlefield":"Teitl","link_target_blank":"Agor cyswllt mewn ffenst newydd","link_target_same":"Agor cyswllt yn yr un ffenst","link_target":"Targed","link_url":"URL cyswllt","link_title":"Mewnosod/golygu cyswllt","image_align_right":"De","image_align_left":"Chwith","image_align_textbottom":"Gwaelod testun","image_align_texttop":"Pen testun","image_align_bottom":"Gwaelod","image_align_middle":"Canol","image_align_top":"Pen","image_align_baseline":"Gwaelodlin","image_align":"Aliniad","image_hspace":"Gofod llorweddol","image_vspace":"Gofod fertigol","image_dimensions":"Dimensiynau","image_alt":"disgrifiad delwedd","image_list":"Rhestr delweddau","image_border":"Border","image_src":"URL delwedd","image_title":"Mewnosod/golygu delwedd","charmap_title":"Dewis n\u00f4d addasiedig","colorpicker_name":"Enw:","colorpicker_color":"Lliw:","colorpicker_named_title":"Lliwiau wedi\'u enwi","colorpicker_named_tab":"Wedi\'u enwi","colorpicker_palette_title":"Lliwiau palet","colorpicker_palette_tab":"Palet","colorpicker_picker_title":"Dewisydd lliw","colorpicker_picker_tab":"Dweisydd","colorpicker_title":"Dewis lliw","code_wordwrap":"Amlapio geiriau","code_title":"Golygydd Ffynhonell HTML","anchor_name":"Enw angor","anchor_title":"Mewnosod/golygu angor","about_loaded":"Ategion wedi llwytho","about_version":"Fersion","about_author":"Awdur","about_plugin":"Ategyn","about_plugins":"Ategion","about_license":"Twyddedd","about_help":"Cymorth","about_general":"Ynglyn","about_title":"Ynglyn TinyMCE","charmap_usage":"Defnyddiwch saethau dde a chwith i fforio.","anchor_invalid":"Penodwch enw angor dilys.","accessibility_help":"Cymorth Hygyrchedd","accessibility_usage_title":"Defnydd Cyffredin"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/da.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/da.js
new file mode 100644
index 000000000..3d5fb8b0a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/da.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.advanced',{"underline_desc":"Understreget (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fed (Ctrl+B)",dd:"Definitionsbeskrivelse",dt:"Definitionsterm ",samp:"Kodeeksempel",code:"Kode",blockquote:"Blokcitat",h6:"Overskrift 6",h5:"Overskrift 5",h4:"Overskrift 4",h3:"Overskrift 3",h2:"Overskrift 2",h1:"Overskrift 1",pre:"Pr\u00e6formatteret",address:"Adresse",div:"Div",paragraph:"Afsnit",block:"Format",fontdefault:"Skrifttype","font_size":"Skriftst\u00f8rrelse","style_select":"Typografier","more_colors":"Flere farver","toolbar_focus":"Hop til v\u00e6rkt\u00f8jsknapper - Alt+Q, Skift til redigering - Alt-Z, Skift til element sti - Alt-X",newdocument:"Er du sikker p\u00e5 du vil slette alt indhold?",path:"Sti","clipboard_msg":"Kopier/Klip/inds\u00e6t er ikke muligt i Mozilla og Firefox.\nVil du have mere information om dette emne?","blockquote_desc":"Blokcitat","help_desc":"Hj\u00e6lp","newdocument_desc":"Nyt dokument","image_props_desc":"Billedegenskaber","paste_desc":"Inds\u00e6t","copy_desc":"Kopier","cut_desc":"Klip","anchor_desc":"Inds\u00e6t/rediger anker","visualaid_desc":"Sl\u00e5 hj\u00e6lp/synlige elementer til/fra","charmap_desc":"Inds\u00e6t specialtegn","backcolor_desc":"V\u00e6lg baggrundsfarve","forecolor_desc":"V\u00e6lg tekstfarve","custom1_desc":"Din egen beskrivelse her","removeformat_desc":"Fjern formatering","hr_desc":"Inds\u00e6t horisontal linie","sup_desc":"H\u00e6vet skrift","sub_desc":"S\u00e6nket skrift","code_desc":"Rediger HTML-kilde","cleanup_desc":"Ryd op i uordentlig kode","image_desc":"Inds\u00e6t/rediger billede","unlink_desc":"Fjern link","link_desc":"Inds\u00e6t/rediger link","redo_desc":"Gendan (Ctrl+Y)","undo_desc":"Fortryd (Ctrl+Z)","indent_desc":"\u00d8g indrykning","outdent_desc":"Formindsk indrykning","numlist_desc":"Nummereret punktopstilling","bullist_desc":"Unummereret punktopstilling","justifyfull_desc":"Lige marginer","justifyright_desc":"H\u00f8jrejusteret","justifycenter_desc":"Centreret","justifyleft_desc":"Venstrejusteret","striketrough_desc":"Gennemstreget","help_shortcut":"Tryk ALT-F10 for v\u00e6rkt\u00f8jslinie. Tryk ALT-0 for hj\u00e6lp","rich_text_area":"Tekstomr\u00e5de med formatering","shortcuts_desc":"Hj\u00e6lp til tilg\u00e6ngelighed",toolbar:"V\u00e6rkt\u00f8jslinie","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/da_dlg.js
new file mode 100644
index 000000000..f3a752cb1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.advanced_dlg',{"link_list":"Liste over links","link_is_external":"Den URL, der er indtastet, ser ud til at v\u00e6re et eksternt link. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede http:// foran?","link_is_email":"Den URL, der er indtastet, ser ud til at v\u00e6re en emailadresse. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede mailto: foran?","link_titlefield":"Titel","link_target_blank":"\u00c5ben link i nyt vindue","link_target_same":"\u00c5ben link i samme vindue","link_target":"Target","link_url":"Link URL","link_title":"Inds\u00e6t/rediger link","image_align_right":"H\u00f8jre","image_align_left":"Venstre","image_align_textbottom":"Tekst bunden","image_align_texttop":"Tekst toppen","image_align_bottom":"Bunden","image_align_middle":"Centreret","image_align_top":"Toppen","image_align_baseline":"Grundlinie","image_align":"Justering","image_hspace":"Horisontal afstand","image_vspace":"Vertikal afstand","image_dimensions":"Dimensioner","image_alt":"Billedbeskrivelse","image_list":"Liste over billeder","image_border":"Kant","image_src":"Billede URL","image_title":"Inds\u00e6t/rediger billede","charmap_title":"V\u00e6lg specialtegn","colorpicker_name":"Navn:","colorpicker_color":"Farve:","colorpicker_named_title":"Navngivet farve","colorpicker_named_tab":"Navngivet","colorpicker_palette_title":"Palette-farver","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Farvev\u00e6lger","colorpicker_picker_tab":"V\u00e6lger","colorpicker_title":"V\u00e6lg en farve","code_wordwrap":"Tekstombrydning","code_title":"HTML kildekode-redigering","anchor_name":"Navn p\u00e5 anker","anchor_title":"Inds\u00e6t/rediger anker","about_loaded":"Indl\u00e6ste udvidelser","about_version":"Version","about_author":"Forfatter","about_plugin":"Udvidelse","about_plugins":"Udvidelser","about_license":"Licens","about_help":"Hj\u00e6lp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Brug venstre og h\u00f8jre piletaster til at navigere","anchor_invalid":"Angiv venligst et gyldigt anker navn.","accessibility_help":"Tilg\u00e6ngeligheds hj\u00e6lp","accessibility_usage_title":"Generel brug","invalid_color_value":"Ugyldig farve v\u00e6rdi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/de.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/de.js
new file mode 100644
index 000000000..034195ca4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/de.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.advanced',{"underline_desc":"Unterstrichen (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)",dd:"Definitionsbeschreibung",dt:"Definitionsbegriff",samp:"Beispiel",code:"Code",blockquote:"Zitatblock",h6:"\u00dcberschrift 6",h5:"\u00dcberschrift 5",h4:"\u00dcberschrift 4",h3:"\u00dcberschrift 3",h2:"\u00dcberschrift 2",h1:"\u00dcberschrift 1",pre:"Rohdaten",address:"Adresse",div:"Zusammenh\u00e4ngender Bereich",paragraph:"Absatz",block:"Vorlage",fontdefault:"Schriftart","font_size":"Schriftgr\u00f6\u00dfe","style_select":"Format","anchor_delta_width":"13","more_colors":"Weitere Farben","toolbar_focus":"Zur Werkzeugleiste springen: Alt+Q; Zum Editor springen: Alt-Z; Zum Elementpfad springen: Alt-X",newdocument:"Wollen Sie wirklich den ganzen Inhalt l\u00f6schen?",path:"Pfad","clipboard_msg":"Kopieren, Ausschneiden und Einf\u00fcgen sind im Mozilla Firefox nicht m\u00f6glich.\nWollen Sie mehr \u00fcber dieses Problem erfahren?","blockquote_desc":"Zitatblock","help_desc":"Hilfe","newdocument_desc":"Neues Dokument","image_props_desc":"Bildeigenschaften","paste_desc":"Einf\u00fcgen","copy_desc":"Kopieren","cut_desc":"Ausschneiden","anchor_desc":"Anker einf\u00fcgen/ver\u00e4ndern","visualaid_desc":"Hilfslinien und unsichtbare Elemente ein-/ausblenden","charmap_desc":"Sonderzeichen einf\u00fcgen","backcolor_desc":"Hintergrundfarbe","forecolor_desc":"Textfarbe","custom1_desc":"Benutzerdefinierte Beschreibung","removeformat_desc":"Formatierungen zur\u00fccksetzen","hr_desc":"Trennlinie einf\u00fcgen","sup_desc":"Hochgestellt","sub_desc":"Tiefgestellt","code_desc":"HTML-Quellcode bearbeiten","cleanup_desc":"Quellcode aufr\u00e4umen","image_desc":"Bild einf\u00fcgen/ver\u00e4ndern","unlink_desc":"Link entfernen","link_desc":"Link einf\u00fcgen/ver\u00e4ndern","redo_desc":"Wiederholen (Strg+Y)","undo_desc":"R\u00fcckg\u00e4ngig (Strg+Z)","indent_desc":"Einr\u00fccken","outdent_desc":"Ausr\u00fccken","numlist_desc":"Sortierte Liste","bullist_desc":"Unsortierte Liste","justifyfull_desc":"Blocksatz","justifyright_desc":"Rechtsb\u00fcndig","justifycenter_desc":"Zentriert","justifyleft_desc":"Linksb\u00fcndig","striketrough_desc":"Durchgestrichen","help_shortcut":"Dr\u00fccken Sie ALT-F10 f\u00fcr die Toolbar. Dr\u00fccken Sie ALT-0 f\u00fcr Hilfe","rich_text_area":"Rich Text Feld","shortcuts_desc":"Eingabehilfe",toolbar:"Toolbar","anchor_delta_height":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/de_dlg.js
new file mode 100644
index 000000000..d33ca1dd1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.advanced_dlg',{"link_list":"Linkliste","link_is_external":"Diese Adresse scheint ein externer Link zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"http://\" voranstellen?","link_is_email":"Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"mailto:\" voranstellen?","link_titlefield":"Titel","link_target_blank":"Neues Fenster \u00f6ffnen","link_target_same":"Im selben Fenster \u00f6ffnen","link_target":"Fenster","link_url":"Adresse","link_title":"Link einf\u00fcgen/ver\u00e4ndern","image_align_right":"Rechts","image_align_left":"Links","image_align_textbottom":"Unten im Text","image_align_texttop":"Oben im Text","image_align_bottom":"Unten","image_align_middle":"Mittig","image_align_top":"Oben","image_align_baseline":"Zeile","image_align":"Ausrichtung","image_hspace":"Horizontaler Abstand","image_vspace":"Vertikaler Abstand","image_dimensions":"Abmessungen","image_alt":"Alternativtext","image_list":"Bilderliste","image_border":"Rahmen","image_src":"Adresse","image_title":"Bild einf\u00fcgen/ver\u00e4ndern","charmap_title":"Sonderzeichen","colorpicker_name":"Name:","colorpicker_color":"Farbe:","colorpicker_named_title":"Benannte Farben","colorpicker_named_tab":"Benannte Farben","colorpicker_palette_title":"Farbpalette","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Farbwahl","colorpicker_picker_tab":"Farbwahl","colorpicker_title":"Farbe","code_wordwrap":"Automatischer Zeilenumbruch","code_title":"HTML-Quellcode bearbeiten","anchor_name":"Name des Ankers","anchor_title":"Anker einf\u00fcgen/ver\u00e4ndern","about_loaded":"Geladene Plugins","about_version":"Version","about_author":"Urheber","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Lizenzbedingungen","about_help":"Hilfe","about_general":"\u00dcber","about_title":"\u00dcber TinyMCE","charmap_usage":"Navigation mit linken und rechten Pfeilen.","anchor_invalid":"Bitte geben Sie einen g\u00fcltigen Namen f\u00fcr den Anker ein!","accessibility_help":"Eingabehilfe","accessibility_usage_title":"Allgemeine Verwendung","invalid_color_value":"Ung\u00fcltige Farbangabe"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/dv.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/dv.js
new file mode 100644
index 000000000..ed997b474
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/dv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/dv_dlg.js
new file mode 100644
index 000000000..8087e13b1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/el.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/el.js
new file mode 100644
index 000000000..0ec14a661
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/el.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.advanced',{"underline_desc":"\u03a5\u03c0\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1 (Ctrl+U)","italic_desc":"\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1 (Ctrl+I)","bold_desc":"\u039c\u03b1\u03cd\u03c1\u03b1 (Ctrl+B)",dd:"\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u039f\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd",dt:"\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2",samp:"\u0394\u03b5\u03af\u03b3\u03bc\u03b1 \u039a\u03ce\u03b4\u03b9\u03ba\u03b1",code:"\u039a\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2",blockquote:"Blockquote",h6:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6",h5:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5",h4:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4",h3:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3",h2:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2",h1:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1",pre:"Pre",address:"\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7",div:"Div",paragraph:"\u03a0\u03b1\u03c1\u03ac\u03b3\u03c1\u03b1\u03c6\u03bf\u03c2",block:"\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",fontdefault:"\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac","font_size":"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u0393\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd","style_select":"\u03a3\u03c4\u03c5\u03bb","link_delta_width":"80","image_delta_width":"20","more_colors":"\u03a0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03b1","toolbar_focus":"\u039c\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b1 \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd - Alt+Q, \u039c\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf\u03bd \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 - Alt-Z, \u039c\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7\u03bd \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae \u03c4\u03bf\u03c5 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5 - Alt-X",newdocument:"\u03a3\u03b9\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03ba\u03b1\u03b8\u03b1\u03c1\u03af\u03c3\u03b5\u03c4\u03b5 \u03cc\u03bb\u03bf \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf ;",path:"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae","clipboard_msg":"\u039f\u03b9 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b5\u03c2 \u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae/\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae/\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b5\u03c2 \u03c3\u03b5 Mozilla \u03ba\u03b1\u03b9 Firefox.\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 ;","blockquote_desc":"Blockquote","help_desc":"\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1","newdocument_desc":"\u039d\u03ad\u03bf \u03ad\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf","image_props_desc":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","paste_desc":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7","copy_desc":"\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae","cut_desc":"\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae","anchor_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 anchor","visualaid_desc":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7/\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03b2\u03bf\u03b7\u03b8\u03b7\u03c4\u03b9\u03ba\u03ce\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03ba\u03b1\u03b9 \u03b1\u03cc\u03c1\u03b1\u03c4\u03c9\u03bd \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03c9\u03bd","charmap_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1","backcolor_desc":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5","forecolor_desc":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","custom1_desc":"\u0397 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03b1\u03c2 \u03b5\u03b4\u03ce","removeformat_desc":"\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2","hr_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","sup_desc":"\u0395\u03ba\u03b8\u03ad\u03c4\u03b7\u03c2","sub_desc":"\u0394\u03b5\u03af\u03ba\u03c4\u03b7\u03c2","code_desc":"\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 HTML \u039a\u03ce\u03b4\u03b9\u03ba\u03b1","cleanup_desc":"\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bc\u03c0\u03b5\u03c1\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c5 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1","image_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","unlink_desc":"\u039a\u03b1\u03c4\u03ac\u03c1\u03b3\u03b7\u03c3\u03b7 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","link_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","redo_desc":"\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 (Ctrl+Y)","undo_desc":"\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 (Ctrl+Z)","indent_desc":"\u0395\u03c3\u03bf\u03c7\u03ae","outdent_desc":"\u03a0\u03c1\u03bf\u03b5\u03be\u03bf\u03c7\u03ae","numlist_desc":"\u039b\u03af\u03c3\u03c4\u03b1 \u03bc\u03b5 \u03c3\u03b5\u03b9\u03c1\u03ac","bullist_desc":"\u039b\u03af\u03c3\u03c4\u03b1 \u03c7\u03c9\u03c1\u03af\u03c2 \u03c3\u03b5\u03b9\u03c1\u03ac","justifyfull_desc":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03c0\u03bb\u03ae\u03c1\u03b7\u03c2","justifyright_desc":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b4\u03b5\u03be\u03b9\u03ac","justifycenter_desc":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03ba\u03ad\u03bd\u03c4\u03c1\u03bf","justifyleft_desc":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","striketrough_desc":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03bc\u03bc\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1","help_shortcut":"\u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F10 \u03b3\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd. \u03a0\u03b9\u03ad\u03c3\u03c4\u03b5 ALT-0 \u03b3\u03b9\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1","shortcuts_desc":"\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1 \u03b3\u03b9\u03b1 \u03a0\u03c1\u03bf\u03c3\u03b2\u03b1\u03c3\u03b9\u03bc\u03cc\u03c4\u03b7\u03c4\u03b1",toolbar:"\u0393\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","image_delta_height":"","rich_text_area":"Rich Text Area"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/el_dlg.js
new file mode 100644
index 000000000..df5856ecf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.advanced_dlg',{"link_list":"\u039b\u03af\u03c3\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd","link_is_external":"\u0397 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b1\u03c4\u03b5 \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2, \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c4\u03b5\u03b8\u03b5\u03af \u03c4\u03bf \u03b1\u03c0\u03b1\u03c1\u03b1\u03af\u03c4\u03b7\u03c4\u03bf http:// ;","link_is_email":"\u0397 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b1\u03c4\u03b5 \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 email, \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c4\u03b5\u03b8\u03b5\u03af \u03c4\u03bf \u03b1\u03c0\u03b1\u03c1\u03b1\u03af\u03c4\u03b7\u03c4\u03bf mailto: ;","link_titlefield":"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2","link_target_blank":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03b5 \u03bd\u03ad\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf","link_target_same":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03c4\u03bf \u03af\u03b4\u03b9\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf","link_target":"\u03a3\u03c4\u03cc\u03c7\u03bf\u03c2","link_url":"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","link_title":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","image_align_right":"\u0394\u03b5\u03be\u03b9\u03ac","image_align_left":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","image_align_textbottom":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03ba\u03ac\u03c4\u03c9","image_align_texttop":"\u039a\u03ad\u03b9\u03bc\u03b5\u03bd\u03bf \u03c0\u03ac\u03bd\u03c9","image_align_bottom":"\u039a\u03ac\u03c4\u03c9","image_align_middle":"\u039c\u03ad\u03c3\u03b7","image_align_top":"\u0395\u03c0\u03ac\u03bd\u03c9","image_align_baseline":"\u0393\u03c1\u03b1\u03bc\u03bc\u03ae \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd","image_align":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7","image_hspace":"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1","image_vspace":"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03ac\u03b8\u03b5\u03c4\u03b7","image_dimensions":"\u0394\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2","image_alt":"\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","image_list":"\u039b\u03af\u03c3\u03c4\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd","image_border":"\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf","image_src":"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u0395\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","image_title":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","charmap_title":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1","colorpicker_name":"\u038c\u03bd\u03bf\u03bc\u03b1:","colorpicker_color":"\u03a7\u03c1\u03ce\u03bc\u03b1:","colorpicker_named_title":"\u039f\u03bd\u03bf\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03ac \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03b1","colorpicker_named_tab":"\u039f\u03bd\u03bf\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03ac","colorpicker_palette_title":"\u03a7\u03c1\u03ce\u03bc\u03b1\u03c4\u03b1 \u03c0\u03b1\u03bb\u03ad\u03c4\u03b1\u03c2","colorpicker_palette_tab":"\u03a0\u03b1\u03bb\u03ad\u03c4\u03b1","colorpicker_picker_title":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2","colorpicker_picker_tab":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae","colorpicker_title":"\u0394\u03b9\u03b1\u03bb\u03ad\u03be\u03c4\u03b5 \u03c7\u03c1\u03ce\u03bc\u03b1","code_wordwrap":"\u0391\u03bd\u03b1\u03b4\u03af\u03c0\u03bb\u03c9\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","code_title":"\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 HTML","anchor_name":"\u038c\u03bd\u03bf\u03bc\u03b1 anchor","anchor_title":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 anchor","about_loaded":"\u03a6\u03bf\u03c1\u03c4\u03c9\u03bc\u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1","about_version":"\u0388\u03ba\u03b4\u03bf\u03c3\u03b7","about_author":"\u03a3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ad\u03b1\u03c2","about_plugin":"\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf","about_plugins":"\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1","about_license":"\u0386\u03b4\u03b5\u03b9\u03b1","about_help":"\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1","about_general":"\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac","about_title":"\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03bf TinyMCE","charmap_usage":"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c3\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03cc \u03ba\u03b1\u03b9 \u03b4\u03b5\u03be\u03af \u03b2\u03b5\u03bb\u03ac\u03ba\u03b9 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c0\u03bb\u03bf\u03b7\u03b3\u03b7\u03b8\u03b5\u03af\u03c4\u03b5","anchor_invalid":"\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b5\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 anchor.","accessibility_help":"\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1 \u03b3\u03b9\u03b1 \u03a0\u03c1\u03bf\u03c3\u03b2\u03b1\u03c3\u03b9\u03bc\u03cc\u03c4\u03b7\u03c4\u03b1","accessibility_usage_title":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ae \u03a7\u03c1\u03ae\u03c3\u03b7","invalid_color_value":"\u039b\u03ac\u03b8\u03bf\u03c2 \u03a4\u03b9\u03bc\u03ae \u03a7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js
new file mode 100644
index 000000000..6e5848187
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/en.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition Description",dt:"Definition Term ",samp:"Code Sample",code:"Code",blockquote:"Block Quote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"DIV",paragraph:"Paragraph",block:"Format",fontdefault:"Font Family","font_size":"Font Size","style_select":"Styles","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Block Quote","help_desc":"Help","newdocument_desc":"New Document","image_props_desc":"Image Properties","paste_desc":"Paste (Ctrl+V)","copy_desc":"Copy (Ctrl+C)","cut_desc":"Cut (Ctrl+X)","anchor_desc":"Insert/Edit Anchor","visualaid_desc":"show/Hide Guidelines/Invisible Elements","charmap_desc":"Insert Special Character","backcolor_desc":"Select Background Color","forecolor_desc":"Select Text Color","custom1_desc":"Your Custom Description Here","removeformat_desc":"Remove Formatting","hr_desc":"Insert Horizontal Line","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup Messy Code","image_desc":"Insert/Edit Image","unlink_desc":"Unlink","link_desc":"Insert/Edit Link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Increase Indent","outdent_desc":"Decrease Indent","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","justifyfull_desc":"Align Full","justifyright_desc":"Align Right","justifycenter_desc":"Align Center","justifyleft_desc":"Align Left","striketrough_desc":"Strikethrough","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js
new file mode 100644
index 000000000..e451f3774
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.advanced_dlg',{"link_list":"Link List","link_is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open Link in a New Window","link_target_same":"Open Link in the Same Window","link_target":"Target","link_url":"Link URL","link_title":"Insert/Edit Link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text Bottom","image_align_texttop":"Text Top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal Space","image_vspace":"Vertical Space","image_dimensions":"Dimensions","image_alt":"Image Description","image_list":"Image List","image_border":"Border","image_src":"Image URL","image_title":"Insert/Edit Image","charmap_title":"Select Special Character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named Colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette Colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color Picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a Color","code_wordwrap":"Word Wrap","code_title":"HTML Source Editor","anchor_name":"Anchor Name","anchor_title":"Insert/Edit Anchor","about_loaded":"Loaded Plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eo.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eo.js
new file mode 100644
index 000000000..6a875e504
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eo.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.advanced',{"underline_desc":"Substrekita (Ctrl U)","italic_desc":"Kursiva (Ctrl I)","bold_desc":"Grasa (Ctrl B)",dd:"Priskribo de la difino",dt:"Enhavo de la difino",samp:"Specimeno de kodo",code:"Kodo",blockquote:"Blokcita\u0135o",h6:"Titolo 6",h5:"Titolo 5",h4:"Titolo 4",h3:"Titolo 3",h2:"Titolo 2",h1:"Titolo 1",pre:"Anta\u016dformatita",address:"Adreso",div:"Div",paragraph:"Paragrafo",block:"Formatado",fontdefault:"Tiparo","font_size":"Grandeco","style_select":"Stiloj","more_colors":"Pliaj koloroj","toolbar_focus":"Iri al iloj - Alt Q, Iri al redaktilo - Alt-Z, Iri al la adreso de la elemento - Alt-X",newdocument:"\u0108u vi certas ke vi volas forvi\u015di \u0109ion?",path:"Adreso","clipboard_msg":"Kopii/eltondi/alglui ne estas disponebla en Mozilla nek Firefox. \u0108u vi volas pliajn informojn pri \u0109i tiu problemo?","blockquote_desc":"Blokcita\u0135o","help_desc":"Helpo","newdocument_desc":"Nova dokumento","image_props_desc":"Atributoj de bildo","paste_desc":"Alglui","copy_desc":"Kopii","cut_desc":"Eltondi","anchor_desc":"Enmeti/redakti ankron","visualaid_desc":"Alterni gvidilojn/nevideblajn elementojn","charmap_desc":"Enmeti specialajn signojn","backcolor_desc":"Elekti koloron de fono","forecolor_desc":"Elekti koloron de teksto","custom1_desc":"Enmetu \u0109i tie vian tajloritan priskribon","removeformat_desc":"Forigi formaton","hr_desc":"Enmeti horizontalan disigilon","sup_desc":"Supre","sub_desc":"Sube","code_desc":"Redakti fontokodon","cleanup_desc":"Senrubigi mal\u011dustan kodon","image_desc":"Enmeti/redakti bildon","unlink_desc":"Forigi ligilon","link_desc":"Enmeti/redakti ligilon","redo_desc":"Refari (Ctrl Y)","undo_desc":"Malfari (Ctrl Z)","indent_desc":"Pligrandigi krommar\u011denon","outdent_desc":"Malpligrandigi krommar\u011denon","numlist_desc":"Numerado","bullist_desc":"Buloj","justifyfull_desc":"\u011cisrandigi","justifyright_desc":"Dekstre liniigi","justifycenter_desc":"Centrigi","justifyleft_desc":"Maldekstre liniigi","striketrough_desc":"Strekita","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eo_dlg.js
new file mode 100644
index 000000000..40f0edf6e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.advanced_dlg',{"link_list":"Listo de ligiloj","link_is_external":"La entajpita adreso \u015dajne kondukas al ekstera ligilo. \u0108u vi volas aldoni la necesan prefikson http://?","link_is_email":"La entajpita adreso \u015dajnas retpo\u015dtadreso. \u0108u vi volas aldoni la necesan prefikson mailto:?","link_titlefield":"Titolo","link_target_blank":"Malfermi ligilon en novan fenestron","link_target_same":"Malfermi ligilon en la saman fenestron","link_target":"Celo","link_url":"Adreso de ligilo","link_title":"Enmeti/redakti ligilon","image_align_right":"Dekstre","image_align_left":"Maldekstre","image_align_textbottom":"Tekstosubo","image_align_texttop":"Tekstosupro","image_align_bottom":"Sube","image_align_middle":"Meze","image_align_top":"Supre","image_align_baseline":"Sur tekstlinio","image_align":"Liniigo","image_hspace":"Horizontala spaco","image_vspace":"Vertikala spaco","image_dimensions":"Dimensioj","image_alt":"Priskribo de bildo","image_list":"Listo de bildo","image_border":"Bordero","image_src":"Adreso de bildo","image_title":"Enmeti/redakti bildon","charmap_title":"Elekti tajloritajn signojn","colorpicker_name":"Nomo:","colorpicker_color":"Koloro:","colorpicker_named_title":"Tajloritaj Koloroj","colorpicker_named_tab":"Tajloritaj","colorpicker_palette_title":"Kolorpaletro","colorpicker_palette_tab":"Paletro","colorpicker_picker_title":"Kolorredaktilo","colorpicker_picker_tab":"Redaktilo","colorpicker_title":"Elektu koloron","code_wordwrap":"A\u016dtomata linisalto","code_title":"HTML-Redaktilo","anchor_name":"Nomo de ankro","anchor_title":"Enmeti/redakti ankron","about_loaded":"Instalitaj kromprogramoj","about_version":"Versio","about_author":"A\u016dtoro","about_plugin":"Kromprogramo","about_plugins":"Kromprogramoj","about_license":"Permesilo","about_help":"Helpo","about_general":"Pri","about_title":"Pri TinyMCE","anchor_invalid":"Bonvole, uzu validan nomon por la ankro.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/es.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/es.js
new file mode 100644
index 000000000..ef9f26472
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/es.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.advanced',{"underline_desc":"Subrayado (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negrita (Ctrl+B)",dd:"Descripci\u00f3n de definici\u00f3n",dt:"T\u00e9rmino de definici\u00f3n",samp:"Ejemplo de c\u00f3digo",code:"C\u00f3digo",blockquote:"Cita",h6:"Encabezado 6",h5:"Encabezado 5",h4:"Encabezado 4",h3:"Encabezado 3",h2:"Encabezado 2",h1:"Encabezado 1",pre:"Preformateado",address:"Direcci\u00f3n",div:"Div",paragraph:"P\u00e1rrafo",block:"Formato",fontdefault:"Fuente","font_size":"Tama\u00f1o","style_select":"Estilos","more_colors":"M\u00e1s colores","toolbar_focus":"Ir a los botones de herramientas - Alt+Q, Ir al editor - Alt-Z, Ir a la ruta del elemento - Alt-X",newdocument:" \u00bfSeguro que desea limpiar todo el contenido?",path:"Ruta","clipboard_msg":"Copiar/Cortar/Pegar no se encuentra disponible en Mozilla y Firefox.\n \u00bfQuiere m\u00e1s informaci\u00f3n sobre este tema?","blockquote_desc":"Cita","help_desc":"Ayuda","newdocument_desc":"Nuevo documento","image_props_desc":"Propiedades de imagen","paste_desc":"Pegar","copy_desc":"Copiar","cut_desc":"Cortar","anchor_desc":"Insertar/editar ancla","visualaid_desc":"Mostrar/ocultar l\u00ednea de gu\u00eda/elementos invisibles","charmap_desc":"Insertar caracteres personalizados","backcolor_desc":"Elegir color de fondo","forecolor_desc":"Elegir color del texto","custom1_desc":"Su descripci\u00f3n personal aqu\u00ed","removeformat_desc":"Limpiar formato","hr_desc":"Insertar regla horizontal","sup_desc":"Super\u00edndice","sub_desc":"Sub\u00edndice","code_desc":"Editar c\u00f3digo HTML","cleanup_desc":"Limpiar c\u00f3digo basura","image_desc":"Insertar/editar imagen","unlink_desc":"Quitar hiperv\u00ednculo","link_desc":"Insertar/editar hiperv\u00ednculo","redo_desc":"Rehacer (Ctrl+Y)","undo_desc":"Deshacer (Ctrl+Z)","indent_desc":"Aumentar sangr\u00eda","outdent_desc":"Reducir sangr\u00eda","numlist_desc":"Lista ordenada","bullist_desc":"Lista desordenada","justifyfull_desc":"Justificar","justifyright_desc":"Alinear a la derecha","justifycenter_desc":"Alinear al centro","justifyleft_desc":"Alinear a la izquierda","striketrough_desc":"Tachado","help_shortcut":"Presiones ALT-F10 para la barra de herramientas. Presione ALT-0 para ayuda.","rich_text_area":"\u00c1rea de texto con formato","shortcuts_desc":"Ayuda de accesibilidad",toolbar:"Barra de Herramientas","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/es_dlg.js
new file mode 100644
index 000000000..923c34b75
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.advanced_dlg',{"link_list":"Lista de hiperv\u00ednculos","link_is_external":"La URL que introdujo parece ser un v\u00ednculo externo, \u00bfdesea agregar el prefijo http:// necesario?","link_is_email":"La URL que introdujo parece ser una direcci\u00f3n de email, \u00bfdesea agregar el prefijo mailto: necesario?","link_titlefield":"T\u00edtulo","link_target_blank":"Abrir v\u00ednculo en una ventana nueva","link_target_same":"Abrir v\u00ednculo en la misma ventana","link_target":"Destino","link_url":"URL del hiperv\u00ednculo","link_title":"Insertar/editar hiperv\u00ednculo","image_align_right":"Derecha","image_align_left":"Izquierda","image_align_textbottom":"Texto debajo","image_align_texttop":"Texto arriba","image_align_bottom":"Debajo","image_align_middle":"Medio","image_align_top":"Arriba","image_align_baseline":"L\u00ednea base","image_align":"Alineaci\u00f3n","image_hspace":"Espacio horizontal","image_vspace":"Espacio vertical","image_dimensions":"Dimensi\u00f3n","image_alt":"Descripci\u00f3n de la Imagen","image_list":"Lista de la Imagen","image_border":"Borde","image_src":"URL de la Imagen","image_title":"Insertar/editar imagen","charmap_title":"Elegir caracter personalizado","colorpicker_name":"Nombre:","colorpicker_color":"Color:","colorpicker_named_title":"Colores nombrados","colorpicker_named_tab":"Nombrados","colorpicker_palette_title":"Paleta de colores","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Paleta de color","colorpicker_picker_tab":"Selector","colorpicker_title":"Elegir color","code_wordwrap":"Ajustar al margen","code_title":"Editor del c\u00f3digo fuente HTML","anchor_name":"Nombre del ancla","anchor_title":"Insertar/editar ancla","about_loaded":"Complementos cargados","about_version":"Versi\u00f3n","about_author":"Autor","about_plugin":"Complemento","about_plugins":"Complementos","about_license":"Licencia","about_help":"Ayuda","about_general":"Acerca de ","about_title":"Acerca de TinyMCE","charmap_usage":"Use las flechas para navegar","anchor_invalid":"Especifique un nombre v\u00e1lido para liga","accessibility_help":"Ayuda sobre Accesibilidad","accessibility_usage_title":"Uso General","invalid_color_value":"valor invalido de color"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/et.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/et.js
new file mode 100644
index 000000000..5c0c7937f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/et.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.advanced',{"underline_desc":"Allajoonitud (Ctrl+U)","italic_desc":"Kursiiv (Ctrl+I)","bold_desc":"Rasvane (Ctrl+B)",dd:"Defineeringu kirjeldus",dt:"Defineeringu tingimus",samp:"Koodi n\u00e4ide",code:"Kood",blockquote:"Plokkviide",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Eelformeeritud",address:"Aadress",div:"Div",paragraph:"Paragraaf",block:"Formaat",fontdefault:"Font","font_size":"Fondi suurus","style_select":"Stiilid","more_colors":"Rohkem v\u00e4rve","toolbar_focus":"H\u00fcppa t\u00f6\u00f6riista nuppudele - Alt+Q, H\u00fcppa redigeerijale - Alt-Z, H\u00fcppa elemendi teele - Alt-X",newdocument:"Oled sa kindel, et tahad kustutada k\u00f5ik sisud?",path:"Tee","clipboard_msg":"Kopeeri/L\u00f5ika/Kleebi ei ole Mozillas ja Firefoxis saadaval. Kas soovid rohkem infot selle probleemi kohta?","blockquote_desc":"Plokkviide","help_desc":"Abi","newdocument_desc":"Uus dokument","image_props_desc":"Pildi kirjeldus","paste_desc":"Kleebi","copy_desc":"Kopeeri","cut_desc":"L\u00f5ika","anchor_desc":"Sisesta/redigeeri ankur","visualaid_desc":"L\u00fclita \u00fcmber juhtjooned/n\u00e4htamatud elemendid","charmap_desc":"Sisesta kohandatud kirjam\u00e4rk","backcolor_desc":"Vali tausta v\u00e4rv","forecolor_desc":"Vali teksti v\u00e4rv","custom1_desc":"Teie kohandatud kirjeldus siia","removeformat_desc":"Eemalda vormindus","hr_desc":"Sisesta horisontaalne joonlaud","sup_desc":"\u00dclaindeks","sub_desc":"Alaindeks","code_desc":"Redigeeri HTML l\u00e4htekoodi","cleanup_desc":"Puhasta segane kood","image_desc":"Sisesta/redigeeri pilt","unlink_desc":"Eemalda link","link_desc":"Sisesta/redigeeri link","redo_desc":"Tee uuesti (Ctrl+Y)","undo_desc":"V\u00f5ta tagasi (Ctrl+Z)","indent_desc":"Taanda sisse","outdent_desc":"Taanda v\u00e4lja","numlist_desc":"Korrap\u00e4rane loetelu","bullist_desc":"Ebakorrap\u00e4rane loetelu","justifyfull_desc":"T\u00e4isjoondus","justifyright_desc":"Parem joondus","justifycenter_desc":"Keskjoondus","justifyleft_desc":"Vasak joondus","striketrough_desc":"L\u00e4bijoonitud","help_shortcut":"Vajuta ALT-F10 t\u00f6\u00f6riistariba jaoks. Vajuta ALT-0 abi saamiseks","rich_text_area":"Vormindatud tekstiala","shortcuts_desc":"K\u00e4ttesaadavus spikker",toolbar:"T\u00f6\u00f6riistariba","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/et_dlg.js
new file mode 100644
index 000000000..2226a12fd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.advanced_dlg',{"link_list":"Lingi loetelu","link_is_external":"URL, mille sisestasite, tundub olevat v\u00e4line link, kas soovite, et lisataks http:// eesliite?","link_is_email":"URL, mille te sisestasite, tundub olevat emaili aadress, kas soovite, et lisataks mailto: eesliite?","link_titlefield":"Tiitel","link_target_blank":"Ava link uues aknas","link_target_same":"Ava link samas aknas","link_target":"Sihtala","link_url":"Link URL","link_title":"Sisesta/redigeeri link","image_align_right":"Parem","image_align_left":"Vasak","image_align_textbottom":"Teksti p\u00f5hi","image_align_texttop":"Teksti tipp","image_align_bottom":"Alumine","image_align_middle":"Keskmine","image_align_top":"\u00dclemine","image_align_baseline":"Kirjajoondus","image_align":"Reastus","image_hspace":"Horisontaalne vahe","image_vspace":"Vertikaalne vahe","image_dimensions":"Dimensioonid","image_alt":"Pildi kirjeldus","image_list":"Pildi loend","image_border":"Raam","image_src":"Pildi URL","image_title":"Sisestal/redigeeri pilt","charmap_title":"Vali kohandatud t\u00e4hem\u00e4rk","colorpicker_name":"Nimi:","colorpicker_color":"V\u00e4rv:","colorpicker_named_title":"Nimetatud v\u00e4rvid","colorpicker_named_tab":"Nimetatud","colorpicker_palette_title":"Palett v\u00e4rvid","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"V\u00e4rvi korjaja","colorpicker_picker_tab":"Korjaja","colorpicker_title":"Vali v\u00e4rv","code_wordwrap":"S\u00f5na pakkimine","code_title":"HTML koodi redaktor","anchor_name":"Ankru nimi","anchor_title":"Sisesta/redigeeri ankur","about_loaded":"Laetud lisad","about_version":"Versioon","about_author":"Autor","about_plugin":"Lisa","about_plugins":"Lisad","about_license":"Litsents","about_help":"Abi","about_general":"Teave","about_title":"Teave TinyMCE kohta","charmap_usage":"Kasuta navigeerimiseks vasak ja parem nooli.","anchor_invalid":"Palun m\u00e4\u00e4ra korrektne ankru nimi.","accessibility_help":"K\u00e4ttesaadavus spikker","accessibility_usage_title":"\u00dcldine kasutus"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eu.js
new file mode 100644
index 000000000..f19e37d02
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.advanced',{"underline_desc":"Azpimarratua (Ctrl+U)","italic_desc":"Etzana (Ctrl+I)","bold_desc":"Beltza (Ctrl+B)",dd:"Definizioa (dd)",dt:"Definizio terminoa (dt) ",samp:"Kode adibidea",code:"Kodea",blockquote:"Zita",h6:"6. goiburua",h5:"5. goiburua",h4:"4. goiburua",h3:"3. goiburua",h2:"2. goiburua",h1:"1. goiburua",pre:"Aurreformateatua",address:"Helbidea",div:"Div",paragraph:"Paragrafoa",block:"Formatua",fontdefault:"Letra-mota","font_size":"Letra-tamaina","style_select":"Estiloak","anchor_delta_height":"Ainguraren altuera","anchor_delta_width":"Ainguraren zabalera","charmap_delta_height":"Karaktere maparen altuera","charmap_delta_width":"Karaktere maparen zabalera","colorpicker_delta_height":"Kolore hautatzailearen altuera","colorpicker_delta_width":"Kolore hautatzailearen zabalera","link_delta_height":"Loturaren altuera","link_delta_width":"Loturaren zabalera","image_delta_height":"Irudiaren altuera","image_delta_width":"Irudiaren zabalera","more_colors":"Kolore gehiago","toolbar_focus":"Tresnaren botoietara joan - Alt+Q, Editorera joan - Alt-Z, Elementuaren bidera joan - Alt-X",newdocument:"Eduki guztia kendu nahi duzu?",path:"Bidea","clipboard_msg":"Kopiatu/Ebaki/Itsatsi ez dago Mozilla eta Firefoxen.\nHonen inguruko informazioa nahi duzu?","blockquote_desc":"Zita","help_desc":"Laguntza","newdocument_desc":"Dokumentu berria","image_props_desc":"Irudiaren aukerak","paste_desc":"Itsatsi","copy_desc":"Kopiatu","cut_desc":"Ebaki","anchor_desc":"Aingura txertatu/editatu","visualaid_desc":"Elementu ikustezinak ikustarazi/ezkutatu","charmap_desc":"Karaktere berezia txertatu","backcolor_desc":"Atzeko kolorea aukeratu","forecolor_desc":"Testuaren kolorea aukeratu","custom1_desc":"Nahi duzun deskribapena hemen idatzi","removeformat_desc":"Formatua kendu","hr_desc":"Lerro horizontala gehitu","sup_desc":"Goi-indizea","sub_desc":"Azpi-indizea","code_desc":"HTML kodea editatu","cleanup_desc":"Kode zikina garbitu","image_desc":"Irudia txertatu/editatu","unlink_desc":"Lotura kendu","link_desc":"Lotura txertatu/editatu","redo_desc":"Berregin (Ctrl+Y)","undo_desc":"Desegin (Ctrl+Z)","indent_desc":"Koska gehitu","outdent_desc":"Koska kendu","numlist_desc":"Zerrenda ordenatua","bullist_desc":"Zerrenda","justifyfull_desc":"Testua justifikatu","justifyright_desc":"Eskuinean alineatu","justifycenter_desc":"Erdian zentratu","justifyleft_desc":"Ezkerrean alineatu","striketrough_desc":"Gainetik marra duena","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eu_dlg.js
new file mode 100644
index 000000000..010174841
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.advanced_dlg',{"link_list":"Lotura zerrenda","link_is_external":"Sartutako helbideak kanpoko webgune batena dirudi, aurretik http:// gehitzea nahi duzu?","link_is_email":"Sartutako helbideak e-posta bat dirudi, aurretik mailto: gehitzea nahi duzu?","link_titlefield":"Izenburua","link_target_blank":"Lotura leiho berrian ireki","link_target_same":"Lotura leiho berean ireki","link_target":"Helburua","link_url":"Loturaren URLa","link_title":"Lotura txertatu/editatu","image_align_right":"Eskuinean","image_align_left":"Ezkerrean","image_align_textbottom":"Testua behean","image_align_texttop":"Testua goian","image_align_bottom":"Behean","image_align_middle":"Tartean","image_align_top":"Goian","image_align_baseline":"Oinarriko marra","image_align":"Alineazioa","image_hspace":"Tarte horizontala","image_vspace":"Tarte bertikala","image_dimensions":"Tamaina","image_alt":"Irudiaren deskribapena","image_list":"Irudi zerrenda","image_border":"Inguruko marra","image_src":"Irudiaren URL helbidea","image_title":"Irudia txertatu/editatu","charmap_title":"Karaktere berezia aukeratu","colorpicker_name":"Izena:","colorpicker_color":"Kolorea:","colorpicker_named_title":"Izendun koloreak","colorpicker_named_tab":"Izendunak","colorpicker_palette_title":"Kolore paleta","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Kolore aukeratzailea","colorpicker_picker_tab":"Aukeratu","colorpicker_title":"Kolorea aukeratu","code_wordwrap":"Itzulbiratu","code_title":"HTML kodearen editorea","anchor_name":"Ainguraren izena","anchor_title":"Aingura txertatu/editatu","about_loaded":"Kargatutako gehigarriak","about_version":"Bertsioa","about_author":"Egilea","about_plugin":"Gehiagarria","about_plugins":"Gehigarriak","about_license":"Lizentzia","about_help":"Laguntza","about_general":"Honi buruz","about_title":"TinyMCEri buruz","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fa.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fa.js
new file mode 100644
index 000000000..94af922b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fa.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.advanced',{"underline_desc":"\u0645\u062a\u0646 \u0632\u06cc\u0631 \u062e\u0637 \u062f\u0627\u0631 (Ctrl+U)","italic_desc":"\u0645\u062a\u0646 \u0645\u0648\u0631\u0628 (Ctrl+I)","bold_desc":"\u0645\u062a\u0646 \u0636\u062e\u06cc\u0645 (Ctrl+B)",dd:"\u062a\u0639\u0631\u06cc\u0641 \u062a\u0648\u0636\u06cc\u062d",dt:"\u062a\u0639\u0631\u06cc\u0641 \u0648\u0627\u0698\u0647 ",samp:"\u0646\u0645\u0648\u0646\u0647 \u06a9\u062f",code:"\u06a9\u062f",blockquote:"\u0628\u0644\u0648\u06a9 \u0646\u0642\u0644 \u0642\u0648\u0644",h6:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc 6",h5:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc 5",h4:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc 4",h3:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc 3",h2:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc 2",h1:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc \u06f1",pre:"\u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0632 \u0642\u0628\u0644",address:"\u0622\u062f\u0631\u0633",div:"Div",paragraph:"\u067e\u0627\u0631\u0627\u06af\u0631\u0627\u0641",block:"\u0642\u0627\u0644\u0628",fontdefault:"\u0646\u0648\u0639 \u0642\u0644\u0645","font_size":"\u0627\u0646\u062f\u0627\u0632\u0647 \u0642\u0644\u0645","style_select":"\u0627\u0633\u062a\u0627\u06cc\u0644 \u0647\u0627","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"\u0631\u0646\u06af \u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631","toolbar_focus":"\u067e\u0631\u0634 \u0628\u0647 \u062f\u06a9\u0645\u0647 \u0647\u0627\u06cc \u0627\u0628\u0632\u0627\u0631 - Alt+Q \u060c \u067e\u0631\u0634 \u0628\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 - Alt-Z \u060c \u067e\u0631\u0634 \u0628\u0647 \u0645\u0633\u06cc\u0631 \u0639\u0646\u0635\u0631 - Alt-X",newdocument:"\u0622\u06cc\u0627 \u0634\u0645\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u062a\u0645\u0627\u0645\u06cc \u0645\u062d\u062a\u0648\u0627 \u0631\u0627 \u067e\u0627\u06a9 \u06a9\u0646\u06cc\u062f\u061f",path:"\u0645\u0633\u06cc\u0631","clipboard_msg":"\u06a9\u067e\u06cc(Copy)/\u0628\u0631\u0634 (Cut)/\u0686\u0633\u0628\u0627\u0646\u062f\u0646 (Paste) \u062f\u0631 Mozilla \u0648 Firefox \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633 \u0646\u0645\u06cc \u0628\u0627\u0634\u062f.\\r\n\u0622\u06cc\u0627 \u0634\u0645\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f\u061f","blockquote_desc":"\u0628\u0644\u0648\u06a9 \u0646\u0642\u0644 \u0642\u0648\u0644","help_desc":"\u0631\u0627\u0647\u0646\u0645\u0627","newdocument_desc":"\u0633\u0646\u062f \u062c\u062f\u06cc\u062f","image_props_desc":"\u0645\u0634\u062e\u0635\u0627\u062a \u062a\u0635\u0648\u06cc\u0631","paste_desc":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 (Paste)","copy_desc":"\u06a9\u067e\u06cc (Copy)","cut_desc":"\u0628\u0631\u0634 (Cut)","anchor_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u0646\u06af\u0631","visualaid_desc":"\u0646\u0645\u0627\u06cc\u0634/\u0639\u062f\u0645 \u0646\u0645\u0627\u06cc\u0634 \u0639\u0646\u0627\u0635\u0631 \u062e\u0637\u0648\u0637 \u0631\u0627\u0647\u0646\u0645\u0627/\u063a\u06cc\u0631 \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0627\u0646","charmap_desc":"\u062f\u0631\u062c \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0648\u06cc\u0698\u0647","backcolor_desc":"\u0627\u0646\u062a\u062e\u0627\u0628 \u0631\u0646\u06af \u0632\u0645\u06cc\u0646\u0647","forecolor_desc":"\u0627\u0646\u062a\u062e\u0627\u0628 \u0631\u0646\u06af \u0645\u062a\u0646","custom1_desc":"\u062a\u0648\u0636\u06cc\u062d \u0633\u0641\u0627\u0631\u0634\u06cc \u0634\u0645\u0627 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627","removeformat_desc":"\u062d\u0630\u0641 \u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc","hr_desc":"\u062f\u0631\u062c \u062e\u0637 \u0627\u0641\u0642\u06cc","sup_desc":"\u0628\u0627\u0644\u0627 \u0646\u0648\u06cc\u0633","sub_desc":"\u067e\u0627\u06cc\u06cc\u0646 \u0646\u0648\u06cc\u0633","code_desc":"\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0633\u0648\u0631\u0633 HTML","cleanup_desc":"\u067e\u0627\u06a9 \u0633\u0627\u0632\u06cc \u06a9\u062f \u0647\u0627\u06cc \u0628\u0647\u0645 \u062e\u0648\u0631\u062f\u0647","image_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631","unlink_desc":"\u063a\u06cc\u0631 \u0644\u06cc\u0646\u06a9 \u06a9\u0631\u062f\u0646","link_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u06cc\u0646\u06a9","redo_desc":"\u0631\u0641\u062a\u0646 \u0628\u0647 \u0639\u0645\u0644 \u0628\u0639\u062f (Ctrl Y)","undo_desc":"\u0628\u0631\u06af\u0634\u062a \u0628\u0647 \u0639\u0645\u0644 \u0642\u0628\u0644 (Ctrl Z)","indent_desc":"\u062a\u0648\u0631\u0641\u062a\u06af\u06cc","outdent_desc":"\u0628\u06cc\u0631\u0648\u0646 \u0622\u0645\u062f\u06af\u06cc","numlist_desc":"\u0644\u06cc\u0633\u062a \u0645\u0631\u062a\u0628","bullist_desc":"\u0644\u06cc\u0633\u062a \u0646\u0627\u0645\u0631\u062a\u0628","justifyfull_desc":"\u0647\u0645 \u062a\u0631\u0627\u0632 \u06a9\u0631\u062f\u0646","justifyright_desc":"\u062a\u0631\u0627\u0632 \u0631\u0627\u0633\u062a","justifycenter_desc":"\u062a\u0631\u0627\u0632 \u0648\u0633\u0637","justifyleft_desc":"\u062a\u0631\u0627\u0632 \u0686\u067e","striketrough_desc":"\u062e\u0637 \u0648\u0633\u0637","help_shortcut":"\u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT-F10 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0628\u0641\u0634\u0627\u0631\u06cc\u062f. \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT-0 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u0627\u0647\u0646\u0645\u0627","rich_text_area":"\u0645\u062a\u0646 \u063a\u0646\u06cc","shortcuts_desc":"\u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc",toolbar:"\u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fa_dlg.js
new file mode 100644
index 000000000..3fa6a8a77
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.advanced_dlg',{"link_list":"\u0644\u06cc\u0633\u062a \u0644\u06cc\u0646\u06a9","link_is_external":"\u0622\u062f\u0631\u0633\u06cc \u06a9\u0647 \u0634\u0645\u0627 \u0648\u0627\u0631\u062f \u0646\u0645\u0648\u062f\u0647 \u0627\u06cc\u062f \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0622\u06cc\u062f \u06a9\u0647 \u0644\u06cc\u0646\u06a9 \u062e\u0627\u0631\u062c\u06cc \u0645\u06cc \u0628\u0627\u0634\u062f \u060c \u0622\u06cc\u0627 \u0645\u0627\u06cc\u0644\u06cc\u062f \u062a\u0627 \u067e\u06cc\u0634\u0648\u0646\u062f \u0644\u0627\u0632\u0645\u0647 //:http \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f\u061f","link_is_email":"\u0622\u062f\u0631\u0633\u06cc \u06a9\u0647 \u0634\u0645\u0627 \u0648\u0627\u0631\u062f \u0646\u0645\u0648\u062f\u0647 \u0627\u06cc\u062f \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0622\u06cc\u062f \u06a9\u0647 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644 \u0645\u06cc \u0628\u0627\u0634\u062f \u060c \u0622\u06cc\u0627 \u0645\u0627\u06cc\u0644\u06cc\u062f \u062a\u0627 \u067e\u06cc\u0634\u0648\u0646\u062f \u0627\u062c\u0628\u0627\u0631\u06cc \u0644\u0627\u0632\u0645\u0647 :mailto \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f\u061f","link_titlefield":"\u0639\u0646\u0648\u0627\u0646","link_target_blank":"\u0628\u0627\u0632 \u0634\u062f\u0646 \u0644\u06cc\u0646\u06a9 \u062f\u0631 \u06cc\u06a9 \u067e\u0646\u062c\u0631\u0647 \u062c\u062f\u06cc\u062f","link_target_same":"\u0628\u0627\u0632\u0634\u062f\u0646 \u0644\u06cc\u0646\u06a9 \u062f\u0631 \u0647\u0645\u0627\u0646 \u067e\u0646\u062c\u0631\u0647","link_target":"\u0645\u0642\u0635\u062f (Target)","link_url":"\u0622\u062f\u0631\u0633 \u0644\u06cc\u0646\u06a9","link_title":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u06cc\u0646\u06a9","image_align_right":"\u0631\u0627\u0633\u062a","image_align_left":"\u0686\u067e","image_align_textbottom":"\u067e\u0627\u06cc\u06cc\u0646 \u0645\u062a\u0646","image_align_texttop":"\u0628\u0627\u0644\u0627 \u0645\u062a\u0646","image_align_bottom":"\u067e\u0627\u06cc\u06cc\u0646","image_align_middle":"\u0648\u0633\u0637","image_align_top":"\u0628\u0627\u0644\u0627","image_align_baseline":"\u062e\u0637 \u067e\u0627\u06cc\u0647","image_align":"\u062a\u0631\u0627\u0632","image_hspace":"\u0641\u0627\u0635\u0644\u0647 \u0627\u0641\u0642\u06cc","image_vspace":"\u0641\u0627\u0635\u0644\u0647 \u0639\u0645\u0648\u062f\u06cc","image_dimensions":"\u0627\u0628\u0639\u0627\u062f","image_alt":"\u062a\u0648\u0636\u06cc\u062d \u062a\u0635\u0648\u06cc\u0631","image_list":"\u0644\u06cc\u0633\u062a \u062a\u0635\u0648\u06cc\u0631","image_border":"\u062d\u0627\u0634\u06cc\u0647","image_src":"\u0622\u062f\u0631\u0633 \u062a\u0635\u0648\u06cc\u0631","image_title":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631","charmap_title":"\u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0648\u06cc\u0698\u0647","colorpicker_name":"\u0646\u0627\u0645:","colorpicker_color":"\u0631\u0646\u06af:","colorpicker_named_title":"\u0631\u0646\u06af \u0647\u0627\u06cc \u0646\u0627\u0645 \u062f\u0627\u0631","colorpicker_named_tab":"\u0646\u0627\u0645 \u062f\u0627\u0631","colorpicker_palette_title":"\u0631\u0646\u06af \u0647\u0627\u06cc \u0627\u0644\u06af\u0648","colorpicker_palette_tab":"\u0627\u0644\u06af\u0648","colorpicker_picker_title":"\u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0646\u062f\u0647 \u0631\u0646\u06af","colorpicker_picker_tab":"\u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0646\u062f\u0647","colorpicker_title":"\u0627\u0646\u062a\u062e\u0627\u0628 \u06cc\u06a9 \u0631\u0646\u06af","code_wordwrap":"\u0634\u06a9\u0633\u062a\u0646 \u062e\u0637\u0648\u0637","code_title":"\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0633\u0648\u0631\u0633 HTML","anchor_name":"\u0646\u0627\u0645 \u0644\u0646\u06af\u0631 (Anchor)","anchor_title":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u0646\u06af\u0631 (Anchor)","about_loaded":"\u0627\u0644\u062d\u0627\u0642\u0627\u062a \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647","about_version":"\u0646\u0633\u062e\u0647","about_author":"\u0645\u0624\u0644\u0641","about_plugin":"\u0627\u0644\u062d\u0627\u0642\u0647","about_plugins":"\u0627\u0644\u062d\u0627\u0642\u0627\u062a","about_license":"\u0645\u062c\u0648\u0632","about_help":"\u0631\u0627\u0647\u0646\u0645\u0627","about_general":"\u062f\u0631\u0628\u0627\u0631\u0647","about_title":"\u062f\u0631\u0628\u0627\u0631\u0647 TinyMCE","charmap_usage":"\u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0686\u067e \u0648 \u0631\u0627\u0633\u062a \u062c\u0647\u062a \u067e\u06cc\u0645\u0627\u06cc\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f","anchor_invalid":"\u0644\u0637\u0641\u0627 \u06cc\u06a9 \u0646\u0627\u0645 \u0645\u0639\u062a\u0628\u0631 \u0628\u0631\u0627\u06cc \u0644\u0646\u06af\u0631 (anchor) \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.","accessibility_help":"\u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc","accessibility_usage_title":"\u0637\u0631\u06cc\u0642\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0639\u0645\u0648\u0645\u06cc","invalid_color_value":"\u06a9\u062f \u0631\u0646\u06af \u0646\u0627\u0645\u0639\u062a\u0628\u0631"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fi.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fi.js
new file mode 100644
index 000000000..2edb8f6a4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.advanced',{"underline_desc":"Alleviivattu (Ctrl+U)","italic_desc":"Kursivoitu (Ctrl+I)","bold_desc":"Lihavoitu (Ctrl+B)",dd:"M\u00e4\u00e4rittelyn kuvaus",dt:"M\u00e4\u00e4rittelyn ehto ",samp:"Koodiesimerkki",code:"Koodi",blockquote:"Pitk\u00e4 lainaus",h6:"Otsikko 6",h5:"Otsikko 5",h4:"Otsikko 4",h3:"Otsikko 3",h2:"Otsikko 2",h1:"Otsikko 1",pre:"Esimuotoiltu (pre)",address:"Osoite",div:"Div",paragraph:"Kappale",block:"Muotoilu",fontdefault:"Kirjasin","font_size":"Kirjasinkoko","style_select":"Tyylit","more_colors":"Enemm\u00e4n v\u00e4rej\u00e4","toolbar_focus":"Siirry ty\u00f6kaluihin - Alt+Q, Siirry tekstieditoriin - Alt-Z, Siirry elementin polkuun - Alt-X",newdocument:"Haluatko varmasti tyhjent\u00e4\u00e4 kaiken sis\u00e4ll\u00f6n?",path:"Polku","clipboard_msg":"Kopioi/Leikkaa/Liit\u00e4 -painikkeet eiv\u00e4t toimi Mozilla ja Firefox -selaimilla. Voit kuitenkin k\u00e4ytt\u00e4\u00e4 n\u00e4pp\u00e4inyhdistelmi\u00e4 kopioimiseen (Ctrl+C), leikkaamiseen (Ctrl+X) ja liitt\u00e4miseen (Ctrl+V). Haluatko lis\u00e4\u00e4 tietoa?","blockquote_desc":"Pitk\u00e4 lainaus","help_desc":"Ohje","newdocument_desc":"Uusi tiedosto","image_props_desc":"Kuvan ominaisuudet","paste_desc":"Liit\u00e4","copy_desc":"Kopioi","cut_desc":"Leikkaa","anchor_desc":"Lis\u00e4\u00e4/Muokkaa ankkuri","visualaid_desc":"Suuntaviivat/N\u00e4kym\u00e4tt\u00f6m\u00e4t elementit","charmap_desc":"Lis\u00e4\u00e4 erikoismerkki","backcolor_desc":"Valitse taustan v\u00e4ri","forecolor_desc":"Valitse tekstin v\u00e4ri","custom1_desc":"Oma kuvauksesi t\u00e4h\u00e4n","removeformat_desc":"Poista muotoilu","hr_desc":"Lis\u00e4\u00e4 vaakasuora viivain","sup_desc":"Yl\u00e4indeksi","sub_desc":"Alaindeksi","code_desc":"Muokkaa HTML-koodia","cleanup_desc":"Siisti sekainen koodi","image_desc":"Lis\u00e4\u00e4/muuta kuva","unlink_desc":"Poista linkki","link_desc":"Lis\u00e4\u00e4/muuta linkki","redo_desc":"Tee uudelleen (Ctrl+Y)","undo_desc":"Peru (Ctrl+Z)","indent_desc":"Sisenn\u00e4","outdent_desc":"Loitonna","numlist_desc":"J\u00e4rjestetty lista","bullist_desc":"J\u00e4rjest\u00e4m\u00e4t\u00f6n lista","justifyfull_desc":"Tasattu","justifyright_desc":"Tasaus oikealle","justifycenter_desc":"Keskitetty","justifyleft_desc":"Tasaus vasemmalle","striketrough_desc":"Yliviivattu","help_shortcut":"Paina ALT F10 n\u00e4hd\u00e4ksesi ty\u00f6kalurivin. Paina ALT-0 n\u00e4hd\u00e4ksesi ohjeen.","rich_text_area":"Rikastettu tekstialue","shortcuts_desc":"Saavutettavuusohje",toolbar:"Ty\u00f6kalurivi","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fi_dlg.js
new file mode 100644
index 000000000..89c0b0bec
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.advanced_dlg',{"link_list":"Linkkilista","link_is_external":"Antamasi osoite n\u00e4ytt\u00e4\u00e4 johtavan ulkopuoliselle sivustolle. Haluatko lis\u00e4t\u00e4 linkin eteen http://-etuliitteen? (suositus)","link_is_email":"Antamasi osoite n\u00e4ytt\u00e4\u00e4 olevan s\u00e4hk\u00f6postiosoite. Haluatko lis\u00e4t\u00e4 siihen mailto:-etuliitteen?","link_titlefield":"Otsikko","link_target_blank":"Avaa linkki uuteen ikkunaan","link_target_same":"Avaa linkki samassa ikkunassa","link_target":"Kohde","link_url":"Linkin osoite","link_title":"Lis\u00e4\u00e4/muuta linkki","image_align_right":"Oikealle","image_align_left":"Vasemmalle","image_align_textbottom":"Tekstin alaosaan","image_align_texttop":"Tekstin yl\u00e4osaan","image_align_bottom":"Alas","image_align_middle":"Keskelle","image_align_top":"Yl\u00f6s","image_align_baseline":"Tekstin tasossa","image_align":"Tasaus","image_hspace":"Vaakasuuntainen tila","image_vspace":"Pystysuuntainen tila","image_dimensions":"Mitat","image_alt":"Kuvan kuvaus","image_list":"Kuvalista","image_border":"Reunus","image_src":"Kuvan osoite","image_title":"Lis\u00e4\u00e4/muokkaa kuvaa","charmap_title":"Valitse erikoismerkki","colorpicker_name":"Nimi:","colorpicker_color":"V\u00e4ri:","colorpicker_named_title":"Nimetyt v\u00e4rit","colorpicker_named_tab":"Nimetty","colorpicker_palette_title":"V\u00e4ripaletti","colorpicker_palette_tab":"Paletti","colorpicker_picker_title":"V\u00e4rin valitsin","colorpicker_picker_tab":"Valitsin","colorpicker_title":"Valitse v\u00e4ri","code_wordwrap":"Automaattinen rivinvaihto","code_title":"HTML-koodin muokkaus","anchor_name":"Ankkurin nimi","anchor_title":"Liit\u00e4/muokkaa ankkuria","about_loaded":"Ladatut lis\u00e4osat","about_version":"Versio","about_author":"Kirjoittaja","about_plugin":"Lis\u00e4osa","about_plugins":"Lis\u00e4osat","about_license":"Lisenssi","about_help":"Ohje","about_general":"Tietoja","about_title":"Tietoja TinyMCE:st\u00e4","charmap_usage":"K\u00e4yt\u00e4 vasenta ja oikeata nuolin\u00e4pp\u00e4int\u00e4 navigointiin.","anchor_invalid":"Ole hyv\u00e4 ja anna hyv\u00e4ksytty ankkurin nimi.","accessibility_help":"Saavutettavuusohje","accessibility_usage_title":"Yleinen k\u00e4ytt\u00f6","invalid_color_value":"Virheellinen v\u00e4riarvo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fr.js
new file mode 100644
index 000000000..1e91abbc1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.advanced',{"underline_desc":"Soulign\u00e9 (Ctrl+U)","italic_desc":"Italique (Ctrl+I)","bold_desc":"Gras (Ctrl+B)",dd:"D\u00e9finition du terme",dt:"Terme \u00e0 d\u00e9finir",samp:"Exemple de code",code:"Code",blockquote:"Bloc de citation",h6:"Titre 6",h5:"Titre 5",h4:"Titre 4",h3:"Titre 3",h2:"Titre 2",h1:"Titre 1",pre:"Pr\u00e9format\u00e9",address:"Adresse",div:"Div",paragraph:"Paragraphe",block:"Format",fontdefault:"Police","font_size":"Taille police","style_select":"Styles","more_colors":"Plus de couleurs","toolbar_focus":"Atteindre les boutons de l\'\u00e9diteur - Alt+Q, Aller \u00e0 l\'\u00e9diteur - Alt-Z, Aller au chemin de l\'\u00e9l\u00e9ment - Alt-X",newdocument:"\u00cates-vous s\u00fbr de vouloir effacer l\'int\u00e9gralit\u00e9 du document ?",path:"Chemin","clipboard_msg":"Les fonctions Copier/Couper/Coller ne sont pas valables sur Mozilla et Firefox.\nSouhaitez-vous avoir plus d\'informations sur ce sujet ?","blockquote_desc":"Citation","help_desc":"Aide","newdocument_desc":"Nouveau document","image_props_desc":"Propri\u00e9t\u00e9s de l\'image","paste_desc":"Coller","copy_desc":"Copier","cut_desc":"Couper","anchor_desc":"Ins\u00e9rer / \u00e9diter une ancre","visualaid_desc":"Activer / d\u00e9sactiver les guides et les \u00e9l\u00e9ments invisibles","charmap_desc":"Ins\u00e9rer des caract\u00e8res sp\u00e9ciaux","backcolor_desc":"Choisir la couleur de surlignage","forecolor_desc":"Choisir la couleur du texte","custom1_desc":"Votre description personnalis\u00e9e ici","removeformat_desc":"Supprimer le formatage","hr_desc":"Ins\u00e9rer un trait horizontal","sup_desc":"Exposant","sub_desc":"Indice","code_desc":"\u00c9diter le code source HTML","cleanup_desc":"Nettoyer le code","image_desc":"Ins\u00e9rer / \u00e9diter l\'image","unlink_desc":"Supprimer le lien","link_desc":"Ins\u00e9rer / \u00e9diter le lien","redo_desc":"R\u00e9tablir (Ctrl+Y)","undo_desc":"Annuler (Ctrl+Z)","indent_desc":"Indenter","outdent_desc":"Retirer l\'indentation","numlist_desc":"Liste num\u00e9rot\u00e9e","bullist_desc":"Liste \u00e0 puces","justifyfull_desc":"Justifi\u00e9","justifyright_desc":"Align\u00e9 \u00e0 droite","justifycenter_desc":"Centr\u00e9","justifyleft_desc":"Align\u00e9 \u00e0 gauche","striketrough_desc":"Barr\u00e9","help_shortcut":"Faites ALT-F10 pour acc\u00e9der \u00e0 la barre d\'outils. Faites ALT-0 pour acc\u00e9der \u00e0 l\'aide","rich_text_area":"Zone de texte enrichi","shortcuts_desc":"Aides \u00e0 l\'accessibilit\u00e9",toolbar:"Barre d\'outils","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fr_dlg.js
new file mode 100644
index 000000000..97b6b5292
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.advanced_dlg',{"link_list":"Liste de liens","link_is_external":"L\'URL que vous avez saisie semble \u00eatre une adresse web externe. Souhaitez-vous ajouter le pr\u00e9fixe \u00ab http:// \u00bb ?","link_is_email":"L\'URL que vous avez saisie semble \u00eatre une adresse e-mail, souhaitez-vous ajouter le pr\u00e9fixe \u00ab mailto: \u00bb ?","link_titlefield":"Titre","link_target_blank":"Ouvrir dans une nouvelle fen\u00eatre","link_target_same":"Ouvrir dans la m\u00eame fen\u00eatre","link_target":"Cible","link_url":"URL du lien","link_title":"Ins\u00e9rer / \u00e9diter un lien","image_align_right":"Droite (flottant)","image_align_left":"Gauche (flottant)","image_align_textbottom":"Texte en bas","image_align_texttop":"Texte en haut","image_align_bottom":"En bas","image_align_middle":"Au milieu","image_align_top":"En haut","image_align_baseline":"Normal","image_align":"Alignement","image_hspace":"Espacement horizontal","image_vspace":"Espacement vertical","image_dimensions":"Dimensions","image_alt":"Description de l\'image","image_list":"Liste d\'images","image_border":"Bordure","image_src":"URL de l\'image","image_title":"Ins\u00e9rer / \u00e9diter une image","charmap_title":"Choisir le caract\u00e8re \u00e0 ins\u00e9rer","colorpicker_name":"Nom :","colorpicker_color":"Couleur :","colorpicker_named_title":"Couleurs nomm\u00e9es","colorpicker_named_tab":"Noms","colorpicker_palette_title":"Couleurs de la palette","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Nuancier","colorpicker_picker_tab":"Nuancier","colorpicker_title":"Choisir une couleur","code_wordwrap":"Retour \u00e0 la ligne","code_title":"\u00c9diteur de source HTML","anchor_name":"Nom de l\'ancre","anchor_title":"Ins\u00e9rer / \u00e9diter une ancre","about_loaded":"Plugins charg\u00e9s","about_version":"Version","about_author":"Auteur","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Licence","about_help":"Aide","about_general":"\u00c0 propos","about_title":"\u00c0 propos de TinyMCE","charmap_usage":"Utilisez les fl\u00e8ches gauche et droite pour naviguer.","anchor_invalid":"Veuillez sp\u00e9cifier un nom d\'ancre valide.","accessibility_help":"Aide \u00e0 l\'accessibilit\u00e9","accessibility_usage_title":"Usage g\u00e9n\u00e9ral","invalid_color_value":"Valeur de couleur invalide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gl.js
new file mode 100644
index 000000000..cf00430ee
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.advanced',{"underline_desc":"Subli\u00f1ado (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negrita (Ctrl+B)",dd:"Descripci\u00f3n de definici\u00f3n",dt:"Termo de definici\u00f3n",samp:"Mostra de c\u00f3digo",code:"C\u00f3digo",blockquote:"Bloque de cita",h6:"Encabezamento 6",h5:"Encabezamento 5",h4:"Encabezamento 4",h3:"Encabezamento 3",h2:"Encabezamento 2",h1:"Encabezamento 1",pre:"Pre-formateado",address:"Enderezo",div:"Div",paragraph:"P\u00e1rrafo",block:"Formato",fontdefault:"Fonte","font_size":"Tama\u00f1o","style_select":"Estilos","more_colors":"M\u00e1is cores","toolbar_focus":"Ir \u00f3s bot\u00f3ns de ferramentas - Alt+Q, Ir \u00f3 editor - Alt-Z, Ir \u00e1 ruta do elemento - Alt-X",newdocument:"\u00bfSeguro que desexa limpar todo o contido?",path:"Ruta","clipboard_msg":"Copiar/Cortar/Pegar non est\u00e1 disponible en Mozilla e Firefox.\n\u00bfDesexa obter mais informaci\u00f3n sobre de este asunto?","blockquote_desc":"Cita","help_desc":"Axuda","newdocument_desc":"Novo documento","image_props_desc":"Propiedades de imaxe","paste_desc":"Pegar","copy_desc":"Copiar","cut_desc":"Cortar","anchor_desc":"Insertar/editar \u00e1ncora","visualaid_desc":"Mostrar/ocultar li\u00f1a de gu\u00eda/elementos invisibres","charmap_desc":"Insertar caracteres persoalizados","backcolor_desc":"Seleccionar cor do fondo","forecolor_desc":"Seleccionar cor do texto","custom1_desc":"A s\u00faa descripci\u00f3n persoal aqu\u00ed","removeformat_desc":"quitar formato","hr_desc":"Insertar regra horizontal","sup_desc":"Super\u00edndice","sub_desc":"Sub\u00edndice","code_desc":"Editar c\u00f3digo HTML","cleanup_desc":"Limpiar lixo no c\u00f3digo","image_desc":"Insertar/editar imaxe","unlink_desc":"Quitar hiperv\u00ednculo","link_desc":"Insertar/editar hiperv\u00ednculo","redo_desc":"Re-facer (Ctrl+Y)","undo_desc":"Desfacer (Ctrl+Z)","indent_desc":"Aumentar sangr\u00eda","outdent_desc":"Reducir sangr\u00eda","numlist_desc":"Lista ordenada","bullist_desc":"Lista desordenada","justifyfull_desc":"Xustificar","justifyright_desc":"Ali\u00f1ar \u00e1 dereita","justifycenter_desc":"Ali\u00f1ar \u00f3 centro","justifyleft_desc":"Ali\u00f1ar \u00e1 esquerda","striketrough_desc":"Tachado","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gl_dlg.js
new file mode 100644
index 000000000..279bc2993
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.advanced_dlg',{"link_list":"Lista de hiperv\u00ednculos","link_is_external":"A URL introducida semella ser un v\u00ednculo externo, \u00bfDesexa engadi-lo prefixo necesario http://?","link_is_email":"A URL introducida semella ser un enderezo de e-mail, \u00bfDesexa engadi-lo prefixo necesario mailto:?","link_titlefield":"T\u00edtulo","link_target_blank":"Abrir v\u00ednculo nunha vent\u00e1 nova","link_target_same":"Abrir v\u00ednculo na mesma vent\u00e1","link_target":"Obxetivo","link_url":"URL do enlace","link_title":"Insertar/editar enlace","image_align_right":"Dereita","image_align_left":"Esquerda","image_align_textbottom":"Texto abaixo","image_align_texttop":"Texto arriba","image_align_bottom":"Abaixo","image_align_middle":"Medio","image_align_top":"Arriba","image_align_baseline":"Li\u00f1a base","image_align":"Ali\u00f1aci\u00f3n","image_hspace":"Espacio horizontal","image_vspace":"Espacio vertical","image_dimensions":"Dimensi\u00f3n","image_alt":"Descripci\u00f3n da imaxe","image_list":"Lista de Imaxes","image_border":"Borde","image_src":"URL da imaxe","image_title":"Insertar/editar imaxe","charmap_title":"Seleccionar caracter personalizado","colorpicker_name":"Nome:","colorpicker_color":"Cor:","colorpicker_named_title":"Cores nomeados","colorpicker_named_tab":"Nomeados","colorpicker_palette_title":"Paleta de cores","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Selector de cores","colorpicker_picker_tab":"Selector","colorpicker_title":"Seleccionar cor","code_wordwrap":"Cortar li\u00f1as autom\u00e1ticamente","code_title":"Editor HTML","anchor_name":"Nome da \u00e1ncora","anchor_title":"Insertar/editar \u00e1ncora","about_loaded":"Comprementos cargados","about_version":"Versi\u00f3n","about_author":"Autor","about_plugin":"Compremento","about_plugins":"Comprementos","about_license":"Licencia","about_help":"Axuda","about_general":"Sobre","about_title":"Sobre TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gu.js
new file mode 100644
index 000000000..8f219813c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gu_dlg.js
new file mode 100644
index 000000000..629cfb3dd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/he.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/he.js
new file mode 100644
index 000000000..2c50a4b61
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/he.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.advanced',{"underline_desc":"\u05e7\u05d5 \u05ea\u05d7\u05ea\u05d5\u05df (Ctrl+U)","italic_desc":"\u05e0\u05d8\u05d5\u05d9 (Ctrl+I)","bold_desc":"\u05de\u05d5\u05d3\u05d2\u05e9 (Ctrl+B)",dd:"\u05d4\u05d2\u05d3\u05e8\u05ea \u05d4\u05de\u05d5\u05e9\u05d2",dt:"\u05de\u05d5\u05e9\u05d2",samp:"\u05d3\u05d5\u05d2\u05de\u05ea \u05e7\u05d5\u05d3",code:"\u05e7\u05d5\u05d3",blockquote:"\u05e6\u05d9\u05d8\u05d5\u05d8 \u05e7\u05d8\u05e2",h6:"\u05db\u05d5\u05ea\u05e8\u05ea 6",h5:"\u05db\u05d5\u05ea\u05e8\u05ea 5",h4:"\u05db\u05d5\u05ea\u05e8\u05ea 4",h3:"\u05db\u05d5\u05ea\u05e8\u05ea 3",h2:"\u05db\u05d5\u05ea\u05e8\u05ea 2",h1:"\u05db\u05d5\u05ea\u05e8\u05ea 1",pre:"Preformatted",address:"\u05db\u05ea\u05d5\u05d1\u05ea",div:"Div",paragraph:"\u05e4\u05e1\u05e7\u05d4",block:"\u05e2\u05d9\u05e6\u05d5\u05d1",fontdefault:"\u05d2\u05d5\u05e4\u05df","font_size":"\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05df","style_select":"\u05e1\u05d2\u05e0\u05d5\u05e0\u05d5\u05ea","more_colors":"\u05e2\u05d5\u05d3 \u05e6\u05d1\u05e2\u05d9\u05dd","toolbar_focus":"\u05d4\u05e2\u05d1\u05e8\u05d4 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05db\u05dc\u05d9\u05dd - Alt+Q, \u05d4\u05e2\u05d1\u05e8\u05d4 \u05dc\u05de\u05e2\u05d1\u05d3 \u05ea\u05de\u05dc\u05d9\u05dc\u05d9\u05dd - Alt-Z, \u05d4\u05e2\u05d1\u05e8\u05d4 \u05dc\u05e0\u05ea\u05d9\u05d1 \u05d4\u05d0\u05dc\u05de\u05d8\u05d9\u05dd - Alt-X",newdocument:"\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea \u05db\u05dc \u05d4\u05ea\u05d5\u05db\u05df?",path:"path","clipboard_msg":"\u05d4\u05e2\u05ea\u05e7/\u05d2\u05d6\u05d5\u05e8/\u05d4\u05d3\u05d1\u05e7 \u05dc\u05d0 \u05d6\u05de\u05d9\u05e0\u05d9\u05dd \u05d1 Mozilla \u05d5\u05d1-Firefox.\n \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05e7\u05d1\u05dc \u05de\u05d9\u05d3\u05e2 \u05e0\u05d5\u05e1\u05e3 \u05e2\u05dc \u05d4\u05e0\u05d5\u05e9\u05d0?","blockquote_desc":"\u05e6\u05d9\u05d8\u05d5\u05d8","help_desc":"\u05e2\u05d6\u05e8\u05d4","newdocument_desc":"\u05de\u05e1\u05de\u05da \u05d7\u05d3\u05e9","image_props_desc":"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05d4\u05ea\u05de\u05d5\u05e0\u05d4","paste_desc":"\u05d4\u05d3\u05d1\u05e7\u05d4","copy_desc":"\u05d4\u05e2\u05ea\u05e7\u05d4","cut_desc":"\u05d2\u05d6\u05d9\u05e8\u05d4","anchor_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05d9\u05de\u05e0\u05d9\u05d4","visualaid_desc":"\u05d4\u05e6\u05d2\u05d4 \u05d0\u05d5 \u05d4\u05e1\u05ea\u05e8\u05d4 \u05e9\u05dc \u05e1\u05d9\u05de\u05d5\u05e0\u05d9 \u05e2\u05d9\u05e6\u05d5\u05d1","charmap_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e1\u05d9\u05de\u05df","backcolor_desc":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2","forecolor_desc":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e6\u05d1\u05e2 \u05d2\u05d5\u05e4\u05df","custom1_desc":"\u05d4\u05ea\u05d0\u05d5\u05e8 \u05e9\u05dc\u05da \u05db\u05d0\u05d5","removeformat_desc":"\u05d4\u05e1\u05e8\u05ea \u05e2\u05d9\u05e6\u05d5\u05d1","hr_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e7\u05d5 \u05de\u05e4\u05e8\u05d9\u05d3","sup_desc":"\u05db\u05ea\u05d1 \u05ea\u05d7\u05ea\u05d9","sub_desc":"\u05db\u05ea\u05d1 \u05e2\u05d9\u05dc\u05d9","code_desc":"\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d5\u05d3 HTML","cleanup_desc":"\u05e0\u05d9\u05e7\u05d5\u05d9 \u05e7\u05d5\u05d3","image_desc":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05d3\u05e3 \u05ea\u05de\u05d5\u05e0\u05d4","unlink_desc":"\u05d4\u05e1\u05e8\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","link_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","redo_desc":"\u05d7\u05d6\u05e8\u05d4 \u05e2\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 (Ctrl+Y)","undo_desc":"\u05d1\u05d9\u05d8\u05d5\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 (Ctrl+Z)","indent_desc":"\u05d4\u05e7\u05d8\u05e0\u05ea \u05db\u05e0\u05d9\u05e1\u05d4","outdent_desc":"\u05d4\u05d2\u05d3\u05dc\u05ea \u05db\u05e0\u05d9\u05e1\u05d4","numlist_desc":"\u05de\u05e1\u05e4\u05d5\u05e8","bullist_desc":"\u05ea\u05d1\u05dc\u05d9\u05d8\u05d9\u05dd","justifyfull_desc":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05dc\u05e9\u05e0\u05d9 \u05d4\u05e6\u05d3\u05d3\u05d9\u05dd","justifyright_desc":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8 \u05dc\u05d9\u05de\u05d9\u05df","justifycenter_desc":"\u05de\u05d9\u05e8\u05db\u05d5\u05d6 \u05d8\u05e7\u05e1\u05d8","justifyleft_desc":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8 \u05dc\u05e9\u05de\u05d0\u05dc","striketrough_desc":"\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4","help_shortcut":"\u05dc\u05d7\u05e6/\u05d9 ALT-F10 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05db\u05dc\u05d9\u05dd. \u05dc\u05d7\u05e6/\u05d9 ALT-0 \u05dc\u05e2\u05d6\u05e8\u05d4","rich_text_area":"\u05d0\u05d6\u05d5\u05e8 \u05e2\u05e8\u05d9\u05db\u05ea \u05d8\u05e7\u05e1\u05d8 \u05e2\u05e9\u05d9\u05e8","shortcuts_desc":"\u05e2\u05d6\u05e8\u05ea \u05d2\u05d9\u05e9\u05d4",toolbar:"\u05e1\u05e8\u05d2\u05dc \u05db\u05dc\u05d9\u05dd","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/he_dlg.js
new file mode 100644
index 000000000..c27a31a22
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.advanced_dlg',{"link_list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd","link_is_external":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9 \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea http:// \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?","link_is_email":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05db\u05ea\u05d5\u05d1\u05ea \u05de\u05d9\u05d9\u05dc \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea MAILTO \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?","link_titlefield":"\u05db\u05d5\u05ea\u05e8\u05ea","link_target_blank":"\u05e4\u05ea\u05d7 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9","link_target_same":"\u05e4\u05ea\u05d7 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1\u05d0\u05d5\u05ea\u05d5 \u05d7\u05dc\u05d5\u05df","link_target":"\u05d9\u05e2\u05d3","link_url":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8","link_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","image_align_right":"\u05d9\u05de\u05d9\u05df","image_align_left":"\u05e9\u05de\u05d0\u05dc","image_align_textbottom":"\u05e7\u05e6\u05d4 \u05d4\u05ea\u05d7\u05ea\u05d5\u05df \u05e9\u05dc \u05d4\u05d8\u05e7\u05e1\u05d8","image_align_texttop":"\u05e7\u05e6\u05d4 \u05d4\u05e2\u05dc\u05d9\u05d5\u05df \u05e9\u05dc \u05d4\u05d8\u05e7\u05e1\u05d8","image_align_bottom":"\u05e7\u05e6\u05d4 \u05d4\u05ea\u05d7\u05ea\u05d5\u05df","image_align_middle":"\u05d0\u05de\u05e6\u05e2","image_align_top":"\u05e7\u05e6\u05d4 \u05d4\u05e2\u05dc\u05d9\u05d5\u05df","image_align_baseline":"\u05e7\u05d5 \u05d4\u05d4\u05ea\u05d7\u05dc\u05d4","image_align":"\u05d9\u05d9\u05e9\u05d5\u05e8","image_hspace":"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05d5\u05e4\u05e7\u05d9","image_vspace":"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05e0\u05db\u05d9","image_dimensions":"\u05d2\u05d5\u05d3\u05dc","image_alt":"\u05ea\u05d9\u05d0\u05d5\u05e8","image_list":"\u05e8\u05e9\u05d9\u05de\u05d4","image_border":"\u05d2\u05d1\u05d5\u05dc","image_src":"\u05db\u05ea\u05d5\u05d1\u05ea:","image_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05ea\u05de\u05d5\u05e0\u05d4","charmap_title":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e1\u05d9\u05de\u05df","colorpicker_name":"\u05e9\u05dd:","colorpicker_color":"\u05e6\u05d1\u05e2:","colorpicker_named_title":"\u05e6\u05d1\u05e2\u05d9\u05dd \u05d1\u05e2\u05dc\u05d9 \u05e9\u05de\u05d5\u05ea","colorpicker_named_tab":"\u05e6\u05d1\u05e2\u05d9\u05dd \u05d1\u05e2\u05dc\u05d9 \u05e9\u05de\u05d5\u05ea","colorpicker_palette_title":"\u05dc\u05d5\u05d7 \u05e6\u05d1\u05e2\u05d9\u05dd","colorpicker_palette_tab":"\u05dc\u05d5\u05d7 \u05e6\u05d1\u05e2\u05d9\u05dd","colorpicker_picker_title":"\u05d1\u05d5\u05e8\u05e8 \u05d4\u05e6\u05d1\u05e2\u05d9\u05dd","colorpicker_picker_tab":"\u05d1\u05d5\u05e8\u05e8","colorpicker_title":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e6\u05d1\u05e2","code_wordwrap":"\u05d2\u05dc\u05d9\u05e9\u05ea \u05d8\u05e7\u05e1\u05d8","code_title":"\u05e2\u05d5\u05e8\u05da \u05d4-HTML","anchor_name":"\u05e9\u05dd \u05d4\u05e1\u05d9\u05de\u05e0\u05d9\u05d4","anchor_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05d9\u05de\u05e0\u05d9\u05d4","about_loaded":"\u05ea\u05d5\u05e1\u05e4\u05d5\u05ea \u05e4\u05e2\u05d9\u05dc\u05d5\u05ea","about_version":"\u05d2\u05d9\u05e8\u05e1\u05d4","about_author":"\u05d9\u05d5\u05e6\u05e8","about_plugin":"\u05ea\u05d5\u05e1\u05e4\u05ea","about_plugins":"\u05ea\u05d5\u05e1\u05e4\u05d5\u05ea","about_license":"\u05e8\u05e9\u05d9\u05d5\u05df","about_help":"\u05e2\u05d6\u05e8\u05d4","about_general":"\u05d0\u05d5\u05d3\u05d5\u05ea","about_title":"\u05d0\u05d5\u05d3\u05d5\u05ea TinyMCE","charmap_usage":"\u05d4\u05e9\u05ea\u05de\u05e9/\u05d9 \u05d1\u05d7\u05d9\u05e6\u05d9\u05dd \u05dc\u05e0\u05d9\u05d5\u05d5\u05d8 \u05d9\u05de\u05d9\u05e0\u05d4 \u05d5\u05e9\u05de\u05d0\u05dc\u05d4","anchor_invalid":"\u05e0\u05d0 \u05dc\u05e6\u05d9\u05d9\u05df \u05e9\u05dd \u05d7\u05d5\u05e7\u05d9","accessibility_help":"\u05e2\u05d6\u05e8\u05d4 \u05d1\u05e0\u05d2\u05d9\u05e9\u05d5\u05ea","accessibility_usage_title":"\u05e9\u05d9\u05de\u05d5\u05e9 \u05db\u05dc\u05dc\u05d9","invalid_color_value":"\u05e2\u05e8\u05da \u05d4\u05e6\u05d1\u05e2 \u05dc\u05d0 \u05ea\u05e7\u05d9\u05df"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hi.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hi.js
new file mode 100644
index 000000000..845102ad2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hi_dlg.js
new file mode 100644
index 000000000..023fa2d4c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hr.js
new file mode 100644
index 000000000..50521bce2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.advanced',{"underline_desc":"Podcrtano (Ctrl U)","italic_desc":"Uko\u0161eno (Ctrl I)","bold_desc":"Podebljano (Ctrl B)",dd:"Opis definicije",dt:"Definicija pojma",samp:"Primjer koda",code:"Kod",blockquote:"Citat",h6:"Naslov 6",h5:"Naslov 5",h4:"Naslov 4",h3:"Naslov 3",h2:"Naslov 2",h1:"Naslov 1",pre:"Oblikovano",address:"Adresa",div:"Div",paragraph:"Paragraf",block:"Format",fontdefault:"Vrsta fonta","font_size":"Veli\u010dina fonta","style_select":"Stilovi","more_colors":"Vi\u0161e boja","toolbar_focus":"Prije\u0111i na alatnu traku - Alt Q, prije\u0111i na ure\u0111iva\u010d - Alt-Z, prije\u0111i na putanju elementa - Alt-X",newdocument:"Jeste li sigurni da \u017eelite izbrisati cijeli sadr\u017eaj?",path:"Putanja","clipboard_msg":"Kopiraj/Izre\u017ei/Zalijepi nije dostupno u Mozilla i Firefox preglednicima. Vi\u0161e informacija?","blockquote_desc":"Citiraj","help_desc":"Pomo\u0107","newdocument_desc":"Novi dokument","image_props_desc":"Svojstva slike","paste_desc":"Zalijepi","copy_desc":"Kopiraj","cut_desc":"Izre\u017ei","anchor_desc":"Umetni/uredi sidro","visualaid_desc":"Vodilice/nevidljivi elementi","charmap_desc":"Umetni vlastiti znak","backcolor_desc":"Odaberite boju pozadine","forecolor_desc":"Odaberite boju teksta","custom1_desc":"Vlastiti opis ovdje","removeformat_desc":"Poni\u0161ti oblikovanje","hr_desc":"Umetni vodoravnu crtu","sup_desc":"Eksponent","sub_desc":"Indeks","code_desc":"Uredi HTML izvor","cleanup_desc":"Po\u010disti neuredan kod","image_desc":"Umetni/uredi sliku","unlink_desc":"Poni\u0161ti link","link_desc":"Umetni/uredi link","redo_desc":"Ponovi (Ctrl+Y)","undo_desc":"Poni\u0161ti (Ctrl+Z)","indent_desc":"Izvuci","outdent_desc":"Uvuci","numlist_desc":"Numerirana lista","bullist_desc":"Nenumerirana lista","justifyfull_desc":"Poravnaj obostrano","justifyright_desc":"Poravnaj desno","justifycenter_desc":"Centriraj","justifyleft_desc":"Poravnaj lijevo","striketrough_desc":"Precrtano","help_shortcut":"Pritisni ALT F10 za alatnu traku, ALT 0 za pomo\u0107.",toolbar:"Alatna traka","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hr_dlg.js
new file mode 100644
index 000000000..515db71ec
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.advanced_dlg',{"link_list":"Lista linkova","link_is_external":"URL koji ste unijeli izgleda kao vanjski link, \u017eelite li dodati potrebni http:// prefiks?","link_is_email":"URL koji ste unijeli izgleda kao e-mail adresa, \u017eelite li dodati potrebni mailto: prefiks?","link_titlefield":"Naslov","link_target_blank":"Otvori link u novom prozoru","link_target_same":"Otvori link u istom prozoru","link_target":"Meta","link_url":"URL linka","link_title":"Umetni/uredi link","image_align_right":"Na desno","image_align_left":"Na lijevo","image_align_textbottom":"Na dno teksta","image_align_texttop":"Na vrh teksta","image_align_bottom":"Na dno","image_align_middle":"Na sredinu","image_align_top":"Na vrh","image_align_baseline":"Osnovna linija","image_align":"Poravnavanje","image_hspace":"Vodoravni razmak","image_vspace":"Okomiti razmak","image_dimensions":"Dimenzije","image_alt":"Opis slike","image_list":"Lista slika","image_border":"Obrub","image_src":"URL slike","image_title":"Umetni/uredi sliku","charmap_title":"Odaberite znak","colorpicker_name":"Naziv:","colorpicker_color":"Boja:","colorpicker_named_title":"Imenovane boje","colorpicker_named_tab":"Imenovano","colorpicker_palette_title":"Paleta boja","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Odabir boje","colorpicker_picker_tab":"Odabir","colorpicker_title":"Izbor boje","code_wordwrap":"Omatanje teksta","code_title":"HTML ure\u0111iva\u010d","anchor_name":"Ime sidra","anchor_title":"Umetni/uredi sidro","about_loaded":"Postoje\u0107i dodaci","about_version":"Verzija","about_author":"Autor","about_plugin":"Dodatak","about_plugins":"Dodaci","about_license":"Licenca","about_help":"Pomo\u0107","about_general":"O programu","about_title":"TinyMCE","anchor_invalid":"Molimo unesite ispravno ime sidra","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hu.js
new file mode 100644
index 000000000..b5a0cbd5f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.advanced',{"underline_desc":"Al\u00e1h\u00fazott (Ctrl+U)","italic_desc":"D\u0151lt (Ctrl+I)","bold_desc":"F\u00e9lk\u00f6v\u00e9r (Ctrl+B)",dd:"Defin\u00edci\u00f3 a defin\u00edci\u00f3s list\u00e1ban",dt:"Defini\u00e1lt kifejez\u00e9s a defin\u00edci\u00f3s list\u00e1ban",samp:"K\u00f3d minta",code:"K\u00f3d",blockquote:"Id\u00e9zet",h6:"C\u00edmsor 6",h5:"C\u00edmsor 5",h4:"C\u00edmsor 4",h3:"C\u00edmsor 3",h2:"C\u00edmsor 2",h1:"C\u00edmsor 1",pre:"El\u0151form\u00e1zott",address:"C\u00edm",div:"Div",paragraph:"Bekezd\u00e9s",block:"Form\u00e1tum",fontdefault:"Bet\u0171t\u00edpus","font_size":"Bet\u0171m\u00e9ret","style_select":"St\u00edlusok","image_delta_height":"","image_delta_width":"","more_colors":"Tov\u00e1bbi sz\u00ednek","toolbar_focus":"Eszk\u00f6zgombokra ugr\u00e1s - Alt+Q, Szerkeszt\u0151h\u00f6z ugr\u00e1s - Alt-Z, Elem\u00fatvonalhoz ugr\u00e1s - Alt-X",newdocument:"Biztosan t\u00f6rli az eddigi tartalmat?",path:"\u00datvonal","clipboard_msg":"A M\u00e1sol\u00e1s/Kiv\u00e1g\u00e1s/Besz\u00far\u00e1s funkci\u00f3k nem \u00e9rhet\u0151ek el Mozilla \u00e9s Firefox alatt. Szeretne t\u00f6bbet megtudni err\u0151l?","blockquote_desc":"Id\u00e9zet","help_desc":"Seg\u00edts\u00e9g","newdocument_desc":"\u00daj dokumentum","image_props_desc":"K\u00e9p tulajdons\u00e1gai","paste_desc":"Besz\u00far\u00e1s","copy_desc":"M\u00e1sol\u00e1s","cut_desc":"Kiv\u00e1g\u00e1s","anchor_desc":"Horgony besz\u00far\u00e1sa/szerkeszt\u00e9se","visualaid_desc":"Vezet\u0151vonalak/nem l\u00e1that\u00f3 elemek ki-/bekapcsol\u00e1sa","charmap_desc":"Speci\u00e1lis karakter besz\u00far\u00e1sa","backcolor_desc":"H\u00e1tt\u00e9rsz\u00edn v\u00e1laszt\u00e1sa","forecolor_desc":"Sz\u00f6vegsz\u00edn v\u00e1laszt\u00e1sa","custom1_desc":"Az \u00f6n egyedi le\u00edr\u00e1sa","removeformat_desc":"Form\u00e1z\u00e1s elt\u00e1vol\u00edt\u00e1sa","hr_desc":"V\u00edzszintes elv\u00e1laszt\u00f3 vonal besz\u00far\u00e1sa","sup_desc":"Fels\u0151 index","sub_desc":"Als\u00f3 index","code_desc":"HTML forr\u00e1s szerkeszt\u00e9se","cleanup_desc":"Minden form\u00e1z\u00e1s elt\u00e1vol\u00edt\u00e1sa","image_desc":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","unlink_desc":"Link elt\u00e1vol\u00edt\u00e1sa","link_desc":"Link besz\u00far\u00e1sa/szerkeszt\u00e9se","redo_desc":"M\u00e9gis v\u00e9grehajt (Ctrl+Y)","undo_desc":"Visszavon\u00e1s (Ctrl+Z)","indent_desc":"Beh\u00faz\u00e1s n\u00f6vel\u00e9se","outdent_desc":"Beh\u00faz\u00e1s cs\u00f6kkent\u00e9se","numlist_desc":"Rendezett lista","bullist_desc":"Rendezetlen lista","justifyfull_desc":"Sorkiz\u00e1rt","justifyright_desc":"Jobbra z\u00e1rt","justifycenter_desc":"K\u00f6z\u00e9pre z\u00e1rt","justifyleft_desc":"Balra z\u00e1rt","striketrough_desc":"\u00c1th\u00fazott","help_shortcut":"Ugr\u00e1s az eszk\u00f6zt\u00e1rhoz: ALT-F10. Seg\u00edts\u00e9g: ALT-0.","rich_text_area":"Rich Text ter\u00fclet","shortcuts_desc":"El\u00e9rhet\u0151s\u00e9g s\u00fag\u00f3",toolbar:"Eszk\u00f6zt\u00e1r","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hu_dlg.js
new file mode 100644
index 000000000..33c197db6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.advanced_dlg',{"link_list":"Link lista","link_is_external":"A be\u00edrt internet c\u00edm k\u00fcls\u0151 hivatkoz\u00e1snak t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges http://-vel kieg\u00e9sz\u00edteni?","link_is_email":"A be\u00edrt internet c\u00edm e-mail c\u00edmnek t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges mailto:-val kieg\u00e9sz\u00edteni?","link_titlefield":"C\u00edm","link_target_blank":"\u00faj ablakba","link_target_same":"azonos ablakba","link_target":"Megnyit\u00e1s","link_url":"Internet c\u00edm","link_title":"Link besz\u00far\u00e1sa/szerkeszt\u00e9se","image_align_right":"Jobbra","image_align_left":"Balra","image_align_textbottom":"Sz\u00f6veg alj\u00e1hoz","image_align_texttop":"Sz\u00f6veg tetej\u00e9hez","image_align_bottom":"Lentre","image_align_middle":"K\u00f6z\u00e9pre","image_align_top":"Fentre","image_align_baseline":"Alapvonalhoz","image_align":"Igaz\u00edt\u00e1s","image_hspace":"V\u00edzszintes t\u00e1v","image_vspace":"F\u00fcgg\u0151leges t\u00e1v","image_dimensions":"M\u00e9retek","image_alt":"K\u00e9p le\u00edr\u00e1s","image_list":"K\u00e9p lista","image_border":"Keret","image_src":"K\u00e9p URL","image_title":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","charmap_title":"Egyedi karakter v\u00e1laszt\u00e1sa","colorpicker_name":"N\u00e9v:","colorpicker_color":"Sz\u00edn:","colorpicker_named_title":"Elnevezett sz\u00ednek","colorpicker_named_tab":"Elnevezettek","colorpicker_palette_title":"Paletta sz\u00ednek","colorpicker_palette_tab":"Paletta","colorpicker_picker_title":"Sz\u00ednv\u00e1laszt\u00f3","colorpicker_picker_tab":"V\u00e1laszt\u00f3","colorpicker_title":"Sz\u00ednv\u00e1laszt\u00e1s","code_wordwrap":"Sz\u00f6veg t\u00f6rdel\u00e9se","code_title":"HTML forr\u00e1s szerkeszt\u00e9se","anchor_name":"Horgonyn\u00e9v","anchor_title":"Horgony besz\u00far\u00e1sa/szerkeszt\u00e9se","about_loaded":"Bet\u00f6lt\u00f6tt pluginok","about_version":"Verzi\u00f3","about_author":"Szerz\u0151","about_plugin":"Plugin","about_plugins":"Pluginok","about_license":"Licenc","about_help":"Seg\u00edts\u00e9g","about_general":"R\u00f3lunk","about_title":"A TinyMCE-r\u0151l","charmap_usage":"A navig\u00e1l\u00e1shoz haszn\u00e1ld a bal \u00e9s jobb oldali nyilat.","anchor_invalid":"Adjon meg egy helyes horgony nevet.","accessibility_help":"El\u00e9rhet\u0151s\u00e9g s\u00fag\u00f3","accessibility_usage_title":"\u00c1ltal\u00e1nos haszn\u00e1lat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hy.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hy.js
new file mode 100644
index 000000000..18c86cd5b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.advanced',{"underline_desc":"\u0538\u0576\u0564\u0563\u056e\u057e\u0561\u056e (Ctrl + U)","italic_desc":"\u0547\u0565\u0572 (Ctrl + I)","bold_desc":"\u0540\u0561\u057d\u057f (Ctrl + B)",dd:"\u0532\u0561\u057c\u0561\u0580\u0561\u0576 \u0562\u0561\u0581\u0561\u057f\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",dt:"\u054f\u0565\u0580\u0574\u056b\u0576\u0576\u0565\u0580\u056b \u0562\u0561\u057c\u0561\u0580\u0561\u0576",samp:"\u053f\u0578\u0564\u056b \u0585\u0580\u056b\u0576\u0561\u056f",code:"\u053f\u0578\u0564",blockquote:"\u0544\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576",h6:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 6",h5:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 5",h4:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 4",h3:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 3",h2:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 2",h1:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 1",pre:"\u0546\u0561\u056d\u0561\u057a\u0565\u057d \u0586\u0578\u0580\u0574\u0561\u057f\u0561\u057e\u0578\u0580\u057e\u0561\u056e",address:"\u0540\u0561\u057d\u0581\u0565\u056b \u0578\u0573",div:"Div",paragraph:"\u0556\u0578\u0580\u0574\u0561\u057f",block:"\u0556\u0578\u0580\u0574\u0561\u057f",fontdefault:"\u054f\u0561\u057c\u0561\u057f\u0565\u057d\u0561\u056f","font_size":"\u0549\u0561\u0583\u057d","style_select":"\u0548\u0573\u0565\u0580","more_colors":"\u0547\u0561\u057f \u0563\u0578\u0582\u0575\u0576\u0565\u0580","toolbar_focus":"\u0531\u0576\u0581\u0576\u0565\u056c \u057d\u0565\u0572\u0574\u0561\u056f\u0576\u0565\u0580\u056b \u057e\u0561\u0570\u0561\u0576\u0561\u056f - Alt + Q, \u0531\u0576\u0581\u0576\u0565\u056c \u056d\u0574\u0562\u0561\u0563\u0580\u056b\u0579\u056b\u0576 - Alt-Z, \u0531\u0576\u0581\u0576\u0565\u056c \u0570\u0561\u057d\u0581\u0565\u056b \u0567\u056c\u0565\u0574\u0565\u0576\u057f\u056b\u0576 - Alt-X",newdocument:"\u0540\u0561\u0574\u0578\u0566\u057e\u0561\u055e\u056e \u0565\u0584, \u0578\u0580 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u0574 \u0565\u0584 \u0561\u0574\u0562\u0578\u0572\u057b\u0568 \u0570\u0565\u057c\u0561\u0581\u0576\u0565\u056c",path:"\u0540\u0561\u057d\u0581\u0565","clipboard_msg":"\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c / \u053f\u057f\u0580\u0565\u056c / \u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c (\u0574\u0561\u057f\u0579\u0565\u056c\u056b \u0579\u0567 Mozilla \u0587 Firefox \u0562\u0580\u0561\u0578\u0582\u0566\u0565\u0580\u0576\u0565\u0580\u0578\u0582\u0574) \\ n \u0541\u0565\u0566 \u0570\u0565\u057f\u0561\u0584\u0580\u0584\u056b\u055e\u0580 \u0567 \u0561\u0575\u0564 \u056b\u0576\u0586\u0578\u0580\u0574\u0561\u0581\u056b\u0561\u0576","blockquote_desc":"\u0544\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","help_desc":"\u0555\u0563\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","newdocument_desc":"\u0546\u0578\u0580 \u0583\u0561\u057d\u057f\u0561\u0569\u0578\u0582\u0572\u0569","image_props_desc":"\u0546\u056f\u0561\u0580\u056b \u057a\u0561\u0580\u0561\u0574\u0565\u057f\u0580\u0565\u0580","paste_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c","copy_desc":"\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c","cut_desc":"\u053f\u057f\u0580\u0565\u056c","anchor_desc":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u056d\u0565\u056c \u056d\u0561\u0580\u056b\u057d\u056d\u0568","visualaid_desc":"Toggle guidelines / invisible elements","charmap_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057d\u056b\u0574\u057e\u0578\u056c","backcolor_desc":"\u0538\u0576\u057f\u0580\u0565\u0584 \u0586\u0578\u0576\u056b \u0563\u0578\u0582\u0575\u0576\u0568","forecolor_desc":"\u0538\u0576\u057f\u0580\u0565\u0584 \u057f\u0565\u0584\u057d\u057f\u056b \u0563\u0578\u0582\u0575\u0576\u0568","custom1_desc":"\u0541\u0565\u0580 \u0574\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568","removeformat_desc":"\u0540\u0565\u057c\u0561\u0581\u0576\u0565\u056c \u0586\u0578\u0580\u0574\u0561\u057f\u0561\u057e\u0578\u0580\u0578\u0582\u0574\u0568","hr_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0570\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u0562\u0561\u056a\u0561\u0576\u056b\u0579","sup_desc":"\u054e\u0565\u0580\u056b\u0576 \u056b\u0576\u0564\u0565\u0584\u057d","sub_desc":"\u054d\u057f\u0578\u0580\u056b\u0576 \u056b\u0576\u0564\u0565\u0584\u057d","code_desc":"\u0553\u0578\u0583\u0578\u056d\u0565\u056c HTML \u056f\u0578\u0564\u0568","cleanup_desc":"\u0540\u0565\u057c\u0561\u0581\u0576\u0565\u056c \u0561\u057e\u0565\u056c\u0578\u0580\u0564 \u056f\u0578\u0564\u0568","image_desc":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0576\u056f\u0561\u0580","unlink_desc":"\u0540\u0565\u057c\u0561\u0581\u0576\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568","link_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568","redo_desc":"\u0531\u057c\u0561\u057b (Ctrl + Y)","undo_desc":"\u0535\u057f (Ctrl + Z)","indent_desc":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u0570\u0565\u057c\u0561\u057e\u0578\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568 \u0571\u0561\u056d \u0565\u0566\u0580\u056b\u0581","outdent_desc":"\u053f\u0580\u0573\u0561\u057f\u0565\u056c \u0570\u0565\u057c\u0561\u057e\u0578\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568 \u0571\u0561\u056d \u0565\u0566\u0580\u056b\u0581","numlist_desc":"\u0540\u0561\u0574\u0561\u0580\u0561\u056f\u0561\u056c\u057e\u0561\u056e \u0581\u0561\u0576\u056f","bullist_desc":"\u0551\u0561\u0576\u056f","justifyfull_desc":"\u0538\u057d\u057f \u056c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0561\u0576","justifyright_desc":"\u0531\u057b \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","justifycenter_desc":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0581\u0576\u0565\u056c","justifyleft_desc":"\u0541\u0561\u056d \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","striketrough_desc":"\u0531\u0580\u057f\u0561\u0563\u056e\u057e\u0561\u056e","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hy_dlg.js
new file mode 100644
index 000000000..c960f947e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.advanced_dlg',{"link_list":"\u0540\u0572\u0578\u0582\u0574\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f","link_is_external":"\u0546\u0565\u0580\u0561\u056e\u057e\u0561\u056e URL \u0570\u0561\u057d\u0581\u0565\u0576 \u0576\u0574\u0561\u0576 \u0567 \u0561\u0580\u057f\u0561\u0584\u056b\u0576 \u0570\u0572\u0574\u0561\u0576, \u0534\u0578\u0582\u0584 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u055e\u0574 \u0565\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c http://","link_is_email":"\u0546\u0565\u0580\u0561\u056e\u057e\u0561\u056e URL \u0570\u0561\u057d\u0581\u0565\u0576 \u0576\u0574\u0561\u0576 \u0567 email \u0570\u0561\u057d\u0581\u0565\u056b, \u0534\u0578\u0582\u0584 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u055e\u0574 \u0565\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c mailto:","link_titlefield":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580","link_target_blank":"\u0576\u0578\u0580 \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0578\u0582\u0574","link_target_same":"\u0561\u0575\u057d \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0578\u0582\u0574","link_target":"\u0532\u0561\u0581\u0565\u056c ...","link_url":"\u0540\u0572\u0574\u0561\u0576 \u0570\u0561\u057d\u0581\u0565","link_title":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568","image_align_right":"\u0531\u057b \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","image_align_left":"\u0541\u0561\u056d \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","image_align_textbottom":"\u0538\u057d\u057f \u057f\u0565\u0584\u057d\u057f\u056b \u057d\u057f\u0578\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","image_align_texttop":"\u0538\u057d\u057f \u057f\u0565\u0584\u057d\u057f\u056b \u057e\u0565\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","image_align_bottom":"\u0538\u057d\u057f \u057d\u057f\u0578\u0580\u056b\u0576 \u0563\u056e\u056b","image_align_middle":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0581\u0576\u0565\u056c","image_align_top":"\u0538\u057d\u057f \u057e\u0565\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","image_align_baseline":"\u0538\u057d\u057f \u0562\u0561\u0566\u0561\u0575\u056b\u0576 \u0563\u056e\u056b","image_align":"\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","image_hspace":"\u0540\u0578\u0580\u056b\u0566. \u0577\u0565\u0572\u0578\u0582\u0574","image_vspace":"\u0548\u0582\u0572\u0572\u0561\u0570. \u0577\u0565\u0572\u0578\u0582\u0574","image_dimensions":"\u0549\u0561\u0583\u057d\u0565\u0580","image_alt":"\u0546\u056f\u0561\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","image_list":"\u0546\u056f\u0561\u0580\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f","image_border":"\u0535\u0566\u0580","image_src":"\u0540\u0561\u057d\u0581\u0565","image_title":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0576\u056f\u0561\u0580","charmap_title":"\u0538\u0576\u057f\u0580\u0565\u056c \u057a\u0561\u057f\u0561\u0570\u0561\u056f\u0561\u0576 \u057d\u056b\u0574\u057e\u0578\u056c","colorpicker_name":"\u0531\u0576\u057e\u0561\u0576\u0578\u0582\u0574:","colorpicker_color":"\u0533\u0578\u0582\u0575\u0576:","colorpicker_named_title":"\u0538\u057d\u057f \u0561\u0576\u057e\u0561\u0576\u0574\u0561\u0576","colorpicker_named_tab":"\u0538\u057d\u057f \u0561\u0576\u057e\u0561\u0576\u0574\u0561\u0576","colorpicker_palette_title":"\u0533\u0578\u0582\u0575\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f","colorpicker_palette_tab":"\u0551\u0561\u0576\u056f","colorpicker_picker_title":"\u0533\u0578\u0582\u0576\u0561\u0575\u056b\u0576 \u0585\u0580\u056b\u0576\u0561\u056f","colorpicker_picker_tab":"\u0533\u0578\u0582\u0576\u0561\u0575\u056b\u0576 \u0585\u0580\u056b\u0576\u0561\u056f","colorpicker_title":"\u0538\u0576\u057f\u0580\u0565\u0584 \u0563\u0578\u0582\u0575\u0576","code_wordwrap":"\u054f\u0565\u0572\u0561\u0583\u0578\u056d\u0565\u056c \u0562\u0561\u057c\u0565\u0580","code_title":"HTML \u056f\u0578\u0564\u056b \u056d\u0574\u0562\u0561\u0563\u0580\u056b\u0579","anchor_name":"\u053d\u0561\u0580\u056b\u057d\u056d \u0561\u0576\u057e\u0561\u0576\u0578\u0582\u0574","anchor_title":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u056d\u0561\u0580\u056b\u057d\u056d\u0568","about_loaded":"\u0532\u0565\u057c\u0562\u057e\u0561\u056e \u057a\u056c\u0561\u0563\u056b\u0576\u0576\u0565\u0580","about_version":"\u054f\u0561\u0580\u0562\u0565\u0580\u0561\u056f","about_author":"\u0540\u0565\u0572\u056b\u0576\u0561\u056f","about_plugin":"\u054a\u056c\u0561\u0563\u056b\u0576","about_plugins":"\u054a\u056c\u0561\u0563\u056b\u0576\u0576\u0565\u0580","about_license":"\u053c\u056b\u0581\u0565\u0576\u0566\u056b\u0561","about_help":"\u0555\u0563\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","about_general":"\u053e\u0580\u0561\u0563\u0580\u0561\u0575\u056b\u0576 \u0561\u057a\u0561\u0570\u0578\u057e\u0574\u0561\u0576 \u0574\u0561\u057d\u056b\u0576 ...","about_title":"TinyMCE \u053d\u0574\u0562\u0561\u0563\u0580\u056b\u0579","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ia.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ia.js
new file mode 100644
index 000000000..3cfbf3681
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ia.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.advanced',{"underline_desc":"\u5e95\u7ebf (Ctrl+U)","italic_desc":"\u659c\u4f53 (Ctrl+I)","bold_desc":"\u7c97\u4f53 (Ctrl+B)",dd:"\u540d\u8bcd\u89e3\u91ca",dt:"\u540d\u8bcd\u5b9a\u4e49",samp:"\u7a0b\u5e8f\u8303\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"\u6807\u9898 6",h5:"\u6807\u9898 5",h4:"\u6807\u9898 4",h3:"\u6807\u9898 3",h2:"\u6807\u9898 2",h1:"\u6807\u9898 1",pre:"\u9ed8\u8ba4\u683c\u5f0f",address:"\u5730\u5740",div:"Div",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u4f53","font_size":"\u5b57\u4f53\u5927\u5c0f","style_select":"\u6837\u5f0f","more_colors":"\u66f4\u591a\u989c\u8272","toolbar_focus":"\u5de5\u5177\u5217 - Alt+Q, \u7f16\u8f91\u5668 - Alt-Z, \u7ec4\u4ef6\u8def\u5f84 - Alt-X",newdocument:"\u60a8\u786e\u8ba4\u8981\u5220\u9664\u5168\u90e8\u5185\u5bb9\u5417\uff1f",path:"\u8def\u5f84","clipboard_msg":"\u590d\u5236\u3001\u526a\u5207\u548c\u7c98\u8d34\u529f\u80fd\u5728Mozilla \u548c Firefox\u4e2d\u65e0\u6cd5\u4f7f\u7528","blockquote_desc":"\u5f15\u7528","help_desc":"\u5e2e\u52a9","newdocument_desc":"\u65b0\u5efa\u6587\u4ef6","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u7c98\u8d34 (Ctrl+V)","copy_desc":"\u590d\u5236 (Ctrl+C)","cut_desc":"\u526a\u5207 (Ctrl+X)","anchor_desc":"\u63d2\u5165/\u7f16\u8f91 \u951a\u70b9","visualaid_desc":"\u7f51\u683c/\u9690\u85cf\u7ec4\u4ef6\uff1f","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","backcolor_desc":"\u9009\u62e9\u80cc\u666f\u989c\u8272","forecolor_desc":"\u9009\u62e9\u6587\u5b57\u989c\u8272","custom1_desc":"\u5728\u6b64\u8f93\u5165\u60a8\u7684\u81ea\u8ba2\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u6837\u5f0f","hr_desc":"\u63d2\u5165\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"\u7f16\u8f91 HTML \u539f\u59cb\u7a0b\u5e8f\u4ee3\u7801","cleanup_desc":"\u5220\u9664\u5197\u4f59\u7801","image_desc":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","unlink_desc":"\u53d6\u6d88\u8fde\u7ed3","link_desc":"\u63d2\u5165/\u7f16\u8f91 \u8fde\u7ed3","redo_desc":"\u6062\u590d (Ctrl+Y)","undo_desc":"\u64a4\u9500 (Ctrl+Z)","indent_desc":"\u589e\u52a0\u7f29\u8fdb","outdent_desc":"\u51cf\u5c11\u7f29\u8fdb","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u6e05\u5355\u7b26\u53f7","justifyfull_desc":"\u4e24\u7aef\u5bf9\u9f50","justifyright_desc":"\u53f3\u5bf9\u9f50","justifycenter_desc":"\u5c45\u4e2d","justifyleft_desc":"\u5de6\u5bf9\u9f50","striketrough_desc":"\u4e2d\u5212\u7ebf","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ia_dlg.js
new file mode 100644
index 000000000..7f840d639
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.advanced_dlg',{"link_list":"\u8fde\u7ed3\u6e05\u5355","link_is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u52a0\u4e0a http:// ?","link_is_email":"\u60a8\u8f93\u5165\u7684\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u52a0\u4e0a mailto: ? ","link_titlefield":"\u6807\u9898","link_target_blank":"\u65b0\u7a97\u53e3\u6253\u5f00","link_target_same":"\u5f53\u524d\u7a97\u53e3\u6253\u5f00","link_target":"\u76ee\u6807","link_url":"\u8fde\u7ed3\u7f51\u5740","link_title":"\u63d2\u5165/\u7f16\u8f91 \u8fde\u7ed3","image_align_right":"\u53f3\u5bf9\u9f50","image_align_left":"\u5de6\u5bf9\u9f50","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u5e95\u90e8\u5bf9\u9f50","image_align_middle":"\u4e2d\u90e8\u5bf9\u9f50","image_align_top":"\u9876\u90e8\u5bf9\u9f50","image_align_baseline":"\u57fa\u7ebf","image_align":"\u5bf9\u9f50\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u95f4\u8ddd","image_vspace":"\u5782\u76f4\u95f4\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u8bf4\u660e","image_list":"\u56fe\u7247\u6e05\u5355","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247\u7f51\u5740","image_title":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","colorpicker_name":"\u8272\u540d:","colorpicker_color":"\u989c\u8272:","colorpicker_named_title":"\u9ed8\u8ba4\u7684\u989c\u8272","colorpicker_named_tab":"\u9ed8\u8ba4\u503c","colorpicker_palette_title":"\u8272\u8c31\u989c\u8272","colorpicker_palette_tab":"\u8272\u8c31","colorpicker_picker_title":"\u53d6\u8272\u5668","colorpicker_picker_tab":"\u9009\u62e9\u5668","colorpicker_title":"\u9009\u62e9\u989c\u8272","code_wordwrap":"\u81ea\u52a8\u6362\u884c","code_title":"HTML \u539f\u59cb\u7a0b\u5e8f\u4ee3\u7801\u7f16\u8f91\u5668","anchor_name":"\u951a\u70b9\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91 \u951a\u70b9","about_loaded":"\u5df2\u52a0\u8f7d\u7684\u5916\u6302\u7a0b\u5e8f","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u5916\u6302\u7a0b\u5e8f","about_plugins":"\u5168\u90e8\u5916\u6302\u7a0b\u5e8f","about_license":"\u6388\u6743","about_help":"\u5e2e\u52a9","about_general":"\u5173\u4e8e","about_title":"\u5173\u4e8e TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/id.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/id.js
new file mode 100644
index 000000000..cfd77b8f8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/id.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Yakin untuk menghapus semua konten?",path:"Path","clipboard_msg":"Copy/Cut/Paste tidak tersedia pada Mozilla dan Firefox.\nButuh info selengkapnya?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Pilih background color","forecolor_desc":"Pilih text color","custom1_desc":"Deskripsi disini","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/id_dlg.js
new file mode 100644
index 000000000..6d6ed3239
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.advanced_dlg',{"link_list":"Daftar Link","link_is_external":"URL yang Anda sisipkan tampaknya link eksternal, Anda ingin menambahkan awalan \'http://\'?","link_is_email":"URL yang Anda sisipkan tampaknya e-mail, Anda ingin menambahkan awalan \'mailto:\'?","link_titlefield":"Judul","link_target_blank":"Buka link pada window baru","link_target_same":"Buka link pada window yang sama","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Pilih custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Versi","about_author":"Penulis","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Lisensi","about_help":"Bantuan","about_general":"Tentang","about_title":"Tentang TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/is.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/is.js
new file mode 100644
index 000000000..600433cf9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/is.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.advanced',{"underline_desc":"Undirstrika\u00f0 (Ctrl+U)","italic_desc":"Sk\u00e1letra\u00f0 (Ctrl+I)","bold_desc":"Feitletra\u00f0 (Ctrl+B)",dd:"L\u00fdsing skilgreiningar",dt:"Stilgreining",samp:"K\u00f3\u00f0ad\u00e6mi",code:"K\u00f3\u00f0i",blockquote:"Blockquote",h6:"Fyrirs\u00f6gn 6",h5:"Fyrirs\u00f6gn 5",h4:"Fyrirs\u00f6gn 4",h3:"Fyrirs\u00f6gn 3",h2:"Fyrirs\u00f6gn 2",h1:"Fyrirs\u00f6gn 1",pre:"Forsni\u00f0i\u00f0",address:"Heimilisfang",div:"Div",paragraph:"M\u00e1lsgrein",block:"Format",fontdefault:"Leturger\u00f0","font_size":"Leturst\u00e6r\u00f0","style_select":"St\u00edlsni\u00f0","more_colors":"Fleiri litir","toolbar_focus":"Hoppa \u00ed t\u00f3lastiku - Alt+Q, Hoppa \u00ed ritil - Alt-Z, Hoppa \u00ed sl\u00f3\u00f0 - Alt-X",newdocument:"Ertu viss um a\u00f0 \u00fe\u00fa viljir hreinsa allt?",path:"Sl\u00f3\u00f0","clipboard_msg":"Afrita/Klippa/L\u00edma er ekki a\u00f0gengilegt \u00ed Mozilla og Firefox eins og er.\\Viltu f\u00e1 n\u00e1nari uppl\u00fdsingar?","blockquote_desc":"Blockquote","help_desc":"Hj\u00e1lp","newdocument_desc":"N\u00fdtt skjal","image_props_desc":"Stilling myndar","paste_desc":"L\u00edma","copy_desc":"Afrita","cut_desc":"Klippa","anchor_desc":"Setja inn/breyta akkeri","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Setja inn t\u00e1kn","backcolor_desc":"Veldu bakgrunnslit","forecolor_desc":"Veldu textalit","custom1_desc":"L\u00fdsingin \u00fe\u00edn h\u00e9r","removeformat_desc":"Hreinsa sni\u00f0","hr_desc":"Setja inn l\u00e1r\u00e9tta l\u00ednu","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Breyta HTML k\u00f3\u00f0a","cleanup_desc":"Hreinsa ruslk\u00f3\u00f0a","image_desc":"Setja inn/breyta mynd","unlink_desc":"Afhlekkja","link_desc":"Setja inn/breyta hlekk","redo_desc":"Endurtaka (Ctrl+Y)","undo_desc":"Taka til baka (Ctrl+Z)","indent_desc":"Draga inn","outdent_desc":"Draga \u00fat","numlist_desc":"N\u00famera\u00f0ur listi","bullist_desc":"B\u00f3lulisti","justifyfull_desc":"Jafna","justifyright_desc":"H\u00e6grijafna","justifycenter_desc":"Mi\u00f0jujafna","justifyleft_desc":"Vinstrijafna","striketrough_desc":"Yfirstrika\u00f0","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/is_dlg.js
new file mode 100644
index 000000000..7775c7e49
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.advanced_dlg',{"link_list":"Hlekkjalisti","link_is_external":"Sl\u00f3\u00f0in sem \u00fe\u00fa sl\u00f3st inn vir\u00f0ist vera utana\u00f0komandi, viltu b\u00e6ta vi\u00f0 http:// forskeytinu?","link_is_email":"Sl\u00f3\u00f0in sem \u00fe\u00fa sl\u00f3st inn vir\u00f0ist vera netfang, viltu b\u00e6ta vi\u00f0 mailto: forskeytinu?","link_titlefield":"Titill","link_target_blank":"Opna hlekk \u00ed n\u00fdjum glugga","link_target_same":"Opna hlekk \u00ed sama glugga","link_target":"\u00c1fangasta\u00f0ur","link_url":"Sl\u00f3\u00f0 hlekks","link_title":"Setja inn/breyta hlekk","image_align_right":"H\u00e6gri","image_align_left":"Vinstri","image_align_textbottom":"Botn texta","image_align_texttop":"Toppur texta","image_align_bottom":"Botn","image_align_middle":"Mi\u00f0ja","image_align_top":"Toppur","image_align_baseline":"Baseline","image_align":"J\u00f6fnun","image_hspace":"L\u00e1r\u00e9tt loftun","image_vspace":"L\u00f3\u00f0r\u00e9tt loftun","image_dimensions":"St\u00e6r\u00f0ir","image_alt":"L\u00fdsing myndar","image_list":"Myndalisti","image_border":"Rammi","image_src":"Sl\u00f3\u00f0 myndar","image_title":"Setja inn/breyta mynd","charmap_title":"Veldu t\u00e1kn","colorpicker_name":"Nafn:","colorpicker_color":"Litur:","colorpicker_named_title":"Nefndir litir","colorpicker_named_tab":"Nefndir","colorpicker_palette_title":"Litir litaspjalds","colorpicker_palette_tab":"Litaspjald","colorpicker_picker_title":"Litaveljari","colorpicker_picker_tab":"Veljari","colorpicker_title":"Veldu lit","code_wordwrap":"Word wrap","code_title":"HTML k\u00f3\u00f0a ritill","anchor_name":"Nafn akkeris","anchor_title":"Setja inn/breyta akkeri","about_loaded":"Vi\u00f0b\u00e6tur \u00ed notkun","about_version":"\u00datg\u00e1fa","about_author":"H\u00f6fundur","about_plugin":"Vi\u00f0b\u00e6tur","about_plugins":"Vi\u00f0b\u00e6tur","about_license":"Leyfi","about_help":"Hj\u00e1lp","about_general":"Um","about_title":"Um TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/it.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/it.js
new file mode 100644
index 000000000..af84c79db
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/it.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.advanced',{"underline_desc":"Sottolineato (Ctrl+U)","italic_desc":"Corsivo (Ctrl+I)","bold_desc":"Grassetto (Ctrl+B)",dd:"Descrizione definizione",dt:"Termine definizione",samp:"Esempio codice",code:"Codice",blockquote:"Testo quotato",h6:"Intestazione 6",h5:"Intestazione 5",h4:"Intestazione 4",h3:"Intestazione 3",h2:"Intestazione 2",h1:"Intestazione 1",pre:"Preformattato",address:"Indirizzo",div:"Div",paragraph:"Paragrafo",block:"Formato",fontdefault:"Famiglia carattere","font_size":"Grandezza carattere","style_select":"Stili","anchor_delta_height":"anchor_delta_height","anchor_delta_width":"anchor_delta_width","charmap_delta_height":"charmap_delta_height","charmap_delta_width":"charmap_delta_width","colorpicker_delta_height":"colorpicker_delta_height","colorpicker_delta_width":"colorpicker_delta_width","link_delta_height":"link_delta_height","link_delta_width":"link_delta_width","image_delta_height":"image_delta_height","image_delta_width":"image_delta_width","more_colors":"Colori aggiuntivi","toolbar_focus":"Vai ai pulsanti strumento - Alt+Q, Vai all\'editor - Alt-Z, Vai al percorso dell\'elemento - Alt-X",newdocument:"Sei sicuro di voler cancellare tutti i contenuti?",path:"Percorso","clipboard_msg":"Copia/Taglia/Incolla non \u00e8 disponibile in Mozilla e Firefox..\nSi desidera avere maggiori informazioni su questo problema?","blockquote_desc":"Testo quotato","help_desc":"Aiuto","newdocument_desc":"Nuovo documento","image_props_desc":"Propriet\u00e0 immagine","paste_desc":"Incolla","copy_desc":"Copia","cut_desc":"Taglia","anchor_desc":"Inserisci/modifica ancora","visualaid_desc":"Mostra/nascondi linee guida/elementi invisibili","charmap_desc":"Inserisci carattere speciale","backcolor_desc":"Seleziona colore sfondo","forecolor_desc":"Seleziona colore testo","custom1_desc":"La tua descrizione personalizzata qui","removeformat_desc":"Rimuovi formattazione","hr_desc":"Inserisci riga orizzontale","sup_desc":"Apice","sub_desc":"Pedice","code_desc":"Modifica sorgente HTML","cleanup_desc":"Pulisci codice disordinato","image_desc":"Inserisci/modifica immagine","unlink_desc":"Togli collegamento","link_desc":"Inserisci/modifica collegamento","redo_desc":"Ripristina (Ctrl+Y)","undo_desc":"Annulla (Ctrl+Z)","indent_desc":"Sposta verso interno","outdent_desc":"Sposta verso esterno","numlist_desc":"Lista ordinata","bullist_desc":"Lista non ordinata","justifyfull_desc":"Giustifica","justifyright_desc":"Allinea a destra","justifycenter_desc":"Centra","justifyleft_desc":"Allinea a sinistra","striketrough_desc":"Barrato","help_shortcut":"Premi ALT-F10 Per la barra degli strumenti. Premi ALT-0 per l\'aiuto","rich_text_area":"Rich Text Area","shortcuts_desc":"Aiuto accessibilit\u00e0",toolbar:"Barra degli strumenti"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/it_dlg.js
new file mode 100644
index 000000000..9fc5380c4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.advanced_dlg',{"link_list":"Lista link","link_is_external":"L\'URL inserito sembra essere un link esterno. Aggiungere il necessario prefisso http:// ?","link_is_email":"L\'URL inserito sembra essere un indirizzo email. Aggiungere il necessario prefisso mailto: ?","link_titlefield":"Titolo","link_target_blank":"Apri link in una nuova finestra","link_target_same":"Apri link nella stessa finestra","link_target":"Target","link_url":"URL link","link_title":"Inserisci/modifica collegamento","image_align_right":"A destra","image_align_left":"A sinistra","image_align_textbottom":"In basso al testo","image_align_texttop":"In alto al testo","image_align_bottom":"In basso","image_align_middle":"In mezzo","image_align_top":"In alto","image_align_baseline":"Alla base","image_align":"Allineamento","image_hspace":"Spaziatura orizz.","image_vspace":"Spaziatura vert.","image_dimensions":"Dimensioni","image_alt":"Descrizione","image_list":"Lista immagini","image_border":"Bordo","image_src":"URL immagine","image_title":"Inserisci/modifica immagine","charmap_title":"Seleziona carattere speciale","colorpicker_name":"Nome:","colorpicker_color":"Colore:","colorpicker_named_title":"Colori per nome","colorpicker_named_tab":"Per nome","colorpicker_palette_title":"Tavolozza dei colori","colorpicker_palette_tab":"Tavolozza","colorpicker_picker_title":"Selettore colori","colorpicker_picker_tab":"Selettore","colorpicker_title":"Seleziona un colore","code_wordwrap":"A capo automatico","code_title":"Editor sorgente HTML","anchor_name":"Nome ancora","anchor_title":"Inserisci/modifica ancora","about_loaded":"Plugin caricati","about_version":"Versione","about_author":"Autore","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Licenza","about_help":"Aiuto","about_general":"Informazioni","about_title":"Informazioni su TinyMCE","charmap_usage":"Utilizza le freccie sinistra e destra per navigare.","anchor_invalid":"Specificare un nome di ancora valido.","accessibility_help":"Guida accessibilit\u00e0","accessibility_usage_title":"Uso generale","invalid_color_value":"Colore non valido"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ja.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ja.js
new file mode 100644
index 000000000..f5533c548
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ja.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.advanced',{"underline_desc":"\u4e0b\u7dda (Ctrl+U)","italic_desc":"\u659c\u4f53 (Ctrl+I)","bold_desc":"\u592a\u5b57 (Ctrl+B)",dd:"\u8a9e\u53e5\u306e\u8aac\u660e",dt:"\u8a9e\u53e5\u306e\u5b9a\u7fa9",samp:"\u30b3\u30fc\u30c9\u306e\u4f8b",code:"\u30b3\u30fc\u30c9",blockquote:"\u5f15\u7528",h6:"\u898b\u51fa\u30576",h5:"\u898b\u51fa\u30575",h4:"\u898b\u51fa\u30574",h3:"\u898b\u51fa\u30573",h2:"\u898b\u51fa\u30572",h1:"\u898b\u51fa\u30571",pre:"\u6574\u5f62\u6e08\u307f",address:"\u4f4f\u6240",div:"div\u8981\u7d20",paragraph:"\u6bb5\u843d",block:"\u66f8\u5f0f",fontdefault:"\u30d5\u30a9\u30f3\u30c8","font_size":"\u30d5\u30a9\u30f3\u30c8\u306e\u5927\u304d\u3055","style_select":"\u30b9\u30bf\u30a4\u30eb","more_colors":"\u3055\u3089\u306b\u8272\u3092\u4f7f\u7528...","toolbar_focus":"\u30c4\u30fc\u30eb\u30dc\u30bf\u30f3\u3078\u79fb\u52d5 - Alt Q, \u30a8\u30c7\u30a3\u30bf\u306b\u79fb\u52d5 - Alt-Z, \u8981\u7d20\u306e\u30d1\u30b9\u3078\u79fb\u52d5 - Alt-X",newdocument:"\u672c\u5f53\u306b\u3059\u3079\u3066\u306e\u5185\u5bb9\u3092\u6d88\u53bb\u3057\u3066\u3088\u3044\u3067\u3059\u304b?",path:"\u30d1\u30b9","clipboard_msg":"\u30b3\u30d4\u30fc/\u5207\u308a\u53d6\u308a/\u8cbc\u308a\u4ed8\u3051\u306fMozilla\u3068Firefox\u3067\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002\n\u3053\u306e\u554f\u984c\u306e\u8a73\u7d30\u3092\u77e5\u308a\u305f\u3044\u3067\u3059\u304b?","blockquote_desc":"\u5f15\u7528\u30d6\u30ed\u30c3\u30af","help_desc":"\u30d8\u30eb\u30d7","newdocument_desc":"\u65b0\u3057\u3044\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8","image_props_desc":"\u753b\u50cf\u306e\u5c5e\u6027","paste_desc":"\u8cbc\u308a\u4ed8\u3051","copy_desc":"\u30b3\u30d4\u30fc","cut_desc":"\u5207\u308a\u53d6\u308a","anchor_desc":"\u30a2\u30f3\u30ab\u30fc\u306e\u633f\u5165/\u7de8\u96c6","visualaid_desc":"\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3068\u975e\u8868\u793a\u8981\u7d20\u306e\u8868\u793a\u3092\u5207\u66ff","charmap_desc":"\u7279\u6b8a\u6587\u5b57","backcolor_desc":"\u80cc\u666f\u306e\u8272","forecolor_desc":"\u6587\u5b57\u306e\u8272","custom1_desc":"\u8aac\u660e\u6587\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002","removeformat_desc":"\u66f8\u5f0f\u306e\u524a\u9664","hr_desc":"\u6c34\u5e73\u7dda\u3092\u633f\u5165","sup_desc":"\u4e0a\u4ed8\u304d\u6587\u5b57","sub_desc":"\u4e0b\u4ed8\u304d\u6587\u5b57","code_desc":"HTML\u306e\u30bd\u30fc\u30b9\u3092\u7de8\u96c6","cleanup_desc":"\u4e71\u96d1\u306a\u30b3\u30fc\u30c9\u3092\u6574\u5f62","image_desc":"\u753b\u50cf\u306e\u633f\u5165/\u7de8\u96c6","unlink_desc":"\u30ea\u30f3\u30af\u3092\u89e3\u9664","link_desc":"\u30ea\u30f3\u30af\u306e\u633f\u5165/\u7de8\u96c6","redo_desc":"\u3084\u308a\u76f4\u3059 (Ctrl+Y)","undo_desc":"\u5143\u306b\u623b\u3059 (Ctrl+Z)","indent_desc":"\u5b57\u4e0b\u3052\u3092\u5897\u3084\u3059","outdent_desc":"\u5b57\u4e0b\u3052\u3092\u6e1b\u3089\u3059","numlist_desc":"\u756a\u53f7\u3064\u304d\u30ea\u30b9\u30c8","bullist_desc":"\u756a\u53f7\u306a\u3057\u30ea\u30b9\u30c8","justifyfull_desc":"\u5747\u7b49\u5272\u4ed8","justifyright_desc":"\u53f3\u63c3\u3048","justifycenter_desc":"\u4e2d\u592e\u63c3\u3048","justifyleft_desc":"\u5de6\u63c3\u3048","striketrough_desc":"\u53d6\u308a\u6d88\u3057\u7dda","help_shortcut":"ALT-F10 \u3067\u30c4\u30fc\u30eb\u30d0\u30fc\u3001ALT-0 \u3067\u30d8\u30eb\u30d7","rich_text_area":"\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2","shortcuts_desc":"\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u306e\u30d8\u30eb\u30d7",toolbar:"\u30c4\u30fc\u30eb\u30d0\u30fc","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ja_dlg.js
new file mode 100644
index 000000000..234fb71a4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.advanced_dlg',{"link_list":"\u30ea\u30f3\u30af\u306e\u4e00\u89a7","link_is_external":"\u5165\u529b\u3057\u305fURL\u306f\u5916\u90e8\u306e\u30ea\u30f3\u30af\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b http:// \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?","link_is_email":"\u5165\u529b\u3057\u305fURL\u306f\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b mailto: \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?","link_titlefield":"\u30bf\u30a4\u30c8\u30eb","link_target_blank":"\u65b0\u3057\u3044\u30a6\u30a4\u30f3\u30c9\u30a6\u3067\u958b\u304f","link_target_same":"\u540c\u3058\u30a6\u30a4\u30f3\u30c9\u30a6\u3067\u958b\u304f","link_target":"\u30bf\u30fc\u30b2\u30c3\u30c8","link_url":"\u30ea\u30f3\u30af\u306eURL","link_title":"\u30ea\u30f3\u30af\u306e\u633f\u5165\u3084\u7de8\u96c6","image_align_right":"\u53f3\u63c3\u3048","image_align_left":"\u5de6\u63c3\u3048","image_align_textbottom":"\u30c6\u30ad\u30b9\u30c8\u306e\u4e0b\u7aef\u63c3\u3048","image_align_texttop":"\u30c6\u30ad\u30b9\u30c8\u306e\u4e0a\u7aef\u63c3\u3048","image_align_bottom":"\u4e0b\u63c3\u3048","image_align_middle":"\u4e2d\u592e\u63c3\u3048","image_align_top":"\u4e0a\u63c3\u3048","image_align_baseline":"\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u63c3\u3048","image_align":"\u914d\u7f6e","image_hspace":"\u5de6\u53f3\u306e\u4f59\u767d","image_vspace":"\u4e0a\u4e0b\u306e\u4f59\u767d","image_dimensions":"\u5bf8\u6cd5","image_alt":"\u753b\u50cf\u306e\u8aac\u660e","image_list":"\u753b\u50cf\u306e\u4e00\u89a7","image_border":"\u67a0\u7dda","image_src":"\u753b\u50cf\u306eURL","image_title":"\u753b\u50cf\u306e\u633f\u5165\u3084\u7de8\u96c6","charmap_title":"\u7279\u6b8a\u6587\u5b57","colorpicker_name":"\u540d\u524d:","colorpicker_color":"\u8272:","colorpicker_named_title":"\u5b9a\u7fa9\u6e08\u307f\u306e\u8272","colorpicker_named_tab":"\u5b9a\u7fa9\u6e08\u307f","colorpicker_palette_title":"\u30d1\u30ec\u30c3\u30c8\u306e\u8272","colorpicker_palette_tab":"\u30d1\u30ec\u30c3\u30c8","colorpicker_picker_title":"\u8272\u9078\u629e","colorpicker_picker_tab":"\u9078\u629e","colorpicker_title":"\u8272\u3092\u9078\u629e","code_wordwrap":"\u884c\u306e\u6298\u308a\u8fd4\u3057","code_title":"HTML\u306e\u30bd\u30fc\u30b9\u30a8\u30c7\u30a3\u30bf","anchor_name":"\u30a2\u30f3\u30ab\u30fc\u306e\u540d\u524d","anchor_title":"\u30a2\u30f3\u30ab\u30fc\u306e\u633f\u5165\u3084\u7de8\u96c6","about_loaded":"\u8aad\u307f\u8fbc\u307f\u6e08\u307f\u306e\u30d7\u30e9\u30b0\u30a4\u30f3","about_version":"\u30d0\u30fc\u30b8\u30e7\u30f3","about_author":"\u4f5c\u6210\u8005","about_plugin":"\u30d7\u30e9\u30b0\u30a4\u30f3","about_plugins":"\u30d7\u30e9\u30b0\u30a4\u30f3","about_license":"\u30e9\u30a4\u30bb\u30f3\u30b9","about_help":"\u30d8\u30eb\u30d7","about_general":"TinyMCE\u306b\u3064\u3044\u3066","about_title":"TinyMCE\u306b\u3064\u3044\u3066","charmap_usage":"\u5de6\u53f3\u306e\u30ab\u30fc\u30bd\u30eb\u30ad\u30fc\u3092\u4f7f\u7528\u3057\u3066\u79fb\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002","anchor_invalid":"\u6709\u52b9\u306a\u30a2\u30f3\u30ab\u30fc\u306e\u540d\u524d\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002","accessibility_help":"\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u306e\u30d8\u30eb\u30d7","accessibility_usage_title":"\u5168\u822c\u7684\u306a\u4f7f\u3044\u65b9","invalid_color_value":"\u7121\u52b9\u306a\u5024"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ka.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ka.js
new file mode 100644
index 000000000..bc2b1faa9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ka.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.advanced',{"underline_desc":"\u10db\u10dd\u10ee\u10d0\u10d6\u10e3\u10e0\u10da\u10d8 (Ctrl+U)","italic_desc":"\u10d3\u10d0\u10ee\u10e0\u10d8\u10da\u10d8 (Ctrl+I)","bold_desc":"\u10dc\u10d0\u10ee\u10d4\u10d5\u10e0\u10d0\u10d3 \u10e1\u10e5\u10d4\u10da\u10d8 (Ctrl+B)",dd:"\u10ea\u10dc\u10dd\u10d1\u10d0\u10e0\u10d8\u10e1 \u10d0\u10e6\u10ec\u10d4\u10e0\u10d0",dt:"\u10ea\u10dc\u10dd\u10d1\u10d0\u10e0\u10d8\u10e1 \u10e2\u10d4\u10e0\u10db\u10d8\u10dc\u10d8",samp:"\u10d9\u10dd\u10d3\u10d8\u10e1 \u10db\u10d0\u10d2\u10d0\u10da\u10d8\u10d7\u10d8",code:"\u10d9\u10dd\u10d3\u10d8",blockquote:"\u10ea\u10d8\u10e2\u10d0\u10e2\u10d0",h6:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 6",h5:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 5",h4:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 4",h3:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 3",h2:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 2",h1:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 1",pre:"\u10d2\u10d0\u10d3\u10d0\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d4\u10d1\u10e3\u10da\u10d8",address:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8",div:"Div",paragraph:"\u10d0\u10d1\u10d6\u10d0\u10ea\u10d8",block:"\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8",fontdefault:"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8","font_size":"\u10d6\u10dd\u10db\u10d0","style_select":"\u10e1\u10e2\u10d8\u10da\u10d8","more_colors":"\u10e1\u10ee\u10d5\u10d0 \u10e4\u10d4\u10e0\u10d4\u10d1\u10d8...","toolbar_focus":"\u10e6\u10d8\u10da\u10d0\u10d9\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10dc\u10d4\u10da\u10d6\u10d4 \u10d2\u10d0\u10d3\u10d0\u10e1\u10d5\u10da\u10d0 (Alt+Q). \u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10dd\u10e0\u10d6\u10d4 \u10d2\u10d0\u10d3\u10d0\u10e1\u10d5\u10da\u10d0 (Alt+Z). \u10d2\u10d6\u10d8\u10e1 \u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10d6\u10d4 \u10d2\u10d0\u10d3\u10d0\u10e1\u10d5\u10da\u10d0 (Alt+X).",newdocument:"\u10d3\u10d0\u10e0\u10ec\u10db\u10e3\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 \u10ee\u10d0\u10e0\u10d7, \u10e0\u10dd\u10db \u10d2\u10e1\u10e3\u10e0\u10d7 \u10e7\u10d5\u10d4\u10da\u10d0\u10e4\u10d4\u10e0\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0",path:"\u10e2\u10d4\u10d2\u10d4\u10d1\u10d8","clipboard_msg":"\u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0, \u10d0\u10db\u10dd\u10ed\u10e0\u10d0 \u10d3\u10d0 \u10e9\u10d0\u10e1\u10db\u10d0 Firefox-\u10e8\u10d8 \u10d0\u10e0 \u10db\u10e3\u10e8\u10d0\u10dd\u10d1\u10e1.\\r\n\u10d2\u10e1\u10e3\u10e0\u10d7 \u10db\u10d8\u10d8\u10e6\u10dd\u10d7 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d0?","blockquote_desc":"\u10ea\u10d8\u10e2\u10d0\u10e2\u10d0","help_desc":"\u10d3\u10d0\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10d0","newdocument_desc":"\u10d0\u10ee\u10d0\u10da\u10d8 \u10d3\u10dd\u10d9\u10e3\u10db\u10d4\u10dc\u10e2\u10d8","image_props_desc":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","paste_desc":"\u10e9\u10d0\u10e1\u10db\u10d0","copy_desc":"\u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0","cut_desc":"\u10d0\u10db\u10dd\u10ed\u10e0\u10d0","anchor_desc":"\u10e6\u10e3\u10d6\u10d0\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","visualaid_desc":"\u10e7\u10d5\u10d4\u10da\u10d0 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd","charmap_desc":"\u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","backcolor_desc":"\u10db\u10dd\u10dc\u10d8\u10e1\u10dc\u10e3\u10da\u10d8 \u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","forecolor_desc":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","custom1_desc":"\u10e1\u10d0\u10d9\u10e3\u10d7\u10d0\u10e0\u10d8 \u10d0\u10e6\u10ec\u10d4\u10e0\u10d0","removeformat_desc":"\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8\u10e1 \u10d2\u10d0\u10ec\u10db\u10d4\u10dc\u10d3\u10d0","hr_desc":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","sup_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d6\u10d4\u10db\u10dd\u10d7","sub_desc":"\u10e1\u10e2\u10d8\u10e0\u10e5\u10dd\u10dc\u10d8\u10e1 \u10e5\u10d5\u10d4\u10db\u10dd\u10d7","code_desc":"HTML \u10d9\u10dd\u10d3\u10d8\u10e1 \u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","cleanup_desc":"\u10d6\u10d4\u10d3\u10db\u10d4\u10e2\u10d8 \u10d9\u10dd\u10d3\u10d8\u10e1\u10d0\u10d2\u10d0\u10dc \u10d2\u10d0\u10ec\u10db\u10d4\u10dc\u10d3\u10d0","image_desc":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","unlink_desc":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","link_desc":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e8\u10d4\u10ea\u10d5\u10da\u10d0","redo_desc":"\u10d3\u10d0\u10d1\u10e0\u10e3\u10dc\u10d4\u10d1\u10d0 (Ctrl+Y)","undo_desc":"\u10d2\u10d0\u10e3\u10e5\u10db\u10d4\u10d1\u10d0 (Ctrl+Z)","indent_desc":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10d6\u10e0\u10d3\u10d0","outdent_desc":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10db\u10ea\u10d8\u10e0\u10d4\u10d1\u10d0","numlist_desc":"\u10d3\u10d0\u10dc\u10dd\u10db\u10e0\u10d8\u10da\u10d8 \u10e1\u10d8\u10d0","bullist_desc":"\u10db\u10d0\u10e0\u10d9\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8 \u10e1\u10d8\u10d0","justifyfull_desc":"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4\u10d6\u10d4","justifyright_desc":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5","justifycenter_desc":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0 \u10ea\u10d4\u10dc\u10e2\u10e0\u10d6\u10d4","justifyleft_desc":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","striketrough_desc":"\u10d2\u10d0\u10d3\u10d0\u10ee\u10d0\u10d6\u10e3\u10da\u10d8","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ka_dlg.js
new file mode 100644
index 000000000..a25659f34
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.advanced_dlg',{"link_list":"\u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0","link_is_external":"\u10e8\u10d4\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10d2\u10d0\u10d5\u10e1 \u10d2\u10d0\u10e0\u10d4 \u10d1\u10db\u10e3\u10da\u10e1, \u10d3\u10d0\u10d5\u10d0\u10db\u10d0\u10d7\u10dd\u10e2 \u10de\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8 http://?","link_is_email":"\u10e8\u10d4\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10d2\u10d0\u10d5\u10e1 \u10d4\u10da.\u10e4\u10dd\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10e1, \u10d3\u10d0\u10d5\u10d0\u10db\u10d0\u10e2\u10dd\u10d7 \u10de\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8 mailto:?","link_titlefield":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","link_target_blank":"\u10d0\u10ee\u10d0\u10da \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","link_target_same":"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","link_target":"\u10db\u10d8\u10d6\u10d0\u10dc\u10d8","link_url":"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8","link_title":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","image_align_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_textbottom":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_texttop":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_bottom":"\u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_middle":"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d6\u10d4","image_align_top":"\u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_baseline":"\u10e1\u10d0\u10d1\u10d0\u10d6\u10e1\u10dd \u10ee\u10d0\u10d6\u10d8\u10e1 \u10db\u10d8\u10ee\u10d4\u10d3\u10d5\u10d8\u10d7","image_align":"\u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","image_hspace":"\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","image_vspace":"\u10d5\u10d4\u10e0\u10e2. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","image_dimensions":"\u10d6\u10dd\u10db\u10d0","image_alt":"\u10d0\u10e6\u10ec\u10d4\u10e0\u10d0","image_list":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0","image_border":"\u10e9\u10d0\u10e0\u10e9\u10dd","image_src":"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8","image_title":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","charmap_title":"\u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10e1 \u10d0\u10e0\u10e9\u10d4\u10d5\u10d0","colorpicker_name":"\u10e1\u10d0\u10ee\u10d4\u10da\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0:","colorpicker_color":"\u10d9\u10dd\u10d3\u10d8:","colorpicker_named_title":"\u10e4\u10d4\u10e0\u10d4\u10d1\u10d8","colorpicker_named_tab":"\u10e1\u10d0\u10ee\u10d4\u10da\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0","colorpicker_palette_title":"\u10e4\u10d4\u10e0\u10d4\u10d1\u10d8","colorpicker_palette_tab":"\u10de\u10d0\u10da\u10d8\u10e2\u10e0\u10d0","colorpicker_picker_title":"\u10e4\u10d4\u10e0\u10d7\u10d0 \u10e8\u10d4\u10db\u10e0\u10e9\u10d4\u10d5\u10d8","colorpicker_picker_tab":"\u10e1\u10de\u10d4\u10e5\u10e2\u10e0\u10d8","colorpicker_title":"\u10d0\u10d5\u10d8\u10e0\u10e9\u10d8\u10dd\u10d7 \u10e4\u10d4\u10e0\u10d8","code_wordwrap":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d2\u10d0\u10d3\u10d0\u10e2\u10d0\u10dc\u10d0","code_title":"HTML \u10d9\u10dd\u10d3\u10d8\u10e1 \u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10dd\u10e0\u10d8","anchor_name":"\u10e6\u10e3\u10d6\u10d0\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8","anchor_title":"\u10e6\u10e3\u10d6\u10d0\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","about_loaded":"\u10db\u10d8\u10db\u10d0\u10d2\u10e0\u10d4\u10d1\u10e3\u10da\u10d8 \u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d4\u10d1\u10d8","about_version":"\u10d5\u10d4\u10e0\u10e1\u10d8\u10d0","about_author":"\u10d0\u10d5\u10e2\u10dd\u10e0\u10d8","about_plugin":"\u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d8","about_plugins":"\u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d4\u10d1\u10d8","about_license":"\u10da\u10d8\u10ea\u10d4\u10dc\u10d6\u10d8\u10d0","about_help":"\u10d3\u10d0\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10d0","about_general":"\u10d0\u10e6\u10ec\u10d4\u10e0\u10d8\u10da\u10dd\u10d1\u10d0","about_title":"TinyMCE \u10d0\u10e6\u10ec\u10d4\u10e0\u10d8\u10da\u10dd\u10d1\u10d0","anchor_invalid":"\u10e8\u10d4\u10d8\u10e7\u10d5\u10d0\u10dc\u10d4\u10d7 \u10e6\u10e3\u10d6\u10d0\u10e1 \u10d9\u10dd\u10e0\u10d4\u10e5\u10e2\u10e3\u10da\u10d8 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kl.js
new file mode 100644
index 000000000..e23a1f408
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kl_dlg.js
new file mode 100644
index 000000000..df510b4cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/km.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/km.js
new file mode 100644
index 000000000..441571d2c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/km.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.advanced',{"underline_desc":"\u1782\u17bc\u179f\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1780\u17d2\u179a\u17c4\u1798 (Ctrl+U)","italic_desc":"\u1791\u17d2\u179a\u17c1\u178f (Ctrl+I)","bold_desc":"\u178a\u17b7\u178f (Ctrl+B)",dd:"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u1793\u17b7\u1799\u1798\u1793\u17d0\u1799",dt:"\u1793\u17b7\u1799\u1798\u1793\u17d0\u1799\u1796\u17b6\u1780\u17d2\u1799",samp:"\u1782\u17c6\u179a\u17bc\u1780\u17bc\u178a",code:"\u1780\u17bc\u178a",blockquote:"\u179f\u1798\u17d2\u179a\u1784\u17cb\u1794\u178e\u17d2\u178f\u17bb\u17c6",h6:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e6",h5:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e5",h4:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e4",h3:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e3",h2:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e2",h1:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e1",pre:"\u1792\u17d2\u179c\u17be\u1791\u17d2\u179a\u1784\u17cb\u1791\u17d2\u179a\u17b6\u1799\u1787\u17b6\u1798\u17bb\u1793",address:"\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793",div:"\u179f\u17d2\u179b\u17b6\u1780DIV",paragraph:"\u1780\u1790\u17b6\u1781\u178e\u17d2\u178c",block:"\u1791\u17d2\u179a\u1784\u17cb\u1791\u17d2\u179a\u17b6\u1799",fontdefault:"\u1782\u17d2\u179a\u17bd\u179f\u17b6\u179a\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a","font_size":"\u1791\u17c6\u17a0\u17c6\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a","style_select":"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798","anchor_delta_height":"10","anchor_delta_width":"0","charmap_delta_height":"10","charmap_delta_width":"0","colorpicker_delta_height":"0","colorpicker_delta_width":"0","link_delta_height":"20","link_delta_width":"5","more_colors":"\u1796\u178e\u17cc\u1795\u17d2\u179f\u17c1\u1784\u1791\u17c0\u178f","toolbar_focus":"\u179b\u17c4\u178f\u1791\u17c5\u1786\u17d2\u1793\u17bb\u1785\u17a7\u1794\u1780\u179a\u178e\u17cd\u17d6 Alt+Q\u00a0\u17d4 \u179b\u17c4\u178f\u1791\u17c5\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1793\u17b7\u1796\u1793\u17d2\u1792\u17d6 Alt-Z\u00a0\u17d4 \u179b\u17c4\u178f\u1791\u17c5\u1795\u17d2\u179b\u17bc\u179c\u1792\u17b6\u178f\u17bb\u17d6 Alt-X",newdocument:"\u178f\u17be\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17b6\u1780\u178a\u1787\u17b6\u1785\u1784\u17cb\u179f\u17c6\u17a2\u17b6\u178f\u1798\u17b6\u178f\u17b7\u1780\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17ac?",path:"\u1795\u17d2\u179b\u17bc\u179c","clipboard_msg":"\u1785\u1798\u17d2\u179b\u1784/\u1780\u17b6\u178f\u17cb/\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1792\u17d2\u179c\u17be\u1794\u17b6\u1793\u1780\u17d2\u1793\u17bb\u1784 Mozilla \u1793\u17b7\u1784 Firefox\u17d4 n\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u17b6\u1793\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17c6\u1796\u17b8\u1794\u1789\u17d2\u17a0\u17b6\u1793\u17c1\u17c7\u1791\u17c1?","blockquote_desc":"\u179f\u1798\u17d2\u179a\u1784\u17cb\u1794\u178e\u17d2\u178f\u17bb\u17c6","help_desc":"\u1787\u17c6\u1793\u17bd\u1799","newdocument_desc":"\u17af\u1780\u179f\u17b6\u179a\u1790\u17d2\u1798\u17b8","image_props_desc":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u179a\u17bc\u1794\u1797\u17b6\u1796","paste_desc":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb","copy_desc":"\u1785\u1798\u17d2\u179b\u1784","cut_desc":"\u1780\u17b6\u178f\u17cb","anchor_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1799\u17bb\u1790\u17d2\u1780\u17b6","visualaid_desc":"\u1794\u17b7\u1791\u1794\u17be\u1780\u1794\u178e\u17d2\u178f\u17b6\u1782\u17c4\u179b\u1780\u17b6\u179a\u178e\u17cd\u178e\u17c2\u1793\u17b6\u17c6/\u1792\u17b6\u178f\u17bb\u1795\u17d2\u179f\u17c1\u1784\u17d7\u178a\u17c2\u179b\u1798\u17be\u179b\u1798\u17b7\u1793\u1783\u17be\u1789","charmap_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u1795\u17d2\u1791\u17b6\u179b\u17cb\u1781\u17d2\u179b\u17bd\u1793","backcolor_desc":"\u1787\u17d2\u179a\u17be\u179f\u1796\u178e\u17cc\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","forecolor_desc":"\u1787\u17d2\u179a\u17be\u179f\u1796\u178e\u17cc\u17a2\u178f\u17d2\u1790\u1794\u1791","custom1_desc":"\u1780\u17b6\u179a\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u1795\u17d2\u1791\u17b6\u179b\u17cb\u1781\u17d2\u179b\u17bd\u1793\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1793\u17c5\u1791\u17b8\u1793\u17c1\u17c7","removeformat_desc":"\u1799\u1780\u1791\u17d2\u179a\u1784\u17cb\u1791\u17d2\u179a\u17b6\u1799\u1785\u17c1\u1789","hr_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1795\u17d2\u178f\u17c1\u1780","sup_desc":"\u17a2\u1780\u17d2\u179f\u179a\u178f\u17bc\u1785\u179b\u17be","sub_desc":"\u17a2\u1780\u17d2\u179f\u179a\u178f\u17bc\u1785\u1780\u17d2\u179a\u17c4\u1798","code_desc":"\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u1797\u1796 HTML","cleanup_desc":"\u179f\u17c6\u17a2\u17b6\u178f\u1780\u17bc\u178a\u179f\u17d2\u1798\u17bb\u1782\u179f\u17d2\u1798\u17b6\u1789","image_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u17bc\u1794\u1797\u17b6\u1796","unlink_desc":"\u179f\u17d2\u179a\u17b6\u1799\u178f\u17c6\u178e","link_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u178f\u17c6\u178e","redo_desc":"\u1792\u17d2\u179c\u17be\u179c\u17b7\u1789 (Ctrl+Y)","undo_desc":"\u1798\u17b7\u1793\u1792\u17d2\u179c\u17be\u179c\u17b7\u1789 (Ctrl+Z)","indent_desc":"\u1785\u17bc\u179b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb","outdent_desc":"\u1785\u17c1\u1789\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb","numlist_desc":"\u1794\u1789\u17d2\u1787\u17b8\u1798\u17b6\u1793\u179b\u17c6\u178a\u17b6\u1794\u17cb","bullist_desc":"\u1794\u1789\u17d2\u1787\u17b8\u1782\u17d2\u1798\u17b6\u1793\u179b\u17c6\u178a\u17b6\u1794\u17cb","justifyfull_desc":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u1796\u17c1\u1789","justifyright_desc":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u179f\u17d2\u178f\u17b6\u17c6","justifycenter_desc":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u1780\u178e\u17d2\u178f\u17b6\u179b","justifyleft_desc":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u1786\u17d2\u179c\u17c1\u1784","striketrough_desc":"\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1786\u17bc\u178f","help_shortcut":"\u1785\u17bb\u1785 ALT-F10 \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179a\u1794\u17b6\u179a\u17a7\u1794\u1780\u179a\u178e\u17cd\u00a0\u17d4 \u1785\u17bb\u1785 ALT-0 \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1787\u17c6\u1793\u17bd\u1799","rich_text_area":"\u178f\u17c6\u1794\u1793\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u179f\u1798\u17d2\u1794\u17bc\u179a\u1794\u17c2\u1794","shortcuts_desc":"\u1787\u17c6\u1793\u17bd\u1799\u1798\u1792\u17d2\u1799\u17c4\u1794\u17b6\u1799\u1784\u17b6\u1799\u179f\u17d2\u179a\u17bd\u179b",toolbar:"\u179a\u1794\u17b6\u179a\u17a7\u1794\u1780\u179a\u178e\u17cd","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/km_dlg.js
new file mode 100644
index 000000000..a722cbe5d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.advanced_dlg',{"link_list":"\u1794\u1789\u17d2\u1787\u17b8\u178f\u17c6\u178e","link_is_external":"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c6\u1793\u1784\u1787\u17b6\u178f\u17c6\u178e\u1780\u17d2\u179a\u17c5, \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u179a\u179f\u17c1\u179a http:// \u1793\u17c5\u178a\u17be\u1798\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17c1?","link_is_email":"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c6\u1793\u1784\u1787\u17b6\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u17a2\u17ca\u17b8\u1798\u17c2\u179b \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u179a\u179f\u17c1\u179a mailto: \u1793\u17c5\u178a\u17be\u1798\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17c1?","link_titlefield":"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784","link_target_blank":"\u1794\u17be\u1780\u178f\u17c6\u178e\u1780\u17d2\u1793\u17bb\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1790\u17d2\u1798\u17b8","link_target_same":"\u1794\u17be\u1780\u178f\u17c6\u178e\u1780\u17d2\u1793\u17bb\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u178f\u17c2\u1798\u17bd\u1799","link_target":"\u1782\u17c4\u179b\u178a\u17c5","link_url":"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793URL\u178f\u17c6\u178e","link_title":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u178f\u17c6\u178e","image_align_right":"\u179f\u17d2\u178f\u17b6\u17c6","image_align_left":"\u1786\u17d2\u179c\u17c1\u1784","image_align_textbottom":"\u1780\u17d2\u179a\u17c4\u1798\u17a2\u178f\u17d2\u1790\u1794\u1791","image_align_texttop":"\u179b\u17be\u17a2\u178f\u17d2\u1790\u1794\u1791","image_align_bottom":"\u1780\u17d2\u179a\u17c4\u1798","image_align_middle":"\u1780\u178e\u17d2\u178f\u17b6\u179b","image_align_top":"\u179b\u17be","image_align_baseline":"\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1782\u17c4\u179b","image_align":"\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17b9\u1798","image_hspace":"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1795\u17d2\u178f\u17c1\u1780","image_vspace":"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1794\u1789\u17d2\u1788\u179a","image_dimensions":"\u179c\u17b7\u1798\u17b6\u178f\u17d2\u179a","image_alt":"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u179a\u17bc\u1794\u1797\u17b6\u1796","image_list":"\u1794\u1789\u17d2\u1787\u17b8\u179a\u17bc\u1794\u1797\u17b6\u1796","image_border":"\u179f\u17ca\u17bb\u1798","image_src":"\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u179a\u17bc\u1794\u1797\u17b6\u1796","image_title":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u17bc\u1794\u1797\u17b6\u1796","charmap_title":"\u1787\u17d2\u179a\u17be\u179f\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u1795\u17d2\u1791\u17b6\u179b\u17cb\u1781\u17d2\u179b\u17bd\u1793","colorpicker_name":"\u1788\u17d2\u1798\u17c4\u17c7\u17d6","colorpicker_color":"\u1796\u178e\u17cc\u17d6","colorpicker_named_title":"\u1780\u17d2\u178f\u17b6\u179a\u179b\u17b6\u1799\u1796\u178e\u17cc","colorpicker_named_tab":"\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7","colorpicker_palette_title":"\u1780\u17d2\u178f\u17b6\u179a\u179b\u17b6\u1799\u1796\u178e\u17cc","colorpicker_palette_tab":"\u1780\u17d2\u178f\u17b6\u179a\u179b\u17b6\u1799","colorpicker_picker_title":"\u1794\u17d2\u179a\u178a\u17b6\u1794\u17cb\u1787\u17d2\u179a\u17be\u179f\u1796\u178e\u17cc","colorpicker_picker_tab":"\u1794\u17d2\u179a\u178a\u17b6\u1794\u17cb\u1787\u17d2\u179a\u17be\u179f","colorpicker_title":"\u1787\u17d2\u179a\u17be\u179f\u1796\u178e\u17cc","code_wordwrap":"\u1794\u1784\u17d2\u1781\u17c6\u1785\u17bb\u17c7\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb","code_title":"\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1793\u17b7\u1796\u1793\u17d2\u1792\u1792\u1793\u1792\u17b6\u1793 HTML","anchor_name":"\u1788\u17d2\u1798\u17c4\u17c7\u1799\u17bb\u1790\u17d2\u1780\u17b6","anchor_title":"\u1794\u1789\u17d2\u1787\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1799\u17bb\u1790\u17d2\u1780\u17b6","about_loaded":"\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1787\u17c6\u1793\u17bd\u1799\u1794\u17b6\u1793\u1795\u17d2\u1791\u17bb\u1780","about_version":"\u1780\u17c6\u178e\u17c2","about_author":"\u17a2\u17d2\u1793\u1780\u1793\u17b7\u1796\u1793\u17d2\u1792","about_plugin":"\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1787\u17c6\u1793\u17bd\u1799","about_plugins":"\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1787\u17c6\u1793\u17bd\u1799","about_license":"\u17a2\u1787\u17d2\u1789\u17b6\u1794\u178e\u17d2\u178e","about_help":"\u1787\u17c6\u1793\u17bd\u1799","about_general":"\u17a2\u17c6\u1796\u17b8","about_title":"\u17a2\u17c6\u1796\u17b8 TinyMCE","charmap_usage":"\u1794\u17d2\u179a\u17be\u179f\u1789\u17d2\u1789\u17b6\u1796\u17d2\u179a\u17bd\u1789\u1786\u17d2\u179c\u17c1\u1784 \u1793\u17b7\u1784\u179f\u17d2\u178a\u17b6\u17c6\u178a\u17be\u1798\u17d2\u1794\u17b8\u1793\u17b6\u17c6\u1791\u17b7\u179f\u00a0\u17d4","anchor_invalid":"\u179f\u17bc\u1798\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u1799\u17bb\u1790\u17d2\u1780\u17b6\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u00a0\u17d4","accessibility_help":"\u1787\u17c6\u1793\u17bd\u1799\u1784\u17b6\u1799\u179f\u17d2\u179a\u17bd\u179b","accessibility_usage_title":"\u1794\u1798\u17d2\u179a\u17be\u1794\u1798\u17d2\u179a\u17b6\u179f\u17cb\u1791\u17bc\u1791\u17c5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ko.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ko.js
new file mode 100644
index 000000000..43a436801
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ko.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.advanced',{"underline_desc":"\ubc11\uc904(Ctrl-U)","italic_desc":"\uae30\uc6b8\uc778 \uae00\uaf34(Ctrl-I)","bold_desc":"\uad75\uc740 \uae00\uaf34(Ctrl-B)",dd:"\uc815\uc758 \uc124\uba85",dt:"\uc815\uc758 \uc5b4\uad6c",samp:"\ucf54\ub4dc \uc608\uc2dc",code:"\ucf54\ub4dc",blockquote:"\uc778\uc6a9\ubb38",h6:"\ud45c\uc81c6",h5:"\ud45c\uc81c5",h4:"\ud45c\uc81c4",h3:"\ud45c\uc81c3",h2:"\ud45c\uc81c2",h1:"\ud45c\uc81c1",pre:"pre",address:"\uc8fc\uc18c",div:"Div",paragraph:"\ub2e8\ub77d",block:"\ud615\uc2dd",fontdefault:"\uae00\uaf34\uad70","font_size":"\uae00\uaf34 \ud06c\uae30","style_select":"\uc11c\uc2dd","more_colors":"\uadf8 \uc678\uc758 \uc0c9","toolbar_focus":"\ubc84\ud2bc\uc73c\ub85c \uc810\ud504 - Alt-Q, \uc5d0\ub514\ud130\ub85c \uc810\ud504 - Alt-Z, Jump to element path - Alt-X",newdocument:"\uc815\ub9d0 \ubaa8\ub4e0 \ub0b4\uc6a9\uc744 \uc9c0\uc6b0\uc2dc\uaca0\uc2b5\ub2c8\uae4c?",path:"\uacbd\ub85c","clipboard_msg":"Mozilla \ubc0f Firefox\uc5d0\uc11c\ub294 \ubcf5\uc0ac/\uc798\ub77c\ub0b4\uae30/\ubd99\uc774\uae30\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774 \ubb38\uc81c\uc5d0 \ub300\ud574 \ub354 \uc790\uc138\ud55c \uc0ac\ud56d\uc744 \ubcf4\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","blockquote_desc":"\uc778\uc6a9\ubb38","help_desc":"\ub3c4\uc6c0\ub9d0","newdocument_desc":"\uc0c8 \ubb38\uc11c","image_props_desc":"\uc774\ubbf8\uc9c0 \uc18d\uc131","paste_desc":"\ubd99\uc774\uae30(Ctrl-V)","copy_desc":"\ubcf5\uc0ac(Ctrl-C)","cut_desc":"\uc798\ub77c\ub0b4\uae30(Ctrl-X)","anchor_desc":"\uc575\ucee4 \uc0bd\uc785/\ud3b8\uc9d1","visualaid_desc":"\uc548\ub0b4\uc120 \ubc0f \ubcf4\uc774\uc9c0 \uc54a\ub294 \uc694\uc18c \ubcf4\uc784/\uc228\uae40","charmap_desc":"\ud2b9\uc218 \ubb38\uc790 \uc0bd\uc785","backcolor_desc":"\ubc30\uacbd\uc0c9 \uc120\ud0dd","forecolor_desc":"\uae00\uc790\uc0c9 \uc120\ud0dd","custom1_desc":"\uc5ec\uae30\uc5d0 \uc124\uba85 \uc785\ub825","removeformat_desc":"\ud615\uc2dd \ud574\uc81c","hr_desc":"\uad6c\ubd84\uc120 \uc0bd\uc785","sup_desc":"\uc704\ucca8\uc790","sub_desc":"\uc544\ub798\ucca8\uc790","code_desc":"HTML \uc18c\uc2a4 \ud3b8\uc9d1","cleanup_desc":"\ubcf5\uc7a1\ud55c \ucf54\ub4dc \uc815\ub9ac","image_desc":"\uc774\ubbf8\uc9c0 \uc0bd\uc785/\ud3b8\uc9d1","unlink_desc":"\ub9c1\ud06c \ud574\uc81c","link_desc":"\ub9c1\ud06c \uc0bd\uc785/\ud3b8\uc9d1","redo_desc":"\uc7ac\uc2e4\ud589(Ctrl-Y)","undo_desc":"\uc2e4\ud589 \ucde8\uc18c(Ctrl-Z)","indent_desc":"\ub354 \ub4e4\uc5ec\uc4f0\uae30","outdent_desc":"\ub354 \ub0b4\uc5b4\uc4f0\uae30","numlist_desc":"\ubc88\ud638 \ubaa9\ub85d \uc0bd\uc785/\uc81c\uac70","bullist_desc":"\uae30\ud638 \ubaa9\ub85d \uc0bd\uc785/\uc81c\uac70","justifyfull_desc":"\uc591\ucabd \ub9de\ucda4","justifyright_desc":"\uc624\ub978\ucabd \ub9de\ucda4","justifycenter_desc":"\uac00\uc6b4\ub370 \ub9de\ucda4","justifyleft_desc":"\uc67c\ucabd \ub9de\ucda4","striketrough_desc":"\ucde8\uc18c\uc120","help_shortcut":"\ub3c4\uad6c \ubaa8\uc74c\uc740 ALT-F10\uc744, \ub3c4\uc6c0\ub9d0\uc740 ALT-0\uc744 \ub204\ub974\uc138\uc694.",toolbar:"\ub3c4\uad6c \ubaa8\uc74c","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ko_dlg.js
new file mode 100644
index 000000000..4bdb79f18
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.advanced_dlg',{"link_list":"\ub9c1\ud06c \ubaa9\ub85d","link_is_external":"\uc785\ub825\ud558\uc2e0 URL\uc740 \uc678\ubd80 \ub9c1\ud06c\ub85c \ud310\ub2e8\ub429\ub2c8\ub2e4. URL \uc55e\uc5d0 \ud544\uc218\uc801\uc778 http://\ub97c \ubd99\uc774\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","link_is_email":"\uc785\ub825\ud558\uc2e0 URL\uc740 e\uba54\uc77c \uc8fc\uc18c\ub85c \ud310\ub2e8\ub429\ub2c8\ub2e4. URL \uc55e\uc5d0 \ud544\uc218\uc801\uc778 mailto:\ub97c \ubd99\uc774\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","link_titlefield":"\uc81c\ubaa9","link_target_blank":"\uc0c8 \ucc3d\uc5d0\uc11c \ub9c1\ud06c \uc5f4\uae30","link_target_same":"\uac19\uc740 \ucc3d\uc5d0\uc11c \ub9c1\ud06c \uc5f4\uae30","link_target":"Target","link_url":"\ub9c1\ud06c URL","link_title":"\ub9c1\ud06c \uc0bd\uc785/\ud3b8\uc9d1","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"\uae30\uc900\uc120","image_align":"\uc904 \ub9de\ucda4","image_hspace":"\uc88c\uc6b0 \uc5ec\ubc31","image_vspace":"\uc0c1\ud558 \uc5ec\ubc31","image_dimensions":"\ud06c\uae30","image_alt":"\uc774\ubbf8\uc9c0 \uc124\uba85","image_list":"\uc774\ubbf8\uc9c0 \ubaa9\ub85d","image_border":"\ud14c\ub450\ub9ac\uc120","image_src":"\uc774\ubbf8\uc9c0 URL","image_title":"\uc774\ubbf8\uc9c0 \uc0bd\uc785/\ud3b8\uc9d1","charmap_title":"\ud2b9\uc218 \ubb38\uc790 \uc120\ud0dd","colorpicker_name":"\uc774\ub984:","colorpicker_color":"\uc0c9:","colorpicker_named_title":"\uc0c9 \uc774\ub984","colorpicker_named_tab":"\uc0c9 \uc774\ub984","colorpicker_palette_title":"\ud314\ub808\ud2b8 \uc0c9","colorpicker_palette_tab":"\ud314\ub808\ud2b8","colorpicker_picker_title":"\uc0c9 \uc120\ud0dd\uae30","colorpicker_picker_tab":"\uc120\ud0dd\uae30","colorpicker_title":"\uc0c9 \uc120\ud0dd","code_wordwrap":"\uc904\ubc14\uafc8","code_title":"HTML \uc18c\uc2a4 \ud3b8\uc9d1","anchor_name":"\uc575\ucee4 \uba85","anchor_title":"\uc575\ucee4 \uc0bd\uc785/\ud3b8\uc9d1","about_loaded":"\ub85c\ub529\ud55c \ud50c\ub7ec\uadf8\uc778","about_version":"\ubc84\uc804","about_author":"\uc81c\uc791\uc790","about_plugin":"\ud50c\ub7ec\uadf8\uc778","about_plugins":"\ud50c\ub7ec\uadf8\uc778","about_license":"\ub77c\uc774\uc120\uc2a4","about_help":"\ub3c4\uc6c0\ub9d0","about_general":"\ud504\ub85c\uadf8\ub7a8 \uc815\ubcf4","about_title":"TinyMCE \uc815\ubcf4","charmap_usage":"\uc88c\uc6b0 \ud654\uc0b4\ud45c\ub97c \uc0ac\uc6a9\ud574 \uc120\ud0dd\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","anchor_invalid":"\uc801\uc808\ud55c \uc575\ucee4 \uba85\uc744 \uc9c0\uc815\ud574\uc8fc\uc138\uc694.","accessibility_usage_title":"\uc77c\ubc18 \uc0ac\uc6a9\ubc95","invalid_color_value":"\uc0c9 \uac12\uc774 \ubd80\uc801\ud569\ud568","accessibility_help":"Accessibility Help"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kz.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kz.js
new file mode 100644
index 000000000..27c302959
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kz.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition Description",dt:"Definition Term ",samp:"Code Sample",code:"Code",blockquote:"Block Quote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"DIV",paragraph:"Paragraph",block:"Format",fontdefault:"Font Family","font_size":"Font Size","style_select":"Styles","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Block Quote","help_desc":"Help","newdocument_desc":"New Document","image_props_desc":"Image Properties","paste_desc":"Paste (Ctrl+V)","copy_desc":"Copy (Ctrl+C)","cut_desc":"Cut (Ctrl+X)","anchor_desc":"Insert/Edit Anchor","visualaid_desc":"show/Hide Guidelines/Invisible Elements","charmap_desc":"Insert Special Character","backcolor_desc":"Select Background Color","forecolor_desc":"Select Text Color","custom1_desc":"Your Custom Description Here","removeformat_desc":"Remove Formatting","hr_desc":"Insert Horizontal Line","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup Messy Code","image_desc":"Insert/Edit Image","unlink_desc":"Unlink","link_desc":"Insert/Edit Link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Increase Indent","outdent_desc":"Decrease Indent","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","justifyfull_desc":"Align Full","justifyright_desc":"Align Right","justifycenter_desc":"Align Center","justifyleft_desc":"Align Left","striketrough_desc":"Strikethrough","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kz_dlg.js
new file mode 100644
index 000000000..578bf4597
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.advanced_dlg',{"link_list":"Link List","link_is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open Link in a New Window","link_target_same":"Open Link in the Same Window","link_target":"Target","link_url":"Link URL","link_title":"Insert/Edit Link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text Bottom","image_align_texttop":"Text Top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal Space","image_vspace":"Vertical Space","image_dimensions":"Dimensions","image_alt":"Image Description","image_list":"Image List","image_border":"Border","image_src":"Image URL","image_title":"Insert/Edit Image","charmap_title":"Select Special Character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named Colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette Colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color Picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a Color","code_wordwrap":"Word Wrap","code_title":"HTML Source Editor","anchor_name":"Anchor Name","anchor_title":"Insert/Edit Anchor","about_loaded":"Loaded Plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lb.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lb.js
new file mode 100644
index 000000000..a254b4a8e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.advanced',{"underline_desc":"\u00cbnnerstrach (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)",dd:"Definitiounsbeschreiwung",dt:"Definitiounsbegr\u00ebff",samp:"Beispill",code:"Code",blockquote:"Zitatblock",h6:"Iwwerschr\u00ebft 6",h5:"Iwwerschr\u00ebft 5",h4:"Iwwerschr\u00ebft 4",h3:"Iwwerschr\u00ebft 3",h2:"Iwwerschr\u00ebft 2",h1:"Iwwerschr\u00ebft 1",pre:"R\u00e9idaten",address:"Adress",div:"Zesummenh\u00e4nkende Ber\u00e4ich",paragraph:"Ofsatz",block:"Virlag",fontdefault:"Schr\u00ebftaart","font_size":"Schr\u00ebftgr\u00e9isst","style_select":"Format","anchor_delta_width":"13","more_colors":"Weider Fuerwen","toolbar_focus":"Bei d\'Geschirleescht sprangen: Alt+Q; Bei den Editor sprangen: Alt+Z; Bei den Elementpad sprangen: Alt+X",newdocument:"W\u00ebllt Dir wierklech de ganzen Inhalt l\u00e4schen?",path:"Pad","clipboard_msg":"Kop\u00e9ieren, Ausschneiden an Af\u00fcgen sinn am Mozilla Firefox net m\u00e9iglech.\nW\u00ebllt Dir m\u00e9i iwwert d\u00ebse Problem gewuer ginn?","blockquote_desc":"Zitatblock","help_desc":"H\u00ebllef","newdocument_desc":"Neit Dokument","image_props_desc":"Bildeegeschaften","paste_desc":"Af\u00fcgen","copy_desc":"Kop\u00e9ieren","cut_desc":"Ausschneiden","anchor_desc":"Anker af\u00fcgen/ver\u00e4nneren","visualaid_desc":"H\u00ebllefslinnen an onsiichtbar Elementer an-/ausblennen","charmap_desc":"Sonnerzeechen af\u00fcgen","backcolor_desc":"Hannergrondfuerf","forecolor_desc":"Textfuerf","custom1_desc":"Benotzerdefin\u00e9iert Beschreiwung","removeformat_desc":"Format\u00e9ierungen zer\u00e9cksetzen","hr_desc":"Trennlinn af\u00fcgen","sup_desc":"H\u00e9ichgestallt","sub_desc":"D\u00e9ifgestallt","code_desc":"HTML-Quellcode beaarbechten","cleanup_desc":"Quellcode botzen","image_desc":"Bild af\u00fcgen/ver\u00e4nneren","unlink_desc":"Link ewechhuelen","link_desc":"Link af\u00fcgen/ver\u00e4nneren","redo_desc":"Widderhuelen (Strg+Y)","undo_desc":"R\u00e9ckg\u00e4ngeg (Strg+Z)","indent_desc":"Ar\u00e9cken","outdent_desc":"Ausr\u00e9cken","numlist_desc":"Sort\u00e9iert L\u00ebscht","bullist_desc":"Onsort\u00e9iert L\u00ebscht","justifyfull_desc":"B\u00e9ids\u00e4iteg align\u00e9iert","justifyright_desc":"Riets align\u00e9iert","justifycenter_desc":"Zentr\u00e9iert","justifyleft_desc":"L\u00e9nks align\u00e9iert","striketrough_desc":"Duerchgestrach","anchor_delta_height":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lb_dlg.js
new file mode 100644
index 000000000..5f81af733
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.advanced_dlg',{"link_list":"Linkl\u00ebscht","link_is_external":"D\u00ebs Adress sch\u00e9ngt een externen Link ze sinn. W\u00ebll Dir den dofir ben\u00e9idegt http:// virdru stellen?","link_is_email":"D\u00ebs Adress sch\u00e9ngt eng Email-Adress ze sinn. W\u00ebll Dir den dofir ben\u00e9idegt mailto: virdru stellen?","link_titlefield":"Titel","link_target_blank":"Nei F\u00ebnster opmaachen","link_target_same":"An der selwechter F\u00ebnster opmaachen","link_target":"F\u00ebnster","link_url":"Adress","link_title":"Link af\u00fcgen/beaarbechten","image_align_right":"Riets","image_align_left":"L\u00e9nks","image_align_textbottom":"\u00cbnnen am Text","image_align_texttop":"Uewen am Text","image_align_bottom":"\u00cbnnen","image_align_middle":"M\u00ebtteg","image_align_top":"Uewen","image_align_baseline":"Zeil","image_align":"Ausriichtung","image_hspace":"Horizontalen Ofstand","image_vspace":"Vertikalen Ofstand","image_dimensions":"Ausmoossen","image_alt":"Alternativtext","image_list":"Billerleescht","image_border":"Rumm","image_src":"Adress","image_title":"Bild af\u00fcgen/beaarbechten","charmap_title":"Sonnerzeechen","colorpicker_name":"Numm:","colorpicker_color":"Fuerf:","colorpicker_named_title":"Benannte Fuerwen","colorpicker_named_tab":"Benannte Fuerwen","colorpicker_palette_title":"Fuerfpalette","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Fuerfselectioun","colorpicker_picker_tab":"Fuerfselectioun","colorpicker_title":"Fuerf","code_wordwrap":"Automateschen Zeilen\u00ebmbroch","code_title":"HTML-Quellcode beaarbechten","anchor_name":"Numm vum Anker","anchor_title":"Anker af\u00fcgen/ver\u00e4nneren","about_loaded":"Geluede Pluginen","about_version":"Versioun","about_author":"Auteur","about_plugin":"Plugin","about_plugins":"Pluginen","about_license":"Lizenzbedingungen","about_help":"H\u00ebllef","about_general":"Iwwer\u2026","about_title":"Iwwer TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lt.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lt.js
new file mode 100644
index 000000000..30563548b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.advanced',{"underline_desc":"Pabrauktas (Ctrl+U)","italic_desc":"Kursyvas (Ctrl+I)","bold_desc":"Pusjuodis (Ctrl+B)",dd:"Apibr\u0117\u017eimo apra\u0161as",dt:"Apibr\u0117\u017eimo terminas",samp:"Kodo pavyzdys",code:"Kodas",blockquote:"Citatos blokas",h6:"Antra\u0161t\u0117 6",h5:"Antra\u0161t\u0117 5",h4:"Antra\u0161t\u0117 4",h3:"Antra\u0161t\u0117 3",h2:"Antra\u0161t\u0117 2",h1:"Antra\u0161t\u0117 1",pre:"I\u0161 anksto formatuotas",address:"Adresas",div:"Div \u017eym\u0117",paragraph:"Paragrafas",block:"Formatas",fontdefault:"\u0160rifto \u0161eima","font_size":"\u0160rifto dydis","style_select":"Stiliai","link_delta_width":"70","more_colors":"Daugiau spalv\u0173","toolbar_focus":"Per\u0161okimas prie \u012franki\u0173 juostos mygtuk\u0173 - Alt+Q, Per\u0161okimas prie redaktoriaus - Alt-Z, Per\u0161okimas prie element\u0173 kelio - Alt-X",newdocument:"Ar tikrai norite i\u0161valyti vis\u0105 turin\u012f?",path:"Kelias","clipboard_msg":"Kopijavimas/I\u0161kirpimas/\u012ed\u0117jimas negalimas Mozilla ir Firefox nar\u0161ykl\u0117se.\nAr norite daugiau informacijos apie \u0161i\u0105 problem\u0105?","blockquote_desc":"Citatos blokas","help_desc":"Pagalba","newdocument_desc":"Naujas dokumentas","image_props_desc":"Paveiksl\u0117lio nustatymai","paste_desc":"\u012ed\u0117ti","copy_desc":"Kopijuoti","cut_desc":"I\u0161kirpti","anchor_desc":"\u012eterpti/redaguoti prierai\u0161\u0105","visualaid_desc":"Kaitalioti gaires/nematom\u0173 element\u0173 rodym\u0105","charmap_desc":"\u012eterpti nestandartin\u012f simbol\u012f","backcolor_desc":"Parinkti fono spalv\u0105","forecolor_desc":"Parinkti teksto spalv\u0105","custom1_desc":"J\u016bs\u0173 apra\u0161as \u010dia","removeformat_desc":"Pa\u0161alinti formatavim\u0105","hr_desc":"\u012eterpti horizontali\u0105 linij\u0105","sup_desc":"Vir\u0161utinis indeksas","sub_desc":"Apatinis indeksas","code_desc":"Redaguoti HTML i\u0161eities kod\u0105","cleanup_desc":"I\u0161valyti netvarking\u0105 kod\u0105","image_desc":"\u012eterpti/redaguoti paveiksl\u0117l\u012f","unlink_desc":"Pa\u0161alinti nuorod\u0105","link_desc":"\u012eterpti/redaguoti nuorod\u0105","redo_desc":"Gr\u0105\u017einti (Ctrl+Y)","undo_desc":"At\u0161aukti (Ctrl+Z)","indent_desc":"\u012etrauka","outdent_desc":"Atvirk\u0161tin\u0117 \u012ftrauka","numlist_desc":"Sunumeruotas s\u0105ra\u0161as","bullist_desc":"Nesunumeruotas s\u0105ra\u0161as","justifyfull_desc":"Lygiuoti pagal abu kra\u0161tus","justifyright_desc":"Lygiuoti pagal de\u0161in\u0119","justifycenter_desc":"Centruoti","justifyleft_desc":"Lygiuoti pagal kair\u0119","striketrough_desc":"Perbrauktas","help_shortcut":"Paspauskite ALT-F10 \u012fjungti u\u017eduo\u010di\u0173 juostai. Paspauskite ALT-0 jei reikia pagalbos","rich_text_area":"Suformatuoto teksto laukas","shortcuts_desc":"Accessability Help",toolbar:"U\u017eduo\u010di\u0173 juosta","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lt_dlg.js
new file mode 100644
index 000000000..2474073fb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.advanced_dlg',{"link_list":"Nuorod\u0173 s\u0105ra\u0161as","link_is_external":"URL adresas, kur\u012f \u012fved\u0117te yra i\u0161orin\u0117 nuoroda, ar norite prid\u0117ti reikaling\u0105 http:// prefiks\u0105?","link_is_email":"URL adresas, kur\u012f \u012fved\u0117te yra el. pa\u0161to adresas, ar norite prid\u0117ti reikaling\u0105 mailto: prefiks\u0105?","link_titlefield":"Pavadinimas","link_target_blank":"Atverti naujame lange","link_target_same":"Atverti tame pa\u010diame lange","link_target":"Paskirtis","link_url":"Nuorodos URL adresas","link_title":"\u012eterpti/redaguoti nuorod\u0105","image_align_right":"De\u0161in\u0117je","image_align_left":"Kair\u0117je","image_align_textbottom":"Teksto apa\u010dioje","image_align_texttop":"Teksto vir\u0161uje","image_align_bottom":"Apa\u010dioje","image_align_middle":"Viduryje","image_align_top":"Vir\u0161uje","image_align_baseline":"Pradiniame ta\u0161ke","image_align":"Lygiavimas","image_hspace":"Horizontalus tarpas","image_vspace":"Vertikalus tarpas","image_dimensions":"I\u0161matavimai","image_alt":"Paveiksl\u0117lio apra\u0161as","image_list":"Paveiksl\u0117li\u0173 s\u0105ra\u0161as","image_border":"R\u0117melis","image_src":"Paveiksl\u0117lio URL adresas","image_title":"\u012eterpti/redaguoti paveiksl\u0117l\u012f","charmap_title":"Pasirinkti nestandartin\u012f simbol\u012f","colorpicker_name":"Pavadinimas:","colorpicker_color":"Spalva:","colorpicker_named_title":"\u012evardintosios spalvos","colorpicker_named_tab":"\u012evardintosios","colorpicker_palette_title":"Palet\u0117s spalvos","colorpicker_palette_tab":"Palet\u0117","colorpicker_picker_title":"Spalvos parinkiklis","colorpicker_picker_tab":"Parinkiklis","colorpicker_title":"Pasirinkti spalv\u0105","code_wordwrap":"Skaidyti tekst\u0105","code_title":"HTML i\u0161eities kodo redaktorius","anchor_name":"Prierai\u0161o vardas","anchor_title":"\u012eterpti/redaguoti prierai\u0161\u0105","about_loaded":"\u012ekelti papildiniai","about_version":"Versija","about_author":"Autorius","about_plugin":"Papildinys","about_plugins":"Papildiniai","about_license":"Licencija","about_help":"Pagalba","about_general":"Apie","about_title":"Apie TinyMCE","charmap_usage":"Naudokite kair\u0117s ir de\u0161in\u0117s rodykles norint nar\u0161yti.","anchor_invalid":"\u012eveskite teising\u0105 prierai\u0161os vard\u0105.","accessibility_help":"Prieinamumo pagalba","accessibility_usage_title":"Bendrojo naudojimo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lv.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lv.js
new file mode 100644
index 000000000..e7ed14315
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.advanced',{"underline_desc":"Pasv\u012btrojums (Ctrl+U)","italic_desc":"Sl\u012bpraksts (Ctrl+I)","bold_desc":"Treknraksts (Ctrl+B)",dd:"Defin\u012bcijas apraksts",dt:"Defin\u012bcijas termins ",samp:"Koda piem\u0113rs",code:"Kods",blockquote:"Cit\u0101ts",h6:"Virsraksts 6",h5:"Virsraksts 5",h4:"Virsraksts 4",h3:"Virsraksts 3",h2:"Virsraksts 2",h1:"Virsraksts 1",pre:"Priek\u0161format\u0113ts",address:"Adrese",div:"Div\u012bzija",paragraph:"Rindkopa",block:"Form\u0101ts",fontdefault:"Fonta veids","font_size":"Fonta lielums","style_select":"Stili","more_colors":"Vair\u0101k kr\u0101su","toolbar_focus":"Iet uz r\u012bkpog\u0101m - Alt+Q, Iet uz redaktoru - Alt-Z, Iet uz elementa atra\u0161an\u0101s vietu - Alt-X",newdocument:"Vai J\u016bs esat p\u0101rliecin\u0101ti, ka v\u0113laties izdz\u0113st visu saturu?",path:"Atra\u0161an\u0101s vieta","clipboard_msg":"Iesp\u0113ja Kop\u0113t/Izgriezt/Iekop\u0113t nav pieejama p\u0101rl\u016bkiem Mozilla and Firefox.\nVai J\u016bs v\u0113laties uzzin\u0101t vair\u0101k par \u0161o probl\u0113mu?","blockquote_desc":"Cit\u0101ts","help_desc":"Pal\u012bdz\u012bba","newdocument_desc":"Jauns dokuments","image_props_desc":"Bildes iestat\u012bjumi","paste_desc":"Iekop\u0113t","copy_desc":"Kop\u0113t","cut_desc":"Izgriezt","anchor_desc":"Ievietot/Redi\u0123\u0113t enkursaiti","visualaid_desc":"Uzlikt/Nov\u0101kt pal\u012bgsv\u012btras/neredzamos elementus","charmap_desc":"Ievietot simbolu","backcolor_desc":"Uzst\u0101d\u012bt fona kr\u0101su","forecolor_desc":"Uzst\u0101d\u012bt teksta kr\u0101su","custom1_desc":"Tevis izdom\u0101ts apraksts \u0161eit","removeformat_desc":"Izdz\u0113st format\u0113to","hr_desc":"Ievietot horizont\u0101lu sv\u012btru","sup_desc":"Aug\u0161raksts","sub_desc":"Apak\u0161raksts","code_desc":"Redi\u0123\u0113t HTML kodu","cleanup_desc":"Izt\u012br\u012bt nek\u0101rt\u012bgu kodu","image_desc":"Ievietot/Redi\u0123\u0113t att\u0113lu","unlink_desc":"Atsait\u0113t","link_desc":"Ievietot/Redi\u0123\u0113t saiti","redo_desc":"Atatsaukt (Ctrl+Y)","undo_desc":"Atsaukt (Ctrl+Z)","indent_desc":"Atk\u0101pe","outdent_desc":"Uzk\u0101pe","numlist_desc":"Numur\u0113ts saraksts","bullist_desc":"Nenumur\u0113ts saraksts","justifyfull_desc":"Nol\u012bdzin\u0101t malas","justifyright_desc":"Novietot pa labi","justifycenter_desc":"Centr\u0113t","justifyleft_desc":"Novietot pa kreisi","striketrough_desc":"P\u0101rsv\u012btrojums","help_shortcut":"Ieklik\u0161\u0137iniet uz ALT-F10 lai iesl\u0113gtu uzdevumu joslu. Ieklik\u0161\u0137iniet uz ALT-0, ja nepiecie\u0161ama pal\u012bdz\u012bba",toolbar:"Uzdevumu josla","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lv_dlg.js
new file mode 100644
index 000000000..e19b9e260
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.advanced_dlg',{"link_list":"Sai\u0161u saraksts","link_is_external":"Ievad\u012btais URL \u0161\u0137iet ir \u0101r\u0113j\u0101 saite, vai tu v\u0113lies pirms t\u0101s pievienot http:// pried\u0113kli?","link_is_email":"Ievad\u012btais URL \u0161\u0137iet ir e-pasta adrese, vai tu v\u0113lies pirms t\u0101s pievienot mailto: pried\u0113kli? ","link_titlefield":"Nosaukums","link_target_blank":"Atv\u0113rt saiti jaun\u0101 log\u0101","link_target_same":"Atv\u0113rt saiti \u0161ai pa\u0161\u0101 log\u0101","link_target":"M\u0113r\u0137is","link_url":"Saites URL","link_title":"Ievietot/Redi\u0123\u0113t saiti","image_align_right":"Pa labi","image_align_left":"Pa kreisi","image_align_textbottom":"Teksta apak\u0161a","image_align_texttop":"Teksta aug\u0161a","image_align_bottom":"Apak\u0161a","image_align_middle":"Vidus","image_align_top":"Aug\u0161a","image_align_baseline":"Pati apak\u0161a","image_align":"Novietojums","image_hspace":"Horizont\u0101l\u0101 atstarpe","image_vspace":"Vertik\u0101l\u0101 atstarpe","image_dimensions":"Izm\u0113ri","image_alt":"Att\u0113la apraksts","image_list":"Att\u0113lu saraksts","image_border":"Apmale","image_src":"Att\u0113la URL","image_title":"Ievietot/Redi\u0123\u0113t att\u0113lu","charmap_title":"Izv\u0113lies simbolu","colorpicker_name":"Nosaukums:","colorpicker_color":"Kr\u0101sa:","colorpicker_named_title":"Nosaukt\u0101s kr\u0101sas","colorpicker_named_tab":"Nosaukts","colorpicker_palette_title":"Kr\u0101su palete","colorpicker_palette_tab":"Palete","colorpicker_picker_title":"Kr\u0101su izv\u0113lnis","colorpicker_picker_tab":"Izv\u0113lnis","colorpicker_title":"Izv\u0113l\u0113ties kr\u0101su","code_wordwrap":"V\u0101rdu p\u0101rne\u0161ana jaun\u0101 rind\u0101","code_title":"HTML koda redaktors","anchor_name":"Enkursaites nosaukums","anchor_title":"Ievietot/Redi\u0123\u0113t enkursaiti","about_loaded":"Iestat\u012btie papildmodu\u013ci","about_version":"Versija","about_author":"Autors","about_plugin":"Papildmodulis","about_plugins":"Papildmodu\u013ci","about_license":"Licence","about_help":"Pal\u012bdz\u012bba","about_general":"Par","about_title":"Par TinyMCE","charmap_usage":"Izmantojiet kreis\u0101s un lab\u0101s puses r\u0101d\u012bt\u0101jus, ja v\u0113laties p\u0101rl\u016bkot","anchor_invalid":"Nor\u0101diet sp\u0113k\u0101 eso\u0161u paz\u012bmes v\u0101rdu","accessibility_help":"Pieejam\u012bbas pal\u012bdz\u012bba","accessibility_usage_title":"Kop\u0113j\u0101s lieto\u0161anas","invalid_color_value":"Invalid color value"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mk.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mk.js
new file mode 100644
index 000000000..b95e95df3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.advanced',{"underline_desc":"\u041f\u043e\u0434\u0432\u043b\u0435\u0447\u0435\u043d\u043e (Ctrl U)","italic_desc":"\u0417\u0430\u043a\u043e\u0441\u0435\u043d\u043e (Ctrl I)","bold_desc":"\u0417\u0434\u0435\u0431\u0435\u043b\u0435\u043d\u043e (Ctrl B)",dd:"\u041e\u043f\u0438\u0441 \u043d\u0430 \u0434\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u0458\u0430\u0442\u0430",dt:"\u0414\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u0458\u0430 \u043d\u0430 \u043f\u043e\u0438\u043c",samp:"\u041f\u0440\u0438\u0438\u043c\u0435\u0440 \u043d\u0430 \u043a\u043e\u0434\u043e\u0442",code:"\u041a\u043e\u0434",blockquote:"\u0426\u0438\u0442\u0430\u0442",h6:"\u041d\u0430\u0441\u043b\u043e\u0432 6",h5:"\u041d\u0430\u0441\u043b\u043e\u0432 5",h4:"\u041d\u0430\u0441\u043b\u043e\u0432 4",h3:"\u041d\u0430\u0441\u043b\u043e\u0432 3",h2:"\u041d\u0430\u0441\u043b\u043e\u0432 2",h1:"\u041d\u0430\u0441\u043b\u043e\u0432 1",pre:"\u041e\u0431\u043b\u0438\u043a\u0443\u0432\u0430\u043d\u043e",address:"\u0410\u0434\u0440\u0435\u0441\u0430",div:"Div",paragraph:"\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444",block:"\u0424\u043e\u0440\u043c\u0430\u0442",fontdefault:"\u0412\u0438\u0434 \u043d\u0430 \u0444\u043e\u043d\u0442","font_size":"\u0412\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u043d\u0430 \u0444\u043e\u043d\u0442\u043e\u0442","style_select":"\u0421\u0442\u0438\u043b\u043e\u0432\u0438","more_colors":"\u041f\u043e\u0432\u0435\u045c\u0435 \u0431\u043e\u0438 ...","toolbar_focus":"\u041f\u043e\u043c\u0438\u043d\u0438 \u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430\u0442\u0430 \u0441\u043e \u0430\u043b\u0430\u0442\u043a\u0438 - Alt Q, \u043f\u043e\u043c\u0438\u043d\u0438 \u043d\u0430 \u0443\u0440\u0435\u0434\u0443\u0432\u0430\u0447\u043e\u0442- Alt-Z, \u043f\u043e\u043c\u0438\u043d\u0438 \u043d\u0430 \u043f\u0430\u0442\u0435\u043a\u0430\u0442\u0430 \u0437\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 - Alt-X",newdocument:"\u0414\u0430\u043b\u0438 \u0441\u0442\u0435 \u0441\u0438\u0433\u0443\u0440\u043d\u0438\u043e \u0434\u0435\u043a\u0430 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0458\u0430 \u0438\u0437\u0431\u0440\u0438\u0448\u0435\u0442\u0435 \u0446\u0435\u043b\u0430 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430 ?",path:"\u041f\u0430\u0442\u0435\u043a\u0430","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u0430\u0458/\u041f\u0440\u0435\u0441\u0435\u0447\u0438/\u0412\u043c\u0435\u0442\u043d\u0438 \u043d\u0435 \u0435 \u043d\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u045a\u0435 \u0432\u043e Mozilla \u0438 Firefox. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u043f\u043e\u0432\u0435\u045c\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0437\u0430 \u043e\u0432\u0430 \u043f\u0440\u0430\u0448\u0430\u045a\u0435?","blockquote_desc":"\u0426\u0438\u0442\u0438\u0440\u0430\u0458","help_desc":"\u041f\u043e\u043c\u043e\u0448","newdocument_desc":"\u041d\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430","paste_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 (Ctrl V)","copy_desc":"\u041a\u043e\u043f\u0438\u0440\u0430\u0458 (Ctrl C)","cut_desc":"\u0418\u0441\u0435\u0447\u0438 (Ctrl X)","anchor_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0441\u0438\u0434\u0440\u043e","visualaid_desc":"\u043f\u0440\u0438\u043a\u0430\u0436\u0438/\u0441\u043e\u043a\u0440\u0438 \u0443\u043f\u0430\u0442\u0441\u0442\u0432\u043e/\u043d\u0435\u0432\u0438\u0434\u043b\u0438\u0432\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438","charmap_desc":"\u0412\u043d\u0435\u0441\u0438 \u0441\u043f\u0435\u0446\u0438\u0458\u0430\u043b\u0435\u043d \u0437\u043d\u0430\u043a","backcolor_desc":"\u0418\u0437\u0431\u0435\u0440\u0438 \u0431\u043e\u0458\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430","forecolor_desc":"\u0418\u0437\u0431\u0435\u0440\u0438 \u0431\u043e\u0458\u0430 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442","custom1_desc":"\u0421\u043e\u043f\u0441\u0442\u0432\u0435\u043d \u043e\u043f\u0438\u0441 \u043e\u0432\u0434\u0435","removeformat_desc":"\u041f\u043e\u043d\u0438\u0448\u0442\u0438 \u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u045a\u0435\u0442\u043e","hr_desc":"\u0412\u043d\u0435\u0441\u0438 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430","sup_desc":"\u0415\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442","sub_desc":"\u0418\u043d\u0434\u0435\u043a\u0441","code_desc":"\u0423\u0440\u0435\u0434\u0438 \u0433\u043e HTML \u0438\u0437\u0432\u043e\u0440\u043e\u0442","cleanup_desc":"\u0421\u0440\u0435\u0434\u0438 \u0433\u043e \u043a\u043e\u0434\u043e\u0442","image_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0441\u043b\u0438\u043a\u0430","unlink_desc":"\u041e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 \u0433\u043e \u043b\u0438\u043d\u043a\u043e\u0442","link_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u043b\u0438\u043d\u043a","redo_desc":"\u041f\u043e\u0432\u0442\u043e\u0440\u0438 (Ctrl Y)","undo_desc":"\u0412\u0440\u0430\u0442\u0438 (Ctrl Z)","indent_desc":"\u0417\u0433\u043e\u043b\u0435\u043c\u0438 \u0433\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0443\u0432\u0430\u045a\u0435\u0442\u043e","outdent_desc":"\u041d\u0430\u043c\u0430\u043b\u0438 \u0433\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0443\u0432\u0430\u045a\u0435\u0442\u043e","numlist_desc":"\u0412\u043d\u0435\u0441\u0438/\u043e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 \u043f\u043e\u0434\u0440\u0435\u0434\u0435\u043d\u0430 \u043b\u0438\u0441\u0442\u0430","bullist_desc":"\u0412\u043d\u0435\u0441\u0438/\u043e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 \u043d\u0435\u043f\u043e\u0434\u0440\u0435\u0434\u0435\u043d\u0430 \u043b\u0438\u0441\u0442\u0430","justifyfull_desc":"\u041f\u043e\u0442\u043f\u043e\u043b\u043d\u043e \u043f\u043e\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435","justifyright_desc":"\u041f\u043e\u0440\u0430\u043c\u043d\u0438 \u0434\u0435\u0441\u043d\u043e","justifycenter_desc":"\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u0458","justifyleft_desc":"\u041f\u043e\u0440\u0430\u043c\u043d\u0438 \u043b\u0435\u0432\u043e","striketrough_desc":"\u041f\u0440\u0435\u0446\u0440\u0442\u0430\u043d\u043e","help_shortcut":"\u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438 ALT F10 \u0437\u0430 \u0430\u043b\u0430\u0442\u043a\u0438. \u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438 ALT 0 \u0437\u0430 \u043f\u043e\u043c\u043e\u0448.","rich_text_area":"\u0417\u0431\u043e\u0433\u0430\u0442\u0435\u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u043d\u0430 \u043f\u043e\u0432\u0440\u0448\u0438\u043d\u0430","shortcuts_desc":"\u041f\u043e\u043c\u043e\u0448 \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0442\u0430\u043f",toolbar:"\u041b\u0438\u043d\u0438\u0458\u0430 \u0437\u0430 \u0430\u043b\u0430\u0442\u043a\u0438","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mk_dlg.js
new file mode 100644
index 000000000..052b43b58
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.advanced_dlg',{"link_list":"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0432\u0438","link_is_external":"\u0423\u0420\u041b \u0430\u0434\u0440\u0435\u0441\u0442\u0430 \u0448\u0442\u043e \u0458\u0430 \u0432\u043d\u0435\u0441\u043e\u0432\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u043a\u0430\u043a\u043e \u043d\u0430\u0434\u0432\u043e\u0440\u0435\u0448\u0435\u043d \u043b\u0438\u043d\u043a. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u0434\u043e\u0434\u0430\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u0438\u043e\u0442 \u201ehttp://:\u201c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ?","link_is_email":"\u0423\u0420\u041b \u0430\u0434\u0440\u0435\u0441\u0442\u0430 \u0448\u0442\u043e \u0458\u0430 \u0432\u043d\u0435\u0441\u043e\u0432\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u043a\u0430\u043a\u043e \u0435-\u043f\u043e\u0448\u0442\u0430. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u0434\u043e\u0434\u0430\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u0438\u043e\u0442 \u201emailto:\u201c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ?","link_titlefield":"\u041d\u0430\u0441\u043b\u043e\u0432","link_target_blank":"\u041e\u0442\u0432\u043e\u0440\u0438 \u043b\u0438\u043d\u043a \u0432\u043e \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440","link_target_same":"\u041e\u0442\u0432\u043e\u0440\u0438 \u043b\u0438\u043d\u043a \u0432\u043e \u0438\u0441\u0442\u0438\u043e\u0442 \u043f\u0440\u043e\u0437\u043e\u0440","link_target":"\u0426\u0435\u043b","link_url":"\u0423\u0420\u041b \u043b\u0438\u043d\u043a","link_title":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u043b\u0438\u043d\u043a","image_align_right":"\u0414\u0435\u0441\u043d\u043e","image_align_left":"\u041b\u0435\u0432\u043e","image_align_textbottom":"\u041a\u0440\u0430\u0458 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442","image_align_texttop":"\u041f\u043e\u0447\u0435\u0442\u043e\u043a \u043d\u0430 \u0442\u0435\u043a\u0441\u0442","image_align_bottom":"\u041d\u0430\u0458\u0434\u043e\u043b\u0435","image_align_middle":"\u0421\u0440\u0435\u0434\u0438\u043d\u0430","image_align_top":"\u041d\u0430\u0458\u0433\u043e\u0440\u0435","image_align_baseline":"\u041e\u0441\u043d\u043e\u0432\u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430","image_align":"\u041f\u043e\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435","image_hspace":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0440","image_vspace":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0440","image_dimensions":"\u0414\u0438\u043c\u0435\u043d\u0437\u0438\u0438","image_alt":"\u041e\u043f\u0438\u0441 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430","image_list":"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u0441\u043b\u0438\u043a\u0438\u0442\u0435","image_border":"\u0413\u0440\u0430\u043d\u0438\u0446\u0430/\u0440\u0430\u0431","image_src":"\u041b\u0438\u043d\u043a \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430","image_title":"\u0412\u043d\u0435\u0441\u0438/\u0441\u0440\u0435\u0434\u0438 \u0441\u043b\u0438\u043a\u0438","charmap_title":"\u041e\u0434\u0431\u0435\u0440\u0435\u0442\u0435 \u0437\u043d\u0430\u043a","colorpicker_name":"\u0418\u043c\u0435:","colorpicker_color":"\u0411\u043e\u0458\u0430:","colorpicker_named_title":"\u0418\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0438 \u0431\u043e\u0438","colorpicker_named_tab":"\u0418\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u043e","colorpicker_palette_title":"\u041f\u0430\u043b\u0435\u0442\u0430 \u043d\u0430 \u0431\u043e\u0438","colorpicker_palette_tab":"\u041f\u0430\u043b\u0435\u0442\u0430","colorpicker_picker_title":"\u041e\u0434\u0431\u0435\u0440\u0438 \u0431\u043e\u0438","colorpicker_picker_tab":"\u041e\u0434\u0431\u0435\u0440\u0438","colorpicker_title":"\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u0431\u043e\u0438","code_wordwrap":"\u041f\u0440\u0435\u043a\u043b\u043e\u043f\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0442","code_title":"HTML \u0443\u0440\u0435\u0434\u0443\u0432\u0430\u0447","anchor_name":"\u0418\u043c\u0435 \u043d\u0430 \u0441\u0438\u0434\u0440\u043e\u0442\u043e","anchor_title":"\u0412\u043d\u0435\u0441\u0438/\u0441\u0440\u0435\u0434\u0438 \u0441\u0438\u0434\u0440\u043e","about_loaded":"\u041f\u043e\u0441\u0442\u043e\u0435\u0447\u043a\u0438 \u0434\u043e\u0434\u0430\u0442\u043e\u0446\u0438","about_version":"\u0412\u0435\u0440\u0437\u0438\u0458\u0430","about_author":"\u0410\u0432\u0442\u043e\u0440","about_plugin":"\u0414\u043e\u0434\u0430\u0442\u043e\u043a","about_plugins":"\u0414\u043e\u0434\u0430\u0442\u043e\u0446\u0438","about_license":"\u041b\u0438\u0446\u0435\u043d\u0446\u0430","about_help":"\u041f\u043e\u043c\u043e\u0448","about_general":"\u0417\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0430\u0442\u0430","about_title":"TinyMCE","charmap_usage":"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 \u0433\u0438 \u0441\u0442\u0440\u043b\u0435\u043a\u0438\u0442\u0435 \u043b\u0435\u0432\u043e \u0438 \u0434\u0435\u0441\u043d\u043e \u0437\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0458\u0430.","anchor_invalid":"\u0412\u0435 \u043c\u043e\u043b\u0438\u043c\u0435 \u043d\u0430\u0432\u0435\u0434\u0435\u0442\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0438\u043c\u0435 \u0437\u0430 \u0441\u0438\u0434\u0440\u043e\u0442\u043e.","accessibility_help":"\u041f\u043e\u043c\u043e\u0448 \u0437\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u043f\u043d\u043e\u0441\u0442","accessibility_usage_title":"\u041e\u043f\u0448\u0442\u043e \u043a\u043e\u0440\u0438\u0441\u0442\u0435\u045a\u0435"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ml.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ml.js
new file mode 100644
index 000000000..f5aaea65f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ml.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 6",h5:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 5",h4:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 4",h3:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 3",h2:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 2",h1:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 1",pre:"Preformatted",address:"\u0d35\u0d3f\u0d32\u0d3e\u0d38\u0d02",div:"Div",paragraph:"\u0d16\u0d23\u0d4d\u0d21\u0d3f\u0d15",block:"\u0d18\u0d1f\u0d28",fontdefault:"\u0d05\u0d15\u0d4d\u0d37\u0d30\u0d15\u0d42\u0d1f\u0d4d\u0d1f\u0d02","font_size":"\u0d05\u0d15\u0d4d\u0d37\u0d30\u0d35\u0d32\u0d41\u0d2a\u0d4d\u0d2a\u0d02","style_select":"\u0d30\u0d42\u0d2a\u0d2d\u0d02\u0d17\u0d3f","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"\u0d2e\u0d41\u0d31\u0d3f\u0d15\u0d4d\u0d15\u0d32\u0d4d\u200d/\u0d2a\u0d15\u0d30\u0d4d\u200d\u0d24\u0d4d\u0d24\u0d32\u0d4d\u200d/\u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d32\u0d4d\u200d \u0d0e\u0d28\u0d4d\u0d28\u0d3f\u0d35 \'\u0d2e\u0d4b\u0d38\u0d3f\u0d32\u0d4d\u0d32\'\u0d2f\u0d3f\u0d32\u0d41\u0d02 \'\u0d2b\u0d2f\u0d30\u0d4d\u200d\u0d2b\u0d4b\u0d15\u0d4d\u0d38\u0d4d\'\u0d32\u0d41\u0d02 \u0d32\u0d2d\u0d4d\u0d2f\u0d2e\u0d32\u0d4d\u0d32. \n\u0d24\u0d3e\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41 \u0d07\u0d24\u0d3f\u0d28\u0d46 \u0d15\u0d41\u0d31\u0d3f\u0d1a\u0d4d\u0d1a\u0d41\u0d4d \u0d15\u0d42\u0d1f\u0d41\u0d24\u0d32\u0d4d\u200d \u0d05\u0d31\u0d3f\u0d2f\u0d23\u0d4b ?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"\u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15","copy_desc":"\u0d2a\u0d15\u0d30\u0d4d\u200d\u0d24\u0d4d\u0d24\u0d41\u0d15","cut_desc":"\u0d2e\u0d41\u0d31\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"\u0d35\u0d3f\u0d1a\u0d4d\u0d1b\u0d47\u0d26\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ml_dlg.js
new file mode 100644
index 000000000..00b1a1398
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"\u0d2c\u0d3e\u0d28\u0d4d\u0d27\u0d35 \u0d35\u0d3f\u0d32\u0d3e\u0d38\u0d02","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"\u0d28\u0d1f\u0d41\u0d35\u0d3f\u0d32\u0d4d\u200d","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"\u0d24\u0d3f\u0d30\u0d36\u0d4d\u0d1a\u0d40\u0d28 \u0d38\u0d4d\u0d25\u0d32\u0d02","image_vspace":"\u0d32\u0d02\u0d2c \u0d38\u0d4d\u0d25\u0d32\u0d02","image_dimensions":"\u0d05\u0d33\u0d35\u0d41\u0d15\u0d33\u0d4d\u200d","image_alt":"Image description","image_list":"Image list","image_border":"\u0d05\u0d24\u0d3f\u0d30\u0d41\u0d4d","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"\u0d2a\u0d47\u0d30\u0d41\u0d4d:","colorpicker_color":"\u0d28\u0d3f\u0d31\u0d02:","colorpicker_named_title":"\u0d2a\u0d47\u0d30\u0d3f\u0d1f\u0d4d\u0d1f \u0d28\u0d3f\u0d31\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d","colorpicker_named_tab":"\u0d2a\u0d47\u0d30\u0d3f\u0d1f\u0d4d\u0d1f","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"\u0d28\u0d3f\u0d31\u0d02 \u0d24\u0d3f\u0d30\u0d1e\u0d4d\u0d1e\u0d46\u0d1f\u0d41\u0d15\u0d4d\u0d15\u0d41\u0d15","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"\u0d28\u0d19\u0d4d\u0d15\u0d42\u0d30 \u0d2a\u0d47\u0d30\u0d41\u0d4d","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d41\u0d4d","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"\u0d38\u0d39\u0d3e\u0d2f\u0d02","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mn.js
new file mode 100644
index 000000000..b5b01b30c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.advanced',{"underline_desc":"\u0414\u043e\u043e\u0433\u0443\u0443\u0440 \u0437\u0443\u0440\u0430\u0430\u0441 (Ctrl+U)","italic_desc":"\u041d\u0430\u043b\u0443\u0443 (Ctrl+I)","bold_desc":"\u0422\u043e\u0434 (Ctrl+B)",dd:"\u0422\u0430\u0439\u043b\u0431\u0430\u0440",dt:"\u0422\u043e\u0434\u043e\u0440\u0445\u043e\u0439\u043b\u043e\u043b\u0442",samp:"\u0416\u0438\u0448\u044d\u044d",code:"\u041a\u043e\u0434",blockquote:"\u0418\u0448\u043b\u044d\u043b",h6:"\u0413\u0430\u0440\u0447\u0438\u0433 6",h5:"\u0413\u0430\u0440\u0447\u0438\u0433 5",h4:"\u0413\u0430\u0440\u0447\u0438\u0433 4",h3:"\u0413\u0430\u0440\u0447\u0438\u0433 3",h2:"\u0413\u0430\u0440\u0447\u0438\u0433 2",h1:"\u0413\u0430\u0440\u0447\u0438\u0433 1",pre:"\u0422\u04af\u04af\u0445\u0438\u0439 \u04e9\u0433\u04e9\u0433\u0434\u04e9\u043b",address:"\u0425\u0430\u044f\u0433",div:"\u0425\u0430\u043c\u0442\u0430\u0442\u0433\u0430\u0441\u0430\u043d \u043c\u0443\u0436",paragraph:"\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444",block:"\u0425\u044d\u0432",fontdefault:"\u0424\u043e\u043d\u0442","font_size":"\u0424\u043e\u043d\u0442\u044b\u043d \u0445\u044d\u043c\u0436\u044d\u044d","style_select":"\u0425\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442","more_colors":"\u0411\u0443\u0441\u0430\u0434 \u04e9\u043d\u0433\u04e9","toolbar_focus":"\u0411\u0430\u0433\u0430\u0436 \u0441\u0430\u043c\u0431\u0430\u0440 \u043b\u0443\u0443 \u04af\u0441\u0440\u044d\u0445\u044d\u0434: Alt+Q; \u0417\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0433\u0447 \u0440\u0443\u0443 \u04af\u0441\u0440\u044d\u0445\u044d\u0434: Alt-Z; \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0439\u043d \u0437\u0430\u043c \u0440\u0443\u0443 \u04af\u0441\u0440\u044d\u0445\u044d\u0434: Alt-X",newdocument:"\u0422\u0430 \u0431\u04af\u0445 \u0430\u0433\u0443\u0443\u043b\u0433\u044b\u0433 \u0443\u0441\u0442\u0433\u0430\u0445\u0434\u0430\u0430 \u0438\u0442\u0433\u044d\u043b\u0442\u044d\u0439 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?",path:"\u0417\u0430\u043c","clipboard_msg":"\u0425\u0443\u0443\u043b\u0430\u0445, \u0442\u0430\u0441\u043b\u0430\u043d \u0430\u0432\u0430\u0445 \u0431\u0443\u0443\u043b\u0433\u0430\u0445 \u043d\u044c \u041c\u043e\u0437\u0438\u043b\u043b\u0430 \u0424\u0430\u0439\u0440\u0444\u043e\u043a\u0441 \u0434\u044d\u044d\u0440 \u0431\u043e\u043b\u043e\u043c\u0436\u0433\u04af\u0439. \n \u0422\u0430 \u044d\u043d\u044d \u0430\u0441\u0443\u0443\u0434\u043b\u044b\u043d \u0442\u0430\u043b\u0430\u0430\u0440 \u0434\u044d\u043b\u0433\u044d\u0440\u044d\u043d\u0433\u04af\u0439 \u043c\u044d\u0434\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","blockquote_desc":"\u0418\u0448\u043b\u044d\u043b","help_desc":"\u0422\u0443\u0441\u043b\u0430\u043c\u0436","newdocument_desc":"\u0428\u0438\u043d\u044d \u0431\u0430\u0440\u0438\u043c\u0442","image_props_desc":"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0442\u043e\u0434\u0440\u0443\u0443\u043b\u0433\u0430","paste_desc":"\u041e\u0440\u0443\u0443\u043b\u0430\u0445","copy_desc":"\u0425\u0443\u0443\u043b\u0430\u0445","cut_desc":"\u0422\u0430\u0441\u043b\u0430\u043d \u0430\u0432\u0430\u0445","anchor_desc":"\u0413\u0430\u0434\u0430\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","visualaid_desc":"\u0422\u0443\u0441\u043b\u0430\u0445 \u0448\u0443\u0433\u0430\u043c \u0431\u0430 \u04af\u043b \u04af\u0437\u044d\u0433\u0434\u044d\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u04af\u04af\u0434\u0438\u0439\u0433 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445/\u0434\u0430\u043b\u0434\u043b\u0430\u0445","charmap_desc":"\u0422\u0443\u0441\u0433\u0430\u0439 \u0442\u044d\u043c\u0434\u044d\u0433\u0442 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","backcolor_desc":"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u04e9\u043d\u0433\u04e9","forecolor_desc":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u04e9\u043d\u0433\u04e9","custom1_desc":"\u0425\u044d\u0440\u044d\u0433\u043b\u044d\u0433\u0447\u0438\u0439\u043d \u0442\u043e\u0434\u043e\u0440\u0445\u043e\u0439\u043b\u0441\u043e\u043d \u0442\u0430\u0439\u043b\u0431\u0430\u0440","removeformat_desc":"\u0425\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442 \u0443\u0441\u0442\u0433\u0430\u0445","hr_desc":"\u0422\u0443\u0441\u0433\u0430\u0430\u0440\u043b\u0430\u0433\u0447 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","sup_desc":"\u0414\u044d\u044d\u0440 \u0431\u0430\u0439\u0440\u043b\u0430\u043b","sub_desc":"\u0414\u043e\u043e\u0440 \u0431\u0430\u0439\u0440\u043b\u0430\u043b","code_desc":"HTML-\u044d\u0445 \u043a\u043e\u0434 \u0437\u0430\u0441\u0430\u0445","cleanup_desc":"\u042d\u0445 \u043a\u043e\u0434 \u0446\u044d\u0432\u044d\u0440\u043b\u044d\u0445","image_desc":"\u0417\u0443\u0440\u0430\u0433 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","unlink_desc":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u0443\u0441\u0442\u0433\u0430\u0445","link_desc":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","redo_desc":"\u0426\u0443\u0446\u043b\u0430\u0445 (Ctrl+Y)","undo_desc":"\u0411\u0443\u0446\u0430\u0430\u0445 (Ctrl+Z)","indent_desc":"\u0414\u043e\u0433\u043e\u043b \u043c\u04e9\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","outdent_desc":"\u0414\u043e\u0433\u043e\u043b \u043c\u04e9\u0440 \u0443\u0441\u0442\u0433\u0430\u0445","numlist_desc":"\u0414\u0443\u0433\u0430\u0430\u0440\u043b\u0430\u043b\u0442","bullist_desc":"\u0422\u043e\u043e\u0447\u0438\u043b\u0442","justifyfull_desc":"\u0422\u044d\u0433\u0448\u0438\u043b\u0441\u044d\u043d","justifyright_desc":"\u0411\u0430\u0440\u0443\u0443\u043d \u0436\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u0441\u044d\u043d","justifycenter_desc":"\u0413\u043e\u043b\u0434 \u0436\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u0441\u044d\u043d","justifyleft_desc":"\u0417\u04af\u04af\u043d \u0436\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u0441\u044d\u043d","striketrough_desc":"\u0414\u0430\u0440\u0441\u0430\u043d","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mn_dlg.js
new file mode 100644
index 000000000..6875e4940
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.advanced_dlg',{"link_list":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442","link_is_external":"\u0425\u0430\u044f\u0433 \u0434\u044d\u044d\u0440 \u0433\u0430\u0434\u0430\u0430\u0434 \u0445\u043e\u043b\u0431\u043e\u043e\u0441 \u0431\u0430\u0439\u0433\u0430\u0430 \u0445\u0430\u0440\u0430\u0433\u0434\u0430\u043d\u0430. \u0422\u0430 \u0437\u04e9\u0432 \u0445\u043e\u043b\u0431\u043e\u043e\u0441 \u0431\u043e\u043b\u0433\u043e\u0445\u044b\u043d \u0442\u0443\u043b\u0434 http:// \u043d\u044d\u043c\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","link_is_email":"\u0425\u0430\u044f\u0433 \u0434\u044d\u044d\u0440 \u0418\u043c\u044d\u0439\u043b \u0445\u0430\u044f\u0433 \u0431\u0430\u0439\u0445 \u0448\u0438\u0433 \u0445\u0430\u0440\u0430\u0433\u0434\u0430\u043d\u0430. \u0422\u0430 \u0442\u04af\u04af\u043d\u0434 \u0448\u0430\u0430\u0440\u0434\u043b\u0430\u0433\u0430\u0442\u0430\u0439 mailto: \u043d\u044d\u043c\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","link_titlefield":"\u0413\u0430\u0440\u0447\u0438\u0433","link_target_blank":"\u0428\u0438\u043d\u044d \u0446\u043e\u043d\u0445\u043e\u043d\u0434 \u043d\u044d\u044d\u0445","link_target_same":"\u0422\u0443\u0445\u0430\u0439\u043d \u0446\u043e\u043d\u0445\u043e\u043d\u0434 \u043d\u044d\u044d\u0445","link_target":"\u0426\u043e\u043d\u0445","link_url":"\u0425\u0430\u044f\u0433","link_title":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","image_align_right":"\u0411\u0430\u0440\u0443\u0443\u043d","image_align_left":"\u0417\u04af\u04af\u043d","image_align_textbottom":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u0434\u043e\u043e\u0440","image_align_texttop":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u0434\u044d\u044d\u0440","image_align_bottom":"\u0414\u043e\u043e\u0440","image_align_middle":"\u0414\u0443\u043d\u0434","image_align_top":"\u0414\u044d\u044d\u0440","image_align_baseline":"\u041c\u04e9\u0440","image_align":"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442","image_hspace":"\u0425\u044d\u0432\u0442\u044d\u044d \u0430\u043b\u0441\u043b\u0430\u043b\u0442","image_vspace":"\u0411\u043e\u0441\u043e\u043e \u0430\u043b\u0441\u043b\u0430\u043b\u0442","image_dimensions":"\u0425\u044d\u043c\u0436\u044d\u044d\u0441","image_alt":"\u0425\u043e\u0451\u0440\u0434\u043e\u0433\u0447 \u0431\u0438\u0447\u0432\u044d\u0440","image_list":"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442","image_border":"\u0425\u04af\u0440\u044d\u044d","image_src":"\u0425\u0430\u044f\u0433","image_title":"\u0417\u0443\u0440\u0430\u0433 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","charmap_title":"\u0422\u0443\u0441\u0433\u0430\u0439 \u0442\u044d\u043c\u0434\u044d\u0433\u0442","colorpicker_name":"\u041d\u044d\u0440:","colorpicker_color":"\u04e8\u043d\u0433\u04e9:","colorpicker_named_title":"\u041d\u044d\u0440\u043b\u044d\u0441\u044d\u043d \u04e9\u043d\u0433\u04e9","colorpicker_named_tab":"\u041d\u044d\u0440\u043b\u044d\u0441\u044d\u043d \u04e9\u043d\u0433\u04e9","colorpicker_palette_title":"\u04e8\u043d\u0433\u04e9\u043d\u0438\u0439 \u043d\u0438\u0439\u043b\u04af\u04af\u0440","colorpicker_palette_tab":"\u041d\u0438\u0439\u043b\u04af\u04af\u0440","colorpicker_picker_title":"\u04e8\u043d\u0433\u04e9 \u0441\u043e\u043d\u0433\u043e\u043b\u0442","colorpicker_picker_tab":"\u04e8\u043d\u0433\u04e9 \u0441\u043e\u043d\u0433\u043e\u043b\u0442","colorpicker_title":"\u04e8\u043d\u0433\u04e9","code_wordwrap":"\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u043c\u04e9\u0440 \u043e\u0440\u043e\u043e\u043b\u0442","code_title":"HTML-\u044d\u0445 \u043a\u043e\u0434 \u0437\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0445","anchor_name":"\u0413\u0430\u0434\u0430\u0441\u043d\u044b \u043d\u044d\u0440","anchor_title":"\u0413\u0430\u0434\u0430\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","about_loaded":"\u0410\u0447\u0430\u0430\u043b\u0430\u0433\u0434\u0441\u0430\u043d \u041f\u043b\u0430\u0433\u0438\u043d\u04af\u04af\u0434","about_version":"\u0425\u0443\u0432\u0438\u043b\u0431\u0430\u0440","about_author":"\u0417\u043e\u0445\u0438\u043e\u0433\u0447","about_plugin":"\u041f\u043b\u0430\u0433\u0438\u043d","about_plugins":"\u041f\u043b\u0430\u0433\u0438\u043d","about_license":"\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u0439\u043d \u043d\u04e9\u0445\u0446\u04e9\u043b","about_help":"\u0422\u0443\u0441\u043b\u0430\u043c\u0436","about_general":"\u0422\u0443\u0445\u0430\u0439\u2026","about_title":"TinyMCE \u0442\u0443\u0445\u0430\u0439","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ms.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ms.js
new file mode 100644
index 000000000..599e211b9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ms.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.advanced',{"underline_desc":"Garis bawah (Ctrl+U)","italic_desc":"Condong (Ctrl+I)","bold_desc":"Tebal (Ctrl+B)",dd:"Maksud huraian",dt:"Maksud terma",samp:"Contoh kod",code:"Kod",blockquote:"Petikan blok",h6:"Tajuk 6",h5:"Tajuk 5",h4:"Tajuk 4",h3:"Tajuk 3",h2:"Tajuk 2",h1:"Tajuk 1",pre:"Telah diformatkan",address:"Alamat",div:"Div",paragraph:"Perenggan",block:"Format",fontdefault:"Jenis Huruf","font_size":"Saiz Huruf","style_select":"Gaya","more_colors":"Warna lain","toolbar_focus":"Lompat ke butang alatan - Alt+Q, Lompat ke editor - Alt-Z, Lompat ke unsur laluan - Alt-X",newdocument:"Hapus semua kandungan?",path:"Laluan","clipboard_msg":"Salin/Potong/Tempel tidak disokong dalam Mozilla dan Firefox.\nAdakah anda mahu informasi lanjut tentang isu ini?","blockquote_desc":"Petikan blok","help_desc":"Bantuan","newdocument_desc":"Dokumen baru","image_props_desc":"Alatan imej","paste_desc":"Tempel","copy_desc":"Salin","cut_desc":"Potong","anchor_desc":"Sisip/sunting anchor","visualaid_desc":"Alih garis panduan/unsur tak nampak","charmap_desc":"Sisip aksara","backcolor_desc":"Pilih warna latar belakang","forecolor_desc":"Pilih warna teks","custom1_desc":"Huraian anda di sini","removeformat_desc":"Alih format","hr_desc":"Sisip pembaris mengufuk","sup_desc":"Superskrip","sub_desc":"Subskrip","code_desc":"Sunting kod HTML","cleanup_desc":"Bersihkan kod","image_desc":"Sisip/sunting imej","unlink_desc":"Tiada pautan","link_desc":"Sisip/sunting pautan","redo_desc":"Maju (Ctrl+Y)","undo_desc":"Undur (Ctrl+Z)","indent_desc":"Lekuk kedepan","outdent_desc":"Lekuk kebelakang","numlist_desc":"Senarai tertib","bullist_desc":"Senarai tidak tertib","justifyfull_desc":"Selari penuh","justifyright_desc":"Selari kekanan","justifycenter_desc":"Selari ketengah","justifyleft_desc":"Selari kekiri","striketrough_desc":"Garis tengah","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ms_dlg.js
new file mode 100644
index 000000000..550c32cd3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.advanced_dlg',{"link_list":"Senarai pautan","link_is_external":"URL yang anda masukkan adalah pautan luar, tambah \"http://\" di awalan?","link_is_email":"URL yang anda masukkan adalah alamat emel, tambah \"mailto\": di awalan?","link_titlefield":"Tajuk","link_target_blank":"Buka pautan dalam tetingkap yang sama","link_target_same":"Buka pautan dalam tetingkap yang sama","link_target":"Sasaran","link_url":"Pautan URL","link_title":"Sisip/sunting pautan","image_align_right":"Kanan","image_align_left":"Kiri","image_align_textbottom":"Teks bawah","image_align_texttop":"Teks atas","image_align_bottom":"Bawah","image_align_middle":"Tengah","image_align_top":"Atas","image_align_baseline":"Garis pangkal","image_align":"Penyelarian","image_hspace":"Ruangan ufuk","image_vspace":"Ruangan tegak","image_dimensions":"Dimensi","image_alt":"Huraian imej","image_list":"Senarai imej","image_border":"Sempadan","image_src":"Imej URL","image_title":"Sisip/sunting imej","charmap_title":"Pilih aksara sendiri","colorpicker_name":"Nama:","colorpicker_color":"Warna:","colorpicker_named_title":"Warna telah dinamakan","colorpicker_named_tab":"Dinamakan","colorpicker_palette_title":"Palet warna","colorpicker_palette_tab":"Palet","colorpicker_picker_title":"Pemungut warna","colorpicker_picker_tab":"Pemungut","colorpicker_title":"Pilih warna","code_wordwrap":"Sisip perkataan","code_title":"Penyunting HTML","anchor_name":"Nama sauh","anchor_title":"Sisip/sunting sauh","about_loaded":"Muatan plugins","about_version":"Versi","about_author":"Pengarang","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Lesen","about_help":"Bantuan","about_general":"Perihal","about_title":"Perihal TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/my.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/my.js
new file mode 100644
index 000000000..e09fdd142
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/my.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.advanced',{"underline_desc":"\u1031\u1021\u102c\u1000\u103a\u1019\u103b\u1009\u103a\u1038 (Ctrl U)","italic_desc":"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1005\u102c\u1004\u103a\u1038 (Ctrl I)","bold_desc":"\u1005\u102c\u101c\u1036\u102f\u1038\u1021\u1011\u1030 (Ctrl B)",dd:"\u1021\u1013\u102d\u1015\u1039\u1015\u102b\u101a\u103a \u1031\u1016\u102c\u103a\u103c\u1015\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038",dt:"\u1021\u1013\u102d\u1015\u1039\u1015\u102b\u101a\u103a \u101e\u1010\u103a\u1019\u103e\u1010\u103a\u1001\u103b\u1000\u103a\u1005\u102c\u101c\u1036\u102f\u1038",samp:"\u1000\u102f\u1010\u103a \u1014\u1019\u1030\u1014\u102c",code:"\u1000\u102f\u1010\u103a",blockquote:"\u1000\u102d\u102f\u1038\u1000\u102c\u1038\u1001\u103b\u1000\u103a \u1005\u102c\u1015\u102d\u102f\u1012\u103a",h6:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1046",h5:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1045",h4:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1044",h3:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1043",h2:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1042",h1:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1041",pre:"\u103c\u1000\u102d\u102f\u1010\u1004\u103a\u1015\u1036\u102f\u1005\u1036\u1001\u103b\u1011\u102c\u1038\u1031\u101e\u102c",address:"\u101c\u102d\u1015\u103a\u1005\u102c",div:"DIV",paragraph:"\u1005\u102c\u1015\u102d\u102f\u1012\u103a",block:"\u1015\u1036\u102f\u1005\u1036\u1001\u103b\u1015\u1036\u102f",fontdefault:"\u1031\u1016\u102c\u1004\u103a\u1037\u1005\u102c\u101c\u1036\u102f\u1038 \u1019\u102d\u101e\u102c\u1038\u1005\u102f","font_size":"\u1031\u1016\u102c\u1004\u103a\u1037\u1005\u102c\u101c\u1036\u102f\u1038 \u1021\u101b\u103d\u101a\u103a","style_select":"\u1005\u1010\u102d\u102f\u1004\u103a\u1019\u103b\u102c\u1038","charmap_delta_height":"460","charmap_delta_width":"","more_colors":"\u1031\u1014\u102c\u1000\u103a\u1011\u1015\u103a \u1021\u1031\u101b\u102c\u1004\u103a\u1019\u103b\u102c\u1038","toolbar_focus":"\u1000\u102d\u101b\u102d\u101a\u102c\u1001\u101c\u102f\u1015\u103a\u1019\u103b\u102c\u1038\u101e\u102d\u102f\u1037\u101e\u103d\u102c\u1038\u101b\u1014\u103a - Alt Q\u104a \u1005\u102c\u101e\u102c\u1038\u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a\u1031\u1014\u101b\u102c\u101e\u102d\u102f\u1037\u101e\u103d\u102c\u1038\u101b\u1014\u103a - Alt-Z\u104a \u1021\u1005\u102d\u1010\u103a\u1021\u1015\u102d\u102f\u1004\u103a\u1038\u101c\u1019\u103a\u1038\u1031\u103c\u1000\u102c\u1004\u103a\u1038\u101e\u102d\u102f\u1037\u101e\u103d\u102c\u1038\u101b\u1014\u103a - Alt-X",newdocument:"\u1015\u102b\u101d\u1004\u103a\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1016\u101a\u103a\u101b\u103e\u102c\u101c\u102d\u102f\u101e\u100a\u103a\u1019\u103e\u102c \u1031\u101e\u1001\u103b\u102c\u101b\u1032\u1037\u101c\u102c\u1038?",path:"\u101c\u1019\u103a\u1038\u1031\u103c\u1000\u102c\u1004\u103a\u1038","clipboard_msg":"Mozilla \u1014\u103e\u1004\u103a\u1037 Firefox \u1010\u103d\u1004\u103a \u1019\u102d\u1010\u1039\u1010\u1030\u1000\u1030\u1038/\u103c\u1016\u1010\u103a/\u103c\u1016\u100a\u103a\u1037\u1000\u1030\u1038 \u1019\u103e\u102f\u1019\u103b\u102c\u1038 \u1019\u103c\u1015\u102f\u101c\u102f\u1015\u103a\u1014\u102d\u102f\u1004\u103a\u1015\u102b\u104brn\u1012\u102e\u103c\u1015\u103f\u1014\u102c\u1021\u1031\u103c\u1000\u102c\u1004\u103a\u1038 \u1021\u1031\u101e\u1038\u1005\u102d\u1010\u103a\u1011\u1015\u103a\u1019\u1036 \u101e\u102d\u101c\u102d\u102f\u1015\u102b\u101e\u101c\u102c\u1038?","blockquote_desc":"\u1000\u102d\u102f\u1038\u1000\u102c\u1038\u1001\u103b\u1000\u103a \u1005\u102c\u1015\u102d\u102f\u1012\u103a","help_desc":"\u1021\u1000\u1030\u1021\u100a\u102e","newdocument_desc":"\u1005\u102c\u101b\u103d\u1000\u103a\u1005\u102c\u1010\u1019\u103a\u1038 \u1021\u101e\u1005\u103a","image_props_desc":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","paste_desc":"\u103c\u1016\u100a\u103a\u1037\u1000\u1030\u1038","copy_desc":"\u1019\u102d\u1010\u1039\u1010\u1030\u1000\u1030\u1038","cut_desc":"\u103c\u1016\u1010\u103a","anchor_desc":"\u1001\u103b\u102d\u1010\u103a \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","visualaid_desc":"\u1019\u103c\u1019\u1004\u103a\u101b\u1031\u101e\u102c \u1021\u1015\u102d\u102f\u1004\u103a\u1038\u1019\u103b\u102c\u1038/Guidlines \u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1016\u103d\u1004\u103a\u1037/\u1015\u102d\u1010\u103a","charmap_desc":"\u1005\u102d\u1010\u103a\u103c\u1000\u102d\u102f\u1000\u103a \u1021\u1000\u1039\u1001\u101b\u102c\u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u101b\u1014\u103a","backcolor_desc":"\u1031\u1014\u102c\u1000\u103a\u1001\u1036\u1021\u1031\u101b\u102c\u1004\u103a\u101e\u1010\u103a\u1019\u103e\u1010\u103a\u1031\u1015\u1038\u101b\u1014\u103a","forecolor_desc":"\u1005\u102c\u101e\u102c\u1038\u1021\u1031\u101b\u102c\u1004\u103a\u1031\u101b\u103d\u1038\u101b\u1014\u103a","custom1_desc":"\u101e\u1004\u103a\u1037\u1005\u102d\u1010\u103a\u103c\u1000\u102d\u102f\u1000\u103a\u1031\u1016\u102c\u103a\u103c\u1015\u1001\u103b\u1000\u103a\u1000\u102d\u102f \u1012\u102e\u1019\u103e\u102c\u103c\u1016\u100a\u103a\u1037\u1015\u102b","removeformat_desc":"\u1015\u1036\u102f\u1005\u1036\u1001\u103b\u1011\u102c\u1038\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1016\u101a\u103a\u101b\u103e\u102c\u1038","hr_desc":"\u1031\u101b\u103c\u1015\u1004\u103a\u100a\u102e\u1019\u103b\u1009\u103a\u1038 \u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u101b\u1014\u103a","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"HTML \u101b\u1004\u103a\u1038\u103c\u1019\u1005\u103a\u1000\u102d\u102f \u103c\u1015\u102f\u103c\u1015\u1004\u103a","cleanup_desc":"\u101b\u103e\u102f\u1015\u103a\u1015\u103d\u1031\u1014\u1031\u101e\u102c \u1000\u102f\u1010\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u101b\u103e\u1004\u103a\u1038","image_desc":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","unlink_desc":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u103c\u1016\u102f\u1010\u103a","link_desc":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","redo_desc":"\u103c\u1015\u1014\u103a\u101c\u102f\u1015\u103a (Ctrl Y)","undo_desc":"\u1019\u101c\u102f\u1015\u103a (Ctrl Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"\u1021\u1019\u103e\u1010\u103a\u1005\u1009\u103a\u1010\u1015\u103a\u1031\u101e\u102c \u1005\u102c\u101b\u1004\u103a\u1038","bullist_desc":"\u1021\u1019\u103e\u1010\u103a\u1005\u1009\u103a\u1019\u1010\u1015\u103a\u1031\u101e\u102c \u1005\u102c\u101b\u1004\u103a\u1038","justifyfull_desc":"\u1021\u103c\u1015\u100a\u103a\u1037\u100a\u102d\u103e","justifyright_desc":"\u100a\u102c\u100a\u102d\u103e","justifycenter_desc":"\u1021\u101c\u101a\u103a\u100a\u102d\u103e","justifyleft_desc":"\u1018\u101a\u103a\u100a\u102d\u103e","striketrough_desc":"\u103c\u1016\u1010\u103a\u1019\u103b\u1009\u103a\u1038","anchor_delta_height":"","anchor_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/my_dlg.js
new file mode 100644
index 000000000..7465ed017
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.advanced_dlg',{"link_list":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1005\u102c\u101b\u1004\u103a\u1038","link_is_external":"\u101e\u1004\u103a\u103c\u1016\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u1031\u101e\u102c URL \u101e\u100a\u103a \u103c\u1015\u1004\u103a\u1015\u1019\u103e \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u103c\u1016\u1005\u103a\u1019\u100a\u103a\u104a \u101c\u102d\u102f\u1021\u1015\u103a\u1031\u101e\u102c http:// \u1031\u101b\u103e\u1037\u1006\u1000\u103a\u1005\u102c\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1011\u100a\u103a\u1037\u101c\u102d\u102f\u1015\u102b\u101e\u101c\u102c\u1038?","link_is_email":"\u101e\u1004\u103a\u103c\u1016\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u1031\u101e\u102c URL \u101e\u100a\u103a email \u101c\u102d\u1015\u103a\u1005\u102c\u1014\u103e\u1004\u103a\u1037\u1010\u1030\u101e\u100a\u103a\u104a \u101c\u102d\u102f\u1021\u1015\u103a\u1031\u101e\u102c mailto: \u1031\u101b\u103e\u1037\u1006\u1000\u103a\u1005\u102c\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1011\u100a\u103a\u1037\u101c\u102d\u102f\u1015\u102b\u101e\u101c\u102c\u1038?","link_titlefield":"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a","link_target_blank":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1000\u102d\u102f \u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1021\u101e\u1005\u103a\u1010\u103d\u1004\u103a \u1016\u103d\u1004\u103a\u1037\u1015\u102b\u104b","link_target_same":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1000\u102d\u102f \u1010\u1030\u100a\u102e\u1031\u101e\u102c \u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1010\u103d\u1004\u103a \u1016\u103d\u1004\u103a\u1037\u1015\u102b","link_target":"\u1025\u102e\u1038\u1010\u100a\u103a\u1001\u103b\u1000\u103a\u1031\u1014\u101b\u102c","link_url":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c URL","link_title":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","image_align_right":"\u100a\u102c","image_align_left":"\u1018\u101a\u103a","image_align_textbottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u1010\u103d\u1004\u103a \u1005\u102c\u101e\u102c\u1038","image_align_texttop":"\u1011\u102d\u1015\u103a\u1010\u103d\u1004\u103a \u1005\u102c\u101e\u102c\u1038","image_align_bottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001","image_align_middle":"\u1021\u101c\u101a\u103a","image_align_top":"\u1011\u102d\u1015\u103a","image_align_baseline":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u1019\u103b\u1009\u103a\u1038","image_align":"\u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f","image_hspace":"\u1021\u101c\u103b\u103e\u102c\u1038\u101c\u102d\u102f\u1000\u103a \u1000\u103d\u1000\u103a\u101c\u1015\u103a","image_vspace":"\u1031\u1012\u102b\u1004\u103a\u101c\u102d\u102f\u1000\u103a \u1000\u103d\u1000\u103a\u101c\u1015\u103a","image_dimensions":"\u1021\u1010\u102d\u102f\u1004\u103a\u1038\u1021\u1011\u103d\u102c\u1019\u103b\u102c\u1038","image_alt":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1005\u102c\u100a\u103d\u103e\u1014\u103a\u1038","image_list":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1005\u102c\u101b\u1004\u103a\u1038","image_border":"\u1014\u101a\u103a\u1005\u100a\u103a\u1038","image_src":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f URL","image_title":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","charmap_title":"\u1005\u102d\u1010\u103a\u103c\u1000\u102d\u102f\u1000\u103a \u1021\u1000\u1039\u1001\u101b\u102c \u1031\u101b\u103d\u1038\u1015\u102b","colorpicker_name":"\u1021\u1019\u100a\u103a :","colorpicker_color":"\u1021\u1031\u101b\u102c\u1004\u103a :","colorpicker_named_title":"\u1021\u1019\u100a\u103a\u1031\u1015\u1038\u1011\u102c\u1038\u1031\u101e\u102c \u1021\u1031\u101b\u102c\u1004\u103a\u1019\u103b\u102c\u1038","colorpicker_named_tab":"\u1021\u1019\u100a\u103a\u1031\u1015\u1038\u1011\u102c\u1038\u1031\u101e\u102c","colorpicker_palette_title":"\u1015\u101c\u102d\u1010\u103a\u103c\u1015\u102c\u1038 \u1021\u1031\u101b\u102c\u1004\u103a\u1019\u103b\u102c\u1038","colorpicker_palette_tab":"\u1015\u101c\u102d\u1010\u103a\u103c\u1015\u102c\u1038","colorpicker_picker_title":"\u1021\u1031\u101b\u102c\u1004\u103a\u1031\u101b\u103d\u1038\u1031\u1000\u102c\u1000\u103a\u101b\u1014\u103a","colorpicker_picker_tab":"\u1031\u101b\u103d\u1038\u1031\u1000\u102c\u1000\u103a\u101b\u1014\u103a","colorpicker_title":"\u1021\u1031\u101b\u102c\u1004\u103a\u1031\u101b\u103d\u1038\u101b\u1014\u103a","code_wordwrap":"Word Wrap","code_title":"HTML \u101b\u1004\u103a\u1038\u103c\u1019\u1005\u103a \u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a \u1031\u1014\u101b\u102c","anchor_name":"\u1001\u103b\u102d\u1010\u103a \u1021\u1019\u100a\u103a","anchor_title":"\u1001\u103b\u102d\u1010\u103a \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","about_loaded":"\u101c\u102f\u1015\u103a\u1031\u1006\u102c\u1004\u103a\u1031\u1014\u1031\u101e\u102c \u1015\u101c\u1015\u103a\u1021\u1004\u103a\u1019\u103b\u102c\u1038","about_version":"\u1017\u102c\u1038\u101b\u103e\u1004\u103a\u1038","about_author":"\u1031\u101b\u1038\u101e\u1030","about_plugin":"\u1015\u101c\u1015\u103a\u1021\u1004\u103a","about_plugins":"\u1015\u101c\u1015\u103a\u1021\u1004\u103a\u1019\u103b\u102c\u1038","about_license":"\u101c\u102d\u102f\u1004\u103a\u1005\u1004\u103a","about_help":"\u1021\u1000\u1030\u1021\u100a\u102e","about_general":"\u101e\u102d\u1031\u1000\u102c\u1004\u103a\u1038\u1005\u101b\u102c","about_title":"TinyMCE \u1021\u1031\u103c\u1000\u102c\u1004\u103a\u1038","anchor_invalid":"\u101e\u1004\u103a\u1037\u1031\u101c\u103b\u103e\u102c\u103a\u1019\u103e\u1014\u103a\u1000\u1014\u103a\u1019\u103e\u102f\u101b\u103e\u102d\u1031\u101e\u102c \u1001\u103b\u102d\u1010\u103a\u1021\u1019\u100a\u103a\u1031\u1015\u1038\u1015\u102b\u104b","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nb.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nb.js
new file mode 100644
index 000000000..c83c6aaa5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.advanced',{"underline_desc":"Understreking","italic_desc":"Kursiv","bold_desc":"Fet",dd:"Definisjonsbeskrivelse",dt:"Definisjonsuttrykk",samp:"Kodeeksempel",code:"Kode",blockquote:"Innrykkinnrykk",h6:"Overskrift 6",h5:"Overskrift 5",h4:"Overskrift 4",h3:"Overskrift 3",h2:"Overskrift 2",h1:"Overskrift 1",pre:"Pre-formatert",address:"Adresse",div:"Div",paragraph:"Avsnitt",block:"Format",fontdefault:"Skriftfamilie","font_size":"Skriftst\u00f8rrelse","style_select":"Stiler","more_colors":"Flere farger","toolbar_focus":"Skift til verkt\u00f8yknapper - Alt+Q, Skift til editor - Alt-Z, Skift til elementsti - Alt-",newdocument:"Er du sikker p\u00e5 at du vil slette alt innhold?",path:"Sti","clipboard_msg":"Klipp ut / Kopier /Lim inn fungerer ikke i Mozilla og Firefox. \n Vil du vite mer om dette?","blockquote_desc":"Innrykk","help_desc":"Hjelp","newdocument_desc":"Nytt dokument","image_props_desc":"Bildeegenskaper","paste_desc":"Lim inn","copy_desc":"Kopier","cut_desc":"Klipp ut","anchor_desc":"Sett inn / endre anker","visualaid_desc":"Sl\u00e5 av/p\u00e5 usynlige elementer","charmap_desc":"Sett inn spesialtegn","backcolor_desc":"Velg bakgrunnsfarge","forecolor_desc":"Velg skriftfarge","custom1_desc":"Beskrivelse av spesialfunksjon","removeformat_desc":"Fjern formatering","hr_desc":"Sett inn horisontal linje","sup_desc":"Hevet skrift","sub_desc":"Senket skrift","code_desc":"Redigere HTML-koden","cleanup_desc":"Rens ukurant kode","image_desc":"Sett inn / endre bilde","unlink_desc":"Fjern lenke","link_desc":"Sett inn / endre lenke","redo_desc":"Gj\u00f8r om","undo_desc":"Angre","indent_desc":"\u00d8k innrykk","outdent_desc":"Reduser innrykk","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","justifyfull_desc":"Blokkjuster","justifyright_desc":"H\u00f8yrejuster","justifycenter_desc":"Midtstill","justifyleft_desc":"Venstrejuster","striketrough_desc":"Gjennomstreking","help_shortcut":"Trykk ALT F10 for verkt\u00f8ylinjen. Trykk ALT 0 for hjelp","rich_text_area":"Rich tekstomr\u00e5det","shortcuts_desc":"Tilgjengelighetshjelp",toolbar:"Verkt\u00f8ylinje","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nb_dlg.js
new file mode 100644
index 000000000..16b3d18b0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.advanced_dlg',{"link_list":"Lenkeliste","link_is_external":"Nettadressen du skrev inn ser ut til \u00e5 v\u00e6re en ekstern nettadresse. \u00d8nsker du \u00e5 legge til det p\u00e5krevde http://-prefikset?","link_is_email":"Nettadressen du skrev inn ser ut til \u00e5 v\u00e6re en e-postadresse. \u00d8nsker du \u00e5 legge til det p\u00e5krevde mailto:-prefikset?","link_titlefield":"Tittel","link_target_blank":"\u00c5pne i nytt vindu","link_target_same":"\u00c5pne i dette vinduet","link_target":"M\u00e5lside","link_url":"Lenkens URL","link_title":"Sett inn /endre lenke","image_align_right":"H\u00f8yre","image_align_left":"Venstre","image_align_textbottom":"Tekstbunn","image_align_texttop":"Teksttopp","image_align_bottom":"Bunn","image_align_middle":"Midtstilt","image_align_top":"Topp","image_align_baseline":"Bunnlinje","image_align":"Justering","image_hspace":"Horisontal avstand","image_vspace":"Vertikal avstand","image_dimensions":"Dimensjoner","image_alt":"Bildebeskrivelse","image_list":"Bildeliste","image_border":"Ramme","image_src":"Bildets URL","image_title":"Sett inn / endre bilde","charmap_title":"Velg spesialtegn","colorpicker_name":"Navn:","colorpicker_color":"Farge:","colorpicker_named_title":"Fargenavn","colorpicker_named_tab":"Navnevalg","colorpicker_palette_title":"Palettfarger","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"Fargevalg","colorpicker_picker_tab":"Velg farge","colorpicker_title":"Velg en farge","code_wordwrap":"Tekstbryting","code_title":"HTML-editor","anchor_name":"Ankernavn","anchor_title":"Sett inn / endre anker","about_loaded":"Lastede programtillegg","about_version":"Versjon","about_author":"Utvikler","about_plugin":"Programtillegg","about_plugins":"Programtillegg","about_license":"Lisens","about_help":"Hjelp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Bruk venstre og h\u00f8yre piltast for \u00e5 navigere.","anchor_invalid":"Du m\u00e5 angi et gyldig ankernavn.","accessibility_help":"Tilhjengelighetshjelp","accessibility_usage_title":"Generell bruk","invalid_color_value":"Ugyldig fargeverdi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nl.js
new file mode 100644
index 000000000..3ef2c14c7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.advanced',{"underline_desc":"Onderstrepen (Ctrl+U)","italic_desc":"Cursief (Ctrl+I)","bold_desc":"Vet (Ctrl+B)",dd:"Definitiebeschrijving",dt:"Definitieterm",samp:"Codevoorbeeld",code:"Code",blockquote:"Citaat",h6:"Kop 6",h5:"Kop 5",h4:"Kop 4",h3:"Kop 3",h2:"Kop 2",h1:"Kop 1",pre:"Vaste opmaak",address:"Adres",div:"Div",paragraph:"Alinea",block:"Opmaak",fontdefault:"Lettertype","font_size":"Tekengrootte","style_select":"Stijlen","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"Meer kleuren","toolbar_focus":"Spring naar werkbalk - Alt+Q, Spring naar tekst - Alt-Z, Spring naar elementpad - Alt-X",newdocument:"Weet u zeker dat u alle inhoud wilt wissen?",path:"Pad","clipboard_msg":"Kopi\u00ebren/knippen/plakken is niet beschikbaar in Mozilla en Firefox.\nWilt u meer informatie over deze beperking?","blockquote_desc":"Citaat","help_desc":"Help","newdocument_desc":"Nieuw document","image_props_desc":"Afbeeldingseigenschappen","paste_desc":"Plakken","copy_desc":"Kopi\u00ebren","cut_desc":"Knippen","anchor_desc":"Anker invoegen/bewerken","visualaid_desc":"Hulplijnen weergeven","charmap_desc":"Symbool invoegen","backcolor_desc":"Tekstmarkeringskleur","forecolor_desc":"Tekstkleur","custom1_desc":"Uw eigen beschrijving hier","removeformat_desc":"Opmaak verwijderen","hr_desc":"Scheidingslijn invoegen","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"HTML bron bewerken","cleanup_desc":"Code opruimen","image_desc":"Afbeelding invoegen/bewerken","unlink_desc":"Link verwijderen","link_desc":"Link invoegen/bewerken","redo_desc":"Herhalen (Ctrl+Y)","undo_desc":"Ongedaan maken (Ctrl+Z)","indent_desc":"Inspringing vergroten","outdent_desc":"Inspringing verkleinen","numlist_desc":"Nummering","bullist_desc":"Opsommingstekens","justifyfull_desc":"Uitvullen","justifyright_desc":"Rechts uitlijnen","justifycenter_desc":"Centreren","justifyleft_desc":"Links uitlijnen","striketrough_desc":"Doorhalen","help_shortcut":"Druk op ALT-F10 voor de werkbalk. Druk op ALT-0 voor hulp.","rich_text_area":"Rich Text Zone","shortcuts_desc":"Toegankelijkheid Help",toolbar:"Werkbalk"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nl_dlg.js
new file mode 100644
index 000000000..615a5e8d5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.advanced_dlg',{"link_list":"Link lijst","link_is_external":"De ingevoerde URL lijkt op een externe link. Wilt u de vereiste http:// tekst voorvoegen?","link_is_email":"De ingevoerde URL lijkt op een e-mailadres. Wilt u de vereiste mailto: tekst voorvoegen?","link_titlefield":"Titel","link_target_blank":"Link in een nieuw venster openen","link_target_same":"Link in hetzelfde venster openen","link_target":"Doel","link_url":"Link URL","link_title":"Link invoegen/bewerken","image_align_right":"Rechts","image_align_left":"Links","image_align_textbottom":"Onderkant tekst","image_align_texttop":"Bovenkant tekst","image_align_bottom":"Onder","image_align_middle":"Midden","image_align_top":"Boven","image_align_baseline":"Basislijn","image_align":"Uitlijning","image_hspace":"Horizontale ruimte","image_vspace":"Verticale ruimte","image_dimensions":"Afmetingen","image_alt":"Beschrijving","image_list":"Lijst","image_border":"Rand","image_src":"Bestand/URL","image_title":"Afbeelding invoegen/bewerken","charmap_title":"Symbolen","colorpicker_name":"Naam:","colorpicker_color":"Kleur:","colorpicker_named_title":"Benoemde kleuren","colorpicker_named_tab":"Benoemd","colorpicker_palette_title":"Paletkleuren","colorpicker_palette_tab":"Palet","colorpicker_picker_title":"Alle kleuren","colorpicker_picker_tab":"Alle kleuren","colorpicker_title":"Kleuren","code_wordwrap":"Automatische terugloop","code_title":"HTML Bron","anchor_name":"Ankernaam","anchor_title":"Anker invoegen/bewerken","about_loaded":"Geladen Invoegtoepassingen","about_version":"Versie","about_author":"Auteur","about_plugin":"Invoegtoepassing","about_plugins":"Invoegtoepassingen","about_license":"Licentie","about_help":"Help","about_general":"Info","about_title":"Over TinyMCE","charmap_usage":"Gebruik linker en rechter pijltjestoetsen om te navigeren.","anchor_invalid":"Geef een geldige ankernaam.","accessibility_help":"Hulp m.b.t. Toegankelijkheid","accessibility_usage_title":"Algemeen Gebruik","invalid_color_value":"Ongeldige kleur code"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nn.js
new file mode 100644
index 000000000..4f6441e10
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.advanced',{"underline_desc":"Understreking","italic_desc":"Kursiv","bold_desc":"Feit",dd:"Definisjonsbeskrivelse",dt:"Definisjonsuttrykk",samp:"Kodeeksempel",code:"Kode",blockquote:"Innrykk",h6:"Overskrift 6",h5:"Overskrift 5",h4:"Overskrift 4",h3:"Overskrift 3",h2:"Overskrift 2",h1:"Overskrift 1",pre:"Pre-formatert",address:"Adresse",div:"Div",paragraph:"Avsnitt",block:"Format",fontdefault:"Skriftfamilie","font_size":"Skriftstorleik","style_select":"Stilar","anchor_delta_height":"anchor_delta_height","anchor_delta_width":"anchor_delta_width","charmap_delta_height":"charmap_delta_height","charmap_delta_width":"charmap_delta_width","colorpicker_delta_height":"colorpicker_delta_height","colorpicker_delta_width":"colorpicker_delta_width","link_delta_height":"link_delta_height","link_delta_width":"link_delta_width","image_delta_height":"image_delta_height","image_delta_width":"image_delta_width","more_colors":"Fleire fargar","toolbar_focus":"Skift til verktyknappar - Alt+Q, Skift til editor - Alt-Z, Skift til elementsti - Alt-",newdocument:"Er du sikker p\u00e5 at du vil slette alt innhald?",path:"Sti","clipboard_msg":"Klipp ut / Kopier /Lim inn fungerer ikkje i Mozilla og Firefox. \n Vil du vite meir om dette?","blockquote_desc":"Innrykk","help_desc":"Hjelp","newdocument_desc":"Nytt dokument","image_props_desc":"Eigenskaper for bilete","paste_desc":"Lim inn","copy_desc":"Kopier","cut_desc":"Klipp ut","anchor_desc":"Set inn / endre anker","visualaid_desc":"Sl\u00e5 av/p\u00e5 usynlige element","charmap_desc":"Set inn spesialteikn","backcolor_desc":"Vel bakgrunnsfarge","forecolor_desc":"Vel skriftfarge","custom1_desc":"Din spesialfunksjondefinisjon her","removeformat_desc":"Fjern formatering","hr_desc":"Set inn horisontal linje","sup_desc":"Heva skrift","sub_desc":"Senka skrift","code_desc":"Redigere HTML-koden","cleanup_desc":"Rens grisete kode","image_desc":"Set inn / endre bilete","unlink_desc":"Fjern lenkje","link_desc":"Set inn / endre lenkje","redo_desc":"Gjer om","undo_desc":"Angre","indent_desc":"Auk innrykk","outdent_desc":"Reduser innrykk","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","justifyfull_desc":"Blokkjustert","justifyright_desc":"H\u00f8grejustert","justifycenter_desc":"Midtstilt","justifyleft_desc":"Venstrejustert","striketrough_desc":"Gjennomstreking","help_shortcut":"Klikk ALT-F10 for verkt\u00f8ylinje. Klikk ALT-0 for hjelp","rich_text_area":"Omr\u00e5de for rik tekst","shortcuts_desc":"Tilgjengelighetshjelp",toolbar:"Verkt\u00f8ylinje"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nn_dlg.js
new file mode 100644
index 000000000..0344eb673
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.advanced_dlg',{"link_list":"Lenkjeliste","link_is_external":"Nettadressa du skreiv inn ser ut til \u00e5 vere ein ekstern nettadresse. \u00d8nskjer du \u00e5 leggje til det obligatoriske http://-prefikset?","link_is_email":"Nettadressa du skreiv inn ser ut til \u00e5 vere ein e-postadresse. \u00d8nskjer du \u00e5 leggje til det obligatoriske mailto:-prefikset?","link_titlefield":"Tittel","link_target_blank":"Opne i nytt vindauget","link_target_same":"Opne i dette vindauget","link_target":"Vindauge","link_url":"Lenkje-URL","link_title":"Set inn / endre lenkje","image_align_right":"H\u00f8gre","image_align_left":"Venstre","image_align_textbottom":"Tekstbotn","image_align_texttop":"Teksttopp","image_align_bottom":"Botn","image_align_middle":"Midtstilt","image_align_top":"Topp","image_align_baseline":"Botnlinje","image_align":"Justering","image_hspace":"Horisontal avstand","image_vspace":"Vertikal avstand","image_dimensions":"Dimensjonar","image_alt":"Bileteomtale","image_list":"Liste med bilete","image_border":"Ramme","image_src":"Bilete-URL","image_title":"Set inn / endre bilete","charmap_title":"Vel spesialteikn","colorpicker_name":"Namn:","colorpicker_color":"Farge:","colorpicker_named_title":"Fargenamn","colorpicker_named_tab":"Namneval","colorpicker_palette_title":"Palettfargar","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"Fargeval","colorpicker_picker_tab":"Vel farge","colorpicker_title":"Vel ein farge","code_wordwrap":"Tekstbryting","code_title":"HTML-editor","anchor_name":"Ankernamn","anchor_title":"Set inn / endre anker","about_loaded":"Lasta programtillegg","about_version":"Versjon","about_author":"Utviklar","about_plugin":"Programtillegg","about_plugins":"Programtillegg","about_license":"Lisens","about_help":"Hjelp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/no.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/no.js
new file mode 100644
index 000000000..0fef8d99b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/no.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.advanced',{"underline_desc":"Understrek (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)",dd:"Definisjonsbeskrivelse",dt:"Definisjonsuttrykk",samp:"Kodeeksempel",code:"Kode",blockquote:"Innrykk",h6:"Overskrift 6",h5:"Overskrift 5",h4:"Overskrift 4",h3:"Overskrift 3",h2:"Overskrift 2",h1:"Overskrift 1",pre:"Pre-formatert",address:"Adresse",div:"Div",paragraph:"Avsnitt",block:"Format",fontdefault:"Skriftfamilie","font_size":"Skriftst\u00f8rrelse","style_select":"Stiler","more_colors":"Flere farger","toolbar_focus":"Skift til verkt\u00f8yknapper - Alt+Q, Skift til editor - Alt-Z, Skift til elementsti - Alt-",newdocument:"Er du sikker p\u00e5 at du vil slette alt innhold?",path:"Sti","clipboard_msg":"Klipp ut/Kopier/Lim er ikke tilgjengelig i Mozilla og Firefox. \n Vil du vite mer om dette?","blockquote_desc":"Innrykk","help_desc":"Hjelp","newdocument_desc":"Nytt dokument","image_props_desc":"Egenskaper for bilde","paste_desc":"Lim inn","copy_desc":"Kopier","cut_desc":"Klipp ut","anchor_desc":"Sett inn/editer anker","visualaid_desc":"Sl\u00e5 av/p\u00e5 usynlige elementer","charmap_desc":"Sett inn spesialtegn","backcolor_desc":"Velg bakgrunnsfarge","forecolor_desc":"Velg skriftfarge","custom1_desc":"Din egen beskriveles her","removeformat_desc":"Fjern formatering","hr_desc":"Sett inn horisontal linje","sup_desc":"Hev skrift","sub_desc":"Senk skrift","code_desc":"Rediger HTML kildekode","cleanup_desc":"Rense grisete kode","image_desc":"Sett inn / endre bilde","unlink_desc":"Fjerne lenke","link_desc":"Sett inn/editer lenke","redo_desc":"Gj\u00f8r om (Ctrl+Y)","undo_desc":"Angre (Ctrl+Z)","indent_desc":"\u00d8k innrykk","outdent_desc":"Reduser innrykk","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","justifyfull_desc":"Blokkjustert","justifyright_desc":"H\u00f8yrejustert","justifycenter_desc":"Midtstilt","justifyleft_desc":"Venstrejustert","striketrough_desc":"Gjennomstreke","help_shortcut":"Trykk ALT F10 for verkt\u00f8ylinje. Trykk ALT 0 for hjelp","rich_text_area":"Redigeringsomr\u00e5de","shortcuts_desc":"Hjelp for funksjonshemmede",toolbar:"Verkt\u00f8ylinje","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/no_dlg.js
new file mode 100644
index 000000000..db0f203fc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.advanced_dlg',{"link_list":"Liste over lenker","link_is_external":"Nettadressen du skrev inn ser ut til \u00e5 v\u00e6re en ekstern nettadresse. \u00d8nsker du \u00e5 legge til obligatorisk http://-prefiks?","link_is_email":"Nettadressen du skrev inn ser ut til \u00e5 v\u00e6re en Epost adresse. \u00d8nsker du \u00e5 legge til obligatorisk mailto:-prefiks?","link_titlefield":"Tittel","link_target_blank":"\u00c5pne i nytt vindu","link_target_same":"\u00c5pne i dette vindu","link_target":"M\u00e5lvindu","link_url":"Lenke URL","link_title":"Sett inn/editer lenke","image_align_right":"H\u00f8yre","image_align_left":"Venstre","image_align_textbottom":"Tekst bunn","image_align_texttop":"Tekst topp","image_align_bottom":"Bunn","image_align_middle":"Midtstilt","image_align_top":"Topp","image_align_baseline":"Bunnlinje","image_align":"Justering","image_hspace":"Horisontal avstand","image_vspace":"Vertikal avstand","image_dimensions":"Dimensjoner","image_alt":"Bildebeskrivelse","image_list":"Liste med bilder","image_border":"Ramme","image_src":"Bilde URL","image_title":"Sett inn/editer bilde","charmap_title":"Velg spesialtegn","colorpicker_name":"Navn:","colorpicker_color":"Farge:","colorpicker_named_title":"Fargenavn","colorpicker_named_tab":"Navnevalg","colorpicker_palette_title":"Palettfarger","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"Fargevalg","colorpicker_picker_tab":"Fargevelger","colorpicker_title":"Velg farge","code_wordwrap":"Tekstbryting","code_title":"HTML kildeeditor","anchor_name":"Ankernavn","anchor_title":"Sett inn/editer anker","about_loaded":"Innlastede programtillegg","about_version":"Versjon","about_author":"Forfatter","about_plugin":"Programtillegg","about_plugins":"Programtillegg","about_license":"Lisens","about_help":"Hjelp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Bruk h\u00f8yre og venstre piler for \u00e5 velge.","anchor_invalid":"Du m\u00e5 angi et gyldig ankernavn.","accessibility_help":"Tilgjengelighetshjelp","accessibility_usage_title":"Generel bruk","invalid_color_value":"Ugyldig fargeverdi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pl.js
new file mode 100644
index 000000000..f7348f11f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.advanced',{"underline_desc":"Podkre\u015blenie (Ctrl+U)","italic_desc":"Kursywa (Ctrl+I)","bold_desc":"Pogrubienie (Ctrl+B)",dd:"Opis terminu",dt:"Definicja terminu ",samp:"Pr\u00f3bka kodu",code:"Kod",blockquote:"Wydzielony blok",h6:"Nag\u0142\u00f3wek 6",h5:"Nag\u0142\u00f3wek 5",h4:"Nag\u0142\u00f3wek 4",h3:"Nag\u0142\u00f3wek 3",h2:"Nag\u0142\u00f3wek 2",h1:"Nag\u0142\u00f3wek 1",pre:"Czcionka o sta\u0142ej szeroko\u015bci",address:"Adres",div:"Div",paragraph:"Akapit",block:"Format",fontdefault:"Rodzaj czcionki","font_size":"Rozmiar czcionki","style_select":"Styl","more_colors":"Wi\u0119cej kolor\u00f3w...","toolbar_focus":"Przeskocz do przycisk\u00f3w narz\u0119dzi - Alt+Q, Przeskocz do edytora - Alt-Z, Przeskocz do elementu \u015bcie\u017cki - Alt-X",newdocument:"Czy jeste\u015b pewnien, ze chcesz wyczy\u015bci\u0107 ca\u0142\u0105 zawarto\u015b\u0107?",path:"\u015acie\u017cka","clipboard_msg":"Akcje Kopiuj/Wytnij/Wklej nie s\u0105 dost\u0119pne w Mozilli i Firefox.\nCzy chcesz wi\u0119cej informacji o tym problemie?","blockquote_desc":"Blok cytatu","help_desc":"Pomoc","newdocument_desc":"Nowy dokument","image_props_desc":"W\u0142a\u015bciwo\u015bci obrazka","paste_desc":"Wklej (Ctrl V)","copy_desc":"Kopiuj (Ctrl C)","cut_desc":"Wytnij (Ctrl X)","anchor_desc":"Wstaw/edytuj kotwic\u0119","visualaid_desc":"Prze\u0142\u0105cz widoczno\u015b\u0107 wska\u017anik\u00f3w i niewidocznych element\u00f3w","charmap_desc":"Wstaw znak specjalny","backcolor_desc":"Wybierz kolor t\u0142a","forecolor_desc":"Wybierz kolor tekstu","custom1_desc":"Tw\u00f3j niestandardowy opis tutaj","removeformat_desc":"Usu\u0144 formatowanie","hr_desc":"Wstaw poziom\u0105 lini\u0119","sup_desc":"Indeks g\u00f3rny","sub_desc":"Indeks dolny","code_desc":"Edytuj \u017ar\u00f3d\u0142o HTML","cleanup_desc":"Wyczy\u015b\u0107 nieuporz\u0105dkowany kod","image_desc":"Wstaw/edytuj obraz","unlink_desc":"Usu\u0144 link","link_desc":"Wstaw/edytuj link","redo_desc":"Pon\u00f3w (Ctrl+Y)","undo_desc":"Cofnij (Ctrl+Z)","indent_desc":"Wci\u0119cie","outdent_desc":"Cofnij wci\u0119cie","numlist_desc":"Lista numerowana","bullist_desc":"Lista nienumerowana","justifyfull_desc":"R\u00f3wnanie do prawej i lewej","justifyright_desc":"Wyr\u00f3wnaj do prawej","justifycenter_desc":"Wycentruj","justifyleft_desc":"Wyr\u00f3wnaj do lewej","striketrough_desc":"Przekre\u015blenie","help_shortcut":"Wci\u015bnij Alt F10 aby pokaza\u0107 pasek narz\u0119dzi. Wci\u015bnij Alt 0 aby otworzy\u0107 pomoc","rich_text_area":"Pole tekstowe","shortcuts_desc":"Pomoc dost\u0119pno\u015bci",toolbar:"Pasek narz\u0119dzi","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pl_dlg.js
new file mode 100644
index 000000000..e1ba93c95
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.advanced_dlg',{"link_list":"Lista link\u00f3w","link_is_external":"URL kt\u00f3ry otworzy\u0142e\u015b wydaje si\u0119 by\u0107 zewn\u0119trznym linkiem, czy chcesz doda\u0107 wymagany prefiks http:// ?","link_is_email":"URL kt\u00f3ry otworzy\u0142e\u015b wydaje si\u0119 by\u0107 adresem mailowym, czy chcesz doda\u0107 odpowiedni prefiks mailto:?","link_titlefield":"Tytu\u0142","link_target_blank":"Otw\u00f3rz link w nowym oknie","link_target_same":"Otw\u00f3rz link w tym samym oknie","link_target":"Cel","link_url":"URL linka","link_title":"Wstaw/edytuj link","image_align_right":"Prawy","image_align_left":"Lewy","image_align_textbottom":"Dolny tekst","image_align_texttop":"G\u00f3rny tekst","image_align_bottom":"D\u00f3\u0142","image_align_middle":"\u015arodek","image_align_top":"G\u00f3ra","image_align_baseline":"Linia bazowa","image_align":"Wyr\u00f3wnanie","image_hspace":"Odst\u0119p poziomy","image_vspace":"Odst\u0119p pionowy","image_dimensions":"Rozmiary","image_alt":"Opis obrazka","image_list":"Lista obrazk\u00f3w","image_border":"Obramowanie","image_src":"URL obrazka","image_title":"Wstaw/edytuj obraz","charmap_title":"Wybierz niestandardowy znak","colorpicker_name":"Nazwa:","colorpicker_color":"Kolor:","colorpicker_named_title":"Nazwane kolory","colorpicker_named_tab":"Nazwane","colorpicker_palette_title":"Paleta kolor\u00f3w","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Wybieranie kolor\u00f3w","colorpicker_picker_tab":"Wybieranie","colorpicker_title":"Wybierz kolor","code_wordwrap":"Zawijanie s\u0142\u00f3w","code_title":"Edytor \u017ar\u00f3d\u0142a HTML","anchor_name":"Nazwa zakotwiczenia","anchor_title":"Wstaw/Edytuj zakotwiczenie","about_loaded":"Za\u0142adowane wtyczki","about_version":"Wersja","about_author":"Autor","about_plugin":"Wtyczka","about_plugins":"Wtyczki","about_license":"Licencja","about_help":"Pomoc","about_general":"O TinyMCE","about_title":"O TinyMCE","charmap_usage":"U\u017cywaj strza\u0142ek w lewo i w prawo do nawigacji.","anchor_invalid":"Prosz\u0119 poda\u0107 w\u0142a\u015bciw\u0105 nazw\u0119 zakotwiczenia.","accessibility_help":"Pomoc dost\u0119pno\u015bci","accessibility_usage_title":"Og\u00f3lne zastosowanie","invalid_color_value":"Nieprawid\u0142owa warto\u015b\u0107 koloru"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ps.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ps.js
new file mode 100644
index 000000000..59d632974
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ps.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ps_dlg.js
new file mode 100644
index 000000000..597f01f94
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pt.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pt.js
new file mode 100644
index 000000000..48d17b1a6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.advanced',{"underline_desc":"Sublinhado (Ctrl+U)","italic_desc":"It\u00e1lico (Ctrl+I)","bold_desc":"Negrito (Ctrl+B)",dd:"Descri\u00e7\u00e3o da defini\u00e7\u00e3o",dt:"Termo da defini\u00e7\u00e3o",samp:"Amostra de c\u00f3digo",code:"C\u00f3digo",blockquote:"Cita\u00e7\u00e3o em bloco",h6:"T\u00edtulo 6",h5:"T\u00edtulo 5",h4:"T\u00edtulo 4",h3:"T\u00edtulo 3",h2:"T\u00edtulo 2",h1:"T\u00edtulo 1",pre:"Pr\u00e9-formatado",address:"Endere\u00e7o",div:"Div",paragraph:"Par\u00e1grafo",block:"Formata\u00e7\u00e3o",fontdefault:"Tipo de fonte","font_size":"Tamanho","style_select":"Estilos","anchor_delta_width":"30","link_delta_height":"25","link_delta_width":"50","more_colors":"Mais cores","toolbar_focus":"Ir para as ferramentas - Alt+Q, Ir para o editor - Alt-Z, Ir para o endere\u00e7o do elemento - Alt-X",newdocument:"Tem a certeza que deseja apagar tudo?",path:"Endere\u00e7o","clipboard_msg":"Copiar/recortar/colar n\u00e3o est\u00e1 dispon\u00edvel no Mozilla e Firefox. Deseja mais informa\u00e7\u00f5es sobre este problema?","blockquote_desc":"Cita\u00e7\u00e3o em bloco","help_desc":"Ajuda","newdocument_desc":"Novo documento","image_props_desc":"Propriedades da imagem","paste_desc":"Colar","copy_desc":"Copiar","cut_desc":"Recortar","anchor_desc":"Inserir/editar \u00e2ncora","visualaid_desc":"Alternar guias/elementos invis\u00edveis","charmap_desc":"Inserir caracteres especiais","backcolor_desc":"Selecionar a cor de fundo","forecolor_desc":"Selecionar a cor do texto","custom1_desc":"Insira aqui a sua descri\u00e7\u00e3o personalizada","removeformat_desc":"Remover formata\u00e7\u00e3o","hr_desc":"Inserir separador horizontal","sup_desc":"Superior \u00e0 linha","sub_desc":"Inferior \u00e0 linha","code_desc":"Editar c\u00f3digo fonte","cleanup_desc":"Limpar c\u00f3digo incorreto","image_desc":"Inserir/editar imagem","unlink_desc":"Remover hyperlink","link_desc":"Inserir/editar hyperlink","redo_desc":"Refazer (Ctrl+Y)","undo_desc":"Desfazer (Ctrl+Z)","indent_desc":"Aumentar recuo","outdent_desc":"Diminuir recuo","numlist_desc":"Numera\u00e7\u00e3o","bullist_desc":"Marcadores","justifyfull_desc":"Justificar","justifyright_desc":"Alinhar \u00e0 direita","justifycenter_desc":"Centralizar","justifyleft_desc":"Alinhar \u00e0 esquerda","striketrough_desc":"Riscado","help_shortcut":"Pressione ALT-F10 para barra de ferramentas. Pressione ALT-0 para ajuda","rich_text_area":"\u00c1rea de edi\u00e7\u00e3o rica","shortcuts_desc":"Ajuda acessibilidade",toolbar:"Barra de ferramentas","anchor_delta_height":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pt_dlg.js
new file mode 100644
index 000000000..313a012fa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.advanced_dlg',{"link_list":"Lista de Links","link_is_external":"A URL digitada parece conduzir a um link externo. Deseja acrescentar o prefixo necess\u00e1rio http://?","link_is_email":"A URL digitada parece ser um endere\u00e7o de e-mail. Deseja acrescentar o prefixo necess\u00e1rio mailto:?","link_titlefield":"T\u00edtulo","link_target_blank":"Abrir hyperlink em nova janela","link_target_same":"Abrir hyperlink na mesma janela","link_target":"Alvo","link_url":"URL do hyperink","link_title":"Inserir/editar hyperlink","image_align_right":"Direita","image_align_left":"Esquerda","image_align_textbottom":"Base do texto","image_align_texttop":"Topo do texto","image_align_bottom":"Abaixo","image_align_middle":"Meio","image_align_top":"Topo","image_align_baseline":"Sobre a linha de texto","image_align":"Alinhamento","image_hspace":"Espa\u00e7o Horizontal","image_vspace":"Espa\u00e7o Vertical","image_dimensions":"Dimens\u00f5es","image_alt":"Descri\u00e7\u00e3o da imagem","image_list":"Lista de imagens","image_border":"Limites","image_src":"Endere\u00e7o da imagem","image_title":"Inserir/editar imagem","charmap_title":"Selecionar caracteres personalizados","colorpicker_name":"Nome:","colorpicker_color":"Cor:","colorpicker_named_title":"Cores Personalizadas","colorpicker_named_tab":"Personalizadas","colorpicker_palette_title":"Paleta de Cores","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Editor de Cores","colorpicker_picker_tab":"Editor","colorpicker_title":"Selecione uma cor","code_wordwrap":"Quebra autom\u00e1tica de linha","code_title":"Editor HTML","anchor_name":"Nome da \u00e2ncora","anchor_title":"Inserir/editar \u00e2ncora","about_loaded":"Plugins Instalados","about_version":"Vers\u00e3o","about_author":"Autor","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Licen\u00e7a","about_help":"Ajuda","about_general":"Sobre","about_title":"Sobre o TinyMCE","charmap_usage":"Use as setas esquerda e direita para navegar.","anchor_invalid":"Por favor, especifique um nome v\u00e1lido de \u00e2ncora.","accessibility_help":"Ajuda de Acessibilidade","accessibility_usage_title":"Uso Geral","invalid_color_value":"Valor da cor inv\u00e1lido"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ro.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ro.js
new file mode 100644
index 000000000..88899a8c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ro.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.advanced',{"underline_desc":"Subliniat (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"\u00cengro\u0219at (Ctrl B)",dd:"Defini\u021bie",dt:"Termen definit ",samp:"Mostr\u0103 de cod",code:"Cod",blockquote:"Citat",h6:"Titlu 6",h5:"Titlu 5",h4:"Titlu 4",h3:"Titlu 3",h2:"Titlu 2",h1:"Titlu 1",pre:"Preformatat",address:"Adres\u0103",div:"Div",paragraph:"Paragraf",block:"Format",fontdefault:"Familie font","font_size":"M\u0103rime font","style_select":"Stiluri","more_colors":"Mai multe culori...","toolbar_focus":"Salt la instrumente - Alt Q, Salt la editor - Alt-Z, Salt la cale - Alt-X",newdocument:"Sigur vrei s\u0103 \u0219tergi tot?",path:"Cale","clipboard_msg":"Copierea/t\u0103ierea/lipirea nu sunt disponibile \u00een Mozilla \u0219i Firefox.\nVrei mai multe informa\u021bii despre aceast\u0103 problem\u0103?","blockquote_desc":"Citat","help_desc":"Ajutor","newdocument_desc":"Document nou","image_props_desc":"Detalii imagine","paste_desc":"Lipe\u0219te","copy_desc":"Copiaz\u0103","cut_desc":"Taie","anchor_desc":"Inserare/editare ancor\u0103","visualaid_desc":"Comut\u0103 ghidajele/elementele invizibile","charmap_desc":"Inserare caracter special","backcolor_desc":"Culoare fundal","forecolor_desc":"Culoare text","custom1_desc":"Introdu aici o descriere","removeformat_desc":"Anuleaz\u0103 formatarea","hr_desc":"Insereaz\u0103 linie orizontal\u0103","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Editare surs\u0103 HTML","cleanup_desc":"Cur\u0103\u021b\u0103 codul","image_desc":"Inserare/editare imagine","unlink_desc":"\u0218terge leg\u0103tura","link_desc":"Inserare/editare leg\u0103tur\u0103","redo_desc":"Ref\u0103 (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indenteaz\u0103","outdent_desc":"De-indenteaz\u0103","numlist_desc":"List\u0103 ordonat\u0103","bullist_desc":"List\u0103 neordonat\u0103","justifyfull_desc":"Aliniere pe toat\u0103 l\u0103\u021bimea","justifyright_desc":"Aliniere la dreapta","justifycenter_desc":"Centrare","justifyleft_desc":"Aliniere la st\u00e2nga","striketrough_desc":"T\u0103iat","help_shortcut":"Apas\u0103 ALT-F10 pentru bara de unelte. Apas\u0103 ALT-0 pentru ajutor","rich_text_area":"Zon\u0103 de text formatat","shortcuts_desc":"Ajutor accesabilitate",toolbar:"Bar\u0103 de unelte","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ro_dlg.js
new file mode 100644
index 000000000..3cb647dd8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.advanced_dlg',{"link_list":"Lista de leg\u0103turi","link_is_external":"URL-ul pe care l-ai introdus pare a fi o leg\u0103tur\u0103 extern\u0103. Vrei s\u0103 adaug \u0219i prefixul http:// necesar?","link_is_email":"URL-ul pe care l-ai introdus pare a fi o adres\u0103 de e-mail. Vrei s\u0103 adaug \u0219i prefixul mailto: necesar?","link_titlefield":"Titlu","link_target_blank":"Deschide leg\u0103tura \u00eentr-o fereastr\u0103 nou\u0103","link_target_same":"Deschide leg\u0103tura \u00een aceea\u0219i fereastr\u0103","link_target":"\u021aint\u0103","link_url":"URL leg\u0103tur\u0103","link_title":"Inserare/editare leg\u0103tur\u0103","image_align_right":"Dreapta","image_align_left":"St\u00e2nga","image_align_textbottom":"Textul la mijloc","image_align_texttop":"Textul sus","image_align_bottom":"Jos","image_align_middle":"La mijloc","image_align_top":"Sus","image_align_baseline":"Baseline","image_align":"Aliniere","image_hspace":"Spa\u021biu orizontal","image_vspace":"Spa\u021biu vertical","image_dimensions":"Dimensiuni","image_alt":"Descriere imagine","image_list":"List\u0103 de imagini","image_border":"Bordur\u0103","image_src":"URL imagine","image_title":"Insereaz\u0103/editeaz\u0103 o imagine","charmap_title":"Alege un caracter special","colorpicker_name":"Nume:","colorpicker_color":"Culoare:","colorpicker_named_title":"Culori denumite","colorpicker_named_tab":"Denumite","colorpicker_palette_title":"Palet\u0103 de culori","colorpicker_palette_tab":"Palet\u0103","colorpicker_picker_title":"Pipet\u0103 de culori","colorpicker_picker_tab":"Pipet\u0103","colorpicker_title":"Alege o culoare","code_wordwrap":"\u00cencadrare cuvinte","code_title":"Editor surs\u0103 HTML","anchor_name":"Nume ancor\u0103","anchor_title":"Inserare/editare ancor\u0103","about_loaded":"Module \u00eenc\u0103rcate","about_version":"Versiune","about_author":"Autor","about_plugin":"Modul","about_plugins":"Module","about_license":"Licen\u021b\u0103","about_help":"Ajutor","about_general":"Despre","about_title":"Despre TinyMCE","charmap_usage":"Folose\u0219te s\u0103ge\u021bile st\u00e2nga \u0219i dreapta pentru navigare.","anchor_invalid":"Te rog specific\u0103 un nume valid de ancor\u0103.","accessibility_help":"Ajutor pentru accesibilitate","accessibility_usage_title":"Uz general","invalid_color_value":"Valoare incorect\u0103 a culorii"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ru.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ru.js
new file mode 100644
index 000000000..5dcf47ad9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ru.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.advanced',{"underline_desc":"\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u041f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u044b\u0439 (Ctrl+B)",dd:"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430",dt:"\u0422\u0435\u0440\u043c\u0438\u043d \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430",samp:"\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430",code:"\u041a\u043e\u0434",blockquote:"\u0426\u0438\u0442\u0430\u0442\u0430",h6:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",h5:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",h4:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",h3:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",h2:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",h1:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",pre:"\u041f\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439",address:"\u0410\u0434\u0440\u0435\u0441",div:"Div",paragraph:"\u0410\u0431\u0437\u0430\u0446",block:"\u0424\u043e\u0440\u043c\u0430\u0442",fontdefault:"\u0428\u0440\u0438\u0444\u0442","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440","style_select":"\u0421\u0442\u0438\u043b\u044c","more_colors":"\u0414\u0440\u0443\u0433\u0438\u0435 \u0446\u0432\u0435\u0442\u0430...","toolbar_focus":"\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u043a\u043d\u043e\u043f\u043e\u043a (Alt+Q). \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0443 (Alt+Z). \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043f\u0443\u0442\u0438 (Alt+X).",newdocument:"\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0441\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c?",path:"\u0422\u0435\u0433\u0438","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432\u044b\u0440\u0435\u0437\u043a\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 Firefox. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438: Ctrl C \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, Ctrl V \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c. \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e?","blockquote_desc":"\u0426\u0438\u0442\u0430\u0442\u0430","help_desc":"\u041f\u043e\u043c\u043e\u0449\u044c","newdocument_desc":"\u041d\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","paste_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c","copy_desc":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c","cut_desc":"\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c","anchor_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044f\u043a\u043e\u0440\u044c","visualaid_desc":"\u0412\u0441\u0435 \u0437\u043d\u0430\u043a\u0438","charmap_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b","backcolor_desc":"\u0426\u0432\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430","forecolor_desc":"\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430","custom1_desc":"\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","removeformat_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442","hr_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0447\u0435\u0440\u0442\u0443","sup_desc":"\u041d\u0430\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439","sub_desc":"\u041f\u043e\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439","code_desc":"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c HTML \u043a\u043e\u0434","cleanup_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0439 \u043a\u043e\u0434","image_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","unlink_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443","link_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443","redo_desc":"\u0412\u0435\u0440\u043d\u0443\u0442\u044c (Ctrl+Y)","undo_desc":"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c (Ctrl+Z)","indent_desc":"\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f","outdent_desc":"\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","justifyfull_desc":"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0435","justifyright_desc":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","justifycenter_desc":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","justifyleft_desc":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","striketrough_desc":"\u0417\u0430\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","help_shortcut":"\u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-F10 \u0434\u043b\u044f \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-0 \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438.","rich_text_area":"\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440","shortcuts_desc":"\u041f\u043e\u043c\u043e\u0449\u044c \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438",toolbar:"\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ru_dlg.js
new file mode 100644
index 000000000..4cd823d10
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.advanced_dlg',{"link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a","link_is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 http://?","link_is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 mailto:?","link_titlefield":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","link_target_blank":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435","link_target_same":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043e\u043a\u043d\u0435","link_target":"\u0426\u0435\u043b\u044c","link_url":"\u0410\u0434\u0440\u0435\u0441","link_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0441\u044b\u043b\u043a\u0438","image_align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","image_align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","image_align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","image_align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043b\u0438\u043d\u0438\u0438","image_align":"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","image_hspace":"\u0413\u043e\u0440\u0438\u0437. \u043e\u0442\u0441\u0442\u0443\u043f","image_vspace":"\u0412\u0435\u0440\u0442. \u043e\u0442\u0441\u0442\u0443\u043f","image_dimensions":"\u0420\u0430\u0437\u043c\u0435\u0440","image_alt":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a","image_border":"\u0413\u0440\u0430\u043d\u0438\u0446\u0430","image_src":"\u0410\u0434\u0440\u0435\u0441","image_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","charmap_title":"\u0412\u044b\u0431\u043e\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u0430","colorpicker_name":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435:","colorpicker_color":"\u041a\u043e\u0434:","colorpicker_named_title":"\u0426\u0432\u0435\u0442\u0430","colorpicker_named_tab":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f","colorpicker_palette_title":"\u0426\u0432\u0435\u0442\u0430","colorpicker_palette_tab":"\u041f\u0430\u043b\u0438\u0442\u0440\u0430","colorpicker_picker_title":"\u0426\u0432\u0435\u0442\u0430","colorpicker_picker_tab":"\u0421\u043f\u0435\u043a\u0442\u0440","colorpicker_title":"\u0426\u0432\u0435\u0442\u0430","code_wordwrap":"\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0441\u0442\u0440\u043e\u043a","code_title":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 HTML \u043a\u043e\u0434\u0430","anchor_name":"\u0418\u043c\u044f \u044f\u043a\u043e\u0440\u044f","anchor_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u043a\u043e\u0440\u044f","about_loaded":"\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b","about_version":"\u0412\u0435\u0440\u0441\u0438\u044f","about_author":"\u0410\u0432\u0442\u043e\u0440","about_plugin":"\u041f\u043b\u0430\u0433\u0438\u043d","about_plugins":"\u041f\u043b\u0430\u0433\u0438\u043d\u044b","about_license":"\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f","about_help":"\u041f\u043e\u043c\u043e\u0449\u044c","about_general":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","about_title":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 TinyMCE","charmap_usage":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \"\u0412\u043b\u0435\u0432\u043e\" \u0438 \"\u0412\u043f\u0440\u0430\u0432\u043e\" \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438.","anchor_invalid":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0438\u043c\u044f \u044f\u043a\u043e\u0440\u044f.","accessibility_help":"\u041f\u043e\u043c\u043e\u0449\u044c \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438","accessibility_usage_title":"\u041e\u0431\u0449\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435","invalid_color_value":"\u041d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sc.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sc.js
new file mode 100644
index 000000000..f839e9407
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sc.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.advanced',{"underline_desc":"\u5e95\u7ebf(Ctrl+U)","italic_desc":"\u659c\u4f53(Ctrl+I)","bold_desc":"\u9ed1\u4f53(Ctrl+B)",dd:"\u540d\u8bcd\u89e3\u91ca",dt:"\u540d\u8bcd\u5b9a\u4e49",samp:"\u4ee3\u7801\u6837\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"\u6807\u98986",h5:"\u6807\u98985",h4:"\u6807\u98984",h3:"\u6807\u98983",h2:"\u6807\u98982",h1:"\u6807\u98981",pre:"\u65e0\u5f0f\u6837\u7f16\u6392",address:"\u5730\u5740",div:"DIV\u5c42",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u4f53","font_size":"\u5b57\u4f53\u5927\u5c0f","style_select":"\u6837\u5f0f","link_delta_height":"60","link_delta_width":"40","more_colors":"\u66f4\u591a\u989c\u8272","toolbar_focus":"\u5de5\u5177\u6309\u94ae- Alt+Q,\u7f16\u8f91\u5668- Alt-Z,\u5143\u4ef6\u4f4d\u7f6e- Alt-X",newdocument:"\u60a8\u786e\u8ba4\u8981\u6e05\u9664\u5168\u90e8\u5185\u5bb9\u5417\uff1f ",path:"\u4f4d\u7f6e","clipboard_msg":"\u590d\u5236\u3001\u526a\u4e0b\u53ca\u8d34\u4e0a\u529f\u80fd\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u3002 \n\u662f\u5426\u9700\u8981\u4e86\u89e3\u66f4\u591a\u6709\u5173\u6b64\u95ee\u9898\u7684\u8d44\u8baf\uff1f ","blockquote_desc":"\u5f15\u7528","help_desc":"\u8bf4\u660e","newdocument_desc":"\u65b0\u6587\u4ef6","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u8d34\u4e0a","copy_desc":"\u590d\u5236","cut_desc":"\u526a\u4e0b","anchor_desc":"\u63d2\u5165/\u7f16\u8f91\u951a\u70b9","visualaid_desc":"\u5f00\u5173\u683c\u7ebf/\u9690\u85cf\u5143\u4ef6","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","backcolor_desc":"\u9009\u62e9\u80cc\u666f\u989c\u8272","forecolor_desc":"\u9009\u62e9\u6587\u5b57\u989c\u8272","custom1_desc":"\u5728\u6b64\u8f93\u5165\u60a8\u7684\u81ea\u5b9a\u4e49\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u6837\u5f0f","hr_desc":"\u63d2\u5165\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"\u7f16\u8f91HTML\u6e90\u4ee3\u7801","cleanup_desc":"\u6e05\u9664\u591a\u4f59\u4ee3\u7801","image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","unlink_desc":"\u53d6\u6d88\u8fde\u7ed3","link_desc":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","redo_desc":"\u91cd\u505a(Ctrl+Y)","undo_desc":"\u64a4\u9500(Ctrl+Z)","indent_desc":"\u589e\u52a0\u7f29\u6392","outdent_desc":"\u51cf\u5c11\u7f29\u6392","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u4e13\u6848\u7b26\u53f7","justifyfull_desc":"\u4e24\u7aef\u5bf9\u9f50","justifyright_desc":"\u53f3\u5bf9\u9f50","justifycenter_desc":"\u5c45\u4e2d","justifyleft_desc":"\u5de6\u5bf9\u9f50","striketrough_desc":"\u5220\u9664\u7ebf","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sc_dlg.js
new file mode 100644
index 000000000..603e11e97
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.advanced_dlg',{"link_list":"\u94fe\u7ed3\u6e05\u5355","link_is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u65b9\u52a0\u5165http://\uff1f ","link_is_email":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u4f4d\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u4f4d\u5740\u524d\u65b9\u52a0\u5165mailto:\uff1f ","link_titlefield":"\u6807\u9898","link_target_blank":"\u5c06\u8fde\u7ed3\u7f51\u5740\u5f00\u5728\u65b0\u7a97\u53e3","link_target_same":"\u5c06\u94fe\u7ed3\u7f51\u5740\u5f00\u5728\u6b64\u89c6\u7a97","link_target":"\u76ee\u6807","link_url":"\u94fe\u7ed3\u4f4d\u5740","link_title":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","image_align_right":"\u9760\u53f3\u5bf9\u9f50","image_align_left":"\u9760\u5de6\u5bf9\u9f50","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u5e95\u90e8\u5bf9\u9f50","image_align_middle":"\u5c45\u4e2d\u5bf9\u9f50","image_align_top":"\u4e0a\u65b9\u5bf9\u9f50","image_align_baseline":"\u57fa\u7ebf","image_align":"\u5bf9\u9f50\u65b9\u5f0f","image_hspace":"\u6c34\u51c6\u95f4\u8ddd","image_vspace":"\u5782\u76f4\u95f4\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u8bf4\u660e","image_list":"\u56fe\u7247\u5217\u8868","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247\u4f4d\u5740","image_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","colorpicker_name":"\u540d\u79f0:","colorpicker_color":"\u989c\u8272:","colorpicker_named_title":"\u9884\u8bbe\u7684\u989c\u8272","colorpicker_named_tab":"\u9884\u8bbe\u7684","colorpicker_palette_title":"\u8272\u76d8\u989c\u8272","colorpicker_palette_tab":"\u8272\u76d8","colorpicker_picker_title":"\u9009\u8272\u5668","colorpicker_picker_tab":"\u9009\u8272\u5668","colorpicker_title":"\u6311\u9009\u989c\u8272","code_wordwrap":"\u6574\u5b57\u6362\u884c","code_title":"HTML\u6e90\u4ee3\u7801\u7f16\u8f91\u5668","anchor_name":"\u951a\u70b9\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91\u951a\u70b9","about_loaded":"\u5df2\u8f7d\u5165\u7684\u63d2\u4ef6","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u63d2\u4ef6","about_plugins":"\u5168\u90e8\u63d2\u4ef6","about_license":"\u6388\u6743","about_help":"\u8bf4\u660e","about_general":"\u5173\u4e8e","about_title":"\u5173\u4e8eTinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/se.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/se.js
new file mode 100644
index 000000000..67b823189
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/se.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.advanced',{"underline_desc":"Understruken (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)",dd:"Definitionsbeskrivning",dt:"Definitionsterm",samp:"Kodexempel",code:"Kodblock",blockquote:"Blockcitat",h6:"Rubrik 6",h5:"Rubrik 5",h4:"Rubrik 4",h3:"Rubrik 3",h2:"Rubrik 2",h1:"Rubrik 1",pre:"F\u00f6rformaterad",address:"Adress",div:"Div",paragraph:"Paragraf",block:"Format",fontdefault:"Fontfamilj","font_size":"Fontstorlek","style_select":"Stilar","toolbar_focus":"Hoppa till verktygsf\u00e4ltet - Alt+Q, Hoppa till redigeraren - Alt-Z, Hoppa till element listan - Alt-X",newdocument:"\u00c4r du s\u00e4ker p\u00e5 att du vill radera allt inneh\u00e5ll?",path:"Element","clipboard_msg":"Kopiera/klipp ut/klistra in \u00e4r inte tillg\u00e4ngligt i din webbl\u00e4sare.\nVill du veta mer om detta?","blockquote_desc":"Blockcitat","help_desc":"Hj\u00e4lp","newdocument_desc":"Nytt dokument","image_props_desc":"Bildinst\u00e4llningar","paste_desc":"Klistra in","copy_desc":"Kopiera","cut_desc":"Klipp ut","anchor_desc":"Infoga/redigera bokm\u00e4rke","visualaid_desc":"Visa/d\u00f6lj visuella hj\u00e4lpmedel","charmap_desc":"Infoga specialtecken","backcolor_desc":"V\u00e4lj bakgrundsf\u00e4rg","forecolor_desc":"V\u00e4lj textf\u00e4rg","removeformat_desc":"Ta bort formatering","hr_desc":"Infoga horisontell skiljelinje","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Redigera HTML k\u00e4llkoden","cleanup_desc":"St\u00e4da upp i k\u00e4llkoden","image_desc":"Infoga/redigera bild","unlink_desc":"Ta bort l\u00e4nk","link_desc":"Infoga/redigera l\u00e4nk","redo_desc":"G\u00f6r om (Ctrl+Y)","undo_desc":"\u00c5ngra (Ctrl+Z)","indent_desc":"Indrag","outdent_desc":"Drag tillbaka","numlist_desc":"Nummerlista","bullist_desc":"Punktlista","justifyfull_desc":"Justera","justifyright_desc":"H\u00f6gerst\u00e4lld","justifycenter_desc":"Centrera","justifyleft_desc":"V\u00e4nsterst\u00e4lld","striketrough_desc":"Genomstruken","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","custom1_desc":"Your Custom Description Here","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/se_dlg.js
new file mode 100644
index 000000000..5b1c6c4b1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.advanced_dlg',{"link_list":"L\u00e4nklista","link_is_external":"L\u00e4nken du angav verkar vara en extern adress. Vill du infoga http:// prefixet p\u00e5 l\u00e4nken?","link_is_email":"L\u00e4nken du angav verkar vara en e-post adress. Vill du infoga mailto: prefixet p\u00e5 l\u00e4nken?","link_titlefield":"Titel","link_target_blank":"\u00d6ppna l\u00e4nken i ett nytt f\u00f6nster","link_target_same":"\u00d6ppna l\u00e4nken i samma f\u00f6nster","link_target":"M\u00e5l","link_url":"L\u00e4nkens URL","link_title":"Infoga/redigera l\u00e4nk","image_align_right":"V\u00e4nster","image_align_left":"H\u00f6ger","image_align_textbottom":"Botten av texten","image_align_texttop":"Toppen av texten","image_align_bottom":"Botten","image_align_middle":"Mitten","image_align_top":"Toppen","image_align_baseline":"Baslinje","image_align":"Justering","image_hspace":"Horisontalrymd","image_vspace":"Vertikalrymd","image_dimensions":"Dimensioner","image_alt":"Bildens beskrivning","image_list":"Bildlista","image_border":"Ram","image_src":"Bildens URL","image_title":"Infoga/redigera bild","charmap_title":"V\u00e4lj ett specialtecken","colorpicker_name":"Namn:","colorpicker_color":"F\u00e4rg:","colorpicker_named_title":"Namngivna f\u00e4rger","colorpicker_named_tab":"Namngivna","colorpicker_palette_title":"Palettf\u00e4rger","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"F\u00e4rgv\u00e4ljare","colorpicker_picker_tab":"V\u00e4ljare","colorpicker_title":"V\u00e4lj en f\u00e4rg","code_wordwrap":"Bryt ord","code_title":"HTML k\u00e4llkodsl\u00e4ge","anchor_name":"Namn","anchor_title":"Infoga/redigera bokm\u00e4rke","about_loaded":"Laddade plug-ins","about_version":"Version","about_author":"Utvecklare","about_plugin":"Om plug-in","about_plugins":"Om plug-in","about_license":"Licens","about_help":"Hj\u00e4lp","about_general":"Om","about_title":"Om TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/si.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/si.js
new file mode 100644
index 000000000..48bd6352a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/si.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"\u0db1\u0dd2\u0dbb\u0dca\u0dc0\u0da0\u0db1 \u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dbb\u0dba",dt:"\u0db1\u0dd2\u0dbb\u0dca\u0dc0\u0da0\u0db1\u0dba ",samp:"\u0d9a\u0dda\u0dad \u0dc3\u0dcf\u0db8\u0dca\u0db4\u0dbd",code:"\u0d9a\u0dda\u0dad\u0dba",blockquote:"Blockquote",h6:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 6",h5:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 5",h4:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 4",h3:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 3",h2:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 2",h1:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 1",pre:"\u0db4\u0dd6\u0dbb\u0dca\u0dc0 \u0db1\u0dd2\u0dbb\u0dca\u0db8\u0dcf\u0dab\u0dba",address:"\u0dbd\u0dd2\u0db4\u0dd2\u0db1\u0dba",div:"Div",paragraph:"\u200d\u0da1\u0dda\u0daf\u0dba",block:"\u0d86\u0d9a\u0dd8\u0dad\u0dd2\u0dba",fontdefault:"\u0db4\u0db1\u0dca\u0daf \u0dc3\u0db8\u0dd6\u0dc4\u0dba","font_size":"\u0db4\u0db1\u0dca\u0daf \u0db4\u0dca\u200d\u0dbb\u0db8\u0dcf\u0dab\u0dba","style_select":"\u0dc1\u0ddb\u0dbd\u0dd2\u0dba","more_colors":"\u0dad\u0dc0\u0dad\u0dca \u0dc0\u0dbb\u0dca\u0dab","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"\u0d94\u0db6\u0da7 \u0db8\u0dd9\u0db8 \u0d85\u0db1\u0dca\u0dad\u0dbb\u0dca\u0d9c\u0dad\u0dba \u0db8\u0d9a\u0dcf \u0daf\u0dd0\u0db8\u0dd3\u0db8\u0da7 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0db8 \u0daf?",path:"\u0db8\u0d9f","clipboard_msg":"\u0db4\u0dd2\u0da7\u0db4\u0dad\u0dca \u0d9a\u0dd2\u0dbb\u0dd3\u0db8/\u0d89\u0dc0\u0dad\u0dca \u0d9a\u0dd2\u0dbb\u0dd3\u0db8/\u0d87\u0dbd\u0dc0\u0dd3\u0db8 \u0db8\u0ddc\u0dc3\u0dd2\u0dbd\u0dca\u0dbd\u0dcf \u0dc4\u0dcf \u0dc6\u0dba\u0dbb\u0dca \u0dc6\u0ddc\u0d9a\u0dca\u0dc3\u0dca \u0dc4\u0dd2 \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0db1\u0ddc\u0dc0\u0dda.\n\u0d94\u0db6\u0da7 \u0db8\u0dda \u0db4\u0dd2\u0dc5\u0dd2\u0db6\u0db3\u0dc0 \u0dad\u0da0\u0daf\u0dd4\u0dbb\u0da7\u0dad\u0dca \u0dad\u0ddc\u0dbb\u0dad\u0dd4\u0dbb\u0dd4 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0dc0\u0dda\u0daf?","blockquote_desc":"Blockquote","help_desc":"\u0d8b\u0db4\u0d9a\u0dcf\u0dbb\u0dba","newdocument_desc":"\u0db1\u0dc0 \u0dbd\u0dda\u0d9b\u0db1\u0dba","image_props_desc":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4\u0dd2 \u0dbd\u0d9a\u0dca\u0dc2\u0dab\u0dba","copy_desc":"\t\u0db4\u0dd2\u0da7\u0db4\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","cut_desc":"Cut","anchor_desc":"\u0d86\u0db0\u0dcf\u0dbb\u0dba \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1 ","visualaid_desc":"\u0db8\u0dcf\u0dbb\u0dca\u0d9c\u0dc3\u0dd6\u0da0\u0d9a/\u0d85\u0daf\u0dd8\u0dc1\u0dca\u200d\u0dba \u0db8\u0dd6\u0dbd\u0dd2\u0d9a\u0dcf\u0d82\u0d9c","charmap_desc":" \u0db7\u0dcf\u0dc0\u0dd2\u0dad \u0d85\u0d9a\u0dca\u0dc2\u0dbb\u0dba \u0d87\u0dad\u0dd4\u0dbd\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1","backcolor_desc":"\u0db4\u0dc3\u0dd4\u0db6\u0dd2\u0db8 \u0dc0\u0dbb\u0dca\u0dab\u0dba \u0dad\u0ddd\u0dbb\u0dcf\u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","forecolor_desc":" \u0db4\u0dcf\u0daa\u0dba\u0dd9\u0dc4\u0dd2 \u0dc0\u0dbb\u0dca\u0dab\u0dba \u0dad\u0ddd\u0dbb\u0dcf\u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","custom1_desc":"\u0d94\u0db6\u0dda \u0dc0\u0dca\u200d\u0dba\u0dc0\u0dc4\u0dcf\u0dbb\u0dd2\u0d9a \u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dbb\u0dba","removeformat_desc":"\u0d86\u0d9a\u0dd8\u0dad\u0dd2\u0d9a\u0dbb\u0dab\u0dba \u0d89\u0dc0\u0dad\u0dca\u0d9a\u0dbb\u0db1\u0dc0\u0dcf","hr_desc":"\u0dad\u0dd2\u0dbb\u0dc3\u0dca \u0dbb\u0dd6\u0dbd \u0d87\u0dad\u0dd4\u0dbd\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","sup_desc":"\u0d8b\u0da9\u0dd4\u0dbd\u0d9a\u0dd4\u0dab","sub_desc":"\u0dba\u0da7\u0dd2\u0dbd\u0d9a\u0dd4\u0dab\u0dd4","code_desc":" HTML \u0db8\u0dd6\u0dbd\u0dcf\u0dc1\u0dca\u200d\u0dbb\u0dba \u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1","cleanup_desc":"\u0dc0\u0dd0\u0dbb\u0daf\u0dd2 \u0d9a\u0dda\u0dad \u0d89\u0dc0\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","image_desc":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4\u0dba \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1 ","unlink_desc":"Unlink","link_desc":"\u0dc3\u0db8\u0dca\u0db6\u0db1\u0dca\u0db0\u0d9a\u0dba \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1","redo_desc":"\u0db1\u0dd0\u0dc0\u0dad \u0d9a\u0dbb\u0db1\u0dc0\u0dcf (Ctrl+Y)","undo_desc":"\u0db1\u0dd2\u0dc1\u0dca\u0db4\u0dca\u200d\u0dbb\u0db7 \u0d9a\u0dbb\u0db1\u0dca\u0db1(Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"\u0d9a\u0dca\u200d\u0dbb\u0db8\u0dcf\u0db1\u0dd4\u0d9a\u0dd6\u0dbd \u0dbd\u0dd0\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","bullist_desc":"\u0d85\u0d9a\u0dca\u200d\u0dbb\u0db8\u0dcf\u0db1\u0dd4\u0d9a\u0dd6\u0dbd \u0dbd\u0dd0\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","justifyfull_desc":"\u0db4\u0dd9\u0dc5\u0da7 \u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","justifyright_desc":"\u0daf\u0d9a\u0dd4\u0dab\u0dd4 \u0db4\u0dd9\u0dc5\u0da7 \u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","justifycenter_desc":"\u0db8\u0dd0\u0daf \u0db4\u0dd9\u0dc5\u0da7 \u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","justifyleft_desc":"\u0dc0\u0db8\u0dca \u0db4\u0dd9\u0dc5\u0da7 \u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","paste_desc":"Paste (Ctrl+V)","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/si_dlg.js
new file mode 100644
index 000000000..029f5fc03
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.advanced_dlg',{"link_list":"\u0d87\u0db8\u0dd4\u0dab\u0dd4\u0db8\u0dca \u0dbd\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","link_is_external":"\u0d94\u0db6 \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dc5 URL \u0dba \u0db6\u0dcf\u0dc4\u0dd2\u0dbb \u0d87\u0db8\u0dd2\u0dab\u0dd4\u0db8\u0d9a\u0dca \u0db1\u0db8\u0dca,\u0d94\u0db6\u0da7 \u0d91\u0dba\u0da7 \u0db4\u0dca\u200d\u0dbb\u0dc0\u0dda\u0dc1 \u0dc0\u0dd3\u0db8\u0da7 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0daf??","link_is_email":"\u0d94\u0db6 \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dc5 URL \u0dba \u0dc0\u0dd2\u0daf\u0dca\u200d\u0dba\u0dd4\u0dad\u0dca \u0dad\u0dd0\u0db4\u0dd0\u0dbd \u0d9a\u0dca \u0db1\u0db8\u0dca \u0d94\u0db6\u0da7 \u0d91\u0dba\u0da7 \u0db4\u0dca\u200d\u0dbb\u0dc0\u0dda\u0dc1 \u0dc0\u0dd3\u0db8\u0da7 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0daf?","link_titlefield":"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0","link_target_blank":"\u0d87\u0db8\u0dd4\u0db1\u0dd4\u0db8 \u0dc0\u0dd9\u0db1\u0db8 \u0d9a\u0dc0\u0dd4\u0dbd\u0dd4\u0dc0\u0d9a \u0dc0\u0dd2\u0dc0\u0dd8\u0dad \u0d9a\u0dbb\u0db1\u0dca\u0db1","link_target_same":"\u0d87\u0db8\u0dd4\u0db1\u0dd4\u0db8 \u0dc0\u0dd9\u0db1\u0db8 \u0d9a\u0dc0\u0dd4\u0dbd\u0dd4\u0dc0\u0d9a \u0dc0\u0dd2\u0dc0\u0dd8\u0dad \u0d9a\u0dbb\u0db1\u0dca\u0db1","link_target":"\u0d89\u0dbd\u0d9a\u0dca\u0d9a\u0dba","link_url":"\u0d87\u0db8\u0dd4\u0db1\u0dd4\u0db8 URL","link_title":"\u0d87\u0db8\u0dd4\u0db1\u0dd4\u0db8 \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1","image_align_right":"\u0daf\u0d9a\u0dd4\u0dab\u0da7","image_align_left":"\u0dc0\u0db8\u0da7","image_align_textbottom":"\u0db4\u0dcf\u0da8\u0dba \u0db4\u0dc4\u0dc5","image_align_texttop":"\u0db4\u0dcf\u0da8\u0dba \u0d89\u0dc4\u0dc5","image_align_bottom":"\u0dba\u0da7","image_align_middle":"\u0db8\u0dd0\u0daf","image_align_top":"\u0d89\u0dc4\u0dc5","image_align_baseline":"\u0db8\u0dd6\u0dbd\u0dd2\u0d9a\u0dba","image_align":"\u0db4\u0dd9\u0dbd \u0d9c\u0dd0\u0db1\u0dca\u0dc0\u0dd4\u0db8","image_hspace":"\u0dad\u0dd2\u0dbb\u0dc3\u0dca \u0d85\u0dc0\u0d9a\u0dcf\u0dc1\u0dba","image_vspace":"\u0dc3\u0dd2\u0dbb\u0dc3\u0dca \u0d85\u0dc0\u0d9a\u0dcf\u0dc1\u0dba","image_dimensions":"\u0db8\u0dcf\u0db1","image_alt":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4\u0dba\u0dd9\u0dc4\u0dd2 \u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dbb","image_list":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4 \u0dbd\u0dd0\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","image_border":"\u0db6\u0ddd\u0da9\u0dbb\u0dba","image_src":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4\u0dba\u0dd9\u0dc4\u0dd2 URL","image_title":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4\u0dba\u0dd9\u0dc4\u0dd2 \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1","charmap_title":"\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf\u0dc0\u0db1 \u0d9c\u0dd4\u0dab\u0dcf\u0d82\u0d9c\u0dba \u0dad\u0ddd\u0dbb\u0db1\u0dca\u0db1","colorpicker_name":"\u0db1\u0dcf\u0db8\u0dba","colorpicker_color":"\u0dc0\u0dbb\u0dca\u0dab:","colorpicker_named_title":"\u0db1\u0db8\u0dd0\u0dad\u0dd2 \u0dc0\u0dbb\u0dca\u0dab","colorpicker_named_tab":"\u0db1\u0db8\u0dd0\u0dad\u0dd2","colorpicker_palette_title":"\t\u0dc0\u0dbb\u0dca\u0dab \u0d91\u0dbd\u0d9a \u0dc0\u0dbb\u0dca\u0dab","colorpicker_palette_tab":"\t\u0dc0\u0dbb\u0dca\u0dab \u0d91\u0dbd\u0d9a\u0dba","colorpicker_picker_title":"\u0dc0\u0dbb\u0dca\u0dab \u0d87\u0dc4\u0dd4\u0dc5\u0dd4\u0db8\u0dca \u0d9a\u0dd6\u0dbb","colorpicker_picker_tab":"\t\u0d87\u0dc4\u0dd4\u0dc5\u0dd4\u0db8\u0dca \u0d9a\u0dd6\u0dbb ","colorpicker_title":"\u0dc0\u0dbb\u0dca\u0dab\u0dba \u0dad\u0ddd\u0dbb\u0db1\u0dca\u0db1","code_wordwrap":"\u0dc0\u0dcf\u0d9c\u0dca \u0dc0\u0dd9\u0dbd\u0dd4\u0db8","code_title":"HTML \u0d9a\u0dda\u0dad \u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dcf\u0dbb\u0d9a\u0dba","anchor_name":"\u0d86\u0db0\u0dcf\u0dbb\u0d9a \u0db1\u0dcf\u0db8\u0dba","anchor_title":"\u0d86\u0db0\u0dcf\u0dbb\u0dba \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1","about_loaded":"Loaded plugins","about_version":"\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba","about_author":"\u0d9a\u0dad\u0dd8","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"\u0db6\u0dbd\u0db4\u0dad\u0dca\u200d\u0dbb\u0dba","about_help":"\u0d8b\u0db4\u0d9a\u0dcf\u0dbb\u0dba","about_general":"\u0dc3\u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dbb\u0dcf\u0dad\u0dca\u0db8\u0d9a\u0dc0","about_title":" TinyMCE \u0db4\u0dd2\u0dc5\u0dd2\u0db6\u0db3","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sk.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sk.js
new file mode 100644
index 000000000..5633fbf25
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.advanced',{"underline_desc":"Pod\u010diarknut\u00e9 (Ctrl+U)","italic_desc":"Kurz\u00edva (Ctrl+I)","bold_desc":"Tu\u010dn\u00e9 (Ctrl+B)",dd:"Popis defin\u00edcie",dt:"Term\u00edn defin\u00edcie",samp:"Uk\u00e1\u017eka k\u00f3du",code:"K\u00f3d",blockquote:"Blokov\u00e1 cit\u00e1cia",h6:"Nadpis 6",h5:"Nadpis 5",h4:"Nadpis 4",h3:"Nadpis 3",h2:"Nadpis 2",h1:"Nadpis 1",pre:"Predform\u00e1tovan\u00e9",address:"Adresa",div:"Oddiel",paragraph:"Odstavec",block:"Form\u00e1t",fontdefault:"P\u00edsmo","font_size":"Ve\u013ekos\u0165 p\u00edsma","style_select":"\u0160t\u00fdly","more_colors":"\u010eal\u0161ie farby","toolbar_focus":"Prechod na panel n\u00e1strojov - Alt Q, prechod do editora - Alt Z, prechod na cestu k objektom - Alt X",newdocument:"Ste si naozaj ist\u00ed, \u017ee chcete odstr\u00e1ni\u0165 v\u0161etok obsah?",path:"Cesta","clipboard_msg":"Funkcie kop\u00edrova\u0165/vystrihn\u00fa\u0165/vlo\u017ei\u0165 nie s\u00fa prehliada\u010dom Mozilla Firefox podporovan\u00e9. Chcete viac inform\u00e1ci\u00ed o tomto probl\u00e9me?","blockquote_desc":"Blokov\u00e1 cit\u00e1cia","help_desc":"Pomocn\u00edk","newdocument_desc":"Nov\u00fd dokument","image_props_desc":"Vlastnosti obr\u00e1zka","paste_desc":"Vlo\u017ei\u0165","copy_desc":"Kop\u00edrova\u0165","cut_desc":"Vystrihn\u00fa\u0165","anchor_desc":"Vlo\u017ei\u0165/upravi\u0165 z\u00e1lo\u017eku (kotvu)","visualaid_desc":"Zobrazi\u0165 pomocn\u00e9 linky/skryt\u00e9 prvky","charmap_desc":"Vlo\u017ei\u0165 \u0161peci\u00e1lny znak","backcolor_desc":"Farba zv\u00fdraznenia textu","forecolor_desc":"Farba p\u00edsma","custom1_desc":"\u013dubovoln\u00fd popisok","removeformat_desc":"Odstr\u00e1ni\u0165 form\u00e1tovanie","hr_desc":"Vlo\u017ei\u0165 vodorovn\u00fd odde\u013eova\u010d","sup_desc":"Horn\u00fd index","sub_desc":"Doln\u00fd index","code_desc":"Upravi\u0165 HTML zdroj","cleanup_desc":"Vy\u010disti\u0165 k\u00f3d","image_desc":"Vlo\u017ei\u0165/upravi\u0165 obr\u00e1zok","unlink_desc":"Odobra\u0165 odkaz","link_desc":"Vlo\u017ei\u0165/upravi\u0165 odkaz","redo_desc":"Znovu (Ctrl+Y)","undo_desc":"Sp\u00e4\u0165 (Ctrl+Z)","indent_desc":"Zv\u00e4\u010d\u0161i\u0165 odsadenie","outdent_desc":"Zmen\u0161i\u0165 odsadenie","numlist_desc":"\u010c\u00edslovan\u00fd zoznam","bullist_desc":"Zoznam s odr\u00e1\u017ekami","justifyfull_desc":"Zarovna\u0165 do bloku","justifyright_desc":"Zarovna\u0165 doprava","justifycenter_desc":"Zarovna\u0165 na stred","justifyleft_desc":"Zarovna\u0165 do\u013eava","striketrough_desc":"Pre\u010diarknut\u00e9","help_shortcut":"Stla\u010dte ALT F10 pre panel n\u00e1strojov. Stla\u010dte ALT 0 pre pomocn\u00edka.","rich_text_area":"Oblas\u0165 s form\u00e1tovan\u00fdm textom","shortcuts_desc":"Pomocn\u00edk",toolbar:"Panel n\u00e1strojov","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sk_dlg.js
new file mode 100644
index 000000000..3af287aa5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.advanced_dlg',{"link_list":"Zoznam odkazov","link_is_external":"Zadan\u00e9 URL vyzer\u00e1 ako extern\u00fd odkaz, chcete doplni\u0165 povinn\u00fd prefix http://?","link_is_email":"Zadan\u00e9 URL vyzer\u00e1 ako e-mailov\u00e1 adresa, chcete doplni\u0165 povinn\u00fd prefix mailto:?","link_titlefield":"Titulok","link_target_blank":"Otvori\u0165 odkaz v novom okne","link_target_same":"Otvori\u0165 odkaz v rovnakom okne","link_target":"Cie\u013e","link_url":"URL odkazu","link_title":"Vlo\u017ei\u0165/upravi\u0165 odkaz","image_align_right":"Vpravo","image_align_left":"V\u013eavo","image_align_textbottom":"So spodkom riadku","image_align_texttop":"S vrcholom riadku","image_align_bottom":"Dole","image_align_middle":"Na stred riadku","image_align_top":"Hore","image_align_baseline":"Na z\u00e1klad\u0148u","image_align":"Zarovnanie","image_hspace":"Horizont\u00e1lne odsadenie","image_vspace":"Vertik\u00e1lne odsadenie","image_dimensions":"Rozmery","image_alt":"Popis obr\u00e1zka","image_list":"Zoznam obr\u00e1zkov","image_border":"Or\u00e1movanie","image_src":"URL obr\u00e1zka","image_title":"Vlo\u017ei\u0165/upravi\u0165 obr\u00e1zok","charmap_title":"Vlo\u017ei\u0165 \u0161peci\u00e1lny znak","colorpicker_name":"N\u00e1zov:","colorpicker_color":"Vybrat\u00e1 farba:","colorpicker_named_title":"Pomenovan\u00e9 farby","colorpicker_named_tab":"N\u00e1zvy","colorpicker_palette_title":"Paleta farieb","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Kvapkadlo","colorpicker_picker_tab":"Kvapkadlo","colorpicker_title":"V\u00fdber farby","code_wordwrap":"Zalamovanie riadkov","code_title":"Editor HTML","anchor_name":"N\u00e1zov z\u00e1lo\u017eky","anchor_title":"Vlo\u017ei\u0165/upravi\u0165 z\u00e1lo\u017eku (kotvu)","about_loaded":"Na\u010d\u00edtan\u00e9 z\u00e1suvn\u00e9 moduly","about_version":"Verzia","about_author":"Autor","about_plugin":"Z\u00e1suvn\u00fd modul","about_plugins":"Z\u00e1suvn\u00e9 moduly","about_license":"Licencia","about_help":"Pomocn\u00edk","about_general":"O programe","about_title":"O TinyMCE","charmap_usage":"Pre navig\u00e1ciu pou\u017eite \u0161\u00edpky v\u013eavo a vpravo.","anchor_invalid":"Zadajte, pros\u00edm, platn\u00fd n\u00e1zov z\u00e1lo\u017eky (kotvy).","accessibility_help":"Dostupnos\u0165 n\u00e1povedy","accessibility_usage_title":"V\u0161eobecn\u00e9 pou\u017eitie","invalid_color_value":"Neplatn\u00fd k\u00f3d farby"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sl.js
new file mode 100644
index 000000000..0f9901ef9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.advanced',{"underline_desc":"Pod\u010drtano (Ctrl+U)","italic_desc":"Po\u0161evno (Ctrl+I)","bold_desc":"Krepko (Ctrl+B)",dd:"definicija - opis",dt:"definicija - izraz",samp:"kodni zgled",code:"koda",blockquote:"citat",h6:"naslov 6",h5:"naslov 5",h4:"naslov 4",h3:"naslov 3",h2:"naslov 2",h1:"naslov 1",pre:"predoblikovano",address:"naslov",div:"blok",paragraph:"odstavek",block:"oblika",fontdefault:"Dru\u017eina pisave","font_size":"Velikost pisave","style_select":"Izberite slog","more_colors":"Ve\u010d barv","toolbar_focus":"Preskok na orodjarno - Alt+Q, Preskok v urejevalnik - Alt-Z, Preskok na pot elementa - Alt-X",newdocument:"Ste prepri\u010dani, da \u017eelite odstraniti vsebino?",path:"Pot","clipboard_msg":"Delo z odlo\u017ei\u0161\u010dem ni mogo\u010de v tem brskalniku. Lahko uporabljate kombinacije tipk Ctrl+X, Ctrl+C, Ctrl+V.\n\u017delite ve\u010d informacij o tem?","blockquote_desc":"Citat","help_desc":"Pomo\u010d","newdocument_desc":"Nov dokument","image_props_desc":"Lastnosti slike","paste_desc":"Prilepi","copy_desc":"Kopiraj","cut_desc":"Izre\u017ei","anchor_desc":"Vstavi/uredi sidro","visualaid_desc":"Preklop prikaza vodil","charmap_desc":"Vstavi posebni znak","backcolor_desc":"Izberite barvo ozadja","forecolor_desc":"Izberite barvo pisave","custom1_desc":"Opis tule","removeformat_desc":"Odstrani oblikovanje","hr_desc":"Vstavi \u010drto","sup_desc":"Nadpisano","sub_desc":"Podpisano","code_desc":"Uredi kodo HTML","cleanup_desc":"Pre\u010disti kodo","image_desc":"Vstavi/uredi sliko","unlink_desc":"Odstrani povezavo","link_desc":"Vstavi/uredi povezavo","redo_desc":"Uveljavi (Ctrl+Y)","undo_desc":"Razveljavi (Ctrl+Z)","indent_desc":"Odmakni ven","outdent_desc":"Zamakni","numlist_desc":"Na\u0161tevanje","bullist_desc":"Alineje","justifyfull_desc":"Polna poravnava","justifyright_desc":"Poravnava desno","justifycenter_desc":"Poravnava na sredino","justifyleft_desc":"Poravnava levo","striketrough_desc":"Pre\u010drtano","help_shortcut":"Pritisnite ALT-F10 za orodno vrstico, ALT-0 za pomo\u010d","rich_text_area":"Polje z obogatenim besedilom","shortcuts_desc":"Pomo\u010d za dostopnost",toolbar:"Orodna vrstica","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sl_dlg.js
new file mode 100644
index 000000000..dccb6213f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.advanced_dlg',{"link_list":"Seznam povezav","link_is_external":"Vneseni naslov verjetno predstavlja zunanjo povezavo, \u017eelite da dodam zahtevano predpono \\\'http://\\\'?","link_is_email":"Vneseni naslov verjetno prestavlja e-naslov, \u017eelite da dodam zahtevano predpono \\\'mailto:\\\'?","link_titlefield":"Naslov","link_target_blank":"odpri povezavo v novem oknu","link_target_same":"odpri povezavo v istem oknu","link_target":"Ime cilja","link_url":"Naslov URL","link_title":"Vstavi/uredi povezavo","image_align_right":"desno, plavajo\u010de","image_align_left":"levo, plavajo\u010de","image_align_textbottom":"dno besedila","image_align_texttop":"vrh besedila","image_align_bottom":"spodaj","image_align_middle":"sredina","image_align_top":"zgoraj","image_align_baseline":"osnovna linija","image_align":"Poravnava","image_hspace":"Prostor le/de","image_vspace":"Prostor zg/sp","image_dimensions":"Dimenzije","image_alt":"Opis slike","image_list":"Seznam slik","image_border":"Obroba","image_src":"Naslov URL slike","image_title":"Vstavi/uredi sliko","charmap_title":"Izberite posebni znak","colorpicker_name":"Ime:","colorpicker_color":"Barva:","colorpicker_named_title":"Poimenovane barve","colorpicker_named_tab":"Poimenovane","colorpicker_palette_title":"Barve palete","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Izbor barve","colorpicker_picker_tab":"Izbor","colorpicker_title":"Izberite barvo","code_wordwrap":"Prelomi vrstice","code_title":"Urejevalnik kode HTML","anchor_name":"Ime sidra","anchor_title":"Vstavi/uredi sidro","about_loaded":"Nalo\u017eeni vsadki","about_version":"Verzija","about_author":"Avtor","about_plugin":"Vsadek","about_plugins":"Vsadki","about_license":"Licenca","about_help":"Pomo\u010d","about_general":"Vizitka","about_title":"O TinyMCE","charmap_usage":"Za navigacijo uporabite tipki levo in desno.","anchor_invalid":"Prosimo vnesite veljavno ime sidra.","accessibility_help":"Pomo\u010d za dostopnost","accessibility_usage_title":"Splo\u0161na raba"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sq.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sq.js
new file mode 100644
index 000000000..18c265c87
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sq.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.advanced',{"underline_desc":"I N\u00ebnvizuar (Ctrl+U)","italic_desc":"I Pjerr\u00ebt (Ctrl+I)","bold_desc":"I Trash\u00eb (Ctrl+B)",dd:"P\u00ebrshkrimi i p\u00ebrcaktimit",dt:"Terma e p\u00ebrcaktimit ",samp:"Shembull kodi",code:"Kod",blockquote:"Bllok",h6:"Kok\u00eb 6",h5:"Kok\u00eb 5",h4:"Kok\u00eb 4",h3:"Kok\u00eb 3",h2:"Kok\u00eb 2",h1:"Kok\u00eb 1",pre:"Para formatuar",address:"Adres\u00eb",div:"Div",paragraph:"Paragraf",block:"Formati",fontdefault:"Familja e tekstit","font_size":"Madh\u00ebsia e tekstit","style_select":"Stilet","more_colors":"M\u00eb shum\u00eb ngjyra","toolbar_focus":"Shko tek butonat - Alt+Q, Shko tek editori - Alt+Z, Shko tek rruga e elementit - Alt+X",newdocument:"Jeni t\u00eb sigurt q\u00eb doni t\'a fshini p\u00ebrmbajtjen?",path:"Rruga","clipboard_msg":"Kopja/Prerja/Ngjitja nuk suportohen n\u00eb Mozilla dhe Firefox.\nD\u00ebshironi m\u00eb shum\u00eb informacione p\u00ebr k\u00ebt\u00eb \u00e7\u00ebshtje?","blockquote_desc":"Bllok","help_desc":"Ndihm\u00eb","newdocument_desc":"Dokument i Ri","image_props_desc":"Opsionet e fotos","paste_desc":"Ngjit","copy_desc":"Kopjo","cut_desc":"Prit","anchor_desc":"Fut/edito lidhje","visualaid_desc":"Shfaq/Fshih vijat ndihm\u00ebse dhe element\u00ebt e paduksh\u00ebm","charmap_desc":"Fut karakter t\u00eb personalizuar","backcolor_desc":"Zgjidh ngjyr\u00ebn e fush\u00ebs","forecolor_desc":"Zgjidh ngjyr\u00ebn e tekstit","custom1_desc":"P\u00ebshkrimi i personalizuar k\u00ebtu","removeformat_desc":"Fshi formatimin","hr_desc":"Fut linj\u00eb horizontale","sup_desc":"Mbi shkrim","sub_desc":"N\u00ebn shkrim","code_desc":"Edito kodin HTML","cleanup_desc":"Pastro kodin","image_desc":"Fut/edito foto","unlink_desc":"Hiq lidhje","link_desc":"Fut/edito lidhje","redo_desc":"Rib\u00ebj (Ctrl+Y)","undo_desc":"\u00c7b\u00ebj (Ctrl+Z)","indent_desc":"Vendos kryerradh\u00eb","outdent_desc":"Hiq kryerradh\u00eb","numlist_desc":"List\u00eb e rregullt","bullist_desc":"List\u00eb e parregullt","justifyfull_desc":"Drejtim i plot\u00eb","justifyright_desc":"Drejtimi djathtas","justifycenter_desc":"Drejtimi qend\u00ebr","justifyleft_desc":"Drejtimi majtas","striketrough_desc":"Vij\u00eb n\u00eb mes","help_shortcut":"Shtypni ALT-F10 p\u00ebr panelin e veglave. Shtypni ALT-0 p\u00ebr ndihm\u00eb.","rich_text_area":"Zona e Pasur","shortcuts_desc":"Ndihm\u00eb p\u00ebr Aksesueshm\u00ebrin\u00eb",toolbar:"Paneli i Veglave","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sq_dlg.js
new file mode 100644
index 000000000..de456f87e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.advanced_dlg',{"link_list":"Lista e lidhjeve","link_is_external":"Lidhja q\u00eb keni futur duket si lidhje e jasht\u00ebme. Doni t\u00eb shtoni prefiksin http://?","link_is_email":"Lidhja q\u00eb keni futur duket si adres\u00eb emaili. Doni t\u00eb shtoni prefiksin mailto:?","link_titlefield":"Titulli","link_target_blank":"Hape lidhjen n\u00eb dritare t\u00eb re","link_target_same":"Hape lidhjen n\u00eb t\u00eb nj\u00ebjt\u00ebn dritare","link_target":"Sh\u00ebnjestra","link_url":"URL e lidhjes","link_title":"Fut/edito lidhje","image_align_right":"Djathtas","image_align_left":"Majtas","image_align_textbottom":"N\u00eb fund t\u00eb tekstit","image_align_texttop":"N\u00eb krye t\u00eb tekstit","image_align_bottom":"Fund","image_align_middle":"Mes","image_align_top":"Krye","image_align_baseline":"Vij\u00eb fundore","image_align":"Drejtimi","image_hspace":"Hap\u00ebsira Horizontale","image_vspace":"Hap\u00ebsira Vertikale","image_dimensions":"P\u00ebrmasat","image_alt":"P\u00ebrshkrimi i fotos","image_list":"Lista e fotove","image_border":"Korniza","image_src":"URL e fotos","image_title":"Fut/edio foto","charmap_title":"Zgjidh karakter t\u00eb personalizuar","colorpicker_name":"Emri:","colorpicker_color":"Ngjyra:","colorpicker_named_title":"Ngjyrat e em\u00ebruara","colorpicker_named_tab":"Em\u00ebruar","colorpicker_palette_title":"Ngjyrat e Libraris\u00eb","colorpicker_palette_tab":"Librari","colorpicker_picker_title":"Zgjedh\u00ebsi i ngjyr\u00ebs","colorpicker_picker_tab":"Zgjedh\u00ebsi","colorpicker_title":"Zgjidh nj\u00eb ngjyr\u00eb","code_wordwrap":"Word wrap","code_title":"Edituesi i kodit HTML","anchor_name":"Emri i lidhjes","anchor_title":"Fut/edito lidhje","about_loaded":"Shtesa t\u00eb ngarkuara","about_version":"Versioni","about_author":"Autori","about_plugin":"Shtes\u00eb","about_plugins":"Shtesa","about_license":"Li\u00e7enca","about_help":"Ndihm\u00eb","about_general":"Rreth","about_title":"Rreth TinyMCE","charmap_usage":"P\u00ebrdorni butonat majtas dhe djatthas p\u00ebr navigim.","anchor_invalid":"P\u00ebrcaktoni nj\u00eb em\u00ebr t\u00eb sakt\u00eb lidhjeje.","accessibility_help":"Ndihm\u00eb p\u00ebr Aksesueshm\u00ebrin\u00eb.","accessibility_usage_title":"P\u00ebrdorim i P\u00ebrgjithsh\u00ebm"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sr.js
new file mode 100644
index 000000000..1042caa8a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.advanced',{"underline_desc":"Podvu\u010deno (Ctrl U)","italic_desc":"Isko\u0161eno (Ctrl I)","bold_desc":"Podebljano (Ctrl B)",dd:"Opis definicije",dt:"Pojam definicija",samp:"Uzorak koda",code:"Kod",blockquote:"Citat",h6:"Naslov 6",h5:"Naslov 5",h4:"Naslov 4",h3:"Naslov 3",h2:"Naslov 2",h1:"Naslov 1",pre:"Unapred formatirano",address:"Adresa",div:"Div",paragraph:"Pasus",block:"Formatiranje",fontdefault:"Pismo","font_size":"Veli\u010dina slova","style_select":"Stilovi","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"Jo\u0161 boja","toolbar_focus":"Pre\u0111i na traku sa alatkama - Alt Q, Pre\u0111i na editor - Alt-Z, Pre\u0111i na putanju elementa - Alt-X",newdocument:"Da li ste sigurni da \u017eelite da obri\u0161ete sav sadr\u017eaj?",path:"Putanja","clipboard_msg":"Kopiraj/Iseci/Zalepi nisu dostupni u Mozilla i Firefox web \u010dita\u010dima. \u017delite li vi\u0161e informacija o ovom problemu?","blockquote_desc":"Du\u017ei citat","help_desc":"Pomo\u0107","newdocument_desc":"Nov dokument","image_props_desc":"Osobine slike","paste_desc":"Zalepi","copy_desc":"Kopiraj","cut_desc":"Iseci","anchor_desc":"Ubaci/Uredi sidro","visualaid_desc":"Uklju\u010di/Isklju\u010di linije vodilje/nevidljive elemente","charmap_desc":"Umetni simbol","backcolor_desc":"Izaberi boju pozadine","forecolor_desc":"Izaberi boju teksta","custom1_desc":"Sopstveni opis","removeformat_desc":"Ukloni formatiranje","hr_desc":"Umetni horizontalnu liniju","sup_desc":"Eksponent","sub_desc":"Indeks","code_desc":"Uredi HTML","cleanup_desc":"O\u010disti kod","image_desc":"Umetni/Uredi sliku","unlink_desc":"Ukloni link","link_desc":"Umetni/Uredi link","redo_desc":"Poni\u0161ti opoziv (Ctrl Y)","undo_desc":"Opozovi (Ctrl+Z)","indent_desc":"Uvla\u010denje","outdent_desc":"Izvla\u010denje","numlist_desc":"Ure\u0111eno nabrajanje","bullist_desc":"Neure\u0111eno nabrajanje","justifyfull_desc":"Obostrano poravnanje","justifyright_desc":"Desno poravnanje","justifycenter_desc":"Poravnanje po sredini","justifyleft_desc":"Levo poravnanje","striketrough_desc":"Precrtano","help_shortcut":"Pritisnite ALT-F10 za traku sa alatkama. Pritisnite ALT-0 za pomo\u0107.","rich_text_area":"Rich Text Area","shortcuts_desc":"Pomo\u0107 u vezi dostupnosti",toolbar:"Traka sa alatkama"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sr_dlg.js
new file mode 100644
index 000000000..aca90a3e7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.advanced_dlg',{"link_list":"Link (sa liste)","link_is_external":"URL koji ste uneli izgleda kao spolja\u0161nji link, da li \u017eelite da dodate neophodni http:// prefiks?","link_is_email":"URL koji ste uneli izgleda kao e-mail adresa, da li \u017eelite da dodate neophodni mailto: prefiks?","link_titlefield":"Naslov","link_target_blank":"Otvori link u novom prozoru","link_target_same":"Otvori link u istom prozoru","link_target":"Meta","link_url":"URL linka","link_title":"Umetni/Uredi link","image_align_right":"Desno","image_align_left":"Levo","image_align_textbottom":"Dno teksta","image_align_texttop":"Vrh teksta","image_align_bottom":"Dole","image_align_middle":"Sredina","image_align_top":"Gore","image_align_baseline":"Osnovna linija","image_align":"Poravnanje","image_hspace":"Horizontalni razmak","image_vspace":"Vertikalni razmak","image_dimensions":"Dimenzije","image_alt":"Opis slike","image_list":"Slika (sa liste)","image_border":"Ivice","image_src":"URL slike","image_title":"Umetni/Uredi sliku","charmap_title":"Odaberi simbol","colorpicker_name":"Naziv:","colorpicker_color":"Boja:","colorpicker_named_title":"Boje sa nazivom","colorpicker_named_tab":"Po nazivu","colorpicker_palette_title":"Paleta boja","colorpicker_palette_tab":"Iz palete","colorpicker_picker_title":"Pipeta za boje","colorpicker_picker_tab":"Pipetom","colorpicker_title":"Izaberite boju","code_wordwrap":"Omotaj tekst","code_title":"HTML editor","anchor_name":"Naziv sidra","anchor_title":"Umetni/Uredi sidro","about_loaded":"Aktivni dodaci","about_version":"Verzija","about_author":"Autor","about_plugin":"Dodatak","about_plugins":"Dodaci","about_license":"Licenca","about_help":"Pomo\u0107","about_general":"O programu","about_title":"O TinyMCE","anchor_invalid":"Navedite valjani naziv sidra","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sv.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sv.js
new file mode 100644
index 000000000..9a20833ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.advanced',{"underline_desc":"Understruken (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)",dd:"Definitionsbeskrivning",dt:"Definitionsterm",samp:"Kodexempel",code:"Kodblock",blockquote:"Blockcitat",h6:"Rubrik 6",h5:"Rubrik 5",h4:"Rubrik 4",h3:"Rubrik 3",h2:"Rubrik 2",h1:"Rubrik 1",pre:"F\u00f6rformaterad",address:"Adress",div:"Div",paragraph:"Stycke",block:"Format",fontdefault:"Teckensnitt","font_size":"Teckenstorlek","style_select":"Stilar","more_colors":"Mer f\u00e4rger","toolbar_focus":"Hoppa till verktygsf\u00e4ltet - Alt+Q, Hoppa till redigeraren - Alt-Z, Hoppa till elementlistan - Alt-X",newdocument:"\u00c4r du s\u00e4ker p\u00e5 att du vill radera allt inneh\u00e5ll?",path:"Element","clipboard_msg":"Kopiera/klipp ut/klistra in \u00e4r inte tillg\u00e4ngligt i din webbl\u00e4sare.\nVill du veta mer om detta?","blockquote_desc":"Blockcitat","help_desc":"Hj\u00e4lp","newdocument_desc":"Nytt dokument","image_props_desc":"Bildinst\u00e4llningar","paste_desc":"Klistra in","copy_desc":"Kopiera","cut_desc":"Klipp ut","anchor_desc":"Infoga/redigera bokm\u00e4rke","visualaid_desc":"Visa/d\u00f6lj visuella hj\u00e4lpmedel","charmap_desc":"Infoga specialtecken","backcolor_desc":"V\u00e4lj bakgrundsf\u00e4rg","forecolor_desc":"V\u00e4lj textf\u00e4rg","custom1_desc":"Din beskrivning h\u00e4r","removeformat_desc":"Ta bort formatering","hr_desc":"Infoga horisontell skiljelinje","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Redigera HTML k\u00e4llkoden","cleanup_desc":"St\u00e4da upp i k\u00e4llkoden","image_desc":"Infoga/redigera bild","unlink_desc":"Ta bort l\u00e4nk","link_desc":"Infoga/redigera l\u00e4nk","redo_desc":"G\u00f6r om (Ctrl+Y)","undo_desc":"\u00c5ngra (Ctrl+Z)","indent_desc":"Indrag","outdent_desc":"Drag tillbaka","numlist_desc":"Nummerlista","bullist_desc":"Punktlista","justifyfull_desc":"Justera","justifyright_desc":"H\u00f6gerst\u00e4lld","justifycenter_desc":"Centrera","justifyleft_desc":"V\u00e4nsterst\u00e4lld","striketrough_desc":"Genomstruken","help_shortcut":"Alt-F10 f\u00f6r verktygsf\u00e4lt. Alt-0 f\u00f6r hj\u00e4lp.","rich_text_area":"Redigeringsarea","shortcuts_desc":"Hj\u00e4lp f\u00f6r funktionshindrade",toolbar:"Verktygsf\u00e4lt","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sv_dlg.js
new file mode 100644
index 000000000..f2da940ed
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.advanced_dlg',{"link_list":"L\u00e4nklista","link_is_external":"L\u00e4nken du angav verkar vara en extern adress. Vill du infoga http:// prefixet p\u00e5 l\u00e4nken?","link_is_email":"L\u00e4nken du angav verkar vara en e-post adress. Vill du infoga mailto: prefixet p\u00e5 l\u00e4nken?","link_titlefield":"Titel","link_target_blank":"\u00d6\u0096ppna l\u00e4nken i ett nytt f\u00f6nster","link_target_same":"\u00d6\u0096ppna l\u00e4nken i samma f\u00f6nster","link_target":"M\u00e5l","link_url":"L\u00e4nkens URL","link_title":"Infoga/redigera l\u00e4nk","image_align_right":"H\u00f6ger","image_align_left":"V\u00e4nster","image_align_textbottom":"Botten av texten","image_align_texttop":"Toppen av texten","image_align_bottom":"Botten","image_align_middle":"Mitten","image_align_top":"Toppen","image_align_baseline":"Baslinje","image_align":"Justering","image_hspace":"Horisontalrymd","image_vspace":"Vertikalrymd","image_dimensions":"Dimensioner","image_alt":"Bildens beskrivning","image_list":"Bildlista","image_border":"Ram","image_src":"Bildens URL","image_title":"Infoga/redigera bild","charmap_title":"V\u00e4lj ett specialtecken","colorpicker_name":"Namn:","colorpicker_color":"F\u00e4rg:","colorpicker_named_title":"Namngivna f\u00e4rger","colorpicker_named_tab":"Namngivna","colorpicker_palette_title":"Palettf\u00e4rger","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"F\u00e4rgv\u00e4ljare","colorpicker_picker_tab":"V\u00e4ljare","colorpicker_title":"V\u00e4lj en f\u00e4rg","code_wordwrap":"Bryt ord","code_title":"HTML k\u00e4llkodsl\u00e4ge","anchor_name":"Namn","anchor_title":"Infoga/redigera bokm\u00e4rke","about_loaded":"Laddade plug-ins","about_version":"Version","about_author":"Utvecklare","about_plugin":"Om plug-in","about_plugins":"Om plug-in","about_license":"Licens","about_help":"Hj\u00e4lp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Anv\u00e4nd v\u00e4nster och h\u00f6ger pil f\u00f6r att navigera","anchor_invalid":"Skiv ett korrekt ankarnamn.","accessibility_help":"Tillg\u00e4nglighets hj\u00e4lp","accessibility_usage_title":"Generellanv\u00e4ndning","invalid_color_value":"Felaktigt f\u00e4rgv\u00e4rde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sy.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sy.js
new file mode 100644
index 000000000..7c1120f27
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition Description",dt:"Definition Term ",samp:"Code Sample",code:"Code",blockquote:"Block Quote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"DIV",paragraph:"Paragraph",block:"Format",fontdefault:"Font Family","font_size":"Font Size","style_select":"Styles","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Block Quote","help_desc":"Help","newdocument_desc":"New Document","image_props_desc":"Image Properties","paste_desc":"Paste (Ctrl+V)","copy_desc":"Copy (Ctrl+C)","cut_desc":"Cut (Ctrl+X)","anchor_desc":"Insert/Edit Anchor","visualaid_desc":"show/Hide Guidelines/Invisible Elements","charmap_desc":"Insert Special Character","backcolor_desc":"Select Background Color","forecolor_desc":"Select Text Color","custom1_desc":"Your Custom Description Here","removeformat_desc":"Remove Formatting","hr_desc":"Insert Horizontal Line","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup Messy Code","image_desc":"Insert/Edit Image","unlink_desc":"Unlink","link_desc":"Insert/Edit Link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Increase Indent","outdent_desc":"Decrease Indent","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","justifyfull_desc":"Align Full","justifyright_desc":"Align Right","justifycenter_desc":"Align Center","justifyleft_desc":"Align Left","striketrough_desc":"Strikethrough","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sy_dlg.js
new file mode 100644
index 000000000..088b0dc1b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.advanced_dlg',{"link_list":"Link List","link_is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open Link in a New Window","link_target_same":"Open Link in the Same Window","link_target":"Target","link_url":"Link URL","link_title":"Insert/Edit Link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text Bottom","image_align_texttop":"Text Top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal Space","image_vspace":"Vertical Space","image_dimensions":"Dimensions","image_alt":"Image Description","image_list":"Image List","image_border":"Border","image_src":"Image URL","image_title":"Insert/Edit Image","charmap_title":"Select Special Character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named Colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette Colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color Picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a Color","code_wordwrap":"Word Wrap","code_title":"HTML Source Editor","anchor_name":"Anchor Name","anchor_title":"Insert/Edit Anchor","about_loaded":"Loaded Plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ta.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ta.js
new file mode 100644
index 000000000..c72f17991
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ta.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ta_dlg.js
new file mode 100644
index 000000000..f7646ae1a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/te.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/te.js
new file mode 100644
index 000000000..109de59d1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/te.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/te_dlg.js
new file mode 100644
index 000000000..b9a71efa3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/th.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/th.js
new file mode 100644
index 000000000..144f0a2df
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/th.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.advanced',{"underline_desc":"\u0e15\u0e31\u0e27\u0e02\u0e35\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e43\u0e15\u0e49(Ctrl+U)","italic_desc":"\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e35\u0e22\u0e07 (Ctrl+I)","bold_desc":"\u0e15\u0e31\u0e27\u0e2b\u0e19\u0e32 (Ctrl+B)",dd:"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e04\u0e33\u0e19\u0e34\u0e22\u0e32\u0e21",dt:"\u0e04\u0e33\u0e19\u0e34\u0e22\u0e32\u0e21",samp:"\u0e42\u0e04\u0e49\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07",code:"\u0e42\u0e04\u0e49\u0e14",blockquote:"\u0e2d\u0e49\u0e32\u0e07\u0e2d\u0e34\u0e07",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e1e\u0e37\u0e49\u0e19\u0e10\u0e32\u0e19",address:"\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48",div:"Div",paragraph:"\u0e22\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32",block:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",fontdefault:"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","font_size":"\u0e02\u0e19\u0e32\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","style_select":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","more_colors":"\u0e2a\u0e35\u0e2d\u0e37\u0e48\u0e19\u0e46","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e25\u0e49\u0e32\u0e07\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14?",path:"\u0e1e\u0e32\u0e17","clipboard_msg":"\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01 / \u0e15\u0e31\u0e14 / \u0e27\u0e32\u0e07\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e21\u0e35\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e43\u0e19 Mozilla \u0e41\u0e25\u0e30 Firefox.\nDo \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e19\u0e35\u0e49\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?","blockquote_desc":"\u0e2d\u0e49\u0e32\u0e07\u0e16\u0e36\u0e07","help_desc":"\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d","newdocument_desc":"\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23\u0e43\u0e2b\u0e21\u0e48","image_props_desc":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e23\u0e39\u0e1b","paste_desc":"\u0e27\u0e32\u0e07","copy_desc":"\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01","cut_desc":"\u0e15\u0e31\u0e14","anchor_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","visualaid_desc":"\u0e2a\u0e25\u0e31\u0e1a guidelines/\u0e0b\u0e48\u0e2d\u0e19 elements","charmap_desc":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","backcolor_desc":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07","forecolor_desc":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","custom1_desc":"\u0e43\u0e2a\u0e48\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e40\u0e2d\u0e07\u0e44\u0e14\u0e49\u0e17\u0e35\u0e48\u0e19\u0e35\u0e48","removeformat_desc":"\u0e25\u0e49\u0e32\u0e07\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","hr_desc":"\u0e43\u0e2a\u0e48\u0e40\u0e2a\u0e49\u0e19\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14","sup_desc":"\u0e15\u0e31\u0e27\u0e22\u0e01","sub_desc":"\u0e15\u0e31\u0e27\u0e2b\u0e49\u0e2d\u0e22","code_desc":"\u0e41\u0e01\u0e49\u0e44\u0e02 HTML","cleanup_desc":"\u0e25\u0e49\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14","image_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e23\u0e39\u0e1b","unlink_desc":"\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","link_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","redo_desc":"\u0e22\u0e49\u0e2d\u0e19\u0e01\u0e25\u0e31\u0e1a (Ctrl+Y)","undo_desc":"\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01 (Ctrl+Z)","indent_desc":"\u0e40\u0e22\u0e37\u0e49\u0e2d\u0e07\u0e02\u0e27\u0e32","outdent_desc":"\u0e25\u0e14\u0e01\u0e32\u0e23\u0e40\u0e22\u0e37\u0e49\u0e2d\u0e07","numlist_desc":"\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02","bullist_desc":"\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23","justifyfull_desc":"\u0e08\u0e31\u0e14\u0e40\u0e15\u0e47\u0e21\u0e2b\u0e19\u0e49\u0e32","justifyright_desc":"\u0e08\u0e31\u0e14\u0e02\u0e27\u0e32","justifycenter_desc":"\u0e08\u0e31\u0e14\u0e01\u0e25\u0e32\u0e07","justifyleft_desc":"\u0e08\u0e31\u0e14\u0e0b\u0e49\u0e32\u0e22","striketrough_desc":"\u0e02\u0e35\u0e14\u0e06\u0e48\u0e32","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/th_dlg.js
new file mode 100644
index 000000000..81540943f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.advanced_dlg',{"link_list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","link_is_external":"URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e1b\u0e49\u0e2d\u0e19\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01\u0e25\u0e34\u0e07\u0e04\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21 http:// \u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48 ?","link_is_email":"URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e1b\u0e49\u0e2d\u0e19\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e08\u0e30\u0e21\u0e35\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e2d\u0e22\u0e39\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21 mailto: \u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48 ?","link_titlefield":"\u0e0a\u0e37\u0e48\u0e2d","link_target_blank":"\u0e40\u0e1b\u0e34\u0e14\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c\u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48","link_target_same":"\u0e40\u0e1b\u0e34\u0e14\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c\u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19","link_target":"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22","link_url":"\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c URL","link_title":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","image_align_right":"\u0e02\u0e27\u0e32","image_align_left":"\u0e0b\u0e49\u0e32\u0e22","image_align_textbottom":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e2d\u0e22\u0e39\u0e48\u0e25\u0e48\u0e32\u0e07","image_align_texttop":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e19","image_align_bottom":"\u0e25\u0e48\u0e32\u0e07","image_align_middle":"\u0e01\u0e25\u0e32\u0e07","image_align_top":"\u0e1a\u0e19","image_align_baseline":"\u0e40\u0e2a\u0e49\u0e19\u0e1e\u0e37\u0e49\u0e19","image_align":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e08\u0e31\u0e14\u0e27\u0e32\u0e07","image_hspace":"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19","image_vspace":"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07","image_dimensions":"\u0e02\u0e19\u0e32\u0e14","image_alt":"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e2d\u0e35\u0e22\u0e14\u0e23\u0e39\u0e1b","image_list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e23\u0e39\u0e1b","image_border":"\u0e01\u0e23\u0e2d\u0e1a","image_src":"URL \u0e23\u0e39\u0e1b","image_title":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e23\u0e39\u0e1b","charmap_title":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e17\u0e35\u0e48\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07","colorpicker_name":"\u0e0a\u0e37\u0e48\u0e2d:","colorpicker_color":"\u0e2a\u0e35:","colorpicker_named_title":"\u0e0a\u0e37\u0e48\u0e2d\u0e2a\u0e35","colorpicker_named_tab":"\u0e0a\u0e37\u0e48\u0e2d","colorpicker_palette_title":"\u0e08\u0e32\u0e19\u0e2a\u0e35","colorpicker_palette_tab":"\u0e08\u0e32\u0e19\u0e2a\u0e35","colorpicker_picker_title":"\u0e08\u0e32\u0e19\u0e2a\u0e35","colorpicker_picker_tab":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35","colorpicker_title":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35","code_wordwrap":"\u0e15\u0e31\u0e14\u0e04\u0e33","code_title":"\u0e41\u0e01\u0e49\u0e44\u0e02 HTML","anchor_name":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","anchor_title":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","about_loaded":"\u0e42\u0e2b\u0e25\u0e14\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19","about_version":"\u0e23\u0e38\u0e48\u0e19","about_author":"\u0e1c\u0e39\u0e49\u0e40\u0e02\u0e35\u0e22\u0e19","about_plugin":"\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19","about_plugins":"\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19","about_license":"\u0e25\u0e34\u0e02\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e4c","about_help":"\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d","about_general":"\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e40\u0e23\u0e32","about_title":"\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tn.js
new file mode 100644
index 000000000..64961fdd0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.advanced',{"underline_desc":"Sega-tselana (Ctrl+U)","italic_desc":"Tseketa (Ctrl+I)","bold_desc":"Bokima (Ctrl+B)",dd:"Thaloso ya Kaedi",dt:"Thaloso ya Theme ",samp:"Sampole ya khoudi",code:"khoudi",blockquote:"Blockquote",h6:"Sethogo 6",h5:"Sethogo 5",h4:"Sethogo 4",h3:"Sethogo 3",h2:"Sethogo 2",h1:"Sethogo 1",pre:"Fomatilwe",address:"Aterese",div:"Div",paragraph:"Pharakerafo",block:"Fomete ",fontdefault:"Lelwapa la mokwalo","font_size":"Bolekano jwa mokwalo","style_select":"Matlaela","more_colors":"Mebala e mentsi","toolbar_focus":"Tlolela kwa thulusong ya dibathene - Alt+Q, tlolela ko sebaakanying - Alt-Z, Tlolela kwa phatlheng ya elemente - Alt-X",newdocument:"A o netefatsa gore o batla go sutlha diteng tsotlhe",path:"Phatlha","clipboard_msg":"Kopa/Sega/Kgomaretsa ga e yo mo Mozila Firefox A o batla molaetsa ka lebaka le?","blockquote_desc":"Blockquote","help_desc":"Thuso","newdocument_desc":"Tokomente e Ntshwa","image_props_desc":"Ditlhagotshedimosetso tsa setswantsho","paste_desc":"Kgomaretsa","copy_desc":"Kopa","cut_desc":"Sega","anchor_desc":"Tsenya/Baakanya anchor","visualaid_desc":"Kgothakgotha melawana","charmap_desc":"Tsenya boitirelo jwa khareketa","backcolor_desc":"Thopha mmala wa kwa-morago ","forecolor_desc":"Thopha mmala wa mafoko","custom1_desc":"Ntsha kaedi ya boitirelo","removeformat_desc":"Ntsha Boalo","hr_desc":"Tsenya rula e robetseng","sup_desc":"Godimonyana","sub_desc":"Tlasenyana","code_desc":"Baakanya HTML Source","cleanup_desc":"Kolomaka khoudi e meragaraga ","image_desc":"Tsenay/ Baakanya setswantsho","unlink_desc":"Lomolola ","link_desc":"Tsenya/Baakanya lomaganya","redo_desc":"Dira-gape (Ctrl+Y)","undo_desc":"Dirolola(Ctrl+Z)","indent_desc":"Moteng","outdent_desc":"Kwantle","numlist_desc":"Tatelano e rulagantsweng","bullist_desc":"Tatelano e thakathakaneng","justifyfull_desc":"Beela go tletse","justifyright_desc":"Beela kwa mojeng","justifycenter_desc":"Beela fagare","justifyleft_desc":"Beela kwa Molemeng","striketrough_desc":"Sega-bogare","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tn_dlg.js
new file mode 100644
index 000000000..eabfa30c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"phatlha e Thamaletseng","image_dimensions":"Dimensions","image_alt":"Kaedi ya setswantsho","image_list":"Tatelano ya setswantsho","image_border":"Molelwane","image_src":"URL ya setswantsho","image_title":"Tsenay/ Baakanya setswantsho","charmap_title":"Tsenya boitirelo jwa khareketa","colorpicker_name":"Leina:","colorpicker_color":"Mmala","colorpicker_named_title":"Mebala e Teilweng","colorpicker_named_tab":"Teilweng","colorpicker_palette_title":"Mebala wa Palette","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Sethophi sa Mmala","colorpicker_picker_tab":"Sethophi","colorpicker_title":"Thopha mmala","code_wordwrap":"Phuthela lefoko","code_title":"Sebaakanyi sa HTML Source","anchor_name":"Leina la Anchor","anchor_title":"Tsenya/Baakanya anchor","about_loaded":"Dipolaka tse di pegilweng","about_version":"kgatiso","about_author":"Mokwadi","about_plugin":"Polaka","about_plugins":"Dipolaka","about_license":"setankana","about_help":"Thuso","about_general":"kaga","about_title":"kaga TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tr.js
new file mode 100644
index 000000000..e08a86bda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.advanced',{"underline_desc":"Alt\u0131 \u00e7izili (Ctrl+U)","italic_desc":"\u0130talik (Ctrl+I)","bold_desc":"Kal\u0131n (Ctrl+B)",dd:"A\u00e7\u0131klama tan\u0131mlama",dt:"\u0130fade tan\u0131mlama ",samp:"\u00d6rnek kod",code:"Kod",blockquote:"Blok al\u0131nt\u0131",h6:"Ba\u015fl\u0131k 6",h5:"Ba\u015fl\u0131k 5",h4:"Ba\u015fl\u0131k 4",h3:"Ba\u015fl\u0131k 3",h2:"Ba\u015fl\u0131k 2",h1:"Ba\u015fl\u0131k 1",pre:"\u00d6nceden bi\u00e7imlendirilmi\u015f",address:"Adres",div:"Blok",paragraph:"Paragraf",block:"Bi\u00e7im",fontdefault:"Yaz\u0131 tipi","font_size":"Yaz\u0131 boyutu","style_select":"Stiller","more_colors":"Daha fazla renk","toolbar_focus":"Alt+Q ara\u00e7 d\u00fc\u011fmelerine ge\u00e7. Alt+Z: Edit\u00f6re ge\u00e7. Alt+X:Elementin yoluna ge\u00e7.",newdocument:"T\u00fcm i\u00e7eriklerleri temizlemek istedi\u011finizden emin misiniz?",path:"Yol","clipboard_msg":"Mozilla Firefox da Kes/Kopyala/Yap\u0131\u015ft\u0131r kullan\u0131lamaz. Bu konu hakk\u0131nda daha fazla bilgi almak ister misiniz?","blockquote_desc":"Blok al\u0131nt\u0131","help_desc":"Yard\u0131m","newdocument_desc":"Bo\u015f belge","image_props_desc":"Resim \u00f6zellikleri","paste_desc":"Yap\u0131\u015ft\u0131r","copy_desc":"Kopyala","cut_desc":"Kes","anchor_desc":"K\u00f6pr\u00fc ekle/d\u00fczenle","visualaid_desc":"K\u0131lavuz/g\u00f6r\u00fcnmez nesneleri a\u00e7/kapat.","charmap_desc":"\u00d6zel karakter ekle","backcolor_desc":"Arkaplan rengini se\u00e7","forecolor_desc":"Metin rengini se\u00e7","custom1_desc":"\u00d6zel a\u00e7\u0131klamalar burada","removeformat_desc":"Bi\u00e7imi temizle","hr_desc":"Yatay cetvel ekle","sup_desc":"\u00dcstsimge","sub_desc":"Altsimge","code_desc":"HTML Kayna\u011f\u0131n\u0131 D\u00fczenle","cleanup_desc":"Da\u011f\u0131n\u0131k kodu temizle","image_desc":"Resim ekle/d\u00fczenle","unlink_desc":"Ba\u011flant\u0131y\u0131 kald\u0131r","link_desc":"Ba\u011flant\u0131 ekle/d\u00fczenle","redo_desc":"Yinele (Ctrl+Y)","undo_desc":"Geri al (Ctrl+Z)","indent_desc":"Girintiyi art\u0131r","outdent_desc":"Girintiyi azalt","numlist_desc":"S\u0131ral\u0131 liste","bullist_desc":"S\u0131ras\u0131z liste","justifyfull_desc":"\u0130ki yana yasla","justifyright_desc":"Sa\u011fa hizala","justifycenter_desc":"Ortala","justifyleft_desc":"Sola hizala","striketrough_desc":"\u00dcst\u00fc \u00e7izili","help_shortcut":"Toolbar i\u00e7in ALT-F10 a bas\u0131n. Yard\u0131m i\u00e7in ALT-0 a bas\u0131n.","rich_text_area":"Zengin Metin Alan\u0131","shortcuts_desc":"Eri\u015filebilirlik Yard\u0131m\u0131",toolbar:"Toolbar","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tr_dlg.js
new file mode 100644
index 000000000..099414803
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.advanced_dlg',{"link_list":"Ba\u011flant\u0131 listesi","link_is_external":"Girdi\u011fiz URL d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan http:// \u00f6nekinin eklenmesini ister misiniz?","link_is_email":"Girdi\u011finiz URL e-posta adresi gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan mailto: \u00f6nekinin eklenmesini ister misiniz? prefix?","link_titlefield":"Ba\u015fl\u0131k","link_target_blank":"Ba\u011flant\u0131y\u0131 yeni pencerede a\u00e7","link_target_same":"Ba\u011flant\u0131y\u0131 ayn\u0131 pencerede a\u00e7","link_target":"Hedef","link_url":"Ba\u011flant\u0131 URL\'si","link_title":"Ba\u011flant\u0131 ekle/d\u00fczenle","image_align_right":"Sa\u011f","image_align_left":"Sol","image_align_textbottom":"Metin altta","image_align_texttop":"Metin \u00fcstte","image_align_bottom":"Alt","image_align_middle":"Orta","image_align_top":"\u00dcst","image_align_baseline":"Taban hizas\u0131","image_align":"Hizalama","image_hspace":"Yatay bo\u015fluk","image_vspace":"Dikey bo\u015fluk","image_dimensions":"Boyutlar","image_alt":"Resim a\u00e7\u0131klamas\u0131","image_list":"Resim listesi","image_border":"Kenarl\u0131k","image_src":"Resmin URL\'si","image_title":"Resim ekle/d\u00fczenle","charmap_title":"\u00d6zel karakter se\u00e7","colorpicker_name":"\u0130sim:","colorpicker_color":"Renk:","colorpicker_named_title":"Renk ad\u0131","colorpicker_named_tab":"Ad\u0131","colorpicker_palette_title":"Renk paleti","colorpicker_palette_tab":"Palet","colorpicker_picker_title":"Renk se\u00e7ici","colorpicker_picker_tab":"Se\u00e7ici","colorpicker_title":"Renk se\u00e7","code_wordwrap":"Kelimeleri birlikte tut","code_title":"HTML Kaynak Edit\u00f6r\u00fc","anchor_name":"K\u00f6pr\u00fc ad\u0131","anchor_title":"K\u00f6pr\u00fc ekle/d\u00fczenle","about_loaded":"Y\u00fckl\u00fc eklentiler","about_version":"Versiyon","about_author":"Yazar","about_plugin":"Eklenti","about_plugins":"Eklentiler","about_license":"Lisans","about_help":"Yard\u0131m","about_general":"Hakk\u0131nda","about_title":"TinyMCE hakk\u0131nda","charmap_usage":"Gezinmek i\u00e7in sa\u011f ve sol oklar\u0131 kullan\u0131n.","anchor_invalid":"L\u00fctfen ge\u00e7erli bir k\u00f6pr\u00fc ad\u0131 giriniz","accessibility_help":"Eri\u015febilirlik Yard\u0131m\u0131","accessibility_usage_title":"Genel Kullan\u0131m","invalid_color_value":"Ge\u00e7ersiz renk de\u011feri"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tt.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tt.js
new file mode 100644
index 000000000..97e48985e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.advanced',{"underline_desc":"\u5e95\u7dda (Ctrl+U)","italic_desc":"\u659c\u9ad4 (Ctrl+I)","bold_desc":"\u7c97\u9ad4 (Ctrl+B)",dd:"\u540d\u8a5e\u89e3\u91cb",dt:"\u540d\u8a5e\u5b9a\u7fa9",samp:"\u7a0b\u5f0f\u7bc4\u4f8b",code:"\u4ee3\u78bc",blockquote:"\u5f15\u7528",h6:"\u6a19\u984c 6",h5:"\u6a19\u984c 5",h4:"\u6a19\u984c 4",h3:"\u6a19\u984c 3",h2:"\u6a19\u984c 2",h1:"\u6a19\u984c 1",pre:"\u9810\u8a2d\u683c\u5f0f",address:"\u5730\u5740",div:"Div",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u9ad4","font_size":"\u5b57\u9ad4\u5927\u5c0f","style_select":"\u6a23\u5f0f","more_colors":"\u66f4\u591a\u9854\u8272","toolbar_focus":"\u5de5\u5177\u5217 - Alt+Q, \u7de8\u8f2f\u5668 - Alt-Z, \u5143\u4ef6\u8def\u5f91 - Alt-X",newdocument:"\u60a8\u78ba\u8a8d\u8981\u522a\u9664\u5168\u90e8\u5167\u5bb9\u55ce\uff1f",path:"\u8def\u5f91","clipboard_msg":"\u8907\u88fd\u3001\u526a\u4e0b\u548c\u8cbc\u4e0a\u529f\u80fd\u5728Mozilla \u548c Firefox\u4e2d\u7121\u6cd5\u4f7f\u7528","blockquote_desc":"\u5f15\u7528","help_desc":"\u8aaa\u660e","newdocument_desc":"\u65b0\u589e\u6587\u4ef6","image_props_desc":"\u5716\u7247\u5c6c\u6027","paste_desc":"\u8cbc\u4e0a (Ctrl+V)","copy_desc":"\u8907\u88fd (Ctrl+C)","cut_desc":"\u526a\u4e0b (Ctrl+X)","anchor_desc":"\u63d2\u5165/\u7de8\u8f2f \u9328\u9ede","visualaid_desc":"\u7db2\u683c/\u96b1\u85cf\u5143\u4ef6\uff1f","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u865f","backcolor_desc":"\u9078\u64c7\u80cc\u666f\u9854\u8272","forecolor_desc":"\u9078\u64c7\u6587\u5b57\u9854\u8272","custom1_desc":"\u5728\u6b64\u8f38\u5165\u60a8\u7684\u81ea\u8a02\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u6a23\u5f0f","hr_desc":"\u63d2\u5165\u6c34\u5e73\u7dda","sup_desc":"\u4e0a\u6a19","sub_desc":"\u4e0b\u6a19","code_desc":"\u7de8\u8f2f HTML \u539f\u59cb\u7a0b\u5f0f\u78bc","cleanup_desc":"\u6e05\u9664\u5167\u5bb9","image_desc":"\u63d2\u5165/\u7de8\u8f2f \u5716\u7247","unlink_desc":"\u53d6\u6d88\u9023\u7d50","link_desc":"\u63d2\u5165/\u7de8\u8f2f \u9023\u7d50","redo_desc":"\u91cd\u4f5c\u8b8a\u66f4 (Ctrl+Y)","undo_desc":"\u53d6\u6d88\u8b8a\u66f4 (Ctrl+Z)","indent_desc":"\u589e\u52a0\u7e2e\u6392","outdent_desc":"\u6e1b\u5c11\u7e2e\u6392","numlist_desc":"\u7de8\u865f","bullist_desc":"\u6e05\u55ae\u7b26\u865f","justifyfull_desc":"\u5169\u7aef\u5c0d\u9f4a","justifyright_desc":"\u9760\u53f3\u5c0d\u9f4a","justifycenter_desc":"\u7f6e\u4e2d","justifyleft_desc":"\u9760\u5de6\u5c0d\u9f4a","striketrough_desc":"\u4e2d\u5283\u7dda","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tt_dlg.js
new file mode 100644
index 000000000..32ea9be51
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.advanced_dlg',{"link_list":"\u9023\u7d50\u6e05\u55ae","link_is_external":"\u60a8\u8f38\u5165\u7684\u7db2\u5740\u61c9\u8a72\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\uff0c\u662f\u5426\u9700\u8981\u5728\u7db2\u5740\u524d\u52a0\u4e0a http:// ?","link_is_email":"\u60a8\u8f38\u5165\u7684\u61c9\u8a72\u662f\u4e00\u500b\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u7db2\u5740\u524d\u52a0\u4e0a mailto: ? ","link_titlefield":"\u6a19\u984c","link_target_blank":"\u65b0\u7a97\u53e3\u6253\u958b","link_target_same":"\u7576\u524d\u7a97\u53e3\u6253\u958b","link_target":"\u76ee\u6a19","link_url":"\u9023\u7d50\u7db2\u5740","link_title":"\u63d2\u5165/\u7de8\u8f2f \u9023\u7d50","image_align_right":"\u9760\u53f3\u5c0d\u9f4a","image_align_left":"\u9760\u5de6\u5c0d\u9f4a","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u5e95\u90e8\u5c0d\u9f4a","image_align_middle":"\u4e2d\u90e8\u5c0d\u9f4a","image_align_top":"\u9802\u90e8\u5c0d\u9f4a","image_align_baseline":"\u57fa\u7dda","image_align":"\u5c0d\u9f4a\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u9593\u8ddd","image_vspace":"\u5782\u76f4\u9593\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u5716\u7247\u8aaa\u660e","image_list":"\u5716\u7247\u6e05\u55ae","image_border":"\u908a\u6846","image_src":"\u5716\u7247\u7db2\u5740","image_title":"\u63d2\u5165/\u7de8\u8f2f \u5716\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u865f","colorpicker_name":"\u8272\u540d:","colorpicker_color":"\u9854\u8272:","colorpicker_named_title":"\u9810\u8a2d\u7684\u9854\u8272","colorpicker_named_tab":"\u9810\u8a2d\u503c","colorpicker_palette_title":"\u8272\u8b5c\u9854\u8272","colorpicker_palette_tab":"\u8272\u8b5c","colorpicker_picker_title":"\u53d6\u8272\u5668","colorpicker_picker_tab":"\u9078\u64c7\u5668","colorpicker_title":"\u9078\u64c7\u9854\u8272","code_wordwrap":"\u81ea\u52d5\u63db\u884c","code_title":"HTML \u539f\u59cb\u7a0b\u5f0f\u78bc\u7de8\u8f2f\u5668","anchor_name":"\u9328\u9ede\u540d\u7a31","anchor_title":"\u63d2\u5165/\u7de8\u8f2f \u9328\u9ede","about_loaded":"\u5df2\u8f09\u5165\u7684\u5916\u639b\u7a0b\u5f0f","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u5916\u639b\u7a0b\u5f0f","about_plugins":"\u5168\u90e8\u5916\u639b\u7a0b\u5f0f","about_license":"\u6388\u6b0a","about_help":"\u8aaa\u660e","about_general":"\u95dc\u65bc","about_title":"\u95dc\u65bc TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tw.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tw.js
new file mode 100644
index 000000000..1ceb6dcbb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.advanced',{"underline_desc":"\u5e95\u7dda (Ctrl+U)","italic_desc":"\u659c\u9ad4 (Ctrl+I)","bold_desc":"\u7c97\u9ad4 (Ctrl+B)",dd:"\u540d\u8a5e\u89e3\u91cb",dt:"\u540d\u8a5e\u5b9a\u7fa9",samp:"\u539f\u59cb\u78bc\u7bc4\u4f8b",code:"\u539f\u59cb\u78bc",blockquote:"\u5f15\u7528",h6:"\u6a19\u984c6",h5:"\u6a19\u984c5",h4:"\u6a19\u984c4",h3:"\u6a19\u984c3",h2:"\u6a19\u984c2",h1:"\u6a19\u984c1",pre:"\u9810\u8a2d\u5b9a\u7fa9\u683c\u5f0f",address:"\u5730\u5740",div:"DIV \u968e\u5c64",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u9ad4","font_size":"\u5b57\u578b\u5927\u5c0f","style_select":"\u6a23\u5f0f","link_delta_height":"60","link_delta_width":"40","more_colors":"\u66f4\u591a\u984f\u8272...","toolbar_focus":"\u5b9a\u4f4d\u5230\u5de5\u5177\u5217\uff1aAlt+Q\uff0c\u5b9a\u4f4d\u5230\u7de8\u8f2f\u6846\uff1aAlt+Z\u5b9a\u4f4d\u5230\u5de5\u5177\u5217- Alt+Q\uff0c\u5b9a\u4f4d\u5230\u5143\u7d20\u76ee\u9304\uff1aAlt+X\u3002",newdocument:"\u78ba\u8a8d\u6e05\u9664\u76ee\u524d\u7de8\u8f2f\u7684\u5167\u5bb9\u55ce\uff1f",path:"\u5143\u7d20\u76ee\u9304","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u8907\u88fd\u529f\u80fd\u3002","blockquote_desc":"\u5f15\u7528","help_desc":"\u8aaa\u660e","newdocument_desc":"\u65b0\u5efa\u6a94\u6848","image_props_desc":"\u5716\u7247\u5c6c\u6027","paste_desc":"\u8cbc\u4e0a (Ctrl+V)","copy_desc":"\u8907\u88fd (Ctrl+C)","cut_desc":"\u526a\u4e0b (Ctrl+X)","anchor_desc":"\u63d2\u5165/\u7de8\u8f2f\u66f8\u7c64","visualaid_desc":"\u986f\u793a/\u96b1\u85cf\u76ee\u6a19","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u865f","backcolor_desc":"\u80cc\u666f\u984f\u8272","forecolor_desc":"\u6587\u5b57\u984f\u8272","custom1_desc":"\u5728\u6b64\u8f38\u5165\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u683c\u5f0f","hr_desc":"\u6c34\u5e73\u7dda","sup_desc":"\u4e0a\u6a19","sub_desc":"\u4e0b\u6a19","code_desc":"Html\u539f\u59cb\u78bc\u6a21\u5f0f","cleanup_desc":"\u6e05\u9664\u683c\u5f0f","image_desc":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","unlink_desc":"\u522a\u9664\u8d85\u9023\u7d50","link_desc":"\u63d2\u5165/\u7de8\u8f2f\u8d85\u9023\u7d50","redo_desc":"\u53d6\u6d88\u5fa9\u539f (Ctrl+Y)","undo_desc":"\u5fa9\u539f (Ctrl+Z)","indent_desc":"\u589e\u52a0\u7e2e\u6392","outdent_desc":"\u6e1b\u5c11\u7e2e\u6392","numlist_desc":"\u7de8\u865f\u5217\u8868","bullist_desc":"\u9805\u76ee\u5217\u8868","justifyfull_desc":"\u5de6\u53f3\u5c0d\u9f4a","justifyright_desc":"\u9760\u53f3\u5c0d\u9f4a","justifycenter_desc":"\u7f6e\u4e2d\u5c0d\u9f4a","justifyleft_desc":"\u9760\u5de6\u5c0d\u9f4a","striketrough_desc":"\u522a\u9664\u7dda","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tw_dlg.js
new file mode 100644
index 000000000..15de48afe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.advanced_dlg',{"link_list":"\u8d85\u9023\u7d50\u6e05\u55ae","link_is_external":"\u60a8\u8f38\u5165\u7684 URL \u662f\u4e00\u500b\u5916\u90e8\u8d85\u9023\u7d50\uff0c\u662f\u5426\u8981\u52a0\u4e0a http:// \uff1f","link_is_email":"\u60a8\u8f38\u5165\u7684\u662f\u96fb\u5b50\u90f5\u4ef6\u5730\u5740,\u662f\u5426\u9700\u8981\u52a0 mailto:\uff1f","link_titlefield":"\u6a19\u984c","link_target_blank":"\u65b0\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","link_target_same":"\u76ee\u524d\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","link_target":"\u76ee\u6a19","link_url":"\u8d85\u9023\u7d50URL","link_title":"\u63d2\u5165/\u7de8\u8f2f\u8d85\u9023\u7d50","image_align_right":"\u9760\u53f3","image_align_left":"\u9760\u5de6","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u9760\u4e0b","image_align_middle":"\u7f6e\u4e2d","image_align_top":"\u9760\u4e0a","image_align_baseline":"\u57fa\u6e96\u7dda","image_align":"\u5c0d\u9f4a\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u9593\u8ddd","image_vspace":"\u5782\u76f4\u9593\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u5716\u7247\u8aaa\u660e","image_list":"\u5716\u7247\u6e05\u55ae","image_border":"\u908a\u6846","image_src":"\u5716\u7247URL","image_title":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u865f","colorpicker_name":"\u540d\u7a31\uff1a","colorpicker_color":"\u984f\u8272\uff1a","colorpicker_named_title":"\u5e38\u7528\u984f\u8272","colorpicker_named_tab":"\u5e38\u7528\u984f\u8272","colorpicker_palette_title":"WEB\u984f\u8272","colorpicker_palette_tab":"\u5b89\u5168\u8272","colorpicker_picker_title":"\u8abf\u8272\u76e4","colorpicker_picker_tab":"\u8abf\u8272\u76e4","colorpicker_title":"\u9078\u64c7\u984f\u8272","code_wordwrap":"\u81ea\u52d5\u63db\u884c","code_title":"\u539f\u59cb\u78bc\u6a19\u984c","anchor_name":"\u66f8\u7c64\u540d\u7a31","anchor_title":"\u63d2\u5165/\u7de8\u8f2f\u66f8\u7c64","about_loaded":"\u5df2\u555f\u7528\u7684\u5916\u639b\u7a0b\u5f0f","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u5916\u639b\u7a0b\u5f0f","about_plugins":"\u5916\u639b\u7a0b\u5f0f","about_license":"\u6388\u6b0a","about_help":"\u8aaa\u660e","about_general":"\u95dc\u65bc","about_title":"\u95dc\u65bc TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/uk.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/uk.js
new file mode 100644
index 000000000..9988c60fa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/uk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.advanced',{"underline_desc":"\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u0416\u0438\u0440\u043d\u0438\u0439 (Ctrl+B)",dd:"\u0414\u043e\u0432\u0456\u0434\u043d\u0438\u043a, \u043e\u043f\u0438\u0441 ",dt:"\u0414\u043e\u0432\u0456\u0434\u043d\u0438\u043a, \u0442\u0435\u0440\u043c\u0456\u043d ",samp:"\u041f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443",code:"\u041a\u043e\u0434",blockquote:"\u0426\u0438\u0442\u0430\u0442\u0430",h6:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",h5:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",h4:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",h3:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",h2:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",h1:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",pre:"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432\u0430\u043d\u0438\u0439",address:"\u0421\u0442\u0438\u043b\u044c \u0430\u0434\u0440\u0435\u0441\u0438",div:"Div",paragraph:"\u0410\u0431\u0437\u0430\u0446",block:"\u0424\u043e\u0440\u043c\u0430\u0442",fontdefault:"\u0428\u0440\u0438\u0444\u0442","font_size":"\u0420\u043e\u0437\u043c\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0443","style_select":"\u0421\u0442\u0438\u043b\u0456","more_colors":"\u0411\u0456\u043b\u044c\u0448\u0435 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432","toolbar_focus":"\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u043a\u043d\u043e\u043f\u043e\u043a - Alt+Q, \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0443 - Alt-Z, \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u0448\u043b\u044f\u0445\u0443 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0443 - Alt-X",newdocument:"\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0441\u0435 \u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438?",path:"\u0428\u043b\u044f\u0445","clipboard_msg":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438/\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438/\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456 \u0432 Mozilla \u0438 Firefox.\n\u0412\u0430\u043c \u0446\u0456\u043a\u0430\u0432\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u043f\u0440\u043e \u0446\u0435?","blockquote_desc":"\u0426\u0438\u0442\u0430\u0442\u0430","help_desc":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430","newdocument_desc":"\u041d\u043e\u0432\u0438\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","paste_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438","copy_desc":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438","cut_desc":"\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438","anchor_desc":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u044f\u043a\u0456\u0440","visualaid_desc":"\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0456/\u043f\u0440\u0438\u0445\u043e\u0432\u0430\u043d\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438","charmap_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b","backcolor_desc":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443","forecolor_desc":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043a\u043e\u043b\u0456\u0440 \u0442\u0435\u043a\u0441\u0442\u0443","custom1_desc":"\u0412\u0430\u0448 \u0434\u043e\u0432\u0456\u043b\u044c\u043d\u0438\u0439 \u043e\u043f\u0438\u0441 \u0442\u0443\u0442","removeformat_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f","hr_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0438\u043a","sup_desc":"\u0412\u0435\u0440\u0445\u043d\u0456\u0439 \u0456\u043d\u0434\u0435\u043a\u0441","sub_desc":"\u041d\u0438\u0436\u043d\u0456\u0439 \u0456\u043d\u0434\u0435\u043a\u0441","code_desc":"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 HTML \u043a\u043e\u0434","cleanup_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0437\u0430\u0439\u0432\u0438\u0439 \u043a\u043e\u0434","image_desc":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","unlink_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","link_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","redo_desc":"\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 (Ctrl+Y)","undo_desc":"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438 (Ctrl+Z)","indent_desc":"\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f","outdent_desc":"\u0417\u043c\u0435\u043d\u0448\u0442\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041d\u0435\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","justifyfull_desc":"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0456","justifyright_desc":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","justifycenter_desc":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","justifyleft_desc":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","striketrough_desc":"\u0417\u0430\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","help_shortcut":"\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT F10 \u0434\u043b\u044f \u0442\u0443\u043b\u0431\u0430\u0440\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT 0 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0438","rich_text_area":"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440","shortcuts_desc":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430 \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0456",toolbar:"\u0422\u0443\u043b\u0431\u0430\u0440","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/uk_dlg.js
new file mode 100644
index 000000000..89e003142
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.advanced_dlg',{"link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c","link_is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 http://?","link_is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0457 \u043f\u043e\u0448\u0442\u0438, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 mailto:?","link_titlefield":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","link_target_blank":"\u043d\u043e\u0432\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456","link_target_same":"\u0446\u044c\u043e\u043c\u0443 \u0436 \u0432\u0456\u043a\u043d\u0456","link_target":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432","link_url":"\u0410\u0434\u0440\u0435\u0441\u0430 ","link_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","image_align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_left":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","image_align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","image_align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","image_align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u0456\u0439 \u043b\u0456\u043d\u0456\u0457","image_align":"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","image_hspace":"\u0413\u043e\u0440\u0438\u0437. \u0432\u0456\u0434\u0441\u0442\u0443\u043f","image_vspace":"\u0412\u0435\u0440\u0442. \u0432\u0456\u0434\u0441\u0442\u0443\u043f","image_dimensions":"\u0420\u043e\u0437\u043c\u0456\u0440\u0438","image_alt":"\u041e\u043f\u0438\u0441","image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","image_border":"\u0420\u0430\u043c\u043a\u0430","image_src":"\u0410\u0434\u0440\u0435\u0441\u0430","image_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","charmap_title":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0434\u043e\u0432\u0456\u043b\u044c\u043d\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b","colorpicker_name":"\u041d\u0430\u0437\u0432\u0430:","colorpicker_color":"\u041a\u043e\u043b\u0456\u0440:","colorpicker_named_title":"\u0417\u0430 \u043d\u0430\u0437\u0432\u043e\u044e","colorpicker_named_tab":"\u0417\u0430 \u043d\u0430\u0437\u0432\u043e\u044e","colorpicker_palette_title":"\u041f\u0430\u043b\u0456\u0442\u0440\u0430 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432","colorpicker_palette_tab":"\u041f\u0430\u043b\u0456\u0442\u0440\u0430","colorpicker_picker_title":"\u041f\u0456\u043f\u0435\u0442\u043a\u0430 \u043a\u043e\u043b\u044c\u043e\u0440\u0443","colorpicker_picker_tab":"\u041f\u0456\u043f\u0435\u0442\u043a\u0430","colorpicker_title":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043a\u043e\u043b\u0456\u0440","code_wordwrap":"\u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0438 \u0441\u043b\u043e\u0432\u0430","code_title":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 HTML \u043a\u043e\u0434\u0443","anchor_name":"\u041d\u0430\u0437\u0432\u0430 \u044f\u043a\u043e\u0440\u044f","anchor_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u044f\u043a\u0456\u0440","about_loaded":"\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u0456 \u0434\u043e\u0434\u0430\u0442\u043a\u0438","about_version":"\u0412\u0435\u0440\u0441\u0456\u044f","about_author":"\u0410\u0432\u0442\u043e\u0440","about_plugin":"\u0414\u043e\u0434\u0430\u0442\u043e\u043a","about_plugins":"\u0414\u043e\u0434\u0430\u0442\u043a\u0438","about_license":"\u041b\u0456\u0446\u0435\u043d\u0437\u0456\u044f","about_help":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430","about_general":"\u041f\u0440\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442...","about_title":"\u041f\u0440\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442 TinyMCE","charmap_usage":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0456\u043b\u043a\u0438 \u0432\u043b\u0456\u0432\u043e \u0442\u0430 \u0432\u043f\u0440\u0430\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u0457","anchor_invalid":"\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435 \u0456\u043c\'\u044f \u0434\u043b\u044f \u044f\u043a\u0456\u0440\u0430.","accessibility_help":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430 \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0456","accessibility_usage_title":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f","invalid_color_value":"\u041d\u0435\u043a\u043e\u0440\u0435\u043a\u0442\u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043a\u043e\u043b\u044c\u043e\u0440\u0443"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ur.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ur.js
new file mode 100644
index 000000000..a5d96403d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ur.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"\u06a9\u0648\u0688",blockquote:"\u0628\u0644\u0627\u06a9 \u06a9\u0648\u0679",h6:"\u06c1\u06cc\u0688\u0646\u06af \u0634\u0634\u0645",h5:"\u06c1\u06cc\u0688\u0646\u06af \u067e\u0646\u062c\u0645",h4:"\u06c1\u06cc\u0688\u0646\u06af \u0686\u06c1\u0627\u0631\u0645",h3:"\u06c1\u06cc\u0688\u0646\u06af \u0633\u0648\u0645",h2:"\u06c1\u06cc\u0688\u0646\u06af \u062f\u0648\u0645",h1:"\u06c1\u06cc\u0688\u0646\u06af \u0627\u0648\u0644",pre:"\u067e\u0631\u06cc \u0641\u0627\u0631\u0645\u06cc\u0679\u0688",address:"\u0627\u06cc\u0688\u0631\u06cc\u0633",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ur_dlg.js
new file mode 100644
index 000000000..f46813b6d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/vi.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/vi.js
new file mode 100644
index 000000000..6f80fc9e7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/vi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.advanced',{"underline_desc":"G\u1ea1ch ch\u00e2n (Ctrl+U)","italic_desc":"Ch\u1eef nghi\u00eang (Ctrl+I)","bold_desc":"Ch\u1eef \u0111\u1eadm (Ctrl+B)",dd:"Th\u1ebb M\u00f4 t\u1ea3 \u0111\u1ecbnh ngh\u0129a",dt:"Th\u1ebb \u0110i\u1ec1u kho\u1ea3n \u0111\u1ecbnh ngh\u0129a ",samp:"Th\u1ebb M\u00e3 v\u00ed d\u1ee5",code:"Th\u1ebb M\u00e3",blockquote:"Th\u1ebb Tr\u00edch d\u1eabn",h6:"Th\u1ebb Heading 6",h5:"Th\u1ebb Heading 5",h4:"Th\u1ebb Heading 4",h3:"Th\u1ebb Heading 3",h2:"Th\u1ebb Heading 2",h1:"Th\u1ebb Heading 1",pre:"Th\u1ebb Ti\u1ec1n \u0111\u1ecbnh d\u1ea1ng",address:"Th\u1ebb \u0110\u1ecba ch\u1ec9",div:"Th\u1ebb",paragraph:"\u0110o\u1ea1n",block:"\u0110\u1ecbnh d\u1ea1ng",fontdefault:"T\u00ean font ch\u1eef","font_size":"K\u00edch th\u01b0\u1edbc font","style_select":"Ki\u1ec3u","more_colors":"Th\u00eam m\u00e0u","toolbar_focus":"Nh\u1ea3y t\u1edbi c\u00e1c n\u00fat c\u00f4ng c\u1ee5 - Alt+Q, T\u1edbi tr\u00ecnh so\u1ea1n th\u1ea3o - Alt-Z, T\u1edbi \u0111\u01b0\u1eddng d\u1eabn c\u00e1c ph\u1ea7n t\u1eed - Alt-X",newdocument:"B\u1ea1n c\u00f3 ch\u1eafc ch\u1eafn mu\u1ed1n x\u00f3a t\u1ea5t c\u1ea3 n\u1ed9i dung?",path:"\u0110\u01b0\u1eddng d\u1eabn","clipboard_msg":"Sao ch\u00e9p/C\u1eaft/D\u00e1n kh\u00f4ng c\u00f3 s\u1eb5n trong Mozilla v\u00e0 Firefox.\n\t\t\tB\u1ea1n c\u00f3 mu\u1ed1n bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 v\u1ea5n \u0111\u1ec1 n\u00e0y?","blockquote_desc":"Blockquote","help_desc":"Tr\u1ee3 gi\u00fap","newdocument_desc":"V\u0103n b\u1ea3n m\u1edbi","image_props_desc":"Thu\u1ed9c t\u00ednh \u1ea3nh","paste_desc":"D\u00e1n","copy_desc":"Sao ch\u00e9p","cut_desc":"C\u1eaft","anchor_desc":"Ch\u00e8n/s\u1eeda m\u1ecf neo","visualaid_desc":"\u0110\u1ea3o c\u00e1c th\u00e0nh ph\u1ea7n h\u01b0\u1edbng d\u1eabn ho\u1eb7c \u1ea9n","charmap_desc":"Ch\u00e8n k\u00fd t\u1ef1 t\u00f9y bi\u1ebfn","backcolor_desc":"Ch\u1ecdn m\u00e0u n\u1ec1n","forecolor_desc":"Ch\u1ecdn m\u00e0u ch\u1eef","custom1_desc":"M\u00f4 t\u1ea3 t\u00f9y bi\u1ebfn c\u1ee7a b\u1ea1n \u1edf \u0111\u00e2y","removeformat_desc":"Lo\u1ea1i b\u1ecf \u0111\u1ecbnh d\u1ea1ng","hr_desc":"Ch\u00e8n th\u01b0\u1edbc ngang","sup_desc":"Ch\u1ec9 s\u1ed1 b\u00ean tr\u00ean","sub_desc":"Ch\u1ec9 s\u1ed1 d\u01b0\u1edbi d\u00f2ng","code_desc":"S\u1eeda m\u00e3 HTML","cleanup_desc":"D\u1ecdn d\u1eb9p m\u00e3 l\u1ed9n x\u1ed9n","image_desc":"Ch\u00e8n/s\u1eeda \u1ea3nh","unlink_desc":"X\u00f3a Li\u00ean k\u1ebft","link_desc":"Th\u00eam/S\u1eeda Li\u00ean k\u1ebft","redo_desc":"Ti\u1ebfn t\u1edbi (Ctrl+Y)","undo_desc":"Tr\u1edf v\u1ec1 (Ctrl+Z)","indent_desc":"Th\u1ee5t \u0111\u1ea7u d\u00f2ng","outdent_desc":"V\u1ec1 \u0111\u1ea7u d\u00f2ng","numlist_desc":"Danh s\u00e1ch c\u00f3 ch\u1ec9 s\u1ed1","bullist_desc":"Danh s\u00e1ch","justifyfull_desc":"Canh l\u1ec1 \u0111\u1ec1u","justifyright_desc":"Canh l\u1ec1 ph\u1ea3i","justifycenter_desc":"Canh gi\u1eefa","justifyleft_desc":"Canh l\u1ec1 tr\u00e1i","striketrough_desc":"G\u1ea1ch ngang","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/vi_dlg.js
new file mode 100644
index 000000000..3a36071ab
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.advanced_dlg',{"link_list":"Danh s\u00e1ch li\u00ean k\u1ebft","link_is_external":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t li\u00ean k\u1ebft ngo\u00e0i, b\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 http://?","link_is_email":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t \u0111\u1ecba ch\u1ec9 \u0111i\u1ec7n th\u01b0, B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 mailto?","link_titlefield":"Ti\u00eau \u0111\u1ec1","link_target_blank":"M\u1edf li\u00ean k\u1ebft trong c\u1eeda s\u1ed5 m\u1edbi","link_target_same":"M\u1edf li\u00ean k\u1ebft trong c\u00f9ng c\u1eeda s\u1ed5","link_target":"\u0110\u00edch","link_url":"URL Li\u00ean k\u1ebft","link_title":"Th\u00eam/S\u1eeda Li\u00ean k\u1ebft","image_align_right":"Ph\u1ea3i","image_align_left":"Tr\u00e1i","image_align_textbottom":"V\u0103n b\u1ea3n d\u01b0\u1edbi","image_align_texttop":"V\u0103n b\u1ea3n tr\u00ea","image_align_bottom":"D\u01b0\u1edbi c\u00f9ng","image_align_middle":"Gi\u1eefa","image_align_top":"Tr\u00ean c\u00f9ng","image_align_baseline":"\u0110\u01b0\u1eddng c\u01a1 s\u1edf","image_align":"Canh l\u1ec1n","image_hspace":"Kho\u1ea3ng c\u00e1ch ngang","image_vspace":"Kho\u1ea3ng c\u00e1ch d\u1ecdc","image_dimensions":"K\u00edch th\u01b0\u1edbng","image_alt":"M\u00f4 t\u1ea3 \u1ea3nh","image_list":"Danh s\u00e1ch \u1ea3nh","image_border":"Vi\u1ec1n","image_src":"URL \u1ea3nh","image_title":"Ch\u00e8n/s\u1eeda \u1ea3nh","charmap_title":"Ch\u1ecdn k\u00fd t\u1ef1 t\u00f9y bi\u1ebfn","colorpicker_name":"T\u00ean:","colorpicker_color":"M\u00e0u:","colorpicker_named_title":"M\u00e0u \u0111\u00e3 \u0111\u1eb7t t\u00ean","colorpicker_named_tab":"T\u00ean","colorpicker_palette_title":"B\u1ea3ng m\u00e0u","colorpicker_palette_tab":"B\u1ea3ng m\u00e0u","colorpicker_picker_title":"B\u1ed9 ch\u1ecdn m\u00e0u","colorpicker_picker_tab":"B\u1ed9 ch\u1ecdn","colorpicker_title":"Ch\u1ecdn m\u1ed9t m\u00e0u","code_wordwrap":"Xu\u1ed1ng d\u00f2ng t\u1ef1 \u0111\u1ed9ng","code_title":"Tr\u00ecnh so\u1ea1n th\u1ea3o m\u00e3 ngu\u1ed3n HTML","anchor_name":"T\u00ean m\u1ecf neo","anchor_title":"Ch\u00e8n/s\u1eeda m\u1ecf neo","about_loaded":"Tr\u00ecnh g\u1eafn k\u00e8m \u0111\u00e3 n\u1ea1p","about_version":"Phi\u00ean b\u1ea3n","about_author":"T\u00e1c gi\u1ea3","about_plugin":"Tr\u00ecnh g\u1eafn k\u00e8m","about_plugins":"Tr\u00ecnh g\u1eafn k\u00e8m","about_license":"Gi\u1ea5y ph\u00e9p","about_help":"Tr\u1ee3 gi\u00fap","about_general":"Th\u00f4ng tin","about_title":"Th\u00f4ng tin v\u1ec1 TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-cn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-cn.js
new file mode 100644
index 000000000..cef3df2d9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.advanced',{"underline_desc":"\u4e0b\u5212\u7ebf(Ctrl U)","italic_desc":"\u659c\u4f53(Ctrl I)","bold_desc":"\u7c97\u4f53(Ctrl B)",dd:"\u5b9a\u4e49\u8bf4\u660e",dt:"\u672f\u8bed\u5b9a\u4e49",samp:"\u4ee3\u7801\u793a\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"\u6807\u98986",h5:"\u6807\u98985",h4:"\u6807\u98984",h3:"\u6807\u98983",h2:"\u6807\u98982",h1:"\u6807\u98981",pre:"\u9884\u683c\u5f0f\u6587\u672c",address:"\u5730\u5740",div:"Div\u533a\u5757",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f\u5316",fontdefault:"\u5b57\u4f53","font_size":"\u5b57\u4f53\u5927\u5c0f","style_select":"\u6837\u5f0f","more_colors":"\u66f4\u591a\u989c\u8272","toolbar_focus":"\u8f6c\u5230\u5de5\u5177\u6309\u94ae - Alt-Q\uff0c\u8f6c\u5230\u7f16\u8f91\u5668 - Alt-Z\uff0c\u8f6c\u5230\u5143\u7d20\u8def\u5f84 - Alt-X\u3002",newdocument:"\u60a8\u771f\u7684\u8981\u6e05\u9664\u6240\u6709\u5185\u5bb9\u5417\uff1f",path:"\u8def\u5f84","clipboard_msg":"\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u590d\u5236/\u7c98\u8d34/\u526a\u5207\u3002n\u60a8\u8981\u67e5\u770b\u8be5\u95ee\u9898\u66f4\u591a\u7684\u4fe1\u606f\u5417\uff1f","blockquote_desc":"\u5f15\u7528","help_desc":"\u5e2e\u52a9","newdocument_desc":"\u65b0\u5efa","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u7c98\u8d34","copy_desc":"\u590d\u5236","cut_desc":"\u526a\u5207","anchor_desc":"\u63d2\u5165/\u7f16\u8f91 \u951a","visualaid_desc":"\u663e\u793a/\u9690\u85cf \u5143\u7d20","charmap_desc":"\u63d2\u5165\u81ea\u5b9a\u4e49\u7b26\u53f7","backcolor_desc":"\u9009\u62e9\u80cc\u666f\u989c\u8272","forecolor_desc":"\u9009\u62e9\u6587\u672c\u989c\u8272","custom1_desc":"\u8fd9\u91cc\u662f\u60a8\u81ea\u5b9a\u4e49\u7684\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u683c\u5f0f","hr_desc":"\u63d2\u5165\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"\u7f16\u8f91HTML\u6e90\u4ee3\u7801","cleanup_desc":"\u6e05\u9664\u65e0\u7528\u4ee3\u7801","image_desc":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","unlink_desc":"\u53d6\u6d88\u8d85\u94fe\u63a5","link_desc":"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","redo_desc":"\u6062\u590d (Ctrl Y)","undo_desc":"\u64a4\u9500 (Ctrl Z)","indent_desc":"\u589e\u52a0\u7f29\u8fdb","outdent_desc":"\u51cf\u5c11\u7f29\u8fdb","numlist_desc":"\u7f16\u53f7\u5217\u8868","bullist_desc":"\u9879\u76ee\u5217\u8868","justifyfull_desc":"\u4e24\u7aef\u5bf9\u9f50","justifyright_desc":"\u53f3\u5bf9\u9f50","justifycenter_desc":"\u5c45\u4e2d","justifyleft_desc":"\u5de6\u5bf9\u9f50","striketrough_desc":"\u5220\u9664\u7ebf","help_shortcut":"\u6309 ALT-F10 \u5b9a\u4f4d\u5230\u5de5\u5177\u680f.\u6309 ALT-0 \u83b7\u53d6\u5e2e\u52a9\u3002","rich_text_area":"\u5bcc\u6587\u672c\u533a","shortcuts_desc":"\u8f85\u52a9\u8bf4\u660e",toolbar:"\u5de5\u5177\u680f","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..5d038750c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.advanced_dlg',{"link_list":"\u94fe\u63a5\u5217\u8868","link_is_external":"\u60a8\u8f93\u5165\u7684URL\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\uff0c\u662f\u5426\u8981\u52a0\u4e0a\"http://\"\u524d\u7f00\uff1f","link_is_email":"\u8f93\u5165URL\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u52a0\"mailto:\"\u524d\u7f00\uff1f","link_titlefield":"\u6807\u9898","link_target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00","link_target_same":"\u5728\u5f53\u524d\u7a97\u53e3\u6253\u5f00","link_target":"\u6253\u5f00\u65b9\u5f0f","link_url":"\u8d85\u94fe\u63a5URL","link_title":"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","image_align_right":"\u53f3\u5bf9\u9f50","image_align_left":"\u5de6\u5bf9\u9f50","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u5e95\u7aef\u5bf9\u9f50","image_align_middle":"\u5c45\u4e2d\u5bf9\u9f50","image_align_top":"\u9876\u7aef\u5bf9\u9f50","image_align_baseline":"\u5e95\u7ebf","image_align":"\u5bf9\u9f50","image_hspace":"\u6c34\u5e73\u8ddd\u79bb","image_vspace":"\u5782\u76f4\u8ddd\u79bb","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u63cf\u8ff0","image_list":"\u56fe\u7247\u5217\u8868","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247\u94fe\u63a5","image_title":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","charmap_title":"\u9009\u62e9\u81ea\u5b9a\u4e49\u7b26\u53f7","colorpicker_name":"\u540d\u79f0\uff1a","colorpicker_color":"\u989c\u8272\uff1a","colorpicker_named_title":"\u547d\u540d\u989c\u8272","colorpicker_named_tab":"\u547d\u540d\u989c\u8272","colorpicker_palette_title":"\u8c03\u8272\u677f\u989c\u8272","colorpicker_palette_tab":"\u8c03\u8272\u677f","colorpicker_picker_title":"\u989c\u8272\u62fe\u53d6","colorpicker_picker_tab":"\u62fe\u53d6","colorpicker_title":"\u9009\u62e9\u989c\u8272","code_wordwrap":"\u81ea\u52a8\u6362\u884c","code_title":"HTML\u4ee3\u7801\u7f16\u8f91\u5668","anchor_name":"\u951a\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91 \u951a","about_loaded":"\u5df2\u8f7d\u5165\u7684\u63d2\u4ef6","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u63d2\u4ef6","about_plugins":"\u63d2\u4ef6","about_license":"\u8bb8\u53ef\u534f\u8bae","about_help":"\u5e2e\u52a9","about_general":"\u5173\u4e8e","about_title":"\u5173\u4e8eTinyMCE","anchor_invalid":"\u8bf7\u6307\u5b9a\u4e00\u4e2a\u6709\u6548\u7684\u951a\u540d\u79f0\u3002","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-tw.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-tw.js
new file mode 100644
index 000000000..54041ae7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.advanced',{"underline_desc":"\u52a0\u4e0a\u5e95\u7dda (Ctrl U)","italic_desc":"\u8b8a\u6210\u659c\u7dda (Ctrl I)","bold_desc":"\u5b57\u52a0\u7c97 (Ctrl B)",dd:"\u64b0\u5beb\u8aaa\u660e / \u8a3b\u89e3",dt:"\u8853\u8a9e\u5b9a\u7fa9",samp:"\u8a9e\u6cd5\u7bc4\u4f8b",code:"\u8a9e\u6cd5",blockquote:"\u5f15\u7528",h6:"\u6a19\u984c\u6a23\u5f0f 6",h5:"\u6a19\u984c\u6a23\u5f0f 5",h4:"\u6a19\u984c\u6a23\u5f0f 4",h3:"\u6a19\u984c\u6a23\u5f0f 3",h2:"\u6a19\u984c\u6a23\u5f0f 2",h1:"\u6a19\u984c\u6a23\u5f0f 1",pre:"\u7d14\u6587\u5b57",address:"\u4f4f\u5740",div:"Div \u6392\u7248\u5340\u584a",paragraph:"\u6bb5\u843d\u6a23\u5f0f",block:"\u683c\u5f0f",fontdefault:"\u5b57\u9ad4","font_size":"\u6587\u5b57\u5927\u5c0f","style_select":"\u6a23\u5f0f","more_colors":"\u5176\u4ed6\u984f\u8272","toolbar_focus":"\u8f14\u52a9\u529f\u80fd\uff1a\u6309\u4e0b Alt \u8ddf Q \u53ef\u8df3\u5230\u529f\u80fd\u5217\u3001\u6309\u4e0b Alt \u8ddf Z \u8df3\u5230\u6587\u5b57\u7de8\u8f2f\u756b\u9762\u3001\u6309\u4e0b Alt \u8ddf X \u53ef\u8df3\u5230\u8a9e\u6cd5\u7d30\u7bc0\u7684\u90a3\u4e00\u6392",newdocument:"\u60a8\u771f\u7684\u8981\u6e05\u9664\u756b\u9762\u4e0a\u7684\u5167\u5bb9\u55ce\uff1f",path:"\u8a9e\u6cd5\u7d30\u7bc0","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u526a\u4e0b\u3001\u8907\u88fd\u3001\u8cbc\u4e0a\u7684\u529f\u80fd\u3002","blockquote_desc":"\u5f15\u7528","help_desc":"\u8aaa\u660e","newdocument_desc":"\u65b0\u6587\u7ae0","image_props_desc":"\u5716\u7247\u8a2d\u5b9a","paste_desc":"\u8cbc\u4e0a","copy_desc":"\u8907\u88fd","cut_desc":"\u526a\u4e0b","anchor_desc":"\u52a0\u5165 / \u7de8\u8f2f\u9328\u9ede (\u66f8\u7c64)","visualaid_desc":"\u986f\u793a\u96b1\u85cf\u7684\u6771\u897f","charmap_desc":"\u52a0\u5165\u4e00\u500b\u81ea\u5df1\u8a2d\u5b9a\u7684\u6587\u5b57\u7b26\u865f","backcolor_desc":"\u9078\u64c7\u80cc\u666f\u8272","forecolor_desc":"\u9078\u64c7\u6587\u5b57\u984f\u8272","custom1_desc":"\u4f60\u5beb\u7684\u8a3b\u89e3\u5728\u9019\u88e1","removeformat_desc":"\u79fb\u9664\u6587\u5b57\u4e0a\u7684\u6a23\u5f0f\u8207\u683c\u5f0f","hr_desc":"\u52a0\u5165\u4e00\u500b\u6c34\u5e73\u7dda","sup_desc":"\u4e0a\u6a19\u5b57","sub_desc":"\u4e0b\u6a19\u5b57","code_desc":"\u7de8\u8f2f HTML \u8a9e\u6cd5","cleanup_desc":"\u79fb\u9664\u591a\u9918\u7684\u6587\u5b57\u8207\u7a0b\u5f0f\u78bc","image_desc":"\u65b0\u589e / \u7de8\u8f2f\u5716\u7247","unlink_desc":"\u79fb\u9664\u9023\u7d50","link_desc":"\u65b0\u589e / \u7de8\u8f2f\u7db2\u5740\u9023\u7d50","redo_desc":"\u91cd\u4f86\u4e00\u6b21 (Ctrl Y)","undo_desc":"\u5fa9\u539f (Ctrl Z)","indent_desc":"\u7e2e\u6392 (\u589e\u52a0)","outdent_desc":"\u7e2e\u6392 (\u6e1b\u5c11)","numlist_desc":"\u9805\u76ee\u7b26\u865f (\u6709\u6578\u5b57)","bullist_desc":"\u9805\u76ee\u7b26\u865f (\u53ea\u6709\u7b26\u865f)","justifyfull_desc":"\u5206\u6563\u5c0d\u9f4a","justifyright_desc":"\u5411\u53f3\u908a\u5c0d\u9f4a","justifycenter_desc":"\u7f6e\u4e2d\u5c0d\u9f4a","justifyleft_desc":"\u5411\u5c0d\u9f4a\u5de6\u908a","striketrough_desc":"\u522a\u9664\u7dda","help_shortcut":"\u6309\u4e0b ALT F10 \u51fa\u73fe\u5de5\u5177\u5217\uff1b\u6309\u4e0b ALT 0 \u5247\u51fa\u73fe\u8aaa\u660e\u3002","rich_text_area":"\u6587\u5b57\u7de8\u8f2f\u5340","shortcuts_desc":"\u8f14\u52a9\u8aaa\u660e",toolbar:"\u5de5\u5177\u5217","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..46208f90c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.advanced_dlg',{"link_list":"\u9023\u7d50\u6e05\u55ae","link_is_external":"\u60a8\u7684\u7db2\u5740\u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b http:// \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f","link_is_email":"\u60a8\u7684 E-Mail \u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b mailto: \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f","link_titlefield":"\u6a19\u984c","link_target_blank":"\u53e6\u5916\u958b\u65b0\u8996\u7a97","link_target_same":"\u76f4\u63a5\u958b\u555f\u9023\u7d50","link_target":"\u958b\u555f\u65b9\u5f0f","link_url":"\u9023\u7d50 URL","link_title":"\u52a0\u5165 / \u7de8\u8f2f\u7db2\u5740","image_align_right":"\u5411\u53f3\u5c0d\u9f4a","image_align_left":"\u5411\u5de6\u5c0d\u9f4a","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u4e0b\u65b9","image_align_middle":"\u7f6e\u4e2d","image_align_top":"\u4e0a\u65b9","image_align_baseline":"\u57fa\u6e96\u7dda","image_align":"\u5c0d\u9f4a","image_hspace":"\u6c34\u5e73\u8ddd\u96e2","image_vspace":"\u5782\u76f4\u8ddd\u96e2","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u5716\u7247\u8aaa\u660e","image_list":"\u5716\u7247\u6e05\u55ae","image_border":"\u908a\u6846","image_src":"\u5716\u7247\u7db2\u5740\u9023\u7d50","image_title":"\u52a0\u5165 / \u8a2d\u5b9a\u5716\u7247","charmap_title":"\u9078\u64c7\u81ea\u8a02\u7684\u7b26\u865f","colorpicker_name":"\u540d\u7a31\uff1a","colorpicker_color":"\u984f\u8272\uff1a","colorpicker_named_title":"\u8272\u7968\u540d\u7a31","colorpicker_named_tab":"\u8272\u7968\u540d\u7a31","colorpicker_palette_title":"\u8abf\u8272","colorpicker_palette_tab":"\u8abf\u8272\u76e4","colorpicker_picker_title":"\u6309\u4e00\u4e0b\u6ed1\u9f20\u9078\u64c7\u984f\u8272","colorpicker_picker_tab":"\u9078\u64c7","colorpicker_title":"\u9078\u4e00\u500b\u984f\u8272","code_wordwrap":"\u81ea\u52d5\u63db\u884c","code_title":"HTML \u8a9e\u6cd5\u7de8\u8f2f\u5668","anchor_name":"\u9328\u9ede\u540d\u7a31","anchor_title":"\u52a0\u5165 / \u8a2d\u5b9a\u9328\u9ede","about_loaded":"\u5916\u639b\u7a0b\u5f0f\u8f09\u5165\u5b8c\u6210","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u5916\u639b","about_plugins":"\u5916\u639b\u7a0b\u5f0f","about_license":"\u7248\u6b0a\u6388\u6b0a","about_help":"\u8aaa\u660e","about_general":"\u95dc\u65bc","about_title":"\u95dc\u65bc TinyMCE \u9019\u5957\u6587\u5b57\u7de8\u8f2f\u5668","anchor_invalid":"\u8acb\u7528\u82f1\u6587\u6216\u6578\u5b57\u4f5c\u70ba\u9328\u9ede\u7684\u540d\u7a31","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh.js
new file mode 100644
index 000000000..a4cbe64b7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.advanced',{"underline_desc":"\u5e95\u7dda (Ctrl U)","italic_desc":"\u659c\u9ad4 (Ctrl I)","bold_desc":"\u7c97\u9ad4 (Ctrl B)",dd:"\u540d\u8a5e\u63cf\u8ff0",dt:"\u540d\u8a5e\u5b9a\u7fa9",samp:"\u4ee3\u78bc\u7bc4\u4f8b",code:"\u4ee3\u78bc",blockquote:"\u5f15\u7528",h6:"\u6a19\u984c6",h5:"\u6a19\u984c5",h4:"\u6a19\u984c4",h3:"\u6a19\u984c3",h2:"\u6a19\u984c2",h1:"\u6a19\u984c1",pre:"\u9810\u8a2d\u683c\u5f0f",address:"\u5730\u5740",div:"Div",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u9ad4","font_size":"\u5b57\u9ad4\u5927\u5c0f","style_select":"\u6a23\u5f0f","anchor_delta_height":"","link_delta_height":"60","link_delta_width":"40","more_colors":"\u66f4\u591a\u984f\u8272","toolbar_focus":"\u8df3\u7f6e\u5de5\u5177\u5217 - Alt Q, \u8df3\u81f3\u7de8\u8f2f\u6846 - Alt Z, \u8df3\u81f3\u5143\u7d20\u7bc0\u9ede - Alt X.",newdocument:"\u60a8\u537b\u5b9a\u8981\u6e05\u9664\u6240\u6709\u7de8\u8f2f\u5167\u5bb9\u55ce?",path:"\u5143\u7d20\u7bc0\u9ede","clipboard_msg":"Mozilla \u548c Firefox \u4e0d\u652f\u63f4\u8907\u88fd/\u526a\u4e0b/\u8cbc\u4e0a. \n\u60a8\u9700\u8981\u95dc\u65bc\u6b64\u554f\u984c\u66f4\u9032\u4e00\u6b65\u7684\u8cc7\u8a0a\u55ce?","blockquote_desc":"\u5f15\u7528","help_desc":"\u8aaa\u660e","newdocument_desc":"\u958b\u555f\u65b0\u6587\u4ef6","image_props_desc":"\u5716\u7247\u5c6c\u6027","paste_desc":"\u8cbc\u4e0a (Ctrl V)","copy_desc":"\u8907\u88fd (Ctrl C)","cut_desc":"\u526a\u4e0b (Ctrl X)","anchor_desc":"\u63d2\u5165/\u7de8\u8f2f\u9328\u9ede","visualaid_desc":"\u986f\u793a/\u96b1\u85cf\u76ee\u6a19","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u865f","backcolor_desc":"\u80cc\u666f\u984f\u8272","forecolor_desc":"\u5b57\u9ad4\u984f\u8272","custom1_desc":"\u5728\u6b64\u8f38\u5165\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u683c\u5f0f","hr_desc":"\u6c34\u5e73\u7dda","sup_desc":"\u4e0a\u6a19","sub_desc":"\u4e0b\u6a19","code_desc":"\u76f4\u63a5\u7de8\u8f2f HTML \u8a9e\u6cd5","cleanup_desc":"\u6e05\u9664\u683c\u5f0f","image_desc":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","unlink_desc":"\u522a\u9664\u9023\u7d50","link_desc":"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","redo_desc":"\u53d6\u6d88\u5fa9\u539f (Ctrl Y)","undo_desc":"\u5fa9\u539f (Ctrl Z)","indent_desc":"\u589e\u52a0\u7f29\u6392","outdent_desc":"\u51cf\u5c11\u7f29\u6392","numlist_desc":"\u7de8\u865f\u5217\u8868","bullist_desc":"\u9805\u76ee\u5217\u8868","justifyfull_desc":"\u5de6\u53f3\u5c0d\u9f4a","justifyright_desc":"\u9760\u53f3\u5c0d\u9f4a","justifycenter_desc":"\u7f6e\u4e2d\u5c0d\u9f4a","justifyleft_desc":"\u9760\u5de6\u5c0d\u9f4a","striketrough_desc":"\u522a\u9664\u7dda","help_shortcut":"\u6309ALT F10\u5230\u5de5\u5177\u5217.\u6309ALT 0\u5230\u8aaa\u660e","rich_text_area":"\u591a\u6a23\u5f0f\u7de8\u8f2f\u5340","shortcuts_desc":"\u5354\u52a9\u5de5\u5177\u8aaa\u660e",toolbar:"\u5de5\u5177\u5217","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh_dlg.js
new file mode 100644
index 000000000..2e3114853
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.advanced_dlg',{"link_list":"\u9023\u7d50\u6e05\u55ae","link_is_external":"\u60a8\u6240\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u70ba\u5916\u90e8\u9023\u7d50, \u662f\u5426\u9700\u8981\u52a0\u4e0a http:// \u524d\u7db4?","link_is_email":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u96fb\u5b50\u90f5\u4ef6\u4f4d\u5740, \u662f\u5426\u9700\u8981\u52a0\u4e0a mailto: \u524d\u7db4?","link_titlefield":"\u6a19\u984c","link_target_blank":"\u5728\u65b0\u8996\u7a97\u6253\u958b\u9023\u7d50","link_target_same":"\u5728\u76ee\u524d\u8996\u7a97\u6253\u958b\u9023\u7d50","link_target":"\u9023\u7d50\u76ee\u6a19","link_url":"URL \u9023\u7d50","link_title":"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","image_align_right":"\u9760\u53f3","image_align_left":"\u9760\u5de6","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u9760\u4e0b","image_align_middle":"\u7f6e\u4e2d","image_align_top":"\u9760\u4e0a","image_align_baseline":"\u57fa\u6e96\u7dda","image_align":"\u5c0d\u9f4a\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u9593\u8ddd","image_vspace":"\u5782\u76f4\u9593\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u5716\u7247\u8aaa\u660e","image_list":"\u5716\u7247\u6e05\u55ae","image_border":"\u908a\u6846","image_src":"\u5716\u7247 URL \u9023\u7d50","image_title":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","charmap_title":"\u63d2\u5165\u81ea\u8a02\u7b26\u865f","colorpicker_name":"\u540d\u7a31:","colorpicker_color":"\u984f\u8272:","colorpicker_named_title":"\u5e38\u7528\u984f\u8272","colorpicker_named_tab":"\u5e38\u7528\u984f\u8272","colorpicker_palette_title":"WEB\u984f\u8272","colorpicker_palette_tab":"\u5b89\u5168\u8272","colorpicker_picker_title":"\u8abf\u8272\u76e4","colorpicker_picker_tab":"\u8abf\u8272\u76e4","colorpicker_title":"\u9078\u64c7\u984f\u8272","code_wordwrap":"\u81ea\u52d5\u63db\u884c","code_title":"HTML \u8a9e\u6cd5\u7de8\u8f2f\u5668","anchor_name":"\u9328\u9ede\u540d\u7a31","anchor_title":"\u63d2\u5165/\u7de8\u8f2f\u9328\u9ede","about_loaded":"\u5df2\u555f\u7528\u7684\u63d2\u4ef6","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u63d2\u4ef6","about_plugins":"\u63d2\u4ef6","about_license":"\u6388\u6b0a","about_help":"\u8aaa\u660e","about_general":"\u95dc\u65bc","about_title":"\u95dc\u65bc TinyMCE","charmap_usage":"\u4f7f\u7528\u5de6\u53f3\u65b9\u5411\u9375\u5207\u63db\u3002","anchor_invalid":"\u8acb\u8f38\u5165\u6709\u6548\u7684\u9328\u9ede\u540d\u7a31.","accessibility_help":"\u5354\u52a9\u5de5\u5177\u8aaa\u660e","accessibility_usage_title":"\u4e00\u822c\u7528\u9014","invalid_color_value":"\u9519\u8bef\u7684\u989c\u8272\u503c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zu.js
new file mode 100644
index 000000000..5bef23bfa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.advanced',{"underline_desc":"\u5e95\u7ebf(Ctrl+U)","italic_desc":"\u659c\u4f53(Ctrl+I)","bold_desc":"\u9ed1\u4f53(Ctrl+B)",dd:"\u540d\u8bcd\u89e3\u91ca",dt:"\u540d\u8bcd\u5b9a\u4e49",samp:"\u4ee3\u7801\u6837\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"\u6807\u98986",h5:"\u6807\u98985",h4:"\u6807\u98984",h3:"\u6807\u98983",h2:"\u6807\u98982",h1:"\u6807\u98981",pre:"\u65e0\u5f0f\u6837\u7f16\u6392",address:"\u5730\u5740",div:"DIV\u5c42",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u4f53","font_size":"\u5b57\u4f53\u5927\u5c0f","style_select":"\u6837\u5f0f","link_delta_height":"60","link_delta_width":"40","more_colors":"\u66f4\u591a\u989c\u8272","toolbar_focus":"\u5de5\u5177\u6309\u94ae- Alt+Q,\u7f16\u8f91\u5668- Alt-Z,\u5143\u4ef6\u4f4d\u7f6e- Alt-X",newdocument:"\u60a8\u786e\u8ba4\u8981\u6e05\u9664\u5168\u90e8\u5185\u5bb9\u5417\uff1f",path:"\u4f4d\u7f6e","clipboard_msg":"\u590d\u5236\u3001\u526a\u4e0b\u53ca\u8d34\u4e0a\u529f\u80fd\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u3002 \n\u662f\u5426\u9700\u8981\u4e86\u89e3\u66f4\u591a\u6709\u5173\u6b64\u95ee\u9898\u7684\u8d44\u8baf\uff1f","blockquote_desc":"\u5f15\u7528","help_desc":"\u8bf4\u660e","newdocument_desc":"\u65b0\u6587\u4ef6","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u8d34\u4e0a","copy_desc":"\u590d\u5236","cut_desc":"\u526a\u4e0b","anchor_desc":"\u63d2\u5165/\u7f16\u8f91\u951a\u70b9","visualaid_desc":"\u5f00\u5173\u683c\u7ebf/\u9690\u85cf\u5143\u4ef6","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","backcolor_desc":"\u9009\u62e9\u80cc\u666f\u989c\u8272","forecolor_desc":"\u9009\u62e9\u6587\u5b57\u989c\u8272","custom1_desc":"\u5728\u6b64\u8f93\u5165\u60a8\u7684\u81ea\u8ba2\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u6837\u5f0f","hr_desc":"\u63d2\u5165\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"\u7f16\u8f91HTML\u539f\u59cb\u7a0b\u5f0f\u7801","cleanup_desc":"\u6e05\u9664\u591a\u4f59\u4ee3\u7801","image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","unlink_desc":"\u53d6\u6d88\u8fde\u7ed3","link_desc":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","redo_desc":"\u91cd\u505a(Ctrl+Y)","undo_desc":"\u64a4\u9500(Ctrl+Z)","indent_desc":"\u589e\u52a0\u7f29\u6392","outdent_desc":"\u51cf\u5c11\u7f29\u6392","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u4e13\u6848\u7b26\u53f7","justifyfull_desc":"\u4e24\u7aef\u5bf9\u9f50","justifyright_desc":"\u53f3\u5bf9\u9f50","justifycenter_desc":"\u5c45\u4e2d","justifyleft_desc":"\u5de6\u5bf9\u9f50","striketrough_desc":"\u5220\u9664\u7ebf","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zu_dlg.js
new file mode 100644
index 000000000..753febb13
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.advanced_dlg',{"link_list":"\u8fde\u7ed3\u6e05\u5355","link_is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u65b9\u52a0\u5165http://\uff1f","link_is_email":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u4f4d\u5740\u524d\u65b9\u52a0\u5165mailto:\uff1f","link_titlefield":"\u6807\u9898","link_target_blank":"\u5c06\u8fde\u7ed3\u7f51\u5740\u5f00\u5728\u65b0\u7a97\u53e3","link_target_same":"\u5c06\u8fde\u7ed3\u7f51\u5740\u5f00\u5728\u6b64\u89c6\u7a97","link_target":"\u76ee\u6807","link_url":"\u8fde\u7ed3\u4f4d\u5740","link_title":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","image_align_right":"\u9760\u53f3\u5bf9\u9f50","image_align_left":"\u9760\u5de6\u5bf9\u9f50","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u5e95\u90e8\u5bf9\u9f50","image_align_middle":"\u5c45\u4e2d\u5bf9\u9f50","image_align_top":"\u4e0a\u65b9\u5bf9\u9f50","image_align_baseline":"\u57fa\u7ebf","image_align":"\u5bf9\u9f50\u65b9\u5f0f","image_hspace":"\u6c34\u51c6\u95f4\u8ddd","image_vspace":"\u5782\u76f4\u95f4\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u8bf4\u660e","image_list":"\u56fe\u7247\u6e05\u5355","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247\u4f4d\u5740","image_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","colorpicker_name":"\u540d\u79f0:","colorpicker_color":"\u989c\u8272:","colorpicker_named_title":"\u9884\u8bbe\u7684\u989c\u8272","colorpicker_named_tab":"\u9884\u8bbe\u7684","colorpicker_palette_title":"\u8272\u76d8\u989c\u8272","colorpicker_palette_tab":"\u8272\u76d8","colorpicker_picker_title":"\u9009\u8272\u5668","colorpicker_picker_tab":"\u9009\u8272\u5668","colorpicker_title":"\u6311\u9009\u989c\u8272","code_wordwrap":"\u6574\u5b57\u6362\u884c","code_title":"HTML\u539f\u59cb\u7a0b\u5f0f\u7801\u7f16\u8f91\u5668","anchor_name":"\u951a\u70b9\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91\u951a\u70b9","about_loaded":"\u5df2\u8f7d\u5165\u7684\u5916\u6302\u7a0b\u5f0f","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u5916\u6302\u7a0b\u5f0f","about_plugins":"\u5168\u90e8\u5916\u6302\u7a0b\u5f0f","about_license":"\u6388\u6743","about_help":"\u5e2e\u52a9","about_general":"\u5173\u4e8e","about_title":"\u5173\u4e8eTinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/link.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/link.htm
new file mode 100644
index 000000000..5d9dea9b8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/link.htm
@@ -0,0 +1,57 @@
+<!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>{#advanced_dlg.link_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/form_utils.js"></script>
+ <script type="text/javascript" src="../../utils/validate.js"></script>
+ <script type="text/javascript" src="js/link.js"></script>
+</head>
+<body id="link" style="display: none">
+<form onsubmit="LinkDialog.update();return false;" action="#">
+ <div class="tabs">
+ <ul>
+ <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>
+ </ul>
+ </div>
+
+ <div class="panel_wrapper">
+ <div id="general_panel" class="panel current">
+ <table border="0" cellpadding="4" cellspacing="0">
+ <tr>
+ <td class="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>
+ <td><table border="0" cellspacing="0" cellpadding="0">
+ <tr>
+ <td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td>
+ <td id="hrefbrowsercontainer">&nbsp;</td>
+ </tr>
+ </table></td>
+ </tr>
+ <tr>
+ <td><label for="link_list">{#advanced_dlg.link_list}</label></td>
+ <td><select id="link_list" name="link_list" onchange="document.getElementById('href').value=this.options[this.selectedIndex].value;"></select></td>
+ </tr>
+ <tr>
+ <td><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>
+ <td><select id="target_list" name="target_list"></select></td>
+ </tr>
+ <tr>
+ <td class="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>
+ <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>
+ </tr>
+ <tr>
+ <td><label for="class_list">{#class_name}</label></td>
+ <td><select id="class_list" name="class_list"></select></td>
+ </tr>
+ </table>
+ </div>
+ </div>
+
+ <div class="mceActionPanel">
+ <input type="submit" id="insert" name="insert" value="{#insert}" />
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+</form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/shortcuts.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/shortcuts.htm
new file mode 100644
index 000000000..20ec2f5a3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/shortcuts.htm
@@ -0,0 +1,47 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>{#advanced_dlg.accessibility_help}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript">tinyMCEPopup.requireLangPack();</script>
+ </head>
+ <body id="content">
+ <h1>{#advanced_dlg.accessibility_usage_title}</h1>
+ <h2>Toolbars</h2>
+ <p>Press ALT-F10 to move focus to the toolbars. Navigate through the buttons using the arrow keys.
+ Press enter to activate a button and return focus to the editor.
+ Press escape to return focus to the editor without performing any actions.</p>
+
+ <h2>Status Bar</h2>
+ <p>To access the editor status bar, press ALT-F11. Use the left and right arrow keys to navigate between elements in the path.
+ Press enter or space to select an element. Press escape to return focus to the editor without changing the selection.</p>
+
+ <h2>Context Menu</h2>
+ <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.
+ To close submenus press the left arrow key. Press escape to close the context menu.</p>
+
+ <h1>Keyboard Shortcuts</h1>
+ <table>
+ <thead>
+ <tr>
+ <th>Keystroke</th>
+ <th>Function</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Control-B</td><td>Bold</td>
+ </tr>
+ <tr>
+ <td>Control-I</td><td>Italic</td>
+ </tr>
+ <tr>
+ <td>Control-Z</td><td>Undo</td>
+ </tr>
+ <tr>
+ <td>Control-Y</td><td>Redo</td>
+ </tr>
+ </tbody>
+ </table>
+ </body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css
new file mode 100644
index 000000000..2fd94a1f9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/content.css
@@ -0,0 +1,50 @@
+body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}
+body {background:#FFF;}
+body.mceForceColors {background:#FFF; color:#000;}
+body.mceBrowserDefaults {background:transparent; color:inherit; font-size:inherit; font-family:inherit;}
+h1 {font-size: 2em}
+h2 {font-size: 1.5em}
+h3 {font-size: 1.17em}
+h4 {font-size: 1em}
+h5 {font-size: .83em}
+h6 {font-size: .75em}
+.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}
+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}
+span.mceItemNbsp {background: #DDD}
+td.mceSelected, th.mceSelected {background-color:#3399ff !important}
+img {border:0;}
+table, img, hr, .mceItemAnchor {cursor:default}
+table td, table th {cursor:text}
+ins {border-bottom:1px solid green; text-decoration: none; color:green}
+del {color:red; text-decoration:line-through}
+cite {border-bottom:1px dashed blue}
+acronym {border-bottom:1px dotted #CCC; cursor:help}
+abbr {border-bottom:1px dashed #CCC; cursor:help}
+
+/* IE */
+* html body {
+scrollbar-3dlight-color:#F0F0EE;
+scrollbar-arrow-color:#676662;
+scrollbar-base-color:#F0F0EE;
+scrollbar-darkshadow-color:#DDD;
+scrollbar-face-color:#E0E0DD;
+scrollbar-highlight-color:#F0F0EE;
+scrollbar-shadow-color:#F0F0EE;
+scrollbar-track-color:#F5F5F5;
+}
+
+img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}
+font[face=mceinline] {font-family:inherit !important}
+*[contentEditable]:focus {outline:0}
+
+.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc}
+.mceItemShockWave {background-image:url(../../img/shockwave.gif)}
+.mceItemFlash {background-image:url(../../img/flash.gif)}
+.mceItemQuickTime {background-image:url(../../img/quicktime.gif)}
+.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)}
+.mceItemRealMedia {background-image:url(../../img/realmedia.gif)}
+.mceItemVideo {background-image:url(../../img/video.gif)}
+.mceItemAudio {background-image:url(../../img/video.gif)}
+.mceItemEmbeddedAudio {background-image:url(../../img/video.gif)}
+.mceItemIframe {background-image:url(../../img/iframe.gif)}
+.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;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css
new file mode 100644
index 000000000..f01222650
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/dialog.css
@@ -0,0 +1,117 @@
+/* Generic */
+body {
+font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;
+scrollbar-3dlight-color:#F0F0EE;
+scrollbar-arrow-color:#676662;
+scrollbar-base-color:#F0F0EE;
+scrollbar-darkshadow-color:#DDDDDD;
+scrollbar-face-color:#E0E0DD;
+scrollbar-highlight-color:#F0F0EE;
+scrollbar-shadow-color:#F0F0EE;
+scrollbar-track-color:#F5F5F5;
+background:#F0F0EE;
+padding:0;
+margin:8px 8px 0 8px;
+}
+
+html {background:#F0F0EE;}
+td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
+textarea {resize:none;outline:none;}
+a:link, a:visited {color:black;}
+a:hover {color:#2B6FB6;}
+.nowrap {white-space: nowrap}
+
+/* Forms */
+fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}
+legend {color:#2B6FB6; font-weight:bold;}
+label.msg {display:none;}
+label.invalid {color:#EE0000; display:inline;}
+input.invalid {border:1px solid #EE0000;}
+input {background:#FFF; border:1px solid #CCC;}
+input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
+input, select, textarea {border:1px solid #808080;}
+input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
+input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
+.input_noborder {border:0;}
+
+/* Buttons */
+#insert, #cancel, input.button, .updateButton {
+border:0; margin:0; padding:0;
+font-weight:bold;
+width:94px; height:26px;
+background:url(img/buttons.png) 0 -26px;
+cursor:pointer;
+padding-bottom:2px;
+float:left;
+}
+
+#insert {background:url(img/buttons.png) 0 -52px}
+#cancel {background:url(img/buttons.png) 0 0; float:right}
+
+/* Browse */
+a.pickcolor, a.browse {text-decoration:none}
+a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
+.mceOldBoxModel a.browse span {width:22px; height:20px;}
+a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
+a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
+a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
+a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
+.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
+a.pickcolor:hover span {background-color:#B2BBD0;}
+a.pickcolor:hover span.disabled {}
+
+/* Charmap */
+table.charmap {border:1px solid #AAA; text-align:center}
+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;}
+#charmap a {display:block; color:#000; text-decoration:none; border:0}
+#charmap a:hover {background:#CCC;color:#2B6FB6}
+#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}
+#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
+
+/* Source */
+.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
+.mceActionPanel {margin-top:5px;}
+
+/* Tabs classes */
+.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;}
+.tabs ul {margin:0; padding:0; list-style:none;}
+.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;}
+.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}
+.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}
+.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;}
+.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}
+.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}
+
+/* Panels */
+.panel_wrapper div.panel {display:none;}
+.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
+.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}
+
+/* Columns */
+.column {float:left;}
+.properties {width:100%;}
+.properties .column1 {}
+.properties .column2 {text-align:left;}
+
+/* Titles */
+h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
+h3 {font-size:14px;}
+.title {font-size:12px; font-weight:bold; color:#2B6FB6;}
+
+/* Dialog specific */
+#link .panel_wrapper, #link div.current {height:125px;}
+#image .panel_wrapper, #image div.current {height:200px;}
+#plugintable thead {font-weight:bold; background:#DDD;}
+#plugintable, #about #plugintable td {border:1px solid #919B9C;}
+#plugintable {width:96%; margin-top:10px;}
+#pluginscontainer {height:290px; overflow:auto;}
+#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
+#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
+#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
+#colorpicker #light div {overflow:hidden;}
+#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}
+#colorpicker .panel_wrapper div.current {height:175px;}
+#colorpicker #namedcolors {width:150px;}
+#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
+#colorpicker #colornamecontainer {margin-top:5px;}
+#colorpicker #picker_panel fieldset {margin:auto;width:325px;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png
new file mode 100644
index 000000000..1e53560e0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/buttons.png
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif
new file mode 100644
index 000000000..d2f93671c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/items.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif
new file mode 100644
index 000000000..85e31dfb2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif
new file mode 100644
index 000000000..adfdddccd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif
new file mode 100644
index 000000000..5bb90fd6a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/progress.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif
new file mode 100644
index 000000000..06812cb41
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css
new file mode 100644
index 000000000..2b7c2a59a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/default/ui.css
@@ -0,0 +1,214 @@
+/* Reset */
+.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}
+.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}
+.defaultSkin table td {vertical-align:middle}
+
+/* Containers */
+.defaultSkin table {direction:ltr;background:transparent}
+.defaultSkin iframe {display:block;}
+.defaultSkin .mceToolbar {height:26px}
+.defaultSkin .mceLeft {text-align:left}
+.defaultSkin .mceRight {text-align:right}
+
+/* External */
+.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;}
+.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}
+.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}
+
+/* Layout */
+.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC}
+.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC}
+.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC}
+.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;}
+.defaultSkin td.mceToolbar {background:#F0F0EE; padding-top:1px; vertical-align:top}
+.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC}
+.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}
+.defaultSkin .mceStatusbar div {float:left; margin:2px}
+.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}
+.defaultSkin .mceStatusbar a:hover {text-decoration:underline}
+.defaultSkin table.mceToolbar {margin-left:3px}
+.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px}
+.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
+.defaultSkin td.mceCenter {text-align:center;}
+.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;}
+.defaultSkin td.mceRight table {margin:0 0 0 auto;}
+
+/* Button */
+.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px}
+.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}
+.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0}
+.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
+.defaultSkin .mceButtonLabeled {width:auto}
+.defaultSkin .mceButtonLabeled span.mceIcon {float:left}
+.defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}
+.defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888}
+
+/* Separator */
+.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px}
+
+/* ListBox */
+.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block}
+.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}
+.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}
+.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}
+.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}
+.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}
+.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}
+.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px}
+.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}
+.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}
+
+/* SplitButton */
+.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr}
+.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block}
+.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;}
+.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);}
+.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;}
+.defaultSkin .mceSplitButton span.mceOpen {display:none}
+.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0}
+.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;}
+.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
+.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}
+.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;}
+
+/* ColorSplitButton */
+.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}
+.defaultSkin .mceColorSplitMenu td {padding:2px}
+.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}
+.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
+.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}
+.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}
+.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A}
+.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}
+.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}
+
+/* Menu */
+.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}
+.defaultSkin .mceNoIcons span.mceIcon {width:0;}
+.defaultSkin .mceNoIcons a .mceText {padding-left:10px}
+.defaultSkin .mceMenu table {background:#FFF}
+.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block}
+.defaultSkin .mceMenu td {height:20px}
+.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0}
+.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}
+.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px}
+.defaultSkin .mceMenu pre.mceText {font-family:Monospace}
+.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}
+.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}
+.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px}
+.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}
+.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}
+.defaultSkin .mceMenuItemDisabled .mceText {color:#888}
+.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}
+.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}
+.defaultSkin .mceMenu span.mceMenuLine {display:none}
+.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}
+.defaultSkin .mceMenuItem td, .defaultSkin .mceMenuItem th {line-height: normal}
+
+/* Progress,Resize */
+.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}
+.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}
+
+/* Formats */
+.defaultSkin .mce_formatPreview a {font-size:10px}
+.defaultSkin .mce_p span.mceText {}
+.defaultSkin .mce_address span.mceText {font-style:italic}
+.defaultSkin .mce_pre span.mceText {font-family:monospace}
+.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}
+.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}
+.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}
+.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}
+.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}
+.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}
+
+/* Theme */
+.defaultSkin span.mce_bold {background-position:0 0}
+.defaultSkin span.mce_italic {background-position:-60px 0}
+.defaultSkin span.mce_underline {background-position:-140px 0}
+.defaultSkin span.mce_strikethrough {background-position:-120px 0}
+.defaultSkin span.mce_undo {background-position:-160px 0}
+.defaultSkin span.mce_redo {background-position:-100px 0}
+.defaultSkin span.mce_cleanup {background-position:-40px 0}
+.defaultSkin span.mce_bullist {background-position:-20px 0}
+.defaultSkin span.mce_numlist {background-position:-80px 0}
+.defaultSkin span.mce_justifyleft {background-position:-460px 0}
+.defaultSkin span.mce_justifyright {background-position:-480px 0}
+.defaultSkin span.mce_justifycenter {background-position:-420px 0}
+.defaultSkin span.mce_justifyfull {background-position:-440px 0}
+.defaultSkin span.mce_anchor {background-position:-200px 0}
+.defaultSkin span.mce_indent {background-position:-400px 0}
+.defaultSkin span.mce_outdent {background-position:-540px 0}
+.defaultSkin span.mce_link {background-position:-500px 0}
+.defaultSkin span.mce_unlink {background-position:-640px 0}
+.defaultSkin span.mce_sub {background-position:-600px 0}
+.defaultSkin span.mce_sup {background-position:-620px 0}
+.defaultSkin span.mce_removeformat {background-position:-580px 0}
+.defaultSkin span.mce_newdocument {background-position:-520px 0}
+.defaultSkin span.mce_image {background-position:-380px 0}
+.defaultSkin span.mce_help {background-position:-340px 0}
+.defaultSkin span.mce_code {background-position:-260px 0}
+.defaultSkin span.mce_hr {background-position:-360px 0}
+.defaultSkin span.mce_visualaid {background-position:-660px 0}
+.defaultSkin span.mce_charmap {background-position:-240px 0}
+.defaultSkin span.mce_paste {background-position:-560px 0}
+.defaultSkin span.mce_copy {background-position:-700px 0}
+.defaultSkin span.mce_cut {background-position:-680px 0}
+.defaultSkin span.mce_blockquote {background-position:-220px 0}
+.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0}
+.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0}
+.defaultSkin span.mce_forecolorpicker {background-position:-720px 0}
+.defaultSkin span.mce_backcolorpicker {background-position:-760px 0}
+
+/* Plugins */
+.defaultSkin span.mce_advhr {background-position:-0px -20px}
+.defaultSkin span.mce_ltr {background-position:-20px -20px}
+.defaultSkin span.mce_rtl {background-position:-40px -20px}
+.defaultSkin span.mce_emotions {background-position:-60px -20px}
+.defaultSkin span.mce_fullpage {background-position:-80px -20px}
+.defaultSkin span.mce_fullscreen {background-position:-100px -20px}
+.defaultSkin span.mce_iespell {background-position:-120px -20px}
+.defaultSkin span.mce_insertdate {background-position:-140px -20px}
+.defaultSkin span.mce_inserttime {background-position:-160px -20px}
+.defaultSkin span.mce_absolute {background-position:-180px -20px}
+.defaultSkin span.mce_backward {background-position:-200px -20px}
+.defaultSkin span.mce_forward {background-position:-220px -20px}
+.defaultSkin span.mce_insert_layer {background-position:-240px -20px}
+.defaultSkin span.mce_insertlayer {background-position:-260px -20px}
+.defaultSkin span.mce_movebackward {background-position:-280px -20px}
+.defaultSkin span.mce_moveforward {background-position:-300px -20px}
+.defaultSkin span.mce_media {background-position:-320px -20px}
+.defaultSkin span.mce_nonbreaking {background-position:-340px -20px}
+.defaultSkin span.mce_pastetext {background-position:-360px -20px}
+.defaultSkin span.mce_pasteword {background-position:-380px -20px}
+.defaultSkin span.mce_selectall {background-position:-400px -20px}
+.defaultSkin span.mce_preview {background-position:-420px -20px}
+.defaultSkin span.mce_print {background-position:-440px -20px}
+.defaultSkin span.mce_cancel {background-position:-460px -20px}
+.defaultSkin span.mce_save {background-position:-480px -20px}
+.defaultSkin span.mce_replace {background-position:-500px -20px}
+.defaultSkin span.mce_search {background-position:-520px -20px}
+.defaultSkin span.mce_styleprops {background-position:-560px -20px}
+.defaultSkin span.mce_table {background-position:-580px -20px}
+.defaultSkin span.mce_cell_props {background-position:-600px -20px}
+.defaultSkin span.mce_delete_table {background-position:-620px -20px}
+.defaultSkin span.mce_delete_col {background-position:-640px -20px}
+.defaultSkin span.mce_delete_row {background-position:-660px -20px}
+.defaultSkin span.mce_col_after {background-position:-680px -20px}
+.defaultSkin span.mce_col_before {background-position:-700px -20px}
+.defaultSkin span.mce_row_after {background-position:-720px -20px}
+.defaultSkin span.mce_row_before {background-position:-740px -20px}
+.defaultSkin span.mce_merge_cells {background-position:-760px -20px}
+.defaultSkin span.mce_table_props {background-position:-980px -20px}
+.defaultSkin span.mce_row_props {background-position:-780px -20px}
+.defaultSkin span.mce_split_cells {background-position:-800px -20px}
+.defaultSkin span.mce_template {background-position:-820px -20px}
+.defaultSkin span.mce_visualchars {background-position:-840px -20px}
+.defaultSkin span.mce_abbr {background-position:-860px -20px}
+.defaultSkin span.mce_acronym {background-position:-880px -20px}
+.defaultSkin span.mce_attribs {background-position:-900px -20px}
+.defaultSkin span.mce_cite {background-position:-920px -20px}
+.defaultSkin span.mce_del {background-position:-940px -20px}
+.defaultSkin span.mce_ins {background-position:-960px -20px}
+.defaultSkin span.mce_pagebreak {background-position:0 -40px}
+.defaultSkin span.mce_restoredraft {background-position:-20px -40px}
+.defaultSkin span.mce_spellchecker {background-position:-540px -20px}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css
new file mode 100644
index 000000000..cbce6c6a2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/content.css
@@ -0,0 +1,24 @@
+body, td, pre { margin:8px;}
+body.mceForceColors {background:#FFF; color:#000;}
+h1 {font-size: 2em}
+h2 {font-size: 1.5em}
+h3 {font-size: 1.17em}
+h4 {font-size: 1em}
+h5 {font-size: .83em}
+h6 {font-size: .75em}
+.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}
+a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;}
+span.mceItemNbsp {background: #DDD}
+td.mceSelected, th.mceSelected {background-color:#3399ff !important}
+img {border:0;}
+table, img, hr, .mceItemAnchor {cursor:default}
+table td, table th {cursor:text}
+ins {border-bottom:1px solid green; text-decoration: none; color:green}
+del {color:red; text-decoration:line-through}
+cite {border-bottom:1px dashed blue}
+acronym {border-bottom:1px dotted #CCC; cursor:help}
+abbr {border-bottom:1px dashed #CCC; cursor:help}
+
+img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}
+font[face=mceinline] {font-family:inherit !important}
+*[contentEditable]:focus {outline:0}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css
new file mode 100644
index 000000000..b2ed097cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/dialog.css
@@ -0,0 +1,105 @@
+/* Generic */
+body {
+font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;
+background:#F0F0EE;
+color: black;
+padding:0;
+margin:8px 8px 0 8px;
+}
+
+html {background:#F0F0EE; color:#000;}
+td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
+textarea {resize:none;outline:none;}
+a:link, a:visited {color:black;background-color:transparent;}
+a:hover {color:#2B6FB6;background-color:transparent;}
+.nowrap {white-space: nowrap}
+
+/* Forms */
+fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}
+legend {color:#2B6FB6; font-weight:bold;}
+label.msg {display:none;}
+label.invalid {color:#EE0000; display:inline;background-color:transparent;}
+input.invalid {border:1px solid #EE0000;background-color:transparent;}
+input {background:#FFF; border:1px solid #CCC;color:black;}
+input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
+input, select, textarea {border:1px solid #808080;}
+input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
+input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
+.input_noborder {border:0;}
+
+/* Buttons */
+#insert, #cancel, input.button, .updateButton {
+font-weight:bold;
+width:94px; height:23px;
+cursor:pointer;
+padding-bottom:2px;
+float:left;
+}
+
+#cancel {float:right}
+
+/* Browse */
+a.pickcolor, a.browse {text-decoration:none}
+a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
+.mceOldBoxModel a.browse span {width:22px; height:20px;}
+a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
+a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
+a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
+a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
+.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
+a.pickcolor:hover span {background-color:#B2BBD0;}
+a.pickcolor:hover span.disabled {}
+
+/* Charmap */
+table.charmap {border:1px solid #AAA; text-align:center}
+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;}
+#charmap a {display:block; color:#000; text-decoration:none; border:0}
+#charmap a:hover {background:#CCC;color:#2B6FB6}
+#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}
+#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
+
+/* Source */
+.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
+.mceActionPanel {margin-top:5px;}
+
+/* Tabs classes */
+.tabs {width:100%; height:18px; line-height:normal;}
+.tabs ul {margin:0; padding:0; list-style:none;}
+.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;}
+.tabs li.current {font-weight: bold; margin-right:2px;}
+.tabs span {float:left; display:block; padding:0px 10px 0 0;}
+.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}
+.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}
+
+/* Panels */
+.panel_wrapper div.panel {display:none;}
+.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
+.panel_wrapper {border:1px solid #919B9C; padding:10px; padding-top:5px; clear:both; background:white;}
+
+/* Columns */
+.column {float:left;}
+.properties {width:100%;}
+.properties .column1 {}
+.properties .column2 {text-align:left;}
+
+/* Titles */
+h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
+h3 {font-size:14px;}
+.title {font-size:12px; font-weight:bold; color:#2B6FB6;}
+
+/* Dialog specific */
+#link .panel_wrapper, #link div.current {height:125px;}
+#image .panel_wrapper, #image div.current {height:200px;}
+#plugintable thead {font-weight:bold; background:#DDD;}
+#plugintable, #about #plugintable td {border:1px solid #919B9C;}
+#plugintable {width:96%; margin-top:10px;}
+#pluginscontainer {height:290px; overflow:auto;}
+#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
+#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
+#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
+#colorpicker #light div {overflow:hidden;}
+#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}
+#colorpicker .panel_wrapper div.current {height:175px;}
+#colorpicker #namedcolors {width:150px;}
+#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
+#colorpicker #colornamecontainer {margin-top:5px;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css
new file mode 100644
index 000000000..a2cfcc393
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/highcontrast/ui.css
@@ -0,0 +1,102 @@
+/* Reset */
+.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;}
+.highcontrastSkin a:hover, .highcontrastSkin a:link, .highcontrastSkin a:visited, .highcontrastSkin a:active {text-decoration:none; font-weight:normal; cursor:default;}
+.highcontrastSkin table td {vertical-align:middle}
+
+.highcontrastSkin .mceIconOnly {display: block !important;}
+
+/* External */
+.highcontrastSkin .mceExternalToolbar {position:absolute; border:1px solid; border-bottom:0; display:none; background-color: white;}
+.highcontrastSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}
+.highcontrastSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px;}
+
+/* Layout */
+.highcontrastSkin table.mceLayout {border: 1px solid;}
+.highcontrastSkin .mceIframeContainer {border-top:1px solid; border-bottom:1px solid}
+.highcontrastSkin .mceStatusbar a:hover {text-decoration:underline}
+.highcontrastSkin .mceStatusbar {display:block; line-height:1.5em; overflow:visible;}
+.highcontrastSkin .mceStatusbar div {float:left}
+.highcontrastSkin .mceStatusbar a.mceResize {display:block; float:right; width:20px; height:20px; cursor:se-resize; outline:0}
+
+.highcontrastSkin .mceToolbar td { display: inline-block; float: left;}
+.highcontrastSkin .mceToolbar tr { display: block;}
+.highcontrastSkin .mceToolbar table { display: block; }
+
+/* Button */
+
+.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;}
+.highcontrastSkin .mceButton .mceVoiceLabel { height: 100%; vertical-align: center; line-height: 2em}
+.highcontrastSkin .mceButtonDisabled .mceVoiceLabel { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);}
+.highcontrastSkin .mceButtonActive, .highcontrastSkin .mceButton:focus, .highcontrastSkin .mceButton:active { border: 5px solid; padding: 1px 6px;-webkit-focus-ring-color:none;outline:none;}
+
+/* Separator */
+.highcontrastSkin .mceSeparator {display:block; width:16px; height:26px;}
+
+/* ListBox */
+.highcontrastSkin .mceListBox { display: block; margin:2px;-webkit-focus-ring-color:none;outline:none;}
+.highcontrastSkin .mceListBox .mceText {padding: 5px 6px; line-height: 2em; width: 15ex; overflow: hidden;}
+.highcontrastSkin .mceListBoxDisabled .mceText { opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60);}
+.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;}
+.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;}
+.highcontrastSkin .mceListBox:focus a.mceText, .highcontrastSkin .mceListBox:active a.mceText { border-width: 5px; padding: 1px 10px 1px 6px;}
+.highcontrastSkin .mceListBox:focus a.mceOpen, .highcontrastSkin .mceListBox:active a.mceOpen { border-width: 5px; padding: 1px 0px 1px 4px;}
+
+.highcontrastSkin .mceListBoxMenu {overflow-y:auto}
+
+/* SplitButton */
+.highcontrastSkin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
+
+.highcontrastSkin .mceSplitButton { border-collapse: collapse; margin: 2px; height: 2em; line-height: 2em;-webkit-focus-ring-color:none;outline:none;}
+.highcontrastSkin .mceSplitButton td { display: table-cell; float: none; margin: 0; padding: 0; height: 2em;}
+.highcontrastSkin .mceSplitButton tr { display: table-row; }
+.highcontrastSkin table.mceSplitButton { display: table; }
+.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;}
+.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;}
+.highcontrastSkin .mceSplitButton .mceVoiceLabel { height: 2em; vertical-align: center; line-height: 2em; }
+.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;}
+.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;}
+
+/* Menu */
+.highcontrastSkin .mceNoIcons span.mceIcon {width:0;}
+.highcontrastSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid; }
+.highcontrastSkin .mceMenu table {background:white; color: black}
+.highcontrastSkin .mceNoIcons a .mceText {padding-left:10px}
+.highcontrastSkin .mceMenu a, .highcontrastSkin .mceMenu span, .highcontrastSkin .mceMenu {display:block;background:white; color: black}
+.highcontrastSkin .mceMenu td {height:2em}
+.highcontrastSkin .mceMenu a {position:relative;padding:3px 0 4px 0; display: block;}
+.highcontrastSkin .mceMenu .mceText {position:relative; display:block; cursor:default; margin:0; padding:0 25px 0 25px;}
+.highcontrastSkin .mceMenu pre.mceText {font-family:Monospace}
+.highcontrastSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:26px;}
+.highcontrastSkin td.mceMenuItemSeparator {border-top:1px solid; height:1px}
+.highcontrastSkin .mceMenuItemTitle a {border:0; border-bottom:1px solid}
+.highcontrastSkin .mceMenuItemTitle span.mceText {font-weight:bold; padding-left:4px}
+.highcontrastSkin .mceNoIcons .mceMenuItemSelected span.mceText:before {content: "\2713\A0";}
+.highcontrastSkin .mceMenu span.mceMenuLine {display:none}
+.highcontrastSkin .mceMenuItemSub a .mceText:after {content: "\A0\25B8"}
+.highcontrastSkin .mceMenuItem td, .highcontrastSkin .mceMenuItem th {line-height: normal}
+
+/* ColorSplitButton */
+.highcontrastSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid; color: #000}
+.highcontrastSkin .mceColorSplitMenu td {padding:2px}
+.highcontrastSkin .mceColorSplitMenu a {display:block; width:16px; height:16px; overflow:hidden; color:#000; margin: 0; padding: 0;}
+.highcontrastSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
+.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}
+.highcontrastSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid; background-color:#B6BDD2}
+.highcontrastSkin a.mceMoreColors:hover {border:1px solid #0A246A; color: #000;}
+.highcontrastSkin .mceColorPreview {display:none;}
+.highcontrastSkin .mce_forecolor span.mceAction, .highcontrastSkin .mce_backcolor span.mceAction {height:17px;overflow:hidden}
+
+/* Progress,Resize */
+.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}
+.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}
+
+/* Formats */
+.highcontrastSkin .mce_p span.mceText {}
+.highcontrastSkin .mce_address span.mceText {font-style:italic}
+.highcontrastSkin .mce_pre span.mceText {font-family:monospace}
+.highcontrastSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}
+.highcontrastSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}
+.highcontrastSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}
+.highcontrastSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}
+.highcontrastSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}
+.highcontrastSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css
new file mode 100644
index 000000000..a1a8f9bd3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/content.css
@@ -0,0 +1,48 @@
+body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}
+body {background:#FFF;}
+body.mceForceColors {background:#FFF; color:#000;}
+h1 {font-size: 2em}
+h2 {font-size: 1.5em}
+h3 {font-size: 1.17em}
+h4 {font-size: 1em}
+h5 {font-size: .83em}
+h6 {font-size: .75em}
+.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}
+a.mceItemAnchor {display:inline-block; width:11px !important; height:11px !important; background:url(../default/img/items.gif) no-repeat 0 0;}
+span.mceItemNbsp {background: #DDD}
+td.mceSelected, th.mceSelected {background-color:#3399ff !important}
+img {border:0;}
+table, img, hr, .mceItemAnchor {cursor:default}
+table td, table th {cursor:text}
+ins {border-bottom:1px solid green; text-decoration: none; color:green}
+del {color:red; text-decoration:line-through}
+cite {border-bottom:1px dashed blue}
+acronym {border-bottom:1px dotted #CCC; cursor:help}
+abbr {border-bottom:1px dashed #CCC; cursor:help}
+
+/* IE */
+* html body {
+scrollbar-3dlight-color:#F0F0EE;
+scrollbar-arrow-color:#676662;
+scrollbar-base-color:#F0F0EE;
+scrollbar-darkshadow-color:#DDD;
+scrollbar-face-color:#E0E0DD;
+scrollbar-highlight-color:#F0F0EE;
+scrollbar-shadow-color:#F0F0EE;
+scrollbar-track-color:#F5F5F5;
+}
+
+img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}
+font[face=mceinline] {font-family:inherit !important}
+*[contentEditable]:focus {outline:0}
+
+.mceItemMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc}
+.mceItemShockWave {background-image:url(../../img/shockwave.gif)}
+.mceItemFlash {background-image:url(../../img/flash.gif)}
+.mceItemQuickTime {background-image:url(../../img/quicktime.gif)}
+.mceItemWindowsMedia {background-image:url(../../img/windowsmedia.gif)}
+.mceItemRealMedia {background-image:url(../../img/realmedia.gif)}
+.mceItemVideo {background-image:url(../../img/video.gif)}
+.mceItemAudio {background-image:url(../../img/video.gif)}
+.mceItemIframe {background-image:url(../../img/iframe.gif)}
+.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;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
new file mode 100644
index 000000000..ec0877224
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
@@ -0,0 +1,117 @@
+/* Generic */
+body {
+font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;
+scrollbar-3dlight-color:#F0F0EE;
+scrollbar-arrow-color:#676662;
+scrollbar-base-color:#F0F0EE;
+scrollbar-darkshadow-color:#DDDDDD;
+scrollbar-face-color:#E0E0DD;
+scrollbar-highlight-color:#F0F0EE;
+scrollbar-shadow-color:#F0F0EE;
+scrollbar-track-color:#F5F5F5;
+background:#F0F0EE;
+padding:0;
+margin:8px 8px 0 8px;
+}
+
+html {background:#F0F0EE;}
+td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
+textarea {resize:none;outline:none;}
+a:link, a:visited {color:black;}
+a:hover {color:#2B6FB6;}
+.nowrap {white-space: nowrap}
+
+/* Forms */
+fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}
+legend {color:#2B6FB6; font-weight:bold;}
+label.msg {display:none;}
+label.invalid {color:#EE0000; display:inline;}
+input.invalid {border:1px solid #EE0000;}
+input {background:#FFF; border:1px solid #CCC;}
+input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
+input, select, textarea {border:1px solid #808080;}
+input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
+input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
+.input_noborder {border:0;}
+
+/* Buttons */
+#insert, #cancel, input.button, .updateButton {
+border:0; margin:0; padding:0;
+font-weight:bold;
+width:94px; height:26px;
+background:url(../default/img/buttons.png) 0 -26px;
+cursor:pointer;
+padding-bottom:2px;
+float:left;
+}
+
+#insert {background:url(../default/img/buttons.png) 0 -52px}
+#cancel {background:url(../default/img/buttons.png) 0 0; float:right}
+
+/* Browse */
+a.pickcolor, a.browse {text-decoration:none}
+a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
+.mceOldBoxModel a.browse span {width:22px; height:20px;}
+a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
+a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
+a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
+a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
+.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
+a.pickcolor:hover span {background-color:#B2BBD0;}
+a.pickcolor:hover span.disabled {}
+
+/* Charmap */
+table.charmap {border:1px solid #AAA; text-align:center}
+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;}
+#charmap a {display:block; color:#000; text-decoration:none; border:0}
+#charmap a:hover {background:#CCC;color:#2B6FB6}
+#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}
+#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
+
+/* Source */
+.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
+.mceActionPanel {margin-top:5px;}
+
+/* Tabs classes */
+.tabs {width:100%; height:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;}
+.tabs ul {margin:0; padding:0; list-style:none;}
+.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;}
+.tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}
+.tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}
+.tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;}
+.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}
+.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}
+
+/* Panels */
+.panel_wrapper div.panel {display:none;}
+.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
+.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}
+
+/* Columns */
+.column {float:left;}
+.properties {width:100%;}
+.properties .column1 {}
+.properties .column2 {text-align:left;}
+
+/* Titles */
+h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
+h3 {font-size:14px;}
+.title {font-size:12px; font-weight:bold; color:#2B6FB6;}
+
+/* Dialog specific */
+#link .panel_wrapper, #link div.current {height:125px;}
+#image .panel_wrapper, #image div.current {height:200px;}
+#plugintable thead {font-weight:bold; background:#DDD;}
+#plugintable, #about #plugintable td {border:1px solid #919B9C;}
+#plugintable {width:96%; margin-top:10px;}
+#pluginscontainer {height:290px; overflow:auto;}
+#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
+#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
+#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
+#colorpicker #light div {overflow:hidden;}
+#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}
+#colorpicker .panel_wrapper div.current {height:175px;}
+#colorpicker #namedcolors {width:150px;}
+#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
+#colorpicker #colornamecontainer {margin-top:5px;}
+#colorpicker #picker_panel fieldset {margin:auto;width:325px;}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png
new file mode 100644
index 000000000..13a5cb030
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png
new file mode 100644
index 000000000..7fc57f2bc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png
new file mode 100644
index 000000000..c0dcc6cac
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
new file mode 100644
index 000000000..0916c34e8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
@@ -0,0 +1,217 @@
+/* Reset */
+.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}
+.o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}
+.o2k7Skin table td {vertical-align:middle}
+
+/* Containers */
+.o2k7Skin table {background:transparent}
+.o2k7Skin iframe {display:block;}
+.o2k7Skin .mceToolbar {height:26px}
+
+/* External */
+.o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none}
+.o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;}
+.o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}
+
+/* Layout */
+.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD}
+.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD}
+.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD}
+.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0}
+.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD}
+.o2k7Skin td.mceToolbar{background:#E5EFFD}
+.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}
+.o2k7Skin .mceStatusbar div {float:left; padding:2px}
+.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}
+.o2k7Skin .mceStatusbar a:hover {text-decoration:underline}
+.o2k7Skin table.mceToolbar {margin-left:3px}
+.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;}
+.o2k7Skin .mceToolbar td.mceFirst span {margin:0}
+.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}
+.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none}
+.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px}
+.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
+.o2k7Skin td.mceCenter {text-align:center;}
+.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;}
+.o2k7Skin td.mceRight table {margin:0 0 0 auto;}
+
+/* Button */
+.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}
+.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px}
+.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px}
+.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}
+.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px}
+.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
+.o2k7Skin .mceButtonLabeled {width:auto}
+.o2k7Skin .mceButtonLabeled span.mceIcon {float:left}
+.o2k7Skin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}
+.o2k7Skin .mceButtonDisabled .mceButtonLabel {color:#888}
+
+/* Separator */
+.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}
+
+/* ListBox */
+.o2k7Skin .mceListBox {padding-left: 3px}
+.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block}
+.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}
+.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0}
+.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF}
+.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px}
+.o2k7Skin .mceListBoxDisabled .mceText {color:gray}
+.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden; margin-left:3px}
+.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px}
+.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;}
+
+/* SplitButton */
+.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px; direction:ltr}
+.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)}
+.o2k7Skin .mceSplitButton a.mceAction {width:22px}
+.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)}
+.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0}
+.o2k7Skin .mceSplitButton span.mceOpen {display:none}
+.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px}
+.o2k7Skin table.mceSplitButtonEnabled:hover a.mceOpen, .o2k7Skin .mceSplitButtonHover a.mceOpen, .o2k7Skin .mceSplitButtonSelected a.mceOpen {background-position:-44px -44px}
+.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
+.o2k7Skin .mceSplitButtonActive {background-position:0 -44px}
+
+/* ColorSplitButton */
+.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}
+.o2k7Skin .mceColorSplitMenu td {padding:2px}
+.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}
+.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
+.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}
+.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}
+.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A}
+.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a;overflow:hidden}
+.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px;overflow:hidden}
+
+/* Menu */
+.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD}
+.o2k7Skin .mceNoIcons span.mceIcon {width:0;}
+.o2k7Skin .mceNoIcons a .mceText {padding-left:10px}
+.o2k7Skin .mceMenu table {background:#FFF}
+.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block}
+.o2k7Skin .mceMenu td {height:20px}
+.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0}
+.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}
+.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px}
+.o2k7Skin .mceMenu pre.mceText {font-family:Monospace}
+.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}
+.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3}
+.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px}
+.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD}
+.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}
+.o2k7Skin .mceMenuItemDisabled .mceText {color:#888}
+.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)}
+.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center}
+.o2k7Skin .mceMenu span.mceMenuLine {display:none}
+.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;}
+.o2k7Skin .mceMenuItem td, .o2k7Skin .mceMenuItem th {line-height: normal}
+
+/* Progress,Resize */
+.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}
+.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}
+
+/* Formats */
+.o2k7Skin .mce_formatPreview a {font-size:10px}
+.o2k7Skin .mce_p span.mceText {}
+.o2k7Skin .mce_address span.mceText {font-style:italic}
+.o2k7Skin .mce_pre span.mceText {font-family:monospace}
+.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}
+.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}
+.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}
+.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}
+.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}
+.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}
+
+/* Theme */
+.o2k7Skin span.mce_bold {background-position:0 0}
+.o2k7Skin span.mce_italic {background-position:-60px 0}
+.o2k7Skin span.mce_underline {background-position:-140px 0}
+.o2k7Skin span.mce_strikethrough {background-position:-120px 0}
+.o2k7Skin span.mce_undo {background-position:-160px 0}
+.o2k7Skin span.mce_redo {background-position:-100px 0}
+.o2k7Skin span.mce_cleanup {background-position:-40px 0}
+.o2k7Skin span.mce_bullist {background-position:-20px 0}
+.o2k7Skin span.mce_numlist {background-position:-80px 0}
+.o2k7Skin span.mce_justifyleft {background-position:-460px 0}
+.o2k7Skin span.mce_justifyright {background-position:-480px 0}
+.o2k7Skin span.mce_justifycenter {background-position:-420px 0}
+.o2k7Skin span.mce_justifyfull {background-position:-440px 0}
+.o2k7Skin span.mce_anchor {background-position:-200px 0}
+.o2k7Skin span.mce_indent {background-position:-400px 0}
+.o2k7Skin span.mce_outdent {background-position:-540px 0}
+.o2k7Skin span.mce_link {background-position:-500px 0}
+.o2k7Skin span.mce_unlink {background-position:-640px 0}
+.o2k7Skin span.mce_sub {background-position:-600px 0}
+.o2k7Skin span.mce_sup {background-position:-620px 0}
+.o2k7Skin span.mce_removeformat {background-position:-580px 0}
+.o2k7Skin span.mce_newdocument {background-position:-520px 0}
+.o2k7Skin span.mce_image {background-position:-380px 0}
+.o2k7Skin span.mce_help {background-position:-340px 0}
+.o2k7Skin span.mce_code {background-position:-260px 0}
+.o2k7Skin span.mce_hr {background-position:-360px 0}
+.o2k7Skin span.mce_visualaid {background-position:-660px 0}
+.o2k7Skin span.mce_charmap {background-position:-240px 0}
+.o2k7Skin span.mce_paste {background-position:-560px 0}
+.o2k7Skin span.mce_copy {background-position:-700px 0}
+.o2k7Skin span.mce_cut {background-position:-680px 0}
+.o2k7Skin span.mce_blockquote {background-position:-220px 0}
+.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0}
+.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0}
+.o2k7Skin span.mce_forecolorpicker {background-position:-720px 0}
+.o2k7Skin span.mce_backcolorpicker {background-position:-760px 0}
+
+/* Plugins */
+.o2k7Skin span.mce_advhr {background-position:-0px -20px}
+.o2k7Skin span.mce_ltr {background-position:-20px -20px}
+.o2k7Skin span.mce_rtl {background-position:-40px -20px}
+.o2k7Skin span.mce_emotions {background-position:-60px -20px}
+.o2k7Skin span.mce_fullpage {background-position:-80px -20px}
+.o2k7Skin span.mce_fullscreen {background-position:-100px -20px}
+.o2k7Skin span.mce_iespell {background-position:-120px -20px}
+.o2k7Skin span.mce_insertdate {background-position:-140px -20px}
+.o2k7Skin span.mce_inserttime {background-position:-160px -20px}
+.o2k7Skin span.mce_absolute {background-position:-180px -20px}
+.o2k7Skin span.mce_backward {background-position:-200px -20px}
+.o2k7Skin span.mce_forward {background-position:-220px -20px}
+.o2k7Skin span.mce_insert_layer {background-position:-240px -20px}
+.o2k7Skin span.mce_insertlayer {background-position:-260px -20px}
+.o2k7Skin span.mce_movebackward {background-position:-280px -20px}
+.o2k7Skin span.mce_moveforward {background-position:-300px -20px}
+.o2k7Skin span.mce_media {background-position:-320px -20px}
+.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px}
+.o2k7Skin span.mce_pastetext {background-position:-360px -20px}
+.o2k7Skin span.mce_pasteword {background-position:-380px -20px}
+.o2k7Skin span.mce_selectall {background-position:-400px -20px}
+.o2k7Skin span.mce_preview {background-position:-420px -20px}
+.o2k7Skin span.mce_print {background-position:-440px -20px}
+.o2k7Skin span.mce_cancel {background-position:-460px -20px}
+.o2k7Skin span.mce_save {background-position:-480px -20px}
+.o2k7Skin span.mce_replace {background-position:-500px -20px}
+.o2k7Skin span.mce_search {background-position:-520px -20px}
+.o2k7Skin span.mce_styleprops {background-position:-560px -20px}
+.o2k7Skin span.mce_table {background-position:-580px -20px}
+.o2k7Skin span.mce_cell_props {background-position:-600px -20px}
+.o2k7Skin span.mce_delete_table {background-position:-620px -20px}
+.o2k7Skin span.mce_delete_col {background-position:-640px -20px}
+.o2k7Skin span.mce_delete_row {background-position:-660px -20px}
+.o2k7Skin span.mce_col_after {background-position:-680px -20px}
+.o2k7Skin span.mce_col_before {background-position:-700px -20px}
+.o2k7Skin span.mce_row_after {background-position:-720px -20px}
+.o2k7Skin span.mce_row_before {background-position:-740px -20px}
+.o2k7Skin span.mce_merge_cells {background-position:-760px -20px}
+.o2k7Skin span.mce_table_props {background-position:-980px -20px}
+.o2k7Skin span.mce_row_props {background-position:-780px -20px}
+.o2k7Skin span.mce_split_cells {background-position:-800px -20px}
+.o2k7Skin span.mce_template {background-position:-820px -20px}
+.o2k7Skin span.mce_visualchars {background-position:-840px -20px}
+.o2k7Skin span.mce_abbr {background-position:-860px -20px}
+.o2k7Skin span.mce_acronym {background-position:-880px -20px}
+.o2k7Skin span.mce_attribs {background-position:-900px -20px}
+.o2k7Skin span.mce_cite {background-position:-920px -20px}
+.o2k7Skin span.mce_del {background-position:-940px -20px}
+.o2k7Skin span.mce_ins {background-position:-960px -20px}
+.o2k7Skin span.mce_pagebreak {background-position:0 -40px}
+.o2k7Skin span.mce_restoredraft {background-position:-20px -40px}
+.o2k7Skin span.mce_spellchecker {background-position:-540px -20px}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css
new file mode 100644
index 000000000..50c9b76a2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css
@@ -0,0 +1,8 @@
+/* Black */
+.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)}
+.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}
+.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0}
+.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7SkinBlack .mceListBoxHover .mceText, .o2k7SkinBlack .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0}
+.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;}
+.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7SkinBlack .mceSplitButtonHover a.mceAction, .o2k7SkinBlack .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)}
+.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7SkinBlack .mceMenu .mceMenuItemActive {background-color:#FFE7A1} \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css
new file mode 100644
index 000000000..960a8e475
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css
@@ -0,0 +1,5 @@
+/* Silver */
+.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)}
+.o2k7SkinSilver td.mceToolbar, .o2k7SkinSilver td.mceStatusbar, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee}
+.o2k7SkinSilver .mceListBox .mceText {background:#FFF}
+.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}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm
new file mode 100644
index 000000000..3c6d65808
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/advanced/source_editor.htm
@@ -0,0 +1,25 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <title>{#advanced_dlg.code_title}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/source_editor.js"></script>
+</head>
+<body onresize="resizeInputs();" style="display:none; overflow:hidden;">
+ <form name="source" onsubmit="saveContent();return false;" action="#">
+ <div style="float: left" class="title"><label for="htmlSource">{#advanced_dlg.code_title}</label></div>
+
+ <div id="wrapline" style="float: right">
+ <input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{#advanced_dlg.code_wordwrap}</label>
+ </div>
+
+ <br style="clear: both" />
+
+ <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>
+
+ <div class="mceActionPanel">
+ <input type="submit" role="button" name="insert" value="{#update}" id="insert" />
+ <input type="button" role="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
+ </div>
+ </form>
+</body>
+</html>
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js
new file mode 100644
index 000000000..4b3209cc9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/editor_template.js
@@ -0,0 +1 @@
+(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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js
new file mode 100644
index 000000000..01ce87c58
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/editor_template_src.js
@@ -0,0 +1,84 @@
+/**
+ * editor_template_src.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+(function() {
+ var DOM = tinymce.DOM;
+
+ // Tell it to load theme specific language pack(s)
+ tinymce.ThemeManager.requireLangPack('simple');
+
+ tinymce.create('tinymce.themes.SimpleTheme', {
+ init : function(ed, url) {
+ var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings;
+
+ t.editor = ed;
+ ed.contentCSS.push(url + "/skins/" + s.skin + "/content.css");
+
+ ed.onInit.add(function() {
+ ed.onNodeChange.add(function(ed, cm) {
+ tinymce.each(states, function(c) {
+ cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));
+ });
+ });
+ });
+
+ DOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css");
+ },
+
+ renderUI : function(o) {
+ var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc;
+
+ n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n);
+ n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'});
+ n = tb = DOM.add(n, 'tbody');
+
+ // Create iframe container
+ n = DOM.add(tb, 'tr');
+ n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'});
+
+ // Create toolbar container
+ n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'});
+
+ // Create toolbar
+ tb = t.toolbar = cf.createToolbar("tools1");
+ tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'}));
+ tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'}));
+ tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'}));
+ tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'}));
+ tb.add(cf.createSeparator());
+ tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'}));
+ tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'}));
+ tb.add(cf.createSeparator());
+ tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'}));
+ tb.add(cf.createSeparator());
+ tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'}));
+ tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'}));
+ tb.renderTo(n);
+
+ return {
+ iframeContainer : ic,
+ editorContainer : ed.id + '_container',
+ sizeContainer : sc,
+ 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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif
new file mode 100644
index 000000000..6fcbcb5de
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/img/icons.gif
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ar.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ar.js
new file mode 100644
index 000000000..f16c58033
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ar.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.simple',{"cleanup_desc":"\u0631\u0645\u0632 \u062a\u0646\u0638\u064a\u0641 \u0627\u0644\u0641\u0648\u0636\u0649","redo_desc":"\u0627\u0644\u0625\u0639\u0627\u062f\u0629 (Ctrl+Y)","undo_desc":"\u062a\u0631\u0627\u062c\u0639 (Ctrl+Z)","numlist_desc":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0631\u062a\u0628\u0629","bullist_desc":"\u0642\u0627\u0626\u0645\u0629 \u063a\u064a\u0631 \u0645\u0631\u062a\u0628\u0629","striketrough_desc":"\u062a\u0648\u0633\u064a\u0637 \u0628\u062e\u0637","underline_desc":"\u062a\u0633\u0637\u064a\u0631 (Ctrl+U)","italic_desc":"\u0645\u0627\u0626\u0644 (Ctrl+I)","bold_desc":"\u0639\u0631\u064a\u0636 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/az.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/az.js
new file mode 100644
index 000000000..3523e1f61
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/az.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.simple',{"cleanup_desc":"\u018fyri kodu t\u0259mizl\u0259","redo_desc":"T\u0259krarla (Ctrl+Y)","undo_desc":"L\u0259\u011fv et (Ctrl+Z)","numlist_desc":"N\u00f6mr\u0259l\u0259nmi\u015f siyah\u0131","bullist_desc":"Qeyd edilmi\u015f siyah\u0131","striketrough_desc":"Qaralanm\u0131\u015f","underline_desc":"Altdan x\u0259tt (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Yar\u0131qal\u0131n (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/be.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/be.js
new file mode 100644
index 000000000..69c764398
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/be.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.simple',{"cleanup_desc":"\u041f\u0430\u0447\u044b\u0441\u0446\u0456\u0446\u044c \u0431\u0440\u0443\u0434\u043d\u044b \u043a\u043e\u0434","redo_desc":"\u041f\u0430\u045e\u0442\u0430\u0440\u044b\u0446\u044c (Ctrl+Y)","undo_desc":"\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c (Ctrl+Z)","numlist_desc":"\u041d\u0443\u043c\u0430\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441","bullist_desc":"\u041c\u0430\u0440\u043a\u0456\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441","striketrough_desc":"\u041f\u0435\u0440\u0430\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","underline_desc":"\u041f\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0456\u045e (Ctrl+I)","bold_desc":"\u0422\u043b\u0443\u0441\u0442\u044b (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bg.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bg.js
new file mode 100644
index 000000000..6aca15ab8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.simple',{"cleanup_desc":"\u0418\u0437\u0447\u0438\u0441\u0442\u0438 \u043a\u043e\u0434\u0430","redo_desc":"\u0412\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 (Ctrl+Y)","undo_desc":"\u041e\u0442\u043c\u044f\u043d\u0430 (Ctrl+Z)","numlist_desc":"\u041d\u043e\u043c\u0435\u0440\u0430","bullist_desc":"\u0412\u043e\u0434\u0430\u0447\u0438","striketrough_desc":"\u0417\u0430\u0447\u0435\u0440\u0442\u0430\u043d","underline_desc":"\u041f\u043e\u0434\u0447\u0435\u0440\u0442\u0430\u043d (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u041f\u043e\u043b\u0443\u0447\u0435\u0440 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bn.js
new file mode 100644
index 000000000..eba13f26d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.simple',{"cleanup_desc":"\u0985\u09aa\u09b0\u09bf\u099a\u09cd\u099b\u09a8\u09cd\u09a8 \u0995\u09cb\u09a1 \u09aa\u09b0\u09bf\u09b7\u09cd\u0995\u09be\u09b0 \u0995\u09b0 ","redo_desc":"\u09b0\u09bf\u09a1\u09c1 (Ctrl+Y)","undo_desc":"\u0986\u09a8\u09a1\u09c1 (Ctrl+Z)","numlist_desc":"\u0985\u09b0\u09cd\u09a1\u09be\u09b0\u09a1 \u09b2\u09bf\u09b8\u09cd\u099f","bullist_desc":"\u0986\u09a8\u0985\u09b0\u09cd\u09a1\u09be\u09b0\u09a1 \u09b2\u09bf\u09b8\u09cd\u099f","striketrough_desc":"\u09ae\u09be\u099d \u09ac\u09b0\u09be\u09ac\u09b0 \u09b0\u09c7\u0996\u09be\u0999\u09cd\u0995\u09a8","underline_desc":"\u0986\u09a8\u09cd\u09a1\u09be\u09b0\u09b2\u09be\u0987\u09a8 (Ctrl+U)","italic_desc":"\u0987\u099f\u09be\u09b2\u09bf\u0995 (Ctrl+I)","bold_desc":"\u09ac\u09cb\u09b2\u09cd\u09a1 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/br.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/br.js
new file mode 100644
index 000000000..65358cc8f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/br.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.simple',{"cleanup_desc":"Limpar c\u00f3digo incorreto","redo_desc":"Refazer (Ctrl+Y)","undo_desc":"Desfazer (Ctrl+Z)","numlist_desc":"Lista ordenada","bullist_desc":"Lista n\u00e3o-ordenada","striketrough_desc":"Riscado","underline_desc":"Sublinhado (Ctrl+U)","italic_desc":"It\u00e1lico (Ctrl+I)","bold_desc":"Negrito (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bs.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bs.js
new file mode 100644
index 000000000..aa6ce90d8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/bs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.simple',{"cleanup_desc":"Po\u010disti kod","redo_desc":"Ponovi (Ctrl+Y)","undo_desc":"Poni\u0161ti (Ctrl+Z)","numlist_desc":"Ure\u0111ena lista","bullist_desc":"Neure\u0111ena lista","striketrough_desc":"Precrtaj","underline_desc":"Podcrtaj (Ctrl+U)","italic_desc":"Kurziv (Ctrl+I)","bold_desc":"Podebljaj (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ca.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ca.js
new file mode 100644
index 000000000..7b4c14372
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ca.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.simple',{"cleanup_desc":"Poleix el codi","redo_desc":"Ref\u00e9s (Ctrl+Y)","undo_desc":"Desf\u00e9s (Ctrl+Z)","numlist_desc":"Llista numerada","bullist_desc":"Llista sense numeraci\u00f3","striketrough_desc":"Barrat","underline_desc":"Subratllat (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negreta (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ch.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ch.js
new file mode 100644
index 000000000..09aca2475
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ch.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.simple',{"cleanup_desc":"\u6e05\u9664\u683c\u5f0f","redo_desc":"\u53d6\u6d88\u6062\u590d \uff08Ctrl+Y\uff09","undo_desc":"\u6062\u590d \uff08Ctrl+Z\uff09","numlist_desc":"\u7f16\u53f7\u5217\u8868","bullist_desc":"\u9879\u76ee\u5217\u8868","striketrough_desc":"\u5220\u9664\u7ebf","underline_desc":"\u5e95\u7ebf \uff08Ctrl+U\uff09","italic_desc":"\u659c\u4f53 \uff08Ctrl+I\uff09","bold_desc":"\u7c97\u4f53\uff08Ctrl+B\uff09"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cn.js
new file mode 100644
index 000000000..3ce9ea193
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.simple',{"cleanup_desc":"\u6e05\u7406\u4ee3\u7801","redo_desc":"\u91cd\u505a (Ctrl Y)","undo_desc":"\u64a4\u9500 (Ctrl Z)","numlist_desc":"\u6709\u5e8f\u7f16\u53f7","bullist_desc":"\u65e0\u5e8f\u7f16\u53f7","striketrough_desc":"\u5220\u9664\u7ebf","underline_desc":"\u4e0b\u5212\u7ebf (Ctrl U)","italic_desc":"\u659c\u4f53 (Ctrl I)","bold_desc":"\u7c97\u4f53 (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cs.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cs.js
new file mode 100644
index 000000000..1be2fd656
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.simple',{"cleanup_desc":"Vy\u010distit k\u00f3d","redo_desc":"Znovu (Ctrl+Y)","undo_desc":"Zp\u011bt (Ctrl+Z)","numlist_desc":"\u010c\u00edslovan\u00fd seznam","bullist_desc":"Seznam s odr\u00e1\u017ekami","striketrough_desc":"P\u0159e\u0161krtnut\u00e9","underline_desc":"Podtr\u017een\u00e9 (Ctrl+U)","italic_desc":"Kurz\u00edva (Ctrl+I)","bold_desc":"Tu\u010dn\u00e9 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cy.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cy.js
new file mode 100644
index 000000000..473b43695
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/cy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.simple',{"cleanup_desc":"Glanhau c\u00f4d anhrefnus","redo_desc":"Ailwneud (Ctrl+Y)","undo_desc":"Dadwneud (Ctrl+Z)","numlist_desc":"Rhestr trenus","bullist_desc":"Rhestr didrenus","striketrough_desc":"Taro drwodd","underline_desc":"Tanlinellu (Ctrl+U)","italic_desc":"Italig (Ctrl+I)","bold_desc":"Trwm (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/da.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/da.js
new file mode 100644
index 000000000..92de7a76a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/da.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.simple',{"cleanup_desc":"Ryd op i uordentlig kode","redo_desc":"Gendan (Ctrl+Y)","undo_desc":"Fortryd (Ctrl+Z)","numlist_desc":"Nummereret punktopstilling","bullist_desc":"Unummereret punktopstilling","striketrough_desc":"Gennemstreget","underline_desc":"Understreget (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fed (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/de.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/de.js
new file mode 100644
index 000000000..59bf788d2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/de.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.simple',{"cleanup_desc":"Quellcode aufr\u00e4umen","redo_desc":"Wiederholen (Strg+Y)","undo_desc":"R\u00fcckg\u00e4ngig (Strg+Z)","numlist_desc":"Nummerierung","bullist_desc":"Aufz\u00e4hlung","striketrough_desc":"Durchgestrichen","underline_desc":"Unterstrichen (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/dv.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/dv.js
new file mode 100644
index 000000000..e33567f84
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/dv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/el.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/el.js
new file mode 100644
index 000000000..c7554b86b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/el.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.simple',{"cleanup_desc":"\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bc\u03c0\u03b5\u03c1\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c5 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1","redo_desc":"\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 (Ctrl+Y)","undo_desc":"\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 (Ctrl+Z)","numlist_desc":"\u039b\u03af\u03c3\u03c4\u03b1 \u03bc\u03b5 \u03c3\u03b5\u03b9\u03c1\u03ac","bullist_desc":"\u039b\u03af\u03c3\u03c4\u03b1 \u03c7\u03c9\u03c1\u03af\u03c2 \u03c3\u03b5\u03b9\u03c1\u03ac","striketrough_desc":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03bc\u03bc\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1","underline_desc":"\u03a5\u03c0\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1 (Ctrl+U)","italic_desc":"\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1 (Ctrl+I)","bold_desc":"\u0388\u03bd\u03c4\u03bf\u03bd\u03b1 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js
new file mode 100644
index 000000000..088ed0fcb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/en.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.simple',{"cleanup_desc":"Cleanup Messy Code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/eo.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/eo.js
new file mode 100644
index 000000000..1d59bd9c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/eo.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.simple',{"cleanup_desc":"Senrubigi mal\u011dustan kodon","redo_desc":"Refari (Ctrl Y)","undo_desc":"Malfari (Ctrl Z)","numlist_desc":"Numera listo","bullist_desc":"Bula listo","striketrough_desc":"Strekita","underline_desc":"Substrekita (Ctrl U)","italic_desc":"Kursiva (Ctrl I)","bold_desc":"Grasa (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/es.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/es.js
new file mode 100644
index 000000000..0fc0311e3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/es.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.simple',{"cleanup_desc":"Limpiar c\u00f3digo basura","redo_desc":"Rehacer (Ctrl+Y)","undo_desc":"Deshacer (Ctrl+Z)","numlist_desc":"Lista ordenada","bullist_desc":"Lista desordenada","striketrough_desc":"Tachado","underline_desc":"Subrayado (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negrita (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/et.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/et.js
new file mode 100644
index 000000000..ec105a538
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/et.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.simple',{"cleanup_desc":"Puhasta segane kood","redo_desc":"Tee uuesti (Ctrl+Y)","undo_desc":"V\u00f5ta tagasi (Ctrl+Z)","numlist_desc":"Korrap\u00e4rane loetelu","bullist_desc":"Ebakorrap\u00e4rane loetelu","striketrough_desc":"L\u00e4bijoonitud","underline_desc":"Allajoonitud (Ctrl+U)","italic_desc":"Kursiiv (Ctrl+I)","bold_desc":"Rasvane (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/eu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/eu.js
new file mode 100644
index 000000000..0b78f7c75
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/eu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.simple',{"cleanup_desc":"Kode zikina garbitu","redo_desc":"Berregin (Ctrl+Y)","undo_desc":"Desegin (Ctrl+Z)","numlist_desc":"Zerrenda ordenatua","bullist_desc":"Zerrenda","striketrough_desc":"Gainetik marra duena","underline_desc":"Azpimarratua (Ctrl+U)","italic_desc":"Etzana (Ctrl+I)","bold_desc":"Beltza (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fa.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fa.js
new file mode 100644
index 000000000..7351bb256
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fa.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.simple',{"cleanup_desc":"\u067e\u0627\u06a9 \u0633\u0627\u0632\u06cc \u06a9\u062f \u0647\u0627\u06cc \u0628\u0647\u0645 \u062e\u0648\u0631\u062f\u0647","redo_desc":"\u0631\u0641\u062a\u0646 \u0628\u0647 \u0639\u0645\u0644 \u0628\u0639\u062f (Ctrl Y)","undo_desc":"\u0628\u0627\u0632\u06af\u0634\u062a \u0628\u0647 \u0639\u0645\u0644 \u0642\u0628\u0644 (Ctrl Z)","numlist_desc":"\u0644\u06cc\u0633\u062a \u0645\u0631\u062a\u0628","bullist_desc":"\u0644\u06cc\u0633\u062a \u0646\u0627\u0645\u0631\u062a\u0628","striketrough_desc":"\u062e\u0637 \u0648\u0633\u0637","underline_desc":"\u0645\u062a\u0646 \u0632\u06cc\u0631 \u062e\u0637 \u062f\u0627\u0631 (Ctrl+U)","italic_desc":"\u0645\u062a\u0646 \u0645\u0648\u0631\u0628 (Ctrl+I)","bold_desc":"\u0645\u062a\u0646 \u0636\u062e\u06cc\u0645 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fi.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fi.js
new file mode 100644
index 000000000..6ca1d8d10
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.simple',{"cleanup_desc":"Siisti sekainen koodi","redo_desc":"Tee uudestaan (Ctrl+Y)","undo_desc":"Peru (Ctrl+Z)","numlist_desc":"J\u00e4rjestetty lista","bullist_desc":"J\u00e4rjest\u00e4m\u00e4t\u00f6n lista","striketrough_desc":"Yliviivaus","underline_desc":"Alleviivaus (Ctrl+U)","italic_desc":"Kursivointi (Ctrl+I)","bold_desc":"Lihavointi (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fr.js
new file mode 100644
index 000000000..ebe964e1e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/fr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.simple',{"cleanup_desc":"Nettoyer le code","redo_desc":"R\u00e9tablir (Ctrl+Y)","undo_desc":"Annuler (Ctrl+Z)","numlist_desc":"Liste num\u00e9rot\u00e9e","bullist_desc":"Liste \u00e0 puces","striketrough_desc":"Barr\u00e9","underline_desc":"Soulign\u00e9 (Ctrl+U)","italic_desc":"Italique (Ctrl+I)","bold_desc":"Gras (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/gl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/gl.js
new file mode 100644
index 000000000..bc7d20596
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/gl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.simple',{"cleanup_desc":"Limpar lixo no c\u00f3digo","redo_desc":"Re-facer (Ctrl+Y)","undo_desc":"Desfacer (Ctrl+Z)","numlist_desc":"Lista ordenada","bullist_desc":"Lista desordenada","striketrough_desc":"Tachado","underline_desc":"Suli\u00f1ado (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negri\u00f1a (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/gu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/gu.js
new file mode 100644
index 000000000..6cd2c0c82
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/gu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/he.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/he.js
new file mode 100644
index 000000000..ade41a112
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/he.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.simple',{"cleanup_desc":"\u05e0\u05e7\u05d4 \u05e7\u05d5\u05d3","redo_desc":" (Ctrl+Y)","undo_desc":"\u05d1\u05d9\u05d8\u05d5\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 (Ctrl+Z)","numlist_desc":"\u05de\u05e1\u05e4\u05d5\u05e8","bullist_desc":"\u05ea\u05d1\u05dc\u05d9\u05d8\u05d9\u05dd","striketrough_desc":"\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4","underline_desc":"\u05e7\u05d5 \u05ea\u05d7\u05ea\u05d5\u05df (Ctrl+U)","italic_desc":"\u05e0\u05d8\u05d5\u05d9 (Ctrl+I)","bold_desc":"\u05de\u05d5\u05d3\u05d2\u05e9 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hi.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hi.js
new file mode 100644
index 000000000..88c14c539
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hr.js
new file mode 100644
index 000000000..38c59b0a3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.simple',{"cleanup_desc":"Po\u010disti neuredni kod","redo_desc":"Ponovi (Ctrl+Y)","undo_desc":"Poni\u0161ti (Ctrl+Z)","numlist_desc":"Numerirana lista","bullist_desc":"Nenumerirana lista","striketrough_desc":"Precrtano","underline_desc":"Podcrtano (Ctrl U)","italic_desc":"Uko\u0161eno (Ctrl I)","bold_desc":"Podebljano (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hu.js
new file mode 100644
index 000000000..169722a44
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.simple',{"cleanup_desc":"Minden form\u00e1z\u00e1s elt\u00e1vol\u00edt\u00e1sa","redo_desc":"M\u00e9gis v\u00e9grehajt (Ctrl+Y)","undo_desc":"Visszavon\u00e1s (Ctrl+Z)","numlist_desc":"Rendezett lista","bullist_desc":"Rendezetlen lista","striketrough_desc":"\u00c1th\u00fazott","underline_desc":"Al\u00e1h\u00fazott (Ctrl+U)","italic_desc":"D\u0151lt (Ctrl+I)","bold_desc":"F\u00e9lk\u00f6v\u00e9r (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hy.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hy.js
new file mode 100644
index 000000000..f31febe8b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/hy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.simple',{"cleanup_desc":"\u0540\u0565\u057c\u0561\u0581\u0576\u0565\u056c \u0561\u057e\u0565\u056c\u0578\u0580\u0564 \u056f\u0578\u0564\u0568","redo_desc":"\u0531\u057c\u0561\u057b (Ctrl + Y)","undo_desc":"\u0535\u057f (Ctrl + Z)","numlist_desc":"\u0551\u0561\u0576\u056f\u055d \u0570\u0561\u0574\u0561\u0580\u0561\u056f\u0561\u056c\u057e\u0561\u056e","bullist_desc":"\u0551\u0561\u0576\u056f","striketrough_desc":"\u0531\u0580\u057f\u0561\u0563\u056e\u057e\u0561\u056e","underline_desc":"\u0538\u0576\u0564\u0563\u056e\u057e\u0561\u056e (Ctrl + U)","italic_desc":"\u0547\u0565\u0572 (Ctrl + I)","bold_desc":"\u0540\u0561\u057d\u057f (Ctrl + B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ia.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ia.js
new file mode 100644
index 000000000..a3f82af7a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ia.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.simple',{"cleanup_desc":"\u5220\u9664\u5197\u4f59\u7801","redo_desc":"\u6062\u590d (Ctrl+Y)","undo_desc":"\u64a4\u9500 (Ctrl+Z)","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u6e05\u5355\u7b26\u53f7","striketrough_desc":"\u4e2d\u5212\u7ebf","underline_desc":"\u5e95\u7ebf (Ctrl+U)","italic_desc":"\u659c\u4f53(Ctrl+I)","bold_desc":"\u7c97\u4f53(Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/id.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/id.js
new file mode 100644
index 000000000..ef37c5e04
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/id.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/is.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/is.js
new file mode 100644
index 000000000..f4023f8c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/is.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.simple',{"cleanup_desc":"Hreinsa ruslk\u00f3\u00f0a","redo_desc":"Endurtaka (Ctrl+Y)","undo_desc":"Taka til baka (Ctrl+Z)","numlist_desc":"N\u00famera\u00f0ur listi","bullist_desc":"B\u00f3lulisti","striketrough_desc":"Yfirstrika\u00f0","underline_desc":"Undirstrika\u00f0 (Ctrl+U)","italic_desc":"Sk\u00e1letra\u00f0 (Ctrl+I)","bold_desc":"Feitletra\u00f0 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/it.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/it.js
new file mode 100644
index 000000000..e0c45ed54
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/it.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.simple',{"cleanup_desc":"Pulisci codice disordinato","redo_desc":"Ripristina (Ctrl+Y)","undo_desc":"Annulla (Ctrl+Z)","numlist_desc":"Lista ordinata","bullist_desc":"Lista non ordinata","striketrough_desc":"Barrato","underline_desc":"Sottolineato (Ctrl+U)","italic_desc":"Corsivo (Ctrl+I)","bold_desc":"Grassetto (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ja.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ja.js
new file mode 100644
index 000000000..b3acbb546
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ja.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.simple',{"cleanup_desc":"\u4e71\u96d1\u306a\u30b3\u30fc\u30c9\u3092\u6574\u5f62","redo_desc":"\u3084\u308a\u76f4\u3059 (Ctrl+Y)","undo_desc":"\u5143\u306b\u623b\u3059 (Ctrl+Z)","numlist_desc":"\u756a\u53f7\u3064\u304d\u30ea\u30b9\u30c8","bullist_desc":"\u756a\u53f7\u306a\u3057\u30ea\u30b9\u30c8","striketrough_desc":"\u53d6\u308a\u6d88\u3057\u7dda","underline_desc":"\u4e0b\u7dda (Ctrl+U)","italic_desc":"\u659c\u4f53 (Ctrl+I)","bold_desc":"\u592a\u5b57 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ka.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ka.js
new file mode 100644
index 000000000..5932df889
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ka.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.simple',{"cleanup_desc":"\u10d6\u10d4\u10d3\u10db\u10d4\u10e2\u10d8 \u10d9\u10dd\u10d3\u10d8\u10e1 \u10db\u10dd\u10ea\u10d8\u10da\u10d4\u10d1\u10d0","redo_desc":"\u10d3\u10d0\u10d1\u10e0\u10e3\u10dc\u10d4\u10d1\u10d0 (Ctrl+Y)","undo_desc":"\u10d2\u10d0\u10e3\u10d6\u10db\u10d4\u10d1\u10d0 (Ctrl+Z)","numlist_desc":"\u10d3\u10d0\u10dc\u10dd\u10db\u10e0\u10d8\u10da\u10d8 \u10e1\u10d8\u10d0","bullist_desc":"\u10db\u10d0\u10e0\u10d9\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8 \u10e1\u10d8\u10d0","striketrough_desc":"\u10d2\u10d0\u10d3\u10d0\u10ee\u10d0\u10d6\u10e3\u10da\u10d8","underline_desc":"\u10db\u10dd\u10ee\u10d0\u10d6\u10e3\u10da\u10d8 (Ctrl+U)","italic_desc":"\u10d3\u10d0\u10ee\u10e0\u10d8\u10da\u10d8 (Ctrl+I)","bold_desc":"\u10e1\u10e5\u10d4\u10da\u10d8 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/kl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/kl.js
new file mode 100644
index 000000000..4d4ae8bd5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/kl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/km.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/km.js
new file mode 100644
index 000000000..bc1b723cb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/km.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.simple',{"cleanup_desc":"\u179f\u17c6\u17a2\u17b6\u178f\u1780\u17bc\u178a\u179f\u17d2\u1798\u17bb\u1782\u179f\u17d2\u1798\u17b6\u1789","redo_desc":"\u1792\u17d2\u179c\u17be\u179c\u17b7\u1789 (Ctrl+Y)","undo_desc":"\u1798\u17b7\u1793\u1792\u17d2\u179c\u17be\u179c\u17b7\u1789 (Ctrl+Z)","numlist_desc":"\u1794\u1789\u17d2\u1787\u17b8\u1798\u17b6\u1793\u179b\u17c6\u178a\u17b6\u1794\u17cb","bullist_desc":"\u1794\u1789\u17d2\u1787\u17b8\u1782\u17d2\u1798\u17b6\u1793\u179b\u17c6\u178a\u17b6\u1794\u17cb","striketrough_desc":"\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1786\u17bc\u178f","underline_desc":"\u1782\u17bc\u179f\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1780\u17d2\u179a\u17c4\u1798 (Ctrl+U)","italic_desc":"\u1791\u17d2\u179a\u17c1\u178f (Ctrl+I)","bold_desc":"\u178a\u17b7\u178f (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ko.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ko.js
new file mode 100644
index 000000000..6012a7107
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ko.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.simple',{"cleanup_desc":"\ubcf5\uc7a1\ud55c \ucf54\ub4dc \uc815\ub9ac","redo_desc":"\uc7ac\uc2e4\ud589(Ctrl Y)","undo_desc":"\uc2e4\ud589 \ucde8\uc18c(Ctrl Z)","numlist_desc":"\ubc88\ud638 \ubaa9\ub85d \uc0bd\uc785/\uc81c\uac70","bullist_desc":"\uae30\ud638 \ubaa9\ub85d \uc0bd\uc785/\uc81c\uac70","striketrough_desc":"\ucde8\uc18c\uc120","underline_desc":"\ubc11\uc904(Ctrl+U)","italic_desc":"\uae30\uc6b8\uc778 \uae00\uaf34(Ctrl I)","bold_desc":"\uad75\uc740 \uae00\uaf34(Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/kz.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/kz.js
new file mode 100644
index 000000000..aa272e50d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/kz.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.simple',{"cleanup_desc":"Cleanup Messy Code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lb.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lb.js
new file mode 100644
index 000000000..9c8ea4dc4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.simple',{"cleanup_desc":"Quellcode botzen","redo_desc":"Widderhuelen (Strg+Y)","undo_desc":"R\u00e9ckg\u00e4ngeg (Strg+Z)","numlist_desc":"Sort\u00e9iert L\u00ebscht","bullist_desc":"Onsort\u00e9iert L\u00ebscht","striketrough_desc":"Duerchgestrach","underline_desc":"\u00cbnnerstrach (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lt.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lt.js
new file mode 100644
index 000000000..97d45a672
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.simple',{"cleanup_desc":"I\u0161valyti netvarking\u0105 kod\u0105","redo_desc":"Gr\u0105\u017einti (Ctrl+Y)","undo_desc":"At\u0161aukti (Ctrl+Z)","numlist_desc":"Sunumeruotas s\u0105ra\u0161as","bullist_desc":"Nesunumeruotas s\u0105ra\u0161as","striketrough_desc":"Perbrauktas","underline_desc":"Pabrauktas (Ctrl+U)","italic_desc":"Kursyvas (Ctrl+I)","bold_desc":"Pusjuodis (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lv.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lv.js
new file mode 100644
index 000000000..12f7db224
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/lv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.simple',{"cleanup_desc":"Izt\u012br\u012bt nek\u0101rt\u012bgu kodu","redo_desc":"Atatsaukt (Ctrl+Y)","undo_desc":"Atsaukt (Ctrl+Z)","numlist_desc":"Numur\u0113ts saraksts","bullist_desc":"Nenumur\u0113ts saraksts","striketrough_desc":"P\u0101rsv\u012btrojums","underline_desc":"Pasv\u012btrojums (Ctrl+U)","italic_desc":"Sl\u012bpraksts (Ctrl+I)","bold_desc":"Treknraksts (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/mk.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/mk.js
new file mode 100644
index 000000000..c2a28dfe1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/mk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.simple',{"cleanup_desc":"\u0421\u0440\u0435\u0434\u0438 \u0433\u043e \u043a\u043e\u0434\u043e\u0442","redo_desc":"\u041f\u043e\u0432\u0442\u043e\u0440\u0438 (Ctrl Y)","undo_desc":"\u0412\u0440\u0430\u0442\u0438 (Ctrl Z)","numlist_desc":"\u0412\u043d\u0435\u0441\u0438/\u043e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 \u043d\u0443\u043c\u0435\u0440\u0438\u0440\u0430\u043d\u0430 \u043b\u0438\u0441\u0442\u0430","bullist_desc":"\u0412\u043d\u0435\u0441\u0438/\u043e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 bullet \u043b\u0438\u0441\u0442\u0430","striketrough_desc":"\u041f\u0440\u0435\u0446\u0440\u0442\u0430\u043d\u043e","underline_desc":"\u041f\u043e\u0434\u0432\u043b\u0435\u0447\u0435\u043d\u043e (Ctrl U)","italic_desc":"\u0417\u0430\u043a\u043e\u0441\u0435\u043d\u043e (Ctrl I)","bold_desc":"\u0417\u0434\u0435\u0431\u0435\u043b\u0435\u043d\u043e (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ml.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ml.js
new file mode 100644
index 000000000..7ea4348bd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ml.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.simple',{"cleanup_desc":"\u0d35\u0d43\u0d24\u0d4d\u0d24\u0d3f\u0d2f\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15","redo_desc":"\u0d06\u0d35\u0d30\u0d4d\u200d\u0d24\u0d4d\u0d24\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15 (Ctrl+Y)","undo_desc":"\u0d2a\u0d3f\u0d28\u0d4d\u200d\u0d35\u0d32\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15 (Ctrl+Z)","numlist_desc":"\u0d15\u0d4d\u0d30\u0d2e\u0d36\u0d4d\u0d30\u0d47\u0d23\u0d3f","bullist_desc":"\u0d15\u0d4d\u0d30\u0d2e\u0d2e\u0d3f\u0d32\u0d4d\u0d32\u0d3e \u0d36\u0d4d\u0d30\u0d47\u0d23\u0d3f","striketrough_desc":"\u0d35\u0d46\u0d1f\u0d4d\u0d1f\u0d3f\u0d2f ","underline_desc":"\u0d05\u0d1f\u0d3f\u0d35\u0d30 (Ctrl+U)","italic_desc":"\u0d1a\u0d46\u0d30\u0d3f\u0d1e\u0d4d\u0d1e (Ctrl+I)","bold_desc":"\u0d15\u0d1f\u0d4d\u0d1f\u0d3f\u0d2f\u0d41\u0d33\u0d4d\u0d33 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/mn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/mn.js
new file mode 100644
index 000000000..b3862973d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/mn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.simple',{"cleanup_desc":"\u042d\u0445 \u043a\u043e\u0434\u044b\u0433 \u0446\u044d\u0432\u044d\u0440\u043b\u044d\u0445","redo_desc":"\u0426\u0443\u0446\u043b\u0430\u0445 (Ctrl+Y)","undo_desc":"\u0411\u0443\u0446\u0430\u0430\u0445 (Ctrl+Z)","numlist_desc":"\u0414\u0443\u0433\u0430\u0430\u0440\u0442 \u0442\u043e\u043e\u0447\u0438\u043b\u0442","bullist_desc":"\u0422\u043e\u043e\u0447\u0438\u043b\u0442","striketrough_desc":"\u0414\u0430\u0440\u0441\u0430\u043d","underline_desc":"\u0414\u043e\u043e\u0433\u0443\u0443\u0440 \u0437\u0443\u0440\u0430\u0430\u0441 (Ctrl+U)","italic_desc":"\u041d\u0430\u043b\u0443\u0443 (Ctrl+I)","bold_desc":"\u0422\u043e\u0434 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ms.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ms.js
new file mode 100644
index 000000000..e097ab07a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ms.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.simple',{"cleanup_desc":"Bersihkan kod yang bersepah","redo_desc":"Buat semula (Ctrl+Y)","undo_desc":"Buat asal (Ctrl+Z)","numlist_desc":"Senarai tertib","bullist_desc":"Senarai tidak tertib","striketrough_desc":"Garis tengah","underline_desc":"Garis bawah (Ctrl+U)","italic_desc":"Condong (Ctrl+I)","bold_desc":"Tebal (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/my.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/my.js
new file mode 100644
index 000000000..97835fdc8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/my.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.simple',{"cleanup_desc":"\u101b\u103e\u102f\u1015\u103a\u1015\u103d\u1031\u1014\u1031\u101e\u102c \u1000\u102f\u1010\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u101b\u103e\u1004\u103a\u1038","redo_desc":"\u103c\u1015\u1014\u103a\u101c\u102f\u1015\u103a (Ctrl Y)","undo_desc":"\u1019\u101c\u102f\u1015\u103a (Ctrl Z)","numlist_desc":"\u1021\u1019\u103e\u1010\u103a\u1005\u1009\u103a\u1010\u1015\u103a\u1031\u101e\u102c \u1005\u102c\u101b\u1004\u103a\u1038","bullist_desc":"\u1021\u1019\u103e\u1010\u103a\u1005\u1009\u103a\u1019\u1010\u1015\u103a\u1031\u101e\u102c \u1005\u102c\u101b\u1004\u103a\u1038","striketrough_desc":"\u103c\u1016\u1010\u103a\u1019\u103b\u1009\u103a\u1038","underline_desc":"\u1031\u1021\u102c\u1000\u103a\u1019\u103b\u1009\u103a\u1038 (Ctrl U)","italic_desc":"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1005\u102c\u1004\u103a\u1038 (Ctrl I)","bold_desc":"\u1005\u102c\u101c\u1036\u102f\u1038\u1021\u1011\u1030 (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nb.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nb.js
new file mode 100644
index 000000000..178bae8fa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.simple',{"cleanup_desc":"Rens ukurant kode","redo_desc":"Gj\u00f8r om (Ctrl + Y)","undo_desc":"Angre (Ctrl+Z)","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","striketrough_desc":"Gjennomstreking","underline_desc":"Understreking","italic_desc":"Kursiv","bold_desc":"Fet"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nl.js
new file mode 100644
index 000000000..9f105d507
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.simple',{"cleanup_desc":"Code opruimen","redo_desc":"Herhalen (Ctrl+Y)","undo_desc":"Ongedaan maken (Ctrl+Z)","numlist_desc":"Nummering","bullist_desc":"Opsommingstekens","striketrough_desc":"Doorhalen","underline_desc":"Onderstrepen (Ctrl+U)","italic_desc":"Cursief (Ctrl+I)","bold_desc":"Vet (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nn.js
new file mode 100644
index 000000000..8b81334bb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/nn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.simple',{"cleanup_desc":"Rens grisete kode","redo_desc":"Gjer om","undo_desc":"Angre","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","striketrough_desc":"Gjennomstreking","underline_desc":"Understreking","italic_desc":"Kursiv","bold_desc":"Feit"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/no.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/no.js
new file mode 100644
index 000000000..9523fd6f2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/no.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.simple',{"cleanup_desc":"Rense grisete kode","redo_desc":"Gj\u00f8r om","undo_desc":"Angre","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","striketrough_desc":"Gjennomstreke","underline_desc":"Understreke (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/pl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/pl.js
new file mode 100644
index 000000000..e48d5df13
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/pl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.simple',{"cleanup_desc":"Wyczy\u015b\u0107 nieuporz\u0105dkowany kod","redo_desc":"Pon\u00f3w (Ctrl+Y)","undo_desc":"Cofnij (Ctrl+Z)","numlist_desc":"Lista numerowana","bullist_desc":"Lista nienumerowana","striketrough_desc":"Przekre\u015blenie","underline_desc":"Podkre\u015blenie (Ctrl+U)","italic_desc":"Kursywa (Ctrl+I)","bold_desc":"Pogrubienie (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ps.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ps.js
new file mode 100644
index 000000000..4070f0907
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ps.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/pt.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/pt.js
new file mode 100644
index 000000000..955201d2a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/pt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.simple',{"cleanup_desc":"Limpar c\u00f3digo incorreto","redo_desc":"Refazer (Ctrl+Y)","undo_desc":"Desfazer (Ctrl+Z)","numlist_desc":"Lista ordenada","bullist_desc":"Lista n\u00e3o-ordenada","striketrough_desc":"Riscado","underline_desc":"Sublinhado (Ctrl+U)","italic_desc":"It\u00e1lico (Ctrl+I)","bold_desc":"Negrito (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ro.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ro.js
new file mode 100644
index 000000000..3e3ef32a4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ro.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.simple',{"cleanup_desc":"Cur\u0103\u021b\u0103 codul","redo_desc":"Ref\u0103 (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"List\u0103 ordonat\u0103","bullist_desc":"List\u0103 neordonat\u0103","striketrough_desc":"T\u0103iat","underline_desc":"Subliniat (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"\u00cengro\u0219at (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ru.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ru.js
new file mode 100644
index 000000000..44970b2e9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ru.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.simple',{"cleanup_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0439 \u043a\u043e\u0434","redo_desc":"\u0412\u0435\u0440\u043d\u0443\u0442\u044c (Ctrl+Y)","undo_desc":"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c (Ctrl+Z)","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","striketrough_desc":"\u0417\u0430\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","underline_desc":"\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u041f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u044b\u0439 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sc.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sc.js
new file mode 100644
index 000000000..264fb70e3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sc.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.simple',{"cleanup_desc":"\u6e05\u9664\u591a\u4f59\u4ee3\u7801","redo_desc":"\u91cd\u505a(Ctrl+Y)","undo_desc":"\u64a4\u9500(Ctrl+Z)","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u4e13\u6848\u7b26\u53f7","striketrough_desc":"\u5220\u9664\u7ebf","underline_desc":"\u5e95\u7ebf(Ctrl+U)","italic_desc":"\u659c\u4f53(Ctrl+I)","bold_desc":"\u9ed1\u4f53(Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/se.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/se.js
new file mode 100644
index 000000000..22a0c300e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/se.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.simple',{"cleanup_desc":"St\u00e4da upp i k\u00e4llkoden","redo_desc":"G\u00f6r om (Ctrl+Y)","undo_desc":"\u00c5ngra (Ctrl+Z)","numlist_desc":"Nummerlista","bullist_desc":"Punktlista","striketrough_desc":"Genomstruken","underline_desc":"Understruken (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/si.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/si.js
new file mode 100644
index 000000000..8f02c368b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/si.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.simple',{"cleanup_desc":"\u0dc0\u0dd0\u0dbb\u0daf\u0dd2 \u0d9a\u0dda\u0dad \u0d89\u0dc0\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","redo_desc":"\u0db1\u0dd0\u0dc0\u0dad \u0d9a\u0dbb\u0db1\u0dc0\u0dcf (Ctrl+Y)","undo_desc":"\u0db1\u0dd2\u0dc1\u0dca\u0db4\u0dca\u200d\u0dbb\u0db7 \u0d9a\u0dbb\u0db1\u0dca\u0db1 (Ctrl+Z)","numlist_desc":"\u0d9a\u0dca\u200d\u0dbb\u0db8\u0dcf\u0db1\u0dd4\u0d9a\u0dd6\u0dbd \u0dbd\u0dd0\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","bullist_desc":"\u0d85\u0d9a\u0dca\u200d\u0dbb\u0db8\u0dcf\u0db1\u0dd4\u0d9a\u0dd6\u0dbd \u0dbd\u0dd0\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sk.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sk.js
new file mode 100644
index 000000000..76a87f88f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.simple',{"cleanup_desc":"Vy\u010disti\u0165 k\u00f3d","redo_desc":"Znovu (Ctrl+Y)","undo_desc":"Sp\u00e4\u0165 (Ctrl+Z)","numlist_desc":"\u010c\u00edslovan\u00fd zoznam","bullist_desc":"Zoznam s odr\u00e1\u017ekami","striketrough_desc":"Pre\u010diarknut\u00e9","underline_desc":"Pod\u010diarknut\u00e9 (Ctrl+U)","italic_desc":"Kurz\u00edva (Ctrl+I)","bold_desc":"Tu\u010dn\u00e9 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sl.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sl.js
new file mode 100644
index 000000000..5bd108bc4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.simple',{"cleanup_desc":"Pre\u010disti kodo","redo_desc":"Uveljavi (Ctrl+Y)","undo_desc":"Razveljavi (Ctrl+Z)","numlist_desc":"Na\u0161tevanje","bullist_desc":"Alineje","striketrough_desc":"Pre\u010drtano","underline_desc":"Pod\u010drtano (Ctrl+U)","italic_desc":"Po\u0161evno (Ctrl+I)","bold_desc":"Krepko (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sq.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sq.js
new file mode 100644
index 000000000..3b01cd6a7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sq.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.simple',{"cleanup_desc":"Pastro kodin","redo_desc":"Rib\u00ebj (Ctrl+Y)","undo_desc":"\u00c7b\u00ebj (Ctrl+Z)","numlist_desc":"List\u00eb e rregullt","bullist_desc":"List\u00eb e parregullt","striketrough_desc":"Vij\u00eb n\u00eb mes","underline_desc":"I N\u00ebnvizuar (Ctrl+U)","italic_desc":"I Pjerr\u00ebt (Ctrl+I)","bold_desc":"I Trash\u00eb (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sr.js
new file mode 100644
index 000000000..0e17e5b8e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.simple',{"cleanup_desc":"O\u010disti kod","redo_desc":"Poni\u0161ti opoziv (Ctrl Y)","undo_desc":"Opozovi (Ctrl+Z)","numlist_desc":"Ure\u0111eno nabrajanje","bullist_desc":"Neure\u0111eno nabrajanje","striketrough_desc":"Precrtano","underline_desc":"Podvu\u010deno (Ctrl U)","italic_desc":"Isko\u0161eno (Ctrl I)","bold_desc":"Podebljno (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sv.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sv.js
new file mode 100644
index 000000000..4824f5815
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.simple',{"cleanup_desc":"St\u00e4da upp i k\u00e4llkoden","redo_desc":"G\u00f6r om (Ctrl+Y)","undo_desc":"\u00c5\u0085ngra (Ctrl+Z)","numlist_desc":"Nummerlista","bullist_desc":"Punktlista","striketrough_desc":"Genomstruken","underline_desc":"Understruken (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sy.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sy.js
new file mode 100644
index 000000000..3a80aa68d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/sy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.simple',{"cleanup_desc":"Cleanup Messy Code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ta.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ta.js
new file mode 100644
index 000000000..941af1784
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ta.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/te.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/te.js
new file mode 100644
index 000000000..c1c9a2a77
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/te.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/th.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/th.js
new file mode 100644
index 000000000..241d1ee21
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/th.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.simple',{"cleanup_desc":"\u0e25\u0e49\u0e32\u0e07\u0e23\u0e2b\u0e31\u0e2a\u0e02\u0e22\u0e30","redo_desc":"\u0e17\u0e33\u0e0b\u0e49\u0e33 (Ctrl+Y)","undo_desc":"\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01 (Ctrl+Z)","numlist_desc":"\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02","bullist_desc":"\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23","striketrough_desc":"\u0e02\u0e35\u0e14\u0e06\u0e48\u0e32","underline_desc":"\u0e15\u0e31\u0e27\u0e40\u0e02\u0e35\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e43\u0e15\u0e49 (Ctrl+U)","italic_desc":"\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e35\u0e22\u0e07 (Ctrl+I)","bold_desc":"\u0e15\u0e31\u0e27\u0e2b\u0e19\u0e32 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tn.js
new file mode 100644
index 000000000..33951a7f5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.simple',{"cleanup_desc":"Kolomaka khoudi e meragaraga ","redo_desc":"Dira-gape (Ctrl+Y)","undo_desc":"Dirolola(Ctrl+Z)","numlist_desc":"Tatelano e rulagantsweng","bullist_desc":"Tatelano e thakathakaneng","striketrough_desc":"Sega-bogare","underline_desc":"Sega-tselana (Ctrl+U)","italic_desc":"Tseketa (Ctrl+I)","bold_desc":"Bokima (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tr.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tr.js
new file mode 100644
index 000000000..01e458598
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.simple',{"cleanup_desc":"Da\u011f\u0131n\u0131k kodu temizle","redo_desc":"Yinele (Ctrl+Y)","undo_desc":"Geri al (Ctrl+Z)","numlist_desc":"S\u0131ral\u0131 liste","bullist_desc":"S\u0131ras\u0131z liste","striketrough_desc":"\u00dcst\u00fc \u00e7izili","underline_desc":"Alt\u0131 \u00e7izili (Ctrl+U)","italic_desc":"\u0130talik (Ctrl+I)","bold_desc":"Kal\u0131n (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tt.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tt.js
new file mode 100644
index 000000000..234795324
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.simple',{"cleanup_desc":"\u6e05\u9664\u5167\u5bb9","redo_desc":"\u91cd\u4f5c\u8b8a\u66f4 (Ctrl+Y)","undo_desc":"\u53d6\u6d88\u8b8a\u66f4 (Ctrl+Z)","numlist_desc":"\u7de8\u865f","bullist_desc":"\u6e05\u55ae\u7b26\u865f","striketrough_desc":"\u4e2d\u5283\u7dda","underline_desc":"\u5e95\u7dda (Ctrl+U)","italic_desc":"\u659c\u9ad4(Ctrl+I)","bold_desc":"\u7c97\u9ad4(Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tw.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tw.js
new file mode 100644
index 000000000..56adacd0f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.simple',{"cleanup_desc":"\u6e05\u9664\u683c\u5f0f","redo_desc":"\u53d6\u6d88\u5fa9\u539f (Ctrl+Y)","undo_desc":"\u5fa9\u539f (Ctrl+Z)","numlist_desc":"\u7de8\u865f\u5217\u8868","bullist_desc":"\u9805\u76ee\u5217\u8868","striketrough_desc":"\u522a\u9664\u7dda","underline_desc":"\u5e95\u7dda (Ctrl+U)","italic_desc":"\u659c\u9ad4 (Ctrl+I)","bold_desc":"\u7c97\u9ad4(Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/uk.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/uk.js
new file mode 100644
index 000000000..b016c9a43
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/uk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.simple',{"cleanup_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0437\u0430\u0439\u0432\u0438\u0439 \u043a\u043e\u0434","redo_desc":"\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 (Ctrl+Y)","undo_desc":"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438 (Ctrl+Z)","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041d\u0435\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","striketrough_desc":"\u0417\u0430\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","underline_desc":"\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u0416\u0438\u0440\u043d\u0438\u0439 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ur.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ur.js
new file mode 100644
index 000000000..9610ffdfd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/ur.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/vi.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/vi.js
new file mode 100644
index 000000000..a22b4bfa3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/vi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.simple',{"cleanup_desc":"D\u1ecdn d\u1eb9p m\u00e3 l\u1ed9n x\u1ed9n","redo_desc":"Ti\u1ebfn t\u1edbi (Ctrl+Y)","undo_desc":"Tr\u1edf v\u1ec1 (Ctrl+Z)","numlist_desc":"Danh s\u00e1ch theo th\u1ee9 t\u1ef1","bullist_desc":"Danh s\u00e1ch kh\u00f4ng theo th\u1ee9 t\u1ef1","striketrough_desc":"G\u1ea1ch ngang","underline_desc":"G\u1ea1ch ch\u00e2n (Ctrl+U)","italic_desc":"Ch\u1eef nghi\u00eang (Ctrl+I)","bold_desc":"Ch\u1eef \u0111\u1eadm (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh-cn.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh-cn.js
new file mode 100644
index 000000000..6e0c6954b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh-cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.simple',{"cleanup_desc":"\u6e05\u9664\u65e0\u7528\u4ee3\u7801","redo_desc":"\u6062\u590d(Ctrl Y)","undo_desc":"\u64a4\u9500(Ctrl Z)","numlist_desc":"\u7f16\u53f7\u5217\u8868","bullist_desc":"\u9879\u76ee\u5217\u8868","striketrough_desc":"\u5220\u9664\u7ebf","underline_desc":"\u4e0b\u5212\u7ebf(Ctrl U)","italic_desc":"\u659c\u4f53(Ctrl I)","bold_desc":"\u7c97\u4f53(Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh-tw.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh-tw.js
new file mode 100644
index 000000000..1629934c8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh-tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.simple',{"cleanup_desc":"\u6574\u7406\u8cc7\u6599","redo_desc":"\u91cd\u4f86 (Ctrl Y)","undo_desc":"\u5fa9\u539f (Ctrl Z)","numlist_desc":"\u9805\u76ee\u7b26\u865f (\u6709\u6578\u5b57\u7684)","bullist_desc":"\u9805\u76ee\u7b26\u865f","striketrough_desc":"\u522a\u9664\u7dda","underline_desc":"\u5e95\u7dda (Ctrl U)","italic_desc":"\u659c\u7dda (Ctrl I)","bold_desc":"\u52a0\u7c97 (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh.js
new file mode 100644
index 000000000..1d0a25232
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zh.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.simple',{"cleanup_desc":"\u6e05\u9664\u683c\u5f0f","redo_desc":"\u53d6\u6d88\u5fa9\u539f (Ctrl Y)","undo_desc":"\u5fa9\u539f (Ctrl Z)","numlist_desc":"\u7de8\u865f\u5217\u8868","bullist_desc":"\u9805\u76ee\u5217\u8868","striketrough_desc":"\u522a\u9664\u7dda","underline_desc":"\u5e95\u7dda (Ctrl U)","italic_desc":"\u659c\u9ad4 (Ctrl I)","bold_desc":"\u7c97\u9ad4 (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zu.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zu.js
new file mode 100644
index 000000000..215607713
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/langs/zu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.simple',{"cleanup_desc":"\u6e05\u9664\u591a\u4f59\u4ee3\u7801","redo_desc":"\u91cd\u505a(Ctrl+Y)","undo_desc":"\u64a4\u9500(Ctrl+Z)","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u4e13\u6848\u7b26\u53f7","striketrough_desc":"\u5220\u9664\u7ebf","underline_desc":"\u5e95\u7ebf(Ctrl+U)","italic_desc":"\u659c\u4f53(Ctrl+I)","bold_desc":"\u9ed1\u4f53(Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css
new file mode 100644
index 000000000..2506c807c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/default/content.css
@@ -0,0 +1,25 @@
+body, td, pre {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 10px;
+}
+
+body {
+ background-color: #FFFFFF;
+}
+
+.mceVisualAid {
+ border: 1px dashed #BBBBBB;
+}
+
+/* MSIE specific */
+
+* html body {
+ scrollbar-3dlight-color: #F0F0EE;
+ scrollbar-arrow-color: #676662;
+ scrollbar-base-color: #F0F0EE;
+ scrollbar-darkshadow-color: #DDDDDD;
+ scrollbar-face-color: #E0E0DD;
+ scrollbar-highlight-color: #F0F0EE;
+ scrollbar-shadow-color: #F0F0EE;
+ scrollbar-track-color: #F5F5F5;
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css
new file mode 100644
index 000000000..076fe84e3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/default/ui.css
@@ -0,0 +1,32 @@
+/* Reset */
+.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}
+
+/* Containers */
+.defaultSimpleSkin {position:relative}
+.defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;}
+.defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;}
+.defaultSimpleSkin .mceToolbar {height:24px;}
+
+/* Layout */
+.defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px}
+.defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
+
+/* Button */
+.defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px}
+.defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}
+.defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0}
+.defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
+
+/* Separator */
+.defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px}
+
+/* Theme */
+.defaultSimpleSkin span.mce_bold {background-position:0 0}
+.defaultSimpleSkin span.mce_italic {background-position:-60px 0}
+.defaultSimpleSkin span.mce_underline {background-position:-140px 0}
+.defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0}
+.defaultSimpleSkin span.mce_undo {background-position:-160px 0}
+.defaultSimpleSkin span.mce_redo {background-position:-100px 0}
+.defaultSimpleSkin span.mce_cleanup {background-position:-40px 0}
+.defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}
+.defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css
new file mode 100644
index 000000000..595809fa6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/content.css
@@ -0,0 +1,17 @@
+body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
+
+body {background: #FFF;}
+.mceVisualAid {border: 1px dashed #BBB;}
+
+/* IE */
+
+* html body {
+scrollbar-3dlight-color: #F0F0EE;
+scrollbar-arrow-color: #676662;
+scrollbar-base-color: #F0F0EE;
+scrollbar-darkshadow-color: #DDDDDD;
+scrollbar-face-color: #E0E0DD;
+scrollbar-highlight-color: #F0F0EE;
+scrollbar-shadow-color: #F0F0EE;
+scrollbar-track-color: #F5F5F5;
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png
new file mode 100644
index 000000000..527e3495a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png
Binary files differ
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css
new file mode 100644
index 000000000..cf6c35d10
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/themes/simple/skins/o2k7/ui.css
@@ -0,0 +1,35 @@
+/* Reset */
+.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}
+
+/* Containers */
+.o2k7SimpleSkin {position:relative}
+.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;}
+.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;}
+.o2k7SimpleSkin .mceToolbar {height:26px;}
+
+/* Layout */
+.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; }
+.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}
+.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px}
+.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
+
+/* Button */
+.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}
+.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px}
+.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}
+.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px}
+.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
+
+/* Separator */
+.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}
+
+/* Theme */
+.o2k7SimpleSkin span.mce_bold {background-position:0 0}
+.o2k7SimpleSkin span.mce_italic {background-position:-60px 0}
+.o2k7SimpleSkin span.mce_underline {background-position:-140px 0}
+.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0}
+.o2k7SimpleSkin span.mce_undo {background-position:-160px 0}
+.o2k7SimpleSkin span.mce_redo {background-position:-100px 0}
+.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0}
+.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}
+.o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js
new file mode 100644
index 000000000..ad3745f86
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce.js
@@ -0,0 +1 @@
+(function(d){var a=/^\s*|\s*$/g,e,c="B".replace(/A(.)|B/,"$1")==="$1";var b={majorVersion:"3",minorVersion:"4.7",releaseDate:"2011-11-03",_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.isIE7=s.isIE&&/MSIE [7]/.test(g);s.isIE8=s.isIE&&/MSIE [8]/.test(g);s.isIE9=s.isIE&&/MSIE [9]/.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(/^([\w\-]+):([^\/]{2})/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){if(o.hasOwnProperty(i)){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(a){a.VK={DELETE:46,BACKSPACE:8,ENTER:13,TAB:9,SPACEBAR:32,UP:38,DOWN:40}})(tinymce);(function(k){var i=k.VK,j=i.BACKSPACE,h=i.DELETE;function c(m){var o=m.dom,n=m.selection;m.onKeyDown.add(function(q,u){var p,v,s,t,r;r=u.keyCode==h;if(r||u.keyCode==j){u.preventDefault();p=n.getRng();v=o.getParent(p.startContainer,o.isBlock);if(r){v=o.getNext(v,o.isBlock)}if(v){s=v.firstChild;while(s&&s.nodeType==3&&s.nodeValue.length==0){s=s.nextSibling}if(s&&s.nodeName==="SPAN"){t=s.cloneNode(false)}}q.getDoc().execCommand(r?"ForwardDelete":"Delete",false,null);v=o.getParent(p.startContainer,o.isBlock);k.each(o.select("span.Apple-style-span,font.Apple-style-span",v),function(x){var y=n.getBookmark();if(t){o.replace(t.cloneNode(false),x,true)}else{o.remove(x,true)}n.moveToBookmark(y)})}})}function d(m){m.onKeyUp.add(function(n,p){var o=p.keyCode;if(o==h||o==j){if(n.dom.isEmpty(n.getBody())){n.setContent("",{format:"raw"});n.nodeChanged();return}}})}function b(m){m.dom.bind(m.getDoc(),"focusin",function(){m.selection.setRng(m.selection.getRng())})}function e(m){m.onKeyDown.add(function(n,q){if(q.keyCode===j){if(n.selection.isCollapsed()&&n.selection.getRng(true).startOffset===0){var p=n.selection.getNode();var o=p.previousSibling;if(o&&o.nodeName&&o.nodeName.toLowerCase()==="hr"){n.dom.remove(o);k.dom.Event.cancel(q)}}}})}function g(m){if(!Range.prototype.getClientRects){m.onMouseDown.add(function(o,p){if(p.target.nodeName==="HTML"){var n=o.getBody();n.blur();setTimeout(function(){n.focus()},0)}})}}function f(m){m.onClick.add(function(n,o){o=o.target;if(/^(IMG|HR)$/.test(o.nodeName)){n.selection.getSel().setBaseAndExtent(o,0,o,1)}if(o.nodeName=="A"&&n.dom.hasClass(o,"mceItemAnchor")){n.selection.select(o)}n.nodeChanged()})}function l(m){var o,n;m.dom.bind(m.getDoc(),"selectionchange",function(){if(n){clearTimeout(n);n=0}n=window.setTimeout(function(){var p=m.selection.getRng();if(!o||!k.dom.RangeUtils.compareRanges(p,o)){m.nodeChanged();o=p}},50)})}function a(m){document.body.setAttribute("role","application")}k.create("tinymce.util.Quirks",{Quirks:function(m){if(k.isWebKit){c(m);d(m);b(m);f(m);if(k.isIDevice){l(m)}}if(k.isIE){e(m);d(m);a(m)}if(k.isGecko){e(m);g(m)}}})})(tinymce);(function(j){var a,g,d,k=/[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,b=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\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,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,audio,object"),g);b=d("pre,script,style,textarea");e=d("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr");m.html.Schema=function(r){var A=this,n={},o={},y=[],q,p;r=r||{};if(r.verify_html===false){r.valid_elements="*[*]"}if(r.valid_styles){q={};k(r.valid_styles,function(C,B){q[B]=m.explode(C)})}p=r.whitespace_elements?d(r.whitespace_elements):b;function z(B){return new RegExp("^"+B.replace(/([?+*])/g,".$1")+"$")}function t(I){var H,D,W,S,X,C,F,R,U,N,V,Z,L,G,T,B,P,E,Y,aa,M,Q,K=/^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,O=/^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,J=/[*?+]/;if(I){I=i(I);if(n["@"]){P=n["@"].attributes;E=n["@"].attributesOrder}for(H=0,D=I.length;H<D;H++){C=K.exec(I[H]);if(C){T=C[1];N=C[2];B=C[3];U=C[4];L={};G=[];F={attributes:L,attributesOrder:G};if(T==="#"){F.paddEmpty=true}if(T==="-"){F.removeEmpty=true}if(P){for(aa in P){L[aa]=P[aa]}G.push.apply(G,E)}if(U){U=i(U,"|");for(W=0,S=U.length;W<S;W++){C=O.exec(U[W]);if(C){R={};Z=C[1];V=C[2].replace(/::/g,":");T=C[3];Q=C[4];if(Z==="!"){F.attributesRequired=F.attributesRequired||[];F.attributesRequired.push(V);R.required=true}if(Z==="-"){delete L[V];G.splice(m.inArray(G,V),1);continue}if(T){if(T==="="){F.attributesDefault=F.attributesDefault||[];F.attributesDefault.push({name:V,value:Q});R.defaultValue=Q}if(T===":"){F.attributesForced=F.attributesForced||[];F.attributesForced.push({name:V,value:Q});R.forcedValue=Q}if(T==="<"){R.validValues=d(Q,"?")}}if(J.test(V)){F.attributePatterns=F.attributePatterns||[];R.pattern=z(V);F.attributePatterns.push(R)}else{if(!L[V]){G.push(V)}L[V]=R}}}}if(!P&&N=="@"){P=L;E=G}if(B){F.outputName=N;n[B]=F}if(J.test(N)){F.pattern=z(N);y.push(F)}else{n[N]=F}}}}}function v(B){n={};y=[];t(B);k(h,function(D,C){o[C]=D.children})}function s(C){var B=/^(~)?(.+)$/;if(C){k(i(C),function(G){var E=B.exec(G),F=E[1]==="~",H=F?"span":"div",D=E[2];o[D]=o[H];c[D]=H;if(!F){l[D]={}}k(o,function(I,J){if(I[H]){I[D]=I[H]}})})}}function u(C){var B=/^([+\-]?)(\w+)\[([^\]]+)\]$/;if(C){k(i(C),function(G){var F=B.exec(G),D,E;if(F){E=F[1];if(E){D=o[F[2]]}else{D=o[F[2]]={"#comment":{}}}D=o[F[2]];k(i(F[3],"|"),function(H){if(E==="-"){delete D[H]}else{D[H]={}}})}})}}function x(B){var D=n[B],C;if(D){return D}C=y.length;while(C--){D=y[C];if(D.pattern.test(B)){return D}}}if(!r.valid_elements){k(h,function(C,B){n[B]={attributes:C.attributes,attributesOrder:C.attributesOrder};o[B]=C.children});k(i("strong/b,em/i"),function(B){B=i(B,"/");n[B[1]].outputName=B[0]});n.img.attributesDefault=[{name:"alt",value:""}];k(i("ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr"),function(B){n[B].removeEmpty=true});k(i("p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption"),function(B){n[B].paddEmpty=true})}else{v(r.valid_elements)}s(r.custom_elements);u(r.valid_children);t(r.extended_valid_elements);u("+ol[ul|ol],+ul[ul|ol]");if(!x("span")){t("span[!data-mce-type|*]")}if(r.invalid_elements){m.each(m.explode(r.invalid_elements),function(B){if(n[B]){delete n[B]}})}A.children=o;A.styles=q;A.getBoolAttrs=function(){return j};A.getBlockElements=function(){return l};A.getShortEndedElements=function(){return g};A.getSelfClosingElements=function(){return e};A.getNonEmptyElements=function(){return f};A.getWhiteSpaceElements=function(){return p};A.isValidChild=function(B,D){var C=o[B];return !!(C&&C[D])};A.getElementRule=x;A.getCustomElements=function(){return c};A.addValidElements=t;A.setValidElements=v;A.addCustomElements=s;A.addValidChildren=u};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(D){var n=this,g,F=0,H,A,z=[],M,P,B,q,y,r,L,G,N,u,m,k,s,Q,o,O,E,R,K,f,I,l,C,J,h,v=0,j=a.html.Entities.decode,x,p;function t(S){var U,T;U=z.length;while(U--){if(z[U].name===S){break}}if(U>=0){for(T=z.length-1;T>=U;T--){S=z[T];if(S.valid){n.end(S.name)}}z.length=U}}l=new RegExp("<(?:(?:!--([\\w\\W]*?)-->)|(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|(?:!DOCTYPE([\\w\\W]*?)>)|(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|(?:\\/([^>]+)>)|(?:([^\\s\\/<>]+)((?:\\s+[^\"'>]+(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>]*))*|\\/)>))","g");C=/([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;J={script:/<\/script[^>]*>/gi,style:/<\/style[^>]*>/gi,noscript:/<\/noscript[^>]*>/gi};L=e.getShortEndedElements();I=e.getSelfClosingElements();G=e.getBoolAttrs();u=c.validate;r=c.remove_internals;x=c.fix_self_closing;p=a.isIE;o=/^:/;while(g=l.exec(D)){if(F<g.index){n.text(j(D.substr(F,g.index-F)))}if(H=g[6]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}t(H)}else{if(H=g[7]){H=H.toLowerCase();if(p&&o.test(H)){H=H.substr(1)}N=H in L;if(x&&I[H]&&z.length>0&&z[z.length-1].name===H){t(H)}if(!u||(m=e.getElementRule(H))){k=true;if(u){O=m.attributes;E=m.attributePatterns}if(Q=g[8]){y=Q.indexOf("data-mce-type")!==-1;if(y&&r){k=false}M=[];M.map={};Q.replace(C,function(T,S,X,W,V){var Y,U;S=S.toLowerCase();X=S in G?S:j(X||W||V||"");if(u&&!y&&S.indexOf("data-")!==0){Y=O[S];if(!Y&&E){U=E.length;while(U--){Y=E[U];if(Y.pattern.test(S)){break}}if(U===-1){Y=null}}if(!Y){return}if(Y.validValues&&!(X in Y.validValues)){return}}M.map[S]=X;M.push({name:S,value:X})})}else{M=[];M.map={}}if(u&&!y){R=m.attributesRequired;K=m.attributesDefault;f=m.attributesForced;if(f){P=f.length;while(P--){s=f[P];q=s.name;h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}if(K){P=K.length;while(P--){s=K[P];q=s.name;if(!(q in M.map)){h=s.value;if(h==="{$uid}"){h="mce_"+v++}M.map[q]=h;M.push({name:q,value:h})}}}if(R){P=R.length;while(P--){if(R[P] in M.map){break}}if(P===-1){k=false}}if(M.map["data-mce-bogus"]){k=false}}if(k){n.start(H,M,N)}}else{k=false}if(A=J[H]){A.lastIndex=F=g.index+g[0].length;if(g=A.exec(D)){if(k){B=D.substr(F,g.index-F)}F=g.index+g[0].length}else{B=D.substr(F);F=D.length}if(k&&B.length>0){n.text(B,true)}if(k){n.end(H)}l.lastIndex=F;continue}if(!N){if(!Q||Q.indexOf("/")!=Q.length-1){z.push({name:H,valid:k})}else{if(k){n.end(H)}}}}else{if(H=g[1]){n.comment(H)}else{if(H=g[2]){n.cdata(H)}else{if(H=g[3]){n.doctype(H)}else{if(H=g[4]){n.pi(H,g[5])}}}}}}F=g.index+g[0].length}if(F<D.length){n.text(j(D.substr(F)))}for(P=z.length-1;P>=0;P--){H=z[P];if(H.valid){n.end(H.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){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;if(j!==null){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(o,p,l){var j,k=this,m;o=k.get(o);if(!o||o.nodeType!==1){return l===m?false:l}if(!e(l)){l=""}if(/^(src|href|style|coords|shape)$/.test(p)){j=o.getAttribute("data-mce-"+p);if(j){return j}}if(b&&k.props[p]){j=o[k.props[p]];j=j&&j.nodeValue?j.nodeValue:j}if(!j){j=o.getAttribute(p,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(p)){if(o[k.props[p]]===true&&j===""){return p}return j?p:""}if(o.nodeName==="FORM"&&o.getAttributeNode(p)){return o.getAttributeNode(p).nodeValue}if(p==="style"){j=j||o.style.cssText;if(j){j=k.serializeStyle(k.parseStyle(j),o.nodeName);if(k.settings.keep_values&&!k._isRes(j)){o.setAttribute("data-mce-style",j)}}}if(d&&p==="class"&&j){j=j.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(b){switch(p){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 p}return l;case"shape":j=j.toLowerCase();break;default:if(p.indexOf("on")===0&&j){j=h._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1",""+j)}}}return(j!==m&&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(m,k){var r=this,o,n,q,j,l,p;m=m.firstChild;if(m){j=new h.dom.TreeWalker(m);k=k||r.schema?r.schema.getNonEmptyElements():null;do{q=m.nodeType;if(q===1){if(m.getAttribute("data-mce-bogus")){continue}l=m.nodeName.toLowerCase();if(k&&k[l]){p=m.parentNode;if(l==="br"&&r.isBlock(p)&&p.firstChild===m&&p.lastChild===m){continue}return false}n=r.getAttribs(m);o=m.attributes.length;while(o--){l=m.attributes[o].nodeName;if(l==="name"||l==="data-mce-bookmark"){return false}}}if((q===3&&!i.test(m.nodeValue))){return false}}while(m=j.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&&t.nodeType!==9){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)},setCursorLocation:function(h,i){var f=this;var g=f.dom.createRng();g.setStart(h,i);g.setEnd(h,i);f.setRng(g);f.collapse(false)},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="<br>"+(h.item?h.item(0).outerHTML:h.htmlText);l.removeChild(l.firstChild)}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()}if(/^\s+/.test(g)){f.pasteHTML('<span id="__mce_tmp">_</span>'+g);n.dom.remove("__mce_tmp")}else{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(o,g){var m=this,j=m.dom,l,k,h,i=[];l=j.getParent(o||m.getStart(),j.isBlock);k=j.getParent(g||m.getEnd(),j.isBlock);if(l){i.push(l)}if(l&&k&&l!=k){h=l;var f=new c.dom.TreeWalker(l,j.getRoot());while((h=f.next())&&h!=k){if(j.isBlock(h)){i.push(h)}}}if(k&&l!=k){i.push(k)}return i},normalize:function(){var g=this,f,i;if(c.isIE){return}function h(p){var k,o,n,m=g.dom,j=m.getRoot(),l;k=f[(p?"start":"end")+"Container"];o=f[(p?"start":"end")+"Offset"];if(k.nodeType===9){k=k.body;o=0}if(k===j){if(k.hasChildNodes()){k=k.childNodes[Math.min(!p&&o>0?o-1:o,k.childNodes.length-1)];o=0;if(k.hasChildNodes()){l=k;n=new c.dom.TreeWalker(k,j);do{if(l.nodeType===3){o=p?0:l.nodeValue.length-1;k=l;break}if(l.nodeName==="BR"){o=m.nodeIndex(l);k=l.parentNode;break}}while(l=(p?n.next():n.prev()));i=true}}}if(i){f["set"+(p?"Start":"End")](k,o)}}f=g.getRng();h(true);if(f.collapsed){h()}if(i){g.setRng(f)}},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,map").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|\u200B/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,s){var i=d.startContainer,l=d.startOffset,t=d.endContainer,m=d.endOffset,j,g,o,h,r,q,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(u){s([u])});return}function f(u){var v;v=u[0];if(v.nodeType===3&&v===i&&l>=v.nodeValue.length){u.splice(0,1)}v=u[u.length-1];if(m===0&&u.length>0&&v===t&&v.nodeType===3){u.splice(u.length-1,1)}return u}function p(x,v,u){var y=[];for(;x&&x!=u;x=x[v]){y.push(x)}return y}function n(v,u){do{if(v.parentNode==u){return v}v=v.parentNode}while(v)}function k(x,v,y){var u=y?"nextSibling":"previousSibling";for(h=x,r=h.parentNode;h&&h!=v;h=r){r=h.parentNode;q=p(h==x?h:h[u],u);if(q.length){if(!y){q.reverse()}s(f(q))}}}if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[l]}if(t.nodeType==1&&t.hasChildNodes()){t=t.childNodes[Math.min(m-1,t.childNodes.length-1)]}if(i==t){return s(f([i]))}j=c.findCommonAncestor(i,t);for(h=i;h;h=h.parentNode){if(h===t){return k(i,j,true)}if(h===j){break}}for(h=t;h;h=h.parentNode){if(h===i){return k(t,j)}if(h===j){break}}g=n(i,j)||i;o=n(t,j)||t;k(i,g,true);q=p(g==i?g:g.nextSibling,"nextSibling",o==t?o.nextSibling:o);if(q.length){s(f(q))}k(t,o)};this.split=function(e){var h=e.startContainer,d=e.startOffset,i=e.endContainer,g=e.endOffset;function f(j,k){return j.splitText(k)}if(h==i&&h.nodeType==3){if(d>0&&d<h.nodeValue.length){i=f(h,d);h=i.previousSibling;if(g>d){g=g-d;h=i=f(i,g).previousSibling;g=i.nodeValue.length;d=0}else{g=0}}}else{if(h.nodeType==3&&d>0&&d<h.nodeValue.length){h=f(h,d);d=0}if(i.nodeType==3&&g>0&&g<i.nodeValue.length){i=f(i,g).previousSibling;g=i.nodeValue.length}}return{startContainer:h,startOffset:d,endContainer:i,endOffset:g}}};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 h=this,i,j,g;if(f!=h.selectedIndex){i=c.get(h.id+"_text");g=c.get(h.id+"_voiceDesc");j=h.items[f];if(j){h.selectedValue=j.value;h.selectedIndex=f;c.setHTML(i,c.encode(j.title));c.setHTML(g,h.settings.title+" - "+j.title);c.removeClass(i,"mceTitle");c.setAttrib(h.id,"aria-valuenow",j.title)}else{c.setHTML(i,c.encode(h.settings.title));c.setHTML(g,c.encode(h.settings.title));c.addClass(i,"mceTitle");h.selectedValue=h.selectedIndex=null;c.setAttrib(h.id,"aria-valuenow",h.settings.title)}i=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="listbox" aria-haspopup="true" aria-labelledby="'+f.id+'_voiceDesc" 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,role:"option","class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}})}else{h.id=c.uniqueId();h.role="option";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(d.isWebKit&&(k.keyCode==37||k.keyCode==39)){return b.prevent(k)}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",{role:"presentation","class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",title:g.title},i);return b.createHTML("div",{id:f.id,role:"button",tabindex:"0","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;f.onHideMenu.dispatch()}},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(){var e=this;d.get(e.id).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(){if(b.isWebKit){d.get(f.editor.id+"_ifr").focus()}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",font_size_legacy_values:"xx-small,small,medium,large,x-large,xx-large,300%",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" />';for(z=0;z<H.contentCSS.length;z++){H.iframeHTML+='<link type="text/css" rel="stylesheet" href="'+H.contentCSS[z]+'" />'}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+'"><br></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,display:"block"}});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(){var q=this,v=q.settings,x=n.get(q.id),y=q.getDoc(),u,p;if(!b||!m.relaxedDomain){y.open();y.write(q.iframeHTML);y.close();if(m.relaxedDomain){y.domain=m.relaxedDomain}}p=q.getBody();p.disabled=true;if(!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 A=s.length,C,z,B,D;while(A--){D=s[A];if(D.name==="a"&&D.firstChild){B=D.parent;C=D.lastChild;do{z=C.prev;B.insert(C,D);C=z}while(C)}}})}q.parser.addAttributeFilter("src,href,style",function(s,t){var z=s.length,B,D=q.dom,C,A;while(z--){B=s[z];C=B.attr(t);A="data-mce-"+t;if(!B.attributes.map[A]){if(t==="style"){B.attr(A,D.serializeStyle(D.parseStyle(C),B.name))}else{B.attr(A,q.convertURL(C,t,B.name))}}}});q.parser.addNodeFilter("script",function(s,t){var z=s.length,A;while(z--){A=s[z];A.attr("type","mce-"+(A.attr("type")||"text/javascript"))}});q.parser.addNodeFilter("#cdata",function(s,t){var z=s.length,A;while(z--){A=s[z];A.type=8;A.name="#comment";A.value="[CDATA["+A.value+"]]"}});q.parser.addNodeFilter("p,h1,h2,h3,h4,h5,h6,div",function(t,z){var A=t.length,B,s=q.schema.getNonEmptyElements();while(A--){B=t[A];if(B.isEmpty(s)){B.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"},link:{inline:"a",selector:"a",remove:"all",split:true,deep:true,onmatch:function(s){return true},onformat:function(z,s,t){i(t,function(B,A){q.dom.setAttrib(z,A,B)})}},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);q.quirks=new m.util.Quirks(this);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,z){q.execCallback("handle_node_change_callback",q.id,z,-1,-1,true,q.selection.isCollapsed())})}if(v.save_callback){q.onSaveContent.add(function(s,z){var t=q.execCallback("save_callback",q.id,z.content,q.getBody());if(t){z.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(z){t.content=t.content.replace(z,function(A){return"<!--mce:protected "+escape(A)+"-->"})})}})}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(B,z){var A,t;if(B=="class"){if(!q.classesRE){t=q.dom.getClasses();if(t.length>0){A="";i(t,function(s){A+=(A?"|":"")+s["class"]});q.classesRE=new RegExp("("+A+")","gi")}}return !q.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(z)||q.classesRE.test(z)?z:""}return z}}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,z){if(q.execCallback("handle_event_callback",t,s,z)===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(A){var z=A.parentNode;if(s.dom.isBlock(z)&&z.lastChild===A){s.dom.add(z,"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)}x=null},focus:function(u){var y,q=this,s=q.selection,x=q.settings.content_editable,r,p,v=q.getDoc();if(!u){r=s.getRng();if(r.item){p=r.item(0)}q._refreshContentEditable();s.normalize();if(!x){q.getWin().focus()}if(m.isGecko){q.getBody().focus()}if(p&&p.ownerDocument==v){r=v.body.createControlRange();r.addElement(p);r.select()}}if(m.activeEditor!=q){if((y=m.activeEditor)!=null){y.onDeactivate.dispatch(y,q)}q.onActivate.dispatch(q,y)}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)}r.selection.normalize();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){E._refreshContentEditable();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.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.onKeyDown.add(function(t,D){if(D.keyCode!=8){return}var F=t.selection.getRng().startContainer;var E=t.selection.getRng().startOffset;while(F&&F.nodeType&&F.nodeType!=1&&F.parentNode){F=F.parentNode}if(F&&F.parentNode&&F.parentNode.tagName==="BLOCKQUOTE"&&F.parentNode.firstChild==F&&E==0){t.formatter.toggle("blockquote",null,F.parentNode);var s=t.selection.getRng();s.setStart(F,0);s.setEnd(F,0);t.selection.setRng(s);t.selection.collapse(false)}});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();if(t!==B.getBody()){B.dom.setAttrib(t,"style",null);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)}})}},_refreshContentEditable:function(){var q=this,p,r;if(q._isHidden()){p=q.getBody();r=p.parentNode;r.removeChild(p);r.appendChild(p);p.focus()}},_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 m=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,q=n.formatter,o;function r(z,y,x){var v;z=z.toLowerCase();if(v=j.exec[z]){v(z,y,x);return a}return b}function l(x){var v;x=x.toLowerCase();if(v=j.state[x]){return v(x)}return -1}function h(x){var v;x=x.toLowerCase();if(v=j.value[x]){return v(x)}return b}function u(v,x){x=x||"exec";d(v,function(z,y){d(y.toLowerCase().split(","),function(A){j[x][A]=z})})}c.extend(this,{execCommand:r,queryCommandState:l,queryCommandValue:h,addCommands:u});function f(y,x,v){if(x===e){x=b}if(v===e){v=null}return n.getDoc().execCommand(y,x,v)}function t(v){return q.match(v)}function s(v,x){q.toggle(v,x?{value:x}:e)}function i(v){o=p.getBookmark(v)}function g(){p.moveToBookmark(o)}u({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(z){var y=n.getDoc(),v;try{f(z)}catch(x){v=a}if(v||!y.queryCommandSupported(z)){if(c.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(A){if(A){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(v){if(p.isCollapsed()){p.select(p.getNode())}f(v);p.collapse(b)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){var x=v.substring(7);d("left,center,right,full".split(","),function(y){if(x!=y){q.remove("align"+y)}});s("align"+x);r("mceRepaint")},"InsertUnorderedList,InsertOrderedList":function(y){var v,x;f(y);v=m.getParent(p.getNode(),"ol,ul");if(v){x=v.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(x.nodeName)){i();m.split(x,v);g()}}},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){s(v)},"ForeColor,HiliteColor,FontName":function(y,x,v){s(y,v)},FontSize:function(z,y,x){var v,A;if(x>=1&&x<=7){A=c.explode(k.font_size_style_values);v=c.explode(k.font_size_classes);if(v){x=v[x-1]||x}else{x=A[x-1]||x}}s(z,x)},RemoveFormat:function(v){q.remove(v)},mceBlockQuote:function(v){s("blockquote")},FormatBlock:function(y,x,v){return s(v||"p")},mceCleanup:function(){var v=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(v)},mceRemoveNode:function(z,y,x){var v=x||p.getNode();if(v!=n.getBody()){i();n.dom.remove(v,a);g()}},mceSelectNodeDepth:function(z,y,x){var v=0;m.getParent(p.getNode(),function(A){if(A.nodeType==1&&v++==x){p.select(A);return b}},n.getBody())},mceSelectNode:function(y,x,v){p.select(v)},mceInsertContent:function(B,I,K){var y,J,E,z,F,G,D,C,L,x,A,M,v,H;y=n.parser;J=new c.html.Serializer({},n.schema);v='<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';G={content:K,format:"html"};p.onBeforeSetContent.dispatch(p,G);K=G.content;if(K.indexOf("{$caret}")==-1){K+="{$caret}"}K=K.replace(/\{\$caret\}/,v);if(!p.isCollapsed()){n.getDoc().execCommand("Delete",false,null)}E=p.getNode();G={context:E.nodeName.toLowerCase()};F=y.parse(K,G);A=F.lastChild;if(A.attr("id")=="mce_marker"){D=A;for(A=A.prev;A;A=A.walk(true)){if(A.type==3||!m.isBlock(A.name)){A.parent.insert(D,A,A.name==="br");break}}}if(!G.invalid){K=J.serialize(F);A=E.firstChild;M=E.lastChild;if(!A||(A===M&&A.nodeName==="BR")){m.setHTML(E,K)}else{p.setContent(K)}}else{p.setContent(v);E=n.selection.getNode();z=n.getBody();if(E.nodeType==9){E=A=z}else{A=E}while(A!==z){E=A;A=A.parentNode}K=E==z?z.innerHTML:m.getOuterHTML(E);K=J.serialize(y.parse(K.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i,function(){return J.serialize(F)})));if(E==z){m.setHTML(z,K)}else{m.setOuterHTML(E,K)}}D=m.get("mce_marker");C=m.getRect(D);L=m.getViewPort(n.getWin());if((C.y+C.h>L.y+L.h||C.y<L.y)||(C.x>L.x+L.w||C.x<L.x)){H=c.isIE?n.getDoc().documentElement:n.getBody();H.scrollLeft=C.x;H.scrollTop=C.y-L.h+25}x=m.createRng();A=D.previousSibling;if(A&&A.nodeType==3){x.setStart(A,A.nodeValue.length)}else{x.setStartBefore(D);x.setEndBefore(D)}m.remove(D);p.setRng(x);p.onSetContent.dispatch(p,G);n.addVisual()},mceInsertRawHTML:function(y,x,v){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,function(){return v}))},mceSetContent:function(y,x,v){n.setContent(v)},"Indent,Outdent":function(z){var x,v,y;x=k.indentation;v=/[a-z%]+$/i.exec(x);x=parseInt(x);if(!l("InsertUnorderedList")&&!l("InsertOrderedList")){d(p.getSelectedBlocks(),function(A){if(z=="outdent"){y=Math.max(0,parseInt(A.style.paddingLeft||0)-x);m.setStyle(A,"paddingLeft",y?y+v:"")}else{m.setStyle(A,"paddingLeft",(parseInt(A.style.paddingLeft||0)+x)+v)}})}else{f(z)}},mceRepaint:function(){var x;if(c.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(v){}}},mceToggleFormat:function(y,x,v){q.toggle(v)},InsertHorizontalRule:function(){n.execCommand("mceInsertContent",false,"<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(y,x,v){n.execCommand("mceInsertContent",false,v.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(z,y,x){var v;if(typeof(x)=="string"){x={href:x}}v=m.getParent(p.getNode(),"a");x.href=x.href.replace(" ","%20");if(!v||!x.href){q.remove("link")}if(x.href){q.apply("link",x,v)}},selectAll:function(){var x=m.getRoot(),v=m.createRng();v.setStart(x,0);v.setEnd(x,x.childNodes.length);n.selection.setRng(v)}});u({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(v){return t("align"+v.substring(7))},"Bold,Italic,Underline,Strikethrough,Superscript,Subscript":function(v){return t(v)},mceBlockQuote:function(){return t("blockquote")},Outdent:function(){var v;if(k.inline_styles){if((v=m.getParent(p.getStart(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}if((v=m.getParent(p.getEnd(),m.isBlock))&&parseInt(v.style.paddingLeft)>0){return a}}return l("InsertUnorderedList")||l("InsertOrderedList")||(!k.inline_styles&&!!m.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(v){return m.getParent(p.getNode(),v=="insertunorderedlist"?"UL":"OL")}},"state");u({"FontSize,FontName":function(y){var x=0,v;if(v=m.getParent(p.getNode(),"span")){if(y=="fontsize"){x=v.style.fontSize}else{x=v.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return x}},"value");if(k.custom_undo_redo){u({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)}if(!R.body.hasChildNodes()){R.body.appendChild(M.create("br"))}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(f,n,h){var l=this,j=l.editor,i,k,m;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;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,scope:n.scope,control_manager:l},n);f=l.prefix+f;function g(o){return o.settings.use_accessible_selects&&!c.isGecko}if(j.settings.use_native_selects||g(j)){k=new c.ui.NativeListBox(f,n)}else{m=h||l._cls.listbox||c.ui.ListBox;k=new m(f,n,j)}l.controls[f]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){j.bookmark=j.selection.getBookmark(1)});a.add(o,"focus",function(){j.selection.moveToBookmark(j.bookmark);j.bookmark=null})})}if(k.hideMenu){j.onMouseDown.add(k.hideMenu,k)}return l.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(U){var M={},O=a.each,c=U.dom,q=U.selection,t=a.dom.TreeWalker,K=new a.dom.RangeUtils(c),d=U.schema.isValidChild,F=c.isBlock,l=U.settings.forced_root_block,s=c.nodeIndex,E="\uFEFF",e=/^(src|href|style)$/,R=false,B=true,p;function z(V){return V instanceof Array}function m(W,V){return c.getParents(W,V,c.getRoot())}function b(V){return V.nodeType===1&&(V.face==="mceinline"||V.style.fontFamily==="mceinline")}function Q(V){return V?M[V]:M}function k(V,W){if(V){if(typeof(V)!=="string"){O(V,function(Y,X){k(X,Y)})}else{W=W.length?W:[W];O(W,function(X){if(X.deep===p){X.deep=!X.selector}if(X.split===p){X.split=!X.selector||X.inline}if(X.remove===p&&X.selector&&!X.inline){X.remove="none"}if(X.selector&&X.inline){X.mixed=true;X.block_expand=true}if(typeof(X.classes)==="string"){X.classes=X.classes.split(/\s+/)}});M[V]=W}}}var i=function(W){var V;U.dom.getParent(W,function(X){V=U.dom.getStyle(X,"text-decoration");return V&&V!=="none"});return V};var I=function(V){var W;if(V.nodeType===1&&V.parentNode&&V.parentNode.nodeType===1){W=i(V.parentNode);if(U.dom.getStyle(V,"color")&&W){U.dom.setStyle(V,"text-decoration",W)}else{if(U.dom.getStyle(V,"textdecoration")===W){U.dom.setStyle(V,"text-decoration",null)}}}};function S(Y,ag,ab){var ac=Q(Y),ah=ac[0],af,W,ae,ad=q.isCollapsed();function Z(al){var ak=al.startContainer,ao=al.startOffset,an,am;if(ak.nodeType==1||ak.nodeValue===""){ak=ak.nodeType==1?ak.childNodes[ao]:ak;if(ak){an=new t(ak,ak.parentNode);for(am=an.current();am;am=an.next()){if(am.nodeType==3&&!f(am)){al.setStart(am,0);break}}}}return al}function V(al,ak){ak=ak||ah;if(al){if(ak.onformat){ak.onformat(al,ak,ag,ab)}O(ak.styles,function(an,am){c.setStyle(al,am,r(an,ag))});O(ak.attributes,function(an,am){c.setAttrib(al,am,r(an,ag))});O(ak.classes,function(am){am=r(am,ag);if(!c.hasClass(al,am)){c.addClass(al,am)}})}}function aa(){function am(at,aq){var ar=new t(aq);for(ab=ar.current();ab;ab=ar.prev()){if(ab.childNodes.length>1||ab==at){return ab}}}var al=U.selection.getRng();var ap=al.startContainer;var ak=al.endContainer;if(ap!=ak&&al.endOffset==0){var ao=am(ap,ak);var an=ao.nodeType==3?ao.length:ao.childNodes.length;al.setEnd(ao,an)}return al}function X(an,at,aq,ap,al){var ak=[],am=-1,ar,av=-1,ao=-1,au;O(an.childNodes,function(ax,aw){if(ax.nodeName==="UL"||ax.nodeName==="OL"){am=aw;ar=ax;return false}});O(an.childNodes,function(ax,aw){if(ax.nodeName==="SPAN"&&c.getAttrib(ax,"data-mce-type")=="bookmark"){if(ax.id==at.id+"_start"){av=aw}else{if(ax.id==at.id+"_end"){ao=aw}}}});if(am<=0||(av<am&&ao>am)){O(a.grep(an.childNodes),al);return 0}else{au=aq.cloneNode(R);O(a.grep(an.childNodes),function(ax,aw){if((av<am&&aw<am)||(av>am&&aw>am)){ak.push(ax);ax.parentNode.removeChild(ax)}});if(av<am){an.insertBefore(au,ar)}else{if(av>am){an.insertBefore(au,ar.nextSibling)}}ap.push(au);O(ak,function(aw){au.appendChild(aw)});return au}}function ai(al,an,ap){var ak=[],ao,am;ao=ah.inline||ah.block;am=c.create(ao);V(am);K.walk(al,function(aq){var ar;function at(au){var ax=au.nodeName.toLowerCase(),aw=au.parentNode.nodeName.toLowerCase(),av;if(g(ax,"br")){ar=0;if(ah.block){c.remove(au)}return}if(ah.wrapper&&x(au,Y,ag)){ar=0;return}if(ah.block&&!ah.wrapper&&G(ax)){au=c.rename(au,ao);V(au);ak.push(au);ar=0;return}if(ah.selector){O(ac,function(ay){if("collapsed" in ay&&ay.collapsed!==ad){return}if(c.is(au,ay.selector)&&!b(au)){V(au,ay);av=true}});if(!ah.inline||av){ar=0;return}}if(d(ao,ax)&&d(aw,ao)&&!(!ap&&au.nodeType===3&&au.nodeValue.length===1&&au.nodeValue.charCodeAt(0)===65279)&&au.id!=="_mce_caret"){if(!ar){ar=am.cloneNode(R);au.parentNode.insertBefore(ar,au);ak.push(ar)}ar.appendChild(au)}else{if(ax=="li"&&an){ar=X(au,an,am,ak,at)}else{ar=0;O(a.grep(au.childNodes),at);ar=0}}}O(aq,at)});if(ah.wrap_links===false){O(ak,function(aq){function ar(aw){var av,au,at;if(aw.nodeName==="A"){au=am.cloneNode(R);ak.push(au);at=a.grep(aw.childNodes);for(av=0;av<at.length;av++){au.appendChild(at[av])}aw.appendChild(au)}O(a.grep(aw.childNodes),ar)}ar(aq)})}O(ak,function(at){var aq;function au(aw){var av=0;O(aw.childNodes,function(ax){if(!f(ax)&&!H(ax)){av++}});return av}function ar(av){var ax,aw;O(av.childNodes,function(ay){if(ay.nodeType==1&&!H(ay)&&!b(ay)){ax=ay;return R}});if(ax&&h(ax,ah)){aw=ax.cloneNode(R);V(aw);c.replace(aw,av,B);c.remove(ax,1)}return aw||av}aq=au(at);if((ak.length>1||!F(at))&&aq===0){c.remove(at,1);return}if(ah.inline||ah.wrapper){if(!ah.exact&&aq===1){at=ar(at)}O(ac,function(av){O(c.select(av.inline,at),function(ax){var aw;if(av.wrap_links===false){aw=ax.parentNode;do{if(aw.nodeName==="A"){return}}while(aw=aw.parentNode)}T(av,ag,ax,av.exact?ax:null)})});if(x(at.parentNode,Y,ag)){c.remove(at,1);at=0;return B}if(ah.merge_with_parents){c.getParent(at.parentNode,function(av){if(x(av,Y,ag)){c.remove(at,1);at=0;return B}})}if(at&&ah.merge_siblings!==false){at=u(C(at),at);at=u(at,C(at,B))}}})}if(ah){if(ab){if(ab.nodeType){W=c.createRng();W.setStartBefore(ab);W.setEndAfter(ab);ai(o(W,ac),null,true)}else{ai(ab,null,true)}}else{if(!ad||!ah.inline||c.select("td.mceSelected,th.mceSelected").length){var aj=U.selection.getNode();U.selection.setRng(aa());af=q.getBookmark();ai(o(q.getRng(B),ac),af);if(ah.styles&&(ah.styles.color||ah.styles.textDecoration)){a.walk(aj,I,"childNodes");I(aj)}q.moveToBookmark(af);q.setRng(Z(q.getRng(B)));U.nodeChanged()}else{P("apply",Y,ag)}}}}function A(X,ag,aa){var ab=Q(X),ai=ab[0],af,ae,W;function Z(al){var ak=al.startContainer,aq=al.startOffset,ap,ao,am,an;if(ak.nodeType==3&&aq>=ak.nodeValue.length-1){ak=ak.parentNode;aq=s(ak)+1}if(ak.nodeType==1){am=ak.childNodes;ak=am[Math.min(aq,am.length-1)];ap=new t(ak);if(aq>am.length-1){ap.next()}for(ao=ap.current();ao;ao=ap.next()){if(ao.nodeType==3&&!f(ao)){an=c.create("a",null,E);ao.parentNode.insertBefore(an,ao);al.setStart(ao,0);q.setRng(al);c.remove(an);return}}}}function Y(an){var am,al,ak;am=a.grep(an.childNodes);for(al=0,ak=ab.length;al<ak;al++){if(T(ab[al],ag,an,an)){break}}if(ai.deep){for(al=0,ak=am.length;al<ak;al++){Y(am[al])}}}function ac(ak){var al;O(m(ak.parentNode).reverse(),function(am){var an;if(!al&&am.id!="_start"&&am.id!="_end"){an=x(am,X,ag);if(an&&an.split!==false){al=am}}});return al}function V(an,ak,ap,at){var au,ar,aq,am,ao,al;if(an){al=an.parentNode;for(au=ak.parentNode;au&&au!=al;au=au.parentNode){ar=au.cloneNode(R);for(ao=0;ao<ab.length;ao++){if(T(ab[ao],ag,ar,ar)){ar=0;break}}if(ar){if(aq){ar.appendChild(aq)}if(!am){am=ar}aq=ar}}if(at&&(!ai.mixed||!F(an))){ak=c.split(an,ak)}if(aq){ap.parentNode.insertBefore(aq,ap);am.appendChild(ap)}}return ak}function ah(ak){return V(ac(ak),ak,ak,true)}function ad(am){var al=c.get(am?"_start":"_end"),ak=al[am?"firstChild":"lastChild"];if(H(ak)){ak=ak[am?"firstChild":"lastChild"]}c.remove(al,true);return ak}function aj(ak){var al,am;ak=o(ak,ab,B);if(ai.split){al=J(ak,B);am=J(ak);if(al!=am){al=N(al,"span",{id:"_start","data-mce-type":"bookmark"});am=N(am,"span",{id:"_end","data-mce-type":"bookmark"});ah(al);ah(am);al=ad(B);am=ad()}else{al=am=ah(al)}ak.startContainer=al.parentNode;ak.startOffset=s(al);ak.endContainer=am.parentNode;ak.endOffset=s(am)+1}K.walk(ak,function(an){O(an,function(ao){Y(ao);if(ao.nodeType===1&&U.dom.getStyle(ao,"text-decoration")==="underline"&&ao.parentNode&&i(ao.parentNode)==="underline"){T({deep:false,exact:true,inline:"span",styles:{textDecoration:"underline"}},null,ao)}})})}if(aa){if(aa.nodeType){W=c.createRng();W.setStartBefore(aa);W.setEndAfter(aa);aj(W)}else{aj(aa)}return}if(!q.isCollapsed()||!ai.inline||c.select("td.mceSelected,th.mceSelected").length){af=q.getBookmark();aj(q.getRng(B));q.moveToBookmark(af);if(ai.inline&&j(X,ag,q.getStart())){Z(q.getRng(true))}U.nodeChanged()}else{P("remove",X,ag)}if(a.isWebKit){U.execCommand("mceCleanup")}}function D(W,Y,X){var V=Q(W);if(j(W,Y,X)&&(!("toggle" in V[0])||V[0]["toggle"])){A(W,Y,X)}else{S(W,Y,X)}}function x(W,V,ab,Z){var X=Q(V),ac,aa,Y;function ad(ah,aj,ak){var ag,ai,ae=aj[ak],af;if(aj.onmatch){return aj.onmatch(ah,aj,ak)}if(ae){if(ae.length===p){for(ag in ae){if(ae.hasOwnProperty(ag)){if(ak==="attributes"){ai=c.getAttrib(ah,ag)}else{ai=L(ah,ag)}if(Z&&!ai&&!aj.exact){return}if((!Z||aj.exact)&&!g(ai,r(ae[ag],ab))){return}}}}else{for(af=0;af<ae.length;af++){if(ak==="attributes"?c.getAttrib(ah,ae[af]):L(ah,ae[af])){return aj}}}}return aj}if(X&&W){for(aa=0;aa<X.length;aa++){ac=X[aa];if(h(W,ac)&&ad(W,ac,"attributes")&&ad(W,ac,"styles")){if(Y=ac.classes){for(aa=0;aa<Y.length;aa++){if(!c.hasClass(W,Y[aa])){return}}}return ac}}}}function j(X,Z,Y){var W;function V(aa){aa=c.getParent(aa,function(ab){return !!x(ab,X,Z,true)});return x(aa,X,Z)}if(Y){return V(Y)}Y=q.getNode();if(V(Y)){return B}W=q.getStart();if(W!=Y){if(V(W)){return B}}return R}function v(ac,ab){var Z,aa=[],Y={},X,W,V;Z=q.getStart();c.getParent(Z,function(af){var ae,ad;for(ae=0;ae<ac.length;ae++){ad=ac[ae];if(!Y[ad]&&x(af,ad,ab)){Y[ad]=true;aa.push(ad)}}});return aa}function y(Z){var ab=Q(Z),Y,X,aa,W,V;if(ab){Y=q.getStart();X=m(Y);for(W=ab.length-1;W>=0;W--){V=ab[W].selector;if(!V){return B}for(aa=X.length-1;aa>=0;aa--){if(c.is(X[aa],V)){return B}}}}return R}a.extend(this,{get:Q,register:k,apply:S,remove:A,toggle:D,match:j,matchAll:v,matchNode:x,canApply:y});function h(V,W){if(g(V,W.inline)){return B}if(g(V,W.block)){return B}if(W.selector){return c.is(V,W.selector)}}function g(W,V){W=W||"";V=V||"";W=""+(W.nodeName||W);V=""+(V.nodeName||V);return W.toLowerCase()==V.toLowerCase()}function L(W,V){var X=c.getStyle(W,V);if(V=="color"||V=="backgroundColor"){X=c.toHex(X)}if(V=="fontWeight"&&X==700){X="bold"}return""+X}function r(V,W){if(typeof(V)!="string"){V=V(W)}else{if(W){V=V.replace(/%(\w+)/g,function(Y,X){return W[X]||Y})}}return V}function f(V){return V&&V.nodeType===3&&/^([\t \r\n]+|)$/.test(V.nodeValue)}function N(X,W,V){var Y=c.create(W,V);X.parentNode.insertBefore(Y,X);Y.appendChild(X);return Y}function o(V,ah,Y){var X=V.startContainer,ac=V.startOffset,ak=V.endContainer,ae=V.endOffset,aj,ag,ab,af;function ai(aq){var al,ao,ap,an,am;al=ao=aq?X:ak;am=aq?"previousSibling":"nextSibling";root=c.getRoot();if(al.nodeType==3&&!f(al)){if(aq?ac>0:ae<al.nodeValue.length){return al}}for(;;){if(ao==root||(!ah[0].block_expand&&F(ao))){return ao}for(an=ao[am];an;an=an[am]){if(!H(an)&&!f(an)){return ao}}ao=ao.parentNode}return al}function aa(al,am){if(am===p){am=al.nodeType===3?al.length:al.childNodes.length}while(al&&al.hasChildNodes()){al=al.childNodes[am];if(al){am=al.nodeType===3?al.length:al.childNodes.length}}return{node:al,offset:am}}if(X.nodeType==1&&X.hasChildNodes()){ag=X.childNodes.length-1;X=X.childNodes[ac>ag?ag:ac];if(X.nodeType==3){ac=0}}if(ak.nodeType==1&&ak.hasChildNodes()){ag=ak.childNodes.length-1;ak=ak.childNodes[ae>ag?ag:ae-1];if(ak.nodeType==3){ae=ak.nodeValue.length}}if(H(X.parentNode)||H(X)){X=H(X)?X:X.parentNode;X=X.nextSibling||X;if(X.nodeType==3){ac=0}}if(H(ak.parentNode)||H(ak)){ak=H(ak)?ak:ak.parentNode;ak=ak.previousSibling||ak;if(ak.nodeType==3){ae=ak.length}}if(ah[0].inline){if(V.collapsed){function ad(am,aq,at){var ap,an,ar,al;function ao(av,ax){var ay,au,aw=av.nodeValue;if(typeof(ax)=="undefined"){ax=at?aw.length:0}if(at){ay=aw.lastIndexOf(" ",ax);au=aw.lastIndexOf("\u00a0",ax);ay=ay>au?ay:au;if(ay!==-1&&!Y){ay++}}else{ay=aw.indexOf(" ",ax);au=aw.indexOf("\u00a0",ax);ay=ay!==-1&&(au===-1||ay<au)?ay:au}return ay}if(am.nodeType===3){ar=ao(am,aq);if(ar!==-1){return{container:am,offset:ar}}al=am}ap=new t(am,c.getParent(am,F)||U.getBody());while(an=ap[at?"prev":"next"]()){if(an.nodeType===3){al=an;ar=ao(an);if(ar!==-1){return{container:an,offset:ar}}}else{if(F(an)){break}}}if(al){if(at){aq=0}else{aq=al.length}return{container:al,offset:aq}}}af=ad(X,ac,true);if(af){X=af.container;ac=af.offset}af=ad(ak,ae);if(af){ak=af.container;ae=af.offset}}ab=aa(ak,ae);if(ab.node){while(ab.node&&ab.offset===0&&ab.node.previousSibling){ab=aa(ab.node.previousSibling)}if(ab.node&&ab.offset>0&&ab.node.nodeType===3&&ab.node.nodeValue.charAt(ab.offset-1)===" "){if(ab.offset>1){ak=ab.node;ak.splitText(ab.offset-1)}else{if(ab.node.previousSibling){}}}}}if(ah[0].inline||ah[0].block_expand){if(!ah[0].inline||(X.nodeType!=3||ac===0)){X=ai(true)}if(!ah[0].inline||(ak.nodeType!=3||ae===ak.nodeValue.length)){ak=ai()}}if(ah[0].selector&&ah[0].expand!==R&&!ah[0].inline){function Z(am,al){var an,ao,aq,ap;if(am.nodeType==3&&am.nodeValue.length==0&&am[al]){am=am[al]}an=m(am);for(ao=0;ao<an.length;ao++){for(aq=0;aq<ah.length;aq++){ap=ah[aq];if("collapsed" in ap&&ap.collapsed!==V.collapsed){continue}if(c.is(an[ao],ap.selector)){return an[ao]}}}return am}X=Z(X,"previousSibling");ak=Z(ak,"nextSibling")}if(ah[0].block||ah[0].selector){function W(am,al,ao){var an;if(!ah[0].wrapper){an=c.getParent(am,ah[0].block)}if(!an){an=c.getParent(am.nodeType==3?am.parentNode:am,F)}if(an&&ah[0].wrapper){an=m(an,"ul,ol").reverse()[0]||an}if(!an){an=am;while(an[al]&&!F(an[al])){an=an[al];if(g(an,"br")){break}}}return an||am}X=W(X,"previousSibling");ak=W(ak,"nextSibling");if(ah[0].block){if(!F(X)){X=ai(true)}if(!F(ak)){ak=ai()}}}if(X.nodeType==1){ac=s(X);X=X.parentNode}if(ak.nodeType==1){ae=s(ak)+1;ak=ak.parentNode}return{startContainer:X,startOffset:ac,endContainer:ak,endOffset:ae}}function T(ab,aa,Y,V){var X,W,Z;if(!h(Y,ab)){return R}if(ab.remove!="all"){O(ab.styles,function(ad,ac){ad=r(ad,aa);if(typeof(ac)==="number"){ac=ad;V=0}if(!V||g(L(V,ac),ad)){c.setStyle(Y,ac,"")}Z=1});if(Z&&c.getAttrib(Y,"style")==""){Y.removeAttribute("style");Y.removeAttribute("data-mce-style")}O(ab.attributes,function(ae,ac){var ad;ae=r(ae,aa);if(typeof(ac)==="number"){ac=ae;V=0}if(!V||g(c.getAttrib(V,ac),ae)){if(ac=="class"){ae=c.getAttrib(Y,ac);if(ae){ad="";O(ae.split(/\s+/),function(af){if(/mce\w+/.test(af)){ad+=(ad?" ":"")+af}});if(ad){c.setAttrib(Y,ac,ad);return}}}if(ac=="class"){Y.removeAttribute("className")}if(e.test(ac)){Y.removeAttribute("data-mce-"+ac)}Y.removeAttribute(ac)}});O(ab.classes,function(ac){ac=r(ac,aa);if(!V||c.hasClass(V,ac)){c.removeClass(Y,ac)}});W=c.getAttribs(Y);for(X=0;X<W.length;X++){if(W[X].nodeName.indexOf("_")!==0){return R}}}if(ab.remove!="none"){n(Y,ab);return B}}function n(X,Y){var V=X.parentNode,W;if(Y.block){if(!l){function Z(ab,aa,ac){ab=C(ab,aa,ac);return !ab||(ab.nodeName=="BR"||F(ab))}if(F(X)&&!F(V)){if(!Z(X,R)&&!Z(X.firstChild,B,1)){X.insertBefore(c.create("br"),X.firstChild)}if(!Z(X,B)&&!Z(X.lastChild,R,1)){X.appendChild(c.create("br"))}}}else{if(V==c.getRoot()){if(!Y.list_block||!g(X,Y.list_block)){O(a.grep(X.childNodes),function(aa){if(d(l,aa.nodeName.toLowerCase())){if(!W){W=N(aa,l)}else{W.appendChild(aa)}}else{W=0}})}}}}if(Y.selector&&Y.inline&&!g(Y.inline,X)){return}c.remove(X,1)}function C(W,V,X){if(W){V=V?"nextSibling":"previousSibling";for(W=X?W:W[V];W;W=W[V]){if(W.nodeType==1||!f(W)){return W}}}}function H(V){return V&&V.nodeType==1&&V.getAttribute("data-mce-type")=="bookmark"}function u(Z,Y){var V,X,W;function ab(ae,ad){if(ae.nodeName!=ad.nodeName){return R}function ac(ag){var ah={};O(c.getAttribs(ag),function(ai){var aj=ai.nodeName.toLowerCase();if(aj.indexOf("_")!==0&&aj!=="style"){ah[aj]=c.getAttrib(ag,aj)}});return ah}function af(aj,ai){var ah,ag;for(ag in aj){if(aj.hasOwnProperty(ag)){ah=ai[ag];if(ah===p){return R}if(aj[ag]!=ah){return R}delete ai[ag]}}for(ag in ai){if(ai.hasOwnProperty(ag)){return R}}return B}if(!af(ac(ae),ac(ad))){return R}if(!af(c.parseStyle(c.getAttrib(ae,"style")),c.parseStyle(c.getAttrib(ad,"style")))){return R}return B}if(Z&&Y){function aa(ad,ac){for(X=ad;X;X=X[ac]){if(X.nodeType==3&&X.nodeValue.length!==0){return ad}if(X.nodeType==1&&!H(X)){return X}}return ad}Z=aa(Z,"previousSibling");Y=aa(Y,"nextSibling");if(ab(Z,Y)){for(X=Z.nextSibling;X&&X!=Y;){W=X;X=X.nextSibling;Z.appendChild(W)}c.remove(Y);O(a.grep(Y.childNodes),function(ac){Z.appendChild(ac)});return Z}}return Y}function G(V){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(V)}function J(W,aa){var V,Z,X,Y;V=W[aa?"startContainer":"endContainer"];Z=W[aa?"startOffset":"endOffset"];if(V.nodeType==1){X=V.childNodes.length-1;if(!aa&&Z){Z--}V=V.childNodes[Z>X?X:Z]}if(V.nodeType===3&&aa&&Z>=V.nodeValue.length){V=new t(V,U.getBody()).next()||V}if(V.nodeType===3&&!aa&&Z==0){V=new t(V,U.getBody()).prev()||V}return V}function P(ae,V,ac){var ah,af="_mce_caret",W=U.settings.caret_debug;ah=a.isGecko?"\u200B":E;function X(aj){var ai=c.create("span",{id:af,"data-mce-bogus":true,style:W?"color:red":""});if(aj){ai.appendChild(U.getDoc().createTextNode(ah))}return ai}function ad(aj,ai){while(aj){if((aj.nodeType===3&&aj.nodeValue!==ah)||aj.childNodes.length>1){return false}if(ai&&aj.nodeType===1){ai.push(aj)}aj=aj.firstChild}return true}function aa(ai){while(ai){if(ai.id===af){return ai}ai=ai.parentNode}}function Z(ai){var aj;if(ai){aj=new t(ai,ai);for(ai=aj.current();ai;ai=aj.next()){if(ai.nodeType===3){return ai}}}}function Y(ak,aj){var al,ai;if(!ak){ak=aa(q.getStart());if(!ak){while(ak=c.get(af)){Y(ak,false)}}}else{ai=q.getRng(true);if(ad(ak)){if(aj!==false){ai.setStartBefore(ak);ai.setEndBefore(ak)}c.remove(ak)}else{al=Z(ak);al=al.deleteData(0,1);c.remove(ak,1)}q.setRng(ai)}}function ab(){var ak,ai,ao,an,al,aj,am;ak=q.getRng(true);an=ak.startOffset;aj=ak.startContainer;am=aj.nodeValue;ai=aa(q.getStart());if(ai){ao=Z(ai)}if(am&&an>0&&an<am.length&&/\w/.test(am.charAt(an))&&/\w/.test(am.charAt(an-1))){al=q.getBookmark();ak.collapse(true);ak=o(ak,Q(V));ak=K.split(ak);S(V,ac,ak);q.moveToBookmark(al)}else{if(!ai||ao.nodeValue!==ah){ai=X(true);ao=ai.firstChild;ak.insertNode(ai);an=1;S(V,ac,ai)}else{S(V,ac,ai)}q.setCursorLocation(ao,an)}}function ag(){var ai=q.getRng(true),aj,al,ao,an,ak,ar,aq=[],am,ap;aj=ai.startContainer;al=ai.startOffset;ak=aj;if(aj.nodeType==3){if(al!=aj.nodeValue.length||aj.nodeValue===ah){an=true}ak=ak.parentNode}while(ak){if(x(ak,V,ac)){ar=ak;break}if(ak.nextSibling){an=true}aq.push(ak);ak=ak.parentNode}if(!ar){return}if(an){ao=q.getBookmark();ai.collapse(true);ai=o(ai,Q(V),true);ai=K.split(ai);A(V,ac,ai);q.moveToBookmark(ao)}else{ap=X();ak=ap;for(am=aq.length-1;am>=0;am--){ak.appendChild(aq[am].cloneNode(false));ak=ak.firstChild}ak.appendChild(c.doc.createTextNode(ah));ak=ak.firstChild;c.insertAfter(ap,ar);q.setCursorLocation(ak,1)}}U.onBeforeGetContent.addToTop(function(){var ai=[],aj;if(ad(aa(q.getStart()),ai)){aj=ai.length;while(aj--){c.setAttrib(ai[aj],"data-mce-bogus","1")}}});a.each("onMouseUp onKeyUp".split(" "),function(ai){U[ai].addToTop(function(){Y()})});U.onKeyDown.addToTop(function(ai,ak){var aj=ak.keyCode;if(aj==8||aj==37||aj==39){Y(aa(q.getStart()))}});if(ae=="apply"){ab()}else{ag()}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;if(c.inline_styles){h=e.explode(c.font_size_legacy_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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_popup.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_popup.js
new file mode 100644
index 000000000..f859d24e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_popup.js
@@ -0,0 +1,5 @@
+
+// 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/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_src.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_src.js
new file mode 100644
index 000000000..0866d617b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/tiny_mce_src.js
@@ -0,0 +1,16728 @@
+(function(win) {
+ var whiteSpaceRe = /^\s*|\s*$/g,
+ undefined, isRegExpBroken = 'B'.replace(/A(.)|B/, '$1') === '$1';
+
+ var tinymce = {
+ majorVersion : '3',
+
+ minorVersion : '4.7',
+
+ releaseDate : '2011-11-03',
+
+ _init : function() {
+ var t = this, d = document, na = navigator, ua = na.userAgent, i, nl, n, base, p, v;
+
+ t.isOpera = win.opera && opera.buildNumber;
+
+ t.isWebKit = /WebKit/.test(ua);
+
+ t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);
+
+ t.isIE6 = t.isIE && /MSIE [56]/.test(ua);
+
+ t.isIE7 = t.isIE && /MSIE [7]/.test(ua);
+
+ t.isIE8 = t.isIE && /MSIE [8]/.test(ua);
+
+ t.isIE9 = t.isIE && /MSIE [9]/.test(ua);
+
+ t.isGecko = !t.isWebKit && /Gecko/.test(ua);
+
+ t.isMac = ua.indexOf('Mac') != -1;
+
+ t.isAir = /adobeair/i.test(ua);
+
+ t.isIDevice = /(iPad|iPhone)/.test(ua);
+
+ t.isIOS5 = t.isIDevice && ua.match(/AppleWebKit\/(\d*)/)[1]>=534;
+
+ // TinyMCE .NET webcontrol might be setting the values for TinyMCE
+ if (win.tinyMCEPreInit) {
+ t.suffix = tinyMCEPreInit.suffix;
+ t.baseURL = tinyMCEPreInit.base;
+ t.query = tinyMCEPreInit.query;
+ return;
+ }
+
+ // Get suffix and base
+ t.suffix = '';
+
+ // If base element found, add that infront of baseURL
+ nl = d.getElementsByTagName('base');
+ for (i=0; i<nl.length; i++) {
+ if (v = nl[i].href) {
+ // Host only value like http://site.com or http://site.com:8008
+ if (/^https?:\/\/[^\/]+$/.test(v))
+ v += '/';
+
+ base = v ? v.match(/.*\//)[0] : ''; // Get only directory
+ }
+ }
+
+ function getBase(n) {
+ if (n.src && /tiny_mce(|_gzip|_jquery|_prototype|_full)(_dev|_src)?.js/.test(n.src)) {
+ if (/_(src|dev)\.js/g.test(n.src))
+ t.suffix = '_src';
+
+ if ((p = n.src.indexOf('?')) != -1)
+ t.query = n.src.substring(p + 1);
+
+ t.baseURL = n.src.substring(0, n.src.lastIndexOf('/'));
+
+ // If path to script is relative and a base href was found add that one infront
+ // the src property will always be an absolute one on non IE browsers and IE 8
+ // so this logic will basically only be executed on older IE versions
+ if (base && t.baseURL.indexOf('://') == -1 && t.baseURL.indexOf('/') !== 0)
+ t.baseURL = base + t.baseURL;
+
+ return t.baseURL;
+ }
+
+ return null;
+ };
+
+ // Check document
+ nl = d.getElementsByTagName('script');
+ for (i=0; i<nl.length; i++) {
+ if (getBase(nl[i]))
+ return;
+ }
+
+ // Check head
+ n = d.getElementsByTagName('head')[0];
+ if (n) {
+ nl = n.getElementsByTagName('script');
+ for (i=0; i<nl.length; i++) {
+ if (getBase(nl[i]))
+ return;
+ }
+ }
+
+ return;
+ },
+
+ is : function(o, t) {
+ if (!t)
+ return o !== undefined;
+
+ if (t == 'array' && (o.hasOwnProperty && o instanceof Array))
+ return true;
+
+ return typeof(o) == t;
+ },
+
+ makeMap : function(items, delim, map) {
+ var i;
+
+ items = items || [];
+ delim = delim || ',';
+
+ if (typeof(items) == "string")
+ items = items.split(delim);
+
+ map = map || {};
+
+ i = items.length;
+ while (i--)
+ map[items[i]] = {};
+
+ return map;
+ },
+
+ each : function(o, cb, s) {
+ var n, l;
+
+ if (!o)
+ return 0;
+
+ s = s || o;
+
+ if (o.length !== undefined) {
+ // Indexed arrays, needed for Safari
+ for (n=0, l = o.length; n < l; n++) {
+ if (cb.call(s, o[n], n, o) === false)
+ return 0;
+ }
+ } else {
+ // Hashtables
+ for (n in o) {
+ if (o.hasOwnProperty(n)) {
+ if (cb.call(s, o[n], n, o) === false)
+ return 0;
+ }
+ }
+ }
+
+ return 1;
+ },
+
+
+ map : function(a, f) {
+ var o = [];
+
+ tinymce.each(a, function(v) {
+ o.push(f(v));
+ });
+
+ return o;
+ },
+
+ grep : function(a, f) {
+ var o = [];
+
+ tinymce.each(a, function(v) {
+ if (!f || f(v))
+ o.push(v);
+ });
+
+ return o;
+ },
+
+ inArray : function(a, v) {
+ var i, l;
+
+ if (a) {
+ for (i = 0, l = a.length; i < l; i++) {
+ if (a[i] === v)
+ return i;
+ }
+ }
+
+ return -1;
+ },
+
+ extend : function(o, e) {
+ var i, l, a = arguments;
+
+ for (i = 1, l = a.length; i < l; i++) {
+ e = a[i];
+
+ tinymce.each(e, function(v, n) {
+ if (v !== undefined)
+ o[n] = v;
+ });
+ }
+
+ return o;
+ },
+
+
+ trim : function(s) {
+ return (s ? '' + s : '').replace(whiteSpaceRe, '');
+ },
+
+ create : function(s, p, root) {
+ var t = this, sp, ns, cn, scn, c, de = 0;
+
+ // Parse : <prefix> <class>:<super class>
+ s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);
+ cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name
+
+ // Create namespace for new class
+ ns = t.createNS(s[3].replace(/\.\w+$/, ''), root);
+
+ // Class already exists
+ if (ns[cn])
+ return;
+
+ // Make pure static class
+ if (s[2] == 'static') {
+ ns[cn] = p;
+
+ if (this.onCreate)
+ this.onCreate(s[2], s[3], ns[cn]);
+
+ return;
+ }
+
+ // Create default constructor
+ if (!p[cn]) {
+ p[cn] = function() {};
+ de = 1;
+ }
+
+ // Add constructor and methods
+ ns[cn] = p[cn];
+ t.extend(ns[cn].prototype, p);
+
+ // Extend
+ if (s[5]) {
+ sp = t.resolve(s[5]).prototype;
+ scn = s[5].match(/\.(\w+)$/i)[1]; // Class name
+
+ // Extend constructor
+ c = ns[cn];
+ if (de) {
+ // Add passthrough constructor
+ ns[cn] = function() {
+ return sp[scn].apply(this, arguments);
+ };
+ } else {
+ // Add inherit constructor
+ ns[cn] = function() {
+ this.parent = sp[scn];
+ return c.apply(this, arguments);
+ };
+ }
+ ns[cn].prototype[cn] = ns[cn];
+
+ // Add super methods
+ t.each(sp, function(f, n) {
+ ns[cn].prototype[n] = sp[n];
+ });
+
+ // Add overridden methods
+ t.each(p, function(f, n) {
+ // Extend methods if needed
+ if (sp[n]) {
+ ns[cn].prototype[n] = function() {
+ this.parent = sp[n];
+ return f.apply(this, arguments);
+ };
+ } else {
+ if (n != cn)
+ ns[cn].prototype[n] = f;
+ }
+ });
+ }
+
+ // Add static methods
+ t.each(p['static'], function(f, n) {
+ ns[cn][n] = f;
+ });
+
+ if (this.onCreate)
+ this.onCreate(s[2], s[3], ns[cn].prototype);
+ },
+
+ walk : function(o, f, n, s) {
+ s = s || this;
+
+ if (o) {
+ if (n)
+ o = o[n];
+
+ tinymce.each(o, function(o, i) {
+ if (f.call(s, o, i, n) === false)
+ return false;
+
+ tinymce.walk(o, f, n, s);
+ });
+ }
+ },
+
+ createNS : function(n, o) {
+ var i, v;
+
+ o = o || win;
+
+ n = n.split('.');
+ for (i=0; i<n.length; i++) {
+ v = n[i];
+
+ if (!o[v])
+ o[v] = {};
+
+ o = o[v];
+ }
+
+ return o;
+ },
+
+ resolve : function(n, o) {
+ var i, l;
+
+ o = o || win;
+
+ n = n.split('.');
+ for (i = 0, l = n.length; i < l; i++) {
+ o = o[n[i]];
+
+ if (!o)
+ break;
+ }
+
+ return o;
+ },
+
+ addUnload : function(f, s) {
+ var t = this;
+
+ f = {func : f, scope : s || this};
+
+ if (!t.unloads) {
+ function unload() {
+ var li = t.unloads, o, n;
+
+ if (li) {
+ // Call unload handlers
+ for (n in li) {
+ o = li[n];
+
+ if (o && o.func)
+ o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy
+ }
+
+ // Detach unload function
+ if (win.detachEvent) {
+ win.detachEvent('onbeforeunload', fakeUnload);
+ win.detachEvent('onunload', unload);
+ } else if (win.removeEventListener)
+ win.removeEventListener('unload', unload, false);
+
+ // Destroy references
+ t.unloads = o = li = w = unload = 0;
+
+ // Run garbarge collector on IE
+ if (win.CollectGarbage)
+ CollectGarbage();
+ }
+ };
+
+ function fakeUnload() {
+ var d = document;
+
+ // Is there things still loading, then do some magic
+ if (d.readyState == 'interactive') {
+ function stop() {
+ // Prevent memory leak
+ d.detachEvent('onstop', stop);
+
+ // Call unload handler
+ if (unload)
+ unload();
+
+ d = 0;
+ };
+
+ // Fire unload when the currently loading page is stopped
+ if (d)
+ d.attachEvent('onstop', stop);
+
+ // Remove onstop listener after a while to prevent the unload function
+ // to execute if the user presses cancel in an onbeforeunload
+ // confirm dialog and then presses the browser stop button
+ win.setTimeout(function() {
+ if (d)
+ d.detachEvent('onstop', stop);
+ }, 0);
+ }
+ };
+
+ // Attach unload handler
+ if (win.attachEvent) {
+ win.attachEvent('onunload', unload);
+ win.attachEvent('onbeforeunload', fakeUnload);
+ } else if (win.addEventListener)
+ win.addEventListener('unload', unload, false);
+
+ // Setup initial unload handler array
+ t.unloads = [f];
+ } else
+ t.unloads.push(f);
+
+ return f;
+ },
+
+ removeUnload : function(f) {
+ var u = this.unloads, r = null;
+
+ tinymce.each(u, function(o, i) {
+ if (o && o.func == f) {
+ u.splice(i, 1);
+ r = f;
+ return false;
+ }
+ });
+
+ return r;
+ },
+
+ explode : function(s, d) {
+ return s ? tinymce.map(s.split(d || ','), tinymce.trim) : s;
+ },
+
+ _addVer : function(u) {
+ var v;
+
+ if (!this.query)
+ return u;
+
+ v = (u.indexOf('?') == -1 ? '?' : '&') + this.query;
+
+ if (u.indexOf('#') == -1)
+ return u + v;
+
+ return u.replace('#', v + '#');
+ },
+
+ // Fix function for IE 9 where regexps isn't working correctly
+ // Todo: remove me once MS fixes the bug
+ _replace : function(find, replace, str) {
+ // On IE9 we have to fake $x replacement
+ if (isRegExpBroken) {
+ return str.replace(find, function() {
+ var val = replace, args = arguments, i;
+
+ for (i = 0; i < args.length - 2; i++) {
+ if (args[i] === undefined) {
+ val = val.replace(new RegExp('\\$' + i, 'g'), '');
+ } else {
+ val = val.replace(new RegExp('\\$' + i, 'g'), args[i]);
+ }
+ }
+
+ return val;
+ });
+ }
+
+ return str.replace(find, replace);
+ }
+
+ };
+
+ // Initialize the API
+ tinymce._init();
+
+ // Expose tinymce namespace to the global namespace (window)
+ win.tinymce = win.tinyMCE = tinymce;
+
+ // Describe the different namespaces
+
+ })(window);
+
+
+
+tinymce.create('tinymce.util.Dispatcher', {
+ scope : null,
+ listeners : null,
+
+ Dispatcher : function(s) {
+ this.scope = s || this;
+ this.listeners = [];
+ },
+
+ add : function(cb, s) {
+ this.listeners.push({cb : cb, scope : s || this.scope});
+
+ return cb;
+ },
+
+ addToTop : function(cb, s) {
+ this.listeners.unshift({cb : cb, scope : s || this.scope});
+
+ return cb;
+ },
+
+ remove : function(cb) {
+ var l = this.listeners, o = null;
+
+ tinymce.each(l, function(c, i) {
+ if (cb == c.cb) {
+ o = cb;
+ l.splice(i, 1);
+ return false;
+ }
+ });
+
+ return o;
+ },
+
+ dispatch : function() {
+ var s, a = arguments, i, li = this.listeners, c;
+
+ // Needs to be a real loop since the listener count might change while looping
+ // And this is also more efficient
+ for (i = 0; i<li.length; i++) {
+ c = li[i];
+ s = c.cb.apply(c.scope, a);
+
+ if (s === false)
+ break;
+ }
+
+ return s;
+ }
+
+ });
+
+(function() {
+ var each = tinymce.each;
+
+ tinymce.create('tinymce.util.URI', {
+ URI : function(u, s) {
+ var t = this, o, a, b, base_url;
+
+ // Trim whitespace
+ u = tinymce.trim(u);
+
+ // Default settings
+ s = t.settings = s || {};
+
+ // Strange app protocol that isn't http/https or local anchor
+ // For example: mailto,skype,tel etc.
+ if (/^([\w\-]+):([^\/]{2})/i.test(u) || /^\s*#/.test(u)) {
+ t.source = u;
+ return;
+ }
+
+ // Absolute path with no host, fake host and protocol
+ if (u.indexOf('/') === 0 && u.indexOf('//') !== 0)
+ u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u;
+
+ // Relative path http:// or protocol relative //path
+ if (!/^[\w-]*:?\/\//.test(u)) {
+ base_url = s.base_uri ? s.base_uri.path : new tinymce.util.URI(location.href).directory;
+ u = ((s.base_uri && s.base_uri.protocol) || 'http') + '://mce_host' + t.toAbsPath(base_url, u);
+ }
+
+ // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri)
+ u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something
+ u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);
+ each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) {
+ var s = u[i];
+
+ // Zope 3 workaround, they use @@something
+ if (s)
+ s = s.replace(/\(mce_at\)/g, '@@');
+
+ t[v] = s;
+ });
+
+ if (b = s.base_uri) {
+ if (!t.protocol)
+ t.protocol = b.protocol;
+
+ if (!t.userInfo)
+ t.userInfo = b.userInfo;
+
+ if (!t.port && t.host == 'mce_host')
+ t.port = b.port;
+
+ if (!t.host || t.host == 'mce_host')
+ t.host = b.host;
+
+ t.source = '';
+ }
+
+ //t.path = t.path || '/';
+ },
+
+ setPath : function(p) {
+ var t = this;
+
+ p = /^(.*?)\/?(\w+)?$/.exec(p);
+
+ // Update path parts
+ t.path = p[0];
+ t.directory = p[1];
+ t.file = p[2];
+
+ // Rebuild source
+ t.source = '';
+ t.getURI();
+ },
+
+ toRelative : function(u) {
+ var t = this, o;
+
+ if (u === "./")
+ return u;
+
+ u = new tinymce.util.URI(u, {base_uri : t});
+
+ // Not on same domain/port or protocol
+ if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol)
+ return u.getURI();
+
+ o = t.toRelPath(t.path, u.path);
+
+ // Add query
+ if (u.query)
+ o += '?' + u.query;
+
+ // Add anchor
+ if (u.anchor)
+ o += '#' + u.anchor;
+
+ return o;
+ },
+
+ toAbsolute : function(u, nh) {
+ var u = new tinymce.util.URI(u, {base_uri : this});
+
+ return u.getURI(this.host == u.host && this.protocol == u.protocol ? nh : 0);
+ },
+
+ toRelPath : function(base, path) {
+ var items, bp = 0, out = '', i, l;
+
+ // Split the paths
+ base = base.substring(0, base.lastIndexOf('/'));
+ base = base.split('/');
+ items = path.split('/');
+
+ if (base.length >= items.length) {
+ for (i = 0, l = base.length; i < l; i++) {
+ if (i >= items.length || base[i] != items[i]) {
+ bp = i + 1;
+ break;
+ }
+ }
+ }
+
+ if (base.length < items.length) {
+ for (i = 0, l = items.length; i < l; i++) {
+ if (i >= base.length || base[i] != items[i]) {
+ bp = i + 1;
+ break;
+ }
+ }
+ }
+
+ if (bp == 1)
+ return path;
+
+ for (i = 0, l = base.length - (bp - 1); i < l; i++)
+ out += "../";
+
+ for (i = bp - 1, l = items.length; i < l; i++) {
+ if (i != bp - 1)
+ out += "/" + items[i];
+ else
+ out += items[i];
+ }
+
+ return out;
+ },
+
+ toAbsPath : function(base, path) {
+ var i, nb = 0, o = [], tr, outPath;
+
+ // Split paths
+ tr = /\/$/.test(path) ? '/' : '';
+ base = base.split('/');
+ path = path.split('/');
+
+ // Remove empty chunks
+ each(base, function(k) {
+ if (k)
+ o.push(k);
+ });
+
+ base = o;
+
+ // Merge relURLParts chunks
+ for (i = path.length - 1, o = []; i >= 0; i--) {
+ // Ignore empty or .
+ if (path[i].length == 0 || path[i] == ".")
+ continue;
+
+ // Is parent
+ if (path[i] == '..') {
+ nb++;
+ continue;
+ }
+
+ // Move up
+ if (nb > 0) {
+ nb--;
+ continue;
+ }
+
+ o.push(path[i]);
+ }
+
+ i = base.length - nb;
+
+ // If /a/b/c or /
+ if (i <= 0)
+ outPath = o.reverse().join('/');
+ else
+ outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');
+
+ // Add front / if it's needed
+ if (outPath.indexOf('/') !== 0)
+ outPath = '/' + outPath;
+
+ // Add traling / if it's needed
+ if (tr && outPath.lastIndexOf('/') !== outPath.length - 1)
+ outPath += tr;
+
+ return outPath;
+ },
+
+ getURI : function(nh) {
+ var s, t = this;
+
+ // Rebuild source
+ if (!t.source || nh) {
+ s = '';
+
+ if (!nh) {
+ if (t.protocol)
+ s += t.protocol + '://';
+
+ if (t.userInfo)
+ s += t.userInfo + '@';
+
+ if (t.host)
+ s += t.host;
+
+ if (t.port)
+ s += ':' + t.port;
+ }
+
+ if (t.path)
+ s += t.path;
+
+ if (t.query)
+ s += '?' + t.query;
+
+ if (t.anchor)
+ s += '#' + t.anchor;
+
+ t.source = s;
+ }
+
+ return t.source;
+ }
+ });
+})();
+
+(function() {
+ var each = tinymce.each;
+
+ tinymce.create('static tinymce.util.Cookie', {
+ getHash : function(n) {
+ var v = this.get(n), h;
+
+ if (v) {
+ each(v.split('&'), function(v) {
+ v = v.split('=');
+ h = h || {};
+ h[unescape(v[0])] = unescape(v[1]);
+ });
+ }
+
+ return h;
+ },
+
+ setHash : function(n, v, e, p, d, s) {
+ var o = '';
+
+ each(v, function(v, k) {
+ o += (!o ? '' : '&') + escape(k) + '=' + escape(v);
+ });
+
+ this.set(n, o, e, p, d, s);
+ },
+
+ get : function(n) {
+ var c = document.cookie, e, p = n + "=", b;
+
+ // Strict mode
+ if (!c)
+ return;
+
+ b = c.indexOf("; " + p);
+
+ if (b == -1) {
+ b = c.indexOf(p);
+
+ if (b != 0)
+ return null;
+ } else
+ b += 2;
+
+ e = c.indexOf(";", b);
+
+ if (e == -1)
+ e = c.length;
+
+ return unescape(c.substring(b + p.length, e));
+ },
+
+ set : function(n, v, e, p, d, s) {
+ document.cookie = n + "=" + escape(v) +
+ ((e) ? "; expires=" + e.toGMTString() : "") +
+ ((p) ? "; path=" + escape(p) : "") +
+ ((d) ? "; domain=" + d : "") +
+ ((s) ? "; secure" : "");
+ },
+
+ remove : function(n, p) {
+ var d = new Date();
+
+ d.setTime(d.getTime() - 1000);
+
+ this.set(n, '', d, p, d);
+ }
+ });
+})();
+
+(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) {
+ // Make sure single quotes never get encoded inside double quotes for JSON compatibility
+ 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) {
+ if (o.hasOwnProperty(i)) {
+ 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) {
+ // Ignore
+ }
+ }
+
+ };
+})();
+
+tinymce.create('static tinymce.util.XHR', {
+ send : function(o) {
+ var x, t, w = window, c = 0;
+
+ // Default settings
+ o.scope = o.scope || this;
+ o.success_scope = o.success_scope || o.scope;
+ o.error_scope = o.error_scope || o.scope;
+ o.async = o.async === false ? false : true;
+ o.data = o.data || '';
+
+ function get(s) {
+ x = 0;
+
+ try {
+ x = new ActiveXObject(s);
+ } catch (ex) {
+ }
+
+ return x;
+ };
+
+ x = w.XMLHttpRequest ? new XMLHttpRequest() : get('Microsoft.XMLHTTP') || get('Msxml2.XMLHTTP');
+
+ if (x) {
+ if (x.overrideMimeType)
+ x.overrideMimeType(o.content_type);
+
+ x.open(o.type || (o.data ? 'POST' : 'GET'), o.url, o.async);
+
+ if (o.content_type)
+ x.setRequestHeader('Content-Type', o.content_type);
+
+ x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
+
+ x.send(o.data);
+
+ function ready() {
+ if (!o.async || x.readyState == 4 || c++ > 10000) {
+ if (o.success && c < 10000 && x.status == 200)
+ o.success.call(o.success_scope, '' + x.responseText, x, o);
+ else if (o.error)
+ o.error.call(o.error_scope, c > 10000 ? 'TIMED_OUT' : 'GENERAL', x, o);
+
+ x = null;
+ } else
+ w.setTimeout(ready, 10);
+ };
+
+ // Syncronous request
+ if (!o.async)
+ return ready();
+
+ // Wait for response, onReadyStateChange can not be used since it leaks memory in IE
+ t = w.setTimeout(ready, 10);
+ }
+ }
+});
+
+(function() {
+ var extend = tinymce.extend, JSON = tinymce.util.JSON, XHR = tinymce.util.XHR;
+
+ tinymce.create('tinymce.util.JSONRequest', {
+ JSONRequest : function(s) {
+ this.settings = extend({
+ }, s);
+ this.count = 0;
+ },
+
+ send : function(o) {
+ var ecb = o.error, scb = o.success;
+
+ o = extend(this.settings, o);
+
+ o.success = function(c, x) {
+ c = JSON.parse(c);
+
+ if (typeof(c) == 'undefined') {
+ c = {
+ error : 'JSON Parse error.'
+ };
+ }
+
+ if (c.error)
+ ecb.call(o.error_scope || o.scope, c.error, x);
+ else
+ scb.call(o.success_scope || o.scope, c.result);
+ };
+
+ o.error = function(ty, x) {
+ if (ecb)
+ ecb.call(o.error_scope || o.scope, ty, x);
+ };
+
+ o.data = JSON.serialize({
+ id : o.id || 'c' + (this.count++),
+ method : o.method,
+ params : o.params
+ });
+
+ // JSON content type for Ruby on rails. Bug: #1883287
+ o.content_type = 'application/json';
+
+ XHR.send(o);
+ },
+
+ 'static' : {
+ sendRPC : function(o) {
+ return new tinymce.util.JSONRequest().send(o);
+ }
+ }
+ });
+}());
+(function(tinymce){
+ tinymce.VK = {
+ DELETE: 46,
+ BACKSPACE: 8,
+ ENTER: 13,
+ TAB: 9,
+ SPACEBAR: 32,
+ UP: 38,
+ DOWN: 40
+ }
+})(tinymce);
+
+(function(tinymce) {
+ var VK = tinymce.VK, BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE;
+
+ function cleanupStylesWhenDeleting(ed) {
+ var dom = ed.dom, selection = ed.selection;
+
+ ed.onKeyDown.add(function(ed, e) {
+ var rng, blockElm, node, clonedSpan, isDelete;
+
+ isDelete = e.keyCode == DELETE;
+ if (isDelete || e.keyCode == BACKSPACE) {
+ e.preventDefault();
+ rng = selection.getRng();
+
+ // Find root block
+ blockElm = dom.getParent(rng.startContainer, dom.isBlock);
+
+ // On delete clone the root span of the next block element
+ if (isDelete)
+ blockElm = dom.getNext(blockElm, dom.isBlock);
+
+ // Locate root span element and clone it since it would otherwise get merged by the "apple-style-span" on delete/backspace
+ if (blockElm) {
+ node = blockElm.firstChild;
+
+ // Ignore empty text nodes
+ while (node && node.nodeType == 3 && node.nodeValue.length == 0)
+ node = node.nextSibling;
+
+ if (node && node.nodeName === 'SPAN') {
+ clonedSpan = node.cloneNode(false);
+ }
+ }
+
+ // Do the backspace/delete actiopn
+ ed.getDoc().execCommand(isDelete ? 'ForwardDelete' : 'Delete', false, null);
+
+ // Find all odd apple-style-spans
+ blockElm = dom.getParent(rng.startContainer, dom.isBlock);
+ tinymce.each(dom.select('span.Apple-style-span,font.Apple-style-span', blockElm), function(span) {
+ var bm = selection.getBookmark();
+
+ if (clonedSpan) {
+ dom.replace(clonedSpan.cloneNode(false), span, true);
+ } else {
+ dom.remove(span, true);
+ }
+
+ // Restore the selection
+ selection.moveToBookmark(bm);
+ });
+ }
+ });
+ };
+
+ function emptyEditorWhenDeleting(ed) {
+ ed.onKeyUp.add(function(ed, e) {
+ var keyCode = e.keyCode;
+
+ if (keyCode == DELETE || keyCode == BACKSPACE) {
+ if (ed.dom.isEmpty(ed.getBody())) {
+ ed.setContent('', {format : 'raw'});
+ ed.nodeChanged();
+ return;
+ }
+ }
+ });
+ };
+
+ function inputMethodFocus(ed) {
+ ed.dom.bind(ed.getDoc(), 'focusin', function() {
+ ed.selection.setRng(ed.selection.getRng());
+ });
+ };
+
+ function removeHrOnBackspace(ed) {
+ ed.onKeyDown.add(function(ed, e) {
+ if (e.keyCode === BACKSPACE) {
+ if (ed.selection.isCollapsed() && ed.selection.getRng(true).startOffset === 0) {
+ var node = ed.selection.getNode();
+ var previousSibling = node.previousSibling;
+ if (previousSibling && previousSibling.nodeName && previousSibling.nodeName.toLowerCase() === "hr") {
+ ed.dom.remove(previousSibling);
+ tinymce.dom.Event.cancel(e);
+ }
+ }
+ }
+ })
+ }
+
+ function focusBody(ed) {
+ // Fix for a focus bug in FF 3.x where the body element
+ // wouldn't get proper focus if the user clicked on the HTML element
+ if (!Range.prototype.getClientRects) { // Detect getClientRects got introduced in FF 4
+ ed.onMouseDown.add(function(ed, e) {
+ if (e.target.nodeName === "HTML") {
+ var body = ed.getBody();
+
+ // Blur the body it's focused but not correctly focused
+ body.blur();
+
+ // Refocus the body after a little while
+ setTimeout(function() {
+ body.focus();
+ }, 0);
+ }
+ });
+ }
+ };
+
+ function selectControlElements(ed) {
+ ed.onClick.add(function(ed, e) {
+ e = e.target;
+
+ // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250
+ // WebKit can't even do simple things like selecting an image
+ // Needs tobe the setBaseAndExtend or it will fail to select floated images
+ if (/^(IMG|HR)$/.test(e.nodeName))
+ ed.selection.getSel().setBaseAndExtent(e, 0, e, 1);
+
+ if (e.nodeName == 'A' && ed.dom.hasClass(e, 'mceItemAnchor'))
+ ed.selection.select(e);
+
+ ed.nodeChanged();
+ });
+ };
+
+ function selectionChangeNodeChanged(ed) {
+ var lastRng, selectionTimer;
+
+ ed.dom.bind(ed.getDoc(), 'selectionchange', function() {
+ if (selectionTimer) {
+ clearTimeout(selectionTimer);
+ selectionTimer = 0;
+ }
+
+ selectionTimer = window.setTimeout(function() {
+ var rng = ed.selection.getRng();
+
+ // Compare the ranges to see if it was a real change or not
+ if (!lastRng || !tinymce.dom.RangeUtils.compareRanges(rng, lastRng)) {
+ ed.nodeChanged();
+ lastRng = rng;
+ }
+ }, 50);
+ });
+ }
+
+ function ensureBodyHasRoleApplication(ed) {
+ document.body.setAttribute("role", "application");
+ }
+
+ tinymce.create('tinymce.util.Quirks', {
+ Quirks: function(ed) {
+ // WebKit
+ if (tinymce.isWebKit) {
+ cleanupStylesWhenDeleting(ed);
+ emptyEditorWhenDeleting(ed);
+ inputMethodFocus(ed);
+ selectControlElements(ed);
+
+ // iOS
+ if (tinymce.isIDevice) {
+ selectionChangeNodeChanged(ed);
+ }
+ }
+
+ // IE
+ if (tinymce.isIE) {
+ removeHrOnBackspace(ed);
+ emptyEditorWhenDeleting(ed);
+ ensureBodyHasRoleApplication(ed);
+ }
+
+ // Gecko
+ if (tinymce.isGecko) {
+ removeHrOnBackspace(ed);
+ focusBody(ed);
+ }
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ var namedEntities, baseEntities, reverseEntities,
+ attrsCharsRegExp = /[&<>\"\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
+ textCharsRegExp = /[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
+ rawCharsRegExp = /[<>&\"\']/g,
+ entityRegExp = /&(#x|#)?([\w]+);/g,
+ asciiMap = {
+ 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"
+ };
+
+ // Raw entities
+ baseEntities = {
+ '\"' : '&quot;', // Needs to be escaped since the YUI compressor would otherwise break the code
+ "'" : '&#39;',
+ '<' : '&lt;',
+ '>' : '&gt;',
+ '&' : '&amp;'
+ };
+
+ // Reverse lookup table for raw entities
+ reverseEntities = {
+ '&lt;' : '<',
+ '&gt;' : '>',
+ '&amp;' : '&',
+ '&quot;' : '"',
+ '&apos;' : "'"
+ };
+
+ // Decodes text by using the browser
+ function nativeDecode(text) {
+ var elm;
+
+ elm = document.createElement("div");
+ elm.innerHTML = text;
+
+ return elm.textContent || elm.innerText || text;
+ };
+
+ // Build a two way lookup table for the entities
+ function buildEntitiesLookup(items, radix) {
+ var i, chr, entity, lookup = {};
+
+ if (items) {
+ items = items.split(',');
+ radix = radix || 10;
+
+ // Build entities lookup table
+ for (i = 0; i < items.length; i += 2) {
+ chr = String.fromCharCode(parseInt(items[i], radix));
+
+ // Only add non base entities
+ if (!baseEntities[chr]) {
+ entity = '&' + items[i + 1] + ';';
+ lookup[chr] = entity;
+ lookup[entity] = chr;
+ }
+ }
+
+ return lookup;
+ }
+ };
+
+ // Unpack entities lookup where the numbers are in radix 32 to reduce the size
+ namedEntities = buildEntitiesLookup(
+ '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);
+
+ tinymce.html = tinymce.html || {};
+
+ tinymce.html.Entities = {
+ encodeRaw : function(text, attr) {
+ return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {
+ return baseEntities[chr] || chr;
+ });
+ },
+
+ encodeAllRaw : function(text) {
+ return ('' + text).replace(rawCharsRegExp, function(chr) {
+ return baseEntities[chr] || chr;
+ });
+ },
+
+ encodeNumeric : function(text, attr) {
+ return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {
+ // Multi byte sequence convert it to a single entity
+ if (chr.length > 1)
+ return '&#' + (((chr.charCodeAt(0) - 0xD800) * 0x400) + (chr.charCodeAt(1) - 0xDC00) + 0x10000) + ';';
+
+ return baseEntities[chr] || '&#' + chr.charCodeAt(0) + ';';
+ });
+ },
+
+ encodeNamed : function(text, attr, entities) {
+ entities = entities || namedEntities;
+
+ return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {
+ return baseEntities[chr] || entities[chr] || chr;
+ });
+ },
+
+ getEncodeFunc : function(name, entities) {
+ var Entities = tinymce.html.Entities;
+
+ entities = buildEntitiesLookup(entities) || namedEntities;
+
+ function encodeNamedAndNumeric(text, attr) {
+ return text.replace(attr ? attrsCharsRegExp : textCharsRegExp, function(chr) {
+ return baseEntities[chr] || entities[chr] || '&#' + chr.charCodeAt(0) + ';' || chr;
+ });
+ };
+
+ function encodeCustomNamed(text, attr) {
+ return Entities.encodeNamed(text, attr, entities);
+ };
+
+ // Replace + with , to be compatible with previous TinyMCE versions
+ name = tinymce.makeMap(name.replace(/\+/g, ','));
+
+ // Named and numeric encoder
+ if (name.named && name.numeric)
+ return encodeNamedAndNumeric;
+
+ // Named encoder
+ if (name.named) {
+ // Custom names
+ if (entities)
+ return encodeCustomNamed;
+
+ return Entities.encodeNamed;
+ }
+
+ // Numeric
+ if (name.numeric)
+ return Entities.encodeNumeric;
+
+ // Raw encoder
+ return Entities.encodeRaw;
+ },
+
+ decode : function(text) {
+ return text.replace(entityRegExp, function(all, numeric, value) {
+ if (numeric) {
+ value = parseInt(value, numeric.length === 2 ? 16 : 10);
+
+ // Support upper UTF
+ if (value > 0xFFFF) {
+ value -= 0x10000;
+
+ return String.fromCharCode(0xD800 + (value >> 10), 0xDC00 + (value & 0x3FF));
+ } else
+ return asciiMap[value] || String.fromCharCode(value);
+ }
+
+ return reverseEntities[all] || namedEntities[all] || nativeDecode(all);
+ });
+ }
+ };
+})(tinymce);
+
+tinymce.html.Styles = function(settings, schema) {
+ var rgbRegExp = /rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,
+ urlOrStrRegExp = /(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,
+ styleRegExp = /\s*([^:]+):\s*([^;]+);?/g,
+ trimRightRegExp = /\s+$/,
+ urlColorRegExp = /rgb/,
+ undef, i, encodingLookup = {}, encodingItems;
+
+ settings = settings || {};
+
+ encodingItems = '\\" \\\' \\; \\: ; : \uFEFF'.split(' ');
+ for (i = 0; i < encodingItems.length; i++) {
+ encodingLookup[encodingItems[i]] = '\uFEFF' + i;
+ encodingLookup['\uFEFF' + i] = encodingItems[i];
+ }
+
+ function toHex(match, r, g, b) {
+ function hex(val) {
+ val = parseInt(val).toString(16);
+
+ return val.length > 1 ? val : '0' + val; // 0 -> 00
+ };
+
+ return '#' + hex(r) + hex(g) + hex(b);
+ };
+
+ return {
+ toHex : function(color) {
+ return color.replace(rgbRegExp, toHex);
+ },
+
+ parse : function(css) {
+ var styles = {}, matches, name, value, isEncoded, urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope || this;
+
+ function compress(prefix, suffix) {
+ var top, right, bottom, left;
+
+ // Get values and check it it needs compressing
+ top = styles[prefix + '-top' + suffix];
+ if (!top)
+ return;
+
+ right = styles[prefix + '-right' + suffix];
+ if (top != right)
+ return;
+
+ bottom = styles[prefix + '-bottom' + suffix];
+ if (right != bottom)
+ return;
+
+ left = styles[prefix + '-left' + suffix];
+ if (bottom != left)
+ return;
+
+ // Compress
+ styles[prefix + suffix] = left;
+ delete styles[prefix + '-top' + suffix];
+ delete styles[prefix + '-right' + suffix];
+ delete styles[prefix + '-bottom' + suffix];
+ delete styles[prefix + '-left' + suffix];
+ };
+
+ function canCompress(key) {
+ var value = styles[key], i;
+
+ if (!value || value.indexOf(' ') < 0)
+ return;
+
+ value = value.split(' ');
+ i = value.length;
+ while (i--) {
+ if (value[i] !== value[0])
+ return false;
+ }
+
+ styles[key] = value[0];
+
+ return true;
+ };
+
+ function compress2(target, a, b, c) {
+ if (!canCompress(a))
+ return;
+
+ if (!canCompress(b))
+ return;
+
+ if (!canCompress(c))
+ return;
+
+ // Compress
+ styles[target] = styles[a] + ' ' + styles[b] + ' ' + styles[c];
+ delete styles[a];
+ delete styles[b];
+ delete styles[c];
+ };
+
+ // Encodes the specified string by replacing all \" \' ; : with _<num>
+ function encode(str) {
+ isEncoded = true;
+
+ return encodingLookup[str];
+ };
+
+ // Decodes the specified string by replacing all _<num> with it's original value \" \' etc
+ // It will also decode the \" \' if keep_slashes is set to fale or omitted
+ function decode(str, keep_slashes) {
+ if (isEncoded) {
+ str = str.replace(/\uFEFF[0-9]/g, function(str) {
+ return encodingLookup[str];
+ });
+ }
+
+ if (!keep_slashes)
+ str = str.replace(/\\([\'\";:])/g, "$1");
+
+ return str;
+ }
+
+ if (css) {
+ // Encode \" \' % and ; and : inside strings so they don't interfere with the style parsing
+ css = css.replace(/\\[\"\';:\uFEFF]/g, encode).replace(/\"[^\"]+\"|\'[^\']+\'/g, function(str) {
+ return str.replace(/[;:]/g, encode);
+ });
+
+ // Parse styles
+ while (matches = styleRegExp.exec(css)) {
+ name = matches[1].replace(trimRightRegExp, '').toLowerCase();
+ value = matches[2].replace(trimRightRegExp, '');
+
+ if (name && value.length > 0) {
+ // Opera will produce 700 instead of bold in their style values
+ if (name === 'font-weight' && value === '700')
+ value = 'bold';
+ else if (name === 'color' || name === 'background-color') // Lowercase colors like RED
+ value = value.toLowerCase();
+
+ // Convert RGB colors to HEX
+ value = value.replace(rgbRegExp, toHex);
+
+ // Convert URLs and force them into url('value') format
+ value = value.replace(urlOrStrRegExp, function(match, url, url2, url3, str, str2) {
+ str = str || str2;
+
+ if (str) {
+ str = decode(str);
+
+ // Force strings into single quote format
+ return "'" + str.replace(/\'/g, "\\'") + "'";
+ }
+
+ url = decode(url || url2 || url3);
+
+ // Convert the URL to relative/absolute depending on config
+ if (urlConverter)
+ url = urlConverter.call(urlConverterScope, url, 'style');
+
+ // Output new URL format
+ return "url('" + url.replace(/\'/g, "\\'") + "')";
+ });
+
+ styles[name] = isEncoded ? decode(value, true) : value;
+ }
+
+ styleRegExp.lastIndex = matches.index + matches[0].length;
+ }
+
+ // Compress the styles to reduce it's size for example IE will expand styles
+ compress("border", "");
+ compress("border", "-width");
+ compress("border", "-color");
+ compress("border", "-style");
+ compress("padding", "");
+ compress("margin", "");
+ compress2('border', 'border-width', 'border-style', 'border-color');
+
+ // Remove pointless border, IE produces these
+ if (styles.border === 'medium none')
+ delete styles.border;
+ }
+
+ return styles;
+ },
+
+ serialize : function(styles, element_name) {
+ var css = '', name, value;
+
+ function serializeStyles(name) {
+ var styleList, i, l, value;
+
+ styleList = schema.styles[name];
+ if (styleList) {
+ for (i = 0, l = styleList.length; i < l; i++) {
+ name = styleList[i];
+ value = styles[name];
+
+ if (value !== undef && value.length > 0)
+ css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';
+ }
+ }
+ };
+
+ // Serialize styles according to schema
+ if (element_name && schema && schema.styles) {
+ // Serialize global styles and element specific styles
+ serializeStyles('*');
+ serializeStyles(element_name);
+ } else {
+ // Output the styles in the order they are inside the object
+ for (name in styles) {
+ value = styles[name];
+
+ if (value !== undef && value.length > 0)
+ css += (css.length > 0 ? ' ' : '') + name + ': ' + value + ';';
+ }
+ }
+
+ return css;
+ }
+ };
+};
+
+(function(tinymce) {
+ var transitional = {}, boolAttrMap, blockElementsMap, shortEndedElementsMap, nonEmptyElementsMap, customElementsMap = {},
+ defaultWhiteSpaceElementsMap, selfClosingElementsMap, makeMap = tinymce.makeMap, each = tinymce.each;
+
+ function split(str, delim) {
+ return str.split(delim || ',');
+ };
+
+ function unpack(lookup, data) {
+ var key, elements = {};
+
+ function replace(value) {
+ return value.replace(/[A-Z]+/g, function(key) {
+ return replace(lookup[key]);
+ });
+ };
+
+ // Unpack lookup
+ for (key in lookup) {
+ if (lookup.hasOwnProperty(key))
+ lookup[key] = replace(lookup[key]);
+ }
+
+ // Unpack and parse data into object map
+ replace(data).replace(/#/g, '#text').replace(/(\w+)\[([^\]]+)\]\[([^\]]*)\]/g, function(str, name, attributes, children) {
+ attributes = split(attributes, '|');
+
+ elements[name] = {
+ attributes : makeMap(attributes),
+ attributesOrder : attributes,
+ children : makeMap(children, '|', {'#comment' : {}})
+ }
+ });
+
+ return elements;
+ };
+
+ // Build a lookup table for block elements both lowercase and uppercase
+ blockElementsMap = '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';
+ blockElementsMap = makeMap(blockElementsMap, ',', makeMap(blockElementsMap.toUpperCase()));
+
+ // This is the XHTML 1.0 transitional elements with it's attributes and children packed to reduce it's size
+ transitional = unpack({
+ 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]'
+ );
+
+ boolAttrMap = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected,autoplay,loop,controls');
+ shortEndedElementsMap = makeMap('area,base,basefont,br,col,frame,hr,img,input,isindex,link,meta,param,embed,source');
+ nonEmptyElementsMap = tinymce.extend(makeMap('td,th,iframe,video,audio,object'), shortEndedElementsMap);
+ defaultWhiteSpaceElementsMap = makeMap('pre,script,style,textarea');
+ selfClosingElementsMap = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr');
+
+ tinymce.html.Schema = function(settings) {
+ var self = this, elements = {}, children = {}, patternElements = [], validStyles, whiteSpaceElementsMap;
+
+ settings = settings || {};
+
+ // Allow all elements and attributes if verify_html is set to false
+ if (settings.verify_html === false)
+ settings.valid_elements = '*[*]';
+
+ // Build styles list
+ if (settings.valid_styles) {
+ validStyles = {};
+
+ // Convert styles into a rule list
+ each(settings.valid_styles, function(value, key) {
+ validStyles[key] = tinymce.explode(value);
+ });
+ }
+
+ whiteSpaceElementsMap = settings.whitespace_elements ? makeMap(settings.whitespace_elements) : defaultWhiteSpaceElementsMap;
+
+ // Converts a wildcard expression string to a regexp for example *a will become /.*a/.
+ function patternToRegExp(str) {
+ return new RegExp('^' + str.replace(/([?+*])/g, '.$1') + '$');
+ };
+
+ // Parses the specified valid_elements string and adds to the current rules
+ // This function is a bit hard to read since it's heavily optimized for speed
+ function addValidElements(valid_elements) {
+ var ei, el, ai, al, yl, matches, element, attr, attrData, elementName, attrName, attrType, attributes, attributesOrder,
+ prefix, outputName, globalAttributes, globalAttributesOrder, transElement, key, childKey, value,
+ elementRuleRegExp = /^([#+-])?([^\[\/]+)(?:\/([^\[]+))?(?:\[([^\]]+)\])?$/,
+ attrRuleRegExp = /^([!\-])?(\w+::\w+|[^=:<]+)?(?:([=:<])(.*))?$/,
+ hasPatternsRegExp = /[*?+]/;
+
+ if (valid_elements) {
+ // Split valid elements into an array with rules
+ valid_elements = split(valid_elements);
+
+ if (elements['@']) {
+ globalAttributes = elements['@'].attributes;
+ globalAttributesOrder = elements['@'].attributesOrder;
+ }
+
+ // Loop all rules
+ for (ei = 0, el = valid_elements.length; ei < el; ei++) {
+ // Parse element rule
+ matches = elementRuleRegExp.exec(valid_elements[ei]);
+ if (matches) {
+ // Setup local names for matches
+ prefix = matches[1];
+ elementName = matches[2];
+ outputName = matches[3];
+ attrData = matches[4];
+
+ // Create new attributes and attributesOrder
+ attributes = {};
+ attributesOrder = [];
+
+ // Create the new element
+ element = {
+ attributes : attributes,
+ attributesOrder : attributesOrder
+ };
+
+ // Padd empty elements prefix
+ if (prefix === '#')
+ element.paddEmpty = true;
+
+ // Remove empty elements prefix
+ if (prefix === '-')
+ element.removeEmpty = true;
+
+ // Copy attributes from global rule into current rule
+ if (globalAttributes) {
+ for (key in globalAttributes)
+ attributes[key] = globalAttributes[key];
+
+ attributesOrder.push.apply(attributesOrder, globalAttributesOrder);
+ }
+
+ // Attributes defined
+ if (attrData) {
+ attrData = split(attrData, '|');
+ for (ai = 0, al = attrData.length; ai < al; ai++) {
+ matches = attrRuleRegExp.exec(attrData[ai]);
+ if (matches) {
+ attr = {};
+ attrType = matches[1];
+ attrName = matches[2].replace(/::/g, ':');
+ prefix = matches[3];
+ value = matches[4];
+
+ // Required
+ if (attrType === '!') {
+ element.attributesRequired = element.attributesRequired || [];
+ element.attributesRequired.push(attrName);
+ attr.required = true;
+ }
+
+ // Denied from global
+ if (attrType === '-') {
+ delete attributes[attrName];
+ attributesOrder.splice(tinymce.inArray(attributesOrder, attrName), 1);
+ continue;
+ }
+
+ // Default value
+ if (prefix) {
+ // Default value
+ if (prefix === '=') {
+ element.attributesDefault = element.attributesDefault || [];
+ element.attributesDefault.push({name: attrName, value: value});
+ attr.defaultValue = value;
+ }
+
+ // Forced value
+ if (prefix === ':') {
+ element.attributesForced = element.attributesForced || [];
+ element.attributesForced.push({name: attrName, value: value});
+ attr.forcedValue = value;
+ }
+
+ // Required values
+ if (prefix === '<')
+ attr.validValues = makeMap(value, '?');
+ }
+
+ // Check for attribute patterns
+ if (hasPatternsRegExp.test(attrName)) {
+ element.attributePatterns = element.attributePatterns || [];
+ attr.pattern = patternToRegExp(attrName);
+ element.attributePatterns.push(attr);
+ } else {
+ // Add attribute to order list if it doesn't already exist
+ if (!attributes[attrName])
+ attributesOrder.push(attrName);
+
+ attributes[attrName] = attr;
+ }
+ }
+ }
+ }
+
+ // Global rule, store away these for later usage
+ if (!globalAttributes && elementName == '@') {
+ globalAttributes = attributes;
+ globalAttributesOrder = attributesOrder;
+ }
+
+ // Handle substitute elements such as b/strong
+ if (outputName) {
+ element.outputName = elementName;
+ elements[outputName] = element;
+ }
+
+ // Add pattern or exact element
+ if (hasPatternsRegExp.test(elementName)) {
+ element.pattern = patternToRegExp(elementName);
+ patternElements.push(element);
+ } else
+ elements[elementName] = element;
+ }
+ }
+ }
+ };
+
+ function setValidElements(valid_elements) {
+ elements = {};
+ patternElements = [];
+
+ addValidElements(valid_elements);
+
+ each(transitional, function(element, name) {
+ children[name] = element.children;
+ });
+ };
+
+ // Adds custom non HTML elements to the schema
+ function addCustomElements(custom_elements) {
+ var customElementRegExp = /^(~)?(.+)$/;
+
+ if (custom_elements) {
+ each(split(custom_elements), function(rule) {
+ var matches = customElementRegExp.exec(rule),
+ inline = matches[1] === '~',
+ cloneName = inline ? 'span' : 'div',
+ name = matches[2];
+
+ children[name] = children[cloneName];
+ customElementsMap[name] = cloneName;
+
+ // If it's not marked as inline then add it to valid block elements
+ if (!inline)
+ blockElementsMap[name] = {};
+
+ // Add custom elements at span/div positions
+ each(children, function(element, child) {
+ if (element[cloneName])
+ element[name] = element[cloneName];
+ });
+ });
+ }
+ };
+
+ // Adds valid children to the schema object
+ function addValidChildren(valid_children) {
+ var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/;
+
+ if (valid_children) {
+ each(split(valid_children), function(rule) {
+ var matches = childRuleRegExp.exec(rule), parent, prefix;
+
+ if (matches) {
+ prefix = matches[1];
+
+ // Add/remove items from default
+ if (prefix)
+ parent = children[matches[2]];
+ else
+ parent = children[matches[2]] = {'#comment' : {}};
+
+ parent = children[matches[2]];
+
+ each(split(matches[3], '|'), function(child) {
+ if (prefix === '-')
+ delete parent[child];
+ else
+ parent[child] = {};
+ });
+ }
+ });
+ }
+ };
+
+ function getElementRule(name) {
+ var element = elements[name], i;
+
+ // Exact match found
+ if (element)
+ return element;
+
+ // No exact match then try the patterns
+ i = patternElements.length;
+ while (i--) {
+ element = patternElements[i];
+
+ if (element.pattern.test(name))
+ return element;
+ }
+ };
+
+ if (!settings.valid_elements) {
+ // No valid elements defined then clone the elements from the transitional spec
+ each(transitional, function(element, name) {
+ elements[name] = {
+ attributes : element.attributes,
+ attributesOrder : element.attributesOrder
+ };
+
+ children[name] = element.children;
+ });
+
+ // Switch these
+ each(split('strong/b,em/i'), function(item) {
+ item = split(item, '/');
+ elements[item[1]].outputName = item[0];
+ });
+
+ // Add default alt attribute for images
+ elements.img.attributesDefault = [{name: 'alt', value: ''}];
+
+ // Remove these if they are empty by default
+ each(split('ol,ul,sub,sup,blockquote,span,font,a,table,tbody,tr'), function(name) {
+ elements[name].removeEmpty = true;
+ });
+
+ // Padd these by default
+ each(split('p,h1,h2,h3,h4,h5,h6,th,td,pre,div,address,caption'), function(name) {
+ elements[name].paddEmpty = true;
+ });
+ } else
+ setValidElements(settings.valid_elements);
+
+ addCustomElements(settings.custom_elements);
+ addValidChildren(settings.valid_children);
+ addValidElements(settings.extended_valid_elements);
+
+ // Todo: Remove this when we fix list handling to be valid
+ addValidChildren('+ol[ul|ol],+ul[ul|ol]');
+
+ // If the user didn't allow span only allow internal spans
+ if (!getElementRule('span'))
+ addValidElements('span[!data-mce-type|*]');
+
+ // Delete invalid elements
+ if (settings.invalid_elements) {
+ tinymce.each(tinymce.explode(settings.invalid_elements), function(item) {
+ if (elements[item])
+ delete elements[item];
+ });
+ }
+
+ self.children = children;
+
+ self.styles = validStyles;
+
+ self.getBoolAttrs = function() {
+ return boolAttrMap;
+ };
+
+ self.getBlockElements = function() {
+ return blockElementsMap;
+ };
+
+ self.getShortEndedElements = function() {
+ return shortEndedElementsMap;
+ };
+
+ self.getSelfClosingElements = function() {
+ return selfClosingElementsMap;
+ };
+
+ self.getNonEmptyElements = function() {
+ return nonEmptyElementsMap;
+ };
+
+ self.getWhiteSpaceElements = function() {
+ return whiteSpaceElementsMap;
+ };
+
+ self.isValidChild = function(name, child) {
+ var parent = children[name];
+
+ return !!(parent && parent[child]);
+ };
+
+ self.getElementRule = getElementRule;
+
+ self.getCustomElements = function() {
+ return customElementsMap;
+ };
+
+ self.addValidElements = addValidElements;
+
+ self.setValidElements = setValidElements;
+
+ self.addCustomElements = addCustomElements;
+
+ self.addValidChildren = addValidChildren;
+ };
+
+ // Expose boolMap and blockElementMap as static properties for usage in DOMUtils
+ tinymce.html.Schema.boolAttrMap = boolAttrMap;
+ tinymce.html.Schema.blockElementsMap = blockElementsMap;
+})(tinymce);
+
+(function(tinymce) {
+ tinymce.html.SaxParser = function(settings, schema) {
+ var self = this, noop = function() {};
+
+ settings = settings || {};
+ self.schema = schema = schema || new tinymce.html.Schema();
+
+ if (settings.fix_self_closing !== false)
+ settings.fix_self_closing = true;
+
+ // Add handler functions from settings and setup default handlers
+ tinymce.each('comment cdata text start end pi doctype'.split(' '), function(name) {
+ if (name)
+ self[name] = settings[name] || noop;
+ });
+
+ self.parse = function(html) {
+ var self = this, matches, index = 0, value, endRegExp, stack = [], attrList, i, text, name, isInternalElement, removeInternalElements,
+ shortEndedElements, fillAttrsMap, isShortEnded, validate, elementRule, isValidElement, attr, attribsValue, invalidPrefixRegExp,
+ validAttributesMap, validAttributePatterns, attributesRequired, attributesDefault, attributesForced, selfClosing,
+ tokenRegExp, attrRegExp, specialElements, attrValue, idCount = 0, decode = tinymce.html.Entities.decode, fixSelfClosing, isIE;
+
+ function processEndTag(name) {
+ var pos, i;
+
+ // Find position of parent of the same type
+ pos = stack.length;
+ while (pos--) {
+ if (stack[pos].name === name)
+ break;
+ }
+
+ // Found parent
+ if (pos >= 0) {
+ // Close all the open elements
+ for (i = stack.length - 1; i >= pos; i--) {
+ name = stack[i];
+
+ if (name.valid)
+ self.end(name.name);
+ }
+
+ // Remove the open elements from the stack
+ stack.length = pos;
+ }
+ };
+
+ // Precompile RegExps and map objects
+ tokenRegExp = new RegExp('<(?:' +
+ '(?:!--([\\w\\W]*?)-->)|' + // Comment
+ '(?:!\\[CDATA\\[([\\w\\W]*?)\\]\\]>)|' + // CDATA
+ '(?:!DOCTYPE([\\w\\W]*?)>)|' + // DOCTYPE
+ '(?:\\?([^\\s\\/<>]+) ?([\\w\\W]*?)[?/]>)|' + // PI
+ '(?:\\/([^>]+)>)|' + // End element
+ '(?:([^\\s\\/<>]+)((?:\\s+[^"\'>]+(?:(?:"[^"]*")|(?:\'[^\']*\')|[^>]*))*|\\/)>)' + // Start element
+ ')', 'g');
+
+ attrRegExp = /([\w:\-]+)(?:\s*=\s*(?:(?:\"((?:\\.|[^\"])*)\")|(?:\'((?:\\.|[^\'])*)\')|([^>\s]+)))?/g;
+ specialElements = {
+ 'script' : /<\/script[^>]*>/gi,
+ 'style' : /<\/style[^>]*>/gi,
+ 'noscript' : /<\/noscript[^>]*>/gi
+ };
+
+ // Setup lookup tables for empty elements and boolean attributes
+ shortEndedElements = schema.getShortEndedElements();
+ selfClosing = schema.getSelfClosingElements();
+ fillAttrsMap = schema.getBoolAttrs();
+ validate = settings.validate;
+ removeInternalElements = settings.remove_internals;
+ fixSelfClosing = settings.fix_self_closing;
+ isIE = tinymce.isIE;
+ invalidPrefixRegExp = /^:/;
+
+ while (matches = tokenRegExp.exec(html)) {
+ // Text
+ if (index < matches.index)
+ self.text(decode(html.substr(index, matches.index - index)));
+
+ if (value = matches[6]) { // End element
+ value = value.toLowerCase();
+
+ // IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements
+ if (isIE && invalidPrefixRegExp.test(value))
+ value = value.substr(1);
+
+ processEndTag(value);
+ } else if (value = matches[7]) { // Start element
+ value = value.toLowerCase();
+
+ // IE will add a ":" in front of elements it doesn't understand like custom elements or HTML5 elements
+ if (isIE && invalidPrefixRegExp.test(value))
+ value = value.substr(1);
+
+ isShortEnded = value in shortEndedElements;
+
+ // Is self closing tag for example an <li> after an open <li>
+ if (fixSelfClosing && selfClosing[value] && stack.length > 0 && stack[stack.length - 1].name === value)
+ processEndTag(value);
+
+ // Validate element
+ if (!validate || (elementRule = schema.getElementRule(value))) {
+ isValidElement = true;
+
+ // Grab attributes map and patters when validation is enabled
+ if (validate) {
+ validAttributesMap = elementRule.attributes;
+ validAttributePatterns = elementRule.attributePatterns;
+ }
+
+ // Parse attributes
+ if (attribsValue = matches[8]) {
+ isInternalElement = attribsValue.indexOf('data-mce-type') !== -1; // Check if the element is an internal element
+
+ // If the element has internal attributes then remove it if we are told to do so
+ if (isInternalElement && removeInternalElements)
+ isValidElement = false;
+
+ attrList = [];
+ attrList.map = {};
+
+ attribsValue.replace(attrRegExp, function(match, name, value, val2, val3) {
+ var attrRule, i;
+
+ name = name.toLowerCase();
+ value = name in fillAttrsMap ? name : decode(value || val2 || val3 || ''); // Handle boolean attribute than value attribute
+
+ // Validate name and value
+ if (validate && !isInternalElement && name.indexOf('data-') !== 0) {
+ attrRule = validAttributesMap[name];
+
+ // Find rule by pattern matching
+ if (!attrRule && validAttributePatterns) {
+ i = validAttributePatterns.length;
+ while (i--) {
+ attrRule = validAttributePatterns[i];
+ if (attrRule.pattern.test(name))
+ break;
+ }
+
+ // No rule matched
+ if (i === -1)
+ attrRule = null;
+ }
+
+ // No attribute rule found
+ if (!attrRule)
+ return;
+
+ // Validate value
+ if (attrRule.validValues && !(value in attrRule.validValues))
+ return;
+ }
+
+ // Add attribute to list and map
+ attrList.map[name] = value;
+ attrList.push({
+ name: name,
+ value: value
+ });
+ });
+ } else {
+ attrList = [];
+ attrList.map = {};
+ }
+
+ // Process attributes if validation is enabled
+ if (validate && !isInternalElement) {
+ attributesRequired = elementRule.attributesRequired;
+ attributesDefault = elementRule.attributesDefault;
+ attributesForced = elementRule.attributesForced;
+
+ // Handle forced attributes
+ if (attributesForced) {
+ i = attributesForced.length;
+ while (i--) {
+ attr = attributesForced[i];
+ name = attr.name;
+ attrValue = attr.value;
+
+ if (attrValue === '{$uid}')
+ attrValue = 'mce_' + idCount++;
+
+ attrList.map[name] = attrValue;
+ attrList.push({name: name, value: attrValue});
+ }
+ }
+
+ // Handle default attributes
+ if (attributesDefault) {
+ i = attributesDefault.length;
+ while (i--) {
+ attr = attributesDefault[i];
+ name = attr.name;
+
+ if (!(name in attrList.map)) {
+ attrValue = attr.value;
+
+ if (attrValue === '{$uid}')
+ attrValue = 'mce_' + idCount++;
+
+ attrList.map[name] = attrValue;
+ attrList.push({name: name, value: attrValue});
+ }
+ }
+ }
+
+ // Handle required attributes
+ if (attributesRequired) {
+ i = attributesRequired.length;
+ while (i--) {
+ if (attributesRequired[i] in attrList.map)
+ break;
+ }
+
+ // None of the required attributes where found
+ if (i === -1)
+ isValidElement = false;
+ }
+
+ // Invalidate element if it's marked as bogus
+ if (attrList.map['data-mce-bogus'])
+ isValidElement = false;
+ }
+
+ if (isValidElement)
+ self.start(value, attrList, isShortEnded);
+ } else
+ isValidElement = false;
+
+ // Treat script, noscript and style a bit different since they may include code that looks like elements
+ if (endRegExp = specialElements[value]) {
+ endRegExp.lastIndex = index = matches.index + matches[0].length;
+
+ if (matches = endRegExp.exec(html)) {
+ if (isValidElement)
+ text = html.substr(index, matches.index - index);
+
+ index = matches.index + matches[0].length;
+ } else {
+ text = html.substr(index);
+ index = html.length;
+ }
+
+ if (isValidElement && text.length > 0)
+ self.text(text, true);
+
+ if (isValidElement)
+ self.end(value);
+
+ tokenRegExp.lastIndex = index;
+ continue;
+ }
+
+ // Push value on to stack
+ if (!isShortEnded) {
+ if (!attribsValue || attribsValue.indexOf('/') != attribsValue.length - 1)
+ stack.push({name: value, valid: isValidElement});
+ else if (isValidElement)
+ self.end(value);
+ }
+ } else if (value = matches[1]) { // Comment
+ self.comment(value);
+ } else if (value = matches[2]) { // CDATA
+ self.cdata(value);
+ } else if (value = matches[3]) { // DOCTYPE
+ self.doctype(value);
+ } else if (value = matches[4]) { // PI
+ self.pi(value, matches[5]);
+ }
+
+ index = matches.index + matches[0].length;
+ }
+
+ // Text
+ if (index < html.length)
+ self.text(decode(html.substr(index)));
+
+ // Close any open elements
+ for (i = stack.length - 1; i >= 0; i--) {
+ value = stack[i];
+
+ if (value.valid)
+ self.end(value.name);
+ }
+ };
+ }
+})(tinymce);
+
+(function(tinymce) {
+ var whiteSpaceRegExp = /^[ \t\r\n]*$/, typeLookup = {
+ '#text' : 3,
+ '#comment' : 8,
+ '#cdata' : 4,
+ '#pi' : 7,
+ '#doctype' : 10,
+ '#document-fragment' : 11
+ };
+
+ // Walks the tree left/right
+ function walk(node, root_node, prev) {
+ var sibling, parent, startName = prev ? 'lastChild' : 'firstChild', siblingName = prev ? 'prev' : 'next';
+
+ // Walk into nodes if it has a start
+ if (node[startName])
+ return node[startName];
+
+ // Return the sibling if it has one
+ if (node !== root_node) {
+ sibling = node[siblingName];
+
+ if (sibling)
+ return sibling;
+
+ // Walk up the parents to look for siblings
+ for (parent = node.parent; parent && parent !== root_node; parent = parent.parent) {
+ sibling = parent[siblingName];
+
+ if (sibling)
+ return sibling;
+ }
+ }
+ };
+
+ function Node(name, type) {
+ this.name = name;
+ this.type = type;
+
+ if (type === 1) {
+ this.attributes = [];
+ this.attributes.map = {};
+ }
+ }
+
+ tinymce.extend(Node.prototype, {
+ replace : function(node) {
+ var self = this;
+
+ if (node.parent)
+ node.remove();
+
+ self.insert(node, self);
+ self.remove();
+
+ return self;
+ },
+
+ attr : function(name, value) {
+ var self = this, attrs, i, undef;
+
+ if (typeof name !== "string") {
+ for (i in name)
+ self.attr(i, name[i]);
+
+ return self;
+ }
+
+ if (attrs = self.attributes) {
+ if (value !== undef) {
+ // Remove attribute
+ if (value === null) {
+ if (name in attrs.map) {
+ delete attrs.map[name];
+
+ i = attrs.length;
+ while (i--) {
+ if (attrs[i].name === name) {
+ attrs = attrs.splice(i, 1);
+ return self;
+ }
+ }
+ }
+
+ return self;
+ }
+
+ // Set attribute
+ if (name in attrs.map) {
+ // Set attribute
+ i = attrs.length;
+ while (i--) {
+ if (attrs[i].name === name) {
+ attrs[i].value = value;
+ break;
+ }
+ }
+ } else
+ attrs.push({name: name, value: value});
+
+ attrs.map[name] = value;
+
+ return self;
+ } else {
+ return attrs.map[name];
+ }
+ }
+ },
+
+ clone : function() {
+ var self = this, clone = new Node(self.name, self.type), i, l, selfAttrs, selfAttr, cloneAttrs;
+
+ // Clone element attributes
+ if (selfAttrs = self.attributes) {
+ cloneAttrs = [];
+ cloneAttrs.map = {};
+
+ for (i = 0, l = selfAttrs.length; i < l; i++) {
+ selfAttr = selfAttrs[i];
+
+ // Clone everything except id
+ if (selfAttr.name !== 'id') {
+ cloneAttrs[cloneAttrs.length] = {name: selfAttr.name, value: selfAttr.value};
+ cloneAttrs.map[selfAttr.name] = selfAttr.value;
+ }
+ }
+
+ clone.attributes = cloneAttrs;
+ }
+
+ clone.value = self.value;
+ clone.shortEnded = self.shortEnded;
+
+ return clone;
+ },
+
+ wrap : function(wrapper) {
+ var self = this;
+
+ self.parent.insert(wrapper, self);
+ wrapper.append(self);
+
+ return self;
+ },
+
+ unwrap : function() {
+ var self = this, node, next;
+
+ for (node = self.firstChild; node; ) {
+ next = node.next;
+ self.insert(node, self, true);
+ node = next;
+ }
+
+ self.remove();
+ },
+
+ remove : function() {
+ var self = this, parent = self.parent, next = self.next, prev = self.prev;
+
+ if (parent) {
+ if (parent.firstChild === self) {
+ parent.firstChild = next;
+
+ if (next)
+ next.prev = null;
+ } else {
+ prev.next = next;
+ }
+
+ if (parent.lastChild === self) {
+ parent.lastChild = prev;
+
+ if (prev)
+ prev.next = null;
+ } else {
+ next.prev = prev;
+ }
+
+ self.parent = self.next = self.prev = null;
+ }
+
+ return self;
+ },
+
+ append : function(node) {
+ var self = this, last;
+
+ if (node.parent)
+ node.remove();
+
+ last = self.lastChild;
+ if (last) {
+ last.next = node;
+ node.prev = last;
+ self.lastChild = node;
+ } else
+ self.lastChild = self.firstChild = node;
+
+ node.parent = self;
+
+ return node;
+ },
+
+ insert : function(node, ref_node, before) {
+ var parent;
+
+ if (node.parent)
+ node.remove();
+
+ parent = ref_node.parent || this;
+
+ if (before) {
+ if (ref_node === parent.firstChild)
+ parent.firstChild = node;
+ else
+ ref_node.prev.next = node;
+
+ node.prev = ref_node.prev;
+ node.next = ref_node;
+ ref_node.prev = node;
+ } else {
+ if (ref_node === parent.lastChild)
+ parent.lastChild = node;
+ else
+ ref_node.next.prev = node;
+
+ node.next = ref_node.next;
+ node.prev = ref_node;
+ ref_node.next = node;
+ }
+
+ node.parent = parent;
+
+ return node;
+ },
+
+ getAll : function(name) {
+ var self = this, node, collection = [];
+
+ for (node = self.firstChild; node; node = walk(node, self)) {
+ if (node.name === name)
+ collection.push(node);
+ }
+
+ return collection;
+ },
+
+ empty : function() {
+ var self = this, nodes, i, node;
+
+ // Remove all children
+ if (self.firstChild) {
+ nodes = [];
+
+ // Collect the children
+ for (node = self.firstChild; node; node = walk(node, self))
+ nodes.push(node);
+
+ // Remove the children
+ i = nodes.length;
+ while (i--) {
+ node = nodes[i];
+ node.parent = node.firstChild = node.lastChild = node.next = node.prev = null;
+ }
+ }
+
+ self.firstChild = self.lastChild = null;
+
+ return self;
+ },
+
+ isEmpty : function(elements) {
+ var self = this, node = self.firstChild, i, name;
+
+ if (node) {
+ do {
+ if (node.type === 1) {
+ // Ignore bogus elements
+ if (node.attributes.map['data-mce-bogus'])
+ continue;
+
+ // Keep empty elements like <img />
+ if (elements[node.name])
+ return false;
+
+ // Keep elements with data attributes or name attribute like <a name="1"></a>
+ i = node.attributes.length;
+ while (i--) {
+ name = node.attributes[i].name;
+ if (name === "name" || name.indexOf('data-') === 0)
+ return false;
+ }
+ }
+
+ // Keep non whitespace text nodes
+ if ((node.type === 3 && !whiteSpaceRegExp.test(node.value)))
+ return false;
+ } while (node = walk(node, self));
+ }
+
+ return true;
+ },
+
+ walk : function(prev) {
+ return walk(this, null, prev);
+ }
+ });
+
+ tinymce.extend(Node, {
+ create : function(name, attrs) {
+ var node, attrName;
+
+ // Create node
+ node = new Node(name, typeLookup[name] || 1);
+
+ // Add attributes if needed
+ if (attrs) {
+ for (attrName in attrs)
+ node.attr(attrName, attrs[attrName]);
+ }
+
+ return node;
+ }
+ });
+
+ tinymce.html.Node = Node;
+})(tinymce);
+
+(function(tinymce) {
+ var Node = tinymce.html.Node;
+
+ tinymce.html.DomParser = function(settings, schema) {
+ var self = this, nodeFilters = {}, attributeFilters = [], matchedNodes = {}, matchedAttributes = {};
+
+ settings = settings || {};
+ settings.validate = "validate" in settings ? settings.validate : true;
+ settings.root_name = settings.root_name || 'body';
+ self.schema = schema = schema || new tinymce.html.Schema();
+
+ function fixInvalidChildren(nodes) {
+ var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i,
+ childClone, nonEmptyElements, nonSplitableElements, sibling, nextNode;
+
+ nonSplitableElements = tinymce.makeMap('tr,td,th,tbody,thead,tfoot,table');
+ nonEmptyElements = schema.getNonEmptyElements();
+
+ for (ni = 0; ni < nodes.length; ni++) {
+ node = nodes[ni];
+
+ // Already removed
+ if (!node.parent)
+ continue;
+
+ // Get list of all parent nodes until we find a valid parent to stick the child into
+ parents = [node];
+ for (parent = node.parent; parent && !schema.isValidChild(parent.name, node.name) && !nonSplitableElements[parent.name]; parent = parent.parent)
+ parents.push(parent);
+
+ // Found a suitable parent
+ if (parent && parents.length > 1) {
+ // Reverse the array since it makes looping easier
+ parents.reverse();
+
+ // Clone the related parent and insert that after the moved node
+ newParent = currentNode = self.filterNode(parents[0].clone());
+
+ // Start cloning and moving children on the left side of the target node
+ for (i = 0; i < parents.length - 1; i++) {
+ if (schema.isValidChild(currentNode.name, parents[i].name)) {
+ tempNode = self.filterNode(parents[i].clone());
+ currentNode.append(tempNode);
+ } else
+ tempNode = currentNode;
+
+ for (childNode = parents[i].firstChild; childNode && childNode != parents[i + 1]; ) {
+ nextNode = childNode.next;
+ tempNode.append(childNode);
+ childNode = nextNode;
+ }
+
+ currentNode = tempNode;
+ }
+
+ if (!newParent.isEmpty(nonEmptyElements)) {
+ parent.insert(newParent, parents[0], true);
+ parent.insert(node, newParent);
+ } else {
+ parent.insert(node, parents[0], true);
+ }
+
+ // Check if the element is empty by looking through it's contents and special treatment for <p><br /></p>
+ parent = parents[0];
+ if (parent.isEmpty(nonEmptyElements) || parent.firstChild === parent.lastChild && parent.firstChild.name === 'br') {
+ parent.empty().remove();
+ }
+ } else if (node.parent) {
+ // If it's an LI try to find a UL/OL for it or wrap it
+ if (node.name === 'li') {
+ sibling = node.prev;
+ if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {
+ sibling.append(node);
+ continue;
+ }
+
+ sibling = node.next;
+ if (sibling && (sibling.name === 'ul' || sibling.name === 'ul')) {
+ sibling.insert(node, sibling.firstChild, true);
+ continue;
+ }
+
+ node.wrap(self.filterNode(new Node('ul', 1)));
+ continue;
+ }
+
+ // Try wrapping the element in a DIV
+ if (schema.isValidChild(node.parent.name, 'div') && schema.isValidChild('div', node.name)) {
+ node.wrap(self.filterNode(new Node('div', 1)));
+ } else {
+ // We failed wrapping it, then remove or unwrap it
+ if (node.name === 'style' || node.name === 'script')
+ node.empty().remove();
+ else
+ node.unwrap();
+ }
+ }
+ }
+ };
+
+ self.filterNode = function(node) {
+ var i, name, list;
+
+ // Run element filters
+ if (name in nodeFilters) {
+ list = matchedNodes[name];
+
+ if (list)
+ list.push(node);
+ else
+ matchedNodes[name] = [node];
+ }
+
+ // Run attribute filters
+ i = attributeFilters.length;
+ while (i--) {
+ name = attributeFilters[i].name;
+
+ if (name in node.attributes.map) {
+ list = matchedAttributes[name];
+
+ if (list)
+ list.push(node);
+ else
+ matchedAttributes[name] = [node];
+ }
+ }
+
+ return node;
+ };
+
+ self.addNodeFilter = function(name, callback) {
+ tinymce.each(tinymce.explode(name), function(name) {
+ var list = nodeFilters[name];
+
+ if (!list)
+ nodeFilters[name] = list = [];
+
+ list.push(callback);
+ });
+ };
+
+ self.addAttributeFilter = function(name, callback) {
+ tinymce.each(tinymce.explode(name), function(name) {
+ var i;
+
+ for (i = 0; i < attributeFilters.length; i++) {
+ if (attributeFilters[i].name === name) {
+ attributeFilters[i].callbacks.push(callback);
+ return;
+ }
+ }
+
+ attributeFilters.push({name: name, callbacks: [callback]});
+ });
+ };
+
+ self.parse = function(html, args) {
+ var parser, rootNode, node, nodes, i, l, fi, fl, list, name, validate,
+ blockElements, startWhiteSpaceRegExp, invalidChildren = [],
+ endWhiteSpaceRegExp, allWhiteSpaceRegExp, whiteSpaceElements, children, nonEmptyElements, rootBlockName;
+
+ args = args || {};
+ matchedNodes = {};
+ matchedAttributes = {};
+ blockElements = tinymce.extend(tinymce.makeMap('script,style,head,html,body,title,meta,param'), schema.getBlockElements());
+ nonEmptyElements = schema.getNonEmptyElements();
+ children = schema.children;
+ validate = settings.validate;
+ rootBlockName = "forced_root_block" in args ? args.forced_root_block : settings.forced_root_block;
+
+ whiteSpaceElements = schema.getWhiteSpaceElements();
+ startWhiteSpaceRegExp = /^[ \t\r\n]+/;
+ endWhiteSpaceRegExp = /[ \t\r\n]+$/;
+ allWhiteSpaceRegExp = /[ \t\r\n]+/g;
+
+ function addRootBlocks() {
+ var node = rootNode.firstChild, next, rootBlockNode;
+
+ while (node) {
+ next = node.next;
+
+ if (node.type == 3 || (node.type == 1 && node.name !== 'p' && !blockElements[node.name] && !node.attr('data-mce-type'))) {
+ if (!rootBlockNode) {
+ // Create a new root block element
+ rootBlockNode = createNode(rootBlockName, 1);
+ rootNode.insert(rootBlockNode, node);
+ rootBlockNode.append(node);
+ } else
+ rootBlockNode.append(node);
+ } else {
+ rootBlockNode = null;
+ }
+
+ node = next;
+ };
+ };
+
+ function createNode(name, type) {
+ var node = new Node(name, type), list;
+
+ if (name in nodeFilters) {
+ list = matchedNodes[name];
+
+ if (list)
+ list.push(node);
+ else
+ matchedNodes[name] = [node];
+ }
+
+ return node;
+ };
+
+ function removeWhitespaceBefore(node) {
+ var textNode, textVal, sibling;
+
+ for (textNode = node.prev; textNode && textNode.type === 3; ) {
+ textVal = textNode.value.replace(endWhiteSpaceRegExp, '');
+
+ if (textVal.length > 0) {
+ textNode.value = textVal;
+ textNode = textNode.prev;
+ } else {
+ sibling = textNode.prev;
+ textNode.remove();
+ textNode = sibling;
+ }
+ }
+ };
+
+ parser = new tinymce.html.SaxParser({
+ validate : validate,
+ fix_self_closing : !validate, // Let the DOM parser handle <li> in <li> or <p> in <p> for better results
+
+ cdata: function(text) {
+ node.append(createNode('#cdata', 4)).value = text;
+ },
+
+ text: function(text, raw) {
+ var textNode;
+
+ // Trim all redundant whitespace on non white space elements
+ if (!whiteSpaceElements[node.name]) {
+ text = text.replace(allWhiteSpaceRegExp, ' ');
+
+ if (node.lastChild && blockElements[node.lastChild.name])
+ text = text.replace(startWhiteSpaceRegExp, '');
+ }
+
+ // Do we need to create the node
+ if (text.length !== 0) {
+ textNode = createNode('#text', 3);
+ textNode.raw = !!raw;
+ node.append(textNode).value = text;
+ }
+ },
+
+ comment: function(text) {
+ node.append(createNode('#comment', 8)).value = text;
+ },
+
+ pi: function(name, text) {
+ node.append(createNode(name, 7)).value = text;
+ removeWhitespaceBefore(node);
+ },
+
+ doctype: function(text) {
+ var newNode;
+
+ newNode = node.append(createNode('#doctype', 10));
+ newNode.value = text;
+ removeWhitespaceBefore(node);
+ },
+
+ start: function(name, attrs, empty) {
+ var newNode, attrFiltersLen, elementRule, textNode, attrName, text, sibling, parent;
+
+ elementRule = validate ? schema.getElementRule(name) : {};
+ if (elementRule) {
+ newNode = createNode(elementRule.outputName || name, 1);
+ newNode.attributes = attrs;
+ newNode.shortEnded = empty;
+
+ node.append(newNode);
+
+ // Check if node is valid child of the parent node is the child is
+ // unknown we don't collect it since it's probably a custom element
+ parent = children[node.name];
+ if (parent && children[newNode.name] && !parent[newNode.name])
+ invalidChildren.push(newNode);
+
+ attrFiltersLen = attributeFilters.length;
+ while (attrFiltersLen--) {
+ attrName = attributeFilters[attrFiltersLen].name;
+
+ if (attrName in attrs.map) {
+ list = matchedAttributes[attrName];
+
+ if (list)
+ list.push(newNode);
+ else
+ matchedAttributes[attrName] = [newNode];
+ }
+ }
+
+ // Trim whitespace before block
+ if (blockElements[name])
+ removeWhitespaceBefore(newNode);
+
+ // Change current node if the element wasn't empty i.e not <br /> or <img />
+ if (!empty)
+ node = newNode;
+ }
+ },
+
+ end: function(name) {
+ var textNode, elementRule, text, sibling, tempNode;
+
+ elementRule = validate ? schema.getElementRule(name) : {};
+ if (elementRule) {
+ if (blockElements[name]) {
+ if (!whiteSpaceElements[node.name]) {
+ // Trim whitespace at beginning of block
+ for (textNode = node.firstChild; textNode && textNode.type === 3; ) {
+ text = textNode.value.replace(startWhiteSpaceRegExp, '');
+
+ if (text.length > 0) {
+ textNode.value = text;
+ textNode = textNode.next;
+ } else {
+ sibling = textNode.next;
+ textNode.remove();
+ textNode = sibling;
+ }
+ }
+
+ // Trim whitespace at end of block
+ for (textNode = node.lastChild; textNode && textNode.type === 3; ) {
+ text = textNode.value.replace(endWhiteSpaceRegExp, '');
+
+ if (text.length > 0) {
+ textNode.value = text;
+ textNode = textNode.prev;
+ } else {
+ sibling = textNode.prev;
+ textNode.remove();
+ textNode = sibling;
+ }
+ }
+ }
+
+ // Trim start white space
+ textNode = node.prev;
+ if (textNode && textNode.type === 3) {
+ text = textNode.value.replace(startWhiteSpaceRegExp, '');
+
+ if (text.length > 0)
+ textNode.value = text;
+ else
+ textNode.remove();
+ }
+ }
+
+ // Handle empty nodes
+ if (elementRule.removeEmpty || elementRule.paddEmpty) {
+ if (node.isEmpty(nonEmptyElements)) {
+ if (elementRule.paddEmpty)
+ node.empty().append(new Node('#text', '3')).value = '\u00a0';
+ else {
+ // Leave nodes that have a name like <a name="name">
+ if (!node.attributes.map.name) {
+ tempNode = node.parent;
+ node.empty().remove();
+ node = tempNode;
+ return;
+ }
+ }
+ }
+ }
+
+ node = node.parent;
+ }
+ }
+ }, schema);
+
+ rootNode = node = new Node(args.context || settings.root_name, 11);
+
+ parser.parse(html);
+
+ // Fix invalid children or report invalid children in a contextual parsing
+ if (validate && invalidChildren.length) {
+ if (!args.context)
+ fixInvalidChildren(invalidChildren);
+ else
+ args.invalid = true;
+ }
+
+ // Wrap nodes in the root into block elements if the root is body
+ if (rootBlockName && rootNode.name == 'body')
+ addRootBlocks();
+
+ // Run filters only when the contents is valid
+ if (!args.invalid) {
+ // Run node filters
+ for (name in matchedNodes) {
+ list = nodeFilters[name];
+ nodes = matchedNodes[name];
+
+ // Remove already removed children
+ fi = nodes.length;
+ while (fi--) {
+ if (!nodes[fi].parent)
+ nodes.splice(fi, 1);
+ }
+
+ for (i = 0, l = list.length; i < l; i++)
+ list[i](nodes, name, args);
+ }
+
+ // Run attribute filters
+ for (i = 0, l = attributeFilters.length; i < l; i++) {
+ list = attributeFilters[i];
+
+ if (list.name in matchedAttributes) {
+ nodes = matchedAttributes[list.name];
+
+ // Remove already removed children
+ fi = nodes.length;
+ while (fi--) {
+ if (!nodes[fi].parent)
+ nodes.splice(fi, 1);
+ }
+
+ for (fi = 0, fl = list.callbacks.length; fi < fl; fi++)
+ list.callbacks[fi](nodes, list.name, args);
+ }
+ }
+ }
+
+ return rootNode;
+ };
+
+ // Remove <br> at end of block elements Gecko and WebKit injects BR elements to
+ // make it possible to place the caret inside empty blocks. This logic tries to remove
+ // these elements and keep br elements that where intended to be there intact
+ if (settings.remove_trailing_brs) {
+ self.addNodeFilter('br', function(nodes, name) {
+ var i, l = nodes.length, node, blockElements = schema.getBlockElements(),
+ nonEmptyElements = schema.getNonEmptyElements(), parent, prev, prevName;
+
+ // Remove brs from body element as well
+ blockElements.body = 1;
+
+ // Must loop forwards since it will otherwise remove all brs in <p>a<br><br><br></p>
+ for (i = 0; i < l; i++) {
+ node = nodes[i];
+ parent = node.parent;
+
+ if (blockElements[node.parent.name] && node === parent.lastChild) {
+ // Loop all nodes to the right of the current node and check for other BR elements
+ // excluding bookmarks since they are invisible
+ prev = node.prev;
+ while (prev) {
+ prevName = prev.name;
+
+ // Ignore bookmarks
+ if (prevName !== "span" || prev.attr('data-mce-type') !== 'bookmark') {
+ // Found a non BR element
+ if (prevName !== "br")
+ break;
+
+ // Found another br it's a <br><br> structure then don't remove anything
+ if (prevName === 'br') {
+ node = null;
+ break;
+ }
+ }
+
+ prev = prev.prev;
+ }
+
+ if (node) {
+ node.remove();
+
+ // Is the parent to be considered empty after we removed the BR
+ if (parent.isEmpty(nonEmptyElements)) {
+ elementRule = schema.getElementRule(parent.name);
+
+ // Remove or padd the element depending on schema rule
+ if (elementRule) {
+ if (elementRule.removeEmpty)
+ parent.remove();
+ else if (elementRule.paddEmpty)
+ parent.empty().append(new tinymce.html.Node('#text', 3)).value = '\u00a0';
+ }
+ }
+ }
+ }
+ }
+ });
+ }
+ }
+})(tinymce);
+
+tinymce.html.Writer = function(settings) {
+ var html = [], indent, indentBefore, indentAfter, encode, htmlOutput;
+
+ settings = settings || {};
+ indent = settings.indent;
+ indentBefore = tinymce.makeMap(settings.indent_before || '');
+ indentAfter = tinymce.makeMap(settings.indent_after || '');
+ encode = tinymce.html.Entities.getEncodeFunc(settings.entity_encoding || 'raw', settings.entities);
+ htmlOutput = settings.element_format == "html";
+
+ return {
+ start: function(name, attrs, empty) {
+ var i, l, attr, value;
+
+ if (indent && indentBefore[name] && html.length > 0) {
+ value = html[html.length - 1];
+
+ if (value.length > 0 && value !== '\n')
+ html.push('\n');
+ }
+
+ html.push('<', name);
+
+ if (attrs) {
+ for (i = 0, l = attrs.length; i < l; i++) {
+ attr = attrs[i];
+ html.push(' ', attr.name, '="', encode(attr.value, true), '"');
+ }
+ }
+
+ if (!empty || htmlOutput)
+ html[html.length] = '>';
+ else
+ html[html.length] = ' />';
+
+ if (empty && indent && indentAfter[name] && html.length > 0) {
+ value = html[html.length - 1];
+
+ if (value.length > 0 && value !== '\n')
+ html.push('\n');
+ }
+ },
+
+ end: function(name) {
+ var value;
+
+ /*if (indent && indentBefore[name] && html.length > 0) {
+ value = html[html.length - 1];
+
+ if (value.length > 0 && value !== '\n')
+ html.push('\n');
+ }*/
+
+ html.push('</', name, '>');
+
+ if (indent && indentAfter[name] && html.length > 0) {
+ value = html[html.length - 1];
+
+ if (value.length > 0 && value !== '\n')
+ html.push('\n');
+ }
+ },
+
+ text: function(text, raw) {
+ if (text.length > 0)
+ html[html.length] = raw ? text : encode(text);
+ },
+
+ cdata: function(text) {
+ html.push('<![CDATA[', text, ']]>');
+ },
+
+ comment: function(text) {
+ html.push('<!--', text, '-->');
+ },
+
+ pi: function(name, text) {
+ if (text)
+ html.push('<?', name, ' ', text, '?>');
+ else
+ html.push('<?', name, '?>');
+
+ if (indent)
+ html.push('\n');
+ },
+
+ doctype: function(text) {
+ html.push('<!DOCTYPE', text, '>', indent ? '\n' : '');
+ },
+
+ reset: function() {
+ html.length = 0;
+ },
+
+ getContent: function() {
+ return html.join('').replace(/\n$/, '');
+ }
+ };
+};
+
+(function(tinymce) {
+ tinymce.html.Serializer = function(settings, schema) {
+ var self = this, writer = new tinymce.html.Writer(settings);
+
+ settings = settings || {};
+ settings.validate = "validate" in settings ? settings.validate : true;
+
+ self.schema = schema = schema || new tinymce.html.Schema();
+ self.writer = writer;
+
+ self.serialize = function(node) {
+ var handlers, validate;
+
+ validate = settings.validate;
+
+ handlers = {
+ // #text
+ 3: function(node, raw) {
+ writer.text(node.value, node.raw);
+ },
+
+ // #comment
+ 8: function(node) {
+ writer.comment(node.value);
+ },
+
+ // Processing instruction
+ 7: function(node) {
+ writer.pi(node.name, node.value);
+ },
+
+ // Doctype
+ 10: function(node) {
+ writer.doctype(node.value);
+ },
+
+ // CDATA
+ 4: function(node) {
+ writer.cdata(node.value);
+ },
+
+ // Document fragment
+ 11: function(node) {
+ if ((node = node.firstChild)) {
+ do {
+ walk(node);
+ } while (node = node.next);
+ }
+ }
+ };
+
+ writer.reset();
+
+ function walk(node) {
+ var handler = handlers[node.type], name, isEmpty, attrs, attrName, attrValue, sortedAttrs, i, l, elementRule;
+
+ if (!handler) {
+ name = node.name;
+ isEmpty = node.shortEnded;
+ attrs = node.attributes;
+
+ // Sort attributes
+ if (validate && attrs && attrs.length > 1) {
+ sortedAttrs = [];
+ sortedAttrs.map = {};
+
+ elementRule = schema.getElementRule(node.name);
+ for (i = 0, l = elementRule.attributesOrder.length; i < l; i++) {
+ attrName = elementRule.attributesOrder[i];
+
+ if (attrName in attrs.map) {
+ attrValue = attrs.map[attrName];
+ sortedAttrs.map[attrName] = attrValue;
+ sortedAttrs.push({name: attrName, value: attrValue});
+ }
+ }
+
+ for (i = 0, l = attrs.length; i < l; i++) {
+ attrName = attrs[i].name;
+
+ if (!(attrName in sortedAttrs.map)) {
+ attrValue = attrs.map[attrName];
+ sortedAttrs.map[attrName] = attrValue;
+ sortedAttrs.push({name: attrName, value: attrValue});
+ }
+ }
+
+ attrs = sortedAttrs;
+ }
+
+ writer.start(node.name, attrs, isEmpty);
+
+ if (!isEmpty) {
+ if ((node = node.firstChild)) {
+ do {
+ walk(node);
+ } while (node = node.next);
+ }
+
+ writer.end(name);
+ }
+ } else
+ handler(node);
+ }
+
+ // Serialize element and treat all non elements as fragments
+ if (node.type == 1 && !settings.inner)
+ walk(node);
+ else
+ handlers[11](node);
+
+ return writer.getContent();
+ };
+ }
+})(tinymce);
+
+(function(tinymce) {
+ // Shorten names
+ var each = tinymce.each,
+ is = tinymce.is,
+ isWebKit = tinymce.isWebKit,
+ isIE = tinymce.isIE,
+ Entities = tinymce.html.Entities,
+ simpleSelectorRe = /^([a-z0-9],?)+$/i,
+ blockElementsMap = tinymce.html.Schema.blockElementsMap,
+ whiteSpaceRegExp = /^[ \t\r\n]*$/;
+
+ tinymce.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(d, s) {
+ var t = this, globalStyle, name;
+
+ t.doc = d;
+ t.win = window;
+ t.files = {};
+ t.cssFlicker = false;
+ t.counter = 0;
+ t.stdMode = !tinymce.isIE || d.documentMode >= 8;
+ t.boxModel = !tinymce.isIE || d.compatMode == "CSS1Compat" || t.stdMode;
+ t.hasOuterHTML = "outerHTML" in d.createElement("a");
+
+ t.settings = s = tinymce.extend({
+ keep_values : false,
+ hex_colors : 1
+ }, s);
+
+ t.schema = s.schema;
+ t.styles = new tinymce.html.Styles({
+ url_converter : s.url_converter,
+ url_converter_scope : s.url_converter_scope
+ }, s.schema);
+
+ // Fix IE6SP2 flicker and check it failed for pre SP2
+ if (tinymce.isIE6) {
+ try {
+ d.execCommand('BackgroundImageCache', false, true);
+ } catch (e) {
+ t.cssFlicker = true;
+ }
+ }
+
+ if (isIE && s.schema) {
+ // Add missing HTML 4/5 elements to IE
+ ('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(name) {
+ d.createElement(name);
+ });
+
+ // Create all custom elements
+ for (name in s.schema.getCustomElements()) {
+ d.createElement(name);
+ }
+ }
+
+ tinymce.addUnload(t.destroy, t);
+ },
+
+ getRoot : function() {
+ var t = this, s = t.settings;
+
+ return (s && t.get(s.root_element)) || t.doc.body;
+ },
+
+ getViewPort : function(w) {
+ var d, b;
+
+ w = !w ? this.win : w;
+ d = w.document;
+ b = this.boxModel ? d.documentElement : d.body;
+
+ // Returns viewport size excluding scrollbars
+ return {
+ x : w.pageXOffset || b.scrollLeft,
+ y : w.pageYOffset || b.scrollTop,
+ w : w.innerWidth || b.clientWidth,
+ h : w.innerHeight || b.clientHeight
+ };
+ },
+
+ getRect : function(e) {
+ var p, t = this, sr;
+
+ e = t.get(e);
+ p = t.getPos(e);
+ sr = t.getSize(e);
+
+ return {
+ x : p.x,
+ y : p.y,
+ w : sr.w,
+ h : sr.h
+ };
+ },
+
+ getSize : function(e) {
+ var t = this, w, h;
+
+ e = t.get(e);
+ w = t.getStyle(e, 'width');
+ h = t.getStyle(e, 'height');
+
+ // Non pixel value, then force offset/clientWidth
+ if (w.indexOf('px') === -1)
+ w = 0;
+
+ // Non pixel value, then force offset/clientWidth
+ if (h.indexOf('px') === -1)
+ h = 0;
+
+ return {
+ w : parseInt(w) || e.offsetWidth || e.clientWidth,
+ h : parseInt(h) || e.offsetHeight || e.clientHeight
+ };
+ },
+
+ getParent : function(n, f, r) {
+ return this.getParents(n, f, r, false);
+ },
+
+ getParents : function(n, f, r, c) {
+ var t = this, na, se = t.settings, o = [];
+
+ n = t.get(n);
+ c = c === undefined;
+
+ if (se.strict_root)
+ r = r || t.getRoot();
+
+ // Wrap node name as func
+ if (is(f, 'string')) {
+ na = f;
+
+ if (f === '*') {
+ f = function(n) {return n.nodeType == 1;};
+ } else {
+ f = function(n) {
+ return t.is(n, na);
+ };
+ }
+ }
+
+ while (n) {
+ if (n == r || !n.nodeType || n.nodeType === 9)
+ break;
+
+ if (!f || f(n)) {
+ if (c)
+ o.push(n);
+ else
+ return n;
+ }
+
+ n = n.parentNode;
+ }
+
+ return c ? o : null;
+ },
+
+ get : function(e) {
+ var n;
+
+ if (e && this.doc && typeof(e) == 'string') {
+ n = e;
+ e = this.doc.getElementById(e);
+
+ // IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick
+ if (e && e.id !== n)
+ return this.doc.getElementsByName(n)[1];
+ }
+
+ return e;
+ },
+
+ getNext : function(node, selector) {
+ return this._findSib(node, selector, 'nextSibling');
+ },
+
+ getPrev : function(node, selector) {
+ return this._findSib(node, selector, 'previousSibling');
+ },
+
+
+ select : function(pa, s) {
+ var t = this;
+
+ return tinymce.dom.Sizzle(pa, t.get(s) || t.get(t.settings.root_element) || t.doc, []);
+ },
+
+ is : function(n, selector) {
+ var i;
+
+ // If it isn't an array then try to do some simple selectors instead of Sizzle for to boost performance
+ if (n.length === undefined) {
+ // Simple all selector
+ if (selector === '*')
+ return n.nodeType == 1;
+
+ // Simple selector just elements
+ if (simpleSelectorRe.test(selector)) {
+ selector = selector.toLowerCase().split(/,/);
+ n = n.nodeName.toLowerCase();
+
+ for (i = selector.length - 1; i >= 0; i--) {
+ if (selector[i] == n)
+ return true;
+ }
+
+ return false;
+ }
+ }
+
+ return tinymce.dom.Sizzle.matches(selector, n.nodeType ? [n] : n).length > 0;
+ },
+
+
+ add : function(p, n, a, h, c) {
+ var t = this;
+
+ return this.run(p, function(p) {
+ var e, k;
+
+ e = is(n, 'string') ? t.doc.createElement(n) : n;
+ t.setAttribs(e, a);
+
+ if (h) {
+ if (h.nodeType)
+ e.appendChild(h);
+ else
+ t.setHTML(e, h);
+ }
+
+ return !c ? p.appendChild(e) : e;
+ });
+ },
+
+ create : function(n, a, h) {
+ return this.add(this.doc.createElement(n), n, a, h, 1);
+ },
+
+ createHTML : function(n, a, h) {
+ var o = '', t = this, k;
+
+ o += '<' + n;
+
+ for (k in a) {
+ if (a.hasOwnProperty(k))
+ o += ' ' + k + '="' + t.encode(a[k]) + '"';
+ }
+
+ // A call to tinymce.is doesn't work for some odd reason on IE9 possible bug inside their JS runtime
+ if (typeof(h) != "undefined")
+ return o + '>' + h + '</' + n + '>';
+
+ return o + ' />';
+ },
+
+ remove : function(node, keep_children) {
+ return this.run(node, function(node) {
+ var child, parent = node.parentNode;
+
+ if (!parent)
+ return null;
+
+ if (keep_children) {
+ while (child = node.firstChild) {
+ // IE 8 will crash if you don't remove completely empty text nodes
+ if (!tinymce.isIE || child.nodeType !== 3 || child.nodeValue)
+ parent.insertBefore(child, node);
+ else
+ node.removeChild(child);
+ }
+ }
+
+ return parent.removeChild(node);
+ });
+ },
+
+ setStyle : function(n, na, v) {
+ var t = this;
+
+ return t.run(n, function(e) {
+ var s, i;
+
+ s = e.style;
+
+ // Camelcase it, if needed
+ na = na.replace(/-(\D)/g, function(a, b){
+ return b.toUpperCase();
+ });
+
+ // Default px suffix on these
+ if (t.pixelStyles.test(na) && (tinymce.is(v, 'number') || /^[\-0-9\.]+$/.test(v)))
+ v += 'px';
+
+ switch (na) {
+ case 'opacity':
+ // IE specific opacity
+ if (isIE) {
+ s.filter = v === '' ? '' : "alpha(opacity=" + (v * 100) + ")";
+
+ if (!n.currentStyle || !n.currentStyle.hasLayout)
+ s.display = 'inline-block';
+ }
+
+ // Fix for older browsers
+ s[na] = s['-moz-opacity'] = s['-khtml-opacity'] = v || '';
+ break;
+
+ case 'float':
+ isIE ? s.styleFloat = v : s.cssFloat = v;
+ break;
+
+ default:
+ s[na] = v || '';
+ }
+
+ // Force update of the style data
+ if (t.settings.update_styles)
+ t.setAttrib(e, 'data-mce-style');
+ });
+ },
+
+ getStyle : function(n, na, c) {
+ n = this.get(n);
+
+ if (!n)
+ return;
+
+ // Gecko
+ if (this.doc.defaultView && c) {
+ // Remove camelcase
+ na = na.replace(/[A-Z]/g, function(a){
+ return '-' + a;
+ });
+
+ try {
+ return this.doc.defaultView.getComputedStyle(n, null).getPropertyValue(na);
+ } catch (ex) {
+ // Old safari might fail
+ return null;
+ }
+ }
+
+ // Camelcase it, if needed
+ na = na.replace(/-(\D)/g, function(a, b){
+ return b.toUpperCase();
+ });
+
+ if (na == 'float')
+ na = isIE ? 'styleFloat' : 'cssFloat';
+
+ // IE & Opera
+ if (n.currentStyle && c)
+ return n.currentStyle[na];
+
+ return n.style ? n.style[na] : undefined;
+ },
+
+ setStyles : function(e, o) {
+ var t = this, s = t.settings, ol;
+
+ ol = s.update_styles;
+ s.update_styles = 0;
+
+ each(o, function(v, n) {
+ t.setStyle(e, n, v);
+ });
+
+ // Update style info
+ s.update_styles = ol;
+ if (s.update_styles)
+ t.setAttrib(e, s.cssText);
+ },
+
+ removeAllAttribs: function(e) {
+ return this.run(e, function(e) {
+ var i, attrs = e.attributes;
+ for (i = attrs.length - 1; i >= 0; i--) {
+ e.removeAttributeNode(attrs.item(i));
+ }
+ });
+ },
+
+ setAttrib : function(e, n, v) {
+ var t = this;
+
+ // Whats the point
+ if (!e || !n)
+ return;
+
+ // Strict XML mode
+ if (t.settings.strict)
+ n = n.toLowerCase();
+
+ return this.run(e, function(e) {
+ var s = t.settings;
+ if (v !== null) {
+ switch (n) {
+ case "style":
+ if (!is(v, 'string')) {
+ each(v, function(v, n) {
+ t.setStyle(e, n, v);
+ });
+
+ return;
+ }
+
+ // No mce_style for elements with these since they might get resized by the user
+ if (s.keep_values) {
+ if (v && !t._isRes(v))
+ e.setAttribute('data-mce-style', v, 2);
+ else
+ e.removeAttribute('data-mce-style', 2);
+ }
+
+ e.style.cssText = v;
+ break;
+
+ case "class":
+ e.className = v || ''; // Fix IE null bug
+ break;
+
+ case "src":
+ case "href":
+ if (s.keep_values) {
+ if (s.url_converter)
+ v = s.url_converter.call(s.url_converter_scope || t, v, n, e);
+
+ t.setAttrib(e, 'data-mce-' + n, v, 2);
+ }
+
+ break;
+
+ case "shape":
+ e.setAttribute('data-mce-style', v);
+ break;
+ }
+ }
+ if (is(v) && v !== null && v.length !== 0)
+ e.setAttribute(n, '' + v, 2);
+ else
+ e.removeAttribute(n, 2);
+ });
+ },
+
+ setAttribs : function(e, o) {
+ var t = this;
+
+ return this.run(e, function(e) {
+ each(o, function(v, n) {
+ t.setAttrib(e, n, v);
+ });
+ });
+ },
+
+ getAttrib : function(e, n, dv) {
+ var v, t = this, undef;
+
+ e = t.get(e);
+
+ if (!e || e.nodeType !== 1)
+ return dv === undef ? false : dv;
+
+ if (!is(dv))
+ dv = '';
+
+ // Try the mce variant for these
+ if (/^(src|href|style|coords|shape)$/.test(n)) {
+ v = e.getAttribute("data-mce-" + n);
+
+ if (v)
+ return v;
+ }
+
+ if (isIE && t.props[n]) {
+ v = e[t.props[n]];
+ v = v && v.nodeValue ? v.nodeValue : v;
+ }
+
+ if (!v)
+ v = e.getAttribute(n, 2);
+
+ // Check boolean attribs
+ if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(n)) {
+ if (e[t.props[n]] === true && v === '')
+ return n;
+
+ return v ? n : '';
+ }
+
+ // Inner input elements will override attributes on form elements
+ if (e.nodeName === "FORM" && e.getAttributeNode(n))
+ return e.getAttributeNode(n).nodeValue;
+
+ if (n === 'style') {
+ v = v || e.style.cssText;
+
+ if (v) {
+ v = t.serializeStyle(t.parseStyle(v), e.nodeName);
+
+ if (t.settings.keep_values && !t._isRes(v))
+ e.setAttribute('data-mce-style', v);
+ }
+ }
+
+ // Remove Apple and WebKit stuff
+ if (isWebKit && n === "class" && v)
+ v = v.replace(/(apple|webkit)\-[a-z\-]+/gi, '');
+
+ // Handle IE issues
+ if (isIE) {
+ switch (n) {
+ case 'rowspan':
+ case 'colspan':
+ // IE returns 1 as default value
+ if (v === 1)
+ v = '';
+
+ break;
+
+ case 'size':
+ // IE returns +0 as default value for size
+ if (v === '+0' || v === 20 || v === 0)
+ v = '';
+
+ break;
+
+ case 'width':
+ case 'height':
+ case 'vspace':
+ case 'checked':
+ case 'disabled':
+ case 'readonly':
+ if (v === 0)
+ v = '';
+
+ break;
+
+ case 'hspace':
+ // IE returns -1 as default value
+ if (v === -1)
+ v = '';
+
+ break;
+
+ case 'maxlength':
+ case 'tabindex':
+ // IE returns default value
+ if (v === 32768 || v === 2147483647 || v === '32768')
+ v = '';
+
+ break;
+
+ case 'multiple':
+ case 'compact':
+ case 'noshade':
+ case 'nowrap':
+ if (v === 65535)
+ return n;
+
+ return dv;
+
+ case 'shape':
+ v = v.toLowerCase();
+ break;
+
+ default:
+ // IE has odd anonymous function for event attributes
+ if (n.indexOf('on') === 0 && v)
+ v = tinymce._replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, '$1', '' + v);
+ }
+ }
+
+ return (v !== undef && v !== null && v !== '') ? '' + v : dv;
+ },
+
+ getPos : function(n, ro) {
+ var t = this, x = 0, y = 0, e, d = t.doc, r;
+
+ n = t.get(n);
+ ro = ro || d.body;
+
+ if (n) {
+ // Use getBoundingClientRect if it exists since it's faster than looping offset nodes
+ if (n.getBoundingClientRect) {
+ n = n.getBoundingClientRect();
+ e = t.boxModel ? d.documentElement : d.body;
+
+ // Add scroll offsets from documentElement or body since IE with the wrong box model will use d.body and so do WebKit
+ // Also remove the body/documentelement clientTop/clientLeft on IE 6, 7 since they offset the position
+ x = n.left + (d.documentElement.scrollLeft || d.body.scrollLeft) - e.clientTop;
+ y = n.top + (d.documentElement.scrollTop || d.body.scrollTop) - e.clientLeft;
+
+ return {x : x, y : y};
+ }
+
+ r = n;
+ while (r && r != ro && r.nodeType) {
+ x += r.offsetLeft || 0;
+ y += r.offsetTop || 0;
+ r = r.offsetParent;
+ }
+
+ r = n.parentNode;
+ while (r && r != ro && r.nodeType) {
+ x -= r.scrollLeft || 0;
+ y -= r.scrollTop || 0;
+ r = r.parentNode;
+ }
+ }
+
+ return {x : x, y : y};
+ },
+
+ parseStyle : function(st) {
+ return this.styles.parse(st);
+ },
+
+ serializeStyle : function(o, name) {
+ return this.styles.serialize(o, name);
+ },
+
+ loadCSS : function(u) {
+ var t = this, d = t.doc, head;
+
+ if (!u)
+ u = '';
+
+ head = t.select('head')[0];
+
+ each(u.split(','), function(u) {
+ var link;
+
+ if (t.files[u])
+ return;
+
+ t.files[u] = true;
+ link = t.create('link', {rel : 'stylesheet', href : tinymce._addVer(u)});
+
+ // IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug
+ // This fix seems to resolve that issue by realcing the document ones a stylesheet finishes loading
+ // It's ugly but it seems to work fine.
+ if (isIE && d.documentMode && d.recalc) {
+ link.onload = function() {
+ if (d.recalc)
+ d.recalc();
+
+ link.onload = null;
+ };
+ }
+
+ head.appendChild(link);
+ });
+ },
+
+ addClass : function(e, c) {
+ return this.run(e, function(e) {
+ var o;
+
+ if (!c)
+ return 0;
+
+ if (this.hasClass(e, c))
+ return e.className;
+
+ o = this.removeClass(e, c);
+
+ return e.className = (o != '' ? (o + ' ') : '') + c;
+ });
+ },
+
+ removeClass : function(e, c) {
+ var t = this, re;
+
+ return t.run(e, function(e) {
+ var v;
+
+ if (t.hasClass(e, c)) {
+ if (!re)
+ re = new RegExp("(^|\\s+)" + c + "(\\s+|$)", "g");
+
+ v = e.className.replace(re, ' ');
+ v = tinymce.trim(v != ' ' ? v : '');
+
+ e.className = v;
+
+ // Empty class attr
+ if (!v) {
+ e.removeAttribute('class');
+ e.removeAttribute('className');
+ }
+
+ return v;
+ }
+
+ return e.className;
+ });
+ },
+
+ hasClass : function(n, c) {
+ n = this.get(n);
+
+ if (!n || !c)
+ return false;
+
+ return (' ' + n.className + ' ').indexOf(' ' + c + ' ') !== -1;
+ },
+
+ show : function(e) {
+ return this.setStyle(e, 'display', 'block');
+ },
+
+ hide : function(e) {
+ return this.setStyle(e, 'display', 'none');
+ },
+
+ isHidden : function(e) {
+ e = this.get(e);
+
+ return !e || e.style.display == 'none' || this.getStyle(e, 'display') == 'none';
+ },
+
+ uniqueId : function(p) {
+ return (!p ? 'mce_' : p) + (this.counter++);
+ },
+
+ setHTML : function(element, html) {
+ var self = this;
+
+ return self.run(element, function(element) {
+ if (isIE) {
+ // Remove all child nodes, IE keeps empty text nodes in DOM
+ while (element.firstChild)
+ element.removeChild(element.firstChild);
+
+ try {
+ // IE will remove comments from the beginning
+ // unless you padd the contents with something
+ element.innerHTML = '<br />' + html;
+ element.removeChild(element.firstChild);
+ } catch (ex) {
+ // 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
+ // This seems to fix this problem
+
+ // Create new div with HTML contents and a BR infront to keep comments
+ element = self.create('div');
+ element.innerHTML = '<br />' + html;
+
+ // Add all children from div to target
+ each (element.childNodes, function(node, i) {
+ // Skip br element
+ if (i)
+ element.appendChild(node);
+ });
+ }
+ } else
+ element.innerHTML = html;
+
+ return html;
+ });
+ },
+
+ getOuterHTML : function(elm) {
+ var doc, self = this;
+
+ elm = self.get(elm);
+
+ if (!elm)
+ return null;
+
+ if (elm.nodeType === 1 && self.hasOuterHTML)
+ return elm.outerHTML;
+
+ doc = (elm.ownerDocument || self.doc).createElement("body");
+ doc.appendChild(elm.cloneNode(true));
+
+ return doc.innerHTML;
+ },
+
+ setOuterHTML : function(e, h, d) {
+ var t = this;
+
+ function setHTML(e, h, d) {
+ var n, tp;
+
+ tp = d.createElement("body");
+ tp.innerHTML = h;
+
+ n = tp.lastChild;
+ while (n) {
+ t.insertAfter(n.cloneNode(true), e);
+ n = n.previousSibling;
+ }
+
+ t.remove(e);
+ };
+
+ return this.run(e, function(e) {
+ e = t.get(e);
+
+ // Only set HTML on elements
+ if (e.nodeType == 1) {
+ d = d || e.ownerDocument || t.doc;
+
+ if (isIE) {
+ try {
+ // Try outerHTML for IE it sometimes produces an unknown runtime error
+ if (isIE && e.nodeType == 1)
+ e.outerHTML = h;
+ else
+ setHTML(e, h, d);
+ } catch (ex) {
+ // Fix for unknown runtime error
+ setHTML(e, h, d);
+ }
+ } else
+ setHTML(e, h, d);
+ }
+ });
+ },
+
+ decode : Entities.decode,
+
+ encode : Entities.encodeAllRaw,
+
+ insertAfter : function(node, reference_node) {
+ reference_node = this.get(reference_node);
+
+ return this.run(node, function(node) {
+ var parent, nextSibling;
+
+ parent = reference_node.parentNode;
+ nextSibling = reference_node.nextSibling;
+
+ if (nextSibling)
+ parent.insertBefore(node, nextSibling);
+ else
+ parent.appendChild(node);
+
+ return node;
+ });
+ },
+
+ isBlock : function(node) {
+ var type = node.nodeType;
+
+ // If it's a node then check the type and use the nodeName
+ if (type)
+ return !!(type === 1 && blockElementsMap[node.nodeName]);
+
+ return !!blockElementsMap[node];
+ },
+
+ replace : function(n, o, k) {
+ var t = this;
+
+ if (is(o, 'array'))
+ n = n.cloneNode(true);
+
+ return t.run(o, function(o) {
+ if (k) {
+ each(tinymce.grep(o.childNodes), function(c) {
+ n.appendChild(c);
+ });
+ }
+
+ return o.parentNode.replaceChild(n, o);
+ });
+ },
+
+ rename : function(elm, name) {
+ var t = this, newElm;
+
+ if (elm.nodeName != name.toUpperCase()) {
+ // Rename block element
+ newElm = t.create(name);
+
+ // Copy attribs to new block
+ each(t.getAttribs(elm), function(attr_node) {
+ t.setAttrib(newElm, attr_node.nodeName, t.getAttrib(elm, attr_node.nodeName));
+ });
+
+ // Replace block
+ t.replace(newElm, elm, 1);
+ }
+
+ return newElm || elm;
+ },
+
+ findCommonAncestor : function(a, b) {
+ var ps = a, pe;
+
+ while (ps) {
+ pe = b;
+
+ while (pe && ps != pe)
+ pe = pe.parentNode;
+
+ if (ps == pe)
+ break;
+
+ ps = ps.parentNode;
+ }
+
+ if (!ps && a.ownerDocument)
+ return a.ownerDocument.documentElement;
+
+ return ps;
+ },
+
+ toHex : function(s) {
+ var c = /^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);
+
+ function hex(s) {
+ s = parseInt(s).toString(16);
+
+ return s.length > 1 ? s : '0' + s; // 0 -> 00
+ };
+
+ if (c) {
+ s = '#' + hex(c[1]) + hex(c[2]) + hex(c[3]);
+
+ return s;
+ }
+
+ return s;
+ },
+
+ getClasses : function() {
+ var t = this, cl = [], i, lo = {}, f = t.settings.class_filter, ov;
+
+ if (t.classes)
+ return t.classes;
+
+ function addClasses(s) {
+ // IE style imports
+ each(s.imports, function(r) {
+ addClasses(r);
+ });
+
+ each(s.cssRules || s.rules, function(r) {
+ // Real type or fake it on IE
+ switch (r.type || 1) {
+ // Rule
+ case 1:
+ if (r.selectorText) {
+ each(r.selectorText.split(','), function(v) {
+ v = v.replace(/^\s*|\s*$|^\s\./g, "");
+
+ // Is internal or it doesn't contain a class
+ if (/\.mce/.test(v) || !/\.[\w\-]+$/.test(v))
+ return;
+
+ // Remove everything but class name
+ ov = v;
+ v = tinymce._replace(/.*\.([a-z0-9_\-]+).*/i, '$1', v);
+
+ // Filter classes
+ if (f && !(v = f(v, ov)))
+ return;
+
+ if (!lo[v]) {
+ cl.push({'class' : v});
+ lo[v] = 1;
+ }
+ });
+ }
+ break;
+
+ // Import
+ case 3:
+ addClasses(r.styleSheet);
+ break;
+ }
+ });
+ };
+
+ try {
+ each(t.doc.styleSheets, addClasses);
+ } catch (ex) {
+ // Ignore
+ }
+
+ if (cl.length > 0)
+ t.classes = cl;
+
+ return cl;
+ },
+
+ run : function(e, f, s) {
+ var t = this, o;
+
+ if (t.doc && typeof(e) === 'string')
+ e = t.get(e);
+
+ if (!e)
+ return false;
+
+ s = s || this;
+ if (!e.nodeType && (e.length || e.length === 0)) {
+ o = [];
+
+ each(e, function(e, i) {
+ if (e) {
+ if (typeof(e) == 'string')
+ e = t.doc.getElementById(e);
+
+ o.push(f.call(s, e, i));
+ }
+ });
+
+ return o;
+ }
+
+ return f.call(s, e);
+ },
+
+ getAttribs : function(n) {
+ var o;
+
+ n = this.get(n);
+
+ if (!n)
+ return [];
+
+ if (isIE) {
+ o = [];
+
+ // Object will throw exception in IE
+ if (n.nodeName == 'OBJECT')
+ return n.attributes;
+
+ // IE doesn't keep the selected attribute if you clone option elements
+ if (n.nodeName === 'OPTION' && this.getAttrib(n, 'selected'))
+ o.push({specified : 1, nodeName : 'selected'});
+
+ // It's crazy that this is faster in IE but it's because it returns all attributes all the time
+ n.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi, '').replace(/[\w:\-]+/gi, function(a) {
+ o.push({specified : 1, nodeName : a});
+ });
+
+ return o;
+ }
+
+ return n.attributes;
+ },
+
+ isEmpty : function(node, elements) {
+ var self = this, i, attributes, type, walker, name, parentNode;
+
+ node = node.firstChild;
+ if (node) {
+ walker = new tinymce.dom.TreeWalker(node);
+ elements = elements || self.schema ? self.schema.getNonEmptyElements() : null;
+
+ do {
+ type = node.nodeType;
+
+ if (type === 1) {
+ // Ignore bogus elements
+ if (node.getAttribute('data-mce-bogus'))
+ continue;
+
+ // Keep empty elements like <img />
+ name = node.nodeName.toLowerCase();
+ if (elements && elements[name]) {
+ // Ignore single BR elements in blocks like <p><br /></p>
+ parentNode = node.parentNode;
+ if (name === 'br' && self.isBlock(parentNode) && parentNode.firstChild === node && parentNode.lastChild === node) {
+ continue;
+ }
+
+ return false;
+ }
+
+ // Keep elements with data-bookmark attributes or name attribute like <a name="1"></a>
+ attributes = self.getAttribs(node);
+ i = node.attributes.length;
+ while (i--) {
+ name = node.attributes[i].nodeName;
+ if (name === "name" || name === 'data-mce-bookmark')
+ return false;
+ }
+ }
+
+ // Keep non whitespace text nodes
+ if ((type === 3 && !whiteSpaceRegExp.test(node.nodeValue)))
+ return false;
+ } while (node = walker.next());
+ }
+
+ return true;
+ },
+
+ destroy : function(s) {
+ var t = this;
+
+ if (t.events)
+ t.events.destroy();
+
+ t.win = t.doc = t.root = t.events = null;
+
+ // Manual destroy then remove unload handler
+ if (!s)
+ tinymce.removeUnload(t.destroy);
+ },
+
+ createRng : function() {
+ var d = this.doc;
+
+ return d.createRange ? d.createRange() : new tinymce.dom.Range(this);
+ },
+
+ nodeIndex : function(node, normalized) {
+ var idx = 0, lastNodeType, lastNode, nodeType;
+
+ if (node) {
+ for (lastNodeType = node.nodeType, node = node.previousSibling, lastNode = node; node; node = node.previousSibling) {
+ nodeType = node.nodeType;
+
+ // Normalize text nodes
+ if (normalized && nodeType == 3) {
+ if (nodeType == lastNodeType || !node.nodeValue.length)
+ continue;
+ }
+ idx++;
+ lastNodeType = nodeType;
+ }
+ }
+
+ return idx;
+ },
+
+ split : function(pe, e, re) {
+ var t = this, r = t.createRng(), bef, aft, pa;
+
+ // W3C valid browsers tend to leave empty nodes to the left/right side of the contents, this makes sense
+ // but we don't want that in our code since it serves no purpose for the end user
+ // For example if this is chopped:
+ // <p>text 1<span><b>CHOP</b></span>text 2</p>
+ // would produce:
+ // <p>text 1<span></span></p><b>CHOP</b><p><span></span>text 2</p>
+ // this function will then trim of empty edges and produce:
+ // <p>text 1</p><b>CHOP</b><p>text 2</p>
+ function trim(node) {
+ var i, children = node.childNodes, type = node.nodeType;
+
+ if (type == 1 && node.getAttribute('data-mce-type') == 'bookmark')
+ return;
+
+ for (i = children.length - 1; i >= 0; i--)
+ trim(children[i]);
+
+ if (type != 9) {
+ // Keep non whitespace text nodes
+ if (type == 3 && node.nodeValue.length > 0) {
+ // If parent element isn't a block or there isn't any useful contents for example "<p> </p>"
+ if (!t.isBlock(node.parentNode) || tinymce.trim(node.nodeValue).length > 0)
+ return;
+ } else if (type == 1) {
+ // If the only child is a bookmark then move it up
+ children = node.childNodes;
+ if (children.length == 1 && children[0] && children[0].nodeType == 1 && children[0].getAttribute('data-mce-type') == 'bookmark')
+ node.parentNode.insertBefore(children[0], node);
+
+ // Keep non empty elements or img, hr etc
+ if (children.length || /^(br|hr|input|img)$/i.test(node.nodeName))
+ return;
+ }
+
+ t.remove(node);
+ }
+
+ return node;
+ };
+
+ if (pe && e) {
+ // Get before chunk
+ r.setStart(pe.parentNode, t.nodeIndex(pe));
+ r.setEnd(e.parentNode, t.nodeIndex(e));
+ bef = r.extractContents();
+
+ // Get after chunk
+ r = t.createRng();
+ r.setStart(e.parentNode, t.nodeIndex(e) + 1);
+ r.setEnd(pe.parentNode, t.nodeIndex(pe) + 1);
+ aft = r.extractContents();
+
+ // Insert before chunk
+ pa = pe.parentNode;
+ pa.insertBefore(trim(bef), pe);
+
+ // Insert middle chunk
+ if (re)
+ pa.replaceChild(re, e);
+ else
+ pa.insertBefore(e, pe);
+
+ // Insert after chunk
+ pa.insertBefore(trim(aft), pe);
+ t.remove(pe);
+
+ return re || e;
+ }
+ },
+
+ bind : function(target, name, func, scope) {
+ var t = this;
+
+ if (!t.events)
+ t.events = new tinymce.dom.EventUtils();
+
+ return t.events.add(target, name, func, scope || this);
+ },
+
+ unbind : function(target, name, func) {
+ var t = this;
+
+ if (!t.events)
+ t.events = new tinymce.dom.EventUtils();
+
+ return t.events.remove(target, name, func);
+ },
+
+
+ _findSib : function(node, selector, name) {
+ var t = this, f = selector;
+
+ if (node) {
+ // If expression make a function of it using is
+ if (is(f, 'string')) {
+ f = function(node) {
+ return t.is(node, selector);
+ };
+ }
+
+ // Loop all siblings
+ for (node = node[name]; node; node = node[name]) {
+ if (f(node))
+ return node;
+ }
+ }
+
+ return null;
+ },
+
+ _isRes : function(c) {
+ // Is live resizble element
+ return /^(top|left|bottom|right|width|height)/i.test(c) || /;\s*(top|left|bottom|right|width|height)/i.test(c);
+ }
+
+ /*
+ walk : function(n, f, s) {
+ var d = this.doc, w;
+
+ if (d.createTreeWalker) {
+ w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);
+
+ while ((n = w.nextNode()) != null)
+ f.call(s || this, n);
+ } else
+ tinymce.walk(n, f, 'childNodes', s);
+ }
+ */
+
+ /*
+ toRGB : function(s) {
+ var c = /^\s*?#([0-9A-F]{2})([0-9A-F]{1,2})([0-9A-F]{2})?\s*?$/.exec(s);
+
+ if (c) {
+ // #FFF -> #FFFFFF
+ if (!is(c[3]))
+ c[3] = c[2] = c[1];
+
+ return "rgb(" + parseInt(c[1], 16) + "," + parseInt(c[2], 16) + "," + parseInt(c[3], 16) + ")";
+ }
+
+ return s;
+ }
+ */
+ });
+
+ tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0});
+})(tinymce);
+
+(function(ns) {
+ // Range constructor
+ function Range(dom) {
+ var t = this,
+ doc = dom.doc,
+ EXTRACT = 0,
+ CLONE = 1,
+ DELETE = 2,
+ TRUE = true,
+ FALSE = false,
+ START_OFFSET = 'startOffset',
+ START_CONTAINER = 'startContainer',
+ END_CONTAINER = 'endContainer',
+ END_OFFSET = 'endOffset',
+ extend = tinymce.extend,
+ nodeIndex = dom.nodeIndex;
+
+ extend(t, {
+ // Inital states
+ startContainer : doc,
+ startOffset : 0,
+ endContainer : doc,
+ endOffset : 0,
+ collapsed : TRUE,
+ commonAncestorContainer : doc,
+
+ // Range constants
+ START_TO_START : 0,
+ START_TO_END : 1,
+ END_TO_END : 2,
+ END_TO_START : 3,
+
+ // Public methods
+ setStart : setStart,
+ setEnd : setEnd,
+ setStartBefore : setStartBefore,
+ setStartAfter : setStartAfter,
+ setEndBefore : setEndBefore,
+ setEndAfter : setEndAfter,
+ collapse : collapse,
+ selectNode : selectNode,
+ selectNodeContents : selectNodeContents,
+ compareBoundaryPoints : compareBoundaryPoints,
+ deleteContents : deleteContents,
+ extractContents : extractContents,
+ cloneContents : cloneContents,
+ insertNode : insertNode,
+ surroundContents : surroundContents,
+ cloneRange : cloneRange
+ });
+
+ function setStart(n, o) {
+ _setEndPoint(TRUE, n, o);
+ };
+
+ function setEnd(n, o) {
+ _setEndPoint(FALSE, n, o);
+ };
+
+ function setStartBefore(n) {
+ setStart(n.parentNode, nodeIndex(n));
+ };
+
+ function setStartAfter(n) {
+ setStart(n.parentNode, nodeIndex(n) + 1);
+ };
+
+ function setEndBefore(n) {
+ setEnd(n.parentNode, nodeIndex(n));
+ };
+
+ function setEndAfter(n) {
+ setEnd(n.parentNode, nodeIndex(n) + 1);
+ };
+
+ function collapse(ts) {
+ if (ts) {
+ t[END_CONTAINER] = t[START_CONTAINER];
+ t[END_OFFSET] = t[START_OFFSET];
+ } else {
+ t[START_CONTAINER] = t[END_CONTAINER];
+ t[START_OFFSET] = t[END_OFFSET];
+ }
+
+ t.collapsed = TRUE;
+ };
+
+ function selectNode(n) {
+ setStartBefore(n);
+ setEndAfter(n);
+ };
+
+ function selectNodeContents(n) {
+ setStart(n, 0);
+ setEnd(n, n.nodeType === 1 ? n.childNodes.length : n.nodeValue.length);
+ };
+
+ function compareBoundaryPoints(h, r) {
+ var sc = t[START_CONTAINER], so = t[START_OFFSET], ec = t[END_CONTAINER], eo = t[END_OFFSET],
+ rsc = r.startContainer, rso = r.startOffset, rec = r.endContainer, reo = r.endOffset;
+
+ // Check START_TO_START
+ if (h === 0)
+ return _compareBoundaryPoints(sc, so, rsc, rso);
+
+ // Check START_TO_END
+ if (h === 1)
+ return _compareBoundaryPoints(ec, eo, rsc, rso);
+
+ // Check END_TO_END
+ if (h === 2)
+ return _compareBoundaryPoints(ec, eo, rec, reo);
+
+ // Check END_TO_START
+ if (h === 3)
+ return _compareBoundaryPoints(sc, so, rec, reo);
+ };
+
+ function deleteContents() {
+ _traverse(DELETE);
+ };
+
+ function extractContents() {
+ return _traverse(EXTRACT);
+ };
+
+ function cloneContents() {
+ return _traverse(CLONE);
+ };
+
+ function insertNode(n) {
+ var startContainer = this[START_CONTAINER],
+ startOffset = this[START_OFFSET], nn, o;
+
+ // Node is TEXT_NODE or CDATA
+ if ((startContainer.nodeType === 3 || startContainer.nodeType === 4) && startContainer.nodeValue) {
+ if (!startOffset) {
+ // At the start of text
+ startContainer.parentNode.insertBefore(n, startContainer);
+ } else if (startOffset >= startContainer.nodeValue.length) {
+ // At the end of text
+ dom.insertAfter(n, startContainer);
+ } else {
+ // Middle, need to split
+ nn = startContainer.splitText(startOffset);
+ startContainer.parentNode.insertBefore(n, nn);
+ }
+ } else {
+ // Insert element node
+ if (startContainer.childNodes.length > 0)
+ o = startContainer.childNodes[startOffset];
+
+ if (o)
+ startContainer.insertBefore(n, o);
+ else
+ startContainer.appendChild(n);
+ }
+ };
+
+ function surroundContents(n) {
+ var f = t.extractContents();
+
+ t.insertNode(n);
+ n.appendChild(f);
+ t.selectNode(n);
+ };
+
+ function cloneRange() {
+ return extend(new Range(dom), {
+ startContainer : t[START_CONTAINER],
+ startOffset : t[START_OFFSET],
+ endContainer : t[END_CONTAINER],
+ endOffset : t[END_OFFSET],
+ collapsed : t.collapsed,
+ commonAncestorContainer : t.commonAncestorContainer
+ });
+ };
+
+ // Private methods
+
+ function _getSelectedNode(container, offset) {
+ var child;
+
+ if (container.nodeType == 3 /* TEXT_NODE */)
+ return container;
+
+ if (offset < 0)
+ return container;
+
+ child = container.firstChild;
+ while (child && offset > 0) {
+ --offset;
+ child = child.nextSibling;
+ }
+
+ if (child)
+ return child;
+
+ return container;
+ };
+
+ function _isCollapsed() {
+ return (t[START_CONTAINER] == t[END_CONTAINER] && t[START_OFFSET] == t[END_OFFSET]);
+ };
+
+ function _compareBoundaryPoints(containerA, offsetA, containerB, offsetB) {
+ var c, offsetC, n, cmnRoot, childA, childB;
+
+ // In the first case the boundary-points have the same container. A is before B
+ // if its offset is less than the offset of B, A is equal to B if its offset is
+ // equal to the offset of B, and A is after B if its offset is greater than the
+ // offset of B.
+ if (containerA == containerB) {
+ if (offsetA == offsetB)
+ return 0; // equal
+
+ if (offsetA < offsetB)
+ return -1; // before
+
+ return 1; // after
+ }
+
+ // In the second case a child node C of the container of A is an ancestor
+ // container of B. In this case, A is before B if the offset of A is less than or
+ // equal to the index of the child node C and A is after B otherwise.
+ c = containerB;
+ while (c && c.parentNode != containerA)
+ c = c.parentNode;
+
+ if (c) {
+ offsetC = 0;
+ n = containerA.firstChild;
+
+ while (n != c && offsetC < offsetA) {
+ offsetC++;
+ n = n.nextSibling;
+ }
+
+ if (offsetA <= offsetC)
+ return -1; // before
+
+ return 1; // after
+ }
+
+ // In the third case a child node C of the container of B is an ancestor container
+ // of A. In this case, A is before B if the index of the child node C is less than
+ // the offset of B and A is after B otherwise.
+ c = containerA;
+ while (c && c.parentNode != containerB) {
+ c = c.parentNode;
+ }
+
+ if (c) {
+ offsetC = 0;
+ n = containerB.firstChild;
+
+ while (n != c && offsetC < offsetB) {
+ offsetC++;
+ n = n.nextSibling;
+ }
+
+ if (offsetC < offsetB)
+ return -1; // before
+
+ return 1; // after
+ }
+
+ // In the fourth case, none of three other cases hold: the containers of A and B
+ // are siblings or descendants of sibling nodes. In this case, A is before B if
+ // the container of A is before the container of B in a pre-order traversal of the
+ // Ranges' context tree and A is after B otherwise.
+ cmnRoot = dom.findCommonAncestor(containerA, containerB);
+ childA = containerA;
+
+ while (childA && childA.parentNode != cmnRoot)
+ childA = childA.parentNode;
+
+ if (!childA)
+ childA = cmnRoot;
+
+ childB = containerB;
+ while (childB && childB.parentNode != cmnRoot)
+ childB = childB.parentNode;
+
+ if (!childB)
+ childB = cmnRoot;
+
+ if (childA == childB)
+ return 0; // equal
+
+ n = cmnRoot.firstChild;
+ while (n) {
+ if (n == childA)
+ return -1; // before
+
+ if (n == childB)
+ return 1; // after
+
+ n = n.nextSibling;
+ }
+ };
+
+ function _setEndPoint(st, n, o) {
+ var ec, sc;
+
+ if (st) {
+ t[START_CONTAINER] = n;
+ t[START_OFFSET] = o;
+ } else {
+ t[END_CONTAINER] = n;
+ t[END_OFFSET] = o;
+ }
+
+ // If one boundary-point of a Range is set to have a root container
+ // other than the current one for the Range, the Range is collapsed to
+ // the new position. This enforces the restriction that both boundary-
+ // points of a Range must have the same root container.
+ ec = t[END_CONTAINER];
+ while (ec.parentNode)
+ ec = ec.parentNode;
+
+ sc = t[START_CONTAINER];
+ while (sc.parentNode)
+ sc = sc.parentNode;
+
+ if (sc == ec) {
+ // The start position of a Range is guaranteed to never be after the
+ // end position. To enforce this restriction, if the start is set to
+ // be at a position after the end, the Range is collapsed to that
+ // position.
+ if (_compareBoundaryPoints(t[START_CONTAINER], t[START_OFFSET], t[END_CONTAINER], t[END_OFFSET]) > 0)
+ t.collapse(st);
+ } else
+ t.collapse(st);
+
+ t.collapsed = _isCollapsed();
+ t.commonAncestorContainer = dom.findCommonAncestor(t[START_CONTAINER], t[END_CONTAINER]);
+ };
+
+ function _traverse(how) {
+ var c, endContainerDepth = 0, startContainerDepth = 0, p, depthDiff, startNode, endNode, sp, ep;
+
+ if (t[START_CONTAINER] == t[END_CONTAINER])
+ return _traverseSameContainer(how);
+
+ for (c = t[END_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {
+ if (p == t[START_CONTAINER])
+ return _traverseCommonStartContainer(c, how);
+
+ ++endContainerDepth;
+ }
+
+ for (c = t[START_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {
+ if (p == t[END_CONTAINER])
+ return _traverseCommonEndContainer(c, how);
+
+ ++startContainerDepth;
+ }
+
+ depthDiff = startContainerDepth - endContainerDepth;
+
+ startNode = t[START_CONTAINER];
+ while (depthDiff > 0) {
+ startNode = startNode.parentNode;
+ depthDiff--;
+ }
+
+ endNode = t[END_CONTAINER];
+ while (depthDiff < 0) {
+ endNode = endNode.parentNode;
+ depthDiff++;
+ }
+
+ // ascend the ancestor hierarchy until we have a common parent.
+ for (sp = startNode.parentNode, ep = endNode.parentNode; sp != ep; sp = sp.parentNode, ep = ep.parentNode) {
+ startNode = sp;
+ endNode = ep;
+ }
+
+ return _traverseCommonAncestors(startNode, endNode, how);
+ };
+
+ function _traverseSameContainer(how) {
+ var frag, s, sub, n, cnt, sibling, xferNode;
+
+ if (how != DELETE)
+ frag = doc.createDocumentFragment();
+
+ // If selection is empty, just return the fragment
+ if (t[START_OFFSET] == t[END_OFFSET])
+ return frag;
+
+ // Text node needs special case handling
+ if (t[START_CONTAINER].nodeType == 3 /* TEXT_NODE */) {
+ // get the substring
+ s = t[START_CONTAINER].nodeValue;
+ sub = s.substring(t[START_OFFSET], t[END_OFFSET]);
+
+ // set the original text node to its new value
+ if (how != CLONE) {
+ t[START_CONTAINER].deleteData(t[START_OFFSET], t[END_OFFSET] - t[START_OFFSET]);
+
+ // Nothing is partially selected, so collapse to start point
+ t.collapse(TRUE);
+ }
+
+ if (how == DELETE)
+ return;
+
+ frag.appendChild(doc.createTextNode(sub));
+ return frag;
+ }
+
+ // Copy nodes between the start/end offsets.
+ n = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]);
+ cnt = t[END_OFFSET] - t[START_OFFSET];
+
+ while (cnt > 0) {
+ sibling = n.nextSibling;
+ xferNode = _traverseFullySelected(n, how);
+
+ if (frag)
+ frag.appendChild( xferNode );
+
+ --cnt;
+ n = sibling;
+ }
+
+ // Nothing is partially selected, so collapse to start point
+ if (how != CLONE)
+ t.collapse(TRUE);
+
+ return frag;
+ };
+
+ function _traverseCommonStartContainer(endAncestor, how) {
+ var frag, n, endIdx, cnt, sibling, xferNode;
+
+ if (how != DELETE)
+ frag = doc.createDocumentFragment();
+
+ n = _traverseRightBoundary(endAncestor, how);
+
+ if (frag)
+ frag.appendChild(n);
+
+ endIdx = nodeIndex(endAncestor);
+ cnt = endIdx - t[START_OFFSET];
+
+ if (cnt <= 0) {
+ // Collapse to just before the endAncestor, which
+ // is partially selected.
+ if (how != CLONE) {
+ t.setEndBefore(endAncestor);
+ t.collapse(FALSE);
+ }
+
+ return frag;
+ }
+
+ n = endAncestor.previousSibling;
+ while (cnt > 0) {
+ sibling = n.previousSibling;
+ xferNode = _traverseFullySelected(n, how);
+
+ if (frag)
+ frag.insertBefore(xferNode, frag.firstChild);
+
+ --cnt;
+ n = sibling;
+ }
+
+ // Collapse to just before the endAncestor, which
+ // is partially selected.
+ if (how != CLONE) {
+ t.setEndBefore(endAncestor);
+ t.collapse(FALSE);
+ }
+
+ return frag;
+ };
+
+ function _traverseCommonEndContainer(startAncestor, how) {
+ var frag, startIdx, n, cnt, sibling, xferNode;
+
+ if (how != DELETE)
+ frag = doc.createDocumentFragment();
+
+ n = _traverseLeftBoundary(startAncestor, how);
+ if (frag)
+ frag.appendChild(n);
+
+ startIdx = nodeIndex(startAncestor);
+ ++startIdx; // Because we already traversed it
+
+ cnt = t[END_OFFSET] - startIdx;
+ n = startAncestor.nextSibling;
+ while (cnt > 0) {
+ sibling = n.nextSibling;
+ xferNode = _traverseFullySelected(n, how);
+
+ if (frag)
+ frag.appendChild(xferNode);
+
+ --cnt;
+ n = sibling;
+ }
+
+ if (how != CLONE) {
+ t.setStartAfter(startAncestor);
+ t.collapse(TRUE);
+ }
+
+ return frag;
+ };
+
+ function _traverseCommonAncestors(startAncestor, endAncestor, how) {
+ var n, frag, commonParent, startOffset, endOffset, cnt, sibling, nextSibling;
+
+ if (how != DELETE)
+ frag = doc.createDocumentFragment();
+
+ n = _traverseLeftBoundary(startAncestor, how);
+ if (frag)
+ frag.appendChild(n);
+
+ commonParent = startAncestor.parentNode;
+ startOffset = nodeIndex(startAncestor);
+ endOffset = nodeIndex(endAncestor);
+ ++startOffset;
+
+ cnt = endOffset - startOffset;
+ sibling = startAncestor.nextSibling;
+
+ while (cnt > 0) {
+ nextSibling = sibling.nextSibling;
+ n = _traverseFullySelected(sibling, how);
+
+ if (frag)
+ frag.appendChild(n);
+
+ sibling = nextSibling;
+ --cnt;
+ }
+
+ n = _traverseRightBoundary(endAncestor, how);
+
+ if (frag)
+ frag.appendChild(n);
+
+ if (how != CLONE) {
+ t.setStartAfter(startAncestor);
+ t.collapse(TRUE);
+ }
+
+ return frag;
+ };
+
+ function _traverseRightBoundary(root, how) {
+ var next = _getSelectedNode(t[END_CONTAINER], t[END_OFFSET] - 1), parent, clonedParent, prevSibling, clonedChild, clonedGrandParent, isFullySelected = next != t[END_CONTAINER];
+
+ if (next == root)
+ return _traverseNode(next, isFullySelected, FALSE, how);
+
+ parent = next.parentNode;
+ clonedParent = _traverseNode(parent, FALSE, FALSE, how);
+
+ while (parent) {
+ while (next) {
+ prevSibling = next.previousSibling;
+ clonedChild = _traverseNode(next, isFullySelected, FALSE, how);
+
+ if (how != DELETE)
+ clonedParent.insertBefore(clonedChild, clonedParent.firstChild);
+
+ isFullySelected = TRUE;
+ next = prevSibling;
+ }
+
+ if (parent == root)
+ return clonedParent;
+
+ next = parent.previousSibling;
+ parent = parent.parentNode;
+
+ clonedGrandParent = _traverseNode(parent, FALSE, FALSE, how);
+
+ if (how != DELETE)
+ clonedGrandParent.appendChild(clonedParent);
+
+ clonedParent = clonedGrandParent;
+ }
+ };
+
+ function _traverseLeftBoundary(root, how) {
+ var next = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]), isFullySelected = next != t[START_CONTAINER], parent, clonedParent, nextSibling, clonedChild, clonedGrandParent;
+
+ if (next == root)
+ return _traverseNode(next, isFullySelected, TRUE, how);
+
+ parent = next.parentNode;
+ clonedParent = _traverseNode(parent, FALSE, TRUE, how);
+
+ while (parent) {
+ while (next) {
+ nextSibling = next.nextSibling;
+ clonedChild = _traverseNode(next, isFullySelected, TRUE, how);
+
+ if (how != DELETE)
+ clonedParent.appendChild(clonedChild);
+
+ isFullySelected = TRUE;
+ next = nextSibling;
+ }
+
+ if (parent == root)
+ return clonedParent;
+
+ next = parent.nextSibling;
+ parent = parent.parentNode;
+
+ clonedGrandParent = _traverseNode(parent, FALSE, TRUE, how);
+
+ if (how != DELETE)
+ clonedGrandParent.appendChild(clonedParent);
+
+ clonedParent = clonedGrandParent;
+ }
+ };
+
+ function _traverseNode(n, isFullySelected, isLeft, how) {
+ var txtValue, newNodeValue, oldNodeValue, offset, newNode;
+
+ if (isFullySelected)
+ return _traverseFullySelected(n, how);
+
+ if (n.nodeType == 3 /* TEXT_NODE */) {
+ txtValue = n.nodeValue;
+
+ if (isLeft) {
+ offset = t[START_OFFSET];
+ newNodeValue = txtValue.substring(offset);
+ oldNodeValue = txtValue.substring(0, offset);
+ } else {
+ offset = t[END_OFFSET];
+ newNodeValue = txtValue.substring(0, offset);
+ oldNodeValue = txtValue.substring(offset);
+ }
+
+ if (how != CLONE)
+ n.nodeValue = oldNodeValue;
+
+ if (how == DELETE)
+ return;
+
+ newNode = n.cloneNode(FALSE);
+ newNode.nodeValue = newNodeValue;
+
+ return newNode;
+ }
+
+ if (how == DELETE)
+ return;
+
+ return n.cloneNode(FALSE);
+ };
+
+ function _traverseFullySelected(n, how) {
+ if (how != DELETE)
+ return how == CLONE ? n.cloneNode(TRUE) : n;
+
+ n.parentNode.removeChild(n);
+ };
+ };
+
+ ns.Range = Range;
+})(tinymce.dom);
+
+(function() {
+ function Selection(selection) {
+ var self = this, dom = selection.dom, TRUE = true, FALSE = false;
+
+ function getPosition(rng, start) {
+ var checkRng, startIndex = 0, endIndex, inside,
+ children, child, offset, index, position = -1, parent;
+
+ // Setup test range, collapse it and get the parent
+ checkRng = rng.duplicate();
+ checkRng.collapse(start);
+ parent = checkRng.parentElement();
+
+ // Check if the selection is within the right document
+ if (parent.ownerDocument !== selection.dom.doc)
+ return;
+
+ // IE will report non editable elements as it's parent so look for an editable one
+ while (parent.contentEditable === "false") {
+ parent = parent.parentNode;
+ }
+
+ // If parent doesn't have any children then return that we are inside the element
+ if (!parent.hasChildNodes()) {
+ return {node : parent, inside : 1};
+ }
+
+ // Setup node list and endIndex
+ children = parent.children;
+ endIndex = children.length - 1;
+
+ // Perform a binary search for the position
+ while (startIndex <= endIndex) {
+ index = Math.floor((startIndex + endIndex) / 2);
+
+ // Move selection to node and compare the ranges
+ child = children[index];
+ checkRng.moveToElementText(child);
+ position = checkRng.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', rng);
+
+ // Before/after or an exact match
+ if (position > 0) {
+ endIndex = index - 1;
+ } else if (position < 0) {
+ startIndex = index + 1;
+ } else {
+ return {node : child};
+ }
+ }
+
+ // Check if child position is before or we didn't find a position
+ if (position < 0) {
+ // No element child was found use the parent element and the offset inside that
+ if (!child) {
+ checkRng.moveToElementText(parent);
+ checkRng.collapse(true);
+ child = parent;
+ inside = true;
+ } else
+ checkRng.collapse(false);
+
+ checkRng.setEndPoint(start ? 'EndToStart' : 'EndToEnd', rng);
+
+ // Fix for edge case: <div style="width: 100px; height:100px;"><table>..</table>ab|c</div>
+ if (checkRng.compareEndPoints(start ? 'StartToStart' : 'StartToEnd', rng) > 0) {
+ checkRng = rng.duplicate();
+ checkRng.collapse(start);
+
+ offset = -1;
+ while (parent == checkRng.parentElement()) {
+ if (checkRng.move('character', -1) == 0)
+ break;
+
+ offset++;
+ }
+ }
+
+ offset = offset || checkRng.text.replace('\r\n', ' ').length;
+ } else {
+ // Child position is after the selection endpoint
+ checkRng.collapse(true);
+ checkRng.setEndPoint(start ? 'StartToStart' : 'StartToEnd', rng);
+
+ // Get the length of the text to find where the endpoint is relative to it's container
+ offset = checkRng.text.replace('\r\n', ' ').length;
+ }
+
+ return {node : child, position : position, offset : offset, inside : inside};
+ };
+
+ // Returns a W3C DOM compatible range object by using the IE Range API
+ function getRange() {
+ var ieRange = selection.getRng(), domRange = dom.createRng(), element, collapsed, tmpRange, element2, bookmark, fail;
+
+ // If selection is outside the current document just return an empty range
+ element = ieRange.item ? ieRange.item(0) : ieRange.parentElement();
+ if (element.ownerDocument != dom.doc)
+ return domRange;
+
+ collapsed = selection.isCollapsed();
+
+ // Handle control selection
+ if (ieRange.item) {
+ domRange.setStart(element.parentNode, dom.nodeIndex(element));
+ domRange.setEnd(domRange.startContainer, domRange.startOffset + 1);
+
+ return domRange;
+ }
+
+ function findEndPoint(start) {
+ var endPoint = getPosition(ieRange, start), container, offset, textNodeOffset = 0, sibling, undef, nodeValue;
+
+ container = endPoint.node;
+ offset = endPoint.offset;
+
+ if (endPoint.inside && !container.hasChildNodes()) {
+ domRange[start ? 'setStart' : 'setEnd'](container, 0);
+ return;
+ }
+
+ if (offset === undef) {
+ domRange[start ? 'setStartBefore' : 'setEndAfter'](container);
+ return;
+ }
+
+ if (endPoint.position < 0) {
+ sibling = endPoint.inside ? container.firstChild : container.nextSibling;
+
+ if (!sibling) {
+ domRange[start ? 'setStartAfter' : 'setEndAfter'](container);
+ return;
+ }
+
+ if (!offset) {
+ if (sibling.nodeType == 3)
+ domRange[start ? 'setStart' : 'setEnd'](sibling, 0);
+ else
+ domRange[start ? 'setStartBefore' : 'setEndBefore'](sibling);
+
+ return;
+ }
+
+ // Find the text node and offset
+ while (sibling) {
+ nodeValue = sibling.nodeValue;
+ textNodeOffset += nodeValue.length;
+
+ // We are at or passed the position we where looking for
+ if (textNodeOffset >= offset) {
+ container = sibling;
+ textNodeOffset -= offset;
+ textNodeOffset = nodeValue.length - textNodeOffset;
+ break;
+ }
+
+ sibling = sibling.nextSibling;
+ }
+ } else {
+ // Find the text node and offset
+ sibling = container.previousSibling;
+
+ if (!sibling)
+ return domRange[start ? 'setStartBefore' : 'setEndBefore'](container);
+
+ // If there isn't any text to loop then use the first position
+ if (!offset) {
+ if (container.nodeType == 3)
+ domRange[start ? 'setStart' : 'setEnd'](sibling, container.nodeValue.length);
+ else
+ domRange[start ? 'setStartAfter' : 'setEndAfter'](sibling);
+
+ return;
+ }
+
+ while (sibling) {
+ textNodeOffset += sibling.nodeValue.length;
+
+ // We are at or passed the position we where looking for
+ if (textNodeOffset >= offset) {
+ container = sibling;
+ textNodeOffset -= offset;
+ break;
+ }
+
+ sibling = sibling.previousSibling;
+ }
+ }
+
+ domRange[start ? 'setStart' : 'setEnd'](container, textNodeOffset);
+ };
+
+ try {
+ // Find start point
+ findEndPoint(true);
+
+ // Find end point if needed
+ if (!collapsed)
+ findEndPoint();
+ } catch (ex) {
+ // IE has a nasty bug where text nodes might throw "invalid argument" when you
+ // access the nodeValue or other properties of text nodes. This seems to happend when
+ // text nodes are split into two nodes by a delete/backspace call. So lets detect it and try to fix it.
+ if (ex.number == -2147024809) {
+ // Get the current selection
+ bookmark = self.getBookmark(2);
+
+ // Get start element
+ tmpRange = ieRange.duplicate();
+ tmpRange.collapse(true);
+ element = tmpRange.parentElement();
+
+ // Get end element
+ if (!collapsed) {
+ tmpRange = ieRange.duplicate();
+ tmpRange.collapse(false);
+ element2 = tmpRange.parentElement();
+ element2.innerHTML = element2.innerHTML;
+ }
+
+ // Remove the broken elements
+ element.innerHTML = element.innerHTML;
+
+ // Restore the selection
+ self.moveToBookmark(bookmark);
+
+ // Since the range has moved we need to re-get it
+ ieRange = selection.getRng();
+
+ // Find start point
+ findEndPoint(true);
+
+ // Find end point if needed
+ if (!collapsed)
+ findEndPoint();
+ } else
+ throw ex; // Throw other errors
+ }
+
+ return domRange;
+ };
+
+ this.getBookmark = function(type) {
+ var rng = selection.getRng(), start, end, bookmark = {};
+
+ function getIndexes(node) {
+ var node, parent, root, children, i, indexes = [];
+
+ parent = node.parentNode;
+ root = dom.getRoot().parentNode;
+
+ while (parent != root && parent.nodeType !== 9) {
+ children = parent.children;
+
+ i = children.length;
+ while (i--) {
+ if (node === children[i]) {
+ indexes.push(i);
+ break;
+ }
+ }
+
+ node = parent;
+ parent = parent.parentNode;
+ }
+
+ return indexes;
+ };
+
+ function getBookmarkEndPoint(start) {
+ var position;
+
+ position = getPosition(rng, start);
+ if (position) {
+ return {
+ position : position.position,
+ offset : position.offset,
+ indexes : getIndexes(position.node),
+ inside : position.inside
+ };
+ }
+ };
+
+ // Non ubstructive bookmark
+ if (type === 2) {
+ // Handle text selection
+ if (!rng.item) {
+ bookmark.start = getBookmarkEndPoint(true);
+
+ if (!selection.isCollapsed())
+ bookmark.end = getBookmarkEndPoint();
+ } else
+ bookmark.start = {ctrl : true, indexes : getIndexes(rng.item(0))};
+ }
+
+ return bookmark;
+ };
+
+ this.moveToBookmark = function(bookmark) {
+ var rng, body = dom.doc.body;
+
+ function resolveIndexes(indexes) {
+ var node, i, idx, children;
+
+ node = dom.getRoot();
+ for (i = indexes.length - 1; i >= 0; i--) {
+ children = node.children;
+ idx = indexes[i];
+
+ if (idx <= children.length - 1) {
+ node = children[idx];
+ }
+ }
+
+ return node;
+ };
+
+ function setBookmarkEndPoint(start) {
+ var endPoint = bookmark[start ? 'start' : 'end'], moveLeft, moveRng, undef;
+
+ if (endPoint) {
+ moveLeft = endPoint.position > 0;
+
+ moveRng = body.createTextRange();
+ moveRng.moveToElementText(resolveIndexes(endPoint.indexes));
+
+ offset = endPoint.offset;
+ if (offset !== undef) {
+ moveRng.collapse(endPoint.inside || moveLeft);
+ moveRng.moveStart('character', moveLeft ? -offset : offset);
+ } else
+ moveRng.collapse(start);
+
+ rng.setEndPoint(start ? 'StartToStart' : 'EndToStart', moveRng);
+
+ if (start)
+ rng.collapse(true);
+ }
+ };
+
+ if (bookmark.start) {
+ if (bookmark.start.ctrl) {
+ rng = body.createControlRange();
+ rng.addElement(resolveIndexes(bookmark.start.indexes));
+ rng.select();
+ } else {
+ rng = body.createTextRange();
+ setBookmarkEndPoint(true);
+ setBookmarkEndPoint();
+ rng.select();
+ }
+ }
+ };
+
+ this.addRange = function(rng) {
+ var ieRng, ctrlRng, startContainer, startOffset, endContainer, endOffset, doc = selection.dom.doc, body = doc.body;
+
+ function setEndPoint(start) {
+ var container, offset, marker, tmpRng, nodes;
+
+ marker = dom.create('a');
+ container = start ? startContainer : endContainer;
+ offset = start ? startOffset : endOffset;
+ tmpRng = ieRng.duplicate();
+
+ if (container == doc || container == doc.documentElement) {
+ container = body;
+ offset = 0;
+ }
+
+ if (container.nodeType == 3) {
+ container.parentNode.insertBefore(marker, container);
+ tmpRng.moveToElementText(marker);
+ tmpRng.moveStart('character', offset);
+ dom.remove(marker);
+ ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);
+ } else {
+ nodes = container.childNodes;
+
+ if (nodes.length) {
+ if (offset >= nodes.length) {
+ dom.insertAfter(marker, nodes[nodes.length - 1]);
+ } else {
+ container.insertBefore(marker, nodes[offset]);
+ }
+
+ tmpRng.moveToElementText(marker);
+ } else {
+ // Empty node selection for example <div>|</div>
+ marker = doc.createTextNode('\uFEFF');
+ container.appendChild(marker);
+ tmpRng.moveToElementText(marker.parentNode);
+ tmpRng.collapse(TRUE);
+ }
+
+ ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);
+ dom.remove(marker);
+ }
+ }
+
+ // Setup some shorter versions
+ startContainer = rng.startContainer;
+ startOffset = rng.startOffset;
+ endContainer = rng.endContainer;
+ endOffset = rng.endOffset;
+ ieRng = body.createTextRange();
+
+ // If single element selection then try making a control selection out of it
+ if (startContainer == endContainer && startContainer.nodeType == 1 && startOffset == endOffset - 1) {
+ if (startOffset == endOffset - 1) {
+ try {
+ ctrlRng = body.createControlRange();
+ ctrlRng.addElement(startContainer.childNodes[startOffset]);
+ ctrlRng.select();
+ return;
+ } catch (ex) {
+ // Ignore
+ }
+ }
+ }
+
+ // Set start/end point of selection
+ setEndPoint(true);
+ setEndPoint();
+
+ // Select the new range and scroll it into view
+ ieRng.select();
+ };
+
+ // Expose range method
+ this.getRangeAt = getRange;
+ };
+
+ // Expose the selection object
+ tinymce.dom.TridentSelection = Selection;
+})();
+
+
+/*
+ * Sizzle CSS Selector Engine - v1.0
+ * Copyright 2009, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ * More information: http://sizzlejs.com/
+ */
+(function(){
+
+var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ done = 0,
+ toString = Object.prototype.toString,
+ hasDuplicate = false,
+ baseHasDuplicate = true;
+
+// Here we check if the JavaScript engine is using some sort of
+// optimization where it does not always call our comparision
+// function. If that is the case, discard the hasDuplicate value.
+// Thus far that includes Google Chrome.
+[0, 0].sort(function(){
+ baseHasDuplicate = false;
+ return 0;
+});
+
+var Sizzle = function(selector, context, results, seed) {
+ results = results || [];
+ context = context || document;
+
+ var origContext = context;
+
+ if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
+ return [];
+ }
+
+ if ( !selector || typeof selector !== "string" ) {
+ return results;
+ }
+
+ var parts = [], m, set, checkSet, extra, prune = true, contextXML = Sizzle.isXML(context),
+ soFar = selector, ret, cur, pop, i;
+
+ // Reset the position of the chunker regexp (start from head)
+ do {
+ chunker.exec("");
+ m = chunker.exec(soFar);
+
+ if ( m ) {
+ soFar = m[3];
+
+ parts.push( m[1] );
+
+ if ( m[2] ) {
+ extra = m[3];
+ break;
+ }
+ }
+ } while ( m );
+
+ if ( parts.length > 1 && origPOS.exec( selector ) ) {
+ if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
+ set = posProcess( parts[0] + parts[1], context );
+ } else {
+ set = Expr.relative[ parts[0] ] ?
+ [ context ] :
+ Sizzle( parts.shift(), context );
+
+ while ( parts.length ) {
+ selector = parts.shift();
+
+ if ( Expr.relative[ selector ] ) {
+ selector += parts.shift();
+ }
+
+ set = posProcess( selector, set );
+ }
+ }
+ } else {
+ // Take a shortcut and set the context if the root selector is an ID
+ // (but not if it'll be faster if the inner selector is an ID)
+ if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
+ Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
+ ret = Sizzle.find( parts.shift(), context, contextXML );
+ context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];
+ }
+
+ if ( context ) {
+ ret = seed ?
+ { expr: parts.pop(), set: makeArray(seed) } :
+ Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
+ set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
+
+ if ( parts.length > 0 ) {
+ checkSet = makeArray(set);
+ } else {
+ prune = false;
+ }
+
+ while ( parts.length ) {
+ cur = parts.pop();
+ pop = cur;
+
+ if ( !Expr.relative[ cur ] ) {
+ cur = "";
+ } else {
+ pop = parts.pop();
+ }
+
+ if ( pop == null ) {
+ pop = context;
+ }
+
+ Expr.relative[ cur ]( checkSet, pop, contextXML );
+ }
+ } else {
+ checkSet = parts = [];
+ }
+ }
+
+ if ( !checkSet ) {
+ checkSet = set;
+ }
+
+ if ( !checkSet ) {
+ Sizzle.error( cur || selector );
+ }
+
+ if ( toString.call(checkSet) === "[object Array]" ) {
+ if ( !prune ) {
+ results.push.apply( results, checkSet );
+ } else if ( context && context.nodeType === 1 ) {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
+ results.push( set[i] );
+ }
+ }
+ } else {
+ for ( i = 0; checkSet[i] != null; i++ ) {
+ if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
+ results.push( set[i] );
+ }
+ }
+ }
+ } else {
+ makeArray( checkSet, results );
+ }
+
+ if ( extra ) {
+ Sizzle( extra, origContext, results, seed );
+ Sizzle.uniqueSort( results );
+ }
+
+ return results;
+};
+
+Sizzle.uniqueSort = function(results){
+ if ( sortOrder ) {
+ hasDuplicate = baseHasDuplicate;
+ results.sort(sortOrder);
+
+ if ( hasDuplicate ) {
+ for ( var i = 1; i < results.length; i++ ) {
+ if ( results[i] === results[i-1] ) {
+ results.splice(i--, 1);
+ }
+ }
+ }
+ }
+
+ return results;
+};
+
+Sizzle.matches = function(expr, set){
+ return Sizzle(expr, null, null, set);
+};
+
+Sizzle.find = function(expr, context, isXML){
+ var set;
+
+ if ( !expr ) {
+ return [];
+ }
+
+ for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
+ var type = Expr.order[i], match;
+
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
+ var left = match[1];
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) !== "\\" ) {
+ match[1] = (match[1] || "").replace(/\\/g, "");
+ set = Expr.find[ type ]( match, context, isXML );
+ if ( set != null ) {
+ expr = expr.replace( Expr.match[ type ], "" );
+ break;
+ }
+ }
+ }
+ }
+
+ if ( !set ) {
+ set = context.getElementsByTagName("*");
+ }
+
+ return {set: set, expr: expr};
+};
+
+Sizzle.filter = function(expr, set, inplace, not){
+ var old = expr, result = [], curLoop = set, match, anyFound,
+ isXMLFilter = set && set[0] && Sizzle.isXML(set[0]);
+
+ while ( expr && set.length ) {
+ for ( var type in Expr.filter ) {
+ if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
+ var filter = Expr.filter[ type ], found, item, left = match[1];
+ anyFound = false;
+
+ match.splice(1,1);
+
+ if ( left.substr( left.length - 1 ) === "\\" ) {
+ continue;
+ }
+
+ if ( curLoop === result ) {
+ result = [];
+ }
+
+ if ( Expr.preFilter[ type ] ) {
+ match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
+
+ if ( !match ) {
+ anyFound = found = true;
+ } else if ( match === true ) {
+ continue;
+ }
+ }
+
+ if ( match ) {
+ for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
+ if ( item ) {
+ found = filter( item, match, i, curLoop );
+ var pass = not ^ !!found;
+
+ if ( inplace && found != null ) {
+ if ( pass ) {
+ anyFound = true;
+ } else {
+ curLoop[i] = false;
+ }
+ } else if ( pass ) {
+ result.push( item );
+ anyFound = true;
+ }
+ }
+ }
+ }
+
+ if ( found !== undefined ) {
+ if ( !inplace ) {
+ curLoop = result;
+ }
+
+ expr = expr.replace( Expr.match[ type ], "" );
+
+ if ( !anyFound ) {
+ return [];
+ }
+
+ break;
+ }
+ }
+ }
+
+ // Improper expression
+ if ( expr === old ) {
+ if ( anyFound == null ) {
+ Sizzle.error( expr );
+ } else {
+ break;
+ }
+ }
+
+ old = expr;
+ }
+
+ return curLoop;
+};
+
+Sizzle.error = function( msg ) {
+ throw "Syntax error, unrecognized expression: " + msg;
+};
+
+var Expr = Sizzle.selectors = {
+ order: [ "ID", "NAME", "TAG" ],
+ match: {
+ ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
+ NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
+ ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
+ TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
+ CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
+ POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
+ PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
+ },
+ leftMatch: {},
+ attrMap: {
+ "class": "className",
+ "for": "htmlFor"
+ },
+ attrHandle: {
+ href: function(elem){
+ return elem.getAttribute("href");
+ }
+ },
+ relative: {
+ "+": function(checkSet, part){
+ var isPartStr = typeof part === "string",
+ isTag = isPartStr && !/\W/.test(part),
+ isPartStrNotTag = isPartStr && !isTag;
+
+ if ( isTag ) {
+ part = part.toLowerCase();
+ }
+
+ for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
+ if ( (elem = checkSet[i]) ) {
+ while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
+
+ checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
+ elem || false :
+ elem === part;
+ }
+ }
+
+ if ( isPartStrNotTag ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ },
+ ">": function(checkSet, part){
+ var isPartStr = typeof part === "string",
+ elem, i = 0, l = checkSet.length;
+
+ if ( isPartStr && !/\W/.test(part) ) {
+ part = part.toLowerCase();
+
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+ if ( elem ) {
+ var parent = elem.parentNode;
+ checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
+ }
+ }
+ } else {
+ for ( ; i < l; i++ ) {
+ elem = checkSet[i];
+ if ( elem ) {
+ checkSet[i] = isPartStr ?
+ elem.parentNode :
+ elem.parentNode === part;
+ }
+ }
+
+ if ( isPartStr ) {
+ Sizzle.filter( part, checkSet, true );
+ }
+ }
+ },
+ "": function(checkSet, part, isXML){
+ var doneName = done++, checkFn = dirCheck, nodeCheck;
+
+ if ( typeof part === "string" && !/\W/.test(part) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
+ },
+ "~": function(checkSet, part, isXML){
+ var doneName = done++, checkFn = dirCheck, nodeCheck;
+
+ if ( typeof part === "string" && !/\W/.test(part) ) {
+ part = part.toLowerCase();
+ nodeCheck = part;
+ checkFn = dirNodeCheck;
+ }
+
+ checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
+ }
+ },
+ find: {
+ ID: function(match, context, isXML){
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ return m ? [m] : [];
+ }
+ },
+ NAME: function(match, context){
+ if ( typeof context.getElementsByName !== "undefined" ) {
+ var ret = [], results = context.getElementsByName(match[1]);
+
+ for ( var i = 0, l = results.length; i < l; i++ ) {
+ if ( results[i].getAttribute("name") === match[1] ) {
+ ret.push( results[i] );
+ }
+ }
+
+ return ret.length === 0 ? null : ret;
+ }
+ },
+ TAG: function(match, context){
+ return context.getElementsByTagName(match[1]);
+ }
+ },
+ preFilter: {
+ CLASS: function(match, curLoop, inplace, result, not, isXML){
+ match = " " + match[1].replace(/\\/g, "") + " ";
+
+ if ( isXML ) {
+ return match;
+ }
+
+ for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
+ if ( elem ) {
+ if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
+ if ( !inplace ) {
+ result.push( elem );
+ }
+ } else if ( inplace ) {
+ curLoop[i] = false;
+ }
+ }
+ }
+
+ return false;
+ },
+ ID: function(match){
+ return match[1].replace(/\\/g, "");
+ },
+ TAG: function(match, curLoop){
+ return match[1].toLowerCase();
+ },
+ CHILD: function(match){
+ if ( match[1] === "nth" ) {
+ // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
+ var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
+ match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
+ !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
+
+ // calculate the numbers (first)n+(last) including if they are negative
+ match[2] = (test[1] + (test[2] || 1)) - 0;
+ match[3] = test[3] - 0;
+ }
+
+ // TODO: Move to normal caching system
+ match[0] = done++;
+
+ return match;
+ },
+ ATTR: function(match, curLoop, inplace, result, not, isXML){
+ var name = match[1].replace(/\\/g, "");
+
+ if ( !isXML && Expr.attrMap[name] ) {
+ match[1] = Expr.attrMap[name];
+ }
+
+ if ( match[2] === "~=" ) {
+ match[4] = " " + match[4] + " ";
+ }
+
+ return match;
+ },
+ PSEUDO: function(match, curLoop, inplace, result, not){
+ if ( match[1] === "not" ) {
+ // If we're dealing with a complex expression, or a simple one
+ if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
+ match[3] = Sizzle(match[3], null, null, curLoop);
+ } else {
+ var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
+ if ( !inplace ) {
+ result.push.apply( result, ret );
+ }
+ return false;
+ }
+ } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
+ return true;
+ }
+
+ return match;
+ },
+ POS: function(match){
+ match.unshift( true );
+ return match;
+ }
+ },
+ filters: {
+ enabled: function(elem){
+ return elem.disabled === false && elem.type !== "hidden";
+ },
+ disabled: function(elem){
+ return elem.disabled === true;
+ },
+ checked: function(elem){
+ return elem.checked === true;
+ },
+ selected: function(elem){
+ // Accessing this property makes selected-by-default
+ // options in Safari work properly
+ elem.parentNode.selectedIndex;
+ return elem.selected === true;
+ },
+ parent: function(elem){
+ return !!elem.firstChild;
+ },
+ empty: function(elem){
+ return !elem.firstChild;
+ },
+ has: function(elem, i, match){
+ return !!Sizzle( match[3], elem ).length;
+ },
+ header: function(elem){
+ return (/h\d/i).test( elem.nodeName );
+ },
+ text: function(elem){
+ return "text" === elem.type;
+ },
+ radio: function(elem){
+ return "radio" === elem.type;
+ },
+ checkbox: function(elem){
+ return "checkbox" === elem.type;
+ },
+ file: function(elem){
+ return "file" === elem.type;
+ },
+ password: function(elem){
+ return "password" === elem.type;
+ },
+ submit: function(elem){
+ return "submit" === elem.type;
+ },
+ image: function(elem){
+ return "image" === elem.type;
+ },
+ reset: function(elem){
+ return "reset" === elem.type;
+ },
+ button: function(elem){
+ return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
+ },
+ input: function(elem){
+ return (/input|select|textarea|button/i).test(elem.nodeName);
+ }
+ },
+ setFilters: {
+ first: function(elem, i){
+ return i === 0;
+ },
+ last: function(elem, i, match, array){
+ return i === array.length - 1;
+ },
+ even: function(elem, i){
+ return i % 2 === 0;
+ },
+ odd: function(elem, i){
+ return i % 2 === 1;
+ },
+ lt: function(elem, i, match){
+ return i < match[3] - 0;
+ },
+ gt: function(elem, i, match){
+ return i > match[3] - 0;
+ },
+ nth: function(elem, i, match){
+ return match[3] - 0 === i;
+ },
+ eq: function(elem, i, match){
+ return match[3] - 0 === i;
+ }
+ },
+ filter: {
+ PSEUDO: function(elem, match, i, array){
+ var name = match[1], filter = Expr.filters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ } else if ( name === "contains" ) {
+ return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
+ } else if ( name === "not" ) {
+ var not = match[3];
+
+ for ( var j = 0, l = not.length; j < l; j++ ) {
+ if ( not[j] === elem ) {
+ return false;
+ }
+ }
+
+ return true;
+ } else {
+ Sizzle.error( "Syntax error, unrecognized expression: " + name );
+ }
+ },
+ CHILD: function(elem, match){
+ var type = match[1], node = elem;
+ switch (type) {
+ case 'only':
+ case 'first':
+ while ( (node = node.previousSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+ if ( type === "first" ) {
+ return true;
+ }
+ node = elem;
+ case 'last':
+ while ( (node = node.nextSibling) ) {
+ if ( node.nodeType === 1 ) {
+ return false;
+ }
+ }
+ return true;
+ case 'nth':
+ var first = match[2], last = match[3];
+
+ if ( first === 1 && last === 0 ) {
+ return true;
+ }
+
+ var doneName = match[0],
+ parent = elem.parentNode;
+
+ if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
+ var count = 0;
+ for ( node = parent.firstChild; node; node = node.nextSibling ) {
+ if ( node.nodeType === 1 ) {
+ node.nodeIndex = ++count;
+ }
+ }
+ parent.sizcache = doneName;
+ }
+
+ var diff = elem.nodeIndex - last;
+ if ( first === 0 ) {
+ return diff === 0;
+ } else {
+ return ( diff % first === 0 && diff / first >= 0 );
+ }
+ }
+ },
+ ID: function(elem, match){
+ return elem.nodeType === 1 && elem.getAttribute("id") === match;
+ },
+ TAG: function(elem, match){
+ return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
+ },
+ CLASS: function(elem, match){
+ return (" " + (elem.className || elem.getAttribute("class")) + " ")
+ .indexOf( match ) > -1;
+ },
+ ATTR: function(elem, match){
+ var name = match[1],
+ result = Expr.attrHandle[ name ] ?
+ Expr.attrHandle[ name ]( elem ) :
+ elem[ name ] != null ?
+ elem[ name ] :
+ elem.getAttribute( name ),
+ value = result + "",
+ type = match[2],
+ check = match[4];
+
+ return result == null ?
+ type === "!=" :
+ type === "=" ?
+ value === check :
+ type === "*=" ?
+ value.indexOf(check) >= 0 :
+ type === "~=" ?
+ (" " + value + " ").indexOf(check) >= 0 :
+ !check ?
+ value && result !== false :
+ type === "!=" ?
+ value !== check :
+ type === "^=" ?
+ value.indexOf(check) === 0 :
+ type === "$=" ?
+ value.substr(value.length - check.length) === check :
+ type === "|=" ?
+ value === check || value.substr(0, check.length + 1) === check + "-" :
+ false;
+ },
+ POS: function(elem, match, i, array){
+ var name = match[2], filter = Expr.setFilters[ name ];
+
+ if ( filter ) {
+ return filter( elem, i, match, array );
+ }
+ }
+ }
+};
+
+var origPOS = Expr.match.POS,
+ fescape = function(all, num){
+ return "\\" + (num - 0 + 1);
+ };
+
+for ( var type in Expr.match ) {
+ Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
+ Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
+}
+
+var makeArray = function(array, results) {
+ array = Array.prototype.slice.call( array, 0 );
+
+ if ( results ) {
+ results.push.apply( results, array );
+ return results;
+ }
+
+ return array;
+};
+
+// Perform a simple check to determine if the browser is capable of
+// converting a NodeList to an array using builtin methods.
+// Also verifies that the returned array holds DOM nodes
+// (which is not the case in the Blackberry browser)
+try {
+ Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
+
+// Provide a fallback method if it does not work
+} catch(e){
+ makeArray = function(array, results) {
+ var ret = results || [], i = 0;
+
+ if ( toString.call(array) === "[object Array]" ) {
+ Array.prototype.push.apply( ret, array );
+ } else {
+ if ( typeof array.length === "number" ) {
+ for ( var l = array.length; i < l; i++ ) {
+ ret.push( array[i] );
+ }
+ } else {
+ for ( ; array[i]; i++ ) {
+ ret.push( array[i] );
+ }
+ }
+ }
+
+ return ret;
+ };
+}
+
+var sortOrder;
+
+if ( document.documentElement.compareDocumentPosition ) {
+ sortOrder = function( a, b ) {
+ if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return a.compareDocumentPosition ? -1 : 1;
+ }
+
+ var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
+ if ( ret === 0 ) {
+ hasDuplicate = true;
+ }
+ return ret;
+ };
+} else if ( "sourceIndex" in document.documentElement ) {
+ sortOrder = function( a, b ) {
+ if ( !a.sourceIndex || !b.sourceIndex ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return a.sourceIndex ? -1 : 1;
+ }
+
+ var ret = a.sourceIndex - b.sourceIndex;
+ if ( ret === 0 ) {
+ hasDuplicate = true;
+ }
+ return ret;
+ };
+} else if ( document.createRange ) {
+ sortOrder = function( a, b ) {
+ if ( !a.ownerDocument || !b.ownerDocument ) {
+ if ( a == b ) {
+ hasDuplicate = true;
+ }
+ return a.ownerDocument ? -1 : 1;
+ }
+
+ var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
+ aRange.setStart(a, 0);
+ aRange.setEnd(a, 0);
+ bRange.setStart(b, 0);
+ bRange.setEnd(b, 0);
+ var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
+ if ( ret === 0 ) {
+ hasDuplicate = true;
+ }
+ return ret;
+ };
+}
+
+// Utility function for retreiving the text value of an array of DOM nodes
+Sizzle.getText = function( elems ) {
+ var ret = "", elem;
+
+ for ( var i = 0; elems[i]; i++ ) {
+ elem = elems[i];
+
+ // Get the text from text nodes and CDATA nodes
+ if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
+ ret += elem.nodeValue;
+
+ // Traverse everything else, except comment nodes
+ } else if ( elem.nodeType !== 8 ) {
+ ret += Sizzle.getText( elem.childNodes );
+ }
+ }
+
+ return ret;
+};
+
+// Check to see if the browser returns elements by name when
+// querying by getElementById (and provide a workaround)
+(function(){
+ // We're going to inject a fake input element with a specified name
+ var form = document.createElement("div"),
+ id = "script" + (new Date()).getTime();
+ form.innerHTML = "<a name='" + id + "'/>";
+
+ // Inject it into the root element, check its status, and remove it quickly
+ var root = document.documentElement;
+ root.insertBefore( form, root.firstChild );
+
+ // The workaround has to do additional checks after a getElementById
+ // Which slows things down for other browsers (hence the branching)
+ if ( document.getElementById( id ) ) {
+ Expr.find.ID = function(match, context, isXML){
+ if ( typeof context.getElementById !== "undefined" && !isXML ) {
+ var m = context.getElementById(match[1]);
+ return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
+ }
+ };
+
+ Expr.filter.ID = function(elem, match){
+ var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+ return elem.nodeType === 1 && node && node.nodeValue === match;
+ };
+ }
+
+ root.removeChild( form );
+ root = form = null; // release memory in IE
+})();
+
+(function(){
+ // Check to see if the browser returns only elements
+ // when doing getElementsByTagName("*")
+
+ // Create a fake element
+ var div = document.createElement("div");
+ div.appendChild( document.createComment("") );
+
+ // Make sure no comments are found
+ if ( div.getElementsByTagName("*").length > 0 ) {
+ Expr.find.TAG = function(match, context){
+ var results = context.getElementsByTagName(match[1]);
+
+ // Filter out possible comments
+ if ( match[1] === "*" ) {
+ var tmp = [];
+
+ for ( var i = 0; results[i]; i++ ) {
+ if ( results[i].nodeType === 1 ) {
+ tmp.push( results[i] );
+ }
+ }
+
+ results = tmp;
+ }
+
+ return results;
+ };
+ }
+
+ // Check to see if an attribute returns normalized href attributes
+ div.innerHTML = "<a href='#'></a>";
+ if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
+ div.firstChild.getAttribute("href") !== "#" ) {
+ Expr.attrHandle.href = function(elem){
+ return elem.getAttribute("href", 2);
+ };
+ }
+
+ div = null; // release memory in IE
+})();
+
+if ( document.querySelectorAll ) {
+ (function(){
+ var oldSizzle = Sizzle, div = document.createElement("div");
+ div.innerHTML = "<p class='TEST'></p>";
+
+ // Safari can't handle uppercase or unicode characters when
+ // in quirks mode.
+ if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
+ return;
+ }
+
+ Sizzle = function(query, context, extra, seed){
+ context = context || document;
+
+ // Only use querySelectorAll on non-XML documents
+ // (ID selectors don't work in non-HTML documents)
+ if ( !seed && context.nodeType === 9 && !Sizzle.isXML(context) ) {
+ try {
+ return makeArray( context.querySelectorAll(query), extra );
+ } catch(e){}
+ }
+
+ return oldSizzle(query, context, extra, seed);
+ };
+
+ for ( var prop in oldSizzle ) {
+ Sizzle[ prop ] = oldSizzle[ prop ];
+ }
+
+ div = null; // release memory in IE
+ })();
+}
+
+(function(){
+ var div = document.createElement("div");
+
+ div.innerHTML = "<div class='test e'></div><div class='test'></div>";
+
+ // Opera can't find a second classname (in 9.6)
+ // Also, make sure that getElementsByClassName actually exists
+ if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
+ return;
+ }
+
+ // Safari caches class attributes, doesn't catch changes (in 3.2)
+ div.lastChild.className = "e";
+
+ if ( div.getElementsByClassName("e").length === 1 ) {
+ return;
+ }
+
+ Expr.order.splice(1, 0, "CLASS");
+ Expr.find.CLASS = function(match, context, isXML) {
+ if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
+ return context.getElementsByClassName(match[1]);
+ }
+ };
+
+ div = null; // release memory in IE
+})();
+
+function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ elem = elem[dir];
+ var match = false;
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 && !isXML ){
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+
+ if ( elem.nodeName.toLowerCase() === cur ) {
+ match = elem;
+ break;
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
+ for ( var i = 0, l = checkSet.length; i < l; i++ ) {
+ var elem = checkSet[i];
+ if ( elem ) {
+ elem = elem[dir];
+ var match = false;
+
+ while ( elem ) {
+ if ( elem.sizcache === doneName ) {
+ match = checkSet[elem.sizset];
+ break;
+ }
+
+ if ( elem.nodeType === 1 ) {
+ if ( !isXML ) {
+ elem.sizcache = doneName;
+ elem.sizset = i;
+ }
+ if ( typeof cur !== "string" ) {
+ if ( elem === cur ) {
+ match = true;
+ break;
+ }
+
+ } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
+ match = elem;
+ break;
+ }
+ }
+
+ elem = elem[dir];
+ }
+
+ checkSet[i] = match;
+ }
+ }
+}
+
+Sizzle.contains = document.compareDocumentPosition ? function(a, b){
+ return !!(a.compareDocumentPosition(b) & 16);
+} : function(a, b){
+ return a !== b && (a.contains ? a.contains(b) : true);
+};
+
+Sizzle.isXML = function(elem){
+ // documentElement is verified for cases where it doesn't yet exist
+ // (such as loading iframes in IE - #4833)
+ var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
+ return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+var posProcess = function(selector, context){
+ var tmpSet = [], later = "", match,
+ root = context.nodeType ? [context] : context;
+
+ // Position selectors must be done after the filter
+ // And so must :not(positional) so we move all PSEUDOs to the end
+ while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
+ later += match[0];
+ selector = selector.replace( Expr.match.PSEUDO, "" );
+ }
+
+ selector = Expr.relative[selector] ? selector + "*" : selector;
+
+ for ( var i = 0, l = root.length; i < l; i++ ) {
+ Sizzle( selector, root[i], tmpSet );
+ }
+
+ return Sizzle.filter( later, tmpSet );
+};
+
+// EXPOSE
+
+window.tinymce.dom.Sizzle = Sizzle;
+
+})();
+
+
+(function(tinymce) {
+ // Shorten names
+ var each = tinymce.each, DOM = tinymce.DOM, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, Event;
+
+ tinymce.create('tinymce.dom.EventUtils', {
+ EventUtils : function() {
+ this.inits = [];
+ this.events = [];
+ },
+
+ add : function(o, n, f, s) {
+ var cb, t = this, el = t.events, r;
+
+ if (n instanceof Array) {
+ r = [];
+
+ each(n, function(n) {
+ r.push(t.add(o, n, f, s));
+ });
+
+ return r;
+ }
+
+ // Handle array
+ if (o && o.hasOwnProperty && o instanceof Array) {
+ r = [];
+
+ each(o, function(o) {
+ o = DOM.get(o);
+ r.push(t.add(o, n, f, s));
+ });
+
+ return r;
+ }
+
+ o = DOM.get(o);
+
+ if (!o)
+ return;
+
+ // Setup event callback
+ cb = function(e) {
+ // Is all events disabled
+ if (t.disabled)
+ return;
+
+ e = e || window.event;
+
+ // Patch in target, preventDefault and stopPropagation in IE it's W3C valid
+ if (e && isIE) {
+ if (!e.target)
+ e.target = e.srcElement;
+
+ // Patch in preventDefault, stopPropagation methods for W3C compatibility
+ tinymce.extend(e, t._stoppers);
+ }
+
+ if (!s)
+ return f(e);
+
+ return f.call(s, e);
+ };
+
+ if (n == 'unload') {
+ tinymce.unloads.unshift({func : cb});
+ return cb;
+ }
+
+ if (n == 'init') {
+ if (t.domLoaded)
+ cb();
+ else
+ t.inits.push(cb);
+
+ return cb;
+ }
+
+ // Store away listener reference
+ el.push({
+ obj : o,
+ name : n,
+ func : f,
+ cfunc : cb,
+ scope : s
+ });
+
+ t._add(o, n, cb);
+
+ return f;
+ },
+
+ remove : function(o, n, f) {
+ var t = this, a = t.events, s = false, r;
+
+ // Handle array
+ if (o && o.hasOwnProperty && o instanceof Array) {
+ r = [];
+
+ each(o, function(o) {
+ o = DOM.get(o);
+ r.push(t.remove(o, n, f));
+ });
+
+ return r;
+ }
+
+ o = DOM.get(o);
+
+ each(a, function(e, i) {
+ if (e.obj == o && e.name == n && (!f || (e.func == f || e.cfunc == f))) {
+ a.splice(i, 1);
+ t._remove(o, n, e.cfunc);
+ s = true;
+ return false;
+ }
+ });
+
+ return s;
+ },
+
+ clear : function(o) {
+ var t = this, a = t.events, i, e;
+
+ if (o) {
+ o = DOM.get(o);
+
+ for (i = a.length - 1; i >= 0; i--) {
+ e = a[i];
+
+ if (e.obj === o) {
+ t._remove(e.obj, e.name, e.cfunc);
+ e.obj = e.cfunc = null;
+ a.splice(i, 1);
+ }
+ }
+ }
+ },
+
+ cancel : function(e) {
+ if (!e)
+ return false;
+
+ this.stop(e);
+
+ return this.prevent(e);
+ },
+
+ stop : function(e) {
+ if (e.stopPropagation)
+ e.stopPropagation();
+ else
+ e.cancelBubble = true;
+
+ return false;
+ },
+
+ prevent : function(e) {
+ if (e.preventDefault)
+ e.preventDefault();
+ else
+ e.returnValue = false;
+
+ return false;
+ },
+
+ destroy : function() {
+ var t = this;
+
+ each(t.events, function(e, i) {
+ t._remove(e.obj, e.name, e.cfunc);
+ e.obj = e.cfunc = null;
+ });
+
+ t.events = [];
+ t = null;
+ },
+
+ _add : function(o, n, f) {
+ if (o.attachEvent)
+ o.attachEvent('on' + n, f);
+ else if (o.addEventListener)
+ o.addEventListener(n, f, false);
+ else
+ o['on' + n] = f;
+ },
+
+ _remove : function(o, n, f) {
+ if (o) {
+ try {
+ if (o.detachEvent)
+ o.detachEvent('on' + n, f);
+ else if (o.removeEventListener)
+ o.removeEventListener(n, f, false);
+ else
+ o['on' + n] = null;
+ } catch (ex) {
+ // Might fail with permission denined on IE so we just ignore that
+ }
+ }
+ },
+
+ _pageInit : function(win) {
+ var t = this;
+
+ // Keep it from running more than once
+ if (t.domLoaded)
+ return;
+
+ t.domLoaded = true;
+
+ each(t.inits, function(c) {
+ c();
+ });
+
+ t.inits = [];
+ },
+
+ _wait : function(win) {
+ var t = this, doc = win.document;
+
+ // No need since the document is already loaded
+ if (win.tinyMCE_GZ && tinyMCE_GZ.loaded) {
+ t.domLoaded = 1;
+ return;
+ }
+
+ // Use IE method
+ if (doc.attachEvent) {
+ doc.attachEvent("onreadystatechange", function() {
+ if (doc.readyState === "complete") {
+ doc.detachEvent("onreadystatechange", arguments.callee);
+ t._pageInit(win);
+ }
+ });
+
+ if (doc.documentElement.doScroll && win == win.top) {
+ (function() {
+ if (t.domLoaded)
+ return;
+
+ try {
+ // If IE is used, use the trick by Diego Perini licensed under MIT by request to the author.
+ // http://javascript.nwbox.com/IEContentLoaded/
+ doc.documentElement.doScroll("left");
+ } catch (ex) {
+ setTimeout(arguments.callee, 0);
+ return;
+ }
+
+ t._pageInit(win);
+ })();
+ }
+ } else if (doc.addEventListener) {
+ t._add(win, 'DOMContentLoaded', function() {
+ t._pageInit(win);
+ });
+ }
+
+ t._add(win, 'load', function() {
+ t._pageInit(win);
+ });
+ },
+
+ _stoppers : {
+ preventDefault : function() {
+ this.returnValue = false;
+ },
+
+ stopPropagation : function() {
+ this.cancelBubble = true;
+ }
+ }
+ });
+
+ Event = tinymce.dom.Event = new tinymce.dom.EventUtils();
+
+ // Dispatch DOM content loaded event for IE and Safari
+ Event._wait(window);
+
+ tinymce.addUnload(function() {
+ Event.destroy();
+ });
+})(tinymce);
+
+(function(tinymce) {
+ tinymce.dom.Element = function(id, settings) {
+ var t = this, dom, el;
+
+ t.settings = settings = settings || {};
+ t.id = id;
+ t.dom = dom = settings.dom || tinymce.DOM;
+
+ // Only IE leaks DOM references, this is a lot faster
+ if (!tinymce.isIE)
+ el = dom.get(t.id);
+
+ tinymce.each(
+ ('getPos,getRect,getParent,add,setStyle,getStyle,setStyles,' +
+ 'setAttrib,setAttribs,getAttrib,addClass,removeClass,' +
+ 'hasClass,getOuterHTML,setOuterHTML,remove,show,hide,' +
+ 'isHidden,setHTML,get').split(/,/)
+ , function(k) {
+ t[k] = function() {
+ var a = [id], i;
+
+ for (i = 0; i < arguments.length; i++)
+ a.push(arguments[i]);
+
+ a = dom[k].apply(dom, a);
+ t.update(k);
+
+ return a;
+ };
+ });
+
+ tinymce.extend(t, {
+ on : function(n, f, s) {
+ return tinymce.dom.Event.add(t.id, n, f, s);
+ },
+
+ getXY : function() {
+ return {
+ x : parseInt(t.getStyle('left')),
+ y : parseInt(t.getStyle('top'))
+ };
+ },
+
+ getSize : function() {
+ var n = dom.get(t.id);
+
+ return {
+ w : parseInt(t.getStyle('width') || n.clientWidth),
+ h : parseInt(t.getStyle('height') || n.clientHeight)
+ };
+ },
+
+ moveTo : function(x, y) {
+ t.setStyles({left : x, top : y});
+ },
+
+ moveBy : function(x, y) {
+ var p = t.getXY();
+
+ t.moveTo(p.x + x, p.y + y);
+ },
+
+ resizeTo : function(w, h) {
+ t.setStyles({width : w, height : h});
+ },
+
+ resizeBy : function(w, h) {
+ var s = t.getSize();
+
+ t.resizeTo(s.w + w, s.h + h);
+ },
+
+ update : function(k) {
+ var b;
+
+ if (tinymce.isIE6 && settings.blocker) {
+ k = k || '';
+
+ // Ignore getters
+ if (k.indexOf('get') === 0 || k.indexOf('has') === 0 || k.indexOf('is') === 0)
+ return;
+
+ // Remove blocker on remove
+ if (k == 'remove') {
+ dom.remove(t.blocker);
+ return;
+ }
+
+ if (!t.blocker) {
+ t.blocker = dom.uniqueId();
+ b = dom.add(settings.container || dom.getRoot(), 'iframe', {id : t.blocker, style : 'position:absolute;', frameBorder : 0, src : 'javascript:""'});
+ dom.setStyle(b, 'opacity', 0);
+ } else
+ b = dom.get(t.blocker);
+
+ dom.setStyles(b, {
+ left : t.getStyle('left', 1),
+ top : t.getStyle('top', 1),
+ width : t.getStyle('width', 1),
+ height : t.getStyle('height', 1),
+ display : t.getStyle('display', 1),
+ zIndex : parseInt(t.getStyle('zIndex', 1) || 0) - 1
+ });
+ }
+ }
+ });
+ };
+})(tinymce);
+
+(function(tinymce) {
+ function trimNl(s) {
+ return s.replace(/[\n\r]+/g, '');
+ };
+
+ // Shorten names
+ var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each;
+
+ tinymce.create('tinymce.dom.Selection', {
+ Selection : function(dom, win, serializer) {
+ var t = this;
+
+ t.dom = dom;
+ t.win = win;
+ t.serializer = serializer;
+
+ // Add events
+ each([
+ 'onBeforeSetContent',
+
+ 'onBeforeGetContent',
+
+ 'onSetContent',
+
+ 'onGetContent'
+ ], function(e) {
+ t[e] = new tinymce.util.Dispatcher(t);
+ });
+
+ // No W3C Range support
+ if (!t.win.getSelection)
+ t.tridentSel = new tinymce.dom.TridentSelection(t);
+
+ if (tinymce.isIE && dom.boxModel)
+ this._fixIESelection();
+
+ // Prevent leaks
+ tinymce.addUnload(t.destroy, t);
+ },
+
+ setCursorLocation: function(node, offset) {
+ var t = this; var r = t.dom.createRng();
+ r.setStart(node, offset);
+ r.setEnd(node, offset);
+ t.setRng(r);
+ t.collapse(false);
+ },
+ getContent : function(s) {
+ var t = this, r = t.getRng(), e = t.dom.create("body"), se = t.getSel(), wb, wa, n;
+
+ s = s || {};
+ wb = wa = '';
+ s.get = true;
+ s.format = s.format || 'html';
+ s.forced_root_block = '';
+ t.onBeforeGetContent.dispatch(t, s);
+
+ if (s.format == 'text')
+ return t.isCollapsed() ? '' : (r.text || (se.toString ? se.toString() : ''));
+
+ if (r.cloneContents) {
+ n = r.cloneContents();
+
+ if (n)
+ e.appendChild(n);
+ } else if (is(r.item) || is(r.htmlText)) {
+ // IE will produce invalid markup if elements are present that
+ // it doesn't understand like custom elements or HTML5 elements.
+ // Adding a BR in front of the contents and then remoiving it seems to fix it though.
+ e.innerHTML = '<br>' + (r.item ? r.item(0).outerHTML : r.htmlText);
+ e.removeChild(e.firstChild);
+ } else
+ e.innerHTML = r.toString();
+
+ // Keep whitespace before and after
+ if (/^\s/.test(e.innerHTML))
+ wb = ' ';
+
+ if (/\s+$/.test(e.innerHTML))
+ wa = ' ';
+
+ s.getInner = true;
+
+ s.content = t.isCollapsed() ? '' : wb + t.serializer.serialize(e, s) + wa;
+ t.onGetContent.dispatch(t, s);
+
+ return s.content;
+ },
+
+ setContent : function(content, args) {
+ var self = this, rng = self.getRng(), caretNode, doc = self.win.document, frag, temp;
+
+ args = args || {format : 'html'};
+ args.set = true;
+ content = args.content = content;
+
+ // Dispatch before set content event
+ if (!args.no_events)
+ self.onBeforeSetContent.dispatch(self, args);
+
+ content = args.content;
+
+ if (rng.insertNode) {
+ // Make caret marker since insertNode places the caret in the beginning of text after insert
+ content += '<span id="__caret">_</span>';
+
+ // Delete and insert new node
+ if (rng.startContainer == doc && rng.endContainer == doc) {
+ // WebKit will fail if the body is empty since the range is then invalid and it can't insert contents
+ doc.body.innerHTML = content;
+ } else {
+ rng.deleteContents();
+
+ if (doc.body.childNodes.length == 0) {
+ doc.body.innerHTML = content;
+ } else {
+ // createContextualFragment doesn't exists in IE 9 DOMRanges
+ if (rng.createContextualFragment) {
+ rng.insertNode(rng.createContextualFragment(content));
+ } else {
+ // Fake createContextualFragment call in IE 9
+ frag = doc.createDocumentFragment();
+ temp = doc.createElement('div');
+
+ frag.appendChild(temp);
+ temp.outerHTML = content;
+
+ rng.insertNode(frag);
+ }
+ }
+ }
+
+ // Move to caret marker
+ caretNode = self.dom.get('__caret');
+
+ // Make sure we wrap it compleatly, Opera fails with a simple select call
+ rng = doc.createRange();
+ rng.setStartBefore(caretNode);
+ rng.setEndBefore(caretNode);
+ self.setRng(rng);
+
+ // Remove the caret position
+ self.dom.remove('__caret');
+
+ try {
+ self.setRng(rng);
+ } catch (ex) {
+ // Might fail on Opera for some odd reason
+ }
+ } else {
+ if (rng.item) {
+ // Delete content and get caret text selection
+ doc.execCommand('Delete', false, null);
+ rng = self.getRng();
+ }
+
+ // Explorer removes spaces from the beginning of pasted contents
+ if (/^\s+/.test(content)) {
+ rng.pasteHTML('<span id="__mce_tmp">_</span>' + content);
+ self.dom.remove('__mce_tmp');
+ } else
+ rng.pasteHTML(content);
+ }
+
+ // Dispatch set content event
+ if (!args.no_events)
+ self.onSetContent.dispatch(self, args);
+ },
+
+ getStart : function() {
+ var rng = this.getRng(), startElement, parentElement, checkRng, node;
+
+ if (rng.duplicate || rng.item) {
+ // Control selection, return first item
+ if (rng.item)
+ return rng.item(0);
+
+ // Get start element
+ checkRng = rng.duplicate();
+ checkRng.collapse(1);
+ startElement = checkRng.parentElement();
+
+ // Check if range parent is inside the start element, then return the inner parent element
+ // This will fix issues when a single element is selected, IE would otherwise return the wrong start element
+ parentElement = node = rng.parentElement();
+ while (node = node.parentNode) {
+ if (node == startElement) {
+ startElement = parentElement;
+ break;
+ }
+ }
+
+ return startElement;
+ } else {
+ startElement = rng.startContainer;
+
+ if (startElement.nodeType == 1 && startElement.hasChildNodes())
+ startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)];
+
+ if (startElement && startElement.nodeType == 3)
+ return startElement.parentNode;
+
+ return startElement;
+ }
+ },
+
+ getEnd : function() {
+ var t = this, r = t.getRng(), e, eo;
+
+ if (r.duplicate || r.item) {
+ if (r.item)
+ return r.item(0);
+
+ r = r.duplicate();
+ r.collapse(0);
+ e = r.parentElement();
+
+ if (e && e.nodeName == 'BODY')
+ return e.lastChild || e;
+
+ return e;
+ } else {
+ e = r.endContainer;
+ eo = r.endOffset;
+
+ if (e.nodeType == 1 && e.hasChildNodes())
+ e = e.childNodes[eo > 0 ? eo - 1 : eo];
+
+ if (e && e.nodeType == 3)
+ return e.parentNode;
+
+ return e;
+ }
+ },
+
+ getBookmark : function(type, normalized) {
+ var t = this, dom = t.dom, rng, rng2, id, collapsed, name, element, index, chr = '\uFEFF', styles;
+
+ function findIndex(name, element) {
+ var index = 0;
+
+ each(dom.select(name), function(node, i) {
+ if (node == element)
+ index = i;
+ });
+
+ return index;
+ };
+
+ if (type == 2) {
+ function getLocation() {
+ var rng = t.getRng(true), root = dom.getRoot(), bookmark = {};
+
+ function getPoint(rng, start) {
+ var container = rng[start ? 'startContainer' : 'endContainer'],
+ offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0;
+
+ if (container.nodeType == 3) {
+ if (normalized) {
+ for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling)
+ offset += node.nodeValue.length;
+ }
+
+ point.push(offset);
+ } else {
+ childNodes = container.childNodes;
+
+ if (offset >= childNodes.length && childNodes.length) {
+ after = 1;
+ offset = Math.max(0, childNodes.length - 1);
+ }
+
+ point.push(t.dom.nodeIndex(childNodes[offset], normalized) + after);
+ }
+
+ for (; container && container != root; container = container.parentNode)
+ point.push(t.dom.nodeIndex(container, normalized));
+
+ return point;
+ };
+
+ bookmark.start = getPoint(rng, true);
+
+ if (!t.isCollapsed())
+ bookmark.end = getPoint(rng);
+
+ return bookmark;
+ };
+
+ if (t.tridentSel)
+ return t.tridentSel.getBookmark(type);
+
+ return getLocation();
+ }
+
+ // Handle simple range
+ if (type)
+ return {rng : t.getRng()};
+
+ rng = t.getRng();
+ id = dom.uniqueId();
+ collapsed = tinyMCE.activeEditor.selection.isCollapsed();
+ styles = 'overflow:hidden;line-height:0px';
+
+ // Explorer method
+ if (rng.duplicate || rng.item) {
+ // Text selection
+ if (!rng.item) {
+ rng2 = rng.duplicate();
+
+ try {
+ // Insert start marker
+ rng.collapse();
+ rng.pasteHTML('<span data-mce-type="bookmark" id="' + id + '_start" style="' + styles + '">' + chr + '</span>');
+
+ // Insert end marker
+ if (!collapsed) {
+ rng2.collapse(false);
+
+ // Detect the empty space after block elements in IE and move the end back one character <p></p>] becomes <p>]</p>
+ rng.moveToElementText(rng2.parentElement());
+ if (rng.compareEndPoints('StartToEnd', rng2) == 0)
+ rng2.move('character', -1);
+
+ rng2.pasteHTML('<span data-mce-type="bookmark" id="' + id + '_end" style="' + styles + '">' + chr + '</span>');
+ }
+ } catch (ex) {
+ // IE might throw unspecified error so lets ignore it
+ return null;
+ }
+ } else {
+ // Control selection
+ element = rng.item(0);
+ name = element.nodeName;
+
+ return {name : name, index : findIndex(name, element)};
+ }
+ } else {
+ element = t.getNode();
+ name = element.nodeName;
+ if (name == 'IMG')
+ return {name : name, index : findIndex(name, element)};
+
+ // W3C method
+ rng2 = rng.cloneRange();
+
+ // Insert end marker
+ if (!collapsed) {
+ rng2.collapse(false);
+ rng2.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_end', style : styles}, chr));
+ }
+
+ rng.collapse(true);
+ rng.insertNode(dom.create('span', {'data-mce-type' : "bookmark", id : id + '_start', style : styles}, chr));
+ }
+
+ t.moveToBookmark({id : id, keep : 1});
+
+ return {id : id};
+ },
+
+ moveToBookmark : function(bookmark) {
+ var t = this, dom = t.dom, marker1, marker2, rng, root, startContainer, endContainer, startOffset, endOffset;
+
+ if (bookmark) {
+ if (bookmark.start) {
+ rng = dom.createRng();
+ root = dom.getRoot();
+
+ function setEndPoint(start) {
+ var point = bookmark[start ? 'start' : 'end'], i, node, offset, children;
+
+ if (point) {
+ offset = point[0];
+
+ // Find container node
+ for (node = root, i = point.length - 1; i >= 1; i--) {
+ children = node.childNodes;
+
+ if (point[i] > children.length - 1)
+ return;
+
+ node = children[point[i]];
+ }
+
+ // Move text offset to best suitable location
+ if (node.nodeType === 3)
+ offset = Math.min(point[0], node.nodeValue.length);
+
+ // Move element offset to best suitable location
+ if (node.nodeType === 1)
+ offset = Math.min(point[0], node.childNodes.length);
+
+ // Set offset within container node
+ if (start)
+ rng.setStart(node, offset);
+ else
+ rng.setEnd(node, offset);
+ }
+
+ return true;
+ };
+
+ if (t.tridentSel)
+ return t.tridentSel.moveToBookmark(bookmark);
+
+ if (setEndPoint(true) && setEndPoint()) {
+ t.setRng(rng);
+ }
+ } else if (bookmark.id) {
+ function restoreEndPoint(suffix) {
+ var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep;
+
+ if (marker) {
+ node = marker.parentNode;
+
+ if (suffix == 'start') {
+ if (!keep) {
+ idx = dom.nodeIndex(marker);
+ } else {
+ node = marker.firstChild;
+ idx = 1;
+ }
+
+ startContainer = endContainer = node;
+ startOffset = endOffset = idx;
+ } else {
+ if (!keep) {
+ idx = dom.nodeIndex(marker);
+ } else {
+ node = marker.firstChild;
+ idx = 1;
+ }
+
+ endContainer = node;
+ endOffset = idx;
+ }
+
+ if (!keep) {
+ prev = marker.previousSibling;
+ next = marker.nextSibling;
+
+ // Remove all marker text nodes
+ each(tinymce.grep(marker.childNodes), function(node) {
+ if (node.nodeType == 3)
+ node.nodeValue = node.nodeValue.replace(/\uFEFF/g, '');
+ });
+
+ // Remove marker but keep children if for example contents where inserted into the marker
+ // Also remove duplicated instances of the marker for example by a split operation or by WebKit auto split on paste feature
+ while (marker = dom.get(bookmark.id + '_' + suffix))
+ dom.remove(marker, 1);
+
+ // If siblings are text nodes then merge them unless it's Opera since it some how removes the node
+ // 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
+ if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3 && !tinymce.isOpera) {
+ idx = prev.nodeValue.length;
+ prev.appendData(next.nodeValue);
+ dom.remove(next);
+
+ if (suffix == 'start') {
+ startContainer = endContainer = prev;
+ startOffset = endOffset = idx;
+ } else {
+ endContainer = prev;
+ endOffset = idx;
+ }
+ }
+ }
+ }
+ };
+
+ function addBogus(node) {
+ // Adds a bogus BR element for empty block elements or just a space on IE since it renders BR elements incorrectly
+ if (dom.isBlock(node) && !node.innerHTML)
+ node.innerHTML = !isIE ? '<br data-mce-bogus="1" />' : ' ';
+
+ return node;
+ };
+
+ // Restore start/end points
+ restoreEndPoint('start');
+ restoreEndPoint('end');
+
+ if (startContainer) {
+ rng = dom.createRng();
+ rng.setStart(addBogus(startContainer), startOffset);
+ rng.setEnd(addBogus(endContainer), endOffset);
+ t.setRng(rng);
+ }
+ } else if (bookmark.name) {
+ t.select(dom.select(bookmark.name)[bookmark.index]);
+ } else if (bookmark.rng)
+ t.setRng(bookmark.rng);
+ }
+ },
+
+ select : function(node, content) {
+ var t = this, dom = t.dom, rng = dom.createRng(), idx;
+
+ if (node) {
+ idx = dom.nodeIndex(node);
+ rng.setStart(node.parentNode, idx);
+ rng.setEnd(node.parentNode, idx + 1);
+
+ // Find first/last text node or BR element
+ if (content) {
+ function setPoint(node, start) {
+ var walker = new tinymce.dom.TreeWalker(node, node);
+
+ do {
+ // Text node
+ if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {
+ if (start)
+ rng.setStart(node, 0);
+ else
+ rng.setEnd(node, node.nodeValue.length);
+
+ return;
+ }
+
+ // BR element
+ if (node.nodeName == 'BR') {
+ if (start)
+ rng.setStartBefore(node);
+ else
+ rng.setEndBefore(node);
+
+ return;
+ }
+ } while (node = (start ? walker.next() : walker.prev()));
+ };
+
+ setPoint(node, 1);
+ setPoint(node);
+ }
+
+ t.setRng(rng);
+ }
+
+ return node;
+ },
+
+ isCollapsed : function() {
+ var t = this, r = t.getRng(), s = t.getSel();
+
+ if (!r || r.item)
+ return false;
+
+ if (r.compareEndPoints)
+ return r.compareEndPoints('StartToEnd', r) === 0;
+
+ return !s || r.collapsed;
+ },
+
+ collapse : function(to_start) {
+ var self = this, rng = self.getRng(), node;
+
+ // Control range on IE
+ if (rng.item) {
+ node = rng.item(0);
+ rng = self.win.document.body.createTextRange();
+ rng.moveToElementText(node);
+ }
+
+ rng.collapse(!!to_start);
+ self.setRng(rng);
+ },
+
+ getSel : function() {
+ var t = this, w = this.win;
+
+ return w.getSelection ? w.getSelection() : w.document.selection;
+ },
+
+ getRng : function(w3c) {
+ var t = this, s, r, elm, doc = t.win.document;
+
+ // Found tridentSel object then we need to use that one
+ if (w3c && t.tridentSel)
+ return t.tridentSel.getRangeAt(0);
+
+ try {
+ if (s = t.getSel())
+ r = s.rangeCount > 0 ? s.getRangeAt(0) : (s.createRange ? s.createRange() : doc.createRange());
+ } catch (ex) {
+ // IE throws unspecified error here if TinyMCE is placed in a frame/iframe
+ }
+
+ // We have W3C ranges and it's IE then fake control selection since IE9 doesn't handle that correctly yet
+ if (tinymce.isIE && r && r.setStart && doc.selection.createRange().item) {
+ elm = doc.selection.createRange().item(0);
+ r = doc.createRange();
+ r.setStartBefore(elm);
+ r.setEndAfter(elm);
+ }
+
+ // No range found then create an empty one
+ // This can occur when the editor is placed in a hidden container element on Gecko
+ // Or on IE when there was an exception
+ if (!r)
+ r = doc.createRange ? doc.createRange() : doc.body.createTextRange();
+
+ if (t.selectedRange && t.explicitRange) {
+ if (r.compareBoundaryPoints(r.START_TO_START, t.selectedRange) === 0 && r.compareBoundaryPoints(r.END_TO_END, t.selectedRange) === 0) {
+ // Safari, Opera and Chrome only ever select text which causes the range to change.
+ // This lets us use the originally set range if the selection hasn't been changed by the user.
+ r = t.explicitRange;
+ } else {
+ t.selectedRange = null;
+ t.explicitRange = null;
+ }
+ }
+
+ return r;
+ },
+
+ setRng : function(r) {
+ var s, t = this;
+
+ if (!t.tridentSel) {
+ s = t.getSel();
+
+ if (s) {
+ t.explicitRange = r;
+
+ try {
+ s.removeAllRanges();
+ } catch (ex) {
+ // IE9 might throw errors here don't know why
+ }
+
+ s.addRange(r);
+ t.selectedRange = s.getRangeAt(0);
+ }
+ } else {
+ // Is W3C Range
+ if (r.cloneRange) {
+ t.tridentSel.addRange(r);
+ return;
+ }
+
+ // Is IE specific range
+ try {
+ r.select();
+ } catch (ex) {
+ // Needed for some odd IE bug #1843306
+ }
+ }
+ },
+
+ setNode : function(n) {
+ var t = this;
+
+ t.setContent(t.dom.getOuterHTML(n));
+
+ return n;
+ },
+
+ getNode : function() {
+ var t = this, rng = t.getRng(), sel = t.getSel(), elm, start = rng.startContainer, end = rng.endContainer;
+
+ // Range maybe lost after the editor is made visible again
+ if (!rng)
+ return t.dom.getRoot();
+
+ if (rng.setStart) {
+ elm = rng.commonAncestorContainer;
+
+ // Handle selection a image or other control like element such as anchors
+ if (!rng.collapsed) {
+ if (rng.startContainer == rng.endContainer) {
+ if (rng.endOffset - rng.startOffset < 2) {
+ if (rng.startContainer.hasChildNodes())
+ elm = rng.startContainer.childNodes[rng.startOffset];
+ }
+ }
+
+ // If the anchor node is a element instead of a text node then return this element
+ //if (tinymce.isWebKit && sel.anchorNode && sel.anchorNode.nodeType == 1)
+ // return sel.anchorNode.childNodes[sel.anchorOffset];
+
+ // Handle cases where the selection is immediately wrapped around a node and return that node instead of it's parent.
+ // This happens when you double click an underlined word in FireFox.
+ if (start.nodeType === 3 && end.nodeType === 3) {
+ function skipEmptyTextNodes(n, forwards) {
+ var orig = n;
+ while (n && n.nodeType === 3 && n.length === 0) {
+ n = forwards ? n.nextSibling : n.previousSibling;
+ }
+ return n || orig;
+ }
+ if (start.length === rng.startOffset) {
+ start = skipEmptyTextNodes(start.nextSibling, true);
+ } else {
+ start = start.parentNode;
+ }
+ if (rng.endOffset === 0) {
+ end = skipEmptyTextNodes(end.previousSibling, false);
+ } else {
+ end = end.parentNode;
+ }
+
+ if (start && start === end)
+ return start;
+ }
+ }
+
+ if (elm && elm.nodeType == 3)
+ return elm.parentNode;
+
+ return elm;
+ }
+
+ return rng.item ? rng.item(0) : rng.parentElement();
+ },
+
+ getSelectedBlocks : function(st, en) {
+ var t = this, dom = t.dom, sb, eb, n, bl = [];
+
+ sb = dom.getParent(st || t.getStart(), dom.isBlock);
+ eb = dom.getParent(en || t.getEnd(), dom.isBlock);
+
+ if (sb)
+ bl.push(sb);
+
+ if (sb && eb && sb != eb) {
+ n = sb;
+
+ var walker = new tinymce.dom.TreeWalker(sb, dom.getRoot());
+ while ((n = walker.next()) && n != eb) {
+ if (dom.isBlock(n))
+ bl.push(n);
+ }
+ }
+
+ if (eb && sb != eb)
+ bl.push(eb);
+
+ return bl;
+ },
+
+ normalize : function() {
+ var self = this, rng, normalized;
+
+ // Normalize only on non IE browsers for now
+ if (tinymce.isIE)
+ return;
+
+ function normalizeEndPoint(start) {
+ var container, offset, walker, dom = self.dom, body = dom.getRoot(), node;
+
+ container = rng[(start ? 'start' : 'end') + 'Container'];
+ offset = rng[(start ? 'start' : 'end') + 'Offset'];
+
+ // If the container is a document move it to the body element
+ if (container.nodeType === 9) {
+ container = container.body;
+ offset = 0;
+ }
+
+ // If the container is body try move it into the closest text node or position
+ // TODO: Add more logic here to handle element selection cases
+ if (container === body) {
+ // Resolve the index
+ if (container.hasChildNodes()) {
+ container = container.childNodes[Math.min(!start && offset > 0 ? offset - 1 : offset, container.childNodes.length - 1)];
+ offset = 0;
+
+ // Don't walk into elements that doesn't have any child nodes like a IMG
+ if (container.hasChildNodes()) {
+ // Walk the DOM to find a text node to place the caret at or a BR
+ node = container;
+ walker = new tinymce.dom.TreeWalker(container, body);
+ do {
+ // Found a text node use that position
+ if (node.nodeType === 3) {
+ offset = start ? 0 : node.nodeValue.length - 1;
+ container = node;
+ break;
+ }
+
+ // Found a BR element that we can place the caret before
+ if (node.nodeName === 'BR') {
+ offset = dom.nodeIndex(node);
+ container = node.parentNode;
+ break;
+ }
+ } while (node = (start ? walker.next() : walker.prev()));
+
+ normalized = true;
+ }
+ }
+ }
+
+ // Set endpoint if it was normalized
+ if (normalized)
+ rng['set' + (start ? 'Start' : 'End')](container, offset);
+ };
+
+ rng = self.getRng();
+
+ // Normalize the end points
+ normalizeEndPoint(true);
+
+ if (rng.collapsed)
+ normalizeEndPoint();
+
+ // Set the selection if it was normalized
+ if (normalized) {
+ //console.log(self.dom.dumpRng(rng));
+ self.setRng(rng);
+ }
+ },
+
+ destroy : function(s) {
+ var t = this;
+
+ t.win = null;
+
+ // Manual destroy then remove unload handler
+ if (!s)
+ tinymce.removeUnload(t.destroy);
+ },
+
+ // IE has an issue where you can't select/move the caret by clicking outside the body if the document is in standards mode
+ _fixIESelection : function() {
+ var dom = this.dom, doc = dom.doc, body = doc.body, started, startRng, htmlElm;
+
+ // Make HTML element unselectable since we are going to handle selection by hand
+ doc.documentElement.unselectable = true;
+
+ // Return range from point or null if it failed
+ function rngFromPoint(x, y) {
+ var rng = body.createTextRange();
+
+ try {
+ rng.moveToPoint(x, y);
+ } catch (ex) {
+ // IE sometimes throws and exception, so lets just ignore it
+ rng = null;
+ }
+
+ return rng;
+ };
+
+ // Fires while the selection is changing
+ function selectionChange(e) {
+ var pointRng;
+
+ // Check if the button is down or not
+ if (e.button) {
+ // Create range from mouse position
+ pointRng = rngFromPoint(e.x, e.y);
+
+ if (pointRng) {
+ // Check if pointRange is before/after selection then change the endPoint
+ if (pointRng.compareEndPoints('StartToStart', startRng) > 0)
+ pointRng.setEndPoint('StartToStart', startRng);
+ else
+ pointRng.setEndPoint('EndToEnd', startRng);
+
+ pointRng.select();
+ }
+ } else
+ endSelection();
+ }
+
+ // Removes listeners
+ function endSelection() {
+ var rng = doc.selection.createRange();
+
+ // If the range is collapsed then use the last start range
+ if (startRng && !rng.item && rng.compareEndPoints('StartToEnd', rng) === 0)
+ startRng.select();
+
+ dom.unbind(doc, 'mouseup', endSelection);
+ dom.unbind(doc, 'mousemove', selectionChange);
+ startRng = started = 0;
+ };
+
+ // Detect when user selects outside BODY
+ dom.bind(doc, ['mousedown', 'contextmenu'], function(e) {
+ if (e.target.nodeName === 'HTML') {
+ if (started)
+ endSelection();
+
+ // Detect vertical scrollbar, since IE will fire a mousedown on the scrollbar and have target set as HTML
+ htmlElm = doc.documentElement;
+ if (htmlElm.scrollHeight > htmlElm.clientHeight)
+ return;
+
+ started = 1;
+ // Setup start position
+ startRng = rngFromPoint(e.x, e.y);
+ if (startRng) {
+ // Listen for selection change events
+ dom.bind(doc, 'mouseup', endSelection);
+ dom.bind(doc, 'mousemove', selectionChange);
+
+ dom.win.focus();
+ startRng.select();
+ }
+ }
+ });
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ tinymce.dom.Serializer = function(settings, dom, schema) {
+ var onPreProcess, onPostProcess, isIE = tinymce.isIE, each = tinymce.each, htmlParser;
+
+ // Support the old apply_source_formatting option
+ if (!settings.apply_source_formatting)
+ settings.indent = false;
+
+ settings.remove_trailing_brs = true;
+
+ // Default DOM and Schema if they are undefined
+ dom = dom || tinymce.DOM;
+ schema = schema || new tinymce.html.Schema(settings);
+ settings.entity_encoding = settings.entity_encoding || 'named';
+
+ onPreProcess = new tinymce.util.Dispatcher(self);
+
+ onPostProcess = new tinymce.util.Dispatcher(self);
+
+ htmlParser = new tinymce.html.DomParser(settings, schema);
+
+ // Convert move data-mce-src, data-mce-href and data-mce-style into nodes or process them if needed
+ htmlParser.addAttributeFilter('src,href,style', function(nodes, name) {
+ var i = nodes.length, node, value, internalName = 'data-mce-' + name, urlConverter = settings.url_converter, urlConverterScope = settings.url_converter_scope, undef;
+
+ while (i--) {
+ node = nodes[i];
+
+ value = node.attributes.map[internalName];
+ if (value !== undef) {
+ // Set external name to internal value and remove internal
+ node.attr(name, value.length > 0 ? value : null);
+ node.attr(internalName, null);
+ } else {
+ // No internal attribute found then convert the value we have in the DOM
+ value = node.attributes.map[name];
+
+ if (name === "style")
+ value = dom.serializeStyle(dom.parseStyle(value), node.name);
+ else if (urlConverter)
+ value = urlConverter.call(urlConverterScope, value, name, node.name);
+
+ node.attr(name, value.length > 0 ? value : null);
+ }
+ }
+ });
+
+ // Remove internal classes mceItem<..>
+ htmlParser.addAttributeFilter('class', function(nodes, name) {
+ var i = nodes.length, node, value;
+
+ while (i--) {
+ node = nodes[i];
+ value = node.attr('class').replace(/\s*mce(Item\w+|Selected)\s*/g, '');
+ node.attr('class', value.length > 0 ? value : null);
+ }
+ });
+
+ // Remove bookmark elements
+ htmlParser.addAttributeFilter('data-mce-type', function(nodes, name, args) {
+ var i = nodes.length, node;
+
+ while (i--) {
+ node = nodes[i];
+
+ if (node.attributes.map['data-mce-type'] === 'bookmark' && !args.cleanup)
+ node.remove();
+ }
+ });
+
+ // Force script into CDATA sections and remove the mce- prefix also add comments around styles
+ htmlParser.addNodeFilter('script,style', function(nodes, name) {
+ var i = nodes.length, node, value;
+
+ function trim(value) {
+ return value.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 (i--) {
+ node = nodes[i];
+ value = node.firstChild ? node.firstChild.value : '';
+
+ if (name === "script") {
+ // Remove mce- prefix from script elements
+ node.attr('type', (node.attr('type') || 'text/javascript').replace(/^mce\-/, ''));
+
+ if (value.length > 0)
+ node.firstChild.value = '// <![CDATA[\n' + trim(value) + '\n// ]]>';
+ } else {
+ if (value.length > 0)
+ node.firstChild.value = '<!--\n' + trim(value) + '\n-->';
+ }
+ }
+ });
+
+ // Convert comments to cdata and handle protected comments
+ htmlParser.addNodeFilter('#comment', function(nodes, name) {
+ var i = nodes.length, node;
+
+ while (i--) {
+ node = nodes[i];
+
+ if (node.value.indexOf('[CDATA[') === 0) {
+ node.name = '#cdata';
+ node.type = 4;
+ node.value = node.value.replace(/^\[CDATA\[|\]\]$/g, '');
+ } else if (node.value.indexOf('mce:protected ') === 0) {
+ node.name = "#text";
+ node.type = 3;
+ node.raw = true;
+ node.value = unescape(node.value).substr(14);
+ }
+ }
+ });
+
+ htmlParser.addNodeFilter('xml:namespace,input', function(nodes, name) {
+ var i = nodes.length, node;
+
+ while (i--) {
+ node = nodes[i];
+ if (node.type === 7)
+ node.remove();
+ else if (node.type === 1) {
+ if (name === "input" && !("type" in node.attributes.map))
+ node.attr('type', 'text');
+ }
+ }
+ });
+
+ // Fix list elements, TODO: Replace this later
+ if (settings.fix_list_elements) {
+ htmlParser.addNodeFilter('ul,ol', function(nodes, name) {
+ var i = nodes.length, node, parentNode;
+
+ while (i--) {
+ node = nodes[i];
+ parentNode = node.parent;
+
+ if (parentNode.name === 'ul' || parentNode.name === 'ol') {
+ if (node.prev && node.prev.name === 'li') {
+ node.prev.append(node);
+ }
+ }
+ }
+ });
+ }
+
+ // Remove internal data attributes
+ htmlParser.addAttributeFilter('data-mce-src,data-mce-href,data-mce-style', function(nodes, name) {
+ var i = nodes.length;
+
+ while (i--) {
+ nodes[i].attr(name, null);
+ }
+ });
+
+ // Return public methods
+ return {
+ schema : schema,
+
+ addNodeFilter : htmlParser.addNodeFilter,
+
+ addAttributeFilter : htmlParser.addAttributeFilter,
+
+ onPreProcess : onPreProcess,
+
+ onPostProcess : onPostProcess,
+
+ serialize : function(node, args) {
+ var impl, doc, oldDoc, htmlSerializer, content;
+
+ // Explorer won't clone contents of script and style and the
+ // selected index of select elements are cleared on a clone operation.
+ if (isIE && dom.select('script,style,select,map').length > 0) {
+ content = node.innerHTML;
+ node = node.cloneNode(false);
+ dom.setHTML(node, content);
+ } else
+ node = node.cloneNode(true);
+
+ // Nodes needs to be attached to something in WebKit/Opera
+ // Older builds of Opera crashes if you attach the node to an document created dynamically
+ // and since we can't feature detect a crash we need to sniff the acutal build number
+ // This fix will make DOM ranges and make Sizzle happy!
+ impl = node.ownerDocument.implementation;
+ if (impl.createHTMLDocument) {
+ // Create an empty HTML document
+ doc = impl.createHTMLDocument("");
+
+ // Add the element or it's children if it's a body element to the new document
+ each(node.nodeName == 'BODY' ? node.childNodes : [node], function(node) {
+ doc.body.appendChild(doc.importNode(node, true));
+ });
+
+ // Grab first child or body element for serialization
+ if (node.nodeName != 'BODY')
+ node = doc.body.firstChild;
+ else
+ node = doc.body;
+
+ // set the new document in DOMUtils so createElement etc works
+ oldDoc = dom.doc;
+ dom.doc = doc;
+ }
+
+ args = args || {};
+ args.format = args.format || 'html';
+
+ // Pre process
+ if (!args.no_events) {
+ args.node = node;
+ onPreProcess.dispatch(self, args);
+ }
+
+ // Setup serializer
+ htmlSerializer = new tinymce.html.Serializer(settings, schema);
+
+ // Parse and serialize HTML
+ args.content = htmlSerializer.serialize(
+ htmlParser.parse(args.getInner ? node.innerHTML : tinymce.trim(dom.getOuterHTML(node), args), args)
+ );
+
+ // Replace all BOM characters for now until we can find a better solution
+ if (!args.cleanup)
+ args.content = args.content.replace(/\uFEFF|\u200B/g, '');
+
+ // Post process
+ if (!args.no_events)
+ onPostProcess.dispatch(self, args);
+
+ // Restore the old document if it was changed
+ if (oldDoc)
+ dom.doc = oldDoc;
+
+ args.node = null;
+
+ return args.content;
+ },
+
+ addRules : function(rules) {
+ schema.addValidElements(rules);
+ },
+
+ setRules : function(rules) {
+ schema.setValidElements(rules);
+ }
+ };
+ };
+})(tinymce);
+(function(tinymce) {
+ tinymce.dom.ScriptLoader = function(settings) {
+ var QUEUED = 0,
+ LOADING = 1,
+ LOADED = 2,
+ states = {},
+ queue = [],
+ scriptLoadedCallbacks = {},
+ queueLoadedCallbacks = [],
+ loading = 0,
+ undefined;
+
+ function loadScript(url, callback) {
+ var t = this, dom = tinymce.DOM, elm, uri, loc, id;
+
+ // Execute callback when script is loaded
+ function done() {
+ dom.remove(id);
+
+ if (elm)
+ elm.onreadystatechange = elm.onload = elm = null;
+
+ callback();
+ };
+
+ function error() {
+ // Report the error so it's easier for people to spot loading errors
+ if (typeof(console) !== "undefined" && console.log)
+ console.log("Failed to load: " + url);
+
+ // We can't mark it as done if there is a load error since
+ // A) We don't want to produce 404 errors on the server and
+ // B) the onerror event won't fire on all browsers.
+ // done();
+ };
+
+ id = dom.uniqueId();
+
+ if (tinymce.isIE6) {
+ uri = new tinymce.util.URI(url);
+ loc = location;
+
+ // If script is from same domain and we
+ // use IE 6 then use XHR since it's more reliable
+ if (uri.host == loc.hostname && uri.port == loc.port && (uri.protocol + ':') == loc.protocol && uri.protocol.toLowerCase() != 'file') {
+ tinymce.util.XHR.send({
+ url : tinymce._addVer(uri.getURI()),
+ success : function(content) {
+ // Create new temp script element
+ var script = dom.create('script', {
+ type : 'text/javascript'
+ });
+
+ // Evaluate script in global scope
+ script.text = content;
+ document.getElementsByTagName('head')[0].appendChild(script);
+ dom.remove(script);
+
+ done();
+ },
+
+ error : error
+ });
+
+ return;
+ }
+ }
+
+ // Create new script element
+ elm = dom.create('script', {
+ id : id,
+ type : 'text/javascript',
+ src : tinymce._addVer(url)
+ });
+
+ // Add onload listener for non IE browsers since IE9
+ // fires onload event before the script is parsed and executed
+ if (!tinymce.isIE)
+ elm.onload = done;
+
+ // Add onerror event will get fired on some browsers but not all of them
+ elm.onerror = error;
+
+ // Opera 9.60 doesn't seem to fire the onreadystate event at correctly
+ if (!tinymce.isOpera) {
+ elm.onreadystatechange = function() {
+ var state = elm.readyState;
+
+ // Loaded state is passed on IE 6 however there
+ // are known issues with this method but we can't use
+ // XHR in a cross domain loading
+ if (state == 'complete' || state == 'loaded')
+ done();
+ };
+ }
+
+ // Most browsers support this feature so we report errors
+ // for those at least to help users track their missing plugins etc
+ // todo: Removed since it produced error if the document is unloaded by navigating away, re-add it as an option
+ /*elm.onerror = function() {
+ alert('Failed to load: ' + url);
+ };*/
+
+ // Add script to document
+ (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);
+ };
+
+ this.isDone = function(url) {
+ return states[url] == LOADED;
+ };
+
+ this.markDone = function(url) {
+ states[url] = LOADED;
+ };
+
+ this.add = this.load = function(url, callback, scope) {
+ var item, state = states[url];
+
+ // Add url to load queue
+ if (state == undefined) {
+ queue.push(url);
+ states[url] = QUEUED;
+ }
+
+ if (callback) {
+ // Store away callback for later execution
+ if (!scriptLoadedCallbacks[url])
+ scriptLoadedCallbacks[url] = [];
+
+ scriptLoadedCallbacks[url].push({
+ func : callback,
+ scope : scope || this
+ });
+ }
+ };
+
+ this.loadQueue = function(callback, scope) {
+ this.loadScripts(queue, callback, scope);
+ };
+
+ this.loadScripts = function(scripts, callback, scope) {
+ var loadScripts;
+
+ function execScriptLoadedCallbacks(url) {
+ // Execute URL callback functions
+ tinymce.each(scriptLoadedCallbacks[url], function(callback) {
+ callback.func.call(callback.scope);
+ });
+
+ scriptLoadedCallbacks[url] = undefined;
+ };
+
+ queueLoadedCallbacks.push({
+ func : callback,
+ scope : scope || this
+ });
+
+ loadScripts = function() {
+ var loadingScripts = tinymce.grep(scripts);
+
+ // Current scripts has been handled
+ scripts.length = 0;
+
+ // Load scripts that needs to be loaded
+ tinymce.each(loadingScripts, function(url) {
+ // Script is already loaded then execute script callbacks directly
+ if (states[url] == LOADED) {
+ execScriptLoadedCallbacks(url);
+ return;
+ }
+
+ // Is script not loading then start loading it
+ if (states[url] != LOADING) {
+ states[url] = LOADING;
+ loading++;
+
+ loadScript(url, function() {
+ states[url] = LOADED;
+ loading--;
+
+ execScriptLoadedCallbacks(url);
+
+ // Load more scripts if they where added by the recently loaded script
+ loadScripts();
+ });
+ }
+ });
+
+ // No scripts are currently loading then execute all pending queue loaded callbacks
+ if (!loading) {
+ tinymce.each(queueLoadedCallbacks, function(callback) {
+ callback.func.call(callback.scope);
+ });
+
+ queueLoadedCallbacks.length = 0;
+ }
+ };
+
+ loadScripts();
+ };
+ };
+
+ // Global script loader
+ tinymce.ScriptLoader = new tinymce.dom.ScriptLoader();
+})(tinymce);
+
+tinymce.dom.TreeWalker = function(start_node, root_node) {
+ var node = start_node;
+
+ function findSibling(node, start_name, sibling_name, shallow) {
+ var sibling, parent;
+
+ if (node) {
+ // Walk into nodes if it has a start
+ if (!shallow && node[start_name])
+ return node[start_name];
+
+ // Return the sibling if it has one
+ if (node != root_node) {
+ sibling = node[sibling_name];
+ if (sibling)
+ return sibling;
+
+ // Walk up the parents to look for siblings
+ for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) {
+ sibling = parent[sibling_name];
+ if (sibling)
+ return sibling;
+ }
+ }
+ }
+ };
+
+ this.current = function() {
+ return node;
+ };
+
+ this.next = function(shallow) {
+ return (node = findSibling(node, 'firstChild', 'nextSibling', shallow));
+ };
+
+ this.prev = function(shallow) {
+ return (node = findSibling(node, 'lastChild', 'previousSibling', shallow));
+ };
+};
+
+(function(tinymce) {
+ tinymce.dom.RangeUtils = function(dom) {
+ var INVISIBLE_CHAR = '\uFEFF';
+
+ this.walk = function(rng, callback) {
+ var startContainer = rng.startContainer,
+ startOffset = rng.startOffset,
+ endContainer = rng.endContainer,
+ endOffset = rng.endOffset,
+ ancestor, startPoint,
+ endPoint, node, parent, siblings, nodes;
+
+ // Handle table cell selection the table plugin enables
+ // you to fake select table cells and perform formatting actions on them
+ nodes = dom.select('td.mceSelected,th.mceSelected');
+ if (nodes.length > 0) {
+ tinymce.each(nodes, function(node) {
+ callback([node]);
+ });
+
+ return;
+ }
+
+ function exclude(nodes) {
+ var node;
+
+ // First node is excluded
+ node = nodes[0];
+ if (node.nodeType === 3 && node === startContainer && startOffset >= node.nodeValue.length) {
+ nodes.splice(0, 1);
+ }
+
+ // Last node is excluded
+ node = nodes[nodes.length - 1];
+ if (endOffset === 0 && nodes.length > 0 && node === endContainer && node.nodeType === 3) {
+ nodes.splice(nodes.length - 1, 1);
+ }
+
+ return nodes;
+ };
+
+ function collectSiblings(node, name, end_node) {
+ var siblings = [];
+
+ for (; node && node != end_node; node = node[name])
+ siblings.push(node);
+
+ return siblings;
+ };
+
+ function findEndPoint(node, root) {
+ do {
+ if (node.parentNode == root)
+ return node;
+
+ node = node.parentNode;
+ } while(node);
+ };
+
+ function walkBoundary(start_node, end_node, next) {
+ var siblingName = next ? 'nextSibling' : 'previousSibling';
+
+ for (node = start_node, parent = node.parentNode; node && node != end_node; node = parent) {
+ parent = node.parentNode;
+ siblings = collectSiblings(node == start_node ? node : node[siblingName], siblingName);
+
+ if (siblings.length) {
+ if (!next)
+ siblings.reverse();
+
+ callback(exclude(siblings));
+ }
+ }
+ };
+
+ // If index based start position then resolve it
+ if (startContainer.nodeType == 1 && startContainer.hasChildNodes())
+ startContainer = startContainer.childNodes[startOffset];
+
+ // If index based end position then resolve it
+ if (endContainer.nodeType == 1 && endContainer.hasChildNodes())
+ endContainer = endContainer.childNodes[Math.min(endOffset - 1, endContainer.childNodes.length - 1)];
+
+ // Same container
+ if (startContainer == endContainer)
+ return callback(exclude([startContainer]));
+
+ // Find common ancestor and end points
+ ancestor = dom.findCommonAncestor(startContainer, endContainer);
+
+ // Process left side
+ for (node = startContainer; node; node = node.parentNode) {
+ if (node === endContainer)
+ return walkBoundary(startContainer, ancestor, true);
+
+ if (node === ancestor)
+ break;
+ }
+
+ // Process right side
+ for (node = endContainer; node; node = node.parentNode) {
+ if (node === startContainer)
+ return walkBoundary(endContainer, ancestor);
+
+ if (node === ancestor)
+ break;
+ }
+
+ // Find start/end point
+ startPoint = findEndPoint(startContainer, ancestor) || startContainer;
+ endPoint = findEndPoint(endContainer, ancestor) || endContainer;
+
+ // Walk left leaf
+ walkBoundary(startContainer, startPoint, true);
+
+ // Walk the middle from start to end point
+ siblings = collectSiblings(
+ startPoint == startContainer ? startPoint : startPoint.nextSibling,
+ 'nextSibling',
+ endPoint == endContainer ? endPoint.nextSibling : endPoint
+ );
+
+ if (siblings.length)
+ callback(exclude(siblings));
+
+ // Walk right leaf
+ walkBoundary(endContainer, endPoint);
+ };
+
+ this.split = function(rng) {
+ var startContainer = rng.startContainer,
+ startOffset = rng.startOffset,
+ endContainer = rng.endContainer,
+ endOffset = rng.endOffset;
+
+ function splitText(node, offset) {
+ return node.splitText(offset);
+ };
+
+ // Handle single text node
+ if (startContainer == endContainer && startContainer.nodeType == 3) {
+ if (startOffset > 0 && startOffset < startContainer.nodeValue.length) {
+ endContainer = splitText(startContainer, startOffset);
+ startContainer = endContainer.previousSibling;
+
+ if (endOffset > startOffset) {
+ endOffset = endOffset - startOffset;
+ startContainer = endContainer = splitText(endContainer, endOffset).previousSibling;
+ endOffset = endContainer.nodeValue.length;
+ startOffset = 0;
+ } else {
+ endOffset = 0;
+ }
+ }
+ } else {
+ // Split startContainer text node if needed
+ if (startContainer.nodeType == 3 && startOffset > 0 && startOffset < startContainer.nodeValue.length) {
+ startContainer = splitText(startContainer, startOffset);
+ startOffset = 0;
+ }
+
+ // Split endContainer text node if needed
+ if (endContainer.nodeType == 3 && endOffset > 0 && endOffset < endContainer.nodeValue.length) {
+ endContainer = splitText(endContainer, endOffset).previousSibling;
+ endOffset = endContainer.nodeValue.length;
+ }
+ }
+
+ return {
+ startContainer : startContainer,
+ startOffset : startOffset,
+ endContainer : endContainer,
+ endOffset : endOffset
+ };
+ };
+
+ };
+
+ tinymce.dom.RangeUtils.compareRanges = function(rng1, rng2) {
+ if (rng1 && rng2) {
+ // Compare native IE ranges
+ if (rng1.item || rng1.duplicate) {
+ // Both are control ranges and the selected element matches
+ if (rng1.item && rng2.item && rng1.item(0) === rng2.item(0))
+ return true;
+
+ // Both are text ranges and the range matches
+ if (rng1.isEqual && rng2.isEqual && rng2.isEqual(rng1))
+ return true;
+ } else {
+ // Compare w3c ranges
+ return rng1.startContainer == rng2.startContainer && rng1.startOffset == rng2.startOffset;
+ }
+ }
+
+ return false;
+ };
+})(tinymce);
+
+(function(tinymce) {
+ var Event = tinymce.dom.Event, each = tinymce.each;
+
+ tinymce.create('tinymce.ui.KeyboardNavigation', {
+ KeyboardNavigation: function(settings, dom) {
+ var t = this, root = settings.root, items = settings.items,
+ enableUpDown = settings.enableUpDown, enableLeftRight = settings.enableLeftRight || !settings.enableUpDown,
+ excludeFromTabOrder = settings.excludeFromTabOrder,
+ itemFocussed, itemBlurred, rootKeydown, rootFocussed, focussedId;
+
+ dom = dom || tinymce.DOM;
+
+ itemFocussed = function(evt) {
+ focussedId = evt.target.id;
+ };
+
+ itemBlurred = function(evt) {
+ dom.setAttrib(evt.target.id, 'tabindex', '-1');
+ };
+
+ rootFocussed = function(evt) {
+ var item = dom.get(focussedId);
+ dom.setAttrib(item, 'tabindex', '0');
+ item.focus();
+ };
+
+ t.focus = function() {
+ dom.get(focussedId).focus();
+ };
+
+ t.destroy = function() {
+ each(items, function(item) {
+ dom.unbind(dom.get(item.id), 'focus', itemFocussed);
+ dom.unbind(dom.get(item.id), 'blur', itemBlurred);
+ });
+
+ dom.unbind(dom.get(root), 'focus', rootFocussed);
+ dom.unbind(dom.get(root), 'keydown', rootKeydown);
+
+ items = dom = root = t.focus = itemFocussed = itemBlurred = rootKeydown = rootFocussed = null;
+ t.destroy = function() {};
+ };
+
+ t.moveFocus = function(dir, evt) {
+ var idx = -1, controls = t.controls, newFocus;
+
+ if (!focussedId)
+ return;
+
+ each(items, function(item, index) {
+ if (item.id === focussedId) {
+ idx = index;
+ return false;
+ }
+ });
+
+ idx += dir;
+ if (idx < 0) {
+ idx = items.length - 1;
+ } else if (idx >= items.length) {
+ idx = 0;
+ }
+
+ newFocus = items[idx];
+ dom.setAttrib(focussedId, 'tabindex', '-1');
+ dom.setAttrib(newFocus.id, 'tabindex', '0');
+ dom.get(newFocus.id).focus();
+
+ if (settings.actOnFocus) {
+ settings.onAction(newFocus.id);
+ }
+
+ if (evt)
+ Event.cancel(evt);
+ };
+
+ rootKeydown = function(evt) {
+ 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;
+
+ switch (evt.keyCode) {
+ case DOM_VK_LEFT:
+ if (enableLeftRight) t.moveFocus(-1);
+ break;
+
+ case DOM_VK_RIGHT:
+ if (enableLeftRight) t.moveFocus(1);
+ break;
+
+ case DOM_VK_UP:
+ if (enableUpDown) t.moveFocus(-1);
+ break;
+
+ case DOM_VK_DOWN:
+ if (enableUpDown) t.moveFocus(1);
+ break;
+
+ case DOM_VK_ESCAPE:
+ if (settings.onCancel) {
+ settings.onCancel();
+ Event.cancel(evt);
+ }
+ break;
+
+ case DOM_VK_ENTER:
+ case DOM_VK_RETURN:
+ case DOM_VK_SPACE:
+ if (settings.onAction) {
+ settings.onAction(focussedId);
+ Event.cancel(evt);
+ }
+ break;
+ }
+ };
+
+ // Set up state and listeners for each item.
+ each(items, function(item, idx) {
+ var tabindex;
+
+ if (!item.id) {
+ item.id = dom.uniqueId('_mce_item_');
+ }
+
+ if (excludeFromTabOrder) {
+ dom.bind(item.id, 'blur', itemBlurred);
+ tabindex = '-1';
+ } else {
+ tabindex = (idx === 0 ? '0' : '-1');
+ }
+
+ dom.setAttrib(item.id, 'tabindex', tabindex);
+ dom.bind(dom.get(item.id), 'focus', itemFocussed);
+ });
+
+ // Setup initial state for root element.
+ if (items[0]){
+ focussedId = items[0].id;
+ }
+
+ dom.setAttrib(root, 'tabindex', '-1');
+
+ // Setup listeners for root element.
+ dom.bind(dom.get(root), 'focus', rootFocussed);
+ dom.bind(dom.get(root), 'keydown', rootKeydown);
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ // Shorten class names
+ var DOM = tinymce.DOM, is = tinymce.is;
+
+ tinymce.create('tinymce.ui.Control', {
+ Control : function(id, s, editor) {
+ this.id = id;
+ this.settings = s = s || {};
+ this.rendered = false;
+ this.onRender = new tinymce.util.Dispatcher(this);
+ this.classPrefix = '';
+ this.scope = s.scope || this;
+ this.disabled = 0;
+ this.active = 0;
+ this.editor = editor;
+ },
+
+ setAriaProperty : function(property, value) {
+ var element = DOM.get(this.id + '_aria') || DOM.get(this.id);
+ if (element) {
+ DOM.setAttrib(element, 'aria-' + property, !!value);
+ }
+ },
+
+ focus : function() {
+ DOM.get(this.id).focus();
+ },
+
+ setDisabled : function(s) {
+ if (s != this.disabled) {
+ this.setAriaProperty('disabled', s);
+
+ this.setState('Disabled', s);
+ this.setState('Enabled', !s);
+ this.disabled = s;
+ }
+ },
+
+ isDisabled : function() {
+ return this.disabled;
+ },
+
+ setActive : function(s) {
+ if (s != this.active) {
+ this.setState('Active', s);
+ this.active = s;
+ this.setAriaProperty('pressed', s);
+ }
+ },
+
+ isActive : function() {
+ return this.active;
+ },
+
+ setState : function(c, s) {
+ var n = DOM.get(this.id);
+
+ c = this.classPrefix + c;
+
+ if (s)
+ DOM.addClass(n, c);
+ else
+ DOM.removeClass(n, c);
+ },
+
+ isRendered : function() {
+ return this.rendered;
+ },
+
+ renderHTML : function() {
+ },
+
+ renderTo : function(n) {
+ DOM.setHTML(n, this.renderHTML());
+ },
+
+ postRender : function() {
+ var t = this, b;
+
+ // Set pending states
+ if (is(t.disabled)) {
+ b = t.disabled;
+ t.disabled = -1;
+ t.setDisabled(b);
+ }
+
+ if (is(t.active)) {
+ b = t.active;
+ t.active = -1;
+ t.setActive(b);
+ }
+ },
+
+ remove : function() {
+ DOM.remove(this.id);
+ this.destroy();
+ },
+
+ destroy : function() {
+ tinymce.dom.Event.clear(this.id);
+ }
+ });
+})(tinymce);
+tinymce.create('tinymce.ui.Container:tinymce.ui.Control', {
+ Container : function(id, s, editor) {
+ this.parent(id, s, editor);
+
+ this.controls = [];
+
+ this.lookup = {};
+ },
+
+ add : function(c) {
+ this.lookup[c.id] = c;
+ this.controls.push(c);
+
+ return c;
+ },
+
+ get : function(n) {
+ return this.lookup[n];
+ }
+});
+
+
+tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
+ Separator : function(id, s) {
+ this.parent(id, s);
+ this.classPrefix = 'mceSeparator';
+ this.setDisabled(true);
+ },
+
+ renderHTML : function() {
+ return tinymce.DOM.createHTML('span', {'class' : this.classPrefix, role : 'separator', 'aria-orientation' : 'vertical', tabindex : '-1'});
+ }
+});
+
+(function(tinymce) {
+ var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;
+
+ tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control', {
+ MenuItem : function(id, s) {
+ this.parent(id, s);
+ this.classPrefix = 'mceMenuItem';
+ },
+
+ setSelected : function(s) {
+ this.setState('Selected', s);
+ this.setAriaProperty('checked', !!s);
+ this.selected = s;
+ },
+
+ isSelected : function() {
+ return this.selected;
+ },
+
+ postRender : function() {
+ var t = this;
+
+ t.parent();
+
+ // Set pending state
+ if (is(t.selected))
+ t.setSelected(t.selected);
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;
+
+ tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem', {
+ Menu : function(id, s) {
+ var t = this;
+
+ t.parent(id, s);
+ t.items = {};
+ t.collapsed = false;
+ t.menuCount = 0;
+ t.onAddItem = new tinymce.util.Dispatcher(this);
+ },
+
+ expand : function(d) {
+ var t = this;
+
+ if (d) {
+ walk(t, function(o) {
+ if (o.expand)
+ o.expand();
+ }, 'items', t);
+ }
+
+ t.collapsed = false;
+ },
+
+ collapse : function(d) {
+ var t = this;
+
+ if (d) {
+ walk(t, function(o) {
+ if (o.collapse)
+ o.collapse();
+ }, 'items', t);
+ }
+
+ t.collapsed = true;
+ },
+
+ isCollapsed : function() {
+ return this.collapsed;
+ },
+
+ add : function(o) {
+ if (!o.settings)
+ o = new tinymce.ui.MenuItem(o.id || DOM.uniqueId(), o);
+
+ this.onAddItem.dispatch(this, o);
+
+ return this.items[o.id] = o;
+ },
+
+ addSeparator : function() {
+ return this.add({separator : true});
+ },
+
+ addMenu : function(o) {
+ if (!o.collapse)
+ o = this.createMenu(o);
+
+ this.menuCount++;
+
+ return this.add(o);
+ },
+
+ hasMenus : function() {
+ return this.menuCount !== 0;
+ },
+
+ remove : function(o) {
+ delete this.items[o.id];
+ },
+
+ removeAll : function() {
+ var t = this;
+
+ walk(t, function(o) {
+ if (o.removeAll)
+ o.removeAll();
+ else
+ o.remove();
+
+ o.destroy();
+ }, 'items', t);
+
+ t.items = {};
+ },
+
+ createMenu : function(o) {
+ var m = new tinymce.ui.Menu(o.id || DOM.uniqueId(), o);
+
+ m.onAddItem.add(this.onAddItem.dispatch, this.onAddItem);
+
+ return m;
+ }
+ });
+})(tinymce);
+(function(tinymce) {
+ var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event, Element = tinymce.dom.Element;
+
+ tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu', {
+ DropMenu : function(id, s) {
+ s = s || {};
+ s.container = s.container || DOM.doc.body;
+ s.offset_x = s.offset_x || 0;
+ s.offset_y = s.offset_y || 0;
+ s.vp_offset_x = s.vp_offset_x || 0;
+ s.vp_offset_y = s.vp_offset_y || 0;
+
+ if (is(s.icons) && !s.icons)
+ s['class'] += ' mceNoIcons';
+
+ this.parent(id, s);
+ this.onShowMenu = new tinymce.util.Dispatcher(this);
+ this.onHideMenu = new tinymce.util.Dispatcher(this);
+ this.classPrefix = 'mceMenu';
+ },
+
+ createMenu : function(s) {
+ var t = this, cs = t.settings, m;
+
+ s.container = s.container || cs.container;
+ s.parent = t;
+ s.constrain = s.constrain || cs.constrain;
+ s['class'] = s['class'] || cs['class'];
+ s.vp_offset_x = s.vp_offset_x || cs.vp_offset_x;
+ s.vp_offset_y = s.vp_offset_y || cs.vp_offset_y;
+ s.keyboard_focus = cs.keyboard_focus;
+ m = new tinymce.ui.DropMenu(s.id || DOM.uniqueId(), s);
+
+ m.onAddItem.add(t.onAddItem.dispatch, t.onAddItem);
+
+ return m;
+ },
+
+ focus : function() {
+ var t = this;
+ if (t.keyboardNav) {
+ t.keyboardNav.focus();
+ }
+ },
+
+ update : function() {
+ var t = this, s = t.settings, tb = DOM.get('menu_' + t.id + '_tbl'), co = DOM.get('menu_' + t.id + '_co'), tw, th;
+
+ tw = s.max_width ? Math.min(tb.clientWidth, s.max_width) : tb.clientWidth;
+ th = s.max_height ? Math.min(tb.clientHeight, s.max_height) : tb.clientHeight;
+
+ if (!DOM.boxModel)
+ t.element.setStyles({width : tw + 2, height : th + 2});
+ else
+ t.element.setStyles({width : tw, height : th});
+
+ if (s.max_width)
+ DOM.setStyle(co, 'width', tw);
+
+ if (s.max_height) {
+ DOM.setStyle(co, 'height', th);
+
+ if (tb.clientHeight < s.max_height)
+ DOM.setStyle(co, 'overflow', 'hidden');
+ }
+ },
+
+ showMenu : function(x, y, px) {
+ var t = this, s = t.settings, co, vp = DOM.getViewPort(), w, h, mx, my, ot = 2, dm, tb, cp = t.classPrefix;
+
+ t.collapse(1);
+
+ if (t.isMenuVisible)
+ return;
+
+ if (!t.rendered) {
+ co = DOM.add(t.settings.container, t.renderNode());
+
+ each(t.items, function(o) {
+ o.postRender();
+ });
+
+ t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});
+ } else
+ co = DOM.get('menu_' + t.id);
+
+ // Move layer out of sight unless it's Opera since it scrolls to top of page due to an bug
+ if (!tinymce.isOpera)
+ DOM.setStyles(co, {left : -0xFFFF , top : -0xFFFF});
+
+ DOM.show(co);
+ t.update();
+
+ x += s.offset_x || 0;
+ y += s.offset_y || 0;
+ vp.w -= 4;
+ vp.h -= 4;
+
+ // Move inside viewport if not submenu
+ if (s.constrain) {
+ w = co.clientWidth - ot;
+ h = co.clientHeight - ot;
+ mx = vp.x + vp.w;
+ my = vp.y + vp.h;
+
+ if ((x + s.vp_offset_x + w) > mx)
+ x = px ? px - w : Math.max(0, (mx - s.vp_offset_x) - w);
+
+ if ((y + s.vp_offset_y + h) > my)
+ y = Math.max(0, (my - s.vp_offset_y) - h);
+ }
+
+ DOM.setStyles(co, {left : x , top : y});
+ t.element.update();
+
+ t.isMenuVisible = 1;
+ t.mouseClickFunc = Event.add(co, 'click', function(e) {
+ var m;
+
+ e = e.target;
+
+ if (e && (e = DOM.getParent(e, 'tr')) && !DOM.hasClass(e, cp + 'ItemSub')) {
+ m = t.items[e.id];
+
+ if (m.isDisabled())
+ return;
+
+ dm = t;
+
+ while (dm) {
+ if (dm.hideMenu)
+ dm.hideMenu();
+
+ dm = dm.settings.parent;
+ }
+
+ if (m.settings.onclick)
+ m.settings.onclick(e);
+
+ return Event.cancel(e); // Cancel to fix onbeforeunload problem
+ }
+ });
+
+ if (t.hasMenus()) {
+ t.mouseOverFunc = Event.add(co, 'mouseover', function(e) {
+ var m, r, mi;
+
+ e = e.target;
+ if (e && (e = DOM.getParent(e, 'tr'))) {
+ m = t.items[e.id];
+
+ if (t.lastMenu)
+ t.lastMenu.collapse(1);
+
+ if (m.isDisabled())
+ return;
+
+ if (e && DOM.hasClass(e, cp + 'ItemSub')) {
+ //p = DOM.getPos(s.container);
+ r = DOM.getRect(e);
+ m.showMenu((r.x + r.w - ot), r.y - ot, r.x);
+ t.lastMenu = m;
+ DOM.addClass(DOM.get(m.id).firstChild, cp + 'ItemActive');
+ }
+ }
+ });
+ }
+
+ Event.add(co, 'keydown', t._keyHandler, t);
+
+ t.onShowMenu.dispatch(t);
+
+ if (s.keyboard_focus) {
+ t._setupKeyboardNav();
+ }
+ },
+
+ hideMenu : function(c) {
+ var t = this, co = DOM.get('menu_' + t.id), e;
+
+ if (!t.isMenuVisible)
+ return;
+
+ if (t.keyboardNav) t.keyboardNav.destroy();
+ Event.remove(co, 'mouseover', t.mouseOverFunc);
+ Event.remove(co, 'click', t.mouseClickFunc);
+ Event.remove(co, 'keydown', t._keyHandler);
+ DOM.hide(co);
+ t.isMenuVisible = 0;
+
+ if (!c)
+ t.collapse(1);
+
+ if (t.element)
+ t.element.hide();
+
+ if (e = DOM.get(t.id))
+ DOM.removeClass(e.firstChild, t.classPrefix + 'ItemActive');
+
+ t.onHideMenu.dispatch(t);
+ },
+
+ add : function(o) {
+ var t = this, co;
+
+ o = t.parent(o);
+
+ if (t.isRendered && (co = DOM.get('menu_' + t.id)))
+ t._add(DOM.select('tbody', co)[0], o);
+
+ return o;
+ },
+
+ collapse : function(d) {
+ this.parent(d);
+ this.hideMenu(1);
+ },
+
+ remove : function(o) {
+ DOM.remove(o.id);
+ this.destroy();
+
+ return this.parent(o);
+ },
+
+ destroy : function() {
+ var t = this, co = DOM.get('menu_' + t.id);
+
+ if (t.keyboardNav) t.keyboardNav.destroy();
+ Event.remove(co, 'mouseover', t.mouseOverFunc);
+ Event.remove(DOM.select('a', co), 'focus', t.mouseOverFunc);
+ Event.remove(co, 'click', t.mouseClickFunc);
+ Event.remove(co, 'keydown', t._keyHandler);
+
+ if (t.element)
+ t.element.remove();
+
+ DOM.remove(co);
+ },
+
+ renderNode : function() {
+ var t = this, s = t.settings, n, tb, co, w;
+
+ 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'});
+ if (t.settings.parent) {
+ DOM.setAttrib(w, 'aria-parent', 'menu_' + t.settings.parent.id);
+ }
+ co = DOM.add(w, 'div', {role: 'presentation', id : 'menu_' + t.id + '_co', 'class' : t.classPrefix + (s['class'] ? ' ' + s['class'] : '')});
+ t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});
+
+ if (s.menu_line)
+ DOM.add(co, 'span', {'class' : t.classPrefix + 'Line'});
+
+// n = DOM.add(co, 'div', {id : 'menu_' + t.id + '_co', 'class' : 'mceMenuContainer'});
+ n = DOM.add(co, 'table', {role: 'presentation', id : 'menu_' + t.id + '_tbl', border : 0, cellPadding : 0, cellSpacing : 0});
+ tb = DOM.add(n, 'tbody');
+
+ each(t.items, function(o) {
+ t._add(tb, o);
+ });
+
+ t.rendered = true;
+
+ return w;
+ },
+
+ // Internal functions
+ _setupKeyboardNav : function(){
+ var contextMenu, menuItems, t=this;
+ contextMenu = DOM.select('#menu_' + t.id)[0];
+ menuItems = DOM.select('a[role=option]', 'menu_' + t.id);
+ menuItems.splice(0,0,contextMenu);
+ t.keyboardNav = new tinymce.ui.KeyboardNavigation({
+ root: 'menu_' + t.id,
+ items: menuItems,
+ onCancel: function() {
+ t.hideMenu();
+ },
+ enableUpDown: true
+ });
+ contextMenu.focus();
+ },
+
+ _keyHandler : function(evt) {
+ var t = this, e;
+ switch (evt.keyCode) {
+ case 37: // Left
+ if (t.settings.parent) {
+ t.hideMenu();
+ t.settings.parent.focus();
+ Event.cancel(evt);
+ }
+ break;
+ case 39: // Right
+ if (t.mouseOverFunc)
+ t.mouseOverFunc(evt);
+ break;
+ }
+ },
+
+ _add : function(tb, o) {
+ var n, s = o.settings, a, ro, it, cp = this.classPrefix, ic;
+
+ if (s.separator) {
+ ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'ItemSeparator'});
+ DOM.add(ro, 'td', {'class' : cp + 'ItemSeparator'});
+
+ if (n = ro.previousSibling)
+ DOM.addClass(n, 'mceLast');
+
+ return;
+ }
+
+ n = ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'Item ' + cp + 'ItemEnabled'});
+ n = it = DOM.add(n, s.titleItem ? 'th' : 'td');
+ n = a = DOM.add(n, 'a', {id: o.id + '_aria', role: s.titleItem ? 'presentation' : 'option', href : 'javascript:;', onclick : "return false;", onmousedown : 'return false;'});
+
+ if (s.parent) {
+ DOM.setAttrib(a, 'aria-haspopup', 'true');
+ DOM.setAttrib(a, 'aria-owns', 'menu_' + o.id);
+ }
+
+ DOM.addClass(it, s['class']);
+// n = DOM.add(n, 'span', {'class' : 'item'});
+
+ ic = DOM.add(n, 'span', {'class' : 'mceIcon' + (s.icon ? ' mce_' + s.icon : '')});
+
+ if (s.icon_src)
+ DOM.add(ic, 'img', {src : s.icon_src});
+
+ n = DOM.add(n, s.element || 'span', {'class' : 'mceText', title : o.settings.title}, o.settings.title);
+
+ if (o.settings.style)
+ DOM.setAttrib(n, 'style', o.settings.style);
+
+ if (tb.childNodes.length == 1)
+ DOM.addClass(ro, 'mceFirst');
+
+ if ((n = ro.previousSibling) && DOM.hasClass(n, cp + 'ItemSeparator'))
+ DOM.addClass(ro, 'mceFirst');
+
+ if (o.collapse)
+ DOM.addClass(ro, cp + 'ItemSub');
+
+ if (n = ro.previousSibling)
+ DOM.removeClass(n, 'mceLast');
+
+ DOM.addClass(ro, 'mceLast');
+ }
+ });
+})(tinymce);
+(function(tinymce) {
+ var DOM = tinymce.DOM;
+
+ tinymce.create('tinymce.ui.Button:tinymce.ui.Control', {
+ Button : function(id, s, ed) {
+ this.parent(id, s, ed);
+ this.classPrefix = 'mceButton';
+ },
+
+ renderHTML : function() {
+ var cp = this.classPrefix, s = this.settings, h, l;
+
+ l = DOM.encode(s.label || '');
+ 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) + '">';
+ if (s.image && !(this.editor &&this.editor.forcedHighContrastMode) )
+ h += '<img class="mceIcon" src="' + s.image + '" alt="' + DOM.encode(s.title) + '" />' + l;
+ else
+ h += '<span class="mceIcon ' + s['class'] + '"></span>' + (l ? '<span class="' + cp + 'Label">' + l + '</span>' : '');
+
+ h += '<span class="mceVoiceLabel mceIconOnly" style="display: none;" id="' + this.id + '_voice">' + s.title + '</span>';
+ h += '</a>';
+ return h;
+ },
+
+ postRender : function() {
+ var t = this, s = t.settings;
+
+ tinymce.dom.Event.add(t.id, 'click', function(e) {
+ if (!t.isDisabled())
+ return s.onclick.call(s.scope, e);
+ });
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;
+
+ tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control', {
+ ListBox : function(id, s, ed) {
+ var t = this;
+
+ t.parent(id, s, ed);
+
+ t.items = [];
+
+ t.onChange = new Dispatcher(t);
+
+ t.onPostRender = new Dispatcher(t);
+
+ t.onAdd = new Dispatcher(t);
+
+ t.onRenderMenu = new tinymce.util.Dispatcher(this);
+
+ t.classPrefix = 'mceListBox';
+ },
+
+ select : function(va) {
+ var t = this, fv, f;
+
+ if (va == undefined)
+ return t.selectByIndex(-1);
+
+ // Is string or number make function selector
+ if (va && va.call)
+ f = va;
+ else {
+ f = function(v) {
+ return v == va;
+ };
+ }
+
+ // Do we need to do something?
+ if (va != t.selectedValue) {
+ // Find item
+ each(t.items, function(o, i) {
+ if (f(o.value)) {
+ fv = 1;
+ t.selectByIndex(i);
+ return false;
+ }
+ });
+
+ if (!fv)
+ t.selectByIndex(-1);
+ }
+ },
+
+ selectByIndex : function(idx) {
+ var t = this, e, o, label;
+
+ if (idx != t.selectedIndex) {
+ e = DOM.get(t.id + '_text');
+ label = DOM.get(t.id + '_voiceDesc');
+ o = t.items[idx];
+
+ if (o) {
+ t.selectedValue = o.value;
+ t.selectedIndex = idx;
+ DOM.setHTML(e, DOM.encode(o.title));
+ DOM.setHTML(label, t.settings.title + " - " + o.title);
+ DOM.removeClass(e, 'mceTitle');
+ DOM.setAttrib(t.id, 'aria-valuenow', o.title);
+ } else {
+ DOM.setHTML(e, DOM.encode(t.settings.title));
+ DOM.setHTML(label, DOM.encode(t.settings.title));
+ DOM.addClass(e, 'mceTitle');
+ t.selectedValue = t.selectedIndex = null;
+ DOM.setAttrib(t.id, 'aria-valuenow', t.settings.title);
+ }
+ e = 0;
+ }
+ },
+
+ add : function(n, v, o) {
+ var t = this;
+
+ o = o || {};
+ o = tinymce.extend(o, {
+ title : n,
+ value : v
+ });
+
+ t.items.push(o);
+ t.onAdd.dispatch(t, o);
+ },
+
+ getLength : function() {
+ return this.items.length;
+ },
+
+ renderHTML : function() {
+ var h = '', t = this, s = t.settings, cp = t.classPrefix;
+
+ h = '<span role="listbox" aria-haspopup="true" aria-labelledby="' + t.id +'_voiceDesc" 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>';
+ h += '<td>' + DOM.createHTML('span', {id: t.id + '_voiceDesc', 'class': 'voiceLabel', style:'display:none;'}, t.settings.title);
+ 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>';
+ 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>';
+ h += '</tr></tbody></table></span>';
+
+ return h;
+ },
+
+ showMenu : function() {
+ var t = this, p2, e = DOM.get(this.id), m;
+
+ if (t.isDisabled() || t.items.length == 0)
+ return;
+
+ if (t.menu && t.menu.isMenuVisible)
+ return t.hideMenu();
+
+ if (!t.isMenuRendered) {
+ t.renderMenu();
+ t.isMenuRendered = true;
+ }
+
+ p2 = DOM.getPos(e);
+
+ m = t.menu;
+ m.settings.offset_x = p2.x;
+ m.settings.offset_y = p2.y;
+ m.settings.keyboard_focus = !tinymce.isOpera; // Opera is buggy when it comes to auto focus
+
+ // Select in menu
+ if (t.oldID)
+ m.items[t.oldID].setSelected(0);
+
+ each(t.items, function(o) {
+ if (o.value === t.selectedValue) {
+ m.items[o.id].setSelected(1);
+ t.oldID = o.id;
+ }
+ });
+
+ m.showMenu(0, e.clientHeight);
+
+ Event.add(DOM.doc, 'mousedown', t.hideMenu, t);
+ DOM.addClass(t.id, t.classPrefix + 'Selected');
+
+ //DOM.get(t.id + '_text').focus();
+ },
+
+ hideMenu : function(e) {
+ var t = this;
+
+ if (t.menu && t.menu.isMenuVisible) {
+ DOM.removeClass(t.id, t.classPrefix + 'Selected');
+
+ // Prevent double toogles by canceling the mouse click event to the button
+ if (e && e.type == "mousedown" && (e.target.id == t.id + '_text' || e.target.id == t.id + '_open'))
+ return;
+
+ if (!e || !DOM.getParent(e.target, '.mceMenu')) {
+ DOM.removeClass(t.id, t.classPrefix + 'Selected');
+ Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);
+ t.menu.hideMenu();
+ }
+ }
+ },
+
+ renderMenu : function() {
+ var t = this, m;
+
+ m = t.settings.control_manager.createDropMenu(t.id + '_menu', {
+ menu_line : 1,
+ 'class' : t.classPrefix + 'Menu mceNoIcons',
+ max_width : 150,
+ max_height : 150
+ });
+
+ m.onHideMenu.add(function() {
+ t.hideMenu();
+ t.focus();
+ });
+
+ m.add({
+ title : t.settings.title,
+ 'class' : 'mceMenuItemTitle',
+ onclick : function() {
+ if (t.settings.onselect('') !== false)
+ t.select(''); // Must be runned after
+ }
+ });
+
+ each(t.items, function(o) {
+ // No value then treat it as a title
+ if (o.value === undefined) {
+ m.add({
+ title : o.title,
+ role : "option",
+ 'class' : 'mceMenuItemTitle',
+ onclick : function() {
+ if (t.settings.onselect('') !== false)
+ t.select(''); // Must be runned after
+ }
+ });
+ } else {
+ o.id = DOM.uniqueId();
+ o.role= "option";
+ o.onclick = function() {
+ if (t.settings.onselect(o.value) !== false)
+ t.select(o.value); // Must be runned after
+ };
+
+ m.add(o);
+ }
+ });
+
+ t.onRenderMenu.dispatch(t, m);
+ t.menu = m;
+ },
+
+ postRender : function() {
+ var t = this, cp = t.classPrefix;
+
+ Event.add(t.id, 'click', t.showMenu, t);
+ Event.add(t.id, 'keydown', function(evt) {
+ if (evt.keyCode == 32) { // Space
+ t.showMenu(evt);
+ Event.cancel(evt);
+ }
+ });
+ Event.add(t.id, 'focus', function() {
+ if (!t._focused) {
+ t.keyDownHandler = Event.add(t.id, 'keydown', function(e) {
+ if (e.keyCode == 40) {
+ t.showMenu();
+ Event.cancel(e);
+ }
+ });
+ t.keyPressHandler = Event.add(t.id, 'keypress', function(e) {
+ var v;
+ if (e.keyCode == 13) {
+ // Fake select on enter
+ v = t.selectedValue;
+ t.selectedValue = null; // Needs to be null to fake change
+ Event.cancel(e);
+ t.settings.onselect(v);
+ }
+ });
+ }
+
+ t._focused = 1;
+ });
+ Event.add(t.id, 'blur', function() {
+ Event.remove(t.id, 'keydown', t.keyDownHandler);
+ Event.remove(t.id, 'keypress', t.keyPressHandler);
+ t._focused = 0;
+ });
+
+ // Old IE doesn't have hover on all elements
+ if (tinymce.isIE6 || !DOM.boxModel) {
+ Event.add(t.id, 'mouseover', function() {
+ if (!DOM.hasClass(t.id, cp + 'Disabled'))
+ DOM.addClass(t.id, cp + 'Hover');
+ });
+
+ Event.add(t.id, 'mouseout', function() {
+ if (!DOM.hasClass(t.id, cp + 'Disabled'))
+ DOM.removeClass(t.id, cp + 'Hover');
+ });
+ }
+
+ t.onPostRender.dispatch(t, DOM.get(t.id));
+ },
+
+ destroy : function() {
+ this.parent();
+
+ Event.clear(this.id + '_text');
+ Event.clear(this.id + '_open');
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;
+
+ tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox', {
+ NativeListBox : function(id, s) {
+ this.parent(id, s);
+ this.classPrefix = 'mceNativeListBox';
+ },
+
+ setDisabled : function(s) {
+ DOM.get(this.id).disabled = s;
+ this.setAriaProperty('disabled', s);
+ },
+
+ isDisabled : function() {
+ return DOM.get(this.id).disabled;
+ },
+
+ select : function(va) {
+ var t = this, fv, f;
+
+ if (va == undefined)
+ return t.selectByIndex(-1);
+
+ // Is string or number make function selector
+ if (va && va.call)
+ f = va;
+ else {
+ f = function(v) {
+ return v == va;
+ };
+ }
+
+ // Do we need to do something?
+ if (va != t.selectedValue) {
+ // Find item
+ each(t.items, function(o, i) {
+ if (f(o.value)) {
+ fv = 1;
+ t.selectByIndex(i);
+ return false;
+ }
+ });
+
+ if (!fv)
+ t.selectByIndex(-1);
+ }
+ },
+
+ selectByIndex : function(idx) {
+ DOM.get(this.id).selectedIndex = idx + 1;
+ this.selectedValue = this.items[idx] ? this.items[idx].value : null;
+ },
+
+ add : function(n, v, a) {
+ var o, t = this;
+
+ a = a || {};
+ a.value = v;
+
+ if (t.isRendered())
+ DOM.add(DOM.get(this.id), 'option', a, n);
+
+ o = {
+ title : n,
+ value : v,
+ attribs : a
+ };
+
+ t.items.push(o);
+ t.onAdd.dispatch(t, o);
+ },
+
+ getLength : function() {
+ return this.items.length;
+ },
+
+ renderHTML : function() {
+ var h, t = this;
+
+ h = DOM.createHTML('option', {value : ''}, '-- ' + t.settings.title + ' --');
+
+ each(t.items, function(it) {
+ h += DOM.createHTML('option', {value : it.value}, it.title);
+ });
+
+ h = DOM.createHTML('select', {id : t.id, 'class' : 'mceNativeListBox', 'aria-labelledby': t.id + '_aria'}, h);
+ h += DOM.createHTML('span', {id : t.id + '_aria', 'style': 'display: none'}, t.settings.title);
+ return h;
+ },
+
+ postRender : function() {
+ var t = this, ch, changeListenerAdded = true;
+
+ t.rendered = true;
+
+ function onChange(e) {
+ var v = t.items[e.target.selectedIndex - 1];
+
+ if (v && (v = v.value)) {
+ t.onChange.dispatch(t, v);
+
+ if (t.settings.onselect)
+ t.settings.onselect(v);
+ }
+ };
+
+ Event.add(t.id, 'change', onChange);
+
+ // Accessibility keyhandler
+ Event.add(t.id, 'keydown', function(e) {
+ var bf;
+
+ Event.remove(t.id, 'change', ch);
+ changeListenerAdded = false;
+
+ bf = Event.add(t.id, 'blur', function() {
+ if (changeListenerAdded) return;
+ changeListenerAdded = true;
+ Event.add(t.id, 'change', onChange);
+ Event.remove(t.id, 'blur', bf);
+ });
+
+ //prevent default left and right keys on chrome - so that the keyboard navigation is used.
+ if (tinymce.isWebKit && (e.keyCode==37 ||e.keyCode==39)) {
+ return Event.prevent(e);
+ }
+
+ if (e.keyCode == 13 || e.keyCode == 32) {
+ onChange(e);
+ return Event.cancel(e);
+ }
+ });
+
+ t.onPostRender.dispatch(t, DOM.get(t.id));
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;
+
+ tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button', {
+ MenuButton : function(id, s, ed) {
+ this.parent(id, s, ed);
+
+ this.onRenderMenu = new tinymce.util.Dispatcher(this);
+
+ s.menu_container = s.menu_container || DOM.doc.body;
+ },
+
+ showMenu : function() {
+ var t = this, p1, p2, e = DOM.get(t.id), m;
+
+ if (t.isDisabled())
+ return;
+
+ if (!t.isMenuRendered) {
+ t.renderMenu();
+ t.isMenuRendered = true;
+ }
+
+ if (t.isMenuVisible)
+ return t.hideMenu();
+
+ p1 = DOM.getPos(t.settings.menu_container);
+ p2 = DOM.getPos(e);
+
+ m = t.menu;
+ m.settings.offset_x = p2.x;
+ m.settings.offset_y = p2.y;
+ m.settings.vp_offset_x = p2.x;
+ m.settings.vp_offset_y = p2.y;
+ m.settings.keyboard_focus = t._focused;
+ m.showMenu(0, e.clientHeight);
+
+ Event.add(DOM.doc, 'mousedown', t.hideMenu, t);
+ t.setState('Selected', 1);
+
+ t.isMenuVisible = 1;
+ },
+
+ renderMenu : function() {
+ var t = this, m;
+
+ m = t.settings.control_manager.createDropMenu(t.id + '_menu', {
+ menu_line : 1,
+ 'class' : this.classPrefix + 'Menu',
+ icons : t.settings.icons
+ });
+
+ m.onHideMenu.add(function() {
+ t.hideMenu();
+ t.focus();
+ });
+
+ t.onRenderMenu.dispatch(t, m);
+ t.menu = m;
+ },
+
+ hideMenu : function(e) {
+ var t = this;
+
+ // Prevent double toogles by canceling the mouse click event to the button
+ if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id || e.id === t.id + '_open';}))
+ return;
+
+ if (!e || !DOM.getParent(e.target, '.mceMenu')) {
+ t.setState('Selected', 0);
+ Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);
+ if (t.menu)
+ t.menu.hideMenu();
+ }
+
+ t.isMenuVisible = 0;
+ },
+
+ postRender : function() {
+ var t = this, s = t.settings;
+
+ Event.add(t.id, 'click', function() {
+ if (!t.isDisabled()) {
+ if (s.onclick)
+ s.onclick(t.value);
+
+ t.showMenu();
+ }
+ });
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;
+
+ tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton', {
+ SplitButton : function(id, s, ed) {
+ this.parent(id, s, ed);
+ this.classPrefix = 'mceSplitButton';
+ },
+
+ renderHTML : function() {
+ var h, t = this, s = t.settings, h1;
+
+ h = '<tbody><tr>';
+
+ if (s.image)
+ h1 = DOM.createHTML('img ', {src : s.image, role: 'presentation', 'class' : 'mceAction ' + s['class']});
+ else
+ h1 = DOM.createHTML('span', {'class' : 'mceAction ' + s['class']}, '');
+
+ h1 += DOM.createHTML('span', {'class': 'mceVoiceLabel mceIconOnly', id: t.id + '_voice', style: 'display:none;'}, s.title);
+ 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>';
+
+ h1 = DOM.createHTML('span', {'class' : 'mceOpen ' + s['class']}, '<span style="display:none;" class="mceIconOnly" aria-hidden="true">\u25BC</span>');
+ 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>';
+
+ h += '</tr></tbody>';
+ h = DOM.createHTML('table', { role: 'presentation', 'class' : 'mceSplitButton mceSplitButtonEnabled ' + s['class'], cellpadding : '0', cellspacing : '0', title : s.title}, h);
+ return DOM.createHTML('div', {id : t.id, role: 'button', tabindex: '0', 'aria-labelledby': t.id + '_voice', 'aria-haspopup': 'true'}, h);
+ },
+
+ postRender : function() {
+ var t = this, s = t.settings, activate;
+
+ if (s.onclick) {
+ activate = function(evt) {
+ if (!t.isDisabled()) {
+ s.onclick(t.value);
+ Event.cancel(evt);
+ }
+ };
+ Event.add(t.id + '_action', 'click', activate);
+ Event.add(t.id, ['click', 'keydown'], function(evt) {
+ var DOM_VK_SPACE = 32, DOM_VK_ENTER = 14, DOM_VK_RETURN = 13, DOM_VK_UP = 38, DOM_VK_DOWN = 40;
+ if ((evt.keyCode === 32 || evt.keyCode === 13 || evt.keyCode === 14) && !evt.altKey && !evt.ctrlKey && !evt.metaKey) {
+ activate();
+ Event.cancel(evt);
+ } else if (evt.type === 'click' || evt.keyCode === DOM_VK_DOWN) {
+ t.showMenu();
+ Event.cancel(evt);
+ }
+ });
+ }
+
+ Event.add(t.id + '_open', 'click', function (evt) {
+ t.showMenu();
+ Event.cancel(evt);
+ });
+ Event.add([t.id, t.id + '_open'], 'focus', function() {t._focused = 1;});
+ Event.add([t.id, t.id + '_open'], 'blur', function() {t._focused = 0;});
+
+ // Old IE doesn't have hover on all elements
+ if (tinymce.isIE6 || !DOM.boxModel) {
+ Event.add(t.id, 'mouseover', function() {
+ if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))
+ DOM.addClass(t.id, 'mceSplitButtonHover');
+ });
+
+ Event.add(t.id, 'mouseout', function() {
+ if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))
+ DOM.removeClass(t.id, 'mceSplitButtonHover');
+ });
+ }
+ },
+
+ destroy : function() {
+ this.parent();
+
+ Event.clear(this.id + '_action');
+ Event.clear(this.id + '_open');
+ Event.clear(this.id);
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, is = tinymce.is, each = tinymce.each;
+
+ tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton', {
+ ColorSplitButton : function(id, s, ed) {
+ var t = this;
+
+ t.parent(id, s, ed);
+
+ t.settings = s = tinymce.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'
+ }, t.settings);
+
+ t.onShowMenu = new tinymce.util.Dispatcher(t);
+
+ t.onHideMenu = new tinymce.util.Dispatcher(t);
+
+ t.value = s.default_color;
+ },
+
+ showMenu : function() {
+ var t = this, r, p, e, p2;
+
+ if (t.isDisabled())
+ return;
+
+ if (!t.isMenuRendered) {
+ t.renderMenu();
+ t.isMenuRendered = true;
+ }
+
+ if (t.isMenuVisible)
+ return t.hideMenu();
+
+ e = DOM.get(t.id);
+ DOM.show(t.id + '_menu');
+ DOM.addClass(e, 'mceSplitButtonSelected');
+ p2 = DOM.getPos(e);
+ DOM.setStyles(t.id + '_menu', {
+ left : p2.x,
+ top : p2.y + e.clientHeight,
+ zIndex : 200000
+ });
+ e = 0;
+
+ Event.add(DOM.doc, 'mousedown', t.hideMenu, t);
+ t.onShowMenu.dispatch(t);
+
+ if (t._focused) {
+ t._keyHandler = Event.add(t.id + '_menu', 'keydown', function(e) {
+ if (e.keyCode == 27)
+ t.hideMenu();
+ });
+
+ DOM.select('a', t.id + '_menu')[0].focus(); // Select first link
+ }
+
+ t.isMenuVisible = 1;
+ },
+
+ hideMenu : function(e) {
+ var t = this;
+
+ if (t.isMenuVisible) {
+ // Prevent double toogles by canceling the mouse click event to the button
+ if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id + '_open';}))
+ return;
+
+ if (!e || !DOM.getParent(e.target, '.mceSplitButtonMenu')) {
+ DOM.removeClass(t.id, 'mceSplitButtonSelected');
+ Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);
+ Event.remove(t.id + '_menu', 'keydown', t._keyHandler);
+ DOM.hide(t.id + '_menu');
+ }
+
+ t.isMenuVisible = 0;
+ t.onHideMenu.dispatch();
+ }
+ },
+
+ renderMenu : function() {
+ var t = this, m, i = 0, s = t.settings, n, tb, tr, w, context;
+
+ 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;'});
+ m = DOM.add(w, 'div', {'class' : s['class'] + ' mceSplitButtonMenu'});
+ DOM.add(m, 'span', {'class' : 'mceMenuLine'});
+
+ n = DOM.add(m, 'table', {role: 'presentation', 'class' : 'mceColorSplitMenu'});
+ tb = DOM.add(n, 'tbody');
+
+ // Generate color grid
+ i = 0;
+ each(is(s.colors, 'array') ? s.colors : s.colors.split(','), function(c) {
+ c = c.replace(/^#/, '');
+
+ if (!i--) {
+ tr = DOM.add(tb, 'tr');
+ i = s.grid_width - 1;
+ }
+
+ n = DOM.add(tr, 'td');
+ n = DOM.add(n, 'a', {
+ role : 'option',
+ href : 'javascript:;',
+ style : {
+ backgroundColor : '#' + c
+ },
+ 'title': t.editor.getLang('colors.' + c, c),
+ 'data-mce-color' : '#' + c
+ });
+
+ if (t.editor.forcedHighContrastMode) {
+ n = DOM.add(n, 'canvas', { width: 16, height: 16, 'aria-hidden': 'true' });
+ if (n.getContext && (context = n.getContext("2d"))) {
+ context.fillStyle = '#' + c;
+ context.fillRect(0, 0, 16, 16);
+ } else {
+ // No point leaving a canvas element around if it's not supported for drawing on anyway.
+ DOM.remove(n);
+ }
+ }
+ });
+
+ if (s.more_colors_func) {
+ n = DOM.add(tb, 'tr');
+ n = DOM.add(n, 'td', {colspan : s.grid_width, 'class' : 'mceMoreColors'});
+ n = DOM.add(n, 'a', {role: 'option', id : t.id + '_more', href : 'javascript:;', onclick : 'return false;', 'class' : 'mceMoreColors'}, s.more_colors_title);
+
+ Event.add(n, 'click', function(e) {
+ s.more_colors_func.call(s.more_colors_scope || this);
+ return Event.cancel(e); // Cancel to fix onbeforeunload problem
+ });
+ }
+
+ DOM.addClass(m, 'mceColorSplitMenu');
+
+ new tinymce.ui.KeyboardNavigation({
+ root: t.id + '_menu',
+ items: DOM.select('a', t.id + '_menu'),
+ onCancel: function() {
+ t.hideMenu();
+ t.focus();
+ }
+ });
+
+ // Prevent IE from scrolling and hindering click to occur #4019
+ Event.add(t.id + '_menu', 'mousedown', function(e) {return Event.cancel(e);});
+
+ Event.add(t.id + '_menu', 'click', function(e) {
+ var c;
+
+ e = DOM.getParent(e.target, 'a', tb);
+
+ if (e && e.nodeName.toLowerCase() == 'a' && (c = e.getAttribute('data-mce-color')))
+ t.setColor(c);
+
+ return Event.cancel(e); // Prevent IE auto save warning
+ });
+
+ return w;
+ },
+
+ setColor : function(c) {
+ this.displayColor(c);
+ this.hideMenu();
+ this.settings.onselect(c);
+ },
+
+ displayColor : function(c) {
+ var t = this;
+
+ DOM.setStyle(t.id + '_preview', 'backgroundColor', c);
+
+ t.value = c;
+ },
+
+ postRender : function() {
+ var t = this, id = t.id;
+
+ t.parent();
+ DOM.add(id + '_action', 'div', {id : id + '_preview', 'class' : 'mceColorPreview'});
+ DOM.setStyle(t.id + '_preview', 'backgroundColor', t.value);
+ },
+
+ destroy : function() {
+ this.parent();
+
+ Event.clear(this.id + '_menu');
+ Event.clear(this.id + '_more');
+ DOM.remove(this.id + '_menu');
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+// Shorten class names
+var dom = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event;
+tinymce.create('tinymce.ui.ToolbarGroup:tinymce.ui.Container', {
+ renderHTML : function() {
+ var t = this, h = [], controls = t.controls, each = tinymce.each, settings = t.settings;
+
+ h.push('<div id="' + t.id + '" role="group" aria-labelledby="' + t.id + '_voice">');
+ //TODO: ACC test this out - adding a role = application for getting the landmarks working well.
+ h.push("<span role='application'>");
+ h.push('<span id="' + t.id + '_voice" class="mceVoiceLabel" style="display:none;">' + dom.encode(settings.name) + '</span>');
+ each(controls, function(toolbar) {
+ h.push(toolbar.renderHTML());
+ });
+ h.push("</span>");
+ h.push('</div>');
+
+ return h.join('');
+ },
+
+ focus : function() {
+ var t = this;
+ dom.get(t.id).focus();
+ },
+
+ postRender : function() {
+ var t = this, items = [];
+
+ each(t.controls, function(toolbar) {
+ each (toolbar.controls, function(control) {
+ if (control.id) {
+ items.push(control);
+ }
+ });
+ });
+
+ t.keyNav = new tinymce.ui.KeyboardNavigation({
+ root: t.id,
+ items: items,
+ onCancel: function() {
+ //Move focus if webkit so that navigation back will read the item.
+ if (tinymce.isWebKit) {
+ dom.get(t.editor.id+"_ifr").focus();
+ }
+ t.editor.focus();
+ },
+ excludeFromTabOrder: !t.settings.tab_focus_toolbar
+ });
+ },
+
+ destroy : function() {
+ var self = this;
+
+ self.parent();
+ self.keyNav.destroy();
+ Event.clear(self.id);
+ }
+});
+})(tinymce);
+
+(function(tinymce) {
+// Shorten class names
+var dom = tinymce.DOM, each = tinymce.each;
+tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
+ renderHTML : function() {
+ var t = this, h = '', c, co, s = t.settings, i, pr, nx, cl;
+
+ cl = t.controls;
+ for (i=0; i<cl.length; i++) {
+ // Get current control, prev control, next control and if the control is a list box or not
+ co = cl[i];
+ pr = cl[i - 1];
+ nx = cl[i + 1];
+
+ // Add toolbar start
+ if (i === 0) {
+ c = 'mceToolbarStart';
+
+ if (co.Button)
+ c += ' mceToolbarStartButton';
+ else if (co.SplitButton)
+ c += ' mceToolbarStartSplitButton';
+ else if (co.ListBox)
+ c += ' mceToolbarStartListBox';
+
+ h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));
+ }
+
+ // Add toolbar end before list box and after the previous button
+ // This is to fix the o2k7 editor skins
+ if (pr && co.ListBox) {
+ if (pr.Button || pr.SplitButton)
+ h += dom.createHTML('td', {'class' : 'mceToolbarEnd'}, dom.createHTML('span', null, '<!-- IE -->'));
+ }
+
+ // Render control HTML
+
+ // IE 8 quick fix, needed to propertly generate a hit area for anchors
+ if (dom.stdMode)
+ h += '<td style="position: relative">' + co.renderHTML() + '</td>';
+ else
+ h += '<td>' + co.renderHTML() + '</td>';
+
+ // Add toolbar start after list box and before the next button
+ // This is to fix the o2k7 editor skins
+ if (nx && co.ListBox) {
+ if (nx.Button || nx.SplitButton)
+ h += dom.createHTML('td', {'class' : 'mceToolbarStart'}, dom.createHTML('span', null, '<!-- IE -->'));
+ }
+ }
+
+ c = 'mceToolbarEnd';
+
+ if (co.Button)
+ c += ' mceToolbarEndButton';
+ else if (co.SplitButton)
+ c += ' mceToolbarEndSplitButton';
+ else if (co.ListBox)
+ c += ' mceToolbarEndListBox';
+
+ h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));
+
+ 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>');
+ }
+});
+})(tinymce);
+
+(function(tinymce) {
+ var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each;
+
+ tinymce.create('tinymce.AddOnManager', {
+ AddOnManager : function() {
+ var self = this;
+
+ self.items = [];
+ self.urls = {};
+ self.lookup = {};
+ self.onAdd = new Dispatcher(self);
+ },
+
+ get : function(n) {
+ if (this.lookup[n]) {
+ return this.lookup[n].instance;
+ } else {
+ return undefined;
+ }
+ },
+
+ dependencies : function(n) {
+ var result;
+ if (this.lookup[n]) {
+ result = this.lookup[n].dependencies;
+ }
+ return result || [];
+ },
+
+ requireLangPack : function(n) {
+ var s = tinymce.settings;
+
+ if (s && s.language && s.language_load !== false)
+ tinymce.ScriptLoader.add(this.urls[n] + '/langs/' + s.language + '.js');
+ },
+
+ add : function(id, o, dependencies) {
+ this.items.push(o);
+ this.lookup[id] = {instance:o, dependencies:dependencies};
+ this.onAdd.dispatch(this, id, o);
+
+ return o;
+ },
+ createUrl: function(baseUrl, dep) {
+ if (typeof dep === "object") {
+ return dep
+ } else {
+ return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix};
+ }
+ },
+
+ addComponents: function(pluginName, scripts) {
+ var pluginUrl = this.urls[pluginName];
+ tinymce.each(scripts, function(script){
+ tinymce.ScriptLoader.add(pluginUrl+"/"+script);
+ });
+ },
+
+ load : function(n, u, cb, s) {
+ var t = this, url = u;
+
+ function loadDependencies() {
+ var dependencies = t.dependencies(n);
+ tinymce.each(dependencies, function(dep) {
+ var newUrl = t.createUrl(u, dep);
+ t.load(newUrl.resource, newUrl, undefined, undefined);
+ });
+ if (cb) {
+ if (s) {
+ cb.call(s);
+ } else {
+ cb.call(tinymce.ScriptLoader);
+ }
+ }
+ }
+
+ if (t.urls[n])
+ return;
+ if (typeof u === "object")
+ url = u.prefix + u.resource + u.suffix;
+
+ if (url.indexOf('/') != 0 && url.indexOf('://') == -1)
+ url = tinymce.baseURL + '/' + url;
+
+ t.urls[n] = url.substring(0, url.lastIndexOf('/'));
+
+ if (t.lookup[n]) {
+ loadDependencies();
+ } else {
+ tinymce.ScriptLoader.add(url, loadDependencies, s);
+ }
+ }
+ });
+
+ // Create plugin and theme managers
+ tinymce.PluginManager = new tinymce.AddOnManager();
+ tinymce.ThemeManager = new tinymce.AddOnManager();
+}(tinymce));
+
+(function(tinymce) {
+ // Shorten names
+ var each = tinymce.each, extend = tinymce.extend,
+ DOM = tinymce.DOM, Event = tinymce.dom.Event,
+ ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,
+ explode = tinymce.explode,
+ Dispatcher = tinymce.util.Dispatcher, undefined, instanceCounter = 0;
+
+ // Setup some URLs where the editor API is located and where the document is
+ tinymce.documentBaseURL = window.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');
+ if (!/[\/\\]$/.test(tinymce.documentBaseURL))
+ tinymce.documentBaseURL += '/';
+
+ tinymce.baseURL = new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);
+
+ tinymce.baseURI = new tinymce.util.URI(tinymce.baseURL);
+
+ // Add before unload listener
+ // This was required since IE was leaking memory if you added and removed beforeunload listeners
+ // with attachEvent/detatchEvent so this only adds one listener and instances can the attach to the onBeforeUnload event
+ tinymce.onBeforeUnload = new Dispatcher(tinymce);
+
+ // Must be on window or IE will leak if the editor is placed in frame or iframe
+ Event.add(window, 'beforeunload', function(e) {
+ tinymce.onBeforeUnload.dispatch(tinymce, e);
+ });
+
+ tinymce.onAddEditor = new Dispatcher(tinymce);
+
+ tinymce.onRemoveEditor = new Dispatcher(tinymce);
+
+ tinymce.EditorManager = extend(tinymce, {
+ editors : [],
+
+ i18n : {},
+
+ activeEditor : null,
+
+ init : function(s) {
+ var t = this, pl, sl = tinymce.ScriptLoader, e, el = [], ed;
+
+ function execCallback(se, n, s) {
+ var f = se[n];
+
+ if (!f)
+ return;
+
+ if (tinymce.is(f, 'string')) {
+ s = f.replace(/\.\w+$/, '');
+ s = s ? tinymce.resolve(s) : 0;
+ f = tinymce.resolve(f);
+ }
+
+ return f.apply(s || this, Array.prototype.slice.call(arguments, 2));
+ };
+
+ s = extend({
+ theme : "simple",
+ language : "en"
+ }, s);
+
+ t.settings = s;
+
+ // Legacy call
+ Event.add(document, 'init', function() {
+ var l, co;
+
+ execCallback(s, 'onpageload');
+
+ switch (s.mode) {
+ case "exact":
+ l = s.elements || '';
+
+ if(l.length > 0) {
+ each(explode(l), function(v) {
+ if (DOM.get(v)) {
+ ed = new tinymce.Editor(v, s);
+ el.push(ed);
+ ed.render(1);
+ } else {
+ each(document.forms, function(f) {
+ each(f.elements, function(e) {
+ if (e.name === v) {
+ v = 'mce_editor_' + instanceCounter++;
+ DOM.setAttrib(e, 'id', v);
+
+ ed = new tinymce.Editor(v, s);
+ el.push(ed);
+ ed.render(1);
+ }
+ });
+ });
+ }
+ });
+ }
+ break;
+
+ case "textareas":
+ case "specific_textareas":
+ function hasClass(n, c) {
+ return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c);
+ };
+
+ each(DOM.select('textarea'), function(v) {
+ if (s.editor_deselector && hasClass(v, s.editor_deselector))
+ return;
+
+ if (!s.editor_selector || hasClass(v, s.editor_selector)) {
+ // Can we use the name
+ e = DOM.get(v.name);
+ if (!v.id && !e)
+ v.id = v.name;
+
+ // Generate unique name if missing or already exists
+ if (!v.id || t.get(v.id))
+ v.id = DOM.uniqueId();
+
+ ed = new tinymce.Editor(v.id, s);
+ el.push(ed);
+ ed.render(1);
+ }
+ });
+ break;
+ }
+
+ // Call onInit when all editors are initialized
+ if (s.oninit) {
+ l = co = 0;
+
+ each(el, function(ed) {
+ co++;
+
+ if (!ed.initialized) {
+ // Wait for it
+ ed.onInit.add(function() {
+ l++;
+
+ // All done
+ if (l == co)
+ execCallback(s, 'oninit');
+ });
+ } else
+ l++;
+
+ // All done
+ if (l == co)
+ execCallback(s, 'oninit');
+ });
+ }
+ });
+ },
+
+ get : function(id) {
+ if (id === undefined)
+ return this.editors;
+
+ return this.editors[id];
+ },
+
+ getInstanceById : function(id) {
+ return this.get(id);
+ },
+
+ add : function(editor) {
+ var self = this, editors = self.editors;
+
+ // Add named and index editor instance
+ editors[editor.id] = editor;
+ editors.push(editor);
+
+ self._setActive(editor);
+ self.onAddEditor.dispatch(self, editor);
+
+
+ return editor;
+ },
+
+ remove : function(editor) {
+ var t = this, i, editors = t.editors;
+
+ // Not in the collection
+ if (!editors[editor.id])
+ return null;
+
+ delete editors[editor.id];
+
+ for (i = 0; i < editors.length; i++) {
+ if (editors[i] == editor) {
+ editors.splice(i, 1);
+ break;
+ }
+ }
+
+ // Select another editor since the active one was removed
+ if (t.activeEditor == editor)
+ t._setActive(editors[0]);
+
+ editor.destroy();
+ t.onRemoveEditor.dispatch(t, editor);
+
+ return editor;
+ },
+
+ execCommand : function(c, u, v) {
+ var t = this, ed = t.get(v), w;
+
+ // Manager commands
+ switch (c) {
+ case "mceFocus":
+ ed.focus();
+ return true;
+
+ case "mceAddEditor":
+ case "mceAddControl":
+ if (!t.get(v))
+ new tinymce.Editor(v, t.settings).render();
+
+ return true;
+
+ case "mceAddFrameControl":
+ w = v.window;
+
+ // Add tinyMCE global instance and tinymce namespace to specified window
+ w.tinyMCE = tinyMCE;
+ w.tinymce = tinymce;
+
+ tinymce.DOM.doc = w.document;
+ tinymce.DOM.win = w;
+
+ ed = new tinymce.Editor(v.element_id, v);
+ ed.render();
+
+ // Fix IE memory leaks
+ if (tinymce.isIE) {
+ function clr() {
+ ed.destroy();
+ w.detachEvent('onunload', clr);
+ w = w.tinyMCE = w.tinymce = null; // IE leak
+ };
+
+ w.attachEvent('onunload', clr);
+ }
+
+ v.page_window = null;
+
+ return true;
+
+ case "mceRemoveEditor":
+ case "mceRemoveControl":
+ if (ed)
+ ed.remove();
+
+ return true;
+
+ case 'mceToggleEditor':
+ if (!ed) {
+ t.execCommand('mceAddControl', 0, v);
+ return true;
+ }
+
+ if (ed.isHidden())
+ ed.show();
+ else
+ ed.hide();
+
+ return true;
+ }
+
+ // Run command on active editor
+ if (t.activeEditor)
+ return t.activeEditor.execCommand(c, u, v);
+
+ return false;
+ },
+
+ execInstanceCommand : function(id, c, u, v) {
+ var ed = this.get(id);
+
+ if (ed)
+ return ed.execCommand(c, u, v);
+
+ return false;
+ },
+
+ triggerSave : function() {
+ each(this.editors, function(e) {
+ e.save();
+ });
+ },
+
+ addI18n : function(p, o) {
+ var lo, i18n = this.i18n;
+
+ if (!tinymce.is(p, 'string')) {
+ each(p, function(o, lc) {
+ each(o, function(o, g) {
+ each(o, function(o, k) {
+ if (g === 'common')
+ i18n[lc + '.' + k] = o;
+ else
+ i18n[lc + '.' + g + '.' + k] = o;
+ });
+ });
+ });
+ } else {
+ each(o, function(o, k) {
+ i18n[p + '.' + k] = o;
+ });
+ }
+ },
+
+ // Private methods
+
+ _setActive : function(editor) {
+ this.selectedInstance = this.activeEditor = editor;
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ // Shorten these names
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend,
+ Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isGecko = tinymce.isGecko,
+ isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, is = tinymce.is,
+ ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,
+ inArray = tinymce.inArray, grep = tinymce.grep, explode = tinymce.explode;
+
+ tinymce.create('tinymce.Editor', {
+ Editor : function(id, s) {
+ var t = this;
+
+ t.id = t.editorId = id;
+
+ t.execCommands = {};
+ t.queryStateCommands = {};
+ t.queryValueCommands = {};
+
+ t.isNotDirty = false;
+
+ t.plugins = {};
+
+ // Add events to the editor
+ each([
+ '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(e) {
+ t[e] = new Dispatcher(t);
+ });
+
+ t.settings = s = extend({
+ id : id,
+ language : 'en',
+ docs_language : 'en',
+ theme : 'simple',
+ skin : 'default',
+ delta_width : 0,
+ delta_height : 0,
+ popup_css : '',
+ plugins : '',
+ document_base_url : tinymce.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 : tinymce.isIE6 ? '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' : '<!DOCTYPE>', // Use old doctype on IE 6 to avoid horizontal scroll
+ visual_table_class : 'mceItemTable',
+ visual : 1,
+ font_size_style_values : 'xx-small,x-small,small,medium,large,x-large,xx-large',
+ font_size_legacy_values : 'xx-small,small,medium,large,x-large,xx-large,300%', // See: http://www.w3.org/TR/CSS2/fonts.html#propdef-font-size
+ 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 : t.convertURL,
+ url_converter_scope : t,
+ ie7_compat : true
+ }, s);
+
+ t.documentBaseURI = new tinymce.util.URI(s.document_base_url || tinymce.documentBaseURL, {
+ base_uri : tinyMCE.baseURI
+ });
+
+ t.baseURI = tinymce.baseURI;
+
+ t.contentCSS = [];
+
+ // Call setup
+ t.execCallback('setup', t);
+ },
+
+ render : function(nst) {
+ var t = this, s = t.settings, id = t.id, sl = tinymce.ScriptLoader;
+
+ // Page is not loaded yet, wait for it
+ if (!Event.domLoaded) {
+ Event.add(document, 'init', function() {
+ t.render();
+ });
+ return;
+ }
+
+ tinyMCE.settings = s;
+
+ // Element not found, then skip initialization
+ if (!t.getElement())
+ return;
+
+ // Is a iPad/iPhone and not on iOS5, then skip initialization. We need to sniff
+ // here since the browser says it has contentEditable support but there is no visible
+ // caret We will remove this check ones Apple implements full contentEditable support
+ if (tinymce.isIDevice && !tinymce.isIOS5)
+ return;
+
+ // Add hidden input for non input elements inside form elements
+ if (!/TEXTAREA|INPUT/i.test(t.getElement().nodeName) && s.hidden_input && DOM.getParent(id, 'form'))
+ DOM.insertAfter(DOM.create('input', {type : 'hidden', name : id}), id);
+
+ if (tinymce.WindowManager)
+ t.windowManager = new tinymce.WindowManager(t);
+
+ if (s.encoding == 'xml') {
+ t.onGetContent.add(function(ed, o) {
+ if (o.save)
+ o.content = DOM.encode(o.content);
+ });
+ }
+
+ if (s.add_form_submit_trigger) {
+ t.onSubmit.addToTop(function() {
+ if (t.initialized) {
+ t.save();
+ t.isNotDirty = 1;
+ }
+ });
+ }
+
+ if (s.add_unload_trigger) {
+ t._beforeUnload = tinyMCE.onBeforeUnload.add(function() {
+ if (t.initialized && !t.destroyed && !t.isHidden())
+ t.save({format : 'raw', no_events : true});
+ });
+ }
+
+ tinymce.addUnload(t.destroy, t);
+
+ if (s.submit_patch) {
+ t.onBeforeRenderUI.add(function() {
+ var n = t.getElement().form;
+
+ if (!n)
+ return;
+
+ // Already patched
+ if (n._mceOldSubmit)
+ return;
+
+ // Check page uses id="submit" or name="submit" for it's submit button
+ if (!n.submit.nodeType && !n.submit.length) {
+ t.formElement = n;
+ n._mceOldSubmit = n.submit;
+ n.submit = function() {
+ // Save all instances
+ tinymce.triggerSave();
+ t.isNotDirty = 1;
+
+ return t.formElement._mceOldSubmit(t.formElement);
+ };
+ }
+
+ n = null;
+ });
+ }
+
+ // Load scripts
+ function loadScripts() {
+ if (s.language && s.language_load !== false)
+ sl.add(tinymce.baseURL + '/langs/' + s.language + '.js');
+
+ if (s.theme && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])
+ ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js');
+
+ each(explode(s.plugins), function(p) {
+ if (p &&!PluginManager.urls[p]) {
+ if (p.charAt(0) == '-') {
+ p = p.substr(1, p.length);
+ var dependencies = PluginManager.dependencies(p);
+ each(dependencies, function(dep) {
+ var defaultSettings = {prefix:'plugins/', resource: dep, suffix:'/editor_plugin' + tinymce.suffix + '.js'};
+ var dep = PluginManager.createUrl(defaultSettings, dep);
+ PluginManager.load(dep.resource, dep);
+
+ });
+ } else {
+ // Skip safari plugin, since it is removed as of 3.3b1
+ if (p == 'safari') {
+ return;
+ }
+ PluginManager.load(p, {prefix:'plugins/', resource: p, suffix:'/editor_plugin' + tinymce.suffix + '.js'});
+ }
+ }
+ });
+
+ // Init when que is loaded
+ sl.loadQueue(function() {
+ if (!t.removed)
+ t.init();
+ });
+ };
+
+ loadScripts();
+ },
+
+ init : function() {
+ var n, t = this, s = t.settings, w, h, e = t.getElement(), o, ti, u, bi, bc, re, i, initializedPlugins = [];
+
+ tinymce.add(t);
+
+ s.aria_label = s.aria_label || DOM.getAttrib(e, 'aria-label', t.getLang('aria.rich_text_area'));
+
+ if (s.theme) {
+ s.theme = s.theme.replace(/-/, '');
+ o = ThemeManager.get(s.theme);
+ t.theme = new o();
+
+ if (t.theme.init && s.init_theme)
+ t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, ''));
+ }
+ function initPlugin(p) {
+ var c = PluginManager.get(p), u = PluginManager.urls[p] || tinymce.documentBaseURL.replace(/\/$/, ''), po;
+ if (c && tinymce.inArray(initializedPlugins,p) === -1) {
+ each(PluginManager.dependencies(p), function(dep){
+ initPlugin(dep);
+ });
+ po = new c(t, u);
+
+ t.plugins[p] = po;
+
+ if (po.init) {
+ po.init(t, u);
+ initializedPlugins.push(p);
+ }
+ }
+ }
+
+ // Create all plugins
+ each(explode(s.plugins.replace(/\-/g, '')), initPlugin);
+
+ // Setup popup CSS path(s)
+ if (s.popup_css !== false) {
+ if (s.popup_css)
+ s.popup_css = t.documentBaseURI.toAbsolute(s.popup_css);
+ else
+ s.popup_css = t.baseURI.toAbsolute("themes/" + s.theme + "/skins/" + s.skin + "/dialog.css");
+ }
+
+ if (s.popup_css_add)
+ s.popup_css += ',' + t.documentBaseURI.toAbsolute(s.popup_css_add);
+
+ t.controlManager = new tinymce.ControlManager(t);
+
+ if (s.custom_undo_redo) {
+ t.onBeforeExecCommand.add(function(ed, cmd, ui, val, a) {
+ if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))
+ t.undoManager.beforeChange();
+ });
+
+ t.onExecCommand.add(function(ed, cmd, ui, val, a) {
+ if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))
+ t.undoManager.add();
+ });
+ }
+
+ t.onExecCommand.add(function(ed, c) {
+ // Don't refresh the select lists until caret move
+ if (!/^(FontName|FontSize)$/.test(c))
+ t.nodeChanged();
+ });
+
+ // Remove ghost selections on images and tables in Gecko
+ if (isGecko) {
+ function repaint(a, o) {
+ if (!o || !o.initial)
+ t.execCommand('mceRepaint');
+ };
+
+ t.onUndo.add(repaint);
+ t.onRedo.add(repaint);
+ t.onSetContent.add(repaint);
+ }
+
+ // Enables users to override the control factory
+ t.onBeforeRenderUI.dispatch(t, t.controlManager);
+
+ // Measure box
+ if (s.render_ui) {
+ w = s.width || e.style.width || e.offsetWidth;
+ h = s.height || e.style.height || e.offsetHeight;
+ t.orgDisplay = e.style.display;
+ re = /^[0-9\.]+(|px)$/i;
+
+ if (re.test('' + w))
+ w = Math.max(parseInt(w) + (o.deltaWidth || 0), 100);
+
+ if (re.test('' + h))
+ h = Math.max(parseInt(h) + (o.deltaHeight || 0), 100);
+
+ // Render UI
+ o = t.theme.renderUI({
+ targetNode : e,
+ width : w,
+ height : h,
+ deltaWidth : s.delta_width,
+ deltaHeight : s.delta_height
+ });
+
+ t.editorContainer = o.editorContainer;
+ }
+
+
+ // User specified a document.domain value
+ if (document.domain && location.hostname != document.domain)
+ tinymce.relaxedDomain = document.domain;
+
+ // Resize editor
+ DOM.setStyles(o.sizeContainer || o.editorContainer, {
+ width : w,
+ height : h
+ });
+
+ // Load specified content CSS last
+ if (s.content_css) {
+ tinymce.each(explode(s.content_css), function(u) {
+ t.contentCSS.push(t.documentBaseURI.toAbsolute(u));
+ });
+ }
+
+ h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : '');
+ if (h < 100)
+ h = 100;
+
+ t.iframeHTML = s.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml">';
+
+ // We only need to override paths if we have to
+ // IE has a bug where it remove site absolute urls to relative ones if this is specified
+ if (s.document_base_url != tinymce.documentBaseURL)
+ t.iframeHTML += '<base href="' + t.documentBaseURI.getURI() + '" />';
+
+ // IE8 doesn't support carets behind images setting ie7_compat would force IE8+ to run in IE7 compat mode.
+ if (s.ie7_compat)
+ t.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=7" />';
+ else
+ t.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=edge" />';
+
+ t.iframeHTML += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
+
+ // Load the CSS by injecting them into the HTML this will reduce "flicker"
+ for (i = 0; i < t.contentCSS.length; i++) {
+ t.iframeHTML += '<link type="text/css" rel="stylesheet" href="' + t.contentCSS[i] + '" />';
+ }
+
+ bi = s.body_id || 'tinymce';
+ if (bi.indexOf('=') != -1) {
+ bi = t.getParam('body_id', '', 'hash');
+ bi = bi[t.id] || bi;
+ }
+
+ bc = s.body_class || '';
+ if (bc.indexOf('=') != -1) {
+ bc = t.getParam('body_class', '', 'hash');
+ bc = bc[t.id] || '';
+ }
+
+ t.iframeHTML += '</head><body id="' + bi + '" class="mceContentBody ' + bc + '"><br></body></html>';
+
+ // Domain relaxing enabled, then set document domain
+ if (tinymce.relaxedDomain && (isIE || (tinymce.isOpera && parseFloat(opera.version()) < 11))) {
+ // We need to write the contents here in IE since multiple writes messes up refresh button and back button
+ 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();})()';
+ }
+
+ // Create iframe
+ // TODO: ACC add the appropriate description on this.
+ n = DOM.add(o.iframeContainer, 'iframe', {
+ id : t.id + "_ifr",
+ src : u || 'javascript:""', // Workaround for HTTPS warning in IE6/7
+ frameBorder : '0',
+ allowTransparency : "true",
+ title : s.aria_label,
+ style : {
+ width : '100%',
+ height : h,
+ display : 'block' // Important for Gecko to render the iframe correctly
+ }
+ });
+
+ t.contentAreaContainer = o.iframeContainer;
+ DOM.get(o.editorContainer).style.display = t.orgDisplay;
+ DOM.get(t.id).style.display = 'none';
+ DOM.setAttrib(t.id, 'aria-hidden', true);
+
+ if (!tinymce.relaxedDomain || !u)
+ t.setupIframe();
+
+ e = n = o = null; // Cleanup
+ },
+
+ setupIframe : function() {
+ var t = this, s = t.settings, e = DOM.get(t.id), d = t.getDoc(), h, b;
+
+ // Setup iframe body
+ if (!isIE || !tinymce.relaxedDomain) {
+ d.open();
+ d.write(t.iframeHTML);
+ d.close();
+
+ if (tinymce.relaxedDomain)
+ d.domain = tinymce.relaxedDomain;
+ }
+
+ // It will not steal focus while setting contentEditable
+ b = t.getBody();
+ b.disabled = true;
+
+ if (!s.readonly)
+ b.contentEditable = true;
+
+ b.disabled = false;
+
+ t.schema = new tinymce.html.Schema(s);
+
+ t.dom = new tinymce.dom.DOMUtils(t.getDoc(), {
+ keep_values : true,
+ url_converter : t.convertURL,
+ url_converter_scope : t,
+ hex_colors : s.force_hex_style_colors,
+ class_filter : s.class_filter,
+ update_styles : 1,
+ fix_ie_paragraphs : 1,
+ schema : t.schema
+ });
+
+ t.parser = new tinymce.html.DomParser(s, t.schema);
+
+ // Force anchor names closed, unless the setting "allow_html_in_named_anchor" is explicitly included.
+ if (!t.settings.allow_html_in_named_anchor) {
+ t.parser.addAttributeFilter('name', function(nodes, name) {
+ var i = nodes.length, sibling, prevSibling, parent, node;
+
+ while (i--) {
+ node = nodes[i];
+ if (node.name === 'a' && node.firstChild) {
+ parent = node.parent;
+
+ // Move children after current node
+ sibling = node.lastChild;
+ do {
+ prevSibling = sibling.prev;
+ parent.insert(sibling, node);
+ sibling = prevSibling;
+ } while (sibling);
+ }
+ }
+ });
+ }
+
+ // Convert src and href into data-mce-src, data-mce-href and data-mce-style
+ t.parser.addAttributeFilter('src,href,style', function(nodes, name) {
+ var i = nodes.length, node, dom = t.dom, value, internalName;
+
+ while (i--) {
+ node = nodes[i];
+ value = node.attr(name);
+ internalName = 'data-mce-' + name;
+
+ // Add internal attribute if we need to we don't on a refresh of the document
+ if (!node.attributes.map[internalName]) {
+ if (name === "style")
+ node.attr(internalName, dom.serializeStyle(dom.parseStyle(value), node.name));
+ else
+ node.attr(internalName, t.convertURL(value, name, node.name));
+ }
+ }
+ });
+
+ // Keep scripts from executing
+ t.parser.addNodeFilter('script', function(nodes, name) {
+ var i = nodes.length, node;
+
+ while (i--) {
+ node = nodes[i];
+ node.attr('type', 'mce-' + (node.attr('type') || 'text/javascript'));
+ }
+ });
+
+ t.parser.addNodeFilter('#cdata', function(nodes, name) {
+ var i = nodes.length, node;
+
+ while (i--) {
+ node = nodes[i];
+ node.type = 8;
+ node.name = '#comment';
+ node.value = '[CDATA[' + node.value + ']]';
+ }
+ });
+
+ t.parser.addNodeFilter('p,h1,h2,h3,h4,h5,h6,div', function(nodes, name) {
+ var i = nodes.length, node, nonEmptyElements = t.schema.getNonEmptyElements();
+
+ while (i--) {
+ node = nodes[i];
+
+ if (node.isEmpty(nonEmptyElements))
+ node.empty().append(new tinymce.html.Node('br', 1)).shortEnded = true;
+ }
+ });
+
+ t.serializer = new tinymce.dom.Serializer(s, t.dom, t.schema);
+
+ t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer);
+
+ t.formatter = new tinymce.Formatter(this);
+
+ // Register default formats
+ t.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'},
+
+ link : {inline : 'a', selector : 'a', remove : 'all', split : true, deep : true,
+ onmatch : function(node) {
+ return true;
+ },
+
+ onformat : function(elm, fmt, vars) {
+ each(vars, function(value, key) {
+ t.dom.setAttrib(elm, key, value);
+ });
+ }
+ },
+
+ 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}
+ ]
+ });
+
+ // Register default block formats
+ each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/), function(name) {
+ t.formatter.register(name, {block : name, remove : 'all'});
+ });
+
+ // Register user defined formats
+ t.formatter.register(t.settings.formats);
+
+ t.undoManager = new tinymce.UndoManager(t);
+
+ // Pass through
+ t.undoManager.onAdd.add(function(um, l) {
+ if (um.hasUndo())
+ return t.onChange.dispatch(t, l, um);
+ });
+
+ t.undoManager.onUndo.add(function(um, l) {
+ return t.onUndo.dispatch(t, l, um);
+ });
+
+ t.undoManager.onRedo.add(function(um, l) {
+ return t.onRedo.dispatch(t, l, um);
+ });
+
+ t.forceBlocks = new tinymce.ForceBlocks(t, {
+ forced_root_block : s.forced_root_block
+ });
+
+ t.editorCommands = new tinymce.EditorCommands(t);
+
+ // Pass through
+ t.serializer.onPreProcess.add(function(se, o) {
+ return t.onPreProcess.dispatch(t, o, se);
+ });
+
+ t.serializer.onPostProcess.add(function(se, o) {
+ return t.onPostProcess.dispatch(t, o, se);
+ });
+
+ t.onPreInit.dispatch(t);
+
+ if (!s.gecko_spellcheck)
+ t.getBody().spellcheck = 0;
+
+ if (!s.readonly)
+ t._addEvents();
+
+ t.controlManager.onPostRender.dispatch(t, t.controlManager);
+ t.onPostRender.dispatch(t);
+
+ t.quirks = new tinymce.util.Quirks(this);
+
+ if (s.directionality)
+ t.getBody().dir = s.directionality;
+
+ if (s.nowrap)
+ t.getBody().style.whiteSpace = "nowrap";
+
+ if (s.handle_node_change_callback) {
+ t.onNodeChange.add(function(ed, cm, n) {
+ t.execCallback('handle_node_change_callback', t.id, n, -1, -1, true, t.selection.isCollapsed());
+ });
+ }
+
+ if (s.save_callback) {
+ t.onSaveContent.add(function(ed, o) {
+ var h = t.execCallback('save_callback', t.id, o.content, t.getBody());
+
+ if (h)
+ o.content = h;
+ });
+ }
+
+ if (s.onchange_callback) {
+ t.onChange.add(function(ed, l) {
+ t.execCallback('onchange_callback', t, l);
+ });
+ }
+
+ if (s.protect) {
+ t.onBeforeSetContent.add(function(ed, o) {
+ if (s.protect) {
+ each(s.protect, function(pattern) {
+ o.content = o.content.replace(pattern, function(str) {
+ return '<!--mce:protected ' + escape(str) + '-->';
+ });
+ });
+ }
+ });
+ }
+
+ if (s.convert_newlines_to_brs) {
+ t.onBeforeSetContent.add(function(ed, o) {
+ if (o.initial)
+ o.content = o.content.replace(/\r?\n/g, '<br />');
+ });
+ }
+
+ if (s.preformatted) {
+ t.onPostProcess.add(function(ed, o) {
+ o.content = o.content.replace(/^\s*<pre.*?>/, '');
+ o.content = o.content.replace(/<\/pre>\s*$/, '');
+
+ if (o.set)
+ o.content = '<pre class="mceItemHidden">' + o.content + '</pre>';
+ });
+ }
+
+ if (s.verify_css_classes) {
+ t.serializer.attribValueFilter = function(n, v) {
+ var s, cl;
+
+ if (n == 'class') {
+ // Build regexp for classes
+ if (!t.classesRE) {
+ cl = t.dom.getClasses();
+
+ if (cl.length > 0) {
+ s = '';
+
+ each (cl, function(o) {
+ s += (s ? '|' : '') + o['class'];
+ });
+
+ t.classesRE = new RegExp('(' + s + ')', 'gi');
+ }
+ }
+
+ return !t.classesRE || /(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v) || t.classesRE.test(v) ? v : '';
+ }
+
+ return v;
+ };
+ }
+
+ if (s.cleanup_callback) {
+ t.onBeforeSetContent.add(function(ed, o) {
+ o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);
+ });
+
+ t.onPreProcess.add(function(ed, o) {
+ if (o.set)
+ t.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o);
+
+ if (o.get)
+ t.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o);
+ });
+
+ t.onPostProcess.add(function(ed, o) {
+ if (o.set)
+ o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);
+
+ if (o.get)
+ o.content = t.execCallback('cleanup_callback', 'get_from_editor', o.content, o);
+ });
+ }
+
+ if (s.save_callback) {
+ t.onGetContent.add(function(ed, o) {
+ if (o.save)
+ o.content = t.execCallback('save_callback', t.id, o.content, t.getBody());
+ });
+ }
+
+ if (s.handle_event_callback) {
+ t.onEvent.add(function(ed, e, o) {
+ if (t.execCallback('handle_event_callback', e, ed, o) === false)
+ Event.cancel(e);
+ });
+ }
+
+ // Add visual aids when new contents is added
+ t.onSetContent.add(function() {
+ t.addVisual(t.getBody());
+ });
+
+ // Remove empty contents
+ if (s.padd_empty_editor) {
+ t.onPostProcess.add(function(ed, o) {
+ o.content = o.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/, '');
+ });
+ }
+
+ if (isGecko) {
+ // Fix gecko link bug, when a link is placed at the end of block elements there is
+ // no way to move the caret behind the link. This fix adds a bogus br element after the link
+ function fixLinks(ed, o) {
+ each(ed.dom.select('a'), function(n) {
+ var pn = n.parentNode;
+
+ if (ed.dom.isBlock(pn) && pn.lastChild === n)
+ ed.dom.add(pn, 'br', {'data-mce-bogus' : 1});
+ });
+ };
+
+ t.onExecCommand.add(function(ed, cmd) {
+ if (cmd === 'CreateLink')
+ fixLinks(ed);
+ });
+
+ t.onSetContent.add(t.selection.onSetContent.add(fixLinks));
+ }
+
+ t.load({initial : true, format : 'html'});
+ t.startContent = t.getContent({format : 'raw'});
+ t.undoManager.add();
+ t.initialized = true;
+
+ t.onInit.dispatch(t);
+ t.execCallback('setupcontent_callback', t.id, t.getBody(), t.getDoc());
+ t.execCallback('init_instance_callback', t);
+ t.focus(true);
+ t.nodeChanged({initial : 1});
+
+ // Load specified content CSS last
+ each(t.contentCSS, function(u) {
+ t.dom.loadCSS(u);
+ });
+
+ // Handle auto focus
+ if (s.auto_focus) {
+ setTimeout(function () {
+ var ed = tinymce.get(s.auto_focus);
+
+ ed.selection.select(ed.getBody(), 1);
+ ed.selection.collapse(1);
+ ed.getBody().focus();
+ ed.getWin().focus();
+ }, 100);
+ }
+
+ e = null;
+ },
+
+
+ focus : function(sf) {
+ var oed, t = this, selection = t.selection, ce = t.settings.content_editable, ieRng, controlElm, doc = t.getDoc();
+
+ if (!sf) {
+ // Get selected control element
+ ieRng = selection.getRng();
+ if (ieRng.item) {
+ controlElm = ieRng.item(0);
+ }
+
+ t._refreshContentEditable();
+ selection.normalize();
+
+ // Is not content editable
+ if (!ce)
+ t.getWin().focus();
+
+ // Focus the body as well since it's contentEditable
+ if (tinymce.isGecko) {
+ t.getBody().focus();
+ }
+
+ // Restore selected control element
+ // This is needed when for example an image is selected within a
+ // layer a call to focus will then remove the control selection
+ if (controlElm && controlElm.ownerDocument == doc) {
+ ieRng = doc.body.createControlRange();
+ ieRng.addElement(controlElm);
+ ieRng.select();
+ }
+
+ }
+
+ if (tinymce.activeEditor != t) {
+ if ((oed = tinymce.activeEditor) != null)
+ oed.onDeactivate.dispatch(oed, t);
+
+ t.onActivate.dispatch(t, oed);
+ }
+
+ tinymce._setActive(t);
+ },
+
+ execCallback : function(n) {
+ var t = this, f = t.settings[n], s;
+
+ if (!f)
+ return;
+
+ // Look through lookup
+ if (t.callbackLookup && (s = t.callbackLookup[n])) {
+ f = s.func;
+ s = s.scope;
+ }
+
+ if (is(f, 'string')) {
+ s = f.replace(/\.\w+$/, '');
+ s = s ? tinymce.resolve(s) : 0;
+ f = tinymce.resolve(f);
+ t.callbackLookup = t.callbackLookup || {};
+ t.callbackLookup[n] = {func : f, scope : s};
+ }
+
+ return f.apply(s || t, Array.prototype.slice.call(arguments, 1));
+ },
+
+ translate : function(s) {
+ var c = this.settings.language || 'en', i18n = tinymce.i18n;
+
+ if (!s)
+ return '';
+
+ return i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {
+ return i18n[c + '.' + b] || '{#' + b + '}';
+ });
+ },
+
+ getLang : function(n, dv) {
+ return tinymce.i18n[(this.settings.language || 'en') + '.' + n] || (is(dv) ? dv : '{#' + n + '}');
+ },
+
+ getParam : function(n, dv, ty) {
+ var tr = tinymce.trim, v = is(this.settings[n]) ? this.settings[n] : dv, o;
+
+ if (ty === 'hash') {
+ o = {};
+
+ if (is(v, 'string')) {
+ each(v.indexOf('=') > 0 ? v.split(/[;,](?![^=;,]*(?:[;,]|$))/) : v.split(','), function(v) {
+ v = v.split('=');
+
+ if (v.length > 1)
+ o[tr(v[0])] = tr(v[1]);
+ else
+ o[tr(v[0])] = tr(v);
+ });
+ } else
+ o = v;
+
+ return o;
+ }
+
+ return v;
+ },
+
+ nodeChanged : function(o) {
+ var t = this, s = t.selection, n = s.getStart() || t.getBody();
+
+ // Fix for bug #1896577 it seems that this can not be fired while the editor is loading
+ if (t.initialized) {
+ o = o || {};
+ n = isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n; // Fix for IE initial state
+
+ // Get parents and add them to object
+ o.parents = [];
+ t.dom.getParent(n, function(node) {
+ if (node.nodeName == 'BODY')
+ return true;
+
+ o.parents.push(node);
+ });
+
+ t.onNodeChange.dispatch(
+ t,
+ o ? o.controlManager || t.controlManager : t.controlManager,
+ n,
+ s.isCollapsed(),
+ o
+ );
+ }
+ },
+
+ addButton : function(n, s) {
+ var t = this;
+
+ t.buttons = t.buttons || {};
+ t.buttons[n] = s;
+ },
+
+ addCommand : function(name, callback, scope) {
+ this.execCommands[name] = {func : callback, scope : scope || this};
+ },
+
+ addQueryStateHandler : function(name, callback, scope) {
+ this.queryStateCommands[name] = {func : callback, scope : scope || this};
+ },
+
+ addQueryValueHandler : function(name, callback, scope) {
+ this.queryValueCommands[name] = {func : callback, scope : scope || this};
+ },
+
+ addShortcut : function(pa, desc, cmd_func, sc) {
+ var t = this, c;
+
+ if (!t.settings.custom_shortcuts)
+ return false;
+
+ t.shortcuts = t.shortcuts || {};
+
+ if (is(cmd_func, 'string')) {
+ c = cmd_func;
+
+ cmd_func = function() {
+ t.execCommand(c, false, null);
+ };
+ }
+
+ if (is(cmd_func, 'object')) {
+ c = cmd_func;
+
+ cmd_func = function() {
+ t.execCommand(c[0], c[1], c[2]);
+ };
+ }
+
+ each(explode(pa), function(pa) {
+ var o = {
+ func : cmd_func,
+ scope : sc || this,
+ desc : desc,
+ alt : false,
+ ctrl : false,
+ shift : false
+ };
+
+ each(explode(pa, '+'), function(v) {
+ switch (v) {
+ case 'alt':
+ case 'ctrl':
+ case 'shift':
+ o[v] = true;
+ break;
+
+ default:
+ o.charCode = v.charCodeAt(0);
+ o.keyCode = v.toUpperCase().charCodeAt(0);
+ }
+ });
+
+ t.shortcuts[(o.ctrl ? 'ctrl' : '') + ',' + (o.alt ? 'alt' : '') + ',' + (o.shift ? 'shift' : '') + ',' + o.keyCode] = o;
+ });
+
+ return true;
+ },
+
+ execCommand : function(cmd, ui, val, a) {
+ var t = this, s = 0, o, st;
+
+ if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd) && (!a || !a.skip_focus))
+ t.focus();
+
+ o = {};
+ t.onBeforeExecCommand.dispatch(t, cmd, ui, val, o);
+ if (o.terminate)
+ return false;
+
+ // Command callback
+ if (t.execCallback('execcommand_callback', t.id, t.selection.getNode(), cmd, ui, val)) {
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);
+ return true;
+ }
+
+ // Registred commands
+ if (o = t.execCommands[cmd]) {
+ st = o.func.call(o.scope, ui, val);
+
+ // Fall through on true
+ if (st !== true) {
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);
+ return st;
+ }
+ }
+
+ // Plugin commands
+ each(t.plugins, function(p) {
+ if (p.execCommand && p.execCommand(cmd, ui, val)) {
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);
+ s = 1;
+ return false;
+ }
+ });
+
+ if (s)
+ return true;
+
+ // Theme commands
+ if (t.theme && t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) {
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);
+ return true;
+ }
+
+ // Editor commands
+ if (t.editorCommands.execCommand(cmd, ui, val)) {
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);
+ return true;
+ }
+
+ // Browser commands
+ t.getDoc().execCommand(cmd, ui, val);
+ t.onExecCommand.dispatch(t, cmd, ui, val, a);
+ },
+
+ queryCommandState : function(cmd) {
+ var t = this, o, s;
+
+ // Is hidden then return undefined
+ if (t._isHidden())
+ return;
+
+ // Registred commands
+ if (o = t.queryStateCommands[cmd]) {
+ s = o.func.call(o.scope);
+
+ // Fall though on true
+ if (s !== true)
+ return s;
+ }
+
+ // Registred commands
+ o = t.editorCommands.queryCommandState(cmd);
+ if (o !== -1)
+ return o;
+
+ // Browser commands
+ try {
+ return this.getDoc().queryCommandState(cmd);
+ } catch (ex) {
+ // Fails sometimes see bug: 1896577
+ }
+ },
+
+ queryCommandValue : function(c) {
+ var t = this, o, s;
+
+ // Is hidden then return undefined
+ if (t._isHidden())
+ return;
+
+ // Registred commands
+ if (o = t.queryValueCommands[c]) {
+ s = o.func.call(o.scope);
+
+ // Fall though on true
+ if (s !== true)
+ return s;
+ }
+
+ // Registred commands
+ o = t.editorCommands.queryCommandValue(c);
+ if (is(o))
+ return o;
+
+ // Browser commands
+ try {
+ return this.getDoc().queryCommandValue(c);
+ } catch (ex) {
+ // Fails sometimes see bug: 1896577
+ }
+ },
+
+ show : function() {
+ var t = this;
+
+ DOM.show(t.getContainer());
+ DOM.hide(t.id);
+ t.load();
+ },
+
+ hide : function() {
+ var t = this, d = t.getDoc();
+
+ // Fixed bug where IE has a blinking cursor left from the editor
+ if (isIE && d)
+ d.execCommand('SelectAll');
+
+ // We must save before we hide so Safari doesn't crash
+ t.save();
+ DOM.hide(t.getContainer());
+ DOM.setStyle(t.id, 'display', t.orgDisplay);
+ },
+
+ isHidden : function() {
+ return !DOM.isHidden(this.id);
+ },
+
+ setProgressState : function(b, ti, o) {
+ this.onSetProgressState.dispatch(this, b, ti, o);
+
+ return b;
+ },
+
+ load : function(o) {
+ var t = this, e = t.getElement(), h;
+
+ if (e) {
+ o = o || {};
+ o.load = true;
+
+ // Double encode existing entities in the value
+ h = t.setContent(is(e.value) ? e.value : e.innerHTML, o);
+ o.element = e;
+
+ if (!o.no_events)
+ t.onLoadContent.dispatch(t, o);
+
+ o.element = e = null;
+
+ return h;
+ }
+ },
+
+ save : function(o) {
+ var t = this, e = t.getElement(), h, f;
+
+ if (!e || !t.initialized)
+ return;
+
+ o = o || {};
+ o.save = true;
+
+ // Add undo level will trigger onchange event
+ if (!o.no_events) {
+ t.undoManager.typing = false;
+ t.undoManager.add();
+ }
+
+ o.element = e;
+ h = o.content = t.getContent(o);
+
+ if (!o.no_events)
+ t.onSaveContent.dispatch(t, o);
+
+ h = o.content;
+
+ if (!/TEXTAREA|INPUT/i.test(e.nodeName)) {
+ e.innerHTML = h;
+
+ // Update hidden form element
+ if (f = DOM.getParent(t.id, 'form')) {
+ each(f.elements, function(e) {
+ if (e.name == t.id) {
+ e.value = h;
+ return false;
+ }
+ });
+ }
+ } else
+ e.value = h;
+
+ o.element = e = null;
+
+ return h;
+ },
+
+ setContent : function(content, args) {
+ var self = this, rootNode, body = self.getBody(), forcedRootBlockName;
+
+ // Setup args object
+ args = args || {};
+ args.format = args.format || 'html';
+ args.set = true;
+ args.content = content;
+
+ // Do preprocessing
+ if (!args.no_events)
+ self.onBeforeSetContent.dispatch(self, args);
+
+ content = args.content;
+
+ // Padd empty content in Gecko and Safari. Commands will otherwise fail on the content
+ // It will also be impossible to place the caret in the editor unless there is a BR element present
+ if (!tinymce.isIE && (content.length === 0 || /^\s+$/.test(content))) {
+ forcedRootBlockName = self.settings.forced_root_block;
+ if (forcedRootBlockName)
+ content = '<' + forcedRootBlockName + '><br data-mce-bogus="1"></' + forcedRootBlockName + '>';
+ else
+ content = '<br data-mce-bogus="1">';
+
+ body.innerHTML = content;
+ self.selection.select(body, true);
+ self.selection.collapse(true);
+ return;
+ }
+
+ // Parse and serialize the html
+ if (args.format !== 'raw') {
+ content = new tinymce.html.Serializer({}, self.schema).serialize(
+ self.parser.parse(content)
+ );
+ }
+
+ // Set the new cleaned contents to the editor
+ args.content = tinymce.trim(content);
+ self.dom.setHTML(body, args.content);
+
+ // Do post processing
+ if (!args.no_events)
+ self.onSetContent.dispatch(self, args);
+
+ self.selection.normalize();
+
+ return args.content;
+ },
+
+ getContent : function(args) {
+ var self = this, content;
+
+ // Setup args object
+ args = args || {};
+ args.format = args.format || 'html';
+ args.get = true;
+
+ // Do preprocessing
+ if (!args.no_events)
+ self.onBeforeGetContent.dispatch(self, args);
+
+ // Get raw contents or by default the cleaned contents
+ if (args.format == 'raw')
+ content = self.getBody().innerHTML;
+ else
+ content = self.serializer.serialize(self.getBody(), args);
+
+ args.content = tinymce.trim(content);
+
+ // Do post processing
+ if (!args.no_events)
+ self.onGetContent.dispatch(self, args);
+
+ return args.content;
+ },
+
+ isDirty : function() {
+ var self = this;
+
+ return tinymce.trim(self.startContent) != tinymce.trim(self.getContent({format : 'raw', no_events : 1})) && !self.isNotDirty;
+ },
+
+ getContainer : function() {
+ var t = this;
+
+ if (!t.container)
+ t.container = DOM.get(t.editorContainer || t.id + '_parent');
+
+ return t.container;
+ },
+
+ getContentAreaContainer : function() {
+ return this.contentAreaContainer;
+ },
+
+ getElement : function() {
+ return DOM.get(this.settings.content_element || this.id);
+ },
+
+ getWin : function() {
+ var t = this, e;
+
+ if (!t.contentWindow) {
+ e = DOM.get(t.id + "_ifr");
+
+ if (e)
+ t.contentWindow = e.contentWindow;
+ }
+
+ return t.contentWindow;
+ },
+
+ getDoc : function() {
+ var t = this, w;
+
+ if (!t.contentDocument) {
+ w = t.getWin();
+
+ if (w)
+ t.contentDocument = w.document;
+ }
+
+ return t.contentDocument;
+ },
+
+ getBody : function() {
+ return this.bodyElement || this.getDoc().body;
+ },
+
+ convertURL : function(u, n, e) {
+ var t = this, s = t.settings;
+
+ // Use callback instead
+ if (s.urlconverter_callback)
+ return t.execCallback('urlconverter_callback', u, e, true, n);
+
+ // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs
+ if (!s.convert_urls || (e && e.nodeName == 'LINK') || u.indexOf('file:') === 0)
+ return u;
+
+ // Convert to relative
+ if (s.relative_urls)
+ return t.documentBaseURI.toRelative(u);
+
+ // Convert to absolute
+ u = t.documentBaseURI.toAbsolute(u, s.remove_script_host);
+
+ return u;
+ },
+
+ addVisual : function(e) {
+ var t = this, s = t.settings;
+
+ e = e || t.getBody();
+
+ if (!is(t.hasVisual))
+ t.hasVisual = s.visual;
+
+ each(t.dom.select('table,a', e), function(e) {
+ var v;
+
+ switch (e.nodeName) {
+ case 'TABLE':
+ v = t.dom.getAttrib(e, 'border');
+
+ if (!v || v == '0') {
+ if (t.hasVisual)
+ t.dom.addClass(e, s.visual_table_class);
+ else
+ t.dom.removeClass(e, s.visual_table_class);
+ }
+
+ return;
+
+ case 'A':
+ v = t.dom.getAttrib(e, 'name');
+
+ if (v) {
+ if (t.hasVisual)
+ t.dom.addClass(e, 'mceItemAnchor');
+ else
+ t.dom.removeClass(e, 'mceItemAnchor');
+ }
+
+ return;
+ }
+ });
+
+ t.onVisualAid.dispatch(t, e, t.hasVisual);
+ },
+
+ remove : function() {
+ var t = this, e = t.getContainer();
+
+ t.removed = 1; // Cancels post remove event execution
+ t.hide();
+
+ t.execCallback('remove_instance_callback', t);
+ t.onRemove.dispatch(t);
+
+ // Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command
+ t.onExecCommand.listeners = [];
+
+ tinymce.remove(t);
+ DOM.remove(e);
+ },
+
+ destroy : function(s) {
+ var t = this;
+
+ // One time is enough
+ if (t.destroyed)
+ return;
+
+ if (!s) {
+ tinymce.removeUnload(t.destroy);
+ tinyMCE.onBeforeUnload.remove(t._beforeUnload);
+
+ // Manual destroy
+ if (t.theme && t.theme.destroy)
+ t.theme.destroy();
+
+ // Destroy controls, selection and dom
+ t.controlManager.destroy();
+ t.selection.destroy();
+ t.dom.destroy();
+
+ // Remove all events
+
+ // Don't clear the window or document if content editable
+ // is enabled since other instances might still be present
+ if (!t.settings.content_editable) {
+ Event.clear(t.getWin());
+ Event.clear(t.getDoc());
+ }
+
+ Event.clear(t.getBody());
+ Event.clear(t.formElement);
+ }
+
+ if (t.formElement) {
+ t.formElement.submit = t.formElement._mceOldSubmit;
+ t.formElement._mceOldSubmit = null;
+ }
+
+ t.contentAreaContainer = t.formElement = t.container = t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null;
+
+ if (t.selection)
+ t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null;
+
+ t.destroyed = 1;
+ },
+
+ // Internal functions
+
+ _addEvents : function() {
+ // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset
+ var t = this, i, s = t.settings, dom = t.dom, lo = {
+ mouseup : 'onMouseUp',
+ mousedown : 'onMouseDown',
+ click : 'onClick',
+ keyup : 'onKeyUp',
+ keydown : 'onKeyDown',
+ keypress : 'onKeyPress',
+ submit : 'onSubmit',
+ reset : 'onReset',
+ contextmenu : 'onContextMenu',
+ dblclick : 'onDblClick',
+ paste : 'onPaste' // Doesn't work in all browsers yet
+ };
+
+ function eventHandler(e, o) {
+ var ty = e.type;
+
+ // Don't fire events when it's removed
+ if (t.removed)
+ return;
+
+ // Generic event handler
+ if (t.onEvent.dispatch(t, e, o) !== false) {
+ // Specific event handler
+ t[lo[e.fakeType || e.type]].dispatch(t, e, o);
+ }
+ };
+
+ // Add DOM events
+ each(lo, function(v, k) {
+ switch (k) {
+ case 'contextmenu':
+ dom.bind(t.getDoc(), k, eventHandler);
+ break;
+
+ case 'paste':
+ dom.bind(t.getBody(), k, function(e) {
+ eventHandler(e);
+ });
+ break;
+
+ case 'submit':
+ case 'reset':
+ dom.bind(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler);
+ break;
+
+ default:
+ dom.bind(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler);
+ }
+ });
+
+ dom.bind(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) {
+ t.focus(true);
+ });
+
+
+ // Fixes bug where a specified document_base_uri could result in broken images
+ // This will also fix drag drop of images in Gecko
+ if (tinymce.isGecko) {
+ dom.bind(t.getDoc(), 'DOMNodeInserted', function(e) {
+ var v;
+
+ e = e.target;
+
+ if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('data-mce-src')))
+ e.src = t.documentBaseURI.toAbsolute(v);
+ });
+ }
+
+ // Set various midas options in Gecko
+ if (isGecko) {
+ function setOpts() {
+ var t = this, d = t.getDoc(), s = t.settings;
+
+ if (isGecko && !s.readonly) {
+ t._refreshContentEditable();
+
+ try {
+ // Try new Gecko method
+ d.execCommand("styleWithCSS", 0, false);
+ } catch (ex) {
+ // Use old method
+ if (!t._isHidden())
+ try {d.execCommand("useCSS", 0, true);} catch (ex) {}
+ }
+
+ if (!s.table_inline_editing)
+ try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {}
+
+ if (!s.object_resizing)
+ try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {}
+ }
+ };
+
+ t.onBeforeExecCommand.add(setOpts);
+ t.onMouseDown.add(setOpts);
+ }
+
+ // Add node change handlers
+ t.onMouseUp.add(t.nodeChanged);
+ //t.onClick.add(t.nodeChanged);
+ t.onKeyUp.add(function(ed, e) {
+ var c = e.keyCode;
+
+ 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)
+ t.nodeChanged();
+ });
+
+
+ // Add block quote deletion handler
+ t.onKeyDown.add(function(ed, e) {
+ // Was the BACKSPACE key pressed?
+ if (e.keyCode != 8)
+ return;
+
+ var n = ed.selection.getRng().startContainer;
+ var offset = ed.selection.getRng().startOffset;
+
+ while (n && n.nodeType && n.nodeType != 1 && n.parentNode)
+ n = n.parentNode;
+
+ // Is the cursor at the beginning of a blockquote?
+ if (n && n.parentNode && n.parentNode.tagName === 'BLOCKQUOTE' && n.parentNode.firstChild == n && offset == 0) {
+ // Remove the blockquote
+ ed.formatter.toggle('blockquote', null, n.parentNode);
+
+ // Move the caret to the beginning of n
+ var rng = ed.selection.getRng();
+ rng.setStart(n, 0);
+ rng.setEnd(n, 0);
+ ed.selection.setRng(rng);
+ ed.selection.collapse(false);
+ }
+ });
+
+
+
+ // Add reset handler
+ t.onReset.add(function() {
+ t.setContent(t.startContent, {format : 'raw'});
+ });
+
+ // Add shortcuts
+ if (s.custom_shortcuts) {
+ if (s.custom_undo_redo_keyboard_shortcuts) {
+ t.addShortcut('ctrl+z', t.getLang('undo_desc'), 'Undo');
+ t.addShortcut('ctrl+y', t.getLang('redo_desc'), 'Redo');
+ }
+
+ // Add default shortcuts for gecko
+ t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');
+ t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');
+ t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');
+
+ // BlockFormat shortcuts keys
+ for (i=1; i<=6; i++)
+ t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]);
+
+ t.addShortcut('ctrl+7', '', ['FormatBlock', false, 'p']);
+ t.addShortcut('ctrl+8', '', ['FormatBlock', false, 'div']);
+ t.addShortcut('ctrl+9', '', ['FormatBlock', false, 'address']);
+
+ function find(e) {
+ var v = null;
+
+ if (!e.altKey && !e.ctrlKey && !e.metaKey)
+ return v;
+
+ each(t.shortcuts, function(o) {
+ if (tinymce.isMac && o.ctrl != e.metaKey)
+ return;
+ else if (!tinymce.isMac && o.ctrl != e.ctrlKey)
+ return;
+
+ if (o.alt != e.altKey)
+ return;
+
+ if (o.shift != e.shiftKey)
+ return;
+
+ if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) {
+ v = o;
+ return false;
+ }
+ });
+
+ return v;
+ };
+
+ t.onKeyUp.add(function(ed, e) {
+ var o = find(e);
+
+ if (o)
+ return Event.cancel(e);
+ });
+
+ t.onKeyPress.add(function(ed, e) {
+ var o = find(e);
+
+ if (o)
+ return Event.cancel(e);
+ });
+
+ t.onKeyDown.add(function(ed, e) {
+ var o = find(e);
+
+ if (o) {
+ o.func.call(o.scope);
+ return Event.cancel(e);
+ }
+ });
+ }
+
+ if (tinymce.isIE) {
+ // Fix so resize will only update the width and height attributes not the styles of an image
+ // It will also block mceItemNoResize items
+ dom.bind(t.getDoc(), 'controlselect', function(e) {
+ var re = t.resizeInfo, cb;
+
+ e = e.target;
+
+ // Don't do this action for non image elements
+ if (e.nodeName !== 'IMG')
+ return;
+
+ if (re)
+ dom.unbind(re.node, re.ev, re.cb);
+
+ if (!dom.hasClass(e, 'mceItemNoResize')) {
+ ev = 'resizeend';
+ cb = dom.bind(e, ev, function(e) {
+ var v;
+
+ e = e.target;
+
+ if (v = dom.getStyle(e, 'width')) {
+ dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, ''));
+ dom.setStyle(e, 'width', '');
+ }
+
+ if (v = dom.getStyle(e, 'height')) {
+ dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, ''));
+ dom.setStyle(e, 'height', '');
+ }
+ });
+ } else {
+ ev = 'resizestart';
+ cb = dom.bind(e, 'resizestart', Event.cancel, Event);
+ }
+
+ re = t.resizeInfo = {
+ node : e,
+ ev : ev,
+ cb : cb
+ };
+ });
+ }
+
+ if (tinymce.isOpera) {
+ t.onClick.add(function(ed, e) {
+ Event.prevent(e);
+ });
+ }
+
+ // Add custom undo/redo handlers
+ if (s.custom_undo_redo) {
+ function addUndo() {
+ t.undoManager.typing = false;
+ t.undoManager.add();
+ };
+
+ dom.bind(t.getDoc(), 'focusout', function(e) {
+ if (!t.removed && t.undoManager.typing)
+ addUndo();
+ });
+
+ // Add undo level when contents is drag/dropped within the editor
+ t.dom.bind(t.dom.getRoot(), 'dragend', function(e) {
+ addUndo();
+ });
+
+ t.onKeyUp.add(function(ed, e) {
+ var keyCode = e.keyCode;
+
+ if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45 || e.ctrlKey)
+ addUndo();
+ });
+
+ t.onKeyDown.add(function(ed, e) {
+ var keyCode = e.keyCode, sel;
+
+ if (keyCode == 8) {
+ sel = t.getDoc().selection;
+
+ // Fix IE control + backspace browser bug
+ if (sel && sel.createRange && sel.createRange().item) {
+ t.undoManager.beforeChange();
+ ed.dom.remove(sel.createRange().item(0));
+ addUndo();
+
+ return Event.cancel(e);
+ }
+ }
+
+ // Is caracter positon keys left,right,up,down,home,end,pgdown,pgup,enter
+ if ((keyCode >= 33 && keyCode <= 36) || (keyCode >= 37 && keyCode <= 40) || keyCode == 13 || keyCode == 45) {
+ // Add position before enter key is pressed, used by IE since it still uses the default browser behavior
+ // Todo: Remove this once we normalize enter behavior on IE
+ if (tinymce.isIE && keyCode == 13)
+ t.undoManager.beforeChange();
+
+ if (t.undoManager.typing)
+ addUndo();
+
+ return;
+ }
+
+ // If key isn't shift,ctrl,alt,capslock,metakey
+ if ((keyCode < 16 || keyCode > 20) && keyCode != 224 && keyCode != 91 && !t.undoManager.typing) {
+ t.undoManager.beforeChange();
+ t.undoManager.typing = true;
+ t.undoManager.add();
+ }
+ });
+
+ t.onMouseDown.add(function() {
+ if (t.undoManager.typing)
+ addUndo();
+ });
+ }
+
+ // Bug fix for FireFox keeping styles from end of selection instead of start.
+ if (tinymce.isGecko) {
+ function getAttributeApplyFunction() {
+ var template = t.dom.getAttribs(t.selection.getStart().cloneNode(false));
+
+ return function() {
+ var target = t.selection.getStart();
+
+ if (target !== t.getBody()) {
+ t.dom.setAttrib(target, "style", null);
+
+ each(template, function(attr) {
+ target.setAttributeNode(attr.cloneNode(true));
+ });
+ }
+ };
+ }
+
+ function isSelectionAcrossElements() {
+ var s = t.selection;
+
+ return !s.isCollapsed() && s.getStart() != s.getEnd();
+ }
+
+ t.onKeyPress.add(function(ed, e) {
+ var applyAttributes;
+
+ if ((e.keyCode == 8 || e.keyCode == 46) && isSelectionAcrossElements()) {
+ applyAttributes = getAttributeApplyFunction();
+ t.getDoc().execCommand('delete', false, null);
+ applyAttributes();
+
+ return Event.cancel(e);
+ }
+ });
+
+ t.dom.bind(t.getDoc(), 'cut', function(e) {
+ var applyAttributes;
+
+ if (isSelectionAcrossElements()) {
+ applyAttributes = getAttributeApplyFunction();
+ t.onKeyUp.addToTop(Event.cancel, Event);
+
+ setTimeout(function() {
+ applyAttributes();
+ t.onKeyUp.remove(Event.cancel, Event);
+ }, 0);
+ }
+ });
+ }
+ },
+
+ _refreshContentEditable : function() {
+ var self = this, body, parent;
+
+ // Check if the editor was hidden and the re-initalize contentEditable mode by removing and adding the body again
+ if (self._isHidden()) {
+ body = self.getBody();
+ parent = body.parentNode;
+
+ parent.removeChild(body);
+ parent.appendChild(body);
+
+ body.focus();
+ }
+ },
+
+ _isHidden : function() {
+ var s;
+
+ if (!isGecko)
+ return 0;
+
+ // Weird, wheres that cursor selection?
+ s = this.selection.getSel();
+ return (!s || !s.rangeCount || s.rangeCount == 0);
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ // Added for compression purposes
+ var each = tinymce.each, undefined, TRUE = true, FALSE = false;
+
+ tinymce.EditorCommands = function(editor) {
+ var dom = editor.dom,
+ selection = editor.selection,
+ commands = {state: {}, exec : {}, value : {}},
+ settings = editor.settings,
+ formatter = editor.formatter,
+ bookmark;
+
+ function execCommand(command, ui, value) {
+ var func;
+
+ command = command.toLowerCase();
+ if (func = commands.exec[command]) {
+ func(command, ui, value);
+ return TRUE;
+ }
+
+ return FALSE;
+ };
+
+ function queryCommandState(command) {
+ var func;
+
+ command = command.toLowerCase();
+ if (func = commands.state[command])
+ return func(command);
+
+ return -1;
+ };
+
+ function queryCommandValue(command) {
+ var func;
+
+ command = command.toLowerCase();
+ if (func = commands.value[command])
+ return func(command);
+
+ return FALSE;
+ };
+
+ function addCommands(command_list, type) {
+ type = type || 'exec';
+
+ each(command_list, function(callback, command) {
+ each(command.toLowerCase().split(','), function(command) {
+ commands[type][command] = callback;
+ });
+ });
+ };
+
+ // Expose public methods
+ tinymce.extend(this, {
+ execCommand : execCommand,
+ queryCommandState : queryCommandState,
+ queryCommandValue : queryCommandValue,
+ addCommands : addCommands
+ });
+
+ // Private methods
+
+ function execNativeCommand(command, ui, value) {
+ if (ui === undefined)
+ ui = FALSE;
+
+ if (value === undefined)
+ value = null;
+
+ return editor.getDoc().execCommand(command, ui, value);
+ };
+
+ function isFormatMatch(name) {
+ return formatter.match(name);
+ };
+
+ function toggleFormat(name, value) {
+ formatter.toggle(name, value ? {value : value} : undefined);
+ };
+
+ function storeSelection(type) {
+ bookmark = selection.getBookmark(type);
+ };
+
+ function restoreSelection() {
+ selection.moveToBookmark(bookmark);
+ };
+
+ // Add execCommand overrides
+ addCommands({
+ // Ignore these, added for compatibility
+ 'mceResetDesignMode,mceBeginUndoLevel' : function() {},
+
+ // Add undo manager logic
+ 'mceEndUndoLevel,mceAddUndoLevel' : function() {
+ editor.undoManager.add();
+ },
+
+ 'Cut,Copy,Paste' : function(command) {
+ var doc = editor.getDoc(), failed;
+
+ // Try executing the native command
+ try {
+ execNativeCommand(command);
+ } catch (ex) {
+ // Command failed
+ failed = TRUE;
+ }
+
+ // Present alert message about clipboard access not being available
+ if (failed || !doc.queryCommandSupported(command)) {
+ if (tinymce.isGecko) {
+ editor.windowManager.confirm(editor.getLang('clipboard_msg'), function(state) {
+ if (state)
+ open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', '_blank');
+ });
+ } else
+ editor.windowManager.alert(editor.getLang('clipboard_no_support'));
+ }
+ },
+
+ // Override unlink command
+ unlink : function(command) {
+ if (selection.isCollapsed())
+ selection.select(selection.getNode());
+
+ execNativeCommand(command);
+ selection.collapse(FALSE);
+ },
+
+ // Override justify commands to use the text formatter engine
+ 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {
+ var align = command.substring(7);
+
+ // Remove all other alignments first
+ each('left,center,right,full'.split(','), function(name) {
+ if (align != name)
+ formatter.remove('align' + name);
+ });
+
+ toggleFormat('align' + align);
+ execCommand('mceRepaint');
+ },
+
+ // Override list commands to fix WebKit bug
+ 'InsertUnorderedList,InsertOrderedList' : function(command) {
+ var listElm, listParent;
+
+ execNativeCommand(command);
+
+ // WebKit produces lists within block elements so we need to split them
+ // we will replace the native list creation logic to custom logic later on
+ // TODO: Remove this when the list creation logic is removed
+ listElm = dom.getParent(selection.getNode(), 'ol,ul');
+ if (listElm) {
+ listParent = listElm.parentNode;
+
+ // If list is within a text block then split that block
+ if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {
+ storeSelection();
+ dom.split(listParent, listElm);
+ restoreSelection();
+ }
+ }
+ },
+
+ // Override commands to use the text formatter engine
+ 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript' : function(command) {
+ toggleFormat(command);
+ },
+
+ // Override commands to use the text formatter engine
+ 'ForeColor,HiliteColor,FontName' : function(command, ui, value) {
+ toggleFormat(command, value);
+ },
+
+ FontSize : function(command, ui, value) {
+ var fontClasses, fontSizes;
+
+ // Convert font size 1-7 to styles
+ if (value >= 1 && value <= 7) {
+ fontSizes = tinymce.explode(settings.font_size_style_values);
+ fontClasses = tinymce.explode(settings.font_size_classes);
+
+ if (fontClasses)
+ value = fontClasses[value - 1] || value;
+ else
+ value = fontSizes[value - 1] || value;
+ }
+
+ toggleFormat(command, value);
+ },
+
+ RemoveFormat : function(command) {
+ formatter.remove(command);
+ },
+
+ mceBlockQuote : function(command) {
+ toggleFormat('blockquote');
+ },
+
+ FormatBlock : function(command, ui, value) {
+ return toggleFormat(value || 'p');
+ },
+
+ mceCleanup : function() {
+ var bookmark = selection.getBookmark();
+
+ editor.setContent(editor.getContent({cleanup : TRUE}), {cleanup : TRUE});
+
+ selection.moveToBookmark(bookmark);
+ },
+
+ mceRemoveNode : function(command, ui, value) {
+ var node = value || selection.getNode();
+
+ // Make sure that the body node isn't removed
+ if (node != editor.getBody()) {
+ storeSelection();
+ editor.dom.remove(node, TRUE);
+ restoreSelection();
+ }
+ },
+
+ mceSelectNodeDepth : function(command, ui, value) {
+ var counter = 0;
+
+ dom.getParent(selection.getNode(), function(node) {
+ if (node.nodeType == 1 && counter++ == value) {
+ selection.select(node);
+ return FALSE;
+ }
+ }, editor.getBody());
+ },
+
+ mceSelectNode : function(command, ui, value) {
+ selection.select(value);
+ },
+
+ mceInsertContent : function(command, ui, value) {
+ var parser, serializer, parentNode, rootNode, fragment, args,
+ marker, nodeRect, viewPortRect, rng, node, node2, bookmarkHtml, viewportBodyElement;
+
+ // Setup parser and serializer
+ parser = editor.parser;
+ serializer = new tinymce.html.Serializer({}, editor.schema);
+ bookmarkHtml = '<span id="mce_marker" data-mce-type="bookmark">\uFEFF</span>';
+
+ // Run beforeSetContent handlers on the HTML to be inserted
+ args = {content: value, format: 'html'};
+ selection.onBeforeSetContent.dispatch(selection, args);
+ value = args.content;
+
+ // Add caret at end of contents if it's missing
+ if (value.indexOf('{$caret}') == -1)
+ value += '{$caret}';
+
+ // Replace the caret marker with a span bookmark element
+ value = value.replace(/\{\$caret\}/, bookmarkHtml);
+
+ // Insert node maker where we will insert the new HTML and get it's parent
+ if (!selection.isCollapsed())
+ editor.getDoc().execCommand('Delete', false, null);
+
+ parentNode = selection.getNode();
+
+ // Parse the fragment within the context of the parent node
+ args = {context : parentNode.nodeName.toLowerCase()};
+ fragment = parser.parse(value, args);
+
+ // Move the caret to a more suitable location
+ node = fragment.lastChild;
+ if (node.attr('id') == 'mce_marker') {
+ marker = node;
+
+ for (node = node.prev; node; node = node.walk(true)) {
+ if (node.type == 3 || !dom.isBlock(node.name)) {
+ node.parent.insert(marker, node, node.name === 'br');
+ break;
+ }
+ }
+ }
+
+ // If parser says valid we can insert the contents into that parent
+ if (!args.invalid) {
+ value = serializer.serialize(fragment);
+
+ // Check if parent is empty or only has one BR element then set the innerHTML of that parent
+ node = parentNode.firstChild;
+ node2 = parentNode.lastChild;
+ if (!node || (node === node2 && node.nodeName === 'BR'))
+ dom.setHTML(parentNode, value);
+ else
+ selection.setContent(value);
+ } else {
+ // If the fragment was invalid within that context then we need
+ // to parse and process the parent it's inserted into
+
+ // Insert bookmark node and get the parent
+ selection.setContent(bookmarkHtml);
+ parentNode = editor.selection.getNode();
+ rootNode = editor.getBody();
+
+ // Opera will return the document node when selection is in root
+ if (parentNode.nodeType == 9)
+ parentNode = node = rootNode;
+ else
+ node = parentNode;
+
+ // Find the ancestor just before the root element
+ while (node !== rootNode) {
+ parentNode = node;
+ node = node.parentNode;
+ }
+
+ // Get the outer/inner HTML depending on if we are in the root and parser and serialize that
+ value = parentNode == rootNode ? rootNode.innerHTML : dom.getOuterHTML(parentNode);
+ value = serializer.serialize(
+ parser.parse(
+ // Need to replace by using a function since $ in the contents would otherwise be a problem
+ value.replace(/<span (id="mce_marker"|id=mce_marker).+?<\/span>/i, function() {
+ return serializer.serialize(fragment);
+ })
+ )
+ );
+
+ // Set the inner/outer HTML depending on if we are in the root or not
+ if (parentNode == rootNode)
+ dom.setHTML(rootNode, value);
+ else
+ dom.setOuterHTML(parentNode, value);
+ }
+
+ marker = dom.get('mce_marker');
+
+ // Scroll range into view scrollIntoView on element can't be used since it will scroll the main view port as well
+ nodeRect = dom.getRect(marker);
+ viewPortRect = dom.getViewPort(editor.getWin());
+
+ // Check if node is out side the viewport if it is then scroll to it
+ if ((nodeRect.y + nodeRect.h > viewPortRect.y + viewPortRect.h || nodeRect.y < viewPortRect.y) ||
+ (nodeRect.x > viewPortRect.x + viewPortRect.w || nodeRect.x < viewPortRect.x)) {
+ viewportBodyElement = tinymce.isIE ? editor.getDoc().documentElement : editor.getBody();
+ viewportBodyElement.scrollLeft = nodeRect.x;
+ viewportBodyElement.scrollTop = nodeRect.y - viewPortRect.h + 25;
+ }
+
+ // Move selection before marker and remove it
+ rng = dom.createRng();
+
+ // If previous sibling is a text node set the selection to the end of that node
+ node = marker.previousSibling;
+ if (node && node.nodeType == 3) {
+ rng.setStart(node, node.nodeValue.length);
+ } else {
+ // If the previous sibling isn't a text node or doesn't exist set the selection before the marker node
+ rng.setStartBefore(marker);
+ rng.setEndBefore(marker);
+ }
+
+ // Remove the marker node and set the new range
+ dom.remove(marker);
+ selection.setRng(rng);
+
+ // Dispatch after event and add any visual elements needed
+ selection.onSetContent.dispatch(selection, args);
+ editor.addVisual();
+ },
+
+ mceInsertRawHTML : function(command, ui, value) {
+ selection.setContent('tiny_mce_marker');
+ editor.setContent(editor.getContent().replace(/tiny_mce_marker/g, function() { return value }));
+ },
+
+ mceSetContent : function(command, ui, value) {
+ editor.setContent(value);
+ },
+
+ 'Indent,Outdent' : function(command) {
+ var intentValue, indentUnit, value;
+
+ // Setup indent level
+ intentValue = settings.indentation;
+ indentUnit = /[a-z%]+$/i.exec(intentValue);
+ intentValue = parseInt(intentValue);
+
+ if (!queryCommandState('InsertUnorderedList') && !queryCommandState('InsertOrderedList')) {
+ each(selection.getSelectedBlocks(), function(element) {
+ if (command == 'outdent') {
+ value = Math.max(0, parseInt(element.style.paddingLeft || 0) - intentValue);
+ dom.setStyle(element, 'paddingLeft', value ? value + indentUnit : '');
+ } else
+ dom.setStyle(element, 'paddingLeft', (parseInt(element.style.paddingLeft || 0) + intentValue) + indentUnit);
+ });
+ } else
+ execNativeCommand(command);
+ },
+
+ mceRepaint : function() {
+ var bookmark;
+
+ if (tinymce.isGecko) {
+ try {
+ storeSelection(TRUE);
+
+ if (selection.getSel())
+ selection.getSel().selectAllChildren(editor.getBody());
+
+ selection.collapse(TRUE);
+ restoreSelection();
+ } catch (ex) {
+ // Ignore
+ }
+ }
+ },
+
+ mceToggleFormat : function(command, ui, value) {
+ formatter.toggle(value);
+ },
+
+ InsertHorizontalRule : function() {
+ editor.execCommand('mceInsertContent', false, '<hr />');
+ },
+
+ mceToggleVisualAid : function() {
+ editor.hasVisual = !editor.hasVisual;
+ editor.addVisual();
+ },
+
+ mceReplaceContent : function(command, ui, value) {
+ editor.execCommand('mceInsertContent', false, value.replace(/\{\$selection\}/g, selection.getContent({format : 'text'})));
+ },
+
+ mceInsertLink : function(command, ui, value) {
+ var anchor;
+
+ if (typeof(value) == 'string')
+ value = {href : value};
+
+ anchor = dom.getParent(selection.getNode(), 'a');
+
+ // Spaces are never valid in URLs and it's a very common mistake for people to make so we fix it here.
+ value.href = value.href.replace(' ', '%20');
+
+ // Remove existing links if there could be child links or that the href isn't specified
+ if (!anchor || !value.href) {
+ formatter.remove('link');
+ }
+
+ // Apply new link to selection
+ if (value.href) {
+ formatter.apply('link', value, anchor);
+ }
+ },
+
+ selectAll : function() {
+ var root = dom.getRoot(), rng = dom.createRng();
+
+ rng.setStart(root, 0);
+ rng.setEnd(root, root.childNodes.length);
+
+ editor.selection.setRng(rng);
+ }
+ });
+
+ // Add queryCommandState overrides
+ addCommands({
+ // Override justify commands
+ 'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {
+ return isFormatMatch('align' + command.substring(7));
+ },
+
+ 'Bold,Italic,Underline,Strikethrough,Superscript,Subscript' : function(command) {
+ return isFormatMatch(command);
+ },
+
+ mceBlockQuote : function() {
+ return isFormatMatch('blockquote');
+ },
+
+ Outdent : function() {
+ var node;
+
+ if (settings.inline_styles) {
+ if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)
+ return TRUE;
+
+ if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)
+ return TRUE;
+ }
+
+ return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || (!settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE'));
+ },
+
+ 'InsertUnorderedList,InsertOrderedList' : function(command) {
+ return dom.getParent(selection.getNode(), command == 'insertunorderedlist' ? 'UL' : 'OL');
+ }
+ }, 'state');
+
+ // Add queryCommandValue overrides
+ addCommands({
+ 'FontSize,FontName' : function(command) {
+ var value = 0, parent;
+
+ if (parent = dom.getParent(selection.getNode(), 'span')) {
+ if (command == 'fontsize')
+ value = parent.style.fontSize;
+ else
+ value = parent.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase();
+ }
+
+ return value;
+ }
+ }, 'value');
+
+ // Add undo manager logic
+ if (settings.custom_undo_redo) {
+ addCommands({
+ Undo : function() {
+ editor.undoManager.undo();
+ },
+
+ Redo : function() {
+ editor.undoManager.redo();
+ }
+ });
+ }
+ };
+})(tinymce);
+
+(function(tinymce) {
+ var Dispatcher = tinymce.util.Dispatcher;
+
+ tinymce.UndoManager = function(editor) {
+ var self, index = 0, data = [], beforeBookmark;
+
+ function getContent() {
+ return tinymce.trim(editor.getContent({format : 'raw', no_events : 1}));
+ };
+
+ return self = {
+ typing : false,
+
+ onAdd : new Dispatcher(self),
+
+ onUndo : new Dispatcher(self),
+
+ onRedo : new Dispatcher(self),
+
+ beforeChange : function() {
+ beforeBookmark = editor.selection.getBookmark(2, true);
+ },
+
+ add : function(level) {
+ var i, settings = editor.settings, lastLevel;
+
+ level = level || {};
+ level.content = getContent();
+
+ // Add undo level if needed
+ lastLevel = data[index];
+ if (lastLevel && lastLevel.content == level.content)
+ return null;
+
+ // Set before bookmark on previous level
+ if (data[index])
+ data[index].beforeBookmark = beforeBookmark;
+
+ // Time to compress
+ if (settings.custom_undo_redo_levels) {
+ if (data.length > settings.custom_undo_redo_levels) {
+ for (i = 0; i < data.length - 1; i++)
+ data[i] = data[i + 1];
+
+ data.length--;
+ index = data.length;
+ }
+ }
+
+ // Get a non intrusive normalized bookmark
+ level.bookmark = editor.selection.getBookmark(2, true);
+
+ // Crop array if needed
+ if (index < data.length - 1)
+ data.length = index + 1;
+
+ data.push(level);
+ index = data.length - 1;
+
+ self.onAdd.dispatch(self, level);
+ editor.isNotDirty = 0;
+
+ return level;
+ },
+
+ undo : function() {
+ var level, i;
+
+ if (self.typing) {
+ self.add();
+ self.typing = false;
+ }
+
+ if (index > 0) {
+ level = data[--index];
+
+ editor.setContent(level.content, {format : 'raw'});
+ editor.selection.moveToBookmark(level.beforeBookmark);
+
+ self.onUndo.dispatch(self, level);
+ }
+
+ return level;
+ },
+
+ redo : function() {
+ var level;
+
+ if (index < data.length - 1) {
+ level = data[++index];
+
+ editor.setContent(level.content, {format : 'raw'});
+ editor.selection.moveToBookmark(level.bookmark);
+
+ self.onRedo.dispatch(self, level);
+ }
+
+ return level;
+ },
+
+ clear : function() {
+ data = [];
+ index = 0;
+ self.typing = false;
+ },
+
+ hasUndo : function() {
+ return index > 0 || this.typing;
+ },
+
+ hasRedo : function() {
+ return index < data.length - 1 && !this.typing;
+ }
+ };
+ };
+})(tinymce);
+
+(function(tinymce) {
+ // Shorten names
+ var Event = tinymce.dom.Event,
+ isIE = tinymce.isIE,
+ isGecko = tinymce.isGecko,
+ isOpera = tinymce.isOpera,
+ each = tinymce.each,
+ extend = tinymce.extend,
+ TRUE = true,
+ FALSE = false;
+
+ function cloneFormats(node) {
+ var clone, temp, inner;
+
+ do {
+ if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) {
+ if (clone) {
+ temp = node.cloneNode(false);
+ temp.appendChild(clone);
+ clone = temp;
+ } else {
+ clone = inner = node.cloneNode(false);
+ }
+
+ clone.removeAttribute('id');
+ }
+ } while (node = node.parentNode);
+
+ if (clone)
+ return {wrapper : clone, inner : inner};
+ };
+
+ // Checks if the selection/caret is at the end of the specified block element
+ function isAtEnd(rng, par) {
+ var rng2 = par.ownerDocument.createRange();
+
+ rng2.setStart(rng.endContainer, rng.endOffset);
+ rng2.setEndAfter(par);
+
+ // 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
+ return rng2.cloneContents().textContent.length == 0;
+ };
+
+ function splitList(selection, dom, li) {
+ var listBlock, block;
+
+ if (dom.isEmpty(li)) {
+ listBlock = dom.getParent(li, 'ul,ol');
+
+ if (!dom.getParent(listBlock.parentNode, 'ul,ol')) {
+ dom.split(listBlock, li);
+ block = dom.create('p', 0, '<br data-mce-bogus="1" />');
+ dom.replace(block, li);
+ selection.select(block, 1);
+ }
+
+ return FALSE;
+ }
+
+ return TRUE;
+ };
+
+ tinymce.create('tinymce.ForceBlocks', {
+ ForceBlocks : function(ed) {
+ var t = this, s = ed.settings, elm;
+
+ t.editor = ed;
+ t.dom = ed.dom;
+ elm = (s.forced_root_block || 'p').toLowerCase();
+ s.element = elm.toUpperCase();
+
+ ed.onPreInit.add(t.setup, t);
+ },
+
+ setup : function() {
+ var t = this, ed = t.editor, s = ed.settings, dom = ed.dom, selection = ed.selection, blockElements = ed.schema.getBlockElements();
+
+ // Force root blocks
+ if (s.forced_root_block) {
+ function addRootBlocks() {
+ var node = selection.getStart(), rootNode = ed.getBody(), rng, startContainer, startOffset, endContainer, endOffset, rootBlockNode, tempNode, offset = -0xFFFFFF;
+
+ if (!node || node.nodeType !== 1)
+ return;
+
+ // Check if node is wrapped in block
+ while (node != rootNode) {
+ if (blockElements[node.nodeName])
+ return;
+
+ node = node.parentNode;
+ }
+
+ // Get current selection
+ rng = selection.getRng();
+ if (rng.setStart) {
+ startContainer = rng.startContainer;
+ startOffset = rng.startOffset;
+ endContainer = rng.endContainer;
+ endOffset = rng.endOffset;
+ } else {
+ // Force control range into text range
+ if (rng.item) {
+ rng = ed.getDoc().body.createTextRange();
+ rng.moveToElementText(rng.item(0));
+ }
+
+ tmpRng = rng.duplicate();
+ tmpRng.collapse(true);
+ startOffset = tmpRng.move('character', offset) * -1;
+
+ if (!tmpRng.collapsed) {
+ tmpRng = rng.duplicate();
+ tmpRng.collapse(false);
+ endOffset = (tmpRng.move('character', offset) * -1) - startOffset;
+ }
+ }
+
+ // Wrap non block elements and text nodes
+ for (node = rootNode.firstChild; node; node) {
+ if (node.nodeType === 3 || (node.nodeType == 1 && !blockElements[node.nodeName])) {
+ if (!rootBlockNode) {
+ rootBlockNode = dom.create(s.forced_root_block);
+ node.parentNode.insertBefore(rootBlockNode, node);
+ }
+
+ tempNode = node;
+ node = node.nextSibling;
+ rootBlockNode.appendChild(tempNode);
+ } else {
+ rootBlockNode = null;
+ node = node.nextSibling;
+ }
+ }
+
+ if (rng.setStart) {
+ rng.setStart(startContainer, startOffset);
+ rng.setEnd(endContainer, endOffset);
+ selection.setRng(rng);
+ } else {
+ try {
+ rng = ed.getDoc().body.createTextRange();
+ rng.moveToElementText(rootNode);
+ rng.collapse(true);
+ rng.moveStart('character', startOffset);
+
+ if (endOffset > 0)
+ rng.moveEnd('character', endOffset);
+
+ rng.select();
+ } catch (ex) {
+ // Ignore
+ }
+ }
+
+ ed.nodeChanged();
+ };
+
+ ed.onKeyUp.add(addRootBlocks);
+ ed.onClick.add(addRootBlocks);
+ }
+
+ if (s.force_br_newlines) {
+ // Force IE to produce BRs on enter
+ if (isIE) {
+ ed.onKeyPress.add(function(ed, e) {
+ var n;
+
+ if (e.keyCode == 13 && selection.getNode().nodeName != 'LI') {
+ selection.setContent('<br id="__" /> ', {format : 'raw'});
+ n = dom.get('__');
+ n.removeAttribute('id');
+ selection.select(n);
+ selection.collapse();
+ return Event.cancel(e);
+ }
+ });
+ }
+ }
+
+ if (s.force_p_newlines) {
+ if (!isIE) {
+ ed.onKeyPress.add(function(ed, e) {
+ if (e.keyCode == 13 && !e.shiftKey && !t.insertPara(e))
+ Event.cancel(e);
+ });
+ } else {
+ // Ungly hack to for IE to preserve the formatting when you press
+ // enter at the end of a block element with formatted contents
+ // This logic overrides the browsers default logic with
+ // custom logic that enables us to control the output
+ tinymce.addUnload(function() {
+ t._previousFormats = 0; // Fix IE leak
+ });
+
+ ed.onKeyPress.add(function(ed, e) {
+ t._previousFormats = 0;
+
+ // Clone the current formats, this will later be applied to the new block contents
+ if (e.keyCode == 13 && !e.shiftKey && ed.selection.isCollapsed() && s.keep_styles)
+ t._previousFormats = cloneFormats(ed.selection.getStart());
+ });
+
+ ed.onKeyUp.add(function(ed, e) {
+ // Let IE break the element and the wrap the new caret location in the previous formats
+ if (e.keyCode == 13 && !e.shiftKey) {
+ var parent = ed.selection.getStart(), fmt = t._previousFormats;
+
+ // Parent is an empty block
+ if (!parent.hasChildNodes() && fmt) {
+ parent = dom.getParent(parent, dom.isBlock);
+
+ if (parent && parent.nodeName != 'LI') {
+ parent.innerHTML = '';
+
+ if (t._previousFormats) {
+ parent.appendChild(fmt.wrapper);
+ fmt.inner.innerHTML = '\uFEFF';
+ } else
+ parent.innerHTML = '\uFEFF';
+
+ selection.select(parent, 1);
+ selection.collapse(true);
+ ed.getDoc().execCommand('Delete', false, null);
+ t._previousFormats = 0;
+ }
+ }
+ }
+ });
+ }
+
+ if (isGecko) {
+ ed.onKeyDown.add(function(ed, e) {
+ if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey)
+ t.backspaceDelete(e, e.keyCode == 8);
+ });
+ }
+ }
+
+ // Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973
+ if (tinymce.isWebKit) {
+ function insertBr(ed) {
+ var rng = selection.getRng(), br, div = dom.create('div', null, ' '), divYPos, vpHeight = dom.getViewPort(ed.getWin()).h;
+
+ // Insert BR element
+ rng.insertNode(br = dom.create('br'));
+
+ // Place caret after BR
+ rng.setStartAfter(br);
+ rng.setEndAfter(br);
+ selection.setRng(rng);
+
+ // Could not place caret after BR then insert an nbsp entity and move the caret
+ if (selection.getSel().focusNode == br.previousSibling) {
+ selection.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br));
+ selection.collapse(TRUE);
+ }
+
+ // Create a temporary DIV after the BR and get the position as it
+ // seems like getPos() returns 0 for text nodes and BR elements.
+ dom.insertAfter(div, br);
+ divYPos = dom.getPos(div).y;
+ dom.remove(div);
+
+ // Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117
+ if (divYPos > vpHeight) // It is not necessary to scroll if the DIV is inside the view port.
+ ed.getWin().scrollTo(0, divYPos);
+ };
+
+ ed.onKeyPress.add(function(ed, e) {
+ if (e.keyCode == 13 && (e.shiftKey || (s.force_br_newlines && !dom.getParent(selection.getNode(), 'h1,h2,h3,h4,h5,h6,ol,ul')))) {
+ insertBr(ed);
+ Event.cancel(e);
+ }
+ });
+ }
+
+ // IE specific fixes
+ if (isIE) {
+ // Replaces IE:s auto generated paragraphs with the specified element name
+ if (s.element != 'P') {
+ ed.onKeyPress.add(function(ed, e) {
+ t.lastElm = selection.getNode().nodeName;
+ });
+
+ ed.onKeyUp.add(function(ed, e) {
+ var bl, n = selection.getNode(), b = ed.getBody();
+
+ if (b.childNodes.length === 1 && n.nodeName == 'P') {
+ n = dom.rename(n, s.element);
+ selection.select(n);
+ selection.collapse();
+ ed.nodeChanged();
+ } else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') {
+ bl = dom.getParent(n, 'p');
+
+ if (bl) {
+ dom.rename(bl, s.element);
+ ed.nodeChanged();
+ }
+ }
+ });
+ }
+ }
+ },
+
+ getParentBlock : function(n) {
+ var d = this.dom;
+
+ return d.getParent(n, d.isBlock);
+ },
+
+ insertPara : function(e) {
+ 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;
+ var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = dom.getViewPort(ed.getWin()), y, ch, car;
+
+ ed.undoManager.beforeChange();
+
+ // If root blocks are forced then use Operas default behavior since it's really good
+// Removed due to bug: #1853816
+// if (se.forced_root_block && isOpera)
+// return TRUE;
+
+ // Setup before range
+ rb = d.createRange();
+
+ // If is before the first block element and in body, then move it into first block element
+ rb.setStart(s.anchorNode, s.anchorOffset);
+ rb.collapse(TRUE);
+
+ // Setup after range
+ ra = d.createRange();
+
+ // If is before the first block element and in body, then move it into first block element
+ ra.setStart(s.focusNode, s.focusOffset);
+ ra.collapse(TRUE);
+
+ // Setup start/end points
+ dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;
+ sn = dir ? s.anchorNode : s.focusNode;
+ so = dir ? s.anchorOffset : s.focusOffset;
+ en = dir ? s.focusNode : s.anchorNode;
+ eo = dir ? s.focusOffset : s.anchorOffset;
+
+ // If selection is in empty table cell
+ if (sn === en && /^(TD|TH)$/.test(sn.nodeName)) {
+ if (sn.firstChild.nodeName == 'BR')
+ dom.remove(sn.firstChild); // Remove BR
+
+ // Create two new block elements
+ if (sn.childNodes.length == 0) {
+ ed.dom.add(sn, se.element, null, '<br />');
+ aft = ed.dom.add(sn, se.element, null, '<br />');
+ } else {
+ n = sn.innerHTML;
+ sn.innerHTML = '';
+ ed.dom.add(sn, se.element, null, n);
+ aft = ed.dom.add(sn, se.element, null, '<br />');
+ }
+
+ // Move caret into the last one
+ r = d.createRange();
+ r.selectNodeContents(aft);
+ r.collapse(1);
+ ed.selection.setRng(r);
+
+ return FALSE;
+ }
+
+ // If the caret is in an invalid location in FF we need to move it into the first block
+ if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) {
+ sn = en = sn.firstChild;
+ so = eo = 0;
+ rb = d.createRange();
+ rb.setStart(sn, 0);
+ ra = d.createRange();
+ ra.setStart(en, 0);
+ }
+
+ // If the body is totally empty add a BR element this might happen on webkit
+ if (!d.body.hasChildNodes()) {
+ d.body.appendChild(dom.create('br'));
+ }
+
+ // Never use body as start or end node
+ sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes
+ sn = sn.nodeName == "BODY" ? sn.firstChild : sn;
+ en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes
+ en = en.nodeName == "BODY" ? en.firstChild : en;
+
+ // Get start and end blocks
+ sb = t.getParentBlock(sn);
+ eb = t.getParentBlock(en);
+ bn = sb ? sb.nodeName : se.element; // Get block name to create
+
+ // Return inside list use default browser behavior
+ if (n = t.dom.getParent(sb, 'li,pre')) {
+ if (n.nodeName == 'LI')
+ return splitList(ed.selection, t.dom, n);
+
+ return TRUE;
+ }
+
+ // If caption or absolute layers then always generate new blocks within
+ if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {
+ bn = se.element;
+ sb = null;
+ }
+
+ // If caption or absolute layers then always generate new blocks within
+ if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {
+ bn = se.element;
+ eb = null;
+ }
+
+ // Use P instead
+ if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(dom.getStyle(sb, 'float', 1)))) {
+ bn = se.element;
+ sb = eb = null;
+ }
+
+ // Setup new before and after blocks
+ bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn);
+ aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn);
+
+ // Remove id from after clone
+ aft.removeAttribute('id');
+
+ // Is header and cursor is at the end, then force paragraph under
+ if (/^(H[1-6])$/.test(bn) && isAtEnd(r, sb))
+ aft = ed.dom.create(se.element);
+
+ // Find start chop node
+ n = sc = sn;
+ do {
+ if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))
+ break;
+
+ sc = n;
+ } while ((n = n.previousSibling ? n.previousSibling : n.parentNode));
+
+ // Find end chop node
+ n = ec = en;
+ do {
+ if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))
+ break;
+
+ ec = n;
+ } while ((n = n.nextSibling ? n.nextSibling : n.parentNode));
+
+ // Place first chop part into before block element
+ if (sc.nodeName == bn)
+ rb.setStart(sc, 0);
+ else
+ rb.setStartBefore(sc);
+
+ rb.setEnd(sn, so);
+ bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari
+
+ // Place secnd chop part within new block element
+ try {
+ ra.setEndAfter(ec);
+ } catch(ex) {
+ //console.debug(s.focusNode, s.focusOffset);
+ }
+
+ ra.setStart(en, eo);
+ aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari
+
+ // Create range around everything
+ r = d.createRange();
+ if (!sc.previousSibling && sc.parentNode.nodeName == bn) {
+ r.setStartBefore(sc.parentNode);
+ } else {
+ if (rb.startContainer.nodeName == bn && rb.startOffset == 0)
+ r.setStartBefore(rb.startContainer);
+ else
+ r.setStart(rb.startContainer, rb.startOffset);
+ }
+
+ if (!ec.nextSibling && ec.parentNode.nodeName == bn)
+ r.setEndAfter(ec.parentNode);
+ else
+ r.setEnd(ra.endContainer, ra.endOffset);
+
+ // Delete and replace it with new block elements
+ r.deleteContents();
+
+ if (isOpera)
+ ed.getWin().scrollTo(0, vp.y);
+
+ // Never wrap blocks in blocks
+ if (bef.firstChild && bef.firstChild.nodeName == bn)
+ bef.innerHTML = bef.firstChild.innerHTML;
+
+ if (aft.firstChild && aft.firstChild.nodeName == bn)
+ aft.innerHTML = aft.firstChild.innerHTML;
+
+ function appendStyles(e, en) {
+ var nl = [], nn, n, i;
+
+ e.innerHTML = '';
+
+ // Make clones of style elements
+ if (se.keep_styles) {
+ n = en;
+ do {
+ // We only want style specific elements
+ if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)) {
+ nn = n.cloneNode(FALSE);
+ dom.setAttrib(nn, 'id', ''); // Remove ID since it needs to be unique
+ nl.push(nn);
+ }
+ } while (n = n.parentNode);
+ }
+
+ // Append style elements to aft
+ if (nl.length > 0) {
+ for (i = nl.length - 1, nn = e; i >= 0; i--)
+ nn = nn.appendChild(nl[i]);
+
+ // Padd most inner style element
+ nl[0].innerHTML = isOpera ? '\u00a0' : '<br />'; // Extra space for Opera so that the caret can move there
+ return nl[0]; // Move caret to most inner element
+ } else
+ e.innerHTML = isOpera ? '\u00a0' : '<br />'; // Extra space for Opera so that the caret can move there
+ };
+
+ // Padd empty blocks
+ if (dom.isEmpty(bef))
+ appendStyles(bef, sn);
+
+ // Fill empty afterblook with current style
+ if (dom.isEmpty(aft))
+ car = appendStyles(aft, en);
+
+ // Opera needs this one backwards for older versions
+ if (isOpera && parseFloat(opera.version()) < 9.5) {
+ r.insertNode(bef);
+ r.insertNode(aft);
+ } else {
+ r.insertNode(aft);
+ r.insertNode(bef);
+ }
+
+ // Normalize
+ aft.normalize();
+ bef.normalize();
+
+ // Move cursor and scroll into view
+ ed.selection.select(aft, true);
+ ed.selection.collapse(true);
+
+ // 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
+ y = ed.dom.getPos(aft).y;
+ //ch = aft.clientHeight;
+
+ // Is element within viewport
+ if (y < vp.y || y + 25 > vp.y + vp.h) {
+ 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
+
+ /*console.debug(
+ 'Element: y=' + y + ', h=' + ch + ', ' +
+ 'Viewport: y=' + vp.y + ", h=" + vp.h + ', bottom=' + (vp.y + vp.h)
+ );*/
+ }
+
+ ed.undoManager.add();
+
+ return FALSE;
+ },
+
+ backspaceDelete : function(e, bs) {
+ 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;
+
+ // Delete when caret is behind a element doesn't work correctly on Gecko see #3011651
+ if (!bs && r.collapsed && sc.nodeType == 1 && r.startOffset == sc.childNodes.length) {
+ walker = new tinymce.dom.TreeWalker(sc.lastChild, sc);
+
+ // Walk the dom backwards until we find a text node
+ for (n = sc.lastChild; n; n = walker.prev()) {
+ if (n.nodeType == 3) {
+ r.setStart(n, n.nodeValue.length);
+ r.collapse(true);
+ se.setRng(r);
+ return;
+ }
+ }
+ }
+
+ // The caret sometimes gets stuck in Gecko if you delete empty paragraphs
+ // This workaround removes the element by hand and moves the caret to the previous element
+ if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) {
+ if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) {
+ // Find previous block element
+ n = sc;
+ while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ;
+
+ if (n) {
+ if (sc != b.firstChild) {
+ // Find last text node
+ w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE);
+ while (tn = w.nextNode())
+ n = tn;
+
+ // Place caret at the end of last text node
+ r = ed.getDoc().createRange();
+ r.setStart(n, n.nodeValue ? n.nodeValue.length : 0);
+ r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0);
+ se.setRng(r);
+
+ // Remove the target container
+ ed.dom.remove(sc);
+ }
+
+ return Event.cancel(e);
+ }
+ }
+ }
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ // Shorten names
+ var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend;
+
+ tinymce.create('tinymce.ControlManager', {
+ ControlManager : function(ed, s) {
+ var t = this, i;
+
+ s = s || {};
+ t.editor = ed;
+ t.controls = {};
+ t.onAdd = new tinymce.util.Dispatcher(t);
+ t.onPostRender = new tinymce.util.Dispatcher(t);
+ t.prefix = s.prefix || ed.id + '_';
+ t._cls = {};
+
+ t.onPostRender.add(function() {
+ each(t.controls, function(c) {
+ c.postRender();
+ });
+ });
+ },
+
+ get : function(id) {
+ return this.controls[this.prefix + id] || this.controls[id];
+ },
+
+ setActive : function(id, s) {
+ var c = null;
+
+ if (c = this.get(id))
+ c.setActive(s);
+
+ return c;
+ },
+
+ setDisabled : function(id, s) {
+ var c = null;
+
+ if (c = this.get(id))
+ c.setDisabled(s);
+
+ return c;
+ },
+
+ add : function(c) {
+ var t = this;
+
+ if (c) {
+ t.controls[c.id] = c;
+ t.onAdd.dispatch(c, t);
+ }
+
+ return c;
+ },
+
+ createControl : function(n) {
+ var c, t = this, ed = t.editor;
+
+ each(ed.plugins, function(p) {
+ if (p.createControl) {
+ c = p.createControl(n, t);
+
+ if (c)
+ return false;
+ }
+ });
+
+ switch (n) {
+ case "|":
+ case "separator":
+ return t.createSeparator();
+ }
+
+ if (!c && ed.buttons && (c = ed.buttons[n]))
+ return t.createButton(n, c);
+
+ return t.add(c);
+ },
+
+ createDropMenu : function(id, s, cc) {
+ var t = this, ed = t.editor, c, bm, v, cls;
+
+ s = extend({
+ 'class' : 'mceDropDown',
+ constrain : ed.settings.constrain_menus
+ }, s);
+
+ s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin';
+ if (v = ed.getParam('skin_variant'))
+ s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1);
+
+ id = t.prefix + id;
+ cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu;
+ c = t.controls[id] = new cls(id, s);
+ c.onAddItem.add(function(c, o) {
+ var s = o.settings;
+
+ s.title = ed.getLang(s.title, s.title);
+
+ if (!s.onclick) {
+ s.onclick = function(v) {
+ if (s.cmd)
+ ed.execCommand(s.cmd, s.ui || false, s.value);
+ };
+ }
+ });
+
+ ed.onRemove.add(function() {
+ c.destroy();
+ });
+
+ // Fix for bug #1897785, #1898007
+ if (tinymce.isIE) {
+ c.onShowMenu.add(function() {
+ // IE 8 needs focus in order to store away a range with the current collapsed caret location
+ ed.focus();
+
+ bm = ed.selection.getBookmark(1);
+ });
+
+ c.onHideMenu.add(function() {
+ if (bm) {
+ ed.selection.moveToBookmark(bm);
+ bm = 0;
+ }
+ });
+ }
+
+ return t.add(c);
+ },
+
+ createListBox : function(id, s, cc) {
+ var t = this, ed = t.editor, cmd, c, cls;
+
+ if (t.get(id))
+ return null;
+
+ s.title = ed.translate(s.title);
+ s.scope = s.scope || ed;
+
+ if (!s.onselect) {
+ s.onselect = function(v) {
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);
+ };
+ }
+
+ s = extend({
+ title : s.title,
+ 'class' : 'mce_' + id,
+ scope : s.scope,
+ control_manager : t
+ }, s);
+
+ id = t.prefix + id;
+
+
+ function useNativeListForAccessibility(ed) {
+ return ed.settings.use_accessible_selects && !tinymce.isGecko
+ }
+
+ if (ed.settings.use_native_selects || useNativeListForAccessibility(ed))
+ c = new tinymce.ui.NativeListBox(id, s);
+ else {
+ cls = cc || t._cls.listbox || tinymce.ui.ListBox;
+ c = new cls(id, s, ed);
+ }
+
+ t.controls[id] = c;
+
+ // Fix focus problem in Safari
+ if (tinymce.isWebKit) {
+ c.onPostRender.add(function(c, n) {
+ // Store bookmark on mousedown
+ Event.add(n, 'mousedown', function() {
+ ed.bookmark = ed.selection.getBookmark(1);
+ });
+
+ // Restore on focus, since it might be lost
+ Event.add(n, 'focus', function() {
+ ed.selection.moveToBookmark(ed.bookmark);
+ ed.bookmark = null;
+ });
+ });
+ }
+
+ if (c.hideMenu)
+ ed.onMouseDown.add(c.hideMenu, c);
+
+ return t.add(c);
+ },
+
+ createButton : function(id, s, cc) {
+ var t = this, ed = t.editor, o, c, cls;
+
+ if (t.get(id))
+ return null;
+
+ s.title = ed.translate(s.title);
+ s.label = ed.translate(s.label);
+ s.scope = s.scope || ed;
+
+ if (!s.onclick && !s.menu_button) {
+ s.onclick = function() {
+ ed.execCommand(s.cmd, s.ui || false, s.value);
+ };
+ }
+
+ s = extend({
+ title : s.title,
+ 'class' : 'mce_' + id,
+ unavailable_prefix : ed.getLang('unavailable', ''),
+ scope : s.scope,
+ control_manager : t
+ }, s);
+
+ id = t.prefix + id;
+
+ if (s.menu_button) {
+ cls = cc || t._cls.menubutton || tinymce.ui.MenuButton;
+ c = new cls(id, s, ed);
+ ed.onMouseDown.add(c.hideMenu, c);
+ } else {
+ cls = t._cls.button || tinymce.ui.Button;
+ c = new cls(id, s, ed);
+ }
+
+ return t.add(c);
+ },
+
+ createMenuButton : function(id, s, cc) {
+ s = s || {};
+ s.menu_button = 1;
+
+ return this.createButton(id, s, cc);
+ },
+
+ createSplitButton : function(id, s, cc) {
+ var t = this, ed = t.editor, cmd, c, cls;
+
+ if (t.get(id))
+ return null;
+
+ s.title = ed.translate(s.title);
+ s.scope = s.scope || ed;
+
+ if (!s.onclick) {
+ s.onclick = function(v) {
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);
+ };
+ }
+
+ if (!s.onselect) {
+ s.onselect = function(v) {
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);
+ };
+ }
+
+ s = extend({
+ title : s.title,
+ 'class' : 'mce_' + id,
+ scope : s.scope,
+ control_manager : t
+ }, s);
+
+ id = t.prefix + id;
+ cls = cc || t._cls.splitbutton || tinymce.ui.SplitButton;
+ c = t.add(new cls(id, s, ed));
+ ed.onMouseDown.add(c.hideMenu, c);
+
+ return c;
+ },
+
+ createColorSplitButton : function(id, s, cc) {
+ var t = this, ed = t.editor, cmd, c, cls, bm;
+
+ if (t.get(id))
+ return null;
+
+ s.title = ed.translate(s.title);
+ s.scope = s.scope || ed;
+
+ if (!s.onclick) {
+ s.onclick = function(v) {
+ if (tinymce.isIE)
+ bm = ed.selection.getBookmark(1);
+
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);
+ };
+ }
+
+ if (!s.onselect) {
+ s.onselect = function(v) {
+ ed.execCommand(s.cmd, s.ui || false, v || s.value);
+ };
+ }
+
+ s = extend({
+ title : s.title,
+ 'class' : 'mce_' + id,
+ 'menu_class' : ed.getParam('skin') + 'Skin',
+ scope : s.scope,
+ more_colors_title : ed.getLang('more_colors')
+ }, s);
+
+ id = t.prefix + id;
+ cls = cc || t._cls.colorsplitbutton || tinymce.ui.ColorSplitButton;
+ c = new cls(id, s, ed);
+ ed.onMouseDown.add(c.hideMenu, c);
+
+ // Remove the menu element when the editor is removed
+ ed.onRemove.add(function() {
+ c.destroy();
+ });
+
+ // Fix for bug #1897785, #1898007
+ if (tinymce.isIE) {
+ c.onShowMenu.add(function() {
+ // IE 8 needs focus in order to store away a range with the current collapsed caret location
+ ed.focus();
+ bm = ed.selection.getBookmark(1);
+ });
+
+ c.onHideMenu.add(function() {
+ if (bm) {
+ ed.selection.moveToBookmark(bm);
+ bm = 0;
+ }
+ });
+ }
+
+ return t.add(c);
+ },
+
+ createToolbar : function(id, s, cc) {
+ var c, t = this, cls;
+
+ id = t.prefix + id;
+ cls = cc || t._cls.toolbar || tinymce.ui.Toolbar;
+ c = new cls(id, s, t.editor);
+
+ if (t.get(id))
+ return null;
+
+ return t.add(c);
+ },
+
+ createToolbarGroup : function(id, s, cc) {
+ var c, t = this, cls;
+ id = t.prefix + id;
+ cls = cc || this._cls.toolbarGroup || tinymce.ui.ToolbarGroup;
+ c = new cls(id, s, t.editor);
+
+ if (t.get(id))
+ return null;
+
+ return t.add(c);
+ },
+
+ createSeparator : function(cc) {
+ var cls = cc || this._cls.separator || tinymce.ui.Separator;
+
+ return new cls();
+ },
+
+ setControlType : function(n, c) {
+ return this._cls[n.toLowerCase()] = c;
+ },
+
+ destroy : function() {
+ each(this.controls, function(c) {
+ c.destroy();
+ });
+
+ this.controls = null;
+ }
+ });
+})(tinymce);
+
+(function(tinymce) {
+ var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isIE = tinymce.isIE, isOpera = tinymce.isOpera;
+
+ tinymce.create('tinymce.WindowManager', {
+ WindowManager : function(ed) {
+ var t = this;
+
+ t.editor = ed;
+ t.onOpen = new Dispatcher(t);
+ t.onClose = new Dispatcher(t);
+ t.params = {};
+ t.features = {};
+ },
+
+ open : function(s, p) {
+ var t = this, f = '', x, y, mo = t.editor.settings.dialog_type == 'modal', w, sw, sh, vp = tinymce.DOM.getViewPort(), u;
+
+ // Default some options
+ s = s || {};
+ p = p || {};
+ sw = isOpera ? vp.w : screen.width; // Opera uses windows inside the Opera window
+ sh = isOpera ? vp.h : screen.height;
+ s.name = s.name || 'mc_' + new Date().getTime();
+ s.width = parseInt(s.width || 320);
+ s.height = parseInt(s.height || 240);
+ s.resizable = true;
+ s.left = s.left || parseInt(sw / 2.0) - (s.width / 2.0);
+ s.top = s.top || parseInt(sh / 2.0) - (s.height / 2.0);
+ p.inline = false;
+ p.mce_width = s.width;
+ p.mce_height = s.height;
+ p.mce_auto_focus = s.auto_focus;
+
+ if (mo) {
+ if (isIE) {
+ s.center = true;
+ s.help = false;
+ s.dialogWidth = s.width + 'px';
+ s.dialogHeight = s.height + 'px';
+ s.scroll = s.scrollbars || false;
+ }
+ }
+
+ // Build features string
+ each(s, function(v, k) {
+ if (tinymce.is(v, 'boolean'))
+ v = v ? 'yes' : 'no';
+
+ if (!/^(name|url)$/.test(k)) {
+ if (isIE && mo)
+ f += (f ? ';' : '') + k + ':' + v;
+ else
+ f += (f ? ',' : '') + k + '=' + v;
+ }
+ });
+
+ t.features = s;
+ t.params = p;
+ t.onOpen.dispatch(t, s, p);
+
+ u = s.url || s.file;
+ u = tinymce._addVer(u);
+
+ try {
+ if (isIE && mo) {
+ w = 1;
+ window.showModalDialog(u, window, f);
+ } else
+ w = window.open(u, s.name, f);
+ } catch (ex) {
+ // Ignore
+ }
+
+ if (!w)
+ alert(t.editor.getLang('popup_blocked'));
+ },
+
+ close : function(w) {
+ w.close();
+ this.onClose.dispatch(this);
+ },
+
+ createInstance : function(cl, a, b, c, d, e) {
+ var f = tinymce.resolve(cl);
+
+ return new f(a, b, c, d, e);
+ },
+
+ confirm : function(t, cb, s, w) {
+ w = w || window;
+
+ cb.call(s || this, w.confirm(this._decode(this.editor.getLang(t, t))));
+ },
+
+ alert : function(tx, cb, s, w) {
+ var t = this;
+
+ w = w || window;
+ w.alert(t._decode(t.editor.getLang(tx, tx)));
+
+ if (cb)
+ cb.call(s || t);
+ },
+
+ resizeBy : function(dw, dh, win) {
+ win.resizeBy(dw, dh);
+ },
+
+ // Internal functions
+
+ _decode : function(s) {
+ return tinymce.DOM.decode(s).replace(/\\n/g, '\n');
+ }
+ });
+}(tinymce));
+(function(tinymce) {
+ tinymce.Formatter = function(ed) {
+ var formats = {},
+ each = tinymce.each,
+ dom = ed.dom,
+ selection = ed.selection,
+ TreeWalker = tinymce.dom.TreeWalker,
+ rangeUtils = new tinymce.dom.RangeUtils(dom),
+ isValid = ed.schema.isValidChild,
+ isBlock = dom.isBlock,
+ forcedRootBlock = ed.settings.forced_root_block,
+ nodeIndex = dom.nodeIndex,
+ INVISIBLE_CHAR = '\uFEFF',
+ MCE_ATTR_RE = /^(src|href|style)$/,
+ FALSE = false,
+ TRUE = true,
+ undefined;
+
+ function isArray(obj) {
+ return obj instanceof Array;
+ };
+
+ function getParents(node, selector) {
+ return dom.getParents(node, selector, dom.getRoot());
+ };
+
+ function isCaretNode(node) {
+ return node.nodeType === 1 && (node.face === 'mceinline' || node.style.fontFamily === 'mceinline');
+ };
+
+ // Public functions
+
+ function get(name) {
+ return name ? formats[name] : formats;
+ };
+
+ function register(name, format) {
+ if (name) {
+ if (typeof(name) !== 'string') {
+ each(name, function(format, name) {
+ register(name, format);
+ });
+ } else {
+ // Force format into array and add it to internal collection
+ format = format.length ? format : [format];
+
+ each(format, function(format) {
+ // Set deep to false by default on selector formats this to avoid removing
+ // alignment on images inside paragraphs when alignment is changed on paragraphs
+ if (format.deep === undefined)
+ format.deep = !format.selector;
+
+ // Default to true
+ if (format.split === undefined)
+ format.split = !format.selector || format.inline;
+
+ // Default to true
+ if (format.remove === undefined && format.selector && !format.inline)
+ format.remove = 'none';
+
+ // Mark format as a mixed format inline + block level
+ if (format.selector && format.inline) {
+ format.mixed = true;
+ format.block_expand = true;
+ }
+
+ // Split classes if needed
+ if (typeof(format.classes) === 'string')
+ format.classes = format.classes.split(/\s+/);
+ });
+
+ formats[name] = format;
+ }
+ }
+ };
+
+ var getTextDecoration = function(node) {
+ var decoration;
+
+ ed.dom.getParent(node, function(n) {
+ decoration = ed.dom.getStyle(n, 'text-decoration');
+ return decoration && decoration !== 'none';
+ });
+
+ return decoration;
+ };
+
+ var processUnderlineAndColor = function(node) {
+ var textDecoration;
+ if (node.nodeType === 1 && node.parentNode && node.parentNode.nodeType === 1) {
+ textDecoration = getTextDecoration(node.parentNode);
+ if (ed.dom.getStyle(node, 'color') && textDecoration) {
+ ed.dom.setStyle(node, 'text-decoration', textDecoration);
+ } else if (ed.dom.getStyle(node, 'textdecoration') === textDecoration) {
+ ed.dom.setStyle(node, 'text-decoration', null);
+ }
+ }
+ };
+
+ function apply(name, vars, node) {
+ var formatList = get(name), format = formatList[0], bookmark, rng, i, isCollapsed = selection.isCollapsed();
+
+ function moveStart(rng) {
+ var container = rng.startContainer,
+ offset = rng.startOffset,
+ walker, node;
+
+ // Move startContainer/startOffset in to a suitable node
+ if (container.nodeType == 1 || container.nodeValue === "") {
+ container = container.nodeType == 1 ? container.childNodes[offset] : container;
+
+ // Might fail if the offset is behind the last element in it's container
+ if (container) {
+ walker = new TreeWalker(container, container.parentNode);
+ for (node = walker.current(); node; node = walker.next()) {
+ if (node.nodeType == 3 && !isWhiteSpaceNode(node)) {
+ rng.setStart(node, 0);
+ break;
+ }
+ }
+ }
+ }
+
+ return rng;
+ };
+
+ function setElementFormat(elm, fmt) {
+ fmt = fmt || format;
+
+ if (elm) {
+ if (fmt.onformat) {
+ fmt.onformat(elm, fmt, vars, node);
+ }
+
+ each(fmt.styles, function(value, name) {
+ dom.setStyle(elm, name, replaceVars(value, vars));
+ });
+
+ each(fmt.attributes, function(value, name) {
+ dom.setAttrib(elm, name, replaceVars(value, vars));
+ });
+
+ each(fmt.classes, function(value) {
+ value = replaceVars(value, vars);
+
+ if (!dom.hasClass(elm, value))
+ dom.addClass(elm, value);
+ });
+ }
+ };
+ function adjustSelectionToVisibleSelection() {
+ function findSelectionEnd(start, end) {
+ var walker = new TreeWalker(end);
+ for (node = walker.current(); node; node = walker.prev()) {
+ if (node.childNodes.length > 1 || node == start) {
+ return node;
+ }
+ }
+ };
+
+ // Adjust selection so that a end container with a end offset of zero is not included in the selection
+ // as this isn't visible to the user.
+ var rng = ed.selection.getRng();
+ var start = rng.startContainer;
+ var end = rng.endContainer;
+
+ if (start != end && rng.endOffset == 0) {
+ var newEnd = findSelectionEnd(start, end);
+ var endOffset = newEnd.nodeType == 3 ? newEnd.length : newEnd.childNodes.length;
+
+ rng.setEnd(newEnd, endOffset);
+ }
+
+ return rng;
+ }
+
+ function applyStyleToList(node, bookmark, wrapElm, newWrappers, process){
+ var nodes = [], listIndex = -1, list, startIndex = -1, endIndex = -1, currentWrapElm;
+
+ // find the index of the first child list.
+ each(node.childNodes, function(n, index) {
+ if (n.nodeName === "UL" || n.nodeName === "OL") {
+ listIndex = index;
+ list = n;
+ return false;
+ }
+ });
+
+ // get the index of the bookmarks
+ each(node.childNodes, function(n, index) {
+ if (n.nodeName === "SPAN" && dom.getAttrib(n, "data-mce-type") == "bookmark") {
+ if (n.id == bookmark.id + "_start") {
+ startIndex = index;
+ } else if (n.id == bookmark.id + "_end") {
+ endIndex = index;
+ }
+ }
+ });
+
+ // if the selection spans across an embedded list, or there isn't an embedded list - handle processing normally
+ if (listIndex <= 0 || (startIndex < listIndex && endIndex > listIndex)) {
+ each(tinymce.grep(node.childNodes), process);
+ return 0;
+ } else {
+ currentWrapElm = wrapElm.cloneNode(FALSE);
+
+ // create a list of the nodes on the same side of the list as the selection
+ each(tinymce.grep(node.childNodes), function(n, index) {
+ if ((startIndex < listIndex && index < listIndex) || (startIndex > listIndex && index > listIndex)) {
+ nodes.push(n);
+ n.parentNode.removeChild(n);
+ }
+ });
+
+ // insert the wrapping element either before or after the list.
+ if (startIndex < listIndex) {
+ node.insertBefore(currentWrapElm, list);
+ } else if (startIndex > listIndex) {
+ node.insertBefore(currentWrapElm, list.nextSibling);
+ }
+
+ // add the new nodes to the list.
+ newWrappers.push(currentWrapElm);
+
+ each(nodes, function(node) {
+ currentWrapElm.appendChild(node);
+ });
+
+ return currentWrapElm;
+ }
+ };
+
+ function applyRngStyle(rng, bookmark, node_specific) {
+ var newWrappers = [], wrapName, wrapElm;
+
+ // Setup wrapper element
+ wrapName = format.inline || format.block;
+ wrapElm = dom.create(wrapName);
+ setElementFormat(wrapElm);
+
+ rangeUtils.walk(rng, function(nodes) {
+ var currentWrapElm;
+
+ function process(node) {
+ var nodeName = node.nodeName.toLowerCase(), parentName = node.parentNode.nodeName.toLowerCase(), found;
+
+ // Stop wrapping on br elements
+ if (isEq(nodeName, 'br')) {
+ currentWrapElm = 0;
+
+ // Remove any br elements when we wrap things
+ if (format.block)
+ dom.remove(node);
+
+ return;
+ }
+
+ // If node is wrapper type
+ if (format.wrapper && matchNode(node, name, vars)) {
+ currentWrapElm = 0;
+ return;
+ }
+
+ // Can we rename the block
+ if (format.block && !format.wrapper && isTextBlock(nodeName)) {
+ node = dom.rename(node, wrapName);
+ setElementFormat(node);
+ newWrappers.push(node);
+ currentWrapElm = 0;
+ return;
+ }
+
+ // Handle selector patterns
+ if (format.selector) {
+ // Look for matching formats
+ each(formatList, function(format) {
+ // Check collapsed state if it exists
+ if ('collapsed' in format && format.collapsed !== isCollapsed) {
+ return;
+ }
+
+ if (dom.is(node, format.selector) && !isCaretNode(node)) {
+ setElementFormat(node, format);
+ found = true;
+ }
+ });
+
+ // Continue processing if a selector match wasn't found and a inline element is defined
+ if (!format.inline || found) {
+ currentWrapElm = 0;
+ return;
+ }
+ }
+
+ // Is it valid to wrap this item
+ if (isValid(wrapName, nodeName) && isValid(parentName, wrapName) &&
+ !(!node_specific && node.nodeType === 3 && node.nodeValue.length === 1 && node.nodeValue.charCodeAt(0) === 65279) && node.id !== '_mce_caret') {
+ // Start wrapping
+ if (!currentWrapElm) {
+ // Wrap the node
+ currentWrapElm = wrapElm.cloneNode(FALSE);
+ node.parentNode.insertBefore(currentWrapElm, node);
+ newWrappers.push(currentWrapElm);
+ }
+
+ currentWrapElm.appendChild(node);
+ } else if (nodeName == 'li' && bookmark) {
+ // Start wrapping - if we are in a list node and have a bookmark, then we will always begin by wrapping in a new element.
+ currentWrapElm = applyStyleToList(node, bookmark, wrapElm, newWrappers, process);
+ } else {
+ // Start a new wrapper for possible children
+ currentWrapElm = 0;
+
+ each(tinymce.grep(node.childNodes), process);
+
+ // End the last wrapper
+ currentWrapElm = 0;
+ }
+ };
+
+ // Process siblings from range
+ each(nodes, process);
+ });
+
+ // Wrap links inside as well, for example color inside a link when the wrapper is around the link
+ if (format.wrap_links === false) {
+ each(newWrappers, function(node) {
+ function process(node) {
+ var i, currentWrapElm, children;
+
+ if (node.nodeName === 'A') {
+ currentWrapElm = wrapElm.cloneNode(FALSE);
+ newWrappers.push(currentWrapElm);
+
+ children = tinymce.grep(node.childNodes);
+ for (i = 0; i < children.length; i++)
+ currentWrapElm.appendChild(children[i]);
+
+ node.appendChild(currentWrapElm);
+ }
+
+ each(tinymce.grep(node.childNodes), process);
+ };
+
+ process(node);
+ });
+ }
+
+ // Cleanup
+ each(newWrappers, function(node) {
+ var childCount;
+
+ function getChildCount(node) {
+ var count = 0;
+
+ each(node.childNodes, function(node) {
+ if (!isWhiteSpaceNode(node) && !isBookmarkNode(node))
+ count++;
+ });
+
+ return count;
+ };
+
+ function mergeStyles(node) {
+ var child, clone;
+
+ each(node.childNodes, function(node) {
+ if (node.nodeType == 1 && !isBookmarkNode(node) && !isCaretNode(node)) {
+ child = node;
+ return FALSE; // break loop
+ }
+ });
+
+ // If child was found and of the same type as the current node
+ if (child && matchName(child, format)) {
+ clone = child.cloneNode(FALSE);
+ setElementFormat(clone);
+
+ dom.replace(clone, node, TRUE);
+ dom.remove(child, 1);
+ }
+
+ return clone || node;
+ };
+
+ childCount = getChildCount(node);
+
+ // Remove empty nodes but only if there is multiple wrappers and they are not block
+ // elements so never remove single <h1></h1> since that would remove the currrent empty block element where the caret is at
+ if ((newWrappers.length > 1 || !isBlock(node)) && childCount === 0) {
+ dom.remove(node, 1);
+ return;
+ }
+
+ if (format.inline || format.wrapper) {
+ // Merges the current node with it's children of similar type to reduce the number of elements
+ if (!format.exact && childCount === 1)
+ node = mergeStyles(node);
+
+ // Remove/merge children
+ each(formatList, function(format) {
+ // Merge all children of similar type will move styles from child to parent
+ // this: <span style="color:red"><b><span style="color:red; font-size:10px">text</span></b></span>
+ // will become: <span style="color:red"><b><span style="font-size:10px">text</span></b></span>
+ each(dom.select(format.inline, node), function(child) {
+ var parent;
+
+ // When wrap_links is set to false we don't want
+ // to remove the format on children within links
+ if (format.wrap_links === false) {
+ parent = child.parentNode;
+
+ do {
+ if (parent.nodeName === 'A')
+ return;
+ } while (parent = parent.parentNode);
+ }
+
+ removeFormat(format, vars, child, format.exact ? child : null);
+ });
+ });
+
+ // Remove child if direct parent is of same type
+ if (matchNode(node.parentNode, name, vars)) {
+ dom.remove(node, 1);
+ node = 0;
+ return TRUE;
+ }
+
+ // Look for parent with similar style format
+ if (format.merge_with_parents) {
+ dom.getParent(node.parentNode, function(parent) {
+ if (matchNode(parent, name, vars)) {
+ dom.remove(node, 1);
+ node = 0;
+ return TRUE;
+ }
+ });
+ }
+
+ // Merge next and previous siblings if they are similar <b>text</b><b>text</b> becomes <b>texttext</b>
+ if (node && format.merge_siblings !== false) {
+ node = mergeSiblings(getNonWhiteSpaceSibling(node), node);
+ node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE));
+ }
+ }
+ });
+ };
+
+ if (format) {
+ if (node) {
+ if (node.nodeType) {
+ rng = dom.createRng();
+ rng.setStartBefore(node);
+ rng.setEndAfter(node);
+ applyRngStyle(expandRng(rng, formatList), null, true);
+ } else {
+ applyRngStyle(node, null, true);
+ }
+ } else {
+ if (!isCollapsed || !format.inline || dom.select('td.mceSelected,th.mceSelected').length) {
+ // Obtain selection node before selection is unselected by applyRngStyle()
+ var curSelNode = ed.selection.getNode();
+
+ // Apply formatting to selection
+ ed.selection.setRng(adjustSelectionToVisibleSelection());
+ bookmark = selection.getBookmark();
+ applyRngStyle(expandRng(selection.getRng(TRUE), formatList), bookmark);
+
+ // Colored nodes should be underlined so that the color of the underline matches the text color.
+ if (format.styles && (format.styles.color || format.styles.textDecoration)) {
+ tinymce.walk(curSelNode, processUnderlineAndColor, 'childNodes');
+ processUnderlineAndColor(curSelNode);
+ }
+
+ selection.moveToBookmark(bookmark);
+ selection.setRng(moveStart(selection.getRng(TRUE)));
+ ed.nodeChanged();
+ } else
+ performCaretAction('apply', name, vars);
+ }
+ }
+ };
+
+ function remove(name, vars, node) {
+ var formatList = get(name), format = formatList[0], bookmark, i, rng;
+ function moveStart(rng) {
+ var container = rng.startContainer,
+ offset = rng.startOffset,
+ walker, node, nodes, tmpNode;
+
+ // Convert text node into index if possible
+ if (container.nodeType == 3 && offset >= container.nodeValue.length - 1) {
+ container = container.parentNode;
+ offset = nodeIndex(container) + 1;
+ }
+
+ // Move startContainer/startOffset in to a suitable node
+ if (container.nodeType == 1) {
+ nodes = container.childNodes;
+ container = nodes[Math.min(offset, nodes.length - 1)];
+ walker = new TreeWalker(container);
+
+ // If offset is at end of the parent node walk to the next one
+ if (offset > nodes.length - 1)
+ walker.next();
+
+ for (node = walker.current(); node; node = walker.next()) {
+ if (node.nodeType == 3 && !isWhiteSpaceNode(node)) {
+ // IE has a "neat" feature where it moves the start node into the closest element
+ // we can avoid this by inserting an element before it and then remove it after we set the selection
+ tmpNode = dom.create('a', null, INVISIBLE_CHAR);
+ node.parentNode.insertBefore(tmpNode, node);
+
+ // Set selection and remove tmpNode
+ rng.setStart(node, 0);
+ selection.setRng(rng);
+ dom.remove(tmpNode);
+
+ return;
+ }
+ }
+ }
+ };
+
+ // Merges the styles for each node
+ function process(node) {
+ var children, i, l;
+
+ // Grab the children first since the nodelist might be changed
+ children = tinymce.grep(node.childNodes);
+
+ // Process current node
+ for (i = 0, l = formatList.length; i < l; i++) {
+ if (removeFormat(formatList[i], vars, node, node))
+ break;
+ }
+
+ // Process the children
+ if (format.deep) {
+ for (i = 0, l = children.length; i < l; i++)
+ process(children[i]);
+ }
+ };
+
+ function findFormatRoot(container) {
+ var formatRoot;
+
+ // Find format root
+ each(getParents(container.parentNode).reverse(), function(parent) {
+ var format;
+
+ // Find format root element
+ if (!formatRoot && parent.id != '_start' && parent.id != '_end') {
+ // Is the node matching the format we are looking for
+ format = matchNode(parent, name, vars);
+ if (format && format.split !== false)
+ formatRoot = parent;
+ }
+ });
+
+ return formatRoot;
+ };
+
+ function wrapAndSplit(format_root, container, target, split) {
+ var parent, clone, lastClone, firstClone, i, formatRootParent;
+
+ // Format root found then clone formats and split it
+ if (format_root) {
+ formatRootParent = format_root.parentNode;
+
+ for (parent = container.parentNode; parent && parent != formatRootParent; parent = parent.parentNode) {
+ clone = parent.cloneNode(FALSE);
+
+ for (i = 0; i < formatList.length; i++) {
+ if (removeFormat(formatList[i], vars, clone, clone)) {
+ clone = 0;
+ break;
+ }
+ }
+
+ // Build wrapper node
+ if (clone) {
+ if (lastClone)
+ clone.appendChild(lastClone);
+
+ if (!firstClone)
+ firstClone = clone;
+
+ lastClone = clone;
+ }
+ }
+
+ // Never split block elements if the format is mixed
+ if (split && (!format.mixed || !isBlock(format_root)))
+ container = dom.split(format_root, container);
+
+ // Wrap container in cloned formats
+ if (lastClone) {
+ target.parentNode.insertBefore(lastClone, target);
+ firstClone.appendChild(target);
+ }
+ }
+
+ return container;
+ };
+
+ function splitToFormatRoot(container) {
+ return wrapAndSplit(findFormatRoot(container), container, container, true);
+ };
+
+ function unwrap(start) {
+ var node = dom.get(start ? '_start' : '_end'),
+ out = node[start ? 'firstChild' : 'lastChild'];
+
+ // If the end is placed within the start the result will be removed
+ // So this checks if the out node is a bookmark node if it is it
+ // checks for another more suitable node
+ if (isBookmarkNode(out))
+ out = out[start ? 'firstChild' : 'lastChild'];
+
+ dom.remove(node, true);
+
+ return out;
+ };
+
+ function removeRngStyle(rng) {
+ var startContainer, endContainer;
+
+ rng = expandRng(rng, formatList, TRUE);
+
+ if (format.split) {
+ startContainer = getContainer(rng, TRUE);
+ endContainer = getContainer(rng);
+
+ if (startContainer != endContainer) {
+ // Wrap start/end nodes in span element since these might be cloned/moved
+ startContainer = wrap(startContainer, 'span', {id : '_start', 'data-mce-type' : 'bookmark'});
+ endContainer = wrap(endContainer, 'span', {id : '_end', 'data-mce-type' : 'bookmark'});
+
+ // Split start/end
+ splitToFormatRoot(startContainer);
+ splitToFormatRoot(endContainer);
+
+ // Unwrap start/end to get real elements again
+ startContainer = unwrap(TRUE);
+ endContainer = unwrap();
+ } else
+ startContainer = endContainer = splitToFormatRoot(startContainer);
+
+ // Update range positions since they might have changed after the split operations
+ rng.startContainer = startContainer.parentNode;
+ rng.startOffset = nodeIndex(startContainer);
+ rng.endContainer = endContainer.parentNode;
+ rng.endOffset = nodeIndex(endContainer) + 1;
+ }
+
+ // Remove items between start/end
+ rangeUtils.walk(rng, function(nodes) {
+ each(nodes, function(node) {
+ process(node);
+
+ // Remove parent span if it only contains text-decoration: underline, yet a parent node is also underlined.
+ if (node.nodeType === 1 && ed.dom.getStyle(node, 'text-decoration') === 'underline' && node.parentNode && getTextDecoration(node.parentNode) === 'underline') {
+ removeFormat({'deep': false, 'exact': true, 'inline': 'span', 'styles': {'textDecoration' : 'underline'}}, null, node);
+ }
+ });
+ });
+ };
+
+ // Handle node
+ if (node) {
+ if (node.nodeType) {
+ rng = dom.createRng();
+ rng.setStartBefore(node);
+ rng.setEndAfter(node);
+ removeRngStyle(rng);
+ } else {
+ removeRngStyle(node);
+ }
+
+ return;
+ }
+
+ if (!selection.isCollapsed() || !format.inline || dom.select('td.mceSelected,th.mceSelected').length) {
+ bookmark = selection.getBookmark();
+ removeRngStyle(selection.getRng(TRUE));
+ selection.moveToBookmark(bookmark);
+
+ // 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
+ if (format.inline && match(name, vars, selection.getStart())) {
+ moveStart(selection.getRng(true));
+ }
+
+ ed.nodeChanged();
+ } else
+ performCaretAction('remove', name, vars);
+
+ // When you remove formatting from a table cell in WebKit (cell, not the contents of a cell) there is a rendering issue with column width
+ if (tinymce.isWebKit) {
+ ed.execCommand('mceCleanup');
+ }
+ };
+
+ function toggle(name, vars, node) {
+ var fmt = get(name);
+
+ if (match(name, vars, node) && (!('toggle' in fmt[0]) || fmt[0]['toggle']))
+ remove(name, vars, node);
+ else
+ apply(name, vars, node);
+ };
+
+ function matchNode(node, name, vars, similar) {
+ var formatList = get(name), format, i, classes;
+
+ function matchItems(node, format, item_name) {
+ var key, value, items = format[item_name], i;
+
+ // Custom match
+ if (format.onmatch) {
+ return format.onmatch(node, format, item_name);
+ }
+
+ // Check all items
+ if (items) {
+ // Non indexed object
+ if (items.length === undefined) {
+ for (key in items) {
+ if (items.hasOwnProperty(key)) {
+ if (item_name === 'attributes')
+ value = dom.getAttrib(node, key);
+ else
+ value = getStyle(node, key);
+
+ if (similar && !value && !format.exact)
+ return;
+
+ if ((!similar || format.exact) && !isEq(value, replaceVars(items[key], vars)))
+ return;
+ }
+ }
+ } else {
+ // Only one match needed for indexed arrays
+ for (i = 0; i < items.length; i++) {
+ if (item_name === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(node, items[i]))
+ return format;
+ }
+ }
+ }
+
+ return format;
+ };
+
+ if (formatList && node) {
+ // Check each format in list
+ for (i = 0; i < formatList.length; i++) {
+ format = formatList[i];
+
+ // Name name, attributes, styles and classes
+ if (matchName(node, format) && matchItems(node, format, 'attributes') && matchItems(node, format, 'styles')) {
+ // Match classes
+ if (classes = format.classes) {
+ for (i = 0; i < classes.length; i++) {
+ if (!dom.hasClass(node, classes[i]))
+ return;
+ }
+ }
+
+ return format;
+ }
+ }
+ }
+ };
+
+ function match(name, vars, node) {
+ var startNode;
+
+ function matchParents(node) {
+ // Find first node with similar format settings
+ node = dom.getParent(node, function(node) {
+ return !!matchNode(node, name, vars, true);
+ });
+
+ // Do an exact check on the similar format element
+ return matchNode(node, name, vars);
+ };
+
+ // Check specified node
+ if (node)
+ return matchParents(node);
+
+ // Check selected node
+ node = selection.getNode();
+ if (matchParents(node))
+ return TRUE;
+
+ // Check start node if it's different
+ startNode = selection.getStart();
+ if (startNode != node) {
+ if (matchParents(startNode))
+ return TRUE;
+ }
+
+ return FALSE;
+ };
+
+ function matchAll(names, vars) {
+ var startElement, matchedFormatNames = [], checkedMap = {}, i, ni, name;
+
+ // Check start of selection for formats
+ startElement = selection.getStart();
+ dom.getParent(startElement, function(node) {
+ var i, name;
+
+ for (i = 0; i < names.length; i++) {
+ name = names[i];
+
+ if (!checkedMap[name] && matchNode(node, name, vars)) {
+ checkedMap[name] = true;
+ matchedFormatNames.push(name);
+ }
+ }
+ });
+
+ return matchedFormatNames;
+ };
+
+ function canApply(name) {
+ var formatList = get(name), startNode, parents, i, x, selector;
+
+ if (formatList) {
+ startNode = selection.getStart();
+ parents = getParents(startNode);
+
+ for (x = formatList.length - 1; x >= 0; x--) {
+ selector = formatList[x].selector;
+
+ // Format is not selector based, then always return TRUE
+ if (!selector)
+ return TRUE;
+
+ for (i = parents.length - 1; i >= 0; i--) {
+ if (dom.is(parents[i], selector))
+ return TRUE;
+ }
+ }
+ }
+
+ return FALSE;
+ };
+
+ // Expose to public
+ tinymce.extend(this, {
+ get : get,
+ register : register,
+ apply : apply,
+ remove : remove,
+ toggle : toggle,
+ match : match,
+ matchAll : matchAll,
+ matchNode : matchNode,
+ canApply : canApply
+ });
+
+ // Private functions
+
+ function matchName(node, format) {
+ // Check for inline match
+ if (isEq(node, format.inline))
+ return TRUE;
+
+ // Check for block match
+ if (isEq(node, format.block))
+ return TRUE;
+
+ // Check for selector match
+ if (format.selector)
+ return dom.is(node, format.selector);
+ };
+
+ function isEq(str1, str2) {
+ str1 = str1 || '';
+ str2 = str2 || '';
+
+ str1 = '' + (str1.nodeName || str1);
+ str2 = '' + (str2.nodeName || str2);
+
+ return str1.toLowerCase() == str2.toLowerCase();
+ };
+
+ function getStyle(node, name) {
+ var styleVal = dom.getStyle(node, name);
+
+ // Force the format to hex
+ if (name == 'color' || name == 'backgroundColor')
+ styleVal = dom.toHex(styleVal);
+
+ // Opera will return bold as 700
+ if (name == 'fontWeight' && styleVal == 700)
+ styleVal = 'bold';
+
+ return '' + styleVal;
+ };
+
+ function replaceVars(value, vars) {
+ if (typeof(value) != "string")
+ value = value(vars);
+ else if (vars) {
+ value = value.replace(/%(\w+)/g, function(str, name) {
+ return vars[name] || str;
+ });
+ }
+
+ return value;
+ };
+
+ function isWhiteSpaceNode(node) {
+ return node && node.nodeType === 3 && /^([\t \r\n]+|)$/.test(node.nodeValue);
+ };
+
+ function wrap(node, name, attrs) {
+ var wrapper = dom.create(name, attrs);
+
+ node.parentNode.insertBefore(wrapper, node);
+ wrapper.appendChild(node);
+
+ return wrapper;
+ };
+
+ function expandRng(rng, format, remove) {
+ var startContainer = rng.startContainer,
+ startOffset = rng.startOffset,
+ endContainer = rng.endContainer,
+ endOffset = rng.endOffset, sibling, lastIdx, leaf, endPoint;
+
+ // This function walks up the tree if there is no siblings before/after the node
+ function findParentContainer(start) {
+ var container, parent, child, sibling, siblingName;
+
+ container = parent = start ? startContainer : endContainer;
+ siblingName = start ? 'previousSibling' : 'nextSibling';
+ root = dom.getRoot();
+
+ // If it's a text node and the offset is inside the text
+ if (container.nodeType == 3 && !isWhiteSpaceNode(container)) {
+ if (start ? startOffset > 0 : endOffset < container.nodeValue.length) {
+ return container;
+ }
+ }
+
+ for (;;) {
+ // Stop expanding on block elements or root depending on format
+ if (parent == root || (!format[0].block_expand && isBlock(parent)))
+ return parent;
+
+ // Walk left/right
+ for (sibling = parent[siblingName]; sibling; sibling = sibling[siblingName]) {
+ if (!isBookmarkNode(sibling) && !isWhiteSpaceNode(sibling)) {
+ return parent;
+ }
+ }
+
+ // Check if we can move up are we at root level or body level
+ parent = parent.parentNode;
+ }
+
+ return container;
+ };
+
+ // This function walks down the tree to find the leaf at the selection.
+ // The offset is also returned as if node initially a leaf, the offset may be in the middle of the text node.
+ function findLeaf(node, offset) {
+ if (offset === undefined)
+ offset = node.nodeType === 3 ? node.length : node.childNodes.length;
+ while (node && node.hasChildNodes()) {
+ node = node.childNodes[offset];
+ if (node)
+ offset = node.nodeType === 3 ? node.length : node.childNodes.length;
+ }
+ return { node: node, offset: offset };
+ }
+
+ // If index based start position then resolve it
+ if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) {
+ lastIdx = startContainer.childNodes.length - 1;
+ startContainer = startContainer.childNodes[startOffset > lastIdx ? lastIdx : startOffset];
+
+ if (startContainer.nodeType == 3)
+ startOffset = 0;
+ }
+
+ // If index based end position then resolve it
+ if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) {
+ lastIdx = endContainer.childNodes.length - 1;
+ endContainer = endContainer.childNodes[endOffset > lastIdx ? lastIdx : endOffset - 1];
+
+ if (endContainer.nodeType == 3)
+ endOffset = endContainer.nodeValue.length;
+ }
+
+ // Exclude bookmark nodes if possible
+ if (isBookmarkNode(startContainer.parentNode) || isBookmarkNode(startContainer)) {
+ startContainer = isBookmarkNode(startContainer) ? startContainer : startContainer.parentNode;
+ startContainer = startContainer.nextSibling || startContainer;
+
+ if (startContainer.nodeType == 3)
+ startOffset = 0;
+ }
+
+ if (isBookmarkNode(endContainer.parentNode) || isBookmarkNode(endContainer)) {
+ endContainer = isBookmarkNode(endContainer) ? endContainer : endContainer.parentNode;
+ endContainer = endContainer.previousSibling || endContainer;
+
+ if (endContainer.nodeType == 3)
+ endOffset = endContainer.length;
+ }
+
+ if (format[0].inline) {
+ if (rng.collapsed) {
+ function findWordEndPoint(container, offset, start) {
+ var walker, node, pos, lastTextNode;
+
+ function findSpace(node, offset) {
+ var pos, pos2, str = node.nodeValue;
+
+ if (typeof(offset) == "undefined") {
+ offset = start ? str.length : 0;
+ }
+
+ if (start) {
+ pos = str.lastIndexOf(' ', offset);
+ pos2 = str.lastIndexOf('\u00a0', offset);
+ pos = pos > pos2 ? pos : pos2;
+
+ // Include the space on remove to avoid tag soup
+ if (pos !== -1 && !remove) {
+ pos++;
+ }
+ } else {
+ pos = str.indexOf(' ', offset);
+ pos2 = str.indexOf('\u00a0', offset);
+ pos = pos !== -1 && (pos2 === -1 || pos < pos2) ? pos : pos2;
+ }
+
+ return pos;
+ };
+
+ if (container.nodeType === 3) {
+ pos = findSpace(container, offset);
+
+ if (pos !== -1) {
+ return {container : container, offset : pos};
+ }
+
+ lastTextNode = container;
+ }
+
+ // Walk the nodes inside the block
+ walker = new TreeWalker(container, dom.getParent(container, isBlock) || ed.getBody());
+ while (node = walker[start ? 'prev' : 'next']()) {
+ if (node.nodeType === 3) {
+ lastTextNode = node;
+ pos = findSpace(node);
+
+ if (pos !== -1) {
+ return {container : node, offset : pos};
+ }
+ } else if (isBlock(node)) {
+ break;
+ }
+ }
+
+ if (lastTextNode) {
+ if (start) {
+ offset = 0;
+ } else {
+ offset = lastTextNode.length;
+ }
+
+ return {container: lastTextNode, offset: offset};
+ }
+ }
+
+ // Expand left to closest word boundery
+ endPoint = findWordEndPoint(startContainer, startOffset, true);
+ if (endPoint) {
+ startContainer = endPoint.container;
+ startOffset = endPoint.offset;
+ }
+
+ // Expand right to closest word boundery
+ endPoint = findWordEndPoint(endContainer, endOffset);
+ if (endPoint) {
+ endContainer = endPoint.container;
+ endOffset = endPoint.offset;
+ }
+ }
+
+ // Avoid applying formatting to a trailing space.
+ leaf = findLeaf(endContainer, endOffset);
+ if (leaf.node) {
+ while (leaf.node && leaf.offset === 0 && leaf.node.previousSibling)
+ leaf = findLeaf(leaf.node.previousSibling);
+
+ if (leaf.node && leaf.offset > 0 && leaf.node.nodeType === 3 &&
+ leaf.node.nodeValue.charAt(leaf.offset - 1) === ' ') {
+
+ if (leaf.offset > 1) {
+ endContainer = leaf.node;
+ endContainer.splitText(leaf.offset - 1);
+ } else if (leaf.node.previousSibling) {
+ // TODO: Figure out why this is in here
+ //endContainer = leaf.node.previousSibling;
+ }
+ }
+ }
+ }
+
+ // Move start/end point up the tree if the leaves are sharp and if we are in different containers
+ // Example * becomes !: !<p><b><i>*text</i><i>text*</i></b></p>!
+ // This will reduce the number of wrapper elements that needs to be created
+ // Move start point up the tree
+ if (format[0].inline || format[0].block_expand) {
+ if (!format[0].inline || (startContainer.nodeType != 3 || startOffset === 0)) {
+ startContainer = findParentContainer(true);
+ }
+
+ if (!format[0].inline || (endContainer.nodeType != 3 || endOffset === endContainer.nodeValue.length)) {
+ endContainer = findParentContainer();
+ }
+ }
+
+ // Expand start/end container to matching selector
+ if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) {
+ function findSelectorEndPoint(container, sibling_name) {
+ var parents, i, y, curFormat;
+
+ if (container.nodeType == 3 && container.nodeValue.length == 0 && container[sibling_name])
+ container = container[sibling_name];
+
+ parents = getParents(container);
+ for (i = 0; i < parents.length; i++) {
+ for (y = 0; y < format.length; y++) {
+ curFormat = format[y];
+
+ // If collapsed state is set then skip formats that doesn't match that
+ if ("collapsed" in curFormat && curFormat.collapsed !== rng.collapsed)
+ continue;
+
+ if (dom.is(parents[i], curFormat.selector))
+ return parents[i];
+ }
+ }
+
+ return container;
+ };
+
+ // Find new startContainer/endContainer if there is better one
+ startContainer = findSelectorEndPoint(startContainer, 'previousSibling');
+ endContainer = findSelectorEndPoint(endContainer, 'nextSibling');
+ }
+
+ // Expand start/end container to matching block element or text node
+ if (format[0].block || format[0].selector) {
+ function findBlockEndPoint(container, sibling_name, sibling_name2) {
+ var node;
+
+ // Expand to block of similar type
+ if (!format[0].wrapper)
+ node = dom.getParent(container, format[0].block);
+
+ // Expand to first wrappable block element or any block element
+ if (!node)
+ node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, isBlock);
+
+ // Exclude inner lists from wrapping
+ if (node && format[0].wrapper)
+ node = getParents(node, 'ul,ol').reverse()[0] || node;
+
+ // Didn't find a block element look for first/last wrappable element
+ if (!node) {
+ node = container;
+
+ while (node[sibling_name] && !isBlock(node[sibling_name])) {
+ node = node[sibling_name];
+
+ // Break on BR but include it will be removed later on
+ // we can't remove it now since we need to check if it can be wrapped
+ if (isEq(node, 'br'))
+ break;
+ }
+ }
+
+ return node || container;
+ };
+
+ // Find new startContainer/endContainer if there is better one
+ startContainer = findBlockEndPoint(startContainer, 'previousSibling');
+ endContainer = findBlockEndPoint(endContainer, 'nextSibling');
+
+ // Non block element then try to expand up the leaf
+ if (format[0].block) {
+ if (!isBlock(startContainer))
+ startContainer = findParentContainer(true);
+
+ if (!isBlock(endContainer))
+ endContainer = findParentContainer();
+ }
+ }
+
+ // Setup index for startContainer
+ if (startContainer.nodeType == 1) {
+ startOffset = nodeIndex(startContainer);
+ startContainer = startContainer.parentNode;
+ }
+
+ // Setup index for endContainer
+ if (endContainer.nodeType == 1) {
+ endOffset = nodeIndex(endContainer) + 1;
+ endContainer = endContainer.parentNode;
+ }
+
+ // Return new range like object
+ return {
+ startContainer : startContainer,
+ startOffset : startOffset,
+ endContainer : endContainer,
+ endOffset : endOffset
+ };
+ }
+
+ function removeFormat(format, vars, node, compare_node) {
+ var i, attrs, stylesModified;
+
+ // Check if node matches format
+ if (!matchName(node, format))
+ return FALSE;
+
+ // Should we compare with format attribs and styles
+ if (format.remove != 'all') {
+ // Remove styles
+ each(format.styles, function(value, name) {
+ value = replaceVars(value, vars);
+
+ // Indexed array
+ if (typeof(name) === 'number') {
+ name = value;
+ compare_node = 0;
+ }
+
+ if (!compare_node || isEq(getStyle(compare_node, name), value))
+ dom.setStyle(node, name, '');
+
+ stylesModified = 1;
+ });
+
+ // Remove style attribute if it's empty
+ if (stylesModified && dom.getAttrib(node, 'style') == '') {
+ node.removeAttribute('style');
+ node.removeAttribute('data-mce-style');
+ }
+
+ // Remove attributes
+ each(format.attributes, function(value, name) {
+ var valueOut;
+
+ value = replaceVars(value, vars);
+
+ // Indexed array
+ if (typeof(name) === 'number') {
+ name = value;
+ compare_node = 0;
+ }
+
+ if (!compare_node || isEq(dom.getAttrib(compare_node, name), value)) {
+ // Keep internal classes
+ if (name == 'class') {
+ value = dom.getAttrib(node, name);
+ if (value) {
+ // Build new class value where everything is removed except the internal prefixed classes
+ valueOut = '';
+ each(value.split(/\s+/), function(cls) {
+ if (/mce\w+/.test(cls))
+ valueOut += (valueOut ? ' ' : '') + cls;
+ });
+
+ // We got some internal classes left
+ if (valueOut) {
+ dom.setAttrib(node, name, valueOut);
+ return;
+ }
+ }
+ }
+
+ // IE6 has a bug where the attribute doesn't get removed correctly
+ if (name == "class")
+ node.removeAttribute('className');
+
+ // Remove mce prefixed attributes
+ if (MCE_ATTR_RE.test(name))
+ node.removeAttribute('data-mce-' + name);
+
+ node.removeAttribute(name);
+ }
+ });
+
+ // Remove classes
+ each(format.classes, function(value) {
+ value = replaceVars(value, vars);
+
+ if (!compare_node || dom.hasClass(compare_node, value))
+ dom.removeClass(node, value);
+ });
+
+ // Check for non internal attributes
+ attrs = dom.getAttribs(node);
+ for (i = 0; i < attrs.length; i++) {
+ if (attrs[i].nodeName.indexOf('_') !== 0)
+ return FALSE;
+ }
+ }
+
+ // Remove the inline child if it's empty for example <b> or <span>
+ if (format.remove != 'none') {
+ removeNode(node, format);
+ return TRUE;
+ }
+ };
+
+ function removeNode(node, format) {
+ var parentNode = node.parentNode, rootBlockElm;
+
+ if (format.block) {
+ if (!forcedRootBlock) {
+ function find(node, next, inc) {
+ node = getNonWhiteSpaceSibling(node, next, inc);
+
+ return !node || (node.nodeName == 'BR' || isBlock(node));
+ };
+
+ // Append BR elements if needed before we remove the block
+ if (isBlock(node) && !isBlock(parentNode)) {
+ if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1))
+ node.insertBefore(dom.create('br'), node.firstChild);
+
+ if (!find(node, TRUE) && !find(node.lastChild, FALSE, 1))
+ node.appendChild(dom.create('br'));
+ }
+ } else {
+ // Wrap the block in a forcedRootBlock if we are at the root of document
+ if (parentNode == dom.getRoot()) {
+ if (!format.list_block || !isEq(node, format.list_block)) {
+ each(tinymce.grep(node.childNodes), function(node) {
+ if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) {
+ if (!rootBlockElm)
+ rootBlockElm = wrap(node, forcedRootBlock);
+ else
+ rootBlockElm.appendChild(node);
+ } else
+ rootBlockElm = 0;
+ });
+ }
+ }
+ }
+ }
+
+ // Never remove nodes that isn't the specified inline element if a selector is specified too
+ if (format.selector && format.inline && !isEq(format.inline, node))
+ return;
+
+ dom.remove(node, 1);
+ };
+
+ function getNonWhiteSpaceSibling(node, next, inc) {
+ if (node) {
+ next = next ? 'nextSibling' : 'previousSibling';
+
+ for (node = inc ? node : node[next]; node; node = node[next]) {
+ if (node.nodeType == 1 || !isWhiteSpaceNode(node))
+ return node;
+ }
+ }
+ };
+
+ function isBookmarkNode(node) {
+ return node && node.nodeType == 1 && node.getAttribute('data-mce-type') == 'bookmark';
+ };
+
+ function mergeSiblings(prev, next) {
+ var marker, sibling, tmpSibling;
+
+ function compareElements(node1, node2) {
+ // Not the same name
+ if (node1.nodeName != node2.nodeName)
+ return FALSE;
+
+ function getAttribs(node) {
+ var attribs = {};
+
+ each(dom.getAttribs(node), function(attr) {
+ var name = attr.nodeName.toLowerCase();
+
+ // Don't compare internal attributes or style
+ if (name.indexOf('_') !== 0 && name !== 'style')
+ attribs[name] = dom.getAttrib(node, name);
+ });
+
+ return attribs;
+ };
+
+ function compareObjects(obj1, obj2) {
+ var value, name;
+
+ for (name in obj1) {
+ // Obj1 has item obj2 doesn't have
+ if (obj1.hasOwnProperty(name)) {
+ value = obj2[name];
+
+ // Obj2 doesn't have obj1 item
+ if (value === undefined)
+ return FALSE;
+
+ // Obj2 item has a different value
+ if (obj1[name] != value)
+ return FALSE;
+
+ // Delete similar value
+ delete obj2[name];
+ }
+ }
+
+ // Check if obj 2 has something obj 1 doesn't have
+ for (name in obj2) {
+ // Obj2 has item obj1 doesn't have
+ if (obj2.hasOwnProperty(name))
+ return FALSE;
+ }
+
+ return TRUE;
+ };
+
+ // Attribs are not the same
+ if (!compareObjects(getAttribs(node1), getAttribs(node2)))
+ return FALSE;
+
+ // Styles are not the same
+ if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style'))))
+ return FALSE;
+
+ return TRUE;
+ };
+
+ // Check if next/prev exists and that they are elements
+ if (prev && next) {
+ function findElementSibling(node, sibling_name) {
+ for (sibling = node; sibling; sibling = sibling[sibling_name]) {
+ if (sibling.nodeType == 3 && sibling.nodeValue.length !== 0)
+ return node;
+
+ if (sibling.nodeType == 1 && !isBookmarkNode(sibling))
+ return sibling;
+ }
+
+ return node;
+ };
+
+ // If previous sibling is empty then jump over it
+ prev = findElementSibling(prev, 'previousSibling');
+ next = findElementSibling(next, 'nextSibling');
+
+ // Compare next and previous nodes
+ if (compareElements(prev, next)) {
+ // Append nodes between
+ for (sibling = prev.nextSibling; sibling && sibling != next;) {
+ tmpSibling = sibling;
+ sibling = sibling.nextSibling;
+ prev.appendChild(tmpSibling);
+ }
+
+ // Remove next node
+ dom.remove(next);
+
+ // Move children into prev node
+ each(tinymce.grep(next.childNodes), function(node) {
+ prev.appendChild(node);
+ });
+
+ return prev;
+ }
+ }
+
+ return next;
+ };
+
+ function isTextBlock(name) {
+ return /^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(name);
+ };
+
+ function getContainer(rng, start) {
+ var container, offset, lastIdx, walker;
+
+ container = rng[start ? 'startContainer' : 'endContainer'];
+ offset = rng[start ? 'startOffset' : 'endOffset'];
+
+ if (container.nodeType == 1) {
+ lastIdx = container.childNodes.length - 1;
+
+ if (!start && offset)
+ offset--;
+
+ container = container.childNodes[offset > lastIdx ? lastIdx : offset];
+ }
+
+ // If start text node is excluded then walk to the next node
+ if (container.nodeType === 3 && start && offset >= container.nodeValue.length) {
+ container = new TreeWalker(container, ed.getBody()).next() || container;
+ }
+
+ // If end text node is excluded then walk to the previous node
+ if (container.nodeType === 3 && !start && offset == 0) {
+ container = new TreeWalker(container, ed.getBody()).prev() || container;
+ }
+
+ return container;
+ };
+
+ function performCaretAction(type, name, vars) {
+ var invisibleChar, caretContainerId = '_mce_caret', debug = ed.settings.caret_debug;
+
+ // Setup invisible character use zero width space on Gecko since it doesn't change the heigt of the container
+ invisibleChar = tinymce.isGecko ? '\u200B' : INVISIBLE_CHAR;
+
+ // Creates a caret container bogus element
+ function createCaretContainer(fill) {
+ var caretContainer = dom.create('span', {id: caretContainerId, 'data-mce-bogus': true, style: debug ? 'color:red' : ''});
+
+ if (fill) {
+ caretContainer.appendChild(ed.getDoc().createTextNode(invisibleChar));
+ }
+
+ return caretContainer;
+ };
+
+ function isCaretContainerEmpty(node, nodes) {
+ while (node) {
+ if ((node.nodeType === 3 && node.nodeValue !== invisibleChar) || node.childNodes.length > 1) {
+ return false;
+ }
+
+ // Collect nodes
+ if (nodes && node.nodeType === 1) {
+ nodes.push(node);
+ }
+
+ node = node.firstChild;
+ }
+
+ return true;
+ };
+
+ // Returns any parent caret container element
+ function getParentCaretContainer(node) {
+ while (node) {
+ if (node.id === caretContainerId) {
+ return node;
+ }
+
+ node = node.parentNode;
+ }
+ };
+
+ // Finds the first text node in the specified node
+ function findFirstTextNode(node) {
+ var walker;
+
+ if (node) {
+ walker = new TreeWalker(node, node);
+
+ for (node = walker.current(); node; node = walker.next()) {
+ if (node.nodeType === 3) {
+ return node;
+ }
+ }
+ }
+ };
+
+ // Removes the caret container for the specified node or all on the current document
+ function removeCaretContainer(node, move_caret) {
+ var child, rng;
+
+ if (!node) {
+ node = getParentCaretContainer(selection.getStart());
+
+ if (!node) {
+ while (node = dom.get(caretContainerId)) {
+ removeCaretContainer(node, false);
+ }
+ }
+ } else {
+ rng = selection.getRng(true);
+
+ if (isCaretContainerEmpty(node)) {
+ if (move_caret !== false) {
+ rng.setStartBefore(node);
+ rng.setEndBefore(node);
+ }
+
+ dom.remove(node);
+ } else {
+ child = findFirstTextNode(node);
+ child = child.deleteData(0, 1);
+ dom.remove(node, 1);
+ }
+
+ selection.setRng(rng);
+ }
+ };
+
+ // Applies formatting to the caret postion
+ function applyCaretFormat() {
+ var rng, caretContainer, textNode, offset, bookmark, container, text;
+
+ rng = selection.getRng(true);
+ offset = rng.startOffset;
+ container = rng.startContainer;
+ text = container.nodeValue;
+
+ caretContainer = getParentCaretContainer(selection.getStart());
+ if (caretContainer) {
+ textNode = findFirstTextNode(caretContainer);
+ }
+
+ // Expand to word is caret is in the middle of a text node and the char before/after is a alpha numeric character
+ if (text && offset > 0 && offset < text.length && /\w/.test(text.charAt(offset)) && /\w/.test(text.charAt(offset - 1))) {
+ // Get bookmark of caret position
+ bookmark = selection.getBookmark();
+
+ // Collapse bookmark range (WebKit)
+ rng.collapse(true);
+
+ // Expand the range to the closest word and split it at those points
+ rng = expandRng(rng, get(name));
+ rng = rangeUtils.split(rng);
+
+ // Apply the format to the range
+ apply(name, vars, rng);
+
+ // Move selection back to caret position
+ selection.moveToBookmark(bookmark);
+ } else {
+ if (!caretContainer || textNode.nodeValue !== invisibleChar) {
+ caretContainer = createCaretContainer(true);
+ textNode = caretContainer.firstChild;
+
+ rng.insertNode(caretContainer);
+ offset = 1;
+
+ apply(name, vars, caretContainer);
+ } else {
+ apply(name, vars, caretContainer);
+ }
+
+ // Move selection to text node
+ selection.setCursorLocation(textNode, offset);
+ }
+ };
+
+ function removeCaretFormat() {
+ var rng = selection.getRng(true), container, offset, bookmark,
+ hasContentAfter, node, formatNode, parents = [], i, caretContainer;
+
+ container = rng.startContainer;
+ offset = rng.startOffset;
+ node = container;
+
+ if (container.nodeType == 3) {
+ if (offset != container.nodeValue.length || container.nodeValue === invisibleChar) {
+ hasContentAfter = true;
+ }
+
+ node = node.parentNode;
+ }
+
+ while (node) {
+ if (matchNode(node, name, vars)) {
+ formatNode = node;
+ break;
+ }
+
+ if (node.nextSibling) {
+ hasContentAfter = true;
+ }
+
+ parents.push(node);
+ node = node.parentNode;
+ }
+
+ // Node doesn't have the specified format
+ if (!formatNode) {
+ return;
+ }
+
+ // Is there contents after the caret then remove the format on the element
+ if (hasContentAfter) {
+ // Get bookmark of caret position
+ bookmark = selection.getBookmark();
+
+ // Collapse bookmark range (WebKit)
+ rng.collapse(true);
+
+ // Expand the range to the closest word and split it at those points
+ rng = expandRng(rng, get(name), true);
+ rng = rangeUtils.split(rng);
+
+ // Remove the format from the range
+ remove(name, vars, rng);
+
+ // Move selection back to caret position
+ selection.moveToBookmark(bookmark);
+ } else {
+ caretContainer = createCaretContainer();
+
+ node = caretContainer;
+ for (i = parents.length - 1; i >= 0; i--) {
+ node.appendChild(parents[i].cloneNode(false));
+ node = node.firstChild;
+ }
+
+ // Insert invisible character into inner most format element
+ node.appendChild(dom.doc.createTextNode(invisibleChar));
+ node = node.firstChild;
+
+ // Insert caret container after the formated node
+ dom.insertAfter(caretContainer, formatNode);
+
+ // Move selection to text node
+ selection.setCursorLocation(node, 1);
+ }
+ };
+
+ // Mark current caret container elements as bogus when getting the contents so we don't end up with empty elements
+ ed.onBeforeGetContent.addToTop(function() {
+ var nodes = [], i;
+
+ if (isCaretContainerEmpty(getParentCaretContainer(selection.getStart()), nodes)) {
+ // Mark children
+ i = nodes.length;
+ while (i--) {
+ dom.setAttrib(nodes[i], 'data-mce-bogus', '1');
+ }
+ }
+ });
+
+ // Remove caret container on mouse up and on key up
+ tinymce.each('onMouseUp onKeyUp'.split(' '), function(name) {
+ ed[name].addToTop(function() {
+ removeCaretContainer();
+ });
+ });
+
+ // Remove caret container on keydown and it's a backspace, enter or left/right arrow keys
+ ed.onKeyDown.addToTop(function(ed, e) {
+ var keyCode = e.keyCode;
+
+ if (keyCode == 8 || keyCode == 37 || keyCode == 39) {
+ removeCaretContainer(getParentCaretContainer(selection.getStart()));
+ }
+ });
+
+ // Do apply or remove caret format
+ if (type == "apply") {
+ applyCaretFormat();
+ } else {
+ removeCaretFormat();
+ }
+ };
+ };
+})(tinymce);
+
+tinymce.onAddEditor.add(function(tinymce, ed) {
+ var filters, fontSizes, dom, settings = ed.settings;
+
+ if (settings.inline_styles) {
+ fontSizes = tinymce.explode(settings.font_size_legacy_values);
+
+ function replaceWithSpan(node, styles) {
+ tinymce.each(styles, function(value, name) {
+ if (value)
+ dom.setStyle(node, name, value);
+ });
+
+ dom.rename(node, 'span');
+ };
+
+ filters = {
+ font : function(dom, node) {
+ replaceWithSpan(node, {
+ backgroundColor : node.style.backgroundColor,
+ color : node.color,
+ fontFamily : node.face,
+ fontSize : fontSizes[parseInt(node.size) - 1]
+ });
+ },
+
+ u : function(dom, node) {
+ replaceWithSpan(node, {
+ textDecoration : 'underline'
+ });
+ },
+
+ strike : function(dom, node) {
+ replaceWithSpan(node, {
+ textDecoration : 'line-through'
+ });
+ }
+ };
+
+ function convert(editor, params) {
+ dom = editor.dom;
+
+ if (settings.convert_fonts_to_spans) {
+ tinymce.each(dom.select('font,u,strike', params.node), function(node) {
+ filters[node.nodeName.toLowerCase()](ed.dom, node);
+ });
+ }
+ };
+
+ ed.onPreProcess.add(convert);
+ ed.onSetContent.add(convert);
+
+ ed.onInit.add(function() {
+ ed.selection.onSetContent.add(convert);
+ });
+ }
+});
+
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/editable_selects.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/editable_selects.js
new file mode 100644
index 000000000..4b920f3d1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/editable_selects.js
@@ -0,0 +1,70 @@
+/**
+ * editable_selects.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+var TinyMCE_EditableSelects = {
+ editSelectElm : null,
+
+ init : function() {
+ var nl = document.getElementsByTagName("select"), i, d = document, o;
+
+ for (i=0; i<nl.length; i++) {
+ if (nl[i].className.indexOf('mceEditableSelect') != -1) {
+ o = new Option(tinyMCEPopup.editor.translate('value'), '__mce_add_custom__');
+
+ o.className = 'mceAddSelectValue';
+
+ nl[i].options[nl[i].options.length] = o;
+ nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;
+ }
+ }
+ },
+
+ onChangeEditableSelect : function(e) {
+ var d = document, ne, se = window.event ? window.event.srcElement : e.target;
+
+ if (se.options[se.selectedIndex].value == '__mce_add_custom__') {
+ ne = d.createElement("input");
+ ne.id = se.id + "_custom";
+ ne.name = se.name + "_custom";
+ ne.type = "text";
+
+ ne.style.width = se.offsetWidth + 'px';
+ se.parentNode.insertBefore(ne, se);
+ se.style.display = 'none';
+ ne.focus();
+ ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;
+ ne.onkeydown = TinyMCE_EditableSelects.onKeyDown;
+ TinyMCE_EditableSelects.editSelectElm = se;
+ }
+ },
+
+ onBlurEditableSelectInput : function() {
+ var se = TinyMCE_EditableSelects.editSelectElm;
+
+ if (se) {
+ if (se.previousSibling.value != '') {
+ addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);
+ selectByValue(document.forms[0], se.id, se.previousSibling.value);
+ } else
+ selectByValue(document.forms[0], se.id, '');
+
+ se.style.display = 'inline';
+ se.parentNode.removeChild(se.previousSibling);
+ TinyMCE_EditableSelects.editSelectElm = null;
+ }
+ },
+
+ onKeyDown : function(e) {
+ e = e || window.event;
+
+ if (e.keyCode == 13)
+ TinyMCE_EditableSelects.onBlurEditableSelectInput();
+ }
+};
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/form_utils.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/form_utils.js
new file mode 100644
index 000000000..59da01399
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/form_utils.js
@@ -0,0 +1,210 @@
+/**
+ * form_utils.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));
+
+function getColorPickerHTML(id, target_form_element) {
+ var h = "", dom = tinyMCEPopup.dom;
+
+ if (label = dom.select('label[for=' + target_form_element + ']')[0]) {
+ label.id = label.id || dom.uniqueId();
+ }
+
+ 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">';
+ 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>';
+
+ return h;
+}
+
+function updateColor(img_id, form_element_id) {
+ document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;
+}
+
+function setBrowserDisabled(id, state) {
+ var img = document.getElementById(id);
+ var lnk = document.getElementById(id + "_link");
+
+ if (lnk) {
+ if (state) {
+ lnk.setAttribute("realhref", lnk.getAttribute("href"));
+ lnk.removeAttribute("href");
+ tinyMCEPopup.dom.addClass(img, 'disabled');
+ } else {
+ if (lnk.getAttribute("realhref"))
+ lnk.setAttribute("href", lnk.getAttribute("realhref"));
+
+ tinyMCEPopup.dom.removeClass(img, 'disabled');
+ }
+ }
+}
+
+function getBrowserHTML(id, target_form_element, type, prefix) {
+ var option = prefix + "_" + type + "_browser_callback", cb, html;
+
+ cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));
+
+ if (!cb)
+ return "";
+
+ html = "";
+ html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';
+ html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;</span></a>';
+
+ return html;
+}
+
+function openBrowser(img_id, target_form_element, type, option) {
+ var img = document.getElementById(img_id);
+
+ if (img.className != "mceButtonDisabled")
+ tinyMCEPopup.openBrowser(target_form_element, type, option);
+}
+
+function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
+ if (!form_obj || !form_obj.elements[field_name])
+ return;
+
+ if (!value)
+ value = "";
+
+ var sel = form_obj.elements[field_name];
+
+ var found = false;
+ for (var i=0; i<sel.options.length; i++) {
+ var option = sel.options[i];
+
+ if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
+ option.selected = true;
+ found = true;
+ } else
+ option.selected = false;
+ }
+
+ if (!found && add_custom && value != '') {
+ var option = new Option(value, value);
+ option.selected = true;
+ sel.options[sel.options.length] = option;
+ sel.selectedIndex = sel.options.length - 1;
+ }
+
+ return found;
+}
+
+function getSelectValue(form_obj, field_name) {
+ var elm = form_obj.elements[field_name];
+
+ if (elm == null || elm.options == null || elm.selectedIndex === -1)
+ return "";
+
+ return elm.options[elm.selectedIndex].value;
+}
+
+function addSelectValue(form_obj, field_name, name, value) {
+ var s = form_obj.elements[field_name];
+ var o = new Option(name, value);
+ s.options[s.options.length] = o;
+}
+
+function addClassesToList(list_id, specific_option) {
+ // Setup class droplist
+ var styleSelectElm = document.getElementById(list_id);
+ var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);
+ styles = tinyMCEPopup.getParam(specific_option, styles);
+
+ if (styles) {
+ var stylesAr = styles.split(';');
+
+ for (var i=0; i<stylesAr.length; i++) {
+ if (stylesAr != "") {
+ var key, value;
+
+ key = stylesAr[i].split('=')[0];
+ value = stylesAr[i].split('=')[1];
+
+ styleSelectElm.options[styleSelectElm.length] = new Option(key, value);
+ }
+ }
+ } else {
+ tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {
+ styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);
+ });
+ }
+}
+
+function isVisible(element_id) {
+ var elm = document.getElementById(element_id);
+
+ return elm && elm.style.display != "none";
+}
+
+function convertRGBToHex(col) {
+ var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
+
+ var rgb = col.replace(re, "$1,$2,$3").split(',');
+ if (rgb.length == 3) {
+ r = parseInt(rgb[0]).toString(16);
+ g = parseInt(rgb[1]).toString(16);
+ b = parseInt(rgb[2]).toString(16);
+
+ r = r.length == 1 ? '0' + r : r;
+ g = g.length == 1 ? '0' + g : g;
+ b = b.length == 1 ? '0' + b : b;
+
+ return "#" + r + g + b;
+ }
+
+ return col;
+}
+
+function convertHexToRGB(col) {
+ if (col.indexOf('#') != -1) {
+ col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
+
+ r = parseInt(col.substring(0, 2), 16);
+ g = parseInt(col.substring(2, 4), 16);
+ b = parseInt(col.substring(4, 6), 16);
+
+ return "rgb(" + r + "," + g + "," + b + ")";
+ }
+
+ return col;
+}
+
+function trimSize(size) {
+ return size.replace(/([0-9\.]+)(px|%|in|cm|mm|em|ex|pt|pc)/i, '$1$2');
+}
+
+function getCSSSize(size) {
+ size = trimSize(size);
+
+ if (size == "")
+ return "";
+
+ // Add px
+ if (/^[0-9]+$/.test(size))
+ size += 'px';
+ // Sanity check, IE doesn't like broken values
+ else if (!(/^[0-9\.]+(px|%|in|cm|mm|em|ex|pt|pc)$/i.test(size)))
+ return "";
+
+ return size;
+}
+
+function getStyle(elm, attrib, style) {
+ var val = tinyMCEPopup.dom.getAttrib(elm, attrib);
+
+ if (val != '')
+ return '' + val;
+
+ if (typeof(style) == 'undefined')
+ style = attrib;
+
+ return tinyMCEPopup.dom.getStyle(elm, style);
+}
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/mctabs.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/mctabs.js
new file mode 100644
index 000000000..458ec86da
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/mctabs.js
@@ -0,0 +1,162 @@
+/**
+ * mctabs.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+function MCTabs() {
+ this.settings = [];
+ this.onChange = tinyMCEPopup.editor.windowManager.createInstance('tinymce.util.Dispatcher');
+};
+
+MCTabs.prototype.init = function(settings) {
+ this.settings = settings;
+};
+
+MCTabs.prototype.getParam = function(name, default_value) {
+ var value = null;
+
+ value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
+
+ // Fix bool values
+ if (value == "true" || value == "false")
+ return (value == "true");
+
+ return value;
+};
+
+MCTabs.prototype.showTab =function(tab){
+ tab.className = 'current';
+ tab.setAttribute("aria-selected", true);
+ tab.setAttribute("aria-expanded", true);
+ tab.tabIndex = 0;
+};
+
+MCTabs.prototype.hideTab =function(tab){
+ var t=this;
+
+ tab.className = '';
+ tab.setAttribute("aria-selected", false);
+ tab.setAttribute("aria-expanded", false);
+ tab.tabIndex = -1;
+};
+
+MCTabs.prototype.showPanel = function(panel) {
+ panel.className = 'current';
+ panel.setAttribute("aria-hidden", false);
+};
+
+MCTabs.prototype.hidePanel = function(panel) {
+ panel.className = 'panel';
+ panel.setAttribute("aria-hidden", true);
+};
+
+MCTabs.prototype.getPanelForTab = function(tabElm) {
+ return tinyMCEPopup.dom.getAttrib(tabElm, "aria-controls");
+};
+
+MCTabs.prototype.displayTab = function(tab_id, panel_id, avoid_focus) {
+ var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i, t = this;
+
+ tabElm = document.getElementById(tab_id);
+
+ if (panel_id === undefined) {
+ panel_id = t.getPanelForTab(tabElm);
+ }
+
+ panelElm= document.getElementById(panel_id);
+ panelContainerElm = panelElm ? panelElm.parentNode : null;
+ tabContainerElm = tabElm ? tabElm.parentNode : null;
+ selectionClass = t.getParam('selection_class', 'current');
+
+ if (tabElm && tabContainerElm) {
+ nodes = tabContainerElm.childNodes;
+
+ // Hide all other tabs
+ for (i = 0; i < nodes.length; i++) {
+ if (nodes[i].nodeName == "LI") {
+ t.hideTab(nodes[i]);
+ }
+ }
+
+ // Show selected tab
+ t.showTab(tabElm);
+ }
+
+ if (panelElm && panelContainerElm) {
+ nodes = panelContainerElm.childNodes;
+
+ // Hide all other panels
+ for (i = 0; i < nodes.length; i++) {
+ if (nodes[i].nodeName == "DIV")
+ t.hidePanel(nodes[i]);
+ }
+
+ if (!avoid_focus) {
+ tabElm.focus();
+ }
+
+ // Show selected panel
+ t.showPanel(panelElm);
+ }
+};
+
+MCTabs.prototype.getAnchor = function() {
+ var pos, url = document.location.href;
+
+ if ((pos = url.lastIndexOf('#')) != -1)
+ return url.substring(pos + 1);
+
+ return "";
+};
+
+
+//Global instance
+var mcTabs = new MCTabs();
+
+tinyMCEPopup.onInit.add(function() {
+ var tinymce = tinyMCEPopup.getWin().tinymce, dom = tinyMCEPopup.dom, each = tinymce.each;
+
+ each(dom.select('div.tabs'), function(tabContainerElm) {
+ var keyNav;
+
+ dom.setAttrib(tabContainerElm, "role", "tablist");
+
+ var items = tinyMCEPopup.dom.select('li', tabContainerElm);
+ var action = function(id) {
+ mcTabs.displayTab(id, mcTabs.getPanelForTab(id));
+ mcTabs.onChange.dispatch(id);
+ };
+
+ each(items, function(item) {
+ dom.setAttrib(item, 'role', 'tab');
+ dom.bind(item, 'click', function(evt) {
+ action(item.id);
+ });
+ });
+
+ dom.bind(dom.getRoot(), 'keydown', function(evt) {
+ if (evt.keyCode === 9 && evt.ctrlKey && !evt.altKey) { // Tab
+ keyNav.moveFocus(evt.shiftKey ? -1 : 1);
+ tinymce.dom.Event.cancel(evt);
+ }
+ });
+
+ each(dom.select('a', tabContainerElm), function(a) {
+ dom.setAttrib(a, 'tabindex', '-1');
+ });
+
+ keyNav = tinyMCEPopup.editor.windowManager.createInstance('tinymce.ui.KeyboardNavigation', {
+ root: tabContainerElm,
+ items: items,
+ onAction: action,
+ actOnFocus: true,
+ enableLeftRight: true,
+ enableUpDown: true
+ }, tinyMCEPopup.dom);
+ });
+}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/validate.js b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/validate.js
new file mode 100644
index 000000000..27cbfab81
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tiny_mce/utils/validate.js
@@ -0,0 +1,252 @@
+/**
+ * validate.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+/**
+ // String validation:
+
+ if (!Validator.isEmail('myemail'))
+ alert('Invalid email.');
+
+ // Form validation:
+
+ var f = document.forms['myform'];
+
+ if (!Validator.isEmail(f.myemail))
+ alert('Invalid email.');
+*/
+
+var Validator = {
+ isEmail : function(s) {
+ return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
+ },
+
+ isAbsUrl : function(s) {
+ return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');
+ },
+
+ isSize : function(s) {
+ return this.test(s, '^[0-9.]+(%|in|cm|mm|em|ex|pt|pc|px)?$');
+ },
+
+ isId : function(s) {
+ return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');
+ },
+
+ isEmpty : function(s) {
+ var nl, i;
+
+ if (s.nodeName == 'SELECT' && s.selectedIndex < 1)
+ return true;
+
+ if (s.type == 'checkbox' && !s.checked)
+ return true;
+
+ if (s.type == 'radio') {
+ for (i=0, nl = s.form.elements; i<nl.length; i++) {
+ if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)
+ return false;
+ }
+
+ return true;
+ }
+
+ return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);
+ },
+
+ isNumber : function(s, d) {
+ return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
+ },
+
+ test : function(s, p) {
+ s = s.nodeType == 1 ? s.value : s;
+
+ return s == '' || new RegExp(p).test(s);
+ }
+};
+
+var AutoValidator = {
+ settings : {
+ id_cls : 'id',
+ int_cls : 'int',
+ url_cls : 'url',
+ number_cls : 'number',
+ email_cls : 'email',
+ size_cls : 'size',
+ required_cls : 'required',
+ invalid_cls : 'invalid',
+ min_cls : 'min',
+ max_cls : 'max'
+ },
+
+ init : function(s) {
+ var n;
+
+ for (n in s)
+ this.settings[n] = s[n];
+ },
+
+ validate : function(f) {
+ var i, nl, s = this.settings, c = 0;
+
+ nl = this.tags(f, 'label');
+ for (i=0; i<nl.length; i++) {
+ this.removeClass(nl[i], s.invalid_cls);
+ nl[i].setAttribute('aria-invalid', false);
+ }
+
+ c += this.validateElms(f, 'input');
+ c += this.validateElms(f, 'select');
+ c += this.validateElms(f, 'textarea');
+
+ return c == 3;
+ },
+
+ invalidate : function(n) {
+ this.mark(n.form, n);
+ },
+
+ getErrorMessages : function(f) {
+ var nl, i, s = this.settings, field, msg, values, messages = [], ed = tinyMCEPopup.editor;
+ nl = this.tags(f, "label");
+ for (i=0; i<nl.length; i++) {
+ if (this.hasClass(nl[i], s.invalid_cls)) {
+ field = document.getElementById(nl[i].getAttribute("for"));
+ values = { field: nl[i].textContent };
+ if (this.hasClass(field, s.min_cls, true)) {
+ message = ed.getLang('invalid_data_min');
+ values.min = this.getNum(field, s.min_cls);
+ } else if (this.hasClass(field, s.number_cls)) {
+ message = ed.getLang('invalid_data_number');
+ } else if (this.hasClass(field, s.size_cls)) {
+ message = ed.getLang('invalid_data_size');
+ } else {
+ message = ed.getLang('invalid_data');
+ }
+
+ message = message.replace(/{\#([^}]+)\}/g, function(a, b) {
+ return values[b] || '{#' + b + '}';
+ });
+ messages.push(message);
+ }
+ }
+ return messages;
+ },
+
+ reset : function(e) {
+ var t = ['label', 'input', 'select', 'textarea'];
+ var i, j, nl, s = this.settings;
+
+ if (e == null)
+ return;
+
+ for (i=0; i<t.length; i++) {
+ nl = this.tags(e.form ? e.form : e, t[i]);
+ for (j=0; j<nl.length; j++) {
+ this.removeClass(nl[j], s.invalid_cls);
+ nl[j].setAttribute('aria-invalid', false);
+ }
+ }
+ },
+
+ validateElms : function(f, e) {
+ var nl, i, n, s = this.settings, st = true, va = Validator, v;
+
+ nl = this.tags(f, e);
+ for (i=0; i<nl.length; i++) {
+ n = nl[i];
+
+ this.removeClass(n, s.invalid_cls);
+
+ if (this.hasClass(n, s.required_cls) && va.isEmpty(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.number_cls) && !va.isNumber(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.email_cls) && !va.isEmail(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.size_cls) && !va.isSize(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.id_cls) && !va.isId(n))
+ st = this.mark(f, n);
+
+ if (this.hasClass(n, s.min_cls, true)) {
+ v = this.getNum(n, s.min_cls);
+
+ if (isNaN(v) || parseInt(n.value) < parseInt(v))
+ st = this.mark(f, n);
+ }
+
+ if (this.hasClass(n, s.max_cls, true)) {
+ v = this.getNum(n, s.max_cls);
+
+ if (isNaN(v) || parseInt(n.value) > parseInt(v))
+ st = this.mark(f, n);
+ }
+ }
+
+ return st;
+ },
+
+ hasClass : function(n, c, d) {
+ return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);
+ },
+
+ getNum : function(n, c) {
+ c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];
+ c = c.replace(/[^0-9]/g, '');
+
+ return c;
+ },
+
+ addClass : function(n, c, b) {
+ var o = this.removeClass(n, c);
+ n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
+ },
+
+ removeClass : function(n, c) {
+ c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
+ return n.className = c != ' ' ? c : '';
+ },
+
+ tags : function(f, s) {
+ return f.getElementsByTagName(s);
+ },
+
+ mark : function(f, n) {
+ var s = this.settings;
+
+ this.addClass(n, s.invalid_cls);
+ n.setAttribute('aria-invalid', 'true');
+ this.markLabels(f, n, s.invalid_cls);
+
+ return false;
+ },
+
+ markLabels : function(f, n, ic) {
+ var nl, i;
+
+ nl = this.tags(f, "label");
+ for (i=0; i<nl.length; i++) {
+ if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)
+ this.addClass(nl[i], ic);
+ }
+
+ return null;
+ }
+};
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ar.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ar.js
new file mode 100644
index 000000000..0efcb51bc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ar.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ar:{common:{"more_colors":"\u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0623\u0644\u0648\u0627\u0646","invalid_data":"\u062e\u0637\u0623.: \u062a\u0645 \u0625\u062f\u062e\u0627\u0644 \u0642\u064a\u0645 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d\u0647 \u060c \u0647\u0630\u0647 \u0627\u0644\u0642\u064a\u0645 \u0628\u0627\u0644\u0644\u0648\u0646 \u0627\u0644\u0627\u062d\u0645\u0631","popup_blocked":"\u0639\u0630\u0631\u0627 \u060c\u0625\u062f\u0627\u0631\u0629 \u0639\u0631\u0636 \u0627\u0644\u0646\u0648\u0641\u0630 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0647 \u0627\u0648\u0642\u0641\u062a \u0646\u0627\u0641\u0630\u0647 \u062a\u0648\u0641\u0631 \u062e\u062f\u0645\u0647 \u0645\u0646 \u062e\u062f\u0645\u0627\u062a \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c . \u064a\u062c\u0628 \u0627\u0644\u0633\u0645\u0627\u062d \u0644\u0644\u0646\u0648\u0627\u0641\u0630 \u0627\u0644\u0645\u0646\u0628\u062b\u0642\u0647 \u0644\u0643\u0649 \u064a\u0639\u0645\u0644 \u0627\u0644\u0628\u0631\u0646\u0627\u0645\u062c \u0628\u0643\u0641\u0627\u0626\u0647.","clipboard_no_support":"\u062d\u0627\u0644\u064a\u0627 \u063a\u064a\u0631 \u0645\u0639\u062a\u0645\u062f\u0629 \u0645\u0646 \u0642\u0628\u0644 \u0627\u0644\u0645\u062a\u0635\u0641\u062d \u0627\u0644\u062e\u0627\u0635 \u0628\u0643 \u060c \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u062e\u062a\u0635\u0627\u0631\u0627\u062a \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0628\u062f\u0644\u0627 \u0645\u0646 \u0630\u0644\u0643.","clipboard_msg":"\u0646\u0633\u062e / \u0642\u0635 / \u0644\u0635\u0642 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631 \u0641\u064a \u0645\u0648\u0632\u064a\u0644\u0627 \u0648\u0641\u0627\u064a\u0631\u0641\u0648\u0643\u0633.\n\u062a\u0631\u064a\u062f \u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a \u062d\u0648\u0644 \u0647\u0630\u0647 \u0627\u0644\u0645\u0634\u0643\u0644\u0629\u061f","not_set":"-- Not set --","class_name":"\u0627\u0644\u062f\u0631\u062c\u0629",browse:"\u062a\u0635\u0641\u062d",close:"\u0625\u063a\u0644\u0627\u0642",cancel:"\u0625\u0644\u063a\u0627\u0621",update:"\u062a\u062d\u062f\u064a\u062b",insert:"\u0625\u062f\u0631\u0627\u062c",apply:"\u062a\u0637\u0628\u064a\u0642","edit_confirm":"\u0647\u0644 \u062a\u0631\u063a\u0628 \u0641\u0649 \u0625\u0633\u062a\u062e\u062f\u0627\u0645 \u0647\u0630\u0647 \u0627\u0644\u0645\u0633\u0627\u062d\u0647 \u0643\u0640\u0640 WYSIWYG\u061f","invalid_data_number":"{#field} \u064a\u062c\u0628 \u0627\u0646 \u064a\u0643\u0648\u0646 \u0631\u0642\u0645","invalid_data_min":"{#field} \u064a\u062c\u0628 \u0627\u0646 \u062a\u0643\u0648\u0646 \u0631\u0642\u0645 \u0627\u0643\u0628\u0631 \u0645\u0646 {#min}","invalid_data_size":"{#field} \u064a\u062c\u0628 \u0627\u0646 \u062a\u0643\u0648\u0646 \u0631\u0642\u0645 \u0627\u0648 \u0646\u0633\u0628\u0647 \u0645\u0626\u0648\u064a\u0647",value:"(\u0627\u0644\u0642\u064a\u0645\u0629)"},contextmenu:{full:"\u0643\u0627\u0645\u0644",right:"\u0627\u0644\u062d\u0642",center:"\u0645\u0631\u0643\u0632",left:"\u0628\u0642\u064a",align:"\u0645\u062d\u0627\u0630\u0627\u0629"},insertdatetime:{"day_short":"\u0627\u0644\u0623\u062d\u062f,\u0627\u0644\u0627\u062b\u0646\u064a\u0646,\u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621,\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621,\u0627\u0644\u062e\u0645\u064a\u0633,\u0627\u0644\u062c\u0645\u0639\u0629,\u0627\u0644\u0633\u0628\u062a,\u0627\u0644\u0623\u062d\u062f","day_long":"\u0627\u0644\u0623\u062d\u062f \u060c \u0627\u0644\u0627\u062b\u0646\u064a\u0646 \u060c \u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621 \u060c \u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621 \u060c \u0627\u0644\u062e\u0645\u064a\u0633 \u060c \u0627\u0644\u062c\u0645\u0639\u0629 \u060c \u0627\u0644\u0633\u0628\u062a \u060c \u0627\u0644\u0623\u062d\u062f","months_short":"\u064a\u0646\u0627\u064a\u0631,\u0641\u0628\u0631\u0627\u064a\u0631,\u0645\u0627\u0631\u0633,\u0623\u0628\u0631\u064a\u0644,\u0645\u0627\u064a\u0648,\u064a\u0648\u0646\u064a\u0648,\u064a\u0648\u0644\u064a\u0648,\u0623\u063a\u0633\u0637\u0633,\u0633\u0628\u062a\u0645\u0628\u0631,\u0623\u0643\u062a\u0648\u0628\u0631,\u0646\u0648\u0641\u0645\u0628\u0631,\u062f\u064a\u0633\u0645\u0628\u0631","months_long":"\u064a\u0646\u0627\u064a\u0631,\u0641\u0628\u0631\u0627\u064a\u0631,\u0622\u0630\u0627\u0631/\u0645\u0627\u0631\u0633,\u0646\u064a\u0633\u0627\u0646/\u0627\u0628\u0631\u064a\u0644,\u0623\u064a\u0627\u0631/\u0645\u0627\u064a\u0648,\u062d\u0632\u064a\u0631\u0627\u0646/\u064a\u0648\u0646\u064a\u0648,\u062a\u0645\u0648\u0632/\u064a\u0648\u0644\u064a\u0648,\u0622\u0628/\u0627\u063a\u0633\u0637\u0633,\u0623\u064a\u0644\u0648\u0644/\u0633\u0628\u062a\u0645\u0628\u0631,\u0623\u0643\u062a\u0648\u0628\u0631,\u0646\u0648\u0641\u0645\u0628\u0631,\u062f\u064a\u0633\u0645\u0628\u0631","inserttime_desc":"\u0627\u062f\u0631\u0627\u062c \u0627\u0644\u0648\u0642\u062a","insertdate_desc":"\u0627\u062f\u0631\u0627\u062c \u0627\u0644\u062a\u0627\u0631\u064a\u062e","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u0637\u0628\u0627\u0639\u0629"},preview:{"preview_desc":"\u0645\u0639\u0627\u064a\u0646\u0629"},directionality:{"rtl_desc":"\u0627\u0644\u0627\u062a\u062c\u0627\u0647 \u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0644\u0644\u064a\u0633\u0627\u0631","ltr_desc":"\u0627\u0644\u0627\u062a\u062c\u0627\u0647 \u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0627\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646"},layer:{content:"\u0637\u0628\u0642\u0647 \u062c\u062f\u064a\u062f\u0647 ...","absolute_desc":"\u062c\u0639\u0644 \u0627\u0644\u0637\u0628\u0642\u0647 \u062d\u0631\u0647","backward_desc":"\u0646\u0642\u0644 \u0644\u0644\u062e\u0644\u0641","forward_desc":"\u0646\u0642\u0644 \u0644\u0644\u0627\u0645\u0627\u0645","insertlayer_desc":"\u0625\u062f\u0631\u0627\u062c \u0637\u0628\u0642\u0629 \u062c\u062f\u064a\u062f\u0629"},save:{"save_desc":"\u062d\u0641\u0638","cancel_desc":"\u0625\u0644\u063a\u0627\u0621 \u0643\u0627\u0641\u0629 \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a"},nonbreaking:{"nonbreaking_desc":"\u0625\u062f\u0631\u0627\u062c \u062d\u0631\u0641 \u0645\u0633\u0627\u0641\u0629 \u063a\u064a\u0631 \u0645\u0646\u0642\u0633\u0645\u0629"},iespell:{download:"\u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0627\u0645\u0644\u0627\u0626\u0649 \u063a\u064a\u0631 \u0645\u0631\u0643\u0628 \u0647\u0644 \u062a\u0631\u064a\u062f \u062a\u0631\u0643\u064a\u0628\u0647 \u0627\u0644\u0627\u0646","iespell_desc":"\u062a\u0634\u063a\u064a\u0644 \u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0627\u0645\u0644\u0627\u0626\u0649"},advhr:{"advhr_desc":"\u0645\u0633\u0637\u0631\u0647 \u0627\u0641\u0642\u064a\u0647","delta_height":"","delta_width":""},emotions:{"delta_height":"","delta_width":"","emotions_desc":"\u0627\u0644\u0631\u0633\u0648\u0645 \u0627\u0644\u062a\u0639\u0628\u064a\u0631\u064a\u0647"},searchreplace:{"replace_desc":"\u0628\u062d\u062b/\u0627\u0633\u062a\u0628\u062f\u0627\u0644","delta_width":"\u0627\u0644\u062a\u063a\u064a\u0631 \u0641\u0649 \u0627\u0644\u0639\u0631\u0636","delta_height":"\u0627\u0644\u062a\u063a\u064a\u0631 \u0641\u0649 \u0627\u0644\u0625\u0631\u062a\u0641\u0627\u0639","search_desc":"\u0628\u062d\u062b"},advimage:{"image_desc":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0635\u0648\u0631\u0647","delta_width":"","delta_height":""},advlink:{"link_desc":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0631\u0627\u0628\u0637","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u062e\u0627\u0635\u064a\u0647","ins_desc":"\u0627\u0644\u0625\u0636\u0627\u0641\u0647","del_desc":"\u0627\u0644\u062d\u0630\u0641","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode":"\u0644\u0635\u0642 \u0627\u0644\u0622\u0646 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u0646\u0635 \u0627\u0644\u0639\u0627\u062f\u064a. \u0627\u0646\u0642\u0631 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 \u0644\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0627\u0644\u0648\u0636\u0639 \u0644\u0635\u0642 \u0627\u0644\u0639\u0627\u062f\u064a\u0629.","plaintext_mode_sticky":"\u0644\u0635\u0642 \u0627\u0644\u0622\u0646 \u0641\u064a \u0648\u0636\u0639 \u0627\u0644\u0646\u0635 \u0627\u0644\u0639\u0627\u062f\u064a. \u0627\u0646\u0642\u0631 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649 \u0644\u0644\u062a\u0628\u062f\u064a\u0644 \u0625\u0644\u0649 \u0627\u0644\u0648\u0636\u0639 \u0644\u0635\u0642 \u0627\u0644\u0639\u0627\u062f\u064a\u0629. \u0648\u0628\u0639\u062f \u0644\u0635\u0642 \u0634\u064a\u0621 \u064a\u062a\u0645 \u0625\u0631\u062c\u0627\u0639 \u0625\u0644\u0649 \u0648\u0636\u0639 \u0644\u0635\u0642 \u0627\u0644\u0639\u0627\u062f\u064a\u0629","selectall_desc":"\u062d\u062f\u062f \u0643\u0627\u0641\u0629","paste_word_desc":"\u0644\u0635\u0642 \u0645\u0646 \u0648\u0648\u0631\u062f","paste_text_desc":"\u0644\u0635\u0642 \u0643\u0646\u0635 \u0639\u0627\u062f\u064a"},"paste_dlg":{"word_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL+V )","text_linebreaks":"\u0627\u062d\u062a\u0641\u0638 \u0628\u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0623\u0633\u0637\u0631","text_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL+V )"},table:{"merge_cells_delta_height":"0","merge_cells_delta_width":"0","table_delta_height":"0","table_delta_width":"0","cellprops_delta_height":"0","cellprops_delta_width":"0","rowprops_delta_height":"0","rowprops_delta_width":"0",cell:"\u062e\u0644\u064a\u0629",col:"\u0639\u0627\u0645\u0648\u062f",row:"\u0635\u0641",del:"\u062d\u0630\u0641 \u062c\u062f\u0648\u0644","copy_row_desc":"\u0646\u0633\u062e \u0635\u0641 \u0645\u0646 \u062c\u062f\u0648\u0644","cut_row_desc":"\u0642\u0635 \u0635\u0641 \u0645\u0646 \u062c\u062f\u0648\u0644","paste_row_after_desc":"\u0644\u0635\u0642 \u0635\u0641 \u0627\u0644\u062c\u062f\u0648\u0644 \u0628\u0639\u062f","paste_row_before_desc":"\u0644\u0635\u0642 \u0635\u0641 \u0627\u0644\u062c\u062f\u0648\u0644 \u0642\u0628\u0644","props_desc":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u062c\u062f\u0648\u0644","cell_desc":"\u062e\u0635\u0627\u0626\u0635 \u062e\u0644\u064a\u0629 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","row_desc":"\u062e\u0635\u0627\u0626\u0635 \u0635\u0641 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","merge_cells_desc":"\u062f\u0645\u062c \u062e\u0644\u0627\u064a\u0627 \u062c\u062f\u0648\u0644","split_cells_desc":"\u0627\u0646\u0642\u0633\u0627\u0645 \u062e\u0644\u0627\u064a\u0627 \u0627\u0644\u062c\u062f\u0648\u0644 \u0627\u0644\u0645\u062f\u0645\u062c\u0629","delete_col_desc":"\u0625\u0632\u0627\u0644\u0629 \u0639\u0645\u0648\u062f","col_after_desc":"\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0628\u0639\u062f","col_before_desc":"\u0625\u062f\u0631\u0627\u062c \u0639\u0645\u0648\u062f \u0642\u0628\u0644","delete_row_desc":"\u062d\u0630\u0641 \u0635\u0641","row_after_desc":"\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0628\u0639\u062f","row_before_desc":"\u0625\u062f\u0631\u0627\u062c \u0635\u0641 \u0642\u0628\u0644",desc:"\u0625\u062f\u0631\u0627\u062c \u062c\u062f\u0648\u0644 \u062c\u062f\u064a\u062f"},autosave:{"warning_message":"\u0633\u062a\u0641\u0642\u062f \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0641\u0649 \u062d\u0627\u0644\u0629 \u0627\u0644\u0625\u0633\u062a\u0639\u0627\u062f\u0647 \u0645\u0646 \u0627\u0644\u062d\u0641\u0638 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649.\n\n\u0647\u0644 \u0627\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0627\u0646\u0643 \u062a\u0631\u064a\u062f \u0627\u0644\u0625\u0633\u062a\u0639\u0627\u062f\u0647 \u0645\u0646 \u0627\u0644\u062d\u0641\u0638 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649\u061f.","restore_content":"\u0627\u0633\u062a\u0639\u0627\u062f\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0645\u0646 \u0627\u0644\u062d\u0641\u0638 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649.","unload_msg":"\u0633\u064a\u062a\u0645 \u0641\u0642\u062f \u0627\u0644\u062a\u063a\u064a\u064a\u0631\u0627\u062a \u0625\u0630\u0627 \u062a\u0631\u0643\u062a \u0627\u0644\u0635\u0641\u062d\u0647"},fullscreen:{desc:"\u062a\u0628\u062f\u064a\u0644 \u0648\u0636\u0639 \u0645\u0644\u0621 \u0627\u0644\u0634\u0627\u0634\u0629"},media:{"delta_height":"0","delta_width":"0",edit:"\u0639\u062f\u0644 \u0645\u064a\u062f\u064a\u0627",desc:"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0645\u064a\u062f\u064a\u0627"},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"\u0627\u0636\u0641 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0627\u0644\u062c\u0627\u0647\u0632\u0647"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"\u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0625\u0645\u0644\u0627\u0626\u064a Toggle",menu:"\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0645\u062f\u0642\u0642 \u0627\u0644\u0625\u0645\u0644\u0627\u0626\u064a","ignore_word":"\u062a\u062c\u0627\u0647\u0644 \u0627\u0644\u0643\u0644\u0645\u0629","ignore_words":"\u062a\u062c\u0627\u0647\u0644 \u0627\u0644\u0643\u0644",langs:"\u0627\u0644\u0644\u063a\u0627\u062a",wait:"\u0627\u0644\u0631\u062c\u0627\u0621 \u0627\u0644\u0627\u0646\u062a\u0638\u0627\u0631",sug:"\u0627\u0644\u0625\u0642\u062a\u0631\u0627\u062d\u0627\u062a","no_sug":"\u0644\u0627 \u064a\u0648\u062c\u062f \u0625\u0642\u062a\u0631\u0627\u062d\u0627\u062a","no_mpell":"\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0623\u062e\u0637\u0627\u0621 \u0641\u064a \u0627\u0644\u062a\u0647\u062c\u0626\u0629","learn_word":"Learn word"},pagebreak:{desc:"\u0627\u0636\u0641 \u0641\u0627\u0635\u0644 \u0635\u0641\u062d\u0647"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"\u0632\u064a\u062a\u064a \u062f\u0627\u0643\u0646","993300":"\u0628\u0631\u062a\u0642\u0627\u0644 \u0645\u062d\u0631\u0648\u0642","000000":"\u0623\u0633\u0648\u062f","003300":"\u0623\u062e\u0636\u0631 \u062f\u0627\u0643\u0646","003366":"\u0623\u0632\u0631\u0642 \u062f\u0627\u0643\u0646","000080":"\u0628\u062d\u0631\u064a","333399":"\u0646\u064a\u0644\u064a","333333":"\u0631\u0645\u0627\u062f\u064a \u062f\u0627\u0643\u0646 \u062c\u062f\u0627","800000":"\u0643\u0633\u062a\u0646\u0627\u0626\u064a",FF6600:"\u0628\u0631\u062a\u0642\u0627\u0644\u064a","808000":"\u0632\u064a\u062a\u064a","008000":"\u0623\u062e\u0636\u0631","008080":"\u0623\u0632\u0631\u0642 \u0623\u062e\u0636\u0631","0000FF":"\u0623\u0632\u0631\u0642","666699":"\u0631\u0645\u0627\u062f\u064a \u0623\u0632\u0631\u0642","808080":"\u0631\u0645\u0627\u062f\u064a",FF0000:"\u0623\u062d\u0645\u0631",FF9900:"\u0643\u0647\u0631\u0645\u0627\u0646\u064a","99CC00":"\u0623\u0635\u0641\u0631 \u0623\u062e\u0636\u0631","339966":"\u0627\u062e\u0636\u0631 \u0628\u062d\u0631\u064a","33CCCC":"\u0641\u064a\u0631\u0648\u0632\u064a","3366FF":"\u0627\u0644\u0623\u0632\u0631\u0642 \u0627\u0644\u0645\u0644\u0643\u064a","800080":"\u0623\u0631\u062c\u0648\u0627\u0646\u064a","999999":"\u0631\u0645\u0627\u062f\u064a \u0645\u062a\u0648\u0633\u0637",FF00FF:"\u0641\u0648\u0634\u064a",FFCC00:"\u0630\u0647\u0628\u064a",FFFF00:"\u0623\u0635\u0641\u0631","00FF00":"\u0644\u064a\u0645\u0648\u0646\u064a","00FFFF":"\u0645\u0627\u0626\u064a","00CCFF":"\u0633\u0645\u0627\u0648\u064a","993366":"\u0628\u0646\u064a",C0C0C0:"\u0641\u0636\u064a",FF99CC:"\u0632\u0647\u0631\u064a",FFCC99:"\u062e\u0648\u062e\u064a",FFFF99:"\u0623\u0635\u0641\u0631 \u0645\u0636\u064a\u0621",CCFFCC:"\u0623\u062e\u0636\u0631 \u0634\u0627\u062d\u0628",CCFFFF:"\u0633\u0645\u0627\u0648\u064a \u0634\u0627\u062d\u0628","99CCFF":"\u0633\u0645\u0627\u0648\u064a \u0645\u0636\u064a\u0621",CC99FF:"\u0628\u0646\u0641\u0633\u062c\u064a",FFFFFF:"\u0623\u0628\u064a\u0636"},aria:{"rich_text_area":"\u0645\u0633\u0627\u062d\u0629 \u0627\u0644\u062a\u0639\u062f\u064a\u0644"},wordcount:{words:"\u0639\u062f\u062f \u0627\u0644\u0643\u0644\u0645\u0627\u062a :"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/az.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/az.js
new file mode 100644
index 000000000..2de458701
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/az.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({az:{common:{"more_colors":"Daha \u00e7ox r\u0259ng","invalid_data":"X\u0259ta: Q\u0131rm\u0131z\u0131 il\u0259 qeyd edilmi\u015fl\u0259r s\u0259hv daxil edilib.","popup_blocked":"Ba\u011f\u0131\u015flay\u0131n, lakin sizin \u00fcz\u0259 \u00e7\u0131xan p\u0259nc\u0259r\u0259l\u0259riniz funksiya p\u0259nc\u0259r\u0259sinin qar\u015f\u0131s\u0131n\u0131 ald\u0131. G\u0259r\u0259k \u00fcz\u0259 \u00e7\u0131xan p\u0259nc\u0259r\u0259l\u0259rin bloklama nizamlamas\u0131n\u0131 l\u0259\u011fv ed\u0259siniz ki, al\u0259td\u0259n tam istifad\u0259 ed\u0259 bil\u0259siniz.","clipboard_no_support":"Hal-haz\u0131rda b\u0259l\u0259d\u00e7iniz t\u0259r\u0259find\u0259n d\u0259st\u0259kl\u0259nmir. Klaviatura q\u0131saldmas\u0131ndan istifad\u0259 edin.","clipboard_msg":"Kopyalama/\u018flav\u0259 et Mozilla v\u0259 Firefox-da i\u015fl\u0259mir.\nN\u0259 ba\u015f verdiyi haqda daha \u0259trafl\u0131 \u00f6yr\u0259nm\u0259k ist\u0259yirsiniz?","not_set":"-- M\u00fc\u0259yy\u0259n edilm\u0259yib --","class_name":"Sinif",browse:"G\u00f6zd\u0259n ke\u00e7ir",close:"Ba\u011fla",cancel:"L\u0259\u011fv et",update:"Yenil\u0259",insert:"\u018flav\u0259 et",apply:"T\u0259tbiq et","edit_confirm":"Siz haz\u0131rki m\u0259tn sah\u0259si \u00fc\u00e7\u00fcn WYSIWYG rejimi istifad\u0259 etm\u0259k ist\u0259yirsiniz?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Tam",right:"Sa\u011fa",center:"M\u0259rk\u0259z il\u0259",left:"Sola",align:"Tarazla\u015fd\u0131r"},insertdatetime:{"day_short":"B,Be,\u00c7a,\u00c7,Ca,C,\u015e,B","day_long":"Bazar,Bazar ert\u0259si,\u00c7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131,\u00c7\u0259r\u015f\u0259nb\u0259,C\u00fcm\u0259 ax\u015fam\u0131,C\u00fcm\u0259,\u015e\u0259nb\u0259,Bazar","months_short":"Yan,Fev,Mar,Apr,May,\u0130yu,\u0130yl,Avq,Sen,Okt,Noy,Dek","months_long":"Yanvar,Fevral,Mart,Aprel,May,\u0130yun,\u0130yul,Avqust,Sentyabr,Oktyabr,Noyabr,Dekabr","inserttime_desc":"Vaxt \u0259lav\u0259 et","insertdate_desc":"Tarix \u0259lav\u0259 et","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"\u00c7ap et"},preview:{"preview_desc":"\u0130lkin bax\u0131\u015f"},directionality:{"rtl_desc":"\u0130stiqam\u0259t sa\u011fdan-sola","ltr_desc":"\u0130stiqam\u0259t soldan-sa\u011fa"},layer:{content:"Yeni qat...","absolute_desc":"M\u00fctl\u0259q m\u00f6vqeni yand\u0131r/s\u00f6nd\u00fcr","backward_desc":"Geri k\u00f6\u00e7\u00fcr","forward_desc":"\u0130r\u0259li k\u00f6\u00e7\u00fcr","insertlayer_desc":"Yeni qat \u0259lav\u0259 et"},save:{"save_desc":"Yadda saxla","cancel_desc":"B\u00fct\u00fcn d\u0259yi\u015fiklikl\u0259ri l\u0259\u011fv et"},nonbreaking:{"nonbreaking_desc":"Q\u0131r\u0131lmaz bo\u015fluq \u0259lav\u0259 et"},iespell:{download:"ieSpell a\u015fkar edilm\u0259yib. Y\u00fckl\u0259nilsin?","iespell_desc":"Orfoqrafiyan\u0131 yoxla"},advhr:{"advhr_desc":"\u00dcf\u00fcqi x\u0259tt","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smayllar","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Axtar/D\u0259yi\u015f","search_desc":"Axtar","delta_width":"","delta_height":""},advimage:{"image_desc":"\u015e\u0259kli \u0259lav\u0259/redakt\u0259 et","delta_width":"","delta_height":""},advlink:{"link_desc":"Ke\u00e7idi \u0259lav\u0259/redakt\u0259 et","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Atribut \u0259lav\u0259/redakt\u0259 et","ins_desc":"\u018flav\u0259 edilmi\u015f m\u0259tn","del_desc":"Silinmi\u015f m\u0259tn","acronym_desc":"Akronim","abbr_desc":"Abbreviatura","cite_desc":"Sitat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_width":"35",desc:"CSS stili redakt\u0259 et","delta_height":""},paste:{"selectall_desc":"Ham\u0131s\u0131n\u0131 se\u00e7","paste_word_desc":"Word-d\u0259n \u0259lav\u0259 et","paste_text_desc":"Sad\u0259 m\u0259tn kimi \u0259lav\u0259 et","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"P\u0259nc\u0259r\u0259y\u0259 s\u00f6z \u0259lav\u0259 etm\u0259k \u00fc\u00e7\u00fcn CTRL+V klavi\u015f birl\u0259\u015fm\u0259sini istifad\u0259 edin.","text_linebreaks":"S\u0259tr s\u0131nmalar\u0131n\u0131 saxla","text_title":"P\u0259nc\u0259r\u0259y\u0259 m\u0259tn \u0259lav\u0259 etm\u0259k \u00fc\u00e7\u00fcn CTRL+V klavi\u015f birl\u0259\u015fm\u0259sini istifad\u0259 edin."},table:{cell:"\u00d6z\u0259k",col:"S\u00fctun",row:"S\u0259tr",del:"C\u0259dv\u0259li sil","copy_row_desc":"S\u0259tri kopyala","cut_row_desc":"S\u0259tri k\u0259s","paste_row_after_desc":"S\u0259tr c\u0259dv\u0259lini sonra \u0259lav\u0259 et:","paste_row_before_desc":"S\u0259tr c\u0259dv\u0259lini \u0259vv\u0259l \u0259lav\u0259 et:","props_desc":"C\u0259dv\u0259l x\u00fcsusiyy\u0259tl\u0259ri","cell_desc":"\u00d6z\u0259k x\u00fcsusiyy\u0259tl\u0259ri","row_desc":"S\u0259tr x\u00fcsusiyy\u0259tl\u0259ri","merge_cells_desc":"\u00d6z\u0259kl\u0259ri s\u00fcz","split_cells_desc":"S\u00fcz\u00fclm\u00fc\u015f \u00f6z\u0259kl\u0259ri ay\u0131r","delete_col_desc":"S\u00fctunu sil","col_after_desc":"S\u00fctunu sonra \u0259lav\u0259 et:","col_before_desc":"S\u00fctunu \u0259vv\u0259l \u0259lav\u0259 et:","delete_row_desc":"S\u0259tri sil","row_after_desc":"S\u0259tri sonra \u0259vv\u0259l et:","row_before_desc":"S\u0259tri \u0259vv\u0259l \u0259lav\u0259 et:",desc:"Yeni c\u0259dv\u0259l \u0259lav\u0259 et","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u018fg\u0259r s\u0259hif\u0259d\u0259n gets\u0259niz b\u00fct\u00fcn d\u0259yi\u015fiklikl\u0259r itiril\u0259c\u0259k.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Tamekran rejimini yand\u0131r/s\u00f6nd\u00fcr"},media:{edit:"Mediya-obyekti redakt\u0259 et",desc:"mediya-obyekti \u0259lav\u0259/redakt\u0259 et","delta_height":"","delta_width":""},fullpage:{desc:"S\u0259n\u0259d nizamlamalar\u0131","delta_width":"","delta_height":""},template:{desc:"\u018fvv\u0259ld\u0259n m\u00fc\u0259yy\u0259n edil\u0259n \u015fablon daxil et"},visualchars:{desc:"Vizual idar\u0259 xarakterl\u0259rini yand\u0131r/s\u00f6nd\u00fcr."},spellchecker:{desc:"Orfoqraf\u0131 yoxla",menu:"Orfoqrafiya nizamlamas\u0131n\u0131","ignore_word":"S\u00f6zl\u00fc iqnor et","ignore_words":"H\u0259r \u015feyi iqnor et",langs:"Dill\u0259r",wait:"Z\u0259hm\u0259t olmasa, g\u00f6zl\u0259yin...",sug:"Variantlar","no_sug":"Variantlar yoxdur","no_mpell":"X\u0259ta a\u015fkar edilm\u0259di.","learn_word":"Learn word"},pagebreak:{desc:"S\u0259hif\u0259 b\u00f6l\u0259nini \u0259lav\u0259 et."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/be.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/be.js
new file mode 100644
index 000000000..562beeaad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/be.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({be:{common:{"more_colors":"\u0411\u043e\u043b\u044c\u0448 \u043a\u043e\u043b\u0435\u0440\u0430\u045e...","invalid_data":"\u041f\u0430\u043c\u044b\u043b\u043a\u0430: \u0410\u0434\u0437\u043d\u0430\u0447\u0430\u043d\u044b\u044f \u0447\u044b\u0440\u0432\u043e\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u044d\u043d\u043d\u0456 \u045e\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u043d\u044f\u043f\u0440\u0430\u0432\u0456\u043b\u044c\u043d\u0430.","popup_blocked":"\u041f\u0440\u0430\u0431\u0430\u0447\u0446\u0435, \u0430\u043b\u0435 \u0432\u0430\u0448 \u0431\u043b\u0430\u043a\u0456\u0440\u043e\u045e\u0448\u0447\u044b\u043a \u0443\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0447\u044b\u0445 \u0432\u043e\u043a\u043d\u0430\u045e \u0437\u0430\u0431\u043b\u0430\u043a\u0456\u0440\u0430\u0432\u0430\u045e \u0430\u043a\u043d\u043e, \u044f\u043a\u043e\u0435 \u043f\u0440\u0430\u0434\u0441\u0442\u0430\u045e\u043b\u044f\u0435 \u043d\u0435\u0430\u0431\u0445\u043e\u0434\u043d\u044b\u044f \u0444\u0443\u043d\u043a\u0446\u044b\u0456. \u0412\u0430\u043c \u0442\u0440\u044d\u0431\u0430 \u0430\u0434\u043a\u043b\u044e\u0447\u044b\u0446\u044c \u0431\u043b\u0430\u043a\u0456\u0440\u0430\u0432\u0430\u043d\u043d\u0435 \u045e\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0447\u044b\u0445 \u0432\u043e\u043a\u043d\u0430\u045e \u043d\u0430 \u0433\u044d\u0442\u044b\u043c \u0441\u0430\u0439\u0446\u0435, \u043a\u0430\u0431 \u0443 \u0446\u0430\u043b\u043a\u0430\u043c \u0441\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0446\u0446\u0430 \u0433\u044d\u0442\u0430\u0439 \u043f\u0440\u044b\u043b\u0430\u0434\u0430\u0439.","clipboard_no_support":"\u0423 \u0446\u044f\u043f\u0435\u0440\u0430\u0448\u043d\u0456 \u0447\u0430\u0441 \u043d\u0435 \u043f\u0430\u0434\u0442\u0440\u044b\u043c\u043b\u0456\u0432\u0430\u0435\u0446\u0446\u0430 \u0432\u0430\u0448\u044b\u043c \u0431\u0440\u0430\u045e\u0437\u0435\u0440\u0430\u043c, \u0432\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0439\u0446\u0435 \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u0456 \u043a\u043b\u0430\u0432\u0456\u0448 \u0437\u0430\u043c\u0435\u0441\u0442 \u0433\u044d\u0442\u0430\u0433\u0430.","clipboard_msg":"\u041a\u0430\u043f\u0456\u0440\u0430\u0432\u0430\u043d\u043d\u0435, \u0432\u044b\u0440\u0430\u0437\u043a\u0430 \u0456 \u0443\u0441\u0442\u0430\u045e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0430\u0446\u0443\u044e\u0446\u044c \u045e Mozilla \u0456 Firefox. \u0416\u0430\u0434\u0430\u0435\u0446\u0435 \u0430\u0442\u0440\u044b\u043c\u0430\u0446\u044c \u0431\u043e\u043b\u044c\u0448 \u043f\u0430\u0434\u0440\u0430\u0431\u044f\u0437\u043d\u0443\u044e \u0456\u043d\u0444\u0430\u0440\u043c\u0430\u0446\u044b\u044e?","not_set":"-- \u041d\u0435 \u045e\u0441\u0442\u0430\u043b\u044f\u0432\u0430\u043d\u0430 --","class_name":"\u041a\u043b\u0430\u0441",browse:"\u041f\u0440\u0430\u0433\u043b\u0435\u0434\u0437\u0435\u0446\u044c",close:"\u0417\u0430\u0447\u044b\u043d\u0456\u0446\u044c",cancel:"\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c",update:"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c",insert:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c",apply:"\u0423\u0436\u044b\u0446\u044c","edit_confirm":"\u0412\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0432\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0446\u044c \u0434\u043b\u044f \u0433\u044d\u0442\u0430\u0439 \u0442\u044d\u043a\u0441\u0442\u0430\u0432\u0430\u0439 \u0432\u043e\u0431\u043b\u0430\u0441\u0446\u0456 \u0440\u044d\u0436\u044b\u043c WYSIWYG?","invalid_data_number":"{#field} \u043f\u0430\u0437\u043d\u0430\u0447\u0446\u0435 \u043b\u0456\u043a","invalid_data_min":"{#field} \u043f\u0430\u0437\u043d\u0430\u0447\u0446\u0435 \u043b\u0456\u043a \u0431\u043e\u043b\u044c\u0448\u044b \u0437\u0430 {#min}","invalid_data_size":"{#field} \u043f\u0430\u0437\u043d\u0430\u0447\u0446\u0435 \u043b\u0456\u043a \u0430\u0431\u043e \u043f\u0440\u0430\u0446\u044d\u043d\u0442",value:"(\u0437\u043d\u0430\u0447\u044d\u043d\u043d\u0435)"},contextmenu:{full:"\u041f\u0430 \u0448\u044b\u0440\u044b\u043d\u0456",right:"\u041f\u0430 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u0440\u0430\u0456",center:"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b",left:"\u041f\u0430 \u043b\u0435\u0432\u044b\u043c \u043a\u0440\u0430\u0456",align:"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435"},insertdatetime:{"day_short":"\u041d\u0434,\u041f\u043d,\u0410\u0442,\u0421\u0440,\u0427\u0446,\u041f\u0442,\u0421\u0431,\u041d\u0434","day_long":"\u041d\u044f\u0434\u0437\u0435\u043b\u044f,\u041f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a,\u0410\u045e\u0442\u043e\u0440\u0430\u043a,\u0421\u0435\u0440\u0430\u0434\u0430,\u0427\u0430\u0446\u0432\u0435\u0440,\u041f\u044f\u0442\u043d\u0456\u0446\u0430,\u0421\u0443\u0431\u043e\u0442\u0430,\u041d\u044f\u0434\u0437\u0435\u043b\u044f","months_short":"\u0421\u0442\u0443,\u041b\u044e\u0442,\u0421\u0430\u043a,\u041a\u0440\u0430,\u041c\u0430\u0439,\u0427\u044d\u0440,\u041b\u0456\u043f,\u0410\u045e\u0433,\u0412\u0435\u0440,\u041a\u0430\u0441,\u041b\u0456\u0441,\u0421\u043d\u0435","months_long":"\u0421\u0442\u0443\u0434\u0437\u0435\u043d\u044c,\u041b\u044e\u0442\u044b,\u0421\u0430\u043a\u0430\u0432\u0456\u043a,\u041a\u0440\u0430\u0441\u0430\u0432\u0456\u043a,\u041c\u0430\u0439,\u0427\u044d\u0440\u0432\u0435\u043d\u044c,\u041b\u0456\u043f\u0435\u043d\u044c,\u0410\u045e\u0433\u0443\u0441\u0442,\u0412\u0435\u0440\u0430\u0441\u0435\u043d\u044c,\u041a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a,\u041b\u0456\u0441\u0442\u0430\u043f\u0430\u0434,\u0421\u043d\u0435\u0436\u0430\u043d\u044c","inserttime_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0447\u0430\u0441","insertdate_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0434\u0430\u0442\u0443","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"\u0414\u0440\u0443\u043a"},preview:{"preview_desc":"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u0456 \u043f\u0440\u0430\u0433\u043b\u044f\u0434"},directionality:{"rtl_desc":"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430","ltr_desc":"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u0437\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430"},layer:{content:"\u041d\u043e\u0432\u044b \u043f\u043b\u0430\u0441\u0442\u2026","absolute_desc":"\u0410\u0431\u0441\u0430\u043b\u044e\u0442\u043d\u0430\u0435 \u043f\u0430\u0437\u0456\u0446\u044b\u044f\u043d\u0430\u0432\u0430\u043d\u043d\u0435","backward_desc":"\u041f\u0435\u0440\u0430\u043d\u0435\u0441\u0446\u0456 \u043d\u0430\u0437\u0430\u0434","forward_desc":"\u041f\u0435\u0440\u0430\u043d\u0435\u0441\u0446\u0456 \u043d\u0430\u043f\u0435\u0440\u0430\u0434","insertlayer_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u043d\u043e\u0432\u044b \u043f\u043b\u0430\u0441\u0442"},save:{"save_desc":"\u0417\u0430\u0445\u0430\u0432\u0430\u0446\u044c","cancel_desc":"\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c \u0443\u0441\u0435 \u0437\u043c\u0435\u043d\u044b"},nonbreaking:{"nonbreaking_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u043d\u0435\u043f\u0430\u0440\u044b\u045e\u043d\u044b \u043f\u0440\u0430\u0431\u0435\u043b"},iespell:{download:"ieSpell \u043d\u0435 \u0432\u044b\u044f\u045e\u043b\u0435\u043d\u044b. \u0423\u0441\u0442\u0430\u043b\u044f\u0432\u0430\u0446\u044c?","iespell_desc":"\u041f\u0440\u0430\u0432\u0435\u0440\u044b\u0446\u044c \u0430\u0440\u0444\u0430\u0433\u0440\u0430\u0444\u0456\u044e"},advhr:{"advhr_desc":"\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043b\u0456\u043d\u0456\u044f","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0421\u043c\u0430\u0439\u043b\u0456\u043a\u0456","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456/\u0417\u0430\u043c\u044f\u043d\u0456\u0446\u044c","search_desc":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0430\u043b\u044e\u043d\u0430\u043a","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","delta_height":""},xhtmlxtras:{"attribs_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0430\u0442\u0440\u044b\u0431\u0443\u0442\u044b","ins_desc":"\u0414\u0430\u0434\u0430\u0434\u0437\u0435\u043d\u044b \u0442\u044d\u043a\u0441\u0442","del_desc":"\u0412\u044b\u0434\u0430\u043b\u0435\u043d\u044b \u0442\u044d\u043a\u0441\u0442","acronym_desc":"\u0410\u043a\u0440\u043e\u043d\u0456\u043c","abbr_desc":"\u0410\u0431\u0440\u044d\u0432\u0456\u044f\u0442\u0443\u0440\u0430","cite_desc":"\u0426\u044b\u0442\u0430\u0432\u0430\u043d\u043d\u0435","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_width":"35",desc:"\u0420\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u0442\u044b\u043b\u044c CSS","delta_height":""},paste:{"plaintext_mode":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0437\u0430\u0440\u0430\u0437 \u0443 \u0440\u044d\u0436\u044b\u043c\u0435 \u0437\u0432\u044b\u0447\u0430\u0439\u043d\u0430\u0433\u0430 \u0442\u044d\u043a\u0441\u0442\u0443. \u041d\u0430\u0446\u0456\u0441\u043d\u0456\u0446\u0435 \u0433\u044d\u0442\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0430\u043a\u043b\u044e\u0447\u044d\u043d\u043d\u044f \u043d\u0430\u0437\u0430\u0434 \u0443 \u0437\u0432\u044b\u0447\u0430\u0439\u043d\u044b \u0440\u044d\u0436\u044b\u043c \u045e\u0441\u0442\u0430\u045e\u043a\u0456.","plaintext_mode_sticky":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0437\u0430\u0440\u0430\u0437 \u0443 \u0440\u044d\u0436\u044b\u043c\u0435 \u0437\u0432\u044b\u0447\u0430\u0439\u043d\u0430\u0433\u0430 \u0442\u044d\u043a\u0441\u0442\u0443. \u041d\u0430\u0446\u0456\u0441\u043d\u0456\u0446\u0435 \u0433\u044d\u0442\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0430\u043a\u043b\u044e\u0447\u044d\u043d\u043d\u044f \u043d\u0430\u0437\u0430\u0434 \u0443 \u0437\u0432\u044b\u0447\u0430\u0439\u043d\u044b \u0440\u044d\u0436\u044b\u043c \u045e\u0441\u0442\u0430\u045e\u043a\u0456. \u041f\u0430\u0441\u043b\u044f \u045e\u0441\u0442\u0430\u045e\u043a\u0456 \u0412\u044b \u0432\u0435\u0440\u043d\u0435\u0446\u0435\u0441\u044f \u045e \u0437\u0432\u044b\u0447\u0430\u0439\u043d\u044b \u0440\u044d\u0436\u044b\u043c \u045e\u0441\u0442\u0430\u045e\u043a\u0456.","selectall_desc":"\u0412\u044b\u043b\u0443\u0447\u044b\u0446\u044c \u0443\u0441\u0451","paste_word_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0437 Word","paste_text_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u044f\u043a \u043f\u0440\u043e\u0441\u0442\u044b \u0442\u044d\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0439\u0446\u0435 \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u0435 \u043a\u043b\u0430\u0432\u0456\u0448 CTRL+V \u043a\u0430\u0431 \u0443\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0442\u044d\u043a\u0441\u0442 \u0443 \u0430\u043a\u043d\u043e.","text_linebreaks":"\u0417\u0430\u0445\u043e\u045e\u0432\u0430\u0446\u044c \u043f\u0430\u0440\u044b\u0432\u044b \u0440\u0430\u0434\u043a\u043e\u045e","text_title":"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0439\u0446\u0435 \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u0435 \u043a\u043b\u0430\u0432\u0456\u0448 CTRL+V \u043a\u0430\u0431 \u0443\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0442\u044d\u043a\u0441\u0442 \u0443 \u0430\u043a\u043d\u043e."},table:{cell:"\u042f\u0447\u044d\u0439\u043a\u0430",col:"\u0421\u043b\u0443\u043f\u043e\u043a",row:"\u0420\u0430\u0434\u043e\u043a",del:"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0442\u0430\u0431\u043b\u0456\u0446\u0443","copy_row_desc":"\u041a\u0430\u043f\u0456\u0440\u0430\u0432\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a","cut_row_desc":"\u0412\u044b\u0440\u0430\u0437\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a","paste_row_after_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u043d\u0456\u0437\u0443","paste_row_before_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0437\u0432\u0435\u0440\u0445\u0443","props_desc":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0442\u0430\u0431\u043b\u0456\u0446\u044b","cell_desc":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u044f\u0447\u044d\u0439\u043a\u0456","row_desc":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0440\u0430\u0434\u043a\u0430","merge_cells_desc":"\u0421\u043a\u043b\u0435\u0456\u0446\u044c \u044f\u0447\u044d\u0439\u043a\u0456","split_cells_desc":"\u0420\u0430\u0437\u0431\u0456\u0446\u044c \u044f\u0447\u044d\u0439\u043a\u0443","delete_col_desc":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a","col_after_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a \u043f\u0430\u0441\u043b\u044f","col_before_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0441\u043b\u0443\u043f\u043e\u043a \u043f\u0435\u0440\u0430\u0434","delete_row_desc":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a","row_after_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u043f\u0430\u0441\u043b\u044f","row_before_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u043f\u0435\u0440\u0430\u0434",desc:"\u0423\u0441\u0442\u0430\u045e\u043b\u044f\u0435 \u043d\u043e\u0432\u0443\u044e \u0442\u0430\u0431\u043b\u0456\u0446\u0443","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u0423\u0441\u0435 \u0437\u0440\u043e\u0431\u043b\u0435\u043d\u044b\u044f \u0437\u043c\u0435\u043d\u044b \u0431\u0443\u0434\u0443\u0446\u044c \u0437\u0433\u0443\u0431\u043b\u0435\u043d\u044b\u044f.\n\n\u041f\u0440\u0430\u0446\u044f\u0433\u043d\u0443\u0446\u044c \u0430\u0434\u043d\u0430\u045e\u043b\u0435\u043d\u043d\u0435 \u0430\u045e\u0442\u0430\u043c\u0430\u0442\u044b\u0447\u043d\u0430\u0433\u0430 \u0437\u0430\u0445\u0430\u0432\u0430\u043d\u043d\u044f?","restore_content":"\u0410\u0434\u043d\u0430\u0432\u0456\u0446\u044c \u0430\u045e\u0442\u0430\u043c\u0430\u0442\u044b\u0447\u043d\u0430\u0435 \u0437\u0430\u0445\u0430\u0432\u0430\u043d\u043d\u0435","unload_msg":"\u0417\u0430\u043d\u0435\u0441\u0435\u043d\u044b\u044f \u0437\u043c\u0435\u043d\u044b \u0431\u0443\u0434\u0443\u0446\u044c \u0441\u0442\u0440\u0430\u0447\u0430\u043d\u044b\u044f, \u043a\u0430\u043b\u0456 \u0412\u044b \u0441\u044b\u0434\u0437\u0435\u0446\u0435 \u0437 \u0433\u044d\u0442\u0430\u0439 \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0456."},fullscreen:{desc:"\u0423\u043b\u0443\u0447\u044b\u0446\u044c/\u0432\u044b\u043a\u043b\u044e\u0447\u044b\u0446\u044c \u043f\u043e\u045e\u043d\u0430\u044d\u043a\u0440\u0430\u043d\u043d\u044b \u0440\u044d\u0436\u044b\u043c"},media:{edit:"\u0420\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0435\u0434\u044b\u044f-\u0430\u0431\'\u0435\u043a\u0442",desc:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0435\u0434\u044b\u044f-\u0430\u0431\'\u0435\u043a\u0442","delta_height":"","delta_width":""},fullpage:{desc:"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0434\u0430\u043a\u0443\u043c\u0435\u043d\u0442\u0443","delta_width":"","delta_height":""},template:{desc:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0448\u0430\u0431\u043b\u043e\u043d"},visualchars:{desc:"\u0423\u0441\u0435 \u0437\u043d\u0430\u043a\u0456"},spellchecker:{desc:"\u041f\u0440\u0430\u0432\u0435\u0440\u044b\u0446\u044c \u0430\u0440\u0444\u0430\u0433\u0440\u0430\u0444\u0456\u044e",menu:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u0430\u0432\u0435\u0440\u043a\u0456 \u0430\u0440\u0444\u0430\u0433\u0440\u0430\u0444\u0456\u0456","ignore_word":"\u0406\u0433\u043d\u0430\u0440\u0430\u0432\u0430\u0446\u044c \u0441\u043b\u043e\u0432\u0430","ignore_words":"\u0406\u0433\u043d\u0430\u0440\u0430\u0432\u0430\u0446\u044c \u0443\u0441\u0451",langs:"\u041c\u043e\u0432\u044b",wait:"\u041a\u0430\u043b\u0456 \u043b\u0430\u0441\u043a\u0430, \u043f\u0430\u0447\u0430\u043a\u0430\u0439\u0446\u0435...",sug:"\u0412\u0430\u0440\u044b\u044f\u043d\u0442\u044b","no_sug":"\u041d\u044f\u043c\u0430 \u0432\u0430\u0440\u044b\u044f\u043d\u0442\u0430\u045e","no_mpell":"\u041f\u0430\u043c\u044b\u043b\u0430\u043a \u043d\u0435 \u0432\u044b\u044f\u045e\u043b\u0435\u043d\u0430.","learn_word":"\u0417\u0430\u043f\u043e\u043c\u043d\u0456\u0446\u044c \u0441\u043b\u043e\u0432\u0430"},pagebreak:{desc:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0440\u0430\u0437\u0440\u044b\u045e \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0456."},advlist:{types:"\u0421\u0456\u043c\u0432\u0430\u043b\u044b",def:"C\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u044f","lower_alpha":"\u041c\u0430\u043b\u044b\u044f \u043b\u0430\u0446\u0456\u043d\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b","lower_greek":"\u041c\u0430\u043b\u044b\u044f \u0433\u0440\u044d\u0447\u0430\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b","lower_roman":"\u041c\u0430\u043b\u044b\u044f \u0440\u044b\u043c\u0441\u043a\u0456\u044f \u043b\u0456\u0447\u0431\u044b","upper_alpha":"\u0412\u044f\u043b\u0456\u043a\u0456\u044f \u043b\u0430\u0446\u0456\u043d\u0441\u043a\u0456\u044f \u043b\u0456\u0442\u0430\u0440\u044b","upper_roman":"\u0412\u044f\u043b\u0456\u043a\u0456\u044f \u0440\u044b\u043c\u0441\u043a\u0456\u044f \u043b\u0456\u0447\u0431\u044b",circle:"\u0410\u043a\u0440\u0443\u0436\u043d\u0430\u0441\u0446\u044c",disc:"\u041a\u0440\u0443\u0433",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442"},colors:{"333300":"\u0426\u0451\u043c\u043d\u0430-\u0430\u043b\u0456\u045e\u043a\u0430\u0432\u044b","993300":"\u0426\u0430\u0433\u043b\u044f\u043d\u044b","000000":"\u0427\u043e\u0440\u043d\u044b","003300":"\u0426\u0451\u043c\u043d\u0430-\u0437\u044f\u043b\u0451\u043d\u044b","003366":"\u0426\u0451\u043c\u043d\u0430-\u0431\u043b\u0430\u043a\u0456\u0442\u043d\u044b","000080":"\u0426\u0451\u043c\u043d\u0430-\u0441\u0456\u043d\u0456","333399":"\u0406\u043d\u0434\u044b\u0433\u0430","333333":"\u0412\u0435\u043b\u044c\u043c\u0456 \u0446\u0451\u043c\u043d\u0430-\u0448\u044d\u0440\u044b","800000":"\u0426\u0451\u043c\u043d\u0430-\u0431\u0430\u0440\u0434\u043e\u0432\u044b",FF6600:"\u0410\u0440\u0430\u043d\u0436\u0430\u0432\u044b","808000":"\u0410\u043b\u0456\u045e\u043a\u0430\u0432\u044b","008000":"\u0417\u044f\u043b\u0451\u043d\u044b","008080":"\u0421\u0456\u043d\u0435-\u0437\u044f\u043b\u0451\u043d\u044b","0000FF":"\u0421\u0456\u043d\u0456","666699":"\u0428\u044d\u0440\u0430-\u0431\u043b\u0430\u043a\u0456\u0442\u043d\u044b","808080":"\u0428\u044d\u0440\u044b",FF0000:"\u0427\u044b\u0440\u0432\u043e\u043d\u044b",FF9900:"\u0411\u0443\u0440\u0448\u0442\u044b\u043d\u0430\u0432\u044b","99CC00":"\u0416\u043e\u045e\u0442\u0430-\u0437\u044f\u043b\u0451\u043d\u044b","339966":"\u0411\u0456\u0440\u0443\u0437\u043e\u0432\u044b","33CCCC":"\u0411\u043b\u0430\u043a\u0456\u0442\u043d\u044b","3366FF":"\u041a\u0430\u0440\u0430\u043b\u0435\u045e\u0441\u043a\u0456 \u0441\u0456\u043d\u0456","800080":"\u0424\u0456\u044f\u043b\u0435\u0442\u0430\u0432\u044b","999999":"\u041a\u0432\u0430\u0440\u0446\u0430\u0432\u044b",FF00FF:"\u041f\u0443\u0440\u043f\u0443\u0440\u043e\u0432\u044b",FFCC00:"\u0417\u0430\u043b\u0430\u0442\u044b",FFFF00:"\u0416\u043e\u045e\u0442\u044b","00FF00":"\u0417\u044f\u043b\u0451\u043d\u044b","00FFFF":"\u041a\u043e\u043b\u0435\u0440\u0443 \u0432\u0430\u0434\u044b","00CCFF":"\u041d\u044f\u0431\u0435\u0441\u043d\u044b","993366":"\u0420\u0443\u0436\u043e\u0432\u0430-\u043b\u0456\u043b\u043e\u0432\u044b",C0C0C0:"\u0421\u0440\u044d\u0431\u043d\u044b",FF99CC:"\u0420\u0443\u0436\u043e\u0432\u044b",FFCC99:"\u0410\u0440\u0430\u043d\u0436\u0430\u0432\u0430-\u043f\u0435\u0440\u0441\u0456\u043a\u0430\u0432\u044b",FFFF99:"\u0421\u0432\u0435\u0442\u043b\u0430-\u0436\u043e\u045e\u0442\u044b",CCFFCC:"\u0411\u043b\u0435\u0434\u043d\u0430-\u0437\u044f\u043b\u0451\u043d\u044b",CCFFFF:"\u0411\u043b\u0435\u0434\u043d\u0430-\u0441\u0456\u043d\u0456","99CCFF":"\u0421\u0432\u0435\u0442\u043b\u0430-\u043d\u044f\u0431\u0435\u0441\u043d\u044b",CC99FF:"\u0424\u0456\u044f\u043b\u043a\u0430\u0432\u044b",FFFFFF:"\u0411\u0435\u043b\u044b"},aria:{"rich_text_area":"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u044b \u0440\u044d\u0434\u0430\u043a\u0442\u0430\u0440"},wordcount:{words:"\u0421\u043b\u043e\u0432\u0430\u045e:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bg.js
new file mode 100644
index 000000000..d1882693a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({bg:{common:{"more_colors":"\u041e\u0449\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u0435","invalid_data":"\u0413\u0440\u0435\u0448\u043a\u0430: \u0412\u044a\u0432\u0435\u0434\u0435\u043d\u0438 \u0441\u0430 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0438, \u0442\u0435 \u0441\u0430 \u043c\u0430\u0440\u043a\u0438\u0440\u0430\u043d\u0438 \u0432 \u0447\u0435\u0440\u0432\u0435\u043d\u043e.","popup_blocked":"\u0421\u044a\u0436\u0430\u043b\u044f\u0432\u0430\u043c\u0435, \u043d\u043e \u0437\u0430\u0431\u0435\u043b\u044f\u0437\u0430\u0445\u043c\u0435, \u0447\u0435 \u0432\u0430\u0448\u0438\u044f\u0442 popup-blocker \u0435 \u0441\u043f\u0440\u044f\u043b \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 \u043a\u043e\u0439\u0442\u043e \u0441\u0435 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430 \u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0430\u0442\u0430. \u0429\u0435 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0438\u0437\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u043f\u043e\u043f\u044a\u043f\u0438 \u0437\u0430 \u0442\u043e\u0437\u0438 \u0441\u0430\u0439\u0442 \u0437\u0430 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 \u043f\u044a\u043b\u043d\u0430\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u043e\u0441\u0442.","clipboard_no_support":"\u041d\u0435 \u0441\u0435 \u043f\u043e\u0434\u0434\u044a\u0440\u0436\u0430 \u043e\u0442 \u0432\u0430\u0448\u0438\u044f\u0442 \u0431\u0440\u0430\u0443\u0437\u044a\u0440, \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u043d\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0438.","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435/\u041e\u0442\u0440\u044f\u0437\u0432\u0430\u043d\u0435/\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0435 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u043d\u043e \u043f\u043e\u0434 Mozilla \u0438 Firefox.\n\u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430?","not_set":"-- \u041d\u0435\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0435\u043d\u043e --","class_name":"\u041a\u043b\u0430\u0441",browse:"Browse",close:"\u0417\u0430\u0442\u0432\u043e\u0440\u0438",cancel:"\u041e\u0442\u043a\u0430\u0436\u0438",update:"\u041e\u0431\u043d\u043e\u0432\u0438",insert:"\u0412\u043c\u044a\u043a\u043d\u0438",apply:"\u041f\u043e\u0442\u0432\u044a\u0440\u0434\u0438","edit_confirm":"\u0418\u0441\u043a\u0430\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0442\u0435 WYSIWYG \u0440\u0435\u0436\u0438\u043c \u0437\u0430 \u0442\u043e\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e \u043f\u043e\u043b\u0435?","invalid_data_number":"{#field} \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0447\u0438\u0441\u043b\u043e","invalid_data_min":"{#field} \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u043e-\u0433\u043e\u043b\u044f\u043c\u043e \u043e\u0442 {#min}","invalid_data_size":"{#field} \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0435 \u0447\u0438\u0441\u043b\u043e \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442",value:"(\u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442)"},contextmenu:{full:"\u0414\u0432\u0443\u0441\u0442\u0440\u0430\u043d\u043d\u043e",right:"\u0414\u044f\u0441\u043d\u043e",center:"\u0426\u0435\u043d\u0442\u044a\u0440",left:"\u041b\u044f\u0432\u043e",align:"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435"},insertdatetime:{"day_short":"\u041d\u0434,\u041f\u043d,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041f\u0442,\u0421\u0431,\u041d\u0434","day_long":"\u041d\u0435\u0434\u0435\u043b\u044f,\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a,\u0412\u0442\u043e\u0440\u043d\u0438\u043a,\u0421\u0440\u044f\u0434\u0430,\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a,\u041f\u0435\u0442\u044a\u043a,\u0421\u044a\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0435\u043b\u044f","months_short":"\u042f\u043d\u0443,\u0424\u0435\u0432,\u041c\u0430\u0440,\u0410\u043f\u0440,\u041c\u0430\u0439,\u042e\u043d\u0438,\u042e\u043b\u0438,\u0410\u0432\u0433,\u0421\u0435\u043f,\u041e\u043a\u0442,\u041d\u043e\u0435,\u0414\u0435\u043a","months_long":"\u042f\u043d\u0443\u0430\u0440\u0438,\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438,\u041c\u0430\u0440\u0442,\u0410\u043f\u0440\u0438\u043b,\u041c\u0430\u0439,\u042e\u043d\u0438,\u042e\u043b\u0438,\u0410\u0432\u0433\u0443\u0441\u0442,\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438,\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438,\u041d\u043e\u0435\u043c\u0432\u0440\u0438,\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438","inserttime_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0432\u0440\u0435\u043c\u0435","insertdate_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0434\u0430\u0442\u0430","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u041e\u0442\u043f\u0435\u0447\u0430\u0442\u0430\u0439"},preview:{"preview_desc":"\u041f\u0440\u0435\u0433\u043b\u0435\u0434"},directionality:{"rtl_desc":"\u041f\u043e\u0441\u043e\u043a\u0430 \u043e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e","ltr_desc":"\u041f\u043e\u0441\u043e\u043a\u0430 \u043e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e"},layer:{content:"\u041d\u043e\u0432 \u0441\u043b\u043e\u0439...","absolute_desc":"\u0412\u043a\u043b\u044e\u0447\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0430\u043d\u0435","backward_desc":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043e\u0442\u0437\u0430\u0434","forward_desc":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043e\u0442\u043f\u0440\u0435\u0434","insertlayer_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u043d\u043e\u0432 \u0441\u043b\u043e\u0439"},save:{"save_desc":"\u0417\u0430\u043f\u0438\u0448\u0438","cancel_desc":"\u041e\u0442\u043a\u0430\u0436\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438"},nonbreaking:{"nonbreaking_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u043d\u0435\u043f\u0440\u0435\u043a\u044a\u0441\u0432\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b"},iespell:{download:"ieSpell \u043d\u0435 \u0435 \u043e\u0442\u043a\u0440\u0438\u0442. \u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0433\u043e \u0438\u043d\u0441\u0442\u0430\u043b\u0438\u0440\u0430\u0442\u0435 \u0441\u0435\u0433\u0430?","iespell_desc":"\u041f\u0440\u043e\u0432\u0435\u0440\u0438 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430"},advhr:{"advhr_desc":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043b\u0438\u043d\u0438\u044f","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0415\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0422\u044a\u0440\u0441\u0438/\u0417\u0430\u043c\u0435\u0441\u0442\u0438","search_desc":"\u0422\u044a\u0440\u0441\u0438","delta_width":"","delta_height":""},advimage:{"image_desc":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","delta_width":"","delta_height":""},advlink:{"link_desc":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","ins_desc":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435","del_desc":"\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435","acronym_desc":"\u0410\u043a\u0440\u043e\u043d\u0438\u043c","abbr_desc":"\u0421\u044a\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435","cite_desc":"\u0426\u0438\u0442\u0430\u0442","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 CSS \u0441\u0442\u0438\u043b","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e\u0442\u043e \u0435 \u0432 \u0438\u0437\u0447\u0438\u0441\u0442\u0435\u043d \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0440\u0435\u0436\u0438\u043c. \u0429\u0440\u0430\u043a\u043d\u0435\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e, \u0437\u0430 \u0434\u0430 \u043f\u0440\u0435\u043c\u0438\u043d\u0435\u0442\u0435 \u0432 \u043e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043d\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435.","plaintext_mode_sticky":"\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e\u0442\u043e \u0435 \u0432 \u0438\u0437\u0447\u0438\u0441\u0442\u0435\u043d \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0440\u0435\u0436\u0438\u043c. \u0429\u0440\u0430\u043a\u043d\u0435\u0442\u0435 \u043e\u0442\u043d\u043e\u0432\u043e, \u0437\u0430 \u0434\u0430 \u043f\u0440\u0435\u043c\u0438\u043d\u0435\u0442\u0435 \u0432 \u043e\u0431\u0438\u043a\u043d\u043e\u0432\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u043d\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435. \u0421\u043b\u0435\u0434 \u043a\u0430\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0449\u0435 \u0441\u0435 \u0432\u044a\u0440\u043d\u0435\u0442\u0435 \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u0435\u043d \u0440\u0435\u0436\u0438\u043c.","selectall_desc":"\u0418\u0437\u0431\u0435\u0440\u0438 \u0432\u0441\u0438\u0447\u043a\u0438","paste_word_desc":"\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u043e\u0442 Word","paste_text_desc":"\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u043a\u0430\u0442\u043e \u0442\u0435\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 CTRL V \u043e\u0442 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u0442\u0430, \u0437\u0430 \u0434\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u0430.","text_linebreaks":"\u0417\u0430\u043f\u0430\u0437\u0438 \u0437\u043d\u0430\u0446\u0438\u0442\u0435 \u0437\u0430 \u043d\u043e\u0432\u0438 \u0440\u0435\u0434\u043e\u0432\u0435","text_title":"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 CTRL V \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u0442\u0430, \u0437\u0430 \u0434\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u0430."},table:{cell:"\u041a\u043b\u0435\u0442\u043a\u0430",col:"\u041a\u043e\u043b\u043e\u043d\u0430",row:"\u0420\u0435\u0434",del:"\u0418\u0437\u0442\u0440\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0430","copy_row_desc":"\u041a\u043e\u043f\u0438\u0440\u0430\u0439 \u0440\u0435\u0434","cut_row_desc":"\u041e\u0442\u0440\u0435\u0436\u0438 \u0440\u0435\u0434","paste_row_after_desc":"\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u0440\u0435\u0434 \u0441\u043b\u0435\u0434","paste_row_before_desc":"\u041f\u043e\u0441\u0442\u0430\u0432\u0438 \u0440\u0435\u0434 \u043f\u0440\u0435\u0434\u0438","props_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","cell_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","row_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0434\u0430","merge_cells_desc":"\u0421\u043b\u0435\u0439 \u043a\u043b\u0435\u0442\u043a\u0438","split_cells_desc":"\u0420\u0430\u0437\u0434\u0435\u043b\u0438 \u0441\u043b\u0435\u0442\u0438 \u043a\u043b\u0435\u0442\u043a\u0438","delete_col_desc":"\u0418\u0437\u0442\u0440\u0438\u0439 \u043a\u043e\u043b\u043e\u043d\u0430","col_after_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u043a\u043e\u043b\u043e\u043d\u0430 \u0441\u043b\u0435\u0434","col_before_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u043a\u043e\u043b\u043e\u043d\u0430 \u043f\u0440\u0435\u0434\u0438","delete_row_desc":"\u0418\u0437\u0442\u0440\u0438\u0439 \u0440\u0435\u0434","row_after_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0440\u0435\u0434 \u0441\u043b\u0435\u0434","row_before_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0440\u0435\u0434 \u043f\u0440\u0435\u0434\u0438",desc:"\u0412\u043c\u044a\u043a\u043d\u0438 \u043d\u043e\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u0412\u0441\u0438\u0447\u043a\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u0435\u043d\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u0438 \u0449\u0435 \u0431\u044a\u0434\u0430\u0442 \u0437\u0430\u0433\u0443\u0431\u0435\u043d\u0438.\n\n\u0421\u0438\u0433\u0443\u0440\u043d\u0438 \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u0432\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0437\u0430\u043f\u0430\u0437\u0435\u043d\u043e\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435?.","restore_content":"\u0412\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0437\u0430\u043f\u0430\u0437\u0435\u043d\u043e\u0442\u043e.","unload_msg":"\u041f\u0440\u043e\u043c\u0435\u043d\u0438\u0442\u0435 \u043a\u043e\u0438\u0442\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0445\u0442\u0435 \u0449\u0435 \u0441\u0435 \u0437\u0430\u0433\u0443\u0431\u044f\u0442 \u0430\u043a\u043e \u043e\u0442\u0438\u0434\u0435\u0442\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430."},fullscreen:{desc:"\u0412\u043a\u043b./\u0418\u0437\u043a\u043b. \u0446\u044f\u043b \u0435\u043a\u0440\u0430\u043d"},media:{"delta_height":"\u0428\u0438\u0440\u0438\u043d\u0430","delta_width":"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430",edit:"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043c\u0435\u0434\u0438\u0430",desc:"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043c\u0435\u0434\u0438\u0430\u0442\u0430"},fullpage:{desc:"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","delta_width":"","delta_height":""},template:{desc:"\u0412\u043c\u044a\u043a\u043d\u0438 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442"},visualchars:{desc:"\u0412\u043a\u043b./\u0418\u0437\u043a\u043b. \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0438."},spellchecker:{desc:"\u0412\u043a\u043b./\u0418\u0437\u043a\u043b. \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430",menu:"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u0442\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441","ignore_word":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0439 \u0434\u0443\u043c\u0430","ignore_words":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0439 \u0432\u0441\u0438\u0447\u043a\u0438",langs:"\u0415\u0437\u0438\u0446\u0438",wait:"\u041c\u043e\u043b\u044f \u0438\u0437\u0447\u0430\u043a\u0430\u0439\u0442\u0435...",sug:"\u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f","no_sug":"\u041d\u044f\u043c\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f","no_mpell":"\u041d\u044f\u043c\u0430 \u0433\u0440\u0435\u0448\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438 \u0434\u0443\u043c\u0438.","learn_word":"\u041d\u0430\u0443\u0447\u0438 \u0434\u0443\u043c\u0430\u0442\u0430"},pagebreak:{desc:"\u0412\u043c\u044a\u043a\u043d\u0438 \u043d\u043e\u0432\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430."},advlist:{types:"\u0421\u0438\u043c\u0432\u043e\u043b\u0438",def:"\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0438","lower_alpha":"\u041c\u0430\u043b\u043a\u0438 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438 \u0431\u0443\u043a\u0432\u0438","lower_greek":"\u041c\u0430\u043b\u043a\u0438 \u0433\u0440\u044a\u0446\u043a\u0438 \u0431\u0443\u043a\u0432\u0438","lower_roman":"\u041c\u0430\u043b\u043a\u0438 \u0440\u0438\u043c\u0441\u043a\u0438 \u0446\u0438\u0444\u0440\u0438","upper_alpha":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u0438 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438 \u0431\u0443\u043a\u0432\u0438","upper_roman":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u0438 \u0440\u0438\u043c\u0441\u043a\u0438 \u0446\u0438\u0444\u0440\u0438",circle:"\u041a\u0440\u044a\u0433",disc:"\u041e\u043a\u0440\u044a\u0436\u043d\u043e\u0441\u0442",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442"},colors:{"333300":"\u0422\u044a\u043c\u043d\u043e \u043c\u0430\u0441\u043b\u0438\u043d\u0435\u043d","993300":"\u0422\u044a\u043c\u043d\u043e \u043e\u0440\u0430\u043d\u0436\u0435\u0432","000000":"\u0427\u0435\u0440\u0435\u043d","003300":"\u0422\u044a\u043c\u043d\u043e\u0437\u0435\u043b\u0435\u043d","003366":"\u0422\u044a\u043c\u043d\u043e\u043b\u0430\u0437\u0443\u0440\u0435\u043d","000080":"\u0422\u044a\u043c\u043d\u043e\u0441\u0438\u043d","333399":"\u0418\u043d\u0434\u0438\u0433\u043e","333333":"\u041c\u043d\u043e\u0433\u043e \u0442\u044a\u043c\u043d\u043e \u0441\u0438\u0432","800000":"\u041a\u0435\u0441\u0442\u0435\u043d\u044f\u0432",FF6600:"\u041e\u0440\u0430\u043d\u0436\u0435\u0432","808000":"\u041c\u0430\u0441\u043b\u0438\u043d\u0435\u043d\u043e\u0437\u0435\u043b\u0435\u043d","008000":"\u0417\u0435\u043b\u0435\u043d","008080":"\u0421\u0432\u0435\u0442\u043b\u043e\u0441\u0438\u043d","0000FF":"\u0421\u0438\u043d","666699":"\u0421\u0438\u0432\u043e \u0441\u0438\u043d","808080":"\u0421\u0438\u0432",FF0000:"\u0427\u0435\u0440\u0432\u0435\u043d",FF9900:"\u041a\u0435\u0445\u043b\u0438\u0431\u0430\u0440","99CC00":"\u0416\u044a\u043b\u0442\u043e\u0437\u0435\u043b\u0435\u043d","339966":"\u0421\u0438\u043d\u044c\u043e\u0437\u0435\u043b\u0435\u043d","33CCCC":"\u0422\u044e\u0440\u043a\u043e\u0430\u0437","3366FF":"\u041a\u0440\u0430\u043b\u0441\u043a\u043e \u0441\u0438\u043d\u044c\u043e","800080":"\u041f\u0443\u0440\u043f\u0443\u0440\u0435\u043d","999999":"\u0421\u0440\u0435\u0434\u043d\u043e \u0441\u0438\u0432",FF00FF:"\u041c\u0430\u0433\u0435\u043d\u0442\u0430",FFCC00:"\u0417\u043b\u0430\u0442\u0435\u043d",FFFF00:"\u0416\u044a\u043b\u0442","00FF00":"\u041b\u0430\u0439\u043c","00FFFF":"\u0410\u043a\u0432\u0430","00CCFF":"\u041d\u0435\u0431\u0435\u0441\u043d\u043e \u0441\u0438\u043d","993366":"\u041a\u0430\u0444\u044f\u0432",C0C0C0:"\u0421\u0440\u0435\u0431\u0440\u0438\u0441\u0442",FF99CC:"\u0420\u043e\u0437\u043e\u0432",FFCC99:"\u0422\u044a\u043c\u043d\u043e\u043e\u0440\u0430\u043d\u0436\u0435\u0432",FFFF99:"\u0421\u0432\u0435\u0442\u043b\u043e\u0436\u044a\u043b\u0442",CCFFCC:"\u0411\u043b\u0435\u0434\u043e \u0437\u0435\u043b\u0435\u043d\u043e",CCFFFF:"\u0411\u043b\u0435\u0434 \u0446\u0438\u0430\u043d","99CCFF":"\u0421\u0432\u0435\u0442\u043b\u043e\u043d\u0435\u0431\u0435\u0441\u043d\u043e \u0441\u0438\u043d",CC99FF:"\u041b\u0438\u043b\u0430\u0432",FFFFFF:"\u0411\u044f\u043b"},aria:{"rich_text_area":"\u041f\u043e\u043b\u0435 \u0437\u0430 \u0447\u0438\u0441\u0442 \u0442\u0435\u043a\u0441\u0442"},wordcount:{words:"\u0414\u0443\u043c\u0438:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bn.js
new file mode 100644
index 000000000..32d703e71
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({bn:{common:{"more_colors":"\u0986\u09b0\u0993 \u09ac\u09c7\u09b6\u09bf \u09b0\u0982","invalid_data":"\u09a4\u09cd\u09b0\u09c1\u099f\u09bf: \u09ac\u09c7\u09a0\u09bf\u0995 \u09ae\u09be\u09a8 \u09a2\u09c1\u0995\u09be\u09a8\u09cb \u09b9\u09df\u09c7\u099b\u09c7, \u098f\u0987\u0997\u09c1\u09b2\u09bf \u09b2\u09be\u09b2 \u099a\u09bf\u09b9\u09cd\u09a8\u09bf\u09a4 \u0995\u09b0\u09be \u09b9\u09b2\u0964","popup_blocked":"\u09a6\u09c1\u0983\u0996\u09bf\u09a4, \u0995\u09bf\u09a8\u09cd\u09a4\u09c1 \u0986\u09ae\u09b0\u09be \u09b2\u0995\u09cd\u09b7\u09cd\u09af \u0995\u09b0\u09c7\u099b\u09bf \u09af\u09c7 \u0986\u09aa\u09a8\u09be\u09b0 \u09aa\u09aa-\u0986\u09aa \u09ac\u09cd\u09b2\u0995\u09be\u09b0 \u098f\u0995\u099f\u09bf \u0989\u0987\u09a8\u09cd\u09a1\u09cb \u09a8\u09bf\u09b7\u09cd\u0995\u09cd\u09b0\u09bf\u09df \u0995\u09b0\u09c7\u099b\u09c7 \u09af\u09be \u0985\u09cd\u09af\u09be\u09aa\u09b2\u09bf\u0995\u09c7\u09b6\u09a8 \u098f\u09b0 \u09ab\u09be\u0982\u09b6\u09a8\u09be\u09b2\u09bf\u099f\u09bf\u09b0 \u099c\u09a8\u09cd\u09af \u09aa\u09cd\u09b0\u09df\u09cb\u099c\u09a8\u09c0\u09df\u0964\u0986\u09aa\u09a8\u09bf \u098f\u0987 \u099f\u09c1\u09b2\u099f\u09bf \u09b8\u09ae\u09cd\u09aa\u09c2\u09b0\u09cd\u09a3\u09ad\u09be\u09ac\u09c7 \u09ac\u09cd\u09af\u09be\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09a4\u09c7 \u099a\u09be\u0987\u09b2\u09c7 \u098f\u0987 \u09b8\u09be\u0987\u099f\u099f\u09bf \u09a5\u09c7\u0995\u09c7 \u09aa\u09aa-\u0986\u09aa \u09ac\u09cd\u09b2\u0995\u09bf\u0982 \u09a8\u09bf\u09b7\u09cd\u0995\u09cd\u09b0\u09bf\u09df \u0995\u09b0\u09a4\u09c7 \u09b9\u09ac\u09c7\u0964","clipboard_no_support":"\u0986\u09aa\u09a8\u09be\u09b0 \u09ac\u09cd\u09b0\u09be\u0989\u099c\u09be\u09b0\u09c7\u09b0 \u09a6\u09cd\u09ac\u09be\u09b0\u09be \u09ac\u09b0\u09cd\u09a4\u09ae\u09be\u09a8\u09c7 \u09b8\u09ae\u09b0\u09cd\u09a5\u09bf\u09a4 \u09a8\u09be, \u09aa\u09b0\u09bf\u09ac\u09b0\u09cd\u09a4\u09c7 \u0995\u09c0\u09ac\u09cb\u09b0\u09cd\u09a1 \u09b6\u09b0\u09cd\u099f\u0995\u09be\u099f \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09c1\u09a8\u0964","clipboard_msg":"\u0995\u09aa\u09bf/\u0995\u09be\u099f/\u09aa\u09c7\u09b7\u09cd\u099f \u09ae\u099c\u09bf\u09b2\u09be \u098f\u09ac\u0982 \u09ab\u09be\u09df\u09be\u09b0\u09ab\u0995\u09cd\u09b8 \u098f \u09b8\u09ae\u09cd\u09ad\u09ac \u09a8\u09df\n\u0986\u09aa\u09a8\u09bf \u0995\u09bf \u098f\u0987 \u09ac\u09bf\u09b7\u09df\u099f\u09bf\u09b0 \u09b8\u09ae\u09cd\u09ac\u09a8\u09cd\u09a7\u09c7 \u0986\u09b0\u0993 \u09ac\u09c7\u09b6\u09bf \u09a4\u09a5\u09cd\u09af \u099a\u09be\u09a8","not_set":"-- \u09b8\u09c7\u099f \u09a8\u09df --","class_name":"\u0995\u09cd\u09b2\u09be\u09b8",browse:"\u09ac\u09cd\u09b0\u09be\u0989\u099c",close:"\u09ac\u09a8\u09cd\u09a7",cancel:"\u0995\u09cd\u09af\u09be\u09a8\u09b8\u09c7\u09b2",update:"\u0986\u09aa\u09a1\u09c7\u099f",insert:"\u0987\u09a8\u09b8\u09be\u09b0\u09cd\u099f",apply:"\u098f\u09aa\u09cd\u09b2\u09cd\u09af\u09be\u0987","edit_confirm":"\u0986\u09aa\u09a8\u09bf \u0995\u09bf \u098f\u0987 textarea\u099f\u09bf\u09b0 \u099c\u09a8\u09cd\u09af WYSIWYG \u09ae\u09cb\u09a1 \u09ac\u09cd\u09af\u09ac\u09b9\u09be\u09b0 \u0995\u09b0\u09a4\u09c7 \u099a\u09be\u09a8?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/br.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/br.js
new file mode 100644
index 000000000..0209224b2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/br.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({br:{common:{"more_colors":"Mais Cores","invalid_data":"Erro: Valores inv\u00e1lidos est\u00e3o marcados em vermelho.","popup_blocked":"Detectamos que o seu bloqueador de popups bloqueou uma janela que \u00e9 essencial para o aplicativo. Voc\u00ea precisa desativar o bloqueador de popups para utilizar esta ferramenta.","clipboard_no_support":"O seu navegador n\u00e3o tem suporte para esta fun\u00e7\u00e3o, use os atalhos do teclado.","clipboard_msg":"Copiar/cortar/colar n\u00e3o est\u00e1 dispon\u00edvel no Mozilla/Firefox.\nDeseja mais informa\u00e7\u00f5es sobre este problema?","not_set":"-- N\u00e3o especificado --","class_name":"Classe",browse:"Procurar",close:"Fechar",cancel:"Cancelar",update:"Atualizar",insert:"Inserir",apply:"Aplicar","edit_confirm":"Deseja usar o modo de edi\u00e7\u00e3o avan\u00e7ado neste campo de texto?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Justificar",right:"Direita",center:"Centro",left:"Esquerda",align:"Alinhamento"},insertdatetime:{"day_short":"Dom,Seg,Ter,Qua,Qui,Sex,Sab,Dom","day_long":"Domingo,Segunda-Feira,Ter\u00e7a-Feira,Quarta-Feira,Quinta-Feira,Sexta-Feira,S\u00e1bado,Domingo","months_short":"Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez","months_long":"Janeiro,Fevereiro,Mar\u00e7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro","inserttime_desc":"Inserir hora","insertdate_desc":"Inserir data","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimir"},preview:{"preview_desc":"Pr\u00e9-Visualizar"},directionality:{"rtl_desc":"Da direita para esquerda","ltr_desc":"Da esquerda para direita"},layer:{content:"Nova camada...","absolute_desc":"Alternar posicionamento absoluto","backward_desc":"Mover para tr\u00e1s","forward_desc":"Mover para frente","insertlayer_desc":"Inserir nova camada"},save:{"save_desc":"Salvar","cancel_desc":"Cancelar todas as altera\u00e7\u00f5es"},nonbreaking:{"nonbreaking_desc":"Inserir um espa\u00e7o"},iespell:{download:"Aplicativo de ortografia n\u00e3o-detectado. Deseja instal\u00e1-lo agora?","iespell_desc":"Verificar ortografia"},advhr:{"advhr_desc":"Separador horizontal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoticons","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Localizar/substituir","search_desc":"Localizar","delta_width":"","delta_height":""},advimage:{"image_desc":"Inserir/editar imagem","delta_width":"","delta_height":""},advlink:{"link_desc":"Inserir/editar hyperlink","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Inserir/Editar atributos","ins_desc":"Inserir","del_desc":"Apagar","acronym_desc":"Acr\u00f4nimo","abbr_desc":"Abrevia\u00e7\u00e3o","cite_desc":"Cita\u00e7\u00e3o","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Editar CSS","delta_height":"","delta_width":""},paste:{"selectall_desc":"Selecionar tudo","paste_word_desc":"Colar (copiado do WORD)","paste_text_desc":"Colar como texto simples","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V para colar o texto na janela.","text_linebreaks":"Manter quebras de linha","text_title":"Use CTRL+V para colar o texto na janela."},table:{cell:"C\u00e9lula",col:"Coluna",row:"Linha",del:"Apagar tabela","copy_row_desc":"Copiar linha","cut_row_desc":"Cortar linha","paste_row_after_desc":"Colar linha depois","paste_row_before_desc":"Colar linha antes","props_desc":"Propriedades da tabela","cell_desc":"Propriedades das c\u00e9lulas","row_desc":"Propriedades das linhas","merge_cells_desc":"Unir c\u00e9lulas","split_cells_desc":"Dividir c\u00e9lulas","delete_col_desc":"Remover coluna","col_after_desc":"Inserir coluna depois","col_before_desc":"Inserir coluna antes","delete_row_desc":"Apagar linha","row_after_desc":"Inserir linha depois","row_before_desc":"Inserir linha antes",desc:"Inserir nova tabela","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"As mudan\u00e7as efetuadas ser\u00e3o perdidas se sair desta p\u00e1gina.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Tela Inteira"},media:{edit:"Editar m\u00eddia incorporada",desc:"Inserir/Editar m\u00eddia incorporada","delta_height":"","delta_width":""},fullpage:{desc:"Propriedades do Documento","delta_width":"","delta_height":""},template:{desc:"Inserir template"},visualchars:{desc:"Caracteres de controle visual ligado/desligado"},spellchecker:{desc:"Alternar verifica\u00e7\u00e3o ortogr\u00e1fica",menu:"Configura\u00e7\u00f5es de ortografia","ignore_word":"Ignorar palavra","ignore_words":"Ignorar tudo",langs:"Linguagens",wait:"Aguarde...",sug:"Sugest\u00f5es","no_sug":"Sem sugest\u00f5es","no_mpell":"N\u00e3o foram detectados erros de ortografia.","learn_word":"Learn word"},pagebreak:{desc:"Inserir quebra de p\u00e1gina."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bs.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bs.js
new file mode 100644
index 000000000..794702df1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/bs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({bs:{common:{"more_colors":"Vi\u0161e boja","invalid_data":"Gre\u0161ka: Une\u0161ene su nevaljane vrijednosti, ozna\u010dene su crvenom bojom.","popup_blocked":"Oprostite, izgleda da je va\u0161 popup-blocker onemogu\u0107io prozor u sklopu ovog programa. Morate onemogu\u0107iti blokiranje popup prozora da bi u potpunosti iskoristili ovaj alat.","clipboard_no_support":"Trenuta\u010dno va\u0161 preglednik ne podr\u017eava ovu opciju, poku\u0161ajte koristiti tipkovni\u010dku kraticu.","clipboard_msg":"Kopiraj/Izre\u017ei/Zalijepi nije dostupno Mozilla i Firefox preglednicima.\nVi\u0161e informacija?","not_set":"-- Nije postavljeno --","class_name":"Klasa",browse:"Pregled",close:"Zatvori",cancel:"Odustani",update:"Obnovi",insert:"Umetni",apply:"Primjeni","edit_confirm":"\u017delite li koristiti WYSIWYG na\u010din rada za ovo tekstualno polje?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Puno",right:"Desno",center:"Sredina",left:"Lijevo",align:"Poravnavanje"},insertdatetime:{"day_short":"ned,pon,uto,sri,\u010det,pet,sub,ned","day_long":"nedjelja,ponedjeljak,utorak,srijeda,\u010detvrtak,petak,subota,nedjelja","months_short":"sij,velj,o\u017eu,tra,svi,lip,srp,kol,ruj,lis,stu,pro","months_long":"sije\u010danj,velja\u010da,o\u017eujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac","inserttime_desc":"Umetni vrijeme","insertdate_desc":"Umetni datum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y."},print:{"print_desc":"Ispis"},preview:{"preview_desc":"Prikaz"},directionality:{"rtl_desc":"S desna na lijevo","ltr_desc":"S lijeva na desno"},layer:{content:"Novi sloj...","absolute_desc":"Uklju\u010di/isklju\u010di apsolutno pozicioniranje","backward_desc":"Pomakni natrag","forward_desc":"Pomakni naprijed","insertlayer_desc":"Umetni novi sloj"},save:{"save_desc":"Spremi","cancel_desc":"Odustani od svih promjena"},nonbreaking:{"nonbreaking_desc":"Umetni razmak"},iespell:{download:"Provjera pravopisa nije postaljena. Postaviti sada?","iespell_desc":"Pokreni provjeru pravopisa"},advhr:{"advhr_desc":"Vodoravna crta","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emocije","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Prona\u0111i/Zamijeni","search_desc":"Prona\u0111i","delta_width":"","delta_height":""},advimage:{"image_desc":"Umetni/uredi sliku","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Umetni/uredi atribute","ins_desc":"Unos","del_desc":"Brisanje","acronym_desc":"Akronim","abbr_desc":"Kratica","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Uredi CSS","delta_height":"","delta_width":""},paste:{"selectall_desc":"Odaberi sve","paste_word_desc":"Zalijepi iz Worda","paste_text_desc":"Zalijepi kao obi\u010dni tekst","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prijelome","text_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor."},table:{cell:"\u0106elija",col:"Stupac",row:"Redak",del:"Izbri\u0161i tablicu","copy_row_desc":"Kopiraj redak","cut_row_desc":"Izre\u017ei redak","paste_row_after_desc":"Zalijepi redak ispod","paste_row_before_desc":"Zalijepi redak iznad","props_desc":"Svojstva tablice","cell_desc":"Svojstva \u0107elije","row_desc":"Svojstva retka","merge_cells_desc":"Spoji \u0107elije","split_cells_desc":"Razdvoji spojene \u0107elije","delete_col_desc":"Ukloni stupac","col_after_desc":"Umetni stupac desno","col_before_desc":"Umetni stupac lijevo","delete_row_desc":"Izbri\u0161i redak","row_after_desc":"Umetni redak ispod","row_before_desc":"Umetni redak iznad",desc:"Nova tablica","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"Promjene u dokumentu \u0107e biti izgubljene ako iza\u0111ete s ove stranice.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Uklju\u010di/isklju\u010di prikaz preko cijelog ekrana"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Svojstva dokumenta","delta_width":"","delta_height":""},template:{desc:"Umetni sadr\u017eaj iz predlo\u017eak"},visualchars:{desc:"Vizualni kontrolni znakovi uklju\u010deni/isklju\u010deni."},spellchecker:{desc:"Uklju\u010di/isklju\u010di provjeru pravopisa",menu:"Postavke provjere pravopisa","ignore_word":"Zanemari rije\u010d","ignore_words":"Zanemari sver",langs:"Jezici",wait:"Pri\u010dekajte...",sug:"Prijedlozi","no_sug":"Nema prijedloga","no_mpell":"Nije prona\u0111ena nijedna pravopisna gre\u0161ke.","learn_word":"Learn word"},pagebreak:{desc:"Umetni prijelom."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ca.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ca.js
new file mode 100644
index 000000000..f944c2cb1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ca.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ca:{common:{"more_colors":"M\u00e9s colors","invalid_data":"Error: heu introdu\u00eft valors no v\u00e0lids, els marcats en vermell.","popup_blocked":"El bloqueig de finestres emergents ha inhabilitat una finestra que proporciona funcionalitat a l\'aplicaci\u00f3. Cal que desactiveu el bloqueig de finestres emergents en aquest lloc per tal de poder utilitzar de forma completa aquesta eina.","clipboard_no_support":"El vostre navegador actualment no ho admet, utilitzeu les dreceres de teclat.","clipboard_msg":"Copia/Retalla/Enganxa no es troba disponible al Mozilla ni al Firefox.\nVoleu m\u00e9s informaci\u00f3 sobre aquesta q\u00fcesti\u00f3?","not_set":"-- No definit --","class_name":"Classe",browse:"Explora",close:"Tanca",cancel:"Cancel\u00b7la",update:"Actualitza",insert:"Insereix",apply:"Aplica","edit_confirm":"Voleu utilitzar el mode WYSIWYG?","invalid_data_number":"{#field} ha de ser un n\u00famero","invalid_data_min":"{#field} ha de ser un n\u00famero major que {#min}","invalid_data_size":"{#field} ha de ser un n\u00famero o un tant per cent",value:"(valor)"},contextmenu:{full:"Justificat",right:"Dreta",center:"Centre",left:"Esquerra",align:"Alineaci\u00f3"},insertdatetime:{"day_short":"dg.,dl.,dt.,dc.,dj.,dv.,ds.,dg.","day_long":"diumenge,dilluns,dimarts,dimecres,dijous,divendres,dissabte,diumenge","months_short":"gen.,febr.,mar\u00e7,abr.,maig,juny,jul.,ag.,set.,oct.,nov.,des.","months_long":"Jgener,febrer,mar\u00e7,abril,maig,juny,juliol,agost,setembre,octubre,novembre,desembre","inserttime_desc":"Insereix l\'hora","insertdate_desc":"Insereix la data","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimeix"},preview:{"preview_desc":"Previsualitzaci\u00f3"},directionality:{"rtl_desc":"Direcci\u00f3 dreta a esquerra","ltr_desc":"Direcci\u00f3 esquerra a dreta"},layer:{content:"Nova Capa...","absolute_desc":"Conmuta el posicionament absolut","backward_desc":"Mou endarrera","forward_desc":"Mou endavant","insertlayer_desc":"Insereix una nova capa"},save:{"save_desc":"Desa","cancel_desc":"Cancel\u00b7la tots els canvis"},nonbreaking:{"nonbreaking_desc":"Insereix un car\u00e0cter espai en blanc"},iespell:{download:"no he detectat l\'ieSpell. Voleu instal\u00b7lar-ho?","iespell_desc":"Executa la correcci\u00f3 ortogr\u00e0fica"},advhr:{"advhr_desc":"Filet horitzontal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoticones","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Cerca/Reempla\u00e7a","search_desc":"Cerca","delta_width":"","delta_height":""},advimage:{"image_desc":"Insereix/edita imatge","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insereix/edita atributs","ins_desc":"Inserci\u00f3","del_desc":"Eliminaci\u00f3","acronym_desc":"Acr\u00f2nim","abbr_desc":"Abreviaci\u00f3","cite_desc":"Citaci\u00f3","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edita l\'estil CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Enganxa est\u00e0 ara configurat en mode text pla. Clica de nou per tornar al mode normal d\'enganxar.","plaintext_mode_sticky":"Enganxa est\u00e0 ara configurat en mode text pla. Clica de nou per tornar al mode normal d\'enganxar. Despr\u00e9s d\'enganxar quelcom ser\u00e0s retornat al mode normal d\'enganxar.","selectall_desc":"Selecciona-ho tot","paste_word_desc":"Enganxa des del Word","paste_text_desc":"Enganxa com a text pla"},"paste_dlg":{"word_title":"Amb el teclat utilitzeu CTRL+V per a enganxar el text dins la finestra.","text_linebreaks":"Conserva els salts de l\u00ednia","text_title":"Amb el teclat utilitzeu CTRL+V per a enganxar el text dins la finestra."},table:{cell:"Cel\u00b7la",col:"Columna",row:"Fila",del:"Elimina la taula","copy_row_desc":"Copia la fila","cut_row_desc":"Retalla la fila","paste_row_after_desc":"Enganxa la fila despr\u00e9s","paste_row_before_desc":"Enganxa la fila abans","props_desc":"Propietats de la taula","cell_desc":"Propietats de la cel\u00b7la","row_desc":"Propietats de la fila","merge_cells_desc":"Fusiona les cel\u00b7les","split_cells_desc":"Divideix les cel\u00b7les fusionades","delete_col_desc":"Elimina la columna","col_after_desc":"Insereix una columna despr\u00e9s","col_before_desc":"Insereix una columna abans","delete_row_desc":"Elimina la fila","row_after_desc":"Insereix una fila despr\u00e9s","row_before_desc":"Insereix una fila abans",desc:"Insereix una nova taula","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Si restaures el contingut guardat, perdr\u00e0s tot el contingut actual de l\'editor.\n\n Est\u00e0s segur de voler continuar?","restore_content":"Restaura el contingut guardat autom\u00e0ticament.","unload_msg":"Els canvis que heu fet es perdran si navegueu a fora d\'aquesta p\u00e0gina."},fullscreen:{desc:"Commuta a mode de pantalla completa"},media:{edit:"Edita multim\u00e8dia incrustat",desc:"Insereix / edita multim\u00e8dia incrustat","delta_height":"","delta_width":""},fullpage:{desc:"Propietats del document","delta_width":"","delta_height":""},template:{desc:"Insereix un contingut predefinit"},visualchars:{desc:"Activa/desactiva els car\u00e0cters de control visual."},spellchecker:{desc:"Corrector ortogr\u00e0fic",menu:"Configuraci\u00f3 del corrector","ignore_word":"Ignora el mot","ignore_words":"Ignora\'ls tots",langs:"Idiomes",wait:"Espereu...",sug:"Suggeriments","no_sug":"Cap suggeriment","no_mpell":"No s\'ha trobat cap falta d\'ortografia.","learn_word":"Aprendre el mot"},pagebreak:{desc:"Insereix un salt de p\u00e0gina."},advlist:{types:"Tipus",def:"Per defecte","lower_alpha":"Lletres","lower_greek":"Lletres gregues (min\u00fascules)","lower_roman":"Nombres romans (min\u00fascules)","upper_alpha":"Lletres (maj\u00fascules)","upper_roman":"Nombres romans (maj\u00fascules)",circle:"Cercle",disc:"Disc",square:"Quadrat"},colors:{"333300":"Verd oliva fosc","993300":"Taronja torrat","000000":"Negre","003300":"Verd fosc","003366":"Blau fosc","000080":"Blau mar\u00ed","333399":"Indi","333333":"Gris molt fosc","800000":"Granat",FF6600:"Taronja","808000":"Verd oliva","008000":"Verd","008080":"Blau xarxet","0000FF":"Blau","666699":"Blau grisenc","808080":"Gris",FF0000:"Roig",FF9900:"Ambre","99CC00":"Verd groguenc","339966":"Verd mar\u00ed","33CCCC":"Turquesa","3366FF":"Blau real","800080":"Porpra","999999":"Gris mig",FF00FF:"Magenta",FFCC00:"Or",FFFF00:"Groc","00FF00":"Llima","00FFFF":"Cian","00CCFF":"Blau cel","993366":"Marr\u00f3",C0C0C0:"Plata",FF99CC:"Rosa",FFCC99:"Pr\u00e9ssec",FFFF99:"Groc clar",CCFFCC:"Verd p\u00e0lid",CCFFFF:"Cian p\u00e0lid","99CCFF":"Blau mar\u00ed clar",CC99FF:"Pruna",FFFFFF:"Blanc"},aria:{"rich_text_area":"\u00c0rea de Text Enriquit"},wordcount:{words:"Mots:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ch.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ch.js
new file mode 100644
index 000000000..c6d10f6a8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ch.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ch:{common:{"more_colors":"\u66f4\u591a\u989c\u8272\u2026","invalid_data":"\u4f60\u8f93\u5165\u7684\u8d44\u6599\u6709\u8bef\uff08\u7ea2\u8272\u90e8\u5206\uff09","popup_blocked":"\u4f60\u7684\u6d4f\u89c8\u5668\u7981\u6b62\u4e86\u5f39\u51fa\u89c6\u7a97\u3002","clipboard_no_support":"\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u63f4\u8be5\u529f\u80fd\uff0c\u8bf7\u4f7f\u7528Ctrl + C\u952e\u4ee3\u66ff\u3002","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u63f4\u590d\u5236\u529f\u80fd\u3002","not_set":"--\u5c1a\u672a\u8bbe\u5b9a--","class_name":"\u7c7b\u522b",browse:"\u9884\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5957\u7528","edit_confirm":"\u662f\u5426\u9700\u8981\u5f00\u542f\u6587\u5b57\u7f16\u8f91\u5668\uff1f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u5de6\u53f3\u5bf9\u9f50",right:"\u9760\u53f3\u5bf9\u9f50",center:"\u7f6e\u4e2d\u5bf9\u9f50",left:"\u9760\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50"},insertdatetime:{"day_short":"\u5468\u65e5\uff0c\u5468\u4e00\uff0c\u5468\u4e8c\uff0c\u5468\u53c1\uff0c\u5468\u56db\uff0c\u5468\u4e94\uff0c\u5468\u516d\uff0c\u5468\u65e5","day_long":"\u661f\u671f\u65e5\uff0c\u661f\u671f\u4e00\uff0c\u661f\u671f\u4e8c\uff0c\u661f\u671f\u53c1\uff0c\u661f\u671f\u56db\uff0c\u661f\u671f\u4e94\uff0c\u661f\u671f\u516d\uff0c\u661f\u671f\u65e5","months_short":"1\u6708\uff0c2\u6708\uff0c3\u6708\uff0c4\u6708\uff0c5\u6708\uff0c6\u6708\uff0c7\u6708\uff0c8\u6708\uff0c9\u6708\uff0c10\u6708\uff0c11\u6708\uff0c12\u6708","months_long":"\u4e00\u6708\uff0c\u4e8c\u6708\uff0c\u53c1\u6708\uff0c\u56db\u6708\uff0c\u4e94\u6708\uff0c\u516d\u6708\uff0c\u4e03\u6708\uff0c\u516b\u6708\uff0c\u4e5d\u6708\uff0c\u5341\u6708\uff0c\u5341\u4e00\u6708\uff0c\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u76ee\u524d\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u76ee\u524d\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y/%m/%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u5efa\u56fe\u5c42\u2026","absolute_desc":"\u5207\u6362\u5230\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u7f6e\u540e","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u56fe\u5c42"},save:{"save_desc":"\u5b58\u6863","cancel_desc":"\u53d6\u6d88\u6240\u6709\u53d8\u66f4"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u683c"},iespell:{download:"\u68c0\u67e5\u4e0d\u5230ieSpell\u63d2\u4ef6\u7a0b\u5e8f\uff0c\u662f\u5426\u7acb\u5373\u5b89\u88c5\uff1f","iespell_desc":"\u62fc\u5b57\u68c0\u67e5"},advhr:{"advhr_desc":"\u6c34\u5e73\u7ebf","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u8868\u60c5","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u641c\u5bfb/\u53d6\u4ee3","search_desc":"\u641c\u5bfb","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7f16\u8f91\u8d85\u8fde\u7ed3","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"60","attribs_delta_width":"40","attribs_desc":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u7528","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7f16\u8f91 CSS \u6837\u5f0f\u8868","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u76ee\u524d\u4e3a\u4e00\u822c\u8d34\u4e0a\u6a21\u5f0f\uff0c\u518d\u70b9\u70b9\u51fb\u4e00\u6b21\u5207\u6362\u56de\u7eaf\u6587\u672c\u8d34\u4e0a\u6a21\u5f0f\u3002","plaintext_mode_sticky":"\u76ee\u524d\u4e3a\u7eaf\u6587\u672c\u8d34\u4e0a\u6a21\u5f0f\uff0c\u518d\u70b9\u51fb\u4e00\u6b21\u5207\u6362\u56de\u4e00\u822c\u6a21\u5f0f\u3002","selectall_desc":"\u5168\u9009","paste_word_desc":"\u4ee5Word\u683c\u5f0f\u8d34\u4e0a","paste_text_desc":"\u4ee5\u7eaf\u6587\u672c\u8d34\u4e0a"},"paste_dlg":{"word_title":"\u7528 Ctrl+V \u5c06\u5185\u5bb9\u8d34\u4e0a\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7","text_title":"\u7528 Ctrl+V \u5c06\u5185\u5bb9\u8d34\u4e0a\u3002"},table:{"merge_cells_delta_height":"40","merge_cells_delta_width":"40","table_delta_height":"60","table_delta_width":"40","cellprops_delta_height":"10","cellprops_delta_width":"10",cell:"\u50a8\u5b58\u683c",col:"\u680f",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u9009\u62e9\u884c","cut_row_desc":"\u526a\u4e0b\u9009\u62e9\u884c","paste_row_after_desc":"\u5728\u4e0b\u65b9\u8d34\u4e0a\u884c","paste_row_before_desc":"\u5728\u4e0a\u65b9\u8d34\u4e0a\u884c","props_desc":"\u8868\u683c\u5c5e\u6027","cell_desc":"\u50a8\u5b58\u683c\u5c5e\u6027","row_desc":"\u884c\u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u50a8\u5b58\u683c","split_cells_desc":"\u5206\u5272\u50a8\u5b58\u683c","delete_col_desc":"\u5220\u9664\u76ee\u524d\u680f","col_after_desc":"\u5728\u53f3\u4fa7\u63d2\u5165\u680f","col_before_desc":"\u5728\u5de6\u4fa7\u63d2\u5165\u680f","delete_row_desc":"\u5220\u9664\u76ee\u524d\u884c","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u6062\u590d\u5148\u524d\u50a8\u5b58\u7684\u5185\u5bb9\uff0c\u60a8\u5c06\u5931\u53bb\u7f16\u8f91\u5668\u4e2d\u73b0\u6709\u7684\u5185\u5bb9\u3002 \n\n\u60a8\u786e\u5b9a\u8981\u6062\u590d\u5148\u524d\u50a8\u5b58\u7684\u5185\u5bb9\u5417\uff1f","restore_content":"\u6062\u590d\u81ea\u52a8\u50a8\u5b58\u7684\u5185\u5bb9\u3002","unload_msg":"\u60a8\u5c1a\u672a\u50a8\u5b58\u5185\u5bb9\uff0c\u60a8\u8f93\u5165\u7684\u5185\u5bb9\u53ef\u80fd\u4f1a\u4e22\u5931\u2026"},fullscreen:{desc:"\u5168\u8424\u5e55\u7f16\u8f91"},media:{edit:"\u7f16\u8f91\u5f71\u7247",desc:"\u63d2\u5165/\u7f16\u8f91\u5f71\u7247","delta_height":"","delta_width":""},fullpage:{desc:"\u6863\u6848\u5c5e\u6027","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9884\u8bbe\u6a21\u677f"},visualchars:{desc:"\u663e\u793a/\u9690\u85cf\u975e\u53ef\u89c1\u5b57\u7b26"},spellchecker:{desc:"\u5f00\u5173\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5b57\u68c0\u67e5\u8bbe\u5b9a","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8bed\u8a00",wait:"\u8bf7\u7a0d\u5019\u2026",sug:"\u5efa\u8bae","no_sug":"\u65e0\u5efa\u8bae","no_mpell":"\u65e0\u62fc\u5199\u9519\u8bef","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26\u53f7"},advlist:{types:"\u6837\u5f0f",def:"\u9884\u8bbe","lower_alpha":"\u5c0f\u5199\u7684\u82f1\u6587\u5b57","lower_greek":"\u5c0f\u5199\u7684\u5e0c\u814a\u6587\u5b57","lower_roman":"\u5c0f\u5199\u7684\u7f57\u9a6c\u6570\u5b57","upper_alpha":"\u5927\u5199\u7684\u82f1\u6587\u5b57","upper_roman":"\u5927\u5199\u7684\u7f57\u9a6c\u6570\u5b57",circle:"\u5706\u5708",disc:"\u5706\u70b9",square:"\u65b9\u5f62"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cn.js
new file mode 100644
index 000000000..070ef5087
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({cn:{common:{"more_colors":"\u66f4\u591a\u989c\u8272","invalid_data":"\u4f60\u8f93\u5165\u7684\u5185\u5bb9\u6709\u8bef\uff08\u7ea2\u8272\u90e8\u5206\uff09","popup_blocked":"\u4f60\u7684\u6d4f\u89c8\u5668\u7981\u6b62\u4e86\u5f39\u7a97\uff0c\u8bf7\u8bbe\u7f6e\u5145\u8bb8\u672c\u7ad9\uff0c\u4ee5\u4fbf\u7ee7\u7eed\u4f7f\u7528","clipboard_no_support":"\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u8be5\u529f\u80fd\uff0c\u8bf7\u7528\u5feb\u6377\u952e\u4ee3\u66ff\u3002","clipboard_msg":"\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u8be5\u529f\u80fd","not_set":"-- \u672a\u8bbe\u5b9a --","class_name":"\u7c7b\uff08Class\uff09",browse:"\u6d4f\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5e94\u7528","edit_confirm":"\u60a8\u662f\u5426\u613f\u610f\u542f\u7528\u6240\u89c1\u6240\u5f97\u6a21\u5f0f","invalid_data_number":"{#field} \u5fc5\u987b\u662f\u6570\u5b57","invalid_data_min":"{#field} \u5fc5\u987b\u662f\u6570\u5b57\u5e76\u4e14\u5927\u4e8e {#min}","invalid_data_size":"{#field} \u5fc5\u987b\u662f\u6570\u5b57\u6216\u767e\u5206\u6bd4",value:"(\u81ea\u5b9a\u503c)"},contextmenu:{full:"\u5de6\u53f3\u5bf9\u9f50",right:"\u53f3\u5bf9\u9f50",center:"\u5c45\u4e2d\u5bf9\u9f50",left:"\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50\u65b9\u5f0f"},insertdatetime:{"day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u53c1,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u6253\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u5efa\u5c42","absolute_desc":"\u5207\u6362\u5230\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u7f6e\u540e","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u65b0\u5c42"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u53d6\u6d88\u6240\u6709\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u683c\u5b57\u7b26"},iespell:{download:"\u62fc\u5199\u68c0\u67e5\u672a\u5b89\u88c5\uff0c\u662f\u5426\u7acb\u5373\u5b89\u88c5\uff1f","iespell_desc":"\u62fc\u5199\u68c0\u67e5"},advhr:{"delta_height":"\u9ad8\u5ea6","delta_width":"\u5bbd\u5ea6","advhr_desc":"\u6c34\u5e73\u7ebf"},emotions:{"delta_height":"\u8868\u60c5\u9ad8\u5ea6","delta_width":"\u8868\u60c5\u5bbd\u5ea6","emotions_desc":"\u8868\u60c5"},searchreplace:{"replace_desc":"\u67e5\u627e/\u66ff\u6362","delta_width":"\u67e5\u627e/\u66ff\u6362\u5bbd\u5ea6","delta_height":"\u67e5\u627e/\u66ff\u6362\u9ad8\u5ea6","search_desc":"\u67e5\u627e"},advimage:{"delta_width":"\u5bbd\u5ea6","image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","delta_height":"\u9ad8\u5ea6"},advlink:{"delta_height":"\u9ad8\u5ea6","delta_width":"\u5bbd\u5ea6","link_desc":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5"},xhtmlxtras:{"attribs_delta_height":"\u5c5e\u6027\u9ad8\u5ea6","attribs_delta_width":"\u5c5e\u6027\u5bbd\u5ea6","ins_delta_height":"\u63d2\u5165\u9ad8\u5ea6","ins_delta_width":"\u63d2\u5165\u5bbd\u5ea6","del_delta_height":"\u5220\u9664\u9ad8\u5ea6","del_delta_width":"\u5220\u9664\u5bbd\u5ea6","acronym_delta_height":"\u9996\u5b57\u6bcd\u7f29\u5199\u9ad8\u5ea6","acronym_delta_width":"\u9996\u5b57\u6bcd\u7f29\u5199\u5bbd\u5ea6","abbr_delta_height":"\u7f29\u5199\u9ad8\u5ea6","abbr_delta_width":"\u7f29\u5199\u5bbd\u5ea6","cite_delta_height":"\u5f15\u7528\u9ad8\u5ea6","cite_delta_width":"\u5f15\u7528\u5bbd\u5ea6","attribs_desc":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u6587"},style:{"delta_height":"\u98ce\u683c\u9ad8\u5ea6","delta_width":"\u98ce\u683c\u5bbd\u5ea6",desc:"\u7f16\u8f91CSS\u6837\u5f0f"},paste:{"plaintext_mode":"\u76ee\u524d\u4e3a\u4e00\u822c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u5207\u6362\u56de\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\u3002","plaintext_mode_sticky":"\u76ee\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u5207\u6362\u56de\u4e00\u822c\u7c98\u8d34\u6a21\u5f0f\u3002","selectall_desc":"\u5168\u9009","paste_word_desc":"\u4eceWord\u7c98\u8d34","paste_text_desc":"\u4ee5\u7eaf\u6587\u672c\u7c98\u8d34"},"paste_dlg":{"word_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u5185\u5bb9","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7","text_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u5185\u5bb9"},table:{"merge_cells_delta_height":"\u5408\u5e76\u9ad8\u5ea6","merge_cells_delta_width":"\u5408\u5e76\u5bbd\u5ea6","table_delta_height":"\u8868\u683c\u9ad8\u5ea6","table_delta_width":"\u8868\u683c\u5bbd\u5ea6","cellprops_delta_height":"\u5355\u5143\u683c\u9ad8\u5ea6","cellprops_delta_width":"\u5355\u5143\u683c\u5bbd\u5ea6","rowprops_delta_height":"\u884c\u9ad8","rowprops_delta_width":"\u884c\u5bbd",cell:"\u5355\u5143\u683c",col:"\u5217",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u6574\u884c","cut_row_desc":"\u526a\u5207\u884c","paste_row_after_desc":"\u5728\u884c\u540e\u7c98\u8d34","paste_row_before_desc":"\u5728\u884c\u524d\u7c98\u8d34","props_desc":"\u8868\u683c\u5c5e\u6027","cell_desc":"\u8868\u683c\u5143\u4ef6\u5c5e\u6027","row_desc":"\u884c\u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u8868\u683c\u5143\u4ef6","split_cells_desc":"\u5206\u5272\u5df2\u5408\u5e76\u5143\u4ef6","delete_col_desc":"\u5220\u9664\u5217","col_after_desc":"\u5728\u5217\u540e\u63d2\u5165","col_before_desc":"\u5728\u5217\u524d\u63d2\u5165","delete_row_desc":"\u5220\u9664\u884c","row_after_desc":"\u5728\u884c\u540e\u63d2\u5165","row_before_desc":"\u5728\u884c\u524d\u63d2\u5165",desc:"\u63d2\u5165\u65b0\u8868\u683c"},autosave:{"warning_message":"\u5982\u679c\u8fd8\u539f\u4fdd\u5b58\u7684\u5185\u5bb9\uff0c\u60a8\u5c06\u5931\u53bb\u5f53\u524d\u7f16\u8f91\u7684\u5185\u5bb9\u3002\\ n \\ n\u60a8\u786e\u5b9a\u8981\u6062\u590d\u4fdd\u5b58\u7684\u5185\u5bb9\uff1f","restore_content":"\u6062\u590d\u81ea\u52a8\u4fdd\u5b58\u5185\u5bb9\u3002","unload_msg":"\u5982\u679c\u60a8\u5173\u95ed\u5f53\u524d\u9875\u9762\uff0c\u60a8\u5c06\u5931\u53bb\u5f53\u524d\u6240\u6709\u66f4\u6539\u3002"},fullscreen:{desc:"\u5207\u6362\u5168\u5c4f\u6a21\u5f0f"},media:{"delta_height":"\u5a92\u4f53\u9ad8\u5ea6","delta_width":"\u5a92\u4f53\u5bbd\u5ea6",edit:"\u7f16\u8f91\u5d4c\u5165\u5f0f\u5a92\u4f53",desc:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5f0f\u5a92\u4f53"},fullpage:{desc:"\u6587\u6863\u5c5e\u6027","delta_width":"\u9ad8\u5ea6","delta_height":"\u5bbd\u5ea6"},template:{desc:"\u63d2\u5165\u9884\u8bbe\u6a21\u677f"},visualchars:{desc:"\u663e\u793a/\u9690\u85cf \u9690\u85cf\u5143\u7d20"},spellchecker:{desc:"\u5f00\u542f/\u5173\u95ed\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5199\u68c0\u67e5\u8bbe\u7f6e","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8bed\u8a00",wait:"\u8bf7\u7a0d\u5019...",sug:"\u5efa\u8bae","no_sug":"\u4e0d\u4f7f\u7528\u5efa\u8bae","no_mpell":"\u65e0\u62fc\u5199\u9519\u8bef","learn_word":"\u5b66\u4e60\u5355\u8bcd"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26"},advlist:{types:"\u7c7b\u578b",def:"\u9884\u8bbe","lower_alpha":"\u5c0f\u5199\u5b57\u6bcd","lower_greek":"\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd","lower_roman":"\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd","upper_alpha":"\u5927\u5199\u82f1\u6587\u5b57\u6bcd","upper_roman":"\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd",circle:"\u5706\u5708",disc:"\u5706\u70b9",square:"\u65b9\u70b9"},colors:{"333300":"\u6df1\u6a44\u6984\u8272","993300":"\u7126\u6a59\u8272","000000":"\u9ed1\u8272","003300":"\u6df1\u7eff\u8272","003366":"\u6df1\u851a\u84dd","000080":"\u6d77\u519b\u84dd","333399":"\u975b\u9752","333333":"\u6697\u7070\u8272","800000":"\u6817\u8272",FF6600:"\u6a59\u8272","808000":"\u6a44\u6984\u8272","008000":"\u7eff\u8272","008080":"\u9752\u8272","0000FF":"\u84dd\u8272","666699":"\u7070\u84dd","808080":"\u7070\u8272",FF0000:"\u7ea2\u8272",FF9900:"\u7425\u73c0\u8272","99CC00":"\u9ec4\u7eff\u8272","339966":"\u6d77\u7eff\u8272","33CCCC":"\u7eff\u677e\u8272","3366FF":"\u5b9d\u84dd\u8272","800080":"\u7d2b\u8272","999999":"\u4e2d\u7070\u8272",FF00FF:"\u54c1\u7ea2\u8272",FFCC00:"\u91d1\u8272",FFFF00:"\u9ec4\u8272","00FF00":"\u77f3\u7070\u8272","00FFFF":"\u6d45\u9752\u8272","00CCFF":"\u5929\u84dd\u8272","993366":"\u8910\u8272",C0C0C0:"\u94f6\u8272",FF99CC:"\u7c89\u8272",FFCC99:"\u6843\u8272",FFFF99:"\u6d45\u9ec4\u8272",CCFFCC:"\u6de1\u7eff\u8272",CCFFFF:"\u5e15\u83b1\u9752\u8272","99CCFF":"\u6d45\u5929\u84dd",CC99FF:"\u6885\u8272",FFFFFF:"\u767d\u8272"},aria:{"rich_text_area":"\u5bcc\u6587\u672c\u533a"},wordcount:{words:"\u5b57\u6570:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cs.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cs.js
new file mode 100644
index 000000000..463dda8a6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({cs:{common:{"more_colors":"Dal\u0161\u00ed barvy","invalid_data":"Chyba: Byly zad\u00e1ny neplatn\u00e9 hodnoty a tyto byly ozna\u010deny \u010derven\u011b.","popup_blocked":"Omlouv\u00e1me se, ale blokov\u00e1n\u00ed vyskakovac\u00edch oken neumo\u017enilo otev\u0159\u00edt okno, kter\u00e9 poskytuje funk\u010dnost aplikace. Pro pln\u00e9 vyu\u017eit\u00ed mo\u017enost\u00ed aplikace mus\u00edte vypnout blokov\u00e1n\u00ed vyskakovac\u00edch oken pro tento web.","clipboard_no_support":"Tato funkce nen\u00ed va\u0161\u00edm prohl\u00ed\u017ee\u010dem podporov\u00e1na. Pou\u017eijte m\u00edsto toho kl\u00e1vesov\u00e9 zkratky.","clipboard_msg":"Funkce kop\u00edrovat/vyjmout/vlo\u017eit nejsou podporovan\u00e9 v prohl\u00ed\u017ee\u010d\u00edch Mozilla a Firefox.\nChcete v\u00edce informac\u00ed o tomto probl\u00e9mu?","not_set":"- Nenastaveno -","class_name":"T\u0159\u00edda",browse:"Proch\u00e1zet",close:"Zav\u0159\u00edt",cancel:"Storno",update:"Aktualizovat",insert:"Vlo\u017eit",apply:"Pou\u017e\u00edt","edit_confirm":"Chcete pou\u017e\u00edt WYSIWYG re\u017eim pro tento text?","invalid_data_number":"{#field} mus\u00ed b\u00fdt \u010d\u00edslo","invalid_data_min":"{#field} mus\u00ed b\u00fdt \u010d\u00edslo v\u011bt\u0161\u00ed ne\u017e {#min}","invalid_data_size":"{#field} mus\u00ed b\u00fdt \u010d\u00edslo nebo v procentech",value:"(hodnota)"},contextmenu:{full:"Do bloku",right:"Doprava",center:"Na st\u0159ed",left:"Doleva",align:"Zarovn\u00e1n\u00ed"},insertdatetime:{"day_short":"Ne,Po,\u00dat,St,\u010ct,P\u00e1,So,Ne","day_long":"Ned\u011ble,Pond\u011bl\u00ed,\u00dater\u00fd,St\u0159eda,\u010ctvrtek,P\u00e1tek,Sobota,Ned\u011ble","months_short":"Led,\u00dano,B\u0159e,Dub,Kv\u011b,\u010cer,\u010cvc,Srp,Z\u00e1\u0159,\u0158\u00edj,Lis,Pro","months_long":"Leden,\u00danor,B\u0159ezen,Duben,Kv\u011bten,\u010cerven,\u010cervenec,Srpen,Z\u00e1\u0159\u00ed,\u0158\u00edjen,Listopad,Prosinec","inserttime_desc":"Vlo\u017eit \u010das","insertdate_desc":"Vlo\u017eit datum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Tisk"},preview:{"preview_desc":"N\u00e1hled"},directionality:{"rtl_desc":"Sm\u011br zprava doleva","ltr_desc":"Sm\u011br zleva doprava"},layer:{content:"Nov\u00e1 vrstva...","absolute_desc":"P\u0159epnout na absolutn\u00ed pozicov\u00e1n\u00ed","backward_desc":"P\u0159esunout dozadu","forward_desc":"P\u0159esunout dop\u0159edu","insertlayer_desc":"Vlo\u017eit novou vrstvu"},save:{"save_desc":"Ulo\u017eit","cancel_desc":"Zru\u0161it v\u0161echny zm\u011bny"},nonbreaking:{"nonbreaking_desc":"Vlo\u017eit ned\u011blitelnou mezeru"},iespell:{download:"Slovn\u00edk ieSpell nebyl detekov\u00e1n. Chcete ho nainstalovat?","iespell_desc":"Spustit kontrolu pravopisu"},advhr:{"advhr_desc":"Vodorovn\u00fd odd\u011blova\u010d","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotikony","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Naj\u00edt/nahradit","search_desc":"Naj\u00edt","delta_width":"","delta_height":""},advimage:{"delta_width":"20","image_desc":"Vlo\u017eit/upravit obr\u00e1zek","delta_height":""},advlink:{"link_desc":"Vlo\u017eit/upravit odkaz","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Vlo\u017eit/upravit atributy","ins_desc":"P\u0159idan\u00fd text","del_desc":"Odstran\u011bn\u00fd text","acronym_desc":"Akronym","abbr_desc":"Zkratka","cite_desc":"Citace","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_width":"25",desc:"Upravit CSS styl","delta_height":""},paste:{"plaintext_mode":"Funkce vlo\u017eit je nyn\u00ed v re\u017eimu prost\u00fd text. Op\u011btovn\u00e9 kliknut\u00ed p\u0159epne tuto funkci zp\u011bt do norm\u00e1ln\u00edho re\u017eimu.","plaintext_mode_sticky":"Funkce vlo\u017eit je nyn\u00ed v re\u017eimu prost\u00fd text. Op\u011btovn\u00e9 kliknut\u00ed p\u0159epne tuto funkci zp\u011bt do norm\u00e1ln\u00edho re\u017eimu. Po vlo\u017een\u00ed \u010dehokoli bude tato funkce vr\u00e1cena zp\u011bt do norm\u00e1ln\u00edho re\u017eimu.","selectall_desc":"Vybrat v\u0161e","paste_word_desc":"Vlo\u017eit z Wordu","paste_text_desc":"Vlo\u017eit jako prost\u00fd text"},"paste_dlg":{"word_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna.","text_linebreaks":"Zachovat zalamov\u00e1n\u00ed \u0159\u00e1dk\u016f","text_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna."},table:{"table_delta_width":"50","cellprops_delta_width":"100",cell:"Bu\u0148ka",col:"Sloupec",row:"\u0158\u00e1dek",del:"Odstranit tabulku","copy_row_desc":"Kop\u00edrovat \u0159\u00e1dek tabulky","cut_row_desc":"Vyjmout \u0159\u00e1dek tabulky","paste_row_after_desc":"Vlo\u017eit \u0159\u00e1dek za","paste_row_before_desc":"Vlo\u017eit \u0159\u00e1dek p\u0159ed","props_desc":"Vlastnosti tabulky","cell_desc":"Vlastnosti bu\u0148ky","row_desc":"Vlastnosti \u0159\u00e1dku tabulky","merge_cells_desc":"Slou\u010dit bu\u0148ky","split_cells_desc":"Rozd\u011blit bu\u0148ky","delete_col_desc":"Odstranit sloupec tabulky","col_after_desc":"Vlo\u017eit sloupec za","col_before_desc":"Vlo\u017eit sloupec p\u0159ed","delete_row_desc":"Odstranit \u0159\u00e1dek tabulky","row_after_desc":"Vlo\u017eit \u0159\u00e1dek za","row_before_desc":"Vlo\u017eit \u0159\u00e1dek p\u0159ed",desc:"Vlo\u017eit novou tabulku","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Pokud obnov\u00edte ulo\u017een\u00fd obsah, ztrat\u00edte t\u00edm ve\u0161ker\u00fd obsah, kter\u00fd je pr\u00e1v\u011b v okn\u011b editoru.\n\nOpravdu chcete obnovit ulo\u017een\u00fd obsah?","restore_content":"Obnovit automaticky ulo\u017een\u00fd obsah.","unload_msg":"Proveden\u00e9 zm\u011bny mohou b\u00fdt ztraceny, jestli\u017ee opust\u00edte tuto str\u00e1nku."},fullscreen:{desc:"P\u0159epnout na celostr\u00e1nkov\u00e9 zobrazen\u00ed"},media:{"delta_width":"130",edit:"Upravit m\u00e9dia",desc:"Vlo\u017eit/upravit m\u00e9dia","delta_height":""},fullpage:{desc:"Vlastnosti dokumentu","delta_width":"110","delta_height":""},template:{desc:"Vlo\u017eit p\u0159eddefinovan\u00fd obsah ze \u0161ablony"},visualchars:{desc:"Zobrazen\u00ed skryt\u00fdch znak\u016f zap/vyp"},spellchecker:{desc:"P\u0159epnout kontrolu pravopisu",menu:"Nastaven\u00ed kontroly pravopisu","ignore_word":"Ignorovat slovo","ignore_words":"Ignorovat v\u0161e",langs:"Jazyky",wait:"\u010cekejte pros\u00edm...",sug:"N\u00e1pov\u011bda","no_sug":"\u017d\u00e1dn\u00e1 n\u00e1pov\u011bda","no_mpell":"Nebyly nalezeny \u017e\u00e1dn\u00e9 chyby.","learn_word":"Nau\u010dit slovo"},pagebreak:{desc:"Vlo\u017eit konec str\u00e1nky"},advlist:{types:"Typ",def:"V\u00fdchoz\u00ed","lower_alpha":"Mal\u00e1 p\u00edsmena","lower_greek":"Mal\u00e1 \u0159eck\u00e1 p\u00edsmena","lower_roman":"Mal\u00e9 \u0159\u00edmsk\u00e9 \u010d\u00edslice","upper_alpha":"Velk\u00e1 p\u00edsmena","upper_roman":"Velk\u00e9 \u0159\u00edmsk\u00e9 \u010d\u00edslice",circle:"Kole\u010dko",disc:"Punt\u00edk",square:"\u010ctvere\u010dek"},colors:{"333300":"Tmav\u011b olivov\u00e1","993300":"Tmav\u011b oran\u017eov\u00e1","000000":"\u010cern\u00e1","003300":"Tmav\u011b zelen\u00e1","003366":"Tmav\u011b azurov\u00e1","000080":"N\u00e1mo\u0159nick\u00e1 modr\u00e1","333399":"Indigo modr\u00e1","333333":"Tmav\u011b \u0161ed\u00e1","800000":"Tmav\u011b \u010derven\u00e1",FF6600:"Oran\u017eov\u00e1","808000":"Olivov\u00e1","008000":"Zelen\u00e1","008080":"Modrozelen\u00e1","0000FF":"Modr\u00e1","666699":"\u0160edomodr\u00e1","808080":"\u0160ed\u00e1",FF0000:"\u010cerven\u00e1",FF9900:"Jantarov\u00e1","99CC00":"\u017dlutozelen\u00e1","339966":"Mo\u0159sk\u00e1 zelen\u00e1","33CCCC":"Tyrkysov\u00e1","3366FF":"Kr\u00e1lovsk\u00e1 modr\u00e1","800080":"Nachov\u00e1","999999":"Sv\u011btle \u0161ed\u00e1",FF00FF:"Purpurov\u00e1",FFCC00:"Zlat\u00e1",FFFF00:"\u017dlut\u00e1","00FF00":"Limetkov\u00e1","00FFFF":"Vodn\u00ed","00CCFF":"Nebesk\u00e1 modr\u00e1","993366":"Hn\u011bd\u00e1",C0C0C0:"St\u0159\u00edbrn\u00e1",FF99CC:"R\u016f\u017eov\u00e1",FFCC99:"Broskvov\u00e1",FFFF99:"Sv\u011btle \u017elut\u00e1",CCFFCC:"Sv\u011btle zelen\u00e1",CCFFFF:"Sv\u011btle azurov\u00e1","99CCFF":"Sv\u011btl\u00e1 nebesk\u00e1 modr\u00e1",CC99FF:"\u0160vestkov\u00e1",FFFFFF:"B\u00edl\u00e1"},aria:{"rich_text_area":"Oblast s form\u00e1tovan\u00fdm textem"},wordcount:{words:"Po\u010det slov: "}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cy.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cy.js
new file mode 100644
index 000000000..51a6c0ea9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/cy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({cy:{common:{"more_colors":"Mwy o liwiau","invalid_data":"Gwall: Gwerthau allilys wedi mewnbynnu, mae\'r gwerthau yma wedi eu marcio mewn coch.","popup_blocked":"Rydym wedi sylwi fod eich popup-blocker wedi analluogi ffenest sy\'n darparu swyddogaeth cymhwysiad. Bydd rhaid i chi analluogi blocio popups ar gyfer y safle yma i ddefnyddio\'r offeryn yma.","clipboard_no_support":"Dim wedi\'i gynnal gan eich porwr, defnyddiwch Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Nid yw Cop\u00efo/Torri/Gludo ar gael mewn Mozilla a Firefox.\nYdych chi eisiau mwy o wybodaeth am y mater yma?","not_set":"-- Nid wedi osod --","class_name":"Dosbarth",browse:"Pori",close:"Cau",cancel:"Diddymu",update:"Diweddaru",insert:"Mewnosod",apply:"Gosod","edit_confirm":"Ydych chi eisiau defnyddio\'r modd WYSIWYG ar gyfer y textarea yma?","invalid_data_number":"Rhaid {#field} fod yn rhif","invalid_data_min":"Rhaid {#field} fod yn rhif fwy na {#min}","invalid_data_size":"Rhaid {#field} fod yn rhif neu ganran",value:"(gwerth)"},contextmenu:{full:"Llawn",right:"De",center:"Canol",left:"Chwith",align:"Aliniad"},insertdatetime:{"day_short":"Sul,Llu,Maw,Mer,Iau,Gwe,Sad,Sul","day_long":"Sul,Llun,Mawrth,Mercher,Iau,Gwener,Sadwrn,Sul","months_short":"Ion,Chw,Maw,Ebr,Mai,Meh,Gor,Aws,Med,Hyd,Tac,Rha","months_long":"Ionawr,Chwefror,Mawrth,Ebrill,Mai,Mehefin,Goffennaf,Awst,Medi,Hydref,Tachwedd,Rhagfyr","inserttime_desc":"Mewnosod amser","insertdate_desc":"Mewnosod dyddiad","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Argraffu"},preview:{"preview_desc":"Rhagolygu"},directionality:{"rtl_desc":"Cyfeiriad de i\'r chwith","ltr_desc":"Cyfeiriad chwith i\'r dde"},layer:{content:"Haen newydd...","absolute_desc":"Toglu lleoli absoliwt","backward_desc":"Symud n\u00f4l","forward_desc":"Symud ymlaen","insertlayer_desc":"Mewnosod haen newydd"},save:{"save_desc":"Cadw","cancel_desc":"Cadw pob newidiad"},nonbreaking:{"nonbreaking_desc":"Mewnosod n\u00f4d bwlch do-doriad"},iespell:{download:"ieSpell dim wedi\'i canfod. A ydych eisiau ei gosod rwan?","iespell_desc":"Rhedeg gwirio sillafu"},advhr:{"advhr_desc":"Mesurydd llorweddol","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emosiynau","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Canfod/Amnewid","search_desc":"Canfod","delta_width":"","delta_height":""},advimage:{"image_desc":"Mewnosod/golygu delwedd","delta_width":"","delta_height":""},advlink:{"link_desc":"Mewnosod/Golygu cyswllt","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Mewnosod/Golygu Priodoleddau","ins_desc":"Mewnosodiad","del_desc":"Dilead","acronym_desc":"Acronym","abbr_desc":"Talfyriad","cite_desc":"Dyfyniad","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Golygu Arddull CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Gludo rwan mewn modd testun plaen. Cliciwch eto i doglu n\u00f4l i fodd gludo normal.","plaintext_mode_sticky":"Gludo rwan mewn modd testun plaen. Cliciwch eto i doglu n\u00f4l i fodd gludo normal. Byddwch yn cael eich dychwelyd i fodd gludo normal ar \u00f4l gludo rhywbeth.","selectall_desc":"Dewis Pobpeth","paste_word_desc":"Gludo o Word","paste_text_desc":"Gludo fel Testun Plaen"},"paste_dlg":{"word_title":"Defnyddiwch CTRL+V ar eich bysellfwrdd i ludo\'r testun i fewn i\'r ffenest.","text_linebreaks":"Cadw toriadau llinell","text_title":"Defnyddiwch CTRL+V ar eich bysellfwrdd i ludo\'r testun i fewn i\'r ffenest."},table:{cell:"Cell",col:"Colofn",row:"Rhes",del:"Dileu tabl","copy_row_desc":"Cop\u00efo rhes tabl","cut_row_desc":"Torri rhes tabl","paste_row_after_desc":"Gludo rhes tabl ar \u00f4l","paste_row_before_desc":"Gludo rhes tabl cyn","props_desc":"Priodweddau tabl","cell_desc":"Priodweddau cell tabl","row_desc":"Priodweddau rhes tabl","merge_cells_desc":"Cyfuno celloedd tabl","split_cells_desc":"Hollti celloedd tabl cyfuniedig","delete_col_desc":"Tynnu colofn","col_after_desc":"Mewnosod colofn ar \u00f4l","col_before_desc":"Mewnosod colofn cyn","delete_row_desc":"Dileu rhes","row_after_desc":"Mewnosod rhes ar \u00f4l","row_before_desc":"Mewnosod rhes cyn",desc:"Mewnosod tabl newydd","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Os adferwch chi\'r cynnwys cadwedig, byddwch yn colli\'r holl cynnwys sydd yn bresennol yn y golygydd.\n\nA ydych chi\'n si\u0175r eich bod eisiau adfer y cynnwys cadwedig?.","restore_content":"Adfer cynnwys awto-cadwedig.","unload_msg":"Bydd eich newidiadau yn cael eu colli os byddwch yn llywio i ffwrdd o\'r tudalen yma."},fullscreen:{desc:"Togl Modd Sgrin Llawn"},media:{edit:"Golygu Cyfrwng a Fewnosodwyd",desc:"Mewnosod/Golygu Cyfrwng a Fewnosodwyd","delta_height":"","delta_width":""},fullpage:{desc:"Priodweddau dogfen","delta_width":"","delta_height":""},template:{desc:"Mewnosod cynnwys templed rhagosodol"},visualchars:{desc:"Nodau rheolaeth ymlaen/i ffwrdd."},spellchecker:{desc:"Toglu cywiriadau",menu:"Gosodiadau cywiriadau","ignore_word":"Anwybyddu gair","ignore_words":"Anwybyddu pob un",langs:"Ieithoedd",wait:"Aroswch, os gwelwch yn dda...",sug:"Awgrymiadau","no_sug":"Dim awgrymiadau","no_mpell":"Dim camsillafiadau wedi\'i canfod.","learn_word":"Dysgu gair"},pagebreak:{desc:"Mewnosod toriad tudalen."},advlist:{types:"Mathau",def:"Rhagosodedig","lower_alpha":"Alffa is","lower_greek":"Groegaiddd is","lower_roman":"Rhufeinig is","upper_alpha":"Alffa uwch","upper_roman":"Rhufeinig uwch",circle:"Cylch",disc:"Disg",square:"Sgw\u00e2r"},colors:{"333300":"Olif tywyll","993300":"Oren llosgedig","000000":"Du","003300":"Gwyrdd tywyll","003366":"Asur tywyll","000080":"Glas Nefi","333399":"Indigo","333333":"Llwyd tywyll iawn","800000":"Mar\u0175n",FF6600:"Oren","808000":"Olif","008000":"Gwyrdd","008080":"Teal","0000FF":"Glas","666699":"Glas llwydaidd","808080":"Llwyd",FF0000:"Coch",FF9900:"Melyngoch","99CC00":"Melyn gwyrdd","339966":"Gwyrdd y m\u00f4r","33CCCC":"Gwyrddlas","3366FF":"Glas brenhinol","800080":"Porffor","999999":"Llwyd canolig",FF00FF:"Magenta",FFCC00:"Aur",FFFF00:"Melyn","00FF00":"Leim","00FFFF":"Acwa","00CCFF":"Glas yr awyr","993366":"Brown",C0C0C0:"Arian",FF99CC:"Pinc",FFCC99:"Eirinen wlanog",FFFF99:"Melyn golau",CCFFCC:"Gwyrdd ysgafn",CCFFFF:"Cyan ysgafn","99CCFF":"Glas yr awyr golau",CC99FF:"Plwm",FFFFFF:"Gwyn"},aria:{"rich_text_area":"Ardal Testun Cyfoethog"},wordcount:{words:"Geiriau:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/da.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/da.js
new file mode 100644
index 000000000..36c75407d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/da.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({da:{common:{"more_colors":"Flere farver","invalid_data":"Fejl: Forkerte v\u00e6rdier indtastet i felter markeret med r\u00f8d.","popup_blocked":"Undskyld, men vi har noteret os, at din popup-blocker har forhindret et vindue, der giver programmet funktionalitet, at \u00e5bne op. Hvis du vil have den fulde funktionalitet, m\u00e5 du sl\u00e5 popup-blockeren fra for dette websted.","clipboard_no_support":"P\u00e5 nuv\u00e6rende tidspunkt ikke supporteret af din browser. Anvend i stedet genvejene p\u00e5 tastaturet.","clipboard_msg":"Kopier/Klip/inds\u00e6t er ikke muligt i Mozilla eller Firefox.\nVil du have mere information om dette emne?","not_set":"-- Ikke sat --","class_name":"Klasse",browse:"Gennemse",close:"Luk",cancel:"Annuller",update:"Opdater",insert:"Inds\u00e6t",apply:"Anvend","edit_confirm":"Vil du bruge den avancerede tekstredigering?","invalid_data_number":"{#field} skal v\u00e6re et tal","invalid_data_min":"{#field} skal v\u00e6re et tal {#min}","invalid_data_size":"{#field} skal v\u00e6re et tal eller en procentsats",value:"(v\u00e6rdi)"},contextmenu:{full:"Lige marginer",right:"H\u00f8jre",center:"Centreret",left:"Venstre",align:"Justering"},insertdatetime:{"day_short":"S\u00f8n,Man,Tir,Ons,Tors,Fre,L\u00f8r,S\u00f8n","day_long":"S\u00f8ndag,Mandag,Tirsdag,Onsdag,Torsdag,Fredag,L\u00f8rdag,S\u00f8ndag","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","months_long":"Januar,Februar,Marts,April,Maj,Juni,Juli,August,September,Oktober,November,December","inserttime_desc":"Inds\u00e6t klokkeslet","insertdate_desc":"Inds\u00e6t dato","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Udskriv"},preview:{"preview_desc":"Vis udskrift"},directionality:{"rtl_desc":"Retning h\u00f8jre mod venstre","ltr_desc":"Retning venstre mod h\u00f8jre"},layer:{content:"Nyt lag...","absolute_desc":"Sl\u00e5 absolut positionering til/fra","backward_desc":"Flyt bagud","forward_desc":"Flyt fremad","insertlayer_desc":"Inds\u00e6t nyt lag"},save:{"save_desc":"Gem","cancel_desc":"Annuller alle \u00e6ndringer"},nonbreaking:{"nonbreaking_desc":"Inds\u00e6t et blanktegn"},iespell:{download:"ieSpell blev ikke fundet. Vil du installere det nu?","iespell_desc":"Udf\u00f8r stavekontrol"},advhr:{"advhr_desc":"Horisontal linie","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hum\u00f8rikoner","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f8g/erstat","search_desc":"S\u00f8g","delta_width":"","delta_height":""},advimage:{"image_desc":"Inds\u00e6t/rediger billede","delta_width":"","delta_height":""},advlink:{"delta_width":"40","link_desc":"Inds\u00e6t/rediger link","delta_height":""},xhtmlxtras:{"attribs_desc":"Inds\u00e6t/rediger attributter","ins_desc":"Inds\u00e6ttelse","del_desc":"Sletning","acronym_desc":"Akronym","abbr_desc":"Forkortelse","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Rediger CSS stil","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Inds\u00e6t er nu i ikke-formateret modus. Klik igen for at skfite tilbage til almindelig inds\u00e6t modus.","plaintext_mode_sticky":"Inds\u00e6t er nu i ikke-formateret modus. Klik igen for at skfite tilbage til almindelig inds\u00e6t modus. Efter du har indsat noget s\u00e6ttes du automatisk tilbaeg til alminde inds\u00e6t modus.","selectall_desc":"V\u00e6lg alle","paste_word_desc":"Inds\u00e6t fra Word","paste_text_desc":"Inds\u00e6t ikke-formatteret tekst"},"paste_dlg":{"word_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten.","text_linebreaks":"Bevar linieskift","text_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten."},table:{cell:"Celle",col:"Kolonne",row:"R\u00e6kke",del:"Slet tabel","copy_row_desc":"Kopier r\u00e6kke","cut_row_desc":"Klip r\u00e6kke","paste_row_after_desc":"Inds\u00e6t r\u00e6kke efter","paste_row_before_desc":"Inds\u00e6t r\u00e6kke f\u00f8r","props_desc":"Tabelegenskaber","cell_desc":"Celleegenskaber","row_desc":"R\u00e6kkeegenskaber","merge_cells_desc":"Flet celler","split_cells_desc":"Opdel flettede celler","delete_col_desc":"Slet kolonne","col_after_desc":"Inds\u00e6t kolonne efter","col_before_desc":"Inds\u00e6t kolonne f\u00f8r","delete_row_desc":"Slet r\u00e6kke","row_after_desc":"Inds\u00e6t r\u00e6kke efter","row_before_desc":"Inds\u00e6t r\u00e6kke f\u00f8r",desc:"Inds\u00e6t tabel","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Hvis du genskaber det gemte indhold vil du miste al det indhold der lige nu er i editoren.nnEr du sikker p\u00e5 du vil genskabe det gemte indhold?","restore_content":"Genskab det gemte indhold.","unload_msg":"Har du foretaget nogle \u00e6ndringer, vil de g\u00e5 tabt, hvis du navigerer v\u00e6k fra denne side."},fullscreen:{desc:"Vis/skjul fuldsk\u00e6rmstilstand"},media:{edit:"Rediger indlejret mediefil",desc:"Inds\u00e6t/rediger indlejret mediefil","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentegenskaber","delta_width":"","delta_height":""},template:{desc:"Inds\u00e6t pr\u00e6defineret skabelonindhold"},visualchars:{desc:"Vis/Skjul visuelle kontroltegn."},spellchecker:{desc:"Vis/skjul stavekontrol",menu:"Indstillinger for stavekontrol","ignore_word":"Ignorer ord","ignore_words":"Ignorer alle",langs:"Sprog",wait:"Vent venligst...",sug:"Forslag","no_sug":"Ingen forslag","no_mpell":"Ingen stavefejl fundet.","learn_word":"L\u00e6r ordet"},pagebreak:{desc:"Inds\u00e6t sideskift."},advlist:{types:"Typer",def:"Standard","lower_alpha":"Sm\u00e5 alfa","lower_greek":"Sm\u00e5 gr\u00e6ske","lower_roman":"Sm\u00e5 romertal","upper_alpha":"Store alfa","upper_roman":"Store romertal",circle:"Cirkel",disc:"Prik",square:"Firkant"},colors:{"333300":"M\u00f8rk oliven","993300":"Br\u00e6ndt orange","000000":"Sort","003300":"M\u00f8rkegr\u00f8n","003366":"Bl\u00e5 azur","000080":"Navy bl\u00e5","333399":"Indigo","333333":"Meget m\u00f8rk gr\u00e5","800000":"Maroon",FF6600:"Orange","808000":"Oliven","008000":"Gr\u00f8n","008080":"Teal","0000FF":"Bl\u00e5","666699":"Gr\u00e5bl\u00e5","808080":"Gr\u00e5",FF0000:"R\u00f8d",FF9900:"Amber","99CC00":"Gulgr\u00f8n","339966":"S\u00f8gr\u00f8n","33CCCC":"Turkis","3366FF":"Royal bl\u00e5","800080":"Violet","999999":"Medium gr\u00e5",FF00FF:"Magenta",FFCC00:"Guld",FFFF00:"Gul","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Himmelbl\u00e5","993366":"Brun",C0C0C0:"S\u00f8lv",FF99CC:"Pink",FFCC99:"Fersken",FFFF99:"Lysgul",CCFFCC:"Bleggr\u00f8n",CCFFFF:"Pale cyan","99CCFF":"Lys himmelb\u00e6\u00e5",CC99FF:"Plum",FFFFFF:"Hvis"},aria:{"rich_text_area":"Tekstomr\u00e5de med formatering"},wordcount:{words:"Ord:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/de.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/de.js
new file mode 100644
index 000000000..149440626
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/de.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({de:{common:{"more_colors":"Weitere Farben","invalid_data":"Fehler: Sie haben ung\u00fcltige Werte eingegeben (rot markiert).","popup_blocked":"Leider hat Ihr Popup-Blocker ein Fenster unterbunden, das f\u00fcr den Betrieb dieses Programms n\u00f6tig ist. Bitte deaktivieren Sie den Popup-Blocker f\u00fcr diese Seite.","clipboard_no_support":"Wird derzeit in Ihrem Browser nicht unterst\u00fctzt. Bitte benutzen Sie stattdessen die Tastenk\u00fcrzel.","clipboard_msg":"Kopieren, Ausschneiden und Einf\u00fcgen sind im Mozilla Firefox nicht m\u00f6glich.\nM\u00f6chten Sie mehr \u00fcber dieses Problem erfahren?","not_set":"- unbestimmt -","class_name":"CSS-Klasse",browse:"Durchsuchen",close:"Schlie\u00dfen",cancel:"Abbrechen",update:"Aktualisieren",insert:"Einf\u00fcgen",apply:"\u00dcbernehmen","edit_confirm":"M\u00f6chten Sie diesen Text jetzt bearbeiten?","invalid_data_number":"{#field} muss eine Zahl sein","invalid_data_min":"{#field} muss eine Zahl gr\u00f6\u00dfer als {#min} sein","invalid_data_size":"{#field} muss eine Zahl oder ein Prozentwert sein",value:"(Wert)"},contextmenu:{full:"Blocksatz",right:"Rechtsb\u00fcndig",center:"Zentriert",left:"Linksb\u00fcndig",align:"Ausrichtung"},insertdatetime:{"day_short":"So,Mo,Di,Mi,Do,Fr,Sa,So","day_long":"Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag","months_short":"Jan,Feb,M\u00e4r,Apr,Mai,Juni,Juli,Aug,Sept,Okt,Nov,Dez","months_long":"Januar,Februar,M\u00e4rz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember","inserttime_desc":"Zeit einf\u00fcgen","insertdate_desc":"Datum einf\u00fcgen","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Drucken"},preview:{"preview_desc":"Vorschau"},directionality:{"rtl_desc":"Schrift von rechts nach links","ltr_desc":"Schrift von links nach rechts"},layer:{content:"Neue Ebene...","absolute_desc":"Absolute Positionierung","backward_desc":"Nach hinten legen","forward_desc":"Nach vorne holen","insertlayer_desc":"Neue Ebene einf\u00fcgen"},save:{"save_desc":"Speichern","cancel_desc":"Alle \u00c4nderungen verwerfen"},nonbreaking:{"nonbreaking_desc":"Gesch\u00fctztes Leerzeichen einf\u00fcgen"},iespell:{download:"ieSpell konnte nicht gefunden werden. Wollen Sie es installieren?","iespell_desc":"Rechtschreibpr\u00fcfung"},advhr:{"advhr_desc":"Trennlinie","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smilies","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Suchen/Ersetzen","search_desc":"Suchen","delta_width":"","delta_height":""},advimage:{"image_desc":"Bild einf\u00fcgen/ver\u00e4ndern","delta_width":"","delta_height":""},advlink:{"link_desc":"Link einf\u00fcgen/ver\u00e4ndern","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Attribute einf\u00fcgen/bearbeiten","ins_desc":"Eingef\u00fcgter Text","del_desc":"Entfernter Text","acronym_desc":"Akronym","abbr_desc":"Abk\u00fcrzung","cite_desc":"Quellenangabe","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS-Styles bearbeiten","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Einf\u00fcgemodus ist nun \"Nur Text\". Erneut klicken stellt den Normalmodus wieder her.","plaintext_mode_sticky":"Einf\u00fcgemodus ist nun \"Nur Text\". Erneut klicken (oder das Einf\u00fcgen aus der Zwischenablage) stellt den Normalmodus wieder her.","selectall_desc":"Alles ausw\u00e4hlen","paste_word_desc":"Mit Formatierungen (aus Word) einf\u00fcgen","paste_text_desc":"Als einfachen Text einf\u00fcgen"},"paste_dlg":{"word_title":"Dr\u00fccken Sie auf Ihrer Tastatur Strg+V, um den Text einzuf\u00fcgen.","text_linebreaks":"Zeilenumbr\u00fcche beibehalten","text_title":"Dr\u00fccken Sie auf Ihrer Tastatur Strg+V, um den Text einzuf\u00fcgen."},table:{"cellprops_delta_width":"150",cell:"Zelle",col:"Spalte",row:"Zeile",del:"Tabelle l\u00f6schen","copy_row_desc":"Zeile kopieren","cut_row_desc":"Zeile ausschneiden","paste_row_after_desc":"Zeile unterhalb aus der Zwischenablage einf\u00fcgen","paste_row_before_desc":"Zeile oberhalb aus der Zwischenablage einf\u00fcgen","props_desc":"Eigenschaften der Tabelle","cell_desc":"Eigenschaften der Zelle","row_desc":"Eigenschaften der Zeile","merge_cells_desc":"Zellen verbinden","split_cells_desc":"Verbundene Zellen trennen","delete_col_desc":"Spalte l\u00f6schen","col_after_desc":"Spalte rechts einf\u00fcgen","col_before_desc":"Spalte links einf\u00fcgen","delete_row_desc":"Zeile l\u00f6schen","row_after_desc":"Zeile unterhalb einf\u00fcgen","row_before_desc":"Zeile oberhalb einf\u00fcgen",desc:"Tabelle erstellen/bearbeiten","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Wenn Sie den Inhalt wiederherstellen, gehen die aktuellen Daten im Editor verloren.\n\nSind sie sicher, dass Sie den Inhalt wiederherstellen m\u00f6chten?","restore_content":"Automatisch gespeicherten Inhalt wiederherstellen.","unload_msg":"Ihre \u00c4nderungen werden verloren gehen, wenn Sie die Seite verlassen."},fullscreen:{desc:"Vollbildschirm"},media:{edit:"Multimediaeinbettung bearbeiten",desc:"Multimedia einbetten/bearbeiten","delta_height":"","delta_width":""},fullpage:{desc:"Dokument-Eigenschaften","delta_width":"","delta_height":""},template:{desc:"Inhalt aus Vorlage einf\u00fcgen"},visualchars:{desc:"Sichtbarkeit der Steuerzeichen an/aus"},spellchecker:{desc:"Rechtschreibpr\u00fcfung an/aus",menu:"Einstellungen der Rechtschreibpr\u00fcfung","ignore_word":"Wort ignorieren","ignore_words":"Alle ignorieren",langs:"Sprachen",wait:"Bitte warten...",sug:"Vorschl\u00e4ge","no_sug":"Keine Vorschl\u00e4ge","no_mpell":"Keine Rechtschreibfehler gefunden.","learn_word":"Zum W\u00f6rterbuch hinzuf\u00fcgen"},pagebreak:{desc:"Seitenumbruch einf\u00fcgen"},advlist:{types:"Typen",def:"Standard","lower_alpha":"a. b. c.","lower_greek":"1. 2. 3.","lower_roman":"i. ii. iii.","upper_alpha":"A. B. C.","upper_roman":"I. II. III.",circle:"Kreis",disc:"Punkt",square:"Quadrat"},colors:{"333300":"Dunkeloliv","993300":"Orange","000000":"Schwarz","003300":"Dunkelgr\u00fcn","003366":"Dunkles himmelblau","000080":"Marineblau","333399":"Indigoblau","333333":"Sehr dunkelgrau","800000":"Kastanienbraun",FF6600:"Orange","808000":"Oliv","008000":"Gr\u00fcn","008080":"Blaugr\u00fcn","0000FF":"Blau","666699":"Graublau","808080":"Grau",FF0000:"Rot",FF9900:"Bernsteinfarben","99CC00":"Gelbgr\u00fcn","339966":"Meergr\u00fcn","33CCCC":"T\u00fcrkis","3366FF":"K\u00f6nigsblau","800080":"Violett","999999":"Mittelgrau",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Gelb","00FF00":"Hellgr\u00fcn","00FFFF":"Aquamarinblau","00CCFF":"Himmelblau","993366":"Braun",C0C0C0:"Silber",FF99CC:"Rosa",FFCC99:"Pfirsichfarben",FFFF99:"Hellgelb",CCFFCC:"Blassgr\u00fcn",CCFFFF:"Blasst\u00fcrkis","99CCFF":"Helles himmelblau",CC99FF:"Pflaumenblau",FFFFFF:"Wei\u00df"},aria:{"rich_text_area":"Rich Text Bereich"},wordcount:{words:"W\u00f6rter: "}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/dv.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/dv.js
new file mode 100644
index 000000000..950e8c9eb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/dv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({dv:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"\u0789\u07a8\u0788\u07a6\u078e\u07aa\u078c\u07aa \u078c\u07a8\u0794\u07a6\u0784\u07ad\u078a\u07aa\u0785\u07a7\u078e\u07ac \u0784\u07b0\u0783\u07a6\u0787\u07aa\u0792\u07a6\u0783\u07aa \u0790\u07a6\u0795\u07af\u0793\u07b0 \u0782\u07aa\u0786\u07aa\u0783\u07a7\u078c\u07a9\u0788\u07ac \u0786\u07a9\u0784\u07af\u0791\u07b0\u078e\u07ac \u0786\u07a9\u078c\u07a6\u0787\u07b0 \u0784\u07ad\u0782\u07aa\u0782\u07b0\u0786\u07aa\u0783\u07a6\u0787\u07b0\u0788\u07a7.","clipboard_msg":"\u0789\u07ae\u0792\u07a8\u0787\u07b0\u078d\u07a7 \u0787\u07a6\u078b\u07a8 \u078a\u07a6\u0794\u07a7\u0783\u078a\u07ae\u0786\u07b0\u0790\u07b0\u078e\u07a6\u0787\u07a8 \u0786\u07ae\u0795\u07a9/\u0786\u07a6\u0793\u07b0/\u0795\u07ad\u0790\u07b0\u0793\u07b0 \u0782\u07aa\u0786\u07aa\u0783\u07ac\u0788\u07ac.\n \u0789\u07a8\u0789\u07a6\u0787\u07b0\u0790\u07a6\u078d\u07a6 \u0787\u07a8\u078c\u07aa\u0783\u07a6\u0781\u07b0 \u0787\u07ae\u0785\u07aa\u0782\u07b0\u078a\u07a8\u078d\u07aa\u0788\u07aa\u0789\u07a6\u0781\u07b0 \u0784\u07ad\u0782\u07aa\u0782\u07b0\u078a\u07aa\u0785\u07aa\u0788\u07ad\u078c\u07a6\u061f","not_set":"-- \u0780\u07a6\u0789\u07a6\u0787\u07ac\u0787\u07b0 \u0782\u07aa\u0796\u07ac\u0780\u07ac --","class_name":"\u0786\u07b0\u078d\u07a7\u0790\u07b0",browse:"\u0784\u07a6\u0787\u07b0\u078d\u07a6\u0788\u07a7",close:"\u0782\u07a8\u0789\u07aa\u0782\u07a9",cancel:"\u0786\u07ac\u0782\u07b0\u0790\u07a6\u078d\u07b0",update:"\u0784\u07a6\u078b\u07a6\u078d\u07aa\u0786\u07aa\u0783\u07a6\u0787\u07b0\u0788\u07a7",insert:"\u0787\u07a8\u078c\u07aa\u0783\u07aa\u0786\u07aa\u0783\u07a6\u0787\u07b0\u0788\u07a7",apply:"\u0790\u07ad\u0788\u07b0","edit_confirm":"\u0789\u07a8\u0793\u07ac\u0786\u07b0\u0793\u07b0\u0790\u07b0\u0784\u07ae\u0786\u07b0\u0790\u07b0\u078e\u07a6\u0787\u07a8 \u0787\u07ac\u0791\u07a8\u0793\u07a7\u0783 \u0784\u07ad\u0782\u07aa\u0782\u07b0\u0786\u07aa\u0783\u07a6\u0782\u07b0 \u0784\u07ad\u0782\u07aa\u0782\u07b0\u078a\u07aa\u0785\u07aa\u078c\u07af\u061f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/el.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/el.js
new file mode 100644
index 000000000..084193b85
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/el.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({el:{common:{"more_colors":"\u03a0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03b1","invalid_data":"Error: Invalid values entered, these are marked in red.","popup_blocked":"\u0388\u03bd\u03b1 popup-blocker \u03c0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03ad\u03c7\u03b5\u03b9 \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03b9 \u03ad\u03bd\u03b1 \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf \u03b1\u03c0\u03b1\u03c1\u03b1\u03af\u03c4\u03b7\u03c4\u03bf \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae. \u03a0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03c4\u03bf \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03b3\u03b9\u03b1 \u03c4\u03b7\u03bd \u03b9\u03c3\u03c4\u03bf\u03c3\u03b5\u03bb\u03af\u03b4\u03b1 \u03b1\u03c5\u03c4\u03ae \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c0\u03bb\u03ae\u03c1\u03c9\u03c2 \u03c4\u03b7\u03bd \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae.","clipboard_no_support":"\u0394\u03b5\u03bd \u03c5\u03c0\u03bf\u03c3\u03c4\u03b7\u03c1\u03af\u03b6\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c0\u03cc \u03c4\u03bf\u03bd \u03c6\u03c5\u03bb\u03bb\u03bf\u03bc\u03b5\u03c4\u03c1\u03b7\u03c4\u03ae \u03c3\u03b1\u03c2, \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03b9\u03c2 \u03c3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2 \u03c0\u03bb\u03b7\u03ba\u03c4\u03c1\u03bf\u03bb\u03bf\u03b3\u03af\u03bf\u03c5.","clipboard_msg":"\u039f\u03b9 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b5\u03c2 \u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae/\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae/\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b5\u03c2 \u03c3\u03b5 Mozilla \u03ba\u03b1\u03b9 Firefox.\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 ;","not_set":"-- \u039c\u03b7 \u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf --","class_name":"\u039a\u03bb\u03ac\u03c3\u03b7",browse:"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7",close:"\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf",cancel:"\u0386\u03ba\u03c5\u03c1\u03bf",update:"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7",insert:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae",apply:"\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae","edit_confirm":"\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03b5\u03c4\u03b5 \u03c4\u03b7\u03bd \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 WYSIWYG ;","invalid_data_number":"{#field} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2","invalid_data_min":"{#field} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03bc\u03b5\u03b3\u03b1\u03bb\u03cd\u03c4\u03b5\u03c1\u03bf\u03c2 \u03c4\u03bf\u03c5 {#min}","invalid_data_size":"{#field} \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b1\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03ae \u03c0\u03bf\u03c3\u03bf\u03c3\u03c4\u03cc",value:"(value)"},contextmenu:{full:"\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2",right:"\u0394\u03b5\u03be\u03b9\u03ac",center:"\u039a\u03ad\u03bd\u03c4\u03c1\u03bf",left:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",align:"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7"},insertdatetime:{"day_short":"\u039a\u03c5,\u0394\u03b5,\u03a4\u03c1,\u03a4\u03b5\u03c4,\u03a0\u03ad\u03bc,\u03a0\u03b1\u03c1,\u03a3\u03b1\u03b2","day_long":"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae,\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1,\u03a4\u03c1\u03af\u03c4\u03b7,\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7,\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7,\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae,\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf","months_short":"\u0399\u03b1\u03bd,\u03a6\u03b5\u03b2,\u039c\u03ac\u03c1,\u0391\u03c0\u03c1,\u039c\u03ac\u03b9,\u0399\u03bf\u03cd\u03bd,\u0399\u03bf\u03cd\u03bb,\u0391\u03cd\u03b3,\u03a3\u03b5\u03c0,\u039f\u03ba\u03c4,\u039d\u03bf\u03ad,\u0394\u03b5\u03ba","months_long":"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2,\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2,\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2,\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2,\u039c\u03ac\u03b9\u03bf\u03c2,\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2,\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2,\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2,\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2,\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2,\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2,\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2","inserttime_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03ce\u03c1\u03b1\u03c2","insertdate_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b7\u03bc\u03ad\u03c1\u03b1\u03c2","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7"},preview:{"preview_desc":"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7"},directionality:{"rtl_desc":"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b4\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","ltr_desc":"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac"},layer:{content:"\u039d\u03ad\u03bf layer...","absolute_desc":"\u0391\u03c0\u03cc\u03bb\u03c5\u03c4\u03b7/\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ae \u03c4\u03bf\u03c0\u03bf\u03b8\u03ad\u03c4\u03b7\u03c3\u03b7","backward_desc":"\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03b1\u03c3\u03ba\u03ae\u03bd\u03b9\u03bf","forward_desc":"\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c0\u03c1\u03bf\u03c3\u03ba\u03ae\u03bd\u03b9\u03bf","insertlayer_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03bd\u03ad\u03bf\u03c5 layer"},save:{"save_desc":"\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7","cancel_desc":"\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03b1\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd"},nonbreaking:{"nonbreaking_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae non-breaking \u03ba\u03b5\u03bd\u03bf\u03cd \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1"},iespell:{download:"\u03a4\u03bf ieSpell \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5. \u039d\u03b1 \u03ba\u03b1\u03c4\u03ad\u03b2\u03b5\u03b9 \u03c4\u03ce\u03c1\u03b1 ;","iespell_desc":"\u0395\u03ba\u03c4\u03ad\u03bb\u03b5\u03c3\u03b7 \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5 \u03bf\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03af\u03b1\u03c2"},advhr:{"advhr_desc":"\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u03a3\u03c5\u03bd\u03b1\u03b9\u03c3\u03b8\u03ae\u03bc\u03b1\u03c4\u03b1","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7/\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7","search_desc":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7","delta_width":"","delta_height":""},advimage:{"image_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","delta_width":"","delta_height":""},advlink:{"delta_width":"50","link_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","delta_height":""},xhtmlxtras:{"attribs_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b9\u03b4\u03b9\u03bf\u03c4\u03ae\u03c4\u03c9\u03bd","ins_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae","del_desc":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae","acronym_desc":"\u0391\u03ba\u03c1\u03bf\u03bd\u03cd\u03bc\u03b9\u03bf","abbr_desc":"\u03a3\u03c5\u03bd\u03c4\u03bf\u03bc\u03bf\u03b3\u03c1\u03b1\u03c6\u03af\u03b1","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03a3\u03c4\u03c5\u03bb CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u0397 \u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03ce\u03c1\u03b1 \u03c3\u03b5 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03bb\u03bf\u03cd \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03be\u03b1\u03bd\u03ac \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03c0\u03b1\u03bd\u03ad\u03bb\u03b8\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03ba\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03ae \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7\u03c2.","plaintext_mode_sticky":"\u0397 \u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b5\u03af\u03bd\u03b1\u03b9 \u03c4\u03ce\u03c1\u03b1 \u03c3\u03b5 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b1\u03c0\u03bb\u03bf\u03cd \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5. \u039a\u03ac\u03bd\u03c4\u03b5 \u03ba\u03bb\u03b9\u03ba \u03be\u03b1\u03bd\u03ac \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03b5\u03c0\u03b1\u03bd\u03ad\u03bb\u03b8\u03b5\u03c4\u03b5 \u03c3\u03c4\u03b7\u03bd \u03ba\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03ae \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7\u03c2. \u0391\u03c6\u03bf\u03cd \u03b5\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03ae\u03c3\u03b5\u03c4\u03b5 \u03ba\u03ac\u03c4\u03b9 \u03b8\u03b1 \u03b5\u03c0\u03b9\u03c3\u03c4\u03c1\u03ad\u03c8\u03b5\u03c4\u03b5 \u03c3\u03b5 \u03ba\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03ae \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03b7\u03c3\u03b7\u03c2.","selectall_desc":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03cc\u03bb\u03c9\u03bd","paste_word_desc":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b1\u03c0\u03cc \u03c4\u03bf Word","paste_text_desc":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03c9\u03c2 \u03b1\u03c0\u03bb\u03cc \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf"},"paste_dlg":{"word_title":"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 CTRL+V \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf.","text_linebreaks":"\u039d\u03b1 \u03ba\u03c1\u03b1\u03c4\u03b7\u03b8\u03bf\u03cd\u03bd \u03c4\u03b1 linebreaks","text_title":"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 CTRL+V \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf."},table:{"cellprops_delta_width":"60",cell:"\u039a\u03b5\u03bb\u03af",col:"\u03a3\u03c4\u03ae\u03bb\u03b7",row:"\u0393\u03c1\u03b1\u03bc\u03bc\u03ae",del:"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","copy_row_desc":"\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","cut_row_desc":"\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","paste_row_after_desc":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1 \u03bc\u03b5\u03c4\u03ac","paste_row_before_desc":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1 \u03c0\u03c1\u03b9\u03bd","props_desc":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","cell_desc":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_desc":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","merge_cells_desc":"\u03a3\u03c5\u03b3\u03c7\u03ce\u03bd\u03b5\u03c5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","split_cells_desc":"\u0394\u03b9\u03b1\u03c7\u03c9\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03c5\u03b3\u03c7\u03c9\u03bd\u03b5\u03c5\u03bc\u03ad\u03bd\u03c9\u03bd \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","delete_col_desc":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2","col_after_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03bc\u03b5\u03c4\u03ac","col_before_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03ae\u03bb\u03b7\u03c2 \u03c0\u03c1\u03b9\u03bd","delete_row_desc":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","row_after_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03bc\u03b5\u03c4\u03ac","row_before_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03c1\u03b9\u03bd",desc:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03bd\u03ad\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u0395\u03ac\u03bd \u03b5\u03c0\u03b1\u03bd\u03b1\u03c6\u03ad\u03c1\u03b5\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf, \u03b8\u03b1 \u03c7\u03ac\u03c3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03c0\u03bf\u03c5 \u03b2\u03c1\u03af\u03c3\u03ba\u03b5\u03c4\u03b1\u03b9 \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7 \u03c3\u03c4\u03b9\u03b3\u03bc\u03ae \u03c3\u03c4\u03bf\u03bd editor.nn\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03bd\u03b1 \u03b3\u03af\u03bd\u03b5\u03b9 \u03b5\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c4\u03bf\u03c5 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5;.","restore_content":"\u0395\u03c0\u03b1\u03bd\u03b1\u03c6\u03bf\u03c1\u03ac \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c0\u03bf\u03c5 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03b8\u03b7\u03ba\u03b5 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1.","unload_msg":"\u039f\u03b9 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2 \u03c0\u03bf\u03c5 \u03ba\u03ac\u03bd\u03b1\u03c4\u03b5 \u03b8\u03b1 \u03c7\u03b1\u03b8\u03bf\u03cd\u03bd \u03b1\u03bd \u03c6\u03cd\u03b3\u03b5\u03c4\u03b5 \u03c3\u03b5 \u03ac\u03bb\u03bb\u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1."},fullscreen:{desc:"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03c0\u03bb\u03ae\u03c1\u03bf\u03c5\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7\u03c2"},media:{"delta_width":"50",edit:"\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03c9\u03bd media",desc:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03c9\u03bd media","delta_height":""},fullpage:{desc:"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c6\u03bf\u03c5","delta_width":"140","delta_height":""},template:{desc:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03c0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf"},visualchars:{desc:"\u039f\u03c0\u03c4\u03b9\u03ba\u03bf\u03af \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b5\u03c2 \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5 \u03bd\u03b1\u03b9/\u03cc\u03c7\u03b9."},spellchecker:{desc:"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03bf\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03bf\u03cd \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5",menu:"\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03bf\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03bf\u03cd \u03b5\u03bb\u03ad\u03b3\u03c7\u03bf\u03c5","ignore_word":"\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7 \u03bb\u03ad\u03be\u03b7\u03c2","ignore_words":"\u03a0\u03b1\u03c1\u03ac\u03b2\u03bb\u03b5\u03c8\u03b7 \u03cc\u03bb\u03c9\u03bd",langs:"\u0393\u03bb\u03ce\u03c3\u03c3\u03b5\u03c2",wait:"\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03c0\u03b5\u03c1\u03b9\u03bc\u03ad\u03bd\u03b5\u03c4\u03b5...",sug:"\u03a0\u03c1\u03bf\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2","no_sug":"\u03a7\u03c9\u03c1\u03af\u03c2 \u03c0\u03c1\u03bf\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2","no_mpell":"\u0394\u03b5 \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b1\u03bd \u03bf\u03c1\u03b8\u03bf\u03b3\u03c1\u03b1\u03c6\u03b9\u03ba\u03ac \u03bb\u03ac\u03b8\u03b7.","learn_word":"\u0395\u03ba\u03bc\u03ac\u03b8\u03b7\u03c3\u03b7 \u03bb\u03ad\u03be\u03b7\u03c2"},pagebreak:{desc:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b1\u03bb\u03bb\u03b1\u03b3\u03ae\u03c2 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2."},advlist:{def:"\u03a0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf",circle:"\u039a\u03cd\u03ba\u03bb\u03bf\u03c2",disc:"\u0394\u03af\u03c3\u03ba\u03bf\u03c2",square:"\u03a4\u03b5\u03c4\u03c1\u03ac\u03b3\u03c9\u03bd\u03bf",types:"Types","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman"},colors:{"000000":"\u039c\u03b1\u03cd\u03c1\u03bf",FF6600:"\u03a0\u03bf\u03c1\u03c4\u03bf\u03ba\u03b1\u03bb\u03af","008000":"\u03a0\u03c1\u03ac\u03c3\u03b9\u03bd\u03bf","0000FF":"\u039c\u03c0\u03bb\u03ad","808080":"\u0393\u03ba\u03c1\u03af",FF0000:"\u039a\u03cc\u03ba\u03ba\u03b9\u03bd\u03bf","800080":"\u039c\u03ce\u03b2",FFCC00:"\u03a7\u03c1\u03c5\u03c3\u03cc",FFFF00:"\u039a\u03af\u03c4\u03c1\u03b9\u03bd\u03bf","993366":"\u039a\u03b1\u03c6\u03ad",C0C0C0:"\u0391\u03c3\u03b9\u03bc\u03ad\u03bd\u03b9\u03bf",FF99CC:"\u03a1\u03cc\u03b6",FFFFFF:"\u0386\u03c3\u03c0\u03c1\u03bf","333300":"Dark olive","993300":"Burnt orange","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon","808000":"Olive","008080":"Teal","666699":"Grayish blue",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","999999":"Medium gray",FF00FF:"Magenta","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"\u039b\u03ad\u03be\u03b5\u03b9\u03c2:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/en.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/en.js
new file mode 100644
index 000000000..16d7a93e0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/en.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({en:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert Time","insertdate_desc":"Insert Date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction Right to Left","ltr_desc":"Direction Left to Right"},layer:{content:"New layer...","absolute_desc":"Toggle Absolute Positioning","backward_desc":"Move Backward","forward_desc":"Move Forward","insertlayer_desc":"Insert New Layer"},save:{"save_desc":"Save","cancel_desc":"Cancel All Changes"},nonbreaking:{"nonbreaking_desc":"Insert Non-Breaking Space Character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Check Spelling"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Insert Horizontal Line"},emotions:{"delta_height":"","delta_width":"","emotions_desc":"Emotions"},searchreplace:{"replace_desc":"Find/Replace","delta_width":"","delta_height":"","search_desc":"Find"},advimage:{"delta_width":"","image_desc":"Insert/Edit Image","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Insert/Edit Link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation"},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"Cell",col:"Column",row:"Row",del:"Delete Table","copy_row_desc":"Copy Table Row","cut_row_desc":"Cut Table Row","paste_row_after_desc":"Paste Table Row After","paste_row_before_desc":"Paste Table Row Before","props_desc":"Table Properties","cell_desc":"Table Cell Properties","row_desc":"Table Row Properties","merge_cells_desc":"Merge Table Cells","split_cells_desc":"Split Merged Table Cells","delete_col_desc":"Delete Column","col_after_desc":"Insert Column After","col_before_desc":"Insert Column Before","delete_row_desc":"Delete Row","row_after_desc":"Insert Row After","row_before_desc":"Insert Row Before",desc:"Insert/Edit Table"},autosave:{"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?","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle Full Screen Mode"},media:{"delta_height":"","delta_width":"",edit:"Edit Embedded Media",desc:"Insert/Edit Embedded Media"},fullpage:{desc:"Document Properties","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"Toggle Spell Checker",menu:"Spell Checker Settings","ignore_word":"Ignore Word","ignore_words":"Ignore All",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No Suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert Page Break for Printing"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/eo.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/eo.js
new file mode 100644
index 000000000..8a5b4554f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/eo.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({eo:{common:{"more_colors":"Pliaj koloroj","invalid_data":"Eraro: Nevalidaj valoroj estas ru\u011dmarkitaj.","popup_blocked":"Oni detektis ke via retumilo baris fenestron kiu estas esenca por la programo. Vi bezonas malaktivigi la \u015dprucfenestroblokilo por uzi \u0109i tiun ilon.","clipboard_no_support":"Via retumilo ne subtenas \u0109i tiun eblon. Uzu la klavkombinojn.","clipboard_msg":"Kopii/eltondi/alglui ne estas disponeblaj en Mozilla nek Firefox.\n\u0108u vi volas pliajn informojn pri \u0109i tiu problemo?","not_set":"-- N/A --","class_name":"Klaso",browse:"Ser\u0109i",close:"Fermi",cancel:"Rezigni",update:"\u011cisdatigi",insert:"Enmeti",apply:"Apliki","edit_confirm":"\u0108u vi volas uzi la spertan redaktre\u011dimon en \u0109i tiu tekstokampo?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u011cisrandigite",right:"Dekstre",center:"Centre",left:"Maldekstre",align:"Liniigo"},insertdatetime:{"day_short":"Dim,Lun,Mar,Mer,\u0134a\u016d,Ven,Sab,Dim","day_long":"Diman\u0109o,Lundo,Mardo,Merkredo,\u0134a\u016ddo,Vendredo,Sabato,Diman\u0109o","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,A\u016dg,Sep,Okt,Nov,Dec","months_long":"Januaro,Februaro,Marto,Aprilo,Majo,Junio,Julio,A\u016dgusto,Septembro,Oktobro,Novembro,Decembro","inserttime_desc":"Enmeti horon","insertdate_desc":"Enmeti daton","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Presi"},preview:{"preview_desc":"Anta\u016dvidi"},directionality:{"rtl_desc":"Dekstre-Maldekstren","ltr_desc":"Maldekstre-Dekstren"},layer:{content:"Nova tavolo...","absolute_desc":"\u015can\u011di al absoluta pozicio","backward_desc":"Movi malanta\u016den","forward_desc":"Movi anta\u016den","insertlayer_desc":"Enmeti novan tavolon"},save:{"save_desc":"Konservi","cancel_desc":"Nuligi \u0109iujn \u015dan\u011dojn"},nonbreaking:{"nonbreaking_desc":"Enmeti nerompeblan spaceton"},iespell:{download:"Kromprogramo por literumado ne detektita. \u0108u vi volas instali \u011din nun?","iespell_desc":"Kontroli literumadon"},advhr:{"advhr_desc":"Horizontala disigilo","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Viza\u011detoj","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Ser\u0109i/anstata\u016digi","search_desc":"Ser\u0109i","delta_width":"","delta_height":""},advimage:{"image_desc":"Enmeti/redakti","delta_width":"","delta_height":""},advlink:{"link_desc":"Enmeti/redakti","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Enmeti/Redakti atributojn","ins_desc":"Enmeti","del_desc":"Forvi\u015di","acronym_desc":"Akronimo","abbr_desc":"Mallongigo","cite_desc":"Cita\u0135o","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Redakti CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"La alglukomando estas en re\u011dimo de plata teksto. Klaku denove por reveni al la normala re\u011dimo.","plaintext_mode_sticky":"La alglukomando estas en re\u011dimo de plata teksto. Klaku denove por reveni al la normala re\u011dimo. Post algluo \u011di revenos al la normala re\u011dimo.","selectall_desc":"Elekti \u0109ion","paste_word_desc":"Alglui (kopiita el WORD)","paste_text_desc":"Alglui kiel platan tekston"},"paste_dlg":{"word_title":"Uzu CTRL V por alglui tekston en la fenestron.","text_linebreaks":"Konservi linisaltojn","text_title":"Uzu CTRL V por alglui tekston en la fenestron."},table:{cell:"\u0108elo",col:"Kolumno",row:"Linio",del:"Forvi\u015di tabelon","copy_row_desc":"Kopii linion","cut_row_desc":"Eltondi linion","paste_row_after_desc":"Alglui linion poste","paste_row_before_desc":"Alglui linion anta\u016de","props_desc":"Atributoj de tabelo","cell_desc":"Atributoj de \u0109eloj","row_desc":"Atributoj de liniioj","merge_cells_desc":"Unuigi \u0109elojn","split_cells_desc":"Dividi \u0109elojn","delete_col_desc":"Forigi kolumnon","col_after_desc":"Enmeti kolumnon poste","col_before_desc":"Enmeti kolumnon anta\u016de","delete_row_desc":"Forvi\u015di linion","row_after_desc":"Enmeti linion poste","row_before_desc":"Enmeti linion anta\u016de",desc:"Enmeti novan tabelon","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Se vi resta\u016dros la enhavon, vi perdos \u0109ion kio estas aktuale en la redaktilo.\n\n\u0108u vi certas ke vi volas resta\u016dri la konservitan enhavon?","restore_content":"Resta\u016dras la enhavon a\u016dtomate konservitan.","unload_msg":"Vi perdos la faritajn \u015dan\u011dojn se vi eliros \u0109i tiun pa\u011don."},fullscreen:{desc:"Plenekrane"},media:{edit:"Redakti enhavon enkonstruitan",desc:"Enmeti/Redakti enhavon enkonstruitan","delta_height":"","delta_width":""},fullpage:{desc:"Atributoj de la dokumento","delta_width":"","delta_height":""},template:{desc:"Enmeti \u015dablonon"},visualchars:{desc:"Vidkontrolkodoj \u015daltitaj/mal\u015daltitaj"},spellchecker:{desc:"(Mal)\u015calti literumadon",menu:"Agordoj pri ortografio","ignore_word":"Ignori vorton","ignore_words":"Ignori \u0109ion",langs:"Lingvoj",wait:"Atendu...",sug:"Sugestoj","no_sug":"Sen sugestoj","no_mpell":"Neniu ortografieraro trovita.","learn_word":"Learn word"},pagebreak:{desc:"Enmeti pa\u011dosalton."},advlist:{types:"Tipoj",def:"Defa\u016dlta","lower_alpha":"Minuskla alfabeto","lower_greek":"Greka alfabeto","lower_roman":"Minusklaj romanaj ciferoj","upper_alpha":"Majuskla alfabeto","upper_roman":"Majusklaj romanaj ciferoj",circle:"Cirklo",disc:"Disko",square:"Kvadrato"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/es.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/es.js
new file mode 100644
index 000000000..9dc3063f9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/es.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({es:{common:{"more_colors":"M\u00e1s colores","invalid_data":"Error: Introdujo un valor no v\u00e1lido, est\u00e1n marcados en rojo.","popup_blocked":"Lo sentimos, su bloqueo de ventanas emergentes ha deshabilitado una ventana que provee funcionalidades a la aplicaci\u00f3n. Necesita deshabilitar este bloqueo en este sitio para poder utilizar todas las funciones.","clipboard_no_support":"Su navegador no soporta las funciones de cortapapeles, use los accesos por teclado.","clipboard_msg":"Copiar/Cortar/Pegar no se encuentra disponible en Mozilla y Firefox.\n \u00bfDesea obtener m\u00e1s informaci\u00f3n acerca de este tema?","not_set":"-- Ninguno --","class_name":"Clase",browse:"Examinar",close:"Cerrar",cancel:"Cancelar",update:"Actualizar",insert:"Insertar",apply:"Aplicar","edit_confirm":" \u00bfDesea utilizar el modo WYSIWYG para esta caja de texto?","invalid_data_number":"{#field} debe ser un n\u00famero","invalid_data_min":"{#field} debe ser un n\u00famero mayor que {#min}","invalid_data_size":"{#field} debe ser un n\u00famero o tanto por ciento",value:"(valor)"},contextmenu:{full:"Justificado",right:"Derecha",center:"Centrado",left:"Izquierda",align:"Alineaci\u00f3n"},insertdatetime:{"day_short":"Dom,Lun,Mar,Mie,Jue,Vie,Sab,Dom","day_long":"Domingo,Lunes,Martes,Mi\u00e9rcoles,Jueves,Viernes,S\u00e1bado,Domingo","months_short":"Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic","months_long":"Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre","inserttime_desc":"Insertar hora","insertdate_desc":"Insertar fecha","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimir"},preview:{"preview_desc":"Vista previa"},directionality:{"rtl_desc":"Direcci\u00f3n derecha a izquierda","ltr_desc":"Direcci\u00f3n izquierda a derecha"},layer:{content:"Nueva capa...","absolute_desc":"Cambiar a posici\u00f3n absoluta","backward_desc":"Retroceder","forward_desc":"Avanzar","insertlayer_desc":"Insertar nueva capa"},save:{"save_desc":"Guardar","cancel_desc":"Cancelar todos los cambios"},nonbreaking:{"nonbreaking_desc":"Insertar caracter de espacio \'non-breaking\'"},iespell:{download:"No se detect\u00f3 \'ieSpell\'. \u00bfDesea instalarlo ahora?","iespell_desc":"Corrector ortogr\u00e1fico"},advhr:{"advhr_desc":"Regla horizontal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoticones","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Buscar/Reemplazar","search_desc":"Buscar","delta_width":"","delta_height":""},advimage:{"delta_width":"30","image_desc":"Insertar/editar imagen","delta_height":""},advlink:{"link_desc":"Insertar/editar hiperv\u00ednculo","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insertar/Editar atributos","ins_desc":"Inserci\u00f3n","del_desc":"Borrado","acronym_desc":"Acr\u00f3nimo","abbr_desc":"Abreviatura","cite_desc":"Cita","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Editar Estilo CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Pegar ahora est\u00e1 en modo de texto plano. Pulse otra vez para volver al modo de pegado normal.","plaintext_mode_sticky":"Pegar ahora est\u00e1 en modo de texto plano. Pulse otra vez para volver al modo de pegado normal. Despu\u00e9s de pegar algo se volver\u00e1 al modo normal de forma autom\u00e1tica.","selectall_desc":"Elegir todo","paste_word_desc":"Pegar desde Word","paste_text_desc":"Pegar como texto plano"},"paste_dlg":{"word_title":"Use CTRL+V en su teclado para pegar el texto en la ventana.","text_linebreaks":"Mantener saltos de l\u00ednea","text_title":"Use CTRL+V en su teclado para pegar el texto en la ventana."},table:{cell:"Celda",col:"Columna",row:"Fila",del:"Eliminar tabla","copy_row_desc":"Copiar fila","cut_row_desc":"Cortar fila","paste_row_after_desc":"Pegar filas (despu\u00e9s)","paste_row_before_desc":"Pegar filas (antes)","props_desc":"Propiedades de la tabla","cell_desc":"Propiedades de la celda","row_desc":"Propiedades de la fila","merge_cells_desc":"Vincular celdas","split_cells_desc":"Dividir celdas","delete_col_desc":"Suprimir columna","col_after_desc":"Insertar columna (despu\u00e9s)","col_before_desc":"Insertar columna (antes)","delete_row_desc":"Suprimir fila","row_after_desc":"Insertar fila (despu\u00e9s)","row_before_desc":"Insertar fila (antes)",desc:"Inserta una nueva tabla","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Se reestablece en contenido guardado, perder\u00e1 todo el contenido que est\u00e1 actualmente en el editor.\n\nEst\u00e1 seguro de que quiere reestablecer el contenido guardado.","restore_content":"Reestablecer contenido guardado autom\u00e1ticamente","unload_msg":"Los cambios realizados se perder\u00e1n si sale de esta p\u00e1gina."},fullscreen:{desc:"Cambiar a modo Pantalla Completa"},media:{edit:"Editar medio embebido",desc:"Insertar/editar medio embebido","delta_height":"","delta_width":""},fullpage:{desc:"Propiedades del documento","delta_width":"Ancho","delta_height":"Alto"},template:{desc:"Insertar contenido de plantilla predefinida"},visualchars:{desc:"Caracteres de control ON/OFF."},spellchecker:{desc:"Cambiar a corrector ortogr\u00e1fico",menu:"Configuraci\u00f3n de corrector ortogr\u00e1fico","ignore_word":"Ignorar","ignore_words":"Ignorar todo",langs:"Idiomas",wait:"Espere...",sug:"Sugerencias","no_sug":"Sin sugerencias","no_mpell":"No se encontraron errores.","learn_word":"Aprender palabra"},pagebreak:{desc:"Insertar fin de p\u00e1gina"},advlist:{types:"Tipo",def:"Preestablecido","lower_alpha":"Menos opaco","lower_greek":"Menos greek","lower_roman":"Menos roman","upper_alpha":"M\u00e1s opaco","upper_roman":"M\u00e1s roman",circle:"Circulo",disc:"Disc",square:"Cuadro"},colors:{"333300":"Verde Oliva","993300":"Naranja Oscuro","000000":"Negro","003300":"Verde Oscuro","003366":"Azul Celeste Oscuro","000080":"Azul Navy","333399":"Indigo","333333":"Verde Muy Oscuro","800000":"Marr\u00f3n",FF6600:"Naranja","808000":"Aceituna","008000":"Verde","008080":"Verde Azulado","0000FF":"Azul","666699":"Azul gris\u00e1ceo","808080":"Gris",FF0000:"Rojo",FF9900:"\u00c1mbar","99CC00":"Verde Amarillento","339966":"Verde Oc\u00e9ano","33CCCC":"Turquesa","3366FF":"Azul Royale","800080":"P\u00farpura","999999":"Gris Medio",FF00FF:"Magenta",FFCC00:"Dorado",FFFF00:"Amarillo","00FF00":"Lima","00FFFF":"Agua","00CCFF":"Azul Cielo","993366":"Marr\u00f3n",C0C0C0:"Plateado",FF99CC:"Rosa",FFCC99:"Melocot\u00f3n",FFFF99:"Amarillo claro",CCFFCC:"Verde p\u00e1lido",CCFFFF:"Cian p\u00e1lido","99CCFF":"Verde Cielo Claro",CC99FF:"Pomelo",FFFFFF:"Blanco"},aria:{"rich_text_area":"\u00c1rea de Texto Enriquecido"},wordcount:{words:"Palabras:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/et.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/et.js
new file mode 100644
index 000000000..637551bfb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/et.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({et:{common:{"more_colors":"Rohkem v\u00e4rve","invalid_data":"Viga: Kehtetud v\u00e4\u00e4rtused sisestatud, need on m\u00e4rgitud punasega.","popup_blocked":"Vabandust, aga Teie h\u00fcpikakna t\u00f5kestaja on blokeerinud akna, mis varustab rakenduse funktsionaalsust. Palun lubage h\u00fcpikaknad sellel kodulehel, et t\u00e4ielikult kasutada seda vahendit.","clipboard_no_support":"Hetkel ei ole toetatud Teie lehitseja poolt, kasutage klaviatuuri otseteid selle asemel.","clipboard_msg":"Kopeeri/L\u00f5ika/Kleebi ei ole saadaval Mozillas ja Firefoxis.\nKas soovite rohkem infot selle probleemi kohta?","not_set":"-- Seadmata --","class_name":"Klass",browse:"Sirvi",close:"Sule",cancel:"T\u00fchista",update:"Uuenda",insert:"Sisesta",apply:"Rakenda","edit_confirm":"Kas soovite kasutada WYSIWYG re\u017eiimi sellel tekstialal?","invalid_data_number":"{#field} peab olema number","invalid_data_min":"{#field} peab olema number,mis suurem kui {#min}","invalid_data_size":"{#field} peab olema number v\u00f5i protsent",value:"(v\u00e4\u00e4rtus)"},contextmenu:{full:"T\u00e4is",right:"Parem",center:"Kesk",left:"Vasak",align:"Joondus"},insertdatetime:{"day_short":"P,E,T,K,N,R,L,P","day_long":"P\u00fchap\u00e4ev,Esmasp\u00e4ev,Teisip\u00e4ev,Kolmap\u00e4ev,Neljap\u00e4ev,Reede,Laup\u00e4ev,P\u00fchap\u00e4ev","months_short":"Jaan,Veeb,M\u00e4rts,Apr,Mai,Juuni,Juuli,Aug,Sept,Okt,Nov,Dets","months_long":"Jaanuar,Veebruar,M\u00e4rts,Aprill,Mai,Juuni,Juuli,August,September,Oktoober,November,Detsember","inserttime_desc":"Sisesta aeg","insertdate_desc":"Sisesta kuup\u00e4ev","time_fmt":"%T:%M:%S","date_fmt":"%A-%k-%p"},print:{"print_desc":"Print"},preview:{"preview_desc":"Eelvaade"},directionality:{"rtl_desc":"Suund paremalt vasakule","ltr_desc":"Suund vasakult paremale"},layer:{content:"Uus kiht...","absolute_desc":"L\u00fclita \u00fcmber absoluutne positsioneerimine","backward_desc":"Liiguta tagasi","forward_desc":"Liiguta edasi","insertlayer_desc":"Sisesta uus kiht"},save:{"save_desc":"Salvesta","cancel_desc":"T\u00fchista k\u00f5ik muudatused"},nonbreaking:{"nonbreaking_desc":"Sisesta mittekatkestav t\u00fchik"},iespell:{download:"ie\u00d5igekiri tuvastamata. Kas soovite paigaldada n\u00fc\u00fcd?","iespell_desc":"\u00d5igekirja kontroll"},advhr:{"advhr_desc":"Horisontaalne joonlaud","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotsioonid","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Otsi/Asenda","search_desc":"Otsi","delta_width":"","delta_height":""},advimage:{"image_desc":"Sisesta/redigeeri pilt","delta_width":"","delta_height":""},advlink:{"link_desc":"Sisesta/redigeeri link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Sisesta muuda atribuute","ins_desc":"Lisandus","del_desc":"Kustutus","acronym_desc":"Akron\u00fc\u00fcm","abbr_desc":"L\u00fchend","cite_desc":"Tsitaat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Redigeeri CSS stiili","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Kleepimine (Paste) on n\u00fc\u00fcd lihtteksti laadis (kleebitav tekst lisatakse lihttekstina). Kliki uuesti minemaks tagasi tavalisse kleepimise laadi.","plaintext_mode_sticky":"Kleepimine (Paste) on n\u00fc\u00fcd lihtteksti laadis (kleebitav tekst lisatakse lihttekstina). Kliki uuesti minemaks tagasi tavalisse kleepimise laadi. Peale millegi kleepimist sa tuled tagasi tavalisse kleepimise laadi.","selectall_desc":"Vali k\u00f5ik","paste_word_desc":"Kleebi Wordist","paste_text_desc":"Kleebi tavalise tekstina"},"paste_dlg":{"word_title":"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks.","text_linebreaks":"J\u00e4ta reavahetused","text_title":"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks."},table:{cell:"Lahter",col:"Veerg",row:"Rida",del:"Kustuta tabel","copy_row_desc":"Kopeeri tabeli rida","cut_row_desc":"L\u00f5ika tabeli rida","paste_row_after_desc":"Kleebi tabeli rida j\u00e4rgi","paste_row_before_desc":"Kleebi tabeli rida ette","props_desc":"Tabeli omadused","cell_desc":"Tabeli lahtri omadused","row_desc":"Tabeli rea omadused","merge_cells_desc":"\u00dchenda tabeli lahtrid","split_cells_desc":"Eralda \u00fchendatud tabeli lahtrid","delete_col_desc":"Kustuta veerg","col_after_desc":"Sisesta veerg j\u00e4rgi","col_before_desc":"Sisesta veerg ette","delete_row_desc":"Kustuta rida","row_after_desc":"Sisesta rida j\u00e4rgi","row_before_desc":"Sisesta rida ette",desc:"Sisestab uue tabeli","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Kui sa taastad salvestatud sisu, siis sa kaotad kogu redaktoris oleva sisu.\n\nKas sa soovid taastada salvestatud sisu?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?","restore_content":"Taasta automaatsalvestatud sisu.","unload_msg":"Tehtud muudatused kaovad, kui lahkute siit lehelt."},fullscreen:{desc:"L\u00fclita \u00fcmber t\u00e4isekraani re\u017eiim"},media:{edit:"Redigeeri manustatud meedia",desc:"Sisesta / redigeeri manustatud meedia","delta_height":"","delta_width":""},fullpage:{desc:"Dokumendi omadused","delta_width":"","delta_height":""},template:{desc:"Sisesta eeldefineeritud \u0161ablooni sisu"},visualchars:{desc:"Visuaalsed kontrollt\u00e4hem\u00e4rgid sisse/v\u00e4lja"},spellchecker:{desc:"L\u00fclita \u00fcmber \u00f5igekirja kontroll",menu:"\u00d5igekirja kontrolli seaded","ignore_word":"J\u00e4ta s\u00f5na vahele","ignore_words":"J\u00e4ra k\u00f5ik vahele",langs:"Keeled",wait:"Palun oota...",sug:"Soovitused","no_sug":"Soovitusi pole","no_mpell":"Valesti kirjutamisi ei leitud.","learn_word":"\u00d5pi s\u00f5na"},pagebreak:{desc:"Sisesta lehevahetus."},advlist:{types:"T\u00fc\u00fcbid",def:"Vaikimisi",circle:"Ring",disc:"Ketas",square:"Ruut","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman"},colors:{"000000":"Must","003300":"Tume roheline","000080":"Meresinine","333399":"S\u00fcgavsinine","333333":"V\u00e4ga tumehall","800000":"Punakaspruun",FF6600:"Oran\u017e","008000":"Roheline","008080":"Sinakasroheline","0000FF":"Sinine","666699":"Hallikas sinine","808080":"Hall",FF0000:"Punane",FF9900:"Oran\u017ekollane","99CC00":"Kollakasroheline","339966":"Sinakasroheline","33CCCC":"T\u00fcrkiissinine","800080":"Violetne","999999":"Keskmine hall",FF00FF:"Fuksiinpunane",FFCC00:"Kuldne",FFFF00:"Kollane","00FF00":"Rohekaskollane","00FFFF":"Rohekassinine","00CCFF":"Taevasinine","993366":"Pruun",C0C0C0:"H\u00f5bedane",FF99CC:"Roosa",FFCC99:"Virsikuv\u00e4rvi",FFFF99:"Helekollane",CCFFCC:"Kahvatu roheline",CCFFFF:"Kahvatu helesinine","99CCFF":"Hele taevasinine",FFFFFF:"Valge","333300":"Dark olive","993300":"Burnt orange","003366":"Dark azure","808000":"Olive","3366FF":"Royal blue",CC99FF:"Plum"},aria:{"rich_text_area":"Vormindatud tekstiala"},wordcount:{words:"S\u00f5nu:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/eu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/eu.js
new file mode 100644
index 000000000..c386478c7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/eu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({eu:{common:{"more_colors":"Kolore gehiago","invalid_data":"Errorea: baliogabeak diren aukerak sartu dituzu, gorriz agertzen dira.","popup_blocked":"Ups, zure popup blokeatzaileak funtzionalitate bat eskaintzen duen leihoa blokeatu du. Blokeatzailea desgaitu beharko duzu tresna hau erabiltzeko.","clipboard_no_support":"Zure nabigatzailean ez dabil, erabili teklatuko laster-teklak honetarako..","clipboard_msg":"Kopiatu/Ebaki/Itsatsi ez dago Mozilla eta Firefoxen.\nHonen inguruko informazioa nahi duzu??","not_set":"-- Bat ere ez --","class_name":"Klasea",browse:"Arakatu",close:"Itxi",cancel:"Utzi",update:"Eguneratu",insert:"Txertatu",apply:"Aplikatu","edit_confirm":"Testu-kutxa hau WYSIWYG editorea izatea nahi duzu?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Justifikatuta",right:"Eskuinean",center:"Zentratuta",left:"Ezkerrean",align:"Alineazioa"},insertdatetime:{"day_short":"Ig,Al,As,Az,Og,Or,Lr,Ig","day_long":"Igandea,Astelehena,Asteartea,Asteazkena,Osteguna,Ostirala,Larunbata,Igandea","months_short":"Urt,Ots,Mar,Api,Mai,Eka,Uzt,Abu,Ira,Urr,Aza,Abe","months_long":"Urtarrila,Otsaila,Martxoa,Apirila,Maiatza,Ekaina,Uztaila,Abuztua,Iraila,Urria,Azaroa,Abendua","inserttime_desc":"Ordua txertatu","insertdate_desc":"Data txertatu","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Inprimatu"},preview:{"preview_desc":"Aurreikusi"},directionality:{"rtl_desc":"Eskuinatik ezkerrera","ltr_desc":"Ezkerretik eskumara"},layer:{content:"Kapa berria...","absolute_desc":"Posizionatze-absolutua aktibatu/desaktibatu","backward_desc":"Atzera joan","forward_desc":"Aurrera joan","insertlayer_desc":"Kapa berria txertatu"},save:{"save_desc":"Gorde","cancel_desc":"Aldaketak bertan behera utzi"},nonbreaking:{"nonbreaking_desc":"Espazioa txertatu"},iespell:{download:"ieSpell ez da aurkitu. Instalatu egin nahi duzu?","iespell_desc":"Hizkuntza zuzendu"},advhr:{"delta_height":"Altuera","delta_width":"Zabalera","advhr_desc":"Marra horizontala"},emotions:{"delta_height":"Altuera","delta_width":"Zabalera","emotions_desc":"Ikonotxoak"},searchreplace:{"replace_desc":"Bilatu/Ordeztu","delta_width":"Zabalera","delta_height":"Altuera","search_desc":"Bilatu"},advimage:{"delta_width":"Zabalera","image_desc":"Irudia txertatu/editatu","delta_height":"Altuera"},advlink:{"delta_height":"Altuera","delta_width":"Zabalera","link_desc":"Lotura txertatu/editatu"},xhtmlxtras:{"attribs_delta_height":"Atributuen altuera","attribs_delta_width":"Atributuen zabalera","ins_delta_height":"Txertaketaren altuera","ins_delta_width":"Txertaketaren zabalera","del_delta_height":"Ezabaketaren altuera","del_delta_width":"Ezabaketaren zabalera","acronym_delta_height":"Akronimoen altuera","acronym_delta_width":"Akronimoen zabalera","abbr_delta_height":"Laburduren altuera","abbr_delta_width":"Laburduren zabalera","cite_delta_height":"Ziten altuera","cite_delta_width":"Ziten zabalera","attribs_desc":"Atributuak txertatu/editatu","ins_desc":"Txertaketa","del_desc":"Ezabaketa","acronym_desc":"Akronimoa","abbr_desc":"Laburdura","cite_desc":"Zita"},style:{"delta_height":"Altuera","delta_width":"Zabalera",desc:"Aldatu CSS estiloa"},paste:{"plaintext_mode":"Itsasketa testu moduan dago orain. Egin klik itsasketa arruntera itzultzeko.","plaintext_mode_sticky":"Itsasketa testu moduan dago orain. Egin klik itsasketa arruntera itzultzeko. Zerbait itsatsi ostean, modu arruntera pasatuko zara automatikoki.","selectall_desc":"Aukeratu guztia","paste_word_desc":"Word-etik itsatsi","paste_text_desc":"Testu gisa itsatsi"},"paste_dlg":{"word_title":"Erabili CTRL+V testua lehioan itsasteko.","text_linebreaks":"Mantendu lerro-jauziak","text_title":"Erabili CTRL+V testua lehioan itsasteko."},table:{"merge_cells_delta_height":"Gelaxkak batzearen altuera","merge_cells_delta_width":"Gelaxkak batzearen zabalera","table_delta_height":"Taularen altuera","table_delta_width":"Taularen zabalera","cellprops_delta_height":"Gelaxken propietateen altuera","cellprops_delta_width":"Gelaxken propietateen zabalera","rowprops_delta_height":"Lerroen propietateen altuera","rowprops_delta_width":"Lerroen propietateen zabalera",cell:"Gelaxka",col:"Zutabea",row:"Lerroa",del:"Ezabatu taula","copy_row_desc":"Kopiatu lerroa","cut_row_desc":"Moztu lerroa","paste_row_after_desc":"Itsatsi lerroa ondoren","paste_row_before_desc":"Itsatsi lerroa aurretik","props_desc":"Taula ezaugarriak","cell_desc":"Gelaxka ezaugarriak","row_desc":"Lerro ezaugarriak","merge_cells_desc":"Bateratu gelaxkak","split_cells_desc":"Banatu bateratutako gelaxkak","delete_col_desc":"Ezabatu zutabea","col_after_desc":"Txertatu zutabea ondoren","col_before_desc":"Txertatu zutabea aurretik","delete_row_desc":"Ezabatu lerroa","row_after_desc":"Txertatu lerroa ondoren","row_before_desc":"Txertatu lerroa aurretik",desc:"Taula berri bat txertatu"},autosave:{"warning_message":"Gordetako edukia errekuperatzen baduzu, orain editorean dagoena galdu egingo duzu.\n\nZiur zaude gordetakoa errekuperatzea nahi duzula?","restore_content":"Automatikoki gordetako edukia errekuperatu.","unload_msg":"Egindako aldaketak galdu egingo dira orri honetatik kanpona nabigatzen baldin baduzu."},fullscreen:{desc:"Aldatu pantaila osoko modura"},media:{"delta_height":"Altuera","delta_width":"Zabalera",edit:"Editatu ahokatutako euskarria",desc:"Sartu / editatu ahokatutako euskarria"},fullpage:{desc:"Dokumentuaren ezaugarriak","delta_width":"Zabalera","delta_height":"Altuera"},template:{desc:"Txertatu aurredefinitutako txantiloiaren edukia"},visualchars:{desc:"Begi kontrol karaktereak gaitu/ezgaitu."},spellchecker:{desc:"Ortografia zuzentzaile modura aldatu",menu:"Ortografia zuzentzailearen doikuntza","ignore_word":"Ezikusi hitza","ignore_words":"Ezikusi guztiak",langs:"Hizkuntzak",wait:"Itxaron mesedez...",sug:"Gomendioa","no_sug":"Gomendiorik ez","no_mpell":"Ez da akatsik aurkitu","learn_word":"Learn word"},pagebreak:{desc:"Txertatu orri jauzia."},advlist:{types:"Motak",def:"Lehenetsiak","lower_alpha":"Hizki xeheak","lower_greek":"Hizki greko xeheak","lower_roman":"Zenbaki erromatar xeheak","upper_alpha":"Hizki larriak","upper_roman":"Zenbaki erromatar larriak",circle:"Borobila",disc:"Diskoa",square:"Karratua"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fa.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fa.js
new file mode 100644
index 000000000..cd0bffbb8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fa.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({fa:{common:{"more_colors":"\u0631\u0646\u06af \u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631","invalid_data":"\u062e\u0637\u0627: \u0645\u0642\u0627\u062f\u06cc\u0631 \u0646\u0627\u0645\u0639\u062a\u0628\u0631 \u0648\u0627\u0631\u062f \u0634\u062f \u060c \u0622\u0646\u0647\u0627 \u0628\u0647 \u0631\u0646\u06af \u0642\u0631\u0645\u0632 \u0639\u0644\u0627\u0645\u062a \u062e\u0648\u0631\u062f\u0647 \u0627\u0646\u062f.","popup_blocked":"\u0628\u0627 \u0639\u0631\u0636 \u067e\u0648\u0632\u0634 \u060c \u0645\u0627 \u0627\u0637\u0644\u0627\u0639 \u062f\u0627\u062f\u0647 \u0628\u0648\u062f\u06cc\u0645 \u06a9\u0647 \u0645\u062f\u0627\u0641\u0639 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632 \u0634\u0648\u06cc (Popup) \u0634\u0645\u0627 \u060c \u067e\u0646\u062c\u0631\u0647 \u0627\u06cc \u0631\u0627 \u06a9\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u06a9\u0631\u062f \u060c \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a. \u0634\u0645\u0627 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u063a\u06cc\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0645\u062f\u0627\u0641\u0639 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632 \u0634\u0648 (Popup) \u062f\u0631 \u0627\u06cc\u0646 \u0633\u0627\u06cc\u062a \u0631\u0627 \u062f\u0627\u0631\u06cc\u062f \u062a\u0627 \u0627\u0632 \u0627\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631 \u0628\u0647 \u0635\u0648\u0631\u062a \u06a9\u0627\u0645\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f.","clipboard_no_support":"\u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u062a\u0648\u0633\u0637 \u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc \u0634\u0648\u062f \u060c \u0628\u0647 \u062c\u0627\u06cc \u0622\u0646 \u0627\u0632 \u0645\u06cc\u0627\u0646\u0628\u0631\u0647\u0627\u06cc (Shortcut) \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f.","clipboard_msg":"\u0628\u0631\u0634/\u06a9\u067e\u06cc/\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0631\u0627\u06cc \u0645\u0631\u0648\u0631\u06af\u0631 \u0641\u0627\u06cc\u0631\u0641\u0627\u06a9\u0633 \u0641\u0639\u0627\u0644 \u0646\u0645\u06cc \u0628\u0627\u0634\u062f. \n\u0622\u06cc\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627\u062c\u0639 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f\u061f","not_set":"-- \u062a\u0646\u0638\u06cc\u0645 \u0646\u0634\u062f\u0647 --","class_name":"\u06a9\u0644\u0627\u0633",browse:"\u0627\u0646\u062a\u062e\u0627\u0628 \u0627\u0632 \u0633\u0631\u0648\u0631",close:"\u0628\u0633\u062a\u0646",cancel:"\u0627\u0646\u0635\u0631\u0627\u0641",update:"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc",insert:"\u062f\u0631\u062c",apply:"\u0628\u06a9\u0627\u0631\u06af\u06cc\u0631\u06cc","edit_confirm":"\u0622\u06cc\u0627 \u0634\u0645\u0627 \u0645\u0627\u06cc\u0644\u06cc\u062f \u062a\u0627 \u0627\u0632 \u062d\u0627\u0644\u062a \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u0646\u0627\u062d\u06cc\u0647 \u0645\u062a\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f\u061f","invalid_data_number":"\u0645\u0642\u062f\u0627\u0631 {#field} \u0628\u0627\u06cc\u062f \u0639\u062f\u062f \u0628\u0627\u0634\u062f","invalid_data_min":"\u0645\u0642\u062f\u0627\u0631 {#field} \u0628\u0627\u06cc\u062f \u0639\u062f\u062f \u0628\u0632\u0631\u06af \u062a\u0631 \u0627\u0632 {#min} \u0628\u0627\u0634\u062f","invalid_data_size":"\u0645\u0642\u062f\u0627\u0631 {#field} \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0639\u062f\u062f \u06cc\u0627 \u062f\u0631\u0635\u062f \u0628\u0627\u0634\u062f",value:"(\u0645\u0642\u062f\u0627\u0631)"},contextmenu:{full:"\u06a9\u0627\u0645\u0644",right:"\u0631\u0627\u0633\u062a",center:"\u0648\u0633\u0637",left:"\u0686\u067e",align:"\u062a\u0631\u0627\u0632"},insertdatetime:{"day_short":"\u06cc\u06a9\u0634\u0646\u0628\u0647,\u062f\u0648\u0634\u0646\u0628\u0647,\u0633\u0647 \u0634\u0646\u0628\u0647,\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647,\u067e\u0646\u062c \u0634\u0646\u0628\u0647,\u062c\u0645\u0639\u0647,\u0634\u0646\u0628\u0647,\u06cc\u06a9\u0634\u0646\u0628\u0647","day_long":"\u06cc\u06a9\u0634\u0646\u0628\u0647,\u062f\u0648\u0634\u0646\u0628\u0647,\u0633\u0647 \u0634\u0646\u0628\u0647,\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647,\u067e\u0646\u062c \u0634\u0646\u0628\u0647,\u062c\u0645\u0639\u0647,\u0634\u0646\u0628\u0647,\u06cc\u06a9\u0634\u0646\u0628\u0647","months_short":"\u0698\u0627\u0646\u0648\u06cc\u0647,\u0641\u0648\u0631\u06cc\u0647,\u0645\u0627\u0631\u0633,\u0622\u0648\u0631\u06cc\u0644,\u0645\u06cc,\u0698\u0648\u0626\u0646,\u0698\u0648\u0644\u0627\u06cc,\u0627\u0648\u062a,\u0633\u067e\u062a\u0627\u0645\u0628\u0631,\u0627\u06a9\u062a\u0628\u0631,\u0646\u0648\u0627\u0645\u0628\u0631,\u062f\u0633\u0627\u0645\u0628\u0631","months_long":"\u0698\u0627\u0646\u0648\u06cc\u0647,\u0641\u0648\u0631\u06cc\u0647,\u0645\u0627\u0631\u0633,\u0622\u0648\u0631\u06cc\u0644,\u0645\u06cc,\u0698\u0648\u0626\u0646,\u0698\u0648\u0644\u0627\u06cc,\u0627\u0648\u062a,\u0633\u067e\u062a\u0627\u0645\u0628\u0631,\u0627\u06a9\u062a\u0628\u0631,\u0646\u0648\u0627\u0645\u0628\u0631,\u062f\u0633\u0627\u0645\u0628\u0631","inserttime_desc":"\u062f\u0631\u062c \u0632\u0645\u0627\u0646","insertdate_desc":"\u062f\u0631\u062c \u062a\u0627\u0631\u06cc\u062e","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u0686\u0627\u067e"},preview:{"preview_desc":"\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634"},directionality:{"rtl_desc":"\u062c\u0647\u062a \u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e","ltr_desc":"\u062c\u0647\u062a \u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a"},layer:{content:"\u0644\u0627\u06cc\u0647 \u062c\u062f\u06cc\u062f...","absolute_desc":"\u062a\u0639\u0648\u06cc\u0636 \u0645\u0648\u0642\u0639\u06cc\u062a \u0645\u0637\u0644\u0642","backward_desc":"\u0627\u0646\u062a\u0642\u0627\u0644 \u0628\u0647 \u067e\u0634\u062a","forward_desc":"\u0627\u0646\u062a\u0642\u0627\u0644 \u0628\u0647 \u062c\u0644\u0648","insertlayer_desc":"\u062f\u0631\u062c \u0644\u0627\u06cc\u0647 \u062c\u062f\u06cc\u062f"},save:{"save_desc":"\u0630\u062e\u06cc\u0631\u0647","cancel_desc":"\u0644\u063a\u0648 \u062a\u0645\u0627\u0645\u06cc \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a"},nonbreaking:{"nonbreaking_desc":"\u062f\u0631\u062c \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0641\u0627\u0635\u0644\u0647 \u0628\u062f\u0648\u0646 \u0642\u0637\u0639 \u0634\u062f\u06af\u06cc"},iespell:{download:"ieSpell \u062a\u0634\u062e\u06cc\u0635 \u062f\u0627\u062f\u0647 \u0646\u0634\u062f. \u0622\u06cc\u0627 \u0634\u0645\u0627 \u0645\u0627\u06cc\u0644 \u0628\u0647 \u0646\u0635\u0628 \u0622\u0646 \u0647\u0633\u062a\u06cc\u062f\u061f","iespell_desc":"\u0627\u062c\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0627\u0645\u0644\u0627\u0621"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"\u062e\u0637 \u0627\u0641\u0642\u06cc"},emotions:{"delta_height":"","delta_width":"","emotions_desc":"\u0634\u06a9\u0644\u06a9 \u0647\u0627"},searchreplace:{"replace_desc":"\u062c\u0633\u062a\u062c\u0648/\u062a\u0639\u0648\u06cc\u0636","delta_width":"","delta_height":"","search_desc":"\u062c\u0633\u062a\u062c\u0648"},advimage:{"delta_width":"","image_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u06cc\u0646\u06a9"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627","ins_desc":"\u062f\u0631\u062c","del_desc":"\u062d\u0630\u0641","acronym_desc":"\u0645\u062e\u0641\u0641","abbr_desc":"\u0627\u062e\u062a\u0635\u0627\u0631","cite_desc":"\u0646\u0642\u0644 \u0642\u0648\u0644"},style:{"delta_height":"","delta_width":"",desc:"\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0633\u062a\u0627\u06cc\u0644 CSS"},paste:{"plaintext_mode":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u062d\u0627\u0644\u062a \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0628\u0631\u06af\u0634\u062a \u0628\u0647 \u062d\u0627\u0644\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0627\u0642\u0627\u0639\u062f\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f.","plaintext_mode_sticky":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u062d\u0627\u0644\u062a \u0633\u0627\u062f\u0647 \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u0628\u0631\u06af\u0634\u062a \u0628\u0647 \u062d\u0627\u0644\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0627\u0642\u0627\u0639\u062f\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f. \u0628\u0639\u062f \u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f\u06cc\u062f \u0628\u0647 \u062d\u0627\u0644\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0627\u0642\u0627\u0639\u062f\u0647 \u0628\u0627\u0632 \u0645\u06cc \u06af\u0631\u062f\u06cc\u062f.","selectall_desc":"\u0627\u0646\u062a\u062e\u0627\u0628 \u0647\u0645\u0647","paste_word_desc":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0627\u0632 \u0648\u064f\u0631\u062f","paste_text_desc":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062a\u0646 \u0633\u0627\u062f\u0647"},"paste_dlg":{"word_title":"\u062c\u0647\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u0627\u0632 CTRL+V \u0628\u0631 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f.","text_linebreaks":"\u062d\u0641\u0638 \u0642\u0637\u0639 \u062e\u0637\u0648\u0637","text_title":"\u062c\u0647\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u0627\u0632 CTRL+V \u0628\u0631 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"\u0633\u0644\u0648\u0644",col:"\u0633\u062a\u0648\u0646",row:"\u0633\u0637\u0631",del:"\u062d\u0630\u0641 \u062c\u062f\u0648\u0644","copy_row_desc":"\u06a9\u067e\u06cc \u0633\u0637\u0631 \u062c\u062f\u0648\u0644","cut_row_desc":"\u0628\u0631\u0634 (Cut) \u0633\u0637\u0631 \u062c\u062f\u0648\u0644","paste_row_after_desc":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 (Paste) \u0633\u0637\u0631 \u062c\u062f\u0648\u0644 \u062f\u0631 \u0628\u0639\u062f","paste_row_before_desc":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 (Paste) \u0633\u0637\u0631 \u062c\u062f\u0648\u0644 \u062f\u0631 \u0642\u0628\u0644","props_desc":"\u0645\u0634\u062e\u0635\u0627\u062a \u062c\u062f\u0648\u0644","cell_desc":"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0644\u0648\u0644 \u062c\u062f\u0648\u0644","row_desc":"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0637\u0631 \u062c\u062f\u0648\u0644","merge_cells_desc":"\u0627\u062f\u063a\u0627\u0645 \u0633\u0644\u0648\u0644 \u0647\u0627\u06cc \u062c\u062f\u0648\u0644","split_cells_desc":"\u062a\u0642\u0633\u06cc\u0645 \u0633\u0644\u0648\u0644 \u0647\u0627\u06cc \u062c\u062f\u0648\u0644 \u0627\u062f\u063a\u0627\u0645 \u0634\u062f\u0647","delete_col_desc":"\u062d\u0630\u0641 \u0633\u062a\u0648\u0646","col_after_desc":"\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u062f\u0631 \u0628\u0639\u062f","col_before_desc":"\u062f\u0631\u062c \u0633\u062a\u0648\u0646 \u062f\u0631 \u0642\u0628\u0644","delete_row_desc":"\u062d\u0630\u0641 \u0633\u0637\u0631","row_after_desc":"\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u0628\u0639\u062f","row_before_desc":"\u062f\u0631\u062c \u0633\u0637\u0631 \u062f\u0631 \u0642\u0628\u0644",desc:"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062c\u062f\u0648\u0644"},autosave:{"warning_message":"\u0627\u06af\u0631 \u0645\u062d\u062a\u0648\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 \u0627\u0632 \u0628\u06cc\u0646 \u0645\u06cc\u200c\u0631\u0648\u062f. \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u062d\u062a\u0648\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062f\u0627\u0631\u06cc\u062f\u061f.","restore_content":"\u0628\u0627\u0632\u06af\u0631\u062f\u0627\u0646\u06cc \u0645\u062d\u062a\u0648\u0627 \u0627\u0632 \u0630\u062e\u06cc\u0631\u0647\u200c\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631","unload_msg":"\u0627\u06af\u0631 \u0627\u0632 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u0628\u0647 \u062c\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0628\u0631\u0648\u06cc\u062f \u060c \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u062f\u0631 \u0645\u062d\u062a\u0648\u0627 \u0627\u0632 \u062f\u0633\u062a \u062e\u0648\u0627\u0647\u062f \u0631\u0641\u062a."},fullscreen:{desc:"\u062a\u0639\u0648\u06cc\u0636 \u0628\u0647 \u062d\u0627\u0644\u062a \u0635\u0641\u062d\u0647 \u06a9\u0627\u0645\u0644"},media:{"delta_height":"","delta_width":"",edit:"\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0633\u0627\u0646\u0647 \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 (Embeded Media)",desc:"\u062f\u0631\u062c / \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0633\u0627\u0646\u0647 \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 (Embeded Media)"},fullpage:{desc:"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0646\u062f","delta_width":"","delta_height":""},template:{desc:"\u062f\u0631\u062c \u0645\u062d\u062a\u0648\u0627\u06cc \u0642\u0627\u0644\u0628 \u0627\u0632 \u067e\u06cc\u0634 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647"},visualchars:{desc:"\u0631\u0648\u0634\u0646/\u062e\u0627\u0645\u0648\u0634 \u06a9\u0631\u062f\u0646 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0647\u0627\u06cc \u06a9\u0646\u062a\u0631\u0644 \u0628\u0635\u0631\u06cc (Visual)."},spellchecker:{desc:"\u062a\u0639\u0648\u06cc\u0636 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0646\u062f\u0647 \u0627\u0645\u0644\u0627\u0621",menu:"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u0646\u062f\u0647 \u0627\u0645\u0644\u0627\u0621","ignore_word":"\u0686\u0634\u0645 \u067e\u0648\u0634\u06cc \u0627\u0632 \u06a9\u0644\u0645\u0647","ignore_words":"\u0686\u0634\u0645 \u067e\u0648\u0634\u06cc \u0627\u0632 \u0647\u0645\u0647",langs:"\u0632\u0628\u0627\u0646 \u0647\u0627",wait:"\u0644\u0637\u0641\u0627 \u0645\u0646\u062a\u0638\u0631 \u0628\u0645\u0627\u0646\u06cc\u062f...",sug:"\u067e\u06cc\u0634\u0646\u0647\u0627\u062f\u0627\u062a","no_sug":"\u0628\u062f\u0648\u0646 \u067e\u06cc\u0634\u0646\u0647\u0627\u062f","no_mpell":"\u0647\u06cc\u0686 \u062e\u0637\u0627\u06cc \u0627\u0645\u0644\u0627\u0626\u06cc \u06cc\u0627\u0641\u062a\u0647 \u0646\u0634\u062f.","learn_word":"\u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u06a9\u0644\u0645\u0647"},pagebreak:{desc:"\u062f\u0631\u062c \u0642\u0637\u0639 \u0635\u0641\u062d\u0647 \u0628\u0631\u0627\u06cc \u0686\u0627\u067e"},advlist:{types:"\u0627\u0646\u0648\u0627\u0639",def:"\u067e\u06cc\u0634\u200c\u0641\u0631\u0636","lower_alpha":"\u0627\u0644\u0641\u0628\u0627\u06cc \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u06a9\u0648\u0686\u06a9","lower_greek":"\u06cc\u0648\u0646\u0627\u0646\u06cc \u06a9\u0648\u0686\u06a9","lower_roman":"\u0631\u0648\u0645\u06cc \u06a9\u0648\u0686\u06a9","upper_alpha":"\u0627\u0644\u0641\u0628\u0627\u06cc \u0627\u0646\u06af\u0644\u06cc\u0633\u06cc \u0628\u0632\u0631\u06af","upper_roman":"\u0631\u0648\u0645\u06cc \u0628\u0632\u0631\u06af",circle:"\u062f\u0627\u06cc\u0631\u0647",disc:"\u0642\u0631\u0635 \u0645\u0627\u0646\u0646\u062f",square:"\u0645\u0631\u0628\u0639"},colors:{"333300":"\u0632\u06cc\u062a\u0648\u0646\u06cc \u062a\u06cc\u0631\u0647","993300":"\u0646\u0627\u0631\u0646\u062c\u06cc \u0633\u0648\u062e\u062a\u0647","000000":"\u0645\u0634\u06a9\u06cc","003300":"\u0633\u0628\u0632 \u062a\u06cc\u0631\u0647","003366":"\u0644\u0627\u062c\u0648\u0631\u062f\u06cc \u062a\u06cc\u0631\u0647","000080":"\u06a9\u0628\u0648\u062f","333399":"\u0646\u06cc\u0644\u06cc","333333":"\u0637\u0648\u0633\u06cc \u062e\u06cc\u0644\u06cc \u062a\u06cc\u0631\u0647","800000":"\u0628\u0644\u0648\u0637\u06cc",FF6600:"\u0646\u0627\u0631\u0646\u062c\u06cc","808000":"\u0632\u06cc\u062a\u0648\u0646\u06cc","008000":"\u0633\u0628\u0632","008080":"\u0627\u0637\u0644\u0633\u06cc","0000FF":"\u0622\u0628\u06cc","666699":"\u0622\u0628\u06cc \u062e\u0627\u06a9\u0633\u062a\u0631\u06cc","808080":"\u0637\u0648\u0633\u06cc",FF0000:"\u0633\u0631\u062e",FF9900:"\u06a9\u0647\u0631\u0628\u0627\u06cc\u06cc","99CC00":"\u0632\u0631\u062f \u0645\u0627\u06cc\u0644 \u0628\u0647 \u0633\u0628\u0632","339966":"\u0633\u0628\u0632 \u0645\u0627\u06cc\u0644 \u0628\u0647 \u0622\u0628\u06cc","33CCCC":"\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc","3366FF":"\u0622\u0628\u06cc \u0633\u0644\u0637\u0646\u062a\u06cc","800080":"\u0628\u0646\u0641\u0634","999999":"\u0637\u0648\u0633\u06cc \u0645\u062a\u0648\u0633\u0637",FF00FF:"\u0633\u0631\u062e\u0627\u0628\u06cc",FFCC00:"\u0637\u0644\u0627\u06cc\u06cc",FFFF00:"\u0632\u0631\u062f","00FF00":"\u0644\u06cc\u0645\u0648\u06cc\u06cc","00FFFF":"\u0622\u0628\u06cc \u0646\u0642\u0631\u0647\u200c\u0627\u06cc","00CCFF":"\u0622\u0628\u06cc \u0622\u0633\u0645\u0627\u0646\u06cc","993366":"\u0642\u0647\u0648\u0647\u200c\u0627\u06cc",C0C0C0:"\u0646\u0642\u0631\u0647\u200c\u0627\u06cc",FF99CC:"\u0635\u0648\u0631\u062a\u06cc",FFCC99:"\u0647\u0644\u0648\u06cc\u06cc",FFFF99:"\u0632\u0631\u062f \u0631\u0648\u0634\u0646",CCFFCC:"\u0633\u0628\u0632 \u0631\u0648\u0634\u0646",CCFFFF:"\u0641\u06cc\u0631\u0648\u0632\u0647\u200c\u0627\u06cc \u0631\u0648\u0634\u0646","99CCFF":"\u0622\u0628\u06cc \u0622\u0633\u0645\u0627\u0646\u06cc \u0631\u0648\u0634\u0646",CC99FF:"\u06af\u0648\u062c\u0647\u200c\u0627\u06cc",FFFFFF:"\u0633\u0641\u06cc\u062f"},aria:{"rich_text_area":"\u0645\u062a\u0646 \u063a\u0646\u06cc"},wordcount:{words:"\u06a9\u0644\u0645\u0627\u062a:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fi.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fi.js
new file mode 100644
index 000000000..08eea143c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({fi:{common:{"more_colors":"Enemm\u00e4n v\u00e4rej\u00e4","invalid_data":"Virhe: Sy\u00f6tit virheellisi\u00e4 arvoja, ne n\u00e4kyv\u00e4t punaisina.","popup_blocked":"Sinulla on k\u00e4yt\u00f6ss\u00e4si ohjelma, joka est\u00e4\u00e4 ponnahdusikkunoiden n\u00e4yt\u00f6n. Sinun t\u00e4ytyy kytke\u00e4 ponnahdusikkunoiden esto pois p\u00e4\u00e4lt\u00e4 voidaksesi hy\u00f6dynt\u00e4\u00e4 t\u00e4ysin t\u00e4t\u00e4 ty\u00f6kalua.","clipboard_no_support":"Selaimesi ei ole tuettu, k\u00e4yt\u00e4 sen sijaan n\u00e4pp\u00e4inoikoteit\u00e4.","clipboard_msg":"Kopioi/Leikkaa/Liit\u00e4 ei ole k\u00e4ytett\u00e4viss\u00e4 Mozilla ja Firefox -selaimilla.\nHaluatko lis\u00e4tietoa t\u00e4st\u00e4 ongelmasta?","not_set":"-- Ei m\u00e4\u00e4ritetty --","class_name":"Luokka",browse:"Selaa",close:"Sulje",cancel:"Peru",update:"P\u00e4ivit\u00e4",insert:"Lis\u00e4\u00e4",apply:"K\u00e4yt\u00e4","edit_confirm":"Haluatko k\u00e4ytt\u00e4\u00e4 WYSIWYG-tilaa t\u00e4ss\u00e4 tekstikent\u00e4ss\u00e4?","invalid_data_number":"{#field} t\u00e4ytyy olla numero","invalid_data_min":"{#field} t\u00e4ytyy olla suurempi numero kuin {#min}","invalid_data_size":"{#field} t\u00e4ytyy olla numero tai prosentti",value:"(arvo)"},contextmenu:{full:"Molemmille puolille",right:"Oikealle",center:"Keskelle",left:"Vasemmalle",align:"Tasaus"},insertdatetime:{"day_short":"su,ma,ti,ke,to,pe,la,su","day_long":"sunnuntai,maanantai,tiistai,keskiviikko,torstai,perjantai,lauantai,sunnuntai","months_short":"tammi,helmi,maalis,huhti,touko,kes\u00e4,hein\u00e4,elo,syys,loka,marras,joulu","months_long":"tammikuu,helmikuu,maaliskuu,huhtikuu,toukokuu,kes\u00e4kuu,hein\u00e4kuu,elokuu,syyskuu,lokakuu,marraskuu,joulukuu","inserttime_desc":"Lis\u00e4\u00e4 kellonaika","insertdate_desc":"Lis\u00e4\u00e4 p\u00e4iv\u00e4m\u00e4\u00e4r\u00e4","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Tulosta"},preview:{"preview_desc":"Esikatselu"},directionality:{"rtl_desc":"Suunta oikealta vasemmalle","ltr_desc":"Suunta vasemmalta oikealle"},layer:{content:"Uusi taso...","absolute_desc":"Absoluuttinen sijainti","backward_desc":"Siirr\u00e4 taaksep\u00e4in","forward_desc":"Siirr\u00e4 eteenp\u00e4in","insertlayer_desc":"Lis\u00e4\u00e4 uusi taso"},save:{"save_desc":"Tallenna","cancel_desc":"Peru kaikki muutokset"},nonbreaking:{"nonbreaking_desc":"Lis\u00e4\u00e4 tyhj\u00e4 merkki (nbsp)"},iespell:{download:"ieSpell-ohjelmaa ei havaittu. Haluatko asentaa sen nyt?","iespell_desc":"Oikeinkirjoituksen tarkistus"},advhr:{"advhr_desc":"Vaakatasoviivain","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hymi\u00f6t","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Etsi ja korvaa","search_desc":"Etsi","delta_width":"","delta_height":""},advimage:{"image_desc":"Lis\u00e4\u00e4/muokkaa kuvaa","delta_width":"","delta_height":""},advlink:{"link_desc":"Lis\u00e4\u00e4/muokkaa linkki\u00e4","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Lis\u00e4\u00e4/muokkaa attribuutteja","ins_desc":"Lis\u00e4ys","del_desc":"Poisto","acronym_desc":"Kirjainlyhenne","abbr_desc":"Lyhenne","cite_desc":"Sitaatti","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Muokkaa CSS-tyylej\u00e4","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Liitt\u00e4minen on nyt pelkk\u00e4n\u00e4 tekstin\u00e4. Klikkaa uudelleen vaihtaaksesi takaisin tavalliseen tilaan.","plaintext_mode_sticky":"Liitt\u00e4minen on nyt pelkk\u00e4n\u00e4 tekstin\u00e4. Klikkaa uudelleen vaihtaaksesi takaisin tavalliseen tilaan. Palaat takaisin tavalliseen tilaan liitetty\u00e4si jotakin.","selectall_desc":"Valitse kaikki","paste_word_desc":"Liit\u00e4 Wordist\u00e4","paste_text_desc":"Liit\u00e4 pelkk\u00e4n\u00e4 tekstin\u00e4"},"paste_dlg":{"word_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan.","text_linebreaks":"S\u00e4ilyt\u00e4 rivinvaihdot","text_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan."},table:{"cellprops_delta_width":"80",cell:"Solu",col:"Sarake",row:"Rivi",del:"Poista taulukko","copy_row_desc":"Kopioi taulukon rivi","cut_row_desc":"Leikkaa taulukon rivi","paste_row_after_desc":"Liit\u00e4 taulukon rivi j\u00e4lkeen","paste_row_before_desc":"Liit\u00e4 taulukon rivi ennen","props_desc":"Taulukon asetukset","cell_desc":"Taulukon solun asetukset","row_desc":"Taulukon rivin asetukset","merge_cells_desc":"Yhdist\u00e4 taulukon solut","split_cells_desc":"Jaa yhdistetyt taulukon solut","delete_col_desc":"Poista sarake","col_after_desc":"Lis\u00e4\u00e4 sarake j\u00e4lkeen","col_before_desc":"Lis\u00e4\u00e4 sarake ennen","delete_row_desc":"Poista rivi","row_after_desc":"Lis\u00e4\u00e4 rivi j\u00e4lkeen","row_before_desc":"Lis\u00e4\u00e4 rivi ennen",desc:"Lis\u00e4\u00e4 uusi taulukko","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Jos palautat automaattisesti tallennetun sis\u00e4ll\u00f6n, menet\u00e4t t\u00e4ll\u00e4 hetkell\u00e4 editorissa olevan sis\u00e4ll\u00f6n.\n\nHaluatko varmasti palauttaa tallennetun sis\u00e4ll\u00f6n?","restore_content":"Palauta automaattisesti tallennettu sis\u00e4lt\u00f6.","unload_msg":"Tekem\u00e4si muutokset menetet\u00e4\u00e4n jos poistut t\u00e4lt\u00e4 sivulta."},fullscreen:{desc:"Kokoruututila"},media:{edit:"Muokkaa upotettua mediaa",desc:"Lis\u00e4\u00e4/muokkaa upotettua mediaa","delta_height":"","delta_width":""},fullpage:{desc:"Tiedoston asetukset","delta_width":"","delta_height":""},template:{desc:"Lis\u00e4\u00e4 esim\u00e4\u00e4ritetty\u00e4 sivupohjasis\u00e4lt\u00f6\u00e4"},visualchars:{desc:"N\u00e4yt\u00e4/piilota muotoilumerkit."},spellchecker:{desc:"Oikeinkirjoituksen tarkistus",menu:"Oikeinkirjoituksen asetukset","ignore_word":"Ohita sana","ignore_words":"Ohita kaikki",langs:"Kielet",wait:"Odota ole hyv\u00e4...",sug:"Ehdotukset","no_sug":"Ei ehdotuksia","no_mpell":"Virheit\u00e4 ei l\u00f6ytynyt.","learn_word":"Opettele sana"},pagebreak:{desc:"Lis\u00e4\u00e4 sivunvaihto."},advlist:{types:"Tyypit",def:"Oletus","lower_alpha":"pienet kirjaimet: a, b, c","lower_greek":"pienet kirjaimet: \u03b1, \u03b2, \u03b3","lower_roman":"pienet kirjaimet: i, ii, iii","upper_alpha":"isot kirjaimet: A, B, C","upper_roman":"isot kirjaimet: I, II, III",circle:"Pallo",disc:"Ympyr\u00e4",square:"Neli\u00f6"},colors:{"333300":"Tummanoliivi","993300":"Tummanoranssi","000000":"Musta","003300":"Tummanvihre\u00e4","003366":"Tummantaivaansininen","000080":"Laivaston sininen","333399":"Indigonsininen","333333":"Hyvin tummanharmaa","800000":"Punaruskea",FF6600:"Oranssi","808000":"Oliivi","008000":"Vihre\u00e4","008080":"Sinivihre\u00e4","0000FF":"Sininen","666699":"Harmaansininen","808080":"Harmaa",FF0000:"Punainen",FF9900:"Kullanruskea","99CC00":"Keltaisenvihre\u00e4","339966":"Merenvihre\u00e4","33CCCC":"Turkoosi","3366FF":"Syv\u00e4n sininen","800080":"Violetti","999999":"Keskiharmaa",FF00FF:"Magenta",FFCC00:"Kulta",FFFF00:"Keltainen","00FF00":"Lime","00FFFF":"Sinivihre\u00e4","00CCFF":"Taivaansininen","993366":"Ruskea",C0C0C0:"Hopea",FF99CC:"Vaaleanpunainen",FFCC99:"Persikka",FFFF99:"Vaaleankeltainen",CCFFCC:"Haalistuneen vihre\u00e4",CCFFFF:"Haalistuneen syaani","99CCFF":"Vaaleantaivaansininen",CC99FF:"Luumunpunainen",FFFFFF:"Valkoinen"},aria:{"rich_text_area":"Rikastettu tekstialue"},wordcount:{words:"Sanaa:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fr.js
new file mode 100644
index 000000000..b9cfd8b51
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/fr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({fr:{common:{"more_colors":"Plus de couleurs","invalid_data":"Erreur : saisie de valeurs incorrectes. Elles sont mises en \u00e9vidence en rouge.","popup_blocked":"D\u00e9sol\u00e9, nous avons d\u00e9tect\u00e9 que votre bloqueur de popup a bloqu\u00e9 une fen\u00eatre dont l\'application a besoin. Vous devez d\u00e9sactiver votre bloqueur de popup pour pouvoir utiliser cet outil.","clipboard_no_support":"Actuellement non support\u00e9 par votre navigateur.\n Veuillez utiliser les raccourcis clavier \u00e0 la place.","clipboard_msg":"Les fonctions Copier/Couper/Coller ne sont pas valables sur Mozilla et Firefox.\nSouhaitez-vous avoir plus d\'informations sur ce sujet ?","not_set":"-- non d\u00e9fini --","class_name":"Classe",browse:"parcourir",close:"Fermer",cancel:"Annuler",update:"Mettre \u00e0 jour",insert:"Ins\u00e9rer",apply:"Appliquer","edit_confirm":"Souhaitez-vous utiliser le mode WYSIWYG pour cette zone de texte ?","invalid_data_number":"{#field} doit \u00eatre un nombre","invalid_data_min":"{#field} doit \u00eatre un nombre plus grand que {#min}","invalid_data_size":"{#field} doit \u00eatre un nombre ou un pourcentage",value:"(valeur)"},contextmenu:{full:"Justifi\u00e9",right:"Droite",center:"Centr\u00e9",left:"Gauche",align:"Alignement"},insertdatetime:{"day_short":"Dim,Lun,Mar,Mer,Jeu,Ven,Sam,Dim","day_long":"Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche","months_short":"Jan,F\u00e9v,Mar,Avr,Mai,Juin,Juil,Ao\u00fbt,Sep,Oct,Nov,D\u00e9c","months_long":"Janvier,F\u00e9vrier,Mars,Avril,Mai,Juin,Juillet,Ao\u00fbt,Septembre,Octobre,Novembre,D\u00e9cembre","inserttime_desc":"Ins\u00e9rer l\'heure","insertdate_desc":"Ins\u00e9rer la date","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimer"},preview:{"preview_desc":"Pr\u00e9visualiser"},directionality:{"rtl_desc":"\u00c9criture de droite \u00e0 gauche","ltr_desc":"\u00c9criture de gauche \u00e0 droite"},layer:{content:"Nouvelle couche\u2026","absolute_desc":"Activer le positionnement absolu","backward_desc":"D\u00e9placer vers l\'arri\u00e8re","forward_desc":"D\u00e9placer vers l\'avant","insertlayer_desc":"Ins\u00e9rer une nouvelle couche"},save:{"save_desc":"Enregistrer","cancel_desc":"Annuler toutes les modifications"},nonbreaking:{"nonbreaking_desc":"Ins\u00e9rer une espace ins\u00e9cable"},iespell:{download:"ieSpell n\'est pas install\u00e9. Souhaitez-vous l\'installer maintenant ?","iespell_desc":"Lancer le v\u00e9rificateur d\'orthographe"},advhr:{"delta_height":"Ecart de hauteur","delta_width":"Ecart de largeur","advhr_desc":"Ins\u00e9rer un trait horizontal"},emotions:{"delta_height":"delta_height","delta_width":"delta_width","emotions_desc":"\u00c9motic\u00f4nes"},searchreplace:{"replace_desc":"Rechercher / remplacer","search_desc":"Rechercher","delta_width":"","delta_height":""},advimage:{"image_desc":"Ins\u00e9rer / \u00e9diter une image","delta_width":"","delta_height":""},advlink:{"link_desc":"Ins\u00e9rer / \u00e9diter un lien","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Ins\u00e9rer / \u00e9diter les attributs","ins_desc":"Ins\u00e9r\u00e9","del_desc":"Barr\u00e9","acronym_desc":"Acronyme","abbr_desc":"Abr\u00e9viation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u00c9diter la feuille de style (CSS)","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Le collage est actuellement en mode texte non format\u00e9. Cliquez \u00e0 nouveau pour revenir en mode de collage ordinaire.","plaintext_mode_sticky":"Le collage est actuellement en mode texte non format\u00e9. Cliquez \u00e0 nouveau pour revenir en mode de collage ordinaire. Apr\u00e8s avoir coll\u00e9 quelque chose, vous retournerez en mode de collage ordinaire.","selectall_desc":"Tout s\u00e9lectionner","paste_word_desc":"Coller un texte cr\u00e9\u00e9 sous Word","paste_text_desc":"Coller comme texte brut"},"paste_dlg":{"word_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre.","text_linebreaks":"Conserver les retours \u00e0 la ligne","text_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre."},table:{cell:"Cellule",col:"Colonne",row:"Ligne",del:"Effacer le tableau","copy_row_desc":"Copier la ligne","cut_row_desc":"Couper la ligne","paste_row_after_desc":"Coller la ligne apr\u00e8s","paste_row_before_desc":"Coller la ligne avant","props_desc":"Propri\u00e9t\u00e9s du tableau","cell_desc":"Propri\u00e9t\u00e9s de la cellule","row_desc":"Propri\u00e9t\u00e9s de la ligne","merge_cells_desc":"Fusionner les cellules","split_cells_desc":"Scinder les cellules fusionn\u00e9es","delete_col_desc":"Effacer la colonne","col_after_desc":"Ins\u00e9rer une colonne apr\u00e8s","col_before_desc":"Ins\u00e9rer une colonne avant","delete_row_desc":"Effacer la ligne","row_after_desc":"Ins\u00e9rer une ligne apr\u00e8s","row_before_desc":"Ins\u00e9rer une ligne avant",desc:"Ins\u00e9rer un nouveau tableau","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Si vous restaurez le contenu sauv\u00e9, vous perdrez le contenu qui est actuellement dans l\'\u00e9diteur.\n\n\u00cates-vous s\u00fbr de vouloir restaurer le contenu sauv\u00e9 ?","restore_content":"Restaurer le contenu auto-sauvegard\u00e9.","unload_msg":"Les modifications apport\u00e9es seront perdues si vous quittez cette page."},fullscreen:{desc:"Passer en mode plein \u00e9cran"},media:{edit:"\u00c9diter un m\u00e9dia incorpor\u00e9",desc:"Ins\u00e9rer / \u00e9diter un m\u00e9dia incorpor\u00e9","delta_height":"","delta_width":""},fullpage:{desc:"Propri\u00e9t\u00e9s du document","delta_width":"","delta_height":""},template:{desc:"Ins\u00e9rer un mod\u00e8le pr\u00e9d\u00e9fini."},visualchars:{desc:"Activer les caract\u00e8res de mise en page."},spellchecker:{desc:"Activer le v\u00e9rificateur d\'orthographe",menu:"Param\u00e8tres du v\u00e9rificateur d\'orthographe","ignore_word":"Ignorer le mot","ignore_words":"Tout ignorer",langs:"Langues",wait:"Veuillez patienter\u2026",sug:"Suggestions","no_sug":"Aucune suggestion","no_mpell":"Aucune erreur trouv\u00e9e.","learn_word":"Apprendre le mot"},pagebreak:{desc:"Ins\u00e9rer un saut de page."},advlist:{types:"Types",def:"D\u00e9faut","lower_alpha":"Alpha minuscule","lower_greek":"Grec minuscule","lower_roman":"Romain minuscule","upper_alpha":"Alpha majuscule","upper_roman":"Romain majuscule",circle:"Cercle",disc:"Disque",square:"Carr\u00e9"},colors:{"333300":"Olive fonc\u00e9","993300":"Orange br\u00fbl\u00e9","000000":"Noir","003300":"Vert fonc\u00e9","003366":"Azur fonc\u00e9","000080":"Bleu marine","333399":"Indigo","333333":"Gris tr\u00e8s fonc\u00e9","800000":"Bordeaux",FF6600:"Orange","808000":"Olive","008000":"Vert","008080":"Sarcelle","0000FF":"Bleu","666699":"Bleu gris\u00e2tre","808080":"Gris",FF0000:"Rouge",FF9900:"Ambre","99CC00":"Jaune vert","339966":"Mer verte","33CCCC":"Turquoise","3366FF":"Bleu royal","800080":"Violet","999999":"Gris moyen",FF00FF:"Magenta",FFCC00:"Or",FFFF00:"Jaune","00FF00":"Lime","00FFFF":"Bleu vert","00CCFF":"Bleu ciel","993366":"Brun",C0C0C0:"Argent",FF99CC:"Rose",FFCC99:"P\u00eache",FFFF99:"Jaune clair",CCFFCC:"Vert p\u00e2le",CCFFFF:"Cyan p\u00e2le","99CCFF":"Bleu ciel clair",CC99FF:"Prune",FFFFFF:"Blanc"},aria:{"rich_text_area":"Texte riche"},wordcount:{words:"Mots:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/gl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/gl.js
new file mode 100644
index 000000000..08aff0856
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/gl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({gl:{common:{"more_colors":"Mais cores","invalid_data":"Error: Introducidos valores non v\u00e1lidos, est\u00e1n marcados en vermello.","popup_blocked":"O seu bloqueador de vent\u00e1s emerxentes deshabilitou unha vent\u00e1 que precisa pra o funcionamento da aplicaci\u00f3n. Precisa deshabilita-lo bloqueo de `popups` neste sitio pra utilizar \u00f3 m\u00e1ximo esta ferramenta.","clipboard_no_support":"O seu navegador non soporta estas funci\u00f3ns, use os atallos de teclado.","clipboard_msg":"Copiar/Cortar/Pegar non est\u00e1 disponible en Mozilla e Firefox.\n\u00bfDesexa obter mais informaci\u00f3n sobre de este asunto?","not_set":"-- Ning\u00fan --","class_name":"Clase",browse:"Examinar",close:"Cerrar",cancel:"Cancelar",update:"Actualizar",insert:"Insertar",apply:"Apricar","edit_confirm":"\u00bfDesexa utiliza-lo modo WYSIWYG pra esta caixa de texto?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Xustificado",right:"Dereita",center:"Centrado",left:"Esquerda",align:"Ali\u00f1amento"},insertdatetime:{"day_short":"Dom,Lun,Mar,M\u00e9r,Xov,Ver,S\u00e1b,Dom","day_long":"Domingo,Luns,Martes,M\u00e9rcores,Xoves,Venres,S\u00e1bado,Domingo","months_short":"Xan,Feb,Mar,Abr,Mai,Xu\u00f1,Xul,Ago,Set,Out,Nov,Dec","months_long":"Xaneito,Febreiro,Marzo,Abril,Maio,Xu\u00f1o,Xullo,Agosto,Setembro,Outubro,Novembro,Decembro","inserttime_desc":"Insertar hora","insertdate_desc":"Insertar data","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimir"},preview:{"preview_desc":"Vista previa"},directionality:{"rtl_desc":"Direcci\u00f3n dereita a esquerda","ltr_desc":"Direcci\u00f3n esquerda a dereita"},layer:{content:"Nova capa...","absolute_desc":"Posici\u00f3n absoluta","backward_desc":"Recuar","forward_desc":"Avanzar","insertlayer_desc":"Insertar nova capa"},save:{"save_desc":"Gardar","cancel_desc":"Cancelar todo-los cambios"},nonbreaking:{"nonbreaking_desc":"Insertar espacio non colapsable"},iespell:{download:"Non se detectou \'ieSpell\'. \u00bfDesexa instala-lo agora?","iespell_desc":"Corrector ortogr\u00e1fico"},advhr:{"advhr_desc":"Regra horizontal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoticones","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Buscar/Reemplazar","search_desc":"Buscar","delta_width":"","delta_height":""},advimage:{"image_desc":"Insertar/editar imaxe","delta_width":"","delta_height":""},advlink:{"link_desc":"Insertar/editar hiperv\u00ednculo","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insertar/Editar atributos","ins_desc":"Inserci\u00f3n","del_desc":"Borrado","acronym_desc":"Acr\u00f3nimo","abbr_desc":"Abreviatura","cite_desc":"Cita","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Editar Estilo CSS","delta_height":"","delta_width":""},paste:{"selectall_desc":"Seleccionar todo","paste_word_desc":"Pegar desde Word","paste_text_desc":"Pegar como texto simple","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V no teclado pra pega-lo texto na vent\u00e1.","text_linebreaks":"Manter salto de li\u00f1as","text_title":"Use CTRL+V no teclado pra pega-lo texto na vent\u00e1."},table:{cell:"Celda",col:"Columna",row:"Fila",del:"Eliminar t\u00e1boa","copy_row_desc":"Copiar fila","cut_row_desc":"Cortar fila","paste_row_after_desc":"Pegar filas (desp\u00f3is)","paste_row_before_desc":"Pegar filas (antes)","props_desc":"Propiedades da t\u00e1boa","cell_desc":"Propiedades da celda","row_desc":"Propiedades da fila","merge_cells_desc":"Vincular celdas","split_cells_desc":"Dividir celdas","delete_col_desc":"Suprimir columna","col_after_desc":"Insertar columna (desp\u00f3is)","col_before_desc":"Insertar columna (antes)","delete_row_desc":"Suprimir fila","row_after_desc":"Insertar fila (desp\u00f3is)","row_before_desc":"Insertar fila (antes)",desc:"Inserta unha nova t\u00e1boa","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"Os cambios realizados perderanse se sae desta p\u00e1xina.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Cambiar a modo Pantalla Completa"},media:{edit:"Editar medio embebido",desc:"Insertar/editar medio embebido","delta_height":"","delta_width":""},fullpage:{desc:"Propiedades do documento","delta_width":"","delta_height":""},template:{desc:"Insertar contido de plantilla predefinida"},visualchars:{desc:"Caracteres de control ON/OFF."},spellchecker:{desc:"Conmutar corrector ortogr\u00e1fico",menu:"Configuraci\u00f3n de corrector ortogr\u00e1fico","ignore_word":"Ignorar verba","ignore_words":"Ignorar todo",langs:"Idiomas",wait:"Agarde...",sug:"Suxerencias","no_sug":"Sen suxerencias","no_mpell":"Non se atoparon erros.","learn_word":"Learn word"},pagebreak:{desc:"Insertar fin de p\u00e1xina"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/gu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/gu.js
new file mode 100644
index 000000000..8e78d3b8e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/gu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({gu:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/he.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/he.js
new file mode 100644
index 000000000..0f4e12d7b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/he.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({he:{common:{"more_colors":"\u05e2\u05d5\u05d3 \u05e6\u05d1\u05e2\u05d9\u05dd","invalid_data":"\u05e9\u05d2\u05d9\u05d0\u05d4: \u05d4\u05d5\u05e7\u05dc\u05d3 \u05de\u05d9\u05d3\u05e2 \u05dc\u05d0 \u05ea\u05e7\u05e0\u05d9. \u05d4\u05de\u05d9\u05d3\u05e2 \u05e1\u05d5\u05de\u05df \u05d1\u05d0\u05d3\u05d5\u05dd.","popup_blocked":"\u05d7\u05d5\u05e1\u05dd \u05e4\u05e8\u05d9\u05d8\u05d9\u05dd \u05de\u05d5\u05e7\u05e4\u05e6\u05d9\u05dd \u05de\u05e0\u05e2 \u05de\u05d7\u05dc\u05d5\u05df \u05d7\u05e9\u05d5\u05d1 \u05de\u05dc\u05d4\u05e4\u05ea\u05d7,\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05db\u05dc\u05d9 \u05d6\u05d4 \u05e2\u05dc\u05d9\u05da \u05dc\u05d1\u05d8\u05dc \u05d0\u05ea \u05d7\u05d5\u05e1\u05dd \u05d4\u05e4\u05e8\u05d9\u05d8\u05d9\u05dd","clipboard_no_support":"\u05db\u05e8\u05d2\u05e2 \u05dc\u05d0 \u05e0\u05ea\u05de\u05da \u05e2\u05dc \u05d9\u05d3\u05d9 \u05d4\u05d3\u05e4\u05d3\u05e4\u05df \u05e9\u05dc\u05da. \u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e7\u05d9\u05e6\u05d5\u05e8\u05d9 \u05d4\u05de\u05e7\u05dc\u05d3\u05ea.","clipboard_msg":"\n \u05d4\u05e2\u05ea\u05e7\u05d4/\u05d2\u05d6\u05d9\u05e8\u05d4 \u05d5\u05d4\u05d3\u05d1\u05e7\u05d4 \u05d0\u05d9\u05e0\u05dd \u05d6\u05de\u05d9\u05e0\u05d9\u05dd \u05d1 Mozilla \u05d5\u05d1-Firefox.\n \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05e7\u05d1\u05dc \u05de\u05d9\u05d3\u05e2 \u05e0\u05d5\u05e1\u05e3 \u05e2\u05dc \u05d4\u05e0\u05d5\u05e9\u05d0?\n ","not_set":"-- \u05dc\u05d0 \u05d4\u05d5\u05d2\u05d3\u05e8 --","class_name":"\u05de\u05d7\u05dc\u05e7\u05d4",browse:"\u05e2\u05d9\u05d5\u05df",close:"\u05e1\u05d2\u05d9\u05e8\u05d4",cancel:"\u05d1\u05d9\u05d8\u05d5\u05dc",update:"\u05e2\u05d3\u05db\u05d5\u05df",insert:"\u05d4\u05d5\u05e1\u05e4\u05d4",apply:"\u05d0\u05d9\u05e9\u05d5\u05e8","edit_confirm":"\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05e2\u05d5\u05e8\u05da \u05d4\u05de\u05ea\u05e7\u05d3\u05dd?","invalid_data_number":"{#field} \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05de\u05e1\u05e4\u05e8","invalid_data_min":"{#field} \u05d4\u05de\u05e1\u05e4\u05e8 \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05d2\u05d3\u05d5\u05dc \u05de-{#min}","invalid_data_size":"{#field} \u05d4\u05e2\u05e8\u05da \u05d7\u05d9\u05d9\u05d1 \u05dc\u05d4\u05d9\u05d5\u05ea \u05de\u05e1\u05e4\u05e8 \u05d0\u05d5 \u05d0\u05d7\u05d5\u05d6",value:"(\u05e2\u05e8\u05da)"},contextmenu:{full:"\u05e9\u05e0\u05d9 \u05d4\u05e6\u05d3\u05d3\u05d9\u05dd",right:"\u05d9\u05de\u05d9\u05df",center:"\u05d0\u05de\u05e6\u05e2",left:"\u05e9\u05de\u05d0\u05dc",align:"\u05d9\u05d9\u05e9\u05d5\u05e8"},insertdatetime:{"day_short":"\u05d9\u05d5\u05dd \u05d0\',\u05d9\u05d5\u05dd \u05d1\',\u05d9\u05d5\u05dd \u05d2\',\u05d9\u05d5\u05dd \u05d3\',\u05d9\u05d5\u05dd \u05d4\',\u05d9\u05d5\u05dd \u05d5\',\u05e9\u05d1\u05ea,\u05d9\u05d5\u05dd \u05d0\'","day_long":"\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df,\u05d9\u05d5\u05dd \u05e9\u05e0\u05d9,\u05d9\u05d5\u05dd \u05e9\u05dc\u05d9\u05e9\u05d9,\u05d9\u05d5\u05dd \u05e8\u05d1\u05d9\u05e2\u05d9,\u05d9\u05d5\u05dd \u05d7\u05de\u05d9\u05e9\u05d9,\u05d9\u05d5\u05dd \u05e9\u05d9\u05e9,\u05d9\u05d5\u05dd \u05e9\u05d1\u05ea,\u05d9\u05d5\u05dd \u05e8\u05d0\u05e9\u05d5\u05df","months_short":"\u05d9\u05e0\u05d5\u05d0\u05e8,\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8,\u05de\u05e8\u05e5,\u05d0\u05e4\u05e8\u05d9\u05dc,\u05de\u05d0\u05d9,\u05d9\u05d5\u05e0\u05e2,\u05d9\u05d5\u05dc\u05d9,\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8,\u05e1\u05e4\u05d8\u05de\u05d1\u05e8,\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8,\u05e0\u05d5\u05d1\u05de\u05d1\u05e8,\u05d3\u05e6\u05de\u05d1\u05e8","months_long":"\u05d9\u05e0\u05d5\u05d0\u05e8,\u05e4\u05d1\u05e8\u05d5\u05d0\u05e8,\u05de\u05e8\u05e5,\u05d0\u05e4\u05e8\u05d9\u05dc,\u05de\u05d0\u05d9,\u05d9\u05d5\u05e0\u05e2,\u05d9\u05d5\u05dc\u05d9,\u05d0\u05d5\u05d2\u05d5\u05e1\u05d8,\u05e1\u05e4\u05d8\u05de\u05d1\u05e8,\u05d0\u05d5\u05e7\u05d8\u05d5\u05d1\u05e8,\u05e0\u05d5\u05d1\u05de\u05d1\u05e8,\u05d3\u05e6\u05de\u05d1\u05e8","inserttime_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05d6\u05de\u05df","insertdate_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05ea\u05d0\u05e8\u05d9\u05da","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"\u05d4\u05d3\u05e4\u05e1\u05d4"},preview:{"preview_desc":"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4"},directionality:{"rtl_desc":"\u05db\u05d9\u05d5\u05d5\u05df \u05d8\u05e7\u05e1\u05d8 \u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc","ltr_desc":"\u05db\u05d9\u05d5\u05d5\u05df \u05d8\u05e7\u05e1\u05d8 \u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df"},layer:{content:"\u05e9\u05db\u05d1\u05d4 \u05d7\u05d3\u05e9\u05d4...","absolute_desc":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05de\u05d9\u05e7\u05d5\u05dd \u05de\u05d5\u05d7\u05dc\u05d8","backward_desc":"\u05d4\u05e2\u05d1\u05e8\u05d4 \u05d0\u05d7\u05d5\u05e8\u05d4","forward_desc":"\u05d4\u05e2\u05d1\u05e8\u05d4 \u05e7\u05d3\u05d9\u05de\u05d4","insertlayer_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e9\u05db\u05d1\u05d4 \u05d7\u05d3\u05e9\u05d4"},save:{"save_desc":"\u05e9\u05de\u05d9\u05e8\u05d4","cancel_desc":"\u05d1\u05d9\u05d8\u05d5\u05dc \u05db\u05dc \u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05dd"},nonbreaking:{"nonbreaking_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e8\u05d5\u05d5\u05d7"},iespell:{download:" \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0 ieSpell. \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05ea\u05e7\u05d9\u05df?","iespell_desc":"\u05d1\u05d3\u05d9\u05e7\u05ea \u05d0\u05d9\u05d5\u05ea \u05d1\u05d0\u05e0\u05d2\u05dc\u05d9\u05ea"},advhr:{"advhr_desc":"\u05e7\u05d5 \u05d0\u05d5\u05e4\u05e7\u05d9","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u05e1\u05de\u05d9\u05d9\u05dc\u05d9\u05dd","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u05d4\u05d7\u05dc\u05e4\u05d4","search_desc":"\u05d7\u05d9\u05e4\u05d5\u05e9","delta_width":"","delta_height":""},advimage:{"image_desc":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05ea\u05de\u05d5\u05e0\u05d4","delta_width":"","delta_height":""},advlink:{"link_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u05d4\u05db\u05e0\u05e1/\u05e2\u05e8\u05d5\u05da \u05ea\u05db\u05d5\u05e0\u05d5\u05ea","ins_desc":"\u05d4\u05db\u05e0\u05e1\u05d4","del_desc":"\u05de\u05d7\u05d9\u05e7\u05d4","acronym_desc":"\u05e8\u05d0\u05e9\u05d9 \u05ea\u05d9\u05d1\u05d5\u05ea","abbr_desc":"\u05e7\u05d9\u05e6\u05d5\u05e8","cite_desc":"\u05e6\u05d9\u05d8\u05d5\u05d8","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u05e2\u05d3\u05db\u05d5\u05df \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"\u05d1\u05d7\u05e8 \u05d4\u05db\u05dc","paste_word_desc":"\u05d4\u05d3\u05d1\u05e7\u05d4 \u05de-WORD","paste_text_desc":"\u05d4\u05d3\u05d1\u05e7\u05d4 \u05db\u05d8\u05e7\u05e1\u05d8 \u05d1\u05dc\u05d1\u05d3"},"paste_dlg":{"word_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V.","text_linebreaks":"\u05d4\u05e9\u05d0\u05e8 \u05d0\u05ea \u05e9\u05d5\u05e8\u05d5\u05ea \u05d4\u05e8\u05d5\u05d5\u05d7","text_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V."},table:{cell:"\u05ea\u05d0",col:"\u05e2\u05de\u05d5\u05d3\u05d4",row:"\u05e9\u05d5\u05e8\u05d4",del:"\u05de\u05d7\u05d9\u05e7\u05ea \u05d8\u05d1\u05dc\u05d4","copy_row_desc":"\u05d4\u05e2\u05ea\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","cut_row_desc":"\u05d2\u05d6\u05d9\u05e8\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","paste_row_after_desc":"\u05d4\u05d3\u05d1\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4 \u05d0\u05d7\u05e8\u05d9","paste_row_before_desc":"\u05d4\u05d3\u05d1\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4 \u05dc\u05e4\u05e0\u05d9","props_desc":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05d4\u05d8\u05d1\u05dc\u05d4","cell_desc":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05ea\u05d0 \u05d1\u05d8\u05d1\u05dc\u05d4","row_desc":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","merge_cells_desc":"\u05d0\u05d9\u05d7\u05d5\u05d3 \u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4","split_cells_desc":"\u05e4\u05d9\u05e6\u05d5\u05dc \u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4","delete_col_desc":"\u05d4\u05e1\u05e8\u05ea \u05e2\u05de\u05d5\u05d3\u05d4","col_after_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e2\u05de\u05d5\u05d3\u05d4 \u05de\u05e9\u05de\u05d0\u05dc","col_before_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e2\u05de\u05d5\u05d3\u05d4 \u05de\u05d9\u05de\u05d9\u05df","delete_row_desc":"\u05de\u05d7\u05d9\u05e7\u05ea \u05e9\u05d5\u05e8\u05d4","row_after_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e9\u05d5\u05e8\u05d4 \u05de\u05ea\u05d7\u05ea","row_before_desc":"\u05d4\u05db\u05e0\u05e1\u05ea \u05e9\u05d5\u05e8\u05d4 \u05de\u05e2\u05dc",desc:"\u05d4\u05db\u05e0\u05e1\u05ea \u05d0\u05d5 \u05e2\u05e8\u05d9\u05db\u05ea \u05d8\u05d1\u05dc\u05d4","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u05d0\u05dd \u05ea\u05e9\u05d7\u05d6\u05e8 \u05d0\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05dc\u05d2\u05e8\u05d9\u05e1\u05d0 \u05d4\u05e9\u05de\u05d5\u05e8\u05d4, \u05ea\u05d0\u05d1\u05d3 \u05d0\u05ea \u05db\u05dc \u05d4\u05ea\u05d5\u05db\u05df \u05e9\u05e0\u05de\u05e6\u05d0 \u05db\u05e2\u05ea \u05d1\u05e2\u05d5\u05e8\u05da. \u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d0\u05ea\u05d4 \u05e8\u05d5\u05e6\u05d4 \u05dc\u05e9\u05d7\u05d6\u05e8 \u05d0\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05dc\u05d2\u05d9\u05e8\u05e1\u05d0 \u05d4\u05e9\u05de\u05d5\u05e8\u05d4?.","restore_content":"\u05e9\u05d7\u05d6\u05d5\u05e8 \u05dc\u05d2\u05d9\u05e8\u05e1\u05d0 \u05e9\u05de\u05d5\u05e8\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea","unload_msg":"\u05d4\u05e9\u05d9\u05e0\u05d5\u05d9\u05d9\u05dd \u05e9\u05d1\u05d9\u05e6\u05e2\u05ea \u05dc\u05d0 \u05d9\u05e9\u05de\u05e8\u05d5 \u05d0\u05dd \u05ea\u05e2\u05d1\u05d5\u05e8 \u05de\u05d3\u05e3 \u05d6\u05d4"},fullscreen:{desc:"\u05de\u05e2\u05d1\u05e8 \u05dc\u05de\u05e1\u05da \u05de\u05dc\u05d0/\u05d7\u05dc\u05e7\u05d9"},media:{edit:"\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05e8\u05d8\u05d5\u05df",desc:"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05e8\u05d8\u05d5\u05df","delta_height":"","delta_width":""},fullpage:{desc:"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e2\u05de\u05d5\u05d3","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"\u05d4\u05e6\u05d2/\u05d4\u05e1\u05ea\u05e8 \u05ea\u05d5\u05d5\u05d9 \u05d1\u05e7\u05e8\u05d4"},spellchecker:{desc:"\u05d4\u05e4\u05e2\u05dc\u05ea \u05d1\u05d5\u05d3\u05e7 \u05d0\u05d9\u05d5\u05ea",menu:"\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05d1\u05d5\u05d3\u05e7 \u05d0\u05d9\u05d5\u05ea","ignore_word":"\u05dc\u05d4\u05ea\u05e2\u05dc\u05dd \u05de\u05d4\u05de\u05d9\u05dc\u05d4","ignore_words":"\u05dc\u05d4\u05ea\u05e2\u05dc\u05dd \u05de\u05d4\u05db\u05dc",langs:"\u05e9\u05e4\u05d5\u05ea",wait:"\u05e0\u05d0 \u05dc\u05d4\u05de\u05ea\u05d9\u05df..",sug:"\u05d4\u05e6\u05e2\u05d5\u05ea","no_sug":"\u05d0\u05d9\u05df \u05d4\u05e6\u05e2\u05d5\u05ea","no_mpell":"\u05dc\u05d0 \u05e0\u05de\u05e6\u05d0\u05d5 \u05e9\u05d2\u05d9\u05d0\u05d5\u05ea \u05d0\u05d9\u05d5\u05ea","learn_word":"\u05dc\u05de\u05d3 \u05de\u05d9\u05dc\u05d9\u05dd"},pagebreak:{desc:"\u05d4\u05d5\u05e1\u05e4\u05ea \u05de\u05e2\u05d1\u05e8 \u05d3\u05e3"},advlist:{types:"\u05e1\u05d5\u05d2\u05d9\u05dd",def:"\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"\u05e2\u05d2\u05d5\u05dc",disc:"\u05d3\u05d9\u05e1\u05e7",square:"\u05de\u05e8\u05d5\u05d1\u05e2"},colors:{"333300":"\u05d6\u05d9\u05ea \u05db\u05d4\u05d4","993300":"\u05db\u05ea\u05d5\u05dd \u05db\u05d4\u05d4","000000":"\u05e9\u05d7\u05d5\u05e8","003300":"\u05d9\u05e8\u05d5\u05e7 \u05db\u05d4\u05d4","003366":"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05db\u05d4\u05d4","000080":"\u05db\u05d7\u05d5\u05dc \u05e6\u05d9","333399":"\u05d0\u05d9\u05e0\u05d3\u05d9\u05d2\u05d5","333333":"\u05d0\u05e4\u05d5\u05e8 \u05db\u05d4\u05d4 \u05de\u05d0\u05d5\u05d3","800000":"\u05e2\u05e8\u05de\u05d5\u05e0\u05d9",FF6600:"\u05db\u05ea\u05d5\u05dd","808000":"\u05d6\u05d9\u05ea","008000":"\u05d9\u05e8\u05d5\u05e7","008080":"\u05d9\u05e8\u05d5\u05e7-\u05db\u05d7\u05d5\u05dc \u05e2\u05de\u05d5\u05e7","0000FF":"\u05db\u05d7\u05d5\u05dc","666699":"\u05db\u05d7\u05d5\u05dc \u05d0\u05e4\u05e8\u05e4\u05e8","808080":"\u05d0\u05e4\u05d5\u05e8",FF0000:"\u05d0\u05d3\u05d5\u05dd",FF9900:"\u05e2\u05e0\u05d1\u05e8","99CC00":"\u05d9\u05e8\u05d5\u05e7 \u05e6\u05d4\u05d1\u05d4\u05d1","339966":"\u05d9\u05e8\u05d5\u05e7 \u05d9\u05dd","33CCCC":"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6","3366FF":"\u05db\u05d7\u05d5\u05dc \u05e8\u05d5\u05d9\u05d0\u05dc","800080":"\u05e1\u05d2\u05d5\u05dc","999999":"\u05d0\u05e4\u05d5\u05e8 \u05d1\u05d9\u05e0\u05d9\u05d9\u05dd",FF00FF:"\u05e1\u05d2\u05d5\u05dc-\u05d5\u05e8\u05d5\u05d3 (\u05de\u05d2\u05f3\u05e0\u05d8\u05d4)",FFCC00:"\u05d6\u05d4\u05d1",FFFF00:"\u05e6\u05d4\u05d5\u05d1","00FF00":"\u05dc\u05d9\u05d9\u05dd","00FFFF":"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05de\u05d9\u05dd","00CCFF":"\u05ea\u05db\u05dc\u05ea","993366":"\u05d7\u05d5\u05dd",C0C0C0:"\u05db\u05e1\u05e3",FF99CC:"\u05d5\u05e8\u05d5\u05d3",FFCC99:"\u05d0\u05e4\u05e8\u05e1\u05e7",FFFF99:"\u05e6\u05d4\u05d5\u05d1 \u05d1\u05d4\u05d9\u05e8",CCFFCC:"\u05d9\u05e8\u05d5\u05e7 \u05d7\u05d9\u05d5\u05d5\u05e8",CCFFFF:"\u05d8\u05d5\u05e8\u05e7\u05d9\u05d6 \u05d1\u05d4\u05d9\u05e8","99CCFF":"\u05ea\u05db\u05dc\u05ea \u05d1\u05d4\u05d9\u05e8",CC99FF:"\u05d5\u05e8\u05d5\u05d3 \u05e2\u05de\u05d5\u05e7",FFFFFF:"\u05dc\u05d1\u05df"},aria:{"rich_text_area":"\u05d0\u05d6\u05d5\u05e8 \u05e2\u05d5\u05e8\u05da \u05d8\u05e7\u05e1\u05d8 \u05e2\u05e9\u05d9\u05e8"},wordcount:{words:"\u05de\u05d9\u05dc\u05d9\u05dd:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hi.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hi.js
new file mode 100644
index 000000000..50305a813
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({hi:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"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?.","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hr.js
new file mode 100644
index 000000000..4bcc2cd06
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({hr:{common:{"more_colors":"Vi\u0161e boja","invalid_data":"Gre\u0161ka: Une\u0161ene su nevaljane vrijednosti, ozna\u010dene su crvenom bojom.","popup_blocked":"Oprostite, izgleda da je va\u0161 popup-blocker onemogu\u0107io prozor u sklopu ovog programa. Morate onemogu\u0107iti blokiranje popup prozora da bi u potpunosti iskoristili ovaj alat.","clipboard_no_support":"Trenuta\u010dno va\u0161 preglednik ne podr\u017eava ovu opciju, poku\u0161ajte koristiti tipkovni\u010dku kraticu.","clipboard_msg":"Kopiraj/Izre\u017ei/Zalijepi nije dostupno Mozilla i Firefox preglednicima.\nVi\u0161e informacija?","not_set":"-- Nije postavljeno --","class_name":"Klasa",browse:"Pregled",close:"Zatvori",cancel:"Odustani",update:"Obnovi",insert:"Umetni",apply:"Primjeni","edit_confirm":"\u017delite li koristiti WYSIWYG na\u010din rada za ovo tekstualno polje?","invalid_data_number":"{#field} mora biti broj","invalid_data_min":"{#field} mora biti ve\u0107i broj od {#min}","invalid_data_size":"{#field} mora biti broj ili postotak",value:"(value)"},contextmenu:{full:"Obostrano",right:"Desno",center:"Sredina",left:"Lijevo",align:"Poravnavanje"},insertdatetime:{"day_short":"ned,pon,uto,sri,\u010det,pet,sub,ned","day_long":"nedjelja,ponedjeljak,utorak,srijeda,\u010detvrtak,petak,subota,nedjelja","months_short":"sij,velj,o\u017eu,tra,svi,lip,srp,kol,ruj,lis,stu,pro","months_long":"sije\u010danj,velja\u010da,o\u017eujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac","inserttime_desc":"Umetni vrijeme","insertdate_desc":"Umetni datum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y."},print:{"print_desc":"Ispis"},preview:{"preview_desc":"Predprikaz"},directionality:{"rtl_desc":"S desna na lijevo","ltr_desc":"S lijeva na desno"},layer:{content:"Novi sloj...","absolute_desc":"Uklju\u010di/isklju\u010di apsolutno pozicioniranje","backward_desc":"Pomakni natrag","forward_desc":"Pomakni naprijed","insertlayer_desc":"Umetni novi sloj"},save:{"save_desc":"Spremi","cancel_desc":"Odustani od svih promjena"},nonbreaking:{"nonbreaking_desc":"Umetni razmak"},iespell:{download:"ieSpell nije prona\u0111en. \u017delite ga instalirati sada?","iespell_desc":"Pokreni provjeru pravopisa"},advhr:{"advhr_desc":"Vodoravna crta","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotikoni","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Prona\u0111i/Zamijeni","search_desc":"Prona\u0111i","delta_width":"","delta_height":""},advimage:{"image_desc":"Umetni/uredi sliku","delta_width":"","delta_height":""},advlink:{"delta_width":"","link_desc":"Umetni/uredi link","delta_height":""},xhtmlxtras:{"attribs_desc":"Umetni/uredi atribute","ins_desc":"Unos","del_desc":"Brisanje","acronym_desc":"Akronim","abbr_desc":"Kratica","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Uredi CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Zalijepi (paste) je sada u na\u010dinu obi\u010dnog teksta. Kliknite ponovo da se vrati u uobi\u010dajeni na\u010din.","plaintext_mode_sticky":"Paste is now in plain text mode. Kliknite ponovo da se vrati u uobi\u010dajeni na\u010din. Nakon \u0161to zalijepite ne\u0161to biti \u0107ete vra\u0107eni u uobi\u010dajeni na\u010din.","selectall_desc":"Odaberi sve","paste_word_desc":"Zalijepi iz Worda","paste_text_desc":"Zalijepi kao obi\u010dni tekst"},"paste_dlg":{"word_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prijelome","text_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor."},table:{cell:"\u0106elija",col:"Stupac",row:"Redak",del:"Izbri\u0161i tablicu","copy_row_desc":"Kopiraj redak","cut_row_desc":"Izre\u017ei redak","paste_row_after_desc":"Zalijepi redak ispod","paste_row_before_desc":"Zalijepi redak iznad","props_desc":"Svojstva tablice","cell_desc":"Svojstva \u0107elije","row_desc":"Svojstva retka","merge_cells_desc":"Spoji \u0107elije","split_cells_desc":"Razdvoji spojene \u0107elije","delete_col_desc":"Ukloni stupac","col_after_desc":"Umetni stupac desno","col_before_desc":"Umetni stupac lijevo","delete_row_desc":"Izbri\u0161i redak","row_after_desc":"Umetni redak ispod","row_before_desc":"Umetni redak iznad",desc:"Nova tablica","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Ako povratite spremljeni sadr\u017eaj, izgubiti \u0107ete sav sadr\u017eaj koji se trenutno nalazi u editoru.\n\nJeste li sigurni da \u017eelite povratiti spremljeni sadr\u017eaj?","restore_content":"Povrati sadr\u017eaj koji je automatski spremljen.","unload_msg":"Promjene u dokumentu biti \u0107e izgubljene ako iza\u0111ete s ove stranice."},fullscreen:{desc:"Uklju\u010di/isklju\u010di prikaz preko cijelog ekrana"},media:{edit:"Uredi ugra\u0111enu multimediju",desc:"Dodaj / uredi ugra\u0111enu multimediju","delta_height":"","delta_width":""},fullpage:{desc:"Svojstva dokumenta","delta_width":"","delta_height":""},template:{desc:"Umetni predefinirani sadr\u017eaj predlo\u0161ka"},visualchars:{desc:"Vizualni kontrolni znakovi uklju\u010deni/isklju\u010deni."},spellchecker:{desc:"Uklju\u010di/isklju\u010di provjeru pravopisa",menu:"Postavke provjere pravopisa","ignore_word":"Zanemari rije\u010d","ignore_words":"Zanemari sve",langs:"Jezici",wait:"Molimo pri\u010dekajte...",sug:"Prijedlozi","no_sug":"Nema prijedloga","no_mpell":"Nije prona\u0111ena nijedna pravopisna gre\u0161ka.","learn_word":"Zapamti rije\u010d"},pagebreak:{desc:"Umetni prijelom."},advlist:{types:"Tipovi",def:"Osnovno","lower_alpha":"Mala slova","lower_greek":"Mala gr\u010dka slova","lower_roman":"Mali rimski brojevi","upper_alpha":"Velika slova","upper_roman":"Veliki rimski brojevi",circle:"Kru\u017enica",disc:"Disk",square:"Kvadrat"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Dio za formatirani tekst"},wordcount:{words:"Rije\u010di:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hu.js
new file mode 100644
index 000000000..864af04ba
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({hu:{common:{"more_colors":"Tov\u00e1bbi sz\u00ednek","invalid_data":"Hiba: \u00c9rv\u00e9nytelen adatok, pirossal jel\u00f6lve.","popup_blocked":"A felugr\u00f3 ablakok tilt\u00e1sa miatt nem siker\u00fclt megjelen\u00edteni egy, az alkalmaz\u00e1shoz sz\u00fcks\u00e9ges ablakot. Enged\u00e9lyezze a b\u00f6ng\u00e9sz\u0151j\u00e9ben a felugr\u00f3 ablakokat, hogy minden funkci\u00f3t haszn\u00e1lhasson.","clipboard_no_support":"Jelenleg nem t\u00e1mogatja a b\u00f6ng\u00e9sz\u0151je, haszn\u00e1lja a billenty\u0171kombin\u00e1ci\u00f3kat helyette.","clipboard_msg":"A M\u00e1sol\u00e1s/Kiv\u00e1g\u00e1s/Besz\u00far\u00e1s funkci\u00f3k nem \u00e9rhet\u0151ek el Mozilla \u00e9s Firefox alatt.\nK\u00edv\u00e1n t\u00f6bbet tudni err\u0151l a t\u00e9m\u00e1r\u00f3l?","not_set":"-- Nincs megadva --","class_name":"Oszt\u00e1ly",browse:"Tall\u00f3z\u00e1s",close:"Bez\u00e1r\u00e1s",cancel:"M\u00e9gsem",update:"Friss\u00edt\u00e9s",insert:"Besz\u00far\u00e1s",apply:"Alkalmaz\u00e1s","edit_confirm":"Haszn\u00e1lni k\u00edv\u00e1nja a sz\u00f6vegszerkeszt\u0151 m\u00f3dot ebben a sz\u00f6vegdobozban?","invalid_data_number":"{#field} sz\u00e1m kell legyen","invalid_data_min":"{#field} egy nagyobb sz\u00e1m kell legyen, mint {#min}","invalid_data_size":"{#field} egy sz\u00e1m vagy sz\u00e1zal\u00e9k kell legyen",value:"(\u00e9rt\u00e9k)"},contextmenu:{full:"Sorkiz\u00e1rt",right:"Jobbra",center:"K\u00f6z\u00e9pre",left:"Balra",align:"Igaz\u00edt\u00e1s"},insertdatetime:{"day_short":"V,H,K,Sze,Cs,P,Szo,V","day_long":"vas\u00e1rnap,h\u00e9tf\u0151,kedd,szerda,cs\u00fct\u00f6rt\u00f6k,p\u00e9ntek,szombat,vas\u00e1rnap","months_short":"jan,feb,m\u00e1r,\u00e1pr,m\u00e1j,j\u00fan,j\u00fal,aug,szept,okt,nov,dec","months_long":"janu\u00e1r,febru\u00e1r,m\u00e1rcius,\u00e1prilis,m\u00e1jus,j\u00fanius,j\u00falius,augusztus,szeptember,okt\u00f3ber,november,december","inserttime_desc":"Id\u0151 besz\u00far\u00e1sa","insertdate_desc":"D\u00e1tum besz\u00far\u00e1sa","time_fmt":"%H:%M:%S","date_fmt":"%Y. %m. %d."},print:{"print_desc":"Nyomtat\u00e1s"},preview:{"preview_desc":"El\u0151n\u00e9zet"},directionality:{"rtl_desc":"Jobbr\u00f3l balra","ltr_desc":"Balr\u00f3l jobbra"},layer:{content:"\u00daj r\u00e9teg...","absolute_desc":"Abszol\u00fat poz\u00edci\u00f3 ki-/bekapcsol\u00e1sa","backward_desc":"Mozgat\u00e1s h\u00e1tra","forward_desc":"Mozgat\u00e1s el\u0151re","insertlayer_desc":"\u00daj r\u00e9teg besz\u00far\u00e1sa"},save:{"save_desc":"Ment\u00e9s","cancel_desc":"Minden m\u00f3dos\u00edt\u00e1s visszavon\u00e1sa"},nonbreaking:{"nonbreaking_desc":"Nemsort\u00f6r\u0151 sz\u00f3k\u00f6z besz\u00far\u00e1sa"},iespell:{download:"ieSpell nem tal\u00e1lhat\u00f3. Telep\u00edti most?","iespell_desc":"Helyes\u00edr\u00e1s-ellen\u0151rz\u00e9s futtat\u00e1sa"},advhr:{"advhr_desc":"V\u00edzszintes vonal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hangulatjelek","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Keres\u00e9s/Csere","search_desc":"Keres\u00e9s","delta_width":"","delta_height":""},advimage:{"image_desc":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","delta_width":"","delta_height":""},advlink:{"link_desc":"Link besz\u00far\u00e1sa/szerkeszt\u00e9se","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Tulajdons\u00e1gok besz\u00far\u00e1sa/szerkeszt\u00e9se","ins_desc":"Besz\u00fart","del_desc":"T\u00f6r\u00f6lt","acronym_desc":"Bet\u0171sz\u00f3","abbr_desc":"R\u00f6vid\u00edt\u00e9s","cite_desc":"Id\u00e9zet","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS st\u00edlus szerkeszt\u00e9se","delta_height":"","delta_width":""},paste:{"plaintext_mode":"A besz\u00far\u00e1s mostant\u00f3l egyszer\u0171 sz\u00f6veg m\u00f3dban van. Kattintson ide \u00fajra ezen m\u00f3d ki/be kapcsol\u00e1s\u00e1hoz.","plaintext_mode_sticky":"A besz\u00far\u00e1s mostant\u00f3l egyszer\u0171 sz\u00f6veg m\u00f3dban van. Kattintson ide \u00fajra ezen m\u00f3d ki/be kapcsol\u00e1s\u00e1hoz. Miut\u00e1n besz\u00far valamit, visszaker\u00fcl norm\u00e1l m\u00f3dba.","selectall_desc":"Mindent kijel\u00f6l","paste_word_desc":"Besz\u00far\u00e1s Wordb\u0151l","paste_text_desc":"Besz\u00far\u00e1s sz\u00f6vegk\u00e9nt"},"paste_dlg":{"word_title":"Haszn\u00e1lja a Ctrl+V-t a billenty\u0171zet\u00e9n a beilleszt\u00e9shez.","text_linebreaks":"Sort\u00f6r\u00e9sek megtart\u00e1sa","text_title":"Haszn\u00e1lja a Ctrl+V-t a billenty\u0171zet\u00e9n a beilleszt\u00e9shez."},table:{cell:"Cella",col:"Oszlop",row:"Sor",del:"T\u00e1bl\u00e1zat t\u00f6rl\u00e9se","copy_row_desc":"Sor m\u00e1sol\u00e1sa","cut_row_desc":"Sor kiv\u00e1g\u00e1sa","paste_row_after_desc":"Sor bem\u00e1sol\u00e1sa ut\u00e1na","paste_row_before_desc":"Sor bem\u00e1sol\u00e1sa el\u00e9","props_desc":"T\u00e1bl\u00e1zat tulajdons\u00e1gai","cell_desc":"Cella tulajdons\u00e1gai","row_desc":"Sor tulajdons\u00e1gai","merge_cells_desc":"Cell\u00e1k \u00f6sszevon\u00e1sa","split_cells_desc":"Cell\u00e1k feloszt\u00e1sa","delete_col_desc":"Oszlop t\u00f6rl\u00e9se","col_after_desc":"Oszlop besz\u00far\u00e1sa ut\u00e1na","col_before_desc":"Oszlop besz\u00far\u00e1sa el\u00e9","delete_row_desc":"Sor t\u00f6rl\u00e9se","row_after_desc":"Sor besz\u00far\u00e1sa ut\u00e1na","row_before_desc":"Sor besz\u00far\u00e1sa el\u00e9",desc:"T\u00e1bl\u00e1zat besz\u00far\u00e1sa/szerkeszt\u00e9se","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Ha visszat\u00f6lti a mentett be\u00e1ll\u00edt\u00e1sokat, a jelenlegi \u00e1llapot elv\u00e9sz.\n\nBiztosan visszat\u00f6lti a mentett \u00e1llapotot?.","restore_content":"Automatikus ment\u00e9s bet\u00f6lt\u00e9se.","unload_msg":"A m\u00f3dos\u00edt\u00e1sok nem lesznek mentve, ha elhagyja az oldalt."},fullscreen:{desc:"Teljesk\u00e9perny\u0151s m\u00f3d ki-/bekapcsol\u00e1sa"},media:{edit:"Be\u00e1gyazott m\u00e9dia szerkeszt\u00e9se",desc:"Be\u00e1gyazott m\u00e9dia besz\u00far\u00e1sa/szerkeszt\u00e9se","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentum tulajdons\u00e1gai","delta_width":"","delta_height":""},template:{desc:"Sablon beilleszt\u00e9se"},visualchars:{desc:"Vizu\u00e1lis vez\u00e9rl\u0151karakterek be/ki."},spellchecker:{desc:"Helyes\u00edr\u00e1s-ellen\u0151rz\u0151 ki-/bekapcsol\u00e1sa",menu:"Helyes\u00edr\u00e1s-ellen\u0151rz\u0151 tulajdons\u00e1gai","ignore_word":"Sz\u00f3 kihagy\u00e1sa","ignore_words":"Mindet kihagy",langs:"Nyelvek",wait:"K\u00e9rem, v\u00e1rjon...",sug:"Aj\u00e1nl\u00e1sok","no_sug":"Nincs aj\u00e1nl\u00e1s","no_mpell":"Nem tal\u00e1ltam helyes\u00edr\u00e1si hib\u00e1t.","learn_word":"Sz\u00f3 megjegyz\u00e9se"},pagebreak:{desc:"Oldalt\u00f6r\u00e9s besz\u00far\u00e1sa"},advlist:{types:"T\u00edpusok",def:"Alap\u00e9rtelmezett","lower_alpha":"Kisbet\u0171s abc","lower_greek":"Kisbet\u0171s g\u00f6r\u00f6g","lower_roman":"Kisbet\u0171s r\u00f3mai","upper_alpha":"Nagybet\u0171s ABC","upper_roman":"Nagybet\u0171s r\u00f3mai",circle:"Karika",disc:"P\u00f6tty",square:"N\u00e9gyzet"},colors:{"333300":"S\u00f6t\u00e9t ol\u00edv","993300":"\u00c9g\u0151 narancs","000000":"Fekete","003300":"S\u00f6t\u00e9t z\u00f6ld","003366":"S\u00f6t\u00e9t az\u00far","000080":"Tenger k\u00e9k","333399":"Indig\u00f3","333333":"Nagyon s\u00f6t\u00e9tsz\u00fcrke","800000":"Gesztenyebarna",FF6600:"Narancs","808000":"Ol\u00edv","008000":"Z\u00f6ld","008080":"P\u00e1vak\u00e9k","0000FF":"K\u00e9k","666699":"Sz\u00fcrk\u00e9s k\u00e9k","808080":"Sz\u00fcrke",FF0000:"V\u00f6r\u00f6s",FF9900:"Borosty\u00e1ns\u00e1rga","99CC00":"S\u00e1rg\u00e1s z\u00f6ld","339966":"Tengerz\u00f6ld","33CCCC":"T\u00fcrk\u00edz","3366FF":"Kir\u00e1lyk\u00e9k","800080":"B\u00edbor","999999":"K\u00f6z\u00e9psz\u00fcrke",FF00FF:"B\u00edborv\u00f6r\u00f6s",FFCC00:"Arany",FFFF00:"S\u00e1rga","00FF00":"Vil\u00e1gos borosty\u00e1n","00FFFF":"V\u00edz","00CCFF":"\u00c9gk\u00e9k","993366":"Barna",C0C0C0:"Ez\u00fcst",FF99CC:"R\u00f3zsasz\u00edn",FFCC99:"Barack",FFFF99:"Vil\u00e1gos s\u00e1rga",CCFFCC:"Halv\u00e1ny z\u00f6ld",CCFFFF:"Halv\u00e1ny ci\u00e1n","99CCFF":"Vil\u00e1gos \u00e9gk\u00e9k",CC99FF:"Szilvak\u00e9k",FFFFFF:"Feh\u00e9r"},aria:{"rich_text_area":"Rich Text mez\u0151"},wordcount:{words:"Szavak sz\u00e1ma: "}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hy.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hy.js
new file mode 100644
index 000000000..04a24f6f4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/hy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({hy:{common:{"more_colors":"\u0547\u0561\u057f \u0563\u0578\u0582\u0575\u0576\u0565\u0580","invalid_data":"\u054d\u056d\u0561\u056c: \u0546\u0565\u0580\u0561\u056e\u057e\u0561\u056e \u0567 \u057d\u056d\u0561\u056c \u0561\u0580\u056a\u0565\u0584, \u0563\u0578\u0582\u0576\u0561\u0576\u0577\u057e\u0561\u056e \u0567 \u056f\u0561\u0580\u0574\u056b\u0580\u0578\u057e","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","clipboard_no_support":"\u054f\u057e\u0575\u0561\u056c \u057a\u0561\u0570\u056b\u0576 \u0579\u056b \u0568\u0576\u0564\u0578\u0582\u0576\u057e\u0578\u0582\u0574 \u0541\u0565\u0580 \u0562\u0580\u0561\u0578\u0582\u0566\u0565\u0580\u056b \u056f\u0578\u0572\u0574\u056b\u0581, \u0585\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0565\u0584 \u0570\u0561\u057a\u0561\u057e\u0578\u0582\u0574\u0576\u0565\u0580","clipboard_msg":"\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c / \u053f\u057f\u0580\u0565\u056c / \u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c (\u0574\u0561\u057f\u0579\u0565\u056c\u056b \u0579\u0567 Mozilla \u0587 Firefox \u0562\u0580\u0561\u0578\u0582\u0566\u0565\u0580\u0576\u0565\u0580\u0578\u0582\u0574) \\ n \u0541\u0565\u0566 \u0570\u0565\u057f\u0561\u0584\u0580\u0584\u056b\u055e\u0580 \u0567 \u0561\u0575\u0564 \u056b\u0576\u0586\u0578\u0580\u0574\u0561\u0581\u056b\u0561\u0576","not_set":"- \u0568\u0576\u057f\u0580\u0565\u056c -","class_name":"\u0534\u0561\u057d",browse:"\u0534\u056b\u057f\u0565\u056c",close:"\u0553\u0561\u056f\u0565\u056c",cancel:"\u0549\u0565\u0572\u0575\u0561\u056c",update:"\u0539\u0561\u0580\u0574\u0561\u0581\u0576\u0565\u056c",insert:"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c",apply:"\u0540\u0561\u057d\u057f\u0561\u057f\u0565\u056c","edit_confirm":"\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WYSIWYG \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u0538\u057d\u057f \u056c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0561\u0576",right:"\u0538\u057d\u057f \u0561\u057b \u0565\u0566\u0580\u056b",center:"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0581\u0576\u0565\u056c",left:"\u0538\u057d\u057f \u0571\u0561\u056d \u0565\u0566\u0580\u056b",align:"\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574"},insertdatetime:{"day_short":"\u053f\u056b\u0580, \u0535\u0580\u056f, \u0535\u0580\u0584, \u0549\u0580\u0584, \u0540\u0576\u0563, \u0548\u0582\u0580\u0562, \u0547\u0562\u0569, \u053f\u056b\u0580","day_long":"\u056f\u056b\u0580\u0561\u056f\u056b, \u0565\u0580\u056f\u0578\u0582\u0577\u0561\u0562\u0569\u056b, \u0565\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b, \u0579\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056b, \u0570\u056b\u0576\u0563\u0577\u0561\u0562\u0569\u056b, \u0578\u0582\u0580\u0562\u0561\u0569, \u0577\u0561\u0562\u0561\u0569, \u056f\u056b\u0580\u0561\u056f\u056b","months_short":"\u0570\u0578\u0582\u0576, \u0583\u0565\u057f, \u0574\u0561\u0580\u057f, \u0561\u057a\u0580, \u0574\u0561\u0575\u056b\u057d, \u0570\u0578\u0582\u0576, \u0570\u0578\u0582\u056c, \u0585\u0563\u057d\u057f, \u057d\u0565\u057a\u057f, \u0570\u0578\u056f\u057f, \u0576\u0578\u0575, \u0564\u0565\u056f","months_long":"\u0570\u0578\u0582\u0576\u057e\u0561\u0580, \u0583\u0565\u057f\u0580\u057e\u0561\u0580, \u0574\u0561\u0580\u057f, \u0561\u057a\u0580\u056b\u056c, \u0574\u0561\u0575\u056b\u057d, \u0570\u0578\u0582\u0576\u056b\u057d, \u0570\u0578\u0582\u056c\u056b\u057d, \u0585\u0563\u0578\u057d\u057f\u0578\u057d, \u057d\u0565\u057a\u057f\u0565\u0574\u0562\u0565\u0580, \u0570\u0578\u056f\u057f\u0565\u0574\u0562\u0565\u0580, \u0576\u0578\u0575\u0565\u0574\u0562\u0565\u0580, \u0564\u0565\u056f\u057f\u0565\u0574\u0562\u0565\u0580","inserttime_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u056a\u0561\u0574\u0561\u0576\u0561\u056f","insertdate_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0561\u0574\u057d\u0561\u0569\u056b\u057e","time_fmt":"% H:% M:% S","date_fmt":"% d.% m.% Y"},print:{"print_desc":"\u054f\u057a\u0565\u056c"},preview:{"preview_desc":"\u0534\u056b\u057f\u0565\u056c"},directionality:{"rtl_desc":"\u0548\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568\u055d \u0561\u057b\u056b\u0581 \u0571\u0561\u056d","ltr_desc":"\u0548\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568\u055d \u0571\u0561\u056d\u056b\u0581 \u0561\u057b"},layer:{content:"\u0546\u0578\u0580 \u0577\u0565\u0580\u057f ...","absolute_desc":"\u053f\u056b\u0580\u0561\u057c\u0565\u056c \u0562\u0561\u0581\u0561\u0580\u0571\u0561\u056f \u057f\u0565\u0572\u0561\u056f\u0561\u0575\u0578\u0582\u0574","backward_desc":"\u054f\u0565\u0572\u0561\u0583\u0578\u056d\u0565\u056c \u0565\u057f","forward_desc":"\u054e\u0565\u0580\u0587","insertlayer_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0576\u0578\u0580 \u0577\u0565\u0580\u057f"},save:{"save_desc":"\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c","cancel_desc":"\u0549\u0565\u0572\u0561\u0580\u056f\u0565\u056c \u0562\u0561\u056c\u0561\u0580 \u0583\u0578\u0583\u0578\u056d\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0576\u0565\u0580\u0568"},nonbreaking:{"nonbreaking_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0562\u0561\u0581\u0561\u0580\u056f"},iespell:{download:"ieSpell \u057a\u056c\u0561\u0563\u056b\u0576\u0568 \u0579\u056b \u0563\u057f\u0576\u057e\u0565\u056c\u0589 \u0551\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u055e\u0574 \u0565\u0584 \u057f\u0565\u0572\u0561\u0564\u0580\u0565\u056c","iespell_desc":"\u054f\u0561\u057c\u0561\u057d\u056d\u0561\u056c\u0576\u0565\u0580\u056b \u057d\u057f\u0578\u0582\u0563\u0578\u0582\u0574"},advhr:{"advhr_desc":"\u0540\u0561\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u0562\u0561\u056a\u0561\u0576\u056b\u0579","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u054d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0548\u0580\u0578\u0576\u0565\u056c / \u0553\u0578\u0583\u0578\u056d\u0565\u056c","search_desc":"\u0548\u0580\u0578\u0576\u0565\u056c","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0576\u056f\u0561\u0580","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0570\u0572\u0578\u0582\u0574","delta_height":""},xhtmlxtras:{"attribs_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0561\u057f\u0580\u056b\u0562\u0578\u0582\u057f\u0576\u0565\u0580\u0568","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u053d\u0574\u0562\u0561\u0563\u0580\u0565\u056c CSS \u0578\u0573\u0565\u0580\u0568","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u0538\u0576\u057f\u0580\u0565\u056c \u0562\u0578\u056c\u0578\u0580\u0568","paste_word_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c Word \u056e\u0580\u0561\u0563\u0580\u056b\u0581","paste_text_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0578\u0580\u057a\u0565\u057d \u057f\u0565\u0584\u057d\u057f","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0565\u0584 CTRL + V \u057a\u0561\u057f\u0573\u0565\u0576\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u056b \u057f\u0565\u0572\u0561\u0564\u0580\u0574\u0561\u0576 \u0570\u0561\u0574\u0561\u0580","text_linebreaks":"\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c \u057f\u0578\u0572\u0561\u0564\u0561\u0580\u0571\u0565\u0580\u0568","text_title":"\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0565\u0584 CTRL + V \u057a\u0561\u057f\u0573\u0565\u0576\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u056b \u057f\u0565\u0572\u0561\u0564\u0580\u0574\u0561\u0576 \u0570\u0561\u0574\u0561\u0580"},table:{"cellprops_delta_width":"30",cell:"\u042f\u0447\u0435\u0439\u043a\u0430",col:"\u041f\u043e\u043b\u0435",row:"\u0421\u0442\u0440\u043e\u043a\u0430",del:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443","copy_row_desc":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","cut_row_desc":"\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","paste_row_after_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0441\u043b\u0435","paste_row_before_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043e","props_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","cell_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","row_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","merge_cells_desc":"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438","split_cells_desc":"\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438","delete_col_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446","col_after_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043f\u043e\u0441\u043b\u0435","col_before_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u043e","delete_row_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","row_after_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u043f\u043e\u0441\u043b\u0435","row_before_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0434\u043e",desc:"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0576\u0578\u0580 \u0561\u0572\u0575\u0578\u0582\u057d\u0561\u056f","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438, \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u044b, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d"},media:{edit:"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c embedded media",desc:"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0574\u0565\u0564\u056b\u0561","delta_height":"","delta_width":""},fullpage:{desc:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","delta_width":"","delta_height":""},template:{desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442"},visualchars:{desc:"Visual control characters on / off"},spellchecker:{desc:"\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443",menu:"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438","ignore_word":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0432\u043e","ignore_words":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435",langs:"\u042f\u0437\u044b\u043a\u0438",wait:"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435 ...",sug:"\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b","no_sug":"\u041d\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432","no_mpell":"\u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e","learn_word":"Learn word"},pagebreak:{desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ia.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ia.js
new file mode 100644
index 000000000..85092e857
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ia.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ia:{common:{"more_colors":"\u66f4\u591a\u989c\u8272","invalid_data":"\u9519\u8bef\uff1a\u8f93\u5165\u4e86\u65e0\u6548\u7684\u503c\uff0c\u5df2\u6807\u8bb0\u4e3a\u7ea2\u8272\u3002","popup_blocked":"\u5bf9\u4e0d\u8d77\uff0c\u60a8\u7684\u5feb\u663e\u7a97\u53e3\u963b\u6b62\u7a0b\u5e8f\u5df2\u7ecf\u963b\u6b62\u4e86\u672c\u5feb\u663e\u7a97\u53e3\uff0c\u8bf7\u8c03\u6574\u4f60\u7684\u6d4f\u89c8\u5668\u8bbe\u7f6e\uff0c\u5141\u8bb8\u672c\u7f51\u7ad9\u5f39\u51fa\u65b0\u7a97\u53e3\uff0c\u4ee5\u4fbf\u4f7f\u7528\u6b64\u529f\u80fd","clipboard_no_support":"\u5c1a\u4e0d\u652f\u6301\u60a8\u6240\u4f7f\u7528\u7684\u6d4f\u89c8\u5668\uff0c\u8bf7\u4f7f\u7528\u952e\u76d8\u65b9\u5f0f\u64cd\u4f5c","clipboard_msg":"\u590d\u5236\u3001\u526a\u5207\u548c\u7c98\u8d34\u529f\u80fd\u5728Mozilla \u548c Firefox\u4e2d\u65e0\u6cd5\u4f7f\u7528","not_set":"-- \u672a\u8bbe\u7f6e --","class_name":"\u6837\u5f0f\u7c7b\u540d",browse:"\u6d4f\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5e94\u7528","edit_confirm":"\u662f\u5426\u5728\u8be5text area\u5185\u542f\u7528\u6240\u89c1\u5373\u6240\u5f97\u6a21\u5f0f\uff1f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u4e24\u7aef\u5bf9\u9f50",right:"\u53f3\u5bf9\u9f50",center:"\u5c45\u4e2d",left:"\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50\u65b9\u5f0f"},insertdatetime:{"day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u73b0\u5728\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u4eca\u5929\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u6253\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u6587\u5b57\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u6587\u5b57\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u589e\u5c42...","absolute_desc":"\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u540e\u7f6e","forward_desc":"\u524d\u7f6e","insertlayer_desc":"\u63d2\u5165\u5c42"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u653e\u5f03\u6240\u6709\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u683c\u7b26"},iespell:{download:"\u672a\u68c0\u6d4b\u5230ieSpell\u7ec4\u4ef6\uff0c\u662f\u5426\u73b0\u5728\u5b89\u88c5 ?","iespell_desc":"\u6267\u884c\u62fc\u5199\u68c0\u67e5"},advhr:{"advhr_desc":"\u5206\u9694\u7ebf","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u8868\u60c5","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u67e5\u627e/\u66ff\u6362","search_desc":"\u67e5\u627e","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7f16\u8f91 \u8fde\u7ed3","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u63d2\u5165/\u7f16\u8f91 \u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7f16\u8f91 CSS \u6837\u5f0f\u8868","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u5168\u9009","paste_word_desc":"\u7c98\u8d34\u4e3aWord\u683c\u5f0f","paste_text_desc":"\u7c98\u8d34\u4e3a\u7eaf\u6587\u5b57","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u5c06\u590d\u5236(CTRL + C)\u7684\u5185\u5bb9\u7c98\u8d34(CTRL + V)\u5230\u7a97\u53e3\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7\u53f7","text_title":"\u5c06\u590d\u5236(CTRL + C)\u7684\u5185\u5bb9\u7c98\u8d34(CTRL + V)\u5230\u7a97\u53e3\u3002"},table:{cell:"\u50a8\u5b58\u683c",col:"\u5217",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u5f53\u524d\u5217","cut_row_desc":"\u526a\u5207\u5f53\u524d\u5217","paste_row_after_desc":"\u7c98\u8d34\u884c\u5230\u4e0b\u65b9","paste_row_before_desc":"\u7c98\u8d34\u884c\u5230\u4e0a\u65b9","props_desc":"\u8868\u683c \u5c5e\u6027","cell_desc":"\u50a8\u5b58\u683c \u5c5e\u6027","row_desc":"\u5217 \u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u50a8\u5b58\u683c","split_cells_desc":"\u62c6\u5206\u50a8\u5b58\u683c","delete_col_desc":"\u5220\u9664\u5f53\u524d\u5217","col_after_desc":"\u5728\u53f3\u4fa7\u63d2\u5165\u5217","col_before_desc":"\u5728\u5de6\u4fa7\u63d2\u5165\u5217","delete_row_desc":"\u5220\u9664\u5f53\u524d\u884c","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u5982\u679c\u79bb\u5f00\u8be5\u9875\u5c06\u5bfc\u81f4\u6240\u6709\u4fee\u6539\u5168\u90e8\u4e22\u5931\u3002","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u5168\u5c4f\u6a21\u5f0f"},media:{edit:"\u7f16\u8f91 \u5a92\u4f53",desc:"\u63d2\u5165/\u7f16\u8f91 \u5a92\u4f53","delta_height":"","delta_width":""},fullpage:{desc:"\u6587\u4ef6","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9009\u5b9a\u7684\u8303\u672c"},visualchars:{desc:"\u663e\u793a\u63a7\u5236\u7b26\u53f7\u3002"},spellchecker:{desc:"\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5199\u68c0\u67e5 \u8bbe\u7f6e","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8bed\u8a00\u6e05\u5355",wait:"\u8bf7\u7a0d\u5019...",sug:"\u5efa\u8bae\u8bcd","no_sug":"\u65e0\u62fc\u5199\u5efa\u8bae","no_mpell":"\u65e0\u62fc\u5199\u9519\u8bef","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26\u53f7"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/id.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/id.js
new file mode 100644
index 000000000..1577926ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/id.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({id:{common:{"more_colors":"More colors","invalid_data":"Error: nilai invalid, ditandai dengan dengan warna merah","popup_blocked":"Maaf, popup-blocker anda telah menonaktifkan jendela aplikasi yang menyediakan fungsionalitas. Nonaktifkan popup-blocker untuk sepenuhnya memanfaatkan alat ini.","clipboard_no_support":"Tidak didukung Browser, gunakan shortcut dari keyboard.","clipboard_msg":"Copy/Cut/Paste tidak tersedia pada Mozilla dan Firefox.\nButuh info selengkapnya?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Gunakan mode WYSIWYG untuk textarea ini?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Penuh",right:"Kanan",center:"Tengah",left:"Kiri",align:"Alignment"},insertdatetime:{"day_short":"Min,Sen,Sel,Rab,Kam,Jum,Sab,Min","day_long":"Minggu,Senin,Selasa,Rabu,Kamis,Jumat,Sabtu,Minggu","months_short":"Jan,Feb,Mar,Apr,Mei,Jun,Jul,Ags,Sep,Okt,Nov,Des","months_long":"Januari,Februari,Maren,April,Mei,Juni,Juli,Agustus,September,Oktober,November,Desember","inserttime_desc":"sisipkan waktu","insertdate_desc":"sisipkan tanggal","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Cetak"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Arah kanan ke kiri","ltr_desc":"Arah kiri ke kanan"},layer:{content:"Layer baru...","absolute_desc":"Beralih posisi absolut","backward_desc":"Pindah ke belakang","forward_desc":"Pindah ke depan","insertlayer_desc":"sisipkan layer Baru"},save:{"save_desc":"Simpan","cancel_desc":"Batalkan semua perubahan"},nonbreaking:{"nonbreaking_desc":"sisipkan karakter non-breaking space"},iespell:{download:"ieSpell tidak terdeteksi. Instal sekarang?","iespell_desc":"Jalankan spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Cari/Ganti","search_desc":"Cari","delta_width":"","delta_height":""},advimage:{"image_desc":"sisipkan/Ubah Gambar","delta_width":"","delta_height":""},advlink:{"link_desc":"Sisipkan/Ubah link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Sisip/Ubah Atribut","ins_desc":"Penyisipan","del_desc":"Penghapusan","acronym_desc":"Akronim","abbr_desc":"Singkatan/Kependekan Kata","cite_desc":"Kutipan","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Ubah CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Gunakan CTRL+V pada keyboard untuk paste.","text_linebreaks":"Keep linebreaks","text_title":"Gunakan CTRL+V pada keyboard untuk paste."},table:{cell:"Cell",col:"Column",row:"Row",del:"Hapus Tabel","copy_row_desc":"Copy row tabel","cut_row_desc":"Cut row tabel","paste_row_after_desc":"Paste row tabel sesudah","paste_row_before_desc":"Paste row tabel sebelum","props_desc":"Properti tabel","cell_desc":"Properti cell tabel","row_desc":"Properti row tabel","merge_cells_desc":"Merge cell tabel","split_cells_desc":"Pisahkan cell tabel yang di-merge","delete_col_desc":"Hapus column","col_after_desc":"Sisipkan column setelah","col_before_desc":"Sisipkan column sebelum","delete_row_desc":"Hapus row","row_after_desc":"Sisipkan row sesudah","row_before_desc":"Sisipkan row sebelum",desc:"Sisipkan tabel baru","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"Perubahan yang dilakukan akan hilang jika Anda pindah dari halaman ini.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Properti Dokumen","delta_width":"","delta_height":""},template:{desc:"Menyisipkan template standar isi"},visualchars:{desc:"Pengendalian visual karakter on/off"},spellchecker:{desc:"Toggle spellchecker",menu:"Pengaturan Spellchecker ","ignore_word":"Abaikan kata","ignore_words":"Abaikan semua",langs:"Bahasa",wait:"Harap tunggu...",sug:"Saran","no_sug":"Tidak ada saran","no_mpell":"Tidak ada misspellings ditemukan.","learn_word":"Learn word"},pagebreak:{desc:"Sisipkan page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/is.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/is.js
new file mode 100644
index 000000000..ae20e20b0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/is.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({is:{common:{"more_colors":"Fleiri litir","invalid_data":"Villa: Vitlaus gildi slegin inn, \u00feau eru merkt me\u00f0 rau\u00f0u.","popup_blocked":"Afsaki\u00f0, uppsprettuv\u00f6rnin \u00fe\u00edn (popup blocker) hefur loka\u00f0 \u00e1 glugga sem er hluti af ritlinum. \u00de\u00fa ver\u00f0ur a\u00f0 sl\u00f6kkva \u00e1 uppsprettuv\u00f6rn til a\u00f0 geta nota\u00f0 \u00feennan ritil.","clipboard_no_support":"Ekki stutt \u00ed \u00fe\u00ednum vefsko\u00f0ara, nota\u00f0ur fl\u00fdtilykla \u00ed sta\u00f0inn.","clipboard_msg":"Afrita/Klippa/L\u00edma er ekki a\u00f0gengilegt \u00ed Mozilla og Firefox eins og er.\nViltu f\u00e1 n\u00e1nari uppl\u00fdsingar?","not_set":"-- Ekki skilgreint --","class_name":"Klasi",browse:"Gramsa",close:"Loka",cancel:"H\u00e6tta vi\u00f0",update:"Uppf\u00e6ra",insert:"Setja inn",apply:"Sta\u00f0festa","edit_confirm":"Viltu nota WYSIWYG ritil fyrir \u00feetta textasv\u00e6\u00f0i?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"H\u00e6gri",center:"Mi\u00f0ja",left:"Vinstri",align:"J\u00f6fnun"},insertdatetime:{"day_short":"Sun,M\u00e1n,\u00deri,Mi\u00f0,Fim,F\u00f6s,Lau,Sun","day_long":"Sunnudagur,M\u00e1nudagur,\u00deri\u00f0judagur,Mi\u00f0vikudagur,Fimmtudagur,F\u00f6studagur,Laugardagur,Sunnudagur","months_short":"Jan,Feb,Mar,Apr,Ma\u00ed,J\u00fan,J\u00fal,\u00c1gs,Sep,Okt,N\u00f3v,Des","months_long":"Jan\u00faar,Febr\u00faar,Mars,Apr\u00edl,Ma\u00ed,J\u00fan\u00ed,J\u00fal\u00ed,\u00c1g\u00fast,September,Okt\u00f3ber,N\u00f3vember,Desember","inserttime_desc":"Setja inn t\u00edmasetningu","insertdate_desc":"Setja inn dagsetningu","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Prenta"},preview:{"preview_desc":"Forsko\u00f0a"},directionality:{"rtl_desc":"Fr\u00e1 h\u00e6gri til vinstri","ltr_desc":"Fr\u00e1 vinstri til h\u00e6gri"},layer:{content:"N\u00fdtt lag...","absolute_desc":"Taka af/setja \u00e1 algj\u00f6ra j\u00f6fnun","backward_desc":"F\u00e6ra afturfyrir","forward_desc":"F\u00e6ra framfyrir","insertlayer_desc":"Setja inn n\u00fdtt lag"},save:{"save_desc":"Vista","cancel_desc":"H\u00e6tta vi\u00f0 allar breytingar"},nonbreaking:{"nonbreaking_desc":"Setja inn bil staf"},iespell:{download:"ieSpell fannst ekki. Viltu setja \u00fea\u00f0 inn n\u00fana?","iespell_desc":"Lesa yfir"},advhr:{"delta_height":"H\u00e6\u00f0","delta_width":"Breidd","advhr_desc":"L\u00e1r\u00e9tt l\u00edna"},emotions:{"delta_height":"H\u00e6\u00f0","delta_width":"Breidd","emotions_desc":"Broskarlar"},searchreplace:{"replace_desc":"Finna/Skipta \u00fat","delta_width":"Breidd","delta_height":"H\u00e6\u00f0","search_desc":"Finna"},advimage:{"delta_width":"Breidd","image_desc":"Setja inn/breyta mynd","delta_height":"H\u00e6\u00f0"},advlink:{"delta_height":"H\u00e6\u00f0","delta_width":"Breidd","link_desc":"Setja inn/breyta hlekk"},xhtmlxtras:{"attribs_desc":"Skr\u00e1/breyta gildum","ins_desc":"Vi\u00f0b\u00f3t","del_desc":"Ey\u00f0a","acronym_desc":"Acronym","abbr_desc":"Skammst\u00f6fun","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_height":"H\u00e6\u00f0","delta_width":"Breidd",desc:"Breyta st\u00edlsni\u00f0i"},paste:{"plaintext_mode":"L\u00edma er n\u00fa \u00ed venjulegum textaham. Smelltu aftur til a\u00f0 skipta aftur \u00ed venjulegan ham","plaintext_mode_sticky":"L\u00edma er n\u00fa \u00ed venjulegum textaham. Smelltu aftur til a\u00f0 skipta yfir \u00ed venjulegan l\u00edma ham. Eftir a\u00f0 \u00fe\u00fa l\u00edmir eitthva\u00f0 f\u00e6rist \u00fe\u00fa sj\u00e1lfvirkt aftur \u00ed venjulegan ham.","selectall_desc":"Velja allt","paste_word_desc":"L\u00edma \u00far Word","paste_text_desc":"L\u00edma sem hreinn texti"},"paste_dlg":{"word_title":"Nota\u00f0u CTRL+V \u00e1 lyklabo\u00f0rinu til a\u00f0 l\u00edma textanum \u00ed ritilinn.","text_linebreaks":"Halda endingu l\u00edna","text_title":"Nota\u00f0u CTRL+V \u00e1 lyklabor\u00f0inu til a\u00f0 l\u00edma textanum \u00ed ritilinn."},table:{cell:"Reitur",col:"D\u00e1lkur",row:"R\u00f6\u00f0",del:"Ey\u00f0a t\u00f6flu","copy_row_desc":"Afrita r\u00f6\u00f0ina","cut_row_desc":"Klippa r\u00f6\u00f0ina","paste_row_after_desc":"L\u00edma t\u00f6flur\u00f6\u00f0 fyrir ne\u00f0an","paste_row_before_desc":"L\u00edma t\u00f6flur\u00f6\u00f0 fyrir ofan","props_desc":"Eiginleikar t\u00f6flu","cell_desc":"Eiginleikar d\u00e1lka","row_desc":"Eiginleikar ra\u00f0ar","merge_cells_desc":"Sameina t\u00f6flureiti","split_cells_desc":"Sundra sameinu\u00f0um t\u00f6flureitum","delete_col_desc":"Ey\u00f0a d\u00e1lk","col_after_desc":"Setja inn n\u00fdjan d\u00e1lk fyrir aftan","col_before_desc":"Setja inn n\u00fdjan d\u00e1lk fyrir framan","delete_row_desc":"Ey\u00f0a r\u00f6\u00f0","row_after_desc":"Setja inn n\u00fdja r\u00f6\u00f0 fyrir ne\u00f0an","row_before_desc":"Setja inn n\u00fdja r\u00f6\u00f0 fyrir ofan",desc:"Setja inn n\u00fdja t\u00f6flu","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Ef \u00fe\u00fa n\u00e6r\u00f0 \u00ed vistu\u00f0u g\u00f6gnin \u00fe\u00e1 missir \u00fe\u00fa allt innihald sem er n\u00fa \u00feegar \u00ed ritlinum.\n\nErtu viss um a\u00f0 \u00fe\u00fa viljir keyra vistu\u00f0u g\u00f6gnin yfir?","restore_content":"N\u00e1 \u00ed vistu\u00f0 g\u00f6gn","unload_msg":"Breytingar sem \u00fe\u00fa ger\u00f0ir hafa ekki veri\u00f0 vista\u00f0ar"},fullscreen:{desc:"Skipta \u00e1 milli heilskj\u00e1s"},media:{edit:"Breyta birtanlegri margmi\u00f0lun",desc:"Setja inn / Breyta birtingu margmi\u00f0lunar","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Setja inn tilb\u00fai\u00f0 sni\u00f0"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Virka/\u00f3virkja villup\u00faka",menu:"Stillingar villup\u00faka","ignore_word":"Sleppa or\u00f0i","ignore_words":"Sleppa \u00f6llu",langs:"Tungum\u00e1l",wait:"Augnablik...",sug:"Till\u00f6gur","no_sug":"Engar till\u00f6gur","no_mpell":"Fann engar stafsetningavillur.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/it.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/it.js
new file mode 100644
index 000000000..af57d8559
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/it.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({it:{common:{"more_colors":"Colori aggiuntivi...","invalid_data":"Errore: valori inseriti non validi, sono marcati in rosso.","popup_blocked":"Spiacente, ma il blocco popup ha disabilitato una finestra che fornisce funzionalit\u00e0 dell\'applicazione. Si deve disabilitare il blocco popup per questo sito per poter utlizzare appieno questo strumento.","clipboard_no_support":"Attualmente non supportato dal browser in uso, usare le scorciatoie da tastiera.","clipboard_msg":"Copia/Taglia/Incolla non \u00e8 disponibile in Mozilla e Firefox.\nSi desidera avere maggiori informazioni su questo problema?","not_set":"-- Non impostato --","class_name":"Classe",browse:"Sfoglia",close:"Chiudi",cancel:"Annulla",update:"Aggiorna",insert:"Inserisci",apply:"Applica","edit_confirm":"Usare la modalit\u00e0 WYSIWYG per questa textarea?","invalid_data_number":"{#field} deve essere un numero","invalid_data_min":"{#field} deve essere un numero maggiore di {#min}","invalid_data_size":"{#field} deve essere un numero o una percentuale",value:"(valore)"},contextmenu:{full:"Giustifica",right:"Allinea a destra",center:"Centra",left:"Allinea a sinistra",align:"Allineamento"},insertdatetime:{"day_short":"Dom,Lun,Mar,Mer,Gio,Ven,Sab,Dom","day_long":"Domenica,Luned\u00ec,Marted\u00ec,Mercoled\u00ec,Gioved\u00ec,Venerd\u00ec,Sabato,Domenica","months_short":"Gen,Feb,Mar,Apr,Mag,Giu,Lug,Ago,Set,Ott,Nov,Dic","months_long":"Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre","inserttime_desc":"Inserisci ora","insertdate_desc":"Inserisci data","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Stampa"},preview:{"preview_desc":"Anteprima"},directionality:{"rtl_desc":"Direzione da destra a sinistra","ltr_desc":"Direzione da sinistra a destra"},layer:{content:"Nuovo layer...","absolute_desc":"Attiva/Disattiva posizionamento assoluto","backward_desc":"Porta in sfondo","forward_desc":"Porta in rilievo","insertlayer_desc":"Inserisci nuovo layer"},save:{"save_desc":"Salva","cancel_desc":"Cancella tutte le modifiche"},nonbreaking:{"nonbreaking_desc":"Inserisci uno spazio"},iespell:{download:"ieSpell non rilevato. Installarlo ora?","iespell_desc":"Esegui controllo ortografico"},advhr:{"advhr_desc":"Riga orizzontale","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Faccine","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Trova/Sostituisci","search_desc":"Trova","delta_width":"","delta_height":""},advimage:{"image_desc":"Inserisci/modifica immagine","delta_width":"","delta_height":""},advlink:{"link_desc":"Inserisci/modifica collegamento","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Inserisci/modifica attributi","ins_desc":"Inserimento","del_desc":"Cancellamento","acronym_desc":"Acronimo","abbr_desc":"Abbreviazione","cite_desc":"Citazione","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Modifica stile CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Incolla adesso e in modalit\u00e0 testo. Clicca nuovamente per tornare alla modalit\u00e0 normale.","plaintext_mode_sticky":"Incolla adesso e in modalit\u00e0 testo. Clicca nuovamente per tornare alla modalit\u00e0 normale. Dopo che avrai incollato qualcosa tornerai alla modalit\u00e0 normale","selectall_desc":"Seleziona tutto","paste_word_desc":"Incolla da Word","paste_text_desc":"Incolla come testo semplice"},"paste_dlg":{"word_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra.","text_linebreaks":"Mantieni interruzioni di riga","text_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra."},table:{cell:"Cella",col:"Colonna",row:"Riga",del:"Elimina tabella","copy_row_desc":"Copia riga","cut_row_desc":"Taglia riga","paste_row_after_desc":"Incolla riga dopo","paste_row_before_desc":"Incolla riga prima","props_desc":"Propriet\u00e0 tabella","cell_desc":"Propriet\u00e0 cella","row_desc":"Propriet\u00e0 riga","merge_cells_desc":"Unisci celle","split_cells_desc":"Separa celle","delete_col_desc":"Elimina colonna","col_after_desc":"Inserisci colonna dopo","col_before_desc":"Inserisci colonna prima","delete_row_desc":"Elimina riga","row_after_desc":"Inserisci riga dopo","row_before_desc":"Inserisci riga prima",desc:"Inserisci una nuova tabella","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Se ripristini i dati salvati automaticamente perderai i dati attuali dell\'editor\n\nSei sicuro di voler ripristinare i dati?.","restore_content":"Ripristina i dati salvati automaticamente","unload_msg":"I cambiamenti effettuati saranno persi se si abbandona la pagina corrente."},fullscreen:{desc:"Attiva/disattiva modalit\u00e0 a tutto schermo"},media:{edit:"Modifica file multimediale",desc:"Inserisci/modifica file multimediale","delta_height":"","delta_width":""},fullpage:{desc:"Propriet\u00e0 Documento","delta_width":"","delta_height":""},template:{desc:"Inserisci contenuto da modello predefinito"},visualchars:{desc:"Attiva/disattiva caratteri di controllo visuale."},spellchecker:{desc:"Attiva/disattiva controllo ortografico",menu:"Impostazioni controllo ortografico","ignore_word":"Ignora parola","ignore_words":"Ignora tutto",langs:"Lingue",wait:"Attendere prego...",sug:"Suggerimenti","no_sug":"Nessun suggerimento","no_mpell":"Nessun errore rilevato.","learn_word":"Learn word"},pagebreak:{desc:"Inserisci intterruzione di pagina."},advlist:{types:"Tipi",def:"Default","lower_alpha":"Minuscolo alfanumerico","lower_greek":"Minuscolo lettera greca","lower_roman":"Minuscolo lettere romane","upper_alpha":"Maiuscolo alfanumerico","upper_roman":"Maiuscolo lettere romane",circle:"Cerchio",disc:"Punto",square:"Quadrato"},colors:{"333300":"Verde oliva scuro","993300":"Arancio bruciato","000000":"Nero","003300":"Verde scuro","003366":"Azzurro scuro","000080":"Blu navy","333399":"Indaco","333333":"Grigio molto scuro","800000":"Marrone",FF6600:"Arancione","808000":"Verde oliva","008000":"Verde","008080":"Verde azzurro","0000FF":"Blu","666699":"Grigio blu","808080":"Grigio",FF0000:"Rosso",FF9900:"Ambra","99CC00":"Giallo verde","339966":"Verde acqua","33CCCC":"Turchese","3366FF":"Blu royal","800080":"Porpora","999999":"Grigio topo",FF00FF:"Magenta",FFCC00:"Oro",FFFF00:"Giallo","00FF00":"Lime","00FFFF":"Acqua","00CCFF":"Blu cielo","993366":"Vinaccia",C0C0C0:"Argento",FF99CC:"Rosa",FFCC99:"Pesca",FFFF99:"Giallo chiaro",CCFFCC:"Verde chiaro",CCFFFF:"Ciano chiaro","99CCFF":"Blu cielo chiaro",CC99FF:"Prugna",FFFFFF:"Bianco"},aria:{"rich_text_area":"Area testo formattato"},wordcount:{words:"Parole:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ja.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ja.js
new file mode 100644
index 000000000..cdd5399a6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ja.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ja:{common:{"more_colors":"\u3055\u3089\u306b\u8272\u3092\u4f7f\u7528...","invalid_data":"\u30a8\u30e9\u30fc: \u5165\u529b\u306b\u8aa4\u308a\u304c\u3042\u308a\u307e\u3059\u3002\uff08\u8d64\u5b57\u306e\u9805\u76ee\uff09","popup_blocked":"\u7533\u3057\u8a33\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u8868\u793a\u3092\u8a31\u53ef\u3057\u3066\u3044\u306a\u3044\u305f\u3081\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u3053\u306e\u30c4\u30fc\u30eb\u306e\u6a5f\u80fd\u3092\u5b8c\u5168\u306b\u6d3b\u7528\u3059\u308b\u306b\u306f\u3001\u3053\u306e\u30b5\u30a4\u30c8\u3067\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u3092\u8a31\u53ef\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002","clipboard_no_support":"\u30af\u30ea\u30c3\u30d7\u30dc\u30fc\u30c9\u64cd\u4f5c\u306f\u5229\u7528\u3055\u308c\u3066\u3044\u308b\u30d6\u30e9\u30a6\u30b6\u306b\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u30ad\u30fc\u30dc\u30fc\u30c9\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u3092\u4ee3\u308f\u308a\u306b\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3044\u3002","clipboard_msg":"\u30b3\u30d4\u30fc/\u5207\u308a\u53d6\u308a/\u8cbc\u308a\u4ed8\u3051\u306fMozilla\u3068Firefox\u3067\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002\n\u3053\u306e\u554f\u984c\u306e\u8a73\u7d30\u3092\u5f97\u305f\u3044\u3067\u3059\u304b?","not_set":"-- \u672a\u8a2d\u5b9a --","class_name":"\u30af\u30e9\u30b9",browse:"\u95b2\u89a7",close:"\u9589\u3058\u308b",cancel:"\u53d6\u308a\u6d88\u3057",update:"\u66f4\u65b0",insert:"\u633f\u5165",apply:"\u9069\u7528","edit_confirm":"\u3053\u306e\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2\u3092WYSIWYG\u30e2\u30fc\u30c9\u306b\u5207\u308a\u66ff\u3048\u307e\u3059\u304b\uff1f","invalid_data_number":"{#field} \u306f\u6570\u5024\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002","invalid_data_min":"{#field} \u306f{#min}\u3088\u308a\u3082\u5927\u304d\u306a\u6570\u5024\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002","invalid_data_size":"{#field}\u306f\u6570\u5024\u307e\u305f\u306f\u30d1\u30fc\u30bb\u30f3\u30c6\u30fc\u30b8\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002",value:"(\u5024)"},contextmenu:{full:"\u5747\u7b49\u5272\u4ed8",right:"\u53f3\u63c3\u3048",center:"\u4e2d\u592e\u63c3\u3048",left:"\u5de6\u63c3\u3048",align:"\u914d\u7f6e"},insertdatetime:{"day_short":"(\u65e5),(\u6708),(\u706b),(\u6c34),(\u6728),(\u91d1),(\u571f),(\u65e5)","day_long":"\u65e5\u66dc\u65e5,\u6708\u66dc\u65e5,\u706b\u66dc\u65e5,\u6c34\u66dc\u65e5,\u6728\u66dc\u65e5,\u91d1\u66dc\u65e5,\u571f\u66dc\u65e5,\u65e5\u66dc\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"1,2,3,4,5,6,7,8,9,10,11,12","inserttime_desc":"\u6642\u523b\u3092\u633f\u5165","insertdate_desc":"\u65e5\u4ed8\u3092\u633f\u5165","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5370\u5237"},preview:{"preview_desc":"\u30d7\u30ec\u30d3\u30e5\u30fc"},directionality:{"rtl_desc":"\u53f3\u304b\u3089\u5de6","ltr_desc":"\u5de6\u304b\u3089\u53f3"},layer:{content:"\u65b0\u3057\u3044\u30ec\u30a4\u30e4\u30fc...","absolute_desc":"\u7d76\u5bfe\u4f4d\u7f6e\u306e\u6307\u5b9a\u3092\u5207\u66ff","backward_desc":"\u80cc\u9762\u3078\u79fb\u52d5","forward_desc":"\u524d\u9762\u3078\u79fb\u52d5","insertlayer_desc":"\u65b0\u3057\u3044\u30ec\u30a4\u30e4\u30fc\u3092\u633f\u5165"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u3059\u3079\u3066\u306e\u5909\u66f4\u3092\u53d6\u308a\u6d88\u3057"},nonbreaking:{"nonbreaking_desc":"\u6539\u884c\u3057\u306a\u3044\u30b9\u30da\u30fc\u30b9\u6587\u5b57(NBSP)\u3092\u633f\u5165"},iespell:{download:"ieSpell\u304c\u306a\u3044\u3088\u3046\u3067\u3059\u3002\u4eca\u3059\u3050\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u304b\uff1f","iespell_desc":"\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af"},advhr:{"advhr_desc":"\u6c34\u5e73\u7dda\u3092\u633f\u5165","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u8868\u60c5\u30a2\u30a4\u30b3\u30f3","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u691c\u7d22\u3068\u7f6e\u63db","search_desc":"\u691c\u7d22","delta_width":"","delta_height":""},advimage:{"image_desc":"\u753b\u50cf\u306e\u633f\u5165\u3084\u7de8\u96c6","delta_width":"","delta_height":""},advlink:{"link_desc":"\u30ea\u30f3\u30af\u306e\u633f\u5165\u3084\u7de8\u96c6","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u5c5e\u6027\u306e\u633f\u5165\u3084\u7de8\u96c6","ins_desc":"\u633f\u5165","del_desc":"\u524a\u9664","acronym_desc":"\u982d\u5b57\u8a9e","abbr_desc":"\u7565\u8a9e","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS\u306e\u7de8\u96c6","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f\u306e\u30e2\u30fc\u30c9\u3067\u8cbc\u308a\u4ed8\u3051\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u901a\u5e38\u306e\u8cbc\u308a\u4ed8\u3051\u306e\u30e2\u30fc\u30c9\u306b\u623b\u3057\u307e\u3059\u3002","plaintext_mode_sticky":"\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f\u306e\u30e2\u30fc\u30c9\u3067\u8cbc\u308a\u4ed8\u3051\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001\u901a\u5e38\u306e\u8cbc\u308a\u4ed8\u3051\u306e\u30e2\u30fc\u30c9\u306b\u623b\u3057\u307e\u3059\u3002\u4f55\u304b\u8cbc\u308a\u4ed8\u3051\u308b\u3068\u3001\u305d\u306e\u5f8c\u306f\u901a\u5e38\u306e\u8cbc\u308a\u4ed8\u3051\u30e2\u30fc\u30c9\u306b\u623b\u308a\u307e\u3059\u3002","selectall_desc":"\u3059\u3079\u3066\u9078\u629e","paste_word_desc":"Word\u304b\u3089\u8cbc\u308a\u4ed8\u3051","paste_text_desc":"\u30c6\u30ad\u30b9\u30c8\u5f62\u5f0f\u3067\u8cbc\u308a\u4ed8\u3051"},"paste_dlg":{"word_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002","text_linebreaks":"\u6539\u884c\u3092\u4fdd\u6301","text_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002"},table:{cell:"\u30bb\u30eb",col:"\u5217",row:"\u884c",del:"\u8868\u3092\u524a\u9664","copy_row_desc":"\u884c\u3092\u30b3\u30d4\u30fc","cut_row_desc":"\u884c\u3092\u5207\u308a\u53d6\u308a","paste_row_after_desc":"\u4e0b\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051","paste_row_before_desc":"\u4e0a\u306b\u884c\u3092\u8cbc\u308a\u4ed8\u3051","props_desc":"\u8868\u306e\u5c5e\u6027","cell_desc":"\u30bb\u30eb\u306e\u5c5e\u6027","row_desc":"\u884c\u306e\u5c5e\u6027","merge_cells_desc":"\u30bb\u30eb\u3092\u7d50\u5408","split_cells_desc":"\u30bb\u30eb\u306e\u7d50\u5408\u3092\u89e3\u9664","delete_col_desc":"\u5217\u3092\u524a\u9664","col_after_desc":"\u53f3\u306b\u5217\u3092\u633f\u5165","col_before_desc":"\u5de6\u306b\u5217\u3092\u633f\u5165","delete_row_desc":"\u884c\u3092\u524a\u9664","row_after_desc":"\u4e0b\u306b\u884c\u3092\u633f\u5165","row_before_desc":"\u4e0a\u306b\u884c\u3092\u633f\u5165",desc:"\u8868\u306e\u633f\u5165","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u4fdd\u5b58\u3057\u305f\u30c7\u30fc\u30bf\u3092\u5fa9\u5143\u3059\u308b\u3068\u3001\u73fe\u5728\u306e\u7de8\u96c6\u5185\u5bb9\u3092\u3059\u3079\u3066\u5931\u3044\u307e\u3059\u3002\n\n\u672c\u5f53\u306b\u4fdd\u5b58\u3057\u305f\u30c7\u30fc\u30bf\u3092\u8aad\u307f\u8fbc\u307f\u307e\u3059\u304b?","restore_content":"\u81ea\u52d5\u4fdd\u5b58\u30c7\u30fc\u30bf\u3092\u5fa9\u5143","unload_msg":"\u4ed6\u306e\u30da\u30fc\u30b8\u306b\u79fb\u52d5\u3059\u308b\u3068\u3001\u5909\u66f4\u3092\u3059\u3079\u3066\u5931\u3044\u307e\u3059\u3002"},fullscreen:{desc:"\u5168\u753b\u9762"},media:{"delta_height":"",edit:"\u57cb\u3081\u8fbc\u307f\u30e1\u30c7\u30a3\u30a2\u306e\u7de8\u96c6",desc:"\u57cb\u3081\u8fbc\u307f\u30e1\u30c7\u30a3\u30a2\u306e\u633f\u5165\u3084\u7de8\u96c6","delta_width":""},fullpage:{desc:"\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5c5e\u6027","delta_width":"","delta_height":""},template:{desc:"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306e\u633f\u5165"},visualchars:{desc:"\u5236\u5fa1\u6587\u5b57\u306e\u8868\u793a\u3092\u5207\u308a\u66ff\u3048"},spellchecker:{desc:"\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af\u306e\u4f7f\u7528\u3092\u5207\u308a\u66ff\u3048",menu:"\u30b9\u30da\u30eb\u30c1\u30a7\u30c3\u30af\u306e\u8a2d\u5b9a","ignore_word":"\u3053\u306e\u5358\u8a9e\u3092\u7121\u8996","ignore_words":"\u3059\u3079\u3066\u7121\u8996",langs:"\u8a00\u8a9e",wait:"\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...",sug:"\u5019\u88dc","no_sug":"\u5019\u88dc\u306a\u3057","no_mpell":"\u30b9\u30da\u30eb\u306e\u8aa4\u308a\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002","learn_word":"\u3053\u306e\u5358\u8a9e\u3092\u5b66\u7fd2"},pagebreak:{desc:"\u5370\u5237\u7528\u306e\u6539\u30da\u30fc\u30b8\u3092\u633f\u5165"},advlist:{types:"\u7a2e\u985e",def:"\u30c7\u30d5\u30a9\u30eb\u30c8","lower_alpha":"a b c ...","lower_greek":"\u03b1 \u03b2 \u03b3 \u2026","lower_roman":"i ii iii ...","upper_alpha":"A B C ...","upper_roman":"I II III ...",circle:"\u767d\u4e38\uff08circle\uff09",disc:"\u9ed2\u4e38\uff08disc\uff09",square:"\u56db\u89d2\uff08square\uff09"},colors:{"333300":"\u6fc3\u3044\u30aa\u30ea\u30fc\u30d6\u8272","993300":"\u6fc3\u3044\u30aa\u30ec\u30f3\u30b8\u8272","000000":"\u9ed2\u8272","003300":"\u6fc3\u3044\u7dd1\u8272","003366":"\u6fc3\u3044\u7fa4\u9752\u8272","000080":"\u6fc3\u7d3a\u8272","333399":"\u85cd\u8272","333333":"\u3068\u3066\u3082\u6fc3\u3044\u7070\u8272","800000":"\u6817\u8272",FF6600:"\u6a59\u8272","808000":"\u30aa\u30ea\u30fc\u30d6\u8272","008000":"\u7dd1\u8272","008080":"\u7dd1\u304c\u304b\u304b\u3063\u305f\u9752\u8272","0000FF":"\u9752\u8272","666699":"\u7d0d\u6238\u8272","808080":"\u7070\u8272",FF0000:"\u8d64",FF9900:"\u7425\u73c0\u8272","99CC00":"\u9ec4\u7dd1\u8272","339966":"\u6d77\u7dd1\u8272","33CCCC":"\u9752\u7dd1\u8272","3366FF":"\u85e4\u7d2b\u8272","800080":"\u7d2b\u8272","999999":"\u4e2d\u304f\u3089\u3044\u306e\u7070\u8272",FF00FF:"\u8d64\u7d2b\u8272",FFCC00:"\u91d1\u8272",FFFF00:"\u9ec4\u8272","00FF00":"\u30e9\u30a4\u30e0\u8272","00FFFF":"\u6c34\u8272","00CCFF":"\u7a7a\u8272","993366":"\u8336\u8272",C0C0C0:"\u9280\u8272",FF99CC:"\u30d4\u30f3\u30af\u8272",FFCC99:"\u6843\u8272",FFFF99:"\u8584\u3044\u9ec4\u8272",CCFFCC:"\u6de1\u7dd1\u8272",CCFFFF:"\u6de1\u9752\u7dd1\u8272","99CCFF":"\u8584\u3044\u6c34\u8272",CC99FF:"\u6fc3\u3044\u8d64\u7d2b\u8272",FFFFFF:"\u767d\u8272"},aria:{"rich_text_area":"\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2"},wordcount:{words:"\u5358\u8a9e\u306e\u6570"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ka.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ka.js
new file mode 100644
index 000000000..e7b73a354
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ka.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ka:{common:{"more_colors":"\u10e1\u10ee\u10d5\u10d0 \u10e4\u10d4\u10e0\u10d4\u10d1\u10d8...","invalid_data":"\u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d0: \u10e8\u10d4\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8\u10d0 \u10d0\u10e0\u10d0 \u10e1\u10ec\u10dd\u10e0\u10d8 \u10db\u10dc\u10d8\u10e8\u10d5\u10dc\u10da\u10d4\u10dd\u10d1\u10d0, \u10d8\u10e1 \u10db\u10dd\u10dc\u10d8\u10e1\u10dc\u10e3\u10da\u10d8\u10d0 \u10ec\u10d8\u10d7\u10da\u10d0\u10d3.","popup_blocked":"\u0411\u043b\u043e\u043a\u0438\u0440\u0430\u0442\u043e\u0440 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u043a\u043e\u043d \u0437\u0430\u043a\u0440\u044b\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043e\u043a\u043d\u043e. \u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0430\u0439\u0442\u0435.","clipboard_no_support":"\u10d0\u10e0 \u10d0\u10e5\u10d5\u10e1 \u10d7\u10e5\u10d5\u10d4\u10dc\u10d8 \u10d1\u10e0\u10d0\u10e3\u10d6\u10d4\u10e0\u10d8\u10e1 \u10db\u10ee\u10d0\u10e0\u10d3\u10d0\u10ed\u10d4\u10e0\u10d0. \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d7 \u10d9\u10da\u10d0\u10d5\u10d8\u10d0\u10e2\u10e3\u10e0\u10e3\u10da\u10d8 \u10e8\u10d4\u10db\u10dd\u10d9\u10da\u10d4\u10d1\u10d4\u10d1\u10d8.","clipboard_msg":"\u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0, \u10d0\u10db\u10dd\u10ed\u10e0\u10d0 \u10d3\u10d0 \u10e9\u10d0\u10e1\u10db\u10d0 Firefox-\u10e8\u10d8 \u10d0\u10e0 \u10db\u10e3\u10e8\u10d0\u10dd\u10d1\u10e1.\\r\n\u10d2\u10e1\u10e3\u10e0\u10d7 \u10db\u10d8\u10d8\u10e6\u10dd\u10d7 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d0?","not_set":"- \u10d0\u10e0 \u10d0\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e7\u10d4\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 -","class_name":"\u10d9\u10da\u10d0\u10e1\u10d8",browse:"\u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10d4\u10e0\u10d4\u10d1\u10d0",close:"\u10d3\u10d0\u10ee\u10e3\u10e0\u10d5\u10d0",cancel:"\u10d2\u10d0\u10e3\u10e5\u10db\u10d4\u10d1\u10d0",update:"\u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0",insert:"\u10e9\u10d0\u10e1\u10db\u10d0",apply:"\u10d2\u10d0\u10db\u10dd\u10e7\u10d4\u10dc\u10d4\u10d1\u10d0","edit_confirm":"\u10d2\u10d0\u10db\u10dd\u10d5\u10d8\u10e7\u10d4\u10dc\u10dd\u10d7 \u10d0\u10db \u10d5\u10d4\u10da\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1 WYSIWYG \u10e0\u10d4\u10df\u10d8\u10db\u10d8?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4\u10d6\u10d4",right:"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4",center:"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d6\u10d4",left:"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4",align:"\u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0"},insertdatetime:{"day_short":"\u10d9\u10d5,\u10dd\u10e0\u10e8,\u10e1\u10d0\u10db\u10e8,\u10dd\u10d7\u10ee\u10e8,\u10ee\u10e3\u10d7,\u10de\u10d0\u10e0,\u10e8\u10d0\u10d1,\u10d9\u10d5","day_long":"\u10d9\u10d5\u10d8\u10e0\u10d0,\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8,\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10d9\u10d5\u10d8\u10e0\u10d0","months_short":"\u10d8\u10d0\u10dc,\u10d7\u10d4\u10d1,\u10db\u10d0\u10e0\u10e2,\u10d0\u10de\u10e0,\u10db\u10d0\u10d8\u10e1\u10d8,\u10d8\u10d5\u10dc,\u10d8\u10d5\u10da,\u10d0\u10d2\u10d5,\u10e1\u10d4\u10e5,\u10dd\u10e5\u10e2,\u10dc\u10dd\u10d4\u10db,\u10d3\u10d4\u10d9","months_long":"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8,\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8,\u10db\u10d0\u10e0\u10e2\u10d8,\u10d0\u10de\u10e0\u10d8\u10da\u10d8,\u10db\u10d0\u10d8\u10e1\u10d8,\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8,\u10d8\u10d5\u10da\u10d8\u10e1\u10d8,\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd,\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8,\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8,\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8,\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8","inserttime_desc":"\u10d3\u10e0\u10dd\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","insertdate_desc":"\u10d7\u10d0\u10e0\u10d8\u10e6\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"\u10d1\u10d4\u10ed\u10d3\u10d5\u10d0"},preview:{"preview_desc":"\u10ec\u10d8\u10dc\u10d0\u10e1\u10ec\u10d0\u10e0\u10d8 \u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10d4\u10e0\u10d4\u10d1\u10d0"},directionality:{"rtl_desc":"\u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","ltr_desc":"\u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5"},layer:{content:"\u10d0\u10ee\u10d0\u10da\u10d8 \u10e8\u10e0\u10d4","absolute_desc":"\u10d0\u10d1\u10e1\u10dd\u10da\u10e3\u10e2\u10e3\u10e0\u10d8 \u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10e0\u10d4\u10d1\u10d0","backward_desc":"\u10e3\u10d9\u10d0\u10dc\u10d0 \u10de\u10da\u10d0\u10dc\u10d6\u10d4","forward_desc":"\u10ec\u10d8\u10dc\u10d0 \u10de\u10da\u10d0\u10dc\u10d6\u10d4","insertlayer_desc":"\u10e8\u10e0\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0"},save:{"save_desc":"\u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0","cancel_desc":"\u10e7\u10d5\u10d4\u10da\u10d0 \u10ea\u10d5\u10da\u10d8\u10da\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10e3\u10e5\u10db\u10d4\u10d1\u10d0"},nonbreaking:{"nonbreaking_desc":"\u10e3\u10ec\u10e7\u10d5\u10d4\u10e2\u10d8 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0"},iespell:{download:"ieSpell \u10d0\u10e0 \u10d0\u10e0\u10d8\u10e1 \u10dc\u10d0\u10de\u10dd\u10d5\u10dc\u10d8. \u10d2\u10e1\u10e3\u10e0\u10d7 \u10d3\u10d0\u10e7\u10d4\u10dc\u10d4\u10d1\u10d0?","iespell_desc":"\u10dd\u10e0\u10d7\u10dd\u10d2\u10e0\u10d0\u10e4\u10d8\u10d8\u10e1 \u10e8\u10d4\u10db\u10dd\u10ec\u10db\u10d4\u10d1\u10d0"},advhr:{"advhr_desc":"\u10d2\u10d0\u10db\u10e7\u10dd\u10e4\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u10e1\u10db\u10d0\u10d8\u10da\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u10e8\u10d4\u10ea\u10d5\u10da\u10d0","search_desc":"\u10de\u10dd\u10d5\u10dc\u10d0","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","delta_height":""},xhtmlxtras:{"attribs_desc":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e8\u10d4\u10ea\u10d5\u10da\u10d0","ins_desc":"\u10e8\u10d4\u10ea\u10d5\u10da\u10d0","del_desc":"\u10ec\u10d0\u10e8\u10da\u10d0","acronym_desc":"\u10d0\u10d1\u10e0\u10d4\u10d5\u10d8\u10d0\u10ea\u10d8\u10d0","abbr_desc":"\u10e8\u10d4\u10db\u10dd\u10d9\u10da\u10d4\u10d1\u10d0","cite_desc":"\u10ea\u10d8\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS \u10e1\u10e2\u10d8\u10da\u10d8\u10e1 \u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"\u10e2\u10d5\u10d4\u10da\u10d0\u10e4\u10e0\u10d8\u10e1 \u10db\u10dd\u10dc\u10d8\u10e8\u10d5\u10dc\u10d0","paste_word_desc":"Word-\u10d8\u10d3\u10dc \u10e9\u10d0\u10e1\u10db\u10d0","paste_text_desc":"\u10e9\u10d0\u10e1\u10d5\u10d8 \u10e0\u10dd\u10d2\u10dd\u10e0\u10ea \u10e2\u10d4\u10e5\u10e1\u10e2\u10d8"},"paste_dlg":{"word_title":"\u0418\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e9\u10d0\u10e1\u10d0\u10e1\u10db\u10d4\u10da\u10d0\u10d3 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d7 \u10d9\u10da\u10d0\u10d5\u10d8\u10d0\u10e2\u10e3\u10e0\u10e3\u10da\u10d8 \u10d9\u10dd\u10db\u10d1\u10d8\u10dc\u10d0\u10ea\u10d8\u10d0 CTRL+V.","text_linebreaks":"\u10d2\u10d0\u10d3\u10d0\u10e2\u10d0\u10dc\u10d8\u10da\u10d8 \u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0","text_title":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e9\u10d0\u10e1\u10d0\u10e1\u10db\u10d4\u10da\u10d0\u10d3 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d7 \u10d9\u10da\u10d0\u10d5\u10d8\u10d0\u10e2\u10e3\u10e0\u10e3\u10da\u10d8 \u10d9\u10dd\u10db\u10d1\u10d8\u10dc\u10d0\u10ea\u10d8\u10d0 CTRL+V."},table:{"cellprops_delta_width":"30",cell:"\u10e3\u10ef\u10e0\u10d0",col:"\u10e1\u10d5\u10d4\u10e2\u10d8",row:"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8",del:"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","copy_row_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0","cut_row_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d0\u10db\u10dd\u10ed\u10e0\u10d0","paste_row_after_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10e5\u10d5\u10d4\u10db\u10dd\u10d7 \u10d3\u10d0\u10db\u10d4\u10e2\u10d4\u10d1\u10d0","paste_row_before_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d6\u10d4\u10db\u10dd\u10d7 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","props_desc":"\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d8\u10d4\u10d1\u10d8","cell_desc":"\u10e3\u10ef\u10e0\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","row_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","merge_cells_desc":"\u10e3\u10ef\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10d4\u10e0\u10d7\u10d8\u10d0\u10dc\u10d4\u10d1\u10d0","split_cells_desc":"\u10e3\u10ef\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e7\u10dd\u10e4\u10d0","delete_col_desc":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","col_after_desc":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5","col_before_desc":"\u10e1\u10d5\u10d4\u10e2\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","delete_row_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","row_after_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0 \u10e5\u10d5\u10d4\u10db\u10dd\u10d7","row_before_desc":"\u10e1\u10e2\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0 \u10d6\u10d4\u10db\u10dd\u10d7",desc:"\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u10e7\u10d5\u10d4\u10da\u10d0 \u10ea\u10d5\u10da\u10d8\u10da\u10d4\u10d1\u10d0 \u10d8\u10e5\u10dc\u10d4\u10d1\u10d0 \u10d3\u10d0\u10d9\u10d0\u10e0\u10d2\u10e3\u10da\u10d8.\n\n\u10d2\u10d0\u10dc\u10d5\u10d0\u10d2\u10e0\u10eb\u10dd\u10d7 \u10d0\u10d5\u10e0\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d3\u10d0\u10db\u10d0\u10ee\u10e1\u10dd\u10d5\u10e0\u10d4\u10d1\u10e3\u10da\u10d8\u10e1 \u10d0\u10e6\u10d3\u10d2\u10d4\u10dc\u10d0?","restore_content":"\u10d0\u10d5\u10e2\u10dd\u10db\u10d0\u10e2\u10e3\u10e0\u10d0\u10d3 \u10d3\u10d0\u10db\u10d0\u10ee\u10e1\u10dd\u10d5\u10e0\u10d4\u10d1\u10e3\u10da\u10d8\u10e1 \u10d0\u10e6\u10d3\u10d2\u10d4\u10dc\u10d0","unload_msg":"\u10d7\u10e3 \u10d7\u10e5\u10d5\u10d4\u10dc \u10d3\u10d0\u10e2\u10dd\u10d5\u10d4\u10d1\u10d7 \u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da \u10d2\u10d5\u10d4\u10e0\u10d3\u10e1, \u10e7\u10d5\u10d4\u10da\u10d0 \u10ea\u10d5\u10da\u10d8\u10da\u10d4\u10d1\u10d0 \u10d8\u10e5\u10dc\u10d4\u10d1\u10d0 \u10d3\u10d0\u10d9\u10d0\u10e0\u10d2\u10e3\u10da\u10d8."},fullscreen:{desc:"\u10e1\u10e0\u10e3\u10da\u10d4\u10d9\u10e0\u10d0\u10dc\u10d8\u10d0\u10dc\u10d8 \u10e0\u10d4\u10df\u10d8\u10db\u10d8"},media:{edit:"\u10d9\u10da\u10d8\u10d9\u10d8\u10e1 \u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8",desc:"\u10d9\u10da\u10d8\u10de\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","delta_height":"","delta_width":""},fullpage:{desc:"\u10d3\u10dd\u10d9\u10e3\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8","delta_width":"","delta_height":""},template:{desc:"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e7\u10d4\u10dc\u10d4\u10d1\u10d0"},visualchars:{desc:"\u10e7\u10d5\u10d4\u10da\u10d0 \u10dc\u10d8\u10e8\u10d0\u10dc\u10d8"},spellchecker:{desc:"\u10db\u10d0\u10e0\u10d7\u10da\u10ec\u10d4\u10e0\u10d0",menu:"\u10db\u10d0\u10e0\u10d7\u10da\u10ec\u10d4\u10e0\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","ignore_word":"\u10d2\u10d0\u10db\u10dd\u10d5\u10e2\u10dd\u10d5\u10dd\u10d7","ignore_words":"\u10d2\u10d0\u10db\u10dd\u10d5\u10e2\u10dd\u10d5\u10dd\u10d7 \u10e7\u10d5\u10d4\u10da\u10d0",langs:"\u10d4\u10dc\u10d4\u10d1\u10d8",wait:"\u10d2\u10d7\u10ee\u10dd\u10d5\u10d7, \u10d3\u10d0\u10d8\u10ea\u10d0\u10d3\u10dd\u10d7...",sug:"\u10d5\u10d0\u10e0\u10d8\u10d0\u10dc\u10e2\u10d4\u10d1\u10d8","no_sug":"\u10e3\u10d5\u10d0\u10e0\u10d8\u10d0\u10dc\u10e2\u10dd\u10d7","no_mpell":"\u10e8\u10d4\u10ea\u10d3\u10dd\u10db\u10d4\u10d1\u10d8 \u10d0\u10e6\u10db\u10dd\u10e9\u10d4\u10dc\u10d8\u10da\u10d8 \u10d0\u10e0 \u10d8\u10e7\u10dd.","learn_word":"Learn word"},pagebreak:{desc:"\u10d2\u10d5\u10d4\u10e0\u10d3\u10d8\u10e1 \u10d2\u10d0\u10db\u10e7\u10dd\u10e4\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0"},advlist:{types:"\u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10d4\u10d1\u10d8",def:"\u10e1\u10e2\u10d0\u10dc\u10d3\u10d0\u10e0\u10e2\u10e3\u10da\u10d8","lower_alpha":"\u10dc\u10e3\u10e1\u10ee\u10e3\u10e0\u10d8 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8","lower_greek":"\u10dc\u10e3\u10e1\u10ee\u10e3\u10e0\u10d8 \u10d1\u10d4\u10e0\u10eb\u10dc\u10e3\u10da\u10d8 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8","lower_roman":"\u10dc\u10e3\u10e1\u10ee\u10e3\u10e0\u10d8 \u10da\u10d0\u10d7\u10d8\u10dc\u10e3\u10e0\u10d8 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8","upper_alpha":"\u10d0\u10e1\u10dd\u10db\u10d7\u10d0\u10d5\u10e0\u10e3\u10da\u10d8 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8","upper_roman":"\u10d0\u10e1\u10dd\u10db\u10d7\u10d0\u10d5\u10e0\u10e3\u10da\u10d8 \u10da\u10d0\u10d7\u10d8\u10dc\u10e3\u10e0\u10d8 \u10d0\u10e1\u10dd\u10d4\u10d1\u10d8",circle:"\u10ec\u10e0\u10d4\u10d4\u10d1\u10d8",disc:"\u10d3\u10d8\u10e1\u10d9\u10d4\u10d1\u10d8",square:"\u10d9\u10d5\u10d0\u10d3\u10e0\u10d0\u10e2\u10d4\u10d1\u10d8"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/kl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/kl.js
new file mode 100644
index 000000000..046211674
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/kl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({kl:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"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?.","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/km.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/km.js
new file mode 100644
index 000000000..260b594dc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/km.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({km:{common:{"more_colors":"\u1796\u178e\u17cc\u1795\u17d2\u179f\u17c1\u1784\u1791\u17c0\u178f","invalid_data":"\u1780\u17c6\u17a0\u17bb\u179f\u17d6 \u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u178f\u1798\u17d2\u179b\u17c3\u1798\u17b7\u1793\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u178a\u17c2\u179b\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u178a\u17b6\u1780\u17cb\u179f\u17c6\u1782\u17b6\u179b\u17cb\u178a\u17c4\u1799\u1796\u178e\u17cc\u1780\u17d2\u179a\u17a0\u1798\u00a0\u17d4","popup_blocked":"\u17a2\u178f\u17cb\u1791\u17c4\u179f! \u1799\u17be\u1784\u1781\u17d2\u1789\u17bb\u17c6\u179f\u17c6\u1782\u17b6\u179b\u17cb\u1783\u17be\u1789\u1790\u17b6\u1794\u1784\u17d2\u17a2\u17bd\u1785\u179b\u17c1\u1785\u17a1\u17be\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1791\u1794\u17cb\u179f\u17d2\u1780\u17b6\u178f\u17cb\u17d4 \u17a2\u17d2\u1793\u1780\u178f\u17d2\u179a\u17bc\u179c\u1798\u17b7\u1793\u17a2\u1793\u17bb\u1789\u17d2\u1789\u17b6\u178f\u179a\u17b6\u179b\u17cb\u1780\u17b6\u179a\u1791\u1794\u17cb\u179f\u17d2\u1780\u17b6\u178f\u17cb\u1794\u1784\u17d2\u17a2\u17bd\u1785\u179b\u17c1\u1785\u17a1\u17be\u1784\u1790\u17d2\u1798\u17b8\u1785\u17c6\u1796\u17c4\u17c7\u1794\u178e\u17d2\u178f\u17b6\u1789\u1798\u17bd\u1799\u1793\u17c1\u17c7\u1791\u17c1 \u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17d2\u179a\u17be\u17a7\u1794\u1780\u179a\u178e\u17cd\u1793\u17c1\u17c7\u17b2\u17d2\u1799\u1798\u17b6\u1793\u1794\u17d2\u179a\u179f\u17b7\u1791\u17d2\u1792\u17b7\u1797\u17b6\u1796\u17d4","clipboard_no_support":"\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u179a\u17bb\u1780\u179a\u1780\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1798\u17b7\u1793\u1791\u17b6\u1793\u17cb\u1782\u17b6\u17c6\u1791\u17d2\u179a \u179f\u17bc\u1798\u1794\u17d2\u179a\u17be\u1780\u17d2\u178f\u17b6\u179a\u1785\u17bb\u1785\u1795\u17d2\u179b\u17bc\u179c\u1780\u17b6\u178f\u17cb\u1787\u17c6\u1793\u17bd\u179f\u179c\u17b7\u1789\u17d4","clipboard_msg":"\u1785\u1798\u17d2\u179b\u1784 / \u1780\u17b6\u178f\u17cb / \u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1792\u17d2\u179c\u17be\u1794\u17b6\u1793\u1780\u17d2\u1793\u17bb\u1784 Mozilla \u1793\u17b7\u1784 Firefox\u17d4 n\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u17b6\u1793\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17c6\u1796\u17b8\u1794\u1789\u17d2\u17a0\u17b6\u1793\u17c1\u17c7\u1791\u17c1?","not_set":"-- \u1796\u17bb\u17c6\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb --","class_name":"\u1790\u17d2\u1793\u17b6\u1780\u17cb",browse:"\u179a\u1780\u1798\u17be\u179b",close:"\u1794\u17b7\u1791",cancel:"\u1794\u17c4\u17c7\u1794\u1784\u17cb",update:"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799",insert:"\u1794\u1789\u17d2\u1785\u17bc\u179b",apply:"\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f","edit_confirm":"\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u17d2\u179a\u17be\u1798\u17c9\u17bc\u178a\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1783\u17be\u1789\u1787\u17b6\u17a2\u17d2\u179c\u17b8\u178a\u17c2\u179b\u1791\u1791\u17bd\u179b\u1794\u17b6\u1793\u1787\u17b6\u1798\u17bd\u1799\u1793\u17b9\u1784\u178f\u17c6\u1794\u1793\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u1793\u17c1\u17c7\u17ac?","invalid_data_number":"{#field} \u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1787\u17b6\u179b\u17c1\u1781","invalid_data_min":"{#field} \u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1787\u17b6\u1785\u17c6\u1793\u17bd\u1793\u1792\u17c6\u1787\u17b6\u1784 {#min}","invalid_data_size":"{#field} \u178f\u17d2\u179a\u17bc\u179c\u178f\u17c2\u1787\u17b6\u1785\u17c6\u1793\u17bd\u1793 \u17ac\u1797\u17b6\u1782\u179a\u1799",value:"(\u178f\u1798\u17d2\u179b\u17c3)"},contextmenu:{full:"\u179f\u1784\u1781\u17b6\u1784",right:"\u1786\u17d2\u179c\u17c1\u1784",center:"\u1780\u178e\u17d2\u178f\u17b6\u179b",left:"\u1786\u17d2\u179c\u17c1\u1784",align:"\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17b9\u1798"},insertdatetime:{"day_short":"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799,\u1785\u1793\u17d2\u1791,\u17a2\u1784\u17d2\u1782\u17b6\u179a,\u1796\u17bb\u1792,\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd,\u179f\u17bb\u1780\u17d2\u179a,\u179f\u17c5\u179a\u17cd,\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799","day_long":"\u1790\u17d2\u1784\u17c3\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799,\u1790\u17d2\u1784\u17c3\u1785\u1793\u17d2\u1791,\u1790\u17d2\u1784\u17c3\u17a2\u1784\u17d2\u1782\u17b6\u179a,\u1790\u17d2\u1784\u17c3\u1796\u17bb\u1792,\u1790\u17d2\u1784\u17c3\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd,\u1790\u17d2\u1784\u17c3\u179f\u17bb\u1780\u17d2\u179a,\u1790\u17d2\u1784\u17c3\u179f\u17c5\u179a\u17cd,\u1790\u17d2\u1784\u17c3\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799","months_short":"\u1798\u1780\u179a\u17b6,\u1780\u17bb\u1798\u17d2\u1797\u17c8,\u1798\u17b7\u1793\u17b6,\u1798\u17c1\u179f\u17b6,\u17a7\u179f\u1797\u17b6,\u1798\u17b7\u1790\u17bb\u1793\u17b6,\u1780\u1780\u17d2\u1780\u178a\u17b6,\u179f\u17b8\u17a0\u17b6,\u1780\u1789\u17d2\u1789\u17b6,\u178f\u17bb\u179b\u17b6,\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6,\u1792\u17d2\u1793\u17bc","months_long":"\u1781\u17c2\u1798\u1780\u179a\u17b6,\u1781\u17c2\u1780\u17bb\u1798\u17d2\u1797\u17c8,\u1781\u17c2\u1798\u17b7\u1793\u17b6,\u1781\u17c2\u1798\u17c1\u179f\u17b6,\u1781\u17c2\u17a7\u179f\u1797\u17b6,\u1781\u17c2\u1798\u17b7\u1790\u17bb\u1793\u17b6,\u1781\u17c2\u1780\u1780\u17d2\u1780\u178a\u17b6,\u1781\u17c2\u179f\u17b8\u17a0\u17b6,\u1781\u17c2\u1780\u1789\u17d2\u1789\u17b6,\u1781\u17c2\u178f\u17bb\u179b\u17b6,\u1781\u17c2\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6,\u1781\u17c2\u1792\u17d2\u1793\u17bc","inserttime_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1798\u17c9\u17c4\u1784","insertdate_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1780\u17b6\u179b\u1794\u179a\u1785\u17d2\u1786\u17c1\u1791","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u1794\u17c4\u17c7\u1796\u17bb\u1798\u17d2\u1796"},preview:{"preview_desc":"\u1798\u17be\u179b\u1787\u17b6\u1798\u17bb\u1793"},directionality:{"rtl_desc":"\u1791\u17b7\u179f\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784","ltr_desc":"\u1791\u17b7\u179f\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6"},layer:{content:"\u179f\u17d2\u179a\u1791\u17b6\u1794\u17cb\u1790\u17d2\u1798\u17b8...","absolute_desc":"\u1794\u17be\u1780\u1794\u17b7\u1791\u1791\u17b8\u178f\u17b6\u17c6\u1784\u178a\u17b6\u1785\u17cb\u1781\u17b6\u178f","backward_desc":"\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u1791\u17c5\u1780\u17d2\u179a\u17c4\u1799","forward_desc":"\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u1791\u17c5\u1798\u17bb\u1781","insertlayer_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u179f\u17d2\u179a\u1791\u17b6\u1794\u17cb\u1790\u17d2\u1798\u17b8"},save:{"save_desc":"\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780","cancel_desc":"\u1794\u17c4\u17c7\u1794\u1784\u17cb\u1794\u17c6\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178f\u17bc\u179a\u1791\u17b6\u17c6\u1784\u17a1\u17b6\u1799"},nonbreaking:{"nonbreaking_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u1782\u1798\u17d2\u179b\u17b6\u178f\u1798\u17b7\u1793\u1794\u17c6\u1794\u17c2\u1780"},iespell:{download:"\u1798\u17b7\u1793\u1794\u17b6\u1793\u179a\u1780\u1783\u17be\u1789 ieSpell \u17d4 \u178f\u17be\u178f\u17d2\u179a\u17bc\u179c\u178a\u17c6\u17a1\u17be\u1784\u17a5\u17a1\u17bc\u179c\u17ac?","iespell_desc":"\u178f\u17c6\u178e\u17be\u1780\u17b6\u179a\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u17a2\u1780\u17d2\u1781\u179a\u17b6\u179c\u17b7\u179a\u17bb\u1791\u17d2\u1792"},advhr:{"advhr_desc":"\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1795\u17d2\u178a\u17c1\u1780","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u17a2\u17b6\u179a\u1798\u17d2\u1798\u178e\u17cd","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780/\u1787\u17c6\u1793\u17bd\u179f","search_desc":"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780","delta_width":"","delta_height":""},advimage:{"image_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u17bc\u1794\u1797\u17b6\u1796","delta_width":"","delta_height":""},advlink:{"delta_height":"20","delta_width":"10","link_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u178f\u17c6\u178e"},xhtmlxtras:{"del_delta_height":"20","del_delta_width":"35","attribs_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u178e\u17d2\u178f\u17b6\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8","ins_desc":"\u1780\u17b6\u179a\u1794\u1789\u17d2\u1785\u17bc\u179b","del_desc":"\u1780\u17b6\u179a\u179b\u17bb\u1794\u1785\u17c4\u179b","acronym_desc":"\u1796\u17b6\u1780\u17d2\u1799\u1780\u17b6\u178f\u17cb\u1799\u1780\u178f\u17c2\u17a2\u1780\u17d2\u179f\u179a\u178a\u17be\u1798","abbr_desc":"\u17a2\u1780\u17d2\u179f\u179a\u179f\u1784\u17d2\u1781\u17c1\u1794","cite_desc":"\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u179f\u17d2\u179a\u1784\u17cb","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798 CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a5\u17a1\u17bc\u179c\u1793\u17c1\u17c7\u179f\u17d2\u1790\u17b7\u178f\u1780\u17d2\u1793\u17bb\u1784\u1798\u17c9\u17bc\u178a\u17a2\u178f\u17d2\u1790\u1794\u1791\u1792\u1798\u17d2\u1798\u178f\u17b6\u00a0\u17d4 \u1785\u17bb\u1785\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1794\u17be\u1780\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u179a\u1780\u1798\u17c9\u17bc\u178a\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1792\u1798\u17d2\u1798\u178f\u17b6\u179c\u17b7\u1789\u00a0\u17d4","plaintext_mode_sticky":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a5\u17a1\u17bc\u179c\u1793\u17c1\u17c7\u179f\u17d2\u1790\u17b7\u178f\u1780\u17d2\u1793\u17bb\u1784\u1798\u17c9\u17bc\u178a\u17a2\u178f\u17d2\u1790\u1794\u1791\u1792\u1798\u17d2\u1798\u178f\u17b6\u00a0\u17d4 \u1785\u17bb\u1785\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1794\u17be\u1780\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u179a\u1780\u1798\u17c9\u17bc\u178a\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1792\u1798\u17d2\u1798\u178f\u17b6\u179c\u17b7\u1789\u00a0\u17d4 \u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb\u1796\u17b8\u17a2\u17d2\u1793\u1780\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a2\u17d2\u179c\u17b8\u17d7\u179a\u17bd\u1785\u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u178f\u17d2\u179a\u17a1\u1794\u17cb\u1791\u17c5\u1798\u17c9\u17bc\u178a\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1792\u1798\u17d2\u1798\u178f\u17b6\u179c\u17b7\u1789\u00a0\u17d4","selectall_desc":"\u1787\u17d2\u179a\u17be\u179f\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb","paste_word_desc":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8 Word","paste_text_desc":"\u1794\u17b7\u1791\u1797\u17b6\u17d2\u1787\u1794\u17cb\u1787\u17b6\u17a2\u178f\u17d2\u1790\u1794\u1791\u1792\u1798\u17d2\u1798\u178f\u17b6"},"paste_dlg":{"word_title":"\u1794\u17d2\u179a\u17be CTRL V \u1793\u17c5\u179b\u17be\u1780\u17d2\u178a\u17b6\u179a\u1785\u17bb\u1785\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u1791\u17c5\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1793\u17c1\u17c7\u00a0\u17d4","text_linebreaks":"\u179a\u1780\u17d2\u179f\u17b6\u179f\u1789\u17d2\u1789\u17b6\u1785\u17bb\u17c7\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb","text_title":"\u1794\u17d2\u179a\u17be CTRL V \u1793\u17c5\u179b\u17be\u1780\u17d2\u178a\u17b6\u179a\u1785\u17bb\u1785\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u1791\u17c5\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1793\u17c1\u17c7\u00a0\u17d4"},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"30","table_delta_width":"0","cellprops_delta_height":"20","cellprops_delta_width":"30","rowprops_delta_height":"10","rowprops_delta_width":"0",cell:"\u1780\u17d2\u179a\u17a1\u17b6",col:"\u1787\u17bd\u179a\u1788\u179a",row:"\u1787\u17bd\u179a\u178a\u17c1\u1780",del:"\u179b\u17bb\u1794\u178f\u17b6\u179a\u17b6\u1784","copy_row_desc":"\u1785\u1798\u17d2\u179b\u1784\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784","cut_row_desc":"\u1780\u17b6\u178f\u17cb\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784","paste_row_after_desc":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784\u1781\u17b6\u1784\u179f\u17d2\u178a\u17b6\u17c6","paste_row_before_desc":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784\u1781\u17b6\u1784\u1786\u17d2\u179c\u17c1\u1784","props_desc":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u178f\u17b6\u179a\u17b6\u1784","cell_desc":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1780\u17d2\u179a\u17a1\u17b6\u178f\u17b6\u179a\u17b6\u1784","row_desc":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784","merge_cells_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1780\u17d2\u179a\u17a1\u17b6\u178f\u17b6\u179a\u17b6\u1784\u1785\u17bc\u179b\u1782\u17d2\u1793\u17b6","split_cells_desc":"\u1796\u17bb\u17c6\u1789\u17c2\u1780\u1780\u17d2\u179a\u17a1\u17b6\u178f\u17b6\u179a\u17b6\u1784","delete_col_desc":"\u179b\u17bb\u1794\u1787\u17bd\u179a\u1788\u179a\u1785\u17c1\u1789","col_after_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1787\u17bd\u179a\u1788\u179a\u1781\u17b6\u1784\u179f\u17d2\u178a\u17b6\u17c6","col_before_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1787\u17bd\u179a\u1788\u179a\u1781\u17b6\u1784\u1786\u17d2\u179c\u17c1\u1784","delete_row_desc":"\u179b\u17bb\u1794\u1787\u17bd\u179a\u178a\u17c1\u1780","row_after_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1787\u17bd\u179a\u178a\u17c1\u1780\u1781\u17b6\u1784\u179f\u17d2\u178a\u17b6\u17c6","row_before_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1787\u17bd\u179a\u178a\u17c1\u1780\u1781\u17b6\u1784\u1786\u17d2\u179c\u17c1\u1784",desc:"\u1794\u1789\u17d2\u1785\u17bc\u179b\u178f\u17b6\u179a\u17b6\u1784\u1790\u17d2\u1798\u17b8\u1798\u1799\u1799"},autosave:{"warning_message":"\u1794\u17be\u17a2\u17d2\u1793\u1780\u179f\u17d2\u178a\u17b6\u179a\u1798\u17b6\u178f\u17b7\u1780\u17b6\u179f\u17d2\u179c\u17d0\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780 \u17a2\u17d2\u1793\u1780\u1793\u17b9\u1784\u1794\u17b6\u178f\u17cb\u1794\u1784\u17cb\u1798\u17b6\u178f\u17b7\u1780\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178a\u17c2\u179b\u1798\u17b6\u1793\u1780\u17d2\u1793\u17bb\u1784\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1793\u17b7\u1796\u1793\u17d2\u1792\u1793\u17c1\u17c7\u00a0\u17d4nn\u178f\u17be\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17b6\u1780\u178a\u1787\u17b6\u1785\u1784\u17cb\u179f\u17d2\u178a\u17b6\u179a\u1798\u17b6\u178f\u17b7\u1780\u17b6\u1794\u17b6\u1793\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u17ac?","restore_content":"\u179f\u17d2\u178a\u17b6\u179a\u1798\u17b6\u178f\u17b7\u1780\u17b6\u179f\u17d2\u179c\u17d0\u1799\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780\u00a0\u17d4","unload_msg":"\u1794\u178e\u17d2\u178a\u17b6\u1794\u17c6\u179b\u17b6\u179f\u17cb\u1794\u17d2\u178a\u17bc\u179a\u1793\u17b9\u1784\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u178f\u17cb\u1794\u1784\u17cb\u1794\u17d2\u179a\u179f\u17b7\u1793\u1794\u17be\u17a2\u17d2\u1793\u1780\u1793\u17b6\u17c6\u1795\u17d2\u179b\u17bc\u179c\u1785\u17c1\u1789\u1796\u17b8\u1791\u17c6\u1796\u17d0\u179a\u1793\u17c1\u17c7\u00a0\u17d4"},fullscreen:{desc:"\u1794\u17b7\u1791\u1794\u17be\u1780\u1798\u17c9\u17bc\u178a\u1796\u17c1\u1789\u17a2\u17c1\u1780\u17d2\u179a\u1784\u17cb"},media:{"delta_height":"20","delta_width":"10",edit:"\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1798\u17c1\u178c\u17c0\u1794\u1784\u17d2\u1780\u1794\u17cb",desc:"\u1794\u1789\u17d2\u1785\u17bc\u179b / \u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1798\u17c1\u178c\u17c0\u1794\u1784\u17d2\u1780\u1794\u17cb"},fullpage:{desc:"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u17af\u1780\u179f\u17b6\u179a","delta_width":"","delta_height":""},template:{desc:"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1798\u17b6\u178f\u17b7\u1780\u17b6\u1796\u17bb\u1798\u17d2\u1796\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1787\u17b6\u1798\u17bb\u1793"},visualchars:{desc:"\u1794\u17b7\u1791/\u1794\u17be\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784\u1794\u178e\u17d2\u178a\u17b6\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u1787\u17b6\u179a\u17bc\u1794\u1797\u17b6\u1796\u00a0\u17d4"},spellchecker:{desc:"\u1794\u17b7\u1791\u1794\u17be\u1780\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u17a2\u1780\u17d2\u1781\u179a\u17b6\u179c\u17b7\u179a\u17bb\u1791\u17d2\u1792",menu:"\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1796\u17b7\u1793\u17b7\u178f\u17d2\u1799\u17a2\u1780\u17d2\u1781\u179a\u17b6\u179c\u17b7\u179a\u17bb\u1791\u17d2\u1792","ignore_word":"\u1796\u17b6\u1780\u17d2\u1799\u1798\u17b7\u1793\u17a2\u17be\u1796\u17be","ignore_words":"\u1798\u17b7\u1793\u17a2\u17be\u1796\u17be\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb",langs:"\u1797\u17b6\u179f\u17b6\u1795\u17d2\u179f\u17c1\u1784\u17d7",wait:"\u179f\u17bc\u1798\u179a\u1784\u17cb\u1785\u17b6\u17c6...",sug:"\u1780\u17b6\u179a\u1795\u17d2\u178a\u179b\u17cb\u1799\u17c4\u1794\u179b\u17cb","no_sug":"\u1782\u17d2\u1798\u17b6\u1793\u1780\u17b6\u179a\u1795\u17d2\u178a\u179b\u17cb\u1799\u17c4\u1794\u179b\u17cb","no_mpell":"\u1782\u17d2\u1798\u17b6\u1793\u1780\u17c6\u17a0\u17bb\u179f\u17a2\u1780\u17d2\u1781\u179a\u17b6\u179c\u17b7\u179a\u17bb\u1791\u17d2\u1792\u00a0\u17d4","learn_word":"\u179a\u17c0\u1793\u1796\u17b6\u1780\u17d2\u1799"},pagebreak:{desc:"\u1794\u1789\u17d2\u1785\u17bc\u179b\u179f\u1789\u17d2\u1789\u17b6\u1794\u17c6\u1794\u17c2\u1780\u1791\u17c6\u1796\u17d0\u179a\u00a0\u17d4"},advlist:{types:"\u1794\u17d2\u179a\u1797\u17c1\u1791",def:"\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798","lower_alpha":"\u17a2\u17b6\u179b\u17cb\u17a0\u17d2\u179c\u17b6\u178f\u17bc\u1785","lower_greek":"\u1780\u17d2\u179a\u17b7\u1780\u178f\u17bc\u1785","lower_roman":"\u179a\u17c9\u17bc\u1798\u17c9\u17b6\u17c6\u1784\u178f\u17bc\u1785","upper_alpha":"\u17a2\u17b6\u179b\u17cb\u17a0\u17d2\u179c\u17b6\u1792\u17c6","upper_roman":"\u179a\u17c9\u17bc\u1798\u17c9\u17b6\u17c6\u1784\u1792\u17c6",circle:"\u179a\u1784\u17d2\u179c\u1784\u17cb",disc:"\u1790\u17b6\u179f",square:"\u1780\u17b6\u179a\u17c9\u17c1"},colors:{"333300":"\u17a2\u17bc\u179b\u17b8\u179c\u1780\u17d2\u179a\u1798\u17c9\u17c5","993300":"\u179f\u17d2\u179b\u17b6\u1791\u17bb\u17c6\u1786\u17c1\u17c7","000000":"\u1781\u17d2\u1798\u17c5","003300":"\u1794\u17c3\u178f\u1784\u1780\u17d2\u179a\u1798\u17c9\u17c5","003366":"\u1791\u17b9\u1780\u179f\u1798\u17bb\u1791\u17d2\u179a\u1780\u17d2\u179a\u1798\u17c9\u17c5","000080":"\u1781\u17c0\u179c\u1785\u17b6\u179f\u17cb","333399":"\u1792\u17d2\u179b\u17c7","333333":"\u1794\u17d2\u179a\u1795\u17c1\u17c7\u1780\u17d2\u179a\u1798\u17c9\u17c5","800000":"\u1788\u17b6\u1798\u1787\u17d2\u179a\u17bc\u1780",FF6600:"\u179f\u17d2\u179b\u17b6\u1791\u17bb\u17c6","808000":"\u17a2\u17bc\u179b\u17b8\u179c","008000":"\u1794\u17c3\u178f\u1784","008080":"\u179f\u17ca\u17b8\u179b\u17c0\u1794\u1785\u17b6\u179f\u17cb","0000FF":"\u1781\u17c0\u179c","666699":"\u1781\u17c0\u179c\u1794\u17d2\u179a\u1795\u17c1\u17c7","808080":"\u1794\u17d2\u179a\u1795\u17c1\u17c7",FF0000:"\u1780\u17d2\u179a\u17a0\u1798",FF9900:"\u179b\u17bf\u1784\u1791\u17bb\u17c6","99CC00":"\u1794\u17c3\u178f\u1784\u179b\u17bf\u1784","339966":"\u1794\u17c3\u178f\u1784\u1781\u17c0\u179c","33CCCC":"\u1781\u17c0\u179c\u1794\u17c3\u178f\u1784","3366FF":"\u1781\u17c0\u179c\u179a\u17c9\u17bc\u1799\u17c9\u17b6\u179b\u17cb","800080":"\u179f\u17d2\u179c\u17b6\u1799","999999":"\u1794\u17d2\u179a\u1795\u17c1\u17c7\u1798\u1792\u17d2\u1799\u1798",FF00FF:"\u1795\u17d2\u1780\u17b6\u1788\u17bc\u1780\u1785\u17b6\u179f\u17cb",FFCC00:"\u1798\u17b6\u179f",FFFF00:"\u179b\u17bf\u1784","00FF00":"\u1780\u17d2\u179a\u17bc\u1785\u1786\u17d2\u1798\u17b6\u179a","00FFFF":"\u179f\u17ca\u17b8\u179b\u17c0\u1794","00CCFF":"\u1795\u17d2\u1791\u17c3\u1798\u17c1\u1783","993366":"\u178f\u17d2\u1793\u17c4\u178f",C0C0C0:"\u1794\u17d2\u179a\u17b6\u1780\u17cb",FF99CC:"\u1795\u17d2\u1780\u17b6\u1788\u17bc\u1780",FFCC99:"\u17a2\u17b6\u179f\u1784\u17cb\u1781\u17c3",FFFF99:"\u179b\u17bf\u1784\u1781\u17d2\u1785\u17b8",CCFFCC:"\u1794\u17c3\u178f\u1784\u179f\u17d2\u179b\u17c1\u1780",CCFFFF:"\u179f\u17ca\u17b8\u179b\u17c0\u1794\u179f\u17d2\u179b\u17c1\u1780","99CCFF":"\u1795\u17d2\u1791\u17c3\u1798\u17c1\u1783\u1781\u17d2\u1785\u17b8",CC99FF:"\u179f\u17d2\u179c\u17b6\u1799\u179f\u17d2\u179b\u17c1\u1780",FFFFFF:"\u179f"},aria:{"rich_text_area":"\u178f\u17c6\u1794\u1793\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u179f\u1798\u17d2\u1794\u17bc\u179a\u1794\u17c2\u1794"},wordcount:{words:"\u1796\u17b6\u1780\u17d2\u1799\u17d6"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ko.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ko.js
new file mode 100644
index 000000000..e9b2cc9ee
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ko.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ko:{common:{"more_colors":"\uadf8 \uc678\uc758 \uc0c9","invalid_data":"\uc624\ub958: \ubd80\uc801\ud569\ud55c \uac12\uc774 \uc785\ub825\ub418\uc5b4 \ube68\uac04\uc0c9\uc73c\ub85c \ud45c\uc2dc\ub418\uc5c8\uc2b5\ub2c8\ub2e4.","popup_blocked":"\ud504\ub85c\uadf8\ub7a8 \uae30\ub2a5\uc744 \uc704\ud55c \ucc3d\uc744 \uc5f4\ub824\uace0 \ud588\uc73c\ub098 \ud31d\uc5c5 \ucc28\ub2e8 \uae30\ub2a5\uc73c\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uac8c\ub41c \uac83 \uac19\uc2b5\ub2c8\ub2e4. \ubaa8\ub4e0 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc2dc\ub824\uba74 \uc774 \uc2f8\uc774\ud2b8\uc758 \ud31d\uc5c5 \ucc28\ub2e8\uc744 \ud574\uc81c\ud558\uc154\uc57c \ud569\ub2c8\ub2e4.","clipboard_no_support":"\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ub300\uc2e0 \ub2e8\ucd95\ud0a4\ub97c \uc0ac\uc6a9\ud574\uc8fc\uc138\uc694.","clipboard_msg":"Mozilla \ubc0fFirefox\uc5d0\uc11c\ub294 \ubcf5\uc0ac/\uc798\ub77c\ub0b4\uae30/\ubd99\uc774\uae30\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.\n\uc774 \ubb38\uc81c\uc5d0 \ub300\ud574 \ub354 \uc790\uc138\ud55c \uc0ac\ud56d\uc744 \ubcf4\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","not_set":"-- \ubbf8\uc124\uc815 --","class_name":"\ud074\ub798\uc2a4",browse:"\ucc3e\uc544\ubcf4\uae30",close:"\ub2eb\uae30",cancel:"\ucde8\uc18c",update:"\uac31\uc2e0",insert:"\uc0bd\uc785",apply:"\uc801\uc6a9","edit_confirm":"\uc774 \ud14d\uc2a4\ud2b8 \uc601\uc5ed\uc5d0 WYSIWYG \ubaa8\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","invalid_data_number":"{#field}\ub294 \uc22b\uc790\uc5ec\uc57c \ud569\ub2c8\ub2e4","invalid_data_min":"{#field}\ub294 {#min}\ubcf4\ub2e4 \ud070 \uc218\uc5ec\uc57c \ud569\ub2c8\ub2e4","invalid_data_size":"{#field}\ub294 \uc22b\uc790\ub098 \ubc31\ubd84\uc728\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4",value:"(\uac12)"},contextmenu:{full:"\uc591\ucabd \ub9de\ucda4",right:"\uc624\ub978\ucabd \ub9de\ucda4",center:"\uac00\uc6b4\ub370 \ub9de\ucda4",left:"\uc67c\ucabd \ub9de\ucda4",align:"\uc904 \ub9de\ucda4"},insertdatetime:{"day_short":"\uc77c,\uc6d4,\ud654,\uc218,\ubaa9,\uae08,\ud1a0,\uc77c","day_long":"\uc77c\uc694\uc77c,\uc6d4\uc694\uc77c,\ud654\uc694\uc77c,\uc218\uc694\uc77c,\ubaa9\uc694\uc77c,\uae08\uc694\uc77c,\ud1a0\uc694\uc77c,\uc77c\uc694\uc77c","months_short":"1,2,3,4,5,6,7,8,9,10,11,12","months_long":"1\uc6d4,2\uc6d4,3\uc6d4,4\uc6d4,5\uc6d4,6\uc6d4,7\uc6d4,8\uc6d4,9\uc6d4,10\uc6d4,11\uc6d4,12\uc6d4","inserttime_desc":"\uc2dc\uac04 \uc0bd\uc785","insertdate_desc":"\ub0a0\uc9dc \uc0bd\uc785","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\uc778\uc1c4"},preview:{"preview_desc":"\ubbf8\ub9ac \ubcf4\uae30"},directionality:{"rtl_desc":"\ubb38\uc790\ubc29\ud5a5\uc744 \uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c","ltr_desc":"\ubb38\uc790\ubc29\ud5a5\uc744 \uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c"},layer:{content:"\uc0c8 \ub808\uc774\uc5b4...","absolute_desc":"\uc808\ub300 \uc704\uce58 \ubc29\uc2dd\uc73c\ub85c \uc804\ud658","backward_desc":"\ub4a4\ub85c \uc774\ub3d9","forward_desc":"\uc55e\uc73c\ub85c \uc774\ub3d9","insertlayer_desc":"\uc0c8 \ub808\uc774\uc5b4 \uc0bd\uc785"},save:{"save_desc":"\uc800\uc7a5","cancel_desc":"\ubcc0\uacbd \ub0b4\uc6a9 \uc804\ubd80 \ucde8\uc18c"},nonbreaking:{"nonbreaking_desc":"\uc904\ubc14\uafc8\ub418\uc9c0 \uc54a\ub294 \ube48\uce78 \uc0bd\uc785"},iespell:{download:"ieSpell\uc774 \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.\n\uc778\uc2a4\ud1a8 \ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","iespell_desc":"\ucca0\uc790 \uac80\uc0ac"},advhr:{"advhr_desc":"\uad6c\ubd84\uc120 \uc0bd\uc785","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\uc774\ubaa8\ud2f0\ucf58","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\ucc3e\uae30/\ubc14\uafb8\uae30","search_desc":"\ucc3e\uae30","delta_width":"","delta_height":""},advimage:{"image_desc":"\uc774\ubbf8\uc9c0 \uc0bd\uc785/\ud3b8\uc9d1","delta_width":"","delta_height":""},advlink:{"link_desc":"\ub9c1\ud06c \uc0bd\uc785/\ud3b8\uc9d1","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"","attribs_desc":"\uc18d\uc131 \uc0bd\uc785/\ud3b8\uc9d1","ins_desc":"\uc0bd\uc785","del_desc":"\uc0ad\uc81c","acronym_desc":"\uba38\ub9bf\uae00\uc790","abbr_desc":"\uc57d\uc5b4","cite_desc":"\uc778\uc6a9","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS \uc11c\uc2dd \ud3b8\uc9d1","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\ubd99\uc5ec\ub123\uae30\uac00 \uc774\uc81c \ud3c9\ubb38 \ud14d\uc2a4\ud2b8 \ubaa8\ub4dc\uac00 \ub410\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \ud074\ub9ad\ud558\uba74 \uc815\uc0c1 \ubd99\uc5ec\ub123\uae30 \ubaa8\ub4dc\ub85c \ub3cc\uc544\uac11\ub2c8\ub2e4.","plaintext_mode_sticky":"\ubd99\uc5ec\ub123\uae30\uac00 \uc774\uc81c \ud3c9\ubb38 \ud14d\uc2a4\ud2b8 \ubaa8\ub4dc\uac00 \ub410\uc2b5\ub2c8\ub2e4. \ub2e4\uc2dc \ud074\ub9ad\ud558\uba74 \uc815\uc0c1 \ubd99\uc5ec\ub123\uae30 \ubaa8\ub4dc\ub85c \ub3cc\uc544\uac11\ub2c8\ub2e4. \ubd99\uc5ec\ub123\uae30\ub97c \ud558\uc2dc\uba74 \uc815\uc0c1 \ubd99\uc5ec\ub123\uae30 \ubaa8\ub4dc\ub85c \ub3cc\uc544\uac11\ub2c8\ub2e4.","selectall_desc":"\ubaa8\ub450 \uc120\ud0dd","paste_word_desc":"Word\ub85c\ubd80\ud130 \ubd99\uc5ec\ub123\uae30","paste_text_desc":"\ud3c9\ubb38 \ud14d\uc2a4\ud2b8\ub85c \ubd99\uc5ec\ub123\uae30"},"paste_dlg":{"word_title":"\ud0a4\ubcf4\ub4dc\uc5d0\uc11c Ctrl-V\ub97c \uc0ac\uc6a9\ud558\uba74 \ud14d\uc2a4\ud2b8\ub97c \ucc3d\uc5d0 \ubd99\uc5ec\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","text_linebreaks":"\uc904\ubc14\uafc8 \uc720\uc9c0","text_title":"\ud0a4\ubcf4\ub4dc\uc5d0\uc11c Ctrl-V\ub97c \uc0ac\uc6a9\ud558\uba74 \ud14d\uc2a4\ud2b8\ub97c \ucc3d\uc5d0 \ubd99\uc5ec\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."},table:{cell:"\uc140",col:"\uc5f4",row:"\ud589",del:"\ud45c \uc0ad\uc81c","copy_row_desc":"\ud589 \ubcf5\uc0ac","cut_row_desc":"\ud589 \uc798\ub77c\ub0b4\uae30","paste_row_after_desc":"\uc544\ub798\uc5d0 \ud589 \ubd99\uc5ec\ub123\uae30","paste_row_before_desc":"\uc704\uc5d0 \ud589 \ubd99\uc5ec\ub123\uae30","props_desc":"\ud45c \uc18d\uc131","cell_desc":"\uc140 \uc18d\uc131","row_desc":"\ud589 \uc18d\uc131","merge_cells_desc":"\uc140 \ubcd1\ud569","split_cells_desc":"\ubcd1\ud569\ub41c \uc140 \ubd84\ub9ac","delete_col_desc":"\uc5f4 \uc0ad\uc81c","col_after_desc":"\ub4a4\uc5d0 \uc5f4 \uc0bd\uc785","col_before_desc":"\uc55e\uc5d0 \uc5f4 \uc0bd\uc785","delete_row_desc":"\ud589 \uc0ad\uc81c","row_after_desc":"\uc544\ub798\uc5d0 \ud589 \uc0bd\uc785","row_before_desc":"\uc704\uc5d0 \ud589 \uc0bd\uc785",desc:"\ud45c \uc0bd\uc785/\ud3b8\uc9d1","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\uc800\uc7a5\ub41c \ub0b4\uc6a9\uc744 \ubcf5\uad6c\ud558\uba74 \ud604\uc7ac\uc758 \ub0b4\uc6a9\uc740 \uc0ad\uc81c\ub429\ub2c8\ub2e4.\n\n\uc815\ub9d0 \uc800\uc7a5\ub41c \ub0b4\uc6a9\uc744 \ubcf5\uad6c\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","restore_content":"\uc790\ub3d9 \uc800\uc7a5\ub41c \ub0b4\uc6a9 \ubcf5\uad6c","unload_msg":"\ub2e4\ub978 \ud398\uc774\uc9c0\ub85c \uc774\ub3d9\ud558\uba74 \ud3b8\uc9d1\ud55c \ub0b4\uc6a9\uc774 \ucde8\uc18c\ub429\ub2c8\ub2e4."},fullscreen:{desc:"\uc804\uccb4 \ud654\uba74 \ubaa8\ub4dc \uc804\ud658"},media:{edit:"\ubbf8\ub514\uc5b4 \ud3b8\uc9d1",desc:"\ubbf8\ub514\uc5b4 \uc0bd\uc785/\ud3b8\uc9d1","delta_height":"","delta_width":""},fullpage:{desc:"\ubb38\uc11c \uc18d\uc131","delta_width":"","delta_height":""},template:{desc:"\ubbf8\ub9ac \uc815\uc758\ub41c \ud15c\ud50c\ub9bf \uc0bd\uc785"},visualchars:{desc:"\uc81c\uc5b4 \ubb38\uc790 \ud45c\uc2dc \uc804\ud658"},spellchecker:{desc:"\uc2a4\ud3a0\ub9c1 \uac80\uc0ac \uc791\ub3d9 \uc804\ud658",menu:"\uc2a4\ud3a0\ub9c1 \uac80\uc0ac \uc124\uc815","ignore_word":"\ub2e8\uc5b4 \ubb34\uc2dc","ignore_words":"\ubaa8\ub450 \ubb34\uc2dc",langs:"\uc5b8\uc5b4",wait:"\uae30\ub2e4\ub824 \uc8fc\uc138\uc694...",sug:"\ud6c4\ubcf4","no_sug":"\ud6c4\ubcf4 \uc5c6\uc74c","no_mpell":"\uc624\ud0c8\uc790\uac00 \ubc1c\uacac\ub418\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.","learn_word":"\ub2e8\uc5b4 \uae30\uc5b5"},pagebreak:{desc:"\uc778\uc1c4\uc6a9\uc73c\ub85c \ud398\uc774\uc9c0 \ub098\ub214"},advlist:{types:"\uc885\ub958",def:"\uae30\ubcf8","lower_alpha":"\uc601\ubb38 \uc18c\ubb38\uc790","lower_greek":"\uadf8\ub9ac\uc2a4\uc5b4 \uc18c\ubb38\uc790","lower_roman":"\ub85c\ub9c8\uc790 \uc18c\ubb38\uc790","upper_alpha":"\uc601\ubb38 \ub300\ubb38\uc790","upper_roman":"\ub85c\ub9c8\uc790 \ub300\ubb38\uc790",circle:"\uc18d\uc774 \ube48 \uc6d0",disc:"\uc18d\uc774 \ucc2c \uc6d0",square:"\uc0ac\uac01\ud615"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"\ub2e8\uc5b4:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/kz.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/kz.js
new file mode 100644
index 000000000..f8fb2f40a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/kz.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({kz:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert Time","insertdate_desc":"Insert Date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction Right to Left","ltr_desc":"Direction Left to Right"},layer:{content:"New layer...","absolute_desc":"Toggle Absolute Positioning","backward_desc":"Move Backward","forward_desc":"Move Forward","insertlayer_desc":"Insert New Layer"},save:{"save_desc":"Save","cancel_desc":"Cancel All Changes"},nonbreaking:{"nonbreaking_desc":"Insert Non-Breaking Space Character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Check Spelling"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Insert Horizontal Line"},emotions:{"emotions_desc":"\u0421\u043c\u0430\u0439\u043b \u049b\u043e\u0441\u0443","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","delta_width":"","delta_height":"","search_desc":"Find"},advimage:{"delta_width":"","image_desc":"Insert/Edit Image","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Insert/Edit Link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation"},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."},table:{cell:"\u04b0\u044f\u0448\u044b\u049b","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",col:"Column",row:"Row",del:"Delete Table","copy_row_desc":"Copy Table Row","cut_row_desc":"Cut Table Row","paste_row_after_desc":"Paste Table Row After","paste_row_before_desc":"Paste Table Row Before","props_desc":"Table Properties","cell_desc":"Table Cell Properties","row_desc":"Table Row Properties","merge_cells_desc":"Merge Table Cells","split_cells_desc":"Split Merged Table Cells","delete_col_desc":"Delete Column","col_after_desc":"Insert Column After","col_before_desc":"Insert Column Before","delete_row_desc":"Delete Row","row_after_desc":"Insert Row After","row_before_desc":"Insert Row Before",desc:"Insert/Edit Table"},autosave:{"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?","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle Full Screen Mode"},media:{"delta_height":"","delta_width":"",edit:"Edit Embedded Media",desc:"Insert/Edit Embedded Media"},fullpage:{desc:"Document Properties","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"Toggle Spell Checker",menu:"Spell Checker Settings","ignore_word":"Ignore Word","ignore_words":"Ignore All",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No Suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert Page Break for Printing"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lb.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lb.js
new file mode 100644
index 000000000..8a2e69553
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({lb:{common:{"more_colors":"Weider Fuerwen","invalid_data":"Feeler: Dir hutt ong\u00fclteg W\u00e4erter uginn (rout mark\u00e9iert).","popup_blocked":"Leider huet \u00c4re Popup-Blocker eng F\u00ebnster \u00ebnnerdr\u00e9ckt, d\u00e9i fir d\'Funktion\u00e9iere vun d\u00ebsem Programm n\u00e9ideg ass. Deaktiv\u00e9iert wann ech gelift de Popup-Blocker fir d\u00ebs S\u00e4it.","clipboard_no_support":"G\u00ebtt momentan net an \u00c4rem Browser \u00ebnnerst\u00ebtzt. Benotzt wann ech gelift d\'Tastekombinatiounen.","clipboard_msg":"Kop\u00e9ieren, Ausschneiden an Af\u00fcgen sinn am Mozilla Firefox net m\u00e9iglech.\nW\u00ebllt Dir m\u00e9i iwwert d\u00ebse Problem gewuer ginn?","not_set":"- ondefin\u00e9iert -","class_name":"CSS-Klass",browse:"Duerchsichen",close:"Zoumaachen",cancel:"Ofbriechen",update:"Aktualis\u00e9ieren",insert:"Af\u00fcgen",apply:"Iwwerhuelen","edit_confirm":"D\u00ebsen Textber\u00e4ich mat WYSIWYG beaarbechten?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"B\u00e9ids\u00e4iteg align\u00e9iert",right:"Riets align\u00e9iert",center:"Zentr\u00e9iert",left:"L\u00e9nks align\u00e9iert",align:"Ausriichtung"},insertdatetime:{"day_short":"So,M\u00e9,D\u00eb,M\u00eb,Do,Fr,Sa,So","day_long":"Sonndeg,M\u00e9indeg,D\u00ebnschdeg,M\u00ebttwoch,Donneschdeg,Freideg,Samschdeg,Sonndeg","months_short":"Jan,Feb,M\u00e4erz,Abr,Mee,Juni,Juli,Aug,Sept,Okt,Nov,Dez","months_long":"Januar,Februar,M\u00e4erz,Abr\u00ebll,Mee,Juni,Juli,August,September,Oktober,November,Dezember","inserttime_desc":"Z\u00e4it af\u00fcgen","insertdate_desc":"Datum af\u00fcgen","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Dr\u00e9cken"},preview:{"preview_desc":"Virschau"},directionality:{"rtl_desc":"Schr\u00ebft vu riets no l\u00e9nks","ltr_desc":"Schr\u00ebft vu l\u00e9nks no riets"},layer:{content:"Neie Layer...","absolute_desc":"Absolut Position\u00e9ierung","backward_desc":"No hanne r\u00e9ckelen","forward_desc":"No vir r\u00e9ckelen","insertlayer_desc":"Neie Layer af\u00fcgen"},save:{"save_desc":"Sp\u00e4icheren","cancel_desc":"All d\'\u00c4nnerungen ewechpuchen"},nonbreaking:{"nonbreaking_desc":"Gesch\u00fctzt Leerzeechen af\u00fcgen"},iespell:{download:"ieSpell konnt net fonnt ginn. W\u00ebllt Dir en install\u00e9ieren?","iespell_desc":"Spellchecker"},advhr:{"advhr_desc":"Trennlinn","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smileyen","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Sichen/Ersetzen","search_desc":"Sichen","delta_width":"","delta_height":""},advimage:{"image_desc":"Bild af\u00fcgen/ersetzen","delta_width":"","delta_height":""},advlink:{"link_desc":"Link af\u00fcgen/beaarbechten","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Attributer af\u00fcgen/beaarbechten","ins_desc":"Agef\u00fcgtenen Text","del_desc":"Gel\u00e4schten Text","acronym_desc":"Akronym","abbr_desc":"Ofkierzung","cite_desc":"Quellenzit\u00e9ierung","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS-Styles beaarbechten","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Beim Af\u00fcge g\u00ebtt elo just den Text ouni Format\u00e9ierungen iwwerholl. Nach eng K\u00e9ier klicken, fir an den normale Modus zer\u00e9ckzewiesselen.","plaintext_mode_sticky":"Beim Af\u00fcge g\u00ebtt elo just den Text ouni Format\u00e9ierungen iwwerholl. Nach eng K\u00e9ier klicken, fir an den normale Modus zer\u00e9ckzewiesselen. Nodeem s Dir eppes agef\u00fcgt hutt, g\u00ebtt automatesch nees an den normale Modus gewiesselt.","selectall_desc":"Alles auswielen","paste_word_desc":"Mat Format\u00e9ierungen (aus dem Word) af\u00fcgen","paste_text_desc":"Als normalen Text af\u00fcgen"},"paste_dlg":{"word_title":"Dr\u00e9ckt op \u00c4rer Tastatur Ctrl+V, um den Text an ze f\u00fcgen.","text_linebreaks":"Zeilen\u00ebmbr\u00ebch b\u00e4ibehalen","text_title":"Dr\u00e9ckt op \u00c4rer Tastatur Ctrl+V, fir den Text an ze f\u00fcgen."},table:{"cellprops_delta_width":"150",cell:"Zell",col:"Spalt",row:"Zeil",del:"Tabelle l\u00e4schen","copy_row_desc":"Zeil kop\u00e9ieren","cut_row_desc":"Zeil ausschneiden","paste_row_after_desc":"Zeil \u00ebnnerhalb aus der Zw\u00ebschenoflag af\u00fcgen","paste_row_before_desc":"Zeil uewerhalb aus der Zw\u00ebschenoflag af\u00fcgen","props_desc":"Eegeschaften vun der Tabelle","cell_desc":"Eegeschaften vun der Zell","row_desc":"Eegeschaften vun der Zeil","merge_cells_desc":"Zellen verbannen","split_cells_desc":"Verbonnen Zellen trennen","delete_col_desc":"Spalt l\u00e4schen","col_after_desc":"Spalt riets af\u00fcgen","col_before_desc":"Spalt l\u00e9nks af\u00fcgen","delete_row_desc":"Zeil l\u00e4schen","row_after_desc":"Zeil \u00ebnnerhalb af\u00fcgen","row_before_desc":"Zeil uewerhalb af\u00fcgen",desc:"Tabell erstellen/beaarbechten","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Wann Dir dee gesp\u00e4icherten Inhalt recuper\u00e9iert, verl\u00e9iert Dir de ganzen Inhalt dee grad am Editor ass.\n\nW\u00ebllt Dir de gesp\u00e4icherten Inhalt s\u00e9cher recuper\u00e9ieren?.","restore_content":"Automatesch gesp\u00e4icherten Inhalt recuper\u00e9ieren.","unload_msg":"\u00c4r \u00c4nnerungen gi verluer, wann Dir d\'S\u00e4it verloosst."},fullscreen:{desc:"Vollbildschierm"},media:{edit:"Multimedia-Abettung beaarbechten",desc:"Multimedia-Inhalt abannen/beaarbechten","delta_height":"","delta_width":""},fullpage:{desc:"Dokument-Eegeschaften","delta_width":"","delta_height":""},template:{desc:"Virgef\u00e4erdegte Virlageninhalt af\u00fcgen"},visualchars:{desc:"Siichtbarkeet vun de Steierzeechen un/aus"},spellchecker:{desc:"Spellchecker un/aus",menu:"Konfiguratioun vum Spellchecker","ignore_word":"Wuert ignor\u00e9ieren","ignore_words":"All ignor\u00e9ieren",langs:"Sproochen",wait:"Wann ech gelift waarden...",sug:"Virschl\u00e9i","no_sug":"Keng Virschl\u00e9i","no_mpell":"Keng Orthographiefeeler fonnt.","learn_word":"Learn word"},pagebreak:{desc:"S\u00e4iten\u00ebmbroch af\u00fcgen"},advlist:{types:"Typen",def:"Standard","lower_alpha":"Kleng Buschtawen","lower_greek":"Kleng griichesch Buschtawen","lower_roman":"Kleng r\u00e9imech Zuelen","upper_alpha":"Grouss Buschtawen","upper_roman":"Grouss r\u00e9imech Zuelen",circle:"Krees",disc:"Scheif",square:"Quadrat"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lt.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lt.js
new file mode 100644
index 000000000..e11867190
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({lt:{common:{"more_colors":"Daugiau spalv\u0173","invalid_data":"Klaida: Blogai \u012fvestos reik\u0161m\u0117s, kurios pa\u017eym\u0117tos raudonai.","popup_blocked":"Atsipra\u0161ome, ta\u010diau pasteb\u0117jome, kad j\u016bs\u0173 i\u0161kylan\u010di\u0173 lang\u0173 blokavimo programa i\u0161jung\u0117 lang\u0105, kuris teikia aplikacijai funkcionalum\u0105. Tur\u0117tum\u0117te atjungti i\u0161kylan\u010di\u0173 lang\u0173 blokavim\u0105 \u0161iam tinklalapiui, kad i\u0161naudotum\u0117te visas galimybes.","clipboard_no_support":"\u0160i nar\u0161ykl\u0117 nepalaiko \u0161io veikimo, tod\u0117l naudokite klaviat\u016bros spar\u010diuosius klavi\u0161us.","clipboard_msg":"Kopijavimas/i\u0161kirpimas/\u012fd\u0117jimas paspaudus \u0161\u012f mygtuk\u0105 negalimas Mozilla ir Firefox nar\u0161ykl\u0117se.\nNukopijuoti galima paspaudus: Ctrl + C, i\u0161kirpti: Ctrl + X, \u012fd\u0117ti: Ctrl + V.\nAr norite daugiau informacijos apie \u0161i\u0105 problem\u0105?","not_set":"-- Nenurodyta --","class_name":"Klas\u0117",browse:"Nar\u0161yti",close:"U\u017everti",cancel:"Atsisakyti",update:"Atnaujinti",insert:"\u012eterpti",apply:"Taikyti","edit_confirm":"Ar norite naudoti tekst\u0173 redaktoriaus re\u017eim\u0105 \u0161iam teksto redagavimo langui?","invalid_data_number":"{#field} turi b\u016bti skai\u010dius","invalid_data_min":"{#field} turi b\u016bti skai\u010dius didesnis nei {#min}","invalid_data_size":"{#field} turi b\u016bti skai\u010dius arba procentai",value:"(value)"},contextmenu:{full:"I\u0161 abiej\u0173 pusi\u0173",right:"De\u0161in\u0117je",center:"Centre",left:"Kair\u0117je",align:"Lygiavimas"},insertdatetime:{"day_short":"Sekm,Pirm,Antr,Tre\u010d,Ketv,Penk,\u0160e\u0161t,Sekm","day_long":"Sekmadienis,Pirmadienis,Antradienis,Tre\u010diadienis,Ketvirtadienis,Penktadienis,\u0160e\u0161tadienis,Sekmadienis","months_short":"Sau,Vas,Kov,Bal,Geg,Bir,Lie,Rugpj,Rugs,Spa,Lapkr,Gruo","months_long":"Sausis,Vasaris,Kovas,Balandis,Gegu\u017e\u0117,Bir\u017eelis,Liepa,Rugpj\u016btis,Rugs\u0117jis,Spalis,Lapkritis,Gruodis","inserttime_desc":"\u012eterpti laik\u0105","insertdate_desc":"\u012eterpti dat\u0105","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Spausdinti"},preview:{"preview_desc":"Per\u017ei\u016bra"},directionality:{"rtl_desc":"Kryptis i\u0161 de\u0161in\u0117s \u012f kair\u0119","ltr_desc":"Kryptis i\u0161 kair\u0117s \u012f de\u0161in\u0119"},layer:{content:"Naujas sluoksnis...","absolute_desc":"Perjungti absoliut\u0173 pozicionavim\u0105","backward_desc":"Perkelti atgal","forward_desc":"Perkelti \u012f priek\u012f","insertlayer_desc":"\u012eterpti nauj\u0105 sluoksn\u012f"},save:{"save_desc":"I\u0161saugoti","cancel_desc":"Atsisakyti vis\u0173 pakeitim\u0173"},nonbreaking:{"nonbreaking_desc":"\u012eterpti jungiamojo tarpo simbol\u012f"},iespell:{download:"ieSpell neaptiktas. Ar norite dabar j\u012f \u012fdiegti?","iespell_desc":"Paleisti ra\u0161ybos tikrintuv\u0119"},advhr:{"delta_width":"10","advhr_desc":"Horizontali linija","delta_height":""},emotions:{"emotions_desc":"Jaustukai","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Ie\u0161koti/Pakeisti","delta_width":"10","delta_height":"20","search_desc":"Ie\u0161koti"},advimage:{"delta_width":"10","image_desc":"\u012eterpti/Redaguoti paveiksl\u0117l\u012f","delta_height":""},advlink:{"delta_width":"10","link_desc":"\u012eterpti/Redaguoti nuorod\u0105","delta_height":""},xhtmlxtras:{"attribs_delta_width":"10","ins_delta_width":"10","del_delta_width":"10","acronym_delta_width":"10","abbr_delta_width":"10","cite_delta_width":"10","attribs_desc":"\u012eterpti/Redaguoti atributus","ins_desc":"\u012eterpimas","del_desc":"Panaikinimas","acronym_desc":"Akronimas","abbr_desc":"Santrumpa","cite_desc":"Citavimas","attribs_delta_height":"","ins_delta_height":"","del_delta_height":"","acronym_delta_height":"","abbr_delta_height":"","cite_delta_height":""},style:{"delta_width":"40",desc:"Redaguoti CSS stili\u0173","delta_height":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Visk\u0105 pa\u017eym\u0117ti","paste_word_desc":"\u012ed\u0117ti i\u0161 Word","paste_text_desc":"\u012ed\u0117ti kaip paprast\u0105 tekst\u0105"},"paste_dlg":{"word_title":"Naudokite CTRL+V tekstui \u012fd\u0117ti \u012f \u0161\u012f lang\u0105.","text_linebreaks":"Palikti eilu\u010di\u0173 l\u016b\u017eius","text_title":"Naudokite CTRL+V tekstui \u012fd\u0117ti \u012f \u0161\u012f lang\u0105."},table:{"merge_cells_delta_width":"10","table_delta_width":"10","cellprops_delta_width":"10","rowprops_delta_width":"10",cell:"Langelis",col:"Stulpelis",row:"Eilut\u0117",del:"\u0160alinti lentel\u0119","copy_row_desc":"Kopijuoti lentel\u0117s eilut\u0119","cut_row_desc":"I\u0161kirpti lentel\u0117s eilut\u0119","paste_row_after_desc":"\u012ed\u0117ti lentel\u0117s eilut\u0119 po","paste_row_before_desc":"\u012ed\u0117ti lentel\u0117s eilut\u0119 prie\u0161","props_desc":"Lentel\u0117s nustatymai","cell_desc":"Lentel\u0117s langelio nustatymai","row_desc":"Lentel\u0117s eilut\u0117s nustatymai","merge_cells_desc":"Sujungti lentel\u0117s langelius","split_cells_desc":"Skaidyti sulietus lentel\u0117s langelius","delete_col_desc":"\u0160alinti stulpel\u012f","col_after_desc":"\u012eterpti stulpel\u012f po","col_before_desc":"\u012eterpti stulpel\u012f prie\u0161","delete_row_desc":"\u0160alinti eilut\u0119","row_after_desc":"\u012eterpti eilut\u0119 po","row_before_desc":"\u012eterpti eilut\u0119 prie\u0161",desc:"\u012eterpti/Redaguoti lentel\u0119","merge_cells_delta_height":"","table_delta_height":"","cellprops_delta_height":"","rowprops_delta_height":""},autosave:{"warning_message":"Jei atstatysite i\u0161saugot\u0105 turin\u012f, prarasite esam\u0105 turin\u012f redaktoriaus lange.\n\nAr tikrai norite atstatyti i\u0161saugot\u0105 turin\u012f?","restore_content":"Atstatyti automati\u0161kai i\u0161saugot\u0105 turin\u012f.","unload_msg":"Visi pakeitimai bus prarasti, jei i\u0161eisite i\u0161 \u0161io puslapio."},fullscreen:{desc:"Perjungti viso ekrano re\u017eim\u0105"},media:{"delta_height":"","delta_width":"10",edit:"Redaguoti integruot\u0105 daugialyp\u0119 terp\u0119",desc:"\u012eterpti/redaguoti integruot\u0105 daugialyp\u0119 terp\u0119"},fullpage:{desc:"Dokumento nustatymai","delta_width":"10","delta_height":""},template:{desc:"\u012eterpti numatyt\u0105 \u0161ablono turin\u012f"},visualchars:{desc:"Vizualiniai valdymo simboliai \u012fjungti/i\u0161jungti."},spellchecker:{desc:"Perjungti ra\u0161ybos tikrintuv\u0119",menu:"Ra\u0161ybos tikrintuv\u0117s nustatymai","ignore_word":"Ignoruoti \u017eod\u012f","ignore_words":"Ignoruoti visk\u0105",langs:"Kalbos",wait:"Pra\u0161ome palaukti...",sug:"Pasi\u016blymai","no_sug":"Pasi\u016blym\u0173 nerasta","no_mpell":"Klaid\u0173 nerasta.","learn_word":"I\u0161mokti \u017eod\u012f"},pagebreak:{desc:"\u012eterpti puslapio pabaigos \u017eym\u0119."},advlist:{types:"Tipai",def:"Numatytasis","lower_alpha":"Ma\u017eosiomis raid\u0117mis","lower_greek":"Ma\u017eaisiais graik\u0173","lower_roman":"Ma\u017eaisiais rom\u0117n\u0173","upper_alpha":"Did\u017eiosiomis raid\u0117mis","upper_roman":"Did\u017eiaisiais rom\u0117n\u0173",circle:"Apskritimas",disc:"Diskas",square:"Kvadratas"},colors:{"333300":"Tamsi alyvuogi\u0173","993300":"Tamsi oran\u017ein\u0117","000000":"Juoda","003300":"Tamsi \u017ealia","003366":"Tamsi \u017eydra","000080":"Tamsiai m\u0117lyna","333399":"Indigo","333333":"Tamsiai pilka","800000":"Ka\u0161tonin\u0117",FF6600:"Oran\u017ein\u0117","808000":"Alyvuogi\u0173","008000":"\u017dalia","008080":"\u017dalsvai m\u0117lyna","0000FF":"M\u0117lyna","666699":"Pilk\u0161vai m\u0117lyna","808080":"Pilka",FF0000:"Raudona",FF9900:"Gintarin\u0117","99CC00":"Geltonai \u017ealia","339966":"\u017dalia","33CCCC":"\u017dalsvai m\u0117lyna","3366FF":"M\u0117lyna","800080":"Purpurin\u0117","999999":"Vidutini\u0161kai pilka",FF00FF:"Rausvai raudona",FFCC00:"Auksin\u0117",FFFF00:"Geltona","00FF00":"\u0160viesiai \u017ealia","00FFFF":"Vandenin\u0117","00CCFF":"\u017dydra","993366":"Ruda",C0C0C0:"Sidabrin\u0117",FF99CC:"Ro\u017ein\u0117",FFCC99:"Persiko spalva",FFFF99:"\u0160viesiai geltona",CCFFCC:"\u0160viesiai \u017ealia",CCFFFF:"\u017dalsvai m\u0117lyna","99CCFF":"\u0160viesi m\u0117lyna",CC99FF:"Slyv\u0173 spalvos",FFFFFF:"Balta"},aria:{"rich_text_area":"Formatuoto teksto zona"},wordcount:{words:"\u017dod\u017ei\u0173:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lv.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lv.js
new file mode 100644
index 000000000..953451a1b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/lv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({lv:{common:{"more_colors":"Vair\u0101k kr\u0101su","invalid_data":"K\u013c\u016bda: Ievad\u012btas neder\u012bgas v\u0113rt\u012bbas. T\u0101s ir atz\u012bm\u0113tas sarkan\u0101 kr\u0101s\u0101.","popup_blocked":"Atvainojiet, bet m\u0113s esam konstat\u0113ju\u0161i, ka J\u016bsu uzleco\u0161o logu blo\u0137\u0113t\u0101js ir atsp\u0113jojis logu, kas nodro\u0161ina programmas funkcionalit\u0101ti. Lai piln\u012bb\u0101 izmantotu \u0161o r\u012bku, Jums ir j\u0101atsl\u0113dz uzleco\u0161o logu blo\u0137\u0113tajs \u0161ai vietnei. ","clipboard_no_support":"\u0160obr\u012bd J\u016bsu p\u0101rl\u016bks neatbalsta \u0161o iesp\u0113ju, t\u0101 viet\u0101 l\u016bdzu izmantotjiet tastat\u016bras sa\u012bsin\u0101jumtausti\u0146us.","clipboard_msg":"Iesp\u0113ja Kop\u0113t/Izgriezt/Iekop\u0113t nav pieejama p\u0101rl\u016bkiem Mozilla and Firefox.\nVai J\u016bs v\u0113laties uzzin\u0101t vair\u0101k par \u0161o probl\u0113mu?","not_set":"-- Nav nor\u0101d\u012bts --","class_name":"Klase",browse:"P\u0101rl\u016bkot",close:"Aizv\u0113rt",cancel:"Atcelt",update:"Atjaunin\u0101t",insert:"Ievietot",apply:"Apstiprin\u0101t","edit_confirm":"Vai tu v\u0113lies izmantot WYSIWYG \u0161im teksta laukam?","invalid_data_number":"{#field} j\u0101b\u016bt skaitlim","invalid_data_min":"{#field} ir j\u0101b\u016bt skaitlim, kas nav liel\u0101ks k\u0101 {#min}","invalid_data_size":"{#field} ir j\u0101b\u016bt skaitlim vai procentiem",value:"(value)"},contextmenu:{full:"Pilns",right:"Pa labi",center:"Centr\u0113ts",left:"Pa kreisi",align:"Novietojums"},insertdatetime:{"day_short":"Sv\u0113,Pir,Otr,Tre,Cet,Pie,Ses,Sv\u0113","day_long":"Sv\u0113tdiena,Pirmdiena,Otrdiena,Tre\u0161diena,Ceturtdiena,Piektdiena,Sestdiena,Sv\u0113tdiena","months_short":"Jan,Feb,Mar,Apr,Mai,J\u016bn,J\u016bl,Aug,Sep,Okt,Nov,Dec","months_long":"Janv\u0101ris,Febru\u0101ris,Marts,Apr\u012blis,Maijs,J\u016bnijs,J\u016blijs,Augusts,Seprembris,Oktobris,Novembris,Decembris","inserttime_desc":"Ievietot laiku","insertdate_desc":"Ievietot datumu","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Druk\u0101t"},preview:{"preview_desc":"Priek\u0161skat\u012bt"},directionality:{"rtl_desc":"Virziens no lab\u0101s uz kreiso","ltr_desc":"Virziens no kreis\u0101s uz labo"},layer:{content:"Jauns sl\u0101nis...","absolute_desc":"Iestat\u012bt/Nov\u0101kt absol\u016bto novietojumu ","backward_desc":"Atpaka\u013c","forward_desc":"Uz priek\u0161u","insertlayer_desc":"Ievietot jaunu sl\u0101ni"},save:{"save_desc":"Saglab\u0101t","cancel_desc":"Atcelt visas izmai\u0146as"},nonbreaking:{"nonbreaking_desc":"Ievietot tuk\u0161uma simbolu"},iespell:{download:"ieSpell netika atrasts. Vai J\u016bs v\u0113laties to uzst\u0101d\u012bt?","iespell_desc":"Uzs\u0101kt pareizrakst\u012bbas p\u0101rbaudi"},advhr:{"advhr_desc":"Horizont\u0101la sv\u012btra","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smaidi\u0146i","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Mekl\u0113t/Aizvietot","search_desc":"Mekl\u0113t","delta_width":"","delta_height":""},advimage:{"image_desc":"Ievietot/Redi\u0123\u0113t att\u0113lu","delta_width":"","delta_height":""},advlink:{"link_desc":"Ievietot/Redi\u0123\u0113t saiti","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Pielikt/redi\u0123\u0113t \u012bpa\u0161\u012bbas","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Sa\u012bsin\u0101jums","cite_desc":"Cit\u0101ts","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Iez\u012bm\u0113t visu","paste_word_desc":"Iekop\u0113t no Word","paste_text_desc":"Iekop\u0113t ka parasto tekstu","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Izmantojiet CTRL+V uz j\u016bsu tastat\u016bras lai iekop\u0113t tekstu log\u0101.","text_linebreaks":"Sagl\u0101b\u0101t l\u012bniju sadal\u012bt\u0101jus","text_title":"Izmantojiet CTRL+V uz j\u016bsu tastat\u016bras lai iekop\u0113t tekstu log\u0101."},table:{cell:"Aile",col:"St\u0101bs",row:"Rinda",del:"Izdz\u0113st tabulu","copy_row_desc":"Kop\u0113t tabulas rindu","cut_row_desc":"Izgriezt tabulas rindu","paste_row_after_desc":"Ielikt tabulas rindu aiz","paste_row_before_desc":"Ielikt tabulas rindu priek\u0161\u0101","props_desc":"Tabulas \u012bpa\u0161\u012bbas","cell_desc":"Tabulas ailes \u012bpa\u0161\u012bbas","row_desc":"Tabulas rindas \u012bpa\u0161\u012bbas","merge_cells_desc":"Apvienot tabulas ailes","split_cells_desc":"Sadal\u012bt apvienotas tabules ailes","delete_col_desc":"Izdz\u0113st stabu","col_after_desc":"Ielikt jaunu stabu aiz","col_before_desc":"Ielikt jaunu stabu priek\u0161\u0101","delete_row_desc":"Izdz\u0113st rindu","row_after_desc":"Ielikt jaunu rindu aiz","row_before_desc":"Ielikt jaunu rindu priek\u0161\u0101",desc:"Ielikt jaunu tabulu","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Ja atjaunosiet saglab\u0101to saturu, zaud\u0113siet eso\u0161o saturu redaktora log\u0101.\n\nVai tie\u0161\u0101m v\u0113laties atjaunot saglab\u0101tu saturu?","restore_content":"Atjaunot autom\u0101tiski saglab\u0101tu saturu.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Iem\u0101c\u012bties v\u0101rdu"},pagebreak:{desc:"Insert page break."},advlist:{types:"Tipi",def:"Noklus\u0113tais","lower_alpha":"Ar mazajiem burtiem","lower_greek":"Ar mazajiem grie\u0137u","lower_roman":"Ar mazajiem romie\u0161u","upper_alpha":"Ar lielajiem burtiem","upper_roman":"Ar lielajiem romie\u0161u",circle:"Aplis",disc:"Disks",square:"Kvadr\u0101ts"},colors:{"333300":"Tum\u0161a ol\u012bvkr\u0101sa","993300":"Tum\u0161i oran\u017ea","000000":"Melna","003300":"Tum\u0161i za\u013ca","003366":"Tum\u0161i gai\u0161zila","000080":"Tum\u0161i zila","333399":"Indigo","333333":"Tum\u0161i pel\u0113ka","800000":"Kasta\u0146u kr\u0101sa",FF6600:"Oran\u017ea","808000":"Ol\u012bvkr\u0101sa","008000":"Za\u013ca","008080":"Za\u013cganzila","0000FF":"Zila","666699":"Pel\u0113ki zila","808080":"Pel\u0113ka",FF0000:"Sarkana",FF9900:"Dzintarkr\u0101sa","99CC00":"Dzelteni za\u013ca","339966":"Oke\u0101na kr\u0101sa","3366FF":"Zila","800080":"Purpurkr\u0101sa","999999":"Vid\u0113ji pel\u0113ka",FF00FF:"Sarkan\u012bga",FFCC00:"Zelta",FFFF00:"Dzeltena","00FF00":"Gai\u0161i za\u013ca","00FFFF":"Oke\u0101na kr\u0101sa","00CCFF":"Gai\u0161zila","993366":"Br\u016bna",C0C0C0:"Sudraba",FF99CC:"Ro\u017ekr\u0101sa",FFCC99:"Persika kr\u0101sa",FFFF99:"Gai\u0161i dzeltena",CCFFCC:"Gai\u0161i za\u013ca",CCFFFF:"Za\u013cganzila","99CCFF":"Gai\u0161i zila",CC99FF:"Pl\u016bmju kr\u0101s\u0101",FFFFFF:"Balta","33CCCC":"Turquoise"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"v\u0101rdu:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/mk.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/mk.js
new file mode 100644
index 000000000..699b6f749
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/mk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({mk:{common:{"more_colors":"\u041f\u043e\u0432\u0435\u045c\u0435 \u0431\u043e\u0438 ...","invalid_data":"\u0413\u0440\u0435\u0448\u043a\u0430: \u0412\u043d\u0435\u0441\u0435\u043d\u0438 \u0441\u0435 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0438 \u0432\u0440\u0435\u0434\u043d\u043e\u0441\u0442\u0438, \u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438 \u0441\u043e \u0446\u0440\u0432\u0435\u043d\u043e.","popup_blocked":"\u0418\u0437\u0432\u0438\u043d\u0435\u0442\u0435, \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u0432\u0430\u0448\u0438\u043e\u0442 popup-blocker \u0433\u043e \u043e\u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0438\u043b \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 \u043a\u043e\u0458 \u043e\u0431\u0435\u0437\u0431\u0435\u0434\u0443\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043d\u043e\u0441\u0442 \u043d\u0430 \u0430\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0458\u0430\u0442\u0430. \u040c\u0435 \u0442\u0440\u0435\u0431\u0430 \u0434\u0430 \u0433\u043e \u0438\u0441\u043a\u043b\u0443\u0447\u0438\u0442\u0435 popup-blocker-\u043e\u0442 \u0437\u0430 \u043e\u0432\u043e\u0458 \u0441\u0430\u0458\u0442, \u0441\u043e \u0446\u0435\u043b \u0446\u0435\u043b\u043e\u0441\u043d\u043e \u0434\u0430 \u0458\u0430 \u043a\u043e\u0440\u0438\u0441\u0442\u0438\u0442\u0435 \u043e\u0432\u0430\u0430 \u0430\u043b\u0430\u0442\u043a\u0430.","clipboard_no_support":"\u041e\u0432\u0430\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0458\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u043d\u043e \u043d\u0435 \u0435 \u043f\u043e\u0434\u0434\u0440\u0436\u0430\u043d\u0430 \u043e\u0434 \u0432\u0430\u0448\u0438\u043e\u0442 \u043f\u0440\u0435\u043b\u0438\u0441\u0442\u0443\u0432\u0430\u0447, \u043e\u0431\u0438\u0434\u0435\u0442\u0435 \u0441\u0435 \u0441\u043e \u0442\u0430\u0441\u0442\u0430\u0442\u0443\u0440\u0430\u0442\u0430.","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u0430\u0458/\u0418\u0441\u0435\u0447\u0438/\u0412\u043c\u0435\u0442\u043d\u0438 \u043d\u0435 \u0435 \u0434\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u043e \u043d\u0430 Mozilla \u0438 Firefox \u043f\u0440\u0435\u0431\u0430\u0440\u0443\u0432\u0430\u0447\u0438.\n\u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u043f\u043e\u0432\u0435\u045c\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438?","not_set":"-- \u041d\u0435 \u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e --","class_name":"\u041a\u043b\u0430\u0441\u0430",browse:"\u041f\u0440\u0435\u043b\u0438\u0441\u0442\u0430\u0458",close:"\u0417\u0430\u0442\u0432\u043e\u0440\u0438",cancel:"\u041e\u0442\u043a\u0430\u0436\u0438",update:"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458",insert:"\u0412\u043d\u0435\u0441\u0438",apply:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438","edit_confirm":"\u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u043a\u043e\u0440\u0438\u0441\u0442\u0438\u0442\u0435 WYSIWYG \u0437\u0430 \u043e\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u043d\u043e \u043f\u043e\u043b\u0435 ?","invalid_data_number":"{#field} \u043c\u043e\u0440\u0430 \u0434\u0430 \u0435 \u0431\u0440\u043e\u0458","invalid_data_min":"{#field} \u043c\u043e\u0440\u0430 \u0434\u0430 \u0435 \u0431\u0440\u043e\u0458 \u043f\u043e\u0433\u043e\u043b\u0435\u043c \u043e\u0434 {#min}","invalid_data_size":"{#field} \u043c\u043e\u0440\u0430 \u0434\u0430 \u0435 \u0431\u0440\u043e\u0458 \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442",value:"(\u0432\u0440\u0435\u0434\u043d\u043e\u0441\u0442)"},contextmenu:{full:"\u0426\u0435\u043b\u043e\u0441\u043d\u043e",right:"\u0414\u0435\u0441\u043d\u043e",center:"\u0421\u0440\u0435\u0434\u0438\u043d\u0430",left:"\u041b\u0435\u0432\u043e",align:"\u0418\u0437\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435"},insertdatetime:{"day_short":"\u041d\u0435\u0434,\u041f\u043e\u043d,\u0412\u0442\u043e,\u0421\u0440\u0435,\u0427\u0435\u0442,\u041f\u0435\u0442,\u0421\u0430\u0431,\u041d\u0435\u0434","day_long":"\u041d\u0435\u0434\u0435\u043b\u0430,\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a,\u0412\u0442\u043e\u0440\u043d\u0438\u043a,\u0421\u0440\u0435\u0434\u0430,\u0427\u0435\u0442\u0432\u0440\u0442\u043e\u043a,\u041f\u0435\u0442\u043e\u043a,\u0421\u0430\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0435\u043b\u0430","months_short":"\u0408\u0430\u043d,\u0424\u0435\u0432,\u041c\u0430\u0440,\u0410\u043f\u0440,\u041c\u0430\u0458,\u0408\u0443\u043d,\u0408\u0443\u043b,\u0410\u0432\u0433,\u0421\u0435\u043f,\u041e\u043a\u0442,\u041d\u043e\u0435,\u0414\u0435\u043a","months_long":"\u0408\u0430\u043d\u0443\u0430\u0440\u0438,\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438,\u041c\u0430\u0440\u0442,\u0410\u043f\u0440\u0438\u043b,\u041c\u0430\u0458,\u0408\u0443\u043d\u0438,\u0408\u0443\u043b\u0438,\u0410\u0432\u0433\u0443\u0441\u0442,\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438,\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438,\u041d\u043e\u0435\u043c\u0432\u0440\u0438,\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438","inserttime_desc":"\u0412\u043d\u0435\u0441\u0438 \u0432\u0440\u0435\u043c\u0435","insertdate_desc":"\u0412\u043d\u0435\u0441\u0438 \u0434\u0430\u0442\u0443\u043c","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y."},print:{"print_desc":"\u041f\u0435\u0447\u0430\u0442\u0438"},preview:{"preview_desc":"\u041f\u0440\u0435\u0433\u043b\u0435\u0434"},directionality:{"rtl_desc":"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e","ltr_desc":"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e"},layer:{content:"\u041d\u043e\u0432 \u0441\u043b\u043e\u0458 (\u043d\u0438\u0432\u043e) ...","absolute_desc":"\u0412\u043a\u043b\u0443\u0447\u0438/\u0438\u0441\u043a\u043b\u0443\u0447\u0438 \u0430\u043f\u0441\u043e\u043b\u0443\u0442\u043d\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0430\u045a\u0435","backward_desc":"\u041f\u043e\u043c\u0435\u0441\u0442\u0438 \u043d\u0430\u0437\u0430\u0434","forward_desc":"\u041f\u043e\u043c\u0435\u0441\u0442\u0438 \u043d\u0430\u043f\u0440\u0435\u0434","insertlayer_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 \u043d\u043e\u0432 \u0441\u043b\u043e\u0458"},save:{"save_desc":"\u0417\u0430\u0447\u0443\u0432\u0430\u0458","cancel_desc":"\u041e\u0442\u043a\u0430\u0436\u0438 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u0438"},nonbreaking:{"nonbreaking_desc":"\u0412\u043d\u0435\u0441\u0438 \u043f\u0440\u0430\u0437\u043d\u043e \u043c\u0435\u0441\u0442\u043e"},iespell:{download:"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u043e\u0442 \u043d\u0435 \u0435 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u0430\u043d\u0430. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0430 \u0434\u0430 \u0458\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0441\u0435\u0433\u0430 ?","iespell_desc":"\u041f\u043e\u0447\u043d\u0438 \u0441\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441"},advhr:{"advhr_desc":"\u0412\u043d\u0435\u0441\u0438 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0415\u043c\u043e\u0446\u0438\u0438","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u041d\u0430\u0458\u0434\u0438/\u0417\u0430\u043c\u0435\u043d\u0438","delta_width":"\u0440\u0430\u0437\u043b\u0438\u043a\u0430 \u0432\u043e \u0448\u0438\u0440\u0438\u043d\u0430","delta_height":"\u0440\u0430\u0437\u043b\u0438\u043a\u0430 \u0432\u043e \u0434\u043e\u043b\u0436\u0438\u043d\u0430","search_desc":"\u041d\u0430\u0458\u0434\u0438"},advimage:{"image_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0441\u043b\u0438\u043a\u0430","delta_width":"","delta_height":""},advlink:{"link_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u043b\u0438\u043d\u043a","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","ins_desc":"\u0412\u043d\u0435\u0441","del_desc":"\u0411\u0440\u0438\u0448\u0435\u045a\u0435","acronym_desc":"\u0410\u043a\u0440\u043e\u043d\u0438\u043c\u0438","abbr_desc":"\u041a\u0440\u0430\u0442\u0435\u043d\u043a\u0430","cite_desc":"\u0426\u0438\u0442\u0430\u0442","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_height":"\u0440\u0430\u0437\u043b\u0438\u043a\u0430 \u0432\u043e \u0448\u0438\u0440\u0438\u043d\u0430","delta_width":"\u0440\u0430\u0437\u043b\u0438\u043a\u0430 \u0432\u043e \u0434\u043e\u043b\u0436\u0438\u043d\u0430",desc:"\u0423\u0440\u0435\u0434\u0438 \u0433\u043e CSS \u0441\u0442\u0438\u043b\u043e\u0442"},paste:{"plaintext_mode":"\u0417\u0430\u043b\u0435\u043f\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0435 \u0432\u043e \u0447\u0438\u0441\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u0435\u043d \u043c\u043e\u0434. \u041a\u043b\u0438\u043a\u043d\u0438 \u0437\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043c\u043e \u0434\u0430 \u0441\u043c\u0435\u043d\u0438\u0448 \u0432\u043e \u043e\u0431\u0438\u0447\u0435\u043d \u043c\u043e\u0434.","plaintext_mode_sticky":"\u0417\u0430\u043b\u0435\u043f\u0443\u0432\u0430\u045a\u0435\u0442\u043e \u0435 \u0432\u043e \u0447\u0438\u0441\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u0435\u043d \u043c\u043e\u0434. \u041a\u043b\u0438\u043a\u043d\u0438 \u0437\u0430 \u043f\u043e\u0432\u0442\u043e\u0440\u043c\u043e \u0434\u0430 \u0441\u043c\u0435\u043d\u0438\u0448 \u0432\u043e \u043e\u0431\u0438\u0447\u0435\u043d \u043c\u043e\u0434. \u041e\u0434 \u043a\u043e\u0433\u0430 \u045c\u0435 \u0437\u0430\u043b\u0435\u043f\u0438\u0442\u0435 \u045c\u0435 \u0431\u0438\u0434\u0435\u0442\u0435 \u0432\u0440\u0430\u0442\u0435\u043d\u0438\u0438 \u0432\u043e \u043e\u0431\u0438\u0447\u0435\u043d \u0437\u0430\u043b\u0435\u043f\u0443\u0432\u0430\u0447\u043a\u0438 \u043c\u043e\u0434.","selectall_desc":"\u041e\u0437\u043d\u0430\u0447\u0438 \u0441\u0435","paste_word_desc":"\u0417\u0430\u043b\u0435\u043f\u0438 \u043e\u0434 Word","paste_text_desc":"\u0417\u0430\u043b\u0435\u043f\u0438 \u043a\u0430\u043a\u043e \u043e\u0431\u0438\u0447\u0435\u043d \u0442\u0435\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 CTRL V \u043e\u0434 \u0442\u0430\u0441\u0442\u0430\u0442\u0443\u0440\u0430\u0442\u0430 \u0437\u0430 \u0434\u0430 \u0433\u043e \u0437\u0430\u043b\u0435\u043f\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u0432\u043e \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442.","text_linebreaks":"\u0417\u0430\u0434\u0440\u0436\u0438 \u0433\u0438 \u043f\u0430\u0443\u0437\u0438\u0442\u0435 \u043f\u043e\u043c\u0435\u0453\u0443 \u043b\u0438\u043d\u0438\u0438\u0442\u0435","text_title":"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 CTRL V \u043e\u0434 \u0442\u0430\u0441\u0442\u0430\u0442\u0443\u0440\u0430\u0442\u0430 \u0437\u0430 \u0434\u0430 \u0433\u043e \u0437\u0430\u043b\u0435\u043f\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u0432\u043e \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442."},table:{cell:"\u041a\u043b\u0435\u0442\u043a\u0430",col:"\u041a\u043e\u043b\u043e\u043d\u0430",row:"\u0420\u0435\u0434",del:"\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u0442\u0430\u0431\u0435\u043b\u0430","copy_row_desc":"\u041a\u043e\u043f\u0438\u0440\u0430\u0458 \u0433\u043e \u0440\u0435\u0434\u043e\u0442","cut_row_desc":"\u041e\u0434\u0441\u0435\u0447\u0438 \u0433\u043e \u0440\u0435\u0434\u043e\u0442","paste_row_after_desc":"\u0417\u0430\u043b\u0435\u043f\u0438 \u0433\u043e \u0440\u0435\u0434\u043e\u0442 \u043f\u043e\u0434","paste_row_before_desc":"\u0417\u0430\u043b\u0435\u043f\u0438 \u0433\u043e \u0440\u0435\u0434\u043e\u0442 \u043d\u0430\u0434","props_desc":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","cell_desc":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","row_desc":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0434\u043e\u0442","merge_cells_desc":"\u0421\u043f\u043e\u0458 \u0433\u0438 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435","split_cells_desc":"\u0420\u0430\u0437\u0434\u0432\u043e\u0458 \u0433\u0438 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435","delete_col_desc":"\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u043a\u043e\u043b\u043e\u043d\u0430","col_after_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 \u043a\u043e\u043b\u043e\u043d\u0430 \u0434\u0435\u0441\u043d\u043e","col_before_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 \u043a\u043e\u043b\u043e\u043d\u0430 \u043b\u0435\u0432\u043e","delete_row_desc":"\u0418\u0437\u0431\u0440\u0438\u0448\u0438 \u0440\u0435\u0434","row_after_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 \u0440\u0435\u0434 \u043f\u043e\u0434","row_before_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 \u0440\u0435\u0434 \u043d\u0430\u0434",desc:"\u041d\u043e\u0432\u0430 \u0442\u0430\u0431\u0435\u043b\u0430","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u0414\u043e\u043a\u043e\u043b\u043a\u0443 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u0435 \u0432\u0440\u0430\u045c\u0430\u045a\u0435 \u043d\u0430 \u043f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043e\u0441\u0442\u043e\u0458\u0431\u0430, \u045c\u0435 \u0458\u0430 \u0438\u0437\u0433\u0443\u0431\u0438\u0442\u0435 \u0446\u0435\u043b\u0430\u0442\u0430 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430 \u043a\u043e\u0458\u0430 \u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u043d\u043e \u0432\u043e \u0435\u0434\u0438\u0442\u043e\u0440\u043e\u0442.\n\n\u0414\u0430\u043b\u0438 \u0441\u0442\u0435 \u0441\u0438\u0433\u0443\u0440\u043d\u0438 \u0434\u0435\u043a\u0430 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u0435 \u0432\u0440\u0430\u045c\u0430\u045a\u0435 \u043d\u0430 \u043f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u0430\u0442\u0430 \u0441\u043e\u0441\u0442\u043e\u0458\u0431\u0430 ?","restore_content":"\u0412\u0440\u0430\u0442\u0438 \u0458\u0430 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430\u0442\u0430 \u043a\u043e\u0458\u0430 \u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u0435\u043d\u0430 \u0441\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u043e\u0442\u043e \u0441\u043d\u0438\u043c\u0430\u045a\u0435.","unload_msg":"\u041f\u0440\u043e\u043c\u0435\u043d\u0438\u0442\u0435 \u0432\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0442 \u045c\u0435 \u0431\u0438\u0434\u0430\u0442 \u0438\u0437\u0433\u0443\u0431\u0435\u043d\u0438 \u0430\u043a\u043e \u0438\u0437\u043b\u0435\u0437\u0435\u0442\u0435 \u043e\u0434 \u043e\u0432\u0430\u0430 \u0441\u0442\u0440\u0430\u043d\u0430."},fullscreen:{desc:"\u0412\u043a\u043b\u0443\u0447\u0438/\u0438\u0441\u043a\u043b\u0443\u0447\u0438 \u043f\u0440\u0438\u043a\u0430\u0436\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0446\u0435\u043b\u0438\u043e\u0442 \u0435\u043a\u0440\u0430\u043d"},media:{edit:"\u0423\u0440\u0435\u0434\u0438 \u0432\u0433\u0440\u0430\u0434\u0435\u043d\u0438 \u043c\u0435\u0434\u0438\u0443\u043c\u0438",desc:"\u0412\u043d\u0435\u0441\u0438 / \u0443\u0440\u0435\u0434\u0438 \u0432\u0433\u0440\u0430\u0434\u0435\u043d\u0438 \u043c\u0435\u0434\u0438\u0443\u043c\u0438","delta_height":"","delta_width":""},fullpage:{desc:"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0442","delta_width":"","delta_height":""},template:{desc:"\u0412\u043d\u0435\u0441\u0438 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430 \u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0442"},visualchars:{desc:"\u0412\u043a\u043b\u0443\u0447\u0438/\u0438\u0441\u043a\u043b\u0443\u0447\u0438 \u0432\u0438\u0437\u0443\u0435\u043b\u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0430 \u043d\u0430 \u0437\u043d\u0430\u0446\u0438"},spellchecker:{desc:"\u0412\u043a\u043b\u0443\u0447\u0438/\u0438\u0441\u043a\u043b\u0443\u0447\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441",menu:"\u041f\u043e\u0434\u0435\u0441\u0443\u0432\u0430\u045a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438\u0442\u0435 \u0437\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441","ignore_word":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0458 \u0433\u043e \u0437\u0431\u043e\u0440\u043e\u0442","ignore_words":"\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u0430\u0458 \u0441\u0435",langs:"\u0408\u0430\u0437\u0438\u0446\u0438",wait:"\u0412\u0435 \u043c\u043e\u043b\u0438\u043c\u0435 \u043f\u043e\u0447\u0435\u043a\u0430\u0458\u0442\u0435...",sug:"\u041f\u0440\u0435\u0434\u043b\u043e\u0437\u0438","no_sug":"\u041d\u0435\u043c\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0433","no_mpell":"\u041d\u0435 \u0435 \u043d\u0430\u0458\u0434\u0435\u043d\u0430 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u043d\u0430 \u0433\u0440\u0435\u0448\u043a\u0430.","learn_word":"\u041d\u0430\u0443\u0447\u0438 \u0437\u0431\u043e\u0440"},pagebreak:{desc:"\u0412\u043d\u0435\u0441\u0438 \u043f\u0430\u0443\u0437\u0430 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0438\u0442\u0435 \u0437\u0430 \u043f\u0440\u0438\u043d\u0442\u0430\u045a\u0435."},advlist:{types:"\u0422\u0438\u043f\u043e\u0432\u0438",def:"\u041f\u0440\u0435\u0432\u0437\u0435\u043c\u0435\u043d\u043e","lower_alpha":"\u041c\u0430\u043b\u0438 \u043d\u0443\u043c\u0435\u0440\u0438\u0447\u043a\u0438","lower_greek":"\u041c\u0430\u043b\u0438 \u0433\u0440\u0447\u043a\u0438","lower_roman":"\u041c\u0430\u043b\u0438 \u0440\u0438\u043c\u0441\u043a\u0438","upper_alpha":"\u0413\u043e\u043b\u0435\u043c\u0438 \u043d\u0443\u043c\u0435\u0440\u0438\u0447\u043a\u0438","upper_roman":"\u0413\u043e\u043b\u0435\u043c\u0438 \u0440\u0438\u043c\u0441\u043a\u0438",circle:"\u041a\u0440\u0443\u0433",disc:"\u0414\u0438\u0441\u043a",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442"},colors:{"333300":"\u0422\u0435\u043c\u043d\u043e \u043c\u0430\u0441\u043b\u0438\u043d\u0435\u0441\u0442\u0430","993300":"\u0418\u0437\u0433\u043e\u0440\u0435\u043d\u043e \u043f\u043e\u0440\u0442\u043e\u043a\u0430\u043b\u043e\u0432\u0430","000000":"\u0426\u0440\u043d\u0430","003300":"\u0422\u0435\u043c\u043d\u043e \u0437\u0435\u043b\u0435\u043d\u0430","003366":"\u0422\u0435\u043c\u043d\u043e \u0441\u0438\u043d\u0430","000080":"\u041c\u043e\u0440\u043d\u0430\u0440\u0441\u043a\u043e \u0441\u0438\u043d\u0430","333399":"\u0418\u043d\u0434\u0438\u0433\u043e","333333":"\u0422\u0435\u043c\u043d\u043e \u0441\u0438\u0432\u0430","800000":"\u0426\u0440\u0432\u0435\u043d\u043e-\u043a\u0430\u0444\u0435\u043d\u0430",FF6600:"\u041f\u043e\u0440\u0442\u043e\u043a\u0430\u043b\u043e\u0432\u0430","808000":"\u041c\u0430\u0441\u043b\u0438\u043d\u0430\u0441\u0442\u0430","008000":"\u0417\u0435\u043b\u0435\u043d\u0430","008080":"\u0421\u0430\u0444\u0438\u0440\u043d\u043e \u0441\u0438\u043d\u0430","0000FF":"\u0421\u0438\u043d\u0430","666699":"\u0421\u0438\u0432\u043e \u0441\u0438\u043d\u0430","808080":"\u0421\u0438\u0432\u0430",FF0000:"\u0426\u0440\u0432\u0435\u043d\u0430",FF9900:"\u0411\u0430\u043a\u0430\u0440\u043d\u043e-\u0436\u043e\u043b\u0442\u0430 (\u0430\u043c\u0431\u0435\u0440)","99CC00":"\u0416\u043e\u043b\u0442\u043e-\u0437\u0435\u043b\u0435\u043d\u0430","339966":"\u041c\u043e\u0440\u0441\u043a\u043e \u0437\u0435\u043b\u0435\u043d\u0430","33CCCC":"\u0422\u0438\u0440\u043a\u0438\u0437\u043d\u0430","3366FF":"\u041a\u0440\u0430\u043b\u0441\u043a\u043e \u0441\u0438\u043d\u0430","800080":"\u041f\u0443\u0440\u043f\u0443\u0440\u043d\u0430","999999":"\u0421\u0440\u0435\u0434\u043d\u043e \u0441\u0438\u0432\u0430",FF00FF:"\u041c\u0430\u0433\u0435\u043d\u0442\u0430 (\u0440\u043e\u0437\u0435\u0432\u0430)",FFCC00:"\u0417\u043b\u0430\u0442\u043d\u0430",FFFF00:"\u0416\u043e\u043b\u0442\u0430","00FF00":"\u0417\u0435\u043b\u0435\u043d\u0430 (\u043b\u0430\u0458\u043c)","00FFFF":"\u0412\u043e\u0434\u0435\u043d\u043e \u0441\u0438\u043d\u0430","00CCFF":"\u041d\u0435\u0431\u0435\u0441\u043a\u043e \u0441\u0438\u043d\u0430","993366":"\u041a\u0430\u0444\u0435\u043d\u0430",C0C0C0:"\u0421\u0440\u0435\u0431\u0440\u0435\u043d\u0430",FF99CC:"\u0420\u043e\u0437\u0435\u0432\u0430",FFCC99:"\u041a\u0430\u0458\u0441\u0438\u0458\u0430",FFFF99:"\u0421\u0432\u0435\u0442\u043b\u043e \u0436\u043e\u043b\u0442\u0430",CCFFCC:"\u0411\u043b\u0435\u0434\u043e \u0437\u0435\u043b\u0435\u043d\u0430",CCFFFF:"\u0411\u043b\u0435\u0434\u0430 \u0446\u0438\u0458\u0430\u043d","99CCFF":"\u0421\u0432\u0435\u0442\u043b\u043e \u043d\u0435\u0431\u0435\u0441\u043a\u043e \u0441\u0438\u043d\u0430",CC99FF:"\u0421\u043b\u0438\u0432\u0430",FFFFFF:"\u0411\u0435\u043b\u0430"},aria:{"rich_text_area":"\u0417\u0431\u043e\u0433\u0430\u0442\u0435\u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u043d\u0430 \u043f\u043e\u0432\u0440\u0448\u0438\u043d\u0430"},wordcount:{words:"\u0417\u0431\u043e\u0440\u043e\u0432\u0438:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ml.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ml.js
new file mode 100644
index 000000000..e4fb9fd69
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ml.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ml:{common:{"more_colors":"\u0d15\u0d42\u0d1f\u0d41\u0d24\u0d32\u0d4d\u200d \u0d28\u0d3f\u0d31\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d","invalid_data":"\u0d2a\u0d3f\u0d34\u0d35\u0d41\u0d4d: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"\u0d2e\u0d41\u0d31\u0d3f\u0d15\u0d4d\u0d15\u0d32\u0d4d\u200d/\u0d2a\u0d15\u0d30\u0d4d\u200d\u0d24\u0d4d\u0d24\u0d32\u0d4d\u200d/\u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d32\u0d4d\u200d \u0d0e\u0d28\u0d4d\u0d28\u0d3f\u0d35 \'\u0d2e\u0d4b\u0d38\u0d3f\u0d32\u0d4d\u0d32\'\u0d2f\u0d3f\u0d32\u0d41\u0d02 \'\u0d2b\u0d2f\u0d30\u0d4d\u200d\u0d2b\u0d4b\u0d15\u0d4d\u0d38\u0d4d\'\u0d32\u0d41\u0d02 \u0d32\u0d2d\u0d4d\u0d2f\u0d2e\u0d32\u0d4d\u0d32. \u200c\n\u0d24\u0d3e\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41 \u0d07\u0d24\u0d3f\u0d28\u0d46 \u0d15\u0d41\u0d31\u0d3f\u0d1a\u0d4d\u0d1a\u0d41\u0d4d \u0d15\u0d42\u0d1f\u0d41\u0d24\u0d32\u0d4d\u200d \u0d05\u0d31\u0d3f\u0d2f\u0d23\u0d4b ?","not_set":"-- Not set --","class_name":"\u0d24\u0d30\u0d02",browse:"\u0d2e\u0d47\u0d2f\u0d41\u0d15",close:"\u0d05\u0d1f\u0d15\u0d4d\u0d15\u0d41\u0d15",cancel:"\u0d35\u0d47\u0d23\u0d4d\u0d1f\u0d46\u0d28\u0d4d\u0d28\u0d41\u0d35\u0d46\u0d15\u0d4d\u0d15\u0d15",update:"\u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d02 \u0d35\u0d30\u0d41\u0d24\u0d4d\u0d24\u0d41\u0d15",insert:"\u0d24\u0d3f\u0d30\u0d41\u0d15\u0d41\u0d15",apply:"\u0d2a\u0d4d\u0d30\u0d2f\u0d4b\u0d17\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15","edit_confirm":"\u0d08 \u0d0e\u0d34\u0d41\u0d24\u0d4d\u0d24\u0d3f\u0d1f\u0d02 \u0d15\u0d3e\u0d23\u0d41\u0d02\u0d35\u0d3f\u0d27\u0d02 \u0d0e\u0d34\u0d41\u0d24\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d23\u0d4b ?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"\u0d1e\u0d3e, \u0d24\u0d3f, \u0d1a\u0d4a, \u0d2c\u0d41, \u0d35\u0d4d\u0d2f\u0d3e, \u0d35\u0d46, \u0d36, \u0d1e\u0d3e","day_long":"\u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d, \u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d, \u0d1a\u0d4a\u0d35\u0d4d\u0d35, \u0d2c\u0d41\u0d27\u0d28\u0d4d\u200d, \u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02, \u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f, \u0d36\u0d28\u0d3f, \u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d","months_short":"\u0d1c\u0d28\u0d41, \u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41, \u0d2e\u0d3e\u0d30\u0d4d\u200d, \u0d0f\u0d2a\u0d4d\u0d30\u0d3f, \u0d2e\u0d46, \u0d1c\u0d41\u0d23\u0d4d\u200d, \u0d1c\u0d42\u0d32\u0d3e, \u0d06\u0d17, \u0d38\u0d46\u0d2a\u0d4d\u0d24\u0d02, \u0d12\u0d15\u0d4d\u0d1f\u0d4b, \u0d28\u0d35\u0d02, \u0d21\u0d3f\u0d38\u0d02","months_long":"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f, \u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f, \u0d2e\u0d3e\u0d30\u0d4d\u200d\u0d1a\u0d4d\u0d1a\u0d41\u0d4d, \u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d\u200d, \u0d2e\u0d46\u0d2f\u0d4d, \u0d1c\u0d41\u0d23\u0d4d\u200d, \u0d1c\u0d42\u0d32\u0d3e\u0d2f\u0d4d, \u0d06\u0d17\u0d38\u0d4d\u0d24\u0d4d, \u0d38\u0d46\u0d2a\u0d4d\u0d24\u0d02\u0d2c\u0d30\u0d4d\u200d, \u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d\u200d, \u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d\u200d, \u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d\u200d","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"\u0d26\u0d43\u0d36\u0d4d\u0d2f \u0d28\u0d3f\u0d2f\u0d28\u0d4d\u0d24\u0d4d\u0d30\u0d23 \u0d05\u0d15\u0d4d\u0d37\u0d30\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d \u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d41\u0d15."},spellchecker:{desc:"\u0d05\u0d15\u0d4d\u0d37\u0d30\u0d2a\u0d30\u0d3f\u0d36\u0d4b\u0d27\u0d28 \u0d28\u0d3f\u0d2f\u0d28\u0d4d\u0d24\u0d4d\u0d30\u0d23\u0d02",menu:"\u0d05\u0d15\u0d4d\u0d37\u0d30\u0d2a\u0d30\u0d3f\u0d36\u0d4b\u0d27\u0d28\u0d3e \u0d15\u0d4d\u0d30\u0d2e\u0d40\u0d15\u0d30\u0d23\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d","ignore_word":"\u0d35\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d4d \u0d05\u0d35\u0d17\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42","ignore_words":"\u0d0e\u0d32\u0d4d\u0d32\u0d3e\u0d02 \u0d05\u0d35\u0d17\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d42",langs:"\u0d2d\u0d3e\u0d37\u0d15\u0d33\u0d4d\u200d",wait:"\u0d26\u0d2f\u0d35\u0d3e\u0d2f\u0d3f \u0d15\u0d3e\u0d24\u0d4d\u0d24\u0d41\u0d28\u0d3f\u0d32\u0d4d\u0d15\u0d41...",sug:"\u0d05\u0d2d\u0d3f\u0d2a\u0d4d\u0d30\u0d3e\u0d2f\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d","no_sug":"\u0d05\u0d2d\u0d3f\u0d2a\u0d4d\u0d30\u0d3e\u0d2f\u0d2e\u0d3f\u0d32\u0d4d\u0d32","no_mpell":"\u0d05\u0d15\u0d4d\u0d37\u0d30\u0d24\u0d4d\u0d24\u0d46\u0d31\u0d4d\u0d31\u0d3f\u0d32\u0d4d\u0d32.","learn_word":"Learn word"},pagebreak:{desc:"\u0d2a\u0d47\u0d1c\u0d41\u0d4d \u0d24\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/mn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/mn.js
new file mode 100644
index 000000000..36bb699da
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/mn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({mn:{common:{"more_colors":"\u0411\u0443\u0441\u0430\u0434 \u04e9\u043d\u0433\u04e9","invalid_data":"\u0410\u043b\u0434\u0430\u0430: \u0422\u0430 \u0445\u04af\u0447\u0438\u043d\u0433\u04af\u0439 \u0443\u0442\u0433\u0430 \u043e\u0440\u0443\u0443\u043b\u0441\u0430\u043d. (\u0443\u043b\u0430\u0430\u043d\u0430\u0430\u0440 \u0442\u044d\u043c\u0434\u044d\u0433\u043b\u044d\u0441\u044d\u043d).","popup_blocked":"\u0425\u0430\u0440\u0430\u043c\u0441\u0430\u043b\u0442\u0430\u0439 \u043d\u044c \u0442\u0430\u043d\u044b \u043f\u043e\u043f\u0430\u043f \u0445\u0430\u0430\u043b\u0442 \u044d\u043d\u044d \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0434 \u0448\u0430\u0430\u0440\u0434\u043b\u0430\u0433\u0430\u0442\u0430\u0439 \u0446\u043e\u043d\u0445\u044b\u0433 \u0445\u0430\u0430\u043b\u0430\u0430. \u0411\u04af\u0440\u044d\u043d \u0434\u04af\u04af\u0440\u044d\u043d \u0430\u0436\u0438\u043b\u043b\u0430\u0433\u0430\u0430\u0433 \u0445\u0430\u043d\u0433\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u0432\u044d\u043b \u043f\u043e\u043f\u0430\u043f \u0445\u0430\u0430\u043b\u0442\u0430\u0430 \u0438\u0434\u044d\u0432\u0445\u0433\u04af\u0439\u0436\u04af\u04af\u043b\u043d\u044d \u04af\u04af.","clipboard_no_support":"\u041e\u0434\u043e\u043e\u0433\u043e\u043e\u0440 \u0442\u0430\u043d\u044b \u0445\u04e9\u0442\u04e9\u0447 \u0434\u044d\u044d\u0440 \u0434\u044d\u043c\u0436\u0438\u0433\u0434\u044d\u044d\u0433\u04af\u0439 \u0431\u0430\u0439\u043d\u0430. \u0422\u0430 \u04af\u04af\u043d\u0438\u0439 \u043e\u0440\u043e\u043d\u0434 \u0442\u043e\u0432\u0447\u0438\u043b\u0431\u043e\u0440 \u0445\u044d\u0440\u044d\u0433\u043b\u044d\u043d\u044d \u04af\u04af.","clipboard_msg":"\u0425\u0443\u0443\u043b\u0430\u0445, \u0442\u0430\u0441\u043b\u0430\u043d \u0430\u0432\u0430\u0445 \u0431\u0443\u0443\u043b\u0433\u0430\u0445 \u043d\u044c \u041c\u043e\u0437\u0438\u043b\u043b\u0430 \u0424\u0430\u0439\u0440\u0444\u043e\u043a\u0441 \u0434\u044d\u044d\u0440 \u0431\u043e\u043b\u043e\u043c\u0436\u0433\u04af\u0439.\n\u0422\u0430 \u044d\u043d\u044d \u0430\u0441\u0443\u0443\u0434\u043b\u044b\u043d \u0442\u0430\u043b\u0430\u0430\u0440 \u0434\u044d\u043b\u0433\u044d\u0440\u044d\u043d\u0433\u04af\u0439 \u043c\u044d\u0434\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","not_set":"-- \u041e\u043b\u0433\u043e\u0433\u0434\u043e\u043e\u0433\u04af\u0439 --","class_name":"\u0410\u043d\u0433\u0438",browse:"\u0413\u04af\u0439\u043b\u0433\u044d\u043d \u04af\u0437\u044d\u0445",close:"\u0425\u0430\u0430\u0445",cancel:"\u0426\u0443\u0446\u043b\u0430\u0445",update:"\u0428\u0438\u043d\u044d\u0447\u043b\u044d\u0445",insert:"\u041e\u0440\u0443\u0443\u043b\u0430\u0445",apply:"\u0425\u044d\u0440\u044d\u0433\u043b\u044d\u0445","edit_confirm":"\u0422\u0430 \u044d\u043d\u044d \u0431\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u043c\u0443\u0436\u0438\u0439\u0433 WYSIWYG \u0437\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u0422\u044d\u0433\u0448\u0438\u043b\u0441\u044d\u043d",right:"\u0411\u0430\u0440\u0443\u0443\u043d",center:"\u0414\u0443\u043d\u0434",left:"\u0417\u04af\u04af\u043d",align:"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442"},insertdatetime:{"day_short":"\u041d\u044f,\u0414\u0430,\u041c\u044f,\u041b\u0445,\u041f\u04af,\u0411\u0430,\u0411\u044f,\u041d\u044f","day_long":"\u041d\u044f\u043c,\u0414\u0430\u0432\u0430\u0430,\u041c\u044f\u0433\u043c\u0430\u0440,\u041b\u0445\u0430\u0433\u0432\u0430,\u041f\u04af\u0440\u044d\u0432,\u0411\u0430\u0430\u0441\u0430\u043d,\u0411\u044f\u043c\u0431\u0430,\u041d\u044f\u043c","months_short":"\u0425\u0443\u043b,\u04ae\u0445\u044d,\u0411\u0430\u0440,\u0422\u0443\u0443,\u041b\u0443\u0443,\u041c\u043e\u0433,\u041c\u043e\u0440,\u0425\u043e\u043d,\u0411\u0438\u0447,\u0422\u0430\u0445,\u041d\u043e\u0445,\u0413\u0430\u0445","months_long":"\u0425\u0443\u043b\u0433\u0430\u043d\u0430,\u04ae\u0445\u044d\u0440,\u0411\u0430\u0440,\u0422\u0443\u0443\u043b\u0430\u0439,\u041b\u0443\u0443,\u041c\u043e\u0433\u043e\u0439,\u041c\u043e\u0440\u044c,\u0425\u043e\u043d\u044c,\u0411\u0438\u0447,\u0422\u0430\u0445\u0438\u0430,\u041d\u043e\u0445\u043e\u0439,\u0413\u0430\u0445\u0430\u0439","inserttime_desc":"\u0425\u0443\u0433\u0430\u0446\u0430\u0430 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","insertdate_desc":"\u041e\u0433\u043d\u043e\u043e \u043e\u0440\u0443\u0443\u043b\u0430\u0445","time_fmt":"%H:%M:%S","date_fmt":"%Y.%m.%d"},print:{"print_desc":"\u0425\u044d\u0432\u043b\u044d\u0445"},preview:{"preview_desc":"\u041d\u044f\u0433\u0442\u043b\u0430\u0445"},directionality:{"rtl_desc":"\u0411\u0430\u0440\u0443\u0443\u043d \u0437\u04af\u04af\u043d \u0431\u0438\u0447\u0438\u043b\u0442","ltr_desc":"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d \u0431\u0438\u0447\u0438\u043b\u0442"},layer:{content:"\u0428\u0438\u043d\u044d \u0434\u0430\u0432\u0445\u0430\u0440\u0433\u0430...","absolute_desc":"\u0410\u0431\u0441\u043e\u043b\u044e\u0442 \u0431\u0430\u0439\u0440\u0448\u0443\u0443\u043b\u0430\u043b\u0442","backward_desc":"\u0426\u0430\u0430\u0448\u043b\u0443\u0443\u043b\u0430\u0445","forward_desc":"\u041d\u0430\u0430\u0448\u043b\u0443\u0443\u043b\u0430\u0445","insertlayer_desc":"\u0428\u0438\u043d\u044d \u0434\u0430\u0432\u0445\u0430\u0440\u0433\u0430 \u043e\u0440\u0443\u0443\u043b\u0430\u0445"},save:{"save_desc":"\u0425\u0430\u0434\u0433\u0430\u043b\u0430\u0445","cancel_desc":"\u0411\u04af\u0445 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u043b\u0442\u0438\u0439\u0433 \u0445\u0430\u044f\u0445"},nonbreaking:{"nonbreaking_desc":"\u0425\u0430\u043c\u0433\u0430\u0430\u043b\u0430\u043b\u0442\u0442\u0430\u0439 \u0445\u043e\u043e\u0441\u043e\u043d \u0437\u0430\u0439 \u043e\u0440\u0443\u0443\u043b\u0430\u0445"},iespell:{download:"ieSpell \u043e\u043b\u0434\u0441\u043e\u043d\u0433\u04af\u0439. \u0422\u0430 \u0441\u0443\u0443\u043b\u0433\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","iespell_desc":"\u0414\u04af\u0440\u043c\u0438\u0439\u043d \u0430\u043b\u0434\u0430\u0430 \u0448\u0430\u043b\u0433\u0430\u043b\u0442"},advhr:{"advhr_desc":"\u0422\u0443\u0441\u0433\u0430\u0430\u0440\u043b\u0430\u0433\u0447","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0421\u044d\u0442\u0433\u044d\u043b \u0445\u04e9\u0434\u043b\u04e9\u043b","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0425\u0430\u0439\u0445/\u043e\u0440\u043b\u0443\u0443\u043b\u0430\u0445","search_desc":"\u0425\u0430\u0439\u0445","delta_width":"","delta_height":""},advimage:{"image_desc":"\u0417\u0443\u0440\u0430\u0433 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u043e\u0440\u043b\u0443\u0443\u043b\u0430\u0445","delta_width":"","delta_height":""},advlink:{"link_desc":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0430\u0445","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0430\u0445","ins_desc":"\u041e\u0440\u0441\u043e\u043d \u0431\u0438\u0447\u0432\u044d\u0440","del_desc":"\u0423\u0441\u0442\u0441\u0430\u043d \u0431\u0438\u0447\u0432\u044d\u0440 Text","acronym_desc":"\u0422\u043e\u0432\u0447\u0438\u043b\u0441\u043e\u043d \u04af\u0433","abbr_desc":"\u0422\u043e\u0432\u0447\u043b\u043e\u043b","cite_desc":"\u0418\u0448\u043b\u044d\u043b","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS-Styles \u0437\u0430\u0441\u0430\u0445","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u0411\u04af\u0433\u0434\u0438\u0439\u0433 \u0441\u043e\u043d\u0433\u043e\u0445","paste_word_desc":"\u0425\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442\u0442\u044d\u0439 \u0431\u0443\u0443\u043b\u0433\u0430\u0445 (Word-\u0441)","paste_text_desc":"\u042d\u043d\u0433\u0438\u0439\u043d \u0431\u0438\u0447\u0432\u044d\u0440\u044d\u044d\u0440 \u0431\u0443\u0443\u043b\u0433\u0430\u0445","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u0422\u0430 \u0431\u0438\u0447\u0432\u044d\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u0432\u044d\u043b Ctrl+V \u0434\u044d\u044d\u0440 \u0434\u0430\u0440\u043d\u0430 \u0443\u0443.","text_linebreaks":"\u041c\u04e9\u0440 \u0442\u0430\u0441\u043b\u0430\u043b\u0442\u044b\u0433 \u04af\u043b\u0434\u044d\u044d\u043d\u044d","text_title":"\u0422\u0430 \u0431\u0438\u0447\u0432\u044d\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u0432\u044d\u043b Ctrl+V \u0434\u044d\u044d\u0440 \u0434\u0430\u0440\u043d\u0430 \u0443\u0443."},table:{cell:"\u041d\u04af\u0434",col:"\u0411\u0430\u0433\u0430\u043d\u0430",row:"\u041c\u04e9\u0440",del:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442 \u0443\u0441\u0442\u0433\u0430\u0445","copy_row_desc":"\u041c\u04e9\u0440 \u0445\u0443\u0443\u043b\u0430\u0445","cut_row_desc":"\u041c\u04e9\u0440 \u0442\u0430\u0441\u0434\u0430\u0436 \u0430\u0432\u0430\u0445 \u0443\u0443?","paste_row_after_desc":"\u0417\u0430\u0432\u0441\u0440\u044b\u043d \u0445\u0430\u0434\u0433\u0430\u043b\u0430\u0433\u0447\u0430\u0430\u0441 \u043c\u04e9\u0440\u0438\u0439\u0433 \u0434\u043e\u043e\u0440 \u043d\u044c \u0431\u0443\u0443\u043b\u0433\u0430\u0445","paste_row_before_desc":"\u0417\u0430\u0432\u0441\u0440\u044b\u043d \u0445\u0430\u0434\u0433\u0430\u043b\u0430\u0433\u0447\u0430\u0430\u0441 \u043c\u04e9\u0440\u0438\u0439\u0433 \u0434\u044d\u044d\u0440 \u043d\u044c \u0431\u0443\u0443\u043b\u0433\u0430\u0445","props_desc":"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0448\u0438\u043d\u0436\u04af\u04af\u0434","cell_desc":"\u041d\u04af\u0434\u043d\u0438\u0439 \u0448\u0438\u043d\u0436\u04af\u04af\u0434","row_desc":"\u041c\u04e9\u0440\u0438\u0439\u043d \u0448\u0438\u043d\u0436\u04af\u04af\u0434","merge_cells_desc":"\u041d\u04af\u0434 \u043d\u044d\u0433\u0442\u0433\u044d\u0445","split_cells_desc":"\u041d\u044d\u0433\u0442\u0433\u044d\u0441\u044d\u043d \u043d\u04af\u0434\u0438\u0439\u0433 \u0441\u0430\u043b\u0433\u0430\u0445","delete_col_desc":"\u0411\u0430\u0433\u0430\u043d\u0430 \u0443\u0441\u0442\u0433\u0430\u0445","col_after_desc":"\u0411\u0430\u0440\u0443\u0443\u043d \u0442\u0430\u043b\u0434 \u043d\u044c \u0431\u0430\u0433\u0430\u043d\u0430 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","col_before_desc":"\u0417\u04af\u04af\u043d \u0442\u0430\u043b\u0434 \u043d\u044c \u0431\u0430\u0433\u0430\u043d\u0430 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","delete_row_desc":"\u041c\u04e9\u0440 \u0443\u0441\u0442\u0433\u0430\u0445","row_after_desc":"\u0414\u043e\u043e\u0440 \u043d\u044c \u043c\u04e9\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","row_before_desc":"\u0414\u044d\u044d\u0440 \u043d\u044c \u043c\u04e9\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445",desc:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442 \u04af\u04af\u0441\u0433\u044d\u0445","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u0425\u044d\u0440\u044d\u0432 \u0442\u0430 \u0445\u0443\u0443\u0434\u0441\u044b\u0433 \u043e\u0440\u0445\u0438\u0432\u043e\u043b \u0442\u0430\u043d\u044b \u04e9\u04e9\u0440\u0447\u043b\u04e9\u043b\u0442\u04af\u04af\u0434 \u0445\u0430\u044f\u0433\u0434\u0430\u043d\u0430.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u0414\u044d\u043b\u0433\u044d\u0446 \u0434\u04af\u04af\u0440\u044d\u043d"},media:{edit:"\u041c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u0448\u0438\u0433\u0442\u0433\u044d\u044d \u0437\u0430\u0441\u0430\u0445",desc:"\u041c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u0448\u0438\u0433\u0442\u0433\u044d\u0445/\u0437\u0430\u0441\u0430\u0445","delta_height":"","delta_width":""},fullpage:{desc:"\u0411\u0430\u0440\u0438\u043c\u0442\u044b\u043d \u0442\u043e\u0434\u0440\u0443\u0443\u043b\u0433\u0430","delta_width":"","delta_height":""},template:{desc:"\u04e8\u043c\u043d\u04e9 \u0431\u044d\u043b\u0442\u0433\u044d\u0441\u044d\u043d \u0445\u044d\u0432\u0438\u0439\u043d \u0430\u0433\u0443\u0443\u043b\u0433\u044b\u0433 \u0431\u0443\u0443\u043b\u0433\u0430\u0445"},visualchars:{desc:"\u0423\u0434\u0438\u0440\u0434\u0430\u0445 \u0442\u044d\u043c\u0434\u044d\u0433\u0442 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445/\u044d\u0441 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445."},spellchecker:{desc:"\u0414\u04af\u0440\u043c\u0438\u0439\u043d \u0430\u043b\u0434\u0430\u0430 \u0448\u0430\u043b\u0433\u0430\u0433\u0447 \u043d\u044d\u044d\u043b\u0442\u0442\u044d\u0439/\u0445\u0430\u0430\u043b\u0442\u0442\u0430\u0439",menu:"\u0414\u04af\u0440\u043c\u0438\u0439\u043d \u0430\u043b\u0434\u0430\u0430 \u0448\u0430\u043b\u0433\u0430\u0433\u0447\u0438\u0439\u043d \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","ignore_word":"\u04ae\u0433 \u04af\u043b \u0445\u044d\u0440\u044d\u0433\u0441\u044d\u0445","ignore_words":"\u0411\u04af\u0433\u0434\u0438\u0439\u0433 \u04af\u043b \u0445\u044d\u0440\u044d\u0433\u0441\u044d\u0445",langs:"\u0425\u044d\u043b",wait:"\u0422\u04af\u0440 \u0445\u04af\u043b\u044d\u044d\u043d\u044d \u04af\u04af...",sug:"\u0421\u0430\u043d\u0430\u043b","no_sug":"\u0421\u0430\u043d\u0430\u043b \u0430\u043b\u0433\u0430","no_mpell":"\u0414\u04af\u0440\u043c\u0438\u0439\u043d \u0430\u043b\u0434\u0430\u0430 \u043e\u043b\u0434\u0441\u043e\u043d\u0433\u04af\u0439.","learn_word":"Learn word"},pagebreak:{desc:"\u0425\u0443\u0443\u0434\u0430\u0441 \u0442\u0430\u0441\u043b\u0430\u043b\u0442 \u043e\u0440\u0443\u0443\u043b\u0430\u0445."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ms.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ms.js
new file mode 100644
index 000000000..667c2056a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ms.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ms:{common:{"more_colors":"Warna lain-lain","invalid_data":"Ralat: Nilai dimasukkan tidak sah, lihat tanda merah.","popup_blocked":"Maaf, kami dapati \"popup-blocker\" telah melumpuhkan tetingkap yang memberikan fungsi kepada perisian anda. Anda perlu mematikan \"popup-blocker\" untuk laman web ini bagi menggunakan semua alatan.","clipboard_no_support":"Perisian browser anda tidak disokong pada masa ini, sila guna papan kekunci.","clipboard_msg":"Salin/Potong/Tempel tidak disediakan untuk Mozilla dan Firefox.\nAdakah anda mahu informasi lanjut tentang isu ini?","not_set":"-- Tidak set --","class_name":"Kelas",browse:"Semak seimbas",close:"Tutup",cancel:"Batal",update:"Kemaskini",insert:"Sisip",apply:"Guna","edit_confirm":"Guna WYSIWYG mod untuk \"textarea\" ini?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Penuh",right:"Kanan",center:"Tengah",left:"Kiri",align:"Penyelarian"},insertdatetime:{"day_short":"Aha,Isn,Sel,Rab,Kha,Jum,Sab,Aha","day_long":"Ahad,Isnin,Selasa,Rabu,Khamis,Jumaat,Sabtu,Ahad","months_short":"Jan,Feb,Mac,Apr,Mei,Jun,Jul,Ogo,Sep,Okt,Nov,Dis","months_long":"Januari,Febuari,Mac,April,Mei,Jun,Julai,Ogos,September,Oktober,November,Disember","inserttime_desc":"Sisip masa","insertdate_desc":"Sisip tarikh","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Cetak"},preview:{"preview_desc":"Pratonton"},directionality:{"rtl_desc":"Arah kanan ke kiri","ltr_desc":"Arah kiri ke kanan"},layer:{content:"Lapisan baru...","absolute_desc":"Alih posisi mutlak","backward_desc":"Gerak kebelakang","forward_desc":"Gerak kehadapan","insertlayer_desc":"Sisip lapisan baru"},save:{"save_desc":"Simpan","cancel_desc":"Batal semua pertukaran"},nonbreaking:{"nonbreaking_desc":"Masukkan aksara ruang [nbsp]"},iespell:{download:"ieSpell tiada. Pasang sekarang?","iespell_desc":"Larikan pembetulan ejaan"},advhr:{"advhr_desc":"Garis mengufuk","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Simbol Emosi","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Cari/Ganti","search_desc":"Cari","delta_width":"","delta_height":""},advimage:{"image_desc":"Sisip/sunting imej","delta_width":"","delta_height":""},advlink:{"link_desc":"Sisip/sunting pautan","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Masukkan/Sunting Ciri-ciri","ins_desc":"Kemasukan","del_desc":"Pemadaman","acronym_desc":"Akronim","abbr_desc":"Singkatan","cite_desc":"Kutipan","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Sunting Gaya CSS","delta_height":"","delta_width":""},paste:{"selectall_desc":"Pilih semua","paste_word_desc":"Tempel dari Word","paste_text_desc":"Tempel sebagai teks","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Guna CTRL+V pada papan kekunci anda untuk teks ke dalam tetingkap.","text_linebreaks":"Biarkan garisan pemisah","text_title":"Guna CTRL+V pada papan kekunci anda untuk Tempel teks ke dalam tetingkap."},table:{cell:"Sel",col:"Kolum",row:"Row",del:"Padam jadual","copy_row_desc":"Salin jadual row","cut_row_desc":"Potong jadual row","paste_row_after_desc":"Tempel jadual row selepasnya","paste_row_before_desc":"Tempel jadual row sebelumnya","props_desc":"Alatan jadual","cell_desc":"Alatan jadual sel","row_desc":"Alatan jadual row","merge_cells_desc":"Gabung sel jadual","split_cells_desc":"Bahagi sel jadual","delete_col_desc":"Alih kolum","col_after_desc":"Masukkan kolum selepasnya","col_before_desc":"Masukkan kolum sebelumnya","delete_row_desc":"Padam row","row_after_desc":"Masukkan row selepasnya","row_before_desc":"Masukkan row sebelumnya",desc:"Masukkan jadual baru","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"Pertukaran akan terbatal sekiranya anda meninggalkan halaman ini.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Alih mod skrin penuh"},media:{edit:"Sunting media",desc:"Masukkan / sunting media","delta_height":"","delta_width":""},fullpage:{desc:"Alatan dokumen","delta_width":"","delta_height":""},template:{desc:"Masukkan pra takrifan kandungan templet"},visualchars:{desc:"Pengendali grafik huruf Buka/Tutup."},spellchecker:{desc:"Alih pembetul perkataan",menu:"Alatan pembetul perkataan","ignore_word":"Endahkan perkataan","ignore_words":"Endahkan kesemuanya",langs:"Bahasa-bahasa",wait:"Sila tunggu...",sug:"Cadangan","no_sug":"Tiada cadangan","no_mpell":"Tiada kesalahan ejaan.","learn_word":"Learn word"},pagebreak:{desc:"Masukkan penghenti-halaman."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/my.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/my.js
new file mode 100644
index 000000000..60a49a972
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/my.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({my:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u1021\u103c\u1015\u100a\u103a\u1037",right:"\u100a\u102c",center:"\u1021\u101c\u101a\u103a",left:"\u1018\u101a\u103a",align:"\u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"\u1010\u1014\u1002\u1004\u103a\u1039\u1031\u1014\u103d,\u1010\u1014\u101c\u1004\u103a\u1039\u102c,\u1021\u1002\u1004\u103a\u1039\u102b,\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038,\u103c\u1000\u102c\u101e\u1015\u1031\u1010\u1038,\u1031\u101e\u102c\u103c\u1000\u102c,\u1005\u1031\u1014,\u1010\u1014\u1002\u1004\u103a\u1039\u1031\u1014\u103d","months_short":"\u1007\u1014\u103a,\u1031\u1016,\u1019\u1010\u103a,\u1027\u103c\u1015\u102e,\u1031\u1019,\u1007\u103d\u1014\u103a,\u1007\u1030,\u1029,\u1005\u1000\u103a,\u1031\u1021\u102c\u1000\u103a,\u1014\u102d\u102f\u101d\u1004\u103a,\u1012\u102e\u1007\u1004\u103a","months_long":"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e,\u1031\u1016\u1031\u1016\u102c\u103a\u101d\u102b\u101b\u102e,\u1019\u1010\u103a,\u1027\u103c\u1015\u102e,\u1031\u1019,\u1007\u103d\u1014\u103a,\u1007\u1030\u101c\u102d\u102f\u1004\u103a,\u1029\u1002\u102f\u1010\u103a,\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c,\u1031\u1021\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c,\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c,\u1012\u102e\u1007\u1004\u103a\u1018\u102c","inserttime_desc":"\u1021\u1001\u103b\u102d\u1014\u103a\u1014\u102c\u101b\u102e \u1011\u100a\u103a\u1037\u1015\u102b","insertdate_desc":"\u1031\u1014\u1037\u1005\u103d\u1032\u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u1015\u102b","time_fmt":"%H \u1014\u102c\u101b\u102e : %M \u1019\u102d\u1014\u1005\u103a : %S \u1005\u1000\u1039\u1000\u1014\u103a\u1037","date_fmt":"%Y-\u1001\u102f\u1014\u103e\u1005\u103a\u104a %B\u101c\u104a %d-\u101b\u1000\u103a\u1031\u1014\u1037"},print:{"print_desc":"\u1015\u1036\u102f\u1014\u103e\u102d\u1015\u103a"},preview:{"preview_desc":"\u1021\u1005\u1019\u103a\u1038\u103c\u1000\u100a\u103a\u1037"},directionality:{"rtl_desc":"\u100a\u102c\u1019\u103e \u1018\u101a\u103a\u101e\u102d\u102f\u1037 \u1025\u102e\u1038\u1010\u100a\u103a","ltr_desc":"\u1018\u101a\u103a\u1019\u103e \u100a\u102c\u101e\u102d\u102f\u1037 \u1025\u102e\u1038\u1010\u100a\u103a"},layer:{content:"\u1031\u101c\u101a\u102c \u1021\u101c\u103d\u103e\u102c\u101e\u1005\u103a...","absolute_desc":"Absolute positioning \u1000\u102d\u102f \u1016\u103d\u1004\u103a\u1037/\u1015\u102d\u1010\u103a","backward_desc":"\u1031\u1014\u102c\u1000\u103a\u1015\u102d\u102f\u1004\u103a\u1038\u101e\u102d\u102f\u1037\u1031\u101b\u103d\u103e\u1037\u1015\u102b","forward_desc":"\u1019\u103b\u1000\u103a\u1014\u103e\u102c\u1005\u102c\u101e\u102d\u102f\u1037\u1031\u101b\u103d\u103e\u1037\u1015\u102b","insertlayer_desc":"\u1031\u101c\u101a\u102c\u1021\u101c\u103d\u103e\u102c\u101e\u1005\u103a\u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u1015\u102b"},save:{"save_desc":"\u101e\u102d\u1019\u103a\u1038","cancel_desc":"\u1021\u1031\u103c\u1015\u102c\u1004\u103a\u1038\u1021\u101c\u1032\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1015\u101a\u103a\u1016\u103b\u1000\u103a"},nonbreaking:{"nonbreaking_desc":"Non-breaking Space \u1021\u1000\u1039\u1001\u101b\u102c\u1000\u102d\u102f \u1011\u100a\u103a\u1037\u1015\u102b"},iespell:{download:"ieSpell \u1000\u102d\u102f \u1019\u1031\u1010\u103d\u1037\u1015\u102b\u104b \u101a\u1001\u102f \u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u101c\u102d\u102f\u1015\u102b\u101e\u101c\u102c\u1038?","iespell_desc":"\u1005\u1000\u102c\u1038\u101c\u1036\u102f\u1038 \u1005\u1005\u103a\u1031\u1006\u1038\u1015\u102b"},advhr:{"advhr_desc":"\u1031\u101b\u103c\u1015\u1004\u103a\u100a\u102e \u1019\u103b\u1009\u103a\u1038\u1031\u103c\u1000\u102c\u1004\u103a\u1038","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u1005\u102d\u1010\u103a\u1001\u1036\u1005\u102c\u1038\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u101b\u103e\u102c/\u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038","search_desc":"\u101b\u103e\u102c\u1015\u102b","delta_width":"","delta_height":""},advimage:{"image_desc":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","delta_width":"","delta_height":""},advlink:{"link_desc":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u1021\u1011\u1030\u1038\u103c\u1015\u102f\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038 \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","ins_desc":"\u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u103c\u1001\u1004\u103a\u1038","del_desc":"\u1015\u101a\u103a\u1016\u103b\u1000\u103a\u103c\u1001\u1004\u103a\u1038","acronym_desc":"\u1021\u1010\u102d\u102f\u1031\u1000\u102c\u1000\u103a","abbr_desc":"\u1021\u1000\u103b\u1009\u103a\u1038\u1001\u103b\u102f\u1015\u103a","cite_desc":"\u1000\u102d\u102f\u1038\u1000\u102c\u1038\u103c\u1001\u1004\u103a\u1038","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS \u1005\u1010\u102d\u102f\u1004\u103a \u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1031\u101b\u103d\u1038","paste_word_desc":"MS Word \u1019\u103e \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u1015\u102b","paste_text_desc":"\u101b\u102d\u102f\u1038\u101b\u102d\u102f\u1038\u1005\u102c\u101e\u102c\u1038\u1021\u1031\u1014\u103c\u1016\u1004\u103a\u1037 \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u1015\u102b","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1011\u1032\u101e\u102d\u102f\u1037 \u1005\u102c\u101e\u102c\u1038\u1000\u102d\u102f \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u101b\u1014\u103a \u101e\u1004\u103a\u1037 \u1000\u102e\u1038\u1018\u102f\u1010\u103a\u101c\u1000\u103a\u1000\u103d\u1000\u103a\u101b\u103e\u102d CTRL V \u1000\u102d\u102f \u101e\u1036\u102f\u1038\u1015\u102b","text_linebreaks":"\u1005\u102c\u1031\u103c\u1000\u102c\u1004\u103a\u1038\u1001\u103d\u1032\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1001\u103d\u1032\u101c\u103b\u103e\u1000\u103a\u1011\u102c\u1038\u1015\u102b","text_title":"\u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1011\u1032\u101e\u102d\u102f\u1037 \u1005\u102c\u101e\u102c\u1038\u1000\u102d\u102f \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u101b\u1014\u103a \u101e\u1004\u103a\u1037 \u1000\u102e\u1038\u1018\u102f\u1010\u103a\u101c\u1000\u103a\u1000\u103d\u1000\u103a\u101b\u103e\u102d CTRL V \u1000\u102d\u102f \u101e\u1036\u102f\u1038\u1015\u102b"},table:{cell:"\u1021\u1000\u103d\u1000\u103a",col:"\u1031\u1000\u102c\u103a\u101c\u1036",row:"\u1021\u1010\u1014\u103a\u1038",del:"\u1007\u101a\u102c\u1038\u1000\u102d\u102f \u1016\u103b\u1000\u103a","copy_row_desc":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1019\u102d\u1010\u1039\u1010\u1030\u1000\u1030\u1038","cut_row_desc":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u103c\u1016\u1010\u103a","paste_row_after_desc":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1031\u1014\u102c\u1000\u103a\u1010\u103d\u1004\u103a \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037","paste_row_before_desc":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1031\u101b\u103e\u1037\u1010\u103d\u1004\u103a \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037","props_desc":"\u1007\u101a\u102c\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","cell_desc":"\u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","row_desc":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","merge_cells_desc":"\u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1031\u1015\u102b\u1004\u103a\u1038\u1015\u102b","split_cells_desc":"\u1031\u1015\u102b\u1004\u103a\u1038\u1011\u102c\u1038\u1031\u101e\u102c \u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1001\u103d\u1032\u1015\u102b","delete_col_desc":"\u1031\u1000\u102c\u103a\u101c\u1036\u1000\u102d\u102f \u1016\u101a\u103a\u101b\u103e\u102c\u1038\u1015\u102b","col_after_desc":"\u1031\u1000\u102c\u103a\u101c\u1036\u1000\u102d\u102f \u1031\u1014\u102c\u1000\u103a\u1010\u103d\u1004\u103a \u103c\u1016\u100a\u103a\u1037\u1015\u102b","col_before_desc":"\u1031\u1000\u102c\u103a\u101c\u1036\u1000\u102d\u102f \u1031\u101b\u103e\u1037\u1010\u103d\u1004\u103a \u103c\u1016\u100a\u103a\u1037\u1015\u102b","delete_row_desc":"\u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1016\u103b\u1000\u103a\u1015\u102b","row_after_desc":"\u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1031\u1014\u102c\u1000\u103a\u1010\u103d\u1004\u103a \u103c\u1016\u100a\u103a\u1037\u1015\u102b","row_before_desc":"\u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1031\u101b\u103e\u1037\u1010\u103d\u1004\u103a \u103c\u1016\u100a\u103a\u1037\u1015\u102b",desc:"\u1007\u101a\u102c\u1038 \u1021\u101e\u1005\u103a\u1011\u100a\u103a\u1037\u1015\u102b","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u101e\u102d\u1019\u103a\u1038\u1006\u100a\u103a\u1038\u1011\u102c\u1038\u101e\u100a\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u103c\u1015\u1014\u103a\u101c\u100a\u103a\u1011\u102c\u1038\u101e\u102d\u102f\u1015\u102b\u1000\u104a \u101c\u1000\u103a\u101b\u103e\u102d \u1021\u101a\u103a\u1012\u102e\u1010\u102c\u1011\u1032\u1010\u103d\u1004\u103a \u101b\u103e\u102d\u1031\u101e\u102c \u1031\u101b\u1038\u101e\u102c\u1038\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1006\u1036\u102f\u1038\u101b\u103e\u1036\u102f\u1038\u101b\u1015\u102b\u1019\u100a\u103a\u104bnn\u101e\u102d\u1019\u103a\u1038\u1006\u100a\u103a\u1038\u1011\u102c\u1038\u101e\u100a\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u103c\u1015\u1014\u103a\u101c\u100a\u103a\u1011\u102c\u1038\u101e\u102d\u102f\u101c\u102d\u102f\u1010\u102c \u1031\u101e\u1001\u103b\u102c\u101b\u1032\u1037\u101c\u102c\u1038?","restore_content":"\u1021\u101c\u102d\u102f\u101c\u102d\u102f\u101e\u102d\u1019\u103a\u1038\u1011\u102c\u1038\u101e\u100a\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u103c\u1015\u1014\u103a\u101c\u100a\u103a\u1011\u102c\u1038\u101e\u102d\u102f\u1015\u102b\u104b","unload_msg":"\u1012\u102e\u1005\u102c\u1019\u103b\u1000\u103a\u1014\u103e\u102c\u1019\u103e \u1021\u103c\u1001\u102c\u1038\u1000\u102d\u102f \u1031\u101b\u103d\u103e\u1037\u101c\u102d\u102f\u1000\u103a\u101c\u103b\u103e\u1004\u103a \u101e\u1004\u103a\u103c\u1015\u102f\u101c\u102f\u1015\u103a\u1011\u102c\u1038\u1031\u101e\u102c \u1021\u1031\u103c\u1015\u102c\u1004\u103a\u1038\u1021\u101c\u1032 \u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1006\u1036\u102f\u1038\u101b\u103e\u1036\u102f\u1038\u101b\u1015\u102b\u1019\u100a\u103a\u104b"},fullscreen:{desc:"\u1005\u1000\u101b\u1004\u103a\u1021\u103c\u1015\u100a\u103a\u1037\u1019\u102f\u1012\u103a \u1016\u103d\u1004\u103a\u1037/\u1015\u102d\u1010\u103a"},media:{edit:"\u1019\u102e\u1012\u102e\u101a\u102c \u103c\u1019\u103e\u102f\u1015\u103a\u1011\u100a\u103a\u1037\u1019\u103e\u102f\u1000\u102d\u102f \u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a",desc:"\u1019\u102e\u1012\u102e\u101a\u102c \u103c\u1019\u103e\u102f\u1015\u103a\u1011\u100a\u103a\u1037/\u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a","delta_height":"","delta_width":""},fullpage:{desc:"\u1005\u102c\u101b\u103d\u1000\u103a\u1005\u102c\u1010\u1019\u103a\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"\u1005\u102c\u101c\u1036\u102f\u1031\u1015\u102b\u1004\u103a\u1038\u101e\u1010\u103a\u1015\u1036\u102f\u1005\u1005\u103a\u101b\u1014\u103a \u1016\u103d\u1004\u103a\u1037/\u1015\u102d\u1010\u103a",menu:"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1015\u102b\u1004\u103a\u1038\u101e\u1010\u103a\u1015\u1036\u102f \u1021\u103c\u1015\u1004\u103a\u1021\u1006\u1004\u103a\u1019\u103b\u102c\u1038","ignore_word":"\u1012\u102e\u1005\u1000\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u101c\u103e\u1005\u103a\u101c\u103b\u1030\u101b\u103e\u102f","ignore_words":"\u1021\u102c\u1038\u101c\u1036\u102f\u1038 \u101c\u103e\u1005\u103a\u101c\u103b\u1030\u101b\u103e\u102f",langs:"\u1018\u102c\u101e\u102c\u1005\u1000\u102c\u1038\u1019\u103b\u102c\u1038",wait:"\u1031\u1000\u103b\u1038\u1007\u1030\u1038\u103c\u1015\u102f\u104d \u1031\u1005\u102c\u1004\u103a\u1037\u1015\u102b...",sug:"\u1021\u103c\u1000\u1036\u103c\u1015\u102f\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038","no_sug":"\u1021\u103c\u1000\u1036\u103c\u1015\u102f\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038 \u1019\u101b\u103e\u102d\u1015\u102b","no_mpell":"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1015\u102b\u1004\u103a\u1038 \u101e\u1010\u103a\u1015\u1036\u102f \u1021\u1019\u103e\u102c\u1038\u1019\u1031\u1010\u103d\u1037\u1015\u102b","learn_word":"Learn word"},pagebreak:{desc:"\u1005\u102c\u1019\u103b\u1000\u103a\u1014\u103e\u102c\u1001\u103d\u1032 \u1011\u100a\u103a\u1037\u1015\u102b\u104b"},advlist:{types:"\u1021\u1019\u103b\u102d\u102f\u1038\u1021\u1005\u102c\u1038\u1019\u103b\u102c\u1038",def:"\u1019\u1030\u101c","lower_alpha":"Alpha \u1021\u1031\u101e\u1038","lower_greek":"\u1002\u101b\u102d \u1021\u1031\u101e\u1038","lower_roman":"\u101b\u102d\u102f\u1019\u1014\u103a \u1021\u1031\u101e\u1038","upper_alpha":"Alpha \u1021\u103c\u1000\u102e\u1038","upper_roman":"\u101b\u102d\u102f\u1019\u1014\u103a \u1021\u103c\u1000\u102e\u1038",circle:"\u1005\u1000\u103a\u101d\u1014\u103a\u1038",disc:"\u1021\u101d\u102d\u102f\u1004\u103a\u1038\u103c\u1015\u102c\u1038",square:"\u1031\u101c\u1038\u1031\u1011\u102c\u1004\u103a\u1037"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nb.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nb.js
new file mode 100644
index 000000000..38e5a71ce
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({nb:{common:{"more_colors":"Flere farger","invalid_data":"Feil: Ugyldige verdier er skrevet inn, disse er merket med r\u00f8dt.","popup_blocked":"Beklager, det er registrert at du har en popup-sperre aktivert i nettleseren. Du m\u00e5 oppheve popup-sperren for nettstedet for \u00e5 f\u00e5 tilgang til dette verkt\u00f8yet","clipboard_no_support":"For tiden ikke st\u00f8ttet av din nettleser, benytt tastatursnarveier i stedet.","clipboard_msg":"Klipp ut / Kopier /Lim inn fungerer ikke i Mozilla og Firefox. Vil du vite mer om dette?","not_set":"--ikke satt--","class_name":"Klasse",browse:"Bla gjennom",close:"Lukk",cancel:"Avbryt",update:"Oppdater",insert:"Sett inn",apply:"Legg til","edit_confirm":"Vil du benytte WYSIWYG-editoren for dette tekstfeltet?","invalid_data_number":"{#field} m\u00e5 v\u00e6re et nummer","invalid_data_min":"{#field} m\u00e5 v\u00e6re en nummer st\u00f8rre en {#min}","invalid_data_size":"{#field} m\u00e5 v\u00e6re et nummer eller prosent",value:"(verdi)"},contextmenu:{full:"Full",right:"H\u00f8yre",center:"Midtstill",left:"Venstre",align:"Justering"},insertdatetime:{"day_short":"s\u00f8n,man,tir,ons,tor,fre,l\u00f8r,s\u00f8n","day_long":"s\u00f8ndag,mandag,tirsdag,onsdag,torsdag,fredag,l\u00f8rdag,s\u00f8ndag","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,oct,nov,des","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","inserttime_desc":"Sett inn tidspunkt","insertdate_desc":"Sett inn dato","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Skriv u"},preview:{"preview_desc":"Forh\u00e5ndsvisning"},directionality:{"rtl_desc":"Retning h\u00f8yre mot venstre","ltr_desc":"Retning venstre mot h\u00f8yre"},layer:{content:"Nytt lag...","absolute_desc":"Sl\u00e5 p\u00e5/av absolutt plassering","backward_desc":"Flytt bakover","forward_desc":"Flytt framover","insertlayer_desc":"Sett inn nytt lag"},save:{"save_desc":"Lagre","cancel_desc":"Kanseller alle endringer"},nonbreaking:{"nonbreaking_desc":"Sett inn hardt mellomrom"},iespell:{download:"ieSpell ikke funnet. \u00d8nsker du \u00e5 installere ieSpell n\u00e5?","iespell_desc":"Kj\u00f8rer rettskrivningskontroll"},advhr:{"advhr_desc":"Horisontal linje","delta_height":"","delta_width":""},emotions:{"delta_height":"","emotions_desc":"Hum\u00f8rfjes","delta_width":""},searchreplace:{"replace_desc":"S\u00f8k/Erstatt","search_desc":"S\u00f8k","delta_width":"","delta_height":""},advimage:{"image_desc":"Sett inn / endre bilde","delta_width":"","delta_height":""},advlink:{"link_desc":"Sett inn / endre lenke","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Sett inn / endre Egenskaper","ins_desc":"Innsetting","del_desc":"Sletting","acronym_desc":"Akronym","abbr_desc":"Forkortelse","cite_desc":"Sitat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Rediger CSS-stil","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\'Lim inn\' er n\u00e5 i \'ren tekst\'-modus. Klikk en gang til for \u00e5 g\u00e5 tilbake til normal modus.","plaintext_mode_sticky":"\'Lim inn\' er n\u00e5 i \'ren tekst\'-modus. Klikk en gang til for \u00e5 g\u00e5 tilbake til normal modus. Etter at du har limt inn noe vil du bli tatt tilbake til normal modus.","selectall_desc":"Merk alt","paste_word_desc":"Lim inn fra Word","paste_text_desc":"Lim inn som ren tekst"},"paste_dlg":{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vinduet.","text_linebreaks":"Behold tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vinduet."},table:{cell:"Celle",col:"Kolonne",row:"Rad",del:"Slett tabell","copy_row_desc":"Kopier rad","cut_row_desc":"Fjern rad","paste_row_after_desc":"Lim inn rad etter","paste_row_before_desc":"Lim inn rad foran","props_desc":"Tabellegenskaper","cell_desc":"Celleegenskaper","row_desc":"Radegenskaper","merge_cells_desc":"Sl\u00e5 sammen celler","split_cells_desc":"Del celler","delete_col_desc":"Fjern kolonne","col_after_desc":"Sett inn kolonne etter","col_before_desc":"Sett inn kolonne foran","delete_row_desc":"Fjern rad","row_after_desc":"Sett inn rad etter","row_before_desc":"Sett inn rad foran",desc:"Sett inn ny tabell","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Om du gjenoppretter lagret innhold vil du miste alt innhold som n\u00e5 er i tekstbehandleren.\n\nEr du sikker p\u00e5 at du \u00f8nsker \u00e5 gjenopprette lagret innhold?","restore_content":"Gjenopprett autolagret innhold.","unload_msg":"Endringene du gjorde g\u00e5r tapt dersom du velger \u00e5 forlate denne siden!"},fullscreen:{desc:"Skift til/fra fullskjermmodus"},media:{edit:"Endre inkludert objekt",desc:"Sett inn / rediger inkludert objekt","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentegenskaper","delta_width":"","delta_height":""},template:{desc:"Sett inn forh\u00e5ndsdefinert malinnhold"},visualchars:{desc:"Visuelle kontrolltegn p\u00e5/av"},spellchecker:{desc:"Stavekontroll p\u00e5/av",menu:"Vis meny","ignore_word":"Ignorer ord","ignore_words":"Ignorer alt",langs:"Spr\u00e5k",wait:"Vennligst vent...",sug:"Forslag","no_sug":"Ingen forslag","no_mpell":"Ingen stavefeil funnet","learn_word":"L\u00e6r ord"},pagebreak:{desc:"Sett inn sideskift"},advlist:{types:"Typer",def:"Standard","lower_alpha":"Liten alfa","lower_greek":"Liten gresk","lower_roman":"Liten romersk","upper_alpha":"Stor alfa","upper_roman":"Stor romersk",circle:"Sirkel",disc:"Disk",square:"Firkant"},colors:{"333300":"M\u00f8rk oliven","993300":"Brent oransje","000000":"Sort","003300":"M\u00f8rk gr\u00f8nn","003366":"M\u00f8rk asurbl\u00e5","000080":"Marinebl\u00e5","333399":"Indigo","333333":"Veldig m\u00f8rk gr\u00e5","800000":"R\u00f8dbrun",FF6600:"Oransje","808000":"Oliven","008000":"Gr\u00f8nn","008080":"Bl\u00e5gr\u00f8nn","0000FF":"Bl\u00e5","666699":"Gr\u00e5bl\u00e5","808080":"Gr\u00e5",FF0000:"R\u00f8d",FF9900:"Rav","99CC00":"Gulgr\u00f8nn","339966":"Sj\u00f8gr\u00f8nn","33CCCC":"Turkis","3366FF":"Kongebl\u00e5","800080":"Lilla","999999":"Mellomgr\u00e5",FF00FF:"Magenta",FFCC00:"Gull",FFFF00:"Gul","00FF00":"Lime","00FFFF":"Turkis","00CCFF":"Himmelbl\u00e5","993366":"Brun",C0C0C0:"S\u00f8lv",FF99CC:"Rosa",FFCC99:"Fersken",FFFF99:"Lysegul",CCFFCC:"Blekgr\u00f8nn",CCFFFF:"Blekbl\u00e5","99CCFF":"Lys himmelbl\u00e5",CC99FF:"Plomme",FFFFFF:"Hvit"},aria:{"rich_text_area":"Rikt tekstfelt"},wordcount:{words:"Ord"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nl.js
new file mode 100644
index 000000000..a8cdad2e5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({nl:{common:{"more_colors":"Meer kleuren","invalid_data":"Fout: Er zijn ongeldige waardes ingevoerd, deze zijn rood gemarkeerd.","popup_blocked":"U zult uw popup-blocker tijdelijk moeten uitschakelen voor deze website om gebruik te kunnen maken van alle functies van deze teksteditor.","clipboard_no_support":"Kopi\u00ebren/knippen/plakken wordt niet ondersteund door uw browser, gebruik hiervoor de sneltoetsen.","clipboard_msg":"Kopi\u00ebren/knippen/plakken is niet beschikbaar in Mozilla en Firefox.\nWilt u meer informatie over deze beperking?","not_set":"- Standaard -","class_name":"Klasse",browse:"Bladeren",close:"Sluiten",cancel:"Annuleren",update:"Bijwerken",insert:"Invoegen",apply:"Toepassen","edit_confirm":"Weet u zeker dat u tekst in WYSIWYG mode wilt bewerken in dit tekstveld?","invalid_data_number":"{#field} moet een nummer zijn","invalid_data_min":"{#field} moet groter zijn dan {#min}","invalid_data_size":"{#field} moet een nummer of percentage zijn",value:"(waarde aanpassen)"},contextmenu:{full:"Uitvullen",right:"Rechts",center:"Centreren",left:"Links",align:"Uitlijning"},insertdatetime:{"day_short":"zo,ma,di,wo,do,vr,za,zo","day_long":"Zondag,Maandag,Dinsdag,Woensdag,Donderdag,Vrijdag,Zaterdag,Zondag","months_short":"Jan,Feb,Mar,Apr,Mei,Jun,Jul,Aug,Sep,Okt,Nov,Dec","months_long":"Januari,Februari,Maart,April,Mei,Juni,Juli,Augustus,September,Oktober,November,December","inserttime_desc":"Tijd invoegen","insertdate_desc":"Datum invoegen","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Afdrukken"},preview:{"preview_desc":"Voorbeeld"},directionality:{"rtl_desc":"Van rechts naar links","ltr_desc":"Van links naar rechts"},layer:{content:"Nieuwe laag...","absolute_desc":"Absoluut positioneren inschakelen","backward_desc":"Vorige laag","forward_desc":"Volgende laag","insertlayer_desc":"Nieuwe laag invoegen"},save:{"save_desc":"Opslaan","cancel_desc":"Alle wijzigingen annuleren"},nonbreaking:{"nonbreaking_desc":"Harde spatie invoegen"},iespell:{download:"ieSpell niet gevonden. Wilt u deze nu installeren?","iespell_desc":"Spellingcontrole"},advhr:{"advhr_desc":"Scheidingslijn","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoties","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Zoeken/Vervangen","search_desc":"Zoeken","delta_width":"","delta_height":""},advimage:{"image_desc":"Afbeelding invoegen/bewerken","delta_width":"","delta_height":""},advlink:{"link_desc":"Link invoegen/bewerken","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Attributen invoegen/bewerken","ins_desc":"Ingevoegd","del_desc":"Verwijderd","acronym_desc":"Synoniem","abbr_desc":"Afkorting","cite_desc":"Citaat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS Stijl bewerken","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Plakken is nu in plattetekstmodus. Klik nog een keer om terug te gaan naar normaal plakken.","plaintext_mode_sticky":"Plakken is nu in plattetekstmodus. Klik nog een keer om terug te gaan naar normaal plakken. Nadat u iets plakt, keert u terug naar normaal plakken.","selectall_desc":"Alles selecteren","paste_word_desc":"Vanuit Word plakken","paste_text_desc":"Als platte tekst plakken"},"paste_dlg":{"word_title":"Gebruik Ctrl+V om tekst in het venster te plakken.","text_linebreaks":"Regelafbreking bewaren","text_title":"Gebruik Ctrl+V om tekst in het venster te plakken."},table:{cell:"Cel",col:"Kolom",row:"Rij",del:"Tabel verwijderen","copy_row_desc":"Rij kopi\u00ebren","cut_row_desc":"Rij knippen","paste_row_after_desc":"Rij onder plakken","paste_row_before_desc":"Rij boven plakken","props_desc":"Tabeleigenschappen","cell_desc":"Cel-eigenschappen","row_desc":"Rij-eigenschappen","merge_cells_desc":"Cellen samenvoegen","split_cells_desc":"Cellen splitsen","delete_col_desc":"Kolom verwijderen","col_after_desc":"Kolom rechts invoegen","col_before_desc":"Kolom links invoegen","delete_row_desc":"Rij verwijderen","row_after_desc":"Rij onder invoegen","row_before_desc":"Rij boven invoegen",desc:"Tabel invoegen/bewerken","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Als u de opgeslagen inhoud laadt, verliest u de inhoud die zich momenteel in de editor bevindt.\n\nWeet u zeker dat u de opgeslagen inhoud wilt laden?","restore_content":"Automatisch opgeslagen inhoud laden.","unload_msg":"De wijzigingen zullen verloren gaan als u nu deze pagina verlaat."},fullscreen:{desc:"Volledig scherm"},media:{edit:"Media bewerken",desc:"Media invoegen/bewerken","delta_height":"","delta_width":""},fullpage:{desc:"Documenteigenschappen","delta_width":"","delta_height":""},template:{desc:"Voorgedefinieerd sjabloon invoegen"},visualchars:{desc:"Zichtbare symbolen"},spellchecker:{desc:"Spellingcontrole",menu:"Instellingen spellingcontrole","ignore_word":"Woord negeren","ignore_words":"Alles negeren",langs:"Talen",wait:"Een ogenblik geduld\u2026",sug:"Suggesties","no_sug":"Geen suggesties","no_mpell":"Geen spelfouten gevonden.","learn_word":"Woord toevoegen aan spellingscontrole"},pagebreak:{desc:"Pagina-einde invoegen"},advlist:{types:"Types",def:"Standaard","lower_alpha":"Alfa (klein)","lower_greek":"Griekse letters (klein)","lower_roman":"Romeinse letters (klein)","upper_alpha":"Alfa (groot)","upper_roman":"Romeinse letters (groot)",circle:"Cirkel",disc:"Schijf",square:"Vierkant"},colors:{"333300":"Donkerolijf","993300":"Gebrand oranje","000000":"Zwart","003300":"Donkergroen","003366":"Donkerazuur","000080":"Marineblauw","333399":"Indigo","333333":"Heel donkergrijs","800000":"Kastanjebruin",FF6600:"Oranje","808000":"Olijf","008000":"Groen","008080":"Teal","0000FF":"Blauw","666699":"Grijsblauw","808080":"Grijs",FF0000:"Rood",FF9900:"Amber","99CC00":"Geelgroen","339966":"Zeegroen","33CCCC":"Turkoois","3366FF":"Koningsblauw","800080":"Paars","999999":"Middengrijs",FF00FF:"Magenta",FFCC00:"Goud",FFFF00:"Geel","00FF00":"Limoen","00FFFF":"Aqua","00CCFF":"Hemelsblauw","993366":"Bruin",C0C0C0:"Zilver",FF99CC:"Roze",FFCC99:"Perzik",FFFF99:"Lichtgeel",CCFFCC:"Bleekgroen",CCFFFF:"Bleekcyaan","99CCFF":"Licht hemelsblauw",CC99FF:"Pruim",FFFFFF:"Wit"},aria:{"rich_text_area":"Tekst met opmaak"},wordcount:{words:"Aantal woorden:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nn.js
new file mode 100644
index 000000000..2924d251f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/nn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({nn:{common:{"more_colors":"Fleire fargar","invalid_data":"Feil: Ugyldige verdiar er skrivne inn, desse er merka med raudt","popup_blocked":"Orsak, det er registrert at du har popup-sperre aktivert i nettlesaren. Du m\u00e5 oppheve popup-sperra for nettstaden for \u00e5 f\u00e5 tilgang til dette verktyet","clipboard_no_support":"For tida ikkje st\u00f8tta av nettlesaren din, bruk tastatursnarveger i staden.","clipboard_msg":"Klipp ut / Kopier /Lim inn fungerer ikkje i Mozilla og Firefox. Vil du vite meir om dette?","not_set":"--ikkje sett--","class_name":"Klasse",browse:"Bla gjennom",close:"Stopp",cancel:"Avbryt",update:"Oppdater",insert:"Set inn",apply:"Legg til","edit_confirm":"Vil du bruke WYSIWYG-editoren for dette tekstfeltet?","invalid_data_number":"{#field} m\u00e5 vere eit nummer","invalid_data_min":"{#field} m\u00e5 vere eit nummer h\u00f8gare enn {#min}","invalid_data_size":"{#field} m\u00e5 vere eit nummer eller ein prosent",value:"(verdi)"},contextmenu:{full:"Full",right:"H\u00f8gre",center:"Midtstill",left:"Venstre",align:"Justering"},insertdatetime:{"day_short":"sun,man,tir,ons,tor,fre,lau,sun","day_long":"sundag,mandag,tirsdag,onsdag,torsdag,fredag,laurdag,sundag","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,oct,nov,des","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","inserttime_desc":"Lim inn tid","insertdate_desc":"Lim inn dato","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Skriv u"},preview:{"preview_desc":"F\u00f8rehandsvisni"},directionality:{"rtl_desc":"Retning h\u00f8gre mot venstre","ltr_desc":"Retning venstre mot h\u00f8gre"},layer:{content:"Nytt lag...","absolute_desc":"Sl\u00e5 p\u00e5/av absolutt plassering","backward_desc":"Flytt bakover","forward_desc":"Flytt framover","insertlayer_desc":"Set inn nytt lag"},save:{"save_desc":"Lagre","cancel_desc":"Kanseller alle endringar"},nonbreaking:{"nonbreaking_desc":"Set inn hardt mellomrom"},iespell:{download:"ieSpell ikkje funnen. \u00d8nskjer du \u00e5 installere ieSpell no?","iespell_desc":"K\u00f8yrer kontroll av rettskriving"},advhr:{"advhr_desc":"Horisontal linje","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hum\u00f8rfjes","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f8k/Erstatt","search_desc":"S\u00f8k","delta_width":"","delta_height":""},advimage:{"image_desc":"Set inn / endre bilete","delta_width":"","delta_height":""},advlink:{"link_desc":"Set inn / endre lenkje","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Set inn / Endre eigenskapar","ins_desc":"Innsetjing","del_desc":"Sletting","acronym_desc":"Akronym","abbr_desc":"Forkorting","cite_desc":"Sitat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Rediger CSS-stil","delta_height":"","delta_width":""},paste:{"selectall_desc":"Marker al","paste_word_desc":"Lim inn fr\u00e5 Word","paste_text_desc":"Lim inn som vanleg tekst","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vindauget.","text_linebreaks":"Behald tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vindauget."},table:{cell:"Celle",col:"Kolonne",row:"Rad",del:"Slett tabell","copy_row_desc":"Kopier rad","cut_row_desc":"Fjern rad","paste_row_after_desc":"Lim inn rad etter","paste_row_before_desc":"Lim inn rad framfor","props_desc":"Tabelleigenskapar","cell_desc":"Celleegenskapar","row_desc":"Radeigenskapar","merge_cells_desc":"Sl\u00e5 saman celler","split_cells_desc":"Del celler","delete_col_desc":"Fjern kolonne","col_after_desc":"Set inn kolonne etter","col_before_desc":"Set inn kolonne framfor","delete_row_desc":"Fjern rad","row_after_desc":"Set inn rad etter","row_before_desc":"Set inn rad framfor",desc:"Set inn ein ny tabell","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Om du gjenopprettar lagra innhald vil du miste alt innhald som finst i tekstbehandler no.\n\nEr du sikker p\u00e5 at du ynskjer \u00e5 gjenopprette lagra innhald?","restore_content":"Gjenopprett autolagra innhald","unload_msg":"Endringane du gjorde g\u00e5r tapt om du forl\u00e8t denne sida!"},fullscreen:{desc:"Skift til/fr\u00e5 fullskjermmodus"},media:{edit:"Endre innsett objekt",desc:"Set inn / rediger inkludert objekt","delta_height":"","delta_width":""},fullpage:{desc:"Dokumenteigenskapar","delta_width":"","delta_height":""},template:{desc:"Set inn f\u00f8rehandsdefinert malinnhald"},visualchars:{desc:"Visuelle konktrollteikn p\u00e5/av"},spellchecker:{desc:"Stavekontroll p\u00e5/av",menu:"Vis meny","ignore_word":"Ignorer ord","ignore_words":"Ignorer alt",langs:"Spr\u00e5k",wait:"Ver venleg og vent...",sug:"Framlegg","no_sug":"Inga framlegg","no_mpell":"Inga stavefeil funne.","learn_word":"L\u00e6r ord"},pagebreak:{desc:"Set inn sideskift"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Omr\u00e5de for rik tekst"},wordcount:{words:"Ord:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/no.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/no.js
new file mode 100644
index 000000000..4a76e5c50
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/no.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({no:{common:{"more_colors":"Flere farger","invalid_data":"Feil: Ugyldig verdi er skrevet inn, disse er merket med r\u00f8dt","popup_blocked":"Beklager, men vi har registrert at din popup-sperrer har blokkert et vindu i nettleseren. Du m\u00e5 oppheve popup-sperren for at nettstedet skal f\u00e5 tilgang til dette verkt\u00f8yet","clipboard_no_support":"For tiden ikke st\u00f8ttet av din nettleser, bruk tastatursnarveier i stedet.","clipboard_msg":"Klipp ut / Kopier /Lim inn fungerer ikke i Mozilla og Firefox. Vil du vite mer om dette?","not_set":"--Ikke satt--","class_name":"Klasse",browse:"Bla gjennom",close:"Lukk",cancel:"Avbryt",update:"Oppdater",insert:"Sett inn",apply:"Bruk","edit_confirm":"Vil du bruke WYSIWYG-editoren for dette tekstfeltet?","invalid_data_number":"{#field} m\u00e5 v\u00e6re nummer","invalid_data_min":"{#field} m\u00e5 v\u00e6re et nummber st\u00f8rre en {#min}","invalid_data_size":"{#field} m\u00e5 v\u00e6re et nummer eller prosent av",value:"(verdi)"},contextmenu:{full:"Full",right:"H\u00f8yre",center:"Midtstilt",left:"Venstre",align:"Justering"},insertdatetime:{"day_short":"S\u00f8n,Man,Tir,Ons,Tor,Fre,L\u00f8r,S\u00f8n","day_long":"s\u00f8ndag,mandag,tirsdag,onsdag,torsdag,fredag,l\u00f8rdag,s\u00f8ndag","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","inserttime_desc":"Sett inn tid","insertdate_desc":"Sett inn dato","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Skriv ut"},preview:{"preview_desc":"Forh\u00e5ndsvisning"},directionality:{"rtl_desc":"Retning h\u00f8yre mot venstre","ltr_desc":"Retning venstre mot h\u00f8yre"},layer:{content:"Nytt lag ...","absolute_desc":"Sl\u00e5 p\u00e5/av absolutt plassering","backward_desc":"Flytt bakover","forward_desc":"Flytt fremover","insertlayer_desc":"Sett inn nytt lag"},save:{"save_desc":"Lagre","cancel_desc":"Kanseller alle endringer"},nonbreaking:{"nonbreaking_desc":"Sett inn karakter for hardt mellomrom"},iespell:{download:"ieSpell ikke funnet. \u00d8nsker du \u00e5 installere ieSpell?","iespell_desc":"Stavekontroll"},advhr:{"advhr_desc":"Horisontal linje","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Hum\u00f8rfjes","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f8k/Erstatt","search_desc":"S\u00f8k","delta_width":"","delta_height":""},advimage:{"image_desc":"Sett inn/editer bilde","delta_width":"","delta_height":""},advlink:{"link_desc":"Sett inn/editer lenke","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Sett inn/Editer egenskaper","ins_desc":"Innsetting","del_desc":"Sletting","acronym_desc":"Akronym","abbr_desc":"Forkortelse","cite_desc":"Sitat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Rediger CSS-stil","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Lim inn er n\u00e5 i vanlig tekst modus. Klikk igjen for \u00e5 bytte til vanlig innlimings modus.","plaintext_mode_sticky":"Lim inn er n\u00e5 i vanlig tekst modus. Klikk igjen for \u00e5 bytte til vanlig innlimings modus. Etter at du limer inn noe vil du g\u00e5 tilbake til ordin\u00e6r innliming.","selectall_desc":"Merk alt","paste_word_desc":"Lim inn fra Word","paste_text_desc":"Lim inn som ren tekst"},"paste_dlg":{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn teksten i dette vinduet.","text_linebreaks":"Behold tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn teksten i dette vinduet."},table:{cell:"Celle",col:"Kolonne",row:"Rad",del:"Slett tabell","copy_row_desc":"Kopier rad","cut_row_desc":"Slett rad","paste_row_after_desc":"Lime inn rad etter","paste_row_before_desc":"Lime inn rad foran","props_desc":"Tabell egenskaper","cell_desc":"Celle egenskaper","row_desc":"Rad egenskaper","merge_cells_desc":"Sl\u00e5 sammen celler","split_cells_desc":"Splitte sammensl\u00e5tte celler","delete_col_desc":"Slett kolonne","col_after_desc":"Sett inn kolonne etter","col_before_desc":"Sett inn kolonne forand","delete_row_desc":"Slett rad","row_after_desc":"Sett inn rad etter","row_before_desc":"Sett inn rad foran",desc:"Setter inn ny tabell","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Hvis du gjenoppretter tidligere lagret innhold s\u00e5 vil du miste alt n\u00e5v\u00e6rende innhold i editoren.\n\nEr du sikker du vil gjenopprette tidligere lagret innhold?.","restore_content":"Gjenopprette autolagret innhold.","unload_msg":"Utf\u00f8rte endringer g\u00e5r tapt hvis du navigerer vekk fra denne siden!"},fullscreen:{desc:"Sl\u00e5 fullskjermmodus av/p\u00e5"},media:{edit:"Editer innebygget objekt",desc:"Sett inn/editer innebygget objekt","delta_height":"","delta_width":""},fullpage:{desc:"Dokument egenskaper","delta_width":"","delta_height":""},template:{desc:"Sett inn forh\u00e5ndsdefinert malinnhold"},visualchars:{desc:"Visuelle konktrolltegn p\u00e5/av"},spellchecker:{desc:"Stavekontroll p\u00e5/av",menu:"Oppsett stavekontroll","ignore_word":"Ignorer ord","ignore_words":"Ignorer alt",langs:"Spr\u00e5k",wait:"Vennligst vent ...",sug:"Forslag","no_sug":"Ingen forslag","no_mpell":"Ingen stavefeil funnet.","learn_word":"L\u00e6r ordet"},pagebreak:{desc:"Sett inn sideskift"},advlist:{types:"Types",def:"Standard","lower_alpha":"Sm\u00e5 alfanumerisk","lower_greek":"Sm\u00e5 gresk","lower_roman":"Sm\u00e5 roman","upper_alpha":"Store alfanumerisk","upper_roman":"Store roman",circle:"Sirkel",disc:"Plate",square:"Firkant"},colors:{"333300":"M\u00f8rk olivengr\u00f8nn","993300":"Brent oransje","000000":"Svart","003300":"M\u00f8rkegr\u00f8nn","003366":"M\u00f8rk asurbl\u00e5","000080":"Marinebl\u00e5","333399":"Indigobl\u00e5","333333":"M\u00f8rk m\u00f8rkegr\u00e5","800000":"R\u00f8dbrun",FF6600:"Oransje","808000":"Olivengr\u00f8nn","008000":"Gr\u00f8nn","008080":"M\u00f8rk gr\u00f8nnbl\u00e5","0000FF":"Bl\u00e5","666699":"Gr\u00e5bl\u00e5","808080":"Gr\u00e5",FF0000:"R\u00f8d",FF9900:"Amber","99CC00":"Gulgr\u00f8nn","339966":"Havgr\u00f8nn","33CCCC":"Turkis","3366FF":"Kongebl\u00e5","800080":"Purpur","999999":"Medium gr\u00e5",FF00FF:"Magentar\u00f8d",FFCC00:"Gull",FFFF00:"Gul","00FF00":"Limegr\u00f8nn","00FFFF":"Cyanbl\u00e5","00CCFF":"Himmelbl\u00e5","993366":"Brun",C0C0C0:"S\u00f8lv",FF99CC:"Rosa",FFCC99:"Fersken",FFFF99:"Lysgul",CCFFCC:"Lysegr\u00f8nn",CCFFFF:"Lys cyanbl\u00e5","99CCFF":"Lys himmelbl\u00e5",CC99FF:"Plomme",FFFFFF:"Hvit"},aria:{"rich_text_area":"Rikt tekstfelt"},wordcount:{words:"Ord:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/pl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/pl.js
new file mode 100644
index 000000000..475b45da1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/pl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({pl:{common:{"more_colors":"Wi\u0119cej kolor\u00f3w","invalid_data":"B\u0142\u0105d: Zosta\u0142y wprowadzone b\u0142\u0119dne dane, s\u0105 zaznaczone na czerwono.","popup_blocked":"Zauwa\u017cyli\u015bmy, \u017ce opcja blokowania wyskakuj\u0105cych okienek wy\u0142\u0105czy\u0142a okno, kt\u00f3re dostarcza funkcjonalno\u015b\u0107 aplikacji. Aby w pe\u0142ni wykorzysta\u0107 to narz\u0119dzie musisz wy\u0142\u0105czy\u0107 blokowanie wyskakuj\u0105cych okienek na tej stronie.","clipboard_no_support":"Aktualnie nie jest obs\u0142ugiwany przez Twoj\u0105 przegl\u0105dark\u0119, u\u017cyj skr\u00f3t\u00f3w klawiaturowych w zamian.","clipboard_msg":"Akcje Kopiuj/Wytnij/Wklej nie s\u0105 dost\u0119pne w Mozilli i Firefox.\nCzy chcesz wi\u0119cej informacji o tym problemie?","not_set":"-- Brak --","class_name":"Klasa",browse:"Przegl\u0105daj",close:"Zamknij",cancel:"Anuluj",update:"Aktualizuj",insert:"Wstaw",apply:"Zastosuj","edit_confirm":"Czy chcesz u\u017cy\u0107 trybu WYSIWYG dla tego pola formularza?","invalid_data_number":"{#field} musi by\u0107 liczb\u0105","invalid_data_min":"{#field} musi by\u0107 liczb\u0105 wi\u0119ksz\u0105 od {#min}","invalid_data_size":"{#field} musi by\u0107 liczb\u0105 lub warto\u015bci\u0105 procentow\u0105",value:"(warto\u015b\u0107)"},contextmenu:{full:"Wyjustuj",right:"Do prawej",center:"Do \u015brodka",left:"Do lewej",align:"Wyr\u00f3wnanie"},insertdatetime:{"day_short":"N,Pn,Wt,\u015ar,Cz,Pt,So,N","day_long":"Niedziela,Poniedzia\u0142ek,Wtorek,\u015aroda,Czwartek,Pi\u0105tek,Sobota,Niedziela","months_short":"Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,Pa\u017a,Lis,Gru","months_long":"Stycze\u0144,Luty,Marzec,Kwiecie\u0144,Maj,Czerwiec,Lipiec,Sierpie\u0144,Wrzesie\u0144,Pa\u017adziernik,Listopad,Grudzie\u0144","inserttime_desc":"Wstaw czas","insertdate_desc":"Wstaw dat\u0119","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Drukuj"},preview:{"preview_desc":"Podgl\u0105d"},directionality:{"rtl_desc":"Kierunek od prawej do lewej","ltr_desc":"Kierunek od lewej do prawej"},layer:{content:"Nowa warstwa...","absolute_desc":"Prze\u0142\u0105cz pozycjonowanie absolutne","backward_desc":"Przesu\u0144 pod sp\u00f3d","forward_desc":"Przesu\u0144 na wierzch","insertlayer_desc":"Wstaw now\u0105 warstw\u0119"},save:{"save_desc":"Zachowaj","cancel_desc":"Anuluj wszystkie zmiany"},nonbreaking:{"nonbreaking_desc":"Wstaw tward\u0105 spacj\u0119"},iespell:{download:"ieSpell nie wykryte. Czy przeprowadzi\u0107 instalacj\u0119 tego komponentu?","iespell_desc":"Sprawd\u017a pisowni\u0119"},advhr:{"advhr_desc":"Pozioma linia","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotikony","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Znajd\u017a/zamie\u0144","search_desc":"Znajd\u017a","delta_width":"","delta_height":""},advimage:{"image_desc":"Wstaw/edytuj obraz","delta_width":"","delta_height":""},advlink:{"link_desc":"Wstaw/edytuj link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Wstaw / Edytuj atrybuty","ins_desc":"Wstawienie","del_desc":"Usuni\u0119cie","acronym_desc":"Akronim","abbr_desc":"Skr\u00f3t","cite_desc":"Cytat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edytuj Style CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Wklejanie jest teraz dost\u0119pne w trybie tekstowym. Kliknij ponownie, aby prze\u0142\u0105czy\u0107 si\u0119 z powrotem do trybu wklejania sformatowanego tekstu.","plaintext_mode_sticky":"Wklejanie jest teraz dost\u0119pne w trybie tekstowym. Kliknij ponownie, aby prze\u0142\u0105czy\u0107 si\u0119 z powrotem do trybu wklejania sformatowanego tekstu. Po wklejeniu tekstu nast\u0105pi powr\u00f3t do trybu wklejania sformatowanego tekstu.","selectall_desc":"Zaznacz wszystko","paste_word_desc":"Wklej z Worda","paste_text_desc":"Wklej jako zwyk\u0142y tekst"},"paste_dlg":{"word_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna.","text_linebreaks":"Zachowaj ko\u0144ce linii.","text_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna."},table:{cell:"Kom\u00f3rka",col:"Kolumna",row:"Wiersz",del:"Usu\u0144 tabel\u0119","copy_row_desc":"Kopiuj wiersz...","cut_row_desc":"Wytnij wiersz...","paste_row_after_desc":"Wklej wiersz po...","paste_row_before_desc":"Wklej wiersz przed...","props_desc":"W\u0142a\u015bciwo\u015bci tabeli","cell_desc":"W\u0142a\u015bciwo\u015bci kom\u00f3rki","row_desc":"W\u0142a\u015bciwo\u015bci wiersza","merge_cells_desc":"Po\u0142\u0105cz kom\u00f3rki","split_cells_desc":"Podziel po\u0142\u0105czone kom\u00f3rki","delete_col_desc":"Usu\u0144 kolumn\u0119","col_after_desc":"Wstaw kolumn\u0119 po...","col_before_desc":"Wstaw kolumn\u0119 przed...","delete_row_desc":"Usu\u0144 wiersz","row_after_desc":"Wstaw nowy wiersz po...","row_before_desc":"Wstaw nowy wiersz przed...",desc:"Wstaw now\u0105 tabel\u0119","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Je\u015bli przywr\u00f3cisz zapisan\u0105 tre\u015b\u0107, stracisz ca\u0142\u0105 tre\u015b\u0107, kt\u00f3ra teraz si\u0119 znajduje w edytorze.\n\nJeste\u015b pewien, \u017ce chcesz przywr\u00f3ci\u0107 zapisan\u0105 tre\u015b\u0107?","restore_content":"Przywr\u00f3\u0107 tre\u015b\u0107 zapisan\u0105 automatycznie.","unload_msg":"Zmiany, kt\u00f3rych dokona\u0142e\u015b zostan\u0105 utracone je\u015bli opu\u015bcisz t\u0119 stron\u0119."},fullscreen:{desc:"Prze\u0142\u0105cz tryb pe\u0142noekranowy"},media:{"delta_height":"",edit:"Edytuj wbudowane media",desc:"Wstaw/edytuj wbudowane media","delta_width":""},fullpage:{desc:"W\u0142a\u015bciwo\u015bci dokumentu","delta_width":"","delta_height":""},template:{desc:"Wstaw tre\u015b\u0107 szablonu"},visualchars:{desc:"W\u0142\u0105cz/wy\u0142\u0105cz znaki kontrolne."},spellchecker:{desc:"Sprawdzanie pisowni",menu:"Ustawienia sprawdzania pisowni","ignore_word":"Ignoruj s\u0142owo","ignore_words":"Ignoruj wszystkie",langs:"J\u0119zyki",wait:"Prosz\u0119 czeka\u0107...",sug:"Sugestie","no_sug":"Brak sugestii","no_mpell":"Nie znaleziono b\u0142\u0119d\u00f3w.","learn_word":"Dowiedz si\u0119 s\u0142owa"},pagebreak:{desc:"Wstaw znak nowej strony."},advlist:{types:"Rodzaje",def:"Domy\u015blny","lower_alpha":"Ma\u0142e alfabetu","lower_greek":"Ma\u0142e greckie","lower_roman":"Ma\u0142e rzymskie","upper_alpha":"Du\u017ce alfabetu","upper_roman":"Du\u017ce rzymskie",circle:"Ko\u0142o",disc:"Elipsa",square:"Kwadrat"},colors:{"333300":"Ciemnooliwkowy","993300":"Ochra","000000":"Czarny","003300":"Ciemnozielony","003366":"Ciemnolazurowy","000080":"Granatowy","333399":"Indygo","333333":"Bardzo ciemnoszary","800000":"Rdzawy",FF6600:"Pomara\u0144czowy","808000":"Oliwkowy","008000":"Zielony","008080":"Morski","0000FF":"Niebieski","666699":"Siny","808080":"Szary",FF0000:"Czerwony",FF9900:"Bursztynowy","99CC00":"\u017b\u00f3\u0142tozielony","339966":"Akwamaryna","33CCCC":"Turkusowy","3366FF":"B\u0142\u0119kit kr\u00f3lewski","800080":"Purpurowy","999999":"\u015arednioszary",FF00FF:"Fuksja",FFCC00:"Z\u0142oty",FFFF00:"\u017b\u00f3\u0142ty","00FF00":"Limonkowy","00FFFF":"Cyjan","00CCFF":"B\u0142\u0119kitny","993366":"Br\u0105zowy",C0C0C0:"Srebrny",FF99CC:"R\u00f3\u017cowy",FFCC99:"Brzoskwiniowy",FFFF99:"Jasno\u017c\u00f3\u0142ty",CCFFCC:"Bladozielony",CCFFFF:"Bladoturkusowy","99CCFF":"Jasnob\u0142\u0119kitny",CC99FF:"\u015aliwkowy",FFFFFF:"Bia\u0142y"},aria:{"rich_text_area":"Pole tekstowe"},wordcount:{words:"S\u0142owa:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ps.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ps.js
new file mode 100644
index 000000000..fa24f83ca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ps.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ps:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/pt.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/pt.js
new file mode 100644
index 000000000..809f1c2d9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/pt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({pt:{common:{"more_colors":"Mais Cores","invalid_data":"Erro: Valores inv\u00e1lidos marcados em vermelho.","popup_blocked":"Detectamos que o seu bloqueador de popups bloqueou uma janela que \u00e9 essencial para a aplica\u00e7\u00e3o. Voc\u00ea precisa desativar o bloqueador de janelas de popups para utilizar esta ferramenta.","clipboard_no_support":"O seu browser n\u00e3o suporta esta fun\u00e7\u00e3o, use os atalhos do teclado.","clipboard_msg":"Copiar/recortar/colar n\u00e3o est\u00e1 dispon\u00edvel no Mozilla e Firefox. Deseja mais informa\u00e7\u00f5es sobre este problema?","not_set":"-- N/A --","class_name":"Classe",browse:"Procurar",close:"Fechar",cancel:"Cancelar",update:"Atualizar",insert:"Inserir",apply:"Aplicar","edit_confirm":"Deseja usar o modo de edi\u00e7\u00e3o avan\u00e7ado neste campo de texto?","invalid_data_number":"{#field} deve ser um n\u00famero","invalid_data_min":"{#field} deve ser um n\u00famero maior que {#min}","invalid_data_size":"{#field} deve ser um n\u00famero ou uma percentagem",value:"(valor)"},contextmenu:{full:"Justificado",right:"Direita",center:"Centro",left:"Esquerda",align:"Alinhamento"},insertdatetime:{"day_short":"Dom,Seg,Ter,Qua,Qui,Sex,Sab,Dom","day_long":"Domingo,Segunda-feira,Ter\u00e7a-feira,Quarta-feira,Quinta-feira,Sexta-feira,S\u00e1bado,Domingo","months_short":"Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez","months_long":"Janeiro,Fevereiro,Mar\u00e7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro","inserttime_desc":"Inserir hora","insertdate_desc":"Inserir data","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Imprimir"},preview:{"preview_desc":"Pr\u00e9-visualizar"},directionality:{"rtl_desc":"Da direita para esquerda","ltr_desc":"Da esquerda para direita"},layer:{content:"Nova camada...","absolute_desc":"Alternar o posicionamento absoluto","backward_desc":"Mover para tr\u00e1s","forward_desc":"Mover para frente","insertlayer_desc":"Inserir nova camada"},save:{"save_desc":"Salvar","cancel_desc":"Cancelar todas as altera\u00e7\u00f5es"},nonbreaking:{"nonbreaking_desc":"Inserir um espa\u00e7o \"sem quebra\""},iespell:{download:"Plugin de ortografia n\u00e3o-detectado. Deseja instalar agora?","iespell_desc":"Verificar ortografia"},advhr:{"advhr_desc":"Separador horizontal","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emoticons","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Localizar/substituir","search_desc":"Localizar","delta_width":"","delta_height":""},advimage:{"image_desc":"Inserir/editar imagem","delta_width":"","delta_height":""},advlink:{"delta_width":"50","link_desc":"Inserir/editar hyperlink","delta_height":""},xhtmlxtras:{"attribs_desc":"Inserir/Editar atributos","ins_desc":"Inserir","del_desc":"Apagar","acronym_desc":"Acr\u00f4nimo","abbr_desc":"Abrevia\u00e7\u00e3o","cite_desc":"Cita\u00e7\u00e3o","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Editar CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Comando colar est\u00e1 em modo texto simples. Clique novamente para voltar para o modo normal.","plaintext_mode_sticky":"Comando colar est\u00e1 em modo texto simples. Clique novamente para voltar para o modo normal. Depois de colar alguma coisa retornar\u00e1 para o modo normal.","selectall_desc":"Selecionar tudo","paste_word_desc":"Colar (copiado do WORD)","paste_text_desc":"Colar como texto simples"},"paste_dlg":{"word_title":"Use CTRL+V para colar o texto na janela.","text_linebreaks":"Manter quebras de linha","text_title":"Use CTRL+V para colar o texto na janela."},table:{cell:"C\u00e9lula",col:"Coluna",row:"Linha",del:"Apagar tabela","copy_row_desc":"Copiar linha","cut_row_desc":"Recortar linha","paste_row_after_desc":"Colar linha depois","paste_row_before_desc":"Colar linha antes","props_desc":"Propriedades da tabela","cell_desc":"Propriedades das c\u00e9lulas","row_desc":"Propriedades das linhas","merge_cells_desc":"Unir c\u00e9lulas","split_cells_desc":"Dividir c\u00e9lulas","delete_col_desc":"Remover coluna","col_after_desc":"Inserir coluna depois","col_before_desc":"Inserir coluna antes","delete_row_desc":"Apagar linha","row_after_desc":"Inserir linha depois","row_before_desc":"Inserir linha antes",desc:"Inserir nova tabela","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Se restaurar o conte\u00fado, voc\u00ea ir\u00e1 perder tudo que est\u00e1 atualmente no editor.\n\nTem certeza que quer restaurar o conte\u00fado salvo?","restore_content":"Restaura conte\u00fado salvo automaticamente.","unload_msg":"As mudan\u00e7as efetuadas ser\u00e3o perdidas se sair desta p\u00e1gina."},fullscreen:{desc:"Tela Inteira"},media:{edit:"Editar m\u00eddia embutida",desc:"Inserir/Editar m\u00eddia embutida","delta_height":"","delta_width":""},fullpage:{desc:"Propriedades do Documento","delta_width":"","delta_height":""},template:{desc:"Inserir template"},visualchars:{desc:"Caracteres de controle visual ligado/desligado"},spellchecker:{desc:"Alternar verifica\u00e7\u00e3o ortogr\u00e1fica",menu:"Configura\u00e7\u00f5es de ortografia","ignore_word":"Ignorar palavra","ignore_words":"Ignorar tudo",langs:"Linguagens",wait:"Aguarde...",sug:"Sugest\u00f5es","no_sug":"Sem sugest\u00f5es","no_mpell":"N\u00e3o foram detectados erros de ortografia.","learn_word":"Aprender palavra"},pagebreak:{desc:"Inserir quebra de p\u00e1gina."},advlist:{types:"Tipos",def:"Padr\u00e3o","lower_alpha":"Alfabeto min\u00fasculo","lower_greek":"Alfabeto grego","lower_roman":"Num. romanos min\u00fasculos","upper_alpha":"Alfabeto mai\u00fasculos","upper_roman":"Num. romanos mai\u00fasculos",circle:"C\u00edrculo",disc:"Disco",square:"Quadrado"},colors:{"333300":"Oliva escuro","993300":"Laranja queimado","000000":"Preto","003300":"Verde escuro","003366":"Azul escuro","000080":"Azul marinho","333399":"\u00cdndigo","333333":"Cinza muito escuro","800000":"Marrom 1",FF6600:"Laranja","808000":"Oliva","008000":"Verde","008080":"Verde azulado","0000FF":"Azul","666699":"Azul acinzentado","808080":"Cinza",FF0000:"Vermelho",FF9900:"\u00c2mbar","99CC00":"Amarelo esverdeado","339966":"Verde mar","33CCCC":"Turquesa","3366FF":"Azul real","800080":"Roxo","999999":"Cinza m\u00e9dio",FF00FF:"Magenta",FFCC00:"Ouro",FFFF00:"Amarelo","00FF00":"Lima","00FFFF":"\u00c1gua","00CCFF":"Azul celeste","993366":"Marrom 2",C0C0C0:"Prata",FF99CC:"Rosa",FFCC99:"P\u00eassego",FFFF99:"Amarelo claro",CCFFCC:"Verde p\u00e1lido",CCFFFF:"Ciano p\u00e1lido","99CCFF":"Azul celeste claro",CC99FF:"Ameixa",FFFFFF:"Branco"},aria:{"rich_text_area":"\u00c1rea de texto rico"},wordcount:{words:"Palavras:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ro.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ro.js
new file mode 100644
index 000000000..ffa1ebbc3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ro.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ro:{common:{"more_colors":"Mai multe culori","invalid_data":"Eroare: Datele gre\u015fite sunt marcate cu ro\u015fu.","popup_blocked":"Ne pare r\u0103u, dar un popup-blocker a dezactivat o fereastr\u0103 de func\u021bii a aplica\u021biei. Trebuie s\u0103 dezactivezi popup-blocker-ul pentru acest site pentru a folosi aplica\u021bia la capacitate maxim\u0103.","clipboard_no_support":"Deocamdat\u0103 nu este suportat\u0103 de browser. Te rug\u0103m s\u0103 folose\u0219ti combina\u0163iile de taste.","clipboard_msg":"Copiere/T\u0103iere/Lipire nu sunt disponibile \u00een Mozilla \u015fi Firefox.\nDori\u0163i mai multe informa\u0163ii despre aceast\u0103 problem\u0103?","not_set":"-- Nesetat\u0103 --","class_name":"Clas\u0103",browse:"R\u0103sfoie\u015fte",close:"\u00cenchide",cancel:"Anulare",update:"Actualizeaz\u0103",insert:"Insereaz\u0103",apply:"Aplic\u0103","edit_confirm":"Vrei s\u0103 folose\u0219ti un editor avansat pentru aceast\u0103 zon\u0103 de text?","invalid_data_number":"{#field} trebuie s\u0103 fie un num\u0103r","invalid_data_min":"{#field} trebuie s\u0103 fie un num\u0103r mai mare dec\u00e2t {#min}","invalid_data_size":"{#field} trebuie s\u0103 fie un num\u0103r sau un procent",value:"(value)"},contextmenu:{full:"Pe toat\u0103 l\u0103\u021bimea",right:"Dreapta",center:"Centru",left:"St\u00e2nga",align:"Aliniere"},insertdatetime:{"day_short":"Dum,Lun,Mar,Mie,Joi,Vin,S\u00e2m,Dum","day_long":"Duminic\u0103,Luni,Mar\u021bi,Miercuri,Joi,Vineri,S\u00e2mb\u0103t\u0103,Duminic\u0103","months_short":"Ian,Feb,Mar,Apr,Mai,Iun,Iul,Aug,Sep,Oct,Noi,Dec","months_long":"Ianuarie,Februarie,Martie,Aprilie,Mai,Iunie,Iulie,August,Septembrie,Octombrie,Noiembrie,Decembrie ","inserttime_desc":"Insereaz\u0103 ora","insertdate_desc":"Insereaz\u0103 data","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Tip\u0103re\u0219te"},preview:{"preview_desc":"Previzualizare"},directionality:{"rtl_desc":"Direc\u021bia de la dreapta la st\u00e2nga","ltr_desc":"Direc\u021bia de la st\u00e2nga la dreapta"},layer:{content:"Strat nou ...","absolute_desc":"Pozi\u021bionare absolut\u0103","backward_desc":"Mut\u0103 \u00een spate","forward_desc":"Mut\u0103 \u00een fa\u021b\u0103","insertlayer_desc":"Insereaz\u0103 un strat"},save:{"save_desc":"Salveaz\u0103","cancel_desc":"Anuleaz\u0103 toate schimb\u0103rile"},nonbreaking:{"nonbreaking_desc":"Insereaz\u0103 un spa\u021biu"},iespell:{download:"ieSpell nu a fost detectat. Vrei s\u0103-l instalezi?","iespell_desc":"Verific\u0103 ortografia"},advhr:{"advhr_desc":"Linie orizontal\u0103","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Figurine","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Caut\u0103/\u00eenlocuie\u0219te","search_desc":"Caut\u0103","delta_width":"","delta_height":""},advimage:{"image_desc":"Inserare/editare imagine","delta_width":"","delta_height":""},advlink:{"link_desc":"Inserare/editare leg\u0103tur\u0103","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insereaz\u0103/editeaz\u0103 atribute","ins_desc":"Inserare","del_desc":"\u0218tergere","acronym_desc":"Acronim","abbr_desc":"Abreviere","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Editare CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Lipirea este acum \u00een modul text simplu. Apas\u0103 din nou pentru comutarea la modul normal de lipire.","plaintext_mode_sticky":"Lipirea este acum \u00een modul text simplu. Apas\u0103 aici pentru comutarea la modul normal de lipire. Dup\u0103 ce vei lipi ceva vei reveni la modul normal de lipire.","selectall_desc":"Selecteaz\u0103 tot","paste_word_desc":"Lipire din Word","paste_text_desc":"Lipire ca text simplu"},"paste_dlg":{"word_title":"Folose\u0219te CTRL V pentru a lipi \u00een aceast\u0103 zon\u0103.","text_linebreaks":"P\u0103streaz\u0103 separatoarele de linii.","text_title":"Folose\u0219te CTRL V pentru a lipi \u00een aceast\u0103 zon\u0103."},table:{cell:"Celul\u0103",col:"Coloan\u0103",row:"R\u00e2nd",del:"\u0218terge tabelul","copy_row_desc":"Copiaz\u0103 r\u00e2ndul","cut_row_desc":"Taie r\u00e2ndul","paste_row_after_desc":"Lipe\u015fte r\u00e2ndul dup\u0103","paste_row_before_desc":"Lipe\u015fte r\u00e2ndul \u00eenainte","props_desc":"Propriet\u0103\u021bi tabel","cell_desc":"Propriet\u0103\u021bi celul\u0103","row_desc":"Propriet\u0103\u021bi r\u00e2nd","merge_cells_desc":"Une\u0219te celulele","split_cells_desc":"Separ\u0103 celulele unite","delete_col_desc":"\u0218terge coloana","col_after_desc":"Inserare coloan\u0103 dup\u0103","col_before_desc":"Inserare coloan\u0103 \u00eenainte","delete_row_desc":"\u0218terge r\u00e2ndul","row_after_desc":"Insereaz\u0103 un r\u00e2nd dup\u0103","row_before_desc":"Insereaz\u0103 un r\u00e2nd \u00eenainte",desc:"Inserare/editare tabel","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Daca restaurezi continutul salvat vei pierde tot continutul existent din editor.\n\nSigur vrei sa restaurezi continutul salvat?","restore_content":"Restaureaz\u0103 con\u021binutul salvat automat.","unload_msg":"Modific\u0103rile nu vor fi salvate."},fullscreen:{desc:"Mod ecran complet"},media:{edit:"Editeaz\u0103 media",desc:"Insereaz\u0103 / editeaz\u0103 media","delta_height":"","delta_width":""},fullpage:{desc:"Propriet\u0103\u021bi document","delta_width":"","delta_height":""},template:{desc:"Insereaz\u0103 un \u0219ablon predefinit"},visualchars:{desc:"Comut\u0103 caracterele de control vizual"},spellchecker:{desc:"Comut\u0103 corectorul ortografic",menu:"Set\u0103ri corector ortografic","ignore_word":"Ignor\u0103 cuv\u00e2ntul","ignore_words":"Ignor\u0103 toate",langs:"Limbi",wait:"Te rog a\u0219teapt\u0103...",sug:"Sugestii","no_sug":"Nu sunt sugestii.","no_mpell":"Nu sunt gre\u0219eli.","learn_word":"\u00cenva\u021b\u0103 cuv\u00e2ntul"},pagebreak:{desc:"Insereaz\u0103 un separator de pagin\u0103 pentru tip\u0103rire"},advlist:{types:"Tipuri",def:"Implicit","lower_alpha":"Minuscule alfabetice","lower_greek":"Minuscule grece\u0219ti","lower_roman":"Minuscule romane","upper_alpha":"Majuscule alfabetice","upper_roman":"Majuscule romane",circle:"Cerc",disc:"Disc",square:"P\u0103trat"},colors:{"333300":"Oliv \u00eenchis","993300":"Portocaliu ars","000000":"Negru","003300":"Verde \u00eenchis","003366":"Azuriu \u00eenchis","000080":"Bleumarin","333399":"Indigo","333333":"Gri foarte \u00eenchis","800000":"Cafeniu",FF6600:"Portocaliu","808000":"Oliv","008000":"Verde","008080":"Albastru-verzui","0000FF":"Albastru","666699":"Albastru-gri","808080":"Gri",FF0000:"Ro\u0219u",FF9900:"Chihlimbar","99CC00":"Ocru","339966":"Verde marin","33CCCC":"Turcoaz","3366FF":"Albastur regal","800080":"Violet","999999":"Gri mediu",FF00FF:"Magenta",FFCC00:"Auriu",FFFF00:"Galben","00FF00":"Lime","00FFFF":"Ap\u0103","00CCFF":"Albastru cer","993366":"Maro",C0C0C0:"Argintiu",FF99CC:"Roz",FFCC99:"Piersic\u0103",FFFF99:"Galben deschis",CCFFCC:"Verde pal",CCFFFF:"Cyan pal","99CCFF":"Albastru-cer deschis",CC99FF:"Prun\u0103",FFFFFF:"Alb"},aria:{"rich_text_area":"Zon\u0103 de text formatat"},wordcount:{words:"Cuvinte:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ru.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ru.js
new file mode 100644
index 000000000..290aee239
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ru.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ru:{common:{"more_colors":"\u0414\u0440\u0443\u0433\u0438\u0435 \u0446\u0432\u0435\u0442\u0430...","invalid_data":"\u041e\u0448\u0438\u0431\u043a\u0430: \u0412\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043e\u043d\u043e \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u043c.","popup_blocked":"\u0411\u043b\u043e\u043a\u0438\u0440\u0430\u0442\u043e\u0440 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u043a\u043e\u043d \u0437\u0430\u043a\u0440\u044b\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043e\u043a\u043d\u043e. \u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0430\u0439\u0442\u0435.","clipboard_no_support":"\u041d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0412\u0430\u0448\u0438\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u043e\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0433\u043e\u0440\u044f\u0447\u0438\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438.","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432\u044b\u0440\u0435\u0437\u043a\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 Firefox. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438: Ctrl C \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, Ctrl V \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c. \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e?","not_set":"- \u041d\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e -","class_name":"\u041a\u043b\u0430\u0441\u0441",browse:"\u041e\u0431\u0437\u043e\u0440",close:"\u0417\u0430\u043a\u0440\u044b\u0442\u044c",cancel:"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c",update:"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c",insert:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c",apply:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c","edit_confirm":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c WYSIWYG \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f?","invalid_data_number":"{#field} - \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0438\u0441\u043b\u043e","invalid_data_min":"{#field} - \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 {#min}","invalid_data_size":"{#field} - \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0438\u0441\u043b\u043e \u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442",value:"(\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435)"},contextmenu:{full:"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0435",right:"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",center:"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",left:"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435"},insertdatetime:{"day_short":"\u0432\u0441,\u043f\u043d,\u0432\u0442,\u0441\u0440,\u0447\u0442,\u043f\u0442,\u0441\u0431,\u0432\u0441","day_long":"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435,\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a,\u0432\u0442\u043e\u0440\u043d\u0438\u043a,\u0441\u0440\u0435\u0434\u0430,\u0447\u0435\u0442\u0432\u0435\u0440\u0433,\u043f\u044f\u0442\u043d\u0438\u0446\u0430,\u0441\u0443\u0431\u0431\u043e\u0442\u0430,\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435","months_short":"\u044f\u043d\u0432,\u0444\u0435\u0432,\u043c\u0430\u0440\u0442,\u0430\u043f\u0440,\u043c\u0430\u0439,\u0438\u044e\u043d\u044c,\u0438\u044e\u043b\u044c,\u0430\u0432\u0433,\u0441\u0435\u043d,\u043e\u043a\u0442,\u043d\u043e\u044f,\u0434\u0435\u043a","months_long":"\u044f\u043d\u0432\u0430\u0440\u044c,\u0444\u0435\u0432\u0440\u0430\u043b\u044c,\u043c\u0430\u0440\u0442,\u0430\u043f\u0440\u0435\u043b\u044c,\u043c\u0430\u0439,\u0438\u044e\u043d\u044c,\u0438\u044e\u043b\u044c,\u0430\u0432\u0433\u0443\u0441\u0442,\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c,\u043e\u043a\u0442\u044f\u0431\u0440\u044c,\u043d\u043e\u044f\u0431\u0440\u044c,\u0434\u0435\u043a\u0430\u0431\u0440\u044c","inserttime_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f","insertdate_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0443","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"\u041f\u0435\u0447\u0430\u0442\u044c"},preview:{"preview_desc":"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440"},directionality:{"rtl_desc":"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","ltr_desc":"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e"},layer:{content:"\u041d\u043e\u0432\u044b\u0439 \u0441\u043b\u043e\u0439","absolute_desc":"\u0410\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","backward_desc":"\u041d\u0430 \u0437\u0430\u0434\u043d\u0438\u0439 \u043f\u043b\u0430\u043d","forward_desc":"\u041d\u0430 \u043f\u0435\u0440\u0435\u0434\u043d\u0438\u0439 \u043f\u043b\u0430\u043d","insertlayer_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u043e\u0439"},save:{"save_desc":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c","cancel_desc":"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f"},nonbreaking:{"nonbreaking_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0440\u0430\u0437\u0440\u044b\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0431\u0435\u043b"},iespell:{download:"ieSpell \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c?","iespell_desc":"\u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u044e"},advhr:{"advhr_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043c\u0430\u0439\u043b","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c","search_desc":"\u041d\u0430\u0439\u0442\u0438","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443","delta_height":""},xhtmlxtras:{"attribs_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442","ins_desc":"\u0417\u0430\u043c\u0435\u043d\u0430","del_desc":"\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435","acronym_desc":"\u0410\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0446\u0438\u044f","abbr_desc":"\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435","cite_desc":"\u0426\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c CSS \u0441\u0442\u0438\u043b\u044c","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0441\u0435","paste_word_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0437 Word","paste_text_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e.","text_linebreaks":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u0441\u0442\u0440\u043e\u043a","text_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e."},table:{"cellprops_delta_width":"30",cell:"\u042f\u0447\u0435\u0439\u043a\u0430",col:"\u0421\u0442\u043e\u043b\u0431\u0435\u0446",row:"\u0421\u0442\u0440\u043e\u043a\u0430",del:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443","copy_row_desc":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","cut_row_desc":"\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","paste_row_after_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443","paste_row_before_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443","props_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b","cell_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u0435\u0439\u043a\u0438","row_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0440\u043e\u043a\u0438","merge_cells_desc":"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438","split_cells_desc":"\u0420\u0430\u0437\u0431\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443","delete_col_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446","col_after_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043f\u0440\u0430\u0432\u0430","col_before_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043b\u0435\u0432\u0430","delete_row_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443","row_after_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043d\u0438\u0437\u0443","row_before_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443",desc:"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435/\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044f\u043d\u044b.\n\n\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f?","restore_content":"\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435","unload_msg":"\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044f\u043d\u044b, \u0435\u0441\u043b\u0438 \u0412\u044b \u0443\u0439\u0434\u0435\u0442\u0435 \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b."},fullscreen:{desc:"\u041f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c"},media:{"delta_height":"",edit:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043a\u043b\u0438\u043f\u0430",desc:"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043b\u0438\u043f","delta_width":""},fullpage:{desc:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","delta_width":"","delta_height":""},template:{desc:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d"},visualchars:{desc:"\u0412\u0441\u0435 \u0437\u043d\u0430\u043a\u0438"},spellchecker:{desc:"\u041f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",menu:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0430\u0432\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f","ignore_word":"\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c","ignore_words":"\u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435",langs:"\u042f\u0437\u044b\u043a\u0438",wait:"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435...",sug:"\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b","no_sug":"\u041d\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432","no_mpell":"\u041e\u0448\u0438\u0431\u043e\u043a \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e.","learn_word":"\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0441\u043b\u043e\u0432\u043e"},pagebreak:{desc:"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u0440\u044b\u0432 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b"},advlist:{types:"\u0421\u0438\u043c\u0432\u043e\u043b\u044b",def:"\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435","lower_alpha":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b","lower_greek":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0433\u0440\u0435\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b","lower_roman":"\u0421\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b","upper_alpha":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u043b\u0430\u0442\u0438\u043d\u0441\u043a\u0438\u0435 \u0431\u0443\u043a\u0432\u044b","upper_roman":"\u0417\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0435 \u0440\u0438\u043c\u0441\u043a\u0438\u0435 \u0446\u0438\u0444\u0440\u044b",circle:"\u041e\u043a\u0440\u0443\u0436\u043d\u043e\u0441\u0442\u0438",disc:"\u041a\u0440\u0443\u0433\u0438",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442\u044b"},colors:{"333300":"\u0422\u0451\u043c\u043d\u043e-\u043e\u043b\u0438\u0432\u043a\u043e\u0432\u044b\u0439","993300":"\u0411\u0438\u0441\u043c\u0430\u0440\u043a-\u0444\u0443\u0440\u0438\u043e\u0437\u043e","000000":"\u0427\u0435\u0440\u043d\u044b\u0439","003300":"\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u044b\u0439","003366":"\u0422\u0451\u043c\u043d\u0430\u044f \u043b\u0430\u0437\u0443\u0440\u044c","000080":"\u0422\u0451\u043c\u043d\u043e-\u0441\u0438\u043d\u0438\u0439","333399":"\u0418\u043d\u0434\u0438\u0433\u043e","333333":"\u041e\u0447\u0435\u043d\u044c \u0442\u0451\u043c\u043d\u043e-\u0441\u0435\u0440\u044b\u0439","800000":"\u0422\u0451\u043c\u043d\u043e-\u0431\u043e\u0440\u0434\u043e\u0432\u044b\u0439",FF6600:"\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439","808000":"\u041e\u043b\u0438\u0432\u043a\u043e\u0432\u044b\u0439","008000":"\u0412\u043b\u044e\u0431\u043b\u0435\u043d\u043d\u043e\u0439 \u0436\u0430\u0431\u044b","008080":"C\u0438\u043d\u0435-\u0437\u0435\u043b\u0435\u043d\u044b\u0439","0000FF":"\u0421\u0438\u043d\u0438\u0439","666699":"\u0421\u0435\u0440\u043e-\u0433\u043e\u043b\u0443\u0431\u043e\u0439","808080":"\u0421\u0435\u0440\u044b\u0439",FF0000:"\u041a\u0440\u0430\u0441\u043d\u044b\u0439",FF9900:"\u042f\u043d\u0442\u0430\u0440\u043d\u044b\u0439","99CC00":"\u0416\u0451\u043b\u0442\u043e-\u0437\u0435\u043b\u0451\u043d\u044b\u0439","339966":"\u0411\u0438\u0440\u044e\u0437\u043e\u0432\u044b\u0439","33CCCC":"\u042f\u0439\u0446\u0430 \u0434\u0440\u043e\u0437\u0434\u0430","3366FF":"\u041a\u043e\u0440\u043e\u043b\u0435\u0432\u0441\u043a\u0438\u0439 \u0441\u0438\u043d\u0438\u0439","800080":"\u0424\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u043e-\u0431\u0430\u043a\u043b\u0430\u0436\u0430\u043d\u043d\u044b\u0439","999999":"\u041a\u0432\u0430\u0440\u0446\u0435\u0432\u044b\u0439",FF00FF:"\u041f\u0443\u0440\u043f\u0443\u0440\u043d\u044b\u0439",FFCC00:"\u0417\u043e\u043b\u043e\u0442\u043e\u0439",FFFF00:"\u0416\u0435\u043b\u0442\u044b\u0439","00FF00":"\u0417\u0435\u043b\u0435\u043d\u044b\u0439","00FFFF":"\u0426\u0438\u0430\u043d","00CCFF":"\u041d\u0435\u0431\u0435\u0441\u043d\u044b\u0439","993366":"\u0420\u043e\u0437\u043e\u0432\u0430\u0442\u043e-\u043b\u0438\u043b\u043e\u0432\u044b\u0439",C0C0C0:"\u0421\u0435\u0440\u0435\u0431\u0440\u0438\u0441\u0442\u044b\u0439",FF99CC:"\u0420\u043e\u0437\u043e\u0432\u044b\u0439",FFCC99:"\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u043e-\u043f\u0435\u0440\u0441\u0438\u043a\u043e\u0432\u044b\u0439",FFFF99:"\u0412\u0435\u0440\u0434\u0435\u043f\u0435\u0448\u0435\u0432\u044b\u0439",CCFFCC:"\u0417\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0447\u0430\u044f",CCFFFF:"\u0411\u043b\u0435\u0434\u043d\u043e-\u0441\u0438\u043d\u0438\u0439","99CCFF":"\u0421\u0432\u0435\u0442\u043b\u043e-\u043d\u0435\u0431\u0435\u0441\u043d\u044b\u0439",CC99FF:"\u0424\u0438\u0430\u043b\u043a\u043e\u0432\u044b\u0439",FFFFFF:"\u0411\u0435\u043b\u044b\u0439"},aria:{"rich_text_area":"\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440"},wordcount:{words:"\u0421\u043b\u043e\u0432:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sc.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sc.js
new file mode 100644
index 000000000..fe8e8033e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sc.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sc:{common:{"more_colors":"\u66f4\u591a\u989c\u8272","invalid_data":"\u9519\u8bef:\u65e0\u6548\u8f93\u5165\u503c\uff0c\u5df2\u6807\u8bb0\u4e3a\u7ea2\u8272\u3002 ","popup_blocked":"\u62b1\u6b49\uff01\u5f39\u51fa\u89c6\u7a97\u5df2\u88ab\u963b\u6b62\uff0c\u8bf7\u8c03\u6574\u6d41\u89c8\u5668\u8bbe\u7f6e\uff0c\u5141\u8bb8\u6b64\u7f51\u7ad9\u53ef\u5f39\u51fa\u65b0\u89c6\u7a97\uff0c\u4ee5\u4fbf\u4f7f\u7528\u6b64\u5de5\u5177","clipboard_no_support":"\u8fd8\u4e0d\u652f\u63f4\u60a8\u7684\u6d41\u89c8\u5668\uff0c\u8bf7\u4f7f\u7528\u952e\u76d8\u5feb\u6377\u65b9\u5f0f","clipboard_msg":"\u590d\u5236\u3001\u526a\u4e0b\u3001\u8d34\u4e0a\u529f\u80fd\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u3002 \n\u662f\u5426\u9700\u8981\u4e86\u89e3\u66f4\u591a\u6709\u5173\u6b64\u95ee\u9898\u7684\u8d44\u8baf\uff1f ","not_set":"--\u672a\u8bbe\u7f6e--","class_name":"\u6837\u5f0f",browse:"\u6d41\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5e94\u7528","edit_confirm":"\u662f\u5426\u5728\u6b64textarea\u6807\u7b7e\u5185\u4f7f\u7528\u300c\u6240\u89c1\u5373\u6240\u5f97\u300d\u6a21\u5f0f\uff1f ","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u4e24\u7aef\u5bf9\u9f50",right:"\u9760\u53f3\u5bf9\u9f50",center:"\u5c45\u4e2d\u5bf9\u9f50",left:"\u9760\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50\u65b9\u5f0f"},insertdatetime:{"day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u73b0\u5728\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u4eca\u5929\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u6587\u5b57\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u6587\u5b57\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u589e\u5c42...","absolute_desc":"\u5f00\u5173\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u7f6e\u540e","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u5c42"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u53d6\u6d88\u6240\u6709\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u767d\u683c"},iespell:{download:"\u672a\u68c0\u6d4b\u5230ieSpell\u7684\u5b58\u5728\u3002\u662f\u5426\u73b0\u5728\u7acb\u5373\u5b89\u88c5\uff1f ","iespell_desc":"\u62fc\u5199\u68c0\u67e5"},advhr:{"advhr_desc":"\u6c34\u5e73\u7ebf","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u56fe\u91ca","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u67e5\u627e/\u66ff\u6362","search_desc":"\u67e5\u627e","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"60","attribs_delta_width":"40","attribs_desc":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u9996\u5b57\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u6587","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7f16\u8f91CSS\u6837\u5f0f\u8868\u5355","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u5168\u9009","paste_word_desc":"\u4eceWord\u8d34\u4e0a","paste_text_desc":"\u4ee5\u7eaf\u6587\u672c\u8d34\u4e0a","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002 ","text_linebreaks":"\u4fdd\u7559\u6362\u884c\u7b26\u53f7","text_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002 "},table:{"merge_cells_delta_height":"40","merge_cells_delta_width":"40","table_delta_height":"60","table_delta_width":"40","cellprops_delta_height":"10","cellprops_delta_width":"10",cell:"\u5355\u683c",col:"\u5217",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u9009\u62e9\u884c","cut_row_desc":"\u526a\u4e0b\u9009\u62e9\u884c","paste_row_after_desc":"\u8d34\u5728\u4e0b\u884c","paste_row_before_desc":"\u8d34\u5728\u4e0a\u884c","props_desc":"\u8868\u683c\u5c5e\u6027","cell_desc":"\u5355\u683c\u5c5e\u6027","row_desc":"\u884c\u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u5355\u683c","split_cells_desc":"\u5206\u5272\u5355\u683c","delete_col_desc":"\u5220\u9664\u6240\u5728\u5217","col_after_desc":"\u63d2\u5165\u53f3\u65b9\u5217","col_before_desc":"\u63d2\u5165\u5de6\u65b9\u5217","delete_row_desc":"\u5220\u9664\u6240\u5728\u884c","row_after_desc":"\u63d2\u5165\u4e0b\u65b9\u884c","row_before_desc":"\u63d2\u5165\u4e0a\u65b9\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u5982\u679c\u79bb\u5f00\u6b64\u9875\u9762\u5c06\u5bfc\u81f4\u6240\u505a\u7684\u66f4\u6539\u5168\u90e8\u4e22\u5931\u3002 ","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u5f00\u5173\u5168\u5c4f\u6a21\u5f0f"},media:{edit:"\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53",desc:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53","delta_height":"","delta_width":""},fullpage:{desc:"\u6863\u5c5e\u6027","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9884\u5b9a\u7684\u8303\u672c\u5185\u5bb9"},visualchars:{desc:"\u663e\u793a\u63a7\u5236\u7b26\u53f7\u5f00/\u5173\u3002 "},spellchecker:{desc:"\u5f00\u5173\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5199\u68c0\u67e5\u8bbe\u7f6e","ignore_word":"\u7565\u8fc7","ignore_words":"\u5168\u90e8\u7565\u8fc7",langs:"\u8bed\u8a00",wait:"\u8bf7\u7a0d\u5019...",sug:"\u63a8\u8350\u5b57\u8bcd","no_sug":"\u65e0\u62fc\u5199\u63a8\u8350","no_mpell":"\u672a\u53d1\u73b0\u62fc\u5199\u9519\u8bef","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26\u53f7"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/se.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/se.js
new file mode 100644
index 000000000..b6733b599
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/se.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({se:{common:{"more_colors":"Fler f\u00e4rger","invalid_data":"Fel: Inkorrekta v\u00e4rden har matats in, dessa \u00e4r markerade i r\u00f6tt.","popup_blocked":"Popup blockerare detekterad. St\u00e4ng av den s\u00e5 att dialogerna kan \u00f6ppnas.","clipboard_no_support":"Funktionen \u00e4r inte tillg\u00e4nglig i din webbl\u00e4sare, anv\u00e4nd tangentbordsgenv\u00e4garna i st\u00e4llet.","clipboard_msg":"Kopiera/klipp ut/klistra in \u00e4r inte tillg\u00e4ngligt i din webbl\u00e4sare.\nVill du veta mer?","not_set":"-- Inte satt --","class_name":"Klass",browse:"Bl\u00e4ddra",close:"St\u00e4ng",cancel:"Avbryt",update:"Uppdatera",insert:"Infoga",apply:"Applicera","edit_confirm":"Vill du anv\u00e4nda WYSIWYG l\u00e4get f\u00f6r denna textarea.","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Utfyllnad",right:"H\u00f6ger",center:"Centrerad",left:"V\u00e4nster",align:"Justering"},insertdatetime:{"day_short":"S\u00f6n,M\u00e5n,Tis,Ons,Tors,Fre,L\u00f6r,S\u00f6n","day_long":"S\u00f6ndag,M\u00e5ndag,Tisdag,Onsdag,Torsdag,Fredag,L\u00f6rdag,S\u00f6ndag","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","months_long":"Januari,Februari,Mars,April,Maj,Juni,Juli,Augusti,September,Oktober,November,December","inserttime_desc":"Infoga tid","insertdate_desc":"Infoga datum","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d "},print:{"print_desc":"Skriv ut"},preview:{"preview_desc":"F\u00f6rhandsgranska"},directionality:{"rtl_desc":"Skriftl\u00e4ge - h\u00f6ger till v\u00e4nster","ltr_desc":"Skriftl\u00e4ge - v\u00e4nster till h\u00f6ger"},layer:{content:"Nytt lager...","absolute_desc":"Sl\u00e5 av/p\u00e5 absolut positionering","backward_desc":"Flytta bak\u00e5t","forward_desc":"Flytta fram\u00e5t","insertlayer_desc":"Infoga nytt lager"},save:{"save_desc":"Spara","cancel_desc":"Hoppa \u00f6ver alla f\u00f6r\u00e4ndringar"},nonbreaking:{"nonbreaking_desc":"Infoga icke radbrytande mellanslag"},iespell:{download:"ieSpell kunde inte hittas, vill du installera denna nu?","iespell_desc":"R\u00e4ttstava"},advhr:{"advhr_desc":"Horisontell skiljelinje","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smileys","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f6k/ers\u00e4tt","search_desc":"S\u00f6k","delta_width":"","delta_height":""},advimage:{"image_desc":"Infoga/redigera bild","delta_width":"","delta_height":""},advlink:{"link_desc":"Infoga/redigera l\u00e4nk","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Redigera attribut","ins_desc":"Markera som tillagt","del_desc":"Markera som struket","acronym_desc":"Akronym","abbr_desc":"F\u00f6rkortning","cite_desc":"citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Redigera inline CSS","delta_height":"","delta_width":""},paste:{"selectall_desc":"Markera allt","paste_word_desc":"Klistra in fr\u00e5n Word","paste_text_desc":"Klistra in som text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster.","text_linebreaks":"Spara radbrytningar","text_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster."},table:{cell:"Cell",col:"Kolumn",row:"Rad",del:"Radera tabell","copy_row_desc":"Klistra in rad","cut_row_desc":"Klipp ut rad","paste_row_after_desc":"Klistra in rad efter","paste_row_before_desc":"Klistra in rad ovanf\u00f6r","props_desc":"Tabellinst\u00e4llningar","cell_desc":"Tabellcellsinst\u00e4llningar","row_desc":"Tabellradsinst\u00e4llningar","merge_cells_desc":"Sammanfoga celler","split_cells_desc":"Separera sammansatta celler","delete_col_desc":"Radera kolumn","col_after_desc":"Infoga kolumn efter","col_before_desc":"Infoga kolumn f\u00f6re","delete_row_desc":"Radera rad","row_after_desc":"Infoga ny rad efter","row_before_desc":"Infoga ny rad f\u00f6re",desc:"Infoga/redigera ny tabell","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"F\u00f6r\u00e4ndringarna du gjorde kommer att g\u00e5 f\u00f6rlorade om du v\u00e4ljer att l\u00e4mna denna sida.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Sl\u00e5 av/p\u00e5 fullsk\u00e4rmsl\u00e4ge"},media:{edit:"Redigera inb\u00e4ddad media",desc:"Infoga/redigera inb\u00e4ddad media","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentinst\u00e4llningar","delta_width":"","delta_height":""},template:{desc:"Infoga en f\u00e4rdig mall"},visualchars:{desc:"Visa osynliga tecken"},spellchecker:{desc:"Sl\u00e5 av/p\u00e5 r\u00e4ttstavningskontroll",menu:"R\u00e4ttstavningsinst\u00e4llningar","ignore_word":"Ignorera ord","ignore_words":"Ignorera alla",langs:"Spr\u00e5k",wait:"Var god v\u00e4nta...",sug:"F\u00f6rslag","no_sug":"Inga f\u00f6rslag","no_mpell":"Kunde inte finna n\u00e5gra felstavningar.","learn_word":"Learn word"},pagebreak:{desc:"Infoga sidbrytning"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/si.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/si.js
new file mode 100644
index 000000000..cbc9e8919
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/si.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({si:{common:{"more_colors":"\u0dad\u0dc0\u0dad\u0dca \u0dc0\u0dbb\u0dca\u0dab","invalid_data":"\u0dc0\u0dbb\u0daf: \u0dc0\u0dbd\u0d82\u0d9c\u0dd4 \u0db1\u0ddc\u0db8\u0dd0\u0dad\u0dd2 \u0d85\u0d9c\u0dba\u0db1\u0dca \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dbb \u0d87\u0dad,\u0d91\u0db8 \u0d85\u0d9c\u0dba\u0db1\u0dca \u0dbb\u0dad\u0dd4 \u0db4\u0dcf\u0da7\u0dd2\u0db1\u0dca \u0dc3\u0dc5\u0d9a\u0dd4\u0dab\u0dd4 \u0d9a\u0dbb \u0d87\u0dad.","popup_blocked":"\u0d94\u0db6\u0d9c\u0dda popup-blocker \u0db8\u0d9f\u0dd2\u0db1\u0dca \u0d8b\u0db4\u0dba\u0ddd\u0d9c\u0dd2 \u0dc3\u0dda\u0dc0\u0dcf\u0dc0\u0db1\u0dca \u0dc3\u0db4\u0dba\u0db1 \u0d9a\u0dc0\u0dd4\u0dbd\u0dd4\u0dc0\u0d9a\u0dca \u0d85\u0db6\u0dbd \u0d9a\u0dbb \u0d87\u0dad.\u0d91\u0db6\u0dd0\u0dc0\u0dd2\u0db1\u0dca \u0d94\u0db6\u0da7 popup-blocker \u0dba \u0d85\u0d9a\u0dca\u200d\u0dbb\u0dd3\u0dba \u0d9a\u0dd2\u0dbb\u0dd3\u0db8\u0da7 \u0dc3\u0dd2\u0daf\u0dd4\u0dc0\u0dda. ","clipboard_no_support":"\u0daf\u0dd0\u0db1\u0da7 \u0db4\u0dca\u200d\u0dbb\u0daf\u0dbb\u0dca\u0dc1\u0d9a\u0dba \u0db8\u0d9f\u0dd2\u0db1\u0dca \u0db8\u0dd9\u0db8 \u0dc3\u0dda\u0dc0\u0dba \u0dc3\u0db4\u0dba\u0dcf \u0db1\u0dd0\u0dad,\u0d91\u0db6\u0dd0\u0dc0\u0dd2\u0db1\u0dca \u0dba\u0dad\u0dd4\u0dbb\u0dd4\u0db4\u0dd4\u0dc0\u0dbb\u0dd4\u0dc0 \u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf \u0d9a\u0dbb\u0db1\u0dca\u0db1.","clipboard_msg":"\u0db4\u0dd2\u0da7\u0db4\u0dad\u0dca \u0d9a\u0dd2\u0dbb\u0dd3\u0db8/\u0d89\u0dc0\u0dad\u0dca \u0d9a\u0dd2\u0dbb\u0dd3\u0db8/\u0d87\u0dbd\u0dc0\u0dd3\u0db8 \u0db8\u0ddc\u0dc3\u0dd2\u0dbd\u0dca\u0dbd\u0dcf \u0dc4\u0dcf \u0dc6\u0dba\u0dbb\u0dca \u0dc6\u0ddc\u0d9a\u0dca\u0dc3\u0dca \u0dc4\u0dd2 \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0db1\u0ddc\u0dc0\u0dda.\n\u0d94\u0db6\u0da7 \u0db8\u0dda \u0db4\u0dd2\u0dc5\u0dd2\u0db6\u0db3\u0dc0 \u0dad\u0da0\u0daf\u0dd4\u0dbb\u0da7\u0dad\u0dca \u0dad\u0ddc\u0dbb\u0dad\u0dd4\u0dbb\u0dd4 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0dc0\u0dda\u0daf?","not_set":"-- Not set --","class_name":"\u0dc3\u0db8\u0dd6\u0dc4\u0dba",browse:"Browse",close:"\u0d89\u0dc0\u0dad\u0dca\u0dc0\u0db1\u0dca\u0db1",cancel:"\u0d85\u0dc0\u0dbd\u0d82\u0d9c\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1",update:"\u0d85\u0dbd\u0dd4\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1",insert:"\u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1",apply:"\u0dba\u0ddc\u0daf\u0db1\u0dca\u0db1","edit_confirm":"\u0d94\u0db6\u0da7 \u0db8\u0dd9\u0db8 \u0db4\u0dcf\u0da8\u0dba\u0db1\u0dca \u0dc3\u0db3\u0dc4\u0dcf WYSIWYG \u0d86\u0d9a\u0dcf\u0dbb\u0dba?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u0db4\u0dd6\u0dbb\u0dca\u0dab\u0dc0",right:"\u0daf\u0d9a\u0dd4\u0dab\u0da7",center:"\u0db8\u0dd0\u0daf\u0da7",left:"\u0dc0\u0db8\u0da7",align:"\u0db4\u0dd9\u0dc5 \u0d9c\u0dd0\u0db1\u0dca\u0dc0\u0dd4\u0db8"},insertdatetime:{"day_short":"\u0d89\u0dbb\u0dd2\u0daf\u0dcf,\u0dc3\u0db3\u0dd4\u0daf\u0dcf,\u0d85\u0d9f.,\u0db6\u0daf\u0dcf\u0daf\u0dcf,\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca.,\u0dc3\u0dd2\u0d9a\u0dd4.,\u0dc3\u0dd9\u0db1.","day_long":"\u0d89\u0dbb\u0dd2\u0daf\u0dcf,\u0dc3\u0db3\u0dd4\u0daf\u0dcf,\u0d85\u0d9f\u0dc4\u0dbb\u0dd0\u0dc0\u0dcf\u0daf\u0dcf,\u0db6\u0daf\u0dcf\u0daf\u0dcf,\u0db6\u0dca\u200d\u0dbb\u0dc4\u0dc3\u0dca\u0db4\u0dad\u0dd2\u0db1\u0dca\u0daf\u0dcf,\u0dc3\u0dd2\u0d9a\u0dd4\u0dbb\u0dcf\u0daf\u0dcf,\u0dc3\u0dd9\u0db1\u0dc3\u0dd4\u0dbb\u0dcf\u0daf\u0dcf","months_short":"\u0da2\u0db1.,\u0db4\u0dd9\u0db6.,\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4,\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca,\u0db8\u0dd0\u0dba\u0dd2,\u0da2\u0dd6\u0db1\u0dd2,\u0da2\u0dd6\u0dbd\u0dd2,\u0d85\u0d9c\u0ddd.,\u0dc3\u0dd0\u0dca.,\u0d94\u0d9a\u0dca.,\u200d\u0db1\u0ddc\u0dc0\u0dd0.,\u0daf\u0dd9\u0dc3\u0dd0.","months_long":"\u0da2\u0db1\u0dc0\u0dcf\u0dbb\u0dd2,\u0db4\u0dd9\u0db6\u0dbb\u0dc0\u0dcf\u0dbb\u0dd2,\u0db8\u0dcf\u0dbb\u0dca\u0dad\u0dd4,\u0d85\u0db4\u0dca\u200d\u0dbb\u0dda\u0dbd\u0dca,\u0db8\u0dd0\u0dba\u0dd2,\u0da2\u0dd6\u0db1\u0dd2,\u0da2\u0dd6\u0dbd\u0dd2,\u0d85\u0d9c\u0ddd\u0dc3\u0dca\u0dad\u0dd4,\u0dc3\u0dd0\u0dca\u0dad\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca,\u0d94\u0d9a\u0dca\u0dad\u0ddd\u0db6\u0dbb\u0dca,\u200d\u0db1\u0ddc\u0dc0\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca,\u0daf\u0dd9\u0dc3\u0dd0\u0db8\u0dca\u0db6\u0dbb\u0dca","inserttime_desc":"\u0dc0\u0dda\u0dbd\u0dcf\u0dc0 \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","insertdate_desc":"\u0daf\u0dd2\u0db1\u0dba \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","time_fmt":"%\u0db4\u0dd0\u0dba:%\u0db8\u0dd2\u0dc3:%\u0dad\u0dad\u0dca","date_fmt":"%\u0d85\u0dc0\u0dd4-%\u0db8\u0dcf\u0dc3-%\u0daf\u0dd2\u0db1"},print:{"print_desc":"\u0db8\u0dd4\u0daf\u0dca\u200d\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dc0\u0dcf"},preview:{"preview_desc":"\u0db4\u0dd6\u0dbb\u0dca\u0dc0 \u0daf\u0dbb\u0dca\u0dc1\u0db1\u0dba"},directionality:{"rtl_desc":"\u0daf\u0d9a\u0dd4\u0dab\u0dda \u0dc3\u0dd2\u0da7 \u0dc0\u0db8\u0da7 \u0daf\u0dd2\u0dc1\u0dcf\u0dc0","ltr_desc":"\u0dc0\u0db8\u0dda \u0dc3\u0dd2\u0da7 \u0daf\u0d9a\u0dd4\u0dab\u0da7 \u0daf\u0dd2\u0dc1\u0dcf\u0dc0"},layer:{content:"\u0d85\u0dbd\u0dd4\u0dad\u0dca \u0dc3\u0dca\u0dae\u0dbb\u0dba\u0d9a\u0dca...","absolute_desc":"Toggle absolute positioning","backward_desc":"\u0db4\u0dc3\u0dd4\u0db4\u0dc3\u0da7 \u0d9c\u0dd9\u0db1\u0dba\u0db1\u0dca\u0db1","forward_desc":"\u0d89\u0daf\u0dd2\u0dbb\u0dd2\u0dba\u0da7 \u0d9c\u0dd9\u0db1\u0dba\u0db1\u0dca\u0db1","insertlayer_desc":"\u0d85\u0db5\u0dad\u0dca \u0dc3\u0dca\u0dae\u0dbb\u0dba\u0d9a\u0dca \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1"},save:{"save_desc":"\u0dc3\u0dd4\u0dbb\u0d9a\u0dd2\u0db1\u0dca\u0db1","cancel_desc":"\u0d85\u0dc0\u0dbd\u0d82\u0d9c\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell \u0d85\u0db1\u0dcf\u0dc0\u0dbb\u0db1\u0dba \u0dc0\u0dd6\u0dba\u0dda \u0db1\u0dd0\u0dad. \u0d94\u0db6\u0da7 \u0d91\u0dba \u0db4\u0dd2\u0dc4\u0dd2\u0da7\u0dd4\u0dc0\u0dd3\u0db8\u0da7 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0daf?","iespell_desc":"\u0d85\u0d9a\u0dca\u0dc2\u0dbb \u0dc0\u0dd2\u0db1\u0dca\u200d\u0dba\u0dcf\u0dc3\u0dba \u0db4\u0dbb\u0dd3\u0d9a\u0dc2\u0dcf \u0d9a\u0dbb\u0db1\u0dca\u0db1"},advhr:{"advhr_desc":"Horizontale rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sk.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sk.js
new file mode 100644
index 000000000..f25f268ac
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sk:{common:{"more_colors":"Viac farieb...","invalid_data":"Chyba: Boli zadan\u00e9 neplatn\u00e9 hodnoty a tieto boli ozna\u010den\u00e9 \u010dervenou farbou.","popup_blocked":"Blokovanie vyskakovac\u00edch okien neumo\u017enilo otvori\u0165 okno, ktor\u00e9 poskytuje funk\u010dnos\u0165 aplik\u00e1cie. Pre pln\u00e9 vyu\u017eitie mo\u017enost\u00ed aplik\u00e1cie mus\u00edte vypn\u00fa\u0165 blokovanie vyskakovac\u00edch okien pre tento web.","clipboard_no_support":"T\u00e1to funkcia nie je va\u0161\u00edm prehliada\u010dom podporovan\u00e1. Pou\u017eite namiesto toho kl\u00e1vesov\u00fa skratku.","clipboard_msg":"Funkcie kop\u00edrova\u0165/vystrihn\u00fa\u0165/vlo\u017ei\u0165 nie s\u00fa prehliada\u010dom Mozilla Firefox podporovan\u00e9.\nChcete viac inform\u00e1ci\u00ed o tomto probl\u00e9me?","not_set":"-- Nezadan\u00e9 --","class_name":"Trieda",browse:"Prech\u00e1dza\u0165",close:"Zavrie\u0165",cancel:"Storno",update:"Aktualizova\u0165",insert:"Vlo\u017ei\u0165",apply:"Pou\u017ei\u0165","edit_confirm":"Chcete pou\u017ei\u0165 WYSIWYG re\u017eim pre tento text?","invalid_data_number":"{#field} mus\u00ed by\u0165 \u010d\u00edslo","invalid_data_min":"{#field} mus\u00ed by\u0165 \u010d\u00edslo v\u00e4\u010d\u0161ie ako {#min}","invalid_data_size":"{#field} mus\u00ed by\u0165 \u010d\u00edslo lebo percento",value:"(hodnota)"},contextmenu:{full:"Do bloku",right:"Doprava",center:"Na stred",left:"Do\u013eava",align:"Zarovnanie"},insertdatetime:{"day_short":"Ne,Po,Ut,St,\u0160t,Pi,So,Ne","day_long":"Nede\u013ea,Pondelok,Utorok,Streda,\u0160tvrtok,Piatok,Sobota,Nede\u013ea","months_short":"Jan,Feb,Mar,Apr,M\u00e1j,J\u00fan,J\u00fal,Aug,Sep,Okt,Nov,Dec","months_long":"Janu\u00e1r,Febru\u00e1r,Marec,Apr\u00edl,M\u00e1j,J\u00fan,J\u00fal,August,September,Okt\u00f3ber,November,December","inserttime_desc":"Vlo\u017ei\u0165 \u010das","insertdate_desc":"Vlo\u017ei\u0165 d\u00e1tum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Tla\u010d"},preview:{"preview_desc":"N\u00e1h\u013ead"},directionality:{"rtl_desc":"Smer sprava do\u013eava","ltr_desc":"Smer z\u013eava doprava"},layer:{content:"Nov\u00e1 vrstva...","absolute_desc":"Prepn\u00fa\u0165 na absol\u00fatne poz\u00edciovanie","backward_desc":"Presun\u00fa\u0165 dozadu","forward_desc":"Presun\u00fa\u0165 dopredu","insertlayer_desc":"Vlo\u017ei\u0165 nov\u00fa vrstvu"},save:{"save_desc":"Ulo\u017ei\u0165","cancel_desc":"Zru\u0161i\u0165 v\u0161etky zmeny"},nonbreaking:{"nonbreaking_desc":"Vlo\u017ei\u0165 nerozdelite\u013en\u00fa medzeru"},iespell:{download:"Pr\u00edtomnos\u0165 slovn\u00edkaieSpell nebola zisten\u00e1. Chcete slovn\u00edk nain\u0161talova\u0165?","iespell_desc":"Spusti\u0165 kontrolu pravopisu"},advhr:{"advhr_desc":"Vodorovn\u00fd odde\u013eova\u010d","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotikony","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"H\u013eada\u0165 a nahradi\u0165","search_desc":"H\u013eada\u0165","delta_width":"","delta_height":""},advimage:{"delta_width":"40","image_desc":"Vlo\u017ei\u0165/upravi\u0165 obr\u00e1zok","delta_height":""},advlink:{"link_desc":"Vlo\u017ei\u0165/upravi\u0165 odkaz","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Vlo\u017ei\u0165/upravi\u0165 atrib\u00faty","ins_desc":"Pridan\u00fd text","del_desc":"Odstr\u00e1nen\u00fd text","acronym_desc":"Akronym","abbr_desc":"Skratka","cite_desc":"Cit\u00e1cia","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_width":"35",desc:"Upravi\u0165 CSS \u0161t\u00fdl","delta_height":""},paste:{"plaintext_mode":"Funkcia vlo\u017ei\u0165 je teraz v re\u017eime prost\u00fd text. Op\u00e4tovn\u00e9 kliknutie prepne t\u00fato funkciu nasp\u00e4\u0165 do norm\u00e1lneho re\u017eimu.","plaintext_mode_sticky":"Funkcia vlo\u017ei\u0165 je teraz v re\u017eime prost\u00fd text. Op\u00e4tovn\u00e9 kliknutie prepne t\u00fato funkciu nasp\u00e4\u0165 do norm\u00e1lneho re\u017eimu. Po vlo\u017een\u00ed \u010dohoko\u013evek bude t\u00e1to funkcia navr\u00e1ten\u00e1 sp\u00e4\u0165 do norm\u00e1lneho re\u017eimu.","selectall_desc":"Ozna\u010di\u0165 v\u0161etko","paste_word_desc":"Vlo\u017ei\u0165 z MS Word","paste_text_desc":"Vlo\u017ei\u0165 ako prost\u00fd text"},"paste_dlg":{"word_title":"Pou\u017eite CTRL+V pre vlo\u017eenie textu do okna.","text_linebreaks":"Zachova\u0165 zalamovanie riadkov","text_title":"Pou\u017eite CTRL+V pre vlo\u017eenie textu do okna."},table:{"table_delta_width":"50","cellprops_delta_width":"105",cell:"Bunka",col:"St\u013apec",row:"Riadok",del:"Odstr\u00e1ni\u0165 tabu\u013eku","copy_row_desc":"Kop\u00edrova\u0165 riadok tabu\u013eky","cut_row_desc":"Vystrihn\u00fa\u0165 riadok tabu\u013eky","paste_row_after_desc":"Vlo\u017ei\u0165 riadok za","paste_row_before_desc":"Vlo\u017ei\u0165 riadok pred","props_desc":"Vlastnosti tabu\u013eky","cell_desc":"Vlastnosti bunky","row_desc":"Vlastnosti riadky tabu\u013eky","merge_cells_desc":"Zl\u00fa\u010di\u0165 bunky","split_cells_desc":"Rozdeli\u0165 bunky","delete_col_desc":"Odstr\u00e1ni\u0165 st\u013apec tabu\u013eky","col_after_desc":"Vlo\u017ei\u0165 st\u013apec za","col_before_desc":"Vlo\u017ei\u0165 st\u013apec pred","delete_row_desc":"Odstr\u00e1ni\u0165 riadok tabu\u013eky","row_after_desc":"Vlo\u017ei\u0165 riadok za","row_before_desc":"Vlo\u017ei\u0165 riadok pred",desc:"Vlo\u017ei\u0165 nov\u00fa tabu\u013eku","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Pokia\u013e obnov\u00edte ulo\u017een\u00fd obsah, strat\u00edte t\u00fdm v\u0161etok obsah, ktor\u00fd je pr\u00e1ve v okne editora.\n\nSkuto\u010dne chcete obnovi\u0165 ulo\u017een\u00fd obsah?","restore_content":"Obnovi\u0165 automaticky ulo\u017een\u00fd obsah.","unload_msg":"Preveden\u00e9 zmeny m\u00f4\u017eu by\u0165 straten\u00e9, ak opust\u00edte t\u00fato str\u00e1nku."},fullscreen:{desc:"Prepn\u00fa\u0165 na celostr\u00e1nkov\u00e9 zobrazenie"},media:{"delta_width":"180",edit:"Upravi\u0165 pripojen\u00e9 m\u00e9di\u00e1",desc:"Vlo\u017ei\u0165/upravi\u0165 m\u00e9di\u00e1","delta_height":""},fullpage:{desc:"Vlastnosti dokumentu","delta_width":"","delta_height":""},template:{desc:"Vlo\u017ei\u0165 preddefinovan\u00fd obsah zo \u0161abl\u00f3ny"},visualchars:{desc:"Zobrazenie skryt\u00fdch znakov zap/vyp"},spellchecker:{desc:"Prepn\u00fa\u0165 kontrolu pravopisu",menu:"Nastavenie kontroly pravopisu","ignore_word":"Vynecha\u0165 slovo","ignore_words":"Vynecha\u0165 v\u0161etky",langs:"Jazyky",wait:"\u010cakajte pros\u00edm...",sug:"Ponuky","no_sug":"\u017diadne ponuky","no_mpell":"Bez pravopisn\u00fdch ch\u00fdb.","learn_word":"Nau\u010di\u0165 slovo"},pagebreak:{desc:"Vlo\u017ei\u0165 zalomenie str\u00e1nky."},advlist:{types:"Typ",def:"Predvolen\u00fd","lower_alpha":"Mal\u00e9 p\u00edsmen\u00e1","lower_greek":"Mal\u00e9 gr\u00e9cke p\u00edsmen\u00e1","lower_roman":"Mal\u00e9 r\u00edmske \u010d\u00edslice","upper_alpha":"Ve\u013ek\u00e9 p\u00edsmen\u00e1","upper_roman":"Ve\u013ek\u00e9 r\u00edmske \u010d\u00edslice",circle:"Kr\u00fa\u017eok",disc:"Pln\u00e9 koliesko",square:"\u0160tvor\u010dek"},colors:{"333300":"Tmavo olivov\u00e1","993300":"Tmavo oran\u017eov\u00e1","000000":"\u010cierna","003300":"Tmavo zelen\u00e1","003366":"Tmavo az\u00farov\u00e1","000080":"N\u00e1morn\u00edcka modr\u00e1","333399":"Indigo modr\u00e1","333333":"Tmavo siv\u00e1","800000":"Tmavo \u010derven\u00e1",FF6600:"Oran\u017eov\u00e1","808000":"Olivov\u00e1","008000":"Zelen\u00e1","008080":"Modrozelen\u00e1","0000FF":"Modr\u00e1","666699":"\u0160edomodr\u00e1","808080":"Siv\u00e1",FF0000:"\u010cerven\u00e1",FF9900:"Jant\u00e1rov\u00e1","99CC00":"\u017dltozelen\u00e1","339966":"Morsky zelen\u00e1","33CCCC":"Tyrkysov\u00e1","3366FF":"Kr\u00e1\u013eovsk\u00e1 modr\u00e1","800080":"Nachov\u00e1","999999":"Svetlo siv\u00e1",FF00FF:"Purpurov\u00e1",FFCC00:"Zlat\u00e1",FFFF00:"\u017dlt\u00e1","00FF00":"Limetkov\u00e1","00FFFF":"Vodov\u00e1","00CCFF":"Nebesk\u00e1 modr\u00e1","993366":"Hned\u00e1",C0C0C0:"Strieborn\u00e1",FF99CC:"Ru\u017eov\u00e1",FFCC99:"Brosky\u0148ov\u00e1",FFFF99:"Svetlo\u017elt\u00e1",CCFFCC:"Svetlo zelen\u00e1",CCFFFF:"Svetlo az\u00farov\u00e1","99CCFF":"Svetl\u00e1 nebesk\u00e1 modr\u00e1",CC99FF:"Slivkov\u00e1",FFFFFF:"Biela"},aria:{"rich_text_area":"Oblas\u0165 s form\u00e1tovan\u00fdm textom"},wordcount:{words:"Po\u010det slov: "}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sl.js
new file mode 100644
index 000000000..26d858ed5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sl:{common:{"more_colors":"Ve\u010d barv","invalid_data":"Napaka: vne\u0161ene so bile nepravilne vrednosti, ozna\u010dene so z rde\u010do.","popup_blocked":"\u017dal va\u0161e orodje za prepre\u010devanje odpiranja neza\u017eelenih oken (popup-blocker) ne omogo\u010da prikaza pomo\u017enega okna izbranega orodja. Prepre\u010devanje odpiranja oken morate onemogo\u010diti.","clipboard_no_support":"Trenutno ni podporto v va\u0161em brskalniku. Uporabite bli\u017enjice tipkovnice.","clipboard_msg":"Delo z odlo\u017ei\u0161\u010dem ni mogo\u010de v tem brskalniku. Lahko uporabljate kombinacije tipk Ctrl+X, Ctrl+C, Ctrl+V.\n\u017delite ve\u010d informacij o tem?","not_set":"-- ni nastavljeno --","class_name":"Razred",browse:"Prebrskaj",close:"Zapri",cancel:"Prekli\u010di",update:"Posodobi",insert:"Vstavi",apply:"Uporabi","edit_confirm":"\u017delite uporabiti na\u010din \\\'videz ne vara\\\' (WYSIWYG) za to vnosno polje?","invalid_data_number":"{#field} mora biti veljavno \u0161tevilo","invalid_data_min":"{#field} mora biti ve\u010dje od {#min}","invalid_data_size":"{#field} mora biti \u0161tevilo ali odstotek",value:"(vrednost)"},contextmenu:{full:"Polno",right:"Desno",center:"Sredina",left:"Levo",align:"Poravnava"},insertdatetime:{"day_short":"ned,pon,tor,sre,\u010det,pet,sob,ned","day_long":"nedelja,ponedeljek,torek,sreda,\u010detrtek,petek,sobota,nedelja","months_short":"jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec","months_long":"januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december","inserttime_desc":"Vstavi \u010das","insertdate_desc":"Vstavi datum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"Natisni"},preview:{"preview_desc":"Predogled"},directionality:{"rtl_desc":"Smer od desne proti levi","ltr_desc":"Smer od leve proti desni"},layer:{content:"Nov sloj...","absolute_desc":"Preklop absolutnega polo\u017eaja","backward_desc":"Premakni v ozadje","forward_desc":"Premakni v ospredje","insertlayer_desc":"Vstavi nov sloj"},save:{"save_desc":"Shrani","cancel_desc":"Prekli\u010di vse spremembe"},nonbreaking:{"nonbreaking_desc":"Vstavi nedeljivi presledek"},iespell:{download:"ieSpell ni zaznan. \u017delite, da ga namestim?","iespell_desc":"Za\u017eeni preverjanje \u010drkovanja"},advhr:{"delta_height":"spremeba_vi\u0161ine","delta_width":"sprememba_\u0161irine","advhr_desc":"Vodoravna \u010drta"},emotions:{"delta_height":"delta_vi\u0161ina","delta_width":"delta_\u0161irina","emotions_desc":"Sme\u0161ki"},searchreplace:{"replace_desc":"Najdi/zamenjaj","search_desc":"Najdi","delta_width":"","delta_height":""},advimage:{"image_desc":"Vstavi/uredi sliko","delta_width":"","delta_height":""},advlink:{"link_desc":"Vstavi/uredi povezavo","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Vstavi/uredi atribute","ins_desc":"Vstavljeno","del_desc":"Izbrisano","acronym_desc":"Kratica","abbr_desc":"Okraj\u0161ava","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Uredi sloge CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Operacija prilepi je sedaj v na\u010dinu \"golo besedilo\". \u010ce jo \u017eelite vrniti v obi\u010dajen na\u010din, kliknite \u0161e enkrat.","plaintext_mode_sticky":"Operacija prilepi je sedaj v na\u010dinu \"golo besedilo\". \u010ce jo \u017eelite vrniti v obi\u010dajen na\u010din, kliknite \u0161e enkrat. Po izvedbi lepljenja se bo nastavitev povrnila v obi\u010dajen na\u010din.","selectall_desc":"Izberi vse","paste_word_desc":"Prilepi iz Word-a","paste_text_desc":"Prilepi kot golo besedilo"},"paste_dlg":{"word_title":"Uporabite kombinacijo tipk CTRL+V, da prilepite vsebino v okno.","text_linebreaks":"Obdr\u017ei prelome vrstic","text_title":"Uporabite kombinacijo tipk CTRL+V, da prilepite vsebino v okno."},table:{"cellprops_delta_width":"100",cell:"Celica",col:"Stolpec",row:"Vrstica",del:"Odstrani tabelo","copy_row_desc":"Kopiraj vrstico","cut_row_desc":"Izre\u017ei vrstico","paste_row_after_desc":"Prilepi vrstico po","paste_row_before_desc":"Prilepi vrstico pred","props_desc":"Lastnosti tabele","cell_desc":"Lastnosti celice","row_desc":"Lastnosti vrstice","merge_cells_desc":"Spoji celice","split_cells_desc":"Razcepi celico","delete_col_desc":"Odstrani stolpec","col_after_desc":"Vstavi stolpec po","col_before_desc":"Vstavi stolpec pred","delete_row_desc":"Odstrani vrstico","row_after_desc":"Vstavi vrstico pod","row_before_desc":"Vstavi vrstico nad",desc:"Vstavi/posodobi tabelo","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u010ce povrnete shranjeno vsebino, boste prepisali trenutno vsebino urejevalnika.nnSte prepri\u010dani, da \u017eelite nadaljevati?","restore_content":"Povrni na zadnje shranjeno vsebino.","unload_msg":"\u010ce nadaljujete, bodo spremembe izgubljene."},fullscreen:{desc:"Preklopi celozaslonski na\u010din"},media:{"delta_height":"delta_\u0161irina","delta_width":"delta_\u0161irina",edit:"Uredi multimedijsko vsebino",desc:"Vstavi / uredi multimedijsko vsebino"},fullpage:{desc:"Lastnosti dokumenta","delta_width":"sprememba_\u0161irine","delta_height":"sprememba_vi\u0161ine"},template:{desc:"Vstavi pripravljeno vsebino predloge"},visualchars:{desc:"Preklopi prikaz nadzornih znakov."},spellchecker:{desc:"Preklopi \u010drkovalnik",menu:"Nastavitve \u010drkovalnika","ignore_word":"Prezri besedo","ignore_words":"Prezri vse",langs:"Jeziki",wait:"Prosim po\u010dakaj...",sug:"Predlogi","no_sug":"Ni predlogov","no_mpell":"Napa\u010dnega \u010drkovanja nisem na\u0161el.","learn_word":"Zapomni si besedo"},pagebreak:{desc:"Vstavi lom strani."},advlist:{types:"Tipi",def:"Privzeto","lower_alpha":"Mali znaki","lower_greek":"Male gr\u0161ke \u010drke","lower_roman":"Male latinske \u010drke","upper_alpha":"Veliki znaki","upper_roman":"Velike latinske \u010drke",circle:"Krog",disc:"Disk",square:"Kvadrat"},colors:{"333300":"Temno olivna","993300":"Za\u017egano oran\u017ena","000000":"\u010crna","003300":"Temno zelena","003366":"Sinje temna","000080":"Mornarsko modra","333399":"Indigo","333333":"Zelo temno siva","800000":"Kostanjevo rde\u010da",FF6600:"Oran\u017ena","808000":"Olivna","008000":"Zelena","008080":"Temno sinje modra","0000FF":"Modra","666699":"Sivo modra","808080":"Siva",FF0000:"Rde\u010da",FF9900:"Jantarna","99CC00":"Rumeno zelena","339966":"Morsko zelena","33CCCC":"Turkizna","3366FF":"Kraljevsko modra","800080":"Vijoli\u010dna","999999":"Srednje siva",FF00FF:"Svetlo vijoli\u010dna",FFCC00:"Zlata",FFFF00:"Rumena","00FF00":"Citronsko zelena","00FFFF":"Akvarijsko modra","00CCFF":"Nebe\u0161ko modra","993366":"Rjava",C0C0C0:"Srebrna",FF99CC:"Roza",FFCC99:"Mareli\u010dna",FFFF99:"Svetlo rumena",CCFFCC:"Bledo zelena",CCFFFF:"Bledo turkizna","99CCFF":"Svetlo nebe\u0161ko modra",CC99FF:"Slivova",FFFFFF:"Bela"},aria:{"rich_text_area":"Polje z obogatenim besedilom"},wordcount:{words:"Besed:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sq.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sq.js
new file mode 100644
index 000000000..c3fa4687c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sq.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sq:{common:{"more_colors":"M\u00eb shum\u00eb ngjyra","invalid_data":"Gabim: Keni futur vlera t\u00eb pavlefshme, t\u00eb cilat jan\u00eb sh\u00ebnuar me t\u00eb kuqe.","popup_blocked":"Ju k\u00ebrkojm\u00eb ndjes\u00eb, por bllokuesi i popup-eve ka bllokuar nj\u00eb dritare q\u00eb ofron funksjonalitet p\u00ebr programin. Duhet t\'a \u00e7aktivizoni bllokuesin e popup-eve n\u00eb m\u00ebnyr\u00eb q\u00eb t\'i p\u00ebrdorni opsionet.","clipboard_no_support":"Aktualisht nuk suportohet nga Shfletuesi juaj, p\u00ebrdorni tastjer\u00ebn.","clipboard_msg":"Kopja/Prerja/Ngjitja nuk suportohen n\u00eb Mozilla dhe Firefox.\nD\u00ebshironi m\u00eb shum\u00eb informacione p\u00ebr k\u00ebt\u00eb \u00e7\u00ebshtje?","not_set":"-- pa v\u00ebn\u00eb --","class_name":"Klasa",browse:"Shfleto",close:"Mbyll",cancel:"Anulo",update:"Rifresko",insert:"Fut",apply:"Zbato","edit_confirm":"Doni t\u00eb p\u00ebrdorni m\u00ebnyr\u00ebn WYSIWYG p\u00ebr k\u00ebt\u00eb tekst?","invalid_data_number":"{#field} duhet t\u00eb jet\u00eb num\u00ebr","invalid_data_min":"{#field} duhet t\u00eb jet\u00eb num\u00ebr m\u00eb i madh se {#min}","invalid_data_size":"{#field} duhet t\u00eb jet\u00eb num\u00ebr ose p\u00ebrqindje",value:"(vler\u00eb)"},contextmenu:{full:"I Plot\u00eb",right:"Djathtas",center:"Qend\u00ebr",left:"Majtas",align:"Drejtimi"},insertdatetime:{"day_short":"Dje,H\u00ebn,Mar,M\u00ebr,Enj,Pre,Sht,Dje","day_long":"E Djel\u00eb,E H\u00ebn\u00eb,E Mart\u00eb,E M\u00ebrkur\u00eb,E Enjte,E Premte,E Shtun\u00eb,E Djel\u00eb","months_short":"Jan,Shk,Mar,Pri,Maj,Qer,Kor,Gus,Sht,Tet,N\u00ebn,Dhj","months_long":"Janar,Shkurt,Mars,Prill,Maj,Qershor,Korrik,Gusht,Shtator,Tetor,N\u00ebntor,Dhjetor","inserttime_desc":"Fut or\u00ebn","insertdate_desc":"Fut dat\u00ebn","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%y"},print:{"print_desc":"Printo"},preview:{"preview_desc":"Paraqitje"},directionality:{"rtl_desc":"Drejtimi djathtas-majtas","ltr_desc":"Drejtimi majtas-djathtas"},layer:{content:"Shtres\u00eb e re...","absolute_desc":"Aktivizo/\u00e7aktivizo pozicionimin absolut","backward_desc":"L\u00ebviz prapa","forward_desc":"L\u00ebviz para","insertlayer_desc":"Fut shtres\u00eb t\u00eb re"},save:{"save_desc":"Ruaj","cancel_desc":"Anuloji t\u00eb gjitha ndryshimet"},nonbreaking:{"nonbreaking_desc":"Fut hap\u00ebsir\u00eb"},iespell:{download:"ieSpell nuk u detektua. D\u00ebshironi ta instaloni?","iespell_desc":"Kontrollo p\u00ebr gabime drejt\u00ebshkrimore"},advhr:{"advhr_desc":"Linj\u00eb horizontale","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emocionet","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"K\u00ebrko/Z\u00ebvend\u00ebso","search_desc":"K\u00ebrko","delta_width":"","delta_height":""},advimage:{"image_desc":"Fut/edito foto","delta_width":"","delta_height":""},advlink:{"link_desc":"Fut/edito lidhje","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Fut/Edito Tipare","ins_desc":"Futje","del_desc":"Fshirje","acronym_desc":"Akronim","abbr_desc":"Shkurtim","cite_desc":"Citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edito Stilet CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Ngjitja tani \u00ebsht\u00eb e thjesht\u00eb. Kliko p\u00ebrs\u00ebri p\u00ebr tu kthyer n\u00eb m\u00ebnyr\u00ebn standarte.","plaintext_mode_sticky":"Ngjitja tani \u00ebsht\u00eb e thjesht\u00eb. Kliko p\u00ebrs\u00ebri p\u00ebr tu kthyer n\u00eb m\u00ebnyr\u00ebn standarte. Pasi ngjisni di\u00e7ka, do t\u00eb ktheheni p\u00ebrs\u00ebri n\u00eb m\u00ebnyr\u00ebn standarte.","selectall_desc":"Zgjidhi t\u00eb gjitha","paste_word_desc":"Ngjit nga Word","paste_text_desc":"Ngjit si Tekst"},"paste_dlg":{"word_title":"P\u00ebrdor CTRL+V p\u00ebr t\u00eb ngjitur tekstin.","text_linebreaks":"Ruaj linjat e reja","text_title":"P\u00ebrdor CTRL+V p\u00ebr t\u00eb ngjitur tekstin."},table:{cell:"Qeliz\u00eb",col:"Kolon\u00eb",row:"Rresht",del:"Fshi tabel\u00ebn","copy_row_desc":"Kopjo rreshtin","cut_row_desc":"Prit rreshtin","paste_row_after_desc":"Ngjite rreshtin pas","paste_row_before_desc":"Ngjite rreshtin p\u00ebrpara","props_desc":"Tiparet e tabel\u00ebs","cell_desc":"Tiparet e qeliz\u00ebs","row_desc":"Tiparet e rreshtit","merge_cells_desc":"Bashkoji qelizat","split_cells_desc":"Ndaji qelizat e bashkuara","delete_col_desc":"Fshi kolon\u00ebn","col_after_desc":"Fut kolon\u00eb pas","col_before_desc":"Fut kolon\u00eb p\u00ebrpara","delete_row_desc":"Fshi rreshtin","row_after_desc":"Fut rresht pas","row_before_desc":"Fut rresht p\u00ebrpara",desc:"Fut nj\u00eb tabel\u00eb t\u00eb re","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"N\u00ebse riktheni versionin e ruajtur, do t\u00eb humbisni p\u00ebrmbajtjen q\u00eb ndodhet aktualisht n\u00eb editor.\n\nJeni t\u00eb sigurt q\u00eb doni ta riktheni?","restore_content":"Riktheni p\u00ebrmbajtjen e ruajtur.","unload_msg":"Ndryshimet q\u00eb keni b\u00ebr\u00eb do t\u00eb humbasin n\u00ebse largoheni nga kjo faqe."},fullscreen:{desc:"Aktivizo/\u00e7aktivizo pamjen e plot\u00eb"},media:{edit:"Edito media",desc:"Fut / edito media","delta_height":"","delta_width":""},fullpage:{desc:"Tiparet e dokumentit","delta_width":"","delta_height":""},template:{desc:"Fut p\u00ebrmbajtje shabllon"},visualchars:{desc:"Karakteret e kontrollit vizual: on/off."},spellchecker:{desc:"Aktivizo/\u00e7aktivizo kontrolluesin e gabimeve",menu:"Tiparet e kontrolluesit t\u00eb gabimeve","ignore_word":"Injoro fjal\u00ebn","ignore_words":"Injoroji t\u00eb gjitha",langs:"Gjuh\u00ebt",wait:"Ju lutem prisni...",sug:"Sygjerimet","no_sug":"Asnj\u00eb sygjerim","no_mpell":"Nuk u gjet asnj\u00eb gabim.","learn_word":"M\u00ebso fjal\u00ebn"},pagebreak:{desc:"Fut thyerje faqeje."},advlist:{types:"Tipet",def:"Paracaktuar","lower_alpha":"Alf. i Vog\u00ebl","lower_greek":"Grek i Vog\u00ebl","lower_roman":"Roman i Vog\u00ebl","upper_alpha":"Alf. i Madh","upper_roman":"Roman i Madh",circle:"Qark",disc:"Disk",square:"Katror"},colors:{"333300":"Ulli i err\u00ebt","993300":"Portokalli e djegur","000000":"I zi","003300":"E gjelb\u00ebr e err\u00ebt","003366":"Boj\u00ebqielli e err\u00ebt","000080":"Blu marine","333399":"Indigo","333333":"Gri shum\u00eb e err\u00ebt","800000":"G\u00ebshtenj\u00eb",FF6600:"Portokalli","808000":"Ulli","008000":"E gjelb\u00ebr","008080":"Blu e gjelb\u00ebr","0000FF":"Blu","666699":"Blue gri","808080":"Gri",FF0000:"E kuqe",FF9900:"Qelibar","99CC00":"E gjelb\u00ebr e verdh\u00eb","339966":"E gjelb\u00ebr deti","33CCCC":"Gurkali","3366FF":"Blu mbret\u00ebrore","800080":"Vjollc\u00eb","999999":"Gri e mesme",FF00FF:"Magenta",FFCC00:"Flori",FFFF00:"E verdh\u00eb","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Blu qielli","993366":"Boj\u00ebkafe",C0C0C0:"Argjend",FF99CC:"Roz\u00eb",FFCC99:"Pjeshk\u00eb",FFFF99:"E verdh\u00eb e hapur",CCFFCC:"E gjelb\u00ebr e zbeht\u00eb",CCFFFF:"Cyan e zbeht\u00eb","99CCFF":"Blu qielli e hapur",CC99FF:"Kumbull",FFFFFF:"E bardh\u00eb"},aria:{"rich_text_area":"Zon\u00eb e Pasur"},wordcount:{words:"Fjal\u00eb:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sr.js
new file mode 100644
index 000000000..18166540e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sr:{common:{"more_colors":"Jo\u0161 boja","invalid_data":"Gre\u0161ka: Une\u0161ene su nedozvoljene vrednosti, i ozna\u010dene su crvenom bojom.","popup_blocked":"\u017dao nam je, izgleda da je va\u0161 popup-bloker onemogu\u0107io popup prozor u sklopu ovog programa. Morate isklju\u010diti blokiranje popup prozora da bi u potpunosti iskoristili ovu alatku.","clipboard_no_support":"Va\u0161 web \u010dita\u0161 trenutno ne podr\u017eava ovo, upotrebite pre\u010dice na tastaturi.","clipboard_msg":"Kopiraj/Iseci/Zalepi nije omogu\u0107eno u Mozilla i Firefox web \u010dita\u010dima.\n\u017delite li vi\u0161e informacija o ovom problemu?","not_set":"---","class_name":"Klasa",browse:"Potra\u017ei",close:"Zatvori",cancel:"Odustani",update:"A\u017euriraj",insert:"Umetni",apply:"Primeni","edit_confirm":"Da li \u017eelite da koristite WYSIWYG re\u017eim rada za ovo tekstualno polje?","invalid_data_number":"{#field} mora biti broj","invalid_data_min":"{#field} mora biti broj ve\u0107i od {#min}","invalid_data_size":"{#field} mora biti broj ili procenat",value:"(value)"},contextmenu:{full:"Obostrano",right:"Desno",center:"Po sredini",left:"Levo",align:"Ravnanje"},insertdatetime:{"day_short":"ned,pon,uto,sre,\u010det,pet,sub,ned","day_long":"nedelja,ponedjeljak,utorak,sreda,\u010detvrtak,petak,subota,nedelja","months_short":"jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec","months_long":"januar,februar,mart,april,maj,juni,juli,avgust,septembar,oktobar,novembar,decembar","inserttime_desc":"Umetni vreme","insertdate_desc":"Umetni datum","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y."},print:{"print_desc":"\u0160tampaj"},preview:{"preview_desc":"Preliminarni prikaz"},directionality:{"rtl_desc":"Zdesna nalevo","ltr_desc":"Sleva nadesno"},layer:{content:"Novi sloj...","absolute_desc":"Uklju\u010di/Isklju\u010di apsolutno pozicioniranje","backward_desc":"Pomeri unazad","forward_desc":"Pomeri unapred","insertlayer_desc":"Umetni novi sloj"},save:{"save_desc":"Sa\u010duvaj","cancel_desc":"Odustani od svih promena"},nonbreaking:{"nonbreaking_desc":"Ubaci neprelomivi razmak"},iespell:{download:"ieSpell (za proveru pravopisa) nije instaliran. \u017delite li da ga instalirate sada?","iespell_desc":"Pokreni proveru pravopisa"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Horizontalna linija"},emotions:{"delta_height":"","delta_width":"","emotions_desc":"Smajli"},searchreplace:{"replace_desc":"Prona\u0111i/Zameni","delta_width":"","delta_height":"","search_desc":"Prona\u0111i"},advimage:{"delta_width":"50","image_desc":"Umetni/Uredi sliku","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Umetni/Uredi link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Umetni/Uredi atribute","ins_desc":"Umetanje","del_desc":"Brisanje","acronym_desc":"Akronim","abbr_desc":"Skra\u0107enica","cite_desc":"Citat"},style:{"delta_height":"","delta_width":"50",desc:"Uredi CSS stil"},paste:{"plaintext_mode":"\'Zalepi\' je sada u re\u017eimu rada sa obi\u010dnim tekstom. Kliknite ponovo za povratak u standardni re\u017eim.","plaintext_mode_sticky":"\'Zalepi\' je sada u re\u017eimu rada sa obi\u010dnim tekstom. Kliknite ponovo za povratak u standardni re\u017eim. Nakon \u0161to zalepite ne\u0161to bi\u0107ete automatski vra\u0107eni u standardni re\u017eim.","selectall_desc":"Odaberi sve","paste_word_desc":"Zalepi iz Worda","paste_text_desc":"Zalepi kao obi\u010dan tekst"},"paste_dlg":{"word_title":"Koristite CTRL V na tastaturi da zalepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prelome linija","text_title":"Koristite CTRL+V na tastaturi da zalepite tekst u prozor."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"\u0106elija",col:"Kolona",row:"Red",del:"Obri\u0161i tabelu","copy_row_desc":"Kopiraj red","cut_row_desc":"Iseci red","paste_row_after_desc":"Zalepi red iza","paste_row_before_desc":"Zalepi red ispred","props_desc":"Osobine tabele","cell_desc":"Osobine \u0107elije","row_desc":"Osobine reda","merge_cells_desc":"Spoj \u0107elije","split_cells_desc":"Razdvoj spojene \u0107elije","delete_col_desc":"Ukloni kolonu","col_after_desc":"Ubaci kolonu iza","col_before_desc":"Ubaci kolonu ispred","delete_row_desc":"Obri\u0161i red","row_after_desc":"Ubaci red iza","row_before_desc":"Ubaci red ispred",desc:"Umetni novu tabelu"},autosave:{"warning_message":"Ako povratite sa\u010duvani sadr\u017eaj, izgubi\u0107ete sav sadr\u017eaj koji je trenutno u editoru.\n\nDa li ste sigurni da \u017eelite da povratite sa\u010duvani sadr\u017eaj?","restore_content":"Povrati automatski-sa\u010duvan sadr\u017eaj","unload_msg":"Promene koje ste napravili bi\u0107e poni\u0161tene ako napustite ovu stranicu."},fullscreen:{desc:"Uklju\u010di/Isklju\u010di prikaz preko celog ekrana"},media:{"delta_height":"","delta_width":"",edit:"Uredi integrisani multimedijalni sadr\u017eaj",desc:"Umetni/Uredi integrisani multimedijalni sadr\u017eaj"},fullpage:{desc:"Osobine dokumenta","delta_width":"","delta_height":""},template:{desc:"Umetni predefinisani sadr\u017eaj \u0161ablona"},visualchars:{desc:"Vizuelni kontrolni simboli uklju\u010deni/isklju\u010deni."},spellchecker:{desc:"Uklju\u010di/Isklju\u010di proveru pravopisa",menu:"Pode\u0161avanja za proveru pravopisa","ignore_word":"Zanemari re\u010d","ignore_words":"Zanemari sve",langs:"Jezici",wait:"Sa\u010dekajte...",sug:"Predlozi","no_sug":"Nema predloga","no_mpell":"Nije prona\u0111ena nijedna pravopisna gre\u0161ka.","learn_word":"Nau\u010di re\u010d"},pagebreak:{desc:"Umetni prelom strane"},advlist:{types:"Vrste",def:"Podrazumevano","lower_alpha":"Mala slova abecede","lower_greek":"Mala gr\u010dka slova","lower_roman":"Rimski br. malim slovima","upper_alpha":"Velika slova abecede","upper_roman":"Rimski br. velikim slovima",circle:"Prazan kru\u017ei\u0107",disc:"Pun kru\u017ei\u0107",square:"Kvadrati\u0107"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Re\u010di:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sv.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sv.js
new file mode 100644
index 000000000..a2a3d77ff
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sv:{common:{"more_colors":"Fler f\u00e4rger","invalid_data":"Fel: Inkorrekta v\u00e4rden har matats in, dessa \u00e4r markerade i r\u00f6tt.","popup_blocked":"Popup blockerare detekterad. St\u00e4ng av den s\u00e5 att dialogerna kan \u00f6ppnas.","clipboard_no_support":"Funktionen \u00e4r inte tillg\u00e4nglig i din webbl\u00e4sare, anv\u00e4nd tangentbordsgenv\u00e4garna i st\u00e4llet.","clipboard_msg":"Kopiera/klipp ut/klistra in \u00e4r inte tillg\u00e4ngligt i din webbl\u00e4sare.\nVill du veta mer?","not_set":"-- Inte satt --","class_name":"Klass",browse:"Bl\u00e4ddra",close:"St\u00e4ng",cancel:"Avbryt",update:"Uppdatera",insert:"Infoga",apply:"Applicera","edit_confirm":"Vill du anv\u00e4nda WYSIWYG f\u00f6r denna textarea?","invalid_data_number":"{#field} m\u00e5ste vara ett nummer","invalid_data_min":"{#field} m\u00e5ste vara ett nummer st\u00f6rren \u00e4n {#min}","invalid_data_size":"{#field} m\u00e5ste vara ett nummer eller i procent",value:"(V\u00e4rde)"},contextmenu:{full:"Utfyllnad",right:"H\u00f6ger",center:"Centrerad",left:"V\u00e4nster",align:"Justering"},insertdatetime:{"day_short":"S\u00f6n,M\u00e5n,Tis,Ons,Tors,Fre,L\u00f6r,S\u00f6n","day_long":"S\u00f6ndag,M\u00e5ndag,Tisdag,Onsdag,Torsdag,Fredag,L\u00f6rdag,S\u00f6ndag","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","months_long":"Januari,Februari,Mars,April,Maj,Juni,Juli,Augusti,September,Oktober,November,December","inserttime_desc":"Infoga tid","insertdate_desc":"Infoga datum","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d "},print:{"print_desc":"Skriv ut"},preview:{"preview_desc":"F\u00f6rhandsgranska"},directionality:{"rtl_desc":"Skriftl\u00e4ge - h\u00f6ger till v\u00e4nster","ltr_desc":"Skriftl\u00e4ge - v\u00e4nster till h\u00f6ger"},layer:{content:"Nytt lager...","absolute_desc":"Sl\u00e5 av/p\u00e5 absolut positionering","backward_desc":"Flytta bak\u00e5t","forward_desc":"Flytta fram\u00e5t","insertlayer_desc":"Infoga nytt lager"},save:{"save_desc":"Spara","cancel_desc":"Hoppa \u00f6ver alla f\u00f6r\u00e4ndringar"},nonbreaking:{"nonbreaking_desc":"Infoga icke radbrytande mellanslag"},iespell:{download:"ieSpell kunde inte hittas, vill du installera denna nu?","iespell_desc":"R\u00e4ttstava"},advhr:{"advhr_desc":"Horisontell skiljelinje","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Smileys","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"S\u00f6k/ers\u00e4tt","search_desc":"S\u00f6k","delta_width":"","delta_height":""},advimage:{"image_desc":"Infoga/redigera bild","delta_width":"","delta_height":""},advlink:{"link_desc":"Infoga/redigera l\u00e4nk","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Redigera attribut","ins_desc":"Markera som tillagt","del_desc":"Markera som struket","acronym_desc":"Akronym","abbr_desc":"F\u00f6rkortning","cite_desc":"citat","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Redigera inline CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Inklistring \u00e4r nu i textl\u00e4ge.","plaintext_mode_sticky":"Inklistring \u00e4r nu i textl\u00e4ge. Efter att du klistrat in kommer den att \u00e5terg\u00e5 till normall\u00e4ge.","selectall_desc":"Markera allt","paste_word_desc":"Klistra in fr\u00e5n Word","paste_text_desc":"Klistra in som text"},"paste_dlg":{"word_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster.","text_linebreaks":"Spara radbrytningar","text_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster."},table:{cell:"Cell",col:"Kolumn",row:"Rad",del:"Radera tabell","copy_row_desc":"Klistra in rad","cut_row_desc":"Klipp ut rad","paste_row_after_desc":"Klistra in rad efter","paste_row_before_desc":"Klistra in rad ovanf\u00f6r","props_desc":"Tabellinst\u00e4llningar","cell_desc":"Tabellcellsinst\u00e4llningar","row_desc":"Tabellradsinst\u00e4llningar","merge_cells_desc":"Sammanfoga celler","split_cells_desc":"Separera sammansatta celler","delete_col_desc":"Radera kolumn","col_after_desc":"Infoga kolumn efter","col_before_desc":"Infoga kolumn f\u00f6re","delete_row_desc":"Radera rad","row_after_desc":"Infoga ny rad efter","row_before_desc":"Infoga ny rad f\u00f6re",desc:"Infoga/redigera ny tabell","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"Om du \u00e5terskapar inneh\u00e5ll s\u00e5 kommer det nuvarande inneh\u00e5llet i f\u00e4ltet att raderas.\n\n\u00c4r du s\u00e4ker p\u00e5 att du vill g\u00f6ra detta?","restore_content":"\u00c5terskapa automatiskt sparat inneh\u00e5ll.","unload_msg":"De f\u00f6r\u00e4ndringar som du gjort kommer att g\u00e5 f\u00f6rlorade om du l\u00e4mnar sidan."},fullscreen:{desc:"Sl\u00e5 av/p\u00e5 fullsk\u00e4rmsl\u00e4ge"},media:{edit:"Redigera inb\u00e4ddad media",desc:"Infoga/redigera inb\u00e4ddad media","delta_height":"","delta_width":""},fullpage:{desc:"Dokumentinst\u00e4llningar","delta_width":"","delta_height":""},template:{desc:"Infoga en f\u00e4rdig mall"},visualchars:{desc:"Visa osynliga tecken"},spellchecker:{desc:"Sl\u00e5 av/p\u00e5 r\u00e4ttstavningskontroll",menu:"R\u00e4ttstavningsinst\u00e4llningar","ignore_word":"Ignorera ord","ignore_words":"Ignorera alla",langs:"Spr\u00e5k",wait:"Var god v\u00e4nta...",sug:"F\u00f6rslag","no_sug":"Inga f\u00f6rslag","no_mpell":"Inga felstavningar funna.","learn_word":"L\u00e4r ord"},pagebreak:{desc:"Infoga sidbrytning"},advlist:{types:"Typer",def:"Standard","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Cirkel",disc:"Disc",square:"Fyrkant"},colors:{"333300":"M\u00f6rkoliv","993300":"Br\u00e4ndorange","000000":"Svart","003300":"M\u00f6rkgr\u00f6n","003366":"M\u00f6rkazur","000080":"Marinbl\u00e5","333399":"Indigo","333333":"Mycket m\u00f6rkgr\u00e5","800000":"R\u00f6dbrun",FF6600:"Orange","808000":"Oliv","008000":"Gr\u00f6n","008080":"Kricka","0000FF":"Bl\u00e5","666699":"Gr\u00e5bl\u00e5","808080":"Gr\u00e5",FF0000:"R\u00f6d",FF9900:"B\u00e4rnsten","99CC00":"Gulgr\u00f6n","339966":"Havsbl\u00e5","33CCCC":"Turkos","3366FF":"Kungligtbl\u00e5tt","800080":"Lila","999999":"Medelgr\u00e5",FF00FF:"Magenta",FFCC00:"Guld",FFFF00:"Gul","00FF00":"Lime","00FFFF":"Vatten","00CCFF":"Himmelsbl\u00e5","993366":"Brun",C0C0C0:"Silver",FF99CC:"Rosa",FFCC99:"Periska",FFFF99:"Ljusgul",CCFFCC:"Blekgr\u00f6n",CCFFFF:"Blekcyan","99CCFF":"Ljus himmel",CC99FF:"Plommon",FFFFFF:"Vitt"},aria:{"rich_text_area":"Redigeringsarea"},wordcount:{words:"Ord:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sy.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sy.js
new file mode 100644
index 000000000..11d0520f5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/sy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({sy:{common:{"more_colors":"More Colors...","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not Set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert Time","insertdate_desc":"Insert Date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction Right to Left","ltr_desc":"Direction Left to Right"},layer:{content:"New layer...","absolute_desc":"Toggle Absolute Positioning","backward_desc":"Move Backward","forward_desc":"Move Forward","insertlayer_desc":"Insert New Layer"},save:{"save_desc":"Save","cancel_desc":"Cancel All Changes"},nonbreaking:{"nonbreaking_desc":"Insert Non-Breaking Space Character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Check Spelling"},advhr:{"delta_height":"","delta_width":"","advhr_desc":"Insert Horizontal Line"},emotions:{"emotions_desc":"\u0722\u0712\u0742\u0717\u0308\u0710","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","delta_width":"","delta_height":"","search_desc":"Find"},advimage:{"delta_width":"","image_desc":"Insert/Edit Image","delta_height":""},advlink:{"delta_height":"","delta_width":"","link_desc":"Insert/Edit Link"},xhtmlxtras:{"attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":"","attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation"},style:{"delta_height":"","delta_width":"",desc:"Edit CSS Style"},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."},table:{"merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":"",cell:"Cell",col:"Column",row:"Row",del:"Delete Table","copy_row_desc":"Copy Table Row","cut_row_desc":"Cut Table Row","paste_row_after_desc":"Paste Table Row After","paste_row_before_desc":"Paste Table Row Before","props_desc":"Table Properties","cell_desc":"Table Cell Properties","row_desc":"Table Row Properties","merge_cells_desc":"Merge Table Cells","split_cells_desc":"Split Merged Table Cells","delete_col_desc":"Delete Column","col_after_desc":"Insert Column After","col_before_desc":"Insert Column Before","delete_row_desc":"Delete Row","row_after_desc":"Insert Row After","row_before_desc":"Insert Row Before",desc:"Insert/Edit Table"},autosave:{"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?","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"\u072b\u071a\u0720\u0726 \u0720\u0710\u0723\u071f\u071d\u0721\u0710 \u0715\u072b\u072b\u072c\u0710 \u0721\u0720\u071d\u072c\u0710"},media:{edit:"\u0723\u071d\u0721\u072c\u0710 \u0715\u071a\u0712\u0742\u072b\u072c\u0710 \u0715\u0721\u071d\u0715\u071d\u0710",desc:"\u0721\u0725\u0712\u0742\u072a/\u0723\u071d\u0718\u0721 \u0721\u071d\u0715\u071d\u0710 \u071a\u0712\u0742\u071d\u072b\u072c\u0710","delta_height":"","delta_width":""},fullpage:{desc:"Document Properties","delta_width":"","delta_height":""},template:{desc:"Insert Predefined Template Content"},visualchars:{desc:"Show/Hide Visual Control Characters"},spellchecker:{desc:"Toggle Spell Checker",menu:"Spell Checker Settings","ignore_word":"Ignore Word","ignore_words":"Ignore All",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No Suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert Page Break for Printing"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ta.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ta.js
new file mode 100644
index 000000000..bd4f3e9d4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ta.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ta:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"\u0b9e\u0bbe,\u0ba4\u0bbf,\u0b9a\u0bc6,\u0baa\u0bc1,\u0bb5\u0bbf,\u0bb5\u0bc6,\u0b9a","day_long":"\u0b9e\u0bbe\u0baf\u0bbf\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0ba4\u0bbf\u0b99\u0bcd\u0b95\u0b9f\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0b9a\u0bc6\u0bb5\u0bcd\u0bb5\u0bbe\u0baf\u0bcd\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0baa\u0bc1\u0ba4\u0ba9\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0bb5\u0bbf\u0baf\u0bbe\u0bb4\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0bb5\u0bc6\u0bb3\u0bcd\u0bb3\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8,\u0b9a\u0ba9\u0bbf\u0b95\u0bcd\u0b95\u0bbf\u0bb4\u0bae\u0bc8","months_short":"\u0b9c\u0ba9,\u0baa\u0bbf\u0baa\u0bcd,\u0bae\u0bbe\u0bb0\u0bcd,\u0b8f\u0baa\u0bcd,\u0bae\u0bc7,\u0b9c\u0bc2\u0ba9\u0bcd,\u0b9c\u0bc2\u0bb2\u0bc8,\u0b86\u0b95,\u0b9a\u0bc6\u0baa\u0bcd,\u0b85\u0b95\u0bcd,\u0ba8\u0bb5,\u0b9f\u0bbf\u0b9a","months_long":"\u0b9c\u0ba9\u0bb5\u0bb0\u0bbf,\u0baa\u0bbf\u0baa\u0bcd\u0bb0\u0bb5\u0bb0\u0bbf,\u0bae\u0bbe\u0bb0\u0bcd\u0b9a\u0bcd,\u0b8f\u0baa\u0bcd\u0bb0\u0bb2\u0bcd,\u0bae\u0bc7,\u0b9c\u0bc2\u0ba9\u0bcd,\u0b9c\u0bc2\u0bb2\u0bc8,\u0b86\u0b95\u0bb8\u0bcd\u0b9f\u0bcd,\u0b9a\u0bc6\u0baa\u0bcd\u0b9f\u0bae\u0bcd\u0baa\u0bb0\u0bcd,\u0b85\u0b95\u0bcd\u0b9f\u0bcb\u0baa\u0bb0\u0bcd,\u0ba8\u0bb5\u0bae\u0bcd\u0baa\u0bb0\u0bcd,\u0b9f\u0bbf\u0b9a\u0bae\u0bcd\u0baa\u0bb0\u0bcd","inserttime_desc":"\u0ba8\u0bc7\u0bb0\u0bae\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95","insertdate_desc":"\u0ba4\u0bc7\u0ba4\u0bbf \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u0b85\u0b9a\u0bcd\u0b9a\u0bbf\u0b9f\u0bc1\u0b95"},preview:{"preview_desc":"\u0bae\u0bc1\u0ba9\u0bcd-\u0ba8\u0bcb\u0b95\u0bcd\u0b95\u0bc1"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"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?.","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"\u0b9a\u0bca\u0bb2\u0bcd\u0bb2\u0bc8 \u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95","ignore_words":"\u0b85\u0ba9\u0bc8\u0ba4\u0bcd\u0ba4\u0bc8\u0baf\u0bc1\u0bae\u0bcd \u0baa\u0bc1\u0bb1\u0b95\u0bcd\u0b95\u0ba3\u0bbf\u0b95\u0bcd\u0b95",langs:"\u0bae\u0bca\u0bb4\u0bbf\u0b95\u0bb3\u0bcd",wait:"\u0ba4\u0baf\u0bb5\u0bc1\u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bc1 \u0b95\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc1\u0b95\u0bcd\u0b95...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"\u0baa\u0b95\u0bcd\u0b95\u0baa\u0bcd \u0baa\u0bbf\u0bb0\u0bbf\u0baa\u0bcd\u0baa\u0bc8\u0b9a\u0bcd \u0b9a\u0bca\u0bb0\u0bc1\u0b95\u0bc1\u0b95."},advlist:{types:"\u0bb5\u0b95\u0bc8\u0b95\u0bb3\u0bcd",def:"\u0b89\u0bb3\u0bcd\u0bb3\u0bbf\u0bb0\u0bc1\u0baa\u0bcd\u0baa\u0bc1","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"\u0bb5\u0b9f\u0bcd\u0b9f\u0bae\u0bcd",disc:"Disc",square:"\u0b9a\u0ba4\u0bc1\u0bb0\u0bae\u0bcd"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text \u0baa\u0b95\u0bc1\u0ba4\u0bbf"},wordcount:{words:"\u0b9a\u0bca\u0bb1\u0bcd\u0b95\u0bb3\u0bcd:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/te.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/te.js
new file mode 100644
index 000000000..6919d55c8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/te.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({te:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"Currently not supported by your browser, use keyboard shortcuts instead.","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- Not set --","class_name":"Class",browse:"Browse",close:"Close",cancel:"Cancel",update:"Update",insert:"Insert",apply:"Apply","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/th.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/th.js
new file mode 100644
index 000000000..73b113ac6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/th.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({th:{common:{"more_colors":"\u0e2a\u0e35\u0e2d\u0e37\u0e48\u0e19\u0e46","invalid_data":"\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14: \u0e1b\u0e49\u0e2d\u0e19\u0e04\u0e48\u0e32\u0e43\u0e19\u0e0a\u0e49\u0e2d\u0e07\u0e2a\u0e35\u0e41\u0e14\u0e07\u0e43\u0e2b\u0e49\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07","popup_blocked":"\u0e02\u0e2d\u0e2d\u0e20\u0e31\u0e22\u0e41\u0e15\u0e48\u0e40\u0e23\u0e32\u0e1e\u0e1a\u0e27\u0e48\u0e32\u0e04\u0e38\u0e13\u0e21\u0e35\u0e23\u0e30\u0e1a\u0e1a\u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e1b\u0e4a\u0e2d\u0e1b\u0e2d\u0e31\u0e1b \u0e04\u0e38\u0e13\u0e08\u0e30\u0e15\u0e49\u0e2d\u0e07\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e01\u0e32\u0e23\u0e1a\u0e25\u0e47\u0e2d\u0e04\u0e1b\u0e4a\u0e2d\u0e1b\u0e2d\u0e31\u0e1b","clipboard_no_support":"\u0e02\u0e13\u0e30\u0e19\u0e35\u0e49\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e2a\u0e19\u0e31\u0e1a\u0e2a\u0e19\u0e38\u0e19\u0e40\u0e1a\u0e23\u0e32\u0e40\u0e0b\u0e2d\u0e23\u0e4c\u0e02\u0e2d\u0e07\u0e04\u0e38\u0e13 \u0e43\u0e2b\u0e49\u0e43\u0e0a\u0e49\u0e41\u0e1b\u0e49\u0e19\u0e1e\u0e34\u0e21\u0e1e\u0e4c\u0e25\u0e31\u0e14\u0e41\u0e17\u0e19","clipboard_msg":"\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01 / \u0e15\u0e31\u0e14 / \u0e27\u0e32\u0e07\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e21\u0e35\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e43\u0e19 Mozilla \u0e41\u0e25\u0e30 Firefox.\nDo \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e19\u0e35\u0e49\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?","not_set":"-- \u0e44\u0e21\u0e48\u0e44\u0e14\u0e49\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 --","class_name":"css \u0e04\u0e25\u0e32\u0e2a",browse:"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e44\u0e1f\u0e25\u0e4c",close:"\u0e1b\u0e34\u0e14",cancel:"\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01",update:"\u0e2d\u0e31\u0e1e\u0e40\u0e14\u0e15",insert:"\u0e40\u0e1e\u0e34\u0e48\u0e21",apply:"\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19","edit_confirm":"\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e43\u0e0a\u0e49\u0e42\u0e2b\u0e21\u0e14 WYSIWYG \u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e02\u0e35\u0e22\u0e19\u0e1a\u0e17\u0e04\u0e27\u0e32\u0e21\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48 ?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u0e40\u0e15\u0e47\u0e21",right:"\u0e02\u0e27\u0e32",center:"\u0e01\u0e25\u0e32\u0e07",left:"\u0e0b\u0e49\u0e32\u0e22",align:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e08\u0e31\u0e14\u0e27\u0e32\u0e07"},insertdatetime:{"day_short":"\u0e2d\u0e32,\u0e08,\u0e2d\u0e31\u0e07,\u0e1e,\u0e1e\u0e24,\u0e28,\u0e2a,\u0e2d","day_long":"\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c,\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c,\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23,\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18,\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35,\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c,\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c,\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c","months_short":"\u0e21.\u0e04.,\u0e01.\u0e1e.,\u0e21\u0e35.\u0e04.,\u0e40\u0e21.\u0e22.,\u0e1e.\u0e04.,\u0e21\u0e34.\u0e22.,\u0e01.\u0e04.,\u0e2a.\u0e04.,\u0e01.\u0e22.,\u0e15.\u0e04.,\u0e1e.\u0e22.,\u0e18.\u0e04.","months_long":"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21,\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c,\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21,\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19,\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21,\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19,\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21,\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21,\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19,\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21,\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19,\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21","inserttime_desc":"\u0e41\u0e17\u0e23\u0e01\u0e40\u0e27\u0e25\u0e32","insertdate_desc":"\u0e41\u0e17\u0e23\u0e01\u0e27\u0e31\u0e19\u0e17\u0e35\u0e48","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u0e1e\u0e34\u0e21\u0e1e\u0e4c"},preview:{"preview_desc":"\u0e14\u0e39\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07"},directionality:{"rtl_desc":"\u0e2d\u0e48\u0e32\u0e19\u0e08\u0e32\u0e01\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22","ltr_desc":"\u0e2d\u0e48\u0e32\u0e19\u0e08\u0e32\u0e01\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32"},layer:{content:"\u0e40\u0e25\u0e40\u0e22\u0e2d\u0e23\u0e4c\u0e43\u0e2b\u0e21\u0e48...","absolute_desc":"\u0e2a\u0e25\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e27\u0e32\u0e07","backward_desc":"\u0e22\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e25\u0e31\u0e07","forward_desc":"\u0e22\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32","insertlayer_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e25\u0e40\u0e22\u0e2d\u0e23\u0e4c\u0e43\u0e2b\u0e21\u0e48"},save:{"save_desc":"\u0e1a\u0e31\u0e19\u0e17\u0e36\u0e01","cancel_desc":"\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e17\u0e38\u0e01\u0e2d\u0e22\u0e48\u0e32\u0e07"},nonbreaking:{"nonbreaking_desc":"\u0e41\u0e17\u0e23\u0e01\u0e2d\u0e31\u0e01\u0e02\u0e23\u0e30\u0e27\u0e48\u0e32\u0e07"},iespell:{download:"\u0e2b\u0e32\u0e01\u0e23\u0e30\u0e1a\u0e1a\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e04\u0e33\u0e1c\u0e34\u0e14\u0e44\u0e21\u0e48\u0e1e\u0e1a \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e15\u0e34\u0e14\u0e15\u0e31\u0e49\u0e07\u0e40\u0e14\u0e35\u0e4b\u0e22\u0e27\u0e19\u0e35\u0e49 ?","iespell_desc":"\u0e40\u0e23\u0e35\u0e22\u0e01\u0e43\u0e0a\u0e49\u0e15\u0e23\u0e27\u0e08\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14"},advhr:{"advhr_desc":"\u0e40\u0e2a\u0e49\u0e19\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0e44\u0e2d\u0e04\u0e2d\u0e19\u0e41\u0e2a\u0e14\u0e07\u0e2d\u0e32\u0e23\u0e21\u0e13\u0e4c","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0e04\u0e49\u0e19\u0e2b\u0e32/\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48","search_desc":"\u0e04\u0e49\u0e19\u0e2b\u0e32","delta_width":"","delta_height":""},advimage:{"image_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e23\u0e39\u0e1b","delta_width":"","delta_height":""},advlink:{"link_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e41\u0e2d\u0e17\u0e17\u0e23\u0e34\u0e1a\u0e34\u0e27","ins_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21","del_desc":"\u0e25\u0e1a","acronym_desc":"\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e22\u0e48\u0e2d","abbr_desc":"\u0e15\u0e31\u0e27\u0e22\u0e48\u0e2d","cite_desc":"\u0e01\u0e32\u0e23\u0e2d\u0e49\u0e32\u0e07\u0e2d\u0e34\u0e07","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0e41\u0e01\u0e49\u0e44\u0e02 CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14","paste_word_desc":"\u0e27\u0e32\u0e07\u0e08\u0e32\u0e01\u0e42\u0e1b\u0e23\u0e41\u0e01\u0e23\u0e21 Word","paste_text_desc":"\u0e27\u0e32\u0e07\u0e42\u0e14\u0e22\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e18\u0e23\u0e23\u0e21\u0e14\u0e32"},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"\u0e40\u0e0b\u0e25\u0e25\u0e4c",col:"\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c",row:"\u0e41\u0e16\u0e27",del:"\u0e25\u0e1a\u0e15\u0e32\u0e23\u0e32\u0e07","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"\u0e25\u0e1a\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c","col_after_desc":"\u0e41\u0e17\u0e23\u0e01\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e08\u0e32\u0e01\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e25\u0e31\u0e07","col_before_desc":"\u0e41\u0e17\u0e23\u0e01\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e19\u0e4c\u0e08\u0e32\u0e01\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32","delete_row_desc":"\u0e25\u0e1a\u0e41\u0e16\u0e27","row_after_desc":"\u0e41\u0e17\u0e23\u0e01\u0e41\u0e16\u0e27\u0e08\u0e32\u0e01\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e25\u0e31\u0e07","row_before_desc":"\u0e41\u0e17\u0e23\u0e01\u0e41\u0e16\u0e27\u0e08\u0e32\u0e01\u0e02\u0e49\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"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?.","restore_content":"Restore auto-saved content.","unload_msg":"\u0e01\u0e32\u0e23\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e41\u0e1b\u0e25\u0e07\u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e17\u0e33\u0e08\u0e30\u0e2b\u0e32\u0e22\u0e44\u0e1b\u0e2b\u0e32\u0e01\u0e04\u0e38\u0e13\u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e2b\u0e19\u0e49\u0e32\u0e19\u0e35\u0e49"},fullscreen:{desc:"\u0e2a\u0e25\u0e31\u0e1a\u0e44\u0e1b\u0e41\u0e2a\u0e14\u0e07\u0e41\u0e1a\u0e1a\u0e40\u0e15\u0e47\u0e21\u0e2b\u0e19\u0e49\u0e32"},media:{edit:"\u0e41\u0e01\u0e49\u0e44\u0e02\u0e21\u0e35\u0e40\u0e14\u0e35\u0e22",desc:"\u0e40\u0e1e\u0e34\u0e48\u0e21 / \u0e41\u0e01\u0e49\u0e44\u0e02 \u0e21\u0e35\u0e40\u0e14\u0e35\u0e22","delta_height":"","delta_width":""},fullpage:{desc:"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23","delta_width":"","delta_height":""},template:{desc:"\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23"},visualchars:{desc:"\u0e01\u0e32\u0e23\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23 \u0e40\u0e1b\u0e34\u0e14/\u0e1b\u0e34\u0e14"},spellchecker:{desc:"\u0e1b\u0e34\u0e14\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14\u0e04\u0e33",menu:"\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e01\u0e32\u0e23\u0e2a\u0e30\u0e01\u0e14\u0e04\u0e33","ignore_word":"\u0e25\u0e30\u0e40\u0e27\u0e49\u0e19\u0e1a\u0e32\u0e07\u0e04\u0e33","ignore_words":"\u0e25\u0e30\u0e40\u0e27\u0e49\u0e19\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14",langs:"\u0e20\u0e32\u0e29\u0e32",wait:"\u0e42\u0e1b\u0e23\u0e14\u0e23\u0e2d...",sug:"\u0e04\u0e33\u0e41\u0e19\u0e30\u0e19\u0e33","no_sug":"\u0e44\u0e21\u0e48\u0e21\u0e35\u0e04\u0e33\u0e41\u0e19\u0e30\u0e19\u0e33","no_mpell":"\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e23\u0e30\u0e1a\u0e1a\u0e2a\u0e30\u0e01\u0e14\u0e04\u0e33\u0e1c\u0e34\u0e14","learn_word":"Learn word"},pagebreak:{desc:"\u0e43\u0e2a\u0e48\u0e40\u0e2a\u0e49\u0e19\u0e41\u0e1a\u0e48\u0e07\u0e2b\u0e19\u0e49\u0e32"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tn.js
new file mode 100644
index 000000000..0b3eeaff3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({tn:{common:{"more_colors":"Mebala e mentsi","invalid_data":"Phoso: Gase-gone mo go tsentsweng, mo go tswailwe ka botshibidu.","popup_blocked":"Maitswarelo,mme re lemogile gore popup-blocker e tila gore window e fang pereko ya porokereme. O tla thoka go tila sekganedi sa popup mo saeteng gore o kgone go sologela-mosola thuloso e","clipboard_no_support":"Ga e letelelwe ke boraosara jwa gago gompieno, dirisa dikhutswe tsa kiboto.","clipboard_msg":"Kopa/Sega/Kgomaretsa ga e yo mo Mozila Firefox.\nA o batla molaetsa ka lebaka le?","not_set":"-- Ga ya Baakangwa --","class_name":"Tlase",browse:"Boraose",close:"Tswala",cancel:"Khansela",update:"Tokafatsa",insert:"Tsenya",apply:"Apolaya","edit_confirm":"Do you want to use the WYSIWYG mode for this textarea?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text"},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"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?.","restore_content":"Restore auto-saved content.","unload_msg":"The changes you made will be lost if you navigate away from this page."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tr.js
new file mode 100644
index 000000000..40b3d5af4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({tr:{common:{"more_colors":"Daha fazla renk","invalid_data":"Hata: Ge\u00e7ersiz de\u011fer girildi, bunlar k\u0131rm\u0131z\u0131yla i\u015faretlenmi\u015ftir.","popup_blocked":"\u00dczg\u00fcn\u00fcz, a\u00e7\u0131l\u0131r pencere engelleyiciniz uygulama i\u00e7in gerekli bir pencereyi engelledi. Bu arac\u0131 tam olarak kullanabilmek i\u00e7in a\u00e7\u0131l\u0131r pencere engelleyicisini kapat\u0131n\u0131z.","clipboard_no_support":"\u015eu an kulland\u0131\u011f\u0131n\u0131z taray\u0131c\u0131n\u0131z klavye k\u0131sayollar\u0131n\u0131 desteklememektedir.","clipboard_msg":"Mozilla Firefox da Kes/Kopyala/Yap\u0131\u015ft\u0131r \u00f6zelli\u011fi kullan\u0131lmamaktad\u0131r. \nBu konu hakk\u0131nda bilgi almak ister misiniz?","not_set":"-- Ayarlanmad\u0131 --","class_name":"S\u0131n\u0131f",browse:"G\u00f6zat",close:"Kapat",cancel:"\u0130ptal",update:"G\u00fcncelle",insert:"Ekle",apply:"Uygula","edit_confirm":"Metin giri\u015fi i\u00e7in WYSIWYG modunu kullanmak ister misiniz?","invalid_data_number":"{#field} rakam olmal\u0131","invalid_data_min":"{#field}, {#min} de\u011ferinden b\u00fcy\u00fck ve rakam olmal\u0131","invalid_data_size":"{#field} rakam veya y\u00fczde olmal\u0131",value:"(de\u011fer)"},contextmenu:{full:"Tam",right:"Sa\u011f",center:"Orta",left:"Sol",align:"Hizalama"},insertdatetime:{"day_short":"Paz,Pzt,Sal,\u00c7r\u015f,Per,Cum,Cts","day_long":"Pazar,Pazartesi,Sal\u0131,\u00c7ar\u015famba,Per\u015fembe,Cuma,Cumartesi","months_short":"Oca,\u015eub,Mar,Nis,May,Haz,Tem,A\u011fu,Eyl,Eki,Kas,Ara","months_long":"Ocak,\u015eubat,Mart,Nisan,May\u0131s,Haziran,Temmuz,A\u011fustos,Eyl\u00fcl,Ekim,Kas\u0131m,Aral\u0131k","inserttime_desc":"Saat ekle","insertdate_desc":"Tarih ekle","time_fmt":"%H:%M:%S","date_fmt":"%d-%m-%Y"},print:{"print_desc":"Yazd\u0131r"},preview:{"preview_desc":"\u00d6nizleme"},directionality:{"rtl_desc":"Soldan sa\u011fa y\u00f6nlendir","ltr_desc":"Sa\u011fdan sola y\u00f6nlendir"},layer:{content:"Yeni katman...","absolute_desc":"Mutlaka konumu de\u011fi\u015ftir","backward_desc":"Arkaya al","forward_desc":"\u00d6ne getir","insertlayer_desc":"Yeni katman ekle"},save:{"save_desc":"Kaydet","cancel_desc":"T\u00fcm de\u011fi\u015fiklikleri iptal et"},nonbreaking:{"nonbreaking_desc":"B\u00f6l\u00fcnemez bo\u015fluk karakteri ekle"},iespell:{download:"ieSpell bulunamad\u0131. \u015eimdi kurmak ister misiniz?","iespell_desc":"\u0130mla kontrol\u00fcn\u00fc ba\u015flat"},advhr:{"advhr_desc":"Yatay \u00e7izgi","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0130fadeler","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Bul/De\u011fi\u015ftir","search_desc":"Bul","delta_width":"","delta_height":""},advimage:{"delta_width":"Geni\u015flik_fark\u0131","image_desc":"Resim ekle/d\u00fczenle","delta_height":"Y\u00fckseklik_fark\u0131"},advlink:{"link_desc":"Ba\u011flant\u0131 ekle/d\u00fczenle","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Nitelik ekle/d\u00fczenle","ins_desc":"Ekleme","del_desc":"Silme","acronym_desc":"K\u0131sa ad","abbr_desc":"K\u0131saltma","cite_desc":"Al\u0131nt\u0131","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"CSS Stilini D\u00fczenle","delta_height":"","delta_width":""},paste:{"plaintext_mode":"D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Normal yap\u0131\u015ft\u0131rma moduna ge\u00e7mek i\u00e7in tekrar t\u0131klay\u0131n.","plaintext_mode_sticky":"D\u00fcz metin modunda yap\u0131\u015ft\u0131r. Normal yap\u0131\u015ft\u0131rma moduna ge\u00e7mek i\u00e7in tekrar t\u0131klay\u0131n. Yap\u0131\u015ft\u0131rma i\u015fleminden sonra normal yap\u0131\u015ft\u0131rma moduna ge\u00e7ilecektir.","selectall_desc":"T\u00fcm\u00fcn\u00fc se\u00e7","paste_word_desc":"Word\'den yap\u0131\u015ft\u0131r","paste_text_desc":"D\u00fcz metin olarak yap\u0131\u015ft\u0131r"},"paste_dlg":{"word_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n.","text_linebreaks":"Sat\u0131r kesmelerini tut","text_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n."},table:{cell:"H\u00fccre",col:"S\u00fctun",row:"Sat\u0131r",del:"Tablo sil","copy_row_desc":"Tablo sat\u0131r\u0131n\u0131 kopyala","cut_row_desc":"Tablo sat\u0131r\u0131n\u0131 kes","paste_row_after_desc":"Alt\u0131na tablo sat\u0131r\u0131 yap\u0131\u015ft\u0131r","paste_row_before_desc":"\u00dcst\u00fcne tablo sat\u0131r\u0131 yap\u0131\u015ft\u0131r","props_desc":"Tablo \u00f6zellikleri","cell_desc":"Tablo h\u00fccre \u00f6zellikleri","row_desc":"Tablo sat\u0131r \u00f6zellikleri","merge_cells_desc":"Tablo h\u00fccrelerini birle\u015ftir","split_cells_desc":"Birle\u015ftirilmi\u015f tablo h\u00fccrelerini b\u00f6l","delete_col_desc":"S\u00fctun sil","col_after_desc":"Sa\u011f\u0131na s\u00fctun ekle","col_before_desc":"Soluna s\u00fctun ekle","delete_row_desc":"Sat\u0131r sil","row_after_desc":"Alt\u0131na sat\u0131r ekle","row_before_desc":"\u00dcst\u00fcne sat\u0131r ekle",desc:"Yeni tablo ekle","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"E\u011fer geri y\u00fckleme i\u00e7eri\u011fe otomatik kay\u0131t edilirse, edit\u00f6rde varolan t\u00fcm i\u00e7eri\u011fi kaybedebilirsiniz.\n\nGeri y\u00fcklemenin i\u00e7eri\u011fe kaydedilmesini istedi\u011finizden emin misiniz?","restore_content":"Geri y\u00fckleme i\u00e7eri\u011fe otomatik kaydedildi.","unload_msg":"Bu sayfadan \u00e7\u0131karsan\u0131z yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikler kaybolabilir."},fullscreen:{desc:"Tam ekran modunu a\u00e7/kapat"},media:{edit:"T\u00fcmle\u015fik medya d\u00fczenle",desc:"T\u00fcmle\u015fik medya ekle / d\u00fczenle","delta_height":"","delta_width":""},fullpage:{desc:"Belge \u00f6zellikleri","delta_width":"","delta_height":""},template:{desc:"\u00d6ntan\u0131ml\u0131 i\u00e7erik \u015fablonu kullan"},visualchars:{desc:"G\u00f6rsel karakter kontrol\u00fc a\u00e7\u0131k/kapal\u0131."},spellchecker:{desc:"\u0130mla kontrol\u00fcn\u00fc a\u00e7/kapat",menu:"\u0130mla kontrol\u00fc ayarlar\u0131","ignore_word":"S\u00f6zc\u00fc\u011f\u00fc yoksay","ignore_words":"T\u00fcm\u00fcn\u00fc yoksay",langs:"Diller",wait:"L\u00fctfen bekleyin...",sug:"\u00d6neriler","no_sug":"\u00d6neri yok","no_mpell":"\u0130mla hatas\u0131 bulunamad\u0131.","learn_word":"S\u00f6zc\u00fc\u011f\u00fc \u00f6\u011fren"},pagebreak:{desc:"Sayfa sonu ekle."},advlist:{types:"Tipler",def:"Varsay\u0131lan","lower_alpha":"K\u00fc\u00e7\u00fck harf alfa","lower_greek":"K\u00fc\u00e7\u00fck harf grek","lower_roman":"K\u00fc\u00e7\u00fck harf roman","upper_alpha":"B\u00fcy\u00fck harf alfa","upper_roman":"B\u00fcy\u00fck harf roman",circle:"\u00c7ember",disc:"Daire",square:"Kare"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Zengin Metin Alan\u0131"},wordcount:{words:"Kelimeler:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tt.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tt.js
new file mode 100644
index 000000000..697b7a270
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({tt:{common:{"more_colors":"\u66f4\u591a\u9854\u8272","invalid_data":"\u932f\u8aa4\uff1a\u8f38\u5165\u4e86\u7121\u6548\u7684\u503c\uff0c\u5df2\u6a19\u8a18\u7232\u7d05\u8272\u3002","popup_blocked":"\u5c0d\u4e0d\u8d77\uff0c\u60a8\u7684\u5feb\u986f\u8996\u7a97\u963b\u6b62\u7a0b\u5f0f\u5df2\u7d93\u963b\u6b62\u4e86\u672c\u5feb\u986f\u8996\u7a97\uff0c\u8acb\u8abf\u6574\u4f60\u7684\u700f\u89bd\u5668\u8a2d\u5b9a\uff0c\u5141\u8a31\u672c\u7db2\u7ad9\u5f48\u51fa\u65b0\u7a97\u53e3\uff0c\u4ee5\u4fbf\u4f7f\u7528\u6b64\u529f\u80fd","clipboard_no_support":"\u5c1a\u4e0d\u652f\u63f4\u60a8\u6240\u4f7f\u7528\u7684\u700f\u89bd\u5668\uff0c\u8acb\u4f7f\u7528\u9375\u76e4\u65b9\u5f0f\u64cd\u4f5c","clipboard_msg":"\u8907\u88fd\u3001\u526a\u4e0b\u548c\u8cbc\u4e0a\u529f\u80fd\u5728Mozilla \u548c Firefox\u4e2d\u7121\u6cd5\u4f7f\u7528","not_set":"-- \u672a\u8a2d\u5b9a --","class_name":"\u6a23\u5f0f\u985e\u540d",browse:"\u700f\u89bd",close:"\u95dc\u9589",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u61c9\u7528","edit_confirm":"\u662f\u5426\u5728\u8a72text area\u5167\u5553\u7528\u6240\u898b\u5373\u6240\u5f97\u6a21\u5f0f\uff1f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u5169\u7aef\u5c0d\u9f4a",right:"\u9760\u53f3\u5c0d\u9f4a",center:"\u7f6e\u4e2d",left:"\u9760\u5de6\u5c0d\u9f4a",align:"\u5c0d\u9f4a\u65b9\u5f0f"},insertdatetime:{"day_short":"\u9031\u65e5,\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u73fe\u5728\u6642\u9593","insertdate_desc":"\u63d2\u5165\u4eca\u5929\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9810\u89bd"},directionality:{"rtl_desc":"\u6587\u5b57\u5f9e\u53f3\u5230\u5de6","ltr_desc":"\u6587\u5b57\u5f9e\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u589e\u5c64...","absolute_desc":"\u7d55\u5c0d\u4f4d\u7f6e","backward_desc":"\u5f8c\u7f6e","forward_desc":"\u524d\u7f6e","insertlayer_desc":"\u63d2\u5165\u5c64"},save:{"save_desc":"\u5b58\u6a94","cancel_desc":"\u653e\u68c4\u6240\u6709\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u767d\u5b57\u5143"},iespell:{download:"\u672a\u6aa2\u6e2c\u5230ieSpell\u5143\u4ef6\uff0c\u662f\u5426\u73fe\u5728\u5b89\u88dd ?","iespell_desc":"\u57f7\u884c\u62fc\u5b57\u6aa2\u67e5"},advhr:{"advhr_desc":"\u5206\u9694\u7dda","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u8868\u60c5","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u641c\u5c0b/\u53d6\u4ee3","search_desc":"\u641c\u5c0b","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7de8\u8f2f \u5716\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7de8\u8f2f \u9023\u7d50","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u63d2\u5165/\u7de8\u8f2f \u5c6c\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u522a\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7e2e\u5beb","abbr_desc":"\u7e2e\u5beb","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7de8\u8f2f CSS \u6a23\u5f0f\u8868","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u5168\u9078","paste_word_desc":"\u8cbc\u4e0a\u7232Word\u683c\u5f0f","paste_text_desc":"\u8cbc\u4e0a\u7232\u7d14\u6587\u5b57","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u5c07\u8907\u88fd(CTRL + C)\u7684\u5167\u5bb9\u8cbc\u4e0a(CTRL + V)\u5230\u8996\u7a97\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u865f\u865f","text_title":"\u5c07\u8907\u88fd(CTRL + C)\u7684\u5167\u5bb9\u8cbc\u4e0a(CTRL + V)\u5230\u8996\u7a97\u3002"},table:{cell:"\u5132\u5b58\u683c",col:"\u5217",row:"\u884c",del:"\u522a\u9664\u8868\u683c","copy_row_desc":"\u8907\u88fd\u7576\u524d\u5217","cut_row_desc":"\u526a\u4e0b\u7576\u524d\u5217","paste_row_after_desc":"\u8cbc\u4e0a\u884c\u5230\u4e0b\u65b9","paste_row_before_desc":"\u8cbc\u4e0a\u884c\u5230\u4e0a\u65b9","props_desc":"\u8868\u683c \u5c6c\u6027","cell_desc":"\u5132\u5b58\u683c \u5c6c\u6027","row_desc":"\u5217 \u5c6c\u6027","merge_cells_desc":"\u5408\u4f75\u5132\u5b58\u683c","split_cells_desc":"\u62c6\u5206\u5132\u5b58\u683c","delete_col_desc":"\u522a\u9664\u7576\u524d\u5217","col_after_desc":"\u5728\u53f3\u5074\u63d2\u5165\u5217","col_before_desc":"\u5728\u5de6\u5074\u63d2\u5165\u5217","delete_row_desc":"\u522a\u9664\u7576\u524d\u884c","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u5982\u679c\u96e2\u958b\u8a72\u9801\u5c07\u5c0e\u81f4\u6240\u6709\u4fee\u6539\u5168\u90e8\u907a\u5931\u3002","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u5168\u87a2\u5e55\u6a21\u5f0f"},media:{edit:"\u7de8\u8f2f \u5a92\u9ad4",desc:"\u63d2\u5165/\u7de8\u8f2f \u5a92\u9ad4","delta_height":"","delta_width":""},fullpage:{desc:"\u6587\u4ef6","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9078\u5b9a\u7684\u7bc4\u672c"},visualchars:{desc:"\u986f\u793a\u63a7\u5236\u7b26\u865f\u3002"},spellchecker:{desc:"\u62fc\u5b57\u6aa2\u67e5",menu:"\u62fc\u5b57\u6aa2\u67e5 \u8a2d\u5b9a","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8a9e\u8a00\u6e05\u55ae",wait:"\u8acb\u7a0d\u5019...",sug:"\u5efa\u8b70\u8a5e","no_sug":"\u7121\u62fc\u5b57\u5efa\u8b70","no_mpell":"\u7121\u62fc\u5b57\u932f\u8aa4","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9801\u7b26\u865f"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tw.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tw.js
new file mode 100644
index 000000000..0503679ca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({tw:{common:{"more_colors":"\u66f4\u591a\u984f\u8272...","invalid_data":"\u60a8\u8f38\u5165\u7684\u8cc7\u6599\u6709\u932f\u8aa4\uff08\u7d05\u8272\u90e8\u5206\uff09","popup_blocked":"\u60a8\u7684\u700f\u89bd\u5668\u7981\u6b62\u5f48\u51fa\u8996\u7a97\u3002","clipboard_no_support":"\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u8a72\u529f\u80fd\uff0c\u8acb\u4f7f\u7528Ctrl + C\u9375\u4ee3\u66ff\u3002","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u8907\u88fd\u529f\u80fd\u3002","not_set":"--\u5c1a\u672a\u8a2d\u5b9a--","class_name":"\u985e\u5225",browse:"\u9810\u89bd",close:"\u95dc\u9589",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5957\u7528","edit_confirm":"\u662f\u5426\u9700\u8981\u958b\u555f\u6587\u5b57\u7de8\u8f2f\u5668\uff1f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u5de6\u53f3\u5c0d\u9f4a",right:"\u9760\u53f3\u5c0d\u9f4a",center:"\u7f6e\u4e2d\u5c0d\u9f4a",left:"\u9760\u5de6\u5c0d\u9f4a",align:"\u5c0d\u9f4a"},insertdatetime:{"day_short":"\u9031\u65e5,\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u76ee\u524d\u6642\u9593","insertdate_desc":"\u63d2\u5165\u76ee\u524d\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y/%m/%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9810\u89bd"},directionality:{"rtl_desc":"\u5f9e\u53f3\u5230\u5de6","ltr_desc":"\u5f9e\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u5efa\u5716\u5c64...","absolute_desc":"\u5207\u63db\u5230\u7d55\u5c0d\u4f4d\u7f6e","backward_desc":"\u7f6e\u5f8c","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u5716\u5c64"},save:{"save_desc":"\u5b58\u6a94","cancel_desc":"\u53d6\u6d88\u6240\u6709\u8b8a\u66f4"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u683c"},iespell:{download:"\u6aa2\u67e5\u4e0d\u5230ieSpell\u5916\u639b\u7a0b\u5f0f\u7a0b\u5f0f\uff0c\u662f\u5426\u7acb\u5373\u5b89\u88dd\uff1f","iespell_desc":"\u62fc\u5b57\u6aa2\u67e5"},advhr:{"advhr_desc":"\u6c34\u5e73\u7dda","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u8868\u60c5","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u641c\u5c0b/\u53d6\u4ee3","search_desc":"\u641c\u5c0b","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7de8\u8f2f\u8d85\u9023\u7d50","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"60","attribs_delta_width":"40","attribs_desc":"\u63d2\u5165/\u7de8\u8f2f\u5c6c\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u522a\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7e2e\u5beb","abbr_desc":"\u7e2e\u5beb","cite_desc":"\u5f15\u7528","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7de8\u8f2f CSS \u6a23\u5f0f\u8868","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u76ee\u524d\u70ba\u4e00\u822c\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u518d\u9ede\u9ede\u95b1\u4e00\u6b21\u5207\u63db\u56de\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\u3002","plaintext_mode_sticky":"\u76ee\u524d\u70ba\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u518d\u9ede\u95b1\u4e00\u6b21\u5207\u63db\u56de\u4e00\u822c\u6a21\u5f0f\u3002","selectall_desc":"\u5168\u9078","paste_word_desc":"\u4ee5Word\u683c\u5f0f\u8cbc\u4e0a","paste_text_desc":"\u4ee5\u7d14\u6587\u5b57\u8cbc\u4e0a"},"paste_dlg":{"word_title":"\u7528 Ctrl+V \u5c07\u5167\u5bb9\u8cbc\u4e0a\u3002","text_linebreaks":"\u4fdd\u7559\u63db\u884c\u7b26\u865f","text_title":"\u7528 Ctrl+V \u5c07\u5167\u5bb9\u8cbc\u4e0a\u3002"},table:{"merge_cells_delta_height":"40","merge_cells_delta_width":"40","table_delta_height":"60","table_delta_width":"40","cellprops_delta_height":"10","cellprops_delta_width":"10",cell:"\u5132\u5b58\u683c",col:"\u6b04",row:"\u884c",del:"\u522a\u9664\u8868\u683c","copy_row_desc":"\u8907\u88fd\u9078\u64c7\u884c","cut_row_desc":"\u526a\u4e0b\u9078\u64c7\u884c","paste_row_after_desc":"\u5728\u4e0b\u65b9\u8cbc\u4e0a\u884c","paste_row_before_desc":"\u5728\u4e0a\u65b9\u8cbc\u4e0a\u884c","props_desc":"\u8868\u683c\u5c6c\u6027","cell_desc":"\u5132\u5b58\u683c\u5c6c\u6027","row_desc":"\u884c\u5c6c\u6027","merge_cells_desc":"\u5408\u4f75\u5132\u5b58\u683c","split_cells_desc":"\u5206\u5272\u5132\u5b58\u683c","delete_col_desc":"\u522a\u9664\u76ee\u524d\u6b04","col_after_desc":"\u5728\u53f3\u5074\u63d2\u5165\u6b04","col_before_desc":"\u5728\u5de6\u5074\u63d2\u5165\u6b04","delete_row_desc":"\u522a\u9664\u76ee\u524d\u884c","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u6062\u5fa9\u5148\u524d\u5132\u5b58\u7684\u5167\u5bb9\uff0c\u60a8\u5c07\u5931\u53bb\u7de8\u8f2f\u5668\u4e2d\u73fe\u6709\u7684\u5167\u5bb9\u3002 \n\n\u60a8\u78ba\u5b9a\u8981\u6062\u5fa9\u5148\u524d\u5132\u5b58\u7684\u5167\u5bb9\u55ce\uff1f","restore_content":"\u6062\u5fa9\u81ea\u52d5\u5132\u5b58\u7684\u5167\u5bb9\u3002","unload_msg":"\u60a8\u5c1a\u672a\u5132\u5b58\u8cc7\u6599\uff0c\u60a8\u8f38\u5165\u7684\u8cc7\u6599\u53ef\u80fd\u6703\u907a\u5931..."},fullscreen:{desc:"\u5168\u87a2\u5e55\u7de8\u8f2f"},media:{edit:"\u7de8\u8f2f\u5f71\u7247",desc:"\u63d2\u5165/\u7de8\u8f2f\u5f71\u7247","delta_height":"","delta_width":""},fullpage:{desc:"\u6a94\u6848\u5c6c\u6027","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9810\u8a2d\u6a21\u677f"},visualchars:{desc:"\u986f\u793a/\u96b1\u85cf\u4e0d\u53ef\u898b\u5b57\u5143"},spellchecker:{desc:"\u958b\u95dc\u62fc\u5b57\u6aa2\u67e5",menu:"\u62fc\u5b57\u6aa2\u67e5\u8a2d\u5b9a","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8a9e\u8a00",wait:"\u8acb\u7a0d\u5019...",sug:"\u5efa\u8b70","no_sug":"\u7121\u5efa\u8b70","no_mpell":"\u7121\u62fc\u5b57\u932f\u8aa4","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9801\u7b26\u865f"},advlist:{types:"\u6a23\u5f0f",def:"\u9810\u8a2d","lower_alpha":"\u5c0f\u5beb\u7684\u82f1\u6587\u5b57","lower_greek":"\u5c0f\u5beb\u7684\u5e0c\u81d8\u6587\u5b57","lower_roman":"\u5c0f\u5beb\u7684\u7f85\u99ac\u6578\u5b57","upper_alpha":"\u5927\u5beb\u7684\u82f1\u6587\u5b57","upper_roman":"\u5927\u5beb\u7684\u7f85\u99ac\u6578\u5b57",circle:"\u5713\u5708",disc:"\u5713\u9ede",square:"\u65b9\u584a"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/uk.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/uk.js
new file mode 100644
index 000000000..514b66be9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/uk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({uk:{common:{"more_colors":"\u0411\u0456\u043b\u044c\u0448\u0435 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432","invalid_data":"\u041f\u043e\u043c\u0438\u043b\u043a\u0430: \u0412\u0432\u0435\u0434\u0435\u043d\u043e \u043f\u043e\u043c\u0438\u043b\u043a\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f, \u0432\u0456\u0434\u043c\u0456\u0447\u0435\u043d\u0435 \u0447\u0435\u0440\u0432\u043e\u043d\u0438\u043c.","popup_blocked":"\u0414\u0443\u0436\u0435 \u043f\u0440\u0438\u043a\u0440\u043e, \u0430\u043b\u0435 \u0432\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0437\u0430\u0431\u043b\u043e\u043a\u0443\u0432\u0430\u0432 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e. \u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0439\u0442\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0442\u0430\u043a, \u0449\u043e\u0431 \u0432\u0456\u043d \u0434\u043e\u0437\u0432\u043e\u043b\u044f\u0432 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0456 \u0432\u0456\u043a\u043d\u0430 \u0437 \u0446\u044c\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0443.","clipboard_no_support":"\u041d\u0430\u0440\u0430\u0437\u0456 \u0446\u044f \u0444\u0443\u043d\u043a\u0446\u0456\u044f \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0432 \u0432\u0430\u0448\u043e\u043c\u0443 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0456, \u0430\u043b\u0435 \u0432\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0443 \u0437\u0430\u043c\u0456\u0441\u0442\u044c \u0446\u044c\u043e\u0433\u043e.","clipboard_msg":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438/\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438/\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 Mozilla \u0442\u0430 Firefox.\n\u0412\u0430\u043c \u0446\u0456\u043a\u0430\u0432\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u043f\u0440\u043e \u0446\u0435?","not_set":"-- \u043d\u0435 \u0432\u0438\u0431\u0440\u0430\u043d\u043e --","class_name":"\u041a\u043b\u0430\u0441",browse:"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434",close:"\u0417\u0430\u043a\u0440\u0438\u0442\u0438",cancel:"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438",update:"\u041e\u043d\u043e\u0432\u0438\u0442\u0438",insert:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438",apply:"\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438","edit_confirm":"\u0412\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 WYSIWYG \u0440\u0435\u0436\u0438\u043c \u0434\u043b\u044f \u0446\u044c\u043e\u0433\u043e \u043f\u043e\u043b\u044f?","invalid_data_number":"{#field} \u043f\u043e\u0432\u0438\u043d\u043d\u0435 \u0431\u0443\u0442\u0438 \u0447\u0438\u0441\u043b\u043e\u043c","invalid_data_min":"{#field} \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0432\u0438\u043d\u043d\u0435 \u0431\u0443\u0442\u0438 \u0431\u0456\u043b\u044c\u0448\u0435 \u043d\u0456\u0436 {#min}","invalid_data_size":"{#field} \u043f\u043e\u0432\u0438\u043d\u043d\u0435 \u0431\u0443\u0442\u0438 \u0447\u0438\u0441\u043b\u043e\u043c \u0430\u0431\u043e \u0432\u0456\u0434\u0441\u043e\u0442\u043a\u043e\u043c",value:"(\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f)"},contextmenu:{full:"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0456",right:"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",center:"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",left:"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f"},insertdatetime:{"day_short":"\u041d\u0434,\u041f\u043d,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041f\u0442,\u0421\u0431,\u041d\u0434","day_long":"\u041d\u0435\u0434\u0456\u043b\u044f,\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a,\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a,\u0421\u0435\u0440\u0435\u0434\u0430,\u0427\u0435\u0442\u0432\u0435\u0440,\u041f\'\u044f\u0442\u043d\u0438\u0446\u044f,\u0421\u0443\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0456\u043b\u044f","months_short":"\u0421\u0456\u0447,\u041b\u044e\u0442,\u0411\u0435\u0440,\u041a\u0432\u0456,\u0422\u0440\u0430,\u0427\u0435\u0440,\u041b\u0438\u043f,\u0421\u0435\u0440,\u0412\u0435\u0440,\u0416\u043e\u0432,\u041b\u0438\u0441,\u0413\u0440\u0443","months_long":"\u0421\u0456\u0447\u0435\u043d\u044c,\u041b\u044e\u0442\u0438\u0439,\u0411\u0435\u0440\u0435\u0437\u0435\u043d\u044c,\u041a\u0432\u0456\u0442\u0435\u043d\u044c,\u0422\u0440\u0430\u0432\u0435\u043d\u044c,\u0427\u0435\u0440\u0432\u0435\u043d\u044c,\u041b\u0438\u043f\u0435\u043d\u044c,\u0421\u0435\u0440\u043f\u0435\u043d\u044c,\u0412\u0435\u0440\u0435\u0441\u0435\u043d\u044c,\u0416\u043e\u0432\u0442\u0435\u043d\u044c,\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434,\u0413\u0440\u0443\u0434\u0435\u043d\u044c","inserttime_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0447\u0430\u0441","insertdate_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0434\u0430\u0442\u0443","time_fmt":"%H:%M:%S","date_fmt":"%d.%m.%Y"},print:{"print_desc":"\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438"},preview:{"preview_desc":"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434"},directionality:{"rtl_desc":"\u041d\u0430\u043f\u0440\u044f\u043c \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e","ltr_desc":"\u041d\u0430\u043f\u0440\u044f\u043c \u0437\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e"},layer:{content:"\u041d\u043e\u0432\u0438\u0439 \u043f\u0440\u043e\u0448\u0430\u0440\u043e\u043a...","absolute_desc":"\u041f\u0435\u0440\u0435\u043c\u0438\u043a\u043d\u0443\u0442\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u0435 \u043f\u043e\u0437\u0438\u0446\u0456\u044e\u0432\u0430\u043d\u043d\u044f","backward_desc":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u043d\u0430\u0437\u0430\u0434","forward_desc":"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0432\u043f\u0435\u0440\u0435\u0434","insertlayer_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u043f\u0440\u043e\u0448\u0430\u0440\u043e\u043a"},save:{"save_desc":"\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438","cancel_desc":"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0456 \u0437\u043c\u0456\u043d\u0438"},nonbreaking:{"nonbreaking_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u0435\u0440\u043e\u0437\u0440\u0438\u0432\u043d\u0438\u0439 \u043f\u0440\u043e\u043c\u0456\u0436\u043e\u043a"},iespell:{download:"\u0414\u043e\u0434\u0430\u0442\u043e\u043a ieSpell \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e. \u0411\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0438?","iespell_desc":"\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0443 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0456\u0457"},advhr:{"advhr_desc":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0438\u043a","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u0421\u043c\u0430\u0439\u043b\u0438","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u0428\u0443\u043a\u0430\u0442\u0438/\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438","search_desc":"\u0428\u0443\u043a\u0430\u0442\u0438","delta_width":"","delta_height":""},advimage:{"delta_width":"200","image_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","delta_height":""},advlink:{"delta_width":"200","link_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","delta_height":""},xhtmlxtras:{"attribs_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","ins_desc":"\u0412\u0441\u0442\u0430\u0432\u043a\u0430","del_desc":"\u0412\u0438\u0434\u0430\u043b\u0435\u043d\u043d\u044f","acronym_desc":"\u0410\u043a\u0440\u043e\u043d\u0456\u043c","abbr_desc":"\u0410\u0431\u0440\u0435\u0432\u0456\u0430\u0442\u0443\u0440\u0430","cite_desc":"\u0426\u0438\u0442\u0430\u0442\u0430","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 CSS \u0441\u0442\u0438\u043b\u044c","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u0412 \u0434\u0430\u043d\u0438\u0439 \u0447\u0430\u0441 \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0456 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u0437\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u043d\u043d\u044f \u043d\u0430\u0437\u0430\u0434 \u0432 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0412\u0441\u0442\u0430\u0432\u043a\u0438.","plaintext_mode_sticky":"\u0412 \u0434\u0430\u043d\u0438\u0439 \u0447\u0430\u0441 \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0456 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u0437\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0438\u043a\u0430\u043d\u043d\u044f \u043d\u0430\u0437\u0430\u0434 \u0432 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c \u0412\u0441\u0442\u0430\u0432\u043a\u0438.. \u041f\u0456\u0441\u043b\u044f \u0442\u043e\u0433\u043e, \u044f\u043a \u0412\u0438 \u0449\u043e-\u043d\u0435\u0431\u0443\u0434\u044c \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u0435, \u0412\u0438 \u043f\u043e\u0432\u0435\u0440\u043d\u0435\u0442\u0435\u0441\u044c \u0432 \u0437\u0432\u0438\u0447\u0430\u0439\u043d\u043c\u0439 \u0440\u0435\u0436\u0438\u043c \u0412\u0441\u0442\u0430\u0432\u043a\u0438.","selectall_desc":"\u0412\u0438\u0434\u0456\u043b\u0438\u0442\u0438 \u0432\u0441\u0435","paste_word_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0437 Word","paste_text_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u044f\u043a \u0442\u0435\u043a\u0441\u0442"},"paste_dlg":{"word_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e.","text_linebreaks":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438 \u0440\u044f\u0434\u043a\u0456\u0432","text_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e."},table:{"cellprops_delta_width":"30",cell:"\u041a\u043e\u043c\u0456\u0440\u043a\u0430",col:"\u0421\u0442\u043e\u0432\u043f\u0435\u0446\u044c",row:"\u0420\u044f\u0434\u043e\u043a",del:"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e","copy_row_desc":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","cut_row_desc":"\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","paste_row_after_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u043f\u0456\u0441\u043b\u044f","paste_row_before_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0434\u043e","props_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","cell_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0440\u044f\u0434\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","merge_cells_desc":"\u041e\u0431\'\u0454\u0434\u043d\u0430\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438","split_cells_desc":"\u0420\u043e\u0437\u0434\u0456\u043b\u0438\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438","delete_col_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c","col_after_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u043f\u0456\u0441\u043b\u044f","col_before_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0441\u0442\u043e\u0432\u043f\u0435\u0446\u044c \u0434\u043e","delete_row_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0440\u044f\u0434\u043e\u043a","row_after_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u043f\u0456\u0441\u043b\u044f","row_before_desc":"\u0414\u043e\u0434\u0430\u0442\u0438 \u0440\u044f\u0434\u043e\u043a \u0434\u043e",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u043e\u0432\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044e","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u042f\u043a\u0449\u043e \u0432\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0439 \u0432\u043c\u0456\u0441\u0442, \u0442\u043e \u0432\u0438 \u0432\u0442\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u0435\u0441\u044c \u0432\u043c\u0456\u0441\u0442, \u044f\u043a\u0438\u0439 \u0432 \u0434\u0430\u043d\u0438\u0439 \u0447\u0430\u0441 \u0437\u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0456. \n\n\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0445\u043e\u0447\u0435\u0442\u0435 \u0432\u0456\u0434\u043d\u043e\u0432\u0438\u0442\u0438 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0439 \u0437\u043c\u0456\u0441\u0442?.","restore_content":"\u0412\u0456\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043e\u0433\u043e \u0432\u043c\u0456\u0441\u0442\u0443.","unload_msg":"\u0417\u043c\u0456\u043d\u0438, \u044f\u043a\u0456 \u0432\u0438 \u0437\u0440\u043e\u0431\u0438\u043b\u0438, \u0431\u0443\u0434\u0443\u0442\u044c \u0432\u0442\u0440\u0430\u0447\u0435\u043d\u0456, \u044f\u043a\u0449\u043e \u0432\u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442\u0435 \u0437 \u0446\u0456\u0454\u0457 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438."},fullscreen:{desc:"\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u0438 \u043d\u0430 \u0432\u0435\u0441\u044c \u0435\u043a\u0440\u0430\u043d"},media:{edit:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u0456 \u043c\u0435\u0434\u0456\u0430",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 / \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u0456 \u043c\u0435\u0434\u0456\u0430","delta_height":"","delta_width":""},fullpage:{desc:"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","delta_width":"","delta_height":""},template:{desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442"},visualchars:{desc:"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432 \u0432\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u043d\u044f / \u0432\u0438\u043c\u043a\u043d\u0435\u043d\u043d\u044f."},spellchecker:{desc:"\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0438 \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0443",menu:"\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0438","ignore_word":"\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438 \u0441\u043b\u043e\u0432\u043e","ignore_words":"\u0406\u0433\u043d\u043e\u0440\u0443\u0432\u0430\u0442\u0438 \u0432\u0441\u0435",langs:"\u041c\u043e\u0432\u0438",wait:"\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0437\u0430\u0447\u0435\u043a\u0430\u0439\u0442\u0435...",sug:"\u0412\u0430\u0440\u0456\u0430\u043d\u0442\u0438","no_sug":"\u041d\u0435\u043c\u0430\u0454 \u0432\u0430\u0440\u0456\u0430\u043d\u0442\u0456\u0432","no_mpell":"\u041f\u043e\u043c\u0438\u043b\u043e\u043a \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e.","learn_word":"\u0417\u0430\u043f\u0430\u043c\'\u044f\u0442\u0430\u0442\u0438 \u0441\u043b\u043e\u0432\u043e"},pagebreak:{desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0438\u043a \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438."},advlist:{types:"\u0422\u0438\u043f\u0438",def:"\u0417\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0430\u043d\u043d\u044f\u043c","lower_alpha":"Lower alpha","lower_greek":"Lower greek","lower_roman":"Lower roman","upper_alpha":"Upper alpha","upper_roman":"Upper roman",circle:"\u041a\u043e\u043b\u043e",disc:"\u0414\u0438\u0441\u043a",square:"\u041a\u0432\u0430\u0434\u0440\u0430\u0442"},colors:{"333300":"\u0422\u0435\u043c\u043d\u043e-\u043e\u043b\u0438\u0432\u043a\u043e\u0432\u0438\u0439","993300":"\u041f\u043e\u043c\u0430\u0440\u0430\u043d\u0447\u0435\u0432\u0438\u0439","000000":"\u0427\u043e\u0440\u043d\u0438\u0439","003300":"\u0422\u0435\u043c\u043d\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439",FF6600:"\u041e\u0440\u0430\u043d\u0436\u0435\u0432\u0438\u0439","808000":"\u041e\u043b\u0438\u0432\u043a\u043e\u0432\u0438\u0439","008000":"\u0417\u0435\u043b\u0435\u043d\u0438\u0439","0000FF":"\u0421\u0438\u043d\u0456\u0439","666699":"\u0421\u0456\u0440\u043e-\u0433\u043e\u043b\u0443\u0431\u0438\u0439","808080":"\u0421\u0456\u0440\u0438\u0439",FF0000:"\u0427\u0435\u0440\u0432\u043e\u043d\u0438\u0439","99CC00":"\u0416\u043e\u0432\u0442\u043e-\u0437\u0435\u043b\u0435\u043d\u0438\u0439","339966":"Sea green ",FFCC00:"\u0417\u043e\u043b\u043e\u0442\u0438\u0439",FFFF00:"\u0416\u043e\u0432\u0442\u0438\u0439","993366":"\u041a\u043e\u0440\u0438\u0447\u043d\u0435\u0432\u0438\u0439",C0C0C0:"\u0421\u0440\u0456\u0431\u043b\u044f\u0441\u0442\u0438\u0439",FF99CC:"\u0420\u043e\u0436\u0435\u0432\u0438\u0439",FFFF99:"\u0421\u0432\u0456\u0442\u043b\u043e \u0436\u043e\u0432\u0442\u0438\u0439",CC99FF:"\u0421\u043b\u0438\u0432\u043e\u0432\u0438\u0439",FFFFFF:"\u0411\u0456\u043b\u0438\u0439","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon","008080":"Teal",FF9900:"Amber","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue",FFCC99:"Peach",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue"},aria:{"rich_text_area":"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440"},wordcount:{words:"\u0421\u043b\u0456\u0432:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ur.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ur.js
new file mode 100644
index 000000000..99b40c699
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/ur.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({ur:{common:{"more_colors":"More colors","invalid_data":"Error: Invalid values entered, these are marked in red.","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.","clipboard_no_support":"\u0627\u0653\u067e \u06a9\u06d2 \u0628\u0631\u0627\u0624\u0632\u0631 \u0645\u06cc\u06ba \u06cc\u06c1 \u0633\u06c1\u0648\u0644\u062a \u0645\u06cc\u0633\u0631 \u0646\u06c1\u06cc\u06ba\u06d4 \u06a9\u06cc \u0628\u0648\u0631\u0688 \u0634\u0627\u0631\u0679 \u06a9\u0679 \u0645\u0646\u062a\u062e\u0628 \u06a9\u0631\u06cc\u06ba","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","not_set":"-- \u0646\u0627\u0679 \u0633\u06cc\u0679 --","class_name":"\u06a9\u0644\u0627\u0633",browse:"\u0628\u0631\u0627\u0624\u0632",close:"\u0628\u0646\u062f",cancel:"\u06a9\u06cc\u0646\u0633\u0644",update:"\u0627\u067e \u0688\u06cc\u0679",insert:"\u062f\u0627\u062e\u0644 \u06a9\u0631\u06cc\u06ba",apply:"\u0627\u067e\u0644\u0627\u0626\u06cc","edit_confirm":"\u06a9\u06cc\u0627 \u0627\u0653\u067e \u0627\u0633 \u0679\u06cc\u06a9\u0633\u0679 \u0627\u06cc\u0631\u06cc\u0627 \u06a9\u06cc\u0644\u0626\u06d2 \u0648\u0632\u06cc \u0648\u06af \u0645\u0648\u0688 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u061f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"Full",right:"Right",center:"Center",left:"Left",align:"Alignment"},insertdatetime:{"day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","inserttime_desc":"Insert time","insertdate_desc":"Insert date","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"Print"},preview:{"preview_desc":"Preview"},directionality:{"rtl_desc":"Direction right to left","ltr_desc":"Direction left to right"},layer:{content:"New layer...","absolute_desc":"Toggle absolute positioning","backward_desc":"Move backward","forward_desc":"Move forward","insertlayer_desc":"Insert new layer"},save:{"save_desc":"Save","cancel_desc":"Cancel all changes"},nonbreaking:{"nonbreaking_desc":"Insert non-breaking space character"},iespell:{download:"ieSpell not detected. Do you want to install it now?","iespell_desc":"Run spell checking"},advhr:{"advhr_desc":"Horizontal rule","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Emotions","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"Find/Replace","search_desc":"Find","delta_width":"","delta_height":""},advimage:{"image_desc":"Insert/edit image","delta_width":"","delta_height":""},advlink:{"link_desc":"Insert/edit link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Insert/Edit Attributes","ins_desc":"Insertion","del_desc":"Deletion","acronym_desc":"Acronym","abbr_desc":"Abbreviation","cite_desc":"Citation","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"Edit CSS Style","delta_height":"","delta_width":""},paste:{"selectall_desc":"Select All","paste_word_desc":"Paste from Word","paste_text_desc":"Paste as Plain Text","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."},table:{cell:"Cell",col:"Column",row:"Row",del:"Delete table","copy_row_desc":"Copy table row","cut_row_desc":"Cut table row","paste_row_after_desc":"Paste table row after","paste_row_before_desc":"Paste table row before","props_desc":"Table properties","cell_desc":"Table cell properties","row_desc":"Table row properties","merge_cells_desc":"Merge table cells","split_cells_desc":"Split merged table cells","delete_col_desc":"Remove column","col_after_desc":"Insert column after","col_before_desc":"Insert column before","delete_row_desc":"Delete row","row_after_desc":"Insert row after","row_before_desc":"Insert row before",desc:"Inserts a new table","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"The changes you made will be lost if you navigate away from this page.","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"Toggle fullscreen mode"},media:{edit:"Edit embedded media",desc:"Insert / edit embedded media","delta_height":"","delta_width":""},fullpage:{desc:"Document properties","delta_width":"","delta_height":""},template:{desc:"Insert predefined template content"},visualchars:{desc:"Visual control characters on/off."},spellchecker:{desc:"Toggle spellchecker",menu:"Spellchecker settings","ignore_word":"Ignore word","ignore_words":"Ignore all",langs:"Languages",wait:"Please wait...",sug:"Suggestions","no_sug":"No suggestions","no_mpell":"No misspellings found.","learn_word":"Learn word"},pagebreak:{desc:"Insert page break."},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/vi.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/vi.js
new file mode 100644
index 000000000..966a38ac1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/vi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({vi:{common:{"more_colors":"M\u00e0u kh\u00e1c","invalid_data":"L\u1ed7i: Gi\u00e1 tr\u1ecb nh\u1eadp v\u00e0o kh\u00f4ng h\u1ee3p l\u1ec7. (\u0110\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u \u0111\u1ecf)","popup_blocked":"Xin l\u1ed7i, Nh\u01b0ng ch\u1ebf \u0111\u1ed9 c\u1eeda s\u1ed5 popup \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u ho\u00e1. B\u1ea1n s\u1ebd c\u1ea7n ph\u1ea3i t\u1eaft ch\u1ee9c n\u0103ng ch\u1eb7n popup tr\u00ean trang web n\u00e0y \u0111\u1ec3 s\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 n\u00e0y ho\u00e0n to\u00e0n.","clipboard_no_support":"S\u1eed d\u1ee5ng ph\u00edm t\u1eaft kh\u00f4ng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong tr\u00ecnh duy\u1ec7t hi\u1ec7n t\u1ea1i.","clipboard_msg":"Copy/Cut/Paste kh\u00f4ng \u0111\u01b0\u1ee3c h\u1ed7 tr\u1ee3 trong tr\u00ecnh duy\u1ec7t web n\u00e0y.\nB\u1ea1n c\u00f3 mu\u1ed1n bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 v\u1ea5n \u0111\u1ec1 n\u00e0y kh\u00f4ng??","not_set":"-- Ch\u01b0a \u0111\u1eb7t --","class_name":"L\u1edbp",browse:"T\u00ecm",close:"Tho\u00e1t",cancel:"H\u1ee7y b\u1ecf",update:"C\u1eadp nh\u1eadt",insert:"Th\u00eam",apply:"Thay \u0111\u1ed5i","edit_confirm":"B\u1ea1n c\u00f3 mu\u1ed1n s\u1eed d\u1ee5ng ch\u1ebf \u0111\u1ed9 WYSIWYG cho textarea n\u00e0y?","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u0110\u1ea7y",right:"Ph\u1ea3i",center:"Gi\u1eefa",left:"Tr\u00e1i",align:"Canh l\u1ec1"},insertdatetime:{"day_short":"CN,T2,T3,T4,T5,T6,T7,CN","day_long":"Ch\u1ee7 Nh\u1eadt,Th\u1ee9 Hai,Th\u1ee9 Ba,Th\u1ee9 T\u01b0,Th\u1ee9 N\u0103m,Th\u1ee9 S\u00e1u,Th\u1ee9 B\u1ea3y,Ch\u1ee7 Nh\u1eadt","months_short":"Thg1,Thg2,Thg3,Thg4,Thg5,Thg6,Thg7,Thg8,Thg9,Th10,Th11,Th12","months_long":"Th\u00e1ng M\u1ed9t,Th\u00e1ng Hai,Th\u00e1ng Ba,Th\u00e1ng T\u01b0,Th\u00e1ng N\u0103m,Th\u00e1ng S\u00e1u,Th\u00e1ng B\u1ea3y,Th\u00e1ng T\u00e1m,Th\u00e1ng Ch\u00edn,Th\u00e1ng M\u01b0\u1eddi,Th\u00e1ng M\u01b0\u1eddi M\u1ed9t,Th\u00e1ng M\u01b0\u1eddi Hai","inserttime_desc":"Ch\u00e8n gi\u1edd","insertdate_desc":"Ch\u00e8n ng\u00e0y","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"In"},preview:{"preview_desc":"Xem tr\u01b0\u1edbc"},directionality:{"rtl_desc":"H\u01b0\u1edbng ph\u1ea3i qua tr\u00e1i","ltr_desc":"H\u01b0\u1edbng tr\u00e1i qua ph\u1ea3i"},layer:{content:"L\u1edbp m\u1edbi...","absolute_desc":"\u0110\u1ea3o v\u1ecb tr\u00ed c\u1ed1 \u0111\u1ecbnh","backward_desc":"Di chuy\u1ec3n v\u1ec1 sau","forward_desc":"Di chuy\u1ec3n v\u1ec1 tr\u01b0\u1edbc","insertlayer_desc":"Ch\u00e8n l\u1edbp m\u1edbi"},save:{"save_desc":"L\u01b0u","cancel_desc":"H\u1ee7y b\u1ecf t\u1ea5t c\u1ea3 thay \u0111\u1ed5i"},nonbreaking:{"nonbreaking_desc":"Ch\u00e8n k\u00fd t\u1ef1 kho\u1ea3ng c\u00e1ch kh\u00f4ng b\u1ecb ng\u1eaft"},iespell:{download:"ieSpell kh\u00f4ng \u0111\u01b0\u1ee3c ph\u00e1t hi\u1ec7n. B\u1ea1n c\u00f3 mu\u1ed1n c\u00e0i \u0111\u1eb7t n\u00f3 b\u00e2y gi\u1edd?","iespell_desc":"Ch\u1ea1y tr\u00ecnh ki\u1ec3m tra ch\u00ednh t\u1ea3"},advhr:{"advhr_desc":"Th\u01b0\u1edbc ngang","delta_height":"","delta_width":""},emotions:{"emotions_desc":"Bi\u1ec3u T\u01b0\u1ee3ng C\u1ea3m X\u00fac","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"T\u00ecm/Thay th\u1ebf","search_desc":"T\u00ecm","delta_width":"","delta_height":""},advimage:{"image_desc":"Ch\u00e8n/s\u1eeda \u1ea3nh","delta_width":"","delta_height":""},advlink:{"link_desc":"Th\u00eam/S\u1eeda Link","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"Ch\u00e8n/S\u1eeda c\u00e1c thu\u1ed9c t\u00ednh","ins_desc":"Ch\u00e8n","del_desc":"X\u00f3a","acronym_desc":"T\u1eeb vi\u1ebft t\u1eaft","abbr_desc":"T\u00ean vi\u1ebft t\u1eaft","cite_desc":"Bi\u00ea\u0309u ch\u01b0\u01a1ng","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"S\u1eeda ki\u1ec3u d\u00e1ng CSS","delta_height":"","delta_width":""},paste:{"plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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.","selectall_desc":"Ch\u1ecdn t\u1ea5t","paste_word_desc":"D\u00e1n t\u1eeb Word","paste_text_desc":"D\u00e1nh nh\u01b0 Plain Text"},"paste_dlg":{"word_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5.","text_linebreaks":"Gi\u1eef ng\u1eaft d\u00f2ng","text_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5."},table:{cell:"\u00d4",col:"C\u1ed9t",row:"H\u00e0ng",del:"X\u00f3a b\u1ea3ng","copy_row_desc":"Sao ch\u00e9p h\u00e0ng","cut_row_desc":"C\u1eaft h\u00e0ng","paste_row_after_desc":"D\u00e1n hang v\u00e0o sau","paste_row_before_desc":"D\u00e1n hang v\u00e0o tr\u01b0\u1edbc","props_desc":"Thu\u1ed9c t\u00ednh b\u1ea3ng","cell_desc":"Thu\u1ed9c t\u00ednh \u00f4","row_desc":"Thu\u1ed9c t\u00ednh h\u00e0ng","merge_cells_desc":"K\u1ebft h\u1ee3p c\u00e1c \u00f4 c\u1ee7a b\u1ea3ng","split_cells_desc":"T\u00e1ch c\u00e1c \u00f4 \u0111\u00e3 k\u1ebft h\u1ee3p c\u1ee7a b\u1ea3ng","delete_col_desc":"Lo\u1ea1i b\u1ecf c\u1ed9t","col_after_desc":"Ch\u00e8n c\u1ed9t v\u00e0o sau","col_before_desc":"Ch\u00e8n c\u1ed9t v\u00e0o tr\u01b0\u1edbc","delete_row_desc":"X\u00f3a d\u00f2ng","row_after_desc":"Ch\u00e8n h\u00e0ng v\u00e0o sau","row_before_desc":"Ch\u00e8n h\u00e0ng v\u00e0o tr\u01b0\u1edbc",desc:"Ch\u00e8n m\u1ed9t b\u1ea3ng m\u1edbi","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"N\u1ebfu b\u1ea1n kh\u00f4i ph\u1ee5c l\u1ea1i n\u1ed9i dung \u0111\u00e3 l\u01b0u, b\u1ea1n s\u1ebd m\u1ea5t t\u1ea5t c\u1ea3 c\u00e1c n\u1ed9i dung m\u00e0 hi\u1ec7n \u0111ang trong tr\u00ecnh so\u1ea1n th\u1ea3o.\n\nB\u1ea1n c\u00f3 ch\u1eafc l\u00e0 b\u1ea1n mu\u1ed1n kh\u00f4i ph\u1ee5c l\u1ea1i n\u1ed9i dung \u0111\u00e3 l\u01b0u?.","restore_content":"Kh\u00f4i ph\u1ee5c n\u1ed9i dung t\u1ef1 \u0111\u1ed9ng l\u01b0u l\u1ea1i.","unload_msg":"Nh\u1eefng thay \u0111\u1ed5i b\u1ea1n \u0111\u00e3 th\u1ef1c hi\u1ec7n s\u1ebd b\u1ecb m\u1ea5t n\u1ebfu b\u1ea1n \u0111i\u1ec1u h\u01b0\u1edbng \u0111i t\u1eeb trang n\u00e0y."},fullscreen:{desc:"B\u1eadt/t\u1eaft ch\u1ebf \u0111\u1ed9 to\u00e0n m\u00e0n h\u00ecnh"},media:{edit:"S\u1eeda ph\u01b0\u01a1ng ti\u1ec7n truy\u1ec1n th\u00f4ng nh\u00fang",desc:"Ch\u00e8n / s\u1eeda ph\u01b0\u01a1ng ti\u1ec7n truy\u1ec1n th\u00f4ng nh\u00fang","delta_height":"","delta_width":""},fullpage:{desc:"Thu\u1ed9c t\u00ednh v\u0103n b\u1ea3n","delta_width":"","delta_height":""},template:{desc:"Ch\u00e8n m\u1ed9t n\u1ed9i dung m\u1eabu \u0111\u1ecbnh ngh\u0129a tr\u01b0\u1edbc"},visualchars:{desc:"B\u1eb7t/T\u1eaft c\u00e1c k\u00fd t\u1ef1 \u0111i\u1ec1u khi\u1ec3n tr\u1ef1c quan."},spellchecker:{desc:"B\u1eadt/T\u1eaft ki\u1ec3m tra ch\u00ednh t\u1ea3",menu:"Thi\u1ebft l\u1eadp ki\u1ec3m tra ch\u00ednh t\u1ea3","ignore_word":"B\u1ecf qua t\u1eeb ng\u1eef","ignore_words":"B\u1ecf qua t\u1ea5t c\u1ea3",langs:"Ng\u00f4n ng\u1eef",wait:"Vui l\u00f2ng ch\u1edd...",sug:"G\u1ee3i \u00fd","no_sug":"Kh\u00f4ng c\u00f3 g\u1ee3i \u00fd","no_mpell":"Kh\u00f4ng c\u00f3 l\u1ed7i ch\u00ednh t\u1ea3 \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y.","learn_word":"Learn word"},pagebreak:{desc:"Ch\u00e8n ng\u1eaft trang."},advlist:{types:"Ki\u1ec3u",def:"M\u1eb7c \u0111\u1ecbnh","lower_alpha":"K\u00fd hi\u1ec7u alpha th\u01b0\u1eddng","lower_greek":"K\u00fd hi\u1ec7u Hy-l\u1ea1p th\u01b0\u1eddng","lower_roman":"K\u00fd hi\u1ec7u La m\u00e3 th\u01b0\u1eddng","upper_alpha":"K\u00fd hi\u1ec7u alpha cao","upper_roman":"K\u00fd hi\u1ec7u La m\u00e3 hoa",circle:"Tr\u00f2ng",disc:"\u0110\u0129a",square:"Vu\u00f4ng"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh-cn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh-cn.js
new file mode 100644
index 000000000..42f7abbc9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh-cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({"zh-cn":{common:{"more_colors":"\u66f4\u591a\u989c\u8272","invalid_data":"\u9519\u8bef\uff1a\u6807\u8bb0\u4e3a\u7ea2\u8272\u7684\u90e8\u5206\u6709\u8bef\u3002","popup_blocked":"\u62b1\u6b49\uff0c\u60a8\u7981\u7528\u4e86\u5f39\u51fa\u7a97\u53e3\u529f\u80fd\u3002\u4e3a\u4e86\u4f7f\u7528\u8be5\u5de5\u5177\u7684\u5168\u90e8\u529f\u80fd\uff0c\u60a8\u9700\u8981\u5141\u8bb8\u5f39\u51fa\u7a97\u53e3\u3002","clipboard_no_support":"\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\uff0c\u4f7f\u7528\u5feb\u6377\u952e\u4ee3\u66ff\u3002","clipboard_msg":"\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u590d\u5236/\u7c98\u8d34/\u526a\u5207\u3002\u60a8\u8981\u67e5\u770b\u8be5\u95ee\u9898\u66f4\u591a\u7684\u4fe1\u606f\u5417\uff1f","not_set":"-- \u672a\u8bbe\u7f6e --","class_name":"\u7c7b\u522b",browse:"\u6d4f\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5e94\u7528","edit_confirm":"\u8be5\u6587\u672c\u57df\u662f\u5426\u9700\u8981\u4f7f\u7528\u6240\u89c1\u5373\u6240\u5f97\u6a21\u5f0f\uff1f","invalid_data_number":"{#field} \u5fc5\u987b\u4e3a\u6570\u5b57","invalid_data_min":"{#field} \u5fc5\u987b\u4e3a\u5927\u4e8e {#min} \u7684\u6570\u5b57","invalid_data_size":"{#field} \u5fc5\u987b\u4e3a\u6570\u5b57\u6216\u767e\u5206\u6570",value:"(value)"},contextmenu:{full:"\u4e24\u7aef\u5bf9\u9f50",right:"\u53f3\u5bf9\u9f50",center:"\u5c45\u4e2d",left:"\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50"},insertdatetime:{"day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u6253\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u6587\u5b57\u65b9\u5411\u4e3a\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u6587\u5b57\u65b9\u5411\u4e3a\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u5efa\u5c42...","absolute_desc":"\u5207\u6362\u5230\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u7f6e\u540e","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u65b0\u5c42"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u53d6\u6d88\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u4e0d\u95f4\u65ad\u7a7a\u683c\u7b26"},iespell:{download:"\u62fc\u5199\u68c0\u67e5\u672a\u5b89\u88c5\uff0c\u662f\u5426\u9a6c\u4e0a\u5b89\u88c5\uff1f","iespell_desc":"\u62fc\u5199\u68c0\u67e5"},advhr:{"delta_height":"\u9ad8\u5ea6","delta_width":"\u5bbd\u5ea6","advhr_desc":"\u6c34\u5e73\u7ebf"},emotions:{"emotions_desc":"\u8868\u60c5","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u67e5\u627e/\u66ff\u6362","search_desc":"\u67e5\u627e","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7f16\u8f91CSS\u6837\u5f0f","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u6a21\u5f0f\u7c98\u8d34\uff0c\u518d\u6b21\u70b9\u51fb\u8fd4\u56de\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002","plaintext_mode_sticky":"\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u6a21\u5f0f\u7c98\u8d34\u3002\u518d\u6b21\u70b9\u51fb\u8fd4\u56de\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\uff0c\u5728\u60a8\u7c98\u8d34\u5185\u5bb9\u540e\u5c06\u8fd4\u56de\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002","selectall_desc":"\u5168\u9009","paste_word_desc":"\u4eceWord\u7c98\u8d34","paste_text_desc":"\u4ee5\u7eaf\u6587\u672c\u7c98\u8d34"},"paste_dlg":{"word_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002","text_linebreaks":"\u4fdd\u7559\u65ad\u884c","text_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002"},table:{cell:"\u5355\u5143\u683c",col:"\u5217",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u884c","cut_row_desc":"\u526a\u5207\u884c","paste_row_after_desc":"\u5728\u4e0b\u65b9\u7c98\u8d34\u884c","paste_row_before_desc":"\u5728\u4e0a\u65b9\u7c98\u8d34\u884c","props_desc":"\u8868\u683c\u5c5e\u6027","cell_desc":"\u5355\u5143\u683c\u5c5e\u6027","row_desc":"\u884c\u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u5355\u5143\u683c","split_cells_desc":"\u5206\u5272\u5355\u5143\u683c","delete_col_desc":"\u5220\u9664\u5217","col_after_desc":"\u5728\u53f3\u4fa7\u63d2\u5165\u5217","col_before_desc":"\u5728\u5de6\u4fa7\u63d2\u5165\u5217","delete_row_desc":"\u5220\u9664\u884c","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u884c","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u6062\u590d\u4fdd\u5b58\u7684\u5185\u5bb9\uff0c\u60a8\u5f53\u524d\u7f16\u8f91\u7684\u6240\u6709\u7684\u5185\u5bb9\u5c06\u4e22\u5931\u3002nn\u60a8\u786e\u5b9a\u8981\u6062\u590d\u4fdd\u5b58\u7684\u5185\u5bb9\u5417\uff1f","restore_content":"\u6062\u590d\u81ea\u52a8\u4fdd\u5b58\u7684\u5185\u5bb9\u3002","unload_msg":"\u5982\u679c\u9000\u51fa\u8be5\u9875\uff0c\u60a8\u6240\u505a\u7684\u66f4\u6539\u5c06\u4e22\u5931\u3002"},fullscreen:{desc:"\u5207\u6362\u5168\u5c4f\u6a21\u5f0f"},media:{edit:"\u7f16\u8f91\u5d4c\u5165\u5f0f\u5a92\u4f53",desc:"\u63d2\u5165/\u7f16\u8f91 \u5d4c\u5165\u5f0f\u5a92\u4f53","delta_height":"","delta_width":""},fullpage:{desc:"\u6587\u4ef6\u5c5e\u6027","delta_width":"\u5bbd\u5ea6","delta_height":"\u9ad8\u5ea6"},template:{desc:"\u63d2\u5165\u9884\u8bbe\u7684\u6a21\u677f\u5185\u5bb9"},visualchars:{desc:"\u663e\u793a/\u9690\u85cf \u975e\u53ef\u89c1\u5b57\u7b26"},spellchecker:{desc:"\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5199\u68c0\u67e5\u8bbe\u7f6e","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8bed\u8a00",wait:"\u8bf7\u7a0d\u5019...",sug:"\u5efa\u8bae","no_sug":"\u65e0\u5efa\u8bae","no_mpell":"\u65e0\u62fc\u5199\u9519\u8bef","learn_word":"\u5b66\u4e60\u8bcd\u7ec4"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26"},advlist:{types:"\u6837\u5f0f",def:"\u9ed8\u8ba4","lower_alpha":"\u5c0f\u5199\u5b57\u6bcd","lower_greek":"\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd","lower_roman":"\u5c0f\u5199\u7f57\u9a6c\u6570\u5b57","upper_alpha":"\u5927\u5199\u5b57\u6bcd","upper_roman":"\u5927\u5199\u7f57\u9a6c\u6570\u5b57",circle:"\u5706\u5708",disc:"\u5706\u70b9",square:"\u65b9\u5757"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"\u5bcc\u6587\u672c\u57df"},wordcount:{words:"\u5b57\u6570:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh-tw.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh-tw.js
new file mode 100644
index 000000000..9352b2649
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh-tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({"zh-tw":{common:{"more_colors":"\u5176\u4ed6\u984f\u8272","invalid_data":"\u7d05\u8272\u6a19\u793a\u8d77\u4f86\u7684\u5730\u65b9\u6709\u932f\u8aa4","popup_blocked":"\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u9019\u500b\u529f\u80fd\uff0c\u8acb\u6539\u8b8a\u8edf\u9ad4\u6709\u95dc\u5f48\u8df3\u8996\u7a97\u8a2d\u5b9a\uff0c\u8acb\u5141\u8a31\u4ed6\uff0c\u7a0b\u5f0f\u624d\u80fd\u6b63\u5e38\u904b\u4f5c","clipboard_no_support":"\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u9019\u500b\u529f\u80fd\uff0c\u8acb\u4f7f\u7528\u9375\u76e4\u4e0a\u7684\u5feb\u901f\u9375\u8a66\u8a66\u770b\uff0c\u656c\u8acb\u898b\u8ad2","clipboard_msg":"\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u529f\u80fd\u5594\uff01\u5efa\u8b70\u4f7f\u7528\u9375\u76e4\u4e0a\u7684 Ctrl X (\u526a\u4e0b) \u6216 Ctrl V (\u8cbc\u4e0a) \u4ee3\u66ff","not_set":"- \u672a\u8a2d\u5b9a -","class_name":"Class \u985e\u5225",browse:"\u700f\u89bd",close:"\u95dc\u9589\u756b\u9762",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u52a0\u5165",apply:"\u9810\u89bd","edit_confirm":"\u4f60\u8981\u4f7f\u7528\u300c\u6587\u5b57\u7de8\u8f2f\u5668\u300d\u4f86\u7de8\u8f2f\u4f60\u7684\u6587\u7ae0\u55ce\uff1f","invalid_data_number":"{#field} \u61c9\u8a72\u8981\u586b\u6578\u5b57","invalid_data_min":"{#field} \u4f60\u586b\u5beb\u7684\u6578\u5b57\uff0c\u5fc5\u9808\u5927\u65bc {#min}","invalid_data_size":"{#field} \u61c9\u8a72\u8981\u586b\u5beb\u6578\u5b57 \u6216 \u767e\u5206\u6bd4 (%)",value:"(value)"},contextmenu:{full:"\u5206\u6563\u5c0d\u9f4a",right:"\u5411\u53f3\u908a",center:"\u7f6e\u4e2d",left:"\u5411\u5de6\u908a",align:"\u5c0d\u9f4a\u65b9\u5f0f"},insertdatetime:{"day_short":"\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5","day_long":"\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u6642\u9593","insertdate_desc":"\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9810\u89bd"},directionality:{"rtl_desc":"\u5f9e\u53f3\u908a\u5230\u5de6\u908a","ltr_desc":"\u5f9e\u5de6\u908a\u5230\u53f3\u908a"},layer:{content:"\u65b0\u589e\u7db2\u9801\u5716\u5c64","absolute_desc":"\u5b9a\u4f4d","backward_desc":"\u653e\u5230\u5f8c\u9762","forward_desc":"\u6392\u5728\u524d\u9762","insertlayer_desc":"\u65b0\u589e\u7db2\u9801\u5716\u5c64"},save:{"save_desc":"\u5b58\u6a94","cancel_desc":"\u5168\u90e8\u53d6\u6d88"},nonbreaking:{"nonbreaking_desc":"\u52a0\u5165\u4e0d\u65b7\u884c\u7684\u7b26\u865f"},iespell:{download:"\u7a0b\u5f0f\u627e\u4e0d\u5230 ieSpell \uff0c\u4f60\u8981\u5b89\u88dd\u5b83\u55ce\uff1f","iespell_desc":"\u6aa2\u67e5\u82f1\u6587\u8a9e\u6cd5"},advhr:{"delta_height":"\u9ad8","delta_width":"\u5bec","advhr_desc":"\u6c34\u5e73\u7dda"},emotions:{"delta_height":"","emotions_desc":"\u8868\u60c5\u7b26\u865f","delta_width":""},searchreplace:{"replace_desc":"\u641c\u5c0b\u53d6\u4ee3","search_desc":"\u641c\u5c0b","delta_width":"","delta_height":""},advimage:{"image_desc":"\u52a0\u5165 / \u7de8\u8f2f\u5716\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u52a0\u5165 / \u7de8\u8f2f\u7db2\u5740","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_desc":"\u65b0\u589e / \u7de8\u8f2f\u5c6c\u6027","ins_desc":"\u65b0\u589e","del_desc":"\u522a\u9664","acronym_desc":"\u982d\u5b57\u8a9e (\u975e\u4e00\u822c\u82f1\u6587\u7e2e\u5beb)","abbr_desc":"\u82f1\u6587\u7e2e\u5beb","cite_desc":"\u5f15\u7528","attribs_delta_height":"","attribs_delta_width":"","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7de8\u8f2f CSS \u6a23\u5f0f","delta_height":"","delta_width":""},paste:{"plaintext_mode":"\u73fe\u5728\u662f\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u4f60\u73fe\u5728\u8cbc\u4e0a\u7684\u8cc7\u6599\u53ea\u6703\u51fa\u73fe\u6587\u5b57","plaintext_mode_sticky":"\u73fe\u5728\u662f\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f\uff0c\u4f60\u73fe\u5728\u8cbc\u4e0a\u7684\u8cc7\u6599\u53ea\u6703\u51fa\u73fe\u6587\u5b57\uff0c\u4f46\u4f60\u8cbc\u4e0a\u8cc7\u6599\u5f8c\u5c07\u56de\u5230\u4e00\u822c\u6a21\u5f0f\u53ef\u4ee5\u8cbc\u4e0a\u5716\u7247\u3001\u5f71\u7247\u7b49\u7b49","selectall_desc":"\u5168\u9078","paste_word_desc":"\u5f9e Word \u8cbc\u4e0a","paste_text_desc":"\u53ea\u8cbc\u4e0a\u6587\u5b57"},"paste_dlg":{"word_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8907\u88fd) \u8cc7\u6599\u5230\u756b\u9762\u4e0a","text_linebreaks":"\u4fdd\u7559\u6587\u7ae0\u4e2d\u7684\u63db\u884c","text_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8cbc\u4e0a) \u8cc7\u6599\u5230\u756b\u9762\u4e0a"},table:{cell:"\u5132\u5b58\u683c",col:"\u6b04",row:"\u5217",del:"\u522a\u9664\u8868\u683c","copy_row_desc":"\u8907\u88fd\u8868\u683c\u4e0a\u7684\u5217","cut_row_desc":"\u526a\u4e0b\u8868\u683c\u7684\u5217","paste_row_after_desc":"\u8cbc\u5728\u9019\u689d\u5217\u7684\u5f8c\u9762","paste_row_before_desc":"\u8cbc\u5728\u9019\u689d\u5217\u7684\u524d\u9762","props_desc":"\u8868\u683c\u8a2d\u5b9a","cell_desc":"\u5132\u5b58\u683c\u7684\u8a2d\u5b9a","row_desc":"\u5217\u7684\u8a2d\u5b9a","merge_cells_desc":"\u5408\u4f75\u8868\u683c","split_cells_desc":"\u5206\u5272\u5132\u5b58\u683c","delete_col_desc":"\u79fb\u9664\u8868\u683c\u6b04\u4f4d","col_after_desc":"\u5728\u53f3\u908a\u52a0\u5165\u4e00\u500b\u6b04\u4f4d","col_before_desc":"\u5728\u5de6\u908a\u52a0\u5165\u4e00\u500b\u6b04\u4f4d","delete_row_desc":"\u522a\u9664\u9019\u6574\u5217","row_after_desc":"\u5728\u4e0b\u65b9\u52a0\u5165\u4e00\u5217","row_before_desc":"\u5728\u4e0a\u65b9\u52a0\u5165\u4e00\u5217",desc:"\u65b0\u589e\u4e00\u500b\u8868\u683c","merge_cells_delta_height":"","merge_cells_delta_width":"","table_delta_height":"","table_delta_width":"","cellprops_delta_height":"","cellprops_delta_width":"","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u4f60\u8981\u9084\u539f\u8cc7\u6599\u7684\u8a71\uff0c\u4f60\u73fe\u5728\u7684\u6587\u7ae0\u5c07\u88ab\u522a\u9664\uff0c\u78ba\u5b9a\u8981\u9084\u539f\u55ce\uff1f","restore_content":"\u9084\u539f","unload_msg":"\u4f60\u5982\u679c\u96e2\u958b\u9019\u500b\u756b\u9762\uff0c\u7a0b\u5f0f\u6703\u79fb\u9664\u6587\u7ae0\u5099\u4efd (\u4f46\u4e0d\u5f71\u97ff\u5230\u7db2\u7ad9\u904b\u4f5c)"},fullscreen:{desc:"\u653e\u5927\u5230\u6574\u500b\u87a2\u5e55"},media:{"delta_height":"",edit:"\u6539\u8b8a\u8a2d\u5b9a",desc:"\u52a0\u5165\u5d4c\u5165\u8a9e\u6cd5","delta_width":""},fullpage:{desc:"\u9801\u9762\u5c6c\u6027","delta_width":"","delta_height":""},template:{desc:"\u4f7f\u7528\u7248\u578b"},visualchars:{desc:"\u986f\u793a\u96b1\u85cf\u7684\u5b57"},spellchecker:{desc:"\u4f7f\u7528\u82f1\u6587\u8a9e\u6cd5\u6aa2\u67e5",menu:"\u8a2d\u5b9a","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8a9e\u8a00",wait:"\u7a0d\u7b49",sug:"\u62fc\u5b57\u5efa\u8b70","no_sug":"\u7121","no_mpell":"\u6c92\u6709\u8a9e\u6cd5\u4e0a\u7684\u554f\u984c","learn_word":"\u81ea\u52d5\u5b78\u7fd2\u529f\u80fd"},pagebreak:{desc:"\u52a0\u4e0a\u5206\u9801\u7b26\u865f"},advlist:{types:"\u5f62\u5f0f",def:"\u9810\u8a2d","lower_alpha":"\u5c0f\u5beb\u7684\u82f1\u6587","lower_greek":"\u5e0c\u81d8\u6587","lower_roman":"\u5c0f\u5beb\u7684\u7f85\u99ac\u6578\u5b57","upper_alpha":"\u5927\u5beb\u7684\u82f1\u6587","upper_roman":"\u5927\u5beb\u7684\u7f85\u99ac\u6578\u5b57",circle:"\u7a7a\u5fc3\u7684\u5713\u5708\u5708",disc:"\u5713\u5708\u5708",square:"\u6b63\u65b9\u5f62"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"\u6587\u5b57\u7de8\u8f2f\u5340"},wordcount:{words:"\u6587\u7ae0\u5167\u7684\u5b57\u6578: "}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh.js
new file mode 100644
index 000000000..65488254d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zh.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({zh:{common:{"more_colors":"\u66f4\u591a\u984f\u8272","invalid_data":"\u932f\u8aa4: \u7d05\u8272\u6a19\u8a18\u7684\u90e8\u4efd, \u70ba\u60a8\u8f38\u5165\u7684\u503c\u662f\u7121\u6548\u7684.","popup_blocked":"\u5f88\u62b1\u6b49, \u6211\u5011\u6ce8\u610f\u5230\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u5141\u8a31\u5f48\u8df3\u8996\u7a97. \u8acb\u70ba\u6b64\u7ad9\u89e3\u9664\u5feb\u986f\u5c01\u9396\u7a0b\u5f0f, \u4ee5\u6709\u6548\u5229\u7528\u6b64\u7de8\u8f2f\u5668\u5de5\u5177.","clipboard_no_support":"\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u6b64\u529f\u80fd, \u8acb\u4f7f\u7528\u9375\u76e4\u5feb\u6377\u9375\u64cd\u4f5c.","clipboard_msg":"Mozilla \u548c Firefox \u4e0d\u652f\u63f4\u8907\u88fd/\u526a\u4e0b/\u8cbc\u4e0a. \n\u60a8\u9700\u8981\u95dc\u65bc\u6b64\u554f\u984c\u66f4\u9032\u4e00\u6b65\u7684\u8cc7\u8a0a\u55ce?","not_set":"--\u5c1a\u672a\u8a2d\u5b9a--","class_name":"\u985e\u5225",browse:"\u9810\u89bd",close:"\u95dc\u9589",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5957\u7528","edit_confirm":"\u662f\u5426\u9700\u8981\u958b\u555f\u6587\u5b57\u7de8\u8f2f\u5668\uff1f","invalid_data_number":"{#field} \u5fc5\u9808\u662f\u6578\u5b57","invalid_data_min":"{#field} \u5fc5\u9808\u662f\u5927\u65bc {#min} \u7684\u6578\u5b57","invalid_data_size":"{#field} \u5fc5\u9808\u662f\u6578\u5b57\u6216\u767e\u5206\u6bd4",value:"(\u6578\u503c)"},contextmenu:{full:"\u5de6\u53f3\u5c0d\u9f4a",right:"\u9760\u53f3\u5c0d\u9f4a",center:"\u7f6e\u4e2d\u5c0d\u9f4a",left:"\u9760\u5de6\u5c0d\u9f4a",align:"\u5c0d\u9f4a"},insertdatetime:{"day_short":"\u65e5,\u4e00,\u4e8c,\u4e09,\u56db,\u4e94,\u516d","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u53c1\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708 \u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u76ee\u524d\u6642\u9593","insertdate_desc":"\u63d2\u5165\u76ee\u524d\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y/%m/%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9810\u89bd"},directionality:{"rtl_desc":"\u5f9e\u53f3\u5230\u5de6","ltr_desc":"\u5f9e\u5de6\u5230\u53f3"},layer:{content:"\u5efa\u7acb\u65b0\u5716\u5c64...","absolute_desc":"\u5207\u63db\u5230\u7d55\u5c0d\u4f4d\u7f6e","backward_desc":"\u79fb\u81f3\u5f8c\u65b9","forward_desc":"\u79fb\u81f3\u524d\u65b9","insertlayer_desc":"\u63d2\u5165\u5716\u5c64"},save:{"save_desc":"\u5132\u5b58","cancel_desc":"\u53d6\u6d88\u6240\u6709\u8b8a\u66f4"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u683c"},iespell:{download:"\u672a\u5075\u6e2c\u5230 ieSpell \u63d2\u4ef6, \u662f\u5426\u73fe\u5728\u5b89\u88dd?","iespell_desc":"\u62fc\u5b57\u6aa2\u67e5"},advhr:{"advhr_desc":"\u6c34\u5e73\u7dda","delta_height":"","delta_width":""},emotions:{"delta_height":"","delta_width":"","emotions_desc":"\u8868\u60c5"},searchreplace:{"replace_desc":"\u5c0b\u627e/\u53d6\u4ee3","delta_width":"","search_desc":"\u5c0b\u627e","delta_height":""},advimage:{"delta_width":"","image_desc":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"60","attribs_delta_width":"40","attribs_desc":"\u63d2\u5165/\u7de8\u8f2f\u5c6c\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u522a\u9664","acronym_desc":"\u9996\u5b57\u6bcd\u7e2e\u5beb","abbr_desc":"\u7e2e\u5beb","cite_desc":"\u5f15\u7528","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{"delta_height":"","delta_width":"",desc:"\u7de8\u8f2f CSS \u6a23\u5f0f\u8868"},paste:{"plaintext_mode":"\u76ee\u524d\u70ba\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f, \u8acb\u518d\u9ede\u64ca\u4e00\u6b21\u5207\u63db\u56de\u4e00\u822c\u8cbc\u4e0a\u6a21\u5f0f.","plaintext_mode_sticky":"\u76ee\u524d\u70ba\u4e00\u822c\u8cbc\u4e0a\u6a21\u5f0f, \u8acb\u518d\u9ede\u64ca\u4e00\u6b21\u5207\u63db\u56de\u7d14\u6587\u5b57\u8cbc\u4e0a\u6a21\u5f0f. \u7576\u5b8c\u6210\u8cbc\u4e0a\u52d5\u4f5c\u5f8c\u5c07\u6703\u5207\u63db\u6210\u4e00\u822c\u8cbc\u4e0a\u6a21\u5f0f.","selectall_desc":"\u5168\u9078","paste_word_desc":"\u4ee5 Word \u683c\u5f0f\u8cbc\u4e0a","paste_text_desc":"\u4ee5\u7d14\u6587\u5b57\u8cbc\u4e0a"},"paste_dlg":{"word_title":"\u8acb\u4f7f\u7528 CTRL V \u5c07\u5167\u5bb9\u8cbc\u4e0a.","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u865f","text_title":"\u8acb\u4f7f\u7528 CTRL V \u5c07\u5167\u5bb9\u8cbc\u4e0a."},table:{"merge_cells_delta_height":"40","merge_cells_delta_width":"40","table_delta_height":"60","table_delta_width":"40","cellprops_delta_height":"10","cellprops_delta_width":"10",cell:"\u5132\u5b58\u683c",col:"\u6b04",row:"\u5217",del:"\u522a\u9664\u8868\u683c","copy_row_desc":"\u8907\u88fd\u9078\u64c7\u7684\u8868\u683c\u5217","cut_row_desc":"\u526a\u4e0b\u9078\u64c7\u7684\u8868\u683c\u5217","paste_row_after_desc":"\u5728\u4e0b\u65b9\u8cbc\u4e0a\u5217","paste_row_before_desc":"\u5728\u4e0a\u65b9\u8cbc\u4e0a\u5217","props_desc":"\u8868\u683c\u5c6c\u6027","cell_desc":"\u5132\u5b58\u683c\u5c6c\u6027","row_desc":"\u5217\u5c6c\u6027","merge_cells_desc":"\u5408\u4f75\u5132\u5b58\u683c","split_cells_desc":"\u5206\u5272\u5132\u5b58\u683c","delete_col_desc":"\u522a\u9664\u76ee\u524d\u6b04","col_after_desc":"\u5728\u53f3\u5074\u63d2\u5165\u6b04","col_before_desc":"\u5728\u5de6\u5074\u63d2\u5165\u6b04","delete_row_desc":"\u522a\u9664\u76ee\u524d\u5217","row_after_desc":"\u5728\u4e0b\u65b9\u63d2\u5165\u5217","row_before_desc":"\u5728\u4e0a\u65b9\u63d2\u5165\u5217",desc:"\u63d2\u5165\u65b0\u8868\u683c","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"warning_message":"\u5982\u679c\u60a8\u8981\u6062\u5fa9\u5df2\u5132\u5b58\u7684\u5167\u5bb9, \u5c07\u6703\u6d41\u5931\u76ee\u524d\u6b63\u5728\u7de8\u8f2f\u7684\u5167\u5bb9.\n\n\u60a8\u78ba\u5b9a\u8981\u6062\u5fa9\u5df2\u5132\u5b58\u7684\u5167\u5bb9\u55ce?","restore_content":"\u6062\u5fa9\u81ea\u52d5\u5132\u5b58\u7684\u5167\u5bb9.","unload_msg":"\u5982\u679c\u60a8\u76f4\u63a5\u96e2\u958b\u6b64\u9801\u5c07\u6703\u6d41\u5931\u60a8\u6240\u7de8\u8f2f\u7684\u5167\u5bb9."},fullscreen:{desc:"\u5168\u87a2\u5e55\u7de8\u8f2f"},media:{edit:"\u7de8\u8f2f\u591a\u5a92\u9ad4",desc:"\u63d2\u5165/\u7de8\u8f2f\u591a\u5a92\u9ad4","delta_height":"","delta_width":""},fullpage:{desc:"\u6587\u4ef6\u5c6c\u6027","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u5df2\u5b9a\u7fa9\u7684\u6a23\u677f"},visualchars:{desc:"\u986f\u793a/\u96b1\u85cf\u975e\u53ef\u898b\u5b57\u5143."},spellchecker:{desc:"\u958b/\u95dc\u62fc\u5beb\u6aa2\u67e5",menu:"\u62fc\u5beb\u6aa2\u67e5\u8a2d\u5b9a","ignore_word":"\u5ffd\u7565","ignore_words":"\u5168\u90e8\u5ffd\u7565",langs:"\u8a9e\u8a00",wait:"\u8acb\u7a0d\u5f8c...",sug:"\u5efa\u8b70","no_sug":"\u7121\u5efa\u8b70","no_mpell":"\u7121\u62fc\u5beb\u932f\u8aa4","learn_word":"\u52a0\u5165\u5b57\u5f59"},pagebreak:{desc:"\u63d2\u5165\u5206\u9801\u7b26\u865f"},advlist:{types:"\u985e\u578b",def:"\u9810\u8a2d","lower_alpha":"\u5c0f\u5beb\u7684\u82f1\u6587\u5b57","lower_greek":"\u5c0f\u5beb\u7684\u5e0c\u81d8\u5b57","lower_roman":"\u5c0f\u5beb\u7684\u7f85\u99ac\u5b57","upper_alpha":"\u5927\u5beb\u82f1\u6587\u5b57","upper_roman":"\u5927\u5beb\u7684\u7f85\u99ac\u5b57",circle:"\u5713\u5708",disc:"\u5713\u9ede",square:"\u65b9\u584a"},colors:{"333300":"\u6df1\u6a44\u6b16\u8272","993300":"\u7126\u6a59\u8272","000000":"\u9ed1\u8272","003300":"\u6df1\u7da0\u8272","003366":"\u6df1\u5929\u85cd\u8272","000080":"\u6d77\u6d0b\u85cd","333399":"\u975b\u85cd\u8272","333333":"\u6697\u7070\u8272","800000":"\u6817\u8272",FF6600:"\u6a59\u8272","808000":"\u6a44\u6b16\u8272","008000":"\u7da0\u8272","008080":"\u6c34\u9d28\u8272","0000FF":"\u85cd\u8272","666699":"\u7070\u85cd\u8272","808080":"\u7070\u8272",FF0000:"\u7d05\u8272",FF9900:"\u7425\u73c0\u8272","99CC00":"\u9ec3\u7da0\u8272","339966":"\u6d77\u7da0\u8272","33CCCC":"\u7da0\u677e\u8272","3366FF":"\u5bf6\u85cd\u8272","800080":"\u7d2b\u8272","999999":"\u4e2d\u7070\u8272",FF00FF:"\u6d0b\u7d05\u8272",FFCC00:"\u91d1\u8272",FFFF00:"\u9ec3\u8272","00FF00":"\u840a\u59c6\u7da0\u8272","00FFFF":"\u6c34\u7da0\u8272","00CCFF":"\u5929\u85cd\u8272","993366":"\u68d5\u8272",C0C0C0:"\u9280\u8272",FF99CC:"\u7c89\u7d05\u8272",FFCC99:"\u871c\u6843\u8272",FFFF99:"\u6de1\u9ec3\u8272",CCFFCC:"\u6de1\u7da0\u8272",CCFFFF:"\u6de1\u85cd\u8272","99CCFF":"\u6dfa\u5929\u85cd\u8272",CC99FF:"\u694a\u674e\u8272",FFFFFF:"\u767d\u8272"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"\u76ee\u524d\u5b57\u6578:"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zu.js
new file mode 100644
index 000000000..9d08b2872
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/langs/zu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n({zu:{common:{"more_colors":"\u66f4\u591a\u989c\u8272","invalid_data":"\u9519\u8bef:\u65e0\u6548\u8f93\u5165\u503c\uff0c\u5df2\u6807\u8bb0\u4e3a\u7ea2\u8272\u3002","popup_blocked":"\u62b1\u6b49\uff01\u5feb\u663e\u89c6\u7a97\u5df2\u88ab\u963b\u6b62\uff0c\u8bf7\u8c03\u6574\u6d41\u89c8\u5668\u8bbe\u7f6e\uff0c\u5141\u8bb8\u6b64\u7f51\u7ad9\u53ef\u5f39\u51fa\u65b0\u89c6\u7a97\uff0c\u4ee5\u4fbf\u4f7f\u7528\u6b64\u5de5\u5177","clipboard_no_support":"\u8fd8\u4e0d\u652f\u63f4\u60a8\u7684\u6d41\u89c8\u5668\uff0c\u8bf7\u4f7f\u7528\u952e\u76d8\u5feb\u901f\u952e","clipboard_msg":"\u590d\u5236\u3001\u526a\u4e0b\u3001\u8d34\u4e0a\u529f\u80fd\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u3002 \n\u662f\u5426\u9700\u8981\u4e86\u89e3\u66f4\u591a\u6709\u5173\u6b64\u95ee\u9898\u7684\u8d44\u8baf\uff1f","not_set":"--\u672a\u8bbe\u7f6e--","class_name":"\u6837\u5f0f",browse:"\u6d41\u89c8",close:"\u5173\u95ed",cancel:"\u53d6\u6d88",update:"\u66f4\u65b0",insert:"\u63d2\u5165",apply:"\u5e94\u7528","edit_confirm":"\u662f\u5426\u5728\u6b64textarea\u6807\u7b7e\u5185\u4f7f\u7528\"\u6240\u89c1\u5373\u6240\u5f97\"\u6a21\u5f0f\uff1f","invalid_data_number":"{#field} must be a number","invalid_data_min":"{#field} must be a number greater than {#min}","invalid_data_size":"{#field} must be a number or percentage",value:"(value)"},contextmenu:{full:"\u4e24\u7aef\u5bf9\u9f50",right:"\u9760\u53f3\u5bf9\u9f50",center:"\u5c45\u4e2d\u5bf9\u9f50",left:"\u9760\u5de6\u5bf9\u9f50",align:"\u5bf9\u9f50\u65b9\u5f0f"},insertdatetime:{"day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","inserttime_desc":"\u63d2\u5165\u73b0\u5728\u65f6\u95f4","insertdate_desc":"\u63d2\u5165\u4eca\u5929\u65e5\u671f","time_fmt":"%H:%M:%S","date_fmt":"%Y-%m-%d"},print:{"print_desc":"\u5217\u5370"},preview:{"preview_desc":"\u9884\u89c8"},directionality:{"rtl_desc":"\u6587\u5b57\u4ece\u53f3\u5230\u5de6","ltr_desc":"\u6587\u5b57\u4ece\u5de6\u5230\u53f3"},layer:{content:"\u65b0\u589e\u5c42...","absolute_desc":"\u5f00\u5173\u7edd\u5bf9\u4f4d\u7f6e","backward_desc":"\u7f6e\u540e","forward_desc":"\u7f6e\u524d","insertlayer_desc":"\u63d2\u5165\u5c42"},save:{"save_desc":"\u4fdd\u5b58","cancel_desc":"\u53d6\u6d88\u6240\u6709\u66f4\u6539"},nonbreaking:{"nonbreaking_desc":"\u63d2\u5165\u7a7a\u767d\u683c"},iespell:{download:"\u672a\u68c0\u6d4b\u5230ieSpell\u7684\u5b58\u5728\u3002\u662f\u5426\u73b0\u5728\u7acb\u5373\u5b89\u88c5\uff1f","iespell_desc":"\u62fc\u5199\u68c0\u67e5"},advhr:{"advhr_desc":"\u6c34\u5e73\u7ebf","delta_height":"","delta_width":""},emotions:{"emotions_desc":"\u56fe\u91ca","delta_height":"","delta_width":""},searchreplace:{"replace_desc":"\u67e5\u627e/\u66ff\u6362","search_desc":"\u67e5\u627e","delta_width":"","delta_height":""},advimage:{"image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","delta_width":"","delta_height":""},advlink:{"link_desc":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","delta_height":"","delta_width":""},xhtmlxtras:{"attribs_delta_height":"60","attribs_delta_width":"40","attribs_desc":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","ins_desc":"\u63d2\u5165","del_desc":"\u5220\u9664","acronym_desc":"\u9996\u5b57\u7f29\u5199","abbr_desc":"\u7f29\u5199","cite_desc":"\u5f15\u6587","ins_delta_height":"","ins_delta_width":"","del_delta_height":"","del_delta_width":"","acronym_delta_height":"","acronym_delta_width":"","abbr_delta_height":"","abbr_delta_width":"","cite_delta_height":"","cite_delta_width":""},style:{desc:"\u7f16\u8f91CSS\u6837\u5f0f\u8868","delta_height":"","delta_width":""},paste:{"selectall_desc":"\u5168\u9009","paste_word_desc":"\u4eceWord\u8d34\u4e0a","paste_text_desc":"\u4ee5\u7eaf\u6587\u5b57\u8d34\u4e0a","plaintext_mode":"Paste is now in plain text mode. Click again to toggle back to regular paste mode.","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."},"paste_dlg":{"word_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7\u53f7","text_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002"},table:{"merge_cells_delta_height":"40","merge_cells_delta_width":"40","table_delta_height":"60","table_delta_width":"40","cellprops_delta_height":"10","cellprops_delta_width":"10",cell:"\u50a8\u5b58\u683c",col:"\u5217",row:"\u884c",del:"\u5220\u9664\u8868\u683c","copy_row_desc":"\u590d\u5236\u9009\u62e9\u884c","cut_row_desc":"\u526a\u4e0b\u9009\u62e9\u884c","paste_row_after_desc":"\u8d34\u5728\u4e0b\u884c","paste_row_before_desc":"\u8d34\u5728\u4e0a\u884c","props_desc":"\u8868\u683c\u5c5e\u6027","cell_desc":"\u50a8\u5b58\u683c\u5c5e\u6027","row_desc":"\u884c\u5c5e\u6027","merge_cells_desc":"\u5408\u5e76\u50a8\u5b58\u683c","split_cells_desc":"\u5206\u5272\u50a8\u5b58\u683c","delete_col_desc":"\u5220\u9664\u6240\u5728\u5217","col_after_desc":"\u63d2\u5165\u53f3\u65b9\u5217","col_before_desc":"\u63d2\u5165\u5de6\u65b9\u5217","delete_row_desc":"\u5220\u9664\u6240\u5728\u884c","row_after_desc":"\u63d2\u5165\u4e0b\u65b9\u884c","row_before_desc":"\u63d2\u5165\u4e0a\u65b9\u884c",desc:"\u63d2\u5165\u65b0\u8868\u683c","rowprops_delta_height":"","rowprops_delta_width":""},autosave:{"unload_msg":"\u5982\u679c\u79bb\u5f00\u6b64\u9875\u9762\u5c06\u5bfc\u81f4\u6240\u505a\u7684\u66f4\u6539\u5168\u90e8\u4e22\u5931\u3002","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?","restore_content":"Restore auto-saved content."},fullscreen:{desc:"\u5f00\u5173\u5168\u5c4f\u6a21\u5f0f"},media:{edit:"\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53",desc:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53","delta_height":"","delta_width":""},fullpage:{desc:"\u6863\u6848\u5c5e\u6027","delta_width":"","delta_height":""},template:{desc:"\u63d2\u5165\u9884\u5b9a\u7684\u8303\u672c\u5185\u5bb9"},visualchars:{desc:"\u663e\u793a\u63a7\u5236\u7b26\u53f7\u5f00/\u5173\u3002"},spellchecker:{desc:"\u5f00\u5173\u62fc\u5199\u68c0\u67e5",menu:"\u62fc\u5199\u68c0\u67e5\u8bbe\u7f6e","ignore_word":"\u7565\u8fc7","ignore_words":"\u5168\u90e8\u7565\u8fc7",langs:"\u8bed\u8a00",wait:"\u8bf7\u7a0d\u5019...",sug:"\u63a8\u8350\u5b57\u8bcd","no_sug":"\u65e0\u62fc\u5199\u63a8\u8350","no_mpell":"\u672a\u53d1\u73b0\u62fc\u5199\u9519\u8bef","learn_word":"Learn word"},pagebreak:{desc:"\u63d2\u5165\u5206\u9875\u7b26\u53f7"},advlist:{types:"Types",def:"Default","lower_alpha":"Lower Alpha","lower_greek":"Lower Greek","lower_roman":"Lower Roman","upper_alpha":"Upper Alpha","upper_roman":"Upper Roman",circle:"Circle",disc:"Disc",square:"Square"},colors:{"333300":"Dark olive","993300":"Burnt orange","000000":"Black","003300":"Dark green","003366":"Dark azure","000080":"Navy Blue","333399":"Indigo","333333":"Very dark gray","800000":"Maroon",FF6600:"Orange","808000":"Olive","008000":"Green","008080":"Teal","0000FF":"Blue","666699":"Grayish blue","808080":"Gray",FF0000:"Red",FF9900:"Amber","99CC00":"Yellow green","339966":"Sea green","33CCCC":"Turquoise","3366FF":"Royal blue","800080":"Purple","999999":"Medium gray",FF00FF:"Magenta",FFCC00:"Gold",FFFF00:"Yellow","00FF00":"Lime","00FFFF":"Aqua","00CCFF":"Sky blue","993366":"Brown",C0C0C0:"Silver",FF99CC:"Pink",FFCC99:"Peach",FFFF99:"Light yellow",CCFFCC:"Pale green",CCFFFF:"Pale cyan","99CCFF":"Light sky blue",CC99FF:"Plum",FFFFFF:"White"},aria:{"rich_text_area":"Rich Text Area"},wordcount:{words:"Words"}}}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ar_dlg.js
new file mode 100644
index 000000000..9ee0c398f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.advhr_dlg',{size:"\u0627\u0644\u0627\u0631\u062a\u0641\u0627\u0639",noshade:"\u0644\u0627 \u0638\u0644",width:"\u0627\u0644\u0639\u0631\u0636",normal:"\u0627\u0644\u0637\u0628\u064a\u0639\u064a",widthunits:"\u0627\u0644\u0648\u062d\u062f\u0627\u062a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/az_dlg.js
new file mode 100644
index 000000000..a1d0ecc81
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.advhr_dlg',{size:"H\u00fcnd\u00fcrl\u00fcy\u00fc",noshade:"K\u00f6lg\u0259 yoxdur",width:"Eni",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/be_dlg.js
new file mode 100644
index 000000000..de0ef3daf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.advhr_dlg',{size:"\u0412\u044b\u0448\u044b\u043d\u044f",noshade:"\u0411\u0435\u0437 \u0446\u0435\u043d\u044e",width:"\u0428\u044b\u0440\u044b\u043d\u044f",normal:"\u0417\u0432\u044b\u0447\u0430\u0439\u043d\u0430\u044f",widthunits:"\u0410\u0434\u0437\u0456\u043d\u043a\u0456 \u0432\u044b\u043c\u044f\u0440\u044d\u043d\u043d\u044f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bg_dlg.js
new file mode 100644
index 000000000..50d9d37f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.advhr_dlg',{size:"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430",noshade:"\u0411\u0435\u0437 \u0441\u044f\u043d\u043a\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",normal:"\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u0430",widthunits:"\u0415\u0434\u0438\u043d\u0438\u0446\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bn_dlg.js
new file mode 100644
index 000000000..2077a114c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/br_dlg.js
new file mode 100644
index 000000000..e38132066
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.advhr_dlg',{size:"Altura",noshade:"Sem sombra",width:"Largura",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bs_dlg.js
new file mode 100644
index 000000000..430597420
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.advhr_dlg',{size:"Visina",noshade:"Bez sjene",width:"\u0160irina",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ca_dlg.js
new file mode 100644
index 000000000..4ef722285
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.advhr_dlg',{size:"Al\u00e7ada",noshade:"Sense sombra",width:"Amplada",normal:"Normal",widthunits:"Unitats"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ch_dlg.js
new file mode 100644
index 000000000..6ff358c9b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.advhr_dlg',{size:"\u9ad8\u5ea6",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd\u5ea6",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cn_dlg.js
new file mode 100644
index 000000000..8661c718b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.advhr_dlg',{size:"\u9ad8\u5ea6",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd\u5ea6",normal:"\u5e38\u89c4",widthunits:"\u5355\u4f4d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cs_dlg.js
new file mode 100644
index 000000000..a74dd2072
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.advhr_dlg',{size:"V\u00fd\u0161ka",noshade:"Bez st\u00ednu",width:"\u0160\u00ed\u0159ka",normal:"Norm\u00e1ln\u00ed",widthunits:"Jednotky"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cy_dlg.js
new file mode 100644
index 000000000..d98b73597
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.advhr_dlg',{size:"Uchder",noshade:"Dim cysgod",width:"Lled",normal:"Normal",widthunits:"Unedau"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/da_dlg.js
new file mode 100644
index 000000000..3f9657c9e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.advhr_dlg',{size:"H\u00f8jde",noshade:"Ingen skygge",width:"Bredde",normal:"Normal",widthunits:"Enheder"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/de_dlg.js
new file mode 100644
index 000000000..7c5143e57
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.advhr_dlg',{size:"H\u00f6he",noshade:"Kein Schatten",width:"Breite",normal:"Normal",widthunits:"Einheiten"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/dv_dlg.js
new file mode 100644
index 000000000..d61b9d2af
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/el_dlg.js
new file mode 100644
index 000000000..3ca3adfd5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.advhr_dlg',{size:"\u038e\u03c8\u03bf\u03c2",noshade:"\u03a7\u03c9\u03c1\u03af\u03c2 \u03c3\u03ba\u03b9\u03ac",width:"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/en_dlg.js
new file mode 100644
index 000000000..0c3bf15e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.advhr_dlg',{size:"Height",noshade:"No Shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/eo_dlg.js
new file mode 100644
index 000000000..e5eddda44
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.advhr_dlg',{size:"Alteco",noshade:"Sen ombro",width:"Lar\u011deco",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/es_dlg.js
new file mode 100644
index 000000000..dacd6385f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.advhr_dlg',{size:"Alto",noshade:"Sin sombra",width:"Ancho",normal:"Normal",widthunits:"Unidades"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/et_dlg.js
new file mode 100644
index 000000000..5b0b2ba42
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.advhr_dlg',{size:"K\u00f5rgus",noshade:"Ilma varjuta",width:"Laius",normal:"Normaalne",widthunits:"\u00dchikud"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/eu_dlg.js
new file mode 100644
index 000000000..aaed07db6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.advhr_dlg',{size:"Altuera",noshade:"Itzalik gabe",width:"Zabalera",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fa_dlg.js
new file mode 100644
index 000000000..9b1760557
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.advhr_dlg',{size:"\u0627\u0631\u062a\u0641\u0627\u0639",noshade:"\u0628\u062f\u0648\u0646 \u0633\u0627\u06cc\u0647",width:"\u067e\u0647\u0646\u0627",normal:"\u0645\u0639\u0645\u0648\u0644\u06cc",widthunits:"\u0648\u0627\u062d\u062f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fi_dlg.js
new file mode 100644
index 000000000..3318d1f69
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.advhr_dlg',{size:"Korkeus",noshade:"Ei varjoa",width:"Leveys",normal:"Normaali",widthunits:"Yksik\u00f6t"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fr_dlg.js
new file mode 100644
index 000000000..4b6995cf6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.advhr_dlg',{size:"Hauteur",noshade:"Pas d\'ombre",width:"Largeur",normal:"Normal",widthunits:"Unit\u00e9s"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/gl_dlg.js
new file mode 100644
index 000000000..71adc8e91
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.advhr_dlg',{size:"Alto",noshade:"Sen sombra",width:"Ancho",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/gu_dlg.js
new file mode 100644
index 000000000..ac6758edd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/he_dlg.js
new file mode 100644
index 000000000..fd491ea4a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.advhr_dlg',{size:"\u05d2\u05d5\u05d1\u05d4",noshade:"\u05dc\u05dc\u05d0 \u05e6\u05dc",width:"\u05e8\u05d5\u05d7\u05d1",normal:"\u05e8\u05d2\u05d9\u05dc",widthunits:"\u05d9\u05d7\u05d9\u05d3\u05d5\u05ea"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hi_dlg.js
new file mode 100644
index 000000000..1ac67b0f4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hr_dlg.js
new file mode 100644
index 000000000..626838dbc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.advhr_dlg',{size:"Visina",noshade:"Bez sjene",width:"\u0160irina",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hu_dlg.js
new file mode 100644
index 000000000..f9ed72887
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.advhr_dlg',{size:"Magass\u00e1g",noshade:"\u00c1rny\u00e9k n\u00e9lk\u00fcl",width:"Sz\u00e9less\u00e9g",normal:"Norm\u00e1l",widthunits:"M\u00e9rt\u00e9kegys\u00e9gek"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hy_dlg.js
new file mode 100644
index 000000000..6638262cb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.advhr_dlg',{size:"\u0532\u0561\u0580\u0571\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",noshade:"\u0531\u057c\u0561\u0576\u0581 \u057d\u057f\u057e\u0565\u0580\u056b",width:"\u053c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ia_dlg.js
new file mode 100644
index 000000000..b293cfa95
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.advhr_dlg',{size:"\u957f",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/id_dlg.js
new file mode 100644
index 000000000..88f4f060e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.advhr_dlg',{size:"Tinggi",noshade:"Tanpa bayangan",width:"Lebar",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/is_dlg.js
new file mode 100644
index 000000000..72b210dfd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.advhr_dlg',{size:"H\u00e6\u00f0",noshade:"Enginn skuggi",width:"Breidd",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/it_dlg.js
new file mode 100644
index 000000000..db513340d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.advhr_dlg',{size:"Altezza",noshade:"Senza ombreggiatura",width:"Larghezza",normal:"Normale",widthunits:"Unit\u00e0"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ja_dlg.js
new file mode 100644
index 000000000..70adc8b5d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.advhr_dlg',{size:"\u9ad8\u3055",noshade:"\u5f71\u306a\u3057",width:"\u5e45",normal:"\u901a\u5e38",widthunits:"\u5358\u4f4d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ka_dlg.js
new file mode 100644
index 000000000..ddd77a683
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.advhr_dlg',{size:"\u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4",noshade:"\u10e9\u10e0\u10d3\u10d8\u10da\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4",width:"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/kl_dlg.js
new file mode 100644
index 000000000..40b6dc6cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/km_dlg.js
new file mode 100644
index 000000000..dd994b0e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.advhr_dlg',{size:"\u1780\u1798\u17d2\u1796\u179f\u17cb",noshade:"\u1782\u17d2\u1798\u17b6\u1793\u179f\u17d2\u179a\u1798\u17c4\u179b",width:"\u1791\u1791\u17b9\u1784",normal:"\u1792\u1798\u17d2\u1798\u178f\u17b6",widthunits:"\u17af\u1780\u178f\u17b6"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ko_dlg.js
new file mode 100644
index 000000000..bde22ebd9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.advhr_dlg',{size:"\ub192\uc774",noshade:"\uadf8\ub9bc\uc790 \uc5c6\uc74c",width:"\ud3ed",normal:"\ubcf4\ud1b5",widthunits:"\ub2e8\uc704"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/kz_dlg.js
new file mode 100644
index 000000000..1a40f4f6b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.advhr_dlg',{size:"\u0411\u0438\u0456\u043a\u0442\u0456\u0433\u0456",noshade:"\u041a\u04e9\u043b\u0435\u04a3\u043a\u0435\u0441\u0456\u0437",width:"\u0415\u043d\u0456",normal:"\u049a\u0430\u0440\u0430\u043f\u0430\u0439\u044b\u043c",widthunits:"\u04e8\u043b\u0448\u0435\u043c \u0431\u0456\u0440\u043b\u0456\u0433\u0456"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lb_dlg.js
new file mode 100644
index 000000000..31c02edb5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.advhr_dlg',{size:"H\u00e9icht",noshade:"Kee Schiet",width:"Breet",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lt_dlg.js
new file mode 100644
index 000000000..07294cba4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.advhr_dlg',{size:"Auk\u0161tis",noshade:"Be \u0161e\u0161\u0117lio",width:"Ilgis",normal:"Normalus",widthunits:"Vienetai"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lv_dlg.js
new file mode 100644
index 000000000..6f6a9032d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.advhr_dlg',{size:"Augstums",noshade:"Bez \u0113nas",width:"Platums",normal:"Norm\u0101ls",widthunits:"Vien\u012bbas"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/mk_dlg.js
new file mode 100644
index 000000000..06ac8785b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.advhr_dlg',{size:"\u0412\u0438\u0441\u0438\u043d\u0430",noshade:"\u0411\u0435\u0437 \u0441\u0435\u043d\u043a\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",normal:"\u041d\u043e\u0440\u043c\u0430\u043b\u043d\u043e",widthunits:"\u0415\u0434\u0438\u043d\u0438\u0446\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ml_dlg.js
new file mode 100644
index 000000000..addafb446
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/mn_dlg.js
new file mode 100644
index 000000000..703d494af
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.advhr_dlg',{size:"\u04e8\u043d\u0434\u04e9\u0440",noshade:"\u0421\u04af\u04af\u0434\u044d\u0440\u0433\u04af\u0439",width:"\u04e8\u0440\u0433\u04e9\u043d",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ms_dlg.js
new file mode 100644
index 000000000..f448e086e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.advhr_dlg',{size:"Tinggi",noshade:"Tanpa bayang",width:"Lebar",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/my_dlg.js
new file mode 100644
index 000000000..d3e71d73c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.advhr_dlg',{size:"\u1021\u103c\u1019\u1004\u103a\u1037",noshade:"\u1021\u101b\u102d\u1015\u103a\u1019\u1011\u103d\u1000\u103a",width:"\u1021\u1000\u103b\u101a\u103a",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nb_dlg.js
new file mode 100644
index 000000000..e41c2f477
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.advhr_dlg',{size:"St\u00f8rrelse",noshade:"Ingen skygge",width:"Bredde",normal:"Normal",widthunits:"Enheter"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nl_dlg.js
new file mode 100644
index 000000000..d3ab5acb5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.advhr_dlg',{size:"Hoogte",noshade:"Geen schaduw",width:"Breedte",normal:"Normaal",widthunits:"Eenheden"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nn_dlg.js
new file mode 100644
index 000000000..535505af1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.advhr_dlg',{size:"Storleik",noshade:"Inga skugge",width:"Breidd",normal:"Normal",widthunits:"Einingar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/no_dlg.js
new file mode 100644
index 000000000..3ca75eec3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.advhr_dlg',{size:"H\u00f8yde",noshade:"Ingen skygge",width:"Bredde",normal:"Normal",widthunits:"Enheter"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/pl_dlg.js
new file mode 100644
index 000000000..f4e513887
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.advhr_dlg',{size:"Wysoko\u015b\u0107",noshade:"Bez cienia",width:"Szeroko\u015b\u0107",normal:"Normalny",widthunits:"Jednostki"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ps_dlg.js
new file mode 100644
index 000000000..a13f8706b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/pt_dlg.js
new file mode 100644
index 000000000..531022082
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.advhr_dlg',{size:"Altura",noshade:"Sem sombra",width:"Largura",normal:"Normal",widthunits:"Unids"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ro_dlg.js
new file mode 100644
index 000000000..d501da3a5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.advhr_dlg',{size:"\u00cen\u0103l\u021bime",noshade:"F\u0103r\u0103 umbre",width:"L\u0103\u021bime",normal:"Normal",widthunits:"Unit\u0103\u021bi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ru_dlg.js
new file mode 100644
index 000000000..553f03f4d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.advhr_dlg',{size:"\u0412\u044b\u0441\u043e\u0442\u0430",noshade:"\u0411\u0435\u0437 \u0442\u0435\u043d\u0438",width:"\u0428\u0438\u0440\u0438\u043d\u0430",normal:"\u041e\u0431\u044b\u0447\u043d\u0430\u044f",widthunits:"\u0415\u0434\u0438\u043d\u0438\u0446\u044b \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sc_dlg.js
new file mode 100644
index 000000000..b3c29307c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.advhr_dlg',{size:"\u957f",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/se_dlg.js
new file mode 100644
index 000000000..f1dba5032
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.advhr_dlg',{size:"H\u00f6jd",noshade:"Ingen skugga",width:"Bredd",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/si_dlg.js
new file mode 100644
index 000000000..3e2c500de
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sk_dlg.js
new file mode 100644
index 000000000..60ae5bcf2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.advhr_dlg',{size:"V\u00fd\u0161ka",noshade:"Bez tie\u0148a",width:"\u0160\u00edrka",normal:"Norm\u00e1lne",widthunits:"Jednotky"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sl_dlg.js
new file mode 100644
index 000000000..23ca296d1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.advhr_dlg',{size:"Vi\u0161ina",noshade:"Brez sen\u010denja",width:"\u0160irina",normal:"Obi\u010dajno",widthunits:"Enote"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sq_dlg.js
new file mode 100644
index 000000000..a6ee979b5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.advhr_dlg',{size:"Gjat\u00ebsia",noshade:"Pa hije",width:"Gjer\u00ebsia",normal:"Normal",widthunits:"Nj\u00ebsi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sr_dlg.js
new file mode 100644
index 000000000..603e50c17
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.advhr_dlg',{size:"Visina",noshade:"Bez senke",width:"\u0160irina",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sv_dlg.js
new file mode 100644
index 000000000..f2601e34e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.advhr_dlg',{size:"H\u00f6jd",noshade:"Ingen skugga",width:"Bredd",normal:"Normal",widthunits:"Enheter"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sy_dlg.js
new file mode 100644
index 000000000..c6e036138
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.advhr_dlg',{size:"\u072a\u0721\u0718\u072c\u0710",noshade:"\u0720\u071d\u072c \u071b\u0720\u0710",width:"\u0726\u072c\u071d\u0718\u072c\u0710",normal:"\u0725\u071d\u0715\u071d\u0710",widthunits:"\u071a\u0715\u071d\u0718\u072c\u0718\u072c\u0308\u0710"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ta_dlg.js
new file mode 100644
index 000000000..c05c36585
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/te_dlg.js
new file mode 100644
index 000000000..1838510c7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/th_dlg.js
new file mode 100644
index 000000000..93e932cb2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.advhr_dlg',{size:"\u0e2a\u0e39\u0e07",noshade:"\u0e44\u0e21\u0e48\u0e21\u0e35\u0e40\u0e07\u0e32",width:"\u0e01\u0e27\u0e49\u0e32\u0e07",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tn_dlg.js
new file mode 100644
index 000000000..8c19b1dc4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tr_dlg.js
new file mode 100644
index 000000000..fb999ebb4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.advhr_dlg',{size:"Y\u00fckseklik",noshade:"G\u00f6lge yok",width:"Geni\u015flik",normal:"Normal",widthunits:"Birimler"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tt_dlg.js
new file mode 100644
index 000000000..e7ffd754e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.advhr_dlg',{size:"\u9577",noshade:"\u7121\u9670\u5f71",width:"\u5bec",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tw_dlg.js
new file mode 100644
index 000000000..33c806794
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.advhr_dlg',{size:"\u9ad8\u5ea6",noshade:"\u7121\u9670\u5f71",width:"\u5bec\u5ea6",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/uk_dlg.js
new file mode 100644
index 000000000..296ccb661
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.advhr_dlg',{size:"\u0412\u0438\u0441\u043e\u0442\u0430",noshade:"\u0411\u0435\u0437 \u0442\u0456\u043d\u0456",width:"\u0428\u0438\u0440\u0438\u043d\u0430",normal:"\u041d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u0438\u0439",widthunits:"\u041e\u0434\u0438\u043d\u0438\u0446\u0456 \u0432\u0438\u043c\u0456\u0440\u0443"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ur_dlg.js
new file mode 100644
index 000000000..f75769754
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.advhr_dlg',{size:"Height",noshade:"No shadow",width:"Width",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/vi_dlg.js
new file mode 100644
index 000000000..b1d552513
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.advhr_dlg',{size:"Chi\u1ec1u r\u1ed9ng",noshade:"Kh\u00f4ng c\u00f3 b\u00f3ng",width:"Chi\u1ec1u d\u00e0i",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..c8912162a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.advhr_dlg',{size:"\u9ad8\u5ea6",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd\u5ea6",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..33bfb609a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.advhr_dlg',{size:"\u9ad8",noshade:"\u7121\u9670\u5f71\u6548\u679c",width:"\u5bec",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh_dlg.js
new file mode 100644
index 000000000..c57db6621
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.advhr_dlg',{size:"\u9ad8\u5ea6",noshade:"\u7121\u9670\u5f71",width:"\u5bec\u5ea6",normal:"\u6a19\u6e96",widthunits:"\u55ae\u4f4d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zu_dlg.js
new file mode 100644
index 000000000..b7dacd5d8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advhr/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.advhr_dlg',{size:"\u957f",noshade:"\u65e0\u9634\u5f71",width:"\u5bbd",normal:"Normal",widthunits:"Units"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ar_dlg.js
new file mode 100644
index 000000000..e6a5eb8cb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.advimage_dlg',{"image_list":"Image list","align_right":"\u064a\u0645\u064a\u0646","align_left":"\u064a\u0633\u0627\u0631","align_textbottom":"\u0627\u0633\u0641\u0644 \u0627\u0644\u0646\u0635","align_texttop":"\u0627\u0639\u0644\u0649 \u0627\u0644\u0646\u0635","align_bottom":"\u0627\u0633\u0641\u0644","align_middle":"\u0648\u0633\u0637","align_top":"\u0627\u0644\u0627\u0639\u0644\u0649","align_baseline":"Baseline",align:"\u0645\u062d\u0627\u0632\u0627\u0647",hspace:"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0627\u0641\u0642\u064a\u0647",vspace:"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0631\u0623\u0633\u064a\u0647",dimensions:"\u0627\u0644\u0623\u0628\u0639\u0627\u062f",border:"\u0627\u0644\u0625\u0637\u0627\u0631",list:"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0635\u0648\u0631",alt:"\u0648\u0635\u0641 \u0627\u0644\u0635\u0648\u0631\u0647",src:"\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0635\u0648\u0631\u0647","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"\u0645\u0634\u0627\u0647\u062f\u0647",title:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646",general:"\u0639\u0627\u0645","tab_advanced":"\u062e\u064a\u0627\u0631\u0627\u062a \u0645\u062a\u0642\u062f\u0645\u0647","tab_appearance":"\u0627\u0644\u0645\u0638\u0647\u0631","tab_general":"\u0639\u0627\u0645",width:"\u0627\u0644\u0639\u0631\u0636",height:"\u0627\u0644\u0627\u0631\u062a\u0641\u0627\u0639"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/az_dlg.js
new file mode 100644
index 000000000..beebea126
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.advimage_dlg',{"image_list":"\u015e\u0259kil siyah\u0131s\u0131","align_right":"Sa\u011fa","align_left":"Sola","align_textbottom":"M\u0259tn a\u015fa\u011f\u0131s\u0131 il\u0259","align_texttop":"M\u0259tn yuxar\u0131 il\u0259","align_bottom":"A\u015fa\u011f\u0131 il\u0259","align_middle":"M\u0259rk\u0259z il\u0259","align_top":"Yuxar\u0131 il\u0259","align_baseline":"Bin\u00f6vr\u0259 il\u0259",align:"Tarazla\u015fd\u0131rma",hspace:"\u00dcf\u00fcqi f\u0259za",vspace:"\u015eaquli f\u0259za",dimensions:"\u00d6l\u00e7\u00fcl\u0259r",border:"S\u0259rh\u0259d",list:"\u015e\u0259kil siyah\u0131s\u0131",alt:"\u015e\u0259kil t\u0259sviri",src:"\u015e\u0259kil \u00fcnvan\u0131","dialog_title":"\u015e\u0259kil \u0259lav\u0259/redakt\u0259 et","missing_alt":"\u018fminsiniz ki, \u015f\u0259kl\u0259 t\u0259svir yazmadan davam etm\u0259k ist\u0259yirsiniz? T\u0259svirsiz \u015f\u0259kil i\u015f qabiliyy\u0259ti a\u015fa\u011f\u0131 olan v\u0259 ya \u015f\u0259klin s\u00f6nd\u00fcr\u00fclm\u00fc\u015f funksiyas\u0131 il\u0259 m\u0259tn b\u0259l\u0259d\u00e7isind\u0259n istifad\u0259 ed\u0259n istifad\u0259\u00e7il\u0259r\u0259 \u0259l\u00e7atmaz ola bil\u0259r.","example_img":"Xarici g\u00f6r\u00fcn\u00fc\u015f\u0259 ilkin bax\u0131\u015f",misc:"M\u00fcxt\u0259lif",mouseout:"si\u00e7an\u0131 uzaqla\u015fd\u0131rd\u0131qda",mouseover:"si\u00e7an\u0131 g\u0259tirdikd\u0259","alt_image":"Alternativ \u015f\u0259kil","swap_image":"\u015e\u0259kli d\u0259yi\u015f",map:"X\u0259rit\u0259-\u015f\u0259kil",id:"\u0130dentifikator",rtl:"Sa\u011fda-sola",ltr:"Solda-sa\u011fa",classes:"Sinifl\u0259r",style:"Stil","long_desc":"\u018ftrafl\u0131 t\u0259svir\u0259 ke\u00e7id",langcode:"Dil kodu",langdir:"Dilin istiqam\u0259tl\u0259ndirilm\u0259si","constrain_proportions":"Proporsiyalar\u0131 saxla",preview:"\u0130lkin bax\u0131\u015f",title:"Ad\u0131",general:"\u00dcmumi","tab_advanced":"\u018flav\u0259","tab_appearance":"G\u00f6r\u00fcn\u00fc\u015f","tab_general":"\u00dcmumi",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/be_dlg.js
new file mode 100644
index 000000000..bc9817566
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.advimage_dlg',{"image_list":"\u0421\u043f\u0456\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430\u045e","align_right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u0440\u0430\u0456","align_left":"\u041f\u0430 \u043b\u0435\u0432\u044b\u043c \u043a\u0440\u0430\u0456","align_textbottom":"\u041f\u0430 \u043d\u0456\u0437\u0435 \u0442\u044d\u043a\u0441\u0442\u0443","align_texttop":"\u041f\u0430 \u0432\u0435\u0440\u0441\u0435 \u0442\u044d\u043a\u0441\u0442\u0443","align_bottom":"\u041f\u0430 \u043d\u0456\u0437\u0435","align_middle":"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","align_top":"\u041f\u0430 \u0432\u0435\u0440\u0441\u0435","align_baseline":"\u041f\u0430 \u0431\u0430\u0437\u0430\u0432\u0430\u0439 \u043b\u0456\u043d\u0456\u0456",align:"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435",hspace:"\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b \u0432\u043e\u0434\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u044b \u0432\u043e\u0434\u0441\u0442\u0443\u043f",dimensions:"\u041f\u0430\u043c\u0435\u0440\u044b",border:"\u041c\u044f\u0436\u0430",list:"\u0421\u043f\u0456\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430\u045e",alt:"\u0410\u043f\u0456\u0441\u0430\u043d\u043d\u0435 \u043c\u0430\u043b\u044e\u043d\u043a\u0430",src:"\u0410\u0434\u0440\u0430\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430","dialog_title":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0430\u043b\u044e\u043d\u0430\u043a","missing_alt":"\u0412\u044b \u045e\u043f\u044d\u045e\u043d\u0435\u043d\u044b\u044f, \u0448\u0442\u043e \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u043f\u0440\u0430\u0446\u044f\u0433\u043d\u0443\u0446\u044c \u0431\u0435\u0437 \u0430\u043f\u0456\u0441\u0430\u043d\u043d\u044f \u043c\u0430\u043b\u044e\u043d\u043a\u0430? \u0411\u0435\u0437 \u044f\u0433\u043e \u043c\u0430\u043b\u044e\u043d\u0430\u043a \u043c\u043e\u0436\u0430 \u0431\u044b\u0446\u044c \u043d\u0435\u0434\u0430\u0441\u0442\u0443\u043f\u043d\u0430 \u043a\u0430\u0440\u044b\u0441\u0442\u0430\u043b\u044c\u043d\u0456\u043a\u0430\u043c \u0437 \u0430\u0431\u043c\u0435\u0436\u0430\u0432\u0430\u043d\u0430\u0439 \u043f\u0440\u0430\u0446\u0430\u0437\u0434\u043e\u043b\u044c\u043d\u0430\u0441\u0446\u044e, \u0430\u0431\u043e \u043a\u0430\u0440\u044b\u0441\u0442\u0430\u043b\u044c\u043d\u0456\u043a\u0430\u043c \u0442\u044d\u043a\u0441\u0442\u0430\u0432\u044b\u0445 \u0431\u0440\u0430\u045e\u0437\u0435\u0440\u0430\u045e, \u0430\u0431\u043e \u044f\u043a\u0456\u044f \u0433\u043b\u044f\u0434\u0437\u044f\u0446\u044c \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0456 \u0437 \u0430\u0434\u043a\u043b\u044e\u0447\u0430\u043d\u044b\u043c\u0456 \u043c\u0430\u043b\u044e\u043d\u043a\u0430\u043c\u0456.","example_img":"\u041f\u0440\u044b\u043a\u043b\u0430\u0434 \u043c\u0430\u043b\u044e\u043d\u043a\u0443",misc:"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",mouseout:"\u041f\u0440\u044b \u0430\u0434\u0432\u044f\u0434\u0437\u0435\u043d\u043d\u0456 \u043c\u044b\u0448\u044b",mouseover:"\u041f\u0440\u044b \u043d\u0430\u0432\u044f\u0434\u0437\u0435\u043d\u043d\u0456 \u043c\u044b\u0448\u044b","alt_image":"\u0410\u043b\u044c\u0442\u044d\u0440\u043d\u0430\u0442\u044b\u045e\u043d\u044b \u043c\u0430\u043b\u044e\u043d\u0430\u043a","swap_image":"\u041f\u0430\u043c\u044f\u043d\u044f\u0446\u044c \u043c\u0430\u043b\u044e\u043d\u0430\u043a",map:"\u041c\u0430\u043b\u044e\u043d\u0430\u043a-\u043a\u0430\u0440\u0442\u0430",id:"\u0406\u0434\u044d\u043d\u0442\u044b\u0444\u0456\u043a\u0430\u0442\u0430\u0440",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430",ltr:"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430",classes:"\u041a\u043b\u0430\u0441\u044b",style:"\u0421\u0442\u044b\u043b\u044c","long_desc":"\u0421\u043f\u0430\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u0430\u0434\u0440\u0430\u0431\u044f\u0437\u043d\u0430\u0435 \u0430\u043f\u0456\u0441\u0430\u043d\u043d\u0435",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u044b",langdir:"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u043c\u043e\u0432\u044b","constrain_proportions":"\u0417\u0430\u0445\u043e\u045e\u0432\u0430\u0446\u044c \u043f\u0440\u0430\u043f\u043e\u0440\u0446\u044b\u0456",preview:"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u0456 \u043f\u0440\u0430\u0433\u043b\u044f\u0434",title:"\u041d\u0430\u0437\u0432\u0430",general:"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f","tab_advanced":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f","tab_appearance":"\u0412\u043e\u043d\u043a\u0430\u0432\u044b \u0432\u044b\u0433\u043b\u044f\u0434","tab_general":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f",width:"\u0428\u044b\u0440\u044b\u043d\u044f",height:"\u0412\u044b\u0448\u044b\u043d\u044f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bg_dlg.js
new file mode 100644
index 000000000..762154144
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.advimage_dlg',{"image_list":"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438","align_right":"\u0414\u044f\u0441\u043d\u043e","align_left":"\u041b\u044f\u0432\u043e","align_textbottom":"\u0422\u0435\u043a\u0441\u0442 \u0434\u043e\u043b\u0443","align_texttop":"\u0422\u0435\u043a\u0441\u0442 \u0433\u043e\u0440\u0435","align_bottom":"\u0414\u043e\u043b\u0443","align_middle":"\u0426\u0435\u043d\u0442\u044a\u0440","align_top":"\u0413\u043e\u0440\u0435","align_baseline":"\u0411\u0430\u0437\u043e\u0432\u0430 \u043b\u0438\u043d\u0438\u044f",align:"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",hspace:"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u0440\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435",vspace:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u0440\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435",dimensions:"\u0420\u0430\u0437\u043c\u0435\u0440\u0438",border:"\u0420\u0430\u043c\u043a\u0430",list:"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438",alt:"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430",src:"URL \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","dialog_title":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","missing_alt":"\u0421\u0438\u0433\u0443\u0440\u0435\u043d \u043b\u0438 \u0441\u0442\u0435 \u0447\u0435 \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u0430 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435 \u0431\u0435\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0442\u0430? \u0411\u0435\u0437 \u043d\u0435\u0433\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0442\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u044a\u043f\u043d\u0430 \u0437\u0430 \u043d\u044f\u043a\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 \u0441 \u043d\u0435\u0434\u044a\u0437\u0438, \u0438\u043b\u0438 \u0437\u0430 \u0442\u0435\u0437\u0438 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0449\u0438 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0431\u0440\u0430\u0443\u0437\u044a\u0440, \u0438\u043b\u0438 \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0449\u0438 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0441 \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438.","example_img":"\u041f\u0440\u0435\u0433\u043b\u0435\u0434 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0442\u0430",misc:"\u0420\u0430\u0437\u043d\u0438",mouseout:"\u0437\u0430 mouse out",mouseover:"\u0437\u0430 mouse over","alt_image":"\u0420\u0435\u0437\u0435\u0440\u0432\u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","swap_image":"\u0421\u043c\u0435\u043d\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430",map:"\u041a\u0430\u0440\u0442\u0438\u043d\u0430 \u043a\u0430\u0440\u0442\u0430",id:"Id",rtl:"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e",ltr:"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e",classes:"\u041a\u043b\u0430\u0441\u043e\u0432\u0435",style:"\u0421\u0442\u0438\u043b","long_desc":"\u0425\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430 \u043a\u044a\u043c \u0434\u044a\u043b\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430",langdir:"\u041f\u043e\u0441\u043e\u043a\u0430 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430","constrain_proportions":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438\u0442\u0435",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434",title:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",general:"\u041e\u0431\u0449\u0438","tab_advanced":"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","tab_appearance":"\u0412\u044a\u043d\u0448\u0435\u043d \u0432\u0438\u0434","tab_general":"\u041e\u0431\u0449\u0438",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bn_dlg.js
new file mode 100644
index 000000000..d105bc52d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/br_dlg.js
new file mode 100644
index 000000000..13a5a0a4c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.advimage_dlg',{"image_list":"Lista de imagens","align_right":"Direita","align_left":"Esquerda","align_textbottom":"Base do texto","align_texttop":"Topo do texto","align_bottom":"Abaixo","align_middle":"Meio","align_top":"Topo","align_baseline":"Sobre a linha de texto",align:"Alinhamento",hspace:"Espa\u00e7o horizontal",vspace:"Espa\u00e7o vertical",dimensions:"Dimens\u00f5es",border:"Limite",list:"Lista de imagens",alt:"Descri\u00e7\u00e3o da imagem",src:"Endere\u00e7o da imagem","dialog_title":"Inserir/editar imagem","missing_alt":"Tem certeza que deseja continuar sem acrescentar uma descri\u00e7\u00e3o \u00e0\u00a0imagem? (Isto pode gerar problemas de acessibilidade em alguns navegadores)","example_img":"Pr\u00e9-visualiza\u00e7\u00e3o",misc:"Misto",mouseout:"mouseout",mouseover:"mouseover","alt_image":"Imagem alternativa","swap_image":"Trocar imagem",map:"Mapa de imagem",id:"Id",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",classes:"Classes",style:"Estilo","long_desc":"Descri\u00e7\u00e3o extensa",langcode:"C\u00f3digo de idioma",langdir:"Dire\u00e7\u00e3o do texto","constrain_proportions":"Manter propor\u00e7\u00f5es",preview:"Pr\u00e9-Visualiza\u00e7\u00e3o",title:"T\u00edtulo",general:"Geral","tab_advanced":"Avan\u00e7ado","tab_appearance":"Apar\u00eancia","tab_general":"Geral",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bs_dlg.js
new file mode 100644
index 000000000..0cde4aed8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.advimage_dlg',{"image_list":"Lista slika","align_right":"Desno","align_left":"Lijevo","align_textbottom":"Dno teksta","align_texttop":"Vrh teksta","align_bottom":"Dno","align_middle":"Sredina","align_top":"Vrh","align_baseline":"Osnovna linija",align:"Poravnavanje",hspace:"Vodoravni razmak",vspace:"Okomiti razmak",dimensions:"Dimenzije",border:"Obrub",list:"Lista slika",alt:"Opis slike",src:"URL slike","dialog_title":"Umetni/uredi sliku","missing_alt":"Jeste li sigurni da \u017eelite izostaviti opis slike? Slika mo\u017ee biti nedostupna ljudima s pote\u0161ko\u0107ama ili onima koji koriste preglednike bez prikaza slika.","example_img":"Prikaz slike",misc:"Razno",mouseout:"za izlazak mi\u0161a van slike",mouseover:"za prelazak mi\u0161a preko slike","alt_image":"Alternativna slika","swap_image":"Izmjenjiva slika",map:"Karta slike",id:"Id",rtl:"S desna na lijevo",ltr:"S lijeva na desno",classes:"Klase",style:"Stil","long_desc":"Poveznica dugog opisa",langcode:"Kod jezika",langdir:"Smjer jezika","constrain_proportions":"Zadr\u017ei proporcije",preview:"Prikaz",title:"Naslov",general:"Osnovno","tab_advanced":"Napredno","tab_appearance":"Izgled","tab_general":"Osnovno",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ca_dlg.js
new file mode 100644
index 000000000..14250bdfb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.advimage_dlg',{"image_list":"Llista d\'imatges","align_right":"A la dreta","align_left":"A l\'esquerra","align_textbottom":"Baix del text","align_texttop":"Dalt del text","align_bottom":"Inferior","align_middle":"Mitjan lloc","align_top":"Superior","align_baseline":"L\u00ednia de base",align:"Alineaci\u00f3",hspace:"Espai horitzontal",vspace:"Espai vertical",dimensions:"Dimensions",border:"Vora",list:"Llista de la imatge",alt:"Descripci\u00f3 de la imatge",src:"URL de la imatge","dialog_title":"Insereix/edita imatge","missing_alt":"Esteu segur que voleu continuar sense incloure una descripci\u00f3 de la imatge? La imatge pot no ser accessible a usuaris amb discapacitats, o a aquells que utilitzin navegadors de text o que naveguin amb les imatges desactivades.","example_img":"Aparen\u00e7a imatge previsualitzada",misc:"Miscel\u00b7l\u00e0nia",mouseout:"quan el ratol\u00ed marxa",mouseover:"quan el ratol\u00ed arriba","alt_image":"Imatge alternativa","swap_image":"Canvia imatge",map:"Mapa de la imatge",id:"Id",rtl:"De dreta a esquerra",ltr:"D\'esquerra a dreta",classes:"Classes",style:"Estil","long_desc":"Enlla\u00e7 a la descripci\u00f3 llarga",langcode:"Codi de l\'idioma",langdir:"Direcci\u00f3 de l\'idioma","constrain_proportions":"Mant\u00e9 la proporci\u00f3",preview:"Previsualitzaci\u00f3",title:"T\u00edtol",general:"General","tab_advanced":"Avan\u00e7at","tab_appearance":"Aparen\u00e7a","tab_general":"General",width:"Amplada",height:"Al\u00e7ada"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ch_dlg.js
new file mode 100644
index 000000000..0b20faca8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.advimage_dlg',{"image_list":"\u56fe\u7247\u6e05\u5355","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u9760\u4e0b","align_middle":"\u7f6e\u4e2d","align_top":"\u9760\u4e0a","align_baseline":"\u57fa\u51c6\u7ebf",align:"\u5bf9\u9f50\u65b9\u5f0f",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u6e05\u5355",alt:"\u56fe\u7247\u8bf4\u660e",src:"\u56fe\u7247URL","dialog_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","missing_alt":"\u56fe\u7247\u6ca1\u6709\u8bf4\u660e\u6587\u5b57\uff0c\u662f\u5426\u7ee7\u7eed\uff1f","example_img":"\u56fe\u7247\u5916\u89c2\u9884\u89c8",misc:"\u5176\u5b83",mouseout:"\u9f20\u6807\u79fb\u51fa",mouseover:"\u9f20\u6807\u79fb\u5165","alt_image":"\u53d6\u4ee3\u56fe\u7247","swap_image":"\u56fe\u7247\u5207\u6362",map:"\u56fe\u7247 Map",id:"ID",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",classes:"\u7c7b\u522b",style:"\u6837\u5f0f","long_desc":"\u957f\u8fde\u7ed3",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","constrain_proportions":"\u7ea6\u675f\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u6807\u9898",general:"\u4e00\u822c","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u4e00\u822c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cn_dlg.js
new file mode 100644
index 000000000..c00a84ca1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.advimage_dlg',{"image_list":"\u56fe\u7247\u5217\u8868","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u5e95\u90e8","align_texttop":"\u6587\u5b57\u9876\u90e8","align_bottom":"\u5e95\u90e8","align_middle":"\u4e2d\u95f4","align_top":"\u9876\u90e8","align_baseline":"\u57fa\u7ebf",align:"\u5bf9\u9f50",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u5217\u8868",alt:"\u56fe\u7247\u8bf4\u660e",src:"\u56fe\u7247\u5730\u5740URL","dialog_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","missing_alt":"\u56fe\u7247\u6ca1\u6709\u8bf4\u660e\u6587\u5b57\uff0c\u662f\u5426\u7ee7\u7eed\uff1f","example_img":"\u56fe\u7247\u9884\u89c8",misc:"\u5176\u5b83",mouseout:"\u9f20\u6807\u79fb\u51fa",mouseover:"\u9f20\u6807\u79fb\u5165","alt_image":"\u66ff\u4ee3\u56fe\u7247","swap_image":"\u56fe\u7247\u5207\u6362",map:"\u56fe\u8c61\u6620\u5c04",id:"ID\u540d\u79f0",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",classes:"\u7c7b\u522b",style:"\u6837\u5f0f","long_desc":"\u957f\u8fde\u7ed3",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u6587\u672c\u65b9\u5411","constrain_proportions":"\u7ea6\u675f\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u6807\u9898",general:"\u5e38\u89c4","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u5e38\u89c4",width:"\u5bbd\u5ea6",height:"\u9ad8\u5ea6"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cs_dlg.js
new file mode 100644
index 000000000..cb9cb5878
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.advimage_dlg',{"image_list":"Seznam obr\u00e1zk\u016f","align_right":"Vpravo","align_left":"Vlevo","align_textbottom":"Se spodkem \u0159\u00e1dku","align_texttop":"S vrchem \u0159\u00e1dku","align_bottom":"Dol\u016f","align_middle":"Na st\u0159ed \u0159\u00e1dku","align_top":"Nahoru","align_baseline":"Na z\u00e1kladnu",align:"Zarovn\u00e1n\u00ed",hspace:"Horizont\u00e1ln\u00ed odsazen\u00ed",vspace:"Vertik\u00e1ln\u00ed odsazen\u00ed",dimensions:"Rozm\u011bry",border:"R\u00e1me\u010dek",list:"Seznam obr\u00e1zk\u016f",alt:"Popis obr\u00e1zku",src:"URL obr\u00e1zku","dialog_title":"Vlo\u017eit/upravit obr\u00e1zek","missing_alt":"Skute\u010dn\u011b chcete pokra\u010dovat bez vlo\u017een\u00e9ho popisu obr\u00e1zku? Bez popisu m\u016f\u017ee b\u00fdt obr\u00e1zek nep\u0159\u00edstupn\u00fd u\u017eivatel\u016fm se zrakov\u00fdm posti\u017een\u00edm, u\u017eivatel\u016fm textov\u00fdch prohl\u00ed\u017ee\u010d\u016f nebo u\u017eivatel\u016fm, kte\u0159\u00ed maj\u00ed vypnuto zobrazov\u00e1n\u00ed obr\u00e1zk\u016f.","example_img":"P\u0159\u00edklad obr\u00e1zku",misc:"R\u016fzn\u00e9",mouseout:"Po odjet\u00ed my\u0161i...",mouseover:"P\u0159i najet\u00ed my\u0161i...","alt_image":"Alternativn\u00ed obr\u00e1zek","swap_image":"P\u0159epnout obr\u00e1zek",map:"Obr\u00e1zkov\u00e1 mapa",id:"ID",rtl:"Zprava doleva",ltr:"Zleva doprava",classes:"T\u0159\u00eddy",style:"Styl","long_desc":"Dlouh\u00fd popis",langcode:"K\u00f3d jazyka",langdir:"Sm\u011br textu","constrain_proportions":"Zachovat proporce",preview:"N\u00e1hled",title:"Titulek",general:"Obecn\u00e9 parametry","tab_advanced":"Roz\u0161\u00ed\u0159en\u00e9","tab_appearance":"Vzhled","tab_general":"Obecn\u00e9",width:"\u0160\u00ed\u0159ka",height:"V\u00fd\u0161ka"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cy_dlg.js
new file mode 100644
index 000000000..5a1ad955a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.advimage_dlg',{"image_list":"Rhestr delweddau","align_right":"De","align_left":"Chwith","align_textbottom":"Gwaelod testun","align_texttop":"Pen testun","align_bottom":"Gwaelod","align_middle":"Canol","align_top":"Pen","align_baseline":"Gwaelodlin",align:"Aliniad",hspace:"Gofod llorweddol",vspace:"Gofod fertigol",dimensions:"Dimensiynau",border:"Border",list:"Rhestr delweddau",alt:"Disgrifiad delwedd",src:"URL delwedd","dialog_title":"Mewnosod/golygu delwedd","missing_alt":"A ydych chi\'n si\u0175r eich bod eisiau parhau heb cynnwys Disgrifiad Delwedd? Hebddo fo ni fydd y delwedd yn hygyrchol i ddefnyddwyr gyda anableddau, neu sy\'n defnyddio porwr testun, neu sy\'n pori\'r we gyda delweddau wedi\'u diffodd.","example_img":"Delwedd rhagolygiad ymddangosiad",misc:"Amrywiol",mouseout:"ar gyfer llygoden allan",mouseover:"ar gyfer llygoden drosti","alt_image":"Delwedd arall","swap_image":"Cyfnewid delwedd",map:"Map delweddau",id:"Id",rtl:"De i\'r chwith",ltr:"Chwith i\'r dde",classes:"Dosbarthiadau",style:"Arddull","long_desc":"Cyswllt disgrifiad hir",langcode:"Cod iaith",langdir:"Cyfeiriad iaith","constrain_proportions":"Cynfyngu cyfraneddau",preview:"Rhagolwg",title:"Teitl",general:"Cyffredinol","tab_advanced":"Uwch","tab_appearance":"Ymddangosiad","tab_general":"Cyffredinol",width:"Lled",height:"Uchder"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/da_dlg.js
new file mode 100644
index 000000000..66aa88be9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.advimage_dlg',{"image_list":"Billedliste","align_right":"H\u00f8jre","align_left":"Venstre","align_textbottom":"Tekstbund","align_texttop":"Teksttop","align_bottom":"Bund","align_middle":"Midte","align_top":"Top","align_baseline":"Grundlinje",align:"Justering",hspace:"Horisontal afstand",vspace:"Vertikal afstand",dimensions:"Dimensioner",border:"Kant",list:"Billedliste",alt:"Billedbeskrivelse",src:"Billed-URL","dialog_title":"Inds\u00e6t/rediger billede","missing_alt":"Er du sikker p\u00e5, at du vil forts\u00e6tte uden at inkludere en billedebeskrivelse? Uden denne er billedet m\u00e5ske ikke tilg\u00e6ngeligt for nogle brugere med handicaps, eller for dem der bruger en tekstbrowser, eller som browser internettet med billeder sl\u00e5et fra.","example_img":"Forh\u00e5ndsvisning af billede",misc:"Diverse",mouseout:"for mus-ud",mouseover:"for mus-over","alt_image":"Alternativt billede","swap_image":"Byt billede",map:"Billede map",id:"Id",rtl:"H\u00f8jre til venstre",ltr:"Venstre til h\u00f8jre",classes:"Klasser",style:"Stil","long_desc":"Lang beskrivelseslink",langcode:"Sprogkode",langdir:"Sprogretning","constrain_proportions":"Bibehold proportioner",preview:"Vis",title:"Titel",general:"Generelt","tab_advanced":"Avanceret","tab_appearance":"Udseende","tab_general":"Generelt",width:"Bredde",height:"H\u00f8jde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/de_dlg.js
new file mode 100644
index 000000000..fc0f6d1e5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.advimage_dlg',{"image_list":"Bilderliste","align_right":"Rechts","align_left":"Links","align_textbottom":"Unten im Text","align_texttop":"Oben im Text","align_bottom":"Unten","align_middle":"Mittig","align_top":"Oben","align_baseline":"Zeile",align:"Ausrichtung",hspace:"Horizontaler Abstand",vspace:"Vertikaler Abstand",dimensions:"Ausma\u00dfe",border:"Rahmen",list:"Bilderliste",alt:"Beschreibung",src:"Adresse","dialog_title":"Bild einf\u00fcgen/ver\u00e4ndern","missing_alt":"Wollen Sie wirklich keine Beschreibung eingeben? Bestimmte Benutzer mit k\u00f6rperlichen Einschr\u00e4nkungen k\u00f6nnen so nicht darauf zugreifen, ebenso solche, die einen Textbrowser benutzen oder die Anzeige von Bildern deaktiviert haben.","example_img":"Vorschau auf das Aussehen",misc:"Verschiedenes",mouseout:"bei keinem Mauskontakt",mouseover:"bei Mauskontakt","alt_image":"Alternatives Bild","swap_image":"Bild austauschen",map:"Image-Map",id:"ID",rtl:"Rechts nach links",ltr:"Links nach rechts",classes:"Klassen",style:"Format","long_desc":"Ausf\u00fchrliche Beschreibung",langcode:"Sprachcode",langdir:"Schriftrichtung","constrain_proportions":"Seitenverh\u00e4ltnis beibehalten",preview:"Vorschau",title:"Titel",general:"Allgemein","tab_advanced":"Erweitert","tab_appearance":"Aussehen","tab_general":"Allgemein",width:"Breite",height:"H\u00f6he"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/dv_dlg.js
new file mode 100644
index 000000000..5898a97be
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/el_dlg.js
new file mode 100644
index 000000000..4caf910d3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.advimage_dlg',{"image_list":"\u039b\u03af\u03c3\u03c4\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd","align_right":"\u0394\u03b5\u03be\u03b9\u03ac","align_left":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","align_textbottom":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03ba\u03ac\u03c4\u03c9","align_texttop":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03c0\u03ac\u03bd\u03c9","align_bottom":"\u039a\u03ac\u03c4\u03c9","align_middle":"\u039c\u03ad\u03c3\u03b7","align_top":"\u03a0\u03ac\u03bd\u03c9","align_baseline":"\u0393\u03c1\u03b1\u03bc\u03bc\u03ae \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd",align:"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",hspace:"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1",vspace:"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03ac\u03b8\u03b5\u03c4\u03b7",dimensions:"\u0394\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2",border:"\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf",list:"\u039b\u03af\u03c3\u03c4\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd",alt:"\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",src:"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","dialog_title":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","missing_alt":"\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5 \u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2; \u03a7\u03c9\u03c1\u03af\u03c2 \u03b1\u03c5\u03c4\u03ae\u03bd\u03b7 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1 \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03bc\u03b7\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03c0\u03c1\u03bf\u03c3\u03b2\u03ac\u03c3\u03b9\u03bc\u03b7 \u03c3\u03b5 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf\u03c5\u03c2 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b5\u03c2 \u03bc\u03b5 \u03c0\u03c1\u03bf\u03b2\u03bb\u03ae\u03bc\u03b1\u03c4\u03b1, \u03ae \u03c3\'\u03b1\u03c5\u03c4\u03bf\u03cd\u03c2 \u03c0\u03bf\u03c5 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bd \u03c6\u03c5\u03bb\u03bb\u03bf\u03bc\u03b5\u03c4\u03c1\u03b7\u03c4\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5, \u03ae \u03b2\u03bb\u03ad\u03c0\u03bf\u03c5\u03bd \u03c4\u03bf \u0399\u03bd\u03c4\u03b5\u03c1\u03bd\u03b5\u03c4 \u03c7\u03c9\u03c1\u03af\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b5\u03c2.","example_img":"\u0394\u03bf\u03ba\u03b9\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1",misc:"\u0394\u03b9\u03ac\u03c6\u03bf\u03c1\u03b1",mouseout:"\u03b3\u03b9\u03b1 mouse out",mouseover:"\u03b3\u03b9\u03b1 mouse over","alt_image":"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1","swap_image":"\u0391\u03bd\u03c4\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",map:"\u03a7\u03ac\u03c1\u03c4\u03b7\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",id:"Id",rtl:"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",ltr:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac",classes:"\u039a\u03bb\u03ac\u03c3\u03b5\u03b9\u03c2",style:"\u03a3\u03c4\u03c5\u03bb","long_desc":"\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2 \u03c0\u03bb\u03ae\u03c1\u03bf\u03c5\u03c2 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae\u03c2",langcode:"\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2",langdir:"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2","constrain_proportions":"\u0394\u03b9\u03b1\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7 \u03b1\u03bd\u03b1\u03bb\u03bf\u03b3\u03af\u03b1\u03c2 \u03c0\u03bb. - \u03cd\u03c8\u03bf\u03c5\u03c2",preview:"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7",title:"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2",general:"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac","tab_advanced":"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2","tab_appearance":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7","tab_general":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac",width:"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",height:"\u038e\u03c8\u03bf\u03c2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/en_dlg.js
new file mode 100644
index 000000000..5f122e2cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","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.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/eo_dlg.js
new file mode 100644
index 000000000..b3ea0b2a4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.advimage_dlg',{"image_list":"Listo de bildoj","align_right":"Dekstre","align_left":"Maldekstre","align_textbottom":"Tekstosubo","align_texttop":"Tekstosupro","align_bottom":"Sube","align_middle":"Meze","align_top":"Supre","align_baseline":"Sur tekstlinio",align:"Liniigo",hspace:"Horizontala spaco",vspace:"Vertikala spaco",dimensions:"Dimensioj",border:"Bordero",list:"Listo de bildoj",alt:"Priskribo de bildo",src:"Adreso de bildo","dialog_title":"Enmeti/redakti bildon","missing_alt":"\u0108u vi certas ke vi volas da\u016drigi sen aldoni priskribon al la bildo? (Tio povas ka\u016dzi problemojn pri alireblo en iuj retumiloj)","example_img":"Anta\u016dvido",misc:"Cetera",mouseout:"Muso for",mouseover:"Muso \u015dvebado","alt_image":"Bildalternativo","swap_image":"\u015can\u011di bildon",map:"Bildomapo",id:"Id",rtl:"Dekstre-Maldekstren",ltr:"Maldekstre-Dekstren",classes:"Klasoj",style:"Stilo","long_desc":"Longa priskribo",langcode:"Lingvokodo",langdir:"Tekstodirekto","constrain_proportions":"Konservi proporcion",preview:"Anta\u016dvido",title:"Titolo",general:"\u011ceneralaj","tab_advanced":"Spertaj","tab_appearance":"Aspekto","tab_general":"\u011ceneralaj",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/es_dlg.js
new file mode 100644
index 000000000..6b6a5130c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.advimage_dlg',{"image_list":"Lista de imagen","align_right":"Derecha","align_left":"Izquierda","align_textbottom":"Texto abajo","align_texttop":"Texto arriba","align_bottom":"Debajo","align_middle":"Medio","align_top":"Arriba","align_baseline":"L\u00ednea base",align:"Alineaci\u00f3n",hspace:"Espacio horizontal",vspace:"Espacio vertical",dimensions:"Dimensiones",border:"Bordes",list:"Lista de imagen",alt:"Descripci\u00f3n de la imagen",src:"URL de la imagen","dialog_title":"Insertar/editar imagen","missing_alt":" \u00bfEsta seguro de continuar sin introducir una descripci\u00f3n a la imagen? Sin ella puede no ser accesible para usuarios con discapacidades, o para aquellos que usen navegadores de modo texto, o tengan deshabilitadas las im\u00e1genes de la p\u00e1gina.","example_img":"Vista previa de la imagen",misc:"Miscel\u00e1neo",mouseout:"para mouseout",mouseover:"para mouseover","alt_image":"Imagen alternativa","swap_image":"Intercambiar imagen",map:"Mapa de imagen",id:"Id",rtl:"Derecha a izquierda",ltr:"Izquierda a derecha",classes:"Clases",style:"Estilos","long_desc":"V\u00ednculo para descripci\u00f3n larga",langcode:"C\u00f3digo del lenguaje",langdir:"Direcci\u00f3n del lenguaje","constrain_proportions":"Bloquear relaci\u00f3n de aspecto",preview:"Vista previa",title:"T\u00edtulo",general:"General","tab_advanced":"Avanzado","tab_appearance":"Apariencia","tab_general":"General",width:"Ancho",height:"Alto"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/et_dlg.js
new file mode 100644
index 000000000..0b2e77492
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.advimage_dlg',{"image_list":"Piltide nimekiri","align_right":"Paremal","align_left":"Vasakul","align_textbottom":"Tekst all","align_texttop":"Tekst \u00fcleval","align_bottom":"All","align_middle":"Keskel","align_top":"\u00dcleval","align_baseline":"Baas",align:"Joondus",hspace:"Horisontaalne vahe",vspace:"Vertikaalne vahe",dimensions:"M\u00f5\u00f5tmed",border:"Raam",list:"Piltide nimekiri",alt:"Pildi kirjeldus",src:"Pildi URL","dialog_title":"Sisesta/muuda pilti","missing_alt":"Oled kindel, et soovid j\u00e4tkata pildile kirjeldust lisamata?","example_img":"Eelvaate pildi v\u00e4limus",misc:"Mitmesugune",mouseout:"\u201eKursor maas\u201c",mouseover:"\u201eKursor peal\u201c","alt_image":"Alternatiivne pilt","swap_image":"Vaheta pilti",map:"Pildi kaart",id:"ID",rtl:"Paremalt vasakule",ltr:"Vasakult paremale",classes:"Klassid",style:"Stiil","long_desc":"Pikk kirjelduse link",langcode:"Keele kood",langdir:"Keele suund","constrain_proportions":"Piira proportioone",preview:"Eelvaade",title:"Pealkiri",general:"\u00dcldine","tab_advanced":"P\u00f5hjalikum","tab_appearance":"V\u00e4limus","tab_general":"\u00dcldine",width:"Laius",height:"K\u00f5rgus"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/eu_dlg.js
new file mode 100644
index 000000000..ea4132041
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.advimage_dlg',{"image_list":"Irudi-zerrenda","align_right":"Eskuinean","align_left":"Ezkerrean","align_textbottom":"Testua behean","align_texttop":"Testua goian","align_bottom":"Behean","align_middle":"Tartean","align_top":"Goian","align_baseline":"Oinarri-marra",align:"Alineazioa",hspace:"Tarte horizontala",vspace:"Tarte bertikala",dimensions:"Tamaina",border:"Inguruko marra",list:"Irudi-zerrenda",alt:"Irudiaren deskribapena",src:"Irudiaren URL helbidea","dialog_title":"Irudia txertatu/editatu","missing_alt":"Irudiaren deskribapena gehitu gabe jarraitu nahi duzu? Hau horrela, ezgaitasunak dituztenentzat edo testu nabigatzaile bat darabiltenentzat ez da irisgarria izango.","example_img":"Nola ikusiko den",misc:"Bestelakoak",mouseout:"xagua kentzen denean",mouseover:"xagua gainean dagoenean","alt_image":"Ordezko irudia","swap_image":"Irudia ordezkatu",map:"Irudi-mapa",id:"Id",rtl:"Eskuinetik ezkerrera",ltr:"Ezkerretik eskuinera",classes:"Klaseak",style:"Estiloa","long_desc":"Deskribapen luzearen lotura",langcode:"Hizkuntza-kodea",langdir:"Hizkuntzaren norabidea","constrain_proportions":"Proportzioak mantendu",preview:"Aurrebista",title:"Izenburua",general:"Orokorra","tab_advanced":"Aurreratua","tab_appearance":"Itxura","tab_general":"Orokorra",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fa_dlg.js
new file mode 100644
index 000000000..a52e737d5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.advimage_dlg',{"image_list":"\u0644\u06cc\u0633\u062a \u062a\u0635\u0648\u06cc\u0631","align_right":"\u0631\u0627\u0633\u062a","align_left":"\u0686\u067e","align_textbottom":"\u0645\u062a\u0646 \u067e\u0627\u06cc\u06cc\u0646","align_texttop":"\u0645\u062a\u0646 \u0628\u0627\u0644\u0627","align_bottom":"\u067e\u0627\u06cc\u06cc\u0646","align_middle":"\u0648\u0633\u0637","align_top":"\u0628\u0627\u0644\u0627","align_baseline":"\u062e\u0637 \u067e\u0627\u06cc\u0647",align:"\u062a\u0631\u0627\u0632",hspace:"\u0641\u0627\u0635\u0644\u0647 \u0627\u0641\u0642\u06cc",vspace:"\u0641\u0627\u0635\u0644\u0647 \u0639\u0645\u0648\u062f\u06cc",dimensions:"\u0627\u0628\u0639\u0627\u062f",border:"\u062d\u0627\u0634\u06cc\u0647",list:"\u0644\u06cc\u0633\u062a \u062a\u0635\u0648\u06cc\u0631",alt:"\u062a\u0648\u0636\u06cc\u062d \u062a\u0635\u0648\u06cc\u0631",src:"\u0622\u062f\u0631\u0633 \u062a\u0635\u0648\u06cc\u0631","dialog_title":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631","missing_alt":"\u0622\u06cc\u0627 \u0634\u0645\u0627 \u0627\u0632 \u0627\u062f\u0627\u0645\u0647 \u0628\u062f\u0648\u0646 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u062a\u0648\u0636\u06cc\u062d \u0628\u0631\u0627\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062f\u0627\u0631\u06cc\u062f\u061f \u0628\u062f\u0648\u0646 \u0622\u0646 \u0645\u0645\u06a9\u0646 \u0646\u06cc\u0633\u062a \u062a\u0635\u0627\u0648\u06cc\u0631 \u0628\u0631\u0627\u06cc \u0628\u0631\u062e\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646\u06cc \u06a9\u0647 \u0642\u0627\u0628\u0644\u06cc\u062a \u062f\u06cc\u062f\u0646 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0631\u0627 \u0646\u062f\u0627\u0631\u0646\u062f \u060c \u06cc\u0627 \u0622\u0646\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0632 \u06cc\u06a9 \u0645\u0631\u0648\u0631\u06af\u0631 \u0645\u062a\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f \u060c \u06cc\u0627 \u062f\u0631 \u062d\u0627\u0644 \u062f\u06cc\u062f\u0646 \u0648\u0628 \u0628\u062f\u0648\u0646 \u062a\u0635\u0648\u06cc\u0631 \u0645\u06cc \u0628\u0627\u0634\u0646\u062f \u060c \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u06cc\u0627\u0628\u06cc \u0628\u0627\u0634\u062f.","example_img":"\u062a\u0635\u0648\u06cc\u0631 \u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634 \u0638\u0627\u0647\u0631",misc:"\u0645\u062a\u0641\u0631\u0642\u0647",mouseout:"\u0628\u0631\u0627\u06cc \u0631\u0641\u062a\u0646 \u0645\u0648\u0633",mouseover:"\u0628\u0631\u0627\u06cc \u0622\u0645\u062f\u0646 \u0645\u0648\u0633","alt_image":"\u062a\u0635\u0648\u06cc\u0631 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646","swap_image":"\u062a\u0639\u0648\u06cc\u0636 \u062a\u0635\u0648\u06cc\u0631",map:"\u0646\u0642\u0634\u0647 \u062a\u0635\u0648\u06cc\u0631",id:"\u0634\u0646\u0627\u0633\u0647",rtl:"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e",ltr:"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a",classes:"\u06a9\u0644\u0627\u0633 \u0647\u0627",style:"\u0627\u0633\u062a\u0627\u06cc\u0644","long_desc":"\u0644\u06cc\u0646\u06a9 \u062a\u0648\u0636\u06cc\u062d \u0637\u0648\u0644\u0627\u0646\u06cc",langcode:"\u06a9\u062f \u0632\u0628\u0627\u0646",langdir:"\u062c\u0647\u062a \u0632\u0628\u0627\u0646","constrain_proportions":"\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628",preview:"\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634",title:"\u0639\u0646\u0648\u0627\u0646",general:"\u0639\u0645\u0648\u0645\u06cc","tab_advanced":"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647","tab_appearance":"\u0638\u0627\u0647\u0631","tab_general":"\u0639\u0645\u0648\u0645\u06cc",width:"\u067e\u0647\u0646\u0627",height:"\u0627\u0631\u062a\u0641\u0627\u0639"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fi_dlg.js
new file mode 100644
index 000000000..f85c1ec31
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.advimage_dlg',{"image_list":"Kuvalista","align_right":"Oikealla","align_left":"Vasemmalla","align_textbottom":"Teksti alhaalla","align_texttop":"Teksti ylh\u00e4\u00e4ll\u00e4","align_bottom":"Alhaalla","align_middle":"Keskell\u00e4","align_top":"Ylh\u00e4\u00e4ll\u00e4","align_baseline":"Rivill\u00e4",align:"Tasaus",hspace:"vaakasuora tila",vspace:"pystysuora tila",dimensions:"Mitat",border:"Kehys",list:"Kuvalista",alt:"Kuvan kuvaus",src:"Kuvan URL","dialog_title":"Lis\u00e4\u00e4/muokkaa kuvaa","missing_alt":"Haluatko varmasti jatkaa lis\u00e4\u00e4m\u00e4tt\u00e4 kuvausta? Kuvauksen puuttuminen saattaa h\u00e4irit\u00e4 sellaisia, jotka k\u00e4ytt\u00e4v\u00e4t tekstipohjaista selainta tai ovat kytkeneet kuvien n\u00e4kymisen pois p\u00e4\u00e4lt\u00e4.","example_img":"Ulkoasun esikatselukuva",misc:"Sekalaiset",mouseout:"mouseoutille",mouseover:"mouseoverille","alt_image":"Vaihtoehtoinen kuva","swap_image":"Vaihda kuva",map:"Kuvakartta",id:"Id",rtl:"Oikealta vasemmalle",ltr:"Vasemmalta oikealle",classes:"Luokat",style:"Tyyli","long_desc":"Pitk\u00e4n kuvauksen linkki",langcode:"Kielen koodi",langdir:"Kielen suunta","constrain_proportions":"S\u00e4ilyt\u00e4 mittasuhteet",preview:"Esikatselu",title:"Otsikko",general:"Yleiset","tab_advanced":"Edistynyt","tab_appearance":"N\u00e4kyminen","tab_general":"Yleiset",width:"Leveys",height:"Korkeus"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fr_dlg.js
new file mode 100644
index 000000000..1479bf194
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.advimage_dlg',{"image_list":"Liste d\'images","align_right":"Droite (flottant)","align_left":"Gauche (flottant)","align_textbottom":"Texte en bas","align_texttop":"Texte en haut","align_bottom":"En bas","align_middle":"Au milieu","align_top":"En haut","align_baseline":"Normal",align:"Alignement",hspace:"Espacement horizontal",vspace:"Espacement vertical",dimensions:"Dimensions",border:"Bordure",list:"Liste d\'images",alt:"Description de l\'image",src:"URL de l\'image","dialog_title":"Ins\u00e9rer / \u00e9diter une image","missing_alt":"\u00cates-vous s\u00fbr de vouloir continuer sans d\u00e9finir de description pour l\'image ? Sans elle, l\'image peut ne pas \u00eatre accessible \u00e0 certains utilisateurs handicap\u00e9s, ceux utilisant un navigateur texte ou ceux qui naviguent sans affichage des images.","example_img":"Apparence de l\'image",misc:"Divers",mouseout:"\u00e0 la sortie de la souris",mouseover:"au survol de la souris","alt_image":"Image alternative","swap_image":"Image de remplacement",map:"Image cliquable",id:"Id",rtl:"De droite \u00e0 gauche",ltr:"De gauche \u00e0 droite",classes:"Classes",style:"Style","long_desc":"Description longue du lien",langcode:"Code de la langue",langdir:"Sens de lecture","constrain_proportions":"Conserver les proportions",preview:"Pr\u00e9visualisation",title:"Titre",general:"G\u00e9n\u00e9ral","tab_advanced":"Avanc\u00e9","tab_appearance":"Apparence","tab_general":"G\u00e9n\u00e9ral",width:"Largeur",height:"Hauteur"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/gl_dlg.js
new file mode 100644
index 000000000..aeac4bd6e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.advimage_dlg',{"image_list":"Lista de imaxes","align_right":"Dereita","align_left":"Esquerda","align_textbottom":"Texto abaixo","align_texttop":"Texto arriba","align_bottom":"Abaixo","align_middle":"Medio","align_top":"Arriba","align_baseline":"Li\u00f1a base",align:"Ali\u00f1amento",hspace:"Espacio horizontal",vspace:"Espacio vertical",dimensions:"Dimensi\u00f3ns",border:"Bordes",list:"Lista de imaxes",alt:"Descripci\u00f3n da imaxe",src:"URL da imaxe","dialog_title":"Insertar/editar imaxe","missing_alt":"\u00bfEsta seguro de continuar sen introducir unha descripci\u00f3n \u00e1 imaxe? Sen ela pode non ser accesible pra usuarios con discapacidades, ou pra aqueles que usen navegadores de modo texto, ou te\u00f1an deshabilitadas as imaxes da p\u00e1xina.","example_img":"Vista previa da imaxe",misc:"Miscel\u00e1neo",mouseout:"pra mouseout",mouseover:"pra mouseover","alt_image":"Imaxe alternativa","swap_image":"Intercambiar imaxe",map:"Mapa de imaxe",id:"Id",rtl:"Dereita a esquerda",ltr:"Esquerda a dereita",classes:"Clases",style:"Estilos","long_desc":"V\u00ednculo pra descripci\u00f3n larga",langcode:"C\u00f3digo do idioma",langdir:"Direcci\u00f3n do idioma","constrain_proportions":"Bloquear proporci\u00f3ns",preview:"Vista previa",title:"T\u00edtulo",general:"Xeral","tab_advanced":"Avanzado","tab_appearance":"Apariencia","tab_general":"Xeral",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/gu_dlg.js
new file mode 100644
index 000000000..30543603a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/he_dlg.js
new file mode 100644
index 000000000..fb3ea2ac6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.advimage_dlg',{"image_list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea","align_right":"\u05dc\u05d9\u05de\u05d9\u05df","align_left":"\u05dc\u05e9\u05de\u05d0\u05dc","align_textbottom":"\u05d8\u05e7\u05e1\u05d8 \u05ea\u05d7\u05ea\u05d5\u05df","align_texttop":"\u05d8\u05e7\u05e1\u05d8 \u05e2\u05dc\u05d9\u05d5\u05df","align_bottom":"\u05ea\u05d7\u05ea\u05d9\u05ea","align_middle":"\u05d0\u05de\u05e6\u05e2","align_top":"\u05e2\u05dc\u05d9\u05d5\u05df","align_baseline":"\u05e7\u05d5 \u05d1\u05e1\u05d9\u05e1\u05d9",align:"\u05d9\u05e9\u05d5\u05e8",hspace:"\u05e7\u05d5 \u05d0\u05d5\u05e4\u05e7\u05d9",vspace:"\u05e7\u05d5 \u05d0\u05e0\u05db\u05d9",dimensions:"\u05de\u05d9\u05de\u05d3\u05d9\u05dd",border:"\u05d2\u05d1\u05d5\u05dc",list:"\u05e8\u05e9\u05d9\u05de\u05ea \u05ea\u05de\u05d5\u05e0\u05d5\u05ea",alt:"\u05ea\u05d9\u05d0\u05d5\u05e8 \u05d4\u05ea\u05de\u05d5\u05e0\u05d4",src:"URL \u05e9\u05dc \u05d4\u05ea\u05de\u05d5\u05e0\u05d4","dialog_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05ea\u05de\u05d5\u05e0\u05d4","missing_alt":"\u05dc\u05d4\u05de\u05e9\u05d9\u05da \u05de\u05d1\u05dc\u05d9 \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05ea\u05d9\u05d0\u05d5\u05e8 \u05dc\u05ea\u05de\u05d5\u05e0\u05d4?","example_img":"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4 \u05e9\u05dc \u05d4\u05ea\u05de\u05d5\u05e0\u05d4",misc:"\u05e9\u05d5\u05e0\u05d5\u05ea",mouseout:"\u05d4\u05e1\u05de\u05df \u05e2\u05d1\u05e8 \u05d0\u05ea \u05d4\u05ea\u05de\u05d5\u05e0\u05d4",mouseover:"\u05d1\u05e2\u05ea \u05de\u05e2\u05d1\u05e8 \u05d4\u05e1\u05de\u05df \u05e2\u05dc \u05d4\u05ea\u05de\u05d5\u05e0\u05d4","alt_image":"\u05ea\u05de\u05d5\u05e0\u05d4 \u05d7\u05dc\u05d9\u05e4\u05d9\u05ea","swap_image":"\u05d4\u05d7\u05dc\u05e4\u05ea \u05ea\u05de\u05d5\u05e0\u05d4",map:"Image map",id:"Id",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",classes:"Classes",style:"\u05e1\u05d2\u05e0\u05d5\u05df","long_desc":"\u05ea\u05d9\u05d0\u05d5\u05e8 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e8\u05d5\u05da",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4","constrain_proportions":"\u05e9\u05de\u05d9\u05e8\u05d4 \u05e2\u05dc \u05e4\u05e8\u05d5\u05e4\u05d5\u05e8\u05e6\u05d9\u05d5\u05ea",preview:"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4",title:"\u05db\u05d5\u05ea\u05e8\u05ea",general:"\u05db\u05dc\u05dc\u05d9","tab_advanced":"\u05de\u05ea\u05e7\u05d3\u05dd","tab_appearance":"\u05de\u05e8\u05d0\u05d4","tab_general":"\u05db\u05dc\u05dc\u05d9",width:"\u05e8\u05d5\u05d7\u05d1",height:"\u05d2\u05d5\u05d1\u05d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hi_dlg.js
new file mode 100644
index 000000000..f7b2361d1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hr_dlg.js
new file mode 100644
index 000000000..441370071
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.advimage_dlg',{"image_list":"Lista slika","align_right":"Na desno","align_left":"Na lijevo","align_textbottom":"Na dno teksta","align_texttop":"Na vrh teksta","align_bottom":"Na dno","align_middle":"Na sredinu","align_top":"Na vrh","align_baseline":"Osnovna linija",align:"Poravnavanje",hspace:"Vodoravni razmak",vspace:"Okomiti razmak",dimensions:"Dimenzije",border:"Obrub",list:"Lista slika",alt:"Opis slike",src:"URL slike","dialog_title":"Umetni/uredi sliku","missing_alt":"Jeste li sigurni da \u017eelite izostaviti opis slike? Slika mo\u017ee biti nedostupna ljudima s pote\u0161ko\u0107ama ili onima koji koriste preglednike bez prikaza slika.","example_img":"Predprikaz slike",misc:"Razno",mouseout:"za izlazak mi\u0161a van slike",mouseover:"za prelazak mi\u0161a preko slike","alt_image":"Alternativna slika","swap_image":"Izmjenjiva slika",map:"Karta slike",id:"Id",rtl:"S desna na lijevo",ltr:"S lijeva na desno",classes:"Klase",style:"Stil","long_desc":"Poveznica dugog opisa",langcode:"Kod jezika",langdir:"Smjer jezika","constrain_proportions":"Zadr\u017ei proporcije",preview:"Predprikaz",title:"Naslov",general:"Op\u0107e","tab_advanced":"Napredno","tab_appearance":"Izgled","tab_general":"Op\u0107e",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hu_dlg.js
new file mode 100644
index 000000000..d692d27a8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.advimage_dlg',{"image_list":"K\u00e9plista","align_right":"Jobbra","align_left":"Balra","align_textbottom":"Sz\u00f6veg alj\u00e1hoz","align_texttop":"Sz\u00f6veg tetej\u00e9hez","align_bottom":"Lentre","align_middle":"K\u00f6z\u00e9pre","align_top":"Fentre","align_baseline":"Alapvonalhoz",align:"Igaz\u00edt\u00e1s",hspace:"V\u00edzszintes t\u00e1vols\u00e1g",vspace:"F\u00fcgg\u0151leges t\u00e1vols\u00e1g",dimensions:"M\u00e9retek",border:"Keret",list:"K\u00e9plista",alt:"K\u00e9p helyettes\u00edt\u0151 sz\u00f6vege",src:"K\u00e9p internet c\u00edme","dialog_title":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","missing_alt":"Biztosan folytatja helyettes\u00edt\u0151 sz\u00f6veg n\u00e9lk\u00fcl? En\u00e9lk\u00fcl a korl\u00e1toz\u00e1ssal \u00e9l\u0151k, sz\u00f6veges b\u00f6ng\u00e9sz\u0151t haszn\u00e1l\u00f3k \u00e9s a k\u00e9pek megjelen\u00edt\u00e9s\u00e9t letilt\u00f3 felhaszn\u00e1l\u00f3k h\u00e1tr\u00e1nyban lesznek.","example_img":"El\u0151n\u00e9zeti k\u00e9p",misc:"Vegyes",mouseout:"K\u00e9p az eg\u00e9rkurzor lev\u00e9telekor",mouseover:"K\u00e9p az eg\u00e9rkurzor f\u00f6l\u00e9vitelekor","alt_image":"Alternat\u00edv k\u00e9p","swap_image":"K\u00e9pcsere",map:"K\u00e9p t\u00e9rk\u00e9p",id:"Id",rtl:"Jobbr\u00f3l balra",ltr:"Balr\u00f3l jobbra",classes:"Oszt\u00e1lyok",style:"CSS St\u00edlus","long_desc":"B\u0151vebb le\u00edr\u00e1s link",langcode:"Nyelv k\u00f3d",langdir:"Nyelv \u00edr\u00e1s ir\u00e1ny","constrain_proportions":"Ar\u00e1nytart\u00e1s",preview:"El\u0151n\u00e9zet",title:"C\u00edm",general:"\u00c1ltal\u00e1nos","tab_advanced":"Halad\u00f3","tab_appearance":"Megjelen\u00e9s","tab_general":"\u00c1ltal\u00e1nos",width:"Sz\u00e9less\u00e9g",height:"Magass\u00e1g"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hy_dlg.js
new file mode 100644
index 000000000..581d4f606
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.advimage_dlg',{"image_list":"\u0546\u056f\u0561\u0580\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f","align_right":"\u0538\u057d\u057f \u0561\u057b \u0565\u0566\u0580\u056b","align_left":"\u0538\u057d\u057f \u0571\u0561\u056d \u0565\u0566\u0580\u056b","align_textbottom":"\u0538\u057d\u057f \u057f\u0565\u0584\u057d\u057f\u056b \u057d\u057f\u0578\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","align_texttop":"\u0538\u057d\u057f \u057f\u0565\u0584\u057d\u057f\u056b \u057e\u0565\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","align_bottom":"\u0538\u057d\u057f \u057d\u057f\u0578\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","align_middle":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0581\u0576\u0565\u056c","align_top":"\u0538\u057d\u057f \u057e\u0565\u0580\u056b \u0565\u0566\u0580\u056b","align_baseline":"\u0538\u057d\u057f \u0562\u0561\u0566\u0561\u0575\u056b\u0576 \u0563\u056e\u056b",align:"\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574",hspace:"\u0540\u0578\u0580\u056b\u0566. \u0570\u0565\u057c\u0561\u0581\u0578\u0582\u0574",vspace:"\u0548\u0582\u0572\u0572. \u0570\u0565\u057c\u0561\u0581\u0578\u0582\u0574",dimensions:"\u0549\u0561\u0583\u057d\u0565\u0580",border:"\u0535\u0566\u0580",list:"\u0546\u056f\u0561\u0580\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f",alt:"\u0546\u056f\u0561\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",src:"\u0546\u056f\u0561\u0580\u056b \u0570\u0561\u057d\u0581\u0565","dialog_title":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0576\u056f\u0561\u0580","missing_alt":"\u0534\u0578\u0582\u0584 \u056b\u0580\u0578\u055e\u0584 \u0579\u0565\u0584 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u0574 \u0576\u056f\u0561\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576 \u0576\u0565\u0580\u0561\u057c\u0565\u056c\u0589","example_img":"\u0546\u056f\u0561\u0580\u056b \u0564\u056b\u057f\u0574\u0561\u0576 \u057f\u0565\u057d\u0584",misc:"\u0531\u0575\u056c",mouseout:"\u0570\u0565\u057c\u0561\u0581\u0574\u0561\u0576 \u057a\u0561\u0570\u056b\u0576",mouseover:"\u0544\u0578\u057f\u0565\u0581\u0574\u0561\u0576 \u057a\u0561\u0570\u056b\u0576","alt_image":"\u0531\u056c\u057f\u0565\u0580\u0576\u0561\u057f\u056b\u057e \u0576\u056f\u0561\u0580","swap_image":"Swap",map:"\u0546\u056f\u0561\u0580\u056b map",id:"Id",rtl:"\u0531\u057b\u056b\u0581 \u0571\u0561\u056d",ltr:"\u0541\u0561\u056d\u056b\u0581 \u0561\u057b",classes:"\u0534\u0561\u057d\u0565\u0580",style:"\u0548\u0573","long_desc":"\u0544\u0561\u0576\u0580\u0561\u0574\u0561\u057d\u0576 \u0562\u0561\u0581\u0561\u057f\u0580\u0578\u0582\u0569\u0575\u0561\u0576 \u0570\u0572\u0578\u0582\u0574",langcode:"\u053c\u0565\u0566\u057e\u056b \u056f\u0578\u0564",langdir:"\u053c\u0565\u0566\u057e\u056b \u0578\u0582\u0572\u0572\u057e\u0561\u056e\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568","constrain_proportions":"\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c \u0579\u0561\u0583\u0565\u0580\u056b \u0570\u0561\u0580\u0561\u0562\u0565\u0580\u0561\u056f\u0581\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568",preview:"\u0546\u0561\u056d\u0561\u0564\u056b\u057f\u0578\u0582\u0574",title:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580",general:"\u0540\u056b\u0574\u0576\u0561\u056f\u0561\u0576","tab_advanced":"\u053c\u0580\u0561\u0581\u0578\u0582\u0581\u056b\u0579","tab_appearance":"\u054f\u0565\u057d\u0584","tab_general":"\u0540\u056b\u0574\u0576\u0561\u056f\u0561\u0576",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ia_dlg.js
new file mode 100644
index 000000000..f540c79c4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.advimage_dlg',{"image_list":"\u56fe\u7247\u6e05\u5355","align_right":"\u5c45\u53f3","align_left":"\u5c45\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u5e95\u90e8","align_middle":"\u4e2d\u90e8","align_top":"\u9876\u90e8","align_baseline":"\u57fa\u7ebf",align:"\u5bf9\u9f50\u65b9\u5f0f",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u6e05\u5355",alt:"\u56fe\u7247\u8bf4\u660e",src:"\u56fe\u7247\u5730\u5740","dialog_title":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","missing_alt":" \u662f\u5426\u4e0d\u4e3a\u56fe\u7247\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff0c\u5982\u679c\u4e0d\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff0c\u5c06\u5bfc\u81f4\u4e0d\u652f\u6301\u56fe\u7247\u7684\u6d4f\u89c8\u5668\u5ffd\u7565\u672c\u5185\u5bb9","example_img":"\u9884\u89c8\u56fe\u7247",misc:"\u5176\u5b83",mouseout:"\u9f20\u6807\u79fb\u51fa",mouseover:"\u9f20\u6807\u5212\u8fc7","alt_image":"\u4ea4\u66ff\u56fe\u7247","swap_image":"\u5207\u6362\u56fe\u7247",map:"\u56fe\u7247\u70ed\u70b9",id:"Id",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",classes:"\u6837\u5f0f\u7c7b",style:"\u6837\u5f0f","long_desc":"\u63cf\u8ff0",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u67e5\u627e",general:"\u57fa\u672c","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u57fa\u672c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/id_dlg.js
new file mode 100644
index 000000000..e7bc7c631
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.advimage_dlg',{"image_list":"Daftar Gambar","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensi",border:"Border",list:"Daftar Gambar",alt:"Deskripsi Gambar",src:"URL Gambar","dialog_title":"sisipkan/Ubah Gambar","missing_alt":"Yakin ingin melanjutkan tanpa menyertakan deskripsi gambar? Gambar mungkin tidak dapat diakses oleh beberapa pengguna yang yang memiliki keterbatasan, atau mereka yang menggunakan modus teks browser, atau berselancar di Web dengan gambar dimatikan.","example_img":"Gambar pra-tampil",misc:"Rupa-rupa",mouseout:"untuk mouse out",mouseover:"untuk mouse over","alt_image":"Alternatif gambar","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",classes:"Classes",style:"Style","long_desc":"Deskripsi panjang link",langcode:"Kode bahasa",langdir:"Bahasa","constrain_proportions":"Proporsi dibatasi",preview:"Preview",title:"Judul",general:"Umun","tab_advanced":"Advanced","tab_appearance":"Tampilan","tab_general":"Umum",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/is_dlg.js
new file mode 100644
index 000000000..f127dac73
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"J\u00f6fnun",hspace:"L\u00e1r\u00e9tt loftun",vspace:"L\u00f3\u00f0r\u00e9tt loftun",dimensions:"St\u00e6r\u00f0ir",border:"Rammi",list:"Myndalisti",alt:"L\u00fdsing",src:"Sl\u00f3\u00f0 \u00e1 mynd","dialog_title":"Setja inn/breyta mynd","missing_alt":"Ertu viss um a\u00f0 halda \u00e1fram \u00e1n l\u00fdsingu myndar? \u00c1n hennar er myndin \u00f3a\u00f0genginleg fyrir suma notendur me\u00f0 skj\u00e1lesara, texta vafra e\u00f0a me\u00f0 sl\u00f6kkt \u00e1 birtingu mynda \u00ed vafranum s\u00ednum.","example_img":"Birting prufumyndar",misc:"\u00ddmislegt",mouseout:"\u00feegar m\u00fas fer af",mouseover:"\u00feegar m\u00fas er yfir","alt_image":"\u00d6nnur mynd","swap_image":"Skipta mynd \u00fat",map:"Image map",id:"Id",rtl:"H\u00e6gri til vinstri",ltr:"Vinstri til h\u00e6gri",classes:"Klasar",style:"St\u00edll","long_desc":"L\u00f6ng l\u00fdsing \u00e1 hlekki",langcode:"K\u00f3\u00f0i tungum\u00e1ls",langdir:"\u00c1tt tungum\u00e1ls","constrain_proportions":"Halda hlutf\u00f6llum",preview:"Forsko\u00f0un",title:"Titill",general:"Almennt","tab_advanced":"N\u00e1nar","tab_appearance":"\u00datlit","tab_general":"Almennt",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/it_dlg.js
new file mode 100644
index 000000000..9195c9623
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.advimage_dlg',{"image_list":"Lista immagini","align_right":"A destra","align_left":"A sinistra","align_textbottom":"In basso al testo","align_texttop":"In alto al testo","align_bottom":"In basso","align_middle":"In mezzo","align_top":"In alto","align_baseline":"Alla base",align:"Allineamento",hspace:"Spaziatura orizzontale",vspace:"Spaziatura verticale",dimensions:"Dimensioni",border:"Bordo",list:"Lista immagini",alt:"Descrizione immagine",src:"URL immagine","dialog_title":"Inserisci/modifica immagine","missing_alt":"Sicuro di continuare senza includere una descrizione dell\'immagine? Senza di essa l\'immagine pu\u00f2 non essere accessibile ad alcuni utenti con disabilit\u00e0, o per coloro che usano un browser testuale oppure che hanno disabilitato la visualizzazione delle immagini nel loro browser.","example_img":"Anteprima aspetto immagine",misc:"Impostazioni varie",mouseout:"quando mouse fuori",mouseover:"quando mouse sopra","alt_image":"Immagine alternativa","swap_image":"Sostituisci immagine",map:"Immagine come mappa",id:"Id",rtl:"Destra verso sinistraa",ltr:"Sinistra verso destra",classes:"Classe",style:"Stile","long_desc":"Descrizione del collegamento",langcode:"codice lingua",langdir:"Direzione testo","constrain_proportions":"Mantieni proporzioni",preview:"Anteprima",title:"Titolo",general:"Generale","tab_advanced":"Avanzate","tab_appearance":"Aspetto","tab_general":"Generale",width:"Larghezza",height:"Altezza"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ja_dlg.js
new file mode 100644
index 000000000..f8449c423
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.advimage_dlg',{"image_list":"\u753b\u50cf\u306e\u4e00\u89a7","align_right":"\u53f3\u5bc4\u305b","align_left":"\u5de6\u5bc4\u305b","align_textbottom":"\u30c6\u30ad\u30b9\u30c8\u3092\u4e0b\u7aef\u63c3\u3048","align_texttop":"\u30c6\u30ad\u30b9\u30c8\u3092\u4e0a\u7aef\u63c3\u3048","align_bottom":"\u4e0b\u63c3\u3048","align_middle":"\u4e2d\u592e\u63c3\u3048","align_top":"\u4e0a\u63c3\u3048","align_baseline":"\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u63c3\u3048",align:"\u914d\u7f6e",hspace:"\u5de6\u53f3\u306e\u4f59\u767d",vspace:"\u4e0a\u4e0b\u306e\u4f59\u767d",dimensions:"\u5bf8\u6cd5",border:"\u67a0\u7dda",list:"\u753b\u50cf\u306e\u4e00\u89a7",alt:"\u753b\u50cf\u306e\u8aac\u660e",src:"\u753b\u50cf\u306eURL","dialog_title":"\u753b\u50cf\u3092\u633f\u5165/\u7de8\u96c6","missing_alt":"\u753b\u50cf\u306e\u8aac\u660e\u3092\u542b\u3081\u305a\u306b\u7d9a\u3051\u307e\u3059\u304b? \u753b\u50cf\u306e\u8aac\u660e\u304c\u306a\u3044\u3068\u76ee\u306e\u4e0d\u81ea\u7531\u306a\u65b9\u3001\u30c6\u30ad\u30b9\u30c8\u8868\u793a\u3060\u3051\u306e\u30d6\u30e9\u30a6\u30b6\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u65b9\u3001\u753b\u50cf\u306e\u8868\u793a\u3092\u6b62\u3081\u3066\u308b\u65b9\u304c\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002","example_img":"\u753b\u50cf\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u69d8\u5b50",misc:"\u305d\u306e\u4ed6",mouseout:"\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u5916\u308c\u308b\u6642",mouseover:"\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u304b\u304b\u308b\u6642","alt_image":"\u5225\u306e\u753b\u50cf","swap_image":"\u753b\u50cf\u306e\u5165\u308c\u66ff\u3048",map:"\u30a4\u30e1\u30fc\u30b8\u30de\u30c3\u30d7",id:"ID",rtl:"\u53f3\u304b\u3089\u5de6",ltr:"\u5de6\u304b\u3089\u53f3",classes:"\u30af\u30e9\u30b9",style:"\u30b9\u30bf\u30a4\u30eb","long_desc":"\u8a73\u7d30\u306a\u8aac\u660e\u306e\u30ea\u30f3\u30af",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9",langdir:"\u6587\u7ae0\u306e\u65b9\u5411","constrain_proportions":"\u7e26\u6a2a\u6bd4\u306e\u7dad\u6301",preview:"\u30d7\u30ec\u30d3\u30e5\u30fc",title:"\u30bf\u30a4\u30c8\u30eb",general:"\u4e00\u822c","tab_advanced":"\u9ad8\u5ea6\u306a\u8a2d\u5b9a","tab_appearance":"\u8868\u793a","tab_general":"\u4e00\u822c",width:"\u5e45",height:"\u9ad8\u3055"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ka_dlg.js
new file mode 100644
index 000000000..6ab7d35d3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.advimage_dlg',{"image_list":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0","align_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_textbottom":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_texttop":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_bottom":"\u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_middle":"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d6\u10d4","align_top":"\u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_baseline":"\u10e1\u10d0\u10d1\u10d0\u10d6\u10d8\u10e1\u10dd \u10ee\u10d0\u10d6\u10d6\u10d4",align:"\u10db\u10dd\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",hspace:"\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",vspace:"\u10d5\u10d4\u10e0\u10e2. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",dimensions:"\u10d6\u10dd\u10db\u10d4\u10d1\u10d8",border:"\u10e9\u10d0\u10e0\u10e9\u10dd",list:"\u10e1\u10d8\u10d0",alt:"\u10d0\u10e6\u10ec\u10d4\u10e0\u10d0",src:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8","dialog_title":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","missing_alt":"\u10d0\u10e0 \u10d2\u10e1\u10e3\u10e0\u10d7 \u10d0\u10e6\u10ec\u10d4\u10e0\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0? \u10d0\u10e6\u10ec\u10d4\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4 \u10e1\u10e3\u10e0\u10d0\u10d7\u10d8 \u10e8\u10d4\u10d8\u10eb\u10da\u10d4\u10d1\u10d0 \u10d6\u10dd\u10d2\u10d8 \u10db\u10dc\u10d0\u10ee\u10d5\u10d4\u10da\u10d8\u10e1\u10d7\u10d5\u10d8\u10e1 \u10d8\u10e7\u10dd\u10e1 \u10db\u10d8\u10e3\u10ec\u10d5\u10d3\u10dd\u10db\u10d4\u10da\u10d8.","example_img":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",misc:"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",mouseout:"\u10e1\u10d8\u10db\u10e8\u10d5\u10d8\u10d3\u10d4\u10e8\u10d8",mouseover:"\u10d9\u10e3\u10e0\u10e1\u10dd\u10e0\u10d8\u10e1 \u10db\u10d8\u10e7\u10d5\u10d0\u10dc\u10d8\u10e1\u10d0\u10e1","alt_image":"\u10d0\u10da\u10e2\u10d4\u10e0\u10dc\u10d0\u10e2\u10d8\u10e3\u10da\u10d8 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d0","swap_image":"\u10d3\u10d8\u10dc\u10d0\u10db\u10d8\u10e3\u10e0\u10d8 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d0",map:"\u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10e0\u10e3\u10e5\u10d0",id:"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0",rtl:"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10e1\u10dc\u10d8\u10d5",ltr:"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",classes:"\u10d9\u10da\u10d0\u10e1\u10d4\u10d1\u10d8",style:"\u10e1\u10e2\u10d8\u10da\u10d8","long_desc":"\u10d1\u10db\u10e3\u10da\u10d8 \u10e1\u10e0\u10e3\u10da \u10d0\u10e6\u10ec\u10d4\u10e0\u10d0\u10d6\u10d4",langcode:"\u10d4\u10dc\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8",langdir:"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0","constrain_proportions":"\u10de\u10e0\u10dd\u10de\u10dd\u10e0\u10ea\u10d8\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0",preview:"\u10ec\u10d8\u10dc\u10d0\u10e1\u10ec\u10d0\u10e0 \u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10d4\u10e0\u10d4\u10d1\u10d0",title:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8",general:"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","tab_advanced":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7","tab_appearance":"\u10db\u10d3\u10d2\u10dd\u10db\u10d0\u10e0\u10d4\u10dd\u10d1\u10d0","tab_general":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/kl_dlg.js
new file mode 100644
index 000000000..54ec3c210
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/km_dlg.js
new file mode 100644
index 000000000..d27bf1787
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.advimage_dlg',{"image_list":"\u1794\u1789\u17d2\u1787\u17b8\u179a\u17bc\u1794\u1797\u17b6\u1796","align_right":"\u179f\u17d2\u178f\u17b6\u17c6","align_left":"\u1786\u17d2\u179c\u17c1\u1784","align_textbottom":"\u1780\u17d2\u179a\u17c4\u1798\u17a2\u178f\u17d2\u1790\u1794\u1791","align_texttop":"\u179b\u17be\u17a2\u178f\u17d2\u1790\u1794\u1791","align_bottom":"\u1780\u17d2\u179a\u17c4\u1798","align_middle":"\u1780\u178e\u17d2\u178f\u17b6\u179b","align_top":"\u179b\u17be","align_baseline":"\u1781\u17d2\u179f\u17c2\u1782\u17c4\u179b",align:"\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17b9\u1798",hspace:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1795\u17d2\u178f\u17c1\u1780",vspace:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1794\u1789\u17d2\u1788\u179a",dimensions:"\u179c\u17b7\u1798\u17b6\u178f\u17d2\u179a",border:"\u179f\u17ca\u17bb\u1798",list:"\u1794\u1789\u17d2\u1787\u17b8\u179a\u17bc\u1794\u1797\u17b6\u1796",alt:"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u179a\u17bc\u1794\u1797\u17b6\u1796",src:"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793URL\u179a\u17bc\u1794\u1797\u17b6\u1796","dialog_title":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u17bc\u1794\u1797\u17b6\u1796","missing_alt":"\u178f\u17be\u17a2\u17d2\u1793\u1780\u1796\u17b7\u178f\u1787\u17b6\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u179a\u178a\u17c4\u1799\u1798\u17b7\u1793\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1780\u17b6\u179a\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u179a\u17bc\u1794\u1797\u17b6\u1796\u17ac? \u1794\u17be\u1798\u17b7\u1793\u1798\u17b6\u1793\u17a2\u178f\u17d2\u1790\u1794\u1791\u1796\u178e\u17cc\u1793\u17b6\u1791\u17c1 \u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793\u178a\u17c2\u179b\u1787\u17b6\u1787\u1793\u17a2\u179f\u1798\u178f\u17d2\u178f\u1797\u17b6\u1796 \u17ac\u1780\u17cf\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u17a7\u1794\u1780\u179a\u178e\u17cd\u179a\u17bb\u1780\u179a\u1780\u178f\u17c2\u17a2\u178f\u17d2\u1790\u1794\u1791 \u1793\u17b7\u1784\u17a2\u17d2\u1793\u1780\u178a\u17c2\u179b\u179a\u1780\u1798\u17be\u179b\u179b\u17be\u1794\u178e\u17d2\u178f\u17b6\u1789\u178a\u17c4\u1799\u1794\u17b7\u1791\u179a\u17bc\u1794\u1797\u17b6\u1796 \u1793\u17b9\u1784\u1798\u17b7\u1793\u17a2\u17b6\u1785\u1798\u17be\u179b\u1783\u17be\u1789\u179a\u17bc\u1794\u1797\u17b6\u1796\u1793\u17c1\u17c7\u1794\u17b6\u1793\u17a1\u17be\u1799\u17d4","example_img":"\u1798\u17be\u179b\u179a\u17bc\u1794\u179a\u17b6\u1784\u179a\u17bc\u1794\u1797\u17b6\u1796\u1787\u17b6\u1798\u17bb\u1793",misc:"\u1795\u17d2\u179f\u17c1\u1784\u17d7",mouseout:"\u1780\u178e\u17d2\u178f\u17bb\u179a\u1785\u17c1\u1789\u1780\u17d2\u179a\u17c5",mouseover:"\u1780\u178e\u17d2\u178f\u17bb\u179a\u178a\u17b6\u1780\u17cb\u179b\u17be","alt_image":"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1787\u17c6\u1793\u17bd\u179f","swap_image":"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1794\u17d2\u178a\u17bc\u179a",map:"\u1795\u17c2\u1793\u1791\u17b8\u179a\u17bc\u1794\u1797\u17b6\u1796",id:"\u179b.\u179f.",rtl:"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784",ltr:"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6",classes:"\u1790\u17d2\u1793\u17b6\u1780\u17cb",style:"\u179a\u1785\u1793\u17b6\u1794\u17d2\u1798\u17d0\u1791","long_desc":"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u1796\u17b7\u179f\u17d2\u178f\u17b6\u179a\u178f\u17c6\u178e",langcode:"\u1780\u17bc\u178a\u1797\u17b6\u179f\u17b6",langdir:"\u1791\u17b7\u179f\u1797\u17b6\u179f\u17b6","constrain_proportions":"\u1794\u1784\u17d2\u1781\u17c6\u17b2\u17d2\u1799\u1798\u17b6\u1793\u179f\u1798\u17b6\u1798\u17b6\u178f\u17d2\u179a",preview:"\u1798\u17be\u179b\u1787\u17b6\u1798\u17bb\u1793",title:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784",general:"\u1791\u17bc\u1791\u17c5","tab_advanced":"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","tab_appearance":"\u179a\u17bc\u1794\u179a\u17b6\u1784","tab_general":"\u1791\u17bc\u1791\u17c5",width:"\u1791\u1791\u17b9\u1784",height:"\u1780\u1798\u17d2\u1796\u179f\u17cb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ko_dlg.js
new file mode 100644
index 000000000..f2fcb3ba6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.advimage_dlg',{"image_list":"\uc774\ubbf8\uc9c0 \ubaa9\ub85d","align_right":"\uc624\ub978\ucabd","align_left":"\uc67c\ucabd","align_textbottom":"\ubb38\uc790 \ud558\ub2e8","align_texttop":"\ubb38\uc790 \uc0c1\ub2e8","align_bottom":"\ud558\ub2e8","align_middle":"\uc911\uc559","align_top":"\uc0c1\ub2e8","align_baseline":"\uae30\uc900\uc120",align:"\uc904\ub9de\ucda4",hspace:"\uc88c\uc6b0 \uc5ec\ubc31",vspace:"\uc0c1\ud558 \uc5ec\ubc31",dimensions:"\ud06c\uae30",border:"\ud14c\ub450\ub9ac \uc120",list:"\uc774\ubbf8\uc9c0 \ubaa9\ub85d",alt:"\uc774\ubbf8\uc9c0 \uc124\uba85",src:"\uc774\ubbf8\uc9c0 URL","dialog_title":"\uc774\ubbf8\uc9c0 \uc0bd\uc785/\ud3b8\uc9d1","missing_alt":"\uc774\ubbf8\uc9c0 \uc124\uba85\uc744 \ub123\uc9c0 \uc54a\uace0 \uc9c4\ud589\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? \uc774\ubbf8\uc9c0 \uc124\uba85\uc774 \uc5c6\uc73c\uba74 \uc7a5\uc560\uac00 \uc788\ub294 \uc77c\ubd80 \uc0ac\uc6a9\uc790\ub098 \ud14d\uc2a4\ud2b8 \ube0c\ub77c\uc6b0\uc800 \uc0ac\uc6a9\uc790, \uc774\ubbf8\uc9c0 \ud45c\uc2dc\ub97c \ub048 \uc0c1\ud0dc\uc5d0\uc11c \uc6f9\uc744 \ubcf4\ub294 \uc0ac\uc6a9\uc790\ub294 \uc774\ubbf8\uc9c0\ub97c \uc561\uc138\uc2a4\ud558\uc9c0 \ubabb\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","example_img":"\ubbf8\ub9ac \ubcf4\uae30 \uc774\ubbf8\uc9c0",misc:"\uae30\ud0c0",mouseout:"\ub9c8\uc6b0\uc2a4 \ube7c\ub0c8\uc744 \ub54c",mouseover:"\ub9c8\uc6b0\uc2a4 \uc62c\ub838\uc744 \ub54c","alt_image":"\ub300\uccb4 \uc774\ubbf8\uc9c0","swap_image":"\ub864 \uc624\ubc84 \ud6a8\uacfc",map:"\uc774\ubbf8\uc9c0 \ub9f5",id:"ID",rtl:"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c",ltr:"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c",classes:"\ud074\ub798\uc2a4",style:"\uc11c\uc2dd","long_desc":"\uae34 \uc124\uba85 \ub9c1\ud06c",langcode:"\uc5b8\uc5b4 \ucf54\ub4dc",langdir:"\ubb38\uc790 \ubc29\ud5a5","constrain_proportions":"\uc885\ud6a1\ube44 \ubcf4\uc874",preview:"\ubbf8\ub9ac \ubcf4\uae30",title:"\uc81c\ubaa9",general:"\uc77c\ubc18","tab_advanced":"\uc138\ubd80 \uc0ac\ud56d","tab_appearance":"\ud45c\uc2dc","tab_general":"\uc77c\ubc18",width:"\ud3ed",height:"\ub192\uc774"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/kz_dlg.js
new file mode 100644
index 000000000..e761aea98
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","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.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lb_dlg.js
new file mode 100644
index 000000000..01ce51f68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.advimage_dlg',{"image_list":"Billerl\u00ebscht","align_right":"Riets","align_left":"L\u00e9nks","align_textbottom":"\u00cbnnen am Text","align_texttop":"Uewen am Text","align_bottom":"\u00cbnnen","align_middle":"M\u00ebtteg","align_top":"Uewen","align_baseline":"Zeil",align:"Ausriichtung",hspace:"Horizontalen Ofstand",vspace:"Vertikalen Ofstand",dimensions:"Ausmoossen",border:"Rumm",list:"Billerl\u00ebschten",alt:"Beschreiwung",src:"Adress","dialog_title":"Bild af\u00fcgen/beaarbechten","missing_alt":"W\u00ebll Dir wierklech keng Beschreiwung aginn? Best\u00ebmmt Benotzer mat kierperlechen Aschr\u00e4nkungen k\u00ebnnen sou net dorop zougr\u00e4ifen, genau sou d\u00e9i, d\u00e9i een Textbrowser benotzen oder d\'Uweise vu Biller desaktiv\u00e9iert hunn.","example_img":"Ausgesinn vun der Virschau",misc:"Verschiddenes",mouseout:"bei kengem Mauskontakt",mouseover:"bei Mauskontakt","alt_image":"Alternativt Bild","swap_image":"Bild austauschen",map:"Image-Map",id:"ID",rtl:"Riets no l\u00e9nks",ltr:"L\u00e9nks no riets",classes:"Klassen",style:"Format","long_desc":"Ausf\u00e9ierlech Beschreiwung",langcode:"Sproochcode",langdir:"Schr\u00ebftrichtung","constrain_proportions":"S\u00e4iteverh\u00e4ltnis b\u00e4ibehalen",preview:"Virschau",title:"Titel",general:"Allgemeng","tab_advanced":"Erweidert","tab_appearance":"Ausgesinn","tab_general":"Allgemeng",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lt_dlg.js
new file mode 100644
index 000000000..8f85e7aa4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.advimage_dlg',{"image_list":"Paveiksl\u0117li\u0173 s\u0105ra\u0161as","align_right":"De\u0161in\u0117je","align_left":"Kair\u0117je","align_textbottom":"Teksto apa\u010dioje","align_texttop":"Teksto vir\u0161uje","align_bottom":"Apa\u010dioje","align_middle":"Viduryje","align_top":"Vir\u0161uje","align_baseline":"Pradiniame ta\u0161ke",align:"Lygiavimas",hspace:"Horizontalus tarpas",vspace:"Vertikalus tarpas",dimensions:"I\u0161matavimai",border:"R\u0117melis",list:"Paveiksl\u0117li\u0173 s\u0105ra\u0161as",alt:"Paveiksl\u0117lio apra\u0161as",src:"Paveiksl\u0117lio URL adresas","dialog_title":"\u012eterpti/redaguoti paveiksl\u0117l\u012f","missing_alt":"Ar norite t\u0119sti ne\u012fved\u0119 paveiksl\u0117lio apra\u0161o? Be apra\u0161o jo neatpa\u017eins \u017emon\u0117s su negalia, tie kurie naudoja tekstines nar\u0161ykles, arba tie, kurie nar\u0161o internet\u0105 i\u0161jung\u0119 paveiksl\u0117li\u0173 rodym\u0105.","example_img":"I\u0161vaizdos per\u017ei\u016bros paveiksl\u0117lis",misc:"\u012evair\u016bs",mouseout:"nuvedant pel\u0119",mouseover:"u\u017evedant pele","alt_image":"Alternatyvus paveiksl\u0117lis","swap_image":"Sukeisti paveiksl\u0117l\u012f",map:"Paveiksl\u0117lio planas",id:"Id",rtl:"I\u0161 de\u0161in\u0117s \u012f kair\u0119",ltr:"I\u0161 kair\u0117s \u012f de\u0161in\u0119",classes:"Klas\u0117s",style:"Stilius","long_desc":"Ilgo apra\u0161o nuoroda",langcode:"Kalbos kodas",langdir:"Kalbos teksto kryptis","constrain_proportions":"Priverstin\u0117s proporcijos",preview:"Per\u017ei\u016bra",title:"Pavadinimas",general:"Bendra","tab_advanced":"I\u0161pl\u0117sta","tab_appearance":"I\u0161vaizda","tab_general":"Bendra",width:"Plotis",height:"Auk\u0161tis"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lv_dlg.js
new file mode 100644
index 000000000..836aec61d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.advimage_dlg',{"image_list":"Att\u0113lu saraksts","align_right":"Pa labi","align_left":"Pa kreisi","align_textbottom":"Teksta apak\u0161a","align_texttop":"Teksta aug\u0161a","align_bottom":"Apak\u0161a","align_middle":"Vidus","align_top":"Aug\u0161a","align_baseline":"Pati apak\u0161a",align:"Novietojums",hspace:"Horizont\u0101l\u0101 atstarpe",vspace:"Vertik\u0101l\u0101 atstarpe",dimensions:"Izm\u0113ri",border:"Apmale",list:"Att\u0113lu saraksts",alt:"Att\u0113la apraksts",src:"Att\u0113la URL","dialog_title":"Ievietot/Redi\u0123\u0113t att\u0113lu","missing_alt":"Vai esat p\u0101rliecin\u0101ti, ka v\u0113laties turpin\u0101t, neiek\u013caujot bildes aprakstu? Bez apraksta bilde neb\u016bs saprotama lietot\u0101jiem ar nesp\u0113ju redz\u0113t, vai lietotajiem, kas lieto teksta p\u0101rl\u016bkus, vai izsl\u0113gu\u0161i bil\u017eu r\u0101d\u012b\u0161anu.","example_img":"Att\u0113la izskata priek\u0161skats",misc:"Da\u017e\u0101di",mouseout:"kad pele \u0101rpus",mouseover:"kad pele virs","alt_image":"Otra bilde","swap_image":"Main\u012bt bildi",map:"Att\u0113lkarte",id:"Id",rtl:"No lab\u0101s uz kreiso",ltr:"No kreis\u0101s uz labo",classes:"Klases",style:"Stils","long_desc":"Saite uz garo aprakstu",langcode:"Valodas kods",langdir:"Valodas virziens","constrain_proportions":"Saglab\u0101t proporcijas",preview:"Priek\u0161skats",title:"Nosaukums",general:"Iestat\u012bjumi","tab_advanced":"Papildiestat\u012bjumi","tab_appearance":"Izskats","tab_general":"Iestat\u012bjumi",width:"Platums",height:"Augstums"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/mk_dlg.js
new file mode 100644
index 000000000..c866cb42d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.advimage_dlg',{"image_list":"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u0441\u043b\u0438\u043a\u0438","align_right":"\u0414\u0435\u0441\u043d\u043e","align_left":"\u041b\u0435\u0432\u043e","align_textbottom":"\u041a\u0440\u0430\u0458 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442","align_texttop":"\u041f\u043e\u0447\u0435\u0442\u043e\u043a \u043d\u0430 \u0442\u0435\u043a\u0441\u0442","align_bottom":"\u041d\u0430\u0458\u0434\u043e\u043b\u0435","align_middle":"\u0421\u0440\u0435\u0434\u0438\u043d\u0430","align_top":"\u041d\u0430\u0458\u0433\u043e\u0440\u0435","align_baseline":"\u041e\u0441\u043d\u043e\u0432\u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430",align:"\u041f\u043e\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435",hspace:"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u043f\u0440\u0430\u0437\u043d\u043e \u043c\u0435\u0441\u0442\u043e",vspace:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u0440\u0430\u0437\u043d\u043e \u043c\u0435\u0441\u0442\u043e",dimensions:"\u0414\u0438\u043c\u0435\u043d\u0437\u0438\u0438",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430/\u0440\u0430\u0431\u043e\u0432\u0438",list:"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u0441\u043b\u0438\u043a\u0438",alt:"\u041e\u043f\u0438\u0441 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430",src:"\u0423\u0420\u041b \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430","dialog_title":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0441\u043b\u0438\u043a\u0430","missing_alt":"\u0414\u0430\u043b\u0438 \u0441\u0442\u0435 \u0441\u0438\u0433\u0443\u0440\u043d\u0438 \u0434\u0435\u043a\u0430 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435 \u0431\u0435\u0437 \u0432\u043a\u043b\u0443\u0447\u0435\u043d \u043e\u043f\u0438\u0441 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430 ? \u0411\u0435\u0437 \u043d\u0435\u0433\u043e, \u0441\u043b\u0438\u043a\u0430\u0442\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u043d\u0435 \u0431\u0438\u0434\u0435 \u0434\u043e\u0441\u0442\u0430\u043f\u043d\u0438 \u0437\u0430 \u043d\u0435\u043a\u043e\u0438 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438 \u0441\u043e \u043f\u043e\u0441\u0435\u0431\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438, \u0438\u043b\u0438 \u0437\u0430 \u043e\u043d\u0438\u0435 \u043a\u043e\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0430\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u0435\u043d \u043f\u0440\u0435\u043b\u0438\u0441\u0442\u0443\u0432\u0430\u0447, \u0438\u043b\u0438 \u043f\u0440\u0435\u043b\u0438\u0441\u0442\u0443\u0432\u0430\u0430\u0442 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0441\u043e \u0438\u0441\u043a\u043b\u0443\u0447\u0435\u043d\u0438 \u0441\u043b\u0438\u043a\u0438.","example_img":"\u041f\u0440\u0435\u0433\u043b\u0435\u0434 \u043d\u0430 \u0438\u0437\u0433\u043b\u0435\u0434\u043e\u0442 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430",misc:"\u0420\u0430\u0437\u043d\u043e",mouseout:"\u0417\u0430 \u0438\u0437\u043b\u0435\u0437 \u043d\u0430 \u0433\u043b\u0443\u0432\u0447\u0435\u0442\u043e \u043e\u0434 \u0441\u043b\u0438\u043a\u0430\u0442\u0430",mouseover:"\u0417\u0430 \u043f\u0440\u0435\u043c\u0438\u043d\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0433\u043b\u0443\u0432\u0447\u0435\u0442\u043e \u043f\u0440\u0435\u043a\u0443 \u0441\u043b\u0438\u043a\u0430\u0442\u0430","alt_image":"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430 \u0441\u043b\u0438\u043a\u0430","swap_image":"\u0417\u0430\u043c\u0435\u043d\u0438\u0458\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430",map:"\u041a\u0430\u0440\u0442\u0430 \u043d\u0430 \u0441\u043b\u0438\u043a\u0438\u0442\u0435",id:"\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0433\u0430\u0446\u0438\u0458\u0430 (Id)",rtl:"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e",ltr:"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e",classes:"\u041a\u043b\u0430\u0441\u0438",style:"\u0421\u0442\u0438\u043b","long_desc":"\u0414\u043e\u043b\u0433 \u043e\u043f\u0438\u0441 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0442",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442",langdir:"\u041d\u0430\u0441\u043e\u043a\u0430 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442","constrain_proportions":"\u0417\u0430\u0434\u0440\u0436\u0438 \u0433\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438\u0442\u0435",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434",title:"\u041d\u0430\u0441\u043b\u043e\u0432",general:"\u041e\u0441\u043d\u043e\u0432\u043d\u043e","tab_advanced":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e","tab_appearance":"\u0418\u0437\u0433\u043b\u0435\u0434","tab_general":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u0438\u043d\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ml_dlg.js
new file mode 100644
index 000000000..a44c7b767
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/mn_dlg.js
new file mode 100644
index 000000000..f2ce00f77
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.advimage_dlg',{"image_list":"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442","align_right":"\u0411\u0430\u0440\u0443\u0443\u043d","align_left":"\u0417\u04af\u04af\u043d","align_textbottom":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u0434\u043e\u043e\u0440","align_texttop":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u0434\u044d\u044d\u0440","align_bottom":"\u0414\u043e\u043e\u0440","align_middle":"\u0414\u0443\u043d\u0434","align_top":"\u0414\u044d\u044d\u0440","align_baseline":"\u041c\u04e9\u0440",align:"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",hspace:"\u0425\u044d\u0432\u0442\u044d\u044d \u0430\u043b\u0441\u043b\u0430\u043b\u0442",vspace:"\u0411\u043e\u0441\u043e\u043e \u0430\u043b\u0441\u043b\u0430\u043b\u0442",dimensions:"\u0425\u044d\u043c\u0436\u044d\u044d\u0441",border:"\u0425\u04af\u0440\u044d\u044d",list:"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442",alt:"\u0422\u0430\u0439\u043b\u0431\u0430\u0440",src:"\u0425\u0430\u044f\u0433","dialog_title":"\u0417\u0443\u0440\u0430\u0433 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0430\u0445","missing_alt":"\u0422\u0430 \u04af\u043d\u044d\u0445\u044d\u044d\u0440 \u0442\u0430\u0439\u043b\u0431\u0430\u0440 \u0445\u0438\u0439\u0445\u0433\u04af\u0439 \u0431\u0430\u0439\u0445\u044b\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443? \u0417\u0430\u0440\u0438\u043c \u0445\u04e9\u0433\u0436\u043b\u0438\u0439\u043d \u0431\u044d\u0440\u0445\u0448\u044d\u044d\u043b\u0442\u044d\u0439 \u044d\u0441\u0432\u044d\u043b \u0431\u0438\u0447\u0432\u044d\u0440 \u0445\u04e9\u0442\u04e9\u0447 \u0430\u0448\u0438\u0433\u043b\u0430\u0436 \u0431\u0443\u0439 \u044d\u0441\u0432\u044d\u043b \u0437\u0443\u0440\u0430\u0433 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0445\u0430\u0430\u0441\u0430\u043d \u0445\u044d\u0440\u044d\u0433\u043b\u044d\u0433\u0447\u0438\u0434 \u0445\u0430\u043d\u0434\u0430\u0445 \u0431\u043e\u043b\u043e\u043c\u0436\u0433\u04af\u0439\u0433 \u0430\u043d\u0445\u0430\u0430\u0440\u043d\u0430 \u0443\u0443.","example_img":"\u041d\u044f\u0433\u0442\u043b\u0430\u043d \u0445\u0430\u0440\u0430\u0445",misc:"\u042f\u043d\u0437 \u0431\u04af\u0440\u0438\u0439\u043d \u0437\u04af\u0439\u043b\u0441",mouseout:"\u0425\u0443\u043b\u0433\u0430\u043d\u0430 \u0433\u0430\u0440\u0430\u0445\u0430\u0434",mouseover:"\u0425\u0443\u043b\u0433\u0430\u043d\u0430 \u043e\u0440\u043e\u0445\u043e\u0434","alt_image":"\u0425\u043e\u0451\u0440\u0434\u043e\u0433\u0447 \u0437\u0443\u0440\u0430\u0433","swap_image":"\u0417\u0443\u0440\u0430\u0433 \u0441\u043e\u043b\u0438\u0445",map:"\u0411\u04af\u0441\u0447\u0438\u043b\u0441\u0430\u043d \u0437\u0443\u0440\u0430\u0433",id:"\u0422\u0422",rtl:"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d",ltr:"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d",classes:"\u0410\u043d\u0433\u0438",style:"\u0424\u043e\u0440\u043c\u0430\u0442","long_desc":"\u0414\u044d\u043b\u0433\u044d\u0440\u044d\u043d\u0433\u04af\u0439 \u0442\u0430\u0439\u043b\u0431\u0430\u0440",langcode:"\u0425\u044d\u043b\u043d\u0438\u0439 \u043a\u043e\u0434",langdir:"\u0411\u0438\u0447\u0433\u0438\u0439\u043d \u0447\u0438\u0433\u043b\u044d\u043b","constrain_proportions":"\u0425\u044d\u043c\u0436\u044d\u044d\u0441",preview:"\u041d\u044f\u0433\u0442\u043b\u0430\u043d \u0445\u0430\u0440\u0430\u0445",title:"\u0413\u0430\u0440\u0447\u0438\u0433",general:"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439","tab_advanced":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d","tab_appearance":"\u0425\u0430\u0440\u0430\u0433\u0434\u0430\u0446","tab_general":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ms_dlg.js
new file mode 100644
index 000000000..07e85382c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.advimage_dlg',{"image_list":"Senarai imej","align_right":"Kanan","align_left":"Kiri","align_textbottom":"Teks bawah","align_texttop":"Teks atas","align_bottom":"Bawah","align_middle":"Tengah","align_top":"Atas","align_baseline":"Garis pangkal",align:"Penyelarian",hspace:"Ruangan ufuk",vspace:"Ruangan tegak",dimensions:"Dimensi",border:"Sempadan",list:"Senarai imej",alt:"Huraian imej",src:"URL imej","dialog_title":"Sisip/sunting imej","missing_alt":"Adakah anda pasti untuk teruskan tanpa masukkan huraian imej? Tanpa huraian, imej mungkin tidak dapat difahami oleh orang yang kurang upaya, orang yang menggunakan pelayaran teks.","example_img":"Penglihatan pratonton imej",misc:"Pelbagai",mouseout:"untuk tetikus di luar",mouseover:"untuk tetikus di atas","alt_image":"Imej alternatif","swap_image":"Tukar imej",map:"Imej map",id:"Id",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",classes:"Kelas-kelas",style:"Gaya","long_desc":"Pautan huraian panjang",langcode:"Kod bahasa",langdir:"Arah bahasa","constrain_proportions":"Kadar tahanan",preview:"Pratonton",title:"Tajuk",general:"Am","tab_advanced":"Lanjutan","tab_appearance":"Penglihatan","tab_general":"Am",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/my_dlg.js
new file mode 100644
index 000000000..6224e993d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.advimage_dlg',{"image_list":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1005\u102c\u101b\u1004\u103a\u1038","align_right":"\u100a\u102c","align_left":"\u1018\u101a\u103a","align_textbottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u1010\u103d\u1004\u103a \u1005\u102c\u101e\u102c\u1038","align_texttop":"\u1011\u102d\u1015\u103a\u1010\u103d\u1004\u103a \u1005\u102c\u101e\u102c\u1038","align_bottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001","align_middle":"\u1021\u101c\u101a\u103a","align_top":"\u1011\u102d\u1015\u103a","align_baseline":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u1019\u103b\u1009\u103a\u1038",align:"\u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f",hspace:"\u1021\u101c\u103b\u103e\u102c\u1038\u101c\u102d\u102f\u1000\u103a \u1000\u103d\u1000\u103a\u101c\u1015\u103a",vspace:"\u1031\u1012\u102b\u1004\u103a\u101c\u102d\u102f\u1000\u103a \u1000\u103d\u1000\u103a\u101c\u1015\u103a",dimensions:"\u1021\u1010\u102d\u102f\u1004\u103a\u1038\u1021\u1011\u103d\u102c\u1019\u103b\u102c\u1038",border:"\u1014\u101a\u103a\u1005\u100a\u103a\u1038",list:"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1005\u102c\u101b\u1004\u103a\u1038",alt:"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1005\u102c\u100a\u103d\u103e\u1014\u103a\u1038",src:"\u101b\u102f\u1015\u103a\u1015\u1036\u102f URL","dialog_title":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","missing_alt":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f\u1005\u102c\u100a\u103d\u103e\u1014\u103a\u1038\u1019\u1015\u102b\u1018\u1032 \u1006\u1000\u103a\u101c\u1000\u103a\u101c\u102f\u1015\u103a\u1031\u1006\u102c\u1004\u103a\u101c\u102d\u102f\u1010\u102c \u1031\u101e\u1001\u103b\u102c\u101b\u1032\u1037\u101c\u102c\u1038? \u1011\u102d\u102f\u101e\u102d\u102f\u1037 \u1031\u1016\u102c\u103a\u103c\u1015\u1001\u103b\u1000\u103a \u1005\u102c\u100a\u103d\u103e\u1014\u103a\u1038 \u1019\u1015\u102b\u101c\u103b\u103e\u1004\u103a \u101b\u102f\u1015\u103a\u1015\u1036\u102f\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1015\u102d\u1010\u103a\u1011\u102c\u1038\u103c\u1015\u102e\u1038 Web \u1000\u102d\u102f\u103c\u1000\u100a\u103a\u1037\u101b\u103e\u102f\u1031\u1014\u1031\u101e\u102c (\u101e\u102d\u102f\u1037) \u1005\u102c\u101e\u102c\u1038 \u1018\u1031\u101b\u102c\u1000\u103a\u1007\u102c\u1000\u102d\u102f \u1021\u101e\u1036\u102f\u1038\u103c\u1015\u102f\u1031\u1014\u1031\u101e\u102c (\u101e\u102d\u102f\u1037) \u1000\u102d\u102f\u101a\u103a\u1001\u1014\u1039\u1013\u102c\u1019\u101e\u1014\u103a\u1005\u103d\u1019\u103a\u1038\u1031\u101e\u102c \u1021\u1001\u103b\u102d\u102f\u1037\u101e\u1036\u102f\u1038\u101e\u1030\u1019\u103b\u102c\u1038 \u1011\u102d\u102f\u101b\u102f\u1015\u103a\u1015\u1036\u102f\u1000\u102d\u102f \u101b\u101a\u1030\u101e\u1036\u102f\u1038\u1005\u103d\u1032\u1014\u102d\u102f\u1004\u103a\u1019\u100a\u103a \u1019\u101f\u102f\u1010\u103a\u1015\u102b\u104b","example_img":"\u1021\u1005\u1019\u103a\u1038\u103c\u1000\u100a\u103a\u1037 \u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1021\u101e\u103d\u1004\u103a\u1021\u103c\u1015\u1004\u103a",misc:"\u1031\u101e\u102c\u1004\u103a\u1038\u1031\u103c\u1015\u102c\u1004\u103a\u1038\u1031\u1011\u103d\u101c\u102c",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"\u1021\u1011\u1030\u1038\u103c\u1015\u102f \u101b\u102f\u1015\u103a\u1015\u1036\u102f","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"\u100a\u102c\u1019\u103e \u1018\u101a\u103a",ltr:"\u1018\u101a\u103a\u1019\u103e \u100a\u102c",classes:"Class \u1019\u103b\u102c\u1038",style:"\u1005\u1010\u102d\u102f\u1004\u103a","long_desc":"\u101b\u103e\u100a\u103a\u101c\u103b\u102c\u1038\u1031\u101e\u102c \u1031\u1016\u102c\u103a\u103c\u1015\u1001\u103b\u1000\u103a \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c",langcode:"\u1018\u102c\u101e\u102c\u1005\u1000\u102c\u1038 \u1000\u102f\u1010\u103a",langdir:"\u1005\u102c\u1031\u101b\u1038\u101e\u102c\u1038\u1019\u103e\u102f \u1025\u102e\u1038\u1010\u100a\u103a\u1001\u103b\u1000\u103a","constrain_proportions":"\u1021\u1001\u103b\u102d\u102f\u1038\u1021\u1005\u102c\u1038 \u1011\u102d\u1014\u103a\u1038\u100a\u102d\u103e",preview:"\u1021\u1005\u1019\u103a\u1038\u103c\u1000\u100a\u103a\u1037",title:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u102e\u1038\u1021\u1019\u100a\u103a",general:"\u1021\u1031\u1011\u103d\u1031\u1011\u103d","tab_advanced":"\u1021\u1011\u1030\u1038","tab_appearance":"\u1021\u101e\u103d\u1004\u103a\u1021\u103c\u1015\u1004\u103a","tab_general":"\u1021\u1031\u1011\u103d\u1031\u1011\u103d",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nb_dlg.js
new file mode 100644
index 000000000..c8f843797
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.advimage_dlg',{"image_list":"Bildeliste","align_right":"H\u00f8yre","align_left":"Venstre","align_textbottom":"Tekst bunn","align_texttop":"Tekst topp","align_bottom":"Bunn","align_middle":"Midtstilt","align_top":"Topp","align_baseline":"Grunnlinje",align:"Justering",hspace:"Horisontal avstand",vspace:"Vertikal avstand",dimensions:"Dimensjoner",border:"Ramme",list:"Bildeliste",alt:"Bildebeskrivelse",src:"Bildets URL","dialog_title":"Sett inn / endre bilde","missing_alt":"Er du sikker p\u00e5 at du vil fortsette uten \u00e5 sette inn en beskrivelse av bildet? Uten beskrivelse vil bildet ikke gi mening for enkelte funksjonshemmede eller for personer som bruker en nettleser med bildevisning avsl\u00e5tt.","example_img":"Utseende Forh\u00e5ndsvisning bilde",misc:"Annet",mouseout:"for musepeker utenfor",mouseover:"for musepeker p\u00e5","alt_image":"Alternativt bilde","swap_image":"Bytt bilde",map:"Bildekart",id:"Id",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",classes:"Klasser",style:"Stil","long_desc":"Lang beskrivelse",langcode:"Spr\u00e5kkode",langdir:"Skriftretning","constrain_proportions":"Behold st\u00f8rrelsesforhold",preview:"Forh\u00e5ndsvisning",title:"Tittel",general:"Generelt","tab_advanced":"Avansert","tab_appearance":"Utseende","tab_general":"Generelt",width:"Bredde",height:"H\u00f8yde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nl_dlg.js
new file mode 100644
index 000000000..ea7272812
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.advimage_dlg',{"image_list":"Lijst","align_right":"Rechts","align_left":"Links","align_textbottom":"Onderkant tekst","align_texttop":"Bovenkant tekst","align_bottom":"Onder","align_middle":"Midden","align_top":"Boven","align_baseline":"Basislijn",align:"Uitlijning",hspace:"Horizontale ruimte",vspace:"Verticale ruimte",dimensions:"Afmetingen",border:"Rand",list:"Lijst",alt:"Beschrijving",src:"Bestand/URL","dialog_title":"Afbeelding invoegen/bewerken","missing_alt":"Wilt u de afbeelding zonder beschrijving invoegen? De afbeelding wordt dan mogelijk niet opgemerkt door mensen met een visuele handicap, of mensen die zonder afbeeldingen browsen.","example_img":"Voorbeeldweergave",misc:"Diversen",mouseout:"Bij muis uit",mouseover:"Bij muis over","alt_image":"Alternatieve afbeeldingen","swap_image":"Afbeelding wisselen",map:"Afbeeldingsplattegrond",id:"Id",rtl:"Van rechts naar links",ltr:"Van links naar rechts",classes:"Klasses",style:"Stijl","long_desc":"Uitgebreide beschrijving",langcode:"Taalcode",langdir:"Taalrichting","constrain_proportions":"Verhouding behouden",preview:"Voorbeeld",title:"Titel",general:"Algemeen","tab_advanced":"Geavanceerd","tab_appearance":"Weergave","tab_general":"Algemeen",width:"Breedte",height:"Hoogte"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nn_dlg.js
new file mode 100644
index 000000000..2c0b2caad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.advimage_dlg',{"image_list":"Liste med bilete","align_right":"H\u00f8gre","align_left":"Venstre","align_textbottom":"Tekst botn","align_texttop":"Tekst topp","align_bottom":"Botn","align_middle":"Midtstilt","align_top":"Topp","align_baseline":"Basislinje",align:"Justering",hspace:"Horisontal avstand",vspace:"Vertikal avstand",dimensions:"Dimensjonar",border:"Ramme",list:"Bileteliste",alt:"Bileteomtale",src:"Bilete-URL","dialog_title":"Set inn / endre bilete","missing_alt":"Er du sikker p\u00e5 at du vil fortsetje utan \u00e5 setje inn ei omtale av biletet? Utan omtale vil biletet ikkje gje meining for enkelte funksjonshemma eller for personar som bruker ein nettlesar med biletvisinga avsl\u00e5tt.","example_img":"Sj\u00e5 f\u00f8rebels utkast av bilete",misc:"Anna",mouseout:"for musepeikar utanfor",mouseover:"for musepeikar over","alt_image":"Alternativt bilete","swap_image":"Byt bilete",map:"Biletekart",id:"Id",rtl:"H\u00f8gre mot venstre",ltr:"Venstre mot h\u00f8gre",classes:"Klasser",style:"Stil","long_desc":"Lang omtale",langcode:"Spr\u00e5kkode",langdir:"Skriftretning","constrain_proportions":"Behald proporsjonar",preview:"Sj\u00e5 f\u00f8rebels utkast",title:"Tittel",general:"Generelt","tab_advanced":"Avansert","tab_appearance":"Utsj\u00e5nad","tab_general":"Generelt",width:"Breidde",height:"H\u00f8gde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/no_dlg.js
new file mode 100644
index 000000000..b8227b44b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.advimage_dlg',{"image_list":"Liste over bilder","align_right":"H\u00f8yre","align_left":"Venstre","align_textbottom":"Tekst bunn","align_texttop":"Tekst topp","align_bottom":"Bunn","align_middle":"Midtstilt","align_top":"Topp","align_baseline":"Basislinje",align:"Justering",hspace:"Horisontal avstand",vspace:"Vertikal avstand",dimensions:"Dimensjoner",border:"Ramme",list:"Bildeliste",alt:"Bildebeskrivelse",src:"Bilde URL","dialog_title":"Sett inn/editer bilde","missing_alt":"Er du sikker du vil fortsette uten \u00e5 sette inn bildebeskrivelse? Uten beskrivelse vil ikke bildet gi mening for enkelte funksjonshemmde eller personer som bruker nettleser med avsl\u00e5tt bildevising.","example_img":"Utseende forh\u00e5ndsvisning",misc:"Diverse",mouseout:"for musepeker utenfor",mouseover:"for musepeker over","alt_image":"Alternativt bilde","swap_image":"Bytt bilde",map:"Bildekart",id:"Id",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",classes:"Klasse",style:"Stil","long_desc":"Lang beskrivelse",langcode:"Spr\u00e5k kode",langdir:"Skriftretning","constrain_proportions":"Behold proporsjoner",preview:"Forh\u00e5ndsvisning",title:"Tittel",general:"Generelt","tab_advanced":"Avansert","tab_appearance":"Utseende","tab_general":"Generelt",width:"Bredde",height:"H\u00f8yde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/pl_dlg.js
new file mode 100644
index 000000000..c32f718ac
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.advimage_dlg',{"image_list":"Lista obrazk\u00f3w","align_right":"Prawy","align_left":"Lewy","align_textbottom":"Tekst dolny","align_texttop":"Tekst g\u00f3rny","align_bottom":"Dolny","align_middle":"\u015arodkowy","align_top":"G\u00f3rny","align_baseline":"G\u0142\u00f3wna linia",align:"Wyr\u00f3wnanie",hspace:"Odst\u0119p poziomy",vspace:"Odst\u0119p pionowy",dimensions:"Rozmiary",border:"Obramowanie",list:"Lista obrazk\u00f3w",alt:"Opis obrazka",src:"URL obrazka","dialog_title":"Wklej/edytuj obraz","missing_alt":"Czy jeste\u015b pewien, \u017ce chcesz kontynuowa\u0107 bez opisu obrazka? Obrazek bez opisu mo\u017ce nie by\u0107 dost\u0119pny dla u\u017cytkownik\u00f3w u\u017cywaj\u0105cych tekstowe przegl\u0105darki lub przegl\u0105daj\u0105cych stron\u0119 z wy\u0142\u0105czonymi obrazkami.","example_img":"Podgl\u0105d wygl\u0105du obrazka",misc:"R\u00f3\u017cne",mouseout:"dla mouseout",mouseover:"dla mouseover","alt_image":"alternatywny obrazek","swap_image":"Zamiana obrazka",map:"Mapa obrazu",id:"Id",rtl:"Z prawej do lewej",ltr:"Z lewej do prawej",classes:"Klasy",style:"Styl","long_desc":"D\u0142ugi opis linku",langcode:"Kod j\u0119zyka",langdir:"Kierunek j\u0119zyka","constrain_proportions":"Zachowaj proporcje",preview:"Podgl\u0105d",title:"Tytu\u0142",general:"Og\u00f3lne","tab_advanced":"Zaawansowane","tab_appearance":"Wygl\u0105d","tab_general":"Og\u00f3lne",width:"Szeroko\u015b\u0107",height:"Wysoko\u015b\u0107"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ps_dlg.js
new file mode 100644
index 000000000..58852bc19
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/pt_dlg.js
new file mode 100644
index 000000000..513319ffc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.advimage_dlg',{"image_list":"Lista de imagens","align_right":"Direita","align_left":"Esquerda","align_textbottom":"Base do texto","align_texttop":"Topo do texto","align_bottom":"Abaixo","align_middle":"Meio","align_top":"Topo","align_baseline":"Sobre a linha de texto",align:"Alinhamento",hspace:"Espa\u00e7o horizontal",vspace:"Espa\u00e7o vertical",dimensions:"Dimens\u00f5es",border:"Limite",list:"Lista de imagens",alt:"Descri\u00e7\u00e3o da imagem",src:"Endere\u00e7o da imagem","dialog_title":"Inserir/editar imagem","missing_alt":"Tem certeza que deseja continuar sem acrescentar uma descri\u00e7\u00e3o \u00e0 imagem? (Isto pode gerar problemas de acessibilidade em alguns navegadores)","example_img":"Pr\u00e9-Visualiza\u00e7\u00e3o",misc:"Misto",mouseout:"mouseout",mouseover:"mouseover","alt_image":"Imagem alternativa","swap_image":"Trocar imagem",map:"Mapa de imagem",id:"Id",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",classes:"Classes",style:"Estilo","long_desc":"Descri\u00e7\u00e3o extensa",langcode:"C\u00f3digo do idioma",langdir:"Dire\u00e7\u00e3o do texto","constrain_proportions":"Manter propor\u00e7\u00f5es",preview:"Pr\u00e9-Visualiza\u00e7\u00e3o",title:"T\u00edtulo",general:"Geral","tab_advanced":"Avan\u00e7ado","tab_appearance":"Apar\u00eancia","tab_general":"Geral",width:"Largura",height:"Altura"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ro_dlg.js
new file mode 100644
index 000000000..d8d4ef956
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.advimage_dlg',{"image_list":"List\u0103 de imagini","align_right":"Dreapta","align_left":"St\u00e2nga","align_textbottom":"Textul jos","align_texttop":"Textul sus","align_bottom":"Jos","align_middle":"La mijloc","align_top":"Sus","align_baseline":"Baseline",align:"Aliniere",hspace:"Spa\u021biu orizontal",vspace:"Spa\u021biu vertical",dimensions:"Dimensiuni",border:"Bordur\u0103",list:"List\u0103 imagini",alt:"Descriere imagine",src:"URL imagine","dialog_title":"Inserare/editare imagine","missing_alt":"Sigur vrei s\u0103 continui f\u0103r\u0103 s\u0103 introduci o descriere a imaginii? F\u0103r\u0103 aceasta, imaginea ar putea fi inaccesibil\u0103 anumitor utilizatori cu dizabilit\u0103\u021bi sau acelora care folosesc un navigator text sau cu imaginile dezactivate.","example_img":"Imagine mic\u0103",misc:"Diverse",mouseout:"Pentru maus \u00een afar\u0103",mouseover:"Pentru maus deasupra","alt_image":"Imagine alternativ\u0103","swap_image":"Schimb\u0103 imaginea",map:"Hart\u0103 imagine",id:"Id",rtl:"De la dreapta la st\u00e2nga",ltr:"De la st\u00e2nga la dreapta",classes:"Clase",style:"Stil","long_desc":"Descriere leg\u0103tur\u0103",langcode:"Cod limb\u0103",langdir:"Direc\u021bie limb\u0103","constrain_proportions":"Men\u021bine propor\u021biile",preview:"Previzualizare",title:"Titlu",general:"General","tab_advanced":"Avansat","tab_appearance":"Afi\u0219are","tab_general":"General",width:"L\u0103\u021bime",height:"\u00cen\u0103l\u021bime"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ru_dlg.js
new file mode 100644
index 000000000..3e341d1f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.advimage_dlg',{"image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043b\u0438\u043d\u0438\u0438",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",hspace:"\u0413\u043e\u0440\u0438\u0437. \u043e\u0442\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442. \u043e\u0442\u0441\u0442\u0443\u043f",dimensions:"\u0420\u0430\u0437\u043c\u0435\u0440",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430",list:"\u0421\u043f\u0438\u0441\u043e\u043a",alt:"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",src:"\u0410\u0434\u0440\u0435\u0441","dialog_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","missing_alt":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0431\u0435\u0437 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f? \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0438\u043b\u0438 \u0442\u0435\u043c, \u043a\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0438\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0430\u0439\u0442\u044b \u0441 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u043c\u0438.","example_img":"\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",misc:"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",mouseout:"\u0412 \u043f\u043e\u043a\u043e\u0435",mouseover:"\u041f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438","alt_image":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","swap_image":"\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",map:"\u041a\u0430\u0440\u0442\u0430 \u0441\u0441\u044b\u043b\u043e\u043a",id:"\u0418\u043c\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",classes:"\u041a\u043b\u0430\u0441\u0441\u044b",style:"\u0421\u0442\u0438\u043b\u044c","long_desc":"\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430","constrain_proportions":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",preview:"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440",title:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",general:"\u041e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","tab_advanced":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","tab_appearance":"\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435","tab_general":"\u041e\u0431\u0449\u0435\u0435",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u044b\u0441\u043e\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sc_dlg.js
new file mode 100644
index 000000000..eefb93fcc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.advimage_dlg',{"image_list":"\u56fe\u7247\u5217\u8868","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u4e0b\u65b9","align_middle":"\u5c45\u4e2d","align_top":"\u4e0a\u65b9","align_baseline":"\u57fa\u7ebf",align:"\u5bf9\u9f50\u65b9\u5f0f",hspace:"\u5782\u76f4\u95f4\u8ddd",vspace:"\u6c34\u51c6\u95f4\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u5217\u8868",alt:"\u56fe\u7247\u8bf4\u660e",src:"\u56fe\u7247\u7f51\u5740","dialog_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","missing_alt":"\u8bf7\u95ee\u662f\u5426\u786e\u5b9a\u4e0d\u4e3a\u56fe\u7247\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff1f\u82e5\u6ca1\u6709\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff0c\u5f53\u7528\u6237\u4f7f\u7528\u4e0d\u8bfb\u5165\u56fe\u7247\u6216\u6587\u5b57\u4f53\u7684\u6d41\u89c8\u5668\u65f6\uff0c\u5c06\u4f1a\u770b\u4e0d\u5230\u8fd9\u4e2a\u56fe\u7247\u3002 ","example_img":"\u9884\u89c8\u56fe\u7247",misc:"\u5176\u4ed6",mouseout:"\u6ed1\u9f20\u79fb\u51fa\u56fe\u7247",mouseover:"\u6ed1\u9f20\u79fb\u5165\u56fe\u7247","alt_image":"\u66ff\u6362\u56fe\u7247","swap_image":"\u5bf9\u6362\u56fe\u7247",map:"\u56fe\u7247\u5730\u56fe",id:"Id",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",classes:"\u7c7b\u578b",style:"\u6837\u5f0f","long_desc":"\u957f\u63cf\u8ff0\u8fde\u7ed3",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u67e5\u627e",general:"\u4e00\u822c","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u4e00\u822c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/se_dlg.js
new file mode 100644
index 000000000..2fa54bda7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.advimage_dlg',{"image_list":"Bildlista","align_right":"V\u00e4nster","align_left":"H\u00f6ger","align_textbottom":"Botten av texten","align_texttop":"Toppen av texten","align_bottom":"Botten","align_middle":"Mitten","align_top":"Toppen","align_baseline":"Baslinje",align:"Justering",hspace:"Horisontalrymd",vspace:"Vertikalrymd",dimensions:"Dimensioner",border:"Ram",list:"Bildlista",alt:"Bildens beskrivning",src:"Bildens URL","dialog_title":"Infoga/redigera bild","missing_alt":"Vill du forts\u00e4tta utan bildbeskrivning. Icke grafiska webbl\u00e4sare kommer inte kunna tolka bilden f\u00f6r anv\u00e4ndaren.","example_img":"Exempelbild",misc:"\u00d6vrigt",mouseout:"vid musen utanf\u00f6r",mouseover:"vid musen ovanf\u00f6r","alt_image":"Alternativbild","swap_image":"Utbytningsbild",map:"L\u00e4nkkarta",id:"Id",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",classes:"Klasser",style:"Stil","long_desc":"L\u00e5ng beskrivning",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning","constrain_proportions":"Bibeh\u00e5ll proportionerna",preview:"F\u00f6rhandsvisning",title:"Titel",general:"Generellt","tab_advanced":"Avancerat","tab_appearance":"Utseende","tab_general":"Generellt",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/si_dlg.js
new file mode 100644
index 000000000..7eac6ba49
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sk_dlg.js
new file mode 100644
index 000000000..2be48c336
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.advimage_dlg',{"image_list":"Zoznam obr\u00e1zkov","align_right":"Vpravo","align_left":"V\u013eavo","align_textbottom":"So spodkom riadku","align_texttop":"S vrcholom riadku","align_bottom":"Dole","align_middle":"Na stred riadku","align_top":"Hore","align_baseline":"Na z\u00e1klad\u0148u",align:"Zarovnanie",hspace:"Horizont\u00e1lne odsadenie",vspace:"Vertik\u00e1lne odsadenie",dimensions:"Rozmery",border:"Or\u00e1movanie",list:"Zoznam obr\u00e1zkov",alt:"Popis obr\u00e1zku",src:"URL obr\u00e1zka","dialog_title":"Vlo\u017ei\u0165/upravi\u0165 obr\u00e1zok","missing_alt":"Naozaj chcete pokra\u010dova\u0165 bez vlo\u017een\u00e9ho popisu obr\u00e1zka? Bez popisu m\u00f4\u017ee by\u0165 obr\u00e1zok nepr\u00edstupn\u00fd u\u017e\u00edvate\u013eom so zrakov\u00fdm postihnut\u00edm, u\u017e\u00edvate\u013eom textov\u00fdch prehliada\u010dov alebo u\u017e\u00edvate\u013eom, ktor\u00ed maj\u00fa vypnut\u00e9 zobrazovanie obr\u00e1zkov.","example_img":"Pr\u00edklad obr\u00e1zka",misc:"R\u00f4zne",mouseout:"Po odjazden\u00ed my\u0161i",mouseover:"Pri nabehnut\u00ed my\u0161i","alt_image":"Alternat\u00edvny obr\u00e1zok","swap_image":"Prepnutie obr\u00e1zka",map:"Obr\u00e1zkov\u00e1 mapa",id:"ID",rtl:"Sprava do\u013eava",ltr:"Z\u013eava doprava",classes:"Triedy",style:"\u0160t\u00fdl","long_desc":"Dlh\u00fd popis",langcode:"K\u00f3d jazyka",langdir:"Smer textu","constrain_proportions":"Zachova\u0165 pomer str\u00e1n",preview:"N\u00e1h\u013ead",title:"Titulok",general:"Obecn\u00e9 parametre","tab_advanced":"Roz\u0161\u00edren\u00e9","tab_appearance":"Vzh\u013ead","tab_general":"Obecn\u00e9",width:"\u0160\u00edrka",height:"V\u00fd\u0161ka"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sl_dlg.js
new file mode 100644
index 000000000..b2e990d11
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.advimage_dlg',{"image_list":"Seznam slik","align_right":"desno, plavajo\u010de","align_left":"levo, plavajo\u010de","align_textbottom":"dno besedila","align_texttop":"vrh besedila","align_bottom":"dno","align_middle":"sredina","align_top":"vrh","align_baseline":"osnovna \u010drta",align:"Poravnava",hspace:"Prostor le/de",vspace:"Prostor zg/sp",dimensions:"Dimenzije",border:"Obroba",list:"Seznam slik",alt:"Opis slike",src:"Naslov URL slike","dialog_title":"Vstavi/uredi sliko","missing_alt":"Zares \u017eelite nadaljevati, brez da bi dolo\u010dili opis slike? Brez njega slika nekaterim uporabnikom ne bo na voljo (izklopljen prikaz slik, tekstni brskalnik ali ljudje s slab\u0161im vidom).","example_img":"Predogled izgleda",misc:"Razno",mouseout:"pri mi\u0161ki izven",mouseover:"pri mi\u0161ki nad","alt_image":"Nadomestna slika","swap_image":"Zamenjava slike",map:"Karta slike",id:"Id",rtl:"Od desne proti levi",ltr:"Od leve proti desni",classes:"Razredi",style:"Slog","long_desc":"Povezava do opisa",langcode:"Koda jezika",langdir:"Smer jezika","constrain_proportions":"Zakleni razmerje",preview:"Predogled",title:"Naslov",general:"Splo\u0161no","tab_advanced":"Napredno","tab_appearance":"Izgled","tab_general":"Splo\u0161no",width:"\u0160irina",height:"Vi\u0161ina"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sq_dlg.js
new file mode 100644
index 000000000..780605269
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.advimage_dlg',{"image_list":"Lista e fotove","align_right":"Djathtas","align_left":"Majtas","align_textbottom":"Posht\u00eb tekstit","align_texttop":"Sip\u00ebr tekstit","align_bottom":"Fund","align_middle":"Mes","align_top":"Krye","align_baseline":"Vij\u00eb fundore",align:"Drejtimi",hspace:"Hap\u00ebsira horizontale",vspace:"Hap\u00ebsira vertikale",dimensions:"P\u00ebrmasat",border:"Korniza",list:"Lista e fotove",alt:"P\u00ebrshkrimi i fotos",src:"URL e fotos","dialog_title":"Fut/edito foto","missing_alt":"Jeni t\u00eb sigurt q\u00eb doni t\u00eb vazhdoni pa p\u00ebrfshir\u00eb nj\u00eb p\u00ebrshkrim alternativ? Pa t\u00eb, foto mund t\u00eb jet\u00eb e pa aksesueshme nga njer\u00ebz me shikim t\u00eb kufizuar, q\u00eb p\u00ebrdorin shfletues q\u00eb nuk i shfaqin fotot apo i kan\u00eb \u00e7aktivizuar ato.","example_img":"Paraqitje e fotos",misc:"T\u00eb Ndryshme",mouseout:"n\u00eb mouse-in jasht\u00eb",mouseover:"n\u00eb mouse-in sip\u00ebr","alt_image":"P\u00ebrshkrimi alternativ","swap_image":"Nd\u00ebrro foto",map:"Harta e fotos",id:"Id",rtl:"Djathtas-Majtas",ltr:"Majtas-Djathtas",classes:"Klasat",style:"Stili","long_desc":"Lidhja e p\u00ebrshkrimit t\u00eb gjat\u00eb",langcode:"Kodi i gjuh\u00ebs",langdir:"Drejtimi i gjuh\u00ebs","constrain_proportions":"Ruaj raportet",preview:"Paraqitje",title:"Titulli",general:"T\u00eb P\u00ebrgjithshme","tab_advanced":"T\u00eb Avancuara","tab_appearance":"Pamja","tab_general":"T\u00eb P\u00ebrgjithshme",width:"Gjer\u00ebsia",height:"Gjat\u00ebsia"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sr_dlg.js
new file mode 100644
index 000000000..49c197aba
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.advimage_dlg',{"image_list":"Slika (sa liste)","align_right":"Desno","align_left":"Levo","align_textbottom":"Dno teksta","align_texttop":"Vrh teksta","align_bottom":"Dole","align_middle":"Sredina","align_top":"Gore","align_baseline":"Osnovna linija",align:"Poravnavanje",hspace:"Horizontalni razmak",vspace:"Vertikalni razmak",dimensions:"Dimenzije",border:"Ivice",list:"Slika (sa liste)",alt:"Opis slike",src:"URL slike","dialog_title":"Umetni/Uredi sliku","missing_alt":"Da li ste sigurni da \u017eelite da izostavite opis slike? Slika mo\u017ee biti nedostupna ljudima sa pote\u0161ko\u0107ama ili onima koji koriste web \u010dita\u010de bez prikaza slika.","example_img":"Izgled preliminarnog prikaza slike",misc:"Razno",mouseout:"Za odlazak mi\u0161a sa slike",mouseover:"Za dolazak mi\u0161a na sliku","alt_image":"Alternativna slika","swap_image":"Interaktivna slika",map:"Mapa slike",id:"Id",rtl:"Zdesna nalevo",ltr:"Sleva nadesno",classes:"Klase",style:"Stil","long_desc":"Link ka du\u017eem opisu",langcode:"Kod jezika",langdir:"Smer jezika","constrain_proportions":"Zadr\u017ei proporcije",preview:"Preliminarni prikaz",title:"Naslov",general:"Osnovno","tab_advanced":"Napredno","tab_appearance":"Izgled","tab_general":"Osnovno",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sv_dlg.js
new file mode 100644
index 000000000..af1e61c55
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.advimage_dlg',{"image_list":"Bildlista","align_right":"H\u00f6ger","align_left":"V\u00e4nster","align_textbottom":"Botten av texten","align_texttop":"Toppen av texten","align_bottom":"Botten","align_middle":"Mitten","align_top":"Toppen","align_baseline":"Baslinje",align:"Justering",hspace:"Horisontalrymd",vspace:"Vertikalrymd",dimensions:"Dimensioner",border:"Ram",list:"Bildlista",alt:"Bildens beskrivning",src:"Bildens URL","dialog_title":"Infoga/redigera bild","missing_alt":"Vill du forts\u00e4tta utan bildbeskrivning?\nIcke grafiska webbl\u00e4sare kommer inte att kunna tolka bilden f\u00f6r anv\u00e4ndaren.","example_img":"Exempelbild",misc:"\u00d6vrigt",mouseout:"vid musen utanf\u00f6r",mouseover:"vid musen ovanf\u00f6r","alt_image":"Alternativbild","swap_image":"Utbytningsbild",map:"L\u00e4nkkarta",id:"Id",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",classes:"Klasser",style:"Stil","long_desc":"L\u00e5ng beskrivning",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning","constrain_proportions":"Bibeh\u00e5ll proportionerna",preview:"F\u00f6rhandsvisning",title:"Titel",general:"Generellt","tab_advanced":"Avancerat","tab_appearance":"Utseende","tab_general":"Generellt",width:"Bredd",height:"H\u00f6jd"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sy_dlg.js
new file mode 100644
index 000000000..ca284a4c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.advimage_dlg',{"image_list":"Image List","align_right":"Right","align_left":"Left","align_textbottom":"Text Bottom","align_texttop":"Text Top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal Space",vspace:"Vertical Space",dimensions:"Dimensions",border:"Border",list:"Image List",alt:"Image Description",src:"Image URL","dialog_title":"Insert/Edit Image","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.","example_img":"Appearance Preview Image",misc:"Miscellaneous",mouseout:"For Mouse Out",mouseover:"For Mouse Over","alt_image":"Alternative Image","swap_image":"Swap Image",map:"Image Map",id:"ID",rtl:"Right to Left",ltr:"Left to Right",classes:"Classes",style:"Style","long_desc":"Long Description Link",langcode:"Language Code",langdir:"Language Direction","constrain_proportions":"Constrain Proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ta_dlg.js
new file mode 100644
index 000000000..efb4f91f0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/te_dlg.js
new file mode 100644
index 000000000..5e52a7950
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/th_dlg.js
new file mode 100644
index 000000000..f8dff4fab
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.advimage_dlg',{"image_list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e23\u0e39\u0e1b","align_right":"\u0e02\u0e27\u0e32","align_left":"\u0e0b\u0e49\u0e32\u0e22","align_textbottom":"\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e2d\u0e22\u0e39\u0e48\u0e25\u0e48\u0e32\u0e07","align_texttop":"\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e19","align_bottom":"\u0e25\u0e48\u0e32\u0e07","align_middle":"\u0e01\u0e25\u0e32\u0e07","align_top":"\u0e1a\u0e19","align_baseline":"\u0e40\u0e2a\u0e49\u0e19\u0e1e\u0e37\u0e49\u0e19",align:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e08\u0e31\u0e14\u0e27\u0e32\u0e07",hspace:"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19",vspace:"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07",dimensions:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07",border:"\u0e01\u0e23\u0e2d\u0e1a",list:"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e23\u0e39\u0e1b",alt:"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e23\u0e39\u0e1b",src:"\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e23\u0e39\u0e1b","dialog_title":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 image","missing_alt":"\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e14\u0e33\u0e40\u0e19\u0e34\u0e19\u0e01\u0e32\u0e23\u0e15\u0e48\u0e2d\u0e42\u0e14\u0e22\u0e44\u0e21\u0e48\u0e43\u0e2a\u0e48\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e23\u0e39\u0e1b\u0e20\u0e32\u0e1e ? \u0e01\u0e32\u0e23\u0e43\u0e2a\u0e48\u0e04\u0e33\u0e2d\u0e18\u0e34\u0e1a\u0e32\u0e22\u0e23\u0e39\u0e1b\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e1c\u0e39\u0e49\u0e1e\u0e34\u0e01\u0e32\u0e23\u0e17\u0e32\u0e07\u0e2a\u0e32\u0e22\u0e15\u0e32\u0e2a\u0e32\u0e21\u0e32\u0e23\u0e16\u0e23\u0e39\u0e49\u0e44\u0e14\u0e49\u0e27\u0e48\u0e32\u0e23\u0e39\u0e1b\u0e04\u0e38\u0e13\u0e04\u0e37\u0e2d\u0e23\u0e39\u0e1b\u0e2d\u0e30\u0e44\u0e23","example_img":"\u0e14\u0e39\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07\u0e25\u0e31\u0e01\u0e29\u0e13\u0e30\u0e02\u0e2d\u0e07\u0e23\u0e39\u0e1b",misc:"\u0e40\u0e1a\u0e47\u0e14\u0e40\u0e15\u0e25\u0e47\u0e14",mouseout:"\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2d\u0e32\u0e40\u0e21\u0e49\u0e32\u0e2a\u0e4c\u0e2d\u0e2d\u0e01",mouseover:"\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2d\u0e32\u0e40\u0e21\u0e49\u0e32\u0e2a\u0e4c\u0e0a\u0e35\u0e49","alt_image":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e23\u0e39\u0e1b","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22",ltr:"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32",classes:"\u0e04\u0e25\u0e32\u0e2a",style:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","long_desc":"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c",langcode:"\u0e42\u0e04\u0e49\u0e14\u0e20\u0e32\u0e29\u0e32",langdir:"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e2d\u0e48\u0e32\u0e19","constrain_proportions":"\u0e04\u0e07\u0e2a\u0e31\u0e14\u0e2a\u0e48\u0e27\u0e19",preview:"\u0e14\u0e39\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07",title:"\u0e0a\u0e37\u0e48\u0e2d",general:"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","tab_advanced":"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","tab_appearance":"\u0e25\u0e31\u0e01\u0e29\u0e13\u0e30","tab_general":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tn_dlg.js
new file mode 100644
index 000000000..03785a646
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tr_dlg.js
new file mode 100644
index 000000000..0a1868d1e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.advimage_dlg',{"image_list":"Resim listesi","align_right":"Sa\u011f","align_left":"Sol","align_textbottom":"Metin altta","align_texttop":"Metin \u00fcstte","align_bottom":"Alt","align_middle":"Orta","align_top":"\u00dcst","align_baseline":"Taban hizas\u0131",align:"Hizalama",hspace:"Yatay bo\u015fluk",vspace:"Dikey bo\u015fluk",dimensions:"Boyutlar",border:"Kenarl\u0131k",list:"Resim listesi",alt:"Resim a\u00e7\u0131klamas\u0131",src:"Resmin URL\'si","dialog_title":"Resim ekle/d\u00fczenle","missing_alt":"Resim a\u00e7\u0131klamas\u0131 girmeden devam etmek istedi\u011finize emini misiniz? Bu olmadan taray\u0131c\u0131da resimleri kapatanlar, metin bazl\u0131 taray\u0131c\u0131lar veya resim baz\u0131 engelli kullan\u0131c\u0131lar g\u00f6remeyeceklerdir.","example_img":"Resim \u00f6nizleme g\u00f6r\u00fcn\u00fcm\u00fc",misc:"\u00c7e\u015fitli",mouseout:"Fare d\u0131\u015f\u0131ndayken",mouseover:"Fare \u00fczerindeyken","alt_image":"Alternatif resim","swap_image":"Resmi takas et",map:"Resim haritas\u0131",id:"Id",rtl:"Soldan sa\u011fa",ltr:"Sa\u011fdan sola",classes:"S\u0131n\u0131fla",style:"Stil","long_desc":"Uzun a\u00e7\u0131klamal\u0131 ba\u011flant\u0131",langcode:"Dil kodu",langdir:"Dil y\u00f6n\u00fc","constrain_proportions":"Oran\u0131 s\u0131n\u0131rla",preview:"\u00d6nizleme",title:"Ba\u015fl\u0131k",general:"Genel","tab_advanced":"Geli\u015fmi\u015f","tab_appearance":"G\u00f6r\u00fcn\u00fcm","tab_general":"Genel",width:"Geni\u015flik",height:"Y\u00fckseklik"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tt_dlg.js
new file mode 100644
index 000000000..023769746
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.advimage_dlg',{"image_list":"\u5716\u7247\u6e05\u55ae","align_right":"\u5c45\u53f3","align_left":"\u5c45\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u5e95\u90e8","align_middle":"\u4e2d\u90e8","align_top":"\u9802\u90e8","align_baseline":"\u57fa\u7dda",align:"\u5c0d\u9f4a\u65b9\u5f0f",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u908a\u6846",list:"\u5716\u7247\u6e05\u55ae",alt:"\u5716\u7247\u8aaa\u660e",src:"\u5716\u7247\u4f4d\u5740","dialog_title":"\u63d2\u5165/\u7de8\u8f2f \u5716\u7247","missing_alt":" \u662f\u5426\u4e0d\u7232\u5716\u7247\u52a0\u5165\u8aaa\u660e\u6587\u5b57\uff0c\u5982\u679c\u4e0d\u52a0\u5165\u8aaa\u660e\u6587\u5b57\uff0c\u5c07\u5c0e\u81f4\u4e0d\u652f\u63f4\u5716\u7247\u7684\u700f\u89bd\u5668\u5ffd\u7565\u672c\u5167\u5bb9","example_img":"\u9810\u89bd\u5716\u7247",misc:"\u5176\u4ed6",mouseout:"\u6ed1\u9f20\u79fb\u51fa",mouseover:"\u6ed1\u9f20\u5283\u904e","alt_image":"\u4ea4\u66ff\u5716\u7247","swap_image":"\u5207\u63db\u5716\u7247",map:"\u5716\u7247\u71b1\u9ede",id:"Id",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",classes:"\u6a23\u5f0f\u985e",style:"\u6a23\u5f0f","long_desc":"\u63cf\u8ff0",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",preview:"\u9810\u89bd",title:"\u641c\u5c0b",general:"\u57fa\u672c","tab_advanced":"\u9032\u968e","tab_appearance":"\u5916\u89c0","tab_general":"\u57fa\u672c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tw_dlg.js
new file mode 100644
index 000000000..25d4d8665
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.advimage_dlg',{"image_list":"\u5716\u7247\u6e05\u55ae","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u9760\u4e0b","align_middle":"\u7f6e\u4e2d","align_top":"\u9760\u4e0a","align_baseline":"\u57fa\u6e96\u7dda",align:"\u5c0d\u9f4a\u65b9\u5f0f",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u908a\u6846",list:"\u5716\u7247\u6e05\u55ae",alt:"\u5716\u7247\u8aaa\u660e",src:"\u5716\u7247URL","dialog_title":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","missing_alt":"\u5716\u7247\u6c92\u6709\u8aaa\u660e\u6587\u5b57\uff0c\u662f\u5426\u7e7c\u7e8c\uff1f","example_img":"\u5716\u7247\u5916\u89c0\u9810\u89bd",misc:"\u5176\u5b83",mouseout:"\u6ed1\u9f20\u79fb\u51fa",mouseover:"\u6ed1\u9f20\u79fb\u5165","alt_image":"\u53d6\u4ee3\u5716\u7247","swap_image":"\u5716\u7247\u5207\u63db",map:"\u5716\u7247 Map",id:"ID",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",classes:"\u985e\u5225",style:"\u6a23\u5f0f","long_desc":"\u9577\u63cf\u8ff0\u9023\u7d50",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","constrain_proportions":"\u9396\u5b9a\u6bd4\u4f8b",preview:"\u9810\u89bd",title:"\u6a19\u984c",general:"\u4e00\u822c","tab_advanced":"\u9032\u968e","tab_appearance":"\u5916\u89c0","tab_general":"\u4e00\u822c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/uk_dlg.js
new file mode 100644
index 000000000..d083a13bb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.advimage_dlg',{"image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u0456\u0439 \u043b\u0456\u043d\u0456\u0457",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",hspace:"\u0413\u043e\u0440\u0438\u0437. \u0432\u0456\u0434\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442. \u0432\u0456\u0434\u0441\u0442\u0443\u043f",dimensions:"\u0420\u043e\u0437\u043c\u0456\u0440\u0438",border:"\u0420\u0430\u043c\u043a\u0430",list:"\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c",alt:"\u041e\u043f\u0438\u0441",src:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","dialog_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","missing_alt":"\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u043d\u0456, \u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438 \u0431\u0435\u0437 \u043e\u043f\u0438\u0441\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f? \u0411\u0435\u0437 \u0446\u044c\u043e\u0433\u043e, \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u043d\u0435 \u0431\u0443\u0434\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u043c \u0434\u0435\u044f\u043a\u0438\u043c \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u043c \u0437 \u0432\u0430\u0434\u0430\u043c\u0438, \u0430\u0431\u043e \u0442\u0438\u043c, \u0445\u0442\u043e \u043a\u043e\u0440\u0438\u0442\u0443\u0454\u0442\u044c\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0438\u043c\u0438 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0447\u0430\u043c\u0438, \u0430\u0431\u043e \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u0430\u0454 \u0456\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 \u0437 \u0432\u0438\u043c\u043a\u043d\u0435\u043d\u0438\u043c\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f\u043c\u0438.","example_img":"\u0412\u0438\u0433\u043b\u044f\u0434 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0443 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",misc:"\u0406\u043d\u0448\u0435",mouseout:"\u043f\u0440\u0438 \u0432\u0456\u0434\u0432\u0435\u0434\u0435\u043d\u043d\u0456",mouseover:"\u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043d\u0456","alt_image":"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","swap_image":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u0430\u043c\u0456\u043d\u043d\u0438\u043a",map:"\u041c\u0430\u043f\u0430 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043b\u0456\u0432\u043e\u0440\u0443\u0447",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",classes:"\u041a\u043b\u0430\u0441\u0438",style:"\u0421\u0442\u0438\u043b\u044c","long_desc":"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u043f\u043e\u0432\u043d\u0438\u0439 \u043e\u043f\u0438\u0441",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c\u043e\u043a \u043c\u043e\u0432\u0438","constrain_proportions":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0456\u0457",preview:"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434",title:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",general:"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","tab_advanced":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","tab_appearance":"\u0412\u0438\u0433\u043b\u044f\u0434","tab_general":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u043e\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ur_dlg.js
new file mode 100644
index 000000000..704061336
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.advimage_dlg',{"image_list":"Image list","align_right":"Right","align_left":"Left","align_textbottom":"Text bottom","align_texttop":"Text top","align_bottom":"Bottom","align_middle":"Middle","align_top":"Top","align_baseline":"Baseline",align:"Alignment",hspace:"Horizontal space",vspace:"Vertical space",dimensions:"Dimensions",border:"Border",list:"Image list",alt:"Image description",src:"Image URL","dialog_title":"Insert/edit image","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.","example_img":"Appearance preview image",misc:"Miscellaneous",mouseout:"for mouse out",mouseover:"for mouse over","alt_image":"Alternative image","swap_image":"Swap image",map:"Image map",id:"Id",rtl:"Right to left",ltr:"Left to right",classes:"Classes",style:"Style","long_desc":"Long description link",langcode:"Language code",langdir:"Language direction","constrain_proportions":"Constrain proportions",preview:"Preview",title:"Title",general:"General","tab_advanced":"Advanced","tab_appearance":"Appearance","tab_general":"General",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/vi_dlg.js
new file mode 100644
index 000000000..361b0b883
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.advimage_dlg',{"image_list":"Danh s\u00e1ch \u1ea3nh","align_right":"Ph\u1ea3i","align_left":"Tr\u00e1i","align_textbottom":"V\u0103n b\u1ea3n d\u01b0\u1edbi c\u00f9ng","align_texttop":"V\u0103n b\u1ea3n tr\u00ean c\u00f9ng","align_bottom":"D\u01b0\u1edbi c\u00f9ng","align_middle":"Gi\u1eefa","align_top":"Tr\u00ean c\u00f9ng","align_baseline":"D\u00f2ng c\u01a1 s\u1edf",align:"Canh l\u1ec1",hspace:"Kho\u1ea3ng c\u00e1ch ngang",vspace:"Kho\u1ea3ng c\u00e1ch d\u1ecdc",dimensions:"K\u00edch th\u01b0\u1edbc",border:"Vi\u1ec1n",list:"Danh s\u00e1ch \u1ea3nh",alt:"M\u00f4 t\u1ea3 \u1ea3nh",src:"URL \u1ea3nh","dialog_title":"Ch\u00e8n/s\u1eeda \u1ea3nh","missing_alt":"Ti\u1ebfp t\u1ee5c v\u1edbi \u0111\u01b0\u1eddng d\u1eabn kh\u00f4ng t\u1ed3n t\u1ea1i ?.","example_img":"Hi\u1ec3n th\u1ecb h\u00ecnh \u1ea3nh xem tr\u01b0\u1edbc",misc:"Linh tinh",mouseout:"cho chu\u1ed9t ra",mouseover:"cho chu\u1ed9t l\u00ean","alt_image":"\u1ea2nh thay th\u1ebf","swap_image":"Trao \u0111\u1ed5i \u1ea3nh",map:"S\u01a1 \u0111\u1ed3 \u1ea3nh",id:"Id",rtl:"Ph\u1ea3i qua tr\u00e1i",ltr:"Tr\u00e1i qua ph\u1ea3i",classes:"L\u1edbp",style:"Ki\u1ec3u d\u00e1ng","long_desc":"Li\u00ean k\u1ebft m\u00f4 t\u1ea3 d\u00e0i",langcode:"M\u00e3 ng\u00f4n ng\u1eef",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef","constrain_proportions":"R\u00e0ng bu\u1ed9c t\u1ec9 l\u1ec7",preview:"Xem tr\u01b0\u1edbc",title:"Ti\u00eau \u0111\u1ec1",general:"Chung","tab_advanced":"N\u00e2ng cao","tab_appearance":"Xu\u1ea5t hi\u1ec7n","tab_general":"Chung",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..5cf6bf5c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.advimage_dlg',{"image_list":"\u56fe\u7247\u5217\u8868","align_right":"\u53f3\u5bf9\u9f50","align_left":"\u5de6\u5bf9\u9f50","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u5e95\u7aef\u5bf9\u9f50","align_middle":"\u5c45\u4e2d\u5bf9\u9f50","align_top":"\u9876\u7aef\u5bf9\u9f50","align_baseline":"\u5e95\u7ebf",align:"\u5bf9\u9f50",hspace:"\u6c34\u5e73\u8ddd\u79bb",vspace:"\u5782\u76f4\u8ddd\u79bb",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u5217\u8868",alt:"\u56fe\u7247\u63cf\u8ff0",src:"\u56fe\u7247\u94fe\u63a5","dialog_title":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","missing_alt":"\u56fe\u7247\u6ca1\u6709\u8bf4\u660e\u6587\u5b57\uff0c\u60a8\u662f\u5426\u8981\u7ee7\u7eed\uff1f\u6ca1\u6709\u8bf4\u660e\u6587\u5b57\u7684\u56fe\u7247\uff0c\u53ef\u80fd\u7ed9\u6b8b\u75be\u4eba\u58eb\u3001\u6587\u672c\u6d4f\u89c8\u5668\u6216\u5173\u95ed\u56fe\u7247\u529f\u80fd\u7684\u6d4f\u89c8\u5668\u8bbf\u95ee\u9020\u6210\u56f0\u96be\u3002","example_img":"\u5916\u89c2\u9884\u89c8\u56fe",misc:"\u5176\u4ed6",mouseout:"\u9f20\u6807\u6ed1\u51fa",mouseover:"\u9f20\u6807\u6ed1\u5165","alt_image":"\u66ff\u6362\u56fe\u7247","swap_image":"\u56fe\u7247\u5207\u6362",map:"\u56fe\u7247map",id:"ID",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",classes:"\u7c7b\u522b",style:"\u6837\u5f0f","long_desc":"\u957f\u63cf\u8ff0\u94fe\u63a5",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u6587\u5b57\u65b9\u5411","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u6807\u9898",general:"\u666e\u901a","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u666e\u901a",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..9f51ade2f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.advimage_dlg',{"image_list":"\u5716\u7247\u6e05\u55ae","align_right":"\u5411\u53f3\u5c0d\u9f4a","align_left":"\u5411\u5de6\u5c0d\u9f4a","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u81ea\u4e0a\u65b9","align_bottom":"\u4e0b\u65b9","align_middle":"\u4e2d\u9593","align_top":"\u4e0a\u65b9","align_baseline":"\u57fa\u6e96\u7dda",align:"\u5c0d\u9f4a\u65b9\u5f0f",hspace:"\u6c34\u5e73\u8ddd\u96e2",vspace:"\u5782\u76f4\u8ddd\u96e2",dimensions:"\u5c3a\u5bf8",border:"\u6846\u67b6",list:"\u5716\u7247\u6e05\u55ae",alt:"\u5716\u7247\u8aaa\u660e",src:"\u5716\u7247 URL","dialog_title":"\u52a0\u5165 / \u8a2d\u5b9a\u5716\u7247","missing_alt":"\u60a8\u7684\u5716\u7247\u6c92\u6709\u8aaa\u660e\uff0c\u9019\u53ef\u80fd\u6703\u8b93\u4e00\u4e9b\u7db2\u53cb\u700f\u89bd\u6642\u6709\u4e9b\u9ebb\u7169\uff0c\u60a8\u78ba\u5b9a\u8981\u5ffd\u7565\u5b83\u55ce\uff1f","example_img":"\u9810\u89bd\u5716\u7247",misc:"\u5176\u4ed6\u8a2d\u5b9a",mouseout:"\u6ed1\u9f20\u79fb\u958b\u7684\u6642\u5019",mouseover:"\u6ed1\u9f20\u79fb\u5230\u5716\u7247\u4e0a\u7684\u6642\u5019","alt_image":"\u66ff\u63db\u5716\u7247","swap_image":"\u66f4\u63db\u5716\u7247\u6548\u679c",map:"\u5f71\u50cf\u5730\u5716",id:"\u5716\u7247\u7684 ID",rtl:"\u5411\u53f3\u908a\u5230\u5de6\u908a",ltr:"\u5411\u5de6\u908a\u5230\u53f3\u908a",classes:"\u985e\u5225 (Class)",style:"\u6a23\u5f0f","long_desc":"\u66ff\u4ee3\u5716\u7247",langcode:"\u8a9e\u7cfb\u4ee3\u865f",langdir:"\u66f8\u5beb\u65b9\u5411","constrain_proportions":"\u7dad\u6301\u5716\u7247\u6bd4\u4f8b",preview:"\u9810\u89bd",title:"\u6a19\u984c",general:"\u4e00\u822c","tab_advanced":"\u5176\u4ed6\u8a2d\u5b9a","tab_appearance":"\u5916\u89c0\u6a23\u5f0f","tab_general":"\u4e00\u822c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh_dlg.js
new file mode 100644
index 000000000..74b39c863
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.advimage_dlg',{"image_list":"\u5716\u7247\u6e05\u55ae","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u9760\u4e0b","align_middle":"\u7f6e\u4e2d","align_top":"\u9760\u4e0a","align_baseline":"\u57fa\u6e96\u7dda",align:"\u5c0d\u9f4a\u65b9\u5f0f",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u908a\u6846",list:"\u5716\u7247\u6e05\u55ae",alt:"\u5716\u7247\u8aaa\u660e",src:"\u5716\u7247 URL \u9023\u7d50","dialog_title":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","missing_alt":"\u60a8\u5c1a\u672a\u586b\u5beb\u5716\u7247\u8aaa\u660e\u6587\u5b57\u662f\u5426\u8981\u7e7c\u7e8c? \u5982\u679c\u4e0d\u586b\u5beb\u8aaa\u660e\u6587\u5b57, \u5c0d\u4f7f\u7528\u975e\u53ef\u8996\u6216\u5c0d\u8a2d\u5b9a\u70ba\u4e0d\u986f\u793a\u5716\u7247\u7684\u700f\u89bd\u5668\u4f7f\u7528\u8005\u5c07\u66f4\u96e3\u95b1\u8b80\u6216\u7406\u89e3\u6b64\u5716\u7247.","example_img":"\u5716\u7247\u9810\u89bd",misc:"\u5176\u4ed6",mouseout:"\u6e38\u6a19\u79fb\u51fa",mouseover:"\u6e38\u6a19\u79fb\u5165","alt_image":"\u53d6\u4ee3\u5716\u7247","swap_image":"\u5716\u7247\u5207\u63db",map:"\u5f71\u50cf\u5730\u5716",id:"ID",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",classes:"\u985e\u5225",style:"\u6a23\u5f0f","long_desc":"\u9577\u9023\u7d50",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","constrain_proportions":"\u56fa\u5b9a\u6bd4\u4f8b",preview:"\u9810\u89bd",title:"\u5716\u7247\u6a19\u984c",general:"\u4e00\u822c","tab_advanced":"\u9032\u968e","tab_appearance":"\u5916\u89c0","tab_general":"\u4e00\u822c",width:"\u5bec",height:"\u9ad8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zu_dlg.js
new file mode 100644
index 000000000..735ea4992
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advimage/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.advimage_dlg',{"image_list":"\u56fe\u7247\u6e05\u5355","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_textbottom":"\u6587\u5b57\u4e0b\u65b9","align_texttop":"\u6587\u5b57\u4e0a\u65b9","align_bottom":"\u4e0b\u65b9","align_middle":"\u5c45\u4e2d","align_top":"\u4e0a\u65b9","align_baseline":"\u57fa\u7ebf",align:"\u5bf9\u9f50\u65b9\u5f0f",hspace:"\u5782\u76f4\u95f4\u8ddd",vspace:"\u6c34\u51c6\u95f4\u8ddd",dimensions:"\u5c3a\u5bf8",border:"\u8fb9\u6846",list:"\u56fe\u7247\u6e05\u5355",alt:"\u56fe\u7247\u8bf4\u660e",src:"\u56fe\u7247\u7f51\u5740","dialog_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","missing_alt":"\u8bf7\u95ee\u662f\u5426\u786e\u5b9a\u4e0d\u4e3a\u56fe\u7247\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff1f\u82e5\u6ca1\u6709\u52a0\u5165\u8bf4\u660e\u6587\u5b57\uff0c\u5f53\u4f7f\u7528\u8005\u4f7f\u7528\u4e0d\u8bfb\u5165\u56fe\u7247\u6216\u6587\u5b57\u4f53\u7684\u6d41\u89c8\u5668\u65f6\uff0c\u5c06\u4f1a\u770b\u4e0d\u5230\u8fd9\u4e2a\u56fe\u7247\u3002","example_img":"\u9884\u89c8\u56fe\u7247",misc:"\u5176\u5b83",mouseout:"\u6ed1\u9f20\u79fb\u51fa\u56fe\u7247",mouseover:"\u6ed1\u9f20\u79fb\u5165\u56fe\u7247","alt_image":"\u66ff\u6362\u56fe\u7247","swap_image":"\u5bf9\u6362\u56fe\u7247",map:"\u56fe\u7247\u5730\u56fe",id:"Id",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",classes:"\u7c7b\u578b",style:"\u6837\u5f0f","long_desc":"\u957f\u63cf\u8ff0\u8fde\u7ed3",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",preview:"\u9884\u89c8",title:"\u67e5\u627e",general:"\u4e00\u822c","tab_advanced":"\u9ad8\u7ea7","tab_appearance":"\u5916\u89c2","tab_general":"\u4e00\u822c",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ar_dlg.js
new file mode 100644
index 000000000..8a2bc7de9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.advlink_dlg',{"target_name":"\u0627\u0633\u0645 \u0627\u0644\u0647\u062f\u0641",classes:"\u0635\u0646\u0641",style:"\u0634\u0643\u0644",id:"Id","popup_position":"\u0645\u0648\u0642\u0639 (X/Y)",langdir:"\u0627\u062a\u062c\u0627\u0647 \u0627\u0644\u0644\u063a\u0629","popup_size":"\u062d\u062c\u0645","popup_dependent":"\u062e\u0627\u0636\u0639 (Mozilla/Firefox only)","popup_resizable":"\u062a\u063a\u064a\u064a\u0631 \u062d\u062c\u0645 \u0646\u0627\u0641\u0630\u0629","popup_location":"\u0639\u0631\u0636 \u0634\u0631\u064a\u0637 \u0627\u0644\u0645\u0648\u0642\u0639","popup_menubar":"\u0639\u0631\u0636 \u0634\u0631\u064a\u0637 \u0627\u0644\u0642\u0648\u0627\u0626\u0645","popup_toolbar":"\u0625\u0638\u0647\u0627\u0631 \u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a","popup_statusbar":"\u0639\u0631\u0636 \u0634\u0631\u064a\u0637 \u0627\u0644\u062d\u0627\u0644\u0629","popup_scrollbars":"\u0639\u0631\u0636 \u0623\u0634\u0631\u0637\u0629 \u0627\u0644\u062a\u0645\u0631\u064a\u0631","popup_return":"\u0625\u062f\u0631\u0627\u062c \'\u0639\u0648\u062f\u0629 \u0643\u0627\u0630\u0628\u0629\' \'return false\'","popup_name":"\u0627\u0633\u0645 \u0627\u0644\u0646\u0627\u0641\u0630\u0629","popup_url":"\u0631\u0627\u0628\u0637 \u0637\u0641\u0648 \u0639\u0644\u0649 \u0627\u0644\u0633\u0637\u062d",popup:"\u062c\u0627\u0641\u0627 \u0633\u0643\u0631\u064a\u0628\u062a","target_blank":"\u0641\u064a \u0641\u062a\u062d \u0646\u0627\u0641\u0630\u0629 \u062c\u062f\u064a\u062f\u0629","target_top":"\u0641\u062a\u062d \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631 \u0627\u0644\u0639\u0644\u0648\u064a (\u064a\u062d\u0644 \u0645\u062d\u0644 \u0643\u0627\u0641\u0629 \u0627\u0644\u0625\u0637\u0627\u0631\u0627\u062a)","target_parent":"\u0641\u062a\u062d \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631 \u0627\u0644\u0623\u0635\u0644","target_same":"\u0641\u062a\u062d \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u0625\u0637\u0627\u0631","anchor_names":"\u0645\u0631\u062a\u0643\u0632\u0627\u062a","popup_opts":"\u062e\u064a\u0627\u0631\u0627\u062a","advanced_props":"\u062e\u0635\u0627\u0626\u0635 \u0645\u062a\u0642\u062f\u0645\u0629","event_props":"\u0623\u062d\u062f\u0627\u062b","popup_props":"\u062e\u0635\u0627\u0626\u0635 \u0645\u0631\u0628\u0639 \u0637\u0641\u0648 \u0639\u0644\u0649 \u0627\u0644\u0633\u0637\u062d ","general_props":"\u0627\u0644\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0639\u0627\u0645\u0629","advanced_tab":"\u0645\u062a\u0642\u062f\u0645","events_tab":"\u0623\u062d\u062f\u0627\u062b","popup_tab":"\u064a\u0645\u0631\u0628\u0639 \u0637\u0641\u0648 \u0639\u0644\u0649 \u0627\u0644\u0633\u0637\u062d","general_tab":"\u0639\u0627\u0645",list:"\u0642\u0627\u0626\u0645\u0647 \u0627\u0644\u0645\u0648\u0627\u0642\u0639","is_external":"\u0627\u0644\u0631\u0627\u0628\u0637 \u064a\u0628\u062f\u0648 \u0627\u0646\u0647 \u0644\u0645\u0648\u0642\u0639 \u062e\u0627\u0631\u062c\u0649 \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u0646\u0636\u0639 http://","is_email":"\u0627\u0644\u0631\u0627\u0628\u0637 \u064a\u0628\u062f\u0648 \u0628\u0631\u064a\u062f \u0627\u0644\u0627\u0643\u062a\u0631\u0648\u0646\u0649 \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u0646\u0636\u0639 \u0648\u0633\u0645 \u0631\u0627\u0628\u0637 \u0627\u0644\u0628\u0631\u064a\u062f",titlefield:"\u0627\u0633\u0645 \u0627\u0644\u0631\u0627\u0628\u0637",target:"\u0627\u0644\u0647\u062f\u0641",url:"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0631\u0627\u0628\u0637",title:"\u0627\u062f\u062e\u0627\u0644 -\u062a\u0639\u062f\u064a\u0644 \u0631\u0627\u0628\u0637","link_list":"\u0642\u0627\u0626\u0645\u0629 \u0627\u0644\u0631\u0648\u0627\u0628\u0637",rtl:"\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631",ltr:"\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646",accesskey:"\u0645\u0641\u062a\u0627\u062d \u0627\u0644\u0648\u0635\u0648\u0644",tabindex:" Tab \u0641\u0647\u0631\u0633",rev:"\u0639\u0644\u0627\u0642\u0629 \u0627\u0644\u0647\u062f\u0641 \u0628\u0627\u0644\u0635\u0641\u062d\u0629",rel:"\u0639\u0644\u0627\u0642\u0629 \u0627\u0644\u0635\u0641\u062d\u0629 \u0628\u0627\u0644\u0647\u062f\u0641",mime:"\u0646\u0648\u0639 \u0645\u0644\u0641 \u0627\u0644\u0647\u062f\u0641",encoding:"\u0631\u0645\u0632 \u0627\u0644\u0644\u063a\u0629",langcode:"\u0643\u0648\u062f \u0627\u0644\u0644\u063a\u0647","target_langcode":"\u0644\u063a\u0629 \u0627\u0644\u0647\u062f\u0641",width:"\u0627\u0644\u0639\u0631\u0636",height:"\u0627\u0644\u0627\u0631\u062a\u0641\u0627\u0639"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/az_dlg.js
new file mode 100644
index 000000000..fe0eee299
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.advlink_dlg',{"target_name":"H\u0259d\u0259f ad\u0131",classes:"Sinifl\u0259r",style:"Sil",id:"\u0130dentifikator","popup_position":"M\u00f6vqe (X/Y)",langdir:"Dil istiqam\u0259ti","popup_size":"\u00f6l\u00e7\u00fc","popup_dependent":"As\u0131l\u0131 olan (yaln\u0131z Mozilla/Firefox)","popup_resizable":"P\u0259nc\u0259r\u0259 \u00f6l\u00e7\u00fcs\u00fcn\u00fc d\u0259yi\u015fil\u0259n et","popup_location":"\u00dcnvan s\u0259trini g\u00f6st\u0259r","popup_menubar":"Menyu s\u0259trini g\u00f6st\u0259r","popup_toolbar":"Al\u0259tl\u0259r panelini g\u00f6st\u0259r","popup_statusbar":"M\u0259tn v\u0259ziyy\u0259tini g\u00f6st\u0259r","popup_scrollbars":"F\u0131rlanan\u0131n zolaqlar\u0131n\u0131 g\u00f6st\u0259r","popup_return":"\'return false\' \u0259lav\u0259 et","popup_name":"P\u0259nc\u0259r\u0259nin ad\u0131","popup_url":"\u00dcz\u0259 \u00e7\u0131xan p\u0259nc\u0259r\u0259nin \u00fcnvan\u0131",popup:"\u00dcz\u0259 \u00e7\u0131xan Javascript-p\u0259nc\u0259r\u0259","target_blank":"Yeni p\u0259nc\u0259r\u0259d\u0259 a\u00e7","target_top":"Yuxar\u0131 \u00e7\u0259r\u00e7iv\u0259d\u0259 a\u00e7 (dig\u0259rl\u0259rini d\u0259 doldurur)","target_parent":"Ana p\u0259nc\u0259r\u0259d\u0259 a\u00e7 / \u00e7\u0259r\u00e7iv\u0259","target_same":"Bu p\u0259nc\u0259r\u0259d\u0259 a\u00e7 / \u00e7\u0259r\u00e7iv\u0259","anchor_names":"L\u00f6vb\u0259r","popup_opts":"Parametrl\u0259r","advanced_props":"\u018flav\u0259 x\u00fcsusiyy\u0259tl\u0259r","event_props":"Hadis\u0259l\u0259r","popup_props":"\u00dcz\u0259 \u00e7\u0131xan p\u0259nc\u0259r\u0259l\u0259rin x\u00fcsusiyy\u0259tl\u0259ti","general_props":"\u00dcmumi x\u00fcsusiyy\u0259tl\u0259ri","advanced_tab":"\u018flav\u0259l\u0259r","events_tab":"Hadis\u0259l\u0259r","popup_tab":"\u00dcz\u0259 \u00e7\u0131xan p\u0259nc\u0259r\u0259","general_tab":"\u00dcmumi",list:"Ke\u00e7id siyah\u0131s\u0131","is_external":"Daxil edil\u0259n \u00fcnvan xarici ke\u00e7id\u0259 b\u0259nz\u0259yir. http:// prefiksini \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?","is_email":"Daxil edil\u0259n \u00fcnvan e-po\u00e7ta b\u0259nz\u0259yir. mailto: prefiksini \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?",titlefield:"Ad\u0131",target:"H\u0259d\u0259f",url:"Ke\u00e7id \u00fcnvan\u0131",title:"Ke\u00e7idi \u0259lav\u0259/redakt\u0259 et","link_list":"Ke\u00e7id siyah\u0131s\u0131",rtl:"Sa\u011fda-sola",ltr:"Solda-sa\u011fa",accesskey:"Giri\u015f klavi\u015fi",tabindex:"Hesab indeksi",rev:"H\u0259d\u0259fin p\u0259nc\u0259r\u0259y\u0259 m\u00fcnasib\u0259ti",rel:"P\u0259nc\u0259r\u0259nin h\u0259d\u0259f\u0259 m\u00fcnasib\u0259ti",mime:"H\u0259d\u0259fli MIME-n\u00f6v",encoding:"H\u0259d\u0259fli kodla\u015fd\u0131rma",langcode:"Dil kodu","target_langcode":"H\u0259d\u0259fli dil",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/be_dlg.js
new file mode 100644
index 000000000..e4dcb3046
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.advlink_dlg',{"target_name":"\u0406\u043c\u044f \u043c\u044d\u0442\u044b",classes:"\u041a\u043b\u0430\u0441\u044b",style:"\u0421\u0442\u044b\u043b\u044c",id:"\u0406\u0434\u044d\u043d\u0442\u044b\u0444\u0456\u043a\u0430\u0442\u0430\u0440","popup_position":"\u041f\u0430\u0437\u0456\u0446\u044b\u044f (X/Y)",langdir:"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u043c\u043e\u0432\u044b","popup_size":"\u041f\u0430\u043c\u0435\u0440","popup_dependent":"\u0417\u0430\u043b\u0435\u0436\u043d\u044b\u044f (\u0442\u043e\u043b\u044c\u043a\u0456 Mozilla/Firefox)","popup_resizable":"\u0414\u0430\u0437\u0432\u043e\u043b\u0456\u0446\u044c \u0437\u043c\u044f\u043d\u044f\u0446\u044c \u043f\u0430\u043c\u0435\u0440","popup_location":"\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0430\u0434\u0440\u0430\u0441\u0443","popup_menubar":"\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u043c\u0435\u043d\u044e","popup_toolbar":"\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u043f\u0430\u043d\u044d\u043b\u0456 \u043f\u0440\u044b\u043b\u0430\u0434","popup_statusbar":"\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u0440\u0430\u0434\u043e\u043a \u0441\u0442\u0430\u043d\u0443","popup_scrollbars":"\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u043f\u0430\u043b\u043e\u0441\u044b \u043f\u0440\u0430\u0433\u043e\u0440\u0442\u043a\u0456","popup_return":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \'return false\'","popup_name":"\u041d\u0430\u0437\u0432\u0430 \u0430\u043a\u043d\u0430","popup_url":"\u0410\u0434\u0440\u0430\u0441 \u0443\u0441\u043f\u043b\u044b\u0432\u0430\u043b\u044c\u043d\u0430\u0433\u0430 \u0430\u043a\u043d\u0430",popup:"\u0423\u0441\u043f\u043b\u044b\u0432\u0430\u043b\u044c\u043d\u0430\u0435 Javascript-\u0430\u043a\u043d\u043e","target_blank":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0443 \u043d\u043e\u0432\u044b\u043c \u0430\u043a\u043d\u0435","target_top":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0443 \u0432\u0435\u0440\u0445\u043d\u0456\u043c \u0444\u0440\u044d\u0439\u043c\u0435 (\u0437\u0430\u043c\u044f\u0448\u0447\u0430\u0435 \u045e\u0441\u0451 \u0430\u0441\u0442\u0430\u0442\u043d\u0456\u044f)","target_parent":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0443 \u0431\u0430\u0446\u044c\u043a\u043e\u045e\u0441\u043a\u0456\u043c \u0430\u043a\u043d\u0435 / \u0444\u0440\u044d\u0439\u043c\u0435","target_same":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0443 \u0433\u044d\u0442\u044b\u043c \u0430\u043a\u043d\u0435 / \u0444\u0440\u044d\u0439\u043c\u0435","anchor_names":"\u042f\u043a\u0430\u0440\u044b","popup_opts":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","advanced_props":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f \u045e\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456","event_props":"\u041f\u0430\u0434\u0437\u0435\u0456","popup_props":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u045e\u0441\u043f\u043b\u044b\u0432\u0430\u043b\u044c\u043d\u0430\u0433\u0430 \u0430\u043a\u043d\u0430","general_props":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f \u045e\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456","advanced_tab":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f","events_tab":"\u041f\u0430\u0434\u0437\u0435\u0456","popup_tab":"\u0423\u0441\u043f\u043b\u044b\u0432\u0430\u043b\u044c\u043d\u0430\u0435 \u0430\u043a\u043d\u043e","general_tab":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f",list:"\u0421\u043f\u0456\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a","is_external":"\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 \u0432\u043e\u043d\u043a\u0430\u0432\u0443\u044e \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443, \u0432\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043f\u0440\u044d\u0444\u0456\u043a\u0441 http://?","is_email":"\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 email, \u0432\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043f\u0440\u044d\u0444\u0456\u043a\u0441 mailto:?",titlefield:"\u041d\u0430\u0437\u0432\u0430",target:"\u041c\u044d\u0442\u0430",url:"\u0410\u0434\u0440\u0430\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456",title:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","link_list":"\u0421\u043f\u0456\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430",ltr:"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430",accesskey:"\u041a\u043b\u0430\u0432\u0456\u0448\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0443",tabindex:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a",rev:"\u0421\u0442\u0430\u045e\u043b\u0435\u043d\u043d\u0435 \u043c\u044d\u0442\u0430 \u0434\u0430 \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0456",rel:"\u0421\u0442\u0430\u045e\u043b\u0435\u043d\u043d\u0435 \u0441\u0442\u0430\u0440\u043e\u043d\u043a\u0430 \u0434\u0430 \u043c\u044d\u0442\u044b",mime:"\u041c\u044d\u0442\u0430\u0432\u044b MIME-\u0442\u044b\u043f",encoding:"\u041a\u0430\u0434\u0437\u0456\u0440\u043e\u045e\u043a\u0430 \u043c\u044d\u0442\u044b",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u044b","target_langcode":"\u041c\u043e\u0432\u0430 \u043c\u044d\u0442\u044b",width:"\u0428\u044b\u0440\u044b\u043d\u044f",height:"\u0412\u044b\u0448\u044b\u043d\u044f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bg_dlg.js
new file mode 100644
index 000000000..3b83fe4e4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.advlink_dlg',{"target_name":"\u0418\u043c\u0435 \u043d\u0430 \u0446\u0435\u043b",classes:"\u041a\u043b\u0430\u0441\u043e\u0432\u0435",style:"\u0421\u0442\u0438\u043b",id:"Id","popup_position":"\u041f\u043e\u0437\u0438\u0446\u0438\u044f (X/Y)",langdir:"\u041f\u043e\u0441\u043e\u043a\u0430 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430","popup_size":"\u0420\u0430\u0437\u043c\u0435\u0440","popup_dependent":"\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u0438 (Mozilla/Firefox only)","popup_resizable":"\u0420\u0430\u0437\u0440\u0435\u0448\u0438 \u043f\u0440\u0435\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043f\u0440\u043e\u0437\u043e\u0440\u0446\u0438\u0442\u0435","popup_location":"\u041f\u043e\u043a\u0430\u0436\u0438 location bar","popup_menubar":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043b\u0435\u043d\u0442\u0430\u0442\u0430 \u0441 \u043c\u0435\u043d\u044e\u0442\u0430","popup_toolbar":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043b\u0435\u043d\u0442\u0438\u0442\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438","popup_statusbar":"\u041f\u043e\u043a\u0430\u0436\u0438 status bar","popup_scrollbars":"\u041f\u043e\u043a\u0430\u0436\u0438 \u0441\u043a\u0440\u043e\u043b\u0435\u0440\u0438","popup_return":"\u0412\u043c\u044a\u043a\u043d\u0438 \'return false\'","popup_name":"\u0418\u043c\u0435 \u043d\u0430 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u0430","popup_url":"URL \u043d\u0430 popup-\u0430",popup:"Javascript popup","target_blank":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432 \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446","target_top":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432 \u043d\u0430\u0439-\u0433\u043e\u0440\u043d\u0438\u044f \u0444\u0440\u0435\u0439\u043c (\u0437\u0430\u043c\u0435\u0441\u0442\u0432\u0430 \u0432\u0441\u0438\u0447\u043a\u0438 \u0444\u0440\u0435\u0439\u043c\u043e\u0432\u0435)","target_parent":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432 \u0433\u043e\u0440\u043d\u0438\u044f \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 / \u0444\u0440\u0435\u0439\u043c","target_same":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432 \u0442\u043e\u0437\u0438 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446 / \u0444\u0440\u0435\u0439\u043c","anchor_names":"\u041a\u043e\u0442\u0432\u0438","popup_opts":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","advanced_props":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","event_props":"\u0421\u044a\u0431\u0438\u0442\u0438\u044f","popup_props":"Popup \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","general_props":"\u041e\u0431\u0449\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","advanced_tab":"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","events_tab":"\u0421\u044a\u0431\u0438\u0442\u0438\u044f","popup_tab":"Popup","general_tab":"\u041e\u0431\u0449\u0438",list:"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438","is_external":"URL-\u0442\u043e, \u043a\u043e\u0435\u0442\u043e \u0432\u044a\u0432\u0435\u0434\u043e\u0445\u0442\u0435 \u0435 \u0432\u044a\u043d\u0448\u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430, \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u0438\u044f\u0442 http:// \u043f\u0440\u0435\u0444\u0438\u043a\u0441?","is_email":"URL-\u0442\u043e, \u043a\u043e\u0435\u0442\u043e \u0432\u044a\u0432\u0435\u0434\u043e\u0445\u0442\u0435 \u0435 email \u0430\u0434\u0440\u0435\u0441, \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u0438\u044f\u0442 mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441?",titlefield:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",target:"\u0426\u0435\u043b",url:"URL \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430",title:"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","link_list":"\u0421\u043f\u0438\u0441\u044a\u043a \u0441 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438",rtl:"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e",ltr:"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e",accesskey:"\u041a\u043b\u0430\u0432\u0438\u0448",tabindex:"\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u043d\u043e\u0441\u0442",rev:"\u0412\u0437\u0430\u0438\u043c\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0446\u0435\u043b - \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430",rel:"\u0412\u0437\u0430\u0438\u043c\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 - \u0446\u0435\u043b",mime:"MIME \u0442\u0438\u043f",encoding:"\u041a\u043e\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0442\u0435",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430","target_langcode":"\u0415\u0437\u0438\u043a",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bn_dlg.js
new file mode 100644
index 000000000..34e337219
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/br_dlg.js
new file mode 100644
index 000000000..8c341beda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.advlink_dlg',{"target_name":"Nome do alvo",classes:"Classes",style:"Estilo",id:"Id","popup_position":"Posi\u00e7\u00e3o (X/Y)",langdir:"Dire\u00e7\u00e3o do texto","popup_size":"Tamanho","popup_dependent":"Dependente (Mozilla/Firefox apenas)","popup_resizable":"Permitir altera\u00e7\u00e3o do tamanho da janela","popup_location":"Mostrar barra de endere\u00e7os","popup_menubar":"Mostrar barra de menu","popup_toolbar":"Mostrar barras de ferramentas","popup_statusbar":"Mostrar barra de status","popup_scrollbars":"Mostrar barras de scroll","popup_return":"Inserir \'return false\'","popup_name":"Nome da janela","popup_url":"URL do popup",popup:"Popup javascript","target_blank":"Abrir numa nova janela","target_top":"Abrir na p\u00e1gina inteira (substitui todos os quadros)","target_parent":"Abrir na janela/quadro pai","target_same":"Abrir nesta janela/quadro","anchor_names":"\u00c2ncoras","popup_opts":"Op\u00e7\u00f5es","advanced_props":"Propriedades avan\u00e7adas","event_props":"Eventos","popup_props":"Propriedades de popup","general_props":"Propriedades gerais","advanced_tab":"Avan\u00e7ado","events_tab":"Eventos","popup_tab":"Popup","general_tab":"Geral",list:"Lista de hyperlinks","is_external":"A URL digitada parece conduzir a um link externo. Deseja acrescentar o (necess\u00e1rio) prefixo http://?","is_email":"A URL digitada parece ser um endere\u00e7o de e-mail. Deseja acrescentar o (necess\u00e1rio) prefixo mailto:?",titlefield:"T\u00edtulo",target:"Alvo",url:"URL do hyperlink",title:"Inserir/editar hyperlink","link_list":"Lista de hyperlinks",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",accesskey:"Chave de acesso",tabindex:"Tabindex",rev:"Rela\u00e7\u00e3o alvo/p\u00e1gina",rel:"Rela\u00e7\u00e3o p\u00e1gina/alvo",mime:"Tipo MIME alvo",encoding:"Codifica\u00e7\u00e3o de caracteres",langcode:"C\u00f3digo da linguagem","target_langcode":"linguagem alvo",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bs_dlg.js
new file mode 100644
index 000000000..ae841aae1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.advlink_dlg',{"target_name":"Ime mete",classes:"Klasa",style:"Stil",id:"Id","popup_position":"Pozicija (X/Y)",langdir:"Smjer jezika","popup_size":"Veli\u010dina","popup_dependent":"Ovisan (samo za Mozilla/Firefox)","popup_resizable":"Prozor promjenjive veli\u010dine","popup_location":"Poka\u017ei traku lokacije","popup_menubar":"Poka\u017ei izbornik","popup_toolbar":"Poka\u017ei alatne trake","popup_statusbar":"Poka\u017ei statusnu traku","popup_scrollbars":"Poka\u017ei kliza\u010de","popup_return":"Umetni \'return false\'","popup_name":"Ime prozora","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Otvori u novom prozoru","target_top":"Otvori u gornjem okviru (zamjenjuje sve okvire)","target_parent":"Otvori u izvornom prozoru / okvir","target_same":"Otovori u novom prozoru / okviru","anchor_names":"Sidra","popup_opts":"Opcije","advanced_props":"Napredna svojstva","event_props":"Doga\u0111aji","popup_props":"Svojstva popup prozora","general_props":"Osnovna svojstva","advanced_tab":"Napredno","events_tab":"Doga\u0111aj","popup_tab":"Popup","general_tab":"Osnovno",list:"Lista poveznica","is_external":"URL koji ste unijeli izgleda kao vanjska poveznica, \u017eelite li dodati potrebni http:// prefiks?","is_email":"URL koji ste unijeli izgleda kao e-mail adresa, \u017eelite li dodati potrebni mailto: prefiks?",titlefield:"Naslov",target:"Meta",url:"URL poveznice",title:"Umetni/uredi poveznicu","link_list":"Lista poveznica",rtl:"S desna na lijevo",ltr:"S lijeva na desno",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Odnos mete prema stranici",rel:"Odnos stranice prema meti",mime:"MIME tip",encoding:"Kodiranje znakova",langcode:"Kod jezika","target_langcode":"Jezik",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ca_dlg.js
new file mode 100644
index 000000000..c580f73c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.advlink_dlg',{"target_name":"Nom del dest\u00ed",classes:"Classes",style:"Estil",id:"Id","popup_position":"Posici\u00f3 (X/Y)",langdir:"Direcci\u00f3 de l\'idioma","popup_size":"Mida","popup_dependent":"Dependent (nom\u00e9s Mozilla/Firefox)","popup_resizable":"Fes la finestra redimensionable","popup_location":"Mostra la barra d\'ubicaci\u00f3","popup_menubar":"Mostra la barra de men\u00fa","popup_toolbar":"Mostra la barra d\'eines","popup_statusbar":"Mostra la barra d\'estat","popup_scrollbars":"Mostra les barres de despla\u00e7ament","popup_return":"Insereix \'return false\'","popup_name":"Nom de la finestra","popup_url":"URL de la finestra emergent",popup:"Finestra emergent javascript","target_blank":"Obre en una nova finestra","target_top":"Obre en el marc superior (reempla\u00e7a tots els marcs)","target_parent":"Obre en la finestra / marc pare","target_same":"Obre en aquesta finestra / marc","anchor_names":"\u00c0ncores","popup_opts":"Opcions","advanced_props":"Propietats avan\u00e7ades","event_props":"Esdeveniments","popup_props":"Propietats de la finestra emergent","general_props":"Propietats generals","advanced_tab":"Avan\u00e7at","events_tab":"Esdeveniments","popup_tab":"Finestra emergent","general_tab":"General",list:"Llista d\'enlla\u00e7os","is_external":"L\'URL que heu introdu\u00eft sembla ser un enlla\u00e7 extern, voleu afegir-hi el prefix requerit http:// ?","is_email":"L\'URL que heu introdu\u00eft sembla ser una adre\u00e7a de correu electr\u00f2nic, voleu afegir-hi el prefix requerit mailto: ?",titlefield:"T\u00edtol",target:"Objectiu",url:"URL de l\'enlla\u00e7",title:"Insereix/edita enlla\u00e7","link_list":"Llista d\'enlla\u00e7os",rtl:"De dreta a esquerra",ltr:"D\'esquerra a dreta",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relaci\u00f3 de dest\u00ed a p\u00e0gina",rel:"Relaci\u00f3 de p\u00e0gina a dest\u00ed",mime:"Tipus MIME del dest\u00ed",encoding:"Codificaci\u00f3 de car\u00e0cters del dest\u00ed",langcode:"Codi de l\'idioma","target_langcode":"Idioma del dest\u00ed",width:"Amplada",height:"Al\u00e7ada"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ch_dlg.js
new file mode 100644
index 000000000..64fb278f2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u7c7b\u522b",style:"\u6837\u5f0f",id:"ID","popup_position":"\u4f4d\u7f6e\uff08X/Y\uff09",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u6d4f\u89c8\u5668\u9650\u5236\uff08\u4ec5\u652f\u63f4 Mozilla/Firefox\uff09","popup_resizable":"\u5f39\u7a97\u53ef\u8c03\u6574\u5927\u5c0f","popup_location":"\u663e\u793a\u5730\u5740\u680f","popup_menubar":"\u663e\u793a\u83dc\u5355\u5217","popup_toolbar":"\u663e\u793a\u5de5\u5177\u5217","popup_statusbar":"\u663e\u793a\u72b6\u6001\u5217","popup_scrollbars":"\u663e\u793a\u6eda\u52a8\u6761","popup_return":"\u63d2\u5165 \"return false\"","popup_name":"\u89c6\u7a97\u540d\u79f0","popup_url":"\u5f39\u51fa\u89c6\u7a97URL",popup:"JavaScript \u5f39\u51fa\u89c6\u7a97","target_blank":"\u5728\u65b0\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","target_top":"\u5728\u9876\u90e8\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","target_parent":"\u5728\u7236\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","target_same":"\u5728\u76ee\u524d\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","anchor_names":"\u4e66\u7b7e","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5f39\u51fa\u89c6\u7a97\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7\u5c5e\u6027","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5f39\u51fa\u89c6\u7a97","general_tab":"\u4e00\u822c",list:"\u8d85\u8fde\u7ed3\u6e05\u5355","is_external":"\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u4e3a\u5916\u90e8\u8d85\u8fde\u7ed3\uff0c\u662f\u5426\u8981\u52a0\u4e0a \"http://\" ?","is_email":"\u60a8\u8f93\u5165\u7684\u4f3c\u4e4e\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u52a0 mailto:?",titlefield:"\u6807\u9898",target:"\u76ee\u6807",url:"\u8d85\u8fde\u7ed3URL",title:"\u63d2\u5165/\u7f16\u8f91\u8d85\u8fde\u7ed3","link_list":"\u8d85\u8fde\u7ed3\u6e05\u5355",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",accesskey:"\u5feb\u901f\u952e",tabindex:"Tab\u7d22\u5f15",rev:"\u76ee\u6807\u5230\u7f51\u9875\u7684\u5173\u7cfb",rel:"\u7f51\u9875\u5230\u76ee\u6807\u7684\u5173\u7cfb",mime:"\u76ee\u6807MIME\u7c7b\u578b",encoding:"\u76ee\u6807\u8bed\u8a00\u7f16\u7801",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u6807\u8bed\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cn_dlg.js
new file mode 100644
index 000000000..b59b56031
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u7c7b\u522b",style:"\u6837\u5f0f",id:"Id\u7f16\u53f7","popup_position":"\u4f4d\u7f6e (X/Y)",langdir:"\u6587\u672c\u65b9\u5411","popup_size":"\u6587\u672c\u5927\u5c0f","popup_dependent":"\u6d4f\u89c8\u5668\u9650\u5236(\u4ec5\u652f\u6280Mozilla/Firefox)","popup_resizable":"\u7a97\u53e3\u5927\u5c0f\u53ef\u8c03","popup_location":"\u663e\u793a\u5730\u5740\u680f","popup_menubar":"\u663e\u793a\u83dc\u5355\u680f","popup_toolbar":"\u663e\u793a\u5de5\u5177\u680f","popup_statusbar":"\u663e\u793a\u72b6\u6001\u680f","popup_scrollbars":"\u663e\u793a\u6eda\u52a8\u6761","popup_return":"\u63d2\u5165 \"return false\"","popup_name":"\u65b0\u7a97\u53e3\u540d\u79f0","popup_url":"\u5f39\u7a97URL\u5730\u5740",popup:"JavaScript \u5f39\u51fa","target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00","target_top":"\u5728\u9876\u90e8\u7a97\u53e3\u6253\u5f00\u8d85\u94fe\u63a5","target_parent":"\u5728\u7236\u7ea7\u7a97\u53e3\u6253\u5f00\u8d85\u94fe\u63a5","target_same":"\u5728\u76ee\u524d\u7a97\u53e3\u6253\u5f00\u8d85\u94fe\u63a5","anchor_names":"\u951a\u70b9","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5f39\u51fa\u5c5e\u6027","general_props":"\u5e38\u89c4\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5f39\u7a97","general_tab":"\u5e38\u89c4",list:"\u94fe\u63a5\u5217\u8868","is_external":"\u60a8\u8f93\u5165\u7684 URL \u4f3c\u4e4e\u4e3a\u5916\u90e8\u8d85\u8fde\u7ed3\uff0c\u662f\u5426\u8981\u52a0\u4e0a \u201chttp://\u201d\u524d\u7f00?","is_email":"\u60a8\u8f93\u5165\u7684\u4f3c\u4e4e\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740,\u662f\u5426\u9700\u8981\u52a0 mailto:\uff1f",titlefield:"\u6807\u9898",target:"\u76ee\u6807",url:"\u94fe\u63a5URL\u5730\u5740",title:"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","link_list":"\u94fe\u63a5\u5217\u8868",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",accesskey:"\u5feb\u6377\u952e",tabindex:"Tab\u952e\u8bbf\u95ee\u987a\u5e8f",rev:"\u76ee\u6807\u5230\u7f51\u9875\u7684\u5173\u7cfb",rel:"\u7f51\u9875\u5230\u76ee\u6807\u7684\u5173\u7cfb",mime:"\u76ee\u6807MIME\u7c7b\u578b",encoding:"\u76ee\u6807\u5b57\u7b26\u96c6\uff08UTF-8\uff09",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u6807\u8bed\u8a00",width:"\u5bbd\u5ea6",height:"\u9ad8\u5ea6"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cs_dlg.js
new file mode 100644
index 000000000..d63122959
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.advlink_dlg',{"target_name":"N\u00e1zev c\u00edle",classes:"T\u0159\u00eddy",style:"Styl",id:"ID","popup_position":"Um\u00edst\u011bn\u00ed (X/Y)",langdir:"Sm\u011br textu","popup_size":"Velikost","popup_dependent":"Z\u00e1vislost (pouze Mozilla/Firefox)","popup_resizable":"Umo\u017enit zm\u011bnu velikosti","popup_location":"Zobrazit pole s adresou","popup_menubar":"Zobrazit nab\u00eddku","popup_toolbar":"Zobrazit panel n\u00e1stroj\u016f","popup_statusbar":"Zobrazit stavov\u00fd \u0159\u00e1dek","popup_scrollbars":"Zobrazit posuvn\u00edky","popup_return":"Vlo\u017eit \'return false\'","popup_name":"N\u00e1zev okna","popup_url":"URL vyskakovac\u00edho okna",popup:"Javascriptov\u00e9 okno","target_blank":"Otev\u0159\u00edt v nov\u00e9m okn\u011b/r\u00e1mu","target_top":"Otev\u0159\u00edt v hlavn\u00edm okn\u011b/r\u00e1mu (nahradit v\u0161echny r\u00e1my)","target_parent":"Otev\u0159\u00edt v nad\u0159azen\u00e9m okn\u011b/r\u00e1mu","target_same":"Otev\u0159\u00edt v tomto okn\u011b/r\u00e1mu","anchor_names":"Z\u00e1lo\u017eka","popup_opts":"Mo\u017enosti","advanced_props":"Roz\u0161\u00ed\u0159en\u00e9 parametry","event_props":"Ud\u00e1losti","popup_props":"Vlastnosti vyskakovac\u00edho okna","general_props":"Obecn\u00e9 parametry","advanced_tab":"Roz\u0161\u00ed\u0159en\u00e9","events_tab":"Ud\u00e1losti","popup_tab":"Vyskakovac\u00ed okno","general_tab":"Obecn\u00e9",list:"Seznam odkaz\u016f","is_external":"Zadan\u00e9 URL vypad\u00e1 jako extern\u00ed odkaz, chcete doplnit povinn\u00fd prefix http://?","is_email":"Zadan\u00e9 URL vypad\u00e1 jako e-mailov\u00e1 adresa, chcete doplnit povinn\u00fd prefix mailto:?",titlefield:"Titulek",target:"C\u00edl",url:"URL odkazu",title:"Vlo\u017eit/upravit odkaz","link_list":"Seznam odkaz\u016f",rtl:"Zprava doleva",ltr:"Zleva doprava",accesskey:"Kl\u00e1vesov\u00e1 zkratka",tabindex:"Po\u0159ad\u00ed pro tabul\u00e1tor",rev:"Vztah c\u00edle ke str\u00e1nce",rel:"Vztah str\u00e1nky k c\u00edli",mime:"MIME typ",encoding:"K\u00f3dov\u00e1n\u00ed",langcode:"K\u00f3d jazyka","target_langcode":"Jazyk c\u00edle",width:"\u0160\u00ed\u0159ka",height:"V\u00fd\u0161ka"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cy_dlg.js
new file mode 100644
index 000000000..770aeea9d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.advlink_dlg',{"target_name":"Enw targed",classes:"Dosbarthiadau",style:"Arddull",id:"Id","popup_position":"Safle (X/Y)",langdir:"Cyfeiriad iaith","popup_size":"Maint","popup_dependent":"Dibynnol (dim ond Mozilla/Firefox)","popup_resizable":"Gwneud ffenest yn ailfeintiol","popup_location":"Dangos bar lleoliad","popup_menubar":"Dangos bar dewislen","popup_toolbar":"Dangos barrau offer","popup_statusbar":"Dangor bar statws","popup_scrollbars":"Dangos bar sgrolio","popup_return":"Mewnosod \'return false\'","popup_name":"Enw ffenest","popup_url":"URL naidlen",popup:"Naidlen JavaScript","target_blank":"Agor mewn ffenest newydd","target_top":"Agor mewn pen ffr\u00e2m (amnewid pob ffr\u00e2m)","target_parent":"Agos mewn y ffenest / ffr\u00e2m rhiant","target_same":"Agos mewn y ffenest / ffr\u00e2m yma","anchor_names":"Angorau","popup_opts":"Dewisiadau","advanced_props":"Priodweddau uwch","event_props":"Digwyddiadau","popup_props":"Priodweddau cyffredinol","general_props":"Priodweddau cyfferdinol","advanced_tab":"Uwch","events_tab":"Digwyddiadau","popup_tab":"Naidlen","general_tab":"Cyffredinol",list:"Rhestr cysylltau","is_external":"Mae\'r URL a rydych wedi rhoi yn edrych fel cyswllt allannol, ydych chi eisiau ychwanegu\'r rhagddodiad http:// sydd angen?","is_email":"Mae\'r URL a rydych wedi rhoi yn edrych fel cyferiad e-bost, ydych chi eisiau ychwanegu\'r rhagddodiad mailto: sydd angen?",titlefield:"Teitl",target:"Targed",url:"URL cyswllt",title:"Mewnosod/Golygu cyswllt","link_list":"Rhestr cysylltau",rtl:"De i\'r chwith",ltr:"Chwith i\'r dde",accesskey:"Bysell mynediad",tabindex:"Trefn tabio",rev:"Perthynas y targed i\'r tudalen",rel:"Perthynas y tudalen i\'r targed",mime:"Math MIME targed",encoding:"Amgodiad nodau targed",langcode:"Cod iaith","target_langcode":"Iaith targed",width:"Lled",height:"Uchder"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/da_dlg.js
new file mode 100644
index 000000000..06f7fe3d8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.advlink_dlg',{"target_name":"Destinationsnavn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Position (X/Y)",langdir:"Sprogretning","popup_size":"St\u00f8rrelse","popup_dependent":"Afh\u00e6ngig (Kun Mozilla/Firefox)","popup_resizable":"Lad det v\u00e6re muligt at \u00e6ndre st\u00f8rrelsen p\u00e5 vinduet","popup_location":"Vis adresselinje","popup_menubar":"Vis menulinje","popup_toolbar":"Vis v\u00e6rkt\u00f8jslinjer","popup_statusbar":"Vis statuslinje","popup_scrollbars":"Vis rullepanel","popup_return":"Inds\u00e6t \'return false\'","popup_name":"Vinduesnavn","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u00c5ben i nyt vindue","target_top":"\u00c5ben i \u00f8verste vindue / ramme (erstatter alle rammer)","target_parent":"\u00c5ben i overliggende vindue / ramme","target_same":"\u00c5ben i dette vindue / ramme","anchor_names":"Ankre","popup_opts":"Indstillinger","advanced_props":"Avancerede egenskaber","event_props":"H\u00e6ndelser","popup_props":"Popup egenskaber","general_props":"Generelle egenskaber","advanced_tab":"Advanceret","events_tab":"H\u00e6ndelser","popup_tab":"Popup","general_tab":"Generelt",list:"Liste over links","is_external":"Den URL, der er indtastet, ser ud til at v\u00e6re et eksternt link. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede http:// foran?","is_email":"Den URL, der er indtastet, ser ud til at v\u00e6re en emailadresse. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede mailto: foran?",titlefield:"Titel",target:"M\u00e5l",url:"Link URL",title:"Inds\u00e6t/rediger link","link_list":"Liste over links",rtl:"H\u00f8jre mod venstre",ltr:"Venstre mod h\u00f8jre",accesskey:"Genvejstast",tabindex:"Tabindex",rev:"Relativ destination til side",rel:"Relativ side til destination",mime:"Destinations-MIME-type",encoding:"Destinationstegns\u00e6t",langcode:"Sprogkode","target_langcode":"Destinationssprog",width:"Bredde",height:"H\u00f8jde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/de_dlg.js
new file mode 100644
index 000000000..bb0d3e35b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.advlink_dlg',{"target_name":"Name der Zielseite",classes:"Klassen",style:"Format",id:"ID","popup_position":"Position (X/Y)",langdir:"Schriftrichtung","popup_size":"Gr\u00f6\u00dfe","popup_dependent":"Vom Elternfenster abh\u00e4ngig <br /> (nur Mozilla/Firefox) ","popup_resizable":"Vergr\u00f6\u00dfern des Fenster zulassen","popup_location":"Adressleiste anzeigen","popup_menubar":"Browsermen\u00fc anzeigen","popup_toolbar":"Werkzeugleisten anzeigen","popup_statusbar":"Statusleiste anzeigen","popup_scrollbars":"Scrollbalken anzeigen","popup_return":"Link trotz Popup folgen","popup_name":"Name des Fensters","popup_url":"Popup-Adresse",popup:"JavaScript-Popup","target_blank":"In neuem Fenster \u00f6ffnen","target_top":"Im obersten Frame \u00f6ffnen (sprengt das Frameset)","target_parent":"Im \u00fcbergeordneten Fenster/Frame \u00f6ffnen","target_same":"Im selben Fenster/Frame \u00f6ffnen","anchor_names":"Anker","popup_opts":"Optionen","advanced_props":"Erweiterte Eigenschaften","event_props":"Ereignisse","popup_props":"Popup-Eigenschaften","general_props":"Allemeine Eigenschaften","advanced_tab":"Erweitert","events_tab":"Ereignisse","popup_tab":"Popup","general_tab":"Allgemein",list:"Linkliste","is_external":"Diese Adresse scheint ein externer Link zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"http://\" voranstellen?","is_email":"Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"mailto:\" voranstellen?",titlefield:"Titel",target:"Fenster",url:"Adresse",title:"Link einf\u00fcgen/bearbeiten","link_list":"Linkliste",rtl:"Rechts nach links",ltr:"Links nach rechts",accesskey:"Tastenk\u00fcrzel",tabindex:"Tabindex",rev:"Beziehung des Linkziels zur Seite",rel:"Beziehung der Seite zum Linkziel",mime:"MIME-Type der Zielseite",encoding:"Zeichenkodierung der Zielseite",langcode:"Sprachcode","target_langcode":"Sprache der Zielseite",width:"Breite",height:"H\u00f6he"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/dv_dlg.js
new file mode 100644
index 000000000..8a326f876
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/el_dlg.js
new file mode 100644
index 000000000..dc093991e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.advlink_dlg',{"target_name":"\u038c\u03bd\u03bf\u03bc\u03b1 \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",classes:"\u039a\u03bb\u03ac\u03c3\u03b5\u03b9\u03c2",style:"\u03a3\u03c4\u03c5\u03bb",id:"Id","popup_position":"\u0398\u03ad\u03c3\u03b7 (X/Y)",langdir:"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2","popup_size":"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2","popup_dependent":"\u0395\u03be\u03b1\u03c1\u03c4\u03ce\u03bc\u03b5\u03bd\u03bf (\u03bc\u03cc\u03bd\u03bf \u03b3\u03b9\u03b1 Mozilla/Firefox)","popup_resizable":"\u039d\u03b1 \u03b1\u03bb\u03bb\u03ac\u03b6\u03bf\u03c5\u03bd \u03bf\u03b9 \u03b4\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 \u03c0\u03b1\u03c1\u03b1\u03b8\u03cd\u03c1\u03bf\u03c5","popup_location":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c4\u03bf\u03c0\u03bf\u03b8\u03b5\u03c3\u03af\u03b1\u03c2","popup_menubar":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03bc\u03b5\u03bd\u03bf\u03cd","popup_toolbar":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd","popup_statusbar":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7\u03c2","popup_scrollbars":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c1\u03ac\u03b2\u03b4\u03c9\u03bd \u03ba\u03cd\u03bb\u03b9\u03c3\u03b7\u03c2","popup_return":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \'return false\'","popup_name":"\u038c\u03bd\u03bf\u03bc\u03b1 \u03c0\u03b1\u03c1\u03b1\u03b8\u03cd\u03c1\u03bf\u03c5","popup_url":"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c4\u03bf\u03c5 Popup",popup:"Javascript popup","target_blank":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03b5 \u03bd\u03ad\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf","target_top":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03c4\u03bf \u03c0\u03b9\u03bf \u03c0\u03ac\u03bd\u03c9 frame (\u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03b8\u03b9\u03c3\u03c4\u03ac \u03cc\u03bb\u03b1 \u03c4\u03b1 frames)","target_parent":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03c4\u03bf \u03b3\u03bf\u03bd\u03b9\u03ba\u03cc window / frame","target_same":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03b5 \u03af\u03b4\u03b9\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf / frame","anchor_names":"Anchors","popup_opts":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2","advanced_props":"\u03a0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b9\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","event_props":"\u0393\u03b5\u03b3\u03bf\u03bd\u03cc\u03c4\u03b1","popup_props":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 Popup","general_props":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ad\u03c2 \u03b9\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","advanced_tab":"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2","events_tab":"\u0393\u03b5\u03b3\u03bf\u03bd\u03cc\u03c4\u03b1","popup_tab":"Popup","general_tab":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac",list:"\u039b\u03af\u03c3\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd","is_external":"\u0397 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b1\u03c4\u03b5 \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2, \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c4\u03b5\u03b8\u03b5\u03af \u03c4\u03bf \u03b1\u03c0\u03b1\u03c1\u03b1\u03af\u03c4\u03b7\u03c4\u03bf http:// ;","is_email":"\u0397 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b1\u03c4\u03b5 \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 email, \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c4\u03b5\u03b8\u03b5\u03af \u03c4\u03bf \u03b1\u03c0\u03b1\u03c1\u03b1\u03af\u03c4\u03b7\u03c4\u03bf mailto: ;",titlefield:"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2",target:"\u03a3\u03c4\u03cc\u03c7\u03bf\u03c2",url:"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5",title:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","link_list":"\u039b\u03af\u03c3\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd",rtl:"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",ltr:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac",accesskey:"\u03a0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2",tabindex:"Tabindex",rev:"\u03a3\u03c7\u03ad\u03c3\u03b7 \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5 \u03c0\u03c1\u03bf\u03c2 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1 (REV)",rel:"\u03a3\u03c7\u03ad\u03c3\u03b7 \u03c3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2 \u03c0\u03c1\u03bf\u03c2 \u03c3\u03c4\u03cc\u03c7\u03bf (REL)",mime:"\u03a4\u03cd\u03c0\u03bf\u03c2 MIME \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",encoding:"\u039a\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",langcode:"\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2","target_langcode":"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1 \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",width:"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",height:"\u038e\u03c8\u03bf\u03c2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/en_dlg.js
new file mode 100644
index 000000000..3169a5658
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/eo_dlg.js
new file mode 100644
index 000000000..2d13c2c2d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.advlink_dlg',{"target_name":"Nomo de celo",classes:"Klasoj",style:"Stilo",id:"Id","popup_position":"Pozicio (X/Y)",langdir:"Tekstodirekto","popup_size":"Grandeco","popup_dependent":"Dependa (nur Mozilla/Firefox)","popup_resizable":"Permesi \u015dan\u011di la grandecon de fenestro","popup_location":"Montri adresbreton","popup_menubar":"Montri menubreton","popup_toolbar":"Montri ilobreton","popup_statusbar":"Montri statbreton","popup_scrollbars":"Montri rulumskalojn","popup_return":"Enmeti \"return false\"","popup_name":"Nomo de la fenestro","popup_url":"URL de la \u015dprucfenestro",popup:"\u015cprucfenestro Javascript","target_blank":"Malfermi en novan fenestron","target_top":"Malfermi en la plej supran nivelon (anstata\u016digas \u0109iujn kadrojn)","target_parent":"Malfermi en la patran fenestron/kadron","target_same":"Malfermi en \u0109i tiun fenestron/kadron","anchor_names":"Ankroj","popup_opts":"Agordoj","advanced_props":"Spertaj atributoj","event_props":"Eventoj","popup_props":"Atributoj de \u015dprucfenestro","general_props":"\u011ceneralaj atributoj","advanced_tab":"Spertaj","events_tab":"Eventoj","popup_tab":"\u015cprucfenestro","general_tab":"\u011ceneralaj",list:"Listo de ligiloj","is_external":"La entajpita adreso \u015dajne kondukas al ekstera ligilo. \u0108u vi volas aldoni la necesan prefikson http://?","is_email":"La entajpita adreso \u015dajnas retpo\u015dtadreso. \u0108u vi volas aldoni la necesan prefikson mailto:?",titlefield:"Titolo",target:"Celo",url:"Adreso de ligilo",title:"Enmeti/redakti ligilon","link_list":"Listo de ligiloj",rtl:"Dekstre-Maldekstren",ltr:"Maldekstre-Dekstren",accesskey:"Alir\u015dlosilo",tabindex:"TabIndekso",rev:"Rilato celo/pa\u011do",rel:"Rilato pa\u011do/celo",mime:"MIME-Tipo de la celo",encoding:"Signa enkodigo",langcode:"Lingvokodo","target_langcode":"Cellingvo",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/es_dlg.js
new file mode 100644
index 000000000..2f48a3715
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.advlink_dlg',{"target_name":"Nombre del Target",classes:"Clases",style:"Estilo",id:"Id","popup_position":"Posici\u00f3n (X/Y)",langdir:"Direcci\u00f3n del lenguaje","popup_size":"Tama\u00f1o","popup_dependent":"Dependientes (s\u00f3lo Mozilla/Firefox)","popup_resizable":"Permitir cambiar el tama\u00f1o de la ventana","popup_location":"Barra de localizaci\u00f3n","popup_menubar":"Barra de men\u00fa","popup_toolbar":"Barra de herramientas","popup_statusbar":"Barra de estado","popup_scrollbars":"Barras de desplazamiento","popup_return":"Insertar \'return false\'","popup_name":"Nombre de la ventana","popup_url":"URL de la ventana emergente",popup:"Javascript popup","target_blank":"Abrir en ventana nueva","target_top":"Abrir en el marco superior (reemplaza todos los marcos)","target_parent":"Abrir en ventana padre / marco","target_same":"Abrir en esta ventana / marco","anchor_names":"Anclas","popup_opts":"Opciones","advanced_props":"Propiedades avanzadas","event_props":"Eventos","popup_props":"Propiedades de ventanas emergentes","general_props":"Propiedades generales","advanced_tab":"Avanzado","events_tab":"Eventos","popup_tab":"Ventana emergente","general_tab":"General",list:"Lista de v\u00ednculos","is_external":"La URL que ha introducido parece ser un v\u00ednculo externo, \u00bfdesea agregar el prefijo http:// necesario?","is_email":"La URL que ha introducido parece ser una direci\u00f3n de correo, \u00bfdesea agregar el prefijo mailto: necesario?",titlefield:"T\u00edtulo",target:"Destino",url:"URL del hiperv\u00ednculo",title:"Insertar/editar hiperv\u00ednculo","link_list":"Lista de v\u00ednculo",rtl:"Derecha a izquierda",ltr:"Izquierda a derecha",accesskey:"Tecla de acceso",tabindex:"Indice de tabulaci\u00f3n",rev:"Relaci\u00f3n target a p\u00e1gina",rel:"Relaci\u00f3n p\u00e1gina a target",mime:"Tipo MIME del Target",encoding:"Codificaci\u00f3n de caracteres del Target",langcode:"C\u00f3digo del lenguaje","target_langcode":"Lenguaje del Target",width:"Ancho",height:"Alto"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/et_dlg.js
new file mode 100644
index 000000000..f8431bdea
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.advlink_dlg',{"target_name":"Sihtm\u00e4rgi nimi",classes:"Klassid",style:"Stiil",id:"ID","popup_position":"Positsioon (X/Y)",langdir:"Keele suund","popup_size":"Suurus","popup_dependent":"S\u00f5ltuv (ainult Mozilla/Firefox)","popup_resizable":"Muuda akna suurus muudetavaks","popup_location":"N\u00e4ita asukohariba","popup_menubar":"N\u00e4ita men\u00fc\u00fcriba","popup_toolbar":"N\u00e4ita seadistusriba","popup_statusbar":"N\u00e4ita staatuse riba","popup_scrollbars":"N\u00e4ita kerimisribasid","popup_return":"Sisesta \'tagasiminek eba\u00f5nnestus\'","popup_name":"Akna nimi","popup_url":"Pop-up\u2019i URL",popup:"Javascript\u2019i pop-up","target_blank":"Ava uues aknas","target_top":"Ava k\u00f5rgeimas raamis (asenda k\u00f5ik raamid)","target_parent":"Ava pea-aknas/raamis","target_same":"Ava selles aknas/raamis","anchor_names":"Ankrud","popup_opts":"Valikud","advanced_props":"\u00dcldised seadistused","event_props":"S\u00fcndmused","popup_props":"Pop-up\u2019i seadistus","general_props":"\u00dcldised seadistused","advanced_tab":"P\u00f5hjalikum","events_tab":"S\u00fcndmused","popup_tab":"Pop-up","general_tab":"\u00dcldine",list:"Linkide nimekiri","is_external":"URL, mille sisestasid, tundub olevat v\u00e4line link, kas soovid sellele lisada http://?","is_email":" URL, mille sisestasid, tundub olevat e-posti aadress, kas soovid sellele lisada mailto: funktsiooni?",titlefield:"Pealkiri",target:"Sihtm\u00e4rk",url:" URL\u2019i link",title:"Sisesta muuda linki","link_list":"Linkide list",rtl:"Paremalt vasakule",ltr:"Vasakult paremale",accesskey:"Ligip\u00e4\u00e4suklahv",tabindex:"Sisujuht",rev:"Seo sihtm\u00e4rk lehega",rel:"Seo leht sihtm\u00e4rgiga",mime:"M\u00e4rgista MIME t\u00fc\u00fcp",encoding:"Sihtm\u00e4rgi kodeering",langcode:"Keele kood","target_langcode":"Sihtm\u00e4rgi keel",width:"Laius",height:"K\u00f5rgus"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/eu_dlg.js
new file mode 100644
index 000000000..5e6c7ef52
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.advlink_dlg',{"target_name":"Helburuaren izena",classes:"Klaseak",style:"Estiloa",id:"Id","popup_position":"Kokapena (X/Y)",langdir:"Hizkuntzaren norabidea","popup_size":"Tamaina","popup_dependent":"Menpekoa (Mozilla/Firefoxen bakarrik)","popup_resizable":"Leihoaren tamaina aldatzea aktibatu","popup_location":"Helbide-barra erakutsi","popup_menubar":"Menu-barra erakutsi","popup_toolbar":"Tresna-barrak erakutsi","popup_statusbar":"Egoera-barra erakutsi","popup_scrollbars":"Gora-behera barra erakutsi","popup_return":"\'return false\' txertatu","popup_name":"Leihoaren izena","popup_url":"Popuparen URL helbidea",popup:"Javascript popupa","target_blank":"Leiho berrian ireki","target_top":"Gorengo markoan ireki (marko guztiak ordezkatzen ditu)","target_parent":"Leiho/marko gurasoan ireki","target_same":"Leiho/marko honetan ireki","anchor_names":"Aingurak","popup_opts":"Aukerak","advanced_props":"Aukera aurreratuak","event_props":"Ebentuak","popup_props":"Popuparen aukerak","general_props":"Aukera orokorrak","advanced_tab":"Gehigarriak","events_tab":"Ebentuak","popup_tab":"Popupa","general_tab":"Orokorra",list:"Lotura-zerrenda","is_external":"Sartutako helbideak kanpoko webgune batena dirudi, aurretik http:// gehitzea nahi duzu?","is_email":"Sartutako helbideak e-posta bat dirudi, aurretik mailto: gehitzea nahi duzu?",titlefield:"Izenburua",target:"Helburua",url:"Loturaren URL helbidea",title:"Lotura txertatu/editatu","link_list":"Lotura-zerrenda",rtl:"Eskuinetik ezkerrera",ltr:"Ezkerretik eskuinera",accesskey:"Laster-tekla",tabindex:"Tabulazio ordena",rev:"Helburuaren eta orrialdearen arteko erlazioa",rel:"Orrialdearen eta helburuaren arteko erlazioa",mime:"Helburuaren MIME mota",encoding:"Helburuaren karaktere-kodeketa",langcode:"Hizkuntza-kodea","target_langcode":"Helburu-hizkuntza",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fa_dlg.js
new file mode 100644
index 000000000..d500971a7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.advlink_dlg',{"target_name":"\u0646\u0627\u0645 \u0645\u0642\u0635\u062f (Target)",classes:"\u06a9\u0644\u0627\u0633 \u0647\u0627",style:"\u0627\u0633\u062a\u0627\u06cc\u0644",id:"\u0634\u0646\u0627\u0633\u0647","popup_position":"\u0645\u0648\u0642\u0639\u06cc\u062a (X/Y)",langdir:"\u062c\u0647\u062a \u0632\u0628\u0627\u0646","popup_size":"\u0627\u0646\u062f\u0627\u0632\u0647","popup_dependent":"\u0648\u0627\u0628\u0633\u062a\u0647 (\u0641\u0642\u0637 Mozilla/Firefox)","popup_resizable":"\u0627\u06cc\u062c\u0627\u062f \u067e\u0646\u062c\u0631\u0647 \u0642\u0627\u0628\u0644 \u0627\u0646\u062f\u0627\u0632\u0647 \u0628\u0646\u062f\u06cc \u0645\u062c\u062f\u062f","popup_location":"\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u0627\u0631 \u0645\u06a9\u0627\u0646","popup_menubar":"\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u0627\u0631 \u0645\u0646\u0648","popup_toolbar":"\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631","popup_statusbar":"\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u0627\u0631 \u0648\u0636\u0639\u06cc\u062a","popup_scrollbars":"\u0646\u0645\u0627\u06cc\u0634 \u0646\u0648\u0627\u0631 \u067e\u06cc\u0645\u0627\u06cc\u0634 \u0647\u0627","popup_return":"\u062f\u0631\u062c \'return false\'","popup_name":"\u0646\u0627\u0645 \u067e\u0646\u062c\u0631\u0647","popup_url":"\u0622\u062f\u0631\u0633 \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648 (Popup)",popup:"\u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648\u06cc Javascript","target_blank":"\u0628\u0627\u0632\u0634\u062f\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u062c\u062f\u06cc\u062f","target_top":"\u0628\u0627\u0632\u0634\u062f\u0646 \u062f\u0631 \u0642\u0627\u0628 \u0628\u0627\u0644\u0627 (Top Frame) (\u062a\u0645\u0627\u0645\u06cc \u0642\u0627\u0628 \u0647\u0627 \u0631\u0627 \u062a\u0639\u0648\u06cc\u0636 \u0645\u06cc \u06a9\u0646\u062f)","target_parent":"\u0628\u0627\u0632\u0634\u062f\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 / \u0642\u0627\u0628 \u0648\u0627\u0644\u062f (Parent Frame)","target_same":"\u0628\u0627\u0632\u0634\u062f\u0646 \u062f\u0631 \u0627\u06cc\u0646 \u067e\u0646\u062c\u0631\u0647 / \u0642\u0627\u0628 (Frame)","anchor_names":"\u0644\u0646\u06af\u0631\u0647\u0627 (Anchor)","popup_opts":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a","advanced_props":"\u0645\u0634\u062e\u0635\u0627\u062a \u067e\u06cc\u0634\u0631\u0641\u062a\u0647","event_props":"\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627","popup_props":"\u0645\u0634\u062e\u0635\u0627\u062a \u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648 (Popup)","general_props":"\u0645\u0634\u062e\u0635\u0627\u062a \u0639\u0645\u0648\u0645\u06cc","advanced_tab":"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647","events_tab":"\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627","popup_tab":"\u067e\u0646\u062c\u0631\u0647 \u0628\u0627\u0632\u0634\u0648 (Popup)","general_tab":"\u0639\u0645\u0648\u0645\u06cc",list:"\u0644\u06cc\u0633\u062a \u0644\u06cc\u0646\u06a9","is_external":"\u0622\u062f\u0631\u0633 \u0648\u0628\u06cc \u06a9\u0647 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0622\u06cc\u062f \u06a9\u0647 \u06cc\u06a9 \u0644\u06cc\u0646\u06a9 \u062e\u0627\u0631\u062c\u06cc \u0645\u06cc \u0628\u0627\u0634\u062f \u060c \u0622\u06cc\u0627 \u0645\u0627\u06cc\u0644\u06cc\u062f \u062a\u0627 \u067e\u06cc\u0634\u0648\u0646\u062f \u0644\u0627\u0632\u0645\u0647 //:http \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f\u061f","is_email":"\u0622\u062f\u0631\u0633 \u0648\u0628\u06cc \u06a9\u0647 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u062f \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0622\u06cc\u062f \u06a9\u0647 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644 \u0645\u06cc \u0628\u0627\u0634\u062f \u060c \u0622\u06cc\u0627 \u0645\u0627\u06cc\u0644\u06cc\u062f \u062a\u0627 \u067e\u06cc\u0634\u0648\u0646\u062f \u0644\u0627\u0632\u0645\u0647 :mailto \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f\u061f",titlefield:"\u0639\u0646\u0648\u0627\u0646",target:"\u0645\u0642\u0635\u062f (Target)",url:"\u0622\u062f\u0631\u0633 \u0644\u06cc\u0646\u06a9",title:"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u06cc\u0646\u06a9","link_list":"\u0644\u06cc\u0633\u062a \u0644\u06cc\u0646\u06a9",rtl:"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e",ltr:"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a",accesskey:"\u06a9\u0644\u06cc\u062f \u062f\u0633\u062a\u0631\u0633\u06cc",tabindex:"TabIndex",rev:"\u0631\u0627\u0628\u0637\u0647 \u0645\u0642\u0635\u062f (Target) \u0628\u0627 \u0635\u0641\u062d\u0647",rel:"\u0631\u0627\u0628\u0637\u0647 \u0635\u0641\u062d\u0647 \u0628\u0627 \u0645\u0642\u0635\u062f (Target)",mime:"\u0646\u0648\u0639 MIME \u0645\u0642\u0635\u062f (Target)",encoding:"\u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0645\u0642\u0635\u062f (Target)",langcode:"\u06a9\u062f \u0632\u0628\u0627\u0646","target_langcode":"\u0632\u0628\u0627\u0646 \u0645\u0642\u0635\u062f (Target)",width:"\u067e\u0647\u0646\u0627",height:"\u0627\u0631\u062a\u0641\u0627\u0639"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fi_dlg.js
new file mode 100644
index 000000000..e49488e73
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.advlink_dlg',{"target_name":"Kohteen nimi",classes:"Luokat",style:"Tyyli",id:"Id","popup_position":"Sijainti (X/Y)",langdir:"Kielen suunta","popup_size":"Koko","popup_dependent":"Riippuvainen (vain Mozilla/Firefox)","popup_resizable":"Tee ikkunan koko muokattavaksi","popup_location":"N\u00e4yt\u00e4 sijaintipalkki","popup_menubar":"N\u00e4yt\u00e4 valikkopalkki","popup_toolbar":"N\u00e4yt\u00e4 ty\u00f6kalut","popup_statusbar":"N\u00e4yt\u00e4 tilapalkki","popup_scrollbars":"N\u00e4yt\u00e4 vierityspalkit","popup_return":"Lis\u00e4\u00e4 \'return false\'","popup_name":"Ikkunan nimi","popup_url":"Ponnahdusikkunan URL",popup:"JavaScript-ponnahdusikkuna","target_blank":"Avaa uudessa ikkunassa","target_top":"Avaa ylimm\u00e4ss\u00e4 ruudussa (korvaa kaikki ruudut)","target_parent":"Avaa ylemm\u00e4ss\u00e4 ikkunassa","target_same":"Avaa t\u00e4ss\u00e4 ikkunassa","anchor_names":"Ankkurit","popup_opts":"Valinta","advanced_props":"Edistyneet asetukset","event_props":"Tapahtumat (events)","popup_props":"Ponnahdusikkunan asetukset","general_props":"Yleiset asetukset","advanced_tab":"Edistynyt","events_tab":"Tapahtumat","popup_tab":"Ponnahdusikkuna","general_tab":"Yleiset",list:"Linkkilista","is_external":"Sy\u00f6tt\u00e4m\u00e4si URL n\u00e4ytt\u00e4\u00e4 olevan sivuston ulkoinen osoite, haluatko lis\u00e4t\u00e4 http://-etuliitteen?","is_email":"Sy\u00f6tt\u00e4m\u00e4si URL n\u00e4ytt\u00e4\u00e4 olevan s\u00e4hk\u00f6postiosoite, haluatko lis\u00e4t\u00e4 mailto:-etuliitteen?",titlefield:"Otsikko",target:"Kohde (target)",url:"Linkin URL",title:"Lis\u00e4\u00e4/muokkaa linkki\u00e4","link_list":"Linkkilista",rtl:"Oikealta vasemmalle",ltr:"Vasemmalta oikealle",accesskey:"Pikan\u00e4pp\u00e4in",tabindex:"Tabulaattori-indeksi",rev:"Kohteen suhde sivuun",rel:"Sivun suhde kohteeseen",mime:"Kohteen MIME-tyyppi",encoding:"Kohteen merkist\u00f6koodaus",langcode:"Kielen koodi","target_langcode":"Kohteen kieli",width:"Leveys",height:"Korkeus"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fr_dlg.js
new file mode 100644
index 000000000..38e5a7858
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.advlink_dlg',{"target_name":"Nom de la cible",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Sens de lecture","popup_size":"Taille","popup_dependent":"D\u00e9pendante (seulement sous Mozilla/Firefox)","popup_resizable":"Autoriser le redimensionnement de la fen\u00eatre","popup_location":"Afficher la barre d\'adresse","popup_menubar":"Afficher la barre de menu","popup_toolbar":"Afficher la barre d\'outils","popup_statusbar":"Afficher la barre d\'\u00e9tat","popup_scrollbars":"Afficher les ascenseurs","popup_return":"Ins\u00e9rer \'return false\'","popup_name":"Nom de la fen\u00eatre","popup_url":"URL de la popup",popup:"Popup Javascript","target_blank":"Ouvrir dans une nouvelle fen\u00eatre","target_top":"Ouvrir dans le cadre principal (remplace tous les cadres)","target_parent":"Ouvrir dans la fen\u00eatre / le cadre parent","target_same":"Ouvrir dans cette fen\u00eatre / dans ce cadre","anchor_names":"Ancres","popup_opts":"Options","advanced_props":"Propri\u00e9t\u00e9s avanc\u00e9es","event_props":"\u00c9v\u00e8nements","popup_props":"Propri\u00e9t\u00e9s de la popup","general_props":"Propri\u00e9t\u00e9s g\u00e9n\u00e9rales","advanced_tab":"Avanc\u00e9","events_tab":"\u00c9v\u00e8nements","popup_tab":"Popup","general_tab":"G\u00e9n\u00e9ral",list:"Liste de liens","is_external":"L\'URL que vous avez saisie semble \u00eatre une adresse web externe. Souhaitez-vous ajouter le pr\u00e9fixe \u00ab http:// \u00bb ?","is_email":"L\'URL que vous avez saisie semble \u00eatre une adresse e-mail, souhaitez-vous ajouter le pr\u00e9fixe \u00ab mailto: \u00bb ?",titlefield:"Titre",target:"Cible",url:"URL du lien",title:"Ins\u00e9rer / \u00e9diter un lien","link_list":"Liste des liens",rtl:"Droite \u00e0 gauche",ltr:"Gauche \u00e0 droite",accesskey:"Touche d\'acc\u00e8s rapide",tabindex:"Tabindex",rev:"Relation de la cible \u00e0 la page",rel:"Relation de la page \u00e0 la cible",mime:"Type MIME de la cible",encoding:"Encodage de la cible",langcode:"Code de la langue","target_langcode":"Langue de la cible",width:"Largeur",height:"Hauteur"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/gl_dlg.js
new file mode 100644
index 000000000..8b38a8e7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.advlink_dlg',{"target_name":"Nome do obxetivo",classes:"Clases",style:"Estilo",id:"Id","popup_position":"Posici\u00f3n (X/Y)",langdir:"Direcci\u00f3n da lenguaxe","popup_size":"Tama\u00f1o","popup_dependent":"Dependentes (s\u00f3lo Mozilla/Firefox)","popup_resizable":"Permitir cambia-lo tama\u00f1o da vent\u00e1","popup_location":"Barra de localizaci\u00f3n","popup_menubar":"Barra de men\u00fa","popup_toolbar":"Barra de ferramentas","popup_statusbar":"Barra de estado","popup_scrollbars":"Barras de desprazamento","popup_return":"Insertar \'return false\'","popup_name":"Nome da vent\u00e1","popup_url":"URL da vent\u00e1 emerxente",popup:"Javascript popup","target_blank":"Abrir en vent\u00e1 nova","target_top":"Abrir no marco superior (reemplaza todo-los marcos)","target_parent":"Abrir na vent\u00e1 / marco padre","target_same":"Abrir nesta vent\u00e1 / marco","anchor_names":"\u00c1ncoras","popup_opts":"Opci\u00f3ns","advanced_props":"Propiedades avanzadas","event_props":"Eventos","popup_props":"Propiedades de vent\u00e1s emerxentes","general_props":"Propiedades xerales","advanced_tab":"Avanzado","events_tab":"Eventos","popup_tab":"Ventana emerxente","general_tab":"Xeral",list:"Lista de v\u00ednculos","is_external":"A URL introducida semella ser un v\u00ednculo externo, \u00bfDesexa engadi-lo prefixo necesario http://?","is_email":"A URL introducida semella ser un enderezo de e-mail, \u00bfDesexa engadi-lo prefixo necesario mailto:?",titlefield:"T\u00edtulo",target:"Destino",url:"URL do hiperv\u00ednculo",title:"Insertar/editar hiperv\u00ednculo","link_list":"Lista de v\u00ednculo",rtl:"Dereita a esquerda",ltr:"Esquerda a dereita",accesskey:"Tecla de acceso",tabindex:"\u00cdndice de tabulaci\u00f3n",rev:"Relaci\u00f3n obxetivo a p\u00e1xina",rel:"Relaci\u00f3n p\u00e1xina a obxetivo",mime:"Tipo MIME do obxetivo",encoding:"Codificaci\u00f3n de caracteres do obxetivo",langcode:"C\u00f3digo da lenguaxe","target_langcode":"Lenguaxe do obxetivo",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/gu_dlg.js
new file mode 100644
index 000000000..10464f090
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/he_dlg.js
new file mode 100644
index 000000000..7ea21bdaa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"\u05e1\u05d2\u05e0\u05d5\u05df",id:"\u05de\u05e1\u05e4\u05e8 \u05e1\u05d9\u05d3\u05d5\u05e8\u05d9","popup_position":"\u05de\u05d9\u05e7\u05d5\u05dd (X/Y)",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4","popup_size":"\u05d2\u05d5\u05d3\u05dc","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"\u05d7\u05dc\u05d5\u05df \u05d3\u05d9\u05e0\u05d0\u05de\u05d9(resizable)","popup_location":"\u05d4\u05e6\u05d2\u05ea location bar ","popup_menubar":"\u05d4\u05e6\u05d2\u05ea \u05ea\u05e4\u05e8\u05d9\u05d8","popup_toolbar":"\u05d4\u05e6\u05d2\u05ea \u05e1\u05e8\u05d2\u05dc\u05d9 \u05db\u05dc\u05d9\u05dd","popup_statusbar":"\u05d4\u05e6\u05d2\u05ea \u05e9\u05d5\u05e8\u05ea \u05e1\u05d8\u05d0\u05d8\u05d5\u05e1","popup_scrollbars":"\u05d4\u05e6\u05d2\u05ea \u05e4\u05e1 \u05d2\u05dc\u05d9\u05dc\u05d4","popup_return":"\u05d9\u05e9 \u05dc\u05d4\u05db\u05e0\u05d9\u05e1 \'return false\'","popup_name":"\u05e9\u05dd \u05d4\u05d7\u05dc\u05d5\u05df","popup_url":"\u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5 URL",popup:"\u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5 javascript","target_blank":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9","target_top":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05d7\u05dc\u05d5\u05df \u05d4\u05d1\u05df \u05d4\u05e8\u05d0\u05e9\u05d9(\u05de\u05d7\u05dc\u05d9\u05e3 \u05d0\u05ea \u05db\u05dc \u05d7\u05dc\u05d5\u05e0\u05d5\u05ea \u05d4\u05d1\u05e0\u05d9\u05dd)","target_parent":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05dc\u05d5\u05df \u05d4\u05d0\u05d1\u05d0/\u05d7\u05dc\u05d5\u05df \u05d1\u05df","target_same":"\u05e4\u05ea\u05d9\u05d7\u05d4 \u05d1\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9/\u05d7\u05dc\u05d5\u05df \u05d1\u05df","anchor_names":"\u05e7\u05d9\u05e9\u05d5\u05e8 \u05dc\u05e1\u05d9\u05de\u05e0\u05d9\u05d4","popup_opts":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea","advanced_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05de\u05ea\u05e7\u05d3\u05de\u05d5\u05ea","event_props":"\u05de\u05d0\u05d5\u05e8\u05e2\u05d5\u05ea","popup_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5","general_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05db\u05dc\u05dc\u05d9\u05d5\u05ea","advanced_tab":"\u05de\u05ea\u05e7\u05d3\u05dd","events_tab":"\u05d0\u05e8\u05d5\u05e2\u05d9\u05dd","popup_tab":"\u05d7\u05dc\u05d5\u05df \u05de\u05d5\u05e7\u05e4\u05e5","general_tab":"\u05db\u05dc\u05dc\u05d9",list:"\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd","is_external":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9 \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea http:// \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?","is_email":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05db\u05ea\u05d5\u05d1\u05ea \u05de\u05d9\u05d9\u05dc \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea MAILTO \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?",titlefield:"\u05db\u05d5\u05ea\u05e8\u05ea \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8",target:"\u05d9\u05e2\u05d3",url:"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8",title:"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","link_list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4","target_langcode":"Target language",width:"\u05e8\u05d5\u05d7\u05d1",height:"\u05d2\u05d5\u05d1\u05d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hi_dlg.js
new file mode 100644
index 000000000..5c31c6d2e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hr_dlg.js
new file mode 100644
index 000000000..37001bd12
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.advlink_dlg',{"target_name":"Ime mete",classes:"Klasa",style:"Stil",id:"Id","popup_position":"Pozicija (X/Y)",langdir:"Smjer jezika","popup_size":"Veli\u010dina","popup_dependent":"Ovisan (samo za Mozilla/Firefox)","popup_resizable":"Prozor promjenjive veli\u010dine","popup_location":"Poka\u017ei traku lokacije","popup_menubar":"Poka\u017ei izbornik","popup_toolbar":"Poka\u017ei alatne trake","popup_statusbar":"Poka\u017ei statusnu traku","popup_scrollbars":"Poka\u017ei kliza\u010de","popup_return":"Umetni \'return false\'","popup_name":"Ime prozora","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Otvori u novom prozoru","target_top":"Otvori u gornjem okviru (zamjenjuje sve okvire) (_top)","target_parent":"Otvori u izvornom prozoru / okvir","target_same":"Otovori u ovom prozoru / okviru","anchor_names":"Sidra","popup_opts":"Opcije","advanced_props":"Napredna svojstva","event_props":"Doga\u0111aji","popup_props":"Svojstva popup prozora","general_props":"Osnovna svojstva","advanced_tab":"Napredno","events_tab":"Doga\u0111aj","popup_tab":"Popup","general_tab":"Op\u0107e",list:"Lista linkova","is_external":"URL koji ste unijeli izgleda kao vanjski link, \u017eelite li dodati potrebni http:// prefiks?","is_email":"URL koji ste unijeli izgleda kao e-mail adresa, \u017eelite li dodati potrebni mailto: prefiks?",titlefield:"Naslov",target:"Meta",url:"URL linkovi",title:"Umetni/uredi link","link_list":"Lista linkova",rtl:"S desna na lijevo",ltr:"S lijeva na desno",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Odnos mete prema stranici",rel:"Odnos stranice prema meti",mime:"MIME tip",encoding:"Kodiranje znakova",langcode:"Kod jezika","target_langcode":"Jezik mete",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hu_dlg.js
new file mode 100644
index 000000000..9cf1c8fbe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.advlink_dlg',{"target_name":"C\u00e9l neve",classes:"Class-ok",style:"Style",id:"Id","popup_position":"Poz\u00edci\u00f3 (X/Y)",langdir:"Nyelv \u00edr\u00e1s ir\u00e1ny","popup_size":"M\u00e9ret","popup_dependent":"F\u00fcgg\u0151 (csak Mozilla/Firefox)","popup_resizable":"\u00c1tm\u00e9retezhet\u0151 ablak","popup_location":"C\u00edm mez\u0151 mutat\u00e1sa","popup_menubar":"Men\u00fcsor mutat\u00e1sa","popup_toolbar":"Eszk\u00f6zsor mutat\u00e1sa","popup_statusbar":"St\u00e1tuszsor mutat\u00e1sa","popup_scrollbars":"G\u00f6rget\u0151s\u00e1vok mutat\u00e1sa","popup_return":"\'return false\' besz\u00far\u00e1sa","popup_name":"Ablakn\u00e9v","popup_url":"Felugr\u00f3 ablak URL",popup:"JavaScript felugr\u00f3 ablak","target_blank":"\u00daj ablakban megnyit\u00e1s","target_top":"Azonos ablakban/keretben megnyit\u00e1s legfel\u00fcl","target_parent":"Sz\u00fcl\u0151 ablakban/keretben megnyit\u00e1s","target_same":"Azonos ablakban/keretben megnyit\u00e1s","anchor_names":"Horgonyok","popup_opts":"Be\u00e1ll\u00edt\u00e1sok","advanced_props":"Halad\u00f3 tulajdons\u00e1gok","event_props":"Esem\u00e9nyek","popup_props":"Felugr\u00f3 ablak tulajdons\u00e1gai","general_props":"\u00c1ltal\u00e1nos tulajdons\u00e1gok","advanced_tab":"Halad\u00f3","events_tab":"Esem\u00e9nyek","popup_tab":"Felugr\u00f3 ablak","general_tab":"\u00c1ltal\u00e1nos",list:"Link lista","is_external":"A be\u00edrt URL k\u00fcls\u0151 hivatkoz\u00e1snak t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges http://-t el\u00e9 tenni?","is_email":"A be\u00edrt URL e-mail c\u00edmnek t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges mailto:-t el\u00e9 tenni?",titlefield:"C\u00edm",target:"Target",url:"Link URL",title:"Link besz\u00far\u00e1s/szerkeszt\u00e9s","link_list":"Link lista",rtl:"Jobbr\u00f3l balra",ltr:"Balr\u00f3l jobbra",accesskey:"Gyorsgomb",tabindex:"Tabindex",rev:"C\u00e9l kapcsolata az oldallal",rel:"Oldal kapcsolata a c\u00e9llal",mime:"C\u00e9l MIME t\u00edpus",encoding:"C\u00e9l karakterk\u00f3dol\u00e1s",langcode:"Nyelv k\u00f3d","target_langcode":"C\u00e9l nyelv",width:"Sz\u00e9less\u00e9g",height:"Magass\u00e1g"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hy_dlg.js
new file mode 100644
index 000000000..f713e3154
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.advlink_dlg',{"target_name":"Target name",classes:"\u0534\u0561\u057d\u0565\u0580",style:"\u0548\u0573",id:"Id","popup_position":"\u054f\u0565\u0572\u0561\u056f\u0561\u0575\u0578\u0582\u0574 (X / Y)",langdir:"\u0548\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576","popup_size":"\u0549\u0561\u0583\u057d","popup_dependent":"Dependent (\u0574\u056b\u0561\u0575\u0576 Mozilla / Firefox)","popup_resizable":"\u0539\u0578\u0582\u0575\u056c\u0561\u057f\u0580\u0565\u056c \u0579\u0561\u0583\u0565\u0580\u056b \u0583\u0578\u0583\u0578\u056d\u0578\u0582\u0574","popup_location":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c location \u057e\u0561\u0570\u0561\u0576\u0561\u056f\u0568","popup_menubar":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u0574\u0565\u0576\u0575\u0578\u0582\u0576","popup_toolbar":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u0563\u0578\u0580\u056e\u056b\u0584\u0561\u0575\u056b\u0576 \u057e\u0561\u0570\u0561\u0576\u0561\u056f\u0576\u0565\u0580\u0568","popup_statusbar":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u057d\u057f\u0561\u057f\u0578\u0582\u057d\u0568","popup_scrollbars":"\u0551\u0578\u0582\u0581\u0561\u0564\u0580\u0565\u056c \u057d\u0584\u0580\u0578\u056c\u056c\u0576\u0565\u0580\u0568","popup_return":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \'return false\'","popup_name":"\u054a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u056b \u0561\u0576\u057e\u0561\u0576\u0578\u0582\u0574","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u0532\u0561\u0581\u0565\u056c \u0576\u0578\u0580 \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0578\u0582\u0574","target_top":"\u0532\u0561\u0581\u0565\u056c \u057e\u0565\u0580\u056b\u0576 \u0586\u0580\u0565\u0575\u0574\u0578\u0582\u0574 (\u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0562\u0578\u056c\u0578\u0580 \u0586\u0580\u0565\u0575\u0574\u0565\u0580\u0568)","target_parent":"\u0532\u0561\u0581\u0565\u056c \u0570\u056b\u0574\u0576\u0561\u056f\u0561\u0576 \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0578\u0582\u0574 / \u0586\u0580\u0565\u0575\u0574\u0578\u0582\u0574","target_same":"\u0532\u0561\u0581\u0565\u056c \u0561\u0575\u057d \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0578\u0582\u0574 / \u0586\u0580\u0565\u0575\u0574\u0578\u0582\u0574","anchor_names":"\u053d\u0561\u0580\u056b\u057d\u056d","popup_opts":"\u054a\u0561\u0580\u0561\u0574\u0565\u057f\u0580\u0565\u0580","advanced_props":"\u053c\u0580\u0561\u0581\u0578\u0582\u0581\u056b\u0579 \u0564\u0565\u057a\u0584\u0565\u0580","event_props":"\u0534\u0565\u057a\u0584\u0565\u0580","popup_props":"Popup \u057a\u0561\u0580\u0561\u0574\u0565\u057f\u0580\u0565\u0580","general_props":"\u0538\u0576\u0564\u0570\u0561\u0576\u0578\u0582\u0580 \u057a\u0561\u0580\u0561\u0574\u0565\u057f\u0580\u0565\u0580","advanced_tab":"\u053c\u0580\u0561\u0581\u0578\u0582\u0581\u056b\u0579","events_tab":"\u0534\u0565\u057a\u0584\u0565\u0580","popup_tab":"Popup","general_tab":"\u0540\u056b\u0574\u0576\u0561\u056f\u0561\u0576",list:"\u0540\u0572\u0578\u0582\u0574\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f","is_external":"\u0546\u0565\u0580\u0561\u056e\u057e\u0561\u056e URL \u0570\u0561\u057d\u0581\u0565\u0576 \u0576\u0574\u0561\u0576 \u0567 \u0561\u0580\u057f\u0561\u0584\u056b\u0576 \u0570\u0572\u0574\u0561\u0576, \u0534\u0578\u0582\u0584 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u055e\u0574 \u0565\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c http://","is_email":"\u0546\u0565\u0580\u0561\u056e\u057e\u0561\u056e URL \u0570\u0561\u057d\u0581\u0565\u0576 \u0576\u0574\u0561\u0576 \u0567 email \u0570\u0561\u057d\u0581\u0565\u056b, \u0534\u0578\u0582\u0584 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u055e\u0574 \u0565\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c mailto:",titlefield:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580",target:"\u0532\u0561\u0581\u0565\u056c ...",url:"\u0540\u0561\u057d\u0581\u0565",title:"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0570\u0572\u0578\u0582\u0574","link_list":"\u0540\u0572\u0578\u0582\u0574\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f",rtl:"\u0531\u057b\u056b\u0581 \u0571\u0561\u056d",ltr:"\u0541\u0561\u056d\u056b\u0581 \u0561\u057b",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"\u053c\u0565\u0566\u057e\u056b \u056f\u0578\u0564","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ia_dlg.js
new file mode 100644
index 000000000..2d6c33d32
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u6837\u5f0f\u7c7b",style:"\u6837\u5f0f",id:"Id","popup_position":"\u5750\u6807 (X/Y)",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u4ece\u5c5e\u4e8e ( \u4ec5 Mozilla/Firefox \u6709\u6548 )","popup_resizable":"\u53ef\u8c03\u6574\u7a97\u53e3\u5927\u5c0f","popup_location":"\u663e\u793a\u5730\u5740\u680f","popup_menubar":"\u663e\u793a\u83dc\u5355\u5217","popup_toolbar":"\u663e\u793a\u5de5\u5177\u5217","popup_statusbar":"\u663e\u793a\u72b6\u6001\u5217","popup_scrollbars":"\u663e\u793a\u6eda\u52a8\u6761","popup_return":"\u63d2\u5165 \'return false\'","popup_name":"\u7a97\u53e3\u540d\u79f0","popup_url":"\u5f39\u51fa\u7a97\u53e3\u5730\u5740",popup:"Javascript \u5feb\u663e\u7a97\u53e3","target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00","target_top":"\u5728\u9876\u5c42\u7a97\u53e3\u6253\u5f00","target_parent":"\u5728\u7236\u7a97\u53e3\u6253\u5f00","target_same":"\u5728\u5f53\u524d\u7a97\u53e3\u6253\u5f00","anchor_names":"\u951a\u70b9","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5feb\u663e\u7a97\u53e3\u5c5e\u6027","general_props":"\u57fa\u672c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5feb\u663e\u7a97\u53e3","general_tab":"\u57fa\u672c",list:"\u8fde\u7ed3\u6e05\u5355","is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u52a0\u4e0a http:// ?","is_email":"\u60a8\u8f93\u5165\u7684\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u52a0\u4e0a mailto: ? ",titlefield:"\u67e5\u627e",target:"\u76ee\u6807",url:"\u8fde\u7ed3\u5730\u5740",title:"\u63d2\u5165/\u7f16\u8f91 \u8fde\u7ed3","link_list":"\u8fde\u7ed3\u6e05\u5355",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",accesskey:"\u5feb\u901f\u952e",tabindex:"Tab\u7d22\u5f15",rev:"rev",rel:"rel",mime:"\u76ee\u6807 MIME \u7c7b\u578b",encoding:"\u76ee\u6807\u8bed\u8a00\u7f16\u7801",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u6807\u8bed\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/id_dlg.js
new file mode 100644
index 000000000..deff7d775
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.advlink_dlg',{"target_name":"Nama Target",classes:"Classes",style:"Style",id:"Id","popup_position":"Posisi (X/Y)",langdir:"Bahasa","popup_size":"Ukuran","popup_dependent":"Tergantung (khusus Mozilla/Firefox)","popup_resizable":"Jadikan window resizable","popup_location":"Tampilkan location bar","popup_menubar":"Tampilkan menu bar","popup_toolbar":"Tampilkan toolbars","popup_statusbar":"Tampilkan status bar","popup_scrollbars":"Tampilkan scrollbars","popup_return":"sisipkan \'return false\'","popup_name":"Nama Window","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Buka pada Window baru","target_top":"Buka pada frame atas (Gantikan semua frame)","target_parent":"Buka pada parent window/frame","target_same":"Buka pada window/frame ini","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Properti Pop-Up","general_props":"Properti Umum","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"Umum",list:"Daftar Link","is_external":"URL yang Anda sisipkan tampaknya link eksternal, Anda ingin menambahkan awalan \'http://\'?","is_email":"URL yang Anda sisipkan tampaknya e-mail, Anda ingin menambahkan awalan \'mailto:\'?",titlefield:"Judul",target:"Target",url:"Link URL",title:"Sisipkan/Ubah link","link_list":"Daftar Link",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Hubungan target dengan page",rel:"Hubungan page dengan target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Kode Bahasa","target_langcode":"Bahasa Target",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/is_dlg.js
new file mode 100644
index 000000000..a89252ee0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.advlink_dlg',{"target_name":"Target heiti",classes:"Klasi",style:"St\u00edll",id:"Id","popup_position":"Sta\u00f0setning (X/Y)",langdir:"\u00c1tt tungum\u00e1ls","popup_size":"St\u00e6r\u00f0","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Leyfa breytingu st\u00e6r\u00f0ar \u00e1 glugga","popup_location":"Birta vefsl\u00f3\u00f0","popup_menubar":"Birta valmynd","popup_toolbar":"Show toolbars","popup_statusbar":"Birta st\u00f6\u00f0u sl\u00e1","popup_scrollbars":"Birta runusl\u00e1","popup_return":"B\u00e6ta vi\u00f0 \'return false\'","popup_name":"Heiti gluggans","popup_url":"Sl\u00f3\u00f0 sprettigluggans",popup:"Javascript sprettigluggi","target_blank":"Opna \u00ed n\u00fdjum glugga","target_top":"Opna \u00ed efsta ramma (kemur \u00ed sta\u00f0inn fyrir alla ramma)","target_parent":"Opna \u00ed yfir glugga / ramma","target_same":"Opna \u00ed \u00feessum glugga / ramma","anchor_names":"Anchors","popup_opts":"M\u00f6guleikar","advanced_props":"Frekari eiginleikar","event_props":"Vi\u00f0bur\u00f0ir","popup_props":"Eiginleikar sprettiglugga","general_props":"Almennir eiginleikar","advanced_tab":"N\u00e1nar","events_tab":"Vi\u00f0bur\u00f0ir","popup_tab":"Sprettigluggi","general_tab":"Almennt",list:"Listi hlekkja","is_external":"Sl\u00f3\u00f0in sem \u00fe\u00fa skr\u00e1\u00f0ir vir\u00f0ist vera sl\u00f3\u00f0 utan vefs, vilt \u00fe\u00fa b\u00e6ta vi\u00f0 forskeytinu http://?","is_email":"Sl\u00f3\u00f0in sem \u00fe\u00fa skr\u00e1\u00f0ir vir\u00f0ist vera netfang, vilt \u00fe\u00fa b\u00e6ta vi\u00f0 forskeytinu mailto:?",titlefield:"Titill",target:"Target",url:"Sl\u00f3\u00f0",title:"Setja inn/breyta hlekk","link_list":"Listi hlekkja",rtl:"H\u00e6gri til vinstri",ltr:"Vinstri til h\u00e6gri",accesskey:"Fl\u00fdtihnappur",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"K\u00f3\u00f0i tungum\u00e1ls","target_langcode":"\u00c6tla\u00f0 tungum\u00e1l",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/it_dlg.js
new file mode 100644
index 000000000..bf19659d0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.advlink_dlg',{"target_name":"Nome target",classes:"Classe",style:"Stile",id:"Id","popup_position":"Posizione (X/Y)",langdir:"Direzione del testo","popup_size":"Dimensioni","popup_dependent":"Dipendente (Solo in Mozilla/Firefox)","popup_resizable":"Rendi la finestra ridimensionabile","popup_location":"Mostra barra navigazione","popup_menubar":"Mostra barra menu","popup_toolbar":"Mostra barre strumenti","popup_statusbar":"Mostra barra di stato","popup_scrollbars":"Mostra barre di scorrimento","popup_return":"Inserisci \'return false\'","popup_name":"Nome finestra","popup_url":"URL Popup",popup:"Popup Javascript","target_blank":"Apri in una nuova finestra","target_top":"Apri nella cornice superiore (sostituisce tutte le cornici)","target_parent":"Apri nella finestra / cornice genitore","target_same":"Apri in questa finestra / cornice","anchor_names":"Ancore","popup_opts":"Opzioni","advanced_props":"Propriet\u00e0 avanzate","event_props":"Eventi","popup_props":"Propriet\u00e0 popup","general_props":"Propriet\u00e0 generali","advanced_tab":"Avanzate","events_tab":"Eventi","popup_tab":"Popup","general_tab":"Generale",list:"Lista collegamenti","is_external":"L\'URL inserito sembra essere un link esterno. Aggiungere il necessario prefisso http:// ?","is_email":"L\'URL inserito sembra essere un indirizzo email. Aggiungere il necessario prefisso mailto: ?",titlefield:"Titolo",target:"Target",url:"URL collegamento",title:"Inserisci/modifica link","link_list":"Lista collegamenti",rtl:"Destra verso sinistra",ltr:"Sinistra verso destra",accesskey:"Carattere di accesso",tabindex:"Indice tabulazione",rev:"Relazione da target a pagina",rel:"Relazione da pagina a target",mime:"Tipo MIME del target",encoding:"Codifica carattere del target",langcode:"Lingua","target_langcode":"Lingua del target",width:"Larghezza",height:"Altezza"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ja_dlg.js
new file mode 100644
index 000000000..68ebcd2e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.advlink_dlg',{"target_name":"\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u540d\u524d",classes:"\u30af\u30e9\u30b9",style:"\u30b9\u30bf\u30a4\u30eb",id:"ID","popup_position":"\u4f4d\u7f6e (X/Y)",langdir:"\u6587\u7ae0\u306e\u65b9\u5411","popup_size":"\u5927\u304d\u3055","popup_dependent":"\u4f9d\u5b58(Mozilla\u3068Firefox\u3060\u3051)","popup_resizable":"\u30a6\u30a4\u30f3\u30c9\u30a6\u306e\u30b5\u30a4\u30ba\u5909\u66f4\u3092\u8a31\u53ef","popup_location":"\u30a2\u30c9\u30ec\u30b9\u30d0\u30fc\u3092\u8868\u793a","popup_menubar":"\u30e1\u30cb\u30e5\u30fc\u30d0\u30fc\u3092\u8868\u793a","popup_toolbar":"\u30c4\u30fc\u30eb\u30d0\u30fc\u3092\u8868\u793a","popup_statusbar":"\u30b9\u30c6\u30fc\u30bf\u30b9\u30d0\u30fc\u3092\u8868\u793a","popup_scrollbars":"\u30b9\u30af\u30ed\u30fc\u30eb\u30d0\u30fc\u3092\u8868\u793a","popup_return":"\'return false\'\u3092\u633f\u5165","popup_name":"\u30a6\u30a4\u30f3\u30c9\u30a6\u306e\u540d\u524d","popup_url":"\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7\u306eURL",popup:"Javascript\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7","target_blank":"\u65b0\u3057\u3044\u30a6\u30a4\u30f3\u30c9\u30a6\u3067\u958b\u304f","target_top":"\u30c8\u30c3\u30d7\u306e\u30d5\u30ec\u30fc\u30e0\u3067\u958b\u304f(\u3059\u3079\u3066\u306e\u30d5\u30ec\u30fc\u30e0\u3092\u7f6e\u304d\u63db\u3048)","target_parent":"\u89aa\u30a6\u30a4\u30f3\u30c9\u30a6/\u89aa\u30d5\u30ec\u30fc\u30e0\u3067\u958b\u304f","target_same":"\u3053\u306e\u30a6\u30a4\u30f3\u30c9\u30a6/\u30d5\u30ec\u30fc\u30e0\u3067\u958b\u304f","anchor_names":"\u30a2\u30f3\u30ab\u30fc","popup_opts":"\u30aa\u30d7\u30b7\u30e7\u30f3","advanced_props":"\u9ad8\u5ea6\u306a\u5c5e\u6027","event_props":"\u30a4\u30d9\u30f3\u30c8","popup_props":"\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7","general_props":"\u4e00\u822c","advanced_tab":"\u5c02\u9580\u7684","events_tab":"\u30a4\u30d9\u30f3\u30c8","popup_tab":"\u30dd\u30c3\u30d7\u30a2\u30c3\u30d7","general_tab":"\u4e00\u822c",list:"\u30ea\u30f3\u30af\u306e\u4e00\u89a7","is_external":"\u5165\u529b\u3057\u305fURL\u306f\u5916\u90e8\u306e\u30ea\u30f3\u30af\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b http:// \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?","is_email":"\u5165\u529b\u3057\u305fURL\u306f\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b mailto: \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?",titlefield:"\u30bf\u30a4\u30c8\u30eb",target:"\u30bf\u30fc\u30b2\u30c3\u30c8",url:"\u30ea\u30f3\u30af\u306eURL",title:"\u30ea\u30f3\u30af\u306e\u633f\u5165/\u7de8\u96c6","link_list":"\u30ea\u30f3\u30af\u306e\u4e00\u89a7",rtl:"\u53f3\u304b\u3089\u5de6",ltr:"\u5de6\u304b\u3089\u53f3",accesskey:"\u30a2\u30af\u30bb\u30b9\u30ad\u30fc",tabindex:"\u30bf\u30d6\u30a4\u30f3\u30c7\u30c3\u30af\u30b9",rev:"\u30bf\u30fc\u30b2\u30c3\u30c8\u304b\u3089\u30da\u30fc\u30b8\u306e\u95a2\u4fc2",rel:"\u30da\u30fc\u30b8\u304b\u3089\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u95a2\u4fc2",mime:"\u30bf\u30fc\u30b2\u30c3\u30c8\u306eMIME\u30bf\u30a4\u30d7",encoding:"\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9","target_langcode":"\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u8a00\u8a9e",width:"\u5e45",height:"\u9ad8\u3055"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ka_dlg.js
new file mode 100644
index 000000000..5ea6a4da6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.advlink_dlg',{"target_name":"\u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8",classes:"\u10d9\u10da\u10d0\u10e1\u10d4\u10d1\u10d8",style:"\u10e1\u10e2\u10d8\u10da\u10d8",id:"\u10e1\u10d0\u10ee\u10d4\u10da\u10d8","popup_position":"\u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10d0 (X/Y)",langdir:"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d1\u10d0","popup_size":"\u10d6\u10dd\u10db\u10d0","popup_dependent":"\u10d3\u10d0\u10db\u10dd\u10d9\u10d8\u10d3\u10d4\u10d1\u10e3\u10da\u10d4\u10d1\u10d0 (\u10db\u10ee\u10dd\u10da\u10dd\u10d3 Firefox)","popup_resizable":"\u10d6\u10dd\u10db\u10d8\u10e1 \u10ea\u10d5\u10da\u10d8\u10da\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10e8\u10d5\u10d4\u10d1\u10d0","popup_location":"\u10d2\u10d0\u10dc\u10da\u10d0\u10d2\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10dc\u10d4\u10da\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0","popup_menubar":"\u10db\u10d4\u10dc\u10d8\u10e3\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0","popup_toolbar":"\u10d8\u10dc\u10e1\u10e2\u10e0\u10e3\u10db\u10d4\u10dc\u10e2\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10dc\u10d4\u10da\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0","popup_statusbar":"\u10db\u10d3\u10d2\u10dd\u10db\u10d0\u10e0\u10d4\u10dd\u10d1\u10d8\u10e1 \u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0","popup_scrollbars":"\u10d2\u10d0\u10d3\u10d0\u10ee\u10d5\u10d4\u10d5\u10d8\u10e1 \u10d5\u10d4\u10da\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0","popup_return":"\'return false\' \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","popup_name":"\u10e4\u10d0\u10dc\u10ef\u10e0\u10d8\u10e1 \u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","popup_url":"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8",popup:"\u10d2\u10d0\u10e8\u10da\u10d0 Java-\u10e1 \u10d2\u10d0\u10db\u10dd\u10e7\u10d4\u10dc\u10d4\u10d1\u10d8\u10d7","target_blank":"\u10d0\u10ee\u10d0\u10da \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","target_top":"\u10d6\u10d4\u10d3\u10d0 \u10d9\u10d0\u10d3\u10e0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","target_parent":"\u10e1\u10d0\u10d9\u10e3\u10d7\u10d0\u10e0\u10d0 \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","target_same":"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","anchor_names":"\u10e6\u10e3\u10d6\u10d4\u10d1\u10d8","popup_opts":"\u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8","advanced_props":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","event_props":"\u10db\u10dd\u10d5\u10da\u10d4\u10dc\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","popup_props":"\u10d2\u10d0\u10e8\u10da\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","general_props":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","advanced_tab":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7","events_tab":"\u10db\u10dd\u10d5\u10da\u10d4\u10dc\u10d0","popup_tab":"\u10d2\u10d0\u10e8\u10da\u10d0","general_tab":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd",list:"\u10e1\u10d8\u10d0","is_external":"\u10e8\u10d4\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10d2\u10d0\u10d5\u10e1 \u10d2\u10d0\u10e0\u10d4 \u10d1\u10db\u10e3\u10da\u10e1, \u10d3\u10d0\u10d5\u10d0\u10db\u10d0\u10d7\u10dd\u10e2 \u10de\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8 http://?","is_email":" \u10e8\u10d4\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10d2\u10d0\u10d5\u10e1 \u10d4\u10da.\u10e4\u10dd\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10e1, \u10d3\u10d0\u10d5\u10d0\u10db\u10d0\u10e2\u10dd\u10d7 \u10de\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8 mailto:?",titlefield:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8",target:"\u10db\u10d8\u10d6\u10d0\u10dc\u10d8",url:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8",title:"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","link_list":"\u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0",rtl:"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5",ltr:"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",accesskey:"\u10e8\u10d4\u10e0\u10ec\u10d4\u10d5\u10d8\u10e1 \u10d2\u10d0\u10e1\u10d0\u10e6\u10d4\u10d1\u10d8",tabindex:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8",rev:"\u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10d3\u10d0\u10db\u10dd\u10d9\u10d8\u10d3\u10d4\u10d1\u10e3\u10da\u10d4\u10d1\u10d0 \u10d2\u10d5\u10d4\u10e0\u10d3\u10d7\u10d0\u10dc",rel:"\u10d2\u10d5\u10d4\u10e0\u10d3\u10d8\u10e1 \u10d3\u10d0\u10db\u10dd\u10d9\u10d8\u10d3\u10d4\u10d1\u10e3\u10da\u10d4\u10d1\u10d0 \u10db\u10d8\u10d6\u10d0\u10dc\u10d7\u10d0\u10dc",mime:"MIME \u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8",encoding:"\u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8\u10e0\u10d4\u10d1\u10d0",langcode:"\u10d4\u10dc\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8","target_langcode":"\u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10d4\u10dc\u10d0",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/kl_dlg.js
new file mode 100644
index 000000000..c3a82e022
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/km_dlg.js
new file mode 100644
index 000000000..a39ce6066
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.advlink_dlg',{"target_name":"\u1788\u17d2\u1798\u17c4\u17c7\u1782\u17c4\u179b\u178a\u17c5",classes:"\u1790\u17d2\u1793\u17b6\u1780\u17cb",style:"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",id:"\u179b\u179f.","popup_position":"\u1791\u17b8\u178f\u17b6\u17c6\u1784 (X/Y)",langdir:"\u1791\u17b7\u179f\u178a\u17c5\u1797\u17b6\u179f\u17b6","popup_size":"\u1791\u17c6\u17a0\u17c6","popup_dependent":"\u17a2\u17b6\u179f\u17d2\u179a\u17d0\u1799 (Mozilla/Firefox \u178f\u17c2\u1794\u17c9\u17bb\u178e\u17d2\u178e\u17c4\u17c7)","popup_resizable":"\u17b1\u17d2\u1799\u1794\u1784\u17d2\u17a2\u17bd\u1785\u17a2\u17b6\u1785\u1794\u17d2\u178f\u17bc\u179a\u1791\u17c6\u17a0\u17c6\u1794\u17b6\u1793","popup_location":"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1794\u17b6\u179a\u1791\u17b8\u178f\u17b6\u17c6\u1784","popup_menubar":"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1794\u17b6\u179a\u1798\u17c9\u17ba\u1793\u17bb\u1799","popup_toolbar":"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1794\u17b6\u179a\u17a7\u1794\u1780\u179a\u178e\u17cd","popup_statusbar":"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1794\u17b6\u179a\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796","popup_scrollbars":"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u179a\u1794\u17b6\u179a\u179a\u1798\u17bc\u179a","popup_return":"\u1794\u1789\u17d2\u1785\u17bc\u179b\'return false\'","popup_name":"\u1788\u17d2\u1798\u17c4\u17c7\u1794\u1784\u17d2\u17a2\u17bc\u1785","popup_url":"\u17a2\u17b6\u179f\u178a\u17d2\u178b\u17b6\u1793\u1794\u1784\u17d2\u17a2\u17bd\u1785\u179b\u17c1\u1785\u17a1\u17be\u1784",popup:"\u1794\u1784\u17d2\u17a2\u17bd\u1785\u179b\u17c1\u1785\u17a1\u17be\u1784 Javascript","target_blank":"\u1794\u17be\u1780\u1780\u17d2\u1793\u17bb\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1790\u17d2\u1798\u17b8","target_top":"\u1794\u17be\u1780\u1780\u17d2\u1793\u17bb\u1784\u179f\u17ca\u17bb\u1798\u179b\u17be (\u1787\u17c6\u1793\u17bd\u179f\u1782\u17d2\u179a\u1794\u17cb\u179f\u17ca\u17bb\u1798\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb)","target_parent":"\u1794\u17be\u1780\u1780\u17d2\u1793\u17bb\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785/\u179f\u17ca\u17bb\u1798\u1798\u17c1","target_same":"\u1794\u17be\u1780\u1780\u17d2\u1793\u17bb\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785/\u179f\u17ca\u17bb\u1798\u1793\u17c1\u17c7","anchor_names":"\u1799\u17bb\u1790\u17d2\u1780\u17b6","popup_opts":"\u1787\u1798\u17d2\u179a\u17be\u179f\u179b\u17c1\u1785\u17a1\u17be\u1784","advanced_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","event_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1796\u17d2\u179a\u17b9\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17cd","popup_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u179b\u17c1\u1785\u17a1\u17be\u1784","general_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1791\u17bc\u1791\u17c5","advanced_tab":"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","events_tab":"\u1796\u17d2\u179a\u17b9\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17cd","popup_tab":"\u179b\u17c1\u1785\u17a1\u17be\u1784","general_tab":"\u1791\u17bc\u1791\u17c5",list:"\u1794\u1789\u17d2\u1787\u17b8\u178f\u17c6\u178e","is_external":"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c6\u1793\u1784\u1787\u17b6\u178f\u17c6\u178e\u1791\u17c5\u1780\u17d2\u179a\u17c5, \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u179a\u179f\u17c1\u179a http:// \u1793\u17c5\u178a\u17be\u1798\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17c1?","is_email":"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c6\u1793\u1784\u1787\u17b6\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u17a2\u17ca\u17b8\u1798\u17c2\u179b, \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u179a\u179f\u17c1\u179a mailto: \u1793\u17c5\u178a\u17be\u1798\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17c1?",titlefield:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784",target:"\u1782\u17c4\u179b\u178a\u17c5",url:"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178f\u17c6\u178e",title:"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u178f\u17c6\u178e","link_list":"\u1794\u1789\u17d2\u1787\u17b8\u178f\u17c6\u178e",rtl:"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784",ltr:"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6",accesskey:"\u1782\u17d2\u179a\u17b6\u1794\u17cb\u1785\u17bb\u1785\u1795\u17d2\u179b\u17bc\u179c\u1780\u17b6\u178f\u17cb",tabindex:"\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179b\u17b7\u1794\u17b7\u1780\u17d2\u179a\u1798",rev:"\u1791\u17c6\u1793\u17b6\u1780\u17cb\u1791\u17c6\u1793\u1784\u1782\u17c4\u179b\u178a\u17c5\u1791\u17c5\u1793\u17b9\u1784\u1791\u17c6\u1796\u17d0\u179a",rel:"\u1791\u17c6\u1793\u17b6\u1780\u17cb\u1791\u17c6\u1793\u1784\u1791\u17c6\u1796\u17d0\u179a\u1791\u17c5\u1793\u17b9\u1784\u1782\u17c4\u179b\u178a\u17c5",mime:"\u1794\u17d2\u179a\u1797\u17c1\u1791 MIME \u1782\u17c4\u179b\u178a\u17c5",encoding:"\u1780\u17b6\u179a\u179c\u17c1\u1785\u1780\u17bc\u178a\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u179a\u1794\u179f\u17cb\u1782\u17c4\u179b\u178a\u17c5",langcode:"\u1780\u17bc\u178a\u1797\u17b6\u179f\u17b6","target_langcode":"\u1797\u17b6\u179f\u17b6\u1782\u17c4\u179b\u178a\u17c5",width:"\u1791\u1791\u17b9\u1784",height:"\u1780\u1798\u17d2\u1796\u179f\u17cb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ko_dlg.js
new file mode 100644
index 000000000..21aaa4e35
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.advlink_dlg',{"target_name":"Target \uc774\ub984",classes:"\ud074\ub798\uc2a4",style:"\uc11c\uc2dd",id:"ID","popup_position":"\uc704\uce58(X/Y)",langdir:"\ubb38\uc790 \ubc29\ud5a5","popup_size":"\ud06c\uae30","popup_dependent":"\uc5f0\ub3d9 (Mozilla/Firefox\ub9cc)","popup_resizable":"\ucc3d \ud06c\uae30 \ubcc0\uacbd \uac00\ub2a5","popup_location":"\uc8fc\uc18c \ud45c\uc2dc\uc904 \ubcf4\uc784","popup_menubar":"\uba54\ub274 \ud45c\uc2dc\uc904 \ubcf4\uc784","popup_toolbar":"\ub3c4\uad6c \ubaa8\uc74c \ubcf4\uc784","popup_statusbar":"\uc0c1\ud0dc \ud45c\uc2dc\uc904 \ubcf4\uc784","popup_scrollbars":"\uc2a4\ud06c\ub864\ubc14 \ubcf4\uc784","popup_return":"\'return false\' \uc0bd\uc785","popup_name":"\ucc3d \uc774\ub984","popup_url":"\ud31d\uc5c5 URL",popup:"Javascript \ud31d\uc5c5","target_blank":"\uc0c8 \ucc3d\uc73c\ub85c \uc5f4\uae30","target_top":"\ucd5c\uc0c1\uc704 \ud504\ub808\uc784\uc5d0 \uc5f4\uae30 (\ubaa8\ub4e0 \ud504\ub808\uc784\uc774 \ubc14\ub01c)","target_parent":"\ubd80\ubaa8 \ucc3d/\ud504\ub808\uc784\uc5d0 \uc5f4\uae30","target_same":"\uc774 \ucc3d/\ud504\ub808\uc784\uc5d0 \uc5f4\uae30","anchor_names":"\uc575\ucee4","popup_opts":"\uc635\uc158","advanced_props":"\uc138\ubd80 \uc18d\uc131","event_props":"\uc774\ubca4\ud2b8","popup_props":"\ud31d\uc5c5 \uc18d\uc131","general_props":"\uc77c\ubc18 \uc18d\uc131","advanced_tab":"\uc138\ubd80 \uc0ac\ud56d","events_tab":"\uc774\ubca4\ud2b8","popup_tab":"\ud31d\uc5c5","general_tab":"\uc77c\ubc18",list:"\ub9c1\ud06c \ubaa9\ub85d","is_external":"\uc785\ub825\ud558\uc2e0 URL\uc740 \uc678\ubd80 \ub9c1\ud06c\ub85c \ud310\ub2e8\ub429\ub2c8\ub2e4. URL \uc55e\uc5d0 \ud544\uc218\uc801\uc778 http://\ub97c \ubd99\uc774\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","is_email":"\uc785\ub825\ud558\uc2e0 URL\uc740 e\uba54\uc77c \uc8fc\uc18c\ub85c \ud310\ub2e8\ub429\ub2c8\ub2e4. URL \uc55e\uc5d0 \ud544\uc218\uc801\uc778 mailto:\ub97c \ubd99\uc774\uc2dc\uaca0\uc2b5\ub2c8\uae4c?",titlefield:"\uc81c\ubaa9",target:"Target",url:"\ub9c1\ud06c URL",title:"\ub9c1\ud06c \uc0bd\uc785/\ud3b8\uc9d1","link_list":"\ub9c1\ud06c \ubaa9\ub85d",rtl:"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c",ltr:"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c",accesskey:"\uc561\uc138\uc2a4 \ud0a4",tabindex:"\ud0ed \uc778\ub371\uc2a4",rev:"\ub9c1\ud06c\ub85c\ubd80\ud130\uc758 \uad00\uacc4",rel:"\ub9c1\ud06c\uc5d0 \uad00\uacc4",mime:"\ud0c0\uac9f MIME \uc720\ud615",encoding:"\ud0c0\uac9f \ubb38\uc790 \uc778\ucf54\ub529",langcode:"\uc5b8\uc5b4 \ucf54\ub4dc","target_langcode":"\ud0c0\uac9f \uc5b8\uc5b4",width:"\ud3ed",height:"\ub192\uc774"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/kz_dlg.js
new file mode 100644
index 000000000..7e5e3185a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lb_dlg.js
new file mode 100644
index 000000000..35adf4ee9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.advlink_dlg',{"target_name":"Numm vun der Zils\u00e4it",classes:"Klassen",style:"Format",id:"ID","popup_position":"Positioun (X/Y)",langdir:"Schr\u00ebftrichtung","popup_size":"Gr\u00e9isst","popup_dependent":"Vun der Elteref\u00ebnster onofh\u00e4ngeg <br /> (n\u00ebmmen Mozilla/Firefox) ","popup_resizable":"Vergr\u00e9isseren vun der F\u00ebnster zouloossen","popup_location":"Adressleescht uweisen","popup_menubar":"Browsermen\u00fc uweisen","popup_toolbar":"Geschirleeschten uweisen","popup_statusbar":"Statusleeschten uweisen","popup_scrollbars":"Scrollbalken uweisen","popup_return":"Link trotz Popup suiv\u00e9ieren","popup_name":"Numm vun der F\u00ebnster","popup_url":"Popup-Adress",popup:"JavaScript-Popup","target_blank":"An enger neier F\u00ebnster opmaachen","target_top":"Am ieweschte Frame opmaacheen (sprengt d\'Frameset)","target_parent":"An der iwwergeuerdneter F\u00ebnster/Frame opmaachen","target_same":"An der selwechter F\u00ebnster/Frame opmaachen","anchor_names":"Anker","popup_opts":"Optiounen","advanced_props":"Erweidert Eegeschaften","event_props":"Evenement","popup_props":"Popup-Eegeschaften","general_props":"Allgemeng Eegeschaften","advanced_tab":"Erweidert","events_tab":"Evenement","popup_tab":"Popup","general_tab":"Allgemeng",list:"Linkl\u00ebscht","is_external":"D\u00ebs Adress sch\u00e9ngt een externe Link ze sinn. W\u00ebllt Dir den dofir ben\u00e9idegte Pr\u00e4fix \"http://\" virdru setzen?","is_email":"D\u00ebs Adress sch\u00e9ngt eng Email-Adress ze sinn. W\u00ebllt Dir den dofir ben\u00e9idegte Pr\u00e4fix \"mailto:\" virdru setzen?",titlefield:"Titel",target:"F\u00ebnster",url:"Adress",title:"Link af\u00fcgen/beaarbechten","link_list":"Linkl\u00ebscht",rtl:"Riets no l\u00e9nks",ltr:"L\u00e9nks no riets",accesskey:"Tastekierzel",tabindex:"Tabindex",rev:"Bez\u00e9iung vum Linkzil zur S\u00e4it",rel:"Bez\u00e9iung vun der S\u00e4it zum Linkzil",mime:"MIME-Typ vun der Zils\u00e4it",encoding:"Zeechekod\u00e9ierung vun der Zils\u00e4it",langcode:"Sproochcode","target_langcode":"Sprooch vun der Zils\u00e4it",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lt_dlg.js
new file mode 100644
index 000000000..7a48ca4e4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.advlink_dlg',{"target_name":"Paskirties vardas",classes:"Klas\u0117s",style:"Stilius",id:"Id","popup_position":"Pozicija (X/Y)",langdir:"Kalbos kryptis","popup_size":"Dydis","popup_dependent":"Proporcionaliai (tik Mozilla/Firefox)","popup_resizable":"Galima koreguoti lango i\u0161matavimus","popup_location":"Rodyti adres\u0173 juost\u0105","popup_menubar":"Rodyti meniu juost\u0105","popup_toolbar":"Rodyti \u012franki\u0173 juost\u0105","popup_statusbar":"Rodyti b\u016bsenos juost\u0105","popup_scrollbars":"Rodyti slankjuostes","popup_return":"\u012eterpti \u201ereturn false\u201c","popup_name":"Lango vardas","popup_url":"I\u0161kylan\u010dio lango URL adresas",popup:"Javascript i\u0161kylantis langas","target_blank":"Atverti naujame lange","target_top":"Atverti vir\u0161utiniame lange (pakei\u010dia visus langus)","target_parent":"Atverti t\u0117viniame lange","target_same":"Atverti tame pa\u010diame lange","anchor_names":"Prierai\u0161ai","popup_opts":"Nustatymai","advanced_props":"I\u0161pl\u0117stiniai nustatymai","event_props":"\u012evykiai","popup_props":"I\u0161kylan\u010dio lango nustatymai","general_props":"Bendri nustatymai","advanced_tab":"I\u0161pl\u0117sta","events_tab":"\u012evykiai","popup_tab":"I\u0161kylantis langas","general_tab":"Bendra",list:"Nuorod\u0173 s\u0105ra\u0161as","is_external":"URL adresas, kur\u012f \u012fved\u0117te yra i\u0161orin\u0117 nuoroda, ar norite prid\u0117ti reikaling\u0105 http:// prefiks\u0105?","is_email":"URL adresas, kur\u012f \u012fved\u0117te yra el. pa\u0161to adresas, ar norite prid\u0117ti reikaling\u0105 mailto: prefiks\u0105?",titlefield:"Pavadinimas",target:"Paskirtis",url:"Nuorodos URL adresas",title:"\u012eterpti/Redaguoti nuorod\u0105","link_list":"Nuorod\u0173 s\u0105ra\u0161as",rtl:"I\u0161 de\u0161in\u0117s \u012f kair\u0119",ltr:"I\u0161 kair\u0117s \u012f de\u0161in\u0119",accesskey:"Prieigos klavi\u0161as",tabindex:"Tabuliavimo indeksas",rev:"Ry\u0161ys paskirties su puslapiu",rel:"Ry\u0161ys puslapio su paskirtimi",mime:"Paskirties MIME tipas",encoding:"Kalbos koduot\u0117",langcode:"Kalbos kodas","target_langcode":"Paskirties kalba",width:"Plotis",height:"Auk\u0161tis"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lv_dlg.js
new file mode 100644
index 000000000..3df0d1dd7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.advlink_dlg',{"target_name":"M\u0113r\u0137a nosaukums",classes:"Klases",style:"St\u012bls",id:"Id","popup_position":"Poz\u012bcija (X/Y)",langdir:"Valodas virziens","popup_size":"Izm\u0113rs","popup_dependent":"Atkar\u012bgs (tikai priek\u0161 Mozilla/Firefox)","popup_resizable":"Iedot iesp\u0113ju main\u012bt loga izmerus","popup_location":"Par\u0101d\u012bt adreses joslu","popup_menubar":"Par\u0101d\u012bt izvelnes joslu","popup_toolbar":"Par\u0101d\u012bt r\u012bkjoslu","popup_statusbar":"Par\u0101d\u012bt status bar","popup_scrollbars":"Par\u0101d\u012bt scrollbars","popup_return":"Ielikt \'return false\'","popup_name":"Loga nosaukums","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Atvert jaun\u0101j\u0101 log\u0101","target_top":"Atvert pa virsu \u0161im r\u0101m\u012bm (aizvieto visus r\u0101mjus)","target_parent":"Atvert \u0161aj\u0101 log\u0101 / r\u0101m\u012b","target_same":"Atvert \u0161aj\u0101 log\u0101 / r\u0101m\u012b","anchor_names":"Enkuri","popup_opts":"Opcijas","advanced_props":"Advanced \u012bpa\u0161\u012bbas","event_props":"Notikumi","popup_props":"Popup \u012bpa\u0161\u012bbas","general_props":"Kop\u012bgas \u012bpa\u0161\u012bbas","advanced_tab":"Advanced","events_tab":"Notikumi","popup_tab":"Popup","general_tab":"Kop\u012bgais",list:"Link list","is_external":"Ievad\u012btais URL \u0161\u0137iet ir \u0101r\u0113j\u0101 saite, vai J\u016bs v\u0113laties pirms t\u0101s pievienot http:// pried\u0113kli?","is_email":"Ievad\u012btais URL \u0161\u0137iet ir e-pasta adrese, vai J\u016bs v\u0113laties pirms t\u0101s pievienot mailto: pried\u0113kli?",titlefield:"Nosaukums",target:"M\u0113r\u0137is",url:"Saites URL",title:"Ievietot/Redi\u0123\u0113t saiti","link_list":"Sakaru saraksts",rtl:"No labas puses uz kreiso",ltr:"No kreisas puses uz labo",accesskey:"Pieejas poga",tabindex:"Tabindex",rev:"M\u0113r\u0137a attiec\u012bbas pret lapu",rel:"Lapas attiec\u012bbas pret m\u0113r\u0137i",mime:"M\u0113r\u0137a MIME tips",encoding:"M\u0113r\u0137a valodas koda tabula",langcode:"Valodas kods","target_langcode":"M\u0113r\u0137a valoda",width:"Platums",height:"Augstums"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/mk_dlg.js
new file mode 100644
index 000000000..6c8f0b649
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.advlink_dlg',{"target_name":"\u0418\u043c\u0435 \u043d\u0430 \u0446\u0435\u043b\u0442\u0430",classes:"\u041a\u043b\u0430\u0441\u0430",style:"\u0421\u0442\u0438\u043b",id:"\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0458\u0430 (Id)","popup_position":"\u041f\u043e\u0437\u0438\u0446\u0438\u0458\u0430 (X/Y)",langdir:"\u0421\u043c\u0435\u0440 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442","popup_size":"\u0413\u043e\u043b\u0435\u043c\u0438\u043d\u0430","popup_dependent":"\u0417\u0430\u0432\u0438\u0441\u0435\u043d (\u0441\u0430\u043c\u043e \u0437\u0430 Mozilla/Firefox)","popup_resizable":"\u041f\u0440\u043e\u0437\u043e\u0440 \u0441\u043e \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0430 \u0433\u043e\u043b\u0435\u043c\u0438\u043d\u0430","popup_location":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043b\u0438\u043d\u0438\u0458\u0430 \u043d\u0430 \u043b\u043e\u043a\u0430\u0446\u0438\u0458\u0430","popup_menubar":"\u041f\u043e\u043a\u0430\u0436\u0438 \u043c\u0435\u043d\u0438","popup_toolbar":"\u041f\u043e\u043a\u0430\u0436\u0438 \u0430\u043b\u0430\u0442\u043a\u0438","popup_statusbar":"\u041f\u043e\u043a\u0430\u0436\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430","popup_scrollbars":"\u041f\u0440\u0438\u043a\u0430\u0436\u0438 \u043b\u0438\u0437\u0433\u0430\u0447\u0438","popup_return":"\u0412\u043c\u0435\u0442\u043d\u0438 \'return false\'","popup_name":"\u0418\u043c\u0435 \u043d\u0430 \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432\u043e \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440","target_top":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432\u043e \u0433\u043e\u0440\u043d\u0430\u0442\u0430 \u0440\u0430\u043c\u043a\u0430(\u0433\u0438 \u0437\u0430\u043c\u0435\u043d\u0443\u0432\u0430 \u0441\u0438\u0442\u0435 \u0440\u0430\u043c\u043a\u0438)","target_parent":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432\u043e \u0438\u0437\u0432\u043e\u0440\u043d\u0438\u043e\u0442 \u043f\u0440\u043e\u0437\u043e\u0440/\u0440\u0430\u043c\u043a\u0430","target_same":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0432\u043e \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440/\u0440\u0430\u043c\u043a\u0430","anchor_names":"\u0421\u0438\u0434\u0440\u0430","popup_opts":"\u041c\u043e\u0436\u043d\u043e\u0441\u0442\u0438","advanced_props":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u0438 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430","event_props":"\u041d\u0430\u0441\u0442\u0430\u043d\u0438","popup_props":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 popup \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442","general_props":"\u041e\u0441\u043d\u043e\u0432\u043d\u0438 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430","advanced_tab":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e","events_tab":"\u041d\u0430\u0441\u0442\u0430\u043d\u0438","popup_tab":"Popup","general_tab":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e",list:"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0432\u0438","is_external":"\u0423\u0420\u041b \u0430\u0434\u0440\u0435\u0441\u0442\u0430 \u0448\u0442\u043e \u0458\u0430 \u0432\u043d\u0435\u0441\u043e\u0432\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u043a\u0430\u043a\u043e \u043d\u0430\u0434\u0432\u043e\u0440\u0435\u0448\u0435\u043d \u043b\u0438\u043d\u043a. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u0434\u043e\u0434\u0430\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u0438\u043e\u0442 \u201ehttp://:\u201c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ?","is_email":"\u0423\u0420\u041b \u0430\u0434\u0440\u0435\u0441\u0442\u0430 \u0448\u0442\u043e \u0458\u0430 \u0432\u043d\u0435\u0441\u043e\u0432\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u043a\u0430\u043a\u043e \u0435-\u043f\u043e\u0448\u0442\u0430. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u0434\u043e\u0434\u0430\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u0438\u043e\u0442 \u201emailto:\u201c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ?",titlefield:"\u041d\u0430\u0441\u043b\u043e\u0432",target:"\u0426\u0435\u043b",url:"\u0423\u0420\u041b \u043b\u0438\u043d\u043a",title:"\u0412\u043c\u0435\u0442\u043d\u0438/\u0443\u0440\u0435\u0434\u0438 \u043b\u0438\u043d\u043a","link_list":"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0432\u0438",rtl:"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e",ltr:"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e",accesskey:"\u041a\u043b\u0443\u0447 \u0437\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u043f",tabindex:"Tabindex",rev:"\u041e\u0434\u043d\u043e\u0441 \u043d\u0430 \u0446\u0435\u043b\u0442\u0430 \u0441\u043f\u0440\u0435\u043c\u0430 \u0441\u0442\u0440\u0430\u043d\u0430\u0442\u0430",rel:"\u041e\u0434\u043d\u043e\u0441 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0430\u0442\u0430 \u0441\u043f\u0440\u0435\u043c\u0430 \u0446\u0435\u043b\u0442\u0430",mime:"MIME \u0442\u0438\u043f",encoding:"\u041a\u043e\u0434\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0437\u043d\u0430\u0446\u0438\u0442\u0435",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442","target_langcode":"\u0408\u0430\u0437\u0438\u043a",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u0438\u043d\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ml_dlg.js
new file mode 100644
index 000000000..8db545b36
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/mn_dlg.js
new file mode 100644
index 000000000..4b4acb5f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.advlink_dlg',{"target_name":"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u0443\u0443\u0434\u0430\u0441\u043d\u044b \u043d\u044d\u0440",classes:"\u0410\u043d\u0433\u0438",style:"\u0424\u043e\u0440\u043c\u0430\u0442",id:"\u0422\u0422","popup_position":"\u0411\u0430\u0439\u0440\u043b\u0430\u043b (X/Y)",langdir:"\u0411\u0438\u0447\u0433\u0438\u0439\u043d \u0447\u0438\u0433\u043b\u044d\u043b","popup_size":"\u0425\u044d\u043c\u0436\u044d\u044d","popup_dependent":"\u042d\u0445 \u0446\u043e\u043d\u0445\u043d\u043e\u043e\u0441 \u0445\u0430\u043c\u0430\u0430\u0440\u0430\u043b\u0442\u0430\u0439 (\u0417\u04e9\u0432\u0445\u04e9\u043d Mozilla/Firefox)","popup_resizable":"\u0426\u043e\u043d\u0445 \u0442\u043e\u043c\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0437\u04e9\u0432\u0448\u04e9\u04e9\u0440\u04e9\u0445","popup_location":"\u0425\u0430\u044f\u0433\u0438\u0439\u043d \u0441\u0430\u043c\u0431\u0430\u0440 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445","popup_menubar":"\u0425\u04e9\u0442\u04e9\u0447\u0438\u0439\u043d \u0446\u044d\u0441 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445","popup_toolbar":"\u0411\u0430\u0433\u0430\u0436 \u0441\u0430\u043c\u0431\u0430\u0440 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445","popup_statusbar":"\u0422\u04e9\u043b\u04e9\u0432 \u0441\u0430\u043c\u0431\u0430\u0440 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445","popup_scrollbars":"\u0413\u04af\u0439\u043b\u0433\u044d\u0433\u0447 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445","popup_return":"\u041f\u043e\u043f\u0430\u043f \u0431\u0430\u0439\u0441\u0430\u043d \u0447 \u0445\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u0433 \u0434\u0430\u0433\u0430\u043d\u0430","popup_name":"\u0426\u043e\u043d\u0445\u043d\u044b \u043d\u044d\u0440","popup_url":"\u041f\u043e\u043f\u0430\u043f-\u0445\u0430\u044f\u0433",popup:"\u0416\u0430\u0432\u0430\u0441\u043a\u0440\u0438\u043f\u0442-\u043f\u043e\u043f\u0430\u043f","target_blank":"\u0428\u0438\u043d\u044d \u0446\u043e\u043d\u0445\u043e\u043d\u0434 \u043d\u044d\u044d\u0445","target_top":"\u0425\u0430\u043c\u0433\u0438\u0439\u043d \u0434\u044d\u044d\u0434 \u0446\u043e\u043d\u0445/\u0444\u0440\u044d\u0439\u043c\u0434 \u043d\u044d\u044d\u0445","target_parent":"\u042d\u0445 \u0446\u043e\u043d\u0445/\u0444\u0440\u044d\u0439\u043c\u0434 \u043d\u044d\u044d\u0445","target_same":"\u0422\u0443\u0445\u0430\u0439\u043d \u0446\u043e\u043d\u0445/\u0444\u0440\u044d\u0439\u043c\u0434 \u043d\u044d\u044d\u0445","anchor_names":"\u0413\u0430\u0434\u0430\u0441","popup_opts":"\u0421\u043e\u043d\u0433\u043e\u043b\u0442","advanced_props":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d \u0448\u0438\u043d\u0436","event_props":"\u04ae\u0437\u044d\u0433\u0434\u044d\u043b","popup_props":"\u041f\u043e\u043f\u0430\u043f-\u0448\u0438\u043d\u0436","general_props":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439 \u0448\u0438\u043d\u0436","advanced_tab":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d","events_tab":"\u04ae\u0437\u044d\u0433\u0434\u044d\u043b","popup_tab":"\u041f\u043e\u043f\u0430\u043f","general_tab":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439",list:"\u0425\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442","is_external":"\u0425\u0430\u044f\u0433 \u0434\u044d\u044d\u0440 \u0433\u0430\u0434\u0430\u0430\u0434 \u0445\u043e\u043b\u0431\u043e\u043e\u0441 \u0431\u0430\u0439\u0433\u0430\u0430 \u0445\u0430\u0440\u0430\u0433\u0434\u0430\u043d\u0430. \u0422\u0430 \u0437\u04e9\u0432 \u0445\u043e\u043b\u0431\u043e\u043e\u0441 \u0431\u043e\u043b\u0433\u043e\u0445\u044b\u043d \u0442\u0443\u043b\u0434 http:// \u043d\u044d\u043c\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","is_email":"\u0425\u0430\u044f\u0433 \u0434\u044d\u044d\u0440 \u0418\u043c\u044d\u0439\u043b \u0445\u0430\u044f\u0433 \u0431\u0430\u0439\u0445 \u0448\u0438\u0433 \u0445\u0430\u0440\u0430\u0433\u0434\u0430\u043d\u0430. \u0422\u0430 \u0442\u04af\u04af\u043d\u0434 \u0448\u0430\u0430\u0440\u0434\u043b\u0430\u0433\u0430\u0442\u0430\u0439 mailto: \u043d\u044d\u043c\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?",titlefield:"\u0413\u0430\u0440\u0447\u0438\u0433",target:"\u0426\u043e\u043d\u0445",url:"\u0425\u0430\u044f\u0433",title:"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0430\u0445","link_list":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442",rtl:"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d",ltr:"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d",accesskey:"\u0422\u043e\u0432\u0447\u0438\u043b\u0431\u043e\u0440",tabindex:"\u0422\u0430\u0431\u0443\u043b\u0430\u0442\u043e\u0440 \u0438\u043d\u0434\u0435\u043a\u0441",rev:"\u0425\u0443\u0443\u0434\u0430\u0441\u043d\u0430\u0430\u0441 \u0442\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u043e\u043b\u0431\u043e\u043e\u0441\u043e\u043e\u0441 \u0445\u043e\u043b\u0431\u043e\u043b\u0442",rel:"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u043e\u043b\u0431\u043e\u043e\u0441\u043e\u043e\u0441 \u0445\u0443\u0443\u0434\u0430\u0441\u043d\u044b \u0445\u043e\u043b\u0431\u043e\u043b\u0442",mime:"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u0443\u0443\u0434\u0430\u0441\u043d\u044b MIME \u0442\u04e9\u0440\u04e9\u043b",encoding:"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u0443\u0443\u0434\u0430\u0441\u043d\u044b \u043a\u043e\u0434\u0447\u0438\u043b\u043e\u043b",langcode:"\u0425\u044d\u043b\u043d\u0438\u0439 \u043a\u043e\u0434","target_langcode":"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d \u0445\u0443\u0443\u0434\u0430\u0441\u043d\u044b \u0445\u044d\u043b",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ms_dlg.js
new file mode 100644
index 000000000..80c0621c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.advlink_dlg',{"target_name":"Nama sasaran",classes:"Kelas-kelas",style:"Gaya",id:"Id","popup_position":"Posisi (X/Y)",langdir:"Arah bahasa","popup_size":"Saiz","popup_dependent":"Tanggungan (Hanya Mozilla/Firefox)","popup_resizable":"Jadikan tetingkap boleh diubahsuai","popup_location":"Tunjuk bar lokasi","popup_menubar":"Tunjuk bar menu","popup_toolbar":"Tunjuk bar alatan","popup_statusbar":"Tunjuk bar status","popup_scrollbars":"Tunjuk bar gulung","popup_return":"Masukkan \'return false\'","popup_name":"Nama tetingkap","popup_url":"Popup URL",popup:"Popup Javascript ","target_blank":"Buka dalam tetingkap baru.","target_top":"Buka bingkaian atas (gantikan kesemua bingkai)","target_parent":"Buka dalam tetingkap yang lain","target_same":"Buka tetingkap ini","anchor_names":"Sauh","popup_opts":"Pilihan","advanced_props":"Alatan lanjutan","event_props":"Peristiwa","popup_props":"Alatan Popup","general_props":"Alatan am","advanced_tab":"Lanjutan","events_tab":"Peristiwa","popup_tab":"Popup","general_tab":"Am",list:"Senarai pautan","is_external":"URL yang dimasukkan adalah pautan luar, tambah \"http://\" di awalan?","is_email":"URL yang dimasukkan adalah alamat emel, tambah \"mailto\": di awalan?",titlefield:"Tajuk",target:"Sasaran",url:"Pautan URL",title:"Sisip/sunting pautan","link_list":"Senarai pautan",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",accesskey:"Kunci akses",tabindex:"Tanda indeks",rev:"Kaitan sasaran kepada halaman",rel:"Kaitan halaman kepada sasaran",mime:"Sasaran jenis MIME",encoding:"Sasaran enkod perkataan",langcode:"Kod bahasa","target_langcode":"Bahasa sasaran",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/my_dlg.js
new file mode 100644
index 000000000..d57f01b4f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nb_dlg.js
new file mode 100644
index 000000000..ea316c334
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.advlink_dlg',{"target_name":"M\u00e5lnavn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Posisjon (X/Y)",langdir:"Skriftretning","popup_size":"St\u00f8rrelse","popup_dependent":"Avhengig vindu (bare i Mozilla/Firefox)","popup_resizable":"Gj\u00f8r vinduet skalerbart","popup_location":"Vis plasseringslinje","popup_menubar":"Vis menylinje","popup_toolbar":"Vis verkt\u00f8ylinjer","popup_statusbar":"Vis statuslinje","popup_scrollbars":"Vis rullefelt","popup_return":"Sett inn \'return false\'","popup_name":"Vindunavn","popup_url":"Popup URL",popup:"Javascript-popup","target_blank":"\u00c5pne i nytt vindu","target_top":"\u00c5pne i toppvindu (erstatter alle rammer)","target_parent":"\u00c5pne i overordnet vindu/ramme","target_same":"\u00c5pne i samme vindu/ramme","anchor_names":"Anker","popup_opts":"Innstillinger","advanced_props":"Generelle egenskaper","event_props":"Hendelser","popup_props":"Popup-egenskaper","general_props":"Generelle egenskaper","advanced_tab":"Avansert","events_tab":"Hendelser","popup_tab":"Popup","general_tab":"Generelt",list:"Lenkeliste","is_external":"URL\'en du oppga synes \u00e5 v\u00e6re en ekstern lenke, \u00f8nsker du \u00e5 legge til den n\u00f8dvendige http:// prefix?","is_email":"URL\'en du oppga synes \u00e5 v\u00e6re en email adresse, \u00f8nsker du \u00e5 legge til den n\u00f8dvendige mailto: prefix?",titlefield:"Tittel",target:"M\u00e5l",url:"Lenkens URL",title:"Sett inn / rediger lenke","link_list":"Lenkeliste",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",accesskey:"Hurtigtast",tabindex:"Tabulatorindeks",rev:"M\u00e5lets forhold til siden",rel:"Sidens forhold til m\u00e5let",mime:"M\u00e5lets MIME-type",encoding:"Tegnkonvertering",langcode:"Spr\u00e5kkode","target_langcode":"M\u00e5lspr\u00e5k",width:"Bredde",height:"H\u00f8yde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nl_dlg.js
new file mode 100644
index 000000000..b2924758b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.advlink_dlg',{"target_name":"Doel",classes:"Klasses",style:"Stijl",id:"Id","popup_position":"Positie (X/Y)",langdir:"Taalrichting","popup_size":"Grootte","popup_dependent":"Afhankelijk (Alleen Mozilla/Firefox)","popup_resizable":"Aanpasbaar venster","popup_location":"Lokatiebalk weergeven","popup_menubar":"Menubalk weergeven","popup_toolbar":"Werkbalk weergeven","popup_statusbar":"Statusbalk weergeven","popup_scrollbars":"Scrollbalken weergeven","popup_return":"\'return false\' invoegen","popup_name":"Vensternaam","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"In nieuw venster openen","target_top":"In bovenste frame openen (vervangt gehele pagina)","target_parent":"In bovenliggend venster / frame openen","target_same":"In dit venster / frame openen","anchor_names":"Ankers","popup_opts":"Opties","advanced_props":"Geavanceerde eigenschappen","event_props":"Gebeurtenissen","popup_props":"Popup eigenschappen","general_props":"Algemene eigenschappen","advanced_tab":"Geavanceerd","events_tab":"Gebeurtenissen","popup_tab":"Popup","general_tab":"Algemeen",list:"Lijst","is_external":"De ingevoerde URL lijkt op een externe link. Wilt u de vereiste http:// tekst voorvoegen?","is_email":"De ingevoerde URL lijkt op een e-mailadres. Wilt u de vereiste mailto: tekst voorvoegen?",titlefield:"Titel",target:"Doel",url:"URL",title:"Link invoegen/bewerken","link_list":"Lijst",rtl:"Van rechts naar links",ltr:"Van links naar rechts",accesskey:"Toegangstoets",tabindex:"Tabvolgorde",rev:"Relatie van doel tot pagina",rel:"Relatie van pagina tot doel",mime:"MIME type",encoding:"Taalcodering",langcode:"Taalcode","target_langcode":"Taal",width:"Breedte",height:"Hoogte"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nn_dlg.js
new file mode 100644
index 000000000..8644b0bc0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.advlink_dlg',{"target_name":"M\u00e5lnamn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Posisjon (X/Y)",langdir:"Skriftretning","popup_size":"Storleik","popup_dependent":"Avhengig vindu (berre i Mozilla/Firefox)","popup_resizable":"Gjer vindauget skalerbart","popup_location":"Vis plasseringsline","popup_menubar":"Vis menyline","popup_toolbar":"Vis verktyliner","popup_statusbar":"Vis statusline","popup_scrollbars":"Vis rullefelt","popup_return":"Set inn \\\'return false\\\'","popup_name":"Namn p\u00e5 vindauge","popup_url":"Popup URL",popup:"Javascript-popup","target_blank":"Opne i nytt vindauge","target_top":"Opne i toppvindauge (erstattar alle rammer)","target_parent":"Opne i overordna vindauge/ramme","target_same":"Opne i same vindauge/ramme","anchor_names":"Anker","popup_opts":"Innstillingar","advanced_props":"Generelle eigenskapar","event_props":"Hendingar","popup_props":"Popup-eigenskapar","general_props":"Generelt","advanced_tab":"Avansert","events_tab":"Hendingar","popup_tab":"Popup","general_tab":"Generelt",list:"Lenkjeliste","is_external":"URL-en du skreiv inn ser ut til \u00e5 vere ei eksern lenkje. \u00d8nskjer du \u00e5 leggje til det obligatoriske http://-prefikset?","is_email":"URL-en du skreiv inn ser ut til \u00e5 vere ei e-postadresse. \u00d8nskjer du \u00e5 leggje til det obligatoriske mailto:-prefikset?",titlefield:"Tittel",target:"M\u00e5l",url:"Lenkje-URL",title:"Set inn / rediger lenkje","link_list":"Lenkjeliste",rtl:"H\u00f8gre mot venstre",ltr:"Venstre mot h\u00f8gre",accesskey:"Hurtigtast",tabindex:"Tabulatorindeks",rev:"M\u00e5let sitt forhold til sida",rel:"Sida sitt forhold til m\u00e5let",mime:"M\u00e5let sin MIME-type",encoding:"Teiknkonvertering",langcode:"Spr\u00e5kkode","target_langcode":"M\u00e5lspr\u00e5k",width:"Breidde",height:"H\u00f8gde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/no_dlg.js
new file mode 100644
index 000000000..6289918fc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.advlink_dlg',{"target_name":"M\u00e5lnavn",classes:"Klasse",style:"Stil",id:"Id","popup_position":"Posisjon (X/Y)",langdir:"Skriftretning","popup_size":"St\u00f8rrelse","popup_dependent":"Avhengig vindu (kun i Mozilla/Firefox)","popup_resizable":"Gj\u00f8r vinduet skalerbart","popup_location":"Vis plasseringslinje","popup_menubar":"Vis menylinje","popup_toolbar":"Vis verkt\u00f8ylinjer","popup_statusbar":"Vis statusline","popup_scrollbars":"Vis rullefelt","popup_return":"Sett inn \\\'return false\\\'","popup_name":"Navn p\u00e5 vindu","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u00c5pne i nytt vindu","target_top":"\u00c5pne i toppvindu (erstatter alle rammer)","target_parent":"\u00c5pne i overordnet vindu/ramme","target_same":"\u00c5pne i samme vindu/ramme","anchor_names":"Anker","popup_opts":"Innstillinger","advanced_props":"Avanserte egenskaper","event_props":"Hendelser","popup_props":"Popup egenskaper","general_props":"Generelle egenskaper","advanced_tab":"Avansert","events_tab":"Hendelser","popup_tab":"Popup","general_tab":"Generelt",list:"Liste over lenker","is_external":"URLen du skrev inn ser ut til \u00e5 v\u00e6re en ekstern lenke. \u00d8nsker du \u00e5 legge til obligatorisk http://-prefiks?","is_email":"URLen du skrev inn ser ut til \u00e5 v\u00e6re Epost adresse. \u00d8nsker du \u00e5 legge til obligatorisk mailto:-prefiks?",titlefield:"Tittel",target:"M\u00e5l",url:"Lenke URL",title:"Sett inn/editer lenke","link_list":"Liste over lenker",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",accesskey:"Hurtigtast",tabindex:"Tabulator indeks",rev:"Forholdet mellom m\u00e5l og side",rel:"Forholdet mellom side og m\u00e5l",mime:"M\u00e5l MIME type",encoding:"M\u00e5l karakter koding",langcode:"Spr\u00e5kkode","target_langcode":"M\u00e5lspr\u00e5k",width:"Bredde",height:"H\u00f8yde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/pl_dlg.js
new file mode 100644
index 000000000..d529d7ad1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.advlink_dlg',{"target_name":"Nazwa celu",classes:"Klasy",style:"Styl",id:"Id","popup_position":"Pozycja (X/Y)",langdir:"Kierunek czytania tekstu","popup_size":"Rozmiar","popup_dependent":"Zale\u017cny (Mozilla/Firefox wy\u0142\u0105cznie)","popup_resizable":"Stw\u00f3rz okno z mo\u017cliwo\u015bci\u0105 zmiany rozmiaru","popup_location":"Poka\u017c pasek adresu","popup_menubar":"Poka\u017c pasek menu","popup_toolbar":"Poka\u017c narz\u0119dzia","popup_statusbar":"Poka\u017c pasek statusu","popup_scrollbars":"Poka\u017c paski przewijania","popup_return":"Wstaw \'return false\'","popup_name":"Nazwa okna","popup_url":"URL okna",popup:"Wyskakuj\u0105ce okno","target_blank":"Otw\u00f3rz w nowym oknie","target_top":"Otw\u00f3rz w g\u00f3rnej ramce (zamie\u0144 wszystkie ramki)","target_parent":"Otw\u00f3rz w nadrz\u0119dnym oknie / ramce","target_same":"Otw\u00f3rz w tym oknie / ramce","anchor_names":"Kotwice","popup_opts":"Opcje","advanced_props":"Zaawansowae w\u0142a\u015bciwo\u015bci","event_props":"Zdarzenia","popup_props":"W\u0142a\u015bciwo\u015bci okna","general_props":"W\u0142a\u015bciwo\u015bci og\u00f3lne","advanced_tab":"Zaawansowane","events_tab":"Zdarzenia","popup_tab":"Popup","general_tab":"Og\u00f3lne",list:"Lista link\u00f3w","is_external":"Podany adres wydaje si\u0119 by\u0107 zewn\u0119trznym linkiem, czy chcesz doda\u0107 wymagany prefiks http://?","is_email":"Podany adres wydaje si\u0119 by\u0107 adresem emailowym, czy chcesz doda\u0107 wymagany prefiks mailto:?",titlefield:"Tytu\u0142",target:"Cel",url:"URL linka",title:"Wstaw/edytuj link","link_list":"Lista odno\u015bnik\u00f3w",rtl:"Kierunek z prawej do lewej",ltr:"Kierunek z lewej do prawej",accesskey:"Klawisz skr\u00f3tu",tabindex:"Numer tab",rev:"Relacje celu do strony",rel:"Relacje strony do celu",mime:"Docelowy typ MIME",encoding:"Kodowanie znak\u00f3w celu",langcode:"Kod j\u0119zyka","target_langcode":"Docelowy kod j\u0119zyka",width:"Szeroko\u015b\u0107",height:"Wysoko\u015b\u0107"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ps_dlg.js
new file mode 100644
index 000000000..b0f91e22c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/pt_dlg.js
new file mode 100644
index 000000000..816785544
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.advlink_dlg',{"target_name":"Nome do alvo",classes:"Classes",style:"Estilo",id:"Id","popup_position":"Posi\u00e7\u00e3o (X/Y)",langdir:"Dire\u00e7\u00e3o do texto","popup_size":"Tamanho","popup_dependent":"Dependente (Mozilla/Firefox apenas)","popup_resizable":"Permitir altera\u00e7\u00e3o do tamanho da janela","popup_location":"Mostrar a barra de endere\u00e7os","popup_menubar":"Mostrar a barra de menu","popup_toolbar":"Mostrar a barra de ferramentas","popup_statusbar":"Mostrar a barra de status","popup_scrollbars":"Mostrar as barras de scroll","popup_return":"Inserir \"return false\"","popup_name":"Nome da janela","popup_url":"URL do popup",popup:"Popup javascript","target_blank":"Abrir numa nova janela","target_top":"Abrir na p\u00e1gina inteira (substitui todos os quadros)","target_parent":"Abrir na janela/quadro pai","target_same":"Abrir nesta janela/quadro","anchor_names":"\u00c2ncoras","popup_opts":"Op\u00e7\u00f5es","advanced_props":"Propriedades avan\u00e7adas","event_props":"Eventos","popup_props":"Propriedades de popup","general_props":"Propriedades gerais","advanced_tab":"Avan\u00e7ado","events_tab":"Eventos","popup_tab":"Popup","general_tab":"Geral",list:"Lista de hyperlinks","is_external":"A URL digitada parece conduzir a um link externo. Deseja acrescentar o prefixo necess\u00e1rio http://?","is_email":"A URL digitada parece ser um endere\u00e7o de e-mail. Deseja acrescentar o prefixo necess\u00e1rio mailto:?",titlefield:"T\u00edtulo",target:"Alvo",url:"URL do hyperlink",title:"Inserir/editar hyperlink","link_list":"Lista de hyperlinks",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",accesskey:"Chave de acesso",tabindex:"Tabindex",rev:"Rela\u00e7\u00e3o alvo/p\u00e1gina",rel:"Rela\u00e7\u00e3o p\u00e1gina/alvo",mime:"Tipo MIME alvo",encoding:"Codifica\u00e7\u00e3o de caracteres",langcode:"C\u00f3digo do idioma","target_langcode":"Idioma alvo",width:"Largura",height:"Altura"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ro_dlg.js
new file mode 100644
index 000000000..dc12a9821
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.advlink_dlg',{"target_name":"Nume \u021bint\u0103",classes:"Clase",style:"Stil",id:"Id","popup_position":"Pozi\u021bie (X/Y)",langdir:"Direc\u021bie limb\u0103","popup_size":"M\u0103rime","popup_dependent":"Dependent (Mozilla/Firefox)?","popup_resizable":"Fereastr\u0103 redimensionabil\u0103?","popup_location":"Arat\u0103 bara de adrese","popup_menubar":"Arat\u0103 meniul","popup_toolbar":"Arat\u0103 toolbar-uri","popup_statusbar":"Arat\u0103 bara de stare","popup_scrollbars":"Arat\u0103 barele de derulare","popup_return":"Insereaz\u0103 \'return false\'","popup_name":"Nume fereastr\u0103","popup_url":"URL Popup",popup:"Javascript Popup","target_blank":"Deschide \u00een fereastr\u0103 nou\u0103","target_top":"Deschide \u00een cadrul cel mai mare (\u00eenlocuie\u0219te celelalte cadre)","target_parent":"Deschide leg\u0103tura \u00een fereastra/cadrul p\u0103rinte","target_same":"Deschide leg\u0103tura \u00een fereastra/cadrul de fa\u021b\u0103","anchor_names":"Ancore","popup_opts":"Op\u021biuni","advanced_props":"Propriet\u0103\u021bi avansate","event_props":"Evenimente","popup_props":"Propriet\u0103\u021bi popup","general_props":"Propriet\u0103\u021bi generale","advanced_tab":"Avansat","events_tab":"Evenimente","popup_tab":"Popup","general_tab":"General",list:"List\u0103 de leg\u0103turi","is_external":"URL-ul pe care l-ai introdus pare a fi o leg\u0103tur\u0103 extern\u0103. Vrei s\u0103 adaug \u0219i prefixul http:// necesar?","is_email":"URL-ul pe care l-ai introdus pare a fi o adres\u0103 de e-mail. Vrei s\u0103 adaug \u0219i prefixul mailto: necesar?",titlefield:"Titlu",target:"\u021aint\u0103",url:"URL leg\u0103tur\u0103",title:"Insereaz\u0103/editeaz\u0103 link","link_list":"List\u0103 leg\u0103turi",rtl:"Dreapta la st\u00e2nga",ltr:"St\u00e2nga la dreapta",accesskey:"Cheie de acces",tabindex:"Tabindex",rev:"Rela\u0163ia \u0163intei cu pagina",rel:"Rela\u021bia paginii cu \u021binta",mime:"MIME type \u021bint\u0103",encoding:"Set de caractere \u021bint\u0103",langcode:"Cod limb\u0103","target_langcode":"Limb\u0103",width:"L\u0103\u021bime",height:"\u00cen\u0103l\u021bime"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ru_dlg.js
new file mode 100644
index 000000000..faa628578
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.advlink_dlg',{"target_name":"\u0418\u043c\u044f \u0446\u0435\u043b\u0438",classes:"\u041a\u043b\u0430\u0441\u0441\u044b",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0418\u043c\u044f","popup_position":"\u041f\u043e\u0437\u0438\u0446\u0438\u044f (X/Y)",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430","popup_size":"\u0420\u0430\u0437\u043c\u0435\u0440","popup_dependent":"\u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Firefox)","popup_resizable":"\u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440","popup_location":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f","popup_menubar":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043c\u0435\u043d\u044e","popup_toolbar":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432","popup_statusbar":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f","popup_scrollbars":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0441\u044b \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438","popup_return":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \'return false\'","popup_name":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043e\u043a\u043d\u0430","popup_url":"\u0410\u0434\u0440\u0435\u0441",popup:"\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Java","target_blank":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435","target_top":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043a\u0430\u0434\u0440\u0435 (\u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043a\u0430\u0434\u0440\u044b)","target_parent":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043e\u043a\u043d\u0435/\u043a\u0430\u0434\u0440\u0435","target_same":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043e\u043a\u043d\u0435/\u043a\u0430\u0434\u0440\u0435","anchor_names":"\u042f\u043a\u043e\u0440\u044f","popup_opts":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430","advanced_props":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","event_props":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043e\u0431\u044b\u0442\u0438\u0439","popup_props":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f","general_props":"\u041e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","events_tab":"\u0421\u043e\u0431\u044b\u0442\u0438\u044f","popup_tab":"\u0420\u0430\u0437\u0432\u0435\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435","general_tab":"\u041e\u0431\u0449\u0435\u0435",list:"\u0421\u043f\u0438\u0441\u043e\u043a","is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 http://?","is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 mailto:?",titlefield:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",target:"\u0426\u0435\u043b\u044c",url:"\u0410\u0434\u0440\u0435\u0441",title:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0441\u044b\u043b\u043a\u0438","link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",accesskey:"\u041a\u043b\u044e\u0447 \u0434\u043e\u0441\u0442\u0443\u043f\u0430",tabindex:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",rev:"\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u0438 \u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435",rel:"\u041e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043a \u0446\u0435\u043b\u0438",mime:"MIME \u0442\u0438\u043f \u0446\u0435\u043b\u0438",encoding:"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430 \u0446\u0435\u043b\u0438",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430","target_langcode":"\u042f\u0437\u044b\u043a \u0446\u0435\u043b\u0438",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u044b\u0441\u043e\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sc_dlg.js
new file mode 100644
index 000000000..dfb752460
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u7c7b\u578b",style:"\u6837\u5f0f",id:"Id","popup_position":"\u5ea7\u6807(X/Y)",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","popup_size":"\u5c3a\u5bf8","popup_dependent":"\u4ece\u5c5e(\u53ea\u6709Mozilla/Firefox\u6709\u6548)","popup_resizable":"\u53ef\u8c03\u6574\u89c6\u7a97\u5c3a\u5bf8","popup_location":"\u663e\u793a\u7f51\u5740\u5217","popup_menubar":"\u663e\u793a\u529f\u80fd\u8868","popup_toolbar":"\u663e\u793a\u5de5\u5177\u680f","popup_statusbar":"\u663e\u793a\u72b6\u6001\u680f","popup_scrollbars":"\u663e\u793a\u8fb9\u6761","popup_return":"\u63d2\u5165\'return false\'","popup_name":"\u7a97\u53e3\u540d\u79f0","popup_url":"\u5f39\u51fa\u7a97\u53e3\u7f51\u5740",popup:"Javascript\u5f39\u51fa\u7a97\u53e3","target_blank":"\u6253\u5f00\u5728\u65b0\u89c6\u7a97","target_top":"\u6253\u5f00\u5728\u6700\u4e0a\u5c42\u7684\u6846\u67b6(\u66ff\u6362\u6240\u6709\u6846\u67b6)","target_parent":"\u6253\u5f00\u5728\u7236\u89c6\u7a97/\u6846\u67b6","target_same":"\u6253\u5f00\u5728\u65b0\u89c6\u7a97/\u6846\u67b6","anchor_names":"\u951a\u70b9","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5f39\u51fa\u89c6\u7a97\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5f39\u51fa\u7a97\u53e3","general_tab":"\u4e00\u822c",list:"\u94fe\u7ed3\u6e05\u5355","is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u65b9\u52a0\u5165http://\uff1f ","is_email":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u4f4d\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u90ae\u5740\u524d\u65b9\u52a0\u5165mailto:\uff1f ",titlefield:"\u67e5\u627e",target:"\u76ee\u6807",url:"\u94fe\u7ed3\u4f4d\u5740",title:"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","link_list":"\u94fe\u7ed3\u6e05\u5355",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",accesskey:"\u5feb\u6377\u952e",tabindex:"Tab\u7d22\u5f15",rev:"\u76ee\u6807\u5230\u9875\u7684\u5173\u7cfb",rel:"\u9875\u5230\u76ee\u6807\u7684\u5173\u7cfb",mime:"\u76ee\u6807MIME\u7c7b\u578b",encoding:"\u7f16\u7801",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u7684\u8bed\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/se_dlg.js
new file mode 100644
index 000000000..fd3d52f5f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.advlink_dlg',{"target_name":"M\u00e5lnamn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Position (x/y)",langdir:"Skriftriktning","popup_size":"Storlek","popup_dependent":"Beroende av (Mozilla/Firefox enbart)","popup_resizable":"Skalbart f\u00f6nster","popup_location":"Adressraden","popup_menubar":"Menyrad","popup_toolbar":"Verktygsf\u00e4lt","popup_statusbar":"Statusf\u00e4lt","popup_scrollbars":"Rullningslister","popup_return":"Infoga \'return false\'","popup_name":"F\u00f6nsternamn","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u00d6ppna i nytt f\u00f6nster","target_top":"\u00d6ppna i toppramen (ers\u00e4tter alla ramar)","target_parent":"\u00d6ppna i \u00f6verliggande f\u00f6nster/ram","target_same":"\u00d6ppna i detta f\u00f6nster/ram","anchor_names":"Bokm\u00e4rken","popup_opts":"Inst\u00e4llningar","advanced_props":"Avancerade inst\u00e4llningar","event_props":"H\u00e4ndelser","popup_props":"Popup-inst\u00e4llningar","general_props":"Generella inst\u00e4llningar","advanced_tab":"Avancerat","events_tab":"H\u00e4ndelser","popup_tab":"Popup","general_tab":"Generellt",list:"L\u00e4nklista","is_external":"L\u00e4nken du angav verkar vara en extern adress. Vill du infoga http:// prefixet p\u00e5 l\u00e4nken?","is_email":"L\u00e4nken du angav verkar vara en e-post adress. Vill du infoga mailto: prefixet p\u00e5 l\u00e4nken?",titlefield:"Titel",target:"M\u00e5l",url:"L\u00e4nkens URL",title:"Infoga/redigera l\u00e4nk","link_list":"L\u00e4nklista",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",accesskey:"Snabbtangent",tabindex:"Tabbindex",rev:"Omv\u00e4nd relation (rev)",rel:"Relation (rel attribut)",mime:"MIME type",encoding:"Teckenformattering",langcode:"Spr\u00e5kkod","target_langcode":"M\u00e5lspr\u00e5k",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/si_dlg.js
new file mode 100644
index 000000000..c3cc3ba21
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sk_dlg.js
new file mode 100644
index 000000000..288ece53b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.advlink_dlg',{"target_name":"N\u00e1zov cie\u013ea",classes:"Triedy",style:"\u0160t\u00fdl",id:"ID","popup_position":"Umiestnenie (X/Y)",langdir:"Smer textu","popup_size":"Ve\u013ekos\u0165","popup_dependent":"Z\u00e1vislos\u0165 (iba Mozilla Firefox)","popup_resizable":"Umo\u017eni\u0165 zmenu ve\u013ekosti","popup_location":"Zobrazi\u0165 li\u0161tu umiestnen\u00ed","popup_menubar":"Zobrazi\u0165 ponuku","popup_toolbar":"Zobrazi\u0165 panel n\u00e1strojov","popup_statusbar":"Zobrazi\u0165 stavov\u00fd riadok","popup_scrollbars":"Zobrazi\u0165 posuvn\u00edky","popup_return":"Vlo\u017ei\u0165 \'return false\'","popup_name":"N\u00e1zov okna","popup_url":"URL vyskakovacieho okna",popup:"JavaScriptov\u00e9 okno","target_blank":"Otvori\u0165 v novom okne","target_top":"Otvori\u0165 v hlavnom okne/r\u00e1me (nahradi\u0165 v\u0161etky r\u00e1my)","target_parent":"Otvori\u0165 v nadradenom okne/r\u00e1me","target_same":"Otvori\u0165 v rovnakom okne/r\u00e1me","anchor_names":"Z\u00e1lo\u017eka","popup_opts":"Mo\u017enosti","advanced_props":"Roz\u0161\u00edren\u00e9 parametre","event_props":"Udalosti","popup_props":"Vlastnosti vyskakovacieho okna","general_props":"Obecn\u00e9 parametre","advanced_tab":"Roz\u0161\u00edren\u00e9","events_tab":"Udalosti","popup_tab":"Vyskakovacie okno","general_tab":"Obecn\u00e9",list:"Zoznam odkazov","is_external":"Zadan\u00e1 URL vyzer\u00e1 ako extern\u00fd odkaz, chcete doplni\u0165 povinn\u00fd prefix http://?","is_email":"Zadan\u00e1 URL vyzer\u00e1 ako e-mailov\u00e1 adresa, chcete doplni\u0165 povinn\u00fd prefix mailto:?",titlefield:"Titulok",target:"Cie\u013e",url:"URL odkazu",title:"Vlo\u017ei\u0165/upravi\u0165 odkaz","link_list":"Zoznam odkazov",rtl:"Sprava do\u013eava",ltr:"Z\u013eava doprava",accesskey:"Kl\u00e1vesov\u00e1 skratka",tabindex:"Poradie pre tabul\u00e1tor",rev:"Vz\u0165ah cie\u013ea k str\u00e1nke",rel:"Vz\u0165ah str\u00e1nky k cie\u013eu",mime:"MIME typ",encoding:"K\u00f3dovanie",langcode:"K\u00f3d jazyka","target_langcode":"Jazyk cie\u013ea",width:"\u0160\u00edrka",height:"V\u00fd\u0161ka"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sl_dlg.js
new file mode 100644
index 000000000..34a398b7e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.advlink_dlg',{"target_name":"Ime cilja",classes:"Razredi",style:"Slog",id:"Id","popup_position":"Polo\u017eaj (X/Y)",langdir:"Smer pisave","popup_size":"Velikost","popup_dependent":"Odvisno (le za Mozillo/Firefox)","popup_resizable":"Omogo\u010di pvoe\u010devanje okna","popup_location":"Prika\u017ei vrstico naslova","popup_menubar":"Prika\u017ei meni","popup_toolbar":"Prika\u017ei orodjarno","popup_statusbar":"Prika\u017ei vrstico stanja","popup_scrollbars":"Prika\u017ei drsnike","popup_return":"Vstavi \'return false\'","popup_name":"Ime okna","popup_url":"Naslov URL okna",popup:"Dodatno okno z javascriptom","target_blank":"Odpri v novem oknu","target_top":"Odpri v vrhnjem okviru (nadomesti vse okvire)","target_parent":"Odpri v nadrejenem oknu / okviru","target_same":"Odpri v tem oknu / okviru","anchor_names":"Sidra","popup_opts":"Mo\u017enosti","advanced_props":"Napredne lastnosti","event_props":"Dogodki","popup_props":"Lastnosti okna","general_props":"Splo\u0161ne lastnosti","advanced_tab":"Napredno","events_tab":"Dogodki","popup_tab":"Dodatno okno","general_tab":"Splo\u0161no",list:"Seznam povezav","is_external":"Vneseni naslov verjetno predstavlja zunanjo povezavo, \u017eelite da dodam zahtevano predpono","is_email":"Vneseni naslov verjetno prestavlja e-naslov, \u017eelite da dodam zahtevano predpono \\\'mailto:\\\'?",titlefield:"Naslov",target:"Cilj",url:"Naslov URL",title:"Vstavi/uredi povezavo","link_list":"Seznam povezav",rtl:"Od desne proti levi",ltr:"Od leve proti desni",accesskey:"Tipka dostopa",tabindex:"Zap. \u0161t.",rev:"Razmerje cilja do strani",rel:"Razmerje strani do cilja",mime:"Tip MIME cilja",encoding:"Kodiranje znakov cilja",langcode:"Koda jezika","target_langcode":"Jezik cilja",width:"\u0160irina",height:"Vi\u0161ina"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sq_dlg.js
new file mode 100644
index 000000000..67e428683
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.advlink_dlg',{"target_name":"Emri",classes:"Klasat",style:"Stili",id:"Id","popup_position":"Pozicioni (X/Y)",langdir:"Drejtimi i gjuh\u00ebs","popup_size":"Madh\u00ebsia","popup_dependent":"I varur (vet\u00ebm Mozilla/Firefox)","popup_resizable":"B\u00ebje dritaren t\u00eb zmadhueshme","popup_location":"Shfaq shiritin e adres\u00ebs","popup_menubar":"Shfaq menun\u00eb","popup_toolbar":"Shfaq butonat","popup_statusbar":"Shfaq shiritin e statusit","popup_scrollbars":"Shfaq ashensor\u00ebt","popup_return":"Fut \'return false\'","popup_name":"Emri i dritares","popup_url":"URL e popup",popup:"Popup me Javascript","target_blank":"Hape n\u00eb dritare t\u00eb re","target_top":"Hape n\u00eb frame-in e m\u00ebsip\u00ebrm","target_parent":"Hape n\u00eb dritaren m\u00ebm\u00eb / frame","target_same":"Hape n\u00eb k\u00ebt\u00eb dritare / frame","anchor_names":"Lidhjet","popup_opts":"Opsionet","advanced_props":"Tipare t\u00eb avancuara","event_props":"Ngjarjet","popup_props":"Tiparet e popup","general_props":"Tipare t\u00eb p\u00ebrgjithshme","advanced_tab":"T\u00eb Avancuara","events_tab":"Ngjarjet","popup_tab":"Popup","general_tab":"T\u00eb P\u00ebrgjithshme",list:"Lista e lidhjeve","is_external":"Adresa q\u00eb keni futur duket si lidhje e jashtme. D\u00ebshironi t\u00eb shtoni prefiksin http://?","is_email":"Adresa q\u00eb keni futur duket si email. D\u00ebshironi t\u00eb shtoni prefiksin mailto:?",titlefield:"Titulli",target:"Sh\u00ebnjestra",url:"URL e lidhjes",title:"Fut/edito lidhje","link_list":"Lista e lidhjeve",rtl:"Djathtas-Majtas",ltr:"Majtas-Djathtas",accesskey:"Butoni i aksesit",tabindex:"Indeksi i Tab",rev:"Marr\u00ebdh\u00ebnia sh\u00ebnjest\u00ebr-faqe",rel:"Marr\u00ebdh\u00ebnia faqe-sh\u00ebnjest\u00ebr",mime:"Tipi MIME i sh\u00ebnjestr\u00ebs",encoding:"Kodimi i karaktereve t\u00eb sh\u00ebnjestr\u00ebs",langcode:"Kodi i gjuh\u00ebs","target_langcode":"Gjuha e sh\u00ebnjestr\u00ebs",width:"Gjer\u00ebsia",height:"Gjat\u00ebsia"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sr_dlg.js
new file mode 100644
index 000000000..6e4bef205
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.advlink_dlg',{"target_name":"Naziv mete",classes:"Klase",style:"Stil",id:"Id","popup_position":"Pozicija (X/Y)",langdir:"Smer jezika","popup_size":"Veli\u010dina","popup_dependent":"Zavistan (samo za Mozilla/Firefox)","popup_resizable":"Prozor promenljive veli\u010dine","popup_location":"Prika\u017ei traku lokacije","popup_menubar":"Prika\u017ei traku menija","popup_toolbar":"Prika\u017ei trake sa alatkama","popup_statusbar":"Prika\u017ei statusnu traku","popup_scrollbars":"Prika\u017ei kliza\u010de","popup_return":"Umetni \'return false\'","popup_name":"Naziv prozora","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Otvori u novom prozoru","target_top":"Otvori u okviru na vrhu (zamenjuje sve okvire)","target_parent":"Otvori u izvornom prozoru/okviru","target_same":"Otovori u ovom prozoru/okviru","anchor_names":"Sidra","popup_opts":"Opcije","advanced_props":"Napredne osobine","event_props":"Doga\u0111aji","popup_props":"Osobine popup-a","general_props":"Osnovne osobine","advanced_tab":"Napredno","events_tab":"Doga\u0111aji","popup_tab":"Popup","general_tab":"Osnovno",list:"Lista linkova","is_external":"URL koji ste uneli izgleda kao spolja\u0161nji link, da li \u017eelite da dodate neophodni http:// prefiks?","is_email":"URL koji ste uneli izgleda kao e-mail adresa, da li \u017eelite da dodate neophodni mailto: prefiks?",titlefield:"Naslov",target:"Meta",url:"URL linka",title:"Umetni/Uredi link","link_list":"Lista linkova",rtl:"Zdesna nalevo",ltr:"Sleva nadesno",accesskey:"Taster za pristup",tabindex:"Tabindex",rev:"Odnos mete prema stranici",rel:"Odnos stranice prema meti",mime:"Odabrani MIME tip",encoding:"Odabrano kodiranje znakova",langcode:"Kod jezika","target_langcode":"Odabrani jezik",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sv_dlg.js
new file mode 100644
index 000000000..8a6194472
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.advlink_dlg',{"target_name":"M\u00e5lnamn",classes:"Klasser",style:"Stil",id:"Id","popup_position":"Position (x/y)",langdir:"Skriftriktning","popup_size":"Storlek","popup_dependent":"Beroende av (Mozilla/Firefox enbart)","popup_resizable":"Skalbart f\u00f6nster","popup_location":"Adressraden","popup_menubar":"Menyrad","popup_toolbar":"Verktygsf\u00e4lt","popup_statusbar":"Statusf\u00e4lt","popup_scrollbars":"Rullningslister","popup_return":"Infoga \'return false\'","popup_name":"F\u00f6nsternamn","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"\u00d6ppna i nytt f\u00f6nster","target_top":"\u00d6ppna i toppramen (ers\u00e4tter alla ramar)","target_parent":"\u00d6ppna i \u00f6verliggande f\u00f6nster/ram","target_same":"\u00d6ppna i detta f\u00f6nster/ram","anchor_names":"Bokm\u00e4rken","popup_opts":"Inst\u00e4llningar","advanced_props":"Avancerade inst\u00e4llningar","event_props":"H\u00e4ndelser","popup_props":"Popup-inst\u00e4llningar","general_props":"Generella inst\u00e4llningar","advanced_tab":"Avancerat","events_tab":"H\u00e4ndelser","popup_tab":"Popup","general_tab":"Generellt",list:"L\u00e4nklista","is_external":"L\u00e4nken du angav verkar vara en extern adress. Vill du infoga http:// prefixet p\u00e5 l\u00e4nken?","is_email":"L\u00e4nken du angav verkar vara en e-post adress. Vill du infoga mailto: prefixet p\u00e5 l\u00e4nken?",titlefield:"Titel",target:"M\u00e5l",url:"L\u00e4nkens URL",title:"Infoga/redigera l\u00e4nk","link_list":"L\u00e4nklista",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",accesskey:"Snabbtangent",tabindex:"Tabbindex",rev:"Omv\u00e4nd relation (rev)",rel:"Relation (rel attribut)",mime:"MIME type",encoding:"Teckenformattering",langcode:"Spr\u00e5kkod","target_langcode":"M\u00e5lspr\u00e5k",width:"Bredd",height:"H\u00f6jd"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sy_dlg.js
new file mode 100644
index 000000000..c47caeae8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.advlink_dlg',{"target_name":"Target Name",classes:"Classes",style:"Style",id:"ID","popup_position":"Position (X/Y)",langdir:"Language Direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox Only)","popup_resizable":"Make Window Resizable","popup_location":"Show Location Bar","popup_menubar":"Show Menu Bar","popup_toolbar":"Show Toolbars","popup_statusbar":"Show Status Bar","popup_scrollbars":"Show Scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window Name","popup_url":"Popup URL",popup:"JavaScript Popup","target_blank":"Open in New Window","target_top":"Open in Top Frame (Replaces All Frames)","target_parent":"Open in Parent Window/Frame","target_same":"Open in This Window/Frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced Properties","event_props":"Events","popup_props":"Popup Properties","general_props":"General Properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link List","is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/Edit Link","link_list":"Link List",rtl:"Right to Left",ltr:"Left to Right",accesskey:"AccessKey",tabindex:"TabIndex",rev:"Relationship Target to Page",rel:"Relationship Page to Target",mime:"Target MIME Type",encoding:"Target Character Encoding",langcode:"Language Code","target_langcode":"Target Language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ta_dlg.js
new file mode 100644
index 000000000..4cf49c312
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/te_dlg.js
new file mode 100644
index 000000000..323cf02c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/th_dlg.js
new file mode 100644
index 000000000..ab37a3c6f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.advlink_dlg',{"target_name":"\u0e0a\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22",classes:"\u0e04\u0e25\u0e32\u0e2a",style:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",id:"Id","popup_position":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07 (X/Y)",langdir:"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e2d\u0e48\u0e32\u0e19","popup_size":"\u0e02\u0e19\u0e32\u0e14","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e02\u0e19\u0e32\u0e14\u0e02\u0e2d\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e44\u0e14\u0e49","popup_location":"\u0e41\u0e2a\u0e14\u0e07\u0e0a\u0e48\u0e2d\u0e07\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48","popup_menubar":"\u0e41\u0e2a\u0e14\u0e07\u0e41\u0e16\u0e1a\u0e40\u0e21\u0e19\u0e39","popup_toolbar":"\u0e41\u0e2a\u0e14\u0e07\u0e17\u0e39\u0e25\u0e1a\u0e32\u0e23\u0e4c","popup_statusbar":"\u0e41\u0e2a\u0e14\u0e07\u0e41\u0e16\u0e1a\u0e2a\u0e16\u0e32\u0e19\u0e30","popup_scrollbars":"\u0e41\u0e2a\u0e14\u0e07\u0e2a\u0e01\u0e23\u0e2d\u0e25\u0e1a\u0e32\u0e23\u0e4c","popup_return":"\u0e40\u0e1e\u0e34\u0e48\u0e21 \'return false\'","popup_name":"\u0e0a\u0e37\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07","popup_url":"\u0e1b\u0e4a\u0e2d\u0e1b-\u0e2d\u0e31\u0e1e URL",popup:"\u0e08\u0e32\u0e27\u0e32 \u0e1b\u0e4a\u0e2d\u0e1b-\u0e2d\u0e31\u0e1e","target_blank":"\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48","target_top":"\u0e40\u0e1b\u0e34\u0e14\u0e17\u0e35\u0e48\u0e40\u0e1f\u0e23\u0e21\u0e1a\u0e19 (\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e17\u0e38\u0e01\u0e40\u0e1f\u0e23\u0e21)","target_parent":"\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e40\u0e14\u0e34\u0e21 / \u0e40\u0e1f\u0e23\u0e21","target_same":"\u0e40\u0e1b\u0e34\u0e14\u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48 / \u0e40\u0e1f\u0e23\u0e21","anchor_names":"\u0e0a\u0e37\u0e48\u0e2d\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","popup_opts":"\u0e15\u0e31\u0e27\u0e40\u0e25\u0e37\u0e2d\u0e01","advanced_props":"\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","event_props":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21","popup_props":"\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e1b\u0e4a\u0e2d\u0e1b-\u0e2d\u0e31\u0e1e","general_props":"\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","advanced_tab":"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","events_tab":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21","popup_tab":"\u0e1b\u0e4a\u0e2d\u0e1b-\u0e2d\u0e31\u0e1e","general_tab":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b",list:"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","is_external":"URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e1b\u0e49\u0e2d\u0e19\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01\u0e25\u0e34\u0e07\u0e04\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21 http:// \u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48 ?","is_email":"URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e1b\u0e49\u0e2d\u0e19\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e08\u0e30\u0e21\u0e35\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e2d\u0e22\u0e39\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21 mailto: \u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48 ",titlefield:"\u0e0a\u0e37\u0e48\u0e2d",target:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22",url:"\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48 \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c",title:"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","link_list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c",rtl:"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22",ltr:"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22 MIME type",encoding:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23",langcode:"\u0e42\u0e04\u0e49\u0e14\u0e20\u0e32\u0e29\u0e32","target_langcode":"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22 \u0e20\u0e32\u0e29\u0e32",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tn_dlg.js
new file mode 100644
index 000000000..f7d6e8c44
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tr_dlg.js
new file mode 100644
index 000000000..447cc3a0d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.advlink_dlg',{"target_name":"Hedef ad\u0131",classes:"S\u0131n\u0131fla",style:"Stil",id:"Id","popup_position":"Konum (X/Y)",langdir:"Dil y\u00f6n\u00fc","popup_size":"Boyut","popup_dependent":"Ba\u011f\u0131ml\u0131 (Sadece Mozilla Firefox)","popup_resizable":"Pencereyi boyutland\u0131r\u0131labilir yap","popup_location":"Aderes \u00e7ubu\u011funu g\u00f6ster","popup_menubar":"Men\u00fc \u00e7ubu\u011funu g\u00f6ster","popup_toolbar":"Ara\u00e7 kutusunu g\u00f6ster","popup_statusbar":"Durum \u00e7ubu\u011funu g\u00f6ster","popup_scrollbars":"Kayd\u0131rma \u00e7ubuklar\u0131n\u0131 g\u00f6ster","popup_return":"Ekle \'return false\'","popup_name":"Pencere ad\u0131","popup_url":"A\u00e7\u0131l\u0131r pencere URL\'si",popup:"Javascript a\u00e7\u0131l\u0131r pencere","target_blank":"Yeni pencerede a\u00e7","target_top":"\u00dcst \u00e7er\u00e7evede a\u00e7 (t\u00fcm \u00e7er\u00e7eveleri de\u011fi\u015ftir) ","target_parent":"Ana pencerede / \u00e7er\u00e7evede a\u00e7","target_same":"Pencerede / \u00e7er\u00e7evede a\u00e7","anchor_names":"Nesne tutucular","popup_opts":"Se\u00e7enekler","advanced_props":"Geli\u015fmi\u015f \u00f6zellikler","event_props":"Olaylar","popup_props":"A\u00e7\u0131l\u0131r pencere \u00f6zellikleri","general_props":"Genel \u00f6zellikler","advanced_tab":"Geli\u015fmi\u015f","events_tab":"Olaylar","popup_tab":"A\u00e7\u0131l\u0131r pencere","general_tab":"Genel",list:"Ba\u011flant\u0131 listesi","is_external":"Girdi\u011fiz URL d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan http:// \u00f6nekinin eklenmesini ister misiniz?","is_email":"Girdi\u011finiz URL e-posta adresi gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan mailto: \u00f6nekinin eklenmesini ister misiniz? prefix?",titlefield:"Ba\u015fl\u0131k",target:"Hedef",url:"Ba\u011flant\u0131 URL\'si",title:"Ba\u011flant\u0131 ekle/d\u00fczenle","link_list":"Ba\u011flant\u0131 listesi",rtl:"Soldan sa\u011fa",ltr:"Sa\u011fdan sola",accesskey:"Eri\u015fim tu\u015fu",tabindex:"Sekme indeksi",rev:"Sayfadan hedefe ili\u015fki",rel:"Hedeften sayfaya ili\u015fki",mime:"Hedef MIME tipi",encoding:"Hedef karakter kodlama",langcode:"Dil kodu","target_langcode":"Hedef dil",width:"Geni\u015flik",height:"Y\u00fckseklik"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tt_dlg.js
new file mode 100644
index 000000000..9ee04edb3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.advlink_dlg',{"target_name":"\u76ee\u6a19\u540d\u7a31",classes:"\u6a23\u5f0f\u985e",style:"\u6a23\u5f0f",id:"Id","popup_position":"\u5ea7\u6a19 (X/Y)",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u5f9e\u5c6c\u65bc ( \u50c5 Mozilla/Firefox \u6709\u6548 )","popup_resizable":"\u53ef\u8abf\u6574\u7a97\u53e3\u5927\u5c0f","popup_location":"\u986f\u793a\u4f4d\u5740\u6b04","popup_menubar":"\u986f\u793a\u529f\u80fd\u8868\u5217","popup_toolbar":"\u986f\u793a\u5de5\u5177\u5217","popup_statusbar":"\u986f\u793a\u72c0\u614b\u5217","popup_scrollbars":"\u986f\u793a\u6372\u8ef8","popup_return":"\u63d2\u5165 \'return false\'","popup_name":"\u7a97\u53e3\u540d\u7a31","popup_url":"\u5f48\u51fa\u7a97\u53e3\u4f4d\u5740",popup:"Javascript \u5feb\u986f\u7a97\u53e3","target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u958b","target_top":"\u5728\u9802\u5c64\u7a97\u53e3\u6253\u958b","target_parent":"\u5728\u7236\u7a97\u53e3\u6253\u958b","target_same":"\u5728\u7576\u524d\u7a97\u53e3\u6253\u958b","anchor_names":"\u9328\u9ede","popup_opts":"\u9078\u9805","advanced_props":"\u9032\u968e\u5c6c\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5feb\u986f\u8996\u7a97\u5c6c\u6027","general_props":"\u57fa\u672c\u5c6c\u6027","advanced_tab":"\u9032\u968e","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5feb\u986f\u7a97\u53e3","general_tab":"\u57fa\u672c",list:"\u9023\u7d50\u6e05\u55ae","is_external":"\u60a8\u8f38\u5165\u7684\u7db2\u5740\u61c9\u8a72\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\uff0c\u662f\u5426\u9700\u8981\u5728\u7db2\u5740\u524d\u52a0\u4e0a http:// ?","is_email":"\u60a8\u8f38\u5165\u7684\u61c9\u8a72\u662f\u4e00\u500b\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u7db2\u5740\u524d\u52a0\u4e0a mailto: ? ",titlefield:"\u641c\u5c0b",target:"\u76ee\u6a19",url:"\u9023\u7d50\u5730\u5740",title:"\u63d2\u5165/\u7de8\u8f2f \u9023\u7d50","link_list":"\u9023\u7d50\u6e05\u55ae",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",accesskey:"\u5feb\u901f\u9375",tabindex:"Tab\u7d22\u5f15",rev:"rev",rel:"rel",mime:"\u76ee\u6a19 MIME \u985e\u578b",encoding:"\u76ee\u7684\u8a9e\u8a00\u7de8\u78bc",langcode:"\u8a9e\u8a00\u7de8\u78bc","target_langcode":"\u76ee\u7684\u8a9e\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tw_dlg.js
new file mode 100644
index 000000000..f715bacfa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.advlink_dlg',{"target_name":"\u76ee\u6a19\u540d\u7a31",classes:"\u985e\u5225",style:"\u6a23\u5f0f",id:"ID","popup_position":"\u4f4d\u7f6e(X/Y)",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u700f\u89bd\u5668\u9650\u5236(\u50c5\u652f\u63f4 Mozilla/Firefox)","popup_resizable":"\u5f48\u7a97\u53ef\u8abf\u6574\u5927\u5c0f","popup_location":"\u986f\u793a\u5730\u5740\u6b04","popup_menubar":"\u986f\u793a\u529f\u80fd\u9078\u55ae\u5217","popup_toolbar":"\u986f\u793a\u5de5\u5177\u5217","popup_statusbar":"\u986f\u793a\u72c0\u614b\u5217","popup_scrollbars":"\u986f\u793a\u6efe\u52d5\u689d","popup_return":"\u63d2\u5165 \"return false\"","popup_name":"\u8996\u7a97\u540d\u7a31","popup_url":"\u5f48\u51fa\u8996\u7a97URL",popup:"JavaScript \u5f48\u51fa\u8996\u7a97","target_blank":"\u5728\u65b0\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","target_top":"\u5728\u9802\u90e8\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","target_parent":"\u5728\u7236\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","target_same":"\u5728\u76ee\u524d\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","anchor_names":"\u66f8\u7c64","popup_opts":"\u9078\u9805","advanced_props":"\u9ad8\u7d1a\u5c6c\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5f48\u51fa\u8996\u7a97\u5c6c\u6027","general_props":"\u4e00\u822c\u5c6c\u6027","advanced_tab":"\u9ad8\u7d1a\u5c6c\u6027","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5f48\u51fa\u8996\u7a97","general_tab":"\u4e00\u822c",list:"\u8d85\u9023\u7d50\u6e05\u55ae","is_external":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u70ba\u5916\u90e8\u8d85\u9023\u7d50\uff0c\u662f\u5426\u8981\u52a0\u4e0a \"http://\" \uff1f","is_email":"\u60a8\u8f38\u5165\u7684\u4f3c\u4e4e\u662f\u96fb\u5b50\u90f5\u4ef6\u5730\u5740,\u662f\u5426\u9700\u8981\u52a0 mailto:\uff1f",titlefield:"\u6a19\u984c",target:"\u76ee\u6a19",url:"\u8d85\u9023\u7d50URL",title:"\u63d2\u5165/\u7de8\u8f2f\u8d85\u9023\u7d50","link_list":"\u8d85\u9023\u7d50\u6e05\u55ae",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",accesskey:"\u5feb\u901f\u9375",tabindex:"Tab\u7d22\u5f15",rev:"\u76ee\u6a19\u5230\u7db2\u9801\u7684\u95dc\u4fc2",rel:"\u7db2\u9801\u5230\u76ee\u6a19\u7684\u95dc\u4fc2",mime:"\u76ee\u6a19MIME\u985e\u578b",encoding:"\u76ee\u6a19\u8a9e\u8a00\u7de8\u78bc",langcode:"\u8a9e\u8a00\u7de8\u78bc","target_langcode":"\u76ee\u6a19\u8a9e\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/uk_dlg.js
new file mode 100644
index 000000000..91d935ea8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.advlink_dlg',{"target_name":"\u041d\u0430\u0437\u0432\u0430 \u0446\u0456\u043b\u0456",classes:"\u041a\u043b\u0430\u0441\u0438",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440","popup_position":"\u041f\u043e\u0437\u0438\u0446\u0456\u044f (X/Y)",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c \u043c\u043e\u0432\u0438","popup_size":"\u0420\u043e\u0437\u043c\u0456\u0440","popup_dependent":"\u0417\u0430\u043b\u0435\u0436\u043d\u0438\u0439 (\u043b\u0438\u0448\u0435 \u0434\u043b\u044f Mozilla/Firefox)","popup_resizable":"\u0414\u043e\u0437\u0432\u043e\u043b\u044f\u0442\u0438 \u0437\u043c\u0456\u043d\u044e\u0432\u0430\u0442\u0438 \u0440\u043e\u0437\u043c\u0456\u0440","popup_location":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043f\u0430\u043d\u0435\u043b\u044c location","popup_menubar":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043c\u0435\u043d\u044e","popup_toolbar":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043f\u0430\u043d\u0435\u043b\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0456\u0432","popup_statusbar":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0441\u0442\u0430\u0442\u0443\u0441","popup_scrollbars":"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u0441\u043a\u0440\u043e\u043b\u0435\u0440\u0438","popup_return":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \'return false\'","popup_name":"\u041d\u0430\u0437\u0432\u0430 \u0432\u0456\u043a\u043d\u0430","popup_url":"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043d\u0430 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e",popup:"\u0412\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e Javascript","target_blank":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432 \u043d\u043e\u0432\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456","target_top":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0443 \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u0444\u0440\u0435\u0439\u043c\u0456 (\u0437\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0456 \u0444\u0440\u0435\u0439\u043c\u0438)","target_parent":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432 \u0431\u0430\u0442\u044c\u043a\u0456\u0432\u0441\u044c\u043a\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456 / \u0444\u0440\u0435\u0439\u043c\u0456","target_same":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432 \u0446\u044c\u043e\u043c\u0443 \u0436 \u0432\u0456\u043a\u043d\u0456 / \u0444\u0440\u0435\u0439\u043c\u0456","anchor_names":"\u042f\u043a\u043e\u0440\u0456","popup_opts":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","advanced_props":"\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","event_props":"\u041f\u043e\u0434\u0456\u0457","popup_props":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0432\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u043e\u0433\u043e \u0432\u0456\u043a\u043d\u0430","general_props":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","advanced_tab":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","events_tab":"\u041f\u043e\u0434\u0456\u0457","popup_tab":"\u0412\u0438\u0440\u0438\u043d\u0430\u044e\u0447\u0435 \u0432\u0456\u043a\u043d\u043e","general_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",list:"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c","is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 http://?","is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0457 \u043f\u043e\u0448\u0442\u0438, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 mailto:?",titlefield:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",target:"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432...",url:"\u0410\u0434\u0440\u0435\u0441\u0430",title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043b\u0456\u0432\u043e\u0440\u0443\u0447",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",accesskey:"\u041a\u043b\u0430\u0432\u0456\u0448\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0443",tabindex:"\u0422\u0430\u0431\u0456\u043d\u0434\u0435\u043a\u0441",rev:"\u0417\u0432\'\u044f\u0437\u043e\u043a \u043c\u0456\u0436 \u0446\u0456\u043b\u043b\u044e \u0442\u0430 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e",rel:"\u0417\u0432\'\u044f\u0437\u043e\u043a \u043c\u0456\u0436 \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u043e\u044e \u0442\u0430 \u0446\u0456\u043b\u043b\u044e",mime:"MIME \u0442\u0438\u043f \u0446\u0456\u043b\u0456",encoding:"\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f \u0446\u0456\u043b\u0456",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438","target_langcode":"\u041c\u043e\u0432\u0430 \u0446\u0456\u043b\u0456",width:"\u0428\u0438\u0440\u0438\u043d\u0430",height:"\u0412\u0438\u0441\u043e\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ur_dlg.js
new file mode 100644
index 000000000..69434e9fe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.advlink_dlg',{"target_name":"Target name",classes:"Classes",style:"Style",id:"Id","popup_position":"Position (X/Y)",langdir:"Language direction","popup_size":"Size","popup_dependent":"Dependent (Mozilla/Firefox only)","popup_resizable":"Make window resizable","popup_location":"Show location bar","popup_menubar":"Show menu bar","popup_toolbar":"Show toolbars","popup_statusbar":"Show status bar","popup_scrollbars":"Show scrollbars","popup_return":"Insert \'return false\'","popup_name":"Window name","popup_url":"Popup URL",popup:"Javascript popup","target_blank":"Open in new window","target_top":"Open in top frame (replaces all frames)","target_parent":"Open in parent window / frame","target_same":"Open in this window / frame","anchor_names":"Anchors","popup_opts":"Options","advanced_props":"Advanced properties","event_props":"Events","popup_props":"Popup properties","general_props":"General properties","advanced_tab":"Advanced","events_tab":"Events","popup_tab":"Popup","general_tab":"General",list:"Link list","is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",titlefield:"Title",target:"Target",url:"Link URL",title:"Insert/edit link","link_list":"Link list",rtl:"Right to left",ltr:"Left to right",accesskey:"Accesskey",tabindex:"Tabindex",rev:"Relationship target to page",rel:"Relationship page to target",mime:"Target MIME type",encoding:"Target character encoding",langcode:"Language code","target_langcode":"Target language",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/vi_dlg.js
new file mode 100644
index 000000000..01400dee8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.advlink_dlg',{"target_name":"T\u00ean \u0111\u00edch",classes:"L\u1edbp",style:"Ki\u1ec3u d\u00e1ng",id:"Id","popup_position":"V\u1ecb tr\u00ed (X/Y)",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef","popup_size":"K\u00edch th\u01b0\u1edbc","popup_dependent":"Ph\u1ee5 thu\u1ed9c (ch\u1ec9 Mozilla/Firefox)","popup_resizable":"L\u00e0m cho c\u1eeda s\u1ed5 c\u00f3 th\u1ec3 thay \u0111\u1ed5i k\u00edch c\u1ee1","popup_location":"Hi\u1ec7n th\u1ecb thanh v\u1ecb tr\u00ed","popup_menubar":"Hi\u1ec3n th\u1ecb thanh th\u1ef1c \u0111\u01a1n","popup_toolbar":"Hi\u1ec7n th\u1ecb thanh c\u00f4ng c\u1ee5","popup_statusbar":"Hi\u1ec7n th\u1ecb thanh tr\u1ea1ng th\u00e1i","popup_scrollbars":"Hi\u1ec3n th\u1ecb thanh cu\u1ed9n","popup_return":"Ch\u00e8n \'return false\'","popup_name":"T\u00ean c\u1eeda s\u1ed5","popup_url":"URL b\u1eadt l\u00ean",popup:"Javascript b\u1eadt l\u00ean","target_blank":"M\u1edf trong c\u1eeda s\u1ed5 m\u1edbi","target_top":"M\u1edf trong khung tr\u00ean c\u00f9ng (thay th\u1ebf t\u1ea5t c\u00e1c khung)","target_parent":"M\u1edf trong c\u1eeda s\u1ed5/khung cha","target_same":"M\u1edf trong c\u1eeda s\u1ed5/khung n\u00e0y","anchor_names":"M\u1ecf neo","popup_opts":"T\u00f9y ch\u1ecdn","advanced_props":"Thu\u1ed9c t\u00ednh n\u00e2ng cao","event_props":"S\u1ef1 ki\u1ec7n","popup_props":"Thu\u1ed9c t\u00ednh b\u1eadt l\u00ean","general_props":"Thu\u1ed9c t\u00ednh chung","advanced_tab":"N\u00e2ng cao","events_tab":"S\u1ef1 ki\u1ec7n","popup_tab":"B\u1eadt l\u00ean","general_tab":"Chung",list:"Danh s\u00e1ch li\u00ean k\u1ebft","is_external":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t li\u00ean k\u1ebft ngo\u00e0i, b\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 http://?","is_email":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t \u0111\u1ecba ch\u1ec9 \u0111i\u1ec7n th\u01b0, B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 mailto?",titlefield:"Ti\u00eau \u0111\u1ec1",target:"\u0110\u00edch",url:"URL Li\u00ean k\u1ebft",title:"Th\u00eam/S\u1eeda Li\u00ean k\u1ebft","link_list":"Danh s\u00e1ch li\u00ean k\u1ebft",rtl:"Ph\u1ea3i qua tr\u00e1i",ltr:"Tr\u00e1i qua ph\u1ea3i",accesskey:"Ph\u00edm truy c\u1eadp",tabindex:"Ch\u1ec9 m\u1ee5c th\u1ebb",rev:"\u0110\u00edch li\u00ean quan t\u1edbi trang",rel:"Trang li\u00ean quan t\u1edbi \u0111\u00edch",mime:"Ki\u1ec3u MIME \u0111\u00edch",encoding:"M\u00e3 h\u00f3a k\u00fd t\u1ef1 \u0111\u00edch",langcode:"M\u00e3 ng\u00f4n ng\u1eef","target_langcode":"Ng\u00f4n ng\u1eef \u0111\u00edch",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..fb228f594
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u7c7b\u522b",style:"\u6837\u5f0f",id:"ID","popup_position":"\u4f4d\u7f6e(X/Y)",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u9650\u5236(\u4ec5\u652f\u6301Mozilla/Firefox)","popup_resizable":"\u7a97\u53e3\u53ef\u8c03\u6574\u5927\u5c0f","popup_location":"\u663e\u793a\u5730\u5740\u680f","popup_menubar":"\u663e\u793a\u83dc\u5355\u680f","popup_toolbar":"\u663e\u793a\u5de5\u5177\u680f","popup_statusbar":"\u663e\u793a\u72b6\u6001\u680f","popup_scrollbars":"\u663e\u793a\u6eda\u52a8\u6761","popup_return":"\u63d2\u5165\'return false\'","popup_name":"\u7a97\u53e3\u540d\u79f0","popup_url":"\u5f39\u51faURL",popup:"Javascript\u5f39\u7a97","target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00","target_top":"\u5728\u9876\u90e8\u6846\u67b6\u6253\u5f00\uff08\u91cd\u7f6e\u6240\u6709\u6846\u67b6\uff09","target_parent":"\u5728\u7236\u7a97\u53e3/\u6846\u67b6\u6253\u5f00","target_same":"\u5728\u5f53\u524d\u7a97\u53e3/\u6846\u67b6\u6253\u5f00","anchor_names":"\u951a","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5f39\u51fa\u5c5e\u6027","general_props":"\u666e\u901a\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5f39\u51fa","general_tab":"\u666e\u901a",list:"\u94fe\u63a5\u5217\u8868","is_external":"\u60a8\u8f93\u5165\u7684URL\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\uff0c\u662f\u5426\u8981\u52a0\u4e0a\"http://\"\u524d\u7f00\uff1f","is_email":"\u60a8\u8f93\u5165URL\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u52a0\"mailto:\"\u524d\u7f00\uff1f",titlefield:"\u6807\u9898",target:"\u6253\u5f00\u65b9\u5f0f",url:"\u8d85\u94fe\u63a5URL",title:"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","link_list":"\u94fe\u63a5\u5217\u8868",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",accesskey:"\u5feb\u6377\u952e",tabindex:"Tab\u7d22\u5f15",rev:"\u76ee\u6807\u5230\u7f51\u9875\u7684\u5173\u7cfb",rel:"\u7f51\u9875\u5230\u76ee\u6807\u7684\u5173\u7cfb",mime:"\u76ee\u6807MIME\u7c7b\u578b",encoding:"\u76ee\u6807\u8bed\u8a00\u7f16\u7801",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u6807\u8bed\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..56819393e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.advlink_dlg',{"target_name":"\u76ee\u6a19\u540d\u7a31",classes:"\u985e\u5225 (Class)",style:"\u6a23\u5f0f",id:"\u9023\u7d50\u7684 ID","popup_position":"\u4f4d\u7f6e (X/Y)",langdir:"\u66f8\u5beb\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u9650\u5236 (\u50c5 Firefox \u652f\u63f4)","popup_resizable":"\u53ef\u4ee5\u8abf\u6574\u8996\u7a97\u5927\u5c0f","popup_location":"\u986f\u793a\u7db2\u5740\u5217","popup_menubar":"\u986f\u793a\u7a0b\u5f0f\u9078\u55ae","popup_toolbar":"\u986f\u793a\u5de5\u5177\u5217","popup_statusbar":"\u986f\u793a\u72c0\u614b\u5217","popup_scrollbars":"\u986f\u793a\u7db2\u9801\u6372\u8ef8","popup_return":"\u52a0\u5165\u4e00\u500b Javascript Return False \u8a9e\u6cd5","popup_name":"\u8996\u7a97\u540d\u7a31","popup_url":"\u5f48\u8df3\u8996\u7a97\u7684\u7db2\u5740",popup:"\u4f7f\u7528 Javascript \u7a0b\u5f0f\u8a9e\u8a00\u505a\u5f48\u8df3\u6548\u679c","target_blank":"\u958b\u4e00\u500b\u65b0\u8996\u7a97","target_top":"\u76f4\u63a5\u958b\u555f (\u6846\u67b6\u4e5f\u84cb\u6389)","target_parent":"\u958b\u5728\u4e3b\u8981\u756b\u9762","target_same":"\u76f4\u63a5\u958b\u555f","anchor_names":"\u9328\u9ede (\u66f8\u7c64)","popup_opts":"\u9078\u9805","advanced_props":"\u66f4\u591a\u8a2d\u5b9a","event_props":"\u4e8b\u4ef6","popup_props":"\u5f48\u8df3\u8a2d\u5b9a","general_props":"\u4e00\u822c","advanced_tab":"\u66f4\u591a","events_tab":"\u7a0b\u5f0f\u4e8b\u4ef6","popup_tab":"\u5f48\u8df3\u8996\u7a97","general_tab":"\u4e00\u822c",list:"\u9023\u7d50\u6e05\u55ae","is_external":"\u60a8\u7684\u7db2\u5740\u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b http:// \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f","is_email":"\u60a8\u7684 E-Mail \u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b mailto: \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f",titlefield:"\u6a19\u984c",target:"\u958b\u555f\u65b9\u5f0f",url:"\u9023\u7d50 URL",title:"\u52a0\u5165 / \u7de8\u8f2f\u7db2\u5740\u9023\u7d50","link_list":"\u9023\u7d50\u6e05\u55ae",rtl:"\u5f9e\u53f3\u908a\u5230\u5de6\u908a",ltr:"\u5f9e\u5de6\u908a\u5230\u53f3\u908a",accesskey:"HTML \u5feb\u901f\u9375",tabindex:"Tab \u7d22\u5f15\u4f4d\u7f6e (Tabindex)",rev:"\u9023\u7d50\u8207\u7db2\u9801\u7684\u95dc\u4fc2",rel:"\u7db2\u9801\u8207\u9023\u7d50\u7684\u95dc\u4fc2",mime:"\u9023\u7d50\u7684 MIME \u985e\u578b",encoding:"\u9023\u7d50\u4e2d\u7684\u5b57\u5143\u7de8\u78bc",langcode:"\u8a9e\u7cfb\u4ee3\u865f","target_langcode":"\u9023\u7d50\u7684\u8a9e\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh_dlg.js
new file mode 100644
index 000000000..baecf1f8d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.advlink_dlg',{"target_name":"\u9023\u7d50\u76ee\u6a19\u540d\u7a31",classes:"\u985e\u5225",style:"\u6a23\u5f0f",id:"ID","popup_position":"\u4f4d\u7f6e (X/Y)",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411","popup_size":"\u5927\u5c0f","popup_dependent":"\u700f\u89bd\u5668\u9650\u5236 (\u50c5\u652f\u63f4 Mozilla/Firefox)","popup_resizable":"\u53ef\u8abf\u6574\u5927\u5c0f\u7684\u5f48\u8df3\u8996\u7a97","popup_location":"\u986f\u793a\u7db2\u5740\u5217","popup_menubar":"\u986f\u793a\u9078\u55ae\u5217","popup_toolbar":"\u986f\u793a\u5de5\u5177\u5217","popup_statusbar":"\u986f\u793a\u72c0\u614b\u5217","popup_scrollbars":"\u986f\u793a\u6372\u8ef8","popup_return":"\u63d2\u5165 \'return false\'","popup_name":"\u8996\u7a97\u540d\u7a31","popup_url":"\u5f48\u8df3\u8996\u7a97\u7684 URL",popup:"JavaScript \u5f48\u8df3\u8996\u7a97","target_blank":"\u5728\u65b0\u8996\u7a97\u6253\u958b\u9023\u7d50","target_top":"\u5728 top \u6846\u67b6\u6253\u958b\u9023\u7d50 (\u5957\u7528\u5728\u6240\u6709\u6846\u67b6)","target_parent":"\u5728\u7236(\u4e0a\u5c64)\u8996\u7a97/\u6846\u67b6\u6253\u958b\u9023\u7d50","target_same":"\u5728\u76ee\u524d\u8996\u7a97\u6253\u958b\u9023\u7d50","anchor_names":"\u9328\u9ede","popup_opts":"\u9078\u9805","advanced_props":"\u9032\u968e\u5c6c\u6027","event_props":"Javascript \u89f8\u767c\u4e8b\u4ef6","popup_props":"\u5f48\u8df3\u8996\u7a97\u5c6c\u6027","general_props":"\u4e00\u822c\u5c6c\u6027","advanced_tab":"\u9032\u968e","events_tab":"Javascript \u89f8\u767c\u4e8b\u4ef6","popup_tab":"\u5f48\u8df3\u8996\u7a97","general_tab":"\u4e00\u822c",list:"\u9023\u7d50\u6e05\u55ae","is_external":"\u60a8\u6240\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u70ba\u5916\u90e8\u9023\u7d50, \u662f\u5426\u9700\u8981\u52a0\u4e0a http:// \u524d\u7db4?","is_email":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u96fb\u5b50\u90f5\u4ef6\u4f4d\u5740, \u662f\u5426\u9700\u8981\u52a0\u4e0a mailto: \u524d\u7db4?",titlefield:"\u9023\u7d50\u6a19\u984c",target:"\u9023\u7d50\u76ee\u6a19",url:"URL \u9023\u7d50",title:"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","link_list":"\u9023\u7d50\u6e05\u55ae",rtl:"\u5f9e\u5de6\u5230\u53f3",ltr:"\u5f9e\u53f3\u5230\u5de6",accesskey:"\u5feb\u6377\u9375",tabindex:"Tab \u7d22\u5f15",rev:"\u76ee\u6a19\u5230\u7db2\u9801\u7684\u95dc\u4fc2",rel:"\u7db2\u9801\u5230\u76ee\u6a19\u7684\u95dc\u4fc2",mime:"\u76ee\u6a19 MIME \u985e\u578b",encoding:"\u76ee\u6a19\u8a9e\u8a00\u7de8\u78bc",langcode:"\u8a9e\u8a00\u7de8\u78bc","target_langcode":"\u76ee\u6a19\u8a9e\u8a00",width:"\u5bec",height:"\u9ad8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zu_dlg.js
new file mode 100644
index 000000000..36423c489
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/advlink/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.advlink_dlg',{"target_name":"\u76ee\u6807\u540d\u79f0",classes:"\u7c7b\u578b",style:"\u6837\u5f0f",id:"Id","popup_position":"\u5ea7\u6807(X/Y)",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411","popup_size":"\u5c3a\u5bf8","popup_dependent":"\u4ece\u5c5e(\u53ea\u6709Mozilla/Firefox\u6709\u6548)","popup_resizable":"\u53ef\u8c03\u6574\u89c6\u7a97\u5c3a\u5bf8","popup_location":"\u663e\u793a\u7f51\u5740\u5217","popup_menubar":"\u663e\u793a\u529f\u80fd\u8868","popup_toolbar":"\u663e\u793a\u5de5\u5177\u5217","popup_statusbar":"\u663e\u793a\u72b6\u6001\u680f","popup_scrollbars":"\u663e\u793a\u8fb9\u6761","popup_return":"\u63d2\u5165\'return false\'","popup_name":"\u7a97\u53e3\u540d\u79f0","popup_url":"\u5feb\u663e\u89c6\u7a97\u7f51\u5740",popup:"Javascript\u5feb\u663e\u89c6\u7a97","target_blank":"\u6253\u5f00\u5728\u65b0\u89c6\u7a97","target_top":"\u6253\u5f00\u5728\u6700\u4e0a\u5c42\u7684\u6846\u67b6(\u66ff\u6362\u6240\u6709\u6846\u67b6)","target_parent":"\u6253\u5f00\u5728\u7236\u89c6\u7a97/\u6846\u67b6","target_same":"\u6253\u5f00\u5728\u65b0\u89c6\u7a97/\u6846\u67b6","anchor_names":"\u951a\u70b9","popup_opts":"\u9009\u9879","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","event_props":"\u4e8b\u4ef6","popup_props":"\u5feb\u663e\u89c6\u7a97\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","events_tab":"\u4e8b\u4ef6","popup_tab":"\u5feb\u663e\u89c6\u7a97","general_tab":"\u4e00\u822c",list:"\u8fde\u7ed3\u6e05\u5355","is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u65b9\u52a0\u5165http://\uff1f","is_email":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u90ae\u5740\u524d\u65b9\u52a0\u5165mailto:\uff1f",titlefield:"\u67e5\u627e",target:"\u76ee\u6807",url:"\u8fde\u7ed3\u4f4d\u5740",title:"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","link_list":"\u8fde\u7ed3\u6e05\u5355",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",accesskey:"\u5feb\u901f\u952e",tabindex:"Tab\u7d22\u5f15",rev:"\u76ee\u6807\u5230\u9875\u7684\u5173\u7cfb",rel:"\u9875\u5230\u76ee\u6807\u7684\u5173\u7cfb",mime:"\u76ee\u6807MIME\u7c7b\u578b",encoding:"\u7f16\u7801",langcode:"\u8bed\u8a00\u7f16\u7801","target_langcode":"\u76ee\u7684\u8bed\u8a00",width:"Width",height:"Height"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ar_dlg.js
new file mode 100644
index 000000000..80f94027c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.emotions_dlg',{cry:"\u0628\u0643\u0627\u0621",cool:"\u062c\u064a\u062f",desc:"\u0627\u0644\u0648\u0633\u0648\u0645",title:"\u0627\u0636\u0627\u0641\u0647 \u0648\u0633\u0645 \u062a\u0639\u0628\u064a\u0631\u0649",yell:"\u064a\u0635\u064a\u062d",wink:"\u063a\u0645\u0632\u0629",undecided:"\u0628\u0639\u062f","tongue_out":"\u0627\u0644\u0644\u0633\u0627\u0646 \u062e\u0627\u0631\u062c",surprised:"\u0645\u0646\u062f\u0647\u0634\u0629",smile:"\u0627\u0628\u062a\u0633\u0627\u0645\u0629",sealed:"\u0627\u0644\u0645\u062e\u062a\u0648\u0645\u0629","money_mouth":"\u0645\u062d\u0628 \u0627\u0644\u0645\u0627\u0644",laughing:"\u0627\u0644\u0636\u062d\u0643",kiss:"\u0642\u0628\u0644\u0647",innocent:"\u0627\u0644\u0628\u0631\u0627\u0621\u0647",frown:"\u0627\u0644\u062a\u062c\u0647\u0645","foot_in_mouth":"\u062d\u0630\u0627\u0621 \u0641\u0649 \u0627\u0644\u0641\u0645 (\u0627\u062e\u0631\u0633)",embarassed:"\u0627\u062d\u0631\u0627\u062c",usage:"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u0633\u0647\u0645 \u0627\u0644\u0623\u064a\u0645\u0646 \u0648\u0627\u0644\u0623\u064a\u0633\u0631 \u0644\u0644\u062a\u0646\u0642\u0644."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/az_dlg.js
new file mode 100644
index 000000000..919ef500f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.emotions_dlg',{cry:"A\u011flay\u0131r",cool:"Bomba",desc:"Smayllar",title:"Smayl \u0259lav\u0259 et",yell:"Ba\u011f\u0131r\u0131r",wink:"G\u00f6z vurur",undecided:"Q\u0259rars\u0131zl\u0131qda","tongue_out":"Dil g\u00f6st\u0259rir",surprised:"T\u0259\u0259c\u00fcbl\u0259nib",smile:"G\u00fcl\u00fcms\u0259yir",sealed:"M\u00f6h\u00fcrl\u0259nib","money_mouth":"\u00c7oxlu pul",laughing:"G\u00fcl\u00fcr",kiss:"\u00d6p\u00fc\u015f",innocent:"G\u00fcnahs\u0131z",frown:"Qa\u015fqabaql\u0131","foot_in_mouth":"Ayaqlar_m\u0259nim_a\u011fz\u0131ma!",embarassed:"Mat qalm\u0131\u015f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/be_dlg.js
new file mode 100644
index 000000000..99689795b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.emotions_dlg',{cry:"\u041f\u043b\u0430\u0447\u0430",cool:"\u041a\u043b\u0451\u0432\u044b",desc:"\u0421\u043c\u0430\u0439\u043b\u0456\u043a\u0456",title:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0441\u043c\u0430\u0439\u043b\u0456\u043a",yell:"\u041b\u044f\u043c\u0430\u043d\u0442\u0443\u0435",wink:"\u041f\u0430\u0434\u043c\u0456\u0440\u0433\u0432\u0430\u0435",undecided:"\u0423 \u043d\u0435\u0440\u0430\u0448\u0443\u0447\u0430\u0441\u0446\u0456","tongue_out":"\u041f\u0430\u043a\u0430\u0437\u0432\u0430\u0435 \u044f\u0437\u044b\u043a",surprised:"\u0417\u0434\u0437\u0456\u045e\u043b\u0435\u043d\u044b",smile:"\u0423\u0441\u043c\u0456\u0445\u0430\u0435\u0446\u0446\u0430",sealed:"\u041c\u0430\u045e\u0447\u044b\u0446\u044c","money_mouth":"\u0428\u043c\u0430\u0442 \u0433\u0440\u043e\u0448\u0430\u0439",laughing:"\u0421\u043c\u044f\u0435\u0446\u0446\u0430",kiss:"\u041f\u0430\u0446\u0430\u043b\u0443\u043d\u0430\u043a",innocent:"\u041d\u044f\u0432\u0456\u043d\u043d\u0430\u0441\u0446\u044c",frown:"\u0425\u043c\u0443\u0440\u043d\u044b","foot_in_mouth":"\u0423 \u0440\u043e\u0442 \u043c\u043d\u0435 \u043d\u043e\u0433\u0456!",embarassed:"\u0427\u044b\u0440\u0432\u0430\u043d\u0435\u0435",usage:"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u043e\u045e\u0432\u0430\u0439\u0446\u0435 \u043a\u043b\u0430\u0432\u0456\u0448\u044b \"\u041d\u0430\u043b\u0435\u0432\u0430\" \u0456 \"\u041d\u0430\u043f\u0440\u0430\u0432\u0430\" \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u044b\u0456."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bg_dlg.js
new file mode 100644
index 000000000..b15ff1cb0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"\u0415\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u0438",title:"\u0412\u043c\u044a\u043a\u043d\u0438 \u0435\u043c\u043e\u0442\u0438\u043a\u043e\u043d",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed",usage:"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438\u0442\u0435 \u043d\u0430\u043b\u044f\u0432\u043e \u0438 \u043d\u0430\u0434\u044f\u0441\u043d\u043e, \u0437\u0430 \u0434\u0430 \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043d\u044f\u043a\u043e\u044f \u0435\u043c\u043e\u0442\u0438\u043a\u043e\u043d\u043a\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bn_dlg.js
new file mode 100644
index 000000000..ff99a6526
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/br_dlg.js
new file mode 100644
index 000000000..d482e034b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.emotions_dlg',{cry:"Chor\u00e3o",cool:"Fixe",desc:"Emoticons",title:"Inserir emoticon",yell:"Irado",wink:"Piscadela",undecided:"Indeciso","tongue_out":"L\u00edngua de fora",surprised:"Surpresa",smile:"Sorriso",sealed:"Boca Fechada","money_mouth":"Avarez",laughing:"Riso",kiss:"Beijo",innocent:"Inocente",frown:"Decep\u00e7\u00e3o","foot_in_mouth":"Disse asneira",embarassed:"Embara\u00e7ado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bs_dlg.js
new file mode 100644
index 000000000..c34a7655e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.emotions_dlg',{cry:"Pla\u010d",cool:"Cool",desc:"Emocije",title:"Umetni emociju",yell:"Vi\u010de",wink:"Namigiva",undecided:"Neodlu\u010dan","tongue_out":"Belji se",surprised:"Iznena\u0111en",smile:"Osmijeh",sealed:"\u0160utim","money_mouth":"Bogata\u0161",laughing:"Smijeh",kiss:"Poljubac",innocent:"Nevina\u0161ce",frown:"Mr\u0161ti se","foot_in_mouth":"Izlanuo se",embarassed:"Sramim se"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ca_dlg.js
new file mode 100644
index 000000000..6aaba39bf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.emotions_dlg',{cry:"Plorant",cool:"Guai",desc:"Emoticones",title:"Insereix una emoticona",yell:"Cridant",wink:"Fent l\'ullet",undecided:"Indec\u00eds","tongue_out":"Llengua a fora",surprised:"Sorpr\u00e8s",smile:"Somriure",sealed:"Censurat","money_mouth":"Amb fam de diners",laughing:"Rient",kiss:"Pet\u00f3",innocent:"Innocent",frown:"Arrufant les celles","foot_in_mouth":"Amb un peu a la boca",embarassed:"Avergonyit",usage:"Feu servir fletxes esquerra i dreta per navegar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ch_dlg.js
new file mode 100644
index 000000000..66a83fb66
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u9177",desc:"\u8868\u60c5\u5217\u8868",title:"\u63d2\u5165\u8868\u60c5",yell:"\u5927\u53eb",wink:"\u7728\u773c",undecided:"\u601d\u8003","tongue_out":"\u5410\u820c\u5934",surprised:"\u60ca\u8bb6",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c34\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cn_dlg.js
new file mode 100644
index 000000000..b1d8a33f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u9177",desc:"\u8868\u60c5",title:"\u63d2\u5165\u8868\u60c5",yell:"\u53eb\u558a",wink:"\u7728\u773c",undecided:"\u672a\u5b9a","tongue_out":"\u5410\u820c\u5934",surprised:"\u5403\u60ca",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22\u4e86",laughing:"\u5927\u7b11",kiss:"\u4eb2\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c34\u5c2c",usage:"\u4f7f\u7528\u5de6\u53f3\u952e\u8df3\u8f6c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cs_dlg.js
new file mode 100644
index 000000000..625608bcc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.emotions_dlg',{cry:"Pla\u010d\u00edc\u00ed",cool:"\u00da\u017easn\u00fd",desc:"Emotikony",title:"Vlo\u017eit emotikonu",yell:"K\u0159i\u010d\u00edc\u00ed",wink:"Mrkaj\u00edc\u00ed",undecided:"Nerozhodn\u00fd","tongue_out":"S vyplazen\u00fdm jazykem",surprised:"P\u0159ekvapen\u00fd",smile:"Usm\u00edvaj\u00edc\u00ed se",sealed:"Ml\u010d\u00edc\u00ed","money_mouth":"Je na prachy",laughing:"Sm\u011bj\u00edc\u00ed se",kiss:"L\u00edbaj\u00edc\u00ed",innocent:"Nevinn\u00fd",frown:"Zamra\u010den\u00fd","foot_in_mouth":"\u0160l\u00e1pnul vedle",embarassed:"Rozpa\u010dit\u00fd",usage:"Pro navigaci pou\u017eijte \u0161ipky vlevo a vpravo."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cy_dlg.js
new file mode 100644
index 000000000..6e40f0cb2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.emotions_dlg',{cry:"Crio",cool:"Iawn",desc:"Emosiynau",title:"Mewnosod Emosiwn",yell:"Gweiddi",wink:"Wincio",undecided:"Heb benderfynu","tongue_out":"Tafod allan",surprised:"Wedi synnu",smile:"Gw\u00ean",sealed:"Wedi\'i selio","money_mouth":"Ceg arian",laughing:"Chwerthin",kiss:"Cusan",innocent:"Dieuog",frown:"Gwgu","foot_in_mouth":"Troed yn y geg",embarassed:"Embaras",usage:"Defnyddiwch saethau dde a chwith i fforio."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/da_dlg.js
new file mode 100644
index 000000000..165137e7b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.emotions_dlg',{cry:"Gr\u00e6de",cool:"Cool",desc:"Hum\u00f8rikoner",title:"Inds\u00e6t hum\u00f8rikon",yell:"R\u00e5be",wink:"Vink",undecided:"Ubeslutsom","tongue_out":"Tunge ud",surprised:"Overrasket",smile:"Smil",sealed:"Lukket","money_mouth":"Pengemund",laughing:"Grine",kiss:"Kys",innocent:"Uskyldig",frown:"Forskr\u00e6kket","foot_in_mouth":"Fod i munden",embarassed:"Flov",usage:"Brug venstre og h\u00f8jre piletaster til at navigere"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/de_dlg.js
new file mode 100644
index 000000000..9ef427cbb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.emotions_dlg',{cry:"Weinend",cool:"Cool",desc:"Smilies",title:"Smiley einf\u00fcgen",yell:"Br\u00fcllend",wink:"Zwinkernd",undecided:"Unentschlossen","tongue_out":"Zunge raus",surprised:"\u00dcberrascht",smile:"L\u00e4chelnd",sealed:"Verschlossen","money_mouth":"Geld",laughing:"Lachend",kiss:"K\u00fcssend",innocent:"Unschuldig",frown:"Stirnrunzelnd","foot_in_mouth":"Reingefallen",embarassed:"Verlegen",usage:"Navigation mit linken und rechten Pfeilen."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/dv_dlg.js
new file mode 100644
index 000000000..dfc0a9f6a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/el_dlg.js
new file mode 100644
index 000000000..c847eb29c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.emotions_dlg',{cry:"\u0394\u03b1\u03ba\u03c1\u03c5\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2",cool:"\u0386\u03bd\u03b5\u03c4\u03bf\u03c2",desc:"\u03a3\u03c5\u03bd\u03b1\u03b9\u03c3\u03b8\u03ae\u03bc\u03b1\u03c4\u03b1",title:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c5\u03bd\u03b1\u03b9\u03c3\u03b8\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2",yell:"\u03a6\u03c9\u03bd\u03ac\u03b6\u03c9",wink:"\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf \u03bc\u03b1\u03c4\u03b9\u03bf\u03cd",undecided:"\u0391\u03bd\u03b1\u03c0\u03bf\u03c6\u03ac\u03c3\u03b9\u03c3\u03c4\u03bf\u03c2","tongue_out":"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1 \u03ad\u03be\u03c9",surprised:"\u0388\u03ba\u03c0\u03bb\u03b7\u03ba\u03c4\u03bf\u03c2",smile:"\u03a7\u03b1\u03bc\u03cc\u03b3\u03b5\u03bb\u03bf",sealed:"\u03a3\u03c6\u03c1\u03b1\u03b3\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03c3\u03c4\u03cc\u03bc\u03b1","money_mouth":"\u039b\u03b5\u03c6\u03c4\u03ac \u03c9\u03c2 \u03c3\u03c4\u03cc\u03bc\u03b1",laughing:"\u0393\u03ad\u03bb\u03b9\u03bf",kiss:"\u03a6\u03b9\u03bb\u03af",innocent:"\u0391\u03b8\u03ce\u03bf\u03c2",frown:"\u039a\u03b1\u03c4\u03c3\u03bf\u03c5\u03c6\u03b9\u03b1\u03c3\u03bc\u03ad\u03bd\u03bf\u03c2","foot_in_mouth":"\u039a\u03bb\u03c9\u03c4\u03c3\u03b9\u03ac \u03c3\u03c4\u03bf \u03c3\u03c4\u03cc\u03bc\u03b1",embarassed:"\u0391\u03bc\u03ae\u03c7\u03b1\u03bd\u03bf\u03c2",usage:"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03cc \u03ba\u03b1\u03b9 \u03c4\u03bf \u03b4\u03b5\u03be\u03af \u03b2\u03ad\u03bb\u03bf\u03c2 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03b8\u03b5\u03af\u03c4\u03b5."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/en_dlg.js
new file mode 100644
index 000000000..f5aafc390
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert Emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue Out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money Mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in Mouth",embarassed:"Embarassed",usage:"Use left and right arrows to navigate."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/eo_dlg.js
new file mode 100644
index 000000000..47a7bdfee
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.emotions_dlg',{cry:"Ploranta",cool:"Mojosa",desc:"Viza\u011detoj",title:"Enmeti viza\u011deton",yell:"Kolera",wink:"Okulumo",undecided:"Sendecida","tongue_out":"Lango",surprised:"Surprizita",smile:"Rideto",sealed:"Bu\u015do Fermita","money_mouth":"Avara",laughing:"Rido",kiss:"Kiso",innocent:"Senkulpa",frown:"Malgajo","foot_in_mouth":"Rubo",embarassed:"Hontema"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/es_dlg.js
new file mode 100644
index 000000000..bdff36a57
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.emotions_dlg',{cry:"Llora",cool:"Todo bien",desc:"Emoticones",title:"Insertar emoticon",yell:"Enfadado",wink:"Gui\u00f1o",undecided:"Indeciso","tongue_out":"Lengua fuera",surprised:"Sorprendido",smile:"Sonrisa",sealed:"Sellado","money_mouth":"Dinero boca",laughing:"Risa",kiss:"Beso",innocent:"Inocente",frown:"Triste","foot_in_mouth":"Pie en la boca",embarassed:"Verg\u00fcenza",usage:"Use las flechas para navegar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/et_dlg.js
new file mode 100644
index 000000000..1b1d632a0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.emotions_dlg',{cry:"Nutt",cool:"Lahe",desc:"Emotsioonid",title:"Sisesta emotsioon",yell:"Karje",wink:"Silmapilgutus",undecided:"K\u00f5hklev","tongue_out":"Keel v\u00e4ljas",surprised:"\u00dcllatunud",smile:"Naeratus",sealed:"Suletud","money_mouth":"Rahasuu",laughing:"Naermine",kiss:"Suudlus",innocent:"S\u00fc\u00fctu",frown:"Kulmu kortsutamine","foot_in_mouth":"Jalg suus",embarassed:"H\u00e4bitunne",usage:"Kasuta navigeerimiseks vasak ja parem nooli."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/eu_dlg.js
new file mode 100644
index 000000000..e8c51bcfb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.emotions_dlg',{cry:"Negarrez",cool:"Ondo",desc:"Ikonotsoak",title:"Ikonotxoa sartu",yell:"Oihua",wink:"Keinua",undecided:"Zalantzan","tongue_out":"Mihia atera",surprised:"Harrituta",smile:"Irriparra",sealed:"Ixilik","money_mouth":"Ahoa diruz beteta",laughing:"Barrez",kiss:"Muxua",innocent:"Ni ez naiz izan",frown:"Desadostasuna","foot_in_mouth":"Hanka ahoan",embarassed:"Lotsatuta"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fa_dlg.js
new file mode 100644
index 000000000..1c1d57c0d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.emotions_dlg',{cry:"\u06af\u0631\u06cc\u0647",cool:"\u0622\u0631\u0627\u0645",desc:"\u0634\u06a9\u0644\u06a9 \u0647\u0627",title:"\u062f\u0631\u062c \u0634\u06a9\u0644\u06a9",yell:"\u0641\u0631\u06cc\u0627\u062f",wink:"\u0686\u0634\u0645\u06a9",undecided:"\u0645\u0631\u062f\u062f","tongue_out":"\u0632\u0628\u0627\u0646 \u062f\u0631\u0627\u0632\u06cc",surprised:"\u0645\u062a\u0639\u062c\u0628",smile:"\u0644\u0628\u062e\u0646\u062f",sealed:"\u0645\u0647\u0631 \u0634\u062f\u0647","money_mouth":"\u067e\u0648\u0644 \u062f\u0631 \u062f\u0647\u0627\u0646",laughing:"\u062e\u0646\u062f\u0647",kiss:"\u0628\u0648\u0633\u0647",innocent:"\u0628\u06cc \u062a\u0642\u0635\u06cc\u0631",frown:"\u0627\u062e\u0645","foot_in_mouth":"\u067e\u0627 \u062f\u0631 \u062f\u0647\u0627\u0646",embarassed:"\u062e\u062c\u0627\u0644\u062a\u06cc",usage:"\u0627\u0632 \u06a9\u0644\u06cc\u062f \u0647\u0627\u06cc \u0686\u067e \u0648 \u0631\u0627\u0633\u062a \u062c\u0647\u062a \u062d\u0631\u06a9\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fi_dlg.js
new file mode 100644
index 000000000..7e620dd5f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.emotions_dlg',{cry:"Itku",cool:"Cool",desc:"Hymi\u00f6t",title:"Lis\u00e4\u00e4 hymi\u00f6",yell:"Huuto",wink:"Silm\u00e4nisku",undecided:"P\u00e4\u00e4tt\u00e4m\u00e4t\u00f6n","tongue_out":"Kieli ulkona",surprised:"Yll\u00e4ttynyt",smile:"Hymy",sealed:"Tukittu","money_mouth":"Klink Klink (raha)",laughing:"Nauru",kiss:"Pusu",innocent:"Viaton",frown:"Otsan rypistys","foot_in_mouth":"Jalka suussa",embarassed:"Nolostunut",usage:"K\u00e4yt\u00e4 vasenta ja oikeata nuolin\u00e4pp\u00e4int\u00e4 navigointiin."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fr_dlg.js
new file mode 100644
index 000000000..971cf0966
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.emotions_dlg',{cry:"En pleurs",cool:"Cool",desc:"\u00c9motic\u00f4nes",title:"Ins\u00e9rer une \u00e9motic\u00f4ne",yell:"Criant",wink:"Clin d\'\u0153il",undecided:"Incertain","tongue_out":"Langue tir\u00e9e",surprised:"Surpris",smile:"Sourire",sealed:"Bouche cousue","money_mouth":"Avare",laughing:"Rigolant",kiss:"Bisou",innocent:"Innocent",frown:"D\u00e9\u00e7u","foot_in_mouth":"Pied de nez",embarassed:"Embarrass\u00e9",usage:"Utilisez les fl\u00e8ches gauche et droite pour naviguer."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/gl_dlg.js
new file mode 100644
index 000000000..790050a70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.emotions_dlg',{cry:"Chora",cool:"Guay",desc:"Emoticones",title:"Insertar emoticon",yell:"Anoxado",wink:"Gui\u00f1o",undecided:"Indeciso","tongue_out":"Canso",surprised:"Sorprendido",smile:"Sorriso",sealed:"Selado","money_mouth":"Cartos",laughing:"Risa",kiss:"Beso",innocent:"Inocente",frown:"Triste","foot_in_mouth":"A que dixen",embarassed:"Vergo\u00f1a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/gu_dlg.js
new file mode 100644
index 000000000..6adace002
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/he_dlg.js
new file mode 100644
index 000000000..2664cd224
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.emotions_dlg',{cry:"\u05d1\u05d5\u05db\u05d4",cool:"\u05de\u05d2\u05e0\u05d9\u05d1",desc:"\u05e1\u05de\u05d9\u05d9\u05dc\u05d9\u05dd",title:"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e1\u05de\u05d9\u05d9\u05dc\u05d9",yell:"\u05e6\u05e2\u05e7\u05d4",wink:"\u05e7\u05e8\u05d9\u05e6\u05d4",undecided:"\u05d4\u05e1\u05e0\u05e0\u05d9","tongue_out":"\u05dc\u05e9\u05d5\u05df \u05d1\u05d7\u05d5\u05e5",surprised:"\u05de\u05d5\u05e4\u05ea\u05e2",smile:"\u05d7\u05d9\u05d5\u05da",sealed:"\u05d0\u05d8\u05d5\u05dd","money_mouth":"\u05db\u05e1\u05e3",laughing:"\u05e6\u05d5\u05d7\u05e7",kiss:"\u05e0\u05e9\u05d9\u05e7\u05d4",innocent:"\u05ea\u05de\u05d9\u05dd",frown:"\u05de\u05d6\u05e2\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e4\u05d4","foot_in_mouth":"\u05e8\u05d2\u05dc \u05d1\u05e4\u05d4",embarassed:"\u05e0\u05d1\u05d5\u05da",usage:"\u05d4\u05e9\u05ea\u05de\u05e9\u05d5 \u05d1\u05d7\u05e5 \u05d9\u05de\u05d9\u05e0\u05d4 \u05d5\u05e9\u05de\u05d0\u05dc\u05d4 \u05dc\u05e0\u05d9\u05d5\u05d5\u05d8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hi_dlg.js
new file mode 100644
index 000000000..aee9ef395
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hr_dlg.js
new file mode 100644
index 000000000..d71e4a26c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.emotions_dlg',{cry:"Pla\u010d",cool:"Cool",desc:"Emotikoni",title:"Umetni emotikona",yell:"Vi\u010de",wink:"Namiguje",undecided:"Neodlu\u010dan","tongue_out":"Plazi jezik",surprised:"Iznena\u0111en",smile:"Osmijeh",sealed:"\u0160uti","money_mouth":"Bogata\u0161",laughing:"Smije se",kiss:"Poljubac",innocent:"Nevina\u0161ce",frown:"Mr\u0161ti se","foot_in_mouth":"Izlanuo se",embarassed:"Srami se"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hu_dlg.js
new file mode 100644
index 000000000..b48285bb5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.emotions_dlg',{cry:"S\u00edr\u00f3s",cool:"Kir\u00e1ly",desc:"Hangulatjelek",title:"Hangulatjel besz\u00far\u00e1sa",yell:"\u00dcv\u00f6lt\u00e9s",wink:"Kacsint\u00e1s",undecided:"Hat\u00e1rozatlan","tongue_out":"Nyelv\u00f6lt\u00e9s",surprised:"Meglepett",smile:"Vigyor",sealed:"Lakat a sz\u00e1j\u00e1n","money_mouth":"P\u00e9nz besz\u00e9l",laughing:"Nevet\u00e9s",kiss:"Cs\u00f3k",innocent:"\u00c1rtatlan",frown:"Rosszall","foot_in_mouth":"L\u00e1b a sz\u00e1jban",embarassed:"Zavarban van",usage:"A navig\u00e1l\u00e1shoz haszn\u00e1ld a bal \u00e9s jobb oldali nyilat."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hy_dlg.js
new file mode 100644
index 000000000..a43f53f8b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"\u054d\u0574\u0561\u0575\u056c\u056b\u056f\u0576\u0565\u0580",title:"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057d\u0574\u0561\u0575\u056c\u056b\u056f",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ia_dlg.js
new file mode 100644
index 000000000..3795d6874
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u51b7\u9177",desc:"\u8868\u60c5\u5217\u8868",title:"\u63d2\u5165\u8868\u60c5",yell:"\u53eb\u56b7",wink:"\u7728\u773c",undecided:"\u601d\u8003","tongue_out":"\u5410\u820c\u5934",surprised:"\u60ca\u5413",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c34\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/id_dlg.js
new file mode 100644
index 000000000..72270f404
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"sisipkan emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/is_dlg.js
new file mode 100644
index 000000000..e47753cd2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.emotions_dlg',{cry:"Gr\u00e1tandi",cool:"T\u00f6ff",desc:"Broskarlar",title:"Setja inn broskall",yell:"\u00d6skrandi",wink:"Blikk",undecided:"\u00d3\u00e1kve\u00f0inn","tongue_out":"Tungan \u00fat",surprised:"Hissa",smile:"Bros",sealed:"Rennil\u00e1samunnur","money_mouth":"Peningamunnur",laughing:"Hl\u00e6gjandi",kiss:"Koss",innocent:"Saklaus",frown:"Frown","foot_in_mouth":"F\u00f3tur \u00ed munni",embarassed:"Skammast s\u00edn"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/it_dlg.js
new file mode 100644
index 000000000..06998660a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.emotions_dlg',{cry:"Piango",cool:"Fico",desc:"Faccina",title:"Inserisci faccina",yell:"Arrabbiato",wink:"Occhiolino",undecided:"Indeciso","tongue_out":"Linguaccia",surprised:"Sorpreso",smile:"Sorridente",sealed:"Bocca sigillata","money_mouth":"Bocca danarosa",laughing:"Risatona",kiss:"Bacio",innocent:"Santarellino",frown:"Triste","foot_in_mouth":"Piede in bocca",embarassed:"Imbarazzato",usage:"Utilizza le freccie sinistra e destra per navigare."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ja_dlg.js
new file mode 100644
index 000000000..7ff287f39
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.emotions_dlg',{cry:"\u6ce3\u304d\u9854",cool:"\u30af\u30fc\u30eb",desc:"\u8868\u60c5\u30a2\u30a4\u30b3\u30f3",title:"\u8868\u60c5\u30a2\u30a4\u30b3\u30f3\u306e\u633f\u5165",yell:"\u30a8\u30fc\u30eb",wink:"\u30a6\u30a3\u30f3\u30af",undecided:"\u672a\u6c7a\u5b9a","tongue_out":"\u30a2\u30c3\u30ab\u30f3\u30d9\u30fc",surprised:"\u9a5a\u304d",smile:"\u7b11\u9854",sealed:"\u5c01\u5370","money_mouth":"\u53e3\u306b\u304a\u91d1",laughing:"\u7b11\u3044",kiss:"\u30ad\u30b9",innocent:"\u7d14\u771f\u7121\u57a2",frown:"\u6e0b\u9762","foot_in_mouth":"\u53e3\u306b\u8db3",embarassed:"\u56f0\u60d1",usage:"\u5de6\u3068\u53f3\u306e\u30ab\u30fc\u30bd\u30eb\u30ad\u30fc\u3067\u79fb\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ka_dlg.js
new file mode 100644
index 000000000..a2b76b378
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.emotions_dlg',{cry:"\u10d5\u10e2\u10d8\u10e0\u10d8\u10d5\u10d0\u10e0",cool:"\u10db\u10d0\u10d2\u10d0\u10e0\u10d8\u10d0!",desc:"\u10e1\u10db\u10d0\u10d8\u10da\u10d4\u10d1\u10d8",title:"\u10e1\u10db\u10d0\u10d8\u10da\u10d8\u10e1 \u10d0\u10e0\u10e9\u10d4\u10d5\u10d0",yell:"\u10d5\u10e7\u10d5\u10d8\u10e0\u10d8\u10d5\u10d0\u10e0",wink:"\u10d7\u10d5\u10d0\u10da\u10e1 \u10d2\u10d8\u10de\u10d0\u10ed\u10e3\u10dc\u10d4\u10d1",undecided:"\u10d5\u10d4\u10e0 \u10d2\u10d0\u10d3\u10d0\u10d5\u10ec\u10e7\u10d5\u10d8\u10e2\u10d4","tongue_out":"\u10d4\u10dc\u10d0\u10e1 \u10d2\u10d8\u10e7\u10dd\u10e4",surprised:"\u10d2\u10d0\u10db\u10d8\u10d9\u10d5\u10d8\u10e0\u10d3\u10d0",smile:"\u10d5\u10d8\u10e6\u10d8\u10db\u10d8",sealed:"\u10e1\u10d0\u10d8\u10d3\u10e3\u10db\u10da\u10dd \u10e9\u10d4\u10db\u10d7\u10d0\u10dc \u10d4\u10e0\u10d7\u10d0\u10d3 \u10db\u10dd\u10d9\u10d5\u10d3\u10d4\u10d1\u10d0","money_mouth":"\u10e4\u10e3\u10da\u10d8! \u10e4\u10e3\u10da\u10d8!",laughing:"\u10d2\u10e0\u10d4\u10e9\u10d8\u10ee\u10d0 \u10db\u10d0\u10d8\u10dc\u10ea \u10e0\u10d0 \u10d3\u10d4\u10d1\u10d8\u10da\u10d8\u10d0!",kiss:"\u10d2\u10d9\u10dd\u10ea\u10dc\u10d8",innocent:"\u10e3\u10db\u10d0\u10dc\u10d9\u10dd \u10d5\u10d0\u10e0",frown:"\u10d5\u10d8\u10e6\u10e0\u10e3\u10d1\u10da\u10d4\u10d1\u10d8","foot_in_mouth":"\u10e2\u10e4\u10e3\u10d8",embarassed:"\u10d2\u10d0\u10d5\u10ec\u10d8\u10d7\u10da\u10d3\u10d8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/kl_dlg.js
new file mode 100644
index 000000000..f359dac9f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/km_dlg.js
new file mode 100644
index 000000000..7a3962e36
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.emotions_dlg',{cry:"\u1799\u17c6",cool:"\u179f\u17bf\u1784",desc:"\u179f\u1789\u17d2\u1789\u17b6\u17a2\u17b6\u179a\u1798\u17d2\u1798\u178e\u17cd",title:"\u1794\u1789\u17d2\u1785\u17bc\u179b\u179f\u1789\u17d2\u1789\u17b6\u17a2\u17b6\u179a\u1798\u17d2\u1798\u178e\u17cd",yell:"\u179f\u17d2\u179a\u17c2\u1780",wink:"\u1798\u17b7\u1785\u1797\u17d2\u1793\u17c2\u1780",undecided:"\u17a2\u179b\u17cb\u17a2\u17c2\u1780","tongue_out":"\u179b\u17c0\u1793\u17a2\u178e\u17d2\u178a\u17b6\u178f",surprised:"\u1797\u17d2\u1789\u17b6\u1780\u17cb\u1795\u17d2\u17a2\u17be\u179b",smile:"\u1789\u1789\u17b9\u1798",sealed:"\u1780\u17bb\u17c6\u1794\u17d2\u179a\u17b6\u1794\u17cb\u1782\u17c1","money_mouth":"\u1798\u17b6\u178f\u17cb\u179b\u17bb\u1799-\u1792\u17bc\u179a\u1792\u17b6\u179a",laughing:"\u179f\u17be\u1785",kiss:"\u1790\u17be\u1794",innocent:"\u1798\u17b7\u1793\u178a\u17b9\u1784\u17a2\u17d2\u179c\u17b8",frown:"\u1785\u1784\u1785\u17b7\u1789\u17d2\u1785\u17be\u1798","foot_in_mouth":"\u179a\u17a2\u17c0\u179f\u1781\u17d2\u179b\u17bd\u1793",embarassed:"\u1781\u17d2\u1798\u17b6\u179f\u17a2\u17c0\u1793",usage:"\u1794\u17d2\u179a\u17be\u179f\u1789\u17d2\u1789\u17b6\u1796\u17d2\u179a\u17bd\u1789\u179f\u17d2\u178a\u17b6\u17c6 \u1793\u17b7\u1784\u1786\u17d2\u179c\u17c1\u1784\u178a\u17be\u1798\u17d2\u1794\u17b8\u1793\u17b6\u17c6\u1791\u17b7\u179f\u00a0\u17d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ko_dlg.js
new file mode 100644
index 000000000..ac481fcfd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.emotions_dlg',{cry:"\uc6b8\uc74c",cool:"\ucfe8\ud568",desc:"\uc774\ubaa8\ud2f0\ucf58",title:"\uc774\ubaa8\ud2f0\ucf58 \uc0bd\uc785",yell:"\uace0\ud568",wink:"\uc719\ud06c",undecided:"\uace0\ubbfc","tongue_out":"\uba54\ub871",surprised:"\ub180\ub78c",smile:"\ubbf8\uc18c",sealed:"\ubd09\uc778","money_mouth":"\ub3c8",laughing:"\uc6c3\uc74c",kiss:"\ud0a4\uc2a4",innocent:"\uc21c\uc9c4",frown:"\ucc21\uadf8\ub9b0 \uc5bc\uad74","foot_in_mouth":"\uc2e4\uc5b8",embarassed:"\ubd80\ub044\ub7ec\uc6c0",usage:"\uc88c\uc6b0 \ud654\uc0b4\ud45c\ub97c \uc0ac\uc6a9\ud574 \uc120\ud0dd\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/kz_dlg.js
new file mode 100644
index 000000000..a5e61bf30
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.emotions_dlg',{cry:"\u0416\u044b\u043b\u0430\u0443\u0434\u0430\u043c\u044b\u043d",cool:"\u041c\u044b\u049b\u0442\u044b\u043c\u044b\u043d",desc:"\u0421\u043c\u0430\u0439\u043b\u0434\u0430\u0440",title:"\u0421\u043c\u0430\u0439\u043b\u0434\u044b \u0442\u0430\u04a3\u0434\u0430\u0443",yell:"\u0410\u0439\u049b\u0430\u0439\u043b\u0430\u0443\u0434\u0430\u043c\u044b\u043d",undecided:"\u0428\u0435\u0448\u0456\u043c \u049b\u0430\u0431\u044b\u043b\u0434\u0430\u0439 \u0430\u043b\u043c\u0430\u0443\u0434\u0430\u043c\u044b\u043d",surprised:"\u0422\u0430\u04a3 \u049b\u0430\u043b\u0443\u0434\u0430\u043c\u044b\u043d",smile:"\u0416\u044b\u043c\u0438\u044e\u0434\u0430\u043c\u044b\u043d",sealed:"\u04ae\u043d\u0441\u0456\u0437\u0434\u0456\u043a\u0442\u0435\u043c\u0456\u043d","money_mouth":"\u0410\u049b\u0448\u0430",laughing:"\u041a\u04af\u043b\u0443\u0434\u0435\u043c\u0456\u043d",innocent:"\u041f\u0435\u0440\u0456\u0448\u0442\u0435",embarassed:"\u049a\u044b\u0437\u0430\u0440\u0443\u0434\u0430\u043c\u044b\u043d",usage:"\u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u04af\u0448\u0456\u043d \"\u041e\u04a3\u0493\u0430\" \u0436\u04d9\u043d\u0435 \"\u0421\u043e\u043b\u0493\u0430\" \u043f\u0435\u0440\u043d\u0435\u043b\u0435\u0440\u0456\u043d \u049b\u043e\u043b\u0434\u0430\u043d\u044b\u04a3\u044b\u0437",wink:"Wink","tongue_out":"Tongue Out",kiss:"Kiss",frown:"Frown","foot_in_mouth":"Foot in Mouth"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lb_dlg.js
new file mode 100644
index 000000000..009fe755f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.emotions_dlg',{cry:"Kr\u00e4ischend",cool:"Cool",desc:"Smileyen",title:"Smiley af\u00fcgen",yell:"Br\u00ebllend",wink:"Zwinkernd",undecided:"Onentschloss","tongue_out":"Zong eraus",surprised:"Iwwerrascht",smile:"Laachend",sealed:"Verschlossen","money_mouth":"Suen",laughing:"Laachend",kiss:"Kussend",innocent:"Onsch\u00eblleg",frown:"D\'Stir ronzelend","foot_in_mouth":"Eragefall",embarassed:"Gen\u00e9iert"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lt_dlg.js
new file mode 100644
index 000000000..d1d4006ea
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.emotions_dlg',{cry:"Verksmas",cool:"J\u0117ga",desc:"Jaustukai",title:"\u012eterpti jaustuk\u0105",yell:"Klyksmas",wink:"Mirk\u010diojimas",undecided:"Neapsisprend\u0119s","tongue_out":"I\u0161ki\u0161tas lie\u017euvis",surprised:"Nusteb\u0119s",smile:"\u0160ypsena",sealed:"Sandarus","money_mouth":"Piniginga burna",laughing:"Juokimasis",kiss:"Bu\u010dinys",innocent:"Nekaltas",frown:"Susirauk\u0119s","foot_in_mouth":"Koja burnoje",embarassed:"Susig\u0117d\u0119s",usage:"Naudokite kair\u0117s ir de\u0161in\u0117s rodykles norint nar\u0161yti."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lv_dlg.js
new file mode 100644
index 000000000..dbd57d1fa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.emotions_dlg',{cry:"Raudul\u012bgais",cool:"V\u0113sais",desc:"Smaidi\u0146i",title:"Ievietot smaidi\u0146u",yell:"Kliedzo\u0161s",wink:"Aci miedzo\u0161s",undecided:"Neizl\u0113m\u012bgs","tongue_out":"M\u0113d\u012bgs",surprised:"P\u0101rsteigts",smile:"Smaid\u012bgs",sealed:"Nosl\u0113gts","money_mouth":"Naudmutis",laughing:"Smejo\u0161s",kiss:"Sk\u016bpsts",innocent:"Nevain\u012bgs",frown:"Satraukts","foot_in_mouth":"K\u0101jmutis",embarassed:"Nokautr\u0113jies",usage:"Izmantojiet kreis\u0101s un lab\u0101s puses r\u0101d\u012bt\u0101jus, ja v\u0113laties p\u0101rl\u016bkot"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/mk_dlg.js
new file mode 100644
index 000000000..52fce732c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.emotions_dlg',{cry:"\u041f\u043b\u0430\u0447\u0435\u045a\u0435",cool:"\u0424\u0440\u0430\u0435\u0440",desc:"\u0415\u043c\u043e\u0446\u0438\u0438",title:"\u0412\u043c\u0435\u0442\u043d\u0438 \u0435\u043c\u043e\u0446\u0438\u0438",yell:"\u0412\u0438\u043a\u0430\u045a\u0435",wink:"\u041d\u0430\u043c\u0438\u0433\u043d\u0443\u0432\u0430\u045a\u0435",undecided:"\u041d\u0435\u043e\u0434\u043b\u0443\u0447\u0435\u043d","tongue_out":"\u041f\u043b\u0430\u0437\u0435\u045a\u0435",surprised:"Iznena\u0111en",smile:"\u041e\u0441\u043c\u0435\u0445",sealed:"\u040c\u0443\u0442\u0435\u045a\u0435","money_mouth":"\u0423\u0441\u0442\u0430 \u0441\u043e \u043f\u0430\u0440\u0438",laughing:"\u0421\u043c\u0435\u0435\u045a\u0435",kiss:"\u0411\u0430\u043b\u043d\u0435\u0436",innocent:"\u041d\u0435\u0432\u0438\u043d\u0430\u0448\u0447\u0435",frown:"\u0421\u0435 \u043c\u0443\u0440\u0442\u0438","foot_in_mouth":"\u0425\u0440\u0430\u043d\u0430 \u0432\u043e \u0443\u0441\u0442\u0430",embarassed:"\u0417\u0430\u0441\u0440\u0430\u043c\u0435\u043d",usage:"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 \u043b\u0435\u0432\u0430 \u0438 \u0434\u0435\u0441\u043d\u0430 \u0441\u0442\u0440\u0435\u043b\u043a\u0430 \u0437\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0458\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ml_dlg.js
new file mode 100644
index 000000000..6e73928ee
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/mn_dlg.js
new file mode 100644
index 000000000..c8270565f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.emotions_dlg',{cry:"\u0423\u0439\u043b\u0430\u0445",cool:"\u0414\u043e\u0440\u0438\u0443\u043d",desc:"\u0421\u044d\u0442\u0433\u044d\u043b \u0445\u04e9\u0434\u043b\u04e9\u043b",title:"\u0421\u044d\u0442\u0433\u044d\u043b \u0445\u04e9\u0434\u043b\u04e9\u043b \u043e\u0440\u0443\u0443\u043b\u0430\u0445",yell:"\u041e\u0440\u0438\u043b\u043e\u0445",wink:"\u041d\u04af\u0434 \u0438\u0440\u043c\u044d\u0445",undecided:"\u0428\u0438\u0439\u0434\u044d\u044d\u0433\u04af\u0439","tongue_out":"\u0425\u044d\u043b\u044d\u044d \u0433\u0430\u0440\u0433\u0430\u0445",surprised:"\u0413\u0430\u0439\u0445\u0441\u0430\u043d",smile:"\u0418\u043d\u044d\u044d\u0445",sealed:"\u0411\u0438\u0442\u04af\u04af\u043c\u0436\u0438\u043b\u0441\u044d\u043d","money_mouth":"\u041c\u04e9\u043d\u0433\u04e9",laughing:"\u0418\u043d\u044d\u044d\u0445",kiss:"\u04ae\u043d\u0441\u044d\u0445",innocent:"\u0411\u0443\u0440\u0443\u0443\u0433\u04af\u0439",frown:"\u0425\u04e9\u043c\u0441\u04e9\u0433 \u0437\u0430\u043d\u0433\u0438\u0434\u0430\u0445","foot_in_mouth":"\u0425\u0443\u0443\u0440\u0442\u0430\u0433\u0434\u0430\u0445",embarassed:"\u0421\u0430\u043d\u0434\u0430\u0440\u0441\u0430\u043d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ms_dlg.js
new file mode 100644
index 000000000..fd03f6aef
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.emotions_dlg',{cry:"Menangis",cool:"Tampan",desc:"Simbol Emosi",title:"Masukkan emosi",yell:"Menguap",wink:"Kenyit",undecided:"Tak pasti","tongue_out":"Jelir lidah",surprised:"Terkejut",smile:"Senyum",sealed:"Kacip","money_mouth":"Duit mulut",laughing:"Gelak",kiss:"Cium",innocent:"Tidak bersalah",frown:"Mengerut","foot_in_mouth":"Kaki dalam mulut",embarassed:"Malu"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/my_dlg.js
new file mode 100644
index 000000000..1f4c08568
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.emotions_dlg',{cry:"\u1004\u102d\u102f\u101c\u102d\u102f\u1000\u103a\u1019\u101a\u103a",cool:"\u1019\u102d\u102f\u1000\u103a\u1010\u101a\u103a",desc:"\u1005\u102d\u1010\u103a\u1001\u1036\u1005\u102c\u1038\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038",title:"\u1005\u102d\u1010\u103a\u1001\u1036\u1005\u102c\u1038\u1001\u103b\u1000\u103a \u1011\u100a\u103a\u1037\u1015\u102b",yell:"\u1031\u1021\u102c\u103a\u101f\u1005\u103a",wink:"\u1019\u103b\u1000\u103a\u1005\u102d\u1010\u1005\u103a\u1016\u1000\u103a\u1019\u103e\u102d\u1010\u103a\u103c\u1015",undecided:"\u1019\u1006\u1036\u102f\u1038\u103c\u1016\u1010\u103a\u1010\u1010\u103a\u1018\u1030\u1038","tongue_out":"\u101c\u103e\u103b\u102c\u1011\u102f\u1010\u103a\u103c\u1015",surprised:"\u1021\u1036\u1037\u1029\u1010\u101a\u103a",smile:"\u103c\u1015\u1036\u102f\u1038\u1010\u102f\u1036\u1037\u1010\u1036\u102f\u1037",sealed:"\u1014\u103e\u102f\u1010\u103a\u1015\u102d\u1010\u103a\u1011\u102c\u1038","money_mouth":"\u1031\u101b\u103d\u103e\u1015\u102b\u1038\u1005\u1015\u103a \u1031\u1004\u103d\u1015\u102b\u1038\u1005\u1015\u103a",laughing:"\u1021\u102c\u1038\u101b\u1015\u102b\u1038\u101b \u101b\u101a\u103a\u101c\u102d\u102f\u1000\u103a\u1019\u101a\u103a",kiss:"\u1031\u1019\u103d\u103e\u1038\u1031\u1019\u103d\u103e\u1038\u1031\u1015\u1038\u101c\u102d\u102f\u1000\u103a\u1019\u101a\u103a",innocent:"\u1021\u103c\u1015\u1005\u103a\u1000\u1004\u103a\u1038\u101e\u1030\u1015\u102b",frown:"\u1019\u103b\u1000\u103a\u1031\u1019\u103e\u102c\u1004\u103a\u1000\u103b\u1036\u102f\u1037","foot_in_mouth":"\u1014\u102c\u1038\u1014\u1032\u1037\u1019\u1014\u102c \u1016\u101d\u102b\u1038\u1014\u1032\u1037\u1014\u102c\u1015\u102b",embarassed:"\u101b\u103e\u1000\u103a\u101c\u102d\u102f\u1000\u103a\u1010\u102c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nb_dlg.js
new file mode 100644
index 000000000..24757d24a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.emotions_dlg',{cry:"Gr\u00e5ter",cool:"Kul",desc:"Hum\u00f8rfjes",title:"Sett inn hum\u00f8rfjes",yell:"Rope",wink:"Blunke",undecided:"Skeptisk","tongue_out":"Rekke tunge",surprised:"Overrasket",smile:"Smile",sealed:"Hemmelig","money_mouth":"Penger i munnen",laughing:"Ler",kiss:"Kyss",innocent:"Uskyldig",frown:"Skuffet","foot_in_mouth":"Fot i munnen",embarassed:"Flau",usage:"Bruk venstre og h\u00f8yre piltast for \u00e5 navigere."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nl_dlg.js
new file mode 100644
index 000000000..0e7d7babb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.emotions_dlg',{cry:"Huilen",cool:"Stoer",desc:"Emoties",title:"Emotie invoegen",yell:"Roepen",wink:"Knipogen",undecided:"Onbeslist","tongue_out":"Tong uitsteken",surprised:"Verrast",smile:"Lachen",sealed:"Afgesloten","money_mouth":"Hebberig",laughing:"Lachen",kiss:"Zoenen",innocent:"Onschuldig",frown:"Wenkbrauw ophalen","foot_in_mouth":"Verstomd",embarassed:"Schamen",usage:"Gebruik linker en rechter pijltjestoetsen om te navigeren."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nn_dlg.js
new file mode 100644
index 000000000..17ad594c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.emotions_dlg',{cry:"Gret",cool:"Cool",desc:"Hum\u00f8rfjes",title:"Set inn hum\u00f8rfjes",yell:"Skri",wink:"Blunke",undecided:"Skeptisk","tongue_out":"Rekkje tunge",surprised:"Overraska",smile:"Glad",sealed:"Hemmeleg","money_mouth":"Pengar i munnen",laughing:"Ler",kiss:"Kyss",innocent:"Uskyldig",frown:"Skuffa","foot_in_mouth":"Fot i munnen",embarassed:"Flau",usage:"Bruk venstre og h\u00f8gre piltast for \u00e5 navigere"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/no_dlg.js
new file mode 100644
index 000000000..66973a807
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.emotions_dlg',{cry:"Griner",cool:"Cool",desc:"Hum\u00f8rfjes",title:"Sett inn hum\u00f8rfjes",yell:"Skrik",wink:"Blunke",undecided:"Skeptisk","tongue_out":"Rekke tunge",surprised:"Overrasket",smile:"Smil",sealed:"Lukket","money_mouth":"Penger i munnen",laughing:"Ler",kiss:"Kyss",innocent:"Uskyldig",frown:"Skummer","foot_in_mouth":"Fot i munnen",embarassed:"Flau",usage:"Bruk h\u00f8yre og venstre piler for \u00e5 velge."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/pl_dlg.js
new file mode 100644
index 000000000..4e676926b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.emotions_dlg',{cry:"P\u0142acz",cool:"Wyluzowany",desc:"Emotikony",title:"Wstaw emotikon\u0119",yell:"Krzyk",wink:"Mrugni\u0119cie",undecided:"Niezdecydowany","tongue_out":"Wystawiony j\u0119zyk",surprised:"Zaskoczony",smile:"U\u015bmiech",sealed:"Zaklepany","money_mouth":"Zaanga\u017cowany",laughing:"\u015amiech",kiss:"Poca\u0142unek",innocent:"Niewinny",frown:"Dezaprobata","foot_in_mouth":"Niewyparzona g\u0119ba",embarassed:"Zmieszany",usage:"U\u017cywaj strza\u0142ek w lewo i w prawo do nawigacji."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ps_dlg.js
new file mode 100644
index 000000000..f8340f3d2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/pt_dlg.js
new file mode 100644
index 000000000..220959478
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.emotions_dlg',{cry:"Chor\u00e3o",cool:"Fixe",desc:"Emoticons",title:"Inserir emoticon",yell:"Irado",wink:"Piscadela",undecided:"Indeciso","tongue_out":"L\u00edngua de fora",surprised:"Surpresa",smile:"Sorriso",sealed:"Boca Fechada","money_mouth":"Avarez",laughing:"Riso",kiss:"Beijo",innocent:"Inocente",frown:"Decep\u00e7\u00e3o","foot_in_mouth":"Disse asneira",embarassed:"Embara\u00e7ado",usage:"Use as setas esquerda e direita para navegar."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ro_dlg.js
new file mode 100644
index 000000000..ca0aa34bb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.emotions_dlg',{cry:"Trist",cool:"Cool",desc:"Figurine emotive",title:"Insereaz\u0103 o figurin\u0103",yell:"\u021aip\u0103",wink:"Face cu ochiul",undecided:"Indecis","tongue_out":"Cu limba afar\u0103",surprised:"Surprins",smile:"Z\u00e2mbet",sealed:"Sigilat","money_mouth":"Bani \u00een gur\u0103",laughing:"R\u00e2de",kiss:"Pupic",innocent:"Nevinovat",frown:"\u00cencruntat","foot_in_mouth":"Picior \u00een gur\u0103",embarassed:"Ru\u015finat",usage:"Folose\u0219te s\u0103ge\u021bile st\u00e2nga \u0219i dreapta pentru navigare."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ru_dlg.js
new file mode 100644
index 000000000..be9f3bca9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.emotions_dlg',{cry:"\u041f\u043b\u0430\u0447\u0443",cool:"\u041a\u0440\u0443\u0442\u043e\u0439",desc:"\u0421\u043c\u0430\u0439\u043b\u044b",title:"\u0412\u044b\u0431\u043e\u0440 \u0441\u043c\u0430\u0439\u043b\u0430",yell:"\u041a\u0440\u0438\u0447\u0443",wink:"\u041f\u043e\u0434\u043c\u0438\u0433\u0438\u0432\u0430\u044e",undecided:"\u0412 \u043d\u0435\u0440\u0435\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438","tongue_out":"\u0414\u0440\u0430\u0437\u043d\u044e\u0441\u044c",surprised:"\u0423\u0434\u0438\u0432\u043b\u044f\u044e\u0441\u044c",smile:"\u0423\u043b\u044b\u0431\u0430\u044e\u0441\u044c",sealed:"\u041d\u0435\u043c \u043a\u0430\u043a \u0440\u044b\u0431\u0430","money_mouth":"\u0414\u0435\u043d\u044c\u0433\u0438",laughing:"\u0421\u043c\u0435\u044e\u0441\u044c",kiss:"\u041f\u043e\u0446\u0435\u043b\u0443\u0439",innocent:"\u0410\u043d\u0433\u0435\u043b",frown:"\u0425\u043c\u0443\u0440\u044e\u0441\u044c","foot_in_mouth":"\u0412 \u0440\u043e\u0442 \u043c\u043d\u0435 \u043d\u043e\u0433\u0438",embarassed:"\u041a\u0440\u0430\u0441\u043d\u0435\u044e",usage:"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \"\u0412\u043b\u0435\u0432\u043e\" \u0438 \"\u0412\u043f\u0440\u0430\u0432\u043e\" \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sc_dlg.js
new file mode 100644
index 000000000..b44e719b0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u51b7\u9177",desc:"\u56fe\u91ca",title:"\u63d2\u5165\u56fe\u91ca",yell:"\u53eb\u56b7",wink:"\u7728\u773c",undecided:"\u8003\u8651","tongue_out":"\u5410\u820c\u5934",surprised:"\u60ca\u5413",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c34\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/se_dlg.js
new file mode 100644
index 000000000..454923b8f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.emotions_dlg',{cry:"Gr\u00e5ter",cool:"Cool",desc:"Smileys",title:"Infoga smiley",yell:"Skrikandes",wink:"Fl\u00f6rt",undecided:"Obest\u00e4md","tongue_out":"Tungan ute",surprised:"F\u00f6rv\u00e5nad",smile:"Glad",sealed:"Tyst","money_mouth":"Guld i mun",laughing:"Skrattande",kiss:"Kyss",innocent:"Oskyldig",frown:"Rynkar p\u00e5 n\u00e4san","foot_in_mouth":"Foten i munnen",embarassed:"Sk\u00e4ms"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/si_dlg.js
new file mode 100644
index 000000000..cc41b2555
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sk_dlg.js
new file mode 100644
index 000000000..34187f357
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.emotions_dlg',{cry:"Pla\u010d\u00faci",cool:"\u00da\u017easn\u00fd",desc:"Emotikony",title:"Vlo\u017ei\u0165 emotikonu",yell:"Kri\u010diaci",wink:"\u017dmurkaj\u00faci",undecided:"Nerozhodn\u00fd","tongue_out":"S vyplazen\u00fdm jazykom",surprised:"Prekvapen\u00fd",smile:"Usmiaty",sealed:"Ml\u010diaci","money_mouth":"Je na prachy",laughing:"Smej\u00faci sa",kiss:"Bozkaj\u00faci",innocent:"Nevinn\u00fd",frown:"Zamra\u010den\u00fd","foot_in_mouth":"\u0160liapol ved\u013ea",embarassed:"Zahanben\u00fd",usage:"Pou\u017eite \u0161\u00edpky vpravo a v\u013eavo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sl_dlg.js
new file mode 100644
index 000000000..17879d28d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.emotions_dlg',{cry:"jok",cool:"kul",desc:"Sme\u0161ki",title:"Vstavi sme\u0161ka",yell:"krik",wink:"me\u017eik",undecided:"neodlo\u010den","tongue_out":"ka\u017ee jezik",surprised:"presene\u010den",smile:"nasmeh",sealed:"zape\u010dateno","money_mouth":"zlati kljun",laughing:"smeh",kiss:"poljub",innocent:"nedol\u017een",frown:"nagubano \u010delo","foot_in_mouth":"zare\u010deni kruh",embarassed:"v zadregi",usage:"Za navigacijo uporabite tipki levo in desno"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sq_dlg.js
new file mode 100644
index 000000000..5156819cf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.emotions_dlg',{cry:"Qaj",cool:"I/e lezetsh\u00ebm",desc:"Emocionet",title:"Fut emocion",yell:"B\u00ebrtit",wink:"Shkel syrin",undecided:"I/e pavendosur","tongue_out":"Gjuha jasht\u00eb",surprised:"I/e \u00e7uditur",smile:"Buz\u00ebqesh",sealed:"Dh\u00ebmb\u00ebt e mbyllur","money_mouth":"Lek\u00eb n\u00eb goj\u00eb",laughing:"Qesh",kiss:"Puth",innocent:"I/e pafajsh\u00ebm",frown:"Rrudh vetullat","foot_in_mouth":"K\u00ebmba n\u00eb goj\u00eb",embarassed:"Turp",usage:"P\u00ebrdorni butonat majtas dhe djathtas p\u00ebr navigim"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sr_dlg.js
new file mode 100644
index 000000000..4fa96ec5c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.emotions_dlg',{cry:"Pla\u010de",cool:"Kul",desc:"Smajli",title:"Umetni smajli",yell:"Vi\u010de",wink:"Namiguje",undecided:"Neodlu\u010dan","tongue_out":"Plazi se",surprised:"Iznena\u0111en",smile:"Osmehuje se",sealed:"\u0106uti kao zaliven","money_mouth":"Bogata\u0161",laughing:"Smeje se",kiss:"\u0160alje poljubac",innocent:"Nevina\u0161ce",frown:"Namr\u0161ten","foot_in_mouth":"Izletelo mu...",embarassed:"Posti\u0111en"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sv_dlg.js
new file mode 100644
index 000000000..c36ebee3d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.emotions_dlg',{cry:"Gr\u00e5ter",cool:"Cool",desc:"Smileys",title:"Infoga smiley",yell:"Skrikandes",wink:"Fl\u00f6rt",undecided:"Obest\u00e4md","tongue_out":"Tungan ute",surprised:"F\u00f6rv\u00e5nad",smile:"Glad",sealed:"Tyst","money_mouth":"Guld i mun",laughing:"Skrattande",kiss:"Kyss",innocent:"Oskyldig",frown:"Rynkar p\u00e5 n\u00e4san","foot_in_mouth":"Foten i munnen",embarassed:"Sk\u00e4ms",usage:"Anv\u00e4nd v\u00e4nster och h\u00f6ger pil f\u00f6r att navigera"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sy_dlg.js
new file mode 100644
index 000000000..0e1c57927
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.emotions_dlg',{cry:"\u0712\u071f\u0742\u071d\u072c\u0710",cool:"\u0723\u0718\u0715\u0722\u0710",desc:"\u0722\u0712\u0742\u0717\u0710",title:"\u0721\u0725\u0712\u0742\u072a \u0722\u0712\u0742\u0717\u0710",yell:"\u0721\u0729\u0718\u071a\u072c\u0710",wink:"\u0720\u0713\u0719\u0710",undecided:"\u0720\u0710 \u0726\u0723\u071d\u0729\u0718\u072c\u0710","tongue_out":"\u0720\u0721\u0722\u0710 \u0712\u072a\u071d\u0710",surprised:"\u0715\u0721\u072a\u0720\u0717",smile:"\u0712\u072a\u0723\u0721\u072c\u0710",sealed:"\u071a\u072c\u0721\u0710","money_mouth":"\u0726\u0718\u0721\u0710 \u0715\u0719\u0718\u0719\u0710",laughing:"\u0712\u071f\u071a\u071f\u0710",kiss:"\u0721\u0722\u072b\u0718\u0729\u072c\u0710",innocent:"\u0719\u071f\u071d\u0710",frown:"\u071f\u0721\u071d\u072a\u0718\u072c\u0710","foot_in_mouth":"\u0710\u0729\u0720\u0710 \u0713\u0718 \u0726\u0718\u0721\u0710",embarassed:"\u0722\u071f\u0742\u0726\u0720\u0717",usage:"\u0721\u0726\u0720\u071a \u0713\u0710\u072a\u0308\u0710 \u0723\u0721\u0720\u071d\u0308\u0710 \u0718 \u071d\u0721\u071d\u0722\u071d\u0308\u0710 \u0720\u0721\u0720\u071a\u0718\u072c\u0710"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ta_dlg.js
new file mode 100644
index 000000000..1842bb1e2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/te_dlg.js
new file mode 100644
index 000000000..507cd05dd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/th_dlg.js
new file mode 100644
index 000000000..6039d65d7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.emotions_dlg',{cry:"\u0e23\u0e49\u0e2d\u0e07\u0e44\u0e2b\u0e49",cool:"\u0e40\u0e08\u0e4b\u0e07",desc:"\u0e44\u0e2d\u0e04\u0e2d\u0e19\u0e41\u0e2a\u0e14\u0e07\u0e2d\u0e32\u0e23\u0e21\u0e13\u0e4c",title:"\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e44\u0e2d\u0e04\u0e2d\u0e19\u0e41\u0e2a\u0e14\u0e07\u0e2d\u0e32\u0e23\u0e21\u0e13\u0e4c",yell:"\u0e42\u0e27\u0e22\u0e27\u0e32\u0e22",wink:"\u0e02\u0e22\u0e34\u0e1a\u0e15\u0e32",undecided:"\u0e25\u0e31\u0e07\u0e40\u0e25","tongue_out":"\u0e41\u0e25\u0e1a\u0e25\u0e34\u0e49\u0e19",surprised:"\u0e1b\u0e23\u0e30\u0e2b\u0e25\u0e32\u0e14\u0e43\u0e08",smile:"Smile",sealed:"\u0e1b\u0e34\u0e14\u0e1b\u0e32\u0e01","money_mouth":"\u0e40\u0e07\u0e34\u0e19\u0e46\u0e46\u0e46",laughing:"\u0e2b\u0e31\u0e27\u0e40\u0e23\u0e32\u0e30",kiss:"\u0e08\u0e39\u0e1a",innocent:"\u0e44\u0e23\u0e49\u0e40\u0e14\u0e35\u0e22\u0e07\u0e2a\u0e32",frown:"\u0e1a\u0e36\u0e49\u0e07\u0e15\u0e36\u0e07","foot_in_mouth":"\u0e1b\u0e34\u0e14\u0e1b\u0e32\u0e01",embarassed:"\u0e2d\u0e32\u0e22",usage:"\u0e43\u0e0a\u0e49\u0e25\u0e39\u0e01\u0e28\u0e23\u0e0b\u0e49\u0e32\u0e22\u0e41\u0e25\u0e30\u0e02\u0e27\u0e32\u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e19\u0e33\u0e17\u0e32\u0e07"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tn_dlg.js
new file mode 100644
index 000000000..463d1cebf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tr_dlg.js
new file mode 100644
index 000000000..27491734e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.emotions_dlg',{cry:"A\u011flayan",cool:"Sakin",desc:"\u0130fadeler",title:"\u0130fade ekle",yell:"Ba\u011f\u0131rma",wink:"G\u00f6z k\u0131rpma",undecided:"Karars\u0131z","tongue_out":"Dil \u00e7\u0131karma",surprised:"\u015ea\u015f\u0131rma",smile:"G\u00fcl\u00fcmseme",sealed:"Gizli","money_mouth":"Para g\u00f6z",laughing:"Kahkaha",kiss:"\u00d6p\u00fcc\u00fck",innocent:"Masum",frown:"As\u0131k","foot_in_mouth":"Pot k\u0131rm\u0131\u015f",embarassed:"Utanga\u00e7",usage:"Gezinmek i\u00e7in sa\u011f ve sol oklar\u0131 kullan\u0131n."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tt_dlg.js
new file mode 100644
index 000000000..39127b064
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u51b7\u9177",desc:"\u8868\u60c5\u5217\u8868",title:"\u63d2\u5165\u8868\u60c5",yell:"\u53eb\u56b7",wink:"\u7728\u773c",undecided:"\u601d\u8003","tongue_out":"\u5410\u820c\u982d",surprised:"\u9a5a\u5687",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u767c\u8ca1",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76ba\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c37\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tw_dlg.js
new file mode 100644
index 000000000..49a9319cf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u9177",desc:"\u8868\u60c5\u5217\u8868",title:"\u63d2\u5165\u8868\u60c5",yell:"\u5927\u53eb",wink:"\u7728\u773c",undecided:"\u601d\u8003","tongue_out":"\u5410\u820c\u982d",surprised:"\u9a5a\u8a1d",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u767c\u8ca1",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76ba\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c37\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/uk_dlg.js
new file mode 100644
index 000000000..8798e9eca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.emotions_dlg',{cry:"\u041f\u043b\u0430\u0447",cool:"Cool",desc:"\u041f\u043e\u0441\u043c\u0456\u0448\u043a\u0438",title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0441\u043c\u0456\u0448\u043a\u0443",yell:"\u0417\u043e\u0439\u043a",wink:"\u041f\u0456\u0434\u043c\u043e\u0440\u0433\u0443\u0454",undecided:"\u041d\u0435\u0440\u0456\u0448\u0443\u0447\u0456\u0441\u0442\u044c","tongue_out":"\u041f\u043e\u043a\u0430\u0437\u0443\u0454 \u044f\u0437\u0438\u043a\u0430",surprised:"\u0417\u0434\u0438\u0432\u043e\u0432\u0430\u043d\u0456\u0441\u0442\u044c",smile:"\u041f\u043e\u0441\u043c\u0456\u0448\u043a\u0430",sealed:"Sealed","money_mouth":"\u0413\u0440\u043e\u0449\u0456 \u0432 \u0440\u043e\u0442\u0456",laughing:"\u0421\u043c\u0456\u0445",kiss:"\u041f\u043e\u0446\u0456\u043b\u0443\u043d\u043e\u043a",innocent:"\u041d\u0435\u0432\u0438\u043d\u043d\u0456\u0441\u0442\u044c",frown:"\u041d\u0430\u0441\u0443\u043f\u043b\u0435\u043d\u043d\u0456\u0441\u0442\u044c","foot_in_mouth":"\u041d\u043e\u0433\u0430 \u0432 \u0440\u043e\u0442\u0456",embarassed:"\u0417\u0431\u0435\u043d\u0442\u0435\u0436\u0435\u043d\u043d\u044f",usage:"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0456\u043b\u043a\u0438 \u0432\u043b\u0456\u0432\u043e \u0442\u0430 \u0432\u043f\u0440\u0430\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u0457"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ur_dlg.js
new file mode 100644
index 000000000..65020d0b9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.emotions_dlg',{cry:"Cry",cool:"Cool",desc:"Emotions",title:"Insert emotion",yell:"Yell",wink:"Wink",undecided:"Undecided","tongue_out":"Tongue out",surprised:"Surprised",smile:"Smile",sealed:"Sealed","money_mouth":"Money mouth",laughing:"Laughing",kiss:"Kiss",innocent:"Innocent",frown:"Frown","foot_in_mouth":"Foot in mouth",embarassed:"Embarassed"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/vi_dlg.js
new file mode 100644
index 000000000..b77323ca7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.emotions_dlg',{cry:"Kh\u00f3c",cool:"Kh\u00f4ng bi\u1ebft ng\u01b0\u1ee3ng",desc:"Bi\u1ec3u T\u01b0\u1ee3ng C\u1ea3m X\u00fac",title:"Bi\u1ec3u T\u01b0\u1ee3ng C\u1ea3m X\u00fac",yell:"La h\u00e9t",wink:"Nh\u00e1y m\u1eaft",undecided:"L\u01b0\u1ee1ng l\u1ef1","tongue_out":"L\u00e8 l\u01b0\u1ee1i",surprised:"Ng\u1ea1c nhi\u00ean",smile:"M\u1ec9m c\u01b0\u1eddi",sealed:"K\u00edn mi\u1ec7ng","money_mouth":"S\u00e1ng m\u1eaft v\u00ec $",laughing:"C\u01b0\u1eddi nh\u0103n r\u0103ng",kiss:"N\u1ee5 h\u00f4n",innocent:"Ng\u00e2y th\u01a1",frown:"Cau m\u00e0y","foot_in_mouth":"L\u1ee1 l\u1eddi",embarassed:"X\u1ea5u h\u1ed5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..1dece2ce2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.emotions_dlg',{cry:"\u54ed",cool:"\u9177",desc:"\u8868\u60c5",title:"\u63d2\u5165\u8868\u60c5",yell:"\u53eb\u558a",wink:"\u7728\u773c",undecided:"\u72b9\u8c6b","tongue_out":"\u5410\u820c\u5934",surprised:"\u60ca\u8bb6",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u8822\u8bdd",embarassed:"\u5c34\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..4b670b0f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.emotions_dlg',{cry:"\u597d\u60f3\u54ed",cool:"\u9177\u554a\uff01",desc:"\u8868\u60c5",title:"\u4f7f\u7528\u8868\u60c5\u7b26\u865f",yell:"\u554a\u554a\u554a\u554a\uff01",wink:"Wink\uff01",undecided:"\u597d\u7336\u8c6b","tongue_out":"\u5566~",surprised:"\u7d66\u4f60\u4e00\u500b\u9a5a\u559c\uff01",smile:"\u5fae\u7b11",sealed:"(\u4e0d\u80fd\u8aaa)","money_mouth":"\u9322\u9322\u9322",laughing:"\u54c8\u54c8",kiss:"\u89aa\u4e00\u500b",innocent:"\u88dd\u7121\u8f9c",frown:"\u7709\u982d\u6df1\u9396","foot_in_mouth":"\u5931\u8a00",embarassed:"\u597d\u5c37\u5c2c\u2026"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh_dlg.js
new file mode 100644
index 000000000..a50e3e3cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u9177",desc:"\u8868\u60c5\u5217\u8868",title:"\u63d2\u5165\u8868\u60c5",yell:"\u5927\u53eb",wink:"\u7728\u773c",undecided:"\u601d\u8003","tongue_out":"\u5410\u820c\u982d",surprised:"\u9a5a\u8a1d",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u767c\u8ca1",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76ba\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c37\u5c2c",usage:"\u4f7f\u7528\u5de6\u53f3\u65b9\u5411\u9375\u5207\u63db\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zu_dlg.js
new file mode 100644
index 000000000..c0386564a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/emotions/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.emotions_dlg',{cry:"\u54ed\u6ce3",cool:"\u51b7\u9177",desc:"\u56fe\u91ca",title:"\u63d2\u5165\u56fe\u91ca",yell:"\u53eb\u56b7",wink:"\u7728\u773c",undecided:"\u8003\u8651","tongue_out":"\u5410\u820c\u5934",surprised:"\u60ca\u5413",smile:"\u5fae\u7b11",sealed:"\u4fdd\u5bc6","money_mouth":"\u53d1\u8d22",laughing:"\u5927\u7b11",kiss:"\u543b",innocent:"\u5929\u771f",frown:"\u76b1\u7709","foot_in_mouth":"\u54a7\u5634",embarassed:"\u5c34\u5c2c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ar_dlg.js
new file mode 100644
index 000000000..634642b2e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.fullpage_dlg',{title:"Document properties","meta_tab":"\u0639\u0627\u0645","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u0639\u0627\u0645","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/az_dlg.js
new file mode 100644
index 000000000..2d09ff333
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.fullpage_dlg',{title:"S\u0259n\u0259d x\u00fcsusiyy\u0259tl\u0259ri","meta_tab":"\u00dcmumi","appearance_tab":"G\u00f6r\u00fcn\u00fc\u015f","advanced_tab":"\u018flav\u0259l\u0259r","meta_props":"Meta m\u0259lumat",langprops:"Dil v\u0259 kodla\u015fd\u0131rma","meta_title":"Ba\u015fl\u0131q","meta_keywords":"A\u00e7ar s\u00f6zl\u0259ri","meta_description":"T\u0259svir","meta_robots":"Robotlar",doctypes:"S\u0259n\u0259d n\u00f6v\u00fc",langcode:"Dil kodu",langdir:"Dil istiqam\u0259ti",ltr:"Soldan sa\u011fa",rtl:"Sa\u011fdan sola","xml_pi":"XML t\u0259rifi",encoding:"\u0130\u015far\u0259 kodla\u015fd\u0131rmas\u0131","appearance_bgprops":"Arxa plan x\u00fcsusiyy\u0259tl\u0259ri","appearance_marginprops":"G\u00f6vd\u0259 k\u0259narlar\u0131","appearance_linkprops":"Ke\u00e7id r\u0259ngl\u0259ri","appearance_textprops":"M\u0259tn x\u00fcsusiyy\u0259tl\u0259ri",bgcolor:"Arxa plan r\u0259ngi",bgimage:"Arxa plan \u015f\u0259kli","left_margin":"Sol bo\u015fluq","right_margin":"Sa\u011f bo\u015fluq","top_margin":"\u00dcst bo\u015fluq","bottom_margin":"Alt bo\u015fluq","text_color":"M\u0259tn r\u0259ngi","font_size":"\u015erift \u00f6l\u00e7\u00fcs\u00fc","font_face":"\u015erift n\u00f6v\u00fc","link_color":"Ke\u00e7id r\u0259ngi","hover_color":"\u00dcz\u0259rind\u0259ki r\u0259ng","visited_color":"Bax\u0131lm\u0131\u015f r\u0259ng","active_color":"Aktiv r\u0259ng",textcolor:"R\u0259ng",fontsize:"\u015erift \u00f6l\u00e7\u00fcs\u00fc",fontface:"\u015erift ail\u0259si","meta_index_follow":"\u0130ndeks et v\u0259 ke\u00e7idi izl\u0259","meta_index_nofollow":"\u0130ndeks et lakin ke\u00e7idi izl\u0259m\u0259","meta_noindex_follow":"\u0130ndeks etm\u0259 lakin ke\u00e7idi izl\u0259","meta_noindex_nofollow":"\u0130ndeks etm\u0259 v\u0259 ke\u00e7idl\u0259ri izl\u0259m\u0259","appearance_style":"Stil v\u0259r\u0259qi v\u0259 x\u00fcsusiyy\u0259tl\u0259ri",stylesheet:"Stil v\u0259r\u0259qi",style:"Stil",author:"M\u00fc\u0259llif",copyright:"M\u00fc\u0259llif h\u00fcququ",add:"Yeni element \u0259lav\u0259 et",remove:"Se\u00e7ilmi\u015f elementi sil",moveup:"Se\u00e7il\u0259n elementi yuxar\u0131 \u00e7\u0259k",movedown:"Se\u00e7il\u0259n elementi a\u015fa\u011f\u0131 \u00e7\u0259k","head_elements":"Ba\u015f elementl\u0259r",info:"M\u0259lumat","add_title":"Ba\u015fl\u0131q elementi","add_meta":"Meta elementi","add_script":"Skript elementi","add_style":"Stil elementi","add_link":"Ke\u00e7id elementi","add_base":"Baza elementi","add_comment":"\u015e\u0259rh d\u00fcy\u00fcn\u00fc","title_element":"Ba\u015fl\u0131q elementi","script_element":"Skript elementi","style_element":"Stil elementi","base_element":"Baza elementi","link_element":"Ke\u00e7id elementi","meta_element":"Meta elementi","comment_element":"\u015e\u0259rh",src:"Src",language:"Dil",href:"Href",target:"H\u0259d\u0259f",type:"N\u00f6v",charset:"\u00c7arset",defer:"T\u0259xir\u0259 sal",media:"Media",properties:"X\u00fcsusiyy\u0259tl\u0259r",name:"Ad\u0131",value:"D\u0259y\u0259r",content:"M\u0259zmun",rel:"Rel",rev:"Rev",hreflang:"Href dili","general_props":"\u00dcmumi","advanced_props":"\u018flav\u0259l\u0259r"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/be_dlg.js
new file mode 100644
index 000000000..7a15a2c44
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.fullpage_dlg',{title:"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0434\u0430\u043a\u0443\u043c\u0435\u043d\u0442\u0443","meta_tab":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f","appearance_tab":"\u0412\u0456\u0434","advanced_tab":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u0430","meta_props":"\u041c\u044d\u0442\u0430 \u0456\u043d\u0444\u0430\u0440\u043c\u0430\u0446\u044b\u0456",langprops:"\u041c\u043e\u0432\u0430 \u0456 \u043a\u0430\u0434\u0437\u0456\u0440\u043e\u045e\u043a\u0456","meta_title":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a","meta_keywords":"\u0410\u0441\u043d\u043e\u045e\u043d\u044b\u044f \u0441\u043b\u043e\u0432\u044b","meta_description":"\u0410\u043f\u0456\u0441\u0430\u043d\u043d\u0435","meta_robots":"\u0420\u043e\u0431\u0430\u0442\u044b",doctypes:"\u0422\u044b\u043f",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u044b",langdir:"\u041d\u0430\u043f\u0440\u0430\u043c\u0430\u043a \u0442\u044d\u043a\u0441\u0442\u0443",ltr:"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430","xml_pi":"\u0410\u0431\'\u044f\u045e\u043b\u0435\u043d\u043d\u0435 XML",encoding:"\u041a\u0430\u0434\u0437\u0456\u0440\u043e\u045e\u043a\u0430","appearance_bgprops":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0444\u043e\u043d\u0443","appearance_marginprops":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f\u044b","appearance_linkprops":"\u041a\u043e\u043b\u0435\u0440 \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a","appearance_textprops":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0442\u044d\u043a\u0441\u0442\u0443",bgcolor:"\u041a\u043e\u043b\u0435\u0440 \u0444\u043e\u043d\u0443",bgimage:"\u0424\u043e\u043d\u0430\u0432\u044b \u043c\u0430\u043b\u044e\u043d\u0430\u043a","left_margin":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f \u0437\u043b\u0435\u0432\u0430","right_margin":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f \u0441\u043f\u0440\u0430\u0432\u0430","top_margin":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f \u0437\u0432\u0435\u0440\u0445\u0443","bottom_margin":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f \u0437\u043d\u0456\u0437\u0443","text_color":"\u041a\u043e\u043b\u0435\u0440 \u0442\u044d\u043a\u0441\u0442\u0443","font_size":"\u041f\u0430\u043c\u0435\u0440 \u0448\u0440\u044b\u0444\u0442\u0430","font_face":"\u0428\u0440\u044b\u0444\u0442","link_color":"\u041a\u043e\u043b\u0435\u0440 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456","hover_color":"\u041a\u043e\u043b\u0435\u0440 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456 \u043f\u0440\u044b \u043d\u0430\u0432\u044f\u0434\u0437\u0435\u043d\u043d\u0456","visited_color":"\u041a\u043e\u043b\u0435\u0440 \u043d\u0430\u0446\u0456\u0441\u043d\u0443\u0442\u0430\u0439 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456","active_color":"\u041a\u043e\u043b\u0435\u0440 \u0430\u043a\u0442\u044b\u045e\u043d\u0430\u0439 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456",textcolor:"\u041a\u043e\u043b\u0435\u0440",fontsize:"\u041f\u0430\u043c\u0435\u0440 \u0448\u0440\u044b\u0444\u0442\u0430",fontface:"\u0421\u044f\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u0448\u0440\u044b\u0444\u0442\u043e\u045e","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"\u041b\u0456\u0441\u0442 \u0456 \u045e\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0441\u0442\u044b\u043b\u044f\u045e",stylesheet:"\u041b\u0456\u0441\u0442 \u0441\u0442\u044b\u043b\u044f\u045e",style:"\u0421\u0442\u044b\u043b\u044c",author:"\u0410\u045e\u0442\u0430\u0440",copyright:"\u041a\u0430\u043f\u0456\u0440\u0430\u0439\u0442",add:"\u0414\u0430\u0434\u0430\u0446\u044c \u043d\u043e\u0432\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0432\u044b\u043b\u0443\u0447\u0430\u043d\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0435\u0440\u0430\u043c\u044f\u0441\u0446\u0456\u0446\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u0432\u0435\u0440\u0445",movedown:"\u041f\u0435\u0440\u0430\u043c\u044f\u0441\u0446\u0456\u0446\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u043d\u0456\u0437","head_elements":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Header",info:"\u0406\u043d\u0444\u0430\u0440\u043c\u0430\u0446\u044b\u044f","add_title":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Title","add_meta":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Meta","add_script":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Script","add_style":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Style","add_link":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Link","add_base":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Base","add_comment":"\u041a\u0430\u043c\u0435\u043d\u0442\u0430\u0440\u044b\u0439","title_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Title","script_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Script","style_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Style","base_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Base","link_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Link","meta_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Meta","comment_element":"\u041a\u0430\u043c\u0435\u043d\u0442\u0430\u0440\u044b\u0439",src:"Src",language:"\u041c\u043e\u0432\u0430",href:"\u0421\u043f\u0430\u0441\u044b\u043b\u043a\u0430",target:"\u041c\u044d\u0442\u0430",type:"\u0422\u044b\u043f",charset:"\u041a\u0430\u0434\u0437\u0456\u0440\u043e\u045e\u043a\u0430",defer:"\u0410\u0434\u0442\u044d\u0440\u043c\u0456\u043d\u043e\u045e\u043a\u0430",media:"\u041c\u0435\u0434\u044b\u044f",properties:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",name:"\u041d\u0430\u0437\u0432\u0430",value:"\u0417\u043d\u0430\u0447\u044d\u043d\u043d\u0435",content:"\u0417\u043c\u0435\u0441\u0446\u0456\u0432\u0430",rel:"Rel",rev:"Rev",hreflang:"\u041c\u043e\u0432\u0430 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456","general_props":"\u0410\u0433\u0443\u043b\u044c\u043d\u0430\u0435","advanced_props":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bg_dlg.js
new file mode 100644
index 000000000..2076714c3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.fullpage_dlg',{title:"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","meta_tab":"\u041e\u0431\u0449\u0438","appearance_tab":"\u0412\u044a\u043d\u0448\u0435\u043d \u0432\u0438\u0434","advanced_tab":"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","meta_props":"Meta \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f",langprops:"\u0415\u0437\u0438\u043a \u0438 \u043a\u043e\u0434\u0438\u0440\u0430\u043d\u0435","meta_title":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435","meta_keywords":"\u041a\u043b\u044e\u0447\u043e\u0432\u0438 \u0434\u0443\u043c\u0438","meta_description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","meta_robots":"\u0420\u043e\u0431\u043e\u0442\u0438",doctypes:"\u0422\u0438\u043f",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430",langdir:"\u041f\u043e\u0441\u043e\u043a\u0430 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430",ltr:"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e",rtl:"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e","xml_pi":"XML \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438",encoding:"\u041a\u043e\u0434\u0438\u0440\u0430\u043d\u0435 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0442\u0435","appearance_bgprops":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0444\u043e\u043d\u0430","appearance_marginprops":"Body margins","appearance_linkprops":"\u0426\u0432\u0435\u0442\u043e\u0432\u0435 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435","appearance_textprops":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430",bgcolor:"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0434\u043e\u043d\u0430",bgimage:"\u0424\u043e\u043d\u043e\u0432\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","left_margin":"\u041b\u044f\u0432 margin","right_margin":"\u0414\u0435\u0430\u0441\u0435\u043d margin","top_margin":"\u0413\u043e\u0440\u0435\u043d margin","bottom_margin":"\u0414\u043e\u043b\u0435\u043d margin","text_color":"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430","font_face":"\u0428\u0440\u0438\u0444\u0442","link_color":"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430","hover_color":"\u0426\u0432\u044f\u0442 \u043f\u0440\u0438 hover","visited_color":"\u0426\u0432\u044f\u0442 \u0437\u0430 \u043f\u043e\u0441\u0435\u0442\u0435\u043d\u0438 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438","active_color":"\u0410\u043a\u0442\u0438\u0432\u0435\u043d \u0446\u0432\u044f\u0442",textcolor:"\u0426\u0432\u044f\u0442",fontsize:"\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430",fontface:"\u0428\u0440\u0438\u0444\u0442","meta_index_follow":"\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0439 \u0438 \u0441\u043b\u0435\u0434\u0432\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435","meta_index_nofollow":"\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0439 \u0438 \u043d\u0435 \u0441\u043b\u0435\u0434\u0432\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435","meta_noindex_follow":"\u041d\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0439 \u043d\u043e \u0441\u043b\u0435\u0434\u0432\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435","meta_noindex_nofollow":"\u041d\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0439 \u0438 \u043d\u0435 \u0441\u043b\u0435\u0434\u0432\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0438\u0442\u0435","appearance_style":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0430 Stylesheet \u0438 \u0441\u0442\u0438\u043b\u0430",stylesheet:"Stylesheet",style:"\u0421\u0442\u0438\u043b",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"Copyright",add:"\u0414\u043e\u0431\u0430\u0432\u0438 \u043d\u043e\u0432 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0440\u0438\u0434\u0432\u0438\u0436\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0433\u043e\u0440\u0435",movedown:"\u041f\u0440\u0438\u0434\u0432\u0438\u0436\u0438 \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u044f\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0434\u043e\u043b\u0443","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u041e\u0431\u0449\u0438","advanced_props":"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bn_dlg.js
new file mode 100644
index 000000000..833c995b8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/br_dlg.js
new file mode 100644
index 000000000..e271584a3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.fullpage_dlg',{title:"Propriedades do documento","meta_tab":"Geral","appearance_tab":"Apar\u00eancia","advanced_tab":"Avan\u00e7ado","meta_props":"Meta-informa\u00e7\u00e3o",langprops:"Linguagem e codifica\u00e7\u00e3o","meta_title":"T\u00edtulo","meta_keywords":"Palavras-chave","meta_description":"Descri\u00e7\u00e3o","meta_robots":"Robots",doctypes:"Doctype",langcode:"C\u00f3digo de linguagem",langdir:"Dire\u00e7\u00e3o do texto",ltr:"Esquerda para direita",rtl:"Direita para esquerda","xml_pi":"Declara\u00e7\u00e3o XML",encoding:"Codifica\u00e7\u00e3o de caracteres","appearance_bgprops":"Propriedades do plano de fundo","appearance_marginprops":"Margens (BODY)","appearance_linkprops":"Cores dos links","appearance_textprops":"Propriedades de texto",bgcolor:"Cor de fundo",bgimage:"Imagem de fundo","left_margin":"Margem esquerda","right_margin":"Margem direita","top_margin":"Margem topo","bottom_margin":"Margem base","text_color":"Cor do texto","font_size":"Tamanho fonte","font_face":"Fonte","link_color":"Cores dos links","hover_color":"Hover","visited_color":"Visited","active_color":"Active",textcolor:"Cor",fontsize:"Tamanho fonte",fontface:"Fonte","meta_index_follow":"Indexar e seguir os hyperlinks","meta_index_nofollow":"Indexar e n\u00e3o seguir os hyperlinks","meta_noindex_follow":"Seguir hyperlinks, mas n\u00e3o indexar","meta_noindex_nofollow":"N\u00e3o indexar / n\u00e3o seguir hyperlinks.","appearance_style":"Propriedades de folhas de estilo",stylesheet:"Folha de estilo",style:"Estilo",author:"Autor",copyright:"Copyright",add:"Acrescentar Novo elemento",remove:"Remover elemento selecionado",moveup:"Subir elemento selecionado",movedown:"Descer elemento selecionado","head_elements":"Elementos HEAD",info:"Informa\u00e7\u00e3o","add_title":"TITLE","add_meta":"META","add_script":"SCRIPT","add_style":"STYLE","add_link":"LINK","add_base":"BASE","add_comment":"Coment\u00e1rio","title_element":"TITLE","script_element":"SCRIPT","style_element":"STYLE","base_element":"BASE","link_element":"LINK","meta_element":"META","comment_element":"Coment\u00e1rio",src:"Src",language:"Idioma",href:"Href",target:"Alvo",type:"Tipo",charset:"Charset",defer:"Adiar",media:"Media",properties:"Propriedades",name:"Nome",value:"Valor",content:"Conte\u00fado",rel:"rel",rev:"rev",hreflang:"Href lang","general_props":"Geral","advanced_props":"Avan\u00e7ado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bs_dlg.js
new file mode 100644
index 000000000..85d8502b2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.fullpage_dlg',{title:"Svojstva dokumenta","meta_tab":"Osnovno","appearance_tab":"Izgled","advanced_tab":"Napredno","meta_props":"Meta informacije",langprops:"Jezik i kodiranje","meta_title":"Naslov","meta_keywords":"Klju\u010dne rije\u010di","meta_description":"Opis","meta_robots":"Robots",doctypes:"Doctype",langcode:"Kod jezika",langdir:"Smjer jezika",ltr:"S lijeva na desno",rtl:"S desna na lijevo","xml_pi":"XML deklaracija",encoding:"Kodiranje znakova","appearance_bgprops":"Svojstva pozadine","appearance_marginprops":"Margina","appearance_linkprops":"Boja poveznica","appearance_textprops":"Svojstva teksta",bgcolor:"Boja pozadine",bgimage:"Pozadinska slika","left_margin":"Lijeva margina","right_margin":"Desna margina","top_margin":"Gornja margina","bottom_margin":"Donja margina","text_color":"Boja teksta","font_size":"Veli\u010dina pisma","font_face":"Pismo","link_color":"Boja poveznice","hover_color":"Boja poveznice ispod mi\u0161a","visited_color":"Boja posje\u0107ene poveznice","active_color":"Boja aktivne poveznice",textcolor:"Boja",fontsize:"Veli\u010dina pisma",fontface:"Skupina pisama","meta_index_follow":"Indeksiraj i slijedi poveznice","meta_index_nofollow":"Indeksiraj i ne slijedi poveznice","meta_noindex_follow":"Ne indeksiraj i slijedi poveznice","meta_noindex_nofollow":"Ne indeksiraj i ne slijedi poveznice","appearance_style":"CSS i svojstva stila",stylesheet:"CSS",style:"Stil",author:"Autor",copyright:"Autorska prava",add:"Dodaj novi element",remove:"Ukloni odabrani element",moveup:"Pomakni odabrani element prema gore",movedown:"Pomakni odabrani element prema dolje","head_elements":"Zaglavni elementi",info:"Informacije","add_title":"Naslovni element","add_meta":"Meta element","add_script":"Skriptni element","add_style":"Sitlski element","add_link":"Element poveznice","add_base":"Osnovni element","add_comment":"Komentar","title_element":"Naslovni element","script_element":"Skriptni element","style_element":"Stilski element","base_element":"Osnovni element","link_element":"Element poveznice","meta_element":"Meta element","comment_element":"Komentar",src:"Src",language:"Jezik",href:"Href",target:"Meta",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Svojstva",name:"Ime",value:"Vrijednost",content:"Sadr\u017eaj",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Osnovno","advanced_props":"Napredno"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ca_dlg.js
new file mode 100644
index 000000000..a8f72d071
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.fullpage_dlg',{title:"Propietats del document","meta_tab":"General","appearance_tab":"Aparen\u00e7a","advanced_tab":"Avan\u00e7at","meta_props":"Metainformaci\u00f3",langprops:"Idioma i codificaci\u00f3","meta_title":"T\u00edtol","meta_keywords":"Paraules clau","meta_description":"Descripci\u00f3","meta_robots":"Robots",doctypes:"Doctype",langcode:"Codi d\'idioma",langdir:"Direcci\u00f3 de l\'idioma",ltr:"D\'esquerra a dreta",rtl:"De dreta a esquerra","xml_pi":"Declaraci\u00f3 XML",encoding:"Codificaci\u00f3 dels car\u00e0cters","appearance_bgprops":"Propietats del fons","appearance_marginprops":"Marges del cos","appearance_linkprops":"Colors d\'enlla\u00e7","appearance_textprops":"Propietats del text",bgcolor:"Color del fons",bgimage:"Imatge del fons","left_margin":"Marge esquerre","right_margin":"Marge dret","top_margin":"Marge superior","bottom_margin":"Marge inferior","text_color":"Color del text","font_size":"Mida de la font","font_face":"Font","link_color":"Color d\'enlla\u00e7","hover_color":"Color quan es passi per sobre","visited_color":"Color quan ja \u00e9s visitat","active_color":"Color quan \u00e9s actiu",textcolor:"Color",fontsize:"Mida de la font",fontface:"Fam\u00edlia de la font","meta_index_follow":"Indexa i segueix els enlla\u00e7os","meta_index_nofollow":"Indexa i no segueixis els enlla\u00e7os","meta_noindex_follow":"No indexis per\u00f2 segueix els enlla\u00e7os","meta_noindex_nofollow":"No indexis i no segueixis els enlla\u00e7os","appearance_style":"Full d\'estils i propietats dels estils",stylesheet:"Full d\'estils",style:"Estil",author:"Autor",copyright:"Copyright",add:"Afegeix un nou element",remove:"Elimina l\'element seleccionat",moveup:"Mou amunt l\'element seleccionat",movedown:"Mou avall l\'element seleccionat","head_elements":"Elements d\'encap\u00e7alament",info:"Informaci\u00f3","add_title":"Element t\u00edtol","add_meta":"Element meta","add_script":"Element script","add_style":"Element estil","add_link":"Element enlla\u00e7","add_base":"Element base","add_comment":"Node comentari","title_element":"Element t\u00edtol","script_element":"Element script","style_element":"Element estil","base_element":"Element base","link_element":"Element enlla\u00e7","meta_element":"Element meta","comment_element":"Comentari",src:"Src",language:"Idioma",href:"Href",target:"Dest\u00ed",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Propietats",name:"Nom",value:"Valor",content:"Contingut",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Avan\u00e7at"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ch_dlg.js
new file mode 100644
index 000000000..a506a7852
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.fullpage_dlg',{title:"\u6863\u6848\u5c5e\u6027","meta_tab":"\u6807\u51c6","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"Mata\u8baf\u606f",langprops:"\u8bed\u8a00\u7f16\u7801","meta_title":"\u6807\u9898","meta_keywords":"\u5173\u952e\u5b57","meta_description":"\u8bf4\u660e","meta_robots":"Robots",doctypes:"DocType",langcode:"\u6587\u5b57\u7f16\u7801",langdir:"\u6587\u5b57\u4e66\u5199\u65b9\u5411",ltr:"\u4ece\u5de6\u5230\u53f3",rtl:"\u4ece\u53f3\u5230\u5de6","xml_pi":"XML\u58f0\u660e",encoding:"\u8bed\u8a00\u7f16\u7801","appearance_bgprops":"\u80cc\u666f\u989c\u8272","appearance_marginprops":"\u8fb9\u8ddd","appearance_linkprops":"\u8d85\u8fde\u7ed3\u989c\u8272","appearance_textprops":"\u6587\u5b57\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u8fb9\u8ddd","right_margin":"\u53f3\u8fb9\u8ddd","top_margin":"\u4e0a\u8fb9\u8ddd","bottom_margin":"\u4e0b\u8fb9\u8ddd","text_color":"\u6587\u5b57\u989c\u8272","font_size":"\u6587\u5b57\u5927\u5c0f","font_face":"\u5b57\u4f53","link_color":"\u8d85\u8fde\u7ed3\u989c\u8272","hover_color":"Hover \u989c\u8272","visited_color":"Visited \u989c\u8272","active_color":"Active \u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u6587\u5b57\u5927\u5c0f",fontface:"\u5b57\u4f53","meta_index_follow":"\u7d22\u5f15\u5e76\u8fde\u7ed3","meta_index_nofollow":"\u7d22\u5f15\u4f46\u4e0d\u8fde\u7ed3","meta_noindex_follow":"\u4e0d\u7d22\u5f15\u4f46\u8fde\u7ed3","meta_noindex_nofollow":"\u4e0d\u7d22\u5f15\u4e5f\u4e0d\u8fde\u7ed3","appearance_style":"\u6837\u5f0f\u5217\u8868\u4e0e\u6837\u5f0f\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u5217\u8868",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743\u58f0\u660e",add:"\u65b0\u589e\u5143\u7d20",remove:"\u5220\u9664\u9009\u62e9\u5143\u7d20",moveup:"\u4e0a\u79fb\u9009\u62e9\u5143\u7d20",movedown:"\u4e0b\u79fb\u9009\u62e9\u5143\u7d20","head_elements":"Head \u5143\u7d20",info:"\u4fe1\u606f","add_title":"Title \u5143\u7d20","add_meta":"Meta \u5143\u7d20","add_script":"Script \u5143\u7d20","add_style":"Style \u5143\u7d20","add_link":"Link \u5143\u7d20","add_base":"Base \u5143\u7d20","add_comment":"\u6ce8\u91ca","title_element":"Title \u5143\u7d20","script_element":"Script \u5143\u7d20","style_element":"Style \u5143\u7d20","base_element":"Base \u5143\u7d20","link_element":"Link \u5143\u7d20","meta_element":"Meta \u5143\u7d20","comment_element":"\u6ce8\u91ca",src:"src",language:"\u8bed\u8a00",href:"href",target:"\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u7b26\u96c6",defer:"Defer",media:"\u5f71\u7247",properties:"\u5c5e\u6027",name:"\u540d\u79f0",value:"\u503c",content:"\u5185\u5bb9",rel:"rel",rev:"rev",hreflang:"href lang","general_props":"\u6807\u51c6","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cn_dlg.js
new file mode 100644
index 000000000..045ba71bf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.fullpage_dlg',{title:"\u6587\u6863\u5c5e\u6027","meta_tab":"\u5e38\u89c4","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"Meta\u4fe1\u606f",langprops:"\u8bed\u8a00\u4e0e\u5b57\u7b26\u96c6","meta_title":"\u6807\u9898","meta_keywords":"\u5173\u952e\u5b57","meta_description":"\u63cf\u8ff0","meta_robots":"\u641c\u7d22\u673a\u5668\u4eba",doctypes:"\u6587\u6863\u7c7b\u578b",langcode:"\u8bed\u8a00\u4ee3\u53f7",langdir:"\u6587\u5b57\u65b9\u5411",ltr:"\u4ece\u5de6\u5230\u53f3",rtl:"\u4ece\u53f3\u5230\u5de6","xml_pi":"XML\u58f0\u660e",encoding:"\u5b57\u7b26\u96c6","appearance_bgprops":"\u80cc\u666f\u5c5e\u6027","appearance_marginprops":"Body\u5916\u8fb9\u6846","appearance_linkprops":"\u94fe\u63a5\u989c\u8272","appearance_textprops":"\u6587\u672c\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u5916\u8fb9\u8ddd","right_margin":"\u53f3\u5916\u8fb9\u8ddd","top_margin":"\u4e0a\u5916\u8fb9\u8ddd","bottom_margin":"\u4e0b\u5916\u8fb9\u8ddd","text_color":"\u6587\u672c\u989c\u8272","font_size":"\u5b57\u4f53\u5927\u5c0f","font_face":"\u5b57\u4f53\u5916\u89c2","link_color":"\u94fe\u63a5\u989c\u8272","hover_color":"\u9f20\u6807\u60ac\u505c\u989c\u8272","visited_color":"\u5df2\u8bbf\u95ee\u989c\u8272","active_color":"\u6fc0\u6d3b\u65f6\u7684\u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u5b57\u4f53\u5927\u5c0f",fontface:"\u5b57\u4f53","meta_index_follow":"\u7d22\u5f15\u5e76\u8fde\u7ed3","meta_index_nofollow":"\u7d22\u5f15\u4f46\u4e0d\u8fde\u7ed3","meta_noindex_follow":"\u4e0d\u7d22\u5f15\u4f46\u8fde\u7ed3","meta_noindex_nofollow":"\u4e0d\u7d22\u5f15\u4e5f\u4e0d\u8fde\u7ed3","appearance_style":"\u6837\u5f0f\u5217\u8868\u4e0e\u6837\u5f0f\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u5217\u8868",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743",add:"\u6dfb\u52a0\u65b0\u5143\u7d20",remove:"\u5220\u9664\u5df2\u9009\u5143\u7d20",moveup:"\u5411\u4e0a\u79fb\u52a8\u5df2\u9009\u5143\u7d20",movedown:"\u5411\u4e0b\u79fb\u52a8\u5df2\u9009\u5143\u7d20","head_elements":"Head\u5143\u7d20",info:"\u4fe1\u606f","add_title":"Title\u5143\u7d20","add_meta":"Meta\u5143\u7d20","add_script":"Script\u5143\u7d20","add_style":"Style\u5143\u7d20","add_link":"Link\u5143\u7d20","add_base":"Base\u5143\u7d20","add_comment":"\u6ce8\u91ca","title_element":"Title\u5143\u7d20","script_element":"Script\u5143\u7d20","style_element":"Style\u5143\u7d20","base_element":"Base\u5143\u7d20","link_element":"Link\u5143\u7d20","meta_element":"Meta\u5143\u7d20","comment_element":"\u6ce8\u91ca",src:"Src\u5730\u5740",language:"\u8bed\u8a00",href:"Href\u94fe\u63a5",target:"Target\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u7b26\u96c6",defer:"Defer\u5b9a\u4e49",media:"\u5a92\u4f53",properties:"\u5c5e\u6027",name:"\u540d\u79f0",value:"\u503c",content:"\u5185\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u5e38\u89c4","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cs_dlg.js
new file mode 100644
index 000000000..7b9d5808d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.fullpage_dlg',{title:"Vlastnosti dokumentu","meta_tab":"Obecn\u00e9","appearance_tab":"Vzhled","advanced_tab":"Roz\u0161\u00ed\u0159en\u00e9","meta_props":"Meta informace",langprops:"Jazyk a k\u00f3dov\u00e1n\u00ed","meta_title":"Titulek","meta_keywords":"Kl\u00ed\u010dov\u00e1 slova","meta_description":"Popis","meta_robots":"Roboti",doctypes:"Typ dokumentu",langcode:"K\u00f3d jazyka",langdir:"Sm\u011br textu",ltr:"Zleva doprava",rtl:"Zprava doleva","xml_pi":"XML deklarace",encoding:"K\u00f3dov\u00e1n\u00ed","appearance_bgprops":"Vlastnosti pozad\u00ed","appearance_marginprops":"Okraje t\u011bla dokumentu","appearance_linkprops":"Vlastnosti odkaz\u016f","appearance_textprops":"Vlastnosti textu",bgcolor:"Barva pozad\u00ed",bgimage:"Obr\u00e1zek pozad\u00ed","left_margin":"Lev\u00fd okraj","right_margin":"Prav\u00fd okraj","top_margin":"Horn\u00ed okraj","bottom_margin":"Spodn\u00ed okraj","text_color":"Barva textu","font_size":"Velikost p\u00edsma","font_face":"Typ p\u00edsma","link_color":"Barva odkazu","hover_color":"Barva zvolen\u00e9ho odkazu","visited_color":"Barva nav\u0161t\u00edven\u00e9ho odkazu","active_color":"Barva aktivn\u00edho odkazu",textcolor:"Barva",fontsize:"Velikost p\u00edsma",fontface:"Typ p\u00edsma","meta_index_follow":"Indexovat a sledovat odkazy","meta_index_nofollow":"Indexovat a nesledovat odkazy","meta_noindex_follow":"Neindexovat, ale sledovat odkazy","meta_noindex_nofollow":"Neindexovat a nesledovat odkazy","appearance_style":"Vlastnosti styl\u016f",stylesheet:"Stylopis",style:"Styl",author:"Autor",copyright:"Autorsk\u00e1 pr\u00e1va",add:"P\u0159idat nov\u00fd element",remove:"Odebrat ozna\u010den\u00fd element",moveup:"P\u0159esu\u0148 ozna\u010den\u00fd element v\u00fd\u0161",movedown:"P\u0159esu\u0148 ozna\u010den\u00fd element n\u00ed\u017e","head_elements":"Hlavi\u010dky",info:"Informace","add_title":"Vlo\u017eit titulek","add_meta":"Vlo\u017eit meta informace","add_script":"Vlo\u017eit skript","add_style":"Vlo\u017eit styl","add_link":"Vlo\u017eit nezobrazovan\u00fd odkaz","add_base":"Vlo\u017eit z\u00e1kladn\u00ed um\u00edst\u011bn\u00ed","add_comment":"Vlo\u017eit koment\u00e1\u0159","title_element":"Titulek","script_element":"Skript","style_element":"Styl","base_element":"Z\u00e1kladn\u00ed um\u00edst\u011bn\u00ed","link_element":"Nezobrazovan\u00fd odkaz","meta_element":"Meta informace","comment_element":"Koment\u00e1\u0159",src:"Zdroj",language:"Jazyk",href:"Soubor/URL",target:"C\u00edl",type:"Typ",charset:"Znakov\u00e1 sada",defer:"Odlo\u017eit (defer)",media:"M\u00e9dia",properties:"Vlastnosti",name:"N\u00e1zev",value:"Hodnota",content:"Obsah",rel:"Vztah str\u00e1nky k c\u00edli",rev:"Vztah c\u00edle ke str\u00e1nce",hreflang:"Jazyk odkazu","general_props":"Obecn\u00e9 parametry","advanced_props":"Roz\u0161\u00ed\u0159en\u00e9 parametry"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cy_dlg.js
new file mode 100644
index 000000000..d1cf795e3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.fullpage_dlg',{title:"Priodweddau dogfen","meta_tab":"Cyffredinol","appearance_tab":"Ymddangosiad","advanced_tab":"Uwch","meta_props":"Gwybodaeth meta",langprops:"Iaith ac amgodiad","meta_title":"Teitl","meta_keywords":"Allweddair","meta_description":"Disgrifiad","meta_robots":"Robotau",doctypes:"Math dogfen",langcode:"Cod iaith",langdir:"Cyfeiriad iaith",ltr:"Chwith i\'r dde",rtl:"De i\'r chwith","xml_pi":"Datganiad XML",encoding:"Amgodiad nodau","appearance_bgprops":"Priodweddau cefndir","appearance_marginprops":"Ymylon corff","appearance_linkprops":"Lliwiau cysylltau","appearance_textprops":"Priodweddau testun",bgcolor:"Lliw cefndir",bgimage:"Delwedd cefndir","left_margin":"Ymyl chwith","right_margin":"Ymyl dde","top_margin":"Ymyl brig","bottom_margin":"Ymyl gwaelod","text_color":"Lliw testun","font_size":"Maint ffont","font_face":"Wyneb ffont","link_color":"Lliw cysylltau","hover_color":"Lliw hofran","visited_color":"Lliw ymwelwyd","active_color":"Lliw actif",textcolor:"Lliw",fontsize:"Maint ffont",fontface:"Teulu ffont","meta_index_follow":"Mynegeio a ddilyn y cysylltau","meta_index_nofollow":"Mynegeio a peidio ddilyn y cysylltau","meta_noindex_follow":"Peidio mynegeio ond ddilyn y cysylltau","meta_noindex_nofollow":"Peidio mynegeio a peidio ddilyn y cysylltau","appearance_style":"Priodweddau dalen-arddull ac arddull",stylesheet:"Dalen-arddull",style:"Arddull",author:"Awdur",copyright:"Hawlfraint",add:"Ychwanegu elfen newydd",remove:"Tynnu elfen dewisedig",moveup:"Symud elfen dewisedig i fyny",movedown:"Symud elfen dewisedig i lawr","head_elements":"Elfennau pen",info:"Gwybodaeth","add_title":"Elfen teitl","add_meta":"Elfen meta","add_script":"Elfen sgript","add_style":"Elfen arddull","add_link":"Elfen cyswllt","add_base":"Elfen sail","add_comment":"Nod sylw","title_element":"Elfen teitl","script_element":"Elfen sgript","style_element":"Elfen arddull","base_element":"Elfen sail","link_element":"Elfen cyswllt","meta_element":"Elfen meta","comment_element":"Sylw",src:"Fynhonell",language:"Iaith",href:"Href",target:"Targed",type:"Math",charset:"Set nodau",defer:"Gohirio",media:"Cyfryngau",properties:"Priodweddau",name:"Enw",value:"Gwerth",content:"Cynnwys",rel:"Perthynas",rev:"Diwygiad",hreflang:"Iaith href","general_props":"Cyfferdinol","advanced_props":"Uwch"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/da_dlg.js
new file mode 100644
index 000000000..79fd65897
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.fullpage_dlg',{title:"Dokumentegenskaber","meta_tab":"Generelt","appearance_tab":"Udseende","advanced_tab":"Advanceret","meta_props":"Meta-information",langprops:"Sprog og kodning","meta_title":"Titel","meta_keywords":"N\u00f8gleord","meta_description":"Beskrivelse","meta_robots":"Robots",doctypes:"Doctype",langcode:"Sprogkode",langdir:"Sprogretning",ltr:"Venstre mod h\u00f8jre",rtl:"H\u00f8jre md venstre","xml_pi":"XML declaration",encoding:"Tegns\u00e6t","appearance_bgprops":"Baggrundsegenskaber","appearance_marginprops":"Body margins","appearance_linkprops":"Link farver","appearance_textprops":"Tekstegenskaber",bgcolor:"Baggrundsfarve",bgimage:"Baggrundsbillede","left_margin":"Venstre margin","right_margin":"H\u00f8jre margin","top_margin":"Topmargin","bottom_margin":"Bundmargin","text_color":"Tekstfarve","font_size":"Skriftst\u00f8rrelse","font_face":"Skrifttype","link_color":"Linkfarve","hover_color":"Farve ved aktivering","visited_color":"Farve efter museklik","active_color":"Farve ved museklik",textcolor:"Farve",fontsize:"Skriftst\u00f8rrelse",fontface:"Skrifttype","meta_index_follow":"Indeks og f\u00f8lg links","meta_index_nofollow":"Indeks og f\u00f8lg ikke links","meta_noindex_follow":"Ingen indeks, men f\u00f8lg links","meta_noindex_nofollow":"Ingen indeks og f\u00f8lg ikke links","appearance_style":"Stylesheet og style-egenskaber",stylesheet:"Stylesheet",style:"Style",author:"Forfatter",copyright:"Copyright",add:"Tilf\u00f8j nyt element",remove:"Slet valgte element",moveup:"Flyt valgte element op",movedown:"Flyt valgte element ned","head_elements":"Hovedelement",info:"Information","add_title":"Titelelement","add_meta":"Meta-element","add_script":"Script-element","add_style":"Style-element","add_link":"Link-element","add_base":"Base-element","add_comment":"Kommentar-node","title_element":"Titelelement","script_element":"Script-element","style_element":"Style-element","base_element":"Base-element","link_element":"Link-element","meta_element":"Meta-element","comment_element":"Kommentar",src:"Src",language:"Sprog",href:"Href",target:"Destination",type:"Type",charset:"Tegns\u00e6t",defer:"Defer",media:"Media",properties:"Egenskaber",name:"Navn",value:"V\u00e6rdi",content:"Indhold",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Generelt","advanced_props":"Advanceret"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/de_dlg.js
new file mode 100644
index 000000000..ecdff9ed6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.fullpage_dlg',{title:"Dokument-Eigenschaften","meta_tab":"Allgemein","appearance_tab":"Aussehen","advanced_tab":"Erweitert","meta_props":"Meta-Information",langprops:"Sprache und Codierung","meta_title":"Titel","meta_keywords":"Keywords","meta_description":"Beschreibung","meta_robots":"Robots",doctypes:"DocType",langcode:"Sprachcode",langdir:"Sprachrichtung",ltr:"Links nach Rechts",rtl:"Rechts nach Links","xml_pi":"XML Deklaration",encoding:"Zeichencodierung","appearance_bgprops":"Hintergrund-Eigenschaften","appearance_marginprops":"Abst\u00e4nde des Body","appearance_linkprops":"Linkfarben","appearance_textprops":"Text-Eigenschaften",bgcolor:"Hintergrundfarbe",bgimage:"Hintergrundbild","left_margin":"Linker Abstand","right_margin":"Rechter Abstand","top_margin":"Oberer Abstand","bottom_margin":"Unterer Abstand","text_color":"Textfarbe","font_size":"Schriftgr\u00f6\u00dfe","font_face":"Schriftart","link_color":"Linkfarbe","hover_color":"Hover-Farbe","visited_color":"Visited-Farbe","active_color":"Active-Farbe",textcolor:"Farbe",fontsize:"Schriftgr\u00f6\u00dfe",fontface:"Schriftart","meta_index_follow":"Indizieren und den Links folgen","meta_index_nofollow":"Indizieren, aber den Links nicht folgen","meta_noindex_follow":"Nicht indizieren, aber den Links folgen","meta_noindex_nofollow":"Nicht indizieren und auch nicht den Links folgen","appearance_style":"CSS-Stylesheet und Stileigenschaften",stylesheet:"CSS-Stylesheet",style:"CSS-Stil",author:"Autor",copyright:"Copyright",add:"Neues Element hinzuf\u00fcgen",remove:"Ausgew\u00e4hltes Element entfernen",moveup:"Ausgew\u00e4hltes Element nach oben bewegen",movedown:"Ausgew\u00e4hltes Element nach unten bewegen","head_elements":"\u00dcberschriftenelemente",info:"Information","add_title":"Titel-Element","add_meta":"Meta-Element","add_script":"Script-Element","add_style":"Style-Element","add_link":"Link-Element","add_base":"Base-Element","add_comment":"HTML-Kommentar","title_element":"Titel-Element","script_element":"Script-Element","style_element":"Style-Element","base_element":"Base-Element","link_element":"Link-Element","meta_element":"Meta_Element","comment_element":"Kommentar",src:"Src",language:"Sprache",href:"Href",target:"Ziel",type:"Typ",charset:"Zeichensatz",defer:"Defer",media:"Media",properties:"Eigenschaften",name:"Name",value:"Wert",content:"Inhalt",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Allgemein","advanced_props":"Erweitert"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/dv_dlg.js
new file mode 100644
index 000000000..7e931dc80
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/el_dlg.js
new file mode 100644
index 000000000..457946ddd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.fullpage_dlg',{title:"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b5\u03b3\u03b3\u03c1\u03ac\u03c6\u03bf\u03c5","meta_tab":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac","appearance_tab":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7","advanced_tab":"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2","meta_props":"\u039c\u03b5\u03c4\u03b1-\u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2",langprops:"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1 \u03ba\u03b1\u03b9 \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7","meta_title":"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2","meta_keywords":"\u039b\u03ad\u03be\u03b5\u03b9\u03c2 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03ac","meta_description":"\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae","meta_robots":"\u03a1\u03bf\u03bc\u03c0\u03cc\u03c4",doctypes:"Doctype",langcode:"\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2",langdir:"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2",ltr:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac",rtl:"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","xml_pi":"\u0394\u03ae\u03bb\u03c9\u03c3\u03b7 XML",encoding:"\u039a\u03c9\u03b4\u03b9\u03ba\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd","appearance_bgprops":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5","appearance_marginprops":"\u03a0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03b1 \u03c3\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2","appearance_linkprops":"\u03a7\u03c1\u03ce\u03bc\u03b1\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd","appearance_textprops":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5",bgcolor:"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5",bgimage:"\u0395\u03b9\u03ba\u03cc\u03bd\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5","left_margin":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03cc \u03c0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03bf","right_margin":"\u0394\u03b5\u03be\u03b9\u03cc \u03c0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03bf","top_margin":"\u03a0\u03ac\u03bd\u03c9 \u03c0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03bf","bottom_margin":"\u039a\u03ac\u03c4\u03c9 \u03c0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03bf","text_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","font_size":"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd","font_face":"\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac","link_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","hover_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 (Hover)","visited_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 (Visited)","active_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5 (Active)",textcolor:"\u03a7\u03c1\u03ce\u03bc\u03b1",fontsize:"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd",fontface:"\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac","meta_index_follow":"\u039a\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03b7\u03b8\u03bf\u03cd\u03bd \u03bf\u03b9 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03b9","meta_index_nofollow":"\u039a\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03bc\u03b7\u03bd \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03b7\u03b8\u03bf\u03cd\u03bd \u03bf\u03b9 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03b9","meta_noindex_follow":"\u03a7\u03c9\u03c1\u03af\u03c2 \u03ba\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03b7\u03b8\u03bf\u03cd\u03bd \u03bf\u03b9 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03b9","meta_noindex_nofollow":"\u03a7\u03c9\u03c1\u03af\u03c2 \u03ba\u03b1\u03c4\u03b1\u03c7\u03ce\u03c1\u03b7\u03c3\u03b7 \u03ba\u03b1\u03b9 \u03bd\u03b1 \u03bc\u03b7\u03bd \u03b1\u03ba\u03bf\u03bb\u03bf\u03c5\u03b8\u03b7\u03b8\u03bf\u03cd\u03bd \u03bf\u03b9 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03b9","appearance_style":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c3\u03c4\u03c5\u03bb \u03ba\u03b1\u03b9 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5 \u03c3\u03c4\u03c5\u03bb",stylesheet:"\u0391\u03c1\u03c7\u03b5\u03af\u03bf \u03c3\u03c4\u03c5\u03bb",style:"\u03a3\u03c4\u03c5\u03bb",author:"\u03a3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ad\u03b1\u03c2",copyright:"\u0394\u03b9\u03ba\u03b1\u03af\u03c9\u03bc\u03b1 \u03ba\u03b1\u03c4\u03b1\u03c3\u03ba\u03b5\u03c5\u03b1\u03c3\u03c4\u03ae",add:"\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5",remove:"\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5",moveup:"\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5 \u03c0\u03ac\u03bd\u03c9",movedown:"\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5 \u03ba\u03ac\u03c4\u03c9","head_elements":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03b1 \u03ba\u03b5\u03c6\u03b1\u03bb\u03ae\u03c2",info:"\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2","add_title":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c4\u03af\u03c4\u03bb\u03bf\u03c5","add_meta":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03bc\u03b5\u03c4\u03b1-\u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b1\u03c2","add_script":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf Script","add_style":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c3\u03c4\u03c5\u03bb","add_link":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","add_base":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03b2\u03ac\u03c3\u03b7\u03c2","add_comment":"\u039a\u03cc\u03bc\u03b2\u03bf\u03c2 \u03c3\u03c7\u03bf\u03bb\u03af\u03bf\u03c5","title_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c4\u03af\u03c4\u03bb\u03bf\u03c5","script_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf Script","style_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c3\u03c4\u03c5\u03bb","base_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03b2\u03ac\u03c3\u03b7\u03c2","link_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","meta_element":"\u03a3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf \u03bc\u03b5\u03c4\u03b1-\u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b1\u03c2","comment_element":"\u03a3\u03c7\u03cc\u03bb\u03b9\u03bf",src:"\u03a0\u03b7\u03b3\u03ae",language:"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1",href:"Href",target:"\u03a3\u03c4\u03cc\u03c7\u03bf\u03c2",type:"\u03a4\u03cd\u03c0\u03bf\u03c2",charset:"\u03a3\u03b5\u03c4 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd",defer:"Defer",media:"Media",properties:"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2",name:"\u038c\u03bd\u03bf\u03bc\u03b1",value:"\u03a4\u03b9\u03bc\u03ae",content:"\u03a0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf",rel:"Rel",rev:"Rev",hreflang:"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1 Href","general_props":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac","advanced_props":"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/en_dlg.js
new file mode 100644
index 000000000..516edc74f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/eo_dlg.js
new file mode 100644
index 000000000..bd11ff311
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.fullpage_dlg',{title:"Atributoj de la dokumento","meta_tab":"\u011ceneralaj","appearance_tab":"Aspekto","advanced_tab":"Spertaj","meta_props":"Meta-informo",langprops:"Lingvo kaj enkodigo","meta_title":"Titolo","meta_keywords":"\u015closilvortoj","meta_description":"Priskribo","meta_robots":"Robotoj",doctypes:"Doctype",langcode:"Lingvokodo",langdir:"Tekstodirekto",ltr:"Maldekstre-Dekstren",rtl:"Dekstre-Maldekstren","xml_pi":"Deklaro XML",encoding:"Signa enkodigo","appearance_bgprops":"Fonaj atributoj","appearance_marginprops":"Mar\u011denoj (BODY)","appearance_linkprops":"Koloroj de ligiloj","appearance_textprops":"Atributoj de teksto",bgcolor:"Koloro de fono",bgimage:"Bildo de fono","left_margin":"Maldekstra mar\u011deno","right_margin":"Dekstra mar\u011deno","top_margin":"Supra mar\u011deno","bottom_margin":"Suba mar\u011deno","text_color":"Tekstokoloro","font_size":"Grandeco de tiparo","font_face":"Tiparo","link_color":"Koloro de ligiloj","hover_color":"Koloro dum \u015dvebo","visited_color":"Koloro de vizitita ligilo","active_color":"Koloro de aktiva ligilo",textcolor:"Koloro",fontsize:"Grandeco de tiparo",fontface:"Tiparo","meta_index_follow":"Indeksi kaj sekvi ligilojn","meta_index_nofollow":"Indeksi kaj ne sekvi ligilojn","meta_noindex_follow":"Sekvi ligilojn, sed ne indeksi","meta_noindex_nofollow":"Ne indeksi / ne sekvi ligilojn.","appearance_style":"Atributoj de stilfolio",stylesheet:"Stilfolio",style:"Stilo",author:"A\u016dtoro",copyright:"Kopirajto",add:"Aldoni novan elementon",remove:"Forigi elektitan elementon",moveup:"Suprenigi elektitan elementon",movedown:"Subigi elektitan elementon","head_elements":"Elementoj HEAD",info:"Informo","add_title":"TITLE","add_meta":"META","add_script":"SCRIPT","add_style":"STYLE","add_link":"LINK","add_base":"BASE","add_comment":"Komento","title_element":"TITLE","script_element":"SCRIPT","style_element":"STYLE","base_element":"BASE","link_element":"LINK","meta_element":"META","comment_element":"Komento",src:"src",language:"Lingvo",href:"href",target:"Celo",type:"Tipo",charset:"Signa enkodigo",defer:"Prokrasti",media:"Enhavkomunikilo",properties:"Atributoj",name:"Nomo",value:"Valoro",content:"Enhavo",rel:"rel",rev:"rev",hreflang:"href lang","general_props":"\u0108efaj","advanced_props":"Spertaj"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/es_dlg.js
new file mode 100644
index 000000000..94e52a71f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.fullpage_dlg',{title:"Propiedades del documento","meta_tab":"General","appearance_tab":"Apariencia","advanced_tab":"Avanzado","meta_props":"Informaci\u00f3n Meta",langprops:"Lenguaje y codificaci\u00f3n","meta_title":"T\u00edtulo","meta_keywords":"Palabras clave","meta_description":"Descripci\u00f3n","meta_robots":"Robots",doctypes:"Tipo de doc.",langcode:"C\u00f3digo del lenguaje",langdir:"Direcci\u00f3n del lenguaje",ltr:"Izquierda a derecha",rtl:"Derecha a izquierda","xml_pi":"Declaraci\u00f3n XML",encoding:"Codificaci\u00f3n de caracteres","appearance_bgprops":"Propiedades del fondo","appearance_marginprops":"M\u00e1rgenes","appearance_linkprops":"Colores del v\u00ednculo","appearance_textprops":"Propiedades de texto",bgcolor:"Color de fondo",bgimage:"Imagen de fondo","left_margin":"Margen izquierdo","right_margin":"Margen derecho","top_margin":"Margen superior","bottom_margin":"Margen inferior","text_color":"Color del texto","font_size":"Tama\u00f1o de fuente","font_face":"Fuente","link_color":"Color de v\u00ednculo","hover_color":"Color rat\u00f3n encima","visited_color":"Color visitado","active_color":"Color activo",textcolor:"Color",fontsize:"Tama\u00f1o de fuente",fontface:"Fuente","meta_index_follow":"Indexar y seguir los v\u00ednculos","meta_index_nofollow":"Indexar y no seguir los v\u00ednculos","meta_noindex_follow":"No indexar pero seguir v\u00ednculos","meta_noindex_nofollow":"No indexar y no seguir v\u00ednculos","appearance_style":"Propiedades de hoja de estilos y estilo",stylesheet:"Hoja de estilo",style:"Estilo",author:"Autor",copyright:"Copyright",add:"Agregar nuevo elemento",remove:"Eliminar elemento seleccionado",moveup:"Mover elemento seleccionado hacia arriba",movedown:"Mover elemento seleccionado hacia abajo","head_elements":"Elemento Head",info:"Informaci\u00f3n","add_title":"Elemento Title","add_meta":"Elemento Meta","add_script":"Elemento Script","add_style":"Elemento Style","add_link":"Elemento Link","add_base":"Elemento Base","add_comment":"Nodo Comment","title_element":"Elemento Title","script_element":"Elemento Script","style_element":"Elemento Style","base_element":"Elemento Base","link_element":"Elemento Link","meta_element":"Elemento Meta","comment_element":"Comentario",src:"Src",language:"Lenguaje",href:"Href",target:"Target",type:"Tipo",charset:"Charset",defer:"Defer",media:"Medio",properties:"Propiedades",name:"Nombre",value:"Valor",content:"Contenido",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Avanzado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/et_dlg.js
new file mode 100644
index 000000000..f55f77639
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.fullpage_dlg',{title:"Dokumendi omadused","meta_tab":"\u00dcldine","appearance_tab":"V\u00e4limus","advanced_tab":"P\u00f5hjalikum","meta_props":"\u201eMeta\u201c informatioon",langprops:"Keel ja kodeering","meta_title":"Pealkiri","meta_keywords":"M\u00e4rks\u00f5nad","meta_description":"Kirjeldus","meta_robots":"Robotid",doctypes:"Dokumendi t\u00fc\u00fcp",langcode:"Keele kood",langdir:"Keele suund",ltr:"Vasakult paremale",rtl:"Paremalt vasakule","xml_pi":"XML avaldus",encoding:"Karakteri kodeering","appearance_bgprops":"Tausta seadistus","appearance_marginprops":"Sisu piir","appearance_linkprops":"Lingi v\u00e4rv","appearance_textprops":"Teksti seaded",bgcolor:"Tausta v\u00e4rv",bgimage:"Tausta pilt","left_margin":"Vasak piir","right_margin":"Parem piir","top_margin":"\u00dclemine piir","bottom_margin":"Alumine piir","text_color":"Teksti v\u00e4rv","font_size":"Fondi suurus","font_face":"Fondi n\u00e4gu","link_color":"Lingi v\u00e4rv","hover_color":"\u00dcle-v\u00e4rv","visited_color":"K\u00fclastatud-v\u00e4rv","active_color":"Aktiivne-v\u00e4rv",textcolor:"V\u00f6rv",fontsize:"Fondi suurus",fontface:"Font","meta_index_follow":"M\u00e4rgi ja j\u00e4rgi linki","meta_index_nofollow":"M\u00e4rgi ja \u00e4ra j\u00e4rgi linki","meta_noindex_follow":"\u00c4ra m\u00e4rgi linki, aga j\u00e4rgi linki","meta_noindex_nofollow":"\u00c4ra m\u00e4rgi linki ja \u00e4ra j\u00e4rgi linki","appearance_style":"Stiilileht ja stiili seaded",stylesheet:"Stiilileht",style:"Stiil",author:"Autor",copyright:"Autorikaitse",add:"Lisa uus element",remove:"Eemalda valitud element",moveup:"Liiguta valitud element \u00fclesse",movedown:"Liiguta valitud element alla","head_elements":"P\u00f5hielemendid",info:"Informatioon","add_title":"Pealkirja element","add_meta":"\u201eMeta\u201c element","add_script":"Skript\u2019i element","add_style":"Stiili element","add_link":"Lingi element","add_base":"Baaselement","add_comment":"Kommentaar","title_element":"Pealkirja element","script_element":"Skript\u2019i element","style_element":"Stiili element","base_element":"Baaselement","link_element":"Lingi element","meta_element":"\u201eMeta\u201c element","comment_element":"kommentaar",src:"Src",language:"Keel",href:"Href",target:"Sihtm\u00e4rk",type:"T\u00fc\u00fcp",charset:"Charset",defer:"Edasi l\u00fckkamine",media:"Meedia",properties:"Seaded",name:"Nimi",value:"V\u00e4\u00e4rtus",content:"Sisu",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u00dcldine","advanced_props":"T\u00e4psustatud"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/eu_dlg.js
new file mode 100644
index 000000000..4ca2fd9a9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.fullpage_dlg',{title:"Dokumentuaren ezaugarriak","meta_tab":"Orokorra","appearance_tab":"Itxura","advanced_tab":"Aurreratua","meta_props":"Meta datuak",langprops:"Hizkuntza eta kodeketa","meta_title":"Izenburua","meta_keywords":"Hitz-gakoak","meta_description":"Deskribapena","meta_robots":"Robotak",doctypes:"Dokumentu mota",langcode:"Hizkuntza kodea",langdir:"Hizkuntza norabidea",ltr:"Ezkerretik eskuinera",rtl:"Eskuinetik ezkerrera","xml_pi":"XML zehaztapena",encoding:"Karaktere kodeketa","appearance_bgprops":"Atzeko ezaugarriak","appearance_marginprops":"Gorputzaren marginak","appearance_linkprops":"Lotura koloreak","appearance_textprops":"Testu ezaugarriak",bgcolor:"Atzeko kolorea",bgimage:"Atzeko irudia","left_margin":"Ezker margina","right_margin":"Eskuin margina","top_margin":"Goiko margina","bottom_margin":"Beheko margina","text_color":"Testu kolorea","font_size":"Letra tamaina","font_face":"Letra mota","link_color":"Loturaren kolorea","hover_color":"Lotura gainean kolorea","visited_color":"Bisitatutako lotura kolorea","active_color":"Lotura aktiboaren kolorea",textcolor:"Kolorea",fontsize:"Letra tamaina",fontface:"Letra mota","meta_index_follow":"Indexatu eta jarraitu loturak","meta_index_nofollow":"Indexatu eta ez jarraitu loturak","meta_noindex_follow":"Ez indexatu, baina jarraitu loturak","meta_noindex_nofollow":"Ez indexatu eta ez jarraitu loturak","appearance_style":"Estilo orri eta estilo ezaugarriak",stylesheet:"Estilo orria",style:"Estiloa",author:"Egilea",copyright:"Copyright",add:"Gehitu elementua",remove:"Ezabatu aukeratutako elementua",moveup:"Mugitu aukeratutako elementua gora",movedown:"Mugitu aukeratutako elementua behera","head_elements":"Goiburuko elementuak",info:"Informazioa","add_title":"Title elementua","add_meta":"Meta elementua","add_script":"Script elementua","add_style":"Style elementua","add_link":"Link elementua","add_base":"Base elementua","add_comment":"Comment nodoa","title_element":"Title elementua","script_element":"Script elementua","style_element":"Style elementua","base_element":"Base elementua","link_element":"Link elementua","meta_element":"Meta elementua","comment_element":"Iruzkina",src:"Src",language:"Hizkuntza",href:"Href",target:"Helburua",type:"Mota",charset:"Karaktereak",defer:"Defer",media:"Media",properties:"Ezaugarriak",name:"Izena",value:"Balioa",content:"Edukia",rel:"Rel",rev:"Rev",hreflang:"Href hizkuntza","general_props":"Orokorra","advanced_props":"Aurreratua"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fa_dlg.js
new file mode 100644
index 000000000..f826495f0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.fullpage_dlg',{title:"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0646\u062f","meta_tab":"\u0639\u0645\u0648\u0645\u06cc","appearance_tab":"\u0638\u0627\u0647\u0631","advanced_tab":"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647","meta_props":"\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u062a\u0627 (Meta)",langprops:"\u0632\u0628\u0627\u0646 \u0648 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc (Encoding)","meta_title":"\u0639\u0646\u0648\u0627\u0646","meta_keywords":"\u06a9\u0644\u0645\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc","meta_description":"\u062a\u0648\u0636\u06cc\u062d","meta_robots":"\u0631\u0648\u0628\u0627\u062a \u0647\u0627 (Robots)",doctypes:"\u0646\u0648\u0639 \u0633\u0646\u062f",langcode:"\u06a9\u062f \u0632\u0628\u0627\u0646",langdir:"\u062c\u0647\u062a \u0632\u0628\u0627\u0646",ltr:"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a",rtl:"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e","xml_pi":"\u0627\u0639\u0644\u0627\u0646 XML",encoding:"\u0631\u0645\u0632\u06af\u0630\u0627\u0631\u06cc (Encoding) \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631","appearance_bgprops":"\u0645\u0634\u062e\u0635\u0627\u062a \u0632\u0645\u06cc\u0646\u0647","appearance_marginprops":"\u062d\u0627\u0634\u06cc\u0647 \u0647\u0627\u06cc \u0628\u062f\u0646\u0647 (Body)","appearance_linkprops":"\u0631\u0646\u06af \u0647\u0627\u06cc \u0644\u06cc\u0646\u06a9","appearance_textprops":"\u0645\u0634\u062e\u0635\u0627\u062a \u0645\u062a\u0646",bgcolor:"\u0631\u0646\u06af \u0632\u0645\u06cc\u0646\u0647",bgimage:"\u062a\u0635\u0648\u06cc\u0631 \u0632\u0645\u06cc\u0646\u0647","left_margin":"\u062d\u0627\u0634\u06cc\u0647 \u0686\u067e","right_margin":"\u062d\u0627\u0634\u06cc\u0647 \u0631\u0627\u0633\u062a","top_margin":"\u062d\u0627\u0634\u06cc\u0647 \u0628\u0627\u0644\u0627","bottom_margin":"\u062d\u0627\u0634\u06cc\u0647 \u067e\u0627\u06cc\u06cc\u0646","text_color":"\u0631\u0646\u06af \u0645\u062a\u0646","font_size":"\u0627\u0646\u062f\u0627\u0632\u0647 \u0642\u0644\u0645","font_face":"\u0638\u0627\u0647\u0631 \u0642\u0644\u0645","link_color":"\u0631\u0646\u06af \u0642\u0644\u0645","hover_color":"\u0631\u0646\u06af \u062f\u0631 \u062d\u0627\u0644\u062a \u0642\u0631\u0627\u0631\u06af\u06cc\u0631\u06cc \u0645\u0648\u0633","visited_color":"\u0631\u0646\u06af \u062f\u0631 \u062d\u0627\u0644\u062a \u0628\u0627\u0632\u062f\u06cc\u062f \u0634\u062f\u0647","active_color":"\u0631\u0646\u06af \u062f\u0631 \u062d\u0627\u0644\u062a \u0641\u0639\u0627\u0644",textcolor:"\u0631\u0646\u06af",fontsize:"\u0627\u0646\u062f\u0627\u0632\u0647 \u0642\u0644\u0645",fontface:"\u062e\u0627\u0646\u0648\u0627\u062f\u0647 \u0642\u0644\u0645","meta_index_follow":"\u0641\u0647\u0631\u0633\u062a \u0648 \u062f\u0646\u0628\u0627\u0644\u0647 \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u0647\u0627","meta_index_nofollow":"\u0641\u0647\u0631\u0633\u062a \u0648 \u0639\u062f\u0645 \u062f\u0646\u0628\u0627\u0644\u0647 \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u0647\u0627","meta_noindex_follow":"\u0639\u062f\u0645 \u0641\u0647\u0631\u0633\u062a \u0627\u0645\u0627 \u062f\u0646\u0628\u0627\u0644\u0647 \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u0647\u0627","meta_noindex_nofollow":"\u0639\u062f\u0645 \u0641\u0647\u0631\u0633\u062a \u0648 \u0639\u062f\u0645 \u062f\u0646\u0628\u0627\u0644\u0647 \u0631\u0648\u06cc \u0644\u06cc\u0646\u06a9 \u0647\u0627","appearance_style":"\u0648\u0631\u0642\u0647 \u0627\u0633\u062a\u0627\u06cc\u0644 \u0648 \u0645\u0634\u062e\u0635\u0627\u062a \u0627\u0633\u062a\u0627\u06cc\u0644",stylesheet:"\u0648\u0631\u0642\u0647 \u0627\u0633\u062a\u0627\u06cc\u0644",style:"\u0627\u0633\u062a\u0627\u06cc\u0644",author:"\u0645\u0624\u0644\u0641",copyright:"\u062d\u0642 \u0627\u0646\u062d\u0635\u0627\u0631\u06cc",add:"\u0627\u0641\u0632\u0648\u062f\u0646 \u0639\u0646\u0635\u0631 \u062c\u062f\u06cc\u062f",remove:"\u062d\u0630\u0641 \u0639\u0646\u0635\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647",moveup:"\u0627\u0646\u062a\u0642\u0627\u0644 \u0639\u0646\u0635\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0628\u0647 \u0628\u0627\u0644\u0627",movedown:"\u0627\u0646\u062a\u0642\u0627\u0644 \u0639\u0646\u0635\u0631 \u0627\u0646\u062a\u062e\u0627\u0628 \u0634\u062f\u0647 \u0628\u0647 \u067e\u0627\u06cc\u06cc\u0646","head_elements":"\u0639\u0646\u0627\u0635\u0631 \u0633\u0631 (Head)",info:"\u0627\u0637\u0644\u0627\u0639\u0627\u062a","add_title":"\u0639\u0646\u0635\u0631 \u0639\u0646\u0648\u0627\u0646","add_meta":"\u0639\u0646\u0635\u0631 \u0645\u062a\u0627 (Meta)","add_script":"\u0639\u0646\u0635\u0631 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a (Script)","add_style":"\u0639\u0646\u0635\u0631 \u0627\u0633\u062a\u0627\u06cc\u0644 (Style)","add_link":"\u0639\u0646\u0635\u0631 \u0644\u06cc\u0646\u06a9 (Link)","add_base":"\u0639\u0646\u0635\u0631 \u067e\u0627\u06cc\u0647 (Base)","add_comment":"\u06af\u0631\u0647 \u062a\u0648\u0636\u06cc\u062d","title_element":"\u0639\u0646\u0635\u0631 \u0639\u0646\u0648\u0627\u0646 (Title)","script_element":"\u0639\u0646\u0635\u0631 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a (Script)","style_element":"\u0639\u0646\u0635\u0631 \u0627\u0633\u062a\u0627\u06cc\u0644 (Style)","base_element":"\u0639\u0646\u0635\u0631 \u067e\u0627\u06cc\u0647","link_element":"\u0639\u0646\u0635\u0631 \u0644\u06cc\u0646\u06a9","meta_element":"\u0639\u0646\u0635\u0631 \u0645\u062a\u0627 (Meta)","comment_element":"\u062a\u0648\u0636\u06cc\u062d",src:"\u0645\u0646\u0628\u0639 (Src)",language:"\u0632\u0628\u0627\u0646",href:"\u0622\u062f\u0631\u0633 (Href)",target:"\u0645\u0642\u0635\u062f (Target)",type:"\u0646\u0648\u0639",charset:"\u0645\u062c\u0645\u0648\u0639\u0647 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 (Charset)",defer:"Defer",media:"\u0631\u0633\u0627\u0646\u0647 (Media)",properties:"\u0645\u0634\u062e\u0635\u0627\u062a",name:"\u0646\u0627\u0645",value:"\u0645\u0642\u062f\u0627\u0631",content:"\u0645\u062d\u062a\u0648\u0627",rel:"Rel",rev:"Rev",hreflang:"\u0632\u0628\u0627\u0646 Href","general_props":"\u0639\u0645\u0648\u0645\u06cc","advanced_props":"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fi_dlg.js
new file mode 100644
index 000000000..3f1fb393f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.fullpage_dlg',{title:"Tiedoston asetukset","meta_tab":"Yleinen","appearance_tab":"Ulkoasu","advanced_tab":"Edistynyt","meta_props":"Metatiedot",langprops:"Kieli ja koodaus","meta_title":"Otsikko","meta_keywords":"Avainsanat","meta_description":"Kuvaus","meta_robots":"Robotit",doctypes:"Dokumenttityypit",langcode:"Kielen koodi",langdir:"Kielen suunta",ltr:"Vasemmalta oikealle",rtl:"Oikealta vasemmalle","xml_pi":"XML-ilmoitus",encoding:"Tekstin koodaus","appearance_bgprops":"Taustan asetukset","appearance_marginprops":"Body-marginaalit","appearance_linkprops":"Linkkien v\u00e4rit","appearance_textprops":"Tekstin asetukset",bgcolor:"Taustan v\u00e4ri",bgimage:"Taustakuva","left_margin":"Vasen marginaali","right_margin":"Oikea marginaali","top_margin":"Yl\u00e4marginaali","bottom_margin":"Alamarginaali","text_color":"Tekstin v\u00e4ri","font_size":"Fonttikoko","font_face":"Fontti","link_color":"Linkin v\u00e4ri","hover_color":"Hover-v\u00e4ri","visited_color":"Vierailtu v\u00e4ri","active_color":"Aktiivinen v\u00e4ri",textcolor:"V\u00e4ri",fontsize:"Fonttikoko",fontface:"Fontti","meta_index_follow":"Indeksoi ja seuraa linkkej\u00e4","meta_index_nofollow":"Indeksoi, mutta \u00e4l\u00e4 seuraa linkkej\u00e4","meta_noindex_follow":"\u00c4l\u00e4 indeksoi, mutta seuraa linkkej\u00e4.","meta_noindex_nofollow":"\u00c4l\u00e4 indeksoi, \u00e4l\u00e4k\u00e4 seuraa linkkej\u00e4","appearance_style":"Tyylitiedosto ja tyylin asetukset",stylesheet:"Tyylitiedosto",style:"Tyyli",author:"Kirjoittaja",copyright:"Copyright",add:"Lis\u00e4\u00e4 uusi elementti",remove:"Poista valittu elementti",moveup:"Siirr\u00e4 valittua elementti\u00e4 yl\u00f6s",movedown:"Siirr\u00e4 valittua elementti\u00e4 alas","head_elements":"P\u00e4\u00e4elementti",info:"Informaatio","add_title":"Otsikkoelementti","add_meta":"Meta-elementti","add_script":"Script-elementti","add_style":"Tyylielementti","add_link":"Linkkielementti","add_base":"Base-elementti","add_comment":"Yleinen elementti","title_element":"Otsikkoelementti","script_element":"Script-elementti","style_element":"Tyylielementti","base_element":"Base-elementti","link_element":"Linkkielementti","meta_element":"Meta-elementti","comment_element":"Kommentti",src:"L\u00e4hde",language:"Kieli",href:"Href",target:"Kohde",type:"Tyyppi",charset:"Kirjasintyyppi",defer:"Mukautuminen",media:"Media",properties:"Asetukset",name:"Nimi",value:"Arvo",content:"Sis\u00e4lt\u00f6",rel:"Rel",rev:"Rev",hreflang:"Href-kieli","general_props":"Yleinen","advanced_props":"Edistynyt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fr_dlg.js
new file mode 100644
index 000000000..c2ddc65db
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.fullpage_dlg',{title:"Propri\u00e9t\u00e9s du document","meta_tab":"G\u00e9n\u00e9ral","appearance_tab":"Apparence","advanced_tab":"Avanc\u00e9","meta_props":"Metadonn\u00e9es",langprops:"Langue et encodage","meta_title":"Titre","meta_keywords":"Mots-cl\u00e9s","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Code de la langue",langdir:"Sens de lecture",ltr:"De gauche \u00e0 droite",rtl:"De droite \u00e0 gauche","xml_pi":"D\u00e9claration XML",encoding:"Encodage des caract\u00e8res","appearance_bgprops":"Propri\u00e9t\u00e9s du fond","appearance_marginprops":"Marge du corps de la page","appearance_linkprops":"Couleurs des liens","appearance_textprops":"Propri\u00e9t\u00e9s du texte",bgcolor:"Couleur de fond",bgimage:"Image de fond","left_margin":"Marge de gauche","right_margin":"Marge de droite","top_margin":"Marge du haut","bottom_margin":"Marge du bas","text_color":"Couleur du texte","font_size":"Taille de la police","font_face":"Nom de la police","link_color":"Couleur des liens","hover_color":"Couleur au survol","visited_color":"Couleur des liens visit\u00e9s","active_color":"Couleur du lien actif",textcolor:"Couleur",fontsize:"Taille de police",fontface:"Nom de la police","meta_index_follow":"Indexer et suivre les liens","meta_index_nofollow":"Indexer et ne pas suivre les liens","meta_noindex_follow":"Ne pas indexer et suivre les liens","meta_noindex_nofollow":"Ne pas indexer et ne pas suivre les liens","appearance_style":"Propri\u00e9t\u00e9s de la feuille de style et du style",stylesheet:"Feuille de style",style:"Style",author:"Auteur",copyright:"Copyright",add:"Ajouter un nouvel \u00e9l\u00e9ment",remove:"Retirer l\'\u00e9l\u00e9ment s\u00e9lectionn\u00e9",moveup:"D\u00e9placer l\'\u00e9l\u00e9ment s\u00e9lectionn\u00e9 vers le haut",movedown:"D\u00e9placer l\'\u00e9l\u00e9ment s\u00e9lectionn\u00e9 vers le bas","head_elements":"\u00c9l\u00e9ments d\'en-t\u00eate",info:"Information","add_title":"\u00c9l\u00e9ment de titre","add_meta":"\u00c9l\u00e9ment Meta","add_script":"\u00c9l\u00e9ment de script","add_style":"\u00c9l\u00e9ment de style","add_link":"\u00c9l\u00e9ment de lien","add_base":"\u00c9l\u00e9ment de base","add_comment":"Commentaire","title_element":"\u00c9l\u00e9ment de titre","script_element":"\u00c9l\u00e9ment de script","style_element":"\u00c9l\u00e9ment de style","base_element":"\u00c9l\u00e9ment de base","link_element":"\u00c9l\u00e9ment de lien","meta_element":"\u00c9l\u00e9ment Meta","comment_element":"Commentaire",src:"Source",language:"Langue",href:"Href",target:"Cible",type:"Type",charset:"Charset",defer:"D\u00e9f\u00e9rer",media:"M\u00e9dia",properties:"Propri\u00e9t\u00e9s",name:"Nom",value:"Valeur",content:"Contenu",rel:"Rel",rev:"Rev",hreflang:"langue Href","general_props":"G\u00e9n\u00e9ral","advanced_props":"Avanc\u00e9"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/gl_dlg.js
new file mode 100644
index 000000000..d497cfc65
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.fullpage_dlg',{title:"Propiedades do documento","meta_tab":"Xeral","appearance_tab":"Apariencia","advanced_tab":"Avanzado","meta_props":"Informaci\u00f3n Meta",langprops:"Lenguaxe e codificaci\u00f3n","meta_title":"T\u00edtulo","meta_keywords":"Verbas chave","meta_description":"Descripci\u00f3n","meta_robots":"Robots",doctypes:"Tipo de doc.",langcode:"C\u00f3digo da lenguaxe",langdir:"Direcci\u00f3n da lenguaxe",ltr:"Esquerda a dereita",rtl:"Dereita a esquerda","xml_pi":"Declaraci\u00f3n XML",encoding:"Codificaci\u00f3n de caracteres","appearance_bgprops":"Propiedades do fondo","appearance_marginprops":"Marxes","appearance_linkprops":"Cores do v\u00ednculo","appearance_textprops":"Propiedades de texto",bgcolor:"Cor de fondo",bgimage:"Imaxe de fondo","left_margin":"Marxe esquerdo","right_margin":"Marxe dereito","top_margin":"Marxe superior","bottom_margin":"Marxe inferior","text_color":"Cor do texto","font_size":"Tama\u00f1o de fonte","font_face":"Fonte","link_color":"Cor de v\u00ednculo","hover_color":"Cor rato encima","visited_color":"Cor visitado","active_color":"Cor activo",textcolor:"Cor",fontsize:"Tama\u00f1o de fonte",fontface:"Fonte","meta_index_follow":"Indexar e segui-los v\u00ednculos","meta_index_nofollow":"Indexar e non segui-los v\u00ednculos","meta_noindex_follow":"Non indexar pero seguir v\u00ednculos","meta_noindex_nofollow":"Non indexar e non seguir v\u00ednculos","appearance_style":"Propiedades de folla de estilos e estilo",stylesheet:"Folla de estilo",style:"Estilo",author:"Autor",copyright:"Copyright",add:"Agregar novo elemento",remove:"Eliminar elemento seleccionado",moveup:"Mover elemento seleccionado arriba",movedown:"Mover elemento seleccionado abaixo","head_elements":"Elementos Head",info:"Informaci\u00f3n","add_title":"Elemento Title","add_meta":"Elemento Meta","add_script":"Elemento Script","add_style":"Elemento Style","add_link":"Elemento Link","add_base":"Elemento Base","add_comment":"Nodo Comment","title_element":"Elemento Title","script_element":"Elemento Script","style_element":"Elemento Style","base_element":"Elemento Base","link_element":"Elemento Link","meta_element":"Elemento Meta","comment_element":"Comentario",src:"Src",language:"Lenguaxe",href:"Href",target:"Obxetivo",type:"Tipo",charset:"Charset",defer:"Defer",media:"Medio",properties:"Propiedades",name:"Nome",value:"Valor",content:"Contido",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Xeral","advanced_props":"Avanzado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/gu_dlg.js
new file mode 100644
index 000000000..d7a3e45c3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/he_dlg.js
new file mode 100644
index 000000000..69faae39a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.fullpage_dlg',{title:"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05de\u05e1\u05de\u05da","meta_tab":"\u05db\u05dc\u05dc\u05d9","appearance_tab":"\u05de\u05e8\u05d0\u05d4","advanced_tab":"\u05de\u05ea\u05e7\u05d3\u05dd","meta_props":"\u05ea\u05d2\u05d9 \u05de\u05d8\u05d4",langprops:"\u05e9\u05e4\u05d4 \u05d5\u05e7\u05d9\u05d3\u05d5\u05d3","meta_title":"\u05db\u05d5\u05ea\u05e8\u05ea","meta_keywords":"\u05de\u05d9\u05dc\u05d5\u05ea \u05de\u05e4\u05ea\u05d7","meta_description":"\u05ea\u05d9\u05d0\u05d5\u05e8","meta_robots":"\u05e8\u05d5\u05d1\u05d5\u05d8\u05d9\u05dd",doctypes:"Doctype",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc","xml_pi":"XML declaration",encoding:"\u05e7\u05d9\u05d3\u05d5\u05d3 \u05ea\u05d5\u05d5\u05d9\u05dd","appearance_bgprops":"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05e8\u05e7\u05e2","appearance_marginprops":"Body margins","appearance_linkprops":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd","appearance_textprops":"Text properties",bgcolor:"\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2",bgimage:"\u05ea\u05de\u05d5\u05e0\u05ea \u05e8\u05e7\u05e2","left_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05e9\u05de\u05d0\u05dc\u05d9\u05d9\u05dd","right_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05d9\u05de\u05e0\u05d9\u05d9\u05dd","top_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05e2\u05dc\u05d9\u05d5\u05e0\u05d9\u05dd","bottom_margin":"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd \u05ea\u05d7\u05ea\u05d9\u05d9\u05dd","text_color":"\u05e6\u05d1\u05e2 \u05d8\u05e7\u05e1\u05d8","font_size":"\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05df","font_face":"\u05e1\u05d5\u05d2 \u05d2\u05d5\u05e4\u05df","link_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8","hover_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1\u05de\u05e2\u05d1\u05e8 \u05e2\u05db\u05d1\u05e8","visited_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05e9\u05e0\u05e6\u05e4\u05d4","active_color":"\u05e6\u05d1\u05e2 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05e4\u05e2\u05d9\u05dc",textcolor:"\u05e6\u05d1\u05e2",fontsize:"\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05df",fontface:"\u05d2\u05d5\u05e4\u05df","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"\u05e1\u05d2\u05e0\u05d5\u05df \u05e2\u05d9\u05e6\u05d5\u05d1",style:"\u05e2\u05d9\u05e6\u05d5\u05d1",author:"\u05db\u05d5\u05ea\u05d1",copyright:"\u05d6\u05db\u05d5\u05d9\u05d5\u05ea \u05d9\u05d5\u05e6\u05e8\u05d9\u05dd",add:"\u05d4\u05d5\u05e1\u05e3 \u05d0\u05dc\u05de\u05e0\u05d8 \u05d7\u05d3\u05e9",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"\u05de\u05d9\u05d3\u05e2","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"\u05d0\u05dc\u05de\u05e0\u05d8 \u05e2\u05d9\u05e6\u05d5\u05d1","base_element":"\u05d0\u05dc\u05de\u05e0\u05d8 \u05d1\u05e1\u05d9\u05e1","link_element":"\u05d0\u05dc\u05de\u05e0\u05d8 \u05e7\u05d9\u05e9\u05d5\u05e8","meta_element":"Meta element","comment_element":"\u05ea\u05d2\u05d5\u05d1\u05d4",src:"\u05db\u05ea\u05d5\u05d1\u05ea \u05de\u05e7\u05d5\u05e8",language:"\u05e9\u05e4\u05d4",href:"HREF",target:"\u05d9\u05e2\u05d3",type:"\u05e1\u05d5\u05d2",charset:"\u05e7\u05d9\u05d3\u05d5\u05d3",defer:"Defer",media:"\u05de\u05d3\u05d9\u05d4",properties:"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9\u05dd",name:"\u05e9\u05dd",value:"\u05e2\u05e8\u05da",content:"\u05ea\u05d5\u05db\u05df",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u05db\u05dc\u05dc\u05d9","advanced_props":"\u05de\u05ea\u05e7\u05d3\u05dd"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hi_dlg.js
new file mode 100644
index 000000000..aea6db5f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hr_dlg.js
new file mode 100644
index 000000000..8c8f40cc1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.fullpage_dlg',{title:"Svojstva dokumenta","meta_tab":"Op\u0107e","appearance_tab":"Izgled","advanced_tab":"Napredno","meta_props":"Meta informacije",langprops:"Jezik i kodiranje","meta_title":"Naslov","meta_keywords":"Klju\u010dne rije\u010di","meta_description":"Opis","meta_robots":"Roboti",doctypes:"Doctype",langcode:"Kod jezika",langdir:"Smjer jezika",ltr:"S lijeva na desno",rtl:"S desna na lijevo","xml_pi":"XML deklaracija",encoding:"Kodiranje znakova","appearance_bgprops":"Svojstva pozadine","appearance_marginprops":"Margina","appearance_linkprops":"Boja linka","appearance_textprops":"Svojstva teksta",bgcolor:"Boja pozadine",bgimage:"Pozadinska slika","left_margin":"Lijeva margina","right_margin":"Desna margina","top_margin":"Gornja margina","bottom_margin":"Donja margina","text_color":"Boja teksta","font_size":"Veli\u010dina pisma","font_face":"Pismo","link_color":"Boja linka","hover_color":"Boja linka ispod mi\u0161a","visited_color":"Boja posje\u0107enog linka","active_color":"Boja aktivnog linka",textcolor:"Boja",fontsize:"Veli\u010dina fonta",fontface:"Skupina fontova","meta_index_follow":"Indeksiraj i slijedi linkove","meta_index_nofollow":"Indeksiraj i ne slijedi linkove","meta_noindex_follow":"Ne indeksiraj i slijedi linkove","meta_noindex_nofollow":"Ne indeksiraj i ne slijedi linkove","appearance_style":"CSS i svojstva stila",stylesheet:"CSS",style:"Stil",author:"Autor",copyright:"Autorska prava",add:"Dodaj novi element",remove:"Ukloni odabrani element",moveup:"Pomakni odabrani element prema gore",movedown:"Pomakni odabrani element prema dolje","head_elements":"Elementi zaglavlja",info:"Informacije","add_title":"Naslovni element","add_meta":"Meta element","add_script":"Skriptni element","add_style":"Sitlski element","add_link":"Element linka","add_base":"Osnovni element","add_comment":"Komentar","title_element":"Naslovni element","script_element":"Skriptni element","style_element":"Stilski element","base_element":"Temeljni element","link_element":"Element linka","meta_element":"Meta element","comment_element":"Komentar",src:"Src",language:"Jezik",href:"Href",target:"Meta",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Svojstva",name:"Ime",value:"Vrijednost",content:"Sadr\u017eaj",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Op\u0107e","advanced_props":"Napredno"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hu_dlg.js
new file mode 100644
index 000000000..b20670532
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.fullpage_dlg',{title:"Dokumentum tulajdons\u00e1gai","meta_tab":"\u00c1ltal\u00e1nos","appearance_tab":"Megjelen\u00e9s","advanced_tab":"Halad\u00f3","meta_props":"Meta inform\u00e1ci\u00f3",langprops:"Nyelv \u00e9s k\u00f3dol\u00e1s","meta_title":"C\u00edm","meta_keywords":"Kulcsszavak","meta_description":"Le\u00edr\u00e1s","meta_robots":"Robotok",doctypes:"Doctype",langcode:"Nyelvk\u00f3d",langdir:"\u00cdr\u00e1s ir\u00e1nya",ltr:"Balr\u00f3l jobra",rtl:"Jobbr\u00f3l balra","xml_pi":"XML deklar\u00e1ci\u00f3",encoding:"Karakterk\u00f3dol\u00e1s","appearance_bgprops":"H\u00e1tt\u00e9r tulajdons\u00e1gai","appearance_marginprops":"Test keret","appearance_linkprops":"Link sz\u00ednek","appearance_textprops":"Sz\u00f6veg tulajdons\u00e1gai",bgcolor:"H\u00e1tt\u00e9rsz\u00edn",bgimage:"H\u00e1tt\u00e9rk\u00e9p","left_margin":"Bal marg\u00f3","right_margin":"Jobb marg\u00f3","top_margin":"Fels\u0151 marg\u00f3","bottom_margin":"Als\u00f3 marg\u00f3","text_color":"Sz\u00f6vegsz\u00edn","font_size":"Bet\u0171m\u00e9ret","font_face":"Bet\u0171t\u00edpus","link_color":"Link sz\u00edn","hover_color":"F\u00f6l\u00e9vitt sz\u00edn","visited_color":"L\u00e1togatva sz\u00edn","active_color":"Akt\u00edv sz\u00edn",textcolor:"Sz\u00edn",fontsize:"Bet\u0171m\u00e9ret",fontface:"Bet\u0171t\u00edpus","meta_index_follow":"Indexel \u00e9s k\u00f6veti a linkeket","meta_index_nofollow":"Indexel, de nem k\u00f6veti a linkeket","meta_noindex_follow":"Nem indexel, de k\u00f6veti a linkeket","meta_noindex_nofollow":"Nem indexel \u00e9s nem k\u00f6veti a linkeket","appearance_style":"Stylesheet \u00e9s style tulajdons\u00e1gok",stylesheet:"Stylesheet",style:"Style",author:"Szerz\u0151",copyright:"Copyright",add:"\u00daj elem hozz\u00e1ad\u00e1sa",remove:"Kijel\u00f6lt elem t\u00f6rl\u00e9se",moveup:"Kijel\u00f6lt elem felfel\u00e9 mozgat\u00e1sa",movedown:"Kijel\u00f6lt elem lefel\u00e9 mozgat\u00e1sa","head_elements":"Fej elemek",info:"Inform\u00e1ci\u00f3","add_title":"C\u00edm elem","add_meta":"Meta elem","add_script":"Script elem","add_style":"Style elem","add_link":"Link elem","add_base":"Base elem","add_comment":"Comment elem","title_element":"Title elem","script_element":"Script elem","style_element":"Style elem","base_element":"Base elem","link_element":"Link elem","meta_element":"Meta elem","comment_element":"Megjegyz\u00e9s",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u00c1ltal\u00e1nos","advanced_props":"Halad\u00f3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hy_dlg.js
new file mode 100644
index 000000000..3e5bda301
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.fullpage_dlg',{title:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","meta_tab":"\u041e\u0431\u0449\u0435\u0435","appearance_tab":"\u0412\u0438\u0434","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","meta_props":"\u0426\u0435\u043b\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438",langprops:"\u042f\u0437\u044b\u043a \u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f","meta_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","meta_keywords":"\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430","meta_description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","meta_robots":"\u0420\u0430\u0431\u043e\u0442\u044b",doctypes:"Doctype",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","xml_pi":"XML declaration",encoding:"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430","appearance_bgprops":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0444\u043e\u043d\u0430","appearance_marginprops":"\u041e\u0442\u0441\u0442\u0443\u043f\u044b","appearance_linkprops":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043e\u043a","appearance_textprops":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0430",bgcolor:"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430",bgimage:"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","left_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043b\u0435\u0432\u0430","right_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043f\u0440\u0430\u0432\u0430","top_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u0432\u0435\u0440\u0445\u0443","bottom_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043d\u0438\u0437\u0443","text_color":"\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430","font_face":"\u0428\u0440\u0438\u0444\u0442","link_color":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438","hover_color":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438","visited_color":"\u0426\u0432\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438","active_color":"\u0426\u0432\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438",textcolor:"\u0426\u0432\u0435\u0442",fontsize:"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",fontface:"\u0421\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0448\u0440\u0438\u0444\u0442\u0430","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don \\ \'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"\u0421\u0442\u0438\u043b\u044c",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"\u041a\u043e\u043f\u0438\u0440\u0430\u0439\u0442",add:"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0432\u0435\u0440\u0445",movedown:"\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u043d\u0438\u0437","head_elements":"Head elements",info:"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta \u044d\u043b\u0435\u043c\u0435\u043d\u0442","comment_element":"\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439",src:"Src",language:"\u042f\u0437\u044b\u043a",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",value:"\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435",content:"\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u041e\u0431\u0449\u0435\u0435","advanced_props":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ia_dlg.js
new file mode 100644
index 000000000..454263f9c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.fullpage_dlg',{title:"\u6863\u6848\u5c5e\u6027","meta_tab":"\u57fa\u672c","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"\u4e2d\u7ee7\u6570\u636e\u5377\u6807\u5c5e\u6027",langprops:"\u8bed\u8a00","meta_title":"\u6807\u9898","meta_keywords":"\u5173\u952e\u8bcd","meta_description":"\u5185\u5bb9\u8bf4\u660e","meta_robots":"\u673a\u5668\u4eba",doctypes:"DocType",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",ltr:"\u4ece\u5de6\u5230\u53f3",rtl:"\u4ece\u53f3\u5230\u5de6","xml_pi":"XML \u58f0\u660e",encoding:"\u5b57\u7b26\u7f16\u7801","appearance_bgprops":"\u80cc\u666f\u5c5e\u6027","appearance_marginprops":"\u8fb9\u8ddd","appearance_linkprops":"\u8fde\u7ed3\u989c\u8272","appearance_textprops":"\u6587\u5b57\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u8fb9\u8ddd","right_margin":"\u53f3\u8fb9\u8ddd","top_margin":"\u4e0a\u8fb9\u8ddd","bottom_margin":"\u4e0b\u8fb9\u8ddd","text_color":"\u6587\u5b57\u989c\u8272","font_size":"\u6587\u5b57\u5927\u5c0f","font_face":"\u5b57\u4f53","link_color":"\u8fde\u7ed3\u989c\u8272","hover_color":"Hover \u989c\u8272","visited_color":"Visited \u989c\u8272","active_color":"Active \u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u6587\u5b57\u5927\u5c0f",fontface:"\u5b57\u4f53","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"\u6837\u5f0f\u8868\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u8868",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743",add:"\u6dfb\u52a0\u65b0\u5bf9\u8c61",remove:"\u5220\u9664\u9009\u62e9\u7684\u5bf9\u8c61",moveup:"\u5411\u4e0a\u79fb\u52a8\u9009\u62e9\u7684\u5bf9\u8c61",movedown:"\u5411\u4e0b\u79fb\u52a8\u9009\u62e9\u7684\u5bf9\u8c61","head_elements":"\u5934\u5bf9\u8c61",info:"\u4fe1\u606f","add_title":"\u67e5\u627e\u5bf9\u8c61","add_meta":"\u5143\u5bf9\u8c61","add_script":"\u811a\u672c\u5bf9\u8c61","add_style":"\u6837\u5f0f\u5bf9\u8c61","add_link":"\u8fde\u7ed3\u5316\u5bf9\u8c61","add_base":"Base\u5bf9\u8c61","add_comment":"\u6ce8\u91ca\u5bf9\u8c61","title_element":"\u67e5\u627e\u5bf9\u8c61","script_element":"\u811a\u672c\u5bf9\u8c61","style_element":"\u6837\u5f0f\u5bf9\u8c61","base_element":"Base\u5bf9\u8c61","link_element":"\u8fde\u7ed3\u5316\u5bf9\u8c61","meta_element":"\u5143\u5bf9\u8c61","comment_element":"\u6ce8\u91ca\u5bf9\u8c61",src:"Src",language:"\u8bed\u8a00",href:"Href",target:"\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u7b26\u96c6",defer:"Defer",media:"\u5a92\u4f53",properties:"\u5c5e\u6027",name:"\u540d",value:"\u503c",content:"\u5185\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u57fa\u672c","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/id_dlg.js
new file mode 100644
index 000000000..051788f42
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/is_dlg.js
new file mode 100644
index 000000000..73f4cf7f1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.fullpage_dlg',{title:"Valm\u00f6guleikar skjals","meta_tab":"Almennt","appearance_tab":"\u00datlit","advanced_tab":"\u00cdtarlegt","meta_props":"Meta uppl\u00fdsingar",langprops:"Tungum\u00e1l","meta_title":"Titill","meta_keywords":"Leitaror\u00f0","meta_description":"L\u00fdsing","meta_robots":"Robots",doctypes:"Doctype",langcode:"Tungum\u00e1la k\u00f3\u00f0i",langdir:"Tungum\u00e1la \u00e1tt",ltr:"Vinstri til h\u00e6gri",rtl:"H\u00e6gri til vinstri","xml_pi":"XML declaration",encoding:"Stafa enk\u00f3\u00f0un","appearance_bgprops":"Bakgrunns m\u00f6guleikar","appearance_marginprops":"innihalds sp\u00e1ss\u00eda","appearance_linkprops":"Litir \u00e1 hlekkjum","appearance_textprops":"Text properties",bgcolor:"Bakgrunnslitur",bgimage:"Bakgrunnsmynd","left_margin":"vinstri sp\u00e1ss\u00eda","right_margin":"H\u00e6gri sp\u00e1ss\u00eda","top_margin":"Top sp\u00e1ss\u00eda","bottom_margin":"Botn sp\u00e1ss\u00eda","text_color":"Textalitur","font_size":"Stafast\u00e6r\u00f0","font_face":"Stafager\u00f0","link_color":"Litur \u00e1 hlekk","hover_color":"hover litur","visited_color":"Heims\u00f3ttur litur","active_color":"Virkur litur",textcolor:"Litur",fontsize:"Stafast\u00e6r\u00f0",fontface:"Stafa fj\u00f6lskylda","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"St\u00edlsni\u00f0 og eiginleikar",stylesheet:"St\u00edlsni\u00f0",style:"St\u00edll",author:"H\u00f6fundur",copyright:"Eignar\u00e9ttur",add:"B\u00e6ta vi\u00f0 n\u00fdjum hlut",remove:"Fjarl\u00e6gja valinn hlut",moveup:"F\u00e6ra valinn hlut upp",movedown:"F\u00e6ra valinn hlut ni\u00f0ur","head_elements":"A\u00f0al hlutur",info:"Uppl\u00fdsingar","add_title":"Titill hluts","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"B\u00e6ta vi\u00f0 athugasemd","title_element":"Titill hluts","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Tungum\u00e1l",href:"Href",target:"\u00c1\u00e6tlunarsta\u00f0ur",type:"Tegund",charset:"stafasett",defer:"V\u00edsun",media:"Margmi\u00f0lun",properties:"Eiginleikar",name:"Nafn",value:"Value",content:"Innihald",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Almennt","advanced_props":"\u00cdtarlegt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/it_dlg.js
new file mode 100644
index 000000000..d5445e832
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.fullpage_dlg',{title:"Propriet\u00e0 Documento","meta_tab":"Generale","appearance_tab":"Aspetto","advanced_tab":"Avanzate","meta_props":"Informazioni Metatag",langprops:"Lingua e codifica","meta_title":"Titolo","meta_keywords":"Parole chiave","meta_description":"Descrizione","meta_robots":"Robots",doctypes:"Doctype",langcode:"Codice lingua",langdir:"Direzione testo",ltr:"Sinistra verso destra",rtl:"Destra verso sinistra","xml_pi":"Dichiarazione XML",encoding:"Codifica carattere","appearance_bgprops":"Propriet\u00e0 sfondo","appearance_marginprops":"Margini body","appearance_linkprops":"Colori collegamenti","appearance_textprops":"Propriet\u00e0 testo",bgcolor:"Colore sfondo",bgimage:"Immagine sfondo","left_margin":"Margine sinistro","right_margin":"Margine destro","top_margin":"Margine superiore","bottom_margin":"Margine inferiore","text_color":"Colore testo","font_size":"Dimensione carattere","font_face":"Tipo carattere","link_color":"Colore collegamento","hover_color":"Colore \\\'Hover\\\'","visited_color":"Colore \\\'Visited\\\'","active_color":"Colore \\\'Active\\\'",textcolor:"Colore",fontsize:"Dimensione carattere",fontface:"Famiglia carattere","meta_index_follow":"Indicizzare e seguire collegamenti","meta_index_nofollow":"Indicizzare e non segure collegamenti","meta_noindex_follow":"Non indicizzare ma seguire collegamenti","meta_noindex_nofollow":"Non indicizzare e non seguire collegamenti","appearance_style":"Propriet\u00e0 stili e fogli di stile",stylesheet:"Fogli di stile",style:"Stile",author:"Autore",copyright:"Copyright",add:"Aggiungi nuovo elemento",remove:"Rimuovi elemento selezionato",moveup:"Sposta elemento selezionato in alto",movedown:"Sposta elemento selezionato in basso","head_elements":"Elementi Head",info:"Informazioni","add_title":"Elemento Titolo","add_meta":"Elemento Meta","add_script":"Elemento Script","add_style":"Elemento Style","add_link":"Elemento Link","add_base":"Elemento Base","add_comment":"Nodo Commento","title_element":"Elemento Titolo","script_element":"Elemento Script","style_element":"Elemento Style","base_element":"Elemento Base","link_element":"Elemento Link","meta_element":"Elemento Meta","comment_element":"Commento",src:"Sorgente",language:"Linguaggio",href:"Href",target:"Target",type:"Tipo",charset:"Set caratteri",defer:"Defer",media:"Media",properties:"Propriet\u00e0",name:"Nome",value:"Valore",content:"Contenuto",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Generale","advanced_props":"Avanzate"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ja_dlg.js
new file mode 100644
index 000000000..656436305
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.fullpage_dlg',{title:"\u30da\u30fc\u30b8\u306e\u5c5e\u6027","meta_tab":"\u4e00\u822c","appearance_tab":"\u8868\u793a","advanced_tab":"\u9ad8\u5ea6\u306a\u8a2d\u5b9a","meta_props":"\u30e1\u30bf\u60c5\u5831",langprops:"\u8a00\u8a9e\u3068\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0","meta_title":"\u30bf\u30a4\u30c8\u30eb","meta_keywords":"\u30ad\u30fc\u30ef\u30fc\u30c9","meta_description":"\u8aac\u660e","meta_robots":"\u691c\u7d22\u30ed\u30dc\u30c3\u30c8\u306e\u5236\u5fa1",doctypes:"\u6587\u66f8\u578b",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9",langdir:"\u6587\u7ae0\u306e\u65b9\u5411",ltr:"\u5de6\u304b\u3089\u53f3",rtl:"\u53f3\u304b\u3089\u5de6","xml_pi":"XML\u5ba3\u8a00",encoding:"\u6587\u5b57\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0","appearance_bgprops":"\u80cc\u666f\u306e\u5c5e\u6027","appearance_marginprops":"Body\u306e\u4f59\u767d","appearance_linkprops":"\u30ea\u30f3\u30af\u306e\u8272","appearance_textprops":"\u6587\u5b57\u306e\u5c5e\u6027",bgcolor:"\u80cc\u666f\u306e\u8272",bgimage:"\u80cc\u666f\u306e\u753b\u50cf","left_margin":"\u5de6\u306e\u4f59\u767d","right_margin":"\u53f3\u306e\u4f59\u767d","top_margin":"\u4e0a\u306e\u4f59\u767d","bottom_margin":"\u4e0b\u306e\u4f59\u767d","text_color":"\u6587\u5b57\u306e\u8272","font_size":"\u6587\u5b57\u306e\u5927\u304d\u3055","font_face":"\u30d5\u30a9\u30f3\u30c8","link_color":"\u30ea\u30f3\u30af\u306e\u8272","hover_color":"\u30de\u30a6\u30b9\u30ab\u30fc\u30bd\u30eb\u304c\u3042\u308b\u30ea\u30f3\u30af\u306e\u8272(hover)","visited_color":"\u65e2\u306b\u8aad\u3093\u3060\u30ea\u30f3\u30af\u306e\u8272(visited)","active_color":"\u30af\u30ea\u30c3\u30af\u3057\u305f\u77ac\u9593\u306e\u30ea\u30f3\u30af\u306e\u8272(active)",textcolor:"\u8272",fontsize:"\u6587\u5b57\u306e\u5927\u304d\u3055",fontface:"\u30d5\u30a9\u30f3\u30c8","meta_index_follow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u3066\u30ea\u30f3\u30af\u3092\u305f\u3069\u308b","meta_index_nofollow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u3066\u30ea\u30f3\u30af\u306f\u305f\u3069\u3089\u306a\u3044","meta_noindex_follow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u306a\u3044\u304c\u30ea\u30f3\u30af\u3092\u305f\u3069\u308b","meta_noindex_nofollow":"\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306b\u4f7f\u7528\u3057\u306a\u3044\u3067\u30ea\u30f3\u30af\u3082\u305f\u3069\u3089\u306a\u3044","appearance_style":"\u30b9\u30bf\u30a4\u30eb\u30b7\u30fc\u30c8\u3068\u30b9\u30bf\u30a4\u30eb\u306e\u5c5e\u6027",stylesheet:"\u30b9\u30bf\u30a4\u30eb\u30b7\u30fc\u30c8",style:"\u30b9\u30bf\u30a4\u30eb",author:"\u4f5c\u6210\u8005",copyright:"\u8457\u4f5c\u6a29",add:"\u65b0\u3057\u304f\u8981\u7d20\u3092\u8ffd\u52a0",remove:"\u9078\u629e\u3057\u305f\u8981\u7d20\u3092\u524a\u9664",moveup:"\u9078\u629e\u3057\u305f\u8981\u7d20\u3092\u4e0a\u306b\u79fb\u52d5",movedown:"\u9078\u629e\u3057\u305f\u8981\u7d20\u3092\u4e0b\u306b\u79fb\u52d5","head_elements":"Head\u8981\u7d20",info:"\u60c5\u5831","add_title":"Title\u8981\u7d20","add_meta":"Meta\u8981\u7d20","add_script":"Script\u8981\u7d20","add_style":"Style\u8981\u7d20","add_link":"Link\u8981\u7d20","add_base":"Base\u8981\u7d20","add_comment":"Comment\u30ce\u30fc\u30c9","title_element":"Title\u8981\u7d20","script_element":"Script\u8981\u7d20","style_element":"Style\u8981\u7d20","base_element":"Base\u8981\u7d20","link_element":"Link\u8981\u7d20","meta_element":"Meta\u8981\u7d20","comment_element":"\u30b3\u30e1\u30f3\u30c8",src:"src",language:"\u8a00\u8a9e",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href\u306e\u8a00\u8a9e","general_props":"\u4e00\u822c","advanced_props":"\u8a73\u7d30\u306a\u8a2d\u5b9a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ka_dlg.js
new file mode 100644
index 000000000..0bf678976
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.fullpage_dlg',{title:"\u10d3\u10dd\u10d9\u10e3\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8","meta_tab":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd","appearance_tab":"\u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10d0","advanced_tab":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7","meta_props":"\u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d8\u10e1 \u10db\u10d8\u10d6\u10d0\u10dc\u10d8",langprops:"\u10d4\u10dc\u10d0 \u10d3\u10d0 \u10d9\u10dd\u10d3\u10d8\u10e0\u10d4\u10d1\u10d0","meta_title":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","meta_keywords":"\u10e1\u10d0\u10d9\u10d5\u10d0\u10dc\u10eb\u10dd \u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10d8","meta_description":"\u10d0\u10e0\u10ec\u10d4\u10e0\u10d0","meta_robots":"\u10dc\u10d0\u10db\u10e3\u10e8\u10d4\u10d5\u10e0\u10d4\u10d1\u10d8",doctypes:"\u10e2\u10d8\u10de\u10d8",langcode:"\u10d4\u10dc\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8",langdir:"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0",ltr:"\u10db\u10d0\u10e0\u10ea\u10e1\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",rtl:"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","xml_pi":"XML \u10d2\u10d0\u10dc\u10ea\u10ee\u10d0\u10d3\u10d4\u10d1\u10d0",encoding:"\u10d9\u10dd\u10d3\u10d8\u10e0\u10d4\u10d1\u10d0","appearance_bgprops":"\u10e4\u10dd\u10dc\u10d8\u10e1 \u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8","appearance_marginprops":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d4\u10d1\u10d8","appearance_linkprops":"\u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","appearance_textprops":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d0\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8",bgcolor:"\u10e4\u10dd\u10dc\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8",bgimage:"\u10e4\u10dd\u10dc\u10e3\u10e0\u10d8 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d0","left_margin":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ea\u10e1\u10dc\u10d8\u10d3\u10d0\u10dc","right_margin":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc","top_margin":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0 \u10d6\u10d4\u10db\u10dd\u10d3\u10d0\u10dc","bottom_margin":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0 \u10e5\u10d5\u10d4\u10db\u10dd\u10d3\u10d0\u10dc","text_color":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","font_size":"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8\u10e1 \u10d6\u10dd\u10db\u10d0","font_face":"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8","link_color":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","hover_color":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8 \u10d2\u10d0\u10d0\u10e5\u10e2\u10d8\u10e3\u10e0\u10d4\u10d1\u10d8\u10e1\u10d0\u10e1","visited_color":"\u10d2\u10d0\u10d0\u10e5\u10e2\u10d8\u10e3\u10e0\u10d4\u10d1\u10e3\u10da\u10d8 \u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","active_color":"\u10d0\u10e5\u10e2\u10d8\u10e3\u10e0\u10d8 \u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8",textcolor:"\u10e4\u10d4\u10e0\u10d8",fontsize:"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8\u10e1 \u10d6\u10dd\u10db\u10d0",fontface:"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8\u10e1 \u10d9\u10d0\u10e2\u10d4\u10d2\u10dd\u10e0\u10d8\u10d0","meta_index_follow":"\u10d3\u10d0\u10d5\u10d0\u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10dd\u10d7 \u10d3\u10d0 \u10d2\u10d0\u10d5\u10e7\u10d5\u10d4\u10d7 \u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10e1","meta_index_nofollow":"\u10d3\u10d0\u10d5\u10d0\u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10dd\u10d7 \u10d3\u10d0 \u10d0\u10e0 \u10d2\u10d0\u10d5\u10e7\u10d5\u10d4\u10d7 \u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10e1","meta_noindex_follow":"\u10d0\u10e0 \u10d3\u10d0\u10d5\u10d0\u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10dd\u10d7, \u10db\u10d0\u10d2\u10e0\u10d0\u10db \u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10e1 \u10d2\u10d0\u10d5\u10e7\u10d5\u10d4\u10d7","meta_noindex_nofollow":"\u10d0\u10e0 \u10d3\u10d0\u10d5\u10d0\u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10dd\u10d7 \u10d3\u10d0 \u10d0\u10e0 \u10d2\u10d0\u10d5\u10e7\u10d5\u10d4\u10d7 \u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10e1","appearance_style":"\u10e1\u10e2\u10d8\u10da\u10d4\u10d1\u10d8\u10e1 \u10db\u10d0\u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10da\u10d4\u10d1\u10d8 \u10d3\u10d0 \u10e1\u10d8\u10d0",stylesheet:"\u10e1\u10e2\u10d8\u10da\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0",style:"\u10e1\u10e2\u10d8\u10da\u10d8",author:"\u10d0\u10d5\u10e2\u10dd\u10e0\u10d8",copyright:"\u10d9\u10dd\u10de\u10d8\u10e0\u10d0\u10d8\u10e2\u10d8",add:"\u10d0\u10ee\u10d0\u10da\u10d8 \u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0",remove:"\u10db\u10dd\u10dc\u10d8\u10e8\u10dc\u10e3\u10da\u10d8 \u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0",moveup:"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10d6\u10d4\u10db\u10dd\u10d7 \u10d2\u10d0\u10d3\u10d0\u10d0\u10d3\u10d2\u10d8\u10da\u10d4\u10d1\u10d0",movedown:"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10e5\u10d5\u10d4\u10db\u10dd\u10d7 \u10d2\u10d0\u10d3\u10d0\u10d0\u10d3\u10d2\u10d8\u10da\u10d4\u10d1\u10d0","head_elements":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Header",info:"\u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d0","add_title":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Title","add_meta":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Meta","add_script":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Script","add_style":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Style","add_link":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Link","add_base":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Base","add_comment":"\u10d9\u10dd\u10db\u10d4\u10dc\u10e2\u10d0\u10e0\u10d8","title_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Title","script_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Script","style_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Style","base_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Base","link_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Link","meta_element":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8 Meta","comment_element":"\u10d9\u10dd\u10db\u10d4\u10dc\u10e2\u10d8\u10d0\u10e0\u10d8",src:"Src",language:"\u10d4\u10dc\u10d0",href:"\u10d1\u10db\u10e3\u10da\u10d8",target:"\u10db\u10d8\u10d6\u10d0\u10dc\u10d8",type:"\u10e2\u10d8\u10de\u10d8",charset:"\u10d9\u10dd\u10d3\u10d8\u10e0\u10d4\u10d1\u10d0",defer:"\u10d2\u10d0\u10d3\u10d0\u10e2\u10d0\u10dc\u10d0",media:"\u10db\u10d4\u10d3\u10d8\u10d0",properties:"\u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",name:"\u10e1\u10d0\u10ee\u10d4\u10da\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0",value:"\u10db\u10d0\u10e9\u10d5\u10d4\u10dc\u10d4\u10d1\u10d4\u10da\u10d8",content:"\u10e8\u10d8\u10dc\u10d0\u10d0\u10e0\u10e1\u10d8",rel:"Rel",rev:"Rev",hreflang:"\u10d4\u10dc\u10d8\u10e1 \u10d1\u10db\u10e3\u10da\u10d8","general_props":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd","advanced_props":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/kl_dlg.js
new file mode 100644
index 000000000..d4d19268d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/km_dlg.js
new file mode 100644
index 000000000..12a01c208
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.fullpage_dlg',{title:"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u17af\u1780\u179f\u17b6\u179a","meta_tab":"\u1791\u17bc\u1791\u17c5","appearance_tab":"\u179a\u17bc\u1794\u179a\u17b6\u1784","advanced_tab":"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","meta_props":"\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u1798\u17c1\u178f\u17b6",langprops:"\u1797\u17b6\u179f\u17b6 \u1793\u17b7\u1784 \u1780\u17bc\u178a\u179f\u17d2\u179a\u17b6\u1799","meta_title":"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784","meta_keywords":"\u1796\u17b6\u1780\u17d2\u1799\u1782\u1793\u17d2\u179b\u17b9\u17c7","meta_description":"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6","meta_robots":"\u1798\u1793\u17bb\u179f\u17d2\u179f\u1799\u1793\u17d2\u178f",doctypes:"\u1794\u17d2\u179a\u1797\u17c1\u1791\u17af\u1780\u179f\u17b6\u179a",langcode:"\u1780\u17bc\u178a\u1797\u17b6\u179f\u17b6",langdir:"\u1791\u17b7\u179f\u178a\u17c5\u1797\u17b6\u179f\u17b6",ltr:"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6",rtl:"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784","xml_pi":"\u1780\u17b6\u179a\u1794\u17d2\u179a\u1780\u17b6\u179f XML",encoding:"\u1780\u17bc\u178a\u179f\u17d2\u179a\u17b6\u1799\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a","appearance_bgprops":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","appearance_marginprops":"\u179a\u17b9\u1798\u178f\u17bd","appearance_linkprops":"\u1796\u178e\u17cc\u178f\u17c6\u178e","appearance_textprops":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u17a2\u178f\u17d2\u1790\u1794\u1791",bgcolor:"\u1796\u178e\u17cc\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799",bgimage:"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","left_margin":"\u179a\u17b9\u1798\u1786\u17d2\u179c\u17c1\u1784","right_margin":"\u179a\u17b9\u1798\u179f\u17d2\u178f\u17b6\u17c6","top_margin":"\u179a\u17b9\u1798\u179b\u17be","bottom_margin":"\u179a\u17b9\u1798\u1780\u17d2\u179a\u17c4\u1798","text_color":"\u1796\u178e\u17cc\u17a2\u178f\u17d2\u1790\u1794\u1791","font_size":"\u1791\u17c6\u17a0\u17c6\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a","font_face":"\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a\u179f\u1793\u17d2\u1798\u178f","link_color":"\u1796\u178e\u17cc\u178f\u17c6\u178e","hover_color":"\u1796\u178e\u17cc\u178a\u17b6\u1780\u17cb\u179b\u17be","visited_color":"\u1796\u178e\u17cc\u1791\u179f\u17d2\u179f\u1793\u17b6\u179a\u17bd\u1785","active_color":"\u1796\u178e\u17cc\u179f\u1780\u1798\u17d2\u1798",textcolor:"\u1796\u178e\u17cc",fontsize:"\u1791\u17c6\u17a0\u17c6\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a",fontface:"\u179f\u17d2\u179a\u179b\u17b6\u1799\u17a2\u1780\u17d2\u179f\u179a","meta_index_follow":"\u1785\u1784\u17d2\u17a2\u17bb\u179b \u1793\u17b7\u1784 \u178f\u17b6\u1798\u178f\u17c6\u178e\u1791\u17b6\u17c6\u1784\u1793\u17c1\u17c7","meta_index_nofollow":"\u1785\u1784\u17d2\u17a2\u17bb\u179b \u1793\u17b7\u1784\u1798\u17b7\u1793\u178f\u17b6\u1798\u178f\u17c6\u178e\u1791\u17b6\u17c6\u1784\u1793\u17c1\u17c7","meta_noindex_follow":"\u1780\u17bb\u17c6\u1785\u1784\u17d2\u17a2\u17bb\u179b \u1793\u17b7\u1784\u178f\u17b6\u1798\u178f\u17c6\u178e\u1791\u17b6\u17c6\u1784\u1793\u17c1\u17c7","meta_noindex_nofollow":"\u1780\u17bb\u17c6\u1785\u1784\u17d2\u17a2\u17bb\u179b \u1793\u17b7\u1784 \u1780\u17bb\u17c6\u178f\u17b6\u1798\u178f\u17c6\u178e\u1791\u17b6\u17c6\u1784\u1793\u17c1\u17c7","appearance_style":"\u179f\u1793\u17d2\u179b\u17b9\u1780\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798 \u1793\u17b7\u1784 \u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",stylesheet:"\u179f\u1793\u17d2\u179b\u17b9\u1780\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",style:"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",author:"\u17a2\u17d2\u1793\u1780\u1793\u17b7\u1796\u1793\u17d2\u1792",copyright:"\u179a\u1780\u17d2\u179f\u17b6\u179f\u17b7\u1791\u17d2\u1792\u17b7",add:"\u1794\u1793\u17d2\u1790\u17c2\u1798\u1792\u17b6\u178f\u17bb\u1790\u17d2\u1798\u17b8",remove:"\u178a\u1780\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u1785\u17c1\u1789",moveup:"\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u17a1\u17be\u1784\u179b\u17be",movedown:"\u1795\u17d2\u179b\u17b6\u179f\u17cb\u1791\u17b8\u1792\u17b6\u178f\u17bb\u178a\u17c2\u179b\u1794\u17b6\u1793\u1787\u17d2\u179a\u17be\u179f\u1785\u17bb\u17c7\u1780\u17d2\u179a\u17c4\u1798","head_elements":"\u1792\u17b6\u178f\u17bb\u1787\u17b6\u1780\u17d2\u1794\u17b6\u179b",info:"\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793","add_title":"\u1792\u17b6\u178f\u17bb\u1785\u17c6\u178e\u1784\u1787\u17be\u1784","add_meta":"\u1792\u17b6\u178f\u17bb\u1798\u17c1\u178f\u17b6","add_script":"\u1792\u17b6\u178f\u17bb\u179f\u17d2\u1782\u17d2\u179a\u17b8\u1794","add_style":"\u1792\u17b6\u178f\u17bb\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798","add_link":"\u1792\u17b6\u178f\u17bb\u178f\u17c6\u178e","add_base":"\u1792\u17b6\u178f\u17bb\u1782\u17c4\u179b","add_comment":"\u1790\u17d2\u1793\u17b6\u17c6\u1784\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u17a2\u1792\u17b7\u1794\u17d2\u1794\u17b6\u1799","title_element":"\u1792\u17b6\u178f\u17bb\u1785\u17c6\u178e\u1784\u1787\u17be\u1784","script_element":"\u1792\u17b6\u178f\u17bb\u179f\u17d2\u179a\u17d2\u1782\u17b8\u1794","style_element":"\u1792\u17b6\u178f\u17bb\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798","base_element":"\u1792\u17b6\u178f\u17bb\u1782\u17c4\u179b","link_element":"\u1792\u17b6\u178f\u17bb\u178f\u17c6\u178e","meta_element":"\u1792\u17b6\u178f\u17bb\u1798\u17c1\u178f\u17b6","comment_element":"\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u17a2\u1792\u17b7\u1794\u17d2\u1794\u17b6\u1799",src:"\u1794\u17d2\u179a\u1797\u1796src",language:"\u1797\u17b6\u179f\u17b6",href:"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793Href",target:"\u1782\u17c4\u179b\u178a\u17c5",type:"\u1794\u17d2\u179a\u1797\u17c1\u1791",charset:"\u179f\u17c6\u178e\u17bb\u17c6\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a",defer:"\u1796\u1793\u17d2\u1799\u17b6\u1796\u17c1\u179b",media:"\u1798\u17c1\u178c\u17c0",properties:"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7",name:"\u1788\u17d2\u1798\u17c4\u17c7",value:"\u178f\u1798\u17d2\u179b\u17c3",content:"\u1798\u17b6\u178f\u17b7\u1780\u17b6",rel:"Rel",rev:"Rev",hreflang:"Href","general_props":"\u1791\u17bc\u1791\u17c5","advanced_props":"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ko_dlg.js
new file mode 100644
index 000000000..b3d629852
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.fullpage_dlg',{title:"\ubb38\uc11c \uc18d\uc131","meta_tab":"\uc77c\ubc18","appearance_tab":"\ud45c\uc2dc","advanced_tab":"\uc138\ubd80 \uc0ac\ud56d","meta_props":"\uba54\ud0c0 \uc815\ubcf4",langprops:"\uc5b8\uc5b4 \ubc0f \uc778\ucf54\ub529","meta_title":"\uc81c\ubaa9","meta_keywords":"\ud0a4\uc6cc\ub4dc","meta_description":"\uc124\uba85","meta_robots":"\ub85c\ubd07",doctypes:"Doctype",langcode:"\uc5b8\uc5b4 \ucf54\ub4dc",langdir:"\ubb38\uc790 \ubc29\ud5a5",ltr:"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c",rtl:"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c","xml_pi":"XML \uc120\uc5b8",encoding:"\ubb38\uc790 \uc778\ucf54\ub529","appearance_bgprops":"\ubc30\uacbd \uc18d\uc131","appearance_marginprops":"Body \ub9c8\uc9c4","appearance_linkprops":"\ub9c1\ud06c\uc0c9","appearance_textprops":"\ud14d\uc2a4\ud2b8 \uc18d\uc131",bgcolor:"\ubc30\uacbd\uc0c9",bgimage:"\ubc30\uacbd \uc774\ubbf8\uc9c0","left_margin":"\uc67c\ucabd \ub9c8\uc9c4","right_margin":"\uc624\ub978\ucabd \ub9c8\uc9c4","top_margin":"\uc704 \ub9c8\uc9c4","bottom_margin":"\uc544\ub798 \ub9c8\uc9c4","text_color":"\ubb38\uc790\uc0c9","font_size":"\uae00\uaf34 \ud06c\uae30","font_face":"\uae00\uaf34\uba85","link_color":"\ub9c1\ud06c\uc0c9","hover_color":"\ub9c1\ud06c\uc0c9(hover)","visited_color":"\ub9c1\ud06c\uc0c9(visited)","active_color":"\ub9c1\ud06c\uc0c9(active)",textcolor:"\uc0c9",fontsize:"\uae00\uaf34 \ud06c\uae30",fontface:"\uae00\uaf34\uad70","meta_index_follow":"\ubaa8\ub450 \ud5c8\uac00","meta_index_nofollow":"\ud398\uc774\uc9c0\ub97c \ud5c8\uac00\ud558\uc9c0\ub9cc \ub9c1\ud06c \uae08\uc9c0","meta_noindex_follow":"\ud398\uc774\uc9c0\ub97c \uae08\uc9c0\ud558\uace0 \ub9c1\ud06c \ud5c8\uac00","meta_noindex_nofollow":"\ubaa8\ub450 \uae08\uc9c0","appearance_style":"\uc2a4\ud0c0\uc77c\uc2dc\ud2b8 \ubc0f \uc11c\uc2dd \uc18d\uc131",stylesheet:"\uc2a4\ud0c0\uc77c\uc2dc\ud2b8",style:"\uc11c\uc2dd",author:"\uc81c\uc791\uc790",copyright:"\uc800\uc791\uad8c",add:"\uc0c8 \uc694\uc18c \ucd94\uac00",remove:"\uc120\ud0dd\ud55c \uc694\uc18c \uc0ad\uc81c",moveup:"\uc120\ud0dd\ud55c \uc694\uc18c\ub97c \uc704\ub85c \uc774\ub3d9",movedown:"\uc120\ud0dd\ud55c \uc694\uc18c\ub97c \uc544\ub798\ub85c \uc774\ub3d9","head_elements":"Head \uc694\uc18c",info:"\uc815\ubcf4","add_title":"Title \uc694\uc18c","add_meta":"Meta \uc694\uc18c","add_script":"Script \uc694\uc18c","add_style":"Style \uc694\uc18c","add_link":"Link \uc694\uc18c","add_base":"Base \uc694\uc18c","add_comment":"\uc8fc\uc11d \uc694\uc18c","title_element":"Title \uc694\uc18c","script_element":"Script \uc694\uc18c","style_element":"Style \uc694\uc18c","base_element":"Base \uc694\uc18c","link_element":"Link \uc694\uc18c","meta_element":"Meta \uc694\uc18c","comment_element":"\uc8fc\uc11d",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"\uc18d\uc131",name:"\uc774\ub984",value:"\uac12",content:"\ub0b4\uc6a9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\uc77c\ubc18","advanced_props":"\uc138\ubd80 \uc0ac\ud56d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/kz_dlg.js
new file mode 100644
index 000000000..1c9fcc49b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lb_dlg.js
new file mode 100644
index 000000000..173913911
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.fullpage_dlg',{title:"Dokument-Eegeschaften","meta_tab":"Allgemeng","appearance_tab":"Ausgesinn","advanced_tab":"Erweidert","meta_props":"Meta-Informatioun",langprops:"Sprooch a Kod\u00e9ierung","meta_title":"Titel","meta_keywords":"Sch\u00ebsselwierder","meta_description":"Beschreiwung","meta_robots":"Roboter",doctypes:"DocType",langcode:"Sproochcode",langdir:"Spoochrichtung",ltr:"L\u00e9nks no Riets",rtl:"Riets no L\u00e9nks","xml_pi":"XML Deklaratioun",encoding:"Zeechekod\u00e9ierung","appearance_bgprops":"Hannergrond-Eegeschaften","appearance_marginprops":"Ofst\u00e4nn vum Body","appearance_linkprops":"Linkfuerwen","appearance_textprops":"Text-Eegeschaften",bgcolor:"Hannergrondfuerf",bgimage:"Hannergrondbild","left_margin":"L\u00e9nken Ofstand","right_margin":"Rietsen Ofstand","top_margin":"Ieweschten Ofstand","bottom_margin":"\u00cbnneschten Ofstand","text_color":"Textfuerf","font_size":"Schr\u00ebftgr\u00e9isst","font_face":"Schr\u00ebftaart","link_color":"Linkfuerf","hover_color":"Hover-Fuerf","visited_color":"Besicht-Fuerf","active_color":"Aktiv-Fuerf",textcolor:"Fuerf",fontsize:"Schr\u00ebftgr\u00e9ist",fontface:"Schr\u00ebftaart","meta_index_follow":"Indiz\u00e9ieren, an de Linken nogoen","meta_index_nofollow":"Indiz\u00e9ieren, m\u00e4 de Linken net nogoen","meta_noindex_follow":"Net indiz\u00e9ieren, m\u00e4 de Linken nogoen","meta_noindex_nofollow":"Net indiz\u00e9ieren an och net de Linken nogoen","appearance_style":"CSS-Stil Blat a Stileegeschaften",stylesheet:"CSS-Stil Blat",style:"CSS-Stil",author:"Auteur",copyright:"Copyright",add:"Neit Element b\u00e4if\u00fcgen",remove:"Ausgewielt Element ewechhuelen",moveup:"Ausgewielt Element nach uewen beweegen",movedown:"Ausgewielt Element no \u00ebnnen beweegen","head_elements":"Iwwerschr\u00ebftenelementer",info:"Informatioun","add_title":"Titel-Element","add_meta":"Meta-Element","add_script":"Script-Element","add_style":"Stil-Element","add_link":"Link-Element","add_base":"Basis-Element","add_comment":"HTML-Kommentar","title_element":"Titel-Element","script_element":"Script-Element","style_element":"Stil-Element","base_element":"Basis-Element","link_element":"Link-Element","meta_element":"Meta_Element","comment_element":"Kommentar",src:"Src",language:"Sprooche",href:"Href",target:"Zil",type:"Typ",charset:"Zeechesaz",defer:"Defer",media:"Media",properties:"Eegeschaften",name:"Numm",value:"W\u00e4ert",content:"Inhalt",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Allgemeng","advanced_props":"Erweidert"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lt_dlg.js
new file mode 100644
index 000000000..de70876a0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.fullpage_dlg',{title:"Dokumento nustatymai","meta_tab":"Bendra","appearance_tab":"I\u0161vaizda","advanced_tab":"I\u0161pl\u0117sta","meta_props":"Meta informacija",langprops:"Kalba ir koduot\u0117","meta_title":"Pavadinimas","meta_keywords":"Rakta\u017eod\u017eiai","meta_description":"Apra\u0161as","meta_robots":"Robotai",doctypes:"Dokumento tipas",langcode:"Kalbos kodas",langdir:"Kalbos kryptis",ltr:"I\u0161 kair\u0117s \u012f de\u0161in\u0119",rtl:"I\u0161 de\u0161in\u0117s \u012f kair\u0119","xml_pi":"XML deklaracijos",encoding:"Simboli\u0173 koduot\u0117","appearance_bgprops":"Fono nustatymai","appearance_marginprops":"K\u016bno para\u0161t\u0117s","appearance_linkprops":"Nuorod\u0173 spalvos","appearance_textprops":"Teksto nustatymai",bgcolor:"Fono spalva",bgimage:"Fono paveiksl\u0117lis","left_margin":"Kair\u0117 para\u0161t\u0117","right_margin":"De\u0161in\u0117 para\u0161t\u0117","top_margin":"Vir\u0161utin\u0117 para\u0161t\u0117","bottom_margin":"Apatin\u0117 para\u0161t\u0117","text_color":"Teksto spalva","font_size":"\u0160rifto dydis","font_face":"\u0160riftas","link_color":"Nuorodos spalva","hover_color":"U\u017evedus pele spalva","visited_color":"Aplankytos spalva","active_color":"Aktyvios spalva",textcolor:"Spalva",fontsize:"\u0160rifto dydis",fontface:"\u0160rifto \u0161eima","meta_index_follow":"Indeksuoti ir sekti nuorodomis","meta_index_nofollow":"Indeksuoti ir nesekti nuorodomis","meta_noindex_follow":"Neindeksuoti, bet sekti nuorodomis","meta_noindex_nofollow":"Neindeksuoti ir nesekti nuorodomis","appearance_style":"Stili\u0173 lapo ir stiliaus nustatymai",stylesheet:"Stili\u0173 lapas",style:"Stilius",author:"Autorius",copyright:"Autoriaus teis\u0117s",add:"Prid\u0117ti nauj\u0105 element\u0105",remove:"Pa\u0161alinti pa\u017eym\u0117t\u0105 element\u0105",moveup:"Perkelti pa\u017eym\u0117t\u0105 element\u0105 \u012f vir\u0161\u0173",movedown:"Perkelti pa\u017eym\u0117t\u0105 element\u0105 \u012f apa\u010di\u0105","head_elements":"Antra\u0161t\u0117s elementai",info:"Informacija","add_title":"Pavadinimo elementas","add_meta":"Meta elementas","add_script":"Skripto elementas","add_style":"Stiliaus elementas","add_link":"Nuorodos elementas","add_base":"Bazinis elementas","add_comment":"Komentaro mazgas","title_element":"Pavadinimo elementas","script_element":"Skripto elementas","style_element":"Stiliaus elementas","base_element":"Bazinis elementas","link_element":"Nuorodos elementas","meta_element":"Meta elementas","comment_element":"Komentaras",src:"\u0160altinis",language:"Kalba",href:"Href",target:"Paskirtis",type:"Tipas",charset:"Koduot\u0117",defer:"Atid\u0117ti",media:"Medija",properties:"Nustatymai",name:"Vardas",value:"Reik\u0161m\u0117",content:"Turinys",rel:"Laida",rev:"Pataisa",hreflang:"Href kalba","general_props":"Bendra","advanced_props":"I\u0161pl\u0117sta"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lv_dlg.js
new file mode 100644
index 000000000..c3c578127
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/mk_dlg.js
new file mode 100644
index 000000000..e70b7cab3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.fullpage_dlg',{title:"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0442","meta_tab":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e","appearance_tab":"\u0418\u0437\u0433\u043b\u0435\u0434","advanced_tab":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e","meta_props":"\u041c\u0435\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0458\u0430",langprops:"\u0408\u0430\u0437\u0438\u043a \u0438 \u043a\u043e\u0434\u0438\u0440\u0430\u045a\u0435","meta_title":"\u041d\u0430\u0441\u043b\u043e\u0432","meta_keywords":"\u041a\u043b\u0443\u0447\u043d\u0438 \u0437\u0431\u043e\u0440\u043e\u0432\u0438","meta_description":"\u041e\u043f\u0438\u0441","meta_robots":"\u0420\u043e\u0431\u043e\u0442\u0438",doctypes:"\u0422\u0438\u043f \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0442",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442",langdir:"\u041d\u0430\u0441\u043e\u043a\u0430 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442",ltr:"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e",rtl:"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e","xml_pi":"XML \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0458\u0430",encoding:"\u041a\u043e\u0434\u0438\u0440\u0430\u045a\u0435 \u043d\u0430 \u0437\u043d\u0430\u0446\u0438\u0442\u0435","appearance_bgprops":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430\u0442\u0430","appearance_marginprops":"\u041c\u0430\u0440\u0433\u0438\u043d\u0438 \u043d\u0430 \u0442\u0435\u043b\u043e\u0442\u043e","appearance_linkprops":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0432\u0438\u0442\u0435","appearance_textprops":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u043e \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0442",bgcolor:"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430\u0442\u0430",bgimage:"\u041f\u043e\u0437\u0430\u0434\u0438\u043d\u0441\u043a\u0430 \u0441\u043b\u0438\u043a\u0430","left_margin":"\u041b\u0435\u0432\u0430 \u043c\u0430\u0440\u0433\u0438\u043d\u0430","right_margin":"\u0414\u0435\u0441\u043d\u0430 \u043c\u0430\u0440\u0433\u0438\u043d\u0430","top_margin":"\u0413\u043e\u0440\u043d\u0430 \u043c\u0430\u0440\u0433\u0438\u043d\u0430","bottom_margin":"\u0414\u043e\u043b\u043d\u0430 \u043c\u0430\u0440\u0438\u043d\u0430","text_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0442","font_size":"\u0413\u043e\u043b\u0435\u043c\u0438\u043d\u0430 \u043d\u0430 \u0444\u043e\u043d\u0442\u043e\u0442","font_face":"\u0418\u0437\u0433\u043b\u0440\u0434 \u043d\u0430 \u0444\u043e\u043d\u0442\u043e\u0442","link_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0442","hover_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0442 \u043f\u0440\u0438 \u043f\u0440\u0435\u043c\u0438\u043d\u0443\u0432\u0430\u045a\u0435 \u043f\u0440\u0435\u043a\u0443 \u043d\u0435\u0433\u043e","visited_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043f\u043e\u0441\u0435\u0442\u0435\u043d\u0438 \u043b\u0438\u043d\u043a\u043e\u0432\u0438","active_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u043b\u0438\u043d\u043a",textcolor:"\u0411\u043e\u0458\u0430",fontsize:"\u0413\u043e\u043b\u0435\u043c\u0438\u043d\u0430 \u043d\u0430 \u0444\u043e\u043d\u0442\u043e\u0442",fontface:"\u0413\u0440\u0443\u043f\u0430 \u043d\u0430 \u0444\u043e\u043d\u0442\u043e\u0432\u0438","meta_index_follow":"\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0458 \u0438 \u0441\u043b\u0435\u0434\u0438 \u0433\u043e \u043b\u0438\u043d\u043a\u043e\u0442","meta_index_nofollow":"\u0418\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0458 \u0438 \u043d\u0435 \u0433\u043e \u0441\u043b\u0435\u0434\u0438 \u043b\u0438\u043d\u043a\u043e\u0442","meta_noindex_follow":"\u041d\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0458 \u043d\u043e \u0441\u043b\u0435\u0434\u0438 \u0433\u043e \u043b\u0438\u043d\u043a\u043e\u0442","meta_noindex_nofollow":"\u041d\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u0430\u0458 \u0438 \u043d\u0435 \u0433\u043e \u0441\u043b\u0435\u0434\u0438 \u043b\u0438\u043d\u043a\u043e\u0442","appearance_style":"CSS \u0438 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0441\u0442\u0438\u043b\u043e\u0442",stylesheet:"CSS",style:"\u0421\u0442\u0438\u043b",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438 \u043f\u0440\u0430\u0432\u0430",add:"\u0414\u043e\u0434\u0430\u0458 \u043d\u043e\u0432 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u041e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 \u0433\u043e \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u043e\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u043e\u043c\u0435\u0441\u0442\u0438 \u0433\u043e \u0438\u0437\u0431\u0440\u0430\u043d\u043e\u0438\u043e\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0433\u043e\u0440\u0435",movedown:"\u041f\u043e\u043c\u0435\u0441\u0442\u0438 \u0433\u043e \u0438\u0437\u0431\u0440\u0430\u043d\u0438\u043e\u0442 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0434\u043e\u043b\u0435","head_elements":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0437\u0430\u0433\u043b\u0430\u0432\u0438\u0458\u0430",info:"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0458\u0430","add_title":"\u041d\u0430\u0441\u043b\u043e\u0432\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_meta":"\u041c\u0435\u0442\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_script":"\u0421\u043a\u0440\u0438\u043f\u0442\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_style":"\u0421\u0442\u0438\u043b\u0441\u043a\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_link":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u043f\u043e\u0432\u0440\u0437\u0438\u0432\u0430\u045a\u0435 (\u043b\u0438\u043d\u043a)","add_base":"\u041e\u0441\u043d\u043e\u0432\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_comment":"\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440","title_element":"\u041d\u0430\u0441\u043b\u043e\u0432\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","script_element":"\u0421\u043a\u0440\u0438\u043f\u0442\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","style_element":"\u0421\u0442\u0438\u043b\u0441\u043a\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442","base_element":"\u041e\u0441\u043d\u043e\u0432\u0435\u043d \u0435\u043b\u0435\u043c\u0435\u043d\u0442","link_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u043f\u043e\u0432\u0440\u0437\u0443\u0432\u0430\u045a\u0435 (\u043b\u0438\u043d\u043a)","meta_element":"\u041c\u0435\u0442\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442","comment_element":"\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440",src:"\u0418\u0437\u0432\u043e\u0440",language:"\u0408\u0430\u0437\u0438\u043a",href:"Href",target:"\u041c\u0435\u0442\u0430",type:"\u0422\u0438\u043f",charset:"Charset",defer:"Defer",media:"\u041c\u0435\u0434\u0438\u0443\u043c\u0438",properties:"\u0421\u043e\u0458\u0441\u0442\u0432\u0430",name:"\u0418\u043c\u0435",value:"\u0412\u0440\u0435\u0434\u043d\u043e\u0441\u0442",content:"\u0421\u043e\u0434\u0440\u0436\u0438\u043d\u0430",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e","advanced_props":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ml_dlg.js
new file mode 100644
index 000000000..3bd2777c7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/mn_dlg.js
new file mode 100644
index 000000000..3ea446a32
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.fullpage_dlg',{title:"\u0411\u0430\u0440\u0438\u043c\u0442\u044b\u043d \u0442\u043e\u0434\u0440\u0443\u0443\u043b\u0433\u0430","meta_tab":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439","appearance_tab":"\u0425\u0430\u0440\u0430\u0433\u0434\u0430\u0446","advanced_tab":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d","meta_props":"Meta-\u043c\u044d\u0434\u044d\u044d\u043b\u044d\u043b",langprops:"\u0425\u044d\u043b \u0431\u0430 \u043a\u043e\u0434\u0447\u0438\u043b\u043e\u043b","meta_title":"\u0413\u0430\u0440\u0447\u0438\u0433","meta_keywords":"Keywords","meta_description":"\u0422\u0430\u0439\u043b\u0431\u0430\u0440","meta_robots":"Robots",doctypes:"DocType",langcode:"\u0425\u044d\u043b\u043d\u0438\u0439 \u043a\u043e\u0434",langdir:"\u0425\u044d\u043b\u043d\u0438\u0439 \u0447\u0438\u0433\u043b\u044d\u043b",ltr:"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d",rtl:"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d","xml_pi":"XML \u0442\u043e\u0434\u043e\u0440\u0445\u043e\u0439\u043b\u043e\u043b\u0442",encoding:"\u0422\u044d\u043c\u0434\u044d\u0433\u0442 \u043a\u043e\u0434\u0447\u0438\u043b\u043e\u043b","appearance_bgprops":"\u0414\u044d\u0432\u0441\u0433\u044d\u0440\u0438\u0439\u043d \u0448\u0438\u043d\u0436\u04af\u04af\u0434","appearance_marginprops":"\u042d\u0445 \u0431\u0438\u0435\u0438\u0439\u043d \u044d\u043c\u0436\u044d\u044d\u0440","appearance_linkprops":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u043d \u04e9\u043d\u0433\u04e9","appearance_textprops":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u0448\u0438\u043d\u0436\u04af\u04af\u0434",bgcolor:"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u04e9\u043d\u0433\u04e9",bgimage:"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u0437\u0443\u0440\u0430\u0433","left_margin":"\u0417\u04af\u04af\u043d \u0430\u043b\u0441\u043b\u0430\u043b\u0442","right_margin":"\u0411\u0430\u0440\u0443\u0443\u043d \u0430\u043b\u0441\u043b\u0430\u043b\u0442","top_margin":"\u0414\u044d\u044d\u0434 \u0430\u043b\u0441\u043b\u0430\u043b\u0442","bottom_margin":"\u0414\u043e\u043e\u0434 \u0430\u043b\u0441\u043b\u0430\u043b\u0442","text_color":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u04e9\u043d\u0433\u04e9","font_size":"\u0411\u0438\u0447\u0433\u0438\u0439\u043d \u0445\u044d\u043c\u0436\u044d\u044d","font_face":"\u0424\u043e\u043d\u0442","link_color":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u043d \u04e9\u043d\u0433\u04e9","hover_color":"\u0414\u044d\u044d\u0440 \u043d\u044c \u0445\u04af\u0440\u044d\u0445 \u04e9\u043d\u0433\u04e9","visited_color":"\u0417\u043e\u0447\u0438\u043b\u0441\u043e\u043d \u04e9\u043d\u0433\u04e9","active_color":"\u0418\u0434\u044d\u0432\u0445\u0442\u044d\u0439 \u04e9\u043d\u0433\u04e9",textcolor:"\u04e8\u043d\u0433\u04e9",fontsize:"\u0411\u0438\u0447\u0433\u0438\u0439\u043d \u0445\u044d\u043c\u0436\u044d\u044d",fontface:"\u0424\u043e\u043d\u0442","meta_index_follow":"\u0418\u043d\u0434\u0435\u043a\u0441\u043b\u044d\u044d\u0434 \u0434\u0430\u0433\u0430\u043d\u0430","meta_index_nofollow":"\u0418\u043d\u0434\u0435\u043a\u0441\u043b\u044d\u044d\u0434 \u0434\u0430\u0433\u0430\u0445\u0433\u04af\u0439","meta_noindex_follow":"\u0418\u043d\u0434\u0435\u043a\u0441\u043b\u044d\u0445\u0433\u04af\u0439 \u0434\u0430\u0433\u0430\u043d\u0430","meta_noindex_nofollow":"\u0418\u043d\u0434\u0435\u043a\u0441\u043b\u044d\u0445\u0433\u04af\u0439 \u0434\u0430\u0433\u0430\u0445\u0433\u04af\u0439","appearance_style":"CSS-Stylesheet \u0431\u0430 \u0445\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442",stylesheet:"CSS-Stylesheet",style:"CSS-Stil",author:"\u0417\u043e\u0445\u0438\u043e\u0433\u0447",copyright:"\u0417\u043e\u0445\u0438\u043e\u0433\u0447\u0438\u0439\u043d \u044d\u0440\u0445",add:"\u0428\u0438\u043d\u044d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u044d\u043c\u044d\u0445",remove:"\u0421\u043e\u043d\u0433\u043e\u0441\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0439\u0433 \u0443\u0441\u0442\u0433\u0430\u0445",moveup:"\u0421\u043e\u043d\u0433\u043e\u0441\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0439\u0433 \u0434\u044d\u044d\u0448 \u0445\u04e9\u0434\u04e9\u043b\u0433\u04e9\u0445",movedown:"\u0421\u043e\u043d\u0433\u043e\u0441\u043e\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0439\u0433 \u0434\u043e\u043e\u0448 \u0445\u04e9\u0434\u04e9\u043b\u0433\u04e9\u0445","head_elements":"\u0413\u0430\u0440\u0447\u0438\u0433 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",info:"\u041c\u044d\u0434\u044d\u044d\u043b\u044d\u043b","add_title":"\u0413\u0430\u0440\u0447\u0438\u0433-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_meta":"Meta-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_script":"\u0421\u043a\u0440\u0438\u043f\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_style":"\u0417\u0430\u0433\u0432\u0430\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_link":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_base":"\u0421\u0443\u0443\u0440\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442","add_comment":"HTML-\u0442\u0430\u0439\u043b\u0431\u0430\u0440","title_element":"\u0411\u0438\u0447\u0432\u044d\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442","script_element":"Script-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","style_element":"Style-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","base_element":"\u0421\u0443\u0443\u0440\u044c-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","link_element":"\u0417\u04af\u04af\u043d-\u044d\u043b\u0435\u043c\u0435\u043d\u0442","meta_element":"\u0411\u0430\u0440\u0443\u0443\u043d","comment_element":"\u0422\u0430\u0439\u043b\u0431\u0430\u0440",src:"\u042d\u0445",language:"\u0425\u044d\u043b",href:"Href",target:"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d",type:"\u0422\u04e9\u0440\u04e9\u043b",charset:"\u0422\u044d\u043c\u0434\u044d\u0433\u0442\u0438\u0439\u043d \u043e\u043b\u043e\u043d\u043b\u043e\u0433",defer:"Defer",media:"\u041c\u0435\u0434\u0438\u0430",properties:"\u0422\u043e\u0434\u0440\u0443\u0443\u043b\u0433\u0430",name:"\u041d\u044d\u0440",value:"\u0423\u0442\u0433\u0430",content:"\u0410\u0433\u0443\u0443\u043b\u0433\u0430",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439","advanced_props":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ms_dlg.js
new file mode 100644
index 000000000..83751480a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.fullpage_dlg',{title:"Alatan dokumen","meta_tab":"Am","appearance_tab":"Penglihatan","advanced_tab":"Lanjutan","meta_props":"Meta informasi",langprops:"Bahasa dan enkod","meta_title":"Tajuk","meta_keywords":"Kata kunci","meta_description":"Huraian","meta_robots":"Robot",doctypes:"Doctype",langcode:"Kod bahasa",langdir:"Arah bahasa",ltr:"Kiri ke kanan",rtl:"Kanan ke kiri","xml_pi":"XML deklarasi",encoding:"PengKod aksara","appearance_bgprops":"Alatan latar belakang","appearance_marginprops":"Ruangan tepi isi kandungan","appearance_linkprops":"Pautan warna","appearance_textprops":"Alatan teks",bgcolor:"Warna latar belakang",bgimage:"Imej latar belakang","left_margin":"Ruangan tepi kiri","right_margin":"Ruangan tepi kanan","top_margin":"Ruangan tepi atas","bottom_margin":"Ruangan tepi bawah","text_color":"Warna teks","font_size":"Saiz Huruf","font_face":"Jenis Huruf","link_color":"Pautan Warna","hover_color":"Warna di atas","visited_color":"Warna telah lawat","active_color":"Warna aktif",textcolor:"Warna",fontsize:"Saiz huruf",fontface:"Keluarga huruf","meta_index_follow":"Indeks dan ikut pautan","meta_index_nofollow":"Indeks dan jangan ikut pautan","meta_noindex_follow":"Jangan indeks tapi ikut pautan","meta_noindex_nofollow":"Jangan indeks dan ikut pautan","appearance_style":"Stylesheet dan alatan gaya",stylesheet:"Stylesheet",style:"Gaya",author:"Pengarang",copyright:"Hakcipta",add:"Tambah unsur baru",remove:"Alih unsur yang dipilih",moveup:"Alih unsur yang dipilih ke atas",movedown:"Alih unsur yang dipilih ke bawah","head_elements":"Unsur pembuka",info:"Informasi","add_title":"Unsur tajuk","add_meta":"Unsur meta","add_script":"Unsur skrip","add_style":"Unsur gaya","add_link":"Unsur pautan","add_base":"Unsur dasar","add_comment":"Nod komen","title_element":"Unsur tajuk","script_element":"Unsur skrip","style_element":"Unsur gaya","base_element":"Unsur dasar","link_element":"Unsur pautan","meta_element":"Unsur meta","comment_element":"Komen",src:"Src",language:"Bahasa",href:"Href",target:"Sasaran",type:"Jenis",charset:"Set huruf",defer:"Menangguhkan",media:"Media",properties:"Alatan",name:"Nama",value:"Nilai",content:"Isi kandungan",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Am","advanced_props":"Lanjutan"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/my_dlg.js
new file mode 100644
index 000000000..035281b04
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.fullpage_dlg',{title:"\u1005\u102c\u101b\u103d\u1000\u103a\u1005\u102c\u1010\u1019\u103a\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","meta_tab":"\u1021\u1031\u1011\u103d\u1031\u1011\u103d","appearance_tab":"\u1021\u101e\u103d\u1004\u103a\u1021\u103c\u1015\u1004\u103a","advanced_tab":"\u1021\u1011\u1030\u1038","meta_props":"Meta \u1021\u1001\u103b\u1000\u103a\u1021\u101c\u1000\u103a\u1019\u103b\u102c\u1038",langprops:"\u1018\u102c\u101e\u102c\u1005\u1000\u102c\u1038\u1014\u103e\u1004\u103a\u1037 \u1000\u102f\u1010\u103a\u101d\u103e\u1000\u103a\u1005\u1014\u1005\u103a","meta_title":"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u102e\u1038\u1021\u1019\u100a\u103a","meta_keywords":"\u1031\u101e\u102c\u1037\u1001\u103b\u1000\u103a\u1005\u1000\u102c\u1038\u101c\u1036\u102f\u1038\u1019\u103b\u102c\u1038","meta_description":"\u1031\u1016\u102c\u103a\u103c\u1015\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038","meta_robots":"\u101b\u102d\u102f\u1037\u1031\u1018\u102c\u1037\u1019\u103b\u102c\u1038",doctypes:"DocType",langcode:"\u1018\u102c\u101e\u102c\u1005\u1000\u102c\u1038 \u1000\u102f\u1010\u103a",langdir:"\u1005\u102c\u1031\u101b\u1038\u101e\u102c\u1038\u1019\u103e\u102f \u1025\u102e\u1038\u1010\u100a\u103a\u1001\u103b\u1000\u103a",ltr:"\u1018\u101a\u103a\u1019\u103e \u100a\u102c",rtl:"\u100a\u102c\u1019\u103e \u1018\u101a\u103a","xml_pi":"XML \u1031\u103c\u1000\u102c\u103a\u103c\u1004\u102c\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038",encoding:"\u1021\u1000\u1039\u1001\u101b\u102c \u1000\u102f\u1010\u103a\u101d\u103e\u1000\u103a\u1005\u1014\u1005\u103a","appearance_bgprops":"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","appearance_marginprops":"\u1000\u102d\u102f\u101a\u103a\u1011\u100a\u103a \u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038\u1019\u103b\u102c\u1038","appearance_linkprops":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1021\u1031\u101b\u102c\u1004\u103a\u1019\u103b\u102c\u1038","appearance_textprops":"\u1005\u102c\u101e\u102c\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038",bgcolor:"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u1021\u1031\u101b\u102c\u1004\u103a",bgimage:"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u101b\u102f\u1015\u103a\u1015\u1036\u102f","left_margin":"\u1018\u101a\u103a\u1018\u1000\u103a \u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038","right_margin":"\u100a\u102c\u1018\u1000\u103a \u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038","top_margin":"\u1011\u102d\u1015\u103a\u1015\u102d\u102f\u1004\u103a\u1038 \u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038","bottom_margin":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001 \u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038","text_color":"\u1005\u102c\u101e\u102c\u1038\u1021\u1031\u101b\u102c\u1004\u103a","font_size":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1031\u1016\u102c\u1004\u103a\u1037\u1021\u101b\u103d\u101a\u103a","font_face":"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1016\u102c\u1004\u103a\u1037 \u1019\u102d\u101e\u102c\u1038\u1005\u102f","link_color":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1021\u1031\u101b\u102c\u1004\u103a","hover_color":"Hover \u1021\u1031\u101b\u102c\u1004\u103a","visited_color":"Visited \u1021\u1031\u101b\u102c\u1004\u103a","active_color":"Active \u1021\u1031\u101b\u102c\u1004\u103a",textcolor:"\u1021\u1031\u101b\u102c\u1004\u103a",fontsize:"\u1005\u102c\u101c\u1036\u102f\u1038 \u1031\u1016\u102c\u1004\u103a\u1037\u1021\u101b\u103d\u101a\u103a",fontface:"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1016\u102c\u1004\u103a\u1037 \u1019\u102d\u101e\u102c\u1038\u1005\u102f","meta_index_follow":"\u1021\u100a\u103d\u103e\u1014\u103a\u1038\u103c\u1015\u102f\u101c\u102f\u1015\u103a\u104d \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1031\u1014\u102c\u1000\u103a\u101c\u102d\u102f\u1000\u103a\u1015\u102b","meta_index_nofollow":"\u1021\u100a\u103d\u103e\u1014\u103a\u1038\u103c\u1015\u102f\u101c\u102f\u1015\u103a\u103c\u1015\u102e\u1038 \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1031\u1014\u102c\u1000\u103a\u1019\u101c\u102d\u102f\u1000\u103a\u1015\u102b\u1014\u103e\u1004\u103a\u1037","meta_noindex_follow":"\u1021\u100a\u103d\u103e\u1014\u103a\u1038\u1019\u103c\u1015\u102f\u101c\u102f\u1015\u103a\u1018\u1032 \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1031\u1014\u102c\u1000\u103a\u101c\u102d\u102f\u1000\u103a\u1015\u102b","meta_noindex_nofollow":"\u1021\u100a\u103d\u103e\u1014\u103a\u1038\u1019\u101c\u102f\u1015\u103a\u1015\u102b \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1031\u1014\u102c\u1000\u103a\u101c\u100a\u103a\u1038 \u1019\u101c\u102d\u102f\u1000\u103a\u1015\u102b","appearance_style":"Stylesheet \u1014\u103e\u1004\u103a \u1005\u1010\u102d\u102f\u1004\u103a \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038",stylesheet:"\u1005\u1010\u102d\u102f\u1004\u103a \u1005\u102c\u101b\u103d\u1000\u103a",style:"\u1005\u1010\u102d\u102f\u1004\u103a",author:"\u1031\u101b\u1038\u101e\u1030",copyright:"\u1019\u1030\u1015\u102d\u102f\u1004\u103a\u1001\u103d\u1004\u103a\u1037",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nb_dlg.js
new file mode 100644
index 000000000..3c4b2696f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.fullpage_dlg',{title:"Dokumentegenskaper","meta_tab":"Generelt","appearance_tab":"Utseende","advanced_tab":"Avansert","meta_props":"Metainformasjon",langprops:"Spr\u00e5k og koding","meta_title":"Tittel","meta_keywords":"N\u00f8kkelord","meta_description":"Beskrivelse","meta_robots":"Roboter",doctypes:"Doctype",langcode:"Spr\u00e5kkode",langdir:"Skriftretning",ltr:"Venstre mot h\u00f8yre",rtl:"H\u00f8yre mot venstre","xml_pi":"XML-deklarasjon",encoding:"Tegnkonvertering","appearance_bgprops":"Bakgrunnsegenskaper","appearance_marginprops":"Body-marg","appearance_linkprops":"Lenkefarger","appearance_textprops":"Tekstegenskaper",bgcolor:"Bakgrunn",bgimage:"Bakgrunnsbilde","left_margin":"Venstre marg","right_margin":"H\u00f8yre marg","top_margin":"Toppmarg","bottom_margin":"Bunnmarg","text_color":"Farge","font_size":"Skriftst\u00f8rrelse","font_face":"Skrifttype","link_color":"Lenkefarge","hover_color":"Mus over-farge","visited_color":"Bes\u00f8kt-farge","active_color":"Aktive farge",textcolor:"Farge",fontsize:"Skriftst\u00f8rrelse",fontface:"Skrifttype","meta_index_follow":"Indekser, og f\u00f8lg lenkene","meta_index_nofollow":"Indekser, men ikke f\u00f8lg lenkene","meta_noindex_follow":"Ikke indekser, men f\u00f8lg lenkene","meta_noindex_nofollow":"Ikke indekser, og ikke f\u00f8lg lenkene","appearance_style":"Stilark og stilegenskaper",stylesheet:"Stilark",style:"Stil",author:"Forfatter",copyright:"Copyright",add:"Legg til nytt element",remove:"Fjern",moveup:"Flytt markert element opp",movedown:"Flytt markert element ned","head_elements":"Overskriftselementer",info:"Informasjon","add_title":"Tittelelement","add_meta":"Metaelement","add_script":"Skriptelement","add_style":"Stilelement","add_link":"Lenkeelement","add_base":"Basiselement","add_comment":"Kommentarnode","title_element":"Tittelelement","script_element":"Skriptelement","style_element":"Stilelement","base_element":"Basiselement","link_element":"Lenkeelement","meta_element":"Metaelement","comment_element":"Kommentar",src:"Skjerm",language:"Spr\u00e5k",href:"Href",target:"M\u00e5l",type:"Type",charset:"Tegnsett",defer:"Defer",media:"Objekt",properties:"Egenskaper",name:"Navn",value:"Verdi",content:"Innhold",rel:"Sidens forhold til m\u00e5let",rev:"M\u00e5lets forhold til siden",hreflang:"Href lang","general_props":"Generelt","advanced_props":"Avasert"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nl_dlg.js
new file mode 100644
index 000000000..9124146ce
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.fullpage_dlg',{title:"Documenteigenschappen","meta_tab":"Algemeen","appearance_tab":"Weergave","advanced_tab":"Geavanceerd","meta_props":"Meta informatie",langprops:"Taal en codering","meta_title":"Titel","meta_keywords":"Sleutelwoorden","meta_description":"Beschrijving","meta_robots":"Robots",doctypes:"Doctype",langcode:"Taalcode",langdir:"Taalrichting",ltr:"Van links naar rechts",rtl:"Van rechts naar links","xml_pi":"XML toewijzing",encoding:"Karaktercodering","appearance_bgprops":"Achtergrondeigenschappen","appearance_marginprops":"Bodymarge","appearance_linkprops":"Linkkleuren","appearance_textprops":"Teksteigenschappen",bgcolor:"Achtergrondkleur",bgimage:"Achtergrondafbeelding","left_margin":"Linkermarge","right_margin":"Rechtermarge","top_margin":"Bovenmarge","bottom_margin":"Ondermarge","text_color":"Tekstkleur","font_size":"Tekengrootte","font_face":"Lettertype","link_color":"Linkkleur","hover_color":"Hoverkleur","visited_color":"Bezocht kleur","active_color":"Actieve kleur",textcolor:"Kleur",fontsize:"Tekengrootte",fontface:"Lettertype","meta_index_follow":"Links indexeren en volgen","meta_index_nofollow":"Links indexeren maar niet volgen","meta_noindex_follow":"Links volgen maar niet indexeren","meta_noindex_nofollow":"Links niet indexeren en niet volgen","appearance_style":"Stijlblad en stijleigenschappen",stylesheet:"Stijlblad",style:"Stijl",author:"Auteur",copyright:"Copyright",add:"Nieuw element toevoegen",remove:"Geselecteerde elementen verwijderen",moveup:"Geselecteerde elementen omhoog verplaatsen",movedown:"Geselecteerde elementen omlaag verplaatsen","head_elements":"Kopelementen",info:"Informatie","add_title":"Titelelement","add_meta":"Meta-element","add_script":"Scriptelement","add_style":"Stijlelement","add_link":"Linkelement","add_base":"Basiselement","add_comment":"Opmerkingknooppunt","title_element":"Titelelement","script_element":"Scriptelement","style_element":"Stijlelement","base_element":"Basiselement","link_element":"Linkelement","meta_element":"Meta-element","comment_element":"Opmerking",src:"Bron",language:"Taal",href:"HREF",target:"Doel",type:"Type",charset:"Karakterset",defer:"Uitstellen",media:"Media",properties:"Eigenschappen",name:"Naam",value:"Waarde",content:"Inhoud",rel:"Rel",rev:"Rev",hreflang:"HREF taal","general_props":"Algemeen","advanced_props":"Geavanceerd"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nn_dlg.js
new file mode 100644
index 000000000..433cfab06
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.fullpage_dlg',{title:"Dokumenteigenskapar","meta_tab":"Generelt","appearance_tab":"Utsj\u00e5nad","advanced_tab":"Avansert","meta_props":"Metainformasjon",langprops:"Spr\u00e5k og koding","meta_title":"Tittel","meta_keywords":"N\u00f8kkelord","meta_description":"Omtale","meta_robots":"Roboter",doctypes:"Doctype",langcode:"Spr\u00e5kkode",langdir:"Skriftretning",ltr:"Venstre mot h\u00f8gre",rtl:"H\u00f8gre mot venstre","xml_pi":"XML-deklarasjon",encoding:"Teiknkonvertering","appearance_bgprops":"Bakgrunnseigenskapar","appearance_marginprops":"Body-marg","appearance_linkprops":"Lenkjefargar","appearance_textprops":"Teksteigenskapar",bgcolor:"Bakgrunn",bgimage:"Bakgrunnsbilete","left_margin":"Venstre marg","right_margin":"H\u00f8gre marg","top_margin":"Toppmarg","bottom_margin":"Botnmarg","text_color":"Farge","font_size":"Skriftstorleik","font_face":"Skrifttype","link_color":"Lenkjefarge","hover_color":"Mus-over-farge","visited_color":"Bes\u00f8kt-farge","active_color":"Aktiv farge",textcolor:"Farge",fontsize:"Skriftstorleik",fontface:"Skriftfamile","meta_index_follow":"Indekser, og f\u00f8lg lenkjene","meta_index_nofollow":"Indekser, men ikkje f\u00f8lg lenkjene","meta_noindex_follow":"Ikkje indekser, men f\u00f8lg lenkjene","meta_noindex_nofollow":"Ikkje indekser, og ikkje f\u00f8lg lenkjene","appearance_style":"Stilark og stileigenskapar",stylesheet:"Stilark",style:"Stil",author:"Forfattar",copyright:"Copyright",add:"Legg til nytt element",remove:"Fjern",moveup:"Flytt markert element opp",movedown:"Flytt markert element ned","head_elements":"Overskriftselement",info:"Informasjon","add_title":"Tittelelement","add_meta":"Metaelement","add_script":"Skriptelement","add_style":"Stilelement","add_link":"Lenkjeelement","add_base":"Basiselement","add_comment":"Kommentarnode","title_element":"Tittelelement","script_element":"Skriptelement","style_element":"Stilelement","base_element":"Basiselement","link_element":"Lenkjeelement","meta_element":"Metaelement","comment_element":"Kommentar",src:"Skjerm",language:"Spr\u00e5k",href:"Href",target:"M\u00e5l",type:"Type",charset:"Teiknsett",defer:"Defer",media:"Objekt",properties:"Eigenskapar",name:"Namn",value:"Verdi",content:"Nytt lag...",rel:"Sida sitt tilh\u00f8ve til m\u00e5let",rev:"M\u00e5let sitt tilh\u00f8ve til sida",hreflang:"Href lang","general_props":"Generelt","advanced_props":"Generelle eigenskapar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/no_dlg.js
new file mode 100644
index 000000000..66fc8ce4e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.fullpage_dlg',{title:"Dokumentegenskaper","meta_tab":"Generelt","appearance_tab":"Utseende","advanced_tab":"Avansert","meta_props":"Meta informasjon",langprops:"Spr\u00e5k og koding","meta_title":"Tittel","meta_keywords":"N\u00f8kkelord","meta_description":"Beskrivelse","meta_robots":"Roboter",doctypes:"Dokument type",langcode:"Spr\u00e5kkode",langdir:"Skriftretning",ltr:"Venstre mot h\u00f8yre",rtl:"H\u00f8yre mot venstre","xml_pi":"XML deklarering",encoding:"Karakter konvertering","appearance_bgprops":"Bakgrunnsegenskaper","appearance_marginprops":"Body marg","appearance_linkprops":"Lenke farger","appearance_textprops":"Tekst egenskaper",bgcolor:"Bakgrunnsfarge",bgimage:"Bakgrunnsbilde","left_margin":"Venstre marg","right_margin":"H\u00f8yre marg","top_margin":"Topp marg","bottom_margin":"Bunn marg","text_color":"Tekstfarge","font_size":"Skriftst\u00f8rrelse","font_face":"Skrifttype","link_color":"Lenke farge","hover_color":"Mus-over farge","visited_color":"Bes\u00f8kt farge","active_color":"Aktiv farge",textcolor:"Farge",fontsize:"Skriftst\u00f8rrelse",fontface:"Skriftfamile","meta_index_follow":"Indekser og f\u00f8lg lenkene","meta_index_nofollow":"Indekser og ikke f\u00f8lg lenkene","meta_noindex_follow":"Ikke indekser, men f\u00f8lg lenkene","meta_noindex_nofollow":"Ikke indekser, og ikke f\u00f8lg lenkene","appearance_style":"Stilark og stilegenskaper",stylesheet:"Stilark",style:"Stil",author:"Forfatter",copyright:"Copyright",add:"Legg til nytt element",remove:"Fjerne valgt element",moveup:"Flytt markert element opp",movedown:"Flytt markert element ned","head_elements":"Overskriftselement",info:"Informasjon","add_title":"Tittelelement","add_meta":"Metaelement","add_script":"Skriptelement","add_style":"Stilelement","add_link":"Lenkeelement","add_base":"Basiselement","add_comment":"Kommentar","title_element":"Tittelelement","script_element":"Skriptelement","style_element":"Stilelement","base_element":"Basiselement","link_element":"Lenkeelement","meta_element":"Metaelement","comment_element":"Kommentar",src:"Kilde",language:"Spr\u00e5k",href:"Href",target:"M\u00e5l",type:"Type",charset:"Tegnsett",defer:"Henstille",media:"Objekt",properties:"Egenskaper",name:"Navn",value:"Verdi",content:"Innhold",rel:"Rel",rev:"Rev",hreflang:"Href spr\u00e5k","general_props":"Generelt","advanced_props":"Avansert"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/pl_dlg.js
new file mode 100644
index 000000000..b94005264
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.fullpage_dlg',{title:"W\u0142a\u015bciwo\u015bci dokumentu","meta_tab":"Og\u00f3lne","appearance_tab":"Wygl\u0105d","advanced_tab":"Zaawansowane","meta_props":"Meta informacje",langprops:"J\u0119zyk i kodowanie","meta_title":"Tytu\u0142","meta_keywords":"S\u0142owa kluczowe","meta_description":"Opis","meta_robots":"Roboty",doctypes:"Typ dokumentu",langcode:"Oznaczenie kodowe j\u0119zyka",langdir:"Kierunek czytania tekstu",ltr:"Kierunek z lewej do prawej",rtl:"Kierunek z prawej do lewej","xml_pi":"Deklaracja XML",encoding:"Kodowanie znak\u00f3w","appearance_bgprops":"W\u0142a\u015bciwo\u015bci t\u0142a","appearance_marginprops":"Marginesy strony","appearance_linkprops":"Kolor odno\u015bnik\u00f3w","appearance_textprops":"W\u0142a\u015bciwo\u015bci tekstu",bgcolor:"Kolor t\u0142a",bgimage:"Obrazek t\u0142a","left_margin":"Lewy margines","right_margin":"Prawy margines","top_margin":"G\u00f3rny margines","bottom_margin":"Dolny margines","text_color":"Kolor tekstu","font_size":"Rozmiar czcionki","font_face":"Czcionka","link_color":"Kolor odno\u015bnika","hover_color":"Kolor po najechaniu myszk\u0105","visited_color":"Kolor odwiedzonych link\u00f3w","active_color":"Kolor aktywnych link\u00f3w",textcolor:"Kolor",fontsize:"Rozmiar czcionki",fontface:"Rodzaj czcionki","meta_index_follow":"Indeksuj i pod\u0105\u017caj za linkami","meta_index_nofollow":"Indeksuj i nie pod\u0105\u017caj za odno\u015bnikami","meta_noindex_follow":"Nie indeksuj i pod\u0105\u017caj za odno\u015bnikami","meta_noindex_nofollow":"Nie indeksuj i nie pod\u0105\u017caj za odno\u015bnikami","appearance_style":"Arkusze i w\u0142a\u015bciwo\u015bci styl\u00f3w",stylesheet:"Arkusz styl\u00f3w",style:"Styl",author:"Autor",copyright:"Prawa autorskie",add:"Dodaj nowy element",remove:"Usu\u0144 wybrany element",moveup:"Przesu\u0144 wybrane element do g\u00f3ry",movedown:"Przesu\u0144 wybrane element w d\u00f3\u0142","head_elements":"Elementy nag\u0142\u00f3wka",info:"Informacja","add_title":"Tytu\u0142","add_meta":"Meta tag","add_script":"Skrypt","add_style":"Styl","add_link":"Odno\u015bnik","add_base":"Baza","add_comment":"Komentarz","title_element":"Tytu\u0142","script_element":"Skrypt","style_element":"Styl","base_element":"Baza","link_element":"Odno\u015bnik","meta_element":"Meta tag","comment_element":"Komentarz",src:"\u0179r\u00f3d\u0142o",language:"J\u0119zyk",href:"Odno\u015bnik",target:"Cel",type:"Typ",charset:"Kodowanie",defer:"Defer",media:"Media",properties:"W\u0142a\u015bciwo\u015bci",name:"Nazwa",value:"Warto\u015b\u0107",content:"Zawarto\u015b\u0107",rel:"Rel",rev:"Rev",hreflang:"J\u0119zyk odno\u015bnika","general_props":"G\u0142\u00f3wne","advanced_props":"Zaawansowane"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ps_dlg.js
new file mode 100644
index 000000000..d62c50907
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/pt_dlg.js
new file mode 100644
index 000000000..749f86859
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.fullpage_dlg',{title:"Propriedades do documento","meta_tab":"Geral","appearance_tab":"Apar\u00eancia","advanced_tab":"Avan\u00e7ado","meta_props":"Meta-informa\u00e7\u00e3o",langprops:"Idioma e codifica\u00e7\u00e3o","meta_title":"T\u00edtulo","meta_keywords":"Palavras-chave","meta_description":"Descri\u00e7\u00e3o","meta_robots":"Robots",doctypes:"Doctype",langcode:"C\u00f3digo do idioma",langdir:"Dire\u00e7\u00e3o do texto",ltr:"Esquerda para direita",rtl:"Direita para esquerda","xml_pi":"Declara\u00e7\u00e3o XML",encoding:"Codifica\u00e7\u00e3o de caracteres","appearance_bgprops":"Propriedades do plano de fundo","appearance_marginprops":"Margens (BODY)","appearance_linkprops":"Cores dos links","appearance_textprops":"Propriedades de texto",bgcolor:"Cor de fundo",bgimage:"Imagem de fundo","left_margin":"Margem esquerda","right_margin":"Margem direita","top_margin":"Margem topo","bottom_margin":"Margem base","text_color":"Cor do texto","font_size":"Tamanho fonte","font_face":"Fonte","link_color":"Cores dos links","hover_color":"Hover","visited_color":"Visitado","active_color":"Ativo",textcolor:"Cor",fontsize:"Tamanho fonte",fontface:"Fonte","meta_index_follow":"Indexar e seguir os hyperlinks","meta_index_nofollow":"Indexar e n\u00e3o seguir os hyperlinks","meta_noindex_follow":"Seguir hyperlinks, mas n\u00e3o indexar","meta_noindex_nofollow":"N\u00e3o indexar / n\u00e3o seguir hyperlinks.","appearance_style":"Propriedades de folhas de estilo",stylesheet:"Folha de estilo",style:"Estilo",author:"Autor",copyright:"Copyright",add:"Acrescentar novo elemento",remove:"Remover elemento selecionado",moveup:"Subir elemento selecionado",movedown:"Descer elemento selecionado","head_elements":"Elementos HEAD",info:"Informa\u00e7\u00e3o","add_title":"TITLE","add_meta":"META","add_script":"SCRIPT","add_style":"STYLE","add_link":"LINK","add_base":"BASE","add_comment":"Coment\u00e1rio","title_element":"TITLE","script_element":"SCRIPT","style_element":"STYLE","base_element":"BASE","link_element":"LINK","meta_element":"META","comment_element":"Coment\u00e1rio",src:"src",language:"Idioma",href:"href",target:"Alvo",type:"Tipo",charset:"Charset",defer:"Adiar",media:"Media",properties:"Propriedades",name:"Nome",value:"Valor",content:"Conte\u00fado",rel:"rel",rev:"rev",hreflang:"href lang","general_props":"Geral","advanced_props":"Avan\u00e7ado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ro_dlg.js
new file mode 100644
index 000000000..db0a58bc8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.fullpage_dlg',{title:"Propriet\u0103\u021bi document","meta_tab":"General","appearance_tab":"Aspect","advanced_tab":"Avansat","meta_props":"Meta informa\u021bii",langprops:"Limb\u0103 \u0219i codare","meta_title":"Titlu","meta_keywords":"Cuvinte cheie","meta_description":"Descriere","meta_robots":"Robo\u021bi",doctypes:"Doctype",langcode:"Cod limb\u0103",langdir:"Direc\u021bie limb\u0103",ltr:"De la st\u00e2nga la dreapta",rtl:"De la dreapta la st\u00e2nga","xml_pi":"Declara\u021bie XML",encoding:"Cod caractere","appearance_bgprops":"Propriet\u0103\u021bi fundal","appearance_marginprops":"Margini corp","appearance_linkprops":"Culoare leg\u0103turi","appearance_textprops":"Propriet\u0103\u021bi text",bgcolor:"Culoare de fundal",bgimage:"Imagine de fundal","left_margin":"Margine st\u00e2nga","right_margin":"Margine dreapta","top_margin":"Margine sus","bottom_margin":"Margine jos","text_color":"Culoare text","font_size":"Dimensiune font","font_face":"Tip font","link_color":"Culoare leg\u0103tur\u0103","hover_color":"Culoare leg\u0103tur\u0103 la maus deasupra","visited_color":"Leg\u0103tur\u0103 vizitat\u0103","active_color":"Leg\u0103tur\u0103 activ\u0103",textcolor:"Culoare",fontsize:"Dimensiune font",fontface:"Tip font","meta_index_follow":"Indexeaz\u0103 \u0219i urm\u0103re\u0219te aceste leg\u0103turi","meta_index_nofollow":"Indexeaz\u0103 \u0219i nu urm\u0103ri aceste leg\u0103turi","meta_noindex_follow":"Nu indexa, dar urm\u0103re\u0219te aceste leg\u0103turi","meta_noindex_nofollow":"Nu indexa \u0219i nu urm\u0103ri aceste leg\u0103turi","appearance_style":"Stil",stylesheet:"Foaie de stil",style:"Stil",author:"Autor",copyright:"Copyright",add:"Adaug\u0103 un element",remove:"\u0218terge elementul selectat",moveup:"Mut\u0103 elementul selectat \u00een sus",movedown:"Mut\u0103 elementul selectat \u00een jos","head_elements":"Elemente de antet",info:"Informa\u021bii","add_title":"Titlu","add_meta":"Meta","add_script":"Script","add_style":"Stil","add_link":"Link","add_base":"Base","add_comment":"Comentariu","title_element":"Title","script_element":"Script","style_element":"Stil","base_element":"Base","link_element":"Link","meta_element":"Meta","comment_element":"Comentariu",src:"Src",language:"Limb\u0103",href:"Href",target:"\u021aint\u0103",type:"Tip",charset:"Set de caractere",defer:"Defer",media:"Media",properties:"Propriet\u0103\u021bi",name:"Nume",value:"Valoare",content:"Con\u021binut",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Avansat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ru_dlg.js
new file mode 100644
index 000000000..1ae10de0a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.fullpage_dlg',{title:"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","meta_tab":"\u041e\u0431\u0449\u0435\u0435","appearance_tab":"\u0412\u0438\u0434","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","meta_props":"\u0426\u0435\u043b\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438",langprops:"\u042f\u0437\u044b\u043a \u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f","meta_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","meta_keywords":"\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430","meta_description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","meta_robots":"\u0420\u0430\u0431\u043e\u0442\u044b",doctypes:"\u0422\u0438\u043f",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","xml_pi":"\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 XML",encoding:"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430","appearance_bgprops":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0444\u043e\u043d\u0430","appearance_marginprops":"\u041e\u0442\u0441\u0442\u0443\u043f\u044b","appearance_linkprops":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043e\u043a","appearance_textprops":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0430",bgcolor:"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430",bgimage:"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","left_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043b\u0435\u0432\u0430","right_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043f\u0440\u0430\u0432\u0430","top_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u0432\u0435\u0440\u0445\u0443","bottom_margin":"\u041e\u0442\u0441\u0442\u0443\u043f \u0441\u043d\u0438\u0437\u0443","text_color":"\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430","font_face":"\u0428\u0440\u0438\u0444\u0442","link_color":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438","hover_color":"\u0426\u0432\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438","visited_color":"\u0426\u0432\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438","active_color":"\u0426\u0432\u0435\u0442 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0438",textcolor:"\u0426\u0432\u0435\u0442",fontsize:"\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",fontface:"\u0421\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0448\u0440\u0438\u0444\u0442\u043e\u0432","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don \\ \'t follow the links","appearance_style":"\u041b\u0438\u0441\u0442 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u0438\u043b\u0435\u0439",stylesheet:"\u041b\u0438\u0441\u0442 \u0441\u0442\u0438\u043b\u0435\u0439",style:"\u0421\u0442\u0438\u043b\u044c",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"\u041a\u043e\u043f\u0438\u0440\u0430\u0439\u0442",add:"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0432\u0435\u0440\u0445",movedown:"\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u043d\u0438\u0437","head_elements":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Header",info:"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f","add_title":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Title","add_meta":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Meta","add_script":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Script","add_style":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Style","add_link":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Link","add_base":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Base","add_comment":"\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439","title_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Title","script_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Script","style_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Style","base_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Base","link_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Link","meta_element":"\u042d\u043b\u0435\u043c\u0435\u043d\u0442 Meta","comment_element":"\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439",src:"Src",language:"\u042f\u0437\u044b\u043a",href:"\u0441\u0441\u044b\u043b\u043a\u0430",target:"\u0426\u0435\u043b\u044c",type:"Type",charset:"\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430",defer:"\u041e\u0442\u0441\u0440\u043e\u0447\u043a\u0430",media:"\u041c\u0435\u0434\u0438\u0430",properties:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b",name:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",value:"\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435",content:"\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435",rel:"Rel",rev:"Rev",hreflang:"\u042f\u0437\u044b\u043a \u0441\u0441\u044b\u043b\u043a\u0438","general_props":"\u041e\u0431\u0449\u0435\u0435","advanced_props":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sc_dlg.js
new file mode 100644
index 000000000..17b20d5cc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.fullpage_dlg',{title:"\u6863\u5c5e\u6027","meta_tab":"\u4e00\u822c","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"\u6807\u7b7e( Meta )\u4fe1\u606f",langprops:"\u8bed\u8a00\u4e0e\u7f16\u7801","meta_title":"\u6807\u9898","meta_keywords":"\u5173\u952e\u5b57","meta_description":"\u5185\u5bb9\u8bf4\u660e","meta_robots":"Robots",doctypes:"Doctype",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",ltr:"\u7531\u5de6\u5230\u53f3",rtl:"\u7531\u53f3\u5230\u5de6","xml_pi":"XML\u5ba3\u544a",encoding:"\u5b57\u5143\u7f16\u7801","appearance_bgprops":"\u80cc\u666f\u5c5e\u6027","appearance_marginprops":"Body margins","appearance_linkprops":"\u8fde\u7ed3\u989c\u8272","appearance_textprops":"\u6587\u672c\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u8fb9\u754c","right_margin":"\u53f3\u8fb9\u754c","top_margin":"\u4e0a\u8fb9\u754c","bottom_margin":"\u4e0b\u8fb9\u754c","text_color":"\u6587\u5b57\u989c\u8272","font_size":"\u5b57\u4f53\u5c3a\u5bf8","font_face":"\u5b57\u4f53","link_color":"\u8fde\u7ed3\u989c\u8272","hover_color":"Hover\u989c\u8272","visited_color":"Visited\u989c\u8272","active_color":"Active\u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u5b57\u4f53\u5927\u5c0f",fontface:"\u5b57\u5f62\u4f53\u7cfb","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"\u6837\u5f0f\u8868\u5355\u53ca\u6837\u5f0f\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u8868\u5355",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743",add:"\u6dfb\u52a0\u65b0\u5143\u7d20",remove:"\u79fb\u9664\u9009\u5b9a\u5143\u7d20",moveup:"\u4e0a\u79fb\u9009\u5b9a\u5143\u7d20",movedown:"\u4e0b\u79fb\u9009\u5b9a\u5143\u7d20","head_elements":"Head elements",info:"\u4fe1\u606f","add_title":"\u67e5\u627e\u5143\u7d20","add_meta":"Meta\u5143\u7d20","add_script":"Script\u5143\u7d20","add_style":"Style\u5143\u7d20","add_link":"Link\u5143\u7d20","add_base":"Base\u5143\u7d20","add_comment":"Comment node","title_element":"\u67e5\u627eelement","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"\u8bed\u8a00",href:"Href",target:"\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u5143\u96c6",defer:"\u5ef6\u7f13",media:"\u5a92\u4f53",properties:"\u5c5e\u6027",name:"\u540d\u79f0",value:"\u503c",content:"\u5185\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u4e00\u822c","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/se_dlg.js
new file mode 100644
index 000000000..c9de76c94
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.fullpage_dlg',{title:"Dokumentinst\u00e4llningar","meta_tab":"Generella","appearance_tab":"Utseende","advanced_tab":"Avancerat","meta_props":"Metainformation",langprops:"Spr\u00e5k och kodning","meta_title":"Titel","meta_keywords":"Nyckelord","meta_description":"Bekrivning","meta_robots":"Robots",doctypes:"Doctype",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning",ltr:"V\u00e4nster till h\u00f6ger",rtl:"H\u00f6ger till v\u00e4nster","xml_pi":"XML deklaration",encoding:"Teckenkodning","appearance_bgprops":"Bakgrundsinst\u00e4llningar","appearance_marginprops":"Body marginaler","appearance_linkprops":"L\u00e4nkf\u00e4rger","appearance_textprops":"Textinst\u00e4llningar",bgcolor:"Bakgrundsf\u00e4rg",bgimage:"Bakgrundsbild","left_margin":"V\u00e4nstermarginal","right_margin":"H\u00f6germarginal","top_margin":"Toppmarginal","bottom_margin":"Bottenmarginal","text_color":"Textf\u00e4rg","font_size":"Textstorlek","font_face":"Textstil","link_color":"L\u00e4nkf\u00e4rg","hover_color":"Hover f\u00e4rg","visited_color":"Visited f\u00e4rg","active_color":"Active f\u00e4rg",textcolor:"F\u00e4rg",fontsize:"Textstorlek",fontface:"Textstil","meta_index_follow":"Indexera och f\u00f6lj l\u00e4nkar","meta_index_nofollow":"Indexera men f\u00f6lj ej l\u00e4nkar","meta_noindex_follow":"Indexera inte men f\u00f6lj l\u00e4nkar","meta_noindex_nofollow":"Indexera inte och f\u00f6lj ej l\u00e4nkar","appearance_style":"Stilmall och stilegenskaper",stylesheet:"Stilmall",style:"Stil",author:"F\u00f6rfattare",copyright:"Copyright",add:"L\u00e4gg till element",remove:"Radera det markerade elementet",moveup:"Flytta det markerade elementet upp\u00e5t",movedown:"Flytta det markerade elementet ned\u00e5t","head_elements":"Head element",info:"Information","add_title":"Titel-element","add_meta":"Meta-element","add_script":"Script-element","add_style":"Stil-element","add_link":"L\u00e4nk-element","add_base":"Base-element","add_comment":"Kommentarsnod","title_element":"Titel-element","script_element":"Script-element","style_element":"Style-element","base_element":"Base-element","link_element":"Link-element","meta_element":"Meta-element","comment_element":"Comment-element",src:"Src",language:"Spr\u00e5k",href:"Href",target:"M\u00e5l",type:"Typ",charset:"Teckenupps\u00e4ttning",defer:"Defer",media:"Media",properties:"Egenskaper",name:"Name",value:"Value",content:"Inneh\u00e5ll",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Generellt","advanced_props":"Avancerat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/si_dlg.js
new file mode 100644
index 000000000..3cfc4f1d7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sk_dlg.js
new file mode 100644
index 000000000..4c7a8537a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.fullpage_dlg',{title:"Vlastnosti dokumentu","meta_tab":"Obecn\u00e9","appearance_tab":"Vzh\u013ead","advanced_tab":"Roz\u0161\u00edren\u00e9","meta_props":"Meta inform\u00e1cie",langprops:"Jazyk a k\u00f3dovanie","meta_title":"Titulok","meta_keywords":"K\u013e\u00fa\u010dov\u00e9 slov\u00e1","meta_description":"Popis","meta_robots":"Roboti",doctypes:"Typ dokumentu",langcode:"K\u00f3d jazyka",langdir:"Smer textu",ltr:"Z\u013eava doprava",rtl:"Sprava do\u013eava","xml_pi":"XML deklar\u00e1cia",encoding:"K\u00f3dovanie","appearance_bgprops":"Vlastnosti pozadia","appearance_marginprops":"Okraje tela dokumentu","appearance_linkprops":"Vlastnosti odkazov","appearance_textprops":"Vlastnosti textu",bgcolor:"Farba pozadia",bgimage:"Obr\u00e1zok pozadia","left_margin":"\u013dav\u00fd okraj","right_margin":"Prav\u00fd okraj","top_margin":"Horn\u00fd okraj","bottom_margin":"Doln\u00fd okraj","text_color":"Farba textu","font_size":"Ve\u013ekos\u0165 p\u00edsma","font_face":"Typ p\u00edsma","link_color":"Farba odkazu","hover_color":"Farba vybrat\u00e9ho odkazu","visited_color":"Farba nav\u0161t\u00edven\u00e9ho odkazu","active_color":"Farba akt\u00edvneho odkazu",textcolor:"Farba",fontsize:"Ve\u013ekos\u0165 p\u00edsma",fontface:"Typ p\u00edsma","meta_index_follow":"Indexova\u0165 a n\u00e1sledova\u0165 odkazy","meta_index_nofollow":"Indexova\u0165 a nen\u00e1sledova\u0165 odkazy","meta_noindex_follow":"Neindexova\u0165, ale n\u00e1sledova\u0165 odkazy","meta_noindex_nofollow":"Neindexova\u0165 a nen\u00e1sledova\u0165 odkazy","appearance_style":"Vlastnosti \u0161t\u00fdlov",stylesheet:"\u0160t\u00fdlopis",style:"\u0160t\u00fdl",author:"Autor",copyright:"Autorsk\u00e9 pr\u00e1va",add:"Prida\u0165 nov\u00fd element",remove:"Odstr\u00e1ni\u0165 ozna\u010den\u00fd element",moveup:"Presun\u00fa\u0165 ozna\u010den\u00fd element vy\u0161\u0161ie ",movedown:"Presun\u00fa\u0165 ozna\u010den\u00fd element ni\u017e\u0161ie","head_elements":"Hlavi\u010dky",info:"Inform\u00e1cie","add_title":"Vlo\u017ei\u0165 titulok","add_meta":"Vlo\u017ei\u0165 meta inform\u00e1cie","add_script":"Vlo\u017ei\u0165 skript","add_style":"Vlo\u017ei\u0165 \u0161t\u00fdl","add_link":"Vlo\u017ei\u0165 nezobrazovan\u00fd odkaz","add_base":"Vlo\u017ei\u0165 z\u00e1kladn\u00e9 umiestnenie","add_comment":"Vlo\u017ei\u0165 koment\u00e1r","title_element":"Titulok","script_element":"Skript","style_element":"\u0160t\u00fdl","base_element":"Z\u00e1kladn\u00e9 umiestnenie","link_element":"Nezobrazovan\u00fd odkaz","meta_element":"Meta inform\u00e1cie","comment_element":"Koment\u00e1r",src:"Zdroj",language:"Jazyk",href:"S\u00fabor/URL",target:"Cie\u013e",type:"Typ",charset:"K\u00f3dovanie",defer:"Odlo\u017ei\u0165 (defer)",media:"M\u00e9di\u00e1",properties:"Vlastnosti",name:"N\u00e1zov",value:"Hodnota",content:"Obsah",rel:"Vz\u0165ah str\u00e1nky k cie\u013eu",rev:"Vz\u0165ah cie\u013ea k str\u00e1nke",hreflang:"Jazyk odkazu","general_props":"Obecn\u00e9 parametre","advanced_props":"Roz\u0161\u00edren\u00e9 parametre"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sl_dlg.js
new file mode 100644
index 000000000..bb71c2048
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.fullpage_dlg',{title:"Lastnosti dokumenta","meta_tab":"Splo\u0161no","appearance_tab":"Izgled","advanced_tab":"Napredno","meta_props":"Meta podatki",langprops:"Jezik in kodiranje","meta_title":"Naslov","meta_keywords":"Klju\u010dne besede","meta_description":"Opis","meta_robots":"Roboti",doctypes:"Doctype",langcode:"Koda jezika",langdir:"Smer pisave",ltr:"Od leve proti desni",rtl:"Od desne proti levi","xml_pi":"Najava XML",encoding:"Kodiranje znakov","appearance_bgprops":"Lastnosti ozadja","appearance_marginprops":"Robovi telesa","appearance_linkprops":"Barve povezav","appearance_textprops":"Lastnosti besedila",bgcolor:"Barva ozadja",bgimage:"Slika ozadja","left_margin":"Levi rob","right_margin":"Desni rob","top_margin":"Zgornji rob","bottom_margin":"Spodnji rob","text_color":"Barva pisave","font_size":"Velikost pisave","font_face":"Vrsta pisave","link_color":"Barva povezave","hover_color":"Barva nakazane povezave","visited_color":"Barva obiskane povezave","active_color":"Barva dejavne povezave",textcolor:"Barva",fontsize:"Velikost pisave",fontface:"Dru\u017eina pisave","meta_index_follow":"Indeksiraj in sledi povezavam","meta_index_nofollow":"Indeksiraj a ne sledi povezavam","meta_noindex_follow":"Ne indeksiraj a sledi pvoezavams","meta_noindex_nofollow":"Ne indeksiraj in ne sledi povezavam","appearance_style":"Lastnosti slogov",stylesheet:"Slogi",style:"Slog",author:"Avtor",copyright:"Copyright",add:"Dodaj element",remove:"Odstrani izbrani element",moveup:"Premakni izbrani element navzgor",movedown:"Premakni izbrani element navzdol","head_elements":"Elementi glave",info:"Informacija","add_title":"element Title","add_meta":"element Meta","add_script":"element Script","add_style":"element Style","add_link":"element Link","add_base":"element Base","add_comment":"komentar","title_element":"element Title","script_element":"element Script","style_element":"element Style","base_element":"element Base","link_element":"element Link","meta_element":"element Meta","comment_element":"komentar",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Lastnosti",name:"ime",value:"vrednost",content:"vsebina",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Splo\u0161no","advanced_props":"Napredno"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sq_dlg.js
new file mode 100644
index 000000000..dfa9b43ae
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.fullpage_dlg',{title:"Tiparet e dokumentit","meta_tab":"T\u00eb P\u00ebrgjithshme","appearance_tab":"Pamja","advanced_tab":"T\u00eb Avancuara","meta_props":"Informacioni Meta",langprops:"Gjuha dhe kodimi","meta_title":"Titulli","meta_keywords":"Fjal\u00ebt ky\u00e7e","meta_description":"P\u00ebrshkrimi","meta_robots":"Robot\u00ebt",doctypes:"Doctype",langcode:"Kodi i gjuh\u00ebs",langdir:"Drejtimi i gjuh\u00ebs",ltr:"Majtas-djathtas",rtl:"Djathtas-majtas","xml_pi":"Deklarimi XML",encoding:"Kodimi i karakter\u00ebve","appearance_bgprops":"Tiparet e fush\u00ebs","appearance_marginprops":"Hap\u00ebsirat e trupit","appearance_linkprops":"Ngjyra e lidhjeve","appearance_textprops":"Tiparet e tekstit",bgcolor:"Ngjyra e fush\u00ebs",bgimage:"Foto e fush\u00ebs","left_margin":"Hap\u00ebsira majtas","right_margin":"Hap\u00ebsira djathtas","top_margin":"Hap\u00ebsira n\u00eb krye","bottom_margin":"Hap\u00ebsira n\u00eb fund","text_color":"Ngjyra e tekstit","font_size":"Madh\u00ebsia e g\u00ebrmave","font_face":"Tipi i g\u00ebrm\u00ebs","link_color":"Ngjyra e lidhjes","hover_color":"Ngjyra e hover","visited_color":"Ngjyra e vizituar","active_color":"Ngjyra aktive",textcolor:"Ngjyra",fontsize:"Madh\u00ebsia e g\u00ebrmave",fontface:"Tipi i g\u00ebrm\u00ebs","meta_index_follow":"Indekso dhe ndiq lidhjet","meta_index_nofollow":"Indekso por mos ndiq lidhjet","meta_noindex_follow":"Mos indekso por ndiq lidhjet","meta_noindex_nofollow":"Mos indekso e as mos ndiq lidhjet","appearance_style":"Faqja e stileve dhe tiparete tyre",stylesheet:"Faqja e stileve",style:"Stili",author:"Autori",copyright:"T\u00eb drejtat e kopjes",add:"Shto nj\u00eb element t\u00eb ri",remove:"Fshi elementin e zgjedhur",moveup:"L\u00ebviz elementin sip\u00ebr",movedown:"L\u00ebviz elementin posht\u00eb","head_elements":"Element\u00ebt e kok\u00ebs",info:"Informacion","add_title":"Element titull","add_meta":"Element meta","add_script":"Element script","add_style":"Element stil","add_link":"Element lidhej","add_base":"Element baz\u00eb","add_comment":"Komento","title_element":"Element titull","script_element":"Element script","style_element":"Element stil","base_element":"Element baz\u00eb","link_element":"Element lidhje","meta_element":"Element meta","comment_element":"Komento",src:"Src",language:"Gjuha",href:"Href",target:"Sh\u00ebnjestra",type:"Tipi",charset:"Charset",defer:"Defer",media:"Media",properties:"Tiparet",name:"Emri",value:"Vlera",content:"P\u00ebrmbajtja",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"T\u00eb P\u00ebrgjithshme","advanced_props":"T\u00eb Avancuara"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sr_dlg.js
new file mode 100644
index 000000000..f1fbb0d68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.fullpage_dlg',{title:"Osobine dokumenta","meta_tab":"Osnovno","appearance_tab":"Izgled","advanced_tab":"Napredno","meta_props":"Meta informacije",langprops:"Jezik i kodiranje","meta_title":"Naslov","meta_keywords":"Klju\u010dne re\u010di","meta_description":"Opis","meta_robots":"Robots",doctypes:"Doctype",langcode:"Kod jezika",langdir:"Smer jezika",ltr:"Sleva nadesno",rtl:"Zdesna nalevo","xml_pi":"XML deklaracija",encoding:"Kodiranje znakova","appearance_bgprops":"Osobine pozadine","appearance_marginprops":"Margine sadr\u017eaja","appearance_linkprops":"Boje linka","appearance_textprops":"Osobine teksta",bgcolor:"Boja pozadine",bgimage:"Slika u pozadini","left_margin":"Leva margina","right_margin":"Desna margina","top_margin":"Gornja margina","bottom_margin":"Donja margina","text_color":"Boja teksta","font_size":"Veli\u010dina pisma","font_face":"Pismo (Font face)","link_color":"Boja linka","hover_color":"Boja linka pod mi\u0161em","visited_color":"Boja pose\u0107enog linka","active_color":"Boja aktivnog linka",textcolor:"Boja",fontsize:"Veli\u010dina pisma",fontface:"Pismo","meta_index_follow":"Indeksiraj i sledi linkove","meta_index_nofollow":"Indeksiraj i ne sledi linkove","meta_noindex_follow":"Ne indeksiraj ali sledi linkove","meta_noindex_nofollow":"Ne indeksiraj i ne sledi linkove","appearance_style":"CSS i osobine stila",stylesheet:"CSS",style:"Stil",author:"Autor",copyright:"Autorska prava",add:"Dodaj nov element",remove:"Ukloni odabrani element",moveup:"Pomeri odabrani element nagore",movedown:"Pomakni odabrani element nadole","head_elements":"Elementi zaglavlja",info:"Informacije","add_title":"Element \'title\' (naslov)","add_meta":"Element \'meta\'","add_script":"Element \'script\'","add_style":"Element \'style\'","add_link":"Element \'link\'","add_base":"Element \'base\'","add_comment":"Komentar","title_element":"Element \'title\' (naslov)","script_element":"Element \'script\'","style_element":"Element \'style\'","base_element":"Element \'base\'","link_element":"Element \'link\'","meta_element":"Element \'meta\'","comment_element":"Komentar",src:"Src",language:"Jezik",href:"Href",target:"Meta",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Osobine",name:"Naziv",value:"Vrednost",content:"Sadr\u017eaj",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Osnovno","advanced_props":"Napredno"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sv_dlg.js
new file mode 100644
index 000000000..c141b235a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.fullpage_dlg',{title:"Dokumentinst\u00e4llningar","meta_tab":"Generella","appearance_tab":"Utseende","advanced_tab":"Avancerat","meta_props":"Metainformation",langprops:"Spr\u00e5k och kodning","meta_title":"Titel","meta_keywords":"Nyckelord","meta_description":"Bekrivning","meta_robots":"Robots",doctypes:"Doctype",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning",ltr:"V\u00e4nster till h\u00f6ger",rtl:"H\u00f6ger till v\u00e4nster","xml_pi":"XML deklaration",encoding:"Teckenkodning","appearance_bgprops":"Bakgrundsinst\u00e4llningar","appearance_marginprops":"Body marginaler","appearance_linkprops":"L\u00e4nkf\u00e4rger","appearance_textprops":"Textinst\u00e4llningar",bgcolor:"Bakgrundsf\u00e4rg",bgimage:"Bakgrundsbild","left_margin":"V\u00e4nstermarginal","right_margin":"H\u00f6germarginal","top_margin":"Toppmarginal","bottom_margin":"Bottenmarginal","text_color":"Textf\u00e4rg","font_size":"Textstorlek","font_face":"Textstil","link_color":"L\u00e4nkf\u00e4rg","hover_color":"Hover f\u00e4rg","visited_color":"Visited f\u00e4rg","active_color":"Active f\u00e4rg",textcolor:"F\u00e4rg",fontsize:"Textstorlek",fontface:"Textstil","meta_index_follow":"Indexera och f\u00f6lj l\u00e4nkar","meta_index_nofollow":"Indexera men f\u00f6lj ej l\u00e4nkar","meta_noindex_follow":"Indexera inte men f\u00f6lj l\u00e4nkar","meta_noindex_nofollow":"Indexera inte och f\u00f6lj ej l\u00e4nkar","appearance_style":"Stilmall och stilegenskaper",stylesheet:"Stilmall",style:"Stil",author:"F\u00f6rfattare",copyright:"Copyright",add:"L\u00e4gg till element",remove:"Radera det markerade elementet",moveup:"Flytta det markerade elementet upp\u00e5t",movedown:"Flytta det markerade elementet ned\u00e5t","head_elements":"Head element",info:"Information","add_title":"Titel-element","add_meta":"Meta-element","add_script":"Script-element","add_style":"Stil-element","add_link":"L\u00e4nk-element","add_base":"Base-element","add_comment":"Kommentarsnod","title_element":"Titel-element","script_element":"Script-element","style_element":"Style-element","base_element":"Base-element","link_element":"Link-element","meta_element":"Meta-element","comment_element":"Comment-element",src:"Src",language:"Spr\u00e5k",href:"Href",target:"M\u00e5l",type:"Typ",charset:"Teckenupps\u00e4ttning",defer:"Defer",media:"Media",properties:"Egenskaper",name:"Name",value:"Value",content:"Inneh\u00e5ll",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Generellt","advanced_props":"Avancerat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sy_dlg.js
new file mode 100644
index 000000000..39cc13a32
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.fullpage_dlg',{title:"Document Properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta Information",langprops:"Language and Encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language Code",langdir:"Language Direction",ltr:"Left to Right",rtl:"Right to Left","xml_pi":"XML Declaration",encoding:"Character Encoding","appearance_bgprops":"Background Properties","appearance_marginprops":"Body Margins","appearance_linkprops":"Link Colors","appearance_textprops":"Text Properties",bgcolor:"Background Color",bgimage:"Background Image","left_margin":"Left Margin","right_margin":"Right Margin","top_margin":"Top Margin","bottom_margin":"Bottom Margin","text_color":"Text Color","font_size":"Font Size","font_face":"Font Face","link_color":"Link Color","hover_color":"Hover Color","visited_color":"Visited Color","active_color":"Active Color",textcolor:"Color",fontsize:"Font Size",fontface:"Font Family","meta_index_follow":"Index and Follow the Links","meta_index_nofollow":"Index and Don\'t Follow the Links","meta_noindex_follow":"Do Not Index but Follow the Links","meta_noindex_nofollow":"Do Not Index and Don\'t Follow the Links","appearance_style":"Stylesheet and Style Properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add New Element",remove:"Remove Selected Element",moveup:"Move Selected Element Up",movedown:"Move Selected Element Down","head_elements":"Head Elements",info:"Information","add_title":"Title Element","add_meta":"Meta Element","add_script":"Script Element","add_style":"Style Element","add_link":"Link Element","add_base":"Base Element","add_comment":"Comment Node","title_element":"Title Element","script_element":"Script Element","style_element":"Style Element","base_element":"Base Element","link_element":"Link Element","meta_element":"Meta Element","comment_element":"Comment",src:"Source",language:"Language",href:"HREF",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"HREF Lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ta_dlg.js
new file mode 100644
index 000000000..6a38095b2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/te_dlg.js
new file mode 100644
index 000000000..0072c8d1d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/th_dlg.js
new file mode 100644
index 000000000..2200f9a4e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.fullpage_dlg',{title:"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23","meta_tab":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","appearance_tab":"\u0e23\u0e39\u0e1b\u0e25\u0e31\u0e01\u0e29\u0e13\u0e4c","advanced_tab":"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","meta_props":"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e40\u0e21\u0e15\u0e49\u0e32",langprops:"\u0e20\u0e32\u0e29\u0e32 \u0e41\u0e25\u0e30 \u0e01\u0e32\u0e23\u0e40\u0e02\u0e49\u0e32\u0e23\u0e2b\u0e31\u0e2a","meta_title":"\u0e0a\u0e37\u0e48\u0e2d","meta_keywords":"\u0e04\u0e33\u0e2a\u0e33\u0e04\u0e31\u0e0d","meta_description":"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14","meta_robots":"Robots",doctypes:"Doctype",langcode:"\u0e42\u0e04\u0e4a\u0e14\u0e20\u0e32\u0e29\u0e32",langdir:"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e2d\u0e48\u0e32\u0e19",ltr:"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32",rtl:"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07","appearance_marginprops":"Body margins","appearance_linkprops":"\u0e2a\u0e35\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","appearance_textprops":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21",bgcolor:"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07 color",bgimage:"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07 image","left_margin":"\u0e02\u0e2d\u0e1a\u0e0b\u0e49\u0e32\u0e22","right_margin":"\u0e02\u0e2d\u0e1a\u0e02\u0e27\u0e32","top_margin":"\u0e02\u0e2d\u0e1a\u0e1a\u0e21","bottom_margin":"\u0e02\u0e2d\u0e1a\u0e25\u0e48\u0e32\u0e07","text_color":"\u0e2a\u0e35\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","font_size":"\u0e02\u0e19\u0e32\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","font_face":"\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","link_color":"\u0e2a\u0e35\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"\u0e2a\u0e35",fontsize:"\u0e02\u0e19\u0e32\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23",fontface:"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e2d\u0e01\u0e29\u0e23","meta_index_follow":"Index and follow the \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4cs","meta_index_nofollow":"Index and don\'t follow the \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4cs","meta_noindex_follow":"Do not index but follow the \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4cs","meta_noindex_nofollow":"Do not index and don\\\'t follow the \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4cs","appearance_style":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1asheet and style properties",stylesheet:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1asheet",style:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"\u0e0a\u0e37\u0e48\u0e2d element","add_meta":"Meta element","add_script":"Script element","add_style":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"\u0e0a\u0e37\u0e48\u0e2d element","script_element":"Script element","style_element":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"\u0e20\u0e32\u0e29\u0e32",href:"Href",target:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","advanced_props":"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tn_dlg.js
new file mode 100644
index 000000000..5fdbd6cde
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tr_dlg.js
new file mode 100644
index 000000000..8f2a44b68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.fullpage_dlg',{title:"Belge \u00f6zellikleri","meta_tab":"Genel","appearance_tab":"G\u00f6r\u00fcn\u00fcm","advanced_tab":"Geli\u015fmi\u015f","meta_props":"Meta bilgisi",langprops:"Dil ve kodlama","meta_title":"Ba\u015fl\u0131k","meta_keywords":"Anahtar kelimeler","meta_description":"A\u00e7\u0131klama","meta_robots":"Robotlar",doctypes:"Belge tipi",langcode:"Dil kodu",langdir:"Dil y\u00f6n\u00fc",ltr:"Sa\u011fdan sola",rtl:"Soldan sa\u011fa","xml_pi":"XML tan\u0131m\u0131",encoding:"Karakter kodlamas\u0131","appearance_bgprops":"Arkaplan \u00f6zellikleri","appearance_marginprops":"G\u00f6vde bo\u015fluklar\u0131","appearance_linkprops":"Ba\u011flant\u0131 renkleri","appearance_textprops":"Metin \u00f6zellikleri",bgcolor:"Arkaplan rengi",bgimage:"Arkaplan resmi","left_margin":"Sol bo\u015fluk","right_margin":"Sa\u011f bo\u015fluk","top_margin":"\u00dcst bo\u015fluk","bottom_margin":"Alt bo\u015fluk","text_color":"Metin rengi","font_size":"Yaz\u0131 boyutu","font_face":"Yaz\u0131 tipi","link_color":"Ba\u011flant\u0131 rengi","hover_color":"Fare \u00fcst\u00fcnde rengi","visited_color":"Ziyaret edilmi\u015f ba\u011flant\u0131 rengi","active_color":"Ge\u00e7erli renk",textcolor:"Renk",fontsize:"Yaz\u0131 boyutu",fontface:"Yaz\u0131 tipi","meta_index_follow":"\u0130ndeksle ve ba\u011flant\u0131lar\u0131 izle.","meta_index_nofollow":"\u0130ndeksle ve ba\u011flant\u0131lar\u0131 izleme.","meta_noindex_follow":"\u0130ndeksleme ama ba\u011flant\u0131lar\u0131 izle.","meta_noindex_nofollow":"\u0130ndeksleme ve ba\u011flant\u0131lar\u0131 izleme.","appearance_style":"Stil ve stil sayfas\u0131 \u00f6zellikleri",stylesheet:"Stil sayfas\u0131",style:"Stil",author:"Yazar",copyright:"Telik hakk\u0131",add:"Yeni nesne ekle",remove:"Se\u00e7ili nesneyi kald\u0131r",moveup:"Se\u00e7ili nesneyi yukar\u0131 ta\u015f\u0131",movedown:"Se\u00e7ili nesneyi a\u015fa\u011f\u0131 ta\u015f\u0131","head_elements":"Ba\u015fl\u0131k nesneleri",info:"Bilgi","add_title":"Ba\u015fl\u0131k nesnesi","add_meta":"Meta nesnesi","add_script":"Script nesnesi","add_style":"Stil nesnesi","add_link":"Ba\u011flant\u0131 nesnesi","add_base":"Temel nesne","add_comment":"Yorum d\u00fc\u011f\u00fcm\u00fc","title_element":"Ba\u015fl\u0131k nesnesi","script_element":"Script nesnesi","style_element":"Stil nesnesi","base_element":"Temel nesne","link_element":"Ba\u011flant\u0131 nesnesi","meta_element":"Meta nesnesi","comment_element":"Yorum",src:"Src",language:"Dil",href:"Href",target:"Hedef",type:"Tip",charset:"Karakter seti",defer:"Erteleme",media:"Medya",properties:"\u00d6zellikler",name:"\u0130sim",value:"De\u011fer",content:"\u0130\u00e7erik",rel:"Rel",rev:"Rev",hreflang:"Href dili","general_props":"Genel","advanced_props":"Geli\u015fmi\u015f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tt_dlg.js
new file mode 100644
index 000000000..bbbcb017b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.fullpage_dlg',{title:"\u6a94\u6848\u5c6c\u6027","meta_tab":"\u57fa\u672c","appearance_tab":"\u5916\u89c0","advanced_tab":"\u9032\u968e","meta_props":"\u4e2d\u7e7c\u8cc7\u6599\u5377\u6a19\u5c6c\u6027",langprops:"\u8a9e\u8a00","meta_title":"\u6a19\u984c","meta_keywords":"\u95dc\u9375\u5b57","meta_description":"\u5167\u5bb9\u8aaa\u660e","meta_robots":"\u6a5f\u5668\u4eba",doctypes:"DocType",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411",ltr:"\u5f9e\u5de6\u5230\u53f3",rtl:"\u5f9e\u53f3\u5230\u5de6","xml_pi":"XML \u8072\u660e",encoding:"\u5b57\u5143\u7de8\u78bc","appearance_bgprops":"\u80cc\u666f\u5c6c\u6027","appearance_marginprops":"\u908a\u8ddd","appearance_linkprops":"\u9023\u7d50\u9854\u8272","appearance_textprops":"\u6587\u5b57\u5c6c\u6027",bgcolor:"\u80cc\u666f\u9854\u8272",bgimage:"\u80cc\u666f\u5716\u7247","left_margin":"\u5de6\u908a\u8ddd","right_margin":"\u53f3\u908a\u8ddd","top_margin":"\u4e0a\u908a\u8ddd","bottom_margin":"\u4e0b\u908a\u8ddd","text_color":"\u6587\u5b57\u9854\u8272","font_size":"\u6587\u5b57\u5927\u5c0f","font_face":"\u5b57\u9ad4","link_color":"\u9023\u7d50\u9854\u8272","hover_color":"Hover \u9854\u8272","visited_color":"Visited \u9854\u8272","active_color":"Active \u9854\u8272",textcolor:"\u9854\u8272",fontsize:"\u6587\u5b57\u5927\u5c0f",fontface:"\u5b57\u9ad4","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"\u6a23\u5f0f\u8868\u5c6c\u6027",stylesheet:"\u6a23\u5f0f\u8868",style:"\u6a23\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6b0a",add:"\u65b0\u589e\u6587\u4ef6\u65b0\u7269\u4ef6",remove:"\u522a\u9664\u9078\u64c7\u7684\u7269\u4ef6",moveup:"\u5411\u4e0a\u79fb\u52d5\u9078\u64c7\u7684\u7269\u4ef6",movedown:"\u5411\u4e0b\u79fb\u52d5\u9078\u64c7\u7684\u7269\u4ef6","head_elements":"\u524d\u982d\u7269\u4ef6",info:"\u8cc7\u8a0a","add_title":"\u641c\u5c0b\u7269\u4ef6","add_meta":"\u5143\u7269\u4ef6","add_script":"\u8173\u672c\u7269\u4ef6","add_style":"\u6a23\u5f0f\u7269\u4ef6","add_link":"\u9023\u7d50\u5316\u7269\u4ef6","add_base":"Base\u7269\u4ef6","add_comment":"\u6ce8\u91cb\u7269\u4ef6","title_element":"\u641c\u5c0b\u7269\u4ef6","script_element":"\u8173\u672c\u7269\u4ef6","style_element":"\u6a23\u5f0f\u7269\u4ef6","base_element":"Base\u7269\u4ef6","link_element":"\u9023\u7d50\u5316\u7269\u4ef6","meta_element":"\u5143\u7269\u4ef6","comment_element":"\u6ce8\u91cb\u7269\u4ef6",src:"Src",language:"\u8a9e\u8a00",href:"Href",target:"\u76ee\u6a19",type:"\u985e\u578b",charset:"\u5b57\u5143\u96c6",defer:"Defer",media:"\u5a92\u9ad4",properties:"\u5c6c\u6027",name:"\u540d",value:"\u503c",content:"\u5167\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u57fa\u672c","advanced_props":"\u9032\u968e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tw_dlg.js
new file mode 100644
index 000000000..25aa134b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.fullpage_dlg',{title:"\u6a94\u6848\u5c6c\u6027","meta_tab":"\u6a19\u6e96","appearance_tab":"\u5916\u89c0","advanced_tab":"\u9032\u968e","meta_props":"Mata\u8a0a\u606f",langprops:"\u8a9e\u8a00\u548c\u7de8\u78bc","meta_title":"\u6a19\u984c","meta_keywords":"\u95dc\u9375\u5b57","meta_description":"\u8aaa\u660e","meta_robots":"Robots",doctypes:"DocType",langcode:"\u6587\u5b57\u7de8\u78bc",langdir:"\u6587\u5b57\u66f8\u5beb\u65b9\u5411",ltr:"\u5f9e\u5de6\u5230\u53f3",rtl:"\u5f9e\u53f3\u5230\u5de6","xml_pi":"XML\u8072\u660e",encoding:"\u5b57\u5143\u7de8\u78bc","appearance_bgprops":"\u80cc\u666f\u984f\u8272","appearance_marginprops":"\u908a\u8ddd","appearance_linkprops":"\u8d85\u9023\u7d50\u984f\u8272","appearance_textprops":"\u6587\u5b57\u5c6c\u6027",bgcolor:"\u80cc\u666f\u984f\u8272",bgimage:"\u80cc\u666f\u5716\u7247","left_margin":"\u5de6\u908a\u8ddd","right_margin":"\u53f3\u908a\u8ddd","top_margin":"\u4e0a\u908a\u8ddd","bottom_margin":"\u4e0b\u908a\u8ddd","text_color":"\u6587\u5b57\u984f\u8272","font_size":"\u6587\u5b57\u5927\u5c0f","font_face":"\u5b57\u9ad4","link_color":"\u8d85\u9023\u7d50\u984f\u8272","hover_color":"Hover \u984f\u8272","visited_color":"Visited \u984f\u8272","active_color":"Active \u984f\u8272",textcolor:"\u984f\u8272",fontsize:"\u6587\u5b57\u5927\u5c0f",fontface:"\u5b57\u9ad4","meta_index_follow":"\u7d22\u5f15\u4e26\u9023\u7d50","meta_index_nofollow":"\u7d22\u5f15\u4f46\u4e0d\u9023\u7d50","meta_noindex_follow":"\u4e0d\u7d22\u5f15\u4f46\u9023\u7d50","meta_noindex_nofollow":"\u4e0d\u7d22\u5f15\u4e5f\u4e0d\u9023\u7d50","appearance_style":"\u6a23\u5f0f\u5217\u8868\u8207\u6a23\u5f0f\u5c6c\u6027",stylesheet:"\u6a23\u5f0f\u5217\u8868",style:"\u6a23\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6b0a\u8072\u660e",add:"\u65b0\u589e\u5143\u7d20",remove:"\u522a\u9664\u9078\u64c7\u5143\u7d20",moveup:"\u4e0a\u79fb\u9078\u64c7\u5143\u7d20",movedown:"\u4e0b\u79fb\u9078\u64c7\u5143\u7d20","head_elements":"Head \u5143\u7d20",info:"\u8cc7\u8a0a","add_title":"Title \u5143\u7d20","add_meta":"Meta \u5143\u7d20","add_script":"Script \u5143\u7d20","add_style":"Style \u5143\u7d20","add_link":"Link \u5143\u7d20","add_base":"Base \u5143\u7d20","add_comment":"\u8a3b\u91cb","title_element":"Title \u5143\u7d20","script_element":"Script \u5143\u7d20","style_element":"Style \u5143\u7d20","base_element":"Base \u5143\u7d20","link_element":"Link \u5143\u7d20","meta_element":"Meta \u5143\u7d20","comment_element":"\u8a3b\u91cb",src:"src",language:"\u8a9e\u8a00",href:"href",target:"\u76ee\u6a19",type:"\u985e\u578b",charset:"\u5b57\u5143\u96c6",defer:"Defer",media:"\u5f71\u7247",properties:"\u5c6c\u6027",name:"\u540d\u7a31",value:"\u503c",content:"\u5167\u5bb9",rel:"rel",rev:"rev",hreflang:"href lang","general_props":"\u4e00\u822c","advanced_props":"\u9032\u968e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/uk_dlg.js
new file mode 100644
index 000000000..f1e6a7f0b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.fullpage_dlg',{title:"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430","meta_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","appearance_tab":"\u0412\u0438\u0433\u043b\u044f\u0434","advanced_tab":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","meta_props":"\u041c\u0435\u0442\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f",langprops:"\u041c\u043e\u0432\u0430 \u0442\u0430 \u043a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f","meta_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","meta_keywords":"\u041a\u043b\u044e\u0447\u043e\u0432\u0456 \u0441\u043b\u043e\u0432\u0430","meta_description":"\u041e\u043f\u0438\u0441","meta_robots":"\u0420\u043e\u0431\u043e\u0442\u0438",doctypes:"Doctype",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c \u043c\u043e\u0432\u0438",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043b\u0456\u0432\u043e\u0440\u0443\u0447","xml_pi":"\u041e\u0431\'\u044f\u0432\u043b\u0435\u043d\u043d\u044f XML",encoding:"\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432","appearance_bgprops":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0444\u043e\u043d\u0443","appearance_marginprops":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438","appearance_linkprops":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c","appearance_textprops":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0442\u0435\u043a\u0441\u0442\u0443",bgcolor:"\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443",bgimage:"\u0424\u043e\u043d\u043e\u0432\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","left_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0437\u043b\u0456\u0432\u0430","right_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0441\u043f\u0440\u0430\u0432\u0430","top_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0437\u0432\u0435\u0440\u0445\u0443","bottom_margin":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f \u0437\u043d\u0438\u0437\u0443","text_color":"\u041a\u043e\u043b\u0456\u0440 \u0442\u0435\u043a\u0441\u0442\u0443","font_size":"\u0420\u043e\u0437\u043c\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0430","font_face":"\u0428\u0440\u0438\u0444\u0442","link_color":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","hover_color":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043f\u0440\u0438 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u043d\u0456","visited_color":"\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u043f\u0440\u0438 \u043d\u0430\u0442\u0438\u0441\u043d\u0435\u043d\u043d\u0456","active_color":"\u041a\u043e\u043b\u0456\u0440 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",textcolor:"\u041a\u043e\u043b\u0456\u0440",fontsize:"\u0420\u043e\u0437\u043c\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0430",fontface:"\u0421\u0456\u043c\u0435\u0439\u0441\u0442\u0432\u043e \u0448\u0440\u0438\u0444\u0442\u0430","meta_index_follow":"\u0406\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438 \u0456 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","meta_index_nofollow":"\u0406\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438 \u0456 \u043d\u0435 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","meta_noindex_follow":"\u041d\u0435 \u0456\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438, \u0430\u043b\u0435 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","meta_noindex_nofollow":"\u041d\u0435 \u0456\u043d\u0434\u0435\u043a\u0441\u0443\u0432\u0430\u0442\u0438 \u0456 \u043d\u0435 \u0439\u0442\u0438 \u0437\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f\u043c\u0438","appearance_style":"\u0422\u0430\u0431\u043b\u0438\u0446\u044f \u0441\u0442\u0438\u043b\u044e \u0442\u0430 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0441\u0442\u0438\u043b\u044e",stylesheet:"\u0422\u0430\u0431\u043b\u0438\u0446\u044f \u0441\u0442\u0438\u043b\u044e",style:"\u0421\u0442\u0438\u043b\u044c",author:"\u0410\u0432\u0442\u043e\u0440",copyright:"\u0410\u0432\u0442\u043e\u0440\u0441\u044c\u043a\u0435 \u043f\u0440\u0430\u0432\u043e",add:"\u0414\u043e\u0434\u0430\u0442\u0438 \u043d\u043e\u0432\u0438\u0439 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",remove:"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0432\u0438\u0434\u0456\u043b\u0435\u043d\u0438\u0439 \u0435\u043b\u0435\u043c\u0435\u043d\u0442",moveup:"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0433\u043e\u0440\u0443",movedown:"\u041f\u0435\u0440\u0435\u043c\u0456\u0441\u0442\u0438\u0442\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u043d\u0438\u0437","head_elements":"Head \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438",info:"\u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f","add_title":"Title \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_meta":"Meta \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_script":"Script \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_style":"Style \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_link":"Link \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_base":"Base \u0435\u043b\u0435\u043c\u0435\u043d\u0442","add_comment":"\u0412\u0443\u0437\u043e\u043b \u043a\u043e\u043c\u0435\u043d\u0442\u0430\u0440\u044f","title_element":"Title \u0435\u043b\u0435\u043c\u0435\u043d\u0442","script_element":"Script \u0435\u043b\u0435\u043c\u0435\u043d\u0442","style_element":"Style \u0435\u043b\u0435\u043c\u0435\u043d\u0442","base_element":"Base \u0435\u043b\u0435\u043c\u0435\u043d\u0442","link_element":"Link \u0435\u043b\u0435\u043c\u0435\u043d\u0442","meta_element":"Meta \u0435\u043b\u0435\u043c\u0435\u043d\u0442","comment_element":"\u041a\u043e\u043c\u0435\u043d\u0442\u0430\u0440",src:"\u0414\u0436\u0435\u0440\u0435\u043b\u043e",language:"\u041c\u043e\u0432\u0430",href:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",target:"\u0426\u0456\u043b\u044c",type:"\u0422\u0438\u043f",charset:"\u041a\u043e\u0434\u0443\u0432\u0430\u043d\u043d\u044f",defer:"Defer",media:"\u041c\u0435\u0434\u0456\u0430",properties:"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456",name:"\u041d\u0430\u0437\u0432\u0430",value:"\u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f",content:"\u0417\u043c\u0456\u0441\u0442",rel:"\u0417\u0432\'\u044f\u0437\u043e\u043a",rev:"Rev",hreflang:"\u041c\u043e\u0432\u0430 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","general_props":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","advanced_props":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ur_dlg.js
new file mode 100644
index 000000000..2ed25fcfc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.fullpage_dlg',{title:"Document properties","meta_tab":"General","appearance_tab":"Appearance","advanced_tab":"Advanced","meta_props":"Meta information",langprops:"Language and encoding","meta_title":"Title","meta_keywords":"Keywords","meta_description":"Description","meta_robots":"Robots",doctypes:"Doctype",langcode:"Language code",langdir:"Language direction",ltr:"Left to right",rtl:"Right to left","xml_pi":"XML declaration",encoding:"Character encoding","appearance_bgprops":"Background properties","appearance_marginprops":"Body margins","appearance_linkprops":"Link colors","appearance_textprops":"Text properties",bgcolor:"Background color",bgimage:"Background image","left_margin":"Left margin","right_margin":"Right margin","top_margin":"Top margin","bottom_margin":"Bottom margin","text_color":"Text color","font_size":"Font size","font_face":"Font face","link_color":"Link color","hover_color":"Hover color","visited_color":"Visited color","active_color":"Active color",textcolor:"Color",fontsize:"Font size",fontface:"Font family","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"Stylesheet and style properties",stylesheet:"Stylesheet",style:"Style",author:"Author",copyright:"Copyright",add:"Add new element",remove:"Remove selected element",moveup:"Move selected element up",movedown:"Move selected element down","head_elements":"Head elements",info:"Information","add_title":"Title element","add_meta":"Meta element","add_script":"Script element","add_style":"Style element","add_link":"Link element","add_base":"Base element","add_comment":"Comment node","title_element":"Title element","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"Language",href:"Href",target:"Target",type:"Type",charset:"Charset",defer:"Defer",media:"Media",properties:"Properties",name:"Name",value:"Value",content:"Content",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"General","advanced_props":"Advanced"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/vi_dlg.js
new file mode 100644
index 000000000..3222b6739
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.fullpage_dlg',{title:"Thu\u1ed9c t\u00ednh v\u0103n b\u1ea3n","meta_tab":"Chung","appearance_tab":"Xu\u1ea5t hi\u1ec7n","advanced_tab":"N\u00e2ng cao","meta_props":"Th\u00f4ng tin Meta",langprops:"Ng\u00f4n ng\u1eef v\u00e0 m\u00e3 h\u00f3a","meta_title":"Ti\u00eau \u0111\u1ec1","meta_keywords":"T\u1eeb kh\u00f3a","meta_description":"M\u00f4 t\u1ea3","meta_robots":"Robots",doctypes:"Ki\u1ec3u t\u00e0i li\u1ec7u",langcode:"M\u00e3 ng\u00f4n ng\u1eef",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef",ltr:"Tr\u00e1i qua ph\u1ea3i",rtl:"Ph\u1ea3i qua tr\u00e1i","xml_pi":"Khai b\u00e1o XML",encoding:"M\u00e3 h\u00f3a k\u00fd t\u1ef1","appearance_bgprops":"Thu\u1ed9c t\u00ednh n\u1ec1n","appearance_marginprops":"Bi\u00ean c\u1ee7a th\u00e2n t\u00e0i li\u1ec7u","appearance_linkprops":"M\u00e0u li\u00ean k\u1ebft","appearance_textprops":"Thu\u00f4c t\u00ednh v\u0103n b\u1ea3n",bgcolor:"M\u00e0u n\u1ec1n",bgimage:"\u1ea2nh n\u1ec1n","left_margin":"Bi\u00ean tr\u00e1i","right_margin":"Bi\u00ean ph\u1ea3i","top_margin":"Bi\u00ean tr\u00ean","bottom_margin":"Bi\u00ean d\u01b0\u1edbi","text_color":"M\u00e0u v\u0103n b\u1ea3n","font_size":"K\u00edch c\u1ee1 ph\u00f4ng","font_face":"Ph\u00f4ng ch\u1eef","link_color":"M\u00e0u li\u00ean k\u1ebft","hover_color":"M\u00e0u khi tr\u1ecf chu\u1ed9t","visited_color":"M\u00e0u \u0111\u00e3 gh\u00e9 th\u0103m","active_color":"M\u00e0u ho\u1ea1t \u0111\u1ed9ng",textcolor:"M\u00e0u",fontsize:"K\u00edch c\u1ee1 ph\u00f4ng",fontface:"T\u1eadp h\u1ee3p ph\u00f4ng","meta_index_follow":"Ch\u1ec9 s\u1ed1 v\u00e0 theo li\u00ean k\u1ebft","meta_index_nofollow":"Ch\u1ec9 s\u1ed1 v\u00e0 kh\u00f4ng theo li\u00ean k\u1ebft","meta_noindex_follow":"Kh\u00f4ng ch\u1ec9 s\u1ed1 nh\u01b0ng theo li\u00ean k\u1ebft","meta_noindex_nofollow":"Kh\u00f4ng ch\u1ec9 s\u1ed1 v\u00e0 kh\u00f4ng theo li\u00ean k\u1ebft","appearance_style":"Thu\u1ed9c t\u00ednh ki\u1ec3u d\u00e1ng v\u00e0 stylesheet",stylesheet:"Stylesheet",style:"Ki\u1ec3u d\u00e1ng",author:"T\u00e1c gi\u1ea3",copyright:"B\u1ea3n quy\u1ec1n",add:"Th\u00eam ph\u1ea7n t\u1eed m\u1edbi",remove:"Lo\u1ea1i b\u1ecf ph\u1ea7n t\u1eed \u0111\u00e3 ch\u1ecdn",moveup:"Di chuy\u1ec3n ph\u1ea7n t\u1eed \u0111\u00e3 ch\u1ecdn \u0111i l\u00ean",movedown:"Di chuy\u1ec3n ph\u1ea7n t\u1eed \u0111\u00e3 ch\u1ecdn \u0111i xu\u1ed1ng","head_elements":"Ph\u1ea7n t\u1eed \u0111\u1ea7u \u0111\u1ec1",info:"Th\u00f4ng tin","add_title":"Ph\u1ea7n t\u1eed ti\u00eau \u0111\u1ec1","add_meta":"Ph\u1ea7n t\u1eed meta","add_script":"Ph\u1ea7n t\u1eed script","add_style":"Ph\u1ea7n t\u1eed ki\u1ec3u d\u00e1ng","add_link":"Ph\u1ea7n t\u1eed li\u00ean k\u1ebft","add_base":"Ph\u1ea7n t\u1eed c\u01a1 s\u1edf","add_comment":"Comment node","title_element":"Ph\u1ea7n t\u1eed ti\u00eau \u0111\u1ec1","script_element":"Ph\u1ea7n t\u1eed script","style_element":"Ph\u1ea7n t\u1eed ki\u1ec3u d\u00e1ng","base_element":"Ph\u1ea7n t\u1eed c\u01a1 s\u1edf","link_element":"Ph\u1ea7n t\u1eed li\u00ean k\u1ebft","meta_element":"Ph\u1ea7n t\u1eed meta","comment_element":"Ch\u00fa th\u00edch",src:"Src",language:"Ng\u00f4n ng\u1eef",href:"Href",target:"\u0110\u00edch",type:"Ki\u1ec3u",charset:"T\u1eadp k\u00fd t\u1ef1",defer:"Tr\u00ec ho\u00e3n",media:"Ph\u01b0\u01a1ng ti\u1ec7n",properties:"Thu\u1ed9c t\u00ednh",name:"T\u00ean",value:"Gi\u00e1 tr\u1ecb",content:"N\u1ed9i dung",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"Chung","advanced_props":"N\u00e2ng cao"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..de0a74ac5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.fullpage_dlg',{title:"\u6587\u4ef6\u5c5e\u6027","meta_tab":"\u666e\u901a","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"Meta\u4fe1\u606f",langprops:"\u8bed\u8a00\u548c\u7f16\u7801","meta_title":"\u6807\u9898","meta_keywords":"Meta \u5173\u952e\u5b57","meta_description":"Meta \u63cf\u8ff0","meta_robots":"\u641c\u7d22\u673a\u5668\u4eba",doctypes:"\u6587\u6863\u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u6587\u5b57\u65b9\u5411",ltr:"\u4ece\u5de6\u5230\u53f3",rtl:"\u4ece\u53f3\u5230\u5de6","xml_pi":"XML\u7533\u660e",encoding:"\u5b57\u7b26\u7f16\u7801","appearance_bgprops":"\u80cc\u666f\u5c5e\u6027","appearance_marginprops":"\u9875\u8fb9\u8ddd","appearance_linkprops":"\u8d85\u94fe\u63a5\u989c\u8272","appearance_textprops":"\u6587\u672c\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u8fb9\u8ddd","right_margin":"\u53f3\u8fb9\u8ddd","top_margin":"\u4e0a\u8fb9\u8ddd","bottom_margin":"\u4e0b\u8fb9\u8ddd","text_color":"\u6587\u672c\u989c\u8272","font_size":"\u5b57\u4f53\u5927\u5c0f","font_face":"\u5b57\u4f53","link_color":"\u8d85\u94fe\u63a5\u989c\u8272","hover_color":"Hover\u989c\u8272","visited_color":"Visited\u989c\u8272","active_color":"Active\u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u5b57\u4f53\u5927\u5c0f",fontface:"\u5b57\u4f53","meta_index_follow":"\u7d22\u5f15\u5e76\u8fde\u7ed3","meta_index_nofollow":"\u7d22\u5f15\u4f46\u4e0d\u8fde\u7ed3","meta_noindex_follow":"\u4e0d\u7d22\u5f15\u4f46\u8fde\u7ed3","meta_noindex_nofollow":"\u4e0d\u7d22\u5f15\u4e5f\u4e0d\u8fde\u7ed3","appearance_style":"\u6837\u5f0f\u8868\u4e0e\u6837\u5f0f\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u8868",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743\u58f0\u660e",add:"\u6dfb\u52a0\u5143\u7d20",remove:"\u5220\u9664\u9009\u62e9\u5143\u7d20",moveup:"\u4e0a\u79fb\u9009\u62e9\u5143\u7d20",movedown:"\u4e0b\u79fb\u9009\u62e9\u5143\u7d20","head_elements":"Head\u5143\u7d20",info:"\u4fe1\u606f","add_title":"Title\u5143\u7d20","add_meta":"Meta\u5143\u7d20","add_script":"Script\u5143\u7d20","add_style":"Style\u5143\u7d20","add_link":"Link\u5143\u7d20","add_base":"Base\u5143\u7d20","add_comment":"\u6ce8\u91ca","title_element":"Title\u5143\u7d20","script_element":"Script\u5143\u7d20","style_element":"Style\u5143\u7d20","base_element":"Base\u5143\u7d20","link_element":"Link\u5143\u7d20","meta_element":"Meta\u5143\u7d20","comment_element":"\u6ce8\u91ca",src:"\u5730\u5740",language:"\u8bed\u8a00",href:"Href",target:"\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u7b26\u96c6",defer:"Defer",media:"\u5a92\u4f53",properties:"\u5c5e\u6027",name:"\u540d\u79f0",value:"\u503c",content:"\u5185\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href\u8bed\u8a00","general_props":"\u5e38\u89c4","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..5a9b05433
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.fullpage_dlg',{title:"\u9801\u9762\u8a2d\u5b9a","meta_tab":"\u4e00\u822c","appearance_tab":"\u5916\u89c0","advanced_tab":"\u66f4\u591a\u8a2d\u5b9a","meta_props":"Meta \u8cc7\u8a0a",langprops:"\u8a9e\u8a00\u8207\u7de8\u78bc\u8a2d\u5b9a","meta_title":"\u6a19\u984c","meta_keywords":"\u95dc\u9375\u5b57","meta_description":"\u63cf\u8ff0","meta_robots":"\u641c\u5c0b\u5f15\u64ce\u7684\u6a5f\u5668\u4eba",doctypes:"\u6587\u4ef6\u985e\u578b (Doctype)",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u66f8\u5beb\u65b9\u5f0f",ltr:"\u5f9e\u5de6\u5230\u53f3",rtl:"\u5f9e\u53f3\u5230\u5de6","xml_pi":"XML \u5b9a\u7fa9 (XML declaration)",encoding:"\u5b57\u5143\u7de8\u78bc","appearance_bgprops":"\u80cc\u666f\u8a2d\u5b9a","appearance_marginprops":"\u7db2\u9801\u7684\u908a\u8ddd","appearance_linkprops":"\u9023\u7d50\u7684\u984f\u8272","appearance_textprops":"\u6587\u5b57\u8a2d\u5b9a",bgcolor:"\u80cc\u666f\u984f\u8272",bgimage:"\u80cc\u666f\u5716","left_margin":"\u5de6\u908a\u8ddd","right_margin":"\u53f3\u908a\u8ddd","top_margin":"\u4e0a\u65b9\u908a\u8ddd","bottom_margin":"\u4e0b\u65b9\u908a\u8ddd","text_color":"\u6587\u5b57\u984f\u8272","font_size":"\u5b57\u9ad4\u5927\u5c0f","font_face":"\u5b57\u9ad4\u6a23\u5f0f","link_color":"\u9810\u8a2d\u7684\u984f\u8272\u6a23\u5f0f","hover_color":"\u6ed1\u9f20\u79fb\u904e\u53bb\u7684\u984f\u8272\u6a23\u5f0f","visited_color":"\u9ede\u904e\u5f8c\u7684\u984f\u8272\u6a23\u5f0f","active_color":"\u6309\u4e0b\u53bb\u5f8c\u7684\u984f\u8272",textcolor:"\u984f\u8272",fontsize:"\u6309\u4e0b\u53bb\u5f8c\u7684\u984f\u8272\u6a23\u5f0f",fontface:"\u5b57\u9ad4\u6a23\u5f0f","meta_index_follow":"\u516c\u958b\u7d66\u641c\u5c0b\u5f15\u64ce\u77e5\u9053","meta_index_nofollow":"\u544a\u8a34\u641c\u5c0b\u5f15\u64ce\u53ef\u4ee5\u5206\u4eab\u9023\u7d50\u7d66\u5927\u5bb6\uff0c\u4f46\u4e0d\u8981\u8b93\u641c\u5c0b\u5f15\u64ce\u5f9e\u9019\u88e1\u627e\u8cc7\u6599","meta_noindex_follow":"\u544a\u8a34\u641c\u5c0b\u5f15\u64ce\u4e0d\u8981\u8b93\u5927\u5bb6\u77e5\u9053\u6709\u9019\u500b\u9023\u7d50\uff0c\u53ea\u8b93\u641c\u5c0b\u5f15\u64ce\u77e5\u9053\u3001\u627e\u8cc7\u6599","meta_noindex_nofollow":"\u544a\u8a34\u641c\u5c0b\u5f15\u64ce\u8df3\u904e\u9019\u500b\u9023\u7d50","appearance_style":"\u6a23\u5f0f\u8868\u8207\u6a23\u5f0f\u7684\u5c6c\u6027\u8a2d\u5b9a",stylesheet:"\u6a23\u5f0f\u8868",style:"\u6a23\u5f0f",author:"\u9328\u9ede (\u66f8\u7c64)",copyright:"\u8457\u4f5c/\u6388\u6b0a",add:"\u65b0\u589e HTML \u6a19\u7c64",remove:"\u522a\u9664\u6240\u9078\u7684\u6a19\u7c64",moveup:"\u79fb\u52d5\u9078\u64c7\u7684\u6a19\u7c64 (\u5f80\u4e0a)",movedown:"\u79fb\u52d5\u9078\u64c7\u7684\u6a19\u7c64 (\u5f80\u4e0b)","head_elements":"HTML \u7684 Head \u6a19\u7c64",info:"\u8cc7\u8a0a","add_title":"HTML \u7684 Title \u6a19\u7c64","add_meta":"HTML \u7684 Meta \u6a19\u7c64","add_script":"HTML \u7684 Script \u6a19\u7c64","add_style":"HTML \u7684 Style \u6a19\u7c64","add_link":"HTML \u7684 Link \u6a19\u7c64","add_base":"HTML \u7684 Base \u6a19\u7c64","add_comment":"\u8a3b\u6587","title_element":"HTML \u7684 Title \u6a19\u7c64","script_element":"HTML \u7684 Script \u6a19\u7c64","style_element":"HTML \u7684 Style \u6a19\u7c64","base_element":"HTML \u7684 Base \u6a19\u7c64","link_element":"HTML \u7684 Link \u6a19\u7c64","meta_element":"HTML \u7684 Meta \u6a19\u7c64","comment_element":"\u8a3b\u89e3",src:"\u4f86\u6e90",language:"\u8a9e\u8a00",href:"\u9023\u7d50\u4f4d\u7f6e",target:"\u958b\u555f\u65b9\u5f0f",type:"\u5f62\u5f0f",charset:"\u5b57\u5143",defer:"\u5ef6\u7de9",media:"\u5f71\u97f3/\u5a92\u9ad4",properties:"\u5c6c\u6027",name:"\u540d\u7a31",value:"\u503c",content:"\u5167\u5bb9",rel:"\u8a72\u9023\u7d50\u662f\u4ec0\u9ebc (Rel)",rev:"\u8a72\u9023\u7d50\u8207\u7db2\u7ad9\u7684\u95dc\u4fc2 (Rev)",hreflang:"\u8a72\u9023\u7d50\u7684\u8a9e\u7cfb","general_props":"\u4e00\u822c","advanced_props":"\u66f4\u591a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh_dlg.js
new file mode 100644
index 000000000..35729048d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.fullpage_dlg',{title:"\u6587\u4ef6\u5c6c\u6027","meta_tab":"\u4e00\u822c","appearance_tab":"\u5916\u89c0","advanced_tab":"\u9032\u968e","meta_props":"Mata \u8cc7\u8a0a",langprops:"\u8a9e\u8a00\u548c\u7de8\u78bc","meta_title":"\u6a19\u984c","meta_keywords":"\u95dc\u9375\u5b57","meta_description":"\u8aaa\u660e","meta_robots":"Robots",doctypes:"DocType",langcode:"\u6587\u4ef6\u7de8\u78bc",langdir:"\u6587\u5b57\u66f8\u5beb\u65b9\u5411",ltr:"\u5f9e\u5de6\u5230\u53f3",rtl:"\u5f9e\u53f3\u5230\u5de6","xml_pi":"XML \u751f\u660e",encoding:"\u8a9e\u8a00\u7de8\u78bc","appearance_bgprops":"\u80cc\u666f\u984f\u8272","appearance_marginprops":"\u756b\u9762\u908a\u8ddd","appearance_linkprops":"\u9023\u7d50\u984f\u8272","appearance_textprops":"\u6587\u5b57\u5c6c\u6027",bgcolor:"\u80cc\u666f\u984f\u8272",bgimage:"\u80cc\u666f\u5716\u7247","left_margin":"\u5de6\u908a\u8ddd","right_margin":"\u53f3\u908a\u8ddd","top_margin":"\u4e0a\u908a\u8ddd","bottom_margin":"\u4e0b\u908a\u8ddd","text_color":"\u5b57\u9ad4\u984f\u8272","font_size":"\u5b57\u9ad4\u5927\u5c0f","font_face":"\u5b57\u9ad4","link_color":"\u9023\u7d50\u984f\u8272","hover_color":"\u7576\u6ed1\u9f20\u79fb\u5230\u9023\u7d50\u4e0a\u7684\u984f\u8272","visited_color":"\u8a2a\u554f\u904e\u7684\u9023\u7d50\u984f\u8272","active_color":"\u52d5\u4f5c\u4e2d\u7684\u9023\u7d50\u984f\u8272",textcolor:"\u5b57\u9ad4\u984f\u8272",fontsize:"\u5b57\u9ad4\u5927\u5c0f",fontface:"\u81ea\u9ad4","meta_index_follow":"\u7d22\u5f15\u4e26\u9023\u7d50","meta_index_nofollow":"\u7d22\u5f15\u4f46\u4e0d\u9023\u7d50","meta_noindex_follow":"\u4e0d\u7d22\u5f15\u4f46\u9023\u7d50","meta_noindex_nofollow":"\u4e0d\u7d22\u5f15\u4e5f\u4e0d\u9023\u7d50","appearance_style":"\u6a23\u5f0f\u8868\u8207\u6a23\u5f0f\u5c6c\u6027",stylesheet:"\u6a23\u5f0f\u8868",style:"\u6a23\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6b0a\u8072\u660e",add:"\u65b0\u589e\u5143\u7d20",remove:"\u522a\u9664\u9078\u64c7\u7684\u5143\u7d20",moveup:"\u4e0a\u79fb\u9078\u64c7\u7684\u5143\u7d20",movedown:"\u4e0b\u79fb\u9078\u64c7\u7684\u5143\u7d20","head_elements":"Head \u5143\u7d20",info:"\u8cc7\u8a0a","add_title":"Title \u5143\u7d20","add_meta":"Meta \u5143\u7d20","add_script":"Script \u5143\u7d20","add_style":"Style \u5143\u7d20","add_link":"Link \u5143\u7d20","add_base":"Base \u5143\u7d20","add_comment":"\u8a3b\u89e3","title_element":"Title \u5143\u7d20","script_element":"Script \u5143\u7d20","style_element":"Style \u5143\u7d20","base_element":"Base \u5143\u7d20","link_element":"Link \u5143\u7d20","meta_element":"Meta \u5143\u7d20","comment_element":"\u8a3b\u89e3",src:"Src",language:"\u8a9e\u8a00",href:"Href",target:"\u76ee\u6a19",type:"\u985e\u578b",charset:"\u5b57\u5143",defer:"Defer",media:"\u591a\u5a92\u9ad4",properties:"\u5c6c\u6027",name:"\u540d\u7a31",value:"\u503c",content:"\u5167\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u4e00\u822c","advanced_props":"\u9032\u968e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zu_dlg.js
new file mode 100644
index 000000000..0ccd232b7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/fullpage/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.fullpage_dlg',{title:"\u6863\u6848\u5c5e\u6027","meta_tab":"\u4e00\u822c","appearance_tab":"\u5916\u89c2","advanced_tab":"\u9ad8\u7ea7","meta_props":"\u6807\u7b7e( Meta )\u4fe1\u606f",langprops:"\u8bed\u8a00\u4e0e\u7f16\u7801","meta_title":"\u6807\u9898","meta_keywords":"\u5173\u952e\u5b57","meta_description":"\u5185\u5bb9\u8bf4\u660e","meta_robots":"Robots",doctypes:"Doctype",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",ltr:"\u7531\u5de6\u5230\u53f3",rtl:"\u7531\u53f3\u5230\u5de6","xml_pi":"XML\u5ba3\u544a",encoding:"\u5b57\u5143\u7f16\u7801","appearance_bgprops":"\u80cc\u666f\u5c5e\u6027","appearance_marginprops":"Body margins","appearance_linkprops":"\u8fde\u7ed3\u989c\u8272","appearance_textprops":"\u6587\u5b57\u5c5e\u6027",bgcolor:"\u80cc\u666f\u989c\u8272",bgimage:"\u80cc\u666f\u56fe\u7247","left_margin":"\u5de6\u8fb9\u754c","right_margin":"\u53f3\u8fb9\u754c","top_margin":"\u4e0a\u8fb9\u754c","bottom_margin":"\u4e0b\u8fb9\u754c","text_color":"\u6587\u5b57\u989c\u8272","font_size":"\u5b57\u4f53\u5c3a\u5bf8","font_face":"\u5b57\u4f53","link_color":"\u8fde\u7ed3\u989c\u8272","hover_color":"Hover\u989c\u8272","visited_color":"Visited\u989c\u8272","active_color":"Active\u989c\u8272",textcolor:"\u989c\u8272",fontsize:"\u5b57\u4f53\u5927\u5c0f",fontface:"\u5b57\u5f62\u4f53\u7cfb","meta_index_follow":"Index and follow the links","meta_index_nofollow":"Index and don\'t follow the links","meta_noindex_follow":"Do not index but follow the links","meta_noindex_nofollow":"Do not index and don\\\'t follow the links","appearance_style":"\u6837\u5f0f\u8868\u53ca\u6837\u5f0f\u5c5e\u6027",stylesheet:"\u6837\u5f0f\u8868",style:"\u6837\u5f0f",author:"\u4f5c\u8005",copyright:"\u7248\u6743",add:"\u6dfb\u52a0\u65b0\u5143\u7d20",remove:"\u79fb\u9664\u9009\u5b9a\u5143\u7d20",moveup:"\u4e0a\u79fb\u9009\u5b9a\u5143\u7d20",movedown:"\u4e0b\u79fb\u9009\u5b9a\u5143\u7d20","head_elements":"Head elements",info:"\u4fe1\u606f","add_title":"\u67e5\u627e\u5143\u7d20","add_meta":"Meta\u5143\u7d20","add_script":"Script\u5143\u7d20","add_style":"Style\u5143\u7d20","add_link":"Link\u5143\u7d20","add_base":"Base\u5143\u7d20","add_comment":"Comment node","title_element":"\u67e5\u627eelement","script_element":"Script element","style_element":"Style element","base_element":"Base element","link_element":"Link element","meta_element":"Meta element","comment_element":"Comment",src:"Src",language:"\u8bed\u8a00",href:"Href",target:"\u76ee\u6807",type:"\u7c7b\u578b",charset:"\u5b57\u5143\u96c6",defer:"\u5ef6\u7f13",media:"\u5a92\u4f53",properties:"\u5c5e\u6027",name:"\u540d\u79f0",value:"\u503c",content:"\u5185\u5bb9",rel:"Rel",rev:"Rev",hreflang:"Href lang","general_props":"\u4e00\u822c","advanced_props":"\u9ad8\u7ea7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ar_dlg.js
new file mode 100644
index 000000000..bc7446814
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.media_dlg',{list:"\u0642\u0627\u0626\u0645\u0647",file:"\u0645\u0644\u0641/\u0639\u0646\u0648\u0627\u0646URL",advanced:"\u0645\u062a\u0642\u062f\u0645",general:"\u0639\u0627\u0645",title:"\u0627\u0636\u0641/ \u0639\u062f\u0644 \u0641\u0644\u0627\u0634 \u0627\u0648 \u0641\u064a\u062f\u064a\u0648","align_top_left":"\u0627\u0639\u0644\u0649 \u064a\u0633\u0627\u0631","align_center":"\u0648\u0633\u0637","align_left":"\u064a\u0633\u0627\u0631","align_bottom":"\u0627\u0633\u0641\u0644","align_right":"\u064a\u0645\u064a\u0646","align_top":"\u0627\u0644\u0627\u0639\u0644\u0649","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..",qtsrc:"QT Src",progress:"\u062a\u0642\u062f\u0645",sound:"\u0635\u0648\u062a",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"\u0627\u0639\u0644\u0649 \u064a\u0645\u064a\u0646",uimode:"UI Mode",rate:"\u0645\u0639\u062f\u0644",playcount:"\u0639\u062f\u062f \u0645\u0631\u0627\u062a \u0627\u0644\u0639\u0631\u0636",defaultframe:"\u0627\u0644\u0627\u0637\u0627\u0631 \u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u0649",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"\u0641\u064a\u062f\u064a\u0648 \u0628\u0644\u0627 \u0627\u0637\u0627\u0631",stretchtofit:"\u0645\u0637\u0647 \u0644\u064a\u0646\u0627\u0633\u0628",mute:"\u0628\u0644\u0627 \u0635\u0648\u062a",invokeurls:"Invoke URLs",fullscreen:"\u0628\u0643\u0627\u0645\u0644 \u0627\u0644\u0634\u0627\u0634\u0647",enabled:"\u0645\u062a\u0627\u062d",autostart:"\u0628\u062f\u0621 \u062a\u0644\u0642\u0627\u0626\u0649",volume:"\u0639\u0644\u0648 \u0627\u0644\u0635\u0648\u062a",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u0648\u0642\u062a \u0627\u0644\u0646\u0647\u0627\u064a\u0647",starttime:"\u0648\u0642\u062a \u0627\u0644\u0628\u062f\u0627\u064a\u0647",enablejavascript:"Enable JavaScript",correction:"\u0628\u0644\u0627 \u062a\u0635\u062d\u064a\u062d",targetcache:"Target cache",playeveryframe:"\u0639\u0631\u0636 \u0643\u0644 \u0627\u0644\u0643\u0627\u062f\u0631\u0627\u062a",kioskmode:"Kiosk mode",controller:"Controller",menu:"\u0627\u0638\u0647\u0631 \u0627\u0644\u0642\u0627\u0626\u0645\u0647",loop:"\u062a\u0643\u0631\u0627\u0631",play:"\u062a\u0634\u063a\u064a\u0644 \u062a\u0644\u0642\u0627\u0626\u0649",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"\u0627\u0633\u0645",id:"Id",type:"\u0646\u0648\u0639",size:"\u0627\u0628\u0639\u0627\u062f",preview:"\u0645\u0639\u0627\u064a\u0646\u0647","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"\u0639\u062f\u062f \u0627\u0644\u062a\u0643\u0631\u0627\u0631\u0627\u062a",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"\u062e\u0644\u0641\u064a\u0647",wmode:"WMode",salign:"SAlign",align:"\u0645\u062d\u0627\u0632\u0627\u0647",scale:"Scale",quality:"\u062c\u0648\u062f\u0647",shuffle:"Shuffle",prefetch:"\u0627\u062d\u0636\u0627\u0631 \u0645\u0633\u0628\u0642",nojava:"\u0644\u0627 \u062c\u0627\u0641\u0627",maintainaspect:"\u0627\u0644\u062d\u0641\u0627\u0638 \u0639\u0644\u0649 \u0646\u0633\u0628\u0629 \u0627\u0644\u0637\u0648\u0644 \u0644\u0644\u0639\u0631\u0636",imagestatus:"\u062d\u0627\u0644\u0629 \u0627\u0644\u0635\u0648\u0631\u0647",center:"\u0648\u0633\u0637",autogotourl:"\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0630\u0647\u0627\u0628 \u0627\u0644\u062a\u0644\u0642\u0627\u0626\u0649","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"\u062e\u0635\u0627\u0626\u0635 \u0645\u064a\u062f\u064a\u0627 \u0628\u0644\u0627\u064a\u0631","qt_options":"\u062e\u0635\u0627\u0626\u0635 \u0643\u0648\u064a\u0643 \u062a\u0627\u064a\u0645","flash_options":"\u062e\u0635\u0627\u0626\u0635 \u0641\u0644\u0627\u0634",hidden:"\u062e\u0641\u0649","align_bottom_left":"\u0627\u0633\u0641\u0644 \u064a\u0633\u0627\u0631","align_bottom_right":"\u0627\u0633\u0641\u0644 \u064a\u0645\u064a\u0646",flash:"flash",quicktime:"quicktime ","embedded_audio_options":"\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0635\u0648\u062a \u0627\u0644\u0645\u062f\u0645\u062c\u0629",windowsmedia:"windowsmedia ",realmedia:"realmedia ",shockwave:"shockwave",audio:"\u0627\u0644\u0635\u0648\u062a",video:"\u0627\u0644\u0641\u064a\u062f\u064a\u0648","html5_video_options":"\u062e\u0635\u0627\u0626\u0635 \u0641\u064a\u062f\u064a\u0648 HTML5",altsource1:"\u0627\u0644\u0628\u062f\u064a\u0644 \u0627\u0644\u0627\u0648\u0644 \u0644\u0644\u0645\u0635\u062f\u0631",altsource2:"\u0627\u0644\u0628\u062f\u064a\u0644 \u0627\u0644\u062b\u0627\u0646\u0649 \u0644\u0644\u0645\u0635\u062f\u0631",preload:"\u062a\u062d\u0645\u064a\u0644 \u0645\u0633\u0628\u0642",poster:"Poster",source:"\u0645\u0635\u062f\u0631","html5_audio_options":"\u062e\u064a\u0627\u0631\u0627\u062a \u0627\u0644\u0635\u0648\u062a","preload_none":"\u0644\u0627 \u0627\u0644\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0633\u0628\u0642","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",iframe:"iframe ",embeddedaudio:"embedded audio "}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/az_dlg.js
new file mode 100644
index 000000000..5fd1f6b6c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.media_dlg',{list:"Siyah\u0131",file:"Fayl/\u00fcnvan",advanced:"\u018flav\u0259l\u0259r",general:"\u00dcmumi",title:"Mediya-obyekti \u0259lav\u0259/redakt\u0259 et","align_top_left":"\u00dcst sol","align_center":"M\u0259tk\u0259z","align_left":"Sol","align_bottom":"Alt","align_right":"Sa\u011f","align_top":"\u00dcst","qt_stream_warn":"Haz\u0131rki ax\u0131lan rtsp m\u0259nb\u0259l\u0259ri QT Src sah\u0259sin\u0259 \u0259lav\u0259 edilm\u0259lidir.\nSiz h\u0259m\u00e7inin Src sah\u0259sin\u0259 qeyri-ax\u0131lan versiyan\u0131 da \u0259lav\u0259 etm\u0259lisiniz..",qtsrc:"QT Src",progress:"\u0130l\u0259rl\u0259yi\u015f",sound:"S\u0259s",swstretchvalign:"Uzat D-D\u00fczl\u0259ndir",swstretchhalign:"Uzat Y-D\u00fczl\u0259ndir",swstretchstyle:"Uzatma stili",scriptcallbacks:"Skript \u00e7a\u011f\u0131r\u0131mlar\u0131","align_top_right":"\u00dcst sa\u011f",uimode:"UI \u00dcsulu",rate:"Norma",playcount:"Oynatma say\u0131",defaultframe:"Susmaya g\u00f6r\u0259 \u00e7\u0259r\u00e7iv\u0259",currentposition:"Haz\u0131rki m\u00f6vqe",currentmarker:"Haz\u0131rki marker",captioningid:"Ba\u015fl\u0131qland\u0131rma id",baseurl:"Baza URL",balance:"Balans",windowlessvideo:"P\u0259nc\u0259r\u0259siz vide",stretchtofit:"S\u0131\u011facaq q\u0259d\u0259r \u00f6l\u00e7\u00fcl\u0259ndir",mute:"S\u0259ssiz",invokeurls:"\u00c7a\u011f\u0131r\u0131lacaq URL \u00fcnvanlar",fullscreen:"Tam ekran",enabled:"Yan\u0131l\u0131b",autostart:"Avtomatik ba\u015flat",volume:"S\u0259s",target:"H\u0259d\u0259f",qtsrcchokespeed:"Drossel s\u00fcr\u0259ti",href:"Href",endtime:"Bit\u0259c\u0259k zaman",starttime:"Ba\u015flan\u011f\u0131c zaman",enablejavascript:"JavaScript-i yand\u0131r",correction:"D\u0259yi\u015fiklik yoxdur",targetcache:"H\u0259d\u0259f ke\u015f",playeveryframe:"H\u0259r \u00e7\u0259r\u00e7iv\u0259ni oynat",kioskmode:"Kiosk \u00fcsulu",controller:"\u0130dar\u0259\u00e7i",menu:"Menyunu g\u00f6st\u0259r",loop:"\u0130lm\u0259k",play:"Avtomatik oynat",hspace:"\u00dcf\u00fcqi f\u0259za",vspace:"\u015eaquli f\u0259za","class_name":"Sinif",name:"Ad\u0131",id:"\u0130dentifikator",type:"N\u00f6v",size:"\u00d6\u00e7\u00fcl\u0259ri",preview:"\u0130lkin bax\u0131\u015f","constrain_proportions":"Proporsiyalar\u0131 saxla",controls:"Kontroller",numloop:"R\u0259q\u0259mli ilm\u0259l\u0259r",console:"Konsol",cache:"Ke\u015f",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"T\u0259m\u0259l",bgcolor:"Fon",wmode:"WMode",salign:"SAlign",align:"Tarazla\u015fmaq",scale:"Miqyas",quality:"Keyfiyy\u0259t",shuffle:"Qar\u0131\u015fd\u0131r",prefetch:"\u00d6n-g\u0259tirm\u0259",nojava:"Java yox",maintainaspect:"Aspekti qoru",imagestatus:"\u015e\u0259kil statusu",center:"M\u0259rk\u0259z",autogotourl:"Avtomatik gedil\u0259c\u0259k URL","shockwave_options":"Shockwave nizamlamalar\u0131","rmp_options":"Real media player nizamlamalar\u0131","wmp_options":"Windows media player nizamlamalar\u0131","qt_options":"Quicktime nizamlamalar\u0131","flash_options":"Flash nizamlamalar\u0131",hidden:"Gizli","align_bottom_left":"A\u015fa\u011f\u0131 sol","align_bottom_right":"A\u015fa\u011f\u0131 sa\u011f","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/be_dlg.js
new file mode 100644
index 000000000..f7afc1a75
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.media_dlg',{list:"\u0421\u043f\u0456\u0441",file:"\u0424\u0430\u0439\u043b/\u0430\u0434\u0440\u0430\u0441",advanced:"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u0430",general:"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f",title:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0435\u0434\u044b\u044f-\u0430\u0431\'\u0435\u043a\u0442","align_top_left":"\u041f\u0430 \u043b\u0435\u0432\u0430\u043c\u0443 \u0432\u0435\u0440\u0445\u043d\u044f\u043c\u0443 \u043a\u0440\u0430\u044e","align_center":"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","align_left":"\u041f\u0430 \u043b\u0435\u0432\u0430\u043c\u0443 \u043a\u0440\u0430\u044e","align_bottom":"\u041f\u0430 \u043d\u0456\u0436\u043d\u044f\u043c\u0443 \u043a\u0440\u0430\u044e","align_right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u0430\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u0430 \u0432\u0435\u0440\u0445\u043d\u044f\u043c\u0443 \u043a\u0440\u0430\u044e","qt_stream_warn":"\u041f\u0430\u0442\u043e\u043a\u0430\u0432\u044b\u044f RTSP \u0440\u044d\u0441\u0443\u0440\u0441\u044b \u043f\u0430\u0432\u0456\u043d\u044b \u0431\u044b\u0446\u044c \u0434\u0430\u0434\u0430\u043d\u044b\u044f \u045e \u043f\u043e\u043b\u0435 QT Src \u043f\u0430\u0434 \u0443\u043a\u043b\u0430\u0434\u043a\u0430\u0439 \u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u0430.\n\u0412\u044b \u0442\u0430\u043a\u0441\u0430\u043c\u0430 \u043f\u0430\u0432\u0456\u043d\u044b \u0434\u0430\u0434\u0430\u0446\u044c \u043d\u0435 \u043f\u0430\u0442\u043e\u043a\u0430\u0432\u044b\u044f \u0432\u0435\u0440\u0441\u0456\u0456 \u045e \u043f\u043e\u043b\u0435 \u041a\u0440\u044b\u043d\u0456\u0446\u0430.",qtsrc:"QT Src",progress:"\u041f\u0440\u0430\u0433\u0440\u044d\u0441",sound:"\u0413\u0443\u043a",swstretchvalign:"\u0412\u0435\u0440\u0442. \u0432\u044b\u0440-\u044f \u0440\u0430\u0441\u0446\u044f\u0436\u044d\u043d\u043d\u0456",swstretchhalign:"\u0413\u0430\u0440. \u0432\u044b\u0440-\u044f \u0440\u0430\u0441\u0446\u044f\u0436\u044d\u043d\u043d\u0456",swstretchstyle:"\u0421\u0442\u044b\u043b\u044c \u0440\u0430\u0441\u0446\u044f\u0436\u044d\u043d\u043d\u044f",scriptcallbacks:"\u041f\u0430\u0434\u0442\u0440\u044b\u043c\u043a\u0430 \u0441\u043a\u0440\u044b\u043f\u0442\u0430","align_top_right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u0430\u043c\u0443 \u0432\u0435\u0440\u0445\u043d\u0456\u043c \u043a\u0440\u0430\u0456",uimode:"\u0420\u044d\u0436\u044b\u043c \u0456\u043d\u0442\u044d\u0440\u0444\u0435\u0439\u0441\u0443",rate:"\u0420\u044d\u0439\u0442\u044b\u043d\u0433",playcount:"\u041b\u0456\u0447\u044b\u043b\u044c\u043d\u0456\u043a \u043f\u0440\u0430\u0439\u0433\u0440\u0430\u0432\u0430\u043d\u043d\u044f",defaultframe:"\u0410\u0441\u043d\u043e\u045e\u043d\u044b \u043a\u0430\u0434\u0440",currentposition:"\u0411\u044f\u0433\u0443\u0447\u0430\u044f \u043f\u0430\u0437\u0456\u0446\u044b\u044f",currentmarker:"\u0411\u044f\u0433\u0443\u0447\u044b \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u0406\u043c\u044f \u0441\u0443\u0431\u0442\u044b\u0442\u0440\u0430\u045e",baseurl:"\u0411\u0430\u0437\u0430\u0432\u044b \u0430\u0434\u0440\u0430\u0441",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"\u0410\u043a\u043e\u043d\u043d\u0430\u0435 \u0432\u0456\u0434\u044d\u0430",stretchtofit:"\u041f\u0430\u0434 \u043f\u0430\u043c\u0435\u0440 \u0430\u043a\u043d\u0430",mute:"\u0411\u0435\u0437 \u0433\u0443\u043a\u0443",invokeurls:"\u0412\u044b\u043a\u043b\u0456\u043a\u0430\u0446\u044c \u0430\u0434\u0440\u0430\u0441",fullscreen:"\u041d\u0430 \u045e\u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d",enabled:"\u0423\u043a\u043b\u044e\u0447\u0430\u043d\u0430",autostart:"\u0410\u045e\u0442\u0430\u0437\u0430\u043f\u0443\u0441\u043a",volume:"\u0413\u0443\u0447\u043d\u0430\u0441\u0446\u044c",target:"\u041c\u044d\u0442\u0430",qtsrcchokespeed:"Choke speed",href:"\u0421\u043f\u0430\u0441\u044b\u043b\u043a\u0430",endtime:"\u0427\u0430\u0441 \u0437\u0430\u043a\u0430\u043d\u0447\u044d\u043d\u043d\u044f",starttime:"\u0427\u0430\u0441 \u043f\u0430\u0447\u0430\u0442\u043a\u0443",enablejavascript:"\u0423\u043a\u043b\u044e\u0447\u044b\u0446\u044c JavaScript",correction:"\u0411\u0435\u0437 \u043a\u0430\u0440\u044d\u043a\u0446\u0456\u0440\u043e\u045e\u043a\u0443",targetcache:"\u041a\u044d\u0448 \u043c\u044d\u0442\u044b",playeveryframe:"\u041f\u0440\u0430\u0439\u0433\u0440\u0430\u0446\u044c \u043a\u043e\u0436\u043d\u044b \u043a\u0430\u0434\u0440",kioskmode:"\u0420\u044d\u0436\u044b\u043c \u041a\u0456\u0451\u0441\u043a",controller:"\u041a\u0456\u0440\u0430\u0432\u0430\u043d\u043d\u0435",menu:"\u0410\u0434\u043b\u044e\u0441\u0442\u0440\u043e\u045e\u0432\u0430\u0446\u044c \u043c\u0435\u043d\u044e",loop:"\u041f\u0430\u045e\u0442\u043e\u0440",play:"\u041f\u0440\u0430\u0439\u0433\u0440\u0430\u0432\u0430\u0446\u044c \u0430\u045e\u0442\u0430\u043c\u0430\u0442\u044b\u0447\u043d\u0430",hspace:"\u0413\u0430\u0440. \u0432\u043e\u0434\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442. \u0432\u043e\u0434\u0441\u0442\u0443\u043f","class_name":"\u041a\u043b\u0430\u0441",name:"\u041d\u0430\u0437\u0432\u0430",id:"\u0406\u0434\u044d\u043d\u0442\u044b\u0444\u0456\u043a\u0430\u0442\u0430\u0440",type:"\u0422\u044b\u043f",size:"\u041f\u0430\u043c\u0435\u0440\u044b",preview:"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u0456 \u043f\u0440\u0430\u0433\u043b\u044f\u0434","constrain_proportions":"\u0417\u0430\u0445\u043e\u045e\u0432\u0430\u0446\u044c \u043f\u0440\u0430\u043f\u043e\u0440\u0446\u044b\u0456",controls:"\u041a\u0456\u0440\u0430\u0432\u0430\u043d\u043d\u0435",numloop:"\u041f\u0430\u045e\u0442\u043e\u0440\u044b",console:"\u041a\u0430\u043d\u0441\u043e\u043b\u044c",cache:"\u041a\u044d\u0448",autohref:"\u0410\u045e\u0442\u0430-\u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0430",liveconnect:"SWLiveConnect",flashvars:"Flash \u043a\u0430\u043c\u0430\u043d\u0434\u044b",base:"\u0410\u0441\u043d\u043e\u0432\u0430",bgcolor:"\u0424\u043e\u043d",wmode:"\u0410\u043a\u043d\u043e",salign:"\u0412\u044b\u0440-\u043d\u0435",align:"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435",scale:"\u041c\u0430\u0448\u0442\u0430\u0431",quality:"\u042f\u043a\u0430\u0441\u0446\u044c",shuffle:"\u0423\u0440\u043e\u0441\u043a\u0456\u0434",prefetch:"\u041f\u0430\u043f\u0435\u0440\u0430\u0434\u0436\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u044b\u0431\u0430\u0440\u043a\u0430",nojava:"\u0411\u0435\u0437 Java",maintainaspect:"\u0417\u0430\u043f\u043e\u043c\u043d\u0456\u0446\u044c \u043f\u0430\u043c\u0435\u0440",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430",center:"\u0426\u044d\u043d\u0442\u0440",autogotourl:"\u0410\u045e\u0442\u0430\u043f\u0435\u0440\u0430\u0445\u043e\u0434 \u043f\u0430 \u0430\u0434\u0440\u0430\u0441\u0443","shockwave_options":"\u041e\u043f\u0446\u044b\u0456 Shockwave","rmp_options":"\u041e\u043f\u0446\u044b\u0456 Real Media Player","wmp_options":"\u041e\u043f\u0446\u044b\u0456 Windows Media Player","qt_options":"\u041e\u043f\u0446\u044b\u0456 QuickTime","flash_options":"\u041e\u043f\u0446\u044b\u0456 Flash",hidden:"\u0421\u0445\u0430\u0432\u0430\u043d\u044b","align_bottom_left":"\u041f\u0430 \u043b\u0435\u0432\u0430\u043c\u0443 \u043d\u0456\u0436\u043d\u044f\u043c\u0443 \u043a\u0440\u0430\u044e","align_bottom_right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u0430\u043c\u0443 \u043d\u0456\u0436\u043d\u044f\u043c\u0443 \u043a\u0440\u0430\u044e",flash:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 flash \u0444\u0430\u0439\u043b\u0430",quicktime:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 quicktime \u0444\u0430\u0439\u043b\u0430","embedded_audio_options":"\u041e\u043f\u0446\u044b\u0456 \u045e\u043a\u0430\u0440\u0430\u043d\u0451\u043d\u0430\u0433\u0430 \u0430\u045e\u0434\u044b\u0451",windowsmedia:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 windowsmedia \u0444\u0430\u0439\u043b\u0430",realmedia:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 realmedia \u0444\u0430\u0439\u043b\u0430",shockwave:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 shockwave \u0444\u0430\u0439\u043b\u0430",audio:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 \u0430\u045e\u0434\u044b\u0451 \u0444\u0430\u0439\u043b\u0430",video:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 \u0432\u0456\u0434\u044d\u0430 \u0444\u0430\u0439\u043b\u0430","html5_video_options":"\u041e\u043f\u0446\u044b\u0456 HTML5 Video",altsource1:"\u0410\u043b\u044c\u0442\u044d\u0440\u043d\u0430\u0442\u044b\u045e\u043d\u0430\u044f \u043a\u0440\u044b\u043d\u0456\u0446\u0430 1",altsource2:"\u0410\u043b\u044c\u0442\u044d\u0440\u043d\u0430\u0442\u044b\u045e\u043d\u0430\u044f \u043a\u0440\u044b\u043d\u0456\u0446\u0430 2",preload:"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u044f\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430",poster:"\u041f\u043e\u0441\u0442\u044d\u0440",source:"\u041a\u0440\u044b\u043d\u0456\u0446\u0430","html5_audio_options":"\u041e\u043f\u0446\u044b\u0456 \u0430\u045e\u0434\u044b\u0451","preload_none":"\u0411\u0435\u0437 \u043f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u044f\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0456","preload_metadata":"\u041f\u0430\u043f\u044f\u0440\u044d\u0434\u043d\u044f\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u044b\u0445 \u0432\u0456\u0434\u044d\u0430","preload_auto":"\u041d\u0430 \u043c\u0435\u0440\u043a\u0430\u0432\u0430\u043d\u043d\u0435 \u0431\u0440\u0430\u045e\u0437\u0435\u0440\u0430",iframe:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 iframe \u0444\u0430\u0439\u043b\u0430",embeddedaudio:"\u0423\u0441\u0442\u0430\u045e\u043a\u0430 embeddedaudio \u0444\u0430\u0439\u043b\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bg_dlg.js
new file mode 100644
index 000000000..0b16481f9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.media_dlg',{list:"\u0421\u043f\u0438\u0441\u044a\u043a",file:"\u0424\u0430\u0439\u043b/URL",advanced:"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438",general:"\u041e\u0431\u0449\u0438",title:"\u0412\u043c\u044a\u043a\u043d\u0438/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043c\u0435\u0434\u0438\u044f","align_top_left":"\u0413\u043e\u0440\u0435 \u043b\u044f\u0432\u043e","align_center":"\u0426\u0435\u043d\u0442\u044a\u0440","align_left":"\u041b\u044f\u0432\u043e","align_bottom":"\u0414\u043e\u043b\u0443","align_right":"\u0414\u044f\u0441\u043d\u043e","align_top":"\u0413\u043e\u0440\u0435","qt_stream_warn":"\u041f\u043e\u0442\u043e\u0447\u043d\u0438\u0442\u0435 rtsp \u0440\u0435\u0441\u0443\u0440\u0441\u0438 \u0442\u0440\u044f\u0431\u0432\u0430 \u0434\u0430 \u0441\u0435 \u0434\u043e\u0431\u0430\u0432\u044f\u0442 \u0432 QT Src \u043f\u043e\u043b\u0435\u0442\u043e \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0437\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438.\n\u0422\u0440\u044f\u0431\u0432\u0430 \u0441\u044a\u0449\u043e \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0435 \u043f\u043e\u0442\u043e\u0447\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u0432 Src \u043f\u043e\u043b\u0435\u0442\u043e..",qtsrc:"QT \u0418\u0437\u0442\u043e\u0447\u043d\u0438\u043a",progress:"\u041f\u0440\u043e\u0433\u0440\u0435\u0441",sound:"\u0417\u0432\u0443\u043a",swstretchvalign:"\u0420\u0430\u0437\u043f\u044a\u0432\u0430\u043d\u0435 V-Align",swstretchhalign:"\u0420\u0430\u0437\u043f\u044a\u0432\u0430\u043d\u0435 H-Align",swstretchstyle:"\u0421\u0442\u0438\u043b \u043d\u0430 \u0440\u0430\u0437\u043f\u044a\u0432\u0430\u043d\u0435",scriptcallbacks:"\u0421\u043a\u0440\u0438\u043f\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u0438 \u0438\u0437\u0432\u0438\u043a\u0432\u0430\u043d\u0438\u044f","align_top_right":"\u0413\u043e\u0440\u0435 \u0434\u044f\u0441\u043d\u043e",uimode:"UI \u0440\u0435\u0436\u0438\u043c",rate:"\u0411\u044a\u0440\u0437\u0438\u043d\u0430",playcount:"\u0411\u0440\u043e\u0439 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f",defaultframe:"\u041d\u0430\u0447\u0430\u043b\u0435\u043d \u043a\u0430\u0434\u044a\u0440",currentposition:"\u0422\u0435\u043a\u0443\u0449\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f",currentmarker:"\u0422\u0435\u043a\u0443\u0449 \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u041d\u0430\u0434\u043f\u0438\u0441\u0432\u0430\u043d\u0435 id",baseurl:"\u0411\u0430\u0437\u043e\u0432\u043e URL",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"\u0412\u0438\u0434\u0435\u043e \u0431\u0435\u0437 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446",stretchtofit:"\u0420\u0430\u0437\u043f\u044a\u043d\u0438",mute:"\u0417\u0430\u0433\u043b\u0443\u0448\u0438",invokeurls:"\u0418\u0437\u0432\u0438\u043a\u0430\u0439\u0442\u0435 URL-\u0442\u0430",fullscreen:"\u0426\u044f\u043b \u0435\u043a\u0440\u0430\u043d",enabled:"\u0412\u043a\u043b\u044e\u0447\u0435\u043d",autostart:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435",volume:"\u0421\u0438\u043b\u0430 \u043d\u0430 \u0437\u0432\u0443\u043a\u0430",target:"\u0426\u0435\u043b",qtsrcchokespeed:"\u041f\u0440\u0435\u0434\u0435\u043b\u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442",href:"Href",endtime:"\u0412\u0440\u0435\u043c\u0435 \u0437\u0430 \u043a\u0440\u0430\u0439",starttime:"\u0412\u0440\u0435\u043c\u0435 \u0437\u0430 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043d\u0435",enablejavascript:"\u0412\u043a\u043b\u044e\u0447\u0438 JavaScript",correction:"\u0411\u0435\u0437 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u0438",targetcache:"\u0426\u0435\u043b\u0435\u0432\u0438 \u043a\u0435\u0448",playeveryframe:"\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u0439 \u0432\u0441\u0435\u043a\u0438 \u043a\u0430\u0434\u044a\u0440",kioskmode:"Kiosk \u0440\u0435\u0436\u0438\u043c",controller:"\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440",menu:"\u041f\u043e\u043a\u0430\u0436\u0438 \u043c\u0435\u043d\u044e",loop:"\u041f\u043e\u0432\u0442\u0430\u0440\u044f\u0439",play:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u0443\u0441\u043a\u0430\u043d\u0435",hspace:"H-Space",vspace:"V-Space","class_name":"\u041a\u043b\u0430\u0441",name:"\u0418\u043c\u0435",id:"Id",type:"\u0422\u0438\u043f",size:"\u0420\u0430\u0437\u043c\u0435\u0440\u0438",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434","constrain_proportions":"\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438\u0442\u0435",controls:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435",numloop:"\u0411\u0440\u043e\u0439 \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f",console:"\u041a\u043e\u043d\u0437\u043e\u043b\u0430",cache:"\u041a\u0435\u0448",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"\u0424\u043b\u0430\u0448 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0438",base:"\u041e\u0441\u043d\u043e\u0432\u0430",bgcolor:"\u0424\u043e\u043d",wmode:"WMode",salign:"SAlign",align:"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",scale:"\u041f\u0440\u0435\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u0438",quality:"\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e",shuffle:"\u0420\u0430\u0437\u0431\u044a\u0440\u043a\u0430\u0439",prefetch:"\u0421\u0432\u0430\u043b\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e",nojava:"\u0411\u0435\u0437 JAVA",maintainaspect:"\u041f\u043e\u0434\u0434\u044a\u0440\u0436\u0430\u0439 \u0441\u044a\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u0442\u043e",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430",center:"\u0426\u0435\u043d\u0442\u044a\u0440",autogotourl:"\u041e\u0442\u0438\u0434\u0438 \u043d\u0430 URL","shockwave_options":"\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Shockwave","rmp_options":"\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Real media player","wmp_options":"\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Windows media player","qt_options":"\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Quicktime","flash_options":"\u041e\u043f\u0446\u0438\u0438 \u0437\u0430 Flash",hidden:"\u0421\u043a\u0440\u0438\u0442","align_bottom_left":"\u0414\u043e\u043b\u0443 \u043b\u044f\u0432\u043e","align_bottom_right":"\u0414\u043e\u043b\u0443 \u0434\u044f\u0441\u043d\u043e",flash:"\u0424\u043b\u0430\u0448 \u0444\u0430\u0439\u043b",quicktime:"Quick Time","embedded_audio_options":"\u0412\u0433\u0440\u0430\u0434\u0435\u043d\u0438 \u0430\u0443\u0434\u0438\u043e \u043e\u043f\u0446\u0438\u0438",windowsmedia:"Windows Media Player",realmedia:"Real Media",shockwave:"Shockwave",audio:"\u0417\u0432\u0443\u043a",video:"\u0412\u0438\u0434\u0435\u043e","html5_video_options":"HTML5 \u0412\u0438\u0434\u0435\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438",altsource1:"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0438\u0437\u0442\u043e\u0447\u043d\u0438\u043a 1",altsource2:"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0438\u0437\u0442\u043e\u0447\u043d\u0438\u043a 2",preload:"\u041f\u0440\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043d\u0435",poster:"\u041f\u043b\u0430\u043a\u0430\u0442",source:"\u0418\u0437\u0442\u043e\u0447\u043d\u0438\u043a","html5_audio_options":"\u0410\u0443\u0434\u0438\u043e \u041e\u043f\u0446\u0438\u0438","preload_none":"\u041d\u0435 \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u0439 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e","preload_metadata":"\u0417\u0430\u0440\u0435\u0434\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u0432\u0438\u0435\u0434\u043e \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u0438\u0442\u0435","preload_auto":"\u041d\u0435\u043a\u0430 \u0431\u0440\u0430\u0443\u0437\u044a\u0440\u044a\u0442 \u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f \u0440\u0435\u0448\u0438",iframe:"\u041b\u043e\u043a\u0430\u043b\u0435\u043d \u0444\u0440\u0435\u0439\u043c(iframe)",embeddedaudio:"\u0412\u0433\u0440\u0430\u0434\u0435\u043d\u043e \u0430\u0443\u0434\u0438\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bn_dlg.js
new file mode 100644
index 000000000..216365a9d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.media_dlg',{list:"\u09b2\u09bf\u09b8\u09cd\u099f",file:"\u09ab\u09be\u0987\u09b2/\u0987\u0989 \u0986\u09b0 \u098f\u09b2",advanced:"\u098f\u09a1\u09ad\u09be\u09a8\u09cd\u09b8\u09a1",general:"\u099c\u09c7\u09a8\u09be\u09b0\u09c7\u09b2",title:"\u0987\u09a8\u09b8\u09be\u09b0\u09cd\u099f/ \u098f\u09ae\u09ac\u09c7\u09a1\u09c7\u09a1 \u09ae\u09bf\u09a1\u09bf\u09df\u09be \u098f\u09a1\u09bf\u099f \u0995\u09b0\u09be","align_top_left":"\u0989\u09aa\u09b0\u09c7\u09b0 \u09ac\u09be\u09ae \u0995\u09cb\u09a8\u09c7","align_center":"\u09ae\u09be\u099d\u0996\u09be\u09a8\u09c7","align_left":"\u09ac\u09be\u09ae\u09c7","align_bottom":"\u09a8\u09bf\u099a\u09c7","align_right":"\u09a1\u09be\u09a8\u09c7","align_top":"\u0989\u09aa\u09b0\u09c7","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/br_dlg.js
new file mode 100644
index 000000000..81d197820
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.media_dlg',{list:"Lista",file:"Arquivo/URL",advanced:"Avan\u00e7ado",general:"Geral",title:"Inserir/Editar m\u00eddia incorporada","align_top_left":"Topo \u00e0\u00a0 esquerda","align_center":"Centro","align_left":"Esquerda","align_bottom":"Abaixo","align_right":"Direita","align_top":"Topo","qt_stream_warn":"Fluxos de recursos rtsp devem ser acrescentados ao campo QT Src no Modo Avan\u00e7ado.\\NUma vers\u00e3o sem fluxo tamb\u00e9m deve ser acrescentada ao campo Src.",qtsrc:"QT Src",progress:"Progresso",sound:"Som",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"callbacks de script","align_top_right":"Topo \u00e0\u00a0 direita",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Frame padr\u00e3o",currentposition:"Posi\u00e7\u00e3o actual",currentmarker:"Marcador actual",captioningid:"Id de legenda",baseurl:"Base URL",balance:"Stereo",windowlessvideo:"V\u00eddeo sem janela",stretchtofit:"Estender",mute:"Mudo",invokeurls:"Invocar URLs",fullscreen:"Ecr\u00e3 inteiro",enabled:"Activado",autostart:"Execu\u00e7\u00e3o autom\u00e1tica",volume:"Volume",target:"Alvo",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Hora do fim",starttime:"Hora de in\u00edcio",enablejavascript:"Disponibilizar javaScript",correction:"Sem correc\u00e7\u00f5es",targetcache:"Cache alvo",playeveryframe:"Executar todas as frames",kioskmode:"Modo Quiosque",controller:"Controlador",menu:"Mostrar menu",loop:"Repeti\u00e7\u00e3o autom\u00e1tica",play:"Execu\u00e7\u00e3o autom\u00e1tica",hspace:"Espa\u00e7o horizontal",vspace:"Espa\u00e7o vertical","class_name":"Classe",name:"Nome",id:"Id",type:"Tipo",size:"Dimens\u00f5es",preview:"Previs\u00e3o","constrain_proportions":"Manter propor\u00e7\u00f5es",controls:"Controles",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Fundo",wmode:"WMode",salign:"SAlign",align:"Alinhamento",scale:"Escala",quality:"Qualidade",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Centro",autogotourl:"Auto goto URL","shockwave_options":"Op\u00e7\u00f5es Shockwave","rmp_options":"Op\u00e7\u00f5es Real Media Player","wmp_options":"Op\u00e7\u00f5es Windows Media Player","qt_options":"Op\u00e7\u00f5es Quicktime","flash_options":"Op\u00e7\u00f5es Flash",hidden:"Oculto","align_bottom_left":"Abaixo \u00e0\u00a0 esquerda","align_bottom_right":"Abaixo \u00e0\u00a0 direita","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bs_dlg.js
new file mode 100644
index 000000000..1a5cb2390
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ca_dlg.js
new file mode 100644
index 000000000..1162d4e7e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.media_dlg',{list:"Llista",file:"Fitxer/URL",advanced:"Avan\u00e7at",general:"General",title:"Insereix / edita multim\u00e8dia incrustada","align_top_left":"Superior esquerra","align_center":"Centre","align_left":"Esquerra","align_bottom":"Inferior","align_right":"Dreta","align_top":"Superior","qt_stream_warn":"Els recursos rtsp fets flux s\'haurien d\'afegir al camp QT Src sota la pestanya avan\u00e7ada.\nTamb\u00e9 haur\u00edeu d\'afegir una versi\u00f3 no feta flux al camp Src..",qtsrc:"QT Src",progress:"Progr\u00e9s",sound:"S\u00f2",swstretchvalign:"Alineaci\u00f3 vertical de l\'extensor",swstretchhalign:"Alineaci\u00f3 horitzontal de l\'extensor",swstretchstyle:"Estil de l\'extensor",scriptcallbacks:"Crides de retorn a script","align_top_right":"Superior dreta",uimode:"Mode UI",rate:"Velocitat",playcount:"Compte de reproducci\u00f3",defaultframe:"Marc per defecte",currentposition:"Posici\u00f3 actual",currentmarker:"Retolador actual",captioningid:"Id nominal",baseurl:"URL base",balance:"Equilibri",windowlessvideo:"V\u00eddeo sense finestra",stretchtofit:"Estirar fins a encaixar",mute:"Silenci",invokeurls:"Invoca els URL",fullscreen:"Pantalla completa",enabled:"Habilitat",autostart:"Inici autom\u00e0tic",volume:"Volumen",target:"Dest\u00ed",qtsrcchokespeed:"Velocitat",href:"Href",endtime:"Fi",starttime:"Inici",enablejavascript:"Habilita el javascript",correction:"Sense correcci\u00f3",targetcache:"Target cache",playeveryframe:"Reprodueix cada marc",kioskmode:"Mode quiosc",controller:"Controlador",menu:"Mostra el men\u00fa",loop:"Bucle",play:"Reproducci\u00f3 autom\u00e0tica",hspace:"Espai horitzontal",vspace:"Espai vertical","class_name":"Classe",name:"Nom",id:"Id",type:"Tipus",size:"Dimensions",preview:"Previsualitzaci\u00f3","constrain_proportions":"Mant\u00e9 les proporcions",controls:"Controls",numloop:"Nre. bucles",console:"Consola",cache:"Mem\u00f2ria cau",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Fons",wmode:"Mode W",salign:"Alinea S",align:"Alinea",scale:"Escala",quality:"Qualitat",shuffle:"Shuffle",prefetch:"Prec\u00e0rrega",nojava:"Sense java",maintainaspect:"Mant\u00e9 l\'aspecte",imagestatus:"Estat de la imatge",center:"Alinea al centre",autogotourl:"URL goto autom\u00e0tic","shockwave_options":"Opcions del Shockwave","rmp_options":"Opcions del Real media player","wmp_options":"Opcions del Windows media player","qt_options":"Opcions del Quicktime","flash_options":"Opcions del Flash",hidden:"Ocult","align_bottom_left":"Inferior esquerra","align_bottom_right":"Inferior dreta",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opcions d\'audio incrustat",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Opcions de v\u00eddeo HTML5",altsource1:"Font alternatiu 1",altsource2:"Font alternatiu 2",preload:"Pre-c\u00e0rrega",poster:"Anunci",source:"Font","html5_audio_options":"Opcions d\'audio","preload_none":"No precarregar","preload_metadata":"Precarregar metadata de v\u00eddeo","preload_auto":"Deixar decidir a l\'usuari del navegador",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ch_dlg.js
new file mode 100644
index 000000000..3f2c02b2d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.media_dlg',{list:"\u5217\u8868",file:"\u5a92\u4f53URL",advanced:"\u9ad8\u7ea7",general:"\u4e00\u822c",title:"\u63d2\u5165/\u7f16\u8f91\u5a92\u4f53","align_top_left":"\u5de6\u4e0a","align_center":"\u7f6e\u4e2d","align_left":"\u9760\u5de6","align_bottom":"\u9760\u4e0b","align_right":"\u9760\u53f3","align_top":"\u9760\u4e0a","qt_stream_warn":"\u4e32\u6d41\u5a92\u4f53rtsp\u8d44\u6e90\u5e94\u8be5\u52a0\u5230\u300c\u9ad8\u7ea7\u300d\u4e2dQT src. \n\u540c\u65f6\u589e\u52a0\u975e\u4e32\u6d41\u5a92\u4f53\u8d44\u6e90\u5230src.",qtsrc:"QT Src",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u7f29\u653e\u81f3\u5782\u76f4\u5bf9\u9f50",swstretchhalign:"\u7f29\u653e\u81f3\u6c34\u5e73\u5bf9\u9f50",swstretchstyle:"\u7f29\u653e\u6837\u5f0f",scriptcallbacks:"Script \u553f\u53eb","align_top_right":"\u53f3\u4e0a",uimode:"\u9762\u677f\u6a21\u5f0f",rate:"\u6bd4\u7387",playcount:"\u64ad\u653e\u6b21\u6570",defaultframe:"\u9884\u8bbe\u753b\u9762",currentposition:"\u76ee\u524d\u4f4d\u7f6e",currentmarker:"\u76ee\u524d\u6807\u8bb0",captioningid:"\u5b57\u5e55\u7f16\u53f7",baseurl:"\u57fa\u5e95 URL",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u89c6\u7a97\u64ad\u653e",stretchtofit:"\u7f29\u653e\u81f3\u6700\u4f73\u5927\u5c0f",mute:"\u9759\u97f3",invokeurls:"\u5f15\u7528\u7684 URLs",fullscreen:"\u5168\u8424\u5e55",enabled:"\u53ef\u7528",autostart:"\u81ea\u52a8\u64ad\u653e",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"\u963b\u585e\u901f\u5ea6",href:"\u8d85\u8fde\u7ed3",endtime:"\u7ed3\u675f\u65f6\u95f4",starttime:"\u5f00\u59cb\u65f6\u95f4",enablejavascript:"\u542f\u7528 JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u9010\u683c\u64ad\u653e",kioskmode:"Kiosk\u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u663e\u793a\u9009\u9879",loop:"\u5faa\u73af",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd","class_name":"\u7c7b\u522b",name:"\u540d\u79f0",id:"ID",type:"\u7c7b\u578b",size:"\u5927\u5c0f",preview:"\u9884\u89c8","constrain_proportions":"\u7ea6\u675f\u6bd4\u4f8b",controls:"\u63a7\u5236",numloop:"\u5faa\u73af\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash \u53d8\u91cf",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f\u8272",wmode:"\u89c6\u7a97\u6a21\u5f0f",salign:"SAlign",align:"\u5bf9\u9f50",scale:"\u7f29\u653e",quality:"\u54c1\u8d28",shuffle:"\u968f\u673a",prefetch:"\u9884\u8f7d",nojava:"No Java",maintainaspect:"\u9501\u5b9a\u6bd4\u4f8b",imagestatus:"\u56fe\u7247\u72b6\u6001",center:"\u7f6e\u4e2d",autogotourl:"\u81ea\u52a8\u8f6c\u81f3 URL","shockwave_options":"Shockwave \u9009\u9879","rmp_options":"Real Media Player \u9009\u9879","wmp_options":"Windows Media Player \u9009\u9879","qt_options":"Quick Time \u9009\u9879","flash_options":"Flash \u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cn_dlg.js
new file mode 100644
index 000000000..6c559464b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6\u4f4d\u7f6e/URL",advanced:"\u9ad8\u7ea7",general:"\u5e38\u89c4",title:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5f0f\u5a92\u4f53","align_top_left":"\u5de6\u4e0a","align_center":"\u5c45\u4e2d","align_left":"\u5c45\u5de6","align_bottom":"\u5c45\u4e0b","align_right":"\u5c45\u53f3","align_top":"\u5c45\u4e0a","qt_stream_warn":"\u6d41\u5a92\u4f53\u7684RTSP\u8d44\u6e90\u5e94\u6dfb\u52a0\u5230\u5728\u9ad8\u7ea7\u9009\u9879\u5361\u7684Qt src\u5b57\u6bb5\u3002\\ n\u60a8\u4e5f\u53ef\u4ee5\u6dfb\u52a0\u975e\u6d41\u5a92\u4f53\u7248\u672c\u7684",qtsrc:"QuickTime\u6e90\u6587\u4ef6",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u7f29\u653e\u81f3\u5782\u76f4\u5bf9\u9f50",swstretchhalign:"\u7f29\u653e\u81f3\u6c34\u5e73\u5bf9\u9f50",swstretchstyle:"\u7f29\u653e\u6837\u5f0f",scriptcallbacks:"\u811a\u672c\u8fd4\u56de","align_top_right":"\u53f3\u4e0a",uimode:"\u9762\u677f\u6a21\u5f0f",rate:"\u6bd4\u7279\u7387",playcount:"\u64ad\u653e\u6b21\u6570",defaultframe:"\u9884\u8bbe\u753b\u9762",currentposition:"\u5f53\u524d\u4f4d\u7f6e",currentmarker:"\u5f53\u524d\u6807\u8bc6",captioningid:"\u5b57\u5e55\u6807\u8bc6",baseurl:"\u57fa\u672cURL",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u89c6\u7a97\u64ad\u653e",stretchtofit:"\u7f29\u653e\u81f3\u6700\u4f73\u5927\u5c0f",mute:"\u9759\u97f3",invokeurls:"\u5f15\u7528\u7684 URLs",fullscreen:"\u5168\u5c4f",enabled:"\u53ef\u7528",autostart:"\u81ea\u52a8\u64ad\u653e",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"\u963b\u585e\u901f\u5ea6",href:"\u8d85\u94fe\u63a5",endtime:"\u5f00\u59cb\u65f6\u95f4",starttime:"\u7ed3\u675f\u65f6\u95f4",enablejavascript:"\u542f\u7528JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u9010\u5e27\u64ad\u653e",kioskmode:"Kiosk\u6a21\u5f0f",controller:"\u63a7\u5236\u5668",menu:"\u663e\u793a\u83dc\u5355",loop:"\u5faa\u73af",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd","class_name":"\u7c7b\u522b",name:"\u540d\u79f0",id:"Id\u7f16\u53f7",type:"\u5a92\u4f53\u7c7b\u578b",size:"\u5c3a\u5bf8",preview:"\u9884\u89c8","constrain_proportions":"\u7ea6\u675f\u6bd4\u4f8b",controls:"\u63a7\u4ef6",numloop:"\u5faa\u73af\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"\u81ea\u52a8\u94fe\u63a5",liveconnect:"SWLiveConnect\u5c5e\u6027",flashvars:"Flash\u53c2\u6570",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f",wmode:"\u7a97\u53e3\u6a21\u5f0f",salign:"SAlign\u53c2\u6570",align:"\u5bf9\u9f50",scale:"\u7f29\u653e",quality:"\u54c1\u8d28",shuffle:"\u968f\u673a",prefetch:"\u9884\u8f7d",nojava:"\u5173\u95edjava",maintainaspect:"\u9501\u5b9a\u6bd4\u4f8b",imagestatus:"\u56fe\u7247\u72b6\u6001",center:"\u5c45\u4e2d",autogotourl:"\u81ea\u52a8\u8f6c\u81f3 URL","shockwave_options":"Shockwave\u9009\u9879","rmp_options":"Real media player\u9009\u9879","wmp_options":"Windows media player\u9009\u9879","qt_options":"Quicktime\u9009\u9879","flash_options":"Flash\u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b",flash:"Flash",quicktime:"Quicktime","embedded_audio_options":"\u5185\u5d4c\u97f3\u9891\u9009\u9879",windowsmedia:"Windows media",realmedia:"Real media",shockwave:"Shockwave",audio:"\u97f3\u9891",video:"\u89c6\u9891","html5_video_options":"HTML5 Video\u9009\u9879",altsource1:"\u66ff\u4ee3\u6765\u6e901",altsource2:"\u66ff\u4ee3\u6765\u6e902",preload:"\u9884\u8f7d",poster:"\u6807\u8bed",source:"\u6e90\u4ee3\u7801","html5_audio_options":"\u97f3\u9891\u9009\u9879","preload_none":"\u4e0d\u8fdb\u884c\u9884\u8f7d","preload_metadata":"\u9884\u8f7d\u89c6\u9891\u5143\u6570\u636e","preload_auto":"\u8ba9\u7528\u6237\u7684\u6d4f\u89c8\u5668\u51b3\u5b9a",iframe:"Iframe",embeddedaudio:"\u5185\u5d4c\u97f3\u9891"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cs_dlg.js
new file mode 100644
index 000000000..b1268617f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.media_dlg',{list:"Seznam",file:"Soubor/URL",advanced:"Roz\u0161\u00ed\u0159en\u00e9",general:"Obecn\u00e9",title:"Vlo\u017eit/upravit vkl\u00e1dan\u00e1 m\u00e9dia","align_top_left":"Nahoru vlevo","align_center":"Na st\u0159ed","align_left":"Vlevo","align_bottom":"Dol\u016f","align_right":"Vpravo","align_top":"Nahoru","qt_stream_warn":"Streamovan\u00e9 rtsp zdroje mohou b\u00fdt p\u0159id\u00e1ny do pole \'Soubor/URL streamu pro QT\' na z\u00e1lo\u017ece \'Roz\u0161\u00ed\u0159en\u00e9\'.\nYM\u016f\u017eete tak\u00e9 p\u0159idat nestreamovanou verzi do pole \'Soubor/URL\'.",qtsrc:"Soubor/URL streamu pro QT",progress:"Pr\u016fb\u011bh",sound:"Zvuk",swstretchvalign:"Zarovn\u00e1n\u00ed vert. rozta\u017een\u00ed",swstretchhalign:"Zarovn\u00e1n\u00ed horiz. rozta\u017een\u00ed",swstretchstyle:"Styl rozta\u017een\u00ed",scriptcallbacks:"Skripty zp\u011btn\u00fdch vol\u00e1n\u00ed","align_top_right":"Nahoru vpravo",uimode:"Re\u017eim ovl\u00e1dac\u00edho panelu",rate:"Relativn\u00ed rychlost",playcount:"Po\u010det p\u0159ehr\u00e1n\u00ed",defaultframe:"V\u00fdchoz\u00ed sn\u00edmek",currentposition:"Aktu\u00e1ln\u00ed pozice",currentmarker:"Aktu\u00e1ln\u00ed z\u00e1lo\u017eka",captioningid:"ID popisku m\u00e9dia",baseurl:"Z\u00e1kladn\u00ed URL",balance:"Vyv\u00e1\u017een\u00ed",windowlessvideo:"Video bez okna",stretchtofit:"Rozt\u00e1hnout do okna",mute:"Ztlumit",invokeurls:"Po\u017eadovat URL",fullscreen:"Cel\u00e1 obrazovka",enabled:"Povolit ovl\u00e1dac\u00ed panel",autostart:"Automatick\u00e9 spu\u0161t\u011bn\u00ed",volume:"Hlasitost",target:"C\u00edl",qtsrcchokespeed:"Sn\u00ed\u017een\u00ed rychlosti",href:"Odkaz",endtime:"\u010cas ukon\u010den\u00ed",starttime:"Po\u010d\u00e1te\u010dn\u00ed \u010das",enablejavascript:"Povolit Javascript",correction:"Bez korekc\u00ed",targetcache:"C\u00edlov\u00e1 mezipam\u011b\u0165",playeveryframe:"P\u0159ehr\u00e1t ka\u017ed\u00fd sn\u00edmek",kioskmode:"Zak\u00e1zat ukl\u00e1d\u00e1n\u00ed",controller:"Ovl\u00e1dac\u00ed panel",menu:"Zobrazit nab\u00eddku",loop:"Opakov\u00e1n\u00ed",play:"Automatick\u00e9 p\u0159ehr\u00e1v\u00e1n\u00ed",hspace:"Horizont\u00e1ln\u00ed odsazen\u00ed",vspace:"Vertik\u00e1ln\u00ed odsazen\u00ed","class_name":"T\u0159\u00edda",name:"N\u00e1zev",id:"ID",type:"Typ",size:"Rozm\u011bry",preview:"N\u00e1hled","constrain_proportions":"Zachovat proporce",controls:"Ovl\u00e1dac\u00ed panel",numloop:"Po\u010det opakov\u00e1n\u00ed",console:"Konzola",cache:"Mezipam\u011b\u0165",autohref:"Automatick\u00e9 na\u010dten\u00ed",liveconnect:"Spustit Javu (SWLiveConnect)",flashvars:"Parametry (Flashvars)",base:"Z\u00e1kladn\u00ed slo\u017eka",bgcolor:"Pozad\u00ed",wmode:"Re\u017eim okna",salign:"Zarovn\u00e1n\u00ed okna",align:"Zarovn\u00e1n\u00ed",scale:"Pom\u011br",quality:"Kvalita",shuffle:"N\u00e1hodn\u011b",prefetch:"P\u0159edna\u010dten\u00ed",nojava:"Nespout\u011bt Javu",maintainaspect:"Zachovat pom\u011br stran",imagestatus:"Stav obrazu",center:"Na st\u0159ed",autogotourl:"Automatick\u00fd p\u0159echod na URL","shockwave_options":"Mo\u017enosti Shockwave","rmp_options":"Mo\u017enosti p\u0159ehr\u00e1va\u010de Real media","wmp_options":"Mo\u017enosti p\u0159ehr\u00e1va\u010de Windows media","qt_options":"Mo\u017enosti Quicktime","flash_options":"Mo\u017enosti Flashe",hidden:"Skr\u00fdt","align_bottom_left":"Dol\u016f vlevo","align_bottom_right":"Dol\u016f vpravo",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Volby vlo\u017een\u00e9ho audio souboru",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Mo\u017enosti HTML5 video",altsource1:"Alternativn\u00ed zdroj 1",altsource2:"Alternativn\u00ed zdroj 2",preload:"P\u0159edna\u010d\u00edst",poster:"Obr\u00e1zek (zobraz\u00ed se p\u0159i nedostupnosti videa)",source:"Zdroj","html5_audio_options":"Parametry zvuku","preload_none":"Nena\u010d\u00edtat p\u0159edem","preload_metadata":"Na\u010d\u00edst video metadata p\u0159edem","preload_auto":"Ur\u010d\u00ed prohl\u00ed\u017ee\u010d",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cy_dlg.js
new file mode 100644
index 000000000..122a78fe9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.media_dlg',{list:"Rhestr",file:"Ffeil/URL",advanced:"Uwch",general:"Cyffredinol",title:"Mewnosod/Golygu Cyfrwng wedi\'i Fewnosod","align_top_left":"Pen Chwith","align_center":"Canol","align_left":"Chwith","align_bottom":"Gwaelod","align_right":"Dde","align_top":"Pen","qt_stream_warn":"Dylai adnoddau RTSP ffrydiedig gael eu hychwanegu i\'r maes Ffynhonnell QT o dan y tab Uwch.\nDylech chi hefyd ychwanegu fersiwn heb ffrydio i\'r maes Ffynhonnell.",qtsrc:"Ffynhonnell QT",progress:"Cynnydd",sound:"Sain",swstretchvalign:"Ymestyn Aliniad Fertigol",swstretchhalign:"Ymestyn Aliniad Llorweddol",swstretchstyle:"Arddull Ymestyn",scriptcallbacks:"Sgriptiau N\u00f4l-Galw ","align_top_right":"Pen Dde",uimode:"Modd UI",rate:"Cyfradd",playcount:"Cyfrif Chwarae",defaultframe:"Ffr\u00e2m Ddiofyn",currentposition:"Lleoliad Cyfredol",currentmarker:"Marciwr Cyfredol",captioningid:"Id Penawdu",baseurl:"URL y B\u00f4n",balance:"Cydbwysedd",windowlessvideo:"Fideo Heb-Ffenest",stretchtofit:"Ymestyn i Ffitio",mute:"Mudo",invokeurls:"Defnyddio URLs",fullscreen:"Sgrin Llawn",enabled:"Galluogwyd",autostart:"Awto Cychwyn",volume:"Seinfannedd",target:"Targed",qtsrcchokespeed:"Cyflymder Tagu",href:"HREF",endtime:"Amser Gorffen",starttime:"Amser Dechrau",enablejavascript:"Galluogi JavaScript",correction:"Dim Cywiriad",targetcache:"Storfa Targed",playeveryframe:"Chwarae Pob Ffr\u00e2m",kioskmode:"Modd Ciosg",controller:"Rheolydd",menu:"Dangos Dewislen",loop:"Cylchu",play:"Awto Chwarae",hspace:"Gofod Llorweddol",vspace:"Gofod Fertigol","class_name":"Dosbarth",name:"Enw",id:"ID",type:"Math",size:"Dimensiynau",preview:"Rhagolwg","constrain_proportions":"Gorfodi Cyfranedd",controls:"Rheolyddion",numloop:"Nifer y Cylchau",console:"Consol",cache:"Storfa",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Sail",bgcolor:"Cefndir",wmode:"Modd-W",salign:"Alinio-S",align:"Alinio",scale:"Graddfa",quality:"Ansawdd",shuffle:"Cymysgu",prefetch:"Prefetch",nojava:"Dim Java",maintainaspect:"Cadw\'r Agwedd",imagestatus:"Statws y Ddelwedd",center:"Canol",autogotourl:"URL Diofyn","shockwave_options":"Opsiynau Shockwave","rmp_options":"Opsiynau Real Media Player","wmp_options":"Opsiynau Windows Media Player","qt_options":"Opsiynau Quicktime","flash_options":"Opsiynau Flash",hidden:"Cudd","align_bottom_left":"Gwaelod Chwith","align_bottom_right":"Gwaelod Dde",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opsiynau Sain wedi\'i Fewnosod",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"sain",video:"fideo","html5_video_options":"Opsiynau Fideo HTML5",altsource1:"Ffynhonnell amgen 1",altsource2:"Ffynhonnell amgen 2",preload:"Cyn-lwytho",poster:"Postiwr",source:"Ffynhonnell","html5_audio_options":"Opsiynau Sain","preload_none":"Peidiwch \u00e2 Cyn-lwytho","preload_metadata":"Cyn-lwytho metadata fideo","preload_auto":"Gadael porwr y defnyddiwr i benderfynu",iframe:"iframe",embeddedaudio:"sainmewnosodiedig"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/da_dlg.js
new file mode 100644
index 000000000..d9a88d1fa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.media_dlg',{list:"Liste",file:"Fil/URL",advanced:"Avanceret",general:"Generelt",title:"Inds\u00e6t/rediger indlejret mediefil","align_top_left":"\u00d8verste venstre hj\u00f8rne","align_center":"Centreret","align_left":"Venstre","align_bottom":"Bund","align_right":"H\u00f8jret","align_top":"Top","qt_stream_warn":"Streamede rtsp resourcer skal tilf\u00f8jes til QT Src feltet under tabben avanceret.\nDu skal ogs\u00e5 tilf\u00f8je en ikke streamet version til Src feltet..",qtsrc:"QT Src",progress:"Fremskridt",sound:"Lyd",swstretchvalign:"Str\u00e6k V-justering",swstretchhalign:"Str\u00e6k H-justering",swstretchstyle:"Str\u00e6k stil",scriptcallbacks:"Script callbacks","align_top_right":"\u00d8verste h\u00f8jre hj\u00f8rne",uimode:"UI-tilstand",rate:"Vurder",playcount:"Afspil indhold",defaultframe:"Standard ramme",currentposition:"Aktuel position",currentmarker:"Aktuel mark\u00f8r",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Vinduesl\u00f8s video",stretchtofit:"Str\u00e6k for at tilpasse",mute:"Lydl\u00f8s",invokeurls:"Aktiver URL\'er",fullscreen:"Fuldsk\u00e6rm",enabled:"Valgt",autostart:"Afspil automatisk",volume:"Lydstyrke",target:"M\u00e5l",qtsrcchokespeed:"Choke-hastighed",href:"Href",endtime:"Sluttidspunkt",starttime:"Starttidspunkt",enablejavascript:"Tillad JavaScript",correction:"Ingen korrektion",targetcache:"M\u00e5l-cache",playeveryframe:"Afsplil alle rammer",kioskmode:"Kiosk-tilstand",controller:"Controller",menu:"Vis menu",loop:"Gentag",play:"Start",hspace:"H-afstand",vspace:"V-afstand","class_name":"Klasse",name:"Navn",id:"Id",type:"Type",size:"Dimensioner",preview:"Vis udskrift","constrain_proportions":"Bevar proportioner",controls:"Kontroller",numloop:"Antal loops",console:"Konsol",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Baggrund",wmode:"WMode",salign:"SAlign",align:"Juster",scale:"Skaler",quality:"Kvalitet",shuffle:"Bland",prefetch:"Forh\u00e5ndshent",nojava:"Ingen java",maintainaspect:"Bevar aspekt",imagestatus:"Billedstatus",center:"Center",autogotourl:"Auto g\u00e5 til URL","shockwave_options":"Shockwave options","rmp_options":"Real media player egenskaber","wmp_options":"Windows media player egenskaber","qt_options":"Quicktime egenskaber","flash_options":"Flash egenskaber",hidden:"Skjul","align_bottom_left":"Nederste venstre hj\u00f8rne","align_bottom_right":"\u00d8verste h\u00f8jre hj\u00f8rne",flash:"Flash",quicktime:"Quicktime","embedded_audio_options":"Indstillinger for indlejret audio",windowsmedia:"Windows Media",realmedia:"Realmedia",shockwave:"Shockwave",audio:"Lyd",video:"Video","html5_video_options":"HTML5 Video Indstillinger",altsource1:"Alternativ kilde 1",altsource2:"Alternativ kilde 2",preload:"Forudindl\u00e6s",poster:"Poster",source:"Kilde","html5_audio_options":"Audio indstillinger","preload_none":"Preindl\u00e6s ikke","preload_metadata":"Preindl\u00e6s video metadata","preload_auto":"Lad brugerens browser v\u00e6lge",iframe:"iframe",embeddedaudio:"Indlejret lyd"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/de_dlg.js
new file mode 100644
index 000000000..6d0de767c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.media_dlg',{list:"Liste",file:"Datei/URL",advanced:"Erweitert",general:"Allgemein",title:"Multimedia-Inhalte einf\u00fcgen/bearbeiten","align_top_left":"Oben Links","align_center":"Zentriert","align_left":"Links","align_bottom":"Unten","align_right":"Rechts","align_top":"Oben","qt_stream_warn":"In den Erweiterten Einstellungen sollten im Feld \'QT Src\' gestreamte RTSP Resourcen hinzugef\u00fcgt werden.\nZus\u00e4tzlich sollten Sie dort auch eine nicht-gestreamte Resource angeben.",qtsrc:"Angabe zu QT Src",progress:"Fortschritt",sound:"Ton",swstretchvalign:"Stretch V-Ausrichtung",swstretchhalign:"Stretch H-Ausrichtung",swstretchstyle:"Stretch-Art",scriptcallbacks:"Script callbacks","align_top_right":"Oben Rechts",uimode:"UI Modus",rate:"Rate",playcount:"Z\u00e4hler",defaultframe:"Frame-Voreinstellung",currentposition:"Aktuelle Position",currentmarker:"Aktueller Marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Fensterloses Video",stretchtofit:"Anzeigefl\u00e4che an verf\u00fcgbaren Platz anpassen",mute:"Stumm",invokeurls:"Invoke URLs",fullscreen:"Vollbild",enabled:"Aktiviert",autostart:"Autostart",volume:"Lautst\u00e4rke",target:"Ziel",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Endzeitpunkt",starttime:"Startzeitpunkt",enablejavascript:"JavaScript aktivieren",correction:"Ohne Korrektur",targetcache:"Ziel zwischenspeichern",playeveryframe:"Jeden Frame abspielen",kioskmode:"Kioskmodus",controller:"Controller",menu:"Men\u00fc anzeigen",loop:"Wiederholung",play:"Automatisches Abspielen",hspace:"Horizontaler Abstand",vspace:"Vertikaler Abstand","class_name":"CSS-Klasse",name:"Name",id:"Id",type:"Typ",size:"Abmessungen",preview:"Vorschau","constrain_proportions":"Proportionen erhalten",controls:"Steuerung",numloop:"Anzahl Wiederholungen",console:"Konsole",cache:"Zwischenspeicher",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvariablen",base:"Base",bgcolor:"Hintergrund",wmode:"WMode",salign:"S-Ausrichtung",align:"Ausrichtung",scale:"Skalierung",quality:"Qualit\u00e4t",shuffle:"Zuf\u00e4llige Wiedergabe",prefetch:"Prefetch",nojava:"Kein Java",maintainaspect:"Bildverh\u00e4ltnis beibehalten",imagestatus:"Bildstatus",center:"Zentriert",autogotourl:"Auto goto URL","shockwave_options":"Shockwave-Optionen","rmp_options":"Optionen f\u00fcr Real Media Player","wmp_options":"Optionen f\u00fcr Windows Media Player","qt_options":"Quicktime-Optionen","flash_options":"Flash-Optionen",hidden:"Versteckt","align_bottom_left":"Unten Links","align_bottom_right":"Unten Rechts",flash:"Flash",quicktime:"QuickTime","embedded_audio_options":"Integrierte Audio Optionen",windowsmedia:"WindowsMedia",realmedia:"RealMedia",shockwave:"ShockWave",audio:"Audio",video:"Video","html5_video_options":"HTML5 Video Optionen",altsource1:"Alternative Quelle 1",altsource2:"Alternative Quelle 2",preload:"Preload",poster:"Poster",source:"Quelle","html5_audio_options":"Audio Optionen","preload_none":"Nicht vorladen","preload_metadata":"Video Metadaten vorladen","preload_auto":"Benutzer Browser entscheidet automatisch",iframe:"iFrame",embeddedaudio:"Audio (eingebunden)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/dv_dlg.js
new file mode 100644
index 000000000..25300221f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/el_dlg.js
new file mode 100644
index 000000000..157767dc1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.media_dlg',{list:"\u039b\u03af\u03c3\u03c4\u03b1",file:"\u0391\u03c1\u03c7\u03b5\u03af\u03bf/URL",advanced:"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2",general:"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac",title:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03c9\u03bc\u03ad\u03bd\u03c9\u03bd media","align_top_left":"\u03a0\u03ac\u03bd\u03c9 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","align_center":"\u039a\u03ad\u03bd\u03c4\u03c1\u03bf","align_left":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","align_bottom":"\u039a\u03ac\u03c4\u03c9","align_right":"\u0394\u03b5\u03be\u03b9\u03ac","align_top":"\u03a0\u03ac\u03bd\u03c9","qt_stream_warn":"\u03a0\u03b7\u03b3\u03ad\u03c2 \u03c1\u03bf\u03ce\u03bd rtsp \u03b8\u03b1 \u03c0\u03c1\u03ad\u03c0\u03b5\u03b9 \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c4\u03b5\u03b8\u03bf\u03cd\u03bd \u03c3\u03c4\u03bf \u03c0\u03b5\u03b4\u03af\u03bf \u03a0\u03b7\u03b3\u03ae QT \u03ba\u03ac\u03c4\u03c9 \u03b1\u03c0\u03cc \u03c4\u03b7\u03bd \u03ba\u03b1\u03c1\u03c4\u03ad\u03bb\u03b1 \u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2.\n\u0395\u03c0\u03af\u03c3\u03b7\u03c2 \u03ba\u03b1\u03bb\u03cc \u03b8\u03b1 \u03ae\u03c4\u03b1\u03bd \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03b8\u03ad\u03c3\u03b5\u03c4\u03b5 \u03bc\u03b9\u03b1 \u03b1\u03c0\u03bb\u03ae (\u03cc\u03c7\u03b9 \u03c1\u03bf\u03ae\u03c2) \u03c0\u03b7\u03b3\u03ae..",qtsrc:"\u03a0\u03b7\u03b3\u03ae \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5",progress:"\u03a0\u03c1\u03cc\u03bf\u03b4\u03bf\u03c2",sound:"\u0389\u03c7\u03bf\u03c2",swstretchvalign:"\u039a\u03b1\u03c4\u03b1\u03ba\u03cc\u03c1\u03c5\u03c6\u03b7 \u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7",swstretchhalign:"\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7",swstretchstyle:"\u03a3\u03c4\u03c5\u03bb \u03b5\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7\u03c2",scriptcallbacks:"Script callbacks","align_top_right":"\u03a0\u03ac\u03bd\u03c9 \u03b4\u03b5\u03be\u03b9\u03ac",uimode:"\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 UI",rate:"\u03a1\u03c5\u03b8\u03bc\u03cc\u03c2",playcount:"\u03a0\u03cc\u03c3\u03b5\u03c2 \u03c6\u03bf\u03c1\u03ad\u03c2 \u03b8\u03b1 \u03c0\u03b1\u03af\u03be\u03b5\u03b9",defaultframe:"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf \u03ba\u03b1\u03c1\u03ad",currentposition:"\u03a4\u03c1\u03ad\u03c7\u03bf\u03c5\u03c3\u03b1 \u03b8\u03ad\u03c3\u03b7",currentmarker:"\u03a4\u03c1\u03ad\u03c7\u03bf\u03bd \u03c3\u03b7\u03bc\u03ac\u03b4\u03b9",captioningid:"Captioning id",baseurl:"URL \u03b2\u03ac\u03c3\u03b7\u03c2",balance:"\u0399\u03c3\u03bf\u03c1\u03c1\u03bf\u03c0\u03af\u03b1",windowlessvideo:"\u0392\u03af\u03bd\u03c4\u03b5\u03bf \u03c7\u03c9\u03c1\u03af\u03c2 \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf",stretchtofit:"\u0395\u03c0\u03ad\u03ba\u03c4\u03b1\u03c3\u03b7 \u03ce\u03c3\u03c4\u03b5 \u03bd\u03b1 \u03c7\u03c9\u03c1\u03ad\u03c3\u03b5\u03b9",mute:"\u03a3\u03af\u03b3\u03b1\u03c3\u03b7",invokeurls:"\u039a\u03bb\u03ae\u03c3\u03b7 URLs",fullscreen:"\u03a0\u03bb\u03ae\u03c1\u03b7\u03c2 \u03bf\u03b8\u03cc\u03bd\u03b7",enabled:"\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",autostart:"\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7 \u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7",volume:"\u0388\u03bd\u03c4\u03b1\u03c3\u03b7",target:"\u03a3\u03c4\u03cc\u03c7\u03bf\u03c2",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u03a7\u03c1\u03cc\u03bd\u03bf\u03c2 \u03bb\u03ae\u03be\u03b7\u03c2",starttime:"\u03a7\u03c1\u03cc\u03bd\u03bf\u03c2 \u03ad\u03bd\u03b1\u03c1\u03be\u03b7\u03c2",enablejavascript:"\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 JavaScript",correction:"\u03a7\u03c9\u03c1\u03af\u03c2 \u03b4\u03b9\u03cc\u03c1\u03b8\u03c9\u03c3\u03b7",targetcache:"\u039c\u03bd\u03ae\u03bc\u03b7 cache \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",playeveryframe:"\u03a0\u03b1\u03af\u03be\u03b9\u03bc\u03bf \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03ba\u03b1\u03c1\u03ad",kioskmode:"\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 Kiosk",controller:"\u0395\u03bb\u03b5\u03b3\u03ba\u03c4\u03ae\u03c2",menu:"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03bc\u03b5\u03bd\u03bf\u03cd",loop:"\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7",play:"\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03bf \u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7",hspace:"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1",vspace:"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03ac\u03b8\u03b5\u03c4\u03b7","class_name":"\u039a\u03bb\u03ac\u03c3\u03b7",name:"\u038c\u03bd\u03bf\u03bc\u03b1",id:"Id",type:"\u03a4\u03cd\u03c0\u03bf\u03c2",size:"\u0394\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2",preview:"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7","constrain_proportions":"\u0394\u03b9\u03b1\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7 \u03b1\u03bd\u03b1\u03bb\u03bf\u03b3\u03af\u03b1\u03c2 \u03c0\u03bb. - \u03cd\u03c8\u03bf\u03c5\u03c2",controls:"\u03a7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae\u03c1\u03b9\u03b1",numloop:"\u03a0\u03cc\u03c3\u03b5\u03c2 \u03c6\u03bf\u03c1\u03ad\u03c2 \u03b8\u03b1 \u03c0\u03b1\u03af\u03be\u03b5\u03b9",console:"\u039a\u03bf\u03bd\u03c3\u03cc\u03bb\u03b1",cache:"\u039c\u03bd\u03ae\u03bc\u03b7 cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"\u039c\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ad\u03c2 Flash",base:"\u0392\u03ac\u03c3\u03b7",bgcolor:"\u03a6\u03cc\u03bd\u03c4\u03bf",wmode:"WMode",salign:"SAlign",align:"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",scale:"\u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1",quality:"\u03a0\u03bf\u03b9\u03cc\u03c4\u03b7\u03c4\u03b1",shuffle:"\u03a4\u03c5\u03c7\u03b1\u03af\u03b1 \u03c3\u03b5\u03b9\u03c1\u03ac",prefetch:"\u03a0\u03c1\u03bf\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7",nojava:"\u03a7\u03c9\u03c1\u03af\u03c2 java",maintainaspect:"\u0394\u03b9\u03b1\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7 \u03b1\u03bd\u03b1\u03bb\u03bf\u03b3\u03af\u03b1\u03c2 \u03c0\u03bb. - \u03cd\u03c8\u03bf\u03c5\u03c2",imagestatus:"\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2",center:"\u039a\u03ad\u03bd\u03c4\u03c1\u03bf",autogotourl:"\u0391\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7 \u03bc\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf URL","shockwave_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 Shockwave","rmp_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 Real media player","wmp_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 Windows media player","qt_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 Quicktime","flash_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 Flash",hidden:"\u039a\u03c1\u03c5\u03c6\u03cc","align_bottom_left":"\u039a\u03ac\u03c4\u03c9 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","align_bottom_right":"\u039a\u03ac\u03c4\u03c9 \u03b4\u03b5\u03be\u03b9\u03ac","html5_video_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 HTML5 Video",altsource1:"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03c0\u03b7\u03b3\u03ae 1",altsource2:"\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u03c0\u03b7\u03b3\u03ae 2",preload:"\u03a0\u03c1\u03bf\u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7",poster:"\u0391\u03c6\u03af\u03c3\u03b1",source:"\u03a0\u03b7\u03b3\u03ae","html5_audio_options":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2 \u03ae\u03c7\u03bf\u03c5","embedded_audio_options":"Embedded Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/en_dlg.js
new file mode 100644
index 000000000..b247f85cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right",flash:"",quicktime:"","embedded_audio_options":"Embedded Audio Options",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/eo_dlg.js
new file mode 100644
index 000000000..73b1fb956
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.media_dlg',{list:"Listo",file:"Dosiero/Adreso",advanced:"Sperta",general:"\u0108efa",title:"Enmeti/Redakti enhavon enkonstruitan","align_top_left":"Supre-maldekstre","align_center":"Meze","align_left":"Maldekstre","align_bottom":"Sube","align_right":"Dekstre","align_top":"Supre","qt_stream_warn":"Fluoj de risurcoj rtsp devas esti aldonitaj al la kampo QT Src en la Sperta Re\u011dimo.\nVersio sen fluo anka\u016d devas esti aldonita al la kampo Src.",qtsrc:"QT Src",progress:"Progreso",sound:"Sono",swstretchvalign:"Devigi V-Liniigon",swstretchhalign:"Devigi H-Liniigon",swstretchstyle:"Devigi Stilon",scriptcallbacks:"Revokojn de skriptoj","align_top_right":"Supre-dekstre",uimode:"UI-re\u011dimo",rate:"Rapido",playcount:"Kalkulo de a\u016dskultantoj",defaultframe:"Defa\u016dlta kadro",currentposition:"Aktuala pozicio",currentmarker:"Aktuala markilo",captioningid:"ID de subteksto",baseurl:"Baza URL",balance:"Stereo",windowlessvideo:"Video sen fenestro",stretchtofit:"Etendi",mute:"Sen sono",invokeurls:"Voki URL-oj",fullscreen:"Plenekrane",enabled:"Aktiva",autostart:"A\u016dtomata starto",volume:"La\u016dteco",target:"Celo",qtsrcchokespeed:"Malrapidigi",href:"Ligilo",endtime:"Tempo de fino",starttime:"Tempo de komenco",enablejavascript:"Aktivigi JavaScript-on",correction:"Sen correktoj",targetcache:"Cela ka\u015dmemoro",playeveryframe:"Ludi \u0109iujn kadrojn",kioskmode:"Kioskre\u011dimo",controller:"Kontrolilo",menu:"Montri menuon",loop:"A\u016dtomata ripetado",play:"A\u016dtomata starto",hspace:"Horizontala spaco",vspace:"Verticala spaco","class_name":"Klaso",name:"Nomo",id:"Id",type:"Tipo",size:"Dimensioj",preview:"Anta\u016dvido","constrain_proportions":"Konservi proporcion",controls:"Komandoj",numloop:"Ripetado",console:"Konzolo",cache:"Ka\u015dmemoro",autohref:"A\u016dtoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Bazo",bgcolor:"Fono",wmode:"WMode",salign:"SAlign",align:"Liniigo",scale:"Skalo",quality:"Kvalito",shuffle:"Hazarda ordo",prefetch:"Anta\u016dvenigi",nojava:"Sen Java",maintainaspect:"Konservi aspekton",imagestatus:"Stato de bildo",center:"Centro",autogotourl:"A\u016dtomate malfermi adreson","shockwave_options":"Agordoj de Shockwave","rmp_options":"Agordoj de Real Media Player","wmp_options":"Agordoj de Windows Media Player","qt_options":"Agordoj de Quicktime","flash_options":"Agordoj de Flash",hidden:"Ka\u015dita","align_bottom_left":"Sube-maldekstre","align_bottom_right":"Sube-dekstre","html5_video_options":"Agordoj pri HTML5-video",altsource1:"Alternativa kodo 1",altsource2:"Alternativa kodo 2",preload:"Anta\u016d\u015dargi",poster:"Afi\u015do",source:"Fonto","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/es_dlg.js
new file mode 100644
index 000000000..4d84bb156
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.media_dlg',{list:"Lista",file:"Archivo/URL",advanced:"Avanzado",general:"General",title:"Insertar/editar medio embebido","align_top_left":"Arriba Izda.","align_center":"Centrado","align_left":"Izquierda","align_bottom":"Debajo","align_right":"Derecha","align_top":"Arriba","qt_stream_warn":"Los recursos rtsp de Streaming deber\u00edan a\u00f1adirse en el campo QT Src de la pesta\u00f1a avanzada.\nAdem\u00e1s deber\u00eda a\u00f1adir una versi\u00f3n no Streaming en el campo Src.",qtsrc:"QT Src",progress:"Progreso",sound:"Sonido",swstretchvalign:"Alin. V. Estiramiento",swstretchhalign:"Alin. H. Estiramiento",swstretchstyle:"Estilo estiramiento",scriptcallbacks:"Script callbacks","align_top_right":"Arriba Dcha.",uimode:"Modo UI",rate:"Ratio",playcount:"Cuantas reproducciones",defaultframe:"Frame predet.",currentposition:"Posici\u00f3n actual",currentmarker:"Marcador actual",captioningid:"Captioning id",baseurl:"URL Base",balance:"Balance",windowlessvideo:"Video sin ventana",stretchtofit:"Estirar para ajustar",mute:"Silencio",invokeurls:"Invocar URLs",fullscreen:"Pantalla Completa",enabled:"Habilitado",autostart:"Comienzo Autom\u00e1tico",volume:"Volumen",target:"Target",qtsrcchokespeed:"Vel. de choque",href:"Href",endtime:"Fin",starttime:"Inicio",enablejavascript:"Habilitar JavaScript",correction:"Sin correci\u00f3n",targetcache:"Cach\u00e9 de destino",playeveryframe:"Reproducir todo los frames",kioskmode:"Modo Kiosko",controller:"Controlador",menu:"Mostrar Men\u00fa",loop:"Repetitivo",play:"Comienzo Autom\u00e1tico",hspace:"H-Space",vspace:"V-Space","class_name":"Clase",name:"Nombre",id:"Id",type:"Tipo",size:"Dimensiones",preview:"Vista Previa","constrain_proportions":"Bloquear relaci\u00f3n de aspecto",controls:"Controles",numloop:"N\u00fam. repeticiones",console:"Consola",cache:"Cach\u00e9",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Variables de flash",base:"Base",bgcolor:"Fondo",wmode:"WMode",salign:"SAlign",align:"Alineaci\u00f3n",scale:"Escalar",quality:"Calidad",shuffle:"Aleatorio",prefetch:"Preb\u00fasqueda",nojava:"Sin java",maintainaspect:"Mantener aspecto",imagestatus:"Estado de imagen",center:"Centrado",autogotourl:"Ir a URL autom\u00e1t.","shockwave_options":"Opciones Shockwave","rmp_options":"Opciones Real media player","wmp_options":"Opciones Windows media player","qt_options":"Opciones Quicktime","flash_options":"Opciones Flash",hidden:"Oculto","align_bottom_left":"Debajo Izda.","align_bottom_right":"Debajo Dcha.",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opciones sobre Audio incrustado",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Opciones Video HTML5",altsource1:"Fuente alternativa 1",altsource2:"Fuente alternativa 2",preload:"Precarga",poster:"P\u00f3ster",source:"Fuente","html5_audio_options":"Opciones de audio","preload_none":"No recargar","preload_metadata":"Metadatos de la precarga de v\u00eddeo","preload_auto":"Permitir que decida el navegador del usuario",iframe:"iframe",embeddedaudio:"audio incrustado"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/et_dlg.js
new file mode 100644
index 000000000..0e305b0af
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.media_dlg',{list:"Nimekiri",file:"Fail/URL",advanced:"T\u00e4psem",general:"\u00dcldine",title:"Sisesta/muuda meediat","align_top_left":"\u00dcleval vasakul","align_center":"Keskel","align_left":"Vasakul","align_bottom":"All","align_right":"Paremal","align_top":"\u00dcleval","qt_stream_warn":"Striimitav variant peaks olema lisatud.",qtsrc:"QT Src",progress:"Progress",sound:"Heli",swstretchvalign:"Venita V-joondust",swstretchhalign:"Venita H-joondust",swstretchstyle:"Venita stiili",scriptcallbacks:"Skripti tagasikutse","align_top_right":"Pleval paremal",uimode:"UI Reziim",rate:"Hinda",playcount:"M\u00e4ngukorrad",defaultframe:"Vaikimisi raam",currentposition:"Antud positioon",currentmarker:"Antud marker",captioningid:"Tiitri ID",baseurl:"Baas URL",balance:"Tasakaal",windowlessvideo:"Aknata video",stretchtofit:"Venita sobivaks",mute:"Vaigista",invokeurls:"N\u00e4ita URL\u2019e",fullscreen:"T\u00e4isekraan",enabled:"Lubatud",autostart:"Auto-start",volume:"Valjudus",target:"Sihtm\u00e4rk",qtsrcchokespeed:"Kiirus",href:"Href",endtime:"L\u00f5pu aeg",starttime:"Stardi aeg",enablejavascript:"Luba JavaScript\u2019i",correction:"Parandust ei ole",targetcache:"Sihtm\u00e4rgi vahem\u00e4lu",playeveryframe:"M\u00e4ngi igat raami",kioskmode:"Kioski reziim",controller:"Kontrollija",menu:"N\u00e4ita men\u00fc\u00fcd",loop:"Auto-kordus",play:"Auto-start",hspace:"H-vahe",vspace:"V-vahe","class_name":"Klass",name:"Nime",id:"ID",type:"T\u00fc\u00fcp",size:"M\u00f5\u00f5dud",preview:"Eelvaade","constrain_proportions":"S\u00e4ilita proportsioon",controls:"Kontrollid",numloop:"Kordused",console:"Konsool",cache:"Vahem\u00e4lu",autohref:"Auto-HREF",liveconnect:"SWLive-\u00dchendus",flashvars:"Flashiv\u00e4rk",base:"Baas",bgcolor:"Taust",wmode:"WMoodus",salign:"SJoondus",align:"Joondus",scale:"M\u00f5\u00f5tkava",quality:"Kvaliteet",shuffle:"Sega",prefetch:"Prefetch",nojava:"Ilma java\u2019ta",maintainaspect:"S\u00e4ilitamise aspekt",imagestatus:"Pildi staatus",center:"Keskel",autogotourl:"Auto-URL","shockwave_options":"Shockwave\u2019i seaded","rmp_options":"Real media player\u2019i seaded","wmp_options":"Windows media player\u2019i seaded","qt_options":"Quicktime\u2019 seaded","flash_options":"Flash\u2019i seaded",hidden:"Peidetud","align_bottom_left":"All vasakul","align_bottom_right":"All paremal",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Manustatud heli valikud",windowsmedia:"windowsmedia",realmedia:"realmedia ",shockwave:"shockwave ",audio:"audio",video:"video","html5_video_options":"HTML5 video valikud",altsource1:"Alternatiivallikas 1",altsource2:"Alternatiivallikas 2",preload:"Eellae",poster:"Poster",source:"Allikas","html5_audio_options":"Heli valikud","preload_none":"\u00c4ra eellae","preload_metadata":"Eellae video metaandmed","preload_auto":"Lase kasutaja brauseril otsustada",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/eu_dlg.js
new file mode 100644
index 000000000..679338944
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.media_dlg',{list:"Zerrenda",file:"Fitxategia/URL",advanced:"Aurreratua",general:"Orokorra",title:"Sartu / editatu ahokatutako euskarria","align_top_left":"Goian ezkerran","align_center":"Erdian","align_left":"Ezkerrean","align_bottom":"Behean","align_right":"Eskuinean","align_top":"Goian","qt_stream_warn":"Streaming bidez ematen diren rtsp baliabideak aurreratuak fitxa n dagoen QT Src eremuan gehitu behar dira.\n Streaming gabeko bertsio bat ere gehitu beharko zenuke.",qtsrc:"QT Src",progress:"Aurrerapena",sound:"Soinua",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Goian eskuinean",uimode:"UI Modua",rate:"Rate",playcount:"Play count",defaultframe:"Lehenetsitako fotograma",currentposition:"Uneko posizioa",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balanzea",windowlessvideo:"Lehiogabeko bideoa",stretchtofit:"Neurrikoa izateko zabaldu",mute:"Ixilik",invokeurls:"URLa deitu",fullscreen:"Pantaila osoa",enabled:"Gaituta",autostart:"Automatikoki hasi",volume:"Bolumena",target:"Helburua",qtsrcchokespeed:"Talka abiadura",href:"Href",endtime:"Noiz bukatu",starttime:"Noiz hasi",enablejavascript:"Gaitu JavaScript",correction:"Zuzenketarik ez",targetcache:"Helburu katxea",playeveryframe:"Marko guztiak erreproduzitu",kioskmode:"Kiosko modua",controller:"Controller",menu:"Erakutsi menua",loop:"Begizta",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Klasea",name:"Izena",id:"Id",type:"Mota",size:"Tamaina",preview:"Aurrebista","constrain_proportions":"Itxura erlazioa blokeatu",controls:"Kontrolak",numloop:"Begizta kopurua",console:"Konsola",cache:"Katxea",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Oinarria",bgcolor:"Atzea",wmode:"WMode",salign:"SAlign",align:"Lerrokatu",scale:"Eskalatu",quality:"Kalitatea",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"Java ez",maintainaspect:"Itxura mantendu",imagestatus:"Irudi edoera",center:"Erdian",autogotourl:"Automatikoi joan URLra","shockwave_options":"Shockwave aukerak","rmp_options":"Real media player aukerak","wmp_options":"Windows media player aukerak","qt_options":"Quicktime aukerak","flash_options":"Flash aukerak",hidden:"Ezkutuan","align_bottom_left":"Behean ezkerrean","align_bottom_right":"Behean eskuinean","html5_video_options":"HTML5 bideo aukerak",altsource1:"Ordezko iturria 1",altsource2:"Ordezko iturria 2",preload:"Aurrekargatu",poster:"Posterra",source:"Iturria","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fa_dlg.js
new file mode 100644
index 000000000..13ac8b4f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.media_dlg',{list:"\u0644\u06cc\u0633\u062a",file:"\u0641\u0627\u06cc\u0644/\u0622\u062f\u0631\u0633 \u0648\u0628",advanced:"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647",general:"\u0639\u0645\u0648\u0645\u06cc",title:"\u062f\u0631\u062c / \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0631\u0633\u0627\u0646\u0647 \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647 (Embeded Media)","align_top_left":"\u0628\u0627\u0644\u0627 \u0686\u067e","align_center":"\u0648\u0633\u0637","align_left":"\u0686\u067e","align_bottom":"\u067e\u0627\u06cc\u06cc\u0646","align_right":"\u0631\u0627\u0633\u062a","align_top":"\u0628\u0627\u0644\u0627","qt_stream_warn":"\u0645\u0646\u0627\u0628\u0639 Streamed rtsp \u0628\u0627\u06cc\u062f \u062f\u0631 \u0628\u0631\u06af\u0647 (Tab) \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u062f\u0631 \u0641\u06cc\u0644\u062f \u0645\u0646\u0628\u0639 QT \u0627\u0636\u0627\u0641\u0647 \u0634\u0648\u062f.\n\u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0647\u0645\u0686\u0646\u06cc\u0646 \u06cc\u06a9 \u0646\u0633\u062e\u0647 \u063a\u06cc\u0631 streamed \u0631\u0627 \u062f\u0631 \u0641\u06cc\u0644\u062f \u0645\u0646\u0628\u0639 \u0627\u0636\u0627\u0641\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f..",qtsrc:"\u0645\u0646\u0628\u0639 QT",progress:"\u067e\u06cc\u0634\u0631\u0641\u062a",sound:"\u0635\u062f\u0627",swstretchvalign:"\u06a9\u0634\u06cc\u062f\u0646 \u062a\u0631\u0627\u0632 \u0639\u0645\u0648\u062f\u06cc",swstretchhalign:"\u06a9\u0634\u06cc\u062f\u0646 \u062a\u0631\u0627\u0632 \u0627\u0641\u0642\u06cc",swstretchstyle:"\u06a9\u0634\u06cc\u062f\u0646 \u0627\u0633\u062a\u0627\u06cc\u0644",scriptcallbacks:"\u0627\u0633\u06a9\u0631\u06cc\u067e\u062a Callbacks","align_top_right":"\u0628\u0627\u0644\u0627 \u0631\u0627\u0633\u062a",uimode:"\u062d\u0627\u0644\u062a UI",rate:"\u0646\u0631\u062e",playcount:"\u062a\u0639\u062f\u0627\u062f \u067e\u062e\u0634",defaultframe:"\u0641\u0631\u06cc\u0645 \u067e\u06cc\u0634\u0641\u0631\u0636",currentposition:"\u0645\u0648\u0642\u0639\u06cc\u062a \u0641\u0639\u0644\u06cc",currentmarker:"\u0646\u0634\u0627\u0646\u06af\u0631 \u0641\u0639\u0644\u06cc",captioningid:"\u0634\u0646\u0627\u0633\u0647 \u0639\u0646\u0648\u0627\u0646",baseurl:"\u0622\u062f\u0631\u0633 \u067e\u0627\u06cc\u0647",balance:"\u062a\u0648\u0627\u0632\u0646 (Balance)",windowlessvideo:"\u0648\u06cc\u062f\u0626\u0648\u06cc \u0628\u062f\u0648\u0646 \u067e\u0646\u062c\u0631\u0647",stretchtofit:"\u06a9\u0634\u06cc\u062f\u0646 \u062c\u0647\u062a \u06af\u0646\u062c\u0627\u0646\u062f\u0646 \u06a9\u0627\u0645\u0644",mute:"\u0628\u06cc \u0635\u062f\u0627",invokeurls:"\u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0622\u062f\u0631\u0633 \u0647\u0627",fullscreen:"\u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647",enabled:"\u0641\u0639\u0627\u0644 \u0634\u062f\u0647",autostart:"\u0634\u0631\u0648\u0639 \u0627\u062a\u0648\u0645\u0627\u062a\u06cc\u06a9",volume:"\u0628\u0644\u0646\u062f\u06cc \u0635\u062f\u0627",target:"\u0645\u0642\u0635\u062f (Target)",qtsrcchokespeed:"\u0633\u0631\u0639\u062a Choke",href:"HREF",endtime:"\u0632\u0645\u0627\u0646 \u067e\u0627\u06cc\u0627\u0646",starttime:"\u0632\u0645\u0627\u0646 \u0634\u0631\u0648\u0639",enablejavascript:"\u0641\u0639\u0627\u0644 \u0628\u0648\u062f\u0646 JavaScript",correction:"\u0628\u062f\u0648\u0646 \u062a\u0635\u062d\u06cc\u062d",targetcache:"\u06a9\u0634 \u0645\u0642\u0635\u062f (Target Cache)",playeveryframe:"\u067e\u062e\u0634 \u0647\u0631 \u0641\u0631\u06cc\u0645 (Frame)",kioskmode:"\u062d\u0627\u0644\u062a \u06a9\u06cc\u0648\u0633\u06a9",controller:"\u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647",menu:"\u0646\u0645\u0627\u06cc\u0634 \u0645\u0646\u0648",loop:"\u062d\u0644\u0642\u0647 (Loop)",play:"\u067e\u062e\u0634 \u0627\u062a\u0648\u0645\u0627\u062a\u06cc\u06a9",hspace:"\u0641\u0627\u0635\u0644\u0647 \u0627\u0641\u0642\u06cc",vspace:"\u0641\u0627\u0635\u0644\u0647 \u0639\u0645\u0648\u062f\u06cc","class_name":"\u06a9\u0644\u0627\u0633",name:"\u0646\u0627\u0645",id:"\u0634\u0646\u0627\u0633\u0647",type:"\u0646\u0648\u0639",size:"\u0627\u0628\u0639\u0627\u062f",preview:"\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634","constrain_proportions":"\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628",controls:"\u06a9\u0646\u062a\u0631\u0644 \u0647\u0627",numloop:"\u062a\u0639\u062f\u0627\u062f \u062d\u0644\u0642\u0647 \u0647\u0627",console:"\u06a9\u0646\u0633\u0648\u0644",cache:"\u06a9\u0634",autohref:"HREF \u0627\u062a\u0648\u0645\u0627\u062a\u06cc\u06a9",liveconnect:"\u0627\u0631\u062a\u0628\u0627\u0637 SWLive",flashvars:"\u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc Flash",base:"\u067e\u0627\u06cc\u0647 (Base)",bgcolor:"\u067e\u0633 \u0632\u0645\u06cc\u0646\u0647",wmode:"WMode",salign:"SAlign",align:"\u062a\u0631\u0627\u0632",scale:"\u0645\u0642\u06cc\u0627\u0633",quality:"\u06a9\u06cc\u0641\u06cc\u062a",shuffle:"\u062f\u0631 \u0647\u0645 \u0622\u0645\u06cc\u062e\u062a\u0647",prefetch:"\u067e\u06cc\u0634 \u0648\u0627\u06a9\u0634\u06cc",nojava:"\u0628\u062f\u0648\u0646 java",maintainaspect:"\u062d\u0641\u0638 \u062a\u0646\u0627\u0633\u0628 \u0648\u062c\u0648\u0647",imagestatus:"\u0648\u0636\u0639\u06cc\u062a \u062a\u0635\u0648\u06cc\u0631",center:"\u0648\u0633\u0637",autogotourl:"\u0631\u0641\u062a\u0646 \u0627\u062a\u0648\u0645\u0627\u062a\u06cc\u06a9 \u0628\u0647 URL","shockwave_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a Shockwave","rmp_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a Real media player","wmp_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a Windows media player","qt_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a Quicktime","flash_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a Flash",hidden:"\u0645\u062e\u0641\u06cc","align_bottom_left":"\u067e\u0627\u06cc\u06cc\u0646 \u0686\u067e","align_bottom_right":"\u067e\u0627\u06cc\u06cc\u0646 \u0631\u0627\u0633\u062a",flash:"flash",quicktime:"quicktime","embedded_audio_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0635\u062f\u0627\u06cc \u062c\u0627\u0633\u0627\u0632\u06cc \u0634\u062f\u0647",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"\u0635\u062f\u0627",video:"\u0648\u06cc\u062f\u0626\u0648","html5_video_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0648\u06cc\u062f\u0626\u0648\u06cc HTML5",altsource1:"\u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 1",altsource2:"\u0645\u0646\u0628\u0639 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 2",preload:"\u067e\u06cc\u0634\u200c \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc",poster:"\u067e\u0648\u0633\u062a\u0631",source:"\u0645\u0646\u0628\u0639","html5_audio_options":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0635\u062f\u0627","preload_none":"\u067e\u06cc\u0634 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0646\u06a9\u0646","preload_metadata":" \u067e\u06cc\u0634 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0648\u06cc\u062f\u0626\u0648\u06cc\u06cc","preload_auto":"\u062a\u0635\u0645\u06cc\u0645 \u0628\u0627 \u0645\u0631\u0648\u0631\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fi_dlg.js
new file mode 100644
index 000000000..2ac2fcac1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.media_dlg',{list:"Lista",file:"Tiedosto/URL",advanced:"Edistyneet",general:"Yleiset",title:"Lis\u00e4\u00e4/muokkaa upotettua mediaa","align_top_left":"Yl\u00e4-vasemmalla","align_center":"Keskell\u00e4","align_left":"Vasemmalla","align_bottom":"Alhaalla","align_right":"Oikealla","align_top":"Ylh\u00e4\u00e4ll\u00e4","qt_stream_warn":"Streamatut rtsp-resurssit tulisi lis\u00e4t\u00e4 QT Src -kentt\u00e4\u00e4n edistynyt-v\u00e4lilehdelle.\nSinun kannattaa lis\u00e4t\u00e4 my\u00f6s ei-streamattu versio Src-kentt\u00e4\u00e4n.",qtsrc:"QT Src",progress:"Eteneminen",sound:"\u00c4\u00e4ni",swstretchvalign:"Venyt\u00e4 pystysuunnassa",swstretchhalign:"Venyt\u00e4 vaakasuunnassa",swstretchstyle:"Venytystyyli",scriptcallbacks:"Skriptin takaisinkutsut","align_top_right":"Yl\u00e4-oikealla",uimode:"UI-moodi",rate:"Rate",playcount:"Toistolaskin",defaultframe:"Oletusruutu",currentposition:"T\u00e4m\u00e4nhetkinen sijainti",currentmarker:"T\u00e4m\u00e4nhetkinen merkki",captioningid:"Otsikointi-id",baseurl:"Perus URL-osoitteet",balance:"Tasapaino",windowlessvideo:"Ikkunaton video",stretchtofit:"Venyt\u00e4 sopimaan",mute:"Hiljennys",invokeurls:"Kutsu URL-osoitteet",fullscreen:"Kokoruutu",enabled:"P\u00e4\u00e4ll\u00e4",autostart:"Automaattinen aloitus",volume:"\u00c4\u00e4nen voimakkuus",target:"Kohde",qtsrcchokespeed:"Choke-nopeus",href:"Href",endtime:"Lopetusaika",starttime:"Aloitusaika",enablejavascript:"Salli JavaScript",correction:"Ei korjausta",targetcache:"Kohteen v\u00e4limuisti",playeveryframe:"Toista jokainen ruutu",kioskmode:"Kioskitila",controller:"Ohjain",menu:"N\u00e4yt\u00e4 valikko",loop:"Silmukka",play:"Automaattinen toisto",hspace:"Vaakatason tila",vspace:"Pystytason tila","class_name":"Luokka",name:"Nimi",id:"Tunniste",type:"Tyyppi",size:"Mitat",preview:"Esikatselu","constrain_proportions":"S\u00e4ilyt\u00e4 mittasuhteet",controls:"Kontrollit",numloop:"Toistojen m\u00e4\u00e4r\u00e4",console:"Konsoli",cache:"V\u00e4limuisti",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-muuttujat",base:"Perusta",bgcolor:"Tausta",wmode:"WMode",salign:"SAlign",align:"Tasaus",scale:"Skaala",quality:"Laatu",shuffle:"Sekoita",prefetch:"Esinouda",nojava:"Ei Javaa",maintainaspect:"S\u00e4ilyt\u00e4 kuvasuhde",imagestatus:"Kuvan tila",center:"Keskit\u00e4",autogotourl:"Mene automaattisesti URL:iin","shockwave_options":"Shockwaven asetukset","rmp_options":"Real media playerin asetukset","wmp_options":"Windows media playerin asetukset","qt_options":"Quicktimen asetukset","flash_options":"Flashin asetukset",hidden:"Piilotettu","align_bottom_left":"Ala-vasemmalla","align_bottom_right":"Ala-oikealla",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Upotetun \u00e4\u00e4nen asetukset",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"HTML5 videoasetukset",altsource1:"Vaihtoehtoinen l\u00e4hde 1",altsource2:"Vaihtoehtoinen l\u00e4hde 2",preload:"Esilataa",poster:"Posteri",source:"L\u00e4hde","html5_audio_options":"\u00c4\u00e4niasetukset","preload_none":"\u00c4l\u00e4 esilataa","preload_metadata":"Esilataa videon metatiedot","preload_auto":"Anna k\u00e4ytt\u00e4j\u00e4n selaimen p\u00e4\u00e4tt\u00e4\u00e4",iframe:"iframe",embeddedaudio:"upotettu audio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fr_dlg.js
new file mode 100644
index 000000000..90b0102dd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.media_dlg',{list:"Liste",file:"Fichier / URL",advanced:"Avanc\u00e9",general:"G\u00e9n\u00e9ral",title:"Ins\u00e9rer / \u00e9diter un fichier m\u00e9dia","align_top_left":"En haut \u00e0 gauche","align_center":"Centr\u00e9","align_left":"Gauche","align_bottom":"Bas","align_right":"Droite","align_top":"Haut","qt_stream_warn":"Les ressources rtsp en streaming doivent \u00eatre ajout\u00e9es au champ \u00ab Source QT \u00bb dans l\'onglet avanc\u00e9.\nVous devriez aussi ajouter une version n\'\u00e9tant pas en streaming au champ \u00ab source QT \u00bb.",qtsrc:"Source QT",progress:"Progression",sound:"Son",swstretchvalign:"Stretch vertical",swstretchhalign:"Stretch horizontal",swstretchstyle:"Stretch style",scriptcallbacks:"Callback de script","align_top_right":"En haut \u00e0 droite",uimode:"Mode UI",rate:"Taux",playcount:"Compteur",defaultframe:"Image par d\u00e9faut",currentposition:"Position actuelle",currentmarker:"Marqueur actuel",captioningid:"ID sous-titrage",baseurl:"Adresse de base",balance:"Balance",windowlessvideo:"Vid\u00e9o sans fen\u00eatre",stretchtofit:"\u00c9tendre pour adapter la taille",mute:"Muet",invokeurls:"Invoquer URLs",fullscreen:"Plein \u00e9cran",enabled:"Activ\u00e9",autostart:"Lire automatiquement",volume:"Volume",target:"Cible",qtsrcchokespeed:"D\u00e9bit maximum",href:"Href",endtime:"Fin",starttime:"D\u00e9but",enablejavascript:"Activer le JavaScript",correction:"Pas de correction",targetcache:"Cache cible",playeveryframe:"Jouer toutes les images",kioskmode:"Mode kiosque",controller:"Contr\u00f4leur",menu:"Afficher le menu",loop:"Lire en boucle",play:"Lecture automatique",hspace:"Espacement horizontal",vspace:"Espacement vertical","class_name":"Classe",name:"Nom",id:"Id",type:"Type",size:"Dimensions",preview:"Pr\u00e9visualisation","constrain_proportions":"Conserver les proportions",controls:"Contr\u00f4les",numloop:"Nombre de tours",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Variables flash",base:"Base",bgcolor:"Fond",wmode:"WMode",salign:"SAlign",align:"Alignement",scale:"\u00c9chelle",quality:"Qualit\u00e9",shuffle:"Al\u00e9atoire",prefetch:"Pr\u00e9chargement",nojava:"Pas java",maintainaspect:"Maintenir l\'aspect",imagestatus:"Statut de l\'image",center:"Centrer",autogotourl:"Aller automatiquement \u00e0 l\'URL","shockwave_options":"Options Shockwave","rmp_options":"Options Real media player","wmp_options":"Windows media player options","qt_options":"Options Quicktime","flash_options":"Options Flash",hidden:"Cach\u00e9","align_bottom_left":"En bas \u00e0 gauche","align_bottom_right":"En bas \u00e0 droite",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Options audio int\u00e9gr\u00e9es",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"vid\u00e9o","html5_video_options":"Options Vid\u00e9o HTML 5",altsource1:"Source alternative 1",altsource2:"Source alternative 2",preload:"Pr\u00e9chargement",poster:"Poster",source:"Source","html5_audio_options":"Options audio","preload_none":"Ne pas pr\u00e9charger","preload_metadata":"Pr\u00e9charger les m\u00e9tadonn\u00e9es vid\u00e9o","preload_auto":"Laisser le fureteur de l\'utilisateur d\u00e9cider",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/gl_dlg.js
new file mode 100644
index 000000000..c4848f39f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.media_dlg',{list:"Lista",file:"Arquivo/URL",advanced:"Avanzado",general:"Xeral",title:"Insertar/editar medio embebido","align_top_left":"Arriba Izda.","align_center":"Centrado","align_left":"Esquerda","align_bottom":"Abaixo","align_right":"Dereita","align_top":"Arriba","qt_stream_warn":"Os recursos rtsp de Streaming deber\u00edan engadirse no campo QT Src da pesta\u00f1a avanzada.\nAdem\u00e1is deber\u00eda engadir unha versi\u00f3n no Streaming no campo Src.",qtsrc:"QT Src",progress:"Progreso",sound:"Son",swstretchvalign:"Esturar ali\u00f1. V.",swstretchhalign:"Estirar ali\u00f1. H.",swstretchstyle:"Estilo estiramento",scriptcallbacks:"Script callbacks","align_top_right":"Arriba Dta.",uimode:"Modo UI",rate:"Relaci\u00f3n",playcount:"Cantas reproducci\u00f3ns",defaultframe:"Frame predet.",currentposition:"Posici\u00f3n actual",currentmarker:"Marcador actual",captioningid:"Id de lenda",baseurl:"URL Base",balance:"Balance",windowlessvideo:"Video sen vent\u00e1",stretchtofit:"Estirar pra axustar",mute:"Silencio",invokeurls:"Invocar URLs",fullscreen:"Pantalla Completa",enabled:"Habilitado",autostart:"Comezo Autom\u00e1tico",volume:"Volume",target:"Obxetivo",qtsrcchokespeed:"Vel. de choque",href:"Href",endtime:"Fin",starttime:"Inicio",enablejavascript:"Habilitar JavaScript",correction:"Sen correci\u00f3n",targetcache:"Obxetivo cache",playeveryframe:"Reproducir t\u00f3dolos frames",kioskmode:"Modo kiosco",controller:"Controller",menu:"Mostrar Men\u00fa",loop:"Repetitivo",play:"Comezo Autom\u00e1tico",hspace:"Espacio H.",vspace:"Espacio V.","class_name":"Clase",name:"Nome",id:"Id",type:"Tipo",size:"Tama\u00f1o",preview:"Vista Previa","constrain_proportions":"Bloquear proporci\u00f3ns",controls:"Controis",numloop:"N\u00fam. repetici\u00f3ns",console:"Consola",cache:"Cach\u00e9",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Fondo",wmode:"WMode",salign:"SAlign",align:"Ali\u00f1aci\u00f3n",scale:"Escala",quality:"Calidade",shuffle:"Aleatorio",prefetch:"PreBusca",nojava:"No java",maintainaspect:"Manter aspecto",imagestatus:"Estado de imaxe",center:"Centrado",autogotourl:"Ir a URL autom\u00e1t.","shockwave_options":"Opci\u00f3ns Shockwave","rmp_options":"Opci\u00f3ns Real media player","wmp_options":"Opci\u00f3ns Windows media player","qt_options":"Opci\u00f3ns Quicktime","flash_options":"Opci\u00f3ns Flash",hidden:"Oculto","align_bottom_left":"Abaixo Izda.","align_bottom_right":"Abaixo Dta.","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/gu_dlg.js
new file mode 100644
index 000000000..cecb0e3e8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/he_dlg.js
new file mode 100644
index 000000000..4bd005821
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.media_dlg',{list:"\u05e8\u05e9\u05d9\u05de\u05d4",file:"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5",advanced:"\u05de\u05ea\u05e7\u05d3\u05dd",general:"\u05db\u05dc\u05dc\u05d9",title:"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05e8\u05d8\u05d5\u05df","align_top_left":"\u05e9\u05de\u05d0\u05dc \u05dc\u05de\u05e2\u05dc\u05d4","align_center":"\u05de\u05e8\u05db\u05d6","align_left":"\u05dc\u05e9\u05de\u05d0\u05dc","align_bottom":"\u05dc\u05de\u05d8\u05d4","align_right":"\u05d9\u05de\u05d9\u05df","align_top":"\u05dc\u05de\u05e2\u05dc\u05d4","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..",qtsrc:"QT Src",progress:"\u05d4\u05ea\u05e7\u05d3\u05de\u05d5\u05ea",sound:"\u05e6\u05dc\u05d9\u05dc",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"\u05d9\u05de\u05d9\u05df \u05dc\u05de\u05e2\u05dc\u05d4",uimode:"\u05de\u05e6\u05d1 \u05ea\u05e6\u05d5\u05d2\u05d4",rate:"\u05e7\u05e6\u05d1",playcount:"\u05de\u05e1\u05e4\u05e8 \u05d4\u05e9\u05de\u05e2\u05d5\u05ea",defaultframe:"\u05e4\u05e8\u05d9\u05d9\u05dd \u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc",currentposition:"\u05de\u05d9\u05e7\u05d5\u05dd \u05e0\u05d5\u05db\u05d7\u05d9",currentmarker:"\u05e1\u05de\u05df \u05e0\u05d5\u05db\u05d7\u05d9",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"\u05de\u05ea\u05d7 \u05dc\u05d4\u05ea\u05d0\u05de\u05d4",mute:"\u05d4\u05e9\u05ea\u05e7",invokeurls:"Invoke URLs",fullscreen:"\u05de\u05e1\u05da \u05de\u05dc\u05d0",enabled:"\u05de\u05d5\u05e4\u05e2\u05dc",autostart:"\u05d4\u05ea\u05d7\u05dc \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea",volume:"\u05e2\u05d5\u05e6\u05de\u05d4",target:"\u05de\u05d8\u05e8\u05d4",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u05d6\u05de\u05df \u05e1\u05d9\u05d5\u05dd",starttime:"\u05d6\u05de\u05df \u05d4\u05ea\u05d7\u05dc\u05d4",enablejavascript:"\u05d0\u05e4\u05e9\u05e8 JavaScript",correction:"\u05dc\u05dc\u05d0 \u05ea\u05d9\u05e7\u05d5\u05df",targetcache:"Target cache",playeveryframe:"\u05e0\u05d2\u05df \u05db\u05dc \u05e4\u05e8\u05d9\u05d9\u05dd",kioskmode:"Kiosk mode",controller:"Controller",menu:"\u05d4\u05e6\u05d2\u05ea \u05ea\u05e4\u05e8\u05d9\u05d8",loop:"\u05e0\u05d2\u05d9\u05e0\u05d4 \u05de\u05d7\u05d6\u05d5\u05e8\u05d9\u05ea",play:"\u05e0\u05d2\u05d9\u05e0\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea \u05e2\u05dd \u05d4\u05d8\u05e2\u05d9\u05e0\u05d4",hspace:"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05d5\u05e4\u05e7\u05d9",vspace:"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05e0\u05db\u05d9","class_name":"\u05de\u05d7\u05dc\u05e7\u05d4",name:"\u05e9\u05dd",id:"Id",type:"\u05e1\u05d5\u05d2",size:"\u05e8\u05d5\u05d7\u05d1 \u05d5\u05d2\u05d5\u05d1\u05d4",preview:"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4","constrain_proportions":"\u05e9\u05de\u05d5\u05e8 \u05e2\u05dc \u05e4\u05e8\u05d5\u05e4\u05d5\u05e8\u05e6\u05d9\u05d5\u05ea",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"\u05de\u05e7\u05d5\u05e8",bgcolor:"\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2",wmode:"WMode",salign:"SAlign",align:"\u05d9\u05d9\u05e9\u05d5\u05e8",scale:"Scale",quality:"\u05d0\u05d9\u05db\u05d5\u05ea \u05d4\u05e1\u05e8\u05d8\u05d5\u05df",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"\u05de\u05e8\u05db\u05d6",autogotourl:"Auto goto URL","shockwave_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea Shockwave","rmp_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05e0\u05d2\u05df Real Media","wmp_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05de\u05d3\u05d9\u05d4 \u05e4\u05dc\u05d9\u05d9\u05e8","qt_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea Quicktime","flash_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05e4\u05dc\u05d0\u05e9",hidden:"Hidden","align_bottom_left":"\u05dc\u05de\u05d8\u05d4 \u05de\u05e9\u05de\u05d0\u05dc","align_bottom_right":"\u05dc\u05de\u05d8\u05d4 \u05de\u05d9\u05de\u05d9\u05df",flash:"Flash",quicktime:"quicktime","embedded_audio_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d0\u05d5\u05d3\u05d9\u05d5 \u05de\u05e9\u05d5\u05dc\u05d1",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d5\u05d9\u05d3\u05d0\u05d5 HTML5",altsource1:"\u05de\u05e7\u05d5\u05e8 \u05d7\u05dc\u05d5\u05e4\u05d9 1",altsource2:"\u05de\u05e7\u05d5\u05e8 \u05d7\u05dc\u05d5\u05e4\u05d9 2",preload:"Preload",poster:"\u05e4\u05d5\u05e1\u05d8\u05e8",source:"\u05de\u05e7\u05d5\u05e8","html5_audio_options":"\u05d0\u05e4\u05e9\u05e8\u05d5\u05d9\u05d5\u05ea \u05d0\u05d5\u05d3\u05d9\u05d5","preload_none":"Don\'t Preload","preload_metadata":"\u05d8\u05e2\u05df \u05de\u05d8\u05d4-\u05d8\u05d0\u05d2 \u05dc\u05d5\u05d5\u05d9\u05d3\u05d0\u05d5","preload_auto":"\u05d0\u05ea\u05df \u05dc\u05d3\u05e4\u05d3\u05e4\u05df \u05dc\u05d1\u05d7\u05d5\u05e8",iframe:"iframe",embeddedaudio:"embeddedaudio "}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hi_dlg.js
new file mode 100644
index 000000000..ea5656d07
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hr_dlg.js
new file mode 100644
index 000000000..7a19994fe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.media_dlg',{list:"Lista",file:"Datoteka/URL",advanced:"Napredno",general:"Op\u0107e",title:"Dodaj / uredi ugra\u0111enu multimediju","align_top_left":"Gore lijevo","align_center":"Sredina","align_left":"Lijevo","align_bottom":"Dno","align_right":"Desno","align_top":"Gore","qt_stream_warn":"Izvori rtsp streamanja trebali bi biti dodani u QT Src polje u naprednom tabu.\nTako\u0111er, trebali bi dodati i obi\u010dnu verziju u Src polje...",qtsrc:"QT Src (Izvor)",progress:"Napredak",sound:"Zvuk",swstretchvalign:"Ra\u0161iri okomito",swstretchhalign:"Ra\u0161iri vodoravno",swstretchstyle:"Stil \u0161irenja",scriptcallbacks:"Poziv (callback) skripte","align_top_right":"Gore desno",uimode:"UI Mod",rate:"Brzina",playcount:"Broj izvedbi",defaultframe:"Osnovni okvir",currentposition:"Trenutna pozicija",currentmarker:"Trenutni znak",captioningid:"Id titlova",baseurl:"Osnovni URL",balance:"Balans",windowlessvideo:"Video bez prozora",stretchtofit:"Ra\u0161iri da stane",mute:"Isklju\u010di zvuk",invokeurls:"Dozovi URLove",fullscreen:"Cijeli ekran",enabled:"Omogu\u0107eno",autostart:"Automatsko pokretanje",volume:"Ja\u010dina zvuka",target:"Meta",qtsrcchokespeed:"Brzina kliza\u010da",href:"Href (lokacija)",endtime:"Vrijeme zavr\u0161etka",starttime:"Vrijeme po\u010detka",enablejavascript:"Omogu\u0107i JavaScript",correction:"Bez ispravka",targetcache:"Cache meta",playeveryframe:"Prila\u017ei svaki frame",kioskmode:"Kiosk mod",controller:"Kontrolor",menu:"Prila\u017ei izbornik",loop:"Kru\u017ena izvedba",play:"Automatska izvedba",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Ime (Name)",id:"Id",type:"Tip",size:"Dimenzije",preview:"Predpregled","constrain_proportions":"Zadr\u017ei proporcije",controls:"Kontrole",numloop:"Broj prikazivanja",console:"Konzola",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Pozadina",wmode:"WMode",salign:"SAlign",align:"Poravnanje",scale:"Veli\u010dina",quality:"Kvaliteta",shuffle:"Mije\u0161ani redoslijed",prefetch:"Prethodno punjenje",nojava:"Bez jave",maintainaspect:"Zadr\u017ei aspekt",imagestatus:"Status slike",center:"Sredina",autogotourl:"Automatski idi na URL","shockwave_options":"Shockwave opcije","rmp_options":"Real media player opcije","wmp_options":"Windows media player opcije","qt_options":"Quicktime opcije","flash_options":"Flash opcije",hidden:"Skriveno","align_bottom_left":"Dolje lijevo","align_bottom_right":"Dolje desno","html5_video_options":"HTML5 Video Opcije",altsource1:"Alternativni izvor 1",altsource2:"Alternativni izvor 2",preload:"Predhodno u\u010ditavanje",poster:"Poster",source:"Izvor","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hu_dlg.js
new file mode 100644
index 000000000..cccb421f1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.media_dlg',{list:"Lista",file:"F\u00e1jl/URL",advanced:"Halad\u00f3",general:"\u00c1ltal\u00e1nos",title:"Be\u00e1gyazott m\u00e9dia besz\u00far\u00e1sa/szerkeszt\u00e9se","align_top_left":"Bal-fent","align_center":"K\u00f6z\u00e9pen","align_left":"Balra","align_bottom":"Lent","align_right":"Jobbra","align_top":"Fent","qt_stream_warn":"Streamelt rtsp forr\u00e1sok a QT Src mez\u0151be val\u00f3k a halad\u00f3 lapon.\nHozz\u00e1 kellene adnia egy nem streamelt verzi\u00f3t a Src mez\u0151ben.",qtsrc:"QT Src",progress:"Folyamat",sound:"Hang",swstretchvalign:"Ny\u00fajt\u00e1s F-igaz\u00edt\u00e1s",swstretchhalign:"Ny\u00fajt\u00e1s V-igaz\u00edt\u00e1s",swstretchstyle:"Ny\u00fajt\u00e1s st\u00edlusa",scriptcallbacks:"Script callbacks","align_top_right":"Jobbra fent",uimode:"UI M\u00f3d",rate:"\u00c9rt\u00e9kel\u00e9s",playcount:"Lej\u00e1tsz\u00e1ssz\u00e1m",defaultframe:"Alap\u00e9rtelmezett frame",currentposition:"Aktu\u00e1lis poz\u00edci\u00f3",currentmarker:"Aktu\u00e1lis marker",captioningid:"Captioning id",baseurl:"Alap URL",balance:"Balance",windowlessvideo:"Ablak n\u00e9lk\u00fcli vide\u00f3",stretchtofit:"Ny\u00fajtva igaz\u00edt\u00e1s",mute:"N\u00e9ma",invokeurls:"URL-ek bevon\u00e1sa",fullscreen:"Teljes k\u00e9perny\u0151",enabled:"Enged\u00e9lyezve",autostart:"Automatikus kezd\u00e9s",volume:"Hanger\u0151",target:"C\u00e9l",qtsrcchokespeed:"Folyt\u00e1s sebess\u00e9ge",href:"Href",endtime:"Z\u00e1r\u00f3 id\u0151",starttime:"Kezd\u00e9si id\u0151",enablejavascript:"JavaScript enged\u00e9se",correction:"Nincs jav\u00edt\u00e1s",targetcache:"C\u00e9l cache",playeveryframe:"Minden kocka lej\u00e1tsz\u00e1sa",kioskmode:"Kiosk m\u00f3d",controller:"Vez\u00e9rl\u0151",menu:"Men\u00fc mutat\u00e1sa",loop:"Ism\u00e9tl\u00e9s",play:"Automatikus lej\u00e1tsz\u00e1s",hspace:"V-t\u00e1v",vspace:"F-t\u00e1v","class_name":"Oszt\u00e1ly",name:"N\u00e9v",id:"Id",type:"T\u00edpus",size:"M\u00e9retek",preview:"El\u0151n\u00e9zet","constrain_proportions":"Ar\u00e1nytart\u00e1s",controls:"Kezel\u0151k",numloop:"Ism\u00e9tl\u00e9ssz\u00e1m",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"H\u00e1tt\u00e9r",wmode:"WM\u00f3d",salign:"SElrendez\u00e9s",align:"Elrendez\u00e9s",scale:"Nagy\u00edt\u00e1s",quality:"Min\u0151s\u00e9g",shuffle:"V\u00e9letlenszer\u0171",prefetch:"El\u0151t\u00f6lt\u00e9s",nojava:"Nincs java",maintainaspect:"Ar\u00e1nytart\u00e1s",imagestatus:"K\u00e9p \u00e1llapot",center:"K\u00f6z\u00e9pre",autogotourl:"Automatikus URL-re ugr\u00e1s","shockwave_options":"Shockwave be\u00e1ll\u00edt\u00e1sai","rmp_options":"Real media player be\u00e1ll\u00edt\u00e1sai","wmp_options":"Windows media player be\u00e1ll\u00edt\u00e1sai","qt_options":"Quicktime be\u00e1ll\u00edt\u00e1sai","flash_options":"Flash be\u00e1ll\u00edt\u00e1sai",hidden:"Rejtett","align_bottom_left":"Bal-lent","align_bottom_right":"Bal-jobbra","embedded_audio_options":"Be\u00e1gyazott hang be\u00e1ll\u00edt\u00e1sok","html5_video_options":"HTML5 Video be\u00e1ll\u00edt\u00e1sok",altsource1:"Alternat\u00edv forr\u00e1s 1",altsource2:"Alternat\u00edv forr\u00e1s 2",preload:"El\u0151t\u00f6lt\u00e9s",poster:"Hozz\u00e1ad\u00f3",source:"Forr\u00e1s","html5_audio_options":"Audi\u00f3 be\u00e1ll\u00edt\u00e1sok","preload_none":"Nincs el\u0151reolvas\u00e1s","preload_metadata":"Vide\u00f3 metaadatok el\u0151reolvas\u00e1sa","preload_auto":"Hagyjuk a felhaszn\u00e1l\u00f3 b\u00f6ng\u00e9sz\u0151j\u00e9nek eld\u00f6nteni",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hy_dlg.js
new file mode 100644
index 000000000..2b4c15899
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.media_dlg',{list:"\u0421\u043f\u0438\u0441\u043e\u043a",file:"\u0424\u0430\u0439\u043b / URL",advanced:"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e",general:"\u041e\u0431\u0449\u0435\u0435",title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c / \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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 ..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"\u0410\u0432\u0442\u043e\u0441\u0442\u0430\u0440\u0442",volume:"\u0413\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044e",loop:"\u041b\u0443\u043f",play:"\u0410\u0432\u0442\u043e\u043f\u043b\u0435\u0439",hspace:"\u0433\u043e\u0440. \u043e\u0442\u0441\u0442\u0443\u043f",vspace:"\u0432\u0435\u0440\u0442. \u043e\u0442\u0441\u0442\u0443\u043f","class_name":"\u041a\u043b\u0430\u0441\u0441",name:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",id:"Id",type:"\u0422\u0438\u043f",size:"\u0420\u0430\u0437\u043c\u0435\u0440\u044b",preview:"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440","constrain_proportions":"\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",controls:"Controls",numloop:"Num loops",console:"Console",cache:"\u041a\u044d\u0448",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"\u0424\u043e\u043d",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ia_dlg.js
new file mode 100644
index 000000000..28cf56a03
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6/\u5730\u5740",advanced:"\u9ad8\u7ea7",general:"\u57fa\u672c",title:"\u63d2\u5165/\u7f16\u8f91 \u5a92\u4f53","align_top_left":"\u9876\u90e8\u5c45\u5de6","align_center":"\u5c45\u4e2d","align_left":"\u5c45\u5de6","align_bottom":"\u5e95\u90e8","align_right":"\u5c45\u53f3","align_top":"\u9876\u90e8","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..",qtsrc:"QT Src",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u7f29\u653e\u81f3\u5782\u76f4\u5bf9\u9f50",swstretchhalign:"\u7f29\u653e\u81f3\u6c34\u5e73\u5bf9\u9f50",swstretchstyle:"\u7f29\u653e\u6837\u5f0f",scriptcallbacks:"\u811a\u672c\u56de\u6863","align_top_right":"\u9876\u90e8\u5c45\u53f3",uimode:"UI \u6a21\u5f0f",rate:"\u7801\u7387",playcount:"\u64ad\u653e\u6b21\u6570",defaultframe:"\u9ed8\u8ba4\u5e27",currentposition:"\u5f53\u524d\u4f4d\u7f6e",currentmarker:"\u5f53\u524d\u6807\u7b7e",captioningid:"\u5b57\u5e55 id",baseurl:"Base URL",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u7a97\u53e3\u89c6\u9891",stretchtofit:"\u7f29\u653e\u81f3\u5408\u9002\u5927\u5c0f",mute:"\u9759\u97f3",invokeurls:"\u8c03\u7528\u7684URLs",fullscreen:"\u5168\u5c4f\u5e55",enabled:"\u542f\u7528",autostart:"\u81ea\u52a8\u5f00\u59cb",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u7ed3\u675f\u65f6\u95f4",starttime:"\u5f00\u59cb\u65f6\u95f4",enablejavascript:"\u542f\u7528 JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u9010\u5e27\u64ad\u653e",kioskmode:"Kiosk \u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u663e\u793a\u83dc\u5355",loop:"\u5faa\u73af",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u6c34\u5e73\u95f4\u8ddd",vspace:"\u5782\u76f4\u95f4\u8ddd","class_name":"\u7c7b\u540d",name:"\u540d\u79f0",id:"Id",type:"\u7c7b\u578b",size:"\u5927\u5c0f",preview:"\u9884\u89c8","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",controls:"\u63a7\u5236",numloop:"\u5faa\u73af\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash\u53d8\u6570",base:"\u57fa\u7ebf",bgcolor:"\u80cc\u666f\u8272",wmode:"WMode",salign:"SAlign",align:"\u5bf9\u9f50",scale:"\u7f29\u653e",quality:"\u54c1\u8d28",shuffle:"\u968f\u673a",prefetch:"\u9884\u8bfb",nojava:"No java",maintainaspect:"\u7ef4\u62a4\u72b6\u6001",imagestatus:"\u56fe\u50cf\u72b6\u6001",center:"\u5c45\u4e2d",autogotourl:"\u81ea\u52a8\u8df3\u8f6c URL","shockwave_options":"Shockwave \u9009\u9879","rmp_options":"Real media player \u9009\u9879","wmp_options":"Windows media player \u9009\u9879","qt_options":"Quicktime \u9009\u9879","flash_options":"Flash \u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5e95\u90e8\u5c45\u5de6","align_bottom_right":"\u5e95\u90e8\u5c45\u53f3","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/id_dlg.js
new file mode 100644
index 000000000..3aab79b8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Atas Kiri","align_center":"Tengah","align_left":"Kiri","align_bottom":"Bawah","align_right":"Kanan","align_top":"Atas","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Atas Kanan",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bawah Kiri","align_bottom_right":"Bawah kanan","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/is_dlg.js
new file mode 100644
index 000000000..61cc8bfd5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.media_dlg',{list:"Listi",file:"Skr\u00e1/Sl\u00f3\u00f0",advanced:"\u00cdtarlegt",general:"Almennt",title:"Setja inn / Breyta birtingu margmi\u00f0lunar","align_top_left":"Efst vinstri","align_center":"Mi\u00f0ja","align_left":"Vinstri","align_bottom":"Ne\u00f0st","align_right":"H\u00e6gri","align_top":"Efst","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..",qtsrc:"QT Src",progress:"Sta\u00f0a",sound:"Hlj\u00f3\u00f0",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Efst h\u00e6gri",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Upprunalegur rammi",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Gluggalaust myndband",stretchtofit:"Teigja til a\u00f0 passa",mute:"Dempa",invokeurls:"Virkja sl\u00f3\u00f0ir",fullscreen:"Heilskj\u00e1r",enabled:"Virkt",autostart:"Byrja sj\u00e1lfvirkt",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"S\u00fdna valmynd",loop:"Endurtaka",play:"Sj\u00e1lfvirk spilun",hspace:"L\u00e1r-bil",vspace:"L\u00f3\u00f0r-bil","class_name":"Flokkur",name:"Nafn",id:"Id",type:"Ger\u00f0",size:"V\u00edddir",preview:"Forsko\u00f0un","constrain_proportions":"Halda hlutf\u00f6llum",controls:"Stj\u00f3rn",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Bakgrunnur",wmode:"WMode",salign:"SAlign",align:"J\u00f6fnun",scale:"A\u00f0l\u00f6gun",quality:"G\u00e6\u00f0i",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"Ekkert java",maintainaspect:"Halda hlutf\u00f6llum",imagestatus:"Sta\u00f0a myndar",center:"Mi\u00f0ja",autogotourl:"Auto goto URL","shockwave_options":"Shockwave m\u00f6guleikar","rmp_options":"Real media player m\u00f6guleikar","wmp_options":"Windows media player m\u00f6guleikar","qt_options":"Quicktime m\u00f6guleikar","flash_options":"Flash m\u00f6guleikar",hidden:"Hidden","align_bottom_left":"Ne\u00f0st vinstri","align_bottom_right":"Ne\u00f0st h\u00e6gri","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/it_dlg.js
new file mode 100644
index 000000000..f335edebb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.media_dlg',{list:"Lista",file:"File/URL",advanced:"Avanzate",general:"Generale",title:"Inserisci/modifica file multimediale","align_top_left":"Alto a sinistra","align_center":"Centro","align_left":"Sinistra","align_bottom":"Basso","align_right":"Destra","align_top":"Alto","qt_stream_warn":"Le risorse rstp \'streamed\' devono essere aggiunte al campo Sorgente QT nella tabella Avanzate.\nSi dovrebbe inserire anche una versione non \'streamed\' al campo Sorgente..",qtsrc:"Sorgente QT",progress:"Avanzamento",sound:"Suono",swstretchvalign:"Tratto V-Allineamento",swstretchhalign:"Tratto H-Allineamento",swstretchstyle:"Stile Tratto",scriptcallbacks:"Script richiamato","align_top_right":"Alto a destra",uimode:"Modalit\u00e0 Interfaccia Utente",rate:"Qualit\u00e0",playcount:"Conteggio esecuzione",defaultframe:"Frame predefinito",currentposition:"Posizione corrente",currentmarker:"Indicatore corrente",captioningid:"Didascalia dell\'Id",baseurl:"URL base",balance:"Bilanciamento",windowlessvideo:"Video senza finestra",stretchtofit:"Adatta dimensioni",mute:"Muto",invokeurls:"Invoca URLs",fullscreen:"Tutto schermo",enabled:"Abilitato",autostart:"Avvio automatico",volume:"Volume",target:"Target",qtsrcchokespeed:"Velocit\u00e0 cursore",href:"Href",endtime:"Ora fine",starttime:"Ora inizio",enablejavascript:"Abilita JavaScript",correction:"Nessuna Correzione",targetcache:"Cache del target",playeveryframe:"Esegui ogni frame",kioskmode:"Modalit\u00e0 Kiosk",controller:"Controller",menu:"Mostra menu",loop:"Riproduzione ciclica",play:"Esecuzione automatica",hspace:"H-Spazio",vspace:"V-Spazio","class_name":"Classe",name:"Nome",id:"Id",type:"Tipo",size:"Dimensioni",preview:"Anteprima","constrain_proportions":"Mantieni Proporzioni",controls:"Controlli",numloop:"Numero Cicli",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Sfondo",wmode:"WMode",salign:"SAlign",align:"Allineamento",scale:"Scala",quality:"Qualit\u00e0",shuffle:"Shuffle",prefetch:"Precaricamento",nojava:"No java",maintainaspect:"Mantieni Aspetto",imagestatus:"Stato Immagine",center:"Centra",autogotourl:"Vai a URL automatico","shockwave_options":"Opzioni Shockwave","rmp_options":"Opzioni Real media player","wmp_options":"Opzioni Windows media player","qt_options":"Opzioni Quicktime","flash_options":"Opzioni Flash",hidden:"Nascosto","align_bottom_left":"Basso a Sinistra","align_bottom_right":"Basso a Destra",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opzioni Audio Embedded",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Opzioni Video HTML5",altsource1:"Sorgente alternativa 1",altsource2:"Sorgente alternativa 2",preload:"Precarica",poster:"Poster",source:"Sorgente","html5_audio_options":"Opzioni Audio","preload_none":"Non Precaricare","preload_metadata":"Precarica i metadati video","preload_auto":"Lascia decidere al browser dell\'utente",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ja_dlg.js
new file mode 100644
index 000000000..9752ca22e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.media_dlg',{list:"\u4e00\u89a7",file:"\u30d5\u30a1\u30a4\u30eb\u3084URL",advanced:"\u8a73\u7d30",general:"\u4e00\u822c",title:"\u57cb\u3081\u8fbc\u307f\u30e1\u30c7\u30a3\u30a2\u306e\u633f\u5165\u3084\u7de8\u96c6","align_top_left":"\u5de6\u4e0a","align_center":"\u4e2d\u592e","align_left":"\u5de6","align_bottom":"\u4e0b","align_right":"\u53f3","align_top":"\u4e0a","qt_stream_warn":"RTSP\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u30ea\u30bd\u30fc\u30b9\u3092\u300c\u9ad8\u5ea6\u300d\u306e\u30bf\u30d6\u306e\u300cQT\u306e\u30bd\u30fc\u30b9\u300d\u6b04\u306b\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u307e\u305f\u3001\u300c\u30bd\u30fc\u30b9\u300d\u6b04\u306b\u306f\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u3067\u306f\u306a\u3044\u30d0\u30fc\u30b8\u30e7\u30fc\u30f3\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002",qtsrc:"QT\u306e\u30bd\u30fc\u30b9",progress:"\u9032\u5c55",sound:"\u30b5\u30a6\u30f3\u30c9",swstretchvalign:"\u5782\u76f4\u306e\u914d\u7f6e",swstretchhalign:"\u6c34\u5e73\u306e\u914d\u7f6e",swstretchstyle:"\u4f38\u7e2e\u306e\u30b9\u30bf\u30a4\u30eb",scriptcallbacks:"\u30b9\u30af\u30ea\u30d7\u30c8\u306e\u30b3\u30fc\u30eb\u30d0\u30c3\u30af","align_top_right":"\u53f3\u4e0a",uimode:"UI\u3092\u8868\u793a\u3059\u308b\u30e2\u30fc\u30c9",rate:"\u518d\u751f\u30ec\u30fc\u30c8",playcount:"\u518d\u751f\u56de\u6570",defaultframe:"\u521d\u671f\u72b6\u614b\u306e\u30d5\u30ec\u30fc\u30e0",currentposition:"\u518d\u751f\u4f4d\u7f6e(\u79d2\u5358\u4f4d)",currentmarker:"\u30de\u30fc\u30ab\u30fc\u756a\u53f7",captioningid:"\u30ad\u30e3\u30d7\u30b7\u30e7\u30f3\u8868\u793a\u8981\u7d20ID",baseurl:"\u57fa\u6e96\u306eURL",balance:"\u30b9\u30c6\u30ec\u30aa\u306e\u30d0\u30e9\u30f3\u30b9",windowlessvideo:"\u30a6\u30a3\u30f3\u30c9\u30a6\u306a\u3057\u306e\u52d5\u753b",stretchtofit:"\u5408\u308f\u305b\u3066\u62e1\u5927",mute:"\u6d88\u97f3",invokeurls:"URL\u3092\u958b\u304f",fullscreen:"\u5168\u753b\u9762",enabled:"\u6709\u52b9",autostart:"\u81ea\u52d5\u518d\u751f",volume:"\u97f3\u91cf",target:"\u30bf\u30fc\u30b2\u30c3\u30c8",qtsrcchokespeed:"\u518d\u751f\u30c7\u30fc\u30bf\u30ec\u30fc\u30c8",href:"\u30ea\u30f3\u30af\u5148URL",endtime:"\u7d42\u4e86\u6642\u9593",starttime:"\u958b\u59cb\u6642\u9593",enablejavascript:"JavaScript\u3092\u6709\u52b9",correction:"\u8a02\u6b63\u306a\u3057",targetcache:"\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u30ad\u30e3\u30c3\u30b7\u30e5",playeveryframe:"\u3059\u3079\u3066\u306e\u30d5\u30ec\u30fc\u30e0\u3092\u518d\u751f",kioskmode:"Kiosk\u30e2\u30fc\u30c9",controller:"\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u8868\u793a",menu:"\u30e1\u30cb\u30e5\u30fc\u3092\u8868\u793a",loop:"\u7e70\u308a\u8fd4\u3057",play:"\u81ea\u52d5\u518d\u751f",hspace:"\u5de6\u53f3\u306e\u4f59\u767d",vspace:"\u4e0a\u4e0b\u306e\u4f59\u767d","class_name":"\u30af\u30e9\u30b9",name:"\u540d\u524d",id:"ID",type:"\u30bf\u30a4\u30d7",size:"\u5bf8\u6cd5",preview:"\u30d7\u30ec\u30d3\u30e5\u30fc","constrain_proportions":"\u7e26\u6a2a\u6bd4\u3092\u7dad\u6301",controls:"\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u306e\u8868\u793a",numloop:"\u7e70\u308a\u8fd4\u3057\u306e\u56de\u6570",console:"\u30b3\u30f3\u30bd\u30fc\u30eb",cache:"\u30ad\u30e3\u30c3\u30b7\u30e5",autohref:"\u81ea\u52d5\u8aad\u8fbc",liveconnect:"SWLiveConnect\u5c5e\u6027",flashvars:"Flash Vars",base:"Base",bgcolor:"\u80cc\u666f\u8272",wmode:"WMode",salign:"SAlign",align:"\u914d\u7f6e",scale:"\u4f38\u7e2e",quality:"\u54c1\u8cea",shuffle:"\u30b7\u30e3\u30c3\u30d5\u30eb",prefetch:"\u5148\u8aad\u307f",nojava:"Java\u3092\u7981\u6b62",maintainaspect:"\u7e26\u6a2a\u6bd4\u306e\u7dad\u6301",imagestatus:"\u753b\u50cf\u306e\u72b6\u614b",center:"\u4e2d\u592e\u63c3\u3048",autogotourl:"URL\u306b\u81ea\u52d5\u79fb\u52d5","shockwave_options":"Shockwave\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","rmp_options":"Real media player\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","wmp_options":"Windows media player\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","qt_options":"Quicktime\u306e\u30aa\u30d7\u30b7\u30e7\u30f3","flash_options":"Flash\u306e\u30aa\u30d7\u30b7\u30e7\u30f3",hidden:"\u975e\u8868\u793a","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b",flash:"flash",quicktime:"quicktime","embedded_audio_options":"\u57cb\u3081\u8fbc\u307fAudio\u306e\u30aa\u30d7\u30b7\u30e7\u30f3",windowsmedia:"Windows\u30e1\u30c7\u30a3\u30a2",realmedia:"realmedia",shockwave:"shockwave",audio:"\u30aa\u30fc\u30c7\u30a3\u30aa",video:"\u52d5\u753b","html5_video_options":"HTML5 Video\u306e\u30aa\u30d7\u30b7\u30e7\u30f3",altsource1:"\u4ee3\u66ff\u30bd\u30fc\u30b91",altsource2:"\u4ee3\u66ff\u30bd\u30fc\u30b92",preload:"preload\u5c5e\u6027",poster:"poster\u5c5e\u6027",source:"HTML","html5_audio_options":"Audio \u30aa\u30d7\u30b7\u30e7\u30f3","preload_none":"\u5148\u8aad\u307f\u3057\u306a\u3044","preload_metadata":"\u52d5\u753b\u306e\u30e1\u30bf\u30c7\u30fc\u30bf\u3092\u5148\u8aad\u307f","preload_auto":"\u30e6\u30fc\u30b6\u30fc\u306e\u30d6\u30e9\u30a6\u30b6\u30fc\u306b\u5f93\u3046",iframe:"iframe",embeddedaudio:"\u57cb\u3081\u8fbc\u307f\u97f3\u58f0"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ka_dlg.js
new file mode 100644
index 000000000..e84713166
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.media_dlg',{list:"\u10e9\u10d0\u10db\u10dd\u10dc\u10d0\u10d7\u10d5\u10d0\u10da\u10d8",file:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8",advanced:"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7",general:"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd",title:"\u10d9\u10da\u10d8\u10de\u10d8\u10e1 \u10db\u10d0\u10ee\u10d0\u10e1\u10d8\u10d0\u10d7\u10d4\u10d1\u10da\u10d4\u10d1\u10d8","align_top_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d6\u10d4\u10d3\u10d0 \u10d9\u10e3\u10d7\u10ee\u10d4","align_center":"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d8","align_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_bottom":"\u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_top":"\u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","qt_stream_warn":"\u10dc\u10d0\u10d9\u10d0\u10d3\u10dd\u10d5\u10d0\u10dc\u10d8 rtsp \u10e0\u10d4\u10e1\u10e3\u10e0\u10e1\u10d4\u10d1\u10d8 \u10e3\u10dc\u10d3\u10d0 \u10e9\u10d0\u10d0\u10db\u10d0\u10e2\u10dd\u10d7 QT Src \u10d5\u10d4\u10da\u10e8\u10d8, \"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\" \u10d2\u10d5\u10d4\u10e0\u10d3\u10d6\u10d4.\n\u10ee\u10dd\u10da\u10dd \u10d0\u10e0\u10d0 \u10dc\u10d0\u10d9\u10d0\u10d3\u10dd\u10d5\u10d0\u10dc\u10d8 \u10d5\u10d4\u10e0\u10e1\u10d8\u10d0 - Src \u10d5\u10d4\u10da\u10e8\u10d8.",qtsrc:"QT Src",progress:"\u10de\u10e0\u10dd\u10d2\u10e0\u10d4\u10e1\u10d8",sound:"\u10ee\u10db\u10d0",swstretchvalign:"\u10d5\u10d4\u10e0\u10e2. \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0 \u10d2\u10d0\u10ec\u10d4\u10da\u10d5\u10d8\u10d7",swstretchhalign:"\u10f0\u10dd\u10e0\u10d8\u10d6. \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0 \u10d2\u10d0\u10ec\u10d4\u10da\u10d5\u10d8\u10d7",swstretchstyle:"\u10d2\u10d0\u10ec\u10d4\u10da\u10d5\u10d8\u10e1 \u10e1\u10e2\u10d8\u10da\u10d8",scriptcallbacks:"\u10e1\u10e5\u10e0\u10d8\u10de\u10e2\u10d8\u10e1 \u10db\u10ee\u10d0\u10e0\u10d3\u10d0\u10ed\u10d4\u10e0\u10d0","align_top_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d6\u10d4\u10d3\u10d0 \u10d9\u10e3\u10d7\u10ee\u10d4",uimode:"\u10d8\u10dc\u10e2\u10d4\u10e0\u10e4\u10d4\u10d8\u10e1\u10d8\u10e1 \u10e0\u10d4\u10df\u10d8\u10db\u10d8",rate:"\u10e0\u10d4\u10d8\u10e2\u10d8\u10dc\u10d2\u10d8",playcount:"\u10dc\u10d0\u10ee\u10d5\u10d4\u10d1\u10d8\u10e1 \u10db\u10d7\u10d5\u10da\u10d4\u10da\u10d8",defaultframe:"\u10db\u10d7\u10d0\u10d5\u10d0\u10e0\u10d8 \u10d9\u10d0\u10d3\u10e0\u10d8",currentposition:"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10d0",currentmarker:"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10db\u10d0\u10e0\u10d9\u10d4\u10e0\u10d8",captioningid:"\u10e1\u10e3\u10d1\u10e2\u10d8\u10e2\u10e0\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8",baseurl:"\u10e1\u10d0\u10d1\u10d0\u10d6\u10d8\u10e1\u10dd \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8",balance:"\u10d1\u10d0\u10da\u10d0\u10dc\u10e1\u10d8",windowlessvideo:"\u10e4\u10d0\u10dc\u10ef\u10e0\u10d8\u10e1 \u10d5\u10d8\u10d3\u10d4\u10dd",stretchtofit:"\u10e4\u10d0\u10dc\u10ef\u10e0\u10d8\u10e1 \u10d6\u10dd\u10db\u10d0\u10d6\u10d4",mute:"\u10ee\u10db\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4",invokeurls:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10eb\u10d0\u10ee\u10d4\u10d1\u10d0",fullscreen:"\u10db\u10d7\u10d4\u10da \u10d4\u10d9\u10e0\u10d0\u10dc\u10d6\u10d4",enabled:"\u10e9\u10d0\u10e0\u10d7\u10e3\u10da\u10d8\u10d0",autostart:"\u10d0\u10d5\u10e2\u10dd\u10d2\u10d0\u10e8\u10d5\u10d4\u10d1\u10d0",volume:"\u10ee\u10db\u10d0",target:"\u10db\u10d8\u10d6\u10d0\u10dc\u10d8",qtsrcchokespeed:"\u10e1\u10d8\u10ee\u10e8\u10d8\u10e0\u10d4",href:"\u10d1\u10db\u10e3\u10da\u10d8",endtime:"\u10d3\u10d0\u10e1\u10e0\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10d3\u10e0\u10dd",starttime:"\u10d3\u10d0\u10ec\u10e7\u10d4\u10d1\u10d8\u10e1 \u10d3\u10e0\u10dd",enablejavascript:"JavaScript-\u10d8\u10e1 \u10e9\u10d0\u10e0\u10d7\u10d5\u10d0",correction:"\u10d9\u10dd\u10e0\u10d4\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4",targetcache:"\u10e5\u10d4\u10e8\u10d8",playeveryframe:"\u10e7\u10d5\u10d4\u10da\u10d0 \u10d9\u10d0\u10d3\u10e0\u10d8\u10e1 \u10d0\u10e1\u10d0\u10ee\u10d5\u10d0",kioskmode:"\u10d9\u10d8\u10dd\u10e1\u10d9\u10d8\u10e1 \u10e0\u10d4\u10df\u10d8\u10db\u10d8",controller:"\u10db\u10d0\u10e0\u10d7\u10d5\u10d0",menu:"\u10db\u10d4\u10dc\u10d8\u10e3\u10e1 \u10d2\u10d0\u10db\u10dd\u10e9\u10d4\u10dc\u10d0",loop:"\u10d2\u10d0\u10db\u10d4\u10dd\u10e0\u10d4\u10d1\u10d0",play:"\u10d0\u10d5\u10e2\u10dd\u10d2\u10d0\u10e8\u10d5\u10d4\u10d1\u10d0",hspace:"\u10f0\u10dd\u10e0\u10d8\u10d6. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",vspace:"\u10d5\u10d4\u10e0\u10e2. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","class_name":"\u10d9\u10da\u10d0\u10e1\u10d8",name:"\u10e1\u10d0\u10ee\u10d4\u10da\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0",id:"\u10d8\u10d3\u10d4\u10dc\u10e2\u10d8\u10e4\u10d8\u10d9\u10d0\u10e2\u10dd\u10e0\u10d8",type:"\u10e2\u10d8\u10de\u10d8",size:"\u10d6\u10dd\u10db\u10d4\u10d1\u10d8",preview:"\u10ec\u10d8\u10dc\u10d0\u10e1\u10ec\u10d0\u10e0\u10d8 \u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10d4\u10e0\u10d4\u10d1\u10d0","constrain_proportions":"\u10de\u10e0\u10dd\u10de\u10dd\u10e0\u10ea\u10d8\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10dc\u10d0\u10e0\u10e9\u10e3\u10dc\u10d4\u10d1\u10d0",controls:"\u10db\u10d0\u10e0\u10d7\u10d5\u10d0",numloop:"\u10d2\u10d0\u10db\u10d4\u10dd\u10e0\u10d4\u10d1\u10d0\u10d7\u10d0 \u10e0\u10d8\u10ea\u10ee\u10d5\u10d8",console:"\u10d9\u10dd\u10dc\u10e1\u10dd\u10da\u10d8",cache:"\u10e5\u10d4\u10e8\u10d8",autohref:"\u10d0\u10d5\u10e2\u10dd \u10d1\u10db\u10e3\u10da\u10d8",liveconnect:"SWLiveConnect",flashvars:"Flas \u10d1\u10e0\u10eb\u10d0\u10dc\u10d4\u10d1\u10d4\u10d1\u10d8",base:"Base",bgcolor:"\u10e4\u10dd\u10dc\u10d8",wmode:"\u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0",salign:"\u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",align:"\u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",scale:"\u10db\u10d8\u10d3\u10d0\u10db\u10dd",quality:"\u10ee\u10d0\u10e0\u10d8\u10e1\u10ee\u10d8",shuffle:"\u0412 \u0440\u0430\u0437\u0431\u0440\u043e\u0441",prefetch:"\u10d0\u10db\u10dd\u10d9\u10e0\u10d4\u10e4\u10d0",nojava:"Java-\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4",maintainaspect:"\u10d6\u10dd\u10db\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10ee\u10e1\u10dd\u10d5\u10e0\u10d4\u10d1\u10d0",imagestatus:"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10e1\u10e2\u10d0\u10e2\u10e3\u10e1\u10d8",center:"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d8",autogotourl:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d6\u10d4 \u10d0\u10d5\u10e2\u10dd \u10d2\u10d0\u10d3\u10d0\u10e1\u10d5\u10da\u10d0","shockwave_options":"Shockwave \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","rmp_options":"Real Media \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","wmp_options":"Windows Media \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","qt_options":"Quicktime \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","flash_options":"Flash \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",hidden:"\u10d3\u10d0\u10e4\u10d0\u10e0\u10e3\u10da\u10d8","align_bottom_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10e3\u10d7\u10ee\u10d4","align_bottom_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10e3\u10d7\u10ee\u10d4","html5_video_options":"HTML5-\u10d5\u10d8\u10d3\u10d4\u10dd\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",altsource1:"\u10d0\u10da\u10e2\u10d4\u10e0\u10dc\u10d0\u10e2\u10d8\u10e3\u10da\u10d8 \u10ec\u10e7\u10d0\u10e0\u10dd 1",altsource2:"\u10d0\u10da\u10e2\u10d4\u10e0\u10dc\u10d0\u10e2\u10d8\u10e3\u10da\u10d8 \u10ec\u10e7\u10d0\u10e0\u10dd 2",preload:"\u10ec\u10d8\u10dc\u10d0\u10e1\u10ec\u10d0\u10e0\u10d8 \u10e9\u10d0\u10db\u10dd\u10e2\u10d5\u10d8\u10e0\u10d7\u10d5\u10d0",poster:"\u10de\u10dd\u10e1\u10e2\u10d4\u10e0\u10d8",source:"\u10ec\u10e7\u10d0\u10e0\u10dd","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/kl_dlg.js
new file mode 100644
index 000000000..4fb966224
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/km_dlg.js
new file mode 100644
index 000000000..31f2f0710
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.media_dlg',{list:"\u1794\u1789\u17d2\u1787\u17b8",file:"\u17af\u1780\u179f\u17b6\u179a/\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u00a0URL",advanced:"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb",general:"\u1791\u17bc\u1791\u17c5",title:"\u1794\u1789\u17d2\u1785\u17bc\u179b / \u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1798\u17c1\u178c\u17c0\u1794\u1784\u17d2\u1780\u1794\u17cb","align_top_left":"\u179b\u17be\u1786\u17d2\u179c\u17c1\u1784","align_center":"\u1780\u178e\u17d2\u178a\u17b6\u179b","align_left":"\u1786\u17d2\u179c\u17c1\u1784","align_bottom":"\u1794\u17b6\u178f","align_right":"\u179f\u17d2\u178a\u17b6\u17c6","align_top":"\u1780\u17c6\u1796\u17bc\u179b","qt_stream_warn":"\u1794\u17d2\u179a\u1797\u1796\u179f\u17d2\u1791\u17d2\u179a\u17b8\u1798 rtsp (\u1796\u17b7\u1792\u17b8\u1780\u17b6\u179a\u1794\u1784\u17d2\u17a0\u17bc\u179a\u1796\u17c1\u179b\u1796\u17b7\u178f)\u1782\u17bd\u179a\u178f\u17d2\u179a\u17bc\u179c\u1794\u1793\u17d2\u1790\u17c2\u1798\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u179c\u17b6\u179b QT Src \u1780\u17d2\u179a\u17c4\u1798\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb\u00a0\u17d4n\u179f\u17d2\u179a\u1794\u1782\u17d2\u1793\u17b6\u1793\u17c1\u17c7 \u17a2\u17d2\u1793\u1780\u1782\u17bd\u179a\u1794\u1793\u17d2\u1790\u17c2\u1798\u1780\u17c6\u178e\u17c2\u1798\u17b7\u1793\u1798\u17c2\u1793\u179f\u17d2\u1791\u17d2\u179a\u17b8\u1798\u1791\u17c5\u1780\u17d2\u1793\u17bb\u1784\u179c\u17b6\u179b\u1794\u17d2\u179a\u1797\u1796 Src\u00a0\u17d4\"",qtsrc:"\u1794\u17d2\u179a\u1797\u1796 QT",progress:"\u179c\u178c\u17d2\u178d\u1793\u1797\u17b6\u1796",sound:"\u179f\u1798\u17d2\u179b\u17c1\u1784",swstretchvalign:"\u1791\u17b6\u1789\u178f\u1798\u17d2\u179a\u17b9\u1798\u1794\u1789\u17d2\u1788\u179a",swstretchhalign:"\u1791\u17b6\u1789\u178f\u1798\u17d2\u179a\u17b9\u1798\u1795\u17d2\u178a\u17c1\u1780",swstretchstyle:"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798\u1791\u17b6\u1789\u179c\u17c2\u1784",scriptcallbacks:"\u179f\u17d2\u1782\u17d2\u179a\u17b8\u1794\u17a0\u17c5\u1798\u1780\u179c\u17b7\u1789","align_top_right":"\u179b\u17be\u179f\u17d2\u178a\u17b6\u17c6",uimode:"\u1798\u17c9\u17bc\u178a UI",rate:"\u17a2\u178f\u17d2\u179a\u17b6",playcount:"\u1785\u17c6\u1793\u17bd\u1793\u178a\u1784\u1785\u17b6\u1780\u17cb",defaultframe:"\u179f\u1793\u17d2\u179b\u17b9\u1780\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798",currentposition:"\u1791\u17b8\u178f\u17b6\u17c6\u1784\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793",currentmarker:"\u1785\u17c6\u178e\u17b6\u17c6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793",captioningid:"\u179f\u179b.\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u178f\u17bc\u1785",baseurl:"URL\u00a0\u1782\u17c4\u179b",balance:"\u179f\u1798\u178f\u17bb\u179b\u17d2\u1799",windowlessvideo:"\u1797\u17b6\u1796\u1799\u1793\u17d2\u178f\u1782\u17d2\u1798\u17b6\u1793\u1794\u1784\u17d2\u17a2\u17bd\u1785",stretchtofit:"\u1791\u17b6\u1789\u17b1\u17d2\u1799\u179f\u1798",mute:"\u1794\u17b7\u1791\u179f\u1798\u17d2\u179b\u17c1\u1784",invokeurls:"\u17a0\u17c5 URLs",fullscreen:"\u1796\u17c1\u1789\u17a2\u17c1\u1780\u17d2\u179a\u1784\u17cb",enabled:"\u1794\u17b6\u1793\u1794\u17be\u1780\u1794\u17d2\u179a\u17be",autostart:"\u179f\u17d2\u179c\u17d0\u1799\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178a\u17be\u1798",volume:"\u1780\u1798\u17d2\u179a\u17b7\u178f\u179f\u1798\u17d2\u179b\u17c1\u1784",target:"\u1782\u17c4\u179b\u178a\u17c5",qtsrcchokespeed:"\u1794\u1784\u17d2\u17a2\u1793\u17cb\u179b\u17d2\u1794\u17bf\u1793",href:"\u178f\u17c6\u178e\u1781\u17d2\u1796\u179f\u17cb",endtime:"\u179c\u17c1\u179b\u17b6\u1794\u1789\u17d2\u1785\u1794\u17cb",starttime:"\u179c\u17c1\u179b\u17b6\u1785\u17b6\u1794\u17cb\u1795\u17d2\u178a\u17be\u1798",enablejavascript:"\u1794\u17be\u1780\u1794\u17d2\u179a\u17be\u00a0JavaScript",correction:"\u1782\u17d2\u1798\u17b6\u1793\u1780\u17b6\u179a\u1780\u17c2\u178f\u1798\u17d2\u179a\u17bc\u179c",targetcache:"\u1783\u17d2\u179b\u17b6\u17c6\u1784\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb\u1782\u17c4\u179b\u178a\u17c5",playeveryframe:"\u1785\u17b6\u1780\u17cb\u1782\u17d2\u179a\u1794\u17cb\u179f\u1793\u17d2\u179b\u17b9\u1780",kioskmode:"\u1798\u17c9\u17bc\u178a Kiosk",controller:"\u1794\u17d2\u179a\u178a\u17b6\u1794\u17cb\u1794\u1789\u17d2\u1787\u17b6",menu:"\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1798\u17c9\u17ba\u1793\u17bb\u1799",loop:"\u179a\u1784\u17d2\u179c\u17b7\u179b\u1787\u17bb\u17c6",play:"\u1785\u17b6\u1780\u17cb\u179f\u17d2\u179c\u17d0\u1799\u1794\u17d2\u179a\u179c\u178f\u17d2\u178f\u17b7",hspace:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1795\u17d2\u178a\u17c1\u1780",vspace:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1794\u1789\u17d2\u1788\u179a","class_name":"\u1790\u17d2\u1793\u17b6\u1780\u17cb",name:"\u1788\u17d2\u1798\u17c4\u17c7",id:"\u179b\u179f.",type:"\u1794\u17d2\u179a\u1797\u17c1\u1791",size:"\u179c\u17b7\u1798\u17b6\u178f\u17d2\u179a",preview:"\u1798\u17be\u179b\u1787\u17b6\u1798\u17bb\u1793","constrain_proportions":"\u1794\u1784\u17d2\u1781\u17c6\u17b2\u17d2\u1799\u1798\u17b6\u1793\u179f\u1798\u17b6\u1798\u17b6\u178f\u17d2\u179a",controls:"\u1794\u1789\u17d2\u1787\u17b6",numloop:"\u1785\u17c6\u1793\u17bd\u1793\u179a\u1784\u17d2\u179c\u17b7\u179b\u1787\u17bb\u17c6",console:"\u1786\u17b6\u1780\u1782\u17d2\u179a\u1794\u17cb\u1782\u17d2\u179a\u1784",cache:"\u1783\u17d2\u179b\u17b6\u17c6\u1784\u179f\u1798\u17d2\u1784\u17b6\u178f\u17cb",autohref:"\u179f\u17d2\u179c\u17d0\u1799HREF",liveconnect:"SW\u1797\u17d2\u1787\u17b6\u1794\u17cb\u1795\u17d2\u1791\u17b6\u179b\u17cb",flashvars:"\u17a2\u1790\u17c1\u179a Flash",base:"\u1782\u17c4\u179b",bgcolor:"\u1795\u17d2\u1791\u17c2\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799",wmode:"\u1798\u17c9\u17bc\u178a\u1794\u1784\u17d2\u17a2\u17bd\u1785",salign:"\u178f\u1798\u17d2\u179a\u17b9\u1798\u1787\u17d2\u179a\u17bb\u1784",align:"\u178f\u1798\u17d2\u179a\u17b9\u1798",scale:"\u1798\u17b6\u178f\u17d2\u179a\u178a\u17d2\u178b\u17b6\u1793",quality:"\u1782\u17bb\u178e\u1797\u17b6\u1796",shuffle:"\u1794\u1784\u17d2\u17a2\u17bc\u179f",prefetch:"\u1799\u1780\u1798\u17bb\u1793",nojava:"\u1782\u17d2\u1798\u17b6\u1793 java",maintainaspect:"\u179a\u1780\u17d2\u179f\u17b6\u179f\u1798\u17b6\u1798\u17b6\u178f\u17d2\u179a",imagestatus:"\u179f\u17d2\u1790\u17b6\u1793\u1797\u17b6\u1796\u179a\u17bc\u1794\u1797\u17b6\u1796",center:"\u1780\u178e\u17d2\u178a\u17b6\u179b",autogotourl:"\u179f\u17d2\u179c\u17d0\u1799\u1791\u17c5\u1780\u17b6\u1793\u17cb URL","shockwave_options":"\u1787\u1798\u17d2\u179a\u17be\u179f Shockwav","rmp_options":"\u1787\u1798\u17d2\u179a\u17be\u179f\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1785\u17b6\u1780\u17cb Real Media","wmp_options":"\u1787\u1798\u17d2\u179a\u17be\u179f\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1785\u17b6\u1780\u17cb Window Media","qt_options":"\u1787\u1798\u17d2\u179a\u17be\u179f Quicktime","flash_options":"\u1787\u1798\u17d2\u179a\u17be\u179f Flash",hidden:"\u1794\u17c6\u1796\u17bd\u1793","align_bottom_left":"\u1780\u17d2\u179a\u17c4\u1798\u1786\u17d2\u179c\u17c1\u1784","align_bottom_right":"\u1780\u17d2\u179a\u17c4\u1798\u179f\u17d2\u178a\u17b6\u17c6",flash:"\u17a0\u17d2\u179c\u17d2\u179b\u17b6\u179f\u17cb",quicktime:"\u1783\u17d2\u179c\u17b8\u1783\u1790\u17b6\u1798","embedded_audio_options":"\u1787\u1798\u17d2\u179a\u17be\u179f\u1794\u1784\u17d2\u1780\u1794\u17cb\u179f\u1798\u17d2\u179b\u17c1\u1784",windowsmedia:"\u179c\u17b8\u1793\u178a\u17bc\u1798\u17c1\u178c\u17c0",realmedia:"\u1798\u17c1\u178c\u17c0\u1796\u17b7\u178f",shockwave:"\u179f\u1781\u17cb\u179c\u17c1\u179c",audio:"\u179f\u1798\u17d2\u179b\u17c1\u1784",video:"\u1797\u17b6\u1796\u1799\u1793\u17d2\u178f","html5_video_options":"\u1787\u1798\u17d2\u179a\u17be\u179f\u1797\u17b6\u1796\u1799\u1793\u17d2\u178f HTML5",altsource1:"\u1794\u17d2\u179a\u1797\u1796\u1787\u17c6\u1793\u17bd\u179f\u17e1",altsource2:"\u1794\u17d2\u179a\u1797\u1796\u1787\u17c6\u1793\u17bd\u179f\u17e2",preload:"\u1795\u17d2\u1791\u17bb\u1780\u1787\u17b6\u1798\u17bb\u1793",poster:"\u1795\u17d2\u1791\u17b6\u17c6\u1784\u1795\u17d2\u179f\u1796\u17d2\u179c\u1795\u17d2\u179f\u17b6\u1799",source:"\u1794\u17d2\u179a\u1797\u1796","html5_audio_options":"\u1787\u1798\u17d2\u179a\u17be\u179f\u179f\u1798\u17d2\u179b\u17c1\u1784","preload_none":"\u1780\u17bb\u17c6\u1795\u17d2\u1791\u17bb\u1780\u1787\u17b6\u1798\u17bb\u1793","preload_metadata":"\u1795\u17d2\u1791\u17bb\u1780\u1798\u17c1\u178f\u17b6\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u1797\u17b6\u1796\u1799\u1793\u17d2\u178f\u1787\u17b6\u1798\u17bb\u1793","preload_auto":"\u1791\u17bb\u1780\u17b2\u17d2\u1799\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u179a\u17bb\u1780\u179a\u1780\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u179f\u1798\u17d2\u179a\u17c1\u1785",iframe:"\u17a2\u17b6\u1799\u17a0\u17d2\u179c\u17d2\u179a\u17c1\u1798",embeddedaudio:"\u179f\u1798\u17d2\u179b\u17c1\u1784\u1794\u1784\u17d2\u1780\u1794\u17cb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ko_dlg.js
new file mode 100644
index 000000000..1b6848747
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.media_dlg',{list:"\ubaa9\ub85d",file:"\ud30c\uc77c/URL",advanced:"\uace0\uae09",general:"\uc77c\ubc18",title:"\ubbf8\ub514\uc5b4 \uc0bd\uc785/\ud3b8\uc9d1","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"JavaScript\ub97c \ud5c8\uac00",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"\uba54\ub274 \ud45c\uc2dc",loop:"\uc5f0\uc18d \uc7ac\uc0dd",play:"\uc790\ub3d9 \uc7ac\uc0dd",hspace:"\uc88c\uc6b0 \uc5ec\ubc31",vspace:"\uc0c1\ud558 \uc5ec\ubc31","class_name":"Class",name:"Name",id:"Id",type:"\ud0c0\uc785",size:"\ud06c\uae30",preview:"\ubbf8\ub9ac\ubcf4\uae30","constrain_proportions":"\uc885\ud6a1\ube44 \uc720\uc9c0",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"\uc2a4\ucf00\uc77c",quality:"\ud488\uc9c8",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","embedded_audio_options":"Embedded Audio Options","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/kz_dlg.js
new file mode 100644
index 000000000..81d634ac3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right",flash:"",quicktime:"","embedded_audio_options":"Embedded Audio Options",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lb_dlg.js
new file mode 100644
index 000000000..1eab32287
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.media_dlg',{list:"L\u00ebscht",file:"Datei/URL",advanced:"Erweidert",general:"Allgemeng",title:"Multimedia-Inhalt abannen/beaarbechten","align_top_left":"Uewe L\u00e9nks","align_center":"Zentr\u00e9iert","align_left":"L\u00e9nks","align_bottom":"\u00cbnnen","align_right":"Riets","align_top":"Uewen","qt_stream_warn":"An den erweiderten Astellunge sollten am Feld \'QT Src\' gestreamte RTSP Ressourcen b\u00e4igesat ginn.\nZous\u00e4tzlech sollt Dir do och eng net-gestreamte Ressource uginn.",qtsrc:"QT Src",progress:"Fortschr\u00ebtt",sound:"Toun",swstretchvalign:"Stretch V-Ausriichtung",swstretchhalign:"Stretch H-Ausriichtung",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Uewe Riets",uimode:"UI Modus",rate:"Quote",playcount:"Zieler",defaultframe:"Frame-Virastellung",currentposition:"Aktuell Positioun",currentmarker:"Aktuelle Marker",captioningid:"Beschr\u00ebftungs Id",baseurl:"Basis-URL",balance:"Balance",windowlessvideo:"F\u00ebnsterlose Video",stretchtofit:"Breet un d\u00e9i verf\u00fcgbar Plaz upassen",mute:"Stomm",invokeurls:"URLen opruffen",fullscreen:"Vollbild",enabled:"Aktiv\u00e9iert",autostart:"Autostart",volume:"Lautst\u00e4rkt",target:"Zil",qtsrcchokespeed:"Vitesse drosselen",href:"Href",endtime:"Endz\u00e4itpunkt",starttime:"Startz\u00e4itpunkt",enablejavascript:"JavaScript aktiv\u00e9ieren",correction:"Ouni Korrektur",targetcache:"Zil zw\u00ebschesp\u00e4icheren",playeveryframe:"All Frame ofspillen",kioskmode:"Kioskmodus",controller:"Kontroller",menu:"Men\u00fc uweisen",loop:"Widderhuelung",play:"Automatesch Ofspillen",hspace:"Horizontalen Ofstand",vspace:"Vertikalen Ofstand","class_name":"CSS-Klass",name:"Numm",id:"Id",type:"Typ",size:"Ofmiessungen",preview:"Virschau","constrain_proportions":"Proportiounen erhalen",controls:"Steierung",numloop:"Unzuel Widderhuelungen",console:"Konsol",cache:"Zw\u00ebschesp\u00e4icher",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-Variablen",base:"Basis",bgcolor:"Hannergrond",wmode:"WMode",salign:"S-Ausriichtung",align:"Ausriichtung",scale:"Skal\u00e9ierung",quality:"Qualit\u00e9it",shuffle:"Zouf\u00e4lleg Widdergab",prefetch:"Prefetch",nojava:"Kee Java",maintainaspect:"Bildverh\u00e4ltnis b\u00e4ibehalen",imagestatus:"Bildstatus",center:"Zentr\u00e9iert",autogotourl:"Auto goto URL","shockwave_options":"Shockwave-Optiounen","rmp_options":"Optiounen fir Real Media Player","wmp_options":"Optiounen fir Windows Media Player","qt_options":"Quicktime-Optiounen","flash_options":"Flash-Optiounen",hidden:"Verstoppt","align_bottom_left":"\u00cbnne L\u00e9nks","align_bottom_right":"\u00cbnne Riets","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lt_dlg.js
new file mode 100644
index 000000000..14efd23f2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.media_dlg',{list:"S\u0105ra\u0161as",file:"Failas/URL",advanced:"I\u0161pl\u0117sta",general:"Bendra",title:"\u012eterpti/redaguoti integruot\u0105 daugialyp\u0119 terp\u0119","align_top_left":"Vir\u0161uje, kair\u0117je","align_center":"Centre","align_left":"Kair\u0117je","align_bottom":"Apa\u010dioje","align_right":"De\u0161in\u0117je","align_top":"Vir\u0161uje","qt_stream_warn":"Transliuojami rtsp i\u0161tekliai tur\u0117t\u0173 b\u016bti prid\u0117ti prie QT Src lauko \u201ePapildom\u0173 nustatym\u0173\u201c kortel\u0117je.\nTaip pat reikt\u0173 prid\u0117ti ir netransliuojam\u0105j\u0105 Src lauko versij\u0105.",qtsrc:"QT Src",progress:"Progresas",sound:"Garsas",swstretchvalign:"I\u0161tempti V-lygiavim\u0105",swstretchhalign:"I\u0161tempti H-lygiavim\u0105",swstretchstyle:"I\u0161tempti stili\u0173",scriptcallbacks:"Scenarijaus atgalinis atsakas","align_top_right":"Vir\u0161uje, de\u0161in\u0117je",uimode:"UI re\u017eimas",rate:"Da\u017enis",playcount:"Grojimo kartai",defaultframe:"Numatytas kadras",currentposition:"Dabartin\u0117 pozicija",currentmarker:"Dabartinis \u017eymeklis",captioningid:"Antra\u0161t\u0117s id",baseurl:"Prad\u017eios URL adresas",balance:"Balansas",windowlessvideo:"Vaizdas be lango",stretchtofit:"I\u0161tempti iki atitikimo",mute:"Nutildyti",invokeurls:"I\u0161kviesti URL adresus",fullscreen:"Viso ekrano re\u017eimas",enabled:"\u012ejungta",autostart:"Automatinis paleidimas",volume:"Garsis",target:"Paskirtis",qtsrcchokespeed:"Dusinimo greitis",href:"Adresas",endtime:"Pabaigos laikas",starttime:"Prad\u017eios laikas",enablejavascript:"\u012egalinti JavaScript",correction:"Joki\u0173 korekcij\u0173",targetcache:"Paskirties laikinoji talpykla",playeveryframe:"Paleisti kiekvien\u0105 kadr\u0105",kioskmode:"Kiosko re\u017eimas",controller:"Valdiklis",menu:"Rodyti meniu",loop:"Kartoti",play:"Automatinis paleidimas",hspace:"Horizontalus tarpas",vspace:"Vertikalus tarpas","class_name":"Klas\u0117",name:"Vardas",id:"Id",type:"Tipas",size:"I\u0161matavimai",preview:"Per\u017ei\u016bra","constrain_proportions":"Priverstin\u0117s proporcijos",controls:"Valdikliai",numloop:"Cikl\u0173 kiekis",console:"Konsol\u0117",cache:"Laikinoji talpykla",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash kintamieji",base:"Baz\u0117",bgcolor:"Fono spalva",wmode:"W-re\u017eimas",salign:"S-lygiavimas",align:"Lygiavimas",scale:"Mastelis",quality:"Kokyb\u0117",shuffle:"Atsitiktinis mai\u0161ymasis",prefetch:"I\u0161ankstinis duom. i\u0161rinkimas",nojava:"Be Java",maintainaspect:"I\u0161laikyti aspekt\u0105",imagestatus:"Paveiksl\u0117lio b\u016bsena",center:"Centre",autogotourl:"Automatinis \u0117jimas URL adresu","shockwave_options":"Shockwave nustatymai","rmp_options":"Real media player nustatymai","wmp_options":"Windows media player nustatymai","qt_options":"Quicktime nustatymai","flash_options":"Flash nustatymai",hidden:"Pasl\u0117pta","align_bottom_left":"Apa\u010dioje, kair\u0117je","align_bottom_right":"Apa\u010dioje, de\u0161in\u0117je",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Embedded Audio Options",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"HTML5 video nustatymai",altsource1:"Kitas video formatas 1",altsource2:"Kitas video formatas 2",preload:"Automati\u0161kai prad\u0117ti parsiuntim\u0105",poster:"Video paveiksl\u0117lis",source:"Kodo per\u017ei\u016bra","html5_audio_options":"Garso nustatymai","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Listi nuspresti vartotojo nar\u0161yklei",iframe:"iframe",embeddedaudio:"embeddedaydio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lv_dlg.js
new file mode 100644
index 000000000..0f662d515
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Nosaukums",id:"Id",type:"Tips",size:"Izm\u0113ri",preview:"Priek\u0161skat\u012bjums","constrain_proportions":"Constrain proportions",controls:"Kontroles",numloop:"Num loops",console:"Console",cache:"Ke\u0161atmi\u0146a",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Fons",wmode:"WMode",salign:"SAlign",align:"L\u012bdzin\u0101jums",scale:"Scale",quality:"Kvalit\u0101te",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Bildes status",center:"Centr\u0113ts",autogotourl:"Auto goto URL","shockwave_options":"Shockwave opcijas","rmp_options":"Real Media Player opcijas","wmp_options":"Windows Media Player opcijas","qt_options":"Quicktime opcijas","flash_options":"Flash opcijas",hidden:"Pasl\u0113pts","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","embedded_audio_options":"Ska\u0146as izv\u0113les","html5_video_options":"HTML5 video izv\u0113les",altsource1:"Cits video form\u0101ts 1",altsource2:"Cits video form\u0101ts 2",preload:"Autom\u0101tiski uzs\u0101kt lejupl\u0101di",poster:"Bilde",source:"Koda caurskate","html5_audio_options":"Ska\u0146as uzst\u0101d\u012bjumi","preload_none":"Neuzs\u0101kt autom\u0101tisku lejupl\u0101di","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/mk_dlg.js
new file mode 100644
index 000000000..85afd9fed
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.media_dlg',{list:"\u041b\u0438\u0441\u0442\u0430",file:"\u0414\u0430\u0442\u043e\u0442\u0435\u043a\u0430/\u0423\u0420\u041b",advanced:"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e",general:"\u041e\u0441\u043d\u043e\u0432\u043d\u043e",title:"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0432\u0433\u0440\u0430\u0434\u0435\u043d\u0438 \u043c\u0435\u0434\u0438\u0443\u043c\u0438","align_top_left":"\u041d\u0430\u0458\u0433\u043e\u0440\u0435 \u043b\u0435\u0432\u043e","align_center":"\u0421\u0440\u0435\u0434\u0438\u043d\u0430","align_left":"\u041b\u0435\u0432\u043e","align_bottom":"\u041d\u0430\u0458\u0434\u043e\u043b\u0435","align_right":"\u0414\u0435\u0441\u043d\u043e","align_top":"\u041d\u0430\u0458\u0433\u043e\u0440\u0435","qt_stream_warn":"RTSP \u0440\u0435\u0441\u0443\u0440\u0441\u0438\u0442\u0435 \u0442\u0440\u0435\u0431\u0430 \u0434\u0430 \u0441\u0435 \u0434\u043e\u0434\u0430\u0434\u0435 \u043d\u0430 Q\u0422 \u0438\u0437\u0432\u043e\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0430 \u043f\u043e\u0434 Advanced \u0442\u0430\u0431\u043e\u0442. \n\u041c\u043e\u0436\u0435, \u0438\u0441\u0442\u043e \u0442\u0430\u043a\u0430, \u0442\u0440\u0435\u0431\u0430 \u0434\u0430 \u0441\u0435 \u0434\u043e\u0434\u0430\u0434\u0435 \u043d\u0435 \u0435\u043c\u0438\u0442\u0443\u0432\u0430\u043d\u0430 \u0432\u0435\u0440\u0437\u0438\u0458\u0430 \u043d\u0430 \u043f\u043e\u043b\u0435\u0442\u043e Src ..",qtsrc:"QT \u0438\u0437\u0432\u043e\u0440",progress:"\u041d\u0430\u043f\u0440\u0435\u0434\u043e\u043a",sound:"\u0417\u0432\u0443\u043a",swstretchvalign:"\u0420\u0430\u0448\u0438\u0440\u0438 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0430",swstretchhalign:"\u0420\u0430\u0448\u0438\u0440\u0438 \u043f\u043e \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0430",swstretchstyle:"\u0420\u0430\u0448\u0438\u0440\u0435\u043d \u0441\u0442\u0438\u043b",scriptcallbacks:"Script callbacks","align_top_right":"\u0413\u043e\u0440\u0435 \u0434\u0435\u0441\u043d\u043e",uimode:"UI \u043c\u043e\u0434",rate:"\u0411\u0440\u0437\u0438\u043d\u0430",playcount:"\u0411\u0440\u043e\u0458 \u043d\u0430 \u0438\u0433\u0440\u0438",defaultframe:"\u041f\u0440\u0435\u0432\u0437\u0435\u043c\u0435\u043d\u0430 \u0440\u0430\u043c\u043a\u0430",currentposition:"\u041c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0458\u0430",currentmarker:"\u041c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u0435\u043d \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u0414\u043e\u0434\u0435\u043b\u0443\u0432\u0430\u043d\u0458\u0435 \u0438\u043c\u0435 \u043d\u0430 ID",baseurl:"\u041e\u0441\u043d\u043e\u0432\u0435\u043d \u0423\u0420\u041b",balance:"\u0420\u0430\u043c\u043d\u043e\u0442\u0435\u0436\u0430",windowlessvideo:"Windowless video",stretchtofit:"\u0420\u0430\u0448\u0438\u0440\u0438 \u0434\u043e \u043a\u0440\u0430\u0458",mute:"\u0411\u0435\u0437 \u0433\u043b\u0430\u0441",invokeurls:"\u041f\u043e\u0432\u0438\u043a\u0430\u0458 \u0423\u0420\u041b-\u0430",fullscreen:"\u0426\u0435\u043b \u0435\u043a\u0440\u0430\u043d",enabled:"\u041e\u0432\u043e\u0437\u043c\u043e\u0436\u0438",autostart:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u0438 \u0441\u0442\u0430\u0440\u0442",volume:"\u0413\u043b\u0430\u0441\u043d\u043e\u0441\u0442",target:"\u0426\u0435\u043b",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u0412\u0440\u0435\u043c\u0435 \u043d\u0430 \u043a\u0440\u0430\u0458",starttime:"\u0412\u0440\u0435\u043c\u0435 \u043d\u0430 \u043f\u043e\u0447\u0435\u0442\u043e\u043a",enablejavascript:"\u041e\u0432\u043e\u0437\u043c\u043e\u0436\u0438 JavaScript",correction:"\u0411\u0435\u0437 \u043a\u043e\u0440\u0435\u043a\u0446\u0438\u0458\u0430",targetcache:"\u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0430\u0442\u0430 \u0446\u0435\u043b",playeveryframe:"\u041f\u0443\u0448\u0442\u0438\u0458\u0430 \u0441\u0435\u043a\u043e\u0458\u0430 \u0440\u0430\u043c\u043a\u0430",kioskmode:"Kiosk \u043c\u043e\u0434",controller:"\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440",menu:"\u041f\u043e\u043a\u0430\u0436\u0438 \u043c\u0435\u043d\u0438",loop:"\u0408\u0430\u043c\u043a\u0430",play:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u0438 \u043e\u0434\u0438\u0433\u0440\u0430\u0458",hspace:"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u043c\u0435\u0441\u0442\u043e",vspace:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043c\u0435\u0441\u0442\u043e","class_name":"\u041a\u043b\u0430\u0441\u0430",name:"\u0418\u043c\u0435",id:"\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0458\u0430 (Id)",type:"\u0422\u0438\u043f",size:"\u0414\u0438\u043c\u0435\u043d\u0437\u0438\u0438",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434","constrain_proportions":"\u0417\u0430\u0434\u0440\u0436\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",controls:"\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0438",numloop:"\u0411\u0440\u043e\u0458 \u043d\u0430 \u0458\u0430\u043c\u043a\u0438",console:"\u041a\u043e\u043d\u0437\u043e\u043b\u0430",cache:"\u041a\u0435\u0448",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0438",base:"\u041e\u0441\u043d\u043e\u0432\u0430",bgcolor:"\u041f\u043e\u0437\u0430\u0434\u0438\u043d\u0430",wmode:"WMode",salign:"SAlign",align:"\u041f\u043e\u0430\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435",scale:"\u0420\u0430\u0437\u043c\u0435\u0440",quality:"\u041a\u0432\u0430\u043b\u0438\u0442\u0435\u0442",shuffle:"\u041c\u0435\u0448\u0430\u0458",prefetch:"Prefetch",nojava:"\u041d\u0435\u043c\u0430 java",maintainaspect:"\u0410\u0441\u043f\u0435\u043a\u0442 \u043d\u0430 \u043e\u0434\u0440\u0436\u0443\u0432\u0430\u045a\u0435",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430",center:"\u0426\u0435\u043d\u0442\u0430\u0440/\u0441\u0440\u0435\u0434\u0438\u043d\u0430",autogotourl:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0441\u043a\u0438 \u043e\u0434\u0438 \u043d\u0430 \u0423\u0420\u041b","shockwave_options":"\u041e\u043f\u0446\u0438\u0438 \u043d\u0430 Shockwave ","rmp_options":"\u041e\u043f\u0446\u0438\u0438 \u043d\u0430 Real media player","wmp_options":"\u041e\u043f\u0446\u0438\u0438 \u043d\u0435 Windows media player","qt_options":"\u041e\u043f\u0446\u0438\u0438 \u043d\u0430 Quicktime","flash_options":"\u041e\u043f\u0446\u0438\u0438 \u043d\u0430 Flash",hidden:"\u0421\u043e\u043a\u0440\u0438\u0435\u043d\u043e","align_bottom_left":"\u0414\u043e\u043b\u0435 \u043b\u0435\u0432\u043e","align_bottom_right":"\u0414\u043e\u043b\u0435 \u0434\u0435\u0441\u043d\u043e",flash:"flash",quicktime:"quicktime","embedded_audio_options":"\u0412\u0433\u0440\u0430\u0434\u0435\u043d\u0438 \u0430\u0443\u0434\u0438\u043e \u043e\u043f\u0446\u0438\u0438",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"\u0430\u0443\u0434\u0438\u043e",video:"\u0432\u0438\u0434\u0435\u043e","html5_video_options":"HTML5 \u0412\u0438\u0434\u0435\u043e \u043e\u043f\u0446\u0438\u0438",altsource1:"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0438\u0437\u0432\u043e\u0440 1",altsource2:"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0435\u043d \u0438\u0437\u0437\u0432\u043e\u0440 2",preload:"\u041d\u0430\u043b\u043e\u0436\u0438 \u043f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u043e",poster:"\u041f\u043e\u0441\u0442\u0435\u0440",source:"\u0418\u0437\u0432\u043e\u0440","html5_audio_options":"\u0410\u0443\u0434\u0438\u043e \u043e\u043f\u0446\u0438\u0438","preload_none":"\u0411\u0435\u0437 \u043f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u043e \u043d\u0430\u043b\u0430\u0433\u0430\u045a\u0435","preload_metadata":"\u041f\u0440\u0435\u0442\u0445\u043e\u0434\u043d\u043e \u043d\u0430\u043b\u043e\u0436\u0438 \u0432\u0438\u0434\u0435\u043e \u043c\u0435\u0442\u0430 \u043f\u043e\u0434\u0430\u0442\u043e\u0446\u0438","preload_auto":"\u041d\u0435\u043a\u0430 \u043e\u0434\u043b\u0443\u0447\u0438 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0447\u043a\u0438\u043e\u0442 \u043f\u0440\u0435\u043b\u0438\u0441\u0442\u0443\u0432\u0430\u0447",iframe:"iframe",embeddedaudio:"\u0432\u0433\u0440\u0430\u0434\u0435\u043d\u043e \u0430\u0443\u0434\u0438\u043e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ml_dlg.js
new file mode 100644
index 000000000..22f4e5519
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/mn_dlg.js
new file mode 100644
index 000000000..49c2a52e1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.media_dlg',{list:"\u0416\u0430\u0433\u0441\u0430\u0430\u043b\u0442",file:"\u0424\u0430\u0439\u043b/URL",advanced:"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d",general:"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439",title:"\u041c\u0443\u043b\u044c\u0442\u0438\u043c\u0435\u0434\u0438\u0430 \u0430\u0433\u0443\u0443\u043b\u0433\u0430 \u0431\u0443\u0443\u043b\u0433\u0430\u0445/ \u0437\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0445","align_top_left":"\u0417\u04af\u04af\u043d \u0434\u044d\u044d\u0434","align_center":"\u0413\u043e\u043b\u0434","align_left":"\u0417\u04af\u04af\u043d","align_bottom":"\u0414\u043e\u043e\u0440","align_right":"\u0411\u0430\u0440\u0443\u0443\u043d","align_top":"\u0414\u044d\u044d\u0440","qt_stream_warn":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e\u043d \u0434\u0430\u0445\u044c \'QT Src\' \u0442\u0430\u043b\u0431\u0430\u0440\u0442 \u0446\u0430\u0446\u0430\u0436 \u0431\u0443\u0439 rtsp \u043d\u04e9\u04e9\u0446\u0438\u0439\u0433 \u043e\u0440\u0443\u0443\u043b\u0436 \u04e9\u0433\u043d\u04e9.\n\u041c\u04e9\u043d \u0442\u0430 \u0442\u044d\u043d\u0434 \u0446\u0430\u0446\u0430\u0430\u0433\u04af\u0439 \u043d\u04e9\u04e9\u0446\u0438\u0439\u0433 \u043d\u044d\u043c\u044d\u0445 \u0445\u044d\u0440\u044d\u0433\u0442\u044d\u0439.",qtsrc:"QT Src",progress:"\u042f\u0432\u0446",sound:"\u0414\u0443\u0443",swstretchvalign:"Stretch V-\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",swstretchhalign:"Stretch H-\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"\u0411\u0430\u0440\u0443\u0443\u043d \u0434\u044d\u044d\u0434",uimode:"UI \u0433\u043e\u0440\u0438\u043c",rate:"Rate",playcount:"\u0422\u043e\u043e\u043b\u0443\u0443\u0440",defaultframe:"\u0424\u0440\u044d\u0439\u043c-\u04e9\u0433\u04e9\u0433\u0434\u043c\u04e9\u043b \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e",currentposition:"\u0418\u0434\u044d\u0432\u0445\u0442\u044d\u0439 \u0431\u0430\u0439\u0440\u043b\u0430\u043b",currentmarker:"\u0418\u0434\u044d\u0432\u0445\u0442\u044d\u0439 \u0442\u044d\u043c\u0434\u044d\u0433\u043b\u044d\u0433\u0447",captioningid:"Captioning id",baseurl:"\u04ae\u043d\u0434\u0441\u044d\u043d URL",balance:"\u0422\u044d\u043d\u0446\u0432\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442",windowlessvideo:"\u0426\u043e\u043d\u0445\u0433\u04af\u0439 \u0432\u0438\u0434\u0435\u043e",stretchtofit:"\u0425\u0430\u0440\u0443\u0443\u043b\u0430\u0445 \u043c\u0443\u0436\u0438\u0439\u0433 \u0441\u0443\u043b \u0431\u0430\u0439\u0433\u0430\u0430 \u0437\u0430\u0439\u0434 \u0442\u0430\u0430\u0440\u0443\u0443\u043b\u0430\u0445",mute:"\u0414\u0443\u0443\u0433\u04af\u0439",invokeurls:"\u0414\u0443\u0443\u0434\u0430\u0445 URLs",fullscreen:"\u0414\u044d\u043b\u0433\u044d\u0446 \u0434\u04af\u04af\u0440\u044d\u043d",enabled:"\u0418\u0434\u044d\u0432\u0445\u0442\u044d\u0439",autostart:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u044d\u0445\u043b\u044d\u043b",volume:"\u0414\u0443\u0443",target:"\u0422\u043e\u0432\u043b\u043e\u0441\u043e\u043d",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u0422\u04e9\u0433\u0441\u04e9\u0445 \u0446\u0430\u0433",starttime:"\u042d\u0445\u043b\u044d\u0445 \u0446\u0430\u0433",enablejavascript:"JavaScript \u0438\u0434\u044d\u0432\u0445\u0436\u04af\u04af\u043b\u044d\u0445",correction:"\u0417\u0430\u0441\u0432\u0430\u0440\u0433\u04af\u0439",targetcache:"\u0417\u043e\u0440\u0438\u043b\u0433\u044b\u0433 \u0442\u04af\u0440 \u0445\u0430\u0434\u0433\u0430\u043b\u043d\u0430",playeveryframe:"\u0424\u0440\u044d\u0439\u043c \u0431\u04af\u0440\u0438\u0439\u0433 \u0442\u043e\u0433\u043b\u0443\u0443\u043b\u043d\u0430",kioskmode:"\u041a\u0438\u043e\u0441\u043a \u0433\u043e\u0440\u0438\u043c",controller:"Controller",menu:"\u0426\u044d\u0441 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445",loop:"\u0414\u0430\u0432\u0442\u0430\u043b\u0442",play:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0430\u0430\u0440 \u0442\u043e\u0433\u043b\u0443\u0443\u043b\u043d\u0430",hspace:"\u0425\u044d\u0432\u0442\u044d\u044d \u0430\u043b\u0441\u043b\u0430\u043b\u0442",vspace:"\u0411\u043e\u0441\u043e\u043e \u0430\u043b\u0441\u043b\u0430\u043b\u0442","class_name":"CSS-\u0430\u043d\u0433\u0438",name:"\u041d\u044d\u0440",id:"\u0422\u0442",type:"\u0422\u04e9\u0440\u04e9\u043b",size:"\u0425\u044d\u043c\u0436\u044d\u044d",preview:"\u041d\u044f\u0433\u0442\u043b\u0430\u0445","constrain_proportions":"\u0425\u0430\u0440\u044c\u0446\u0430\u0430\u0433 \u0431\u0430\u0440\u0438\u0445",controls:"\u0423\u0434\u0438\u0440\u0434\u043b\u0430\u0433\u0430",numloop:"\u0414\u0430\u0432\u0442\u0430\u0445 \u0442\u043e\u043e",console:"\u041a\u043e\u043d\u0441\u043e\u043b",cache:"\u0417\u0430\u0432\u0441\u0440\u044b\u043d \u0445\u0430\u0434\u0433\u0430\u043b\u0430\u0433\u0447",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"\u0424\u043b\u044d\u0439\u0448 \u0445\u0443\u0432\u044c\u0441\u0430\u0433\u0447",base:"\u0421\u0443\u0443\u0440\u044c",bgcolor:"\u0414\u044d\u0432\u0441\u0433\u044d\u0440",wmode:"WMode",salign:"S-\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",align:"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",scale:"\u0425\u0443\u0432\u0430\u0430\u0440\u0438\u043b\u0430\u043b\u0442",quality:"\u0427\u0430\u043d\u0430\u0440",shuffle:"\u0421\u0430\u043d\u0430\u043c\u0441\u0430\u0440\u0433\u04af\u0439\u0433\u044d\u044d\u0440 \u0442\u043e\u0433\u043b\u0443\u0443\u043b\u0430\u0445",prefetch:"Prefetch",nojava:"\u0416\u0430\u0432\u0430\u0433\u04af\u0439",maintainaspect:"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0445\u0430\u0440\u044c\u0446\u0430\u0430\u0433 \u0445\u0430\u0434\u0433\u0430\u043b\u0430\u043d\u0430",imagestatus:"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0442\u04e9\u043b\u04e9\u0432",center:"\u0413\u043e\u043b\u043b\u0443\u0443\u043b\u0441\u0430\u043d",autogotourl:"\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0430\u0430\u0440 \u043e\u0447\u0438\u0445 URL","shockwave_options":"Shockwave-\u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","rmp_options":"Real Media Player-\u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","wmp_options":"Windows Media Player-\u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","qt_options":"Quicktime-\u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","flash_options":"\u0424\u043b\u044d\u0439\u0448-\u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e",hidden:"\u0414\u0430\u043b\u0434\u0430\u043b\u0441\u0430\u043d","align_bottom_left":"\u0417\u04af\u04af\u043d \u0434\u043e\u043e\u0434","align_bottom_right":"\u0411\u0430\u0440\u0443\u0443\u043d \u0434\u043e\u043e\u0434","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ms_dlg.js
new file mode 100644
index 000000000..c73ae0a15
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.media_dlg',{list:"Senarai",file:"Fail/URL",advanced:"Lanjutan",general:"Am",title:"Masukkan / sunting media","align_top_left":"Kiri atas","align_center":"Tengah","align_left":"Kiri","align_bottom":"Bawah","align_right":"Kanan","align_top":"Atas",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch Selarian-Tegak",swstretchhalign:"Bentangan Selarian-Ufuk",swstretchstyle:"Gaya bentangan",scriptcallbacks:"Panggilan balik skrip","align_top_right":"Kanan atas",uimode:"Mod Grafik",rate:"Undi",playcount:"Kira",defaultframe:"Bingkai asal",currentposition:"Posisi semasa",currentmarker:"Penanda semasa",captioningid:"Tajuk id",baseurl:"URL dasar",balance:"Baki",windowlessvideo:"Tetingkap tanpa video",stretchtofit:"Bujurkan supaya sesuai",mute:"Bisu",invokeurls:"Panggil URL",fullscreen:"Skrin penuh",enabled:"Dibolehkan",autostart:"Auto mula",volume:"Ketinggian suara",target:"Sasaran",qtsrcchokespeed:"Kelajuan sumbatan",href:"Href",endtime:"Masa tamat",starttime:"Masa bermula",enablejavascript:"Bolehkan JavaScript",correction:"Tiada pembetulan",targetcache:"Sasaran tersembunyi",playeveryframe:"Main setiap bingkai",kioskmode:"Mode toko",controller:"Kendali",menu:"Tunjuk menu",loop:"Gelung",play:"Auto main",hspace:"Ruangan-Datar",vspace:"Ruangan-Tegak","class_name":"Kelas",name:"Nama",id:"Id",type:"Jenis",size:"Dimensi",preview:"Pratonton","constrain_proportions":"Kadar tahanan",controls:"Kendali",numloop:"Nombor gelungan",console:"Konsol",cache:"Tempat menyembunyikan",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Dasar",bgcolor:"Latar belakang",wmode:"WMod",salign:"SLuruskan",align:"Luruskan",scale:"Ukuran",quality:"Kualiti",shuffle:"Merangkak",prefetch:"Preambilan",nojava:"Java tidak dibenarkan",maintainaspect:"Pelihara aspek",imagestatus:"Status imej",center:"Tengah",autogotourl:"Auto pergi-ke URL","shockwave_options":"Shockwave","rmp_options":"Pemain Real media","wmp_options":"Pemain Windows media","qt_options":"Quicktime","flash_options":"Flash",hidden:"Tersorok","align_bottom_left":"Bawah kiri","align_bottom_right":"Bawah kanan","qt_stream_warn":"Streamed RTSP resources should be added to the QT Source field under the Advanced tab.\nYou should also add a non-streamed version to the Source field.","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/my_dlg.js
new file mode 100644
index 000000000..81d89cc8a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.media_dlg',{list:"\u1005\u102c\u101b\u1004\u103a\u1038",file:"\u1016\u102d\u102f\u1004\u103a/URL",advanced:"\u1021\u1011\u1030\u1038",general:"\u1021\u1031\u1011\u103d\u1031\u1011\u103d",title:"\u1019\u102e\u1012\u102e\u101a\u102c \u103c\u1019\u103e\u102f\u1015\u103a\u1011\u100a\u103a\u1037 / \u103c\u1015\u102f\u103c\u1015\u1004\u103a","align_top_left":"\u1011\u102d\u1015\u103a\u1006\u1036\u102f\u1038\u1018\u101a\u103a\u1018\u1000\u103a","align_center":"\u1021\u101c\u101a\u103a\u1017\u101f\u102d\u102f","align_left":"\u1018\u101a\u103a","align_bottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001","align_right":"\u100a\u102c\u1018\u1000\u103a","align_top":"\u1011\u102d\u1015\u103a\u1015\u102d\u102f\u1004\u103a\u1038","qt_stream_warn":"Streamed rtsp resources \u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1021\u1011\u1030\u1038 tab \u1031\u1021\u102c\u1000\u103a\u101b\u103e\u102d QT Src field \u1010\u103d\u1004\u103a \u1011\u100a\u103a\u1037\u101e\u1004\u103a\u1037\u101e\u100a\u103a\u104bn non streamed version \u1000\u102d\u102f\u101c\u100a\u103a\u1038 Src field.. \u1010\u103d\u1004\u103a \u1011\u100a\u103a\u1037\u1031\u1015\u1038\u101e\u1004\u103a\u1037\u101e\u100a\u103a\u104b",qtsrc:"QT SRC",progress:"\u101c\u102f\u1015\u103a\u1031\u1006\u102c\u1004\u103a\u1019\u103e\u102f \u1021\u1031\u103c\u1001\u1021\u1031\u1014",sound:"\u1021\u101e\u1036",swstretchvalign:"V-Align \u103c\u1016\u1004\u103a\u1037 \u1006\u103d\u1032\u1006\u1014\u103a\u1037",swstretchhalign:"H-Align \u103c\u1016\u1004\u103a\u1037 \u1006\u103d\u1032\u1006\u1014\u103a\u1037",swstretchstyle:"\u1006\u103d\u1032\u1006\u1014\u103a\u1037\u1019\u103e\u102f \u1005\u1010\u102d\u102f\u1004\u103a",scriptcallbacks:"Script callbacks","align_top_right":"\u1011\u102d\u1015\u103a\u1006\u1036\u102f\u1038 \u100a\u102c\u1018\u1000\u103a",uimode:"UI \u1019\u102f(\u1012\u103a)",rate:"\u1014\u103e\u102f\u1014\u103a\u1038",playcount:"\u1016\u103d\u1004\u103a\u1037\u101c\u103e\u1005\u103a\u1019\u103e\u102f \u1021\u1031\u101b\u1021\u1010\u103d\u1000\u103a",defaultframe:"\u1019\u1030\u101c \u1016\u101b\u102d\u1019\u103a",currentposition:"\u101c\u1000\u103a\u101b\u103e\u102d \u1031\u1014\u101b\u102c",currentmarker:"\u101c\u1000\u103a\u101b\u103e\u102d \u1021\u1019\u103e\u1010\u103a\u1021\u101e\u102c\u1038",captioningid:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1010\u1015\u103a\u103c\u1001\u1004\u103a\u1038 id",baseurl:"\u1021\u1031\u103c\u1001\u1001\u1036 URL",balance:"\u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f",windowlessvideo:"\u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1019\u1015\u102b\u1031\u101e\u102c \u1017\u103d\u102e\u1012\u102e\u101a\u102d\u102f",stretchtofit:"\u1021\u1036\u1037\u1000\u102d\u102f\u1000\u103a\u103c\u1016\u1005\u103a\u1031\u1005\u101b\u1014\u103a \u1006\u103d\u1032\u1006\u1014\u103a\u1037",mute:"\u1021\u101e\u1036\u1015\u102d\u1010\u103a",invokeurls:"\u1031\u1016\u102c\u103a\u103c\u1015 URL \u1019\u103b\u102c\u1038",fullscreen:"\u1005\u1000\u101b\u1004\u103a \u1021\u103c\u1015\u100a\u103a\u1037",enabled:"\u1016\u103d\u1004\u103a\u1037\u1011\u102c\u1038\u1031\u101e\u102c",autostart:"\u1021\u101c\u102d\u102f\u101c\u102d\u102f \u1005\u1016\u103d\u1004\u103a\u1037",volume:"\u1021\u101e\u1036 \u1021\u1010\u102d\u102f\u1038\u1021\u1000\u103b\u101a\u103a",target:"\u101b\u100a\u103a\u1019\u103e\u1014\u103a\u1038\u1001\u103b\u1000\u103a(\u1010\u102c\u1038\u1002\u1000\u103a)",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"\u1021\u1006\u1036\u102f\u1038\u101e\u1010\u103a\u1001\u103b\u102d\u1014\u103a",starttime:"\u1021\u1005\u103c\u1015\u102f\u1001\u103b\u102d\u1014\u103a",enablejavascript:"JavaScript \u1016\u103d\u1004\u103a\u1037\u101b\u1014\u103a",correction:"\u1021\u1019\u103e\u1014\u103a\u1019\u103c\u1015\u1004\u103a\u1015\u102b",targetcache:"\u1010\u102c\u1038\u1002\u1000\u103a cache",playeveryframe:"\u1016\u101b\u102d\u1019\u103a\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1016\u103d\u1004\u103a\u1037\u1015\u102b",kioskmode:"Kiosk \u1019\u102f(\u1012\u103a)",controller:"\u1011\u102d\u1014\u103a\u1038\u1001\u103b\u102f\u1015\u103a\u1001\u101c\u102f\u1015\u103a",menu:"\u1019\u102e\u1014\u1030\u1038\u1005\u102c\u101b\u1004\u103a\u1038\u1000\u102d\u102f \u103c\u1015\u1011\u102c\u1038\u1015\u102b",loop:"\u103c\u1015\u1014\u103a\u101b\u1005\u103a\u1016\u103d\u1004\u103a\u1037\u1015\u102b",play:"\u1021\u101c\u102d\u102f\u101c\u102d\u102f\u1016\u103d\u1004\u103a\u1037",hspace:"H-\u1000\u103d\u1000\u103a\u101c\u1015\u103a",vspace:"V-\u1000\u103d\u1000\u103a\u101c\u1015\u103a","class_name":"class \u1021\u1019\u100a\u103a",name:"\u1021\u1019\u100a\u103a",id:"ID",type:"\u1021\u1019\u103b\u102d\u102f\u1038\u1021\u1005\u102c\u1038",size:"\u1021\u1010\u102d\u102f\u1004\u103a\u1038\u1021\u1011\u103d\u102c\u1019\u103b\u102c\u1038",preview:"\u1021\u1005\u1019\u103a\u1038\u103c\u1000\u100a\u103a\u1037\u101b\u1014\u103a","constrain_proportions":"\u103c\u1019\u1004\u103a\u1000\u103d\u1004\u103a\u1038\u1021\u1001\u103b\u102d\u102f\u1038\u1000\u102d\u102f \u1011\u102d\u1014\u103a\u1038\u100a\u103e\u102d\u1015\u102b",controls:"\u1011\u102d\u1014\u103a\u1038\u1001\u103b\u102f\u1015\u103a\u1019\u103e\u102f\u1019\u103b\u102c\u1038",numloop:"\u103c\u1015\u1014\u103a\u101b\u1005\u103a\u101b\u1014\u103a \u1021\u103c\u1000\u102d\u1019\u103a\u1021\u1031\u101b\u1021\u1010\u103d\u1000\u103a",console:"CONSOLE",cache:"CACHE",autohref:"\u1021\u101c\u102d\u102f\u101c\u102d\u102fHREF\u1011\u100a\u103a\u1037",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"\u1021\u1031\u103c\u1001\u1001\u1036",bgcolor:"\u1031\u1014\u102c\u1000\u103a\u1001\u1036",wmode:"WMode",salign:"SAlign",align:"Align",scale:"\u1005\u1031\u1000\u1038",quality:"\u1021\u101b\u100a\u103a\u1021\u1031\u101e\u103d\u1038",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain aspect",imagestatus:"\u101b\u102f\u1015\u103a\u1015\u1036\u102f\u1021\u1031\u103c\u1001\u1021\u1031\u1014",center:"\u1021\u101c\u101a\u103a\u1017\u101f\u102d\u102f",autogotourl:"\u1021\u101c\u102d\u102f\u101c\u102d\u102f\u101e\u103d\u102c\u1038\u101b\u1014\u103a URL","shockwave_options":"Shockwave \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038","rmp_options":"Real media player \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038","wmp_options":"Windows media player \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038","qt_options":"Quicktime \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038","flash_options":"Flash \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038",hidden:"\u101d\u103e\u1000\u103a\u1011\u102c\u1038\u1031\u101e\u102c","align_bottom_left":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u1018\u101a\u103a","align_bottom_right":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u100a\u102c","html5_video_options":"HTML5 \u1017\u103d\u102e\u1012\u102e\u101a\u102d\u102f \u1031\u101b\u103d\u1038\u1001\u103b\u101a\u103a\u1005\u101b\u102c\u1019\u103b\u102c\u1038",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"\u1015\u102d\u102f\u1005\u1010\u102c",source:"\u101b\u1004\u103a\u1038\u103c\u1019\u1005\u103a","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nb_dlg.js
new file mode 100644
index 000000000..162beda16
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.media_dlg',{list:"Liste",file:"Fil/URL",advanced:"Avansert",general:"Generelt",title:"Sett inn / rediger inkludert objekt","align_top_left":"Topp venstre","align_center":"Midtstill","align_left":"Venstre","align_bottom":"Bunn","align_right":"H\u00f8yre","align_top":"Topp","qt_stream_warn":"Streamede rtsp-ressurser b\u00f8r legges til QT Src-felt i avansert-fanen.\nDu b\u00f8r ogs\u00e5 legge til en ikke-streamet versjon i Src-felt",qtsrc:"QT Src",progress:"Framdrift",sound:"Lyd",swstretchvalign:"Strekk V-justering",swstretchhalign:"Strekk H-justering",swstretchstyle:"Strekkstil",scriptcallbacks:"Skript-referanser","align_top_right":"Topp h\u00f8yre",uimode:"UI-modus",rate:"Rate",playcount:"Teller",defaultframe:"Standardramme",currentposition:"Aktiv posisjon",currentmarker:"Aktiv mark\u00f8r",captioningid:"Fang opp id",baseurl:"Utgangsadresse (URL)",balance:"Balanse",windowlessvideo:"Video uten vindu",stretchtofit:"Strekk for \u00e5 passe inn",mute:"Demp",invokeurls:"Aktiviser URL-er",fullscreen:"Fullskjerm",enabled:"Kj\u00f8rbar",autostart:"Autostart",volume:"Volum",target:"M\u00e5l",qtsrcchokespeed:"Choke-hastighet",href:"Href",endtime:"Stopptid",starttime:"Starttid",enablejavascript:"Tillat Javaskript",correction:"Ingen korreksjon",targetcache:"M\u00e5l-mellomlagring",playeveryframe:"Spill hver ramme",kioskmode:"Kiosk-modus",controller:"Kontroller",menu:"Vis meny",loop:"L\u00f8kke",play:"Autostart",hspace:"Horisontal avstand",vspace:"Vertikal avstand","class_name":"Klasse",name:"Navn",id:"Id",type:"Type",size:"St\u00f8rrelse",preview:"Forh\u00e5ndsvisning","constrain_proportions":"Behold st\u00f8rrelsesforhold",controls:"Kontroller",numloop:"Antall gjennoml\u00f8p",console:"Konsoll",cache:"Mellomlager",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-variabler",base:"Base",bgcolor:"Bakgrunn",wmode:"W-modus",salign:"S-justering",align:"Justering",scale:"Skalering",quality:"Kvalitet",shuffle:"Miks",prefetch:"Forh\u00e5ndsregistrer",nojava:"Ingen Java",maintainaspect:"Behold st\u00f8rrelsesforhold",imagestatus:"Bildestatus",center:"Midtstill",autogotourl:"Auto-g\u00e5-til-URL","shockwave_options":"Shockwave-innstillinger","rmp_options":"Real mediaplayer-innstillinger","wmp_options":"Windows mediaplayer-innstillinger","qt_options":"Quicktime-innstillinger","flash_options":"Flash-egenskaper",hidden:"Skjult","align_bottom_left":"Bunn venstre","align_bottom_right":"Bunn h\u00f8yre",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Innebygd lyd-valg",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"lyd",video:"video","html5_video_options":"HTML5-videovalg",altsource1:"Alternativ kilde 1",altsource2:"Alternativ kilde 2",preload:"Forh\u00e5ndsvis",poster:"Poster",source:"Kilde","html5_audio_options":"Lydvalg","preload_none":"Ikke forh\u00e5ndslast","preload_metadata":"Forh\u00e5ndslast videos metadata","preload_auto":"La nettleser bestemme",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nl_dlg.js
new file mode 100644
index 000000000..68ae6b008
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.media_dlg',{list:"Lijst",file:"Bestand/URL",advanced:"Geavanceerd",general:"Algemeen",title:"Media invoegen/bewerken","align_top_left":"Linksboven","align_center":"Centreren","align_left":"Links","align_bottom":"Onder","align_right":"Rechts","align_top":"Boven","qt_stream_warn":"Gestreamde RTSP bronnen dienen op het tabblad geavanceerd bij Quicktime bron te worden opgegeven.\nDe niet-gestreamde versie kan dan bij het tabblad algemeen worden opgegeven.",qtsrc:"Quicktime bron",progress:"Voortgang",sound:"Geluid",swstretchvalign:"V-Schaal",swstretchhalign:"H-Schaal",swstretchstyle:"Schaal",scriptcallbacks:"Script callbacks","align_top_right":"Rechtsboven",uimode:"UI Modus",rate:"Snelheid",playcount:"Afspeelteller",defaultframe:"Standaard frame",currentposition:"Huidige positie",currentmarker:"Huidige markering",captioningid:"Ondertiteling id",baseurl:"Basis URL",balance:"Balans",windowlessvideo:"Video zonder venster",stretchtofit:"Passend maken",mute:"Dempen",invokeurls:"URLs laden",fullscreen:"Volledig scherm",enabled:"Ingeschakeld",autostart:"Automatisch afspelen",volume:"Volume",target:"Doel",qtsrcchokespeed:"Chokesnelheid",href:"Href",endtime:"Eindtijd",starttime:"Starttijd",enablejavascript:"JavaScript Inschakelen",correction:"Geen correctie",targetcache:"Doelcache",playeveryframe:"Elk frame afspelen",kioskmode:"Kioskmodus",controller:"Controller",menu:"Menu weergeven",loop:"Herhalen",play:"Automatisch afspelen",hspace:"H-Ruimte",vspace:"V-Ruimte","class_name":"Klasse",name:"Naam",id:"Id",type:"Type",size:"Afmetingen",preview:"Voorbeeld","constrain_proportions":"Verhouding bewaren",controls:"Bediening",numloop:"Aantal herhalingen",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Variabelen",base:"Basis",bgcolor:"Achtergrond",wmode:"WMode",salign:"Schaaluitlijning",align:"Uitlijning",scale:"Schaal",quality:"Kwaliteit",shuffle:"Willekeurige volgorde",prefetch:"Voorladen",nojava:"Geen Java",maintainaspect:"Verhouding bewaren",imagestatus:"Afbeeldingstatus",center:"Centreren",autogotourl:"Automatisch naar URL","shockwave_options":"Shockwave opties","rmp_options":"Real Media Player Opties","wmp_options":"Windows Media Player Opties","qt_options":"Quicktime opties","flash_options":"Flash opties",hidden:"Verborgen","align_bottom_left":"Linksonder","align_bottom_right":"Rechtsonder",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Ge\u00efntegreerd Geluid Opties",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"geluid",video:"video","html5_video_options":"HTML5 Video Opties",altsource1:"Alternatieve bron 1",altsource2:"Alternatieve bron 2",preload:"Voorladen",poster:"Poster",source:"Bron","html5_audio_options":"Audio Opties","preload_none":"Niet voorladen","preload_metadata":"Video metadata voorladen","preload_auto":"Laat browser beslissen",iframe:"iframe",embeddedaudio:"ge\u00efntegreerd geluid"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nn_dlg.js
new file mode 100644
index 000000000..dc37b11bc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.media_dlg',{list:"Liste",file:"Fil/URL",advanced:"Avansert",general:"Generelt",title:"Set inn / rediger inkludert objekt","align_top_left":"Topp venstre","align_center":"Midt","align_left":"Venstre","align_bottom":"Botn","align_right":"H\u00f8gre","align_top":"Topp","qt_stream_warn":"Streama rtsp-ressursar b\u00f8r leggsst til QT Src field i avansert-fana.\nDu b\u00f8r ogs\u00e5 leggje til ein ikkje-streama versjon i src field",qtsrc:"QT Src",progress:"Framdrift",sound:"Lyd",swstretchvalign:"Strekk V-justering",swstretchhalign:"Strekk H-justering",swstretchstyle:"Strekkstil",scriptcallbacks:"Skript-referanser","align_top_right":"Top h\u00f8gre",uimode:"UI-modus",rate:"Rate",playcount:"Tellar",defaultframe:"Standardramme",currentposition:"Aktiv posisjon",currentmarker:"Aktiv mark\u00f8r",captioningid:"Fange opp id",baseurl:"Base URL",balance:"Balanse",windowlessvideo:"Video utan vindauge",stretchtofit:"Strekk for \u00e5 passe inn",mute:"Demp",invokeurls:"Aktiviser URL-ar",fullscreen:"Fullskjerm",enabled:"K\u00f8yrbar",autostart:"Autostart",volume:"Volum",target:"M\u00e5l",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Stopptid",starttime:"Starttid",enablejavascript:"Tillat Javaskript",correction:"Ingen korreksjon",targetcache:"M\u00e5l-cache",playeveryframe:"Spel kvar ramme",kioskmode:"Kiosk-modus",controller:"Kontroller",menu:"Vis meny",loop:"Lykkje",play:"Autostart",hspace:"Horisontal avstand",vspace:"Vertikal avstand","class_name":"Klasse",name:"Namn",id:"Id",type:"Type",size:"Storleik",preview:"Sj\u00e5 f\u00f8rebels utkast","constrain_proportions":"Behald proporsjonar",controls:"Kontroller",numloop:"Antal gjennoml\u00f8p",console:"Konsoll",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-variablar",base:"Base",bgcolor:"Bakgrunn",wmode:"W-modus",salign:"S-justering",align:"Justering",scale:"Skalering",quality:"Kvalitet",shuffle:"Miks",prefetch:"Registrer p\u00e5 f\u00f8rehand",nojava:"Ikke Java",maintainaspect:"Behald proporsjonar",imagestatus:"Status for bilete",center:"Midtstill",autogotourl:"Auto-g\u00e5-til-URL","shockwave_options":"Shockwave-innstillinger","rmp_options":"Real mediaplayer-innstillingar","wmp_options":"Windows mediaplayer-innstillingar","qt_options":"Quicktime-innstillingar","flash_options":"Flash-eigenskapar",hidden:"Skjult","align_bottom_left":"Botn venste","align_bottom_right":"Botn h\u00f8gre","embedded_audio_options":"Embedded Audio Options","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/no_dlg.js
new file mode 100644
index 000000000..5eb98fcd7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.media_dlg',{list:"Liste",file:"Fil/URL",advanced:"Avansert",general:"Generelt",title:"Sett inn/rediger inkludert objekt","align_top_left":"Topp venstre","align_center":"Midten","align_left":"Venstre","align_bottom":"Bunn","align_right":"H\u00f8yre","align_top":"Topp","qt_stream_warn":"Streamede rtsp ressurser b\u00f8r legges til QT Src-feltet under fanen avansert.\nDu b\u00f8r ogs\u00e5 legge til en ikke-streamet versjon i src-feltet.",qtsrc:"QT Src",progress:"Fremdrift",sound:"Lyd",swstretchvalign:"Strekk V-justering",swstretchhalign:"Strekk H-justering",swstretchstyle:"Strekk stil",scriptcallbacks:"Skript referanser","align_top_right":"Topp h\u00f8yre",uimode:"UI-modus",rate:"Rate",playcount:"Teller",defaultframe:"Standard ramme",currentposition:"Aktiv posisjon",currentmarker:"Aktiv mark\u00f8r",captioningid:"Fange opp id",baseurl:"Utgangsadresse (URL)",balance:"Balanse",windowlessvideo:"Video uten vindu",stretchtofit:"Strekk for \u00e5 passe",mute:"Dempe",invokeurls:"Aktiver URLer",fullscreen:"Fullskjerm",enabled:"Aktivert",autostart:"Autostart",volume:"Volum",target:"M\u00e5l",qtsrcchokespeed:"Choke-hastighet",href:"Href",endtime:"Stopp tid",starttime:"Start tid",enablejavascript:"Tillat Javaskript",correction:"Ingen korreksjon",targetcache:"M\u00e5l-mellomlagring",playeveryframe:"Spill hver ramme",kioskmode:"Kiosk-modus",controller:"Kontroller",menu:"Vis meny",loop:"L\u00f8kke",play:"Autostart",hspace:"H-avstand",vspace:"V-avstand","class_name":"Klasse",name:"Navn",id:"Id",type:"Type",size:"Dimmensjoner",preview:"Forh\u00e5ndsvis","constrain_proportions":"Behold proporsjoner",controls:"Kontroller",numloop:"Antall gjennomganger",console:"Konsoll",cache:"Mellomlager",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash variabler",base:"Base",bgcolor:"Bakgrunn",wmode:"W-modus",salign:"S-justering",align:"Justering",scale:"Skala",quality:"Kvalitet",shuffle:"Mikse",prefetch:"Hente p\u00e5 forh\u00e5nd",nojava:"Ingen Java",maintainaspect:"Behold st\u00f8rrelsesforhold",imagestatus:"Bildestatus",center:"Midtstill",autogotourl:"Auto g\u00e5-til URL","shockwave_options":"Shockwave egenskaper","rmp_options":"Real Media Player egenskaper","wmp_options":"Windows Media Player egenskaper","qt_options":"Quicktime egenskaper","flash_options":"Flash egenskaper",hidden:"Skjult","align_bottom_left":"Bunn venste","align_bottom_right":"Bunn h\u00f8gre",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Embedded lyd egenskaper",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"lyd",video:"video","html5_video_options":"HTML5-videovalg",altsource1:"Alternativ kilde 1",altsource2:"Alternativ kilde 2",preload:"Forh\u00e5ndsvis",poster:"Poster",source:"Kilde","html5_audio_options":"Lyd egenskaper","preload_none":"Ikke hent p\u00e5 forh\u00e5nd","preload_metadata":"Hent video metadata p\u00e5 forh\u00e5nd","preload_auto":"La brukerens nettleser avgj\u00f8re",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/pl_dlg.js
new file mode 100644
index 000000000..9e054b21d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.media_dlg',{list:"Lista",file:"Plik/URL",advanced:"Zaawansowane",general:"G\u0142\u00f3wne",title:"Wstaw/Edytuj wbudowane media","align_top_left":"G\u00f3rny lewy","align_center":"\u015arodek","align_left":"Lewo","align_bottom":"D\u00f3\u0142","align_right":"Prawo","align_top":"G\u00f3ra","qt_stream_warn":"Emitowane \u017ar\u00f3d\u0142a rtsp powinny by\u0107 dodane do pola QT Src w zak\u0142adce zaawansowane.nPowiniene\u015b r\u00f3wnie\u017c doda\u0107 niestrumieniow\u0105 wersj\u0119 do pola Src.",qtsrc:"QT Src",progress:"Post\u0119p",sound:"D\u017awi\u0119k",swstretchvalign:"Wyr\u00f3wnaj w pionie",swstretchhalign:"Wyr\u00f3wnaj w poziomie",swstretchstyle:"Styl rozci\u0105gania",scriptcallbacks:"Funkcje zwrotne skryptu","align_top_right":"G\u00f3rny prawy",uimode:"Tryb UI",rate:"Tempo",playcount:"Ilo\u015b\u0107 odtworze\u0144",defaultframe:"Domy\u015blna ramka",currentposition:"Aktualna pozycja",currentmarker:"Aktualny znacznik",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balans",windowlessvideo:"Wideo bez okienka",stretchtofit:"Rozci\u0105gnij aby dopasowa\u0107",mute:"Wycisz",invokeurls:"Odwo\u0142aj si\u0119 do URLi",fullscreen:"Pe\u0142ny ekran",enabled:"Aktywny",autostart:"Auto start",volume:"G\u0142o\u015bno\u015b\u0107",target:"Cel",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Ko\u0144cowy czas",starttime:"Pocz\u0105tkowy czas",enablejavascript:"W\u0142\u0105cz JavaScript",correction:"Bez korekcji",targetcache:"Target cache",playeveryframe:"Odtwarzaj ka\u017cd\u0105 ramk\u0119",kioskmode:"Tryb kiosku",controller:"Kontroler",menu:"Poka\u017c menu",loop:"Zap\u0119tlenie",play:"Autoodtwarzanie",hspace:"H-Space",vspace:"V-Space","class_name":"Klasa",name:"Nazwa",id:"Id",type:"Typ",size:"Wymiary",preview:"Podgl\u0105d","constrain_proportions":"Zachowaj proporcje",controls:"Controls",numloop:"Liczba powt\u00f3rze\u0144",console:"Konsola",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Baza",bgcolor:"T\u0142o",wmode:"WMode",salign:"SAlign",align:"Wyr\u00f3wnaj",scale:"Skala",quality:"Jako\u015b\u0107",shuffle:"Losuj",prefetch:"Prze\u0142aduj",nojava:"Bez javy",maintainaspect:"Utrzymaj aspekt",imagestatus:"Obraz statusu",center:"Wy\u015brodkuj",autogotourl:"Automatycznie przejd\u017a pod adres","shockwave_options":"Opcje Shockwave","rmp_options":"Opcje Real media player","wmp_options":"Opcje Windows media player","qt_options":"Opcje Quicktime","flash_options":"Opcje flasha",hidden:"Ukryty","align_bottom_left":"Dolny lewy","align_bottom_right":"Dolny prawy",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Opcje Embedded Audio",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Opcje HTML5 Video",altsource1:"Alternatywne \u017ar\u00f3d\u0142o 1",altsource2:"Alternatywne \u017ar\u00f3d\u0142o 2",preload:"Prze\u0142aduj",poster:"Obraz",source:"\u0179r\u00f3d\u0142o","html5_audio_options":"Opcje audio","preload_none":"Nie \u0142\u0105duj wst\u0119pnie","preload_metadata":"\u0141aduj wst\u0119pnie metadane video","preload_auto":"Pozw\u00f3l zdecydowa\u0107 przegl\u0105darce u\u017cytkownika",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ps_dlg.js
new file mode 100644
index 000000000..6589c9be1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/pt_dlg.js
new file mode 100644
index 000000000..f578cd750
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.media_dlg',{list:"Lista",file:"Arquivo/URL",advanced:"Avan\u00e7ado",general:"Geral",title:"Inserir/Editar m\u00eddia embutida","align_top_left":"Topo esquerda","align_center":"Centro","align_left":"Esquerda","align_bottom":"Abaixo","align_right":"Direita","align_top":"Topo","qt_stream_warn":"Fluxos de recursos RTSP devem ser acrescentados ao campo QT Src no Modo Avan\u00e7ado.\nUma vers\u00e3o sem fluxo tamb\u00e9m deve ser acrescentada ao campo Src.",qtsrc:"QT Src",progress:"Progresso",sound:"Som",swstretchvalign:"For\u00e7ar V-Alinhamento",swstretchhalign:"For\u00e7ar H-Alinhamento",swstretchstyle:"For\u00e7ar Estilo",scriptcallbacks:"Retornos de chamada de script","align_top_right":"Topo direita",uimode:"Modo UI",rate:"Taxa",playcount:"Contagem de ouvintes",defaultframe:"Frame padr\u00e3o",currentposition:"Posi\u00e7\u00e3o atual",currentmarker:"Marcador atual",captioningid:"Id de legenda",baseurl:"URL Base",balance:"Stereo",windowlessvideo:"V\u00eddeo sem janela",stretchtofit:"Estender",mute:"Mudo",invokeurls:"Chamar URLs",fullscreen:"Tela inteira",enabled:"Ativado",autostart:"Execu\u00e7\u00e3o autom\u00e1tica",volume:"Volume",target:"Alvo",qtsrcchokespeed:"Diminuir Velocidade",href:"Link",endtime:"Hora do fim",starttime:"Hora de in\u00edcio",enablejavascript:"Permitir JavaScript",correction:"Sem correc\u00e7\u00f5es",targetcache:"Cache alvo",playeveryframe:"Executar todas as frames",kioskmode:"Modo Kiosk",controller:"Controlador",menu:"Mostrar menu",loop:"Repeti\u00e7\u00e3o autom\u00e1tica",play:"Execu\u00e7\u00e3o autom\u00e1tica",hspace:"Espa\u00e7o horizontal",vspace:"Espa\u00e7o vertical","class_name":"Classe",name:"Nome",id:"ID",type:"Tipo",size:"Dimens\u00f5es",preview:"Previs\u00e3o","constrain_proportions":"Manter propor\u00e7\u00f5es",controls:"Controles",numloop:"Repeti\u00e7\u00f5es",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Fundo",wmode:"WMode",salign:"SAlign",align:"Alinhamento",scale:"Escala",quality:"Qualidade",shuffle:"Aleat\u00f3rio",prefetch:"Pr\u00e9-buscar",nojava:"Sem Java",maintainaspect:"Manter aspecto",imagestatus:"Status da imagem",center:"Centro",autogotourl:"Auto abrir URL","shockwave_options":"Op\u00e7\u00f5es Shockwave","rmp_options":"Op\u00e7\u00f5es Real Media Player","wmp_options":"Op\u00e7\u00f5es Windows Media Player","qt_options":"Op\u00e7\u00f5es Quicktime","flash_options":"Op\u00e7\u00f5es Flash",hidden:"Oculto","align_bottom_left":"Abaixo esquerda","align_bottom_right":"Abaixo direita",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Op\u00e7\u00f5es de \u00c1udio Embutido",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockware",audio:"\u00e1udio",video:"v\u00eddeo","html5_video_options":"Op\u00e7\u00f5es de v\u00eddeo HTML5",altsource1:"C\u00f3digo alternativo 1",altsource2:"C\u00f3digo alternativo 2",preload:"Pr\u00e9-carregar",poster:"Poster",source:"Fonte","html5_audio_options":"Op\u00e7\u00f5es de Audio","preload_none":"N\u00e3o Pr\u00e9-carregar","preload_metadata":"Pr\u00e9-carregar metadata de v\u00eddeo","preload_auto":"Deixar que navegador do usu\u00e1rio decida",iframe:"iframe",embeddedaudio:"\u00e1udio embutido"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ro_dlg.js
new file mode 100644
index 000000000..6b4bfb316
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.media_dlg',{list:"List\u0103",file:"Fi\u0219ier/URL",advanced:"Avansat\u0103",general:"General",title:"Insereaz\u0103 / editeaz\u0103 media","align_top_left":"St\u00e2nga sus","align_center":"Centru","align_left":"St\u00e2nga","align_bottom":"Jos","align_right":"Dreapta","align_top":"Sus","qt_stream_warn":"Resursele de tip flux rtsp trebuie ad\u0103ugate \u00een c\u00e2mpul QT Src din fila avansat.\nAr trebui de asemenea s\u0103 adaugi \u00een c\u00e2mpul Src o variant\u0103 care nu este de tip flux.",qtsrc:"QT Src",progress:"Progres",sound:"Sunet",swstretchvalign:"\u00centindere V-Aliniere",swstretchhalign:"\u00centindere H-Aliniere",swstretchstyle:"Stil \u00eentindere",scriptcallbacks:"Script callback","align_top_right":"Dreapta sus",uimode:"Mod UI",rate:"Vot",playcount:"Numar red\u0103ri",defaultframe:"Frame implicit",currentposition:"Pozi\u021bie curent\u0103",currentmarker:"Marcator curent",captioningid:"Titlu id",baseurl:"URL baz\u0103",balance:"Balan\u021b\u0103",windowlessvideo:"Video f\u0103r\u0103 fereastr\u0103",stretchtofit:"\u00centinde pentru a se \u00eencadra",mute:"Mut",invokeurls:"Invoc\u0103 URL-uri",fullscreen:"Ecran complet",enabled:"Activat",autostart:"Pornire automat\u0103",volume:"Volum",target:"Tin\u0163a",qtsrcchokespeed:"Viteza de sufocare",href:"Href",endtime:"Timp de sf\u00e2r\u0219it",starttime:"Timp de \u00eenceput",enablejavascript:"Activeaz\u0103 JavaScript",correction:"F\u0103r\u0103 corecturi",targetcache:"Memoria tampon \u021bint\u0103",playeveryframe:"Red\u0103 fiecare cadru",kioskmode:"Mod chio\u0219c",controller:"Controler",menu:"Arat\u0103 meniu",loop:"Repetare",play:"Redare automat\u0103",hspace:"H-Space",vspace:"V-Space","class_name":"Clas\u0103",name:"Nume",id:"Id",type:"Tip",size:"Dimensiuni",preview:"Previzualizare","constrain_proportions":"Men\u0163inere propor\u021bii",controls:"Controale",numloop:"Num\u0103r de repet\u0103ri",console:"Consol\u0103",cache:"Memorie tampon",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Variabile Flash",base:"URL de baz\u0103",bgcolor:"Fundal",wmode:"WMode",salign:"SAlign",align:"Aliniere",scale:"Scar\u0103",quality:"Calitate",shuffle:"Aleator",prefetch:"Prefetch",nojava:"F\u0103r\u0103 java",maintainaspect:"Men\u021bine aspect",imagestatus:"Status imagine",center:"Centru",autogotourl:"Mergi automat la URL","shockwave_options":"Op\u021biuni Shockwave","rmp_options":"Op\u021biuni Real media player","wmp_options":"Op\u021biuni Windows media player","qt_options":"Op\u021biuni QuickTime","flash_options":"Op\u021biuni Flash",hidden:"Ascuns","align_bottom_left":"St\u00e2nga jos","align_bottom_right":"Dreapta jos",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Op\u021biuni de includere audio",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Op\u021biuni video HTML5",altsource1:"Sursa alternativ\u0103 1",altsource2:"Sursa alternativ\u0103 2",preload:"Pre\u00eencarc\u0103",poster:"Afi\u0219",source:"Surs\u0103","html5_audio_options":"Op\u021biuni audio","preload_none":"Nu pre\u00eenc\u0103rca","preload_metadata":"Pre\u00eencarc\u0103 metadatele video","preload_auto":"Las\u0103 navigatorul utilizatorului s\u0103 decid\u0103",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ru_dlg.js
new file mode 100644
index 000000000..fbb186b9b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.media_dlg',{list:"\u0421\u043f\u0438\u0441\u043e\u043a",file:"\u0410\u0434\u0440\u0435\u0441",advanced:"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e",general:"\u041e\u0431\u0449\u0435\u0435",title:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043b\u0438\u043f\u0430","align_top_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_center":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","qt_stream_warn":"\u041f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0435 rtsp \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432 \u043f\u043e\u043b\u0435 QT Src.",qtsrc:"QT Src",progress:"\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441",sound:"\u0417\u0432\u0443\u043a",swstretchvalign:"\u0412\u0435\u0440. \u0432\u044b\u0440-\u0435 \u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u044f",swstretchhalign:"\u0413\u043e\u0440. \u0432\u044b\u0440-\u0435 \u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u044f",swstretchstyle:"\u0421\u0442\u0438\u043b\u044c \u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u0435",scriptcallbacks:"\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430","align_top_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",uimode:"\u0420\u0435\u0436\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430",rate:"\u0420\u0435\u0439\u0442\u0438\u043d\u0433",playcount:"\u0429\u0435\u0442\u0447\u0438\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439",defaultframe:"\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u0430\u0434\u0440",currentposition:"\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f",currentmarker:"\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u0418\u043c\u044f \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u043e\u0432",baseurl:"\u0411\u0430\u0437\u043e\u0440\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"\u041e\u043a\u043e\u043d\u043d\u043e\u0435 \u0432\u0438\u0434\u0435\u043e",stretchtofit:"\u041f\u043e\u0434 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430",mute:"\u0411\u0435\u0437 \u0437\u0432\u0443\u043a\u0430",invokeurls:"\u0412\u044b\u0437\u0432\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441",fullscreen:"\u041d\u0430 \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d",enabled:"\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e",autostart:"\u0410\u0432\u0442\u043e\u0437\u0430\u043f\u0443\u0441\u043a",volume:"\u0413\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c",target:"\u0426\u0435\u043b\u044c",qtsrcchokespeed:"Choke speed",href:"\u0421\u0441\u044b\u043b\u043a\u0430",endtime:"\u0412\u0440\u0435\u043c\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f",starttime:"\u0412\u0440\u0435\u043c\u044f \u043d\u0430\u0447\u0430\u043b\u0430",enablejavascript:"\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c JavaScript",correction:"\u0411\u0435\u0437 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u043a\u0438",targetcache:"\u041a\u044d\u0448 \u0446\u0435\u043b\u0438",playeveryframe:"\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440",kioskmode:"\u0420\u0435\u0436\u0438\u043c \u043a\u0438\u043e\u0441\u043a",controller:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435",menu:"\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044e",loop:"\u041f\u043e\u0432\u0442\u043e\u0440",play:"\u0410\u0432\u0442\u0437\u0430\u043f\u0443\u0441\u043a",hspace:"\u0413\u043e\u0440. \u043e\u0442\u0441\u0442\u0443\u043f",vspace:"\u0412\u0435\u0440\u0442. \u043e\u0442\u0441\u0442\u0443\u043f","class_name":"\u041a\u043b\u0430\u0441\u0441",name:"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435",id:"\u0418\u043c\u044f",type:"\u0422\u0438\u043f",size:"\u0420\u0430\u0437\u043c\u0435\u0440\u044b",preview:"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440","constrain_proportions":"\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u0438",controls:"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435",numloop:"\u041f\u043e\u0432\u0442\u043e\u0440\u044b",console:"\u041a\u043e\u043d\u0441\u043e\u043b\u044c",cache:"\u041a\u044d\u0448",autohref:"\u0410\u0432\u0442\u043e-\u0441\u0441\u044b\u043b\u043a\u0430",liveconnect:"SWLiveConnect",flashvars:"Flash \u043a\u043e\u043c\u0430\u043d\u0434\u044b",base:"Base",bgcolor:"\u0424\u043e\u043d",wmode:"\u041e\u043a\u043d\u043e",salign:"\u0412\u044b\u0440-\u0435",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",scale:"\u041e\u0431\u043b\u0430\u0441\u0442\u044c",quality:"\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e",shuffle:"\u0412 \u0440\u0430\u0437\u0431\u0440\u043e\u0441",prefetch:"\u0423\u043f\u0440\u0435\u0436\u0434\u0430\u044e\u0449\u0430\u044f \u0432\u044b\u0431\u043e\u0440\u043a\u0430",nojava:"\u0411\u0435\u0437 Java",maintainaspect:"\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f",center:"\u0426\u0435\u043d\u0442\u0440",autogotourl:"\u0410\u0432\u0442\u043e\u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441","shockwave_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Shockwave","rmp_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Real Media","wmp_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Windows Media","qt_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Quicktime","flash_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Flash",hidden:"\u0421\u043a\u0440\u044b\u0442\u044b\u0439","align_bottom_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_bottom_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",flash:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Flash \u0444\u0430\u0439\u043b\u0430",quicktime:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Quick Time \u0444\u0430\u0439\u043b\u0430","embedded_audio_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u043d\u0435\u0434\u0440\u0451\u043d\u043d\u043e\u0433\u043e \u0430\u0443\u0434\u0438\u043e",windowsmedia:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Windows Media \u0444\u0430\u0439\u043b\u0430",realmedia:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Real Media \u0444\u0430\u0439\u043b\u0430",shockwave:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 Shockwave \u0444\u0430\u0439\u043b\u0430",audio:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 HTML5 \u0437\u0432\u0443\u043a\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430",video:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 HTML5 \u0432\u0438\u0434\u0435\u043e \u0444\u0430\u0439\u043b\u0430","html5_video_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b HTML5 Video",altsource1:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a 1",altsource2:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a 2",preload:"\u041f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430",poster:"\u041f\u043e\u0441\u0442\u0435\u0440",source:"\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a","html5_audio_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0430\u0443\u0434\u0438\u043e","preload_none":"\u0411\u0435\u0437 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","preload_metadata":"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0438\u0434\u0435\u043e","preload_auto":"\u041d\u0430 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430",iframe:"\u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441 \u0432 IFrame",embeddedaudio:"\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0417\u0432\u0443\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sc_dlg.js
new file mode 100644
index 000000000..21f564eb3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6/\u7f51\u5740",advanced:"\u9ad8\u7ea7",general:"\u4e00\u822c",title:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53","align_top_left":"\u5de6\u4e0a","align_center":"\u4e2d\u95f4","align_left":"\u9760\u5de6","align_bottom":"\u4e0b\u65b9","align_right":"\u9760\u53f3","align_top":"\u4e0a\u65b9","qt_stream_warn":"\u6d41\u5f0frtsp\u8d44\u6e90\u5e94\u8be5\u6dfb\u52a0\u5230\u300c\u9ad8\u7ea7\u300d\u4e2dQT Src\u3002 \n\u540c\u65f6\u6dfb\u52a0\u975e\u6d41\u5f0f\u8d44\u6e90\u5230Src\u3002 ",qtsrc:"QT Src",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u5782\u76f4\u62c9\u5347",swstretchhalign:"\u6c34\u51c6\u62c9\u5347",swstretchstyle:"\u62c9\u5347\u6a21\u5f0f",scriptcallbacks:"\u811a\u672c\u56de\u8c03","align_top_right":"\u53f3\u4e0a",uimode:"\u5916\u89c2\u6a21\u5f0f",rate:"\u5e27\u7387",playcount:"\u64ad\u653e\u8ba1\u6570",defaultframe:"\u9ed8\u8ba4\u5e27",currentposition:"\u5f53\u524d\u4f4d\u7f6e",currentmarker:"\u5f53\u524d\u6807\u8bb0",captioningid:"Captioning id",baseurl:"\u57fa\u51c6URL",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u8fb9\u6846",stretchtofit:"\u62c9\u4f38",mute:"\u9759\u97f3",invokeurls:"\u76f8\u5173URLs",fullscreen:"\u5168\u5c4f",enabled:"\u542f\u7528",autostart:"\u81ea\u52a8\u5f00\u59cb",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"Choke speed",href:"\u8fde\u7ed3",endtime:"\u7ed3\u675f\u65f6\u95f4",starttime:"\u5f00\u59cb\u65f6\u95f4",enablejavascript:"\u542f\u7528JavaScript",correction:"\u6ca1\u6709\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u64ad\u653e\u6bcf\u4e00\u5e27",kioskmode:"Kiosk\u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u663e\u793a\u529f\u80fd\u8868",loop:"\u56de\u5708\u64ad\u653e",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u5782\u76f4\u95f4\u8ddd",vspace:"\u6c34\u51c6\u95f4\u8ddd","class_name":"\u7c7b\u578b",name:"\u540d\u79f0",id:"Id",type:"\u7c7b\u578b",size:"\u5c3a\u5bf8",preview:"\u9884\u89c8","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",controls:"\u63a7\u5236\u5668",numloop:"\u56de\u5708\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"\u81ea\u52a8HREF",liveconnect:"SWLiveConnect",flashvars:"\u53c2\u6570",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f\u8272",wmode:"\u89c6\u7a97\u6a21\u5f0f",salign:"SAlign",align:"\u5bf9\u9f50",scale:"\u6bd4\u4f8b",quality:"\u54c1\u8d28",shuffle:"Shuffle",prefetch:"\u9884\u8bfb\u53d6",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"\u56fe\u50cf\u72b6\u6001",center:"\u4e2d\u5fc3",autogotourl:"\u81ea\u52a8\u8f6c\u5230URL","shockwave_options":"Shockwave\u9009\u9879","rmp_options":"Real media player\u9009\u9879","wmp_options":"Windows media player\u9009\u9879","qt_options":"Quicktime\u9009\u9879","flash_options":"Flash\u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/se_dlg.js
new file mode 100644
index 000000000..1bb0170db
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.media_dlg',{list:"Lista",file:"Fil/URL",advanced:"Avancerat",general:"Generellt",title:"Infoga/redigera inb\u00e4ddad media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullsk\u00e4rm",enabled:"Enabled",autostart:"Starta automatiskt",volume:"Volym",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Spela varje bildruta",kioskmode:"Kiosk mode",controller:"Controller",menu:"Visa menyn",loop:"Loopa",play:"Spela upp automatiskt",hspace:"H-Space",vspace:"V-Space","class_name":"Klass",name:"Namn",id:"Id",type:"Typ",size:"Dimensioner",preview:"F\u00f6rhandsvisning","constrain_proportions":"Bibeh\u00e5ll proportionerna",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Bakgrundsf\u00e4rg",wmode:"WMode",salign:"SAlign",align:"Justera",scale:"Skala",quality:"Kvalit\u00e9",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/si_dlg.js
new file mode 100644
index 000000000..7b8989d52
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sk_dlg.js
new file mode 100644
index 000000000..eb96783f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.media_dlg',{list:"Zoznam",file:"S\u00fabor/URL",advanced:"Roz\u0161\u00edren\u00e9",general:"Obecn\u00e9",title:"Vlo\u017ei\u0165/upravi\u0165 vkladan\u00e9 m\u00e9di\u00e1","align_top_left":"Hore v\u013eavo","align_center":"Na stred","align_left":"V\u013eavo","align_bottom":"Dolu","align_right":"Vpravo","align_top":"Hore","qt_stream_warn":"Streamovan\u00e9 RTSP zdroje m\u00f4\u017eu by\u0165 pridan\u00e9 do polia \'S\u00fabor/URL streamu pre QT\' na z\u00e1lo\u017eke \'Roz\u0161\u00edren\u00e9\'.\nM\u00f4\u017ete tie\u017e prida\u0165 nie streamovan\u00fa verziu do polia \'S\u00fabor/URL\'.",qtsrc:"S\u00fabor/URL streamu pre QT",progress:"Priebeh",sound:"Zvuk",swstretchvalign:"Zarovnanie vert. roztiahnutia",swstretchhalign:"Zarovnanie horiz. roztiahnutia",swstretchstyle:"\u0160t\u00fdl roztiahnutia",scriptcallbacks:"Skripty sp\u00e4tn\u00fdch volan\u00ed","align_top_right":"Hore vpravo",uimode:"Re\u017eim ovl\u00e1dacieho panelu",rate:"Relat\u00edvna r\u00fdchlos\u0165",playcount:"Po\u010d\u00edtadlo prehrat\u00ed",defaultframe:"Predvolen\u00fd sn\u00edmok",currentposition:"Aktu\u00e1lna poz\u00edcia",currentmarker:"Aktu\u00e1lna z\u00e1lo\u017eka",captioningid:"ID popisku m\u00e9dia",baseurl:"Z\u00e1kladn\u00e1 URL",balance:"Rovnov\u00e1ha",windowlessvideo:"Video bez okna",stretchtofit:"Roztiahn\u00fa\u0165 do okna",mute:"Uml\u010da\u0165",invokeurls:"Po\u017eadova\u0165 URL",fullscreen:"Cel\u00e1 obrazovka",enabled:"Povoli\u0165 ovl\u00e1dac\u00ed panel",autostart:"Automatick\u00e9 spustenie",volume:"Hlasitos\u0165",target:"Cie\u013e",qtsrcchokespeed:"Zn\u00ed\u017eenie r\u00fdchlosti",href:"Odkaz",endtime:"Koncov\u00fd \u010das",starttime:"Po\u010diato\u010dn\u00fd \u010das",enablejavascript:"Povoli\u0165 JavaScript",correction:"Bez korekci\u00ed",targetcache:"Cie\u013eov\u00e1 medzipam\u00e4\u0165",playeveryframe:"Prehra\u0165 ka\u017ed\u00fd sn\u00edmok",kioskmode:"Zak\u00e1za\u0165 ukladanie",controller:"Ovl\u00e1dac\u00ed panel",menu:"Zobrazi\u0165 ponuku",loop:"Opakovanie",play:"Automatick\u00e9 prehr\u00e1vanie",hspace:"Horizont\u00e1lne odsadenie",vspace:"Vertik\u00e1lne odsadenie","class_name":"Trieda",name:"N\u00e1zov",id:"ID",type:"Typ",size:"Rozmery",preview:"N\u00e1h\u013ead","constrain_proportions":"Zachova\u0165 proporcie",controls:"Ovl\u00e1dac\u00ed panel",numloop:"Po\u010det opakovan\u00ed",console:"Konzola",cache:"Medzipam\u00e4\u0165",autohref:"Automatick\u00e9 na\u010d\u00edtanie",liveconnect:"Spusti\u0165 Javu (SWLiveConnect)",flashvars:"Parametre (Flashvars)",base:"Z\u00e1kladn\u00fd prie\u010dinok",bgcolor:"Pozadie",wmode:"Re\u017eim okna",salign:"Zarovnanie okna",align:"Zarovnanie",scale:"Pomer",quality:"Kvalita",shuffle:"N\u00e1hodne",prefetch:"Predna\u010d\u00edtanie",nojava:"Nesp\u00fa\u0161\u0165a\u0165 Javu",maintainaspect:"Zachova\u0165 pomer str\u00e1n",imagestatus:"Stav obrazu",center:"Na stred",autogotourl:"Automatick\u00fd prechod na URL","shockwave_options":"Mo\u017enosti Shockwave","rmp_options":"Mo\u017enosti prehr\u00e1va\u010da Real media","wmp_options":"Mo\u017enosti prehr\u00e1va\u010da Windows media","qt_options":"Mo\u017enosti Quicktime","flash_options":"Mo\u017enosti Flashu",hidden:"Skry\u0165","align_bottom_left":"Dolu v\u013eavo","align_bottom_right":"Dolu vpravo",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Mo\u017enosti vlo\u017een\u00e9ho audio s\u00faboru",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"Mo\u017enosti HTML5 video",altsource1:"Alternat\u00edvny zdroj 1",altsource2:"Alternat\u00edvny zdroj 2",preload:"Predna\u010d\u00edtanie",poster:"Obr\u00e1zok (zobraz\u00ed sa pri nedostupnosti videa)",source:"Zdroj","html5_audio_options":"Vlastnosti audia","preload_none":"Nepred\u010d\u00edtaj","preload_metadata":"Nepred\u010d\u00edtaj meta-\u00fadaje videa","preload_auto":"Ponechajte vo\u013eba pri v\u00fdbere prehliada\u010da na u\u017e\u00edvate\u013eovi",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sl_dlg.js
new file mode 100644
index 000000000..fc02c62ea
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.media_dlg',{list:"Seznam",file:"Datoteka/URL",advanced:"Napredno",general:"Splo\u0161no",title:"Vstavi / uredi multimedijsko vsebino","align_top_left":"zgoraj levo","align_center":"sredina","align_left":"levo","align_bottom":"spodaj","align_right":"desno","align_top":"zgoraj","qt_stream_warn":"V polje \"QT vir\" pod zavihkom napredno, morajo biti dodani preto\u010dni RTSP viri.\nNepreto\u010dna razli\u010dica mora biti dodana v polje \"vir\".",qtsrc:"QT vir",progress:"Napredek",sound:"Zvok",swstretchvalign:"raztegni n-poravnano",swstretchhalign:"raztegni v-poravnano",swstretchstyle:"Slog raztegovanja",scriptcallbacks:"Povratni klici","align_top_right":"zgoraj desno",uimode:"Na\u010din uporabni\u0161kega vmesnika",rate:"Ocena",playcount:"\u0160tevilo predvajanj",defaultframe:"Privzeti okvir",currentposition:"Trenutni polo\u017eaj",currentmarker:"Trenutna oznaka",captioningid:"Oznaka podnapisov",baseurl:"Temeljni URL",balance:"Ravnovesje",windowlessvideo:"Video brez okna",stretchtofit:"Raz\u0161iri",mute:"Uti\u0161aj",invokeurls:"Naslovi URLje",fullscreen:"Cel zaslon",enabled:"Omogo\u010deno",autostart:"Samodejno predvajaj",volume:"Glasnost",target:"Cilj",qtsrcchokespeed:"Hitrost predpomnenja",href:"Povezava",endtime:"Kon\u010dni \u010das",starttime:"Za\u010detni \u010das",enablejavascript:"Omogo\u010di JavaScript",correction:"Brez popravkov",targetcache:"Ciljno predpomnjenje",playeveryframe:"Predvajaj vsak okvir",kioskmode:"Kiosk na\u010din",controller:"Nadzorni element",menu:"Prika\u017ei meni",loop:"Ponavljaj",play:"Samodejno predvajaj",hspace:"H-razmik",vspace:"V-razmik","class_name":"Razred",name:"Ime",id:"Id",type:"Tip",size:"Dimenzije",preview:"Predogled","constrain_proportions":"Obdr\u017ei razmerje",controls:"Nadzorni elementi",numloop:"\u0160t. zank",console:"Konzola",cache:"Predpomnjenje",autohref:"Avtomatska povezava",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Osnova",bgcolor:"Ozadje",wmode:"WM na\u010din",salign:"S-poravnava",align:"Poravnava",scale:"Stopnja pove\u010dave",quality:"Kakovost",shuffle:"Pome\u0161aj",prefetch:"Predpomnenje",nojava:"Brez Jave",maintainaspect:"Zakleni razmerje",imagestatus:"Slika stanja",center:"Sredina",autogotourl:"Samodejno na URL","shockwave_options":"Mo\u017enosti Shockwave","rmp_options":"Mo\u017enosti Real media player","wmp_options":"Mo\u017enosti Windows media player","qt_options":"Mo\u017enosti Quicktime","flash_options":"Mo\u017enosti Flash",hidden:"Skrito","align_bottom_left":"spodaj levo","align_bottom_right":"spodaj desno",flash:"flash",quicktime:"quicktime","embedded_audio_options":"Nastavitve za vstavljeni zvok",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"HTML5 video nastavitve",altsource1:"Alternativni vir 1",altsource2:"Alternativni vir 2",preload:"Predpomnenje",poster:"Poster",source:"Vir","html5_audio_options":"Nastavitve za zvok","preload_none":"Brez prednalaganja","preload_metadata":"Prednalo\u017ei mata podatke za video ","preload_auto":"Privzeta nastavitev brskalnika",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sq_dlg.js
new file mode 100644
index 000000000..efe1332ef
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.media_dlg',{list:"Lista",file:"Skedari/URL",advanced:"T\u00eb Avancuara",general:"T\u00eb P\u00ebrgjithshme",title:"Fut / edito media","align_top_left":"Krye-majtas","align_center":"Qend\u00ebr","align_left":"Majtas","align_bottom":"Fund","align_right":"Djathtas","align_top":"Krye","qt_stream_warn":"Risurset RTSP duhet t\u00eb shtohen n\u00eb fush\u00ebn QT Src n\u00eb opsionet e avancuara.\nDuhet t\u00eb shtoni gjithashtu nj\u00eb version jo stream n\u00eb fush\u00ebn src..",qtsrc:"QT Src",progress:"Progresi",sound:"Z\u00ebri",swstretchvalign:"Zmadho Drejtim-V",swstretchhalign:"Zmadho Drejtim-H",swstretchstyle:"Stili i zmadhimit",scriptcallbacks:"Script Callbacks","align_top_right":"Krye-djathtas",uimode:"M\u00ebnyra UI",rate:"Raporti",playcount:"Numri i luajtjeve",defaultframe:"Kuadri fillestar",currentposition:"Pozicioni aktual",currentmarker:"Sh\u00ebnjuesi aktual",captioningid:"Id e titullit",baseurl:"URL baz\u00eb",balance:"Balanci",windowlessvideo:"Video pa dritare",stretchtofit:"Zmadho me p\u00ebrshtatje",mute:"Mbyll z\u00ebrin",invokeurls:"Th\u00ebrrit URL",fullscreen:"Pamje e plot\u00eb",enabled:"Aktivizuar",autostart:"Nisje automatike",volume:"Volumi",target:"Sh\u00ebnjestra",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Koha e p\u00ebrfundimit",starttime:"Koha e nisjes",enablejavascript:"Aktivizo JavaScript",correction:"Pa rregullime",targetcache:"Cache sh\u00ebnjestr\u00ebn",playeveryframe:"Luaj \u00e7do kuader",kioskmode:"M\u00ebnyra Kiosk",controller:"Kontrollues",menu:"Shfaq menu",loop:"Lak",play:"Luaj automatikisht",hspace:"Hap\u00ebsira-H",vspace:"Hap\u00ebsira-V","class_name":"Klasa",name:"Emri",id:"Id",type:"Tipi",size:"P\u00ebrmasat",preview:"Paraqitje","constrain_proportions":"Ruaj raportet",controls:"Kontrollet",numloop:"Numri lak\u00ebve",console:"Konsola",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Baza",bgcolor:"Fusha",wmode:"WMode",salign:"Drejtimi S",align:"Drejtimi",scale:"Shkalla",quality:"Cil\u00ebsia",shuffle:"Shuffle",prefetch:"Para ngarko",nojava:"Pa Java",maintainaspect:"Ruaj raportet",imagestatus:"Statusi fotos",center:"Qend\u00ebr",autogotourl:"Shko n\u00eb URL automatikisht","shockwave_options":"Opsionet e Shockwave","rmp_options":"Opsionet e Real media player","wmp_options":"Opsionet e Windows media player","qt_options":"Opsionet e Quicktime","flash_options":"Opsionet e Flash",hidden:"Fshehur","align_bottom_left":"Fund-majtas","align_bottom_right":"Fund-djathtas","embedded_audio_options":"Opsionet e Muzik\u00ebs","html5_video_options":"Opsionet e Videos HTML5",altsource1:"Burim Alternativ 1",altsource2:"Burim Alternativ 2",preload:"Para-ngarko",poster:"Poster",source:"Burim","html5_audio_options":"Opsionet e Muzik\u00ebs","preload_none":"Mos para-ngarko","preload_metadata":"Para-ngarko t\u00eb dh\u00ebnat meta t\u00eb videos","preload_auto":"L\u00ebrini shfletuesin ta vendos\u00eb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sr_dlg.js
new file mode 100644
index 000000000..7351c30fe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.media_dlg',{list:"Lista",file:"Fajl/URL",advanced:"Napredno",general:"Osnovno",title:"Umetni/Uredi multimedijalni sadr\u017eaj","align_top_left":"Gore levo","align_center":"Sredina","align_left":"Levo","align_bottom":"Dole","align_right":"Desno","align_top":"Gore","qt_stream_warn":"Rtsp izvori za striming bi trebali biti dodati u \'QT Src\' polje kartice \'Napredno\'.\nTrebalo bi tako\u0111e dodati i ne-striming verzije u \'Src\' polje.",qtsrc:"QT Src",progress:"Napredak",sound:"Zvuk",swstretchvalign:"Razvuci V-Poravnanje",swstretchhalign:"Razvuci H-Poravnanje",swstretchstyle:"Na\u010din razvla\u010denja",scriptcallbacks:"Script callbacks","align_top_right":"Gore desno",uimode:"UI re\u017eim",rate:"Tempo",playcount:"Broj izvo\u0111enje",defaultframe:"Podrazumevani frejm",currentposition:"Trenutna pozicija",currentmarker:"Trenutni marker",captioningid:"Id naslova",baseurl:"Osnovni URL",balance:"Balans",windowlessvideo:"Video bez prozora",stretchtofit:"Razvuci da se uklopi",mute:"Izklju\u010di zvuk",invokeurls:"U\u010ditaj URL-ove",fullscreen:"Preko celog ekrana",enabled:"Omogu\u0107eno",autostart:"Automatsko pokretanje",volume:"Ja\u010dina zvuka",target:"Meta",qtsrcchokespeed:"Brzina u\u010ditavanja",href:"Href",endtime:"Vreme zavr\u0161etka",starttime:"Vreme po\u010detka",enablejavascript:"Omogu\u0107i JavaScript",correction:"Bez korekcije",targetcache:"Odabrani ke\u0161",playeveryframe:"Prika\u017ei svaki frejm",kioskmode:"Kiosk re\u017eim",controller:"Kontrolor",menu:"Prika\u017ei meni",loop:"Vrti u krug",play:"Automatsko prikazivanje",hspace:"H-Space",vspace:"V-Space","class_name":"Klasa",name:"Naziv",id:"Id",type:"Vrsta",size:"Dimenzije",preview:"Preliminarni prikaz","constrain_proportions":"Zadr\u017ei proporcije",controls:"Kontrole",numloop:"Broj izvo\u0111enja",console:"Konzola",cache:"Ke\u0161",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Pozadina",wmode:"WMode",salign:"SAlign",align:"Poravnanje",scale:"Promena veli\u010dine",quality:"Kvalitet",shuffle:"Nasumi\u010dni redosled",prefetch:"Predpunjenje",nojava:"Bez jave",maintainaspect:"O\u010duvaj izgled",imagestatus:"Status slike",center:"Sredina",autogotourl:"Automatski idi na URL","shockwave_options":"Shockwave opcije","rmp_options":"Real media player opcije","wmp_options":"Windows media player opcije","qt_options":"Quicktime opcije","flash_options":"Flash opcije",hidden:"Sakriveno","align_bottom_left":"Dole levo","align_bottom_right":"Dole desno","html5_video_options":"HTML5 Video opcije",altsource1:"Alternativni izvor 1",altsource2:"Alternativni izvor 2",preload:"U\u010ditaj unapred",source:"Izvor",poster:"Poster","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sv_dlg.js
new file mode 100644
index 000000000..4f71780a9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.media_dlg',{list:"Lista",file:"Fil/URL",advanced:"Avancerat",general:"Generellt",title:"Infoga/redigera inb\u00e4ddad media","align_top_left":"Top left","align_center":"Center","align_left":"V\u00e4nster","align_bottom":"Botten","align_right":"H\u00f6ger","align_top":"Toppen","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..",qtsrc:"QT Src",progress:"Progress",sound:"Ljud",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullsk\u00e4rm",enabled:"Aktiverad",autostart:"Starta automatiskt",volume:"Volym",target:"M\u00e5l",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"Slut tid",starttime:"Start tid",enablejavascript:"Aktivera JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Spela varje bildruta",kioskmode:"Kiosk mode",controller:"Controller",menu:"Visa menyn",loop:"Loopa",play:"Spela upp automatiskt",hspace:"H-Space",vspace:"V-Space","class_name":"Klass",name:"Namn",id:"Id",type:"Typ",size:"Dimensioner",preview:"F\u00f6rhandsvisning","constrain_proportions":"Bibeh\u00e5ll proportionerna",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Bakgrundsf\u00e4rg",wmode:"WMode",salign:"SAlign",align:"Justera",scale:"Skala",quality:"Kvalit\u00e9",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Bild status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Inst\u00e4llningar f\u00f6r Shockwave","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"G\u00f6md","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right",flash:"flash",quicktime:"quicktime ","embedded_audio_options":"Inst\u00e4llningar f\u00f6r inb\u00e4ddatljud",windowsmedia:"windowsmedia ",realmedia:"realmedia ",shockwave:"shockwave ",audio:"ljud",video:"video","html5_video_options":"HTML5 Filmegenskaper",altsource1:"Alternativk\u00e4lla 1",altsource2:"Alternativk\u00e4lla 2",preload:"F\u00f6rladda",poster:"Poster",source:"K\u00e4lla","html5_audio_options":"Ljudinst\u00e4llningar","preload_none":"F\u00f6rladda inte","preload_metadata":"F\u00f6rladda metadata","preload_auto":"L\u00e5t webbl\u00e4saren v\u00e4lja",iframe:"iframe",embeddedaudio:"inb\u00e4ddat ljud"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sy_dlg.js
new file mode 100644
index 000000000..f62810027
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.media_dlg',{list:"\u0720\u071d\u0723\u072c\u0710",file:"\u071f\u0722\u0726\u072a\u0710/URL",advanced:"\u072b\u0718\u072b\u071b\u0710",general:"\u0713\u0718\u0722\u071d\u0710",title:"\u0721\u0725\u0712\u0742\u072a/\u0723\u071d\u0718\u0721 \u071d\u0718\u0715\u0725\u0710 \u071a\u0712\u0742\u071d\u072b\u0710","align_top_left":"\u0723\u0721\u0720\u0710 \u0715\u0729\u072a\u0729\u0726\u072c\u0710","align_center":"\u0721\u0728\u0725\u0710","align_left":"\u0723\u0721\u0720\u0710","align_bottom":"\u072b\u072c\u0710","align_right":"\u071d\u0721\u071d\u0722\u0710","align_top":"\u0729\u072a\u0729\u0726\u072c\u0710","qt_stream_warn":"\u072a\u0715\u071d\u0718\u072c\u0710 \u0715\u0721\u0712\u0718\u0725\u0710 \u0715 RTSP \u0710\u0720\u071d\u0728\u072c\u0710 \u071d\u0720\u0717\u0307 \u0715\u0726\u071d\u072b\u0710 \u0721\u072c\u0718\u0723\u0726\u072c\u0710 \u0725\u0720 \u071a\u0729\u0720\u0710 \u0715\u0721\u0712\u0718\u0725\u0710 QT \u072c\u071a\u0718\u072c \u071b\u0712\u0720\u071d\u072c\u0710.\n \u0710\u0726 \u0710\u0720\u071d\u0728\u0710 \u071d\u0718\u072c \u0715\u072c\u0718\u0723\u0726\u072c \u071a\u0715\u0710 \u0720\u0710 \u0640 \u0721\u0722\u072c\u0710 \u0715\u072a\u0715\u071d\u0718\u072c\u0710 \u0725\u0720 \u0721\u0712\u0718\u0725\u0710 \u0715\u071a\u0729\u0720\u0710.",qtsrc:"\u0721\u0712\u0718\u0725 \u0715QT",progress:"\u0721\u072c\u0729\u0715\u0721\u0722\u0718\u072c\u0710",sound:"\u0729\u0720\u0710",swstretchvalign:"\u0721\u072c\u071a\u072c\u0710 \u0715\u0721\u0723\u0715\u072a\u0718\u072c\u0710 \u0640 V",swstretchhalign:"\u0721\u072c\u071a\u072c\u0710 \u0715\u0721\u0723\u0715\u072a\u0718\u072c\u0710 \u0640 V",swstretchstyle:"\u0710\u0723\u071f\u071d\u0721\u0710 \u0715\u0721\u072c\u071a\u072c\u0710",scriptcallbacks:"\u0729\u072a\u071d\u072c\u0710 \u0712\u072c\u072a\u071d\u072c\u0710 \u0715\u0723\u071f\u072a\u071d\u0726\u072c","align_top_right":"\u0729\u072a\u0729\u0726\u072c\u072c\u0742 \u071d\u0721\u071d\u0722\u0710",uimode:"\u0710\u0723\u071f\u071d\u0721\u0710 UI",rate:"\u0721\u071b\u071d\u0721\u0722\u0718\u072c\u0710",playcount:"\u071a\u0718\u072b\u0712\u0718\u0722\u0710 \u0715\u071b\u0710\u0720\u072c\u0710",defaultframe:"\u0710\u071b\u072a\u0710 \u072a\u072b\u071d\u0721\u0710",currentposition:"\u0715\u0718\u071f\u0710 \u0729\u0710\u071d\u0721\u071d\u0710",currentmarker:"\u072a\u0308\u0721\u0719\u0710 \u0729\u0710\u071d\u0721\u071d\u0308\u0710",captioningid:"\u0728\u071a\u071a\u0710 \u0715\u0728\u0718\u072a\u072c\u0710 ID",baseurl:"\u0710\u0723\u0710 \u0715 URL",balance:"\u072c\u0729\u071d\u0720\u0718\u072c\u0742\u0710",windowlessvideo:"\u0712\u0742\u071d\u0715\u071d\u0718 \u0715\u0720\u0710 \u0712\u0742\u071d\u0722\u0715\u0718\u0719",stretchtofit:"\u0721\u072c\u071a\u072c\u0710 \u0715\u0720\u071a\u071d\u0721\u0718\u072c\u0710",mute:"\u072b\u072c\u0729\u0718\u072c\u0710",invokeurls:"\u0729\u072a\u071d\u072c\u0710 \u0715URLs",fullscreen:"\u072b\u072b\u072c\u0710 \u0721\u0720\u071d\u072c\u0710",enabled:"\u0721\u0718\u0726\u0725\u0720\u0710",autostart:"\u072b\u0718\u072a\u071d\u0710 \u071d\u072c\u071d\u0710",volume:"\u0715\u0718\u0712\u0729\u0710",target:"\u0722\u071d\u072b\u0710",qtsrcchokespeed:"\u0723\u0718\u072a\u0717\u0712\u0742\u0710 \u0715\u071f\u0330\u0718\u071f",endtime:"\u0726\u072a\u0729\u072c\u0710 \u0715\u0725\u0715\u0722\u0710",starttime:"\u072b\u0718\u072a\u071d\u0710 \u0715\u0725\u0715\u0722\u0710",enablejavascript:"\u0721\u0726\u0725\u0720 \u071d\u0710\u0712\u0742\u0710\u0723\u071f\u072a\u071d\u0726\u072c",correction:"\u0720\u071d\u072c \u072c\u072a\u071d\u0728\u0718\u072c\u0710",targetcache:"\u0722\u071d\u072b\u0710 \u0715\u0715\u071f\u0742\u0718\u072a\u0710",playeveryframe:"\u071b\u0710\u0720 \u071f\u0720 \u0710\u071b\u072a\u0710",kioskmode:"\u0710\u0723\u071f\u071d\u0721\u0710 \u0715\u071f\u0718\u072b\u071f\u0710",controller:"\u0721\u072b\u0720\u071b\u0722\u0718\u072c\u0308\u0710",menu:"\u0721\u071a\u0719\u071d \u0720\u0718\u071a\u071d\u072c\u0710",loop:"\u0715\u0718\u072a\u072c\u0710",play:"\u071b\u0710\u0720\u072c\u0710 \u071d\u072c\u071d\u072c\u0710",hspace:"\u0723\u0726\u071d\u0729\u0718\u072c\u0710 \u0640 H",vspace:"\u0723\u071a\u071d\u0729\u0718\u072c\u0710 \u0640 V","class_name":"\u0723\u0715\u072a\u0710",name:"\u072b\u0721\u0710",id:"\u0717\u071d\u071d\u0718\u072c\u0710 ID",type:"\u0710\u0715\u072b\u0710",size:"\u072a\u071a\u0729\u071d\u0718\u072c\u0308\u0710",preview:"\u071a\u071d\u072a\u072c\u0710","constrain_proportions":"\u0710\u0723\u071d\u072a\u0718\u072c \u0721\u071b\u0718\u072c\u0722\u071d\u072c\u0710",controls:"\u0721\u072b\u0720\u071b\u0722\u0718\u072c\u0308\u0710",numloop:"\u072a\u0729\u0721\u0710 \u0715\u0715\u0718\u072a\u0308\u071d\u072c\u0710",console:"\u0720\u0718\u071a\u0710 \u0715\u0715\u0718\u0729\u0710",cache:"\u0715\u071f\u0742\u0718\u072a\u0710",autohref:" HREF \u071d\u072c\u071d\u0710",liveconnect:"\u0721\u0718\u071b\u071d\u0710 \u071a\u071d\u0710 \u0715SW",base:"\u0710\u0723\u0710",bgcolor:"\u0712\u072c\u0742\u072a\u071d\u0718\u072c\u0742\u0710",wmode:"\u0710\u0723\u071f\u071d\u0721\u0710 \u0715W",salign:"\u0721\u0713\u0722\u072c\u0710 \u0715S",align:"\u0721\u0713\u0330\u072a\u0713\u0722\u072c\u0710",scale:"\u0723\u0718\u072a\u0713\u0715\u0710",quality:"\u071b\u072a\u0729\u0718\u072c\u0742\u0710",shuffle:"\u071a\u0712\u0742\u071b\u072c\u0710\u060c \u0721\u0715\u072a\u0723\u072c\u0710\u060c \u0719\u0717\u071d\u072a\u0718\u072c\u0710",prefetch:"\u0721\u071b\u071d\u0712\u0742\u072c\u0710",nojava:"\u0720\u071d\u072c Java",maintainaspect:"\u0721\u0712\u071d\u0722\u072c\u0710 \u0715\u0722\u071b\u071d\u072a\u0718\u072c\u0710",imagestatus:"\u0710\u071d\u071f\u0722\u071d\u0718\u072c\u0742 \u0728\u0718\u072a\u072c\u0710",center:"\u0721\u0728\u0725\u0710",autogotourl:"\u071d\u072c\u071d\u0718\u072c\u0710 \u0715\u072a\u071a\u072b\u072c\u0710 \u0720 URL","shockwave_options":"\u0713\u0718\u0712\u071d\u0710 shockwave","rmp_options":"\u0713\u0718\u0712\u071d\u0710 \u0715\u071a\u0718\u072a\u0719\u0710 Real Media Player","wmp_options":"\u0713\u0718\u0712\u071d\u0308\u0710 \u0715\u071b\u0710\u0720\u0722\u0710 \u0715\u0721\u071d\u0715\u071d\u0710 \u0715\u0712\u0742\u071d\u0722\u0715\u0718\u0719","qt_options":"\u0713\u0718\u0712\u071d\u0308\u0710 \u0715Queck Time","flash_options":"\u0713\u0718\u0712\u071d\u0308\u0710 \u0715Flash",hidden:"\u071b\u072b\u071d\u0710","align_bottom_left":"\u0723\u0721\u0720\u0710 \u0715\u072b\u072c\u0710","align_bottom_right":"\u071d\u0721\u071d\u0722\u0710 \u0715\u072b\u072c\u0710","embedded_audio_options":"\u0713\u0718\u0712\u071d\u0710 \u0715\u071a\u0712\u0742\u071d\u072b\u0718\u072c\u0710 \u0715\u0729\u0720\u0710","html5_video_options":"\u0713\u0718\u0712\u071d\u0710 \u0715\u0712\u0742\u071d\u0715\u071d\u0718 HTML5",altsource1:"\u072c\u071a\u0720\u0718\u0726\u0710 \u0715\u0721\u0712\u0718\u0725\u07101",altsource2:"\u072c\u071a\u0720\u0718\u0726\u0710 \u0715\u0721\u0712\u0718\u0725\u07102",preload:"\u072c\u0722\u071d \u0721\u071b\u0725\u0722\u072c\u0710",poster:"\u072b\u0718\u072c\u0726\u071d\u072c\u0308\u0710",source:"\u0721\u0712\u0718\u0725\u0710","html5_audio_options":"\u0713\u0718\u0712\u071d\u0308\u0710 \u0715\u0729\u0720\u0710","preload_none":"\u0720\u0710 \u072c\u0722\u071d \u0721\u071b\u0725\u0722\u072c\u0710","preload_metadata":"\u072c\u0722\u071d \u0721\u071b\u0725\u0722\u072c\u0710 \u0715\u0721\u0718\u0715\u0725\u0722\u0718\u0722\u0718\u072c \u0721\u071d\u072c\u0710","preload_auto":"\u072b\u0712\u0742\u0718\u0729 \u0720\u0726\u0718\u0723\u0729\u0722\u0710 \u0715\u0721\u0729\u0720\u0712\u0722\u0710 \u0715\u0721\u0726\u0720\u071a\u0722\u0308\u0710",href:"HREF",flashvars:"Flash Vars",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ta_dlg.js
new file mode 100644
index 000000000..1b70c97f3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/te_dlg.js
new file mode 100644
index 000000000..4a97bd0cf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/th_dlg.js
new file mode 100644
index 000000000..091d4b88f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.media_dlg',{list:"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23",file:"\u0e44\u0e1f\u0e25\u0e4c/URL",advanced:"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07",general:"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b",title:"\u0e40\u0e1e\u0e34\u0e48\u0e21 / \u0e41\u0e01\u0e49\u0e44\u0e02 \u0e21\u0e35\u0e40\u0e14\u0e35\u0e22","align_top_left":"\u0e1a\u0e19 \u0e0b\u0e49\u0e32\u0e22","align_center":"\u0e01\u0e25\u0e32\u0e07","align_left":"\u0e0b\u0e49\u0e32\u0e22","align_bottom":"\u0e25\u0e48\u0e32\u0e07","align_right":"\u0e02\u0e27\u0e32","align_top":"\u0e1a\u0e19","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"\u0e1a\u0e19 \u0e02\u0e27\u0e32",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"\u0e40\u0e25\u0e48\u0e19\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34",volume:"Volume",target:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22 cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"\u0e41\u0e1c\u0e07\u0e04\u0e27\u0e1a\u0e04\u0e38\u0e21",menu:"\u0e41\u0e2a\u0e14\u0e07\u0e40\u0e21\u0e19\u0e39",loop:"\u0e40\u0e25\u0e48\u0e19\u0e0b\u0e49\u0e33",play:"\u0e40\u0e25\u0e48\u0e19\u0e2d\u0e31\u0e15\u0e42\u0e19\u0e21\u0e31\u0e15\u0e34",hspace:"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19",vspace:"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07","class_name":"\u0e04\u0e25\u0e32\u0e2a",name:"\u0e0a\u0e37\u0e48\u0e2d",id:"Id",type:"\u0e0a\u0e19\u0e34\u0e14",size:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07",preview:"\u0e14\u0e39\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07","constrain_proportions":"\u0e04\u0e07\u0e2d\u0e31\u0e15\u0e23\u0e32\u0e2a\u0e48\u0e27\u0e19",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07",wmode:"WMode",salign:"SAlign",align:"Align",scale:"\u0e02\u0e19\u0e32\u0e14",quality:"\u0e04\u0e27\u0e32\u0e21\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"\u0e25\u0e48\u0e32\u0e07 \u0e0b\u0e49\u0e32\u0e22","align_bottom_right":"\u0e25\u0e48\u0e32\u0e07 \u0e02\u0e27\u0e32","embedded_audio_options":"Embedded Audio Options","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide",flash:"",quicktime:"",windowsmedia:"",realmedia:"",shockwave:"",audio:"",video:"",iframe:"",embeddedaudio:""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tn_dlg.js
new file mode 100644
index 000000000..3a6363a7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tr_dlg.js
new file mode 100644
index 000000000..a939d4099
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.media_dlg',{list:"Listele",file:"Dosya/URL",advanced:"Geli\u015fmi\u015f",general:"Genel",title:"T\u00fcmle\u015fik medya ekle / d\u00fczenle","align_top_left":"Sol \u00fcst","align_center":"Orta","align_left":"Sol","align_bottom":"Alt","align_right":"Sa\u011f","align_top":"\u00dcst","qt_stream_warn":"Ak\u0131\u015f rtsp kaynaklar\u0131 geli\u015fmi\u015f alt\u0131ndaki QT Kay. alan\u0131na girilmeli.\nKay. alan\u0131na ayr\u0131ca ak\u0131\u015fkan olmayan eklenir.",qtsrc:"QT Kay.",progress:"\u0130lerle",sound:"Ses",swstretchvalign:"Esnetme D-Hiza",swstretchhalign:"Esnetme Y-Hiza",swstretchstyle:"Esnetme stili",scriptcallbacks:"Script \u00e7a\u011f\u0131r","align_top_right":"Sa\u011f \u00fcst",uimode:"UI Modu",rate:"Oran",playcount:"Oynatma say\u0131s\u0131",defaultframe:"Varsay\u0131lan \u00e7er\u00e7eve",currentposition:"Se\u00e7ili konum",currentmarker:"Se\u00e7ili i\u015faret\u00e7i",captioningid:"Ba\u015fl\u0131k id",baseurl:"Ge\u00e7erli URL",balance:"Denge",windowlessvideo:"Penceresiz video",stretchtofit:"S\u0131\u011facak \u015fekilde boyutland\u0131r",mute:"Sessiz",invokeurls:"Ba\u015flatma URL\'si",fullscreen:"Tam ekran",enabled:"Aktif",autostart:"Otomatik ba\u015flat",volume:"Ses d\u00fczeyi",target:"Hedef",qtsrcchokespeed:"S\u0131k\u0131\u015ft\u0131rma h\u0131z\u0131",href:"Href",endtime:"Biti\u015f zaman\u0131",starttime:"Ba\u015flang\u0131\u00e7 zaman\u0131",enablejavascript:"Javascript Aktif",correction:"D\u00fczeltme yok",targetcache:"Hedef \u00f6nbellek",playeveryframe:"Her \u00e7er\u00e7eveyi oynat",kioskmode:"Kiosk modu",controller:"Kontroller",menu:"Men\u00fcy\u00fc g\u00f6ster",loop:"D\u00f6nd\u00fcr",play:"Otomatik oynat",hspace:"Yatay bo\u015fluk",vspace:"Dikey bo\u015fluk","class_name":"S\u0131n\u0131f",name:"\u0130sim",id:"Id",type:"Tip",size:"Boyutlar",preview:"\u00d6nizleme","constrain_proportions":"Oran\u0131 s\u0131n\u0131rla",controls:"Kontroller",numloop:"D\u00f6ng\u00fc say\u0131s\u0131",console:"Konsol",cache:"\u00d6nbellek",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash de\u011fi\u015fkeni",base:"Taban",bgcolor:"Arkaplan",wmode:"WModu",salign:"SHizala",align:"Hizala",scale:"\u00d6l\u00e7ek",quality:"Kalite",shuffle:"Kar\u0131\u015ft\u0131r",prefetch:"\u00d6n belle\u011fe al",nojava:"Java yok",maintainaspect:"Orant\u0131y\u0131 koru",imagestatus:"Resim durumu",center:"Orta",autogotourl:"URL\'e otomatik git","shockwave_options":"Shockware se\u00e7enekleri","rmp_options":"Real media player se\u00e7enekleri","wmp_options":"Windows media player se\u00e7enekleri","qt_options":"Quicktime se\u00e7enekleri","flash_options":"Flash se\u00e7enekleri",hidden:"Gizli","align_bottom_left":"Sol alt","align_bottom_right":"Sa\u011f alt",flash:"flash",quicktime:"quicktime","embedded_audio_options":"G\u00f6m\u00fcl\u00fc Ses Ayarlar\u0131",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"ses",video:"video","html5_video_options":"HTML5 Video Ayarlar\u0131",altsource1:"Alternatif Kaynak 1",altsource2:"Alternatif Kaynak 2",preload:"\u00d6ny\u00fckleme",poster:"Poster",source:"Kaynak","html5_audio_options":"Ses Ayarlar\u0131","preload_none":"\u00d6ny\u00fckleme Yapma","preload_metadata":"Vide metadata \u00f6ny\u00fckleme","preload_auto":"Kullan\u0131c\u0131n\u0131n taray\u0131c\u0131s\u0131 karar versin",iframe:"iframe",embeddedaudio:"g\u00f6m\u00fcl\u00fc ses"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tt_dlg.js
new file mode 100644
index 000000000..89b30ae17
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6/\u5730\u5740",advanced:"\u9032\u968e",general:"\u57fa\u672c",title:"\u63d2\u5165/\u7de8\u8f2f \u5a92\u9ad4","align_top_left":"\u9802\u90e8\u5c45\u5de6","align_center":"\u7f6e\u4e2d","align_left":"\u5c45\u5de6","align_bottom":"\u5e95\u90e8","align_right":"\u5c45\u53f3","align_top":"\u9802\u90e8","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..",qtsrc:"QT Src",progress:"\u9032\u5ea6",sound:"\u8072\u97f3",swstretchvalign:"\u7e2e\u653e\u81f3\u5782\u76f4\u5c0d\u9f4a",swstretchhalign:"\u7e2e\u653e\u81f3\u6c34\u5e73\u5c0d\u9f4a",swstretchstyle:"\u7e2e\u653e\u6a23\u5f0f",scriptcallbacks:"\u8173\u672c\u56de\u6a94","align_top_right":"\u9802\u90e8\u5c45\u53f3",uimode:"UI \u6a21\u5f0f",rate:"\u78bc\u7387",playcount:"\u64ad\u653e\u6b21\u6578",defaultframe:"\u9810\u8a2d\u683c",currentposition:"\u7576\u524d\u4f4d\u7f6e",currentmarker:"\u7576\u524d\u6a19\u7c64",captioningid:"\u5b57\u5e55 id",baseurl:"Base URL",balance:"\u5e73\u8861",windowlessvideo:"\u7121\u8996\u7a97\u5f71\u50cf",stretchtofit:"\u7e2e\u653e\u81f3\u5408\u9069\u5927\u5c0f",mute:"\u975c\u97f3",invokeurls:"\u8abf\u7528\u7684URLs",fullscreen:"\u5168\u87a2\u5e55",enabled:"\u5553\u7528",autostart:"\u81ea\u52d5\u958b\u59cb",volume:"\u97f3\u91cf",target:"\u76ee\u6a19",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"\u7d50\u675f\u6642\u9593",starttime:"\u958b\u59cb\u6642\u9593",enablejavascript:"\u5553\u7528 JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6a19\u66ab\u5b58",playeveryframe:"\u9010\u683c\u64ad\u653e",kioskmode:"Kiosk \u6a21\u5f0f",controller:"\u63a7\u5236\u81fa",menu:"\u986f\u793a\u529f\u80fd\u8868",loop:"\u8ff4\u5708",play:"\u81ea\u52d5\u64ad\u653e",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd","class_name":"\u985e\u540d",name:"\u540d\u7a31",id:"Id",type:"\u985e\u578b",size:"\u5927\u5c0f",preview:"\u9810\u89bd","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",controls:"\u63a7\u5236",numloop:"\u8ff4\u5708\u6b21\u6578",console:"\u63a7\u5236\u81fa",cache:"\u66ab\u5b58",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash\u8b8a\u6578",base:"\u57fa\u7dda",bgcolor:"\u80cc\u666f\u8272",wmode:"WMode",salign:"SAlign",align:"\u5c0d\u9f4a",scale:"\u7e2e\u653e",quality:"\u54c1\u8cea",shuffle:"\u96a8\u6a5f",prefetch:"\u9810\u8b80",nojava:"No java",maintainaspect:"\u7dad\u8b77\u72c0\u614b",imagestatus:"\u5716\u50cf\u72c0\u614b",center:"\u7f6e\u4e2d",autogotourl:"\u81ea\u52d5\u8df3\u8f49 URL","shockwave_options":"Shockwave \u9078\u9805","rmp_options":"Real media player \u9078\u9805","wmp_options":"Windows media player \u9078\u9805","qt_options":"Quicktime \u9078\u9805","flash_options":"Flash \u9078\u9805",hidden:"\u96b1\u85cf","align_bottom_left":"\u5e95\u90e8\u5c45\u5de6","align_bottom_right":"\u5e95\u90e8\u5c45\u53f3","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tw_dlg.js
new file mode 100644
index 000000000..a28423a3f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.media_dlg',{list:"\u5217\u8868",file:"\u5a92\u9ad4URL",advanced:"\u9032\u968e",general:"\u4e00\u822c",title:"\u63d2\u5165/\u7de8\u8f2f\u5a92\u9ad4","align_top_left":"\u5de6\u4e0a","align_center":"\u7f6e\u4e2d","align_left":"\u9760\u5de6","align_bottom":"\u9760\u4e0b","align_right":"\u9760\u53f3","align_top":"\u9760\u4e0a","qt_stream_warn":"\u4e32\u6d41\u5a92\u9ad4rtsp\u8cc7\u6e90\u61c9\u8a72\u52a0\u5230\u300c\u9032\u968e\u300d\u4e2dQT src\u3002 \n\u540c\u6642\u589e\u52a0\u975e\u4e32\u6d41\u5a92\u9ad4\u8cc7\u6e90\u5230src\u3002",qtsrc:"QT Src",progress:"\u9032\u5ea6",sound:"\u8072\u97f3",swstretchvalign:"\u7e2e\u653e\u81f3\u5782\u76f4\u5c0d\u9f4a",swstretchhalign:"\u7e2e\u653e\u81f3\u6c34\u5e73\u5c0d\u9f4a",swstretchstyle:"\u7e2e\u653e\u6a23\u5f0f",scriptcallbacks:"Script \u547c\u53eb","align_top_right":"\u53f3\u4e0a",uimode:"\u5916\u89c0\u6a21\u5f0f",rate:"\u6bd4\u7387",playcount:"\u64ad\u653e\u6b21\u6578",defaultframe:"\u9810\u8a2d\u756b\u9762",currentposition:"\u76ee\u524d\u4f4d\u7f6e",currentmarker:"\u76ee\u524d\u6a19\u8a18",captioningid:"\u5b57\u5e55\u7de8\u865f",baseurl:"\u57fa\u5e95 URL",balance:"\u5e73\u8861",windowlessvideo:"\u7121\u8996\u7a97\u64ad\u653e",stretchtofit:"\u7e2e\u653e\u81f3\u9069\u5408\u5927\u5c0f",mute:"\u975c\u97f3",invokeurls:"\u5f15\u7528\u7684 URLs",fullscreen:"\u5168\u87a2\u5e55",enabled:"\u53ef\u7528",autostart:"\u81ea\u52d5\u64ad\u653e",volume:"\u97f3\u91cf",target:"\u76ee\u6a19",qtsrcchokespeed:"\u963b\u585e\u901f\u5ea6",href:"\u8d85\u9023\u7d50",endtime:"\u7d50\u675f\u6642\u9593",starttime:"\u958b\u59cb\u6642\u9593",enablejavascript:"\u555f\u7528 JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6a19\u66ab\u5b58",playeveryframe:"\u9010\u756b\u9762\u64ad\u653e",kioskmode:"Kiosk\u6a21\u5f0f",controller:"\u63a7\u5236\u9762\u677f",menu:"\u986f\u793a\u9078\u9805",loop:"\u5faa\u74b0",play:"\u81ea\u52d5\u64ad\u653e",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd","class_name":"\u985e\u5225",name:"\u540d\u7a31",id:"ID",type:"\u985e\u578b",size:"\u5927\u5c0f",preview:"\u9810\u89bd","constrain_proportions":"\u9396\u5b9a\u6bd4\u4f8b",controls:"\u63a7\u5236",numloop:"\u5faa\u74b0\u6b21\u6578",console:"\u63a7\u5236\u53f0",cache:"\u66ab\u5b58",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash \u8b8a\u6578",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f\u8272",wmode:"\u8996\u7a97\u6a21\u5f0f",salign:"SAlign",align:"\u5c0d\u9f4a",scale:"\u7e2e\u653e",quality:"\u54c1\u8cea",shuffle:"\u96a8\u6a5f",prefetch:"\u9810\u5148\u8f09\u5165",nojava:"No Java",maintainaspect:"\u9396\u5b9a\u6bd4\u4f8b",imagestatus:"\u5716\u7247\u72c0\u614b",center:"\u7f6e\u4e2d",autogotourl:"\u81ea\u52d5\u8f49\u81f3 URL","shockwave_options":"Shockwave \u9078\u9805","rmp_options":"Real Media Player \u9078\u9805","wmp_options":"Windows Media Player \u9078\u9805","qt_options":"Quick Time \u9078\u9805","flash_options":"Flash \u9078\u9805",hidden:"\u96b1\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/uk_dlg.js
new file mode 100644
index 000000000..6f7a4b43f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.media_dlg',{list:"\u0421\u043f\u0438\u0441\u043e\u043a",file:"\u0424\u0430\u0439\u043b/URL",advanced:"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e",general:"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",title:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 / \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u0456 \u043c\u0435\u0434\u0456\u0430","align_top_left":"\u0417\u0432\u0435\u0440\u0445\u0443 \u0437\u043b\u0456\u0432\u0430","align_center":"\u0426\u0435\u043d\u0442\u0440","align_left":"\u041b\u0456\u0432\u043e","align_bottom":"\u041d\u0438\u0437","align_right":"\u041f\u0440\u0430\u0432\u043e","align_top":"\u0412\u0435\u0440\u0445","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..",qtsrc:"\u0414\u0436\u0435\u0440\u0435\u043b\u043e QT",progress:"\u0425\u0456\u0434",sound:"\u0417\u0432\u0443\u043a",swstretchvalign:"\u0420\u043e\u0437\u0442\u044f\u0433\u043d\u0443\u0442\u0438 \u0432\u0435\u0440\u0442. \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0430\u043d\u043d\u044f",swstretchhalign:"\u0420\u043e\u0437\u0442\u044f\u0433\u043d\u0443\u0442\u0438 \u0433\u043e\u0440\u0438\u0437. \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0430\u043d\u043d\u044f",swstretchstyle:"\u0420\u043e\u0437\u0442\u044f\u0433\u043d\u0443\u0442\u0438\u0439 \u0441\u0442\u0438\u043b\u044c",scriptcallbacks:"\u0417\u0432\u043e\u0440\u043e\u0442\u043d\u0456\u0439 \u0432\u0438\u043a\u043b\u0438\u043a \u0441\u0446\u0435\u043d\u0430\u0440\u0456\u044e","align_top_right":"\u0417\u0432\u0435\u0440\u0445\u0443 \u0437\u043f\u0440\u0430\u0432\u0430",uimode:"\u0420\u0435\u0436\u0438\u043c \u0456\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443",rate:"\u0428\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c",playcount:"\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u043d\u044c",defaultframe:"\u041a\u0430\u0434\u0440 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0430\u043d\u043d\u044f\u043c",currentposition:"\u041f\u043e\u0442\u043e\u0447\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0456\u044f",currentmarker:"\u041f\u043e\u0442\u043e\u0447\u043d\u0438\u0439 \u043c\u0430\u0440\u043a\u0435\u0440",captioningid:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440 \u043d\u0430\u0434\u043f\u0438\u0441\u0443",baseurl:"\u041e\u0441\u043d\u043e\u0432\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",balance:"\u0411\u0430\u043b\u0430\u043d\u0441",windowlessvideo:"Windowless video",stretchtofit:"\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438, \u0449\u043e\u0431 \u0432\u043c\u0456\u0441\u0442\u0438\u043b\u043e\u0441\u044c",mute:"\u0417\u0430\u0433\u043b\u0443\u0448\u0438\u0442\u0438",invokeurls:"\u0412\u0438\u043a\u043b\u0438\u043a\u0430\u0442\u0438 URLs",fullscreen:"\u041f\u043e\u0432\u043d\u0438\u0439 \u0435\u043a\u0440\u0430\u043d",enabled:"\u0414\u043e\u0437\u0432\u043e\u043b\u0435\u043d\u0438\u0439",autostart:"\u0410\u0432\u0442\u043e\u0441\u0442\u0430\u0440\u0442",volume:"\u0413\u0443\u0447\u043d\u0456\u0441\u0442\u044c",target:"\u0426\u0456\u043b\u044c",qtsrcchokespeed:"\u0428\u0432\u0438\u0434\u043a\u0456\u0441\u0442\u044c \u0437\u0430\u0433\u0430\u0441\u0430\u043d\u043d\u044f",href:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f",endtime:"\u0427\u0430\u0441 \u043a\u0456\u043d\u0446\u044f",starttime:"\u0427\u0430\u0441 \u043f\u043e\u0447\u0430\u0442\u043a\u0443",enablejavascript:"\u0414\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0438 JavaScript",correction:"\u0411\u0435\u0437 \u043a\u043e\u0440\u0435\u043a\u0446\u0456\u0457",targetcache:"\u0426\u0456\u043b\u044c\u043e\u0432\u0438\u0439 \u043a\u0435\u0448",playeveryframe:"\u041f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u0442\u0438 \u043a\u043e\u0436\u0435\u043d \u043a\u0430\u0434\u0440",kioskmode:"\u041f\u043e\u0432\u043d\u043e\u0435\u043a\u0440\u0430\u043d\u043d\u0438\u0439 \u0440\u0435\u0436\u0438\u043c",controller:"\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0435\u0440",menu:"\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043c\u0435\u043d\u044e",loop:"\u041f\u043e\u0432\u0442\u043e\u0440\u044e\u0432\u0430\u0442\u0438",play:"\u0410\u0432\u0442\u043e\u043f\u0440\u043e\u0433\u0440\u0430\u0432\u043d\u043d\u044f",hspace:"\u0433\u043e\u0440.\u0432\u0456\u0434\u0441\u0442\u0443\u043f",vspace:"\u0432\u0435\u0440\u0442.\u0432\u0456\u0434\u0441\u0442\u0443\u043f","class_name":"\u041a\u043b\u0430\u0441",name:"\u041d\u0430\u0437\u0432\u0430",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440",type:"\u0422\u0438\u043f",size:"\u0420\u043e\u0437\u043c\u0456\u0440\u0438",preview:"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434","constrain_proportions":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0456\u0457",controls:"\u041a\u0435\u0440\u0443\u0432\u0430\u043d\u043d\u044f",numloop:"\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0446\u0438\u043a\u043b\u0456\u0432",console:"\u041a\u043e\u043d\u0441\u043e\u043b\u044c",cache:"\u041a\u0435\u0448",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash-\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438",base:"\u0411\u0430\u0437\u0430",bgcolor:"\u0424\u043e\u043d",wmode:"W-\u0440\u0435\u0436\u0438\u043c",salign:"S-\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",scale:"\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043d\u043d\u044f",quality:"\u042f\u043a\u0456\u0441\u0442\u044c",shuffle:"\u041f\u0435\u0440\u0435\u0442\u0430\u0441\u0443\u0432\u0430\u0442\u0438",prefetch:"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0454 \u0432\u0438\u043b\u0443\u0447\u0435\u043d\u043d\u044f",nojava:"\u0411\u0435\u0437 Java",maintainaspect:"\u0412\u0434\u0435\u0440\u0436\u0443\u0432\u0430\u0442\u0438 \u0440\u0430\u043a\u0443\u0440\u0441",imagestatus:"\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",center:"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443",autogotourl:"\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0430\u0432\u0442\u043e\u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443","shockwave_options":"\u041e\u043f\u0446\u0456\u0457 Shockwave","rmp_options":"\u041e\u043f\u0446\u0456\u0457 Real media player","wmp_options":"\u041e\u043f\u0446\u0456\u0457 Windows media player","qt_options":"\u041e\u043f\u0446\u0456\u0457 Quicktime","flash_options":"\u041e\u043f\u0446\u0456\u0457 Flash",hidden:"\u041f\u0440\u0438\u0445\u043e\u0432\u0430\u043d\u0438\u0439","align_bottom_left":"\u0417\u043d\u0438\u0437\u0443 \u0437\u043b\u0456\u0432\u0430","align_bottom_right":"\u0417\u043d\u0438\u0437\u0443 \u0437\u043f\u0440\u0430\u0432\u0430",flash:"flash",quicktime:"quicktime","embedded_audio_options":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u0432\u0431\u0443\u0434\u043e\u0432\u0430\u043d\u043e\u0433\u043e \u0437\u0432\u0443\u043a\u0443",windowsmedia:"windowsmedia",realmedia:"realmedia",shockwave:"shockwave",audio:"audio",video:"video","html5_video_options":"\u0412\u0456\u0434\u0435\u043e \u043e\u043f\u0446\u0456\u0457 HTML5",altsource1:"\u0410\u043b\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e 1",altsource2:"\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0435 \u0434\u0436\u0435\u0440\u0435\u043b\u043e 2",preload:"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0454 \u0437\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u043d\u044f",poster:"\u041f\u043e\u0441\u0442\u0435\u0440",source:"\u0414\u0436\u0435\u0440\u0435\u043b\u043e","html5_audio_options":"\u0410\u0443\u0434\u0456\u043e \u043e\u043f\u0446\u0456\u0457","preload_none":"\u0411\u0435\u0437 \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e\u0457 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438","preload_metadata":"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u0438\u0445 \u0432\u0456\u0434\u0435\u043e","preload_auto":"\u041d\u0430 \u0440\u043e\u0437\u0441\u0443\u0434 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430",iframe:"iframe",embeddedaudio:"embeddedaudio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ur_dlg.js
new file mode 100644
index 000000000..6f368a83c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.media_dlg',{list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert / edit embedded media","align_top_left":"Top left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top","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..",qtsrc:"QT Src",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch style",scriptcallbacks:"Script callbacks","align_top_right":"Top right",uimode:"UI Mode",rate:"Rate",playcount:"Play count",defaultframe:"Default frame",currentposition:"Current position",currentmarker:"Current marker",captioningid:"Captioning id",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless video",stretchtofit:"Stretch to fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Fullscreen",enabled:"Enabled",autostart:"Auto start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke speed",href:"Href",endtime:"End time",starttime:"Start time",enablejavascript:"Enable JavaScript",correction:"No correction",targetcache:"Target cache",playeveryframe:"Play every frame",kioskmode:"Kiosk mode",controller:"Controller",menu:"Show menu",loop:"Loop",play:"Auto play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"Id",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain proportions",controls:"Controls",numloop:"Num loops",console:"Console",cache:"Cache",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"Image status",center:"Center",autogotourl:"Auto goto URL","shockwave_options":"Shockwave options","rmp_options":"Real media player options","wmp_options":"Windows media player options","qt_options":"Quicktime options","flash_options":"Flash options",hidden:"Hidden","align_bottom_left":"Bottom left","align_bottom_right":"Bottom right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/vi_dlg.js
new file mode 100644
index 000000000..04fca2d58
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.media_dlg',{list:"Danh s\u00e1ch",file:"T\u1eadp tin/URL",advanced:"N\u00e2ng cao",general:"Chung",title:"Ch\u00e8n / s\u1eeda ph\u01b0\u01a1ng ti\u1ec7n truy\u1ec1n th\u00f4ng nh\u00fang","align_top_left":"Tr\u00ean c\u00f9ng tr\u00e1i","align_center":"Gi\u1eefa","align_left":"Tr\u00e1i","align_bottom":"D\u01b0\u1edbi c\u00f9ng","align_right":"Ph\u1ea3i","align_top":"Tr\u00ean c\u00f9ng","qt_stream_warn":"Ngu\u1ed3n rtsp theo lu\u1ed3ng n\u00ean \u0111\u01b0\u1ee3c th\u00eam v\u00e0o tr\u01b0\u1eddng QT Src d\u01b0\u1edbi th\u1ebb n\u00e2ng cao.\nB\u1ea1n c\u0169ng n\u00ean th\u00eam m\u1ed9t phi\u00ean b\u1ea3n kh\u00f4ng theo lu\u1ed3ng v\u00e0o tr\u01b0\u1eddng Src..",qtsrc:"QT Src",progress:"\u0110ang ti\u1ebfn tri\u1ec3n",sound:"\u00c2m thanh",swstretchvalign:"D\u00e3n theo V-Align",swstretchhalign:"D\u00e3n theo H-Align",swstretchstyle:"Ki\u1ec3u d\u00e3n",scriptcallbacks:"H\u00e0m g\u1ecdi ng\u01b0\u1ee3c Script","align_top_right":"Tr\u00ean c\u00f9ng ph\u1ea3i",uimode:"Ch\u1ebf \u0111\u1ed9 UI",rate:"T\u1ed1c \u0111\u1ed9",playcount:"\u0110\u1ebfm l\u1ea7n ph\u00e1t",defaultframe:"Khung m\u1eb7c \u0111\u1ecbnh",currentposition:"V\u1ecb tr\u00ed hi\u1ec7n th\u1eddi",currentmarker:"B\u1ed9 t\u1ea1o hi\u1ec7n th\u1eddi",captioningid:"id \u0111\u1ea7u \u0111\u1ec1",baseurl:"Base URL",balance:"C\u00e2n b\u1eb1ng",windowlessvideo:"Video kh\u00f4ng c\u1eeda s\u1ed5",stretchtofit:"D\u00e3n \u0111\u1ec3 ph\u00f9 h\u1ee3p",mute:"T\u1eaft \u00e2m thanh",invokeurls:"URL tri\u1ec7u g\u1ecdi",fullscreen:"To\u00e0n m\u00e0n h\u00ecnh",enabled:"Cho ph\u00e9p",autostart:"T\u1ef1 \u0111\u1ed9ng b\u1eaft \u0111\u1ea7u",volume:"\u00c2m l\u01b0\u1ee3ng",target:"\u0110\u00edch",qtsrcchokespeed:"T\u1ed1c \u0111\u1ed9 Choke",href:"Href",endtime:"Th\u1eddi gian k\u1ebft th\u00fac",starttime:"Th\u1eddi gian b\u1eaft \u0111\u1ea7u",enablejavascript:"Cho ph\u00e9p JavaScript",correction:"Kh\u00f4ng ch\u1ec9nh",targetcache:"B\u1ed9 nh\u1edb \u0111\u1ec7m \u0111\u00edch",playeveryframe:"Ph\u00e1t t\u1ea5t c\u1ea3 khung",kioskmode:"Ch\u1ebf \u0111\u1ed9 Kiosk",controller:"Tr\u00ecnh \u0111i\u1ec1u khi\u1ec3n",menu:"Hi\u1ec3n th\u1ecb menu",loop:"L\u1eb7p",play:"T\u1ef1 \u0111\u1ed9ng ph\u00e1t",hspace:"H-Space",vspace:"V-Space","class_name":"L\u1edbp",name:"T\u00ean",id:"Id",type:"Ki\u1ec3u",size:"K\u00edch th\u01b0\u1edbc",preview:"Xem tr\u01b0\u1edbc","constrain_proportions":"R\u00e0ng bu\u1ed9c t\u1ec9 l\u1ec7",controls:"\u0110i\u1ec1u khi\u1ec3n",numloop:"S\u1ed1 l\u1eb7p",console:"B\u00e0n \u0111i\u1ec1u khi\u1ec3n",cache:"B\u1ed9 nh\u1edb \u0111\u1ec7m",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flashvars",base:"C\u01a1 s\u1edf",bgcolor:"N\u1ec1n",wmode:"WMode",salign:"SAlign",align:"Canh l\u1ec1",scale:"T\u1ec9 l\u1ec7",quality:"Ch\u1ea5t l\u01b0\u1ee3ng",shuffle:"Kh\u00f4ng theo tr\u1eadt t\u1ef1",prefetch:"T\u00ecm n\u1ea1p tr\u01b0\u1edbc",nojava:"Kh\u00f4ng c\u00f3 java",maintainaspect:"Duy tr\u00ec c\u1ea1nh",imagestatus:"Tr\u1ea1ng th\u00e1i \u1ea3nh",center:"Gi\u1eefa",autogotourl:"T\u1ef1 \u0111\u1ed9ng nh\u1ea3y t\u1edbi URL","shockwave_options":"T\u00f9y ch\u1ecdn Shockwave","rmp_options":"T\u00f9y ch\u1ecdn tr\u00ecnh ch\u01a1i media Real","wmp_options":"T\u00f9y ch\u1ecdn tr\u00ecnh ch\u01a1i media Windows","qt_options":"T\u00f9y ch\u1ecdn Quicktime","flash_options":"T\u00f9y ch\u1ecdn Flash",hidden:"\u1ea8n","align_bottom_left":"D\u01b0\u1edbi c\u00f9ng tr\u00e1i","align_bottom_right":"D\u01b0\u1edbi c\u00f9ng ph\u1ea3i","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..273a48f0c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6/URL",advanced:"\u9ad8\u7ea7",general:"\u666e\u901a",title:"\u63d2\u5165/\u7f16\u8f91 \u5d4c\u5165\u5f0f\u5a92\u4f53","align_top_left":"\u5de6\u4e0a","align_center":"\u5c45\u4e2d","align_left":"\u5c45\u5de6","align_bottom":"\u5c45\u4e0b","align_right":"\u5c45\u53f3","align_top":"\u5c45\u4e0a","qt_stream_warn":"\u6d41\u5a92\u4f53RTSP\u8d44\u6e90\u5e94\u6dfb\u52a0\u5230\u9ad8\u7ea7\u9009\u9879\u7684QT\u8d44\u6e90\u4e2d\u3002n\u540c\u65f6\uff0c\u60a8\u4e5f\u53ef\u4ee5\u5728\u8fd9\u91cc\u52a0\u5165\u4e00\u4e2a\u975e\u6d41\u5a92\u4f53\u3002",qtsrc:"QT\u8d44\u6e90",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u5782\u76f4\u62c9\u4f38",swstretchhalign:"\u6c34\u5e73\u62c9\u4f38",swstretchstyle:"\u62c9\u4f38\u65b9\u5f0f",scriptcallbacks:"\u811a\u672c\u56de\u8c03","align_top_right":"\u53f3\u4e0a",uimode:"\u5916\u89c2\u6a21\u5f0f",rate:"\u6bd4\u7387",playcount:"\u64ad\u653e\u6b21\u6570",defaultframe:"\u9ed8\u8ba4\u5e27",currentposition:"\u5f53\u524d\u4f4d\u7f6e",currentmarker:"\u5f53\u524d\u6807\u8bb0",captioningid:"\u5b57\u5e55ID",baseurl:"\u57fa\u7840\u8def\u5f84",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u8fb9\u6846",stretchtofit:"\u62c9\u4f38\u5230\u9002\u5408",mute:"\u9759\u97f3",invokeurls:"\u5f15\u7528URL",fullscreen:"\u5168\u5c4f",enabled:"\u542f\u7528",autostart:"\u81ea\u52a8\u64ad\u653e",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"\u9650\u5236\u901f\u5ea6",href:"\u8d85\u94fe\u63a5",endtime:"\u7ed3\u675f\u65f6\u95f4",starttime:"\u5f00\u59cb\u65f6\u95f4",enablejavascript:"\u542f\u7528JavaScript",correction:"\u65e0\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u9010\u5e27\u64ad\u653e",kioskmode:"\u5168\u5c4f\u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u663e\u793a\u83dc\u5355",loop:"\u5faa\u73af",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u6c34\u5e73\u8ddd\u79bb",vspace:"\u5782\u76f4\u8ddd\u79bb","class_name":"\u7c7b\u522b",name:"\u540d\u79f0",id:"ID",type:"\u7c7b\u578b",size:"\u5c3a\u5bf8",preview:"\u9884\u89c8","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",controls:"\u64ad\u653e\u63a7\u5236",numloop:"\u5faa\u73af\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"\u81ea\u52a8\u8df3\u8f6c",liveconnect:"JavaScript\u5f00\u542f",flashvars:"Flash\u53d8\u91cf",base:"\u57fa\u7840\u8def\u5f84",bgcolor:"\u80cc\u666f",wmode:"\u7a97\u4f53\u6a21\u5f0f",salign:"\u5a92\u4f53\u5bf9\u9f50",align:"\u6587\u672c\u5bf9\u9f50",scale:"\u7f29\u653e",quality:"\u753b\u8d28",shuffle:"\u968f\u673a",prefetch:"\u9884\u52a0\u8f7d",nojava:"\u65e0java",maintainaspect:"\u4fdd\u6301\u5916\u89c2",imagestatus:"\u56fe\u7247\u72b6\u6001",center:"\u5c45\u4e2d",autogotourl:"\u81ea\u52a8\u8f6c\u5230URL","shockwave_options":"Shockwave\u9009\u9879","rmp_options":"Real media player\u9009\u9879","wmp_options":"Windows media player\u9009\u9879","qt_options":"Quicktime\u9009\u9879","flash_options":"Flash\u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b","html5_video_options":"HTML5\u89c6\u9891\u9009\u9879",altsource1:"\u66ff\u4ee3\u8d44\u6e901",altsource2:"\u66ff\u4ee3\u8d44\u6e902",preload:"\u9884\u52a0\u8f7d",poster:"\u6d77\u62a5",source:"\u8d44\u6e90","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..da608d42f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.media_dlg',{"qt_stream_warn":"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",source:"\u5d4c\u5165\u539f\u59cb\u6a94",list:"List",file:"File/URL",advanced:"Advanced",general:"General",title:"Insert/Edit Embedded Media","align_top_left":"Top Left","align_center":"Center","align_left":"Left","align_bottom":"Bottom","align_right":"Right","align_top":"Top",qtsrc:"QT Source",progress:"Progress",sound:"Sound",swstretchvalign:"Stretch V-Align",swstretchhalign:"Stretch H-Align",swstretchstyle:"Stretch Style",scriptcallbacks:"Script Callbacks","align_top_right":"Top Right",uimode:"UI Mode",rate:"Rate",playcount:"Play Count",defaultframe:"Default Frame",currentposition:"Current Position",currentmarker:"Current Marker",captioningid:"Captioning ID",baseurl:"Base URL",balance:"Balance",windowlessvideo:"Windowless Video",stretchtofit:"Stretch to Fit",mute:"Mute",invokeurls:"Invoke URLs",fullscreen:"Full Screen",enabled:"Enabled",autostart:"Auto Start",volume:"Volume",target:"Target",qtsrcchokespeed:"Choke Speed",href:"HREF",endtime:"End Time",starttime:"Start Time",enablejavascript:"Enable JavaScript",correction:"No Correction",targetcache:"Target Cache",playeveryframe:"Play Every Frame",kioskmode:"Kiosk Mode",controller:"Controller",menu:"Show Menu",loop:"Loop",play:"Auto Play",hspace:"H-Space",vspace:"V-Space","class_name":"Class",name:"Name",id:"ID",type:"Type",size:"Dimensions",preview:"Preview","constrain_proportions":"Constrain Proportions",controls:"Controls",numloop:"Num Loops",console:"Console",cache:"Cache",autohref:"Auto HREF",liveconnect:"SWLiveConnect",flashvars:"Flash Vars",base:"Base",bgcolor:"Background",wmode:"WMode",salign:"SAlign",align:"Align",scale:"Scale",quality:"Quality",shuffle:"Shuffle",prefetch:"Prefetch",nojava:"No Java",maintainaspect:"Maintain Aspect",imagestatus:"Image Status",center:"Center",autogotourl:"Auto Goto URL","shockwave_options":"Shockwave Options","rmp_options":"Real Media Player Options","wmp_options":"Windows Media Player Options","qt_options":"QuickTime Options","flash_options":"Flash Options",hidden:"Hidden","align_bottom_left":"Bottom Left","align_bottom_right":"Bottom Right","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh_dlg.js
new file mode 100644
index 000000000..d18a853f9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.media_dlg',{list:"\u5217\u8868",file:"\u6a94\u6848/URL",advanced:"\u9032\u968e\u8a2d\u5b9a",general:"\u4e00\u822c",title:"\u63d2\u5165/\u7de8\u8f2f\u5d4c\u5165\u5a92\u9ad4","align_top_left":"\u5de6\u4e0a","align_center":"\u7f6e\u4e2d","align_left":"\u9760\u5de6","align_bottom":"\u9760\u4e0b","align_right":"\u9760\u53f3","align_top":"\u9760\u4e0a","qt_stream_warn":"\u4e32\u6d41\u5a92\u9ad4 rtsp \u7db2\u5740\u61c9\u586b\u5beb\u300e\u9032\u968e\u300f\u4e2d\u7684 QT Src \u6b04\u4f4d.\n\u540c\u6642\u5728 Src \u6b04\u4f4d\u4e2d\u586b\u5beb\u975e\u4e32\u6d41\u5a92\u9ad4\u7db2\u5740.",qtsrc:"QT Src",progress:"\u9032\u5ea6",sound:"\u8072\u97f3",swstretchvalign:"\u7e2e\u653e\u81f3\u5782\u76f4\u5c0d\u9f4a",swstretchhalign:"\u7e2e\u653e\u81f3\u6c34\u5e73\u5c0d\u9f4a",swstretchstyle:"\u7e2e\u653e\u6a23\u5f0f",scriptcallbacks:"Script \u547c\u53eb","align_top_right":"\u53f3\u4e0a",uimode:"\u9762\u677f\u6a21\u5f0f",rate:"\u6bd4\u4f8b",playcount:"\u64ad\u653e\u6b21\u6578",defaultframe:"\u9810\u8a2d\u756b\u9762",currentposition:"\u76ee\u524d\u4f4d\u7f6e",currentmarker:"\u76ee\u524d\u6a19\u8a18",captioningid:"\u5b57\u5e55ID",baseurl:"\u57fa\u5e95 URL",balance:"\u5e73\u8861",windowlessvideo:"\u7121\u8996\u7a97\u64ad\u653e",stretchtofit:"\u7e2e\u653e\u81f3\u6700\u4f73\u5927\u5c0f",mute:"\u975c\u97f3",invokeurls:"\u5f15\u7528\u7684 URLs",fullscreen:"\u5168\u87a2\u5e55",enabled:"\u53ef\u7528",autostart:"\u81ea\u52d5\u64ad\u653e",volume:"\u97f3\u91cf",target:"\u76ee\u6a19",qtsrcchokespeed:"\u9650\u5236\u901f\u5ea6",href:"\u8d85\u9023\u7d50",endtime:"\u7d50\u675f\u6642\u9593",starttime:"\u958b\u59cb\u6642\u9593",enablejavascript:"\u555f\u7528 JavaScript",correction:"\u4fee\u6b63",targetcache:"\u76ee\u6a19\u7de9\u5b58",playeveryframe:"\u9010\u683c\u64ad\u653e",kioskmode:"Kiosk \u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u986f\u793a\u9078\u55ae",loop:"\u5faa\u74b0\u64ad\u653e",play:"\u81ea\u52d5\u64ad\u653e",hspace:"\u6c34\u5e73\u9593\u8ddd",vspace:"\u5782\u76f4\u9593\u8ddd","class_name":"\u985e\u5225",name:"\u540d\u7a31",id:"ID",type:"\u985e\u578b",size:"\u5927\u5c0f",preview:"\u9810\u89bd","constrain_proportions":"\u56fa\u5b9a\u6bd4\u4f8b",controls:"\u63a7\u5236",numloop:"\u5faa\u74b0\u6b21\u6578",console:"\u63a7\u5236\u53f0",cache:"\u7de9\u5b58",autohref:"AutoHREF",liveconnect:"SWLiveConnect",flashvars:"Flash \u53c3\u6578",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f\u984f\u8272",wmode:"\u8996\u7a97\u6a21\u5f0f",salign:"\u5c0d\u9f4a\u4f4d\u7f6e",align:"\u5c0d\u9f4a",scale:"\u7e2e\u653e",quality:"\u54c1\u8cea",shuffle:"\u96a8\u6a5f",prefetch:"\u9810\u8f09",nojava:"No Java",maintainaspect:"\u56fa\u5b9a\u6bd4\u4f8b",imagestatus:"\u5716\u7247\u72c0\u614b",center:"\u7f6e\u4e2d",autogotourl:"\u81ea\u52d5\u8df3\u8f49 URL","shockwave_options":"Shockwave \u9078\u9805","rmp_options":"Real Media Player \u9078\u9805","wmp_options":"Windows Media Player \u9078\u9805","qt_options":"Quick Time \u9078\u9805","flash_options":"Flash \u9078\u9805",hidden:"\u96b1\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b",flash:"Flash",quicktime:"QuickTime","embedded_audio_options":"\u5d4c\u5165\u8072\u97f3\u9078\u9805",windowsmedia:"Windows Media",realmedia:"Real Media",shockwave:"Shockwave",audio:"HTML5 Audio",video:"HTML5 Video","html5_video_options":"HTML5 Video \u9078\u9805",altsource1:"\u66ff\u4ee3\u4f86\u6e90 1",altsource2:"\u66ff\u4ee3\u4f86\u6e90 2",preload:"\u9810\u5148\u8f09\u5165",poster:"\u5f71\u7247\u7e2e\u5716",source:"\u539f\u59cb\u78bc","html5_audio_options":"\u8072\u97f3\u9078\u9805","preload_none":"\u7121\u9810\u5148\u8f09\u5165","preload_metadata":"\u9810\u5148\u8f09\u5165\u5f71\u756bMetadata","preload_auto":"\u8b93\u7528\u6236\u700f\u89bd\u5668\u6c7a\u5b9a",iframe:"Iframe",embeddedaudio:"Embedded Audio"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zu_dlg.js
new file mode 100644
index 000000000..d76e333bd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/media/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.media_dlg',{list:"\u5217\u8868",file:"\u6587\u4ef6/\u7f51\u5740",advanced:"\u9ad8\u7ea7",general:"\u4e00\u822c",title:"\u63d2\u5165/\u7f16\u8f91\u5d4c\u5165\u5a92\u4f53","align_top_left":"\u5de6\u4e0a","align_center":"\u4e2d\u95f4","align_left":"\u9760\u5de6","align_bottom":"\u4e0b\u65b9","align_right":"\u9760\u53f3","align_top":"\u4e0a\u65b9","qt_stream_warn":"\u6d41\u5f0frtsp\u8d44\u6e90\u5e94\u8be5\u6dfb\u52a0\u5230\u201c\u9ad8\u7ea7\u201d\u4e2dQT Src\u3002\n\u540c\u65f6\u6dfb\u52a0\u975e\u6d41\u5f0f\u8d44\u6e90\u5230Src\u3002",qtsrc:"QT Src",progress:"\u8fdb\u5ea6",sound:"\u58f0\u97f3",swstretchvalign:"\u5782\u76f4\u62c9\u5347",swstretchhalign:"\u6c34\u51c6\u62c9\u5347",swstretchstyle:"\u62c9\u5347\u6a21\u5f0f",scriptcallbacks:"\u811a\u672c\u56de\u6863","align_top_right":"\u53f3\u4e0a",uimode:"\u9762\u677f\u6a21\u5f0f",rate:"\u5e27\u7387",playcount:"\u64ad\u653e\u8ba1\u6570",defaultframe:"\u9ed8\u8ba4\u5e27",currentposition:"\u5f53\u524d\u4f4d\u7f6e",currentmarker:"\u5f53\u524d\u6807\u8bb0",captioningid:"Captioning id",baseurl:"\u57fa\u51c6URL",balance:"\u5e73\u8861",windowlessvideo:"\u65e0\u8fb9\u6846",stretchtofit:"\u62c9\u4f38",mute:"\u9759\u97f3",invokeurls:"\u76f8\u5173URLs",fullscreen:"\u5168\u5c4f",enabled:"\u542f\u7528",autostart:"\u81ea\u52a8\u5f00\u59cb",volume:"\u97f3\u91cf",target:"\u76ee\u6807",qtsrcchokespeed:"Choke speed",href:"\u8fde\u7ed3",endtime:"\u7ed3\u675f\u65f6\u95f4",starttime:"\u5f00\u59cb\u65f6\u95f4",enablejavascript:"\u542f\u7528JavaScript",correction:"\u6ca1\u6709\u4fee\u6b63",targetcache:"\u76ee\u6807\u7f13\u5b58",playeveryframe:"\u64ad\u653e\u6bcf\u4e00\u5e27",kioskmode:"Kiosk\u6a21\u5f0f",controller:"\u63a7\u5236\u53f0",menu:"\u663e\u793a\u529f\u80fd\u8868",loop:"\u56de\u5708\u64ad\u653e",play:"\u81ea\u52a8\u64ad\u653e",hspace:"\u5782\u76f4\u95f4\u8ddd",vspace:"\u6c34\u51c6\u95f4\u8ddd","class_name":"\u7c7b\u578b",name:"\u540d\u79f0",id:"Id",type:"\u7c7b\u578b",size:"\u5c3a\u5bf8",preview:"\u9884\u89c8","constrain_proportions":"\u4fdd\u6301\u6bd4\u4f8b",controls:"\u63a7\u5236\u5668",numloop:"\u56de\u5708\u6b21\u6570",console:"\u63a7\u5236\u53f0",cache:"\u7f13\u5b58",autohref:"\u81ea\u52a8HREF",liveconnect:"SWLiveConnect",flashvars:"\u53c2\u6570",base:"\u57fa\u5e95",bgcolor:"\u80cc\u666f\u8272",wmode:"\u89c6\u7a97\u6a21\u5f0f",salign:"SAlign",align:"\u5bf9\u9f50",scale:"\u6bd4\u4f8b",quality:"\u54c1\u8d28",shuffle:"Shuffle",prefetch:"\u9884\u8bfb\u53d6",nojava:"No java",maintainaspect:"Maintain aspect",imagestatus:"\u56fe\u50cf\u72b6\u6001",center:"\u4e2d\u5fc3",autogotourl:"\u81ea\u52a8\u8f6c\u5230URL","shockwave_options":"Shockwave\u9009\u9879","rmp_options":"Real media player\u9009\u9879","wmp_options":"Windows media player\u9009\u9879","qt_options":"Quicktime\u9009\u9879","flash_options":"Flash\u9009\u9879",hidden:"\u9690\u85cf","align_bottom_left":"\u5de6\u4e0b","align_bottom_right":"\u53f3\u4e0b","html5_video_options":"HTML5 Video Options",altsource1:"Alternative source 1",altsource2:"Alternative source 2",preload:"Preload",poster:"Poster",source:"Source","html5_audio_options":"Audio Options","preload_none":"Don\'t Preload","preload_metadata":"Preload video metadata","preload_auto":"Let user\'s browser decide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ar_dlg.js
new file mode 100644
index 000000000..f4fb2aba2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.paste_dlg',{"word_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL+V )","text_linebreaks":"\u0627\u062d\u062a\u0641\u0638 \u0628\u0641\u0648\u0627\u0635\u0644 \u0627\u0644\u0623\u0633\u0637\u0631","text_title":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d \u0644\u0644\u0635\u0642 \u0627\u0644\u0646\u0635 \u0641\u064a \u0627\u0644\u0625\u0637\u0627\u0631.( CTRL+V )"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/az_dlg.js
new file mode 100644
index 000000000..98a7fe1ce
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.paste_dlg',{"word_title":"P\u0259nc\u0259r\u0259y\u0259 s\u00f6z \u0259lav\u0259 etm\u0259k \u00fc\u00e7\u00fcn CTRL+V klavi\u015f birl\u0259\u015fm\u0259sini istifad\u0259 edin.","text_linebreaks":"S\u0259tr s\u0131nmalar\u0131n\u0131 saxla","text_title":"P\u0259nc\u0259r\u0259y\u0259 m\u0259tn \u0259lav\u0259 etm\u0259k \u00fc\u00e7\u00fcn CTRL+V klavi\u015f birl\u0259\u015fm\u0259sini istifad\u0259 edin."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/be_dlg.js
new file mode 100644
index 000000000..035880180
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.paste_dlg',{"word_title":"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0439\u0446\u0435 \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u0435 \u043a\u043b\u0430\u0432\u0456\u0448 CTRL+V \u043a\u0430\u0431 \u0443\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0442\u044d\u043a\u0441\u0442 \u0443 \u0430\u043a\u043d\u043e.","text_linebreaks":"\u0417\u0430\u0445\u043e\u045e\u0432\u0430\u0446\u044c \u043f\u0430\u0440\u044b\u0432\u044b \u0440\u0430\u0434\u043a\u043e\u045e","text_title":"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u0439\u0446\u0435 \u0441\u043f\u0430\u043b\u0443\u0447\u044d\u043d\u043d\u0435 \u043a\u043b\u0430\u0432\u0456\u0448 CTRL+V \u043a\u0430\u0431 \u0443\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0442\u044d\u043a\u0441\u0442 \u0443 \u0430\u043a\u043d\u043e."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bg_dlg.js
new file mode 100644
index 000000000..722ecdc56
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.paste_dlg',{"word_title":"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 CTRL V \u043e\u0442 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u0442\u0430, \u0437\u0430 \u0434\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u0430.","text_linebreaks":"\u0417\u0430\u043f\u0430\u0437\u0438 \u0437\u043d\u0430\u0446\u0438\u0442\u0435 \u0437\u0430 \u043d\u043e\u0432\u0438 \u0440\u0435\u0434\u043e\u0432\u0435","text_title":"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 CTRL V \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u0442\u0430, \u0437\u0430 \u0434\u0430 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446\u0430."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bn_dlg.js
new file mode 100644
index 000000000..592080db9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/br_dlg.js
new file mode 100644
index 000000000..41832e433
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.paste_dlg',{"word_title":"Use CTRL+V para colar o texto na janela.","text_linebreaks":"Manter quebras de linha","text_title":"Use CTRL+V para colar o texto na janela."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bs_dlg.js
new file mode 100644
index 000000000..0e6c62cb5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.paste_dlg',{"word_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prijelome","text_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ca_dlg.js
new file mode 100644
index 000000000..ac180fb11
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.paste_dlg',{"word_title":"Amb el teclat utilitzeu CTRL+V per a enganxar el text dins la finestra.","text_linebreaks":"Conserva els salts de l\u00ednia","text_title":"Amb el teclat utilitzeu CTRL+V per a enganxar el text dins la finestra."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ch_dlg.js
new file mode 100644
index 000000000..1bee88404
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.paste_dlg',{"word_title":"\u7528 Ctrl+V \u5c06\u5185\u5bb9\u8d34\u4e0a\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7","text_title":"\u7528 Ctrl+V \u5c06\u5185\u5bb9\u8d34\u4e0a\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cn_dlg.js
new file mode 100644
index 000000000..274905a94
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.paste_dlg',{"word_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u5185\u5bb9","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7","text_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u5185\u5bb9"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cs_dlg.js
new file mode 100644
index 000000000..66936bbab
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.paste_dlg',{"word_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna.","text_linebreaks":"Zachovat zalamov\u00e1n\u00ed \u0159\u00e1dk\u016f","text_title":"Pou\u017eijte CTRL+V pro vlo\u017een\u00ed textu do okna."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cy_dlg.js
new file mode 100644
index 000000000..d1c91b9aa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.paste_dlg',{"word_title":"Defnyddiwch CTRL+V ar eich bysellfwrdd i ludo\'r testun i fewn i\'r ffenest.","text_linebreaks":"Cadw toriadau llinell","text_title":"Defnyddiwch CTRL+V ar eich bysellfwrdd i ludo\'r testun i fewn i\'r ffenest."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/da_dlg.js
new file mode 100644
index 000000000..7e1b96183
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.paste_dlg',{"word_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten.","text_linebreaks":"Bevar linieskift","text_title":"Anvend CTRL+V p\u00e5 tastaturet for at inds\u00e6tte teksten."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/de_dlg.js
new file mode 100644
index 000000000..84b9bc620
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.paste_dlg',{"word_title":"Dr\u00fccken Sie auf Ihrer Tastatur Strg+V, um den Text einzuf\u00fcgen.","text_linebreaks":"Zeilenumbr\u00fcche beibehalten","text_title":"Dr\u00fccken Sie auf Ihrer Tastatur Strg+V, um den Text einzuf\u00fcgen."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/dv_dlg.js
new file mode 100644
index 000000000..e12d44e57
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/el_dlg.js
new file mode 100644
index 000000000..563ecc761
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.paste_dlg',{"word_title":"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 CTRL+V \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf.","text_linebreaks":"\u039d\u03b1 \u03ba\u03c1\u03b1\u03c4\u03b7\u03b8\u03bf\u03cd\u03bd \u03c4\u03b1 linebreaks","text_title":"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03ae\u03c3\u03c4\u03b5 CTRL+V \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03ba\u03ac\u03bd\u03b5\u03c4\u03b5 \u03b5\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/en_dlg.js
new file mode 100644
index 000000000..bc74daf85
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/eo_dlg.js
new file mode 100644
index 000000000..e6613b739
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.paste_dlg',{"word_title":"Uzu CTRL V por alglui tekston en la fenestron.","text_linebreaks":"Konservi linisaltojn","text_title":"Uzu CTRL V por alglui tekston en la fenestron."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/es_dlg.js
new file mode 100644
index 000000000..aa54f98cc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.paste_dlg',{"word_title":"Use CTRL+V en su teclado para pegar el texto en la ventana.","text_linebreaks":"Mantener saltos de l\u00ednea","text_title":"Use CTRL+V en su teclado para pegar el texto en la ventana."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/et_dlg.js
new file mode 100644
index 000000000..8949d832d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.paste_dlg',{"word_title":"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks.","text_linebreaks":"J\u00e4ta reavahetused","text_title":"Vajuta CTRL+V oma klaviatuuril teksti aknasse kleepimiseks."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/eu_dlg.js
new file mode 100644
index 000000000..3296bd5b1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.paste_dlg',{"word_title":"Erabili CTRL+V testua lehioan itsasteko.","text_linebreaks":"Mantendu lerro-jauziak","text_title":"Erabili CTRL+V testua lehioan itsasteko."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fa_dlg.js
new file mode 100644
index 000000000..cb554bcad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.paste_dlg',{"word_title":"\u062c\u0647\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u0627\u0632 CTRL+V \u0628\u0631 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f.","text_linebreaks":"\u062d\u0641\u0638 \u0642\u0637\u0639 \u062e\u0637\u0648\u0637","text_title":"\u062c\u0647\u062a \u0686\u0633\u0628\u0627\u0646\u062f\u0646 \u0645\u062a\u0646 \u062f\u0631 \u067e\u0646\u062c\u0631\u0647 \u0627\u0632 CTRL+V \u0628\u0631 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u06a9\u0644\u06cc\u062f \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fi_dlg.js
new file mode 100644
index 000000000..530e507cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.paste_dlg',{"word_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan.","text_linebreaks":"S\u00e4ilyt\u00e4 rivinvaihdot","text_title":"Paina Ctrl+V liitt\u00e4\u00e4ksesi sis\u00e4ll\u00f6n ikkunaan."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fr_dlg.js
new file mode 100644
index 000000000..acc5d639f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.paste_dlg',{"word_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre.","text_linebreaks":"Conserver les retours \u00e0 la ligne","text_title":"Utilisez CTRL+V sur votre clavier pour coller le texte dans la fen\u00eatre."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/gl_dlg.js
new file mode 100644
index 000000000..3fc652da5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.paste_dlg',{"word_title":"Use CTRL+V no teclado pra pega-lo texto na vent\u00e1.","text_linebreaks":"Manter salto de li\u00f1as","text_title":"Use CTRL+V no teclado pra pega-lo texto na vent\u00e1."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/gu_dlg.js
new file mode 100644
index 000000000..30a5882a0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/he_dlg.js
new file mode 100644
index 000000000..5fe796a6a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.paste_dlg',{"word_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V.","text_linebreaks":"\u05d4\u05e9\u05d0\u05e8 \u05d0\u05ea \u05e9\u05d5\u05e8\u05d5\u05ea \u05d4\u05e8\u05d5\u05d5\u05d7","text_title":"\u05d4\u05d3\u05d1\u05d9\u05e7\u05d5 \u05d1\u05d7\u05dc\u05d5\u05df \u05d6\u05d4 \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05de\u05e7\u05e9\u05d9\u05dd CTRL+V."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hi_dlg.js
new file mode 100644
index 000000000..51c6566c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hr_dlg.js
new file mode 100644
index 000000000..60433743e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.paste_dlg',{"word_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prijelome","text_title":"Koristite CTRL+V na tipkovnici da zalijepite tekst u prozor."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hu_dlg.js
new file mode 100644
index 000000000..7f4fb7e7b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.paste_dlg',{"word_title":"Haszn\u00e1lja a Ctrl+V-t a billenty\u0171zet\u00e9n a beilleszt\u00e9shez.","text_linebreaks":"Sort\u00f6r\u00e9sek megtart\u00e1sa","text_title":"Haszn\u00e1lja a Ctrl+V-t a billenty\u0171zet\u00e9n a beilleszt\u00e9shez."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hy_dlg.js
new file mode 100644
index 000000000..adc0b318d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.paste_dlg',{"word_title":"\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0565\u0584 CTRL + V \u057a\u0561\u057f\u0573\u0565\u0576\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u056b \u057f\u0565\u0572\u0561\u0564\u0580\u0574\u0561\u0576 \u0570\u0561\u0574\u0561\u0580","text_linebreaks":"\u054a\u0561\u0570\u057a\u0561\u0576\u0565\u056c \u057f\u0578\u0572\u0561\u0564\u0561\u0580\u0571\u0565\u0580\u0568","text_title":"\u0555\u0563\u057f\u0561\u0563\u0578\u0580\u056e\u0565\u0584 CTRL + V \u057a\u0561\u057f\u0573\u0565\u0576\u057e\u0561\u056e \u057f\u0565\u0584\u057d\u057f\u056b \u057f\u0565\u0572\u0561\u0564\u0580\u0574\u0561\u0576 \u0570\u0561\u0574\u0561\u0580"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ia_dlg.js
new file mode 100644
index 000000000..37f601ab9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.paste_dlg',{"word_title":"\u5c06\u590d\u5236(CTRL + C)\u7684\u5185\u5bb9\u7c98\u8d34(CTRL + V)\u5230\u7a97\u53e3\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7\u53f7","text_title":"\u5c06\u590d\u5236(CTRL + C)\u7684\u5185\u5bb9\u7c98\u8d34(CTRL + V)\u5230\u7a97\u53e3\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/id_dlg.js
new file mode 100644
index 000000000..f3e05b52c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.paste_dlg',{"word_title":"Gunakan CTRL+V pada keyboard untuk paste.","text_linebreaks":"Keep linebreaks","text_title":"Gunakan CTRL+V pada keyboard untuk paste."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/is_dlg.js
new file mode 100644
index 000000000..cbacd611f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.paste_dlg',{"word_title":"Nota\u00f0u CTRL+V \u00e1 lyklabo\u00f0rinu til a\u00f0 l\u00edma textanum \u00ed ritilinn.","text_linebreaks":"Halda endingu l\u00edna","text_title":"Nota\u00f0u CTRL+V \u00e1 lyklabor\u00f0inu til a\u00f0 l\u00edma textanum \u00ed ritilinn."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/it_dlg.js
new file mode 100644
index 000000000..f1b8dc7e0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.paste_dlg',{"word_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra.","text_linebreaks":"Mantieni interruzioni di riga","text_title":"Premere CTRL+V sulla tastiera per incollare il testo nella finestra."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ja_dlg.js
new file mode 100644
index 000000000..5af598227
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.paste_dlg',{"word_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002","text_linebreaks":"\u6539\u884c\u3092\u4fdd\u6301","text_title":"Ctrl V(\u30ad\u30fc\u30dc\u30fc\u30c9)\u3092\u4f7f\u7528\u3057\u3066\u3001\u30c6\u30ad\u30b9\u30c8\u3092\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ka_dlg.js
new file mode 100644
index 000000000..dedcfd33b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.paste_dlg',{"word_title":"\u0418\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e9\u10d0\u10e1\u10d0\u10e1\u10db\u10d4\u10da\u10d0\u10d3 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d7 \u10d9\u10da\u10d0\u10d5\u10d8\u10d0\u10e2\u10e3\u10e0\u10e3\u10da\u10d8 \u10d9\u10dd\u10db\u10d1\u10d8\u10dc\u10d0\u10ea\u10d8\u10d0 CTRL+V.","text_linebreaks":"\u10d2\u10d0\u10d3\u10d0\u10e2\u10d0\u10dc\u10d8\u10da\u10d8 \u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10dc\u10d0\u10ee\u10d5\u10d0","text_title":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e9\u10d0\u10e1\u10d0\u10e1\u10db\u10d4\u10da\u10d0\u10d3 \u10d2\u10d0\u10db\u10dd\u10d8\u10e7\u10d4\u10dc\u10d4\u10d7 \u10d9\u10da\u10d0\u10d5\u10d8\u10d0\u10e2\u10e3\u10e0\u10e3\u10da\u10d8 \u10d9\u10dd\u10db\u10d1\u10d8\u10dc\u10d0\u10ea\u10d8\u10d0 CTRL+V."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/kl_dlg.js
new file mode 100644
index 000000000..652ef1c21
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/km_dlg.js
new file mode 100644
index 000000000..2c5e48c77
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.paste_dlg',{"word_title":"\u1794\u17d2\u179a\u17be CTRL V \u1793\u17c5\u179b\u17be\u1780\u17d2\u178a\u17b6\u179a\u1785\u17bb\u1785\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u1791\u17c5\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1793\u17c1\u17c7\u00a0\u17d4","text_linebreaks":"\u179a\u1780\u17d2\u179f\u17b6\u179f\u1789\u17d2\u1789\u17b6\u1785\u17bb\u17c7\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb","text_title":"\u1794\u17d2\u179a\u17be CTRL V \u1793\u17c5\u179b\u17be\u1780\u17d2\u178a\u17b6\u179a\u1785\u17bb\u1785\u178a\u17be\u1798\u17d2\u1794\u17b8\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u1791\u17c5\u1793\u17b9\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1793\u17c1\u17c7\u00a0\u17d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ko_dlg.js
new file mode 100644
index 000000000..3fb6c9762
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.paste_dlg',{"word_title":"\ud0a4\ubcf4\ub4dc\uc5d0\uc11c Ctrl-V\ub97c \uc0ac\uc6a9\ud558\uba74 \ud14d\uc2a4\ud2b8\ub97c \ucc3d\uc5d0 \ubd99\uc5ec\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","text_linebreaks":"\uc904\ubc14\uafc8 \uc720\uc9c0","text_title":"\ud0a4\ubcf4\ub4dc\uc5d0\uc11c Ctrl-V\ub97c \uc0ac\uc6a9\ud558\uba74 \ud14d\uc2a4\ud2b8\ub97c \ucc3d\uc5d0 \ubd99\uc5ec\ub123\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/kz_dlg.js
new file mode 100644
index 000000000..b4c7f8206
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lb_dlg.js
new file mode 100644
index 000000000..66955c018
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.paste_dlg',{"word_title":"Dr\u00e9ckt op \u00c4rer Tastatur Ctrl+V, um den Text an ze f\u00fcgen.","text_linebreaks":"Zeilen\u00ebmbr\u00ebch b\u00e4ibehalen","text_title":"Dr\u00e9ckt op \u00c4rer Tastatur Ctrl+V, fir den Text an ze f\u00fcgen."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lt_dlg.js
new file mode 100644
index 000000000..7cf928dab
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.paste_dlg',{"word_title":"Naudokite CTRL+V tekstui \u012fd\u0117ti \u012f \u0161\u012f lang\u0105.","text_linebreaks":"Palikti eilu\u010di\u0173 l\u016b\u017eius","text_title":"Naudokite CTRL+V tekstui \u012fd\u0117ti \u012f \u0161\u012f lang\u0105."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lv_dlg.js
new file mode 100644
index 000000000..ae02a1864
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.paste_dlg',{"word_title":"Izmantojiet CTRL+V uz j\u016bsu tastat\u016bras lai iekop\u0113t tekstu log\u0101.","text_linebreaks":"Sagl\u0101b\u0101t l\u012bniju sadal\u012bt\u0101jus","text_title":"Izmantojiet CTRL+V uz j\u016bsu tastat\u016bras lai iekop\u0113t tekstu log\u0101."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/mk_dlg.js
new file mode 100644
index 000000000..bebf74f7b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.paste_dlg',{"word_title":"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 CTRL V \u043e\u0434 \u0442\u0430\u0441\u0442\u0430\u0442\u0443\u0440\u0430\u0442\u0430 \u0437\u0430 \u0434\u0430 \u0433\u043e \u0437\u0430\u043b\u0435\u043f\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u0432\u043e \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442.","text_linebreaks":"\u0417\u0430\u0434\u0440\u0436\u0438 \u0433\u0438 \u043f\u0430\u0443\u0437\u0438\u0442\u0435 \u043f\u043e\u043c\u0435\u0453\u0443 \u043b\u0438\u043d\u0438\u0438\u0442\u0435","text_title":"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 CTRL V \u043e\u0434 \u0442\u0430\u0441\u0442\u0430\u0442\u0443\u0440\u0430\u0442\u0430 \u0437\u0430 \u0434\u0430 \u0433\u043e \u0437\u0430\u043b\u0435\u043f\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u0442 \u0432\u043e \u043f\u0440\u043e\u0437\u043e\u0440\u043e\u0442."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ml_dlg.js
new file mode 100644
index 000000000..3bee52560
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/mn_dlg.js
new file mode 100644
index 000000000..1f9b96ee5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.paste_dlg',{"word_title":"\u0422\u0430 \u0431\u0438\u0447\u0432\u044d\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u0432\u044d\u043b Ctrl+V \u0434\u044d\u044d\u0440 \u0434\u0430\u0440\u043d\u0430 \u0443\u0443.","text_linebreaks":"\u041c\u04e9\u0440 \u0442\u0430\u0441\u043b\u0430\u043b\u0442\u044b\u0433 \u04af\u043b\u0434\u044d\u044d\u043d\u044d","text_title":"\u0422\u0430 \u0431\u0438\u0447\u0432\u044d\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445\u044b\u0433 \u0445\u04af\u0441\u0432\u044d\u043b Ctrl+V \u0434\u044d\u044d\u0440 \u0434\u0430\u0440\u043d\u0430 \u0443\u0443."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ms_dlg.js
new file mode 100644
index 000000000..547d849d0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.paste_dlg',{"word_title":"Guna CTRL+V pada papan kekunci anda untuk teks ke dalam tetingkap.","text_linebreaks":"Biarkan garisan pemisah","text_title":"Guna CTRL+V pada papan kekunci anda untuk Tempel teks ke dalam tetingkap."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/my_dlg.js
new file mode 100644
index 000000000..b5938b045
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.paste_dlg',{"word_title":"\u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1011\u1032\u101e\u102d\u102f\u1037 \u1005\u102c\u101e\u102c\u1038\u1000\u102d\u102f \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u101b\u1014\u103a \u101e\u1004\u103a\u1037 \u1000\u102e\u1038\u1018\u102f\u1010\u103a\u101c\u1000\u103a\u1000\u103d\u1000\u103a\u101b\u103e\u102d CTRL V \u1000\u102d\u102f \u101e\u1036\u102f\u1038\u1015\u102b","text_linebreaks":"\u1005\u102c\u1031\u103c\u1000\u102c\u1004\u103a\u1038\u1001\u103d\u1032\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1001\u103d\u1032\u101c\u103b\u103e\u1000\u103a\u1011\u102c\u1038\u1015\u102b","text_title":"\u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1011\u1032\u101e\u102d\u102f\u1037 \u1005\u102c\u101e\u102c\u1038\u1000\u102d\u102f \u1000\u1030\u1038\u103c\u1016\u100a\u103a\u1037\u101b\u1014\u103a \u101e\u1004\u103a\u1037 \u1000\u102e\u1038\u1018\u102f\u1010\u103a\u101c\u1000\u103a\u1000\u103d\u1000\u103a\u101b\u103e\u102d CTRL V \u1000\u102d\u102f \u101e\u1036\u102f\u1038\u1015\u102b"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nb_dlg.js
new file mode 100644
index 000000000..bfb2266f8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.paste_dlg',{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vinduet.","text_linebreaks":"Behold tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vinduet."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nl_dlg.js
new file mode 100644
index 000000000..bac8ac046
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.paste_dlg',{"word_title":"Gebruik Ctrl+V om tekst in het venster te plakken.","text_linebreaks":"Regelafbreking bewaren","text_title":"Gebruik Ctrl+V om tekst in het venster te plakken."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nn_dlg.js
new file mode 100644
index 000000000..be58ae572
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.paste_dlg',{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vindauget.","text_linebreaks":"Behald tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn i dette vindauget."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/no_dlg.js
new file mode 100644
index 000000000..3f8e333d0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.paste_dlg',{"word_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn teksten i dette vinduet.","text_linebreaks":"Behold tekstbryting","text_title":"Bruk CTRL+V p\u00e5 tastaturet for \u00e5 lime inn teksten i dette vinduet."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/pl_dlg.js
new file mode 100644
index 000000000..54fd41c37
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.paste_dlg',{"word_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna.","text_linebreaks":"Zachowaj ko\u0144ce linii.","text_title":"U\u017cyj CTRL+V na swojej klawiaturze \u017ceby wklei\u0107 tekst do okna."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ps_dlg.js
new file mode 100644
index 000000000..a2a054660
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/pt_dlg.js
new file mode 100644
index 000000000..c9601cf94
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.paste_dlg',{"word_title":"Use CTRL+V para colar o texto na janela.","text_linebreaks":"Manter quebras de linha","text_title":"Use CTRL+V para colar o texto na janela."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ro_dlg.js
new file mode 100644
index 000000000..897bc01fc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.paste_dlg',{"word_title":"Folose\u0219te CTRL V pentru a lipi \u00een aceast\u0103 zon\u0103.","text_linebreaks":"P\u0103streaz\u0103 separatoarele de linii.","text_title":"Folose\u0219te CTRL V pentru a lipi \u00een aceast\u0103 zon\u0103."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ru_dlg.js
new file mode 100644
index 000000000..b360b075d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.paste_dlg',{"word_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e.","text_linebreaks":"\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u0441\u0442\u0440\u043e\u043a","text_title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432 \u043e\u043a\u043d\u043e."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sc_dlg.js
new file mode 100644
index 000000000..851950f22
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.paste_dlg',{"word_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002 ","text_linebreaks":"\u4fdd\u7559\u6362\u884c\u7b26\u53f7","text_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002 "}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/se_dlg.js
new file mode 100644
index 000000000..b5f03733f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.paste_dlg',{"word_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster.","text_linebreaks":"Spara radbrytningar","text_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/si_dlg.js
new file mode 100644
index 000000000..c72fcae8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sk_dlg.js
new file mode 100644
index 000000000..a3745f300
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.paste_dlg',{"word_title":"Pou\u017eite CTRL+V pre vlo\u017eenie textu do okna.","text_linebreaks":"Zachova\u0165 zalamovanie riadkov","text_title":"Pou\u017eite CTRL+V pre vlo\u017eenie textu do okna."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sl_dlg.js
new file mode 100644
index 000000000..eca8bd1d3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.paste_dlg',{"word_title":"Uporabite kombinacijo tipk CTRL+V, da prilepite vsebino v okno.","text_linebreaks":"Obdr\u017ei prelome vrstic","text_title":"Uporabite kombinacijo tipk CTRL+V, da prilepite vsebino v okno."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sq_dlg.js
new file mode 100644
index 000000000..741461421
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.paste_dlg',{"word_title":"P\u00ebrdor CTRL+V p\u00ebr t\u00eb ngjitur tekstin.","text_linebreaks":"Ruaj linjat e reja","text_title":"P\u00ebrdor CTRL+V p\u00ebr t\u00eb ngjitur tekstin."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sr_dlg.js
new file mode 100644
index 000000000..51dc0ddad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.paste_dlg',{"word_title":"Koristite CTRL V na tastaturi da zalepite tekst u prozor.","text_linebreaks":"Zadr\u017ei prelome linija","text_title":"Koristite CTRL+V na tastaturi da zalepite tekst u prozor."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sv_dlg.js
new file mode 100644
index 000000000..1c99e2b1b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.paste_dlg',{"word_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster.","text_linebreaks":"Spara radbrytningar","text_title":"Anv\u00e4nd ctrl-v p\u00e5 ditt tangentbord f\u00f6r att klistra in i detta f\u00f6nster."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sy_dlg.js
new file mode 100644
index 000000000..9cbe5d1bb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.paste_dlg',{"word_title":"Use Ctrl+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep Linebreaks","text_title":"Use Ctrl+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ta_dlg.js
new file mode 100644
index 000000000..03eb3e075
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/te_dlg.js
new file mode 100644
index 000000000..768b6b5ca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/th_dlg.js
new file mode 100644
index 000000000..9616c4102
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tn_dlg.js
new file mode 100644
index 000000000..ba07557c3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tr_dlg.js
new file mode 100644
index 000000000..16864b474
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.paste_dlg',{"word_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n.","text_linebreaks":"Sat\u0131r kesmelerini tut","text_title":"Pencereye metin yap\u0131\u015ft\u0131rmak i\u00e7in klavyeden CTRL+V i kullan\u0131n."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tt_dlg.js
new file mode 100644
index 000000000..fec28fed7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.paste_dlg',{"word_title":"\u5c07\u8907\u88fd(CTRL + C)\u7684\u5167\u5bb9\u8cbc\u4e0a(CTRL + V)\u5230\u8996\u7a97\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u865f\u865f","text_title":"\u5c07\u8907\u88fd(CTRL + C)\u7684\u5167\u5bb9\u8cbc\u4e0a(CTRL + V)\u5230\u8996\u7a97\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tw_dlg.js
new file mode 100644
index 000000000..5022d8d8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.paste_dlg',{"word_title":"\u7528 Ctrl+V \u5c07\u5167\u5bb9\u8cbc\u4e0a\u3002","text_linebreaks":"\u4fdd\u7559\u63db\u884c\u7b26\u865f","text_title":"\u7528 Ctrl+V \u5c07\u5167\u5bb9\u8cbc\u4e0a\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/uk_dlg.js
new file mode 100644
index 000000000..b62328956
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.paste_dlg',{"word_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e.","text_linebreaks":"\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438 \u0440\u044f\u0434\u043a\u0456\u0432","text_title":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 CTRL+V \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443 \u0443 \u0432\u0456\u043a\u043d\u043e."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ur_dlg.js
new file mode 100644
index 000000000..23f2aec55
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.paste_dlg',{"word_title":"Use CTRL+V on your keyboard to paste the text into the window.","text_linebreaks":"Keep linebreaks","text_title":"Use CTRL+V on your keyboard to paste the text into the window."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/vi_dlg.js
new file mode 100644
index 000000000..25694d9c1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.paste_dlg',{"word_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5.","text_linebreaks":"Gi\u1eef ng\u1eaft d\u00f2ng","text_title":"S\u1eed d\u1ee5ng CTRL+V tr\u00ean b\u00e0n ph\u00edm \u0111\u1ec3 d\u00e1n v\u0103n b\u1ea3n v\u00e0o c\u1eeda s\u1ed5."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..4abd1a96c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.paste_dlg',{"word_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002","text_linebreaks":"\u4fdd\u7559\u65ad\u884c","text_title":"\u4f7f\u7528CTRL V\u7c98\u8d34\u6587\u672c\u5230\u7a97\u53e3\u4e2d\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..ea2f214ee
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.paste_dlg',{"word_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8907\u88fd) \u8cc7\u6599\u5230\u756b\u9762\u4e0a","text_linebreaks":"\u4fdd\u7559\u6587\u7ae0\u4e2d\u7684\u63db\u884c","text_title":"\u8acb\u6309\u9375\u76e4\u4e0a\u7684 Ctrl C (\u8cbc\u4e0a) \u8cc7\u6599\u5230\u756b\u9762\u4e0a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh_dlg.js
new file mode 100644
index 000000000..9755a5773
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.paste_dlg',{"word_title":"\u8acb\u4f7f\u7528 CTRL V \u5c07\u5167\u5bb9\u8cbc\u4e0a.","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u865f","text_title":"\u8acb\u4f7f\u7528 CTRL V \u5c07\u5167\u5bb9\u8cbc\u4e0a."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zu_dlg.js
new file mode 100644
index 000000000..456781a08
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/paste/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.paste_dlg',{"word_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002","text_linebreaks":"\u4fdd\u7559\u5206\u884c\u7b26\u53f7\u53f7","text_title":"\u5728\u952e\u76d8\u4e0a\u540c\u65f6\u6309\u4e0bCTRL\u548cV\u952e\uff0c\u4ee5\u8d34\u4e0a\u6587\u5b57\u5230\u6b64\u89c6\u7a97\u3002"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ar_dlg.js
new file mode 100644
index 000000000..4e6674b7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.searchreplace_dlg',{findwhat:"\u0627\u0628\u062d\u062b \u0639\u0646",replacewith:"\u0627\u0633\u062a\u0628\u062f\u0644 \u0628\u0640",direction:"\u0627\u0644\u0627\u062a\u062c\u0627\u0647",up:"\u0644\u0623\u0639\u0644\u0649",down:"\u0644\u0623\u0633\u0641\u0644",mcase:"\u062d\u0627\u0644\u0647 \u0627\u0644\u062a\u0637\u0627\u0628\u0642",findnext:"\u0627\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u062a\u0627\u0644\u0649",allreplaced:"\u062a\u0645\u062a \u0639\u0645\u0644\u064a\u0647 \u0627\u0644\u0627\u0633\u062a\u0628\u062f\u0627\u0644","searchnext_desc":"\u0628\u062d\u062b \u0645\u0631\u0647 \u0627\u062e\u0631\u0649",notfound:"\u0644\u0642\u062f \u0627\u0646\u062a\u0647\u0649 \u0627\u0644\u0628\u062d\u062b \u0648\u0644\u0645 \u0646\u0639\u062b\u0631 \u0639\u0644\u0649 \u0627\u0649 \u0646\u062a\u064a\u062c\u0647","search_title":"\u0628\u062d\u062b","replace_title":"\u0628\u062d\u062b/\u0627\u0633\u062a\u0628\u062f\u0627\u0644",replaceall:"\u0627\u0633\u062a\u0628\u062f\u0627\u0644 \u0627\u0644\u0643\u0644",replace:"\u0627\u0633\u062a\u0628\u062f\u0627\u0644"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/az_dlg.js
new file mode 100644
index 000000000..d9085f847
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.searchreplace_dlg',{findwhat:"N\u0259 axtar\u0131ls\u0131n",replacewith:"N\u0259y\u0259 d\u0259yi\u015filsin",direction:"\u0130stiqam\u0259tl\u0259ndirm\u0259",up:"Yuxar\u0131",down:"A\u015fa\u011f\u0131",mcase:"Registr\u0131 n\u0259z\u0259r\u0259 al",findnext:"Sonrak\u0131n\u0131 axtar",allreplaced:"B\u00fct\u00fcn qar\u015f\u0131la\u015fm\u0131\u015f s\u0259trl\u0259r d\u0259yi\u015fdirildi.","searchnext_desc":"S\u00f6zl\u0259ri axtar",notfound:"Axtar\u0131\u015f bitdi. S\u0259tr tap\u0131lmad\u0131.","search_title":"Axtar","replace_title":"Axtar/D\u0259yi\u015f",replaceall:"Ham\u0131s\u0131n\u0131 d\u0259yi\u015f",replace:"D\u0259yi\u015f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/be_dlg.js
new file mode 100644
index 000000000..a7d9635c2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.searchreplace_dlg',{findwhat:"\u0428\u0442\u043e \u0437\u043d\u0430\u0439\u0441\u0446\u0456",replacewith:"\u0417\u0430\u043c\u044f\u043d\u0456\u0446\u044c \u043d\u0430",direction:"\u041a\u0456\u0440\u0443\u043d\u0430\u043a",up:"\u0423\u0432\u0435\u0440\u0445",down:"\u0423\u043d\u0456\u0437",mcase:"\u0423\u043b\u0456\u0447\u0432\u0430\u0446\u044c \u0440\u044d\u0433\u0456\u0441\u0442\u0440",findnext:"\u0417\u043d\u0430\u0439\u0441\u0446\u0456 \u0434\u0430\u043b\u0435\u0439",allreplaced:"\u0423\u0441\u0435 \u0441\u0443\u0441\u0442\u0440\u0430\u043a\u0430\u0435\u043c\u044b\u044f \u0440\u0430\u0434\u043a\u0456 \u0431\u044b\u043b\u0456 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b\u044f.","searchnext_desc":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456 \u0437\u043d\u043e\u045e",notfound:"\u041f\u043e\u0448\u0443\u043a \u0441\u043a\u043e\u043d\u0447\u0430\u043d\u044b. \u0420\u0430\u0434\u043e\u043a \u043d\u0435 \u0437\u043d\u043e\u0439\u0434\u0437\u0435\u043d\u044b.","search_title":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456","replace_title":"\u0417\u043d\u0430\u0439\u0441\u0446\u0456/\u0417\u0430\u043c\u044f\u043d\u0456\u0446\u044c",replaceall:"\u0417\u0430\u043c\u044f\u043d\u0456\u0446\u044c \u0443\u0441\u0451",replace:"\u0417\u0430\u043c\u044f\u043d\u0456\u0446\u044c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bg_dlg.js
new file mode 100644
index 000000000..6560e0f87
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.searchreplace_dlg',{findwhat:"\u0422\u044a\u0440\u0441\u0438",replacewith:"\u0417\u0430\u043c\u0435\u0441\u0442\u0438 \u0441",direction:"\u041f\u043e\u0441\u043e\u043a\u0430",up:"\u041d\u0430\u0433\u043e\u0440\u0435",down:"\u041d\u0430\u0434\u043e\u043b\u0443",mcase:"\u0421\u044a\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u044a\u0440\u0430",findnext:"\u0422\u044a\u0440\u0441\u0438 \u0441\u043b\u0435\u0434\u0432\u0430\u0449\u0438",allreplaced:"\u0412\u0441\u0438\u0447\u043a\u0438 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438 \u0434\u0443\u043c\u0438 \u0431\u044f\u0445\u0430 \u0437\u0430\u043c\u0435\u0441\u0442\u0435\u043d\u0438.","searchnext_desc":"\u0422\u044a\u0440\u0441\u0438 \u043e\u0442\u043d\u043e\u0432\u043e",notfound:"\u0422\u044a\u0440\u0441\u0435\u043d\u0435\u0442\u043e \u0437\u0430\u0432\u044a\u0440\u0448\u0438. \u0422\u044a\u0440\u0441\u0435\u043d\u0438\u0442\u0435 \u0434\u0443\u043c\u0438 \u043d\u0435 \u0431\u044f\u0445\u0430 \u043e\u0442\u043a\u0440\u0438\u0442\u0438.","search_title":"\u0422\u044a\u0440\u0441\u0438","replace_title":"\u0422\u044a\u0440\u0441\u0438/\u0417\u0430\u043c\u0435\u0441\u0442\u0438",replaceall:"\u0417\u0430\u043c\u0435\u0441\u0442\u0438 \u0432\u0441\u0438\u0447\u043a\u0438",replace:"\u0417\u0430\u043c\u0435\u0441\u0442\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bn_dlg.js
new file mode 100644
index 000000000..607e623c4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/br_dlg.js
new file mode 100644
index 000000000..9313b8346
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.searchreplace_dlg',{findwhat:"Localizar",replacewith:"Substituir com",direction:"Dire\u00e7\u00e3o",up:"Acima",down:"Abaixo",mcase:"Diferenciar mai\u00fasculas/min\u00fasculas",findnext:"Localizar pr\u00f3ximo",allreplaced:"Todas as substitui\u00e7\u00f5es foram efetuadas.","searchnext_desc":"Localizar novamente",notfound:"A pesquisa foi conclu\u00edda sem resultados.","search_title":"Localizar","replace_title":"Localizar/substituir",replaceall:"Substituir todos",replace:"Substituir"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bs_dlg.js
new file mode 100644
index 000000000..358f15c87
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.searchreplace_dlg',{findwhat:"Prona\u0111i tekst",replacewith:"Zamijeni sa",direction:"Smjer",up:"Gore",down:"Dolje",mcase:"Match case",findnext:"Prona\u0111i sljede\u0107e",allreplaced:"Sva pojavljivanja tra\u017eenog teksta su zamijenjena.","searchnext_desc":"Prona\u0111i opet",notfound:"Pretra\u017eivanje je zavr\u0161eno. Tra\u017eeni tekst nije prona\u0111en.","search_title":"Prona\u0111i","replace_title":"Prona\u0111i/Zamijeni",replaceall:"Zamijeni sve",replace:"Zamijeni"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ca_dlg.js
new file mode 100644
index 000000000..da37295f3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.searchreplace_dlg',{findwhat:"Cerca",replacewith:"Reempla\u00e7a amb",direction:"Direcci\u00f3",up:"Amunt",down:"Avall",mcase:"Distingeix maj\u00fascules/min\u00fascules",findnext:"Seg\u00fcent",allreplaced:"S\'han reempla\u00e7at totes les ocurr\u00e8ncies de la cadena cercada.","searchnext_desc":"Cerca de nou",notfound:"S\'ha completat la cerca. No s\'ha trobat la cadena cercada.","search_title":"Cerca","replace_title":"Cerca/Reempla\u00e7a",replaceall:"Reempla\u00e7a-ho tot",replace:"Reempla\u00e7a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ch_dlg.js
new file mode 100644
index 000000000..112f4e9ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.searchreplace_dlg',{findwhat:"\u641c\u5bfb\u76ee\u6807",replacewith:"\u53d6\u4ee3\u4e3a",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u533a\u5206\u5927\u5c0f\u5199",findnext:"\u5bfb\u627e\u4e0b\u4e00\u4e2a",allreplaced:"\u6240\u6709\u7b26\u5408\u7684\u5b57\u7b26\u4e32\u5747\u5df2\u53d6\u4ee3\u3002","searchnext_desc":"\u7ee7\u7eed\u641c\u5bfb",notfound:"\u641c\u5bfb\u5b8c\u6bd5\uff0c\u6ca1\u6709\u627e\u5230\u7b26\u5408\u7684\u5b57\u7b26\u4e32\u3002","search_title":"\u641c\u5bfb","replace_title":"\u641c\u5bfb/\u53d6\u4ee3",replaceall:"\u5168\u90e8\u53d6\u4ee3",replace:"\u53d6\u4ee3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cn_dlg.js
new file mode 100644
index 000000000..4513a8798
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.searchreplace_dlg',{findwhat:"\u67e5\u627e\u76ee\u6807",replacewith:"\u66ff\u6362",direction:"\u67e5\u627e\u65b9\u5411",up:"\u5411\u4e0a\u67e5\u627e",down:"\u5411\u4e0b\u67e5\u627e",mcase:"\u533a\u5206\u5927\u5c0f\u5199",findnext:"\u67e5\u627e\u4e0b\u4e00\u4e2a",allreplaced:"\u6240\u6709\u7b26\u5408\u7684\u5b57\u7b26\u5c06\u4f1a\u88ab\u66ff\u6362","searchnext_desc":"\u91cd\u65b0\u67e5\u627e",notfound:"\u67e5\u627e\u5b8c\u6bd5\uff0c\u6ca1\u6709\u627e\u5230\u4efb\u4f55\u7b26\u5408\u7684\u5b57\u7b26","search_title":"\u67e5\u627e","replace_title":"\u67e5\u627e/\u66ff\u6362",replaceall:"\u66ff\u6362\u5168\u90e8",replace:"\u66ff\u6362"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cs_dlg.js
new file mode 100644
index 000000000..81654085b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.searchreplace_dlg',{findwhat:"Co hledat",replacewith:"\u010c\u00edm nahradit",direction:"Sm\u011br",up:"Nahoru",down:"Dol\u016f",mcase:"Rozli\u0161ovat velikost",findnext:"Naj\u00edt dal\u0161\u00ed",allreplaced:"V\u0161echny v\u00fdskyty byly nahrazeny.","searchnext_desc":"Naj\u00edt dal\u0161\u00ed",notfound:"Hled\u00e1n\u00ed bylo dokon\u010deno. Hledan\u00fd text nebyl nalezen.","search_title":"Naj\u00edt","replace_title":"Naj\u00edt/nahradit",replaceall:"Nahradit v\u0161e",replace:"Nahradit"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cy_dlg.js
new file mode 100644
index 000000000..204824f55
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.searchreplace_dlg',{findwhat:"Canfod beth",replacewith:"Adnewid gyda",direction:"Cyfeiriad",up:"I fyny",down:"I lawr",mcase:"Cydweddu priflythrennedd",findnext:"Canfod nesaf",allreplaced:"Amnewidwyd pob digwyddiad o\'r llinyn chwiliad.","searchnext_desc":"Canfod eto",notfound:"Mae\'r chwiliad wedi cwblhau. Methu canfod y llinyn chwiliad.","search_title":"Canfod","replace_title":"Canfod/Amnewid",replaceall:"Amnewid pob un",replace:"Amnewid"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/da_dlg.js
new file mode 100644
index 000000000..b551cea04
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.searchreplace_dlg',{findwhat:"S\u00f8g efter",replacewith:"Erstat med",direction:"Retning",up:"Op",down:"Ned",mcase:"Forskel p\u00e5 store og sm\u00e5 bogstaver",findnext:"Find n\u00e6ste",allreplaced:"Alle forekomster af s\u00f8gestrengen er erstattet.","searchnext_desc":"S\u00f8g igen",notfound:"S\u00f8gningen gav intet resultat.","search_title":"S\u00f8g","replace_title":"S\u00f8g / erstat",replaceall:"Erstat alle",replace:"Erstat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/de_dlg.js
new file mode 100644
index 000000000..7c40acd9e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.searchreplace_dlg',{findwhat:"Zu suchender Text",replacewith:"Ersetzen durch",direction:"Suchrichtung",up:"Aufw\u00e4rts",down:"Abw\u00e4rts",mcase:"Gro\u00df-/Kleinschreibung beachten",findnext:"Weitersuchen",allreplaced:"Alle Vorkommen der Zeichenkette wurden ersetzt.","searchnext_desc":"Weitersuchen",notfound:"Die Suche ist am Ende angelangt. Die Zeichenkette konnte nicht gefunden werden.","search_title":"Suchen","replace_title":"Suchen/Ersetzen",replaceall:"Alle ersetzen",replace:"Ersetzen"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/dv_dlg.js
new file mode 100644
index 000000000..481f124dc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/el_dlg.js
new file mode 100644
index 000000000..10e564dc8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.searchreplace_dlg',{findwhat:"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03c4\u03bf\u03c5",replacewith:"\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bc\u03b5",direction:"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7",up:"\u03a0\u03ac\u03bd\u03c9",down:"\u039a\u03ac\u03c4\u03c9",mcase:"\u03a4\u03b1\u03af\u03c1\u03b9\u03b1\u03c3\u03bc\u03b1 \u03ba\u03b5\u03c6\u03b1\u03bb\u03b1\u03af\u03b1/\u03bc\u03b9\u03ba\u03c1\u03ac",findnext:"\u0392\u03c1\u03b5\u03c2 \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf",allreplaced:"\u038c\u03bb\u03b5\u03c2 \u03bf\u03b9 \u03b5\u03bc\u03c6\u03b1\u03bd\u03af\u03c3\u03b5\u03b9\u03c2 \u03c4\u03bf\u03c5 \u03b6\u03b7\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf\u03c5 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ac\u03b8\u03b7\u03ba\u03b1\u03bd.","searchnext_desc":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7 \u03be\u03b1\u03bd\u03ac",notfound:"\u0397 \u03b1\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 \u03c4\u03b5\u03bb\u03b5\u03af\u03c9\u03c3\u03b5. \u03a4\u03bf \u03b6\u03b7\u03c4\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03b4\u03b5\u03bd \u03b2\u03c1\u03ad\u03b8\u03b7\u03ba\u03b5.","search_title":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7","replace_title":"\u0395\u03cd\u03c1\u03b5\u03c3\u03b7/\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7",replaceall:"\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4. \u03cc\u03bb\u03c9\u03bd",replace:"\u0391\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/en_dlg.js
new file mode 100644
index 000000000..8a6590097
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/eo_dlg.js
new file mode 100644
index 000000000..3cd418510
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.searchreplace_dlg',{findwhat:"Ser\u0109i",replacewith:"Anstata\u016digi per",direction:"Direkto",up:"Supren",down:"Suben",mcase:"Usklecodistinga",findnext:"Ser\u0109i sekvan",allreplaced:"\u0108iuj anstata\u016digoj estas faritaj.","searchnext_desc":"Ser\u0109i denove",notfound:"La ser\u0109o fini\u011dis sen rezultoj.","search_title":"Ser\u0109i","replace_title":"Ser\u0109i/anstata\u016digi",replaceall:"Anstata\u016digi \u0109iujn",replace:"Anstata\u016digi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/es_dlg.js
new file mode 100644
index 000000000..62e178de6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.searchreplace_dlg',{findwhat:"Qu\u00e9 buscar",replacewith:"Reemplazar por",direction:"Direcci\u00f3n",up:"Arriba",down:"Abajo",mcase:"Min\u00fas./May\u00fas.",findnext:"Buscar siguiente",allreplaced:"Se ha reemplazado el texto.","searchnext_desc":"Buscar de nuevo",notfound:"La b\u00fasqueda se ha completado. No se encontr\u00f3 el texto introducido.","search_title":"Buscar","replace_title":"Buscar/Reemplazar",replaceall:"Reemplazar todo",replace:"Reemplazar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/et_dlg.js
new file mode 100644
index 000000000..ef567f7bd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.searchreplace_dlg',{findwhat:"Otsi mida",replacewith:"Asenda millega",direction:"Suund",up:"\u00dcles",down:"Alla",mcase:"Vasta suurusele",findnext:"Otsi j\u00e4rgmine",allreplaced:"K\u00f5ik otsis\u00f5na ilmingud on asendatud.","searchnext_desc":"Otsi uuesti",notfound:"Otsing on l\u00f5petatud. Otsis\u00f5na ei leitud.","search_title":"Otsi","replace_title":"Otsi/Asenda",replaceall:"Asenda k\u00f5ik",replace:"Asenda"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/eu_dlg.js
new file mode 100644
index 000000000..602cfa8bc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.searchreplace_dlg',{findwhat:"Zer bilatu",replacewith:"Zerekin ordezkatu",direction:"Norabidea",up:"Gorantz",down:"Beherantz",mcase:"Maiuskulak eta minuskulak kontuan hartu",findnext:"Hurrengoa",allreplaced:"Bilatutakoaren agerpen guztiak ordezkatu dira.","searchnext_desc":"Berriz bilatu",notfound:"Bilaketa bukatu da. Bilatutakoa ez da aurkitu.","search_title":"Bilatu","replace_title":"Bilatu/Ordezkatu",replaceall:"Ordezkatu guztiak",replace:"Ordezkatu"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fa_dlg.js
new file mode 100644
index 000000000..d8c5d4b72
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.searchreplace_dlg',{findwhat:"\u062c\u0633\u062a\u062c\u0648\u06cc",replacewith:"\u062a\u0639\u0648\u06cc\u0636 \u0628\u0627",direction:"\u062c\u0647\u062a",up:"\u0628\u0627\u0644\u0627",down:"\u067e\u0627\u06cc\u06cc\u0646",mcase:"\u0647\u0645\u0633\u0627\u0646 \u0628\u0648\u062f\u0646 \u062d\u0631\u0648\u0641",findnext:"\u062c\u0633\u062a\u062c\u0648\u06cc \u0628\u0639\u062f\u06cc",allreplaced:"\u062a\u0645\u0627\u0645\u06cc \u06a9\u0644\u0645\u0627\u062a \u06cc\u0627\u0641\u062a \u0634\u062f\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u0627\u0641\u062a\u0646\u062f","searchnext_desc":"\u062c\u0633\u062a\u062c\u0648\u06cc \u0645\u062c\u062f\u062f",notfound:"\u062c\u0633\u062a\u062c\u0648 \u06a9\u0627\u0645\u0644 \u0634\u062f. \u06a9\u0644\u0645\u0647 \u062c\u0633\u062a\u062c\u0648 \u0634\u062f\u0647 \u06cc\u0627\u0641\u062a \u0646\u0634\u062f","search_title":"\u062c\u0633\u062a\u062c\u0648","replace_title":"\u062c\u0633\u062a\u062c\u0648/\u062a\u0639\u0648\u06cc\u0636",replaceall:"\u062a\u0639\u0648\u06cc\u0636 \u0647\u0645\u0647",replace:"\u062a\u0639\u0648\u06cc\u0636"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fi_dlg.js
new file mode 100644
index 000000000..c2617c337
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.searchreplace_dlg',{findwhat:"Etsit\u00e4\u00e4n",replacewith:"Korvataan",direction:"Suunta",up:"Yl\u00f6s",down:"Alas",mcase:"Huomioi isot ja pienet kirjaimet",findnext:"Etsi seuraavaa",allreplaced:"Kaikki l\u00f6ydetyt merkkijonot korvattiin.","searchnext_desc":"Etsi uudestaan",notfound:"Haku on valmis. Haettua teksti\u00e4 ei l\u00f6ytynyt.","search_title":"Haku","replace_title":"Etsi ja korvaa",replaceall:"Korvaa kaikki",replace:"Korvaa"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fr_dlg.js
new file mode 100644
index 000000000..707b5c2a9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.searchreplace_dlg',{findwhat:"Rechercher ceci",replacewith:"Remplacer par",direction:"Direction",up:"Vers le haut",down:"Vers le bas",mcase:"Sensible \u00e0 la casse",findnext:"Rechercher le suivant",allreplaced:"Toutes les occurrences de la cha\u00eene recherch\u00e9e ont \u00e9t\u00e9 remplac\u00e9es.","searchnext_desc":"Suivant",notfound:"La recherche est termin\u00e9e. La cha\u00eene recherch\u00e9e n\'a pas \u00e9t\u00e9 trouv\u00e9e.","search_title":"Rechercher","replace_title":"Rechercher / remplacer",replaceall:"Tout remplacer",replace:"Remplacer"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/gl_dlg.js
new file mode 100644
index 000000000..72be08cda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.searchreplace_dlg',{findwhat:"Localizar",replacewith:"Reemplazar por",direction:"Direcci\u00f3n",up:"Arriba",down:"Abaixo",mcase:"Min\u00fas./Mai\u00fas.",findnext:"Buscar seginte",allreplaced:"T\u00f3da-las coincidencias do texto buscado foron reemplazadas.","searchnext_desc":"Buscar outra vez",notfound:"A busca rematou. No se atopou o texto buscado.","search_title":"Buscar","replace_title":"Buscar/Reemplazar",replaceall:"Reemplazar todo",replace:"Reemplazar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/gu_dlg.js
new file mode 100644
index 000000000..153358ee7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/he_dlg.js
new file mode 100644
index 000000000..c5861bbd4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.searchreplace_dlg',{findwhat:"\u05dc\u05d7\u05e4\u05e9 \u05d0\u05ea",replacewith:"\u05dc\u05d4\u05d7\u05dc\u05d9\u05e3 \u05d1",direction:"\u05db\u05d9\u05d5\u05d5\u05df",up:"\u05dc\u05de\u05e2\u05dc\u05d4",down:"\u05dc\u05de\u05d8\u05d4",mcase:"\u05d4\u05ea\u05d0\u05dd \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea",findnext:"\u05d7\u05e4\u05e9 \u05d0\u05ea \u05d4\u05d1\u05d0",allreplaced:"\u05db\u05dc \u05e4\u05e8\u05d9\u05d8\u05d9 \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05d5\u05d7\u05dc\u05e4\u05d5","searchnext_desc":"\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05d1\u05d0",notfound:"\u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05e1\u05ea\u05d9\u05d9\u05dd. \u05e4\u05e8\u05d9\u05d8 \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05dc\u05d0 \u05e0\u05de\u05e6\u05d0.","search_title":"\u05d7\u05d9\u05e4\u05d5\u05e9","replace_title":"\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d5\u05d4\u05d7\u05dc\u05e4\u05d4",replaceall:"\u05d4\u05d7\u05dc\u05e4\u05ea \u05d4\u05db\u05dc",replace:"\u05d4\u05d7\u05dc\u05e4\u05d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hi_dlg.js
new file mode 100644
index 000000000..a65ceb8ae
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hr_dlg.js
new file mode 100644
index 000000000..9dafb4511
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.searchreplace_dlg',{findwhat:"Prona\u0111i tekst",replacewith:"Zamijeni sa",direction:"Smjer",up:"Gore",down:"Dolje",mcase:"Usporedi velika/mala slova",findnext:"Prona\u0111i sljede\u0107e",allreplaced:"Sva pojavljivanja tra\u017eenog teksta su zamijenjena.","searchnext_desc":"Prona\u0111i opet",notfound:"Pretra\u017eivanje je zavr\u0161eno. Tra\u017eeni tekst nije prona\u0111en.","search_title":"Prona\u0111i","replace_title":"Prona\u0111i/Zamijeni",replaceall:"Zamijeni sve",replace:"Zamijeni"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hu_dlg.js
new file mode 100644
index 000000000..4165838c6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.searchreplace_dlg',{findwhat:"Mit keres",replacewith:"Mire cser\u00e9l",direction:"Ir\u00e1ny",up:"Fel",down:"Le",mcase:"Kis- \u00e9s nagybet\u0171k megk\u00fcl\u00f6nb\u00f6ztet\u00e9se",findnext:"K\u00f6vetkez\u0151",allreplaced:"A keresett r\u00e9szsz\u00f6veg minden el\u0151fordul\u00e1sa cser\u00e9lve lett.","searchnext_desc":"Keres\u00e9s megint",notfound:"A keres\u00e9s v\u00e9get \u00e9rt. A keresett sz\u00f6vegr\u00e9sz nem tal\u00e1lhat\u00f3.","search_title":"Keres\u00e9s","replace_title":"Keres\u00e9s/Csere",replaceall:"\u00d6sszes cser\u00e9je",replace:"Csere"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hy_dlg.js
new file mode 100644
index 000000000..c2cdadb43
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.searchreplace_dlg',{findwhat:"\u0548\u0580\u0578\u0576\u0565\u056c",replacewith:"\u0553\u0578\u0583\u0578\u056d\u0565\u056c",direction:"\u0548\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576",up:"\u054e\u0565\u0580\u0587 ",down:"\u0546\u0565\u0580\u0584\u0587",mcase:"\u0540\u0561\u0577\u057e\u056b \u0561\u057c\u0576\u0565\u056c \u057c\u0565\u0563\u056b\u057d\u057f\u0578\u0580\u0568",findnext:"\u0533\u057f\u0576\u0565\u056c \u0570\u0561\u057b\u0578\u0580\u0564\u0568",allreplaced:"\u0532\u0578\u056c\u0578\u0580 \u0563\u057f\u0576\u057e\u0561\u056e\u0576\u0565\u0580\u0568 \u0583\u0578\u0583\u0578\u056d\u057e\u0565\u0581\u056b\u0576","searchnext_desc":"\u0546\u0578\u0580\u056b\u0581 \u0578\u0580\u0578\u0576\u0565\u056c",notfound:"\u0548\u0580\u0578\u0576\u0578\u0582\u0574\u0568 \u0561\u057e\u0561\u0580\u057f\u057e\u0565\u0581\u0589 \u0548\u0579\u056b\u0576\u0579 \u0579\u056b \u0563\u057f\u0576\u057e\u0565\u056c","search_title":"\u0548\u0580\u0578\u0576\u0565\u056c","replace_title":"\u0548\u0580\u0578\u0576\u0565\u056c / \u0553\u0578\u0583\u0578\u056d\u0565\u056c",replaceall:"\u0553\u0578\u0583\u0578\u056d\u0565\u056c \u0562\u0561\u056c\u0578\u0580\u0568",replace:"\u0553\u0578\u0583\u0578\u056d\u0565\u056c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ia_dlg.js
new file mode 100644
index 000000000..44e9adafc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.searchreplace_dlg',{findwhat:"\u67e5\u627e\u76ee\u6807",replacewith:"\u66ff\u6362\u4e3a",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u533a\u5206\u5927\u5c0f\u5199",findnext:"\u67e5\u627e\u4e0b\u4e00\u4e2a",allreplaced:"\u5df2\u66ff\u6362\u6240\u6709\u5339\u914d\u7684\u5b57\u7b26\u4e32.","searchnext_desc":"\u518d\u6b21\u67e5\u627e",notfound:"\u67e5\u627e\u5df2\u5b8c\u6210 ! \u627e\u4e0d\u5230\u4efb\u4f55\u76ee\u6807\u3002 ","search_title":"\u67e5\u627e","replace_title":"\u67e5\u627e/\u66ff\u6362",replaceall:"\u5168\u90e8\u66ff\u6362",replace:"\u66ff\u6362"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/id_dlg.js
new file mode 100644
index 000000000..3d6ce654f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.searchreplace_dlg',{findwhat:"Cari apa...",replacewith:"Ganti dengan...",direction:"Arah",up:"Atas",down:"Bawah",mcase:"Match case",findnext:"Cari selanjutnya",allreplaced:"Seluruh kata dari string pencarian telah digantikan","searchnext_desc":"Cari Lagi",notfound:"Pencarian selesai. Hasil tidak ditemukan.","search_title":"Cari","replace_title":"Cari/Ganti",replaceall:"Ganti semua",replace:"Ganti"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/is_dlg.js
new file mode 100644
index 000000000..94004afdf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.searchreplace_dlg',{findwhat:"Finna hva\u00f0",replacewith:"Skipta \u00fat me\u00f0",direction:"\u00c1tt",up:"Upp",down:"Ni\u00f0ur",mcase:"Match case",findnext:"Finna n\u00e6sta",allreplaced:"\u00d6llum ni\u00f0urst\u00f6\u00f0um leitar var skipt \u00fat.","searchnext_desc":"Finna aftur",notfound:"Leitinni er loki\u00f0. Leitarstrengurinn fannst ekki.","search_title":"Finna","replace_title":"Finna/Skipta \u00fat",replaceall:"Skipta \u00fat \u00f6llu",replace:"Skipta \u00fat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/it_dlg.js
new file mode 100644
index 000000000..da34e5d83
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.searchreplace_dlg',{findwhat:"Trova:",replacewith:"Sostituisci con:",direction:"Direzione",up:"Avanti",down:"Indietro",mcase:"Maiuscole/minuscole",findnext:"Trova succ.",allreplaced:"Tutte le occorrenze del criterio di ricerca sono state sostituite.","searchnext_desc":"Trova successivo",notfound:"Ricerca completata. Nessun risultato trovato.","search_title":"Trova","replace_title":"Trova/Sostituisci",replaceall:"Sost. tutto",replace:"Sostituisci"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ja_dlg.js
new file mode 100644
index 000000000..a12eb7830
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.searchreplace_dlg',{findwhat:"\u691c\u7d22\u3059\u308b\u6587\u5b57\u5217",replacewith:"\u7f6e\u63db\u5f8c\u306e\u6587\u5b57\u5217",direction:"\u65b9\u5411",up:"\u4e0a\u3078",down:"\u4e0b\u3078",mcase:"\u5927\u6587\u5b57\u30fb\u5c0f\u6587\u5b57\u306e\u533a\u5225",findnext:"\u6b21\u3092\u691c\u7d22",allreplaced:"\u3059\u3079\u3066\u7f6e\u63db\u3057\u307e\u3057\u305f\u3002","searchnext_desc":"\u518d\u691c\u7d22",notfound:"\u691c\u7d22\u3092\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002\u691c\u7d22\u6587\u5b57\u5217\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002","search_title":"\u691c\u7d22","replace_title":"\u691c\u7d22\u3068\u7f6e\u63db",replaceall:"\u3059\u3079\u3066\u7f6e\u63db",replace:"\u7f6e\u63db"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ka_dlg.js
new file mode 100644
index 000000000..fdf508fc4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.searchreplace_dlg',{findwhat:"\u10eb\u10d4\u10d5\u10dc\u10d0",replacewith:"\u10e8\u10d4\u10ea\u10d5\u10da\u10d0 ..",direction:"\u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0",up:"\u10d6\u10d4\u10db\u10dd\u10d7 ",down:"\u10e5\u10d5\u10d4\u10db\u10dd\u10d7",mcase:"\u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d8\u10e1 \u10d2\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10e1\u10ec\u10d8\u10dc\u10d4\u10d1\u10d0",findnext:"\u10d8\u10de\u10dd\u10d5\u10dc\u10d4 \u10e8\u10d4\u10db\u10d3\u10d4\u10d2",allreplaced:"\u10e7\u10d5\u10d4\u10da\u10d0 \u10db\u10dc\u10d8\u10e8\u10dc\u10d4\u10da\u10dd\u10d1\u10d0 \u10e8\u10d4\u10ea\u10d5\u10da\u10d8\u10da\u10d8\u10d0.","searchnext_desc":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7 \u10de\u10dd\u10d5\u10dc\u10d0",notfound:"\u10eb\u10d4\u10d1\u10dc\u10d0 \u10d3\u10d0\u10e1\u10e0\u10e3\u10da\u10d4\u10d1\u10e3\u10da\u10d8\u10d0. \u10e8\u10d4\u10e1\u10d0\u10e2\u10e7\u10d5\u10d8\u10e1\u10d1\u10d8 \u10d0\u10e0 \u10d0\u10e0\u10d8\u10e1 \u10dc\u10d0\u10de\u10dd\u10d5\u10dc\u10d8.","search_title":"\u10eb\u10d8\u10d4\u10d1\u10d0","replace_title":"\u10db\u10dd\u10eb\u10d4\u10d1\u10dc\u10d0 \u10d3\u10d0 \u10e8\u10d4\u10ea\u10d5\u10da\u10d0",replaceall:"\u10e7\u10d5\u10d4\u10da\u10d0\u10e4\u10d4\u10e0\u10d8\u10e1 \u10e8\u10d4\u10ea\u10d5\u10da\u10d0",replace:"\u10e8\u10d4\u10ea\u10d5\u10da\u10d0"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/kl_dlg.js
new file mode 100644
index 000000000..be9cd6950
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/km_dlg.js
new file mode 100644
index 000000000..c6390bb8f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.searchreplace_dlg',{findwhat:"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u17a2\u17d2\u179c\u17b8",replacewith:"\u1787\u17c6\u1793\u17bd\u179f\u178a\u17c4\u1799",direction:"\u1791\u17b7\u179f\u178a\u17c5",up:"\u17a1\u17be\u1784\u179b\u17be",down:"\u1785\u17bb\u17c7\u1780\u17d2\u179a\u17c4\u1798",mcase:"\u1780\u179a\u178e\u17b8\u178a\u17c6\u178e\u17bc\u1785",findnext:"\u179a\u1780\u1794\u1793\u17d2\u1791\u17b6\u1794\u17cb",allreplaced:"\u1781\u17d2\u179f\u17c2\u17a2\u1780\u17d2\u179f\u179a\u178a\u17c2\u179b\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1787\u17bd\u1794\u1794\u17d2\u179a\u1791\u17c7\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u178f\u17d2\u179a\u17bc\u179c\u1794\u17b6\u1793\u1787\u17c6\u1793\u17bd\u179f\u00a0\u17d4","searchnext_desc":"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1798\u17d2\u178f\u1784\u1791\u17c0\u178f",notfound:"\u1780\u17b6\u179a\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u1794\u17cb\u00a0\u17d4 \u1781\u17d2\u179f\u17c2\u17a2\u1780\u17d2\u179f\u179a\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780\u1798\u17b7\u1793\u17a2\u17b6\u1785\u179a\u1780\u1783\u17be\u1789\u00a0\u17d4","search_title":"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780","replace_title":"\u179f\u17d2\u179c\u17c2\u1784\u179a\u1780/\u1787\u17c6\u1793\u17bd\u179f",replaceall:"\u1787\u17c6\u1793\u17bd\u179f\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb",replace:"\u1787\u17c6\u1793\u17bd\u179f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ko_dlg.js
new file mode 100644
index 000000000..15587c91b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.searchreplace_dlg',{findwhat:"\ucc3e\uc744 \ub0b4\uc6a9",replacewith:"\ubc14\uafc0 \ub0b4\uc6a9",direction:"\ubc29\ud5a5",up:"\uc704\ub85c",down:"\uc544\ub798\ub85c",mcase:"\ub300\uc18c\ubb38\uc790 \uad6c\ubcc4",findnext:"\ub2e4\uc74c \ucc3e\uae30",allreplaced:"\uac80\uc0c9 \ubb38\uc790\uc5f4\uc744 \ubaa8\ub450 \ucc3e\uc544 \ubc14\uafe8\uc2b5\ub2c8\ub2e4.","searchnext_desc":"\ub2e4\uc2dc \ucc3e\uae30",notfound:"\uac80\uc0c9\uc774 \uc644\ub8cc\ub410\uc2b5\ub2c8\ub2e4. \uac80\uc0c9 \ubb38\uc790\uc5f4\uc744 \ucc3e\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4.","search_title":"\ucc3e\uae30","replace_title":"\ucc3e\uae30/\ubc14\uafb8\uae30",replaceall:"\ubaa8\ub450 \ubc14\uafb8\uae30",replace:"\ubc14\uafb8\uae30"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/kz_dlg.js
new file mode 100644
index 000000000..725203e34
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lb_dlg.js
new file mode 100644
index 000000000..c73710971
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.searchreplace_dlg',{findwhat:"Ze sichenden Text",replacewith:"Ersetzen duerch",direction:"Sichrichtung",up:"No uewen",down:"No \u00ebnnen",mcase:"Grouss-/Klengschreiwung beuechten",findnext:"Weidersichen",allreplaced:"All d\'Virkomme vun der Zeechekette goufen ersat.","searchnext_desc":"Weidersichen",notfound:"D\'Sich ass um Enn ukomm. D\'Zeechekette konnt net fonnt ginn.","search_title":"Sichen","replace_title":"Sichen/Ersetzen",replaceall:"All ersetzen",replace:"Ersetzen"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lt_dlg.js
new file mode 100644
index 000000000..bc35477fd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.searchreplace_dlg',{findwhat:"Ko ie\u0161koti",replacewith:"Kuo pakeisti",direction:"Kryptis",up:"\u012e vir\u0161\u0173",down:"\u012e apa\u010di\u0105",mcase:"Visi\u0161kas atitikimas",findnext:"Ie\u0161koti sek.",allreplaced:"Visi paie\u0161kos fraz\u0117s pasikartojimai pakeisti.","searchnext_desc":"Ie\u0161koti dar kart\u0105",notfound:"Paie\u0161ka baigta. Paie\u0161kos fraz\u0117 nerasta.","search_title":"Ie\u0161koti","replace_title":"Ie\u0161koti/Pakeisti",replaceall:"Pakeisti visus",replace:"Pakeisti"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lv_dlg.js
new file mode 100644
index 000000000..f093dd5c2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.searchreplace_dlg',{findwhat:"Ko atrast",replacewith:"Aizvietot ar",direction:"Virziens",up:"Uz aug\u0161u",down:"Uz leju",mcase:"Re\u0123istrj\u016bt\u012bgs",findnext:"Mekl\u0113t n\u0101kamo",allreplaced:"Visas fr\u0101zes/v\u0101rdi tika veiksm\u012bgi aizvietoti.","searchnext_desc":"Mekl\u0113t v\u0113lreiz",notfound:"Mekl\u0113\u0161ana pabeigta. Mekl\u0113t\u0101 fr\u0101ze/v\u0101rds netika atrasta.","search_title":"Mekl\u0113t","replace_title":"Mekl\u0113t/Aizvietot",replaceall:"Aizvietot visu",replace:"Aizvietot"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/mk_dlg.js
new file mode 100644
index 000000000..bf3828a15
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.searchreplace_dlg',{findwhat:"\u041d\u0430\u0458\u0434\u0438 \u0442\u0435\u043a\u0441\u0442",replacewith:"\u0417\u0430\u043c\u0435\u043d\u0438 \u0441\u043e",direction:"\u0421\u043c\u0435\u0440",up:"\u0413\u043e\u0440\u0435",down:"\u0414\u043e\u043b\u0435",mcase:"\u0441\u043b\u0443\u0447\u0430\u0458 \u043a\u043e\u0433\u0430 \u0435 \u043f\u043e\u0433\u043e\u0434\u0435\u043d\u043e",findnext:"\u041d\u0430\u0458\u0434\u0438 \u0441\u043b\u0435\u0434\u043d\u043e",allreplaced:"\u0421\u0438\u0442\u0435 \u043f\u043e\u0458\u0430\u0432\u0443\u0432\u0430\u045a\u0430 \u043d\u0430 \u0431\u0430\u0440\u0430\u043d\u0438\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u0441\u0435 \u0437\u0430\u043c\u0435\u043d\u0435\u0442\u0438","searchnext_desc":"\u041d\u0430\u0458\u0434\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e",notfound:"\u0411\u0430\u0440\u0430\u045a\u0435\u0442\u043e \u0437\u0430\u0432\u0440\u0448\u0438. \u0411\u0430\u0440\u0430\u043d\u0438\u043e\u0442 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435 \u0435 \u043d\u0430\u0458\u0434\u0435\u043d.","search_title":"\u041d\u0430\u0458\u0434\u0438","replace_title":"\u041d\u0430\u0458\u0434\u0438/\u0417\u0430\u043c\u0435\u043d\u0438",replaceall:"\u0417\u0430\u043c\u0435\u043d\u0438 \u0433\u0438 \u0441\u0438\u0442\u0435",replace:"\u0417\u0430\u043c\u0435\u043d\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ml_dlg.js
new file mode 100644
index 000000000..d5758fe12
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/mn_dlg.js
new file mode 100644
index 000000000..454a247aa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.searchreplace_dlg',{findwhat:"\u0425\u0430\u0439\u0445 \u0431\u0438\u0447\u0432\u044d\u0440",replacewith:"\u041e\u0440\u043b\u0443\u0443\u043b\u0430\u0433\u0430",direction:"\u0425\u0430\u0439\u0445 \u0447\u0438\u0433\u043b\u044d\u043b",up:"\u0413\u044d\u0434\u0440\u044d\u0433",down:"\u0426\u0430\u0430\u0448",mcase:"\u0422\u043e\u043c/\u0416\u0438\u0436\u0438\u0433 \u0431\u0438\u0447\u0438\u043b\u0442 \u044f\u043b\u0433\u0430\u0445",findnext:"\u0426\u0430\u0430\u0448 \u0445\u0430\u0439\u0445",allreplaced:"\u0422\u044d\u043c\u0434\u044d\u0433\u0442 \u043c\u04e9\u0440\u0438\u0439\u043d \u0431\u04af\u0445 \u0442\u043e\u0445\u0438\u043e\u043b\u0434\u043b\u0443\u0443\u0434 \u043e\u0440\u043b\u0443\u0443\u043b\u0430\u0433\u0434\u0441\u0430\u043d.","searchnext_desc":"\u0426\u0430\u0430\u0448 \u0445\u0430\u0439\u0445",notfound:"\u0425\u0430\u0439\u043b\u0442 \u0442\u04e9\u0433\u0441\u0433\u04e9\u043b\u0434 \u0445\u04af\u0440\u044d\u0432. \u0422\u044d\u043c\u0434\u044d\u0433\u0442 \u043c\u04e9\u0440 \u043e\u043b\u0434\u0441\u043e\u043d\u0433\u04af\u0439.","search_title":"\u0425\u0430\u0439\u0445","replace_title":"\u0425\u0430\u0439\u0445/\u043e\u0440\u043b\u0443\u0443\u043b\u0430\u0445",replaceall:"\u0411\u04af\u0433\u0434\u0438\u0439\u0433 \u043e\u0440\u043b\u0443\u0443\u043b",replace:"\u041e\u0440\u043b\u0443\u0443\u043b"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ms_dlg.js
new file mode 100644
index 000000000..6ec6c1554
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.searchreplace_dlg',{findwhat:"Cari apa",replacewith:"Ganti dengan",direction:"Arah",up:"Atas",down:"Bawah",mcase:"Samakan kes",findnext:"Carian seterusnya",allreplaced:"Kesemua perkataan telah digantikan.","searchnext_desc":"Cari lagi",notfound:"Carian tamat. Perkataan yang dicari tiada.","search_title":"Cari","replace_title":"Cari/Ganti",replaceall:"Ganti kesemuanya",replace:"Ganti"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/my_dlg.js
new file mode 100644
index 000000000..8ca415e16
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.searchreplace_dlg',{findwhat:"\u101b\u103e\u102c\u101b\u1014\u103a",replacewith:"\u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038\u101b\u1014\u103a",direction:"\u1025\u102e\u1038\u1010\u100a\u103a\u1001\u103b\u1000\u103a",up:"\u1021\u1031\u1015\u102b\u103a",down:"\u1031\u1021\u102c\u1000\u103a",mcase:"\u1005\u102c\u101c\u1036\u102f\u1038 \u1021\u103c\u1000\u102e\u1038\u1031\u101e\u1038\u1010\u102d\u102f\u1000\u103a",findnext:"\u1031\u1014\u102c\u1000\u103a\u1005\u102c\u101c\u1036\u102f\u1038 \u101b\u103e\u102c",allreplaced:"\u101b\u103e\u102c\u1031\u1016\u103d\u1019\u103e\u102f \u1005\u102c\u1010\u1014\u103a\u1038\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038\u103c\u1015\u102e\u1038\u103c\u1015\u102e\u104b","searchnext_desc":"\u1031\u1014\u102c\u1000\u103a\u1010\u1005\u103a\u1001\u102b\u101b\u103e\u102c\u1015\u102b",notfound:"\u101b\u103e\u102c\u101c\u102d\u102f\u1037\u103c\u1015\u102e\u1038\u1015\u102b\u103c\u1015\u102e\u104b \u101b\u103e\u102c\u1031\u1016\u103d\u1031\u101e\u102c \u1005\u102c\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1019\u1031\u1010\u103d\u1037\u1015\u102b\u104b","search_title":"\u101b\u103e\u102c\u1015\u102b","replace_title":"\u101b\u103e\u102c/\u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038",replaceall:"\u1021\u102c\u1038\u101c\u1036\u102f\u1038 \u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038",replace:"\u1021\u1005\u102c\u1038\u1011\u102d\u102f\u1038"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nb_dlg.js
new file mode 100644
index 000000000..222de644a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.searchreplace_dlg',{findwhat:"Finn hva",replacewith:"Erstatt med",direction:"Retning",up:"Oppover",down:"Nedover",mcase:"Skill mellom store og sm\u00e5 tegn",findnext:"Finn neste",allreplaced:"Alle forekomster av s\u00f8kestrengen er erstattet.","searchnext_desc":"S\u00f8k igjen",notfound:"S\u00f8ket er avsluttet. Fant ikke s\u00f8kestrengen.","search_title":"S\u00f8k","replace_title":"S\u00f8k/Erstatt",replaceall:"Erstatt alt",replace:"Erstatt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nl_dlg.js
new file mode 100644
index 000000000..afda5f032
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.searchreplace_dlg',{findwhat:"Zoeken naar",replacewith:"Vervangen door",direction:"Richting",up:"Omhoog",down:"Omlaag",mcase:"Identieke hoofdletters/kleine letters",findnext:"Zoeken",allreplaced:"Alle instanties van de zoekterm zijn vervangen.","searchnext_desc":"Opnieuw zoeken",notfound:"Het doorzoeken is voltooid. De zoekterm kon niet meer worden gevonden.","search_title":"Zoeken","replace_title":"Zoeken/Vervangen",replaceall:"Alles verv.",replace:"Vervangen"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nn_dlg.js
new file mode 100644
index 000000000..3dddb7fc0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.searchreplace_dlg',{findwhat:"Finn kva",replacewith:"Erstatt med",direction:"Retning",up:"Oppover",down:"Nedover",mcase:"Skill mellom store og sm\u00e5 teikn",findnext:"Finn neste",allreplaced:"Alle f\u00f8rekomstar av s\u00f8kjestrengen er erstatta.","searchnext_desc":"S\u00f8k igjen",notfound:"S\u00f8ket avslutta. Fann ikkje s\u00f8kjestrengen.","search_title":"S\u00f8k","replace_title":"S\u00f8k/Erstatt",replaceall:"Erstatt alt",replace:"Erstatt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/no_dlg.js
new file mode 100644
index 000000000..a623c9390
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.searchreplace_dlg',{findwhat:"Finn hva",replacewith:"Erstatt med",direction:"Retning",up:"Oppover",down:"Nedover",mcase:"Skille mellom store og sm\u00e5 bokstaver",findnext:"Finn neste",allreplaced:"Alle forekomster av s\u00f8kestrengen er erstattet.","searchnext_desc":"S\u00f8k igjen",notfound:"S\u00f8ket avsluttet. Fant ikke s\u00f8kestrengen.","search_title":"S\u00f8k","replace_title":"S\u00f8k/Erstatt",replaceall:"Erstatt alle",replace:"Erstatt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/pl_dlg.js
new file mode 100644
index 000000000..df815de1c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.searchreplace_dlg',{findwhat:"Znajd\u017a...",replacewith:"Zamie\u0144 na...",direction:"Kierunek",up:"W g\u00f3r\u0119",down:"W d\u00f3\u0142",mcase:"Uwzgl\u0119dniaj wielko\u015b\u0107 liter",findnext:"Znajd\u017a nast\u0119pny",allreplaced:"Wszystkie wyst\u0105pienia szukanego fragmentu zosta\u0142y zast\u0105pione.","searchnext_desc":"Znajd\u017a ponownie",notfound:"Wyszukiwanie zako\u0144czone. Poszukiwany fragment nie zosta\u0142 znaleziony.","search_title":"Znajd\u017a","replace_title":"Znajd\u017a/zamie\u0144",replaceall:"Zamie\u0144 wszystko",replace:"Zamie\u0144"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ps_dlg.js
new file mode 100644
index 000000000..4a69379af
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/pt_dlg.js
new file mode 100644
index 000000000..25c9a42c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.searchreplace_dlg',{findwhat:"Localizar",replacewith:"Substituir com",direction:"Dire\u00e7\u00e3o",up:"Acima",down:"Abaixo",mcase:"Diferenciar mai\u00fasculas",findnext:"Localizar pr\u00f3x.",allreplaced:"Todas as substitui\u00e7\u00f5es foram efetuadas.","searchnext_desc":"Localizar novamente",notfound:"A pesquisa foi conclu\u00edda sem resultados.","search_title":"Localizar","replace_title":"Localizar/substituir",replaceall:"Subst. todos",replace:"Substituir"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ro_dlg.js
new file mode 100644
index 000000000..d07670777
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.searchreplace_dlg',{findwhat:"Termen c\u0103utat:",replacewith:"\u00cenlocuie\u0219te cu:",direction:"Direc\u021bia",up:"\u00cen sus",down:"\u00cen jos",mcase:"Conteaz\u0103 literele mici/mari?",findnext:"Mai caut\u0103",allreplaced:"Toate instan\u021bele termenului c\u0103utat au fost \u00eenlocuite.","searchnext_desc":"Caut\u0103 din nou",notfound:"C\u0103utarea a fost terminat\u0103. Nu am g\u0103sit termenul c\u0103utat.","search_title":"Caut\u0103","replace_title":"C\u0103utare/\u00eenlocuire",replaceall:"\u00cenlocuie\u0219te tot",replace:"\u00cenlocuie\u0219te"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ru_dlg.js
new file mode 100644
index 000000000..3cc2af8d4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.searchreplace_dlg',{findwhat:"\u041f\u043e\u0438\u0441\u043a",replacewith:"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430",direction:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435",up:"\u0412\u0432\u0435\u0440\u0445 ",down:"\u0412\u043d\u0438\u0437",mcase:"\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440",findnext:"\u041d\u0430\u0439\u0442\u0438 \u0434\u0430\u043b\u0435\u0435",allreplaced:"\u0412\u0441\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u044b\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b.","searchnext_desc":"\u041d\u0430\u0439\u0442\u0438 \u0435\u0449\u0435",notfound:"\u041f\u043e\u0438\u0441\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d. \u0421\u043e\u043e\u0442\u0432\u0435\u0441\u0442\u0432\u0438\u0439 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.","search_title":"\u041f\u043e\u0438\u0441\u043a","replace_title":"\u041f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u043c\u0435\u043d\u0430",replaceall:"\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435",replace:"\u0417\u0430\u043c\u0435\u043d\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sc_dlg.js
new file mode 100644
index 000000000..731946b82
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.searchreplace_dlg',{findwhat:"\u67e5\u627e\u76ee\u6807",replacewith:"\u66ff\u6362\u4e3a",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u5927\u5c0f\u5199\u5339\u914d",findnext:"\u4e0b\u4e00\u4e2a",allreplaced:"\u5df2\u66ff\u6362\u6240\u6709\u5339\u914d\u7684\u7b26\u4e32.","searchnext_desc":"\u518d\u6b21\u67e5\u627e",notfound:"\u67e5\u627e\u5df2\u5b8c\u6210!\u627e\u4e0d\u5230\u4efb\u4f55\u76ee\u6807\u3002 ","search_title":"\u67e5\u627e","replace_title":"\u67e5\u627e/\u66ff\u6362",replaceall:"\u66ff\u6362\u5168\u90e8",replace:"\u66ff\u6362"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/se_dlg.js
new file mode 100644
index 000000000..c9cf43b3f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.searchreplace_dlg',{findwhat:"Hitta vad",replacewith:"Ers\u00e4tt med",direction:"Riktning",up:"Upp\u00e5t",down:"Ner\u00e5t",mcase:"Matcha gemener/versaler",findnext:"Hitta n\u00e4sta",allreplaced:"Alla st\u00e4llen d\u00e4r s\u00f6kstr\u00e4ngen kunde hittas har ersatts.","searchnext_desc":"S\u00f6k igen",notfound:"S\u00f6kningen har slutf\u00f6rts. S\u00f6kstr\u00e4ngen kunde inte hittas.","search_title":"S\u00f6k","replace_title":"S\u00f6k/ers\u00e4tt",replaceall:"Ers\u00e4tt alla",replace:"Ers\u00e4tt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/si_dlg.js
new file mode 100644
index 000000000..cfa3a2dda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sk_dlg.js
new file mode 100644
index 000000000..569888671
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.searchreplace_dlg',{findwhat:"H\u013eada\u0165 \u010do",replacewith:"Nahradi\u0165 \u010d\u00edm",direction:"Smer",up:"Nahor",down:"Nadol",mcase:"Rozli\u0161ova\u0165 mal\u00e9 a VE\u013dK\u00c9 p\u00edsmen\u00e1",findnext:"H\u013eada\u0165 \u010falej",allreplaced:"V\u0161etky v\u00fdskyty boli nahraden\u00e9.","searchnext_desc":"H\u013eada\u0165 \u010falej",notfound:"H\u013eadanie bolo dokon\u010den\u00e9. H\u013eadan\u00fd text nebol n\u00e1jden\u00fd.","search_title":"H\u013eada\u0165","replace_title":"H\u013eada\u0165 a nahradi\u0165",replaceall:"Nahradi\u0165 v\u0161etko",replace:"Nahradi\u0165"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sl_dlg.js
new file mode 100644
index 000000000..828fc6472
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.searchreplace_dlg',{findwhat:"I\u0161\u010dem za",replacewith:"Zamenjam z",direction:"Smer",up:"navzgor",down:"navzdol",mcase:"ujemanje velikosti",findnext:"Najdi nasled.",allreplaced:"Vse pojavitve iskanega besedila so bile zamenjane.","searchnext_desc":"Najdi znova",notfound:"Preiskovanje zaklju\u010deno. Iskanega besedila nisem na\u0161el.","search_title":"Najdi","replace_title":"Najdi/zamenjaj",replaceall:"Zamenjaj vse",replace:"Zamenjaj"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sq_dlg.js
new file mode 100644
index 000000000..851befdbe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.searchreplace_dlg',{findwhat:"K\u00ebrko p\u00ebr",replacewith:"Z\u00ebvend\u00ebso me",direction:"Drejtimi",up:"Lart",down:"Posht\u00eb",mcase:"P\u00ebrshtat madh\u00ebsin\u00eb e g\u00ebrm\u00ebs",findnext:"K\u00ebrko tjetr\u00ebn",allreplaced:"T\u00eb gjitha tekstet e gjetura u z\u00ebvend\u00ebsuan.","searchnext_desc":"K\u00ebrko p\u00ebrs\u00ebri",notfound:"K\u00ebrkimi p\u00ebrfundoi dhe nuk ktheu asnj\u00eb rezultat.","search_title":"K\u00ebrko","replace_title":"K\u00ebrko/Z\u00ebvend\u00ebso",replaceall:"Z\u00ebv. t\u00eb gjitha",replace:"Z\u00ebvend\u00ebso"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sr_dlg.js
new file mode 100644
index 000000000..0ce4906b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.searchreplace_dlg',{findwhat:"Prona\u0111i",replacewith:"Zameni sa",direction:"Smer",up:"Gore",down:"Dole",mcase:"Podudaranje velikih/malih slova",findnext:"Na\u0111i slede\u0107e",allreplaced:"Sva pojavljivanja tra\u017eenog teksta su zamenjena.","searchnext_desc":"Prona\u0111i ponovo",notfound:"Pretra\u017eivanje je zavr\u0161eno. Tra\u017eeni tekst nije prona\u0111en.","search_title":"Prona\u0111i","replace_title":"Prona\u0111i/Zameni",replaceall:"Zameni sve",replace:"Zameni"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sv_dlg.js
new file mode 100644
index 000000000..d503ec86d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.searchreplace_dlg',{findwhat:"Hitta vad",replacewith:"Ers\u00e4tt med",direction:"Riktning",up:"Upp\u00e5t",down:"Ner\u00e5t",mcase:"Matcha gemener/versaler",findnext:"Hitta n\u00e4sta",allreplaced:"Alla st\u00e4llen d\u00e4r s\u00f6kstr\u00e4ngen kunde hittas har ersatts.","searchnext_desc":"S\u00f6k igen",notfound:"S\u00f6kningen har slutf\u00f6rts. S\u00f6kstr\u00e4ngen kunde inte hittas.","search_title":"S\u00f6k","replace_title":"S\u00f6k/ers\u00e4tt",replaceall:"Ers\u00e4tt alla",replace:"Ers\u00e4tt"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sy_dlg.js
new file mode 100644
index 000000000..94061d999
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.searchreplace_dlg',{findwhat:"Find What",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match Case",findnext:"Find Next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find Again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace All",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ta_dlg.js
new file mode 100644
index 000000000..908bf7fe5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/te_dlg.js
new file mode 100644
index 000000000..e7adbeded
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/th_dlg.js
new file mode 100644
index 000000000..cd02e1880
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.searchreplace_dlg',{findwhat:"\u0e04\u0e49\u0e19\u0e2b\u0e32",replacewith:"\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e14\u0e49\u0e27\u0e22",direction:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07",up:"\u0e1a\u0e19",down:"\u0e25\u0e48\u0e32\u0e07",mcase:"\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e17\u0e38\u0e01\u0e2d\u0e22\u0e48\u0e32\u0e07",findnext:"\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e15\u0e48\u0e2d\u0e44\u0e1b",allreplaced:"\u0e17\u0e38\u0e01\u0e04\u0e33\u0e17\u0e35\u0e48\u0e43\u0e2a\u0e48\u0e16\u0e39\u0e01\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e41\u0e25\u0e49\u0e27","searchnext_desc":"\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07",notfound:"\u0e01\u0e32\u0e23\u0e04\u0e49\u0e19\u0e2b\u0e32\u0e2a\u0e34\u0e49\u0e19\u0e2a\u0e38\u0e14 \u0e40\u0e23\u0e32\u0e44\u0e21\u0e48\u0e1e\u0e1a\u0e2d\u0e30\u0e44\u0e23\u0e40\u0e25\u0e22","search_title":"\u0e04\u0e49\u0e19\u0e2b\u0e32","replace_title":"\u0e04\u0e49\u0e19\u0e2b\u0e32/\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48",replaceall:"\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14",replace:"\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tn_dlg.js
new file mode 100644
index 000000000..58712cdec
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tr_dlg.js
new file mode 100644
index 000000000..e5ef98ce5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.searchreplace_dlg',{findwhat:"Aranan",replacewith:"Yeni de\u011fer",direction:"Y\u00f6n",up:"Yukar\u0131",down:"A\u015fa\u011f\u0131",mcase:"B\u00fcy\u00fck/k\u00fc\u00e7\u00fck duyarl\u0131",findnext:"Sonrakini bul",allreplaced:"Aranan metin bulundu\u011fu yerlede de\u011fi\u015ftirildi.","searchnext_desc":"Tekrar ara",notfound:"Arama tamamland\u0131. Aranan metin bulunamad\u0131.","search_title":"Bul","replace_title":"Bul/De\u011fi\u015ftir",replaceall:"T\u00fcm\u00fcn\u00fc de\u011fi\u015ftir",replace:"De\u011fi\u015ftir"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tt_dlg.js
new file mode 100644
index 000000000..66b73a14f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.searchreplace_dlg',{findwhat:"\u641c\u5c0b\u76ee\u6a19",replacewith:"\u53d6\u4ee3\u7232",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u5340\u5206\u5927\u5c0f\u5beb",findnext:"\u641c\u5c0b\u4e0b\u4e00\u500b",allreplaced:"\u5df2\u53d6\u4ee3\u6240\u6709\u5339\u914d\u7684\u5b57\u4e32.","searchnext_desc":"\u518d\u6b21\u641c\u5c0b",notfound:"\u641c\u5c0b\u5df2\u5b8c\u6210 ! \u627e\u4e0d\u5230\u4efb\u4f55\u76ee\u6a19\u3002 ","search_title":"\u641c\u5c0b","replace_title":"\u641c\u5c0b/\u53d6\u4ee3",replaceall:"\u5168\u90e8\u53d6\u4ee3",replace:"\u53d6\u4ee3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tw_dlg.js
new file mode 100644
index 000000000..9b0894b3d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.searchreplace_dlg',{findwhat:"\u641c\u5c0b\u76ee\u6a19",replacewith:"\u53d6\u4ee3\u70ba",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u5340\u5206\u5927\u5c0f\u5beb",findnext:"\u5c0b\u627e\u4e0b\u4e00\u500b",allreplaced:"\u6240\u6709\u7b26\u5408\u7684\u5b57\u5143\u4e32\u5747\u5df2\u53d6\u4ee3\u3002","searchnext_desc":"\u7e7c\u7e8c\u641c\u5c0b",notfound:"\u641c\u5c0b\u5b8c\u7562\uff0c\u6c92\u6709\u627e\u5230\u7b26\u5408\u7684\u5b57\u5143\u4e32\u3002","search_title":"\u641c\u5c0b","replace_title":"\u641c\u5c0b/\u53d6\u4ee3",replaceall:"\u5168\u90e8\u53d6\u4ee3",replace:"\u53d6\u4ee3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/uk_dlg.js
new file mode 100644
index 000000000..cdb46ab59
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.searchreplace_dlg',{findwhat:"\u0417\u043d\u0430\u0439\u0442\u0438",replacewith:"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u043d\u0430",direction:"\u041d\u0430\u043f\u0440\u044f\u043c\u043e\u043a \u043f\u043e\u0448\u0443\u043a\u0443",up:"\u0412\u0433\u043e\u0440\u0443",down:"\u0412\u043d\u0438\u0437",mcase:"\u0412\u0440\u0430\u0445\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0440\u0435\u0454\u0441\u0442\u0440",findnext:"\u0417\u043d\u0430\u0439\u0442\u0438 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0435",allreplaced:"\u0412\u0441\u0456 \u0432\u0445\u043e\u0434\u0436\u0435\u043d\u043d\u044f \u0440\u044f\u0434\u043a\u0430 \u0431\u0443\u043b\u0438 \u0437\u0430\u043c\u0456\u043d\u0435\u043d\u0456.","searchnext_desc":"\u0417\u043d\u0430\u0439\u0442\u0438 \u0449\u0435",notfound:"\u041f\u043e\u0448\u0443\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u043e. \u041f\u043e\u0448\u0443\u043a\u043e\u0432\u0438\u0439 \u0440\u044f\u0434\u043e\u043a \u043d\u0435 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e.","search_title":"\u0428\u0443\u043a\u0430\u0442\u0438","replace_title":"\u0428\u0443\u043a\u0430\u0442\u0438/\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438",replaceall:"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438 \u0432\u0441\u0435",replace:"\u0417\u0430\u043c\u0456\u043d\u0438\u0442\u0438"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ur_dlg.js
new file mode 100644
index 000000000..71e1cc103
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.searchreplace_dlg',{findwhat:"Find what",replacewith:"Replace with",direction:"Direction",up:"Up",down:"Down",mcase:"Match case",findnext:"Find next",allreplaced:"All occurrences of the search string were replaced.","searchnext_desc":"Find again",notfound:"The search has been completed. The search string could not be found.","search_title":"Find","replace_title":"Find/Replace",replaceall:"Replace all",replace:"Replace"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/vi_dlg.js
new file mode 100644
index 000000000..f291ee775
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.searchreplace_dlg',{findwhat:"T\u00ecm ki\u1ebfm g\u00ec",replacewith:"Thay th\u1ebf v\u1edbi",direction:"H\u01b0\u1edbng",up:"L\u00ean",down:"Xu\u1ed1ng",mcase:"Theo c\u1ea3 ch\u1eef hoa",findnext:"T\u00ecm k\u1ebf ti\u1ebfp",allreplaced:"T\u1ea5t c\u1ea3 c\u00e1c l\u1ea7n xu\u1ea5t hi\u1ec7n c\u1ee7a c\u00e1c chu\u1ed7i t\u00ecm ki\u1ebfm \u0111\u01b0\u1ee3c thay th\u1ebf.","searchnext_desc":"T\u00ecm l\u1ea1i",notfound:"Vi\u1ec7c t\u00ecm ki\u1ebfm \u0111\u00e3 ho\u00e0n th\u00e0nh. Chu\u1ed7i t\u00ecm ki\u1ebfm kh\u00f4ng \u0111\u01b0\u1ee3c t\u00ecm th\u1ea5y.","search_title":"T\u00ecm ki\u1ebfm","replace_title":"T\u00ecm/Thay th\u1ebf",replaceall:"Thay th\u1ebf t\u1ea5t",replace:"Thay th\u1ebf"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..88912474f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.searchreplace_dlg',{findwhat:"\u67e5\u627e\u76ee\u6807",replacewith:"\u66ff\u6362\u4e3a",direction:"\u67e5\u627e\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u533a\u5206\u5927\u5c0f\u5199",findnext:"\u67e5\u627e\u4e0b\u4e00\u4e2a",allreplaced:"\u6240\u6709\u51fa\u73b0\u7684\u5b57\u7b26\u5747\u5df2\u66ff\u6362\u3002","searchnext_desc":"\u7ee7\u7eed\u67e5\u627e",notfound:"\u67e5\u627e\u5b8c\u6210\uff0c\u672a\u627e\u5230\u7b26\u5408\u7684\u6587\u5b57\u3002","search_title":"\u67e5\u627e","replace_title":"\u67e5\u627e/\u66ff\u6362",replaceall:"\u5168\u90e8\u66ff\u6362",replace:"\u66ff\u6362"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..f60db8e39
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.searchreplace_dlg',{findwhat:"\u5c0b\u627e",replacewith:"\u53d6\u4ee3\u6210",direction:"\u5c0b\u627e\u7684\u65b9\u5411",up:"\u5f80\u4e0a\u627e",down:"\u5f80\u4e0b\u627e",mcase:"\u5927\u5c0f\u5beb\u5340\u5206\u958b\u4f86",findnext:"\u627e\u4e0b\u4e00\u500b",allreplaced:"\u53d6\u4ee3\u5b8c\u6210","searchnext_desc":"\u518d\u627e\u4e00\u6b21",notfound:"\u627e\u4e0d\u5230\u7b26\u5408\u7684\u8cc7\u6599","search_title":"\u5c0b\u627e","replace_title":"\u5c0b\u627e / \u53d6\u4ee3",replaceall:"\u5168\u90e8\u53d6\u4ee3",replace:"\u53d6\u4ee3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh_dlg.js
new file mode 100644
index 000000000..98e7555e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.searchreplace_dlg',{findwhat:"\u5c0b\u627e\u76ee\u6a19",replacewith:"\u53d6\u4ee3\u6210",direction:"\u5c0b\u627e\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u5340\u5225\u5927\u5c0f\u5beb",findnext:"\u5c0b\u627e\u4e0b\u4e00\u500b",allreplaced:"\u6240\u6709\u7b26\u5408\u7684\u5b57\u4e32\u90fd\u5df2\u88ab\u53d6\u4ee3.","searchnext_desc":"\u7e7c\u7e8c\u5c0b\u627e",notfound:"\u5b8c\u6210\u641c\u5c0b, \u5df2\u627e\u4e0d\u5230\u5c0b\u627e\u76ee\u6a19.","search_title":"\u5c0b\u627e","replace_title":"\u5c0b\u627e/\u53d6\u4ee3",replaceall:"\u5168\u90e8\u53d6\u4ee3",replace:"\u53d6\u4ee3"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zu_dlg.js
new file mode 100644
index 000000000..0666035b6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/searchreplace/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.searchreplace_dlg',{findwhat:"\u67e5\u627e\u76ee\u6807",replacewith:"\u66ff\u6362\u4e3a",direction:"\u65b9\u5411",up:"\u5411\u4e0a",down:"\u5411\u4e0b",mcase:"\u5927\u5c0f\u5199\u5339\u914d",findnext:"\u4e0b\u4e00\u4e2a",allreplaced:"\u5df2\u66ff\u6362\u6240\u6709\u5339\u914d\u7684\u7b26\u4e32.","searchnext_desc":"\u518d\u6b21\u67e5\u627e",notfound:"\u67e5\u627e\u5df2\u5b8c\u6210!\u627e\u4e0d\u5230\u4efb\u4f55\u76ee\u6807\u3002","search_title":"\u67e5\u627e","replace_title":"\u67e5\u627e/\u66ff\u6362",replaceall:"\u66ff\u6362\u5168\u90e8",replace:"\u66ff\u6362"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ar_dlg.js
new file mode 100644
index 000000000..8621f097d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.style_dlg',{"text_lineheight":"\u0627\u0631\u062a\u0641\u0627\u0639 \u0627\u0644\u062e\u0637","text_variant":"\u0634\u0643\u0644 \u0645\u062e\u062a\u0644\u0641","text_style":"\u0633\u0645\u0647","text_weight":"\u0627\u0644\u0639\u0631\u0636","text_size":"\u062d\u062c\u0645","text_font":"\u062e\u0637","text_props":"\u0646\u0635","positioning_tab":"\u0648\u0636\u0639","list_tab":"\u0642\u0627\u0626\u0645\u0647","border_tab":"\u0627\u0637\u0627\u0631","box_tab":"\u0635\u0646\u062f\u0648\u0642","block_tab":"\u0628\u0644\u0648\u0643","background_tab":"\u062e\u0644\u0641\u064a\u0647","text_tab":"\u0646\u0635",apply:"\u0627\u062f\u0631\u0627\u062c",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"\u0627\u0644\u0628\u0639\u062f \u0627\u0644\u062b\u0627\u0644\u062b",visibility:"\u0627\u0644\u0638\u0647\u0648\u0631","positioning_type":"\u0646\u0648\u0639",position:"Position","bullet_image":"Bullet image","list_type":"\u0646\u0648\u0639",color:"\u0644\u0648\u0646",height:"\u0627\u0631\u062a\u0641\u0627\u0639",width:"\u0639\u0631\u0636",style:"\u0633\u0645\u0647",margin:"Margin",left:"\u064a\u0633\u0627\u0631",bottom:"\u0627\u0633\u0641\u0644",right:"\u064a\u0645\u064a\u0646",top:"\u0627\u0644\u0627\u0639\u0644\u0649",same:"\u0645\u062a\u0633\u0627\u0648\u0649 \u0644\u0644\u0643\u0644",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"\u0627\u0631\u062a\u0641\u0627\u0639","box_width":"\u0639\u0631\u0636","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"\u0645\u062d\u0627\u0632\u0627\u0647 \u0631\u0623\u0633\u064a\u0647","block_letterspacing":"\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u062d\u0631\u0648\u0641","block_wordspacing":"\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u0643\u0644\u0645\u0627\u062a","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"\u0645\u0631\u0641\u0642\u0627\u062a","background_repeat":"\u062a\u0643\u0631\u0627\u0631","background_image":"\u0635\u0648\u0631\u0629 \u0627\u0644\u062e\u0644\u0641\u064a\u0647","background_color":"\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0647","text_none":"\u0644\u0627 \u0634\u0626","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"\u062a\u062d\u062a\u0647 \u062e\u0637","text_overline":"\u0641\u0648\u0642\u0647 \u062e\u0637","text_decoration":"Decoration","text_color":"\u0644\u0648\u0646",text:"\u0646\u0635",background:"\u0627\u0644\u062e\u0644\u0641\u064a\u0629",block:"\u0628\u0644\u0648\u0643",box:"\u0635\u0646\u062f\u0648\u0642",border:"\u062d\u062f\u0648\u062f",list:"\u0642\u0627\u0626\u0645\u0629"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/az_dlg.js
new file mode 100644
index 000000000..81d8cdca5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.style_dlg',{"text_lineheight":"S\u0259tr h\u00fcnd\u00fcrl\u00fcy\u00fc","text_variant":"Variant","text_style":"Stil","text_weight":"\u00c7\u0259kisi","text_size":"\u00d6l\u00e7\u00fcs\u00fc","text_font":"\u015erift","text_props":"M\u0259tn","positioning_tab":"M\u00f6vqe","list_tab":"Siyah\u0131","border_tab":"S\u0259rh\u0259d","box_tab":"Konteyner","block_tab":"Blok","background_tab":"Fon","text_tab":"M\u0259tn",apply:"T\u0259tbiq et",title:"CSS stili redakt\u0259 et",clip:"K\u0259sm\u0259k",placement:"Yerl\u0259\u015fdirm\u0259",overflow:"Axma",zindex:"Z-indeks",visibility:"G\u00f6r\u00fcn\u00fc\u015f","positioning_type":"N\u00f6v",position:"M\u00f6vqe","bullet_image":"Marker \u015f\u0259kli","list_type":"N\u00f6v",color:"R\u0259ng",height:"H\u00fcnd\u00fcrl\u00fck",width:"En",style:"Stil",margin:"Sah\u0259l\u0259r",left:"Soldan",bottom:"A\u015fa\u011f\u0131dan",right:"Sa\u011fdan",top:"Yuxar\u0131dan",same:"Ham\u0131s\u0131 \u00fc\u00e7\u00fcn eyni",padding:"Doldurma","box_clear":"T\u0259mizl\u0259","box_float":"\u00dcz\u0259n","box_height":"Uzunlu\u011fu","box_width":"Eni","block_display":"N\u00fcmayis","block_whitespace":"Bo\u015fluq","block_text_indent":"M\u0259tn bo\u015flu\u011fu","block_text_align":"M\u0259tn tara\u015fla\u015fd\u0131r\u0131lmas\u0131","block_vertical_alignment":"\u015eaquli tarazla\u015fd\u0131r\u0131lma","block_letterspacing":"Simvol aras\u0131 bo\u015fluqlar","block_wordspacing":"S\u00f6zaras\u0131 bo\u015fluqlar","background_vpos":"\u015eaquli m\u00f6vqe","background_hpos":"\u00dcf\u00fcqi m\u00f6vqe","background_attachment":"B\u0259rkitm\u0259k","background_repeat":"T\u0259krar","background_image":"fon \u015f\u0259kli","background_color":"Fon r\u0259ngi","text_none":"he\u00e7 biri","text_blink":"Yan\u0131b-s\u00f6n\u0259n","text_case":"Registr","text_striketrough":"\u00fcst\u00fcnd\u0259n x\u0259tt","text_underline":"alt\u0131ndan x\u0259tt","text_overline":"\u00fcz\u0259rind\u0259n x\u0259tt","text_decoration":"B\u0259z\u0259k","text_color":"\u015e\u0259kil",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/be_dlg.js
new file mode 100644
index 000000000..b4c731595
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.style_dlg',{"text_lineheight":"\u0412\u044b\u0448\u044b\u043d\u044f \u0440\u0430\u0434\u043a\u0430","text_variant":"\u0412\u0430\u0440\u044b\u044f\u043d\u0442","text_style":"\u0421\u0442\u044b\u043b\u044c","text_weight":"\u0422\u0430\u045e\u0448\u0447\u044b\u043d\u044f","text_size":"\u041f\u0430\u043c\u0435\u0440","text_font":"\u0428\u0440\u044b\u0444\u0442","text_props":"\u0422\u044d\u043a\u0441\u0442","positioning_tab":"\u041f\u0430\u0437\u0456\u0446\u044b\u044f\u043d\u0430\u0432\u0430\u043d\u043d\u0435","list_tab":"\u0421\u043f\u0456\u0441","border_tab":"\u041c\u044f\u0436\u0430","box_tab":"\u041a\u0430\u043d\u0442\u044d\u0439\u043d\u0435\u0440","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0424\u043e\u043d","text_tab":"\u0422\u044d\u043a\u0441\u0442",apply:"\u0423\u0436\u044b\u0446\u044c",title:"\u0420\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u0442\u044b\u043b\u044c CSS",clip:"\u0410\u0431\u0440\u0430\u0437\u0430\u043d\u043d\u0435",placement:"\u0420\u0430\u0437\u043c\u044f\u0448\u0447\u044d\u043d\u043d\u0435",overflow:"\u041f\u0435\u0440\u0430\u043f\u0430\u045e\u043d\u0435\u043d\u043d\u0435",zindex:"Z-\u0430\u0437\u043d\u0430\u0447\u043d\u0456\u043a",visibility:"\u0411\u0430\u0447\u043d\u0430\u0441\u0446\u044c","positioning_type":"\u0422\u044b\u043f",position:"\u041f\u0430\u0437\u0456\u0446\u044b\u044f","bullet_image":"\u041c\u0430\u0440\u043a\u0435\u0440","list_type":"\u0422\u044b\u043f",color:"\u041a\u043e\u043b\u0435\u0440",height:"\u0412\u044b\u0448\u044b\u043d\u044f",width:"\u0428\u044b\u0440\u044b\u043d\u044f",style:"\u0421\u0442\u044b\u043b\u044c",margin:"\u0412\u043e\u0434\u0441\u0442\u0443\u043f",left:"\u0417\u043b\u0435\u0432\u0430",bottom:"\u0417\u043d\u0456\u0437\u0443",right:"\u0421\u043f\u0440\u0430\u0432\u0430",top:"\u0417\u0432\u0435\u0440\u0445\u0443",same:"\u0410\u0434\u043d\u043e\u043b\u044c\u043a\u0430\u0432\u0430 \u0434\u043b\u044f \u045e\u0441\u0456\u0445",padding:"\u041f\u0430\u043b\u0456","box_clear":"\u0410\u0447\u044b\u0441\u0446\u0456\u0446\u044c","box_float":"\u041f\u043b\u0430\u0432\u0430\u044e\u0447\u044b","box_height":"\u0412\u044b\u0448\u044b\u043d\u044f","box_width":"\u0428\u044b\u0440\u044b\u043d\u044f","block_display":"\u0410\u0434\u043b\u044e\u0441\u0442\u0440\u0430\u0432\u0430\u043d\u043d\u0435","block_whitespace":"\u041f\u0440\u0430\u0431\u0435\u043b","block_text_indent":"\u0412\u043e\u0434\u0441\u0442\u0443\u043f \u0442\u044d\u043a\u0441\u0442\u0443","block_text_align":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435 \u0442\u044d\u043a\u0441\u0442\u0443","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u0430\u0435 \u0432\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435","block_letterspacing":"\u041f\u0440\u0430\u043c\u0435\u0436\u043a\u0456 \u043f\u0430\u043c\u0456\u0436 \u043b\u0456\u0442\u0430\u0440\u0430\u043c\u0456","block_wordspacing":"\u041f\u0440\u0430\u043c\u0435\u0436\u043a\u0456 \u043f\u0430\u043c\u0456\u0436 \u0441\u043b\u043e\u0432\u0430\u043c\u0456","background_vpos":"\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u0437\u0456\u0446\u044b\u044f","background_hpos":"\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0430\u0437\u0456\u0446\u044b\u044f","background_attachment":"\u041f\u0440\u044b\u043c\u0430\u0446\u0430\u0432\u0430\u043d\u043d\u0435","background_repeat":"\u041f\u0430\u045e\u0442\u043e\u0440","background_image":"\u0424\u043e\u043d\u0430\u0432\u044b \u043c\u0430\u043b\u044e\u043d\u0430\u043a","background_color":"\u041a\u043e\u043b\u0435\u0440 \u0444\u043e\u043d\u0443","text_none":"\u0411\u0435\u0437 \u0443\u0441\u044f\u0433\u043e","text_blink":"\u041c\u0456\u0433\u0430\u0442\u043b\u0456\u0432\u044b","text_case":"\u0420\u044d\u0433\u0456\u0441\u0442\u0440","text_striketrough":"\u041f\u0435\u0440\u0430\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","text_underline":"\u041f\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","text_overline":"\u041d\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","text_decoration":"\u0410\u0444\u0430\u0440\u043c\u043b\u0435\u043d\u043d\u0435","text_color":"\u041a\u043e\u043b\u0435\u0440",text:"\u0422\u044d\u043a\u0441\u0442",background:"\u0424\u043e\u043d",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u0430\u043d\u0442\u044d\u0439\u043d\u0435\u0440",border:"\u041c\u044f\u0436\u0430",list:"\u0421\u043f\u0456\u0441"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bg_dlg.js
new file mode 100644
index 000000000..1be3bbab8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.style_dlg',{"text_lineheight":"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430 \u043d\u0430 \u0440\u0435\u0434\u0430","text_variant":"\u041f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432","text_style":"\u0421\u0442\u0438\u043b","text_weight":"\u0422\u0435\u0433\u043b\u043e","text_size":"\u0420\u0430\u0437\u043c\u0435\u0440","text_font":"\u0428\u0440\u0438\u0444\u0442","text_props":"\u0422\u0435\u043a\u0441\u0442","positioning_tab":"\u041f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0430\u043d\u0435","list_tab":"\u0421\u043f\u0438\u0441\u044a\u043a","border_tab":"\u0420\u0430\u043c\u043a\u0430","box_tab":"\u041a\u0443\u0442\u0438\u044f","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0424\u043e\u043d","text_tab":"\u0422\u0435\u043a\u0441\u0442",apply:"\u041f\u043e\u0442\u0432\u044a\u0440\u0434\u0438",title:"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 CSS \u0441\u0442\u0438\u043b",clip:"\u041e\u0442\u0440\u0435\u0436\u0438",placement:"\u0420\u0430\u0437\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435",overflow:"Overflow",zindex:"Z-\u0438\u043d\u0434\u0435\u043a\u0441",visibility:"\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442","positioning_type":"\u0422\u0438\u043f",position:"\u041f\u043e\u0437\u0438\u0446\u0438\u044f","bullet_image":"\u0413\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430 \u0432\u043e\u0434\u0430\u0447\u0438\u0442\u0435","list_type":"\u0422\u0438\u043f",color:"\u0426\u0432\u044f\u0442",height:"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",style:"\u0421\u0442\u0438\u043b",margin:"\u041e\u0442\u0441\u0442\u044a\u043f \u043e\u0442\u0432\u044a\u043d",left:"\u041b\u044f\u0432\u043e",bottom:"\u0414\u043e\u043b\u0443",right:"\u0414\u044f\u0441\u043d\u043e",top:"\u0413\u043e\u0440\u0435",same:"\u0417\u0430 \u0432\u0441\u0438\u0447\u043a\u0438",padding:"\u041e\u0442\u0441\u0442\u044a\u043f \u043d\u0430\u0432\u044a\u0442\u0440\u0435","box_clear":"\u0418\u0437\u0447\u0438\u0441\u0442\u0438","box_float":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","box_height":"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430","box_width":"\u0428\u0438\u0440\u0438\u043d\u0430","block_display":"\u041f\u043e\u043a\u0430\u0437\u0432\u0430\u043d\u0435","block_whitespace":"\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b","block_text_indent":"\u041e\u0442\u0441\u0442\u044a\u043f \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430","block_text_align":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","block_letterspacing":"\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0431\u0443\u043a\u0432\u0438\u0442\u0435","block_wordspacing":"\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0434\u0443\u043c\u0438\u0442\u0435","background_vpos":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f","background_hpos":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044f","background_attachment":"\u041f\u0440\u0438\u043a\u0440\u0435\u043f\u0438","background_repeat":"\u041f\u043e\u0432\u0442\u043e\u0440\u0438","background_image":"\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0437\u0430 \u0444\u043e\u043d","background_color":"\u0426\u0432\u044f\u0442 \u0437\u0430 \u0444\u043e\u043d","text_none":"\u043d\u0438\u0449\u043e","text_blink":"\u043c\u0438\u0433\u0430","text_case":"\u0420\u0435\u0433\u0438\u0441\u0442\u044a\u0440","text_striketrough":"\u0437\u0430\u0447\u0435\u0440\u0442\u0430\u043d","text_underline":"\u043f\u043e\u0434\u0447\u0435\u0440\u0442\u0430\u043d","text_overline":"\u043d\u0430\u0434\u0447\u0435\u0440\u0442\u0430\u043d","text_decoration":"\u0414\u0435\u043a\u043e\u0440\u0430\u0446\u0438\u044f","text_color":"\u0426\u0432\u044f\u0442",text:"\u0422\u0435\u043a\u0441\u0442",background:"\u0424\u043e\u043d",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u0443\u0442\u0438\u044f",border:"\u0420\u0430\u043c\u043a\u0430",list:"\u0421\u043f\u0438\u0441\u044a\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bn_dlg.js
new file mode 100644
index 000000000..77db89017
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/br_dlg.js
new file mode 100644
index 000000000..c8cabcd28
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.style_dlg',{"text_lineheight":"Altura da linha","text_variant":"Variante","text_style":"Estilo","text_weight":"Peso","text_size":"Tamanho","text_font":"Fonte","text_props":"Texto","positioning_tab":"Posicionamento","list_tab":"Lista","border_tab":"Limites","box_tab":"Caixa","block_tab":"Bloco","background_tab":"Fundo","text_tab":"Texto",apply:"Aplicar",title:"Editar CSS",clip:"Clip",placement:"Posicionamento",overflow:"Overflow",zindex:"Z-index",visibility:"Visibilidade","positioning_type":"Tipo",position:"Posi\u00e7\u00e3o","bullet_image":"Imagem de lista","list_type":"Tipo",color:"Cor",height:"Altura",width:"Largura",style:"Estilo",margin:"Margem",left:"Esquerda",bottom:"Abaixo",right:"Direita",top:"Topo",same:"O mesmo para todos",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Altura","box_width":"Largura","block_display":"Display","block_whitespace":"Espa\u00e7o","block_text_indent":"Indent","block_text_align":"Alinhamento de texto","block_vertical_alignment":"Alinhamento vertical","block_letterspacing":"Espa\u00e7amento de letras","block_wordspacing":"Espa\u00e7amento de palavras","background_vpos":"Posi\u00e7\u00e3o vertical","background_hpos":"Posi\u00e7\u00e3o horizontal","background_attachment":"Fixar","background_repeat":"Repetir","background_image":"Imagem de fundo","background_color":"Cor de fundo","text_none":"nenhum","text_blink":"Piscar","text_case":"Mai\u00fascula/min\u00fascula","text_striketrough":"Riscado","text_underline":"Sublinhado","text_overline":"Sobrelinha","text_decoration":"Decora\u00e7\u00e3o","text_color":"Cor",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bs_dlg.js
new file mode 100644
index 000000000..56bd50590
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ca_dlg.js
new file mode 100644
index 000000000..466109a0f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.style_dlg',{"text_lineheight":"Al\u00e7ada de l\u00ednia","text_variant":"Variant","text_style":"Estil","text_weight":"Pes","text_size":"Mida","text_font":"Font","text_props":"Text","positioning_tab":"Posicionament","list_tab":"Llista","border_tab":"Contorn","box_tab":"Quadre","block_tab":"Bloc","background_tab":"Fons","text_tab":"Text",apply:"Aplica",title:"Edita l\'estil CSS",clip:"Retall",placement:"Empla\u00e7ament",overflow:"Desbordament",zindex:"\u00cdndex Z",visibility:"Visibilitat","positioning_type":"Tipus",position:"Posici\u00f3","bullet_image":"Imatge pic","list_type":"Tipus",color:"Color",height:"Al\u00e7ada",width:"Amplada",style:"Estil",margin:"Marge",left:"Esquerra",bottom:"Avall",right:"Dreta",top:"Dalt",same:"Igual per a tot",padding:"Separaci\u00f3","box_clear":"Buida","box_float":"Flota","box_height":"Al\u00e7ada","box_width":"Amplada","block_display":"Visualitzaci\u00f3","block_whitespace":"Espai en blanc","block_text_indent":"Sagna el text","block_text_align":"Alinea el text","block_vertical_alignment":"Alineaci\u00f3 vertical","block_letterspacing":"Espaiat entre lletres","block_wordspacing":"Espaiat entre paraules","background_vpos":"Posici\u00f3 vertical","background_hpos":"Posici\u00f3 horitzontal","background_attachment":"Adjunt","background_repeat":"Repeteix","background_image":"Imatge de fons","background_color":"Color de fons","text_none":"cap","text_blink":"parpelleig","text_case":"Cas","text_striketrough":"barrat","text_underline":"subratllat","text_overline":"sobreratllat","text_decoration":"Decoraci\u00f3","text_color":"Color",text:"Text",background:"Fons",block:"Bloc",box:"Caixa",border:"Contorn",list:"Llista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ch_dlg.js
new file mode 100644
index 000000000..b2bfe0b79
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u53d8\u91cf","text_style":"\u6837\u5f0f","text_weight":"\u5b57\u91cd","text_size":"\u6587\u5b57\u5927\u5c0f","text_font":"\u5b57\u4f53","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u65b9\u5757","block_tab":"\u533a\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5957\u7528",title:"\u7f16\u8f91 CSS \u6837\u5f0f\u8868",clip:"\u526a\u8f91",placement:"\u653e\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z-\u5750\u6807",visibility:"\u53ef\u89c1","positioning_type":"\u7c7b\u578b",position:"\u4f4d\u7f6e","bullet_image":"\u56fe\u7247\u9879\u76ee\u7b26\u53f7","list_type":"\u7c7b\u8868\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8",width:"\u5bbd",style:"\u6837\u5f0f",margin:"\u5916\u8fb9\u8ddd",left:"\u5de6\u4fa7",bottom:"\u9760\u4e0b",right:"\u53f3\u4fa7",top:"\u5b9a\u90e8",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5185\u8fb9\u8ddd","box_clear":"\u6e05\u9664\u6d6e\u52a8","box_float":"\u6d6e\u52a8","box_height":"\u9ad8","box_width":"\u5bbd","block_display":"\u663e\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7f29\u6392","block_text_align":"\u6587\u5b57\u5bf9\u9f50","block_vertical_alignment":"\u5782\u76f4\u5bf9\u9f50","block_letterspacing":"\u5b57\u6bcd\u95f4\u8ddd","block_wordspacing":"\u95f4\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u578b","text_striketrough":"\u5220\u9664\u7ebf","text_underline":"\u5e95\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u88c5\u9970","text_color":"\u989c\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cn_dlg.js
new file mode 100644
index 000000000..b5bebff98
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u6587\u672c\u53d8\u91cf\uff08\u4e2d\u6587\u65e0\u6548\uff09","text_style":"\u6837\u5f0f","text_weight":"\u9ad8\u5ea6","text_size":"\u5b57\u4f53\u5927\u5c0f","text_font":"\u5b57\u4f53","text_props":"\u6587\u672c","positioning_tab":"\u653e\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u65b9\u5757","block_tab":"\u533a\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u672c",apply:"\u5e94\u7528",title:"\u7f16\u8f91CSS\u6837\u5f0f",clip:"\u526a\u8f91",placement:"\u653e\u7f6e",overflow:"\u6ea2\u51fa",zindex:"\u5143\u7d20\u5806\u53e0\u987a\u5e8f\uff08Z-index)",visibility:"\u53ef\u89c1","positioning_type":"\u7c7b\u578b",position:"\u4f4d\u7f6e","bullet_image":"\u56fe\u7247\u9879\u76ee\u7b26\u53f7","list_type":"\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",style:"\u6837\u5f0f",margin:"\u5916\u8fb9\u6846",left:"\u5de6\u4fa7",bottom:"\u5e95\u90e8",right:"\u53f3\u4fa7",top:"\u9876\u90e8",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5185\u8fb9\u6846","box_clear":"\u6e05\u9664\u6d6e\u52a8","box_float":"\u6d6e\u52a8","box_height":"\u9ad8\u5ea6","box_width":"\u5bbd\u5ea6","block_display":"\u663e\u793a\u65b9\u5f0f","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u672c\u7f29\u8fdb","block_text_align":"\u6587\u672c\u5bf9\u9f50\u65b9\u5f0f","block_vertical_alignment":"\u5782\u76f4\u5bf9\u9f50","block_letterspacing":"\u5b57\u6bcd\u95f4\u8ddd","block_wordspacing":"\u95f4\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u578b","text_striketrough":"\u5220\u9664\u7ebf","text_underline":"\u4e0b\u5212\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u88c5\u9970","text_color":"\u989c\u8272",text:"\u6587\u672c",background:"\u80cc\u666f",block:"\u533a\u5757",box:"\u76d2\u6a21\u5f0f",border:"\u8fb9\u6846",list:"\u5217\u8868"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cs_dlg.js
new file mode 100644
index 000000000..8e6dc60cc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.style_dlg',{"text_lineheight":"V\u00fd\u0161ka \u0159\u00e1dku","text_variant":"Varianta","text_style":"Styl textu","text_weight":"Tu\u010dnost p\u00edsma","text_size":"Velikost","text_font":"P\u00edsmo","text_props":"Text","positioning_tab":"Um\u00edst\u011bn\u00ed","list_tab":"Seznam","border_tab":"Ohrani\u010den\u00ed","box_tab":"Box","block_tab":"Blok","background_tab":"Pozad\u00ed","text_tab":"Text",apply:"Pou\u017e\u00edt",title:"Upravit CSS styl",clip:"O\u0159ez\u00e1n\u00ed (clip)",placement:"Um\u00edst\u011bni",overflow:"P\u0159ete\u010den\u00ed (overflow)",zindex:"Z-index",visibility:"Viditelnost","positioning_type":"Typ",position:"Um\u00edst\u011bn\u00ed","bullet_image":"Styl odr\u00e1\u017eek","list_type":"Typ",color:"Barva",height:"V\u00fd\u0161ka",width:"\u0160\u00ed\u0159ka",style:"Styl",margin:"Okraje (margin)",left:"Vlevo",bottom:"Dole",right:"Vpravo",top:"Naho\u0159e",same:"Stejn\u00e9 pro v\u0161echny",padding:"Odsazen\u00ed (padding)","box_clear":"Vy\u010distit","box_float":"Plovouc\u00ed","box_height":"V\u00fd\u0161ka","box_width":"\u0160\u00ed\u0159ka","block_display":"Blokov\u00e9 zobrazen\u00ed","block_whitespace":"Zalamov\u00e1n\u00ed textu","block_text_indent":"Odsazen\u00ed textu","block_text_align":"Zarovn\u00e1n\u00ed textu","block_vertical_alignment":"Vertik\u00e1ln\u00ed zarovn\u00e1n\u00ed","block_letterspacing":"Rozestup znak\u016f","block_wordspacing":"Rozestup slov","background_vpos":"Vertik\u00e1ln\u00ed um\u00edst\u011bn\u00ed","background_hpos":"Horizont\u00e1ln\u00ed um\u00edst\u011bn\u00ed","background_attachment":"Rolov\u00e1n\u00ed","background_repeat":"Opakov\u00e1n\u00ed","background_image":"Obr\u00e1zek pozad\u00ed","background_color":"Barva pozad\u00ed","text_none":"\u017d\u00e1dn\u00e1","text_blink":"Blik\u00e1n\u00ed","text_case":"Velk\u00e1 p\u00edsmena","text_striketrough":"P\u0159e\u0161krtnut\u00ed","text_underline":"Podtr\u017een\u00ed","text_overline":"Nadtr\u017een\u00ed","text_decoration":"Dekorace","text_color":"Barva",text:"Text",background:"Pozad\u00ed",block:"Blok",box:"Box",border:"Okraj",list:"Seznam"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cy_dlg.js
new file mode 100644
index 000000000..3b5515510
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.style_dlg',{"text_lineheight":"Uchder Llinell","text_variant":"Amrywiad","text_style":"Arddull","text_weight":"Pwysau","text_size":"Maint","text_font":"Ffont","text_props":"Testun","positioning_tab":"Lleoli","list_tab":"Rhestr","border_tab":"Border","box_tab":"Blwch","block_tab":"Bloc","background_tab":"Cefndir","text_tab":"Testun",apply:"Gosod",title:"Golygu Arddull CSS",clip:"Clip",placement:"Gosodiad",overflow:"Gorlif",zindex:"Indecs-Z",visibility:"Gwelededd","positioning_type":"Math",position:"Lleoliad","bullet_image":"Delwedd bwled","list_type":"Math",color:"Lliw",height:"Uchder",width:"Lled",style:"Arddull",margin:"Ymyl",left:"Chwith",bottom:"Gwaelod",right:"De",top:"Pen",same:"Yr un ar gyfer pob un",padding:"Padio","box_clear":"Clirio","box_float":"Arnofio","box_height":"Uchder","box_width":"Lled","block_display":"Arddangos","block_whitespace":"Whitespace","block_text_indent":"Mewnoliad testun","block_text_align":"Aliniad testun","block_vertical_alignment":"Aliniad fertigol","block_letterspacing":"Bylchiad llythyren","block_wordspacing":"Bylchiad gair","background_vpos":"Lleoliad fertigol","background_hpos":"Lleoliad llorweddol","background_attachment":"Atodiad","background_repeat":"Ailadrodd","background_image":"Delwedd cefndir","background_color":"Lliw cefndir","text_none":"Dim un","text_blink":"Blincio","text_case":"Llythrennau bach/mawr","text_striketrough":"Taro drwodd","text_underline":"Tanlinellu","text_overline":"Uwchlinellu","text_decoration":"Addurniadau","text_color":"Lliw",text:"Testun",background:"Cefndir",block:"Bloc",box:"Blwch",border:"Border",list:"Rhestr"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/da_dlg.js
new file mode 100644
index 000000000..733249f1d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.style_dlg',{"text_lineheight":"Linieh\u00f8jde","text_variant":"Variant","text_style":"Stil","text_weight":"V\u00e6gt","text_size":"St\u00f8rrelse","text_font":"Skrifttype","text_props":"Tekst","positioning_tab":"Positionering","list_tab":"Liste","border_tab":"Kant","box_tab":"Boks","block_tab":"Blok","background_tab":"Baggrund","text_tab":"Tekst",apply:"Anvend",title:"Rediger CSS stil",clip:"Klip",placement:"Placering",overflow:"Overl\u00f8b",zindex:"Z-index",visibility:"Synlighed","positioning_type":"Type",position:"Position","bullet_image":"Punktopstillings-billede","list_type":"Type",color:"Farve",height:"H\u00f8jde",width:"Bredde",style:"Style",margin:"Margin",left:"Venstre",bottom:"Bund",right:"H\u00f8jre",top:"Top",same:"Ens for alle",padding:"Afstand til indhold","box_clear":"Ryd","box_float":"Flydende","box_height":"H\u00f8jde","box_width":"Bredde","block_display":"Vis","block_whitespace":"Mellemrum","block_text_indent":"Tekstindrykning","block_text_align":"Tekstjustering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Afstand mellem bogstaver","block_wordspacing":"Afstand mellem ord","background_vpos":"Vertikal position","background_hpos":"Horisontal position","background_attachment":"Vedh\u00e6ftede fil","background_repeat":"Gentag","background_image":"Baggrundsbillede","background_color":"Baggrundsfarve","text_none":"ingen","text_blink":"blink","text_case":"Vesaltilstand","text_striketrough":"gennemstreget","text_underline":"understreget","text_overline":"overstreget","text_decoration":"Dekoration","text_color":"Farve",text:"Tekst",background:"Baggrund",block:"Blok",box:"Boks",border:"Kant",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/de_dlg.js
new file mode 100644
index 000000000..ad04664e1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.style_dlg',{"text_lineheight":"Zeilenh\u00f6he","text_variant":"Variante","text_style":"Stil","text_weight":"Dicke","text_size":"Gr\u00f6\u00dfe","text_font":"Schriftart","text_props":"Text","positioning_tab":"Positionierung","list_tab":"Liste","border_tab":"Rahmen","box_tab":"Box","block_tab":"Block","background_tab":"Hintergrund","text_tab":"Text",apply:"\u00dcbernehmen",title:"CSS-Styles bearbeiten",clip:"Ausschnitt",placement:"Platzierung",overflow:"Verhalten bei \u00dcbergr\u00f6\u00dfe",zindex:"Z-Wert",visibility:"Sichtbar","positioning_type":"Art der Positionierung",position:"Positionierung","bullet_image":"Listenpunkt-Grafik","list_type":"Listenpunkt-Art",color:"Textfarbe",height:"H\u00f6he",width:"Breite",style:"Format",margin:"\u00c4u\u00dferer Abstand",left:"Links",bottom:"Unten",right:"Rechts",top:"Oben",same:"Alle gleich",padding:"Innerer Abstand","box_clear":"Umflie\u00dfung verhindern","box_float":"Umflie\u00dfung","box_height":"H\u00f6he","box_width":"Breite","block_display":"Umbruchverhalten","block_whitespace":"Automatischer Umbruch","block_text_indent":"Einr\u00fcckung","block_text_align":"Ausrichtung","block_vertical_alignment":"Vertikale Ausrichtung","block_letterspacing":"Buchstabenabstand","block_wordspacing":"Wortabstand","background_vpos":"Position Y","background_hpos":"Position X","background_attachment":"Wasserzeicheneffekt","background_repeat":"Wiederholung","background_image":"Hintergrundbild","background_color":"Hintergrundfarbe","text_none":"keine","text_blink":"blinkend","text_case":"Schreibung","text_striketrough":"durchgestrichen","text_underline":"unterstrichen","text_overline":"\u00fcberstrichen","text_decoration":"Gestaltung","text_color":"Farbe",text:"Text",background:"Hintergrund",block:"Block",box:"Box",border:"Rahmen",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/dv_dlg.js
new file mode 100644
index 000000000..34ef37fb1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/el_dlg.js
new file mode 100644
index 000000000..8ae651b6e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.style_dlg',{"text_lineheight":"\u038e\u03c8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","text_variant":"\u03a0\u03b1\u03c1\u03b1\u03bb\u03bb\u03b1\u03b3\u03ae","text_style":"\u03a3\u03c4\u03c5\u03bb","text_weight":"\u0392\u03ac\u03c1\u03bf\u03c2","text_size":"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd","text_font":"\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac","text_props":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf","positioning_tab":"\u03a4\u03bf\u03c0\u03bf\u03b8\u03ad\u03c4\u03b7\u03c3\u03b7","list_tab":"\u039b\u03af\u03c3\u03c4\u03b1","border_tab":"\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf","box_tab":"\u039a\u03bf\u03c5\u03c4\u03af","block_tab":"\u039c\u03c0\u03bb\u03bf\u03ba","background_tab":"\u03a6\u03cc\u03bd\u03c4\u03bf","text_tab":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf",apply:"\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae",title:"\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03a3\u03c4\u03c5\u03bb CSS",clip:"Clip",placement:"\u03a4\u03bf\u03c0\u03bf\u03b8\u03ad\u03c4\u03b7\u03c3\u03b7",overflow:"\u03a5\u03c0\u03b5\u03c1\u03c7\u03b5\u03af\u03bb\u03b9\u03c3\u03b7",zindex:"Z-index",visibility:"\u039f\u03c1\u03b1\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1","positioning_type":"\u03a4\u03cd\u03c0\u03bf\u03c2",position:"\u0398\u03ad\u03c3\u03b7","bullet_image":"\u0395\u03b9\u03ba\u03cc\u03bd\u03b1 \u03c4\u03b5\u03bb\u03b5\u03af\u03b1\u03c2","list_type":"\u03a4\u03cd\u03c0\u03bf\u03c2",color:"\u03a7\u03c1\u03ce\u03bc\u03b1",height:"\u038e\u03c8\u03bf\u03c2",width:"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",style:"\u03a3\u03c4\u03c5\u03bb",margin:"\u03a0\u03b5\u03c1\u03b9\u03b8\u03ce\u03c1\u03b9\u03bf",left:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",bottom:"\u039a\u03ac\u03c4\u03c9",right:"\u0394\u03b5\u03be\u03b9\u03ac",top:"\u03a0\u03ac\u03bd\u03c9",same:"\u038a\u03b4\u03b9\u03bf \u03b3\u03b9\u03b1 \u03cc\u03bb\u03b1",padding:"\u0393\u03ad\u03bc\u03b9\u03c3\u03bc\u03b1","box_clear":"Clear","box_float":"Float","box_height":"\u038e\u03c8\u03bf\u03c2","box_width":"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2","block_display":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7","block_whitespace":"\u039a\u03b5\u03bd\u03cc\u03c2 \u03c7\u03ce\u03c1\u03bf\u03c2","block_text_indent":"\u0395\u03c3\u03bf\u03c7\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","block_text_align":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","block_vertical_alignment":"\u039a\u03b1\u03c4\u03b1\u03ba\u03cc\u03c1\u03c5\u03c6\u03b7 \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7","block_letterspacing":"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03c9\u03bd","block_wordspacing":"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bb\u03ad\u03be\u03b5\u03c9\u03bd","background_vpos":"\u039a\u03b1\u03c4\u03b1\u03ba\u03cc\u03c1\u03c5\u03c6\u03b7 \u03b8\u03ad\u03c3\u03b7","background_hpos":"\u039f\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03b8\u03ad\u03c3\u03b7","background_attachment":"\u03a0\u03c1\u03bf\u03c3\u03ac\u03c1\u03c4\u03b7\u03bc\u03b1","background_repeat":"\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7","background_image":"\u0395\u03b9\u03ba\u03cc\u03bd\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5","background_color":"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5","text_none":"\u039a\u03b1\u03bc\u03af\u03b1","text_blink":"\u039d\u03b1 \u03b1\u03bd\u03b1\u03b2\u03bf\u03c3\u03b2\u03ae\u03bd\u03b5\u03b9","text_case":"\u039a\u03b5\u03c6./\u039c\u03b9\u03ba\u03c1\u03ac","text_striketrough":"\u0394\u03b9\u03b1\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7","text_underline":"\u03a5\u03c0\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7","text_overline":"\u03a5\u03c0\u03b5\u03c1\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7","text_decoration":"\u0394\u03b9\u03b1\u03ba\u03cc\u03c3\u03bc\u03b7\u03c3\u03b7","text_color":"\u03a7\u03c1\u03ce\u03bc\u03b1",text:"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf",background:"\u03a6\u03cc\u03bd\u03c4\u03bf",border:"\u03a0\u03b5\u03c1\u03af\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1",list:"\u039b\u03af\u03c3\u03c4\u03b1",block:"Block",box:"Box"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/en_dlg.js
new file mode 100644
index 000000000..9a1d4a223
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.style_dlg',{"text_lineheight":"Line Height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet Image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for All",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text Indent","block_text_align":"Text Align","block_vertical_alignment":"Vertical Alignment","block_letterspacing":"Letter Spacing","block_wordspacing":"Word Spacing","background_vpos":"Vertical Position","background_hpos":"Horizontal Position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background Image","background_color":"Background Color","text_none":"None","text_blink":"Blink","text_case":"Case","text_striketrough":"Strikethrough","text_underline":"Underline","text_overline":"Overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/eo_dlg.js
new file mode 100644
index 000000000..29822e8f1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.style_dlg',{"text_lineheight":"Alteco de linio","text_variant":"Varianto","text_style":"Stilo","text_weight":"Pezo","text_size":"Grandeco","text_font":"Tiparo","text_props":"Teksto","positioning_tab":"Pozicio","list_tab":"Listo","border_tab":"Bordero","box_tab":"Skatolo","block_tab":"Bloko","background_tab":"Fono","text_tab":"Teksto",apply:"Apliki",title:"Redakti CSS",clip:"Tondi",placement:"Pozicio",overflow:"Elfluo",zindex:"Z-indekso",visibility:"Videbleco","positioning_type":"Pozicitipo",position:"Pozicio","bullet_image":"Listbildo","list_type":"Tipo",color:"Koloro",height:"Alteco",width:"Lar\u011deco",style:"Stilo",margin:"Mar\u011deno",left:"Maldekstre",bottom:"Sube",right:"Dekstre",top:"Supre",same:"Same por \u0109iuj",padding:"Ena kromspaco","box_clear":"Kvitigi","box_float":"Flosado","box_height":"Alteco","box_width":"Lar\u011deco","block_display":"Montro","block_whitespace":"Spaco","block_text_indent":"Alineo","block_text_align":"Tekstoliniigo","block_vertical_alignment":"Vertikala liniigo","block_letterspacing":"Spaco inter literoj","block_wordspacing":"Spaco inter vortoj","background_vpos":"Vertikala pozicio","background_hpos":"Horizontala pozicio","background_attachment":"Fiksi","background_repeat":"Ripeti","background_image":"Fona bildo","background_color":"Fona koloro","text_none":"Neniu","text_blink":"Lumpulsi","text_case":"Majuskle","text_striketrough":"Strekite","text_underline":"Substrekite","text_overline":"Superstrekite","text_decoration":"Ornamado","text_color":"Koloro",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/es_dlg.js
new file mode 100644
index 000000000..7a63754a7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.style_dlg',{"text_lineheight":"Ancho de la fila","text_variant":"Variante","text_style":"Estilo","text_weight":"Peso","text_size":"Tama\u00f1o","text_font":"Fuente","text_props":"Texto","positioning_tab":"Posicionamiento","list_tab":"Lista","border_tab":"Borde","box_tab":"Caja","block_tab":"Bloque","background_tab":"Fondo","text_tab":"Texto",apply:"Aplicar",title:"Editar Estilo CSS",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibilidad","positioning_type":"Tipo",position:"Posici\u00f3n","bullet_image":"Imagen de la vi\u00f1eta","list_type":"Tipo",color:"Color",height:"Alto",width:"Ancho",style:"Estilo",margin:"Margen",left:"Izquierda",bottom:"Inferior",right:"Derecha",top:"Superior",same:"Lo mismo en todos",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Alto","box_width":"Ancho","block_display":"Display","block_whitespace":"Espacio en blanco","block_text_indent":"Sangr\u00eda","block_text_align":"Alineaci\u00f3n del texto","block_vertical_alignment":"Alineaci\u00f3n vertical","block_letterspacing":"Espacio entre letra","block_wordspacing":"Espacio entre palabra","background_vpos":"Posici\u00f3n vertical","background_hpos":"Posici\u00f3n horizontal","background_attachment":"Adjunto","background_repeat":"Repetici\u00f3n","background_image":"Imagen de fondo","background_color":"Color de fondo","text_none":"Ninguno","text_blink":"Parpadeo","text_case":"Min\u00fas./May\u00fas.","text_striketrough":"Tachado","text_underline":"Subrayado","text_overline":"Subrayado superior","text_decoration":"Decorativos","text_color":"Color",text:"Texto",background:"Fondo",block:"Bloque",box:"Caja",border:"Borde",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/et_dlg.js
new file mode 100644
index 000000000..89de41d8f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.style_dlg',{"text_lineheight":"Joone k\u00f5rgus","text_variant":"Variant","text_style":"Stiil","text_weight":"Raskus","text_size":"Suurus","text_font":"Font","text_props":"Tekst","positioning_tab":"Positsioneerimine","list_tab":"Nimekiri","border_tab":"Raam","box_tab":"Kast","block_tab":"Plokk","background_tab":"Taust","text_tab":"Tekst",apply:"Rakenda",title:"Muuda CSS stiili",clip:"Klipp",placement:"Asetus",overflow:"\u00dclevool",zindex:"Z-viit",visibility:"N\u00e4htavus","positioning_type":"T\u00fc\u00fcp",position:"Positsioon","bullet_image":"Punkt pilt","list_type":"T\u00fc\u00fcp",color:"V\u00e4rv",height:"K\u00f5rgus",width:"Laius",style:"Stiil",margin:"Serv",left:"Vasakul",bottom:"All",right:"Paremal",top:"\u00dcleval",same:"Sama k\u00f5igile",padding:"T\u00e4idis","box_clear":"Puhas","box_float":"H\u00f5ljuv","box_height":"K\u00f5rgus","box_width":"Laius","block_display":"Kuva","block_whitespace":"T\u00fchimik","block_text_indent":"Teksti taandus","block_text_align":"Teksti joondus","block_vertical_alignment":"Vertikaalne joondus","block_letterspacing":"T\u00e4he avardamine","block_wordspacing":"S\u00f5nade avardamine","background_vpos":"Vertikaalne asend","background_hpos":"Horisontaalne asend","background_attachment":"Manus","background_repeat":"Kordus","background_image":"Tausta pilt","background_color":"Tausta v\u00e4rv","text_none":"mitte \u00fckski","text_blink":"vilgutus","text_case":"Kast","text_striketrough":"l\u00e4bikriipsutus","text_underline":"alajoon","text_overline":"\u00fclejoon","text_decoration":"Dekoratioon","text_color":"V\u00e4rv",text:"Tekst",background:"Taust",block:"Plokk",box:"Kast",border:"Joon",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/eu_dlg.js
new file mode 100644
index 000000000..961e98a13
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.style_dlg',{"text_lineheight":"Lerro garaiera","text_variant":"Aldaera","text_style":"Estiloa","text_weight":"Pisua","text_size":"Tamaina","text_font":"Letra-tipoa","text_props":"Testua","positioning_tab":"Kokapena","list_tab":"Zerrenda","border_tab":"Ertza","box_tab":"Kaxa","block_tab":"Blokea","background_tab":"Atzea","text_tab":"Testua",apply:"Apikatu",title:"Aldatu CSS estiloa",clip:"Klip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Ikusgarritasuna","positioning_type":"Mota",position:"Kokapena","bullet_image":"Bulet-irudia","list_type":"Mota",color:"Kolorea",height:"Altuera",width:"Zabalera",style:"Estiloa",margin:"Margina",left:"Ezkerra",bottom:"Behera",right:"Eskuina",top:"Gora",same:"Guztientzat berdina",padding:"Padding","box_clear":"Garbitu","box_float":"Flotatu","box_height":"Altuera","box_width":"Zabalera","block_display":"Erakutsi","block_whitespace":"Zuriunea","block_text_indent":"Koska","block_text_align":"Testu lerrokatzea","block_vertical_alignment":"Lerrokatze bertikala","block_letterspacing":"Letra banaketa","block_wordspacing":"Hitz banaketa","background_vpos":"Posizio bertikala","background_hpos":"Posizio horizontala","background_attachment":"Eranskina","background_repeat":"Errepikatu","background_image":"Atzeko irudia","background_color":"Atzeko kolorea","text_none":"Bat ere ez","text_blink":"Keinada","text_case":"Minus./Maius.","text_striketrough":"Marratua","text_underline":"Azpimarra","text_overline":"Goimarra","text_decoration":"Apaingarriak","text_color":"Kolorea",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fa_dlg.js
new file mode 100644
index 000000000..d00a708b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.style_dlg',{"text_lineheight":"\u0628\u0644\u0646\u062f\u06cc \u062e\u0637","text_variant":"\u0646\u0648\u0639 \u062a\u063a\u06cc\u06cc\u0631","text_style":"\u0627\u0633\u062a\u0627\u06cc\u0644","text_weight":"\u062d\u0627\u0644\u062a","text_size":"\u0627\u0646\u062f\u0627\u0632\u0647","text_font":"\u0642\u0644\u0645","text_props":"\u0645\u062a\u0646","positioning_tab":"\u0645\u0648\u0642\u0639\u06cc\u062a","list_tab":"\u0644\u06cc\u0633\u062a","border_tab":"\u062d\u0627\u0634\u06cc\u0647","box_tab":"\u062c\u0639\u0628\u0647","block_tab":"\u0628\u0644\u0648\u06a9","background_tab":"\u067e\u0633 \u0632\u0645\u06cc\u0646\u0647","text_tab":"\u0645\u062a\u0646",apply:"\u0628\u06a9\u0627\u0631\u06af\u06cc\u0631\u06cc",title:"\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0627\u0633\u062a\u0627\u06cc\u0644 CSS",clip:"\u0628\u0631\u0634 (Clip)",placement:"\u0645\u0648\u0642\u0639\u06cc\u062a \u0645\u06a9\u0627\u0646\u06cc",overflow:"\u0633\u0631 \u0631\u06cc\u0632",zindex:"\u0645\u062d\u0648\u0631 Z",visibility:"\u0642\u0627\u0628\u0644\u06cc\u062a \u0631\u0648\u06cc\u062a","positioning_type":"\u0646\u0648\u0639",position:"\u0645\u0648\u0642\u0639\u06cc\u062a","bullet_image":"\u062a\u0635\u0648\u06cc\u0631 \u06af\u0644\u0648\u0644\u0647","list_type":"\u0646\u0648\u0639",color:"\u0631\u0646\u06af",height:"\u0627\u0631\u062a\u0641\u0627\u0639",width:"\u067e\u0647\u0646\u0627",style:"\u0627\u0633\u062a\u0627\u06cc\u0644",margin:"\u0644\u0628\u0647",left:"\u0686\u067e",bottom:"\u067e\u0627\u06cc\u06cc\u0646",right:"\u0631\u0627\u0633\u062a",top:"\u0628\u0627\u0644\u0627",same:"\u0647\u0645\u0633\u0627\u0646 \u0628\u0631\u0627\u06cc \u0647\u0645\u0647",padding:"\u0644\u0627\u06cc\u0647 \u06af\u0630\u0627\u0631\u06cc","box_clear":"\u067e\u0627\u06a9 \u0633\u0627\u0632\u06cc","box_float":"\u0634\u0646\u0627\u0648\u0631","box_height":"\u0627\u0631\u062a\u0641\u0627\u0639","box_width":"\u067e\u0647\u0646\u0627","block_display":"\u0646\u0645\u0627\u06cc\u0634","block_whitespace":"\u0641\u0627\u0635\u0644\u0647 \u0633\u0641\u06cc\u062f","block_text_indent":"\u062a\u0648\u0631\u0641\u062a\u06af\u06cc \u0645\u062a\u0646","block_text_align":"\u062a\u0631\u0627\u0632 \u0645\u062a\u0646","block_vertical_alignment":"\u062a\u0631\u0627\u0632 \u0639\u0645\u0648\u062f\u06cc","block_letterspacing":"\u0641\u0627\u0635\u0644\u0647 \u062d\u0631\u0648\u0641","block_wordspacing":"\u0641\u0627\u0635\u0644\u0647 \u06a9\u0644\u0645\u0627\u062a","background_vpos":"\u0645\u0648\u0642\u0639\u06cc\u062a \u0639\u0645\u0648\u062f\u06cc","background_hpos":"\u0645\u0648\u0642\u0639\u06cc\u062a \u0627\u0641\u0642\u06cc","background_attachment":"\u0641\u0627\u06cc\u0644 \u0636\u0645\u06cc\u0645\u0647","background_repeat":"\u062a\u06a9\u0631\u0627\u0631","background_image":"\u062a\u0635\u0648\u06cc\u0631 \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647","background_color":"\u0631\u0646\u06af \u067e\u0633 \u0632\u0645\u06cc\u0646\u0647","text_none":"\u0647\u06cc\u0686 \u06a9\u062f\u0627\u0645","text_blink":"\u0686\u0634\u0645\u06a9 \u0632\u0646","text_case":"\u062d\u0627\u0644\u062a","text_striketrough":"\u062e\u0637 \u062e\u0648\u0631\u062f\u0647","text_underline":"\u0632\u06cc\u0631 \u062e\u0637","text_overline":"\u0628\u0627\u0644\u0627 \u062e\u0637","text_decoration":"\u0622\u0631\u0627\u06cc\u0634","text_color":"\u0631\u0646\u06af",text:"\u0645\u062a\u0646",background:"\u067e\u0633 \u0632\u0645\u06cc\u0646\u0647",block:"\u0628\u0644\u0648\u06a9",box:"\u062c\u0639\u0628\u0647",border:"\u062d\u0627\u0634\u06cc\u0647",list:"\u0644\u06cc\u0633\u062a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fi_dlg.js
new file mode 100644
index 000000000..4f174cc71
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.style_dlg',{"text_lineheight":"Rivin korkeus","text_variant":"Variantti","text_style":"Tyyli","text_weight":"Paino","text_size":"Koko","text_font":"Kirjasin","text_props":"Teksti","positioning_tab":"Sijainti","list_tab":"Lista","border_tab":"Kehys","box_tab":"Laatikko","block_tab":"Palkki","background_tab":"Tausta","text_tab":"Teksti",apply:"K\u00e4yt\u00e4",title:"Muokkaa CSS-tyyli\u00e4",clip:"Leike",placement:"Sijoittelu",overflow:"Ylivuoto",zindex:"Z-indeksi",visibility:"N\u00e4kyvyys","positioning_type":"Tyyppi",position:"Sijainti","bullet_image":"Listauskuva","list_type":"Tyyppi",color:"V\u00e4ri",height:"Korkeus",width:"Leveys",style:"Tyyli",margin:"Marginaali",left:"Vasemmalla",bottom:"Alhaalla",right:"Oikealla",top:"Ylh\u00e4\u00e4ll\u00e4",same:"Sama kaikille",padding:"Tyhj\u00e4 tila","box_clear":"Nollaus","box_float":"Kellunta","box_height":"Korkeus","box_width":"Leveys","block_display":"N\u00e4ytt\u00f6","block_whitespace":"Tyhj\u00e4 tila","block_text_indent":"Tekstin sisennys","block_text_align":"Tekstin asettelu","block_vertical_alignment":"Pystyasettelu","block_letterspacing":"Kirjainten v\u00e4listys","block_wordspacing":"Sanojen v\u00e4listys","background_vpos":"Pystyasettelu","background_hpos":"Vaaka-asettelu","background_attachment":"Liite","background_repeat":"Toistuvuus","background_image":"Taustakuva","background_color":"Taustav\u00e4ri","text_none":"ei mit\u00e4\u00e4n","text_blink":"V\u00e4l\u00e4hdys","text_case":"Isot/pienet kirjaimet","text_striketrough":"Yliviivattu","text_underline":"Alleviivattu (Ctrl+U)","text_overline":"Yliviivattu","text_decoration":"Koristelu","text_color":"V\u00e4ri",text:"Teksti",background:"Tausta",block:"Lohko",box:"Laatikko",border:"Reunus",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fr_dlg.js
new file mode 100644
index 000000000..3f7bdb92d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.style_dlg',{"text_lineheight":"Hauteur de ligne","text_variant":"Variante","text_style":"Style","text_weight":"Gras","text_size":"Taille","text_font":"Police","text_props":"Texte","positioning_tab":"Positionnement","list_tab":"Liste","border_tab":"Bordure","box_tab":"Bo\u00eete","block_tab":"Bloc","background_tab":"Fond","text_tab":"Texte",apply:"Appliquer",title:"\u00c9diter la feuille de style",clip:"Clip",placement:"Placement",overflow:"D\u00e9bordement",zindex:"Z-index",visibility:"Visibilit\u00e9","positioning_type":"Type",position:"Position","bullet_image":"Image de puce","list_type":"Type",color:"Couleur",height:"Hauteur",width:"Largeur",style:"Style",margin:"Marge",left:"Gauche",bottom:"Bas",right:"Droit",top:"Haut",same:"Identique pour tous",padding:"Espacement","box_clear":"Vider","box_float":"Flottant","box_height":"Hauteur","box_width":"Largeur","block_display":"Affichage","block_whitespace":"Fin de ligne","block_text_indent":"Indentation du texte","block_text_align":"Alignement du texte","block_vertical_alignment":"Alignement vertical","block_letterspacing":"Espacement des lettres","block_wordspacing":"Espacement des mots ","background_vpos":"Position verticale","background_hpos":"Position horizontale","background_attachment":"Attachement","background_repeat":"R\u00e9p\u00e9ter","background_image":"Image de fond","background_color":"Couleur de fond","text_none":"aucun","text_blink":"clignotant","text_case":"Casse","text_striketrough":"barr\u00e9","text_underline":"soulign\u00e9","text_overline":"ligne au-dessus","text_decoration":"D\u00e9coration","text_color":"Couleur",text:"Texte",background:"Fond",block:"Bloc",box:"Bo\u00eete",border:"Bordure",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/gl_dlg.js
new file mode 100644
index 000000000..e5d85d245
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.style_dlg',{"text_lineheight":"Ancho da fila","text_variant":"Variante","text_style":"Estilo","text_weight":"Peso","text_size":"Tama\u00f1o","text_font":"Fonte","text_props":"Texto","positioning_tab":"Posici\u00f3n","list_tab":"Lista","border_tab":"Borde","box_tab":"Caixa","block_tab":"Bloque","background_tab":"Fondo","text_tab":"Texto",apply:"Aplicar",title:"Editar Estilo CSS",clip:"Clip",placement:"Colocaci\u00f3n",overflow:"Desbodramento",zindex:"\u00cdndize Z",visibility:"Visibilidade","positioning_type":"Tipo",position:"Posici\u00f3n","bullet_image":"Imaxe da vi\u00f1eta","list_type":"Tipo",color:"Cor",height:"Alto",width:"Ancho",style:"Estilo",margin:"Marxe",left:"Esquerda",bottom:"Abaixo",right:"Dereita",top:"Arriba",same:"O mesmo en todos",padding:"Recheo","box_clear":"Limpar","box_float":"Float","box_height":"Alto","box_width":"Ancho","block_display":"Display","block_whitespace":"Espacio en branco","block_text_indent":"Sangr\u00eda","block_text_align":"Ali\u00f1aci\u00f3n do texto","block_vertical_alignment":"Ali\u00f1aci\u00f3n vertical","block_letterspacing":"Espacio entre letras","block_wordspacing":"Espacio entre verbas","background_vpos":"Posici\u00f3n vertical","background_hpos":"Posici\u00f3n horizontal","background_attachment":"Adxunto","background_repeat":"Repetir","background_image":"Imaxe de fondo","background_color":"Cor de fondo","text_none":"Neng\u00fan","text_blink":"Parpadeo","text_case":"Min\u00fas./May\u00fas.","text_striketrough":"Tachado","text_underline":"Suli\u00f1ado","text_overline":"Li\u00f1a superior","text_decoration":"Decorativos","text_color":"Cor",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/gu_dlg.js
new file mode 100644
index 000000000..12303ba24
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/he_dlg.js
new file mode 100644
index 000000000..22680ba67
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.style_dlg',{"text_lineheight":"\u05d2\u05d5\u05d1\u05d4 \u05e9\u05d5\u05e8\u05d4","text_variant":"\u05de\u05e9\u05ea\u05e0\u05d4","text_style":"\u05e1\u05d2\u05e0\u05d5\u05df","text_weight":"\u05e2\u05d5\u05d1\u05d9","text_size":"\u05d2\u05d5\u05d3\u05dc","text_font":"\u05e4\u05d5\u05e0\u05d8","text_props":"\u05d8\u05e7\u05e1\u05d8","positioning_tab":"\u05de\u05d9\u05e7\u05d5\u05dd","list_tab":"\u05e8\u05e9\u05d9\u05de\u05d4","border_tab":"\u05d2\u05d1\u05d5\u05dc","box_tab":"\u05e7\u05d5\u05e4\u05e1\u05d0","block_tab":"\u05d7\u05e1\u05d5\u05dd","background_tab":"\u05e8\u05e7\u05e2","text_tab":"\u05d8\u05e7\u05e1\u05d8",apply:"\u05d4\u05d7\u05dc",title:"\u05e2\u05d3\u05db\u05d5\u05df \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea CSS",clip:"\u05e7\u05dc\u05d9\u05e4",placement:"\u05de\u05d9\u05e7\u05d5\u05dd",overflow:"\u05d2\u05dc\u05d9\u05e9\u05d4",zindex:"Z-index",visibility:"\u05e8\u05d0\u05d5\u05ea","positioning_type":"\u05e1\u05d5\u05d2",position:"\u05de\u05d9\u05e7\u05d5\u05dd","bullet_image":"\u05ea\u05de\u05d5\u05e0\u05ea \u05ea\u05d1\u05dc\u05d9\u05d8","list_type":"\u05e1\u05d5\u05d2",color:"\u05e6\u05d1\u05e2",height:"\u05d2\u05d5\u05d1\u05d4",width:"\u05e8\u05d5\u05d7\u05d1",style:"\u05e1\u05d2\u05e0\u05d5\u05df",margin:"\u05e9\u05d5\u05dc\u05d9\u05d9\u05dd",left:"\u05e9\u05de\u05d0\u05dc",bottom:"\u05ea\u05d7\u05ea\u05d9\u05ea",right:"\u05d9\u05de\u05d9\u05df",top:"\u05e2\u05dc\u05d9\u05d5\u05df",same:"\u05d0\u05d5\u05ea\u05d5 \u05d3\u05d1\u05e8 \u05e2\u05d1\u05d5\u05e8 \u05db\u05d5\u05dc\u05dd",padding:"\u05e8\u05d9\u05e4\u05d5\u05d3","box_clear":"\u05e0\u05e7\u05d4","box_float":"\u05d4\u05e6\u05e4\u05d4","box_height":"\u05d2\u05d5\u05d1\u05d4","box_width":"\u05e8\u05d5\u05d7\u05d1","block_display":"\u05d4\u05e6\u05d2","block_whitespace":"\u05e8\u05d5\u05d5\u05d7","block_text_indent":"\u05d4\u05d6\u05d7\u05d4","block_text_align":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8","block_vertical_alignment":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e0\u05db\u05d9","block_letterspacing":"\u05de\u05e8\u05d7\u05e7 \u05d1\u05d9\u05df \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea","block_wordspacing":"\u05de\u05e8\u05d7\u05e7 \u05d1\u05d9\u05df \u05de\u05d9\u05dc\u05d9\u05dd","background_vpos":"\u05de\u05d9\u05e7\u05d5\u05dd \u05e8\u05d5\u05d7\u05d1\u05d9","background_hpos":"\u05de\u05d9\u05e7\u05d5\u05dd \u05d0\u05d5\u05e4\u05e7\u05d9","background_attachment":"\u05e7\u05d1\u05e6\u05d9\u05dd \u05de\u05e6\u05d5\u05e8\u05e4\u05d9\u05dd","background_repeat":"\u05d7\u05d6\u05d5\u05e8","background_image":"\u05ea\u05de\u05d5\u05e0\u05ea \u05e8\u05e7\u05e2","background_color":"\u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2","text_none":"\u05dc\u05dc\u05d0","text_blink":"\u05d4\u05d1\u05d4\u05d5\u05d1","text_case":"Case","text_striketrough":"\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4","text_underline":"\u05e9\u05d5\u05e8\u05d4 \u05de\u05ea\u05d7\u05ea","text_overline":"\u05e9\u05d5\u05e8\u05d4 \u05de\u05e2\u05dc","text_decoration":"\u05e2\u05d9\u05e6\u05d5\u05d1","text_color":"\u05e6\u05d1\u05e2",text:"\u05d8\u05e7\u05e1\u05d8",background:"\u05e8\u05e7\u05e2",block:"\u05d1\u05dc\u05d5\u05e7",box:"\u05ea\u05d9\u05d1\u05d4",border:"\u05d2\u05d1\u05d5\u05dc",list:"\u05e8\u05e9\u05d9\u05de\u05d4"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hi_dlg.js
new file mode 100644
index 000000000..8b0f31555
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hr_dlg.js
new file mode 100644
index 000000000..48cf6b90e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.style_dlg',{"text_lineheight":"Visina linije","text_variant":"Varijanta","text_style":"Stil","text_weight":"Te\u017eina","text_size":"Veli\u010dina","text_font":"Font","text_props":"Tekst","positioning_tab":"Pozicioniranje","list_tab":"Lista","border_tab":"Obrub","box_tab":"Okvir","block_tab":"Blok","background_tab":"Pozadina","text_tab":"Tekst",apply:"Primjeni",title:"Uredi CSS Stil",clip:"Obre\u017ei (clip)",placement:"Polo\u017eaj",overflow:"Prelijevanje (Overflow)",zindex:"Z-index",visibility:"Vidljivost (Visibility)","positioning_type":"Tip",position:"Pozicija (Position)","bullet_image":"Bullet slika","list_type":"Tip",color:"Boja",height:"Visina",width:"\u0160irina",style:"Stil",margin:"Margine",left:"Lijevo",bottom:"Dno",right:"Desno",top:"Vrh",same:"Isto za sve",padding:"Ispunjenje (Padding)","box_clear":"Clear","box_float":"Float","box_height":"Visina","box_width":"\u0160irina","block_display":"Prikaz (Display)","block_whitespace":"Razmak (Whitespace)","block_text_indent":"Uvu\u010deni tekst","block_text_align":"Pozicioniranje teksta","block_vertical_alignment":"Okomito poravnanje","block_letterspacing":"Razmak izme\u0111u slova","block_wordspacing":"Razmak izme\u0111u rije\u010di","background_vpos":"Okomita pozicija","background_hpos":"Vodoravna pozicija","background_attachment":"Privitak","background_repeat":"Ponavljanje","background_image":"Pozadinska slika","background_color":"Pozadinska boja","text_none":"ni\u0161ta","text_blink":"blink","text_case":"Velika / mala slova","text_striketrough":"Precrtano","text_underline":"Podcrtano","text_overline":"Nadcrtano","text_decoration":"Ukras (Decoration)","text_color":"Boja",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hu_dlg.js
new file mode 100644
index 000000000..b60f3f73d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.style_dlg',{"text_lineheight":"Sormagass\u00e1g","text_variant":"V\u00e1ltozat","text_style":"St\u00edlus","text_weight":"Sz\u00e9less\u00e9g","text_size":"M\u00e9ret","text_font":"Bet\u0171t\u00edpus","text_props":"Sz\u00f6veg","positioning_tab":"Poz\u00edci\u00f3","list_tab":"Lista","border_tab":"Keret","box_tab":"Doboz","block_tab":"Blokk","background_tab":"H\u00e1tt\u00e9r","text_tab":"Sz\u00f6veg",apply:"Alkalmaz",title:"CSS st\u00edlus szerkest\u00e9se",clip:"Lev\u00e1g\u00e1s",placement:"Elhelyez\u00e9s",overflow:"Kifut\u00e1s",zindex:"Z-index",visibility:"L\u00e1that\u00f3s\u00e1g","positioning_type":"T\u00edpus",position:"Poz\u00edci\u00f3","bullet_image":"Elemk\u00e9p","list_type":"T\u00edpus",color:"Sz\u00edn",height:"Magass\u00e1g",width:"Sz\u00e9less\u00e9g",style:"St\u00edlus",margin:"Marg\u00f3",left:"Balra",bottom:"Lent",right:"Jobbra",top:"Fel\u00fcl",same:"Mindenhol ugyanaz",padding:"Bels\u0151 marg\u00f3","box_clear":"Lebeg\u00e9s (float) t\u00f6rl\u00e9se","box_float":"Lebeg\u00e9s (float)","box_height":"Magass\u00e1g","box_width":"Sz\u00e9less\u00e9g","block_display":"Megjelen\u00edt\u00e9s","block_whitespace":"T\u00e9rk\u00f6z","block_text_indent":"Sz\u00f6veg beh\u00faz\u00e1sa","block_text_align":"Sz\u00f6veg igaz\u00edt\u00e1sa","block_vertical_alignment":"F\u00fcgg\u0151leges igaz\u00edt\u00e1s","block_letterspacing":"Bet\u0171t\u00e1vols\u00e1g","block_wordspacing":"Sz\u00f3t\u00e1vols\u00e1g","background_vpos":"F\u00fcgg\u0151leges hely","background_hpos":"V\u00edzszintes hely","background_attachment":"Csatolm\u00e1ny","background_repeat":"Ism\u00e9tl\u00e9s","background_image":"H\u00e1tt\u00e9rk\u00e9p","background_color":"H\u00e1tt\u00e9rsz\u00edn","text_none":"egyik sem","text_blink":"villog\u00e1s","text_case":"eset","text_striketrough":"\u00e1th\u00fazott","text_underline":"al\u00e1h\u00fazott","text_overline":"fel\u00fclh\u00fazott","text_decoration":"dekor\u00e1ci\u00f3","text_color":"sz\u00edn",text:"Sz\u00f6veg",background:"H\u00e1tt\u00e9r",block:"Blokk",box:"Doboz",border:"Keret",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hy_dlg.js
new file mode 100644
index 000000000..4b9885b07
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.style_dlg',{"text_lineheight":"\u054f\u0578\u0572\u056b \u0562\u0561\u0580\u0571\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","text_variant":"Variant","text_style":"\u0548\u0573","text_weight":"\u0540\u0561\u057d\u057f\u0578\u0582\u0569\u0575\u0578\u0582\u0576","text_size":"\u0549\u0561\u0583\u057d","text_font":"\u054f\u0561\u057c\u0561\u057f\u0565\u057d\u0561\u056f","text_props":"\u054f\u0565\u0584\u057d\u057f","positioning_tab":"\u054f\u0565\u0572\u0561\u056f\u0561\u0575\u0578\u0582\u0574","list_tab":"\u0551\u0578\u0582\u0581\u0561\u056f","border_tab":"\u0535\u0566\u0580","box_tab":"Box","block_tab":"\u0532\u056c\u0578\u056f","background_tab":"\u0556\u0578\u0576","text_tab":"\u054f\u0565\u0584\u057d\u057f",apply:"\u0540\u0561\u057d\u057f\u0561\u057f\u0565\u056c",title:"CSS \u0578\u0573\u0565\u0580\u056b \u056d\u0574\u0562\u0561\u0563\u0580\u0578\u0582\u0574",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"\u054f\u0565\u057d\u0561\u0576\u0565\u056c\u056b\u0578\u0582\u0569\u0575\u0578\u0582\u0576","positioning_type":"\u054f\u0565\u057d\u0561\u056f",position:"\u0534\u056b\u0580\u0584","bullet_image":"Bullet image","list_type":"\u054f\u0565\u057d\u0561\u056f",color:"\u0533\u0578\u0582\u0575\u0576",height:"\u0532\u0561\u0580\u0571\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",width:"\u053c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576",style:"\u0548\u0573",margin:"Margin",left:"\u0541\u0561\u056d\u056b\u0581",bottom:"\u0546\u0565\u0580\u0584\u0587\u056b\u0581",right:"\u0531\u057b\u056b\u0581",top:"\u054e\u0565\u0580\u0587\u056b\u0581",same:"\u0544\u056b\u0587\u0576\u0578\u0582\u0575\u0576 \u0561\u0574\u0565\u0576 \u056b\u0576\u0579\u056b \u0570\u0561\u0574\u0561\u0580",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"\u0532\u0561\u0580\u0571\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","box_width":"\u053c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"\u054f\u0565\u0584\u057d\u057f\u056b \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","block_vertical_alignment":"\u0548\u0582\u0572\u0572\u0561\u0570\u0561\u0575\u0561\u0581 \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","block_letterspacing":"\u0532\u0561\u0581\u0561\u0580\u056f\u0576\u0565\u0580 \u057f\u0561\u057c\u0565\u0580\u056b \u0574\u056b\u057b\u0587","block_wordspacing":"\u0532\u0561\u0581\u0561\u0580\u056f\u0576\u0565\u0580 \u0562\u0561\u057c\u0565\u0580\u056b \u0574\u056b\u057b\u0587","background_vpos":"\u0548\u0582\u0572\u0572\u0561\u0570\u0561\u0575\u0561\u0581 \u057f\u0565\u0572\u0561\u056f\u0561\u0575\u0578\u0582\u0574","background_hpos":"\u0540\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u057f\u0565\u0572\u0561\u056f\u0561\u0575\u0578\u0582\u0574","background_attachment":"Attachment","background_repeat":"\u053f\u0580\u056f\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","background_image":"\u0556\u0578\u0576\u0561\u0575\u056b\u0576 \u0576\u056f\u0561\u0580","background_color":"\u0556\u0578\u0576\u056b \u0563\u0578\u0582\u0575\u0576","text_none":"\u0578\u0579\u056b\u0576\u0579","text_blink":"\u0569\u0561\u0580\u0569\u0578\u0582\u0574\u0576\u0565\u0580","text_case":"Case","text_striketrough":"\u0561\u0580\u057f\u0561\u0563\u056e\u057e\u0561\u056e","text_underline":"\u057d\u057f\u0578\u0580\u056b\u0576 \u0563\u056b\u056e","text_overline":"\u057e\u0565\u0580\u056b\u0576 \u0563\u056b\u056e","text_decoration":"\u0541\u0587\u0561\u057e\u0578\u0580\u0578\u0582\u0574","text_color":"\u0533\u0578\u0582\u0575\u0576",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ia_dlg.js
new file mode 100644
index 000000000..7b5fc7d4f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u53d8\u4f53","text_style":"\u6837\u5f0f","text_weight":"\u5bbd\u5ea6","text_size":"\u5927\u5c0f","text_font":"\u5b57\u4f53","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u76d2\u6a21\u578b","block_tab":"\u533a\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5e94\u7528",title:"\u7f16\u8f91 CSS \u6837\u5f0f\u8868",clip:"\u526a\u8f91",placement:"\u5e03\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z\u5750\u6807",visibility:"\u662f\u5426\u53ef\u89c1","positioning_type":"\u4f4d\u7f6e\u7c7b\u578b",position:"\u56fe\u7247\u4f4d\u7f6e","bullet_image":"\u6e05\u5355\u56fe\u7247","list_type":"\u5217\u8868\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",style:"\u6837\u5f0f",margin:"\u8fb9\u8ddd",left:"\u5de6\u4fa7",bottom:"\u5e95\u90e8",right:"\u53f3\u4fa7",top:"\u9876\u90e8",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5185\u8fb9\u8ddd","box_clear":"\u6e05\u9664","box_float":"\u6d6e\u52a8","box_height":"\u9ad8\u5ea6","box_width":"\u5bbd\u5ea6","block_display":"\u663e\u793a\u65b9\u5f0f","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7f29\u8fdb","block_text_align":"\u6587\u5b57\u5bf9\u9f50","block_vertical_alignment":"\u5782\u76f4\u5bf9\u9f50\u65b9\u5f0f","block_letterspacing":"\u5b57\u6bcd\u95f4\u8ddd","block_wordspacing":"\u8bcd\u95f4\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u4f53","text_striketrough":"\u4e2d\u5212\u7ebf","text_underline":"\u5e95\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u88c5\u9970","text_color":"\u989c\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/id_dlg.js
new file mode 100644
index 000000000..b8862d617
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/is_dlg.js
new file mode 100644
index 000000000..433672f68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/it_dlg.js
new file mode 100644
index 000000000..401b72770
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.style_dlg',{"text_lineheight":"Altezza linea","text_variant":"Variante","text_style":"Stile","text_weight":"Spessore","text_size":"Dimensione","text_font":"Carattere","text_props":"Testo","positioning_tab":"Posizionamento","list_tab":"Liste","border_tab":"Bordi","box_tab":"Contenitore","block_tab":"Blocco","background_tab":"Sfondo","text_tab":"Testo",apply:"Applica",title:"Modifica stile CSS",clip:"Clip",placement:"Piazzamento",overflow:"Overflow",zindex:"Z-index",visibility:"Visibilit\u00e0","positioning_type":"Tipo",position:"Posizione","bullet_image":"Immagine Punto","list_type":"Tipo",color:"Colore",height:"Altezza",width:"Larghezza",style:"Stile",margin:"Margine",left:"Sinistro",bottom:"Inferiore",right:"Destro",top:"Superiore",same:"Uguale per tutti",padding:"Spazio dal bordo","box_clear":"Pulito","box_float":"Fluttuante","box_height":"Altezza","box_width":"Larghezza","block_display":"Visualizzazione","block_whitespace":"Whitespace","block_text_indent":"Indentazione testo","block_text_align":"Allineamento testo","block_vertical_alignment":"Allineamento verticale","block_letterspacing":"Spaziatura caratteri","block_wordspacing":"Spaziatura parole","background_vpos":"Posizione verticale","background_hpos":"Posizione orizzontale","background_attachment":"Allegato","background_repeat":"Repetizione","background_image":"Immagine sfondo","background_color":"Colore sfondo","text_none":"nessuna","text_blink":"lampeggiante","text_case":"Tipo","text_striketrough":"barrato","text_underline":"sottolineato","text_overline":"sopralineato","text_decoration":"Decorazione","text_color":"Colore",text:"Testo",background:"Sfondo",block:"Blocco",box:"Box",border:"Bordo",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ja_dlg.js
new file mode 100644
index 000000000..4d5953cf4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.style_dlg',{"text_lineheight":"\u884c\u306e\u9ad8\u3055","text_variant":"\u5909\u5f62","text_style":"\u30b9\u30bf\u30a4\u30eb","text_weight":"\u592a\u3055","text_size":"\u5927\u304d\u3055","text_font":"\u30d5\u30a9\u30f3\u30c8","text_props":"\u30c6\u30ad\u30b9\u30c8","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u7b87\u6761\u66f8\u304d","border_tab":"\u67a0\u7dda","box_tab":"\u30dc\u30c3\u30af\u30b9","block_tab":"\u30d6\u30ed\u30c3\u30af","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u9069\u7528",title:"CSS\u306e\u30b9\u30bf\u30a4\u30eb\u3092\u7de8\u96c6",clip:"\u5207\u308a\u629c\u304d",placement:"\u914d\u7f6e",overflow:"\u30aa\u30fc\u30d0\u30fc\u30d5\u30ed\u30fc",zindex:"Z-index",visibility:"\u53ef\u8996\u6027","positioning_type":"\u914d\u7f6e\u65b9\u6cd5",position:"\u8868\u793a\u4f4d\u7f6e","bullet_image":"\u884c\u982d\u6587\u5b57","list_type":"\u7b87\u6761\u66f8\u304d\u306e\u7a2e\u985e",color:"\u8272",height:"\u9ad8\u3055",width:"\u5e45",style:"\u30b9\u30bf\u30a4\u30eb",margin:"\u30de\u30fc\u30b8\u30f3",left:"\u5de6",bottom:"\u4e0b",right:"\u53f3",top:"\u4e0a",same:"\u3059\u3079\u3066\u540c\u3058",padding:"\u30d1\u30c7\u30a3\u30f3\u30b0","box_clear":"\u56de\u308a\u8fbc\u307f\u89e3\u9664","box_float":"\u56de\u308a\u8fbc\u307f","box_height":"\u9ad8\u3055","box_width":"\u5e45","block_display":"\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4","block_whitespace":"\u7a7a\u767d\u6587\u5b57","block_text_indent":"\u30c6\u30ad\u30b9\u30c8\u306e\u5b57\u4e0b\u3052","block_text_align":"\u30c6\u30ad\u30b9\u30c8\u306e\u6c34\u5e73\u914d\u7f6e","block_vertical_alignment":"\u5782\u76f4\u914d\u7f6e","block_letterspacing":"\u6587\u5b57\u9593\u9694","block_wordspacing":"\u5358\u8a9e\u9593\u9694","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u6dfb\u4ed8","background_repeat":"\u7e70\u308a\u8fd4\u3057","background_image":"\u80cc\u666f\u753b\u50cf","background_color":"\u80cc\u666f\u8272","text_none":"\u306a\u3057","text_blink":"\u70b9\u6ec5","text_case":"\u5927\u6587\u5b57/\u5c0f\u6587\u5b57","text_striketrough":"\u6253\u6d88\u3057\u7dda","text_underline":"\u4e0b\u7dda","text_overline":"\u4e0a\u7dda","text_decoration":"\u88c5\u98fe","text_color":"\u8272",text:"\u6587\u5b57",background:"\u80cc\u666f",block:"\u30d6\u30ed\u30c3\u30af",box:"\u30dc\u30c3\u30af\u30b9",border:"\u67a0\u7dda",list:"\u7b87\u6761\u66f8\u304d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ka_dlg.js
new file mode 100644
index 000000000..442f54efa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.style_dlg',{"text_lineheight":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4","text_variant":"\u10d5\u10d0\u10e0\u10d8\u10d0\u10dc\u10e2\u10d8","text_style":"\u10e1\u10e2\u10d8\u10da\u10d8","text_weight":"\u10e1\u10d8\u10e1\u10e5\u10d4","text_size":"\u10d6\u10dd\u10db\u10d0","text_font":"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8","text_props":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8","positioning_tab":"\u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10dd\u10dc\u10d8\u10e0\u10d4\u10d1\u10d0","list_tab":"\u10e1\u10d8\u10d0","border_tab":"\u10e1\u10d0\u10d6\u10e6\u10d5\u10d0\u10e0\u10d8","box_tab":"\u10d9\u10d8\u10d3\u10d4\u10d4\u10d1\u10d8","block_tab":"\u10d1\u10da\u10dd\u10d9\u10d8","background_tab":"\u10e4\u10dd\u10dc\u10d8","text_tab":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8",apply:"\u10d2\u10d0\u10db\u10dd\u10d5\u10d8\u10e7\u10d4\u10dc\u10dd\u10d7",title:"CSS \u10e1\u10e2\u10d8\u10da\u10d8\u10e1 \u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10dd\u10e0\u10d8",clip:"\u10db\u10dd\u10d9\u10d5\u10d4\u10d7\u10d0",placement:"\u10d2\u10d0\u10dc\u10d7\u10d0\u10d5\u10e1\u10d4\u10d1\u10d0",overflow:"\u10d2\u10d0\u10d3\u10d0\u10d5\u10e1\u10d4\u10d1\u10d0",zindex:"Z-\u10d8\u10dc\u10d3\u10d4\u10e5\u10e1\u10d8",visibility:"\u10ee\u10d8\u10da\u10d5\u10d0\u10d3\u10dd\u10d1\u10d0","positioning_type":"\u10e2\u10d8\u10de\u10d8",position:"\u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10d0","bullet_image":"\u10db\u10d0\u10e0\u10d9\u10d4\u10e0\u10d8","list_type":"\u10e2\u10d8\u10de\u10d8",color:"\u10e4\u10d4\u10e0\u10d8",height:"\u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4",width:"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4",style:"\u10e1\u10e2\u10d8\u10da\u10d8",margin:"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",left:"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5",bottom:"\u10e5\u10d5\u10d4\u10db\u10dd\u10d7",right:"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",top:"\u10d6\u10d4\u10db\u10dd\u10d7",same:"\u10e7\u10d5\u10d4\u10da\u10d0\u10e1\u10d7\u10d5\u10d8\u10e1 \u10d4\u10e0\u10d7\u10dc\u10d0\u10d4\u10e0\u10d0\u10d3",padding:"\u10db\u10d8\u10dc\u10d3\u10d5\u10e0\u10d4\u10d1\u10d8","box_clear":"\u10db\u10dd\u10e1\u10e3\u10e4\u10d7\u10d0\u10d5\u10d4\u10d1\u10d0","box_float":"\u10db\u10dd\u10ea\u10e3\u10e0\u10d0\u10d5\u10d4","box_height":"\u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4","box_width":"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4","block_display":"\u10d0\u10e1\u10d0\u10ee\u10d5\u10d0","block_whitespace":"\u10e1\u10d8\u10d5\u10e0\u10ea\u10d4","block_text_indent":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","block_text_align":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","block_vertical_alignment":"\u10d5\u10d4\u10e0\u10e2\u10d8\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","block_letterspacing":"\u10d0\u10e1\u10dd\u10d4\u10d1\u10e1 \u10e8\u10dd\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","block_wordspacing":"\u10e1\u10d8\u10e2\u10e7\u10d5\u10d4\u10d1\u10e1 \u10e8\u10dd\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","background_vpos":"\u10d5\u10d4\u10e0\u10e2\u10d8\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10d0","background_hpos":"\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2\u10d0\u10da\u10e3\u10e0\u10d8 \u10de\u10dd\u10d6\u10d8\u10ea\u10d8\u10d0","background_attachment":"\u10db\u10d8\u10d1\u10db\u10d0","background_repeat":"\u10d2\u10d0\u10db\u10d4\u10dd\u10e0\u10d4\u10d1\u10d0","background_image":"\u10e4\u10dd\u10dc\u10d8\u10e1 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d0","background_color":"\u10e4\u10dd\u10dc\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","text_none":"\u10e7\u10d5\u10d4\u10da\u10d0\u10e4\u10e0\u10d8\u10e1 \u10d2\u10d0\u10e0\u10d4\u10e8\u10d4","text_blink":"\u10db\u10dd\u10ea\u10d8\u10db\u10ea\u10d8\u10db\u10d4","text_case":"\u10e0\u10d4\u10d2\u10d8\u10e1\u10e2\u10e0\u10d8","text_striketrough":"\u10d2\u10d0\u10d3\u10d0\u10ee\u10d0\u10d6\u10e3\u10da\u10d8","text_underline":"\u10db\u10dd\u10ee\u10d0\u10d6\u10e3\u10da\u10d8","text_overline":"\u10d6\u10d4\u10d3\u10d0 \u10ee\u10d0\u10d6\u10d8\u10d7","text_decoration":"\u10d2\u10d0\u10e4\u10dd\u10e0\u10db\u10d4\u10d1\u10d0","text_color":"\u10e4\u10d4\u10e0\u10d8",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/kl_dlg.js
new file mode 100644
index 000000000..f916e26dd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/km_dlg.js
new file mode 100644
index 000000000..4215fac3e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.style_dlg',{"text_lineheight":"\u1780\u1798\u17d2\u1796\u179f\u17cb\u1787\u17bd\u179a","text_variant":"\u1780\u17c6\u179b\u17b6\u1799","text_style":"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798","text_weight":"\u1780\u1798\u17d2\u179a\u17b6\u179f\u17cb","text_size":"\u1791\u17c6\u17a0\u17c6","text_font":"\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a","text_props":"\u17a2\u178f\u17d2\u1790\u1794\u1791","positioning_tab":"\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1791\u17b8\u178f\u17b6\u17c6\u1784","list_tab":"\u1794\u1789\u17d2\u1787\u17b8","border_tab":"\u179f\u17ca\u17bb\u1798","box_tab":"\u1794\u17d2\u179a\u17a2\u1794\u17cb","block_tab":"\u1794\u17d2\u179b\u17bb\u1780","background_tab":"\u1795\u17d2\u1791\u17c2\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","text_tab":"\u17a2\u178f\u17d2\u1790\u1794\u1791",apply:"\u17a2\u1793\u17bb\u179c\u178f\u17d2\u178f",title:"\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798 CSS",clip:"\u178f\u1798\u17d2\u1794\u17c0\u178f\u1781\u17d2\u1791\u17b6\u179f\u17cb",placement:"\u1780\u17b6\u179a\u178a\u17b6\u1780\u17cb",overflow:"\u179b\u17be\u179f\u1785\u17c6\u178e\u17bb\u17c7",zindex:"\u17a2\u17d0\u1780\u17d2\u179f Z",visibility:"\u1797\u17b6\u1796\u17a2\u17b6\u1785\u1798\u17be\u179b\u1783\u17be\u1789","positioning_type":"\u1794\u17d2\u179a\u1797\u17c1\u1791",position:"\u1791\u17b8\u178f\u17b6\u17c6\u1784","bullet_image":"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1785\u17c6\u178e\u17bb\u1785","list_type":"\u1794\u17d2\u179a\u1797\u17c1\u1791",color:"\u1796\u178e\u17cc",height:"\u1780\u1798\u17d2\u1796\u179f\u17cb",width:"\u1791\u1791\u17b9\u1784",style:"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",margin:"\u179a\u17b9\u1798",left:"\u1786\u17d2\u179c\u17c1\u1784",bottom:"\u1794\u17b6\u178f",right:"\u179f\u17d2\u178a\u17b6\u17c6",top:"\u1780\u17c6\u1796\u17bc\u179b",same:"\u178f\u17bc\u1785\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb",padding:"\u1785\u1793\u17d2\u179b\u17c4\u17c7","box_clear":"\u179f\u17c6\u17a2\u17b6\u178f","box_float":"\u17a2\u178e\u17d2\u178a\u17c2\u178f","box_height":"\u1780\u1798\u17d2\u1796\u179f\u17cb","box_width":"\u1791\u1791\u17b9\u1784","block_display":"\u1794\u1784\u17d2\u17a0\u17b6\u1789","block_whitespace":"\u1791\u1791\u17c1\u179f\u17d2\u17a2\u17b6\u178f","block_text_indent":"\u1785\u17bc\u179b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791","block_text_align":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u17a2\u178f\u17d2\u1790\u1794\u1791","block_vertical_alignment":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u1794\u1789\u17d2\u1788\u179a","block_letterspacing":"\u1782\u1798\u17d2\u179b\u17b6\u178f\u17a2\u1780\u17d2\u179f\u179a","block_wordspacing":"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1796\u17b6\u1780\u17d2\u1799","background_vpos":"\u1791\u17b8\u178f\u17b6\u17c6\u1784\u1794\u1789\u17d2\u1788\u179a","background_hpos":"\u1791\u17b8\u178f\u17b6\u17c6\u1784\u1795\u17d2\u178a\u17c1\u1780","background_attachment":"\u17af\u1780\u179f\u17b6\u179a\u1797\u17d2\u1787\u17b6\u1794\u17cb","background_repeat":"\u1792\u17d2\u179c\u17be\u1798\u17d2\u178a\u1784\u1791\u17c0\u178f","background_image":"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","background_color":"\u1796\u178e\u17cc\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","text_none":"\u1782\u17d2\u1798\u17b6\u1793","text_blink":"\u1797\u17d2\u179b\u17b9\u1794\u1797\u17d2\u179b\u17c2\u178f","text_case":"\u1780\u179a\u178e\u17b8","text_striketrough":"\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1786\u17bc\u178f","text_underline":"\u1782\u17bc\u179f\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1780\u17d2\u179a\u17c4\u1798","text_overline":"\u1782\u17bc\u179f\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u179b\u17be","text_decoration":"\u1780\u17b6\u179a\u178f\u17bb\u1794\u178f\u17c2\u1784","text_color":"\u1796\u178e\u17cc",text:"\u17a2\u178f\u17d2\u1790\u1794\u1791",background:"\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799",block:"\u1794\u17d2\u179b\u17bb\u1780",box:"\u1794\u17d2\u179a\u17a2\u1794\u17cb",border:"\u179f\u17ca\u17bb\u1798",list:"\u1794\u1789\u17d2\u1787\u17b8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ko_dlg.js
new file mode 100644
index 000000000..c326368fd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.style_dlg',{"text_lineheight":"\ud589 \ub192\uc774","text_variant":"Variant","text_style":"\uc2a4\ud0c0\uc77c","text_weight":"\uad75\uae30","text_size":"\ud06c\uae30","text_font":"\uae00\uaf34","text_props":"\ud14d\uc2a4\ud2b8","positioning_tab":"\uc704\uce58","list_tab":"\ub9ac\uc2a4\ud2b8","border_tab":"\ud14c\ub450\ub9ac\uc120","box_tab":"\ubc15\uc2a4","block_tab":"\ube14\ub85d","background_tab":"\ubc30\uacbd","text_tab":"\ud14d\uc2a4\ud2b8",apply:"\uc801\uc6a9",title:"CSS \ud3b8\uc9d1",clip:"Clip",placement:"\uc704\uce58(placement)",overflow:"\uc624\ubc84\ud50c\ub85c\uc6b0",zindex:"Z-index",visibility:"\uac00\uc2dc\uc131","positioning_type":"\ud0c0\uc785",position:"\uc704\uce58","bullet_image":"\ubd88\ub9bf \uc774\ubbf8\uc9c0","list_type":"\ubaa9\ub85d\uc885\ub958",color:"\uc0c9",height:"\ub192\uc774",width:"\ud3ed",style:"\uc2a4\ud0c0\uc77c",margin:"\ub9c8\uc9c4",left:"\uc88c",bottom:"\ud558",right:"\uc6b0",top:"\uc0c1",same:"\ubaa8\ub450 \ub611\uac19\uc774",padding:"padding","box_clear":"Clear","box_float":"float","box_height":"\ub192\uc774","box_width":"\ud3ed","block_display":"\ud45c\uc2dc","block_whitespace":"\uacf5\ubc31 \ubb38\uc790","block_text_indent":"\ub4e4\uc5ec\uc4f0\uae30","block_text_align":"\uc88c\uc6b0 \ub9de\ucda4","block_vertical_alignment":"\uc138\ub85c \ub9de\ucda4","block_letterspacing":"\ubb38\uc790 \uac04\uaca9","block_wordspacing":"\ub2e8\uc5b4 \uac04\uaca9","background_vpos":"\uc138\ub85c \uc704\uce58","background_hpos":"\uac00\ub85c \uc704\uce58","background_attachment":"\ucca8\ubd80","background_repeat":"\ubc18\ubcf5","background_image":"\ubc30\uacbd \uc774\ubbf8\uc9c0","background_color":"\ubc30\uacbd\uc0c9","text_none":"\uc5c6\uc74c","text_blink":"\uc810\uba78","text_case":"\ub300/\uc18c\ubb38\uc790","text_striketrough":"\ucde8\uc18c\uc120","text_underline":"\ubc11\uc904","text_overline":"\uc717\uc904","text_decoration":"\uc7a5\uc2dd","text_color":"\uc0c9",text:"\ud14d\uc2a4\ud2b8",background:"\ubc30\uacbd",block:"\ube14\ub85d",border:"\ud14c\ub450\ub9ac\uc120",list:"\ubaa9\ub85d",box:"Box"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/kz_dlg.js
new file mode 100644
index 000000000..573237b8a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.style_dlg',{"text_style":"\u0421\u0442\u0438\u043b\u044c","text_lineheight":"Line Height","text_variant":"Variant","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet Image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for All",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text Indent","block_text_align":"Text Align","block_vertical_alignment":"Vertical Alignment","block_letterspacing":"Letter Spacing","block_wordspacing":"Word Spacing","background_vpos":"Vertical Position","background_hpos":"Horizontal Position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background Image","background_color":"Background Color","text_none":"None","text_blink":"Blink","text_case":"Case","text_striketrough":"Strikethrough","text_underline":"Underline","text_overline":"Overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lb_dlg.js
new file mode 100644
index 000000000..060db7b8a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.style_dlg',{"text_lineheight":"Zeilenh\u00e9icht","text_variant":"Variant","text_style":"Stil","text_weight":"D\u00e9ckt","text_size":"Gr\u00e9isst","text_font":"Schr\u00ebftaart","text_props":"Text","positioning_tab":"Position\u00e9ierung","list_tab":"L\u00ebscht","border_tab":"Rumm","box_tab":"Box","block_tab":"Block","background_tab":"Hannergrond","text_tab":"Text",apply:"Iwwerhuelen",title:"CSS-Styles beaarbechten",clip:"Ausschn\u00ebtt",placement:"Plaz\u00e9ierung",overflow:"Verhale bei Iwwergr\u00e9isst",zindex:"Z-W\u00e4ert",visibility:"Siichtbar","positioning_type":"Aart vun der Position\u00e9ierung",position:"Position\u00e9ierung","bullet_image":"L\u00ebschtepunkt-Grafik","list_type":"L\u00ebschtepunkt-Aart",color:"Textfuerf",height:"H\u00e9icht",width:"Breet",style:"Format",margin:"Baussechten Ofstand",left:"L\u00e9nks",bottom:"\u00cbnnen",right:"Riets",top:"Uewen",same:"All selwecht",padding:"Banneschten Ofstand","box_clear":"\u00cbmfl\u00e9issung verh\u00ebnneren","box_float":"\u00cbmfl\u00e9issung","box_height":"H\u00e9icht","box_width":"Breet","block_display":"\u00cbmbrochverhalen","block_whitespace":"Automateschen \u00cbmbroch","block_text_indent":"Ar\u00e9ckung","block_text_align":"Ausriichtung","block_vertical_alignment":"Vertikal Ausriichtung","block_letterspacing":"Buschtawenofstand","block_wordspacing":"Wuertofstand","background_vpos":"Positioun Y","background_hpos":"Positioun X","background_attachment":"Waasserzeecheneffekt","background_repeat":"Widderhuelung","background_image":"Hannergrondbild","background_color":"Hannergrondfuerf","text_none":"keng","text_blink":"bl\u00ebnkend","text_case":"Schreiwung","text_striketrough":"duerchgestrach","text_underline":"\u00ebnnerstrach","text_overline":"iwwerstrach","text_decoration":"Gestaltung","text_color":"Fuerf",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lt_dlg.js
new file mode 100644
index 000000000..c8bc04271
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.style_dlg',{"text_lineheight":"Eilut\u0117s auk\u0161tis","text_variant":"Variantas","text_style":"Stilius","text_weight":"Storis","text_size":"Dydis","text_font":"\u0160riftas","text_props":"Tekstas","positioning_tab":"Pozicionavimas","list_tab":"S\u0105ra\u0161as","border_tab":"R\u0117melis","box_tab":"D\u0117\u017eut\u0117","block_tab":"Blokas","background_tab":"Fonas","text_tab":"Tekstas",apply:"Taikyti",title:"Redaguoti CSS stili\u0173",clip:"\u012era\u0161as",placement:"Talpinimas",overflow:"Perpildymas",zindex:"Z-indeksas",visibility:"Matomumas","positioning_type":"Tipas",position:"Pozicija","bullet_image":"\u017denklelio paveiksl\u0117lis","list_type":"Tipas",color:"Spalva",height:"Auk\u0161tis",width:"Ilgis",style:"Stilius",margin:"Para\u0161t\u0117",left:"Kair\u0117je",bottom:"Apa\u010dioje",right:"De\u0161in\u0117je",top:"Vir\u0161uje",same:"Tas pats visiems",padding:"U\u017epildymas","box_clear":"I\u0161valyti","box_float":"Slankus","box_height":"Auk\u0161tis","box_width":"Ilgis","block_display":"Rodymas","block_whitespace":"Tarpai","block_text_indent":"Teksto atitraukimas","block_text_align":"Teksto lygiavimas","block_vertical_alignment":"Vertikalus lygiavimas","block_letterspacing":"Tarpai tarp raid\u017ei\u0173","block_wordspacing":"Tarpai tarp \u017eod\u017ei\u0173","background_vpos":"Vertikali pozicija","background_hpos":"Horizontali pozicija","background_attachment":"Priedas","background_repeat":"Kartoti","background_image":"Fono paveiksl\u0117lis","background_color":"Fono spalva","text_none":"joks","text_blink":"mirks\u0117jimas","text_case":"Ma\u017eosios/did\u017eiosios raid\u0117s","text_striketrough":"perbraukta","text_underline":"pabraukta apa\u010dioje","text_overline":"pabraukta vir\u0161uje","text_decoration":"Dekoracija","text_color":"Spalva",text:"Tekstas",background:"Fonas",block:"Blokuoti",box:"D\u0117\u017e\u0117",border:"Siena",list:"\u0160\u0105ra\u0161as"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lv_dlg.js
new file mode 100644
index 000000000..9f0d3f246
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Klips",placement:"Izvietojums",overflow:"P\u0101rm\u0113rs",zindex:"Z-index",visibility:"Redzam\u012bba","positioning_type":"Tips",position:"Poz\u012bcija","bullet_image":"Bullet bilde","list_type":"Tips",color:"Kr\u0101sa",height:"Augstums",width:"Platums",style:"St\u012bls",margin:"Mala",left:"Pa kreisi",bottom:"Apak\u0161a",right:"Pa labi",top:"Aug\u0161a",same:"Same for all",padding:"Atstarpe","box_clear":"Clear","box_float":"Float","box_height":"Augstums","box_width":"Platums","block_display":"Display","block_whitespace":"Tuk\u0161ais laukums","block_text_indent":"\u00c9crit indent","block_text_align":"Teksta izl\u012bdzin\u0101jums","block_vertical_alignment":"Vertik\u0101lais izl\u012bdzin\u0101jums","block_letterspacing":"Burtu atstarpe","block_wordspacing":"V\u0101rdu atstarpe","background_vpos":"Vertik\u0101l\u0101 poz\u012bcija","background_hpos":"Horizont\u0101l\u0101 poz\u012bcija","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Teksts",background:"Fons",block:"Blo\u0137\u0113t",box:"Kaste",border:"Siena",list:"Saraksts"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/mk_dlg.js
new file mode 100644
index 000000000..ce8ab5d8d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.style_dlg',{"text_lineheight":"\u0412\u0438\u0441\u0438\u043d\u0430 \u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430","text_variant":"\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u0430","text_style":"\u0421\u0442\u0438\u043b","text_weight":"\u0428\u0438\u0440\u0438\u043d\u0430","text_size":"\u0413\u043e\u043b\u0435\u043c\u0438\u043d\u0430","text_font":"\u0424\u043e\u043d\u0442","text_props":"\u0422\u0435\u043a\u0441\u0442","positioning_tab":"\u041f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0430\u045a\u0435","list_tab":"\u041b\u0438\u0441\u0442\u0430","border_tab":"\u0413\u0440\u0430\u043d\u0438\u0446\u0438","box_tab":"\u041a\u0443\u0442\u0438\u0458\u0430","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u041f\u043e\u0437\u0430\u0434\u0438\u043d\u0430","text_tab":"\u0422\u0435\u043a\u0441\u0442",apply:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438",title:"\u0423\u0440\u0435\u0434\u0438 \u0433\u043e CSS \u0441\u0442\u0438\u043b\u043e\u0442",clip:"\u041a\u043b\u0438\u043f",placement:"\u041f\u043e\u0441\u0442\u0430\u0432\u0435\u043d\u043e\u0441\u0442",overflow:"\u041f\u0440\u0435\u043b\u0435\u0432\u0430\u045a\u0435",zindex:"Z-index",visibility:"\u0412\u0438\u0434\u043b\u0438\u0432\u043e\u0441\u0442","positioning_type":"\u0422\u0438\u043f",position:"\u041f\u043e\u0437\u0438\u0446\u0438\u0458\u0430","bullet_image":"Bullet \u0441\u043b\u0438\u043a\u0430","list_type":"\u0422\u0438\u043f",color:"\u0411\u043e\u0458\u0430",height:"\u0412\u0438\u0441\u0438\u043d\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",style:"\u0421\u0442\u0438\u043b",margin:"\u041c\u0430\u0440\u0433\u0438\u043d\u0430",left:"\u041b\u0435\u0432\u043e",bottom:"\u0414\u043e\u043b\u0435",right:"\u0414\u0435\u0441\u043d\u043e",top:"\u0413\u043e\u0440\u0435",same:"\u0418\u0441\u0442\u043e \u0437\u0430 \u0441\u0438\u0442\u0435",padding:"\u041f\u043e\u043c\u0435\u0441\u0442\u0443\u0432\u0430\u045a\u0435","box_clear":"\u0418\u0441\u0447\u0438\u0441\u0442\u0438","box_float":"\u041f\u043e\u043c\u0435\u0441\u0442\u0443\u0432\u0430\u045a\u0435","box_height":"\u0412\u0438\u0441\u0438\u043d\u0430","box_width":"\u0428\u0438\u0440\u0438\u043d\u0430","block_display":"\u041f\u0440\u0438\u043a\u0430\u0436\u0438","block_whitespace":"\u041f\u0440\u0430\u0437\u043d\u043e \u043c\u0435\u0441\u0442\u043e","block_text_indent":"\u0422\u0435\u043a\u0441\u0442 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444","block_text_align":"\u041f\u043e\u0440\u0430\u043c\u043d\u0438 \u0433\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0442","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u043e\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435","block_letterspacing":"\u0420\u0430\u0441\u0442\u043e\u0430\u0458\u043d\u0438\u0435 \u043c\u0435\u0453\u0443 \u0431\u0443\u043a\u0432\u0438\u0442\u0435","block_wordspacing":"\u0420\u0430\u0441\u0442\u043e\u0458\u0430\u043d\u0438\u0435 \u043c\u0435\u0453\u0443 \u0437\u0431\u043e\u0440\u043e\u0432\u0438\u0442\u0435","background_vpos":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0458\u0430","background_hpos":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0458\u0430","background_attachment":"\u041f\u0440\u0438\u043b\u043e\u0433","background_repeat":"\u041f\u043e\u0432\u0442\u043e\u0440\u0438","background_image":"\u041f\u043e\u0437\u0430\u0434\u043d\u0438\u043d\u0441\u043a\u0430 \u0441\u043b\u0438\u043a\u0430","background_color":"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430\u0442\u0430","text_none":"\u043d\u0438\u0448\u0442\u043e","text_blink":"\u0442\u0440\u0435\u043f\u043a\u0430\u045a\u0435","text_case":"\u0421\u043b\u0443\u0447\u0430\u0458","text_striketrough":"\u043f\u0440\u0435\u0446\u0440\u0442\u0430\u043d\u043e","text_underline":"\u043f\u043e\u0434\u0432\u043b\u0435\u0448\u0435\u043d\u043e","text_overline":"\u043d\u0430\u0434 \u043b\u0438\u043d\u0438\u0458\u0430","text_decoration":"\u0414\u0435\u043a\u043e\u0440\u0430\u0446\u0438\u0458\u0430","text_color":"\u0411\u043e\u0458\u0430",text:"\u0422\u0435\u043a\u0441\u0442",background:"\u041f\u043e\u0437\u0430\u0434\u0438\u043d\u0430",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u0443\u0442\u0438\u0458\u0430",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0438/\u0440\u0430\u0431\u043e\u0432\u0438",list:"\u041b\u0438\u0441\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ml_dlg.js
new file mode 100644
index 000000000..730fd04cf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/mn_dlg.js
new file mode 100644
index 000000000..a7faed295
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.style_dlg',{"text_lineheight":"\u041c\u04e9\u0440\u043d\u0438\u0439 \u04e9\u043d\u0434\u04e9\u0440","text_variant":"\u0412\u0430\u0440\u0438\u0430\u043d\u0442","text_style":"\u0425\u044d\u043b\u0431\u044d\u0440","text_weight":"\u04e8\u0440\u0433\u04e9\u043d \u043d\u0430\u0440\u0438\u0439\u043d","text_size":"\u0425\u044d\u043c\u0436\u044d\u044d","text_font":"\u0424\u043e\u043d\u0442","text_props":"\u0411\u0438\u0447\u0432\u044d\u0440","positioning_tab":"\u0411\u0430\u0439\u0440\u0448\u0438\u043b","list_tab":"\u0416\u0430\u0433\u0441\u0430\u0430\u043b\u0442","border_tab":"\u0425\u04af\u0440\u044d\u044d","box_tab":"\u0425\u0430\u0439\u0440\u0446\u0430\u0433","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0414\u044d\u0432\u0441\u0433\u044d\u0440","text_tab":"\u0411\u0438\u0447\u0432\u044d\u0440",apply:"\u0425\u044d\u0440\u044d\u0433\u043b\u044d\u0445",title:"CSS-Styles \u0437\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0445",clip:"\u0422\u0430\u0439\u0440\u0434\u0430\u0441",placement:"\u0411\u0430\u0439\u0440\u0448\u0438\u043b",overflow:"\u0425\u044d\u0442\u044d\u0440\u0441\u044d\u043d \u0445\u044d\u043c\u0436\u044d\u044d\u043d\u0438\u0439 \u0445\u0430\u0440\u044c\u0446\u0430\u0430",zindex:"Z \u0443\u0442\u0433\u0430",visibility:"\u0425\u0430\u0440\u0430\u0433\u0434\u0430\u0445\u0443\u0439\u0446","positioning_type":"\u0411\u0430\u0439\u0440\u0448\u043b\u044b\u043d \u0442\u04e9\u0440\u04e9\u043b",position:"\u0411\u0430\u0439\u0440\u0448\u0438\u043b","bullet_image":"\u0413\u0440\u0430\u0444\u0438\u043a \u0442\u043e\u043e\u0447\u0438\u043b\u0442\u044b\u043d \u0446\u044d\u0433","list_type":"\u0422\u043e\u043e\u0447\u0438\u043b\u0442\u044b\u043d \u0446\u044d\u0433\u0438\u0439\u043d \u0445\u044d\u043b\u0431\u044d\u0440",color:"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u04e9\u043d\u0433\u04e9",height:"\u04e8\u043d\u0434\u04e9\u0440",width:"\u04e8\u0440\u0433\u04e9\u043d",style:"\u0424\u043e\u0440\u043c\u0430\u0442",margin:"\u0413\u0430\u0434\u0430\u0430\u0434 \u0437\u0430\u0439",left:"\u0417\u04af\u04af\u043d",bottom:"\u0414\u043e\u043e\u0440",right:"\u0411\u0430\u0440\u0443\u0443\u043d",top:"\u0414\u044d\u044d\u0440",same:"\u0411\u04af\u0433\u0434 \u0438\u0436\u0438\u043b",padding:"\u0414\u043e\u0442\u043e\u043e\u0434 \u0437\u0430\u0439","box_clear":"\u0413\u04af\u0439\u043b\u0433\u044d\u043b\u0442 \u0445\u0430\u0430\u0445","box_float":"\u0413\u04af\u0439\u043b\u0433\u044d\u043b\u0442","box_height":"\u04e8\u043d\u0434\u04e9\u0440","box_width":"\u04e8\u0440\u0433\u04e9\u043d","block_display":"\u041e\u0440\u043e\u043e\u0445 \u0445\u044d\u043b\u0431\u044d\u0440","block_whitespace":"\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u043c\u04e9\u0440 \u043e\u0440\u043e\u043e\u043b\u0442","block_text_indent":"\u0414\u043e\u0433\u043e\u043b \u043c\u04e9\u0440","block_text_align":"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442","block_vertical_alignment":"\u0411\u043e\u0441\u043e\u043e \u0436\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442","block_letterspacing":"\u04ae\u0441\u044d\u0433 \u0445\u043e\u043e\u0440\u043e\u043d\u0434\u044b\u043d \u0437\u0430\u0439","block_wordspacing":"\u04ae\u0433 \u0445\u043e\u043e\u0440\u043e\u043d\u0434\u044b\u043d \u0437\u0430\u0439","background_vpos":"\u0411\u0430\u0439\u0440\u043b\u0430\u043b Y","background_hpos":"\u0411\u0430\u0439\u0440\u043b\u0430\u043b X","background_attachment":"\u0423\u0441\u0430\u043d \u0442\u044d\u043c\u0434\u0433\u0438\u0439\u043d \u044d\u0444\u0444\u0435\u043a\u0442","background_repeat":"\u0414\u0430\u0432\u0442\u0430\u043b\u0442","background_image":"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u0437\u0443\u0440\u0430\u0433","background_color":"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u04e9\u043d\u0433\u04e9","text_none":"\u0431\u0430\u0439\u0445\u0433\u04af\u0439","text_blink":"\u0430\u043d\u0438\u0432\u0447\u0438\u043b\u0442","text_case":"\u0411\u0438\u0447\u0432\u044d\u0440","text_striketrough":"\u0434\u0430\u0440\u0441\u0430\u043d","text_underline":"\u0434\u043e\u043e\u0433\u0443\u0443\u0440 \u043d\u044c \u0437\u0443\u0440\u0441\u0430\u043d","text_overline":"\u0434\u044d\u044d\u0433\u04af\u04af\u0440 \u043d\u044c \u0437\u0443\u0440\u0441\u0430\u043d","text_decoration":"\u0427\u0438\u043c\u044d\u0433\u043b\u044d\u043b","text_color":"\u04e8\u043d\u0433\u04e9",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ms_dlg.js
new file mode 100644
index 000000000..518a3be20
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.style_dlg',{"text_lineheight":"Tinggi garisan","text_variant":"Varian","text_style":"Gaya","text_weight":"Beban","text_size":"Saiz","text_font":"Huruf","text_props":"Teks","positioning_tab":"Kedudukan","list_tab":"Senarai","border_tab":"Sempadan","box_tab":"Kotak","block_tab":"Landasan","background_tab":"Latar belakang","text_tab":"Teks",apply:"Guna",title:"Sunting Gaya CSS",clip:"Klip",placement:"Penempatan",overflow:"Limpahan",zindex:"Indeks-Z",visibility:"Kelihatan","positioning_type":"Jenis",position:"Posisi","bullet_image":"Imej peluru","list_type":"Jenis",color:"Warna",height:"Tinggi",width:"Lebar",style:"Gaya",margin:"Ruangan tepi",left:"Kiri",bottom:"Bawah",right:"Kanan",top:"Atas",same:"Samakan kesemuanya",padding:"Lapisan","box_clear":"Ruangan jelas","box_float":"Apungan","box_height":"Tinggi","box_width":"Lebar","block_display":"Pamer","block_whitespace":"Ruangan putih","block_text_indent":"Takukan teks","block_text_align":"Penjajaran teks","block_vertical_alignment":"Penjajaran tegak","block_letterspacing":"Jarak huruf","block_wordspacing":"Jarak perkataan","background_vpos":"Posisi tegak","background_hpos":"Posisi mengufuk","background_attachment":"Sisipan","background_repeat":"Ulangan","background_image":"Imej Latar","background_color":"Warna Latar","text_none":"tiada","text_blink":"kelip","text_case":"Kes","text_striketrough":"garis tengah","text_underline":"garis bawah","text_overline":"garis atas","text_decoration":"Dekorasi","text_color":"Warna",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/my_dlg.js
new file mode 100644
index 000000000..7634d8f40
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.style_dlg',{"text_lineheight":"\u1005\u102c\u1031\u103c\u1000\u102c\u1004\u103a\u1038 \u1021\u103c\u1019\u1004\u103a\u1037","text_variant":"\u1015\u1036\u102f\u1005\u1036\u1000\u103d\u1032","text_style":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1005\u1010\u102d\u102f\u1004\u103a","text_weight":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1021\u1011\u1030\u1021\u1015\u102b\u1038","text_size":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1021\u101b\u103d\u101a\u103a","text_font":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1031\u1016\u102c\u1004\u103a\u1037","text_props":"\u1005\u102c\u101e\u102c\u1038","positioning_tab":"\u1010\u100a\u103a\u1031\u1014\u101b\u102c","list_tab":"\u1005\u102c\u101b\u1004\u103a\u1038","border_tab":"\u1014\u101a\u103a\u1005\u100a\u103a\u1038","box_tab":"\u1015\u1036\u102f\u1038","block_tab":"\u1021\u1000\u103d\u1000\u103a","background_tab":"\u1031\u1014\u102c\u1000\u103a\u1001","text_tab":"\u1005\u102c\u101e\u102c\u1038",apply:"\u1021\u101e\u1036\u102f\u1038\u103c\u1015\u102f\u1019\u100a\u103a",title:"CSS \u1005\u1010\u102d\u102f\u1004\u103a \u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a",clip:"\u1000\u101c\u1005\u103a",placement:"\u1031\u1014\u101b\u102c\u1021\u1011\u102c\u1038\u1021\u101e\u102d\u102f",overflow:"\u101c\u103b\u103e\u1036\u1011\u103d\u1000\u103a\u1019\u103e\u102f",zindex:"Z-Index",visibility:"\u103c\u1019\u1004\u103a\u1014\u102d\u102f\u1004\u103a\u1005\u103d\u1019\u103a\u1038","positioning_type":"\u1021\u1019\u103b\u102d\u102f\u1038\u1021\u1005\u102c\u1038",position:"\u1010\u100a\u103a\u1031\u1014\u101b\u102c","bullet_image":"\u1021\u1019\u103e\u1010\u103a\u1021\u101e\u102c\u1038 \u101b\u102f\u1015\u103a\u1015\u1036\u102f","list_type":"\u1021\u1019\u102d\u103b\u102f\u1038\u1021\u1005\u102c\u1038",color:"\u1021\u1031\u101b\u102c\u1004\u103a",height:"\u1021\u103c\u1019\u1004\u103a\u1037",width:"\u1021\u1000\u103b\u101a\u103a",style:"\u1005\u1010\u102d\u102f\u1004\u103a",margin:"\u1031\u1018\u1038\u1019\u103b\u1009\u103a\u1038",left:"\u1018\u101a\u103a",bottom:"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001",right:"\u100a\u102c",top:"\u1021\u1011\u1000\u103a",same:"\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1021\u1010\u1030\u1010\u1030",padding:"\u1031\u1018\u1038\u1021\u1000\u102c\u1000\u103d\u1000\u103a\u101c\u1015\u103a","box_clear":"\u1015\u101a\u103a\u101b\u103e\u1004\u103a\u1038","box_float":"\u1031\u1019\u103b\u102c\u101c\u103d\u1004\u103a\u1037","box_height":"\u1021\u103c\u1019\u1004\u103a\u1037","box_width":"\u1021\u1000\u103b\u101a\u103a","block_display":"\u103c\u1015\u101e\u1015\u1036\u102f \u103c\u1019\u1004\u103a\u1000\u103d\u1004\u103a\u1038","block_whitespace":"\u1021\u103c\u1016\u1030\u1031\u101b\u102c\u1004\u103a\u1000\u103d\u1000\u103a\u101c\u1015\u103a","block_text_indent":"\u1005\u102c\u101e\u102c\u1038 Indent","block_text_align":"\u1005\u102c\u101e\u102c\u1038 \u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1015\u1036\u102f","block_vertical_alignment":"\u1031\u1012\u102b\u1004\u103a\u101c\u102d\u102f\u1000\u103a \u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f","block_letterspacing":"\u1005\u102c\u101c\u1036\u102f\u1038 \u1021\u1000\u103d\u102c\u1021\u1031\u101d\u1038","block_wordspacing":"\u1005\u1000\u102c\u1038\u101c\u1036\u102f\u1038 \u1021\u1000\u103d\u102c\u1021\u1031\u101d\u1038","background_vpos":"\u1031\u1012\u102b\u1004\u103a\u101c\u102d\u102f\u1000\u103a \u1010\u100a\u103a\u1031\u1014\u101b\u102c","background_hpos":"\u1021\u101c\u103b\u102c\u1038\u101c\u102d\u102f\u1000\u103a \u1010\u100a\u103a\u1031\u1014\u101b\u102c","background_attachment":"\u1010\u103d\u1032\u1001\u103b\u102d\u1010\u103a\u1019\u103e\u102f","background_repeat":"\u103c\u1015\u1014\u103a\u1031\u1000\u103b\u102c\u1037","background_image":"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u101b\u102f\u1015\u103a\u1015\u1036\u102f","background_color":"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u1021\u1031\u101b\u102c\u1004\u103a","text_none":"\u1010\u1005\u103a\u1001\u102f\u1019\u103b\u103e\u1019\u101f\u102f\u1010\u103a","text_blink":"\u1019\u103e\u102d\u1010\u103a\u1010\u102f\u1010\u103a\u1019\u103e\u102d\u1010\u103a\u1010\u102f\u1010\u103a","text_case":"\u1031\u1000\u1037\u1005\u103a(\u1005\u102c\u101c\u1036\u102f\u1038\u1021\u103c\u1000\u102e\u1038\u1021\u1031\u101e\u1038)","text_striketrough":"\u103c\u1016\u1010\u103a\u1019\u103b\u1009\u103a\u1038","text_underline":"\u1031\u1021\u102c\u1000\u103a\u1019\u103b\u1009\u103a\u1038","text_overline":"\u1021\u1031\u1015\u102b\u103a\u1019\u103b\u1009\u103a\u1038","text_decoration":"\u1021\u101c\u103e\u1021\u1015\u1021\u103c\u1015\u1004\u103a\u1021\u1006\u1004\u103a","text_color":"\u1021\u1031\u101b\u102c\u1004\u103a",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nb_dlg.js
new file mode 100644
index 000000000..c17857477
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.style_dlg',{"text_lineheight":"Linjeh\u00f8yde","text_variant":"Variant","text_style":"Skriftstil","text_weight":"Skriftvekt","text_size":"Skriftst\u00f8rrelse","text_font":"Skrifttype","text_props":"Skriftegenskaper","positioning_tab":"Posisjon","list_tab":"Liste","border_tab":"Ramme","box_tab":"Boks","block_tab":"Blokk","background_tab":"Bakgrunn","text_tab":"Tekst",apply:"Legg til",title:"Rediger CSS-stil",clip:"Klipp",placement:"Plassering",overflow:"Overfyll",zindex:"Z-indeks",visibility:"Synlighet","positioning_type":"Type",position:"Posisjon","bullet_image":"Punktbilde","list_type":"Type",color:"Farge",height:"H\u00f8yde",width:"Bredde",style:"Stil",margin:"Marg",left:"Venstre",bottom:"Bunn",right:"H\u00f8yre",top:"Topp",same:"Lik i alle",padding:"Utfylling","box_clear":"Slett","box_float":"Flyt","box_height":"H\u00f8yde","box_width":"Bredde","block_display":"Framvising","block_whitespace":"Mellomrom","block_text_indent":"Innrykk","block_text_align":"Justering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Bokstavmellomrom","block_wordspacing":"Ordmellomrom","background_vpos":"Vertikal posisjon","background_hpos":"Horisontal posisjon","background_attachment":"Vedlegg","background_repeat":"Gjenta","background_image":"Bakgrunnsbilde","background_color":"Bakgrunnsfarge","text_none":"Ingen","text_blink":"Blink","text_case":"Store / sm\u00e5 bokstaver","text_striketrough":"Gjennomstreking","text_underline":"Senke skrift","text_overline":"Heve skrift","text_decoration":"Dekorasjon","text_color":"Farge",text:"Tekst",background:"Bakgrunn",block:"Blokk",box:"Boks",border:"Ramme",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nl_dlg.js
new file mode 100644
index 000000000..ad81f8f85
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.style_dlg',{"text_lineheight":"Lijnhoogte","text_variant":"Variant","text_style":"Stijl","text_weight":"Gewicht","text_size":"Tekengrootte","text_font":"Lettertype","text_props":"Tekst","positioning_tab":"Positionering","list_tab":"Lijst","border_tab":"Rand","box_tab":"Box","block_tab":"Blok","background_tab":"Achtergrond","text_tab":"Tekst",apply:"Toepassen",title:"CSS Stijl bewerken",clip:"Clip",placement:"Plaatsing",overflow:"Overvloeien",zindex:"Z-index",visibility:"Zichtbaarheid","positioning_type":"Type",position:"Positie","bullet_image":"Opsommingsteken","list_type":"Type",color:"Kleur",height:"Hoogte",width:"Breedte",style:"Stijl",margin:"Marge",left:"Links",bottom:"Onder",right:"Rechts",top:"Boven",same:"Alles hetzelfde",padding:"Opening","box_clear":"Vrijhouden","box_float":"Zweven","box_height":"Hoogte","box_width":"Breedte","block_display":"Weergave","block_whitespace":"Witruimte","block_text_indent":"Inspringen","block_text_align":"Tekstuitlijning","block_vertical_alignment":"Verticale uitlijning","block_letterspacing":"Letterruimte","block_wordspacing":"Woordruimte","background_vpos":"Verticale positie","background_hpos":"Horizontale positie","background_attachment":"Bijlage","background_repeat":"Herhalen","background_image":"Achtergrondafbeelding","background_color":"Achtergrondkleur","text_none":"Niets","text_blink":"Knipperen","text_case":"Hoofdlettergebruik","text_striketrough":"Doorhalen","text_underline":"Onderstrepen","text_overline":"Overhalen","text_decoration":"Decoratie","text_color":"Kleur",text:"Tekst",background:"Achtergrond",block:"Blok",box:"Box",border:"Rand",list:"Lijst"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nn_dlg.js
new file mode 100644
index 000000000..8b891c131
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.style_dlg',{"text_lineheight":"Linjeh\u00f8gd","text_variant":"Variant","text_style":"Skriftstil","text_weight":"Skriftvekt","text_size":"Skriftstorleik","text_font":"Skrifttype","text_props":"Eigenskapar for skrift","positioning_tab":"Posisjon","list_tab":"Liste","border_tab":"Ramme","box_tab":"Boks","block_tab":"Blokk","background_tab":"Bakgrunn","text_tab":"Tekst",apply:"Legg til",title:"Rediger CSS-stil",clip:"Klipp",placement:"Plassering",overflow:"Overfylt",zindex:"Z-indeks",visibility:"Synlegheit","positioning_type":"Type",position:"Posisjon","bullet_image":"Kulepunktbilete","list_type":"Type",color:"Farge",height:"H\u00f8gd",width:"Breidd",style:"Stil",margin:"Marg",left:"Venstre",bottom:"Bunn",right:"H\u00f8gre",top:"Topp",same:"Likt i alle",padding:"Utfylling","box_clear":"Slett","box_float":"Flyt","box_height":"H\u00f8gd","box_width":"Breidd","block_display":"Framsyning","block_whitespace":"Mellomrom","block_text_indent":"Innrykk","block_text_align":"Justering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Bokstavmellomrom","block_wordspacing":"Ordmellomrom","background_vpos":"Vertikal posisjon","background_hpos":"Horisontal posisjon","background_attachment":"Vedlegg","background_repeat":"Gjenta","background_image":"Bakgrunnsbilete","background_color":"Bakgrunnsfarge","text_none":"Ingen","text_blink":"Blink","text_case":"Kapitelar/minusklar","text_striketrough":"Gjennomstreking","text_underline":"Senka skrift","text_overline":"Heva skrift","text_decoration":"Dekorasjon","text_color":"Farge",text:"Tekst",background:"Bakgrunn",block:"Blokk",box:"Boks",border:"Ramme",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/no_dlg.js
new file mode 100644
index 000000000..5591c2f70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.style_dlg',{"text_lineheight":"Linjeh\u00f8yde","text_variant":"Variant","text_style":"Skriftstil","text_weight":"Skriftvekt","text_size":"Skriftst\u00f8rrelse","text_font":"Skrifttype","text_props":"Tekst","positioning_tab":"Posisjon","list_tab":"Liste","border_tab":"Ramme","box_tab":"Boks","block_tab":"Blokk","background_tab":"Bakgrunn","text_tab":"Tekst",apply:"Bruk",title:"Rediger CSS-stil",clip:"Klipp",placement:"Plassering",overflow:"Overfylt",zindex:"Z-indeks",visibility:"Synlighet","positioning_type":"Type",position:"Posisjon","bullet_image":"Punkt bilde","list_type":"Type",color:"Farge",height:"H\u00f8yde",width:"Bredde",style:"Stil",margin:"Marg",left:"Venstre",bottom:"Bunn",right:"H\u00f8yre",top:"Topp",same:"Likt for alle",padding:"Utfylling","box_clear":"Slette","box_float":"Flytende","box_height":"H\u00f8yde","box_width":"Bredde","block_display":"Visning","block_whitespace":"Mellomrom","block_text_indent":"Innrykk","block_text_align":"Justering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Bokstav mellomrom","block_wordspacing":"Mellomrom","background_vpos":"Vertikal posisjon","background_hpos":"Horisontal posisjon","background_attachment":"Vedlegg","background_repeat":"Repetere","background_image":"Bakgrunnsbilde","background_color":"Bakgrunnsfarge","text_none":"Ingen","text_blink":"Blinke","text_case":"Store/sm\u00e5 bokstaver","text_striketrough":"Gjennomstreke","text_underline":"Senke skrift","text_overline":"Heve skrift","text_decoration":"Dekorasjon","text_color":"Farge",text:"Tekst",background:"Bakgrunn",block:"Blokk",box:"Boks",border:"Ramme",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/pl_dlg.js
new file mode 100644
index 000000000..1dd01ce03
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.style_dlg',{"text_lineheight":"Wysoko\u015b\u0107 linii","text_variant":"Wariant","text_style":"Styl","text_weight":"Waga","text_size":"Rozmiar","text_font":"Wz\u00f3r czcionki","text_props":"Tekst","positioning_tab":"Pozycjonowanie","list_tab":"Lista","border_tab":"Obramowanie","box_tab":"Pud\u0142o (box)","block_tab":"Blok","background_tab":"T\u0142o","text_tab":"Text",apply:"Zastosuj",title:"Edytuj style CSS",clip:"Klip",placement:"Umieszczenie",overflow:"Przepe\u0142niony",zindex:"Z-index",visibility:"Widoczno\u015b\u0107","positioning_type":"Typ",position:"Pozycja","bullet_image":"Obrazek listy","list_type":"Typ",color:"Kolor",height:"Wysoko\u015b\u0107",width:"Szeroko\u015b\u0107",style:"Styl",margin:"Margines",left:"Lewy",bottom:"D\u00f3\u0142",right:"Prawy",top:"G\u00f3ra",same:"To samo dla wszystkich",padding:"Odst\u0119py","box_clear":"Op\u0142ywanie (Clear)","box_float":"Op\u0142ywanie (Float)","box_height":"Wysoko\u015b\u0107","box_width":"Szeroko\u015b\u0107","block_display":"Spos\u00f3b wy\u015bwietlania","block_whitespace":"Bia\u0142e znaki","block_text_indent":"Przesuni\u0119cie tekstu","block_text_align":"Wyr\u00f3wnanie tekstu","block_vertical_alignment":"Pionowe wyr\u00f3wnanie","block_letterspacing":"Odst\u0119p mi\u0119dzy literami","block_wordspacing":"Odst\u0119p mi\u0119dzy wyrazami","background_vpos":"Pozycja pionowa","background_hpos":"Pozycja pozioma","background_attachment":"Za\u0142\u0105cznik","background_repeat":"Powt\u00f3rz","background_image":"Obrazek t\u0142a","background_color":"Kolor t\u0142a","text_none":"\u017caden","text_blink":"miganie","text_case":"Znaki","text_striketrough":"przekre\u015blenie","text_underline":"podkre\u015blenie","text_overline":"nadkre\u015blenie","text_decoration":"Dekoracja","text_color":"Kolor",text:"Tekst",background:"T\u0142o",block:"Blok",box:"Pud\u0142o (box)",border:"Obramowanie",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ps_dlg.js
new file mode 100644
index 000000000..aa85aad72
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/pt_dlg.js
new file mode 100644
index 000000000..21c6b5e16
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.style_dlg',{"text_lineheight":"Altura da linha","text_variant":"Variante","text_style":"Estilo","text_weight":"Peso","text_size":"Tamanho","text_font":"Fonte","text_props":"Texto","positioning_tab":"Posicionamento","list_tab":"Lista","border_tab":"Limites","box_tab":"Caixa","block_tab":"Bloco","background_tab":"Fundo","text_tab":"Texto",apply:"Aplicar",title:"Editar CSS",clip:"Clip",placement:"Posicionamento",overflow:"Overflow",zindex:"Z-index",visibility:"Visibilidade","positioning_type":"Tipo",position:"Posi\u00e7\u00e3o","bullet_image":"Imagem de lista","list_type":"Tipo",color:"Cor",height:"Altura",width:"Largura",style:"Estilo",margin:"Margem",left:"Esquerda",bottom:"Abaixo",right:"Direita",top:"Topo",same:"O mesmo para todos",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Altura","box_width":"Largura","block_display":"Display","block_whitespace":"Espa\u00e7o","block_text_indent":"Indent","block_text_align":"Alinhamento de texto","block_vertical_alignment":"Alinhamento vertical","block_letterspacing":"Espa\u00e7amento de letras","block_wordspacing":"Espa\u00e7amento de palavras","background_vpos":"Posi\u00e7\u00e3o vertical","background_hpos":"Posi\u00e7\u00e3o horizontal","background_attachment":"Fixar","background_repeat":"Repetir","background_image":"Imagem de fundo","background_color":"Cor de fundo","text_none":"nenhum","text_blink":"Piscar","text_case":"Mai\u00fascula","text_striketrough":"Riscado","text_underline":"Sublinhado","text_overline":"Sobrelinha","text_decoration":"Decora\u00e7\u00e3o","text_color":"Cor",text:"Texto",background:"Fundo",block:"Bloco",box:"Caixa",border:"Borda",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ro_dlg.js
new file mode 100644
index 000000000..98a160574
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.style_dlg',{"text_lineheight":"\u00cen\u0103l\u021bime linie","text_variant":"Variant\u0103","text_style":"Stil","text_weight":"Greutate","text_size":"M\u0103rime","text_font":"Font","text_props":"Text","positioning_tab":"Pozi\u021bionare","list_tab":"List\u0103","border_tab":"Bordur\u0103","box_tab":"Box","block_tab":"Block","background_tab":"Fundal","text_tab":"Text",apply:"Aplic\u0103",title:"Editare CSS",clip:"Clip",placement:"Plasament",overflow:"Overflow",zindex:"Z-index",visibility:"Vizibilitate","positioning_type":"Tip",position:"Pozi\u021bionare","bullet_image":"Imagine","list_type":"Tip",color:"Culoare",height:"\u00cen\u0103l\u021bime",width:"L\u0103\u021bime",style:"Stil",margin:"Margini",left:"St\u00e2nga",bottom:"Jos",right:"Dreapta",top:"Sus",same:"La fel pentru toate",padding:"Margini interne","box_clear":"Normal\u0103","box_float":"Plutitoare","box_height":"\u00cen\u0103l\u021bime","box_width":"L\u0103\u0163ime","block_display":"Afi\u0219are","block_whitespace":"Spa\u0163iu alb","block_text_indent":"Indentare text","block_text_align":"Aliniere text","block_vertical_alignment":"Aliniere vertical\u0103","block_letterspacing":"Spa\u021biere litere","block_wordspacing":"Spa\u021biere cuvinte","background_vpos":"Pozi\u021bionare vertical\u0103","background_hpos":"Pozi\u021bionare orizontal\u0103","background_attachment":"Ata\u0219ament","background_repeat":"Repet\u0103","background_image":"Imagine fundal","background_color":"Culoare fundal","text_none":"Nici unul","text_blink":"Clipire","text_case":"Caz","text_striketrough":"T\u0103iere","text_underline":"Sub linie","text_overline":"Peste linie","text_decoration":"Decora\u021bii","text_color":"Culoare",text:"Text",background:"Fundal",block:"Bloc",box:"Cutie",border:"Bordur\u0103",list:"List\u0103"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ru_dlg.js
new file mode 100644
index 000000000..857077c93
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.style_dlg',{"text_lineheight":"\u0412\u044b\u0441\u043e\u0442\u0430 \u0441\u0442\u0440\u043e\u043a\u0438","text_variant":"\u0412\u0430\u0440\u0438\u0430\u043d\u0442","text_style":"\u0421\u0442\u0438\u043b\u044c","text_weight":"\u0422\u043e\u043b\u0449\u0438\u043d\u0430","text_size":"\u0420\u0430\u0437\u043c\u0435\u0440","text_font":"\u0428\u0440\u0438\u0444\u0442","text_props":"\u0422\u0435\u043a\u0441\u0442","positioning_tab":"\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435","list_tab":"\u0421\u043f\u0438\u0441\u043e\u043a","border_tab":"\u0413\u0440\u0430\u043d\u0438\u0446\u0430","box_tab":"\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0424\u043e\u043d","text_tab":"\u0422\u0435\u043a\u0441\u0442",apply:"\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c",title:"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 CSS \u0441\u0442\u0438\u043b\u044f",clip:"\u041e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u0435",placement:"\u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435",overflow:"\u041f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435",zindex:"Z-\u0438\u043d\u0434\u0435\u043a\u0441",visibility:"\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c","positioning_type":"\u0422\u0438\u043f",position:"\u041f\u043e\u0437\u0438\u0446\u0438\u044f","bullet_image":"\u041c\u0430\u0440\u043a\u0435\u0440","list_type":"\u0422\u0438\u043f",color:"\u0426\u0432\u0435\u0442",height:"\u0412\u044b\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",style:"\u0421\u0442\u0438\u043b\u044c",margin:"\u041e\u0442\u0441\u0442\u0443\u043f",left:"\u0421\u043b\u0435\u0432\u0430",bottom:"\u0421\u043d\u0438\u0437\u0443",right:"\u0421\u043f\u0440\u0430\u0432\u0430",top:"\u0412\u0432\u0435\u0440\u0445",same:"\u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445",padding:"\u041f\u043e\u043b\u044f","box_clear":"\u042f\u0432\u043d\u044b\u0439","box_float":"\u041f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u0439","box_height":"\u0412\u044b\u0441\u043e\u0442\u0430","box_width":"\u0428\u0438\u0440\u0438\u043d\u0430","block_display":"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","block_whitespace":"\u041f\u0440\u043e\u0431\u0435\u043b","block_text_indent":"\u041e\u0442\u0441\u0442\u0443\u043f \u0442\u0435\u043a\u0441\u0442\u0430","block_text_align":"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","block_letterspacing":"\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u043c\u0435\u0436\u0434\u0443 \u0431\u0443\u043a\u0432\u0430\u043c\u0438","block_wordspacing":"\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u043e\u0432\u0430\u043c\u0438","background_vpos":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f","background_hpos":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f","background_attachment":"\u041f\u0440\u0438\u0432\u044f\u0437\u043a\u0430","background_repeat":"\u041f\u043e\u0432\u0442\u043e\u0440","background_image":"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","background_color":"\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430","text_none":"\u0411\u0435\u0437 \u0432\u0441\u0435\u0433\u043e","text_blink":"\u041c\u0435\u0440\u0446\u0430\u044e\u0449\u0438\u0439","text_case":"\u0420\u0435\u0433\u0438\u0441\u0442\u0440","text_striketrough":"\u0417\u0430\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","text_underline":"\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","text_overline":"\u0421 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0435\u0440\u0442\u043e\u0439","text_decoration":"\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435","text_color":"\u0426\u0432\u0435\u0442",text:"\u0422\u0435\u043a\u0441\u0442",background:"\u0424\u043e\u043d",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430",list:"\u0421\u043f\u0438\u0441\u043e\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sc_dlg.js
new file mode 100644
index 000000000..b50719be3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u53d8\u4f53","text_style":"\u6837\u5f0f","text_weight":"\u5bbd\u5ea6","text_size":"\u5c3a\u5bf8","text_font":"\u5b57\u4f53","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u7bb1\u578b","block_tab":"\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5e94\u7528",title:"\u7f16\u8f91CSS\u6837\u5f0f\u8868\u5355",clip:"\u526a\u8f91",placement:"\u5e03\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z\u8f74\u6df1\u5ea6",visibility:"\u53ef\u89c1\u6027","positioning_type":"\u7c7b\u578b",position:"\u56fe\u793a\u4f4d\u7f6e","bullet_image":"\u4e13\u6848\u56fe\u793a","list_type":"\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",style:"\u6837\u5f0f",margin:"\u8fb9\u754c",left:"\u9760\u5de6",bottom:"\u4e0b\u65b9",right:"\u9760\u53f3",top:"\u4e0a\u65b9",same:"\u5168\u90e8\u4e00\u6837",padding:"\u7559\u767d","box_clear":"\u6e05\u9664","box_float":"\u6d6e\u52a8","box_height":"\u9ad8\u5ea6","box_width":"\u5bbd\u5ea6","block_display":"\u663e\u793a\u65b9\u5f0f","block_whitespace":"\u7a7a\u767d","block_text_indent":"\u6587\u5b57\u7f29\u6392","block_text_align":"\u6587\u5b57\u5bf9\u9f50","block_vertical_alignment":"\u6c34\u51c6\u5bf9\u9f50\u65b9\u5f0f","block_letterspacing":"\u5b57\u5143\u95f4\u8ddd","block_wordspacing":"\u5355\u5b57\u95f4\u8ddd","background_vpos":"\u6c34\u51c6\u4f4d\u7f6e","background_hpos":"\u5782\u76f4\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u4f53","text_striketrough":"\u5220\u9664\u7ebf","text_underline":"\u5e95\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u4fee\u9970","text_color":"\u989c\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/se_dlg.js
new file mode 100644
index 000000000..4927d6993
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.style_dlg',{"text_lineheight":"Radh\u00f6jd","text_variant":"Variant","text_style":"Stil","text_weight":"Tjocklek","text_size":"Storlek","text_font":"Typsnitt","text_props":"Text","positioning_tab":"Positionering","list_tab":"Listor","border_tab":"Ramar","box_tab":"Box","block_tab":"Block","background_tab":"Bakgrund","text_tab":"Text",apply:"Applicera",title:"Redigera inline CSS",clip:"Besk\u00e4rning",placement:"Placering",overflow:"\u00d6verfl\u00f6de",zindex:"Z-index",visibility:"Synlighet","positioning_type":"Positionstyp",position:"Position","bullet_image":"Punktbild","list_type":"Listtyp",color:"F\u00e4rg",height:"H\u00f6jd",width:"Bredd",style:"Stil",margin:"Marginal",left:"V\u00e4nster",bottom:"Botten",right:"H\u00f6ger",top:"Toppen",same:"Samma f\u00f6r alla",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"H\u00f6jd","box_width":"Bredd","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Textindrag","block_text_align":"Textjustering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Teckenmellanrum","block_wordspacing":"Ordavbrytning","background_vpos":"Vertikal position","background_hpos":"Horisontell position","background_attachment":"F\u00e4stpunkt","background_repeat":"Upprepning","background_image":"Bakgrundsbild","background_color":"Bakgrundsf\u00e4rg","text_none":"Inget","text_blink":"Blinka","text_case":"Sm\u00e5/stora","text_striketrough":"Genomstruken","text_underline":"Understruken","text_overline":"\u00d6verstruken","text_decoration":"Dekoration","text_color":"F\u00e4rg",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/si_dlg.js
new file mode 100644
index 000000000..3d6725022
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sk_dlg.js
new file mode 100644
index 000000000..d184cd34e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.style_dlg',{"text_lineheight":"V\u00fd\u0161ka riadkov","text_variant":"Varianta","text_style":"\u0160t\u00fdl textu","text_weight":"Tu\u010dnos\u0165 p\u00edsma","text_size":"Ve\u013ekos\u0165","text_font":"P\u00edsmo","text_props":"Text","positioning_tab":"Umiestnenie","list_tab":"Zoznam","border_tab":"Or\u00e1movanie","box_tab":"Box","block_tab":"Blok","background_tab":"Pozadie","text_tab":"Text",apply:"Pou\u017ei\u0165",title:"Upravi\u0165 CSS \u0161t\u00fdl",clip:"Orezanie (clip)",placement:"Umiestnenie",overflow:"Prete\u010denie (overflow)",zindex:"Z-index",visibility:"Vidite\u013enos\u0165","positioning_type":"Typ",position:"Umiestnenie","bullet_image":"\u0160t\u00fdl odr\u00e1\u017eok","list_type":"Typ",color:"Farba",height:"V\u00fd\u0161ka",width:"\u0160\u00edrka",style:"\u0160t\u00fdl",margin:"Okraje (margin)",left:"V\u013eavo",bottom:"Dole",right:"Vpravo",top:"Hore",same:"Rovnak\u00e9 pre v\u0161etky",padding:"Odsadenie (padding)","box_clear":"Vy\u010disti\u0165","box_float":"Pl\u00e1vaj\u00faci","box_height":"V\u00fd\u0161ka","box_width":"\u0160\u00edrka","block_display":"Blokov\u00e9 zobrazenie","block_whitespace":"Zalamovanie textu","block_text_indent":"Odsadenie textu","block_text_align":"Zarovnanie textu","block_vertical_alignment":"Vertik\u00e1lne zarovnanie","block_letterspacing":"Rozstup znakov","block_wordspacing":"Rozstup slov","background_vpos":"Vertik\u00e1lne umiestnenie","background_hpos":"Horizont\u00e1lne umiestnenie","background_attachment":"Rolovanie","background_repeat":"Opakovanie","background_image":"Obr\u00e1zok pozadia","background_color":"Farba pozadia","text_none":"\u017eiadna","text_blink":"blikanie","text_case":"Ve\u013ek\u00e9 p\u00edsmen\u00e1","text_striketrough":"pre\u010diarknutie","text_underline":"pod\u010diarknutie","text_overline":"nad\u010diarknutie","text_decoration":"Dekor\u00e1cia","text_color":"Farba",text:"Text",background:"Pozadie",block:"Blok",box:"Box",border:"Or\u00e1movanie",list:"Zoznam"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sl_dlg.js
new file mode 100644
index 000000000..e2b8f2e1d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.style_dlg',{"text_lineheight":"Vi\u0161ina vrstice","text_variant":"Razli\u010dica","text_style":"Slog","text_weight":"Ute\u017e","text_size":"Velikost","text_font":"Pisava","text_props":"Besedilo","positioning_tab":"Polo\u017eaj","list_tab":"Seznam","border_tab":"Obroba","box_tab":"Okvir","block_tab":"Blok","background_tab":"Ozadje","text_tab":"Besedilo",apply:"Uporabi",title:"Uredi sloge CSS",clip:"Obre\u017ei",placement:"Polo\u017eaj",overflow:"Prelivanje",zindex:"Z-indeks",visibility:"Vidnost","positioning_type":"Vrsta",position:"Polo\u017eaj","bullet_image":"Slika alineje","list_type":"Vrsta",color:"Barva",height:"Vi\u0161ina",width:"\u0160irina",style:"Slog",margin:"Rob",left:"Levo",bottom:"Spodaj",right:"Desno",top:"Zgoraj",same:"Enako za vse",padding:"Podlaganje","box_clear":"\u010cisto","box_float":"Plavojo\u010de","box_height":"Vi\u0161ina","box_width":"\u0160irina","block_display":"Prikaz","block_whitespace":"Beli prostor","block_text_indent":"Zamik besedila","block_text_align":"Poravnava besedila","block_vertical_alignment":"Navpi\u010dna poravnava","block_letterspacing":"Razmik znakov","block_wordspacing":"Razmik besed","background_vpos":"Navpi\u010dni polo\u017eaj","background_hpos":"Vodoravni polo\u017eaj","background_attachment":"Priponka","background_repeat":"Ponavljaj","background_image":"Slika ozadja","background_color":"Barva ozadja","text_none":"brez","text_blink":"utripajo\u010de","text_case":"Velikost","text_striketrough":"pre\u010drtano","text_underline":"pod\u010drtano","text_overline":"nad\u010drtano","text_decoration":"Dekoracija","text_color":"Barva",text:"Besedilo",background:"Ozadje",block:"Blok",box:"Okvir",border:"Obroba",list:"Seznam"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sq_dlg.js
new file mode 100644
index 000000000..01517670d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.style_dlg',{"text_lineheight":"Gjat\u00ebsia e linj\u00ebs","text_variant":"Varianti","text_style":"Stili","text_weight":"Pesha","text_size":"Madh\u00ebsia","text_font":"G\u00ebrma","text_props":"Teksti","positioning_tab":"Pozicionimi","list_tab":"Lista","border_tab":"Korniza","box_tab":"Kuti","block_tab":"Bllok","background_tab":"Sfondi","text_tab":"Teksti",apply:"Apliko",title:"Edito t\u00eb gjitha stilet",clip:"Prerja",placement:"Vendosja",overflow:"Mbivendosja",zindex:"Indeksi Z",visibility:"Shikueshm\u00ebria","positioning_type":"Tipi",position:"Pozicioni","bullet_image":"Foto e List\u00ebs","list_type":"Tipi",color:"Ngjyra",height:"Gjat\u00ebsia",width:"Gjer\u00ebsia",style:"Stili",margin:"Hap\u00ebsira",left:"Majtas",bottom:"Fund",right:"Djathtas",top:"Krye",same:"E nj\u00ebjt\u00eb p\u00ebr t\u00eb gjitha",padding:"Hap\u00ebsira e br\u00ebndshme","box_clear":"Pastro","box_float":"Pluskimi","box_height":"Gjat\u00ebsia","box_width":"Gjer\u00ebsia","block_display":"Shfaqja","block_whitespace":"Hap\u00ebsira bosh","block_text_indent":"Kryerradha","block_text_align":"Drejtimi i tekstit","block_vertical_alignment":"Drejtimi vertikal","block_letterspacing":"Hap\u00ebsira e g\u00ebrmave","block_wordspacing":"Hap\u00ebsira e fjal\u00ebve","background_vpos":"Pozicionimi vertikal","background_hpos":"Pozicionimi horizontal","background_attachment":"Bashk\u00ebngjitja","background_repeat":"P\u00ebrs\u00ebritja","background_image":"Foto e Sfondit","background_color":"Ngjyra e Sfondit","text_none":"Asnj\u00eb","text_blink":"Fik-Ndiz","text_case":"Madh\u00ebsia e g\u00ebrm\u00ebs","text_striketrough":"N\u00eb mes","text_underline":"N\u00ebn linj\u00eb","text_overline":"Mbi linj\u00eb","text_decoration":"Zbukurimi","text_color":"Ngjyra",text:"Teskt",background:"Sfondi",block:"Bllok",box:"Kuti",border:"Korniz\u00eb",list:"List\u00eb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sr_dlg.js
new file mode 100644
index 000000000..8765f5bc8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.style_dlg',{"text_lineheight":"Visina reda","text_variant":"Varijanta","text_style":"Oblik","text_weight":"Podebljanost","text_size":"Veli\u010dina","text_font":"Pismo","text_props":"Tekst","positioning_tab":"Pozicioniranje","list_tab":"Nabrajanje","border_tab":"Ivice","box_tab":"Okvir","block_tab":"Blok teksta","background_tab":"Pozadina","text_tab":"Tekst",apply:"Primeni",title:"Uredi CSS stil",clip:"Odsecanje (clip)",placement:"Postavljanje (placement)",overflow:"Prelivanje (overflow)",zindex:"Z-index",visibility:"Vidljivost","positioning_type":"Vrsta",position:"Pozicija","bullet_image":"Slika (za znak)","list_type":"Tip znaka",color:"Boja",height:"Visina",width:"\u0160irina",style:"Oblik",margin:"Margine",left:"Levo",bottom:"Dole",right:"Desno",top:"Gore",same:"Isto za sve",padding:"Dopuna (padding)","box_clear":"O\u010disti (clear)","box_float":"Pliva (float)","box_height":"Visina","box_width":"\u0160irina","block_display":"Prikaz (display)","block_whitespace":"Razmaci (white-space)","block_text_indent":"Uvla\u010denje teksta","block_text_align":"Poravnanje teksta","block_vertical_alignment":"Vertikalno poravnanje","block_letterspacing":"Razmak slova","block_wordspacing":"Razmak re\u010di","background_vpos":"Vertikalna pozicija","background_hpos":"Horizontalna pozicija","background_attachment":"Ka\u010denje","background_repeat":"Ponavljanje","background_image":"Slika u pozadini","background_color":"Boja pozadine","text_none":"ni\u0161ta","text_blink":"treperi","text_case":"Velika/Mala slova","text_striketrough":"precrtano","text_underline":"podvu\u010deno","text_overline":"nadvu\u010deno","text_decoration":"Dekoracija","text_color":"Boja",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sv_dlg.js
new file mode 100644
index 000000000..4a529541e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.style_dlg',{"text_lineheight":"Radh\u00f6jd","text_variant":"Variant","text_style":"Stil","text_weight":"Tjocklek","text_size":"Storlek","text_font":"Typsnitt","text_props":"Text","positioning_tab":"Positionering","list_tab":"Listor","border_tab":"Ramar","box_tab":"Box","block_tab":"Block","background_tab":"Bakgrund","text_tab":"Text",apply:"Applicera",title:"Redigera inline CSS",clip:"Besk\u00e4rning",placement:"Placering",overflow:"\u00d6\u0096verfl\u00f6de",zindex:"Z-index",visibility:"Synlighet","positioning_type":"Positionstyp",position:"Position","bullet_image":"Punktbild","list_type":"Listtyp",color:"F\u00e4rg",height:"H\u00f6jd",width:"Bredd",style:"Stil",margin:"Marginal",left:"V\u00e4nster",bottom:"Botten",right:"H\u00f6ger",top:"Toppen",same:"Samma f\u00f6r alla",padding:"Padding","box_clear":"Rensa","box_float":"Flyt","box_height":"H\u00f6jd","box_width":"Bredd","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Textindrag","block_text_align":"Textjustering","block_vertical_alignment":"Vertikal justering","block_letterspacing":"Teckenmellanrum","block_wordspacing":"Ordavbrytning","background_vpos":"Vertikal position","background_hpos":"Horisontell position","background_attachment":"F\u00e4stpunkt","background_repeat":"Upprepning","background_image":"Bakgrundsbild","background_color":"Bakgrundsf\u00e4rg","text_none":"Inget","text_blink":"Blinka","text_case":"Sm\u00e5/stora","text_striketrough":"Genomstruken","text_underline":"Understruken","text_overline":"\u00d6verstruken","text_decoration":"Dekoration","text_color":"F\u00e4rg",text:"Text",background:"Bakgrund",block:"Block",box:"Box",border:"Ram",list:"Lista"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sy_dlg.js
new file mode 100644
index 000000000..d335f8019
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.style_dlg',{"text_lineheight":"\u072a\u0721\u0718\u072c\u0710 \u0715\u0723\u072a\u071b\u0710","text_variant":"\u072c\u071a\u0720\u0718\u0726\u0710","text_style":"\u0710\u0723\u071f\u071d\u0721\u0710","text_weight":"\u071d\u0718\u0729\u072a\u0710","text_size":"\u0721\u072b\u0718\u071a\u072c\u0710","text_font":"\u0723\u072a\u071b\u0710","text_props":"\u0728\u071a\u071a\u0710","positioning_tab":"\u0721\u072c\u0712\u0742\u072c\u0710","list_tab":"\u0720\u071d\u0723\u072c\u0710","border_tab":"\u072c\u071a\u0718\u0721\u0308\u0710","box_tab":"\u0728\u0722\u0715\u0718\u0729\u0710","block_tab":"\u0713\u0718\u072b\u0721\u0710","background_tab":"\u0712\u072c\u0742\u072a\u071d\u0718\u072c\u0742\u0710","text_tab":"\u0728\u071a\u071a\u0710",apply:"\u0721\u0726\u0720\u071a",title:"\u0723\u071d\u0721\u072c\u0710 \u0715\u0710\u0723\u071f\u071d\u0721\u0710 \u0715css",clip:"\u0729\u071d\u0728\u072c\u0710",placement:"\u0721\u072c\u0712\u0742\u072c\u0710",overflow:"\u072b\u0726\u071d\u0725\u0718\u072c\u0742\u0710",zindex:"\u0717\u0715\u071d\u0722\u0710\u0640z",visibility:"\u0729\u072a\u071d\u071a\u0718\u072c\u0710","positioning_type":"\u0710\u0715\u072b\u0710",position:"\u0715\u0718\u071f\u0710","bullet_image":"\u0728\u0718\u072a\u072c\u0710 \u0715\u0713\u0718\u0720\u0720\u0710","list_type":"\u0710\u0715\u072b\u0710",color:"\u0713\u0718\u0722\u0710",height:"\u072a\u0721\u0718\u072c\u0710",width:"\u0726\u072c\u0742\u071d\u0718\u072c\u0742\u0710",style:"\u0710\u0723\u071f\u071d\u0721\u0710",margin:"\u0723\u0726\u072c\u0742\u0710",left:"\u0723\u0721\u0720\u0710",bottom:"\u072b\u072c\u0710",right:"\u071d\u0721\u071d\u0722\u0710",top:"\u0729\u072a\u0729\u0726\u072c\u0710",same:"\u0717\u072a \u0717\u0307\u0718 \u0720\u071f\u0720\u071d\u0717\u071d",padding:"\u0726\u072c\u071d\u071a\u0718\u072c \u0723\u072a\u0308\u071b\u0710","box_clear":"\u0721\u072b\u071d\u072c\u0710","box_float":"\u071b\u071d\u0726\u072c\u0710","box_height":"\u072a\u0721\u0718\u072c\u0710","box_width":"\u0726\u072c\u071d\u0718\u072c\u0710","block_display":"\u0721\u071a\u0719\u071d\u072c\u0710","block_whitespace":"\u0723\u0726\u071d\u0729\u0718\u072c\u0710 \u071a\u0718\u072a\u072c\u0710","block_text_indent":"\u0723\u0726\u071d\u0729\u0718\u072c\u0710 \u0729\u0715\u0721\u0721 \u0728\u071a\u071a\u0710","block_text_align":"\u0721\u0713\u0330\u072a\u0713\u0722\u072c\u0710 \u0715\u0728\u071a\u071a\u0710","block_vertical_alignment":"\u0721\u0713\u0330\u072a\u0713\u0722\u072c\u0710 \u0725\u0721\u0718\u0715\u071d\u072c\u0710","block_letterspacing":"\u0723\u0726\u071d\u0729\u0718\u072c\u0710 \u0712\u071d\u0722\u072c \u0710\u072c\u0718\u072c\u0308\u0710","block_wordspacing":"\u0723\u0726\u071d\u0729\u0718\u072c\u0710 \u0712\u071d\u0722\u072c \u0721\u0720\u0308\u0710","background_vpos":"\u072b\u0718\u0726\u0710 \u0725\u0721\u0718\u0715\u071d\u0710","background_hpos":"\u072b\u0718\u0726\u0710 \u0710\u0718\u0726\u0729\u071d\u0710","background_attachment":"\u0710\u0747\u0723\u071d\u072a\u0718\u072c\u0710","background_repeat":"\u072c\u0722\u071d\u072c\u0710","background_image":"\u0728\u0718\u072a\u072c\u0710 \u0715\u071a\u072a\u071d\u0718\u072c\u0710","background_color":"\u0713\u0718\u0722\u0710 \u0715\u071a\u072a\u071d\u0718\u072c\u0710","text_none":"\u0717\u071d\u071f\u0330 \u071a\u0715","text_blink":"\u0719\u0720\u0713\u0710","text_case":"\u0722\u0729\u071d\u0726\u0718\u072c\u0710","text_striketrough":"\u0723\u072a\u071b\u0710 \u0712\u0713\u0718","text_underline":"\u072c\u071a\u0718\u072c \u0723\u072a\u071b\u0710","text_overline":"\u0725\u0720 \u0723\u072a\u071b\u0710","text_decoration":"\u072b\u0726\u072a\u0722\u072c\u0710","text_color":"\u0713\u0718\u0722\u0710",text:"\u0728\u071a\u071a\u0710",background:"\u071a\u072a\u071d\u0718\u072c\u0710",block:"\u0713\u0718\u072b\u0721\u0710",box:"\u0728\u0722\u0715\u0718\u0729\u0710",border:"\u072c\u071a\u0718\u0721\u0308\u0710",list:"\u0720\u071d\u0723\u072c\u0710"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ta_dlg.js
new file mode 100644
index 000000000..4968e4563
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/te_dlg.js
new file mode 100644
index 000000000..176d6eb83
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/th_dlg.js
new file mode 100644
index 000000000..264f85ada
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.style_dlg',{"text_lineheight":"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14","text_variant":"Variant","text_style":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","text_weight":"\u0e19\u0e49\u0e33\u0e2b\u0e19\u0e31\u0e01","text_size":"\u0e02\u0e19\u0e32\u0e14","text_font":"\u0e41\u0e1a\u0e1a\u0e2d\u0e31\u0e01\u0e29\u0e23","text_props":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","positioning_tab":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07","list_tab":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23","border_tab":"\u0e02\u0e2d\u0e1a","box_tab":"\u0e01\u0e25\u0e48\u0e2d\u0e07","block_tab":"Block","background_tab":"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07","text_tab":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21",apply:"\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19",title:"\u0e41\u0e01\u0e49\u0e44\u0e02\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a CSS",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"\u0e2a\u0e35",height:"\u0e2a\u0e39\u0e07",width:"\u0e01\u0e27\u0e49\u0e32\u0e07",style:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",margin:"Margin",left:"\u0e0b\u0e49\u0e32\u0e22",bottom:"\u0e25\u0e48\u0e32\u0e07",right:"\u0e02\u0e27\u0e32",top:"\u0e1a\u0e19",same:"Same for all",padding:"Padding","box_clear":"\u0e25\u0e49\u0e32\u0e07","box_float":"\u0e25\u0e2d\u0e22","box_height":"\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e39\u0e07","box_width":"\u0e04\u0e27\u0e32\u0e21\u0e01\u0e27\u0e49\u0e32\u0e07","block_display":"\u0e41\u0e2a\u0e14\u0e07\u0e1c\u0e25","block_whitespace":"Whitespace","block_text_indent":"\u0e22\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","block_text_align":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","block_vertical_alignment":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07","block_letterspacing":"\u0e40\u0e27\u0e49\u0e19\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e0a\u0e48\u0e2d\u0e07\u0e44\u0e1f","block_wordspacing":"\u0e40\u0e27\u0e49\u0e19\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e23\u0e30\u0e2b\u0e27\u0e48\u0e32\u0e07\u0e04\u0e33","background_vpos":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07","background_hpos":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19","background_attachment":"\u0e2a\u0e34\u0e48\u0e07\u0e17\u0e35\u0e48\u0e41\u0e19\u0e1a","background_repeat":"\u0e0b\u0e49\u0e33","background_image":"\u0e23\u0e39\u0e1b\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07","background_color":"\u0e2a\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07","text_none":"\u0e44\u0e21\u0e48\u0e21\u0e35","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"\u0e02\u0e35\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e43\u0e15\u0e49","text_overline":"overline","text_decoration":"Decoration","text_color":"\u0e2a\u0e35",text:"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21",background:"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07",box:"\u0e01\u0e25\u0e48\u0e2d\u0e07",border:"\u0e02\u0e2d\u0e1a",list:"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23",block:"Block"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tn_dlg.js
new file mode 100644
index 000000000..0b6191af9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tr_dlg.js
new file mode 100644
index 000000000..bc12209f3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.style_dlg',{"text_lineheight":"\u00c7izgi y\u00fcksekli\u011fi","text_variant":"De\u011fi\u015fken","text_style":"Stil","text_weight":"Kal\u0131nl\u0131k","text_size":"Boyut","text_font":"Yaz\u0131 tipi","text_props":"Metin","positioning_tab":"Konumland\u0131rma","list_tab":"Listele","border_tab":"Kenarl\u0131k","box_tab":"Kutu","block_tab":"Blok","background_tab":"Arkaplan","text_tab":"Metin",apply:"Uygula",title:"CSS Stilini D\u00fczenle",clip:"K\u0131rp",placement:"Yerle\u015ftir",overflow:"Ta\u015fma",zindex:"Z-indeksi",visibility:"G\u00f6r\u00fcn\u00fcrl\u00fck","positioning_type":"Tip",position:"Konum","bullet_image":"Madde imi resmi","list_type":"Tip",color:"Renk",height:"Y\u00fckseklik",width:"Geni\u015flik",style:"Stil",margin:"Kenar bo\u015flu\u011fu",left:"Sol",bottom:"Alt",right:"Sa\u011f",top:"\u00dcst",same:"T\u00fcm\u00fc i\u00e7in",padding:"Dolgu","box_clear":"Serbest","box_float":"Kayan","box_height":"Y\u00fckseklik","box_width":"Geni\u015flik","block_display":"G\u00f6r\u00fcnt\u00fcle","block_whitespace":"Bo\u015fluk","block_text_indent":"Metnin girintisini art\u0131r","block_text_align":"Metin hizala","block_vertical_alignment":"Dikey hizalama","block_letterspacing":"harf bo\u015flu\u011fu","block_wordspacing":"Kelime bo\u015flu\u011fu","background_vpos":"Dikey konum","background_hpos":"Yatay konum","background_attachment":"Eklenti","background_repeat":"Tekrarla","background_image":"Arkaplan resmi","background_color":"Arkaplan rengi","text_none":"hi\u00e7biri","text_blink":"yan\u0131p s\u00f6nen","text_case":"Ko\u015ful","text_striketrough":"\u00fcst\u00fc \u00e7izgili","text_underline":"alt \u00e7izgi","text_overline":"\u00fcst \u00e7izgi","text_decoration":"Dekorasyon","text_color":"Renk",text:"Yaz\u0131",background:"Arkaplan",block:"Blok",box:"Kutu",border:"S\u0131n\u0131r",list:"Liste"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tt_dlg.js
new file mode 100644
index 000000000..0bf4675ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u8b8a\u9ad4","text_style":"\u6a23\u5f0f","text_weight":"\u5bec\u5ea6","text_size":"\u5927\u5c0f","text_font":"\u5b57\u9ad4","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u908a\u6846","box_tab":"\u76d2\u6a21\u578b","block_tab":"\u5340\u584a","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u61c9\u7528",title:"\u7de8\u8f2f CSS \u6a23\u5f0f\u8868",clip:"\u526a\u8f2f",placement:"\u4f48\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z\u5ea7\u6a19",visibility:"\u662f\u5426\u53ef\u898b","positioning_type":"\u4f4d\u7f6e\u985e\u578b",position:"\u5716\u7247\u4f4d\u7f6e","bullet_image":"\u6e05\u55ae\u5716\u7247","list_type":"\u5217\u8868\u985e\u578b",color:"\u9854\u8272",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",style:"\u6a23\u5f0f",margin:"\u908a\u8ddd",left:"\u5de6\u5074",bottom:"\u5e95\u90e8",right:"\u53f3\u5074",top:"\u9802\u90e8",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5167\u908a\u8ddd","box_clear":"\u6e05\u9664","box_float":"\u6d6e\u52d5","box_height":"\u9ad8\u5ea6","box_width":"\u5bec\u5ea6","block_display":"\u986f\u793a\u65b9\u5f0f","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7e2e\u6392","block_text_align":"\u6587\u5b57\u5c0d\u9f4a","block_vertical_alignment":"\u5782\u76f4\u5c0d\u9f4a\u65b9\u5f0f","block_letterspacing":"\u5b57\u6bcd\u9593\u8ddd","block_wordspacing":"\u8a5e\u9593\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u5fa9","background_image":"\u80cc\u666f\u5716\u7247","background_color":"\u80cc\u666f\u9854\u8272","text_none":"\u7121","text_blink":"\u9583\u720d","text_case":"\u5b57\u9ad4","text_striketrough":"\u4e2d\u5283\u7dda","text_underline":"\u5e95\u7dda","text_overline":"\u4e0a\u5283\u7dda","text_decoration":"\u88dd\u98fe","text_color":"\u9854\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tw_dlg.js
new file mode 100644
index 000000000..0581023fb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u8b8a\u9ad4","text_style":"\u6a23\u5f0f","text_weight":"\u5b57\u5bec","text_size":"\u5b57\u578b\u5927\u5c0f","text_font":"\u5b57\u9ad4","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u908a\u6846","box_tab":"\u65b9\u584a","block_tab":"\u5340\u584a","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5957\u7528",title:"\u7de8\u8f2f CSS \u6a23\u5f0f\u8868",clip:"\u526a\u8f2f",placement:"\u4f48\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z-\u5750\u6a19",visibility:"\u53ef\u898b","positioning_type":"\u985e\u578b",position:"\u4f4d\u7f6e","bullet_image":"\u5716\u7247\u9805\u76ee\u7b26\u865f","list_type":"\u985e\u578b\u5217\u8868",color:"\u984f\u8272",height:"\u9ad8",width:"\u5bec",style:"\u6a23\u5f0f",margin:"\u5916\u908a\u8ddd",left:"\u5de6\u5074",bottom:"\u9760\u4e0b",right:"\u53f3\u5074",top:"\u9802\u90e8",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5167\u908a\u8ddd","box_clear":"\u6e05\u9664\u6d6e\u52d5","box_float":"\u6d6e\u52d5","box_height":"\u9ad8","box_width":"\u5bec","block_display":"\u986f\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7e2e\u6392","block_text_align":"\u6587\u5b57\u5c0d\u9f4a","block_vertical_alignment":"\u5782\u76f4\u5c0d\u9f4a","block_letterspacing":"\u5b57\u6bcd\u9593\u8ddd","block_wordspacing":"\u8a5e\u9593\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u8907","background_image":"\u80cc\u666f\u5716\u7247","background_color":"\u80cc\u666f\u984f\u8272","text_none":"\u7121","text_blink":"\u9583\u720d","text_case":"\u5b57\u578b","text_striketrough":"\u522a\u9664\u7dda","text_underline":"\u5e95\u7dda","text_overline":"\u4e0a\u5283\u7dda","text_decoration":"\u88dd\u98fe","text_color":"\u984f\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/uk_dlg.js
new file mode 100644
index 000000000..4c07a44c7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.style_dlg',{"text_lineheight":"\u0412\u0438\u0441\u043e\u0442\u0430 \u0440\u044f\u0434\u043a\u0443","text_variant":"\u0412\u0430\u0440\u0456\u0430\u043d\u0442","text_style":"\u0421\u0442\u0438\u043b\u044c","text_weight":"\u0422\u043e\u0432\u0449\u0438\u043d\u0430","text_size":"\u0420\u043e\u0437\u043c\u0456\u0440","text_font":"\u0428\u0440\u0438\u0444\u0442","text_props":"\u0422\u0435\u043a\u0441\u0442","positioning_tab":"\u041f\u043e\u0437\u0438\u0446\u0456\u043e\u043d\u0443\u0432\u0430\u043d\u043d\u044f","list_tab":"\u0421\u043f\u0438\u0441\u043e\u043a","border_tab":"\u0420\u0430\u043c\u043a\u0430","box_tab":"\u042f\u0449\u0438\u043a(box)","block_tab":"\u0411\u043b\u043e\u043a","background_tab":"\u0424\u043e\u043d","text_tab":"\u0422\u0435\u043a\u0441\u0442",apply:"\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438",title:"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f CSS \u0441\u0442\u0438\u043b\u044e",clip:"\u0421\u043a\u0440\u0456\u043f\u043b\u0435\u043d\u043d\u044f",placement:"\u0420\u043e\u0437\u043c\u0456\u0449\u0435\u043d\u043d\u044f",overflow:"\u041f\u0435\u0440\u0435\u043f\u043e\u0432\u043d\u0435\u043d\u043d\u044f",zindex:"Z-\u0456\u043d\u0434\u0435\u043a\u0441",visibility:"\u0412\u0438\u0434\u0438\u043c\u0456\u0441\u0442\u044c","positioning_type":"\u0422\u0438\u043f",position:"\u041f\u043e\u0437\u0438\u0446\u0456\u044f","bullet_image":"\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u043d\u0430\u0447\u043a\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0443","list_type":"\u0422\u0438\u043f",color:"\u041a\u043e\u043b\u0456\u0440",height:"\u0412\u0438\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",style:"\u0421\u0442\u0438\u043b\u044c",margin:"Margin",left:"\u041b\u0456\u0432\u043e\u0440\u0443\u0447",bottom:"\u0417\u043d\u0438\u0437\u0443",right:"\u041f\u0440\u0430\u0432\u043e\u0440\u0443\u0447",top:"\u0412\u0433\u043e\u0440\u0443",same:"\u041e\u0434\u043d\u0430\u043a\u043e\u0435 \u0434\u043b\u044f \u0432\u0441\u0456\u0445",padding:"\u0412\u043d\u0443\u0442\u0440\u0456\u0448\u043d\u0456\u0439 \u0432\u0456\u0434\u0441\u0442\u0443\u043f","box_clear":"\u041e\u0447\u0438\u0441\u0442\u043a\u0430","box_float":"\u041f\u043b\u0430\u0432\u0430\u043d\u043d\u044f","box_height":"\u0412\u0438\u0441\u043e\u0442\u0430","box_width":"\u0428\u0438\u0440\u0438\u043d\u0430","block_display":"\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u0438","block_whitespace":"\u041f\u0440\u043e\u0431\u0456\u043b","block_text_indent":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f","block_text_align":"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443","block_vertical_alignment":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","block_letterspacing":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438 \u043c\u0456\u0436 \u043b\u0456\u0442\u0435\u0440\u0430\u043c\u0438","block_wordspacing":"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438 \u043c\u0456\u0436 \u0441\u043b\u043e\u0432\u0430\u043c\u0438","background_vpos":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0456\u044f","background_hpos":"\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0456\u044f","background_attachment":"\u0412\u043a\u043b\u0430\u0434\u0435\u043d\u043d\u044f","background_repeat":"\u041f\u043e\u0432\u0442\u043e\u0440","background_image":"\u0424\u043e\u043d\u043e\u0432\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","background_color":"\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443","text_none":"\u041d\u0456\u0447\u043e\u0433\u043e","text_blink":"\u041c\u0435\u0440\u0435\u0445\u0442\u0456\u043d\u043d\u044f","text_case":"\u0420\u0435\u0433\u0456\u0441\u0442\u0440","text_striketrough":"\u0417\u0430\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","text_underline":"\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","text_overline":"\u041d\u0430\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","text_decoration":"\u041e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u043d\u044f","text_color":"\u041a\u043e\u043b\u0456\u0440",text:"\u0422\u0435\u043a\u0441\u0442",background:"\u0424\u043e\u043d",block:"\u0411\u043b\u043e\u043a",box:"\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0456",list:"\u0421\u043f\u0438\u0441\u043e\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ur_dlg.js
new file mode 100644
index 000000000..60c39b577
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.style_dlg',{"text_lineheight":"Line height","text_variant":"Variant","text_style":"Style","text_weight":"Weight","text_size":"Size","text_font":"Font","text_props":"Text","positioning_tab":"Positioning","list_tab":"List","border_tab":"Border","box_tab":"Box","block_tab":"Block","background_tab":"Background","text_tab":"Text",apply:"Apply",title:"Edit CSS Style",clip:"Clip",placement:"Placement",overflow:"Overflow",zindex:"Z-index",visibility:"Visibility","positioning_type":"Type",position:"Position","bullet_image":"Bullet image","list_type":"Type",color:"Color",height:"Height",width:"Width",style:"Style",margin:"Margin",left:"Left",bottom:"Bottom",right:"Right",top:"Top",same:"Same for all",padding:"Padding","box_clear":"Clear","box_float":"Float","box_height":"Height","box_width":"Width","block_display":"Display","block_whitespace":"Whitespace","block_text_indent":"Text indent","block_text_align":"Text align","block_vertical_alignment":"Vertical alignment","block_letterspacing":"Letter spacing","block_wordspacing":"Word spacing","background_vpos":"Vertical position","background_hpos":"Horizontal position","background_attachment":"Attachment","background_repeat":"Repeat","background_image":"Background image","background_color":"Background color","text_none":"none","text_blink":"blink","text_case":"Case","text_striketrough":"strikethrough","text_underline":"underline","text_overline":"overline","text_decoration":"Decoration","text_color":"Color",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/vi_dlg.js
new file mode 100644
index 000000000..ee7136b66
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.style_dlg',{"text_lineheight":"Chi\u1ec1u cao \u0111\u01b0\u1eddng","text_variant":"Bi\u1ebfn \u0111\u1ed5i","text_style":"Ki\u1ec3u d\u00e1ng","text_weight":"Tr\u1ecdng l\u01b0\u1ee3ng","text_size":"K\u00edch c\u1ee1","text_font":"Ph\u00f4ng","text_props":"V\u0103n b\u1ea3n","positioning_tab":"V\u1ecb tr\u00ed","list_tab":"Danh s\u00e1ch","border_tab":"Vi\u1ec1n","box_tab":"H\u1ed9p","block_tab":"Kh\u1ed1i","background_tab":"N\u1ec1n","text_tab":"V\u0103n b\u1ea3n",apply:"\u00c1p d\u1ee5ng",title:"S\u1eeda ki\u1ec3u d\u00e1ng CSS",clip:"Ghim",placement:"S\u1eafp \u0111\u1eb7t",overflow:"Tr\u00e0n",zindex:"Ch\u1ec9 m\u1ee5c Z",visibility:"Nh\u00ecn th\u1ea5y","positioning_type":"Ki\u1ec3u",position:"V\u1ecb tr\u00ed","bullet_image":"\u1ea2nh Bullet","list_type":"Ki\u1ec3u",color:"M\u00e0u",height:"Chi\u1ec1u cao",width:"Chi\u1ec1u r\u1ed9ng",style:"Ki\u1ec3u",margin:"Bi\u00ean",left:"Tr\u00e1i",bottom:"D\u01b0\u1edbi",right:"Ph\u1ea3i",top:"Tr\u00ean",same:"\u00c1p d\u1ee5ng cho t\u1ea5t c\u1ea3",padding:"\u0110\u1ec7m l\u00f3t","box_clear":"L\u00e0m s\u1ea1ch","box_float":"N\u1ed5i","box_height":"Chi\u1ec1u cao","box_width":"Chi\u1ec1u r\u1ed9ng","block_display":"Hi\u1ec3n th\u1ecb","block_whitespace":"Kho\u1ea3ng tr\u1eafng","block_text_indent":"Th\u1ee5t d\u00f2ng v\u0103n b\u1ea3n","block_text_align":"Canh l\u1ec1 v\u0103n b\u1ea3n","block_vertical_alignment":"Canh l\u1ec1 d\u1ecdc","block_letterspacing":"Kho\u1ea3ng c\u00e1c k\u00fd t\u1ef1","block_wordspacing":"Kho\u1ea3ng c\u00e1c t\u1eeb","background_vpos":"V\u1ecb tr\u00ed d\u1ecdc","background_hpos":"V\u1ecb tr\u00ed ngang","background_attachment":"\u0110\u00ednh k\u00e8m","background_repeat":"L\u1eb7p l\u1ea1i","background_image":"\u1ea2nh n\u1ec1n","background_color":"M\u00e0u n\u1ec1n","text_none":"kh\u00f4ng","text_blink":"nh\u1ea5p nh\u00e1y","text_case":"Bo\u0323c","text_striketrough":"g\u1ea1ch xuy\u00ean","text_underline":"g\u1ea1ch d\u01b0\u1edbi","text_overline":"g\u1ea1ch tr\u00ean","text_decoration":"Trang tr\u00ed","text_color":"M\u00e0u",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..c5fc08b1f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u53d8\u5f62","text_style":"\u6837\u5f0f","text_weight":"\u7c97\u7ec6","text_size":"\u5927\u5c0f","text_font":"\u5b57\u4f53","text_props":"\u6587\u672c","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"Box","block_tab":"\u533a\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u672c",apply:"\u5e94\u7528",title:"\u7f16\u8f91CSS\u6837\u5f0f",clip:"\u526a\u8f91",placement:"\u653e\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z-Index",visibility:"\u53ef\u89c1","positioning_type":"\u7c7b\u578b",position:"\u4f4d\u7f6e","bullet_image":"\u56fe\u7247\u9879\u76ee\u7b26\u53f7","list_type":"\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",style:"\u6837\u5f0f",margin:"\u5916\u8fb9\u8ddd",left:"\u5de6",bottom:"\u4e0b",right:"\u53f3",top:"\u4e0a",same:"\u5168\u90e8\u76f8\u540c",padding:"\u5185\u8fb9\u8ddd","box_clear":"\u6e05\u9664\u6d6e\u52a8","box_float":"\u6d6e\u52a8","box_height":"\u9ad8\u5ea6","box_width":"\u5bbd\u5ea6","block_display":"\u663e\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7f29\u6392","block_text_align":"\u6587\u5b57\u5bf9\u9f50","block_vertical_alignment":"\u5782\u76f4\u5bf9\u9f50","block_letterspacing":"\u5b57\u95f4\u8ddd","block_wordspacing":"\u8bcd\u95f4\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u4f53\u5f62\u5f0f","text_striketrough":"\u5220\u9664\u7ebf","text_underline":"\u4e0b\u5212\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u5b57\u4f53\u88c5\u9970","text_color":"\u989c\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..22774ebd7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.style_dlg',{"text_lineheight":"\u6587\u5b57\u884c\u9ad8","text_variant":"\u7279\u6b8a\u5b57\u9ad4","text_style":"\u6a23\u5f0f","text_weight":"\u5b57\u9ad4\u7c97\u7d30","text_size":"\u5b57\u9ad4\u5927\u5c0f","text_font":"\u5b57\u9ad4","text_props":"\u5b57\u578b","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u908a\u6846","box_tab":"\u65b9\u584a","block_tab":"\u5340\u584a","background_tab":"\u80cc\u666f","text_tab":"\u5b57\u578b",apply:"\u5957\u7528",title:"\u7de8\u8f2f CSS \u6a23\u5f0f",clip:"\u526a\u8f2f",placement:"\u653e\u7f6e",overflow:"\u5377\u8ef8\u8a2d\u5b9a (Overflow)",zindex:"Z \u8ef8",visibility:"\u80fd\u898b\u5ea6","positioning_type":"\u5f62\u5f0f",position:"\u4f4d\u7f6e","bullet_image":"\u9805\u76ee\u7b26\u865f (\u6709\u5716\u7247)","list_type":"\u5f62\u5f0f",color:"\u984f\u8272",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",style:"\u6a23\u5f0f",margin:"\u908a\u8ddd",left:"\u5de6\u908a",bottom:"\u4e0b\u65b9",right:"\u53f3\u908a",top:"\u4e0a\u65b9",same:"\u5168\u90e8\u4e00\u6a23",padding:"\u5167\u8ddd","box_clear":"\u79fb\u9664\u6d6e\u52d5\u6548\u679c","box_float":"\u6d6e\u52d5\u6548\u679c","box_height":"\u9ad8\u5ea6","box_width":"\u9ad8\u5ea6","block_display":"\u986f\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7e2e\u6392","block_text_align":"\u6587\u5b57\u5c0d\u9f4a","block_vertical_alignment":"\u5782\u76f4\u5c0d\u9f4a","block_letterspacing":"\u6587\u5b57\u9593\u9694","block_wordspacing":"\u5b57\u8a5e\u9593\u9694","background_vpos":"\u5782\u76f4","background_hpos":"\u6c34\u5e73","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u8907","background_image":"\u80cc\u666f\u5716\u7247","background_color":"\u80cc\u666f\u984f\u8272","text_none":"\u7121","text_blink":"\u9583\u720d\u6548\u679c","text_case":"\u5b57\u9ad4\u6a23\u5f0f","text_striketrough":"\u522a\u9664\u7dda","text_underline":"\u5e95\u7dda","text_overline":"\u4e00\u689d\u7dda\u5728\u4e0a\u9762","text_decoration":"\u7dda\u689d\u6a23\u5f0f","text_color":"\u984f\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh_dlg.js
new file mode 100644
index 000000000..3e8b7c367
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u7279\u6b8a\u5b57\u4f53","text_style":"\u6837\u5f0f","text_weight":"\u7c97\u4f53","text_size":"\u5b57\u4f53\u5927\u5c0f","text_font":"\u5b57\u4f53","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u65b9\u5757","block_tab":"\u533a\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5e94\u7528",title:"\u7f16\u8f91CSS\u6837\u5f0f",clip:"\u526a\u8f91",placement:"\u653e\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z-\u5ea7\u6807",visibility:"\u53ef\u89c1","positioning_type":"\u7c7b\u578b",position:"\u4f4d\u7f6e","bullet_image":"\u56fe\u7247\u9879\u76ee\u7b26\u53f7","list_type":"\u5217\u8868\u7c7b\u578b",color:"\u984f\u8272",height:"\u9ad8",width:"\u5bec",style:"\u6a23\u5f0f",margin:"\u5916\u908a\u8ddd",left:"\u5de6\u5074",bottom:"\u4e0b\u5074",right:"\u53f3\u5074",top:"\u4e0a\u5074",same:"\u4e00\u81f4",padding:"\u5167\u908a\u8ddd","box_clear":"\u6e05\u9664\u6d6e\u52d5","box_float":"\u6d6e\u52d5","box_height":"\u9ad8","box_width":"\u5bec","block_display":"\u986f\u793a","block_whitespace":"\u7a7a\u683c","block_text_indent":"\u6587\u5b57\u7e2e\u6392","block_text_align":"\u6587\u5b57\u5c0d\u9f4a","block_vertical_alignment":"\u5782\u76f4\u5c0d\u9f4a","block_letterspacing":"\u5b57\u6bcd\u9593\u8ddd","block_wordspacing":"\u9593\u8ddd","background_vpos":"\u5782\u76f4\u4f4d\u7f6e","background_hpos":"\u6c34\u5e73\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u8986","background_image":"\u80cc\u666f\u5716\u7247","background_color":"\u80cc\u666f\u984f\u8272","text_none":"\u7121","text_blink":"\u9583\u720d","text_case":"\u5b57\u578b","text_striketrough":"\u522a\u9664\u7dda","text_underline":"\u5e95\u7dda","text_overline":"\u4e0a\u5283\u7dda","text_decoration":"\u88dd\u98fe","text_color":"\u984f\u8272",text:"\u6587\u5b57",background:"\u80cc\u666f",block:"\u5206\u6bb5",box:"\u5323\u5b50",border:"\u908a\u6846",list:"\u5217\u8868"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zu_dlg.js
new file mode 100644
index 000000000..cc07dd1f3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/style/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.style_dlg',{"text_lineheight":"\u884c\u9ad8","text_variant":"\u53d8\u4f53","text_style":"\u6837\u5f0f","text_weight":"\u5bbd\u5ea6","text_size":"\u5c3a\u5bf8","text_font":"\u5b57\u4f53","text_props":"\u6587\u5b57","positioning_tab":"\u4f4d\u7f6e","list_tab":"\u5217\u8868","border_tab":"\u8fb9\u6846","box_tab":"\u7bb1\u578b","block_tab":"\u5757","background_tab":"\u80cc\u666f","text_tab":"\u6587\u5b57",apply:"\u5e94\u7528",title:"\u7f16\u8f91CSS\u6837\u5f0f\u8868",clip:"\u526a\u8f91",placement:"\u5e03\u7f6e",overflow:"\u6ea2\u51fa",zindex:"Z\u8f74\u6df1\u5ea6",visibility:"\u53ef\u89c1\u6027","positioning_type":"\u7c7b\u578b",position:"\u56fe\u793a\u4f4d\u7f6e","bullet_image":"\u9879\u76ee\u56fe\u793a","list_type":"\u7c7b\u578b",color:"\u989c\u8272",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",style:"\u6837\u5f0f",margin:"\u8fb9\u754c",left:"\u9760\u5de6",bottom:"\u4e0b\u65b9",right:"\u9760\u53f3",top:"\u4e0a\u65b9",same:"\u5168\u90e8\u4e00\u6837",padding:"\u7559\u767d","box_clear":"\u6e05\u9664","box_float":"\u6d6e\u52a8","box_height":"\u9ad8\u5ea6","box_width":"\u5bbd\u5ea6","block_display":"\u663e\u793a\u65b9\u5f0f","block_whitespace":"\u7a7a\u767d","block_text_indent":"\u6587\u5b57\u7f29\u6392","block_text_align":"\u6587\u5b57\u5bf9\u9f50","block_vertical_alignment":"\u6c34\u51c6\u5bf9\u9f50\u65b9\u5f0f","block_letterspacing":"\u5b57\u5143\u95f4\u8ddd","block_wordspacing":"\u5355\u5b57\u95f4\u8ddd","background_vpos":"\u6c34\u51c6\u4f4d\u7f6e","background_hpos":"\u5782\u76f4\u4f4d\u7f6e","background_attachment":"\u9644\u4ef6","background_repeat":"\u91cd\u590d","background_image":"\u80cc\u666f\u56fe\u7247","background_color":"\u80cc\u666f\u989c\u8272","text_none":"\u65e0","text_blink":"\u95ea\u70c1","text_case":"\u5b57\u4f53","text_striketrough":"\u5220\u9664\u7ebf","text_underline":"\u5e95\u7ebf","text_overline":"\u4e0a\u5212\u7ebf","text_decoration":"\u4fee\u9970","text_color":"\u989c\u8272",text:"Text",background:"Background",block:"Block",box:"Box",border:"Border",list:"List"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ar_dlg.js
new file mode 100644
index 000000000..bb2d617d7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.table_dlg',{"rules_border":"\u0627\u0644\u0628\u0631\u0648\u0627\u0632","rules_box":"\u0635\u0646\u062f\u0648\u0642","rules_vsides":"\u0627\u0644\u062c\u0648\u0627\u0646\u0628 \u0627\u0644\u0639\u0645\u0648\u062f\u064a\u0629","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"\u0627\u0644\u062c\u0648\u0627\u0646\u0628 \u0627\u0644\u0623\u0641\u0642\u064a\u0629","rules_below":"\u0623\u062f\u0646\u0627\u0647","rules_above":"\u0623\u0639\u0644\u0649","rules_void":"\u0623\u0644\u063a\u0649",rules:"\u0642\u0648\u0627\u0639\u062f","frame_all":"\u0643\u0627\u0641\u0629","frame_cols":"\u0639\u062f\u062f \u0627\u0644\u0623\u0639\u0645\u062f\u0629","frame_rows":"\u0639\u062f\u062f \u0627\u0644\u0635\u0641\u0648\u0641","frame_groups":"\u0627\u0644\u0645\u062c\u0645\u0648\u0639\u0627\u062a","frame_none":"\u0644\u0627 \u0634\u064a\u0621",frame:"\u0627\u0644\u0625\u0637\u0627\u0631",caption:"\u0627\u0644\u062c\u062f\u0648\u0644 \u0627\u0644\u062a\u0648\u0636\u064a\u062d\u064a\u0629","missing_scope":"\u0647\u0644 \u0627\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0627\u0646\u0643 \u062a\u0631\u064a\u062f \u0627\u0644\u0625\u0633\u062a\u0645\u0631\u0627\u0631 \u0628\u062f\u0648\u0646 \u062a\u062d\u062f\u064a\u062f \u0631\u0623\u0633 \u0644\u0644\u062c\u062f\u0648\u0644.. \u0642\u062f \u064a\u0643\u0648\u0646 \u0635\u0639\u0628 \u0639\u0644\u0649 \u0632\u0648\u0649 \u0627\u0644\u0625\u062d\u062a\u064a\u0627\u062c\u0627\u062a \u0627\u0644\u062e\u0627\u0635\u0647 \u0641\u0647\u0645 \u0645\u062d\u062a\u0648\u064a\u0627\u062a \u062c\u062f\u0648\u0644\u0643","cell_limit":"\u0644\u0642\u062f \u062a\u062c\u0627\u0648\u0632\u062a \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062f\u062f \u0645\u0646 \u0627\u0644\u062e\u0644\u0627\u064a\u0627 {$cells}.","row_limit":"\u0644\u0642\u062f \u062a\u062c\u0627\u0648\u0632\u062a \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062f\u062f \u0627\u0644\u0635\u0641\u0648\u0641 {$rows}.","col_limit":"\u0644\u0642\u062f \u062a\u062c\u0627\u0648\u0632\u062a \u0627\u0644\u062d\u062f \u0627\u0644\u0623\u0642\u0635\u0649 \u0644\u0639\u062f\u062f \u0623\u0639\u0645\u062f\u0629 {$cols}.",colgroup:"\u0645\u062c\u0645\u0648\u0639\u0629 \u0623\u0639\u0645\u062f\u0629 ",rowgroup:" \u0645\u062c\u0645\u0648\u0639\u0629 \u0635\u0641",scope:"\u0646\u0637\u0627\u0642",tfoot:"\u0645\u0624\u062e\u0631\u0629 \u0627\u0644\u062c\u062f\u0648\u0644",tbody:"\u062c\u0633\u0645 \u0627\u0644\u062c\u062f\u0648\u0644",thead:"\u0631\u0623\u0633 \u0627\u0644\u062c\u062f\u0648\u0644","row_all":"\u062a\u062d\u062f\u064a\u062b \u0643\u0627\u0641\u0629 \u0627\u0644\u0635\u0641\u0648\u0641 \u0641\u064a \u0627\u0644\u062c\u062f\u0648\u0644","row_even":" \u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0635\u0641\u0648\u0641 \u0627\u0644\u0632\u0648\u062c\u064a\u0647 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","row_odd":"\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0635\u0641\u0648\u0641 \u0627\u0644\u0641\u0631\u062f\u064a\u0647 \u0645\u0646 \u0627\u0644\u062c\u062f\u0648\u0644","row_row":"\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u0635\u0641 \u0627\u0644\u062d\u0627\u0644\u064a","cell_all":"\u062a\u062d\u062f\u064a\u062b \u0643\u0644 \u062e\u0644\u0627\u064a\u0627 \u0627\u0644\u062c\u062f\u0648\u0644","cell_row":"\u062a\u062d\u062f\u064a\u062b \u0643\u0627\u0641\u0629 \u0627\u0644\u062e\u0644\u0627\u064a\u0627 \u0641\u064a \u0627\u0644\u0635\u0641","cell_cell":"\u062a\u062d\u062f\u064a\u062b \u0627\u0644\u062e\u0644\u064a\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629",th:"\u0631\u0623\u0633",td:"\u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a",summary:"\u0645\u0644\u062e\u0635",bgimage:"\u0635\u0648\u0631\u0629 \u0627\u0644\u062e\u0644\u0641\u064a\u0629",rtl:"\u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631",ltr:"\u0645\u0646 \u0627\u0644\u064a\u0633\u0627\u0631 \u0625\u0644\u0649 \u0627\u0644\u064a\u0645\u064a\u0646",mime:"\u0627\u0644\u0647\u062f\u0641 \u0646\u0648\u0639 \u0627\u0644\u0645\u0644\u0641",langcode:"\u0631\u0645\u0632 \u0627\u0644\u0644\u063a\u0629",langdir:"\u0627\u062a\u062c\u0627\u0647 \u0644\u063a\u0629",style:"\u0634\u0643\u0644",id:"\u0627\u0644 \u0623\u064a \u062f\u064a Id","merge_cells_title":"\u062f\u0645\u062c \u0627\u0644\u062e\u0644\u0627\u064a\u0627",bgcolor:"\u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0629",bordercolor:"\u0644\u0648\u0646 \u0627\u0644\u062d\u062f\u0648\u062f","align_bottom":"\u0627\u0633\u0641\u0644","align_top":"\u0627\u0639\u0644\u0649",valign:"\u0627\u0644\u0645\u062d\u0627\u0630\u0627\u0629 \u0627\u0644\u0631\u0623\u0633\u064a\u0647","cell_type":"\u0646\u0648\u0639 \u0627\u0644\u062e\u0644\u064a\u0629","cell_title":"\u062e\u0635\u0627\u0626\u0635 \u062e\u0644\u064a\u0629 \u062c\u062f\u0648\u0644","row_title":"\u062e\u0635\u0627\u0626\u0635 \u0635\u0641 \u062c\u062f\u0648\u0644","align_middle":"\u0648\u0633\u0637","align_right":"\u064a\u0645\u064a\u0646","align_left":"\u064a\u0633\u0627\u0631","align_default":"\u0627\u0644\u0627\u0641\u062a\u0631\u0627\u0636\u064a",align:"\u0627\u0644\u0645\u062d\u0627\u0630\u0627\u0629",border:"\u0627\u0644\u062d\u062f\u0648\u062f",cellpadding:"\u0628\u0637\u0627\u0646\u0629 \u0627\u0644\u062e\u0644\u0627\u064a\u0627",cellspacing:"\u062a\u0628\u0627\u0639\u062f \u0627\u0644\u062e\u0644\u0627\u064a\u0627 ",rows:"\u0627\u0644\u0635\u0641\u0648\u0641",cols:"\u0623\u0639\u0645\u062f\u0629",height:"\u0627\u0631\u062a\u0641\u0627\u0639",width:"\u0639\u0631\u0636",title:"\u0625\u062f\u0631\u0627\u062c/\u062a\u0639\u062f\u064a\u0644 \u062c\u062f\u0648\u0644",rowtype:"\u0635\u0641 \u0641\u064a \u062c\u0632\u0621 \u0627\u0644\u062c\u062f\u0648\u0644","advanced_props":"\u062e\u0635\u0627\u0626\u0635 \u0645\u062a\u0642\u062f\u0645\u0647","general_props":"\u062e\u0635\u0627\u0626\u0635 \u0639\u0627\u0645\u0647","advanced_tab":"\u0645\u062a\u0642\u062f\u0645","general_tab":"\u0639\u0627\u0645","cell_col":"\u062a\u062d\u062f\u064a\u062b \u0643\u0644 \u0627\u0644\u062e\u0644\u0627\u064a\u0627 \u0641\u0649 \u0639\u0645\u0648\u062f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/az_dlg.js
new file mode 100644
index 000000000..5d5deca5b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.table_dlg',{"rules_border":"s\u0259rh\u0259d","rules_box":"konteyner","rules_vsides":"\u015faquli t\u0259r\u0259fl\u0259r","rules_rhs":"sa\u011f \u00fcf\u00fcqi t\u0259r\u0259fl\u0259r","rules_lhs":"sol \u00fcf\u00fcqi t\u0259r\u0259fl\u0259r","rules_hsides":"\u00fcf\u00fcqi t\u0259r\u0259fl\u0259r","rules_below":"a\u015fa\u011f\u0131dan","rules_above":"yuxar\u0131dan","rules_void":"he\u00e7 n\u0259",rules:"X\u0259ttl\u0259r","frame_all":"ham\u0131s\u0131","frame_cols":"s\u00fctunlar","frame_rows":"s\u0259trl\u0259r","frame_groups":"qruplar","frame_none":"he\u00e7n\u0259",frame:"\u00c7\u0259r\u00e7iv\u0259",caption:"C\u0259dv\u0259l ba\u015fl\u0131\u011f\u0131","missing_scope":"\u018fminsiniz ki, ba\u015fl\u0131q \u00f6z\u0259yinin h\u0259ddini g\u00f6st\u0259rm\u0259d\u0259n davam etm\u0259k ist\u0259yirsiniz? Bunsuz b\u0259zi i\u015f qabiliyy\u0259ti a\u015fa\u011f\u0131 olan istifad\u0259\u00e7il\u0259r\u0259 c\u0259dv\u0259lin m\u0259lumatlar\u0131 v\u0259 t\u0259rkibini anlamaq \u00e7\u0259tin olacaq.","cell_limit":"Siz \u00f6z\u0259kl\u0259rd\u0259 {$cells} maksimum say\u0131 a\u015fd\u0131n\u0131z.","row_limit":"Siz s\u0259trl\u0259rd\u0259 {$rows} maksimum say\u0131 a\u015fd\u0131n\u0131z.","col_limit":"Siz s\u00fctunlarda {$cols} maksimum say\u0131 a\u015fd\u0131n\u0131z.",colgroup:"S\u00fctun qrupu",rowgroup:"S\u0259tr qrupu",scope:"H\u0259dd",tfoot:"C\u0259dv\u0259lin a\u015fa\u011f\u0131 hiss\u0259si",tbody:"C\u0259dv\u0259lin \u0259sas hiss\u0259si",thead:"C\u0259dv\u0259lin yuxar\u0131 hiss\u0259si","row_all":"C\u0259dv\u0259ld\u0259ki b\u00fct\u00fcn s\u0259trl\u0259ri yenil\u0259","row_even":"C\u0259dv\u0259ld\u0259ki c\u00fct (\u0259d\u0259d) s\u0259trl\u0259ri yenil\u0259","row_odd":"C\u0259d\u0259ld\u0259ki t\u0259k (\u0259d\u0259d) s\u0259trl\u0259ri yenil\u0259","row_row":"Haz\u0131rki s\u0259tri yenil\u0259","cell_all":"C\u0259dv\u0259ld\u0259ki b\u00fct\u00fcn \u00f6z\u0259kl\u0259ri yenil\u0259","cell_row":"S\u0259trd\u0259ki b\u00fct\u00fcn \u00f6z\u0259kl\u0259ri yenil\u0259","cell_cell":"Haz\u0131rki \u00f6z\u0259yi yenil\u0259",th:"Ba\u015fl\u0131q",td:"Veril\u0259nl\u0259r",summary:"X\u00fclas\u0259",bgimage:"Fon \u015f\u0259kli",rtl:"Sa\u011fda-sola",ltr:"Solda-sa\u011fa",mime:"H\u0259d\u0259fli MIME-n\u00f6v",langcode:"Dil kodu",langdir:"Dil istiqam\u0259ti",style:"Stil",id:"\u0130dentifikator","merge_cells_title":"\u00d6z\u0259k stili",bgcolor:"Fon r\u0259ngi",bordercolor:"S\u0259rh\u0259d r\u0259ngi","align_bottom":"A\u015fa\u011f\u0131 il\u0259","align_top":"Yuxar\u0131 il\u0259",valign:"\u015eaquli tarazla\u015fma","cell_type":"\u00d6z\u0259k n\u00f6v\u00fc","cell_title":"\u00d6z\u0259k x\u00fcsusiyy\u0259ti","row_title":"S\u0259tr x\u00fcsusiyy\u0259ti","align_middle":"M\u0259rk\u0259z il\u0259","align_right":"Sa\u011fa","align_left":"Sola","align_default":"Default",align:"Tarazla\u015fd\u0131rma",border:"S\u0259rh\u0259d",cellpadding:"\u00d6z\u0259kl\u0259rd\u0259 doldurma",cellspacing:"\u00d6z\u0259kl\u0259r aras\u0131ndak\u0131 m\u0259saf\u0259",rows:"S\u0259trl\u0259r",cols:"S\u00fctunlar",height:"H\u00fcnd\u00fcrl\u00fcy\u00fc",width:"Eni",title:"C\u0259dv\u0259li \u0259lav\u0259 et/d\u0259yi\u015fdir",rowtype:"C\u0259dv\u0259l hiss\u0259sind\u0259ki s\u0259tr","advanced_props":"\u018flav\u0259 x\u00fcsusiyy\u0259tl\u0259r","general_props":"\u00dcmumi x\u00fcsusiyy\u0259tl\u0259r","advanced_tab":"\u018flav\u0259l\u0259r","general_tab":"\u00dcmumi","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/be_dlg.js
new file mode 100644
index 000000000..3d0d7f953
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.table_dlg',{"rules_border":"\u043c\u044f\u0436\u0430","rules_box":"\u043a\u0430\u043d\u0442\u044d\u0439\u043d\u0435\u0440","rules_vsides":"\u0432\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u044b\u044f \u0431\u0430\u043a\u0456","rules_rhs":"\u043f\u0440\u0430\u0432\u044b\u044f \u0433\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u044f \u0431\u0430\u043a\u0456","rules_lhs":"\u043b\u0435\u0432\u044b\u044f \u0433\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u044f \u0431\u0430\u043a\u0456","rules_hsides":"\u0433\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u044f \u0431\u0430\u043a\u0456","rules_below":"\u0437\u043d\u0456\u0437\u0443","rules_above":"\u0437\u0432\u0435\u0440\u0445\u0443","rules_void":"\u043d\u0456\u0448\u0442\u043e",rules:"\u041f\u0440\u0430\u0432\u0456\u043b\u044b","frame_all":"\u0443\u0441\u0451","frame_cols":"\u0441\u043b\u0443\u043f\u043a\u0456","frame_rows":"\u0440\u0430\u0434\u043a\u0456","frame_groups":"\u0433\u0440\u0443\u043f\u044b","frame_none":"\u043d\u0456\u0447\u043e\u0433\u0430",frame:"\u0420\u0430\u043c\u043a\u0430",caption:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a \u0442\u0430\u0431\u043b\u0456\u0446\u044b","missing_scope":"\u0412\u044b \u0441\u0430\u043f\u0440\u0430\u045e\u0434\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u043f\u0440\u0430\u0446\u044f\u0433\u043d\u0443\u0446\u044c \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044f \u043c\u0435\u0436 \u0433\u044d\u0442\u0430\u0439 \u044f\u0447\u044d\u0439\u043a\u0456 \u0437\u0430\u0433\u0430\u043b\u043e\u045e\u043a\u0430? \u0411\u0435\u0437 \u0433\u044d\u0442\u0430\u0433\u0430 \u043d\u0435\u043a\u0430\u0442\u043e\u0440\u044b\u043c \u043a\u0430\u0440\u044b\u0441\u0442\u0430\u043b\u044c\u043d\u0456\u043a\u0430\u043c \u0437 \u0430\u0431\u043c\u0435\u0436\u0430\u0432\u0430\u043d\u0430\u0439 \u043f\u0440\u0430\u0446\u0430\u0437\u0434\u043e\u043b\u044c\u043d\u0430\u0441\u0446\u044e \u043c\u043e\u0436\u0430 \u0431\u044b\u0446\u044c \u0446\u044f\u0436\u043a\u0430 \u0437\u0440\u0430\u0437\u0443\u043c\u0435\u0446\u044c \u0443\u0442\u0440\u044b\u043c\u0430\u043d\u043d\u0435 \u0430\u0431\u043e \u0434\u0430\u043d\u044b\u044f \u0442\u0430\u0431\u043b\u0456\u0446\u044b.","cell_limit":"\u0412\u044b \u043f\u0435\u0440\u0430\u0432\u044b\u0441\u0456\u043b\u0456 \u043c\u0430\u043a\u0441\u0456\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043b\u044c\u043a\u0430\u0441\u0446\u044c \u0443 {$cells} \u044f\u0447\u044d\u0435\u043a.","row_limit":"\u0412\u044b \u043f\u0435\u0440\u0430\u0432\u044b\u0441\u0456\u043b\u0456 \u043c\u0430\u043a\u0441\u0456\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043b\u044c\u043a\u0430\u0441\u0446\u044c \u0443 {$rows} \u0440\u0430\u0434\u043a\u043e\u045e.","col_limit":"\u0412\u044b \u043f\u0435\u0440\u0430\u0432\u044b\u0441\u0456\u043b\u0456 \u043c\u0430\u043a\u0441\u0456\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043b\u044c\u043a\u0430\u0441\u0446\u044c \u0443 {$cols} \u0441\u043b\u0443\u043f\u043a\u043e\u045e.",colgroup:"\u0413\u0440\u0443\u043f\u0430 \u0441\u043b\u0443\u043f\u043a\u043e\u045e",rowgroup:"\u0413\u0440\u0443\u043f\u0430 \u0440\u0430\u0434\u043a\u043e\u045e",scope:"\u041c\u0435\u0436\u044b",tfoot:"\u041d\u0456\u0436\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u043a\u0430 \u0442\u0430\u0431\u043b\u0456\u0446\u044b",tbody:"\u0410\u0441\u043d\u043e\u045e\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u043a\u0430 \u0442\u0430\u0431\u043b\u0456\u0446\u044b",thead:"\u0412\u0435\u0440\u0445\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u043a\u0430 \u0442\u0430\u0431\u043b\u0456\u0446\u044b","row_all":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0443\u0441\u0435 \u0440\u0430\u0434\u043a\u0456 \u045e \u0442\u0430\u0431\u043b\u0456\u0446\u044b","row_even":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0446\u043e\u0442\u043d\u044b\u044f \u0440\u0430\u0434\u043a\u0456 \u045e \u0442\u0430\u0431\u043b\u0456\u0446\u044b","row_odd":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u043d\u044f\u0446\u043e\u0442\u043d\u044b\u044f \u0440\u0430\u0434\u043a\u0456 \u045e \u0442\u0430\u0431\u043b\u0456\u0446\u044b","row_row":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0431\u044f\u0433\u0443\u0447\u044b \u0440\u0430\u0434\u043e\u043a","cell_all":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0443\u0441\u0435 \u044f\u0447\u044d\u0439\u043a\u0456 \u045e \u0442\u0430\u0431\u043b\u0456\u0446\u044b","cell_row":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0443\u0441\u0435 \u044f\u0447\u044d\u0439\u043a\u0456 \u045e \u0440\u0430\u0434\u043a\u0443","cell_cell":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0431\u044f\u0433\u0443\u0447\u0443\u044e \u044f\u0447\u044d\u0439\u043a\u0443",th:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a",td:"\u0414\u0430\u043d\u044b\u044f",summary:"\u0410\u0433\u0443\u043b\u044c\u043d\u0430\u0435",bgimage:"\u0424\u043e\u043d\u0430\u0432\u044b \u043c\u0430\u043b\u044e\u043d\u0430\u043a",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430",ltr:"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430",mime:"\u041c\u044d\u0442\u0430\u0432\u044b MIME-\u0442\u044b\u043f",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u044b",langdir:"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u043c\u043e\u0432\u044b",style:"\u0421\u0442\u044b\u043b\u044c",id:"\u0406\u0434\u044d\u043d\u0442\u044b\u0444\u0456\u043a\u0430\u0442\u0430\u0440","merge_cells_title":"\u0417\u043b\u0456\u0446\u044c \u044f\u0447\u044d\u0439\u043a\u0456",bgcolor:"\u041a\u043e\u043b\u0435\u0440 \u0444\u043e\u043d\u0443",bordercolor:"\u041a\u043e\u043b\u0435\u0440 \u043c\u044f\u0436\u044b","align_bottom":"\u041f\u0430 \u043d\u0456\u0437\u0435","align_top":"\u041f\u0430 \u0432\u0435\u0440\u0441\u0435",valign:"\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u0430\u0435 \u0432\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435","cell_type":"\u0422\u044b\u043f \u044f\u0447\u044d\u0439\u043a\u0456","cell_title":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u044f\u0447\u044d\u0439\u043a\u0456","row_title":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u0440\u0430\u0434\u043a\u0430","align_middle":"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","align_right":"\u041d\u0430\u043f\u0440\u0430\u0432\u0430","align_left":"\u041d\u0430\u043b\u0435\u0432\u0430","align_default":"\u041f\u0430 \u0437\u043c\u0430\u045e\u0447\u0430\u043d\u043d\u0456",align:"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435",border:"\u041c\u044f\u0436\u0430",cellpadding:"\u0412\u043e\u0434\u0441\u0442\u0443\u043f\u044b \u045e \u044f\u0447\u044d\u0439\u043a\u0430\u0445",cellspacing:"\u0410\u0434\u043b\u0435\u0433\u043b\u0430\u0441\u0446\u044c \u043f\u0430\u043c\u0456\u0436 \u044f\u0447\u044d\u0439\u043a\u0430\u043c\u0456",rows:"\u0420\u0430\u0434\u043a\u0456",cols:"\u0421\u043b\u0443\u043f\u043a\u0456",height:"\u0412\u044b\u0448\u044b\u043d\u044f",width:"\u0428\u044b\u0440\u044b\u043d\u044f",title:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0437\u043c\u044f\u043d\u0456\u0446\u044c \u0442\u0430\u0431\u043b\u0456\u0446\u0443",rowtype:"\u0422\u044b\u043f \u0440\u0430\u0434\u043a\u0430","advanced_props":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f \u045e\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456","general_props":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f \u045e\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456","advanced_tab":"\u0414\u0430\u0434\u0430\u0442\u043a\u043e\u0432\u044b\u044f","general_tab":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f","cell_col":"\u0410\u0431\u043d\u0430\u0432\u0456\u0446\u044c \u0443\u0441\u0435 \u044f\u0447\u044d\u0439\u043a\u0456 \u045e \u0441\u043b\u0443\u043f\u043a\u0443"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bg_dlg.js
new file mode 100644
index 000000000..30d4181d2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.table_dlg',{"rules_border":"\u0433\u0440\u0430\u043d\u0438\u0446\u0430","rules_box":"\u043a\u0443\u0442\u0438\u044f","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u0441\u043b\u0435\u0434","rules_above":"\u043f\u0440\u0435\u0434\u0438","rules_void":"void",rules:"\u041f\u0440\u0430\u0432\u0438\u043b\u0430","frame_all":"\u0432\u0441\u0438\u0447\u043a\u0438","frame_cols":"\u043a\u043e\u043b\u043e\u043d\u0438","frame_rows":"\u0440\u0435\u0434\u043e\u0432\u0435","frame_groups":"\u0433\u0440\u0443\u043f\u0438","frame_none":"\u0431\u0435\u0437",frame:"\u0424\u0440\u0435\u0439\u043c",caption:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","missing_scope":"\u0421\u0438\u0433\u0443\u0440\u0435\u043d \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u0434\u0430 \u043f\u0440\u043e\u0434\u044a\u043b\u0436\u0438\u0442\u0435 \u0431\u0435\u0437 \u0434\u0430 \u0441\u043b\u043e\u0436\u0438\u0442\u0435 \u043e\u0431\u0445\u0432\u0430\u0442 \u043d\u0430 \u0433\u043b\u0430\u0432\u0430\u0442\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430. \u0411\u0435\u0437 \u043d\u0435\u0433\u043e, \u043d\u044f\u043a\u043e\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0438 \u0441 \u0443\u0432\u0440\u0435\u0436\u0434\u0430\u043d\u0438\u044f \u043c\u043e\u0433\u0430\u0442 \u0434\u0430 \u0438\u043c\u0430\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0434\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0430\u0442 \u0434\u0430\u043d\u043d\u0438\u0442\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430.","cell_limit":"\u041f\u0440\u0435\u0432\u0438\u0448\u0438\u0445\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0430\u0442\u0430 \u0431\u0440\u043e\u0439\u043a\u0430 \u043a\u043b\u0435\u0442\u043a\u0438: {$cells}.","row_limit":"\u041f\u0440\u0435\u0432\u0438\u0448\u0438\u0445\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0430\u0442\u0430 \u0431\u0440\u043e\u0439\u043a\u0430 \u0440\u0435\u0434\u043e\u0432\u0435: {$rows}.","col_limit":"\u041f\u0440\u0435\u0432\u0438\u0448\u0438\u0445\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0430\u0442\u0430 \u0431\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043b\u043e\u043d\u0438: {$cols}.",colgroup:"\u0413\u0440\u0443\u043f\u0430 \u043a\u043e\u043b\u043e\u043d\u0438",rowgroup:"\u0413\u0440\u0443\u043f\u0430 \u0440\u0435\u0434\u043e\u0432\u0435",scope:"\u041e\u0431\u0445\u0432\u0430\u0442",tfoot:"\u0414\u044a\u043d\u043e \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430",tbody:"\u0422\u044f\u043b\u043e \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430",thead:"\u0413\u043b\u0430\u0432\u0430 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","row_all":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u0440\u0435\u0434\u043e\u0432\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","row_even":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0447\u0435\u0442\u043d\u0438\u0442\u0435 \u0440\u0435\u0434\u043e\u0432\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","row_odd":"\u041e\u0431\u043d\u043e\u0432\u0438 \u043d\u0435\u0447\u0435\u0442\u043d\u0438\u0442\u0435 \u0440\u0435\u0434\u043e\u0432\u0435 \u0432 \u0442\u0430\u043b\u0438\u0446\u0430\u0442\u0430","row_row":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u044f \u0440\u0435\u0434","cell_all":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u043a\u043b\u0435\u0442\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0442\u0430","cell_row":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u043a\u043b\u0435\u0442\u043a\u0438 \u043d\u0430 \u0440\u0435\u0434\u0430","cell_cell":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u0442\u0430 \u043a\u043b\u0435\u0442\u043a\u0430",th:"\u0413\u043b\u0430\u0432\u0430",td:"\u0414\u0430\u043d\u0438\u043d",summary:"\u041e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435",bgimage:"\u0424\u043e\u043d\u043e\u0432\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430",rtl:"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e",ltr:"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e",mime:"MIME \u0442\u0438\u043f",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430",langdir:"\u041f\u043e\u0441\u043e\u043a\u0430 \u043d\u0430 \u0435\u0437\u0438\u043a\u0430",style:"\u0421\u0442\u0438\u043b",id:"Id","merge_cells_title":"\u0421\u043b\u0435\u0439 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435",bgcolor:"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0444\u043e\u043d\u0430",bordercolor:"\u0426\u0432\u044f\u0442 \u043d\u0430 \u0440\u0430\u043c\u043a\u0430\u0442\u0430","align_bottom":"\u0414\u043e\u043b\u0443","align_top":"\u0413\u043e\u0440\u0435",valign:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","cell_type":"\u0422\u0438\u043f \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","cell_title":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","row_title":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0434\u0430","align_middle":"\u0426\u0435\u043d\u0442\u044a\u0440","align_right":"\u0414\u044f\u0441\u043d\u043e","align_left":"\u041b\u044f\u0432\u043e","align_default":"\u041f\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043d\u0435",align:"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435",border:"\u0420\u0430\u043c\u043a\u0430",cellpadding:"\u041e\u0442\u0441\u0442\u044a\u043f \u0432 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435",cellspacing:"\u0420\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u044a\u0436\u0434\u0443 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435",rows:"\u0420\u0435\u0434\u043e\u0432\u0435",cols:"\u041a\u043e\u043b\u043e\u043d\u0438",height:"\u0412\u0438\u0441\u043e\u0447\u0438\u043d\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0430",rowtype:"\u0420\u043e\u043b\u044f \u043d\u0430 \u0440\u0435\u0434\u0430","advanced_props":"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0437\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","general_props":"\u041e\u0431\u0449\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","advanced_tab":"\u0417\u0430 \u043d\u0430\u043f\u0440\u0435\u0434\u043d\u0430\u043b\u0438","general_tab":"\u041e\u0431\u0449\u0438","cell_col":"\u041e\u0431\u043d\u043e\u0432\u0438 \u0432\u0441\u0438\u0447\u043a\u0438 \u043a\u043b\u0435\u0442\u043a\u0438 \u0432 \u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bn_dlg.js
new file mode 100644
index 000000000..c422b3ac9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/br_dlg.js
new file mode 100644
index 000000000..0572c22e9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.table_dlg',{"rules_border":"Limites","rules_box":"Box","rules_vsides":"Vsides","rules_rhs":"Rhs","rules_lhs":"Lhs","rules_hsides":"Hsides","rules_below":"abaixo","rules_above":"acima","rules_void":"void",rules:"Regras","frame_all":"Todos","frame_cols":"colunas","frame_rows":"Linhas","frame_groups":"Grupos","frame_none":"Nenhum",frame:"Frame",caption:"T\u00edtulo da tabela","missing_scope":"Tem certeza de que quer continuar sem especificar um escopo para esta c\u00e9lula? (Isso poder\u00e1 causar dificuldades a usu\u00e1rios deficientes)","cell_limit":"Excedeu o n\u00famero m\u00e1ximo de c\u00e9lulas de {$cells}.","row_limit":"Excedeu o n\u00famero m\u00e1ximo de linhas de {$rows}.","col_limit":"Excedeu o n\u00famero m\u00e1ximo de colunas de {$cols}.",colgroup:"Grupo colunas",rowgroup:"Grupo linhas",scope:"Alcance",tfoot:"Rodap\u00e9 da tabela",tbody:"Corpo da tabela",thead:"Topo da tabela","row_all":"Atualizar todas as linhas","row_even":"Atualizar linhas pares","row_odd":"Atualizar linhas \u00edmpares","row_row":"Atcualizar esta linha","cell_all":"Atualizar todas as c\u00e9lulas na tabela","cell_row":"Atualizar todas as c\u00e9lulas na linha","cell_cell":"Atualizar esta c\u00e9lula",th:"Campo",td:"Dados",summary:"Sum\u00e1rio",bgimage:"Imagem de fundo",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",mime:"MIME alvo",langcode:"C\u00f3digo da linguagem",langdir:"Dire\u00e7\u00e3o do texto",style:"Estilo",id:"Id","merge_cells_title":"Unir c\u00e9lulas",bgcolor:"Cor de fundo",bordercolor:"Cor dos limites","align_bottom":"Abaixo","align_top":"Topo",valign:"Alinhamento vertical","cell_type":"Tipo de c\u00e9lula","cell_title":"Propriedades de c\u00e9lulas","row_title":"Propriedades de linhas","align_middle":"Centro","align_right":"Direita","align_left":"Esquerda","align_default":"Padr\u00e3o",align:"Alinhamento",border:"Limites",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Linhas",cols:"Colunas",height:"Altura",width:"Largura",title:"Inserir/modificar tabela",rowtype:"Linha na parte da tabela","advanced_props":"Propriedades avan\u00e7adas","general_props":"Propriedades gerais","advanced_tab":"Avan\u00e7ado","general_tab":"Geral","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bs_dlg.js
new file mode 100644
index 000000000..11f5d170a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Opis tablice","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.","cell_limit":"Prema\u0161ili ste maksimalni broj \u0107elija ({$cells}).","row_limit":"Prema\u0161ili ste maksimalni broj redaka ({$rows}).","col_limit":"Prema\u0161ili ste maksimalni broj stupaca ({$cols}).",colgroup:"Grupa stupaca",rowgroup:"Grupa redaka",scope:"Domet",tfoot:"Podno\u017eje tablice",tbody:"Tijelo tablice",thead:"Zaglavlje tablice","row_all":"Primjeni na sve retke u tablici","row_even":"Primjeni na parne retke u tablici","row_odd":"Primjeni na neparne retke u tablici","row_row":"Primjeni na odabrani redak","cell_all":"Primjeni na sve \u0107elije u tablici","cell_row":"Primjeni na sve \u0107elije u retku","cell_cell":"Primjeni na odabranu \u0107eliju",th:"Zaglavlje",td:"Podatkovna",summary:"Sa\u017eetak",bgimage:"Slika pozadine",rtl:"S desna na lijevo",ltr:"S lijeva na desno",mime:"MIME tip",langcode:"Kod jezika",langdir:"Smjer jezika",style:"Stil",id:"Id","merge_cells_title":"Spoji \u0107elije",bgcolor:"Background color",bordercolor:"Boja obruba","align_bottom":"Dno","align_top":"Vrh",valign:"Okomito poravnavanje","cell_type":"Tip \u0107elije","cell_title":"Svojstva \u0107elije","row_title":"Svojstva retka","align_middle":"Sredina","align_right":"Desno","align_left":"Lijevo","align_default":"Zadano",align:"Poravnavanje",border:"Obrub",cellpadding:"Dopuna \u0107elije",cellspacing:"Razmak \u0107elija",rows:"Redaka",cols:"Stupaca",height:"Visina",width:"\u0160irina",title:"Umetni/uredi tablicu",rowtype:"Row in table part","advanced_props":"Napredna svojstva","general_props":"Osnovna svojstva","advanced_tab":"Napredno","general_tab":"Osnovno","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ca_dlg.js
new file mode 100644
index 000000000..881c0ae41
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.table_dlg',{"rules_border":"vora","rules_box":"quadre","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"per sota de","rules_above":"per damunt de","rules_void":"buit",rules:"Regles","frame_all":"tot","frame_cols":"columnes","frame_rows":"files","frame_groups":"grups","frame_none":"cap",frame:"Marc",caption:"T\u00edtol de la taula","missing_scope":"Esteu segur que voleu continuar sense indicar un abast per a aquesta cel\u00b7la de cap\u00e7alera. Pot ser dif\u00edcil per a alguns usuaris amb discapacitats entendre el contingut o les dades mostrades a la taula.","cell_limit":"Heu superat el nombre m\u00e0xim de cel\u00b7les de {$cells}..","row_limit":"Heu superat el nombre m\u00e0xim de files de {$rows}.","col_limit":"Heu superat el nombre m\u00e0xim de columnes de {$cols}.",colgroup:"Grup de columnes",rowgroup:"Grup de files",scope:"Abast",tfoot:"Peu de la taula",tbody:"Cos de la taula",thead:"Cap\u00e7alera de la taula","row_all":"Actualitza totes les files","row_even":"Actualitza les files parells","row_odd":"Actualitza les files senars","row_row":"Actualitza la fila","cell_all":"Actualitza totes les cel\u00b7les de la taula","cell_row":"Actualitza totes les cel\u00b7les de la fila","cell_cell":"Actualitza la cel\u00b7la",th:"Cap\u00e7alera",td:"Dades",summary:"Resum",bgimage:"Imatge de fons",rtl:"De dreta a esquerra",ltr:"D\'esquerra a dreta",mime:"Tipus MIME",langcode:"Codi de l\'idioma",langdir:"Direcci\u00f3 de l\'idioma",style:"Estil",id:"Id","merge_cells_title":"Fusiona cel\u00b7les",bgcolor:"Color de fons",bordercolor:"Color de vora","align_bottom":"A baix","align_top":"A dalt",valign:"Alineaci\u00f3 vertical","cell_type":"Tipus de cel\u00b7la","cell_title":"Propietats de cel\u00b7la","row_title":"Propietats de fila","align_middle":"Centre","align_right":"Dreta","align_left":"Esquerra","align_default":"Per defecte",align:"Alineaci\u00f3",border:"Vora",cellpadding:"Separaci\u00f3 de cel\u00b7la",cellspacing:"Espaiat de cel\u00b7la",rows:"Files",cols:"Columnes",height:"Al\u00e7ada",width:"Amplada",title:"Insereix/Modifica taula",rowtype:"Fila","advanced_props":"Propietats avan\u00e7ades","general_props":"Propietats generals","advanced_tab":"Avan\u00e7at","general_tab":"General","cell_col":"Actuaitza totes les cel\u00b7les en la columna"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ch_dlg.js
new file mode 100644
index 000000000..962bb7a7d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.table_dlg',{"rules_border":"\u5916\u6846","rules_box":"\u76d2\u578b","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u8fb9","rules_lhs":"\u5de6\u8fb9","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u89c4\u5219","frame_all":"\u5168\u90e8","frame_cols":"\u680f","frame_rows":"\u884c","frame_groups":"\u7fa4\u7ec4","frame_none":"\u65e0",frame:"\u6846\u67b6",caption:"\u8868\u683c\u6807\u9898","missing_scope":"\u4f60\u786e\u5b9a\u4e0d\u6307\u5b9a\u8868\u683c\u5934\u90e8\u50a8\u5b58\u683c\u4e00\u4e2a\u8303\u56f4\u5417\uff1f\u6ca1\u6709\u5b83\uff0c\u6216\u8bb8\u5bf9\u90a3\u4e9b\u6709\u969c\u788d\u7684\u7528\u6237\u7406\u89e3\u8868\u683c\u5c55\u793a\u7684\u5185\u5bb9\u6216\u6570\u636e\u66f4\u52a0\u7684\u56f0\u96be\u3002","cell_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u50a8\u5b58\u683c\u9650\u5236{$cells} \u50a8\u5b58\u683c\u3002","row_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u884c\u6570\u9650\u5236 {$rows} \u5217\u3002","col_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u680f\u6570\u9650\u5236 {$cols} \u680f\u3002",colgroup:"\u680f\u7fa4\u7ec4",rowgroup:"\u884c\u7fa4\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u5c3e",tbody:"\u8868\u683c\u4e3b\u4f53",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u6240\u6709\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u76ee\u524d\u884c","cell_all":"\u66f4\u65b0\u6240\u6709\u50a8\u5b58\u683c","cell_row":"\u66f4\u65b0\u76ee\u524d\u884c\u7684\u50a8\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u50a8\u5b58\u683c",th:"\u8868\u5934",td:"\u5185\u5bb9",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",mime:"MIME \u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"ID","merge_cells_title":"\u5408\u5e76\u50a8\u5b58\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u9760\u4e0a",valign:"\u5782\u76f4\u5bf9\u9f50","cell_type":"\u50a8\u5b58\u683c\u7c7b\u578b","cell_title":"\u50a8\u5b58\u683c\u6807\u9898","row_title":"\u884c\u5c5e\u6027","align_middle":"\u7f6e\u4e2d\u5bf9\u9f50","align_right":"\u9760\u53f3\u5bf9\u9f50","align_left":"\u9760\u5de6\u5bf9\u9f50","align_default":"\u9ed8\u8ba4",align:"\u5bf9\u9f50\u65b9\u5f0f",border:"\u8fb9\u6846",cellpadding:"\u50a8\u5b58\u683c\u8fb9\u8ddd",cellspacing:"\u50a8\u5b58\u683c\u95f4\u8ddd",rows:"\u884c\u6570",cols:"\u680f\u6570",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u7f16\u8f91\u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u4e00\u822c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cn_dlg.js
new file mode 100644
index 000000000..2b3fc1052
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.table_dlg',{"rules_border":"\u8868\u683c\u8fb9\u6846","rules_box":"\u65b9\u5757","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u8fb9","rules_lhs":"\u5de6\u8fb9","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u89c4\u5219","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u7ec4","frame_none":"\u65e0",frame:"\u6846\u67b6",caption:"\u8868\u683c\u6807\u9898","missing_scope":"\u4f60\u786e\u5b9a\u4e0d\u6307\u5b9a\u8868\u683c\u5934\u90e8\u50a8\u5b58\u683c\u4e00\u4e2a\u8303\u56f4\u5417\uff1f\u6ca1\u6709\u5b83\uff0c\u6216\u8bb8\u5bf9\u90a3\u4e9b\u6709\u969c\u788d\u7684\u7528\u6237\u7406\u89e3\u8868\u683c\u5c55\u793a\u7684\u5185\u5bb9\u6216\u6570\u636e\u66f4\u52a0\u7684\u56f0\u96be\u3002","cell_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u50a8\u5b58\u683c\u9650\u5236{$cells} \u50a8\u5b58\u683c\u3002","row_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u884c\u6570\u9650\u5236 {$rows} \u884c","col_limit":"\u5df2\u8d85\u8fc7\u6700\u5927\u884c\u6570\u9650\u5236 {$cols} \u5217",colgroup:"\u5217\u7ec4",rowgroup:"\u884c\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u5c3e",tbody:"\u8868\u683c\u4e3b\u4f53",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u6240\u6709\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u76ee\u524d\u884c","cell_all":"\u66f4\u65b0\u6240\u6709\u50a8\u5b58\u683c","cell_row":"\u66f4\u65b0\u76ee\u524d\u884c\u7684\u50a8\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u50a8\u5b58\u683c",th:"\u8868\u5934",td:"\u5185\u5bb9",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",mime:"MIME \u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"Id\u7f16\u53f7","merge_cells_title":"\u5408\u4f75\u50a8\u5b58\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u5c45\u4e0b","align_top":"\u5c45\u4e0a",valign:"\u5782\u76f4\u5bf9\u9f50","cell_type":"\u50a8\u5b58\u683c\u7c7b\u578b","cell_title":"\u50a8\u5b58\u683c\u5c5e\u6027","row_title":"\u884c\u5c5e\u6027","align_middle":"\u5c45\u4e2d","align_right":"\u5c45\u53f3","align_left":"\u5c45\u5de6","align_default":"\u9ed8\u8ba4",align:"\u5bf9\u9f50",border:"\u8fb9\u6846",cellpadding:"\u8868\u683c\u8fb9\u8ddd",cellspacing:"\u8868\u683c\u95f4\u8ddd",rows:"\u884c",cols:"\u5217",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u4fee\u6539\u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u9009\u9879","general_props":"\u5e38\u89c4\u9009\u9879","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u5e38\u89c4","cell_col":"\u66f4\u65b0\u5217\u7684\u6240\u6709\u5355\u5143\u683c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cs_dlg.js
new file mode 100644
index 000000000..735c5214d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.table_dlg',{"rules_border":"r\u00e1me\u010dek okolo","rules_box":"box okolo","rules_vsides":"vlevo a vpravo","rules_rhs":"vpravo","rules_lhs":"vlevo","rules_hsides":"naho\u0159e a dole","rules_below":"dole","rules_above":"naho\u0159e","rules_void":"\u017e\u00e1dn\u00fd",rules:"Vykreslen\u00ed m\u0159\u00ed\u017eky","frame_all":"v\u0161e","frame_cols":"sloupce","frame_rows":"\u0159\u00e1dky","frame_groups":"oblasti a skupiny sloupc\u016f","frame_none":"\u017e\u00e1dn\u00e1",frame:"R\u00e1me\u010dek tabulky",caption:"Nadpis tabulky","missing_scope":"Skute\u010dn\u011b chcete pokra\u010dovat bez ur\u010den\u00ed oblasti hlavi\u010dky t\u00e9to tabulky? Bez n\u00ed m\u016f\u017ee u n\u011bkter\u00fdch u\u017eivatel\u016f doch\u00e1zet k ur\u010dit\u00fdm probl\u00e9m\u016fm p\u0159i interpretaci a zobrazov\u00e1n\u00ed dat v tabulce.","cell_limit":"P\u0159ekro\u010dili jste maxim\u00e1ln\u00ed po\u010det bun\u011bk {$cells}.","row_limit":"P\u0159ekro\u010dili jste maxim\u00e1ln\u00ed po\u010det \u0159\u00e1dk\u016f {$rows}.","col_limit":"P\u0159ekro\u010dili jste maxim\u00e1ln\u00ed po\u010det sloupc\u016f {$cols}.",colgroup:"Skupina sloupc\u016f",rowgroup:"Skupina \u0159\u00e1dk\u016f",scope:"Hlavi\u010dka pro",tfoot:"Pata tabulky",tbody:"T\u011blo tabulky",thead:"Hlavi\u010dka tabulky","row_all":"Aktualizovat v\u0161echny \u0159\u00e1dky tabulky","row_even":"Aktualizovat sud\u00e9 \u0159\u00e1dky tabulky","row_odd":"Aktualizovat lich\u00e9 \u0159\u00e1dky tabulky","row_row":"Aktualizovat zvolen\u00fd \u0159\u00e1dek","cell_all":"Aktualizovat v\u0161echny bu\u0148ky v tabulce","cell_row":"Aktualizovat v\u0161echny bu\u0148ky v \u0159\u00e1dku","cell_cell":"Aktualizovat zvolenou bu\u0148ku",th:"Z\u00e1hlav\u00ed",td:"Data",summary:"Shrnut\u00ed obsahu",bgimage:"Obr\u00e1zek pozad\u00ed",rtl:"Zprava doleva",ltr:"Zleva doprava",mime:"MIME typ c\u00edle",langcode:"K\u00f3d jazyka",langdir:"Sm\u011br textu",style:"Styl",id:"ID","merge_cells_title":"Spojit bu\u0148ky",bgcolor:"Barva pozad\u00ed",bordercolor:"Barva r\u00e1me\u010dku","align_bottom":"Dol\u016f","align_top":"Nahoru",valign:"Vertik\u00e1ln\u00ed zarovn\u00e1n\u00ed","cell_type":"Typ bu\u0148ky","cell_title":"Vlastnosti bu\u0148ky","row_title":"Vlastnosti \u0159\u00e1dku","align_middle":"Na st\u0159ed","align_right":"Vpravo","align_left":"Vlevo","align_default":"V\u00fdchoz\u00ed",align:"Zarovn\u00e1n\u00ed",border:"R\u00e1me\u010dek",cellpadding:"Odsazen\u00ed obsahu",cellspacing:"Rozestup bun\u011bk",rows:"\u0158\u00e1dky",cols:"Sloupce",height:"V\u00fd\u0161ka",width:"\u0160\u00ed\u0159ka",title:"Vlo\u017eit/upravit tabulku",rowtype:"Typ \u0159\u00e1dku","advanced_props":"Roz\u0161\u00ed\u0159en\u00e9 parametry","general_props":"Obecn\u00e9 parametry","advanced_tab":"Roz\u0161\u00ed\u0159en\u00e9","general_tab":"Obecn\u00e9","cell_col":"Aktualizovat v\u0161echny bu\u0148ky ve sloupci"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cy_dlg.js
new file mode 100644
index 000000000..6a4bc6537
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"o dan","rules_above":"above","rules_void":"void",rules:"Rheolau","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Ffr\u00e2m",caption:"Egluryn tabl","missing_scope":"A ydych chi\'n si\u0175r eich bod eisiau parhau heb penodi cwmpas i\'r cell pennyn yma? Hebddo fo, efallai fydd o\'n anodd i rhai ddefnyddwyr gyda anableddau i ddeallt y cynnwys neu\'r data yn y tabl.","cell_limit":"Rydych wedi mynd tu twnt i\'r nifer uchafswm {$cells} o celloedd.","row_limit":"Rydych wedi mynd tu twnt i\'r nifer uchafswm {$rows} o rhesi.","col_limit":"Rydych wedi mynd tu twnt i\'r nifer uchafswm {$cols} o golofnau.",colgroup:"Gr\u0175p Colofnau",rowgroup:"Gr\u0175p Rhesi",scope:"Cwmpas",tfoot:"Troed Tabl",tbody:"Corff Tabl",thead:"Pen Tabl","row_all":"Diweddaru pob rhes yn y tabl","row_even":"Diweddaru rhesi eilrif yn y tabl","row_odd":"Diweddaru rhesi odrif yn y tabl","row_row":"Diweddaru rhes cyfredol","cell_all":"Diweddaru pob cell yn y tabl","cell_row":"Diweddaru pob cell yn y rhes","cell_cell":"Diweddaru cell cyfredol",th:"Pennyn",td:"Data",summary:"Crynodeb",bgimage:"Delwedd cefndir",rtl:"De i\'r chwith",ltr:"Chwith i\'r dde",mime:"Math MIME targed",langcode:"Cod iaith",langdir:"Cyfeiriad iaith",style:"Arddull",id:"Id","merge_cells_title":"Cyfuno celloedd tabl",bgcolor:"Lliw cefndir",bordercolor:"Lliw border","align_bottom":"Gwaelod","align_top":"Pen",valign:"Aliniad ferigol","cell_type":"Math cell","cell_title":"Priodweddau cell tabl","row_title":"Priodweddau rhes tabl","align_middle":"Canol","align_right":"De","align_left":"Chwith","align_default":"Rhagosodedig",align:"Aliniad",border:"Border",cellpadding:"Padio celloedd",cellspacing:"Bylchiad celloedd",rows:"Rhesi",cols:"Colofnau",height:"Uchder",width:"Lled",title:"Mewnosod/Golygu tabl",rowtype:"Rhes mewn rhan tabl","advanced_props":"Priodweddau uwch","general_props":"Priodweddau cyffredinol","advanced_tab":"Uwch","general_tab":"Cyffredinol","cell_col":"Diweddaru pob cell yn y colofn"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/da_dlg.js
new file mode 100644
index 000000000..13220a5a1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.table_dlg',{"rules_border":"kant","rules_box":"boks","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"under","rules_above":"over","rules_void":"void",rules:"Regler","frame_all":"alle","frame_cols":"kolonner","frame_rows":"r\u00e6kker","frame_groups":"grupper","frame_none":"ingen",frame:"Ramme",caption:"Tabeloverskrift","missing_scope":"Er du sikker p\u00e5, du vil forts\u00e6tte uden at angive forklaring for denne overskriftscelle? Uden forklaring vil v\u00e6re sv\u00e6rt for f.ek.s blinde at l\u00e6se og forst\u00e5 indholdet i tabellen.","cell_limit":"Du har overskredet antallet af tilladte celler p\u00e5 {$cells}.","row_limit":"Du har overskredet antallet af tilladte r\u00e6kker p\u00e5 {$rows}.","col_limit":"Du har overskredet antallet af tilladte kolonner p\u00e5 {$cols}.",colgroup:"Kolonnegruppe",rowgroup:"R\u00e6kkegruppe",scope:"Forklaring",tfoot:"Tabelfod",tbody:"Tabelkrop",thead:"Tabelhoved","row_all":"Opdater alle r\u00e6kker","row_even":"Opdater lige r\u00e6kker","row_odd":"Opdater ulige r\u00e6kker","row_row":"Opdater aktuelle celle","cell_all":"Opdater alle celler i tabellen","cell_row":"Opdater alle celler i r\u00e6kken","cell_cell":"Opdater aktuelle celle",th:"Hoved",td:"Data",summary:"Beskrivelse",bgimage:"Baggrundsbillede",rtl:"H\u00f8jre mod venstre",ltr:"Venstre mod h\u00f8jre",mime:"Destinations-MIME-type",langcode:"Sprogkode",langdir:"Sprogretning",style:"Style",id:"Id","merge_cells_title":"Flet celler",bgcolor:"Baggrundsfarve",bordercolor:"Kantfarve","align_bottom":"Bund","align_top":"Top",valign:"Vertikal justering","cell_type":"Celletype","cell_title":"Celleegenskaber","row_title":"R\u00e6kkeegenskaber","align_middle":"Centreret","align_right":"H\u00f8jre","align_left":"Venstre","align_default":"Standard",align:"Justering",border:"Kant",cellpadding:"Afstand til celleindhold",cellspacing:"Afstand mellem celler",rows:"R\u00e6kker",cols:"Kolonner",height:"H\u00f8jde",width:"Bredde",title:"Inds\u00e6t/rediger tabel",rowtype:"R\u00e6kke i tabel del","advanced_props":"Avancerede egenskaber","general_props":"Generelle egenskaber","advanced_tab":"Avanceret","general_tab":"Generelt","cell_col":"Opdat\u00e9r alle celler i en s\u00f8jle"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/de_dlg.js
new file mode 100644
index 000000000..5a64ebd72
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.table_dlg',{"rules_border":"alle 4 Seiten (Border)","rules_box":"alle 4 Seiten (Box)","rules_vsides":"links und rechts","rules_rhs":"nur rechts","rules_lhs":"nur links","rules_hsides":"oben und unten","rules_below":"nur unten","rules_above":"nur oben","rules_void":"keins",rules:"Gitter","frame_all":"zwischen allen Zellen","frame_cols":"zwischen Spalten","frame_rows":"zwischen Zeilen","frame_groups":"zwischen Gruppen","frame_none":"keine",frame:"Rahmen",caption:"Beschriftung der Tabelle","missing_scope":"Wollen Sie wirklich keine Beziehung f\u00fcr diese \u00dcberschrift angeben? Benutzer mit k\u00f6rperlichen Einschr\u00e4nkungen k\u00f6nnten Schwierigkeiten haben, den Inhalt der Tabelle zu verstehen.","cell_limit":"Sie haben die maximale Zellenzahl von {$cells} \u00fcberschritten.","row_limit":"Sie haben die maximale Zeilenzahl von {$rows} \u00fcberschritten.","col_limit":"Sie haben die maximale Spaltenzahl von {$cols} \u00fcberschritten.",colgroup:"Horizontal gruppieren",rowgroup:"Vertikal gruppieren",scope:"Bezug",tfoot:"Tabellenfu\u00df",tbody:"Tabelleninhalt",thead:"Tabellenkopf","row_all":"Alle Zeilen ver\u00e4ndern","row_even":"Gerade Zeilen ver\u00e4ndern","row_odd":"Ungerade Zeilen ver\u00e4ndern","row_row":"Diese Zeile ver\u00e4ndern","cell_all":"Alle Zellen der Tabelle ver\u00e4ndern","cell_row":"Alle Zellen in dieser Zeile ver\u00e4ndern","cell_cell":"Diese Zelle ver\u00e4ndern",th:"\u00dcberschrift",td:"Textzelle",summary:"Zusammenfassung",bgimage:"Hintergrundbild",rtl:"Rechts nach links",ltr:"Links nach rechts",mime:"MIME-Type des Inhalts",langcode:"Sprachcode",langdir:"Schriftrichtung",style:"Format",id:"ID","merge_cells_title":"Zellen vereinen",bgcolor:"Hintergrundfarbe",bordercolor:"Rahmenfarbe","align_bottom":"Unten","align_top":"Oben",valign:"Vertikale Ausrichtung","cell_type":"Zellentyp","cell_title":"Eigenschaften der Zelle","row_title":"Eigenschaften der Zeile","align_middle":"Mittig","align_right":"Rechts","align_left":"Links","align_default":"Standard",align:"Ausrichtung",border:"Rahmen",cellpadding:"Abstand innerhalb der Zellen",cellspacing:"Zellenabstand",rows:"Zeilen",cols:"Spalten",height:"H\u00f6he",width:"Breite",title:"Tabelle einf\u00fcgen/bearbeiten",rowtype:"Gruppierung","advanced_props":"Erweiterte Einstellungen","general_props":"Allgemeine Einstellungen","advanced_tab":"Erweitert","general_tab":"Allgemein","cell_col":"Alle Zellen in dieser Spalte aktualisieren"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/dv_dlg.js
new file mode 100644
index 000000000..7778f20e2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/el_dlg.js
new file mode 100644
index 000000000..f2510f083
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.table_dlg',{"rules_border":"\u03c0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf","rules_box":"\u03ba\u03bf\u03c5\u03c4\u03af","rules_vsides":"\u03ba\u03ac\u03b8\u03b5\u03c4\u03b5\u03c2 \u03c0\u03bb\u03b5\u03c5\u03c1\u03ad\u03c2","rules_rhs":"\u03b4\u03b5\u03be\u03b9\u03ac \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03c0\u03bb\u03b5\u03c5\u03c1\u03ac","rules_lhs":"\u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ae \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1 \u03c0\u03bb\u03b5\u03c5\u03c1\u03ac","rules_hsides":"\u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b5\u03c2 \u03c0\u03bb\u03b5\u03c5\u03c1\u03ad\u03c2","rules_below":"\u03b1\u03c0\u03cc \u03ba\u03ac\u03c4\u03c9","rules_above":"\u03b1\u03c0\u03cc \u03c0\u03ac\u03bd\u03c9","rules_void":"\u03ba\u03b5\u03bd\u03cc",rules:"\u039a\u03b1\u03bd\u03cc\u03bd\u03b5\u03c2","frame_all":"\u03cc\u03bb\u03b1","frame_cols":"\u03c3\u03c4\u03ae\u03bb\u03b5\u03c2","frame_rows":"\u03b3\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2","frame_groups":"\u03bf\u03bc\u03ac\u03b4\u03b5\u03c2","frame_none":"\u03ba\u03b1\u03bd\u03ad\u03bd\u03b1",frame:"Frame",caption:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","missing_scope":"\u03a3\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c3\u03c5\u03bd\u03b5\u03c7\u03af\u03c3\u03b5\u03c4\u03b5 \u03c7\u03c9\u03c1\u03af\u03c2 \u03bd\u03b1 \u03ad\u03c7\u03b5\u03c4\u03b5 \u03ba\u03b1\u03b8\u03bf\u03c1\u03af\u03c3\u03b5\u03b9 \u03c4\u03b7\u03bd \u03b5\u03bc\u03b2\u03ad\u03bb\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd \u03c4\u03b7\u03c2 \u03ba\u03bf\u03c1\u03c5\u03c6\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1. \u03a7\u03c9\u03c1\u03af\u03c2 \u03b1\u03c5\u03c4\u03ae, \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03cd\u03c3\u03ba\u03bf\u03bb\u03bf \u03b3\u03b9\u03b1 \u03ba\u03ac\u03c0\u03bf\u03b9\u03bf\u03c5\u03c2 \u03c7\u03c1\u03ae\u03c3\u03c4\u03b5\u03c2 \u03bc\u03b5 \u03c0\u03c1\u03bf\u03b2\u03bb\u03ae\u03bc\u03b1\u03c4\u03b1 \u03bd\u03b1 \u03ba\u03b1\u03c4\u03b1\u03bb\u03ac\u03b2\u03bf\u03c5\u03bd \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf \u03c4\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1.","cell_limit":"\u0388\u03c7\u03b5\u03c4\u03b5 \u03be\u03b5\u03c0\u03b5\u03c1\u03ac\u03c3\u03b5\u03b9 \u03c4\u03bf \u03cc\u03c1\u03b9\u03bf \u03c4\u03c9\u03bd \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c0\u03bf\u03c5 \u03b5\u03af\u03bd\u03b1\u03b9 {$cells}.","row_limit":"\u0388\u03c7\u03b5\u03c4\u03b5 \u03be\u03b5\u03c0\u03b5\u03c1\u03ac\u03c3\u03b5\u03b9 \u03c4\u03bf \u03cc\u03c1\u03b9\u03bf \u03c4\u03c9\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03c0\u03bf\u03c5 \u03b5\u03af\u03bd\u03b1\u03b9 {$rows}.","col_limit":"\u0388\u03c7\u03b5\u03c4\u03b5 \u03be\u03b5\u03c0\u03b5\u03c1\u03ac\u03c3\u03b5\u03b9 \u03c4\u03bf \u03cc\u03c1\u03b9\u03bf \u03c4\u03c9\u03bd \u03c3\u03c4\u03b7\u03bb\u03c9\u03bd \u03c0\u03bf\u03c5 \u03b5\u03af\u03bd\u03b1\u03b9 {$cols}.",colgroup:"\u039f\u03bc\u03ac\u03b4\u03b1 \u03c3\u03c4\u03b7\u03bb\u03ce\u03bd",rowgroup:"\u039f\u03bc\u03ac\u03b4\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd",scope:"\u0395\u03bc\u03b2\u03ad\u03bb\u03b5\u03b9\u03b1",tfoot:"\u0392\u03ac\u03c3\u03b7 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",tbody:"\u03a3\u03ce\u03bc\u03b1 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",thead:"\u039a\u03bf\u03c1\u03c5\u03c6\u03ae \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_all":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03c4\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_even":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03b6\u03c5\u03b3\u03ce\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03c4\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_odd":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03bc\u03bf\u03bd\u03ce\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03c4\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_row":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u03c4\u03c1\u03ad\u03c7\u03bf\u03c5\u03c3\u03b1\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","cell_all":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c4\u03bf\u03c5 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","cell_row":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c4\u03b7\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","cell_cell":"\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7 \u03c4\u03c1\u03ad\u03c7\u03bf\u03bd\u03c4\u03bf\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd",th:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1",td:"\u0394\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1",summary:"\u03a0\u03b5\u03c1\u03af\u03bb\u03b7\u03c8\u03b7",bgimage:"\u0395\u03b9\u03ba\u03cc\u03bd\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5",rtl:"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac",ltr:"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac",mime:"\u03a4\u03cd\u03c0\u03bf\u03c2 MIME \u03c3\u03c4\u03cc\u03c7\u03bf\u03c5",langcode:"\u039a\u03c9\u03b4\u03b9\u03ba\u03cc\u03c2 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2",langdir:"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03b3\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2",style:"\u03a3\u03c4\u03c5\u03bb",id:"Id","merge_cells_title":"\u03a3\u03c5\u03b3\u03c7\u03ce\u03bd\u03b5\u03c5\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",bgcolor:"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5",bordercolor:"\u03a7\u03c1\u03ce\u03bc\u03b1 \u03c0\u03bb\u03b1\u03b9\u03c3\u03af\u03bf\u03c5","align_bottom":"\u039a\u03ac\u03c4\u03c9","align_top":"\u03a0\u03ac\u03bd\u03c9",valign:"\u039a\u03b1\u03c4\u03b1\u03ba\u03cc\u03c1\u03c5\u03c6\u03b7 \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7","cell_type":"\u03a4\u03cd\u03c0\u03bf\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd","cell_title":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03ba\u03b5\u03bb\u03b9\u03bf\u03cd \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","row_title":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","align_middle":"\u039a\u03ad\u03bd\u03c4\u03c1\u03bf","align_right":"\u0394\u03b5\u03be\u03b9\u03ac","align_left":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","align_default":"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03b7",align:"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7",border:"\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf",cellpadding:"\u0393\u03ad\u03bc\u03b9\u03c3\u03bc\u03b1 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd",cellspacing:"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd",rows:"\u0393\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2",cols:"\u03a3\u03c4\u03ae\u03bb\u03b5\u03c2",height:"\u038e\u03c8\u03bf\u03c2",width:"\u03a0\u03bb\u03ac\u03c4\u03bf\u03c2",title:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1",rowtype:"\u0393\u03c1\u03b1\u03bc\u03bc\u03ae \u03c3\u03b5 \u03bc\u03ad\u03c1\u03bf\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1","advanced_props":"\u03a0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b9\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","general_props":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ad\u03c2 \u03b9\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","advanced_tab":"\u0393\u03b9\u03b1 \u03c0\u03c1\u03bf\u03c7\u03c9\u03c1\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5\u03c2","general_tab":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac","cell_col":"\u0391\u03bd\u03b1\u03bd\u03ad\u03c9\u03c3\u03b7 \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03ba\u03b5\u03bb\u03b9\u03ce\u03bd \u03c3\u03c4\u03b7\u03bd \u03c3\u03c4\u03ae\u03bb\u03b7"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/en_dlg.js
new file mode 100644
index 000000000..463e09ee1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/eo_dlg.js
new file mode 100644
index 000000000..d31f078b7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.table_dlg',{"rules_border":"Bordero","rules_box":"Skatolo","rules_vsides":"Vsides","rules_rhs":"Rhs","rules_lhs":"Lhs","rules_hsides":"Hsides","rules_below":"sube","rules_above":"supre","rules_void":"void",rules:"Reguloj","frame_all":"\u0108iuj","frame_cols":"Kolumnoj","frame_rows":"Linioj","frame_groups":"Grupoj","frame_none":"Neniu",frame:"Kadro",caption:"Titolo de la tabelo","missing_scope":"\u0108u vi certas ke vi volas da\u016drigi sen specifi amplekson por \u0109i tiu \u0109elo? (Tio povos ka\u016dzi malfacila\u0135on al handikapuloj)","cell_limit":"La maksimuma nombro da \u0109eloj {$cells} estis superita.","row_limit":"La maksimuma nombro da linioj {$rows} estis superita.","col_limit":"La maksimuma nombro da kolumnoj {$cols} estis superita.",colgroup:"Kolumnogrupo",rowgroup:"Linigrupo",scope:"Amplekso",tfoot:"Tabelpiedo",tbody:"Tabelkorpo",thead:"Tabelkapo","row_all":"\u011cisdatigi \u0109iujn liniojn","row_even":"\u011cisdatigi parajn liniojn","row_odd":"\u011cisdatigi neparajn liniojn","row_row":"\u011cisdatigi \u0109i tiun linion","cell_all":"\u011cisdatigi \u0109iujn \u0109elojn en la tabelo","cell_row":"\u011cisdatigi \u0109iujn \u0109elojn en la linio","cell_cell":"\u011cisdatigi \u0109i tiun \u0109elon",th:"Kampo",td:"Datumoj",summary:"Resumo",bgimage:"Fonbildo",rtl:"Dekstre-Maldekstren",ltr:"Maldekstre-Dekstren",mime:"Cela MIME",langcode:"Lingvokodo",langdir:"Tekstodirekto",style:"Stilo",id:"Id","merge_cells_title":"Unuigi \u0109elojn",bgcolor:"Fonkoloro",bordercolor:"Borderkoloro","align_bottom":"Sube","align_top":"Supre",valign:"Vert. liniigo","cell_type":"\u0108eltipo","cell_title":"Atributoj de \u0109eloj","row_title":"Atributoj de linioj","align_middle":"Meze","align_right":"Dekstre","align_left":"Maldekstre","align_default":"Defa\u016dlte",align:"Liniigo",border:"Bordero",cellpadding:"Ena kromspaco de \u0109elo",cellspacing:"Kromspaco de \u0109elo",rows:"Linioj",cols:"Kolumnoj",height:"Alteco",width:"Lar\u011deco",title:"Enmeti/redakti tabelon",rowtype:"Tabellinio","advanced_props":"Spertaj atributoj","general_props":"\u011ceneralaj atributoj","advanced_tab":"Sperta","general_tab":"\u011cenerala","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/es_dlg.js
new file mode 100644
index 000000000..32701a8d1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"debajo","rules_above":"encima","rules_void":"vac\u00edo",rules:"Reglas","frame_all":"todos","frame_cols":"cols","frame_rows":"filas","frame_groups":"grupos","frame_none":"ninguno",frame:"Recuadro",caption:"Subt\u00edtulo de la tabla","missing_scope":" \u00bfEst\u00e1 seguro que desea continuar sin especificar el alcance del encabezado de celda? Sin \u00e9l podr\u00eda ser dificultoso para algunos usuarios entender el contenido o los datos mostrados en la tabla.","cell_limit":"Ha superado el n\u00famero m\u00e1ximo de celdas: {$cells}.","row_limit":"Ha superado el n\u00famero m\u00e1ximo de filas: {$rows}.","col_limit":"Ha superado el n\u00famero m\u00e1ximo de columnas: {$cols}.",colgroup:"Grupo de columnas",rowgroup:"Grupo de filas",scope:"Alcance",tfoot:"Pie de la tabla",tbody:"Cuerpo de la tabla",thead:"Encabezado de la tabla","row_all":"Actualizar todas las filas","row_even":"Actualizar filas pares","row_odd":"Actualizar filas impares","row_row":"Actualizar fila actual","cell_all":"Actualizar todas las celdas en la tabla","cell_row":"Actualizar todas las celdas en la fila","cell_cell":"Actualizar celda actual",th:"Encabezado",td:"Datos",summary:"Resumen",bgimage:"Imagen de fondo",rtl:"Derecha a izquierda",ltr:"Izquierda a derecha",mime:"Tipo MIME",langcode:"C\u00f3digo del lenguaje",langdir:"Direcci\u00f3n del lenguaje",style:"Estilo",id:"Id","merge_cells_title":"Vincular celdas",bgcolor:"Color de fondo",bordercolor:"Color del borde","align_bottom":"Debajo","align_top":"Arriba",valign:"Alineaci\u00f3n vertical","cell_type":"Tipo de celda","cell_title":"Propiedades de la celda","row_title":"Propiedades de la fila","align_middle":"Centrado","align_right":"Derecha","align_left":"Izquierda","align_default":"Predet.",align:"Alineaci\u00f3n",border:"Borde",cellpadding:"Relleno de celda",cellspacing:"Espaciado de celda",rows:"Filas",cols:"Cols",height:"Alto",width:"Ancho",title:"Insertar/Modificar tabla",rowtype:"Tipo de fila","advanced_props":"Propiedades avanzadas","general_props":"Propiedades generales","advanced_tab":"Avanzado","general_tab":"General","cell_col":"Actualizar todas las celdas en la columna"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/et_dlg.js
new file mode 100644
index 000000000..61e05ffff
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.table_dlg',{"rules_border":"raam","rules_box":"kast","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"all","rules_above":"\u00fcleval","rules_void":"t\u00fchi",rules:"Reeglid","frame_all":"k\u00f5ik","frame_cols":"veerud","frame_rows":"read","frame_groups":"grupid","frame_none":"mitte \u00fckski",frame:"Raam",caption:"Tabeli seletus","missing_scope":"Oled kindel, et soovid j\u00e4tkata t\u00e4psustamata antud tabeli p\u00e4ise nime?","cell_limit":"Oled j\u00f5udnud maksimaalse arvu elementideni","row_limit":"Oled j\u00f5udnud maksimaalse arvu ridadeni","col_limit":"Oled j\u00f5udnud maksemaalse arvu veegudeni.",colgroup:"Veeru grupp",rowgroup:"Rea grupp",scope:"Ulatus",tfoot:"Tabeli jalus",tbody:"Tabeli sisu",thead:"Tabeli p\u00e4is","row_all":"Uuenda k\u00f5iki ridu tabelis","row_even":"Uuenda paaris ridu tabelis","row_odd":"Uuenda paarituid ridu tabelis","row_row":"Uuenda antud rida","cell_all":"Uuenda k\u00f5iki lahtreid tabelis","cell_row":"Uuenda k\u00f5iki lahtreid reas","cell_cell":"Uuenda antud lahtrit",th:"P\u00e4is",td:"Info",summary:"Kokkuv\u00f5te",bgimage:"Tausta pilt",rtl:"Paremalt vasakule",ltr:"Vasakult paremale",mime:"M\u00e4rgista MIME t\u00fc\u00fcp",langcode:"Keele kood",langdir:"Keele suund",style:"Stiil",id:"ID","merge_cells_title":"\u00dchenda lahtrid",bgcolor:"Tausta v\u00e4rv",bordercolor:"Raami v\u00e4rv","align_bottom":"All","align_top":"\u00dcleval",valign:"Vertikaalne joondus","cell_type":"Veeru t\u00fc\u00fcp","cell_title":"Tabeli veeru seaded","row_title":"Tabeli rea seaded","align_middle":"Keskel","align_right":"Parem","align_left":"Vasak","align_default":"Vaikimisi",align:"Joondus",border:"Raam",cellpadding:"Veeru t\u00e4ide",cellspacing:"Veeru laius",rows:"Ridu",cols:"Veerge",height:"K\u00f5rgus",width:"Laius",title:"Sisesta/muuda tabelit",rowtype:"Rida rea osas","advanced_props":"T\u00e4psustatud seaded","general_props":"\u00dcldised seaded","advanced_tab":"T\u00e4psustatud","general_tab":"\u00dcldine","cell_col":"Uuenda k\u00f5ik veeru lahtrid"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/eu_dlg.js
new file mode 100644
index 000000000..b27211535
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"azpian","rules_above":"gainean","rules_void":"hutsa",rules:"Erregelak","frame_all":"guztiak","frame_cols":"zutabeak","frame_rows":"lerroak","frame_groups":"taldeak","frame_none":"Bat ere ez",frame:"Markoa",caption:"Taularen azpititulua","missing_scope":"Taularen goiburukoari eremu bat zehaztu gabe jarritu nahi duzula ziur zaude? Eremu hori gabe, ezintasunak dituzten erabiltzaileentzat zaila izango da taularen datuak ulertzea.","cell_limit":"Gelaxka kopuru maximoa ({$cells}) gainditu duzu..","row_limit":"Lerro kopuru maximoa ({$rows}) gainditu duzu.","col_limit":"Zutabe kopuru maximoa ({$cols}) gainditu duzu.",colgroup:"Zutabe Taldea",rowgroup:"Lerro Taldea",scope:"Eremua",tfoot:"Taularen Oina",tbody:"Taularen Gorputza",thead:"Taularen Goiburukoa","row_all":"Eguneratu lerro guztiak","row_even":"Eguneratu lerro bikoitiak","row_odd":"Eguneratu lerro bakoitiak","row_row":"Eguneratu uneko lerroa","cell_all":"Eguneratu gelaxka guztiak","cell_row":"Eguneratu lerroko gelaxka guztiak","cell_cell":"Eguneratu uneko gelaxka",th:"Goiburua",td:"Datuak",summary:"Laburpena",bgimage:"Atzeko irudia",rtl:"Eskuinetik ezkerrera",ltr:"Ezkerretik eskuinera",mime:"Helburuareb MIME mota",langcode:"Hizkuntza kodea",langdir:"Hizkuntza norabidea",style:"Estiloa",id:"Id","merge_cells_title":"Bateratu gelaxkak",bgcolor:"Atzeko kolorea",bordercolor:"Ertz kolorea","align_bottom":"Behean","align_top":"Goian",valign:"Lerrokatze bertikala","cell_type":"Gelaxka mota","cell_title":"Gelaxka ezaugarriak","row_title":"Lerro ezaugarriak","align_middle":"Erdian","align_right":"Eskuinera","align_left":"Ezkerrera","align_default":"Lehenetsia",align:"Lerrokatzea",border:"Ertza",cellpadding:"Gelaxkaren betegarria",cellspacing:"Gelaxkaren tartea",rows:"Lerroak",cols:"Zutabeak",height:"Altuera",width:"Zabalera",title:"Txertatu/Aldatu taula",rowtype:"Lerro mota","advanced_props":"Ezaugarri aurreratuak","general_props":"Ezaugarri orokorrak","advanced_tab":"Aurreratua","general_tab":"Orokorra","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fa_dlg.js
new file mode 100644
index 000000000..d26a9375c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.table_dlg',{"rules_border":"\u062d\u0627\u0634\u06cc\u0647","rules_box":"\u062c\u0639\u0628\u0647","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u067e\u0627\u06cc\u06cc\u0646","rules_above":"\u0628\u0627\u0644\u0627","rules_void":"\u062e\u0627\u0644\u06cc",rules:"\u062e\u0637 \u0647\u0627","frame_all":"\u0647\u0645\u0647","frame_cols":"\u0633\u062a\u0648\u0646 \u0647\u0627","frame_rows":"\u0633\u0637\u0631\u0647\u0627","frame_groups":"\u06af\u0631\u0648\u0647 \u0647\u0627","frame_none":"\u0647\u06cc\u0686 \u06a9\u062f\u0627\u0645",frame:"\u0642\u0627\u0628 (Frame)",caption:"\u0639\u0646\u0648\u0627\u0646 \u062c\u062f\u0648\u0644","missing_scope":"\u0622\u06cc\u0627 \u0628\u062f\u0648\u0646 \u062a\u0639\u06cc\u06cc\u0646 \u0645\u062d\u062f\u0648\u062f\u0647 \u0628\u0631\u0627\u06cc \u0633\u0644\u0648\u0644 \u0639\u0646\u0648\u0627\u0646 \u062c\u062f\u0648\u0644\u060c \u0627\u062f\u0627\u0645\u0647 \u0645\u06cc \u062f\u0647\u06cc\u062f\u061f. \u0628\u062f\u0648\u0646 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062f\u0631\u06a9 \u0645\u062d\u062a\u0648\u0627 \u06cc\u0627 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0631\u0627\u06cc \u0628\u0639\u0636\u06cc \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0645\u0634\u06a9\u0644 \u0628\u0627\u0634\u062f.","cell_limit":"\u0634\u0645\u0627 \u0627\u0632 \u062a\u0639\u062f\u0627\u062f \u062d\u062f\u0627\u06a9\u062b\u0631 {$cells} \u0633\u0644\u0648\u0644 \u062a\u062c\u0627\u0648\u0632 \u06a9\u0631\u062f\u06cc\u062f.","row_limit":"\u0634\u0645\u0627 \u0627\u0632 \u062a\u0639\u062f\u0627\u062f \u062d\u062f\u0627\u06a9\u062b\u0631 {$rows} \u0633\u0637\u0631 \u062a\u062c\u0627\u0648\u0632 \u06a9\u0631\u062f\u06cc\u062f.","col_limit":"\u0634\u0645\u0627 \u0627\u0632 \u062a\u0639\u062f\u0627\u062f \u062d\u062f\u0627\u06a9\u062b\u0631 {$cols} \u0633\u062a\u0648\u0646 \u062a\u062c\u0627\u0648\u0632 \u06a9\u0631\u062f\u06cc\u062f.",colgroup:"\u06af\u0631\u0648\u0647 \u0633\u062a\u0648\u0646",rowgroup:"\u06af\u0631\u0648\u0647 \u0633\u0637\u0631",scope:"\u0645\u062d\u062f\u0648\u062f\u0647",tfoot:"\u067e\u0627\u06cc\u06cc\u0646 \u062c\u062f\u0648\u0644",tbody:"\u0628\u062f\u0646\u0647 \u062c\u062f\u0648\u0644",thead:"\u0628\u0627\u0644\u0627\u06cc \u062c\u062f\u0648\u0644","row_all":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062a\u0645\u0627\u0645\u06cc \u0633\u0637\u0631\u0647\u0627 \u062f\u0631 \u062c\u062f\u0648\u0644","row_even":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0633\u0637\u0631\u0647\u0627\u06cc \u0632\u0648\u062c \u062f\u0631 \u062c\u062f\u0648\u0644","row_odd":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0633\u0637\u0631\u0647\u0627\u06cc \u0641\u0631\u062f \u062f\u0631 \u062c\u062f\u0648\u0644","row_row":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0633\u0637\u0631 \u0641\u0639\u0644\u06cc","cell_all":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062a\u0645\u0627\u0645\u06cc \u0633\u0644\u0648\u0644 \u0647\u0627\u06cc \u062c\u062f\u0648\u0644","cell_row":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u062a\u0645\u0627\u0645\u06cc \u0633\u0644\u0648\u0644 \u0647\u0627\u06cc \u0633\u0637\u0631","cell_cell":"\u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0633\u0644\u0648\u0644 \u0641\u0639\u0644\u06cc",th:"\u0633\u0631 \u062c\u062f\u0648\u0644",td:"\u062f\u0627\u062f\u0647",summary:"\u062e\u0644\u0627\u0635\u0647",bgimage:"\u062a\u0635\u0648\u06cc\u0631 \u0632\u0645\u06cc\u0646\u0647",rtl:"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e",ltr:"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a",mime:"\u0646\u0648\u0639 MIME \u0645\u0642\u0635\u062f (Target)",langcode:"\u06a9\u062f \u0632\u0628\u0627\u0646",langdir:"\u062c\u0647\u062a \u0632\u0628\u0627\u0646",style:"\u0627\u0633\u062a\u0627\u06cc\u0644",id:"\u0634\u0646\u0627\u0633\u0647","merge_cells_title":"\u0627\u062f\u063a\u0627\u0645 \u0633\u0644\u0648\u0644 \u0647\u0627\u06cc \u062c\u062f\u0648\u0644",bgcolor:"\u0631\u0646\u06af \u0632\u0645\u06cc\u0646\u0647",bordercolor:"\u0631\u0646\u06af \u062d\u0627\u0634\u06cc\u0647","align_bottom":"\u067e\u0627\u06cc\u06cc\u0646","align_top":"\u0628\u0627\u0644\u0627",valign:"\u062a\u0631\u0627\u0632 \u0639\u0645\u0648\u062f\u06cc","cell_type":"\u0646\u0648\u0639 \u0633\u0644\u0648\u0644","cell_title":"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0644\u0648\u0644 \u062c\u062f\u0648\u0644","row_title":"\u0645\u0634\u062e\u0635\u0627\u062a \u0633\u0637\u0631 \u062c\u062f\u0648\u0644","align_middle":"\u0648\u0633\u0637","align_right":"\u0631\u0627\u0633\u062a","align_left":"\u0686\u067e","align_default":"\u067e\u06cc\u0634\u0641\u0631\u0636",align:"\u062a\u0631\u0627\u0632",border:"\u062d\u0627\u0634\u06cc\u0647",cellpadding:"\u0644\u0627\u06cc\u0647 \u06af\u0630\u0627\u0631\u06cc \u0633\u0644\u0648\u0644 \u0647\u0627",cellspacing:"\u0641\u0627\u0635\u0644\u0647 \u0633\u0644\u0648\u0644 \u0647\u0627",rows:"\u0633\u0637\u0631\u0647\u0627",cols:"\u0633\u062a\u0648\u0646 \u0647\u0627",height:"\u0627\u0631\u062a\u0641\u0627\u0639",width:"\u067e\u0647\u0646\u0627",title:"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062c\u062f\u0648\u0644",rowtype:"\u0646\u0648\u0639 \u0633\u0637\u0631","advanced_props":"\u0645\u0634\u062e\u0635\u0627\u062a \u067e\u06cc\u0634\u0631\u0641\u062a\u0647","general_props":"\u0645\u0634\u062e\u0635\u0627\u062a \u0639\u0645\u0648\u0645\u06cc","advanced_tab":"\u067e\u06cc\u0634\u0631\u0641\u062a\u0647","general_tab":"\u0639\u0645\u0648\u0645\u06cc","cell_col":"\u0628\u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u062a\u0645\u0627\u0645 \u0633\u0644\u0648\u0644\u200c\u0647\u0627 \u062f\u0631 \u0633\u062a\u0648\u0646"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fi_dlg.js
new file mode 100644
index 000000000..87ed83649
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.table_dlg',{"rules_border":"kehys","rules_box":"laatikko","rules_vsides":"pystysuorat reunat","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"vaakasuorat reunat","rules_below":"alapuoli","rules_above":"yl\u00e4puoli","rules_void":"tyhj\u00e4",rules:"S\u00e4\u00e4nn\u00f6t","frame_all":"kaikki","frame_cols":"sarakkeet","frame_rows":"rivit","frame_groups":"ryhm\u00e4t","frame_none":"ei mit\u00e4\u00e4n",frame:"kehys",caption:"Taulukon seloste","missing_scope":"Haluatko varmasti jatkaa m\u00e4\u00e4ritt\u00e4m\u00e4tt\u00e4 tilaa t\u00e4lle taulukon otsakesolulle? Ilman sit\u00e4 joidenkin k\u00e4ytt\u00e4jien voi olla vaikea ymm\u00e4rt\u00e4\u00e4 taulukon sis\u00e4lt\u00e4m\u00e4\u00e4 informaatiota.","cell_limit":"Olet ylitt\u00e4nyt suurimman sallitun m\u00e4\u00e4r\u00e4n soluja {$cells}.","row_limit":"Olet ylitt\u00e4nyt suurimman sallitun m\u00e4\u00e4r\u00e4n rivej\u00e4 {$rows}.","col_limit":"Olet ylitt\u00e4nyt suurimman sallitun m\u00e4\u00e4r\u00e4n sarakkeita {$cols}.",colgroup:"Sarake ryhm\u00e4",rowgroup:"Rivi ryhm\u00e4",scope:"Tila",tfoot:"Taulukon alaosa",tbody:"Taulukon runko",thead:"Taulukon otsake","row_all":"P\u00e4ivit\u00e4 kaikki taulukon rivit","row_even":"P\u00e4ivit\u00e4 taulukon parilliset rivit","row_odd":"P\u00e4ivit\u00e4 taulukon parittomat rivit","row_row":"P\u00e4ivit\u00e4 rivi","cell_all":"P\u00e4ivit\u00e4 kaikki taulukon solut","cell_row":"P\u00e4ivit\u00e4 kaikki rivin solut","cell_cell":"P\u00e4ivit\u00e4 solu",th:"Otsake",td:"Tietue",summary:"Yhteenveto",bgimage:"Taustakuva",rtl:"Oikealta vasemmalle",ltr:"Vasemmalta oikealle",mime:"Kohteen MIME-tyyppi",langcode:"Kielen koodi",langdir:"Kielen suunta",style:"Tyyli",id:"Id","merge_cells_title":"Yhdist\u00e4 taulukon solut",bgcolor:"Taustan v\u00e4ri",bordercolor:"Kehyksen v\u00e4ri","align_bottom":"Alas","align_top":"Yl\u00f6s",valign:"Pystysuunnan tasaus","cell_type":"Solun tyyppi","cell_title":"Taulukon solun asetukset","row_title":"Taulukon rivin asetukset","align_middle":"Keskitetty","align_right":"Oikea","align_left":"Vasen","align_default":"Oletus",align:"Tasaus",border:"Kehys",cellpadding:"Solun tyhj\u00e4 tila",cellspacing:"Solun v\u00e4li",rows:"Rivit",cols:"Sarakkeet",height:"Korkeus",width:"Leveys",title:"Lis\u00e4\u00e4/muokkaa taulukkoa",rowtype:"Rivi taulukon osassa","advanced_props":"Edistyneet asetukset","general_props":"Yleiset asetukset","advanced_tab":"Edistynyt","general_tab":"Yleiset","cell_col":"P\u00e4ivit\u00e4 kaikki sarakkeen solut"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fr_dlg.js
new file mode 100644
index 000000000..9f9488af5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.table_dlg',{"rules_border":"bordure","rules_box":"bo\u00eete","rules_vsides":"verticales","rules_rhs":"\u00e0 droite","rules_lhs":"\u00e0 gauche","rules_hsides":"horizontales","rules_below":"au-dessous","rules_above":"au-dessus","rules_void":"aucune",rules:"R\u00e8gles","frame_all":"tous","frame_cols":"colonnes","frame_rows":"lignes","frame_groups":"groupe","frame_none":"aucun",frame:"Cadre",caption:"Afficher la l\u00e9gende du tableau","missing_scope":"\u00cates-vous s\u00fbr de vouloir continuer sans sp\u00e9cifier de port\u00e9e pour cette cellule de titre ? Sans port\u00e9e, cela peut \u00eatre difficile pour certains utilisateurs de comprendre le contenu ou les donn\u00e9es affich\u00e9es dans le tableau.","cell_limit":"Vous avez d\u00e9pass\u00e9 le nombre maximum de cellules ({$cells}).","row_limit":"Vous avez d\u00e9pass\u00e9 le nombre maximum de lignes ({$rows}).","col_limit":"Vous avez d\u00e9pass\u00e9 le nombre maximum de colonnes ({$cols}).",colgroup:"Groupe de colonnes",rowgroup:"Groupe de lignes",scope:"Port\u00e9e",tfoot:"Pied de tableau",tbody:"Corps de tableau",thead:"En-t\u00eates de tableau","row_all":"Mettre \u00e0 jour toutes les lignes du tableau","row_even":"Mettre \u00e0 jour les lignes paires","row_odd":"Mettre \u00e0 jour les lignes impaires","row_row":"Mettre \u00e0 jour la ligne courante","cell_all":"Mettre \u00e0 jour toutes les cellules du tableau","cell_row":"Mettre \u00e0 jour toutes les cellules de la ligne","cell_cell":"Mettre \u00e0 jour la cellule courante",th:"Titre",td:"Donn\u00e9es",summary:"R\u00e9sum\u00e9",bgimage:"Image de fond",rtl:"de droite \u00e0 gauche",ltr:"De gauche \u00e0 droite",mime:"Type MIME de la cible",langcode:"Code de la langue",langdir:"Sens de lecture",style:"Style",id:"Id","merge_cells_title":"Fusionner les cellules",bgcolor:"Couleur du fond",bordercolor:"Couleur de la bordure","align_bottom":"Bas","align_top":"Haut",valign:"Alignement vertical","cell_type":"Type de cellule","cell_title":"Propri\u00e9t\u00e9s de la cellule","row_title":"Propri\u00e9t\u00e9s de la ligne","align_middle":"Centr\u00e9","align_right":"Droite","align_left":"Gauche","align_default":"Par d\u00e9faut",align:"Alignement",border:"Bordure",cellpadding:"Espacement dans les cellules",cellspacing:"Espacement entre les cellules",rows:"Lignes",cols:"Colonnes",height:"Hauteur",width:"Largeur",title:"Ins\u00e9rer / modifier un tableau",rowtype:"Type de ligne","advanced_props":"Propri\u00e9t\u00e9s avanc\u00e9es","general_props":"Propri\u00e9t\u00e9s g\u00e9n\u00e9rales","advanced_tab":"Avanc\u00e9","general_tab":"G\u00e9n\u00e9ral","cell_col":"Mettre \u00e0 jour toutes les cellules de la colonne"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/gl_dlg.js
new file mode 100644
index 000000000..c992348fe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.table_dlg',{"rules_border":"borde","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"debaixo","rules_above":"encima","rules_void":"vac\u00edo",rules:"Regras","frame_all":"todos","frame_cols":"columnas","frame_rows":"filas","frame_groups":"grupos","frame_none":"ning\u00fan",frame:"Recadro",caption:"Subt\u00edtulo da t\u00e1boa","missing_scope":"\u00bfEst\u00e1 seguro que desexa continuar sen especifica-lo \u00e1mbito do encabezado de celda? Sen \u00e9l podr\u00eda ser dificultoso pra algunos usuarios entende-lo contido ou os datos mostrados na t\u00e1boa.","cell_limit":"Super\u00f3u o n\u00famero m\u00e1ximo de celdas: {$cells}.","row_limit":"Super\u00f3u o n\u00famero m\u00e1ximo de filas: {$rows}.","col_limit":"Super\u00f3u o n\u00famero m\u00e1ximo de columnas: {$cols}.",colgroup:"Grupo de columnas",rowgroup:"Grupo de filas",scope:"\u00c1mbito",tfoot:"Pe da t\u00e1boa",tbody:"Corpo da t\u00e1boa",thead:"Encabezamento da t\u00e1boa","row_all":"Actualizar todalas filas","row_even":"Actualizar filas pares","row_odd":"Actualizar filas impares","row_row":"Actualizar fila actual","cell_all":"Actualizar todalas celdas na t\u00e1boa","cell_row":"Actualizar todalas celdas na fila","cell_cell":"Actualizar celda actual",th:"Encabezamento",td:"Datos",summary:"Resumen",bgimage:"Imaxe de fondo",rtl:"Dereita a esquerda",ltr:"Esquerda a dereita",mime:"Tipo MIME",langcode:"C\u00f3digo da lenguaxe",langdir:"Direcci\u00f3n da lenguaxe",style:"Estilo",id:"Id","merge_cells_title":"Unir celdas",bgcolor:"Cor de fondo",bordercolor:"Cor do borde","align_bottom":"Abaixo","align_top":"Arriba",valign:"Ali\u00f1aci\u00f3n vertical","cell_type":"Tipo de celda","cell_title":"Propiedades da celda","row_title":"Propiedades da fila","align_middle":"Centrado","align_right":"Dereita","align_left":"Esquerda","align_default":"Predet.",align:"Ali\u00f1aci\u00f3n",border:"Borde",cellpadding:"Relleno de celda",cellspacing:"Espaciado de celda",rows:"Filas",cols:"Cols",height:"Alto",width:"Ancho",title:"Insertar/Modificar t\u00e1boa",rowtype:"Tipo de fila","advanced_props":"Propiedades avanzadas","general_props":"Propiedades xerales","advanced_tab":"Avanzado","general_tab":"Xeral","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/gu_dlg.js
new file mode 100644
index 000000000..a25eaa409
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/he_dlg.js
new file mode 100644
index 000000000..25371ea70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.table_dlg',{"rules_border":"\u05d2\u05d1\u05d5\u05dc","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u05de\u05ea\u05d7\u05ea","rules_above":"\u05de\u05e2\u05dc","rules_void":"void",rules:"\u05d7\u05d5\u05e7\u05d9\u05dd","frame_all":"\u05d4\u05db\u05d5\u05dc","frame_cols":"\u05e2\u05de\u05d5\u05d3\u05d5\u05ea","frame_rows":"\u05e9\u05d5\u05e8\u05d5\u05ea","frame_groups":"\u05e7\u05d1\u05d5\u05e6\u05d5\u05ea","frame_none":"\u05dc\u05dc\u05d0",frame:"Frame",caption:"\u05db\u05d5\u05ea\u05e8\u05ea \u05d4\u05d8\u05d1\u05dc\u05d4","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.","cell_limit":"\u05d7\u05e8\u05d9\u05d2\u05d4 \u05de\u05de\u05e1\u05e4\u05e8 \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05d0\u05dc\u05d9 \u05e9\u05dc \u05d4\u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4 \u05e9\u05dc {$cells}.","row_limit":"\u05d7\u05e8\u05d9\u05d2\u05d4 \u05de\u05de\u05e1\u05e4\u05e8 \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05d0\u05dc\u05d9 \u05e9\u05dc \u05d4\u05e9\u05d5\u05e8\u05d5\u05ea \u05e9\u05dc {$rows}.","col_limit":"\u05d7\u05e8\u05d9\u05d2\u05d4 \u05de\u05de\u05e1\u05e4\u05e8 \u05d4\u05e2\u05de\u05d5\u05d3\u05d5\u05ea \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05d0\u05dc\u05d9 \u05e9\u05dc {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"\u05e9\u05d5\u05e8\u05d4 \u05ea\u05d7\u05ea\u05d9\u05ea",tbody:"\u05e9\u05d5\u05e8\u05d4 \u05e8\u05d2\u05d9\u05dc\u05d4",thead:"\u05e9\u05d5\u05e8\u05ea \u05db\u05d5\u05ea\u05e8\u05ea","row_all":"\u05e2\u05d3\u05db\u05d5\u05df\u05db\u05dc \u05d4\u05e9\u05d5\u05e8\u05d5\u05ea \u05d1\u05d8\u05d1\u05dc\u05d4","row_even":"\u05e2\u05d3\u05db\u05d5\u05df \u05e9\u05d5\u05e8\u05d5\u05ea \u05d6\u05d5\u05d2\u05d9\u05d5\u05ea \u05d1\u05d8\u05d1\u05dc\u05d4","row_odd":"\u05e2\u05d3\u05db\u05d5\u05df \u05e9\u05d5\u05e8\u05d5\u05ea \u05d0\u05d9-\u05d6\u05d5\u05d2\u05d9\u05d5\u05ea \u05d1\u05d8\u05d1\u05dc\u05d4","row_row":"\u05e2\u05d3\u05db\u05d5\u05df \u05e9\u05d5\u05e8\u05d4 \u05e0\u05d5\u05db\u05d7\u05d9\u05ea","cell_all":"\u05e2\u05d3\u05db\u05d5\u05df \u05db\u05dc \u05ea\u05d0\u05d9 \u05d4\u05d8\u05d1\u05dc\u05d4","cell_row":"\u05e2\u05d3\u05db\u05d5\u05df \u05db\u05dc \u05ea\u05d0\u05d9 \u05d4\u05e9\u05d5\u05e8\u05d4","cell_cell":"\u05e2\u05d3\u05db\u05d5\u05df \u05ea\u05d0 \u05e0\u05d5\u05db\u05d7\u05d9",th:"\u05db\u05d5\u05ea\u05e8\u05ea",td:"\u05ea\u05d0 \u05de\u05d9\u05d3\u05e2",summary:"\u05ea\u05de\u05e6\u05d9\u05ea",bgimage:"\u05ea\u05de\u05d5\u05e0\u05ea \u05e8\u05e7\u05e2",rtl:"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc",ltr:"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df",mime:"Target MIME type",langcode:"\u05e7\u05d5\u05d3 \u05d4\u05e9\u05e4\u05d4",langdir:"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05e9\u05e4\u05d4",style:"\u05e2\u05d9\u05e6\u05d5\u05d1",id:"Id","merge_cells_title":"\u05d0\u05d7\u05d3 \u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d1\u05dc\u05d4",bgcolor:"\u05e6\u05d1\u05e2 \u05d4\u05e8\u05e7\u05e2",bordercolor:"\u05e6\u05d1\u05e2 \u05d4\u05d2\u05d1\u05d5\u05dc","align_bottom":"\u05ea\u05d7\u05ea\u05d9\u05ea","align_top":"\u05e2\u05dc\u05d9\u05d5\u05df",valign:"\u05d9\u05e9\u05d5\u05e8 \u05d0\u05e0\u05db\u05d9","cell_type":"\u05e1\u05d2\u05e0\u05d5\u05df \u05d4\u05ea\u05d0","cell_title":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05ea\u05d0 \u05d1\u05d8\u05d1\u05dc\u05d4","row_title":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","align_middle":"\u05d0\u05de\u05e6\u05e2","align_right":"\u05dc\u05d9\u05de\u05d9\u05df","align_left":"\u05dc\u05e9\u05de\u05d0\u05dc","align_default":"Default",align:"\u05d9\u05e9\u05d5\u05e8 \u05d0\u05d5\u05e4\u05e7\u05d9",border:"\u05d2\u05d1\u05d5\u05dc",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"\u05e9\u05d5\u05e8\u05d5\u05ea",cols:"\u05e2\u05de\u05d5\u05d3\u05d5\u05ea",height:"\u05d2\u05d5\u05d1\u05d4",width:"\u05e8\u05d5\u05d7\u05d1",title:"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05d8\u05d1\u05dc\u05d4",rowtype:"\u05e1\u05d5\u05d2 \u05d4\u05e9\u05d5\u05e8\u05d4 \u05d1\u05d8\u05d1\u05dc\u05d4","advanced_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05de\u05ea\u05e7\u05d3\u05de\u05d5\u05ea","general_props":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05db\u05dc\u05dc\u05d9\u05d5\u05ea","advanced_tab":"\u05de\u05ea\u05e7\u05d3\u05dd","general_tab":"\u05db\u05dc\u05dc\u05d9","cell_col":"\u05e2\u05d3\u05db\u05df \u05d0\u05ea \u05db\u05dc \u05d4\u05ea\u05d0\u05d9\u05dd \u05d1\u05d8\u05d5\u05e8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hi_dlg.js
new file mode 100644
index 000000000..bf2a8911a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hr_dlg.js
new file mode 100644
index 000000000..0760d72ef
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.table_dlg',{"rules_border":"okvir","rules_box":"sve strane","rules_vsides":"lijevo i desno","rules_rhs":"samo desno","rules_lhs":"samo lijevo","rules_hsides":"gornja i doljnja","rules_below":"ispod","rules_above":"iznad","rules_void":"prazno",rules:"Linije","frame_all":"sve","frame_cols":"stupci","frame_rows":"redovi","frame_groups":"grupe","frame_none":"bez okvira",frame:"Okvir",caption:"Opis tablice","missing_scope":"Jeste li sigurni da \u017eelite nastaviti bez da ste odredili podru\u010dje zaglavlja za ovu tablicu. Bez toga postoji mogu\u0107nost da \u0107e neki korisnici sa pote\u0161ko\u0107ama te\u0161ko razumjeti sadr\u017eaj ili podatke va\u0161e tablice.","cell_limit":"Pre\u0161li ste maksimalan broj \u0107elija ({$cells}).","row_limit":"Pre\u0161li ste maksimalan broj redaka ({$rows}).","col_limit":"Pre\u0161li ste maksimalan broj stupaca ({$cols}).",colgroup:"Grupa stupaca",rowgroup:"Grupa redaka",scope:"Domet",tfoot:"Podno\u017eje tablice",tbody:"Tijelo tablice",thead:"Zaglavlje tablice","row_all":"Primjeni na sve retke u tablici","row_even":"Primjeni na parne retke u tablici","row_odd":"Primjeni na neparne retke u tablici","row_row":"Primjeni na odabrani redak","cell_all":"Primjeni na sve \u0107elije u tablici","cell_row":"Primjeni na sve \u0107elije u retku","cell_cell":"Primjeni na odabranu \u0107eliju",th:"Zaglavlje",td:"Podatkovna",summary:"Sa\u017eetak",bgimage:"Slika pozadine",rtl:"S desna na lijevo",ltr:"S lijeva na desno",mime:"MIME tip",langcode:"Kod jezika",langdir:"Smjer jezika",style:"Stil",id:"Id","merge_cells_title":"Spoji \u0107elije",bgcolor:"Boja pozadine",bordercolor:"Boja obruba","align_bottom":"Dno","align_top":"Vrh",valign:"Okomito poravnavanje","cell_type":"Tip \u0107elije","cell_title":"Svojstva \u0107elije","row_title":"Svojstva retka","align_middle":"Sredina","align_right":"Desno","align_left":"Lijevo","align_default":"Osnovno",align:"Poravnavanje",border:"Obrub",cellpadding:"Dopuna \u0107elije",cellspacing:"Razmak \u0107elija",rows:"Redaka",cols:"Stupaca",height:"Visina",width:"\u0160irina",title:"Umetni/uredi tablicu",rowtype:"Redak u dijelu tablice","advanced_props":"Napredna svojstva","general_props":"Op\u0107a svojstva","advanced_tab":"Napredno","general_tab":"Op\u0107e","cell_col":"A\u017euriraj sve stanice u stupcu"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hu_dlg.js
new file mode 100644
index 000000000..518c3ad10
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.table_dlg',{"rules_border":"keret","rules_box":"doboz","rules_vsides":"f. oldalak","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"v. oldalak","rules_below":"alatta","rules_above":"f\u00f6l\u00f6tte","rules_void":"sehol",rules:"Vonalak","frame_all":"mind","frame_cols":"oszlopok","frame_rows":"sorok","frame_groups":"csoportok","frame_none":"nincs",frame:"Keret",caption:"C\u00edmsor","missing_scope":"Biztosan folytatni akarja an\u00e9lk\u00fcl, hogy hat\u00f3k\u00f6rt adna ennek a fejl\u00e9ccell\u00e1nak? Korl\u00e1toz\u00e1sokkal \u00e9l\u0151k sz\u00e1m\u00e1ra neh\u00e9z lesz meg\u00e9rteni a t\u00e1bl\u00e1zat tartalm\u00e1t.","cell_limit":"T\u00fall\u00e9pte a maxim\u00e1lis cellasz\u00e1mot, ami {$cells}.","row_limit":"T\u00fall\u00e9pte a maxim\u00e1lis sorsz\u00e1mot, ami {$rows}.","col_limit":"T\u00fall\u00e9pte a maxim\u00e1lis oszlopsz\u00e1mot, ami {$cols}.",colgroup:"Oszlop csoport",rowgroup:"Sor csoport",scope:"Hat\u00f3k\u00f6r",tfoot:"T\u00e1bl\u00e1zat l\u00e1bl\u00e9c",tbody:"T\u00e1bl\u00e1zat tartalom",thead:"T\u00e1bl\u00e1zat fejl\u00e9c","row_all":"Minden sor friss\u00edt\u00e9se","row_even":"P\u00e1ros sorok friss\u00edt\u00e9se","row_odd":"P\u00e1ratlan sorok friss\u00edt\u00e9se","row_row":"Sor friss\u00edt\u00e9se","cell_all":"T\u00e1bl\u00e1zat \u00f6sszes cell\u00e1j\u00e1nak friss\u00edt\u00e9se","cell_row":"Sor \u00f6sszes cell\u00e1j\u00e1nak friss\u00edt\u00e9se","cell_cell":"Cella friss\u00edt\u00e9se",th:"Fejl\u00e9c",td:"Adat",summary:"\u00d6sszegz\u00e9s",bgimage:"H\u00e1tt\u00e9rk\u00e9p",rtl:"Jobbr\u00f3l balra",ltr:"Balr\u00f3l jobbra",mime:"C\u00e9l MIME t\u00edpus",langcode:"Nyelvk\u00f3d",langdir:"\u00cdr\u00e1s ir\u00e1ny",style:"St\u00edlus",id:"Id","merge_cells_title":"Cell\u00e1k \u00f6sszevon\u00e1sa",bgcolor:"H\u00e1tt\u00e9rsz\u00edn",bordercolor:"Keretsz\u00edn","align_bottom":"Le","align_top":"Fel",valign:"F\u00fcgg\u0151leges igaz\u00edt\u00e1s","cell_type":"Cellat\u00edpus","cell_title":"Cella tulajdons\u00e1gai","row_title":"Sor tulajdons\u00e1gai","align_middle":"K\u00f6z\u00e9pre","align_right":"Jobbra","align_left":"Balra","align_default":"Alap\u00e9rtelmezett",align:"Igaz\u00edt\u00e1s",border:"Keret",cellpadding:"Cella bels\u0151 marg\u00f3",cellspacing:"Cella t\u00e1vols\u00e1g",rows:"Sorok",cols:"Oszlopok",height:"Magass\u00e1g",width:"Sz\u00e9less\u00e9g",title:"T\u00e1bl\u00e1zat besz\u00far\u00e1sa/szerkeszt\u00e9se",rowtype:"Sor a t\u00e1bl\u00e1ban","advanced_props":"Halad\u00f3 tulajdons\u00e1gok","general_props":"\u00c1ltal\u00e1nos tulajdons\u00e1gok","advanced_tab":"Halad\u00f3","general_tab":"\u00c1ltal\u00e1nos","cell_col":"\u00d6sszes cella friss\u00edt\u00e9se az oszlopban"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hy_dlg.js
new file mode 100644
index 000000000..5b3222b70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"\u0424\u0440\u0435\u0439\u043c",caption:"Table caption","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","cell_limit":"You\'ve exceeded the maximum number of cells of ($ cells)","row_limit":"You\'ve exceeded the maximum number of rows of ($ rows)","col_limit":"You\'ve exceeded the maximum number of columns of ($ cols)",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"\u041d\u0438\u0436\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u0441\u0438\u043d\u0430",tbody:"\u0422\u0435\u043b\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u044b",thead:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b","row_all":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_even":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0447\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_odd":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_row":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443","cell_all":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","cell_row":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435","cell_cell":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443",th:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",td:"\u0414\u0430\u043d\u043d\u044b\u0435",summary:"\u041e\u0431\u0449\u0435\u0435",bgimage:"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",mime:"Target MIME-\u0442\u0438\u043f",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044f\u0437\u044b\u043a\u0430",style:"\u0421\u0442\u0438\u043b\u044c",id:"Id","merge_cells_title":"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438",bgcolor:"\u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430",bordercolor:"\u0446\u0432\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",valign:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","cell_type":"\u0422\u0438\u043f \u044f\u0447\u0435\u0439\u043a\u0438","cell_title":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","row_title":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_default":"\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430",cellpadding:"\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445",cellspacing:"\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438",rows:"\u0421\u0440\u043e\u043a\u0438",cols:"\u0421\u0442\u043e\u043b\u0431\u0446\u044b",height:"\u0412\u044b\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 / \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b",rowtype:"Row in table part","advanced_props":"\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430","general_props":"\u041e\u0431\u0449\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","general_tab":"\u041e\u0431\u0449\u0435\u0435","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ia_dlg.js
new file mode 100644
index 000000000..cc79f911f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.table_dlg',{"rules_border":"\u8fb9\u6846","rules_box":"\u76d2","rules_vsides":"\u5782\u76f4\u5927\u5c0f","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"\u6c34\u5e73\u5927\u5c0f","rules_below":"\u4e4b\u4e0b","rules_above":"\u4e4b\u4e0a","rules_void":"\u7a7a",rules:"\u6807\u5c3a","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u7ec4","frame_none":"\u65e0",frame:"\u8fb9\u6846",caption:"\u8868\u683c\u6807\u9898","missing_scope":"\u60a8\u786e\u5b9a\u4e0d\u6307\u5b9a\u8868\u5934\u50a8\u5b58\u683c\u7684\u8303\u56f4\u5417\uff1f\u5982\u679c\u4e0d\u6307\u5b9a\uff0c\u90e8\u5206\u4f7f\u7528\u8005\u5c06\u5f88\u96be\u67e5\u770b\u8868\u683c\u5185\u5bb9","cell_limit":"\u5df2\u8d85\u8fc7\u9650\u5236\uff0c\u6700\u591a\u4e3a{$cells} \u50a8\u5b58\u683c\u3002","row_limit":"\u5df2\u8d85\u8fc7\u9650\u5236\uff0c\u6700\u591a\u4e3a {$rows} \u884c\u3002","col_limit":"\u5df2\u8d85\u8fc7\u9650\u5236\uff0c\u6700\u591a\u4e3a {$cols} \u5217\u3002",colgroup:"\u5217\u7ec4",rowgroup:"\u884c\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u811a",tbody:"\u8868\u4f53",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u5168\u90e8\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u6240\u5728\u884c","cell_all":"\u66f4\u65b0\u5168\u90e8\u50a8\u5b58\u683c","cell_row":"\u66f4\u65b0\u5f53\u524d\u884c\u7684\u50a8\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u7684\u50a8\u5b58\u683c",th:"\u8868\u5934",td:"\u8868\u683c",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",mime:"\u76ee\u6807 MIME \u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"Id","merge_cells_title":"\u5408\u5e76\u50a8\u5b58\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u5e95\u90e8","align_top":"\u9876\u90e8",valign:"\u5782\u76f4\u5bf9\u9f50\u65b9\u5f0f","cell_type":"\u50a8\u5b58\u683c \u7c7b\u522b","cell_title":"\u50a8\u5b58\u683c \u5c5e\u6027","row_title":"\u884c \u5c5e\u6027","align_middle":"\u5c45\u4e2d","align_right":"\u5c45\u53f3","align_left":"\u5c45\u5de6","align_default":"\u9ed8\u8ba4",align:"\u5bf9\u9f50\u65b9\u5f0f",border:"\u8fb9\u6846",cellpadding:"\u50a8\u5b58\u683c\u5185\u8ddd",cellspacing:"\u50a8\u5b58\u683c\u95f4\u8ddd",rows:"\u884c\u6570",cols:"\u5217\u6570",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u7f16\u8f91 \u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","general_props":"\u57fa\u672c \u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u57fa\u672c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/id_dlg.js
new file mode 100644
index 000000000..e67d2e6e6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","missing_scope":"Yakin ingin melanjutkan tanpa menetapkan cakupan sel header tabel ini. Tanpa itu, mungkin sulit bagi beberapa pengguna yang memiliki keterbatasan untuk memahami isi atau data yang ditampilkan dari tabel.","cell_limit":"Anda telah melebihi jumlah maksimum cell {$cells}.","row_limit":"Anda telah melebihi jumlah maksimum row {$rows}.","col_limit":"Anda telah melebihi jumlah maksimum kolom {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Gambar Background",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",mime:"Target MIME type",langcode:"Kode Bahasa",langdir:"Bahasa",style:"Style",id:"Id","merge_cells_title":"Merge cell tabel",bgcolor:"Warna Background",bordercolor:"Warna Border","align_bottom":"Bawah","align_top":"Atas",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Properti cell tabel","row_title":"Properti row tabel","align_middle":"Tengah","align_right":"Kanan","align_left":"Kiri","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Tinggi",width:"Lebar",title:"Sisipkan/Ubah Tabel",rowtype:"Row in table part","advanced_props":"Properti Advanced","general_props":"Properti Umum","advanced_tab":"Advanced","general_tab":"Umum","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/is_dlg.js
new file mode 100644
index 000000000..8b4b1ffc6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.table_dlg',{"rules_border":"rammi","rules_box":"box","rules_vsides":"vsides","rules_rhs":"hhl","rules_lhs":"vhl","rules_hsides":"hli\u00f0ar","rules_below":"ne\u00f0an","rules_above":"ofan","rules_void":"\u00f3gilt",rules:"Rules","frame_all":"allt","frame_cols":"d\u00e1lkar","frame_rows":"ra\u00f0ir","frame_groups":"h\u00f3par","frame_none":"ekkert",frame:"rammi",caption:"T\u00f6fluval","missing_scope":"Ertu viss um a\u00f0 \u00fe\u00fa viljir halda \u00e1fram \u00e1n \u00feess a\u00f0 skilgreina innihaldi\u00f0 fyrir \u00feessa t\u00f6flu fyrirs\u00f6gn. \u00c1n hennar getur veri\u00f0 erfitt fyrir suma notendur me\u00f0 h\u00f6mlun a\u00f0 skilja innihaldi\u00f0 e\u00f0a \u00fea\u00f0 efni sem er til sta\u00f0ar \u00ed t\u00f6flunni.","cell_limit":"\u00de\u00fa ert komin yfir leyfilegan fj\u00f6lda reita {$cells}.","row_limit":"\u00de\u00fa ert komin yfir leyfilegna fj\u00f6lda ra\u00f0a {$rows}.","col_limit":"\u00de\u00fa ert komin yfir leyfilegan fj\u00f6lda d\u00e1lka {$cols}.",colgroup:"D\u00e1lkah\u00f3pur",rowgroup:"Ra\u00f0arh\u00f3pur",scope:"Umfang",tfoot:"T\u00f6fluf\u00f3tur",tbody:"T\u00f6flusv\u00e6\u00f0i",thead:"Fyrirs\u00f6gn t\u00f6flu","row_all":"Uppf\u00e6ra allar ra\u00f0ir \u00ed t\u00f6flunni","row_even":"Uppf\u00e6ra sl\u00e9ttra\u00f0ir","row_odd":"Uppf\u00e6ra oodara\u00f0ir","row_row":"Uppf\u00e6ra n\u00faverandi r\u00f6\u00f0","cell_all":"Uppf\u00e6ra alla reiti i t\u00f6flunni","cell_row":"Uppf\u00e6ra alla reiti \u00ed r\u00f6\u00f0inni","cell_cell":"Uppf\u00e6ra n\u00faverandi reit",th:"Fyrirs\u00f6gn",td:"G\u00f6gn",summary:"Yfirlit",bgimage:"Bakgrunnsmynd",rtl:"Fr\u00e1 h\u00e6gri til vinstri",ltr:"Fr\u00e1 vinstri til h\u00e6gri",mime:"Velja MIME tegund",langcode:"Tungum\u00e1la k\u00f3\u00f0i",langdir:"Tungum\u00e1la \u00e1tt",style:"St\u00edll",id:"id","merge_cells_title":"Sameina reiti",bgcolor:"Bakgrunnslitur",bordercolor:"Rammalitur","align_bottom":"Ne\u00f0st","align_top":"Efst",valign:"L\u00f3\u00f0r\u00e9tt j\u00f6fnun","cell_type":"Reitartegund","cell_title":"Eiginleikar reits","row_title":"Eiginleikar ra\u00f0ar","align_middle":"Mi\u00f0ja","align_right":"H\u00e6gri","align_left":"Vinstri","align_default":"St\u00f6\u00f0lu\u00f0",align:"J\u00f6fnun",border:"Rammi",cellpadding:"Reita \u00f6ndun",cellspacing:"Reitabil",rows:"Ra\u00f0ir",cols:"Cols",height:"H\u00e6\u00f0",width:"Breidd",title:"Setja inn/Breyta t\u00f6flu",rowtype:"R\u00f6\u00f0 \u00ed t\u00f6fluhluta","advanced_props":"Frekari eiginleikar","general_props":"Almennir eiginleikar","advanced_tab":"N\u00e1nar","general_tab":"Almennt","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/it_dlg.js
new file mode 100644
index 000000000..2a847ed62
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.table_dlg',{"rules_border":"bordo","rules_box":"box","rules_vsides":"lato vert.","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"lato orizz.","rules_below":"sotto","rules_above":"sopra","rules_void":"vuoto",rules:"Regole","frame_all":"tutte","frame_cols":"colonne","frame_rows":"righe","frame_groups":"gruppi","frame_none":"nessuna",frame:"Cornice",caption:"Didascalia tabella","missing_scope":"Sicuro di proseguire senza aver specificato uno scope per l\'intestazione di questa tabella? Senza di esso, potrebbe essere difficoltoso per alcuni utenti con disabilit\u00e0 capire il contenuto o i dati mostrati nella tabella.","cell_limit":"Superato il numero massimo di celle di {$cells}.","row_limit":"Superato il numero massimo di righe di {$rows}.","col_limit":"Superato il numero massimo di colonne di {$cols}.",colgroup:"Gruppo colonna",rowgroup:"Gruppo riga",scope:"Scope",tfoot:"Pedice tabella",tbody:"Corpo tabella",thead:"Intestazione tabella","row_all":"Update tutte le righe della tabella","row_even":"Aggiorna righe pari della tabella","row_odd":"Aggiorna righe dispari della tabella","row_row":"Aggiorna riga corrente","cell_all":"Aggiorna tutte le celle della tabella","cell_row":"Aggiorna tutte le celle della riga","cell_cell":"Aggiorna cella corrente",th:"Intestazione",td:"Data",summary:"Sommario",bgimage:"Immagine sfondo",rtl:"Destra verso sinistra",ltr:"Sinistra verso destra",mime:"Tipo MIME del target",langcode:"Lingua",langdir:"Direzione testo",style:"Stile",id:"Id","merge_cells_title":"Unisci celle",bgcolor:"Colore sfondo",bordercolor:"Colore bordo","align_bottom":"In basso","align_top":"In alto",valign:"Allineamento verticale","cell_type":"Tipo cella","cell_title":"Propriet\u00e0 cella","row_title":"Propriet\u00e0 riga","align_middle":"Centra","align_right":"A destra","align_left":"A sinistra","align_default":"Predefinito",align:"Allineamento",border:"Bordo",cellpadding:"Padding celle",cellspacing:"Spaziatura celle",rows:"Righe",cols:"Colonne",height:"Altezza",width:"Larghezza",title:"Inserisci/Modifica tabella",rowtype:"Riga in una parte di tabella","advanced_props":"Propriet\u00e0 avanzate","general_props":"Propriet\u00e0 generali","advanced_tab":"Avanzate","general_tab":"Generale","cell_col":"Aggiorna tutte le celle della colonna"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ja_dlg.js
new file mode 100644
index 000000000..ad3358642
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.table_dlg',{"rules_border":"\u67a0\u7dda(\u4e0a\u4e0b\u5de6\u53f3)","rules_box":"\u30dc\u30c3\u30af\u30b9(\u4e0a\u4e0b\u5de6\u53f3)","rules_vsides":"\u5de6\u53f3\u306e\u7e26\u7dda","rules_rhs":"\u53f3\u306e\u7e26\u7dda","rules_lhs":"\u5de6\u306e\u7e26\u7dda","rules_hsides":"\u4e0a\u4e0b\u306e\u6a2a\u7dda","rules_below":"\u4e0b\u306e\u6a2a\u7dda","rules_above":"\u4e0a\u306e\u6a2a\u7dda","rules_void":"\u306a\u3057",rules:"\u8868\u306e\u5916\u67a0","frame_all":"\u3059\u3079\u3066","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u30b0\u30eb\u30fc\u30d7\u6bce","frame_none":"\u306a\u3057",frame:"\u30bb\u30eb\u306e\u67a0",caption:"\u8868\u306e\u898b\u51fa\u3057","missing_scope":"\u3053\u306e\u8868\u306e\u30d8\u30c3\u30c0\u30fc\u306e\u30bb\u30eb\u306e\u7bc4\u56f2\u3092\u8a2d\u5b9a\u3057\u306a\u3044\u3067\u672c\u5f53\u306b\u7d9a\u3051\u307e\u3059\u304b? \u3053\u306e\u307e\u307e\u3067\u306f\u76ee\u306e\u4e0d\u81ea\u7531\u306a\u65b9\u304c\u8868\u306e\u5185\u5bb9\u3084\u8868\u793a\u3055\u308c\u308b\u30c7\u30fc\u30bf\u3092\u7406\u89e3\u3059\u308b\u306e\u304c\u56f0\u96e3\u306b\u306a\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002","cell_limit":"\u30bb\u30eb\u306e\u6700\u5927\u6570\u306e${cells}\u3092\u8d85\u3048\u307e\u3057\u305f\u3002","row_limit":"\u884c\u306e\u6700\u5927\u6570\u306e${rows}\u3092\u8d85\u3048\u307e\u3057\u305f\u3002","col_limit":"\u5217\u306e\u6700\u5927\u6570\u306e${cols}\u3092\u8d85\u3048\u307e\u3057\u305f\u3002",colgroup:"\u5217\u30b0\u30eb\u30fc\u30d7",rowgroup:"\u884c\u30b0\u30eb\u30fc\u30d7",scope:"\u30b9\u30b3\u30fc\u30d7",tfoot:"\u8868\u306e\u30d5\u30c3\u30bf\u30fc",tbody:"\u8868\u306e\u30dc\u30c7\u30a3",thead:"\u8868\u306e\u30d8\u30c3\u30c0\u30fc","row_all":"\u3059\u3079\u3066\u306e\u884c\u3092\u66f4\u65b0","row_even":"\u5076\u6570\u884c\u3092\u66f4\u65b0","row_odd":"\u5947\u6570\u884c\u3092\u66f4\u65b0","row_row":"\u9078\u629e\u3057\u3066\u3044\u308b\u884c\u3092\u66f4\u65b0","cell_all":"\u3059\u3079\u3066\u306e\u30bb\u30eb\u3092\u66f4\u65b0","cell_row":"\u884c\u5185\u306e\u30bb\u30eb\u3092\u66f4\u65b0","cell_cell":"\u9078\u629e\u3057\u3066\u3044\u308b\u30bb\u30eb\u3092\u66f4\u65b0",th:"\u30d8\u30c3\u30c0\u30fc",td:"\u30c7\u30fc\u30bf",summary:"\u30b5\u30de\u30ea\u30fc",bgimage:"\u80cc\u666f\u306e\u753b\u50cf",rtl:"\u53f3\u304b\u3089\u5de6",ltr:"\u5de6\u304b\u3089\u53f3",mime:"\u30bf\u30fc\u30b2\u30c3\u30c8\u306eMIME\u30bf\u30a4\u30d7",langcode:"\u8a00\u8a9e\u30b3\u30fc\u30c9",langdir:"\u6587\u7ae0\u306e\u65b9\u5411",style:"\u30b9\u30bf\u30a4\u30eb",id:"ID","merge_cells_title":"\u30bb\u30eb\u3092\u7d50\u5408",bgcolor:"\u80cc\u666f\u306e\u8272",bordercolor:"\u67a0\u7dda\u306e\u8272","align_bottom":"\u4e0b\u63c3\u3048","align_top":"\u4e0a\u63c3\u3048",valign:"\u5782\u76f4\u65b9\u5411\u306e\u914d\u7f6e","cell_type":"\u30bb\u30eb\u306e\u7a2e\u985e","cell_title":"\u30bb\u30eb\u306e\u5c5e\u6027","row_title":"\u884c\u306e\u5c5e\u6027","align_middle":"\u4e2d\u592e\u63c3\u3048","align_right":"\u53f3\u63c3\u3048","align_left":"\u5de6\u63c3\u3048","align_default":"\u521d\u671f\u72b6\u614b",align:"\u914d\u7f6e",border:"\u67a0\u7dda",cellpadding:"\u30bb\u30eb\u306e\u30d1\u30c7\u30a3\u30f3\u30b0(cellpadding)",cellspacing:"\u30bb\u30eb\u306e\u9593\u9694(cellspacing)",rows:"\u884c",cols:"\u5217",height:"\u9ad8\u3055",width:"\u5e45",title:"\u8868\u306e\u633f\u5165\u3084\u7de8\u96c6",rowtype:"\u884c","advanced_props":"\u9ad8\u5ea6\u306a\u5c5e\u6027","general_props":"\u4e00\u822c\u7684\u306a\u5c5e\u6027","advanced_tab":"\u9ad8\u5ea6","general_tab":"\u4e00\u822c","cell_col":"\u3059\u3079\u3066\u306e\u30bb\u30eb\u3092\u66f4\u65b0"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ka_dlg.js
new file mode 100644
index 000000000..ff8b1bef9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.table_dlg',{"rules_border":"\u10e1\u10d0\u10d6\u10e6\u10d5\u10d0\u10e0\u10d8","rules_box":"\u10d9\u10dd\u10da\u10dd\u10e4\u10d8","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"wesebi","frame_all":"\u10e7\u10d5\u10d4\u10da\u10d0","frame_cols":"\u10e1\u10d5\u10d4\u10e2\u10d4\u10d1\u10d8","frame_rows":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8","frame_groups":"\u10ef\u10d2\u10e3\u10e4\u10d4\u10d1\u10d8","frame_none":"none",frame:"\u10d9\u10d0\u10d3\u10e0\u10d8",caption:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","missing_scope":"\u10d7\u10e3 \u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 \u10d0\u10e0 \u10d8\u10e5\u10dc\u10d4\u10d1\u10d0 \u10db\u10d8\u10d7\u10d8\u10d7\u10d4\u10d1\u10e3\u10da\u10d8, \u10e8\u10d4\u10d8\u10eb\u10da\u10d4\u10d1\u10d0 \u10e7\u10d5\u10d4\u10da\u10d0\u10db \u10d5\u10d4\u10e0 \u10dc\u10d0\u10ee\u10dd\u10e1 \u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d0.","cell_limit":"\u10db\u10d8\u10e6\u10ec\u10d4\u10e3\u10da\u10d8\u10d0 \u10db\u10d0\u10e5\u10e1\u10d8\u10db\u10d0\u10da\u10e3\u10e0\u10d8 \u10d6\u10e6\u10d5\u10d0\u10e0\u10d8, $ \u10e3\u10ef\u10e0\u10d0.","row_limit":"\u10db\u10d8\u10e6\u10ec\u10d4\u10e3\u10da\u10d8\u10d0 \u10db\u10d0\u10e5\u10e1\u10d8\u10db\u10d0\u10da\u10e3\u10e0\u10d8 \u10d6\u10e6\u10d5\u10d0\u10e0\u10d8, $ \u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8.","col_limit":"\u10db\u10d8\u10e6\u10ec\u10d4\u10e3\u10da\u10d8\u10d0 \u10db\u10d0\u10e5\u10e1\u10d8\u10db\u10d0\u10da\u10e3\u10e0\u10d8 \u10d6\u10e6\u10d5\u10d0\u10e0\u10d8, $ \u10e1\u10d5\u10d4\u10e2\u10d8.",colgroup:"\u10e1\u10d5\u10d4\u10e2\u10d4\u10d1\u10d8\u10e1 \u10ef\u10d2\u10e3\u10e4\u10d8",rowgroup:"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8\u10e1 \u10ef\u10d2\u10e3\u10e4\u10d8",scope:"\u10db\u10d8\u10d3\u10d0\u10db\u10dd",tfoot:"\u10d3\u10d0\u10e1\u10e0\u10e3\u10da\u10d4\u10d1\u10d0",tbody:"\u10e1\u10ee\u10d4\u10e3\u10da\u10d8",thead:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","row_all":"\u10ea\u10ee\u10e0\u10d8\u10da\u10e1\u10d8 \u10e7\u10d5\u10d4\u10da\u10d0 \u10e3\u10ef\u10e0\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","row_even":"\u10ea\u10ee\u10e0\u10d8\u10da\u10e8\u10d8 \u10da\u10e3\u10ec\u10d8\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","row_odd":"\u10ea\u10ee\u10e0\u10e3\u10da\u10e1\u10d8 \u10d9\u10d4\u10dc\u10e2\u10d8 \u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","row_row":"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10e1\u10e2\u10d8\u10e0\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","cell_all":"\u10ea\u10ee\u10e0\u10d8\u10da\u10e1\u10d8 \u10e7\u10d5\u10d4\u10da\u10d0 \u10e3\u10ef\u10e0\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","cell_row":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10e8\u10d8 \u10e7\u10d5\u10d4\u10da\u10d0 \u10e3\u10ef\u10e0\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0","cell_cell":"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da\u10d8 \u10e3\u10ef\u10e0\u10d8\u10e1 \u10d2\u10d0\u10dc\u10d0\u10ee\u10da\u10d4\u10d1\u10d0",th:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8",td:"\u10db\u10dd\u10dc\u10d0\u10ea\u10d4\u10db\u10d4\u10d1\u10d8",summary:"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd",bgimage:"\u10e4\u10dd\u10dc\u10e3\u10e0\u10d8 \u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d1\u10d0",rtl:"\u10db\u10d0\u10e0\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5",ltr:"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5",mime:"MIME \u10db\u10d8\u10d6\u10dc\u10d8\u10e1 \u10e2\u10d8\u10de\u10d8",langcode:"\u10d4\u10dc\u10d8\u10e1 \u10d9\u10dd\u10d3\u10d8",langdir:"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10db\u10d0\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0",style:"\u10e1\u10e2\u10d8\u10da\u10d8",id:"\u10e1\u10d0\u10ee\u10d4\u10da\u10d8","merge_cells_title":"\u10e3\u10ef\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10d4\u10e0\u10d7\u10d8\u10d0\u10dc\u10d4\u10d1\u10d0",bgcolor:"\u10e8\u10d4\u10d5\u10e1\u10d4\u10d1\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8",bordercolor:"\u10e1\u10d0\u10d6\u10e6\u10d5\u10e0\u10d4\u10d1\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","align_bottom":"\u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_top":"\u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4",valign:"\u10d5\u10d4\u10e0\u10e2\u10d8\u10d9\u10d0\u10da\u10e3\u10e0\u10d8 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","cell_type":"\u10e2\u10d8\u10de\u10d8","cell_title":"\u10e3\u10ef\u10e0\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","row_title":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","align_middle":"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d6\u10d4","align_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","align_default":"\u10e1\u10d0\u10ec\u10d8\u10e1\u10d0\u10d3",align:"\u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0",border:"\u10e1\u10d0\u10d6\u10e6\u10d5\u10d0\u10e0\u10d8",cellpadding:"\u10e3\u10ef\u10e0\u10d4\u10d1\u10e1 \u10e8\u10dd\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",cellspacing:"\u10e3\u10ef\u10e0\u10d4\u10d1\u10e1 \u10e8\u10dd\u10e0\u10d8\u10e1 \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0",rows:"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d4\u10d1\u10d8",cols:"\u10e1\u10d5\u10d4\u10e2\u10d4\u10d1\u10d8",height:"\u10e1\u10d8\u10db\u10d0\u10e6\u10da\u10d4",width:"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4",title:"\u10ea\u10ee\u10e0\u10d8\u10da\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8",rowtype:"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10e0\u10d8\u10de\u10d8","advanced_props":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","general_props":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","advanced_tab":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7","general_tab":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/kl_dlg.js
new file mode 100644
index 000000000..bca3dd66d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/km_dlg.js
new file mode 100644
index 000000000..26e46fcc8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.table_dlg',{"rules_border":"\u179f\u17ca\u17bb\u1798","rules_box":"\u1794\u17d2\u179a\u17a2\u1794\u17cb","rules_vsides":"\u1782\u17c2\u1798\u1794\u1789\u17d2\u1788\u179a","rules_rhs":"\u1782\u17c2\u1798\u179f\u17d2\u178a\u17b6\u17c6","rules_lhs":"\u1782\u17c2\u1798\u1786\u17d2\u179c\u17c1\u1784","rules_hsides":"\u1782\u17c2\u1798\u1795\u17d2\u178a\u17c1\u1780","rules_below":"\u1780\u17d2\u179a\u17c4\u1798","rules_above":"\u179b\u17be","rules_void":"\u1791\u17b8\u1785\u17c6\u17a0",rules:"\u1785\u17d2\u1794\u17b6\u1794\u17cb","frame_all":"\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb","frame_cols":"\u1785\u17c6\u1793\u17bd\u1793\u1787\u17bd\u179a\u1788\u179a","frame_rows":"\u1785\u17c6\u1793\u17bd\u1793\u1787\u17bd\u179a\u1795\u17d2\u178a\u17c1\u1780","frame_groups":"\u1780\u17d2\u179a\u17bb\u1798","frame_none":"\u1782\u17d2\u1798\u17b6\u1793",frame:"\u179f\u1793\u17d2\u179b\u17b9\u1780",caption:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u178f\u17bc\u1785\u178f\u17b6\u179a\u17b6\u1784","missing_scope":"\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17b6\u1780\u178a\u1787\u17b6\u1785\u1784\u17cb\u1794\u1793\u17d2\u178f\u178a\u17c4\u1799\u1798\u17b7\u1793\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u179c\u17b7\u179f\u17b6\u179b\u1797\u17b6\u1796\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1780\u17d2\u179a\u17a1\u17b6\u1780\u17d2\u1794\u17b6\u179b\u17ac? \u1794\u17be\u1782\u17d2\u1798\u17b6\u1793\u179c\u17b6 \u1782\u17ba\u17a2\u17b6\u1785\u1787\u17b6\u1780\u17b6\u179a\u179b\u17c6\u1794\u17b6\u1780\u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17be\u1794\u17d2\u179a\u17b6\u179f\u17cb\u17a2\u179f\u1798\u178f\u17d2\u1790\u1797\u17b6\u1796\u1798\u17bd\u1799\u1785\u17c6\u1793\u17bd\u1793\u1780\u17d2\u1793\u17bb\u1784\u1780\u17b6\u179a\u1799\u179b\u17cb\u17a2\u178f\u17d2\u1790\u1793\u17d0\u1799 \u17ac\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u178a\u17c2\u179b\u1794\u1784\u17d2\u17a0\u17b6\u1789\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784\u1798\u17bd\u1799\u1793\u17c1\u17c7 \u17d4","cell_limit":"\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u179b\u17be\u179f\u1785\u17c6\u1793\u17bd\u1793\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6{$cells}\u1793\u17c3\u1780\u17d2\u179a\u17a1\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u00a0\u17d4","row_limit":"\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u179b\u17be\u179f\u1785\u17c6\u1793\u17bd\u1793\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6{$rows}\u1793\u17c3\u1787\u17bd\u179a\u178a\u17c1\u1780\u00a0\u17d4","col_limit":"\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1792\u17d2\u179c\u17be\u179b\u17be\u179f\u1785\u17c6\u1793\u17bd\u1793\u17a2\u178f\u17b7\u1794\u179a\u1798\u17b6{$cols}\u1793\u17c3\u1787\u17bd\u179a\u1788\u179a\u00a0\u17d4",colgroup:"\u1780\u17d2\u179a\u17bb\u1798\u1787\u17bd\u179a\u1788\u179a",rowgroup:"\u1780\u17d2\u179a\u17bb\u1798\u1787\u17bd\u179a\u178a\u17c1\u1780",scope:"\u179c\u17b7\u179f\u17b6\u179b\u1797\u17b6\u1796",tfoot:"\u1787\u17be\u1784\u178f\u17b6\u179a\u17b6\u1784",tbody:"\u178f\u17bd\u178f\u17b6\u179a\u17b6\u1784",thead:"\u1780\u17d2\u1794\u17b6\u179b\u178f\u17b6\u179a\u17b6\u1784","row_all":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1787\u17bd\u179a\u178a\u17c1\u1780\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784","row_even":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1787\u17bd\u179a\u178a\u17c1\u1780\u1782\u17bc\u179a\u1791\u17b6\u17c6\u1784\u17a1\u17b6\u1799\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784","row_odd":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1787\u17bd\u179a\u178a\u17c1\u1780\u179f\u17c1\u179f\u1791\u17b6\u17c6\u1784\u17a1\u17b6\u1799\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784","row_row":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1787\u17bd\u179a\u178a\u17c1\u1780\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793","cell_all":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1780\u17d2\u179a\u17a1\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784","cell_row":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1780\u17d2\u179a\u17a1\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u1780\u17d2\u1793\u17bb\u1784\u1787\u17bd\u179a\u178a\u17c1\u1780","cell_cell":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1780\u17d2\u179a\u17a1\u17b6\u1794\u1785\u17d2\u1785\u17bb\u1794\u17d2\u1794\u1793\u17d2\u1793",th:"\u1780\u17d2\u1794\u17b6\u179b\u178f\u17b6\u179a\u17b6\u1784",td:"\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799",summary:"\u179f\u1784\u17d2\u1781\u17c1\u1794",bgimage:"\u179a\u17bc\u1794\u1797\u17b6\u1796\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799",rtl:"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784",ltr:"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178a\u17b6\u17c6",mime:"\u1794\u17d2\u179a\u1797\u17c1\u1791\u1782\u17c4\u179b\u178a\u17c5 MIME",langcode:"\u1780\u17bc\u178a\u1797\u17b6\u179f\u17b6",langdir:"\u1791\u17b7\u179f\u178a\u17c5\u1797\u17b6\u179f\u17b6",style:"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798",id:"\u179b\u179f.","merge_cells_title":"\u179a\u17c6\u179b\u17b6\u1799\u1780\u17d2\u179a\u17a1\u17b6\u178f\u17b6\u179a\u17b6\u1784\u1794\u1789\u17d2\u1785\u17bc\u179b\u1782\u17d2\u1793\u17b6",bgcolor:"\u1796\u178e\u17cc\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799",bordercolor:"\u1796\u178e\u17cc\u179f\u17ca\u17bb\u1798","align_bottom":"\u1794\u17b6\u178f","align_top":"\u1780\u17c6\u1796\u17bc\u179b",valign:"\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17b9\u1798\u1794\u1789\u17d2\u1788\u179a","cell_type":"\u1794\u17d2\u179a\u1797\u17c1\u1791\u1780\u17d2\u179a\u17a1\u17b6","cell_title":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1780\u17d2\u179a\u17a1\u17b6\u178f\u17b6\u179a\u17b6\u1784","row_title":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1787\u17bd\u179a\u178a\u17c1\u1780\u178f\u17b6\u179a\u17b6\u1784","align_middle":"\u1780\u178e\u17d2\u178a\u17b6\u179b","align_right":"\u179f\u17d2\u178a\u17b6\u17c6","align_left":"\u1786\u17d2\u179c\u17c1\u1784","align_default":"\u179b\u17c6\u1793\u17b6\u17c6\u178a\u17be\u1798",align:"\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17b9\u1798",border:"\u179f\u17ca\u17bb\u1798",cellpadding:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1780\u17d2\u179a\u17a1\u17b6",cellspacing:"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1780\u17d2\u1793\u17bb\u1784\u1780\u17d2\u179a\u17a1\u17b6",rows:"\u1785\u17c6\u1793\u17bd\u1793\u1787\u17bd\u179a\u178a\u17c1\u1780",cols:"\u1785\u17c6\u1793\u17bd\u1793\u1787\u17bd\u179a\u1788\u179a",height:"\u1780\u1798\u17d2\u1796\u179f\u17cb",width:"\u1791\u1791\u17b9\u1784",title:"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u178f\u17b6\u179a\u17b6\u1784",rowtype:"\u1791\u17b8\u178f\u17b6\u17c6\u1784\u1787\u17bd\u179a\u178a\u17c1\u1780\u1780\u17d2\u1793\u17bb\u1784\u178f\u17b6\u179a\u17b6\u1784","advanced_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","general_props":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u1791\u17bc\u1791\u17c5","advanced_tab":"\u1780\u1798\u17d2\u179a\u17b7\u178f\u1781\u17d2\u1796\u179f\u17cb","general_tab":"\u1791\u17bc\u1791\u17c5","cell_col":"\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1780\u17d2\u179a\u17a1\u17b6\u1791\u17b6\u17c6\u1784\u17a1\u17b6\u1799\u1780\u17d2\u1793\u17bb\u1784\u1787\u17bd\u179a\u1788\u179a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ko_dlg.js
new file mode 100644
index 000000000..67c7d8d71
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"\uc88c\uc6b0\ubc94\uc704\ub9cc","rules_rhs":"\uc6b0\uce21 \ubc94\uc704\ub9cc","rules_lhs":"\uc88c\uce21 \ubc94\uc704\ub9cc","rules_hsides":"\uc0c1\ud558\ubc94\uc704\ub9cc","rules_below":"\uc544\ub798","rules_above":"\uc704","rules_void":"Void",rules:"Rules","frame_all":"\ubaa8\ub450","frame_cols":"\uc5f4","frame_rows":"\ud589","frame_groups":"\uadf8\ub8f9","frame_none":"\uc5c6\uc74c",frame:"Frame",caption:"\ud45c \uc81c\ubaa9","missing_scope":"\uc774 \ud45c \ud5e4\ub354\uc140\uc5d0 scope\uc18d\uc131\uc744 \uc9c0\uc815\ud558\uc9c0\uc54a\uc544\ub3c4 \uad1c\ucc2e\uc2b5\ub2c8\uae4c? \uc9c0\uc815\ud558\uc9c0 \uc54a\ub294 \uacbd\uc6b0, \uc2dc\uac04\uc801\uc73c\ub85c \ud14c\uc774\ube14\uc758 \uad6c\uc870\ub97c \ud30c\uc545\ud558\ub294 \uac83\uc774 \uc5b4\ub824\uc6b4 \ubd84\uc758 \uc811\uadfc\uc131\uc774 \uc800\ud558\ud569\ub2c8\ub2e4.","cell_limit":"\uc140\uc218\uc758 \uc0c1\ud55c{$cells}\ub97c \ub118\uc5c8\uc2b5\ub2c8\ub2e4.","row_limit":"\ud589\uc218\uc758 \uc0c1\ud55c{$rows}\ub97c \ub118\uc5c8\uc2b5\ub2c8\ub2e4.","col_limit":"\uc5f4 \uc218\uc758 \uc0c1\ud55c{$cols}\ub97c \ub118\uc5c8\uc2b5\ub2c8\ub2e4.",colgroup:"\uc5f4 \uadf8\ub8f9",rowgroup:"\ud589 \uadf8\ub8f9",scope:"Scope",tfoot:"\ubc14\ub2e5\uae00",tbody:"\ubcf8\ubb38",thead:"\uba38\ub9bf\uae00","row_all":"\ud45c\uc758 \ubaa8\ub4e0 \ud589 \uac31\uc2e0","row_even":"\ud45c\uc758 \uc9dd\uc218 \ud589 \uac31\uc2e0","row_odd":"\ud45c\uc758 \ud640\uc218 \ud589 \uac31\uc2e0","row_row":"\ud604\uc7ac \ud589 \uac31\uc2e0","cell_all":"\ud45c\uc758 \ubaa8\ub4e0 \uc140 \uac31\uc2e0","cell_row":"\ud589\uc758 \ubaa8\ub4e0 \uc140 \uac31\uc2e0","cell_cell":"\ud604\uc7ac \uc140 \uac31\uc2e0",th:"\uba38\ub9bf\uae00",td:"\ub370\uc774\ud130",summary:"\uc694\uc57d",bgimage:"\ubc30\uacbd \uc774\ubbf8\uc9c0",rtl:"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c",ltr:"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c",mime:"Target MIME \ud0c0\uc785",langcode:"\uc5b8\uc5b4 \ucf54\ub4dc",langdir:"\ubb38\uc790 \ubc29\ud5a5",style:"\uc11c\uc2dd",id:"ID","merge_cells_title":"\uc140 \ubcd1\ud569",bgcolor:"\ubc30\uacbd\uc0c9",bordercolor:"\ud14c\ub450\ub9ac \uc0c9","align_bottom":"\ud558","align_top":"\uc0c1",valign:"\uc138\ub85c \ub9de\ucda4","cell_type":"\uc140 \uc885\ub958","cell_title":"\uc140 \uc18d\uc131","row_title":"\ud589 \uc18d\uc131","align_middle":"\uac00\uc6b4\ub370 \ub9de\ucda4","align_right":"\uc624\ub978\ucabd \ub9de\ucda4","align_left":"\uc67c\ucabd \ub9de\ucda4","align_default":"\uae30\ubcf8\uac12",align:"\uc904 \ub9de\ucda4",border:"\ud14c\ub450\ub9ac\uc120",cellpadding:"\uc140\ub0b4 \uc5ec\ubc31",cellspacing:"\uc140 \uac04\uaca9",rows:"\ud589",cols:"\uc5f4",height:"\ub192\uc774",width:"\ud3ed",title:"\ud45c \uc0bd\uc785/\ud3b8\uc9d1",rowtype:"\ud589 \uc885\ub958","advanced_props":"\uc138\ubd80 \uc18d\uc131","general_props":"\uc77c\ubc18 \uc18d\uc131","advanced_tab":"\uc138\ubd80 \uc0ac\ud56d","general_tab":"\uc77c\ubc18","cell_col":"\uc5f4\uc758 \ubaa8\ub4e0 \uc140 \uac31\uc2e0"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/kz_dlg.js
new file mode 100644
index 000000000..e6358fccf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lb_dlg.js
new file mode 100644
index 000000000..bbddbcfda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.table_dlg',{"rules_border":"all 4 S\u00e4iten (Bord)","rules_box":"all 4 S\u00e4iten (Box)","rules_vsides":"l\u00e9nks a riets","rules_rhs":"n\u00ebmmen riets","rules_lhs":"n\u00ebmmen l\u00e9nks","rules_hsides":"uewen an \u00ebnnen","rules_below":"n\u00ebmmen \u00ebnnen","rules_above":"n\u00ebmmen uewen","rules_void":"keen",rules:"Gitter","frame_all":"zw\u00ebschen allen Zellen","frame_cols":"zw\u00ebschen Spalten","frame_rows":"zw\u00ebschen Zeilen","frame_groups":"zw\u00ebschen Gruppen","frame_none":"keng",frame:"Rumm",caption:"Beschr\u00ebftung vun der Tabelle","missing_scope":"W\u00ebllt Dir wierklech keng Bez\u00e9iung fir d\u00ebs Iwwerschr\u00ebft uginn? Benotzer mat kierperlechen Aschr\u00e4nkungen k\u00ebnne Schwieregkeeten hunn, den Inhalt vun der Tabelle ze verstoen.","cell_limit":"Dir hutt d\u00e9i maximal Zellenzuel vun {$cells} iwwerschratt.","row_limit":"Dir hutt d\u00e9i maximal Zeilenzuel vun {$rows} iwwerschratt.","col_limit":"Dir hutt d\u00e9i maximal Spaltenzuel vun {$cols} iwwerschratt.",colgroup:"Horizontal grupp\u00e9ieren",rowgroup:"Vertikal grupp\u00e9ieren",scope:"Bezuch",tfoot:"Tabellefouss",tbody:"Tabelleninhalt",thead:"Tabellekapp","row_all":"All d\'Zeilen ver\u00e4nneren","row_even":"Grued Zeilen ver\u00e4nneren","row_odd":"Ongrued Zeilen ver\u00e4nneren","row_row":"D\u00ebs Zeil ver\u00e4nneren","cell_all":"All Zellen der Tabelle ver\u00e4nneren","cell_row":"All Zellen an d\u00ebser Zeil ver\u00e4nneren","cell_cell":"D\u00ebs Zell ver\u00e4nneren",th:"Iwwerschr\u00ebft",td:"Textzell",summary:"Zesummefaassung",bgimage:"Hannergrondbild",rtl:"Riets no l\u00e9nks",ltr:"L\u00e9nks no riets",mime:"MIME-Typ vum Inhalt",langcode:"Sproochecode",langdir:"Schr\u00ebftrichtung",style:"Format",id:"ID","merge_cells_title":"Zelle vereenen",bgcolor:"Hannergrondfuerf",bordercolor:"Fuerf vun der Rumm","align_bottom":"\u00cbnnen","align_top":"Uewen",valign:"Vertikal Ausriichtung","cell_type":"Zellentyp","cell_title":"Eegeschafte vun der Zell","row_title":"Eegeschafte vun der Zeil","align_middle":"M\u00ebtteg","align_right":"Riets","align_left":"L\u00e9nks","align_default":"Standard",align:"Ausriichtung",border:"Rumm",cellpadding:"Ofstand innerhalb vun den Zellen",cellspacing:"Zellenofstand",rows:"Zeilen",cols:"Spalten",height:"H\u00e9icht",width:"Breet",title:"Tabelle af\u00fcgen/beaarbechten",rowtype:"Grupp\u00e9ierung","advanced_props":"Erweidert Astellungen","general_props":"Allgemeng Astellungen","advanced_tab":"Erweidert","general_tab":"Allgemeng","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lt_dlg.js
new file mode 100644
index 000000000..754fd7d07
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.table_dlg',{"rules_border":"r\u0117melis","rules_box":"d\u0117\u017eut\u0117","rules_vsides":"vert. pus\u0117s","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hor. pus\u0117s","rules_below":"apatinis","rules_above":"vir\u0161utinis","rules_void":"negaliojantis",rules:"Taisykl\u0117s","frame_all":"visi","frame_cols":"stulpeliai","frame_rows":"eilut\u0117s","frame_groups":"grup\u0117s","frame_none":"joks",frame:"R\u0117melis",caption:"Lentel\u0117s antra\u0161t\u0117","missing_scope":"Ar norite t\u0119sti nenurod\u0119 galiojimo srities \u0161iam lentel\u0117s vir\u0161utiniam langeliui. Be nurodymo, kai kuriems naudotojams su negalia gali b\u016bti sunku suprasti lentel\u0117je atvaizduojam\u0173 duomen\u0173 turin\u012f.","cell_limit":"Vir\u0161ijote did\u017eiausi\u0105 ({$cells}) langeli\u0173 kiek\u012f.","row_limit":"Vir\u0161ijote did\u017eiausi\u0105 ({$rows}) eilu\u010di\u0173 kiek\u012f.","col_limit":"Vir\u0161ijote did\u017eiausi\u0105 ({$cols}) stulpeli\u0173 kiek\u012f.",colgroup:"Stulpeli\u0173 grup\u0117",rowgroup:"Eilu\u010di\u0173 grup\u0117",scope:"Galiojimo sritis",tfoot:"Lentel\u0117s apa\u010dia",tbody:"Lentel\u0117s vidus",thead:"Lentel\u0117s vir\u0161us","row_all":"Atnaujinti visas lentel\u0117s eilutes","row_even":"Atnaujinti lygines lentel\u0117s eilutes","row_odd":"Atnaujinti nelygines lentel\u0117s eilutes","row_row":"Atnaujinti dabartin\u0119 eilut\u0119","cell_all":"Atnaujinti visus lentel\u0117s langelius","cell_row":"Atnaujinti visus eilut\u0117s langelius","cell_cell":"Atnaujinti dabartin\u012f langel\u012f",th:"Antra\u0161t\u0117",td:"Duomenys",summary:"Apibendrinimas",bgimage:"Fono paveiksl\u0117lis",rtl:"I\u0161 de\u0161in\u0117s \u012f kair\u0119",ltr:"I\u0161 kair\u0117s \u012f de\u0161in\u0119",mime:"Paskirties MIME tipas",langcode:"Kalbos kodas",langdir:"Kalbos kryptis",style:"Stilius",id:"Id","merge_cells_title":"Sujungti lentel\u0117s langelius",bgcolor:"Fono spalva",bordercolor:"R\u0117melio spalva","align_bottom":"Apa\u010dioje","align_top":"Vir\u0161uje",valign:"Vertikalus lygiavimas","cell_type":"Langelio tipas","cell_title":"Lentel\u0117s langeli\u0173 nustatymai","row_title":"Lentel\u0117s eilut\u0117s nustatymai","align_middle":"Centruoti","align_right":"Lygiuoti de\u0161in\u0117je","align_left":"Lygiuoti kair\u0117je","align_default":"Standartinis",align:"Lygiavimas",border:"R\u0117melis",cellpadding:"Tarpas langelio viduje",cellspacing:"Tarpas tarp langeli\u0173",rows:"Eilut\u0117s",cols:"Stulpeliai",height:"Auk\u0161tis",width:"Ilgis",title:"\u012eterpti/modifikuoti lentel\u0119",rowtype:"Eilut\u0117 lentel\u0117s dalyje","advanced_props":"I\u0161pl\u0117stiniai nustatymai","general_props":"Bendri nustatymai","advanced_tab":"I\u0161pl\u0117sta","general_tab":"Bendra","cell_col":"Atnaujinti visus langelius stulpelyje"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lv_dlg.js
new file mode 100644
index 000000000..6920325d8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Atjaunot visus logus ail\u0113"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/mk_dlg.js
new file mode 100644
index 000000000..6bf049b19
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.table_dlg',{"rules_border":"\u0433\u0440\u0430\u043d\u0438\u0446\u0430","rules_box":"\u043a\u0443\u0442\u0438\u0458\u0430","rules_vsides":"\u043b\u0435\u0432\u043e \u0438 \u0434\u0435\u0441\u043d\u043e","rules_rhs":"\u043e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e","rules_lhs":"\u043e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e","rules_hsides":"\u0433\u043e\u0440\u0435 \u0438 \u0434\u043e\u043b\u0435","rules_below":"\u043f\u043e\u0434","rules_above":"\u043d\u0430\u0434","rules_void":"\u043f\u0440\u0430\u0437\u043d\u043e",rules:"\u041f\u0440\u0430\u0432\u0438\u043b\u0430","frame_all":"\u0441\u0435/\u0441\u0438\u0442\u0435","frame_cols":"\u043a\u043e\u043b\u043e\u043d\u0438","frame_rows":"\u0440\u0435\u0434\u043e\u0432\u0438","frame_groups":"\u0433\u0440\u0443\u043f\u0438","frame_none":"\u043d\u0438\u0448\u0442\u043e",frame:"\u0420\u0430\u043c\u043a\u0430",caption:"\u041e\u043f\u0438\u0441 \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","missing_scope":"\u0414\u0430\u043b\u0438 \u0441\u0442\u0435 \u0441\u0438\u0433\u0443\u0440\u043d\u0438 \u0434\u0435\u043a\u0430 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435 \u0431\u0435\u0437 \u043e\u0434\u0440\u0435\u0434\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u043e\u043f\u0441\u0435\u0433\u043e\u0442 \u043d\u0430 \u043d\u0430\u0441\u043b\u043e\u0432\u043d\u0430\u0442\u0430 \u043a\u043b\u0435\u0442\u043a\u0430 \u043d\u0430 \u043e\u0432\u0430\u0430 \u0442\u0430\u0431\u0435\u043b\u0430. \u0411\u0435\u0437 \u043d\u0435\u0433\u043e, \u0442\u043e\u0430 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0431\u0438\u0434\u0435 \u0442\u0435\u0448\u043a\u043e \u0437\u0430 \u043d\u0435\u043a\u043e\u0438 \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438 \u0441\u043e \u043f\u043e\u0441\u0435\u0431\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438 \u0434\u0430 \u0441\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0435 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430\u0442\u0430 \u0438\u043b\u0438 \u043f\u043e\u0434\u0430\u0442\u043e\u0446\u0438 \u043f\u0440\u0438\u043a\u0430\u0436\u0430\u043d\u0438 \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430.","cell_limit":"\u0413\u043e \u043d\u0430\u0434\u043c\u0438\u043d\u0430\u0432\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u0438\u043e\u0442 \u0431\u0440\u043e\u0458 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0438 ({$cells}).","row_limit":"\u0413\u043e \u043d\u0430\u0434\u043c\u0438\u043d\u0430\u0432\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u043e\u043e\u0442 \u0431\u0440\u043e\u0458 \u043d\u0430 \u0440\u0435\u0434\u043e\u0432\u0438 ({$rows}).","col_limit":"\u0413\u043e \u043d\u0430\u0434\u043c\u0438\u043d\u0430\u0432\u0442\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u043d\u043e\u043e\u0442 \u0431\u0440\u043e\u0458 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0438 ({$cols}).",colgroup:"\u0413\u0440\u0443\u043f\u0430 \u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u0438",rowgroup:"\u0413\u0440\u0443\u043f\u0430 \u043d\u0430 \u0440\u0435\u0434\u043e\u0432\u0438",scope:"\u041e\u043f\u0441\u0435\u0433",tfoot:"\u041e\u043f\u0430\u0448\u043a\u0430/\u043f\u043e\u0434\u043d\u043e\u0436\u0458\u0435 \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430",tbody:"\u0422\u0435\u043b\u043e \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430",thead:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 \u043d\u0430 \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","row_all":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u0440\u0435\u0434\u043e\u0432\u0438 \u0432\u043e \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","row_even":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043f\u0430\u0440\u043d\u0438 \u0440\u0435\u0434\u043e\u0432\u0438 \u0432\u043e \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","row_odd":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043d\u0435\u043f\u0430\u0440\u043d\u0438 \u0440\u0435\u0434\u043e\u0432\u0438 \u0432\u043e \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","row_row":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u043d\u0438\u043e\u0442 \u0440\u0435\u0434","cell_all":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043a\u043b\u0435\u0442\u043a\u0438 \u0432\u043e \u0442\u0430\u0431\u0435\u043b\u0430\u0442\u0430","cell_row":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043a\u043b\u0435\u0442\u043a\u0438 \u0432\u043e \u0440\u0435\u0434\u043e\u0442","cell_cell":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0458\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u043d\u0430\u0442\u0430 \u043a\u043b\u0435\u0442\u043a\u0430",th:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435",td:"\u041f\u043e\u0434\u0430\u0442\u043e\u0446\u0438",summary:"\u0420\u0435\u0437\u0438\u043c\u0435",bgimage:"\u0421\u043b\u0438\u043a\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430\u0442\u0430",rtl:"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e",ltr:"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e",mime:"MIME \u0442\u0438\u043f",langcode:"\u041a\u043e\u0434 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442",langdir:"\u0421\u043c\u0435\u0440 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442",style:"\u0421\u0442\u0438\u043b",id:"\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0458\u0430 (Id)","merge_cells_title":"\u0421\u043f\u043e\u0438 \u0433\u0438 \u043a\u043b\u0435\u0442\u043a\u0438\u0442\u0435",bgcolor:"\u0411\u043e\u0458\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430\u0442\u0430",bordercolor:"\u0411\u043e\u0458\u0430 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0442\u0430/\u0440\u0430\u0431\u043e\u0442","align_bottom":"\u0414\u043e\u043b\u0435","align_top":"\u0413\u043e\u0440\u0435",valign:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u0438\u0437\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435","cell_type":"\u0422\u0438\u043f \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430","cell_title":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430","row_title":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0440\u0435\u0434\u043e\u0442","align_middle":"\u0421\u0440\u0435\u0434\u0438\u043d\u0430","align_right":"\u0414\u0435\u0441\u043d\u043e","align_left":"\u041b\u0435\u0432\u043e","align_default":"\u041f\u0440\u0435\u0432\u0437\u0435\u043c\u0435\u043d\u043e",align:"\u0418\u0437\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430 / \u0440\u0430\u0431",cellpadding:"\u0414\u043e\u043f\u043e\u043b\u043d\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430",cellspacing:"\u0420\u0430\u0441\u0442\u043e\u0458\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u043b\u0435\u0442\u043a\u0430\u0442\u0430",rows:"\u0420\u0435\u0434\u043e\u0432\u0438",cols:"\u041a\u043e\u043b\u043e\u043d\u0438",height:"\u0412\u0438\u0441\u0438\u043d\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u0412\u043c\u0435\u0442\u043d\u0438/\u0443\u0440\u0435\u0434\u0438 \u0442\u0430\u0431\u0435\u043b\u0430",rowtype:"\u0422\u0438\u043f \u043d\u0430 \u0440\u0435\u0434\u043e\u0442","advanced_props":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u0438 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430","general_props":"\u041e\u0441\u043d\u043e\u0432\u043d\u0438 \u0441\u0432\u043e\u0458\u0441\u0442\u0432\u0430","advanced_tab":"\u041d\u0430\u043f\u0440\u0435\u0434\u043d\u043e","general_tab":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e","cell_col":"\u0410\u0436\u0443\u0440\u0438\u0440\u0430\u0458 \u0433\u0438 \u0441\u0438\u0442\u0435 \u043a\u043b\u0435\u0442\u043a\u0438 \u0432\u043e \u043a\u043e\u043b\u043e\u043d\u0430\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ml_dlg.js
new file mode 100644
index 000000000..ddab4fc70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.table_dlg',{"rules_border":"\u0d05\u0d24\u0d3f\u0d30\u0d41\u0d4d","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u0d24\u0d3e\u0d34\u0d46","rules_above":"\u0d2e\u0d41\u0d15\u0d33\u0d3f\u0d32\u0d4d\u200d","rules_void":"void",rules:"Rules","frame_all":"\u0d0e\u0d32\u0d4d\u0d32\u0d3e\u0d02","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/mn_dlg.js
new file mode 100644
index 000000000..dfb04fcef
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u0434\u043e\u043e\u0440","rules_above":"\u0434\u044d\u044d\u0440","rules_void":"void",rules:"\u0428\u0443\u0433\u0430\u043c","frame_all":"\u0431\u04af\u0445","frame_cols":"\u0411\u0430\u0433\u0430\u043d\u0430","frame_rows":"\u041c\u04e9\u0440","frame_groups":"\u0411\u04af\u043b\u044d\u0433","frame_none":"\u0431\u0430\u0439\u0445\u0433\u04af\u0439",frame:"\u0424\u0440\u044d\u0439\u043c",caption:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0442\u0430\u0439\u043b\u0431\u0430\u0440","missing_scope":"\u0422\u0430 \u044d\u043d\u044d \u0433\u0430\u0440\u0447\u0433\u0438\u0439\u043d \u0445\u0443\u0432\u044c\u0434 \u04af\u043d\u044d\u0445\u044d\u044d\u0440 \u0442\u0430\u0439\u043b\u0431\u0430\u0440 \u0445\u0438\u0439\u0445\u0433\u04af\u0439 \u0431\u0430\u0439\u0445\u044b\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443? \u0417\u0430\u0440\u0438\u043c \u0445\u04e9\u0433\u0436\u043b\u0438\u0439\u043d \u0431\u044d\u0440\u0445\u0448\u044d\u044d\u043b\u0442\u044d\u0439 \u0445\u04af\u043c\u04af\u04af\u0441 \u0445\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0430\u0433\u0443\u0443\u043b\u0433\u044b\u0433 \u043e\u0439\u043b\u0433\u043e\u0445\u043e\u0434 \u0445\u04af\u043d\u0434\u0440\u044d\u043b\u0442\u044d\u0439 \u0431\u0430\u0439\u0445 \u0431\u043e\u043b\u043d\u043e.","cell_limit":"\u041d\u04af\u0434\u043d\u0438\u0439 \u0442\u043e\u043e\u043d\u044b \u0445\u044f\u0437\u0433\u0430\u0430\u0440 {$cells}-\u0441 \u0445\u044d\u0442\u044d\u0440\u043b\u044d\u044d.","row_limit":"\u041c\u04e9\u0440\u0438\u0439\u043d \u0442\u043e\u043e\u043d\u044b \u0445\u044f\u0437\u0433\u0430\u0430\u0440 {$rows}-\u0441 \u0445\u044d\u0442\u044d\u0440\u043b\u044d\u044d.","col_limit":"\u0411\u0430\u0433\u0430\u043d\u044b\u043d \u0442\u043e\u043e\u043d\u044b \u0445\u044f\u0437\u0433\u0430\u0430\u0440 {$cols}-\u0441 \u0445\u044d\u0442\u044d\u0440\u043b\u044d\u044d.",colgroup:"\u0425\u044d\u0432\u0442\u044d\u044d \u0431\u04af\u043b\u044d\u0433\u043b\u044d\u0445",rowgroup:"\u0411\u043e\u0441\u043e\u043e \u0431\u04af\u043b\u044d\u0433\u043b\u044d\u0445",scope:"\u0423\u044f\u043b\u0434\u0430\u0430",tfoot:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0445\u04e9\u043b",tbody:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0430\u0433\u0443\u0443\u043b\u0433\u0430",thead:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0442\u043e\u043b\u0433\u043e\u0439","row_all":"\u0411\u04af\u0445 \u043c\u04e9\u0440\u0438\u0439\u043d \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","row_even":"\u0422\u044d\u0433\u0448 \u043c\u04e9\u0440\u04af\u04af\u0434\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","row_odd":"\u0421\u043e\u043d\u0434\u0433\u043e\u0439 \u043c\u04e9\u0440\u04af\u04af\u0434\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","row_row":"\u042d\u043d\u044d \u043c\u04e9\u0440\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","cell_all":"\u0425\u04af\u0441\u043d\u044d\u0433\u0442\u0438\u0439\u043d \u0431\u04af\u0445 \u043d\u04af\u0434\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","cell_row":"\u042d\u043d\u044d \u043c\u04e9\u0440\u04e9\u043d \u0434\u04e9\u0445 \u0431\u04af\u0445 \u043d\u04af\u0434\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","cell_cell":"\u042d\u043d\u044d \u043d\u04af\u0434\u0438\u0439\u0433 \u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445",th:"\u0413\u0430\u0440\u0447\u0438\u0433",td:"\u0411\u0438\u0447\u0432\u044d\u0440 \u043d\u04af\u0434",summary:"\u0414\u04af\u0433\u043d\u044d\u043b\u0442",bgimage:"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u0437\u0443\u0440\u0430\u0433",rtl:"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d",ltr:"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d",mime:"\u0410\u0433\u0443\u0443\u043b\u0433\u044b\u043d MIME-\u0442\u04e9\u0440\u04e9\u043b",langcode:"\u0425\u044d\u043b\u043d\u0438\u0439 \u043a\u043e\u0434",langdir:"\u0411\u0438\u0447\u0433\u0438\u0439\u043d \u0447\u0438\u0433\u043b\u044d\u043b",style:"\u0425\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442",id:"\u0422\u0422","merge_cells_title":"\u041d\u04af\u0434 \u043d\u044d\u0433\u0442\u0433\u044d\u0445",bgcolor:"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u04e9\u043d\u0433\u04e9",bordercolor:"\u0425\u04af\u0440\u044d\u044d\u043d\u0438\u0439 \u04e9\u043d\u0433\u04e9","align_bottom":"\u0414\u043e\u043e\u0440","align_top":"\u0414\u044d\u044d\u0440",valign:"\u0411\u043e\u0441\u043e\u043e \u0436\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442","cell_type":"\u041d\u04af\u0434\u043d\u0438\u0439 \u0442\u04e9\u0440\u04e9\u043b","cell_title":"\u041d\u04af\u0434\u043d\u0438\u0439 \u0448\u0438\u043d\u0436","row_title":"\u041c\u04e9\u0440\u0438\u0439\u043d \u0448\u0438\u043d\u0436","align_middle":"\u0413\u043e\u043b\u0434","align_right":"\u0411\u0430\u0440\u0443\u0443\u043d","align_left":"\u0417\u04af\u04af\u043d","align_default":"\u04e8\u0433\u04e9\u0433\u0434\u043c\u04e9\u043b",align:"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442",border:"\u0425\u04af\u0440\u044d\u044d",cellpadding:"\u041d\u04af\u0434\u043d\u0438\u0439 \u0434\u043e\u0442\u043e\u043e\u0434 \u0430\u043b\u0441\u043b\u0430\u043b\u0442",cellspacing:"\u041d\u04af\u0434\u043d\u0438\u0439 \u0430\u043b\u0441\u043b\u0430\u043b\u0442",rows:"\u041c\u04e9\u0440",cols:"\u0411\u0430\u0433\u0430\u043d\u0430",height:"\u04e8\u043d\u0434\u04e9\u0440",width:"\u04e8\u0440\u0433\u04e9\u043d",title:"\u0425\u04af\u0441\u043d\u044d\u0433\u0442 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0430\u0445",rowtype:"\u041c\u04e9\u0440\u0438\u0439\u043d \u0442\u04e9\u0440\u04e9\u043b","advanced_props":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","general_props":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439 \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","advanced_tab":"\u04e8\u0440\u0433\u04e9\u0442\u0433\u04e9\u0441\u04e9\u043d","general_tab":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ms_dlg.js
new file mode 100644
index 000000000..d32483f93
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.table_dlg',{"rules_border":"sempadan","rules_box":"kotak","rules_vsides":"tepian tegak","rules_rhs":"hs-kanan","rules_lhs":"hs-kiri","rules_hsides":"tepian datar","rules_below":"bawah","rules_above":"atas","rules_void":"batal",rules:"Peraturan","frame_all":"semua","frame_cols":"kol","frame_rows":"row","frame_groups":"kumpulan","frame_none":"tiada",frame:"Bingkai",caption:"Tajuk jadual","missing_scope":"Adakah anda pasti terhadap skop sel jadual ini. Ia mungkin memberi kesan kepada OKU memahami isi jadual.","cell_limit":"Anda telah melebihi maxima sel dibenarkan iaitu {$cells}.","row_limit":"Anda telah melebihi maxima row dibenarkan iaitu {$rows}.","col_limit":"Anda telah melebihi maxima kolum dibenarkan iaitu {$cols}.",colgroup:"Kumpulan kol",rowgroup:"Kumpulan row",scope:"Skop",tfoot:"Penutup jadual Foot",tbody:"Isi jadual",thead:"Pembuka jadual","row_all":"Baharui semua row dalam jadual","row_even":"Baharui row genap dalam jadual","row_odd":"Baharui row ganjil dalam jadual","row_row":"Baharui row semasa","cell_all":"Baharui semua sel dalam jadual","cell_row":"Baharui semua sel dalam row","cell_cell":"Baharui sel ini",th:"Kepala",td:"Data",summary:"Kesimpulan",bgimage:"Imej latar",rtl:"Kanan ke kiri",ltr:"Kiri ke kanan",mime:"Sasaran jenis MIME",langcode:"Kod bahasa",langdir:"Arah bahasa",style:"Gaya",id:"Id","merge_cells_title":"Gabung sel jadual",bgcolor:"Warna latar",bordercolor:"Warna sempadan","align_bottom":"Bawah","align_top":"Atas",valign:"Penjajaran tegak","cell_type":"Jenis sel","cell_title":"Alatan sel jadual","row_title":"Alatan row jadual","align_middle":"Tengah","align_right":"Kanan","align_left":"Kiri","align_default":"Asal",align:"Penyelarian",border:"Sempadan",cellpadding:"Lapisan sel",cellspacing:"Ruang sel",rows:"Row",cols:"Kol",height:"Tinggi",width:"Lebar",title:"Masuk/Ubah jadual",rowtype:"Row dalam jadual","advanced_props":"Alatan lanjutan","general_props":"Alatan am","advanced_tab":"Lanjutan","general_tab":"Am","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/my_dlg.js
new file mode 100644
index 000000000..b84c324fb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.table_dlg',{"rules_border":"\u1014\u101a\u103a\u1005\u100a\u103a\u1038","rules_box":"\u1015\u1036\u102f\u1038","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"\u1031\u1021\u102c\u1000\u103a\u1010\u103d\u1004\u103a","rules_above":"\u1021\u1011\u1000\u103a\u1010\u103d\u1004\u103a","rules_void":"void",rules:"\u1005\u100a\u103a\u1038\u1019\u103b\u1009\u103a\u1038\u1019\u103b\u102c\u1038","frame_all":"\u1021\u102c\u1038\u101c\u1036\u102f\u1038","frame_cols":"\u1031\u1000\u102c\u103a\u101c\u1036\u1019\u103b\u102c\u1038","frame_rows":"\u1021\u1010\u1014\u103a\u1038\u1019\u103b\u102c\u1038","frame_groups":"\u1021\u102f\u1015\u103a\u1005\u102f\u1019\u103b\u102c\u1038","frame_none":"\u1010\u1005\u103a\u1001\u102f\u1019\u103b\u103e\u1019\u101f\u102f\u1010\u103a",frame:"\u1016\u101b\u102d\u1019\u103a",caption:"\u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a \u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a","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.","cell_limit":"You","row_limit":"You","col_limit":"You",colgroup:"\u1031\u1000\u102c\u103a\u101c\u1036 \u1021\u102f\u1015\u103a\u1005\u102f",rowgroup:"\u1021\u1010\u1014\u103a\u1038 \u1021\u102f\u1015\u103a\u1005\u102f",scope:"Scope",tfoot:"\u1007\u101a\u102c\u1038 \u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001",tbody:"\u1007\u101a\u102c\u1038 \u1000\u102d\u102f\u101a\u103a\u1011\u100a\u103a",thead:"\u1007\u101a\u102c\u1038 \u1014\u1016\u1030\u1038\u1005\u100a\u103a\u1038","row_all":"\u1007\u101a\u102c\u1038\u1011\u1032\u1019\u103e \u1021\u1010\u1014\u103a\u1038\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","row_even":"\u1007\u101a\u102c\u1038\u1011\u1032\u1019\u103e \u1005\u1036\u102f \u1021\u1010\u1014\u103a\u1038\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","row_odd":"\u1007\u101a\u102c\u1038\u1011\u1032\u1019\u103e \u1019 \u1021\u1010\u1014\u103a\u1038\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","row_row":"\u101c\u1000\u103a\u101b\u103e\u102d \u1021\u1010\u1014\u103a\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","cell_all":"\u1007\u101a\u102c\u1038\u1011\u1032\u1019\u103e \u1021\u1000\u103d\u1000\u103a\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","cell_row":"\u1021\u1010\u1014\u103a\u1038\u1011\u1032\u1019\u103e \u1021\u1000\u103d\u1000\u103a\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b","cell_cell":"\u101c\u1000\u103a\u101b\u103e\u102d \u1021\u1000\u103d\u1000\u103a\u1000\u102d\u102f \u1021\u101e\u1005\u103a\u103c\u1016\u100a\u103a\u1037\u1005\u103d\u1000\u103a\u1015\u102b",th:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u102e\u1038\u1015\u102d\u102f\u1004\u103a\u1038",td:"\u1021\u1001\u103b\u1000\u103a\u1021\u101c\u1000\u103a",summary:"\u1021\u1014\u103e\u1005\u103a\u1001\u103b\u102f\u1015\u103a",bgimage:"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u101b\u102f\u1015\u103a\u1015\u1036\u102f",rtl:"\u100a\u102c\u1019\u103e \u1018\u101a\u103a",ltr:"\u1018\u101a\u103a\u1019\u103e \u100a\u102c",mime:"Target MIME type",langcode:"\u1018\u102c\u101e\u102c\u1005\u1000\u102c\u1038 \u1000\u102f\u1010\u103a",langdir:"\u1005\u102c\u1031\u101b\u1038\u101e\u102c\u1038\u1019\u103e\u102f \u1025\u102e\u1038\u1010\u100a\u103a\u1001\u103b\u1000\u103a",style:"\u1005\u1010\u102d\u102f\u1004\u103a",id:"ID","merge_cells_title":"\u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1031\u1015\u102b\u1004\u103a\u1038\u1015\u102b",bgcolor:"\u1031\u1014\u102c\u1000\u103a\u1001\u1036 \u1021\u1031\u101b\u102c\u1004\u103a",bordercolor:"\u1014\u101a\u103a\u1005\u100a\u103a\u1038 \u1021\u1031\u101b\u102c\u1004\u103a","align_bottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001","align_top":"\u1011\u102d\u1015\u103a",valign:"\u1031\u1012\u102b\u1004\u103a\u101c\u102d\u102f\u1000\u103a \u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f","cell_type":"\u1021\u1000\u103d\u1000\u103a \u1021\u1019\u103b\u102d\u102f\u1038\u1021\u1005\u102c\u1038","cell_title":"\u1007\u101a\u102c\u1038\u1000\u103d\u1000\u103a \u101d\u102d\u1031\u101e\u101e \u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","row_title":"\u1007\u101a\u102c\u1038 \u1021\u1010\u1014\u103a\u1038 \u101d\u102d\u1031\u101e\u101e \u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","align_middle":"\u1017\u101f\u102d\u102f","align_right":"\u100a\u102c","align_left":"\u1018\u101a\u103a","align_default":"\u1019\u1030\u101c",align:"\u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f",border:"\u1014\u101a\u103a\u1005\u1015\u103a\u1005\u100a\u103a\u1038",cellpadding:"\u1000\u103d\u1000\u103a\u1031\u1018\u1038\u1031\u1014\u101b\u102c\u101c\u103d\u1010\u103a",cellspacing:"\u1000\u103d\u1000\u103a\u103c\u1000\u102c\u1038\u101c\u1015\u103a",rows:"\u1021\u1010\u1014\u103a\u1038",cols:"\u1031\u1000\u102c\u103a\u101c\u1036",height:"\u1021\u103c\u1019\u1004\u103a\u1037",width:"\u1021\u1000\u103b\u101a\u103a",title:"\u1007\u101a\u102c\u1038 \u1011\u100a\u103a\u1037/\u103c\u1015\u102f\u103c\u1015\u1004\u103a",rowtype:"\u1021\u1010\u1014\u103a\u1038\u101b\u103e\u102d\u1019\u100a\u103a\u1037 \u1007\u101a\u102c\u1038 \u1021\u1015\u102d\u102f\u1004\u103a\u1038","advanced_props":"\u1021\u1011\u1030\u1038 \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","general_props":"\u1021\u1031\u1011\u103d\u1031\u1011\u103d \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","advanced_tab":"\u1021\u1011\u1030\u1038","general_tab":"\u1021\u1031\u1011\u103d\u1031\u1011\u103d","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nb_dlg.js
new file mode 100644
index 000000000..2fc6c4fb7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.table_dlg',{"rules_border":"ramme","rules_box":"boks","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsider","rules_below":"under","rules_above":"over","rules_void":"ingen",rules:"Streker","frame_all":"alle","frame_cols":"kolonner","frame_rows":"rader","frame_groups":"grupper","frame_none":"ingen",frame:"Ramme",caption:"Tabelloverskrift","missing_scope":"Er du sikker p\u00e5 at du vil fortsette uten \u00e5 angi et omr\u00e5de for denne overskrifscellen? Uten dette kan det bli vanskelig for enkelte funksjonshemmede brukere \u00e5 forst\u00e5 innholdet eller dataene som blir presentert i tabellen.","cell_limit":"Du har overskredet maksimalt antall celler p\u00e5 {$cells}.","row_limit":"Du har overskredet maksimalt antall rader p\u00e5 {$rows}.","col_limit":"Du har overskredet maksimalt antall kolonner p\u00e5 {$cols}.",colgroup:"Kolonnegruppe",rowgroup:"Radgruppe",scope:"Omr\u00e5de",tfoot:"Tabellfot",tbody:"Tabellkropp",thead:"Tabellhode","row_all":"Oppdater alle rader","row_even":"Oppdater partallsrader","row_odd":"Oppdater oddetallsrader","row_row":"Oppdater aktuell rad","cell_all":"Oppdater alle celler i tabellen","cell_row":"Oppdater alle celler i raden","cell_cell":"Oppdater aktuell celle",th:"Overskrift",td:"Data",summary:"Sammendrag",bgimage:"Bakgrunnsbilde",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",mime:"M\u00e5lets MIME-type",langcode:"Spr\u00e5kkode",langdir:"Skriftretning",style:"Stil",id:"Id","merge_cells_title":"Sl\u00e5 sammen celler",bgcolor:"Bakgrunn",bordercolor:"Rammefarge","align_bottom":"Bunn","align_top":"Topp",valign:"Vertikal justering","cell_type":"Celletype","cell_title":"Celleegenskaper","row_title":"Radegenskaper","align_middle":"Midtstilt","align_right":"H\u00f8yre","align_left":"Venstre","align_default":"Standard",align:"Justering",border:"Ramme",cellpadding:"Cellefylling",cellspacing:"Celleavstand",rows:"Rader",cols:"Kolonner",height:"H\u00f8yde",width:"Bredde",title:"Sett inn / rediger tabell",rowtype:"Rad i tabell","advanced_props":"Generelle egenskaper","general_props":"Generelt","advanced_tab":"Avansert","general_tab":"Generelt","cell_col":"Oppdater alle celler i kolonnen"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nl_dlg.js
new file mode 100644
index 000000000..ebc25e70e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.table_dlg',{"rules_border":"Rand","rules_box":"Box","rules_vsides":"Verticale zijden","rules_rhs":"Rechterzijkant","rules_lhs":"Linkerzijkant","rules_hsides":"Horizontale zijden","rules_below":"Onder","rules_above":"Boven","rules_void":"Geen",rules:"Hulplijnen","frame_all":"Alles","frame_cols":"Kolommen","frame_rows":"Rijen","frame_groups":"Groepen","frame_none":"Geen",frame:"Frame",caption:"Tabelbeschrijving","missing_scope":"Weet u zeker dat u door wilt gaan met het toewijzen van een kop zonder een bereik op te geven? Mensen met een visuele handicap kunnen hierdoor waarschijnlijk slecht bij de gegevens.","cell_limit":"U heeft het maximale aantal cellen van {$cells} overschreden.","row_limit":"U heeft hebt het maximale aantal rijen van {$rows} overschreden.","col_limit":"U heeft het maximale aantal kolommen van {$cols} overschreden.",colgroup:"Kolomgroep",rowgroup:"Rijgroep",scope:"Bereik",tfoot:"Tabelvoet",tbody:"Tabellichaam",thead:"Tabelkop","row_all":"Alle rijen bijwerken","row_even":"Even rijen bijwerken","row_odd":"Oneven rijen bijwerken","row_row":"Huidige rij bijwerken","cell_all":"Alle cellen in tabel bijwerken","cell_row":"Alle cellen in rij bijwerken","cell_cell":"Huidige cel bijwerken",th:"Kop",td:"Gegevens",summary:"Samenvatting",bgimage:"Achtergrondafbeelding",rtl:"Van rechts naar links",ltr:"Van links naar rechts",mime:"Doel MIME type",langcode:"Taalcode",langdir:"Taalrichting",style:"Stijl",id:"Id","merge_cells_title":"Cellen samenvoegen",bgcolor:"Achtergrondkleur",bordercolor:"Randkleur","align_bottom":"Onder","align_top":"Boven",valign:"Verticale uitlijning","cell_type":"Celtype","cell_title":"Celeigenschappen","row_title":"Rij-eigenschappen","align_middle":"Centreren","align_right":"Rechts","align_left":"Links","align_default":"Standaard",align:"Uitlijning",border:"Rand",cellpadding:"Ruimte in cel",cellspacing:"Ruimte om cel",rows:"Rijen",cols:"Kolommen",height:"Hoogte",width:"Breedte",title:"Tabel invoegen/bewerken",rowtype:"Rijtype","advanced_props":"Geavanceerde eigenschappen","general_props":"Algemene eigenschappen","advanced_tab":"Geavanceerd","general_tab":"Algemeen","cell_col":"Alle cellen in de kolom bijwerken"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nn_dlg.js
new file mode 100644
index 000000000..ac1ea85ca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.table_dlg',{"rules_border":"ramme","rules_box":"boks","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"under","rules_above":"over","rules_void":"ingen",rules:"Strekar","frame_all":"alle","frame_cols":"kolonnar","frame_rows":"rader","frame_groups":"grupper","frame_none":"ingen",frame:"Ramme",caption:"Tabelloverskrift","missing_scope":"Er du sikker p\u00e5 at du vil fortsetje utan \u00e5 angi eit omr\u00e5de for denne overskrifscella? Utan dette kan det bli vanskeleg for enkelte funksjonshemma brukarar \u00e5 forst\u00e5 innhaldet eller dataane som blir presenterte i tabellen.","cell_limit":"Du har fleire enn maksimalt tal celler p\u00e5 {$cells}.","row_limit":"Du har fleire enn maksimalt tal rader p\u00e5 {$rows}.","col_limit":"Du har fleire enn maksimalt tal kolonner p\u00e5 {$cols}.",colgroup:"Kolonnegruppe",rowgroup:"Radgruppe",scope:"Omr\u00e5de",tfoot:"Tabellfot",tbody:"Tabellkropp",thead:"Tabellhovud","row_all":"Oppdater alle rader","row_even":"Oppdater partallrader","row_odd":"Oppdater oddetallrader","row_row":"Oppdater aktuell rad","cell_all":"Oppdater alle celler i tabellen","cell_row":"Oppdater alle celler i rada","cell_cell":"Oppdater aktuell celle",th:"Overskrift",td:"Data",summary:"Samandrag",bgimage:"Bakgrunnsbilete",rtl:"H\u00f8gre mot venstre",ltr:"Venstre mot h\u00f8gre",mime:"M\u00e5let sin MIME-type",langcode:"Spr\u00e5kkode",langdir:"Skriftretning",style:"Stil",id:"Id","merge_cells_title":"Sl\u00e5 saman celler",bgcolor:"Bakgrunn",bordercolor:"Rammefarge","align_bottom":"Botn","align_top":"Topp",valign:"Vertikal justering","cell_type":"Celletype","cell_title":"Celleeigenskapar","row_title":"Radeigenskapar","align_middle":"Midtstilt","align_right":"H\u00f8gre","align_left":"Venstre","align_default":"Standard",align:"Justering",border:"Ramme",cellpadding:"Cellefylling",cellspacing:"Celleavstand",rows:"Rader",cols:"Kolonner",height:"H\u00f8gd",width:"Breidd",title:"Set inn / rediger tabell",rowtype:"Rad i tabell","advanced_props":"Generelle eigenskapar","general_props":"Generelt","advanced_tab":"Avansert","general_tab":"Generelt","cell_col":"Oppdater alle celler i kolonne"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/no_dlg.js
new file mode 100644
index 000000000..26d1da7aa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.table_dlg',{"rules_border":"ramme","rules_box":"boks","rules_vsides":"vside","rules_rhs":"hs","rules_lhs":"vs","rules_hsides":"hside","rules_below":"under","rules_above":"over","rules_void":"tom",rules:"Streker","frame_all":"alle","frame_cols":"kolonner","frame_rows":"rader","frame_groups":"grupper","frame_none":"ingen",frame:"Ramme",caption:"Tabell tittel","missing_scope":"Er du sikker du vil fortsette uten \u00e5 angi tittel for denne overskrifscellen? Uten denne kan det bli vanskelig for enkelte funksjonshemmede brukere \u00e5 forst\u00e5 innhold eller data som presenteres i tabellen.","cell_limit":"Du har overg\u00e5tt maksimalt antall tillatt celler p\u00e5 {$cells}.","row_limit":"Du har overg\u00e5tt maksimalt antall tillatte rader p\u00e5 {$rows}.","col_limit":"Du har overg\u00e5tt maksimalt antall tillatte kolonner p\u00e5 {$cols}.",colgroup:"Kolonne gruppe",rowgroup:"Rad gruppe",scope:"Tittel",tfoot:"Tabell foot",tbody:"Tabell body",thead:"Tabell head","row_all":"Oppdater alle rader","row_even":"Oppdater rader med partall","row_odd":"Oppdater rader med oddetall","row_row":"Oppdater aktuell rad","cell_all":"Oppdater alle celler i tabellen","cell_row":"Oppdater alle celler i raden","cell_cell":"Oppdater aktuell celle",th:"Overskrift",td:"Data",summary:"Sammendrag",bgimage:"Bakgrunnsbilde",rtl:"H\u00f8yre mot venstre",ltr:"Venstre mot h\u00f8yre",mime:"M\u00e5lets MIME-type",langcode:"Spr\u00e5k kode",langdir:"Skriftretning",style:"Stil",id:"Id","merge_cells_title":"Sl\u00e5 sammen celler",bgcolor:"Bakgrunnsfarge",bordercolor:"Rammefarge","align_bottom":"Bunn","align_top":"Topp",valign:"Vertikal justering","cell_type":"Celle type","cell_title":"Celle egenskaper","row_title":"Rad egenskaper","align_middle":"Midtstilt","align_right":"H\u00f8yre","align_left":"Venstre","align_default":"Standard",align:"Justering",border:"Ramme",cellpadding:"Cellefylling",cellspacing:"Celleavstand",rows:"Rader",cols:"Kolonner",height:"H\u00f8yde",width:"Bredde",title:"Sett inn/editer tabell",rowtype:"Rad i tabell","advanced_props":"Avanserte egenskaper","general_props":"Generelle egenskaper","advanced_tab":"Avansert","general_tab":"Generelt","cell_col":"Oppdater alle cellene i kolonnen"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/pl_dlg.js
new file mode 100644
index 000000000..8bbe7c83b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.table_dlg',{"rules_border":"granica","rules_box":"ramka","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"pod","rules_above":"nad","rules_void":"void",rules:"Prowadnice","frame_all":"wszystkie","frame_cols":"kolumny","frame_rows":"wiersze","frame_groups":"grupy","frame_none":"brak",frame:"Ramka",caption:"Nag\u0142\u00f3wek tabeli","missing_scope":"Jeste\u015b pewny \u017ce chcesz kontynuowa\u0107 bez definiowania zasi\u0119gu dla kom\u00f3rki tabeli. Bez niej, mo\u017ce by\u0107 trudne dla niekt\u00f3rych u\u017cytkownik\u00f3w zrozuminie zawarto\u015bci albo danych wy\u015bwietlanych poza tabel\u0105.","cell_limit":"Przekroczy\u0142e\u015b maksymaln\u0105 liczb\u0119 kom\u00f3rek kt\u00f3ra wynosi {$cells}.","row_limit":"Przekroczy\u0142e\u015b maksymaln\u0105 liczb\u0119 wierszy kt\u00f3ra wynosi {$rows}.","col_limit":"Przekroczy\u0142e\u015b maksymaln\u0105 liczb\u0119 kolumn kt\u00f3ra wynosi {$cols}.",colgroup:"Grupa kolumn",rowgroup:"Grupa wierszy",scope:"Zakres",tfoot:"Stopka tabeli",tbody:"Cia\u0142o tabeli",thead:"Nag\u0142\u00f3wek tabeli","row_all":"Zmie\u0144 wszystkie wiersze","row_even":"Zmie\u0144 parzyste wiersze","row_odd":"Zmie\u0144 nieparzyste wiersze","row_row":"Zmie\u0144 aktualny wiersz","cell_all":"Zmie\u0144 wszytkie kom\u00f3rki w tabeli","cell_row":"Zmie\u0144 wszytkie kom\u00f3rki w wierszu","cell_cell":"Zmie\u0144 aktualn\u0105 kom\u00f3rk\u0119",th:"Nag\u0142owek",td:"Dane",summary:"Podsumowanie",bgimage:"Obrazek t\u0142a",rtl:"Kierunek z prawej do lewej",ltr:"Kierunek z lewej do prawej",mime:"Docelowy typ MIME",langcode:"Kod j\u0119zyka",langdir:"Kierunek czytania tekstu",style:"Styl",id:"Id","merge_cells_title":"Po\u0142\u0105cz kom\u00f3rki",bgcolor:"Kolor t\u0142a",bordercolor:"Kolor ramki","align_bottom":"D\u00f3\u0142","align_top":"G\u00f3ra",valign:"Pionowe wyr\u00f3wnanie","cell_type":"Typ kom\u00f3rki","cell_title":"W\u0142a\u015bciwo\u015bci kom\u00f3rki","row_title":"W\u0142a\u015bciwo\u015bci wiersza","align_middle":"\u015arodek","align_right":"Prawy","align_left":"Lewy","align_default":"Domy\u015blnie",align:"Wyr\u00f3wnanie",border:"Ramka",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Wiersze",cols:"Kolumny",height:"Wysoko\u015b\u0107",width:"Szeroko\u015b\u0107",title:"Wklej/Zmie\u0144 tabel\u0119",rowtype:"Wiersz w cz\u0119\u015bci tabeli","advanced_props":"Zaawansowane w\u0142a\u015bciwo\u015bci","general_props":"G\u0142\u00f3wne w\u0142a\u015bciwo\u015bci","advanced_tab":"Zaawansowane","general_tab":"G\u0142\u00f3wne","cell_col":"Zaktualizuj wszystkie kom\u00f3rki w kolumnie"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ps_dlg.js
new file mode 100644
index 000000000..b34a45a57
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/pt_dlg.js
new file mode 100644
index 000000000..fb54400da
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.table_dlg',{"rules_border":"Limites","rules_box":"Box","rules_vsides":"Vsides","rules_rhs":"Rhs","rules_lhs":"Lhs","rules_hsides":"Hsides","rules_below":"abaixo","rules_above":"acima","rules_void":"void",rules:"Regras","frame_all":"Todos","frame_cols":"colunas","frame_rows":"Linhas","frame_groups":"Grupos","frame_none":"Nenhum",frame:"Frame",caption:"T\u00edtulo da tabela","missing_scope":"Tem certeza de que quer continuar sem especificar um escopo para esta c\u00e9lula? (Isso poder\u00e1 causar dificuldades a usu\u00e1rios deficientes)","cell_limit":"Excedeu o n\u00famero m\u00e1ximo de c\u00e9lulas de {$cells}.","row_limit":"Excedeu o n\u00famero m\u00e1ximo de linhas de {$rows}.","col_limit":"Excedeu o n\u00famero m\u00e1ximo de colunas de {$cols}.",colgroup:"Grupo colunas",rowgroup:"Grupo linhas",scope:"Alcance",tfoot:"Rodap\u00e9 da tabela",tbody:"Corpo da tabela",thead:"Topo da tabela","row_all":"Atualizar todas as linhas","row_even":"Atualizar linhas pares","row_odd":"Atualizar linhas \u00edmpares","row_row":"Atualizar esta linha","cell_all":"Atualizar todas as c\u00e9lulas na tabela","cell_row":"Atualizar todas as c\u00e9lulas na linha","cell_cell":"Atualizar esta c\u00e9lula",th:"Campo",td:"Dados",summary:"Sum\u00e1rio",bgimage:"Imagem de fundo",rtl:"Da direita para a esquerda",ltr:"Da esquerda para a direita",mime:"MIME alvo",langcode:"C\u00f3digo do idioma",langdir:"Dire\u00e7\u00e3o do texto",style:"Estilo",id:"Id","merge_cells_title":"Unir c\u00e9lulas",bgcolor:"Cor de fundo",bordercolor:"Cor dos limites","align_bottom":"Abaixo","align_top":"Topo",valign:"Alinha. vert.","cell_type":"Tipo c\u00e9l.","cell_title":"Propriedades de c\u00e9lulas","row_title":"Propriedades de linhas","align_middle":"Centro","align_right":"Direita","align_left":"Esquerda","align_default":"Padr\u00e3o",align:"Alinha.",border:"Limites",cellpadding:"Enchimento da C\u00e9lula",cellspacing:"Espa\u00e7amento da C\u00e9lula",rows:"Linhas",cols:"Colunas",height:"Altura",width:"Largura",title:"Inserir/modificar tabela",rowtype:"Linha na parte da tabela","advanced_props":"Propriedades avan\u00e7adas","general_props":"Propriedades gerais","advanced_tab":"Avan\u00e7ado","general_tab":"Geral","cell_col":"Atualizar todas as c\u00e9lulas na coluna"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ro_dlg.js
new file mode 100644
index 000000000..c1974ed00
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"dedesubt","rules_above":"deasupra","rules_void":"gol",rules:"Reguli","frame_all":"toate","frame_cols":"coloane","frame_rows":"r\u00e2nduri","frame_groups":"grupuri","frame_none":"niciuna",frame:"Frame",caption:"Titlu tabel","missing_scope":"Sigur vrei s\u0103 continui f\u0103r\u0103 s\u0103 completezi scopul acestei celule antet? F\u0103r\u0103 acesta, anumi\u021bi utilizatori cu dizabilit\u0103\u021bi ar putea avea dificult\u0103\u021bi \u00een \u00een\u021belegerea datelor afi\u0219ate \u00een tabel.","cell_limit":"Ai dep\u0103\u0219it num\u0103rul maxim de celule: {$cells}.","row_limit":"Ai dep\u0103\u0219it num\u0103rul maxim de r\u00e2nduri: {$rows}.","col_limit":"Ai dep\u0103\u0219it num\u0103rul maxim de coloane: {$cols}.",colgroup:"Grupeaz\u0103 celulele",rowgroup:"Grupeaz\u0103 r\u00e2ndurile",scope:"Scop",tfoot:"Subsol tabel",tbody:"Corp tabel",thead:"Antet tabel","row_all":"Actualizeaz\u0103 toate r\u00e2ndurile","row_even":"Actualizeaz\u0103 r\u00e2ndurile pare","row_odd":"Actualizeaz\u0103 r\u00e2ndurile impare","row_row":"Actualizeaz\u0103 r\u00e2nd curent","cell_all":"Actualizeaz\u0103 toate celulele din tabel","cell_row":"Actualizeaz\u0103 toate celulele din r\u00e2nd","cell_cell":"Actualizeaz\u0103 celula curent\u0103",th:"Antet",td:"Date",summary:"Sumar",bgimage:"Imagine de fundal",rtl:"De la dreapta la st\u00e2nga",ltr:"De la st\u00e2nga la dreapta",mime:"MIME type \u021bint\u0103",langcode:"Cod limb\u0103",langdir:"Direc\u021bie limb\u0103",style:"Stil",id:"Id","merge_cells_title":"Une\u015fte celulele",bgcolor:"Culoare fundal",bordercolor:"Culoare bordur\u0103","align_bottom":"Jos","align_top":"Sus",valign:"Aliniere vertical\u0103","cell_type":"Tip celul\u0103","cell_title":"Propriet\u0103\u021bi celul\u0103","row_title":"Propriet\u0103\u021bi r\u00e2nd","align_middle":"Centru","align_right":"Dreapta","align_left":"St\u00e2nga","align_default":"Implicit\u0103",align:"Aliniere",border:"Bordur\u0103",cellpadding:"Spa\u021biu \u00een celule",cellspacing:"Spa\u021biu \u00eentre celule",rows:"R\u00e2nduri",cols:"Coloane",height:"\u00cen\u0103l\u021bime",width:"L\u0103\u021bime",title:"Inserare/editare tabel",rowtype:"Tip de r\u00e2nd","advanced_props":"Propriet\u0103\u021bi avansate","general_props":"Propriet\u0103\u021bi generale","advanced_tab":"Avansat","general_tab":"General","cell_col":"Actualizeaz\u0103 toate celulele din coloan\u0103"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ru_dlg.js
new file mode 100644
index 000000000..3bd88153f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"\u041f\u0440\u0430\u0432\u0438\u043b\u0430","frame_all":"\u0432\u0441\u0435","frame_cols":"\u043a\u043e\u043b\u043e\u043d\u043a\u0438","frame_rows":"\u0440\u044f\u0434\u044b","frame_groups":"\u0433\u0440\u0443\u043f\u043f\u044b","frame_none":"\u043d\u0435\u0442",frame:"\u041a\u0430\u0434\u0440",caption:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b","missing_scope":"\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0431\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0437\u0430\u0433\u043b\u043e\u043b\u0432\u043a\u0430? \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c.","cell_limit":"\u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0432\u0439 \u043f\u0440\u0435\u0434\u0435\u043b, \u0432 $ \u044f\u0447\u0435\u0435\u043a.","row_limit":"\u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0432\u0439 \u043f\u0440\u0435\u0434\u0435\u043b, \u0432 $ \u0441\u0442\u0440\u043e\u043a.","col_limit":"\u0414\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0432\u0439 \u043f\u0440\u0435\u0434\u0435\u043b, \u0432 $ \u043a\u043e\u043b\u043e\u043d\u043e\u043a.",colgroup:"\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432",rowgroup:"\u0413\u0440\u0443\u043f\u043f\u0430 \u0441\u0442\u0440\u043e\u043a",scope:"\u041e\u0431\u043b\u0430\u0441\u0442\u044c",tfoot:"\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435",tbody:"\u0422\u0435\u043b\u043e",thead:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","row_all":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_even":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0447\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_odd":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0435\u0447\u0435\u0442\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","row_row":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443","cell_all":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435","cell_row":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435","cell_cell":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443",th:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",td:"\u0414\u0430\u043d\u043d\u044b\u0435",summary:"\u041e\u0431\u0449\u0435\u0435",bgimage:"\u0424\u043e\u043d\u043e\u0432\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e",ltr:"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",mime:"MIME \u0442\u0438\u043f \u0446\u0435\u043b\u0438",langcode:"\u041a\u043e\u0434 \u044f\u0437\u044b\u043a\u0430",langdir:"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0418\u043c\u044f","merge_cells_title":"\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438",bgcolor:"\u0426\u0432\u0435\u0442 \u0437\u0430\u043b\u0438\u0432\u043a\u0438",bordercolor:"\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u044b","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",valign:"\u0412\u0435\u0440\u0442. \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","cell_type":"\u0422\u0438\u043f","cell_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u0447\u0435\u0439\u043a\u0438","row_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0440\u043e\u043a\u0438","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_default":"\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e",align:"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435",border:"\u0413\u0440\u0430\u043d\u0438\u0446\u0430",cellpadding:"\u041e\u0442\u0441\u0442\u0443\u043f\u044b \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445",cellspacing:"\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438",rows:"\u0421\u0442\u0440\u043e\u043a\u0438",cols:"\u0421\u0442\u043e\u043b\u0431\u0446\u044b",height:"\u0412\u044b\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b",rowtype:"\u0422\u0438\u043f \u0441\u0442\u0440\u043e\u043a\u0438","advanced_props":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","general_props":"\u041e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","advanced_tab":"\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e","general_tab":"\u041e\u0431\u0449\u0435\u0435","cell_col":"\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sc_dlg.js
new file mode 100644
index 000000000..930c052bb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.table_dlg',{"rules_border":"\u5916\u6846","rules_box":"\u76d2\u578b","rules_vsides":"\u5782\u76f4\u8fb9","rules_rhs":"\u53f3\u8fb9","rules_lhs":"\u5de6\u8fb9","rules_hsides":"\u6c34\u51c6\u8fb9","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u7ebf\u6761","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u7fa4\u7ec4","frame_none":"\u65e0",frame:"\u8fb9\u6846",caption:"\u8868\u683c\u6807\u9898","missing_scope":"\u6807\u9898\u884c\u7f3a\u5931\uff01 ","cell_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u5355\u683c\u6570\u4e3a{$cells}\u683c\u3002 ","row_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u884c\u6570\u4e3a{$rows}\u884c\u3002 ","col_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u5217\u6570\u4e3a{$cols}\u5217\u3002 ",colgroup:"\u5217\u7fa4\u7ec4",rowgroup:"\u884c\u7fa4\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u5c3e",tbody:"\u8868\u8eab",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u5185\u5168\u90e8\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u6240\u5728\u884c","cell_all":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5168\u90e8\u5355\u683c","cell_row":"\u66f4\u65b0\u6240\u5728\u884c\u7684\u5168\u90e8\u5355\u683c","cell_cell":"\u66f4\u65b0\u6240\u7684\u5355\u683c",th:"\u8868\u5934",td:"\u6570\u636e",summary:"\u6982\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",mime:"\u76ee\u6807MIME\u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"Id","merge_cells_title":"\u5408\u5e76\u5355\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u4e0b\u65b9","align_top":"\u4e0a\u65b9",valign:"\u6c34\u51c6\u5bf9\u9f50\u65b9\u5f0f","cell_type":"\u5355\u683c\u522b","cell_title":"\u5355\u683c\u5c5e\u6027","row_title":"\u884c\u5c5e\u6027","align_middle":"\u5c45\u4e2d","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_default":"\u9884\u8bbe",align:"\u5bf9\u9f50\u65b9\u5f0f",border:"\u8fb9\u6846",cellpadding:"\u5355\u683c\u7559\u767d",cellspacing:"\u5355\u683c\u95f4\u8ddd",rows:"\u884c\u6570",cols:"\u5217\u6570",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u7f16\u8f91\u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u4e00\u822c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/se_dlg.js
new file mode 100644
index 000000000..258c6d5cc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Regler","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Ram",caption:"\u00d6verskrift","missing_scope":"\u00c4r du s\u00e4ker p\u00e5 att du vill forts\u00e4tta utan att ange en omfattning, denna underl\u00e4ttar f\u00f6r icke-grafiska webbl\u00e4sare.","cell_limit":"Du kan inte skapa en tabell med fler \u00e4n {$cells} celler.","row_limit":"Du kan inte ange fler \u00e4n {$rows} rader.","col_limit":"Du kan inte ange fler \u00e4n {$cols} kolumner.",colgroup:"Kolumngrupp",rowgroup:"Radgrupp",scope:"Omfattning",tfoot:"tabellfot",tbody:"tabellkropp",thead:"tabellhuvud","row_all":"Uppdatera alla rader i tabellen","row_even":"Uppdatera j\u00e4mna rader i tabellen","row_odd":"Uppdatera udda rader i tabellen","row_row":"Uppdatera nuvarande rad","cell_all":"Uppdatera alla celler i tabellen","cell_row":"Uppdatera alla celler i raden","cell_cell":"Uppdatera nuvarande cell",th:"Huvud",td:"Data",summary:"Sammanfattning",bgimage:"Bakgrundsbild",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning",style:"Stil",id:"Id","merge_cells_title":"Sammanfoga celler",bgcolor:"Bakgrundsf\u00e4rg",bordercolor:"Ramf\u00e4rg","align_bottom":"Botten","align_top":"Toppen",valign:"Vertikal justering","cell_type":"Celltyp","cell_title":"Tabellcellsinst\u00e4llningar","row_title":"Tabellradsinst\u00e4llningar","align_middle":"Mitten","align_right":"H\u00f6ger","align_left":"V\u00e4nster","align_default":"Ingen",align:"Justering",border:"Ram",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rader",cols:"Kolumner",height:"H\u00f6jd",width:"Bredd",title:"Infoga/redigera ny tabell",rowtype:"Radtyp","advanced_props":"Avancerade inst\u00e4llningar","general_props":"Generella inst\u00e4llningar","advanced_tab":"Avancerat","general_tab":"Generellt",mime:"Target MIME Type","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/si_dlg.js
new file mode 100644
index 000000000..5dcb178f5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sk_dlg.js
new file mode 100644
index 000000000..817f0e00c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.table_dlg',{"rules_border":"or\u00e1movanie okolo","rules_box":"box okolo","rules_vsides":"v\u013eavo a vpravo","rules_rhs":"vpravo","rules_lhs":"v\u013eavo","rules_hsides":"hore a dole","rules_below":"dole","rules_above":"hore","rules_void":"\u017eiadne",rules:"Vykreslenie mrie\u017eky","frame_all":"v\u0161etko","frame_cols":"st\u013apce","frame_rows":"riadky","frame_groups":"oblasti a skupiny st\u013apcov","frame_none":"\u017eiadna",frame:"Or\u00e1movanie tabu\u013eky",caption:"Nadpis tabu\u013eky","missing_scope":"Skuto\u010dne chcete pokra\u010dova\u0165 bez ur\u010denia oblasti hlavi\u010dky tejto tabu\u013eky? Bez nej m\u00f4\u017ee u niektor\u00fdch u\u017e\u00edvate\u013eov doch\u00e1dza\u0165 k ur\u010dit\u00fdm probl\u00e9mom pri inrtepret\u00e1cii a zobrazovan\u00ed d\u00e1t v tabu\u013eke.","cell_limit":"Prekro\u010dili ste maxim\u00e1lny po\u010det buniek {$cells}.","row_limit":"Prekro\u010dili ste maxim\u00e1lny po\u010det riadkov {$rows}.","col_limit":"Prekro\u010dili ste maxim\u00e1lny po\u010det st\u013apcov {$cols}.",colgroup:"Skupina st\u013apcov",rowgroup:"Skupina riadkov",scope:"Hlavi\u010dka pre",tfoot:"P\u00e4ta tabu\u013eky",tbody:"Telo tabu\u013eky",thead:"Hlavi\u010dka tabu\u013eky","row_all":"Aktualizova\u0165 v\u0161etky riadky tabu\u013eky","row_even":"Aktualizova\u0165 p\u00e1rne riadky tabu\u013eky","row_odd":"Aktualizova\u0165 nep\u00e1rne riadky tabu\u013eky","row_row":"Aktualizova\u0165 aktu\u00e1lny riadok","cell_all":"Aktualizova\u0165 v\u0161etky bunky v tabu\u013eke","cell_row":"Aktualizova\u0165 v\u0161etky bunky v riadku","cell_cell":"Aktualizova\u0165 aktu\u00e1lnu bunku",th:"Hlavi\u010dka",td:"D\u00e1ta",summary:"Obsah tabu\u013eky",bgimage:"Obr\u00e1zok pozadia",rtl:"Sprava do\u013eava",ltr:"Z\u013eava doprava",mime:"MIME typ cie\u013ea",langcode:"K\u00f3d jazyka",langdir:"Smer textu",style:"\u0160t\u00fdl",id:"ID","merge_cells_title":"Zl\u00fa\u010di\u0165 bunky",bgcolor:"Farba pozadia",bordercolor:"Farba or\u00e1movania","align_bottom":"Dolu","align_top":"Hore",valign:"Vertik\u00e1lne zarovnanie","cell_type":"Typ bunky","cell_title":"Vlastnosti bunky","row_title":"Vlastnosti riadkov","align_middle":"Na stred","align_right":"Vpravo","align_left":"V\u013eavo","align_default":"Predvolen\u00e9",align:"Zarovnanie",border:"Or\u00e1movanie",cellpadding:"Odsadenie obsahu",cellspacing:"Rozstup buniek",rows:"Riadky",cols:"St\u013apce",height:"V\u00fd\u0161ka",width:"\u0160\u00edrka",title:"Vlo\u017ei\u0165/Upravi\u0165 tabu\u013eku",rowtype:"Typ riadku","advanced_props":"Roz\u0161\u00edren\u00e9 parametre","general_props":"Obecn\u00e9 parametre","advanced_tab":"Roz\u0161\u00edren\u00e9","general_tab":"Obecn\u00e9","cell_col":"Aktualizova\u0165 v\u0161etky bunky v st\u013apci"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sl_dlg.js
new file mode 100644
index 000000000..52e1efe7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.table_dlg',{"rules_border":"obroba","rules_box":"\u0161katla","rules_vsides":"n-strani","rules_rhs":"d-strani","rules_lhs":"l-strani","rules_hsides":"v-strani","rules_below":"pod","rules_above":"nad","rules_void":"prazno",rules:"Pravila","frame_all":"vse","frame_cols":"stolpci","frame_rows":"vrstice","frame_groups":"skupine","frame_none":"brez",frame:"Okvir",caption:"Opis tabele","missing_scope":"Ste prepri\u010dani, da \u017eelite nadaljevati brez dolo\u010denega dosega? Brez dosega je razumevanje tabele lahko ote\u017eeno ljudem s slab\u0161o zaznavo!","cell_limit":"Presegli ste dovoljeno \u0161tevilo celic: {$cells}.","row_limit":"Presegli ste dovoljeno \u0161tevilo vrstic: {$rows}.","col_limit":"Presegli ste dovoljeno \u0161tevilo stolpcev: {$cols}.",colgroup:"Skup. stolp.",rowgroup:"Skup. vrst.",scope:"Doseg",tfoot:"Noga tabele",tbody:"Telo tabele",thead:"Glava tabele","row_all":"Posodobi vse vrstice","row_even":"Posodobi sode vrstice","row_odd":"Posodobi lihe vrstice","row_row":"Posodobi trenutno vrstico","cell_all":"Posodobi vse celice tabele","cell_row":"Posodobi vse celice vrstice","cell_cell":"Posodobi trenutno celico",th:"Glava",td:"Podatek",summary:"Povzetek",bgimage:"Slika ozadja",rtl:"Od desne proti levi",ltr:"Od leve proti desni",mime:"Ciljni tip MIME",langcode:"Koda jezika",langdir:"Smer pisave",style:"Slog",id:"Oznaka","merge_cells_title":"Spoji celice",bgcolor:"Barva ozadja",bordercolor:"Barva obrobe","align_bottom":"Dno","align_top":"Vrh",valign:"Navpi\u010dna poravnava","cell_type":"Tip celice","cell_title":"Lastnosti celice","row_title":"Lastnosti vrstice","align_middle":"Sredina","align_right":"Desno","align_left":"Levo","align_default":"Privzeto",align:"Poravnava",border:"Obroba",cellpadding:"Podlaganje celic",cellspacing:"Razmik celic",rows:"Vrstic",cols:"Stolpcev",height:"Vi\u0161ina",width:"\u0160irina",title:"Vstavi/posodobi tabelo",rowtype:"Vrstica v tabeli","advanced_props":"Napredne lastnosti","general_props":"Splo\u0161ne lastnosti","advanced_tab":"Napredno","general_tab":"Splo\u0161no","cell_col":"Posodobi vse celice v stolpcu"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sq_dlg.js
new file mode 100644
index 000000000..c9bd5a8e1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.table_dlg',{"rules_border":"korniz\u00eb","rules_box":"kuti","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"posht\u00eb","rules_above":"sip\u00ebr","rules_void":"zbrazur",rules:"Rregullat","frame_all":"t\u00eb gjitha","frame_cols":"kolona","frame_rows":"rreshta","frame_groups":"grupe","frame_none":"asnj\u00eb",frame:"Korniza",caption:"Krijo hap\u00ebsir\u00eb p\u00ebr titull","missing_scope":"Jeni t\u00eb sigurt q\u00eb nuk doni t\u00eb vendosni objektiv p\u00ebr k\u00ebt\u00eb qeliz\u00eb t\u00eb kok\u00ebs. Pa t\u00eb mund t\u00eb jet\u00eb e v\u00ebshtir\u00eb p\u00ebr disa p\u00ebrdorues me aft\u00ebsi t\u00eb kufizuara t\u00eb lexojn\u00eb p\u00ebrmbajtjen e tabel\u00ebs.","cell_limit":"Keni kaluar numrin maksimal t\u00eb qelizave {$cells}.","row_limit":"Keni kaluar numrin maksimal t\u00eb rreshtave: {$rows}.","col_limit":"Keni kaluar numrin maksimal t\u00eb kolonave: {$cols}.",colgroup:"Grup Kolonash",rowgroup:"Grup Rreshtash",scope:"Objektivi",tfoot:"K\u00ebmb\u00ebt e Tabel\u00ebs",tbody:"Trupin e Tabel\u00ebs",thead:"Kok\u00ebn e Tabel\u00ebs","row_all":"Rifresko t\u00eb gjitha rreshtat n\u00eb tabel\u00eb","row_even":"Rifresko rreshtat \u00e7ift","row_odd":"Rifresko rreshtat tek","row_row":"Rifresko rreshtin aktual","cell_all":"Rifresko t\u00eb gjitha qelizat","cell_row":"Rifresko t\u00eb gjitha qelizat n\u00eb rresht","cell_cell":"Rifresko qeliz\u00ebn aktuale",th:"Kok\u00eb",td:"T\u00eb dh\u00ebna",summary:"P\u00ebrmbledhja",bgimage:"Foto e fush\u00ebs",rtl:"Djathtas-Majtas",ltr:"Majtas-Djathtas",mime:"Tipi MIME i sh\u00ebnjestr\u00ebs",langcode:"Kodi i gjuh\u00ebs",langdir:"Drejtimi i gjuh\u00ebs",style:"Stili",id:"Id","merge_cells_title":"Bashko qelizat",bgcolor:"Ngjyra e fush\u00ebs",bordercolor:"Ngjyra e korniz\u00ebs","align_bottom":"Fund","align_top":"Krye",valign:"Drejtimi vertikal","cell_type":"Tipi i qeliz\u00ebs","cell_title":"Tiparet e qeliz\u00ebs","row_title":"Tiparet e rreshtit","align_middle":"Qend\u00ebr","align_right":"Djathtas","align_left":"Majtas","align_default":"Paracaktuar",align:"Drejtimi",border:"Korniza",cellpadding:"Hap\u00ebsira e br\u00ebndshme",cellspacing:"Hap\u00ebsira midis qelizave",rows:"Rreshta",cols:"Kolona",height:"Gjat\u00ebsia",width:"Gjer\u00ebsia",title:"Fut/Edito tabel\u00eb",rowtype:"Rresht n\u00eb","advanced_props":"Tipare t\u00eb avancuara","general_props":"Tipare t\u00eb p\u00ebrgjithshme","advanced_tab":"T\u00eb avancuara","general_tab":"T\u00eb p\u00ebrgjithshme","cell_col":"P\u00ebrdit\u00ebsoni t\u00eb gjitha qelizat n\u00eb kolon\u00eb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sr_dlg.js
new file mode 100644
index 000000000..1ef0d8d15
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.table_dlg',{"rules_border":"sa svih strana (border)","rules_box":"sa svih strana (box)","rules_vsides":"levo i desno","rules_rhs":"samo desno","rules_lhs":"samo levo","rules_hsides":"gore i dole","rules_below":"samo dole","rules_above":"samo gore","rules_void":"ni sa jedne strane",rules:"Unutra\u0161nje linije","frame_all":"sve","frame_cols":"izme\u0111u kolona","frame_rows":"izme\u0111u redova","frame_groups":"izme\u0111u grupa","frame_none":"ni jedna",frame:"Linije okvira",caption:"Opis tabele","missing_scope":"Da li ste sigurni da \u017eelite da nastavite bez definisanog podru\u010dja delovanja \u0107elije zaglavlja tabele. Bez toga, korisnicima sa smetnjama u razvoju mo\u017eda ne\u0107e biti razumljiv njihov sadr\u017eaj.","cell_limit":"Prema\u0161ili ste maksimalni broj \u0107elija ({$cells}).","row_limit":"Prema\u0161ili ste maksimalni broj redova ({$rows}).","col_limit":"Prema\u0161ili ste maksimalni broj kolona ({$cols}).",colgroup:"Grupa kolona",rowgroup:"Grupa redova",scope:"Podru\u010dje delovanja",tfoot:"Podno\u017eje tabele",tbody:"Sadr\u017eaj tabele",thead:"Zaglavlje tabele","row_all":"A\u017euriraj sve redove u tabeli","row_even":"A\u017euriraj parne redove u tabeli","row_odd":"A\u017euriraj neparne redove u tabeli","row_row":"A\u017euriraj teku\u0107i red","cell_all":"A\u017euriraj sve \u0107elije u tabeli","cell_row":"A\u017euriraj sve \u0107elije u redu","cell_cell":"A\u017euriraj teku\u0107u \u0107eliju",th:"Zaglavlje",td:"Podaci",summary:"Sa\u017eeti opis",bgimage:"Slika u pozadini",rtl:"Zdesna nalevo",ltr:"Sleva nadesno",mime:"Odabrani MIME tip",langcode:"Kod jezika",langdir:"Smer jezika",style:"Stil",id:"Id","merge_cells_title":"Spoj \u0107elije",bgcolor:"Boja pozadine",bordercolor:"Boja ivica","align_bottom":"Dole","align_top":"Gore",valign:"Vertikalno poravnanje","cell_type":"Vrsta \u0107elije","cell_title":"Osobine \u0107elije","row_title":"Osobine reda","align_middle":"Sredina","align_right":"Desno","align_left":"Levo","align_default":"Podrazumevano",align:"Poravnanje",border:"Ivice (debljina)",cellpadding:"Dopuna \u0107elije (cellpadding)",cellspacing:"Razmak \u0107elija (cellspacing)",rows:"Broj redova",cols:"Broj kolona",height:"Visina",width:"\u0160irina",title:"Umetni/Uredi tabelu",rowtype:"Red je u delu tabele","advanced_props":"Napredne osobine","general_props":"Osnovne osobine","advanced_tab":"Napredno","general_tab":"Osnovno","cell_col":"A\u017euriraj sve \u0107elije u kolonama"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sv_dlg.js
new file mode 100644
index 000000000..d058bcb85
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.table_dlg',{"rules_border":"kant","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"under","rules_above":"\u00f6ver","rules_void":"void",rules:"Regler","frame_all":"alla","frame_cols":"kolumner ","frame_rows":"rader","frame_groups":"grupper","frame_none":"ingen",frame:"Ram",caption:"\u00d6verskrift","missing_scope":"\u00c4r du s\u00e4ker p\u00e5 att du vill forts\u00e4tta utan att ange en omfattning, denna underl\u00e4ttar f\u00f6r icke-grafiska webbl\u00e4sare.","cell_limit":"Du kan inte skapa en tabell med fler \u00e4n {$cells} celler.","row_limit":"Du kan inte ange fler \u00e4n {$rows} rader.","col_limit":"Du kan inte ange fler \u00e4n {$cols} kolumner.",colgroup:"Kolumngrupp",rowgroup:"Radgrupp",scope:"Omfattning",tfoot:"tabellfot",tbody:"tabellkropp",thead:"tabellhuvud","row_all":"Uppdatera alla rader i tabellen","row_even":"Uppdatera j\u00e4mna rader i tabellen","row_odd":"Uppdatera udda rader i tabellen","row_row":"Uppdatera nuvarande rad","cell_all":"Uppdatera alla celler i tabellen","cell_row":"Uppdatera alla celler i raden","cell_cell":"Uppdatera nuvarande cell",th:"Huvud",td:"Data",summary:"Sammanfattning",bgimage:"Bakgrundsbild",rtl:"H\u00f6ger till v\u00e4nster",ltr:"V\u00e4nster till h\u00f6ger",mime:"Target MIME type",langcode:"Spr\u00e5kkod",langdir:"Skriftriktning",style:"Stil",id:"Id","merge_cells_title":"Sammanfoga celler",bgcolor:"Bakgrundsf\u00e4rg",bordercolor:"Ramf\u00e4rg","align_bottom":"Botten","align_top":"Toppen",valign:"Vertikal justering","cell_type":"Celltyp","cell_title":"Tabellcellsinst\u00e4llningar","row_title":"Tabellradsinst\u00e4llningar","align_middle":"Mitten","align_right":"H\u00f6ger","align_left":"V\u00e4nster","align_default":"Standard",align:"Justering",border:"Ram",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rader",cols:"Kolumner",height:"H\u00f6jd",width:"Bredd",title:"Infoga/redigera ny tabell",rowtype:"Radtyp","advanced_props":"Avancerade inst\u00e4llningar","general_props":"Generella inst\u00e4llningar","advanced_tab":"Avancerat","general_tab":"Generellt","cell_col":"Uppdatera alla celler i kolumn"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sy_dlg.js
new file mode 100644
index 000000000..16ed93a8a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table Caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Footer",tbody:"Body",thead:"Header","row_all":"Update All Rows in Table","row_even":"Update Even Rows in Table","row_odd":"Update Odd Rows in Table","row_row":"Update Current Row","cell_all":"Update All Cells in Table","cell_row":"Update All Cells in Row","cell_cell":"Update Current Cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background Image",rtl:"Right to Left",ltr:"Left to Right",mime:"Target MIME Type",langcode:"Language Code",langdir:"Language Direction",style:"Style",id:"ID","merge_cells_title":"Merge Table Cells",bgcolor:"Background Color",bordercolor:"Border Color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical Alignment","cell_type":"Cell Type","cell_title":"Table Cell Properties","row_title":"Table Row Properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cell Padding",cellspacing:"Cell Spacing",rows:"Rows",cols:"Columns",height:"Height",width:"Width",title:"Insert/Edit Table",rowtype:"Row Type","advanced_props":"Advanced Properties","general_props":"General Properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ta_dlg.js
new file mode 100644
index 000000000..5917ec35c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/te_dlg.js
new file mode 100644
index 000000000..55f99afed
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/th_dlg.js
new file mode 100644
index 000000000..e16138049
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07 image",rtl:"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22",ltr:"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32",mime:"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22 MIME type",langcode:"\u0e42\u0e04\u0e4a\u0e14\u0e20\u0e32\u0e29\u0e32",langdir:"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e01\u0e32\u0e23\u0e2d\u0e48\u0e32\u0e19",style:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"\u0e2a\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07",bordercolor:"\u0e2a\u0e35\u0e01\u0e23\u0e2d\u0e1a","align_bottom":"\u0e25\u0e48\u0e32\u0e07","align_top":"\u0e1a\u0e19",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e40\u0e0b\u0e25\u0e25\u0e4c\u0e43\u0e19\u0e32\u0e23\u0e32\u0e07","row_title":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e41\u0e16\u0e27\u0e43\u0e19\u0e15\u0e32\u0e23\u0e32\u0e07","align_middle":"\u0e01\u0e25\u0e32\u0e07","align_right":"\u0e02\u0e27\u0e32","align_left":"\u0e0b\u0e49\u0e32\u0e22","align_default":"\u0e04\u0e48\u0e32\u0e40\u0e23\u0e34\u0e48\u0e21\u0e15\u0e49\u0e19",align:"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e08\u0e31\u0e14\u0e27\u0e32\u0e07",border:"\u0e01\u0e23\u0e2d\u0e1a",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"\u0e41\u0e16\u0e27",cols:"\u0e04\u0e2d\u0e25\u0e31\u0e21\u0e1e\u0e4c",height:"\u0e2a\u0e39\u0e07",width:"\u0e01\u0e27\u0e49\u0e32\u0e07",title:"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e15\u0e32\u0e23\u0e32\u0e07",rowtype:"Row in table part","advanced_props":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","general_props":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","advanced_tab":"\u0e02\u0e31\u0e49\u0e19\u0e2a\u0e39\u0e07","general_tab":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tn_dlg.js
new file mode 100644
index 000000000..479c8b8f7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tr_dlg.js
new file mode 100644
index 000000000..28020cf8b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.table_dlg',{"rules_border":"kenarl\u0131k","rules_box":"kutu","rules_vsides":"dikey kenarlar","rules_rhs":"sa\u011f yatay kenarlar","rules_lhs":"sol yatay kenarlar","rules_hsides":"yatay kenarlar","rules_below":"alt\u0131nda","rules_above":"\u00fcst\u00fcnde","rules_void":"yok",rules:"\u00c7izgiler","frame_all":"t\u00fcm\u00fc","frame_cols":"s\u00fctunlar","frame_rows":"sat\u0131rlar","frame_groups":"gruplar","frame_none":"hi\u00e7biri",frame:"\u00c7er\u00e7eve",caption:"Tablo ba\u015fl\u0131\u011f\u0131","missing_scope":"Tablo ba\u015fl\u0131k h\u00fccresi i\u00e7in bir kapsam belirlemeden devam etmek istedi\u011finize emin misiniz? Bu de\u011fer olmadan, engelli kullan\u0131c\u0131lar tabloda g\u00f6sterilen verileri ve i\u00e7eri\u011fi anlamas\u0131 zordur.","cell_limit":"Maksimum h\u00fccre say\u0131s\u0131 ($cells) a\u015f\u0131ld\u0131.","row_limit":"Maksimum sat\u0131r say\u0131s\u0131 ($rows) a\u015f\u0131ld\u0131.","col_limit":"Maksimum s\u00fctun say\u0131s\u0131 ($cols) a\u015f\u0131ld\u0131.",colgroup:"S\u00fctun Grubu",rowgroup:"Sat\u0131r Grubu",scope:"Kapsam",tfoot:"Tablo Alt\u0131",tbody:"Tablo G\u00f6vdesi",thead:"Tablo Ba\u015fl\u0131\u011f\u0131","row_all":"Tablodaki t\u00fcm sat\u0131rlar\u0131 g\u00fcncelle","row_even":"Tablodaki \u00e7ift nolu sat\u0131rlar\u0131 g\u00fcncelle","row_odd":"Tablodaki tek nolu sat\u0131rlar\u0131 g\u00fcncelle","row_row":"Se\u00e7ili sat\u0131r\u0131 g\u00fcncelle","cell_all":"Tablodaki t\u00fcm h\u00fccreleri g\u00fcncelle","cell_row":"Sat\u0131rdaki t\u00fcm h\u00fccreleri g\u00fcncelle","cell_cell":"Se\u00e7ili h\u00fccreleri g\u00fcncelle",th:"Ba\u015fl\u0131k",td:"Veri",summary:"\u00d6zet",bgimage:"Arkaplan resmi",rtl:"Soldan sa\u011fa",ltr:"Sa\u011fdan sola",mime:"Hedef MIME tipi",langcode:"Dil kodu",langdir:"Dil y\u00f6n\u00fc",style:"Stil",id:"Id","merge_cells_title":"Tablo h\u00fccrelerini birle\u015ftir",bgcolor:"Arkaplan rengi",bordercolor:"Kenarl\u0131k rengi","align_bottom":"Alt","align_top":"\u00dcst",valign:"Dikey hizalama","cell_type":"H\u00fccre tipi","cell_title":"Tablo h\u00fccre \u00f6zellikleri","row_title":"Tablo sat\u0131r \u00f6zellikleri","align_middle":"Orta","align_right":"Sa\u011f","align_left":"Sol","align_default":"Varsay\u0131lan",align:"Hizalama",border:"Kenarl\u0131k",cellpadding:"H\u00fccre d\u0131\u015f\u0131 bo\u015flu\u011fu",cellspacing:"H\u00fccre i\u00e7i bo\u015flu\u011fu",rows:"Sat\u0131rlar",cols:"S\u00fctunlar",height:"Y\u00fckseklik",width:"Geni\u015flik",title:"Tablo Ekle/D\u00fczenle",rowtype:"Tablo b\u00f6l\u00fcm\u00fcndeki sat\u0131r","advanced_props":"Geli\u015fmi\u015f \u00f6zellikler","general_props":"Genel \u00f6zellikler","advanced_tab":"Geli\u015fmi\u015f","general_tab":"Genel","cell_col":"S\u00fctundaki b\u00fct\u00fcn h\u00fccreleri g\u00fcncelle"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tt_dlg.js
new file mode 100644
index 000000000..880f27fc9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.table_dlg',{"rules_border":"\u908a\u6846","rules_box":"\u76d2","rules_vsides":"\u5782\u76f4\u5927\u5c0f","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"\u6c34\u5e73\u5927\u5c0f","rules_below":"\u4e4b\u4e0b","rules_above":"\u4e4b\u4e0a","rules_void":"\u7a7a",rules:"\u5c3a\u898f","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u7d44","frame_none":"\u7121",frame:"\u908a\u6846",caption:"\u8868\u683c\u6a19\u984c","missing_scope":"\u60a8\u78ba\u5b9a\u4e0d\u6307\u5b9a\u8868\u982d\u5132\u5b58\u683c\u7684\u7bc4\u570d\u55ce\uff1f\u5982\u679c\u4e0d\u6307\u5b9a\uff0c\u90e8\u5206\u4f7f\u7528\u8005\u5c07\u5f88\u96e3\u67e5\u770b\u8868\u683c\u5167\u5bb9","cell_limit":"\u5df2\u8d85\u904e\u9650\u5236\uff0c\u6700\u591a\u7232{$cells} \u5132\u5b58\u683c\u3002","row_limit":"\u5df2\u8d85\u904e\u9650\u5236\uff0c\u6700\u591a\u7232 {$rows} \u884c\u3002","col_limit":"\u5df2\u8d85\u904e\u9650\u5236\uff0c\u6700\u591a\u7232 {$cols} \u5217\u3002",colgroup:"\u5217\u7d44",rowgroup:"\u884c\u7d44",scope:"\u7bc4\u570d",tfoot:"\u8868\u8173",tbody:"\u8868\u9ad4",thead:"\u8868\u982d","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u5168\u90e8\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6578\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6578\u884c","row_row":"\u66f4\u65b0\u6240\u5728\u884c","cell_all":"\u66f4\u65b0\u5168\u90e8\u5132\u5b58\u683c","cell_row":"\u66f4\u65b0\u7576\u524d\u884c\u7684\u5132\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u7684\u5132\u5b58\u683c",th:"\u8868\u982d",td:"\u8868\u683c",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u5716\u7247",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",mime:"\u76ee\u6a19 MIME \u985e\u578b",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411",style:"\u6a23\u5f0f",id:"Id","merge_cells_title":"\u5408\u4f75\u5132\u5b58\u683c",bgcolor:"\u80cc\u666f\u9854\u8272",bordercolor:"\u908a\u6846\u9854\u8272","align_bottom":"\u5e95\u90e8","align_top":"\u9802\u90e8",valign:"\u5782\u76f4\u5c0d\u9f4a\u65b9\u5f0f","cell_type":"\u5132\u5b58\u683c \u985e\u5225","cell_title":"\u5132\u5b58\u683c \u5c6c\u6027","row_title":"\u884c \u5c6c\u6027","align_middle":"\u7f6e\u4e2d","align_right":"\u5c45\u53f3","align_left":"\u5c45\u5de6","align_default":"\u9810\u8a2d",align:"\u5c0d\u9f4a\u65b9\u5f0f",border:"\u908a\u6846",cellpadding:"\u5132\u5b58\u683c\u5167\u8ddd",cellspacing:"\u5132\u5b58\u683c\u9593\u8ddd",rows:"\u884c\u6578",cols:"\u5217\u6578",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",title:"\u63d2\u5165/\u7de8\u8f2f \u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9032\u968e\u5c6c\u6027","general_props":"\u57fa\u672c \u5c6c\u6027","advanced_tab":"\u9032\u968e","general_tab":"\u57fa\u672c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tw_dlg.js
new file mode 100644
index 000000000..12c3c448e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.table_dlg',{"rules_border":"\u5916\u6846","rules_box":"\u76d2\u578b","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u908a","rules_lhs":"\u5de6\u908a","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u898f\u5247","frame_all":"\u5168\u90e8","frame_cols":"\u6b04","frame_rows":"\u884c","frame_groups":"\u7fa4\u7d44","frame_none":"\u7121",frame:"\u6846\u67b6",caption:"\u8868\u683c\u6a19\u984c","missing_scope":"\u60a8\u78ba\u5b9a\u4e0d\u6307\u5b9a\u8868\u683c\u982d\u90e8\u5132\u5b58\u683c\u4e00\u500b\u7bc4\u570d\u55ce\uff1f\u6c92\u6709\u5b83\uff0c\u6216\u8a31\u5c0d\u90a3\u4e9b\u6709\u969c\u7919\u7684\u4f7f\u7528\u8005\u7406\u89e3\u8868\u683c\u5c55\u793a\u7684\u5167\u5bb9\u6216\u6578\u64da\u66f4\u52a0\u7684\u56f0\u96e3\u3002","cell_limit":"\u5df2\u8d85\u904e\u6700\u5927\u5132\u5b58\u683c\u9650\u5236{$cells} \u5132\u5b58\u683c\u3002","row_limit":"\u5df2\u8d85\u904e\u6700\u5927\u884c\u6578\u9650\u5236 {$rows} \u5217\u3002","col_limit":"\u5df2\u8d85\u904e\u6700\u5927\u6b04\u6578\u9650\u5236 {$cols} \u6b04\u3002",colgroup:"\u6b04\u7fa4\u7d44",rowgroup:"\u884c\u7fa4\u7d44",scope:"\u7bc4\u570d",tfoot:"\u8868\u5c3e",tbody:"\u8868\u683c\u4e3b\u9ad4",thead:"\u8868\u982d","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u6240\u6709\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6578\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6578\u884c","row_row":"\u66f4\u65b0\u76ee\u524d\u884c","cell_all":"\u66f4\u65b0\u6240\u6709\u5132\u5b58\u683c","cell_row":"\u66f4\u65b0\u76ee\u524d\u884c\u7684\u5132\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u5132\u5b58\u683c",th:"\u8868\u982d",td:"\u8cc7\u6599",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u5716\u7247",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",mime:"MIME \u985e\u578b",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411",style:"\u6a23\u5f0f",id:"ID","merge_cells_title":"\u5408\u4f75\u5132\u5b58\u683c",bgcolor:"\u80cc\u666f\u984f\u8272",bordercolor:"\u908a\u6846\u984f\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u9760\u4e0a",valign:"\u5782\u76f4\u5c0d\u9f4a","cell_type":"\u5132\u5b58\u683c\u985e\u578b","cell_title":"\u5132\u5b58\u683c\u6a19\u984c","row_title":"\u884c\u5c6c\u6027","align_middle":"\u7f6e\u4e2d\u5c0d\u9f4a","align_right":"\u9760\u53f3\u5c0d\u9f4a","align_left":"\u9760\u5de6\u5c0d\u9f4a","align_default":"\u9810\u8a2d",align:"\u5c0d\u9f4a\u65b9\u5f0f",border:"\u908a\u6846",cellpadding:"\u5132\u5b58\u683c\u908a\u8ddd",cellspacing:"\u5132\u5b58\u683c\u9593\u8ddd",rows:"\u884c\u6578",cols:"\u6b04\u6578",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",title:"\u63d2\u5165/\u7de8\u8f2f\u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9032\u968e\u5c6c\u6027","general_props":"\u4e00\u822c\u5c6c\u6027","advanced_tab":"\u9032\u968e","general_tab":"\u4e00\u822c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/uk_dlg.js
new file mode 100644
index 000000000..396cbb621
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.table_dlg',{"rules_border":"\u0440\u0430\u043c\u043a\u0430","rules_box":"\u0431\u043e\u043a\u0441","rules_vsides":"v-\u0441\u0442\u043e\u0440\u043e\u043d\u0438","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"h-\u0441\u0442\u043e\u0440\u043e\u043d\u0438","rules_below":"\u0437\u043d\u0438\u0437\u0443","rules_above":"\u0437\u0432\u0435\u0440\u0445\u0443","rules_void":"\u043f\u0443\u0441\u0442\u043e",rules:"\u041f\u0440\u0430\u0432\u0438\u043b\u0430","frame_all":"\u0432\u0441\u0456","frame_cols":"\u0441\u0442\u043e\u0432\u043f\u0446\u0456","frame_rows":"\u0440\u044f\u0434\u043a\u0438","frame_groups":"\u0433\u0440\u0443\u043f\u0438","frame_none":"\u043d\u0456\u044f\u043a\u0438\u0439",frame:"\u0424\u0440\u0435\u0439\u043c",caption:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","missing_scope":"\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u0432\u0436\u0438\u0442\u0438 \u043d\u0435 \u0432\u043a\u0430\u0437\u0430\u0432\u0448\u0438 \u043c\u0435\u0436\u0456 \u0434\u043b\u044f \u0446\u0456\u0454\u0457 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443. \u0411\u0435\u0437 \u0446\u044c\u043e\u0433\u043e \u0434\u0435\u044f\u043a\u0438\u043c \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\u043c \u0431\u0443\u0434\u0435 \u0432\u0430\u0436\u043a\u043e \u0437\u0440\u043e\u0437\u0443\u043c\u0456\u0442\u0438 \u0437\u043c\u0456\u0441\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0456.","cell_limit":"\u0412\u0438 \u043f\u0435\u0440\u0435\u0432\u0438\u0449\u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043a\u043e\u043c\u0456\u0440\u043e\u043a: {$cells}.","row_limit":"\u0412\u0438 \u043f\u0435\u0440\u0435\u0432\u0438\u0449\u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0440\u044f\u0434\u043a\u0456\u0432: {$rows}.","col_limit":"\u0412\u0438 \u043f\u0435\u0440\u0435\u0432\u0438\u0449\u0438\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443 \u043a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432: {$cols}.",colgroup:"\u0413\u0440\u0443\u043f\u0430 \u0441\u0442\u043e\u0432\u043f\u0446\u0456\u0432",rowgroup:"\u0413\u0440\u0443\u043f\u0430 \u043a\u043e\u043c\u0456\u0440\u043e\u043a",scope:"\u0420\u043e\u0437\u043c\u0430\u0445",tfoot:"\u041d\u0438\u0436\u043d\u044f \u0447\u0430\u0441\u0442\u0438\u043d\u0430",tbody:"\u0422\u0456\u043b\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0456",thead:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_all":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u0440\u044f\u0434\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_even":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u0430\u0440\u043d\u0456 \u0440\u044f\u0434\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_odd":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043d\u0435\u043f\u0430\u0440\u043d\u0456 \u0440\u044f\u0434\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446","row_row":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u043e\u0442\u043e\u0447\u043d\u0438\u0439 \u0440\u044f\u0434\u043e\u043a","cell_all":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","cell_row":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0432 \u0440\u044f\u0434\u043a\u0443","cell_cell":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u043f\u043e\u0442\u043e\u0447\u043d\u0443 \u043a\u043e\u043c\u0456\u0440\u043a\u0443",th:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a",td:"\u0414\u0430\u043d\u043d\u0456",summary:"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435",bgimage:"\u0424\u043e\u043d\u043e\u0432\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f",rtl:"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e",ltr:"\u0417\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e",mime:"MIME-\u0442\u0438\u043f \u0446\u0456\u043b\u0456",langcode:"\u041a\u043e\u0434 \u043c\u043e\u0432\u0438",langdir:"\u041d\u0430\u043f\u0440\u044f\u043c \u043c\u043e\u0432\u0438",style:"\u0421\u0442\u0438\u043b\u044c",id:"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440","merge_cells_title":"\u041e\u0431\'\u0454\u0434\u043d\u0430\u0442\u0438 \u043a\u043e\u043c\u0456\u0440\u043a\u0438",bgcolor:"\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443",bordercolor:"\u041a\u043e\u043b\u0456\u0440 \u0433\u0440\u0430\u043d\u0438\u0446\u0456","align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e",valign:"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","cell_type":"\u0422\u0438\u043f \u043a\u043e\u043c\u0456\u0440\u043a\u0438","cell_title":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u043a\u043e\u043c\u0456\u0440\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","row_title":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0440\u044f\u0434\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_left":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","align_default":"\u0417\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0430\u043d\u043d\u044f\u043c",align:"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f",border:"\u0420\u0430\u043c\u043a\u0430",cellpadding:"\u0412\u0456\u0434\u0441\u0442\u0443\u043f\u0438 \u0443 \u043a\u043e\u043c\u0456\u0440\u043a\u0430\u0445",cellspacing:"\u0412\u0456\u0434\u0441\u0442\u0430\u043d\u044c \u043c\u0456\u0436 \u043a\u043e\u043c\u0456\u0440\u043a\u0430\u043c\u0438",rows:"\u0420\u044f\u0434\u043a\u0438",cols:"\u0421\u0442\u043e\u0432\u043f\u0446\u0456",height:"\u0412\u0438\u0441\u043e\u0442\u0430",width:"\u0428\u0438\u0440\u0438\u043d\u0430",title:"\u0414\u043e\u0434\u0430\u0442\u0438/\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044e",rowtype:"\u0420\u044f\u0434\u043e\u043a \u0432 \u0447\u0430\u0441\u0442\u0438\u043d\u0456 \u0442\u0430\u0431\u043b\u0438\u0446\u0456","advanced_props":"\u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","general_props":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 \u0432\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456","advanced_tab":"\u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e","general_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","cell_col":"\u041e\u043d\u043e\u0432\u0438\u0442\u0438 \u0432\u0441\u0456 \u043a\u043b\u0456\u0442\u0438\u043d\u043a\u0438 \u0432 \u043a\u043e\u043b\u043e\u043d\u0446\u0456"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ur_dlg.js
new file mode 100644
index 000000000..ec2d0c947
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.table_dlg',{"rules_border":"border","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"below","rules_above":"above","rules_void":"void",rules:"Rules","frame_all":"all","frame_cols":"cols","frame_rows":"rows","frame_groups":"groups","frame_none":"none",frame:"Frame",caption:"Table caption","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.","cell_limit":"You\'ve exceeded the maximum number of cells of {$cells}.","row_limit":"You\'ve exceeded the maximum number of rows of {$rows}.","col_limit":"You\'ve exceeded the maximum number of columns of {$cols}.",colgroup:"Col Group",rowgroup:"Row Group",scope:"Scope",tfoot:"Table Foot",tbody:"Table Body",thead:"Table Head","row_all":"Update all rows in table","row_even":"Update even rows in table","row_odd":"Update odd rows in table","row_row":"Update current row","cell_all":"Update all cells in table","cell_row":"Update all cells in row","cell_cell":"Update current cell",th:"Header",td:"Data",summary:"Summary",bgimage:"Background image",rtl:"Right to left",ltr:"Left to right",mime:"Target MIME type",langcode:"Language code",langdir:"Language direction",style:"Style",id:"Id","merge_cells_title":"Merge table cells",bgcolor:"Background color",bordercolor:"Border color","align_bottom":"Bottom","align_top":"Top",valign:"Vertical alignment","cell_type":"Cell type","cell_title":"Table cell properties","row_title":"Table row properties","align_middle":"Center","align_right":"Right","align_left":"Left","align_default":"Default",align:"Alignment",border:"Border",cellpadding:"Cellpadding",cellspacing:"Cellspacing",rows:"Rows",cols:"Cols",height:"Height",width:"Width",title:"Insert/Modify table",rowtype:"Row in table part","advanced_props":"Advanced properties","general_props":"General properties","advanced_tab":"Advanced","general_tab":"General","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/vi_dlg.js
new file mode 100644
index 000000000..64318f607
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.table_dlg',{"rules_border":"vi\u1ec1n","rules_box":"box","rules_vsides":"vsides","rules_rhs":"rhs","rules_lhs":"lhs","rules_hsides":"hsides","rules_below":"d\u01b0\u1edbi","rules_above":"tr\u00ean","rules_void":"tr\u1ed1ng kh\u00f4ng",rules:"Th\u01b0\u1edbc","frame_all":"t\u1ea5t","frame_cols":"c\u1ed9t","frame_rows":"h\u00e0ng","frame_groups":"nh\u00f3m","frame_none":"kh\u00f4ng",frame:"Khung",caption:"Ch\u00fa t\u00edch b\u1ea3ng","missing_scope":"Ti\u1ebfp t\u1ee5c v\u1edbi \u0111\u01b0\u1eddng d\u1eabn kh\u00f4ng t\u1ed3n t\u1ea1i ?","cell_limit":"B\u1ea1n \u0111\u00e3 v\u01b0\u1ee3t qu\u00e1 s\u1ed1 t\u1ed1i \u0111a \u00f4 c\u1ee7a {$cells}.","row_limit":"B\u1ea1n \u0111\u00e3 v\u01b0\u1ee3t qu\u00e1 s\u1ed1 t\u1ed1i \u0111a h\u00e0ng c\u1ee7a {$rows}.","col_limit":"B\u1ea1n \u0111\u00e3 v\u01b0\u1ee3t qu\u00e1 s\u1ed1 t\u1ed1i \u0111a c\u1ed9t c\u1ee7a {$cols}.",colgroup:"Nh\u00f3m c\u1ed9t",rowgroup:"Nh\u00f3m h\u00e0ng",scope:"Ph\u1ea1m vi",tfoot:"Ch\u00e2n b\u1ea3ng",tbody:"Th\u00e2n b\u1ea3n",thead:"\u0110\u1ea7u b\u1ea3ng","row_all":"C\u1eadp nh\u1eadt t\u1ea5t h\u00e0ng trong b\u1ea3ng","row_even":"C\u1eadp nh\u1eadt h\u00e0ng ch\u1eb5n trong b\u1ea3ng","row_odd":"C\u1eadp nh\u1eadt h\u00e0ng l\u1ebb trong b\u1ea3ng","row_row":"C\u1eadp nh\u1eadt h\u00e0ng hi\u1ec7n th\u1eddi","cell_all":"C\u1eadp nh\u1ea5t t\u1ea5t c\u00e1c \u00f4 trong b\u1ea3ng","cell_row":"C\u1eadp nh\u1ea5t t\u1ea5t c\u00e1c \u00f4 trong h\u00e0ng","cell_cell":"C\u1eadp nh\u1eadt \u00f4 hi\u1ec7n th\u1eddi",th:"\u0110\u1ea7u \u0111\u1ec1",td:"D\u1eef li\u1ec7u",summary:"T\u00f3m l\u01b0\u1ee3c",bgimage:"\u1ea2nh n\u1ec1n",rtl:"Ph\u1ea3i qua tr\u00e1i",ltr:"Tr\u00e1i qua ph\u1ea3i",mime:"Ki\u1ec3u MIME \u0111\u00edch",langcode:"M\u00e3 ng\u00f4n ng\u1eef",langdir:"H\u01b0\u1edbng ng\u00f4n ng\u1eef",style:"Ki\u1ec3u d\u00e1ng",id:"Id","merge_cells_title":"K\u1ebft h\u1ee3p c\u00e1c \u00f4 c\u1ee7a b\u1ea3ng",bgcolor:"M\u00e0u n\u1ec1n",bordercolor:"M\u00e0u vi\u1ec1n","align_bottom":"D\u01b0\u1edbi","align_top":"Tr\u00ean",valign:"Canh l\u1ec1 d\u1ecdc","cell_type":"Lo\u1ea1i \u00f4","cell_title":"Thu\u1ed9c t\u00ednh \u00f4","row_title":"Thu\u1ed9c t\u00ednh h\u00e0ng","align_middle":"Gi\u1eefa","align_right":"Ph\u1ea3i","align_left":"Tr\u00e1i","align_default":"M\u1eb7c \u0111\u1ecbnh",align:"Canh l\u1ec1",border:"Vi\u1ec1n",cellpadding:"Kho\u1ea3ng l\u00f3t \u00f4",cellspacing:"Kho\u1ea3ng c\u00e1ch \u00f4",rows:"H\u00e0ng",cols:"C\u1ed9t",height:"Chi\u1ec1u cao",width:"Chi\u1ec1u r\u1ed9ng",title:"Ch\u00e8n/S\u1eeda b\u1ea3ng",rowtype:"H\u00e0ng trong t\u1eebng ph\u1ea7n b\u1ea3ng","advanced_props":"Thu\u1ed9c t\u00ednh n\u00e2ng cao","general_props":"Thu\u1ed9c t\u00ednh chung","advanced_tab":"N\u00e2ng cao","general_tab":"Chung","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..4fe30035f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.table_dlg',{"rules_border":"\u8fb9\u6846","rules_box":"\u6846","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u8fb9","rules_lhs":"\u5de6\u8fb9","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u89c4\u5219","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u5206\u7ec4","frame_none":"\u65e0",frame:"\u6846\u67b6",caption:"\u683c\u6807\u9898","missing_scope":"\u60a8\u6ca1\u6709\u6307\u5b9a\u8868\u683c\u7684\u6807\u9898\u5355\u5143\uff0c\u5982\u679c\u4e0d\u8bbe\u7f6e\uff0c\u53ef\u80fd\u4f1a\u4f7f\u7528\u6237\u96be\u4ee5\u7406\u89e3\u60a8\u7684\u8868\u683c\u7684\u5185\u5bb9\u3002\u60a8\u8981\u7ee7\u7eed\u5417\uff1f","cell_limit":"\u5df2\u7ecf\u8d85\u51fa\u6700\u5927\u5355\u5143\u683c\u6570{$cells}\u3002","row_limit":"\u5df2\u7ecf\u8d85\u51fa\u6700\u5927\u884c\u6570{$rows}\u3002","col_limit":"\u5df2\u7ecf\u8d85\u51fa\u6700\u5927\u5217\u6570{$cols}\u3002",colgroup:"\u5217\u5206\u7ec4",rowgroup:"\u884c\u5206\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u5c3e",tbody:"\u8868\u683c\u4e3b\u4f53",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u6240\u6709\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u5f53\u524d\u884c","cell_all":"\u66f4\u65b0\u6240\u6709\u5355\u5143\u683c","cell_row":"\u66f4\u65b0\u5f53\u524d\u884c\u7684\u5355\u5143\u683c","cell_cell":"\u66f4\u65b0\u5f53\u524d\u5355\u5143\u683c",th:"\u8868\u5934",td:"\u5185\u5bb9",summary:"\u6458\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u4ece\u53f3\u5230\u5de6",ltr:"\u4ece\u5de6\u5230\u53f3",mime:"\u76ee\u6807MIME\u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"ID","merge_cells_title":"\u5408\u5e76\u5355\u5143\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u9760\u4e0a",valign:"\u5782\u76f4\u5bf9\u9f50","cell_type":"\u5355\u5143\u683c\u7c7b\u578b","cell_title":"\u5355\u5143\u683c\u5c5e\u6027","row_title":"\u884c\u5c5e\u6027","align_middle":"\u5c45\u4e2d","align_right":"\u53f3\u5bf9\u9f50","align_left":"\u5de6\u5bf9\u9f50","align_default":"\u9ed8\u8ba4",align:"\u5bf9\u9f50",border:"\u8fb9\u6846",cellpadding:"\u5355\u5143\u683c\u8fb9\u8ddd",cellspacing:"\u5355\u5143\u683c\u95f4\u8ddd",rows:"\u884c\u6570",cols:"\u5217\u6570",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u7f16\u8f91 \u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","general_props":"\u666e\u901a\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u666e\u901a","cell_col":"\u66f4\u65b0\u8be5\u5217\u5168\u90e8\u5355\u5143\u683c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..7a89be3f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.table_dlg',{"rules_border":"\u908a\u6846","rules_box":"\u6846","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u908a","rules_lhs":"\u5de6\u908a","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b\u65b9","rules_above":"\u4e0a\u65b9","rules_void":"\u7121\u6548",rules:"\u898f\u5247","frame_all":"\u5168\u90e8","frame_cols":"\u6b04","frame_rows":"\u5217","frame_groups":"\u7fa4\u7d44","frame_none":"\u7121",frame:"\u6846\u67b6",caption:"\u8868\u683c\u8aaa\u660e","missing_scope":"\u60a8\u8868\u683c\u7b2c\u4e00\u884c\u7684\u8868\u683c\u6c92\u6709\u8a2d\u5b9a\u6a19\u984c\u5132\u5b58\u683c (TH)\uff0c\u9019\u53ef\u80fd\u4e0d\u5229\u65bc\u7db2\u9801 SEO \u8207 \u7121\u969c\u7919\u7a7a\u9593\u898f\u7bc4\uff0c\u60a8\u78ba\u5b9a\u8981\u5ffd\u7565\u9019\u500b\u55ce\uff1f","cell_limit":"\u8868\u683c\u5167\u7684\u683c\u5b57\u592a\u591a\uff0c\u529f\u80fd\u7121\u6cd5\u904b\u4f5c\uff0c\u5df2\u7d93\u8d85\u904e {$cells} \u500b\u3002","row_limit":"\u8868\u683c\u5167\u7684\u5217\u6578\u592a\u591a\uff0c\u529f\u80fd\u7121\u6cd5\u904b\u4f5c\uff0c\u5df2\u7d93\u8d85\u904e {$rows} \u5217\u3002","col_limit":"\u8868\u683c\u5167\u7684\u6b04\u4f4d\u592a\u591a\uff0c\u529f\u80fd\u7121\u6cd5\u904b\u4f5c\uff0c\u5df2\u7d93\u8d85\u904e {$cols} \u6b04\u3002",colgroup:"\u6b04\u4f4d\u7fa4\u7d44",rowgroup:"\u5217\u7fa4\u7d44",scope:"\u5957\u7528\u7bc4\u570d",tfoot:"\u8868\u683c\u5c3e\u90e8",tbody:"\u8868\u683c\u4e3b\u9ad4",thead:"\u8868\u683c\u4e0a\u982d","row_all":"\u66f4\u65b0\u5168\u90e8\u7684\u5217","row_even":"\u53ea\u66f4\u65b0\u8868\u683c\u4e0a\u7684\u5076\u6578\u5217","row_odd":"\u53ea\u66f4\u65b0\u8868\u683c\u4e0a\u7684\u5947\u6578\u5217","row_row":"\u53ea\u66f4\u65b0\u76ee\u524d\u9019\u5217","cell_all":"\u66f4\u65b0\u5168\u90e8\u5132\u5b58\u683c","cell_row":"\u66f4\u65b0\u76ee\u524d\u9019\u5217\u4e0a\u7684\u683c\u5b50","cell_cell":"\u66f4\u65b0\u76ee\u524d\u7684\u683c\u5b50\u5c31\u597d",th:"\u8868\u982d",td:"\u8cc7\u6599",summary:"\u8868\u683c\u6458\u8981",bgimage:"\u80cc\u666f\u5716",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",mime:"\u76ee\u6a19 MIME \u985e\u578b",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u66f8\u5beb\u65b9\u5411",style:"\u6a23\u5f0f",id:"\u8868\u683c\u7684 ID","merge_cells_title":"\u5408\u4f75\u5132\u5b58\u683c",bgcolor:"\u80cc\u666f\u984f\u8272",bordercolor:"\u908a\u6846\u7684\u984f\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u9760\u4e0a",valign:"\u5782\u76f4\u5c0d\u9f4a","cell_type":"\u5132\u5b58\u683c\u7684\u5f62\u5f0f","cell_title":"\u8868\u683c\u683c\u5b50\u7684\u5c6c\u6027","row_title":"\u8868\u683c\u5217\u7684\u5c6c\u6027","align_middle":"\u4e2d\u9593","align_right":"\u53f3\u908a","align_left":"\u5de6\u908a","align_default":"\u9810\u8a2d",align:"\u5c0d\u9f4a\u65b9\u5f0f",border:"\u908a\u6846",cellpadding:"\u683c\u5b50\u7684\u5167\u8ddd",cellspacing:"\u683c\u5b50\u9593\u7684\u8ddd\u96e2",rows:"\u5217",cols:"\u6b04",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",title:"\u52a0\u5165 / \u8a2d\u5b9a\u8868\u683c",rowtype:"\u76ee\u524d\u4f4d\u7f6e\u5217\u7684\u4f4d\u7f6e","advanced_props":"\u66f4\u591a\u5c6c\u6027","general_props":"\u5c6c\u6027\u8a2d\u5b9a","advanced_tab":"\u66f4\u591a","general_tab":"\u4e00\u822c","cell_col":"\u66f4\u65b0\u9019\u6b04\u4e0b\u7684\u6240\u6709\u683c\u5b50"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh_dlg.js
new file mode 100644
index 000000000..3d786d236
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.table_dlg',{"rules_border":"\u908a\u6846","rules_box":"\u76d2\u578b","rules_vsides":"\u5782\u76f4","rules_rhs":"\u53f3\u908a","rules_lhs":"\u5de6\u908a","rules_hsides":"\u6c34\u5e73","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u898f\u5247","frame_all":"\u5168\u90e8","frame_cols":"\u6b04\u8868\u982d","frame_rows":"\u5217\u8868\u982d","frame_groups":"\u7fa4\u7d44","frame_none":"\u7121",frame:"\u6846\u67b6",caption:"\u8868\u683c\u6a19\u984c","missing_scope":"\u60a8\u78ba\u5b9a\u4e0d\u70ba\u8868\u982d\u5132\u5b58\u683c\u6307\u5b9a\u4e00\u500b\u7bc4\u570d\u55ce? \u5982\u679c\u4e0d\u6307\u5b9a, \u5c0d\u4f7f\u7528\u975e\u53ef\u8996\u700f\u89bd\u5668\u7684\u4f7f\u7528\u8005\u5c07\u66f4\u96e3\u95b1\u8b80\u6216\u7406\u89e3\u8868\u683c\u5167\u5bb9.","cell_limit":"\u5df2\u9054\u5230\u6700\u591a {$cells} \u500b\u5132\u5b58\u683c\u7684\u4e0a\u9650.","row_limit":"\u5df2\u9054\u5230\u6700\u591a {$rows} \u5217\u5132\u5b58\u683c\u7684\u4e0a\u9650.","col_limit":"\u5df2\u9054\u5230\u6700\u591a {$cols} \u6b04\u5132\u5b58\u683c\u7684\u4e0a\u9650.",colgroup:"\u6b04\u7fa4\u7d44\u8868\u982d",rowgroup:"\u5217\u7fa4\u7d44\u8868\u982d",scope:"\u8868\u982d\u7bc4\u570d",tfoot:"\u8868\u5c3e",tbody:"\u8868\u683c\u4e3b\u9ad4",thead:"\u8868\u982d","row_all":"\u66f4\u65b0\u8868\u683c\u7684\u6240\u6709\u5217","row_even":"\u66f4\u65b0\u8868\u683c\u7684\u5076\u6578\u6b04\u5217","row_odd":"\u66f4\u65b0\u8868\u683c\u7684\u5947\u6578\u5217","row_row":"\u66f4\u65b0\u76ee\u524d\u7684\u5217","cell_all":"\u66f4\u65b0\u8868\u683c\u6240\u6709\u7684\u5132\u5b58\u683c","cell_row":"\u66f4\u65b0\u5217\u6240\u6709\u5217\u5132\u5b58\u683c","cell_cell":"\u66f4\u65b0\u76ee\u524d\u7684\u5132\u5b58\u683c",th:"\u8868\u982d",td:"\u8868\u683c\u5167\u5bb9",summary:"\u8868\u683c\u6458\u8981",bgimage:"\u80cc\u666f\u5716\u7247",rtl:"\u5f9e\u53f3\u5230\u5de6",ltr:"\u5f9e\u5de6\u5230\u53f3",mime:"\u76ee\u6a19 MIME \u985e\u578b",langcode:"\u8a9e\u8a00\u7de8\u78bc",langdir:"\u8a9e\u8a00\u66f8\u5beb\u65b9\u5411",style:"\u6a23\u5f0f",id:"ID","merge_cells_title":"\u5408\u4f75\u5132\u5b58\u683c",bgcolor:"\u80cc\u666f\u984f\u8272",bordercolor:"\u908a\u6846\u984f\u8272","align_bottom":"\u9760\u4e0b","align_top":"\u8003\u4e0a",valign:"\u5782\u76f4\u5c0d\u9f4a","cell_type":"\u5132\u5b58\u683c\u985e\u578b","cell_title":"\u5132\u5b58\u683c\u5c6c\u6027","row_title":"\u8868\u683c\u7684\u5217\u5c6c\u6027","align_middle":"\u7f6e\u4e2d\u5c0d\u9f4a","align_right":"\u9760\u53f3\u5c0d\u9f4a","align_left":"\u9760\u5de6\u5c0d\u9f4a","align_default":"\u9810\u8a2d",align:"\u5c0d\u9f4a\u65b9\u5411",border:"\u908a\u6846",cellpadding:"\u5132\u5b58\u683c\u908a\u8ddd",cellspacing:"\u5132\u5b58\u683c\u9593\u8ddd",rows:"\u5217\u6578",cols:"\u6b04\u6578",height:"\u9ad8\u5ea6",width:"\u5bec\u5ea6",title:"\u63d2\u5165/\u7de8\u8f2f\u5132\u5b58\u683c",rowtype:"\u5217\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9032\u968e\u5c6c\u6027","general_props":"\u4e00\u822c\u5c6c\u6027","advanced_tab":"\u9032\u968e","general_tab":"\u4e00\u822c","cell_col":"\u66f4\u65b0\u6b04\u5217\u6240\u6709\u5132\u5b58\u683c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zu_dlg.js
new file mode 100644
index 000000000..ef8d68899
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/table/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.table_dlg',{"rules_border":"\u5916\u6846","rules_box":"\u76d2\u578b","rules_vsides":"\u5782\u76f4\u8fb9","rules_rhs":"\u53f3\u8fb9","rules_lhs":"\u5de6\u8fb9","rules_hsides":"\u6c34\u51c6\u8fb9","rules_below":"\u4e0b","rules_above":"\u4e0a","rules_void":"\u7a7a",rules:"\u7ebf\u6761","frame_all":"\u5168\u90e8","frame_cols":"\u5217","frame_rows":"\u884c","frame_groups":"\u7fa4\u7ec4","frame_none":"\u65e0",frame:"\u8fb9\u6846",caption:"\u8868\u683c\u6807\u9898","missing_scope":"\u6807\u9898\u884c\u7f3a\u5931\uff01","cell_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u50a8\u5b58\u683c\u6570\u4e3a{$cells}\u683c\u3002","row_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u884c\u6570\u4e3a{$rows}\u884c\u3002","col_limit":"\u5df2\u8d85\u8fc7\u53ef\u7528\u6570\uff0c\u6700\u9ad8\u7684\u5217\u6570\u4e3a{$cols}\u5217\u3002",colgroup:"\u5217\u7fa4\u7ec4",rowgroup:"\u884c\u7fa4\u7ec4",scope:"\u8303\u56f4",tfoot:"\u8868\u5c3e",tbody:"\u8868\u8eab",thead:"\u8868\u5934","row_all":"\u66f4\u65b0\u8868\u683c\u5185\u5168\u90e8\u884c","row_even":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5076\u6570\u884c","row_odd":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5947\u6570\u884c","row_row":"\u66f4\u65b0\u6240\u5728\u884c","cell_all":"\u66f4\u65b0\u8868\u683c\u5185\u7684\u5168\u90e8\u50a8\u5b58\u683c","cell_row":"\u66f4\u65b0\u6240\u5728\u884c\u7684\u5168\u90e8\u50a8\u5b58\u683c","cell_cell":"\u66f4\u65b0\u6240\u7684\u50a8\u5b58\u683c",th:"\u8868\u5934",td:"\u6570\u636e",summary:"\u6982\u8981",bgimage:"\u80cc\u666f\u56fe\u7247",rtl:"\u7531\u53f3\u5230\u5de6",ltr:"\u7531\u5de6\u5230\u53f3",mime:"\u76ee\u6807MIME\u7c7b\u578b",langcode:"\u8bed\u8a00\u7f16\u7801",langdir:"\u8bed\u8a00\u4e66\u5199\u65b9\u5411",style:"\u6837\u5f0f",id:"Id","merge_cells_title":"\u5408\u5e76\u50a8\u5b58\u683c",bgcolor:"\u80cc\u666f\u989c\u8272",bordercolor:"\u8fb9\u6846\u989c\u8272","align_bottom":"\u4e0b\u65b9","align_top":"\u4e0a\u65b9",valign:"\u6c34\u51c6\u5bf9\u9f50\u65b9\u5f0f","cell_type":"\u50a8\u5b58\u683c\u522b","cell_title":"\u50a8\u5b58\u683c\u5c5e\u6027","row_title":"\u884c\u5c5e\u6027","align_middle":"\u5c45\u4e2d","align_right":"\u9760\u53f3","align_left":"\u9760\u5de6","align_default":"\u9884\u8bbe",align:"\u5bf9\u9f50\u65b9\u5f0f",border:"\u8fb9\u6846",cellpadding:"\u50a8\u5b58\u683c\u7559\u767d",cellspacing:"\u50a8\u5b58\u683c\u95f4\u8ddd",rows:"\u884c\u6570",cols:"\u5217\u6570",height:"\u9ad8\u5ea6",width:"\u5bbd\u5ea6",title:"\u63d2\u5165/\u7f16\u8f91\u8868\u683c",rowtype:"\u884c\u6240\u5728\u7684\u8868\u683c\u4f4d\u7f6e","advanced_props":"\u9ad8\u7ea7\u5c5e\u6027","general_props":"\u4e00\u822c\u5c5e\u6027","advanced_tab":"\u9ad8\u7ea7","general_tab":"\u4e00\u822c","cell_col":"Update all cells in column"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ar_dlg.js
new file mode 100644
index 000000000..5bae50d37
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.template_dlg',{title:"Templates",label:"Template","desc_label":"\u0627\u0644\u0648\u0635\u0641",desc:"Insert predefined template content",select:"Select a template",preview:"\u0645\u0639\u0627\u064a\u0646\u0647",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u064a\u0646\u0627\u064a\u0631 \u060c \u0641\u0628\u0631\u0627\u064a\u0631 \u060c \u0622\u0630\u0627\u0631 \u060c \u0646\u064a\u0633\u0627\u0646 \u060c \u0623\u064a\u0627\u0631 \u060c \u062d\u0632\u064a\u0631\u0627\u0646 \u060c \u062a\u0645\u0648\u0632 \u060c \u0622\u0628 \u060c \u0623\u064a\u0644\u0648\u0644 / \u0633\u0628\u062a\u0645\u0628\u0631 \u060c \u0623\u0643\u062a\u0648\u0628\u0631 \u060c \u0646\u0648\u0641\u0645\u0628\u0631 \u060c \u062f\u064a\u0633\u0645\u0628\u0631","months_short":"\u064a\u0646\u0627\u064a\u0631 \u060c \u0641\u0628\u0631\u0627\u064a\u0631 \u060c \u0645\u0627\u0631\u0633 \u060c \u0623\u0628\u0631\u064a\u0644 \u0648\u0645\u0627\u064a\u0648 \u0648\u064a\u0648\u0646\u064a\u0648 \u060c \u064a\u0648\u0644\u064a\u0648 \u060c \u0623\u063a\u0633\u0637\u0633 \u060c \u0633\u0628\u062a\u0645\u0628\u0631 \u060c \u0623\u0643\u062a\u0648\u0628\u0631 \u060c \u0646\u0648\u0641\u0645\u0628\u0631 \u060c \u062f\u064a\u0633\u0645\u0628\u0631","day_long":"\u0627\u0644\u0623\u062d\u062f \u060c \u0627\u0644\u0627\u062b\u0646\u064a\u0646 \u060c \u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621 \u060c \u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621 \u060c \u0627\u0644\u062e\u0645\u064a\u0633 \u060c \u0627\u0644\u062c\u0645\u0639\u0629 \u060c \u0627\u0644\u0633\u0628\u062a \u060c \u0627\u0644\u0623\u062d\u062f","day_short":"\u0623\u062d\u062f \u060c \u0627\u0644\u0627\u062b\u0646\u064a\u0646 \u060c \u0627\u0644\u062b\u0644\u0627\u062b\u0627\u0621 \u060c \u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621 \u060c \u0627\u0644\u062e\u0645\u064a\u0633 \u060c \u0627\u0644\u062c\u0645\u0639\u0629 \u060c \u0627\u0644\u0633\u0628\u062a \u0648\u0627\u0644\u0623\u062d\u062f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/az_dlg.js
new file mode 100644
index 000000000..c7e8834d3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.template_dlg',{title:"\u015eablonlar",label:"\u015eablon","desc_label":"T\u0259svir",desc:"\u018fvv\u0259ld\u0259n m\u00fc\u0259yy\u0259n edil\u0259n \u015fablon daxil et",select:"\u015eablon se\u00e7",preview:"\u0130lkin bax\u0131\u015f",warning:"T\u0259hl\u00fck\u0259: Bir \u015fablonu bir ba\u015fqas\u0131yla aktualla\u015fd\u0131rmaq m\u0259lumat itkisin\u0259 yol a\u00e7a bil\u0259r.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Yanvar,Fevral,Mart,Aprel,May,\u0130yun,\u0130yul,Avqust,Sentaybr,Oktaybr,Noyabr,Dekabr","months_short":"Yan,Fev,Mar,Ape,May,\u0130yn,\u0130yl,Avq,Sen,Okt,Noy,Dek","day_long":"Bazar,Bazar ert\u0259si,\u00c7\u0259r\u015f\u0259nb\u0259 ax\u015fam\u0131,\u00c7\u0259r\u015f\u0259nb\u0259,C\u00fcm\u0259 ax\u015fam\u0131,C\u00fcm\u0259,\u015e\u0259nb\u0259,Bazar","day_short":"B,Be,\u00c7a,\u00c7,Ca,C,\u015e,B"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/be_dlg.js
new file mode 100644
index 000000000..f5dd5fd32
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.template_dlg',{title:"\u0428\u0430\u0431\u043b\u043e\u043d\u044b",label:"\u0428\u0430\u0431\u043b\u043e\u043d","desc_label":"\u0410\u043f\u0456\u0441\u0430\u043d\u043d\u0435",desc:"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0448\u0430\u0431\u043b\u043e\u043d",select:"\u0410\u0431\u044f\u0440\u044b\u0446\u0435 \u0448\u0430\u0431\u043b\u043e\u043d",preview:"\u041f\u0440\u0430\u0433\u043b\u044f\u0434",warning:"\u0423\u0432\u0430\u0433\u0430: \u0437\u043c\u044f\u043d\u0435\u043d\u043d\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u043c\u043e\u0436\u0430 \u043f\u0440\u044b\u0432\u0435\u0441\u0446\u0456 \u0434\u0430 \u0441\u0442\u0440\u0430\u0442\u044b \u0434\u0430\u043d\u044b\u0445.","mdate_format":"%Y.%m.%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0421\u0442\u0443\u0434\u0437\u0435\u043d\u044c,\u041b\u044e\u0442\u044b,\u0421\u0430\u043a\u0430\u0432\u0456\u043a,\u041a\u0440\u0430\u0441\u0430\u0432\u0456\u043a,\u041c\u0430\u0439,\u0427\u044d\u0440\u0432\u0435\u043d\u044c,\u041b\u0456\u043f\u0435\u043d\u044c,\u0410\u045e\u0433\u0443\u0441\u0442,\u0412\u0435\u0440\u0430\u0441\u0435\u043d\u044c,\u041a\u0430\u0441\u0442\u0440\u044b\u0447\u043d\u0456\u043a,\u041b\u0456\u0441\u0442\u0430\u043f\u0430\u0434,\u0421\u043d\u0435\u0436\u0430\u043d\u044c","months_short":"\u0421\u0442\u0443,\u041b\u044e\u0442,\u0421\u0430\u043a,\u041a\u0440\u0430,\u041c\u0430\u0439,\u0427\u044d\u0440,\u041b\u0456\u043f,\u0410\u045e\u0433,\u0412\u0435\u0440,\u041a\u0430\u0441,\u041b\u0456\u0441,\u0421\u043d\u0435","day_long":"\u041d\u044f\u0434\u0437\u0435\u043b\u044f,\u041f\u0430\u043d\u044f\u0434\u0437\u0435\u043b\u0430\u043a,\u0410\u045e\u0442\u043e\u0440\u0430\u043a,\u0421\u0435\u0440\u0430\u0434\u0430,\u0427\u0430\u0446\u0432\u0435\u0440,\u041f\u044f\u0442\u043d\u0456\u0446\u0430,\u0421\u0443\u0431\u043e\u0442\u0430,\u041d\u044f\u0434\u0437\u0435\u043b\u044f","day_short":"\u041d\u0434,\u041f\u043d,\u0410\u0442,\u0421\u0440,\u0427\u0446,\u041f\u0442,\u0421\u0431,\u041d\u0434"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bg_dlg.js
new file mode 100644
index 000000000..8791dcfed
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.template_dlg',{title:"\u0422\u0435\u043c\u043f\u043b\u0435\u0439\u0442\u0438",label:"\u0422\u0435\u043c\u043f\u043b\u0435\u0439\u0442","desc_label":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",desc:"\u0412\u043c\u044a\u043a\u043d\u0438 \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435\u0442\u043e \u043d\u0430 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442",select:"\u0418\u0437\u0431\u0435\u0440\u0438 \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434",warning:"\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u041e\u0431\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435\u0442\u043e \u043d\u0430 \u0435\u0434\u0438\u043d \u0442\u0435\u043c\u043f\u043b\u0435\u0439\u0442 \u0441 \u0434\u0440\u0443\u0433 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0434\u043e\u0432\u0435\u0434\u0435 \u0434\u043e \u0437\u0430\u0433\u0443\u0431\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u0438.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u042f\u043d\u0443\u0430\u0440\u0438,\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438,\u041c\u0430\u0440\u0442,\u0410\u043f\u0440\u0438\u043b,\u041c\u0430\u0439,\u042e\u043d\u0438,\u042e\u043b\u0438,\u0410\u0432\u0433\u0443\u0441\u0442,\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438,\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438,\u041d\u043e\u0435\u043c\u0432\u0440\u0438,\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438","months_short":"\u042f\u043d\u0443,\u0424\u0435\u0432,\u041c\u0430\u0440,\u0410\u043f\u0440,\u041c\u0430\u0439,\u042e\u043d\u0438,\u042e\u043b\u0438,\u0410\u0432\u0433,\u0421\u0435\u043f,\u041e\u043a\u0442,\u041d\u043e\u0435,\u0414\u0435\u043a","day_long":"\u041d\u0435\u0434\u0435\u043b\u044f,\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a,\u0412\u0442\u043e\u0440\u043d\u0438\u043a,\u0421\u0440\u044f\u0434\u0430,\u0427\u0435\u0442\u0432\u044a\u0440\u0442\u044a\u043a,\u041f\u0435\u0442\u044a\u043a,\u0421\u044a\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0435\u043b\u044f","day_short":"\u041d\u0434,\u041f\u043d,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041f\u0442,\u0421\u0431,\u041d\u0434"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bn_dlg.js
new file mode 100644
index 000000000..c7c09fb74
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/br_dlg.js
new file mode 100644
index 000000000..803df2ae5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.template_dlg',{title:"Templates",label:"Template","desc_label":"Descri\u00e7\u00e3o",desc:"Inserir template",select:"Selecionar template",preview:"Pr\u00e9-Visualiza\u00e7\u00e3o",warning:"Aten\u00e7\u00e3o: Atualizar um template com outro pode causar a perda de dados.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Janeiro,Fevereiro,Mar\u00e7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro","months_short":"Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez","day_long":"Domingo,Segunda-Feira,Ter\u00e7a-Feira,Quarta-Feira,Quinta-Feira,Sexta-Feira,S\u00e1bado,Domingo","day_short":"Dom,Seg,Ter,Qua,Qui,Sex,Sab,Dom"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bs_dlg.js
new file mode 100644
index 000000000..89dd021e2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.template_dlg',{title:"Predlo\u0161ci",label:"Predlo\u017eak","desc_label":"Opis",desc:"Umetni sadr\u017eaj predlo\u0161ka",select:"Odaberite predlo\u017eak",preview:"Prikaz",warning:"Upozorenje: Nadopuna predlo\u0161ka novim mo\u017ee uzrokovati gubitak podataka.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"sije\u010danj,velja\u010da,o\u017eujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac","months_short":"sij,velj,o\u017eu,tra,svi,lip,srp,kol,ruj,lis,stu,pro","day_long":"nedjelja,ponedjeljak,utorak,srijeda,\u010detvrtak,petak,subota,nedjelja","day_short":"ned,pon,uto,sri,\u010det,pet,sub,ned"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ca_dlg.js
new file mode 100644
index 000000000..8c713109e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.template_dlg',{title:"Plantilles",label:"Plantilla","desc_label":"Descripci\u00f3",desc:"Insereix el contingut de plantilla predefinit",select:"Seleccioneu una plantilla",preview:"Previsualitzaci\u00f3",warning:"Av\u00eds: Actualitzar una plantilla amb una altra diferent pot provocar p\u00e8rdua d\'informaci\u00f3.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"gener,febrer,mar\u00e7,abril,maig,juny,juliol,agost,setembre,octubre,novembre,desembre","months_short":"gen.,febr.,mar\u00e7,abr.,maig,juny,jul.,ag.,set.,oct.,nov.,des.","day_long":"diumenge,dilluns,dimarts,dimecres,dijous,divendres,dissabte,diumenge","day_short":"dg.,dl.,dt.,dc.,dj.,dv.,ds.,dg."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ch_dlg.js
new file mode 100644
index 000000000..dc428cdbf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.template_dlg',{title:"\u6a21\u677f\u6807\u9898",label:"\u6a21\u677f","desc_label":"\u8bf4\u660e",desc:"\u63d2\u5165\u9884\u8bbe\u6a21\u677f",select:"\u9009\u62e9\u6a21\u677f",preview:"\u9884\u89c8",warning:"\u8b66\u544a\uff1a\u5957\u7528\u4e0d\u540c\u7684\u6a21\u677f\u6709\u53ef\u80fd\u5bfc\u81f4\u5185\u5bb9\u4e22\u5931\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708\uff0c\u4e8c\u6708\uff0c\u53c1\u6708\uff0c\u56db\u6708\uff0c\u4e94\u6708\uff0c\u516d\u6708\uff0c\u4e03\u6708\uff0c\u516b\u6708\uff0c\u4e5d\u6708\uff0c\u5341\u6708\uff0c\u5341\u4e00\u6708\uff0c\u5341\u4e8c\u6708","months_short":"1\u6708\uff0c2\u6708\uff0c3\u6708\uff0c4\u6708\uff0c5\u6708\uff0c6\u6708\uff0c7\u6708\uff0c8\u6708\uff0c9\u6708\uff0c10\u6708\uff0c11\u6708\uff0c12\u6708","day_long":"\u661f\u671f\u65e5\uff0c\u661f\u671f\u4e00\uff0c\u661f\u671f\u4e8c\uff0c\u661f\u671f\u53c1\uff0c\u661f\u671f\u56db\uff0c\u661f\u671f\u4e94\uff0c\u661f\u671f\u516d\uff0c\u661f\u671f\u65e5","day_short":"\u5468\u65e5\uff0c\u5468\u4e00\uff0c\u5468\u4e8c\uff0c\u5468\u53c1\uff0c\u5468\u56db\uff0c\u5468\u4e94\uff0c\u5468\u516d\uff0c\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cn_dlg.js
new file mode 100644
index 000000000..17b614011
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.template_dlg',{title:"\u6a21\u677f",label:"\u6a21\u677f","desc_label":"\u63cf\u8ff0",desc:"\u63d2\u5165\u9884\u6a21\u677f",select:"\u9009\u62e9\u6a21\u677f",preview:"\u9884\u89c8",warning:"\u8b66\u544a:\u5957\u7528\u4e0d\u540c\u7684\u6a21\u677f\u6709\u53ef\u80fd\u5bfc\u81f4\u5185\u5bb9\u4e22\u5931\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u53c1\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u53c1,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u53c1,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cs_dlg.js
new file mode 100644
index 000000000..acf5e146e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.template_dlg',{title:"\u0160ablony",label:"\u0160ablona","desc_label":"Popis",desc:"Vlo\u017eit p\u0159eddefinovan\u00fd obsah ze \u0161ablony",select:"Vybrat \u0161ablonu",preview:"N\u00e1hled",warning:"Upozorn\u011bn\u00ed: Aktualizace \u0161ablony jinou zp\u016fsob\u00ed ztr\u00e1tu dat.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"Leden,\u00danor,B\u0159ezen,Duben,Kv\u011bten,\u010cerven,\u010cervenec,Srpen,Z\u00e1\u0159\u00ed,\u0158\u00edjen,Listopad,Prosinec","months_short":"Led,\u00dano,B\u0159e,Dub,Kv\u011b,\u010cer,\u010cvc,Srp,Z\u00e1\u0159,\u0158\u00edj,Lis,Pro","day_long":"Ned\u011ble,Pond\u011bl\u00ed,\u00dater\u00fd,St\u0159eda,\u010ctvrtek,P\u00e1tek,Sobota,Ned\u011ble","day_short":"Ne,Po,\u00dat,St,\u010ct,P\u00e1,So,Ne"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cy_dlg.js
new file mode 100644
index 000000000..e6b10b2ca
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.template_dlg',{title:"Templedi",label:"Templedi","desc_label":"Disgrifiad",desc:"Mewnosod cynnwys templed rhagosodol",select:"Dewis templed",preview:"Rhagolygiad",warning:"Rhybudd: Gall diweddaru templed gyda un arall achosi colled data.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Ionawr,Chwefror,Mawrth,Ebrill,Mai,Mehefin,Goffennaf,Awst,Medi,Hydref,Tachwedd,Rhagfyr","months_short":"Ion,Chw,Maw,Ebr,Mai,Meh,Gor,Aws,Med,Hyd,Tac,Rha","day_long":"Sul,Llun,Mawrth,Mercher,Iau,Gwener,Sadwrn,Sul","day_short":"Sul,Llu,Maw,Mer,Iau,Gwe,Sad,Sul"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/da_dlg.js
new file mode 100644
index 000000000..5728ce193
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.template_dlg',{title:"Skabeloner",label:"Skabelon","desc_label":"Beskrivelse",desc:"Inds\u00e6t pr\u00e6defineret skabelonindhold",select:"V\u00e6lg en skabelon",preview:"Vis udskrift",warning:"Advarsel: Opdatering af en skabelon med en anden kan betyde datatab.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januar,Februar,Marts,April,Maj,Juni,Juli,August,September,Oktober,November,December","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","day_long":"S\u00f8ndag,Mandag,Tirsdag,Onsdag,Torsdag,Fredag,L\u00f8rdag,S\u00f8ndag","day_short":"S\u00f8n,Man,Tirs,Ons,Tors,Fre,L\u00f8r,S\u00f8n"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/de_dlg.js
new file mode 100644
index 000000000..04c9fa1a8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.template_dlg',{title:"Vorlagen",label:"Vorlage","desc_label":"Beschreibung",desc:"Inhalt aus Vorlage einf\u00fcgen",select:"Vorlage ausw\u00e4hlen",preview:"Vorschau",warning:"Warnung: Eine Vorlage mit einer anderen zu aktualisieren kann zu einem Datenverlust f\u00fchren!","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januar,Februar,M\u00e4rz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember","months_short":"Jan,Feb,M\u00e4r,Apr,Mai,Juni,Juli,Aug,Sept,Okt,Nov,Dez","day_long":"Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag,Sonntag","day_short":"So,Mo,Di,Mi,Do,Fr,Sa,So"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/dv_dlg.js
new file mode 100644
index 000000000..6d8129536
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/el_dlg.js
new file mode 100644
index 000000000..4f5372256
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.template_dlg',{title:"\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03b1",label:"\u03a0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf","desc_label":"\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae",desc:"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03bf\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b3\u03b9\u03b1 \u03c0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03bf \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf",select:"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c0\u03c1\u03bf\u03c4\u03cd\u03c0\u03bf\u03c5",preview:"\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7",warning:"\u03a0\u03c1\u03bf\u03c3\u03bf\u03c7\u03ae : \u0395\u03bd\u03b7\u03bc\u03b5\u03c1\u03ce\u03bd\u03bf\u03bd\u03c4\u03b1\u03c2 \u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03c4\u03c5\u03c0\u03bf \u03bc\u03b5 \u03ad\u03bd\u03b1 \u03ac\u03bb\u03bb\u03bf, \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03c0\u03c1\u03bf\u03ba\u03b1\u03bb\u03ad\u03c3\u03b5\u03b9 \u03b1\u03c0\u03ce\u03bb\u03b5\u03b9\u03b1 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03c9\u03bd.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2,\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2,\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2,\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2,\u039c\u03ac\u03b9\u03bf\u03c2,\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2,\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2,\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2,\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2,\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2,\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2,\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2","months_short":"\u0399\u03b1\u03bd,\u03a6\u03b5\u03b2,\u039c\u03ac\u03c1,\u0391\u03c0\u03c1,\u039c\u03ac\u03b9,\u0399\u03bf\u03cd\u03bd,\u0399\u03bf\u03cd\u03bb,\u0391\u03cd\u03b3,\u03a3\u03b5\u03c0,\u039f\u03ba\u03c4,\u039d\u03bf\u03ad,\u0394\u03b5\u03ba","day_long":"\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae,\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1,\u03a4\u03c1\u03af\u03c4\u03b7,\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7,\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7,\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae,\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf","day_short":"\u039a\u03c5,\u0394\u03b5,\u03a4\u03c1,\u03a4\u03b5\u03c4,\u03a0\u03ad\u03bc,\u03a0\u03b1\u03c1,\u03a3\u03b1\u03b2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/en_dlg.js
new file mode 100644
index 000000000..83e599d68
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert Predefined Template Content",select:"Select a Template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/eo_dlg.js
new file mode 100644
index 000000000..e54079f2e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.template_dlg',{title:"\u015cablonoj",label:"\u015cablono","desc_label":"Priskribo",desc:"Enmeti \u015dablonon",select:"Elekti \u015dablonon",preview:"Anta\u016dvido",warning:"Atentu: \u011cisdatigi \u015dablonon per alia povas ka\u016dzi datumperdon.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januaro,Februaro,Marto,Aprilo,Majo,Junio,Julio,A\u016dgusto,Septembro,Oktobro,Novembro,Decembro","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,A\u016dg,Sep,Okt,Nov,Dec","day_long":"Diman\u0109o,Lundo,Mardo,Merkredo,\u0134a\u016ddo,Vendredo,Sabato,Diman\u0109o","day_short":"Dim,Lun,Mar,Mer,\u0134a\u016d,Ven,Sab,Dim"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/es_dlg.js
new file mode 100644
index 000000000..185e45a45
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.template_dlg',{title:"Plantillas",label:"Plantilla","desc_label":"Descripci\u00f3n",desc:"Insertar contenido de plantilla predefinida",select:"Elegir plantilla",preview:"Vista previa",warning:"Cuidado: Actualizar una plantilla con otra puede causar p\u00e9rdida de datos.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre","months_short":"Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic","day_long":"Domingo,Lunes,Martes,Mi\u00e9rcoles,Jueves,Viernes,S\u00e1bado,Domingo","day_short":"Dom,Lun,Mar,Mie,Jue,Vie,Sab,Dom"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/et_dlg.js
new file mode 100644
index 000000000..a1ad87888
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.template_dlg',{title:"\u0160abloonid",label:"\u0160abloon","desc_label":"Kirjeldus",desc:"Sisesta eeldefineeritud \u0161ablooni sisu",select:"Vali \u0161abloon",preview:"Eelvaade",warning:"Hoiatus: \u0160ablooni uuendamine teistsugusega v\u00f5ib kaasa tuua andmete kaotsiminemist.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Jaanuar,Veebruar,M\u00e4rts,Aprill,Mai,Juuni,Juuli,August,September,Oktoober,November,Detsember","months_short":"Jaan,Veeb,M\u00e4rts,Apr,Mai,Juuni,Juuli,Aug,Sep,Okt,Nov,Dets","day_long":"P\u00fchap\u00e4ev,Esmasp\u00e4ev,Teisip\u00e4ev,Kolmap\u00e4ev,Neljap\u00e4ev,reede,Laup\u00e4ev,P\u00fchap\u00e4ev","day_short":"P,E,T,K,N,R,L,P"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/eu_dlg.js
new file mode 100644
index 000000000..b458e9ae6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.template_dlg',{title:"Txantiloiak",label:"Txantiloia","desc_label":"Deskribapena",desc:"Txertatu aurredefinitutako txantiloi edukia",select:"Aukeratu txantiloia",preview:"Aurreikusi",warning:"Kontuz: Txantiloi bat beste batekin eguneratzeak data galera sor dezake.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Urtarrila,Otsaila,Martxoa,Apirila,Maiatza,Ekaina,Uztaila,Abuztua,Iraila,Urria,Azaroa,Abendua","months_short":"Urt,Ots,Mar,Apr,Mai,Eka,Uzt,Abu,Ira,Urr,Aza,Abe","day_long":"Igandea,Astelehena,Asteartea,Asteazkena,Osteguna,Ostirala,Larunbata,Igandea","day_short":"Ig,Al,As,Az,Og,Or,Lr,Ig"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fa_dlg.js
new file mode 100644
index 000000000..7ee0976c3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.template_dlg',{title:"\u0642\u0627\u0644\u0628 \u0647\u0627",label:"\u0642\u0627\u0644\u0628","desc_label":"\u062a\u0648\u0636\u06cc\u062d",desc:"\u062f\u0631\u062c \u0645\u062d\u062a\u0648\u0627\u06cc \u0642\u0627\u0644\u0628 \u0627\u0632 \u067e\u06cc\u0634 \u062a\u0639\u06cc\u06cc\u0646 \u0634\u062f\u0647",select:"\u0627\u0646\u062a\u062e\u0627\u0628 \u06cc\u06a9 \u0642\u0627\u0644\u0628",preview:"\u067e\u06cc\u0634 \u0646\u0645\u0627\u06cc\u0634",warning:"\u0647\u0634\u062f\u0627\u0631: \u0628\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u06cc\u06a9 \u0642\u0627\u0644\u0628 \u0628\u0627 \u06cc\u06a9 \u0646\u0648\u0639 \u0645\u062a\u0641\u0627\u0648\u062a \u062f\u06cc\u06af\u0631 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0627\u0639\u062b \u0627\u0632 \u062f\u0633\u062a \u0631\u0641\u062a\u0646 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0634\u0648\u062f.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0698\u0627\u0646\u0648\u06cc\u0647,\u0641\u0648\u0631\u06cc\u0647,\u0645\u0627\u0631\u0633,\u0622\u0648\u0631\u06cc\u0644,\u0645\u0647,\u0698\u0648\u0626\u0646,\u0698\u0648\u0626\u06cc\u0647,\u0627\u0648\u062a,\u0633\u067e\u062a\u0627\u0645\u0628\u0631,\u0627\u06a9\u062a\u0628\u0631,\u0646\u0648\u0627\u0645\u0628\u0631,\u062f\u0633\u0627\u0645\u0628\u0631","months_short":"\u0698\u0627\u0646\u0648\u06cc\u0647,\u0641\u0648\u0631\u06cc\u0647,\u0645\u0627\u0631\u0633,\u0622\u0648\u0631\u06cc\u0644,\u0645\u0647,\u0698\u0648\u0626\u0646,\u0698\u0648\u0626\u06cc\u0647,\u0627\u0648\u062a,\u0633\u067e\u062a\u0627\u0645\u0628\u0631,\u0627\u06a9\u062a\u0628\u0631,\u0646\u0648\u0627\u0645\u0628\u0631,\u062f\u0633\u0627\u0645\u0628\u0631","day_long":"\u06cc\u06a9\u0634\u0646\u0628\u0647,\u062f\u0648\u0634\u0646\u0628\u0647,\u0633\u0647 \u0634\u0646\u0628\u0647,\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647,\u067e\u0646\u062c \u0634\u0646\u0628\u0647,\u062c\u0645\u0639\u0647,\u0634\u0646\u0628\u0647,\u06cc\u06a9\u0634\u0646\u0628\u0647","day_short":"\u06cc\u06a9\u0634\u0646\u0628\u0647,\u062f\u0648\u0634\u0646\u0628\u0647,\u0633\u0647 \u0634\u0646\u0628\u0647,\u0686\u0647\u0627\u0631\u0634\u0646\u0628\u0647,\u067e\u0646\u062c \u0634\u0646\u0628\u0647,\u062c\u0645\u0639\u0647,\u0634\u0646\u0628\u0647,\u06cc\u06a9\u0634\u0646\u0628\u0647"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fi_dlg.js
new file mode 100644
index 000000000..d3ce43703
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.template_dlg',{title:"Sivupohjat",label:"Sivupohja","desc_label":"Kuvaus",desc:"Lis\u00e4\u00e4 esim\u00e4\u00e4ritetty\u00e4 sivupohjasis\u00e4lt\u00f6\u00e4",select:"Valitse sivupohja",preview:"Esikatselu",warning:"Varoitus: Sivupohjan p\u00e4ivitt\u00e4minen toisella saattaa aiheuttaa tiedon menetyksen.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"Tammikuu,Helmikuu,Maaliskuu,Huhtikuu,Toukokuu,Kes\u00e4kuu,Hein\u00e4kuu,Elokuu,Syyskuu,Lokakuu,Marraskuu,Joulukuu","months_short":"Tammi,Helmi,Maalis,Huhti,Touko,Kes\u00e4,Hein\u00e4,Elo,Syys,Loka,Marras,Joulu","day_long":"sunnuntai,maanantai,tiistai,keskiviikko,torstai,perjantai,lauantai,sunnuntai","day_short":"su,ma,ti,ke,to,pe,la,su"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fr_dlg.js
new file mode 100644
index 000000000..a9ee12412
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.template_dlg',{title:"Mod\u00e8les",label:"Mod\u00e8le","desc_label":"Description",desc:"Ins\u00e9rer un mod\u00e8le pr\u00e9d\u00e9fini",select:"Choisir un mod\u00e8le",preview:"Pr\u00e9visualisation",warning:"Attention : Mettre \u00e0 jour un mod\u00e8le pour un autre peut entra\u00eener une perte de donn\u00e9es !","mdate_format":"%d/%m/%Y %H:%M:%S","cdate_format":"%d/%m/%Y %H:%M:%S","months_long":"Janvier,F\u00e9vrier,Mars,Avril,Mai,Juin,Juillet,Ao\u00fbt,Septembre,Octobre,Novembre,D\u00e9cembre","months_short":"Jan,F\u00e9v,Mar,Avr,Mai,Juin,Juil,Ao\u00fbt,Sep,Oct,Nov,D\u00e9c","day_long":"Dimanche,Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche","day_short":"Dim,Lun,Mar,Mer,Jeu,Ven,Sam,Dim"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/gl_dlg.js
new file mode 100644
index 000000000..b74388bb1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.template_dlg',{title:"Plantillas",label:"Plantilla","desc_label":"Descripci\u00f3n",desc:"Insertar contido de plantilla predefinida",select:"Seleccionar plantilla",preview:"Vista previa",warning:"Coidado: Actualizar unha plantilla con outra pode causar p\u00e9rdida de datos.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Xaneito,Febreiro,Marzo,Abril,Maio,Xu\u00f1o,Xullo,Agosto,Setembro,Outubro,Novembro,Decembro","months_short":"Xan,Feb,Mar,Abr,Mai,Xu\u00f1,Xul,Ago,Set,Out,Nov,Dec","day_long":"Domingo,Luns,Martes,M\u00e9rcores,Xoves,Venres,S\u00e1bado,Domingo","day_short":"Dom,Lun,Mar,M\u00e9r,Xov,Ver,S\u00e1b,Dom"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/gu_dlg.js
new file mode 100644
index 000000000..14755e899
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/he_dlg.js
new file mode 100644
index 000000000..cb2f785f1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.template_dlg',{title:"\u05ea\u05d1\u05e0\u05d9\u05d5\u05ea",label:"\u05ea\u05d1\u05e0\u05d9\u05ea","desc_label":"\u05ea\u05d9\u05d0\u05d5\u05e8",desc:"Insert predefined template content",select:"\u05d1\u05d7\u05e8 \u05ea\u05d1\u05e0\u05d9\u05ea",preview:"\u05ea\u05e6\u05d5\u05d2\u05d4 \u05de\u05e7\u05d3\u05d9\u05de\u05d4",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"\u05e8\u05d0\u05e9\u05d5\u05df,\u05e9\u05e0\u05d9,\u05e9\u05dc\u05d9\u05e9\u05d9,\u05e8\u05d1\u05d9\u05e2\u05d9,\u05d7\u05de\u05d9\u05e9\u05d9,\u05e9\u05d9\u05e9\u05d9,\u05e9\u05d1\u05ea","day_short":"\u05e8\u05d0\u05e9\u05d5\u05df,\u05e9\u05e0\u05d9,\u05e9\u05dc\u05d9\u05e9\u05d9,\u05e8\u05d1\u05d9\u05e2\u05d9,\u05d7\u05de\u05d9\u05e9\u05d9,\u05e9\u05d9\u05e9\u05d9,\u05e9\u05d1\u05ea"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hi_dlg.js
new file mode 100644
index 000000000..35f38ddda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hr_dlg.js
new file mode 100644
index 000000000..c2bce38a5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.template_dlg',{title:"Predlo\u0161ci",label:"Predlo\u017eak","desc_label":"Opis",desc:"Umetni predefinirani sadr\u017eaj predlo\u0161ka",select:"Odaberite predlo\u017eak",preview:"Predpregled",warning:"Upozorenje: A\u017euriranje predlo\u0161ka novim mo\u017ee uzrokovati gubitak podataka.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"sije\u010danj,velja\u010da,o\u017eujak,travanj,svibanj,lipanj,srpanj,kolovoz,rujan,listopad,studeni,prosinac","months_short":"sij,velj,o\u017eu,tra,svi,lip,srp,kol,ruj,lis,stu,pro","day_long":"nedjelja,ponedjeljak,utorak,srijeda,\u010detvrtak,petak,subota,nedjelja","day_short":"ned,pon,uto,sri,\u010det,pet,sub,ned"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hu_dlg.js
new file mode 100644
index 000000000..b28de5b98
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.template_dlg',{title:"Sablon beilleszt\u00e9se",label:"Sablon","desc_label":"Le\u00edr\u00e1s",desc:"Sablon beilleszt\u00e9se",select:"Sablon v\u00e1laszt\u00e1sa",preview:"El\u0151n\u00e9zet",warning:"Figyelem: Egy m\u00e1r alkalmazott sablon friss\u00edt\u00e9se m\u00e1sikkal adatveszt\u00e9ssel j\u00e1rhat.","mdate_format":"%Y.%m.%d. %H:%M:%S","cdate_format":"%Y.%m.%d. %H:%M:%S","months_long":"janu\u00e1r,febru\u00e1r,m\u00e1rcius,\u00e1prilis,m\u00e1jus,j\u00fanius,j\u00falius,augusztus,szeptember,okt\u00f3ber,november,december","months_short":"jan,feb,m\u00e1r,\u00e1pr,m\u00e1j,j\u00fan,j\u00fal,aug,szep,okt,nov,dec","day_long":"vas\u00e1rnap,h\u00e9tf\u0151,kedd,szerda,cs\u00fct\u00f6rt\u00f6k,p\u00e9ntek,szombat,vas\u00e1rnap","day_short":"V,H,K,Sze,Cs,P,Szo,V"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hy_dlg.js
new file mode 100644
index 000000000..447eec34b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.template_dlg',{title:"\u0428\u0430\u0431\u043b\u043e\u043d\u044b",label:"\u0428\u0430\u0431\u043b\u043e\u043d","desc_label":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442",select:"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d",preview:"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440",warning:"\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u0442\u0435\u0440\u044f\u043c \u0434\u0430\u043d\u043d\u044b\u0445","mdate_format":"% Y-% m-% d% H:% M:% S","cdate_format":"% Y-% m-% d% H:% M:% S","months_long":"\u044f\u043d\u0432\u0430\u0440\u044c, \u0444\u0435\u0432\u0440\u0430\u043b\u044c, \u043c\u0430\u0440\u0442, \u0430\u043f\u0440\u0435\u043b\u044c, \u043c\u0430\u0439, \u0438\u044e\u043d\u044c, \u0438\u044e\u043b\u044c, \u0430\u0432\u0433\u0443\u0441\u0442, \u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c, \u043e\u043a\u0442\u044f\u0431\u0440\u044c, \u043d\u043e\u044f\u0431\u0440\u044c, \u0434\u0435\u043a\u0430\u0431\u0440\u044c","months_short":"\u044f\u043d\u0432\u0430\u0440\u044c, \u0444\u0435\u0432\u0440\u0430\u043b\u044c, \u043c\u0430\u0440\u0442, \u0430\u043f\u0440\u0435\u043b\u044c, \u043c\u0430\u0439, \u0438\u044e\u043d\u044c, \u0438\u044e\u043b\u044c, \u0430\u0432\u0433\u0443\u0441\u0442, \u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c, \u041e\u043a\u0442\u044f\u0431\u0440\u044c, \u041d\u043e\u044f\u0431\u0440\u044c, \u0414\u0435\u043a\u0430\u0431\u0440\u044c","day_long":"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435, \u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a, \u0432\u0442\u043e\u0440\u043d\u0438\u043a, \u0441\u0440\u0435\u0434\u0430, \u0447\u0435\u0442\u0432\u0435\u0440\u0433, \u043f\u044f\u0442\u043d\u0438\u0446\u0443, \u0441\u0443\u0431\u0431\u043e\u0442\u0443, \u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435","day_short":"\u0412\u0441, \u041f\u043d, \u0412\u0442, \u0421\u0440, \u0427\u0442, \u041f\u0442, \u0421\u0431, \u0412\u0441"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ia_dlg.js
new file mode 100644
index 000000000..4c2b11430
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.template_dlg',{title:"\u6a21\u677f\u6e05\u5355",label:"\u8303\u672c","desc_label":"\u63cf\u8ff0",desc:"\u63d2\u5165\u9009\u5b9a\u7684\u8303\u672c",select:"\u9009\u62e9\u6a21\u677f",preview:"\u9884\u89c8",warning:"\u8b66\u544a: \u66f4\u65b0\u6a21\u677f\u6709\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u4e22\u5931","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/id_dlg.js
new file mode 100644
index 000000000..27a930057
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Menyisipkan template standar isi",select:"Select a template",preview:"Preview",warning:"Warning: mengupdate template yang berbeda dapat menyebabkan kehilangan data","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januari,Februari,Maren,April,Mei,Juni,Juli,Agustus,September,Oktober,November,Desember","months_short":"Jan,Feb,Mar,Apr,Mei,Jun,Jul,Ags,Sep,Okt,Nov,Des","day_long":"Minggu,Senin,Selasa,Rabu,Kamis,Jumat,Sabtu,Minggu","day_short":"Min,Sen,Sel,Rab,Kam,Jum,Sab,Min"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/is_dlg.js
new file mode 100644
index 000000000..c84fb1753
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.template_dlg',{title:"Sni\u00f0",label:"Sni\u00f0","desc_label":"L\u00fdsing",desc:"Setja inn tilb\u00fai\u00f0 sni\u00f0",select:"Velja sni\u00f0",preview:"Sko\u00f0a",warning:"Vi\u00f0v\u00f6run: Me\u00f0 \u00fev\u00ed a\u00f0 uppf\u00e6ra sni\u00f0 \u00f6\u00f0ru sni\u00f0i g\u00e6ti leitt til \u00feess a\u00f0 g\u00f6gn t\u00fdnist.","mdate_format":"%d. %m %Y %H:%M:%S","cdate_format":"%d. %m %Y %H:%M:%S","months_long":"jan\u00faar,febr\u00faar,mars,apr\u00edl,ma\u00ed,j\u00fan\u00ed,j\u00fal\u00ed,\u00e1g\u00fast,september,okt\u00f3ber,n\u00f3vember,desember","months_short":"jan,feb,mar,apr,ma\u00ed,j\u00fan,j\u00fal,\u00e1g\u00fa,sep,okt,nov,des","day_long":"sunnudagur,m\u00e1nudagur,\u00feri\u00f0judagur,mi\u00f0vikudagur,fimmtudagur,f\u00f6studagur,laugardagur,sunnudagur","day_short":"sun,m\u00e1n,\u00feri,mi\u00f0,fim,f\u00f6s,lau,sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/it_dlg.js
new file mode 100644
index 000000000..78abd1f09
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.template_dlg',{title:"Modelli",label:"Modello","desc_label":"Descrizione",desc:"Inserisci contenuto da modello predefinito",select:"Seleziona un modello",preview:"Anteprima",warning:"Attenzione: Aggiornare un modello con un altro differente pu\u00f2 causare perdite di dati.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Gennaio,Febbraio,Marzo,Aprile,Maggio,Giugno,Luglio,Agosto,Settembre,Ottobre,Novembre,Dicembre","months_short":"Gen,Feb,Mar,Apr,Mag,Giu,Lug,Ago,Set,Ott,Nov,Dic","day_long":"Domenica,Luned\u00ec,Marted\u00ec,Mercoled\u00ec,Gioved\u00ec,Venerd\u00ec,Sabato,Domenica","day_short":"Dom,Lun,Mar,Mer,Gio,Ven,Sab,Dom"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ja_dlg.js
new file mode 100644
index 000000000..4aae93377
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.template_dlg',{title:"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8",label:"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8","desc_label":"\u8aac\u660e",desc:"\u5b9a\u7fa9\u6e08\u307f\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u633f\u5165",select:"\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u9078\u629e",preview:"\u30d7\u30ec\u30d3\u30e5\u30fc",warning:"\u8b66\u544a\uff1a\u7570\u306a\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u66f4\u65b0\u3059\u308b\u3068\u30c7\u30fc\u30bf\u3092\u5931\u3046\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","months_short":"1,2,3,4,5,6,7,8,9,10,11,12","day_long":"\u65e5\u66dc\u65e5,\u6708\u66dc\u65e5,\u706b\u66dc\u65e5,\u6c34\u66dc\u65e5,\u6728\u66dc\u65e5,\u91d1\u66dc\u65e5,\u571f\u66dc\u65e5,\u65e5\u66dc\u65e5","day_short":"(\u65e5),(\u6708),(\u706b),(\u6c34),(\u6728),(\u91d1),(\u571f),(\u65e5)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ka_dlg.js
new file mode 100644
index 000000000..30605c2e2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.template_dlg',{title:"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d4\u10d1\u10d8",label:"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8","desc_label":"\u10d0\u10e6\u10ec\u10d4\u10e0\u10d0",desc:"\u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0",select:"\u10d0\u10d8\u10e0\u10e9\u10d8\u10d4\u10d7 \u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8",preview:"\u10d3\u10d0\u10d7\u10d5\u10d0\u10da\u10d8\u10e0\u10d4\u10d1\u10d0",warning:"\u10e7\u10e3\u10e0\u10d0\u10d3\u10e6\u10d4\u10d1\u10d0: \u10e8\u10d0\u10d1\u10da\u10dd\u10dc\u10d8\u10e1 \u10d0\u10e0\u10e9\u10d4\u10d5\u10d0\u10db \u10e8\u10d4\u10d8\u10eb\u10da\u10d4\u10d1\u10d0 \u10d2\u10d0\u10db\u10dd\u10d8\u10ec\u10d5\u10d8\u10dd\u10e1 \u10db\u10dd\u10dc\u10d0\u10ea\u10d4\u10db\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10d9\u10d0\u10e0\u10d2\u10d5\u10d0/","mdate_format":"%Y.%m.%d %H:%M:%S","cdate_format":"%Y.%m.%d %H:%M:%S","months_long":"\u10d8\u10d0\u10dc\u10d5\u10d0\u10e0\u10d8,\u10d7\u10d4\u10d1\u10d4\u10e0\u10d5\u10d0\u10da\u10d8,\u10db\u10d0\u10e0\u10e2\u10d8,\u10d0\u10de\u10e0\u10d8\u10da\u10d8,\u10db\u10d0\u10d8\u10e1\u10d8,\u10d8\u10d5\u10dc\u10d8\u10e1\u10d8,\u10d8\u10d5\u10da\u10d8\u10e1\u10d8,\u10d0\u10d2\u10d5\u10d8\u10e1\u10e2\u10dd,\u10e1\u10d4\u10e5\u10e2\u10d4\u10db\u10d1\u10d4\u10e0\u10d8,\u10dd\u10e5\u10e2\u10dd\u10db\u10d1\u10d4\u10e0\u10d8,\u10dc\u10dd\u10d4\u10db\u10d1\u10d4\u10e0\u10d8,\u10d3\u10d4\u10d9\u10d4\u10db\u10d1\u10d4\u10e0\u10d8","months_short":"\u10d8\u10d0\u10dc,\u10d7\u10d4\u10d1,\u10db\u10d0\u10e0\u10e2,\u10d0\u10de\u10e0,\u10db\u10d0\u10d8\u10e1\u10d8,\u10d8\u10d5\u10dc,\u10d8\u10d5\u10da,\u10d0\u10d2\u10d5,\u10e1\u10d4\u10e5,\u10dd\u10e5\u10e2,\u10dc\u10dd\u10d4\u10db,\u10d3\u10d4\u10d9","day_long":"\u10d9\u10d5\u10d8\u10e0\u10d0,\u10dd\u10e0\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10e1\u10d0\u10db\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10dd\u10d7\u10ee\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10ee\u10e3\u10d7\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10de\u10d0\u10e0\u10d0\u10e1\u10d9\u10d4\u10d5\u10d8,\u10e8\u10d0\u10d1\u10d0\u10d7\u10d8,\u10d9\u10d5\u10d8\u10e0\u10d0","day_short":"\u10d9\u10d5,\u10dd\u10e0\u10e8,\u10e1\u10d0\u10db\u10e8,\u10dd\u10d7\u10ee\u10e8,\u10ee\u10e3\u10d7,\u10de\u10d0\u10e0,\u10e8\u10d0\u10d1,\u10d9\u10d5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/kl_dlg.js
new file mode 100644
index 000000000..65c9b032f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/km_dlg.js
new file mode 100644
index 000000000..706b4c9c0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.template_dlg',{title:"\u1796\u17bb\u1798\u17d2\u1796",label:"\u1796\u17bb\u1798\u17d2\u1796","desc_label":"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6",desc:"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1798\u17b6\u178f\u17b7\u1780\u17b6\u1796\u17bb\u1798\u17d2\u1796\u178a\u17c2\u179b\u1794\u17b6\u1793\u1780\u17c6\u178e\u178f\u17cb\u1787\u17b6\u1798\u17bb\u1793",select:"\u1787\u17d2\u179a\u17be\u179f\u1796\u17bb\u1798\u17d2\u1796\u1798\u17bd\u1799",preview:"\u1798\u17be\u179b\u1787\u17b6\u1798\u17bb\u1793",warning:"\u1780\u17b6\u179a\u1796\u17d2\u179a\u1798\u17b6\u1793\u17d6 \u1780\u17b6\u179a\u1794\u1793\u17d2\u1791\u17b6\u1793\u17cb\u179f\u1798\u17d0\u1799\u1787\u17b6\u1798\u17bd\u1799\u1793\u17b9\u1784\u1796\u17bb\u1798\u17d2\u1796\u1790\u17d2\u1798\u17b8\u17a2\u17b6\u1785\u1794\u178e\u17d2\u178f\u17b6\u179b\u17b2\u17d2\u1799\u1794\u17b6\u178f\u17cb\u1794\u1784\u17cb\u1791\u17b7\u1793\u17d2\u1793\u1793\u17d0\u1799\u00a0\u17d4","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u1781\u17c2\u1798\u1780\u179a\u17b6,\u1781\u17c2\u1780\u17bb\u1798\u17d2\u1797\u17c8,\u1781\u17c2\u1798\u17b8\u1793\u17b6,\u1781\u17c2\u1798\u17c1\u179f\u17b6,\u1781\u17c2\u17a7\u179f\u1797\u17b6,\u1781\u17c2\u1798\u17b7\u1790\u17bb\u1793\u17b6,\u1781\u17c2\u1780\u1780\u17d2\u1780\u178a\u17b6,\u1781\u17c2\u179f\u17b8\u17a0\u17b6,\u1781\u17c2\u1780\u1789\u17d2\u1789\u17b6,\u1781\u17c2\u178f\u17bb\u179b\u17b6,\u1781\u17c2\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6,\u1781\u17c2\u1792\u17d2\u1793\u17bc","months_short":"\u1798\u1780\u179a\u17b6,\u1780\u17bb\u1798\u17d2\u1797\u17c8,\u1798\u17b8\u1793\u17b6,\u1798\u17c1\u179f\u17b6,\u17a7\u179f\u1797\u17b6,\u1798\u17b7\u1790\u17bb\u1793\u17b6,\u1780\u1780\u17d2\u1780\u178a\u17b6,\u179f\u17b8\u17a0\u17b6,\u1780\u1789\u17d2\u1789\u17b6,\u178f\u17bb\u179b\u17b6,\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6,\u1792\u17d2\u1793\u17bc","day_long":"\u1790\u17d2\u1784\u17c3\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799,\u1790\u17d2\u1784\u17c3\u1785\u17d0\u1793\u17d2\u1791,\u1790\u17d2\u1784\u17c3\u17a2\u1784\u17d2\u1782\u17b6\u179a,\u1790\u17d2\u1784\u17c3\u1796\u17bb\u1792,\u1790\u17d2\u1784\u17c3\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd,\u1790\u17d2\u1784\u17c3\u179f\u17bb\u1780\u17d2\u179a,\u1790\u17d2\u1784\u17c3\u179f\u17c5\u179a\u17cd,\u1790\u17d2\u1784\u17c3\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799","day_short":"\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799,\u1785\u17d0\u1793\u17d2\u1791,\u17a2\u1784\u17d2\u1782\u17b6\u179a,\u1796\u17bb\u1792,\u1796\u17d2\u179a\u17a0\u179f\u17d2\u1794\u178f\u17b7\u17cd,\u179f\u17bb\u1780\u17d2\u179a,\u179f\u17c5\u179a\u17cd,\u17a2\u17b6\u1791\u17b7\u178f\u17d2\u1799"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ko_dlg.js
new file mode 100644
index 000000000..3919ced43
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.template_dlg',{title:"\ud15c\ud50c\ub9bf",label:"\ud15c\ud50c\ub9bf","desc_label":"\uc124\uba85",desc:"\ubbf8\ub9ac \uc815\uc758\ub41c \ud15c\ud50c\ub9bf \uc0bd\uc785",select:"\ud15c\ud50c\ub9bf \uc120\ud0dd",preview:"\ubbf8\ub9ac \ubcf4\uae30",warning:"\uacbd\uace0: \ub2e4\ub978 \ud15c\ud50c\ub9bf\uc73c\ub85c \ubcc0\uacbd\ud558\uba74 \ub370\uc774\ud130\uac00 \uc720\uc2e4\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"1\uc6d4,2\uc6d4,3\uc6d4,4\uc6d4,5\uc6d4,6\uc6d4,7\uc6d4,8\uc6d4,9\uc6d4,10\uc6d4,11\uc6d4,12\uc6d4","months_short":"1,2,3,4,5,6,7,8,9,10,11,12","day_long":"\uc77c\uc694\uc77c,\uc6d4\uc694\uc77c,\ud654\uc694\uc77c,\uc218\uc694\uc77c,\ubaa9\uc694\uc77c,\uae08\uc694\uc77c,\ud1a0\uc694\uc77c,\uc77c\uc694\uc77c","day_short":"\uc77c,\uc6d4,\ud654,\uc218,\ubaa9,\uae08,\ud1a0,\uc77c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/kz_dlg.js
new file mode 100644
index 000000000..9b70dc19e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert Predefined Template Content",select:"Select a Template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lb_dlg.js
new file mode 100644
index 000000000..206a8435b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.template_dlg',{title:"Virlagen",label:"Virlag","desc_label":"Beschreiwung",desc:"Virgef\u00e4erdegte Virlageninhalt af\u00fcgen",select:"Virlag auswielen",preview:"Virschau",warning:"Warnung: Eng Virlag mat enger anerer ze aktualis\u00e9iere kann zu Dateverloscht f\u00e9ieren!","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januar,Februar,M\u00e4erz,Abr\u00ebll,Mee,Juni,Juli,August,September,Oktober,November,Dezember","months_short":"Jan,Feb,M\u00e4erz,Abr,Mee,Juni,Juli,Aug,Sept,Okt,Nov,Dez","day_long":"Sonndeg,M\u00e9indeg,D\u00ebnschdeg,M\u00ebttwoch,Donneschdeg,Freides,Samschdeg,Sonndeg","day_short":"So,M\u00e9,D\u00eb,M\u00eb,Do,Fr,Sa,So"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lt_dlg.js
new file mode 100644
index 000000000..2a28ead94
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.template_dlg',{title:"\u0160ablonai",label:"\u0160ablonas","desc_label":"Apra\u0161as",desc:"\u012eterpti numatyt\u0105 \u0161ablono turin\u012f",select:"Pasirinkti \u0161ablon\u0105",preview:"Per\u017ei\u016bra",warning:"Persp\u0117jimas: \u0160ablono pakeitimas kitu gali sukelti duomen\u0173 praradim\u0105.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Sausis,Vasaris,Kovas,Balandis,Gegu\u017e\u0117,Bir\u017eelis,Liepa,Rugpj\u016btis,Rugs\u0117jis,Spalis,Lapkritis,Gruodis","months_short":"Sau,Vas,Kov,Bal,Geg,Bir,Lie,Rugpj,Rugs,Spa,Lapkr,Gruo","day_long":"Sekmadienis,Pirmadienis,Antradienis,Tre\u010diadienis,Ketvirtadienis,Penktadienis,\u0160e\u0161tadienis,Sekmadienis","day_short":"Sekm,Pirm,Antr,Tre\u010d,Ketv,Penk,\u0160e\u0161t,Sekm"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lv_dlg.js
new file mode 100644
index 000000000..e6c59f99d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/mk_dlg.js
new file mode 100644
index 000000000..5e47b4f7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.template_dlg',{title:"\u041f\u0440\u0438\u043c\u0435\u0440\u043e\u0446\u0438",label:"\u041f\u0440\u0438\u043c\u0435\u0440\u043e\u043a","desc_label":"\u041e\u043f\u0438\u0441",desc:"\u0412\u043d\u0435\u0441\u0438 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430 \u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0442",select:"\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043a",preview:"\u041f\u0440\u0435\u0433\u043b\u0435\u0434",warning:"\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0443\u0432\u0430\u045a\u0435: \u0410\u0436\u0443\u0440\u0438\u0440\u0430\u045a\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043a\u043e\u0442 \u0441\u043e \u0434\u0440\u0443\u0433 \u043c\u043e\u0436\u0435 \u0434\u0430 \u0440\u0435\u0437\u0443\u043b\u0442\u0438\u0440\u0430 \u0432\u043e \u0437\u0430\u0433\u0443\u0431\u0430 \u043d\u0430 \u043f\u043e\u0434\u0430\u0442\u043e\u0446\u0438\u0442\u0435.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"\u0408\u0430\u043d\u0443\u0430\u0440\u0438,\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438,\u041c\u0430\u0440\u0442,\u0410\u043f\u0440\u0438\u043b,\u041c\u0430\u0458,\u0408\u0443\u043d\u0438,\u0408\u0443\u043b\u0438,\u0410\u0432\u0433\u0443\u0441\u0442,\u0421\u0435\u043f\u0442\u0435\u043c\u0432\u0440\u0438,\u041e\u043a\u0442\u043e\u043c\u0432\u0440\u0438,\u041d\u043e\u0435\u043c\u0432\u0440\u0438,\u0414\u0435\u043a\u0435\u043c\u0432\u0440\u0438","months_short":"\u0408\u0430\u043d,\u0424\u0435\u0432,\u041c\u0430\u0440,\u0410\u043f\u0440,\u041c\u0430\u0458,\u0408\u0443\u043d,\u0408\u0443\u043b,\u0410\u0432\u0433,\u0421\u0435\u043f,\u041e\u043a\u0442,\u041d\u043e\u0435,\u0414\u0435\u043a","day_long":"\u041d\u0435\u0434\u0435\u043b\u0430,\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u043d\u0438\u043a,\u0412\u0442\u043e\u0440\u043d\u0438\u043a,\u0421\u0440\u0435\u0434\u0430,\u0427\u0435\u0442\u0432\u0440\u0442\u043e\u043a,\u041f\u0435\u0442\u043e\u043a,\u0421\u0430\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0435\u043b\u0430","day_short":"\u041d\u0435\u0434,\u041f\u043e\u043d,\u0412\u0442\u043e,\u0421\u0440\u0435,\u0427\u0435\u0442,\u041f\u0435\u0442,\u0421\u0430\u0431,\u041d\u0435\u0434"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ml_dlg.js
new file mode 100644
index 000000000..ce9cc5f6f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f, \u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f, \u0d2e\u0d3e\u0d30\u0d4d\u200d\u0d1a\u0d4d\u0d1a\u0d41\u0d4d, \u0d0f\u0d2a\u0d4d\u0d30\u0d3f\u0d32\u0d4d\u200d, \u0d2e\u0d46\u0d2f\u0d4d, \u0d1c\u0d41\u0d23\u0d4d\u200d, \u0d1c\u0d42\u0d32\u0d3e\u0d2f\u0d4d, \u0d06\u0d17\u0d38\u0d4d\u0d24\u0d4d, \u0d38\u0d46\u0d2a\u0d4d\u0d24\u0d02\u0d2c\u0d30\u0d4d\u200d, \u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d30\u0d4d\u200d, \u0d28\u0d35\u0d02\u0d2c\u0d30\u0d4d\u200d, \u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d30\u0d4d\u200d","months_short":"\u0d1c\u0d28\u0d41, \u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41, \u0d2e\u0d3e\u0d30\u0d4d\u200d, \u0d0f\u0d2a\u0d4d\u0d30\u0d3f, \u0d2e\u0d46, \u0d1c\u0d41\u0d23\u0d4d\u200d, \u0d1c\u0d42\u0d32\u0d3e, \u0d06\u0d17, \u0d38\u0d46\u0d2a\u0d4d\u0d24\u0d02, \u0d12\u0d15\u0d4d\u0d1f\u0d4b, \u0d28\u0d35\u0d02, \u0d21\u0d3f\u0d38\u0d02","day_long":"\u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d, \u0d24\u0d3f\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d, \u0d1a\u0d4a\u0d35\u0d4d\u0d35, \u0d2c\u0d41\u0d27\u0d28\u0d4d\u200d, \u0d35\u0d4d\u0d2f\u0d3e\u0d34\u0d02, \u0d35\u0d46\u0d33\u0d4d\u0d33\u0d3f, \u0d36\u0d28\u0d3f, \u0d1e\u0d3e\u0d2f\u0d30\u0d4d\u200d","day_short":"\u0d1e\u0d3e, \u0d24\u0d3f, \u0d1a\u0d4a, \u0d2c\u0d41, \u0d35\u0d4d\u0d2f\u0d3e, \u0d35\u0d46, \u0d36, \u0d1e\u0d3e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/mn_dlg.js
new file mode 100644
index 000000000..2d053438d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.template_dlg',{title:"\u0425\u044d\u0432",label:"\u0425\u044d\u0432","desc_label":"\u0422\u0430\u0439\u043b\u0431\u0430\u0440",desc:"\u0411\u044d\u043b\u0442\u0433\u044d\u0441\u044d\u043d \u0445\u044d\u0432 \u043e\u0440\u0443\u0443\u043b\u0430\u0445",select:"\u0425\u044d\u0432 \u0441\u043e\u043d\u0433\u043e\u0445",preview:"\u041d\u044f\u0433\u0442\u043b\u0430\u043d \u0445\u0430\u0440\u0430\u0445",warning:"\u0421\u0430\u043d\u0430\u043c\u0436: \u0425\u044d\u0432 \u04e9\u04e9\u0440 \u0448\u0438\u043d\u044d\u0447\u043b\u044d\u0445\u044d\u0434 \u04e9\u0433\u04e9\u0433\u0434\u043b\u0438\u0439\u043d \u0430\u043b\u0434\u0430\u0433\u0434\u0430\u043b \u0433\u0430\u0440\u0447 \u0431\u043e\u043b\u0437\u043e\u0448\u0433\u04af\u0439!","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0425\u0443\u043b\u0433\u0430\u043d\u0430,\u04ae\u0445\u044d\u0440,\u0411\u0430\u0440,\u0422\u0443\u0443\u043b\u0430\u0439,\u041b\u0443\u0443,\u041c\u043e\u0433\u043e\u0439,\u041c\u043e\u0440\u044c,\u0425\u043e\u043d\u044c,\u0411\u0438\u0447,\u0422\u0430\u0445\u0438\u0430,\u041d\u043e\u0445\u043e\u0439,\u0413\u0430\u0445\u0430\u0439","months_short":"\u0425\u0443\u043b,\u04ae\u0445\u044d,\u0411\u0430\u0440,\u0422\u0443\u0443,\u041b\u0443\u0443,\u041c\u043e\u0433,\u041c\u043e\u0440,\u0425\u043e\u043d,\u0411\u0438\u0447,\u0422\u0430\u0445,\u041d\u043e\u0445,\u0413\u0430\u0445","day_long":"\u041d\u044f\u043c,\u0414\u0430\u0432\u0430\u0430,\u041c\u044f\u0433\u043c\u0430\u0440,\u041b\u0445\u0430\u0433\u0432\u0430,\u041f\u04af\u0440\u044d\u0432,\u0411\u0430\u0430\u0441\u0430\u043d,\u0411\u044f\u043c\u0431\u0430,\u041d\u044f\u043c","day_short":"\u041d\u044f,\u0414\u0430,\u041c\u044f,\u041b\u0445,\u041f\u04af,\u0411\u0430,\u0411\u044f,\u041d\u044f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ms_dlg.js
new file mode 100644
index 000000000..52a065480
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.template_dlg',{title:"Templet",label:"Templet","desc_label":"Huraian",desc:"Masukkan pra takrifan kandungan templet",select:"Pilih templet",preview:"Pratonton",warning:"Amaran: Memperbaharui template dengan yang lain akan menyebabkan kehilangan data.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januari,Febuari,Mac,April,Mei,Jun,Julai,Ogos,September,Oktober,November,Disember","months_short":"Jan,Feb,Mac,Apr,Mei,Jun,Jul,Ogo,Sep,Okt,Nov,Dis","day_long":"Ahad,Isnin,Selasa,Rabu,Khamis,Jumaat,Sabtu,Ahad","day_short":"Aha,Isn,Sel,Rab,Kha,Jum,Sab,Aha"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/my_dlg.js
new file mode 100644
index 000000000..2f663ae9b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.template_dlg',{"mdate_format":"\">%Y-\u1001\u102f\u1014\u103e\u1005\u103a\u104a %B\u101c\u104a %d-\u101b\u1000\u103a\u1031\u1014\u1037 %H \u1014\u102c\u101b\u102e : %M \u1019\u102d\u1014\u1005\u103a : %S \u1005\u1000\u1039\u1000\u1014\u103a\u1037","cdate_format":"%Y-\u1001\u102f\u1014\u103e\u1005\u103a\u104a %B\u101c\u104a %d-\u101b\u1000\u103a\u1031\u1014\u1037 %H \u1014\u102c\u101b\u102e : %M \u1019\u102d\u1014\u1005\u103a : %S \u1005\u1000\u1039\u1000\u1014\u103a\u1037","months_long":"\u1007\u1014\u103a\u1014\u101d\u102b\u101b\u102e,\u1031\u1016\u1031\u1016\u102c\u103a\u101d\u102b\u101b\u102e,\u1019\u1010\u103a,\u1027\u103c\u1015\u102e,\u1031\u1019,\u1007\u103d\u1014\u103a,\u1007\u1030\u101c\u102d\u102f\u1004\u103a,\u1029\u1002\u102f\u1010\u103a,\u1005\u1000\u103a\u1010\u1004\u103a\u1018\u102c,\u1031\u1021\u102c\u1000\u103a\u1010\u102d\u102f\u1018\u102c,\u1014\u102d\u102f\u101d\u1004\u103a\u1018\u102c,\u1012\u102e\u1007\u1004\u103a\u1018\u102c","months_short":"\u1007\u1014\u103a,\u1031\u1016,\u1019\u1010\u103a,\u1027\u103c\u1015\u102e,\u1031\u1019,\u1007\u103d\u1014\u103a,\u1007\u1030,\u1029,\u1005\u1000\u103a,\u1031\u1021\u102c\u1000\u103a,\u1014\u102d\u102f\u101d\u1004\u103a,\u1012\u102e\u1007\u1004\u103a","day_long":"\u1010\u1014\u1002\u1004\u103a\u1039\u1031\u1014\u103d,\u1010\u1014\u101c\u1004\u103a\u1039\u102c,\u1021\u1002\u1004\u103a\u1039\u102b,\u1017\u102f\u1012\u1039\u1013\u101f\u1030\u1038,\u103c\u1000\u102c\u101e\u1015\u1031\u1010\u1038,\u1031\u101e\u102c\u103c\u1000\u102c,\u1005\u1031\u1014,\u1010\u1014\u1002\u1004\u103a\u1039\u1031\u1014\u103d","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun",title:"Templates",label:"Template","desc_label":"Description",desc:"Insert Predefined Template Content",select:"Select a Template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss."}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nb_dlg.js
new file mode 100644
index 000000000..4f2bc593d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.template_dlg',{title:"Maler",label:"Mal","desc_label":"Beskrivelse",desc:"Sett inn forh\u00e5ndsdefinert malinnhold",select:"Velg en mal",preview:"Forh\u00e5ndsvisning",warning:"Advarsel: Utskifting av en mal med en annen kan f\u00f8re til at data g\u00e5r tapt.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des","day_long":"s\u00f8ndag,mandag,tirsdag,onsdag,torsdag,fredag,l\u00f8rdag,s\u00f8ndag","day_short":"s\u00f8n,man,tir,ons,tor,fre,l\u00f8r,s\u00f8n"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nl_dlg.js
new file mode 100644
index 000000000..acd330419
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.template_dlg',{title:"Sjablonen",label:"Sjabloon","desc_label":"Beschrijving",desc:"Voorgedefinieerd sjabloon invoegen",select:"Selecteer een sjabloon",preview:"Voorbeeld",warning:"Waarschuwing: het bijwerken van een sjabloon met een andere kan het verlies van informatie tot gevolg hebben.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Januari,Februari,Maart,April,Mei,Juni,Juli,Augustus,September,Oktober,November,December","months_short":"Jan,Feb,Mar,Apr,Mei,Jun,Jul,Aug,Sep,Okt,Nov,Dec","day_long":"Zondag,Maandag,Dinsdag,Woensdag,Donderdag,Vrijdag,Zaterdag,Zondag","day_short":"zo,ma,di,wo,do,vr,za,zo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nn_dlg.js
new file mode 100644
index 000000000..8900919a2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.template_dlg',{title:"Malar",label:"Mal","desc_label":"Omtale",desc:"Set inn f\u00f8rehandsdefinert malinnhald",select:"Vel ein mal",preview:"Sj\u00e5 f\u00f8rebels utkast",warning:"\u00c5tvaring: Utskifting av ein mal med ein annen kan f\u00f8re til at data g\u00e5r tapt.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des","day_long":"sundag,mandag,tirsdag,onsdag,torsdag,fredag,laurdag,sundag","day_short":"sun,man,tir,ons,tor,fre,l\u00f8r,sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/no_dlg.js
new file mode 100644
index 000000000..f735b6631
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.template_dlg',{title:"Maler",label:"Mal","desc_label":"Beskrivelse",desc:"Sett inn forh\u00e5ndsdefinert malinnhold",select:"Velg en mal",preview:"Forh\u00e5ndsvis",warning:"Advarsel: Oppdatering av mal med en annen kan f\u00f8re til tap av data.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"januar,februar,mars,april,mai,juni,juli,august,september,oktober,november,desember","months_short":"jan,feb,mar,apr,mai,jun,jul,aug,sep,okt,nov,des","day_long":"s\u00f8ndag,mandag,tirsdag,onsdag,torsdag,fredag,l\u00f8rdag,s\u00f8ndag","day_short":"S\u00f8n,Man,Tir,Ons,Tor,Fre,L\u00f8r,S\u00f8n"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/pl_dlg.js
new file mode 100644
index 000000000..82fbb64c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.template_dlg',{title:"Szablony",label:"Szablon","desc_label":"Opis",desc:"Wstaw tre\u015b\u0107 szablonu",select:"Wybierz szablon",preview:"Podgl\u0105d",warning:"Uwaga: Aktualizacja szablon\u00f3w mo\u017ce spowodowa\u0107 utrat\u0119 danych.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Stycze\u0144,Luty,Marzec.Kwiecie\u0144,Maj,Czerwiec,Lipiec,Sierpie\u0144,Wrzesie\u0144,Pa\u017adziernik,Listopad,Grudzie\u0144","months_short":"Sty,Lut,Mar,Kwi,Maj,Cze,Lip,Sie,Wrz,Pa\u017a,Lis,Gru","day_long":"Niedziela,Poniedzia\u0142ek,Wtorek,\u015aroda,Czwartek,Pi\u0105tek,Sobota,Niedziela","day_short":"N,Pn,Wt,\u015ar,Cz,Pt,So,N"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ps_dlg.js
new file mode 100644
index 000000000..06d005e62
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/pt_dlg.js
new file mode 100644
index 000000000..bc4101435
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.template_dlg',{title:"Templates",label:"Template","desc_label":"Descri\u00e7\u00e3o",desc:"Inserir template",select:"Selecionar template",preview:"Pr\u00e9-Visualiza\u00e7\u00e3o",warning:"Aten\u00e7\u00e3o: Atualizar um template com outro pode causar a perda de dados.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Janeiro,Fevereiro,Mar\u00e7o,Abril,Maio,Junho,Julho,Agosto,Setembro,Outubro,Novembro,Dezembro","months_short":"Jan,Fev,Mar,Abr,Mai,Jun,Jul,Ago,Set,Out,Nov,Dez","day_long":"Domingo,Segunda-feira,Ter\u00e7a-feira,Quarta-feira,Quinta-feira,Sexta-feira,S\u00e1bado,Domingo","day_short":"Dom,Seg,Ter,Qua,Qui,Sex,Sab,Dom"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ro_dlg.js
new file mode 100644
index 000000000..c326651aa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.template_dlg',{title:"\u0218abloane",label:"\u0218ablon","desc_label":"Descriere",desc:"Insereaz\u0103 \u0219ablon",select:"Selecteaz\u0103 \u0219ablon",preview:"Previzualizare",warning:"Aten\u0163ie: Schimbarea \u0219ablonului poate provoca pierderi de date","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Ianuarie,Februarie,Martie,Aprilie,Mai,Iunie,Iulie,August,Septembrie,Octombrie,Noiembrie,Decembrie","months_short":"Ian,Feb,Mar,Apr,Mai,Iun,Iul,Aug,Sep,Oct,Noi,Dec","day_long":"Duminic\u0103,Luni,Mar\u021bi,Miercuri,Joi,Vineri,S\u00e2mb\u0103t\u0103,Duminic\u0103","day_short":"Dum,Lun,Mar,Mie,Joi,Vin,S\u00e2m,Dum"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ru_dlg.js
new file mode 100644
index 000000000..86d2137f5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.template_dlg',{title:"\u0428\u0430\u0431\u043b\u043e\u043d\u044b",label:"\u0428\u0430\u0431\u043b\u043e\u043d","desc_label":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d",select:"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0448\u0430\u0431\u043b\u043e\u043d",preview:"\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440",warning:"\u0412\u043d\u0438\u043c\u0430\u043d\u0438\u0435: \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u043e\u0442\u0435\u0440\u044f\u043c \u0434\u0430\u043d\u043d\u044b\u0445/","mdate_format":"%Y.%m.%d %H:%M:%S","cdate_format":"%Y.%m.%d %H:%M:%S","months_long":"\u044f\u043d\u0432\u0430\u0440\u044c,\u0444\u0435\u0432\u0440\u0430\u043b\u044c,\u043c\u0430\u0440\u0442,\u0430\u043f\u0440\u0435\u043b\u044c,\u043c\u0430\u0439,\u0438\u044e\u043d\u044c,\u0438\u044e\u043b\u044c,\u0430\u0432\u0433\u0443\u0441\u0442,\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044c,\u043e\u043a\u0442\u044f\u0431\u0440\u044c,\u043d\u043e\u044f\u0431\u0440\u044c,\u0434\u0435\u043a\u0430\u0431\u0440\u044c","months_short":"\u044f\u043d\u0432,\u0444\u0435\u0432,\u043c\u0430\u0440\u0442,\u0430\u043f\u0440,\u043c\u0430\u0439,\u0438\u044e\u043d\u044c,\u0438\u044e\u043b\u044c,\u0430\u0432\u0433,\u0441\u0435\u043d,\u043e\u043a\u0442,\u043d\u043e\u044f,\u0434\u0435\u043a","day_long":"\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435,\u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a,\u0432\u0442\u043e\u0440\u043d\u0438\u043a,\u0441\u0440\u0435\u0434\u0430,\u0447\u0435\u0442\u0432\u0435\u0440\u0433,\u043f\u044f\u0442\u043d\u0438\u0446\u0443,\u0441\u0443\u0431\u0431\u043e\u0442\u0430,\u0432\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435","day_short":"\u0432\u0441,\u043f\u043d,\u0432\u0442,\u0441\u0440,\u0447\u0442,\u043f\u0442,\u0441\u0431,\u0432\u0441"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sc_dlg.js
new file mode 100644
index 000000000..de67d9560
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.template_dlg',{title:"\u8303\u672c\u6807\u9898",label:"\u8303\u672c","desc_label":"\u63cf\u8ff0",desc:"\u63d2\u5165\u9884\u5b9a\u7684\u8303\u672c\u5185\u5bb9",select:"\u9009\u62e9\u8303\u672c",preview:"\u9884\u89c8",warning:"\u8b66\u544a:\u66f4\u65b0\u8303\u672c\u6709\u53ef\u80fd\u5bfc\u81f4\u8d44\u6599\u9057\u5931\u3002 ","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708\uff0c\u4e8c\u6708\uff0c\u4e09\u6708\uff0c\u56db\u6708\uff0c\u4e94\u6708\uff0c\u516d\u6708\uff0c\u4e03\u6708\uff0c\u516b\u6708\uff0c\u4e5d\u6708\uff0c\u5341\u6708\uff0c\u5341\u4e00\u6708\uff0c\u5341\u4e8c\u6708","months_short":"1\u6708\uff0c2\u6708\uff0c3\u6708\uff0c4\u6708\uff0c5\u6708\uff0c6\u6708\uff0c7\u6708\uff0c8\u6708\uff0c9\u6708\uff0c10\u6708\uff0c11\u6708\uff0c12\u6708","day_long":"\u661f\u671f\u65e5\uff0c\u661f\u671f\u4e00\uff0c\u661f\u671f\u4e8c\uff0c\u661f\u671f\u4e09\uff0c\u661f\u671f\u56db\uff0c\u661f\u671f\u4e94\uff0c\u661f\u671f\u516d\uff0c\u661f\u671f\u65e5","day_short":"\u5468\u65e5\uff0c\u5468\u4e00\uff0c\u5468\u4e8c\uff0c\u5468\u4e09\uff0c\u5468\u56db\uff0c\u5468\u4e94\uff0c\u5468\u516d\uff0c\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/se_dlg.js
new file mode 100644
index 000000000..e0a010782
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.template_dlg',{title:"Mallar",label:"Mall","desc_label":"Beskrivning",desc:"Infoga en f\u00e4rdig mall",select:"V\u00e4lj en mall",preview:"F\u00f6rhandsgranska",warning:"Varning: Uppdaterar en mall men en ny kan inneb\u00e4ra att data f\u00f6rsvinner.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januari,Februari,Mars,April,Maj,Juni,Juli,Augusti,September,Oktober,November,December","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","day_long":"S\u00f6ndag,M\u00e5ndag,Tisdag,Onsdag,Torsdag,Fredag,L\u00f6rdag,S\u00f6ndag","day_short":"S\u00f6n,M\u00e5n,Tis,Ons,Tors,Fre,L\u00f6r,S\u00f6n"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/si_dlg.js
new file mode 100644
index 000000000..727d66d13
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sk_dlg.js
new file mode 100644
index 000000000..a6ce09c93
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.template_dlg',{title:"\u0160abl\u00f3ny",label:"\u0160abl\u00f3na","desc_label":"Popis",desc:"Vlo\u017ei\u0165 preddefinovan\u00fd obsah zo \u0161abl\u00f3ny",select:"Vyber \u0161abl\u00f3nu",preview:"N\u00e1h\u013ead",warning:"Upozornenie: Aktualiz\u00e1cia \u0161abl\u00f3ny inou, sp\u00f4sob\u00ed stratu d\u00e1t.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"Janu\u00e1r,Febru\u00e1r,Marec,Apr\u00edl,M\u00e1j,J\u00fan,J\u00fal,August,September,Okt\u00f3ber,November,December","months_short":"Jan,Feb,Mar,Apr,M\u00e1j,J\u00fan,J\u00fal,Aug,Sep,Okt,Nov,Dec","day_long":"Nede\u013ea,Pondelok,Utorok,Streda,\u0160tvrtok,Piatok,Sobota,Nede\u013ea","day_short":"Ne,Po,Ut,St,\u0160t,Pi,So,Ne"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sl_dlg.js
new file mode 100644
index 000000000..8c08beb80
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.template_dlg',{title:"Predloge",label:"Predloga","desc_label":"Opis",desc:"Vstavi pripravljeno vsebino predloge",select:"Izberite predlogo",preview:"Predogled",warning:"Opozorilo: posodabljanje predloge lahko pripelje od izgube podatkov.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"januar,februar,marec,april,maj,junij,julij,avgust,september,oktober,november,december","months_short":"jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec","day_long":"nedelja,ponedeljek,torek,sreda,\u010detrtek,petek,sobota,nedelja","day_short":"ned,pon,tor,sre,\u010det,pet,sob,ned"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sq_dlg.js
new file mode 100644
index 000000000..80392164e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.template_dlg',{title:"Shabllonet",label:"Shabllon","desc_label":"P\u00ebrshkrimi",desc:"Fut p\u00ebrmbajtje shabllon",select:"Zgjidh nj\u00eb shabllon",preview:"Paraqitje",warning:"Kujdes: N\u00ebse rifreskoni nj\u00eb shabllon me nj\u00eb tjeter, mund t\u00eb humbisni t\u00eb dh\u00ebnat.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Janar,Shkurt,Mars,Prill,Maj,Qershor,Korrik,Gusht,Shtator,Tetor,N\u00ebntor,Dhjetor","months_short":"Jan,Shk,Mar,Pri,Maj,Qer,Kor,Gus,Sht,Tet,N\u00ebn,Dhj","day_long":"E Djel\u00eb,E H\u00ebn\u00eb,E Mart\u00eb,E M\u00ebrkur\u00eb,E Enjte,E Premte,E Shtun\u00eb,E Djel\u00eb","day_short":"Dje,H\u00ebn,Mar,M\u00ebr,Enj,Pre,Sht,Dje"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sr_dlg.js
new file mode 100644
index 000000000..d50032d5e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.template_dlg',{title:"\u0160abloni",label:"\u0160ablon","desc_label":"Opis",desc:"Umetni predefinisani sadr\u017eaj \u0161ablona",select:"Odaberi \u0161ablon",preview:"Preliminarni prikaz",warning:"Upozorenje: A\u017euriranje \u0161ablona druga\u010dijim \u0161ablonom mo\u017ee da dovede do gubitka podataka.","mdate_format":"%d.%m.%Y %H:%M:%S","cdate_format":"%d.%m.%Y %H:%M:%S","months_long":"januar,februar,mart,april,maj,juni,juli,avgust,septembar,oktobar,novembar,decembar","months_short":"jan,feb,mar,apr,maj,jun,jul,avg,sep,okt,nov,dec","day_long":"nedelja,ponedeljak,utorak,sreda,\u010detvrtak,petak,subota,nedelja","day_short":"ned,pon,uto,sri,\u010det,pet,sub,ned"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sv_dlg.js
new file mode 100644
index 000000000..add47e87f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.template_dlg',{title:"Mallar",label:"Mall","desc_label":"Beskrivning",desc:"Infoga en f\u00e4rdig mall",select:"V\u00e4lj en mall",preview:"F\u00f6rhandsgranska",warning:"Varning: Uppdaterar en mall med en ny kan inneb\u00e4ra att data f\u00f6rsvinner.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Januari,Februari,Mars,April,Maj,Juni,Juli,Augusti,September,Oktober,November,December","months_short":"Jan,Feb,Mar,Apr,Maj,Jun,Jul,Aug,Sep,Okt,Nov,Dec","day_long":"S\u00f6ndag,M\u00e5ndag,Tisdag,Onsdag,Torsdag,Fredag,L\u00f6rdag,S\u00f6ndag","day_short":"S\u00f6n,M\u00e5n,Tis,Ons,Tors,Fre,L\u00f6r,S\u00f6n"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sy_dlg.js
new file mode 100644
index 000000000..69f88d987
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert Predefined Template Content",select:"Select a Template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ta_dlg.js
new file mode 100644
index 000000000..aae601780
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/te_dlg.js
new file mode 100644
index 000000000..076fcbece
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/th_dlg.js
new file mode 100644
index 000000000..97ce1d0a8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.template_dlg',{title:"\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23",label:"\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23","desc_label":"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14",desc:"\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32",select:"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23",preview:"\u0e14\u0e39\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07",warning:"\u0e04\u0e33\u0e40\u0e15\u0e37\u0e2d\u0e19: \u0e01\u0e32\u0e23\u0e1b\u0e23\u0e31\u0e1a\u0e1b\u0e23\u0e38\u0e07\u0e41\u0e21\u0e48\u0e41\u0e1a\u0e1a\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23\u0e17\u0e35\u0e48\u0e41\u0e15\u0e01\u0e15\u0e48\u0e32\u0e07\u0e01\u0e31\u0e19\u0e2b\u0e19\u0e36\u0e48\u0e07\u0e2d\u0e32\u0e08\u0e17\u0e33\u0e43\u0e2b\u0e49\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e2a\u0e39\u0e0d\u0e2b\u0e32\u0e22","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0e21\u0e01\u0e23\u0e32\u0e04\u0e21,\u0e01\u0e38\u0e21\u0e20\u0e32\u0e1e\u0e31\u0e19\u0e18\u0e4c,\u0e21\u0e35\u0e19\u0e32\u0e04\u0e21,\u0e40\u0e21\u0e29\u0e32\u0e22\u0e19,\u0e1e\u0e24\u0e29\u0e20\u0e32\u0e04\u0e21,\u0e21\u0e34\u0e16\u0e38\u0e19\u0e32\u0e22\u0e19,\u0e01\u0e23\u0e01\u0e0e\u0e32\u0e04\u0e21,\u0e2a\u0e34\u0e07\u0e2b\u0e32\u0e04\u0e21,\u0e01\u0e31\u0e19\u0e22\u0e32\u0e22\u0e19,\u0e15\u0e38\u0e25\u0e32\u0e04\u0e21,\u0e1e\u0e24\u0e28\u0e08\u0e34\u0e01\u0e32\u0e22\u0e19,\u0e18\u0e31\u0e19\u0e27\u0e32\u0e04\u0e21","months_short":"\u0e21.\u0e04.,\u0e01.\u0e1e.,\u0e21\u0e35.\u0e04.,\u0e40\u0e21.\u0e22.,\u0e1e.\u0e04.,\u0e21\u0e34.\u0e22.,\u0e01.\u0e04.,\u0e2a.\u0e04.,\u0e01.\u0e22.,\u0e15.\u0e04.,\u0e1e.\u0e22.,\u0e18.\u0e04.","day_long":"\u0e27\u0e31\u0e19\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c,\u0e27\u0e31\u0e19\u0e08\u0e31\u0e19\u0e17\u0e23\u0e4c,\u0e27\u0e31\u0e19\u0e2d\u0e31\u0e07\u0e04\u0e32\u0e23,\u0e27\u0e31\u0e19\u0e1e\u0e38\u0e18,\u0e27\u0e31\u0e19\u0e1e\u0e24\u0e2b\u0e31\u0e2a\u0e1a\u0e14\u0e35,\u0e27\u0e31\u0e19\u0e28\u0e38\u0e01\u0e23\u0e4c,\u0e27\u0e31\u0e19\u0e40\u0e2a\u0e32\u0e23\u0e4c,\u0e2d\u0e32\u0e17\u0e34\u0e15\u0e22\u0e4c","day_short":"\u0e2d\u0e32,\u0e08,\u0e2d,\u0e1e,\u0e1e\u0e24,\u0e28,\u0e2a,\u0e2d\u0e32"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tn_dlg.js
new file mode 100644
index 000000000..3389195f3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tr_dlg.js
new file mode 100644
index 000000000..dfa9f2d9d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.template_dlg',{title:"\u015eablonlar",label:"\u015eablon","desc_label":"A\u00e7\u0131klama",desc:"\u00d6ntan\u0131ml\u0131 i\u00e7erik \u015fablonu kullan",select:"\u015eablonu se\u00e7",preview:"\u00d6nizleme",warning:"Uyar\u0131: Bir \u015fablonu bir di\u011feriyle g\u00fcncellemek veri kayb\u0131na yol a\u00e7abilir.","mdate_format":"%d-%m-%Y %H:%M:%S","cdate_format":"%d-%m-%Y %H:%M:%S","months_long":"Ocak,\u015eubat,Mart,Nisan,May\u0131s,Haziran,Temmuz,A\u011fustos,Eyl\u00fcl,Ekim,Kas\u0131m,Aral\u0131k","months_short":"Oca,\u015eub,Mar,Nis,May,Haz,Tem,A\u011fu,Eyl,Eki,Kas,Ara","day_long":"Pazar,Pazartesi,Sal\u0131,\u00c7ar\u015famba,Per\u015fembe,Cuma,Cumartesi","day_short":"Paz,Pzt,Sal,\u00c7r\u015f,Per,Cum,Cts"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tt_dlg.js
new file mode 100644
index 000000000..3cd6c9579
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.template_dlg',{title:"\u6a21\u677f\u6e05\u55ae",label:"\u7bc4\u672c","desc_label":"\u63cf\u8ff0",desc:"\u63d2\u5165\u9078\u5b9a\u7684\u7bc4\u672c",select:"\u9078\u64c7\u6a21\u677f",preview:"\u9810\u89bd",warning:"\u8b66\u544a: \u66f4\u65b0\u6a21\u677f\u6709\u53ef\u80fd\u5c0e\u81f4\u8cc7\u6599\u907a\u5931","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u9031\u65e5,\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tw_dlg.js
new file mode 100644
index 000000000..30b77629f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.template_dlg',{title:"\u6a21\u677f\u6a19\u984c",label:"\u6a21\u677f","desc_label":"\u8aaa\u660e",desc:"\u63d2\u5165\u9810\u8a2d\u6a21\u677f",select:"\u9078\u64c7\u6a21\u677f",preview:"\u9810\u89bd",warning:"\u8b66\u544a:\u5957\u7528\u4e0d\u540c\u7684\u6a21\u677f\u6709\u53ef\u80fd\u5c0e\u81f4\u5167\u5bb9\u907a\u5931\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u9031\u65e5,\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/uk_dlg.js
new file mode 100644
index 000000000..a457122eb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.template_dlg',{title:"\u0428\u0430\u0431\u043b\u043e\u043d\u0438",label:"\u0428\u0430\u0431\u043b\u043e\u043d","desc_label":"\u041e\u043f\u0438\u0441",desc:"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442",select:"\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d",preview:"\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434",warning:"\u0423\u0432\u0430\u0433\u0430: \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043d\u0430 \u0456\u043d\u0448\u0438\u0439 \u043c\u043e\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0434\u043e \u0432\u0442\u0440\u0430\u0442 \u0434\u0430\u043d\u0438\u0445.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u0421\u0456\u0447\u0435\u043d\u044c,\u041b\u044e\u0442\u0438\u0439,\u0411\u0435\u0440\u0435\u0437\u0435\u043d\u044c,\u041a\u0432\u0456\u0442\u0435\u043d\u044c,\u0422\u0440\u0430\u0432\u0435\u043d\u044c,\u0427\u0435\u0440\u0432\u0435\u043d\u044c,\u041b\u0438\u043f\u0435\u043d\u044c,\u0421\u0435\u0440\u043f\u0435\u043d\u044c,\u0412\u0435\u0440\u0435\u0441\u0435\u043d\u044c,\u0416\u043e\u0432\u0442\u0435\u043d\u044c,\u041b\u0438\u0441\u0442\u043e\u043f\u0430\u0434,\u0413\u0440\u0443\u0434\u0435\u043d\u044c","months_short":"\u0421\u0456\u0447,\u041b\u044e\u0442,\u0411\u0435\u0440,\u041a\u0432\u0456,\u0422\u0440\u0430,\u0427\u0435\u0440,\u041b\u0438\u043f,\u0421\u0435\u0440,\u0412\u0435\u0440,\u0416\u043e\u0432,\u041b\u0438\u0441,\u0413\u0440\u0443","day_long":"\u041d\u0435\u0434\u0456\u043b\u044f,\u041f\u043e\u043d\u0435\u0434\u0456\u043b\u043e\u043a,\u0412\u0456\u0432\u0442\u043e\u0440\u043e\u043a,\u0421\u0435\u0440\u0435\u0434\u0430,\u0427\u0435\u0442\u0432\u0435\u0440,\u041f\'\u044f\u0442\u043d\u0438\u0446\u044f,\u0421\u0443\u0431\u043e\u0442\u0430,\u041d\u0435\u0434\u0456\u043b\u044f","day_short":"\u041d\u0434,\u041f\u043d,\u0412\u0442,\u0421\u0440,\u0427\u0442,\u041f\u0442,\u0421\u0431,\u041d\u0434"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ur_dlg.js
new file mode 100644
index 000000000..9a72b4d62
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.template_dlg',{title:"Templates",label:"Template","desc_label":"Description",desc:"Insert predefined template content",select:"Select a template",preview:"Preview",warning:"Warning: Updating a template with a different one may cause data loss.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"January,February,March,April,May,June,July,August,September,October,November,December","months_short":"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec","day_long":"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday","day_short":"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/vi_dlg.js
new file mode 100644
index 000000000..1c19becd1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.template_dlg',{title:"M\u1eabu",label:"M\u1eabu","desc_label":"M\u00f4 t\u1ea3",desc:"Ch\u00e8n m\u1ed9t n\u1ed9i dung m\u1eabu \u0111\u1ecbnh ngh\u0129a tr\u01b0\u1edbc",select:"Ch\u1ecdn m\u1ed9t m\u1eabu",preview:"Xem tr\u01b0\u1edbc",warning:"C\u1ea3nh b\u00e1o: C\u1eadp nh\u1eadt m\u1ed9t m\u1eabu v\u1edbi m\u1ed9t s\u1ef1 sai kh\u00e1c c\u00f3 th\u1ec3 l\u00e0m m\u1ea5t d\u1eef li\u1ec7u.","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"Th\u00e1ng M\u1ed9t,Th\u00e1ng Hai,Th\u00e1ng Ba,Th\u00e1ng T\u01b0,Th\u00e1ng N\u0103m,Th\u00e1ng S\u00e1u,Th\u00e1ng B\u1ea3y,Th\u00e1ng T\u00e1m,Th\u00e1ng Ch\u00edn,Th\u00e1ng M\u01b0\u1eddi,Th\u00e1ng M\u01b0\u1eddi M\u1ed9t,Th\u00e1ng M\u01b0\u1eddi Hai","months_short":"Thg1,Thg2,Thg3,Thg4,Thg5,Thg6,Thg7,Thg8,Thg9,Th10,Th11,Th12","day_long":"Ch\u1ee7 Nh\u1eadt,Th\u1ee9 Hai,Th\u1ee9 Ba,Th\u1ee9 T\u01b0,Th\u1ee9 N\u0103m,Th\u1ee9 S\u00e1u,Th\u1ee9 B\u1ea3y,Ch\u1ee7 Nh\u1eadt","day_short":"CN,T2,T3,T4,T5,T6,T7,CN"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..a6217b9b7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.template_dlg',{title:"\u6a21\u677f",label:"\u6a21\u677f","desc_label":"\u8bf4\u660e",desc:"\u63d2\u5165\u9884\u8bbe\u7684\u6a21\u677f\u5185\u5bb9",select:"\u9009\u62e9\u6a21\u677f",preview:"\u9884\u89c8",warning:"\u8b66\u544a\uff1a\u66f4\u65b0\u6a21\u677f\u53ef\u80fd\u5bfc\u81f4\u6570\u636e\u4e22\u5931\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u5468\u65e5,\u5468\u4e00,\u5468\u4e8c,\u5468\u4e09,\u5468\u56db,\u5468\u4e94,\u5468\u516d,\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..e86dd3d77
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.template_dlg',{title:"\u7248\u578b",label:"\u7248\u578b","desc_label":"\u8a3b\u89e3",desc:"\u5957\u7248\u7248\u578b\u7684\u5167\u5bb9",select:"\u9078\u4e00\u500b\u7248\u578b",preview:"\u9810\u89bd",warning:"\u66f4\u65b0\u7248\u578b\u53ef\u80fd\u6703\u628a\u4e4b\u524d\u7684\u8cc7\u6599\u5f04\u4e0d\u898b\u5594\uff01","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","day_long":"\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u9031\u4e00,\u9031\u4e8c,\u9031\u4e09,\u9031\u56db,\u9031\u4e94,\u9031\u516d,\u9031\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh_dlg.js
new file mode 100644
index 000000000..7142a96d6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.template_dlg',{title:"\u6a23\u677f\u6a19\u984c",label:"\u6a23\u677f","desc_label":"\u8aaa\u660e",desc:"\u63d2\u5165\u5df2\u5b9a\u7fa9\u7684\u6a23\u677f",select:"\u9078\u64c7\u6a23\u677f",preview:"\u9810\u89bd",warning:"\u8b66\u544a: \u5957\u7528\u4e0d\u540c\u7684\u6a23\u677f\u6709\u53ef\u80fd\u5c0e\u81f4\u8cc7\u6599\u6d41\u5931.","mdate_format":"%Y/%m/%d %H:%M:%S","cdate_format":"%Y/%m/%d %H:%M:%S","months_long":"\u4e00\u6708,\u4e8c\u6708,\u4e09\u6708,\u56db\u6708,\u4e94\u6708,\u516d\u6708,\u4e03\u6708,\u516b\u6708,\u4e5d\u6708,\u5341\u6708,\u5341\u4e00\u6708,\u5341\u4e8c\u6708","months_short":"1\u6708,2\u6708,3\u6708,4\u6708,5\u6708,6\u6708,7\u6708,8\u6708,9\u6708,10\u6708,11\u6708,12\u6708","day_long":"\u661f\u671f\u65e5,\u661f\u671f\u4e00,\u661f\u671f\u4e8c,\u661f\u671f\u4e09,\u661f\u671f\u56db,\u661f\u671f\u4e94,\u661f\u671f\u516d,\u661f\u671f\u65e5","day_short":"\u65e5,\u4e00,\u4e8c,\u4e09,\u56db,\u4e94,\u516d,\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zu_dlg.js
new file mode 100644
index 000000000..3603c430a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/template/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.template_dlg',{title:"\u8303\u672c\u6807\u9898",label:"\u8303\u672c","desc_label":"\u63cf\u8ff0",desc:"\u63d2\u5165\u9884\u5b9a\u7684\u8303\u672c\u5185\u5bb9",select:"\u9009\u62e9\u8303\u672c",preview:"\u9884\u89c8",warning:"\u8b66\u544a:\u66f4\u65b0\u8303\u672c\u6709\u53ef\u80fd\u5bfc\u81f4\u8d44\u6599\u9057\u5931\u3002","mdate_format":"%Y-%m-%d %H:%M:%S","cdate_format":"%Y-%m-%d %H:%M:%S","months_long":"\u4e00\u6708\uff0c\u4e8c\u6708\uff0c\u4e09\u6708\uff0c\u56db\u6708\uff0c\u4e94\u6708\uff0c\u516d\u6708\uff0c\u4e03\u6708\uff0c\u516b\u6708\uff0c\u4e5d\u6708\uff0c\u5341\u6708\uff0c\u5341\u4e00\u6708\uff0c\u5341\u4e8c\u6708","months_short":"1\u6708\uff0c2\u6708\uff0c3\u6708\uff0c4\u6708\uff0c5\u6708\uff0c6\u6708\uff0c7\u6708\uff0c8\u6708\uff0c9\u6708\uff0c10\u6708\uff0c11\u6708\uff0c12\u6708","day_long":"\u661f\u671f\u65e5\uff0c\u661f\u671f\u4e00\uff0c\u661f\u671f\u4e8c\uff0c\u661f\u671f\u4e09\uff0c\u661f\u671f\u56db\uff0c\u661f\u671f\u4e94\uff0c\u661f\u671f\u516d\uff0c\u661f\u671f\u65e5","day_short":"\u5468\u65e5\uff0c\u5468\u4e00\uff0c\u5468\u4e8c\uff0c\u5468\u4e09\uff0c\u5468\u56db\uff0c\u5468\u4e94\uff0c\u5468\u516d\uff0c\u5468\u65e5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ar_dlg.js
new file mode 100644
index 000000000..e7a5633bd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"\u064a\u0645\u064a\u0646 \u0627\u0644\u0649 \u064a\u0633\u0627\u0631","option_ltr":"\u064a\u0633\u0627\u0631 \u0627\u0644\u0649 \u064a\u0645\u064a\u0646","insert_date":"Insert current date/time",remove:"\u062d\u0630\u0641","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"\u0627\u0639\u062f\u0627\u062f\u0627\u062a \u0639\u0627\u0645\u0647","events_tab":"\u0627\u062d\u062f\u0627\u062b","attrib_tab":"Attributes","general_tab":"\u0639\u0627\u0645","attribute_attrib_tab":"Attributes","attribute_events_tab":"\u0627\u062d\u062f\u0627\u062b","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"\u064a\u0645\u064a\u0646 \u0627\u0644\u0649 \u064a\u0633\u0627\u0631","attribute_option_ltr":"\u064a\u0633\u0627\u0631 \u0627\u0644\u0649 \u064a\u0645\u064a\u0646","attribute_label_langdir":"\u0627\u062a\u062c\u0627\u0647 \u0627\u0644\u0643\u062a\u0627\u0628\u0647","attribute_label_datetime":"\u062a\u0627\u0631\u064a\u062e / \u0632\u0645\u0646","attribute_label_cite":"Cite","attribute_label_style":"\u0648\u0633\u0645","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"\u0639\u0646\u0648\u0627\u0646"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/az_dlg.js
new file mode 100644
index 000000000..2378cf605
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.xhtmlxtras_dlg',{"attribs_title":"Atribut \u0259lav\u0259/redakt\u0259 et","option_rtl":"Sa\u011fda-sola","option_ltr":"Solda-sa\u011fa","insert_date":"Haz\u0131rki tarixi/vaxt\u0131 \u0259lav\u0259 et",remove:"L\u0259\u011fv et","title_cite_element":"Sitat elementi","title_abbr_element":"Abbreviatura elementi","title_acronym_element":"Akronim elementi","title_del_element":"Silinmi\u015f m\u0259tnin elementi","title_ins_element":"\u018flav\u0259 edilmi\u015f m\u0259tnin elementi","fieldset_events_tab":"Element hadis\u0259l\u0259ri","fieldset_attrib_tab":"Element atributlar\u0131","fieldset_general_tab":"\u00dcmumi nizamlamalar","events_tab":"Hadis\u0259l\u0259r","attrib_tab":"Atributlar","general_tab":"\u00dcmumi","attribute_attrib_tab":"Atributlar","attribute_events_tab":"Hadis\u0259l\u0259r","attribute_label_accesskey":"Giri\u015f klavi\u015fi","attribute_label_tabindex":"Hesab indeksi","attribute_label_langcode":"Dil","attribute_option_rtl":"Sa\u011fda-sola","attribute_option_ltr":"Solda-sa\u011fa","attribute_label_langdir":"M\u0259tnin istiqam\u0259ti","attribute_label_datetime":"Tarix/vaxt","attribute_label_cite":"Sitat","attribute_label_style":"Stil","attribute_label_class":"Sinif","attribute_label_id":"\u0130dentifikator","attribute_label_title":"Ad\u0131"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/be_dlg.js
new file mode 100644
index 000000000..d367ce12d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.xhtmlxtras_dlg',{"attribs_title":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0430\u0442\u0440\u044b\u0431\u0443\u0442\u044b","option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430","option_ltr":"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430","insert_date":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0431\u044f\u0433\u0443\u0447\u0443\u044e \u0434\u0430\u0442\u0443/\u0447\u0430\u0441",remove:"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c","title_cite_element":"\u0426\u044b\u0442\u0430\u0432\u0430\u043d\u043d\u0435","title_abbr_element":"\u0410\u0431\u0440\u044d\u0432\u0456\u044f\u0442\u0443\u0440\u0430","title_acronym_element":"\u0410\u043a\u0440\u043e\u043d\u0456\u043c","title_del_element":"\u0412\u044b\u0434\u0430\u043b\u0435\u043d\u043d\u0435","title_ins_element":"\u0417\u0430\u043c\u0435\u043d\u0430","fieldset_events_tab":"\u041f\u0430\u0434\u0437\u0435\u0456 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_attrib_tab":"\u0410\u0442\u0440\u044b\u0431\u0443\u0442\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_general_tab":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f \u043d\u0430\u043b\u0430\u0434\u044b","events_tab":"\u041f\u0430\u0434\u0437\u0435\u0456","attrib_tab":"\u0410\u0442\u0440\u044b\u0431\u0443\u0442\u044b","general_tab":"\u0410\u0433\u0443\u043b\u044c\u043d\u044b\u044f","attribute_attrib_tab":"\u0410\u0442\u0440\u044b\u0431\u0443\u0442\u044b","attribute_events_tab":"\u041f\u0430\u0434\u0437\u0435\u0456","attribute_label_accesskey":"\u041a\u043b\u0430\u0432\u0456\u0448\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0443","attribute_label_tabindex":"\u0410\u0437\u043d\u0430\u0447\u043d\u0456\u043a \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u044b\u0456","attribute_label_langcode":"\u041c\u043e\u0432\u0430","attribute_option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u0430","attribute_option_ltr":"\u0417\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u0430","attribute_label_langdir":"\u041a\u0456\u0440\u0443\u043d\u0430\u043a \u0442\u044d\u043a\u0441\u0442\u0443","attribute_label_datetime":"\u0414\u0430\u0442\u0430/\u0447\u0430\u0441","attribute_label_cite":"\u0412\u044b\u043d\u044f\u0442\u043a\u0430","attribute_label_style":"\u0421\u0442\u044b\u043b\u044c","attribute_label_class":"\u041a\u043b\u0430\u0441","attribute_label_id":"\u0406\u0434\u044d\u043d\u0442\u044b\u0444\u0456\u043a\u0430\u0442\u0430\u0440","attribute_label_title":"\u041d\u0430\u0437\u0432\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bg_dlg.js
new file mode 100644
index 000000000..4cf4ef9f6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.xhtmlxtras_dlg',{"attribs_title":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","option_rtl":"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e","option_ltr":"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e","insert_date":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u0442\u0430 \u0434\u0430\u0442\u0430/\u0446\u0430\u0441",remove:"\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438","title_cite_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0426\u0438\u0442\u0430\u0442","title_abbr_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0421\u044a\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435","title_acronym_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0410\u043a\u0440\u043e\u043d\u0438\u043c","title_del_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043d\u0435","title_ins_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435","fieldset_events_tab":"\u0421\u044a\u0431\u0438\u0442\u0438\u044f \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_general_tab":"\u041e\u0431\u0449\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438","events_tab":"\u0421\u044a\u0431\u0438\u0442\u0438\u044f","attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","general_tab":"\u041e\u0431\u0449\u0438","attribute_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","attribute_events_tab":"\u0421\u044a\u0431\u0438\u0442\u0438\u044f","attribute_label_accesskey":"\u041a\u043b\u0430\u0432\u0438\u0448","attribute_label_tabindex":"\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u043d\u043e\u0441\u0442","attribute_label_langcode":"\u0415\u0437\u0438\u043a","attribute_option_rtl":"\u041e\u0442\u0434\u044f\u0441\u043d\u043e \u043d\u0430 \u043b\u044f\u0432\u043e","attribute_option_ltr":"\u041e\u0442\u043b\u044f\u0432\u043e \u043d\u0430 \u0434\u044f\u0441\u043d\u043e","attribute_label_langdir":"\u041f\u043e\u0441\u043e\u043a\u0430 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430","attribute_label_datetime":"\u0414\u0430\u0442\u0430/\u0412\u0440\u0435\u043c\u0435","attribute_label_cite":"\u0426\u0438\u0442\u0430\u0442","attribute_label_style":"\u0421\u0442\u0438\u043b","attribute_label_class":"\u041a\u043b\u0430\u0441","attribute_label_id":"ID","attribute_label_title":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bn_dlg.js
new file mode 100644
index 000000000..085ed82e9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/br_dlg.js
new file mode 100644
index 000000000..0c75ca89e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.xhtmlxtras_dlg',{"attribs_title":"Inserir/editar atributos","option_rtl":"Da direita para a esquerda","option_ltr":"Da esquerda para a direita","insert_date":"Inserir data/hora",remove:"Remover","title_cite_element":"Cita\u00e7\u00e3o","title_abbr_element":"Abrevia\u00e7\u00e3o","title_acronym_element":"Acr\u00f4nimo","title_del_element":"Apagar","title_ins_element":"Inserir","fieldset_events_tab":"Eventos","fieldset_attrib_tab":"Atributos","fieldset_general_tab":"Configura\u00e7\u00f5es gerais","events_tab":"Eventos","attrib_tab":"Atributos","general_tab":"Geral","attribute_attrib_tab":"Atributos","attribute_events_tab":"Eventos","attribute_label_accesskey":"Tecla de Atalho","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Linguagem","attribute_option_rtl":"Da direita para a esquerda","attribute_option_ltr":"Da esquerda para a direita","attribute_label_langdir":"Dire\u00e7\u00e3o do texto","attribute_label_datetime":"Data/Hora","attribute_label_cite":"Citar","attribute_label_style":"Estilo","attribute_label_class":"Classe","attribute_label_id":"ID","attribute_label_title":"T\u00edtulo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bs_dlg.js
new file mode 100644
index 000000000..5d931ec3d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.xhtmlxtras_dlg',{"attribs_title":"Umetni/uredi atribute","option_rtl":"S desna na lijevo","option_ltr":"S lijeva na desno","insert_date":"Umetni trenuta\u010dni datum/vrijeme",remove:"Ukloni","title_cite_element":"Element citata","title_abbr_element":"Element kratice","title_acronym_element":"Element akronima","title_del_element":"Element za brisanje","title_ins_element":"Element za unos","fieldset_events_tab":"Doga\u0111aji elemenata","fieldset_attrib_tab":"Atributi elemenata","fieldset_general_tab":"Osnovne postavke","events_tab":"Doga\u0111aji","attrib_tab":"Atributi","general_tab":"Osnovno","attribute_attrib_tab":"Atributi","attribute_events_tab":"Doga\u0111aji","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Jezik","attribute_option_rtl":"S desna na lijevo","attribute_option_ltr":"S lijeva na desno","attribute_label_langdir":"Smjer teksta","attribute_label_datetime":"Datum/vrijeme","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klasa","attribute_label_id":"ID","attribute_label_title":"Naslov"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ca_dlg.js
new file mode 100644
index 000000000..5c548b5e7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.xhtmlxtras_dlg',{"attribs_title":"Insereix/Edita atributs","option_rtl":"De dreta a esquerra","option_ltr":"D\'esquerra a dreta","insert_date":"Insereix la data/hora actuals",remove:"Elimina","title_cite_element":"Element de menci\u00f3","title_abbr_element":"Element d\'abreviatura","title_acronym_element":"Element d\'acr\u00f2nim","title_del_element":"Element d\'eliminaci\u00f3","title_ins_element":"Element d\'inserci\u00f3","fieldset_events_tab":"Esdeveniments d\'element","fieldset_attrib_tab":"Atributs d\'element","fieldset_general_tab":"Configuraci\u00f3 general","events_tab":"Esdeveniments","attrib_tab":"Atributs","general_tab":"General","attribute_attrib_tab":"Atributs","attribute_events_tab":"Esdeveniments","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Idioma","attribute_option_rtl":"De dreta a esquerra","attribute_option_ltr":"D\'esquerra a dreta","attribute_label_langdir":"Direcci\u00f3 del text","attribute_label_datetime":"Data/Hora","attribute_label_cite":"Cita","attribute_label_style":"Estil","attribute_label_class":"Classe","attribute_label_id":"ID","attribute_label_title":"T\u00edtol"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ch_dlg.js
new file mode 100644
index 000000000..36b325a75
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","option_rtl":"\u4ece\u53f3\u5230\u5de6","option_ltr":"\u4ece\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u76ee\u524d\u65e5\u671f/\u65f6\u95f4",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5143\u7d20","title_abbr_element":"\u7f29\u5199\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u6bcd\u7f29\u5199\u5143\u7d20","title_del_element":"\u5220\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c5e\u6027","fieldset_general_tab":"\u4e00\u822c\u8bbe\u5b9a","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u952e","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u4ece\u53f3\u5230\u5de6","attribute_option_ltr":"\u4ece\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u4e66\u5199\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u7c7b\u522b","attribute_label_id":"ID","attribute_label_title":"\u6807\u9898"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cn_dlg.js
new file mode 100644
index 000000000..04a1c2ca5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","option_rtl":"\u4ece\u53f3\u5230\u5de6","option_ltr":"\u4ece\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u5f53\u524d\u65e5\u671f/\u65f6\u95f4",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5143\u7d20","title_abbr_element":"\u7f29\u5199\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u6bcd\u7f29\u5199\u5143\u7d20","title_del_element":"\u5220\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c5e\u6027","fieldset_general_tab":"\u5e38\u89c4\u8bbe\u7f6e","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u5e38\u89c4","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u952e","attribute_label_tabindex":"Tab\u952e\u8bbf\u95ee\u987a\u5e8f","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u4ece\u53f3\u5230\u5de6","attribute_option_ltr":"\u4ece\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u672c\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u7c7b","attribute_label_id":"ID\u5c5e\u6027","attribute_label_title":"\u6807\u9898"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cs_dlg.js
new file mode 100644
index 000000000..55c8cab8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.xhtmlxtras_dlg',{"attribs_title":"Vlo\u017eit/upravit atributy","option_rtl":"Zprava doleva","option_ltr":"Zleva doprava","insert_date":"Vlo\u017eit aktu\u00e1ln\u00ed datum/\u010das",remove:"Odstranit","title_cite_element":"Citace","title_abbr_element":"Zkratka","title_acronym_element":"Akronym","title_del_element":"Odstran\u011bn\u00fd text","title_ins_element":"P\u0159idan\u00fd text","fieldset_events_tab":"Atributy ud\u00e1losti","fieldset_attrib_tab":"Atributy prvku","fieldset_general_tab":"Obecn\u00e9 parametry","events_tab":"Ud\u00e1losti","attrib_tab":"Atributy","general_tab":"Obecn\u00e9","attribute_attrib_tab":"Atributy","attribute_events_tab":"Ud\u00e1losti","attribute_label_accesskey":"Kl\u00e1vesov\u00e1 zkratka","attribute_label_tabindex":"Po\u0159ad\u00ed pro tabul\u00e1tor","attribute_label_langcode":"Jazyk","attribute_option_rtl":"Zprava doleva","attribute_option_ltr":"Zleva doprava","attribute_label_langdir":"Sm\u011br textu","attribute_label_datetime":"Datum/\u010cas","attribute_label_cite":"Citace","attribute_label_style":"Styl","attribute_label_class":"T\u0159\u00edda","attribute_label_id":"ID","attribute_label_title":"Titulek"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cy_dlg.js
new file mode 100644
index 000000000..981483939
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.xhtmlxtras_dlg',{"attribs_title":"Mewnosod/Golygu Priodoleddau","option_rtl":"De i\'r chwith","option_ltr":"Chwith i\'r dde","insert_date":"Mewnosod dyddiad/amser presennol",remove:"Tynnu","title_cite_element":"Elfen Dyfyniad","title_abbr_element":"Elfen Talfyriad","title_acronym_element":"Elfen Acronym","title_del_element":"Elfen Dilead","title_ins_element":"Elfen Mewnosodiad","fieldset_events_tab":"Digwyddiadau Elfen","fieldset_attrib_tab":"Priodoleddau Elfen","fieldset_general_tab":"Gosodiadau Cyfredinol","events_tab":"Digwyddiadau","attrib_tab":"Priodoleddau","general_tab":"Cyffredinol","attribute_attrib_tab":"Priodoleddau","attribute_events_tab":"Digwyddiadau","attribute_label_accesskey":"Bysell mynediad","attribute_label_tabindex":"Trefn tabio","attribute_label_langcode":"Iaith","attribute_option_rtl":"De i\'r chwith","attribute_option_ltr":"Chwith i\'r dde","attribute_label_langdir":"Cyfeiriad Testun","attribute_label_datetime":"Dyddiad/Amser","attribute_label_cite":"Dyfynnu","attribute_label_style":"Arddull","attribute_label_class":"Dosbarth","attribute_label_id":"ID","attribute_label_title":"Teitl"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/da_dlg.js
new file mode 100644
index 000000000..cd9eb4085
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.xhtmlxtras_dlg',{"attribs_title":"Inds\u00e6t/rediger attributter","option_rtl":"H\u00f8jre mod venstre","option_ltr":"Venstre mod h\u00f8jre","insert_date":"Inds\u00e6t nuv\u00e6rende dato/tid",remove:"Slet","title_cite_element":"Citationselement","title_abbr_element":"Forkortet element","title_acronym_element":"Akronym element","title_del_element":"Sletteklart element","title_ins_element":"Inds\u00e6tbart element","fieldset_events_tab":"Element-h\u00e6ndelser","fieldset_attrib_tab":"Element-attributter","fieldset_general_tab":"Genererelle indstillinger","events_tab":"H\u00e6ndelser","attrib_tab":"Attributter","general_tab":"Generelt","attribute_attrib_tab":"Attributter","attribute_events_tab":"H\u00e6ndelser","attribute_label_accesskey":"Adgangsn\u00f8gle","attribute_label_tabindex":"Tab-indeks","attribute_label_langcode":"Sprog","attribute_option_rtl":"H\u00f8jre mod venstre","attribute_option_ltr":"Venstre mod h\u00f8jre","attribute_label_langdir":"Tekstretning","attribute_label_datetime":"Dato/tid","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/de_dlg.js
new file mode 100644
index 000000000..4994355b9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.xhtmlxtras_dlg',{"attribs_title":"Attribute einf\u00fcgen/bearbeiten","option_rtl":"Rechts nach links","option_ltr":"Links nach rechts","insert_date":"Aktuelle Zeit/Datum einf\u00fcgen",remove:"Entfernen","title_cite_element":"Quellenangabe","title_abbr_element":"Abk\u00fcrzung","title_acronym_element":"Akronym","title_del_element":"Entfernter Text","title_ins_element":"Eingef\u00fcgter Text","fieldset_events_tab":"Ereignisse","fieldset_attrib_tab":"Attribute","fieldset_general_tab":"Allgemeine Einstellungen","events_tab":"Ereignisse","attrib_tab":"Attribute","general_tab":"Allgemein","attribute_attrib_tab":"Attribute","attribute_events_tab":"Ereignisse","attribute_label_accesskey":"Tastenk\u00fcrzel","attribute_label_tabindex":"Tabindex","attribute_label_langcode":"Sprache","attribute_option_rtl":"Rechts nach links","attribute_option_ltr":"Links nach rechts","attribute_label_langdir":"Schriftrichtung","attribute_label_datetime":"Zeit/Datum","attribute_label_cite":"Quellenangabe","attribute_label_style":"Format","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/dv_dlg.js
new file mode 100644
index 000000000..a9c0f1475
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/el_dlg.js
new file mode 100644
index 000000000..cbc5fbb16
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.xhtmlxtras_dlg',{"attribs_title":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b9\u03b4\u03b9\u03bf\u03c4\u03ae\u03c4\u03c9\u03bd","option_rtl":"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","option_ltr":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac","insert_date":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c4\u03c1\u03ad\u03c7\u03bf\u03c5\u03c3\u03b1\u03c2 \u03b7\u03bc\u03ad\u03c1\u03b1\u03c2/\u03ce\u03c1\u03b1\u03c2",remove:"\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7","title_cite_element":"Citation \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","title_abbr_element":"\u03a3\u03c5\u03bd\u03c4\u03bf\u03bc\u03bf\u03b3\u03c1\u03b1\u03c6\u03af\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","title_acronym_element":"\u0391\u03ba\u03c1\u03bf\u03bd\u03cd\u03bc\u03b9\u03bf \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","title_del_element":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","title_ins_element":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","fieldset_events_tab":"\u0393\u03b5\u03b3\u03bf\u03bd\u03cc\u03c4\u03b1 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","fieldset_attrib_tab":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5","fieldset_general_tab":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ad\u03c2 \u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2","events_tab":"\u0393\u03b5\u03b3\u03bf\u03bd\u03cc\u03c4\u03b1","attrib_tab":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","general_tab":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ac","attribute_attrib_tab":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2","attribute_events_tab":"\u0393\u03b5\u03b3\u03bf\u03bd\u03cc\u03c4\u03b1","attribute_label_accesskey":"\u03a0\u03bb\u03ae\u03ba\u03c4\u03c1\u03bf \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"\u0393\u03bb\u03ce\u03c3\u03c3\u03b1","attribute_option_rtl":"\u0394\u03b5\u03be\u03b9\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","attribute_option_ltr":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac \u03c0\u03c1\u03bf\u03c2 \u03b4\u03b5\u03be\u03b9\u03ac","attribute_label_langdir":"\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","attribute_label_datetime":"\u0397\u03bc\u03ad\u03c1\u03b1/\u038f\u03c1\u03b1","attribute_label_cite":"Cite","attribute_label_style":"\u03a3\u03c4\u03c5\u03bb","attribute_label_class":"\u039a\u03bb\u03ac\u03c3\u03b7","attribute_label_id":"ID","attribute_label_title":"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/en_dlg.js
new file mode 100644
index 000000000..c4569f85e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to Left","option_ltr":"Left to Right","insert_date":"Insert Current Date/Time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to Left","attribute_option_ltr":"Left to Right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/eo_dlg.js
new file mode 100644
index 000000000..c0e977686
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.xhtmlxtras_dlg',{"attribs_title":"Enmeti/redakti atributojn","option_rtl":"Dekstre-Maldekstren","option_ltr":"Maldekstre-Dekstren","insert_date":"Enmeti daton/horon",remove:"Forigi","title_cite_element":"Cita\u0135o","title_abbr_element":"Mallongigo","title_acronym_element":"Akronimo","title_del_element":"Forvi\u015di","title_ins_element":"Enmeti","fieldset_events_tab":"Eventoj","fieldset_attrib_tab":"Atributoj","fieldset_general_tab":"\u011ceneralaj agorda\u0135oj","events_tab":"Eventoj","attrib_tab":"Atributoj","general_tab":"\u011ceneralaj","attribute_attrib_tab":"Atributoj","attribute_events_tab":"Eventoj","attribute_label_accesskey":"Klavkombino","attribute_label_tabindex":"TabIndekso","attribute_label_langcode":"Lingvo","attribute_option_rtl":"Dekstre-Maldekstren","attribute_option_ltr":"Maldekstre-Dekstren","attribute_label_langdir":"Tekstodirekto","attribute_label_datetime":"Dato/Horo","attribute_label_cite":"Citi","attribute_label_style":"Stilo","attribute_label_class":"Klaso","attribute_label_id":"ID","attribute_label_title":"Titolo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/es_dlg.js
new file mode 100644
index 000000000..676e20086
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.xhtmlxtras_dlg',{"attribs_title":"Insertar/Editar atributos","option_rtl":"Derecha a izquierda","option_ltr":"Izquierda a derecha","insert_date":"Insertar fecha/hora actuales",remove:"Suprimir","title_cite_element":"Cita","title_abbr_element":"Abreviatura","title_acronym_element":"Acr\u00f3nimo","title_del_element":"Borrar","title_ins_element":"Insertar","fieldset_events_tab":"Evento","fieldset_attrib_tab":"Atributos","fieldset_general_tab":"Configuraci\u00f3n general","events_tab":"Eventos","attrib_tab":"Atributos","general_tab":"General","attribute_attrib_tab":"Atributos","attribute_events_tab":"Eventos","attribute_label_accesskey":"Tecla de acceso","attribute_label_tabindex":"Orden de tabulaci\u00f3n","attribute_label_langcode":"Lenguaje","attribute_option_rtl":"Derecha a izquierda","attribute_option_ltr":"Izquierda a derecha","attribute_label_langdir":"Direcci\u00f3n de texto","attribute_label_datetime":"Fecha/Hora","attribute_label_cite":"Cita","attribute_label_style":"Estilo","attribute_label_class":"Clase","attribute_label_id":"ID","attribute_label_title":"T\u00edtulo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/et_dlg.js
new file mode 100644
index 000000000..6e7ffcc7d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.xhtmlxtras_dlg',{"attribs_title":"Sisesta/muuda atribuute","option_rtl":"Paremalt vasakule","option_ltr":"Vasakult paremale","insert_date":"Sisesta hetke kuup\u00e4ev/aeg",remove:"Eemalda","title_cite_element":"Elemendi tsitaat","title_abbr_element":"Elemendi l\u00fchend","title_acronym_element":"Elemendi akron\u00fc\u00fcm","title_del_element":"Elemendi kustutus","title_ins_element":"Elemendi sisestus","fieldset_events_tab":"Elementide s\u00fcndmused","fieldset_attrib_tab":"Elementide atribuudid","fieldset_general_tab":"\u00dcldised seaded","events_tab":"S\u00fcndmused","attrib_tab":"Atribuudid","general_tab":"\u00dcldine","attribute_attrib_tab":"Atribuudid","attribute_events_tab":"S\u00fcndmused","attribute_label_accesskey":"Ligip\u00e4\u00e4suklahv","attribute_label_tabindex":"Sisujuht","attribute_label_langcode":"Keel","attribute_option_rtl":"Paremalt vasakule","attribute_option_ltr":"Vasakult paremale","attribute_label_langdir":"Teksti suund","attribute_label_datetime":"Kuup\u00e4ev/aeg","attribute_label_cite":"Tsitaat","attribute_label_style":"Stiil","attribute_label_class":"Klass","attribute_label_id":"ID","attribute_label_title":"Pealkiri"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/eu_dlg.js
new file mode 100644
index 000000000..16997b852
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.xhtmlxtras_dlg',{"attribs_title":"Atributuak txertatu/editatu","option_rtl":"Eskuinetik ezkerrera","option_ltr":"Ezkerretik eskuinera","insert_date":"Data/ordua txertatu",remove:"Ezabatu","title_cite_element":"Elementuaren zita","title_abbr_element":"Elementuaren laburdura","title_acronym_element":"Elementuaren akronimoa","title_del_element":"Elementuaren ezabaketa","title_ins_element":"Elementuaren txertaketa","fieldset_events_tab":"Elementuen ebentuak","fieldset_attrib_tab":"Elementuen atributuak","fieldset_general_tab":"Aukera orokorrak","events_tab":"Ebentuak","attrib_tab":"Atributuak","general_tab":"Orokorra","attribute_attrib_tab":"Atributuak","attribute_events_tab":"Ebentuak","attribute_label_accesskey":"Laster-tekla","attribute_label_tabindex":"Tabulazio ordena","attribute_label_langcode":"Hizkuntza","attribute_option_rtl":"Eskuinetik ezkerrera","attribute_option_ltr":"Ezkerretik eskuinera","attribute_label_langdir":"Testuaren norabidea","attribute_label_datetime":"Data/Ordua","attribute_label_cite":"Zita","attribute_label_style":"Estiloa","attribute_label_class":"Klasea","attribute_label_id":"ID","attribute_label_title":"Izenburua"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fa_dlg.js
new file mode 100644
index 000000000..a37c26b7d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.xhtmlxtras_dlg',{"attribs_title":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627","option_rtl":"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e","option_ltr":"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a","insert_date":"\u062f\u0631\u062c \u062a\u0627\u0631\u06cc\u062e/\u0632\u0645\u0627\u0646 \u0641\u0639\u0644\u06cc",remove:"\u062d\u0630\u0641","title_cite_element":"\u0639\u0646\u0635\u0631 \u0646\u0642\u0644 \u0642\u0648\u0644","title_abbr_element":"\u0639\u0646\u0635\u0631 \u0627\u062e\u062a\u0635\u0627\u0631","title_acronym_element":"\u0639\u0646\u0635\u0631 \u0645\u062e\u0641\u0641","title_del_element":"\u0639\u0646\u0635\u0631 \u062d\u0630\u0641","title_ins_element":"\u0639\u0646\u0635\u0631 \u062f\u0631\u062c","fieldset_events_tab":"\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627\u06cc \u0639\u0646\u0635\u0631","fieldset_attrib_tab":"\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0639\u0646\u0635\u0631","fieldset_general_tab":"\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0639\u0645\u0648\u0645\u06cc","events_tab":"\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627","attrib_tab":"\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627","general_tab":"\u0639\u0645\u0648\u0645\u06cc","attribute_attrib_tab":"\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627","attribute_events_tab":"\u0631\u0648\u06cc\u062f\u0627\u062f\u0647\u0627","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"\u0632\u0628\u0627\u0646","attribute_option_rtl":"\u0631\u0627\u0633\u062a \u0628\u0647 \u0686\u067e","attribute_option_ltr":"\u0686\u067e \u0628\u0647 \u0631\u0627\u0633\u062a","attribute_label_langdir":"\u062c\u0647\u062a \u0645\u062a\u0646","attribute_label_datetime":"\u062a\u0627\u0631\u06cc\u062e/\u0632\u0645\u0627\u0646","attribute_label_cite":"\u0627\u0639\u0644\u0627\u0645\u06cc\u0647","attribute_label_style":"\u0627\u0633\u062a\u0627\u06cc\u0644","attribute_label_class":"\u06a9\u0644\u0627\u0633","attribute_label_id":"\u0634\u0646\u0627\u0633\u0647","attribute_label_title":"\u0639\u0646\u0648\u0627\u0646"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fi_dlg.js
new file mode 100644
index 000000000..58c4e7e95
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.xhtmlxtras_dlg',{"attribs_title":"Lis\u00e4\u00e4/muokkaa attribuutteja","option_rtl":"Oikealta vasemmalle","option_ltr":"Vasemmalta oikealle","insert_date":"Lis\u00e4\u00e4 t\u00e4m\u00e4nhetkinen p\u00e4iv\u00e4/aika",remove:"Poista","title_cite_element":"Sitaatti elementit","title_abbr_element":"Lyhenne elementit","title_acronym_element":"Kirjainlyhenne elementit","title_del_element":"Poisto elementit","title_ins_element":"Lis\u00e4ys elementit","fieldset_events_tab":"Elementin tapahtumat","fieldset_attrib_tab":"Elementin attribuutit","fieldset_general_tab":"Yleiset asetukset","events_tab":"Tapahtumat","attrib_tab":"Attribuutit","general_tab":"Yleiset","attribute_attrib_tab":"Attribuutit","attribute_events_tab":"Tapahtumat","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Kieli","attribute_option_rtl":"Oikealta vasemmalle","attribute_option_ltr":"Vasemmalta oikealle","attribute_label_langdir":"Tekstin suunta","attribute_label_datetime":"P\u00e4iv\u00e4/Aika","attribute_label_cite":"Sitaatti","attribute_label_style":"Tyyli","attribute_label_class":"Luokka","attribute_label_id":"ID","attribute_label_title":"Otsikko"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fr_dlg.js
new file mode 100644
index 000000000..4ae5a3baf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.xhtmlxtras_dlg',{"attribs_title":"Ins\u00e9rer / \u00e9diter les attributs","option_rtl":"De droite \u00e0 gauche","option_ltr":"De gauche \u00e0 droite","insert_date":"Ins\u00e9rer la date et l\'heure actuelles",remove:"Enlever","title_cite_element":"Citation","title_abbr_element":"Abr\u00e9viation","title_acronym_element":"Acronyme","title_del_element":"Suppression","title_ins_element":"Insertion","fieldset_events_tab":"\u00c9v\u00e9nements","fieldset_attrib_tab":"Attributs","fieldset_general_tab":"Param\u00e8tres g\u00e9n\u00e9raux","events_tab":"\u00c9v\u00e9nements","attrib_tab":"Attributs","general_tab":"G\u00e9n\u00e9ral","attribute_attrib_tab":"Attributs","attribute_events_tab":"\u00c9v\u00e8nements","attribute_label_accesskey":"Accesskey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Langue","attribute_option_rtl":"De droite \u00e0 gauche","attribute_option_ltr":"De gauche \u00e0 droite","attribute_label_langdir":"Sens de lecture","attribute_label_datetime":"Date / heure","attribute_label_cite":"Citation","attribute_label_style":"Style","attribute_label_class":"Classe","attribute_label_id":"ID","attribute_label_title":"Titre"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/gl_dlg.js
new file mode 100644
index 000000000..59fb5fe8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.xhtmlxtras_dlg',{"attribs_title":"Insertar/Editar atributos","option_rtl":"Dereita a esquerda","option_ltr":"Esquerda a dereita","insert_date":"Insertar data/hora actuais",remove:"Suprimir","title_cite_element":"Cita","title_abbr_element":"Abreviatura","title_acronym_element":"Acr\u00f3nimo","title_del_element":"Borrar","title_ins_element":"Insertar","fieldset_events_tab":"Evento","fieldset_attrib_tab":"Atributos","fieldset_general_tab":"Configuraci\u00f3n xeral","events_tab":"Eventos","attrib_tab":"Atributos","general_tab":"Xeral","attribute_attrib_tab":"Atributos","attribute_events_tab":"Eventos","attribute_label_accesskey":"Tecla de acceso","attribute_label_tabindex":"Orde de tabulaci\u00f3n","attribute_label_langcode":"Lenguaxe","attribute_option_rtl":"Dereita a esquerda","attribute_option_ltr":"Esquerda a dereita","attribute_label_langdir":"Direcci\u00f3n de texto","attribute_label_datetime":"Data/Hora","attribute_label_cite":"Cita","attribute_label_style":"Estilo","attribute_label_class":"Clase","attribute_label_id":"ID","attribute_label_title":"T\u00edtulo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/gu_dlg.js
new file mode 100644
index 000000000..31ee0dd56
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/he_dlg.js
new file mode 100644
index 000000000..515536f61
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.xhtmlxtras_dlg',{"attribs_title":"\u05d4\u05db\u05e0\u05e1\u05ea/\u05e2\u05d3\u05db\u05d5\u05df \u05ea\u05db\u05d5\u05e0\u05d5\u05ea","option_rtl":"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc","option_ltr":"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df","insert_date":"\u05d4\u05db\u05e0\u05e1\u05ea \u05d6\u05de\u05df/\u05ea\u05d0\u05e8\u05d9\u05da \u05e0\u05d5\u05db\u05d7\u05d9",remove:"\u05d4\u05e1\u05e8","title_cite_element":"\u05e6\u05d9\u05d8\u05d5\u05d8 \u05d0\u05dc\u05de\u05e0\u05d8","title_abbr_element":"\u05e7\u05d9\u05e6\u05d5\u05e8 \u05d0\u05dc\u05de\u05e0\u05d8","title_acronym_element":"\u05e8\u05d0\u05e9\u05d9 \u05ea\u05d9\u05d1\u05d5\u05ea \u05d4\u05d0\u05dc\u05de\u05e0\u05d8","title_del_element":"\u05de\u05d7\u05d9\u05e7\u05ea \u05d0\u05dc\u05de\u05e0\u05d8","title_ins_element":"\u05d4\u05db\u05e0\u05e1\u05ea \u05d0\u05dc\u05de\u05e0\u05d8","fieldset_events_tab":"\u05d0\u05d9\u05e8\u05d5\u05e2\u05d9 \u05d4\u05d0\u05dc\u05de\u05e0\u05d8","fieldset_attrib_tab":" \u05ea\u05db\u05d5\u05e0\u05d5\u05ea \u05d4\u05d0\u05dc\u05de\u05e0\u05d8","fieldset_general_tab":"\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05db\u05dc\u05dc\u05d9\u05d5\u05ea","events_tab":"\u05d0\u05d9\u05e8\u05d5\u05e2\u05d9\u05dd","attrib_tab":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea","general_tab":"\u05db\u05dc\u05dc\u05d9","attribute_attrib_tab":"\u05ea\u05db\u05d5\u05e0\u05d5\u05ea","attribute_events_tab":"\u05d0\u05d9\u05e8\u05d5\u05e2\u05d9\u05dd","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"\u05e9\u05e4\u05d4","attribute_option_rtl":"\u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc","attribute_option_ltr":"\u05de\u05e9\u05de\u05d0\u05dc \u05dc\u05d9\u05de\u05d9\u05df","attribute_label_langdir":"\u05db\u05d9\u05d5\u05d5\u05df \u05d4\u05d8\u05e7\u05e1\u05d8","attribute_label_datetime":"\u05ea\u05d0\u05e8\u05d9\u05da/\u05d6\u05de\u05df","attribute_label_cite":"\u05e6\u05d9\u05d8\u05d5\u05d8","attribute_label_style":"\u05e2\u05d9\u05e6\u05d5\u05d1","attribute_label_class":"\u05de\u05d7\u05dc\u05e7\u05d4","attribute_label_id":"ID","attribute_label_title":"\u05db\u05d5\u05ea\u05e8\u05ea"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hi_dlg.js
new file mode 100644
index 000000000..36d773c20
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hr_dlg.js
new file mode 100644
index 000000000..38c19db82
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.xhtmlxtras_dlg',{"attribs_title":"Umetni/uredi atribute","option_rtl":"S desna na lijevo","option_ltr":"S lijeva na desno","insert_date":"Umetni trenutni datum/vrijeme",remove:"Ukloni","title_cite_element":"Element citata","title_abbr_element":"Element kratice","title_acronym_element":"Element akronima","title_del_element":"Element za brisanje","title_ins_element":"Element za unos","fieldset_events_tab":"Doga\u0111aji elemenata","fieldset_attrib_tab":"Atributi elemenata","fieldset_general_tab":"Osnovne postavke","events_tab":"Doga\u0111aji","attrib_tab":"Atributi","general_tab":"Osnovno","attribute_attrib_tab":"Atributi","attribute_events_tab":"Doga\u0111aji","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Jezik","attribute_option_rtl":"S desna na lijevo","attribute_option_ltr":"S lijeva na desno","attribute_label_langdir":"Smjer teksta","attribute_label_datetime":"Datum/vrijeme","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klasa","attribute_label_id":"ID","attribute_label_title":"Naslov"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hu_dlg.js
new file mode 100644
index 000000000..8af166632
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.xhtmlxtras_dlg',{"attribs_title":"Tulajdons\u00e1gok besz\u00far\u00e1sa/szerkeszt\u00e9se","option_rtl":"Jobbr\u00f3l balra","option_ltr":"Balr\u00f3l jobra","insert_date":"Aktu\u00e1lis d\u00e1tum/id\u0151 besz\u00far\u00e1sa",remove:"Elt\u00e1vol\u00edt\u00e1s","title_cite_element":"Id\u00e9zet elem","title_abbr_element":"R\u00f6vid\u00edt\u00e9s elem","title_acronym_element":"Bet\u0171sz\u00f3 elem","title_del_element":"T\u00f6r\u00f6lt elem","title_ins_element":"Besz\u00fart elem","fieldset_events_tab":"Elem esem\u00e9nyek","fieldset_attrib_tab":"Elem tulajdons\u00e1gok","fieldset_general_tab":"\u00c1ltal\u00e1nos be\u00e1ll\u00edt\u00e1sok","events_tab":"Esem\u00e9nyek","attrib_tab":"Tulajdons\u00e1gok","general_tab":"\u00c1ltal\u00e1nos","attribute_attrib_tab":"Tulajdons\u00e1gok","attribute_events_tab":"Esem\u00e9nyek","attribute_label_accesskey":"Gyorsbilenty\u0171","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Nyelv","attribute_option_rtl":"Jobbr\u00f3l balra","attribute_option_ltr":"Balr\u00f3l jobbra","attribute_label_langdir":"Sz\u00f6veg ir\u00e1nya","attribute_label_datetime":"D\u00e1tum/Id\u0151","attribute_label_cite":"Id\u00e9zet","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"C\u00edm"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hy_dlg.js
new file mode 100644
index 000000000..2f9a0483d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.xhtmlxtras_dlg',{"attribs_title":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0561\u057f\u0580\u056b\u0562\u0578\u0582\u057f\u0576\u0565\u0580","option_rtl":"\u0531\u057b\u056b\u0581 \u0571\u0561\u056d","option_ltr":"\u0541\u0561\u056d\u056b\u0581 \u0561\u057b","insert_date":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0568\u0576\u0569\u0561\u0581\u056b\u056f \u0561\u0574\u057d\u0561\u0569\u056b\u057e\u0568 / \u056a\u0561\u0574\u0568",remove:"\u0540\u0565\u057c\u0561\u0581\u0576\u0565\u056c","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"\u0538\u0576\u0564\u0570\u0561\u0576\u0578\u0582\u0580 \u057a\u0561\u0580\u0561\u0574\u0565\u057f\u0580\u0565\u0580","events_tab":"\u0534\u0565\u057a\u0584\u0565\u0580","attrib_tab":"\u0531\u057f\u0580\u056b\u0562\u0578\u0582\u057f\u0576\u0565\u0580","general_tab":"\u0540\u056b\u0574\u0576\u0561\u056f\u0561\u0576","attribute_attrib_tab":"\u0531\u0568\u0580\u056b\u0562\u0578\u0582\u057f\u0576\u0565\u0580","attribute_events_tab":"\u0534\u0565\u057a\u0584\u0565\u0580","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"\u053c\u0565\u0566\u0578\u0582","attribute_option_rtl":"\u0531\u057b\u056b\u0581 \u0571\u0561\u056d","attribute_option_ltr":"\u0541\u0561\u056d\u056b\u0581 \u0561\u057b","attribute_label_langdir":"\u054f\u0565\u0584\u057d\u057f\u056b \u0578\u0582\u0572\u0572\u0578\u0582\u0569\u0575\u0578\u0582\u0576","attribute_label_datetime":"\u0531\u0574\u057d\u0561\u0569\u056b\u057e / \u053a\u0561\u0574\u0561\u0576\u0561\u056f","attribute_label_cite":"\u0544\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","attribute_label_style":"\u0548\u0573","attribute_label_class":"\u0534\u0561\u057d","attribute_label_id":"ID","attribute_label_title":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ia_dlg.js
new file mode 100644
index 000000000..080ae1d78
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91 \u5c5e\u6027","option_rtl":"\u4ece\u53f3\u5230\u5de6","option_ltr":"\u4ece\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u5f53\u524d\u65e5\u671f/\u65f6\u95f4",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5bf9\u8c61","title_abbr_element":"\u7f29\u5199\u5bf9\u8c61","title_acronym_element":"\u9996\u5b57\u6bcd\u7f29\u5199\u5bf9\u8c61","title_del_element":"\u5220\u9664\u5bf9\u8c61","title_ins_element":"\u63d2\u5165\u5bf9\u8c61","fieldset_events_tab":"\u5bf9\u8c61\u4e8b\u4ef6","fieldset_attrib_tab":"\u5bf9\u8c61\u5c5e\u6027","fieldset_general_tab":"\u57fa\u672c","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u57fa\u672c","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u901f\u952e","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u4ece\u53f3\u5230\u5de6","attribute_option_ltr":"\u4ece\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u4e66\u5199\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u6837\u5f0f\u7c7b","attribute_label_id":"ID","attribute_label_title":"\u67e5\u627e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/id_dlg.js
new file mode 100644
index 000000000..f9a392c95
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.xhtmlxtras_dlg',{"attribs_title":"Sisipkan/Ubah atribut","option_rtl":"Kanan ke kiri","option_ltr":"Kiri ke kanan","insert_date":"Sisipkan tanggal/waktu sekarang",remove:"Hapus","title_cite_element":"Elemen Kutipan","title_abbr_element":"Elemen Singkatan","title_acronym_element":"Elemen Akronim","title_del_element":"Elemen penghapusan","title_ins_element":"Elemen Penyisipak","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Atribut Element","fieldset_general_tab":"Pengaturan Umum","events_tab":"Events","attrib_tab":"Atribut","general_tab":"Umum","attribute_attrib_tab":"Atribut","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Bahasa","attribute_option_rtl":"Kanan ke kiri","attribute_option_ltr":"Kiri ke kanan","attribute_label_langdir":"Arah Text","attribute_label_datetime":"Tanggal/waktu","attribute_label_cite":"Kutip","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Judul"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/is_dlg.js
new file mode 100644
index 000000000..71a87c972
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/it_dlg.js
new file mode 100644
index 000000000..726be22c6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.xhtmlxtras_dlg',{"attribs_title":"Inserisci/modifica attributi","option_rtl":"Destra verso sinistra","option_ltr":"Sinistra verso destra","insert_date":"Inserisci data/ora corrente",remove:"Rimuovi","title_cite_element":"Citazione elemento","title_abbr_element":"Abbreviazione elemento","title_acronym_element":"Acronimo elemento","title_del_element":"Cancellazione elemento","title_ins_element":"Inserimento elemento","fieldset_events_tab":"Eventi elemento","fieldset_attrib_tab":"Attributi elemento","fieldset_general_tab":"Impostazioni Generali","events_tab":"Eventi","attrib_tab":"Attributi","general_tab":"Generale","attribute_attrib_tab":"Attributi","attribute_events_tab":"Eventi","attribute_label_accesskey":"Tasto di accesso","attribute_label_tabindex":"Indice tabulazione","attribute_label_langcode":"Lingua","attribute_option_rtl":"Destra verso sinistra","attribute_option_ltr":"Sinistra verso destra","attribute_label_langdir":"Direzione del testo","attribute_label_datetime":"Date/Time","attribute_label_cite":"Citazione","attribute_label_style":"Style","attribute_label_class":"Classe","attribute_label_id":"ID","attribute_label_title":"Titolo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ja_dlg.js
new file mode 100644
index 000000000..888522c9e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.xhtmlxtras_dlg',{"attribs_title":"\u5c5e\u6027\u306e\u633f\u5165\u3084\u524a\u9664","option_rtl":"\u53f3\u304b\u3089\u5de6","option_ltr":"\u5de6\u304b\u3089\u53f3","insert_date":"\u73fe\u5728\u306e\u65e5\u4ed8\u3084\u6642\u523b\u3092\u633f\u5165",remove:"\u524a\u9664","title_cite_element":"\u5f15\u7528\u8981\u7d20","title_abbr_element":"\u7565\u8a9e\u8981\u7d20","title_acronym_element":"\u982d\u5b57\u8a9e\u8981\u7d20","title_del_element":"\u8981\u7d20\u3092\u524a\u9664","title_ins_element":"\u8981\u7d20\u3092\u633f\u5165","fieldset_events_tab":"\u8981\u7d20\u306e\u30a4\u30d9\u30f3\u30c8","fieldset_attrib_tab":"\u8981\u7d20\u306e\u5c5e\u6027","fieldset_general_tab":"\u4e00\u822c\u7684\u306a\u8a2d\u5b9a","events_tab":"\u30a4\u30d9\u30f3\u30c8","attrib_tab":"\u5c5e\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u30a4\u30d9\u30f3\u30c8","attribute_label_accesskey":"\u30a2\u30af\u30bb\u30b9\u30ad\u30fc","attribute_label_tabindex":"\u30bf\u30d6\u30a4\u30f3\u30c7\u30c3\u30af\u30b9","attribute_label_langcode":"\u8a00\u8a9e","attribute_option_rtl":"\u53f3\u304b\u3089\u5de6","attribute_option_ltr":"\u5de6\u304b\u3089\u53f3","attribute_label_langdir":"\u6587\u7ae0\u306e\u65b9\u5411","attribute_label_datetime":"\u65e5\u4ed8/\u6642\u523b","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u30b9\u30bf\u30a4\u30eb","attribute_label_class":"\u30af\u30e9\u30b9","attribute_label_id":"ID","attribute_label_title":"\u30bf\u30a4\u30c8\u30eb"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ka_dlg.js
new file mode 100644
index 000000000..9898869b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.xhtmlxtras_dlg',{"attribs_title":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10d7\u10d5\u10d8\u10e1\u10d4\u10d1\u10d4\u10d1\u10d8","option_rtl":"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","option_ltr":"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5","insert_date":"\u10d7\u10d0\u10e0\u10d8\u10e6\u10d8\u10e1 \u10e9\u10d0\u10e1\u10db\u10d0",remove:"\u10ec\u10d0\u10e8\u10da\u10d0","title_cite_element":"\u10ea\u10d8\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","title_abbr_element":"\u10e8\u10d4\u10db\u10dd\u10d9\u10da\u10d4\u10d1\u10d0","title_acronym_element":"\u10d0\u10d1\u10e0\u10d8\u10d5\u10d8\u10d0\u10ea\u10d8\u10d0","title_del_element":"\u10ec\u10d0\u10e8\u10da\u10d0","title_ins_element":"\u10e8\u10d4\u10ea\u10d5\u10da\u10d0","fieldset_events_tab":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d4\u10d1\u10d8\u10e1 \u10db\u10dd\u10d5\u10da\u10d4\u10dc\u10d4\u10d1\u10d8","fieldset_attrib_tab":"\u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","fieldset_general_tab":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","events_tab":"\u10db\u10dd\u10d5\u10da\u10d4\u10dc\u10d0","attrib_tab":"\u10d0\u10e2\u10e0\u10d8\u10d1\u10e3\u10e2\u10d8","general_tab":"\u10e1\u10d0\u10d4\u10e0\u10d7\u10dd","attribute_attrib_tab":"\u10d0\u10e2\u10e0\u10d8\u10d1\u10e3\u10e2\u10d8","attribute_events_tab":"\u10db\u10dd\u10d5\u10da\u10d4\u10dc\u10d0","attribute_label_accesskey":"\u10ec\u10d5\u10d3\u10dd\u10db\u10d8\u10e1 \u10d2\u10d0\u10e1\u10d0\u10e6\u10d4\u10d1\u10d8","attribute_label_tabindex":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","attribute_label_langcode":"\u10d4\u10dc\u10d0","attribute_option_rtl":"\u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","attribute_option_ltr":"\u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d3\u10d0\u10dc \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5","attribute_label_langdir":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10db\u10e0\u10d7\u10e3\u10da\u10d4\u10d1\u10d0","attribute_label_datetime":"\u10d7\u10d0\u10e0\u10d8\u10e6\u10d8/\u10d3\u10e0\u10dd","attribute_label_cite":"\u10ea\u10d8\u10e2\u10d0\u10e2\u10d0","attribute_label_style":"\u10e1\u10e2\u10d8\u10da\u10d8","attribute_label_class":"\u10d9\u10da\u10d0\u10e1\u10d8","attribute_label_id":"\u10e1\u10d0\u10ee\u10d4\u10da\u10d8","attribute_label_title":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/kl_dlg.js
new file mode 100644
index 000000000..fcdd05b74
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/km_dlg.js
new file mode 100644
index 000000000..8ae02df38
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.xhtmlxtras_dlg',{"attribs_title":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8","option_rtl":"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784","option_ltr":"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6","insert_date":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791/\u1798\u17c9\u17c4\u1784",remove:"\u1799\u1780\u1785\u17c1\u1789","title_cite_element":"\u1792\u17b6\u178f\u17bb\u179f\u17c1\u1785\u1780\u17d2\u178f\u17b8\u178a\u1780\u179f\u17d2\u179a\u1784\u17cb","title_abbr_element":"\u1792\u17b6\u178f\u17bb\u17a2\u1780\u17d2\u179f\u179a\u179f\u1784\u17d2\u1781\u17c1\u1794","title_acronym_element":"\u1792\u17b6\u178f\u17bb\u1796\u17b6\u1780\u17d2\u1799\u1780\u17b6\u178f\u17cb\u1799\u1780\u17a2\u1780\u17d2\u179f\u179a\u178a\u17be\u1798","title_del_element":"\u1792\u17b6\u178f\u17bb\u179b\u17bb\u1794","title_ins_element":"\u1792\u17b6\u178f\u17bb\u1794\u1789\u17d2\u1785\u17bc\u179b","fieldset_events_tab":"\u1792\u17b6\u178f\u17bb\u1796\u17d2\u179a\u17b9\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17cd","fieldset_attrib_tab":"\u1792\u17b6\u178f\u17bb\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8","fieldset_general_tab":"\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u1791\u17bc\u1791\u17c5","events_tab":"\u1796\u17d2\u179a\u17b9\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17cd","attrib_tab":"\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8","general_tab":"\u1791\u17bc\u1791\u17c5","attribute_attrib_tab":"\u1782\u17bb\u178e\u179b\u1780\u17d2\u1781\u178e\u17c8","attribute_events_tab":"\u1796\u17d2\u179a\u17b9\u178f\u17d2\u178f\u17b7\u1780\u17b6\u179a\u178e\u17cd","attribute_label_accesskey":"\u1782\u17d2\u179a\u17b6\u1794\u17cb\u1785\u17bb\u1785\u1795\u17d2\u179b\u17bc\u179c\u1780\u17b6\u178f\u17cb","attribute_label_tabindex":"\u1795\u17d2\u1791\u17b6\u17c6\u1784\u179b\u17b7\u1794\u17b7\u1780\u17d2\u179a\u1798","attribute_label_langcode":"\u1797\u17b6\u179f\u17b6","attribute_option_rtl":"\u1796\u17b8\u179f\u17d2\u178f\u17b6\u17c6\u1791\u17c5\u1786\u17d2\u179c\u17c1\u1784","attribute_option_ltr":"\u1796\u17b8\u1786\u17d2\u179c\u17c1\u1784\u1791\u17c5\u179f\u17d2\u178f\u17b6\u17c6","attribute_label_langdir":"\u1791\u17b7\u179f\u178a\u17c5\u17a2\u178f\u17d2\u1790\u1794\u1791","attribute_label_datetime":"\u1780\u17b6\u179b\u1794\u179a\u17b7\u1785\u17d2\u1786\u17c1\u1791/\u1798\u17c9\u17c4\u1784","attribute_label_cite":"\u178a\u1780\u179f\u17d2\u179a\u1784\u17cb","attribute_label_style":"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798","attribute_label_class":"\u1790\u17d2\u1793\u17b6\u1780\u17cb","attribute_label_id":"\u179b.\u179f.","attribute_label_title":"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ko_dlg.js
new file mode 100644
index 000000000..b89bd9dc6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.xhtmlxtras_dlg',{"attribs_title":"\uc18d\uc131 \uc0bd\uc785/\ud3b8\uc9d1","option_rtl":"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c","option_ltr":"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c","insert_date":"\ud604\uc7ac \ub0a0\uc9dc/\uc2dc\uac04 \uc0bd\uc785",remove:"\uc81c\uac70","title_cite_element":"\uc778\uc6a9 \uc694\uc18c","title_abbr_element":"\uc57d\uc5b4 \uc694\uc18c","title_acronym_element":"\uba38\ub9bf\uae00\uc790 \uc694\uc18c","title_del_element":"\uc0ad\uc81c \uc694\uc18c","title_ins_element":"\uc0bd\uc785 \uc694\uc18c","fieldset_events_tab":"\uc694\uc18c \uc774\ubca4\ud2b8","fieldset_attrib_tab":"\uc694\uc18c \uc18d\uc131","fieldset_general_tab":"\uc77c\ubc18 \uc124\uc815","events_tab":"\uc774\ubca4\ud2b8","attrib_tab":"\uc18d\uc131","general_tab":"\uc77c\ubc18","attribute_attrib_tab":"\uc18d\uc131","attribute_events_tab":"\uc774\ubca4\ud2b8","attribute_label_accesskey":"\uc561\uc138\uc2a4 \ud0a4","attribute_label_tabindex":"\ud0ed \uc778\ub371\uc2a4","attribute_label_langcode":"\uc5b8\uc5b4","attribute_option_rtl":"\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c","attribute_option_ltr":"\uc67c\ucabd\uc5d0\uc11c \uc624\ub978\ucabd\uc73c\ub85c","attribute_label_langdir":"\ubb38\uc790 \ubc29\ud5a5","attribute_label_datetime":"\ub0a0\uc9dc/\uc2dc\uac04","attribute_label_cite":"\uc778\uc6a9","attribute_label_style":"\uc11c\uc2dd","attribute_label_class":"\ud074\ub798\uc2a4","attribute_label_id":"ID","attribute_label_title":"\uc81c\ubaa9"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/kz_dlg.js
new file mode 100644
index 000000000..c0165efbe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to Left","option_ltr":"Left to Right","insert_date":"Insert Current Date/Time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to Left","attribute_option_ltr":"Left to Right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lb_dlg.js
new file mode 100644
index 000000000..035f3e756
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.xhtmlxtras_dlg',{"attribs_title":"Attributer af\u00fcgen/beaarbechten","option_rtl":"Riets no l\u00e9nks","option_ltr":"L\u00e9nks no riets","insert_date":"Aktuell Z\u00e4it/Datum af\u00fcgen",remove:"Ewechhuelen","title_cite_element":"Quellenangab","title_abbr_element":"Ofkierzung","title_acronym_element":"Akronym","title_del_element":"Ewechgehollenen Text","title_ins_element":"Agef\u00fcgtenen Text","fieldset_events_tab":"Ereegnes","fieldset_attrib_tab":"Attributer","fieldset_general_tab":"Allgemeng Astellungen","events_tab":"Ereegnes","attrib_tab":"Attributer","general_tab":"Allgemeng","attribute_attrib_tab":"Attributer","attribute_events_tab":"Ereegnes","attribute_label_accesskey":"Tastekierzel","attribute_label_tabindex":"Tabindex","attribute_label_langcode":"Sproochen","attribute_option_rtl":"Riets no l\u00e9nks","attribute_option_ltr":"L\u00e9nks no riets","attribute_label_langdir":"Schr\u00ebftrichtung","attribute_label_datetime":"Z\u00e4it/Datum","attribute_label_cite":"Quellenangab","attribute_label_style":"Format","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lt_dlg.js
new file mode 100644
index 000000000..ebf7cfb31
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.xhtmlxtras_dlg',{"attribs_title":"\u012eterpti/Redaguoti atributus","option_rtl":"I\u0161 de\u0161in\u0117s \u012f kair\u0119","option_ltr":"I\u0161 kair\u0117s \u012f de\u0161in\u0119","insert_date":"\u012eterpti dabartin\u0119 dat\u0105/laik\u0105",remove:"Pa\u0161alinti","title_cite_element":"Citatos elementas","title_abbr_element":"Santrumpos elementas","title_acronym_element":"Akronimo elementas","title_del_element":"Pa\u0161alinimo elementas","title_ins_element":"\u012eterpimo elementas","fieldset_events_tab":"Elemento \u012fvykiai","fieldset_attrib_tab":"Elemento atributai","fieldset_general_tab":"Bendri nustatymai","events_tab":"\u012evykiai","attrib_tab":"Atributai","general_tab":"Bendra","attribute_attrib_tab":"Atributai","attribute_events_tab":"\u012evykiai","attribute_label_accesskey":"Prieigos klavi\u0161as","attribute_label_tabindex":"Tabuliavimo indeksas","attribute_label_langcode":"Kalba","attribute_option_rtl":"I\u0161 de\u0161in\u0117s \u012f kair\u0119","attribute_option_ltr":"I\u0161 kair\u0117s \u012f de\u0161in\u0119","attribute_label_langdir":"Kalbos teksto kryptis","attribute_label_datetime":"Data/Laikas","attribute_label_cite":"Citata","attribute_label_style":"Stilius","attribute_label_class":"Klas\u0117","attribute_label_id":"ID","attribute_label_title":"Pavadinimas"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lv_dlg.js
new file mode 100644
index 000000000..f41b5045d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"\u012apa\u0161\u012bbas","attribute_events_tab":"Notikumi","attribute_label_accesskey":"Pieejas poga","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Valoda","attribute_option_rtl":"No labas puses uz kreiso","attribute_option_ltr":"No kreisas puses uz labo","attribute_label_langdir":"Teksta v\u012brziens","attribute_label_datetime":"Datums/Laiks","attribute_label_cite":"Cite","attribute_label_style":"Stils","attribute_label_class":"Klase","attribute_label_id":"ID","attribute_label_title":"Nosaukums"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/mk_dlg.js
new file mode 100644
index 000000000..0e7d13a11
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.xhtmlxtras_dlg',{"attribs_title":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","option_rtl":"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e","option_ltr":"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e","insert_date":"\u0412\u043d\u0435\u0441\u0438 \u0442\u0435\u043a\u043e\u0432\u0435\u043d \u0434\u0430\u0442\u0443\u043c/\u0432\u0440\u0435\u043c\u0435",remove:"\u041e\u0434\u0441\u0442\u0440\u0430\u043d\u0438","title_cite_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0446\u0438\u0442\u0430\u0442","title_abbr_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u043a\u0440\u0430\u0442\u0435\u043d\u043a\u0430","title_acronym_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0430\u043a\u0440\u043e\u043d\u0438\u043c","title_del_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u0431\u0440\u0438\u0448\u0435\u045a\u0435","title_ins_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u0432\u043d\u0435\u0441","fieldset_events_tab":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u043d\u0430\u0441\u0442\u0430\u043d\u0438","fieldset_attrib_tab":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0437\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","fieldset_general_tab":"\u041e\u0441\u043d\u043e\u0432\u043d\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0443\u0432\u0430\u045a\u0430","events_tab":"\u041d\u0430\u0441\u0442\u0430\u043d\u0438","attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","general_tab":"\u041e\u0441\u043d\u043e\u0432\u043d\u043e","attribute_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","attribute_events_tab":"\u041d\u0430\u0441\u0442\u0430\u043d\u0438","attribute_label_accesskey":"\u041a\u043b\u0443\u0447 \u0437\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u043f","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"\u0408\u0430\u0437\u0438\u043a","attribute_option_rtl":"\u041e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e","attribute_option_ltr":"\u041e\u0434 \u043b\u0435\u0432\u043e \u043d\u0430 \u0434\u0435\u0441\u043d\u043e","attribute_label_langdir":"\u0421\u043c\u0435\u0440 \u043d\u0430 \u0458\u0430\u0437\u0438\u043a\u043e\u0442","attribute_label_datetime":"\u0414\u0430\u0442\u0443\u043c/\u0432\u0440\u0435\u043c\u0435","attribute_label_cite":"\u0426\u0438\u0442\u0430\u0442","attribute_label_style":"\u0421\u0442\u0438\u043b","attribute_label_class":"\u041a\u043b\u0430\u0441\u0430","attribute_label_id":"\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0458\u0430 (Id)","attribute_label_title":"\u041d\u0430\u0441\u043b\u043e\u0432"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ml_dlg.js
new file mode 100644
index 000000000..2f1cca92d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/mn_dlg.js
new file mode 100644
index 000000000..4e8296a3a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.xhtmlxtras_dlg',{"attribs_title":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u0437\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0445","option_rtl":"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d","option_ltr":"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d","insert_date":"\u0418\u0434\u044d\u0432\u0445\u0442\u044d\u0439 \u0446\u0430\u0433/\u043e\u0433\u043d\u043e\u043e \u0431\u0443\u0443\u043b\u0433\u0430\u0445",remove:"\u0423\u0441\u0442\u0433\u0430\u0445","title_cite_element":"\u042d\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b","title_abbr_element":"\u0422\u043e\u0432\u0447\u043b\u043e\u043b","title_acronym_element":"\u0422\u043e\u0432\u0447\u0438\u043b\u0441\u043e\u043d \u04af\u0433","title_del_element":"\u0423\u0441\u0442\u0441\u0430\u043d \u0431\u0438\u0447\u0432\u044d\u0440","title_ins_element":"\u0411\u0443\u0443\u043b\u0433\u0430\u0441\u0430\u043d \u0431\u0438\u0447\u0432\u044d\u0440","fieldset_events_tab":"\u04ae\u0437\u044d\u0433\u0434\u044d\u043b","fieldset_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442","fieldset_general_tab":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439 \u0442\u043e\u0445\u0438\u0440\u0433\u043e\u043e","events_tab":"\u04ae\u0437\u044d\u0433\u0434\u044d\u043b","attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442","general_tab":"\u0415\u0440\u04e9\u043d\u0445\u0438\u0439","attribute_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442","attribute_events_tab":"\u04ae\u0437\u044d\u0433\u0434\u044d\u043b","attribute_label_accesskey":"\u0422\u043e\u0432\u0447\u0438\u043b\u0431\u043e\u0440","attribute_label_tabindex":"\u0422\u0430\u0431\u0443\u043b\u0430\u0442\u043e\u0440 \u0438\u043d\u0434\u0435\u043a\u0441","attribute_label_langcode":"\u0425\u044d\u043b","attribute_option_rtl":"\u0411\u0430\u0440\u0443\u0443\u043d\u0430\u0430\u0441 \u0437\u04af\u04af\u043d","attribute_option_ltr":"\u0417\u04af\u04af\u043d\u044d\u044d\u0441 \u0431\u0430\u0440\u0443\u0443\u043d","attribute_label_langdir":"\u0425\u044d\u043b\u043d\u0438\u0439 \u0447\u0438\u0433\u043b\u044d\u043b","attribute_label_datetime":"\u0426\u0430\u0433/\u041e\u0433\u043d\u043e\u043e","attribute_label_cite":"\u042d\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b","attribute_label_style":"\u0425\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442","attribute_label_class":"\u0410\u043d\u0433\u0438","attribute_label_id":"\u0422\u0422","attribute_label_title":"\u0413\u0430\u0440\u0447\u0438\u0433"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ms_dlg.js
new file mode 100644
index 000000000..19db57528
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.xhtmlxtras_dlg',{"attribs_title":"Masukkan/Sunting Ciri-ciri","option_rtl":"Kanan ke kiri","option_ltr":"Kiri ke kanan","insert_date":"Masukkan tarikh/masa sekarang",remove:"Alih","title_cite_element":"Kutipan Unsur","title_abbr_element":"Singkatan Unsur","title_acronym_element":"Akronim Unsur","title_del_element":"Pemadaman Unsur","title_ins_element":"Kemasukkan Unsur","fieldset_events_tab":"Unsur Peristiwa","fieldset_attrib_tab":"Unsur Ciri-ciri","fieldset_general_tab":"Susunan Am","events_tab":"Peristiwa","attrib_tab":"Ciri-ciri","general_tab":"Am","attribute_attrib_tab":"Ciri-ciri","attribute_events_tab":"Peristiwa","attribute_label_accesskey":"Kunci akses","attribute_label_tabindex":"Tanda indeks","attribute_label_langcode":"Bahasa","attribute_option_rtl":"Kanan ke kiri","attribute_option_ltr":"Kiri ke kanan","attribute_label_langdir":"Arah Teks","attribute_label_datetime":"Tarikh/Masa","attribute_label_cite":"Cuplik","attribute_label_style":"Gaya","attribute_label_class":"Kelas","attribute_label_id":"ID","attribute_label_title":"Tajuk"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/my_dlg.js
new file mode 100644
index 000000000..b79183a64
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to Left","option_ltr":"Left to Right","insert_date":"Insert Current Date/Time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to Left","attribute_option_ltr":"Left to Right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nb_dlg.js
new file mode 100644
index 000000000..e5207ebc6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.xhtmlxtras_dlg',{"attribs_title":"Sett inn / endre attributter","option_rtl":"H\u00f8yre mot venstre","option_ltr":"Venstre mot h\u00f8yre","insert_date":"Sett inn dato/tid",remove:"Fjern","title_cite_element":"Sitatelement","title_abbr_element":"Forkortelseselement","title_acronym_element":"Akronymelement","title_del_element":"Sletteelement","title_ins_element":"Innsettingselement","fieldset_events_tab":"Elementhendelser","fieldset_attrib_tab":"Elementattributter","fieldset_general_tab":"Generelle innstillinger","events_tab":"Hendelser","attrib_tab":"Attributter","general_tab":"Generelt","attribute_attrib_tab":"Attributter","attribute_events_tab":"Hendelser","attribute_label_accesskey":"Tilgangsn\u00f8kkel","attribute_label_tabindex":"Tabuleringsindeks","attribute_label_langcode":"Spr\u00e5k","attribute_option_rtl":"H\u00f8yre til venstre","attribute_option_ltr":"Venstre til h\u00f8yre","attribute_label_langdir":"Tekstretning","attribute_label_datetime":"Dato/tid","attribute_label_cite":"Sted","attribute_label_style":"Stil","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Tittel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nl_dlg.js
new file mode 100644
index 000000000..5708ddfe4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.xhtmlxtras_dlg',{"attribs_title":"Attributen Invoegen/bewerken","option_rtl":"Van rechts naar links","option_ltr":"Van links naar rechts","insert_date":"Huidige datum/tijd invoegen",remove:"Verwijderen","title_cite_element":"Citaat","title_abbr_element":"Afkorting","title_acronym_element":"Synoniem","title_del_element":"Verwijderingselement","title_ins_element":"Invoegingselement","fieldset_events_tab":"Element Gebeurtenissen","fieldset_attrib_tab":"Elementattributen","fieldset_general_tab":"Algemene instellingen","events_tab":"Gebeurtenissen","attrib_tab":"Attributen","general_tab":"Algemeen","attribute_attrib_tab":"Attributen","attribute_events_tab":"Gebeurtenissen","attribute_label_accesskey":"Toegangstoets","attribute_label_tabindex":"Tabvolgorde","attribute_label_langcode":"Taal","attribute_option_rtl":"Van rechts naar links","attribute_option_ltr":"Van links naar rechts","attribute_label_langdir":"Tekstrichting","attribute_label_datetime":"Datum/Tijd","attribute_label_cite":"Citaat","attribute_label_style":"Stijl","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nn_dlg.js
new file mode 100644
index 000000000..415d7245e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.xhtmlxtras_dlg',{"attribs_title":"Set inn / endre attributt","option_rtl":"H\u00f8gre mot venstre","option_ltr":"Venstre mot h\u00f8gre","insert_date":"Set inn dato/ti",remove:"Fjern","title_cite_element":"Sitatelement","title_abbr_element":"Forkortingselement","title_acronym_element":"Akronymelement","title_del_element":"Sletteelement","title_ins_element":"Innsetjingselement","fieldset_events_tab":"Elementhendingar","fieldset_attrib_tab":"Elementattributtar","fieldset_general_tab":"Generelle innstillingar","events_tab":"Hendingar","attrib_tab":"Attributtar","general_tab":"Generelt","attribute_attrib_tab":"Attributt","attribute_events_tab":"Hendingar","attribute_label_accesskey":"Tilgangsn\u00f8kkel","attribute_label_tabindex":"Tabuleringsindeks","attribute_label_langcode":"Spr\u00e5k","attribute_option_rtl":"H\u00f8gre mot venstre","attribute_option_ltr":"Venstre mot h\u00f8gre","attribute_label_langdir":"Tekstretning","attribute_label_datetime":"Dato/tid","attribute_label_cite":"Stad","attribute_label_style":"Stil","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Tittel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/no_dlg.js
new file mode 100644
index 000000000..7949e642a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.xhtmlxtras_dlg',{"attribs_title":"Sett inn/editer attributt","option_rtl":"H\u00f8yre mot venstre","option_ltr":"Venstre mot h\u00f8yre","insert_date":"Sett inn dato/tid",remove:"Fjerne","title_cite_element":"Sitat element","title_abbr_element":"Forkorting element","title_acronym_element":"Akronym element","title_del_element":"Slette element","title_ins_element":"Innsetting element","fieldset_events_tab":"Element hendelser","fieldset_attrib_tab":"Element attributter","fieldset_general_tab":"Generelle innstillinger","events_tab":"Hendelser","attrib_tab":"Attributter","general_tab":"Generelt","attribute_attrib_tab":"Attributter","attribute_events_tab":"Hendelser","attribute_label_accesskey":"Tilgangsn\u00f8kkel","attribute_label_tabindex":"Tab indeks","attribute_label_langcode":"Spr\u00e5k","attribute_option_rtl":"H\u00f8yre mot venstre","attribute_option_ltr":"Venstre mot h\u00f8yre","attribute_label_langdir":"Tekstretning","attribute_label_datetime":"Dato/tid","attribute_label_cite":"Sted","attribute_label_style":"Stil","attribute_label_class":"Klasse","attribute_label_id":"ID","attribute_label_title":"Tittel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/pl_dlg.js
new file mode 100644
index 000000000..a409dd326
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.xhtmlxtras_dlg',{"attribs_title":"Wklej/edytuj atrybuty","option_rtl":"Kierunek z prawej do lewej","option_ltr":"Kierunek z lewej do prawej","insert_date":"Wklej aktualn\u0105 dat\u0119/czas",remove:"Usu\u0144","title_cite_element":"Cytat","title_abbr_element":"Skr\u00f3t","title_acronym_element":"Akronim","title_del_element":"Usuni\u0119cie","title_ins_element":"Wstawienie","fieldset_events_tab":"Zdarzenia","fieldset_attrib_tab":"Atrybuty","fieldset_general_tab":"G\u0142\u00f3wne ustawienia","events_tab":"Zdarzenia","attrib_tab":"Atrybuty","general_tab":"G\u0142\u00f3wny","attribute_attrib_tab":"Atrybuty","attribute_events_tab":"Zdarzenia","attribute_label_accesskey":"Klawisz skr\u00f3tu","attribute_label_tabindex":"Numer tabulacji","attribute_label_langcode":"J\u0119zyk","attribute_option_rtl":"Kierunek z prawej do lewej","attribute_option_ltr":"Kierunek z lewej do prawej","attribute_label_langdir":"Kierunek czytania tekstu","attribute_label_datetime":"Data/Czas","attribute_label_cite":"Cytat","attribute_label_style":"Styl","attribute_label_class":"Klasa","attribute_label_id":"ID","attribute_label_title":"Tytu\u0142"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ps_dlg.js
new file mode 100644
index 000000000..e0d668add
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/pt_dlg.js
new file mode 100644
index 000000000..520eaa535
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.xhtmlxtras_dlg',{"attribs_title":"Inserir/editar atributos","option_rtl":"Da direita para a esquerda","option_ltr":"Da esquerda para a direita","insert_date":"Inserir data/hora",remove:"Remover","title_cite_element":"Cita\u00e7\u00e3o","title_abbr_element":"Abrevia\u00e7\u00e3o","title_acronym_element":"Acr\u00f4nimo","title_del_element":"Apagar","title_ins_element":"Inserir","fieldset_events_tab":"Eventos","fieldset_attrib_tab":"Atributos","fieldset_general_tab":"Configura\u00e7\u00f5es gerais","events_tab":"Eventos","attrib_tab":"Atributos","general_tab":"Geral","attribute_attrib_tab":"Atributos","attribute_events_tab":"Eventos","attribute_label_accesskey":"Tecla de Atalho","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Idioma","attribute_option_rtl":"Da direita para a esquerda","attribute_option_ltr":"Da esquerda para a direita","attribute_label_langdir":"Dire\u00e7\u00e3o do texto","attribute_label_datetime":"Data/Hora","attribute_label_cite":"Citar","attribute_label_style":"Estilo","attribute_label_class":"Classe","attribute_label_id":"ID","attribute_label_title":"T\u00edtulo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ro_dlg.js
new file mode 100644
index 000000000..bb802193c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.xhtmlxtras_dlg',{"attribs_title":"Inserare atribute","option_rtl":"De la dreapta la st\u00e2nga","option_ltr":"De la st\u00e2nga la dreapta","insert_date":"Inserare dat\u0103/or\u0103 curent\u0103",remove:"Scoate","title_cite_element":"Citare","title_abbr_element":"Abreviere","title_acronym_element":"Acronim","title_del_element":"\u0218tergere element","title_ins_element":"Inserare element","fieldset_events_tab":"Evenimente element","fieldset_attrib_tab":"Atribute element","fieldset_general_tab":"Set\u0103ri generale","events_tab":"Evenimente","attrib_tab":"Atribute","general_tab":"General","attribute_attrib_tab":"Atribute","attribute_events_tab":"Evenimente","attribute_label_accesskey":"Tast\u0103 de acces","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Limb\u0103","attribute_option_rtl":"De la dreapta la st\u00e2nga","attribute_option_ltr":"De la st\u00e2nga la dreapta","attribute_label_langdir":"Direc\u021bie text","attribute_label_datetime":"Dat\u0103/or\u0103","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Clas\u0103","attribute_label_id":"ID","attribute_label_title":"Titlu"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ru_dlg.js
new file mode 100644
index 000000000..bd25335d6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.xhtmlxtras_dlg',{"attribs_title":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430","option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","option_ltr":"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e","insert_date":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0434\u0430\u0442\u0443/\u0432\u0440\u0435\u043c\u044f",remove:"\u0423\u0434\u0430\u043b\u0438\u0442\u044c","title_cite_element":"\u0426\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435","title_abbr_element":"\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435","title_acronym_element":"\u0410\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0446\u0438\u044f","title_del_element":"\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435","title_ins_element":"\u0417\u0430\u043c\u0435\u043d\u0430","fieldset_events_tab":"\u0421\u043e\u0431\u044b\u0442\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_attrib_tab":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430","fieldset_general_tab":"\u041e\u0431\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b","events_tab":"\u0421\u043e\u0431\u044b\u0442\u0438\u044f","attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b","general_tab":"\u041e\u0431\u0449\u0435\u0435","attribute_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b","attribute_events_tab":"\u0421\u043e\u0431\u044b\u0442\u0438\u044f","attribute_label_accesskey":"\u041a\u043b\u044e\u0447 \u0434\u043e\u0441\u0442\u0443\u043f\u0430","attribute_label_tabindex":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","attribute_label_langcode":"\u042f\u0437\u044b\u043a","attribute_option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e","attribute_option_ltr":"\u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e","attribute_label_langdir":"\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430","attribute_label_datetime":"\u0414\u0430\u0442\u0430/\u0412\u0440\u0435\u043c\u044f","attribute_label_cite":"\u0426\u0438\u0442\u0430\u0442\u0430","attribute_label_style":"\u0421\u0442\u0438\u043b\u044c","attribute_label_class":"\u041a\u043b\u0430\u0441\u0441","attribute_label_id":"\u0418\u043c\u044f","attribute_label_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sc_dlg.js
new file mode 100644
index 000000000..065334569
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","option_rtl":"\u7531\u53f3\u5230\u5de6","option_ltr":"\u7531\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u73b0\u5728\u65e5\u671f/\u65f6\u95f4",remove:"\u5220\u9664","title_cite_element":"\u5f15\u6587\u5143\u7d20","title_abbr_element":"\u7f29\u5199\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u7f29\u5199\u5143\u7d20","title_del_element":"\u5220\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c5e\u6027","fieldset_general_tab":"\u4e00\u822c","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u952e","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u7531\u53f3\u5230\u5de6","attribute_option_ltr":"\u7531\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u4e66\u5199\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u6587","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u7c7b\u578b","attribute_label_id":"ID","attribute_label_title":"\u67e5\u627e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/se_dlg.js
new file mode 100644
index 000000000..a8c468df4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.xhtmlxtras_dlg',{"attribs_title":"Redigera attribut","option_rtl":"H\u00f6ger till v\u00e4nster","option_ltr":"V\u00e4nster till h\u00f6ger","insert_date":"Infoga nuvarande datum och tid",remove:"Radera","title_cite_element":"Citat","title_abbr_element":"F\u00f6rkortning","title_acronym_element":"Akronym","title_del_element":"Markera som struket","title_ins_element":"Markera som tillagt","fieldset_events_tab":"H\u00e4ndelser","fieldset_attrib_tab":"Attribut","fieldset_general_tab":"Generella inst\u00e4llningar","events_tab":"H\u00e4ndelser","attrib_tab":"Attribut","general_tab":"Generellt","attribute_attrib_tab":"Attribut","attribute_events_tab":"H\u00e4ndelser","attribute_label_accesskey":"Snabbtangent","attribute_label_tabindex":"Tabbindex","attribute_label_langcode":"Spr\u00e5k","attribute_option_rtl":"H\u00f6ger till v\u00e4nster","attribute_option_ltr":"V\u00e4nster till h\u00f6ger","attribute_label_langdir":"Skriftriktning","attribute_label_datetime":"Datum/Tid","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klass","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/si_dlg.js
new file mode 100644
index 000000000..4d44aa567
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sk_dlg.js
new file mode 100644
index 000000000..3ee6e8b5d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.xhtmlxtras_dlg',{"attribs_title":"Vlo\u017ei\u0165/upravi\u0165 atrib\u00faty","option_rtl":"Sprava do\u013eava","option_ltr":"Z\u013eava doprava","insert_date":"Vlo\u017ei\u0165 aktu\u00e1lny d\u00e1tum/\u010das",remove:"Odstr\u00e1ni\u0165","title_cite_element":"Cit\u00e1cia","title_abbr_element":"Skratka","title_acronym_element":"Akronym","title_del_element":"Odstr\u00e1nen\u00fd text","title_ins_element":"Pridan\u00fd text","fieldset_events_tab":"Atrib\u00faty udalost\u00ed","fieldset_attrib_tab":"Atrib\u00faty prvku","fieldset_general_tab":"Obecn\u00e9 parametre","events_tab":"Udalosti","attrib_tab":"Atrib\u00faty","general_tab":"Obecn\u00e9","attribute_attrib_tab":"Atrib\u00faty","attribute_events_tab":"Udalosti","attribute_label_accesskey":"Kl\u00e1vesov\u00e1 skratka","attribute_label_tabindex":"Poradie pre tabul\u00e1tor","attribute_label_langcode":"Jazyk","attribute_option_rtl":"Sprava do\u013eava","attribute_option_ltr":"Z\u013eava doprava","attribute_label_langdir":"Smer textu","attribute_label_datetime":"D\u00e1tum/\u010das","attribute_label_cite":"Cit\u00e1cia","attribute_label_style":"\u0160t\u00fdl","attribute_label_class":"Trieda","attribute_label_id":"ID","attribute_label_title":"Titulok"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sl_dlg.js
new file mode 100644
index 000000000..09cb321e5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.xhtmlxtras_dlg',{"attribs_title":"Vstavi/uredi atribute","option_rtl":"Od desne proti levi","option_ltr":"Od leve proti desni","insert_date":"Vstavi trenutni datum/\u010das",remove:"Odstrani","title_cite_element":"Citat","title_abbr_element":"Okraj\u0161ava","title_acronym_element":"Kratica","title_del_element":"Izbrisano","title_ins_element":"Vstavljeno","fieldset_events_tab":"Dogodki elementa","fieldset_attrib_tab":"Atributi elementa","fieldset_general_tab":"Splo\u0161ne nastavitve","events_tab":"Dogodki","attrib_tab":"Atributi","general_tab":"Splo\u0161no","attribute_attrib_tab":"Atributi","attribute_events_tab":"Dogodki","attribute_label_accesskey":"Tipka dostopa","attribute_label_tabindex":"Zap. \u0161t.","attribute_label_langcode":"Jezik","attribute_option_rtl":"Od desne proti levi","attribute_option_ltr":"Od leve proti desni","attribute_label_langdir":"Smer pisave","attribute_label_datetime":"Datum/ura","attribute_label_cite":"Citat","attribute_label_style":"Slog","attribute_label_class":"Razred","attribute_label_id":"Id","attribute_label_title":"Naslov"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sq_dlg.js
new file mode 100644
index 000000000..27641487a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.xhtmlxtras_dlg',{"attribs_title":"Fut/Edito Tipare","option_rtl":"Djathtas-Majtas","option_ltr":"Majtas-Djathtas","insert_date":"Fut dat\u00ebn/or\u00ebn aktuale",remove:"Fshi","title_cite_element":"Element Citat","title_abbr_element":"Element Shkurtimi","title_acronym_element":"Element Akronim","title_del_element":"Element Fshir\u00ebs","title_ins_element":"Element Fut\u00ebs","fieldset_events_tab":"Ngjarjet e elementit","fieldset_attrib_tab":"Tiparet e elementit","fieldset_general_tab":"Opsionet e P\u00ebrgjithshme","events_tab":"Ngjarjet","attrib_tab":"Tiparet","general_tab":"T\u00eb P\u00ebrgjithshme","attribute_attrib_tab":"Tiparet","attribute_events_tab":"Ngjarjet","attribute_label_accesskey":"Butoni i aksesit","attribute_label_tabindex":"Indeksi i Tab","attribute_label_langcode":"Gjuha","attribute_option_rtl":"Djathtas-Majtas","attribute_option_ltr":"Majtas-Djathtas","attribute_label_langdir":"Drejtimi i tekstit","attribute_label_datetime":"Data/Ora","attribute_label_cite":"Citati","attribute_label_style":"Stili","attribute_label_class":"Klasa","attribute_label_id":"ID","attribute_label_title":"Titulli"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sr_dlg.js
new file mode 100644
index 000000000..8d72ccc67
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.xhtmlxtras_dlg',{"attribs_title":"Umetni/Uredi atribute","option_rtl":"Zdesna nalevo","option_ltr":"Sleva nadesno","insert_date":"Ubaci sada\u0161nji datum/vreme",remove:"Ukloni","title_cite_element":"Element za citat","title_abbr_element":"Element za skra\u0107enicu","title_acronym_element":"Element za akronim","title_del_element":"Element za brisanje","title_ins_element":"Element za umetanje ","fieldset_events_tab":"Element za doga\u0111aje","fieldset_attrib_tab":"Element za atribute","fieldset_general_tab":"Osnovna pode\u0161avanja","events_tab":"Doga\u0111aji","attrib_tab":"Atributi","general_tab":"Osnovno","attribute_attrib_tab":"Atributi","attribute_events_tab":"Doga\u0111aji","attribute_label_accesskey":"Taster za pristup","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Jezik","attribute_option_rtl":"Zdesna nalevo","attribute_option_ltr":"Sleva nadesno","attribute_label_langdir":"Smer teksta","attribute_label_datetime":"Datum/Vreme","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klasa","attribute_label_id":"ID","attribute_label_title":"Naslov"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sv_dlg.js
new file mode 100644
index 000000000..71847974c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.xhtmlxtras_dlg',{"attribs_title":"Redigera attribut","option_rtl":"H\u00f6ger till v\u00e4nster","option_ltr":"V\u00e4nster till h\u00f6ger","insert_date":"Infoga nuvarande datum och tid",remove:"Radera","title_cite_element":"Citat","title_abbr_element":"F\u00f6rkortning","title_acronym_element":"Akronym","title_del_element":"Markera som struket","title_ins_element":"Markera som tillagt","fieldset_events_tab":"H\u00e4ndelser","fieldset_attrib_tab":"Attribut","fieldset_general_tab":"Generella inst\u00e4llningar","events_tab":"H\u00e4ndelser","attrib_tab":"Attribut","general_tab":"Generellt","attribute_attrib_tab":"Attribut","attribute_events_tab":"H\u00e4ndelser","attribute_label_accesskey":"Snabbtangent","attribute_label_tabindex":"Tabbindex","attribute_label_langcode":"Spr\u00e5k","attribute_option_rtl":"H\u00f6ger till v\u00e4nster","attribute_option_ltr":"V\u00e4nster till h\u00f6ger","attribute_label_langdir":"Skriftriktning","attribute_label_datetime":"Datum/Tid","attribute_label_cite":"Citat","attribute_label_style":"Stil","attribute_label_class":"Klass","attribute_label_id":"ID","attribute_label_title":"Titel"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sy_dlg.js
new file mode 100644
index 000000000..84e20e652
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to Left","option_ltr":"Left to Right","insert_date":"Insert Current Date/Time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to Left","attribute_option_ltr":"Left to Right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ta_dlg.js
new file mode 100644
index 000000000..3079423b1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/te_dlg.js
new file mode 100644
index 000000000..9e6d8eac9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/th_dlg.js
new file mode 100644
index 000000000..c5e2eb43e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.xhtmlxtras_dlg',{"attribs_title":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 Attributes","option_rtl":"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22","option_ltr":"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32","insert_date":"\u0e40\u0e1e\u0e34\u0e48\u0e21 \u0e27\u0e31\u0e19/\u0e40\u0e27\u0e25\u0e32",remove:"\u0e25\u0e1a","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Event","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","events_tab":"\u0e01\u0e34\u0e08\u0e01\u0e23\u0e23\u0e21","attrib_tab":"Attributes","general_tab":"\u0e17\u0e31\u0e48\u0e27\u0e44\u0e1b","attribute_attrib_tab":"Attributes","attribute_events_tab":"Event","attribute_label_accesskey":"\u0e1b\u0e38\u0e48\u0e21\u0e25\u0e31\u0e14","attribute_label_tabindex":"\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e41\u0e17\u0e47\u0e1a","attribute_label_langcode":"\u0e20\u0e32\u0e29\u0e32","attribute_option_rtl":"\u0e02\u0e27\u0e32\u0e44\u0e1b\u0e0b\u0e49\u0e32\u0e22","attribute_option_ltr":"\u0e0b\u0e49\u0e32\u0e22\u0e44\u0e1b\u0e02\u0e27\u0e32","attribute_label_langdir":"\u0e17\u0e34\u0e28\u0e17\u0e32\u0e07\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","attribute_label_datetime":"\u0e27\u0e31\u0e19/\u0e40\u0e27\u0e25\u0e32","attribute_label_cite":"Cite","attribute_label_style":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","attribute_label_class":"\u0e04\u0e25\u0e32\u0e2a","attribute_label_id":"ID","attribute_label_title":"\u0e0a\u0e37\u0e48\u0e2d"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tn_dlg.js
new file mode 100644
index 000000000..a26d16291
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tr_dlg.js
new file mode 100644
index 000000000..cca543566
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.xhtmlxtras_dlg',{"attribs_title":"Nitelik ekle/d\u00fczenle","option_rtl":"Soldan sa\u011fa","option_ltr":"Sa\u011fdan sola","insert_date":"\u015euan ki tarih/saati ekle",remove:"Sil","title_cite_element":"Nesne Al\u0131nt\u0131s\u0131","title_abbr_element":"Nesne K\u0131saltmas\u0131","title_acronym_element":"Nense K\u0131sa ad\u0131","title_del_element":"Nesne Silme","title_ins_element":"Nesne Ekleme","fieldset_events_tab":"Nesne Olaylar\u0131","fieldset_attrib_tab":"Nesne Nitelikleri","fieldset_general_tab":"Genel Ayarlar","events_tab":"Olaylar","attrib_tab":"Nitelikler","general_tab":"Genel","attribute_attrib_tab":"Nitelikler","attribute_events_tab":"Olaylar","attribute_label_accesskey":"Eri\u015fim Tu\u015fu","attribute_label_tabindex":"Sekme indeksi","attribute_label_langcode":"Dil","attribute_option_rtl":"Soldan sa\u011fa","attribute_option_ltr":"Sa\u011fdan sola","attribute_label_langdir":"Metnin y\u00f6n\u00fc","attribute_label_datetime":"Tarih/Saat","attribute_label_cite":"Al\u0131nt\u0131 yapmak","attribute_label_style":"Stil","attribute_label_class":"S\u0131n\u0131f","attribute_label_id":"ID","attribute_label_title":"Ba\u015fl\u0131k"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tt_dlg.js
new file mode 100644
index 000000000..3e678a1ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7de8\u8f2f \u5c6c\u6027","option_rtl":"\u5f9e\u53f3\u5230\u5de6","option_ltr":"\u5f9e\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u7576\u524d\u65e5\u671f/\u6642\u9593",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u7269\u4ef6","title_abbr_element":"\u7e2e\u5beb\u7269\u4ef6","title_acronym_element":"\u9996\u5b57\u6bcd\u7e2e\u5beb\u7269\u4ef6","title_del_element":"\u522a\u9664\u7269\u4ef6","title_ins_element":"\u63d2\u5165\u7269\u4ef6","fieldset_events_tab":"\u7269\u4ef6\u4e8b\u4ef6","fieldset_attrib_tab":"\u7269\u4ef6\u5c6c\u6027","fieldset_general_tab":"\u57fa\u672c","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c6c\u6027","general_tab":"\u57fa\u672c","attribute_attrib_tab":"\u5c6c\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u901f\u9375","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8a9e\u8a00","attribute_option_rtl":"\u5f9e\u53f3\u5230\u5de6","attribute_option_ltr":"\u5f9e\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u66f8\u5beb\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u6642\u9593","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6a23\u5f0f","attribute_label_class":"\u6a23\u5f0f\u985e","attribute_label_id":"ID","attribute_label_title":"\u641c\u5c0b"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tw_dlg.js
new file mode 100644
index 000000000..470b9a566
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7de8\u8f2f\u5c6c\u6027","option_rtl":"\u5f9e\u53f3\u5230\u5de6","option_ltr":"\u5f9e\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u76ee\u524d\u65e5\u671f/\u6642\u9593",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5143\u7d20","title_abbr_element":"\u7e2e\u5beb\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u6bcd\u7e2e\u5beb\u5143\u7d20","title_del_element":"\u522a\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c6c\u6027","fieldset_general_tab":"\u4e00\u822c\u8a2d\u5b9a","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c6c\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c6c\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u9375","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8a9e\u8a00","attribute_option_rtl":"\u5f9e\u53f3\u5230\u5de6","attribute_option_ltr":"\u5f9e\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u66f8\u5beb\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u6642\u9593","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6a23\u5f0f","attribute_label_class":"\u985e\u5225","attribute_label_id":"ID","attribute_label_title":"\u6a19\u984c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/uk_dlg.js
new file mode 100644
index 000000000..1dbf92892
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.xhtmlxtras_dlg',{"attribs_title":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438","option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043b\u0456\u0432\u043e\u0440\u0443\u0447","option_ltr":"\u0417\u043b\u0456\u0432\u0430 \u043f\u0440\u0430\u0432\u043e\u0440\u0443\u0447","insert_date":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043f\u043e\u0442\u043e\u0447\u043d\u0456 \u0434\u0430\u0442\u0443/\u0447\u0430\u0441",remove:"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438","title_cite_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0446\u0438\u0442\u0443\u0432\u0430\u043d\u043d\u044f","title_abbr_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0430\u0431\u0440\u0435\u0432\u0456\u0430\u0442\u0443\u0440\u0438","title_acronym_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0430\u043a\u0440\u043e\u043d\u0456\u043c\u0443","title_del_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0438\u0434\u0430\u043b\u0435\u043d\u043d\u044f","title_ins_element":"\u0415\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u0441\u0442\u0430\u0432\u043a\u0438","fieldset_events_tab":"\u041f\u043e\u0434\u0456\u0457 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0443","fieldset_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0443","fieldset_general_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f","events_tab":"\u041f\u043e\u0434\u0456\u0457","attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","general_tab":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435","attribute_attrib_tab":"\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438","attribute_events_tab":"\u041f\u043e\u0434\u0456\u0457","attribute_label_accesskey":"\u041a\u043b\u0430\u0432\u0456\u0448\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0443","attribute_label_tabindex":"\u0422\u0430\u0431\u0456\u043d\u0434\u0435\u043a\u0441","attribute_label_langcode":"\u041c\u043e\u0432\u0430","attribute_option_rtl":"\u0421\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0456\u0432\u043e","attribute_option_ltr":"\u0417\u043b\u0456\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e","attribute_label_langdir":"\u041d\u0430\u043f\u0440\u044f\u043c \u0442\u0435\u043a\u0441\u0442\u0443","attribute_label_datetime":"\u0414\u0430\u0442\u0430/\u0427\u0430\u0441","attribute_label_cite":"\u0426\u0438\u0442\u0430\u0442\u0430","attribute_label_style":"\u0421\u0442\u0438\u043b\u044c","attribute_label_class":"\u041a\u043b\u0430\u0441","attribute_label_id":"\u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440","attribute_label_title":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ur_dlg.js
new file mode 100644
index 000000000..ccf709db6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.xhtmlxtras_dlg',{"attribs_title":"Insert/Edit Attributes","option_rtl":"Right to left","option_ltr":"Left to right","insert_date":"Insert current date/time",remove:"Remove","title_cite_element":"Citation Element","title_abbr_element":"Abbreviation Element","title_acronym_element":"Acronym Element","title_del_element":"Deletion Element","title_ins_element":"Insertion Element","fieldset_events_tab":"Element Events","fieldset_attrib_tab":"Element Attributes","fieldset_general_tab":"General Settings","events_tab":"Events","attrib_tab":"Attributes","general_tab":"General","attribute_attrib_tab":"Attributes","attribute_events_tab":"Events","attribute_label_accesskey":"AccessKey","attribute_label_tabindex":"TabIndex","attribute_label_langcode":"Language","attribute_option_rtl":"Right to left","attribute_option_ltr":"Left to right","attribute_label_langdir":"Text Direction","attribute_label_datetime":"Date/Time","attribute_label_cite":"Cite","attribute_label_style":"Style","attribute_label_class":"Class","attribute_label_id":"ID","attribute_label_title":"Title"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/vi_dlg.js
new file mode 100644
index 000000000..227659a5e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.xhtmlxtras_dlg',{"attribs_title":"Ch\u00e8n/S\u1eeda thu\u1ed9c t\u00ednh","option_rtl":"Ph\u1ea3i qua tr\u00e1i","option_ltr":"Tr\u00e1i qua ph\u1ea3i","insert_date":"Ch\u00e8n ng\u00e0y/gi\u1edd hi\u1ec7n th\u1eddi",remove:"Lo\u1ea1i b\u1ecf","title_cite_element":"Bi\u00ea\u0309u ch\u01b0\u01a1ng ph\u1ea7n t\u1eed","title_abbr_element":"T\u00ean vi\u1ebft t\u1eaft ph\u1ea7n t\u1eed","title_acronym_element":"Vi\u1ebft t\u1eaft ph\u1ea7n t\u1eed","title_del_element":"X\u00f3a ph\u1ea7n t\u1eed","title_ins_element":"Ch\u00e8n ph\u1ea7n t\u1eed","fieldset_events_tab":"S\u1ef1 ki\u1ec7n ph\u1ea7n t\u1eed","fieldset_attrib_tab":"Thu\u1ed9c t\u00ednh ph\u1ea7n t\u1eed","fieldset_general_tab":"Thi\u1ebft l\u1eadp chung","events_tab":"S\u1ef1 ki\u1ec7n","attrib_tab":"Thu\u1ed9c t\u00ednh","general_tab":"Chung","attribute_attrib_tab":"Thu\u1ed9c t\u00ednh","attribute_events_tab":"S\u1ef1 ki\u1ec7n","attribute_label_accesskey":"Ph\u00edm truy c\u1eadp","attribute_label_tabindex":"Ch\u1ec9 m\u1ee5c th\u1ebb","attribute_label_langcode":"Ng\u00f4n ng\u1eef","attribute_option_rtl":"Ph\u1ea3i qua tr\u00e1i","attribute_option_ltr":"Tr\u00e1i qua ph\u1ea3i","attribute_label_langdir":"H\u01b0\u1edbng v\u0103n b\u1ea3n","attribute_label_datetime":"Ng\u00e0y/gi\u1edd","attribute_label_cite":"Ch\u00fa th\u00edch","attribute_label_style":"Ki\u1ec3u d\u00e1ng","attribute_label_class":"L\u1edbp","attribute_label_id":"ID","attribute_label_title":"Ti\u00eau \u0111\u1ec1"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..eccbdf676
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91 \u5c5e\u6027","option_rtl":"\u4ece\u53f3\u5230\u5de6","option_ltr":"\u4ece\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u5f53\u524d\u65e5\u671f/\u65f6\u95f4",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5143\u7d20","title_abbr_element":"\u7f29\u5199\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u6bcd\u7f29\u5199\u5143\u7d20","title_del_element":"\u5220\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c5e\u6027","fieldset_general_tab":"\u666e\u901a\u8bbe\u7f6e","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u666e\u901a","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u952e","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u4ece\u53f3\u5230\u5de6","attribute_option_ltr":"\u4ece\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u4e66\u5199\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u7c7b\u522b","attribute_label_id":"ID","attribute_label_title":"\u6807\u9898"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..d0fec64de
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.xhtmlxtras_dlg',{"attribs_title":"\u52a0\u5165 / \u8a2d\u5b9a\u5c6c\u6027","option_rtl":"\u5f9e\u53f3\u5230\u5de6","option_ltr":"\u5f9e\u5de6\u5230\u53f3","insert_date":"\u52a0\u5165\u76ee\u524d\u7684\u6642\u9593\u3001\u65e5\u671f",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u6a19\u7c64","title_abbr_element":"\u7e2e\u5beb\u6a19\u7c64","title_acronym_element":"\u982d\u5b57\u8a9e\u6a19\u7c64","title_del_element":"\u79fb\u9664 HTML \u6a19\u7c64","title_ins_element":"\u65b0\u589e HTML \u6a19\u7c64","fieldset_events_tab":"\u6a19\u7c64\u4e8b\u4ef6","fieldset_attrib_tab":"\u6a19\u7c64\u5c6c\u6027","fieldset_general_tab":"\u8a2d\u5b9a","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c6c\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c6c\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"HTML \u5feb\u901f\u9375 (AccessKey)","attribute_label_tabindex":"Tab \u7d22\u5f15\u4f4d\u7f6e (TabIndex)","attribute_label_langcode":"\u8a9e\u7cfb","attribute_option_rtl":"\u5f9e\u53f3\u908a\u5230\u5de6\u908a","attribute_option_ltr":"\u5f9e\u5de6\u908a\u5230\u53f3\u908a","attribute_label_langdir":"\u66f8\u5beb\u65b9\u5f0f","attribute_label_datetime":"\u6642\u9593\u65e5\u671f","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6a23\u5f0f","attribute_label_class":"\u985e\u5225 (Class)","attribute_label_id":"\u6a19\u7c64\u7684 ID ","attribute_label_title":"\u6a19\u984c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh_dlg.js
new file mode 100644
index 000000000..b5deeda2a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7de8\u8f2f\u5c6c\u6027","option_rtl":"\u5f9e\u5de6\u5230\u53f3","option_ltr":"\u5f9e\u53f3\u5230\u5de6","insert_date":"\u63d2\u5165\u76ee\u524d\u65e5\u671f/\u6642\u9593",remove:"\u79fb\u9664","title_cite_element":"\u5f15\u7528\u5143\u7d20","title_abbr_element":"\u7e2e\u5beb\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u6bcd\u7e2e\u5beb\u5143\u7d20","title_del_element":"\u522a\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c6c\u6027","fieldset_general_tab":"\u4e00\u822c\u8a2d\u5b9a","events_tab":"Javascript \u89f8\u767c\u4e8b\u4ef6","attrib_tab":"\u5c6c\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c6c\u6027","attribute_events_tab":"Javascript \u89f8\u767c\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u6377\u9375","attribute_label_tabindex":"Tab \u7d22\u5f15","attribute_label_langcode":"\u8a9e\u8a00","attribute_option_rtl":"\u5f9e\u5de6\u5230\u53f3","attribute_option_ltr":"\u5f9e\u53f3\u5230\u5de6","attribute_label_langdir":"\u6587\u5b57\u66f8\u5beb\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u6642\u9593","attribute_label_cite":"\u5f15\u7528","attribute_label_style":"\u6a23\u5f0f","attribute_label_class":"\u985e\u5225","attribute_label_id":"ID","attribute_label_title":"\u6a19\u984c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zu_dlg.js
new file mode 100644
index 000000000..035f3eb23
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/plugins/xhtmlxtras/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.xhtmlxtras_dlg',{"attribs_title":"\u63d2\u5165/\u7f16\u8f91\u5c5e\u6027","option_rtl":"\u7531\u53f3\u5230\u5de6","option_ltr":"\u7531\u5de6\u5230\u53f3","insert_date":"\u63d2\u5165\u73b0\u5728\u65e5\u671f/\u65f6\u95f4",remove:"\u5220\u9664","title_cite_element":"\u5f15\u6587\u5143\u7d20","title_abbr_element":"\u7f29\u5199\u5143\u7d20","title_acronym_element":"\u9996\u5b57\u7f29\u5199\u5143\u7d20","title_del_element":"\u5220\u9664\u5143\u7d20","title_ins_element":"\u63d2\u5165\u5143\u7d20","fieldset_events_tab":"\u5143\u7d20\u4e8b\u4ef6","fieldset_attrib_tab":"\u5143\u7d20\u5c5e\u6027","fieldset_general_tab":"\u4e00\u822c","events_tab":"\u4e8b\u4ef6","attrib_tab":"\u5c5e\u6027","general_tab":"\u4e00\u822c","attribute_attrib_tab":"\u5c5e\u6027","attribute_events_tab":"\u4e8b\u4ef6","attribute_label_accesskey":"\u5feb\u901f\u952e","attribute_label_tabindex":"Tab\u7d22\u5f15","attribute_label_langcode":"\u8bed\u8a00","attribute_option_rtl":"\u7531\u53f3\u5230\u5de6","attribute_option_ltr":"\u7531\u5de6\u5230\u53f3","attribute_label_langdir":"\u6587\u5b57\u4e66\u5199\u65b9\u5411","attribute_label_datetime":"\u65e5\u671f/\u65f6\u95f4","attribute_label_cite":"\u5f15\u6587","attribute_label_style":"\u6837\u5f0f","attribute_label_class":"\u7c7b\u578b","attribute_label_id":"ID","attribute_label_title":"\u67e5\u627e"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ar.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ar.js
new file mode 100644
index 000000000..9bdeef027
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ar.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.advanced',{"underline_desc":"\u062a\u062d\u062a\u0647 \u062e\u0637 (Ctrl U)","italic_desc":"\u0645\u0627\u0626\u0644 (Ctrl+I)","bold_desc":"\u0639\u0631\u064a\u0636 (Ctrl+B)",dd:"\u0627\u0644\u0648\u0635\u0641",dt:"\u062a\u0639\u0631\u064a\u0641 \u0645\u0635\u0637\u0644\u062d",samp:"Code sample",code:"\u0642\u0627\u0646\u0648\u0646",blockquote:"\u0639\u0644\u0627\u0645\u0629 \u0627\u0642\u062a\u0628\u0627\u0633 \u0641\u0642\u0631\u0629",h6:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 6",h5:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 5",h4:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 4",h3:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 3",h2:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 2",h1:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646 1",pre:"\u0645\u0647\u064a\u0623 \u0645\u0633\u0628\u0642",address:"\u0627\u0644\u0639\u0646\u0648\u0627\u0646",div:"\u0627\u0644\u062f\u0631\u062c\u0629",paragraph:"\u0627\u0644\u0646\u0635",block:"\u0627\u0644\u0647\u064a\u0626\u0647",fontdefault:"\u0639\u0627\u0626\u0644\u0647 \u0627\u0644\u062e\u0637","font_size":"\u062d\u062c\u0645 \u0627\u0644\u062e\u0637","style_select":"\u0627\u0644\u0633\u0645\u0627\u062a","more_colors":"\u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0623\u0644\u0648\u0627\u0646","toolbar_focus":"\u0644\u0644\u062a\u062d\u0631\u0643 \u0627\u0644\u0633\u0631\u064a\u0639 \u0627\u0636\u063a\u0637 \u0639\u0644\u0649 \u0644\u0648\u062d\u0629 \u0627\u0644\u0645\u0641\u0627\u062a\u064a\u062d Alt Q \u0644\u0623\u0632\u0631\u0627\u0631 \u0627\u0644\u0623\u062f\u0648\u0627\u062a\u060c Alt-Z \u0644\u0644\u0645\u062d\u0631\u0631 \u060c Alt-X \u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0639\u0646\u0635\u0631",newdocument:"\u0647\u0644 \u0623\u0646\u062a \u0645\u062a\u0623\u0643\u062f \u0623\u0646\u0643 \u062a\u0631\u064a\u062f \u0645\u0633\u062d \u0643\u0627\u0641\u0629 \u0645\u062d\u062a\u0648\u064a\u0627\u062a\u061f",path:"\u0645\u0633\u0627\u0631","clipboard_msg":"\u0646\u0633\u062e/\u0642\u0635/\u0644\u0635\u0642 \u063a\u064a\u0631 \u0645\u062a\u0648\u0627\u0641\u0631 \u0641\u064a \u0641\u064a\u0631 \u0641\u0648\u0643\u0633 \u062d\u0627\u0644\u064a\u0627 \u0647\u0644 \u062a\u0631\u064a\u062f \u0627\u0646 \u062a\u0639\u0631\u0641 \u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0645\u0639\u0644\u0648\u0645\u0627\u062a\u061f","blockquote_desc":"\u0639\u0644\u0627\u0645\u0629 \u0627\u0642\u062a\u0628\u0627\u0633 \u0641\u0642\u0631\u0629","help_desc":"\u0645\u0633\u0627\u0639\u062f\u0647","newdocument_desc":"\u0645\u0633\u062a\u0646\u062f \u062c\u062f\u064a\u062f","image_props_desc":"\u062e\u0635\u0627\u0626\u0635 \u0627\u0644\u0635\u0648\u0631\u0629","paste_desc":"\u0644\u0635\u0642","copy_desc":"\u0646\u0633\u062e","cut_desc":"\u0642\u0635","anchor_desc":"\u0625\u062f\u0631\u0627\u062c / \u062a\u062d\u0631\u064a\u0631 \u0645\u0631\u0633\u0627\u0629","visualaid_desc":"\u0627\u0644\u0645\u0628\u0627\u062f\u0626 \u0627\u0644\u062a\u0648\u062c\u064a\u0647\u064a\u0629 \u062a\u0628\u062f\u064a\u0644 / \u0639\u0646\u0627\u0635\u0631 \u063a\u064a\u0631 \u0645\u0631\u0626\u064a\u0629","charmap_desc":"\u0627\u062f\u062e\u0627\u0644 \u0631\u0645\u0632 \u062c\u062f\u064a\u062f","backcolor_desc":"\u0627\u062e\u062a\u0631 \u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0647","forecolor_desc":"\u0627\u062e\u062a\u0631 \u0644\u0648\u0646 \u0627\u0644\u0646\u0635","custom1_desc":"\u0627\u062f\u062e\u0644 \u0627\u0644\u0648\u0635\u0641 \u0647\u0646","removeformat_desc":"\u0627\u0632\u0627\u0644\u0647 \u0627\u0644\u062a\u0646\u0633\u064a\u0642","hr_desc":"\u0627\u062f\u0631\u0627\u062c \u062e\u0637 \u0627\u0641\u0642\u0649","sup_desc":"\u0645\u0631\u062a\u0641\u0639","sub_desc":"\u0645\u0646\u062e\u0641\u0636","code_desc":"\u062a\u0639\u062f\u064a\u0644 \u0634\u0641\u0631\u0647 \u0627\u0644 \u0623\u062a\u0634 \u062a\u064a \u0623\u0645 \u0623\u0644","cleanup_desc":"\u062a\u0646\u0638\u064a\u0641 \u0627\u0644\u0643\u0648\u062f","image_desc":"\u0627\u0636\u0627\u0641\u0647 / \u062d\u0630\u0641 \u0635\u0648\u0631\u0647","unlink_desc":"\u062d\u0630\u0641 \u0627\u0644\u0631\u0627\u0628\u0637","link_desc":"\u0627\u0636\u0627\u0641\u0647 / \u062a\u0639\u062f\u064a\u0644 \u0631\u0627\u0628\u0637","redo_desc":"\u0627\u0644\u0625\u0639\u0627\u062f\u0629 (\u0627\u0644\u0633\u064a\u0637\u0631\u0629 + \u0635)","undo_desc":"\u062a\u0631\u0627\u062c\u0639 (\u0627\u0644\u0633\u064a\u0637\u0631\u0629 + \u0649)","indent_desc":"\u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629","outdent_desc":"\u0625\u0646\u0642\u0627\u0635 \u0627\u0644\u0645\u0633\u0627\u0641\u0629 \u0627\u0644\u0628\u0627\u062f\u0626\u0629 \u0642\u0628\u0644","numlist_desc":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0631\u062a\u0628\u0629","bullist_desc":"\u0642\u0627\u0626\u0645\u0629 \u063a\u064a\u0631 \u0645\u0631\u062a\u0628\u0629","justifyfull_desc":"\u0645\u062d\u0627\u0630\u0627\u0647 \u0643\u0644\u064a\u0647","justifyright_desc":"\u062a\u0648\u0633\u064a\u0637 \u064a\u0645\u064a\u0646","justifycenter_desc":"\u062a\u0648\u0633\u064a\u0637 \u0648\u0633\u0637","justifyleft_desc":"\u062a\u0648\u0633\u064a\u0637 \u064a\u0633\u0627\u0631","striketrough_desc":"\u062a\u0648\u0633\u064a\u0637 \u062e\u0637","help_shortcut":"\u0627\u0636\u063a\u0637 ALT-F10 \u0644\u0634\u0631\u064a\u0637 \u0627\u0644\u0627\u062f\u0648\u0627\u062a. \u0627\u0636\u063a\u0637 ALT-0 \u0644\u0644\u0645\u0633\u0627\u0639\u062f\u0647","rich_text_area":"\u0645\u0646\u0637\u0642\u0629 \u0627\u0644\u062a\u0639\u062f\u064a\u0644\u0627\u062a","shortcuts_desc":"Accessability Help",toolbar:"\u0634\u0631\u064a\u0637 \u0627\u0644\u0623\u062f\u0648\u0627\u062a","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ar_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ar_dlg.js
new file mode 100644
index 000000000..6cfc8ad59
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ar_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.advanced_dlg',{"link_list":"\u0642\u0627\u0626\u0645\u0647 \u0627\u0644\u0648\u0635\u0644\u0627\u062a","link_is_external":"\u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u064a\u0628\u062f\u0648 \u0631\u0627\u0628\u0637 \u062e\u0627\u0631\u062c\u064a \u060c \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0628\u0627\u062f\u0626\u0629 http:// \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629\u061f","link_is_email":"\u0627\u0644\u0631\u0627\u0628\u0637 \u0627\u0644\u0630\u064a \u0623\u062f\u062e\u0644\u062a\u0647 \u064a\u0628\u062f\u0648 \u0623\u0646 \u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0628\u0631\u064a\u062f \u0627\u0644\u0625\u0644\u0643\u062a\u0631\u0648\u0646\u064a \u060c \u0647\u0644 \u062a\u0631\u064a\u062f \u0625\u0636\u0627\u0641\u0629 \u0645\u064a\u0644\u062a\u0648 \u0627\u0644\u0645\u0637\u0644\u0648\u0628\u0629 :\u061f \u0628\u0627\u062f\u0626\u0629","link_titlefield":"\u0627\u0644\u0639\u0646\u0648\u0627\u0646","link_target_blank":"\u0641\u062a\u062d \u0627\u0644\u0631\u0627\u0628\u0637 \u0641\u0649 \u0646\u0627\u0641\u0630\u0647 \u062c\u062f\u064a\u062f\u0647","link_target_same":"\u0641\u062a\u062d \u0627\u0644\u0631\u0627\u0628\u0637 \u0641\u0649 \u0646\u0641\u0633 \u0627\u0644\u0646\u0627\u0641\u0630\u0647","link_target":"\u0627\u0644\u0647\u062f\u0641","link_url":"\u0639\u0646\u0648\u0627\u0646 URL \u0644\u0644\u0648\u0635\u0644\u0647","link_title":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0648\u0635\u0644\u0647","image_align_right":"\u064a\u0645\u064a\u0646","image_align_left":"\u064a\u0633\u0627\u0631","image_align_textbottom":"\u0627\u0633\u0641\u0644 \u0627\u0644\u0646\u0635","image_align_texttop":"\u0627\u0644\u0646\u0635 \u0627\u0644\u0623\u0639\u0644\u0649","image_align_bottom":"\u0627\u0644\u0642\u0627\u0639","image_align_middle":"\u0627\u0644\u0623\u0648\u0633\u0637","image_align_top":"\u0627\u0644\u0623\u0639\u0644\u0649","image_align_baseline":"\u0627\u0644\u0623\u0633\u0627\u0633","image_align":"\u0645\u062d\u0627\u0630\u0627\u0629","image_hspace":"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0627\u0641\u0642\u064a\u0647","image_vspace":"\u0627\u0644\u0645\u0633\u0627\u0641\u0647 \u0627\u0644\u0639\u0645\u0648\u062f\u064a\u0647","image_dimensions":"\u0627\u0644\u0623\u0628\u0639\u0627\u062f","image_alt":"\u0648\u0635\u0641 \u0627\u0644\u0635\u0648\u0631\u0647","image_list":"\u0642\u0627\u0626\u0645\u0647 \u0627\u0644\u0635\u0648\u0631","image_border":"\u0627\u0644\u062d\u062f\u0648\u062f","image_src":"\u0631\u0627\u0628\u0637 \u0627\u0644\u0635\u0648\u0631\u0647","image_title":"\u0627\u0636\u0641/\u0639\u062f\u0644 \u0635\u0648\u0631\u0629","charmap_title":"\u0627\u062e\u062a\u064a\u0627\u0631 \u062d\u0631\u0641 \u0645\u062e\u0635\u0635","colorpicker_name":"\u0627\u0633\u0645:","colorpicker_color":"\u0627\u0644\u0644\u0648\u0646 :","colorpicker_named_title":"\u0627\u0644\u0623\u0644\u0648\u0627\u0646 \u0627\u0644\u0645\u0633\u0645\u0627\u0629","colorpicker_named_tab":"\u0627\u0644\u0645\u0633\u0645\u0627\u0629","colorpicker_palette_title":"\u0644\u0648\u062d \u0627\u0644\u0623\u0644\u0648\u0627\u0646","colorpicker_palette_tab":"\u0644\u0648\u062d","colorpicker_picker_title":"\u0643\u0627\u0634\u0641 \u0627\u0644\u0644\u0648\u0646","colorpicker_picker_tab":"\u0627\u0644\u0643\u0627\u0634\u0641","colorpicker_title":"\u0627\u062e\u062a\u0631 \u0627\u0644\u0644\u0648\u0646","code_wordwrap":"\u0627\u0644\u062a\u0641\u0627\u0641 \u0627\u0644\u0646\u0635","code_title":"\u062a\u0639\u062f\u064a\u0644 \u0627 \u0644\u0634\u064a\u0641\u0631\u0647 \u0627\u0644\u0628\u0631\u0645\u062c\u064a\u0647","anchor_name":"\u0627\u0633\u0645 \u0627\u0644\u0645\u0631\u0633\u0627\u0647","anchor_title":"\u0625\u062f\u0631\u0627\u062c / \u062a\u062d\u0631\u064a\u0631 \u0645\u0631\u0633\u0627\u0629","about_loaded":"\u0627\u0644\u0627\u0636\u0627\u0641\u0627\u062a \u0627\u0644\u0645\u062d\u0645\u0644\u0647","about_version":"\u0627\u0644\u0627\u0635\u062f\u0627\u0631","about_author":"\u0627\u0644\u0643\u0627\u062a\u0628","about_plugin":"\u0627\u0644\u0645\u0648\u0642\u0639","about_plugins":"\u0627\u0644\u0625\u0636\u0627\u0641\u0627\u062a","about_license":"\u0627\u0644\u062a\u0631\u062e\u064a\u0635","about_help":"\u0645\u0633\u0627\u0639\u062f\u0647","about_general":"\u0639\u0646","about_title":"\u0639\u0646 \u0627\u0644\u0645\u062d\u0631\u0631","charmap_usage":"\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0623\u0633\u0647\u0645 \u0627\u0644\u0623\u064a\u0645\u0646 \u0648\u0627\u0644\u0623\u064a\u0633\u0631 \u0644\u0644\u062a\u0646\u0642\u0644.","anchor_invalid":"\u0627\u0644\u0631\u062c\u0627\u0621 \u062a\u062d\u062f\u064a\u062f \u0625\u0633\u0645 \u064a\u0635\u0644\u062d \u0644\u0644\u0645\u0631\u0633\u0627\u0647","accessibility_help":"\u062a\u0639\u0644\u064a\u0645\u0627\u062a \u0627\u0644\u0648\u0635\u0648\u0644","accessibility_usage_title":"\u0627\u0644\u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0639\u0627\u0645","invalid_color_value":"\u0642\u064a\u0645\u0647 \u062e\u0637\u0623 \u0644\u0644\u0648\u0646"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/az.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/az.js
new file mode 100644
index 000000000..1edbec24d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/az.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.advanced',{"underline_desc":"Altdan x\u0259tt (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Yar\u0131qal\u0131n (Ctrl+B)",dd:"Terminin m\u00fc\u0259yy\u0259n edilm\u0259si",dt:"M\u00fc\u0259yy\u0259n edil\u0259n termin",samp:"Kod n\u00fcmun\u0259si",code:"Kod",blockquote:"Sitat bloku",h6:"Ba\u015fl\u0131q 6",h5:"Ba\u015fl\u0131q 5",h4:"Ba\u015fl\u0131q 4",h3:"Ba\u015fl\u0131q 3",h2:"Ba\u015fl\u0131q 2",h1:"Ba\u015fl\u0131q 1",pre:"Formatlanm\u0131\u015f m\u0259tn",address:"\u00dcnvan",div:"B\u00f6lm\u0259",paragraph:"Abzas",block:"Format",fontdefault:"\u015erift","font_size":"\u015erift \u00f6l\u00e7\u00fc\u015f\u00fc","style_select":"Still\u0259r","image_delta_width":"65","more_colors":"Daha \u00e7ox r\u0259ng","toolbar_focus":"Alt+Q - al\u0259t d\u00fcym\u0259l\u0259rin\u0259 ke\u00e7, Alt-Z - redaktoruna ke\u00e7, Alt-X - elementl\u0259r yoluna ke\u00e7",newdocument:"\u0130\u00e7ind\u0259kil\u0259ri tam t\u0259mizl\u0259m\u0259kd\u0259 \u0259minsiniz?",path:"Yol","clipboard_msg":"Kopyalama/\u018flav\u0259 et Mozilla v\u0259 Firefox-da i\u015fl\u0259mir.\nN\u0259 ba\u015f verdiyi haqda daha \u0259trafl\u0131 \u00f6yr\u0259nm\u0259k ist\u0259yirsiniz?","blockquote_desc":"Sitat bloku","help_desc":"K\u00f6m\u0259k","newdocument_desc":"Yeni s\u0259n\u0259d","image_props_desc":"\u015e\u0259kil x\u00fcsusiyy\u0259ti","paste_desc":"\u018flav\u0259 et","copy_desc":"Kopyala","cut_desc":"K\u0259s","anchor_desc":"L\u00f6vb\u0259r \u0259lav\u0259/redakt\u0259 et","visualaid_desc":"G\u00f6nd\u0259ril\u0259n/g\u00f6r\u00fcnm\u0259z elementl\u0259ri yand\u0131r/s\u00f6nd\u00fcr","charmap_desc":"X\u00fcsusi simvol \u0259lav\u0259 et","backcolor_desc":"Fonun r\u0259ngini se\u00e7","forecolor_desc":"M\u0259tnin r\u0259ngini se\u00e7","custom1_desc":"\u00d6z t\u0259svirinizi daxil edin","removeformat_desc":"Formatlaman\u0131 l\u0259\u011fv et","hr_desc":"\u00dcf\u00fcqi x\u0259tt \u0259lav\u0259 et","sup_desc":"Yuxar\u0131 indeks","sub_desc":"A\u015fa\u011f\u0131 indeks","code_desc":"HTML-m\u0259nb\u0259ni redakt\u0259 et","cleanup_desc":"\u018fyri kodu t\u0259mizl\u0259","image_desc":"\u018flav\u0259 et/\u015f\u0259kili redakt\u0259 et","unlink_desc":"Ke\u00e7idi sil","link_desc":"\u018flav\u0259 et/ke\u00e7idi redakt\u0259 et","redo_desc":"T\u0259krarla (Ctrl+Y)","undo_desc":"L\u0259\u011fv et (Ctrl+Z)","indent_desc":"Bo\u015f yeri b\u00f6y\u00fct","outdent_desc":"Bo\u015f yeri ki\u00e7ilt","numlist_desc":"N\u00f6mr\u0259l\u0259nmi\u015f siyah\u0131","bullist_desc":"Qeyd edilmi\u015f siyah\u0131","justifyfull_desc":"Enin\u0259 d\u00fczl\u0259ndir","justifyright_desc":"Sa\u011fdan d\u00fczl\u0259ndir","justifycenter_desc":"M\u0259rk\u0259z\u0259 d\u00fczl\u0259ndir","justifyleft_desc":"Soldan d\u00fczl\u0259ndir","striketrough_desc":"Qaralanm\u0131\u015f","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/az_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/az_dlg.js
new file mode 100644
index 000000000..de9a2f46a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/az_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.advanced_dlg',{"link_list":"Ke\u00e7idl\u0259r siyah\u0131s\u0131","link_is_external":"Daxil edil\u0259n \u00fcnvan xarici ke\u00e7id\u0259 b\u0259nz\u0259yir. http:// prefiksini \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?","link_is_email":"Daxil edil\u0259n \u00fcnvan e-po\u00e7ta b\u0259nz\u0259yir. mailto: prefiksini \u0259lav\u0259 etm\u0259k ist\u0259yirsiniz?","link_titlefield":"Ad\u0131","link_target_blank":"Ke\u00e7idi yeni p\u0259nc\u0259r\u0259d\u0259 a\u00e7","link_target_same":"Ke\u00e7idi h\u0259min p\u0259nc\u0259r\u0259d\u0259 a\u00e7","link_target":"H\u0259d\u0259f","link_url":"Ke\u00e7id \u00fcnvan\u0131","link_title":"Ke\u00e7idi \u0259lav\u0259/redakt\u0259 et","image_align_right":"Sa\u011fa","image_align_left":"Sola","image_align_textbottom":"M\u0259tn a\u015fa\u011f\u0131s\u0131 \u00fczr\u0259","image_align_texttop":"M\u0259tn yuxar\u0131s\u0131 il\u0259","image_align_bottom":"A\u015fa\u011f\u0131 il\u0259","image_align_middle":"M\u0259rk\u0259z il\u0259","image_align_top":"Yuxar\u0131 il\u0259","image_align_baseline":"Bazis liniyas\u0131 \u00fczr\u0259","image_align":"Tarazla\u015fd\u0131r","image_hspace":"\u00dcf\u00fcqi f\u0259za","image_vspace":"\u015eaquli f\u0259za","image_dimensions":"\u00d6l\u00e7\u00fcl\u0259r","image_alt":"\u015e\u0259klin t\u0259sviri","image_list":"\u015e\u0259kil siyah\u0131s\u0131","image_border":"S\u0259rh\u0259d","image_src":"\u015e\u0259klin \u00fcnvan\u0131","image_title":"\u015e\u0259kli \u0259lav\u0259/redakt\u0259 et","charmap_title":"X\u00fcsusi simvol se\u00e7in","colorpicker_name":"Ad\u0131:","colorpicker_color":"R\u0259ng:","colorpicker_named_title":"Adland\u0131r\u0131lm\u0131\u015f r\u0259ngl\u0259r","colorpicker_named_tab":"Adland\u0131r\u0131lm\u0131\u015f","colorpicker_palette_title":"Palitra r\u0259ngl\u0259ri","colorpicker_palette_tab":"Palitra","colorpicker_picker_title":"R\u0259ng se\u00e7imi","colorpicker_picker_tab":"Se\u00e7im","colorpicker_title":"R\u0259ngi se\u00e7","code_wordwrap":"S\u00f6zl\u0259rin s\u0259tr\u0259 ke\u00e7idi","code_title":"HTML-m\u0259nb\u0259 redaktoru","anchor_name":"L\u00f6vb\u0259r ad\u0131","anchor_title":"L\u00f6bv\u0259r \u0259lav\u0259/redakt\u0259 et","about_loaded":"Y\u00fckl\u0259nil\u0259n plaginl\u0259r","about_version":"Versiya","about_author":"M\u00fc\u0259llif","about_plugin":"Plaginl\u0259r","about_plugins":"Plaginl\u0259r","about_license":"Lisenziya","about_help":"K\u00f6m\u0259k","about_general":"Proqram haqq\u0131nda","about_title":"TinyMCE haqda","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/be.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/be.js
new file mode 100644
index 000000000..35785e035
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/be.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.advanced',{"underline_desc":"\u041f\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0456\u045e (Ctrl+I)","bold_desc":"\u0422\u043b\u0443\u0441\u0442\u044b (Ctrl B)",dd:"\u0410\u0437\u043d\u0430\u0447\u044d\u043d\u043d\u0435 \u0442\u044d\u0440\u043c\u0456\u043d\u0430",dt:"\u0412\u044b\u0437\u043d\u0430\u0447\u0430\u0435\u043c\u044b \u0442\u044d\u0440\u043c\u0456\u043d",samp:"\u041f\u0440\u044b\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0430",code:"\u041a\u043e\u0434",blockquote:"\u0426\u044b\u0442\u0430\u0442\u0430",h6:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 6",h5:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 5",h4:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 4",h3:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 3",h2:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 2",h1:"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a 1",pre:"\u0410\u0434\u0444\u0430\u0440\u043c\u0430\u0442\u0430\u0432\u0430\u043d\u044b \u0442\u044d\u043a\u0441\u0442",address:"\u0410\u0434\u0440\u0430\u0441",div:"DIV",paragraph:"\u0410\u0431\u0437\u0430\u0446",block:"\u0424\u0430\u0440\u043c\u0430\u0442",fontdefault:"\u0428\u0440\u044b\u0444\u0442","font_size":"\u041f\u0430\u043c\u0435\u0440 \u0448\u0440\u044b\u0444\u0442\u0430","style_select":"\u0421\u0442\u044b\u043b\u044c","more_colors":"\u0406\u043d\u0448\u044b\u044f \u043a\u043e\u043b\u0435\u0440\u044b...","toolbar_focus":"\u041f\u0435\u0440\u0430\u0439\u0441\u0446\u0456 \u0434\u0430 \u043f\u0430\u043d\u044d\u043b\u0456 \u043a\u043d\u043e\u043f\u0430\u043a - Alt Q, \u041f\u0435\u0440\u0430\u0439\u0441\u0446\u0456 \u0434\u0430 \u0440\u044d\u0434\u0430\u043a\u0442\u0430\u0440\u0430 - Alt-Z, \u041f\u0435\u0440\u0430\u0439\u0441\u0446\u0456 \u0434\u0430 \u0448\u043b\u044f\u0445\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 - Alt-X",newdocument:"\u0412\u044b \u045e\u043f\u044d\u045e\u043d\u0435\u043d\u044b\u044f, \u0448\u0442\u043e \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0430\u0447\u044b\u0441\u0446\u0456\u0446\u044c \u0443\u0441\u0451 \u0437\u043c\u0435\u0441\u0446\u0456\u0432\u0430?",path:"\u0422\u044d\u0433\u0456","clipboard_msg":"\u041a\u0430\u043f\u0456\u0440\u0430\u0432\u0430\u043d\u043d\u0435, \u0432\u044b\u0440\u0430\u0437\u043a\u0430 \u0456 \u0443\u0441\u0442\u0430\u045e\u043a\u0430 \u043d\u0435 \u043f\u0440\u0430\u0446\u0443\u044e\u0446\u044c \u045e Mozilla \u0456 Firefox. \u0416\u0430\u0434\u0430\u0435\u0446\u0435 \u0430\u0442\u0440\u044b\u043c\u0430\u0446\u044c \u0431\u043e\u043b\u044c\u0448 \u043f\u0430\u0434\u0440\u0430\u0431\u044f\u0437\u043d\u0443\u044e \u0456\u043d\u0444\u0430\u0440\u043c\u0430\u0446\u044b\u044e?","blockquote_desc":"\u0411\u043b\u043e\u043a \u0446\u044b\u0442\u0430\u0442\u044b","help_desc":"\u0414\u0430\u043f\u0430\u043c\u043e\u0433\u0430","newdocument_desc":"\u041d\u043e\u0432\u044b \u0434\u0430\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u0423\u043b\u0430\u0441\u0446\u0456\u0432\u0430\u0441\u0446\u0456 \u043c\u0430\u043b\u044e\u043d\u043a\u0430","paste_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c","copy_desc":"\u041a\u0430\u043f\u0456\u0440\u0430\u0432\u0430\u0446\u044c","cut_desc":"\u0412\u044b\u0440\u0430\u0437\u0430\u0446\u044c","anchor_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u044f\u043a\u0430\u0440","visualaid_desc":"\u0423\u043b\u0443\u0447\u044b\u0446\u044c/\u0432\u044b\u043a\u043b\u044e\u0447\u044b\u0446\u044c \u043d\u0430\u043a\u0456\u0440\u0430\u0432\u0430\u043b\u044c\u043d\u044b\u044f/\u043d\u044f\u0431\u0430\u0447\u043d\u044b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b","charmap_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0430\u0434\u043c\u044b\u0441\u043b\u043e\u0432\u044b \u0437\u043d\u0430\u043a","backcolor_desc":"\u0410\u0431\u0440\u0430\u0446\u044c \u043a\u043e\u043b\u0435\u0440 \u0444\u043e\u043d\u0443","forecolor_desc":"\u0410\u0431\u0440\u0430\u0446\u044c \u043a\u043e\u043b\u0435\u0440 \u0442\u044d\u043a\u0441\u0442\u0443","custom1_desc":"\u0423\u0432\u044f\u0434\u0437\u0456\u0446\u0435 \u0432\u0430\u0448\u0430 \u0430\u043f\u0456\u0441\u0430\u043d\u043d\u0435","removeformat_desc":"\u0410\u0447\u044b\u0441\u0446\u0456\u0446\u044c \u0444\u0430\u0440\u043c\u0430\u0442\u0430\u0432\u0430\u043d\u043d\u0435","hr_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c \u0433\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u043b\u0456\u043d\u0456\u044e","sup_desc":"\u041d\u0430\u0434\u0440\u0430\u0434\u043a\u043e\u0432\u044b","sub_desc":"\u041f\u0430\u0434\u0440\u0430\u0434\u043a\u043e\u0432\u044b","code_desc":"\u0420\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c HTML-\u0437\u044b\u0445\u043e\u0434\u043d\u0456\u043a","cleanup_desc":"\u041f\u0430\u0447\u044b\u0441\u0446\u0456\u0446\u044c \u0431\u0440\u0443\u0434\u043d\u044b \u043a\u043e\u0434","image_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0430\u043b\u044e\u043d\u0430\u043a","unlink_desc":"\u0412\u044b\u0434\u0430\u043b\u0456\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","link_desc":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","redo_desc":"\u041f\u0430\u045e\u0442\u0430\u0440\u044b\u0446\u044c (Ctrl+Y)","undo_desc":"\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c (Ctrl+Z)","indent_desc":"\u041f\u0430\u0432\u044f\u043b\u0456\u0447\u044b\u0446\u044c \u0432\u043e\u0434\u0441\u0442\u0443\u043f","outdent_desc":"\u041f\u0430\u043c\u0435\u043d\u0448\u044b\u0446\u044c \u0432\u043e\u0434\u0441\u0442\u0443\u043f","numlist_desc":"\u041d\u0443\u043c\u0430\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441","bullist_desc":"\u041c\u0430\u0440\u043a\u0456\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441","justifyfull_desc":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435 \u043f\u0430 \u0448\u044b\u0440\u044b\u043d\u0456","justifyright_desc":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u0430","justifycenter_desc":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435 \u043f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","justifyleft_desc":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435 \u043d\u0430\u043b\u0435\u0432\u0430","striketrough_desc":"\u041f\u0435\u0440\u0430\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","help_shortcut":"\u041d\u0430\u0446\u0456\u0441\u043d\u0456\u0446\u0435 ALT-F10 \u0434\u043b\u044f \u043f\u0430\u043d\u044d\u043b\u0456 \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u045e. \u041d\u0430\u0446\u0456\u0441\u043d\u0456\u0446\u0435 ALT-0 \u0434\u043b\u044f \u0434\u0430\u0432\u0435\u0434\u043a\u0456.","rich_text_area":"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u044b \u0440\u044d\u0434\u0430\u043a\u0442\u0430\u0440","shortcuts_desc":"\u0414\u0430\u043f\u0430\u043c\u043e\u0433\u0430 \u043f\u0430 \u0434\u0430\u0441\u0442\u0443\u043f\u043d\u0430\u0441\u0446\u0456",toolbar:"\u041f\u0430\u043d\u044d\u043b\u044c \u0456\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u045e","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/be_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/be_dlg.js
new file mode 100644
index 000000000..92c90df43
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/be_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.advanced_dlg',{"link_list":"\u0421\u043f\u0456\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u0430\u043a","link_is_external":"\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 \u0432\u043e\u043d\u043a\u0430\u0432\u0443\u044e \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443, \u0432\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043f\u0440\u044d\u0444\u0456\u043a\u0441 http://?","link_is_email":"\u0423\u0432\u0435\u0434\u0437\u0435\u043d\u044b \u0430\u0434\u0440\u0430\u0441 \u043f\u0430\u0434\u043e\u0431\u043d\u044b \u043d\u0430 email, \u0432\u044b \u0436\u0430\u0434\u0430\u0435\u0446\u0435 \u0434\u0430\u0434\u0430\u0446\u044c \u043f\u0440\u044d\u0444\u0456\u043a\u0441 mailto:?","link_titlefield":"\u0417\u0430\u0433\u0430\u043b\u043e\u0432\u0430\u043a","link_target_blank":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443 \u045e \u043d\u043e\u0432\u044b\u043c \u0430\u043a\u043d\u0435","link_target_same":"\u0410\u0434\u043a\u0440\u044b\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443 \u045e \u0442\u044b\u043c \u0436\u0430 \u0430\u043a\u043d\u0435","link_target":"\u041c\u044d\u0442\u0430","link_url":"\u0410\u0434\u0440\u0430\u0441 \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0456","link_title":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u0441\u043f\u0430\u0441\u044b\u043b\u043a\u0443","image_align_right":"\u041f\u0430 \u043f\u0440\u0430\u0432\u044b\u043c \u043a\u0440\u0430\u0456","image_align_left":"\u041f\u0430 \u043b\u0435\u0432\u044b\u043c \u043a\u0440\u0430\u0456","image_align_textbottom":"\u041f\u0430 \u043d\u0456\u0437\u0435 \u0442\u044d\u043a\u0441\u0442\u0443","image_align_texttop":"\u041f\u0430 \u0432\u0435\u0440\u0441\u0435 \u0442\u044d\u043a\u0441\u0442\u0443","image_align_bottom":"\u041f\u0430 \u043d\u0456\u0437\u0435","image_align_middle":"\u041f\u0430 \u0446\u044d\u043d\u0442\u0440\u044b","image_align_top":"\u041f\u0430 \u0432\u0435\u0440\u0441\u0435","image_align_baseline":"\u041f\u0430 \u0431\u0430\u0437\u0456\u0441\u043d\u0430\u0439 \u043b\u0456\u043d\u0456\u0456","image_align":"\u0412\u044b\u0440\u0430\u045e\u043d\u043e\u045e\u0432\u0430\u043d\u043d\u0435","image_hspace":"\u0413\u0430\u0440\u044b\u0437\u0430\u043d\u0442\u0430\u043b\u044c\u043d\u044b \u0432\u043e\u0434\u0441\u0442\u0443\u043f","image_vspace":"\u0412\u0435\u0440\u0442\u044b\u043a\u0430\u043b\u044c\u043d\u044b \u0432\u043e\u0434\u0441\u0442\u0443\u043f","image_dimensions":"\u041f\u0430\u043c\u0435\u0440","image_alt":"\u0410\u043f\u0456\u0441\u0430\u043d\u043d\u0435 \u043c\u0430\u043b\u044e\u043d\u043a\u0430","image_list":"\u0421\u043f\u0456\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430\u045e","image_border":"\u041c\u044f\u0436\u0430","image_src":"\u0410\u0434\u0440\u0430\u0441 \u043c\u0430\u043b\u044e\u043d\u043a\u0430","image_title":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0440\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u043c\u0430\u043b\u044e\u043d\u0430\u043a","charmap_title":"\u0410\u0431\u044f\u0440\u044b\u0446\u0435 \u0430\u0434\u043c\u044b\u0441\u043b\u043e\u0432\u044b \u0437\u043d\u0430\u043a","colorpicker_name":"\u041d\u0430\u0437\u043e\u045e:","colorpicker_color":"\u041a\u043e\u043b\u0435\u0440:","colorpicker_named_title":"\u041d\u0430\u0439\u043c\u0435\u043d\u043d\u044b\u044f \u043a\u043e\u043b\u0435\u0440\u044b","colorpicker_named_tab":"\u041d\u0430\u0439\u043c\u0435\u043d\u043d\u044b","colorpicker_palette_title":"\u041a\u043e\u043b\u0435\u0440\u044b \u043f\u0430\u043b\u0456\u0442\u0440\u044b","colorpicker_palette_tab":"\u041f\u0430\u043b\u0456\u0442\u0440\u0430","colorpicker_picker_title":"\u0412\u044b\u0431\u0430\u0440 \u043a\u043e\u043b\u0435\u0440\u0443","colorpicker_picker_tab":"\u0412\u044b\u0431\u0430\u0440","colorpicker_title":"\u0410\u0431\u044f\u0440\u044b\u0446\u0435 \u043a\u043e\u043b\u0435\u0440","code_wordwrap":"\u041f\u0435\u0440\u0430\u043d\u043e\u0441 \u0441\u043b\u043e\u045e","code_title":"\u0420\u044d\u0434\u0430\u043a\u0442\u0430\u0440 HTML-\u0437\u044b\u0445\u043e\u0434\u043d\u0456\u043a\u0430","anchor_name":"\u0406\u043c\u044f \u044f\u043a\u0430\u0440\u0430","anchor_title":"\u0423\u0441\u0442\u0430\u0432\u0456\u0446\u044c/\u0420\u044d\u0434\u0430\u0433\u0430\u0432\u0430\u0446\u044c \u044f\u043a\u0430\u0440","about_loaded":"\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u043d\u044b\u044f \u043f\u043b\u0430\u0433\u0456\u043d\u044b","about_version":"\u0412\u0435\u0440\u0441\u0456\u044f","about_author":"\u0410\u045e\u0442\u0430\u0440","about_plugin":"\u041f\u043b\u0430\u0433\u0456\u043d","about_plugins":"\u041f\u043b\u0430\u0433\u0456\u043d\u044b","about_license":"\u041b\u0456\u0446\u044d\u043d\u0437\u0456\u044f","about_help":"\u0414\u0430\u043f\u0430\u043c\u043e\u0433\u0430","about_general":"\u0410\u0431 \u043f\u0440\u0430\u0433\u0440\u0430\u043c\u0435","about_title":"\u0410\u0431 TinyMCE","charmap_usage":"\u0412\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u043e\u045e\u0432\u0430\u0439\u0446\u0435 \u043a\u043b\u0430\u0432\u0456\u0448\u044b \"\u041d\u0430\u043b\u0435\u0432\u0430\" \u0456 \"\u041d\u0430\u043f\u0440\u0430\u0432\u0430\" \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u044b\u0456.","anchor_invalid":"\u041a\u0430\u043b\u0456 \u043b\u0430\u0441\u043a\u0430, \u043f\u0430\u0437\u043d\u0430\u0447\u0446\u0435 \u043a\u0430\u0440\u044d\u043a\u0442\u043d\u0430\u0435 \u0456\u043c\u044f \u044f\u043a\u0430\u0440\u0443.","accessibility_help":"\u0414\u0430\u0441\u0442\u0443\u043f\u043d\u0430\u0441\u0446\u044c \u0434\u0430\u043f\u0430\u043c\u043e\u0433\u0456","accessibility_usage_title":"\u0410\u0433\u0443\u043b\u044c\u043d\u0430\u0435 \u0432\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u043e\u045e\u0432\u0430\u043d\u043d\u0435","invalid_color_value":"\u041d\u044f\u043f\u0440\u0430\u0432\u0456\u043b\u044c\u043d\u0430\u0435 \u0437\u043d\u0430\u0447\u044d\u043d\u043d\u0435 \u043a\u043e\u043b\u0435\u0440\u0443"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bg.js
new file mode 100644
index 000000000..6587c7391
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.advanced',{"underline_desc":"\u041f\u043e\u0434\u0447\u0435\u0440\u0442\u0430\u043d (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u041f\u043e\u043b\u0443\u0447\u0435\u0440 (Ctrl+B)",dd:"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0434\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u044f",dt:"\u0414\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u044f ",samp:"\u041f\u0440\u043e\u043c\u0435\u0440\u0435\u043d \u043a\u043e\u0434",code:"\u041a\u043e\u0434",blockquote:"\u0426\u0438\u0442\u0430\u0442",h6:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 6",h5:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 5",h4:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 4",h3:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 3",h2:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 2",h1:"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435 1",pre:"\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d",address:"\u0410\u0434\u0440\u0435\u0441",div:"Div",paragraph:"\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444",block:"\u0424\u043e\u0440\u043c\u0430\u0442",fontdefault:"\u0428\u0440\u0438\u0444\u0442","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u0430 \u0448\u0440\u0438\u0444\u0442\u0430","style_select":"\u0421\u0442\u0438\u043b\u043e\u0432\u0435","anchor_delta_height":"","more_colors":"\u041e\u0449\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u0435","toolbar_focus":"\u041e\u0442\u0438\u0434\u0438 \u043f\u0440\u0438 \u0431\u0443\u0442\u043e\u043d\u0438\u0442\u0435 - Alt+Q, \u041e\u0442\u0438\u0434\u0438 \u043f\u0440\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 - Alt-Z, \u041e\u0442\u0438\u0434\u0438 \u043f\u0440\u0438 \u043f\u044a\u0442\u0435\u043a\u0430\u0442\u0430 \u043d\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0442\u0435 - Alt-X",newdocument:"\u0421\u0438\u0433\u0443\u0440\u0435\u043d \u043b\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0438\u0441\u043a\u0430\u0442\u0435 \u0434\u0430 \u0438\u0437\u0447\u0438\u0441\u0442\u0438\u0442\u0435 \u0446\u044f\u043b\u043e\u0442\u043e \u0441\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435?",path:"\u041f\u044a\u0442","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435/\u041e\u0442\u0440\u044f\u0437\u0432\u0430\u043d\u0435/\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435 \u043d\u0435 \u0435 \u0434\u043e\u0441\u0442\u044a\u043f\u043d\u043e \u043f\u043e\u0434 Mozilla \u0438 Firefox.\n\u0416\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u043f\u043e\u0432\u0435\u0447\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430?","blockquote_desc":"\u0426\u0438\u0442\u0430\u0442","help_desc":"\u041f\u043e\u043c\u043e\u0449","newdocument_desc":"\u041d\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430\u0442\u0430","paste_desc":"\u041f\u043e\u0441\u0442\u0430\u0432\u044f\u043d\u0435","copy_desc":"\u041a\u043e\u043f\u0438\u0440\u0430\u043d\u0435","cut_desc":"\u0418\u0437\u0440\u044f\u0437\u0432\u0430\u043d\u0435","anchor_desc":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043a\u043e\u0442\u0432\u0430","visualaid_desc":"\u0412\u043a\u043b./\u0438\u0437\u043a\u043b. \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0438\u0442\u0435 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438","charmap_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0441\u0438\u043c\u0432\u043e\u043b","backcolor_desc":"\u0418\u0437\u0431\u0435\u0440\u0438 \u0446\u0432\u044f\u0442 \u043d\u0430 \u0444\u043e\u043d\u0430","forecolor_desc":"\u0418\u0437\u0431\u0435\u0440\u0438 \u0446\u0432\u044f\u0442 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0430","custom1_desc":"\u0412\u0430\u0448\u0435\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0442\u0443\u043a","removeformat_desc":"\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u043d\u0435\u0442\u043e","hr_desc":"\u0412\u043c\u044a\u043a\u043d\u0438 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043b\u0438\u043d\u0438\u044f","sup_desc":"\u0413\u043e\u0440\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441","sub_desc":"\u0414\u043e\u043b\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441","code_desc":"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 HTML","cleanup_desc":"\u0418\u0437\u0447\u0438\u0441\u0442\u0438 \u043a\u043e\u0434\u0430","image_desc":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435/\u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","unlink_desc":"\u041f\u0440\u0435\u043c\u0430\u0445\u043d\u0438 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","link_desc":"\u0412\u043c\u044a\u043a\u0432\u0430\u043d\u0435/\u0440\u0435\u0434\u0430\u043a\u0446\u0438\u044f \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","redo_desc":"\u0412\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 (Ctrl+Y)","undo_desc":"\u041e\u0442\u043c\u044f\u043d\u0430 (Ctrl+Z)","indent_desc":"\u0423\u0432\u0435\u043b\u0438\u0447\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0441\u0442\u044a\u043f\u0430","outdent_desc":"\u041d\u0430\u043c\u0430\u043b\u044f\u0432\u0430\u043d\u0435 \u043d\u0430 \u043e\u0442\u0441\u0442\u044a\u043f\u0430","numlist_desc":"\u041d\u043e\u043c\u0435\u0440\u0430","bullist_desc":"\u0412\u043e\u0434\u0430\u0447\u0438","justifyfull_desc":"\u0414\u0432\u0443\u0441\u0442\u0440\u0430\u043d\u043d\u043e","justifyright_desc":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043e\u0442\u0434\u044f\u0441\u043d\u043e","justifycenter_desc":"\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u043d\u043e","justifyleft_desc":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435 \u043e\u0442\u043b\u044f\u0432\u043e","striketrough_desc":"\u0417\u0430\u0447\u0435\u0440\u0442\u0430\u043d","help_shortcut":"\u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 ALT-F10 \u0437\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438. \u041d\u0430\u0442\u0438\u0441\u043d\u0435\u0442\u0435 ALT-0 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449","rich_text_area":"\u0417\u043e\u043d\u0430 \u0441\u0432\u043e\u0431\u043e\u0434\u0435\u043d \u0442\u0435\u043a\u0441\u0442","shortcuts_desc":"\u0417\u0430 \u0434\u043e\u0441\u0442\u044a\u043f \u0434\u043e Help",toolbar:"\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bg_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bg_dlg.js
new file mode 100644
index 000000000..7df3449c6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bg_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.advanced_dlg',{"link_list":"\u0421\u043f\u0438\u0441\u044a\u043a \u043b\u0438\u043d\u043a\u043e\u0432\u0435","link_is_external":"URL-\u0442\u043e \u043a\u043e\u0435\u0442\u043e \u0432\u044a\u0432\u0435\u0434\u043e\u0445\u0442\u0435 \u0435 \u0432\u044a\u043d\u0448\u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430, \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u0438\u044f\u0442 http:// \u043f\u0440\u0435\u0444\u0438\u043a\u0441?","link_is_email":"URL-\u0442\u043e \u043a\u043e\u0435\u0442\u043e \u0432\u044a\u0432\u0435\u0434\u043e\u0445\u0442\u0435 \u0435 email \u0430\u0434\u0440\u0435\u0441, \u0436\u0435\u043b\u0430\u0435\u0442\u0435 \u043b\u0438 \u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043d\u0443\u0436\u043d\u0438\u044f\u0442 mailto: \u043f\u0440\u0435\u0444\u0438\u043a\u0441?","link_titlefield":"\u0417\u0430\u0433\u043b\u0430\u0432\u0438\u0435","link_target_blank":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0432 \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446","link_target_same":"\u041e\u0442\u0432\u043e\u0440\u0438 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430\u0442\u0430 \u0432 \u0441\u044a\u0449\u0438\u044f\u0442 \u043f\u0440\u043e\u0437\u043e\u0440\u0435\u0446","link_target":"\u0426\u0435\u043b","link_url":"URL \u043d\u0430 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","link_title":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u0445\u0438\u043f\u0435\u0440\u0432\u0440\u044a\u0437\u043a\u0430","image_align_right":"\u0414\u044f\u0441\u043d\u043e","image_align_left":"\u041b\u044f\u0432\u043e","image_align_textbottom":"\u0422\u0435\u043a\u0441\u0442 \u0434\u043e\u043b\u0443","image_align_texttop":"\u0422\u0435\u043a\u0441\u0442 \u0433\u043e\u0440\u0435","image_align_bottom":"\u0414\u043e\u043b\u0443","image_align_middle":"\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u043d\u0435","image_align_top":"\u0413\u043e\u0440\u0435","image_align_baseline":"\u0411\u0430\u0437\u043e\u0432\u0430 \u043b\u0438\u043d\u0438\u044f","image_align":"\u041f\u043e\u0434\u0440\u0430\u0432\u043d\u044f\u0432\u0430\u043d\u0435","image_hspace":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u043e \u0440\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435","image_vspace":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u043d\u043e \u0440\u0430\u0437\u0441\u0442\u043e\u044f\u043d\u0438\u0435","image_dimensions":"\u0420\u0430\u0437\u043c\u0435\u0440\u0438","image_alt":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","image_list":"\u0421\u043f\u0438\u0441\u044a\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438","image_border":"\u0420\u0430\u043c\u043a\u0430","image_src":"URL \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","image_title":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430","charmap_title":"\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0441\u0438\u043c\u0432\u043e\u043b","colorpicker_name":"\u0418\u043c\u0435:","colorpicker_color":"\u0426\u0432\u044f\u0442:","colorpicker_named_title":"\u0418\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0438 \u0446\u0432\u0435\u0442\u043e\u0432\u0435","colorpicker_named_tab":"\u0418\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0438","colorpicker_palette_title":"\u0426\u0432\u0435\u0442\u043e\u0432\u0430 \u043f\u0430\u043b\u0438\u0442\u0440\u0430","colorpicker_palette_tab":"\u041f\u0430\u043b\u0438\u0442\u0440\u0430","colorpicker_picker_title":"\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u0446\u0432\u044f\u0442","colorpicker_picker_tab":"\u0418\u0437\u0431\u043e\u0440","colorpicker_title":"\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0446\u0432\u044f\u0442","code_wordwrap":"\u041f\u0440\u0435\u043d\u043e\u0441 \u043d\u0430 \u0434\u0443\u043c\u0438","code_title":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0430 HTML","anchor_name":"\u0418\u043c\u0435 \u043d\u0430 \u043a\u043e\u0442\u0432\u0430\u0442\u0430","anchor_title":"\u0412\u043c\u044a\u043a\u043d\u0438/\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0430\u0439 \u043a\u043e\u0442\u0432\u0430","about_loaded":"\u0417\u0430\u0440\u0435\u0434\u0435\u043d\u0438 \u0434\u043e\u0431\u0430\u0432\u043a\u0438","about_version":"\u0412\u0435\u0440\u0441\u0438\u044f","about_author":"\u0410\u0432\u0442\u043e\u0440","about_plugin":"\u0414\u043e\u0431\u0430\u0432\u043a\u0430","about_plugins":"\u0414\u043e\u0431\u0430\u0432\u043a\u0438","about_license":"\u041b\u0438\u0446\u0435\u043d\u0437","about_help":"\u041f\u043e\u043c\u043e\u0449","about_general":"\u041e\u0442\u043d\u043e\u0441\u043d\u043e","about_title":"\u041e\u0442\u043d\u043e\u0441\u043d\u043e TinyMCE","charmap_usage":"\u0418\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u0439\u0442\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438\u0442\u0435 \u043d\u0430\u043b\u044f\u0432\u043e \u0438 \u043d\u0430\u0434\u044f\u0441\u043d\u043e, \u0437\u0430 \u0434\u0430 \u043d\u0430\u0432\u0438\u0433\u0438\u0440\u0430\u0442\u0435.","anchor_invalid":"\u041c\u043e\u043b\u044f \u0437\u0430\u0434\u0430\u0439\u0442\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0438\u043c\u0435 \u0437\u0430 \u043a\u043e\u0442\u0432\u0430.","accessibility_help":"\u041f\u043e\u043c\u043e\u0449 \u0437\u0430 \u0434\u043e\u0441\u0442\u044a\u043f\u043d\u043e\u0441\u0442","accessibility_usage_title":"\u041e\u0431\u0449\u0430 \u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0430","invalid_color_value":"\u041d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u0430 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442 \u0437\u0430 \u0446\u0432\u044f\u0442"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bn.js
new file mode 100644
index 000000000..3b2e4f858
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bn_dlg.js
new file mode 100644
index 000000000..6be9a341b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/br.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/br.js
new file mode 100644
index 000000000..f73f53c72
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/br.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.advanced',{"underline_desc":"Sublinhado (Ctrl+U)","italic_desc":"It\u00e1lico (Ctrl+I)","bold_desc":"Negrito (Ctrl+B)",dd:"Descri\u00e7\u00e3o de defini\u00e7\u00e3o",dt:"Termo de defini\u00e7\u00e3o",samp:"Amostra de c\u00f3digo",code:"C\u00f3digo",blockquote:"Cita\u00e7\u00e3o em bloco",h6:"Cabe\u00e7alho 6",h5:"Cabe\u00e7alho 5",h4:"Cabe\u00e7alho 4",h3:"Cabe\u00e7alho 3",h2:"Cabe\u00e7alho 2",h1:"Cabe\u00e7alho 1",pre:"Pr\u00e9-formatado",address:"Endere\u00e7o",div:"Div",paragraph:"Par\u00e1grafo",block:"Formata\u00e7\u00e3o",fontdefault:"Fam\u00edlia(Fonte)","font_size":"Tamanho","style_select":"Estilos","more_colors":"Mais cores","toolbar_focus":"Ir para ferramentas - Alt+Q, Ir para o editor - Alt-Z, Ir para endere\u00e7o do elemento - Alt-X",newdocument:"Tem certeza de que deseja apagar tudo?",path:"Endere\u00e7o","clipboard_msg":"Copiar/cortar/colar n\u00e3o est\u00e1 dispon\u00edvel no Mozilla e Firefox. Deseja obter mais informa\u00e7\u00f5es sobre isso?","blockquote_desc":"Cita\u00e7\u00e3o em bloco","help_desc":"Ajuda","newdocument_desc":"Novo documento","image_props_desc":"Propriedades de imagem","paste_desc":"Colar","copy_desc":"Copiar","cut_desc":"Cortar","anchor_desc":"Inserir/editar \u00e2ncora","visualaid_desc":"Alternar guias/elementos invis\u00edveis","charmap_desc":"Inserir caracteres especiais","backcolor_desc":"Selecionar cor de fundo","forecolor_desc":"Selecionar cor do texto","custom1_desc":"Insira aqui a sua descri\u00e7\u00e3o personalizada","removeformat_desc":"Remover formata\u00e7\u00e3o","hr_desc":"Inserir separador horizontal","sup_desc":"Superscrito","sub_desc":"Subscrito","code_desc":"Editar c\u00f3digo fonte","cleanup_desc":"Limpar c\u00f3digo incorreto","image_desc":"Inserir/editar imagem","unlink_desc":"Remover hyperlink","link_desc":"Inserir/editar hyperlink","redo_desc":"Refazer (Ctrl+Y)","undo_desc":"Desfazer (Ctrl+Z)","indent_desc":"Aumentar recuo","outdent_desc":"Diminuir recuo","numlist_desc":"Numera\u00e7\u00e3o","bullist_desc":"Marcadores","justifyfull_desc":"Justificar","justifyright_desc":"Alinhar \u00e0 direita","justifycenter_desc":"Centralizar","justifyleft_desc":"Alinhar \u00e0 esquerda","striketrough_desc":"Riscado","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/br_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/br_dlg.js
new file mode 100644
index 000000000..bcb26f1b7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/br_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.advanced_dlg',{"link_list":"Lista de Links","link_is_external":"A URL digitada parece conduzir a um link externo. Deseja acrescentar o (necess\u00e1rio) prefixo http://?","link_is_email":"A URL digitada parece ser um endere\u00e7o de e-mail. Deseja acrescentar o (necess\u00e1rio) prefixo mailto:?","link_titlefield":"T\u00edtulo","link_target_blank":"Abrir hyperlink em nova janela","link_target_same":"Abrir hyperlink na mesma janela","link_target":"Alvo","link_url":"URL do hyperink","link_title":"Inserir/editar hyperlink","image_align_right":"Direita","image_align_left":"Esquerda","image_align_textbottom":"Base do texto","image_align_texttop":"Topo do texto","image_align_bottom":"Abaixo","image_align_middle":"Meio","image_align_top":"Topo","image_align_baseline":"Sobre a linha de texto","image_align":"Alinhamento","image_hspace":"Espa\u00e7o Horizontal","image_vspace":"Espa\u00e7o Vertical","image_dimensions":"Dimens\u00f5es","image_alt":"Descri\u00e7\u00e3o da imagem","image_list":"Lista de imagens","image_border":"Limites","image_src":"Endere\u00e7o da imagem","image_title":"Inserir/editar imagem","charmap_title":"Selecionar caracteres personalizados","colorpicker_name":"Nome:","colorpicker_color":"Cor:","colorpicker_named_title":"Cores Personalizadas","colorpicker_named_tab":"Personalizadas","colorpicker_palette_title":"Paleta de Cores","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Editor de Cores","colorpicker_picker_tab":"Editor","colorpicker_title":"Seleccione uma cor","code_wordwrap":"Quebra autom\u00e1tica de linha","code_title":"Editor HTML","anchor_name":"Nome da \u00e2ncora","anchor_title":"Inserir/editar \u00e2ncora","about_loaded":"Plugins Instalados","about_version":"Vers\u00e3o","about_author":"Autor","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Licen\u00e7a","about_help":"Ajuda","about_general":"Sobre","about_title":"Sobre o TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bs.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bs.js
new file mode 100644
index 000000000..ae5081790
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.advanced',{"underline_desc":"Podcrtaj (Ctrl+U)","italic_desc":"Kurziv (Ctrl+I)","bold_desc":"Podebljaj (Ctrl+B)",dd:"Opis definicije",dt:"Definicija pojma",samp:"Primjer koda",code:"Kod",blockquote:"Citat",h6:"Naslov 6",h5:"Naslov 5",h4:"Naslov 4",h3:"Naslov 3",h2:"Naslov 2",h1:"Naslov 1",pre:"Oblikovano",address:"Adresa",div:"Div",paragraph:"Paragraf",block:"Format",fontdefault:"Vrsta pisma","font_size":"Veli\u010dina pisma","style_select":"Stilovi","more_colors":"Vi\u0161e boja","toolbar_focus":"Prije\u0111i na alatnu traku - Alt+Q, prije\u0111i na ure\u0111iva\u010d - Alt-Z, prije\u0111i na element path - Alt-X",newdocument:"Jeste li sigurni da \u017eelite izbrisati cijeli sadr\u017eaj?",path:"Staza","clipboard_msg":"Kopiraj/Izre\u017ei/Zalijepi nije dostupno u Mozilla i Firefox preglednicima. Vi\u0161e informacija?","blockquote_desc":"Citiraj","help_desc":"Pomo\u0107","newdocument_desc":"Novi dokument","image_props_desc":"Svojstva slike","paste_desc":"Zalijepi","copy_desc":"Kopiraj","cut_desc":"Izre\u017ei","anchor_desc":"Umetni/uredi sidro","visualaid_desc":"Vodilice/nevidljivi elementi","charmap_desc":"Umetni vlastiti znak","backcolor_desc":"Odaberite boju pozadine","forecolor_desc":"Odaberite boju teksta","custom1_desc":"Vlastiti opis ovdje","removeformat_desc":"Poni\u0161ti oblikovanje","hr_desc":"Umetni vodoravnu crtu","sup_desc":"Eksponent","sub_desc":"Indeks","code_desc":"Uredi HTML izvor","cleanup_desc":"Po\u010disti kod","image_desc":"Umetni/uredi sliku","unlink_desc":"Poni\u0161ti poveznicu","link_desc":"Umetni/uredi poveznicu","redo_desc":"Ponovi (Ctrl+Y)","undo_desc":"Poni\u0161ti (Ctrl+Z)","indent_desc":"Izvuci","outdent_desc":"Uvuci","numlist_desc":"Ure\u0111ena lista","bullist_desc":"Neure\u0111ena lista","justifyfull_desc":"Poravnaj potpuno","justifyright_desc":"Poravnaj desno","justifycenter_desc":"Centriraj","justifyleft_desc":"Poravnaj lijevo","striketrough_desc":"Precrtaj","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bs_dlg.js
new file mode 100644
index 000000000..d2fd3614d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/bs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.advanced_dlg',{"link_list":"Lista poveznica","link_is_external":"URL koji ste unijeli izgleda kao vanjska poveznica, \u017eelite li dodati potrebni http:// prefiks?","link_is_email":"URL koji ste unijeli izgleda kao e-mail adresa, \u017eelite li dodati potrebni mailto: prefiks?","link_titlefield":"Naslov","link_target_blank":"Otvori poveznicu u novom prozoru","link_target_same":"Otvori poveznicu u istom prozoru","link_target":"Meta","link_url":"URL poveznice","link_title":"Umetni/uredi poveznicu","image_align_right":"Desno","image_align_left":"Lijevo","image_align_textbottom":"Dno teksta","image_align_texttop":"Vrh teksta","image_align_bottom":"Dno","image_align_middle":"Sredina","image_align_top":"Vrh","image_align_baseline":"Osnovna linija","image_align":"Poravnavanje","image_hspace":"Vodoravni razmak","image_vspace":"Okomiti razmak","image_dimensions":"Dimenzije","image_alt":"Opis slike","image_list":"Lista slika","image_border":"Obrub","image_src":"URL slike","image_title":"Umetni/uredi sliku","charmap_title":"Odaberite znak","colorpicker_name":"Naziv:","colorpicker_color":"Boja:","colorpicker_named_title":"Imenovane boje","colorpicker_named_tab":"Imenovano","colorpicker_palette_title":"Paleta boja","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Odabir boje","colorpicker_picker_tab":"Odabir","colorpicker_title":"Izbor boje","code_wordwrap":"Omatanje teksta","code_title":"HTML ure\u0111iva\u010d","anchor_name":"Ime sidra","anchor_title":"Umetni/uredi sidro","about_loaded":"Postoje\u0107i dodaci","about_version":"Verzija","about_author":"Autor","about_plugin":"Dodatak","about_plugins":"Dodaci","about_license":"Licenca","about_help":"Pomo\u0107","about_general":"O programu","about_title":"TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ca.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ca.js
new file mode 100644
index 000000000..4e4be8e20
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ca.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.advanced',{"underline_desc":"Subratllat (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negreta (Ctrl+B)",dd:"Descripci\u00f3 de definici\u00f3",dt:"Terme de definici\u00f3 ",samp:"Mostra el Codi",code:"Codi",blockquote:"Citabloc",h6:"Encap\u00e7alament 6",h5:"Encap\u00e7alament 5",h4:"Encap\u00e7alament 4",h3:"Encap\u00e7alament 3",h2:"Encap\u00e7alament 2",h1:"Encap\u00e7alament 1",pre:"Preformatat",address:"Adre\u00e7a",div:"Capa",paragraph:"Par\u00e0graf",block:"Format",fontdefault:"Fam\u00edlia de font","font_size":"Mida de font","style_select":"Estils","more_colors":"M\u00e9s colors","toolbar_focus":"Salta als botons d\'eina - Alt Q, Salta a l\'editor - Alt-Z, Salta al cam\u00ed de l\'element - Alt-X",newdocument:"Esteu segur que voleu buidar tots els continguts?",path:"Cam\u00ed","clipboard_msg":"Copia/Retalla/Enganxa no es troba disponible ni al Mozilla ni al Firefox. Voleu m\u00e9s informaci\u00f3 sobre aix\u00f2?","blockquote_desc":"Citabloc","help_desc":"Ajuda","newdocument_desc":"Nou document","image_props_desc":"Propietats de la imatge","paste_desc":"Enganxa","copy_desc":"Copia","cut_desc":"Retalla","anchor_desc":"Insereix/edita \u00e0ncora","visualaid_desc":"Commuta elements guies/invisibles","charmap_desc":"Insereix un car\u00e0cter","backcolor_desc":"Selecci\u00f3 del color de fons","forecolor_desc":"Selecci\u00f3 del color de text","custom1_desc":"Aqu\u00ed la vostra pr\u00f2pia descripci\u00f3","removeformat_desc":"Elimina el format","hr_desc":"Insereix un filet horitzontal","sup_desc":"Super\u00edndex","sub_desc":"Sub\u00edndex","code_desc":"Edita el codi font HTML","cleanup_desc":"Poleix el codi","image_desc":"Insereix/edita imatge","unlink_desc":"Desenlla\u00e7a","link_desc":"Insereix/edita enlla\u00e7","redo_desc":"Ref\u00e9s (Ctrl+Y)","undo_desc":"Desf\u00e9s (Ctrl+Z)","indent_desc":"Augmenta el sagnat","outdent_desc":"Redueix el sagnat","numlist_desc":"Llista numerada","bullist_desc":"Llista no numerada","justifyfull_desc":"Justificat","justifyright_desc":"Alineaci\u00f3 dreta","justifycenter_desc":"Alineaci\u00f3 al centre","justifyleft_desc":"Alineaci\u00f3 esquerra","striketrough_desc":"Barrat","help_shortcut":"Prem ALT-F10 per barra d\'eines. Prem ALT-0 per ajuda","rich_text_area":"\u00c0rea de Text Enriquit","shortcuts_desc":"Ajuda d\'Accessabilitat",toolbar:"Barra d\'eines","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ca_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ca_dlg.js
new file mode 100644
index 000000000..d1b3776c2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ca_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.advanced_dlg',{"link_list":"Llista d\'enlla\u00e7os","link_is_external":"L\'URL que heu introdu\u00eft sembla ser un enlla\u00e7 extern, voleu afegir-hi el prefix requerit http:// ?","link_is_email":"L\'URL que heu introdu\u00eft sembla ser una adre\u00e7a de correu, voleu afegir-hi el prefix requerit mailto: ?","link_titlefield":"T\u00edtol","link_target_blank":"Obre l\'enlla\u00e7 a una nova finestra","link_target_same":"Obre l\'enlla\u00e7 a la mateixa finestra","link_target":"Dest\u00ed","link_url":"URL de l\'enlla\u00e7","link_title":"Insereix/edita enlla\u00e7","image_align_right":"Dreta","image_align_left":"Esquerra","image_align_textbottom":"Part inferior del text","image_align_texttop":"Part superior del text","image_align_bottom":"A baix","image_align_middle":"Al Mig","image_align_top":"A dalt","image_align_baseline":"L\u00ednia de base","image_align":"Alineaci\u00f3","image_hspace":"Espai horitzontal","image_vspace":"Espai vertical","image_dimensions":"Dimensions","image_alt":"Descripci\u00f3 de la imatge","image_list":"Llista de la imatge","image_border":"Vora","image_src":"URL de la imatge","image_title":"Insereix/edita imatge","charmap_title":"Selecci\u00f3 de car\u00e0cter","colorpicker_name":"Nom:","colorpicker_color":"Color:","colorpicker_named_title":"Colors pel seu nom","colorpicker_named_tab":"Per nom","colorpicker_palette_title":"Paleta de colors","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Capturador de color","colorpicker_picker_tab":"Capturador","colorpicker_title":"Selecci\u00f3 de color","code_wordwrap":"Embolcall de paraula","code_title":"Editor de codi font HTML","anchor_name":"Nom de l\'\u00e0ncora","anchor_title":"Insereix/edita \u00e0ncora","about_loaded":"Connectors carregats","about_version":"Versi\u00f3","about_author":"Autor","about_plugin":"Connector","about_plugins":"Connectors","about_license":"Llic\u00e8ncia","about_help":"Ajuda","about_general":"Quant a","about_title":"Quant al TinyMCE","charmap_usage":"Feu servir fletxes esquerra i dreta per navegar","anchor_invalid":"Sisplau, especifiqueu un nom d\'\u00e0ncora v\u00e0lid.","accessibility_help":"Ajuda d\'accessibilitat","accessibility_usage_title":"Us general","invalid_color_value":"Valor de color inv\u00e0lid"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ch.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ch.js
new file mode 100644
index 000000000..6f93d7130
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ch.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.advanced',{"underline_desc":"\u5e95\u7ebf \uff08Ctrl+U\uff09","italic_desc":"\u659c\u4f53 \uff08Ctrl+I\uff09","bold_desc":"\u7c97\u4f53 \uff08Ctrl+B\uff09",dd:"\u540d\u8bcd\u63cf\u8ff0",dt:"\u540d\u8bcd\u5b9a\u4e49",samp:"\u4ee3\u7801\u8303\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"\u6807\u98986",h5:"\u6807\u98985",h4:"\u6807\u98984",h3:"\u6807\u98983",h2:"\u6807\u98982",h1:"\u6807\u98981",pre:"\u9884\u8bbe\u683c\u5f0f",address:"\u5730\u5740",div:"DIV\u5c42\u7ea7",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u4f53","font_size":"\u6587\u5b57\u5927\u5c0f","style_select":"\u6837\u5f0f","link_delta_height":"60","link_delta_width":"40","more_colors":"\u66f4\u591a\u989c\u8272\u2026","toolbar_focus":"\u5b9a\u4f4d\u5230\u5de5\u5177\u5217\uff1aAlt+Q,\u5b9a\u4f4d\u5230\u7f16\u8f91\u6846\uff1aAlt+Z\u5b9a\u4f4d\u5230\u5de5\u5177\u5217- Alt+Q,\u5b9a\u4f4d\u5230\u5143\u7d20\u8def\u5f84\uff1aAlt+X.",newdocument:"\u786e\u8ba4\u6e05\u9664\u76ee\u524d\u7f16\u8f91\u7684\u5185\u5bb9\u5417\uff1f",path:"\u5143\u7d20\u8def\u5f84","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u63f4\u590d\u5236\u529f\u80fd\u3002","blockquote_desc":"\u5f15\u7528","help_desc":"\u8bf4\u660e","newdocument_desc":"\u65b0\u5efa\u6587\u4ef6","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u8d34\u4e0a \uff08Ctrl+V\uff09","copy_desc":"\u590d\u5236 \uff08Ctrl+C\uff09","cut_desc":"\u526a\u4e0b \uff08Ctrl+X\uff09","anchor_desc":"\u63d2\u5165/\u7f16\u8f91\u4e66\u7b7e","visualaid_desc":"\u663e\u793a/\u9690\u85cf\u76ee\u6807","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","backcolor_desc":"\u80cc\u666f\u989c\u8272","forecolor_desc":"\u6587\u5b57\u989c\u8272","custom1_desc":"\u5728\u6b64\u8f93\u5165\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u683c\u5f0f","hr_desc":"\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"Html\u4ee3\u7801\u6a21\u5f0f","cleanup_desc":"\u6e05\u9664\u683c\u5f0f","image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","unlink_desc":"\u5220\u9664\u8d85\u8d85\u8fde\u7ed3","link_desc":"\u63d2\u5165/\u7f16\u8f91\u8d85\u8fde\u7ed3","redo_desc":"\u53d6\u6d88\u6062\u590d \uff08Ctrl+Y\uff09","undo_desc":"\u6062\u590d \uff08Ctrl+Z\uff09","indent_desc":"\u589e\u52a0\u7f29\u6392","outdent_desc":"\u51cf\u5c11\u7f29\u6392","numlist_desc":"\u7f16\u53f7\u5217\u8868","bullist_desc":"\u9879\u76ee\u5217\u8868","justifyfull_desc":"\u5de6\u53f3\u5bf9\u9f50","justifyright_desc":"\u9760\u53f3\u5bf9\u9f50","justifycenter_desc":"\u7f6e\u4e2d\u5bf9\u9f50","justifyleft_desc":"\u9760\u5de6\u5bf9\u9f50","striketrough_desc":"\u5220\u9664\u7ebf","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ch_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ch_dlg.js
new file mode 100644
index 000000000..e5e855f70
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ch_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.advanced_dlg',{"link_list":"\u8d85\u8fde\u7ed3\u6e05\u5355","link_is_external":"\u60a8\u8f93\u5165\u7684 URL \u662f\u4e00\u4e2a\u5916\u90e8\u8d85\u8fde\u7ed3\uff0c\u662f\u5426\u8981\u52a0\u4e0a http:// ?","link_is_email":"\u60a8\u8f93\u5165\u7684\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u52a0 mailto:?","link_titlefield":"\u6807\u9898","link_target_blank":"\u65b0\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","link_target_same":"\u76ee\u524d\u89c6\u7a97\u6253\u5f00\u8d85\u8fde\u7ed3","link_target":"\u76ee\u6807","link_url":"\u8d85\u8fde\u7ed3URL","link_title":"\u63d2\u5165/\u7f16\u8f91\u8d85\u8fde\u7ed3","image_align_right":"\u9760\u53f3","image_align_left":"\u9760\u5de6","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u9760\u4e0b","image_align_middle":"\u7f6e\u4e2d","image_align_top":"\u9760\u4e0a","image_align_baseline":"\u57fa\u51c6\u7ebf","image_align":"\u5bf9\u9f50\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u95f4\u8ddd","image_vspace":"\u5782\u76f4\u95f4\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u8bf4\u660e","image_list":"\u56fe\u7247\u6e05\u5355","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247URL","image_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","colorpicker_name":"\u540d\u79f0\uff1a","colorpicker_color":"\u989c\u8272\uff1a","colorpicker_named_title":"\u5e38\u7528\u989c\u8272","colorpicker_named_tab":"\u5e38\u7528\u989c\u8272","colorpicker_palette_title":"WEB\u989c\u8272","colorpicker_palette_tab":"\u5b89\u5168\u8272","colorpicker_picker_title":"\u8c03\u8272\u76d8","colorpicker_picker_tab":"\u8c03\u8272\u76d8","colorpicker_title":"\u9009\u62e9\u989c\u8272","code_wordwrap":"\u81ea\u52a8\u6362\u884c","code_title":"\u4ee3\u7801\u6807\u9898","anchor_name":"\u4e66\u7b7e\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91\u4e66\u7b7e","about_loaded":"\u5df2\u542f\u7528\u7684\u63d2\u4ef6","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u63d2\u4ef6","about_plugins":"\u63d2\u4ef6","about_license":"\u6388\u6743","about_help":"\u8bf4\u660e","about_general":"\u5173\u65bc","about_title":"\u5173\u65bc TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cn.js
new file mode 100644
index 000000000..1c1775d41
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.advanced',{"underline_desc":"\u4e0b\u5212\u7ebf (Ctrl U)","italic_desc":"\u659c\u4f53 (Ctrl I)","bold_desc":"\u7c97\u4f53 (Ctrl B)",dd:"\u540d\u8bcd\u63cf\u8ff0",dt:"\u540d\u8bcd\u5b9a\u4e49",samp:"\u4ee3\u7801\u8303\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"6\u7ea7\u6807\u9898",h5:"5\u7ea7\u6807\u9898",h4:"4\u7ea7\u6807\u9898",h3:"3\u7ea7\u6807\u9898",h2:"2\u7ea7\u6807\u9898",h1:"1\u7ea7\u6807\u9898",pre:"\u9884\u8bbe\u683c\u5f0f",address:"\u5730\u5740\u683c\u5f0f",div:"Div\u533a\u5757",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u4f53","font_size":"\u5b57\u4f53\u5927\u5c0f","style_select":"\u5b57\u4f53\u6837\u5f0f","anchor_delta_height":"\u951a\u6807\u8bb0\u9ad8\u5ea6","anchor_delta_width":"\u951a\u6807\u8bb0\u5bbd\u5ea6","charmap_delta_height":"\u5b57\u7b26\u8868\u9ad8\u5ea6","charmap_delta_width":"\u5b57\u7b26\u8868\u5bbd\u5ea6","colorpicker_delta_height":"\u62fe\u8272\u5668\u9ad8\u5ea6","colorpicker_delta_width":"\u62fe\u8272\u5668\u5bbd\u5ea6","link_delta_height":"\u94fe\u63a5\u9ad8\u5ea6","link_delta_width":"\u94fe\u63a5\u5bbd\u5ea6","image_delta_height":"\u56fe\u7247\u9ad8\u5ea6","image_delta_width":"\u56fe\u7247\u5bbd\u5ea6","more_colors":"\u66f4\u591a\u989c\u8272","toolbar_focus":"\u5b9a\u4f4d\u5230\u5de5\u5177\u5217\uff1aAlt Q\uff0c\u5b9a\u4f4d\u5230\u7f16\u8f91\u6846\uff1aAlt Z\u5b9a\u4f4d\u5230\u5de5\u5177\u5217- Alt Q\uff0c\u5b9a\u4f4d\u5230\u5143\u7d20\u8def\u5f84\uff1aAlt X\u3002",newdocument:"\u786e\u8ba4\u6e05\u9664\u76ee\u524d\u7f16\u8f91\u7684\u5185\u5bb9\u5417\uff1f",path:"\u5143\u7d20\u8def\u5f84","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u60a8\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u8be5\u529f\u80fd\u3002","blockquote_desc":"\u5f15\u7528","help_desc":"\u5e2e\u52a9","newdocument_desc":"\u65b0\u6587\u6863","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u7c98\u8d34","copy_desc":"\u590d\u5236","cut_desc":"\u526a\u5207","anchor_desc":"\u63d2\u5165/\u7f16\u8f91\u4e66\u7b7e","visualaid_desc":"\u663e\u793a/\u9690\u85cf\u4e0d\u53ef\u89c1\u5185\u5bb9","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","backcolor_desc":"\u9009\u62e9\u80cc\u666f\u989c\u8272","forecolor_desc":"\u9009\u62e9\u6587\u672c\u989c\u8272","custom1_desc":"\u5728\u6b64\u8f93\u5165\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u683c\u5f0f","hr_desc":"\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"\u7f16\u8f91 HTML \u6e90\u4ee3\u7801","cleanup_desc":"\u6e05\u9664\u591a\u4f59\u683c\u5f0f","image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","unlink_desc":"\u6e05\u9664\u94fe\u63a5","link_desc":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","redo_desc":"\u91cd\u505a (Ctrl Y)","undo_desc":"\u64a4\u9500 (Ctrl Z)","indent_desc":"\u589e\u52a0\u7f29\u8fdb","outdent_desc":"\u51cf\u5c11\u7f29\u8fdb","numlist_desc":"\u6709\u5e8f\u7f16\u53f7","bullist_desc":"\u65e0\u5e8f\u7f16\u53f7","justifyfull_desc":"\u5de6\u53f3\u5bf9\u9f50","justifyright_desc":"\u53f3\u5bf9\u9f50","justifycenter_desc":"\u5c45\u4e2d\u5bf9\u9f50","justifyleft_desc":"\u5de6\u5bf9\u9f50","striketrough_desc":"\u5220\u9664\u7ebf","help_shortcut":"\u4f7f\u7528 ALT-F10 \u542f\u7528\u5de5\u5177\u680f. \u4f7f\u7528 ALT-0 \u6253\u5f00\u5e2e\u52a9","rich_text_area":"\u5bcc\u6587\u672c\u533a\u57df","shortcuts_desc":"Accessability\u5e2e\u52a9",toolbar:"\u5de5\u5177\u680f"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cn_dlg.js
new file mode 100644
index 000000000..0e7ba5244
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.advanced_dlg',{"link_list":"\u94fe\u63a5\u5217\u8868","link_is_external":"\u60a8\u8f93\u5165\u7684 URL \u662f\u4e00\u4e2a\u5916\u90e8\u8d85\u94fe\u63a5\uff0c\u662f\u5426\u8981\u52a0\u4e0a http:// \uff1f","link_is_email":"\u60a8\u8f93\u5165\u7684\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740,\u662f\u5426\u9700\u8981\u52a0 mailto:\uff1f","link_titlefield":"\u6807\u9898","link_target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00\u94fe\u63a5","link_target_same":"\u5728\u540c\u4e00\u7a97\u53e3\u6253\u5f00\u94fe\u63a5","link_target":"\u94fe\u63a5\u76ee\u6807","link_url":"\u94fe\u63a5URL","link_title":"\u63d2\u5165/\u7f16\u8f91\u94fe\u63a5","image_align_right":"\u9760\u53f3","image_align_left":"\u9760\u5de6","image_align_textbottom":"\u6587\u5b57\u5e95\u90e8","image_align_texttop":"\u6587\u5b57\u9876\u90e8","image_align_bottom":"\u5e95\u90e8","image_align_middle":"\u4e2d\u95f4","image_align_top":"\u9876\u90e8","image_align_baseline":"\u57fa\u7ebf","image_align":"\u5bf9\u9f50\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u95f4\u8ddd","image_vspace":"\u5782\u76f4\u95f4\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u63cf\u8ff0","image_list":"\u56fe\u7247\u5217\u8868","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247URL","image_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","charmap_title":"\u9009\u62e9\u7279\u6b8a\u5b57\u7b26","colorpicker_name":"\u540d\u79f0:","colorpicker_color":"\u989c\u8272:","colorpicker_named_title":"\u5e38\u7528\u989c\u8272","colorpicker_named_tab":"\u5e38\u7528","colorpicker_palette_title":"WEB\u989c\u8272","colorpicker_palette_tab":"\u5b89\u5168\u8272","colorpicker_picker_title":"\u62fe\u8272\u5668","colorpicker_picker_tab":"\u62fe\u8272\u5668","colorpicker_title":"\u9009\u62e9\u4e00\u79cd\u989c\u8272","code_wordwrap":"\u81ea\u52a8\u6362\u884c","code_title":"HTML\u6e90\u7801\u7f16\u8f91\u5668","anchor_name":"\u4e66\u7b7e\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91\u4e66\u7b7e","about_loaded":"\u5df2\u542f\u7528\u7684\u63d2\u4ef6","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u63d2\u4ef6","about_plugins":"\u63d2\u4ef6","about_license":"\u6388\u6743","about_help":"\u5e2e\u52a9","about_general":"\u5173\u4e8e","about_title":"\u5173\u4e8eTinyMCE","charmap_usage":"\u4f7f\u7528\u5de6\u53f3\u952e\u8df3\u8f6c","anchor_invalid":"\u8bf7\u6307\u5b9a\u4e00\u4e2a\u6709\u6548\u7684\u4e66\u7b7e\u7684\u540d\u79f0","accessibility_help":"\u65e0\u969c\u788d\u8bbe\u8ba1\u8bf4\u660e","accessibility_usage_title":"\u901a\u7528","invalid_color_value":"\u65e0\u6548\u989c\u8272\u503c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cs.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cs.js
new file mode 100644
index 000000000..9d88d4c9c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.advanced',{"underline_desc":"Podtr\u017een\u00e9 (Ctrl+U)","italic_desc":"Kurz\u00edva (Ctrl+I)","bold_desc":"Tu\u010dn\u00e9 (Ctrl+B)",dd:"Popis definice",dt:"Term\u00edn definice",samp:"Uk\u00e1zka k\u00f3du",code:"K\u00f3d",blockquote:"Blokov\u00e1 citace",h6:"Nadpis 6",h5:"Nadpis 5",h4:"Nadpis 4",h3:"Nadpis 3",h2:"Nadpis 2",h1:"Nadpis 1",pre:"P\u0159edform\u00e1tov\u00e1no",address:"Adresa",div:"Odd\u00edl",paragraph:"Odstavec",block:"Form\u00e1t",fontdefault:"P\u00edsmo","font_size":"Velikost p\u00edsma","style_select":"Styly","more_colors":"Dal\u0161\u00ed barvy","toolbar_focus":"P\u0159echod na panel n\u00e1stroj\u016f - Alt Q, p\u0159echod do editoru - Alt Z, p\u0159echod na cestu prvk\u016f - Alt X",newdocument:"Jste si opravdu jisti, \u017ee chcete odstranit ve\u0161ker\u00fd obsah?",path:"Cesta","clipboard_msg":"Funkce kop\u00edrovat/vyjmout/vlo\u017eit nejsou podporovan\u00e9 v prohl\u00ed\u017ee\u010d\u00edch Mozilla a Firefox.\nChcete v\u00edce informac\u00ed o tomto probl\u00e9mu?","blockquote_desc":"Blokov\u00e1 citace","help_desc":"N\u00e1pov\u011bda","newdocument_desc":"Nov\u00fd dokument","image_props_desc":"Vlastnosti obr\u00e1zku","paste_desc":"Vlo\u017eit","copy_desc":"Kop\u00edrovat","cut_desc":"Vyjmout","anchor_desc":"Vlo\u017eit/upravit z\u00e1lo\u017eku (kotvu)","visualaid_desc":"Zobrazit pomocn\u00e9 linky/skryt\u00e9 prvky","charmap_desc":"Vlo\u017eit speci\u00e1ln\u00ed znak","backcolor_desc":"Barva pozad\u00ed","forecolor_desc":"Barva textu","custom1_desc":"Libovoln\u00fd popisek","removeformat_desc":"Odstranit form\u00e1tov\u00e1n\u00ed","hr_desc":"Vlo\u017eit vodorovn\u00fd odd\u011blova\u010d","sup_desc":"Horn\u00ed index","sub_desc":"Doln\u00ed index","code_desc":"Upravit HTML zdroj","cleanup_desc":"Vy\u010distit k\u00f3d","image_desc":"Vlo\u017eit/upravit obr\u00e1zek","unlink_desc":"Odebrat odkaz","link_desc":"Vlo\u017eit/upravit odkaz","redo_desc":"Znovu (Ctrl+Y)","undo_desc":"Zp\u011bt (Ctrl+Z)","indent_desc":"Zv\u011bt\u0161it odsazen\u00ed","outdent_desc":"Zmen\u0161it odsazen\u00ed","numlist_desc":"\u010c\u00edslovan\u00fd seznam","bullist_desc":"Seznam s odr\u00e1\u017ekami","justifyfull_desc":"Zarovnat do bloku","justifyright_desc":"Zarovnat doprava","justifycenter_desc":"Zarovnat na st\u0159ed","justifyleft_desc":"Zarovnat doleva","striketrough_desc":"P\u0159e\u0161krtnut\u00e9","help_shortcut":"Stiskn\u011bte ALT F10 pro panel n\u00e1stroj\u016f. Stiskn\u011bte ALT 0 pro n\u00e1pov\u011bdu.","rich_text_area":"Oblast s form\u00e1tovan\u00fdm textem","shortcuts_desc":"N\u00e1pov\u011bda",toolbar:"Panel n\u00e1stroj\u016f","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cs_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cs_dlg.js
new file mode 100644
index 000000000..35c165a8c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cs_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.advanced_dlg',{"link_list":"Seznam odkaz\u016f","link_is_external":"Zadan\u00e9 URL vypad\u00e1 jako extern\u00ed odkaz, chcete doplnit povinn\u00fd prefix http://?","link_is_email":"Zadan\u00e9 URL vypad\u00e1 jako e-mailov\u00e1 adresa, chcete doplnit povinn\u00fd prefix mailto:?","link_titlefield":"Titulek","link_target_blank":"Otev\u0159\u00edt odkaz v nov\u00e9m okn\u011b","link_target_same":"Otev\u0159\u00edt odkaz ve stejn\u00e9m okn\u011b","link_target":"C\u00edl","link_url":"URL odkazu","link_title":"Vlo\u017eit/upravit odkaz","image_align_right":"Vpravo","image_align_left":"Vlevo","image_align_textbottom":"Se spodkem \u0159\u00e1dku","image_align_texttop":"S vrchem \u0159\u00e1dku","image_align_bottom":"Dol\u016f","image_align_middle":"Na st\u0159ed \u0159\u00e1dku","image_align_top":"Nahoru","image_align_baseline":"Na z\u00e1kladnu","image_align":"Zarovn\u00e1n\u00ed","image_hspace":"Horizont\u00e1ln\u00ed odsazen\u00ed","image_vspace":"Vertik\u00e1ln\u00ed odsazen\u00ed","image_dimensions":"Rozm\u011bry","image_alt":"Popis obr\u00e1zku","image_list":"Seznam obr\u00e1zk\u016f","image_border":"R\u00e1me\u010dek","image_src":"URL obr\u00e1zku","image_title":"Vlo\u017eit/upravit obr\u00e1zek","charmap_title":"Vlo\u017eit speci\u00e1ln\u00ed znak","colorpicker_name":"N\u00e1zev:","colorpicker_color":"Vybran\u00e1 barva:","colorpicker_named_title":"Pojmenovan\u00e9 barvy","colorpicker_named_tab":"N\u00e1zvy","colorpicker_palette_title":"Paleta barev","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Kap\u00e1tko","colorpicker_picker_tab":"Kap\u00e1tko","colorpicker_title":"V\u00fdb\u011br barvy","code_wordwrap":"Zalamov\u00e1n\u00ed \u0159\u00e1dk\u016f","code_title":"Editor HTML","anchor_name":"N\u00e1zev z\u00e1lo\u017eky","anchor_title":"Vlo\u017eit/upravit z\u00e1lo\u017eku (kotvu)","about_loaded":"Na\u010dten\u00e9 z\u00e1suvn\u00e9 moduly","about_version":"Verze","about_author":"Autor","about_plugin":"Z\u00e1suvn\u00fd modul","about_plugins":"Z\u00e1suvn\u00e9 moduly","about_license":"Licence","about_help":"N\u00e1pov\u011bda","about_general":"O programu","about_title":"O TinyMCE","charmap_usage":"Pro navigaci pou\u017eijte \u0161ipky vlevo a vpravo.","anchor_invalid":"Zadejte, pros\u00edm, platn\u00fd n\u00e1zev z\u00e1lo\u017eky (kotvy).","accessibility_help":"N\u00e1pov\u011bda pro p\u0159\u00edstupnost","accessibility_usage_title":"Obecn\u00e9 pou\u017eit\u00ed","invalid_color_value":"Neplatn\u00fd k\u00f3d barvy"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cy.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cy.js
new file mode 100644
index 000000000..d8b099ff3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.advanced',{"underline_desc":"Tanlinellu (Ctrl+U)","italic_desc":"Italig (Ctrl+I)","bold_desc":"Trwm (Ctrl+B)",dd:"Disgrifiad diffiniad",dt:"Term diffiniad ",samp:"Sampl c\u00f4d",code:"C\u00f4d",blockquote:"Dyfyniad bloc",h6:"Pennawd 6",h5:"Pennawd 5",h4:"Pennawd 4",h3:"Pennawd 3",h2:"Pennawd 2",h1:"Pennawd 1",pre:"Rhagffomatiwyd",address:"Cyfeririad",div:"Div",paragraph:"Paragraff",block:"Fformat",fontdefault:"Teulu ffont","font_size":"Maint Ffont","style_select":"Ardulliau","more_colors":"Mwy o liwiau","toolbar_focus":"Neidio i botymau offeryn - Alt+Q, Neidio i olygydd - Alt-Z, Neidio i lwybr elfen - Alt-X",newdocument:"A ydych chi\'n si\u0175r eich bod eisiau clirio\'r holl cynnwys?",path:"Llwybr","clipboard_msg":"Nid yw Cop\u00efo/Torri/Gludo ar gael mewn Mozilla a Firefox.\nYdych chi eisiau mwy o wybodaeth am y mater yma?","blockquote_desc":"Dyfyniad bloc","help_desc":"Cymorth","newdocument_desc":"Dogfen newydd","image_props_desc":"Priodweddau delwedd","paste_desc":"Gludo","copy_desc":"Cop\u00efo","cut_desc":"Torri","anchor_desc":"Mewnosod/golygu angor","visualaid_desc":"Toglu llinellau cyfeirydd/elfennau anweledig","charmap_desc":"Mewnosod n\u00f4d addasiedig","backcolor_desc":"Dewis lliw cefndir","forecolor_desc":"Dewis lliw testun","custom1_desc":"Eich disgrifiad addasiedig yma","removeformat_desc":"Tynnu fformatio","hr_desc":"Mewnosod mesurydd llorweddol","sup_desc":"Uwchysgrif","sub_desc":"Isysgrif","code_desc":"Golygu Ffynhonell HTML","cleanup_desc":"Glanhau c\u00f4d anhrefnus","image_desc":"Mewnosod/golygu delwedd","unlink_desc":"Datgysylltu","link_desc":"Mewnosod/golygu cyswllt","redo_desc":"Ailwneud (Ctrl+Y)","undo_desc":"Dadwneud (Ctrl+Z)","indent_desc":"Mewnoli","outdent_desc":"Alloli","numlist_desc":"Rhestr trenus","bullist_desc":"Rhestr didrenus","justifyfull_desc":"Alinio llawn","justifyright_desc":"Alinio i\'r dde","justifycenter_desc":"Alinio i\'r canol","justifyleft_desc":"Alinio i\'r chwith","striketrough_desc":"Taro drwodd","help_shortcut":"Pwyswch ALT-F10 ar gyfer bar offer. Pwyswch ALT-0 am gymorth","rich_text_area":"Ardal Testun Cyfoethog","shortcuts_desc":"Cymorth Hygyrchedd",toolbar:"Bar Offer","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cy_dlg.js
new file mode 100644
index 000000000..4df78cbe8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/cy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.advanced_dlg',{"link_list":"Rhestr cysylltau","link_is_external":"Mae\'r URL a rydych wedi rhoi yn edrych fel cyswllt allannol, ydych chi eisiau ychwanegu\'r rhagddodiad http:// sydd angen?","link_is_email":"Mae\'r URL a rydych wedi rhoi yn edrych fel cyferiad e-bost, ydych chi eisiau ychwanegu\'r rhagddodiad mailto: sydd angen?","link_titlefield":"Teitl","link_target_blank":"Agor cyswllt mewn ffenst newydd","link_target_same":"Agor cyswllt yn yr un ffenst","link_target":"Targed","link_url":"URL cyswllt","link_title":"Mewnosod/golygu cyswllt","image_align_right":"De","image_align_left":"Chwith","image_align_textbottom":"Gwaelod testun","image_align_texttop":"Pen testun","image_align_bottom":"Gwaelod","image_align_middle":"Canol","image_align_top":"Pen","image_align_baseline":"Gwaelodlin","image_align":"Aliniad","image_hspace":"Gofod llorweddol","image_vspace":"Gofod fertigol","image_dimensions":"Dimensiynau","image_alt":"disgrifiad delwedd","image_list":"Rhestr delweddau","image_border":"Border","image_src":"URL delwedd","image_title":"Mewnosod/golygu delwedd","charmap_title":"Dewis n\u00f4d addasiedig","colorpicker_name":"Enw:","colorpicker_color":"Lliw:","colorpicker_named_title":"Lliwiau wedi\'u enwi","colorpicker_named_tab":"Wedi\'u enwi","colorpicker_palette_title":"Lliwiau palet","colorpicker_palette_tab":"Palet","colorpicker_picker_title":"Dewisydd lliw","colorpicker_picker_tab":"Dweisydd","colorpicker_title":"Dewis lliw","code_wordwrap":"Amlapio geiriau","code_title":"Golygydd Ffynhonell HTML","anchor_name":"Enw angor","anchor_title":"Mewnosod/golygu angor","about_loaded":"Ategion wedi llwytho","about_version":"Fersion","about_author":"Awdur","about_plugin":"Ategyn","about_plugins":"Ategion","about_license":"Twyddedd","about_help":"Cymorth","about_general":"Ynglyn","about_title":"Ynglyn TinyMCE","charmap_usage":"Defnyddiwch saethau dde a chwith i fforio.","anchor_invalid":"Penodwch enw angor dilys.","accessibility_help":"Cymorth Hygyrchedd","accessibility_usage_title":"Defnydd Cyffredin"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/da.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/da.js
new file mode 100644
index 000000000..3d5fb8b0a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/da.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.advanced',{"underline_desc":"Understreget (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fed (Ctrl+B)",dd:"Definitionsbeskrivelse",dt:"Definitionsterm ",samp:"Kodeeksempel",code:"Kode",blockquote:"Blokcitat",h6:"Overskrift 6",h5:"Overskrift 5",h4:"Overskrift 4",h3:"Overskrift 3",h2:"Overskrift 2",h1:"Overskrift 1",pre:"Pr\u00e6formatteret",address:"Adresse",div:"Div",paragraph:"Afsnit",block:"Format",fontdefault:"Skrifttype","font_size":"Skriftst\u00f8rrelse","style_select":"Typografier","more_colors":"Flere farver","toolbar_focus":"Hop til v\u00e6rkt\u00f8jsknapper - Alt+Q, Skift til redigering - Alt-Z, Skift til element sti - Alt-X",newdocument:"Er du sikker p\u00e5 du vil slette alt indhold?",path:"Sti","clipboard_msg":"Kopier/Klip/inds\u00e6t er ikke muligt i Mozilla og Firefox.\nVil du have mere information om dette emne?","blockquote_desc":"Blokcitat","help_desc":"Hj\u00e6lp","newdocument_desc":"Nyt dokument","image_props_desc":"Billedegenskaber","paste_desc":"Inds\u00e6t","copy_desc":"Kopier","cut_desc":"Klip","anchor_desc":"Inds\u00e6t/rediger anker","visualaid_desc":"Sl\u00e5 hj\u00e6lp/synlige elementer til/fra","charmap_desc":"Inds\u00e6t specialtegn","backcolor_desc":"V\u00e6lg baggrundsfarve","forecolor_desc":"V\u00e6lg tekstfarve","custom1_desc":"Din egen beskrivelse her","removeformat_desc":"Fjern formatering","hr_desc":"Inds\u00e6t horisontal linie","sup_desc":"H\u00e6vet skrift","sub_desc":"S\u00e6nket skrift","code_desc":"Rediger HTML-kilde","cleanup_desc":"Ryd op i uordentlig kode","image_desc":"Inds\u00e6t/rediger billede","unlink_desc":"Fjern link","link_desc":"Inds\u00e6t/rediger link","redo_desc":"Gendan (Ctrl+Y)","undo_desc":"Fortryd (Ctrl+Z)","indent_desc":"\u00d8g indrykning","outdent_desc":"Formindsk indrykning","numlist_desc":"Nummereret punktopstilling","bullist_desc":"Unummereret punktopstilling","justifyfull_desc":"Lige marginer","justifyright_desc":"H\u00f8jrejusteret","justifycenter_desc":"Centreret","justifyleft_desc":"Venstrejusteret","striketrough_desc":"Gennemstreget","help_shortcut":"Tryk ALT-F10 for v\u00e6rkt\u00f8jslinie. Tryk ALT-0 for hj\u00e6lp","rich_text_area":"Tekstomr\u00e5de med formatering","shortcuts_desc":"Hj\u00e6lp til tilg\u00e6ngelighed",toolbar:"V\u00e6rkt\u00f8jslinie","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/da_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/da_dlg.js
new file mode 100644
index 000000000..f3a752cb1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/da_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.advanced_dlg',{"link_list":"Liste over links","link_is_external":"Den URL, der er indtastet, ser ud til at v\u00e6re et eksternt link. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede http:// foran?","link_is_email":"Den URL, der er indtastet, ser ud til at v\u00e6re en emailadresse. Vil du have tilf\u00f8jet det p\u00e5kr\u00e6vede mailto: foran?","link_titlefield":"Titel","link_target_blank":"\u00c5ben link i nyt vindue","link_target_same":"\u00c5ben link i samme vindue","link_target":"Target","link_url":"Link URL","link_title":"Inds\u00e6t/rediger link","image_align_right":"H\u00f8jre","image_align_left":"Venstre","image_align_textbottom":"Tekst bunden","image_align_texttop":"Tekst toppen","image_align_bottom":"Bunden","image_align_middle":"Centreret","image_align_top":"Toppen","image_align_baseline":"Grundlinie","image_align":"Justering","image_hspace":"Horisontal afstand","image_vspace":"Vertikal afstand","image_dimensions":"Dimensioner","image_alt":"Billedbeskrivelse","image_list":"Liste over billeder","image_border":"Kant","image_src":"Billede URL","image_title":"Inds\u00e6t/rediger billede","charmap_title":"V\u00e6lg specialtegn","colorpicker_name":"Navn:","colorpicker_color":"Farve:","colorpicker_named_title":"Navngivet farve","colorpicker_named_tab":"Navngivet","colorpicker_palette_title":"Palette-farver","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Farvev\u00e6lger","colorpicker_picker_tab":"V\u00e6lger","colorpicker_title":"V\u00e6lg en farve","code_wordwrap":"Tekstombrydning","code_title":"HTML kildekode-redigering","anchor_name":"Navn p\u00e5 anker","anchor_title":"Inds\u00e6t/rediger anker","about_loaded":"Indl\u00e6ste udvidelser","about_version":"Version","about_author":"Forfatter","about_plugin":"Udvidelse","about_plugins":"Udvidelser","about_license":"Licens","about_help":"Hj\u00e6lp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Brug venstre og h\u00f8jre piletaster til at navigere","anchor_invalid":"Angiv venligst et gyldigt anker navn.","accessibility_help":"Tilg\u00e6ngeligheds hj\u00e6lp","accessibility_usage_title":"Generel brug","invalid_color_value":"Ugyldig farve v\u00e6rdi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/de.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/de.js
new file mode 100644
index 000000000..034195ca4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/de.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.advanced',{"underline_desc":"Unterstrichen (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)",dd:"Definitionsbeschreibung",dt:"Definitionsbegriff",samp:"Beispiel",code:"Code",blockquote:"Zitatblock",h6:"\u00dcberschrift 6",h5:"\u00dcberschrift 5",h4:"\u00dcberschrift 4",h3:"\u00dcberschrift 3",h2:"\u00dcberschrift 2",h1:"\u00dcberschrift 1",pre:"Rohdaten",address:"Adresse",div:"Zusammenh\u00e4ngender Bereich",paragraph:"Absatz",block:"Vorlage",fontdefault:"Schriftart","font_size":"Schriftgr\u00f6\u00dfe","style_select":"Format","anchor_delta_width":"13","more_colors":"Weitere Farben","toolbar_focus":"Zur Werkzeugleiste springen: Alt+Q; Zum Editor springen: Alt-Z; Zum Elementpfad springen: Alt-X",newdocument:"Wollen Sie wirklich den ganzen Inhalt l\u00f6schen?",path:"Pfad","clipboard_msg":"Kopieren, Ausschneiden und Einf\u00fcgen sind im Mozilla Firefox nicht m\u00f6glich.\nWollen Sie mehr \u00fcber dieses Problem erfahren?","blockquote_desc":"Zitatblock","help_desc":"Hilfe","newdocument_desc":"Neues Dokument","image_props_desc":"Bildeigenschaften","paste_desc":"Einf\u00fcgen","copy_desc":"Kopieren","cut_desc":"Ausschneiden","anchor_desc":"Anker einf\u00fcgen/ver\u00e4ndern","visualaid_desc":"Hilfslinien und unsichtbare Elemente ein-/ausblenden","charmap_desc":"Sonderzeichen einf\u00fcgen","backcolor_desc":"Hintergrundfarbe","forecolor_desc":"Textfarbe","custom1_desc":"Benutzerdefinierte Beschreibung","removeformat_desc":"Formatierungen zur\u00fccksetzen","hr_desc":"Trennlinie einf\u00fcgen","sup_desc":"Hochgestellt","sub_desc":"Tiefgestellt","code_desc":"HTML-Quellcode bearbeiten","cleanup_desc":"Quellcode aufr\u00e4umen","image_desc":"Bild einf\u00fcgen/ver\u00e4ndern","unlink_desc":"Link entfernen","link_desc":"Link einf\u00fcgen/ver\u00e4ndern","redo_desc":"Wiederholen (Strg+Y)","undo_desc":"R\u00fcckg\u00e4ngig (Strg+Z)","indent_desc":"Einr\u00fccken","outdent_desc":"Ausr\u00fccken","numlist_desc":"Sortierte Liste","bullist_desc":"Unsortierte Liste","justifyfull_desc":"Blocksatz","justifyright_desc":"Rechtsb\u00fcndig","justifycenter_desc":"Zentriert","justifyleft_desc":"Linksb\u00fcndig","striketrough_desc":"Durchgestrichen","help_shortcut":"Dr\u00fccken Sie ALT-F10 f\u00fcr die Toolbar. Dr\u00fccken Sie ALT-0 f\u00fcr Hilfe","rich_text_area":"Rich Text Feld","shortcuts_desc":"Eingabehilfe",toolbar:"Toolbar","anchor_delta_height":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/de_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/de_dlg.js
new file mode 100644
index 000000000..d33ca1dd1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/de_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.advanced_dlg',{"link_list":"Linkliste","link_is_external":"Diese Adresse scheint ein externer Link zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"http://\" voranstellen?","link_is_email":"Diese Adresse scheint eine E-Mail-Adresse zu sein. M\u00f6chten Sie das dazu ben\u00f6tigte \"mailto:\" voranstellen?","link_titlefield":"Titel","link_target_blank":"Neues Fenster \u00f6ffnen","link_target_same":"Im selben Fenster \u00f6ffnen","link_target":"Fenster","link_url":"Adresse","link_title":"Link einf\u00fcgen/ver\u00e4ndern","image_align_right":"Rechts","image_align_left":"Links","image_align_textbottom":"Unten im Text","image_align_texttop":"Oben im Text","image_align_bottom":"Unten","image_align_middle":"Mittig","image_align_top":"Oben","image_align_baseline":"Zeile","image_align":"Ausrichtung","image_hspace":"Horizontaler Abstand","image_vspace":"Vertikaler Abstand","image_dimensions":"Abmessungen","image_alt":"Alternativtext","image_list":"Bilderliste","image_border":"Rahmen","image_src":"Adresse","image_title":"Bild einf\u00fcgen/ver\u00e4ndern","charmap_title":"Sonderzeichen","colorpicker_name":"Name:","colorpicker_color":"Farbe:","colorpicker_named_title":"Benannte Farben","colorpicker_named_tab":"Benannte Farben","colorpicker_palette_title":"Farbpalette","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Farbwahl","colorpicker_picker_tab":"Farbwahl","colorpicker_title":"Farbe","code_wordwrap":"Automatischer Zeilenumbruch","code_title":"HTML-Quellcode bearbeiten","anchor_name":"Name des Ankers","anchor_title":"Anker einf\u00fcgen/ver\u00e4ndern","about_loaded":"Geladene Plugins","about_version":"Version","about_author":"Urheber","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Lizenzbedingungen","about_help":"Hilfe","about_general":"\u00dcber","about_title":"\u00dcber TinyMCE","charmap_usage":"Navigation mit linken und rechten Pfeilen.","anchor_invalid":"Bitte geben Sie einen g\u00fcltigen Namen f\u00fcr den Anker ein!","accessibility_help":"Eingabehilfe","accessibility_usage_title":"Allgemeine Verwendung","invalid_color_value":"Ung\u00fcltige Farbangabe"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/dv.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/dv.js
new file mode 100644
index 000000000..ed997b474
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/dv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/dv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/dv_dlg.js
new file mode 100644
index 000000000..8087e13b1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/dv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/el.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/el.js
new file mode 100644
index 000000000..0ec14a661
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/el.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.advanced',{"underline_desc":"\u03a5\u03c0\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1 (Ctrl+U)","italic_desc":"\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1 (Ctrl+I)","bold_desc":"\u039c\u03b1\u03cd\u03c1\u03b1 (Ctrl+B)",dd:"\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u039f\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd",dt:"\u039f\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2",samp:"\u0394\u03b5\u03af\u03b3\u03bc\u03b1 \u039a\u03ce\u03b4\u03b9\u03ba\u03b1",code:"\u039a\u03ce\u03b4\u03b9\u03ba\u03b1\u03c2",blockquote:"Blockquote",h6:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 6",h5:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 5",h4:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 4",h3:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 3",h2:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 2",h1:"\u0395\u03c0\u03b9\u03ba\u03b5\u03c6\u03b1\u03bb\u03af\u03b4\u03b1 1",pre:"Pre",address:"\u0394\u03b9\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7",div:"Div",paragraph:"\u03a0\u03b1\u03c1\u03ac\u03b3\u03c1\u03b1\u03c6\u03bf\u03c2",block:"\u039c\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7",fontdefault:"\u0393\u03c1\u03b1\u03bc\u03bc\u03b1\u03c4\u03bf\u03c3\u03b5\u03b9\u03c1\u03ac","font_size":"\u039c\u03ad\u03b3\u03b5\u03b8\u03bf\u03c2 \u0393\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd","style_select":"\u03a3\u03c4\u03c5\u03bb","link_delta_width":"80","image_delta_width":"20","more_colors":"\u03a0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b1 \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03b1","toolbar_focus":"\u039c\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b1 \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ac \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd - Alt+Q, \u039c\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03bf\u03bd \u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5 - Alt-Z, \u039c\u03b5\u03c4\u03ac\u03b2\u03b1\u03c3\u03b7 \u03c3\u03c4\u03b7\u03bd \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae \u03c4\u03bf\u03c5 \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03bf\u03c5 - Alt-X",newdocument:"\u03a3\u03b9\u03af\u03b3\u03bf\u03c5\u03c1\u03b1 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03ba\u03b1\u03b8\u03b1\u03c1\u03af\u03c3\u03b5\u03c4\u03b5 \u03cc\u03bb\u03bf \u03c4\u03bf \u03c0\u03b5\u03c1\u03b9\u03b5\u03c7\u03cc\u03bc\u03b5\u03bd\u03bf ;",path:"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae","clipboard_msg":"\u039f\u03b9 \u03bb\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b5\u03c2 \u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae/\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae/\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7 \u03b4\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b5\u03c2 \u03c3\u03b5 Mozilla \u03ba\u03b1\u03b9 Firefox.\n\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03c0\u03b5\u03c1\u03b9\u03c3\u03c3\u03cc\u03c4\u03b5\u03c1\u03b5\u03c2 \u03c0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 ;","blockquote_desc":"Blockquote","help_desc":"\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1","newdocument_desc":"\u039d\u03ad\u03bf \u03ad\u03b3\u03b3\u03c1\u03b1\u03c6\u03bf","image_props_desc":"\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","paste_desc":"\u0395\u03c0\u03b9\u03ba\u03cc\u03bb\u03bb\u03b7\u03c3\u03b7","copy_desc":"\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae","cut_desc":"\u0391\u03c0\u03bf\u03ba\u03bf\u03c0\u03ae","anchor_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 anchor","visualaid_desc":"\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7/\u0391\u03c0\u03cc\u03ba\u03c1\u03c5\u03c8\u03b7 \u03b2\u03bf\u03b7\u03b8\u03b7\u03c4\u03b9\u03ba\u03ce\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd \u03ba\u03b1\u03b9 \u03b1\u03cc\u03c1\u03b1\u03c4\u03c9\u03bd \u03c3\u03c4\u03bf\u03b9\u03c7\u03b5\u03af\u03c9\u03bd","charmap_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1","backcolor_desc":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2 \u03c6\u03cc\u03bd\u03c4\u03bf\u03c5","forecolor_desc":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","custom1_desc":"\u0397 \u03c0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03c3\u03b1\u03c2 \u03b5\u03b4\u03ce","removeformat_desc":"\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03bc\u03bf\u03c1\u03c6\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7\u03c2","hr_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2","sup_desc":"\u0395\u03ba\u03b8\u03ad\u03c4\u03b7\u03c2","sub_desc":"\u0394\u03b5\u03af\u03ba\u03c4\u03b7\u03c2","code_desc":"\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 HTML \u039a\u03ce\u03b4\u03b9\u03ba\u03b1","cleanup_desc":"\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bc\u03c0\u03b5\u03c1\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c5 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1","image_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","unlink_desc":"\u039a\u03b1\u03c4\u03ac\u03c1\u03b3\u03b7\u03c3\u03b7 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","link_desc":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","redo_desc":"\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 (Ctrl+Y)","undo_desc":"\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 (Ctrl+Z)","indent_desc":"\u0395\u03c3\u03bf\u03c7\u03ae","outdent_desc":"\u03a0\u03c1\u03bf\u03b5\u03be\u03bf\u03c7\u03ae","numlist_desc":"\u039b\u03af\u03c3\u03c4\u03b1 \u03bc\u03b5 \u03c3\u03b5\u03b9\u03c1\u03ac","bullist_desc":"\u039b\u03af\u03c3\u03c4\u03b1 \u03c7\u03c9\u03c1\u03af\u03c2 \u03c3\u03b5\u03b9\u03c1\u03ac","justifyfull_desc":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03c0\u03bb\u03ae\u03c1\u03b7\u03c2","justifyright_desc":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b4\u03b5\u03be\u03b9\u03ac","justifycenter_desc":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03ba\u03ad\u03bd\u03c4\u03c1\u03bf","justifyleft_desc":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7 \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","striketrough_desc":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03bc\u03bc\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1","help_shortcut":"\u03a0\u03b1\u03c4\u03ae\u03c3\u03c4\u03b5 ALT-F10 \u03b3\u03b9\u03b1 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd. \u03a0\u03b9\u03ad\u03c3\u03c4\u03b5 ALT-0 \u03b3\u03b9\u03b1 \u03b2\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1","shortcuts_desc":"\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1 \u03b3\u03b9\u03b1 \u03a0\u03c1\u03bf\u03c3\u03b2\u03b1\u03c3\u03b9\u03bc\u03cc\u03c4\u03b7\u03c4\u03b1",toolbar:"\u0393\u03c1\u03b1\u03bc\u03bc\u03ae \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","image_delta_height":"","rich_text_area":"Rich Text Area"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/el_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/el_dlg.js
new file mode 100644
index 000000000..df5856ecf
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/el_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.advanced_dlg',{"link_list":"\u039b\u03af\u03c3\u03c4\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03c9\u03bd","link_is_external":"\u0397 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b1\u03c4\u03b5 \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b5\u03be\u03c9\u03c4\u03b5\u03c1\u03b9\u03ba\u03cc\u03c2 \u03c3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2, \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c4\u03b5\u03b8\u03b5\u03af \u03c4\u03bf \u03b1\u03c0\u03b1\u03c1\u03b1\u03af\u03c4\u03b7\u03c4\u03bf http:// ;","link_is_email":"\u0397 \u03b4\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c0\u03bf\u03c5 \u03b5\u03b9\u03c3\u03ac\u03b3\u03b1\u03c4\u03b5 \u03c6\u03b1\u03af\u03bd\u03b5\u03c4\u03b1\u03b9 \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 email, \u03bd\u03b1 \u03c0\u03c1\u03bf\u03c3\u03c4\u03b5\u03b8\u03b5\u03af \u03c4\u03bf \u03b1\u03c0\u03b1\u03c1\u03b1\u03af\u03c4\u03b7\u03c4\u03bf mailto: ;","link_titlefield":"\u03a4\u03af\u03c4\u03bb\u03bf\u03c2","link_target_blank":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03b5 \u03bd\u03ad\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf","link_target_same":"\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c3\u03c4\u03bf \u03af\u03b4\u03b9\u03bf \u03c0\u03b1\u03c1\u03ac\u03b8\u03c5\u03c1\u03bf","link_target":"\u03a3\u03c4\u03cc\u03c7\u03bf\u03c2","link_url":"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","link_title":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03c3\u03c5\u03bd\u03b4\u03ad\u03c3\u03bc\u03bf\u03c5","image_align_right":"\u0394\u03b5\u03be\u03b9\u03ac","image_align_left":"\u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac","image_align_textbottom":"\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf \u03ba\u03ac\u03c4\u03c9","image_align_texttop":"\u039a\u03ad\u03b9\u03bc\u03b5\u03bd\u03bf \u03c0\u03ac\u03bd\u03c9","image_align_bottom":"\u039a\u03ac\u03c4\u03c9","image_align_middle":"\u039c\u03ad\u03c3\u03b7","image_align_top":"\u0395\u03c0\u03ac\u03bd\u03c9","image_align_baseline":"\u0393\u03c1\u03b1\u03bc\u03bc\u03ae \u03c3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd","image_align":"\u03a3\u03c4\u03bf\u03af\u03c7\u03b9\u03c3\u03b7","image_hspace":"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03bf\u03c1\u03b9\u03b6\u03cc\u03bd\u03c4\u03b9\u03b1","image_vspace":"\u0391\u03c0\u03cc\u03c3\u03c4\u03b1\u03c3\u03b7 \u03ba\u03ac\u03b8\u03b5\u03c4\u03b7","image_dimensions":"\u0394\u03b9\u03b1\u03c3\u03c4\u03ac\u03c3\u03b5\u03b9\u03c2","image_alt":"\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","image_list":"\u039b\u03af\u03c3\u03c4\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03c9\u03bd","image_border":"\u03a0\u03bb\u03b1\u03af\u03c3\u03b9\u03bf","image_src":"\u0394\u03b9\u03b1\u03b4\u03c1\u03bf\u03bc\u03ae URL \u0395\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","image_title":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2","charmap_title":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c7\u03b1\u03c1\u03b1\u03ba\u03c4\u03ae\u03c1\u03b1","colorpicker_name":"\u038c\u03bd\u03bf\u03bc\u03b1:","colorpicker_color":"\u03a7\u03c1\u03ce\u03bc\u03b1:","colorpicker_named_title":"\u039f\u03bd\u03bf\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03ac \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03b1","colorpicker_named_tab":"\u039f\u03bd\u03bf\u03bc\u03b1\u03c3\u03c4\u03b9\u03ba\u03ac","colorpicker_palette_title":"\u03a7\u03c1\u03ce\u03bc\u03b1\u03c4\u03b1 \u03c0\u03b1\u03bb\u03ad\u03c4\u03b1\u03c2","colorpicker_palette_tab":"\u03a0\u03b1\u03bb\u03ad\u03c4\u03b1","colorpicker_picker_title":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2","colorpicker_picker_tab":"\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae","colorpicker_title":"\u0394\u03b9\u03b1\u03bb\u03ad\u03be\u03c4\u03b5 \u03c7\u03c1\u03ce\u03bc\u03b1","code_wordwrap":"\u0391\u03bd\u03b1\u03b4\u03af\u03c0\u03bb\u03c9\u03c3\u03b7 \u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5","code_title":"\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae\u03c2 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1 HTML","anchor_name":"\u038c\u03bd\u03bf\u03bc\u03b1 anchor","anchor_title":"\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae/\u03b5\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 anchor","about_loaded":"\u03a6\u03bf\u03c1\u03c4\u03c9\u03bc\u03ad\u03bd\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1","about_version":"\u0388\u03ba\u03b4\u03bf\u03c3\u03b7","about_author":"\u03a3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ad\u03b1\u03c2","about_plugin":"\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03bf \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03bf","about_plugins":"\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03b1 \u03c0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c4\u03b1","about_license":"\u0386\u03b4\u03b5\u03b9\u03b1","about_help":"\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1","about_general":"\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac","about_title":"\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03bf TinyMCE","charmap_usage":"\u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c3\u03c4\u03b5 \u03c4\u03bf \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03cc \u03ba\u03b1\u03b9 \u03b4\u03b5\u03be\u03af \u03b2\u03b5\u03bb\u03ac\u03ba\u03b9 \u03b3\u03b9\u03b1 \u03bd\u03b1 \u03c0\u03bb\u03bf\u03b7\u03b3\u03b7\u03b8\u03b5\u03af\u03c4\u03b5","anchor_invalid":"\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b5\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03ad\u03bd\u03b1 \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 anchor.","accessibility_help":"\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1 \u03b3\u03b9\u03b1 \u03a0\u03c1\u03bf\u03c3\u03b2\u03b1\u03c3\u03b9\u03bc\u03cc\u03c4\u03b7\u03c4\u03b1","accessibility_usage_title":"\u0393\u03b5\u03bd\u03b9\u03ba\u03ae \u03a7\u03c1\u03ae\u03c3\u03b7","invalid_color_value":"\u039b\u03ac\u03b8\u03bf\u03c2 \u03a4\u03b9\u03bc\u03ae \u03a7\u03c1\u03ce\u03bc\u03b1\u03c4\u03bf\u03c2"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/en.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/en.js
new file mode 100644
index 000000000..6e5848187
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/en.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition Description",dt:"Definition Term ",samp:"Code Sample",code:"Code",blockquote:"Block Quote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"DIV",paragraph:"Paragraph",block:"Format",fontdefault:"Font Family","font_size":"Font Size","style_select":"Styles","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Block Quote","help_desc":"Help","newdocument_desc":"New Document","image_props_desc":"Image Properties","paste_desc":"Paste (Ctrl+V)","copy_desc":"Copy (Ctrl+C)","cut_desc":"Cut (Ctrl+X)","anchor_desc":"Insert/Edit Anchor","visualaid_desc":"show/Hide Guidelines/Invisible Elements","charmap_desc":"Insert Special Character","backcolor_desc":"Select Background Color","forecolor_desc":"Select Text Color","custom1_desc":"Your Custom Description Here","removeformat_desc":"Remove Formatting","hr_desc":"Insert Horizontal Line","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup Messy Code","image_desc":"Insert/Edit Image","unlink_desc":"Unlink","link_desc":"Insert/Edit Link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Increase Indent","outdent_desc":"Decrease Indent","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","justifyfull_desc":"Align Full","justifyright_desc":"Align Right","justifycenter_desc":"Align Center","justifyleft_desc":"Align Left","striketrough_desc":"Strikethrough","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/en_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/en_dlg.js
new file mode 100644
index 000000000..e451f3774
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/en_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.advanced_dlg',{"link_list":"Link List","link_is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open Link in a New Window","link_target_same":"Open Link in the Same Window","link_target":"Target","link_url":"Link URL","link_title":"Insert/Edit Link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text Bottom","image_align_texttop":"Text Top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal Space","image_vspace":"Vertical Space","image_dimensions":"Dimensions","image_alt":"Image Description","image_list":"Image List","image_border":"Border","image_src":"Image URL","image_title":"Insert/Edit Image","charmap_title":"Select Special Character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named Colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette Colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color Picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a Color","code_wordwrap":"Word Wrap","code_title":"HTML Source Editor","anchor_name":"Anchor Name","anchor_title":"Insert/Edit Anchor","about_loaded":"Loaded Plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eo.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eo.js
new file mode 100644
index 000000000..6a875e504
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eo.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.advanced',{"underline_desc":"Substrekita (Ctrl U)","italic_desc":"Kursiva (Ctrl I)","bold_desc":"Grasa (Ctrl B)",dd:"Priskribo de la difino",dt:"Enhavo de la difino",samp:"Specimeno de kodo",code:"Kodo",blockquote:"Blokcita\u0135o",h6:"Titolo 6",h5:"Titolo 5",h4:"Titolo 4",h3:"Titolo 3",h2:"Titolo 2",h1:"Titolo 1",pre:"Anta\u016dformatita",address:"Adreso",div:"Div",paragraph:"Paragrafo",block:"Formatado",fontdefault:"Tiparo","font_size":"Grandeco","style_select":"Stiloj","more_colors":"Pliaj koloroj","toolbar_focus":"Iri al iloj - Alt Q, Iri al redaktilo - Alt-Z, Iri al la adreso de la elemento - Alt-X",newdocument:"\u0108u vi certas ke vi volas forvi\u015di \u0109ion?",path:"Adreso","clipboard_msg":"Kopii/eltondi/alglui ne estas disponebla en Mozilla nek Firefox. \u0108u vi volas pliajn informojn pri \u0109i tiu problemo?","blockquote_desc":"Blokcita\u0135o","help_desc":"Helpo","newdocument_desc":"Nova dokumento","image_props_desc":"Atributoj de bildo","paste_desc":"Alglui","copy_desc":"Kopii","cut_desc":"Eltondi","anchor_desc":"Enmeti/redakti ankron","visualaid_desc":"Alterni gvidilojn/nevideblajn elementojn","charmap_desc":"Enmeti specialajn signojn","backcolor_desc":"Elekti koloron de fono","forecolor_desc":"Elekti koloron de teksto","custom1_desc":"Enmetu \u0109i tie vian tajloritan priskribon","removeformat_desc":"Forigi formaton","hr_desc":"Enmeti horizontalan disigilon","sup_desc":"Supre","sub_desc":"Sube","code_desc":"Redakti fontokodon","cleanup_desc":"Senrubigi mal\u011dustan kodon","image_desc":"Enmeti/redakti bildon","unlink_desc":"Forigi ligilon","link_desc":"Enmeti/redakti ligilon","redo_desc":"Refari (Ctrl Y)","undo_desc":"Malfari (Ctrl Z)","indent_desc":"Pligrandigi krommar\u011denon","outdent_desc":"Malpligrandigi krommar\u011denon","numlist_desc":"Numerado","bullist_desc":"Buloj","justifyfull_desc":"\u011cisrandigi","justifyright_desc":"Dekstre liniigi","justifycenter_desc":"Centrigi","justifyleft_desc":"Maldekstre liniigi","striketrough_desc":"Strekita","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eo_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eo_dlg.js
new file mode 100644
index 000000000..40f0edf6e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eo_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.advanced_dlg',{"link_list":"Listo de ligiloj","link_is_external":"La entajpita adreso \u015dajne kondukas al ekstera ligilo. \u0108u vi volas aldoni la necesan prefikson http://?","link_is_email":"La entajpita adreso \u015dajnas retpo\u015dtadreso. \u0108u vi volas aldoni la necesan prefikson mailto:?","link_titlefield":"Titolo","link_target_blank":"Malfermi ligilon en novan fenestron","link_target_same":"Malfermi ligilon en la saman fenestron","link_target":"Celo","link_url":"Adreso de ligilo","link_title":"Enmeti/redakti ligilon","image_align_right":"Dekstre","image_align_left":"Maldekstre","image_align_textbottom":"Tekstosubo","image_align_texttop":"Tekstosupro","image_align_bottom":"Sube","image_align_middle":"Meze","image_align_top":"Supre","image_align_baseline":"Sur tekstlinio","image_align":"Liniigo","image_hspace":"Horizontala spaco","image_vspace":"Vertikala spaco","image_dimensions":"Dimensioj","image_alt":"Priskribo de bildo","image_list":"Listo de bildo","image_border":"Bordero","image_src":"Adreso de bildo","image_title":"Enmeti/redakti bildon","charmap_title":"Elekti tajloritajn signojn","colorpicker_name":"Nomo:","colorpicker_color":"Koloro:","colorpicker_named_title":"Tajloritaj Koloroj","colorpicker_named_tab":"Tajloritaj","colorpicker_palette_title":"Kolorpaletro","colorpicker_palette_tab":"Paletro","colorpicker_picker_title":"Kolorredaktilo","colorpicker_picker_tab":"Redaktilo","colorpicker_title":"Elektu koloron","code_wordwrap":"A\u016dtomata linisalto","code_title":"HTML-Redaktilo","anchor_name":"Nomo de ankro","anchor_title":"Enmeti/redakti ankron","about_loaded":"Instalitaj kromprogramoj","about_version":"Versio","about_author":"A\u016dtoro","about_plugin":"Kromprogramo","about_plugins":"Kromprogramoj","about_license":"Permesilo","about_help":"Helpo","about_general":"Pri","about_title":"Pri TinyMCE","anchor_invalid":"Bonvole, uzu validan nomon por la ankro.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/es.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/es.js
new file mode 100644
index 000000000..ef9f26472
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/es.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.advanced',{"underline_desc":"Subrayado (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negrita (Ctrl+B)",dd:"Descripci\u00f3n de definici\u00f3n",dt:"T\u00e9rmino de definici\u00f3n",samp:"Ejemplo de c\u00f3digo",code:"C\u00f3digo",blockquote:"Cita",h6:"Encabezado 6",h5:"Encabezado 5",h4:"Encabezado 4",h3:"Encabezado 3",h2:"Encabezado 2",h1:"Encabezado 1",pre:"Preformateado",address:"Direcci\u00f3n",div:"Div",paragraph:"P\u00e1rrafo",block:"Formato",fontdefault:"Fuente","font_size":"Tama\u00f1o","style_select":"Estilos","more_colors":"M\u00e1s colores","toolbar_focus":"Ir a los botones de herramientas - Alt+Q, Ir al editor - Alt-Z, Ir a la ruta del elemento - Alt-X",newdocument:" \u00bfSeguro que desea limpiar todo el contenido?",path:"Ruta","clipboard_msg":"Copiar/Cortar/Pegar no se encuentra disponible en Mozilla y Firefox.\n \u00bfQuiere m\u00e1s informaci\u00f3n sobre este tema?","blockquote_desc":"Cita","help_desc":"Ayuda","newdocument_desc":"Nuevo documento","image_props_desc":"Propiedades de imagen","paste_desc":"Pegar","copy_desc":"Copiar","cut_desc":"Cortar","anchor_desc":"Insertar/editar ancla","visualaid_desc":"Mostrar/ocultar l\u00ednea de gu\u00eda/elementos invisibles","charmap_desc":"Insertar caracteres personalizados","backcolor_desc":"Elegir color de fondo","forecolor_desc":"Elegir color del texto","custom1_desc":"Su descripci\u00f3n personal aqu\u00ed","removeformat_desc":"Limpiar formato","hr_desc":"Insertar regla horizontal","sup_desc":"Super\u00edndice","sub_desc":"Sub\u00edndice","code_desc":"Editar c\u00f3digo HTML","cleanup_desc":"Limpiar c\u00f3digo basura","image_desc":"Insertar/editar imagen","unlink_desc":"Quitar hiperv\u00ednculo","link_desc":"Insertar/editar hiperv\u00ednculo","redo_desc":"Rehacer (Ctrl+Y)","undo_desc":"Deshacer (Ctrl+Z)","indent_desc":"Aumentar sangr\u00eda","outdent_desc":"Reducir sangr\u00eda","numlist_desc":"Lista ordenada","bullist_desc":"Lista desordenada","justifyfull_desc":"Justificar","justifyright_desc":"Alinear a la derecha","justifycenter_desc":"Alinear al centro","justifyleft_desc":"Alinear a la izquierda","striketrough_desc":"Tachado","help_shortcut":"Presiones ALT-F10 para la barra de herramientas. Presione ALT-0 para ayuda.","rich_text_area":"\u00c1rea de texto con formato","shortcuts_desc":"Ayuda de accesibilidad",toolbar:"Barra de Herramientas","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/es_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/es_dlg.js
new file mode 100644
index 000000000..923c34b75
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/es_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.advanced_dlg',{"link_list":"Lista de hiperv\u00ednculos","link_is_external":"La URL que introdujo parece ser un v\u00ednculo externo, \u00bfdesea agregar el prefijo http:// necesario?","link_is_email":"La URL que introdujo parece ser una direcci\u00f3n de email, \u00bfdesea agregar el prefijo mailto: necesario?","link_titlefield":"T\u00edtulo","link_target_blank":"Abrir v\u00ednculo en una ventana nueva","link_target_same":"Abrir v\u00ednculo en la misma ventana","link_target":"Destino","link_url":"URL del hiperv\u00ednculo","link_title":"Insertar/editar hiperv\u00ednculo","image_align_right":"Derecha","image_align_left":"Izquierda","image_align_textbottom":"Texto debajo","image_align_texttop":"Texto arriba","image_align_bottom":"Debajo","image_align_middle":"Medio","image_align_top":"Arriba","image_align_baseline":"L\u00ednea base","image_align":"Alineaci\u00f3n","image_hspace":"Espacio horizontal","image_vspace":"Espacio vertical","image_dimensions":"Dimensi\u00f3n","image_alt":"Descripci\u00f3n de la Imagen","image_list":"Lista de la Imagen","image_border":"Borde","image_src":"URL de la Imagen","image_title":"Insertar/editar imagen","charmap_title":"Elegir caracter personalizado","colorpicker_name":"Nombre:","colorpicker_color":"Color:","colorpicker_named_title":"Colores nombrados","colorpicker_named_tab":"Nombrados","colorpicker_palette_title":"Paleta de colores","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Paleta de color","colorpicker_picker_tab":"Selector","colorpicker_title":"Elegir color","code_wordwrap":"Ajustar al margen","code_title":"Editor del c\u00f3digo fuente HTML","anchor_name":"Nombre del ancla","anchor_title":"Insertar/editar ancla","about_loaded":"Complementos cargados","about_version":"Versi\u00f3n","about_author":"Autor","about_plugin":"Complemento","about_plugins":"Complementos","about_license":"Licencia","about_help":"Ayuda","about_general":"Acerca de ","about_title":"Acerca de TinyMCE","charmap_usage":"Use las flechas para navegar","anchor_invalid":"Especifique un nombre v\u00e1lido para liga","accessibility_help":"Ayuda sobre Accesibilidad","accessibility_usage_title":"Uso General","invalid_color_value":"valor invalido de color"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/et.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/et.js
new file mode 100644
index 000000000..5c0c7937f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/et.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.advanced',{"underline_desc":"Allajoonitud (Ctrl+U)","italic_desc":"Kursiiv (Ctrl+I)","bold_desc":"Rasvane (Ctrl+B)",dd:"Defineeringu kirjeldus",dt:"Defineeringu tingimus",samp:"Koodi n\u00e4ide",code:"Kood",blockquote:"Plokkviide",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Eelformeeritud",address:"Aadress",div:"Div",paragraph:"Paragraaf",block:"Formaat",fontdefault:"Font","font_size":"Fondi suurus","style_select":"Stiilid","more_colors":"Rohkem v\u00e4rve","toolbar_focus":"H\u00fcppa t\u00f6\u00f6riista nuppudele - Alt+Q, H\u00fcppa redigeerijale - Alt-Z, H\u00fcppa elemendi teele - Alt-X",newdocument:"Oled sa kindel, et tahad kustutada k\u00f5ik sisud?",path:"Tee","clipboard_msg":"Kopeeri/L\u00f5ika/Kleebi ei ole Mozillas ja Firefoxis saadaval. Kas soovid rohkem infot selle probleemi kohta?","blockquote_desc":"Plokkviide","help_desc":"Abi","newdocument_desc":"Uus dokument","image_props_desc":"Pildi kirjeldus","paste_desc":"Kleebi","copy_desc":"Kopeeri","cut_desc":"L\u00f5ika","anchor_desc":"Sisesta/redigeeri ankur","visualaid_desc":"L\u00fclita \u00fcmber juhtjooned/n\u00e4htamatud elemendid","charmap_desc":"Sisesta kohandatud kirjam\u00e4rk","backcolor_desc":"Vali tausta v\u00e4rv","forecolor_desc":"Vali teksti v\u00e4rv","custom1_desc":"Teie kohandatud kirjeldus siia","removeformat_desc":"Eemalda vormindus","hr_desc":"Sisesta horisontaalne joonlaud","sup_desc":"\u00dclaindeks","sub_desc":"Alaindeks","code_desc":"Redigeeri HTML l\u00e4htekoodi","cleanup_desc":"Puhasta segane kood","image_desc":"Sisesta/redigeeri pilt","unlink_desc":"Eemalda link","link_desc":"Sisesta/redigeeri link","redo_desc":"Tee uuesti (Ctrl+Y)","undo_desc":"V\u00f5ta tagasi (Ctrl+Z)","indent_desc":"Taanda sisse","outdent_desc":"Taanda v\u00e4lja","numlist_desc":"Korrap\u00e4rane loetelu","bullist_desc":"Ebakorrap\u00e4rane loetelu","justifyfull_desc":"T\u00e4isjoondus","justifyright_desc":"Parem joondus","justifycenter_desc":"Keskjoondus","justifyleft_desc":"Vasak joondus","striketrough_desc":"L\u00e4bijoonitud","help_shortcut":"Vajuta ALT-F10 t\u00f6\u00f6riistariba jaoks. Vajuta ALT-0 abi saamiseks","rich_text_area":"Vormindatud tekstiala","shortcuts_desc":"K\u00e4ttesaadavus spikker",toolbar:"T\u00f6\u00f6riistariba","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/et_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/et_dlg.js
new file mode 100644
index 000000000..2226a12fd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/et_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.advanced_dlg',{"link_list":"Lingi loetelu","link_is_external":"URL, mille sisestasite, tundub olevat v\u00e4line link, kas soovite, et lisataks http:// eesliite?","link_is_email":"URL, mille te sisestasite, tundub olevat emaili aadress, kas soovite, et lisataks mailto: eesliite?","link_titlefield":"Tiitel","link_target_blank":"Ava link uues aknas","link_target_same":"Ava link samas aknas","link_target":"Sihtala","link_url":"Link URL","link_title":"Sisesta/redigeeri link","image_align_right":"Parem","image_align_left":"Vasak","image_align_textbottom":"Teksti p\u00f5hi","image_align_texttop":"Teksti tipp","image_align_bottom":"Alumine","image_align_middle":"Keskmine","image_align_top":"\u00dclemine","image_align_baseline":"Kirjajoondus","image_align":"Reastus","image_hspace":"Horisontaalne vahe","image_vspace":"Vertikaalne vahe","image_dimensions":"Dimensioonid","image_alt":"Pildi kirjeldus","image_list":"Pildi loend","image_border":"Raam","image_src":"Pildi URL","image_title":"Sisestal/redigeeri pilt","charmap_title":"Vali kohandatud t\u00e4hem\u00e4rk","colorpicker_name":"Nimi:","colorpicker_color":"V\u00e4rv:","colorpicker_named_title":"Nimetatud v\u00e4rvid","colorpicker_named_tab":"Nimetatud","colorpicker_palette_title":"Palett v\u00e4rvid","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"V\u00e4rvi korjaja","colorpicker_picker_tab":"Korjaja","colorpicker_title":"Vali v\u00e4rv","code_wordwrap":"S\u00f5na pakkimine","code_title":"HTML koodi redaktor","anchor_name":"Ankru nimi","anchor_title":"Sisesta/redigeeri ankur","about_loaded":"Laetud lisad","about_version":"Versioon","about_author":"Autor","about_plugin":"Lisa","about_plugins":"Lisad","about_license":"Litsents","about_help":"Abi","about_general":"Teave","about_title":"Teave TinyMCE kohta","charmap_usage":"Kasuta navigeerimiseks vasak ja parem nooli.","anchor_invalid":"Palun m\u00e4\u00e4ra korrektne ankru nimi.","accessibility_help":"K\u00e4ttesaadavus spikker","accessibility_usage_title":"\u00dcldine kasutus"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eu.js
new file mode 100644
index 000000000..f19e37d02
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.advanced',{"underline_desc":"Azpimarratua (Ctrl+U)","italic_desc":"Etzana (Ctrl+I)","bold_desc":"Beltza (Ctrl+B)",dd:"Definizioa (dd)",dt:"Definizio terminoa (dt) ",samp:"Kode adibidea",code:"Kodea",blockquote:"Zita",h6:"6. goiburua",h5:"5. goiburua",h4:"4. goiburua",h3:"3. goiburua",h2:"2. goiburua",h1:"1. goiburua",pre:"Aurreformateatua",address:"Helbidea",div:"Div",paragraph:"Paragrafoa",block:"Formatua",fontdefault:"Letra-mota","font_size":"Letra-tamaina","style_select":"Estiloak","anchor_delta_height":"Ainguraren altuera","anchor_delta_width":"Ainguraren zabalera","charmap_delta_height":"Karaktere maparen altuera","charmap_delta_width":"Karaktere maparen zabalera","colorpicker_delta_height":"Kolore hautatzailearen altuera","colorpicker_delta_width":"Kolore hautatzailearen zabalera","link_delta_height":"Loturaren altuera","link_delta_width":"Loturaren zabalera","image_delta_height":"Irudiaren altuera","image_delta_width":"Irudiaren zabalera","more_colors":"Kolore gehiago","toolbar_focus":"Tresnaren botoietara joan - Alt+Q, Editorera joan - Alt-Z, Elementuaren bidera joan - Alt-X",newdocument:"Eduki guztia kendu nahi duzu?",path:"Bidea","clipboard_msg":"Kopiatu/Ebaki/Itsatsi ez dago Mozilla eta Firefoxen.\nHonen inguruko informazioa nahi duzu?","blockquote_desc":"Zita","help_desc":"Laguntza","newdocument_desc":"Dokumentu berria","image_props_desc":"Irudiaren aukerak","paste_desc":"Itsatsi","copy_desc":"Kopiatu","cut_desc":"Ebaki","anchor_desc":"Aingura txertatu/editatu","visualaid_desc":"Elementu ikustezinak ikustarazi/ezkutatu","charmap_desc":"Karaktere berezia txertatu","backcolor_desc":"Atzeko kolorea aukeratu","forecolor_desc":"Testuaren kolorea aukeratu","custom1_desc":"Nahi duzun deskribapena hemen idatzi","removeformat_desc":"Formatua kendu","hr_desc":"Lerro horizontala gehitu","sup_desc":"Goi-indizea","sub_desc":"Azpi-indizea","code_desc":"HTML kodea editatu","cleanup_desc":"Kode zikina garbitu","image_desc":"Irudia txertatu/editatu","unlink_desc":"Lotura kendu","link_desc":"Lotura txertatu/editatu","redo_desc":"Berregin (Ctrl+Y)","undo_desc":"Desegin (Ctrl+Z)","indent_desc":"Koska gehitu","outdent_desc":"Koska kendu","numlist_desc":"Zerrenda ordenatua","bullist_desc":"Zerrenda","justifyfull_desc":"Testua justifikatu","justifyright_desc":"Eskuinean alineatu","justifycenter_desc":"Erdian zentratu","justifyleft_desc":"Ezkerrean alineatu","striketrough_desc":"Gainetik marra duena","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eu_dlg.js
new file mode 100644
index 000000000..010174841
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/eu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.advanced_dlg',{"link_list":"Lotura zerrenda","link_is_external":"Sartutako helbideak kanpoko webgune batena dirudi, aurretik http:// gehitzea nahi duzu?","link_is_email":"Sartutako helbideak e-posta bat dirudi, aurretik mailto: gehitzea nahi duzu?","link_titlefield":"Izenburua","link_target_blank":"Lotura leiho berrian ireki","link_target_same":"Lotura leiho berean ireki","link_target":"Helburua","link_url":"Loturaren URLa","link_title":"Lotura txertatu/editatu","image_align_right":"Eskuinean","image_align_left":"Ezkerrean","image_align_textbottom":"Testua behean","image_align_texttop":"Testua goian","image_align_bottom":"Behean","image_align_middle":"Tartean","image_align_top":"Goian","image_align_baseline":"Oinarriko marra","image_align":"Alineazioa","image_hspace":"Tarte horizontala","image_vspace":"Tarte bertikala","image_dimensions":"Tamaina","image_alt":"Irudiaren deskribapena","image_list":"Irudi zerrenda","image_border":"Inguruko marra","image_src":"Irudiaren URL helbidea","image_title":"Irudia txertatu/editatu","charmap_title":"Karaktere berezia aukeratu","colorpicker_name":"Izena:","colorpicker_color":"Kolorea:","colorpicker_named_title":"Izendun koloreak","colorpicker_named_tab":"Izendunak","colorpicker_palette_title":"Kolore paleta","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Kolore aukeratzailea","colorpicker_picker_tab":"Aukeratu","colorpicker_title":"Kolorea aukeratu","code_wordwrap":"Itzulbiratu","code_title":"HTML kodearen editorea","anchor_name":"Ainguraren izena","anchor_title":"Aingura txertatu/editatu","about_loaded":"Kargatutako gehigarriak","about_version":"Bertsioa","about_author":"Egilea","about_plugin":"Gehiagarria","about_plugins":"Gehigarriak","about_license":"Lizentzia","about_help":"Laguntza","about_general":"Honi buruz","about_title":"TinyMCEri buruz","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fa.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fa.js
new file mode 100644
index 000000000..94af922b4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fa.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.advanced',{"underline_desc":"\u0645\u062a\u0646 \u0632\u06cc\u0631 \u062e\u0637 \u062f\u0627\u0631 (Ctrl+U)","italic_desc":"\u0645\u062a\u0646 \u0645\u0648\u0631\u0628 (Ctrl+I)","bold_desc":"\u0645\u062a\u0646 \u0636\u062e\u06cc\u0645 (Ctrl+B)",dd:"\u062a\u0639\u0631\u06cc\u0641 \u062a\u0648\u0636\u06cc\u062d",dt:"\u062a\u0639\u0631\u06cc\u0641 \u0648\u0627\u0698\u0647 ",samp:"\u0646\u0645\u0648\u0646\u0647 \u06a9\u062f",code:"\u06a9\u062f",blockquote:"\u0628\u0644\u0648\u06a9 \u0646\u0642\u0644 \u0642\u0648\u0644",h6:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc 6",h5:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc 5",h4:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc 4",h3:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc 3",h2:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc 2",h1:"\u0639\u0646\u0648\u0627\u0646 \u06af\u0630\u0627\u0631\u06cc \u06f1",pre:"\u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc \u0634\u062f\u0647 \u0627\u0632 \u0642\u0628\u0644",address:"\u0622\u062f\u0631\u0633",div:"Div",paragraph:"\u067e\u0627\u0631\u0627\u06af\u0631\u0627\u0641",block:"\u0642\u0627\u0644\u0628",fontdefault:"\u0646\u0648\u0639 \u0642\u0644\u0645","font_size":"\u0627\u0646\u062f\u0627\u0632\u0647 \u0642\u0644\u0645","style_select":"\u0627\u0633\u062a\u0627\u06cc\u0644 \u0647\u0627","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"\u0631\u0646\u06af \u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631","toolbar_focus":"\u067e\u0631\u0634 \u0628\u0647 \u062f\u06a9\u0645\u0647 \u0647\u0627\u06cc \u0627\u0628\u0632\u0627\u0631 - Alt+Q \u060c \u067e\u0631\u0634 \u0628\u0647 \u0648\u06cc\u0631\u0627\u06cc\u0634\u06af\u0631 - Alt-Z \u060c \u067e\u0631\u0634 \u0628\u0647 \u0645\u0633\u06cc\u0631 \u0639\u0646\u0635\u0631 - Alt-X",newdocument:"\u0622\u06cc\u0627 \u0634\u0645\u0627 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u062a\u0645\u0627\u0645\u06cc \u0645\u062d\u062a\u0648\u0627 \u0631\u0627 \u067e\u0627\u06a9 \u06a9\u0646\u06cc\u062f\u061f",path:"\u0645\u0633\u06cc\u0631","clipboard_msg":"\u06a9\u067e\u06cc(Copy)/\u0628\u0631\u0634 (Cut)/\u0686\u0633\u0628\u0627\u0646\u062f\u0646 (Paste) \u062f\u0631 Mozilla \u0648 Firefox \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633 \u0646\u0645\u06cc \u0628\u0627\u0634\u062f.\\r\n\u0622\u06cc\u0627 \u0634\u0645\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0631\u0628\u0627\u0631\u0647 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f\u061f","blockquote_desc":"\u0628\u0644\u0648\u06a9 \u0646\u0642\u0644 \u0642\u0648\u0644","help_desc":"\u0631\u0627\u0647\u0646\u0645\u0627","newdocument_desc":"\u0633\u0646\u062f \u062c\u062f\u06cc\u062f","image_props_desc":"\u0645\u0634\u062e\u0635\u0627\u062a \u062a\u0635\u0648\u06cc\u0631","paste_desc":"\u0686\u0633\u0628\u0627\u0646\u062f\u0646 (Paste)","copy_desc":"\u06a9\u067e\u06cc (Copy)","cut_desc":"\u0628\u0631\u0634 (Cut)","anchor_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u0646\u06af\u0631","visualaid_desc":"\u0646\u0645\u0627\u06cc\u0634/\u0639\u062f\u0645 \u0646\u0645\u0627\u06cc\u0634 \u0639\u0646\u0627\u0635\u0631 \u062e\u0637\u0648\u0637 \u0631\u0627\u0647\u0646\u0645\u0627/\u063a\u06cc\u0631 \u0642\u0627\u0628\u0644 \u0646\u0645\u0627\u06cc\u0627\u0646","charmap_desc":"\u062f\u0631\u062c \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0648\u06cc\u0698\u0647","backcolor_desc":"\u0627\u0646\u062a\u062e\u0627\u0628 \u0631\u0646\u06af \u0632\u0645\u06cc\u0646\u0647","forecolor_desc":"\u0627\u0646\u062a\u062e\u0627\u0628 \u0631\u0646\u06af \u0645\u062a\u0646","custom1_desc":"\u062a\u0648\u0636\u06cc\u062d \u0633\u0641\u0627\u0631\u0634\u06cc \u0634\u0645\u0627 \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627","removeformat_desc":"\u062d\u0630\u0641 \u0642\u0627\u0644\u0628 \u0628\u0646\u062f\u06cc","hr_desc":"\u062f\u0631\u062c \u062e\u0637 \u0627\u0641\u0642\u06cc","sup_desc":"\u0628\u0627\u0644\u0627 \u0646\u0648\u06cc\u0633","sub_desc":"\u067e\u0627\u06cc\u06cc\u0646 \u0646\u0648\u06cc\u0633","code_desc":"\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0633\u0648\u0631\u0633 HTML","cleanup_desc":"\u067e\u0627\u06a9 \u0633\u0627\u0632\u06cc \u06a9\u062f \u0647\u0627\u06cc \u0628\u0647\u0645 \u062e\u0648\u0631\u062f\u0647","image_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631","unlink_desc":"\u063a\u06cc\u0631 \u0644\u06cc\u0646\u06a9 \u06a9\u0631\u062f\u0646","link_desc":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u06cc\u0646\u06a9","redo_desc":"\u0631\u0641\u062a\u0646 \u0628\u0647 \u0639\u0645\u0644 \u0628\u0639\u062f (Ctrl Y)","undo_desc":"\u0628\u0631\u06af\u0634\u062a \u0628\u0647 \u0639\u0645\u0644 \u0642\u0628\u0644 (Ctrl Z)","indent_desc":"\u062a\u0648\u0631\u0641\u062a\u06af\u06cc","outdent_desc":"\u0628\u06cc\u0631\u0648\u0646 \u0622\u0645\u062f\u06af\u06cc","numlist_desc":"\u0644\u06cc\u0633\u062a \u0645\u0631\u062a\u0628","bullist_desc":"\u0644\u06cc\u0633\u062a \u0646\u0627\u0645\u0631\u062a\u0628","justifyfull_desc":"\u0647\u0645 \u062a\u0631\u0627\u0632 \u06a9\u0631\u062f\u0646","justifyright_desc":"\u062a\u0631\u0627\u0632 \u0631\u0627\u0633\u062a","justifycenter_desc":"\u062a\u0631\u0627\u0632 \u0648\u0633\u0637","justifyleft_desc":"\u062a\u0631\u0627\u0632 \u0686\u067e","striketrough_desc":"\u062e\u0637 \u0648\u0633\u0637","help_shortcut":"\u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT-F10 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631 \u0628\u0641\u0634\u0627\u0631\u06cc\u062f. \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc ALT-0 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0631\u0627\u0647\u0646\u0645\u0627","rich_text_area":"\u0645\u062a\u0646 \u063a\u0646\u06cc","shortcuts_desc":"\u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc",toolbar:"\u0646\u0648\u0627\u0631 \u0627\u0628\u0632\u0627\u0631"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fa_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fa_dlg.js
new file mode 100644
index 000000000..3fa6a8a77
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fa_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.advanced_dlg',{"link_list":"\u0644\u06cc\u0633\u062a \u0644\u06cc\u0646\u06a9","link_is_external":"\u0622\u062f\u0631\u0633\u06cc \u06a9\u0647 \u0634\u0645\u0627 \u0648\u0627\u0631\u062f \u0646\u0645\u0648\u062f\u0647 \u0627\u06cc\u062f \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0622\u06cc\u062f \u06a9\u0647 \u0644\u06cc\u0646\u06a9 \u062e\u0627\u0631\u062c\u06cc \u0645\u06cc \u0628\u0627\u0634\u062f \u060c \u0622\u06cc\u0627 \u0645\u0627\u06cc\u0644\u06cc\u062f \u062a\u0627 \u067e\u06cc\u0634\u0648\u0646\u062f \u0644\u0627\u0632\u0645\u0647 //:http \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f\u061f","link_is_email":"\u0622\u062f\u0631\u0633\u06cc \u06a9\u0647 \u0634\u0645\u0627 \u0648\u0627\u0631\u062f \u0646\u0645\u0648\u062f\u0647 \u0627\u06cc\u062f \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0622\u06cc\u062f \u06a9\u0647 \u06cc\u06a9 \u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644 \u0645\u06cc \u0628\u0627\u0634\u062f \u060c \u0622\u06cc\u0627 \u0645\u0627\u06cc\u0644\u06cc\u062f \u062a\u0627 \u067e\u06cc\u0634\u0648\u0646\u062f \u0627\u062c\u0628\u0627\u0631\u06cc \u0644\u0627\u0632\u0645\u0647 :mailto \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u0646\u0645\u0627\u0626\u06cc\u062f\u061f","link_titlefield":"\u0639\u0646\u0648\u0627\u0646","link_target_blank":"\u0628\u0627\u0632 \u0634\u062f\u0646 \u0644\u06cc\u0646\u06a9 \u062f\u0631 \u06cc\u06a9 \u067e\u0646\u062c\u0631\u0647 \u062c\u062f\u06cc\u062f","link_target_same":"\u0628\u0627\u0632\u0634\u062f\u0646 \u0644\u06cc\u0646\u06a9 \u062f\u0631 \u0647\u0645\u0627\u0646 \u067e\u0646\u062c\u0631\u0647","link_target":"\u0645\u0642\u0635\u062f (Target)","link_url":"\u0622\u062f\u0631\u0633 \u0644\u06cc\u0646\u06a9","link_title":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u06cc\u0646\u06a9","image_align_right":"\u0631\u0627\u0633\u062a","image_align_left":"\u0686\u067e","image_align_textbottom":"\u067e\u0627\u06cc\u06cc\u0646 \u0645\u062a\u0646","image_align_texttop":"\u0628\u0627\u0644\u0627 \u0645\u062a\u0646","image_align_bottom":"\u067e\u0627\u06cc\u06cc\u0646","image_align_middle":"\u0648\u0633\u0637","image_align_top":"\u0628\u0627\u0644\u0627","image_align_baseline":"\u062e\u0637 \u067e\u0627\u06cc\u0647","image_align":"\u062a\u0631\u0627\u0632","image_hspace":"\u0641\u0627\u0635\u0644\u0647 \u0627\u0641\u0642\u06cc","image_vspace":"\u0641\u0627\u0635\u0644\u0647 \u0639\u0645\u0648\u062f\u06cc","image_dimensions":"\u0627\u0628\u0639\u0627\u062f","image_alt":"\u062a\u0648\u0636\u06cc\u062d \u062a\u0635\u0648\u06cc\u0631","image_list":"\u0644\u06cc\u0633\u062a \u062a\u0635\u0648\u06cc\u0631","image_border":"\u062d\u0627\u0634\u06cc\u0647","image_src":"\u0622\u062f\u0631\u0633 \u062a\u0635\u0648\u06cc\u0631","image_title":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u062a\u0635\u0648\u06cc\u0631","charmap_title":"\u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0648\u06cc\u0698\u0647","colorpicker_name":"\u0646\u0627\u0645:","colorpicker_color":"\u0631\u0646\u06af:","colorpicker_named_title":"\u0631\u0646\u06af \u0647\u0627\u06cc \u0646\u0627\u0645 \u062f\u0627\u0631","colorpicker_named_tab":"\u0646\u0627\u0645 \u062f\u0627\u0631","colorpicker_palette_title":"\u0631\u0646\u06af \u0647\u0627\u06cc \u0627\u0644\u06af\u0648","colorpicker_palette_tab":"\u0627\u0644\u06af\u0648","colorpicker_picker_title":"\u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0646\u062f\u0647 \u0631\u0646\u06af","colorpicker_picker_tab":"\u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u0646\u062f\u0647","colorpicker_title":"\u0627\u0646\u062a\u062e\u0627\u0628 \u06cc\u06a9 \u0631\u0646\u06af","code_wordwrap":"\u0634\u06a9\u0633\u062a\u0646 \u062e\u0637\u0648\u0637","code_title":"\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0633\u0648\u0631\u0633 HTML","anchor_name":"\u0646\u0627\u0645 \u0644\u0646\u06af\u0631 (Anchor)","anchor_title":"\u062f\u0631\u062c/\u0648\u06cc\u0631\u0627\u06cc\u0634 \u0644\u0646\u06af\u0631 (Anchor)","about_loaded":"\u0627\u0644\u062d\u0627\u0642\u0627\u062a \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647","about_version":"\u0646\u0633\u062e\u0647","about_author":"\u0645\u0624\u0644\u0641","about_plugin":"\u0627\u0644\u062d\u0627\u0642\u0647","about_plugins":"\u0627\u0644\u062d\u0627\u0642\u0627\u062a","about_license":"\u0645\u062c\u0648\u0632","about_help":"\u0631\u0627\u0647\u0646\u0645\u0627","about_general":"\u062f\u0631\u0628\u0627\u0631\u0647","about_title":"\u062f\u0631\u0628\u0627\u0631\u0647 TinyMCE","charmap_usage":"\u0627\u0632 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc \u0686\u067e \u0648 \u0631\u0627\u0633\u062a \u062c\u0647\u062a \u067e\u06cc\u0645\u0627\u06cc\u0634 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f","anchor_invalid":"\u0644\u0637\u0641\u0627 \u06cc\u06a9 \u0646\u0627\u0645 \u0645\u0639\u062a\u0628\u0631 \u0628\u0631\u0627\u06cc \u0644\u0646\u06af\u0631 (anchor) \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f.","accessibility_help":"\u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc","accessibility_usage_title":"\u0637\u0631\u06cc\u0642\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0639\u0645\u0648\u0645\u06cc","invalid_color_value":"\u06a9\u062f \u0631\u0646\u06af \u0646\u0627\u0645\u0639\u062a\u0628\u0631"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fi.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fi.js
new file mode 100644
index 000000000..2edb8f6a4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.advanced',{"underline_desc":"Alleviivattu (Ctrl+U)","italic_desc":"Kursivoitu (Ctrl+I)","bold_desc":"Lihavoitu (Ctrl+B)",dd:"M\u00e4\u00e4rittelyn kuvaus",dt:"M\u00e4\u00e4rittelyn ehto ",samp:"Koodiesimerkki",code:"Koodi",blockquote:"Pitk\u00e4 lainaus",h6:"Otsikko 6",h5:"Otsikko 5",h4:"Otsikko 4",h3:"Otsikko 3",h2:"Otsikko 2",h1:"Otsikko 1",pre:"Esimuotoiltu (pre)",address:"Osoite",div:"Div",paragraph:"Kappale",block:"Muotoilu",fontdefault:"Kirjasin","font_size":"Kirjasinkoko","style_select":"Tyylit","more_colors":"Enemm\u00e4n v\u00e4rej\u00e4","toolbar_focus":"Siirry ty\u00f6kaluihin - Alt+Q, Siirry tekstieditoriin - Alt-Z, Siirry elementin polkuun - Alt-X",newdocument:"Haluatko varmasti tyhjent\u00e4\u00e4 kaiken sis\u00e4ll\u00f6n?",path:"Polku","clipboard_msg":"Kopioi/Leikkaa/Liit\u00e4 -painikkeet eiv\u00e4t toimi Mozilla ja Firefox -selaimilla. Voit kuitenkin k\u00e4ytt\u00e4\u00e4 n\u00e4pp\u00e4inyhdistelmi\u00e4 kopioimiseen (Ctrl+C), leikkaamiseen (Ctrl+X) ja liitt\u00e4miseen (Ctrl+V). Haluatko lis\u00e4\u00e4 tietoa?","blockquote_desc":"Pitk\u00e4 lainaus","help_desc":"Ohje","newdocument_desc":"Uusi tiedosto","image_props_desc":"Kuvan ominaisuudet","paste_desc":"Liit\u00e4","copy_desc":"Kopioi","cut_desc":"Leikkaa","anchor_desc":"Lis\u00e4\u00e4/Muokkaa ankkuri","visualaid_desc":"Suuntaviivat/N\u00e4kym\u00e4tt\u00f6m\u00e4t elementit","charmap_desc":"Lis\u00e4\u00e4 erikoismerkki","backcolor_desc":"Valitse taustan v\u00e4ri","forecolor_desc":"Valitse tekstin v\u00e4ri","custom1_desc":"Oma kuvauksesi t\u00e4h\u00e4n","removeformat_desc":"Poista muotoilu","hr_desc":"Lis\u00e4\u00e4 vaakasuora viivain","sup_desc":"Yl\u00e4indeksi","sub_desc":"Alaindeksi","code_desc":"Muokkaa HTML-koodia","cleanup_desc":"Siisti sekainen koodi","image_desc":"Lis\u00e4\u00e4/muuta kuva","unlink_desc":"Poista linkki","link_desc":"Lis\u00e4\u00e4/muuta linkki","redo_desc":"Tee uudelleen (Ctrl+Y)","undo_desc":"Peru (Ctrl+Z)","indent_desc":"Sisenn\u00e4","outdent_desc":"Loitonna","numlist_desc":"J\u00e4rjestetty lista","bullist_desc":"J\u00e4rjest\u00e4m\u00e4t\u00f6n lista","justifyfull_desc":"Tasattu","justifyright_desc":"Tasaus oikealle","justifycenter_desc":"Keskitetty","justifyleft_desc":"Tasaus vasemmalle","striketrough_desc":"Yliviivattu","help_shortcut":"Paina ALT F10 n\u00e4hd\u00e4ksesi ty\u00f6kalurivin. Paina ALT-0 n\u00e4hd\u00e4ksesi ohjeen.","rich_text_area":"Rikastettu tekstialue","shortcuts_desc":"Saavutettavuusohje",toolbar:"Ty\u00f6kalurivi","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fi_dlg.js
new file mode 100644
index 000000000..89c0b0bec
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.advanced_dlg',{"link_list":"Linkkilista","link_is_external":"Antamasi osoite n\u00e4ytt\u00e4\u00e4 johtavan ulkopuoliselle sivustolle. Haluatko lis\u00e4t\u00e4 linkin eteen http://-etuliitteen? (suositus)","link_is_email":"Antamasi osoite n\u00e4ytt\u00e4\u00e4 olevan s\u00e4hk\u00f6postiosoite. Haluatko lis\u00e4t\u00e4 siihen mailto:-etuliitteen?","link_titlefield":"Otsikko","link_target_blank":"Avaa linkki uuteen ikkunaan","link_target_same":"Avaa linkki samassa ikkunassa","link_target":"Kohde","link_url":"Linkin osoite","link_title":"Lis\u00e4\u00e4/muuta linkki","image_align_right":"Oikealle","image_align_left":"Vasemmalle","image_align_textbottom":"Tekstin alaosaan","image_align_texttop":"Tekstin yl\u00e4osaan","image_align_bottom":"Alas","image_align_middle":"Keskelle","image_align_top":"Yl\u00f6s","image_align_baseline":"Tekstin tasossa","image_align":"Tasaus","image_hspace":"Vaakasuuntainen tila","image_vspace":"Pystysuuntainen tila","image_dimensions":"Mitat","image_alt":"Kuvan kuvaus","image_list":"Kuvalista","image_border":"Reunus","image_src":"Kuvan osoite","image_title":"Lis\u00e4\u00e4/muokkaa kuvaa","charmap_title":"Valitse erikoismerkki","colorpicker_name":"Nimi:","colorpicker_color":"V\u00e4ri:","colorpicker_named_title":"Nimetyt v\u00e4rit","colorpicker_named_tab":"Nimetty","colorpicker_palette_title":"V\u00e4ripaletti","colorpicker_palette_tab":"Paletti","colorpicker_picker_title":"V\u00e4rin valitsin","colorpicker_picker_tab":"Valitsin","colorpicker_title":"Valitse v\u00e4ri","code_wordwrap":"Automaattinen rivinvaihto","code_title":"HTML-koodin muokkaus","anchor_name":"Ankkurin nimi","anchor_title":"Liit\u00e4/muokkaa ankkuria","about_loaded":"Ladatut lis\u00e4osat","about_version":"Versio","about_author":"Kirjoittaja","about_plugin":"Lis\u00e4osa","about_plugins":"Lis\u00e4osat","about_license":"Lisenssi","about_help":"Ohje","about_general":"Tietoja","about_title":"Tietoja TinyMCE:st\u00e4","charmap_usage":"K\u00e4yt\u00e4 vasenta ja oikeata nuolin\u00e4pp\u00e4int\u00e4 navigointiin.","anchor_invalid":"Ole hyv\u00e4 ja anna hyv\u00e4ksytty ankkurin nimi.","accessibility_help":"Saavutettavuusohje","accessibility_usage_title":"Yleinen k\u00e4ytt\u00f6","invalid_color_value":"Virheellinen v\u00e4riarvo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fr.js
new file mode 100644
index 000000000..1e91abbc1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.advanced',{"underline_desc":"Soulign\u00e9 (Ctrl+U)","italic_desc":"Italique (Ctrl+I)","bold_desc":"Gras (Ctrl+B)",dd:"D\u00e9finition du terme",dt:"Terme \u00e0 d\u00e9finir",samp:"Exemple de code",code:"Code",blockquote:"Bloc de citation",h6:"Titre 6",h5:"Titre 5",h4:"Titre 4",h3:"Titre 3",h2:"Titre 2",h1:"Titre 1",pre:"Pr\u00e9format\u00e9",address:"Adresse",div:"Div",paragraph:"Paragraphe",block:"Format",fontdefault:"Police","font_size":"Taille police","style_select":"Styles","more_colors":"Plus de couleurs","toolbar_focus":"Atteindre les boutons de l\'\u00e9diteur - Alt+Q, Aller \u00e0 l\'\u00e9diteur - Alt-Z, Aller au chemin de l\'\u00e9l\u00e9ment - Alt-X",newdocument:"\u00cates-vous s\u00fbr de vouloir effacer l\'int\u00e9gralit\u00e9 du document ?",path:"Chemin","clipboard_msg":"Les fonctions Copier/Couper/Coller ne sont pas valables sur Mozilla et Firefox.\nSouhaitez-vous avoir plus d\'informations sur ce sujet ?","blockquote_desc":"Citation","help_desc":"Aide","newdocument_desc":"Nouveau document","image_props_desc":"Propri\u00e9t\u00e9s de l\'image","paste_desc":"Coller","copy_desc":"Copier","cut_desc":"Couper","anchor_desc":"Ins\u00e9rer / \u00e9diter une ancre","visualaid_desc":"Activer / d\u00e9sactiver les guides et les \u00e9l\u00e9ments invisibles","charmap_desc":"Ins\u00e9rer des caract\u00e8res sp\u00e9ciaux","backcolor_desc":"Choisir la couleur de surlignage","forecolor_desc":"Choisir la couleur du texte","custom1_desc":"Votre description personnalis\u00e9e ici","removeformat_desc":"Supprimer le formatage","hr_desc":"Ins\u00e9rer un trait horizontal","sup_desc":"Exposant","sub_desc":"Indice","code_desc":"\u00c9diter le code source HTML","cleanup_desc":"Nettoyer le code","image_desc":"Ins\u00e9rer / \u00e9diter l\'image","unlink_desc":"Supprimer le lien","link_desc":"Ins\u00e9rer / \u00e9diter le lien","redo_desc":"R\u00e9tablir (Ctrl+Y)","undo_desc":"Annuler (Ctrl+Z)","indent_desc":"Indenter","outdent_desc":"Retirer l\'indentation","numlist_desc":"Liste num\u00e9rot\u00e9e","bullist_desc":"Liste \u00e0 puces","justifyfull_desc":"Justifi\u00e9","justifyright_desc":"Align\u00e9 \u00e0 droite","justifycenter_desc":"Centr\u00e9","justifyleft_desc":"Align\u00e9 \u00e0 gauche","striketrough_desc":"Barr\u00e9","help_shortcut":"Faites ALT-F10 pour acc\u00e9der \u00e0 la barre d\'outils. Faites ALT-0 pour acc\u00e9der \u00e0 l\'aide","rich_text_area":"Zone de texte enrichi","shortcuts_desc":"Aides \u00e0 l\'accessibilit\u00e9",toolbar:"Barre d\'outils","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fr_dlg.js
new file mode 100644
index 000000000..97b6b5292
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/fr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.advanced_dlg',{"link_list":"Liste de liens","link_is_external":"L\'URL que vous avez saisie semble \u00eatre une adresse web externe. Souhaitez-vous ajouter le pr\u00e9fixe \u00ab http:// \u00bb ?","link_is_email":"L\'URL que vous avez saisie semble \u00eatre une adresse e-mail, souhaitez-vous ajouter le pr\u00e9fixe \u00ab mailto: \u00bb ?","link_titlefield":"Titre","link_target_blank":"Ouvrir dans une nouvelle fen\u00eatre","link_target_same":"Ouvrir dans la m\u00eame fen\u00eatre","link_target":"Cible","link_url":"URL du lien","link_title":"Ins\u00e9rer / \u00e9diter un lien","image_align_right":"Droite (flottant)","image_align_left":"Gauche (flottant)","image_align_textbottom":"Texte en bas","image_align_texttop":"Texte en haut","image_align_bottom":"En bas","image_align_middle":"Au milieu","image_align_top":"En haut","image_align_baseline":"Normal","image_align":"Alignement","image_hspace":"Espacement horizontal","image_vspace":"Espacement vertical","image_dimensions":"Dimensions","image_alt":"Description de l\'image","image_list":"Liste d\'images","image_border":"Bordure","image_src":"URL de l\'image","image_title":"Ins\u00e9rer / \u00e9diter une image","charmap_title":"Choisir le caract\u00e8re \u00e0 ins\u00e9rer","colorpicker_name":"Nom :","colorpicker_color":"Couleur :","colorpicker_named_title":"Couleurs nomm\u00e9es","colorpicker_named_tab":"Noms","colorpicker_palette_title":"Couleurs de la palette","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Nuancier","colorpicker_picker_tab":"Nuancier","colorpicker_title":"Choisir une couleur","code_wordwrap":"Retour \u00e0 la ligne","code_title":"\u00c9diteur de source HTML","anchor_name":"Nom de l\'ancre","anchor_title":"Ins\u00e9rer / \u00e9diter une ancre","about_loaded":"Plugins charg\u00e9s","about_version":"Version","about_author":"Auteur","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Licence","about_help":"Aide","about_general":"\u00c0 propos","about_title":"\u00c0 propos de TinyMCE","charmap_usage":"Utilisez les fl\u00e8ches gauche et droite pour naviguer.","anchor_invalid":"Veuillez sp\u00e9cifier un nom d\'ancre valide.","accessibility_help":"Aide \u00e0 l\'accessibilit\u00e9","accessibility_usage_title":"Usage g\u00e9n\u00e9ral","invalid_color_value":"Valeur de couleur invalide"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gl.js
new file mode 100644
index 000000000..cf00430ee
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.advanced',{"underline_desc":"Subli\u00f1ado (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negrita (Ctrl+B)",dd:"Descripci\u00f3n de definici\u00f3n",dt:"Termo de definici\u00f3n",samp:"Mostra de c\u00f3digo",code:"C\u00f3digo",blockquote:"Bloque de cita",h6:"Encabezamento 6",h5:"Encabezamento 5",h4:"Encabezamento 4",h3:"Encabezamento 3",h2:"Encabezamento 2",h1:"Encabezamento 1",pre:"Pre-formateado",address:"Enderezo",div:"Div",paragraph:"P\u00e1rrafo",block:"Formato",fontdefault:"Fonte","font_size":"Tama\u00f1o","style_select":"Estilos","more_colors":"M\u00e1is cores","toolbar_focus":"Ir \u00f3s bot\u00f3ns de ferramentas - Alt+Q, Ir \u00f3 editor - Alt-Z, Ir \u00e1 ruta do elemento - Alt-X",newdocument:"\u00bfSeguro que desexa limpar todo o contido?",path:"Ruta","clipboard_msg":"Copiar/Cortar/Pegar non est\u00e1 disponible en Mozilla e Firefox.\n\u00bfDesexa obter mais informaci\u00f3n sobre de este asunto?","blockquote_desc":"Cita","help_desc":"Axuda","newdocument_desc":"Novo documento","image_props_desc":"Propiedades de imaxe","paste_desc":"Pegar","copy_desc":"Copiar","cut_desc":"Cortar","anchor_desc":"Insertar/editar \u00e1ncora","visualaid_desc":"Mostrar/ocultar li\u00f1a de gu\u00eda/elementos invisibres","charmap_desc":"Insertar caracteres persoalizados","backcolor_desc":"Seleccionar cor do fondo","forecolor_desc":"Seleccionar cor do texto","custom1_desc":"A s\u00faa descripci\u00f3n persoal aqu\u00ed","removeformat_desc":"quitar formato","hr_desc":"Insertar regra horizontal","sup_desc":"Super\u00edndice","sub_desc":"Sub\u00edndice","code_desc":"Editar c\u00f3digo HTML","cleanup_desc":"Limpiar lixo no c\u00f3digo","image_desc":"Insertar/editar imaxe","unlink_desc":"Quitar hiperv\u00ednculo","link_desc":"Insertar/editar hiperv\u00ednculo","redo_desc":"Re-facer (Ctrl+Y)","undo_desc":"Desfacer (Ctrl+Z)","indent_desc":"Aumentar sangr\u00eda","outdent_desc":"Reducir sangr\u00eda","numlist_desc":"Lista ordenada","bullist_desc":"Lista desordenada","justifyfull_desc":"Xustificar","justifyright_desc":"Ali\u00f1ar \u00e1 dereita","justifycenter_desc":"Ali\u00f1ar \u00f3 centro","justifyleft_desc":"Ali\u00f1ar \u00e1 esquerda","striketrough_desc":"Tachado","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gl_dlg.js
new file mode 100644
index 000000000..279bc2993
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.advanced_dlg',{"link_list":"Lista de hiperv\u00ednculos","link_is_external":"A URL introducida semella ser un v\u00ednculo externo, \u00bfDesexa engadi-lo prefixo necesario http://?","link_is_email":"A URL introducida semella ser un enderezo de e-mail, \u00bfDesexa engadi-lo prefixo necesario mailto:?","link_titlefield":"T\u00edtulo","link_target_blank":"Abrir v\u00ednculo nunha vent\u00e1 nova","link_target_same":"Abrir v\u00ednculo na mesma vent\u00e1","link_target":"Obxetivo","link_url":"URL do enlace","link_title":"Insertar/editar enlace","image_align_right":"Dereita","image_align_left":"Esquerda","image_align_textbottom":"Texto abaixo","image_align_texttop":"Texto arriba","image_align_bottom":"Abaixo","image_align_middle":"Medio","image_align_top":"Arriba","image_align_baseline":"Li\u00f1a base","image_align":"Ali\u00f1aci\u00f3n","image_hspace":"Espacio horizontal","image_vspace":"Espacio vertical","image_dimensions":"Dimensi\u00f3n","image_alt":"Descripci\u00f3n da imaxe","image_list":"Lista de Imaxes","image_border":"Borde","image_src":"URL da imaxe","image_title":"Insertar/editar imaxe","charmap_title":"Seleccionar caracter personalizado","colorpicker_name":"Nome:","colorpicker_color":"Cor:","colorpicker_named_title":"Cores nomeados","colorpicker_named_tab":"Nomeados","colorpicker_palette_title":"Paleta de cores","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Selector de cores","colorpicker_picker_tab":"Selector","colorpicker_title":"Seleccionar cor","code_wordwrap":"Cortar li\u00f1as autom\u00e1ticamente","code_title":"Editor HTML","anchor_name":"Nome da \u00e1ncora","anchor_title":"Insertar/editar \u00e1ncora","about_loaded":"Comprementos cargados","about_version":"Versi\u00f3n","about_author":"Autor","about_plugin":"Compremento","about_plugins":"Comprementos","about_license":"Licencia","about_help":"Axuda","about_general":"Sobre","about_title":"Sobre TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gu.js
new file mode 100644
index 000000000..8f219813c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gu_dlg.js
new file mode 100644
index 000000000..629cfb3dd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/gu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/he.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/he.js
new file mode 100644
index 000000000..2c50a4b61
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/he.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.advanced',{"underline_desc":"\u05e7\u05d5 \u05ea\u05d7\u05ea\u05d5\u05df (Ctrl+U)","italic_desc":"\u05e0\u05d8\u05d5\u05d9 (Ctrl+I)","bold_desc":"\u05de\u05d5\u05d3\u05d2\u05e9 (Ctrl+B)",dd:"\u05d4\u05d2\u05d3\u05e8\u05ea \u05d4\u05de\u05d5\u05e9\u05d2",dt:"\u05de\u05d5\u05e9\u05d2",samp:"\u05d3\u05d5\u05d2\u05de\u05ea \u05e7\u05d5\u05d3",code:"\u05e7\u05d5\u05d3",blockquote:"\u05e6\u05d9\u05d8\u05d5\u05d8 \u05e7\u05d8\u05e2",h6:"\u05db\u05d5\u05ea\u05e8\u05ea 6",h5:"\u05db\u05d5\u05ea\u05e8\u05ea 5",h4:"\u05db\u05d5\u05ea\u05e8\u05ea 4",h3:"\u05db\u05d5\u05ea\u05e8\u05ea 3",h2:"\u05db\u05d5\u05ea\u05e8\u05ea 2",h1:"\u05db\u05d5\u05ea\u05e8\u05ea 1",pre:"Preformatted",address:"\u05db\u05ea\u05d5\u05d1\u05ea",div:"Div",paragraph:"\u05e4\u05e1\u05e7\u05d4",block:"\u05e2\u05d9\u05e6\u05d5\u05d1",fontdefault:"\u05d2\u05d5\u05e4\u05df","font_size":"\u05d2\u05d5\u05d3\u05dc \u05d2\u05d5\u05e4\u05df","style_select":"\u05e1\u05d2\u05e0\u05d5\u05e0\u05d5\u05ea","more_colors":"\u05e2\u05d5\u05d3 \u05e6\u05d1\u05e2\u05d9\u05dd","toolbar_focus":"\u05d4\u05e2\u05d1\u05e8\u05d4 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05db\u05dc\u05d9\u05dd - Alt+Q, \u05d4\u05e2\u05d1\u05e8\u05d4 \u05dc\u05de\u05e2\u05d1\u05d3 \u05ea\u05de\u05dc\u05d9\u05dc\u05d9\u05dd - Alt-Z, \u05d4\u05e2\u05d1\u05e8\u05d4 \u05dc\u05e0\u05ea\u05d9\u05d1 \u05d4\u05d0\u05dc\u05de\u05d8\u05d9\u05dd - Alt-X",newdocument:"\u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05de\u05d7\u05d5\u05e7 \u05d0\u05ea \u05db\u05dc \u05d4\u05ea\u05d5\u05db\u05df?",path:"path","clipboard_msg":"\u05d4\u05e2\u05ea\u05e7/\u05d2\u05d6\u05d5\u05e8/\u05d4\u05d3\u05d1\u05e7 \u05dc\u05d0 \u05d6\u05de\u05d9\u05e0\u05d9\u05dd \u05d1 Mozilla \u05d5\u05d1-Firefox.\n \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05e7\u05d1\u05dc \u05de\u05d9\u05d3\u05e2 \u05e0\u05d5\u05e1\u05e3 \u05e2\u05dc \u05d4\u05e0\u05d5\u05e9\u05d0?","blockquote_desc":"\u05e6\u05d9\u05d8\u05d5\u05d8","help_desc":"\u05e2\u05d6\u05e8\u05d4","newdocument_desc":"\u05de\u05e1\u05de\u05da \u05d7\u05d3\u05e9","image_props_desc":"\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9 \u05d4\u05ea\u05de\u05d5\u05e0\u05d4","paste_desc":"\u05d4\u05d3\u05d1\u05e7\u05d4","copy_desc":"\u05d4\u05e2\u05ea\u05e7\u05d4","cut_desc":"\u05d2\u05d6\u05d9\u05e8\u05d4","anchor_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05d9\u05de\u05e0\u05d9\u05d4","visualaid_desc":"\u05d4\u05e6\u05d2\u05d4 \u05d0\u05d5 \u05d4\u05e1\u05ea\u05e8\u05d4 \u05e9\u05dc \u05e1\u05d9\u05de\u05d5\u05e0\u05d9 \u05e2\u05d9\u05e6\u05d5\u05d1","charmap_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e1\u05d9\u05de\u05df","backcolor_desc":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e6\u05d1\u05e2 \u05e8\u05e7\u05e2","forecolor_desc":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e6\u05d1\u05e2 \u05d2\u05d5\u05e4\u05df","custom1_desc":"\u05d4\u05ea\u05d0\u05d5\u05e8 \u05e9\u05dc\u05da \u05db\u05d0\u05d5","removeformat_desc":"\u05d4\u05e1\u05e8\u05ea \u05e2\u05d9\u05e6\u05d5\u05d1","hr_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea \u05e7\u05d5 \u05de\u05e4\u05e8\u05d9\u05d3","sup_desc":"\u05db\u05ea\u05d1 \u05ea\u05d7\u05ea\u05d9","sub_desc":"\u05db\u05ea\u05d1 \u05e2\u05d9\u05dc\u05d9","code_desc":"\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d5\u05d3 HTML","cleanup_desc":"\u05e0\u05d9\u05e7\u05d5\u05d9 \u05e7\u05d5\u05d3","image_desc":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05d3\u05e3 \u05ea\u05de\u05d5\u05e0\u05d4","unlink_desc":"\u05d4\u05e1\u05e8\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","link_desc":"\u05d4\u05d5\u05e1\u05e4\u05ea/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","redo_desc":"\u05d7\u05d6\u05e8\u05d4 \u05e2\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 (Ctrl+Y)","undo_desc":"\u05d1\u05d9\u05d8\u05d5\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 (Ctrl+Z)","indent_desc":"\u05d4\u05e7\u05d8\u05e0\u05ea \u05db\u05e0\u05d9\u05e1\u05d4","outdent_desc":"\u05d4\u05d2\u05d3\u05dc\u05ea \u05db\u05e0\u05d9\u05e1\u05d4","numlist_desc":"\u05de\u05e1\u05e4\u05d5\u05e8","bullist_desc":"\u05ea\u05d1\u05dc\u05d9\u05d8\u05d9\u05dd","justifyfull_desc":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05dc\u05e9\u05e0\u05d9 \u05d4\u05e6\u05d3\u05d3\u05d9\u05dd","justifyright_desc":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8 \u05dc\u05d9\u05de\u05d9\u05df","justifycenter_desc":"\u05de\u05d9\u05e8\u05db\u05d5\u05d6 \u05d8\u05e7\u05e1\u05d8","justifyleft_desc":"\u05d9\u05d9\u05e9\u05d5\u05e8 \u05d8\u05e7\u05e1\u05d8 \u05dc\u05e9\u05de\u05d0\u05dc","striketrough_desc":"\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4","help_shortcut":"\u05dc\u05d7\u05e6/\u05d9 ALT-F10 \u05dc\u05e1\u05e8\u05d2\u05dc \u05d4\u05db\u05dc\u05d9\u05dd. \u05dc\u05d7\u05e6/\u05d9 ALT-0 \u05dc\u05e2\u05d6\u05e8\u05d4","rich_text_area":"\u05d0\u05d6\u05d5\u05e8 \u05e2\u05e8\u05d9\u05db\u05ea \u05d8\u05e7\u05e1\u05d8 \u05e2\u05e9\u05d9\u05e8","shortcuts_desc":"\u05e2\u05d6\u05e8\u05ea \u05d2\u05d9\u05e9\u05d4",toolbar:"\u05e1\u05e8\u05d2\u05dc \u05db\u05dc\u05d9\u05dd","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/he_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/he_dlg.js
new file mode 100644
index 000000000..c27a31a22
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/he_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.advanced_dlg',{"link_list":"\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8\u05d9\u05dd","link_is_external":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d7\u05d9\u05e6\u05d5\u05e0\u05d9 \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea http:// \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?","link_is_email":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4-URL \u05e9\u05d4\u05d5\u05db\u05e0\u05e1\u05d4 \u05d4\u05d9\u05d0 \u05db\u05db\u05dc \u05d4\u05e0\u05e8\u05d0\u05d4 \u05db\u05ea\u05d5\u05d1\u05ea \u05de\u05d9\u05d9\u05dc \u05d4\u05d0\u05dd \u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05d5\u05e1\u05d9\u05e3 \u05d0\u05ea \u05d4\u05e7\u05d9\u05d3\u05d5\u05de\u05ea MAILTO \u05d4\u05e0\u05d3\u05e8\u05e9\u05ea?","link_titlefield":"\u05db\u05d5\u05ea\u05e8\u05ea","link_target_blank":"\u05e4\u05ea\u05d7 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1\u05d7\u05dc\u05d5\u05df \u05d7\u05d3\u05e9","link_target_same":"\u05e4\u05ea\u05d7 \u05e7\u05d9\u05e9\u05d5\u05e8 \u05d1\u05d0\u05d5\u05ea\u05d5 \u05d7\u05dc\u05d5\u05df","link_target":"\u05d9\u05e2\u05d3","link_url":"\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05e7\u05d9\u05e9\u05d5\u05e8","link_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05e7\u05d9\u05e9\u05d5\u05e8","image_align_right":"\u05d9\u05de\u05d9\u05df","image_align_left":"\u05e9\u05de\u05d0\u05dc","image_align_textbottom":"\u05e7\u05e6\u05d4 \u05d4\u05ea\u05d7\u05ea\u05d5\u05df \u05e9\u05dc \u05d4\u05d8\u05e7\u05e1\u05d8","image_align_texttop":"\u05e7\u05e6\u05d4 \u05d4\u05e2\u05dc\u05d9\u05d5\u05df \u05e9\u05dc \u05d4\u05d8\u05e7\u05e1\u05d8","image_align_bottom":"\u05e7\u05e6\u05d4 \u05d4\u05ea\u05d7\u05ea\u05d5\u05df","image_align_middle":"\u05d0\u05de\u05e6\u05e2","image_align_top":"\u05e7\u05e6\u05d4 \u05d4\u05e2\u05dc\u05d9\u05d5\u05df","image_align_baseline":"\u05e7\u05d5 \u05d4\u05d4\u05ea\u05d7\u05dc\u05d4","image_align":"\u05d9\u05d9\u05e9\u05d5\u05e8","image_hspace":"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05d5\u05e4\u05e7\u05d9","image_vspace":"\u05e8\u05d5\u05d5\u05d7 \u05d0\u05e0\u05db\u05d9","image_dimensions":"\u05d2\u05d5\u05d3\u05dc","image_alt":"\u05ea\u05d9\u05d0\u05d5\u05e8","image_list":"\u05e8\u05e9\u05d9\u05de\u05d4","image_border":"\u05d2\u05d1\u05d5\u05dc","image_src":"\u05db\u05ea\u05d5\u05d1\u05ea:","image_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05ea\u05de\u05d5\u05e0\u05d4","charmap_title":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e1\u05d9\u05de\u05df","colorpicker_name":"\u05e9\u05dd:","colorpicker_color":"\u05e6\u05d1\u05e2:","colorpicker_named_title":"\u05e6\u05d1\u05e2\u05d9\u05dd \u05d1\u05e2\u05dc\u05d9 \u05e9\u05de\u05d5\u05ea","colorpicker_named_tab":"\u05e6\u05d1\u05e2\u05d9\u05dd \u05d1\u05e2\u05dc\u05d9 \u05e9\u05de\u05d5\u05ea","colorpicker_palette_title":"\u05dc\u05d5\u05d7 \u05e6\u05d1\u05e2\u05d9\u05dd","colorpicker_palette_tab":"\u05dc\u05d5\u05d7 \u05e6\u05d1\u05e2\u05d9\u05dd","colorpicker_picker_title":"\u05d1\u05d5\u05e8\u05e8 \u05d4\u05e6\u05d1\u05e2\u05d9\u05dd","colorpicker_picker_tab":"\u05d1\u05d5\u05e8\u05e8","colorpicker_title":"\u05d1\u05d7\u05d9\u05e8\u05ea \u05e6\u05d1\u05e2","code_wordwrap":"\u05d2\u05dc\u05d9\u05e9\u05ea \u05d8\u05e7\u05e1\u05d8","code_title":"\u05e2\u05d5\u05e8\u05da \u05d4-HTML","anchor_name":"\u05e9\u05dd \u05d4\u05e1\u05d9\u05de\u05e0\u05d9\u05d4","anchor_title":"\u05d4\u05d5\u05e1\u05e4\u05d4/\u05e2\u05e8\u05d9\u05db\u05ea \u05e1\u05d9\u05de\u05e0\u05d9\u05d4","about_loaded":"\u05ea\u05d5\u05e1\u05e4\u05d5\u05ea \u05e4\u05e2\u05d9\u05dc\u05d5\u05ea","about_version":"\u05d2\u05d9\u05e8\u05e1\u05d4","about_author":"\u05d9\u05d5\u05e6\u05e8","about_plugin":"\u05ea\u05d5\u05e1\u05e4\u05ea","about_plugins":"\u05ea\u05d5\u05e1\u05e4\u05d5\u05ea","about_license":"\u05e8\u05e9\u05d9\u05d5\u05df","about_help":"\u05e2\u05d6\u05e8\u05d4","about_general":"\u05d0\u05d5\u05d3\u05d5\u05ea","about_title":"\u05d0\u05d5\u05d3\u05d5\u05ea TinyMCE","charmap_usage":"\u05d4\u05e9\u05ea\u05de\u05e9/\u05d9 \u05d1\u05d7\u05d9\u05e6\u05d9\u05dd \u05dc\u05e0\u05d9\u05d5\u05d5\u05d8 \u05d9\u05de\u05d9\u05e0\u05d4 \u05d5\u05e9\u05de\u05d0\u05dc\u05d4","anchor_invalid":"\u05e0\u05d0 \u05dc\u05e6\u05d9\u05d9\u05df \u05e9\u05dd \u05d7\u05d5\u05e7\u05d9","accessibility_help":"\u05e2\u05d6\u05e8\u05d4 \u05d1\u05e0\u05d2\u05d9\u05e9\u05d5\u05ea","accessibility_usage_title":"\u05e9\u05d9\u05de\u05d5\u05e9 \u05db\u05dc\u05dc\u05d9","invalid_color_value":"\u05e2\u05e8\u05da \u05d4\u05e6\u05d1\u05e2 \u05dc\u05d0 \u05ea\u05e7\u05d9\u05df"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hi.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hi.js
new file mode 100644
index 000000000..845102ad2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hi_dlg.js
new file mode 100644
index 000000000..023fa2d4c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hr.js
new file mode 100644
index 000000000..50521bce2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.advanced',{"underline_desc":"Podcrtano (Ctrl U)","italic_desc":"Uko\u0161eno (Ctrl I)","bold_desc":"Podebljano (Ctrl B)",dd:"Opis definicije",dt:"Definicija pojma",samp:"Primjer koda",code:"Kod",blockquote:"Citat",h6:"Naslov 6",h5:"Naslov 5",h4:"Naslov 4",h3:"Naslov 3",h2:"Naslov 2",h1:"Naslov 1",pre:"Oblikovano",address:"Adresa",div:"Div",paragraph:"Paragraf",block:"Format",fontdefault:"Vrsta fonta","font_size":"Veli\u010dina fonta","style_select":"Stilovi","more_colors":"Vi\u0161e boja","toolbar_focus":"Prije\u0111i na alatnu traku - Alt Q, prije\u0111i na ure\u0111iva\u010d - Alt-Z, prije\u0111i na putanju elementa - Alt-X",newdocument:"Jeste li sigurni da \u017eelite izbrisati cijeli sadr\u017eaj?",path:"Putanja","clipboard_msg":"Kopiraj/Izre\u017ei/Zalijepi nije dostupno u Mozilla i Firefox preglednicima. Vi\u0161e informacija?","blockquote_desc":"Citiraj","help_desc":"Pomo\u0107","newdocument_desc":"Novi dokument","image_props_desc":"Svojstva slike","paste_desc":"Zalijepi","copy_desc":"Kopiraj","cut_desc":"Izre\u017ei","anchor_desc":"Umetni/uredi sidro","visualaid_desc":"Vodilice/nevidljivi elementi","charmap_desc":"Umetni vlastiti znak","backcolor_desc":"Odaberite boju pozadine","forecolor_desc":"Odaberite boju teksta","custom1_desc":"Vlastiti opis ovdje","removeformat_desc":"Poni\u0161ti oblikovanje","hr_desc":"Umetni vodoravnu crtu","sup_desc":"Eksponent","sub_desc":"Indeks","code_desc":"Uredi HTML izvor","cleanup_desc":"Po\u010disti neuredan kod","image_desc":"Umetni/uredi sliku","unlink_desc":"Poni\u0161ti link","link_desc":"Umetni/uredi link","redo_desc":"Ponovi (Ctrl+Y)","undo_desc":"Poni\u0161ti (Ctrl+Z)","indent_desc":"Izvuci","outdent_desc":"Uvuci","numlist_desc":"Numerirana lista","bullist_desc":"Nenumerirana lista","justifyfull_desc":"Poravnaj obostrano","justifyright_desc":"Poravnaj desno","justifycenter_desc":"Centriraj","justifyleft_desc":"Poravnaj lijevo","striketrough_desc":"Precrtano","help_shortcut":"Pritisni ALT F10 za alatnu traku, ALT 0 za pomo\u0107.",toolbar:"Alatna traka","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hr_dlg.js
new file mode 100644
index 000000000..515db71ec
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.advanced_dlg',{"link_list":"Lista linkova","link_is_external":"URL koji ste unijeli izgleda kao vanjski link, \u017eelite li dodati potrebni http:// prefiks?","link_is_email":"URL koji ste unijeli izgleda kao e-mail adresa, \u017eelite li dodati potrebni mailto: prefiks?","link_titlefield":"Naslov","link_target_blank":"Otvori link u novom prozoru","link_target_same":"Otvori link u istom prozoru","link_target":"Meta","link_url":"URL linka","link_title":"Umetni/uredi link","image_align_right":"Na desno","image_align_left":"Na lijevo","image_align_textbottom":"Na dno teksta","image_align_texttop":"Na vrh teksta","image_align_bottom":"Na dno","image_align_middle":"Na sredinu","image_align_top":"Na vrh","image_align_baseline":"Osnovna linija","image_align":"Poravnavanje","image_hspace":"Vodoravni razmak","image_vspace":"Okomiti razmak","image_dimensions":"Dimenzije","image_alt":"Opis slike","image_list":"Lista slika","image_border":"Obrub","image_src":"URL slike","image_title":"Umetni/uredi sliku","charmap_title":"Odaberite znak","colorpicker_name":"Naziv:","colorpicker_color":"Boja:","colorpicker_named_title":"Imenovane boje","colorpicker_named_tab":"Imenovano","colorpicker_palette_title":"Paleta boja","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Odabir boje","colorpicker_picker_tab":"Odabir","colorpicker_title":"Izbor boje","code_wordwrap":"Omatanje teksta","code_title":"HTML ure\u0111iva\u010d","anchor_name":"Ime sidra","anchor_title":"Umetni/uredi sidro","about_loaded":"Postoje\u0107i dodaci","about_version":"Verzija","about_author":"Autor","about_plugin":"Dodatak","about_plugins":"Dodaci","about_license":"Licenca","about_help":"Pomo\u0107","about_general":"O programu","about_title":"TinyMCE","anchor_invalid":"Molimo unesite ispravno ime sidra","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hu.js
new file mode 100644
index 000000000..b5a0cbd5f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.advanced',{"underline_desc":"Al\u00e1h\u00fazott (Ctrl+U)","italic_desc":"D\u0151lt (Ctrl+I)","bold_desc":"F\u00e9lk\u00f6v\u00e9r (Ctrl+B)",dd:"Defin\u00edci\u00f3 a defin\u00edci\u00f3s list\u00e1ban",dt:"Defini\u00e1lt kifejez\u00e9s a defin\u00edci\u00f3s list\u00e1ban",samp:"K\u00f3d minta",code:"K\u00f3d",blockquote:"Id\u00e9zet",h6:"C\u00edmsor 6",h5:"C\u00edmsor 5",h4:"C\u00edmsor 4",h3:"C\u00edmsor 3",h2:"C\u00edmsor 2",h1:"C\u00edmsor 1",pre:"El\u0151form\u00e1zott",address:"C\u00edm",div:"Div",paragraph:"Bekezd\u00e9s",block:"Form\u00e1tum",fontdefault:"Bet\u0171t\u00edpus","font_size":"Bet\u0171m\u00e9ret","style_select":"St\u00edlusok","image_delta_height":"","image_delta_width":"","more_colors":"Tov\u00e1bbi sz\u00ednek","toolbar_focus":"Eszk\u00f6zgombokra ugr\u00e1s - Alt+Q, Szerkeszt\u0151h\u00f6z ugr\u00e1s - Alt-Z, Elem\u00fatvonalhoz ugr\u00e1s - Alt-X",newdocument:"Biztosan t\u00f6rli az eddigi tartalmat?",path:"\u00datvonal","clipboard_msg":"A M\u00e1sol\u00e1s/Kiv\u00e1g\u00e1s/Besz\u00far\u00e1s funkci\u00f3k nem \u00e9rhet\u0151ek el Mozilla \u00e9s Firefox alatt. Szeretne t\u00f6bbet megtudni err\u0151l?","blockquote_desc":"Id\u00e9zet","help_desc":"Seg\u00edts\u00e9g","newdocument_desc":"\u00daj dokumentum","image_props_desc":"K\u00e9p tulajdons\u00e1gai","paste_desc":"Besz\u00far\u00e1s","copy_desc":"M\u00e1sol\u00e1s","cut_desc":"Kiv\u00e1g\u00e1s","anchor_desc":"Horgony besz\u00far\u00e1sa/szerkeszt\u00e9se","visualaid_desc":"Vezet\u0151vonalak/nem l\u00e1that\u00f3 elemek ki-/bekapcsol\u00e1sa","charmap_desc":"Speci\u00e1lis karakter besz\u00far\u00e1sa","backcolor_desc":"H\u00e1tt\u00e9rsz\u00edn v\u00e1laszt\u00e1sa","forecolor_desc":"Sz\u00f6vegsz\u00edn v\u00e1laszt\u00e1sa","custom1_desc":"Az \u00f6n egyedi le\u00edr\u00e1sa","removeformat_desc":"Form\u00e1z\u00e1s elt\u00e1vol\u00edt\u00e1sa","hr_desc":"V\u00edzszintes elv\u00e1laszt\u00f3 vonal besz\u00far\u00e1sa","sup_desc":"Fels\u0151 index","sub_desc":"Als\u00f3 index","code_desc":"HTML forr\u00e1s szerkeszt\u00e9se","cleanup_desc":"Minden form\u00e1z\u00e1s elt\u00e1vol\u00edt\u00e1sa","image_desc":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","unlink_desc":"Link elt\u00e1vol\u00edt\u00e1sa","link_desc":"Link besz\u00far\u00e1sa/szerkeszt\u00e9se","redo_desc":"M\u00e9gis v\u00e9grehajt (Ctrl+Y)","undo_desc":"Visszavon\u00e1s (Ctrl+Z)","indent_desc":"Beh\u00faz\u00e1s n\u00f6vel\u00e9se","outdent_desc":"Beh\u00faz\u00e1s cs\u00f6kkent\u00e9se","numlist_desc":"Rendezett lista","bullist_desc":"Rendezetlen lista","justifyfull_desc":"Sorkiz\u00e1rt","justifyright_desc":"Jobbra z\u00e1rt","justifycenter_desc":"K\u00f6z\u00e9pre z\u00e1rt","justifyleft_desc":"Balra z\u00e1rt","striketrough_desc":"\u00c1th\u00fazott","help_shortcut":"Ugr\u00e1s az eszk\u00f6zt\u00e1rhoz: ALT-F10. Seg\u00edts\u00e9g: ALT-0.","rich_text_area":"Rich Text ter\u00fclet","shortcuts_desc":"El\u00e9rhet\u0151s\u00e9g s\u00fag\u00f3",toolbar:"Eszk\u00f6zt\u00e1r","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hu_dlg.js
new file mode 100644
index 000000000..33c197db6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.advanced_dlg',{"link_list":"Link lista","link_is_external":"A be\u00edrt internet c\u00edm k\u00fcls\u0151 hivatkoz\u00e1snak t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges http://-vel kieg\u00e9sz\u00edteni?","link_is_email":"A be\u00edrt internet c\u00edm e-mail c\u00edmnek t\u0171nik, k\u00edv\u00e1nja a sz\u00fcks\u00e9ges mailto:-val kieg\u00e9sz\u00edteni?","link_titlefield":"C\u00edm","link_target_blank":"\u00faj ablakba","link_target_same":"azonos ablakba","link_target":"Megnyit\u00e1s","link_url":"Internet c\u00edm","link_title":"Link besz\u00far\u00e1sa/szerkeszt\u00e9se","image_align_right":"Jobbra","image_align_left":"Balra","image_align_textbottom":"Sz\u00f6veg alj\u00e1hoz","image_align_texttop":"Sz\u00f6veg tetej\u00e9hez","image_align_bottom":"Lentre","image_align_middle":"K\u00f6z\u00e9pre","image_align_top":"Fentre","image_align_baseline":"Alapvonalhoz","image_align":"Igaz\u00edt\u00e1s","image_hspace":"V\u00edzszintes t\u00e1v","image_vspace":"F\u00fcgg\u0151leges t\u00e1v","image_dimensions":"M\u00e9retek","image_alt":"K\u00e9p le\u00edr\u00e1s","image_list":"K\u00e9p lista","image_border":"Keret","image_src":"K\u00e9p URL","image_title":"K\u00e9p besz\u00far\u00e1sa/szerkeszt\u00e9se","charmap_title":"Egyedi karakter v\u00e1laszt\u00e1sa","colorpicker_name":"N\u00e9v:","colorpicker_color":"Sz\u00edn:","colorpicker_named_title":"Elnevezett sz\u00ednek","colorpicker_named_tab":"Elnevezettek","colorpicker_palette_title":"Paletta sz\u00ednek","colorpicker_palette_tab":"Paletta","colorpicker_picker_title":"Sz\u00ednv\u00e1laszt\u00f3","colorpicker_picker_tab":"V\u00e1laszt\u00f3","colorpicker_title":"Sz\u00ednv\u00e1laszt\u00e1s","code_wordwrap":"Sz\u00f6veg t\u00f6rdel\u00e9se","code_title":"HTML forr\u00e1s szerkeszt\u00e9se","anchor_name":"Horgonyn\u00e9v","anchor_title":"Horgony besz\u00far\u00e1sa/szerkeszt\u00e9se","about_loaded":"Bet\u00f6lt\u00f6tt pluginok","about_version":"Verzi\u00f3","about_author":"Szerz\u0151","about_plugin":"Plugin","about_plugins":"Pluginok","about_license":"Licenc","about_help":"Seg\u00edts\u00e9g","about_general":"R\u00f3lunk","about_title":"A TinyMCE-r\u0151l","charmap_usage":"A navig\u00e1l\u00e1shoz haszn\u00e1ld a bal \u00e9s jobb oldali nyilat.","anchor_invalid":"Adjon meg egy helyes horgony nevet.","accessibility_help":"El\u00e9rhet\u0151s\u00e9g s\u00fag\u00f3","accessibility_usage_title":"\u00c1ltal\u00e1nos haszn\u00e1lat"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hy.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hy.js
new file mode 100644
index 000000000..18c86cd5b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.advanced',{"underline_desc":"\u0538\u0576\u0564\u0563\u056e\u057e\u0561\u056e (Ctrl + U)","italic_desc":"\u0547\u0565\u0572 (Ctrl + I)","bold_desc":"\u0540\u0561\u057d\u057f (Ctrl + B)",dd:"\u0532\u0561\u057c\u0561\u0580\u0561\u0576 \u0562\u0561\u0581\u0561\u057f\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576",dt:"\u054f\u0565\u0580\u0574\u056b\u0576\u0576\u0565\u0580\u056b \u0562\u0561\u057c\u0561\u0580\u0561\u0576",samp:"\u053f\u0578\u0564\u056b \u0585\u0580\u056b\u0576\u0561\u056f",code:"\u053f\u0578\u0564",blockquote:"\u0544\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576",h6:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 6",h5:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 5",h4:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 4",h3:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 3",h2:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 2",h1:"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580 1",pre:"\u0546\u0561\u056d\u0561\u057a\u0565\u057d \u0586\u0578\u0580\u0574\u0561\u057f\u0561\u057e\u0578\u0580\u057e\u0561\u056e",address:"\u0540\u0561\u057d\u0581\u0565\u056b \u0578\u0573",div:"Div",paragraph:"\u0556\u0578\u0580\u0574\u0561\u057f",block:"\u0556\u0578\u0580\u0574\u0561\u057f",fontdefault:"\u054f\u0561\u057c\u0561\u057f\u0565\u057d\u0561\u056f","font_size":"\u0549\u0561\u0583\u057d","style_select":"\u0548\u0573\u0565\u0580","more_colors":"\u0547\u0561\u057f \u0563\u0578\u0582\u0575\u0576\u0565\u0580","toolbar_focus":"\u0531\u0576\u0581\u0576\u0565\u056c \u057d\u0565\u0572\u0574\u0561\u056f\u0576\u0565\u0580\u056b \u057e\u0561\u0570\u0561\u0576\u0561\u056f - Alt + Q, \u0531\u0576\u0581\u0576\u0565\u056c \u056d\u0574\u0562\u0561\u0563\u0580\u056b\u0579\u056b\u0576 - Alt-Z, \u0531\u0576\u0581\u0576\u0565\u056c \u0570\u0561\u057d\u0581\u0565\u056b \u0567\u056c\u0565\u0574\u0565\u0576\u057f\u056b\u0576 - Alt-X",newdocument:"\u0540\u0561\u0574\u0578\u0566\u057e\u0561\u055e\u056e \u0565\u0584, \u0578\u0580 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u0574 \u0565\u0584 \u0561\u0574\u0562\u0578\u0572\u057b\u0568 \u0570\u0565\u057c\u0561\u0581\u0576\u0565\u056c",path:"\u0540\u0561\u057d\u0581\u0565","clipboard_msg":"\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c / \u053f\u057f\u0580\u0565\u056c / \u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c (\u0574\u0561\u057f\u0579\u0565\u056c\u056b \u0579\u0567 Mozilla \u0587 Firefox \u0562\u0580\u0561\u0578\u0582\u0566\u0565\u0580\u0576\u0565\u0580\u0578\u0582\u0574) \\ n \u0541\u0565\u0566 \u0570\u0565\u057f\u0561\u0584\u0580\u0584\u056b\u055e\u0580 \u0567 \u0561\u0575\u0564 \u056b\u0576\u0586\u0578\u0580\u0574\u0561\u0581\u056b\u0561\u0576","blockquote_desc":"\u0544\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","help_desc":"\u0555\u0563\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","newdocument_desc":"\u0546\u0578\u0580 \u0583\u0561\u057d\u057f\u0561\u0569\u0578\u0582\u0572\u0569","image_props_desc":"\u0546\u056f\u0561\u0580\u056b \u057a\u0561\u0580\u0561\u0574\u0565\u057f\u0580\u0565\u0580","paste_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c","copy_desc":"\u054a\u0561\u057f\u0573\u0565\u0576\u0565\u056c","cut_desc":"\u053f\u057f\u0580\u0565\u056c","anchor_desc":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u056d\u0565\u056c \u056d\u0561\u0580\u056b\u057d\u056d\u0568","visualaid_desc":"Toggle guidelines / invisible elements","charmap_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u057d\u056b\u0574\u057e\u0578\u056c","backcolor_desc":"\u0538\u0576\u057f\u0580\u0565\u0584 \u0586\u0578\u0576\u056b \u0563\u0578\u0582\u0575\u0576\u0568","forecolor_desc":"\u0538\u0576\u057f\u0580\u0565\u0584 \u057f\u0565\u0584\u057d\u057f\u056b \u0563\u0578\u0582\u0575\u0576\u0568","custom1_desc":"\u0541\u0565\u0580 \u0574\u0565\u056f\u0576\u0561\u0562\u0561\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568","removeformat_desc":"\u0540\u0565\u057c\u0561\u0581\u0576\u0565\u056c \u0586\u0578\u0580\u0574\u0561\u057f\u0561\u057e\u0578\u0580\u0578\u0582\u0574\u0568","hr_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c \u0570\u0578\u0580\u056b\u0566\u0578\u0576\u0561\u056f\u0561\u0576 \u0562\u0561\u056a\u0561\u0576\u056b\u0579","sup_desc":"\u054e\u0565\u0580\u056b\u0576 \u056b\u0576\u0564\u0565\u0584\u057d","sub_desc":"\u054d\u057f\u0578\u0580\u056b\u0576 \u056b\u0576\u0564\u0565\u0584\u057d","code_desc":"\u0553\u0578\u0583\u0578\u056d\u0565\u056c HTML \u056f\u0578\u0564\u0568","cleanup_desc":"\u0540\u0565\u057c\u0561\u0581\u0576\u0565\u056c \u0561\u057e\u0565\u056c\u0578\u0580\u0564 \u056f\u0578\u0564\u0568","image_desc":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0576\u056f\u0561\u0580","unlink_desc":"\u0540\u0565\u057c\u0561\u0581\u0576\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568","link_desc":"\u054f\u0565\u0572\u0561\u0564\u0580\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568","redo_desc":"\u0531\u057c\u0561\u057b (Ctrl + Y)","undo_desc":"\u0535\u057f (Ctrl + Z)","indent_desc":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c \u0570\u0565\u057c\u0561\u057e\u0578\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568 \u0571\u0561\u056d \u0565\u0566\u0580\u056b\u0581","outdent_desc":"\u053f\u0580\u0573\u0561\u057f\u0565\u056c \u0570\u0565\u057c\u0561\u057e\u0578\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576\u0568 \u0571\u0561\u056d \u0565\u0566\u0580\u056b\u0581","numlist_desc":"\u0540\u0561\u0574\u0561\u0580\u0561\u056f\u0561\u056c\u057e\u0561\u056e \u0581\u0561\u0576\u056f","bullist_desc":"\u0551\u0561\u0576\u056f","justifyfull_desc":"\u0538\u057d\u057f \u056c\u0561\u0575\u0576\u0578\u0582\u0569\u0575\u0561\u0576","justifyright_desc":"\u0531\u057b \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","justifycenter_desc":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0581\u0576\u0565\u056c","justifyleft_desc":"\u0541\u0561\u056d \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","striketrough_desc":"\u0531\u0580\u057f\u0561\u0563\u056e\u057e\u0561\u056e","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hy_dlg.js
new file mode 100644
index 000000000..c960f947e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/hy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.advanced_dlg',{"link_list":"\u0540\u0572\u0578\u0582\u0574\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f","link_is_external":"\u0546\u0565\u0580\u0561\u056e\u057e\u0561\u056e URL \u0570\u0561\u057d\u0581\u0565\u0576 \u0576\u0574\u0561\u0576 \u0567 \u0561\u0580\u057f\u0561\u0584\u056b\u0576 \u0570\u0572\u0574\u0561\u0576, \u0534\u0578\u0582\u0584 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u055e\u0574 \u0565\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c http://","link_is_email":"\u0546\u0565\u0580\u0561\u056e\u057e\u0561\u056e URL \u0570\u0561\u057d\u0581\u0565\u0576 \u0576\u0574\u0561\u0576 \u0567 email \u0570\u0561\u057d\u0581\u0565\u056b, \u0534\u0578\u0582\u0584 \u0581\u0561\u0576\u056f\u0561\u0576\u0578\u0582\u055e\u0574 \u0565\u0584 \u0561\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c mailto:","link_titlefield":"\u054e\u0565\u0580\u0576\u0561\u0563\u056b\u0580","link_target_blank":"\u0576\u0578\u0580 \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0578\u0582\u0574","link_target_same":"\u0561\u0575\u057d \u057a\u0561\u057f\u0578\u0582\u0570\u0561\u0576\u0578\u0582\u0574","link_target":"\u0532\u0561\u0581\u0565\u056c ...","link_url":"\u0540\u0572\u0574\u0561\u0576 \u0570\u0561\u057d\u0581\u0565","link_title":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0570\u0572\u0578\u0582\u0574\u0568","image_align_right":"\u0531\u057b \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","image_align_left":"\u0541\u0561\u056d \u0570\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","image_align_textbottom":"\u0538\u057d\u057f \u057f\u0565\u0584\u057d\u057f\u056b \u057d\u057f\u0578\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","image_align_texttop":"\u0538\u057d\u057f \u057f\u0565\u0584\u057d\u057f\u056b \u057e\u0565\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","image_align_bottom":"\u0538\u057d\u057f \u057d\u057f\u0578\u0580\u056b\u0576 \u0563\u056e\u056b","image_align_middle":"\u053f\u0565\u0576\u057f\u0580\u0578\u0576\u0561\u0581\u0576\u0565\u056c","image_align_top":"\u0538\u057d\u057f \u057e\u0565\u0580\u056b\u0576 \u0565\u0566\u0580\u056b","image_align_baseline":"\u0538\u057d\u057f \u0562\u0561\u0566\u0561\u0575\u056b\u0576 \u0563\u056e\u056b","image_align":"\u0540\u0561\u057e\u0561\u057d\u0561\u0580\u0565\u0581\u0578\u0582\u0574","image_hspace":"\u0540\u0578\u0580\u056b\u0566. \u0577\u0565\u0572\u0578\u0582\u0574","image_vspace":"\u0548\u0582\u0572\u0572\u0561\u0570. \u0577\u0565\u0572\u0578\u0582\u0574","image_dimensions":"\u0549\u0561\u0583\u057d\u0565\u0580","image_alt":"\u0546\u056f\u0561\u0580\u0561\u0563\u0580\u0578\u0582\u0569\u0575\u0578\u0582\u0576","image_list":"\u0546\u056f\u0561\u0580\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f","image_border":"\u0535\u0566\u0580","image_src":"\u0540\u0561\u057d\u0581\u0565","image_title":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u0576\u056f\u0561\u0580","charmap_title":"\u0538\u0576\u057f\u0580\u0565\u056c \u057a\u0561\u057f\u0561\u0570\u0561\u056f\u0561\u0576 \u057d\u056b\u0574\u057e\u0578\u056c","colorpicker_name":"\u0531\u0576\u057e\u0561\u0576\u0578\u0582\u0574:","colorpicker_color":"\u0533\u0578\u0582\u0575\u0576:","colorpicker_named_title":"\u0538\u057d\u057f \u0561\u0576\u057e\u0561\u0576\u0574\u0561\u0576","colorpicker_named_tab":"\u0538\u057d\u057f \u0561\u0576\u057e\u0561\u0576\u0574\u0561\u0576","colorpicker_palette_title":"\u0533\u0578\u0582\u0575\u0576\u0565\u0580\u056b \u0581\u0561\u0576\u056f","colorpicker_palette_tab":"\u0551\u0561\u0576\u056f","colorpicker_picker_title":"\u0533\u0578\u0582\u0576\u0561\u0575\u056b\u0576 \u0585\u0580\u056b\u0576\u0561\u056f","colorpicker_picker_tab":"\u0533\u0578\u0582\u0576\u0561\u0575\u056b\u0576 \u0585\u0580\u056b\u0576\u0561\u056f","colorpicker_title":"\u0538\u0576\u057f\u0580\u0565\u0584 \u0563\u0578\u0582\u0575\u0576","code_wordwrap":"\u054f\u0565\u0572\u0561\u0583\u0578\u056d\u0565\u056c \u0562\u0561\u057c\u0565\u0580","code_title":"HTML \u056f\u0578\u0564\u056b \u056d\u0574\u0562\u0561\u0563\u0580\u056b\u0579","anchor_name":"\u053d\u0561\u0580\u056b\u057d\u056d \u0561\u0576\u057e\u0561\u0576\u0578\u0582\u0574","anchor_title":"\u0531\u057e\u0565\u056c\u0561\u0581\u0576\u0565\u056c / \u0583\u0578\u0583\u0578\u056d\u0565\u056c \u056d\u0561\u0580\u056b\u057d\u056d\u0568","about_loaded":"\u0532\u0565\u057c\u0562\u057e\u0561\u056e \u057a\u056c\u0561\u0563\u056b\u0576\u0576\u0565\u0580","about_version":"\u054f\u0561\u0580\u0562\u0565\u0580\u0561\u056f","about_author":"\u0540\u0565\u0572\u056b\u0576\u0561\u056f","about_plugin":"\u054a\u056c\u0561\u0563\u056b\u0576","about_plugins":"\u054a\u056c\u0561\u0563\u056b\u0576\u0576\u0565\u0580","about_license":"\u053c\u056b\u0581\u0565\u0576\u0566\u056b\u0561","about_help":"\u0555\u0563\u0576\u0578\u0582\u0569\u0575\u0578\u0582\u0576","about_general":"\u053e\u0580\u0561\u0563\u0580\u0561\u0575\u056b\u0576 \u0561\u057a\u0561\u0570\u0578\u057e\u0574\u0561\u0576 \u0574\u0561\u057d\u056b\u0576 ...","about_title":"TinyMCE \u053d\u0574\u0562\u0561\u0563\u0580\u056b\u0579","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ia.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ia.js
new file mode 100644
index 000000000..3cfbf3681
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ia.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.advanced',{"underline_desc":"\u5e95\u7ebf (Ctrl+U)","italic_desc":"\u659c\u4f53 (Ctrl+I)","bold_desc":"\u7c97\u4f53 (Ctrl+B)",dd:"\u540d\u8bcd\u89e3\u91ca",dt:"\u540d\u8bcd\u5b9a\u4e49",samp:"\u7a0b\u5e8f\u8303\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"\u6807\u9898 6",h5:"\u6807\u9898 5",h4:"\u6807\u9898 4",h3:"\u6807\u9898 3",h2:"\u6807\u9898 2",h1:"\u6807\u9898 1",pre:"\u9ed8\u8ba4\u683c\u5f0f",address:"\u5730\u5740",div:"Div",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u4f53","font_size":"\u5b57\u4f53\u5927\u5c0f","style_select":"\u6837\u5f0f","more_colors":"\u66f4\u591a\u989c\u8272","toolbar_focus":"\u5de5\u5177\u5217 - Alt+Q, \u7f16\u8f91\u5668 - Alt-Z, \u7ec4\u4ef6\u8def\u5f84 - Alt-X",newdocument:"\u60a8\u786e\u8ba4\u8981\u5220\u9664\u5168\u90e8\u5185\u5bb9\u5417\uff1f",path:"\u8def\u5f84","clipboard_msg":"\u590d\u5236\u3001\u526a\u5207\u548c\u7c98\u8d34\u529f\u80fd\u5728Mozilla \u548c Firefox\u4e2d\u65e0\u6cd5\u4f7f\u7528","blockquote_desc":"\u5f15\u7528","help_desc":"\u5e2e\u52a9","newdocument_desc":"\u65b0\u5efa\u6587\u4ef6","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u7c98\u8d34 (Ctrl+V)","copy_desc":"\u590d\u5236 (Ctrl+C)","cut_desc":"\u526a\u5207 (Ctrl+X)","anchor_desc":"\u63d2\u5165/\u7f16\u8f91 \u951a\u70b9","visualaid_desc":"\u7f51\u683c/\u9690\u85cf\u7ec4\u4ef6\uff1f","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","backcolor_desc":"\u9009\u62e9\u80cc\u666f\u989c\u8272","forecolor_desc":"\u9009\u62e9\u6587\u5b57\u989c\u8272","custom1_desc":"\u5728\u6b64\u8f93\u5165\u60a8\u7684\u81ea\u8ba2\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u6837\u5f0f","hr_desc":"\u63d2\u5165\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"\u7f16\u8f91 HTML \u539f\u59cb\u7a0b\u5e8f\u4ee3\u7801","cleanup_desc":"\u5220\u9664\u5197\u4f59\u7801","image_desc":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","unlink_desc":"\u53d6\u6d88\u8fde\u7ed3","link_desc":"\u63d2\u5165/\u7f16\u8f91 \u8fde\u7ed3","redo_desc":"\u6062\u590d (Ctrl+Y)","undo_desc":"\u64a4\u9500 (Ctrl+Z)","indent_desc":"\u589e\u52a0\u7f29\u8fdb","outdent_desc":"\u51cf\u5c11\u7f29\u8fdb","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u6e05\u5355\u7b26\u53f7","justifyfull_desc":"\u4e24\u7aef\u5bf9\u9f50","justifyright_desc":"\u53f3\u5bf9\u9f50","justifycenter_desc":"\u5c45\u4e2d","justifyleft_desc":"\u5de6\u5bf9\u9f50","striketrough_desc":"\u4e2d\u5212\u7ebf","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ia_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ia_dlg.js
new file mode 100644
index 000000000..7f840d639
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ia_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.advanced_dlg',{"link_list":"\u8fde\u7ed3\u6e05\u5355","link_is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u52a0\u4e0a http:// ?","link_is_email":"\u60a8\u8f93\u5165\u7684\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u52a0\u4e0a mailto: ? ","link_titlefield":"\u6807\u9898","link_target_blank":"\u65b0\u7a97\u53e3\u6253\u5f00","link_target_same":"\u5f53\u524d\u7a97\u53e3\u6253\u5f00","link_target":"\u76ee\u6807","link_url":"\u8fde\u7ed3\u7f51\u5740","link_title":"\u63d2\u5165/\u7f16\u8f91 \u8fde\u7ed3","image_align_right":"\u53f3\u5bf9\u9f50","image_align_left":"\u5de6\u5bf9\u9f50","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u5e95\u90e8\u5bf9\u9f50","image_align_middle":"\u4e2d\u90e8\u5bf9\u9f50","image_align_top":"\u9876\u90e8\u5bf9\u9f50","image_align_baseline":"\u57fa\u7ebf","image_align":"\u5bf9\u9f50\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u95f4\u8ddd","image_vspace":"\u5782\u76f4\u95f4\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u8bf4\u660e","image_list":"\u56fe\u7247\u6e05\u5355","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247\u7f51\u5740","image_title":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","colorpicker_name":"\u8272\u540d:","colorpicker_color":"\u989c\u8272:","colorpicker_named_title":"\u9ed8\u8ba4\u7684\u989c\u8272","colorpicker_named_tab":"\u9ed8\u8ba4\u503c","colorpicker_palette_title":"\u8272\u8c31\u989c\u8272","colorpicker_palette_tab":"\u8272\u8c31","colorpicker_picker_title":"\u53d6\u8272\u5668","colorpicker_picker_tab":"\u9009\u62e9\u5668","colorpicker_title":"\u9009\u62e9\u989c\u8272","code_wordwrap":"\u81ea\u52a8\u6362\u884c","code_title":"HTML \u539f\u59cb\u7a0b\u5e8f\u4ee3\u7801\u7f16\u8f91\u5668","anchor_name":"\u951a\u70b9\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91 \u951a\u70b9","about_loaded":"\u5df2\u52a0\u8f7d\u7684\u5916\u6302\u7a0b\u5e8f","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u5916\u6302\u7a0b\u5e8f","about_plugins":"\u5168\u90e8\u5916\u6302\u7a0b\u5e8f","about_license":"\u6388\u6743","about_help":"\u5e2e\u52a9","about_general":"\u5173\u4e8e","about_title":"\u5173\u4e8e TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/id.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/id.js
new file mode 100644
index 000000000..cfd77b8f8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/id.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Yakin untuk menghapus semua konten?",path:"Path","clipboard_msg":"Copy/Cut/Paste tidak tersedia pada Mozilla dan Firefox.\nButuh info selengkapnya?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Pilih background color","forecolor_desc":"Pilih text color","custom1_desc":"Deskripsi disini","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/id_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/id_dlg.js
new file mode 100644
index 000000000..6d6ed3239
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/id_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.advanced_dlg',{"link_list":"Daftar Link","link_is_external":"URL yang Anda sisipkan tampaknya link eksternal, Anda ingin menambahkan awalan \'http://\'?","link_is_email":"URL yang Anda sisipkan tampaknya e-mail, Anda ingin menambahkan awalan \'mailto:\'?","link_titlefield":"Judul","link_target_blank":"Buka link pada window baru","link_target_same":"Buka link pada window yang sama","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Pilih custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Versi","about_author":"Penulis","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Lisensi","about_help":"Bantuan","about_general":"Tentang","about_title":"Tentang TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/is.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/is.js
new file mode 100644
index 000000000..600433cf9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/is.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.advanced',{"underline_desc":"Undirstrika\u00f0 (Ctrl+U)","italic_desc":"Sk\u00e1letra\u00f0 (Ctrl+I)","bold_desc":"Feitletra\u00f0 (Ctrl+B)",dd:"L\u00fdsing skilgreiningar",dt:"Stilgreining",samp:"K\u00f3\u00f0ad\u00e6mi",code:"K\u00f3\u00f0i",blockquote:"Blockquote",h6:"Fyrirs\u00f6gn 6",h5:"Fyrirs\u00f6gn 5",h4:"Fyrirs\u00f6gn 4",h3:"Fyrirs\u00f6gn 3",h2:"Fyrirs\u00f6gn 2",h1:"Fyrirs\u00f6gn 1",pre:"Forsni\u00f0i\u00f0",address:"Heimilisfang",div:"Div",paragraph:"M\u00e1lsgrein",block:"Format",fontdefault:"Leturger\u00f0","font_size":"Leturst\u00e6r\u00f0","style_select":"St\u00edlsni\u00f0","more_colors":"Fleiri litir","toolbar_focus":"Hoppa \u00ed t\u00f3lastiku - Alt+Q, Hoppa \u00ed ritil - Alt-Z, Hoppa \u00ed sl\u00f3\u00f0 - Alt-X",newdocument:"Ertu viss um a\u00f0 \u00fe\u00fa viljir hreinsa allt?",path:"Sl\u00f3\u00f0","clipboard_msg":"Afrita/Klippa/L\u00edma er ekki a\u00f0gengilegt \u00ed Mozilla og Firefox eins og er.\\Viltu f\u00e1 n\u00e1nari uppl\u00fdsingar?","blockquote_desc":"Blockquote","help_desc":"Hj\u00e1lp","newdocument_desc":"N\u00fdtt skjal","image_props_desc":"Stilling myndar","paste_desc":"L\u00edma","copy_desc":"Afrita","cut_desc":"Klippa","anchor_desc":"Setja inn/breyta akkeri","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Setja inn t\u00e1kn","backcolor_desc":"Veldu bakgrunnslit","forecolor_desc":"Veldu textalit","custom1_desc":"L\u00fdsingin \u00fe\u00edn h\u00e9r","removeformat_desc":"Hreinsa sni\u00f0","hr_desc":"Setja inn l\u00e1r\u00e9tta l\u00ednu","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Breyta HTML k\u00f3\u00f0a","cleanup_desc":"Hreinsa ruslk\u00f3\u00f0a","image_desc":"Setja inn/breyta mynd","unlink_desc":"Afhlekkja","link_desc":"Setja inn/breyta hlekk","redo_desc":"Endurtaka (Ctrl+Y)","undo_desc":"Taka til baka (Ctrl+Z)","indent_desc":"Draga inn","outdent_desc":"Draga \u00fat","numlist_desc":"N\u00famera\u00f0ur listi","bullist_desc":"B\u00f3lulisti","justifyfull_desc":"Jafna","justifyright_desc":"H\u00e6grijafna","justifycenter_desc":"Mi\u00f0jujafna","justifyleft_desc":"Vinstrijafna","striketrough_desc":"Yfirstrika\u00f0","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/is_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/is_dlg.js
new file mode 100644
index 000000000..7775c7e49
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/is_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.advanced_dlg',{"link_list":"Hlekkjalisti","link_is_external":"Sl\u00f3\u00f0in sem \u00fe\u00fa sl\u00f3st inn vir\u00f0ist vera utana\u00f0komandi, viltu b\u00e6ta vi\u00f0 http:// forskeytinu?","link_is_email":"Sl\u00f3\u00f0in sem \u00fe\u00fa sl\u00f3st inn vir\u00f0ist vera netfang, viltu b\u00e6ta vi\u00f0 mailto: forskeytinu?","link_titlefield":"Titill","link_target_blank":"Opna hlekk \u00ed n\u00fdjum glugga","link_target_same":"Opna hlekk \u00ed sama glugga","link_target":"\u00c1fangasta\u00f0ur","link_url":"Sl\u00f3\u00f0 hlekks","link_title":"Setja inn/breyta hlekk","image_align_right":"H\u00e6gri","image_align_left":"Vinstri","image_align_textbottom":"Botn texta","image_align_texttop":"Toppur texta","image_align_bottom":"Botn","image_align_middle":"Mi\u00f0ja","image_align_top":"Toppur","image_align_baseline":"Baseline","image_align":"J\u00f6fnun","image_hspace":"L\u00e1r\u00e9tt loftun","image_vspace":"L\u00f3\u00f0r\u00e9tt loftun","image_dimensions":"St\u00e6r\u00f0ir","image_alt":"L\u00fdsing myndar","image_list":"Myndalisti","image_border":"Rammi","image_src":"Sl\u00f3\u00f0 myndar","image_title":"Setja inn/breyta mynd","charmap_title":"Veldu t\u00e1kn","colorpicker_name":"Nafn:","colorpicker_color":"Litur:","colorpicker_named_title":"Nefndir litir","colorpicker_named_tab":"Nefndir","colorpicker_palette_title":"Litir litaspjalds","colorpicker_palette_tab":"Litaspjald","colorpicker_picker_title":"Litaveljari","colorpicker_picker_tab":"Veljari","colorpicker_title":"Veldu lit","code_wordwrap":"Word wrap","code_title":"HTML k\u00f3\u00f0a ritill","anchor_name":"Nafn akkeris","anchor_title":"Setja inn/breyta akkeri","about_loaded":"Vi\u00f0b\u00e6tur \u00ed notkun","about_version":"\u00datg\u00e1fa","about_author":"H\u00f6fundur","about_plugin":"Vi\u00f0b\u00e6tur","about_plugins":"Vi\u00f0b\u00e6tur","about_license":"Leyfi","about_help":"Hj\u00e1lp","about_general":"Um","about_title":"Um TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/it.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/it.js
new file mode 100644
index 000000000..af84c79db
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/it.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.advanced',{"underline_desc":"Sottolineato (Ctrl+U)","italic_desc":"Corsivo (Ctrl+I)","bold_desc":"Grassetto (Ctrl+B)",dd:"Descrizione definizione",dt:"Termine definizione",samp:"Esempio codice",code:"Codice",blockquote:"Testo quotato",h6:"Intestazione 6",h5:"Intestazione 5",h4:"Intestazione 4",h3:"Intestazione 3",h2:"Intestazione 2",h1:"Intestazione 1",pre:"Preformattato",address:"Indirizzo",div:"Div",paragraph:"Paragrafo",block:"Formato",fontdefault:"Famiglia carattere","font_size":"Grandezza carattere","style_select":"Stili","anchor_delta_height":"anchor_delta_height","anchor_delta_width":"anchor_delta_width","charmap_delta_height":"charmap_delta_height","charmap_delta_width":"charmap_delta_width","colorpicker_delta_height":"colorpicker_delta_height","colorpicker_delta_width":"colorpicker_delta_width","link_delta_height":"link_delta_height","link_delta_width":"link_delta_width","image_delta_height":"image_delta_height","image_delta_width":"image_delta_width","more_colors":"Colori aggiuntivi","toolbar_focus":"Vai ai pulsanti strumento - Alt+Q, Vai all\'editor - Alt-Z, Vai al percorso dell\'elemento - Alt-X",newdocument:"Sei sicuro di voler cancellare tutti i contenuti?",path:"Percorso","clipboard_msg":"Copia/Taglia/Incolla non \u00e8 disponibile in Mozilla e Firefox..\nSi desidera avere maggiori informazioni su questo problema?","blockquote_desc":"Testo quotato","help_desc":"Aiuto","newdocument_desc":"Nuovo documento","image_props_desc":"Propriet\u00e0 immagine","paste_desc":"Incolla","copy_desc":"Copia","cut_desc":"Taglia","anchor_desc":"Inserisci/modifica ancora","visualaid_desc":"Mostra/nascondi linee guida/elementi invisibili","charmap_desc":"Inserisci carattere speciale","backcolor_desc":"Seleziona colore sfondo","forecolor_desc":"Seleziona colore testo","custom1_desc":"La tua descrizione personalizzata qui","removeformat_desc":"Rimuovi formattazione","hr_desc":"Inserisci riga orizzontale","sup_desc":"Apice","sub_desc":"Pedice","code_desc":"Modifica sorgente HTML","cleanup_desc":"Pulisci codice disordinato","image_desc":"Inserisci/modifica immagine","unlink_desc":"Togli collegamento","link_desc":"Inserisci/modifica collegamento","redo_desc":"Ripristina (Ctrl+Y)","undo_desc":"Annulla (Ctrl+Z)","indent_desc":"Sposta verso interno","outdent_desc":"Sposta verso esterno","numlist_desc":"Lista ordinata","bullist_desc":"Lista non ordinata","justifyfull_desc":"Giustifica","justifyright_desc":"Allinea a destra","justifycenter_desc":"Centra","justifyleft_desc":"Allinea a sinistra","striketrough_desc":"Barrato","help_shortcut":"Premi ALT-F10 Per la barra degli strumenti. Premi ALT-0 per l\'aiuto","rich_text_area":"Rich Text Area","shortcuts_desc":"Aiuto accessibilit\u00e0",toolbar:"Barra degli strumenti"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/it_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/it_dlg.js
new file mode 100644
index 000000000..9fc5380c4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/it_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.advanced_dlg',{"link_list":"Lista link","link_is_external":"L\'URL inserito sembra essere un link esterno. Aggiungere il necessario prefisso http:// ?","link_is_email":"L\'URL inserito sembra essere un indirizzo email. Aggiungere il necessario prefisso mailto: ?","link_titlefield":"Titolo","link_target_blank":"Apri link in una nuova finestra","link_target_same":"Apri link nella stessa finestra","link_target":"Target","link_url":"URL link","link_title":"Inserisci/modifica collegamento","image_align_right":"A destra","image_align_left":"A sinistra","image_align_textbottom":"In basso al testo","image_align_texttop":"In alto al testo","image_align_bottom":"In basso","image_align_middle":"In mezzo","image_align_top":"In alto","image_align_baseline":"Alla base","image_align":"Allineamento","image_hspace":"Spaziatura orizz.","image_vspace":"Spaziatura vert.","image_dimensions":"Dimensioni","image_alt":"Descrizione","image_list":"Lista immagini","image_border":"Bordo","image_src":"URL immagine","image_title":"Inserisci/modifica immagine","charmap_title":"Seleziona carattere speciale","colorpicker_name":"Nome:","colorpicker_color":"Colore:","colorpicker_named_title":"Colori per nome","colorpicker_named_tab":"Per nome","colorpicker_palette_title":"Tavolozza dei colori","colorpicker_palette_tab":"Tavolozza","colorpicker_picker_title":"Selettore colori","colorpicker_picker_tab":"Selettore","colorpicker_title":"Seleziona un colore","code_wordwrap":"A capo automatico","code_title":"Editor sorgente HTML","anchor_name":"Nome ancora","anchor_title":"Inserisci/modifica ancora","about_loaded":"Plugin caricati","about_version":"Versione","about_author":"Autore","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Licenza","about_help":"Aiuto","about_general":"Informazioni","about_title":"Informazioni su TinyMCE","charmap_usage":"Utilizza le freccie sinistra e destra per navigare.","anchor_invalid":"Specificare un nome di ancora valido.","accessibility_help":"Guida accessibilit\u00e0","accessibility_usage_title":"Uso generale","invalid_color_value":"Colore non valido"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ja.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ja.js
new file mode 100644
index 000000000..f5533c548
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ja.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.advanced',{"underline_desc":"\u4e0b\u7dda (Ctrl+U)","italic_desc":"\u659c\u4f53 (Ctrl+I)","bold_desc":"\u592a\u5b57 (Ctrl+B)",dd:"\u8a9e\u53e5\u306e\u8aac\u660e",dt:"\u8a9e\u53e5\u306e\u5b9a\u7fa9",samp:"\u30b3\u30fc\u30c9\u306e\u4f8b",code:"\u30b3\u30fc\u30c9",blockquote:"\u5f15\u7528",h6:"\u898b\u51fa\u30576",h5:"\u898b\u51fa\u30575",h4:"\u898b\u51fa\u30574",h3:"\u898b\u51fa\u30573",h2:"\u898b\u51fa\u30572",h1:"\u898b\u51fa\u30571",pre:"\u6574\u5f62\u6e08\u307f",address:"\u4f4f\u6240",div:"div\u8981\u7d20",paragraph:"\u6bb5\u843d",block:"\u66f8\u5f0f",fontdefault:"\u30d5\u30a9\u30f3\u30c8","font_size":"\u30d5\u30a9\u30f3\u30c8\u306e\u5927\u304d\u3055","style_select":"\u30b9\u30bf\u30a4\u30eb","more_colors":"\u3055\u3089\u306b\u8272\u3092\u4f7f\u7528...","toolbar_focus":"\u30c4\u30fc\u30eb\u30dc\u30bf\u30f3\u3078\u79fb\u52d5 - Alt Q, \u30a8\u30c7\u30a3\u30bf\u306b\u79fb\u52d5 - Alt-Z, \u8981\u7d20\u306e\u30d1\u30b9\u3078\u79fb\u52d5 - Alt-X",newdocument:"\u672c\u5f53\u306b\u3059\u3079\u3066\u306e\u5185\u5bb9\u3092\u6d88\u53bb\u3057\u3066\u3088\u3044\u3067\u3059\u304b?",path:"\u30d1\u30b9","clipboard_msg":"\u30b3\u30d4\u30fc/\u5207\u308a\u53d6\u308a/\u8cbc\u308a\u4ed8\u3051\u306fMozilla\u3068Firefox\u3067\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002\n\u3053\u306e\u554f\u984c\u306e\u8a73\u7d30\u3092\u77e5\u308a\u305f\u3044\u3067\u3059\u304b?","blockquote_desc":"\u5f15\u7528\u30d6\u30ed\u30c3\u30af","help_desc":"\u30d8\u30eb\u30d7","newdocument_desc":"\u65b0\u3057\u3044\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8","image_props_desc":"\u753b\u50cf\u306e\u5c5e\u6027","paste_desc":"\u8cbc\u308a\u4ed8\u3051","copy_desc":"\u30b3\u30d4\u30fc","cut_desc":"\u5207\u308a\u53d6\u308a","anchor_desc":"\u30a2\u30f3\u30ab\u30fc\u306e\u633f\u5165/\u7de8\u96c6","visualaid_desc":"\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u3068\u975e\u8868\u793a\u8981\u7d20\u306e\u8868\u793a\u3092\u5207\u66ff","charmap_desc":"\u7279\u6b8a\u6587\u5b57","backcolor_desc":"\u80cc\u666f\u306e\u8272","forecolor_desc":"\u6587\u5b57\u306e\u8272","custom1_desc":"\u8aac\u660e\u6587\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002","removeformat_desc":"\u66f8\u5f0f\u306e\u524a\u9664","hr_desc":"\u6c34\u5e73\u7dda\u3092\u633f\u5165","sup_desc":"\u4e0a\u4ed8\u304d\u6587\u5b57","sub_desc":"\u4e0b\u4ed8\u304d\u6587\u5b57","code_desc":"HTML\u306e\u30bd\u30fc\u30b9\u3092\u7de8\u96c6","cleanup_desc":"\u4e71\u96d1\u306a\u30b3\u30fc\u30c9\u3092\u6574\u5f62","image_desc":"\u753b\u50cf\u306e\u633f\u5165/\u7de8\u96c6","unlink_desc":"\u30ea\u30f3\u30af\u3092\u89e3\u9664","link_desc":"\u30ea\u30f3\u30af\u306e\u633f\u5165/\u7de8\u96c6","redo_desc":"\u3084\u308a\u76f4\u3059 (Ctrl+Y)","undo_desc":"\u5143\u306b\u623b\u3059 (Ctrl+Z)","indent_desc":"\u5b57\u4e0b\u3052\u3092\u5897\u3084\u3059","outdent_desc":"\u5b57\u4e0b\u3052\u3092\u6e1b\u3089\u3059","numlist_desc":"\u756a\u53f7\u3064\u304d\u30ea\u30b9\u30c8","bullist_desc":"\u756a\u53f7\u306a\u3057\u30ea\u30b9\u30c8","justifyfull_desc":"\u5747\u7b49\u5272\u4ed8","justifyright_desc":"\u53f3\u63c3\u3048","justifycenter_desc":"\u4e2d\u592e\u63c3\u3048","justifyleft_desc":"\u5de6\u63c3\u3048","striketrough_desc":"\u53d6\u308a\u6d88\u3057\u7dda","help_shortcut":"ALT-F10 \u3067\u30c4\u30fc\u30eb\u30d0\u30fc\u3001ALT-0 \u3067\u30d8\u30eb\u30d7","rich_text_area":"\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u30a8\u30ea\u30a2","shortcuts_desc":"\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u306e\u30d8\u30eb\u30d7",toolbar:"\u30c4\u30fc\u30eb\u30d0\u30fc","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ja_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ja_dlg.js
new file mode 100644
index 000000000..234fb71a4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ja_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.advanced_dlg',{"link_list":"\u30ea\u30f3\u30af\u306e\u4e00\u89a7","link_is_external":"\u5165\u529b\u3057\u305fURL\u306f\u5916\u90e8\u306e\u30ea\u30f3\u30af\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b http:// \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?","link_is_email":"\u5165\u529b\u3057\u305fURL\u306f\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u3088\u3046\u3067\u3059\u3002\u30ea\u30f3\u30af\u306b mailto: \u3092\u8ffd\u52a0\u3057\u307e\u3059\u304b?","link_titlefield":"\u30bf\u30a4\u30c8\u30eb","link_target_blank":"\u65b0\u3057\u3044\u30a6\u30a4\u30f3\u30c9\u30a6\u3067\u958b\u304f","link_target_same":"\u540c\u3058\u30a6\u30a4\u30f3\u30c9\u30a6\u3067\u958b\u304f","link_target":"\u30bf\u30fc\u30b2\u30c3\u30c8","link_url":"\u30ea\u30f3\u30af\u306eURL","link_title":"\u30ea\u30f3\u30af\u306e\u633f\u5165\u3084\u7de8\u96c6","image_align_right":"\u53f3\u63c3\u3048","image_align_left":"\u5de6\u63c3\u3048","image_align_textbottom":"\u30c6\u30ad\u30b9\u30c8\u306e\u4e0b\u7aef\u63c3\u3048","image_align_texttop":"\u30c6\u30ad\u30b9\u30c8\u306e\u4e0a\u7aef\u63c3\u3048","image_align_bottom":"\u4e0b\u63c3\u3048","image_align_middle":"\u4e2d\u592e\u63c3\u3048","image_align_top":"\u4e0a\u63c3\u3048","image_align_baseline":"\u30d9\u30fc\u30b9\u30e9\u30a4\u30f3\u63c3\u3048","image_align":"\u914d\u7f6e","image_hspace":"\u5de6\u53f3\u306e\u4f59\u767d","image_vspace":"\u4e0a\u4e0b\u306e\u4f59\u767d","image_dimensions":"\u5bf8\u6cd5","image_alt":"\u753b\u50cf\u306e\u8aac\u660e","image_list":"\u753b\u50cf\u306e\u4e00\u89a7","image_border":"\u67a0\u7dda","image_src":"\u753b\u50cf\u306eURL","image_title":"\u753b\u50cf\u306e\u633f\u5165\u3084\u7de8\u96c6","charmap_title":"\u7279\u6b8a\u6587\u5b57","colorpicker_name":"\u540d\u524d:","colorpicker_color":"\u8272:","colorpicker_named_title":"\u5b9a\u7fa9\u6e08\u307f\u306e\u8272","colorpicker_named_tab":"\u5b9a\u7fa9\u6e08\u307f","colorpicker_palette_title":"\u30d1\u30ec\u30c3\u30c8\u306e\u8272","colorpicker_palette_tab":"\u30d1\u30ec\u30c3\u30c8","colorpicker_picker_title":"\u8272\u9078\u629e","colorpicker_picker_tab":"\u9078\u629e","colorpicker_title":"\u8272\u3092\u9078\u629e","code_wordwrap":"\u884c\u306e\u6298\u308a\u8fd4\u3057","code_title":"HTML\u306e\u30bd\u30fc\u30b9\u30a8\u30c7\u30a3\u30bf","anchor_name":"\u30a2\u30f3\u30ab\u30fc\u306e\u540d\u524d","anchor_title":"\u30a2\u30f3\u30ab\u30fc\u306e\u633f\u5165\u3084\u7de8\u96c6","about_loaded":"\u8aad\u307f\u8fbc\u307f\u6e08\u307f\u306e\u30d7\u30e9\u30b0\u30a4\u30f3","about_version":"\u30d0\u30fc\u30b8\u30e7\u30f3","about_author":"\u4f5c\u6210\u8005","about_plugin":"\u30d7\u30e9\u30b0\u30a4\u30f3","about_plugins":"\u30d7\u30e9\u30b0\u30a4\u30f3","about_license":"\u30e9\u30a4\u30bb\u30f3\u30b9","about_help":"\u30d8\u30eb\u30d7","about_general":"TinyMCE\u306b\u3064\u3044\u3066","about_title":"TinyMCE\u306b\u3064\u3044\u3066","charmap_usage":"\u5de6\u53f3\u306e\u30ab\u30fc\u30bd\u30eb\u30ad\u30fc\u3092\u4f7f\u7528\u3057\u3066\u79fb\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002","anchor_invalid":"\u6709\u52b9\u306a\u30a2\u30f3\u30ab\u30fc\u306e\u540d\u524d\u3092\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002","accessibility_help":"\u30a2\u30af\u30bb\u30b7\u30d3\u30ea\u30c6\u30a3\u306e\u30d8\u30eb\u30d7","accessibility_usage_title":"\u5168\u822c\u7684\u306a\u4f7f\u3044\u65b9","invalid_color_value":"\u7121\u52b9\u306a\u5024"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ka.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ka.js
new file mode 100644
index 000000000..bc2b1faa9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ka.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.advanced',{"underline_desc":"\u10db\u10dd\u10ee\u10d0\u10d6\u10e3\u10e0\u10da\u10d8 (Ctrl+U)","italic_desc":"\u10d3\u10d0\u10ee\u10e0\u10d8\u10da\u10d8 (Ctrl+I)","bold_desc":"\u10dc\u10d0\u10ee\u10d4\u10d5\u10e0\u10d0\u10d3 \u10e1\u10e5\u10d4\u10da\u10d8 (Ctrl+B)",dd:"\u10ea\u10dc\u10dd\u10d1\u10d0\u10e0\u10d8\u10e1 \u10d0\u10e6\u10ec\u10d4\u10e0\u10d0",dt:"\u10ea\u10dc\u10dd\u10d1\u10d0\u10e0\u10d8\u10e1 \u10e2\u10d4\u10e0\u10db\u10d8\u10dc\u10d8",samp:"\u10d9\u10dd\u10d3\u10d8\u10e1 \u10db\u10d0\u10d2\u10d0\u10da\u10d8\u10d7\u10d8",code:"\u10d9\u10dd\u10d3\u10d8",blockquote:"\u10ea\u10d8\u10e2\u10d0\u10e2\u10d0",h6:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 6",h5:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 5",h4:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 4",h3:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 3",h2:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 2",h1:"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8 1",pre:"\u10d2\u10d0\u10d3\u10d0\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d4\u10d1\u10e3\u10da\u10d8",address:"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8",div:"Div",paragraph:"\u10d0\u10d1\u10d6\u10d0\u10ea\u10d8",block:"\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8",fontdefault:"\u10e8\u10e0\u10d8\u10e4\u10e2\u10d8","font_size":"\u10d6\u10dd\u10db\u10d0","style_select":"\u10e1\u10e2\u10d8\u10da\u10d8","more_colors":"\u10e1\u10ee\u10d5\u10d0 \u10e4\u10d4\u10e0\u10d4\u10d1\u10d8...","toolbar_focus":"\u10e6\u10d8\u10da\u10d0\u10d9\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10dc\u10d4\u10da\u10d6\u10d4 \u10d2\u10d0\u10d3\u10d0\u10e1\u10d5\u10da\u10d0 (Alt+Q). \u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10dd\u10e0\u10d6\u10d4 \u10d2\u10d0\u10d3\u10d0\u10e1\u10d5\u10da\u10d0 (Alt+Z). \u10d2\u10d6\u10d8\u10e1 \u10d4\u10da\u10d4\u10db\u10d4\u10dc\u10e2\u10d8\u10d6\u10d4 \u10d2\u10d0\u10d3\u10d0\u10e1\u10d5\u10da\u10d0 (Alt+X).",newdocument:"\u10d3\u10d0\u10e0\u10ec\u10db\u10e3\u10dc\u10d4\u10d1\u10e3\u10da\u10d8 \u10ee\u10d0\u10e0\u10d7, \u10e0\u10dd\u10db \u10d2\u10e1\u10e3\u10e0\u10d7 \u10e7\u10d5\u10d4\u10da\u10d0\u10e4\u10d4\u10e0\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0",path:"\u10e2\u10d4\u10d2\u10d4\u10d1\u10d8","clipboard_msg":"\u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0, \u10d0\u10db\u10dd\u10ed\u10e0\u10d0 \u10d3\u10d0 \u10e9\u10d0\u10e1\u10db\u10d0 Firefox-\u10e8\u10d8 \u10d0\u10e0 \u10db\u10e3\u10e8\u10d0\u10dd\u10d1\u10e1.\\r\n\u10d2\u10e1\u10e3\u10e0\u10d7 \u10db\u10d8\u10d8\u10e6\u10dd\u10d7 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d8\u10d7\u10d8 \u10d8\u10dc\u10e4\u10dd\u10e0\u10db\u10d0\u10ea\u10d8\u10d0?","blockquote_desc":"\u10ea\u10d8\u10e2\u10d0\u10e2\u10d0","help_desc":"\u10d3\u10d0\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10d0","newdocument_desc":"\u10d0\u10ee\u10d0\u10da\u10d8 \u10d3\u10dd\u10d9\u10e3\u10db\u10d4\u10dc\u10e2\u10d8","image_props_desc":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","paste_desc":"\u10e9\u10d0\u10e1\u10db\u10d0","copy_desc":"\u10d9\u10dd\u10de\u10d8\u10e0\u10d4\u10d1\u10d0","cut_desc":"\u10d0\u10db\u10dd\u10ed\u10e0\u10d0","anchor_desc":"\u10e6\u10e3\u10d6\u10d0\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","visualaid_desc":"\u10e7\u10d5\u10d4\u10da\u10d0 \u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd","charmap_desc":"\u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","backcolor_desc":"\u10db\u10dd\u10dc\u10d8\u10e1\u10dc\u10e3\u10da\u10d8 \u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","forecolor_desc":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e4\u10d4\u10e0\u10d8","custom1_desc":"\u10e1\u10d0\u10d9\u10e3\u10d7\u10d0\u10e0\u10d8 \u10d0\u10e6\u10ec\u10d4\u10e0\u10d0","removeformat_desc":"\u10e4\u10dd\u10e0\u10db\u10d0\u10e2\u10d8\u10e1 \u10d2\u10d0\u10ec\u10db\u10d4\u10dc\u10d3\u10d0","hr_desc":"\u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0","sup_desc":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d6\u10d4\u10db\u10dd\u10d7","sub_desc":"\u10e1\u10e2\u10d8\u10e0\u10e5\u10dd\u10dc\u10d8\u10e1 \u10e5\u10d5\u10d4\u10db\u10dd\u10d7","code_desc":"HTML \u10d9\u10dd\u10d3\u10d8\u10e1 \u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","cleanup_desc":"\u10d6\u10d4\u10d3\u10db\u10d4\u10e2\u10d8 \u10d9\u10dd\u10d3\u10d8\u10e1\u10d0\u10d2\u10d0\u10dc \u10d2\u10d0\u10ec\u10db\u10d4\u10dc\u10d3\u10d0","image_desc":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10d8\u10e0\u10d4\u10d1\u10d0","unlink_desc":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10ec\u10d0\u10e8\u10da\u10d0","link_desc":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10d3\u10d0\u10db\u10d0\u10e2\u10d4\u10d1\u10d0/\u10e8\u10d4\u10ea\u10d5\u10da\u10d0","redo_desc":"\u10d3\u10d0\u10d1\u10e0\u10e3\u10dc\u10d4\u10d1\u10d0 (Ctrl+Y)","undo_desc":"\u10d2\u10d0\u10e3\u10e5\u10db\u10d4\u10d1\u10d0 (Ctrl+Z)","indent_desc":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d8\u10e1 \u10d2\u10d0\u10d6\u10e0\u10d3\u10d0","outdent_desc":"\u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d8\u10e1 \u10e8\u10d4\u10db\u10ea\u10d8\u10e0\u10d4\u10d1\u10d0","numlist_desc":"\u10d3\u10d0\u10dc\u10dd\u10db\u10e0\u10d8\u10da\u10d8 \u10e1\u10d8\u10d0","bullist_desc":"\u10db\u10d0\u10e0\u10d9\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8 \u10e1\u10d8\u10d0","justifyfull_desc":"\u10e1\u10d8\u10d2\u10d0\u10dc\u10d4\u10d6\u10d4","justifyright_desc":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ef\u10d5\u10dc\u10d8\u10d5","justifycenter_desc":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0 \u10ea\u10d4\u10dc\u10e2\u10e0\u10d6\u10d4","justifyleft_desc":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0 \u10db\u10d0\u10e0\u10ea\u10ee\u10dc\u10d8\u10d5","striketrough_desc":"\u10d2\u10d0\u10d3\u10d0\u10ee\u10d0\u10d6\u10e3\u10da\u10d8","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ka_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ka_dlg.js
new file mode 100644
index 000000000..a25659f34
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ka_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.advanced_dlg',{"link_list":"\u10d1\u10db\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0","link_is_external":"\u10e8\u10d4\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10d2\u10d0\u10d5\u10e1 \u10d2\u10d0\u10e0\u10d4 \u10d1\u10db\u10e3\u10da\u10e1, \u10d3\u10d0\u10d5\u10d0\u10db\u10d0\u10d7\u10dd\u10e2 \u10de\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8 http://?","link_is_email":"\u10e8\u10d4\u10e7\u10d5\u10d0\u10dc\u10d8\u10da\u10d8 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8 \u10d2\u10d0\u10d5\u10e1 \u10d4\u10da.\u10e4\u10dd\u10e1\u10e2\u10d8\u10e1 \u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10e1, \u10d3\u10d0\u10d5\u10d0\u10db\u10d0\u10e2\u10dd\u10d7 \u10de\u10e0\u10d4\u10e4\u10d8\u10e5\u10e1\u10d8 mailto:?","link_titlefield":"\u10e1\u10d0\u10d7\u10d0\u10e3\u10e0\u10d8","link_target_blank":"\u10d0\u10ee\u10d0\u10da \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","link_target_same":"\u10db\u10dd\u10ea\u10d4\u10db\u10e3\u10da \u10e4\u10d0\u10dc\u10ef\u10d0\u10e0\u10d0\u10e8\u10d8 \u10d2\u10d0\u10ee\u10e1\u10dc\u10d0","link_target":"\u10db\u10d8\u10d6\u10d0\u10dc\u10d8","link_url":"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8","link_title":"\u10d1\u10db\u10e3\u10da\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","image_align_right":"\u10db\u10d0\u10e0\u10ef\u10d5\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_left":"\u10db\u10d0\u10e0\u10ea\u10ee\u10d4\u10dc\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_textbottom":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_texttop":"\u10e2\u10d4\u10e5\u10e1\u10e2\u10d8\u10e1 \u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_bottom":"\u10e5\u10d5\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_middle":"\u10ea\u10d4\u10dc\u10e2\u10e0\u10d6\u10d4","image_align_top":"\u10d6\u10d4\u10d3\u10d0 \u10d9\u10d8\u10d3\u10d4\u10d6\u10d4","image_align_baseline":"\u10e1\u10d0\u10d1\u10d0\u10d6\u10e1\u10dd \u10ee\u10d0\u10d6\u10d8\u10e1 \u10db\u10d8\u10ee\u10d4\u10d3\u10d5\u10d8\u10d7","image_align":"\u10d2\u10d0\u10e1\u10ec\u10dd\u10e0\u10d4\u10d1\u10d0","image_hspace":"\u10f0\u10dd\u10e0\u10d8\u10d6\u10dd\u10dc\u10e2. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","image_vspace":"\u10d5\u10d4\u10e0\u10e2. \u10d3\u10d0\u10e8\u10dd\u10e0\u10d4\u10d1\u10d0","image_dimensions":"\u10d6\u10dd\u10db\u10d0","image_alt":"\u10d0\u10e6\u10ec\u10d4\u10e0\u10d0","image_list":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d4\u10d1\u10d8\u10e1 \u10e1\u10d8\u10d0","image_border":"\u10e9\u10d0\u10e0\u10e9\u10dd","image_src":"\u10db\u10d8\u10e1\u10d0\u10db\u10d0\u10e0\u10d7\u10d8","image_title":"\u10d2\u10d0\u10db\u10dd\u10e1\u10d0\u10ee\u10e3\u10da\u10d4\u10d1\u10d8\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","charmap_title":"\u10e1\u10d8\u10db\u10d1\u10dd\u10da\u10dd\u10e1 \u10d0\u10e0\u10e9\u10d4\u10d5\u10d0","colorpicker_name":"\u10e1\u10d0\u10ee\u10d4\u10da\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0:","colorpicker_color":"\u10d9\u10dd\u10d3\u10d8:","colorpicker_named_title":"\u10e4\u10d4\u10e0\u10d4\u10d1\u10d8","colorpicker_named_tab":"\u10e1\u10d0\u10ee\u10d4\u10da\u10ec\u10dd\u10d3\u10d4\u10d1\u10d0","colorpicker_palette_title":"\u10e4\u10d4\u10e0\u10d4\u10d1\u10d8","colorpicker_palette_tab":"\u10de\u10d0\u10da\u10d8\u10e2\u10e0\u10d0","colorpicker_picker_title":"\u10e4\u10d4\u10e0\u10d7\u10d0 \u10e8\u10d4\u10db\u10e0\u10e9\u10d4\u10d5\u10d8","colorpicker_picker_tab":"\u10e1\u10de\u10d4\u10e5\u10e2\u10e0\u10d8","colorpicker_title":"\u10d0\u10d5\u10d8\u10e0\u10e9\u10d8\u10dd\u10d7 \u10e4\u10d4\u10e0\u10d8","code_wordwrap":"\u10e1\u10e2\u10e0\u10d8\u10e5\u10dd\u10dc\u10d8\u10e1 \u10d2\u10d0\u10d3\u10d0\u10e2\u10d0\u10dc\u10d0","code_title":"HTML \u10d9\u10dd\u10d3\u10d8\u10e1 \u10e0\u10d4\u10d3\u10d0\u10e5\u10e2\u10dd\u10e0\u10d8","anchor_name":"\u10e6\u10e3\u10d6\u10d0\u10e1 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8","anchor_title":"\u10e6\u10e3\u10d6\u10d0\u10e1 \u10de\u10d0\u10e0\u10d0\u10db\u10d4\u10e2\u10e0\u10d4\u10d1\u10d8","about_loaded":"\u10db\u10d8\u10db\u10d0\u10d2\u10e0\u10d4\u10d1\u10e3\u10da\u10d8 \u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d4\u10d1\u10d8","about_version":"\u10d5\u10d4\u10e0\u10e1\u10d8\u10d0","about_author":"\u10d0\u10d5\u10e2\u10dd\u10e0\u10d8","about_plugin":"\u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d8","about_plugins":"\u10de\u10da\u10d0\u10d2\u10d8\u10dc\u10d4\u10d1\u10d8","about_license":"\u10da\u10d8\u10ea\u10d4\u10dc\u10d6\u10d8\u10d0","about_help":"\u10d3\u10d0\u10ee\u10db\u10d0\u10e0\u10d4\u10d1\u10d0","about_general":"\u10d0\u10e6\u10ec\u10d4\u10e0\u10d8\u10da\u10dd\u10d1\u10d0","about_title":"TinyMCE \u10d0\u10e6\u10ec\u10d4\u10e0\u10d8\u10da\u10dd\u10d1\u10d0","anchor_invalid":"\u10e8\u10d4\u10d8\u10e7\u10d5\u10d0\u10dc\u10d4\u10d7 \u10e6\u10e3\u10d6\u10d0\u10e1 \u10d9\u10dd\u10e0\u10d4\u10e5\u10e2\u10e3\u10da\u10d8 \u10e1\u10d0\u10ee\u10d4\u10da\u10d8.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kl.js
new file mode 100644
index 000000000..e23a1f408
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kl_dlg.js
new file mode 100644
index 000000000..df510b4cd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/km.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/km.js
new file mode 100644
index 000000000..441571d2c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/km.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.advanced',{"underline_desc":"\u1782\u17bc\u179f\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1780\u17d2\u179a\u17c4\u1798 (Ctrl+U)","italic_desc":"\u1791\u17d2\u179a\u17c1\u178f (Ctrl+I)","bold_desc":"\u178a\u17b7\u178f (Ctrl+B)",dd:"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u1793\u17b7\u1799\u1798\u1793\u17d0\u1799",dt:"\u1793\u17b7\u1799\u1798\u1793\u17d0\u1799\u1796\u17b6\u1780\u17d2\u1799",samp:"\u1782\u17c6\u179a\u17bc\u1780\u17bc\u178a",code:"\u1780\u17bc\u178a",blockquote:"\u179f\u1798\u17d2\u179a\u1784\u17cb\u1794\u178e\u17d2\u178f\u17bb\u17c6",h6:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e6",h5:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e5",h4:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e4",h3:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e3",h2:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e2",h1:"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784\u1792\u17c6\u17e1",pre:"\u1792\u17d2\u179c\u17be\u1791\u17d2\u179a\u1784\u17cb\u1791\u17d2\u179a\u17b6\u1799\u1787\u17b6\u1798\u17bb\u1793",address:"\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793",div:"\u179f\u17d2\u179b\u17b6\u1780DIV",paragraph:"\u1780\u1790\u17b6\u1781\u178e\u17d2\u178c",block:"\u1791\u17d2\u179a\u1784\u17cb\u1791\u17d2\u179a\u17b6\u1799",fontdefault:"\u1782\u17d2\u179a\u17bd\u179f\u17b6\u179a\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a","font_size":"\u1791\u17c6\u17a0\u17c6\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a","style_select":"\u179a\u1785\u1793\u17b6\u1794\u17d0\u1791\u17d2\u1798","anchor_delta_height":"10","anchor_delta_width":"0","charmap_delta_height":"10","charmap_delta_width":"0","colorpicker_delta_height":"0","colorpicker_delta_width":"0","link_delta_height":"20","link_delta_width":"5","more_colors":"\u1796\u178e\u17cc\u1795\u17d2\u179f\u17c1\u1784\u1791\u17c0\u178f","toolbar_focus":"\u179b\u17c4\u178f\u1791\u17c5\u1786\u17d2\u1793\u17bb\u1785\u17a7\u1794\u1780\u179a\u178e\u17cd\u17d6 Alt+Q\u00a0\u17d4 \u179b\u17c4\u178f\u1791\u17c5\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1793\u17b7\u1796\u1793\u17d2\u1792\u17d6 Alt-Z\u00a0\u17d4 \u179b\u17c4\u178f\u1791\u17c5\u1795\u17d2\u179b\u17bc\u179c\u1792\u17b6\u178f\u17bb\u17d6 Alt-X",newdocument:"\u178f\u17be\u17a2\u17d2\u1793\u1780\u1794\u17d2\u179a\u17b6\u1780\u178a\u1787\u17b6\u1785\u1784\u17cb\u179f\u17c6\u17a2\u17b6\u178f\u1798\u17b6\u178f\u17b7\u1780\u17b6\u1791\u17b6\u17c6\u1784\u17a2\u179f\u17cb\u17ac?",path:"\u1795\u17d2\u179b\u17bc\u179c","clipboard_msg":"\u1785\u1798\u17d2\u179b\u1784/\u1780\u17b6\u178f\u17cb/\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb \u1798\u17b7\u1793\u17a2\u17b6\u1785\u1792\u17d2\u179c\u17be\u1794\u17b6\u1793\u1780\u17d2\u1793\u17bb\u1784 Mozilla \u1793\u17b7\u1784 Firefox\u17d4 n\u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u1794\u17b6\u1793\u1796\u17d0\u178f\u17cc\u1798\u17b6\u1793\u1794\u1793\u17d2\u1790\u17c2\u1798\u17a2\u17c6\u1796\u17b8\u1794\u1789\u17d2\u17a0\u17b6\u1793\u17c1\u17c7\u1791\u17c1?","blockquote_desc":"\u179f\u1798\u17d2\u179a\u1784\u17cb\u1794\u178e\u17d2\u178f\u17bb\u17c6","help_desc":"\u1787\u17c6\u1793\u17bd\u1799","newdocument_desc":"\u17af\u1780\u179f\u17b6\u179a\u1790\u17d2\u1798\u17b8","image_props_desc":"\u179b\u1780\u17d2\u1781\u178e\u17c8\u179f\u1798\u17d2\u1794\u178f\u17d2\u178f\u17b7\u179a\u17bc\u1794\u1797\u17b6\u1796","paste_desc":"\u1794\u17b7\u1791\u1797\u17d2\u1787\u17b6\u1794\u17cb","copy_desc":"\u1785\u1798\u17d2\u179b\u1784","cut_desc":"\u1780\u17b6\u178f\u17cb","anchor_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1799\u17bb\u1790\u17d2\u1780\u17b6","visualaid_desc":"\u1794\u17b7\u1791\u1794\u17be\u1780\u1794\u178e\u17d2\u178f\u17b6\u1782\u17c4\u179b\u1780\u17b6\u179a\u178e\u17cd\u178e\u17c2\u1793\u17b6\u17c6/\u1792\u17b6\u178f\u17bb\u1795\u17d2\u179f\u17c1\u1784\u17d7\u178a\u17c2\u179b\u1798\u17be\u179b\u1798\u17b7\u1793\u1783\u17be\u1789","charmap_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u1795\u17d2\u1791\u17b6\u179b\u17cb\u1781\u17d2\u179b\u17bd\u1793","backcolor_desc":"\u1787\u17d2\u179a\u17be\u179f\u1796\u178e\u17cc\u1795\u17d2\u1791\u17c3\u1781\u17b6\u1784\u1780\u17d2\u179a\u17c4\u1799","forecolor_desc":"\u1787\u17d2\u179a\u17be\u179f\u1796\u178e\u17cc\u17a2\u178f\u17d2\u1790\u1794\u1791","custom1_desc":"\u1780\u17b6\u179a\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u1795\u17d2\u1791\u17b6\u179b\u17cb\u1781\u17d2\u179b\u17bd\u1793\u179a\u1794\u179f\u17cb\u17a2\u17d2\u1793\u1780\u1793\u17c5\u1791\u17b8\u1793\u17c1\u17c7","removeformat_desc":"\u1799\u1780\u1791\u17d2\u179a\u1784\u17cb\u1791\u17d2\u179a\u17b6\u1799\u1785\u17c1\u1789","hr_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1795\u17d2\u178f\u17c1\u1780","sup_desc":"\u17a2\u1780\u17d2\u179f\u179a\u178f\u17bc\u1785\u179b\u17be","sub_desc":"\u17a2\u1780\u17d2\u179f\u179a\u178f\u17bc\u1785\u1780\u17d2\u179a\u17c4\u1798","code_desc":"\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1794\u17d2\u179a\u1797\u1796 HTML","cleanup_desc":"\u179f\u17c6\u17a2\u17b6\u178f\u1780\u17bc\u178a\u179f\u17d2\u1798\u17bb\u1782\u179f\u17d2\u1798\u17b6\u1789","image_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u17bc\u1794\u1797\u17b6\u1796","unlink_desc":"\u179f\u17d2\u179a\u17b6\u1799\u178f\u17c6\u178e","link_desc":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u178f\u17c6\u178e","redo_desc":"\u1792\u17d2\u179c\u17be\u179c\u17b7\u1789 (Ctrl+Y)","undo_desc":"\u1798\u17b7\u1793\u1792\u17d2\u179c\u17be\u179c\u17b7\u1789 (Ctrl+Z)","indent_desc":"\u1785\u17bc\u179b\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb","outdent_desc":"\u1785\u17c1\u1789\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb","numlist_desc":"\u1794\u1789\u17d2\u1787\u17b8\u1798\u17b6\u1793\u179b\u17c6\u178a\u17b6\u1794\u17cb","bullist_desc":"\u1794\u1789\u17d2\u1787\u17b8\u1782\u17d2\u1798\u17b6\u1793\u179b\u17c6\u178a\u17b6\u1794\u17cb","justifyfull_desc":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u1796\u17c1\u1789","justifyright_desc":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u179f\u17d2\u178f\u17b6\u17c6","justifycenter_desc":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u1780\u178e\u17d2\u178f\u17b6\u179b","justifyleft_desc":"\u178f\u1798\u17d2\u179a\u17b9\u1798\u1786\u17d2\u179c\u17c1\u1784","striketrough_desc":"\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1786\u17bc\u178f","help_shortcut":"\u1785\u17bb\u1785 ALT-F10 \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u179a\u1794\u17b6\u179a\u17a7\u1794\u1780\u179a\u178e\u17cd\u00a0\u17d4 \u1785\u17bb\u1785 ALT-0 \u179f\u1798\u17d2\u179a\u17b6\u1794\u17cb\u1787\u17c6\u1793\u17bd\u1799","rich_text_area":"\u178f\u17c6\u1794\u1793\u17cb\u17a2\u178f\u17d2\u1790\u1794\u1791\u179f\u1798\u17d2\u1794\u17bc\u179a\u1794\u17c2\u1794","shortcuts_desc":"\u1787\u17c6\u1793\u17bd\u1799\u1798\u1792\u17d2\u1799\u17c4\u1794\u17b6\u1799\u1784\u17b6\u1799\u179f\u17d2\u179a\u17bd\u179b",toolbar:"\u179a\u1794\u17b6\u179a\u17a7\u1794\u1780\u179a\u178e\u17cd","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/km_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/km_dlg.js
new file mode 100644
index 000000000..a722cbe5d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/km_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.advanced_dlg',{"link_list":"\u1794\u1789\u17d2\u1787\u17b8\u178f\u17c6\u178e","link_is_external":"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c6\u1793\u1784\u1787\u17b6\u178f\u17c6\u178e\u1780\u17d2\u179a\u17c5, \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u179a\u179f\u17c1\u179a http:// \u1793\u17c5\u178a\u17be\u1798\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17c1?","link_is_email":"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u178a\u17c2\u179b\u17a2\u17d2\u1793\u1780\u1794\u17b6\u1793\u1794\u1789\u17d2\u1785\u17bc\u179b\u1791\u17c6\u1793\u1784\u1787\u17b6\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u17a2\u17ca\u17b8\u1798\u17c2\u179b \u178f\u17be\u17a2\u17d2\u1793\u1780\u1785\u1784\u17cb\u179f\u179a\u179f\u17c1\u179a mailto: \u1793\u17c5\u178a\u17be\u1798\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u1791\u17c1?","link_titlefield":"\u1785\u17c6\u178e\u1784\u1787\u17be\u1784","link_target_blank":"\u1794\u17be\u1780\u178f\u17c6\u178e\u1780\u17d2\u1793\u17bb\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u1790\u17d2\u1798\u17b8","link_target_same":"\u1794\u17be\u1780\u178f\u17c6\u178e\u1780\u17d2\u1793\u17bb\u1784\u1794\u1784\u17d2\u17a2\u17bd\u1785\u178f\u17c2\u1798\u17bd\u1799","link_target":"\u1782\u17c4\u179b\u178a\u17c5","link_url":"\u17a2\u17b6\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793URL\u178f\u17c6\u178e","link_title":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u178f\u17c6\u178e","image_align_right":"\u179f\u17d2\u178f\u17b6\u17c6","image_align_left":"\u1786\u17d2\u179c\u17c1\u1784","image_align_textbottom":"\u1780\u17d2\u179a\u17c4\u1798\u17a2\u178f\u17d2\u1790\u1794\u1791","image_align_texttop":"\u179b\u17be\u17a2\u178f\u17d2\u1790\u1794\u1791","image_align_bottom":"\u1780\u17d2\u179a\u17c4\u1798","image_align_middle":"\u1780\u178e\u17d2\u178f\u17b6\u179b","image_align_top":"\u179b\u17be","image_align_baseline":"\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1782\u17c4\u179b","image_align":"\u1780\u17b6\u179a\u178f\u1798\u17d2\u179a\u17b9\u1798","image_hspace":"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1795\u17d2\u178f\u17c1\u1780","image_vspace":"\u1782\u1798\u17d2\u179b\u17b6\u178f\u1794\u1789\u17d2\u1788\u179a","image_dimensions":"\u179c\u17b7\u1798\u17b6\u178f\u17d2\u179a","image_alt":"\u1796\u17b7\u1796\u178e\u17cc\u1793\u17b6\u179a\u17bc\u1794\u1797\u17b6\u1796","image_list":"\u1794\u1789\u17d2\u1787\u17b8\u179a\u17bc\u1794\u1797\u17b6\u1796","image_border":"\u179f\u17ca\u17bb\u1798","image_src":"\u17a2\u179f\u1799\u178a\u17d2\u178b\u17b6\u1793\u179a\u17bc\u1794\u1797\u17b6\u1796","image_title":"\u1794\u1789\u17d2\u1785\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u179a\u17bc\u1794\u1797\u17b6\u1796","charmap_title":"\u1787\u17d2\u179a\u17be\u179f\u178f\u17bd\u17a2\u1780\u17d2\u179f\u179a\u1795\u17d2\u1791\u17b6\u179b\u17cb\u1781\u17d2\u179b\u17bd\u1793","colorpicker_name":"\u1788\u17d2\u1798\u17c4\u17c7\u17d6","colorpicker_color":"\u1796\u178e\u17cc\u17d6","colorpicker_named_title":"\u1780\u17d2\u178f\u17b6\u179a\u179b\u17b6\u1799\u1796\u178e\u17cc","colorpicker_named_tab":"\u1794\u17b6\u1793\u1795\u17d2\u178f\u179b\u17cb\u1788\u17d2\u1798\u17c4\u17c7","colorpicker_palette_title":"\u1780\u17d2\u178f\u17b6\u179a\u179b\u17b6\u1799\u1796\u178e\u17cc","colorpicker_palette_tab":"\u1780\u17d2\u178f\u17b6\u179a\u179b\u17b6\u1799","colorpicker_picker_title":"\u1794\u17d2\u179a\u178a\u17b6\u1794\u17cb\u1787\u17d2\u179a\u17be\u179f\u1796\u178e\u17cc","colorpicker_picker_tab":"\u1794\u17d2\u179a\u178a\u17b6\u1794\u17cb\u1787\u17d2\u179a\u17be\u179f","colorpicker_title":"\u1787\u17d2\u179a\u17be\u179f\u1796\u178e\u17cc","code_wordwrap":"\u1794\u1784\u17d2\u1781\u17c6\u1785\u17bb\u17c7\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb","code_title":"\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1793\u17b7\u1796\u1793\u17d2\u1792\u1792\u1793\u1792\u17b6\u1793 HTML","anchor_name":"\u1788\u17d2\u1798\u17c4\u17c7\u1799\u17bb\u1790\u17d2\u1780\u17b6","anchor_title":"\u1794\u1789\u17d2\u1787\u17bc\u179b/\u1780\u17c2\u179f\u1798\u17d2\u179a\u17bd\u179b\u1799\u17bb\u1790\u17d2\u1780\u17b6","about_loaded":"\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1787\u17c6\u1793\u17bd\u1799\u1794\u17b6\u1793\u1795\u17d2\u1791\u17bb\u1780","about_version":"\u1780\u17c6\u178e\u17c2","about_author":"\u17a2\u17d2\u1793\u1780\u1793\u17b7\u1796\u1793\u17d2\u1792","about_plugin":"\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1787\u17c6\u1793\u17bd\u1799","about_plugins":"\u1780\u1798\u17d2\u1798\u179c\u17b7\u1792\u17b8\u1787\u17c6\u1793\u17bd\u1799","about_license":"\u17a2\u1787\u17d2\u1789\u17b6\u1794\u178e\u17d2\u178e","about_help":"\u1787\u17c6\u1793\u17bd\u1799","about_general":"\u17a2\u17c6\u1796\u17b8","about_title":"\u17a2\u17c6\u1796\u17b8 TinyMCE","charmap_usage":"\u1794\u17d2\u179a\u17be\u179f\u1789\u17d2\u1789\u17b6\u1796\u17d2\u179a\u17bd\u1789\u1786\u17d2\u179c\u17c1\u1784 \u1793\u17b7\u1784\u179f\u17d2\u178a\u17b6\u17c6\u178a\u17be\u1798\u17d2\u1794\u17b8\u1793\u17b6\u17c6\u1791\u17b7\u179f\u00a0\u17d4","anchor_invalid":"\u179f\u17bc\u1798\u1794\u1789\u17d2\u1787\u17b6\u1780\u17cb\u1788\u17d2\u1798\u17c4\u17c7\u1799\u17bb\u1790\u17d2\u1780\u17b6\u178f\u17d2\u179a\u17b9\u1798\u178f\u17d2\u179a\u17bc\u179c\u00a0\u17d4","accessibility_help":"\u1787\u17c6\u1793\u17bd\u1799\u1784\u17b6\u1799\u179f\u17d2\u179a\u17bd\u179b","accessibility_usage_title":"\u1794\u1798\u17d2\u179a\u17be\u1794\u1798\u17d2\u179a\u17b6\u179f\u17cb\u1791\u17bc\u1791\u17c5"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ko.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ko.js
new file mode 100644
index 000000000..43a436801
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ko.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.advanced',{"underline_desc":"\ubc11\uc904(Ctrl-U)","italic_desc":"\uae30\uc6b8\uc778 \uae00\uaf34(Ctrl-I)","bold_desc":"\uad75\uc740 \uae00\uaf34(Ctrl-B)",dd:"\uc815\uc758 \uc124\uba85",dt:"\uc815\uc758 \uc5b4\uad6c",samp:"\ucf54\ub4dc \uc608\uc2dc",code:"\ucf54\ub4dc",blockquote:"\uc778\uc6a9\ubb38",h6:"\ud45c\uc81c6",h5:"\ud45c\uc81c5",h4:"\ud45c\uc81c4",h3:"\ud45c\uc81c3",h2:"\ud45c\uc81c2",h1:"\ud45c\uc81c1",pre:"pre",address:"\uc8fc\uc18c",div:"Div",paragraph:"\ub2e8\ub77d",block:"\ud615\uc2dd",fontdefault:"\uae00\uaf34\uad70","font_size":"\uae00\uaf34 \ud06c\uae30","style_select":"\uc11c\uc2dd","more_colors":"\uadf8 \uc678\uc758 \uc0c9","toolbar_focus":"\ubc84\ud2bc\uc73c\ub85c \uc810\ud504 - Alt-Q, \uc5d0\ub514\ud130\ub85c \uc810\ud504 - Alt-Z, Jump to element path - Alt-X",newdocument:"\uc815\ub9d0 \ubaa8\ub4e0 \ub0b4\uc6a9\uc744 \uc9c0\uc6b0\uc2dc\uaca0\uc2b5\ub2c8\uae4c?",path:"\uacbd\ub85c","clipboard_msg":"Mozilla \ubc0f Firefox\uc5d0\uc11c\ub294 \ubcf5\uc0ac/\uc798\ub77c\ub0b4\uae30/\ubd99\uc774\uae30\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc774 \ubb38\uc81c\uc5d0 \ub300\ud574 \ub354 \uc790\uc138\ud55c \uc0ac\ud56d\uc744 \ubcf4\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","blockquote_desc":"\uc778\uc6a9\ubb38","help_desc":"\ub3c4\uc6c0\ub9d0","newdocument_desc":"\uc0c8 \ubb38\uc11c","image_props_desc":"\uc774\ubbf8\uc9c0 \uc18d\uc131","paste_desc":"\ubd99\uc774\uae30(Ctrl-V)","copy_desc":"\ubcf5\uc0ac(Ctrl-C)","cut_desc":"\uc798\ub77c\ub0b4\uae30(Ctrl-X)","anchor_desc":"\uc575\ucee4 \uc0bd\uc785/\ud3b8\uc9d1","visualaid_desc":"\uc548\ub0b4\uc120 \ubc0f \ubcf4\uc774\uc9c0 \uc54a\ub294 \uc694\uc18c \ubcf4\uc784/\uc228\uae40","charmap_desc":"\ud2b9\uc218 \ubb38\uc790 \uc0bd\uc785","backcolor_desc":"\ubc30\uacbd\uc0c9 \uc120\ud0dd","forecolor_desc":"\uae00\uc790\uc0c9 \uc120\ud0dd","custom1_desc":"\uc5ec\uae30\uc5d0 \uc124\uba85 \uc785\ub825","removeformat_desc":"\ud615\uc2dd \ud574\uc81c","hr_desc":"\uad6c\ubd84\uc120 \uc0bd\uc785","sup_desc":"\uc704\ucca8\uc790","sub_desc":"\uc544\ub798\ucca8\uc790","code_desc":"HTML \uc18c\uc2a4 \ud3b8\uc9d1","cleanup_desc":"\ubcf5\uc7a1\ud55c \ucf54\ub4dc \uc815\ub9ac","image_desc":"\uc774\ubbf8\uc9c0 \uc0bd\uc785/\ud3b8\uc9d1","unlink_desc":"\ub9c1\ud06c \ud574\uc81c","link_desc":"\ub9c1\ud06c \uc0bd\uc785/\ud3b8\uc9d1","redo_desc":"\uc7ac\uc2e4\ud589(Ctrl-Y)","undo_desc":"\uc2e4\ud589 \ucde8\uc18c(Ctrl-Z)","indent_desc":"\ub354 \ub4e4\uc5ec\uc4f0\uae30","outdent_desc":"\ub354 \ub0b4\uc5b4\uc4f0\uae30","numlist_desc":"\ubc88\ud638 \ubaa9\ub85d \uc0bd\uc785/\uc81c\uac70","bullist_desc":"\uae30\ud638 \ubaa9\ub85d \uc0bd\uc785/\uc81c\uac70","justifyfull_desc":"\uc591\ucabd \ub9de\ucda4","justifyright_desc":"\uc624\ub978\ucabd \ub9de\ucda4","justifycenter_desc":"\uac00\uc6b4\ub370 \ub9de\ucda4","justifyleft_desc":"\uc67c\ucabd \ub9de\ucda4","striketrough_desc":"\ucde8\uc18c\uc120","help_shortcut":"\ub3c4\uad6c \ubaa8\uc74c\uc740 ALT-F10\uc744, \ub3c4\uc6c0\ub9d0\uc740 ALT-0\uc744 \ub204\ub974\uc138\uc694.",toolbar:"\ub3c4\uad6c \ubaa8\uc74c","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ko_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ko_dlg.js
new file mode 100644
index 000000000..4bdb79f18
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ko_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.advanced_dlg',{"link_list":"\ub9c1\ud06c \ubaa9\ub85d","link_is_external":"\uc785\ub825\ud558\uc2e0 URL\uc740 \uc678\ubd80 \ub9c1\ud06c\ub85c \ud310\ub2e8\ub429\ub2c8\ub2e4. URL \uc55e\uc5d0 \ud544\uc218\uc801\uc778 http://\ub97c \ubd99\uc774\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","link_is_email":"\uc785\ub825\ud558\uc2e0 URL\uc740 e\uba54\uc77c \uc8fc\uc18c\ub85c \ud310\ub2e8\ub429\ub2c8\ub2e4. URL \uc55e\uc5d0 \ud544\uc218\uc801\uc778 mailto:\ub97c \ubd99\uc774\uc2dc\uaca0\uc2b5\ub2c8\uae4c?","link_titlefield":"\uc81c\ubaa9","link_target_blank":"\uc0c8 \ucc3d\uc5d0\uc11c \ub9c1\ud06c \uc5f4\uae30","link_target_same":"\uac19\uc740 \ucc3d\uc5d0\uc11c \ub9c1\ud06c \uc5f4\uae30","link_target":"Target","link_url":"\ub9c1\ud06c URL","link_title":"\ub9c1\ud06c \uc0bd\uc785/\ud3b8\uc9d1","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"\uae30\uc900\uc120","image_align":"\uc904 \ub9de\ucda4","image_hspace":"\uc88c\uc6b0 \uc5ec\ubc31","image_vspace":"\uc0c1\ud558 \uc5ec\ubc31","image_dimensions":"\ud06c\uae30","image_alt":"\uc774\ubbf8\uc9c0 \uc124\uba85","image_list":"\uc774\ubbf8\uc9c0 \ubaa9\ub85d","image_border":"\ud14c\ub450\ub9ac\uc120","image_src":"\uc774\ubbf8\uc9c0 URL","image_title":"\uc774\ubbf8\uc9c0 \uc0bd\uc785/\ud3b8\uc9d1","charmap_title":"\ud2b9\uc218 \ubb38\uc790 \uc120\ud0dd","colorpicker_name":"\uc774\ub984:","colorpicker_color":"\uc0c9:","colorpicker_named_title":"\uc0c9 \uc774\ub984","colorpicker_named_tab":"\uc0c9 \uc774\ub984","colorpicker_palette_title":"\ud314\ub808\ud2b8 \uc0c9","colorpicker_palette_tab":"\ud314\ub808\ud2b8","colorpicker_picker_title":"\uc0c9 \uc120\ud0dd\uae30","colorpicker_picker_tab":"\uc120\ud0dd\uae30","colorpicker_title":"\uc0c9 \uc120\ud0dd","code_wordwrap":"\uc904\ubc14\uafc8","code_title":"HTML \uc18c\uc2a4 \ud3b8\uc9d1","anchor_name":"\uc575\ucee4 \uba85","anchor_title":"\uc575\ucee4 \uc0bd\uc785/\ud3b8\uc9d1","about_loaded":"\ub85c\ub529\ud55c \ud50c\ub7ec\uadf8\uc778","about_version":"\ubc84\uc804","about_author":"\uc81c\uc791\uc790","about_plugin":"\ud50c\ub7ec\uadf8\uc778","about_plugins":"\ud50c\ub7ec\uadf8\uc778","about_license":"\ub77c\uc774\uc120\uc2a4","about_help":"\ub3c4\uc6c0\ub9d0","about_general":"\ud504\ub85c\uadf8\ub7a8 \uc815\ubcf4","about_title":"TinyMCE \uc815\ubcf4","charmap_usage":"\uc88c\uc6b0 \ud654\uc0b4\ud45c\ub97c \uc0ac\uc6a9\ud574 \uc120\ud0dd\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.","anchor_invalid":"\uc801\uc808\ud55c \uc575\ucee4 \uba85\uc744 \uc9c0\uc815\ud574\uc8fc\uc138\uc694.","accessibility_usage_title":"\uc77c\ubc18 \uc0ac\uc6a9\ubc95","invalid_color_value":"\uc0c9 \uac12\uc774 \ubd80\uc801\ud569\ud568","accessibility_help":"Accessibility Help"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kz.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kz.js
new file mode 100644
index 000000000..27c302959
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kz.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition Description",dt:"Definition Term ",samp:"Code Sample",code:"Code",blockquote:"Block Quote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"DIV",paragraph:"Paragraph",block:"Format",fontdefault:"Font Family","font_size":"Font Size","style_select":"Styles","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Block Quote","help_desc":"Help","newdocument_desc":"New Document","image_props_desc":"Image Properties","paste_desc":"Paste (Ctrl+V)","copy_desc":"Copy (Ctrl+C)","cut_desc":"Cut (Ctrl+X)","anchor_desc":"Insert/Edit Anchor","visualaid_desc":"show/Hide Guidelines/Invisible Elements","charmap_desc":"Insert Special Character","backcolor_desc":"Select Background Color","forecolor_desc":"Select Text Color","custom1_desc":"Your Custom Description Here","removeformat_desc":"Remove Formatting","hr_desc":"Insert Horizontal Line","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup Messy Code","image_desc":"Insert/Edit Image","unlink_desc":"Unlink","link_desc":"Insert/Edit Link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Increase Indent","outdent_desc":"Decrease Indent","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","justifyfull_desc":"Align Full","justifyright_desc":"Align Right","justifycenter_desc":"Align Center","justifyleft_desc":"Align Left","striketrough_desc":"Strikethrough","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kz_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kz_dlg.js
new file mode 100644
index 000000000..578bf4597
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/kz_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.advanced_dlg',{"link_list":"Link List","link_is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open Link in a New Window","link_target_same":"Open Link in the Same Window","link_target":"Target","link_url":"Link URL","link_title":"Insert/Edit Link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text Bottom","image_align_texttop":"Text Top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal Space","image_vspace":"Vertical Space","image_dimensions":"Dimensions","image_alt":"Image Description","image_list":"Image List","image_border":"Border","image_src":"Image URL","image_title":"Insert/Edit Image","charmap_title":"Select Special Character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named Colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette Colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color Picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a Color","code_wordwrap":"Word Wrap","code_title":"HTML Source Editor","anchor_name":"Anchor Name","anchor_title":"Insert/Edit Anchor","about_loaded":"Loaded Plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lb.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lb.js
new file mode 100644
index 000000000..a254b4a8e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.advanced',{"underline_desc":"\u00cbnnerstrach (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)",dd:"Definitiounsbeschreiwung",dt:"Definitiounsbegr\u00ebff",samp:"Beispill",code:"Code",blockquote:"Zitatblock",h6:"Iwwerschr\u00ebft 6",h5:"Iwwerschr\u00ebft 5",h4:"Iwwerschr\u00ebft 4",h3:"Iwwerschr\u00ebft 3",h2:"Iwwerschr\u00ebft 2",h1:"Iwwerschr\u00ebft 1",pre:"R\u00e9idaten",address:"Adress",div:"Zesummenh\u00e4nkende Ber\u00e4ich",paragraph:"Ofsatz",block:"Virlag",fontdefault:"Schr\u00ebftaart","font_size":"Schr\u00ebftgr\u00e9isst","style_select":"Format","anchor_delta_width":"13","more_colors":"Weider Fuerwen","toolbar_focus":"Bei d\'Geschirleescht sprangen: Alt+Q; Bei den Editor sprangen: Alt+Z; Bei den Elementpad sprangen: Alt+X",newdocument:"W\u00ebllt Dir wierklech de ganzen Inhalt l\u00e4schen?",path:"Pad","clipboard_msg":"Kop\u00e9ieren, Ausschneiden an Af\u00fcgen sinn am Mozilla Firefox net m\u00e9iglech.\nW\u00ebllt Dir m\u00e9i iwwert d\u00ebse Problem gewuer ginn?","blockquote_desc":"Zitatblock","help_desc":"H\u00ebllef","newdocument_desc":"Neit Dokument","image_props_desc":"Bildeegeschaften","paste_desc":"Af\u00fcgen","copy_desc":"Kop\u00e9ieren","cut_desc":"Ausschneiden","anchor_desc":"Anker af\u00fcgen/ver\u00e4nneren","visualaid_desc":"H\u00ebllefslinnen an onsiichtbar Elementer an-/ausblennen","charmap_desc":"Sonnerzeechen af\u00fcgen","backcolor_desc":"Hannergrondfuerf","forecolor_desc":"Textfuerf","custom1_desc":"Benotzerdefin\u00e9iert Beschreiwung","removeformat_desc":"Format\u00e9ierungen zer\u00e9cksetzen","hr_desc":"Trennlinn af\u00fcgen","sup_desc":"H\u00e9ichgestallt","sub_desc":"D\u00e9ifgestallt","code_desc":"HTML-Quellcode beaarbechten","cleanup_desc":"Quellcode botzen","image_desc":"Bild af\u00fcgen/ver\u00e4nneren","unlink_desc":"Link ewechhuelen","link_desc":"Link af\u00fcgen/ver\u00e4nneren","redo_desc":"Widderhuelen (Strg+Y)","undo_desc":"R\u00e9ckg\u00e4ngeg (Strg+Z)","indent_desc":"Ar\u00e9cken","outdent_desc":"Ausr\u00e9cken","numlist_desc":"Sort\u00e9iert L\u00ebscht","bullist_desc":"Onsort\u00e9iert L\u00ebscht","justifyfull_desc":"B\u00e9ids\u00e4iteg align\u00e9iert","justifyright_desc":"Riets align\u00e9iert","justifycenter_desc":"Zentr\u00e9iert","justifyleft_desc":"L\u00e9nks align\u00e9iert","striketrough_desc":"Duerchgestrach","anchor_delta_height":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lb_dlg.js
new file mode 100644
index 000000000..5f81af733
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.advanced_dlg',{"link_list":"Linkl\u00ebscht","link_is_external":"D\u00ebs Adress sch\u00e9ngt een externen Link ze sinn. W\u00ebll Dir den dofir ben\u00e9idegt http:// virdru stellen?","link_is_email":"D\u00ebs Adress sch\u00e9ngt eng Email-Adress ze sinn. W\u00ebll Dir den dofir ben\u00e9idegt mailto: virdru stellen?","link_titlefield":"Titel","link_target_blank":"Nei F\u00ebnster opmaachen","link_target_same":"An der selwechter F\u00ebnster opmaachen","link_target":"F\u00ebnster","link_url":"Adress","link_title":"Link af\u00fcgen/beaarbechten","image_align_right":"Riets","image_align_left":"L\u00e9nks","image_align_textbottom":"\u00cbnnen am Text","image_align_texttop":"Uewen am Text","image_align_bottom":"\u00cbnnen","image_align_middle":"M\u00ebtteg","image_align_top":"Uewen","image_align_baseline":"Zeil","image_align":"Ausriichtung","image_hspace":"Horizontalen Ofstand","image_vspace":"Vertikalen Ofstand","image_dimensions":"Ausmoossen","image_alt":"Alternativtext","image_list":"Billerleescht","image_border":"Rumm","image_src":"Adress","image_title":"Bild af\u00fcgen/beaarbechten","charmap_title":"Sonnerzeechen","colorpicker_name":"Numm:","colorpicker_color":"Fuerf:","colorpicker_named_title":"Benannte Fuerwen","colorpicker_named_tab":"Benannte Fuerwen","colorpicker_palette_title":"Fuerfpalette","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Fuerfselectioun","colorpicker_picker_tab":"Fuerfselectioun","colorpicker_title":"Fuerf","code_wordwrap":"Automateschen Zeilen\u00ebmbroch","code_title":"HTML-Quellcode beaarbechten","anchor_name":"Numm vum Anker","anchor_title":"Anker af\u00fcgen/ver\u00e4nneren","about_loaded":"Geluede Pluginen","about_version":"Versioun","about_author":"Auteur","about_plugin":"Plugin","about_plugins":"Pluginen","about_license":"Lizenzbedingungen","about_help":"H\u00ebllef","about_general":"Iwwer\u2026","about_title":"Iwwer TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lt.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lt.js
new file mode 100644
index 000000000..30563548b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.advanced',{"underline_desc":"Pabrauktas (Ctrl+U)","italic_desc":"Kursyvas (Ctrl+I)","bold_desc":"Pusjuodis (Ctrl+B)",dd:"Apibr\u0117\u017eimo apra\u0161as",dt:"Apibr\u0117\u017eimo terminas",samp:"Kodo pavyzdys",code:"Kodas",blockquote:"Citatos blokas",h6:"Antra\u0161t\u0117 6",h5:"Antra\u0161t\u0117 5",h4:"Antra\u0161t\u0117 4",h3:"Antra\u0161t\u0117 3",h2:"Antra\u0161t\u0117 2",h1:"Antra\u0161t\u0117 1",pre:"I\u0161 anksto formatuotas",address:"Adresas",div:"Div \u017eym\u0117",paragraph:"Paragrafas",block:"Formatas",fontdefault:"\u0160rifto \u0161eima","font_size":"\u0160rifto dydis","style_select":"Stiliai","link_delta_width":"70","more_colors":"Daugiau spalv\u0173","toolbar_focus":"Per\u0161okimas prie \u012franki\u0173 juostos mygtuk\u0173 - Alt+Q, Per\u0161okimas prie redaktoriaus - Alt-Z, Per\u0161okimas prie element\u0173 kelio - Alt-X",newdocument:"Ar tikrai norite i\u0161valyti vis\u0105 turin\u012f?",path:"Kelias","clipboard_msg":"Kopijavimas/I\u0161kirpimas/\u012ed\u0117jimas negalimas Mozilla ir Firefox nar\u0161ykl\u0117se.\nAr norite daugiau informacijos apie \u0161i\u0105 problem\u0105?","blockquote_desc":"Citatos blokas","help_desc":"Pagalba","newdocument_desc":"Naujas dokumentas","image_props_desc":"Paveiksl\u0117lio nustatymai","paste_desc":"\u012ed\u0117ti","copy_desc":"Kopijuoti","cut_desc":"I\u0161kirpti","anchor_desc":"\u012eterpti/redaguoti prierai\u0161\u0105","visualaid_desc":"Kaitalioti gaires/nematom\u0173 element\u0173 rodym\u0105","charmap_desc":"\u012eterpti nestandartin\u012f simbol\u012f","backcolor_desc":"Parinkti fono spalv\u0105","forecolor_desc":"Parinkti teksto spalv\u0105","custom1_desc":"J\u016bs\u0173 apra\u0161as \u010dia","removeformat_desc":"Pa\u0161alinti formatavim\u0105","hr_desc":"\u012eterpti horizontali\u0105 linij\u0105","sup_desc":"Vir\u0161utinis indeksas","sub_desc":"Apatinis indeksas","code_desc":"Redaguoti HTML i\u0161eities kod\u0105","cleanup_desc":"I\u0161valyti netvarking\u0105 kod\u0105","image_desc":"\u012eterpti/redaguoti paveiksl\u0117l\u012f","unlink_desc":"Pa\u0161alinti nuorod\u0105","link_desc":"\u012eterpti/redaguoti nuorod\u0105","redo_desc":"Gr\u0105\u017einti (Ctrl+Y)","undo_desc":"At\u0161aukti (Ctrl+Z)","indent_desc":"\u012etrauka","outdent_desc":"Atvirk\u0161tin\u0117 \u012ftrauka","numlist_desc":"Sunumeruotas s\u0105ra\u0161as","bullist_desc":"Nesunumeruotas s\u0105ra\u0161as","justifyfull_desc":"Lygiuoti pagal abu kra\u0161tus","justifyright_desc":"Lygiuoti pagal de\u0161in\u0119","justifycenter_desc":"Centruoti","justifyleft_desc":"Lygiuoti pagal kair\u0119","striketrough_desc":"Perbrauktas","help_shortcut":"Paspauskite ALT-F10 \u012fjungti u\u017eduo\u010di\u0173 juostai. Paspauskite ALT-0 jei reikia pagalbos","rich_text_area":"Suformatuoto teksto laukas","shortcuts_desc":"Accessability Help",toolbar:"U\u017eduo\u010di\u0173 juosta","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lt_dlg.js
new file mode 100644
index 000000000..2474073fb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.advanced_dlg',{"link_list":"Nuorod\u0173 s\u0105ra\u0161as","link_is_external":"URL adresas, kur\u012f \u012fved\u0117te yra i\u0161orin\u0117 nuoroda, ar norite prid\u0117ti reikaling\u0105 http:// prefiks\u0105?","link_is_email":"URL adresas, kur\u012f \u012fved\u0117te yra el. pa\u0161to adresas, ar norite prid\u0117ti reikaling\u0105 mailto: prefiks\u0105?","link_titlefield":"Pavadinimas","link_target_blank":"Atverti naujame lange","link_target_same":"Atverti tame pa\u010diame lange","link_target":"Paskirtis","link_url":"Nuorodos URL adresas","link_title":"\u012eterpti/redaguoti nuorod\u0105","image_align_right":"De\u0161in\u0117je","image_align_left":"Kair\u0117je","image_align_textbottom":"Teksto apa\u010dioje","image_align_texttop":"Teksto vir\u0161uje","image_align_bottom":"Apa\u010dioje","image_align_middle":"Viduryje","image_align_top":"Vir\u0161uje","image_align_baseline":"Pradiniame ta\u0161ke","image_align":"Lygiavimas","image_hspace":"Horizontalus tarpas","image_vspace":"Vertikalus tarpas","image_dimensions":"I\u0161matavimai","image_alt":"Paveiksl\u0117lio apra\u0161as","image_list":"Paveiksl\u0117li\u0173 s\u0105ra\u0161as","image_border":"R\u0117melis","image_src":"Paveiksl\u0117lio URL adresas","image_title":"\u012eterpti/redaguoti paveiksl\u0117l\u012f","charmap_title":"Pasirinkti nestandartin\u012f simbol\u012f","colorpicker_name":"Pavadinimas:","colorpicker_color":"Spalva:","colorpicker_named_title":"\u012evardintosios spalvos","colorpicker_named_tab":"\u012evardintosios","colorpicker_palette_title":"Palet\u0117s spalvos","colorpicker_palette_tab":"Palet\u0117","colorpicker_picker_title":"Spalvos parinkiklis","colorpicker_picker_tab":"Parinkiklis","colorpicker_title":"Pasirinkti spalv\u0105","code_wordwrap":"Skaidyti tekst\u0105","code_title":"HTML i\u0161eities kodo redaktorius","anchor_name":"Prierai\u0161o vardas","anchor_title":"\u012eterpti/redaguoti prierai\u0161\u0105","about_loaded":"\u012ekelti papildiniai","about_version":"Versija","about_author":"Autorius","about_plugin":"Papildinys","about_plugins":"Papildiniai","about_license":"Licencija","about_help":"Pagalba","about_general":"Apie","about_title":"Apie TinyMCE","charmap_usage":"Naudokite kair\u0117s ir de\u0161in\u0117s rodykles norint nar\u0161yti.","anchor_invalid":"\u012eveskite teising\u0105 prierai\u0161os vard\u0105.","accessibility_help":"Prieinamumo pagalba","accessibility_usage_title":"Bendrojo naudojimo"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lv.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lv.js
new file mode 100644
index 000000000..e7ed14315
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.advanced',{"underline_desc":"Pasv\u012btrojums (Ctrl+U)","italic_desc":"Sl\u012bpraksts (Ctrl+I)","bold_desc":"Treknraksts (Ctrl+B)",dd:"Defin\u012bcijas apraksts",dt:"Defin\u012bcijas termins ",samp:"Koda piem\u0113rs",code:"Kods",blockquote:"Cit\u0101ts",h6:"Virsraksts 6",h5:"Virsraksts 5",h4:"Virsraksts 4",h3:"Virsraksts 3",h2:"Virsraksts 2",h1:"Virsraksts 1",pre:"Priek\u0161format\u0113ts",address:"Adrese",div:"Div\u012bzija",paragraph:"Rindkopa",block:"Form\u0101ts",fontdefault:"Fonta veids","font_size":"Fonta lielums","style_select":"Stili","more_colors":"Vair\u0101k kr\u0101su","toolbar_focus":"Iet uz r\u012bkpog\u0101m - Alt+Q, Iet uz redaktoru - Alt-Z, Iet uz elementa atra\u0161an\u0101s vietu - Alt-X",newdocument:"Vai J\u016bs esat p\u0101rliecin\u0101ti, ka v\u0113laties izdz\u0113st visu saturu?",path:"Atra\u0161an\u0101s vieta","clipboard_msg":"Iesp\u0113ja Kop\u0113t/Izgriezt/Iekop\u0113t nav pieejama p\u0101rl\u016bkiem Mozilla and Firefox.\nVai J\u016bs v\u0113laties uzzin\u0101t vair\u0101k par \u0161o probl\u0113mu?","blockquote_desc":"Cit\u0101ts","help_desc":"Pal\u012bdz\u012bba","newdocument_desc":"Jauns dokuments","image_props_desc":"Bildes iestat\u012bjumi","paste_desc":"Iekop\u0113t","copy_desc":"Kop\u0113t","cut_desc":"Izgriezt","anchor_desc":"Ievietot/Redi\u0123\u0113t enkursaiti","visualaid_desc":"Uzlikt/Nov\u0101kt pal\u012bgsv\u012btras/neredzamos elementus","charmap_desc":"Ievietot simbolu","backcolor_desc":"Uzst\u0101d\u012bt fona kr\u0101su","forecolor_desc":"Uzst\u0101d\u012bt teksta kr\u0101su","custom1_desc":"Tevis izdom\u0101ts apraksts \u0161eit","removeformat_desc":"Izdz\u0113st format\u0113to","hr_desc":"Ievietot horizont\u0101lu sv\u012btru","sup_desc":"Aug\u0161raksts","sub_desc":"Apak\u0161raksts","code_desc":"Redi\u0123\u0113t HTML kodu","cleanup_desc":"Izt\u012br\u012bt nek\u0101rt\u012bgu kodu","image_desc":"Ievietot/Redi\u0123\u0113t att\u0113lu","unlink_desc":"Atsait\u0113t","link_desc":"Ievietot/Redi\u0123\u0113t saiti","redo_desc":"Atatsaukt (Ctrl+Y)","undo_desc":"Atsaukt (Ctrl+Z)","indent_desc":"Atk\u0101pe","outdent_desc":"Uzk\u0101pe","numlist_desc":"Numur\u0113ts saraksts","bullist_desc":"Nenumur\u0113ts saraksts","justifyfull_desc":"Nol\u012bdzin\u0101t malas","justifyright_desc":"Novietot pa labi","justifycenter_desc":"Centr\u0113t","justifyleft_desc":"Novietot pa kreisi","striketrough_desc":"P\u0101rsv\u012btrojums","help_shortcut":"Ieklik\u0161\u0137iniet uz ALT-F10 lai iesl\u0113gtu uzdevumu joslu. Ieklik\u0161\u0137iniet uz ALT-0, ja nepiecie\u0161ama pal\u012bdz\u012bba",toolbar:"Uzdevumu josla","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lv_dlg.js
new file mode 100644
index 000000000..e19b9e260
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/lv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.advanced_dlg',{"link_list":"Sai\u0161u saraksts","link_is_external":"Ievad\u012btais URL \u0161\u0137iet ir \u0101r\u0113j\u0101 saite, vai tu v\u0113lies pirms t\u0101s pievienot http:// pried\u0113kli?","link_is_email":"Ievad\u012btais URL \u0161\u0137iet ir e-pasta adrese, vai tu v\u0113lies pirms t\u0101s pievienot mailto: pried\u0113kli? ","link_titlefield":"Nosaukums","link_target_blank":"Atv\u0113rt saiti jaun\u0101 log\u0101","link_target_same":"Atv\u0113rt saiti \u0161ai pa\u0161\u0101 log\u0101","link_target":"M\u0113r\u0137is","link_url":"Saites URL","link_title":"Ievietot/Redi\u0123\u0113t saiti","image_align_right":"Pa labi","image_align_left":"Pa kreisi","image_align_textbottom":"Teksta apak\u0161a","image_align_texttop":"Teksta aug\u0161a","image_align_bottom":"Apak\u0161a","image_align_middle":"Vidus","image_align_top":"Aug\u0161a","image_align_baseline":"Pati apak\u0161a","image_align":"Novietojums","image_hspace":"Horizont\u0101l\u0101 atstarpe","image_vspace":"Vertik\u0101l\u0101 atstarpe","image_dimensions":"Izm\u0113ri","image_alt":"Att\u0113la apraksts","image_list":"Att\u0113lu saraksts","image_border":"Apmale","image_src":"Att\u0113la URL","image_title":"Ievietot/Redi\u0123\u0113t att\u0113lu","charmap_title":"Izv\u0113lies simbolu","colorpicker_name":"Nosaukums:","colorpicker_color":"Kr\u0101sa:","colorpicker_named_title":"Nosaukt\u0101s kr\u0101sas","colorpicker_named_tab":"Nosaukts","colorpicker_palette_title":"Kr\u0101su palete","colorpicker_palette_tab":"Palete","colorpicker_picker_title":"Kr\u0101su izv\u0113lnis","colorpicker_picker_tab":"Izv\u0113lnis","colorpicker_title":"Izv\u0113l\u0113ties kr\u0101su","code_wordwrap":"V\u0101rdu p\u0101rne\u0161ana jaun\u0101 rind\u0101","code_title":"HTML koda redaktors","anchor_name":"Enkursaites nosaukums","anchor_title":"Ievietot/Redi\u0123\u0113t enkursaiti","about_loaded":"Iestat\u012btie papildmodu\u013ci","about_version":"Versija","about_author":"Autors","about_plugin":"Papildmodulis","about_plugins":"Papildmodu\u013ci","about_license":"Licence","about_help":"Pal\u012bdz\u012bba","about_general":"Par","about_title":"Par TinyMCE","charmap_usage":"Izmantojiet kreis\u0101s un lab\u0101s puses r\u0101d\u012bt\u0101jus, ja v\u0113laties p\u0101rl\u016bkot","anchor_invalid":"Nor\u0101diet sp\u0113k\u0101 eso\u0161u paz\u012bmes v\u0101rdu","accessibility_help":"Pieejam\u012bbas pal\u012bdz\u012bba","accessibility_usage_title":"Kop\u0113j\u0101s lieto\u0161anas","invalid_color_value":"Invalid color value"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mk.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mk.js
new file mode 100644
index 000000000..b95e95df3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.advanced',{"underline_desc":"\u041f\u043e\u0434\u0432\u043b\u0435\u0447\u0435\u043d\u043e (Ctrl U)","italic_desc":"\u0417\u0430\u043a\u043e\u0441\u0435\u043d\u043e (Ctrl I)","bold_desc":"\u0417\u0434\u0435\u0431\u0435\u043b\u0435\u043d\u043e (Ctrl B)",dd:"\u041e\u043f\u0438\u0441 \u043d\u0430 \u0434\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u0458\u0430\u0442\u0430",dt:"\u0414\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u0458\u0430 \u043d\u0430 \u043f\u043e\u0438\u043c",samp:"\u041f\u0440\u0438\u0438\u043c\u0435\u0440 \u043d\u0430 \u043a\u043e\u0434\u043e\u0442",code:"\u041a\u043e\u0434",blockquote:"\u0426\u0438\u0442\u0430\u0442",h6:"\u041d\u0430\u0441\u043b\u043e\u0432 6",h5:"\u041d\u0430\u0441\u043b\u043e\u0432 5",h4:"\u041d\u0430\u0441\u043b\u043e\u0432 4",h3:"\u041d\u0430\u0441\u043b\u043e\u0432 3",h2:"\u041d\u0430\u0441\u043b\u043e\u0432 2",h1:"\u041d\u0430\u0441\u043b\u043e\u0432 1",pre:"\u041e\u0431\u043b\u0438\u043a\u0443\u0432\u0430\u043d\u043e",address:"\u0410\u0434\u0440\u0435\u0441\u0430",div:"Div",paragraph:"\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444",block:"\u0424\u043e\u0440\u043c\u0430\u0442",fontdefault:"\u0412\u0438\u0434 \u043d\u0430 \u0444\u043e\u043d\u0442","font_size":"\u0412\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u043d\u0430 \u0444\u043e\u043d\u0442\u043e\u0442","style_select":"\u0421\u0442\u0438\u043b\u043e\u0432\u0438","more_colors":"\u041f\u043e\u0432\u0435\u045c\u0435 \u0431\u043e\u0438 ...","toolbar_focus":"\u041f\u043e\u043c\u0438\u043d\u0438 \u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430\u0442\u0430 \u0441\u043e \u0430\u043b\u0430\u0442\u043a\u0438 - Alt Q, \u043f\u043e\u043c\u0438\u043d\u0438 \u043d\u0430 \u0443\u0440\u0435\u0434\u0443\u0432\u0430\u0447\u043e\u0442- Alt-Z, \u043f\u043e\u043c\u0438\u043d\u0438 \u043d\u0430 \u043f\u0430\u0442\u0435\u043a\u0430\u0442\u0430 \u0437\u0430 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438 - Alt-X",newdocument:"\u0414\u0430\u043b\u0438 \u0441\u0442\u0435 \u0441\u0438\u0433\u0443\u0440\u043d\u0438\u043e \u0434\u0435\u043a\u0430 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0458\u0430 \u0438\u0437\u0431\u0440\u0438\u0448\u0435\u0442\u0435 \u0446\u0435\u043b\u0430 \u0441\u043e\u0434\u0440\u0436\u0438\u043d\u0430 ?",path:"\u041f\u0430\u0442\u0435\u043a\u0430","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u0430\u0458/\u041f\u0440\u0435\u0441\u0435\u0447\u0438/\u0412\u043c\u0435\u0442\u043d\u0438 \u043d\u0435 \u0435 \u043d\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u045a\u0435 \u0432\u043e Mozilla \u0438 Firefox. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u043f\u043e\u0432\u0435\u045c\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0437\u0430 \u043e\u0432\u0430 \u043f\u0440\u0430\u0448\u0430\u045a\u0435?","blockquote_desc":"\u0426\u0438\u0442\u0438\u0440\u0430\u0458","help_desc":"\u041f\u043e\u043c\u043e\u0448","newdocument_desc":"\u041d\u043e\u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u0421\u0432\u043e\u0458\u0441\u0442\u0432\u0430 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430","paste_desc":"\u0412\u043c\u0435\u0442\u043d\u0438 (Ctrl V)","copy_desc":"\u041a\u043e\u043f\u0438\u0440\u0430\u0458 (Ctrl C)","cut_desc":"\u0418\u0441\u0435\u0447\u0438 (Ctrl X)","anchor_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0441\u0438\u0434\u0440\u043e","visualaid_desc":"\u043f\u0440\u0438\u043a\u0430\u0436\u0438/\u0441\u043e\u043a\u0440\u0438 \u0443\u043f\u0430\u0442\u0441\u0442\u0432\u043e/\u043d\u0435\u0432\u0438\u0434\u043b\u0438\u0432\u0438 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438","charmap_desc":"\u0412\u043d\u0435\u0441\u0438 \u0441\u043f\u0435\u0446\u0438\u0458\u0430\u043b\u0435\u043d \u0437\u043d\u0430\u043a","backcolor_desc":"\u0418\u0437\u0431\u0435\u0440\u0438 \u0431\u043e\u0458\u0430 \u043d\u0430 \u043f\u043e\u0437\u0430\u0434\u0438\u043d\u0430","forecolor_desc":"\u0418\u0437\u0431\u0435\u0440\u0438 \u0431\u043e\u0458\u0430 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442","custom1_desc":"\u0421\u043e\u043f\u0441\u0442\u0432\u0435\u043d \u043e\u043f\u0438\u0441 \u043e\u0432\u0434\u0435","removeformat_desc":"\u041f\u043e\u043d\u0438\u0448\u0442\u0438 \u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0430\u045a\u0435\u0442\u043e","hr_desc":"\u0412\u043d\u0435\u0441\u0438 \u0445\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430","sup_desc":"\u0415\u043a\u0441\u043f\u043e\u043d\u0435\u043d\u0442","sub_desc":"\u0418\u043d\u0434\u0435\u043a\u0441","code_desc":"\u0423\u0440\u0435\u0434\u0438 \u0433\u043e HTML \u0438\u0437\u0432\u043e\u0440\u043e\u0442","cleanup_desc":"\u0421\u0440\u0435\u0434\u0438 \u0433\u043e \u043a\u043e\u0434\u043e\u0442","image_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u0441\u043b\u0438\u043a\u0430","unlink_desc":"\u041e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 \u0433\u043e \u043b\u0438\u043d\u043a\u043e\u0442","link_desc":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u043b\u0438\u043d\u043a","redo_desc":"\u041f\u043e\u0432\u0442\u043e\u0440\u0438 (Ctrl Y)","undo_desc":"\u0412\u0440\u0430\u0442\u0438 (Ctrl Z)","indent_desc":"\u0417\u0433\u043e\u043b\u0435\u043c\u0438 \u0433\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0443\u0432\u0430\u045a\u0435\u0442\u043e","outdent_desc":"\u041d\u0430\u043c\u0430\u043b\u0438 \u0433\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0443\u0432\u0430\u045a\u0435\u0442\u043e","numlist_desc":"\u0412\u043d\u0435\u0441\u0438/\u043e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 \u043f\u043e\u0434\u0440\u0435\u0434\u0435\u043d\u0430 \u043b\u0438\u0441\u0442\u0430","bullist_desc":"\u0412\u043d\u0435\u0441\u0438/\u043e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 \u043d\u0435\u043f\u043e\u0434\u0440\u0435\u0434\u0435\u043d\u0430 \u043b\u0438\u0441\u0442\u0430","justifyfull_desc":"\u041f\u043e\u0442\u043f\u043e\u043b\u043d\u043e \u043f\u043e\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435","justifyright_desc":"\u041f\u043e\u0440\u0430\u043c\u043d\u0438 \u0434\u0435\u0441\u043d\u043e","justifycenter_desc":"\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u0430\u0458","justifyleft_desc":"\u041f\u043e\u0440\u0430\u043c\u043d\u0438 \u043b\u0435\u0432\u043e","striketrough_desc":"\u041f\u0440\u0435\u0446\u0440\u0442\u0430\u043d\u043e","help_shortcut":"\u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438 ALT F10 \u0437\u0430 \u0430\u043b\u0430\u0442\u043a\u0438. \u041f\u0440\u0438\u0442\u0438\u0441\u043d\u0438 ALT 0 \u0437\u0430 \u043f\u043e\u043c\u043e\u0448.","rich_text_area":"\u0417\u0431\u043e\u0433\u0430\u0442\u0435\u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u043d\u0430 \u043f\u043e\u0432\u0440\u0448\u0438\u043d\u0430","shortcuts_desc":"\u041f\u043e\u043c\u043e\u0448 \u043f\u0440\u0438 \u043f\u0440\u0438\u0441\u0442\u0430\u043f",toolbar:"\u041b\u0438\u043d\u0438\u0458\u0430 \u0437\u0430 \u0430\u043b\u0430\u0442\u043a\u0438","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mk_dlg.js
new file mode 100644
index 000000000..052b43b58
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.advanced_dlg',{"link_list":"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u043b\u0438\u043d\u043a\u043e\u0432\u0438","link_is_external":"\u0423\u0420\u041b \u0430\u0434\u0440\u0435\u0441\u0442\u0430 \u0448\u0442\u043e \u0458\u0430 \u0432\u043d\u0435\u0441\u043e\u0432\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u043a\u0430\u043a\u043e \u043d\u0430\u0434\u0432\u043e\u0440\u0435\u0448\u0435\u043d \u043b\u0438\u043d\u043a. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u0434\u043e\u0434\u0430\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u0438\u043e\u0442 \u201ehttp://:\u201c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ?","link_is_email":"\u0423\u0420\u041b \u0430\u0434\u0440\u0435\u0441\u0442\u0430 \u0448\u0442\u043e \u0458\u0430 \u0432\u043d\u0435\u0441\u043e\u0432\u0442\u0435 \u0438\u0437\u0433\u043b\u0435\u0434\u0430 \u043a\u0430\u043a\u043e \u0435-\u043f\u043e\u0448\u0442\u0430. \u0414\u0430\u043b\u0438 \u0441\u0430\u043a\u0430\u0442\u0435 \u0434\u0430 \u0433\u043e \u0434\u043e\u0434\u0430\u0434\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u0438\u043e\u0442 \u201emailto:\u201c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 ?","link_titlefield":"\u041d\u0430\u0441\u043b\u043e\u0432","link_target_blank":"\u041e\u0442\u0432\u043e\u0440\u0438 \u043b\u0438\u043d\u043a \u0432\u043e \u043d\u043e\u0432 \u043f\u0440\u043e\u0437\u043e\u0440","link_target_same":"\u041e\u0442\u0432\u043e\u0440\u0438 \u043b\u0438\u043d\u043a \u0432\u043e \u0438\u0441\u0442\u0438\u043e\u0442 \u043f\u0440\u043e\u0437\u043e\u0440","link_target":"\u0426\u0435\u043b","link_url":"\u0423\u0420\u041b \u043b\u0438\u043d\u043a","link_title":"\u0412\u043d\u0435\u0441\u0438/\u0443\u0440\u0435\u0434\u0438 \u043b\u0438\u043d\u043a","image_align_right":"\u0414\u0435\u0441\u043d\u043e","image_align_left":"\u041b\u0435\u0432\u043e","image_align_textbottom":"\u041a\u0440\u0430\u0458 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442","image_align_texttop":"\u041f\u043e\u0447\u0435\u0442\u043e\u043a \u043d\u0430 \u0442\u0435\u043a\u0441\u0442","image_align_bottom":"\u041d\u0430\u0458\u0434\u043e\u043b\u0435","image_align_middle":"\u0421\u0440\u0435\u0434\u0438\u043d\u0430","image_align_top":"\u041d\u0430\u0458\u0433\u043e\u0440\u0435","image_align_baseline":"\u041e\u0441\u043d\u043e\u0432\u043d\u0430 \u043b\u0438\u043d\u0438\u0458\u0430","image_align":"\u041f\u043e\u0440\u0430\u043c\u043d\u0443\u0432\u0430\u045a\u0435","image_hspace":"\u0425\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0440","image_vspace":"\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0440","image_dimensions":"\u0414\u0438\u043c\u0435\u043d\u0437\u0438\u0438","image_alt":"\u041e\u043f\u0438\u0441 \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430","image_list":"\u041b\u0438\u0441\u0442\u0430 \u043d\u0430 \u0441\u043b\u0438\u043a\u0438\u0442\u0435","image_border":"\u0413\u0440\u0430\u043d\u0438\u0446\u0430/\u0440\u0430\u0431","image_src":"\u041b\u0438\u043d\u043a \u043d\u0430 \u0441\u043b\u0438\u043a\u0430\u0442\u0430","image_title":"\u0412\u043d\u0435\u0441\u0438/\u0441\u0440\u0435\u0434\u0438 \u0441\u043b\u0438\u043a\u0438","charmap_title":"\u041e\u0434\u0431\u0435\u0440\u0435\u0442\u0435 \u0437\u043d\u0430\u043a","colorpicker_name":"\u0418\u043c\u0435:","colorpicker_color":"\u0411\u043e\u0458\u0430:","colorpicker_named_title":"\u0418\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u0438 \u0431\u043e\u0438","colorpicker_named_tab":"\u0418\u043c\u0435\u043d\u0443\u0432\u0430\u043d\u043e","colorpicker_palette_title":"\u041f\u0430\u043b\u0435\u0442\u0430 \u043d\u0430 \u0431\u043e\u0438","colorpicker_palette_tab":"\u041f\u0430\u043b\u0435\u0442\u0430","colorpicker_picker_title":"\u041e\u0434\u0431\u0435\u0440\u0438 \u0431\u043e\u0438","colorpicker_picker_tab":"\u041e\u0434\u0431\u0435\u0440\u0438","colorpicker_title":"\u0418\u0437\u0431\u043e\u0440 \u043d\u0430 \u0431\u043e\u0438","code_wordwrap":"\u041f\u0440\u0435\u043a\u043b\u043e\u043f\u0443\u0432\u0430\u045a\u0435 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u043e\u0442","code_title":"HTML \u0443\u0440\u0435\u0434\u0443\u0432\u0430\u0447","anchor_name":"\u0418\u043c\u0435 \u043d\u0430 \u0441\u0438\u0434\u0440\u043e\u0442\u043e","anchor_title":"\u0412\u043d\u0435\u0441\u0438/\u0441\u0440\u0435\u0434\u0438 \u0441\u0438\u0434\u0440\u043e","about_loaded":"\u041f\u043e\u0441\u0442\u043e\u0435\u0447\u043a\u0438 \u0434\u043e\u0434\u0430\u0442\u043e\u0446\u0438","about_version":"\u0412\u0435\u0440\u0437\u0438\u0458\u0430","about_author":"\u0410\u0432\u0442\u043e\u0440","about_plugin":"\u0414\u043e\u0434\u0430\u0442\u043e\u043a","about_plugins":"\u0414\u043e\u0434\u0430\u0442\u043e\u0446\u0438","about_license":"\u041b\u0438\u0446\u0435\u043d\u0446\u0430","about_help":"\u041f\u043e\u043c\u043e\u0448","about_general":"\u0417\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0430\u0442\u0430","about_title":"TinyMCE","charmap_usage":"\u041a\u043e\u0440\u0438\u0441\u0442\u0435\u0442\u0435 \u0433\u0438 \u0441\u0442\u0440\u043b\u0435\u043a\u0438\u0442\u0435 \u043b\u0435\u0432\u043e \u0438 \u0434\u0435\u0441\u043d\u043e \u0437\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0458\u0430.","anchor_invalid":"\u0412\u0435 \u043c\u043e\u043b\u0438\u043c\u0435 \u043d\u0430\u0432\u0435\u0434\u0435\u0442\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u043e \u0438\u043c\u0435 \u0437\u0430 \u0441\u0438\u0434\u0440\u043e\u0442\u043e.","accessibility_help":"\u041f\u043e\u043c\u043e\u0448 \u0437\u0430 \u043f\u0440\u0438\u0441\u0442\u0430\u043f\u043d\u043e\u0441\u0442","accessibility_usage_title":"\u041e\u043f\u0448\u0442\u043e \u043a\u043e\u0440\u0438\u0441\u0442\u0435\u045a\u0435"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ml.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ml.js
new file mode 100644
index 000000000..f5aaea65f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ml.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 6",h5:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 5",h4:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 4",h3:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 3",h2:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 2",h1:"\u0d24\u0d32\u0d15\u0d4d\u0d15\u0d46\u0d1f\u0d4d\u0d1f\u0d41\u0d4d 1",pre:"Preformatted",address:"\u0d35\u0d3f\u0d32\u0d3e\u0d38\u0d02",div:"Div",paragraph:"\u0d16\u0d23\u0d4d\u0d21\u0d3f\u0d15",block:"\u0d18\u0d1f\u0d28",fontdefault:"\u0d05\u0d15\u0d4d\u0d37\u0d30\u0d15\u0d42\u0d1f\u0d4d\u0d1f\u0d02","font_size":"\u0d05\u0d15\u0d4d\u0d37\u0d30\u0d35\u0d32\u0d41\u0d2a\u0d4d\u0d2a\u0d02","style_select":"\u0d30\u0d42\u0d2a\u0d2d\u0d02\u0d17\u0d3f","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"\u0d2e\u0d41\u0d31\u0d3f\u0d15\u0d4d\u0d15\u0d32\u0d4d\u200d/\u0d2a\u0d15\u0d30\u0d4d\u200d\u0d24\u0d4d\u0d24\u0d32\u0d4d\u200d/\u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d32\u0d4d\u200d \u0d0e\u0d28\u0d4d\u0d28\u0d3f\u0d35 \'\u0d2e\u0d4b\u0d38\u0d3f\u0d32\u0d4d\u0d32\'\u0d2f\u0d3f\u0d32\u0d41\u0d02 \'\u0d2b\u0d2f\u0d30\u0d4d\u200d\u0d2b\u0d4b\u0d15\u0d4d\u0d38\u0d4d\'\u0d32\u0d41\u0d02 \u0d32\u0d2d\u0d4d\u0d2f\u0d2e\u0d32\u0d4d\u0d32. \n\u0d24\u0d3e\u0d19\u0d4d\u0d15\u0d33\u0d4d\u200d\u0d15\u0d4d\u0d15\u0d41 \u0d07\u0d24\u0d3f\u0d28\u0d46 \u0d15\u0d41\u0d31\u0d3f\u0d1a\u0d4d\u0d1a\u0d41\u0d4d \u0d15\u0d42\u0d1f\u0d41\u0d24\u0d32\u0d4d\u200d \u0d05\u0d31\u0d3f\u0d2f\u0d23\u0d4b ?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"\u0d12\u0d1f\u0d4d\u0d1f\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15","copy_desc":"\u0d2a\u0d15\u0d30\u0d4d\u200d\u0d24\u0d4d\u0d24\u0d41\u0d15","cut_desc":"\u0d2e\u0d41\u0d31\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"\u0d35\u0d3f\u0d1a\u0d4d\u0d1b\u0d47\u0d26\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ml_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ml_dlg.js
new file mode 100644
index 000000000..00b1a1398
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ml_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"\u0d2c\u0d3e\u0d28\u0d4d\u0d27\u0d35 \u0d35\u0d3f\u0d32\u0d3e\u0d38\u0d02","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"\u0d28\u0d1f\u0d41\u0d35\u0d3f\u0d32\u0d4d\u200d","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"\u0d24\u0d3f\u0d30\u0d36\u0d4d\u0d1a\u0d40\u0d28 \u0d38\u0d4d\u0d25\u0d32\u0d02","image_vspace":"\u0d32\u0d02\u0d2c \u0d38\u0d4d\u0d25\u0d32\u0d02","image_dimensions":"\u0d05\u0d33\u0d35\u0d41\u0d15\u0d33\u0d4d\u200d","image_alt":"Image description","image_list":"Image list","image_border":"\u0d05\u0d24\u0d3f\u0d30\u0d41\u0d4d","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"\u0d2a\u0d47\u0d30\u0d41\u0d4d:","colorpicker_color":"\u0d28\u0d3f\u0d31\u0d02:","colorpicker_named_title":"\u0d2a\u0d47\u0d30\u0d3f\u0d1f\u0d4d\u0d1f \u0d28\u0d3f\u0d31\u0d19\u0d4d\u0d19\u0d33\u0d4d\u200d","colorpicker_named_tab":"\u0d2a\u0d47\u0d30\u0d3f\u0d1f\u0d4d\u0d1f","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"\u0d28\u0d3f\u0d31\u0d02 \u0d24\u0d3f\u0d30\u0d1e\u0d4d\u0d1e\u0d46\u0d1f\u0d41\u0d15\u0d4d\u0d15\u0d41\u0d15","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"\u0d28\u0d19\u0d4d\u0d15\u0d42\u0d30 \u0d2a\u0d47\u0d30\u0d41\u0d4d","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d41\u0d4d","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"\u0d38\u0d39\u0d3e\u0d2f\u0d02","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mn.js
new file mode 100644
index 000000000..b5b01b30c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.advanced',{"underline_desc":"\u0414\u043e\u043e\u0433\u0443\u0443\u0440 \u0437\u0443\u0440\u0430\u0430\u0441 (Ctrl+U)","italic_desc":"\u041d\u0430\u043b\u0443\u0443 (Ctrl+I)","bold_desc":"\u0422\u043e\u0434 (Ctrl+B)",dd:"\u0422\u0430\u0439\u043b\u0431\u0430\u0440",dt:"\u0422\u043e\u0434\u043e\u0440\u0445\u043e\u0439\u043b\u043e\u043b\u0442",samp:"\u0416\u0438\u0448\u044d\u044d",code:"\u041a\u043e\u0434",blockquote:"\u0418\u0448\u043b\u044d\u043b",h6:"\u0413\u0430\u0440\u0447\u0438\u0433 6",h5:"\u0413\u0430\u0440\u0447\u0438\u0433 5",h4:"\u0413\u0430\u0440\u0447\u0438\u0433 4",h3:"\u0413\u0430\u0440\u0447\u0438\u0433 3",h2:"\u0413\u0430\u0440\u0447\u0438\u0433 2",h1:"\u0413\u0430\u0440\u0447\u0438\u0433 1",pre:"\u0422\u04af\u04af\u0445\u0438\u0439 \u04e9\u0433\u04e9\u0433\u0434\u04e9\u043b",address:"\u0425\u0430\u044f\u0433",div:"\u0425\u0430\u043c\u0442\u0430\u0442\u0433\u0430\u0441\u0430\u043d \u043c\u0443\u0436",paragraph:"\u041f\u0430\u0440\u0430\u0433\u0440\u0430\u0444",block:"\u0425\u044d\u0432",fontdefault:"\u0424\u043e\u043d\u0442","font_size":"\u0424\u043e\u043d\u0442\u044b\u043d \u0445\u044d\u043c\u0436\u044d\u044d","style_select":"\u0425\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442","more_colors":"\u0411\u0443\u0441\u0430\u0434 \u04e9\u043d\u0433\u04e9","toolbar_focus":"\u0411\u0430\u0433\u0430\u0436 \u0441\u0430\u043c\u0431\u0430\u0440 \u043b\u0443\u0443 \u04af\u0441\u0440\u044d\u0445\u044d\u0434: Alt+Q; \u0417\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0433\u0447 \u0440\u0443\u0443 \u04af\u0441\u0440\u044d\u0445\u044d\u0434: Alt-Z; \u042d\u043b\u0435\u043c\u0435\u043d\u0442\u0438\u0439\u043d \u0437\u0430\u043c \u0440\u0443\u0443 \u04af\u0441\u0440\u044d\u0445\u044d\u0434: Alt-X",newdocument:"\u0422\u0430 \u0431\u04af\u0445 \u0430\u0433\u0443\u0443\u043b\u0433\u044b\u0433 \u0443\u0441\u0442\u0433\u0430\u0445\u0434\u0430\u0430 \u0438\u0442\u0433\u044d\u043b\u0442\u044d\u0439 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?",path:"\u0417\u0430\u043c","clipboard_msg":"\u0425\u0443\u0443\u043b\u0430\u0445, \u0442\u0430\u0441\u043b\u0430\u043d \u0430\u0432\u0430\u0445 \u0431\u0443\u0443\u043b\u0433\u0430\u0445 \u043d\u044c \u041c\u043e\u0437\u0438\u043b\u043b\u0430 \u0424\u0430\u0439\u0440\u0444\u043e\u043a\u0441 \u0434\u044d\u044d\u0440 \u0431\u043e\u043b\u043e\u043c\u0436\u0433\u04af\u0439. \n \u0422\u0430 \u044d\u043d\u044d \u0430\u0441\u0443\u0443\u0434\u043b\u044b\u043d \u0442\u0430\u043b\u0430\u0430\u0440 \u0434\u044d\u043b\u0433\u044d\u0440\u044d\u043d\u0433\u04af\u0439 \u043c\u044d\u0434\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","blockquote_desc":"\u0418\u0448\u043b\u044d\u043b","help_desc":"\u0422\u0443\u0441\u043b\u0430\u043c\u0436","newdocument_desc":"\u0428\u0438\u043d\u044d \u0431\u0430\u0440\u0438\u043c\u0442","image_props_desc":"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0442\u043e\u0434\u0440\u0443\u0443\u043b\u0433\u0430","paste_desc":"\u041e\u0440\u0443\u0443\u043b\u0430\u0445","copy_desc":"\u0425\u0443\u0443\u043b\u0430\u0445","cut_desc":"\u0422\u0430\u0441\u043b\u0430\u043d \u0430\u0432\u0430\u0445","anchor_desc":"\u0413\u0430\u0434\u0430\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","visualaid_desc":"\u0422\u0443\u0441\u043b\u0430\u0445 \u0448\u0443\u0433\u0430\u043c \u0431\u0430 \u04af\u043b \u04af\u0437\u044d\u0433\u0434\u044d\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u04af\u04af\u0434\u0438\u0439\u0433 \u0445\u0430\u0440\u0443\u0443\u043b\u0430\u0445/\u0434\u0430\u043b\u0434\u043b\u0430\u0445","charmap_desc":"\u0422\u0443\u0441\u0433\u0430\u0439 \u0442\u044d\u043c\u0434\u044d\u0433\u0442 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","backcolor_desc":"\u0414\u044d\u0432\u0441\u0433\u044d\u0440 \u04e9\u043d\u0433\u04e9","forecolor_desc":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u04e9\u043d\u0433\u04e9","custom1_desc":"\u0425\u044d\u0440\u044d\u0433\u043b\u044d\u0433\u0447\u0438\u0439\u043d \u0442\u043e\u0434\u043e\u0440\u0445\u043e\u0439\u043b\u0441\u043e\u043d \u0442\u0430\u0439\u043b\u0431\u0430\u0440","removeformat_desc":"\u0425\u044d\u043b\u0431\u044d\u0440\u0436\u04af\u04af\u043b\u044d\u043b\u0442 \u0443\u0441\u0442\u0433\u0430\u0445","hr_desc":"\u0422\u0443\u0441\u0433\u0430\u0430\u0440\u043b\u0430\u0433\u0447 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","sup_desc":"\u0414\u044d\u044d\u0440 \u0431\u0430\u0439\u0440\u043b\u0430\u043b","sub_desc":"\u0414\u043e\u043e\u0440 \u0431\u0430\u0439\u0440\u043b\u0430\u043b","code_desc":"HTML-\u044d\u0445 \u043a\u043e\u0434 \u0437\u0430\u0441\u0430\u0445","cleanup_desc":"\u042d\u0445 \u043a\u043e\u0434 \u0446\u044d\u0432\u044d\u0440\u043b\u044d\u0445","image_desc":"\u0417\u0443\u0440\u0430\u0433 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","unlink_desc":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u0443\u0441\u0442\u0433\u0430\u0445","link_desc":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","redo_desc":"\u0426\u0443\u0446\u043b\u0430\u0445 (Ctrl+Y)","undo_desc":"\u0411\u0443\u0446\u0430\u0430\u0445 (Ctrl+Z)","indent_desc":"\u0414\u043e\u0433\u043e\u043b \u043c\u04e9\u0440 \u043e\u0440\u0443\u0443\u043b\u0430\u0445","outdent_desc":"\u0414\u043e\u0433\u043e\u043b \u043c\u04e9\u0440 \u0443\u0441\u0442\u0433\u0430\u0445","numlist_desc":"\u0414\u0443\u0433\u0430\u0430\u0440\u043b\u0430\u043b\u0442","bullist_desc":"\u0422\u043e\u043e\u0447\u0438\u043b\u0442","justifyfull_desc":"\u0422\u044d\u0433\u0448\u0438\u043b\u0441\u044d\u043d","justifyright_desc":"\u0411\u0430\u0440\u0443\u0443\u043d \u0436\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u0441\u044d\u043d","justifycenter_desc":"\u0413\u043e\u043b\u0434 \u0436\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u0441\u044d\u043d","justifyleft_desc":"\u0417\u04af\u04af\u043d \u0436\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u0441\u044d\u043d","striketrough_desc":"\u0414\u0430\u0440\u0441\u0430\u043d","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mn_dlg.js
new file mode 100644
index 000000000..6875e4940
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/mn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.advanced_dlg',{"link_list":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441\u044b\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442","link_is_external":"\u0425\u0430\u044f\u0433 \u0434\u044d\u044d\u0440 \u0433\u0430\u0434\u0430\u0430\u0434 \u0445\u043e\u043b\u0431\u043e\u043e\u0441 \u0431\u0430\u0439\u0433\u0430\u0430 \u0445\u0430\u0440\u0430\u0433\u0434\u0430\u043d\u0430. \u0422\u0430 \u0437\u04e9\u0432 \u0445\u043e\u043b\u0431\u043e\u043e\u0441 \u0431\u043e\u043b\u0433\u043e\u0445\u044b\u043d \u0442\u0443\u043b\u0434 http:// \u043d\u044d\u043c\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","link_is_email":"\u0425\u0430\u044f\u0433 \u0434\u044d\u044d\u0440 \u0418\u043c\u044d\u0439\u043b \u0445\u0430\u044f\u0433 \u0431\u0430\u0439\u0445 \u0448\u0438\u0433 \u0445\u0430\u0440\u0430\u0433\u0434\u0430\u043d\u0430. \u0422\u0430 \u0442\u04af\u04af\u043d\u0434 \u0448\u0430\u0430\u0440\u0434\u043b\u0430\u0433\u0430\u0442\u0430\u0439 mailto: \u043d\u044d\u043c\u044d\u0445\u0438\u0439\u0433 \u0445\u04af\u0441\u044d\u0436 \u0431\u0430\u0439\u043d\u0430 \u0443\u0443?","link_titlefield":"\u0413\u0430\u0440\u0447\u0438\u0433","link_target_blank":"\u0428\u0438\u043d\u044d \u0446\u043e\u043d\u0445\u043e\u043d\u0434 \u043d\u044d\u044d\u0445","link_target_same":"\u0422\u0443\u0445\u0430\u0439\u043d \u0446\u043e\u043d\u0445\u043e\u043d\u0434 \u043d\u044d\u044d\u0445","link_target":"\u0426\u043e\u043d\u0445","link_url":"\u0425\u0430\u044f\u0433","link_title":"\u0425\u043e\u043b\u0431\u043e\u043e\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","image_align_right":"\u0411\u0430\u0440\u0443\u0443\u043d","image_align_left":"\u0417\u04af\u04af\u043d","image_align_textbottom":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u0434\u043e\u043e\u0440","image_align_texttop":"\u0411\u0438\u0447\u0432\u044d\u0440\u0438\u0439\u043d \u0434\u044d\u044d\u0440","image_align_bottom":"\u0414\u043e\u043e\u0440","image_align_middle":"\u0414\u0443\u043d\u0434","image_align_top":"\u0414\u044d\u044d\u0440","image_align_baseline":"\u041c\u04e9\u0440","image_align":"\u0416\u0438\u0433\u0434\u0440\u04af\u04af\u043b\u044d\u043b\u0442","image_hspace":"\u0425\u044d\u0432\u0442\u044d\u044d \u0430\u043b\u0441\u043b\u0430\u043b\u0442","image_vspace":"\u0411\u043e\u0441\u043e\u043e \u0430\u043b\u0441\u043b\u0430\u043b\u0442","image_dimensions":"\u0425\u044d\u043c\u0436\u044d\u044d\u0441","image_alt":"\u0425\u043e\u0451\u0440\u0434\u043e\u0433\u0447 \u0431\u0438\u0447\u0432\u044d\u0440","image_list":"\u0417\u0443\u0440\u0433\u0438\u0439\u043d \u0436\u0430\u0433\u0441\u0430\u0430\u043b\u0442","image_border":"\u0425\u04af\u0440\u044d\u044d","image_src":"\u0425\u0430\u044f\u0433","image_title":"\u0417\u0443\u0440\u0430\u0433 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","charmap_title":"\u0422\u0443\u0441\u0433\u0430\u0439 \u0442\u044d\u043c\u0434\u044d\u0433\u0442","colorpicker_name":"\u041d\u044d\u0440:","colorpicker_color":"\u04e8\u043d\u0433\u04e9:","colorpicker_named_title":"\u041d\u044d\u0440\u043b\u044d\u0441\u044d\u043d \u04e9\u043d\u0433\u04e9","colorpicker_named_tab":"\u041d\u044d\u0440\u043b\u044d\u0441\u044d\u043d \u04e9\u043d\u0433\u04e9","colorpicker_palette_title":"\u04e8\u043d\u0433\u04e9\u043d\u0438\u0439 \u043d\u0438\u0439\u043b\u04af\u04af\u0440","colorpicker_palette_tab":"\u041d\u0438\u0439\u043b\u04af\u04af\u0440","colorpicker_picker_title":"\u04e8\u043d\u0433\u04e9 \u0441\u043e\u043d\u0433\u043e\u043b\u0442","colorpicker_picker_tab":"\u04e8\u043d\u0433\u04e9 \u0441\u043e\u043d\u0433\u043e\u043b\u0442","colorpicker_title":"\u04e8\u043d\u0433\u04e9","code_wordwrap":"\u0410\u0432\u0442\u043e\u043c\u0430\u0442 \u043c\u04e9\u0440 \u043e\u0440\u043e\u043e\u043b\u0442","code_title":"HTML-\u044d\u0445 \u043a\u043e\u0434 \u0437\u0430\u0441\u0432\u0430\u0440\u043b\u0430\u0445","anchor_name":"\u0413\u0430\u0434\u0430\u0441\u043d\u044b \u043d\u044d\u0440","anchor_title":"\u0413\u0430\u0434\u0430\u0441 \u043e\u0440\u0443\u0443\u043b\u0430\u0445/\u04e9\u04e9\u0440\u0447\u043b\u04e9\u0445","about_loaded":"\u0410\u0447\u0430\u0430\u043b\u0430\u0433\u0434\u0441\u0430\u043d \u041f\u043b\u0430\u0433\u0438\u043d\u04af\u04af\u0434","about_version":"\u0425\u0443\u0432\u0438\u043b\u0431\u0430\u0440","about_author":"\u0417\u043e\u0445\u0438\u043e\u0433\u0447","about_plugin":"\u041f\u043b\u0430\u0433\u0438\u043d","about_plugins":"\u041f\u043b\u0430\u0433\u0438\u043d","about_license":"\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u0439\u043d \u043d\u04e9\u0445\u0446\u04e9\u043b","about_help":"\u0422\u0443\u0441\u043b\u0430\u043c\u0436","about_general":"\u0422\u0443\u0445\u0430\u0439\u2026","about_title":"TinyMCE \u0442\u0443\u0445\u0430\u0439","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ms.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ms.js
new file mode 100644
index 000000000..599e211b9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ms.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.advanced',{"underline_desc":"Garis bawah (Ctrl+U)","italic_desc":"Condong (Ctrl+I)","bold_desc":"Tebal (Ctrl+B)",dd:"Maksud huraian",dt:"Maksud terma",samp:"Contoh kod",code:"Kod",blockquote:"Petikan blok",h6:"Tajuk 6",h5:"Tajuk 5",h4:"Tajuk 4",h3:"Tajuk 3",h2:"Tajuk 2",h1:"Tajuk 1",pre:"Telah diformatkan",address:"Alamat",div:"Div",paragraph:"Perenggan",block:"Format",fontdefault:"Jenis Huruf","font_size":"Saiz Huruf","style_select":"Gaya","more_colors":"Warna lain","toolbar_focus":"Lompat ke butang alatan - Alt+Q, Lompat ke editor - Alt-Z, Lompat ke unsur laluan - Alt-X",newdocument:"Hapus semua kandungan?",path:"Laluan","clipboard_msg":"Salin/Potong/Tempel tidak disokong dalam Mozilla dan Firefox.\nAdakah anda mahu informasi lanjut tentang isu ini?","blockquote_desc":"Petikan blok","help_desc":"Bantuan","newdocument_desc":"Dokumen baru","image_props_desc":"Alatan imej","paste_desc":"Tempel","copy_desc":"Salin","cut_desc":"Potong","anchor_desc":"Sisip/sunting anchor","visualaid_desc":"Alih garis panduan/unsur tak nampak","charmap_desc":"Sisip aksara","backcolor_desc":"Pilih warna latar belakang","forecolor_desc":"Pilih warna teks","custom1_desc":"Huraian anda di sini","removeformat_desc":"Alih format","hr_desc":"Sisip pembaris mengufuk","sup_desc":"Superskrip","sub_desc":"Subskrip","code_desc":"Sunting kod HTML","cleanup_desc":"Bersihkan kod","image_desc":"Sisip/sunting imej","unlink_desc":"Tiada pautan","link_desc":"Sisip/sunting pautan","redo_desc":"Maju (Ctrl+Y)","undo_desc":"Undur (Ctrl+Z)","indent_desc":"Lekuk kedepan","outdent_desc":"Lekuk kebelakang","numlist_desc":"Senarai tertib","bullist_desc":"Senarai tidak tertib","justifyfull_desc":"Selari penuh","justifyright_desc":"Selari kekanan","justifycenter_desc":"Selari ketengah","justifyleft_desc":"Selari kekiri","striketrough_desc":"Garis tengah","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ms_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ms_dlg.js
new file mode 100644
index 000000000..550c32cd3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ms_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.advanced_dlg',{"link_list":"Senarai pautan","link_is_external":"URL yang anda masukkan adalah pautan luar, tambah \"http://\" di awalan?","link_is_email":"URL yang anda masukkan adalah alamat emel, tambah \"mailto\": di awalan?","link_titlefield":"Tajuk","link_target_blank":"Buka pautan dalam tetingkap yang sama","link_target_same":"Buka pautan dalam tetingkap yang sama","link_target":"Sasaran","link_url":"Pautan URL","link_title":"Sisip/sunting pautan","image_align_right":"Kanan","image_align_left":"Kiri","image_align_textbottom":"Teks bawah","image_align_texttop":"Teks atas","image_align_bottom":"Bawah","image_align_middle":"Tengah","image_align_top":"Atas","image_align_baseline":"Garis pangkal","image_align":"Penyelarian","image_hspace":"Ruangan ufuk","image_vspace":"Ruangan tegak","image_dimensions":"Dimensi","image_alt":"Huraian imej","image_list":"Senarai imej","image_border":"Sempadan","image_src":"Imej URL","image_title":"Sisip/sunting imej","charmap_title":"Pilih aksara sendiri","colorpicker_name":"Nama:","colorpicker_color":"Warna:","colorpicker_named_title":"Warna telah dinamakan","colorpicker_named_tab":"Dinamakan","colorpicker_palette_title":"Palet warna","colorpicker_palette_tab":"Palet","colorpicker_picker_title":"Pemungut warna","colorpicker_picker_tab":"Pemungut","colorpicker_title":"Pilih warna","code_wordwrap":"Sisip perkataan","code_title":"Penyunting HTML","anchor_name":"Nama sauh","anchor_title":"Sisip/sunting sauh","about_loaded":"Muatan plugins","about_version":"Versi","about_author":"Pengarang","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Lesen","about_help":"Bantuan","about_general":"Perihal","about_title":"Perihal TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/my.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/my.js
new file mode 100644
index 000000000..e09fdd142
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/my.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.advanced',{"underline_desc":"\u1031\u1021\u102c\u1000\u103a\u1019\u103b\u1009\u103a\u1038 (Ctrl U)","italic_desc":"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1005\u102c\u1004\u103a\u1038 (Ctrl I)","bold_desc":"\u1005\u102c\u101c\u1036\u102f\u1038\u1021\u1011\u1030 (Ctrl B)",dd:"\u1021\u1013\u102d\u1015\u1039\u1015\u102b\u101a\u103a \u1031\u1016\u102c\u103a\u103c\u1015\u1001\u103b\u1000\u103a\u1019\u103b\u102c\u1038",dt:"\u1021\u1013\u102d\u1015\u1039\u1015\u102b\u101a\u103a \u101e\u1010\u103a\u1019\u103e\u1010\u103a\u1001\u103b\u1000\u103a\u1005\u102c\u101c\u1036\u102f\u1038",samp:"\u1000\u102f\u1010\u103a \u1014\u1019\u1030\u1014\u102c",code:"\u1000\u102f\u1010\u103a",blockquote:"\u1000\u102d\u102f\u1038\u1000\u102c\u1038\u1001\u103b\u1000\u103a \u1005\u102c\u1015\u102d\u102f\u1012\u103a",h6:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1046",h5:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1045",h4:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1044",h3:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1043",h2:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1042",h1:"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a\u1001\u103d\u1032 \u1041",pre:"\u103c\u1000\u102d\u102f\u1010\u1004\u103a\u1015\u1036\u102f\u1005\u1036\u1001\u103b\u1011\u102c\u1038\u1031\u101e\u102c",address:"\u101c\u102d\u1015\u103a\u1005\u102c",div:"DIV",paragraph:"\u1005\u102c\u1015\u102d\u102f\u1012\u103a",block:"\u1015\u1036\u102f\u1005\u1036\u1001\u103b\u1015\u1036\u102f",fontdefault:"\u1031\u1016\u102c\u1004\u103a\u1037\u1005\u102c\u101c\u1036\u102f\u1038 \u1019\u102d\u101e\u102c\u1038\u1005\u102f","font_size":"\u1031\u1016\u102c\u1004\u103a\u1037\u1005\u102c\u101c\u1036\u102f\u1038 \u1021\u101b\u103d\u101a\u103a","style_select":"\u1005\u1010\u102d\u102f\u1004\u103a\u1019\u103b\u102c\u1038","charmap_delta_height":"460","charmap_delta_width":"","more_colors":"\u1031\u1014\u102c\u1000\u103a\u1011\u1015\u103a \u1021\u1031\u101b\u102c\u1004\u103a\u1019\u103b\u102c\u1038","toolbar_focus":"\u1000\u102d\u101b\u102d\u101a\u102c\u1001\u101c\u102f\u1015\u103a\u1019\u103b\u102c\u1038\u101e\u102d\u102f\u1037\u101e\u103d\u102c\u1038\u101b\u1014\u103a - Alt Q\u104a \u1005\u102c\u101e\u102c\u1038\u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a\u1031\u1014\u101b\u102c\u101e\u102d\u102f\u1037\u101e\u103d\u102c\u1038\u101b\u1014\u103a - Alt-Z\u104a \u1021\u1005\u102d\u1010\u103a\u1021\u1015\u102d\u102f\u1004\u103a\u1038\u101c\u1019\u103a\u1038\u1031\u103c\u1000\u102c\u1004\u103a\u1038\u101e\u102d\u102f\u1037\u101e\u103d\u102c\u1038\u101b\u1014\u103a - Alt-X",newdocument:"\u1015\u102b\u101d\u1004\u103a\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1021\u102c\u1038\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1016\u101a\u103a\u101b\u103e\u102c\u101c\u102d\u102f\u101e\u100a\u103a\u1019\u103e\u102c \u1031\u101e\u1001\u103b\u102c\u101b\u1032\u1037\u101c\u102c\u1038?",path:"\u101c\u1019\u103a\u1038\u1031\u103c\u1000\u102c\u1004\u103a\u1038","clipboard_msg":"Mozilla \u1014\u103e\u1004\u103a\u1037 Firefox \u1010\u103d\u1004\u103a \u1019\u102d\u1010\u1039\u1010\u1030\u1000\u1030\u1038/\u103c\u1016\u1010\u103a/\u103c\u1016\u100a\u103a\u1037\u1000\u1030\u1038 \u1019\u103e\u102f\u1019\u103b\u102c\u1038 \u1019\u103c\u1015\u102f\u101c\u102f\u1015\u103a\u1014\u102d\u102f\u1004\u103a\u1015\u102b\u104brn\u1012\u102e\u103c\u1015\u103f\u1014\u102c\u1021\u1031\u103c\u1000\u102c\u1004\u103a\u1038 \u1021\u1031\u101e\u1038\u1005\u102d\u1010\u103a\u1011\u1015\u103a\u1019\u1036 \u101e\u102d\u101c\u102d\u102f\u1015\u102b\u101e\u101c\u102c\u1038?","blockquote_desc":"\u1000\u102d\u102f\u1038\u1000\u102c\u1038\u1001\u103b\u1000\u103a \u1005\u102c\u1015\u102d\u102f\u1012\u103a","help_desc":"\u1021\u1000\u1030\u1021\u100a\u102e","newdocument_desc":"\u1005\u102c\u101b\u103d\u1000\u103a\u1005\u102c\u1010\u1019\u103a\u1038 \u1021\u101e\u1005\u103a","image_props_desc":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u101d\u102d\u1031\u101e\u101e\u101c\u1000\u1039\u1001\u100f\u102c\u1019\u103b\u102c\u1038","paste_desc":"\u103c\u1016\u100a\u103a\u1037\u1000\u1030\u1038","copy_desc":"\u1019\u102d\u1010\u1039\u1010\u1030\u1000\u1030\u1038","cut_desc":"\u103c\u1016\u1010\u103a","anchor_desc":"\u1001\u103b\u102d\u1010\u103a \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","visualaid_desc":"\u1019\u103c\u1019\u1004\u103a\u101b\u1031\u101e\u102c \u1021\u1015\u102d\u102f\u1004\u103a\u1038\u1019\u103b\u102c\u1038/Guidlines \u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1016\u103d\u1004\u103a\u1037/\u1015\u102d\u1010\u103a","charmap_desc":"\u1005\u102d\u1010\u103a\u103c\u1000\u102d\u102f\u1000\u103a \u1021\u1000\u1039\u1001\u101b\u102c\u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u101b\u1014\u103a","backcolor_desc":"\u1031\u1014\u102c\u1000\u103a\u1001\u1036\u1021\u1031\u101b\u102c\u1004\u103a\u101e\u1010\u103a\u1019\u103e\u1010\u103a\u1031\u1015\u1038\u101b\u1014\u103a","forecolor_desc":"\u1005\u102c\u101e\u102c\u1038\u1021\u1031\u101b\u102c\u1004\u103a\u1031\u101b\u103d\u1038\u101b\u1014\u103a","custom1_desc":"\u101e\u1004\u103a\u1037\u1005\u102d\u1010\u103a\u103c\u1000\u102d\u102f\u1000\u103a\u1031\u1016\u102c\u103a\u103c\u1015\u1001\u103b\u1000\u103a\u1000\u102d\u102f \u1012\u102e\u1019\u103e\u102c\u103c\u1016\u100a\u103a\u1037\u1015\u102b","removeformat_desc":"\u1015\u1036\u102f\u1005\u1036\u1001\u103b\u1011\u102c\u1038\u1019\u103e\u102f\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u1016\u101a\u103a\u101b\u103e\u102c\u1038","hr_desc":"\u1031\u101b\u103c\u1015\u1004\u103a\u100a\u102e\u1019\u103b\u1009\u103a\u1038 \u1011\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u101b\u1014\u103a","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"HTML \u101b\u1004\u103a\u1038\u103c\u1019\u1005\u103a\u1000\u102d\u102f \u103c\u1015\u102f\u103c\u1015\u1004\u103a","cleanup_desc":"\u101b\u103e\u102f\u1015\u103a\u1015\u103d\u1031\u1014\u1031\u101e\u102c \u1000\u102f\u1010\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u101b\u103e\u1004\u103a\u1038","image_desc":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","unlink_desc":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u103c\u1016\u102f\u1010\u103a","link_desc":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","redo_desc":"\u103c\u1015\u1014\u103a\u101c\u102f\u1015\u103a (Ctrl Y)","undo_desc":"\u1019\u101c\u102f\u1015\u103a (Ctrl Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"\u1021\u1019\u103e\u1010\u103a\u1005\u1009\u103a\u1010\u1015\u103a\u1031\u101e\u102c \u1005\u102c\u101b\u1004\u103a\u1038","bullist_desc":"\u1021\u1019\u103e\u1010\u103a\u1005\u1009\u103a\u1019\u1010\u1015\u103a\u1031\u101e\u102c \u1005\u102c\u101b\u1004\u103a\u1038","justifyfull_desc":"\u1021\u103c\u1015\u100a\u103a\u1037\u100a\u102d\u103e","justifyright_desc":"\u100a\u102c\u100a\u102d\u103e","justifycenter_desc":"\u1021\u101c\u101a\u103a\u100a\u102d\u103e","justifyleft_desc":"\u1018\u101a\u103a\u100a\u102d\u103e","striketrough_desc":"\u103c\u1016\u1010\u103a\u1019\u103b\u1009\u103a\u1038","anchor_delta_height":"","anchor_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/my_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/my_dlg.js
new file mode 100644
index 000000000..7465ed017
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/my_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.advanced_dlg',{"link_list":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1005\u102c\u101b\u1004\u103a\u1038","link_is_external":"\u101e\u1004\u103a\u103c\u1016\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u1031\u101e\u102c URL \u101e\u100a\u103a \u103c\u1015\u1004\u103a\u1015\u1019\u103e \u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u103c\u1016\u1005\u103a\u1019\u100a\u103a\u104a \u101c\u102d\u102f\u1021\u1015\u103a\u1031\u101e\u102c http:// \u1031\u101b\u103e\u1037\u1006\u1000\u103a\u1005\u102c\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1011\u100a\u103a\u1037\u101c\u102d\u102f\u1015\u102b\u101e\u101c\u102c\u1038?","link_is_email":"\u101e\u1004\u103a\u103c\u1016\u100a\u103a\u1037\u101e\u103d\u1004\u103a\u1038\u1031\u101e\u102c URL \u101e\u100a\u103a email \u101c\u102d\u1015\u103a\u1005\u102c\u1014\u103e\u1004\u103a\u1037\u1010\u1030\u101e\u100a\u103a\u104a \u101c\u102d\u102f\u1021\u1015\u103a\u1031\u101e\u102c mailto: \u1031\u101b\u103e\u1037\u1006\u1000\u103a\u1005\u102c\u101c\u1036\u102f\u1038\u1000\u102d\u102f \u1011\u100a\u103a\u1037\u101c\u102d\u102f\u1015\u102b\u101e\u101c\u102c\u1038?","link_titlefield":"\u1031\u1001\u102b\u1004\u103a\u1038\u1005\u1009\u103a","link_target_blank":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1000\u102d\u102f \u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1021\u101e\u1005\u103a\u1010\u103d\u1004\u103a \u1016\u103d\u1004\u103a\u1037\u1015\u102b\u104b","link_target_same":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c\u1000\u102d\u102f \u1010\u1030\u100a\u102e\u1031\u101e\u102c \u101d\u1004\u103a\u1038\u1012\u102d\u102f\u1038\u1010\u103d\u1004\u103a \u1016\u103d\u1004\u103a\u1037\u1015\u102b","link_target":"\u1025\u102e\u1038\u1010\u100a\u103a\u1001\u103b\u1000\u103a\u1031\u1014\u101b\u102c","link_url":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c URL","link_title":"\u1001\u103b\u102d\u1010\u103a\u1006\u1000\u103a\u101c\u102d\u1015\u103a\u1005\u102c \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","image_align_right":"\u100a\u102c","image_align_left":"\u1018\u101a\u103a","image_align_textbottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u1010\u103d\u1004\u103a \u1005\u102c\u101e\u102c\u1038","image_align_texttop":"\u1011\u102d\u1015\u103a\u1010\u103d\u1004\u103a \u1005\u102c\u101e\u102c\u1038","image_align_bottom":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001","image_align_middle":"\u1021\u101c\u101a\u103a","image_align_top":"\u1011\u102d\u1015\u103a","image_align_baseline":"\u1031\u1021\u102c\u1000\u103a\u1031\u103c\u1001\u1019\u103b\u1009\u103a\u1038","image_align":"\u1001\u103b\u102d\u1014\u103a\u100a\u102d\u103e\u1019\u103e\u102f","image_hspace":"\u1021\u101c\u103b\u103e\u102c\u1038\u101c\u102d\u102f\u1000\u103a \u1000\u103d\u1000\u103a\u101c\u1015\u103a","image_vspace":"\u1031\u1012\u102b\u1004\u103a\u101c\u102d\u102f\u1000\u103a \u1000\u103d\u1000\u103a\u101c\u1015\u103a","image_dimensions":"\u1021\u1010\u102d\u102f\u1004\u103a\u1038\u1021\u1011\u103d\u102c\u1019\u103b\u102c\u1038","image_alt":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1005\u102c\u100a\u103d\u103e\u1014\u103a\u1038","image_list":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1005\u102c\u101b\u1004\u103a\u1038","image_border":"\u1014\u101a\u103a\u1005\u100a\u103a\u1038","image_src":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f URL","image_title":"\u101b\u102f\u1015\u103a\u1015\u1036\u102f \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","charmap_title":"\u1005\u102d\u1010\u103a\u103c\u1000\u102d\u102f\u1000\u103a \u1021\u1000\u1039\u1001\u101b\u102c \u1031\u101b\u103d\u1038\u1015\u102b","colorpicker_name":"\u1021\u1019\u100a\u103a :","colorpicker_color":"\u1021\u1031\u101b\u102c\u1004\u103a :","colorpicker_named_title":"\u1021\u1019\u100a\u103a\u1031\u1015\u1038\u1011\u102c\u1038\u1031\u101e\u102c \u1021\u1031\u101b\u102c\u1004\u103a\u1019\u103b\u102c\u1038","colorpicker_named_tab":"\u1021\u1019\u100a\u103a\u1031\u1015\u1038\u1011\u102c\u1038\u1031\u101e\u102c","colorpicker_palette_title":"\u1015\u101c\u102d\u1010\u103a\u103c\u1015\u102c\u1038 \u1021\u1031\u101b\u102c\u1004\u103a\u1019\u103b\u102c\u1038","colorpicker_palette_tab":"\u1015\u101c\u102d\u1010\u103a\u103c\u1015\u102c\u1038","colorpicker_picker_title":"\u1021\u1031\u101b\u102c\u1004\u103a\u1031\u101b\u103d\u1038\u1031\u1000\u102c\u1000\u103a\u101b\u1014\u103a","colorpicker_picker_tab":"\u1031\u101b\u103d\u1038\u1031\u1000\u102c\u1000\u103a\u101b\u1014\u103a","colorpicker_title":"\u1021\u1031\u101b\u102c\u1004\u103a\u1031\u101b\u103d\u1038\u101b\u1014\u103a","code_wordwrap":"Word Wrap","code_title":"HTML \u101b\u1004\u103a\u1038\u103c\u1019\u1005\u103a \u103c\u1015\u102f\u103c\u1015\u1004\u103a\u101b\u1014\u103a \u1031\u1014\u101b\u102c","anchor_name":"\u1001\u103b\u102d\u1010\u103a \u1021\u1019\u100a\u103a","anchor_title":"\u1001\u103b\u102d\u1010\u103a \u1011\u100a\u103a\u1037/\u103c\u1015\u1004\u103a","about_loaded":"\u101c\u102f\u1015\u103a\u1031\u1006\u102c\u1004\u103a\u1031\u1014\u1031\u101e\u102c \u1015\u101c\u1015\u103a\u1021\u1004\u103a\u1019\u103b\u102c\u1038","about_version":"\u1017\u102c\u1038\u101b\u103e\u1004\u103a\u1038","about_author":"\u1031\u101b\u1038\u101e\u1030","about_plugin":"\u1015\u101c\u1015\u103a\u1021\u1004\u103a","about_plugins":"\u1015\u101c\u1015\u103a\u1021\u1004\u103a\u1019\u103b\u102c\u1038","about_license":"\u101c\u102d\u102f\u1004\u103a\u1005\u1004\u103a","about_help":"\u1021\u1000\u1030\u1021\u100a\u102e","about_general":"\u101e\u102d\u1031\u1000\u102c\u1004\u103a\u1038\u1005\u101b\u102c","about_title":"TinyMCE \u1021\u1031\u103c\u1000\u102c\u1004\u103a\u1038","anchor_invalid":"\u101e\u1004\u103a\u1037\u1031\u101c\u103b\u103e\u102c\u103a\u1019\u103e\u1014\u103a\u1000\u1014\u103a\u1019\u103e\u102f\u101b\u103e\u102d\u1031\u101e\u102c \u1001\u103b\u102d\u1010\u103a\u1021\u1019\u100a\u103a\u1031\u1015\u1038\u1015\u102b\u104b","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nb.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nb.js
new file mode 100644
index 000000000..c83c6aaa5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.advanced',{"underline_desc":"Understreking","italic_desc":"Kursiv","bold_desc":"Fet",dd:"Definisjonsbeskrivelse",dt:"Definisjonsuttrykk",samp:"Kodeeksempel",code:"Kode",blockquote:"Innrykkinnrykk",h6:"Overskrift 6",h5:"Overskrift 5",h4:"Overskrift 4",h3:"Overskrift 3",h2:"Overskrift 2",h1:"Overskrift 1",pre:"Pre-formatert",address:"Adresse",div:"Div",paragraph:"Avsnitt",block:"Format",fontdefault:"Skriftfamilie","font_size":"Skriftst\u00f8rrelse","style_select":"Stiler","more_colors":"Flere farger","toolbar_focus":"Skift til verkt\u00f8yknapper - Alt+Q, Skift til editor - Alt-Z, Skift til elementsti - Alt-",newdocument:"Er du sikker p\u00e5 at du vil slette alt innhold?",path:"Sti","clipboard_msg":"Klipp ut / Kopier /Lim inn fungerer ikke i Mozilla og Firefox. \n Vil du vite mer om dette?","blockquote_desc":"Innrykk","help_desc":"Hjelp","newdocument_desc":"Nytt dokument","image_props_desc":"Bildeegenskaper","paste_desc":"Lim inn","copy_desc":"Kopier","cut_desc":"Klipp ut","anchor_desc":"Sett inn / endre anker","visualaid_desc":"Sl\u00e5 av/p\u00e5 usynlige elementer","charmap_desc":"Sett inn spesialtegn","backcolor_desc":"Velg bakgrunnsfarge","forecolor_desc":"Velg skriftfarge","custom1_desc":"Beskrivelse av spesialfunksjon","removeformat_desc":"Fjern formatering","hr_desc":"Sett inn horisontal linje","sup_desc":"Hevet skrift","sub_desc":"Senket skrift","code_desc":"Redigere HTML-koden","cleanup_desc":"Rens ukurant kode","image_desc":"Sett inn / endre bilde","unlink_desc":"Fjern lenke","link_desc":"Sett inn / endre lenke","redo_desc":"Gj\u00f8r om","undo_desc":"Angre","indent_desc":"\u00d8k innrykk","outdent_desc":"Reduser innrykk","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","justifyfull_desc":"Blokkjuster","justifyright_desc":"H\u00f8yrejuster","justifycenter_desc":"Midtstill","justifyleft_desc":"Venstrejuster","striketrough_desc":"Gjennomstreking","help_shortcut":"Trykk ALT F10 for verkt\u00f8ylinjen. Trykk ALT 0 for hjelp","rich_text_area":"Rich tekstomr\u00e5det","shortcuts_desc":"Tilgjengelighetshjelp",toolbar:"Verkt\u00f8ylinje","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nb_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nb_dlg.js
new file mode 100644
index 000000000..16b3d18b0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nb_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.advanced_dlg',{"link_list":"Lenkeliste","link_is_external":"Nettadressen du skrev inn ser ut til \u00e5 v\u00e6re en ekstern nettadresse. \u00d8nsker du \u00e5 legge til det p\u00e5krevde http://-prefikset?","link_is_email":"Nettadressen du skrev inn ser ut til \u00e5 v\u00e6re en e-postadresse. \u00d8nsker du \u00e5 legge til det p\u00e5krevde mailto:-prefikset?","link_titlefield":"Tittel","link_target_blank":"\u00c5pne i nytt vindu","link_target_same":"\u00c5pne i dette vinduet","link_target":"M\u00e5lside","link_url":"Lenkens URL","link_title":"Sett inn /endre lenke","image_align_right":"H\u00f8yre","image_align_left":"Venstre","image_align_textbottom":"Tekstbunn","image_align_texttop":"Teksttopp","image_align_bottom":"Bunn","image_align_middle":"Midtstilt","image_align_top":"Topp","image_align_baseline":"Bunnlinje","image_align":"Justering","image_hspace":"Horisontal avstand","image_vspace":"Vertikal avstand","image_dimensions":"Dimensjoner","image_alt":"Bildebeskrivelse","image_list":"Bildeliste","image_border":"Ramme","image_src":"Bildets URL","image_title":"Sett inn / endre bilde","charmap_title":"Velg spesialtegn","colorpicker_name":"Navn:","colorpicker_color":"Farge:","colorpicker_named_title":"Fargenavn","colorpicker_named_tab":"Navnevalg","colorpicker_palette_title":"Palettfarger","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"Fargevalg","colorpicker_picker_tab":"Velg farge","colorpicker_title":"Velg en farge","code_wordwrap":"Tekstbryting","code_title":"HTML-editor","anchor_name":"Ankernavn","anchor_title":"Sett inn / endre anker","about_loaded":"Lastede programtillegg","about_version":"Versjon","about_author":"Utvikler","about_plugin":"Programtillegg","about_plugins":"Programtillegg","about_license":"Lisens","about_help":"Hjelp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Bruk venstre og h\u00f8yre piltast for \u00e5 navigere.","anchor_invalid":"Du m\u00e5 angi et gyldig ankernavn.","accessibility_help":"Tilhjengelighetshjelp","accessibility_usage_title":"Generell bruk","invalid_color_value":"Ugyldig fargeverdi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nl.js
new file mode 100644
index 000000000..3ef2c14c7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.advanced',{"underline_desc":"Onderstrepen (Ctrl+U)","italic_desc":"Cursief (Ctrl+I)","bold_desc":"Vet (Ctrl+B)",dd:"Definitiebeschrijving",dt:"Definitieterm",samp:"Codevoorbeeld",code:"Code",blockquote:"Citaat",h6:"Kop 6",h5:"Kop 5",h4:"Kop 4",h3:"Kop 3",h2:"Kop 2",h1:"Kop 1",pre:"Vaste opmaak",address:"Adres",div:"Div",paragraph:"Alinea",block:"Opmaak",fontdefault:"Lettertype","font_size":"Tekengrootte","style_select":"Stijlen","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"Meer kleuren","toolbar_focus":"Spring naar werkbalk - Alt+Q, Spring naar tekst - Alt-Z, Spring naar elementpad - Alt-X",newdocument:"Weet u zeker dat u alle inhoud wilt wissen?",path:"Pad","clipboard_msg":"Kopi\u00ebren/knippen/plakken is niet beschikbaar in Mozilla en Firefox.\nWilt u meer informatie over deze beperking?","blockquote_desc":"Citaat","help_desc":"Help","newdocument_desc":"Nieuw document","image_props_desc":"Afbeeldingseigenschappen","paste_desc":"Plakken","copy_desc":"Kopi\u00ebren","cut_desc":"Knippen","anchor_desc":"Anker invoegen/bewerken","visualaid_desc":"Hulplijnen weergeven","charmap_desc":"Symbool invoegen","backcolor_desc":"Tekstmarkeringskleur","forecolor_desc":"Tekstkleur","custom1_desc":"Uw eigen beschrijving hier","removeformat_desc":"Opmaak verwijderen","hr_desc":"Scheidingslijn invoegen","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"HTML bron bewerken","cleanup_desc":"Code opruimen","image_desc":"Afbeelding invoegen/bewerken","unlink_desc":"Link verwijderen","link_desc":"Link invoegen/bewerken","redo_desc":"Herhalen (Ctrl+Y)","undo_desc":"Ongedaan maken (Ctrl+Z)","indent_desc":"Inspringing vergroten","outdent_desc":"Inspringing verkleinen","numlist_desc":"Nummering","bullist_desc":"Opsommingstekens","justifyfull_desc":"Uitvullen","justifyright_desc":"Rechts uitlijnen","justifycenter_desc":"Centreren","justifyleft_desc":"Links uitlijnen","striketrough_desc":"Doorhalen","help_shortcut":"Druk op ALT-F10 voor de werkbalk. Druk op ALT-0 voor hulp.","rich_text_area":"Rich Text Zone","shortcuts_desc":"Toegankelijkheid Help",toolbar:"Werkbalk"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nl_dlg.js
new file mode 100644
index 000000000..615a5e8d5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.advanced_dlg',{"link_list":"Link lijst","link_is_external":"De ingevoerde URL lijkt op een externe link. Wilt u de vereiste http:// tekst voorvoegen?","link_is_email":"De ingevoerde URL lijkt op een e-mailadres. Wilt u de vereiste mailto: tekst voorvoegen?","link_titlefield":"Titel","link_target_blank":"Link in een nieuw venster openen","link_target_same":"Link in hetzelfde venster openen","link_target":"Doel","link_url":"Link URL","link_title":"Link invoegen/bewerken","image_align_right":"Rechts","image_align_left":"Links","image_align_textbottom":"Onderkant tekst","image_align_texttop":"Bovenkant tekst","image_align_bottom":"Onder","image_align_middle":"Midden","image_align_top":"Boven","image_align_baseline":"Basislijn","image_align":"Uitlijning","image_hspace":"Horizontale ruimte","image_vspace":"Verticale ruimte","image_dimensions":"Afmetingen","image_alt":"Beschrijving","image_list":"Lijst","image_border":"Rand","image_src":"Bestand/URL","image_title":"Afbeelding invoegen/bewerken","charmap_title":"Symbolen","colorpicker_name":"Naam:","colorpicker_color":"Kleur:","colorpicker_named_title":"Benoemde kleuren","colorpicker_named_tab":"Benoemd","colorpicker_palette_title":"Paletkleuren","colorpicker_palette_tab":"Palet","colorpicker_picker_title":"Alle kleuren","colorpicker_picker_tab":"Alle kleuren","colorpicker_title":"Kleuren","code_wordwrap":"Automatische terugloop","code_title":"HTML Bron","anchor_name":"Ankernaam","anchor_title":"Anker invoegen/bewerken","about_loaded":"Geladen Invoegtoepassingen","about_version":"Versie","about_author":"Auteur","about_plugin":"Invoegtoepassing","about_plugins":"Invoegtoepassingen","about_license":"Licentie","about_help":"Help","about_general":"Info","about_title":"Over TinyMCE","charmap_usage":"Gebruik linker en rechter pijltjestoetsen om te navigeren.","anchor_invalid":"Geef een geldige ankernaam.","accessibility_help":"Hulp m.b.t. Toegankelijkheid","accessibility_usage_title":"Algemeen Gebruik","invalid_color_value":"Ongeldige kleur code"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nn.js
new file mode 100644
index 000000000..4f6441e10
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.advanced',{"underline_desc":"Understreking","italic_desc":"Kursiv","bold_desc":"Feit",dd:"Definisjonsbeskrivelse",dt:"Definisjonsuttrykk",samp:"Kodeeksempel",code:"Kode",blockquote:"Innrykk",h6:"Overskrift 6",h5:"Overskrift 5",h4:"Overskrift 4",h3:"Overskrift 3",h2:"Overskrift 2",h1:"Overskrift 1",pre:"Pre-formatert",address:"Adresse",div:"Div",paragraph:"Avsnitt",block:"Format",fontdefault:"Skriftfamilie","font_size":"Skriftstorleik","style_select":"Stilar","anchor_delta_height":"anchor_delta_height","anchor_delta_width":"anchor_delta_width","charmap_delta_height":"charmap_delta_height","charmap_delta_width":"charmap_delta_width","colorpicker_delta_height":"colorpicker_delta_height","colorpicker_delta_width":"colorpicker_delta_width","link_delta_height":"link_delta_height","link_delta_width":"link_delta_width","image_delta_height":"image_delta_height","image_delta_width":"image_delta_width","more_colors":"Fleire fargar","toolbar_focus":"Skift til verktyknappar - Alt+Q, Skift til editor - Alt-Z, Skift til elementsti - Alt-",newdocument:"Er du sikker p\u00e5 at du vil slette alt innhald?",path:"Sti","clipboard_msg":"Klipp ut / Kopier /Lim inn fungerer ikkje i Mozilla og Firefox. \n Vil du vite meir om dette?","blockquote_desc":"Innrykk","help_desc":"Hjelp","newdocument_desc":"Nytt dokument","image_props_desc":"Eigenskaper for bilete","paste_desc":"Lim inn","copy_desc":"Kopier","cut_desc":"Klipp ut","anchor_desc":"Set inn / endre anker","visualaid_desc":"Sl\u00e5 av/p\u00e5 usynlige element","charmap_desc":"Set inn spesialteikn","backcolor_desc":"Vel bakgrunnsfarge","forecolor_desc":"Vel skriftfarge","custom1_desc":"Din spesialfunksjondefinisjon her","removeformat_desc":"Fjern formatering","hr_desc":"Set inn horisontal linje","sup_desc":"Heva skrift","sub_desc":"Senka skrift","code_desc":"Redigere HTML-koden","cleanup_desc":"Rens grisete kode","image_desc":"Set inn / endre bilete","unlink_desc":"Fjern lenkje","link_desc":"Set inn / endre lenkje","redo_desc":"Gjer om","undo_desc":"Angre","indent_desc":"Auk innrykk","outdent_desc":"Reduser innrykk","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","justifyfull_desc":"Blokkjustert","justifyright_desc":"H\u00f8grejustert","justifycenter_desc":"Midtstilt","justifyleft_desc":"Venstrejustert","striketrough_desc":"Gjennomstreking","help_shortcut":"Klikk ALT-F10 for verkt\u00f8ylinje. Klikk ALT-0 for hjelp","rich_text_area":"Omr\u00e5de for rik tekst","shortcuts_desc":"Tilgjengelighetshjelp",toolbar:"Verkt\u00f8ylinje"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nn_dlg.js
new file mode 100644
index 000000000..0344eb673
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/nn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.advanced_dlg',{"link_list":"Lenkjeliste","link_is_external":"Nettadressa du skreiv inn ser ut til \u00e5 vere ein ekstern nettadresse. \u00d8nskjer du \u00e5 leggje til det obligatoriske http://-prefikset?","link_is_email":"Nettadressa du skreiv inn ser ut til \u00e5 vere ein e-postadresse. \u00d8nskjer du \u00e5 leggje til det obligatoriske mailto:-prefikset?","link_titlefield":"Tittel","link_target_blank":"Opne i nytt vindauget","link_target_same":"Opne i dette vindauget","link_target":"Vindauge","link_url":"Lenkje-URL","link_title":"Set inn / endre lenkje","image_align_right":"H\u00f8gre","image_align_left":"Venstre","image_align_textbottom":"Tekstbotn","image_align_texttop":"Teksttopp","image_align_bottom":"Botn","image_align_middle":"Midtstilt","image_align_top":"Topp","image_align_baseline":"Botnlinje","image_align":"Justering","image_hspace":"Horisontal avstand","image_vspace":"Vertikal avstand","image_dimensions":"Dimensjonar","image_alt":"Bileteomtale","image_list":"Liste med bilete","image_border":"Ramme","image_src":"Bilete-URL","image_title":"Set inn / endre bilete","charmap_title":"Vel spesialteikn","colorpicker_name":"Namn:","colorpicker_color":"Farge:","colorpicker_named_title":"Fargenamn","colorpicker_named_tab":"Namneval","colorpicker_palette_title":"Palettfargar","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"Fargeval","colorpicker_picker_tab":"Vel farge","colorpicker_title":"Vel ein farge","code_wordwrap":"Tekstbryting","code_title":"HTML-editor","anchor_name":"Ankernamn","anchor_title":"Set inn / endre anker","about_loaded":"Lasta programtillegg","about_version":"Versjon","about_author":"Utviklar","about_plugin":"Programtillegg","about_plugins":"Programtillegg","about_license":"Lisens","about_help":"Hjelp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/no.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/no.js
new file mode 100644
index 000000000..0fef8d99b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/no.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.advanced',{"underline_desc":"Understrek (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)",dd:"Definisjonsbeskrivelse",dt:"Definisjonsuttrykk",samp:"Kodeeksempel",code:"Kode",blockquote:"Innrykk",h6:"Overskrift 6",h5:"Overskrift 5",h4:"Overskrift 4",h3:"Overskrift 3",h2:"Overskrift 2",h1:"Overskrift 1",pre:"Pre-formatert",address:"Adresse",div:"Div",paragraph:"Avsnitt",block:"Format",fontdefault:"Skriftfamilie","font_size":"Skriftst\u00f8rrelse","style_select":"Stiler","more_colors":"Flere farger","toolbar_focus":"Skift til verkt\u00f8yknapper - Alt+Q, Skift til editor - Alt-Z, Skift til elementsti - Alt-",newdocument:"Er du sikker p\u00e5 at du vil slette alt innhold?",path:"Sti","clipboard_msg":"Klipp ut/Kopier/Lim er ikke tilgjengelig i Mozilla og Firefox. \n Vil du vite mer om dette?","blockquote_desc":"Innrykk","help_desc":"Hjelp","newdocument_desc":"Nytt dokument","image_props_desc":"Egenskaper for bilde","paste_desc":"Lim inn","copy_desc":"Kopier","cut_desc":"Klipp ut","anchor_desc":"Sett inn/editer anker","visualaid_desc":"Sl\u00e5 av/p\u00e5 usynlige elementer","charmap_desc":"Sett inn spesialtegn","backcolor_desc":"Velg bakgrunnsfarge","forecolor_desc":"Velg skriftfarge","custom1_desc":"Din egen beskriveles her","removeformat_desc":"Fjern formatering","hr_desc":"Sett inn horisontal linje","sup_desc":"Hev skrift","sub_desc":"Senk skrift","code_desc":"Rediger HTML kildekode","cleanup_desc":"Rense grisete kode","image_desc":"Sett inn / endre bilde","unlink_desc":"Fjerne lenke","link_desc":"Sett inn/editer lenke","redo_desc":"Gj\u00f8r om (Ctrl+Y)","undo_desc":"Angre (Ctrl+Z)","indent_desc":"\u00d8k innrykk","outdent_desc":"Reduser innrykk","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","justifyfull_desc":"Blokkjustert","justifyright_desc":"H\u00f8yrejustert","justifycenter_desc":"Midtstilt","justifyleft_desc":"Venstrejustert","striketrough_desc":"Gjennomstreke","help_shortcut":"Trykk ALT F10 for verkt\u00f8ylinje. Trykk ALT 0 for hjelp","rich_text_area":"Redigeringsomr\u00e5de","shortcuts_desc":"Hjelp for funksjonshemmede",toolbar:"Verkt\u00f8ylinje","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/no_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/no_dlg.js
new file mode 100644
index 000000000..db0f203fc
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/no_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.advanced_dlg',{"link_list":"Liste over lenker","link_is_external":"Nettadressen du skrev inn ser ut til \u00e5 v\u00e6re en ekstern nettadresse. \u00d8nsker du \u00e5 legge til obligatorisk http://-prefiks?","link_is_email":"Nettadressen du skrev inn ser ut til \u00e5 v\u00e6re en Epost adresse. \u00d8nsker du \u00e5 legge til obligatorisk mailto:-prefiks?","link_titlefield":"Tittel","link_target_blank":"\u00c5pne i nytt vindu","link_target_same":"\u00c5pne i dette vindu","link_target":"M\u00e5lvindu","link_url":"Lenke URL","link_title":"Sett inn/editer lenke","image_align_right":"H\u00f8yre","image_align_left":"Venstre","image_align_textbottom":"Tekst bunn","image_align_texttop":"Tekst topp","image_align_bottom":"Bunn","image_align_middle":"Midtstilt","image_align_top":"Topp","image_align_baseline":"Bunnlinje","image_align":"Justering","image_hspace":"Horisontal avstand","image_vspace":"Vertikal avstand","image_dimensions":"Dimensjoner","image_alt":"Bildebeskrivelse","image_list":"Liste med bilder","image_border":"Ramme","image_src":"Bilde URL","image_title":"Sett inn/editer bilde","charmap_title":"Velg spesialtegn","colorpicker_name":"Navn:","colorpicker_color":"Farge:","colorpicker_named_title":"Fargenavn","colorpicker_named_tab":"Navnevalg","colorpicker_palette_title":"Palettfarger","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"Fargevalg","colorpicker_picker_tab":"Fargevelger","colorpicker_title":"Velg farge","code_wordwrap":"Tekstbryting","code_title":"HTML kildeeditor","anchor_name":"Ankernavn","anchor_title":"Sett inn/editer anker","about_loaded":"Innlastede programtillegg","about_version":"Versjon","about_author":"Forfatter","about_plugin":"Programtillegg","about_plugins":"Programtillegg","about_license":"Lisens","about_help":"Hjelp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Bruk h\u00f8yre og venstre piler for \u00e5 velge.","anchor_invalid":"Du m\u00e5 angi et gyldig ankernavn.","accessibility_help":"Tilgjengelighetshjelp","accessibility_usage_title":"Generel bruk","invalid_color_value":"Ugyldig fargeverdi"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pl.js
new file mode 100644
index 000000000..f7348f11f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.advanced',{"underline_desc":"Podkre\u015blenie (Ctrl+U)","italic_desc":"Kursywa (Ctrl+I)","bold_desc":"Pogrubienie (Ctrl+B)",dd:"Opis terminu",dt:"Definicja terminu ",samp:"Pr\u00f3bka kodu",code:"Kod",blockquote:"Wydzielony blok",h6:"Nag\u0142\u00f3wek 6",h5:"Nag\u0142\u00f3wek 5",h4:"Nag\u0142\u00f3wek 4",h3:"Nag\u0142\u00f3wek 3",h2:"Nag\u0142\u00f3wek 2",h1:"Nag\u0142\u00f3wek 1",pre:"Czcionka o sta\u0142ej szeroko\u015bci",address:"Adres",div:"Div",paragraph:"Akapit",block:"Format",fontdefault:"Rodzaj czcionki","font_size":"Rozmiar czcionki","style_select":"Styl","more_colors":"Wi\u0119cej kolor\u00f3w...","toolbar_focus":"Przeskocz do przycisk\u00f3w narz\u0119dzi - Alt+Q, Przeskocz do edytora - Alt-Z, Przeskocz do elementu \u015bcie\u017cki - Alt-X",newdocument:"Czy jeste\u015b pewnien, ze chcesz wyczy\u015bci\u0107 ca\u0142\u0105 zawarto\u015b\u0107?",path:"\u015acie\u017cka","clipboard_msg":"Akcje Kopiuj/Wytnij/Wklej nie s\u0105 dost\u0119pne w Mozilli i Firefox.\nCzy chcesz wi\u0119cej informacji o tym problemie?","blockquote_desc":"Blok cytatu","help_desc":"Pomoc","newdocument_desc":"Nowy dokument","image_props_desc":"W\u0142a\u015bciwo\u015bci obrazka","paste_desc":"Wklej (Ctrl V)","copy_desc":"Kopiuj (Ctrl C)","cut_desc":"Wytnij (Ctrl X)","anchor_desc":"Wstaw/edytuj kotwic\u0119","visualaid_desc":"Prze\u0142\u0105cz widoczno\u015b\u0107 wska\u017anik\u00f3w i niewidocznych element\u00f3w","charmap_desc":"Wstaw znak specjalny","backcolor_desc":"Wybierz kolor t\u0142a","forecolor_desc":"Wybierz kolor tekstu","custom1_desc":"Tw\u00f3j niestandardowy opis tutaj","removeformat_desc":"Usu\u0144 formatowanie","hr_desc":"Wstaw poziom\u0105 lini\u0119","sup_desc":"Indeks g\u00f3rny","sub_desc":"Indeks dolny","code_desc":"Edytuj \u017ar\u00f3d\u0142o HTML","cleanup_desc":"Wyczy\u015b\u0107 nieuporz\u0105dkowany kod","image_desc":"Wstaw/edytuj obraz","unlink_desc":"Usu\u0144 link","link_desc":"Wstaw/edytuj link","redo_desc":"Pon\u00f3w (Ctrl+Y)","undo_desc":"Cofnij (Ctrl+Z)","indent_desc":"Wci\u0119cie","outdent_desc":"Cofnij wci\u0119cie","numlist_desc":"Lista numerowana","bullist_desc":"Lista nienumerowana","justifyfull_desc":"R\u00f3wnanie do prawej i lewej","justifyright_desc":"Wyr\u00f3wnaj do prawej","justifycenter_desc":"Wycentruj","justifyleft_desc":"Wyr\u00f3wnaj do lewej","striketrough_desc":"Przekre\u015blenie","help_shortcut":"Wci\u015bnij Alt F10 aby pokaza\u0107 pasek narz\u0119dzi. Wci\u015bnij Alt 0 aby otworzy\u0107 pomoc","rich_text_area":"Pole tekstowe","shortcuts_desc":"Pomoc dost\u0119pno\u015bci",toolbar:"Pasek narz\u0119dzi","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pl_dlg.js
new file mode 100644
index 000000000..e1ba93c95
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.advanced_dlg',{"link_list":"Lista link\u00f3w","link_is_external":"URL kt\u00f3ry otworzy\u0142e\u015b wydaje si\u0119 by\u0107 zewn\u0119trznym linkiem, czy chcesz doda\u0107 wymagany prefiks http:// ?","link_is_email":"URL kt\u00f3ry otworzy\u0142e\u015b wydaje si\u0119 by\u0107 adresem mailowym, czy chcesz doda\u0107 odpowiedni prefiks mailto:?","link_titlefield":"Tytu\u0142","link_target_blank":"Otw\u00f3rz link w nowym oknie","link_target_same":"Otw\u00f3rz link w tym samym oknie","link_target":"Cel","link_url":"URL linka","link_title":"Wstaw/edytuj link","image_align_right":"Prawy","image_align_left":"Lewy","image_align_textbottom":"Dolny tekst","image_align_texttop":"G\u00f3rny tekst","image_align_bottom":"D\u00f3\u0142","image_align_middle":"\u015arodek","image_align_top":"G\u00f3ra","image_align_baseline":"Linia bazowa","image_align":"Wyr\u00f3wnanie","image_hspace":"Odst\u0119p poziomy","image_vspace":"Odst\u0119p pionowy","image_dimensions":"Rozmiary","image_alt":"Opis obrazka","image_list":"Lista obrazk\u00f3w","image_border":"Obramowanie","image_src":"URL obrazka","image_title":"Wstaw/edytuj obraz","charmap_title":"Wybierz niestandardowy znak","colorpicker_name":"Nazwa:","colorpicker_color":"Kolor:","colorpicker_named_title":"Nazwane kolory","colorpicker_named_tab":"Nazwane","colorpicker_palette_title":"Paleta kolor\u00f3w","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Wybieranie kolor\u00f3w","colorpicker_picker_tab":"Wybieranie","colorpicker_title":"Wybierz kolor","code_wordwrap":"Zawijanie s\u0142\u00f3w","code_title":"Edytor \u017ar\u00f3d\u0142a HTML","anchor_name":"Nazwa zakotwiczenia","anchor_title":"Wstaw/Edytuj zakotwiczenie","about_loaded":"Za\u0142adowane wtyczki","about_version":"Wersja","about_author":"Autor","about_plugin":"Wtyczka","about_plugins":"Wtyczki","about_license":"Licencja","about_help":"Pomoc","about_general":"O TinyMCE","about_title":"O TinyMCE","charmap_usage":"U\u017cywaj strza\u0142ek w lewo i w prawo do nawigacji.","anchor_invalid":"Prosz\u0119 poda\u0107 w\u0142a\u015bciw\u0105 nazw\u0119 zakotwiczenia.","accessibility_help":"Pomoc dost\u0119pno\u015bci","accessibility_usage_title":"Og\u00f3lne zastosowanie","invalid_color_value":"Nieprawid\u0142owa warto\u015b\u0107 koloru"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ps.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ps.js
new file mode 100644
index 000000000..59d632974
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ps.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ps_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ps_dlg.js
new file mode 100644
index 000000000..597f01f94
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ps_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pt.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pt.js
new file mode 100644
index 000000000..48d17b1a6
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.advanced',{"underline_desc":"Sublinhado (Ctrl+U)","italic_desc":"It\u00e1lico (Ctrl+I)","bold_desc":"Negrito (Ctrl+B)",dd:"Descri\u00e7\u00e3o da defini\u00e7\u00e3o",dt:"Termo da defini\u00e7\u00e3o",samp:"Amostra de c\u00f3digo",code:"C\u00f3digo",blockquote:"Cita\u00e7\u00e3o em bloco",h6:"T\u00edtulo 6",h5:"T\u00edtulo 5",h4:"T\u00edtulo 4",h3:"T\u00edtulo 3",h2:"T\u00edtulo 2",h1:"T\u00edtulo 1",pre:"Pr\u00e9-formatado",address:"Endere\u00e7o",div:"Div",paragraph:"Par\u00e1grafo",block:"Formata\u00e7\u00e3o",fontdefault:"Tipo de fonte","font_size":"Tamanho","style_select":"Estilos","anchor_delta_width":"30","link_delta_height":"25","link_delta_width":"50","more_colors":"Mais cores","toolbar_focus":"Ir para as ferramentas - Alt+Q, Ir para o editor - Alt-Z, Ir para o endere\u00e7o do elemento - Alt-X",newdocument:"Tem a certeza que deseja apagar tudo?",path:"Endere\u00e7o","clipboard_msg":"Copiar/recortar/colar n\u00e3o est\u00e1 dispon\u00edvel no Mozilla e Firefox. Deseja mais informa\u00e7\u00f5es sobre este problema?","blockquote_desc":"Cita\u00e7\u00e3o em bloco","help_desc":"Ajuda","newdocument_desc":"Novo documento","image_props_desc":"Propriedades da imagem","paste_desc":"Colar","copy_desc":"Copiar","cut_desc":"Recortar","anchor_desc":"Inserir/editar \u00e2ncora","visualaid_desc":"Alternar guias/elementos invis\u00edveis","charmap_desc":"Inserir caracteres especiais","backcolor_desc":"Selecionar a cor de fundo","forecolor_desc":"Selecionar a cor do texto","custom1_desc":"Insira aqui a sua descri\u00e7\u00e3o personalizada","removeformat_desc":"Remover formata\u00e7\u00e3o","hr_desc":"Inserir separador horizontal","sup_desc":"Superior \u00e0 linha","sub_desc":"Inferior \u00e0 linha","code_desc":"Editar c\u00f3digo fonte","cleanup_desc":"Limpar c\u00f3digo incorreto","image_desc":"Inserir/editar imagem","unlink_desc":"Remover hyperlink","link_desc":"Inserir/editar hyperlink","redo_desc":"Refazer (Ctrl+Y)","undo_desc":"Desfazer (Ctrl+Z)","indent_desc":"Aumentar recuo","outdent_desc":"Diminuir recuo","numlist_desc":"Numera\u00e7\u00e3o","bullist_desc":"Marcadores","justifyfull_desc":"Justificar","justifyright_desc":"Alinhar \u00e0 direita","justifycenter_desc":"Centralizar","justifyleft_desc":"Alinhar \u00e0 esquerda","striketrough_desc":"Riscado","help_shortcut":"Pressione ALT-F10 para barra de ferramentas. Pressione ALT-0 para ajuda","rich_text_area":"\u00c1rea de edi\u00e7\u00e3o rica","shortcuts_desc":"Ajuda acessibilidade",toolbar:"Barra de ferramentas","anchor_delta_height":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pt_dlg.js
new file mode 100644
index 000000000..313a012fa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/pt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.advanced_dlg',{"link_list":"Lista de Links","link_is_external":"A URL digitada parece conduzir a um link externo. Deseja acrescentar o prefixo necess\u00e1rio http://?","link_is_email":"A URL digitada parece ser um endere\u00e7o de e-mail. Deseja acrescentar o prefixo necess\u00e1rio mailto:?","link_titlefield":"T\u00edtulo","link_target_blank":"Abrir hyperlink em nova janela","link_target_same":"Abrir hyperlink na mesma janela","link_target":"Alvo","link_url":"URL do hyperink","link_title":"Inserir/editar hyperlink","image_align_right":"Direita","image_align_left":"Esquerda","image_align_textbottom":"Base do texto","image_align_texttop":"Topo do texto","image_align_bottom":"Abaixo","image_align_middle":"Meio","image_align_top":"Topo","image_align_baseline":"Sobre a linha de texto","image_align":"Alinhamento","image_hspace":"Espa\u00e7o Horizontal","image_vspace":"Espa\u00e7o Vertical","image_dimensions":"Dimens\u00f5es","image_alt":"Descri\u00e7\u00e3o da imagem","image_list":"Lista de imagens","image_border":"Limites","image_src":"Endere\u00e7o da imagem","image_title":"Inserir/editar imagem","charmap_title":"Selecionar caracteres personalizados","colorpicker_name":"Nome:","colorpicker_color":"Cor:","colorpicker_named_title":"Cores Personalizadas","colorpicker_named_tab":"Personalizadas","colorpicker_palette_title":"Paleta de Cores","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Editor de Cores","colorpicker_picker_tab":"Editor","colorpicker_title":"Selecione uma cor","code_wordwrap":"Quebra autom\u00e1tica de linha","code_title":"Editor HTML","anchor_name":"Nome da \u00e2ncora","anchor_title":"Inserir/editar \u00e2ncora","about_loaded":"Plugins Instalados","about_version":"Vers\u00e3o","about_author":"Autor","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"Licen\u00e7a","about_help":"Ajuda","about_general":"Sobre","about_title":"Sobre o TinyMCE","charmap_usage":"Use as setas esquerda e direita para navegar.","anchor_invalid":"Por favor, especifique um nome v\u00e1lido de \u00e2ncora.","accessibility_help":"Ajuda de Acessibilidade","accessibility_usage_title":"Uso Geral","invalid_color_value":"Valor da cor inv\u00e1lido"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ro.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ro.js
new file mode 100644
index 000000000..88899a8c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ro.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.advanced',{"underline_desc":"Subliniat (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"\u00cengro\u0219at (Ctrl B)",dd:"Defini\u021bie",dt:"Termen definit ",samp:"Mostr\u0103 de cod",code:"Cod",blockquote:"Citat",h6:"Titlu 6",h5:"Titlu 5",h4:"Titlu 4",h3:"Titlu 3",h2:"Titlu 2",h1:"Titlu 1",pre:"Preformatat",address:"Adres\u0103",div:"Div",paragraph:"Paragraf",block:"Format",fontdefault:"Familie font","font_size":"M\u0103rime font","style_select":"Stiluri","more_colors":"Mai multe culori...","toolbar_focus":"Salt la instrumente - Alt Q, Salt la editor - Alt-Z, Salt la cale - Alt-X",newdocument:"Sigur vrei s\u0103 \u0219tergi tot?",path:"Cale","clipboard_msg":"Copierea/t\u0103ierea/lipirea nu sunt disponibile \u00een Mozilla \u0219i Firefox.\nVrei mai multe informa\u021bii despre aceast\u0103 problem\u0103?","blockquote_desc":"Citat","help_desc":"Ajutor","newdocument_desc":"Document nou","image_props_desc":"Detalii imagine","paste_desc":"Lipe\u0219te","copy_desc":"Copiaz\u0103","cut_desc":"Taie","anchor_desc":"Inserare/editare ancor\u0103","visualaid_desc":"Comut\u0103 ghidajele/elementele invizibile","charmap_desc":"Inserare caracter special","backcolor_desc":"Culoare fundal","forecolor_desc":"Culoare text","custom1_desc":"Introdu aici o descriere","removeformat_desc":"Anuleaz\u0103 formatarea","hr_desc":"Insereaz\u0103 linie orizontal\u0103","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Editare surs\u0103 HTML","cleanup_desc":"Cur\u0103\u021b\u0103 codul","image_desc":"Inserare/editare imagine","unlink_desc":"\u0218terge leg\u0103tura","link_desc":"Inserare/editare leg\u0103tur\u0103","redo_desc":"Ref\u0103 (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indenteaz\u0103","outdent_desc":"De-indenteaz\u0103","numlist_desc":"List\u0103 ordonat\u0103","bullist_desc":"List\u0103 neordonat\u0103","justifyfull_desc":"Aliniere pe toat\u0103 l\u0103\u021bimea","justifyright_desc":"Aliniere la dreapta","justifycenter_desc":"Centrare","justifyleft_desc":"Aliniere la st\u00e2nga","striketrough_desc":"T\u0103iat","help_shortcut":"Apas\u0103 ALT-F10 pentru bara de unelte. Apas\u0103 ALT-0 pentru ajutor","rich_text_area":"Zon\u0103 de text formatat","shortcuts_desc":"Ajutor accesabilitate",toolbar:"Bar\u0103 de unelte","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ro_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ro_dlg.js
new file mode 100644
index 000000000..3cb647dd8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ro_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.advanced_dlg',{"link_list":"Lista de leg\u0103turi","link_is_external":"URL-ul pe care l-ai introdus pare a fi o leg\u0103tur\u0103 extern\u0103. Vrei s\u0103 adaug \u0219i prefixul http:// necesar?","link_is_email":"URL-ul pe care l-ai introdus pare a fi o adres\u0103 de e-mail. Vrei s\u0103 adaug \u0219i prefixul mailto: necesar?","link_titlefield":"Titlu","link_target_blank":"Deschide leg\u0103tura \u00eentr-o fereastr\u0103 nou\u0103","link_target_same":"Deschide leg\u0103tura \u00een aceea\u0219i fereastr\u0103","link_target":"\u021aint\u0103","link_url":"URL leg\u0103tur\u0103","link_title":"Inserare/editare leg\u0103tur\u0103","image_align_right":"Dreapta","image_align_left":"St\u00e2nga","image_align_textbottom":"Textul la mijloc","image_align_texttop":"Textul sus","image_align_bottom":"Jos","image_align_middle":"La mijloc","image_align_top":"Sus","image_align_baseline":"Baseline","image_align":"Aliniere","image_hspace":"Spa\u021biu orizontal","image_vspace":"Spa\u021biu vertical","image_dimensions":"Dimensiuni","image_alt":"Descriere imagine","image_list":"List\u0103 de imagini","image_border":"Bordur\u0103","image_src":"URL imagine","image_title":"Insereaz\u0103/editeaz\u0103 o imagine","charmap_title":"Alege un caracter special","colorpicker_name":"Nume:","colorpicker_color":"Culoare:","colorpicker_named_title":"Culori denumite","colorpicker_named_tab":"Denumite","colorpicker_palette_title":"Palet\u0103 de culori","colorpicker_palette_tab":"Palet\u0103","colorpicker_picker_title":"Pipet\u0103 de culori","colorpicker_picker_tab":"Pipet\u0103","colorpicker_title":"Alege o culoare","code_wordwrap":"\u00cencadrare cuvinte","code_title":"Editor surs\u0103 HTML","anchor_name":"Nume ancor\u0103","anchor_title":"Inserare/editare ancor\u0103","about_loaded":"Module \u00eenc\u0103rcate","about_version":"Versiune","about_author":"Autor","about_plugin":"Modul","about_plugins":"Module","about_license":"Licen\u021b\u0103","about_help":"Ajutor","about_general":"Despre","about_title":"Despre TinyMCE","charmap_usage":"Folose\u0219te s\u0103ge\u021bile st\u00e2nga \u0219i dreapta pentru navigare.","anchor_invalid":"Te rog specific\u0103 un nume valid de ancor\u0103.","accessibility_help":"Ajutor pentru accesibilitate","accessibility_usage_title":"Uz general","invalid_color_value":"Valoare incorect\u0103 a culorii"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ru.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ru.js
new file mode 100644
index 000000000..5dcf47ad9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ru.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.advanced',{"underline_desc":"\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u041f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u044b\u0439 (Ctrl+B)",dd:"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430",dt:"\u0422\u0435\u0440\u043c\u0438\u043d \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0430",samp:"\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430",code:"\u041a\u043e\u0434",blockquote:"\u0426\u0438\u0442\u0430\u0442\u0430",h6:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",h5:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",h4:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",h3:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",h2:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",h1:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",pre:"\u041f\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439",address:"\u0410\u0434\u0440\u0435\u0441",div:"Div",paragraph:"\u0410\u0431\u0437\u0430\u0446",block:"\u0424\u043e\u0440\u043c\u0430\u0442",fontdefault:"\u0428\u0440\u0438\u0444\u0442","font_size":"\u0420\u0430\u0437\u043c\u0435\u0440","style_select":"\u0421\u0442\u0438\u043b\u044c","more_colors":"\u0414\u0440\u0443\u0433\u0438\u0435 \u0446\u0432\u0435\u0442\u0430...","toolbar_focus":"\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u043a\u043d\u043e\u043f\u043e\u043a (Alt+Q). \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0443 (Alt+Z). \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u043f\u0443\u0442\u0438 (Alt+X).",newdocument:"\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0441\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c?",path:"\u0422\u0435\u0433\u0438","clipboard_msg":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0432\u044b\u0440\u0435\u0437\u043a\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 Firefox. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438: Ctrl C \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c, Ctrl V \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c. \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e?","blockquote_desc":"\u0426\u0438\u0442\u0430\u0442\u0430","help_desc":"\u041f\u043e\u043c\u043e\u0449\u044c","newdocument_desc":"\u041d\u043e\u0432\u044b\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","paste_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c","copy_desc":"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c","cut_desc":"\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c","anchor_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044f\u043a\u043e\u0440\u044c","visualaid_desc":"\u0412\u0441\u0435 \u0437\u043d\u0430\u043a\u0438","charmap_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b","backcolor_desc":"\u0426\u0432\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430","forecolor_desc":"\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430","custom1_desc":"\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","removeformat_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442","hr_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0447\u0435\u0440\u0442\u0443","sup_desc":"\u041d\u0430\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439","sub_desc":"\u041f\u043e\u0434\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0439","code_desc":"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c HTML \u043a\u043e\u0434","cleanup_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0439 \u043a\u043e\u0434","image_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435","unlink_desc":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443","link_desc":"\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443","redo_desc":"\u0412\u0435\u0440\u043d\u0443\u0442\u044c (Ctrl+Y)","undo_desc":"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c (Ctrl+Z)","indent_desc":"\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f","outdent_desc":"\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","justifyfull_desc":"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0435","justifyright_desc":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","justifycenter_desc":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","justifyleft_desc":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","striketrough_desc":"\u0417\u0430\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","help_shortcut":"\u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-F10 \u0434\u043b\u044f \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 ALT-0 \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438.","rich_text_area":"\u0412\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440","shortcuts_desc":"\u041f\u043e\u043c\u043e\u0449\u044c \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438",toolbar:"\u041f\u0430\u043d\u0435\u043b\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ru_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ru_dlg.js
new file mode 100644
index 000000000..4cd823d10
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ru_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.advanced_dlg',{"link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a","link_is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0432\u043d\u0435\u0448\u043d\u044e\u044e \u0441\u0441\u044b\u043b\u043a\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 http://?","link_is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0443\u044e \u043f\u043e\u0447\u0442\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 mailto:?","link_titlefield":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","link_target_blank":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435","link_target_same":"\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043e\u043a\u043d\u0435","link_target":"\u0426\u0435\u043b\u044c","link_url":"\u0410\u0434\u0440\u0435\u0441","link_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0441\u044b\u043b\u043a\u0438","image_align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_left":"\u041f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","image_align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0430","image_align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","image_align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u0435\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043b\u0438\u043d\u0438\u0438","image_align":"\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435","image_hspace":"\u0413\u043e\u0440\u0438\u0437. \u043e\u0442\u0441\u0442\u0443\u043f","image_vspace":"\u0412\u0435\u0440\u0442. \u043e\u0442\u0441\u0442\u0443\u043f","image_dimensions":"\u0420\u0430\u0437\u043c\u0435\u0440","image_alt":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a","image_border":"\u0413\u0440\u0430\u043d\u0438\u0446\u0430","image_src":"\u0410\u0434\u0440\u0435\u0441","image_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f","charmap_title":"\u0412\u044b\u0431\u043e\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u0430","colorpicker_name":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435:","colorpicker_color":"\u041a\u043e\u0434:","colorpicker_named_title":"\u0426\u0432\u0435\u0442\u0430","colorpicker_named_tab":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f","colorpicker_palette_title":"\u0426\u0432\u0435\u0442\u0430","colorpicker_palette_tab":"\u041f\u0430\u043b\u0438\u0442\u0440\u0430","colorpicker_picker_title":"\u0426\u0432\u0435\u0442\u0430","colorpicker_picker_tab":"\u0421\u043f\u0435\u043a\u0442\u0440","colorpicker_title":"\u0426\u0432\u0435\u0442\u0430","code_wordwrap":"\u041f\u0435\u0440\u0435\u043d\u043e\u0441 \u0441\u0442\u0440\u043e\u043a","code_title":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 HTML \u043a\u043e\u0434\u0430","anchor_name":"\u0418\u043c\u044f \u044f\u043a\u043e\u0440\u044f","anchor_title":"\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044f\u043a\u043e\u0440\u044f","about_loaded":"\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b","about_version":"\u0412\u0435\u0440\u0441\u0438\u044f","about_author":"\u0410\u0432\u0442\u043e\u0440","about_plugin":"\u041f\u043b\u0430\u0433\u0438\u043d","about_plugins":"\u041f\u043b\u0430\u0433\u0438\u043d\u044b","about_license":"\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f","about_help":"\u041f\u043e\u043c\u043e\u0449\u044c","about_general":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","about_title":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 TinyMCE","charmap_usage":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \"\u0412\u043b\u0435\u0432\u043e\" \u0438 \"\u0412\u043f\u0440\u0430\u0432\u043e\" \u0434\u043b\u044f \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438.","anchor_invalid":"\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0438\u043c\u044f \u044f\u043a\u043e\u0440\u044f.","accessibility_help":"\u041f\u043e\u043c\u043e\u0449\u044c \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438","accessibility_usage_title":"\u041e\u0431\u0449\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435","invalid_color_value":"\u041d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sc.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sc.js
new file mode 100644
index 000000000..f839e9407
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sc.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.advanced',{"underline_desc":"\u5e95\u7ebf(Ctrl+U)","italic_desc":"\u659c\u4f53(Ctrl+I)","bold_desc":"\u9ed1\u4f53(Ctrl+B)",dd:"\u540d\u8bcd\u89e3\u91ca",dt:"\u540d\u8bcd\u5b9a\u4e49",samp:"\u4ee3\u7801\u6837\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"\u6807\u98986",h5:"\u6807\u98985",h4:"\u6807\u98984",h3:"\u6807\u98983",h2:"\u6807\u98982",h1:"\u6807\u98981",pre:"\u65e0\u5f0f\u6837\u7f16\u6392",address:"\u5730\u5740",div:"DIV\u5c42",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u4f53","font_size":"\u5b57\u4f53\u5927\u5c0f","style_select":"\u6837\u5f0f","link_delta_height":"60","link_delta_width":"40","more_colors":"\u66f4\u591a\u989c\u8272","toolbar_focus":"\u5de5\u5177\u6309\u94ae- Alt+Q,\u7f16\u8f91\u5668- Alt-Z,\u5143\u4ef6\u4f4d\u7f6e- Alt-X",newdocument:"\u60a8\u786e\u8ba4\u8981\u6e05\u9664\u5168\u90e8\u5185\u5bb9\u5417\uff1f ",path:"\u4f4d\u7f6e","clipboard_msg":"\u590d\u5236\u3001\u526a\u4e0b\u53ca\u8d34\u4e0a\u529f\u80fd\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u3002 \n\u662f\u5426\u9700\u8981\u4e86\u89e3\u66f4\u591a\u6709\u5173\u6b64\u95ee\u9898\u7684\u8d44\u8baf\uff1f ","blockquote_desc":"\u5f15\u7528","help_desc":"\u8bf4\u660e","newdocument_desc":"\u65b0\u6587\u4ef6","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u8d34\u4e0a","copy_desc":"\u590d\u5236","cut_desc":"\u526a\u4e0b","anchor_desc":"\u63d2\u5165/\u7f16\u8f91\u951a\u70b9","visualaid_desc":"\u5f00\u5173\u683c\u7ebf/\u9690\u85cf\u5143\u4ef6","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","backcolor_desc":"\u9009\u62e9\u80cc\u666f\u989c\u8272","forecolor_desc":"\u9009\u62e9\u6587\u5b57\u989c\u8272","custom1_desc":"\u5728\u6b64\u8f93\u5165\u60a8\u7684\u81ea\u5b9a\u4e49\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u6837\u5f0f","hr_desc":"\u63d2\u5165\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"\u7f16\u8f91HTML\u6e90\u4ee3\u7801","cleanup_desc":"\u6e05\u9664\u591a\u4f59\u4ee3\u7801","image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","unlink_desc":"\u53d6\u6d88\u8fde\u7ed3","link_desc":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","redo_desc":"\u91cd\u505a(Ctrl+Y)","undo_desc":"\u64a4\u9500(Ctrl+Z)","indent_desc":"\u589e\u52a0\u7f29\u6392","outdent_desc":"\u51cf\u5c11\u7f29\u6392","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u4e13\u6848\u7b26\u53f7","justifyfull_desc":"\u4e24\u7aef\u5bf9\u9f50","justifyright_desc":"\u53f3\u5bf9\u9f50","justifycenter_desc":"\u5c45\u4e2d","justifyleft_desc":"\u5de6\u5bf9\u9f50","striketrough_desc":"\u5220\u9664\u7ebf","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sc_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sc_dlg.js
new file mode 100644
index 000000000..603e11e97
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sc_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.advanced_dlg',{"link_list":"\u94fe\u7ed3\u6e05\u5355","link_is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u65b9\u52a0\u5165http://\uff1f ","link_is_email":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u4f4d\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u4f4d\u5740\u524d\u65b9\u52a0\u5165mailto:\uff1f ","link_titlefield":"\u6807\u9898","link_target_blank":"\u5c06\u8fde\u7ed3\u7f51\u5740\u5f00\u5728\u65b0\u7a97\u53e3","link_target_same":"\u5c06\u94fe\u7ed3\u7f51\u5740\u5f00\u5728\u6b64\u89c6\u7a97","link_target":"\u76ee\u6807","link_url":"\u94fe\u7ed3\u4f4d\u5740","link_title":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","image_align_right":"\u9760\u53f3\u5bf9\u9f50","image_align_left":"\u9760\u5de6\u5bf9\u9f50","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u5e95\u90e8\u5bf9\u9f50","image_align_middle":"\u5c45\u4e2d\u5bf9\u9f50","image_align_top":"\u4e0a\u65b9\u5bf9\u9f50","image_align_baseline":"\u57fa\u7ebf","image_align":"\u5bf9\u9f50\u65b9\u5f0f","image_hspace":"\u6c34\u51c6\u95f4\u8ddd","image_vspace":"\u5782\u76f4\u95f4\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u8bf4\u660e","image_list":"\u56fe\u7247\u5217\u8868","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247\u4f4d\u5740","image_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","colorpicker_name":"\u540d\u79f0:","colorpicker_color":"\u989c\u8272:","colorpicker_named_title":"\u9884\u8bbe\u7684\u989c\u8272","colorpicker_named_tab":"\u9884\u8bbe\u7684","colorpicker_palette_title":"\u8272\u76d8\u989c\u8272","colorpicker_palette_tab":"\u8272\u76d8","colorpicker_picker_title":"\u9009\u8272\u5668","colorpicker_picker_tab":"\u9009\u8272\u5668","colorpicker_title":"\u6311\u9009\u989c\u8272","code_wordwrap":"\u6574\u5b57\u6362\u884c","code_title":"HTML\u6e90\u4ee3\u7801\u7f16\u8f91\u5668","anchor_name":"\u951a\u70b9\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91\u951a\u70b9","about_loaded":"\u5df2\u8f7d\u5165\u7684\u63d2\u4ef6","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u63d2\u4ef6","about_plugins":"\u5168\u90e8\u63d2\u4ef6","about_license":"\u6388\u6743","about_help":"\u8bf4\u660e","about_general":"\u5173\u4e8e","about_title":"\u5173\u4e8eTinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/se.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/se.js
new file mode 100644
index 000000000..67b823189
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/se.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.advanced',{"underline_desc":"Understruken (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)",dd:"Definitionsbeskrivning",dt:"Definitionsterm",samp:"Kodexempel",code:"Kodblock",blockquote:"Blockcitat",h6:"Rubrik 6",h5:"Rubrik 5",h4:"Rubrik 4",h3:"Rubrik 3",h2:"Rubrik 2",h1:"Rubrik 1",pre:"F\u00f6rformaterad",address:"Adress",div:"Div",paragraph:"Paragraf",block:"Format",fontdefault:"Fontfamilj","font_size":"Fontstorlek","style_select":"Stilar","toolbar_focus":"Hoppa till verktygsf\u00e4ltet - Alt+Q, Hoppa till redigeraren - Alt-Z, Hoppa till element listan - Alt-X",newdocument:"\u00c4r du s\u00e4ker p\u00e5 att du vill radera allt inneh\u00e5ll?",path:"Element","clipboard_msg":"Kopiera/klipp ut/klistra in \u00e4r inte tillg\u00e4ngligt i din webbl\u00e4sare.\nVill du veta mer om detta?","blockquote_desc":"Blockcitat","help_desc":"Hj\u00e4lp","newdocument_desc":"Nytt dokument","image_props_desc":"Bildinst\u00e4llningar","paste_desc":"Klistra in","copy_desc":"Kopiera","cut_desc":"Klipp ut","anchor_desc":"Infoga/redigera bokm\u00e4rke","visualaid_desc":"Visa/d\u00f6lj visuella hj\u00e4lpmedel","charmap_desc":"Infoga specialtecken","backcolor_desc":"V\u00e4lj bakgrundsf\u00e4rg","forecolor_desc":"V\u00e4lj textf\u00e4rg","removeformat_desc":"Ta bort formatering","hr_desc":"Infoga horisontell skiljelinje","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Redigera HTML k\u00e4llkoden","cleanup_desc":"St\u00e4da upp i k\u00e4llkoden","image_desc":"Infoga/redigera bild","unlink_desc":"Ta bort l\u00e4nk","link_desc":"Infoga/redigera l\u00e4nk","redo_desc":"G\u00f6r om (Ctrl+Y)","undo_desc":"\u00c5ngra (Ctrl+Z)","indent_desc":"Indrag","outdent_desc":"Drag tillbaka","numlist_desc":"Nummerlista","bullist_desc":"Punktlista","justifyfull_desc":"Justera","justifyright_desc":"H\u00f6gerst\u00e4lld","justifycenter_desc":"Centrera","justifyleft_desc":"V\u00e4nsterst\u00e4lld","striketrough_desc":"Genomstruken","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","custom1_desc":"Your Custom Description Here","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/se_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/se_dlg.js
new file mode 100644
index 000000000..5b1c6c4b1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/se_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.advanced_dlg',{"link_list":"L\u00e4nklista","link_is_external":"L\u00e4nken du angav verkar vara en extern adress. Vill du infoga http:// prefixet p\u00e5 l\u00e4nken?","link_is_email":"L\u00e4nken du angav verkar vara en e-post adress. Vill du infoga mailto: prefixet p\u00e5 l\u00e4nken?","link_titlefield":"Titel","link_target_blank":"\u00d6ppna l\u00e4nken i ett nytt f\u00f6nster","link_target_same":"\u00d6ppna l\u00e4nken i samma f\u00f6nster","link_target":"M\u00e5l","link_url":"L\u00e4nkens URL","link_title":"Infoga/redigera l\u00e4nk","image_align_right":"V\u00e4nster","image_align_left":"H\u00f6ger","image_align_textbottom":"Botten av texten","image_align_texttop":"Toppen av texten","image_align_bottom":"Botten","image_align_middle":"Mitten","image_align_top":"Toppen","image_align_baseline":"Baslinje","image_align":"Justering","image_hspace":"Horisontalrymd","image_vspace":"Vertikalrymd","image_dimensions":"Dimensioner","image_alt":"Bildens beskrivning","image_list":"Bildlista","image_border":"Ram","image_src":"Bildens URL","image_title":"Infoga/redigera bild","charmap_title":"V\u00e4lj ett specialtecken","colorpicker_name":"Namn:","colorpicker_color":"F\u00e4rg:","colorpicker_named_title":"Namngivna f\u00e4rger","colorpicker_named_tab":"Namngivna","colorpicker_palette_title":"Palettf\u00e4rger","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"F\u00e4rgv\u00e4ljare","colorpicker_picker_tab":"V\u00e4ljare","colorpicker_title":"V\u00e4lj en f\u00e4rg","code_wordwrap":"Bryt ord","code_title":"HTML k\u00e4llkodsl\u00e4ge","anchor_name":"Namn","anchor_title":"Infoga/redigera bokm\u00e4rke","about_loaded":"Laddade plug-ins","about_version":"Version","about_author":"Utvecklare","about_plugin":"Om plug-in","about_plugins":"Om plug-in","about_license":"Licens","about_help":"Hj\u00e4lp","about_general":"Om","about_title":"Om TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/si.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/si.js
new file mode 100644
index 000000000..48bd6352a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/si.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"\u0db1\u0dd2\u0dbb\u0dca\u0dc0\u0da0\u0db1 \u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dbb\u0dba",dt:"\u0db1\u0dd2\u0dbb\u0dca\u0dc0\u0da0\u0db1\u0dba ",samp:"\u0d9a\u0dda\u0dad \u0dc3\u0dcf\u0db8\u0dca\u0db4\u0dbd",code:"\u0d9a\u0dda\u0dad\u0dba",blockquote:"Blockquote",h6:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 6",h5:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 5",h4:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 4",h3:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 3",h2:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 2",h1:"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0 1",pre:"\u0db4\u0dd6\u0dbb\u0dca\u0dc0 \u0db1\u0dd2\u0dbb\u0dca\u0db8\u0dcf\u0dab\u0dba",address:"\u0dbd\u0dd2\u0db4\u0dd2\u0db1\u0dba",div:"Div",paragraph:"\u200d\u0da1\u0dda\u0daf\u0dba",block:"\u0d86\u0d9a\u0dd8\u0dad\u0dd2\u0dba",fontdefault:"\u0db4\u0db1\u0dca\u0daf \u0dc3\u0db8\u0dd6\u0dc4\u0dba","font_size":"\u0db4\u0db1\u0dca\u0daf \u0db4\u0dca\u200d\u0dbb\u0db8\u0dcf\u0dab\u0dba","style_select":"\u0dc1\u0ddb\u0dbd\u0dd2\u0dba","more_colors":"\u0dad\u0dc0\u0dad\u0dca \u0dc0\u0dbb\u0dca\u0dab","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"\u0d94\u0db6\u0da7 \u0db8\u0dd9\u0db8 \u0d85\u0db1\u0dca\u0dad\u0dbb\u0dca\u0d9c\u0dad\u0dba \u0db8\u0d9a\u0dcf \u0daf\u0dd0\u0db8\u0dd3\u0db8\u0da7 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0db8 \u0daf?",path:"\u0db8\u0d9f","clipboard_msg":"\u0db4\u0dd2\u0da7\u0db4\u0dad\u0dca \u0d9a\u0dd2\u0dbb\u0dd3\u0db8/\u0d89\u0dc0\u0dad\u0dca \u0d9a\u0dd2\u0dbb\u0dd3\u0db8/\u0d87\u0dbd\u0dc0\u0dd3\u0db8 \u0db8\u0ddc\u0dc3\u0dd2\u0dbd\u0dca\u0dbd\u0dcf \u0dc4\u0dcf \u0dc6\u0dba\u0dbb\u0dca \u0dc6\u0ddc\u0d9a\u0dca\u0dc3\u0dca \u0dc4\u0dd2 \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0db1\u0ddc\u0dc0\u0dda.\n\u0d94\u0db6\u0da7 \u0db8\u0dda \u0db4\u0dd2\u0dc5\u0dd2\u0db6\u0db3\u0dc0 \u0dad\u0da0\u0daf\u0dd4\u0dbb\u0da7\u0dad\u0dca \u0dad\u0ddc\u0dbb\u0dad\u0dd4\u0dbb\u0dd4 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0dc0\u0dda\u0daf?","blockquote_desc":"Blockquote","help_desc":"\u0d8b\u0db4\u0d9a\u0dcf\u0dbb\u0dba","newdocument_desc":"\u0db1\u0dc0 \u0dbd\u0dda\u0d9b\u0db1\u0dba","image_props_desc":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4\u0dd2 \u0dbd\u0d9a\u0dca\u0dc2\u0dab\u0dba","copy_desc":"\t\u0db4\u0dd2\u0da7\u0db4\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","cut_desc":"Cut","anchor_desc":"\u0d86\u0db0\u0dcf\u0dbb\u0dba \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1 ","visualaid_desc":"\u0db8\u0dcf\u0dbb\u0dca\u0d9c\u0dc3\u0dd6\u0da0\u0d9a/\u0d85\u0daf\u0dd8\u0dc1\u0dca\u200d\u0dba \u0db8\u0dd6\u0dbd\u0dd2\u0d9a\u0dcf\u0d82\u0d9c","charmap_desc":" \u0db7\u0dcf\u0dc0\u0dd2\u0dad \u0d85\u0d9a\u0dca\u0dc2\u0dbb\u0dba \u0d87\u0dad\u0dd4\u0dbd\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1","backcolor_desc":"\u0db4\u0dc3\u0dd4\u0db6\u0dd2\u0db8 \u0dc0\u0dbb\u0dca\u0dab\u0dba \u0dad\u0ddd\u0dbb\u0dcf\u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","forecolor_desc":" \u0db4\u0dcf\u0daa\u0dba\u0dd9\u0dc4\u0dd2 \u0dc0\u0dbb\u0dca\u0dab\u0dba \u0dad\u0ddd\u0dbb\u0dcf\u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","custom1_desc":"\u0d94\u0db6\u0dda \u0dc0\u0dca\u200d\u0dba\u0dc0\u0dc4\u0dcf\u0dbb\u0dd2\u0d9a \u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dbb\u0dba","removeformat_desc":"\u0d86\u0d9a\u0dd8\u0dad\u0dd2\u0d9a\u0dbb\u0dab\u0dba \u0d89\u0dc0\u0dad\u0dca\u0d9a\u0dbb\u0db1\u0dc0\u0dcf","hr_desc":"\u0dad\u0dd2\u0dbb\u0dc3\u0dca \u0dbb\u0dd6\u0dbd \u0d87\u0dad\u0dd4\u0dbd\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","sup_desc":"\u0d8b\u0da9\u0dd4\u0dbd\u0d9a\u0dd4\u0dab","sub_desc":"\u0dba\u0da7\u0dd2\u0dbd\u0d9a\u0dd4\u0dab\u0dd4","code_desc":" HTML \u0db8\u0dd6\u0dbd\u0dcf\u0dc1\u0dca\u200d\u0dbb\u0dba \u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1","cleanup_desc":"\u0dc0\u0dd0\u0dbb\u0daf\u0dd2 \u0d9a\u0dda\u0dad \u0d89\u0dc0\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","image_desc":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4\u0dba \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1 ","unlink_desc":"Unlink","link_desc":"\u0dc3\u0db8\u0dca\u0db6\u0db1\u0dca\u0db0\u0d9a\u0dba \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1","redo_desc":"\u0db1\u0dd0\u0dc0\u0dad \u0d9a\u0dbb\u0db1\u0dc0\u0dcf (Ctrl+Y)","undo_desc":"\u0db1\u0dd2\u0dc1\u0dca\u0db4\u0dca\u200d\u0dbb\u0db7 \u0d9a\u0dbb\u0db1\u0dca\u0db1(Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"\u0d9a\u0dca\u200d\u0dbb\u0db8\u0dcf\u0db1\u0dd4\u0d9a\u0dd6\u0dbd \u0dbd\u0dd0\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","bullist_desc":"\u0d85\u0d9a\u0dca\u200d\u0dbb\u0db8\u0dcf\u0db1\u0dd4\u0d9a\u0dd6\u0dbd \u0dbd\u0dd0\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","justifyfull_desc":"\u0db4\u0dd9\u0dc5\u0da7 \u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","justifyright_desc":"\u0daf\u0d9a\u0dd4\u0dab\u0dd4 \u0db4\u0dd9\u0dc5\u0da7 \u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","justifycenter_desc":"\u0db8\u0dd0\u0daf \u0db4\u0dd9\u0dc5\u0da7 \u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","justifyleft_desc":"\u0dc0\u0db8\u0dca \u0db4\u0dd9\u0dc5\u0da7 \u0d9c\u0db1\u0dca\u0db1\u0dc0\u0dcf","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","paste_desc":"Paste (Ctrl+V)","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/si_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/si_dlg.js
new file mode 100644
index 000000000..029f5fc03
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/si_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.advanced_dlg',{"link_list":"\u0d87\u0db8\u0dd4\u0dab\u0dd4\u0db8\u0dca \u0dbd\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","link_is_external":"\u0d94\u0db6 \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dc5 URL \u0dba \u0db6\u0dcf\u0dc4\u0dd2\u0dbb \u0d87\u0db8\u0dd2\u0dab\u0dd4\u0db8\u0d9a\u0dca \u0db1\u0db8\u0dca,\u0d94\u0db6\u0da7 \u0d91\u0dba\u0da7 \u0db4\u0dca\u200d\u0dbb\u0dc0\u0dda\u0dc1 \u0dc0\u0dd3\u0db8\u0da7 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0daf??","link_is_email":"\u0d94\u0db6 \u0d87\u0dad\u0dd4\u0dc5\u0dad\u0dca \u0d9a\u0dc5 URL \u0dba \u0dc0\u0dd2\u0daf\u0dca\u200d\u0dba\u0dd4\u0dad\u0dca \u0dad\u0dd0\u0db4\u0dd0\u0dbd \u0d9a\u0dca \u0db1\u0db8\u0dca \u0d94\u0db6\u0da7 \u0d91\u0dba\u0da7 \u0db4\u0dca\u200d\u0dbb\u0dc0\u0dda\u0dc1 \u0dc0\u0dd3\u0db8\u0da7 \u0d85\u0dc0\u0dc1\u0dca\u200d\u0dba \u0daf?","link_titlefield":"\u0db8\u0dcf\u0dad\u0dd8\u0d9a\u0dcf\u0dc0","link_target_blank":"\u0d87\u0db8\u0dd4\u0db1\u0dd4\u0db8 \u0dc0\u0dd9\u0db1\u0db8 \u0d9a\u0dc0\u0dd4\u0dbd\u0dd4\u0dc0\u0d9a \u0dc0\u0dd2\u0dc0\u0dd8\u0dad \u0d9a\u0dbb\u0db1\u0dca\u0db1","link_target_same":"\u0d87\u0db8\u0dd4\u0db1\u0dd4\u0db8 \u0dc0\u0dd9\u0db1\u0db8 \u0d9a\u0dc0\u0dd4\u0dbd\u0dd4\u0dc0\u0d9a \u0dc0\u0dd2\u0dc0\u0dd8\u0dad \u0d9a\u0dbb\u0db1\u0dca\u0db1","link_target":"\u0d89\u0dbd\u0d9a\u0dca\u0d9a\u0dba","link_url":"\u0d87\u0db8\u0dd4\u0db1\u0dd4\u0db8 URL","link_title":"\u0d87\u0db8\u0dd4\u0db1\u0dd4\u0db8 \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1","image_align_right":"\u0daf\u0d9a\u0dd4\u0dab\u0da7","image_align_left":"\u0dc0\u0db8\u0da7","image_align_textbottom":"\u0db4\u0dcf\u0da8\u0dba \u0db4\u0dc4\u0dc5","image_align_texttop":"\u0db4\u0dcf\u0da8\u0dba \u0d89\u0dc4\u0dc5","image_align_bottom":"\u0dba\u0da7","image_align_middle":"\u0db8\u0dd0\u0daf","image_align_top":"\u0d89\u0dc4\u0dc5","image_align_baseline":"\u0db8\u0dd6\u0dbd\u0dd2\u0d9a\u0dba","image_align":"\u0db4\u0dd9\u0dbd \u0d9c\u0dd0\u0db1\u0dca\u0dc0\u0dd4\u0db8","image_hspace":"\u0dad\u0dd2\u0dbb\u0dc3\u0dca \u0d85\u0dc0\u0d9a\u0dcf\u0dc1\u0dba","image_vspace":"\u0dc3\u0dd2\u0dbb\u0dc3\u0dca \u0d85\u0dc0\u0d9a\u0dcf\u0dc1\u0dba","image_dimensions":"\u0db8\u0dcf\u0db1","image_alt":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4\u0dba\u0dd9\u0dc4\u0dd2 \u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dbb","image_list":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4 \u0dbd\u0dd0\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","image_border":"\u0db6\u0ddd\u0da9\u0dbb\u0dba","image_src":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4\u0dba\u0dd9\u0dc4\u0dd2 URL","image_title":"\u0d85\u0db1\u0dd4\u0dbb\u0dd6\u0db4\u0dba\u0dd9\u0dc4\u0dd2 \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1","charmap_title":"\u0db7\u0dcf\u0dc0\u0dd2\u0dad\u0dcf\u0dc0\u0db1 \u0d9c\u0dd4\u0dab\u0dcf\u0d82\u0d9c\u0dba \u0dad\u0ddd\u0dbb\u0db1\u0dca\u0db1","colorpicker_name":"\u0db1\u0dcf\u0db8\u0dba","colorpicker_color":"\u0dc0\u0dbb\u0dca\u0dab:","colorpicker_named_title":"\u0db1\u0db8\u0dd0\u0dad\u0dd2 \u0dc0\u0dbb\u0dca\u0dab","colorpicker_named_tab":"\u0db1\u0db8\u0dd0\u0dad\u0dd2","colorpicker_palette_title":"\t\u0dc0\u0dbb\u0dca\u0dab \u0d91\u0dbd\u0d9a \u0dc0\u0dbb\u0dca\u0dab","colorpicker_palette_tab":"\t\u0dc0\u0dbb\u0dca\u0dab \u0d91\u0dbd\u0d9a\u0dba","colorpicker_picker_title":"\u0dc0\u0dbb\u0dca\u0dab \u0d87\u0dc4\u0dd4\u0dc5\u0dd4\u0db8\u0dca \u0d9a\u0dd6\u0dbb","colorpicker_picker_tab":"\t\u0d87\u0dc4\u0dd4\u0dc5\u0dd4\u0db8\u0dca \u0d9a\u0dd6\u0dbb ","colorpicker_title":"\u0dc0\u0dbb\u0dca\u0dab\u0dba \u0dad\u0ddd\u0dbb\u0db1\u0dca\u0db1","code_wordwrap":"\u0dc0\u0dcf\u0d9c\u0dca \u0dc0\u0dd9\u0dbd\u0dd4\u0db8","code_title":"HTML \u0d9a\u0dda\u0dad \u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dcf\u0dbb\u0d9a\u0dba","anchor_name":"\u0d86\u0db0\u0dcf\u0dbb\u0d9a \u0db1\u0dcf\u0db8\u0dba","anchor_title":"\u0d86\u0db0\u0dcf\u0dbb\u0dba \u0d87\u0dad\u0dd4\u0dc5\u0dd4/\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba \u0d9a\u0dbb\u0db1\u0dca\u0db1","about_loaded":"Loaded plugins","about_version":"\u0dc3\u0d82\u0dc3\u0dca\u0d9a\u0dbb\u0dab\u0dba","about_author":"\u0d9a\u0dad\u0dd8","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"\u0db6\u0dbd\u0db4\u0dad\u0dca\u200d\u0dbb\u0dba","about_help":"\u0d8b\u0db4\u0d9a\u0dcf\u0dbb\u0dba","about_general":"\u0dc3\u0dc0\u0dd2\u0dc3\u0dca\u0dad\u0dbb\u0dcf\u0dad\u0dca\u0db8\u0d9a\u0dc0","about_title":" TinyMCE \u0db4\u0dd2\u0dc5\u0dd2\u0db6\u0db3","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sk.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sk.js
new file mode 100644
index 000000000..5633fbf25
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.advanced',{"underline_desc":"Pod\u010diarknut\u00e9 (Ctrl+U)","italic_desc":"Kurz\u00edva (Ctrl+I)","bold_desc":"Tu\u010dn\u00e9 (Ctrl+B)",dd:"Popis defin\u00edcie",dt:"Term\u00edn defin\u00edcie",samp:"Uk\u00e1\u017eka k\u00f3du",code:"K\u00f3d",blockquote:"Blokov\u00e1 cit\u00e1cia",h6:"Nadpis 6",h5:"Nadpis 5",h4:"Nadpis 4",h3:"Nadpis 3",h2:"Nadpis 2",h1:"Nadpis 1",pre:"Predform\u00e1tovan\u00e9",address:"Adresa",div:"Oddiel",paragraph:"Odstavec",block:"Form\u00e1t",fontdefault:"P\u00edsmo","font_size":"Ve\u013ekos\u0165 p\u00edsma","style_select":"\u0160t\u00fdly","more_colors":"\u010eal\u0161ie farby","toolbar_focus":"Prechod na panel n\u00e1strojov - Alt Q, prechod do editora - Alt Z, prechod na cestu k objektom - Alt X",newdocument:"Ste si naozaj ist\u00ed, \u017ee chcete odstr\u00e1ni\u0165 v\u0161etok obsah?",path:"Cesta","clipboard_msg":"Funkcie kop\u00edrova\u0165/vystrihn\u00fa\u0165/vlo\u017ei\u0165 nie s\u00fa prehliada\u010dom Mozilla Firefox podporovan\u00e9. Chcete viac inform\u00e1ci\u00ed o tomto probl\u00e9me?","blockquote_desc":"Blokov\u00e1 cit\u00e1cia","help_desc":"Pomocn\u00edk","newdocument_desc":"Nov\u00fd dokument","image_props_desc":"Vlastnosti obr\u00e1zka","paste_desc":"Vlo\u017ei\u0165","copy_desc":"Kop\u00edrova\u0165","cut_desc":"Vystrihn\u00fa\u0165","anchor_desc":"Vlo\u017ei\u0165/upravi\u0165 z\u00e1lo\u017eku (kotvu)","visualaid_desc":"Zobrazi\u0165 pomocn\u00e9 linky/skryt\u00e9 prvky","charmap_desc":"Vlo\u017ei\u0165 \u0161peci\u00e1lny znak","backcolor_desc":"Farba zv\u00fdraznenia textu","forecolor_desc":"Farba p\u00edsma","custom1_desc":"\u013dubovoln\u00fd popisok","removeformat_desc":"Odstr\u00e1ni\u0165 form\u00e1tovanie","hr_desc":"Vlo\u017ei\u0165 vodorovn\u00fd odde\u013eova\u010d","sup_desc":"Horn\u00fd index","sub_desc":"Doln\u00fd index","code_desc":"Upravi\u0165 HTML zdroj","cleanup_desc":"Vy\u010disti\u0165 k\u00f3d","image_desc":"Vlo\u017ei\u0165/upravi\u0165 obr\u00e1zok","unlink_desc":"Odobra\u0165 odkaz","link_desc":"Vlo\u017ei\u0165/upravi\u0165 odkaz","redo_desc":"Znovu (Ctrl+Y)","undo_desc":"Sp\u00e4\u0165 (Ctrl+Z)","indent_desc":"Zv\u00e4\u010d\u0161i\u0165 odsadenie","outdent_desc":"Zmen\u0161i\u0165 odsadenie","numlist_desc":"\u010c\u00edslovan\u00fd zoznam","bullist_desc":"Zoznam s odr\u00e1\u017ekami","justifyfull_desc":"Zarovna\u0165 do bloku","justifyright_desc":"Zarovna\u0165 doprava","justifycenter_desc":"Zarovna\u0165 na stred","justifyleft_desc":"Zarovna\u0165 do\u013eava","striketrough_desc":"Pre\u010diarknut\u00e9","help_shortcut":"Stla\u010dte ALT F10 pre panel n\u00e1strojov. Stla\u010dte ALT 0 pre pomocn\u00edka.","rich_text_area":"Oblas\u0165 s form\u00e1tovan\u00fdm textom","shortcuts_desc":"Pomocn\u00edk",toolbar:"Panel n\u00e1strojov","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sk_dlg.js
new file mode 100644
index 000000000..3af287aa5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.advanced_dlg',{"link_list":"Zoznam odkazov","link_is_external":"Zadan\u00e9 URL vyzer\u00e1 ako extern\u00fd odkaz, chcete doplni\u0165 povinn\u00fd prefix http://?","link_is_email":"Zadan\u00e9 URL vyzer\u00e1 ako e-mailov\u00e1 adresa, chcete doplni\u0165 povinn\u00fd prefix mailto:?","link_titlefield":"Titulok","link_target_blank":"Otvori\u0165 odkaz v novom okne","link_target_same":"Otvori\u0165 odkaz v rovnakom okne","link_target":"Cie\u013e","link_url":"URL odkazu","link_title":"Vlo\u017ei\u0165/upravi\u0165 odkaz","image_align_right":"Vpravo","image_align_left":"V\u013eavo","image_align_textbottom":"So spodkom riadku","image_align_texttop":"S vrcholom riadku","image_align_bottom":"Dole","image_align_middle":"Na stred riadku","image_align_top":"Hore","image_align_baseline":"Na z\u00e1klad\u0148u","image_align":"Zarovnanie","image_hspace":"Horizont\u00e1lne odsadenie","image_vspace":"Vertik\u00e1lne odsadenie","image_dimensions":"Rozmery","image_alt":"Popis obr\u00e1zka","image_list":"Zoznam obr\u00e1zkov","image_border":"Or\u00e1movanie","image_src":"URL obr\u00e1zka","image_title":"Vlo\u017ei\u0165/upravi\u0165 obr\u00e1zok","charmap_title":"Vlo\u017ei\u0165 \u0161peci\u00e1lny znak","colorpicker_name":"N\u00e1zov:","colorpicker_color":"Vybrat\u00e1 farba:","colorpicker_named_title":"Pomenovan\u00e9 farby","colorpicker_named_tab":"N\u00e1zvy","colorpicker_palette_title":"Paleta farieb","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Kvapkadlo","colorpicker_picker_tab":"Kvapkadlo","colorpicker_title":"V\u00fdber farby","code_wordwrap":"Zalamovanie riadkov","code_title":"Editor HTML","anchor_name":"N\u00e1zov z\u00e1lo\u017eky","anchor_title":"Vlo\u017ei\u0165/upravi\u0165 z\u00e1lo\u017eku (kotvu)","about_loaded":"Na\u010d\u00edtan\u00e9 z\u00e1suvn\u00e9 moduly","about_version":"Verzia","about_author":"Autor","about_plugin":"Z\u00e1suvn\u00fd modul","about_plugins":"Z\u00e1suvn\u00e9 moduly","about_license":"Licencia","about_help":"Pomocn\u00edk","about_general":"O programe","about_title":"O TinyMCE","charmap_usage":"Pre navig\u00e1ciu pou\u017eite \u0161\u00edpky v\u013eavo a vpravo.","anchor_invalid":"Zadajte, pros\u00edm, platn\u00fd n\u00e1zov z\u00e1lo\u017eky (kotvy).","accessibility_help":"Dostupnos\u0165 n\u00e1povedy","accessibility_usage_title":"V\u0161eobecn\u00e9 pou\u017eitie","invalid_color_value":"Neplatn\u00fd k\u00f3d farby"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sl.js
new file mode 100644
index 000000000..0f9901ef9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.advanced',{"underline_desc":"Pod\u010drtano (Ctrl+U)","italic_desc":"Po\u0161evno (Ctrl+I)","bold_desc":"Krepko (Ctrl+B)",dd:"definicija - opis",dt:"definicija - izraz",samp:"kodni zgled",code:"koda",blockquote:"citat",h6:"naslov 6",h5:"naslov 5",h4:"naslov 4",h3:"naslov 3",h2:"naslov 2",h1:"naslov 1",pre:"predoblikovano",address:"naslov",div:"blok",paragraph:"odstavek",block:"oblika",fontdefault:"Dru\u017eina pisave","font_size":"Velikost pisave","style_select":"Izberite slog","more_colors":"Ve\u010d barv","toolbar_focus":"Preskok na orodjarno - Alt+Q, Preskok v urejevalnik - Alt-Z, Preskok na pot elementa - Alt-X",newdocument:"Ste prepri\u010dani, da \u017eelite odstraniti vsebino?",path:"Pot","clipboard_msg":"Delo z odlo\u017ei\u0161\u010dem ni mogo\u010de v tem brskalniku. Lahko uporabljate kombinacije tipk Ctrl+X, Ctrl+C, Ctrl+V.\n\u017delite ve\u010d informacij o tem?","blockquote_desc":"Citat","help_desc":"Pomo\u010d","newdocument_desc":"Nov dokument","image_props_desc":"Lastnosti slike","paste_desc":"Prilepi","copy_desc":"Kopiraj","cut_desc":"Izre\u017ei","anchor_desc":"Vstavi/uredi sidro","visualaid_desc":"Preklop prikaza vodil","charmap_desc":"Vstavi posebni znak","backcolor_desc":"Izberite barvo ozadja","forecolor_desc":"Izberite barvo pisave","custom1_desc":"Opis tule","removeformat_desc":"Odstrani oblikovanje","hr_desc":"Vstavi \u010drto","sup_desc":"Nadpisano","sub_desc":"Podpisano","code_desc":"Uredi kodo HTML","cleanup_desc":"Pre\u010disti kodo","image_desc":"Vstavi/uredi sliko","unlink_desc":"Odstrani povezavo","link_desc":"Vstavi/uredi povezavo","redo_desc":"Uveljavi (Ctrl+Y)","undo_desc":"Razveljavi (Ctrl+Z)","indent_desc":"Odmakni ven","outdent_desc":"Zamakni","numlist_desc":"Na\u0161tevanje","bullist_desc":"Alineje","justifyfull_desc":"Polna poravnava","justifyright_desc":"Poravnava desno","justifycenter_desc":"Poravnava na sredino","justifyleft_desc":"Poravnava levo","striketrough_desc":"Pre\u010drtano","help_shortcut":"Pritisnite ALT-F10 za orodno vrstico, ALT-0 za pomo\u010d","rich_text_area":"Polje z obogatenim besedilom","shortcuts_desc":"Pomo\u010d za dostopnost",toolbar:"Orodna vrstica","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sl_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sl_dlg.js
new file mode 100644
index 000000000..dccb6213f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sl_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.advanced_dlg',{"link_list":"Seznam povezav","link_is_external":"Vneseni naslov verjetno predstavlja zunanjo povezavo, \u017eelite da dodam zahtevano predpono \\\'http://\\\'?","link_is_email":"Vneseni naslov verjetno prestavlja e-naslov, \u017eelite da dodam zahtevano predpono \\\'mailto:\\\'?","link_titlefield":"Naslov","link_target_blank":"odpri povezavo v novem oknu","link_target_same":"odpri povezavo v istem oknu","link_target":"Ime cilja","link_url":"Naslov URL","link_title":"Vstavi/uredi povezavo","image_align_right":"desno, plavajo\u010de","image_align_left":"levo, plavajo\u010de","image_align_textbottom":"dno besedila","image_align_texttop":"vrh besedila","image_align_bottom":"spodaj","image_align_middle":"sredina","image_align_top":"zgoraj","image_align_baseline":"osnovna linija","image_align":"Poravnava","image_hspace":"Prostor le/de","image_vspace":"Prostor zg/sp","image_dimensions":"Dimenzije","image_alt":"Opis slike","image_list":"Seznam slik","image_border":"Obroba","image_src":"Naslov URL slike","image_title":"Vstavi/uredi sliko","charmap_title":"Izberite posebni znak","colorpicker_name":"Ime:","colorpicker_color":"Barva:","colorpicker_named_title":"Poimenovane barve","colorpicker_named_tab":"Poimenovane","colorpicker_palette_title":"Barve palete","colorpicker_palette_tab":"Paleta","colorpicker_picker_title":"Izbor barve","colorpicker_picker_tab":"Izbor","colorpicker_title":"Izberite barvo","code_wordwrap":"Prelomi vrstice","code_title":"Urejevalnik kode HTML","anchor_name":"Ime sidra","anchor_title":"Vstavi/uredi sidro","about_loaded":"Nalo\u017eeni vsadki","about_version":"Verzija","about_author":"Avtor","about_plugin":"Vsadek","about_plugins":"Vsadki","about_license":"Licenca","about_help":"Pomo\u010d","about_general":"Vizitka","about_title":"O TinyMCE","charmap_usage":"Za navigacijo uporabite tipki levo in desno.","anchor_invalid":"Prosimo vnesite veljavno ime sidra.","accessibility_help":"Pomo\u010d za dostopnost","accessibility_usage_title":"Splo\u0161na raba"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sq.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sq.js
new file mode 100644
index 000000000..18c265c87
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sq.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.advanced',{"underline_desc":"I N\u00ebnvizuar (Ctrl+U)","italic_desc":"I Pjerr\u00ebt (Ctrl+I)","bold_desc":"I Trash\u00eb (Ctrl+B)",dd:"P\u00ebrshkrimi i p\u00ebrcaktimit",dt:"Terma e p\u00ebrcaktimit ",samp:"Shembull kodi",code:"Kod",blockquote:"Bllok",h6:"Kok\u00eb 6",h5:"Kok\u00eb 5",h4:"Kok\u00eb 4",h3:"Kok\u00eb 3",h2:"Kok\u00eb 2",h1:"Kok\u00eb 1",pre:"Para formatuar",address:"Adres\u00eb",div:"Div",paragraph:"Paragraf",block:"Formati",fontdefault:"Familja e tekstit","font_size":"Madh\u00ebsia e tekstit","style_select":"Stilet","more_colors":"M\u00eb shum\u00eb ngjyra","toolbar_focus":"Shko tek butonat - Alt+Q, Shko tek editori - Alt+Z, Shko tek rruga e elementit - Alt+X",newdocument:"Jeni t\u00eb sigurt q\u00eb doni t\'a fshini p\u00ebrmbajtjen?",path:"Rruga","clipboard_msg":"Kopja/Prerja/Ngjitja nuk suportohen n\u00eb Mozilla dhe Firefox.\nD\u00ebshironi m\u00eb shum\u00eb informacione p\u00ebr k\u00ebt\u00eb \u00e7\u00ebshtje?","blockquote_desc":"Bllok","help_desc":"Ndihm\u00eb","newdocument_desc":"Dokument i Ri","image_props_desc":"Opsionet e fotos","paste_desc":"Ngjit","copy_desc":"Kopjo","cut_desc":"Prit","anchor_desc":"Fut/edito lidhje","visualaid_desc":"Shfaq/Fshih vijat ndihm\u00ebse dhe element\u00ebt e paduksh\u00ebm","charmap_desc":"Fut karakter t\u00eb personalizuar","backcolor_desc":"Zgjidh ngjyr\u00ebn e fush\u00ebs","forecolor_desc":"Zgjidh ngjyr\u00ebn e tekstit","custom1_desc":"P\u00ebshkrimi i personalizuar k\u00ebtu","removeformat_desc":"Fshi formatimin","hr_desc":"Fut linj\u00eb horizontale","sup_desc":"Mbi shkrim","sub_desc":"N\u00ebn shkrim","code_desc":"Edito kodin HTML","cleanup_desc":"Pastro kodin","image_desc":"Fut/edito foto","unlink_desc":"Hiq lidhje","link_desc":"Fut/edito lidhje","redo_desc":"Rib\u00ebj (Ctrl+Y)","undo_desc":"\u00c7b\u00ebj (Ctrl+Z)","indent_desc":"Vendos kryerradh\u00eb","outdent_desc":"Hiq kryerradh\u00eb","numlist_desc":"List\u00eb e rregullt","bullist_desc":"List\u00eb e parregullt","justifyfull_desc":"Drejtim i plot\u00eb","justifyright_desc":"Drejtimi djathtas","justifycenter_desc":"Drejtimi qend\u00ebr","justifyleft_desc":"Drejtimi majtas","striketrough_desc":"Vij\u00eb n\u00eb mes","help_shortcut":"Shtypni ALT-F10 p\u00ebr panelin e veglave. Shtypni ALT-0 p\u00ebr ndihm\u00eb.","rich_text_area":"Zona e Pasur","shortcuts_desc":"Ndihm\u00eb p\u00ebr Aksesueshm\u00ebrin\u00eb",toolbar:"Paneli i Veglave","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sq_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sq_dlg.js
new file mode 100644
index 000000000..de456f87e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sq_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.advanced_dlg',{"link_list":"Lista e lidhjeve","link_is_external":"Lidhja q\u00eb keni futur duket si lidhje e jasht\u00ebme. Doni t\u00eb shtoni prefiksin http://?","link_is_email":"Lidhja q\u00eb keni futur duket si adres\u00eb emaili. Doni t\u00eb shtoni prefiksin mailto:?","link_titlefield":"Titulli","link_target_blank":"Hape lidhjen n\u00eb dritare t\u00eb re","link_target_same":"Hape lidhjen n\u00eb t\u00eb nj\u00ebjt\u00ebn dritare","link_target":"Sh\u00ebnjestra","link_url":"URL e lidhjes","link_title":"Fut/edito lidhje","image_align_right":"Djathtas","image_align_left":"Majtas","image_align_textbottom":"N\u00eb fund t\u00eb tekstit","image_align_texttop":"N\u00eb krye t\u00eb tekstit","image_align_bottom":"Fund","image_align_middle":"Mes","image_align_top":"Krye","image_align_baseline":"Vij\u00eb fundore","image_align":"Drejtimi","image_hspace":"Hap\u00ebsira Horizontale","image_vspace":"Hap\u00ebsira Vertikale","image_dimensions":"P\u00ebrmasat","image_alt":"P\u00ebrshkrimi i fotos","image_list":"Lista e fotove","image_border":"Korniza","image_src":"URL e fotos","image_title":"Fut/edio foto","charmap_title":"Zgjidh karakter t\u00eb personalizuar","colorpicker_name":"Emri:","colorpicker_color":"Ngjyra:","colorpicker_named_title":"Ngjyrat e em\u00ebruara","colorpicker_named_tab":"Em\u00ebruar","colorpicker_palette_title":"Ngjyrat e Libraris\u00eb","colorpicker_palette_tab":"Librari","colorpicker_picker_title":"Zgjedh\u00ebsi i ngjyr\u00ebs","colorpicker_picker_tab":"Zgjedh\u00ebsi","colorpicker_title":"Zgjidh nj\u00eb ngjyr\u00eb","code_wordwrap":"Word wrap","code_title":"Edituesi i kodit HTML","anchor_name":"Emri i lidhjes","anchor_title":"Fut/edito lidhje","about_loaded":"Shtesa t\u00eb ngarkuara","about_version":"Versioni","about_author":"Autori","about_plugin":"Shtes\u00eb","about_plugins":"Shtesa","about_license":"Li\u00e7enca","about_help":"Ndihm\u00eb","about_general":"Rreth","about_title":"Rreth TinyMCE","charmap_usage":"P\u00ebrdorni butonat majtas dhe djatthas p\u00ebr navigim.","anchor_invalid":"P\u00ebrcaktoni nj\u00eb em\u00ebr t\u00eb sakt\u00eb lidhjeje.","accessibility_help":"Ndihm\u00eb p\u00ebr Aksesueshm\u00ebrin\u00eb.","accessibility_usage_title":"P\u00ebrdorim i P\u00ebrgjithsh\u00ebm"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sr.js
new file mode 100644
index 000000000..1042caa8a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.advanced',{"underline_desc":"Podvu\u010deno (Ctrl U)","italic_desc":"Isko\u0161eno (Ctrl I)","bold_desc":"Podebljano (Ctrl B)",dd:"Opis definicije",dt:"Pojam definicija",samp:"Uzorak koda",code:"Kod",blockquote:"Citat",h6:"Naslov 6",h5:"Naslov 5",h4:"Naslov 4",h3:"Naslov 3",h2:"Naslov 2",h1:"Naslov 1",pre:"Unapred formatirano",address:"Adresa",div:"Div",paragraph:"Pasus",block:"Formatiranje",fontdefault:"Pismo","font_size":"Veli\u010dina slova","style_select":"Stilovi","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"Jo\u0161 boja","toolbar_focus":"Pre\u0111i na traku sa alatkama - Alt Q, Pre\u0111i na editor - Alt-Z, Pre\u0111i na putanju elementa - Alt-X",newdocument:"Da li ste sigurni da \u017eelite da obri\u0161ete sav sadr\u017eaj?",path:"Putanja","clipboard_msg":"Kopiraj/Iseci/Zalepi nisu dostupni u Mozilla i Firefox web \u010dita\u010dima. \u017delite li vi\u0161e informacija o ovom problemu?","blockquote_desc":"Du\u017ei citat","help_desc":"Pomo\u0107","newdocument_desc":"Nov dokument","image_props_desc":"Osobine slike","paste_desc":"Zalepi","copy_desc":"Kopiraj","cut_desc":"Iseci","anchor_desc":"Ubaci/Uredi sidro","visualaid_desc":"Uklju\u010di/Isklju\u010di linije vodilje/nevidljive elemente","charmap_desc":"Umetni simbol","backcolor_desc":"Izaberi boju pozadine","forecolor_desc":"Izaberi boju teksta","custom1_desc":"Sopstveni opis","removeformat_desc":"Ukloni formatiranje","hr_desc":"Umetni horizontalnu liniju","sup_desc":"Eksponent","sub_desc":"Indeks","code_desc":"Uredi HTML","cleanup_desc":"O\u010disti kod","image_desc":"Umetni/Uredi sliku","unlink_desc":"Ukloni link","link_desc":"Umetni/Uredi link","redo_desc":"Poni\u0161ti opoziv (Ctrl Y)","undo_desc":"Opozovi (Ctrl+Z)","indent_desc":"Uvla\u010denje","outdent_desc":"Izvla\u010denje","numlist_desc":"Ure\u0111eno nabrajanje","bullist_desc":"Neure\u0111eno nabrajanje","justifyfull_desc":"Obostrano poravnanje","justifyright_desc":"Desno poravnanje","justifycenter_desc":"Poravnanje po sredini","justifyleft_desc":"Levo poravnanje","striketrough_desc":"Precrtano","help_shortcut":"Pritisnite ALT-F10 za traku sa alatkama. Pritisnite ALT-0 za pomo\u0107.","rich_text_area":"Rich Text Area","shortcuts_desc":"Pomo\u0107 u vezi dostupnosti",toolbar:"Traka sa alatkama"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sr_dlg.js
new file mode 100644
index 000000000..aca90a3e7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.advanced_dlg',{"link_list":"Link (sa liste)","link_is_external":"URL koji ste uneli izgleda kao spolja\u0161nji link, da li \u017eelite da dodate neophodni http:// prefiks?","link_is_email":"URL koji ste uneli izgleda kao e-mail adresa, da li \u017eelite da dodate neophodni mailto: prefiks?","link_titlefield":"Naslov","link_target_blank":"Otvori link u novom prozoru","link_target_same":"Otvori link u istom prozoru","link_target":"Meta","link_url":"URL linka","link_title":"Umetni/Uredi link","image_align_right":"Desno","image_align_left":"Levo","image_align_textbottom":"Dno teksta","image_align_texttop":"Vrh teksta","image_align_bottom":"Dole","image_align_middle":"Sredina","image_align_top":"Gore","image_align_baseline":"Osnovna linija","image_align":"Poravnanje","image_hspace":"Horizontalni razmak","image_vspace":"Vertikalni razmak","image_dimensions":"Dimenzije","image_alt":"Opis slike","image_list":"Slika (sa liste)","image_border":"Ivice","image_src":"URL slike","image_title":"Umetni/Uredi sliku","charmap_title":"Odaberi simbol","colorpicker_name":"Naziv:","colorpicker_color":"Boja:","colorpicker_named_title":"Boje sa nazivom","colorpicker_named_tab":"Po nazivu","colorpicker_palette_title":"Paleta boja","colorpicker_palette_tab":"Iz palete","colorpicker_picker_title":"Pipeta za boje","colorpicker_picker_tab":"Pipetom","colorpicker_title":"Izaberite boju","code_wordwrap":"Omotaj tekst","code_title":"HTML editor","anchor_name":"Naziv sidra","anchor_title":"Umetni/Uredi sidro","about_loaded":"Aktivni dodaci","about_version":"Verzija","about_author":"Autor","about_plugin":"Dodatak","about_plugins":"Dodaci","about_license":"Licenca","about_help":"Pomo\u0107","about_general":"O programu","about_title":"O TinyMCE","anchor_invalid":"Navedite valjani naziv sidra","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sv.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sv.js
new file mode 100644
index 000000000..9a20833ad
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.advanced',{"underline_desc":"Understruken (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)",dd:"Definitionsbeskrivning",dt:"Definitionsterm",samp:"Kodexempel",code:"Kodblock",blockquote:"Blockcitat",h6:"Rubrik 6",h5:"Rubrik 5",h4:"Rubrik 4",h3:"Rubrik 3",h2:"Rubrik 2",h1:"Rubrik 1",pre:"F\u00f6rformaterad",address:"Adress",div:"Div",paragraph:"Stycke",block:"Format",fontdefault:"Teckensnitt","font_size":"Teckenstorlek","style_select":"Stilar","more_colors":"Mer f\u00e4rger","toolbar_focus":"Hoppa till verktygsf\u00e4ltet - Alt+Q, Hoppa till redigeraren - Alt-Z, Hoppa till elementlistan - Alt-X",newdocument:"\u00c4r du s\u00e4ker p\u00e5 att du vill radera allt inneh\u00e5ll?",path:"Element","clipboard_msg":"Kopiera/klipp ut/klistra in \u00e4r inte tillg\u00e4ngligt i din webbl\u00e4sare.\nVill du veta mer om detta?","blockquote_desc":"Blockcitat","help_desc":"Hj\u00e4lp","newdocument_desc":"Nytt dokument","image_props_desc":"Bildinst\u00e4llningar","paste_desc":"Klistra in","copy_desc":"Kopiera","cut_desc":"Klipp ut","anchor_desc":"Infoga/redigera bokm\u00e4rke","visualaid_desc":"Visa/d\u00f6lj visuella hj\u00e4lpmedel","charmap_desc":"Infoga specialtecken","backcolor_desc":"V\u00e4lj bakgrundsf\u00e4rg","forecolor_desc":"V\u00e4lj textf\u00e4rg","custom1_desc":"Din beskrivning h\u00e4r","removeformat_desc":"Ta bort formatering","hr_desc":"Infoga horisontell skiljelinje","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Redigera HTML k\u00e4llkoden","cleanup_desc":"St\u00e4da upp i k\u00e4llkoden","image_desc":"Infoga/redigera bild","unlink_desc":"Ta bort l\u00e4nk","link_desc":"Infoga/redigera l\u00e4nk","redo_desc":"G\u00f6r om (Ctrl+Y)","undo_desc":"\u00c5ngra (Ctrl+Z)","indent_desc":"Indrag","outdent_desc":"Drag tillbaka","numlist_desc":"Nummerlista","bullist_desc":"Punktlista","justifyfull_desc":"Justera","justifyright_desc":"H\u00f6gerst\u00e4lld","justifycenter_desc":"Centrera","justifyleft_desc":"V\u00e4nsterst\u00e4lld","striketrough_desc":"Genomstruken","help_shortcut":"Alt-F10 f\u00f6r verktygsf\u00e4lt. Alt-0 f\u00f6r hj\u00e4lp.","rich_text_area":"Redigeringsarea","shortcuts_desc":"Hj\u00e4lp f\u00f6r funktionshindrade",toolbar:"Verktygsf\u00e4lt","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sv_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sv_dlg.js
new file mode 100644
index 000000000..f2da940ed
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sv_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.advanced_dlg',{"link_list":"L\u00e4nklista","link_is_external":"L\u00e4nken du angav verkar vara en extern adress. Vill du infoga http:// prefixet p\u00e5 l\u00e4nken?","link_is_email":"L\u00e4nken du angav verkar vara en e-post adress. Vill du infoga mailto: prefixet p\u00e5 l\u00e4nken?","link_titlefield":"Titel","link_target_blank":"\u00d6\u0096ppna l\u00e4nken i ett nytt f\u00f6nster","link_target_same":"\u00d6\u0096ppna l\u00e4nken i samma f\u00f6nster","link_target":"M\u00e5l","link_url":"L\u00e4nkens URL","link_title":"Infoga/redigera l\u00e4nk","image_align_right":"H\u00f6ger","image_align_left":"V\u00e4nster","image_align_textbottom":"Botten av texten","image_align_texttop":"Toppen av texten","image_align_bottom":"Botten","image_align_middle":"Mitten","image_align_top":"Toppen","image_align_baseline":"Baslinje","image_align":"Justering","image_hspace":"Horisontalrymd","image_vspace":"Vertikalrymd","image_dimensions":"Dimensioner","image_alt":"Bildens beskrivning","image_list":"Bildlista","image_border":"Ram","image_src":"Bildens URL","image_title":"Infoga/redigera bild","charmap_title":"V\u00e4lj ett specialtecken","colorpicker_name":"Namn:","colorpicker_color":"F\u00e4rg:","colorpicker_named_title":"Namngivna f\u00e4rger","colorpicker_named_tab":"Namngivna","colorpicker_palette_title":"Palettf\u00e4rger","colorpicker_palette_tab":"Palett","colorpicker_picker_title":"F\u00e4rgv\u00e4ljare","colorpicker_picker_tab":"V\u00e4ljare","colorpicker_title":"V\u00e4lj en f\u00e4rg","code_wordwrap":"Bryt ord","code_title":"HTML k\u00e4llkodsl\u00e4ge","anchor_name":"Namn","anchor_title":"Infoga/redigera bokm\u00e4rke","about_loaded":"Laddade plug-ins","about_version":"Version","about_author":"Utvecklare","about_plugin":"Om plug-in","about_plugins":"Om plug-in","about_license":"Licens","about_help":"Hj\u00e4lp","about_general":"Om","about_title":"Om TinyMCE","charmap_usage":"Anv\u00e4nd v\u00e4nster och h\u00f6ger pil f\u00f6r att navigera","anchor_invalid":"Skiv ett korrekt ankarnamn.","accessibility_help":"Tillg\u00e4nglighets hj\u00e4lp","accessibility_usage_title":"Generellanv\u00e4ndning","invalid_color_value":"Felaktigt f\u00e4rgv\u00e4rde"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sy.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sy.js
new file mode 100644
index 000000000..7c1120f27
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition Description",dt:"Definition Term ",samp:"Code Sample",code:"Code",blockquote:"Block Quote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"DIV",paragraph:"Paragraph",block:"Format",fontdefault:"Font Family","font_size":"Font Size","style_select":"Styles","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","more_colors":"More Colors...","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Block Quote","help_desc":"Help","newdocument_desc":"New Document","image_props_desc":"Image Properties","paste_desc":"Paste (Ctrl+V)","copy_desc":"Copy (Ctrl+C)","cut_desc":"Cut (Ctrl+X)","anchor_desc":"Insert/Edit Anchor","visualaid_desc":"show/Hide Guidelines/Invisible Elements","charmap_desc":"Insert Special Character","backcolor_desc":"Select Background Color","forecolor_desc":"Select Text Color","custom1_desc":"Your Custom Description Here","removeformat_desc":"Remove Formatting","hr_desc":"Insert Horizontal Line","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup Messy Code","image_desc":"Insert/Edit Image","unlink_desc":"Unlink","link_desc":"Insert/Edit Link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Increase Indent","outdent_desc":"Decrease Indent","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","justifyfull_desc":"Align Full","justifyright_desc":"Align Right","justifycenter_desc":"Align Center","justifyleft_desc":"Align Left","striketrough_desc":"Strikethrough","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sy_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sy_dlg.js
new file mode 100644
index 000000000..088b0dc1b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/sy_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.advanced_dlg',{"link_list":"Link List","link_is_external":"The URL you entered seems to be an external link. Do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open Link in a New Window","link_target_same":"Open Link in the Same Window","link_target":"Target","link_url":"Link URL","link_title":"Insert/Edit Link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text Bottom","image_align_texttop":"Text Top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal Space","image_vspace":"Vertical Space","image_dimensions":"Dimensions","image_alt":"Image Description","image_list":"Image List","image_border":"Border","image_src":"Image URL","image_title":"Insert/Edit Image","charmap_title":"Select Special Character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named Colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette Colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color Picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a Color","code_wordwrap":"Word Wrap","code_title":"HTML Source Editor","anchor_name":"Anchor Name","anchor_title":"Insert/Edit Anchor","about_loaded":"Loaded Plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ta.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ta.js
new file mode 100644
index 000000000..c72f17991
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ta.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ta_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ta_dlg.js
new file mode 100644
index 000000000..f7646ae1a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ta_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/te.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/te.js
new file mode 100644
index 000000000..109de59d1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/te.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"Code",blockquote:"Blockquote",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"Preformatted",address:"Address",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/te_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/te_dlg.js
new file mode 100644
index 000000000..b9a71efa3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/te_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/th.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/th.js
new file mode 100644
index 000000000..144f0a2df
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/th.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.advanced',{"underline_desc":"\u0e15\u0e31\u0e27\u0e02\u0e35\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e43\u0e15\u0e49(Ctrl+U)","italic_desc":"\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e35\u0e22\u0e07 (Ctrl+I)","bold_desc":"\u0e15\u0e31\u0e27\u0e2b\u0e19\u0e32 (Ctrl+B)",dd:"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e04\u0e33\u0e19\u0e34\u0e22\u0e32\u0e21",dt:"\u0e04\u0e33\u0e19\u0e34\u0e22\u0e32\u0e21",samp:"\u0e42\u0e04\u0e49\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e22\u0e48\u0e32\u0e07",code:"\u0e42\u0e04\u0e49\u0e14",blockquote:"\u0e2d\u0e49\u0e32\u0e07\u0e2d\u0e34\u0e07",h6:"Heading 6",h5:"Heading 5",h4:"Heading 4",h3:"Heading 3",h2:"Heading 2",h1:"Heading 1",pre:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a\u0e1e\u0e37\u0e49\u0e19\u0e10\u0e32\u0e19",address:"\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48",div:"Div",paragraph:"\u0e22\u0e48\u0e2d\u0e2b\u0e19\u0e49\u0e32",block:"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a",fontdefault:"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","font_size":"\u0e02\u0e19\u0e32\u0e14\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","style_select":"\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","more_colors":"\u0e2a\u0e35\u0e2d\u0e37\u0e48\u0e19\u0e46","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"\u0e04\u0e38\u0e13\u0e41\u0e19\u0e48\u0e43\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e25\u0e49\u0e32\u0e07\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14?",path:"\u0e1e\u0e32\u0e17","clipboard_msg":"\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01 / \u0e15\u0e31\u0e14 / \u0e27\u0e32\u0e07\u0e22\u0e31\u0e07\u0e44\u0e21\u0e48\u0e21\u0e35\u0e43\u0e2b\u0e49\u0e1a\u0e23\u0e34\u0e01\u0e32\u0e23\u0e43\u0e19 Mozilla \u0e41\u0e25\u0e30 Firefox.\nDo \u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e1b\u0e31\u0e0d\u0e2b\u0e32\u0e19\u0e35\u0e49\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48?","blockquote_desc":"\u0e2d\u0e49\u0e32\u0e07\u0e16\u0e36\u0e07","help_desc":"\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d","newdocument_desc":"\u0e40\u0e2d\u0e01\u0e2a\u0e32\u0e23\u0e43\u0e2b\u0e21\u0e48","image_props_desc":"\u0e04\u0e38\u0e13\u0e2a\u0e21\u0e1a\u0e31\u0e15\u0e34\u0e23\u0e39\u0e1b","paste_desc":"\u0e27\u0e32\u0e07","copy_desc":"\u0e04\u0e31\u0e14\u0e25\u0e2d\u0e01","cut_desc":"\u0e15\u0e31\u0e14","anchor_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","visualaid_desc":"\u0e2a\u0e25\u0e31\u0e1a guidelines/\u0e0b\u0e48\u0e2d\u0e19 elements","charmap_desc":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23","backcolor_desc":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35\u0e1e\u0e37\u0e49\u0e19\u0e2b\u0e25\u0e31\u0e07","forecolor_desc":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21","custom1_desc":"\u0e43\u0e2a\u0e48\u0e23\u0e32\u0e22\u0e25\u0e30\u0e40\u0e2d\u0e35\u0e22\u0e14\u0e40\u0e2d\u0e07\u0e44\u0e14\u0e49\u0e17\u0e35\u0e48\u0e19\u0e35\u0e48","removeformat_desc":"\u0e25\u0e49\u0e32\u0e07\u0e23\u0e39\u0e1b\u0e41\u0e1a\u0e1a","hr_desc":"\u0e43\u0e2a\u0e48\u0e40\u0e2a\u0e49\u0e19\u0e1a\u0e23\u0e23\u0e17\u0e31\u0e14","sup_desc":"\u0e15\u0e31\u0e27\u0e22\u0e01","sub_desc":"\u0e15\u0e31\u0e27\u0e2b\u0e49\u0e2d\u0e22","code_desc":"\u0e41\u0e01\u0e49\u0e44\u0e02 HTML","cleanup_desc":"\u0e25\u0e49\u0e32\u0e07\u0e42\u0e04\u0e49\u0e14","image_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e23\u0e39\u0e1b","unlink_desc":"\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","link_desc":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","redo_desc":"\u0e22\u0e49\u0e2d\u0e19\u0e01\u0e25\u0e31\u0e1a (Ctrl+Y)","undo_desc":"\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01 (Ctrl+Z)","indent_desc":"\u0e40\u0e22\u0e37\u0e49\u0e2d\u0e07\u0e02\u0e27\u0e32","outdent_desc":"\u0e25\u0e14\u0e01\u0e32\u0e23\u0e40\u0e22\u0e37\u0e49\u0e2d\u0e07","numlist_desc":"\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02","bullist_desc":"\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23","justifyfull_desc":"\u0e08\u0e31\u0e14\u0e40\u0e15\u0e47\u0e21\u0e2b\u0e19\u0e49\u0e32","justifyright_desc":"\u0e08\u0e31\u0e14\u0e02\u0e27\u0e32","justifycenter_desc":"\u0e08\u0e31\u0e14\u0e01\u0e25\u0e32\u0e07","justifyleft_desc":"\u0e08\u0e31\u0e14\u0e0b\u0e49\u0e32\u0e22","striketrough_desc":"\u0e02\u0e35\u0e14\u0e06\u0e48\u0e32","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/th_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/th_dlg.js
new file mode 100644
index 000000000..81540943f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/th_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.advanced_dlg',{"link_list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","link_is_external":"URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e1b\u0e49\u0e2d\u0e19\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e20\u0e32\u0e22\u0e19\u0e2d\u0e01\u0e25\u0e34\u0e07\u0e04\u0e04\u0e38\u0e13\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21 http:// \u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48 ?","link_is_email":"URL \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13\u0e1b\u0e49\u0e2d\u0e19\u0e14\u0e39\u0e40\u0e2b\u0e21\u0e37\u0e2d\u0e19\u0e27\u0e48\u0e32\u0e08\u0e30\u0e21\u0e35\u0e17\u0e35\u0e48\u0e2d\u0e22\u0e39\u0e48\u0e2d\u0e35\u0e40\u0e21\u0e25\u0e2d\u0e22\u0e39\u0e48\u0e15\u0e49\u0e2d\u0e07\u0e01\u0e32\u0e23\u0e40\u0e1e\u0e34\u0e48\u0e21 mailto: \u0e19\u0e33\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e23\u0e37\u0e2d\u0e44\u0e21\u0e48 ?","link_titlefield":"\u0e0a\u0e37\u0e48\u0e2d","link_target_blank":"\u0e40\u0e1b\u0e34\u0e14\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c\u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e43\u0e2b\u0e21\u0e48","link_target_same":"\u0e40\u0e1b\u0e34\u0e14\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c\u0e43\u0e19\u0e2b\u0e19\u0e49\u0e32\u0e15\u0e48\u0e32\u0e07\u0e40\u0e14\u0e35\u0e22\u0e27\u0e01\u0e31\u0e19","link_target":"\u0e40\u0e1b\u0e49\u0e32\u0e2b\u0e21\u0e32\u0e22","link_url":"\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c URL","link_title":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","image_align_right":"\u0e02\u0e27\u0e32","image_align_left":"\u0e0b\u0e49\u0e32\u0e22","image_align_textbottom":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e2d\u0e22\u0e39\u0e48\u0e25\u0e48\u0e32\u0e07","image_align_texttop":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e2d\u0e22\u0e39\u0e48\u0e1a\u0e19","image_align_bottom":"\u0e25\u0e48\u0e32\u0e07","image_align_middle":"\u0e01\u0e25\u0e32\u0e07","image_align_top":"\u0e1a\u0e19","image_align_baseline":"\u0e40\u0e2a\u0e49\u0e19\u0e1e\u0e37\u0e49\u0e19","image_align":"\u0e15\u0e33\u0e41\u0e2b\u0e19\u0e48\u0e07\u0e08\u0e31\u0e14\u0e27\u0e32\u0e07","image_hspace":"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19","image_vspace":"\u0e23\u0e30\u0e22\u0e30\u0e2b\u0e48\u0e32\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07","image_dimensions":"\u0e02\u0e19\u0e32\u0e14","image_alt":"\u0e23\u0e32\u0e22\u0e25\u0e30\u0e2d\u0e35\u0e22\u0e14\u0e23\u0e39\u0e1b","image_list":"\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23\u0e23\u0e39\u0e1b","image_border":"\u0e01\u0e23\u0e2d\u0e1a","image_src":"URL \u0e23\u0e39\u0e1b","image_title":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e23\u0e39\u0e1b","charmap_title":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e15\u0e31\u0e27\u0e2d\u0e31\u0e01\u0e29\u0e23\u0e17\u0e35\u0e48\u0e01\u0e33\u0e2b\u0e19\u0e14\u0e40\u0e2d\u0e07","colorpicker_name":"\u0e0a\u0e37\u0e48\u0e2d:","colorpicker_color":"\u0e2a\u0e35:","colorpicker_named_title":"\u0e0a\u0e37\u0e48\u0e2d\u0e2a\u0e35","colorpicker_named_tab":"\u0e0a\u0e37\u0e48\u0e2d","colorpicker_palette_title":"\u0e08\u0e32\u0e19\u0e2a\u0e35","colorpicker_palette_tab":"\u0e08\u0e32\u0e19\u0e2a\u0e35","colorpicker_picker_title":"\u0e08\u0e32\u0e19\u0e2a\u0e35","colorpicker_picker_tab":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35","colorpicker_title":"\u0e40\u0e25\u0e37\u0e2d\u0e01\u0e2a\u0e35","code_wordwrap":"\u0e15\u0e31\u0e14\u0e04\u0e33","code_title":"\u0e41\u0e01\u0e49\u0e44\u0e02 HTML","anchor_name":"\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","anchor_title":"\u0e40\u0e1e\u0e34\u0e48\u0e21/\u0e41\u0e01\u0e49\u0e44\u0e02 \u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e25\u0e34\u0e49\u0e07\u0e04\u0e4c","about_loaded":"\u0e42\u0e2b\u0e25\u0e14\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19","about_version":"\u0e23\u0e38\u0e48\u0e19","about_author":"\u0e1c\u0e39\u0e49\u0e40\u0e02\u0e35\u0e22\u0e19","about_plugin":"\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19","about_plugins":"\u0e1b\u0e25\u0e31\u0e4a\u0e01\u0e2d\u0e34\u0e19","about_license":"\u0e25\u0e34\u0e02\u0e2a\u0e34\u0e17\u0e18\u0e34\u0e4c","about_help":"\u0e0a\u0e48\u0e27\u0e22\u0e40\u0e2b\u0e25\u0e37\u0e2d","about_general":"\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a\u0e40\u0e23\u0e32","about_title":"\u0e40\u0e01\u0e35\u0e48\u0e22\u0e27\u0e01\u0e31\u0e1a TinyMCE","charmap_usage":"Use left and right arrows to navigate.","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage","invalid_color_value":"Invalid color value"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tn.js
new file mode 100644
index 000000000..64961fdd0
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.advanced',{"underline_desc":"Sega-tselana (Ctrl+U)","italic_desc":"Tseketa (Ctrl+I)","bold_desc":"Bokima (Ctrl+B)",dd:"Thaloso ya Kaedi",dt:"Thaloso ya Theme ",samp:"Sampole ya khoudi",code:"khoudi",blockquote:"Blockquote",h6:"Sethogo 6",h5:"Sethogo 5",h4:"Sethogo 4",h3:"Sethogo 3",h2:"Sethogo 2",h1:"Sethogo 1",pre:"Fomatilwe",address:"Aterese",div:"Div",paragraph:"Pharakerafo",block:"Fomete ",fontdefault:"Lelwapa la mokwalo","font_size":"Bolekano jwa mokwalo","style_select":"Matlaela","more_colors":"Mebala e mentsi","toolbar_focus":"Tlolela kwa thulusong ya dibathene - Alt+Q, tlolela ko sebaakanying - Alt-Z, Tlolela kwa phatlheng ya elemente - Alt-X",newdocument:"A o netefatsa gore o batla go sutlha diteng tsotlhe",path:"Phatlha","clipboard_msg":"Kopa/Sega/Kgomaretsa ga e yo mo Mozila Firefox A o batla molaetsa ka lebaka le?","blockquote_desc":"Blockquote","help_desc":"Thuso","newdocument_desc":"Tokomente e Ntshwa","image_props_desc":"Ditlhagotshedimosetso tsa setswantsho","paste_desc":"Kgomaretsa","copy_desc":"Kopa","cut_desc":"Sega","anchor_desc":"Tsenya/Baakanya anchor","visualaid_desc":"Kgothakgotha melawana","charmap_desc":"Tsenya boitirelo jwa khareketa","backcolor_desc":"Thopha mmala wa kwa-morago ","forecolor_desc":"Thopha mmala wa mafoko","custom1_desc":"Ntsha kaedi ya boitirelo","removeformat_desc":"Ntsha Boalo","hr_desc":"Tsenya rula e robetseng","sup_desc":"Godimonyana","sub_desc":"Tlasenyana","code_desc":"Baakanya HTML Source","cleanup_desc":"Kolomaka khoudi e meragaraga ","image_desc":"Tsenay/ Baakanya setswantsho","unlink_desc":"Lomolola ","link_desc":"Tsenya/Baakanya lomaganya","redo_desc":"Dira-gape (Ctrl+Y)","undo_desc":"Dirolola(Ctrl+Z)","indent_desc":"Moteng","outdent_desc":"Kwantle","numlist_desc":"Tatelano e rulagantsweng","bullist_desc":"Tatelano e thakathakaneng","justifyfull_desc":"Beela go tletse","justifyright_desc":"Beela kwa mojeng","justifycenter_desc":"Beela fagare","justifyleft_desc":"Beela kwa Molemeng","striketrough_desc":"Sega-bogare","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tn_dlg.js
new file mode 100644
index 000000000..eabfa30c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"phatlha e Thamaletseng","image_dimensions":"Dimensions","image_alt":"Kaedi ya setswantsho","image_list":"Tatelano ya setswantsho","image_border":"Molelwane","image_src":"URL ya setswantsho","image_title":"Tsenay/ Baakanya setswantsho","charmap_title":"Tsenya boitirelo jwa khareketa","colorpicker_name":"Leina:","colorpicker_color":"Mmala","colorpicker_named_title":"Mebala e Teilweng","colorpicker_named_tab":"Teilweng","colorpicker_palette_title":"Mebala wa Palette","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Sethophi sa Mmala","colorpicker_picker_tab":"Sethophi","colorpicker_title":"Thopha mmala","code_wordwrap":"Phuthela lefoko","code_title":"Sebaakanyi sa HTML Source","anchor_name":"Leina la Anchor","anchor_title":"Tsenya/Baakanya anchor","about_loaded":"Dipolaka tse di pegilweng","about_version":"kgatiso","about_author":"Mokwadi","about_plugin":"Polaka","about_plugins":"Dipolaka","about_license":"setankana","about_help":"Thuso","about_general":"kaga","about_title":"kaga TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tr.js
new file mode 100644
index 000000000..e08a86bda
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.advanced',{"underline_desc":"Alt\u0131 \u00e7izili (Ctrl+U)","italic_desc":"\u0130talik (Ctrl+I)","bold_desc":"Kal\u0131n (Ctrl+B)",dd:"A\u00e7\u0131klama tan\u0131mlama",dt:"\u0130fade tan\u0131mlama ",samp:"\u00d6rnek kod",code:"Kod",blockquote:"Blok al\u0131nt\u0131",h6:"Ba\u015fl\u0131k 6",h5:"Ba\u015fl\u0131k 5",h4:"Ba\u015fl\u0131k 4",h3:"Ba\u015fl\u0131k 3",h2:"Ba\u015fl\u0131k 2",h1:"Ba\u015fl\u0131k 1",pre:"\u00d6nceden bi\u00e7imlendirilmi\u015f",address:"Adres",div:"Blok",paragraph:"Paragraf",block:"Bi\u00e7im",fontdefault:"Yaz\u0131 tipi","font_size":"Yaz\u0131 boyutu","style_select":"Stiller","more_colors":"Daha fazla renk","toolbar_focus":"Alt+Q ara\u00e7 d\u00fc\u011fmelerine ge\u00e7. Alt+Z: Edit\u00f6re ge\u00e7. Alt+X:Elementin yoluna ge\u00e7.",newdocument:"T\u00fcm i\u00e7eriklerleri temizlemek istedi\u011finizden emin misiniz?",path:"Yol","clipboard_msg":"Mozilla Firefox da Kes/Kopyala/Yap\u0131\u015ft\u0131r kullan\u0131lamaz. Bu konu hakk\u0131nda daha fazla bilgi almak ister misiniz?","blockquote_desc":"Blok al\u0131nt\u0131","help_desc":"Yard\u0131m","newdocument_desc":"Bo\u015f belge","image_props_desc":"Resim \u00f6zellikleri","paste_desc":"Yap\u0131\u015ft\u0131r","copy_desc":"Kopyala","cut_desc":"Kes","anchor_desc":"K\u00f6pr\u00fc ekle/d\u00fczenle","visualaid_desc":"K\u0131lavuz/g\u00f6r\u00fcnmez nesneleri a\u00e7/kapat.","charmap_desc":"\u00d6zel karakter ekle","backcolor_desc":"Arkaplan rengini se\u00e7","forecolor_desc":"Metin rengini se\u00e7","custom1_desc":"\u00d6zel a\u00e7\u0131klamalar burada","removeformat_desc":"Bi\u00e7imi temizle","hr_desc":"Yatay cetvel ekle","sup_desc":"\u00dcstsimge","sub_desc":"Altsimge","code_desc":"HTML Kayna\u011f\u0131n\u0131 D\u00fczenle","cleanup_desc":"Da\u011f\u0131n\u0131k kodu temizle","image_desc":"Resim ekle/d\u00fczenle","unlink_desc":"Ba\u011flant\u0131y\u0131 kald\u0131r","link_desc":"Ba\u011flant\u0131 ekle/d\u00fczenle","redo_desc":"Yinele (Ctrl+Y)","undo_desc":"Geri al (Ctrl+Z)","indent_desc":"Girintiyi art\u0131r","outdent_desc":"Girintiyi azalt","numlist_desc":"S\u0131ral\u0131 liste","bullist_desc":"S\u0131ras\u0131z liste","justifyfull_desc":"\u0130ki yana yasla","justifyright_desc":"Sa\u011fa hizala","justifycenter_desc":"Ortala","justifyleft_desc":"Sola hizala","striketrough_desc":"\u00dcst\u00fc \u00e7izili","help_shortcut":"Toolbar i\u00e7in ALT-F10 a bas\u0131n. Yard\u0131m i\u00e7in ALT-0 a bas\u0131n.","rich_text_area":"Zengin Metin Alan\u0131","shortcuts_desc":"Eri\u015filebilirlik Yard\u0131m\u0131",toolbar:"Toolbar","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tr_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tr_dlg.js
new file mode 100644
index 000000000..099414803
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tr_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.advanced_dlg',{"link_list":"Ba\u011flant\u0131 listesi","link_is_external":"Girdi\u011fiz URL d\u0131\u015f ba\u011flant\u0131 gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan http:// \u00f6nekinin eklenmesini ister misiniz?","link_is_email":"Girdi\u011finiz URL e-posta adresi gibi g\u00f6r\u00fcn\u00fcyor; gerekli olan mailto: \u00f6nekinin eklenmesini ister misiniz? prefix?","link_titlefield":"Ba\u015fl\u0131k","link_target_blank":"Ba\u011flant\u0131y\u0131 yeni pencerede a\u00e7","link_target_same":"Ba\u011flant\u0131y\u0131 ayn\u0131 pencerede a\u00e7","link_target":"Hedef","link_url":"Ba\u011flant\u0131 URL\'si","link_title":"Ba\u011flant\u0131 ekle/d\u00fczenle","image_align_right":"Sa\u011f","image_align_left":"Sol","image_align_textbottom":"Metin altta","image_align_texttop":"Metin \u00fcstte","image_align_bottom":"Alt","image_align_middle":"Orta","image_align_top":"\u00dcst","image_align_baseline":"Taban hizas\u0131","image_align":"Hizalama","image_hspace":"Yatay bo\u015fluk","image_vspace":"Dikey bo\u015fluk","image_dimensions":"Boyutlar","image_alt":"Resim a\u00e7\u0131klamas\u0131","image_list":"Resim listesi","image_border":"Kenarl\u0131k","image_src":"Resmin URL\'si","image_title":"Resim ekle/d\u00fczenle","charmap_title":"\u00d6zel karakter se\u00e7","colorpicker_name":"\u0130sim:","colorpicker_color":"Renk:","colorpicker_named_title":"Renk ad\u0131","colorpicker_named_tab":"Ad\u0131","colorpicker_palette_title":"Renk paleti","colorpicker_palette_tab":"Palet","colorpicker_picker_title":"Renk se\u00e7ici","colorpicker_picker_tab":"Se\u00e7ici","colorpicker_title":"Renk se\u00e7","code_wordwrap":"Kelimeleri birlikte tut","code_title":"HTML Kaynak Edit\u00f6r\u00fc","anchor_name":"K\u00f6pr\u00fc ad\u0131","anchor_title":"K\u00f6pr\u00fc ekle/d\u00fczenle","about_loaded":"Y\u00fckl\u00fc eklentiler","about_version":"Versiyon","about_author":"Yazar","about_plugin":"Eklenti","about_plugins":"Eklentiler","about_license":"Lisans","about_help":"Yard\u0131m","about_general":"Hakk\u0131nda","about_title":"TinyMCE hakk\u0131nda","charmap_usage":"Gezinmek i\u00e7in sa\u011f ve sol oklar\u0131 kullan\u0131n.","anchor_invalid":"L\u00fctfen ge\u00e7erli bir k\u00f6pr\u00fc ad\u0131 giriniz","accessibility_help":"Eri\u015febilirlik Yard\u0131m\u0131","accessibility_usage_title":"Genel Kullan\u0131m","invalid_color_value":"Ge\u00e7ersiz renk de\u011feri"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tt.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tt.js
new file mode 100644
index 000000000..97e48985e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.advanced',{"underline_desc":"\u5e95\u7dda (Ctrl+U)","italic_desc":"\u659c\u9ad4 (Ctrl+I)","bold_desc":"\u7c97\u9ad4 (Ctrl+B)",dd:"\u540d\u8a5e\u89e3\u91cb",dt:"\u540d\u8a5e\u5b9a\u7fa9",samp:"\u7a0b\u5f0f\u7bc4\u4f8b",code:"\u4ee3\u78bc",blockquote:"\u5f15\u7528",h6:"\u6a19\u984c 6",h5:"\u6a19\u984c 5",h4:"\u6a19\u984c 4",h3:"\u6a19\u984c 3",h2:"\u6a19\u984c 2",h1:"\u6a19\u984c 1",pre:"\u9810\u8a2d\u683c\u5f0f",address:"\u5730\u5740",div:"Div",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u9ad4","font_size":"\u5b57\u9ad4\u5927\u5c0f","style_select":"\u6a23\u5f0f","more_colors":"\u66f4\u591a\u9854\u8272","toolbar_focus":"\u5de5\u5177\u5217 - Alt+Q, \u7de8\u8f2f\u5668 - Alt-Z, \u5143\u4ef6\u8def\u5f91 - Alt-X",newdocument:"\u60a8\u78ba\u8a8d\u8981\u522a\u9664\u5168\u90e8\u5167\u5bb9\u55ce\uff1f",path:"\u8def\u5f91","clipboard_msg":"\u8907\u88fd\u3001\u526a\u4e0b\u548c\u8cbc\u4e0a\u529f\u80fd\u5728Mozilla \u548c Firefox\u4e2d\u7121\u6cd5\u4f7f\u7528","blockquote_desc":"\u5f15\u7528","help_desc":"\u8aaa\u660e","newdocument_desc":"\u65b0\u589e\u6587\u4ef6","image_props_desc":"\u5716\u7247\u5c6c\u6027","paste_desc":"\u8cbc\u4e0a (Ctrl+V)","copy_desc":"\u8907\u88fd (Ctrl+C)","cut_desc":"\u526a\u4e0b (Ctrl+X)","anchor_desc":"\u63d2\u5165/\u7de8\u8f2f \u9328\u9ede","visualaid_desc":"\u7db2\u683c/\u96b1\u85cf\u5143\u4ef6\uff1f","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u865f","backcolor_desc":"\u9078\u64c7\u80cc\u666f\u9854\u8272","forecolor_desc":"\u9078\u64c7\u6587\u5b57\u9854\u8272","custom1_desc":"\u5728\u6b64\u8f38\u5165\u60a8\u7684\u81ea\u8a02\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u6a23\u5f0f","hr_desc":"\u63d2\u5165\u6c34\u5e73\u7dda","sup_desc":"\u4e0a\u6a19","sub_desc":"\u4e0b\u6a19","code_desc":"\u7de8\u8f2f HTML \u539f\u59cb\u7a0b\u5f0f\u78bc","cleanup_desc":"\u6e05\u9664\u5167\u5bb9","image_desc":"\u63d2\u5165/\u7de8\u8f2f \u5716\u7247","unlink_desc":"\u53d6\u6d88\u9023\u7d50","link_desc":"\u63d2\u5165/\u7de8\u8f2f \u9023\u7d50","redo_desc":"\u91cd\u4f5c\u8b8a\u66f4 (Ctrl+Y)","undo_desc":"\u53d6\u6d88\u8b8a\u66f4 (Ctrl+Z)","indent_desc":"\u589e\u52a0\u7e2e\u6392","outdent_desc":"\u6e1b\u5c11\u7e2e\u6392","numlist_desc":"\u7de8\u865f","bullist_desc":"\u6e05\u55ae\u7b26\u865f","justifyfull_desc":"\u5169\u7aef\u5c0d\u9f4a","justifyright_desc":"\u9760\u53f3\u5c0d\u9f4a","justifycenter_desc":"\u7f6e\u4e2d","justifyleft_desc":"\u9760\u5de6\u5c0d\u9f4a","striketrough_desc":"\u4e2d\u5283\u7dda","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tt_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tt_dlg.js
new file mode 100644
index 000000000..32ea9be51
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tt_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.advanced_dlg',{"link_list":"\u9023\u7d50\u6e05\u55ae","link_is_external":"\u60a8\u8f38\u5165\u7684\u7db2\u5740\u61c9\u8a72\u662f\u4e00\u500b\u5916\u90e8\u9023\u7d50\uff0c\u662f\u5426\u9700\u8981\u5728\u7db2\u5740\u524d\u52a0\u4e0a http:// ?","link_is_email":"\u60a8\u8f38\u5165\u7684\u61c9\u8a72\u662f\u4e00\u500b\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u7db2\u5740\u524d\u52a0\u4e0a mailto: ? ","link_titlefield":"\u6a19\u984c","link_target_blank":"\u65b0\u7a97\u53e3\u6253\u958b","link_target_same":"\u7576\u524d\u7a97\u53e3\u6253\u958b","link_target":"\u76ee\u6a19","link_url":"\u9023\u7d50\u7db2\u5740","link_title":"\u63d2\u5165/\u7de8\u8f2f \u9023\u7d50","image_align_right":"\u9760\u53f3\u5c0d\u9f4a","image_align_left":"\u9760\u5de6\u5c0d\u9f4a","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u5e95\u90e8\u5c0d\u9f4a","image_align_middle":"\u4e2d\u90e8\u5c0d\u9f4a","image_align_top":"\u9802\u90e8\u5c0d\u9f4a","image_align_baseline":"\u57fa\u7dda","image_align":"\u5c0d\u9f4a\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u9593\u8ddd","image_vspace":"\u5782\u76f4\u9593\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u5716\u7247\u8aaa\u660e","image_list":"\u5716\u7247\u6e05\u55ae","image_border":"\u908a\u6846","image_src":"\u5716\u7247\u7db2\u5740","image_title":"\u63d2\u5165/\u7de8\u8f2f \u5716\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u865f","colorpicker_name":"\u8272\u540d:","colorpicker_color":"\u9854\u8272:","colorpicker_named_title":"\u9810\u8a2d\u7684\u9854\u8272","colorpicker_named_tab":"\u9810\u8a2d\u503c","colorpicker_palette_title":"\u8272\u8b5c\u9854\u8272","colorpicker_palette_tab":"\u8272\u8b5c","colorpicker_picker_title":"\u53d6\u8272\u5668","colorpicker_picker_tab":"\u9078\u64c7\u5668","colorpicker_title":"\u9078\u64c7\u9854\u8272","code_wordwrap":"\u81ea\u52d5\u63db\u884c","code_title":"HTML \u539f\u59cb\u7a0b\u5f0f\u78bc\u7de8\u8f2f\u5668","anchor_name":"\u9328\u9ede\u540d\u7a31","anchor_title":"\u63d2\u5165/\u7de8\u8f2f \u9328\u9ede","about_loaded":"\u5df2\u8f09\u5165\u7684\u5916\u639b\u7a0b\u5f0f","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u5916\u639b\u7a0b\u5f0f","about_plugins":"\u5168\u90e8\u5916\u639b\u7a0b\u5f0f","about_license":"\u6388\u6b0a","about_help":"\u8aaa\u660e","about_general":"\u95dc\u65bc","about_title":"\u95dc\u65bc TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tw.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tw.js
new file mode 100644
index 000000000..1ceb6dcbb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.advanced',{"underline_desc":"\u5e95\u7dda (Ctrl+U)","italic_desc":"\u659c\u9ad4 (Ctrl+I)","bold_desc":"\u7c97\u9ad4 (Ctrl+B)",dd:"\u540d\u8a5e\u89e3\u91cb",dt:"\u540d\u8a5e\u5b9a\u7fa9",samp:"\u539f\u59cb\u78bc\u7bc4\u4f8b",code:"\u539f\u59cb\u78bc",blockquote:"\u5f15\u7528",h6:"\u6a19\u984c6",h5:"\u6a19\u984c5",h4:"\u6a19\u984c4",h3:"\u6a19\u984c3",h2:"\u6a19\u984c2",h1:"\u6a19\u984c1",pre:"\u9810\u8a2d\u5b9a\u7fa9\u683c\u5f0f",address:"\u5730\u5740",div:"DIV \u968e\u5c64",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u9ad4","font_size":"\u5b57\u578b\u5927\u5c0f","style_select":"\u6a23\u5f0f","link_delta_height":"60","link_delta_width":"40","more_colors":"\u66f4\u591a\u984f\u8272...","toolbar_focus":"\u5b9a\u4f4d\u5230\u5de5\u5177\u5217\uff1aAlt+Q\uff0c\u5b9a\u4f4d\u5230\u7de8\u8f2f\u6846\uff1aAlt+Z\u5b9a\u4f4d\u5230\u5de5\u5177\u5217- Alt+Q\uff0c\u5b9a\u4f4d\u5230\u5143\u7d20\u76ee\u9304\uff1aAlt+X\u3002",newdocument:"\u78ba\u8a8d\u6e05\u9664\u76ee\u524d\u7de8\u8f2f\u7684\u5167\u5bb9\u55ce\uff1f",path:"\u5143\u7d20\u76ee\u9304","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u60a8\u7684\u700f\u89bd\u5668\u4e0d\u652f\u63f4\u8907\u88fd\u529f\u80fd\u3002","blockquote_desc":"\u5f15\u7528","help_desc":"\u8aaa\u660e","newdocument_desc":"\u65b0\u5efa\u6a94\u6848","image_props_desc":"\u5716\u7247\u5c6c\u6027","paste_desc":"\u8cbc\u4e0a (Ctrl+V)","copy_desc":"\u8907\u88fd (Ctrl+C)","cut_desc":"\u526a\u4e0b (Ctrl+X)","anchor_desc":"\u63d2\u5165/\u7de8\u8f2f\u66f8\u7c64","visualaid_desc":"\u986f\u793a/\u96b1\u85cf\u76ee\u6a19","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u865f","backcolor_desc":"\u80cc\u666f\u984f\u8272","forecolor_desc":"\u6587\u5b57\u984f\u8272","custom1_desc":"\u5728\u6b64\u8f38\u5165\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u683c\u5f0f","hr_desc":"\u6c34\u5e73\u7dda","sup_desc":"\u4e0a\u6a19","sub_desc":"\u4e0b\u6a19","code_desc":"Html\u539f\u59cb\u78bc\u6a21\u5f0f","cleanup_desc":"\u6e05\u9664\u683c\u5f0f","image_desc":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","unlink_desc":"\u522a\u9664\u8d85\u9023\u7d50","link_desc":"\u63d2\u5165/\u7de8\u8f2f\u8d85\u9023\u7d50","redo_desc":"\u53d6\u6d88\u5fa9\u539f (Ctrl+Y)","undo_desc":"\u5fa9\u539f (Ctrl+Z)","indent_desc":"\u589e\u52a0\u7e2e\u6392","outdent_desc":"\u6e1b\u5c11\u7e2e\u6392","numlist_desc":"\u7de8\u865f\u5217\u8868","bullist_desc":"\u9805\u76ee\u5217\u8868","justifyfull_desc":"\u5de6\u53f3\u5c0d\u9f4a","justifyright_desc":"\u9760\u53f3\u5c0d\u9f4a","justifycenter_desc":"\u7f6e\u4e2d\u5c0d\u9f4a","justifyleft_desc":"\u9760\u5de6\u5c0d\u9f4a","striketrough_desc":"\u522a\u9664\u7dda","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tw_dlg.js
new file mode 100644
index 000000000..15de48afe
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.advanced_dlg',{"link_list":"\u8d85\u9023\u7d50\u6e05\u55ae","link_is_external":"\u60a8\u8f38\u5165\u7684 URL \u662f\u4e00\u500b\u5916\u90e8\u8d85\u9023\u7d50\uff0c\u662f\u5426\u8981\u52a0\u4e0a http:// \uff1f","link_is_email":"\u60a8\u8f38\u5165\u7684\u662f\u96fb\u5b50\u90f5\u4ef6\u5730\u5740,\u662f\u5426\u9700\u8981\u52a0 mailto:\uff1f","link_titlefield":"\u6a19\u984c","link_target_blank":"\u65b0\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","link_target_same":"\u76ee\u524d\u8996\u7a97\u6253\u958b\u8d85\u9023\u7d50","link_target":"\u76ee\u6a19","link_url":"\u8d85\u9023\u7d50URL","link_title":"\u63d2\u5165/\u7de8\u8f2f\u8d85\u9023\u7d50","image_align_right":"\u9760\u53f3","image_align_left":"\u9760\u5de6","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u9760\u4e0b","image_align_middle":"\u7f6e\u4e2d","image_align_top":"\u9760\u4e0a","image_align_baseline":"\u57fa\u6e96\u7dda","image_align":"\u5c0d\u9f4a\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u9593\u8ddd","image_vspace":"\u5782\u76f4\u9593\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u5716\u7247\u8aaa\u660e","image_list":"\u5716\u7247\u6e05\u55ae","image_border":"\u908a\u6846","image_src":"\u5716\u7247URL","image_title":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u865f","colorpicker_name":"\u540d\u7a31\uff1a","colorpicker_color":"\u984f\u8272\uff1a","colorpicker_named_title":"\u5e38\u7528\u984f\u8272","colorpicker_named_tab":"\u5e38\u7528\u984f\u8272","colorpicker_palette_title":"WEB\u984f\u8272","colorpicker_palette_tab":"\u5b89\u5168\u8272","colorpicker_picker_title":"\u8abf\u8272\u76e4","colorpicker_picker_tab":"\u8abf\u8272\u76e4","colorpicker_title":"\u9078\u64c7\u984f\u8272","code_wordwrap":"\u81ea\u52d5\u63db\u884c","code_title":"\u539f\u59cb\u78bc\u6a19\u984c","anchor_name":"\u66f8\u7c64\u540d\u7a31","anchor_title":"\u63d2\u5165/\u7de8\u8f2f\u66f8\u7c64","about_loaded":"\u5df2\u555f\u7528\u7684\u5916\u639b\u7a0b\u5f0f","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u5916\u639b\u7a0b\u5f0f","about_plugins":"\u5916\u639b\u7a0b\u5f0f","about_license":"\u6388\u6b0a","about_help":"\u8aaa\u660e","about_general":"\u95dc\u65bc","about_title":"\u95dc\u65bc TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/uk.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/uk.js
new file mode 100644
index 000000000..9988c60fa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/uk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.advanced',{"underline_desc":"\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u0416\u0438\u0440\u043d\u0438\u0439 (Ctrl+B)",dd:"\u0414\u043e\u0432\u0456\u0434\u043d\u0438\u043a, \u043e\u043f\u0438\u0441 ",dt:"\u0414\u043e\u0432\u0456\u0434\u043d\u0438\u043a, \u0442\u0435\u0440\u043c\u0456\u043d ",samp:"\u041f\u0440\u0438\u043a\u043b\u0430\u0434 \u043a\u043e\u0434\u0443",code:"\u041a\u043e\u0434",blockquote:"\u0426\u0438\u0442\u0430\u0442\u0430",h6:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 6",h5:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 5",h4:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 4",h3:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 3",h2:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 2",h1:"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a 1",pre:"\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432\u0430\u043d\u0438\u0439",address:"\u0421\u0442\u0438\u043b\u044c \u0430\u0434\u0440\u0435\u0441\u0438",div:"Div",paragraph:"\u0410\u0431\u0437\u0430\u0446",block:"\u0424\u043e\u0440\u043c\u0430\u0442",fontdefault:"\u0428\u0440\u0438\u0444\u0442","font_size":"\u0420\u043e\u0437\u043c\u0456\u0440 \u0448\u0440\u0438\u0444\u0442\u0443","style_select":"\u0421\u0442\u0438\u043b\u0456","more_colors":"\u0411\u0456\u043b\u044c\u0448\u0435 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432","toolbar_focus":"\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u044c \u043a\u043d\u043e\u043f\u043e\u043a - Alt+Q, \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0443 - Alt-Z, \u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u0448\u043b\u044f\u0445\u0443 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0443 - Alt-X",newdocument:"\u0412\u0438 \u0432\u043f\u0435\u0432\u043d\u0435\u043d\u0456, \u0449\u043e \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0441\u0435 \u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438?",path:"\u0428\u043b\u044f\u0445","clipboard_msg":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438/\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438/\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456 \u0432 Mozilla \u0438 Firefox.\n\u0412\u0430\u043c \u0446\u0456\u043a\u0430\u0432\u0430 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f \u043f\u0440\u043e \u0446\u0435?","blockquote_desc":"\u0426\u0438\u0442\u0430\u0442\u0430","help_desc":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430","newdocument_desc":"\u041d\u043e\u0432\u0438\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442","image_props_desc":"\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","paste_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438","copy_desc":"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438","cut_desc":"\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438","anchor_desc":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u044f\u043a\u0456\u0440","visualaid_desc":"\u041f\u0435\u0440\u0435\u043c\u043a\u043d\u0443\u0442\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0456/\u043f\u0440\u0438\u0445\u043e\u0432\u0430\u043d\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438","charmap_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b","backcolor_desc":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443","forecolor_desc":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043a\u043e\u043b\u0456\u0440 \u0442\u0435\u043a\u0441\u0442\u0443","custom1_desc":"\u0412\u0430\u0448 \u0434\u043e\u0432\u0456\u043b\u044c\u043d\u0438\u0439 \u043e\u043f\u0438\u0441 \u0442\u0443\u0442","removeformat_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0443\u0432\u0430\u043d\u043d\u044f","hr_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0438\u043a","sup_desc":"\u0412\u0435\u0440\u0445\u043d\u0456\u0439 \u0456\u043d\u0434\u0435\u043a\u0441","sub_desc":"\u041d\u0438\u0436\u043d\u0456\u0439 \u0456\u043d\u0434\u0435\u043a\u0441","code_desc":"\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 HTML \u043a\u043e\u0434","cleanup_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0437\u0430\u0439\u0432\u0438\u0439 \u043a\u043e\u0434","image_desc":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","unlink_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","link_desc":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","redo_desc":"\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 (Ctrl+Y)","undo_desc":"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438 (Ctrl+Z)","indent_desc":"\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f","outdent_desc":"\u0417\u043c\u0435\u043d\u0448\u0442\u0438\u0442\u0438 \u0432\u0456\u0434\u0441\u0442\u0443\u043f","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041d\u0435\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","justifyfull_desc":"\u041f\u043e \u0448\u0438\u0440\u0438\u043d\u0456","justifyright_desc":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","justifycenter_desc":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","justifyleft_desc":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","striketrough_desc":"\u0417\u0430\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","help_shortcut":"\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT F10 \u0434\u043b\u044f \u0442\u0443\u043b\u0431\u0430\u0440\u0443. \u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c ALT 0 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u0434\u043e\u043f\u043e\u043c\u043e\u0433\u0438","rich_text_area":"\u0412\u0456\u0437\u0443\u0430\u043b\u044c\u043d\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440","shortcuts_desc":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430 \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0456",toolbar:"\u0422\u0443\u043b\u0431\u0430\u0440","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/uk_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/uk_dlg.js
new file mode 100644
index 000000000..89e003142
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/uk_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.advanced_dlg',{"link_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u044c","link_is_external":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0437\u043e\u0432\u043d\u0456\u0448\u043d\u0454 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 http://?","link_is_email":"\u0412\u0432\u0435\u0434\u0435\u043d\u0435 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f \u0441\u0445\u043e\u0436\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0443 \u0435\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0457 \u043f\u043e\u0448\u0442\u0438, \u0432\u0438 \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0434\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u0438\u0439 \u043f\u0440\u0435\u0444\u0456\u043a\u0441 mailto:?","link_titlefield":"\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a","link_target_blank":"\u043d\u043e\u0432\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456","link_target_same":"\u0446\u044c\u043e\u043c\u0443 \u0436 \u0432\u0456\u043a\u043d\u0456","link_target":"\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0432","link_url":"\u0410\u0434\u0440\u0435\u0441\u0430 ","link_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f","image_align_right":"\u041f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_left":"\u041f\u043e \u043b\u0456\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_textbottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","image_align_texttop":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0442\u0435\u043a\u0441\u0442\u0443","image_align_bottom":"\u041f\u043e \u043d\u0438\u0436\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_middle":"\u041f\u043e \u0446\u0435\u043d\u0442\u0440\u0443","image_align_top":"\u041f\u043e \u0432\u0435\u0440\u0445\u043d\u044c\u043e\u043c\u0443 \u043a\u0440\u0430\u044e","image_align_baseline":"\u041f\u043e \u0431\u0430\u0437\u043e\u0432\u0456\u0439 \u043b\u0456\u043d\u0456\u0457","image_align":"\u0412\u0438\u0440\u0456\u0432\u043d\u044e\u0432\u0430\u043d\u043d\u044f","image_hspace":"\u0413\u043e\u0440\u0438\u0437. \u0432\u0456\u0434\u0441\u0442\u0443\u043f","image_vspace":"\u0412\u0435\u0440\u0442. \u0432\u0456\u0434\u0441\u0442\u0443\u043f","image_dimensions":"\u0420\u043e\u0437\u043c\u0456\u0440\u0438","image_alt":"\u041e\u043f\u0438\u0441","image_list":"\u0421\u043f\u0438\u0441\u043e\u043a \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044c","image_border":"\u0420\u0430\u043c\u043a\u0430","image_src":"\u0410\u0434\u0440\u0435\u0441\u0430","image_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f","charmap_title":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0434\u043e\u0432\u0456\u043b\u044c\u043d\u0438\u0439 \u0441\u0438\u043c\u0432\u043e\u043b","colorpicker_name":"\u041d\u0430\u0437\u0432\u0430:","colorpicker_color":"\u041a\u043e\u043b\u0456\u0440:","colorpicker_named_title":"\u0417\u0430 \u043d\u0430\u0437\u0432\u043e\u044e","colorpicker_named_tab":"\u0417\u0430 \u043d\u0430\u0437\u0432\u043e\u044e","colorpicker_palette_title":"\u041f\u0430\u043b\u0456\u0442\u0440\u0430 \u043a\u043e\u043b\u044c\u043e\u0440\u0456\u0432","colorpicker_palette_tab":"\u041f\u0430\u043b\u0456\u0442\u0440\u0430","colorpicker_picker_title":"\u041f\u0456\u043f\u0435\u0442\u043a\u0430 \u043a\u043e\u043b\u044c\u043e\u0440\u0443","colorpicker_picker_tab":"\u041f\u0456\u043f\u0435\u0442\u043a\u0430","colorpicker_title":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043a\u043e\u043b\u0456\u0440","code_wordwrap":"\u041f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0438 \u0441\u043b\u043e\u0432\u0430","code_title":"\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 HTML \u043a\u043e\u0434\u0443","anchor_name":"\u041d\u0430\u0437\u0432\u0430 \u044f\u043a\u043e\u0440\u044f","anchor_title":"\u0414\u043e\u0434\u0430\u0442\u0438/\u0437\u043c\u0456\u043d\u0438\u0442\u0438 \u044f\u043a\u0456\u0440","about_loaded":"\u0417\u0430\u0432\u0430\u043d\u0442\u0430\u0436\u0435\u043d\u0456 \u0434\u043e\u0434\u0430\u0442\u043a\u0438","about_version":"\u0412\u0435\u0440\u0441\u0456\u044f","about_author":"\u0410\u0432\u0442\u043e\u0440","about_plugin":"\u0414\u043e\u0434\u0430\u0442\u043e\u043a","about_plugins":"\u0414\u043e\u0434\u0430\u0442\u043a\u0438","about_license":"\u041b\u0456\u0446\u0435\u043d\u0437\u0456\u044f","about_help":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430","about_general":"\u041f\u0440\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442...","about_title":"\u041f\u0440\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442 TinyMCE","charmap_usage":"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0439\u0442\u0435 \u0441\u0442\u0440\u0456\u043b\u043a\u0438 \u0432\u043b\u0456\u0432\u043e \u0442\u0430 \u0432\u043f\u0440\u0430\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0432\u0456\u0433\u0430\u0446\u0456\u0457","anchor_invalid":"\u0412\u0432\u0435\u0434\u0456\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0435 \u0456\u043c\'\u044f \u0434\u043b\u044f \u044f\u043a\u0456\u0440\u0430.","accessibility_help":"\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430 \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0456","accessibility_usage_title":"\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f","invalid_color_value":"\u041d\u0435\u043a\u043e\u0440\u0435\u043a\u0442\u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043a\u043e\u043b\u044c\u043e\u0440\u0443"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ur.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ur.js
new file mode 100644
index 000000000..a5d96403d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ur.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.advanced',{"underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)",dd:"Definition description",dt:"Definition term ",samp:"Code sample",code:"\u06a9\u0648\u0688",blockquote:"\u0628\u0644\u0627\u06a9 \u06a9\u0648\u0679",h6:"\u06c1\u06cc\u0688\u0646\u06af \u0634\u0634\u0645",h5:"\u06c1\u06cc\u0688\u0646\u06af \u067e\u0646\u062c\u0645",h4:"\u06c1\u06cc\u0688\u0646\u06af \u0686\u06c1\u0627\u0631\u0645",h3:"\u06c1\u06cc\u0688\u0646\u06af \u0633\u0648\u0645",h2:"\u06c1\u06cc\u0688\u0646\u06af \u062f\u0648\u0645",h1:"\u06c1\u06cc\u0688\u0646\u06af \u0627\u0648\u0644",pre:"\u067e\u0631\u06cc \u0641\u0627\u0631\u0645\u06cc\u0679\u0688",address:"\u0627\u06cc\u0688\u0631\u06cc\u0633",div:"Div",paragraph:"Paragraph",block:"Format",fontdefault:"Font family","font_size":"Font size","style_select":"Styles","more_colors":"More colors","toolbar_focus":"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",newdocument:"Are you sure you want clear all contents?",path:"Path","clipboard_msg":"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?","blockquote_desc":"Blockquote","help_desc":"Help","newdocument_desc":"New document","image_props_desc":"Image properties","paste_desc":"Paste","copy_desc":"Copy","cut_desc":"Cut","anchor_desc":"Insert/edit anchor","visualaid_desc":"Toggle guidelines/invisible elements","charmap_desc":"Insert custom character","backcolor_desc":"Select background color","forecolor_desc":"Select text color","custom1_desc":"Your custom description here","removeformat_desc":"Remove formatting","hr_desc":"Insert horizontal ruler","sup_desc":"Superscript","sub_desc":"Subscript","code_desc":"Edit HTML Source","cleanup_desc":"Cleanup messy code","image_desc":"Insert/edit image","unlink_desc":"Unlink","link_desc":"Insert/edit link","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","indent_desc":"Indent","outdent_desc":"Outdent","numlist_desc":"Ordered list","bullist_desc":"Unordered list","justifyfull_desc":"Align full","justifyright_desc":"Align right","justifycenter_desc":"Align center","justifyleft_desc":"Align left","striketrough_desc":"Strikethrough","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ur_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ur_dlg.js
new file mode 100644
index 000000000..f46813b6d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/ur_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.advanced_dlg',{"link_list":"Link list","link_is_external":"The URL you entered seems to external link, do you want to add the required http:// prefix?","link_is_email":"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?","link_titlefield":"Title","link_target_blank":"Open link in a new window","link_target_same":"Open link in the same window","link_target":"Target","link_url":"Link URL","link_title":"Insert/edit link","image_align_right":"Right","image_align_left":"Left","image_align_textbottom":"Text bottom","image_align_texttop":"Text top","image_align_bottom":"Bottom","image_align_middle":"Middle","image_align_top":"Top","image_align_baseline":"Baseline","image_align":"Alignment","image_hspace":"Horizontal space","image_vspace":"Vertical space","image_dimensions":"Dimensions","image_alt":"Image description","image_list":"Image list","image_border":"Border","image_src":"Image URL","image_title":"Insert/edit image","charmap_title":"Select custom character","colorpicker_name":"Name:","colorpicker_color":"Color:","colorpicker_named_title":"Named colors","colorpicker_named_tab":"Named","colorpicker_palette_title":"Palette colors","colorpicker_palette_tab":"Palette","colorpicker_picker_title":"Color picker","colorpicker_picker_tab":"Picker","colorpicker_title":"Select a color","code_wordwrap":"Word wrap","code_title":"HTML Source Editor","anchor_name":"Anchor name","anchor_title":"Insert/edit anchor","about_loaded":"Loaded plugins","about_version":"Version","about_author":"Author","about_plugin":"Plugin","about_plugins":"Plugins","about_license":"License","about_help":"Help","about_general":"About","about_title":"About TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/vi.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/vi.js
new file mode 100644
index 000000000..6f80fc9e7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/vi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.advanced',{"underline_desc":"G\u1ea1ch ch\u00e2n (Ctrl+U)","italic_desc":"Ch\u1eef nghi\u00eang (Ctrl+I)","bold_desc":"Ch\u1eef \u0111\u1eadm (Ctrl+B)",dd:"Th\u1ebb M\u00f4 t\u1ea3 \u0111\u1ecbnh ngh\u0129a",dt:"Th\u1ebb \u0110i\u1ec1u kho\u1ea3n \u0111\u1ecbnh ngh\u0129a ",samp:"Th\u1ebb M\u00e3 v\u00ed d\u1ee5",code:"Th\u1ebb M\u00e3",blockquote:"Th\u1ebb Tr\u00edch d\u1eabn",h6:"Th\u1ebb Heading 6",h5:"Th\u1ebb Heading 5",h4:"Th\u1ebb Heading 4",h3:"Th\u1ebb Heading 3",h2:"Th\u1ebb Heading 2",h1:"Th\u1ebb Heading 1",pre:"Th\u1ebb Ti\u1ec1n \u0111\u1ecbnh d\u1ea1ng",address:"Th\u1ebb \u0110\u1ecba ch\u1ec9",div:"Th\u1ebb",paragraph:"\u0110o\u1ea1n",block:"\u0110\u1ecbnh d\u1ea1ng",fontdefault:"T\u00ean font ch\u1eef","font_size":"K\u00edch th\u01b0\u1edbc font","style_select":"Ki\u1ec3u","more_colors":"Th\u00eam m\u00e0u","toolbar_focus":"Nh\u1ea3y t\u1edbi c\u00e1c n\u00fat c\u00f4ng c\u1ee5 - Alt+Q, T\u1edbi tr\u00ecnh so\u1ea1n th\u1ea3o - Alt-Z, T\u1edbi \u0111\u01b0\u1eddng d\u1eabn c\u00e1c ph\u1ea7n t\u1eed - Alt-X",newdocument:"B\u1ea1n c\u00f3 ch\u1eafc ch\u1eafn mu\u1ed1n x\u00f3a t\u1ea5t c\u1ea3 n\u1ed9i dung?",path:"\u0110\u01b0\u1eddng d\u1eabn","clipboard_msg":"Sao ch\u00e9p/C\u1eaft/D\u00e1n kh\u00f4ng c\u00f3 s\u1eb5n trong Mozilla v\u00e0 Firefox.\n\t\t\tB\u1ea1n c\u00f3 mu\u1ed1n bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 v\u1ea5n \u0111\u1ec1 n\u00e0y?","blockquote_desc":"Blockquote","help_desc":"Tr\u1ee3 gi\u00fap","newdocument_desc":"V\u0103n b\u1ea3n m\u1edbi","image_props_desc":"Thu\u1ed9c t\u00ednh \u1ea3nh","paste_desc":"D\u00e1n","copy_desc":"Sao ch\u00e9p","cut_desc":"C\u1eaft","anchor_desc":"Ch\u00e8n/s\u1eeda m\u1ecf neo","visualaid_desc":"\u0110\u1ea3o c\u00e1c th\u00e0nh ph\u1ea7n h\u01b0\u1edbng d\u1eabn ho\u1eb7c \u1ea9n","charmap_desc":"Ch\u00e8n k\u00fd t\u1ef1 t\u00f9y bi\u1ebfn","backcolor_desc":"Ch\u1ecdn m\u00e0u n\u1ec1n","forecolor_desc":"Ch\u1ecdn m\u00e0u ch\u1eef","custom1_desc":"M\u00f4 t\u1ea3 t\u00f9y bi\u1ebfn c\u1ee7a b\u1ea1n \u1edf \u0111\u00e2y","removeformat_desc":"Lo\u1ea1i b\u1ecf \u0111\u1ecbnh d\u1ea1ng","hr_desc":"Ch\u00e8n th\u01b0\u1edbc ngang","sup_desc":"Ch\u1ec9 s\u1ed1 b\u00ean tr\u00ean","sub_desc":"Ch\u1ec9 s\u1ed1 d\u01b0\u1edbi d\u00f2ng","code_desc":"S\u1eeda m\u00e3 HTML","cleanup_desc":"D\u1ecdn d\u1eb9p m\u00e3 l\u1ed9n x\u1ed9n","image_desc":"Ch\u00e8n/s\u1eeda \u1ea3nh","unlink_desc":"X\u00f3a Li\u00ean k\u1ebft","link_desc":"Th\u00eam/S\u1eeda Li\u00ean k\u1ebft","redo_desc":"Ti\u1ebfn t\u1edbi (Ctrl+Y)","undo_desc":"Tr\u1edf v\u1ec1 (Ctrl+Z)","indent_desc":"Th\u1ee5t \u0111\u1ea7u d\u00f2ng","outdent_desc":"V\u1ec1 \u0111\u1ea7u d\u00f2ng","numlist_desc":"Danh s\u00e1ch c\u00f3 ch\u1ec9 s\u1ed1","bullist_desc":"Danh s\u00e1ch","justifyfull_desc":"Canh l\u1ec1 \u0111\u1ec1u","justifyright_desc":"Canh l\u1ec1 ph\u1ea3i","justifycenter_desc":"Canh gi\u1eefa","justifyleft_desc":"Canh l\u1ec1 tr\u00e1i","striketrough_desc":"G\u1ea1ch ngang","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/vi_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/vi_dlg.js
new file mode 100644
index 000000000..3a36071ab
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/vi_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.advanced_dlg',{"link_list":"Danh s\u00e1ch li\u00ean k\u1ebft","link_is_external":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t li\u00ean k\u1ebft ngo\u00e0i, b\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 http://?","link_is_email":"URL b\u1ea1n \u0111\u00e3 nh\u1eadp c\u00f3 v\u1ebb l\u00e0 m\u1ed9t \u0111\u1ecba ch\u1ec9 \u0111i\u1ec7n th\u01b0, B\u1ea1n c\u00f3 mu\u1ed1n th\u00eam ti\u1ec1n t\u1ed1 mailto?","link_titlefield":"Ti\u00eau \u0111\u1ec1","link_target_blank":"M\u1edf li\u00ean k\u1ebft trong c\u1eeda s\u1ed5 m\u1edbi","link_target_same":"M\u1edf li\u00ean k\u1ebft trong c\u00f9ng c\u1eeda s\u1ed5","link_target":"\u0110\u00edch","link_url":"URL Li\u00ean k\u1ebft","link_title":"Th\u00eam/S\u1eeda Li\u00ean k\u1ebft","image_align_right":"Ph\u1ea3i","image_align_left":"Tr\u00e1i","image_align_textbottom":"V\u0103n b\u1ea3n d\u01b0\u1edbi","image_align_texttop":"V\u0103n b\u1ea3n tr\u00ea","image_align_bottom":"D\u01b0\u1edbi c\u00f9ng","image_align_middle":"Gi\u1eefa","image_align_top":"Tr\u00ean c\u00f9ng","image_align_baseline":"\u0110\u01b0\u1eddng c\u01a1 s\u1edf","image_align":"Canh l\u1ec1n","image_hspace":"Kho\u1ea3ng c\u00e1ch ngang","image_vspace":"Kho\u1ea3ng c\u00e1ch d\u1ecdc","image_dimensions":"K\u00edch th\u01b0\u1edbng","image_alt":"M\u00f4 t\u1ea3 \u1ea3nh","image_list":"Danh s\u00e1ch \u1ea3nh","image_border":"Vi\u1ec1n","image_src":"URL \u1ea3nh","image_title":"Ch\u00e8n/s\u1eeda \u1ea3nh","charmap_title":"Ch\u1ecdn k\u00fd t\u1ef1 t\u00f9y bi\u1ebfn","colorpicker_name":"T\u00ean:","colorpicker_color":"M\u00e0u:","colorpicker_named_title":"M\u00e0u \u0111\u00e3 \u0111\u1eb7t t\u00ean","colorpicker_named_tab":"T\u00ean","colorpicker_palette_title":"B\u1ea3ng m\u00e0u","colorpicker_palette_tab":"B\u1ea3ng m\u00e0u","colorpicker_picker_title":"B\u1ed9 ch\u1ecdn m\u00e0u","colorpicker_picker_tab":"B\u1ed9 ch\u1ecdn","colorpicker_title":"Ch\u1ecdn m\u1ed9t m\u00e0u","code_wordwrap":"Xu\u1ed1ng d\u00f2ng t\u1ef1 \u0111\u1ed9ng","code_title":"Tr\u00ecnh so\u1ea1n th\u1ea3o m\u00e3 ngu\u1ed3n HTML","anchor_name":"T\u00ean m\u1ecf neo","anchor_title":"Ch\u00e8n/s\u1eeda m\u1ecf neo","about_loaded":"Tr\u00ecnh g\u1eafn k\u00e8m \u0111\u00e3 n\u1ea1p","about_version":"Phi\u00ean b\u1ea3n","about_author":"T\u00e1c gi\u1ea3","about_plugin":"Tr\u00ecnh g\u1eafn k\u00e8m","about_plugins":"Tr\u00ecnh g\u1eafn k\u00e8m","about_license":"Gi\u1ea5y ph\u00e9p","about_help":"Tr\u1ee3 gi\u00fap","about_general":"Th\u00f4ng tin","about_title":"Th\u00f4ng tin v\u1ec1 TinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-cn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-cn.js
new file mode 100644
index 000000000..cef3df2d9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.advanced',{"underline_desc":"\u4e0b\u5212\u7ebf(Ctrl U)","italic_desc":"\u659c\u4f53(Ctrl I)","bold_desc":"\u7c97\u4f53(Ctrl B)",dd:"\u5b9a\u4e49\u8bf4\u660e",dt:"\u672f\u8bed\u5b9a\u4e49",samp:"\u4ee3\u7801\u793a\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"\u6807\u98986",h5:"\u6807\u98985",h4:"\u6807\u98984",h3:"\u6807\u98983",h2:"\u6807\u98982",h1:"\u6807\u98981",pre:"\u9884\u683c\u5f0f\u6587\u672c",address:"\u5730\u5740",div:"Div\u533a\u5757",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f\u5316",fontdefault:"\u5b57\u4f53","font_size":"\u5b57\u4f53\u5927\u5c0f","style_select":"\u6837\u5f0f","more_colors":"\u66f4\u591a\u989c\u8272","toolbar_focus":"\u8f6c\u5230\u5de5\u5177\u6309\u94ae - Alt-Q\uff0c\u8f6c\u5230\u7f16\u8f91\u5668 - Alt-Z\uff0c\u8f6c\u5230\u5143\u7d20\u8def\u5f84 - Alt-X\u3002",newdocument:"\u60a8\u771f\u7684\u8981\u6e05\u9664\u6240\u6709\u5185\u5bb9\u5417\uff1f",path:"\u8def\u5f84","clipboard_msg":"\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u590d\u5236/\u7c98\u8d34/\u526a\u5207\u3002n\u60a8\u8981\u67e5\u770b\u8be5\u95ee\u9898\u66f4\u591a\u7684\u4fe1\u606f\u5417\uff1f","blockquote_desc":"\u5f15\u7528","help_desc":"\u5e2e\u52a9","newdocument_desc":"\u65b0\u5efa","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u7c98\u8d34","copy_desc":"\u590d\u5236","cut_desc":"\u526a\u5207","anchor_desc":"\u63d2\u5165/\u7f16\u8f91 \u951a","visualaid_desc":"\u663e\u793a/\u9690\u85cf \u5143\u7d20","charmap_desc":"\u63d2\u5165\u81ea\u5b9a\u4e49\u7b26\u53f7","backcolor_desc":"\u9009\u62e9\u80cc\u666f\u989c\u8272","forecolor_desc":"\u9009\u62e9\u6587\u672c\u989c\u8272","custom1_desc":"\u8fd9\u91cc\u662f\u60a8\u81ea\u5b9a\u4e49\u7684\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u683c\u5f0f","hr_desc":"\u63d2\u5165\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"\u7f16\u8f91HTML\u6e90\u4ee3\u7801","cleanup_desc":"\u6e05\u9664\u65e0\u7528\u4ee3\u7801","image_desc":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","unlink_desc":"\u53d6\u6d88\u8d85\u94fe\u63a5","link_desc":"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","redo_desc":"\u6062\u590d (Ctrl Y)","undo_desc":"\u64a4\u9500 (Ctrl Z)","indent_desc":"\u589e\u52a0\u7f29\u8fdb","outdent_desc":"\u51cf\u5c11\u7f29\u8fdb","numlist_desc":"\u7f16\u53f7\u5217\u8868","bullist_desc":"\u9879\u76ee\u5217\u8868","justifyfull_desc":"\u4e24\u7aef\u5bf9\u9f50","justifyright_desc":"\u53f3\u5bf9\u9f50","justifycenter_desc":"\u5c45\u4e2d","justifyleft_desc":"\u5de6\u5bf9\u9f50","striketrough_desc":"\u5220\u9664\u7ebf","help_shortcut":"\u6309 ALT-F10 \u5b9a\u4f4d\u5230\u5de5\u5177\u680f.\u6309 ALT-0 \u83b7\u53d6\u5e2e\u52a9\u3002","rich_text_area":"\u5bcc\u6587\u672c\u533a","shortcuts_desc":"\u8f85\u52a9\u8bf4\u660e",toolbar:"\u5de5\u5177\u680f","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-cn_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-cn_dlg.js
new file mode 100644
index 000000000..5d038750c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-cn_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.advanced_dlg',{"link_list":"\u94fe\u63a5\u5217\u8868","link_is_external":"\u60a8\u8f93\u5165\u7684URL\u662f\u4e00\u4e2a\u5916\u90e8\u94fe\u63a5\uff0c\u662f\u5426\u8981\u52a0\u4e0a\"http://\"\u524d\u7f00\uff1f","link_is_email":"\u8f93\u5165URL\u662f\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u52a0\"mailto:\"\u524d\u7f00\uff1f","link_titlefield":"\u6807\u9898","link_target_blank":"\u5728\u65b0\u7a97\u53e3\u6253\u5f00","link_target_same":"\u5728\u5f53\u524d\u7a97\u53e3\u6253\u5f00","link_target":"\u6253\u5f00\u65b9\u5f0f","link_url":"\u8d85\u94fe\u63a5URL","link_title":"\u63d2\u5165/\u7f16\u8f91 \u8d85\u94fe\u63a5","image_align_right":"\u53f3\u5bf9\u9f50","image_align_left":"\u5de6\u5bf9\u9f50","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u5e95\u7aef\u5bf9\u9f50","image_align_middle":"\u5c45\u4e2d\u5bf9\u9f50","image_align_top":"\u9876\u7aef\u5bf9\u9f50","image_align_baseline":"\u5e95\u7ebf","image_align":"\u5bf9\u9f50","image_hspace":"\u6c34\u5e73\u8ddd\u79bb","image_vspace":"\u5782\u76f4\u8ddd\u79bb","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u63cf\u8ff0","image_list":"\u56fe\u7247\u5217\u8868","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247\u94fe\u63a5","image_title":"\u63d2\u5165/\u7f16\u8f91 \u56fe\u7247","charmap_title":"\u9009\u62e9\u81ea\u5b9a\u4e49\u7b26\u53f7","colorpicker_name":"\u540d\u79f0\uff1a","colorpicker_color":"\u989c\u8272\uff1a","colorpicker_named_title":"\u547d\u540d\u989c\u8272","colorpicker_named_tab":"\u547d\u540d\u989c\u8272","colorpicker_palette_title":"\u8c03\u8272\u677f\u989c\u8272","colorpicker_palette_tab":"\u8c03\u8272\u677f","colorpicker_picker_title":"\u989c\u8272\u62fe\u53d6","colorpicker_picker_tab":"\u62fe\u53d6","colorpicker_title":"\u9009\u62e9\u989c\u8272","code_wordwrap":"\u81ea\u52a8\u6362\u884c","code_title":"HTML\u4ee3\u7801\u7f16\u8f91\u5668","anchor_name":"\u951a\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91 \u951a","about_loaded":"\u5df2\u8f7d\u5165\u7684\u63d2\u4ef6","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u63d2\u4ef6","about_plugins":"\u63d2\u4ef6","about_license":"\u8bb8\u53ef\u534f\u8bae","about_help":"\u5e2e\u52a9","about_general":"\u5173\u4e8e","about_title":"\u5173\u4e8eTinyMCE","anchor_invalid":"\u8bf7\u6307\u5b9a\u4e00\u4e2a\u6709\u6548\u7684\u951a\u540d\u79f0\u3002","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-tw.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-tw.js
new file mode 100644
index 000000000..54041ae7f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.advanced',{"underline_desc":"\u52a0\u4e0a\u5e95\u7dda (Ctrl U)","italic_desc":"\u8b8a\u6210\u659c\u7dda (Ctrl I)","bold_desc":"\u5b57\u52a0\u7c97 (Ctrl B)",dd:"\u64b0\u5beb\u8aaa\u660e / \u8a3b\u89e3",dt:"\u8853\u8a9e\u5b9a\u7fa9",samp:"\u8a9e\u6cd5\u7bc4\u4f8b",code:"\u8a9e\u6cd5",blockquote:"\u5f15\u7528",h6:"\u6a19\u984c\u6a23\u5f0f 6",h5:"\u6a19\u984c\u6a23\u5f0f 5",h4:"\u6a19\u984c\u6a23\u5f0f 4",h3:"\u6a19\u984c\u6a23\u5f0f 3",h2:"\u6a19\u984c\u6a23\u5f0f 2",h1:"\u6a19\u984c\u6a23\u5f0f 1",pre:"\u7d14\u6587\u5b57",address:"\u4f4f\u5740",div:"Div \u6392\u7248\u5340\u584a",paragraph:"\u6bb5\u843d\u6a23\u5f0f",block:"\u683c\u5f0f",fontdefault:"\u5b57\u9ad4","font_size":"\u6587\u5b57\u5927\u5c0f","style_select":"\u6a23\u5f0f","more_colors":"\u5176\u4ed6\u984f\u8272","toolbar_focus":"\u8f14\u52a9\u529f\u80fd\uff1a\u6309\u4e0b Alt \u8ddf Q \u53ef\u8df3\u5230\u529f\u80fd\u5217\u3001\u6309\u4e0b Alt \u8ddf Z \u8df3\u5230\u6587\u5b57\u7de8\u8f2f\u756b\u9762\u3001\u6309\u4e0b Alt \u8ddf X \u53ef\u8df3\u5230\u8a9e\u6cd5\u7d30\u7bc0\u7684\u90a3\u4e00\u6392",newdocument:"\u60a8\u771f\u7684\u8981\u6e05\u9664\u756b\u9762\u4e0a\u7684\u5167\u5bb9\u55ce\uff1f",path:"\u8a9e\u6cd5\u7d30\u7bc0","clipboard_msg":"\u5f88\u62b1\u6b49\uff0c\u4f60\u770b\u7db2\u9801\u7684\u8edf\u9ad4\u4e0d\u652f\u63f4\u526a\u4e0b\u3001\u8907\u88fd\u3001\u8cbc\u4e0a\u7684\u529f\u80fd\u3002","blockquote_desc":"\u5f15\u7528","help_desc":"\u8aaa\u660e","newdocument_desc":"\u65b0\u6587\u7ae0","image_props_desc":"\u5716\u7247\u8a2d\u5b9a","paste_desc":"\u8cbc\u4e0a","copy_desc":"\u8907\u88fd","cut_desc":"\u526a\u4e0b","anchor_desc":"\u52a0\u5165 / \u7de8\u8f2f\u9328\u9ede (\u66f8\u7c64)","visualaid_desc":"\u986f\u793a\u96b1\u85cf\u7684\u6771\u897f","charmap_desc":"\u52a0\u5165\u4e00\u500b\u81ea\u5df1\u8a2d\u5b9a\u7684\u6587\u5b57\u7b26\u865f","backcolor_desc":"\u9078\u64c7\u80cc\u666f\u8272","forecolor_desc":"\u9078\u64c7\u6587\u5b57\u984f\u8272","custom1_desc":"\u4f60\u5beb\u7684\u8a3b\u89e3\u5728\u9019\u88e1","removeformat_desc":"\u79fb\u9664\u6587\u5b57\u4e0a\u7684\u6a23\u5f0f\u8207\u683c\u5f0f","hr_desc":"\u52a0\u5165\u4e00\u500b\u6c34\u5e73\u7dda","sup_desc":"\u4e0a\u6a19\u5b57","sub_desc":"\u4e0b\u6a19\u5b57","code_desc":"\u7de8\u8f2f HTML \u8a9e\u6cd5","cleanup_desc":"\u79fb\u9664\u591a\u9918\u7684\u6587\u5b57\u8207\u7a0b\u5f0f\u78bc","image_desc":"\u65b0\u589e / \u7de8\u8f2f\u5716\u7247","unlink_desc":"\u79fb\u9664\u9023\u7d50","link_desc":"\u65b0\u589e / \u7de8\u8f2f\u7db2\u5740\u9023\u7d50","redo_desc":"\u91cd\u4f86\u4e00\u6b21 (Ctrl Y)","undo_desc":"\u5fa9\u539f (Ctrl Z)","indent_desc":"\u7e2e\u6392 (\u589e\u52a0)","outdent_desc":"\u7e2e\u6392 (\u6e1b\u5c11)","numlist_desc":"\u9805\u76ee\u7b26\u865f (\u6709\u6578\u5b57)","bullist_desc":"\u9805\u76ee\u7b26\u865f (\u53ea\u6709\u7b26\u865f)","justifyfull_desc":"\u5206\u6563\u5c0d\u9f4a","justifyright_desc":"\u5411\u53f3\u908a\u5c0d\u9f4a","justifycenter_desc":"\u7f6e\u4e2d\u5c0d\u9f4a","justifyleft_desc":"\u5411\u5c0d\u9f4a\u5de6\u908a","striketrough_desc":"\u522a\u9664\u7dda","help_shortcut":"\u6309\u4e0b ALT F10 \u51fa\u73fe\u5de5\u5177\u5217\uff1b\u6309\u4e0b ALT 0 \u5247\u51fa\u73fe\u8aaa\u660e\u3002","rich_text_area":"\u6587\u5b57\u7de8\u8f2f\u5340","shortcuts_desc":"\u8f14\u52a9\u8aaa\u660e",toolbar:"\u5de5\u5177\u5217","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","link_delta_height":"","link_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-tw_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-tw_dlg.js
new file mode 100644
index 000000000..46208f90c
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh-tw_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.advanced_dlg',{"link_list":"\u9023\u7d50\u6e05\u55ae","link_is_external":"\u60a8\u7684\u7db2\u5740\u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b http:// \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f","link_is_email":"\u60a8\u7684 E-Mail \u5c11\u597d\u50cf\u52a0\u5165\u4e00\u500b mailto: \u8a9e\u6cd5\uff0c\u8981\u5e6b\u60a8\u4fee\u6b63\u55ce\uff1f","link_titlefield":"\u6a19\u984c","link_target_blank":"\u53e6\u5916\u958b\u65b0\u8996\u7a97","link_target_same":"\u76f4\u63a5\u958b\u555f\u9023\u7d50","link_target":"\u958b\u555f\u65b9\u5f0f","link_url":"\u9023\u7d50 URL","link_title":"\u52a0\u5165 / \u7de8\u8f2f\u7db2\u5740","image_align_right":"\u5411\u53f3\u5c0d\u9f4a","image_align_left":"\u5411\u5de6\u5c0d\u9f4a","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u4e0b\u65b9","image_align_middle":"\u7f6e\u4e2d","image_align_top":"\u4e0a\u65b9","image_align_baseline":"\u57fa\u6e96\u7dda","image_align":"\u5c0d\u9f4a","image_hspace":"\u6c34\u5e73\u8ddd\u96e2","image_vspace":"\u5782\u76f4\u8ddd\u96e2","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u5716\u7247\u8aaa\u660e","image_list":"\u5716\u7247\u6e05\u55ae","image_border":"\u908a\u6846","image_src":"\u5716\u7247\u7db2\u5740\u9023\u7d50","image_title":"\u52a0\u5165 / \u8a2d\u5b9a\u5716\u7247","charmap_title":"\u9078\u64c7\u81ea\u8a02\u7684\u7b26\u865f","colorpicker_name":"\u540d\u7a31\uff1a","colorpicker_color":"\u984f\u8272\uff1a","colorpicker_named_title":"\u8272\u7968\u540d\u7a31","colorpicker_named_tab":"\u8272\u7968\u540d\u7a31","colorpicker_palette_title":"\u8abf\u8272","colorpicker_palette_tab":"\u8abf\u8272\u76e4","colorpicker_picker_title":"\u6309\u4e00\u4e0b\u6ed1\u9f20\u9078\u64c7\u984f\u8272","colorpicker_picker_tab":"\u9078\u64c7","colorpicker_title":"\u9078\u4e00\u500b\u984f\u8272","code_wordwrap":"\u81ea\u52d5\u63db\u884c","code_title":"HTML \u8a9e\u6cd5\u7de8\u8f2f\u5668","anchor_name":"\u9328\u9ede\u540d\u7a31","anchor_title":"\u52a0\u5165 / \u8a2d\u5b9a\u9328\u9ede","about_loaded":"\u5916\u639b\u7a0b\u5f0f\u8f09\u5165\u5b8c\u6210","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u5916\u639b","about_plugins":"\u5916\u639b\u7a0b\u5f0f","about_license":"\u7248\u6b0a\u6388\u6b0a","about_help":"\u8aaa\u660e","about_general":"\u95dc\u65bc","about_title":"\u95dc\u65bc TinyMCE \u9019\u5957\u6587\u5b57\u7de8\u8f2f\u5668","anchor_invalid":"\u8acb\u7528\u82f1\u6587\u6216\u6578\u5b57\u4f5c\u70ba\u9328\u9ede\u7684\u540d\u7a31","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh.js
new file mode 100644
index 000000000..a4cbe64b7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.advanced',{"underline_desc":"\u5e95\u7dda (Ctrl U)","italic_desc":"\u659c\u9ad4 (Ctrl I)","bold_desc":"\u7c97\u9ad4 (Ctrl B)",dd:"\u540d\u8a5e\u63cf\u8ff0",dt:"\u540d\u8a5e\u5b9a\u7fa9",samp:"\u4ee3\u78bc\u7bc4\u4f8b",code:"\u4ee3\u78bc",blockquote:"\u5f15\u7528",h6:"\u6a19\u984c6",h5:"\u6a19\u984c5",h4:"\u6a19\u984c4",h3:"\u6a19\u984c3",h2:"\u6a19\u984c2",h1:"\u6a19\u984c1",pre:"\u9810\u8a2d\u683c\u5f0f",address:"\u5730\u5740",div:"Div",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u9ad4","font_size":"\u5b57\u9ad4\u5927\u5c0f","style_select":"\u6a23\u5f0f","anchor_delta_height":"","link_delta_height":"60","link_delta_width":"40","more_colors":"\u66f4\u591a\u984f\u8272","toolbar_focus":"\u8df3\u7f6e\u5de5\u5177\u5217 - Alt Q, \u8df3\u81f3\u7de8\u8f2f\u6846 - Alt Z, \u8df3\u81f3\u5143\u7d20\u7bc0\u9ede - Alt X.",newdocument:"\u60a8\u537b\u5b9a\u8981\u6e05\u9664\u6240\u6709\u7de8\u8f2f\u5167\u5bb9\u55ce?",path:"\u5143\u7d20\u7bc0\u9ede","clipboard_msg":"Mozilla \u548c Firefox \u4e0d\u652f\u63f4\u8907\u88fd/\u526a\u4e0b/\u8cbc\u4e0a. \n\u60a8\u9700\u8981\u95dc\u65bc\u6b64\u554f\u984c\u66f4\u9032\u4e00\u6b65\u7684\u8cc7\u8a0a\u55ce?","blockquote_desc":"\u5f15\u7528","help_desc":"\u8aaa\u660e","newdocument_desc":"\u958b\u555f\u65b0\u6587\u4ef6","image_props_desc":"\u5716\u7247\u5c6c\u6027","paste_desc":"\u8cbc\u4e0a (Ctrl V)","copy_desc":"\u8907\u88fd (Ctrl C)","cut_desc":"\u526a\u4e0b (Ctrl X)","anchor_desc":"\u63d2\u5165/\u7de8\u8f2f\u9328\u9ede","visualaid_desc":"\u986f\u793a/\u96b1\u85cf\u76ee\u6a19","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u865f","backcolor_desc":"\u80cc\u666f\u984f\u8272","forecolor_desc":"\u5b57\u9ad4\u984f\u8272","custom1_desc":"\u5728\u6b64\u8f38\u5165\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u683c\u5f0f","hr_desc":"\u6c34\u5e73\u7dda","sup_desc":"\u4e0a\u6a19","sub_desc":"\u4e0b\u6a19","code_desc":"\u76f4\u63a5\u7de8\u8f2f HTML \u8a9e\u6cd5","cleanup_desc":"\u6e05\u9664\u683c\u5f0f","image_desc":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","unlink_desc":"\u522a\u9664\u9023\u7d50","link_desc":"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","redo_desc":"\u53d6\u6d88\u5fa9\u539f (Ctrl Y)","undo_desc":"\u5fa9\u539f (Ctrl Z)","indent_desc":"\u589e\u52a0\u7f29\u6392","outdent_desc":"\u51cf\u5c11\u7f29\u6392","numlist_desc":"\u7de8\u865f\u5217\u8868","bullist_desc":"\u9805\u76ee\u5217\u8868","justifyfull_desc":"\u5de6\u53f3\u5c0d\u9f4a","justifyright_desc":"\u9760\u53f3\u5c0d\u9f4a","justifycenter_desc":"\u7f6e\u4e2d\u5c0d\u9f4a","justifyleft_desc":"\u9760\u5de6\u5c0d\u9f4a","striketrough_desc":"\u522a\u9664\u7dda","help_shortcut":"\u6309ALT F10\u5230\u5de5\u5177\u5217.\u6309ALT 0\u5230\u8aaa\u660e","rich_text_area":"\u591a\u6a23\u5f0f\u7de8\u8f2f\u5340","shortcuts_desc":"\u5354\u52a9\u5de5\u5177\u8aaa\u660e",toolbar:"\u5de5\u5177\u5217","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":""}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh_dlg.js
new file mode 100644
index 000000000..2e3114853
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zh_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.advanced_dlg',{"link_list":"\u9023\u7d50\u6e05\u55ae","link_is_external":"\u60a8\u6240\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u70ba\u5916\u90e8\u9023\u7d50, \u662f\u5426\u9700\u8981\u52a0\u4e0a http:// \u524d\u7db4?","link_is_email":"\u60a8\u8f38\u5165\u7684 URL \u4f3c\u4e4e\u662f\u96fb\u5b50\u90f5\u4ef6\u4f4d\u5740, \u662f\u5426\u9700\u8981\u52a0\u4e0a mailto: \u524d\u7db4?","link_titlefield":"\u6a19\u984c","link_target_blank":"\u5728\u65b0\u8996\u7a97\u6253\u958b\u9023\u7d50","link_target_same":"\u5728\u76ee\u524d\u8996\u7a97\u6253\u958b\u9023\u7d50","link_target":"\u9023\u7d50\u76ee\u6a19","link_url":"URL \u9023\u7d50","link_title":"\u63d2\u5165/\u7de8\u8f2f\u9023\u7d50","image_align_right":"\u9760\u53f3","image_align_left":"\u9760\u5de6","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u9760\u4e0b","image_align_middle":"\u7f6e\u4e2d","image_align_top":"\u9760\u4e0a","image_align_baseline":"\u57fa\u6e96\u7dda","image_align":"\u5c0d\u9f4a\u65b9\u5f0f","image_hspace":"\u6c34\u5e73\u9593\u8ddd","image_vspace":"\u5782\u76f4\u9593\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u5716\u7247\u8aaa\u660e","image_list":"\u5716\u7247\u6e05\u55ae","image_border":"\u908a\u6846","image_src":"\u5716\u7247 URL \u9023\u7d50","image_title":"\u63d2\u5165/\u7de8\u8f2f\u5716\u7247","charmap_title":"\u63d2\u5165\u81ea\u8a02\u7b26\u865f","colorpicker_name":"\u540d\u7a31:","colorpicker_color":"\u984f\u8272:","colorpicker_named_title":"\u5e38\u7528\u984f\u8272","colorpicker_named_tab":"\u5e38\u7528\u984f\u8272","colorpicker_palette_title":"WEB\u984f\u8272","colorpicker_palette_tab":"\u5b89\u5168\u8272","colorpicker_picker_title":"\u8abf\u8272\u76e4","colorpicker_picker_tab":"\u8abf\u8272\u76e4","colorpicker_title":"\u9078\u64c7\u984f\u8272","code_wordwrap":"\u81ea\u52d5\u63db\u884c","code_title":"HTML \u8a9e\u6cd5\u7de8\u8f2f\u5668","anchor_name":"\u9328\u9ede\u540d\u7a31","anchor_title":"\u63d2\u5165/\u7de8\u8f2f\u9328\u9ede","about_loaded":"\u5df2\u555f\u7528\u7684\u63d2\u4ef6","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u63d2\u4ef6","about_plugins":"\u63d2\u4ef6","about_license":"\u6388\u6b0a","about_help":"\u8aaa\u660e","about_general":"\u95dc\u65bc","about_title":"\u95dc\u65bc TinyMCE","charmap_usage":"\u4f7f\u7528\u5de6\u53f3\u65b9\u5411\u9375\u5207\u63db\u3002","anchor_invalid":"\u8acb\u8f38\u5165\u6709\u6548\u7684\u9328\u9ede\u540d\u7a31.","accessibility_help":"\u5354\u52a9\u5de5\u5177\u8aaa\u660e","accessibility_usage_title":"\u4e00\u822c\u7528\u9014","invalid_color_value":"\u9519\u8bef\u7684\u989c\u8272\u503c"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zu.js
new file mode 100644
index 000000000..5bef23bfa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.advanced',{"underline_desc":"\u5e95\u7ebf(Ctrl+U)","italic_desc":"\u659c\u4f53(Ctrl+I)","bold_desc":"\u9ed1\u4f53(Ctrl+B)",dd:"\u540d\u8bcd\u89e3\u91ca",dt:"\u540d\u8bcd\u5b9a\u4e49",samp:"\u4ee3\u7801\u6837\u4f8b",code:"\u4ee3\u7801",blockquote:"\u5f15\u7528",h6:"\u6807\u98986",h5:"\u6807\u98985",h4:"\u6807\u98984",h3:"\u6807\u98983",h2:"\u6807\u98982",h1:"\u6807\u98981",pre:"\u65e0\u5f0f\u6837\u7f16\u6392",address:"\u5730\u5740",div:"DIV\u5c42",paragraph:"\u6bb5\u843d",block:"\u683c\u5f0f",fontdefault:"\u5b57\u4f53","font_size":"\u5b57\u4f53\u5927\u5c0f","style_select":"\u6837\u5f0f","link_delta_height":"60","link_delta_width":"40","more_colors":"\u66f4\u591a\u989c\u8272","toolbar_focus":"\u5de5\u5177\u6309\u94ae- Alt+Q,\u7f16\u8f91\u5668- Alt-Z,\u5143\u4ef6\u4f4d\u7f6e- Alt-X",newdocument:"\u60a8\u786e\u8ba4\u8981\u6e05\u9664\u5168\u90e8\u5185\u5bb9\u5417\uff1f",path:"\u4f4d\u7f6e","clipboard_msg":"\u590d\u5236\u3001\u526a\u4e0b\u53ca\u8d34\u4e0a\u529f\u80fd\u5728Mozilla\u548cFirefox\u4e2d\u4e0d\u80fd\u4f7f\u7528\u3002 \n\u662f\u5426\u9700\u8981\u4e86\u89e3\u66f4\u591a\u6709\u5173\u6b64\u95ee\u9898\u7684\u8d44\u8baf\uff1f","blockquote_desc":"\u5f15\u7528","help_desc":"\u8bf4\u660e","newdocument_desc":"\u65b0\u6587\u4ef6","image_props_desc":"\u56fe\u7247\u5c5e\u6027","paste_desc":"\u8d34\u4e0a","copy_desc":"\u590d\u5236","cut_desc":"\u526a\u4e0b","anchor_desc":"\u63d2\u5165/\u7f16\u8f91\u951a\u70b9","visualaid_desc":"\u5f00\u5173\u683c\u7ebf/\u9690\u85cf\u5143\u4ef6","charmap_desc":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","backcolor_desc":"\u9009\u62e9\u80cc\u666f\u989c\u8272","forecolor_desc":"\u9009\u62e9\u6587\u5b57\u989c\u8272","custom1_desc":"\u5728\u6b64\u8f93\u5165\u60a8\u7684\u81ea\u8ba2\u63cf\u8ff0","removeformat_desc":"\u6e05\u9664\u6837\u5f0f","hr_desc":"\u63d2\u5165\u6c34\u5e73\u7ebf","sup_desc":"\u4e0a\u6807","sub_desc":"\u4e0b\u6807","code_desc":"\u7f16\u8f91HTML\u539f\u59cb\u7a0b\u5f0f\u7801","cleanup_desc":"\u6e05\u9664\u591a\u4f59\u4ee3\u7801","image_desc":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","unlink_desc":"\u53d6\u6d88\u8fde\u7ed3","link_desc":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","redo_desc":"\u91cd\u505a(Ctrl+Y)","undo_desc":"\u64a4\u9500(Ctrl+Z)","indent_desc":"\u589e\u52a0\u7f29\u6392","outdent_desc":"\u51cf\u5c11\u7f29\u6392","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u4e13\u6848\u7b26\u53f7","justifyfull_desc":"\u4e24\u7aef\u5bf9\u9f50","justifyright_desc":"\u53f3\u5bf9\u9f50","justifycenter_desc":"\u5c45\u4e2d","justifyleft_desc":"\u5de6\u5bf9\u9f50","striketrough_desc":"\u5220\u9664\u7ebf","anchor_delta_height":"","anchor_delta_width":"","charmap_delta_height":"","charmap_delta_width":"","colorpicker_delta_height":"","colorpicker_delta_width":"","image_delta_height":"","image_delta_width":"","help_shortcut":"Press ALT-F10 for toolbar. Press ALT-0 for help","rich_text_area":"Rich Text Area","shortcuts_desc":"Accessability Help",toolbar:"Toolbar"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zu_dlg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zu_dlg.js
new file mode 100644
index 000000000..753febb13
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/advanced/langs/zu_dlg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.advanced_dlg',{"link_list":"\u8fde\u7ed3\u6e05\u5355","link_is_external":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u5916\u90e8\u8fde\u7ed3\uff0c\u662f\u5426\u9700\u8981\u5728\u7f51\u5740\u524d\u65b9\u52a0\u5165http://\uff1f","link_is_email":"\u60a8\u8f93\u5165\u7684\u7f51\u5740\u5e94\u8be5\u662f\u4e00\u4e2a\u7535\u5b50\u90ae\u5bc4\u5730\u5740\uff0c\u662f\u5426\u9700\u8981\u5728\u4f4d\u5740\u524d\u65b9\u52a0\u5165mailto:\uff1f","link_titlefield":"\u6807\u9898","link_target_blank":"\u5c06\u8fde\u7ed3\u7f51\u5740\u5f00\u5728\u65b0\u7a97\u53e3","link_target_same":"\u5c06\u8fde\u7ed3\u7f51\u5740\u5f00\u5728\u6b64\u89c6\u7a97","link_target":"\u76ee\u6807","link_url":"\u8fde\u7ed3\u4f4d\u5740","link_title":"\u63d2\u5165/\u7f16\u8f91\u8fde\u7ed3","image_align_right":"\u9760\u53f3\u5bf9\u9f50","image_align_left":"\u9760\u5de6\u5bf9\u9f50","image_align_textbottom":"\u6587\u5b57\u4e0b\u65b9","image_align_texttop":"\u6587\u5b57\u4e0a\u65b9","image_align_bottom":"\u5e95\u90e8\u5bf9\u9f50","image_align_middle":"\u5c45\u4e2d\u5bf9\u9f50","image_align_top":"\u4e0a\u65b9\u5bf9\u9f50","image_align_baseline":"\u57fa\u7ebf","image_align":"\u5bf9\u9f50\u65b9\u5f0f","image_hspace":"\u6c34\u51c6\u95f4\u8ddd","image_vspace":"\u5782\u76f4\u95f4\u8ddd","image_dimensions":"\u5c3a\u5bf8","image_alt":"\u56fe\u7247\u8bf4\u660e","image_list":"\u56fe\u7247\u6e05\u5355","image_border":"\u8fb9\u6846","image_src":"\u56fe\u7247\u4f4d\u5740","image_title":"\u63d2\u5165/\u7f16\u8f91\u56fe\u7247","charmap_title":"\u63d2\u5165\u7279\u6b8a\u7b26\u53f7","colorpicker_name":"\u540d\u79f0:","colorpicker_color":"\u989c\u8272:","colorpicker_named_title":"\u9884\u8bbe\u7684\u989c\u8272","colorpicker_named_tab":"\u9884\u8bbe\u7684","colorpicker_palette_title":"\u8272\u76d8\u989c\u8272","colorpicker_palette_tab":"\u8272\u76d8","colorpicker_picker_title":"\u9009\u8272\u5668","colorpicker_picker_tab":"\u9009\u8272\u5668","colorpicker_title":"\u6311\u9009\u989c\u8272","code_wordwrap":"\u6574\u5b57\u6362\u884c","code_title":"HTML\u539f\u59cb\u7a0b\u5f0f\u7801\u7f16\u8f91\u5668","anchor_name":"\u951a\u70b9\u540d\u79f0","anchor_title":"\u63d2\u5165/\u7f16\u8f91\u951a\u70b9","about_loaded":"\u5df2\u8f7d\u5165\u7684\u5916\u6302\u7a0b\u5f0f","about_version":"\u7248\u672c","about_author":"\u4f5c\u8005","about_plugin":"\u5916\u6302\u7a0b\u5f0f","about_plugins":"\u5168\u90e8\u5916\u6302\u7a0b\u5f0f","about_license":"\u6388\u6743","about_help":"\u5e2e\u52a9","about_general":"\u5173\u4e8e","about_title":"\u5173\u4e8eTinyMCE","anchor_invalid":"Please specify a valid anchor name.","accessibility_help":"Accessibility Help","accessibility_usage_title":"General Usage"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ar.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ar.js
new file mode 100644
index 000000000..f16c58033
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ar.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ar.simple',{"cleanup_desc":"\u0631\u0645\u0632 \u062a\u0646\u0638\u064a\u0641 \u0627\u0644\u0641\u0648\u0636\u0649","redo_desc":"\u0627\u0644\u0625\u0639\u0627\u062f\u0629 (Ctrl+Y)","undo_desc":"\u062a\u0631\u0627\u062c\u0639 (Ctrl+Z)","numlist_desc":"\u0642\u0627\u0626\u0645\u0629 \u0645\u0631\u062a\u0628\u0629","bullist_desc":"\u0642\u0627\u0626\u0645\u0629 \u063a\u064a\u0631 \u0645\u0631\u062a\u0628\u0629","striketrough_desc":"\u062a\u0648\u0633\u064a\u0637 \u0628\u062e\u0637","underline_desc":"\u062a\u0633\u0637\u064a\u0631 (Ctrl+U)","italic_desc":"\u0645\u0627\u0626\u0644 (Ctrl+I)","bold_desc":"\u0639\u0631\u064a\u0636 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/az.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/az.js
new file mode 100644
index 000000000..3523e1f61
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/az.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('az.simple',{"cleanup_desc":"\u018fyri kodu t\u0259mizl\u0259","redo_desc":"T\u0259krarla (Ctrl+Y)","undo_desc":"L\u0259\u011fv et (Ctrl+Z)","numlist_desc":"N\u00f6mr\u0259l\u0259nmi\u015f siyah\u0131","bullist_desc":"Qeyd edilmi\u015f siyah\u0131","striketrough_desc":"Qaralanm\u0131\u015f","underline_desc":"Altdan x\u0259tt (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Yar\u0131qal\u0131n (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/be.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/be.js
new file mode 100644
index 000000000..69c764398
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/be.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('be.simple',{"cleanup_desc":"\u041f\u0430\u0447\u044b\u0441\u0446\u0456\u0446\u044c \u0431\u0440\u0443\u0434\u043d\u044b \u043a\u043e\u0434","redo_desc":"\u041f\u0430\u045e\u0442\u0430\u0440\u044b\u0446\u044c (Ctrl+Y)","undo_desc":"\u0410\u0434\u043c\u044f\u043d\u0456\u0446\u044c (Ctrl+Z)","numlist_desc":"\u041d\u0443\u043c\u0430\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441","bullist_desc":"\u041c\u0430\u0440\u043a\u0456\u0440\u0430\u0432\u0430\u043d\u044b \u0441\u043f\u0456\u0441","striketrough_desc":"\u041f\u0435\u0440\u0430\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b","underline_desc":"\u041f\u0430\u0434\u043a\u0440\u044d\u0441\u043b\u0435\u043d\u044b (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0456\u045e (Ctrl+I)","bold_desc":"\u0422\u043b\u0443\u0441\u0442\u044b (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bg.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bg.js
new file mode 100644
index 000000000..6aca15ab8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bg.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bg.simple',{"cleanup_desc":"\u0418\u0437\u0447\u0438\u0441\u0442\u0438 \u043a\u043e\u0434\u0430","redo_desc":"\u0412\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043d\u0435 (Ctrl+Y)","undo_desc":"\u041e\u0442\u043c\u044f\u043d\u0430 (Ctrl+Z)","numlist_desc":"\u041d\u043e\u043c\u0435\u0440\u0430","bullist_desc":"\u0412\u043e\u0434\u0430\u0447\u0438","striketrough_desc":"\u0417\u0430\u0447\u0435\u0440\u0442\u0430\u043d","underline_desc":"\u041f\u043e\u0434\u0447\u0435\u0440\u0442\u0430\u043d (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u041f\u043e\u043b\u0443\u0447\u0435\u0440 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bn.js
new file mode 100644
index 000000000..eba13f26d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bn.simple',{"cleanup_desc":"\u0985\u09aa\u09b0\u09bf\u099a\u09cd\u099b\u09a8\u09cd\u09a8 \u0995\u09cb\u09a1 \u09aa\u09b0\u09bf\u09b7\u09cd\u0995\u09be\u09b0 \u0995\u09b0 ","redo_desc":"\u09b0\u09bf\u09a1\u09c1 (Ctrl+Y)","undo_desc":"\u0986\u09a8\u09a1\u09c1 (Ctrl+Z)","numlist_desc":"\u0985\u09b0\u09cd\u09a1\u09be\u09b0\u09a1 \u09b2\u09bf\u09b8\u09cd\u099f","bullist_desc":"\u0986\u09a8\u0985\u09b0\u09cd\u09a1\u09be\u09b0\u09a1 \u09b2\u09bf\u09b8\u09cd\u099f","striketrough_desc":"\u09ae\u09be\u099d \u09ac\u09b0\u09be\u09ac\u09b0 \u09b0\u09c7\u0996\u09be\u0999\u09cd\u0995\u09a8","underline_desc":"\u0986\u09a8\u09cd\u09a1\u09be\u09b0\u09b2\u09be\u0987\u09a8 (Ctrl+U)","italic_desc":"\u0987\u099f\u09be\u09b2\u09bf\u0995 (Ctrl+I)","bold_desc":"\u09ac\u09cb\u09b2\u09cd\u09a1 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/br.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/br.js
new file mode 100644
index 000000000..65358cc8f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/br.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('br.simple',{"cleanup_desc":"Limpar c\u00f3digo incorreto","redo_desc":"Refazer (Ctrl+Y)","undo_desc":"Desfazer (Ctrl+Z)","numlist_desc":"Lista ordenada","bullist_desc":"Lista n\u00e3o-ordenada","striketrough_desc":"Riscado","underline_desc":"Sublinhado (Ctrl+U)","italic_desc":"It\u00e1lico (Ctrl+I)","bold_desc":"Negrito (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bs.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bs.js
new file mode 100644
index 000000000..aa6ce90d8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/bs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('bs.simple',{"cleanup_desc":"Po\u010disti kod","redo_desc":"Ponovi (Ctrl+Y)","undo_desc":"Poni\u0161ti (Ctrl+Z)","numlist_desc":"Ure\u0111ena lista","bullist_desc":"Neure\u0111ena lista","striketrough_desc":"Precrtaj","underline_desc":"Podcrtaj (Ctrl+U)","italic_desc":"Kurziv (Ctrl+I)","bold_desc":"Podebljaj (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ca.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ca.js
new file mode 100644
index 000000000..7b4c14372
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ca.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ca.simple',{"cleanup_desc":"Poleix el codi","redo_desc":"Ref\u00e9s (Ctrl+Y)","undo_desc":"Desf\u00e9s (Ctrl+Z)","numlist_desc":"Llista numerada","bullist_desc":"Llista sense numeraci\u00f3","striketrough_desc":"Barrat","underline_desc":"Subratllat (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negreta (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ch.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ch.js
new file mode 100644
index 000000000..09aca2475
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ch.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ch.simple',{"cleanup_desc":"\u6e05\u9664\u683c\u5f0f","redo_desc":"\u53d6\u6d88\u6062\u590d \uff08Ctrl+Y\uff09","undo_desc":"\u6062\u590d \uff08Ctrl+Z\uff09","numlist_desc":"\u7f16\u53f7\u5217\u8868","bullist_desc":"\u9879\u76ee\u5217\u8868","striketrough_desc":"\u5220\u9664\u7ebf","underline_desc":"\u5e95\u7ebf \uff08Ctrl+U\uff09","italic_desc":"\u659c\u4f53 \uff08Ctrl+I\uff09","bold_desc":"\u7c97\u4f53\uff08Ctrl+B\uff09"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cn.js
new file mode 100644
index 000000000..3ce9ea193
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cn.simple',{"cleanup_desc":"\u6e05\u7406\u4ee3\u7801","redo_desc":"\u91cd\u505a (Ctrl Y)","undo_desc":"\u64a4\u9500 (Ctrl Z)","numlist_desc":"\u6709\u5e8f\u7f16\u53f7","bullist_desc":"\u65e0\u5e8f\u7f16\u53f7","striketrough_desc":"\u5220\u9664\u7ebf","underline_desc":"\u4e0b\u5212\u7ebf (Ctrl U)","italic_desc":"\u659c\u4f53 (Ctrl I)","bold_desc":"\u7c97\u4f53 (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cs.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cs.js
new file mode 100644
index 000000000..1be2fd656
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cs.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cs.simple',{"cleanup_desc":"Vy\u010distit k\u00f3d","redo_desc":"Znovu (Ctrl+Y)","undo_desc":"Zp\u011bt (Ctrl+Z)","numlist_desc":"\u010c\u00edslovan\u00fd seznam","bullist_desc":"Seznam s odr\u00e1\u017ekami","striketrough_desc":"P\u0159e\u0161krtnut\u00e9","underline_desc":"Podtr\u017een\u00e9 (Ctrl+U)","italic_desc":"Kurz\u00edva (Ctrl+I)","bold_desc":"Tu\u010dn\u00e9 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cy.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cy.js
new file mode 100644
index 000000000..473b43695
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/cy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('cy.simple',{"cleanup_desc":"Glanhau c\u00f4d anhrefnus","redo_desc":"Ailwneud (Ctrl+Y)","undo_desc":"Dadwneud (Ctrl+Z)","numlist_desc":"Rhestr trenus","bullist_desc":"Rhestr didrenus","striketrough_desc":"Taro drwodd","underline_desc":"Tanlinellu (Ctrl+U)","italic_desc":"Italig (Ctrl+I)","bold_desc":"Trwm (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/da.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/da.js
new file mode 100644
index 000000000..92de7a76a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/da.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('da.simple',{"cleanup_desc":"Ryd op i uordentlig kode","redo_desc":"Gendan (Ctrl+Y)","undo_desc":"Fortryd (Ctrl+Z)","numlist_desc":"Nummereret punktopstilling","bullist_desc":"Unummereret punktopstilling","striketrough_desc":"Gennemstreget","underline_desc":"Understreget (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fed (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/de.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/de.js
new file mode 100644
index 000000000..59bf788d2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/de.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('de.simple',{"cleanup_desc":"Quellcode aufr\u00e4umen","redo_desc":"Wiederholen (Strg+Y)","undo_desc":"R\u00fcckg\u00e4ngig (Strg+Z)","numlist_desc":"Nummerierung","bullist_desc":"Aufz\u00e4hlung","striketrough_desc":"Durchgestrichen","underline_desc":"Unterstrichen (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/dv.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/dv.js
new file mode 100644
index 000000000..e33567f84
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/dv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('dv.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/el.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/el.js
new file mode 100644
index 000000000..c7554b86b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/el.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('el.simple',{"cleanup_desc":"\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bc\u03c0\u03b5\u03c1\u03b4\u03b5\u03bc\u03ad\u03bd\u03bf\u03c5 \u03ba\u03ce\u03b4\u03b9\u03ba\u03b1","redo_desc":"\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 (Ctrl+Y)","undo_desc":"\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 (Ctrl+Z)","numlist_desc":"\u039b\u03af\u03c3\u03c4\u03b1 \u03bc\u03b5 \u03c3\u03b5\u03b9\u03c1\u03ac","bullist_desc":"\u039b\u03af\u03c3\u03c4\u03b1 \u03c7\u03c9\u03c1\u03af\u03c2 \u03c3\u03b5\u03b9\u03c1\u03ac","striketrough_desc":"\u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03bc\u03bc\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1","underline_desc":"\u03a5\u03c0\u03bf\u03b3\u03c1\u03b1\u03bc\u03bc\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1 (Ctrl+U)","italic_desc":"\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1 (Ctrl+I)","bold_desc":"\u0388\u03bd\u03c4\u03bf\u03bd\u03b1 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/en.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/en.js
new file mode 100644
index 000000000..088ed0fcb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/en.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('en.simple',{"cleanup_desc":"Cleanup Messy Code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/eo.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/eo.js
new file mode 100644
index 000000000..1d59bd9c9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/eo.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eo.simple',{"cleanup_desc":"Senrubigi mal\u011dustan kodon","redo_desc":"Refari (Ctrl Y)","undo_desc":"Malfari (Ctrl Z)","numlist_desc":"Numera listo","bullist_desc":"Bula listo","striketrough_desc":"Strekita","underline_desc":"Substrekita (Ctrl U)","italic_desc":"Kursiva (Ctrl I)","bold_desc":"Grasa (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/es.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/es.js
new file mode 100644
index 000000000..0fc0311e3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/es.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('es.simple',{"cleanup_desc":"Limpiar c\u00f3digo basura","redo_desc":"Rehacer (Ctrl+Y)","undo_desc":"Deshacer (Ctrl+Z)","numlist_desc":"Lista ordenada","bullist_desc":"Lista desordenada","striketrough_desc":"Tachado","underline_desc":"Subrayado (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negrita (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/et.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/et.js
new file mode 100644
index 000000000..ec105a538
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/et.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('et.simple',{"cleanup_desc":"Puhasta segane kood","redo_desc":"Tee uuesti (Ctrl+Y)","undo_desc":"V\u00f5ta tagasi (Ctrl+Z)","numlist_desc":"Korrap\u00e4rane loetelu","bullist_desc":"Ebakorrap\u00e4rane loetelu","striketrough_desc":"L\u00e4bijoonitud","underline_desc":"Allajoonitud (Ctrl+U)","italic_desc":"Kursiiv (Ctrl+I)","bold_desc":"Rasvane (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/eu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/eu.js
new file mode 100644
index 000000000..0b78f7c75
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/eu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('eu.simple',{"cleanup_desc":"Kode zikina garbitu","redo_desc":"Berregin (Ctrl+Y)","undo_desc":"Desegin (Ctrl+Z)","numlist_desc":"Zerrenda ordenatua","bullist_desc":"Zerrenda","striketrough_desc":"Gainetik marra duena","underline_desc":"Azpimarratua (Ctrl+U)","italic_desc":"Etzana (Ctrl+I)","bold_desc":"Beltza (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fa.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fa.js
new file mode 100644
index 000000000..7351bb256
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fa.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fa.simple',{"cleanup_desc":"\u067e\u0627\u06a9 \u0633\u0627\u0632\u06cc \u06a9\u062f \u0647\u0627\u06cc \u0628\u0647\u0645 \u062e\u0648\u0631\u062f\u0647","redo_desc":"\u0631\u0641\u062a\u0646 \u0628\u0647 \u0639\u0645\u0644 \u0628\u0639\u062f (Ctrl Y)","undo_desc":"\u0628\u0627\u0632\u06af\u0634\u062a \u0628\u0647 \u0639\u0645\u0644 \u0642\u0628\u0644 (Ctrl Z)","numlist_desc":"\u0644\u06cc\u0633\u062a \u0645\u0631\u062a\u0628","bullist_desc":"\u0644\u06cc\u0633\u062a \u0646\u0627\u0645\u0631\u062a\u0628","striketrough_desc":"\u062e\u0637 \u0648\u0633\u0637","underline_desc":"\u0645\u062a\u0646 \u0632\u06cc\u0631 \u062e\u0637 \u062f\u0627\u0631 (Ctrl+U)","italic_desc":"\u0645\u062a\u0646 \u0645\u0648\u0631\u0628 (Ctrl+I)","bold_desc":"\u0645\u062a\u0646 \u0636\u062e\u06cc\u0645 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fi.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fi.js
new file mode 100644
index 000000000..6ca1d8d10
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fi.simple',{"cleanup_desc":"Siisti sekainen koodi","redo_desc":"Tee uudestaan (Ctrl+Y)","undo_desc":"Peru (Ctrl+Z)","numlist_desc":"J\u00e4rjestetty lista","bullist_desc":"J\u00e4rjest\u00e4m\u00e4t\u00f6n lista","striketrough_desc":"Yliviivaus","underline_desc":"Alleviivaus (Ctrl+U)","italic_desc":"Kursivointi (Ctrl+I)","bold_desc":"Lihavointi (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fr.js
new file mode 100644
index 000000000..ebe964e1e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/fr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('fr.simple',{"cleanup_desc":"Nettoyer le code","redo_desc":"R\u00e9tablir (Ctrl+Y)","undo_desc":"Annuler (Ctrl+Z)","numlist_desc":"Liste num\u00e9rot\u00e9e","bullist_desc":"Liste \u00e0 puces","striketrough_desc":"Barr\u00e9","underline_desc":"Soulign\u00e9 (Ctrl+U)","italic_desc":"Italique (Ctrl+I)","bold_desc":"Gras (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/gl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/gl.js
new file mode 100644
index 000000000..bc7d20596
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/gl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gl.simple',{"cleanup_desc":"Limpar lixo no c\u00f3digo","redo_desc":"Re-facer (Ctrl+Y)","undo_desc":"Desfacer (Ctrl+Z)","numlist_desc":"Lista ordenada","bullist_desc":"Lista desordenada","striketrough_desc":"Tachado","underline_desc":"Suli\u00f1ado (Ctrl+U)","italic_desc":"Cursiva (Ctrl+I)","bold_desc":"Negri\u00f1a (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/gu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/gu.js
new file mode 100644
index 000000000..6cd2c0c82
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/gu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('gu.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/he.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/he.js
new file mode 100644
index 000000000..ade41a112
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/he.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('he.simple',{"cleanup_desc":"\u05e0\u05e7\u05d4 \u05e7\u05d5\u05d3","redo_desc":" (Ctrl+Y)","undo_desc":"\u05d1\u05d9\u05d8\u05d5\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 (Ctrl+Z)","numlist_desc":"\u05de\u05e1\u05e4\u05d5\u05e8","bullist_desc":"\u05ea\u05d1\u05dc\u05d9\u05d8\u05d9\u05dd","striketrough_desc":"\u05e7\u05d5 \u05d7\u05d5\u05e6\u05d4","underline_desc":"\u05e7\u05d5 \u05ea\u05d7\u05ea\u05d5\u05df (Ctrl+U)","italic_desc":"\u05e0\u05d8\u05d5\u05d9 (Ctrl+I)","bold_desc":"\u05de\u05d5\u05d3\u05d2\u05e9 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hi.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hi.js
new file mode 100644
index 000000000..88c14c539
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hi.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hr.js
new file mode 100644
index 000000000..38c59b0a3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hr.simple',{"cleanup_desc":"Po\u010disti neuredni kod","redo_desc":"Ponovi (Ctrl+Y)","undo_desc":"Poni\u0161ti (Ctrl+Z)","numlist_desc":"Numerirana lista","bullist_desc":"Nenumerirana lista","striketrough_desc":"Precrtano","underline_desc":"Podcrtano (Ctrl U)","italic_desc":"Uko\u0161eno (Ctrl I)","bold_desc":"Podebljano (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hu.js
new file mode 100644
index 000000000..169722a44
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hu.simple',{"cleanup_desc":"Minden form\u00e1z\u00e1s elt\u00e1vol\u00edt\u00e1sa","redo_desc":"M\u00e9gis v\u00e9grehajt (Ctrl+Y)","undo_desc":"Visszavon\u00e1s (Ctrl+Z)","numlist_desc":"Rendezett lista","bullist_desc":"Rendezetlen lista","striketrough_desc":"\u00c1th\u00fazott","underline_desc":"Al\u00e1h\u00fazott (Ctrl+U)","italic_desc":"D\u0151lt (Ctrl+I)","bold_desc":"F\u00e9lk\u00f6v\u00e9r (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hy.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hy.js
new file mode 100644
index 000000000..f31febe8b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/hy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('hy.simple',{"cleanup_desc":"\u0540\u0565\u057c\u0561\u0581\u0576\u0565\u056c \u0561\u057e\u0565\u056c\u0578\u0580\u0564 \u056f\u0578\u0564\u0568","redo_desc":"\u0531\u057c\u0561\u057b (Ctrl + Y)","undo_desc":"\u0535\u057f (Ctrl + Z)","numlist_desc":"\u0551\u0561\u0576\u056f\u055d \u0570\u0561\u0574\u0561\u0580\u0561\u056f\u0561\u056c\u057e\u0561\u056e","bullist_desc":"\u0551\u0561\u0576\u056f","striketrough_desc":"\u0531\u0580\u057f\u0561\u0563\u056e\u057e\u0561\u056e","underline_desc":"\u0538\u0576\u0564\u0563\u056e\u057e\u0561\u056e (Ctrl + U)","italic_desc":"\u0547\u0565\u0572 (Ctrl + I)","bold_desc":"\u0540\u0561\u057d\u057f (Ctrl + B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ia.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ia.js
new file mode 100644
index 000000000..a3f82af7a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ia.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ia.simple',{"cleanup_desc":"\u5220\u9664\u5197\u4f59\u7801","redo_desc":"\u6062\u590d (Ctrl+Y)","undo_desc":"\u64a4\u9500 (Ctrl+Z)","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u6e05\u5355\u7b26\u53f7","striketrough_desc":"\u4e2d\u5212\u7ebf","underline_desc":"\u5e95\u7ebf (Ctrl+U)","italic_desc":"\u659c\u4f53(Ctrl+I)","bold_desc":"\u7c97\u4f53(Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/id.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/id.js
new file mode 100644
index 000000000..ef37c5e04
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/id.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('id.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/is.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/is.js
new file mode 100644
index 000000000..f4023f8c5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/is.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('is.simple',{"cleanup_desc":"Hreinsa ruslk\u00f3\u00f0a","redo_desc":"Endurtaka (Ctrl+Y)","undo_desc":"Taka til baka (Ctrl+Z)","numlist_desc":"N\u00famera\u00f0ur listi","bullist_desc":"B\u00f3lulisti","striketrough_desc":"Yfirstrika\u00f0","underline_desc":"Undirstrika\u00f0 (Ctrl+U)","italic_desc":"Sk\u00e1letra\u00f0 (Ctrl+I)","bold_desc":"Feitletra\u00f0 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/it.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/it.js
new file mode 100644
index 000000000..e0c45ed54
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/it.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('it.simple',{"cleanup_desc":"Pulisci codice disordinato","redo_desc":"Ripristina (Ctrl+Y)","undo_desc":"Annulla (Ctrl+Z)","numlist_desc":"Lista ordinata","bullist_desc":"Lista non ordinata","striketrough_desc":"Barrato","underline_desc":"Sottolineato (Ctrl+U)","italic_desc":"Corsivo (Ctrl+I)","bold_desc":"Grassetto (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ja.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ja.js
new file mode 100644
index 000000000..b3acbb546
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ja.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ja.simple',{"cleanup_desc":"\u4e71\u96d1\u306a\u30b3\u30fc\u30c9\u3092\u6574\u5f62","redo_desc":"\u3084\u308a\u76f4\u3059 (Ctrl+Y)","undo_desc":"\u5143\u306b\u623b\u3059 (Ctrl+Z)","numlist_desc":"\u756a\u53f7\u3064\u304d\u30ea\u30b9\u30c8","bullist_desc":"\u756a\u53f7\u306a\u3057\u30ea\u30b9\u30c8","striketrough_desc":"\u53d6\u308a\u6d88\u3057\u7dda","underline_desc":"\u4e0b\u7dda (Ctrl+U)","italic_desc":"\u659c\u4f53 (Ctrl+I)","bold_desc":"\u592a\u5b57 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ka.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ka.js
new file mode 100644
index 000000000..5932df889
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ka.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ka.simple',{"cleanup_desc":"\u10d6\u10d4\u10d3\u10db\u10d4\u10e2\u10d8 \u10d9\u10dd\u10d3\u10d8\u10e1 \u10db\u10dd\u10ea\u10d8\u10da\u10d4\u10d1\u10d0","redo_desc":"\u10d3\u10d0\u10d1\u10e0\u10e3\u10dc\u10d4\u10d1\u10d0 (Ctrl+Y)","undo_desc":"\u10d2\u10d0\u10e3\u10d6\u10db\u10d4\u10d1\u10d0 (Ctrl+Z)","numlist_desc":"\u10d3\u10d0\u10dc\u10dd\u10db\u10e0\u10d8\u10da\u10d8 \u10e1\u10d8\u10d0","bullist_desc":"\u10db\u10d0\u10e0\u10d9\u10d8\u10e0\u10d4\u10d1\u10e3\u10da\u10d8 \u10e1\u10d8\u10d0","striketrough_desc":"\u10d2\u10d0\u10d3\u10d0\u10ee\u10d0\u10d6\u10e3\u10da\u10d8","underline_desc":"\u10db\u10dd\u10ee\u10d0\u10d6\u10e3\u10da\u10d8 (Ctrl+U)","italic_desc":"\u10d3\u10d0\u10ee\u10e0\u10d8\u10da\u10d8 (Ctrl+I)","bold_desc":"\u10e1\u10e5\u10d4\u10da\u10d8 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/kl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/kl.js
new file mode 100644
index 000000000..4d4ae8bd5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/kl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kl.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/km.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/km.js
new file mode 100644
index 000000000..bc1b723cb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/km.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('km.simple',{"cleanup_desc":"\u179f\u17c6\u17a2\u17b6\u178f\u1780\u17bc\u178a\u179f\u17d2\u1798\u17bb\u1782\u179f\u17d2\u1798\u17b6\u1789","redo_desc":"\u1792\u17d2\u179c\u17be\u179c\u17b7\u1789 (Ctrl+Y)","undo_desc":"\u1798\u17b7\u1793\u1792\u17d2\u179c\u17be\u179c\u17b7\u1789 (Ctrl+Z)","numlist_desc":"\u1794\u1789\u17d2\u1787\u17b8\u1798\u17b6\u1793\u179b\u17c6\u178a\u17b6\u1794\u17cb","bullist_desc":"\u1794\u1789\u17d2\u1787\u17b8\u1782\u17d2\u1798\u17b6\u1793\u179b\u17c6\u178a\u17b6\u1794\u17cb","striketrough_desc":"\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1786\u17bc\u178f","underline_desc":"\u1782\u17bc\u179f\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb\u1780\u17d2\u179a\u17c4\u1798 (Ctrl+U)","italic_desc":"\u1791\u17d2\u179a\u17c1\u178f (Ctrl+I)","bold_desc":"\u178a\u17b7\u178f (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ko.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ko.js
new file mode 100644
index 000000000..6012a7107
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ko.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ko.simple',{"cleanup_desc":"\ubcf5\uc7a1\ud55c \ucf54\ub4dc \uc815\ub9ac","redo_desc":"\uc7ac\uc2e4\ud589(Ctrl Y)","undo_desc":"\uc2e4\ud589 \ucde8\uc18c(Ctrl Z)","numlist_desc":"\ubc88\ud638 \ubaa9\ub85d \uc0bd\uc785/\uc81c\uac70","bullist_desc":"\uae30\ud638 \ubaa9\ub85d \uc0bd\uc785/\uc81c\uac70","striketrough_desc":"\ucde8\uc18c\uc120","underline_desc":"\ubc11\uc904(Ctrl+U)","italic_desc":"\uae30\uc6b8\uc778 \uae00\uaf34(Ctrl I)","bold_desc":"\uad75\uc740 \uae00\uaf34(Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/kz.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/kz.js
new file mode 100644
index 000000000..aa272e50d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/kz.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('kz.simple',{"cleanup_desc":"Cleanup Messy Code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lb.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lb.js
new file mode 100644
index 000000000..9c8ea4dc4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lb.simple',{"cleanup_desc":"Quellcode botzen","redo_desc":"Widderhuelen (Strg+Y)","undo_desc":"R\u00e9ckg\u00e4ngeg (Strg+Z)","numlist_desc":"Sort\u00e9iert L\u00ebscht","bullist_desc":"Onsort\u00e9iert L\u00ebscht","striketrough_desc":"Duerchgestrach","underline_desc":"\u00cbnnerstrach (Strg+U)","italic_desc":"Kursiv (Strg+I)","bold_desc":"Fett (Strg+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lt.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lt.js
new file mode 100644
index 000000000..97d45a672
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lt.simple',{"cleanup_desc":"I\u0161valyti netvarking\u0105 kod\u0105","redo_desc":"Gr\u0105\u017einti (Ctrl+Y)","undo_desc":"At\u0161aukti (Ctrl+Z)","numlist_desc":"Sunumeruotas s\u0105ra\u0161as","bullist_desc":"Nesunumeruotas s\u0105ra\u0161as","striketrough_desc":"Perbrauktas","underline_desc":"Pabrauktas (Ctrl+U)","italic_desc":"Kursyvas (Ctrl+I)","bold_desc":"Pusjuodis (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lv.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lv.js
new file mode 100644
index 000000000..12f7db224
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/lv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('lv.simple',{"cleanup_desc":"Izt\u012br\u012bt nek\u0101rt\u012bgu kodu","redo_desc":"Atatsaukt (Ctrl+Y)","undo_desc":"Atsaukt (Ctrl+Z)","numlist_desc":"Numur\u0113ts saraksts","bullist_desc":"Nenumur\u0113ts saraksts","striketrough_desc":"P\u0101rsv\u012btrojums","underline_desc":"Pasv\u012btrojums (Ctrl+U)","italic_desc":"Sl\u012bpraksts (Ctrl+I)","bold_desc":"Treknraksts (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/mk.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/mk.js
new file mode 100644
index 000000000..c2a28dfe1
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/mk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mk.simple',{"cleanup_desc":"\u0421\u0440\u0435\u0434\u0438 \u0433\u043e \u043a\u043e\u0434\u043e\u0442","redo_desc":"\u041f\u043e\u0432\u0442\u043e\u0440\u0438 (Ctrl Y)","undo_desc":"\u0412\u0440\u0430\u0442\u0438 (Ctrl Z)","numlist_desc":"\u0412\u043d\u0435\u0441\u0438/\u043e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 \u043d\u0443\u043c\u0435\u0440\u0438\u0440\u0430\u043d\u0430 \u043b\u0438\u0441\u0442\u0430","bullist_desc":"\u0412\u043d\u0435\u0441\u0438/\u043e\u0434\u0441\u0442\u0440\u0430\u043d\u0438 bullet \u043b\u0438\u0441\u0442\u0430","striketrough_desc":"\u041f\u0440\u0435\u0446\u0440\u0442\u0430\u043d\u043e","underline_desc":"\u041f\u043e\u0434\u0432\u043b\u0435\u0447\u0435\u043d\u043e (Ctrl U)","italic_desc":"\u0417\u0430\u043a\u043e\u0441\u0435\u043d\u043e (Ctrl I)","bold_desc":"\u0417\u0434\u0435\u0431\u0435\u043b\u0435\u043d\u043e (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ml.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ml.js
new file mode 100644
index 000000000..7ea4348bd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ml.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ml.simple',{"cleanup_desc":"\u0d35\u0d43\u0d24\u0d4d\u0d24\u0d3f\u0d2f\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15","redo_desc":"\u0d06\u0d35\u0d30\u0d4d\u200d\u0d24\u0d4d\u0d24\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15 (Ctrl+Y)","undo_desc":"\u0d2a\u0d3f\u0d28\u0d4d\u200d\u0d35\u0d32\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15 (Ctrl+Z)","numlist_desc":"\u0d15\u0d4d\u0d30\u0d2e\u0d36\u0d4d\u0d30\u0d47\u0d23\u0d3f","bullist_desc":"\u0d15\u0d4d\u0d30\u0d2e\u0d2e\u0d3f\u0d32\u0d4d\u0d32\u0d3e \u0d36\u0d4d\u0d30\u0d47\u0d23\u0d3f","striketrough_desc":"\u0d35\u0d46\u0d1f\u0d4d\u0d1f\u0d3f\u0d2f ","underline_desc":"\u0d05\u0d1f\u0d3f\u0d35\u0d30 (Ctrl+U)","italic_desc":"\u0d1a\u0d46\u0d30\u0d3f\u0d1e\u0d4d\u0d1e (Ctrl+I)","bold_desc":"\u0d15\u0d1f\u0d4d\u0d1f\u0d3f\u0d2f\u0d41\u0d33\u0d4d\u0d33 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/mn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/mn.js
new file mode 100644
index 000000000..b3862973d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/mn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('mn.simple',{"cleanup_desc":"\u042d\u0445 \u043a\u043e\u0434\u044b\u0433 \u0446\u044d\u0432\u044d\u0440\u043b\u044d\u0445","redo_desc":"\u0426\u0443\u0446\u043b\u0430\u0445 (Ctrl+Y)","undo_desc":"\u0411\u0443\u0446\u0430\u0430\u0445 (Ctrl+Z)","numlist_desc":"\u0414\u0443\u0433\u0430\u0430\u0440\u0442 \u0442\u043e\u043e\u0447\u0438\u043b\u0442","bullist_desc":"\u0422\u043e\u043e\u0447\u0438\u043b\u0442","striketrough_desc":"\u0414\u0430\u0440\u0441\u0430\u043d","underline_desc":"\u0414\u043e\u043e\u0433\u0443\u0443\u0440 \u0437\u0443\u0440\u0430\u0430\u0441 (Ctrl+U)","italic_desc":"\u041d\u0430\u043b\u0443\u0443 (Ctrl+I)","bold_desc":"\u0422\u043e\u0434 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ms.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ms.js
new file mode 100644
index 000000000..e097ab07a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ms.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ms.simple',{"cleanup_desc":"Bersihkan kod yang bersepah","redo_desc":"Buat semula (Ctrl+Y)","undo_desc":"Buat asal (Ctrl+Z)","numlist_desc":"Senarai tertib","bullist_desc":"Senarai tidak tertib","striketrough_desc":"Garis tengah","underline_desc":"Garis bawah (Ctrl+U)","italic_desc":"Condong (Ctrl+I)","bold_desc":"Tebal (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/my.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/my.js
new file mode 100644
index 000000000..97835fdc8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/my.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('my.simple',{"cleanup_desc":"\u101b\u103e\u102f\u1015\u103a\u1015\u103d\u1031\u1014\u1031\u101e\u102c \u1000\u102f\u1010\u103a\u1019\u103b\u102c\u1038\u1000\u102d\u102f \u101b\u103e\u1004\u103a\u1038","redo_desc":"\u103c\u1015\u1014\u103a\u101c\u102f\u1015\u103a (Ctrl Y)","undo_desc":"\u1019\u101c\u102f\u1015\u103a (Ctrl Z)","numlist_desc":"\u1021\u1019\u103e\u1010\u103a\u1005\u1009\u103a\u1010\u1015\u103a\u1031\u101e\u102c \u1005\u102c\u101b\u1004\u103a\u1038","bullist_desc":"\u1021\u1019\u103e\u1010\u103a\u1005\u1009\u103a\u1019\u1010\u1015\u103a\u1031\u101e\u102c \u1005\u102c\u101b\u1004\u103a\u1038","striketrough_desc":"\u103c\u1016\u1010\u103a\u1019\u103b\u1009\u103a\u1038","underline_desc":"\u1031\u1021\u102c\u1000\u103a\u1019\u103b\u1009\u103a\u1038 (Ctrl U)","italic_desc":"\u1005\u102c\u101c\u1036\u102f\u1038\u1031\u1005\u102c\u1004\u103a\u1038 (Ctrl I)","bold_desc":"\u1005\u102c\u101c\u1036\u102f\u1038\u1021\u1011\u1030 (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nb.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nb.js
new file mode 100644
index 000000000..178bae8fa
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nb.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nb.simple',{"cleanup_desc":"Rens ukurant kode","redo_desc":"Gj\u00f8r om (Ctrl + Y)","undo_desc":"Angre (Ctrl+Z)","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","striketrough_desc":"Gjennomstreking","underline_desc":"Understreking","italic_desc":"Kursiv","bold_desc":"Fet"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nl.js
new file mode 100644
index 000000000..9f105d507
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nl.simple',{"cleanup_desc":"Code opruimen","redo_desc":"Herhalen (Ctrl+Y)","undo_desc":"Ongedaan maken (Ctrl+Z)","numlist_desc":"Nummering","bullist_desc":"Opsommingstekens","striketrough_desc":"Doorhalen","underline_desc":"Onderstrepen (Ctrl+U)","italic_desc":"Cursief (Ctrl+I)","bold_desc":"Vet (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nn.js
new file mode 100644
index 000000000..8b81334bb
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/nn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('nn.simple',{"cleanup_desc":"Rens grisete kode","redo_desc":"Gjer om","undo_desc":"Angre","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","striketrough_desc":"Gjennomstreking","underline_desc":"Understreking","italic_desc":"Kursiv","bold_desc":"Feit"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/no.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/no.js
new file mode 100644
index 000000000..9523fd6f2
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/no.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('no.simple',{"cleanup_desc":"Rense grisete kode","redo_desc":"Gj\u00f8r om","undo_desc":"Angre","numlist_desc":"Nummerliste","bullist_desc":"Punktliste","striketrough_desc":"Gjennomstreke","underline_desc":"Understreke (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/pl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/pl.js
new file mode 100644
index 000000000..e48d5df13
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/pl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pl.simple',{"cleanup_desc":"Wyczy\u015b\u0107 nieuporz\u0105dkowany kod","redo_desc":"Pon\u00f3w (Ctrl+Y)","undo_desc":"Cofnij (Ctrl+Z)","numlist_desc":"Lista numerowana","bullist_desc":"Lista nienumerowana","striketrough_desc":"Przekre\u015blenie","underline_desc":"Podkre\u015blenie (Ctrl+U)","italic_desc":"Kursywa (Ctrl+I)","bold_desc":"Pogrubienie (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ps.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ps.js
new file mode 100644
index 000000000..4070f0907
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ps.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ps.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/pt.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/pt.js
new file mode 100644
index 000000000..955201d2a
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/pt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('pt.simple',{"cleanup_desc":"Limpar c\u00f3digo incorreto","redo_desc":"Refazer (Ctrl+Y)","undo_desc":"Desfazer (Ctrl+Z)","numlist_desc":"Lista ordenada","bullist_desc":"Lista n\u00e3o-ordenada","striketrough_desc":"Riscado","underline_desc":"Sublinhado (Ctrl+U)","italic_desc":"It\u00e1lico (Ctrl+I)","bold_desc":"Negrito (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ro.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ro.js
new file mode 100644
index 000000000..3e3ef32a4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ro.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ro.simple',{"cleanup_desc":"Cur\u0103\u021b\u0103 codul","redo_desc":"Ref\u0103 (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"List\u0103 ordonat\u0103","bullist_desc":"List\u0103 neordonat\u0103","striketrough_desc":"T\u0103iat","underline_desc":"Subliniat (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"\u00cengro\u0219at (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ru.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ru.js
new file mode 100644
index 000000000..44970b2e9
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ru.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ru.simple',{"cleanup_desc":"\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0439 \u043a\u043e\u0434","redo_desc":"\u0412\u0435\u0440\u043d\u0443\u0442\u044c (Ctrl+Y)","undo_desc":"\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c (Ctrl+Z)","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","striketrough_desc":"\u0417\u0430\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439","underline_desc":"\u041f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044b\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u041f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u044b\u0439 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sc.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sc.js
new file mode 100644
index 000000000..264fb70e3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sc.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sc.simple',{"cleanup_desc":"\u6e05\u9664\u591a\u4f59\u4ee3\u7801","redo_desc":"\u91cd\u505a(Ctrl+Y)","undo_desc":"\u64a4\u9500(Ctrl+Z)","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u4e13\u6848\u7b26\u53f7","striketrough_desc":"\u5220\u9664\u7ebf","underline_desc":"\u5e95\u7ebf(Ctrl+U)","italic_desc":"\u659c\u4f53(Ctrl+I)","bold_desc":"\u9ed1\u4f53(Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/se.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/se.js
new file mode 100644
index 000000000..22a0c300e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/se.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('se.simple',{"cleanup_desc":"St\u00e4da upp i k\u00e4llkoden","redo_desc":"G\u00f6r om (Ctrl+Y)","undo_desc":"\u00c5ngra (Ctrl+Z)","numlist_desc":"Nummerlista","bullist_desc":"Punktlista","striketrough_desc":"Genomstruken","underline_desc":"Understruken (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/si.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/si.js
new file mode 100644
index 000000000..8f02c368b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/si.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('si.simple',{"cleanup_desc":"\u0dc0\u0dd0\u0dbb\u0daf\u0dd2 \u0d9a\u0dda\u0dad \u0d89\u0dc0\u0dad\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1","redo_desc":"\u0db1\u0dd0\u0dc0\u0dad \u0d9a\u0dbb\u0db1\u0dc0\u0dcf (Ctrl+Y)","undo_desc":"\u0db1\u0dd2\u0dc1\u0dca\u0db4\u0dca\u200d\u0dbb\u0db7 \u0d9a\u0dbb\u0db1\u0dca\u0db1 (Ctrl+Z)","numlist_desc":"\u0d9a\u0dca\u200d\u0dbb\u0db8\u0dcf\u0db1\u0dd4\u0d9a\u0dd6\u0dbd \u0dbd\u0dd0\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","bullist_desc":"\u0d85\u0d9a\u0dca\u200d\u0dbb\u0db8\u0dcf\u0db1\u0dd4\u0d9a\u0dd6\u0dbd \u0dbd\u0dd0\u0dba\u0dd2\u0dc3\u0dca\u0dad\u0dd4\u0dc0","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sk.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sk.js
new file mode 100644
index 000000000..76a87f88f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sk.simple',{"cleanup_desc":"Vy\u010disti\u0165 k\u00f3d","redo_desc":"Znovu (Ctrl+Y)","undo_desc":"Sp\u00e4\u0165 (Ctrl+Z)","numlist_desc":"\u010c\u00edslovan\u00fd zoznam","bullist_desc":"Zoznam s odr\u00e1\u017ekami","striketrough_desc":"Pre\u010diarknut\u00e9","underline_desc":"Pod\u010diarknut\u00e9 (Ctrl+U)","italic_desc":"Kurz\u00edva (Ctrl+I)","bold_desc":"Tu\u010dn\u00e9 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sl.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sl.js
new file mode 100644
index 000000000..5bd108bc4
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sl.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sl.simple',{"cleanup_desc":"Pre\u010disti kodo","redo_desc":"Uveljavi (Ctrl+Y)","undo_desc":"Razveljavi (Ctrl+Z)","numlist_desc":"Na\u0161tevanje","bullist_desc":"Alineje","striketrough_desc":"Pre\u010drtano","underline_desc":"Pod\u010drtano (Ctrl+U)","italic_desc":"Po\u0161evno (Ctrl+I)","bold_desc":"Krepko (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sq.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sq.js
new file mode 100644
index 000000000..3b01cd6a7
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sq.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sq.simple',{"cleanup_desc":"Pastro kodin","redo_desc":"Rib\u00ebj (Ctrl+Y)","undo_desc":"\u00c7b\u00ebj (Ctrl+Z)","numlist_desc":"List\u00eb e rregullt","bullist_desc":"List\u00eb e parregullt","striketrough_desc":"Vij\u00eb n\u00eb mes","underline_desc":"I N\u00ebnvizuar (Ctrl+U)","italic_desc":"I Pjerr\u00ebt (Ctrl+I)","bold_desc":"I Trash\u00eb (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sr.js
new file mode 100644
index 000000000..0e17e5b8e
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sr.simple',{"cleanup_desc":"O\u010disti kod","redo_desc":"Poni\u0161ti opoziv (Ctrl Y)","undo_desc":"Opozovi (Ctrl+Z)","numlist_desc":"Ure\u0111eno nabrajanje","bullist_desc":"Neure\u0111eno nabrajanje","striketrough_desc":"Precrtano","underline_desc":"Podvu\u010deno (Ctrl U)","italic_desc":"Isko\u0161eno (Ctrl I)","bold_desc":"Podebljno (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sv.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sv.js
new file mode 100644
index 000000000..4824f5815
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sv.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sv.simple',{"cleanup_desc":"St\u00e4da upp i k\u00e4llkoden","redo_desc":"G\u00f6r om (Ctrl+Y)","undo_desc":"\u00c5\u0085ngra (Ctrl+Z)","numlist_desc":"Nummerlista","bullist_desc":"Punktlista","striketrough_desc":"Genomstruken","underline_desc":"Understruken (Ctrl+U)","italic_desc":"Kursiv (Ctrl+I)","bold_desc":"Fet (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sy.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sy.js
new file mode 100644
index 000000000..3a80aa68d
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/sy.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('sy.simple',{"cleanup_desc":"Cleanup Messy Code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Insert/Remove Numbered List","bullist_desc":"Insert/Remove Bulleted List","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ta.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ta.js
new file mode 100644
index 000000000..941af1784
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ta.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ta.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/te.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/te.js
new file mode 100644
index 000000000..c1c9a2a77
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/te.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('te.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/th.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/th.js
new file mode 100644
index 000000000..241d1ee21
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/th.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('th.simple',{"cleanup_desc":"\u0e25\u0e49\u0e32\u0e07\u0e23\u0e2b\u0e31\u0e2a\u0e02\u0e22\u0e30","redo_desc":"\u0e17\u0e33\u0e0b\u0e49\u0e33 (Ctrl+Y)","undo_desc":"\u0e22\u0e01\u0e40\u0e25\u0e34\u0e01 (Ctrl+Z)","numlist_desc":"\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e15\u0e31\u0e27\u0e40\u0e25\u0e02","bullist_desc":"\u0e25\u0e33\u0e14\u0e31\u0e1a\u0e23\u0e32\u0e22\u0e01\u0e32\u0e23","striketrough_desc":"\u0e02\u0e35\u0e14\u0e06\u0e48\u0e32","underline_desc":"\u0e15\u0e31\u0e27\u0e40\u0e02\u0e35\u0e14\u0e40\u0e2a\u0e49\u0e19\u0e43\u0e15\u0e49 (Ctrl+U)","italic_desc":"\u0e15\u0e31\u0e27\u0e40\u0e2d\u0e35\u0e22\u0e07 (Ctrl+I)","bold_desc":"\u0e15\u0e31\u0e27\u0e2b\u0e19\u0e32 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tn.js
new file mode 100644
index 000000000..33951a7f5
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tn.simple',{"cleanup_desc":"Kolomaka khoudi e meragaraga ","redo_desc":"Dira-gape (Ctrl+Y)","undo_desc":"Dirolola(Ctrl+Z)","numlist_desc":"Tatelano e rulagantsweng","bullist_desc":"Tatelano e thakathakaneng","striketrough_desc":"Sega-bogare","underline_desc":"Sega-tselana (Ctrl+U)","italic_desc":"Tseketa (Ctrl+I)","bold_desc":"Bokima (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tr.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tr.js
new file mode 100644
index 000000000..01e458598
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tr.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tr.simple',{"cleanup_desc":"Da\u011f\u0131n\u0131k kodu temizle","redo_desc":"Yinele (Ctrl+Y)","undo_desc":"Geri al (Ctrl+Z)","numlist_desc":"S\u0131ral\u0131 liste","bullist_desc":"S\u0131ras\u0131z liste","striketrough_desc":"\u00dcst\u00fc \u00e7izili","underline_desc":"Alt\u0131 \u00e7izili (Ctrl+U)","italic_desc":"\u0130talik (Ctrl+I)","bold_desc":"Kal\u0131n (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tt.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tt.js
new file mode 100644
index 000000000..234795324
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tt.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tt.simple',{"cleanup_desc":"\u6e05\u9664\u5167\u5bb9","redo_desc":"\u91cd\u4f5c\u8b8a\u66f4 (Ctrl+Y)","undo_desc":"\u53d6\u6d88\u8b8a\u66f4 (Ctrl+Z)","numlist_desc":"\u7de8\u865f","bullist_desc":"\u6e05\u55ae\u7b26\u865f","striketrough_desc":"\u4e2d\u5283\u7dda","underline_desc":"\u5e95\u7dda (Ctrl+U)","italic_desc":"\u659c\u9ad4(Ctrl+I)","bold_desc":"\u7c97\u9ad4(Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tw.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tw.js
new file mode 100644
index 000000000..56adacd0f
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('tw.simple',{"cleanup_desc":"\u6e05\u9664\u683c\u5f0f","redo_desc":"\u53d6\u6d88\u5fa9\u539f (Ctrl+Y)","undo_desc":"\u5fa9\u539f (Ctrl+Z)","numlist_desc":"\u7de8\u865f\u5217\u8868","bullist_desc":"\u9805\u76ee\u5217\u8868","striketrough_desc":"\u522a\u9664\u7dda","underline_desc":"\u5e95\u7dda (Ctrl+U)","italic_desc":"\u659c\u9ad4 (Ctrl+I)","bold_desc":"\u7c97\u9ad4(Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/uk.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/uk.js
new file mode 100644
index 000000000..b016c9a43
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/uk.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('uk.simple',{"cleanup_desc":"\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0437\u0430\u0439\u0432\u0438\u0439 \u043a\u043e\u0434","redo_desc":"\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438 (Ctrl+Y)","undo_desc":"\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438 (Ctrl+Z)","numlist_desc":"\u041d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","bullist_desc":"\u041d\u0435\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a","striketrough_desc":"\u0417\u0430\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439","underline_desc":"\u041f\u0456\u0434\u043a\u0440\u0435\u0441\u043b\u0435\u043d\u0438\u0439 (Ctrl+U)","italic_desc":"\u041a\u0443\u0440\u0441\u0438\u0432 (Ctrl+I)","bold_desc":"\u0416\u0438\u0440\u043d\u0438\u0439 (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ur.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ur.js
new file mode 100644
index 000000000..9610ffdfd
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/ur.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('ur.simple',{"cleanup_desc":"Cleanup messy code","redo_desc":"Redo (Ctrl+Y)","undo_desc":"Undo (Ctrl+Z)","numlist_desc":"Ordered list","bullist_desc":"Unordered list","striketrough_desc":"Strikethrough","underline_desc":"Underline (Ctrl+U)","italic_desc":"Italic (Ctrl+I)","bold_desc":"Bold (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/vi.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/vi.js
new file mode 100644
index 000000000..a22b4bfa3
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/vi.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('vi.simple',{"cleanup_desc":"D\u1ecdn d\u1eb9p m\u00e3 l\u1ed9n x\u1ed9n","redo_desc":"Ti\u1ebfn t\u1edbi (Ctrl+Y)","undo_desc":"Tr\u1edf v\u1ec1 (Ctrl+Z)","numlist_desc":"Danh s\u00e1ch theo th\u1ee9 t\u1ef1","bullist_desc":"Danh s\u00e1ch kh\u00f4ng theo th\u1ee9 t\u1ef1","striketrough_desc":"G\u1ea1ch ngang","underline_desc":"G\u1ea1ch ch\u00e2n (Ctrl+U)","italic_desc":"Ch\u1eef nghi\u00eang (Ctrl+I)","bold_desc":"Ch\u1eef \u0111\u1eadm (Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh-cn.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh-cn.js
new file mode 100644
index 000000000..6e0c6954b
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh-cn.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-cn.simple',{"cleanup_desc":"\u6e05\u9664\u65e0\u7528\u4ee3\u7801","redo_desc":"\u6062\u590d(Ctrl Y)","undo_desc":"\u64a4\u9500(Ctrl Z)","numlist_desc":"\u7f16\u53f7\u5217\u8868","bullist_desc":"\u9879\u76ee\u5217\u8868","striketrough_desc":"\u5220\u9664\u7ebf","underline_desc":"\u4e0b\u5212\u7ebf(Ctrl U)","italic_desc":"\u659c\u4f53(Ctrl I)","bold_desc":"\u7c97\u4f53(Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh-tw.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh-tw.js
new file mode 100644
index 000000000..1629934c8
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh-tw.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh-tw.simple',{"cleanup_desc":"\u6574\u7406\u8cc7\u6599","redo_desc":"\u91cd\u4f86 (Ctrl Y)","undo_desc":"\u5fa9\u539f (Ctrl Z)","numlist_desc":"\u9805\u76ee\u7b26\u865f (\u6709\u6578\u5b57\u7684)","bullist_desc":"\u9805\u76ee\u7b26\u865f","striketrough_desc":"\u522a\u9664\u7dda","underline_desc":"\u5e95\u7dda (Ctrl U)","italic_desc":"\u659c\u7dda (Ctrl I)","bold_desc":"\u52a0\u7c97 (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh.js
new file mode 100644
index 000000000..1d0a25232
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zh.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zh.simple',{"cleanup_desc":"\u6e05\u9664\u683c\u5f0f","redo_desc":"\u53d6\u6d88\u5fa9\u539f (Ctrl Y)","undo_desc":"\u5fa9\u539f (Ctrl Z)","numlist_desc":"\u7de8\u865f\u5217\u8868","bullist_desc":"\u9805\u76ee\u5217\u8868","striketrough_desc":"\u522a\u9664\u7dda","underline_desc":"\u5e95\u7dda (Ctrl U)","italic_desc":"\u659c\u9ad4 (Ctrl I)","bold_desc":"\u7c97\u9ad4 (Ctrl B)"}); \ No newline at end of file
diff --git a/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zu.js b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zu.js
new file mode 100644
index 000000000..215607713
--- /dev/null
+++ b/mod/tinymce/vendor/tinymce/jscripts/tinymce_language_pack/themes/simple/langs/zu.js
@@ -0,0 +1 @@
+tinyMCE.addI18n('zu.simple',{"cleanup_desc":"\u6e05\u9664\u591a\u4f59\u4ee3\u7801","redo_desc":"\u91cd\u505a(Ctrl+Y)","undo_desc":"\u64a4\u9500(Ctrl+Z)","numlist_desc":"\u7f16\u53f7","bullist_desc":"\u4e13\u6848\u7b26\u53f7","striketrough_desc":"\u5220\u9664\u7ebf","underline_desc":"\u5e95\u7ebf(Ctrl+U)","italic_desc":"\u659c\u4f53(Ctrl+I)","bold_desc":"\u9ed1\u4f53(Ctrl+B)"}); \ No newline at end of file
diff --git a/mod/tinymce/views/default/js/tinymce.php b/mod/tinymce/views/default/js/tinymce.php
new file mode 100644
index 000000000..51e99c223
--- /dev/null
+++ b/mod/tinymce/views/default/js/tinymce.php
@@ -0,0 +1,90 @@
+elgg.provide('elgg.tinymce');
+
+/**
+ * Toggles the tinymce editor
+ *
+ * @param {Object} event
+ * @return void
+ */
+elgg.tinymce.toggleEditor = function(event) {
+ event.preventDefault();
+
+ var target = $(this).attr('href');
+ var id = $(target).attr('id');
+ if (!tinyMCE.get(id)) {
+ tinyMCE.execCommand('mceAddControl', false, id);
+ $(this).html(elgg.echo('tinymce:remove'));
+ } else {
+ tinyMCE.execCommand('mceRemoveControl', false, id);
+ $(this).html(elgg.echo('tinymce:add'));
+ }
+}
+
+/**
+ * TinyMCE initialization script
+ *
+ * You can find configuration information here:
+ * http://tinymce.moxiecode.com/wiki.php/Configuration
+ */
+elgg.tinymce.init = function() {
+
+ $('.tinymce-toggle-editor').live('click', elgg.tinymce.toggleEditor);
+
+ $('.elgg-input-longtext').parents('form').submit(function() {
+ tinyMCE.triggerSave();
+ });
+
+ tinyMCE.init({
+ mode : "specific_textareas",
+ editor_selector : "elgg-input-longtext",
+ theme : "advanced",
+ language : "<?php echo tinymce_get_site_language(); ?>",
+ plugins : "lists,spellchecker,autosave,fullscreen,paste",
+ relative_urls : false,
+ remove_script_host : false,
+ document_base_url : elgg.config.wwwroot,
+ theme_advanced_buttons1 : "bold,italic,underline,separator,strikethrough,bullist,numlist,undo,redo,link,unlink,image,blockquote,code,pastetext,pasteword,more,fullscreen",
+ theme_advanced_buttons2 : "",
+ theme_advanced_buttons3 : "",
+ theme_advanced_toolbar_location : "top",
+ theme_advanced_toolbar_align : "left",
+ theme_advanced_statusbar_location : "bottom",
+ theme_advanced_resizing : true,
+ theme_advanced_path : true,
+ width : "100%",
+ extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name|style],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
+ setup : function(ed) {
+ //show the number of words
+ ed.onLoadContent.add(function(ed, o) {
+ var strip = (tinyMCE.activeEditor.getContent()).replace(/(&lt;([^&gt;]+)&gt;)/ig,"");
+ var text = elgg.echo('tinymce:word_count') + strip.split(' ').length + ' ';
+ tinymce.DOM.setHTML(tinymce.DOM.get(tinyMCE.activeEditor.id + '_path_row'), text);
+ });
+
+ ed.onKeyUp.add(function(ed, e) {
+ var strip = (tinyMCE.activeEditor.getContent()).replace(/(&lt;([^&gt;]+)&gt;)/ig,"");
+ var text = elgg.echo('tinymce:word_count') + strip.split(' ').length + ' ';
+ tinymce.DOM.setHTML(tinymce.DOM.get(tinyMCE.activeEditor.id + '_path_row'), text);
+ });
+ },
+ content_css: elgg.config.wwwroot + 'mod/tinymce/css/elgg_tinymce.css'
+ });
+
+ // work around for IE/TinyMCE bug where TinyMCE loses insert carot
+ if ($.browser.msie) {
+ $(".embed-control").live('hover', function() {
+ var classes = $(this).attr('class');
+ var embedClass = classes.split(/[, ]+/).pop();
+ var textAreaId = embedClass.substr(embedClass.indexOf('embed-control-') + "embed-control-".length);
+
+ if (window.tinyMCE) {
+ var editor = window.tinyMCE.get(textAreaId);
+ if (elgg.tinymce.bookmark == null) {
+ elgg.tinymce.bookmark = editor.selection.getBookmark(2);
+ }
+ }
+ });
+ }
+}
+
+elgg.register_hook_handler('init', 'system', elgg.tinymce.init);
diff --git a/mod/tinymce/views/default/tinymce/css.php b/mod/tinymce/views/default/tinymce/css.php
new file mode 100644
index 000000000..b12cae82c
--- /dev/null
+++ b/mod/tinymce/views/default/tinymce/css.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * TinyMCE CSS
+ *
+ * Overrides on the default TinyMCE skin
+ * Gives the textarea and buttons rounded corners
+ *
+ * The rules are extra long in order to have enough
+ * weight to override the TinyMCE rules
+ */
+?>
+/* TinyMCE */
+.elgg-page .mceEditor table.mceLayout {
+ border: 1px solid #CCC;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.elgg-page table.mceLayout tr.mceFirst td.mceToolbar,
+.elgg-page table.mceLayout tr.mceLast td.mceStatusbar {
+ border-width: 0px;
+}
+.mceButton {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.mceLast .mceStatusbar {
+ padding-left: 5px;
+}
diff --git a/mod/tinymce/views/default/tinymce/embed_custom_insert_js.php b/mod/tinymce/views/default/tinymce/embed_custom_insert_js.php
new file mode 100644
index 000000000..a861a4035
--- /dev/null
+++ b/mod/tinymce/views/default/tinymce/embed_custom_insert_js.php
@@ -0,0 +1,14 @@
+ if (window.tinyMCE) {
+ var editor = window.tinyMCE.get(textAreaId);
+
+ if (editor) {
+
+ // work around for IE/TinyMCE bug where TinyMCE loses insert carot
+ if ($.browser.msie) {
+ editor.focus();
+ editor.selection.moveToBookmark(elgg.tinymce.bookmark);
+ }
+
+ editor.execCommand("mceInsertContent", true, content);
+ }
+ }
diff --git a/mod/tinymce/views/default/tinymce/init.php b/mod/tinymce/views/default/tinymce/init.php
new file mode 100644
index 000000000..35dd71613
--- /dev/null
+++ b/mod/tinymce/views/default/tinymce/init.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * Initialize the TinyMCE script
+ */
+
+elgg_load_js('tinymce');
+elgg_load_js('elgg.tinymce'); \ No newline at end of file
diff --git a/mod/translation_editor b/mod/translation_editor
new file mode 160000
+Subproject 9d86955e6d8b6807578f5a9da0346ac1a146881
diff --git a/mod/twitter/graphics/thewire_speech_bubble.gif b/mod/twitter/graphics/thewire_speech_bubble.gif
new file mode 100644
index 000000000..d0e8606a1
--- /dev/null
+++ b/mod/twitter/graphics/thewire_speech_bubble.gif
Binary files differ
diff --git a/mod/twitter/graphics/twitter16px.png b/mod/twitter/graphics/twitter16px.png
new file mode 100644
index 000000000..de51c6953
--- /dev/null
+++ b/mod/twitter/graphics/twitter16px.png
Binary files differ
diff --git a/mod/twitter/languages/en.php b/mod/twitter/languages/en.php
new file mode 100644
index 000000000..11e745ba1
--- /dev/null
+++ b/mod/twitter/languages/en.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Twitter widget language file
+ */
+
+$english = array(
+ 'twitter:title' => 'Twitter',
+ 'twitter:info' => 'Display your latest tweets',
+ 'twitter:username' => 'Your twitter username',
+ 'twitter:num' => 'Number of tweets to show*',
+ 'twitter:visit' => 'visit my twitter',
+ 'twitter:notset' => 'This widget needs to be configured. To display your latest tweets, click the customize icon and fill in your Twitter username.',
+ 'twitter:invalid' => 'This widget is configured with an invalid Twitter username. Click the customize icon to correct it.',
+ 'twitter:apibug' => "*Due to a bug in the Twitter 1.0 API, you may see fewer tweets than you ask for.",
+);
+
+add_translation("en", $english);
diff --git a/mod/twitter/manifest.xml b/mod/twitter/manifest.xml
new file mode 100644
index 000000000..18fa8c957
--- /dev/null
+++ b/mod/twitter/manifest.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Twitter Widget</name>
+ <author>Core developers</author>
+ <version>1.7</version>
+ <category>bundled</category>
+ <category>widget</category>
+ <description>Elgg simple twitter widget</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+</plugin_manifest>
diff --git a/mod/twitter/start.php b/mod/twitter/start.php
new file mode 100644
index 000000000..b793eadf0
--- /dev/null
+++ b/mod/twitter/start.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Elgg twitter widget
+ * This plugin allows users to pull in their twitter feed to display on their profile
+ *
+ * @package ElggTwitter
+ */
+
+elgg_register_event_handler('init', 'system', 'twitter_init');
+
+function twitter_init() {
+ elgg_extend_view('css/elgg', 'twitter/css');
+ elgg_register_widget_type('twitter', elgg_echo('twitter:title'), elgg_echo('twitter:info'));
+}
diff --git a/mod/twitter/views/default/twitter/css.php b/mod/twitter/views/default/twitter/css.php
new file mode 100644
index 000000000..eb0cda98a
--- /dev/null
+++ b/mod/twitter/views/default/twitter/css.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * Elgg Twitter CSS
+ *
+ * @package ElggTwitter
+ */
+?>
+
+#twitter_widget {
+ margin:0 10px 0 10px;
+}
+#twitter_widget ul {
+ margin:0;
+ padding:0;
+}
+#twitter_widget li {
+ list-style-image:none;
+ list-style-position:outside;
+ list-style-type:none;
+ margin:0 0 5px 0;
+ padding:0;
+ overflow-x: hidden;
+ border: 2px solid #dedede;
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+}
+#twitter_widget li span {
+ color:#666666;
+ background:white;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ padding:5px;
+ display:block;
+}
+p.visit_twitter a {
+ background:url(<?php echo elgg_get_site_url(); ?>mod/twitter/graphics/twitter16px.png) left no-repeat;
+ padding:0 0 0 20px;
+ margin:0;
+}
+p.twitter_username .input-text {
+ width:200px;
+}
+.visit_twitter {
+ background:white;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ padding:2px;
+ margin:0 0 5px 0;
+}
+#twitter_widget li > a {
+ display:block;
+ margin:0 0 0 4px;
+}
+#twitter_widget li span a {
+ display:inline !important;
+} \ No newline at end of file
diff --git a/mod/twitter/views/default/widgets/twitter/content.php b/mod/twitter/views/default/widgets/twitter/content.php
new file mode 100644
index 000000000..caefd369a
--- /dev/null
+++ b/mod/twitter/views/default/widgets/twitter/content.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * Elgg twitter view page
+ *
+ * @package ElggTwitter
+ */
+
+$username = $vars['entity']->twitter_username;
+
+if (empty($username)) {
+ echo "<p>" . elgg_echo("twitter:notset") . "</p>";
+ return;
+}
+
+$username_is_valid = preg_match('~^[a-zA-Z0-9_]{1,20}$~', $username);
+if (!$username_is_valid) {
+ echo "<p>" . elgg_echo("twitter:invalid") . "</p>";
+ return;
+}
+
+
+$num = $vars['entity']->twitter_num;
+if (empty($num)) {
+ $num = 5;
+}
+
+// @todo upgrade to 1.1 API https://dev.twitter.com/docs/api/1.1/get/statuses/home_timeline
+$script_url = "https://api.twitter.com/1/statuses/user_timeline/" . urlencode($username) . ".json"
+ . "?callback=twitterCallback2&count=" . (int) $num;
+
+?>
+<div id="twitter_widget">
+ <ul id="twitter_update_list"></ul>
+ <p class="visit_twitter"><?php echo elgg_view('output/url', array(
+ 'text' => elgg_echo("twitter:visit"),
+ 'href' => 'http://twitter.com/' . urlencode($username),
+ 'is_trusted' => true,
+ )) ?></p>
+ <script type="text/javascript" src="http://twitter.com/javascripts/blogger.js"></script>
+ <script type="text/javascript" src="<?php echo htmlspecialchars($script_url, ENT_QUOTES, 'UTF-8') ?>"></script>
+</div>
diff --git a/mod/twitter/views/default/widgets/twitter/edit.php b/mod/twitter/views/default/widgets/twitter/edit.php
new file mode 100644
index 000000000..c3fc6f0d5
--- /dev/null
+++ b/mod/twitter/views/default/widgets/twitter/edit.php
@@ -0,0 +1,24 @@
+<?php
+
+/**
+ * Elgg twitter edit page
+ *
+ * @package ElggTwitter
+ */
+
+?>
+<div>
+ <?php echo elgg_echo("twitter:username"); ?>
+ <?php echo elgg_view('input/text', array(
+ 'name' => 'params[twitter_username]',
+ 'value' => $vars['entity']->twitter_username,
+ )) ?>
+</div>
+<div>
+ <?php echo elgg_echo("twitter:num"); ?>
+ <?php echo elgg_view('input/text', array(
+ 'name' => 'params[twitter_num]',
+ 'value' => $vars['entity']->twitter_num,
+ )) ?>
+ <span class="elgg-text-help"><?php echo elgg_echo("twitter:apibug"); ?></span>
+</div> \ No newline at end of file
diff --git a/mod/twitter_api/actions/twitter_api/interstitial_settings.php b/mod/twitter_api/actions/twitter_api/interstitial_settings.php
new file mode 100644
index 000000000..880623973
--- /dev/null
+++ b/mod/twitter_api/actions/twitter_api/interstitial_settings.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Save settings for first time logins with twitter
+ */
+elgg_make_sticky_form('twitter_api_interstitial');
+
+$display_name = get_input('display_name');
+$email = get_input('email');
+$password_1 = get_input('password_1', null, false);
+$password_2 = get_input('password_2', null, false);
+
+if (!$display_name) {
+ register_error(elgg_echo('twitter_api:interstitial:no_display_name'));
+ forward(REFERER);
+}
+
+if ($email && !is_email_address($email)) {
+ register_error(elgg_echo('twitter_api:interstitial:invalid_email'));
+ forward(REFERER);
+}
+
+$existing_user = get_user_by_email($email);
+if ($email && $existing_user) {
+ register_error(elgg_echo('twitter_api:interstitial:existing_email'));
+ forward(REFERER);
+}
+
+if ($password_1 && !($password_1 == $password_2)) {
+ register_error(elgg_echo('twitter_api:interstitial:password_mismatch'));
+ forward(REFERER);
+}
+
+$user = elgg_get_logged_in_user_entity();
+$user->name = $display_name;
+
+if ($email) {
+ $user->email = $email;
+}
+
+if ($password_1) {
+ $user->salt = generate_random_cleartext_password();
+ $user->password = generate_user_password($user, $password_1);
+}
+
+if (!$user->save()) {
+ register_error(elgg_echo('twitter_api:interstitial:cannot_save'));
+ forward(REFERER);
+}
+
+elgg_clear_sticky_form('twitter_api_interstitial');
+
+system_message(elgg_echo('twitter_api:interstitial:saved'));
+forward('/'); \ No newline at end of file
diff --git a/mod/twitter_api/graphics/sign-in-with-twitter-d.png b/mod/twitter_api/graphics/sign-in-with-twitter-d.png
new file mode 100644
index 000000000..b49a0ba59
--- /dev/null
+++ b/mod/twitter_api/graphics/sign-in-with-twitter-d.png
Binary files differ
diff --git a/mod/twitter_api/graphics/sign-in-with-twitter-l.png b/mod/twitter_api/graphics/sign-in-with-twitter-l.png
new file mode 100644
index 000000000..834d43cfd
--- /dev/null
+++ b/mod/twitter_api/graphics/sign-in-with-twitter-l.png
Binary files differ
diff --git a/mod/twitter_api/graphics/sign_in_with_twitter.gif b/mod/twitter_api/graphics/sign_in_with_twitter.gif
new file mode 100644
index 000000000..a686590fc
--- /dev/null
+++ b/mod/twitter_api/graphics/sign_in_with_twitter.gif
Binary files differ
diff --git a/mod/twitter_api/languages/en.php b/mod/twitter_api/languages/en.php
new file mode 100644
index 000000000..f4b3c7f94
--- /dev/null
+++ b/mod/twitter_api/languages/en.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * An english language definition file
+ */
+
+$english = array(
+ 'twitter_api' => 'Twitter Services',
+
+ 'twitter_api:requires_oauth' => 'Twitter Services requires the OAuth Libraries plugin to be enabled.',
+
+ 'twitter_api:consumer_key' => 'Consumer Key',
+ 'twitter_api:consumer_secret' => 'Consumer Secret',
+
+ 'twitter_api:settings:instructions' => 'You must obtain a consumer key and secret from <a href="https://dev.twitter.com/apps/new" target="_blank">Twitter</a>. Fill out the new app application. Select "Browser" as the application type and "Read & Write" for the access type. The callback url is %stwitter_api/authorize',
+
+ 'twitter_api:usersettings:description' => "Link your %s account with Twitter.",
+ 'twitter_api:usersettings:request' => "You must first <a href=\"%s\">authorize</a> %s to access your Twitter account.",
+ 'twitter_api:usersettings:cannot_revoke' => "You cannot unlink you account with Twitter because you haven't provided an email address or password. <a href=\"%s\">Provide them now</a>.",
+ 'twitter_api:authorize:error' => 'Unable to authorize Twitter.',
+ 'twitter_api:authorize:success' => 'Twitter access has been authorized.',
+
+ 'twitter_api:usersettings:authorized' => "You have authorized %s to access your Twitter account: @%s.",
+ 'twitter_api:usersettings:revoke' => 'Click <a href="%s">here</a> to revoke access.',
+ 'twitter_api:usersettings:site_not_configured' => 'An administrator must first configure Twitter before it can be used.',
+
+ 'twitter_api:revoke:success' => 'Twitter access has been revoked.',
+
+ 'twitter_api:login' => 'Allow existing users who have connected their Twitter account to sign in with Twitter?',
+ 'twitter_api:new_users' => 'Allow new users to sign up using their Twitter account even if user registration is disabled?',
+ 'twitter_api:login:success' => 'You have been logged in.',
+ 'twitter_api:login:error' => 'Unable to login with Twitter.',
+ 'twitter_api:login:email' => "You must enter a valid email address for your new %s account.",
+
+ 'twitter_api:invalid_page' => 'Invalid page',
+
+ 'twitter_api:deprecated_callback_url' => 'The callback URL has changed for Twitter API to %s. Please ask your administrator to change it.',
+
+ 'twitter_api:interstitial:settings' => 'Configure your settings',
+ 'twitter_api:interstitial:description' => 'You\'re almost ready to use %s! We need a few more details before you can continue. These are optional, but will allow you login if Twitter goes down or you decide to unlink your accounts.',
+
+ 'twitter_api:interstitial:username' => 'This is your username. It cannot be changed. If you set a password, you can use the username or your email address to log in.',
+
+ 'twitter_api:interstitial:name' => 'This is the name people will see when interacting with you.',
+
+ 'twitter_api:interstitial:email' => 'Your email address. Users cannot see this by default.',
+
+ 'twitter_api:interstitial:password' => 'A password to login if Twitter is down or you decide to unlink your accounts.',
+ 'twitter_api:interstitial:password2' => 'The same password, again.',
+
+ 'twitter_api:interstitial:no_thanks' => 'No thanks',
+
+ 'twitter_api:interstitial:no_display_name' => 'You must have a display name.',
+ 'twitter_api:interstitial:invalid_email' => 'You must enter a valid email address or nothing.',
+ 'twitter_api:interstitial:existing_email' => 'This email address is already registered on this site.',
+ 'twitter_api:interstitial:password_mismatch' => 'Your passwords do not match.',
+ 'twitter_api:interstitial:cannot_save' => 'Cannot save account details.',
+ 'twitter_api:interstitial:saved' => 'Account details saved!',
+);
+
+add_translation('en', $english);
diff --git a/mod/twitter_api/lib/twitter_api.php b/mod/twitter_api/lib/twitter_api.php
new file mode 100644
index 000000000..e163d2b3e
--- /dev/null
+++ b/mod/twitter_api/lib/twitter_api.php
@@ -0,0 +1,370 @@
+<?php
+/**
+ * Common library of functions used by Twitter Services.
+ *
+ * @package twitter_api
+ */
+
+/**
+ * Tests if the system admin has enabled Sign-On-With-Twitter
+ *
+ * @param void
+ * @return bool
+ */
+function twitter_api_allow_sign_on_with_twitter() {
+ if (!$consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api')) {
+ return FALSE;
+ }
+
+ if (!$consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api')) {
+ return FALSE;
+ }
+
+ return elgg_get_plugin_setting('sign_on', 'twitter_api') == 'yes';
+}
+
+/**
+ * Forwards the user to twitter to authenticate
+ *
+ * This includes the login URL as the callback
+ */
+function twitter_api_forward() {
+ global $SESSION;
+
+ // sanity check
+ if (!twitter_api_allow_sign_on_with_twitter()) {
+ forward();
+ }
+
+ $callback = elgg_normalize_url("twitter_api/login");
+ $request_link = twitter_api_get_authorize_url($callback);
+
+ // capture metadata about login to persist through redirects
+ $login_metadata = array(
+ 'persistent' => (bool) get_input("persistent"),
+ );
+ // capture referrer if in site, but not the twitter_api
+ if (!empty($SESSION['last_forward_from'])) {
+ $login_metadata['forward'] = $SESSION['last_forward_from'];
+ } elseif (!empty($_SERVER['HTTP_REFERER'])
+ && 0 === strpos($_SERVER['HTTP_REFERER'], elgg_get_site_url())
+ && 0 !== strpos($_SERVER['HTTP_REFERER'], elgg_get_site_url() . 'twitter_api/')) {
+ $login_metadata['forward'] = $_SERVER['HTTP_REFERER'];
+ }
+ $SESSION['twitter_api_login_metadata'] = $login_metadata;
+
+ forward($request_link, 'twitter_api');
+}
+
+/**
+ * Log in a user referred from Twitter's OAuth API
+ *
+ * If the user has already linked their account with Twitter, it is a seamless
+ * login. If this is a first time login (or a user from deprecated twitter login
+ * plugin), we create a new account (update the account).
+ *
+ * If a plugin wants to be notified when someone logs in with twitter or a new
+ * twitter user signs up, register for the standard login or create user events
+ * and check for 'twitter_api' context.
+ *
+ * The user has to be redirected from Twitter for this to work. It depends on
+ * the Twitter OAuth data.
+ */
+function twitter_api_login() {
+ /* @var ElggSession $SESSION */
+ global $SESSION;
+
+ // sanity check
+ if (!twitter_api_allow_sign_on_with_twitter()) {
+ forward();
+ }
+
+ $token = twitter_api_get_access_token(get_input('oauth_verifier'));
+
+ $persistent = false;
+ $forward = '';
+
+ // fetch login metadata from session
+ $login_metadata = $SESSION['twitter_api_login_metadata'];
+ unset($SESSION['twitter_api_login_metadata']);
+ if (!empty($login_metadata['persistent'])) {
+ $persistent = true;
+ }
+ if (!empty($login_metadata['forward'])) {
+ $forward = $login_metadata['forward'];
+ }
+
+ if (!isset($token['oauth_token']) or !isset($token['oauth_token_secret'])) {
+ register_error(elgg_echo('twitter_api:login:error'));
+ forward();
+ }
+
+ // attempt to find user and log them in.
+ // else, create a new user.
+ $options = array(
+ 'type' => 'user',
+ 'plugin_user_setting_name_value_pairs' => array(
+ 'access_key' => $token['oauth_token'],
+ 'access_secret' => $token['oauth_token_secret'],
+ ),
+ 'limit' => 0,
+ );
+
+ $users = elgg_get_entities_from_plugin_user_settings($options);
+
+ if ($users) {
+ if (count($users) == 1 && login($users[0], $persistent)) {
+ system_message(elgg_echo('twitter_api:login:success'));
+ forward($forward);
+ } else {
+ register_error(elgg_echo('twitter_api:login:error'));
+ forward();
+ }
+ } else {
+ $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api');
+ $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api');
+ $api = new TwitterOAuth($consumer_key, $consumer_secret, $token['oauth_token'], $token['oauth_token_secret']);
+ $twitter = $api->get('account/verify_credentials');
+
+ // backward compatibility for deprecated Twitter Login plugin
+ $user = FALSE;
+ if ($twitter_user = get_user_by_username($token['screen_name'])) {
+ if (($screen_name = $twitter_user->twitter_screen_name) && ($screen_name == $token['screen_name'])) {
+ // convert existing account
+ $user = $twitter_user;
+ $forward = '';
+ }
+ }
+
+ // create new user
+ if (!$user) {
+ $user = twitter_api_create_user($twitter);
+ $site_name = elgg_get_site_entity()->name;
+ system_message(elgg_echo('twitter_api:login:email', array($site_name)));
+ $forward = "twitter_api/interstitial";
+ }
+
+ // set twitter services tokens
+ elgg_set_plugin_user_setting('twitter_name', $token['screen_name'], $user->guid);
+ elgg_set_plugin_user_setting('access_key', $token['oauth_token'], $user->guid);
+ elgg_set_plugin_user_setting('access_secret', $token['oauth_token_secret'], $user->guid);
+
+ // pull in Twitter icon
+ twitter_api_update_user_avatar($user, $twitter->profile_image_url);
+
+ // login new user
+ if (login($user)) {
+ system_message(elgg_echo('twitter_api:login:success'));
+ } else {
+ system_message(elgg_echo('twitter_api:login:error'));
+ }
+
+ forward($forward, 'twitter_api');
+ }
+
+ // register login error
+ register_error(elgg_echo('twitter_api:login:error'));
+ forward();
+}
+
+/**
+ * Create a new user from Twitter information
+ *
+ * @param object $twitter Twitter OAuth response
+ * @return ElggUser
+ */
+function twitter_api_create_user($twitter) {
+ // check new registration allowed
+ if (!twitter_api_allow_new_users_with_twitter()) {
+ register_error(elgg_echo('registerdisabled'));
+ forward();
+ }
+
+ // Elgg-ify Twitter credentials
+ $username = $twitter->screen_name;
+ while (get_user_by_username($username)) {
+ // @todo I guess we just hope this is good enough
+ $username = $twitter->screen_name . '_' . rand(1000, 9999);
+ }
+
+ $password = generate_random_cleartext_password();
+ $name = $twitter->name;
+
+ $user = new ElggUser();
+ $user->username = $username;
+ $user->name = $name;
+ $user->access_id = ACCESS_PUBLIC;
+ $user->salt = generate_random_cleartext_password();
+ $user->password = generate_user_password($user, $password);
+ $user->owner_guid = 0;
+ $user->container_guid = 0;
+
+ if (!$user->save()) {
+ register_error(elgg_echo('registerbad'));
+ forward();
+ }
+
+ return $user;
+}
+
+/**
+ * Pull in the latest avatar from twitter.
+ *
+ * @param ElggUser $user
+ * @param string $file_location
+ */
+function twitter_api_update_user_avatar($user, $file_location) {
+ // twitter's images have a few suffixes:
+ // _normal
+ // _reasonably_small
+ // _mini
+ // the twitter app here returns _normal. We want standard, so remove the suffix.
+ // @todo Should probably check that it's an image file.
+ $file_location = str_replace('_normal.jpg', '.jpg', $file_location);
+
+ $icon_sizes = elgg_get_config('icon_sizes');
+
+ $filehandler = new ElggFile();
+ $filehandler->owner_guid = $user->getGUID();
+ foreach ($icon_sizes as $size => $dimensions) {
+ $image = get_resized_image_from_existing_file(
+ $file_location,
+ $dimensions['w'],
+ $dimensions['h'],
+ $dimensions['square']
+ );
+
+ $filehandler->setFilename("profile/$user->guid$size.jpg");
+ $filehandler->open('write');
+ $filehandler->write($image);
+ $filehandler->close();
+ }
+
+ // update user's icontime
+ $user->icontime = time();
+}
+
+/**
+ * User-initiated Twitter authorization
+ *
+ * Callback action from Twitter registration. Registers a single Elgg user with
+ * the authorization tokens. Will revoke access from previous users when a
+ * conflict exists.
+ *
+ * Depends upon {@link twitter_api_get_authorize_url} being called previously
+ * to establish session request tokens.
+ */
+function twitter_api_authorize() {
+ $token = twitter_api_get_access_token();
+ if (!isset($token['oauth_token']) || !isset($token['oauth_token_secret'])) {
+ register_error(elgg_echo('twitter_api:authorize:error'));
+ forward('settings/plugins', 'twitter_api');
+ }
+
+ // make sure no other users are registered to this twitter account.
+ $options = array(
+ 'type' => 'user',
+ 'plugin_user_setting_name_value_pairs' => array(
+ 'access_key' => $token['oauth_token'],
+ 'access_secret' => $token['oauth_token_secret'],
+ ),
+ 'limit' => 0
+ );
+ $users = elgg_get_entities_from_plugin_user_settings($options);
+
+ if ($users) {
+ foreach ($users as $user) {
+ // revoke access
+ elgg_unset_plugin_user_setting('twitter_name', $user->getGUID());
+ elgg_unset_plugin_user_setting('access_key', $user->getGUID());
+ elgg_unset_plugin_user_setting('access_secret', $user->getGUID());
+ }
+ }
+
+ // register user's access tokens
+ elgg_set_plugin_user_setting('twitter_name', $token['screen_name']);
+ elgg_set_plugin_user_setting('access_key', $token['oauth_token']);
+ elgg_set_plugin_user_setting('access_secret', $token['oauth_token_secret']);
+
+ // trigger authorization hook
+ elgg_trigger_plugin_hook('authorize', 'twitter_api', array('token' => $token));
+
+ system_message(elgg_echo('twitter_api:authorize:success'));
+ forward('settings/plugins', 'twitter_api');
+}
+
+/**
+ * Remove twitter access for the currently logged in user.
+ */
+function twitter_api_revoke() {
+ // unregister user's access tokens
+ elgg_unset_plugin_user_setting('twitter_name');
+ elgg_unset_plugin_user_setting('access_key');
+ elgg_unset_plugin_user_setting('access_secret');
+
+ system_message(elgg_echo('twitter_api:revoke:success'));
+ forward('settings/plugins', 'twitter_api');
+}
+
+/**
+ * Gets the url to authorize a user.
+ *
+ * @param string $callback The callback URL
+ */
+function twitter_api_get_authorize_url($callback = NULL, $login = true) {
+ global $SESSION;
+
+ $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api');
+ $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api');
+
+ // request tokens from Twitter
+ $twitter = new TwitterOAuth($consumer_key, $consumer_secret);
+ $token = $twitter->getRequestToken($callback);
+
+ // save token in session for use after authorization
+ $SESSION['twitter_api'] = array(
+ 'oauth_token' => $token['oauth_token'],
+ 'oauth_token_secret' => $token['oauth_token_secret'],
+ );
+
+ return $twitter->getAuthorizeURL($token['oauth_token'], $login);
+}
+
+/**
+ * Returns the access token to use in twitter calls.
+ *
+ * @param bool $oauth_verifier
+ * @return array
+ */
+function twitter_api_get_access_token($oauth_verifier = FALSE) {
+ /* @var ElggSession $SESSION */
+ global $SESSION;
+
+ $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api');
+ $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api');
+
+ // retrieve stored tokens
+ $oauth_token = $SESSION['twitter_api']['oauth_token'];
+ $oauth_token_secret = $SESSION['twitter_api']['oauth_token_secret'];
+ unset($SESSION['twitter_api']);
+
+ // fetch an access token
+ $api = new TwitterOAuth($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret);
+ return $api->getAccessToken($oauth_verifier);
+}
+
+/**
+ * Checks if this site is accepting new users.
+ * Admins can disable manual registration, but some might want to allow
+ * twitter-only logins.
+ */
+function twitter_api_allow_new_users_with_twitter() {
+ $site_reg = elgg_get_config('allow_registration');
+ $twitter_reg = elgg_get_plugin_setting('new_users');
+
+ if ($site_reg || (!$site_reg && $twitter_reg == 'yes')) {
+ return true;
+ }
+
+ return false;
+} \ No newline at end of file
diff --git a/mod/twitter_api/manifest.xml b/mod/twitter_api/manifest.xml
new file mode 100644
index 000000000..86bba4b50
--- /dev/null
+++ b/mod/twitter_api/manifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Twitter API</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <description>Allows users to authenticate their Elgg account with Twitter.</description>
+ <category>api</category>
+ <category>bundled</category>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <requires>
+ <type>plugin</type>
+ <name>oauth_api</name>
+ </requires>
+ <requires>
+ <type>php_extension</type>
+ <name>curl</name>
+ </requires>
+
+ <conflicts>
+ <type>plugin</type>
+ <name>twitterservice</name>
+ </conflicts>
+</plugin_manifest>
diff --git a/mod/twitter_api/pages/twitter_api/interstitial.php b/mod/twitter_api/pages/twitter_api/interstitial.php
new file mode 100644
index 000000000..d1f1ac20c
--- /dev/null
+++ b/mod/twitter_api/pages/twitter_api/interstitial.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * An interstitial page for newly created Twitter users.
+ *
+ * This prompts them to enter an email address and set a password in case Twitter goes down or they
+ * want to disassociate their account from twitter.
+ */
+
+$title = elgg_echo('twitter_api:interstitial:settings');
+
+$site = get_config('site');
+$content = elgg_echo('twitter_api:interstitial:description', array($site->name));
+$content .= elgg_view_form('twitter_api/interstitial_settings');
+
+$params = array(
+ 'content' => $content,
+ 'title' => $title,
+);
+$body = elgg_view_layout('one_sidebar', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/mod/twitter_api/start.php b/mod/twitter_api/start.php
new file mode 100644
index 000000000..e6221de6b
--- /dev/null
+++ b/mod/twitter_api/start.php
@@ -0,0 +1,179 @@
+<?php
+/**
+ * Elgg Twitter Service
+ * This service plugin allows users to authenticate their Elgg account with Twitter.
+ *
+ * @package TwitterAPI
+ */
+
+elgg_register_event_handler('init', 'system', 'twitter_api_init');
+
+function twitter_api_init() {
+
+ // require libraries
+ $base = elgg_get_plugins_path() . 'twitter_api';
+ elgg_register_class('TwitterOAuth', "$base/vendors/twitteroauth/twitterOAuth.php");
+ elgg_register_library('twitter_api', "$base/lib/twitter_api.php");
+ elgg_load_library('twitter_api');
+
+ // extend site views
+ //elgg_extend_view('metatags', 'twitter_api/metatags');
+ elgg_extend_view('css/elgg', 'twitter_api/css');
+ elgg_extend_view('css/admin', 'twitter_api/css');
+ elgg_extend_view('js/elgg', 'twitter_api/js');
+
+ // sign on with twitter
+ if (twitter_api_allow_sign_on_with_twitter()) {
+ elgg_extend_view('login/extend', 'twitter_api/login');
+ }
+
+ // register page handler
+ elgg_register_page_handler('twitter_api', 'twitter_api_pagehandler');
+ // backward compatibility
+ elgg_register_page_handler('twitterservice', 'twitter_api_pagehandler_deprecated');
+
+ // register Walled Garden public pages
+ elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'twitter_api_public_pages');
+
+ // push status messages to twitter
+ elgg_register_plugin_hook_handler('status', 'user', 'twitter_api_tweet');
+
+ $actions = dirname(__FILE__) . '/actions/twitter_api';
+ elgg_register_action('twitter_api/interstitial_settings', "$actions/interstitial_settings.php", 'logged_in');
+}
+
+/**
+ * Handles old pg/twitterservice/ handler
+ *
+ * @param array $page
+ * @return bool
+ */
+function twitter_api_pagehandler_deprecated($page) {
+ $url = elgg_get_site_url() . 'pg/twitter_api/authorize';
+ $msg = elgg_echo('twitter_api:deprecated_callback_url', array($url));
+ register_error($msg);
+
+ return twitter_api_pagehandler($page);
+}
+
+
+/**
+ * Serves pages for twitter.
+ *
+ * @param array $page
+ * @return bool
+ */
+function twitter_api_pagehandler($page) {
+ if (!isset($page[0])) {
+ return false;
+ }
+
+ switch ($page[0]) {
+ case 'authorize':
+ twitter_api_authorize();
+ break;
+ case 'revoke':
+ twitter_api_revoke();
+ break;
+ case 'forward':
+ twitter_api_forward();
+ break;
+ case 'login':
+ twitter_api_login();
+ break;
+ case 'interstitial':
+ gatekeeper();
+ // only let twitter users do this.
+ $guid = elgg_get_logged_in_user_guid();
+ $twitter_name = elgg_get_plugin_user_setting('twitter_name', $guid, 'twitter_api');
+ if (!$twitter_name) {
+ register_error(elgg_echo('twitter_api:invalid_page'));
+ forward();
+ }
+ $pages = dirname(__FILE__) . '/pages/twitter_api';
+ include "$pages/interstitial.php";
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
+
+/**
+ * Push a status update to twitter.
+ *
+ * @param string $hook
+ * @param string $type
+ * @param null $returnvalue
+ * @param array $params
+ */
+function twitter_api_tweet($hook, $type, $returnvalue, $params) {
+
+ if (!elgg_instanceof($params['user'])) {
+ return;
+ }
+
+ // @todo - allow admin to select origins?
+
+ // check admin settings
+ $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api');
+ $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api');
+ if (!($consumer_key && $consumer_secret)) {
+ return;
+ }
+
+ // check user settings
+ $user_id = $params['user']->getGUID();
+ $access_key = elgg_get_plugin_user_setting('access_key', $user_id, 'twitter_api');
+ $access_secret = elgg_get_plugin_user_setting('access_secret', $user_id, 'twitter_api');
+ if (!($access_key && $access_secret)) {
+ return;
+ }
+
+ // send tweet
+ $api = new TwitterOAuth($consumer_key, $consumer_secret, $access_key, $access_secret);
+ $api->post('statuses/update', array('status' => $params['message']));
+}
+
+/**
+ * Get tweets for a user.
+ *
+ * @param int $user_guid The Elgg user GUID
+ * @param array $options
+ * @return array
+ */
+function twitter_api_fetch_tweets($user_guid, $options = array()) {
+ // check admin settings
+ $consumer_key = elgg_get_plugin_setting('consumer_key', 'twitter_api');
+ $consumer_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api');
+ if (!($consumer_key && $consumer_secret)) {
+ return FALSE;
+ }
+
+ // check user settings
+ $access_key = elgg_get_plugin_user_setting('access_key', $user_guid, 'twitter_api');
+ $access_secret = elgg_get_plugin_user_setting('access_secret', $user_guid, 'twitter_api');
+ if (!($access_key && $access_secret)) {
+ return FALSE;
+ }
+
+ // fetch tweets
+ $api = new TwitterOAuth($consumer_key, $consumer_secret, $access_key, $access_secret);
+ return $api->get('statuses/user_timeline', $options);
+}
+
+/**
+ * Register as public pages for walled garden.
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return_value
+ * @param array $params
+ * @return array
+ */
+function twitter_api_public_pages($hook, $type, $return_value, $params) {
+ $return_value[] = 'twitter_api/forward';
+ $return_value[] = 'twitter_api/login';
+
+ return $return_value;
+}
diff --git a/mod/twitter_api/vendors/twitteroauth/LICENSE b/mod/twitter_api/vendors/twitteroauth/LICENSE
new file mode 100644
index 000000000..233854f16
--- /dev/null
+++ b/mod/twitter_api/vendors/twitteroauth/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2009 Abraham Williams - http://abrah.am - abraham@poseurte.ch
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/mod/twitter_api/vendors/twitteroauth/OAuth.php b/mod/twitter_api/vendors/twitteroauth/OAuth.php
new file mode 100644
index 000000000..e132a5bc8
--- /dev/null
+++ b/mod/twitter_api/vendors/twitteroauth/OAuth.php
@@ -0,0 +1,518 @@
+<?php
+// vim: foldmethod=marker
+
+class OAuthConsumer {
+ public $key;
+ public $secret;
+
+ function __construct($key, $secret, $callback_url=NULL) {
+ $this->key = $key;
+ $this->secret = $secret;
+ $this->callback_url = $callback_url;
+ }
+
+ function __toString() {
+ return "OAuthConsumer[key=$this->key,secret=$this->secret]";
+ }
+}
+
+class OAuthToken {
+ // access tokens and request tokens
+ public $key;
+ public $secret;
+
+ /**
+ * key = the token
+ * secret = the token secret
+ */
+ function __construct($key, $secret) {
+ $this->key = $key;
+ $this->secret = $secret;
+ }
+
+ /**
+ * generates the basic string serialization of a token that a server
+ * would respond to request_token and access_token calls with
+ */
+ function to_string() {
+ return "oauth_token=" .
+ OAuthUtil::urlencode_rfc3986($this->key) .
+ "&oauth_token_secret=" .
+ OAuthUtil::urlencode_rfc3986($this->secret);
+ }
+
+ function __toString() {
+ return $this->to_string();
+ }
+}
+
+class twitterOAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod_HMAC_SHA1 {/*{{{*/
+ function get_name() {/*{{{*/
+ return "HMAC-SHA1";
+ }/*}}}*/
+
+ public function build_signature($request, $consumer, $token) {/*{{{*/
+ $base_string = $request->get_signature_base_string();
+ $request->base_string = $base_string;
+
+ $key_parts = array(
+ $consumer->secret,
+ ($token) ? $token->secret : ""
+ );
+
+ $key_parts = OAuthUtil::urlencode_rfc3986($key_parts);
+ $key = implode('&', $key_parts);
+
+ return base64_encode( hash_hmac('sha1', $base_string, $key, true));
+ }/*}}}*/
+
+ public function check_signature(&$request, $consumer, $token, $signature) {
+ $built = $this->build_signature($request, $consumer, $token);
+ return $built == $signature;
+ }
+}/*}}}*/
+
+class twitterOAuthRequest extends OAuthRequest {
+ private $parameters;
+ private $http_method;
+ private $http_url;
+ // for debug purposes
+ public $base_string;
+ public static $version = '1.0';
+ public static $POST_INPUT = 'php://input';
+
+ function __construct($http_method, $http_url, $parameters=NULL) {
+ @$parameters or $parameters = array();
+ $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters);
+ $this->parameters = $parameters;
+ $this->http_method = $http_method;
+ $this->http_url = $http_url;
+ }
+
+
+ /**
+ * attempt to build up a request from what was passed to the server
+ */
+ public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) {
+ $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on")
+ ? 'http'
+ : 'https';
+ @$http_url or $http_url = $scheme .
+ '://' . $_SERVER['HTTP_HOST'] .
+ ':' .
+ $_SERVER['SERVER_PORT'] .
+ $_SERVER['REQUEST_URI'];
+ @$http_method or $http_method = $_SERVER['REQUEST_METHOD'];
+
+ // We weren't handed any parameters, so let's find the ones relevant to
+ // this request.
+ // If you run XML-RPC or similar you should use this to provide your own
+ // parsed parameter-list
+ if (!$parameters) {
+ // Find request headers
+ $request_headers = OAuthUtil::get_headers();
+
+ // Parse the query-string to find GET parameters
+ $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']);
+
+ // It's a POST request of the proper content-type, so parse POST
+ // parameters and add those overriding any duplicates from GET
+ if ($http_method == "POST"
+ && @strstr($request_headers["Content-Type"],
+ "application/x-www-form-urlencoded")
+ ) {
+ $post_data = OAuthUtil::parse_parameters(
+ file_get_contents(self::$POST_INPUT)
+ );
+ $parameters = array_merge($parameters, $post_data);
+ }
+
+ // We have a Authorization-header with OAuth data. Parse the header
+ // and add those overriding any duplicates from GET or POST
+ if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") {
+ $header_parameters = OAuthUtil::split_header(
+ $request_headers['Authorization']
+ );
+ $parameters = array_merge($parameters, $header_parameters);
+ }
+
+ }
+
+ return new twitterOAuthRequest($http_method, $http_url, $parameters);
+ }
+
+ /**
+ * pretty much a helper function to set up the request
+ */
+ public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) {
+ @$parameters or $parameters = array();
+ $defaults = array("oauth_version" => twitterOAuthRequest::$version,
+ "oauth_nonce" => twitterOAuthRequest::generate_nonce(),
+ "oauth_timestamp" => twitterOAuthRequest::generate_timestamp(),
+ "oauth_consumer_key" => $consumer->key);
+ if ($token)
+ $defaults['oauth_token'] = $token->key;
+
+ $parameters = array_merge($defaults, $parameters);
+
+ return new twitterOAuthRequest($http_method, $http_url, $parameters);
+ }
+
+ public function set_parameter($name, $value, $allow_duplicates = true) {
+ if ($allow_duplicates && isset($this->parameters[$name])) {
+ // We have already added parameter(s) with this name, so add to the list
+ if (is_scalar($this->parameters[$name])) {
+ // This is the first duplicate, so transform scalar (string)
+ // into an array so we can add the duplicates
+ $this->parameters[$name] = array($this->parameters[$name]);
+ }
+
+ $this->parameters[$name][] = $value;
+ } else {
+ $this->parameters[$name] = $value;
+ }
+ }
+
+ public function get_parameter($name) {
+ return isset($this->parameters[$name]) ? $this->parameters[$name] : null;
+ }
+
+ public function get_parameters() {
+ return $this->parameters;
+ }
+
+ public function unset_parameter($name) {
+ unset($this->parameters[$name]);
+ }
+
+ /**
+ * The request parameters, sorted and concatenated into a normalized string.
+ * @return string
+ */
+ public function get_signable_parameters() {
+ // Grab all parameters
+ $params = $this->parameters;
+
+ // Remove oauth_signature if present
+ // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.")
+ if (isset($params['oauth_signature'])) {
+ unset($params['oauth_signature']);
+ }
+
+ return OAuthUtil::build_http_query($params);
+ }
+
+ /**
+ * Returns the base string of this request
+ *
+ * The base string defined as the method, the url
+ * and the parameters (normalized), each urlencoded
+ * and the concated with &.
+ */
+ public function get_signature_base_string() {
+ $parts = array(
+ $this->get_normalized_http_method(),
+ $this->get_normalized_http_url(),
+ $this->get_signable_parameters()
+ );
+
+ $parts = OAuthUtil::urlencode_rfc3986($parts);
+
+ return implode('&', $parts);
+ }
+
+ /**
+ * just uppercases the http method
+ */
+ public function get_normalized_http_method() {
+ return strtoupper($this->http_method);
+ }
+
+ /**
+ * parses the url and rebuilds it to be
+ * scheme://host/path
+ */
+ public function get_normalized_http_url() {
+ $parts = parse_url($this->http_url);
+
+ $port = @$parts['port'];
+ $scheme = $parts['scheme'];
+ $host = $parts['host'];
+ $path = @$parts['path'];
+
+ $port or $port = ($scheme == 'https') ? '443' : '80';
+
+ if (($scheme == 'https' && $port != '443')
+ || ($scheme == 'http' && $port != '80')) {
+ $host = "$host:$port";
+ }
+ return "$scheme://$host$path";
+ }
+
+ /**
+ * builds a url usable for a GET request
+ */
+ public function to_url() {
+ $post_data = $this->to_postdata();
+ $out = $this->get_normalized_http_url();
+ if ($post_data) {
+ $out .= '?'.$post_data;
+ }
+ return $out;
+ }
+
+ /**
+ * builds the data one would send in a POST request
+ */
+ public function to_postdata() {
+ return OAuthUtil::build_http_query($this->parameters);
+ }
+
+ /**
+ * builds the Authorization: header
+ */
+ public function to_header($realm=null) {
+ $first = true;
+ if($realm) {
+ $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"';
+ $first = false;
+ } else
+ $out = 'Authorization: OAuth';
+
+ $total = array();
+ foreach ($this->parameters as $k => $v) {
+ if (substr($k, 0, 5) != "oauth") continue;
+ if (is_array($v)) {
+ throw new OAuthException('Arrays not supported in headers');
+ }
+ $out .= ($first) ? ' ' : ',';
+ $out .= OAuthUtil::urlencode_rfc3986($k) .
+ '="' .
+ OAuthUtil::urlencode_rfc3986($v) .
+ '"';
+ $first = false;
+ }
+ return $out;
+ }
+
+ public function __toString() {
+ return $this->to_url();
+ }
+
+
+ public function sign_request($signature_method, $consumer, $token) {
+ $this->set_parameter(
+ "oauth_signature_method",
+ $signature_method->get_name(),
+ false
+ );
+ $signature = $this->build_signature($signature_method, $consumer, $token);
+ $this->set_parameter("oauth_signature", $signature, false);
+ }
+
+ public function build_signature($signature_method, $consumer, $token) {
+ $signature = $signature_method->build_signature($this, $consumer, $token);
+ return $signature;
+ }
+
+ /**
+ * util function: current timestamp
+ */
+ private static function generate_timestamp() {
+ return time();
+ }
+
+ /**
+ * util function: current nonce
+ */
+ private static function generate_nonce() {
+ $mt = microtime();
+ $rand = mt_rand();
+
+ return md5($mt . $rand); // md5s look nicer than numbers
+ }
+}
+
+class OAuthDataStore {
+ function lookup_consumer($consumer_key) {
+ // implement me
+ }
+
+ function lookup_token($consumer, $token_type, $token) {
+ // implement me
+ }
+
+ function lookup_nonce($consumer, $token, $nonce, $timestamp) {
+ // implement me
+ }
+
+ function new_request_token($consumer, $callback = null) {
+ // return a new token attached to this consumer
+ }
+
+ function new_access_token($token, $consumer, $verifier = null) {
+ // return a new access token attached to this consumer
+ // for the user associated with this token if the request token
+ // is authorized
+ // should also invalidate the request token
+ }
+
+}
+
+class OAuthUtil {
+ public static function urlencode_rfc3986($input) {
+ if (is_array($input)) {
+ return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input);
+ } else if (is_scalar($input)) {
+ return str_replace(
+ '+',
+ ' ',
+ str_replace('%7E', '~', rawurlencode($input))
+ );
+ } else {
+ return '';
+ }
+}
+
+
+ // This decode function isn't taking into consideration the above
+ // modifications to the encoding process. However, this method doesn't
+ // seem to be used anywhere so leaving it as is.
+ public static function urldecode_rfc3986($string) {
+ return urldecode($string);
+ }
+
+ // Utility function for turning the Authorization: header into
+ // parameters, has to do some unescaping
+ // Can filter out any non-oauth parameters if needed (default behaviour)
+ public static function split_header($header, $only_allow_oauth_parameters = true) {
+ $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/';
+ $offset = 0;
+ $params = array();
+ while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) {
+ $match = $matches[0];
+ $header_name = $matches[2][0];
+ $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0];
+ if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) {
+ $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content);
+ }
+ $offset = $match[1] + strlen($match[0]);
+ }
+
+ if (isset($params['realm'])) {
+ unset($params['realm']);
+ }
+
+ return $params;
+ }
+
+ // helper to try to sort out headers for people who aren't running apache
+ public static function get_headers() {
+ if (function_exists('apache_request_headers')) {
+ // we need this to get the actual Authorization: header
+ // because apache tends to tell us it doesn't exist
+ $headers = apache_request_headers();
+
+ // sanitize the output of apache_request_headers because
+ // we always want the keys to be Cased-Like-This and arh()
+ // returns the headers in the same case as they are in the
+ // request
+ $out = array();
+ foreach( $headers AS $key => $value ) {
+ $key = str_replace(
+ " ",
+ "-",
+ ucwords(strtolower(str_replace("-", " ", $key)))
+ );
+ $out[$key] = $value;
+ }
+ } else {
+ // otherwise we don't have apache and are just going to have to hope
+ // that $_SERVER actually contains what we need
+ $out = array();
+ if( isset($_SERVER['CONTENT_TYPE']) )
+ $out['Content-Type'] = $_SERVER['CONTENT_TYPE'];
+ if( isset($_ENV['CONTENT_TYPE']) )
+ $out['Content-Type'] = $_ENV['CONTENT_TYPE'];
+
+ foreach ($_SERVER as $key => $value) {
+ if (substr($key, 0, 5) == "HTTP_") {
+ // this is chaos, basically it is just there to capitalize the first
+ // letter of every word that is not an initial HTTP and strip HTTP
+ // code from przemek
+ $key = str_replace(
+ " ",
+ "-",
+ ucwords(strtolower(str_replace("_", " ", substr($key, 5))))
+ );
+ $out[$key] = $value;
+ }
+ }
+ }
+ return $out;
+ }
+
+ // This function takes a input like a=b&a=c&d=e and returns the parsed
+ // parameters like this
+ // array('a' => array('b','c'), 'd' => 'e')
+ public static function parse_parameters( $input ) {
+ if (!isset($input) || !$input) return array();
+
+ $pairs = explode('&', $input);
+
+ $parsed_parameters = array();
+ foreach ($pairs as $pair) {
+ $split = explode('=', $pair, 2);
+ $parameter = OAuthUtil::urldecode_rfc3986($split[0]);
+ $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : '';
+
+ if (isset($parsed_parameters[$parameter])) {
+ // We have already recieved parameter(s) with this name, so add to the list
+ // of parameters with this name
+
+ if (is_scalar($parsed_parameters[$parameter])) {
+ // This is the first duplicate, so transform scalar (string) into an array
+ // so we can add the duplicates
+ $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]);
+ }
+
+ $parsed_parameters[$parameter][] = $value;
+ } else {
+ $parsed_parameters[$parameter] = $value;
+ }
+ }
+ return $parsed_parameters;
+ }
+
+ public static function build_http_query($params) {
+ if (!$params) return '';
+
+ // Urlencode both keys and values
+ $keys = OAuthUtil::urlencode_rfc3986(array_keys($params));
+ $values = OAuthUtil::urlencode_rfc3986(array_values($params));
+ $params = array_combine($keys, $values);
+
+ // Parameters are sorted by name, using lexicographical byte value ordering.
+ // Ref: Spec: 9.1.1 (1)
+ uksort($params, 'strcmp');
+
+ $pairs = array();
+ foreach ($params as $parameter => $value) {
+ if (is_array($value)) {
+ // If two or more parameters share the same name, they are sorted by their value
+ // Ref: Spec: 9.1.1 (1)
+ natsort($value);
+ foreach ($value as $duplicate_value) {
+ $pairs[] = $parameter . '=' . $duplicate_value;
+ }
+ } else {
+ $pairs[] = $parameter . '=' . $value;
+ }
+ }
+ // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61)
+ // Each name-value pair is separated by an '&' character (ASCII code 38)
+ return implode('&', $pairs);
+ }
+}
+
+?>
diff --git a/mod/twitter_api/vendors/twitteroauth/README b/mod/twitter_api/vendors/twitteroauth/README
new file mode 100644
index 000000000..33cb91f21
--- /dev/null
+++ b/mod/twitter_api/vendors/twitteroauth/README
@@ -0,0 +1,7 @@
+Abraham Williams | abraham@poseurte.ch | http://abrah.am | @abraham
+
+The first PHP library for working with Twitter's OAuth API.
+
+Documentation: http://wiki.github.com/abraham/twitteroauth/documentation
+Source: http://github.com/abraham/twitteroauth
+Twitter: http://apiwiki.twitter.com
diff --git a/mod/twitter_api/vendors/twitteroauth/twitterOAuth.php b/mod/twitter_api/vendors/twitteroauth/twitterOAuth.php
new file mode 100644
index 000000000..f36e6158d
--- /dev/null
+++ b/mod/twitter_api/vendors/twitteroauth/twitterOAuth.php
@@ -0,0 +1,245 @@
+<?php
+
+/*
+ * Abraham Williams (abraham@abrah.am) http://abrah.am
+ *
+ * The first PHP Library to support OAuth for Twitter's REST API.
+ */
+
+/* Load OAuth lib. You can find it at http://oauth.net */
+require_once('OAuth.php');
+
+/**
+ * Twitter OAuth class
+ */
+class TwitterOAuth {
+ /* Contains the last HTTP status code returned. */
+ public $http_code;
+ /* Contains the last API call. */
+ public $url;
+ /* Set up the API root URL. */
+ public $host = "https://api.twitter.com/1/";
+ /* Set timeout default. */
+ public $timeout = 30;
+ /* Set connect timeout. */
+ public $connecttimeout = 30;
+ /* Verify SSL Cert. */
+ public $ssl_verifypeer = FALSE;
+ /* Respons format. */
+ public $format = 'json';
+ /* Decode returned json data. */
+ public $decode_json = TRUE;
+ /* Contains the last HTTP headers returned. */
+ public $http_info;
+ /* Set the useragnet. */
+ public $useragent = 'TwitterOAuth v0.2.0-beta2';
+ /* Immediately retry the API call if the response was not successful. */
+ //public $retry = TRUE;
+
+
+
+
+ /**
+ * Set API URLS
+ */
+ function accessTokenURL() { return 'https://api.twitter.com/oauth/access_token'; }
+ function authenticateURL() { return 'https://api.twitter.com/oauth/authenticate'; }
+ function authorizeURL() { return 'https://api.twitter.com/oauth/authorize'; }
+ function requestTokenURL() { return 'https://api.twitter.com/oauth/request_token'; }
+
+ /**
+ * Debug helpers
+ */
+ function lastStatusCode() { return $this->http_status; }
+ function lastAPICall() { return $this->last_api_call; }
+
+ /**
+ * construct TwitterOAuth object
+ */
+ function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) {
+ $this->sha1_method = new twitterOAuthSignatureMethod_HMAC_SHA1();
+ $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret);
+ if (!empty($oauth_token) && !empty($oauth_token_secret)) {
+ $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret);
+ } else {
+ $this->token = NULL;
+ }
+ }
+
+
+ /**
+ * Get a request_token from Twitter
+ *
+ * @returns a key/value array containing oauth_token and oauth_token_secret
+ */
+ function getRequestToken($oauth_callback = NULL) {
+ $parameters = array();
+ if (!empty($oauth_callback)) {
+ $parameters['oauth_callback'] = $oauth_callback;
+ }
+ $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters);
+ $token = OAuthUtil::parse_parameters($request);
+ $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
+ return $token;
+ }
+
+ /**
+ * Get the authorize URL
+ *
+ * @returns a string
+ */
+ function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) {
+ if (is_array($token)) {
+ $token = $token['oauth_token'];
+ }
+ if (empty($sign_in_with_twitter)) {
+ return $this->authorizeURL() . "?oauth_token={$token}";
+ } else {
+ return $this->authenticateURL() . "?oauth_token={$token}";
+ }
+ }
+
+ /**
+ * Exchange request token and secret for an access token and
+ * secret, to sign API calls.
+ *
+ * @returns array("oauth_token" => "the-access-token",
+ * "oauth_token_secret" => "the-access-secret",
+ * "user_id" => "9436992",
+ * "screen_name" => "abraham")
+ */
+ function getAccessToken($oauth_verifier = FALSE) {
+ $parameters = array();
+ if (!empty($oauth_verifier)) {
+ $parameters['oauth_verifier'] = $oauth_verifier;
+ }
+ $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters);
+ $token = OAuthUtil::parse_parameters($request);
+ $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
+ return $token;
+ }
+
+ /**
+ * One time exchange of username and password for access token and secret.
+ *
+ * @returns array("oauth_token" => "the-access-token",
+ * "oauth_token_secret" => "the-access-secret",
+ * "user_id" => "9436992",
+ * "screen_name" => "abraham",
+ * "x_auth_expires" => "0")
+ */
+ function getXAuthToken($username, $password) {
+ $parameters = array();
+ $parameters['x_auth_username'] = $username;
+ $parameters['x_auth_password'] = $password;
+ $parameters['x_auth_mode'] = 'client_auth';
+ $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters);
+ $token = OAuthUtil::parse_parameters($request);
+ $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']);
+ return $token;
+ }
+
+ /**
+ * GET wrapper for oAuthRequest.
+ */
+ function get($url, $parameters = array()) {
+ $response = $this->oAuthRequest($url, 'GET', $parameters);
+ if ($this->format === 'json' && $this->decode_json) {
+ return json_decode($response);
+ }
+ return $response;
+ }
+
+ /**
+ * POST wrapper for oAuthRequest.
+ */
+ function post($url, $parameters = array()) {
+ $response = $this->oAuthRequest($url, 'POST', $parameters);
+ if ($this->format === 'json' && $this->decode_json) {
+ return json_decode($response);
+ }
+ return $response;
+ }
+
+ /**
+ * DELETE wrapper for oAuthReqeust.
+ */
+ function delete($url, $parameters = array()) {
+ $response = $this->oAuthRequest($url, 'DELETE', $parameters);
+ if ($this->format === 'json' && $this->decode_json) {
+ return json_decode($response);
+ }
+ return $response;
+ }
+
+ /**
+ * Format and sign an OAuth / API request
+ */
+ function oAuthRequest($url, $method, $parameters) {
+ if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) {
+ $url = "{$this->host}{$url}.{$this->format}";
+ }
+ $request = twitterOAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters);
+ $request->sign_request($this->sha1_method, $this->consumer, $this->token);
+ switch ($method) {
+ case 'GET':
+ return $this->http($request->to_url(), 'GET');
+ default:
+ return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata());
+ }
+ }
+
+ /**
+ * Make an HTTP request
+ *
+ * @return API results
+ */
+ function http($url, $method, $postfields = NULL) {
+ $this->http_info = array();
+ $ci = curl_init();
+ /* Curl settings */
+ curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);
+ curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);
+ curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);
+ curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);
+ curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
+ curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);
+ curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));
+ curl_setopt($ci, CURLOPT_HEADER, FALSE);
+
+ switch ($method) {
+ case 'POST':
+ curl_setopt($ci, CURLOPT_POST, TRUE);
+ if (!empty($postfields)) {
+ curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
+ }
+ break;
+ case 'DELETE':
+ curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
+ if (!empty($postfields)) {
+ $url = "{$url}?{$postfields}";
+ }
+ }
+
+ curl_setopt($ci, CURLOPT_URL, $url);
+ $response = curl_exec($ci);
+ $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
+ $this->http_info = array_merge($this->http_info, curl_getinfo($ci));
+ $this->url = $url;
+ curl_close ($ci);
+ return $response;
+ }
+
+ /**
+ * Get the header info to store.
+ */
+ function getHeader($ch, $header) {
+ $i = strpos($header, ':');
+ if (!empty($i)) {
+ $key = str_replace('-', '_', strtolower(substr($header, 0, $i)));
+ $value = trim(substr($header, $i + 2));
+ $this->http_header[$key] = $value;
+ }
+ return strlen($header);
+ }
+}
diff --git a/mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php b/mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php
new file mode 100644
index 000000000..cad2be345
--- /dev/null
+++ b/mod/twitter_api/views/default/forms/twitter_api/interstitial_settings.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Make the user set up some alternative ways to login.
+ */
+
+$user = elgg_get_logged_in_user_entity();
+
+if (elgg_is_sticky_form('twitter_api_interstitial')) {
+ extract(elgg_get_sticky_values('twitter_api_interstitial'));
+ elgg_clear_sticky_form('twitter_api_interstitial');
+}
+
+if (!isset($display_name)) {
+ $display_name = $user->name;
+}
+
+// username
+$title = elgg_echo('username');
+
+$body = elgg_echo('twitter_api:interstitial:username');
+$body .= elgg_view('input/text', array('value' => $user->username, 'disabled' => 'disabled'));
+
+echo elgg_view_module('info', $title, $body);
+
+// display name
+$title = elgg_echo('name');
+
+$body = elgg_echo('twitter_api:interstitial:name');
+$body .= elgg_view('input/text', array('name' => 'display_name', 'value' => $display_name));
+
+echo elgg_view_module('info', $title, $body);
+
+// email
+$title = elgg_echo('email');
+
+$body = elgg_echo('twitter_api:interstitial:email');
+$body .= elgg_view('input/email', array('name' => 'email', 'value' => $email));
+
+echo elgg_view_module('info', $title, $body);
+
+// password
+$title = elgg_echo('password');
+
+$body = elgg_echo('twitter_api:interstitial:password');
+$body .= elgg_view('input/password', array('name' => 'password_1'));
+$body .= elgg_echo('twitter_api:interstitial:password2');
+$body .= elgg_view('input/password', array('name' => 'password_2'));
+
+echo elgg_view_module('info', $title, $body);
+
+// buttons
+
+echo elgg_view('input/submit', array(
+ 'text' => elgg_echo('save')
+));
+
+echo elgg_view('output/url', array(
+ 'class' => 'float-alt',
+ 'text' => elgg_echo('twitter_api:interstitial:no_thanks'),
+ 'href' => '/',
+ 'is_trusted' => true,
+)); \ No newline at end of file
diff --git a/mod/twitter_api/views/default/plugins/twitter_api/settings.php b/mod/twitter_api/views/default/plugins/twitter_api/settings.php
new file mode 100644
index 000000000..0b9afd4cf
--- /dev/null
+++ b/mod/twitter_api/views/default/plugins/twitter_api/settings.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Twitter API plugin settings
+ */
+
+$instructions = elgg_echo('twitter_api:settings:instructions', array(elgg_get_site_url()));
+
+$consumer_key_string = elgg_echo('twitter_api:consumer_key');
+$consumer_key_view = elgg_view('input/text', array(
+ 'name' => 'params[consumer_key]',
+ 'value' => $vars['entity']->consumer_key,
+ 'class' => 'elgg-input-thin',
+));
+
+$consumer_secret_string = elgg_echo('twitter_api:consumer_secret');
+$consumer_secret_view = elgg_view('input/text', array(
+ 'name' => 'params[consumer_secret]',
+ 'value' => $vars['entity']->consumer_secret,
+ 'class' => 'elgg-input-thin',
+));
+
+$sign_on_with_twitter_string = elgg_echo('twitter_api:login');
+$sign_on_with_twitter_view = elgg_view('input/dropdown', array(
+ 'name' => 'params[sign_on]',
+ 'options_values' => array(
+ 'yes' => elgg_echo('option:yes'),
+ 'no' => elgg_echo('option:no'),
+ ),
+ 'value' => $vars['entity']->sign_on ? $vars['entity']->sign_on : 'no',
+));
+
+$new_users_with_twitter = elgg_echo('twitter_api:new_users');
+$new_users_with_twitter_view = elgg_view('input/dropdown', array(
+ 'name' => 'params[new_users]',
+ 'options_values' => array(
+ 'yes' => elgg_echo('option:yes'),
+ 'no' => elgg_echo('option:no'),
+ ),
+ 'value' => $vars['entity']->new_users ? $vars['entity']->new_users : 'no',
+));
+
+$settings = <<<__HTML
+<div class="elgg-content-thin mtm"><p>$instructions</p></div>
+<div><label>$consumer_key_string</label><br /> $consumer_key_view</div>
+<div><label>$consumer_secret_string</label><br /> $consumer_secret_view</div>
+<div>$sign_on_with_twitter_string $sign_on_with_twitter_view</div>
+<div>$new_users_with_twitter $new_users_with_twitter_view</div>
+__HTML;
+
+echo $settings;
diff --git a/mod/twitter_api/views/default/plugins/twitter_api/usersettings.php b/mod/twitter_api/views/default/plugins/twitter_api/usersettings.php
new file mode 100644
index 000000000..edcea2f0d
--- /dev/null
+++ b/mod/twitter_api/views/default/plugins/twitter_api/usersettings.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * User settings for Twitter API
+ */
+
+$user = elgg_get_logged_in_user_entity();
+$user_guid = $user->getGUID();
+$twitter_name = elgg_get_plugin_user_setting('twitter_name', $user_guid, 'twitter_api');
+$access_key = elgg_get_plugin_user_setting('access_key', $user_guid, 'twitter_api');
+$access_secret = elgg_get_plugin_user_setting('access_secret', $user_guid, 'twitter_api');
+
+$site_key = elgg_get_plugin_setting('consumer_key', 'twitter_api');
+$site_secret = elgg_get_plugin_setting('consumer_secret', 'twitter_api');
+
+if (!($site_key && $site_secret)) {
+ echo '<div>' . elgg_echo('twitter_api:usersettings:site_not_configured') . '</div>';
+ return true;
+}
+
+$site_name = elgg_get_site_entity()->name;
+echo '<div>' . elgg_echo('twitter_api:usersettings:description', array($site_name)) . '</div>';
+
+if (!$access_key || !$access_secret) {
+ // send user off to validate account
+ $request_link = twitter_api_get_authorize_url(null, false);
+ echo '<div>' . elgg_echo('twitter_api:usersettings:request', array($request_link, $site_name)) . '</div>';
+} else {
+ // if this user logged in through twitter and never set up an email address, don't
+ // let them disassociate their account.
+ if ($user->email) {
+ $url = elgg_get_site_url() . "twitter_api/revoke";
+ echo '<div>' . elgg_echo('twitter_api:usersettings:authorized', array($site_name, $twitter_name)) . '</div>';
+ echo '<div>' . sprintf(elgg_echo('twitter_api:usersettings:revoke'), $url) . '</div>';
+ } else {
+ echo elgg_echo('twitter_api:usersettings:cannot_revoke', array(elgg_normalize_url('twitter_api/interstitial')));
+ }
+}
diff --git a/mod/twitter_api/views/default/twitter_api/css.php b/mod/twitter_api/views/default/twitter_api/css.php
new file mode 100644
index 000000000..2d081d361
--- /dev/null
+++ b/mod/twitter_api/views/default/twitter_api/css.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg Twitter API CSS
+ */
+?>
+
+.login_with_twitter {
+ padding: 10px 0 0 0;
+}
+
+.twitter-secret {
+ width: 400px;
+} \ No newline at end of file
diff --git a/mod/twitter_api/views/default/twitter_api/js.php b/mod/twitter_api/views/default/twitter_api/js.php
new file mode 100644
index 000000000..3d2905a44
--- /dev/null
+++ b/mod/twitter_api/views/default/twitter_api/js.php
@@ -0,0 +1,16 @@
+<?php if (0): ?><script><?php endif; ?>
+
+// add ?persistent to login link
+elgg.register_hook_handler('init', 'system', function() {
+ $('form.elgg-form-login').each(function () {
+ var link = $('.login_with_twitter a', this).get(0),
+ $input = $('input[name="persistent"]', this);
+ function sync() {
+ link.href = link.href.replace(/\?.*/, '') + ($input[0].checked ? '?persistent' : '');
+ }
+ if (link && $input.length) {
+ sync();
+ $input.change(sync);
+ }
+ });
+});
diff --git a/mod/twitter_api/views/default/twitter_api/login.php b/mod/twitter_api/views/default/twitter_api/login.php
new file mode 100644
index 000000000..7b4b4ecb1
--- /dev/null
+++ b/mod/twitter_api/views/default/twitter_api/login.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Extension of login form for Twitter sign in
+ */
+
+$url = elgg_get_site_url() . 'twitter_api/forward';
+$img_url = elgg_get_site_url() . 'mod/twitter_api/graphics/sign-in-with-twitter-d.png';
+
+$login = <<<__HTML
+<div class="login_with_twitter">
+ <a href="$url">
+ <img src="$img_url" alt="Twitter" />
+ </a>
+</div>
+__HTML;
+
+echo $login;
diff --git a/mod/twitter_api/views/default/twitter_api/metatags.php b/mod/twitter_api/views/default/twitter_api/metatags.php
new file mode 100644
index 000000000..67c66dc37
--- /dev/null
+++ b/mod/twitter_api/views/default/twitter_api/metatags.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Adds required HTML head tags for Twitter Services.
+ *
+ * @package TwitterAPI
+ */
+
+if ($api_key = elgg_get_plugin_setting('consumer_key', 'twitter_api')) {
+ $tags = <<<__HTML
+<script src="http://platform.twitter.com/anywhere.js?id=$api_key&v=1" type="text/javascript"></script>
+<script type="text/javascript">
+ twttr.anywhere(function (T) {
+ T(".twitter_anywhere").hovercards();
+ });
+</script>
+__HTML;
+
+ echo $tags;
+}
diff --git a/mod/upgrade-tools b/mod/upgrade-tools
new file mode 160000
+Subproject 862658a7512afda1910f600169cc7cd970bd593
diff --git a/mod/uservalidationbyemail/actions/bulk_action.php b/mod/uservalidationbyemail/actions/bulk_action.php
new file mode 100644
index 000000000..fbbcc1c93
--- /dev/null
+++ b/mod/uservalidationbyemail/actions/bulk_action.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Dispatches a bulk action to real action.
+ *
+ * @package Elgg.Core.Plugin
+ * @subpackage UserValidationByEmail
+ */
+
+$action_type = get_input('action_type');
+$valid_actions = array('delete', 'resend_validation', 'validate');
+
+if (!in_array($action_type, $valid_actions)) {
+ forward(REFERRER);
+}
+
+$action_name = "uservalidationbyemail/$action_type";
+
+action($action_name); \ No newline at end of file
diff --git a/mod/uservalidationbyemail/actions/delete.php b/mod/uservalidationbyemail/actions/delete.php
new file mode 100644
index 000000000..b076d3048
--- /dev/null
+++ b/mod/uservalidationbyemail/actions/delete.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Delete a user or users by guid
+ *
+ * @package Elgg.Core.Plugin
+ * @subpackage UserValidationByEmail
+ */
+
+$user_guids = get_input('user_guids');
+$error = FALSE;
+
+if (!$user_guids) {
+ register_error(elgg_echo('uservalidationbyemail:errors:unknown_users'));
+ forward(REFERRER);
+}
+
+$access = access_get_show_hidden_status();
+access_show_hidden_entities(TRUE);
+
+foreach ($user_guids as $guid) {
+ $user = get_entity($guid);
+ if (!$user instanceof ElggUser) {
+ $error = TRUE;
+ continue;
+ }
+
+ // don't delete validated users
+ $is_validated = elgg_get_user_validation_status($guid);
+ if ($is_validated !== FALSE || !$user->delete()) {
+ $error = TRUE;
+ continue;
+ }
+}
+
+access_show_hidden_entities($access);
+
+if (count($user_guids) == 1) {
+ $message_txt = elgg_echo('uservalidationbyemail:messages:deleted_user');
+ $error_txt = elgg_echo('uservalidationbyemail:errors:could_not_delete_user');
+} else {
+ $message_txt = elgg_echo('uservalidationbyemail:messages:deleted_users');
+ $error_txt = elgg_echo('uservalidationbyemail:errors:could_not_delete_users');
+}
+
+if ($error) {
+ register_error($error_txt);
+} else {
+ system_message($message_txt);
+}
+
+forward(REFERRER); \ No newline at end of file
diff --git a/mod/uservalidationbyemail/actions/resend_validation.php b/mod/uservalidationbyemail/actions/resend_validation.php
new file mode 100644
index 000000000..586509b13
--- /dev/null
+++ b/mod/uservalidationbyemail/actions/resend_validation.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Resends validation emails to a user or users by guid
+ *
+ * @package Elgg.Core.Plugin
+ * @subpackage UserValidationByEmail
+ */
+
+$user_guids = get_input('user_guids');
+$error = FALSE;
+
+if (!$user_guids) {
+ register_error(elgg_echo('uservalidationbyemail:errors:unknown_users'));
+ forward(REFERRER);
+}
+
+$access = access_get_show_hidden_status();
+access_show_hidden_entities(TRUE);
+
+foreach ($user_guids as $guid) {
+ $user = get_entity($guid);
+ if (!$user instanceof ElggUser) {
+ $error = TRUE;
+ continue;
+ }
+
+ // don't resend emails to validated users
+ $is_validated = elgg_get_user_validation_status($guid);
+ if ($is_validated !== FALSE || !uservalidationbyemail_request_validation($guid, true)) {
+ $error = TRUE;
+ continue;
+ }
+}
+
+access_show_hidden_entities($access);
+
+if (count($user_guids) == 1) {
+ $message_txt = elgg_echo('uservalidationbyemail:messages:resent_validation');
+ $error_txt = elgg_echo('uservalidationbyemail:errors:could_not_resend_validation');
+} else {
+ $message_txt = elgg_echo('uservalidationbyemail:messages:resent_validations');
+ $error_txt = elgg_echo('uservalidationbyemail:errors:could_not_resend_validations');
+}
+
+if ($error) {
+ register_error($error_txt);
+} else {
+ system_message($message_txt);
+}
+
+forward(REFERRER); \ No newline at end of file
diff --git a/mod/uservalidationbyemail/actions/validate.php b/mod/uservalidationbyemail/actions/validate.php
new file mode 100644
index 000000000..d6be9cfe5
--- /dev/null
+++ b/mod/uservalidationbyemail/actions/validate.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Validate a user or users by guid
+ *
+ * @package Elgg.Core.Plugin
+ * @subpackage UserValidationByEmail
+ */
+
+$user_guids = get_input('user_guids');
+$error = FALSE;
+
+if (!$user_guids) {
+ register_error(elgg_echo('uservalidationbyemail:errors:unknown_users'));
+ forward(REFERRER);
+}
+
+$access = access_get_show_hidden_status();
+access_show_hidden_entities(TRUE);
+
+foreach ($user_guids as $guid) {
+ $user = get_entity($guid);
+ if (!$user instanceof ElggUser) {
+ $error = TRUE;
+ continue;
+ }
+
+ // only validate if not validated
+ $is_validated = elgg_get_user_validation_status($guid);
+ $validate_success = elgg_set_user_validation_status($guid, TRUE, 'manual');
+
+ if ($is_validated !== FALSE || !($validate_success && $user->enable())) {
+ $error = TRUE;
+ continue;
+ }
+}
+
+access_show_hidden_entities($access);
+
+if (count($user_guids) == 1) {
+ $message_txt = elgg_echo('uservalidationbyemail:messages:validated_user');
+ $error_txt = elgg_echo('uservalidationbyemail:errors:could_not_validate_user');
+} else {
+ $message_txt = elgg_echo('uservalidationbyemail:messages:validated_users');
+ $error_txt = elgg_echo('uservalidationbyemail:errors:could_not_validate_users');
+}
+
+if ($error) {
+ register_error($error_txt);
+} else {
+ system_message($message_txt);
+}
+
+forward(REFERRER); \ No newline at end of file
diff --git a/mod/uservalidationbyemail/languages/en.php b/mod/uservalidationbyemail/languages/en.php
new file mode 100644
index 000000000..df576a0e0
--- /dev/null
+++ b/mod/uservalidationbyemail/languages/en.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Email user validation plugin language pack.
+ *
+ * @package Elgg.Core.Plugin
+ * @subpackage ElggUserValidationByEmail
+ */
+
+$english = array(
+ 'admin:users:unvalidated' => 'Unvalidated',
+
+ 'email:validate:subject' => "%s please confirm your email address for %s!",
+ 'email:validate:body' => "%s,
+
+Before you can start you using %s, you must confirm your email address.
+
+Please confirm your email address by clicking on the link below:
+
+%s
+
+If you can't click on the link, copy and paste it to your browser manually.
+
+%s
+%s
+",
+ 'email:confirm:success' => "You have confirmed your email address!",
+ 'email:confirm:fail' => "Your email address could not be verified...",
+
+ 'uservalidationbyemail:registerok' => "To activate your account, please confirm your email address by clicking on the link we just sent you.",
+ 'uservalidationbyemail:login:fail' => "Your account is not validated so the log in attempt failed. Another validation email has been sent.",
+
+ 'uservalidationbyemail:admin:no_unvalidated_users' => 'No unvalidated users.',
+
+ 'uservalidationbyemail:admin:unvalidated' => 'Unvalidated',
+ 'uservalidationbyemail:admin:user_created' => 'Registered %s',
+ 'uservalidationbyemail:admin:resend_validation' => 'Resend validation',
+ 'uservalidationbyemail:admin:validate' => 'Validate',
+ 'uservalidationbyemail:admin:delete' => 'Delete',
+ 'uservalidationbyemail:confirm_validate_user' => 'Validate %s?',
+ 'uservalidationbyemail:confirm_resend_validation' => 'Resend validation email to %s?',
+ 'uservalidationbyemail:confirm_delete' => 'Delete %s?',
+ 'uservalidationbyemail:confirm_validate_checked' => 'Validate checked users?',
+ 'uservalidationbyemail:confirm_resend_validation_checked' => 'Resend validation to checked users?',
+ 'uservalidationbyemail:confirm_delete_checked' => 'Delete checked users?',
+ 'uservalidationbyemail:check_all' => 'All',
+
+ 'uservalidationbyemail:errors:unknown_users' => 'Unknown users',
+ 'uservalidationbyemail:errors:could_not_validate_user' => 'Could not validate user.',
+ 'uservalidationbyemail:errors:could_not_validate_users' => 'Could not validate all checked users.',
+ 'uservalidationbyemail:errors:could_not_delete_user' => 'Could not delete user.',
+ 'uservalidationbyemail:errors:could_not_delete_users' => 'Could not delete all checked users.',
+ 'uservalidationbyemail:errors:could_not_resend_validation' => 'Could not resend validation request.',
+ 'uservalidationbyemail:errors:could_not_resend_validations' => 'Could not resend all validation requests to checked users.',
+
+ 'uservalidationbyemail:messages:validated_user' => 'User validated.',
+ 'uservalidationbyemail:messages:validated_users' => 'All checked users validated.',
+ 'uservalidationbyemail:messages:deleted_user' => 'User deleted.',
+ 'uservalidationbyemail:messages:deleted_users' => 'All checked users deleted.',
+ 'uservalidationbyemail:messages:resent_validation' => 'Validation request resent.',
+ 'uservalidationbyemail:messages:resent_validations' => 'Validation requests resent to all checked users.'
+
+);
+
+add_translation("en", $english); \ No newline at end of file
diff --git a/mod/uservalidationbyemail/lib/functions.php b/mod/uservalidationbyemail/lib/functions.php
new file mode 100644
index 000000000..f3091f94d
--- /dev/null
+++ b/mod/uservalidationbyemail/lib/functions.php
@@ -0,0 +1,108 @@
+<?php
+/**
+ * Helper functions
+ *
+ * @package Elgg.Core.Plugin
+ * @subpackage UserValidationByEmail
+ */
+
+/**
+ * Generate an email activation code.
+ *
+ * @param int $user_guid The guid of the user
+ * @param string $email_address Email address
+ * @return string
+ */
+function uservalidationbyemail_generate_code($user_guid, $email_address) {
+
+ $site_url = elgg_get_site_url();
+
+ // Note I bind to site URL, this is important on multisite!
+ return md5($user_guid . $email_address . $site_url . get_site_secret());
+}
+
+/**
+ * Request user validation email.
+ * Send email out to the address and request a confirmation.
+ *
+ * @param int $user_guid The user's GUID
+ * @param bool $admin_requested Was it requested by admin
+ * @return mixed
+ */
+function uservalidationbyemail_request_validation($user_guid, $admin_requested = FALSE) {
+
+ $site = elgg_get_site_entity();
+
+ $user_guid = (int)$user_guid;
+ $user = get_entity($user_guid);
+
+ if (($user) && ($user instanceof ElggUser)) {
+ // Work out validate link
+ $code = uservalidationbyemail_generate_code($user_guid, $user->email);
+ $link = "{$site->url}uservalidationbyemail/confirm?u=$user_guid&c=$code";
+
+
+ // Send validation email
+ $subject = elgg_echo('email:validate:subject', array($user->name, $site->name));
+ $body = elgg_echo('email:validate:body', array($user->name, $site->name, $link, $site->name, $site->url));
+ $result = notify_user($user->guid, $site->guid, $subject, $body, NULL, 'email');
+
+ if ($result && !$admin_requested) {
+ system_message(elgg_echo('uservalidationbyemail:registerok'));
+ }
+
+ return $result;
+ }
+
+ return FALSE;
+}
+
+/**
+ * Validate a user
+ *
+ * @param int $user_guid
+ * @param string $code
+ * @return bool
+ */
+function uservalidationbyemail_validate_email($user_guid, $code) {
+ $user = get_entity($user_guid);
+
+ if ($code == uservalidationbyemail_generate_code($user_guid, $user->email)) {
+ return elgg_set_user_validation_status($user_guid, true, 'email');
+ }
+
+ return false;
+}
+
+/**
+ * Return a where clause to get entities
+ *
+ * "Unvalidated" means metadata of validated is not set or not truthy.
+ * We can't use elgg_get_entities_from_metadata() because you can't say
+ * "where the entity has metadata set OR it's not equal to 1".
+ *
+ * @return array
+ */
+function uservalidationbyemail_get_unvalidated_users_sql_where() {
+ global $CONFIG;
+
+ $validated_id = get_metastring_id('validated');
+ if ($validated_id === false) {
+ $validated_id = add_metastring('validated');
+ }
+ $one_id = get_metastring_id('1');
+ if ($one_id === false) {
+ $one_id = add_metastring('1');
+ }
+
+ // thanks to daveb@freenode for the SQL tips!
+ $wheres = array();
+ $wheres[] = "e.enabled='no'";
+ $wheres[] = "NOT EXISTS (
+ SELECT 1 FROM {$CONFIG->dbprefix}metadata md
+ WHERE md.entity_guid = e.guid
+ AND md.name_id = $validated_id
+ AND md.value_id = $one_id)";
+
+ return $wheres;
+} \ No newline at end of file
diff --git a/mod/uservalidationbyemail/manifest.xml b/mod/uservalidationbyemail/manifest.xml
new file mode 100644
index 000000000..800dd2641
--- /dev/null
+++ b/mod/uservalidationbyemail/manifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>User Validation by Email</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>security</category>
+ <description>Simple user account validation via email.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/uservalidationbyemail/start.php b/mod/uservalidationbyemail/start.php
new file mode 100644
index 000000000..f44d2ab50
--- /dev/null
+++ b/mod/uservalidationbyemail/start.php
@@ -0,0 +1,255 @@
+<?php
+/**
+ * Email user validation plugin.
+ * Non-admin accounts are invalid until their email address is confirmed.
+ *
+ * @package Elgg.Core.Plugin
+ * @subpackage UserValidationByEmail
+ */
+
+elgg_register_event_handler('init', 'system', 'uservalidationbyemail_init');
+
+function uservalidationbyemail_init() {
+
+ require_once dirname(__FILE__) . '/lib/functions.php';
+
+ // Register page handler to validate users
+ // This doesn't need to be an action because security is handled by the validation codes.
+ elgg_register_page_handler('uservalidationbyemail', 'uservalidationbyemail_page_handler');
+
+ // mark users as unvalidated and disable when they register
+ elgg_register_plugin_hook_handler('register', 'user', 'uservalidationbyemail_disable_new_user');
+
+ // canEdit override to allow not logged in code to disable a user
+ elgg_register_plugin_hook_handler('permissions_check', 'user', 'uservalidationbyemail_allow_new_user_can_edit');
+
+ // prevent users from logging in if they aren't validated
+ register_pam_handler('uservalidationbyemail_check_auth_attempt', "required");
+
+ // when requesting a new password
+ elgg_register_plugin_hook_handler('action', 'user/requestnewpassword', 'uservalidationbyemail_check_request_password');
+
+ // prevent the engine from logging in users via login()
+ elgg_register_event_handler('login', 'user', 'uservalidationbyemail_check_manual_login');
+
+ // make admin users always validated
+ elgg_register_event_handler('make_admin', 'user', 'uservalidationbyemail_validate_new_admin_user');
+
+ // register Walled Garden public pages
+ elgg_register_plugin_hook_handler('public_pages', 'walled_garden', 'uservalidationbyemail_public_pages');
+
+ // admin interface to manually validate users
+ elgg_register_admin_menu_item('administer', 'unvalidated', 'users');
+
+ elgg_extend_view('css/admin', 'uservalidationbyemail/css');
+ elgg_extend_view('js/elgg', 'uservalidationbyemail/js');
+
+ $action_path = dirname(__FILE__) . '/actions';
+
+ elgg_register_action('uservalidationbyemail/validate', "$action_path/validate.php", 'admin');
+ elgg_register_action('uservalidationbyemail/resend_validation', "$action_path/resend_validation.php", 'admin');
+ elgg_register_action('uservalidationbyemail/delete', "$action_path/delete.php", 'admin');
+ elgg_register_action('uservalidationbyemail/bulk_action', "$action_path/bulk_action.php", 'admin');
+}
+
+/**
+ * Disables a user upon registration.
+ *
+ * @param string $hook
+ * @param string $type
+ * @param bool $value
+ * @param array $params
+ * @return bool
+ */
+function uservalidationbyemail_disable_new_user($hook, $type, $value, $params) {
+ $user = elgg_extract('user', $params);
+
+ // no clue what's going on, so don't react.
+ if (!$user instanceof ElggUser) {
+ return;
+ }
+
+ // another plugin is requesting that registration be terminated
+ // no need for uservalidationbyemail
+ if (!$value) {
+ return $value;
+ }
+
+ // has the user already been validated?
+ if (elgg_get_user_validation_status($user->guid) == true) {
+ return $value;
+ }
+
+ // disable user to prevent showing up on the site
+ // set context so our canEdit() override works
+ elgg_push_context('uservalidationbyemail_new_user');
+ $hidden_entities = access_get_show_hidden_status();
+ access_show_hidden_entities(TRUE);
+
+ // Don't do a recursive disable. Any entities owned by the user at this point
+ // are products of plugins that hook into create user and might need
+ // access to the entities.
+ // @todo That ^ sounds like a specific case...would be nice to track it down...
+ $user->disable('uservalidationbyemail_new_user', FALSE);
+
+ // set user as unvalidated and send out validation email
+ elgg_set_user_validation_status($user->guid, FALSE);
+ uservalidationbyemail_request_validation($user->guid);
+
+ elgg_pop_context();
+ access_show_hidden_entities($hidden_entities);
+
+ return $value;
+}
+
+/**
+ * Override the canEdit() call for if we're in the context of registering a new user.
+ *
+ * @param string $hook
+ * @param string $type
+ * @param bool $value
+ * @param array $params
+ * @return bool|null
+ */
+function uservalidationbyemail_allow_new_user_can_edit($hook, $type, $value, $params) {
+ // $params['user'] is the user to check permissions for.
+ // we want the entity to check, which is a user.
+ $user = elgg_extract('entity', $params);
+
+ if (!($user instanceof ElggUser)) {
+ return;
+ }
+
+ $context = elgg_get_context();
+ if ($context == 'uservalidationbyemail_new_user' || $context == 'uservalidationbyemail_validate_user') {
+ return TRUE;
+ }
+
+ return;
+}
+
+/**
+ * Checks if an account is validated
+ *
+ * @params array $credentials The username and password
+ * @return bool
+ */
+function uservalidationbyemail_check_auth_attempt($credentials) {
+
+ if (!isset($credentials['username'])) {
+ return;
+ }
+
+ $username = $credentials['username'];
+
+ // See if the user exists and isn't validated
+ $access_status = access_get_show_hidden_status();
+ access_show_hidden_entities(TRUE);
+
+ $user = get_user_by_username($username);
+ if ($user && isset($user->validated) && !$user->validated) {
+ // show an error and resend validation email
+ uservalidationbyemail_request_validation($user->guid);
+ access_show_hidden_entities($access_status);
+ throw new LoginException(elgg_echo('uservalidationbyemail:login:fail'));
+ }
+
+ access_show_hidden_entities($access_status);
+}
+
+/**
+ * Checks sent passed validation code and user guids and validates the user.
+ *
+ * @param array $page
+ * @return bool
+ */
+function uservalidationbyemail_page_handler($page) {
+
+ if (isset($page[0]) && $page[0] == 'confirm') {
+ $code = sanitise_string(get_input('c', FALSE));
+ $user_guid = get_input('u', FALSE);
+
+ // new users are not enabled by default.
+ $access_status = access_get_show_hidden_status();
+ access_show_hidden_entities(true);
+
+ $user = get_entity($user_guid);
+
+ if ($code && $user) {
+ if (uservalidationbyemail_validate_email($user_guid, $code)) {
+
+ elgg_push_context('uservalidationbyemail_validate_user');
+ system_message(elgg_echo('email:confirm:success'));
+ $user = get_entity($user_guid);
+ $user->enable();
+ elgg_pop_context();
+
+ try {
+ login($user);
+ } catch(LoginException $e){
+ register_error($e->getMessage());
+ }
+ } else {
+ register_error(elgg_echo('email:confirm:fail'));
+ }
+ } else {
+ register_error(elgg_echo('email:confirm:fail'));
+ }
+
+ access_show_hidden_entities($access_status);
+ } else {
+ register_error(elgg_echo('email:confirm:fail'));
+ }
+
+ // forward to front page
+ forward('');
+}
+
+/**
+ * Make sure any admin users are automatically validated
+ *
+ * @param string $event
+ * @param string $type
+ * @param ElggUser $user
+ */
+function uservalidationbyemail_validate_new_admin_user($event, $type, $user) {
+ if ($user instanceof ElggUser && !$user->validated) {
+ elgg_set_user_validation_status($user->guid, TRUE, 'admin_user');
+ }
+}
+
+/**
+ * Registers public pages to allow in the case walled garden has been enabled.
+ */
+function uservalidationbyemail_public_pages($hook, $type, $return_value, $params) {
+ $return_value[] = 'uservalidationbyemail/confirm';
+ return $return_value;
+}
+
+/**
+ * Prevent a manual code login with login().
+ *
+ * @param string $event
+ * @param string $type
+ * @param ElggUser $user
+ * @return bool
+ *
+ * @throws LoginException
+ */
+function uservalidationbyemail_check_manual_login($event, $type, $user) {
+ $access_status = access_get_show_hidden_status();
+ access_show_hidden_entities(TRUE);
+
+ if (($user instanceof ElggUser) && !$user->isEnabled() && !$user->validated) {
+ // send new validation email
+ uservalidationbyemail_request_validation($user->getGUID());
+
+ // restore hidden entities settings
+ access_show_hidden_entities($access_status);
+
+ // throw error so we get a nice error message
+ throw new LoginException(elgg_echo('uservalidationbyemail:login:fail'));
+ }
+
+ access_show_hidden_entities($access_status);
+}
diff --git a/mod/uservalidationbyemail/views/default/admin/users/unvalidated.php b/mod/uservalidationbyemail/views/default/admin/users/unvalidated.php
new file mode 100644
index 000000000..62a35d0bb
--- /dev/null
+++ b/mod/uservalidationbyemail/views/default/admin/users/unvalidated.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * List of unvalidated users
+ */
+
+echo elgg_view_form('uservalidationbyemail/bulk_action', array(
+ 'id' => 'uservalidationbyemail-form',
+ 'action' => 'action/uservalidationbyemail/bulk_action'
+));
diff --git a/mod/uservalidationbyemail/views/default/forms/uservalidationbyemail/bulk_action.php b/mod/uservalidationbyemail/views/default/forms/uservalidationbyemail/bulk_action.php
new file mode 100644
index 000000000..9199922d6
--- /dev/null
+++ b/mod/uservalidationbyemail/views/default/forms/uservalidationbyemail/bulk_action.php
@@ -0,0 +1,112 @@
+<?php
+/**
+ * Admin area to view, validate, resend validation email, or delete unvalidated users.
+ *
+ * @package Elgg.Core.Plugin
+ * @subpackage UserValidationByEmail.Administration
+ */
+
+$limit = get_input('limit', 10);
+$offset = get_input('offset', 0);
+
+// can't use elgg_list_entities() and friends because we don't use the default view for users.
+$ia = elgg_set_ignore_access(TRUE);
+$hidden_entities = access_get_show_hidden_status();
+access_show_hidden_entities(TRUE);
+
+$options = array(
+ 'type' => 'user',
+ 'wheres' => uservalidationbyemail_get_unvalidated_users_sql_where(),
+ 'limit' => $limit,
+ 'offset' => $offset,
+ 'count' => TRUE,
+);
+$count = elgg_get_entities($options);
+
+if (!$count) {
+ access_show_hidden_entities($hidden_entities);
+ elgg_set_ignore_access($ia);
+
+ echo elgg_autop(elgg_echo('uservalidationbyemail:admin:no_unvalidated_users'));
+ return TRUE;
+}
+
+$options['count'] = FALSE;
+
+$users = elgg_get_entities($options);
+
+access_show_hidden_entities($hidden_entities);
+elgg_set_ignore_access($ia);
+
+// setup pagination
+$pagination = elgg_view('navigation/pagination',array(
+ 'base_url' => 'admin/users/unvalidated',
+ 'offset' => $offset,
+ 'count' => $count,
+ 'limit' => $limit,
+));
+
+$bulk_actions_checkbox = '<label><input type="checkbox" id="uservalidationbyemail-checkall" />'
+ . elgg_echo('uservalidationbyemail:check_all') . '</label>';
+
+$validate = elgg_view('output/url', array(
+ 'href' => 'action/uservalidationbyemail/validate/',
+ 'text' => elgg_echo('uservalidationbyemail:admin:validate'),
+ 'title' => elgg_echo('uservalidationbyemail:confirm_validate_checked'),
+ 'class' => 'uservalidationbyemail-submit',
+ 'is_action' => true,
+ 'is_trusted' => true,
+));
+
+$resend_email = elgg_view('output/url', array(
+ 'href' => 'action/uservalidationbyemail/resend_validation/',
+ 'text' => elgg_echo('uservalidationbyemail:admin:resend_validation'),
+ 'title' => elgg_echo('uservalidationbyemail:confirm_resend_validation_checked'),
+ 'class' => 'uservalidationbyemail-submit',
+ 'is_action' => true,
+ 'is_trusted' => true,
+));
+
+$delete = elgg_view('output/url', array(
+ 'href' => 'action/uservalidationbyemail/delete/',
+ 'text' => elgg_echo('uservalidationbyemail:admin:delete'),
+ 'title' => elgg_echo('uservalidationbyemail:confirm_delete_checked'),
+ 'class' => 'uservalidationbyemail-submit',
+ 'is_action' => true,
+ 'is_trusted' => true,
+));
+
+$bulk_actions = <<<___END
+ <ul class="elgg-menu elgg-menu-general elgg-menu-hz float-alt">
+ <li>$resend_email</li><li>$validate</li><li>$delete</li>
+ </ul>
+
+ $bulk_actions_checkbox
+___END;
+
+if (is_array($users) && count($users) > 0) {
+ $html = '<ul class="elgg-list elgg-list-distinct">';
+ foreach ($users as $user) {
+ $html .= "<li id=\"unvalidated-user-{$user->guid}\" class=\"elgg-item uservalidationbyemail-unvalidated-user-item\">";
+ $html .= elgg_view('uservalidationbyemail/unvalidated_user', array('user' => $user));
+ $html .= '</li>';
+ }
+ $html .= '</ul>';
+}
+
+echo <<<___END
+<div class="elgg-module elgg-module-inline uservalidation-module">
+ <div class="elgg-head">
+ $bulk_actions
+ </div>
+ <div class="elgg-body">
+ $html
+ </div>
+</div>
+___END;
+
+if ($count > 5) {
+ echo $bulk_actions;
+}
+
+echo $pagination;
diff --git a/mod/uservalidationbyemail/views/default/uservalidationbyemail/css.php b/mod/uservalidationbyemail/views/default/uservalidationbyemail/css.php
new file mode 100644
index 000000000..afe334713
--- /dev/null
+++ b/mod/uservalidationbyemail/views/default/uservalidationbyemail/css.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * CSS for user validation by email
+ */
+?>
+
+.uservalidation-module > .elgg-head * {
+ color: white;
+}
+.uservalidation-module > .elgg-body * {
+ color: #333;
+} \ No newline at end of file
diff --git a/mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php b/mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php
new file mode 100644
index 000000000..948a54651
--- /dev/null
+++ b/mod/uservalidationbyemail/views/default/uservalidationbyemail/js.php
@@ -0,0 +1,28 @@
+
+elgg.provide('elgg.uservalidationbyemail');
+
+elgg.uservalidationbyemail.init = function() {
+ $('#uservalidationbyemail-checkall').click(function() {
+ var checked = $(this).attr('checked') == 'checked';
+ $('#uservalidationbyemail-form .elgg-body').find('input[type=checkbox]').attr('checked', checked);
+ });
+
+ $('.uservalidationbyemail-submit').click(function(event) {
+ var $form = $('#uservalidationbyemail-form');
+ event.preventDefault();
+
+ // check if there are selected users
+ if ($('#uservalidationbyemail-form .elgg-body').find('input[type=checkbox]:checked').length < 1) {
+ return false;
+ }
+
+ // confirmation
+ if (!confirm($(this).attr('title'))) {
+ return false;
+ }
+
+ $form.attr('action', $(this).attr('href')).submit();
+ });
+};
+
+elgg.register_hook_handler('init', 'system', elgg.uservalidationbyemail.init);
diff --git a/mod/uservalidationbyemail/views/default/uservalidationbyemail/unvalidated_user.php b/mod/uservalidationbyemail/views/default/uservalidationbyemail/unvalidated_user.php
new file mode 100644
index 000000000..5c652a637
--- /dev/null
+++ b/mod/uservalidationbyemail/views/default/uservalidationbyemail/unvalidated_user.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Formats and list an unvalidated user.
+ *
+ * @package Elgg.Core.Plugin
+ * @subpackage UserValidationByEmail.Administration
+ */
+
+$user = elgg_extract('user', $vars);
+
+$checkbox = elgg_view('input/checkbox', array(
+ 'name' => 'user_guids[]',
+ 'value' => $user->guid,
+ 'default' => false,
+));
+
+$created = elgg_echo('uservalidationbyemail:admin:user_created', array(elgg_view_friendly_time($user->time_created)));
+
+$validate = elgg_view('output/confirmlink', array(
+ 'confirm' => elgg_echo('uservalidationbyemail:confirm_validate_user', array($user->username)),
+ 'href' => "action/uservalidationbyemail/validate/?user_guids[]=$user->guid",
+ 'text' => elgg_echo('uservalidationbyemail:admin:validate')
+));
+
+$resend_email = elgg_view('output/confirmlink', array(
+ 'confirm' => elgg_echo('uservalidationbyemail:confirm_resend_validation', array($user->username)),
+ 'href' => "action/uservalidationbyemail/resend_validation/?user_guids[]=$user->guid",
+ 'text' => elgg_echo('uservalidationbyemail:admin:resend_validation')
+));
+
+$delete = elgg_view('output/confirmlink', array(
+ 'confirm' => elgg_echo('uservalidationbyemail:confirm_delete', array($user->username)),
+ 'href' => "action/uservalidationbyemail/delete/?user_guids[]=$user->guid",
+ 'text' => elgg_echo('uservalidationbyemail:admin:delete')
+));
+$menu = 'test';
+$block = <<<___END
+ <label>$user->username: "$user->name" &lt;$user->email&gt;</label>
+ <div class="uservalidationbyemail-unvalidated-user-details">
+ $created
+ </div>
+___END;
+
+$menu = <<<__END
+ <ul class="elgg-menu elgg-menu-general elgg-menu-hz float-alt">
+ <li>$resend_email</li><li>$validate</li><li>$delete</li>
+ </ul>
+__END;
+
+echo elgg_view_image_block($checkbox, $block, array('image_alt' => $menu));
diff --git a/mod/videolist/.gitignore b/mod/videolist/.gitignore
new file mode 100644
index 000000000..339142537
--- /dev/null
+++ b/mod/videolist/.gitignore
@@ -0,0 +1,15 @@
+# ignore IDE/hidden/testing/OS cache files
+.*
+*~
+/nbproject
+/nb-configuration.xml
+Session.vim
+*.tmproj
+*.tmproject
+tmtags
+Thumbs.db
+Desktop.ini
+/JsTestDriver-*.jar
+
+# don't ignore travis config
+!/.travis.yml
diff --git a/mod/videolist/CHANGES.txt b/mod/videolist/CHANGES.txt
new file mode 100644
index 000000000..9a55a443f
--- /dev/null
+++ b/mod/videolist/CHANGES.txt
@@ -0,0 +1,14 @@
+Version 1.8.1
+(November 8, 2013 from https://github.com/lorea/videolist.git)
+
+ Enhancements
+ * Setting responsive dimensions.
+ * Making video thumbnails faster (thanks to ura soul).
+ * Do not display watching video in sidebar (thanks to ura soul).
+
+ Bugfixes
+ * Using https instead http in embeded videos.
+
+Version 1.8.0 (Foxglove)
+(September 13th, 2013 from git://github.com/lorea/videolist.git)
+
diff --git a/mod/videolist/actions/videolist/delete.php b/mod/videolist/actions/videolist/delete.php
new file mode 100644
index 000000000..0b9724c52
--- /dev/null
+++ b/mod/videolist/actions/videolist/delete.php
@@ -0,0 +1,39 @@
+<?php
+/**
+* Elgg videolist item delete
+*
+* @package ElggVideolist
+*/
+
+$guid = (int) get_input('guid');
+
+$videolist_item = get_entity($guid);
+if (!$videolist_item->guid) {
+ register_error(elgg_echo("videolist:deletefailed"));
+ forward('videolist/all');
+}
+
+if (!$videolist_item->canEdit()) {
+ register_error(elgg_echo("videolist:deletefailed"));
+ forward($videolist_item->getURL());
+}
+
+$container = $videolist_item->getContainerEntity();
+$url = $videolist_item->getURL();
+
+if (!$videolist_item->delete()) {
+ register_error(elgg_echo("videolist:deletefailed"));
+} else {
+ system_message(elgg_echo("videolist:deleted"));
+}
+
+// we can't come back to video url because it's deleted
+if($url != $_SERVER['HTTP_REFERER']) {
+ forward(REFERER);
+}
+
+if (elgg_instanceof($container, 'group')) {
+ forward("videolist/group/$container->guid/all");
+} else {
+ forward("videolist/owner/$container->username");
+}
diff --git a/mod/videolist/actions/videolist/edit.php b/mod/videolist/actions/videolist/edit.php
new file mode 100644
index 000000000..a5e6ea453
--- /dev/null
+++ b/mod/videolist/actions/videolist/edit.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Create or edit a video
+ *
+ * @package ElggVideolist
+ */
+
+$variables = elgg_get_config('videolist');
+$input = array();
+foreach ($variables as $name => $type) {
+ $filter_input = ($name !== 'video_url');
+ $input[$name] = get_input($name, null, $filter_input);
+ if ($name == 'title') {
+ $input[$name] = strip_tags($input[$name]);
+ }
+ if ($type == 'tags') {
+ $input[$name] = string_to_tag_array($input[$name]);
+ }
+}
+
+// Get guids
+$video_guid = (int)get_input('video_guid');
+$container_guid = (int)get_input('container_guid');
+
+elgg_make_sticky_form('videolist');
+
+elgg_load_library('elgg:videolist');
+
+// If new video, get data from video providers
+if(!$video_guid) {
+
+ $input['video_url'] = elgg_trigger_plugin_hook('videolist:preprocess', 'url', $input, $input['video_url']);
+
+ if (!$input['video_url']) {
+ register_error(elgg_echo('videolist:error:no_url'));
+ forward(REFERER);
+ }
+
+ $parsedPlatform = videolist_parse_url($input['video_url']);
+
+ if (!$parsedPlatform) {
+ register_error(elgg_echo('videolist:error:invalid_url'));
+ forward(REFERER);
+ }
+ list ($parsed, $platform) = $parsedPlatform;
+ /* @var Videolist_PlatformInterface $platform */
+
+ unset($input['title']);
+ unset($input['description']);
+ $input = array_merge($parsed, $platform->getData($parsed), $input);
+ $input['videotype'] = $platform->getType();
+
+} else {
+ unset($input['video_url']);
+}
+
+if ($video_guid) {
+ $video = get_entity($video_guid);
+ if (!$video || !$video->canEdit()) {
+ register_error(elgg_echo('videolist:error:no_save'));
+ forward(REFERER);
+ }
+ $new_video = false;
+} else {
+ $video = new ElggObject();
+ $video->subtype = 'videolist_item';
+ $new_video = true;
+}
+
+if (sizeof($input) > 0) {
+ foreach ($input as $name => $value) {
+ $video->$name = $value;
+ }
+}
+
+$video->container_guid = $container_guid;
+
+if ($video->save()) {
+
+ elgg_clear_sticky_form('videolist');
+
+ // Let's save the thumbnail in the data folder
+ $thumb_url = $video->thumbnail;
+ if ($thumb_url) {
+ $thumbnail = file_get_contents($thumb_url);
+ if ($thumbnail) {
+ $prefix = "videolist/" . $video->guid;
+ $filehandler = new ElggFile();
+ $filehandler->owner_guid = $video->owner_guid;
+ $filehandler->setFilename($prefix . ".jpg");
+ $filehandler->open("write");
+ $filehandler->write($thumbnail);
+ $filehandler->close();
+ }
+ }
+
+ system_message(elgg_echo('videolist:saved'));
+
+ if ($new_video) {
+ add_to_river('river/object/videolist_item/create', 'create', elgg_get_logged_in_user_guid(), $video->guid);
+ }
+
+ forward($video->getURL());
+} else {
+ register_error(elgg_echo('videolist:error:no_save'));
+ forward(REFERER);
+}
diff --git a/mod/videolist/graphics/_videolist_icon_medium.png b/mod/videolist/graphics/_videolist_icon_medium.png
new file mode 100644
index 000000000..9cfc50fd8
--- /dev/null
+++ b/mod/videolist/graphics/_videolist_icon_medium.png
Binary files differ
diff --git a/mod/videolist/graphics/videolist_icon_medium.png b/mod/videolist/graphics/videolist_icon_medium.png
new file mode 100644
index 000000000..e567c70ed
--- /dev/null
+++ b/mod/videolist/graphics/videolist_icon_medium.png
Binary files differ
diff --git a/mod/videolist/graphics/videolist_icon_small.png b/mod/videolist/graphics/videolist_icon_small.png
new file mode 100644
index 000000000..507260f28
--- /dev/null
+++ b/mod/videolist/graphics/videolist_icon_small.png
Binary files differ
diff --git a/mod/videolist/graphics/videolist_icon_tiny.png b/mod/videolist/graphics/videolist_icon_tiny.png
new file mode 100644
index 000000000..2ea6e05f4
--- /dev/null
+++ b/mod/videolist/graphics/videolist_icon_tiny.png
Binary files differ
diff --git a/mod/videolist/languages/ca.php b/mod/videolist/languages/ca.php
new file mode 100644
index 000000000..289c1f44a
--- /dev/null
+++ b/mod/videolist/languages/ca.php
@@ -0,0 +1,40 @@
+<?php
+$language = array (
+ 'videolist' => 'Vídeos',
+ 'videolist:owner' => 'Vídeos de %s',
+ 'videolist:friends' => 'Vídeos dels amics',
+ 'videolist:all' => 'Tots els vídeos',
+ 'videolist:add' => 'Afegir vídeo',
+ 'videolist:group' => 'Vídeos del grup',
+ 'groups:enablevideolist' => 'Activar vídeos del grup',
+ 'videolist:edit' => 'Edita aquest vídeo',
+ 'videolist:delete' => 'Esborra aquest vídeo',
+ 'videolist:new' => 'Un nou vídeo',
+ 'videolist:notification' => '%s ha afegit un nou vídeo
+
+%s
+%s
+
+Veure i comentar al nou vídeo:
+%s',
+ 'videolist:delete:confirm' => 'Estàs segur de voler esborrar aquest vídeo?',
+ 'item:object:videolist_item' => 'Vídeo',
+ 'videolist:nogroup' => 'Aquest grup no té cap vídeo encara',
+ 'videolist:more' => 'Més vídeos',
+ 'videolist:none' => 'No hi ha cap vídeo',
+ 'river:create:object:videolist_item' => '%s ha creat el vídeo %s',
+ 'river:update:object:videolist_item' => '% ha actualitzat el vídeo %s',
+ 'river:comment:object:videolist_item' => '%s ha comentat al vídeo titulat %s',
+ 'videolist:title' => 'Títol',
+ 'videolist:description' => 'Descripció',
+ 'videolist:video_url' => 'Escriu la URL del vídeo',
+ 'videolist:access_id' => 'Qui pot veure que has penjat aquest vídeo?',
+ 'videolist:tags' => 'Afegir etiquetes',
+ 'videolist:error:no_save' => 'Hi ha hagut un error desant el vídeo, si us plau intenta-ho d\'aquí a una estona',
+ 'videolist:saved' => 'El teu vídeo s\'ha desat correctament!',
+ 'videolist:deleted' => 'El teu vídeo s\'ha esborrat correctament!',
+ 'videolist:deletefailed' => 'Malauradament, aquest vídeo no es pot esborrar ara. Si us plau, intenta-ho més tard',
+ 'videolist:num_videos' => 'Nombre de vídeos a mostrar',
+ 'videolist:widget:description' => 'La teva llista de reproducció de vídeos.',
+);
+add_translation("ca", $language); \ No newline at end of file
diff --git a/mod/videolist/languages/en.php b/mod/videolist/languages/en.php
new file mode 100644
index 000000000..d357725a7
--- /dev/null
+++ b/mod/videolist/languages/en.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Elgg videolist english language pack.
+ *
+ * @package ElggVideolist
+ */
+
+$english = array(
+
+ /**
+ * Menu items and titles
+ */
+
+ 'videolist' => "Videos",
+ 'videolist:owner' => "%s's videos",
+ 'videolist:friends' => "Friends' videos",
+ 'videolist:all' => "All site videos",
+ 'videolist:add' => "Add a video",
+
+ 'videolist:group' => "Group videos",
+ 'groups:enablevideolist' => 'Enable group videos',
+
+ 'videolist:edit' => "Edit this video",
+ 'videolist:delete' => "Delete this video",
+
+ 'videolist:new' => "Add a video",
+ 'videolist:notification' =>
+'%s added a new video:
+
+%s
+%s
+
+View and comment on the new video:
+%s
+',
+ 'videolist:delete:confirm' => 'Are you sure you want to delete this video?',
+ 'item:object:videolist_item' => 'Video',
+ 'videolist:nogroup' => 'This group does not have any video yet',
+ 'videolist:more' => 'More videos',
+ 'videolist:none' => 'No videos posted yet.',
+
+ /**
+ * River
+ **/
+
+ 'river:create:object:videolist_item' => '%s created the video %s',
+ 'river:update:object:videolist_item' => '%s updated the video %s',
+ 'river:comment:object:videolist_item' => '%s commented on the video titled %s',
+
+ /**
+ * Form fields
+ */
+
+ 'videolist:title' => 'Title',
+ 'videolist:description' => 'Description',
+ 'videolist:video_url' => 'Enter video URL',
+ 'videolist:access_id' => 'Who can see you posted this video?',
+ 'videolist:tags' => 'Add tags',
+
+ /**
+ * Status and error messages
+ */
+ 'videolist:error:no_save' => 'There was an error in saving the video, please try after sometime',
+ 'videolist:saved' => 'Your video has been saved successfully!',
+ 'videolist:deleted' => 'Your video was removed successfully!',
+ 'videolist:deletefailed' => 'Unfortunately, this video could not be removed now. Please try again later',
+
+
+ /**
+ * Widget
+ **/
+
+ 'videolist:num_videos' => 'Number of videos to display',
+ 'videolist:widget:description' => 'Your personal video playlist.',
+
+);
+
+add_translation("en", $english);
diff --git a/mod/videolist/languages/es.php b/mod/videolist/languages/es.php
new file mode 100644
index 000000000..ad8cbe46c
--- /dev/null
+++ b/mod/videolist/languages/es.php
@@ -0,0 +1,40 @@
+<?php
+$language = array (
+ 'videolist' => 'Vídeos',
+ 'videolist:owner' => 'vídeos de %s',
+ 'videolist:friends' => 'Vídeos de amigos',
+ 'videolist:all' => 'Todos los vídeos',
+ 'videolist:add' => 'Añadir vídeo',
+ 'videolist:group' => 'Vídeos del grupo',
+ 'groups:enablevideolist' => 'Habilitar vídeos de grupo',
+ 'videolist:edit' => 'Editar este vídeo',
+ 'videolist:delete' => 'Eliminar este vídeo',
+ 'videolist:new' => 'Nuevo vídeo',
+ 'videolist:notification' => '%s ha añadido un nuevo vídeo:
+
+%s
+%s
+
+Ver y comentar el nuevo vídeo:
+%s',
+ 'videolist:delete:confirm' => 'Estas seguro de que quieres eliminar este vídeo?',
+ 'item:object:videolist_item' => 'Vídeo',
+ 'videolist:nogroup' => 'Este grupo no tiene ningún video todavía',
+ 'videolist:more' => 'Más videos',
+ 'videolist:none' => 'No hay videos colgados.',
+ 'river:create:object:videolist_item' => '%s ha creado el video %s',
+ 'river:update:object:videolist_item' => '%s ha actualizado el video %s',
+ 'river:comment:object:videolist_item' => '%s ha comentado en el video titulado %s',
+ 'videolist:title' => 'Título',
+ 'videolist:description' => 'Descripción',
+ 'videolist:video_url' => 'URL del video',
+ 'videolist:access_id' => 'Quien puede ver que has colgado el video?',
+ 'videolist:tags' => 'Añadir etiquetas',
+ 'videolist:error:no_save' => 'Ha habido un error guardando el video, por favor inténtalo más tarde',
+ 'videolist:saved' => '¡Tu video se ha guardado correctamente!',
+ 'videolist:deleted' => '¡Tu video se ha borrado correctamente!',
+ 'videolist:deletefailed' => 'Desafortunadamente este video no se puede borrar ahora. Por favor inténtalo más tarde de nuevo',
+ 'videolist:num_videos' => 'Número de videos a mostrar',
+ 'videolist:widget:description' => 'Tu lista personal de reproducción de videos.',
+);
+add_translation("es", $language); \ No newline at end of file
diff --git a/mod/videolist/languages/fr.php b/mod/videolist/languages/fr.php
new file mode 100644
index 000000000..c21495546
--- /dev/null
+++ b/mod/videolist/languages/fr.php
@@ -0,0 +1,28 @@
+<?php
+$fr = array (
+ 'videolist' => 'Mes videos',
+ 'videolist:home' => '%s \'s Videos',
+ 'videolist:new' => 'ajouter une video',
+ 'videolist:find' => 'toutes les videos',
+ 'videolist:search' => 'toutes les videos',
+ 'videolist:submit' => 'envoie',
+ 'videolist:widget' => 'Mes videos',
+ 'videolist:widget:description' => 'tes videos de youtube',
+ 'videolist:num_videos' => 'nombre de videos à afficher',
+ 'profile:videoheader' => 'ma galerie video',
+ 'videolist:tags' => 'ajoute des tags',
+ 'videolist:browse' => 'cherche des videos - %s',
+ 'videolist:browsemenu' => 'cherche des videos',
+ 'videolist:title_search_tube' => 'cherche des videos de',
+ 'videolist:searchTubeVideos' => 'cherche sur youtube.com',
+ 'videolist:comments' => 'commentaires',
+ 'videolist:commentspost' => 'poste',
+ 'videolist:river:item' => 'une video',
+ 'videolist:river:created' => '%s a ajouté',
+ 'videolist:group' => 'Videos',
+ 'videolist:groupall' => 'toutes les vidoes du groupe',
+ 'videolist:none' => 'ce groupe n\'as pas encore de videos',
+);
+
+add_translation("fr", $fr);
+
diff --git a/mod/videolist/languages/gl.php b/mod/videolist/languages/gl.php
new file mode 100644
index 000000000..90444e3fa
--- /dev/null
+++ b/mod/videolist/languages/gl.php
@@ -0,0 +1,29 @@
+<?php
+$gl = array (
+ 'videolist' => 'Os meus vídeos',
+ 'videolist:home' => 'Vídeos de %s',
+ 'videolist:new' => 'Engadir vídeos',
+ 'videolist:find' => 'Vídeos de toda a rede',
+ 'videolist:search' => 'Procurar vídeos',
+ 'videolist:submit' => 'Aceptar',
+ 'videolist:widget' => 'Os meus vídeos',
+ 'videolist:widget:description' => 'Podes comparti-la túa galería de vídeos personalizada co resto da rede',
+ 'videolist:num_videos' => 'Número de vídeos a mostrar',
+ 'profile:videoheader' => 'As miñas galerías de vídeos',
+ 'videolist:tags' => 'Engadir etiquetas',
+ 'videolist:browse' => 'Procura-los vídeos de %s',
+ 'videolist:browsemenu' => 'Procurar vídeos',
+ 'videolist:title_search_tube' => 'Procurar vídeos en:',
+ 'videolist:searchTubeVideos' => 'Procurar en youtube',
+ 'videolist:comments' => 'Comentarios',
+ 'videolist:commentspost' => 'Entrada',
+ 'videolist:river:item' => 'un vídeo titulado:',
+ 'videolist:river:created' => '%s engadiu',
+ 'videolist:group' => 'Vídeos do grupo',
+ 'videolist:groupall' => 'Tódolos vídeos do grupo',
+ 'videolist:none' => 'O non hai vídeos subidos.',
+ 'videolist:edit' => 'Editar vídeo %s',
+);
+
+add_translation("gl", $gl);
+
diff --git a/mod/videolist/languages/pt.php b/mod/videolist/languages/pt.php
new file mode 100644
index 000000000..e8b28c182
--- /dev/null
+++ b/mod/videolist/languages/pt.php
@@ -0,0 +1,50 @@
+<?php
+$pt = array (
+ 'videolist' => 'Meus vídeos',
+ 'videolist:home' => 'Vídeos de %s',
+ 'videolist:new' => 'Adicionar vídeo',
+ 'videolist:find' => 'Todos os vídeos',
+ 'videolist:search' => 'Todos os vídeos',
+ 'videolist:submit' => 'Publicar',
+ 'videolist:widget' => 'Meus Vídeos',
+ 'videolist:num_videos' => 'Número de visto a visualizar',
+ 'profile:videoheader' => 'Minha galeria de vídeos',
+ 'videolist:tags' => 'Adicionar etiquetas',
+ 'videolist:browse' => 'Procurar vídeos - %s',
+ 'videolist:browsemenu' => 'Procurar vídeos',
+ 'videolist:title_search_tube' => 'Procurar vídeos de',
+ 'videolist:searchTubeVideos' => 'Procurar no youtube',
+ 'videolist:comments' => 'Comentários',
+ 'videolist:commentspost' => 'Publicar',
+ 'videolist:river:item' => 'um video',
+ 'videolist:river:created' => 'adicionado por %s',
+ 'videolist:group' => 'Vídeos',
+ 'videolist:groupall' => 'Todos os vídeos do grupo',
+ 'videolist:none' => 'Este grupo ainda não tem vídeos',
+ 'videolist:user' => 'Vídeos de %s',
+ 'videolist:all' => 'Todos vídeos',
+ 'videolist:add' => 'Adicionar um vídeo',
+ 'videolist:play:video' => 'Tocar',
+ 'videolist:add:video' => 'Adicionar',
+ 'videolist:friends' => 'Vídeos dos amigos',
+ 'videolist:edit' => 'Editar vídeos',
+ 'videolist:ingroup' => 'na comunidade',
+ 'videolist:title' => 'Título',
+ 'videolist:description' => 'Descrição',
+ 'videolist:video_url' => 'Entrar um endereço do vídeo',
+ 'videolist:error:no_save' => 'Ocorreu um erro ao salvar o vídeo, por favor tente mais tarde',
+ 'videolist:saved' => 'Seu vídeo foi salvo com sucesso!',
+ 'videolist_item:more' => 'Ver todos vídeos',
+ 'videolist_item:none' => 'desculpe, nenhum vídeo foi encontrado',
+ 'videolist:deleted' => 'Seu vídeo foi removido com sucesso!',
+ 'videolist:deletefailed' => 'Infelizmente, este vídeo não pode ser removido agora. Por favor, tente mais tarde.',
+ 'videolist:widget:description' => 'Demonstre sua galeira de vídeos pessoas do youtube',
+ 'videolist:access_id' => 'Quem pode ver que você enviou este vídeo?',
+ 'item:object:videolist_item' => 'Vídeos',
+ 'river:create:object:videolist_item' => '%s adicionou o vídeo %s',
+ 'river:comment:object:videolist_item' => '%s comentou em %s',
+ 'videolist:delete:confirm' => 'Você tem certeza que deseja apagar este vídeo?',
+);
+
+add_translation("pt", $pt);
+
diff --git a/mod/videolist/lib/Videolist/Platform/Bliptv.php b/mod/videolist/lib/Videolist/Platform/Bliptv.php
new file mode 100644
index 000000000..62cefbd39
--- /dev/null
+++ b/mod/videolist/lib/Videolist/Platform/Bliptv.php
@@ -0,0 +1,38 @@
+<?php
+
+class Videolist_Platform_Bliptv implements Videolist_PlatformInterface
+{
+ public function getType()
+ {
+ return "bliptv";
+ }
+
+ public function parseUrl($url)
+ {
+ $parsed = parse_url($url);
+ $path = explode('/', $parsed['path']);
+
+ if ($parsed['host'] != 'blip.tv' || count($path) < 3) {
+ return false;
+ }
+
+ return array(
+ 'video_id' => $parsed['path'],
+ );
+ }
+
+ public function getData($parsed)
+ {
+ $video_id = $parsed['video_id'];
+
+ $buffer = file_get_contents('https://blip.tv'.$video_id.'?skin=rss');
+ $xml = new SimpleXMLElement($buffer);
+
+ return array(
+ 'title' => current($xml->xpath('/rss/channel/item/title')),
+ 'description' => strip_tags(current($xml->xpath('/rss/channel/item/description'))),
+ 'thumbnail' => current($xml->xpath('/rss/channel/item/media:thumbnail/@url')),
+ 'embedurl' => current($xml->xpath('/rss/channel/item/blip:embedUrl')),
+ );
+ }
+}
diff --git a/mod/videolist/lib/Videolist/Platform/Gisstv.php b/mod/videolist/lib/Videolist/Platform/Gisstv.php
new file mode 100644
index 000000000..b79898449
--- /dev/null
+++ b/mod/videolist/lib/Videolist/Platform/Gisstv.php
@@ -0,0 +1,50 @@
+<?php
+
+class Videolist_Platform_Gisstv implements Videolist_PlatformInterface
+{
+ public function getType()
+ {
+ return "gisstv";
+ }
+
+ public function parseUrl($url)
+ {
+ $parsed = parse_url($url);
+ $path = explode('/', $parsed['path']);
+
+ if ($parsed['host'] != 'giss.tv' || $path[1] != 'dmmdb') {
+ return false;
+ }
+
+ if($path[2] == 'contents' && isset($path[3])) {
+ $video_id = $path[3];
+ } elseif($path[3] == 'contents' && isset($path[4])) {
+ $video_id = $path[4];
+ } else {
+ return false;
+ }
+
+ return array(
+ 'video_id' => $video_id,
+ );
+ }
+
+ public function getData($parsed)
+ {
+ $video_id = $parsed['video_id'];
+
+ $buffer = file_get_contents('http://giss.tv/dmmdb//rss.php');
+ $xml = new SimpleXMLElement($buffer);
+
+ $data = array();
+ foreach($xml->xpath('/rss/channel/item') as $item){
+ if ($item->link === 'http://giss.tv/dmmdb//contents/'.$video_id) {
+ $data['title'] = $item->title;
+ $data['description'] = strip_tags($item->description);
+ $data['thumbnail'] = $item->thumbnail;
+ break;
+ }
+ }
+ return $data;
+ }
+}
diff --git a/mod/videolist/lib/Videolist/Platform/Metacafe.php b/mod/videolist/lib/Videolist/Platform/Metacafe.php
new file mode 100644
index 000000000..74a346b34
--- /dev/null
+++ b/mod/videolist/lib/Videolist/Platform/Metacafe.php
@@ -0,0 +1,38 @@
+<?php
+
+class Videolist_Platform_Metacafe implements Videolist_PlatformInterface
+{
+ public function getType()
+ {
+ return "metacafe";
+ }
+
+ public function parseUrl($url)
+ {
+ $parsed = parse_url($url);
+ $path = explode('/', $parsed['path']);
+
+ if ($parsed['host'] != 'www.metacafe.com' || $path[1] != 'watch' || !(int) $path[2]) {
+ return false;
+ }
+
+ return array(
+ 'video_id' => $path[2],
+ );
+ }
+
+ public function getData($parsed)
+ {
+ $video_id = $parsed['video_id'];
+
+ $buffer = file_get_contents("https://www.metacafe.com/api/item/$video_id");
+ $xml = new SimpleXMLElement($buffer);
+
+ return array(
+ 'title' => current($xml->xpath('/rss/channel/item/title')),
+ 'description' => strip_tags(current($xml->xpath('/rss/channel/item/description'))),
+ 'thumbnail' => current($xml->xpath('/rss/channel/item/media:thumbnail/@url')),
+ 'embedurl' => current($xml->xpath('/rss/channel/item/media:content/@url')),
+ );
+ }
+}
diff --git a/mod/videolist/lib/Videolist/Platform/Vimeo.php b/mod/videolist/lib/Videolist/Platform/Vimeo.php
new file mode 100644
index 000000000..6930cdb2d
--- /dev/null
+++ b/mod/videolist/lib/Videolist/Platform/Vimeo.php
@@ -0,0 +1,40 @@
+<?php
+
+class Videolist_Platform_Vimeo implements Videolist_PlatformInterface
+{
+ public function getType()
+ {
+ return "vimeo";
+ }
+
+ public function parseUrl($url)
+ {
+ $parsed = parse_url($url);
+ $path = explode('/', $parsed['path']);
+
+ if ($parsed['host'] != 'vimeo.com' || !(int) $path[1]) {
+ return false;
+ }
+
+ return array(
+ 'video_id' => $path[1],
+ );
+ }
+
+ public function getData($parsed)
+ {
+ $video_id = $parsed['video_id'];
+
+ $buffer = file_get_contents("https://vimeo.com/api/v2/video/$video_id.xml");
+ $xml = new SimpleXMLElement($buffer);
+
+ $videos = $xml->children();
+ $video = $videos[0];
+
+ return array(
+ 'title' => $video->title,
+ 'description' => strip_tags($video->description),
+ 'thumbnail' => $video->thumbnail_medium,
+ );
+ }
+}
diff --git a/mod/videolist/lib/Videolist/Platform/Youtube.php b/mod/videolist/lib/Videolist/Platform/Youtube.php
new file mode 100644
index 000000000..31a4bc950
--- /dev/null
+++ b/mod/videolist/lib/Videolist/Platform/Youtube.php
@@ -0,0 +1,49 @@
+<?php
+
+class Videolist_Platform_Youtube implements Videolist_PlatformInterface
+{
+ public function getType()
+ {
+ return "youtube";
+ }
+
+ public function parseUrl($url)
+ {
+ $parsed = parse_url($url);
+ $id = '';
+ if (! empty($parsed['host'])) {
+ if ($parsed['host'] === 'youtu.be') {
+ // short URLs
+ $id = substr($parsed['path'], 1);
+ } elseif ($parsed['host'] === 'www.youtube.com'
+ && $parsed['path'] === '/watch'
+ && ! empty($parsed['query'])) {
+ // long URLs
+ parse_str($parsed['query'], $query);
+ if (! empty($query['v'])) {
+ $id = $query['v'];
+ }
+ }
+ }
+ if ($id) {
+ return array(
+ 'video_id' => $id,
+ );
+ }
+ return false;
+ }
+
+ public function getData($parsed)
+ {
+ $video_id = $parsed['video_id'];
+
+ $buffer = file_get_contents('https://gdata.youtube.com/feeds/api/videos/'.$video_id);
+ $xml = new SimpleXMLElement($buffer);
+
+ return array(
+ 'title' => $xml->title,
+ 'description' => strip_tags($xml->content),
+ 'thumbnail' => "https://img.youtube.com/vi/$video_id/default.jpg",
+ );
+ }
+}
diff --git a/mod/videolist/lib/Videolist/PlatformInterface.php b/mod/videolist/lib/Videolist/PlatformInterface.php
new file mode 100644
index 000000000..25ca019e9
--- /dev/null
+++ b/mod/videolist/lib/Videolist/PlatformInterface.php
@@ -0,0 +1,23 @@
+<?php
+
+interface Videolist_PlatformInterface {
+ /**
+ * @abstract
+ * @return string
+ */
+ public function getType();
+
+ /**
+ * @abstract
+ * @param string $url
+ * @return array
+ */
+ public function parseUrl($url);
+
+ /**
+ * @abstract
+ * @param array $parsed
+ * @return array
+ */
+ public function getData($parsed);
+}
diff --git a/mod/videolist/lib/videolist.php b/mod/videolist/lib/videolist.php
new file mode 100644
index 000000000..b86db99cf
--- /dev/null
+++ b/mod/videolist/lib/videolist.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * @return array
+ */
+function videolist_get_default_platforms() {
+ static $platforms = array();
+ if (! $platforms) {
+ require dirname(__FILE__) . '/Videolist/PlatformInterface.php';
+ $path = dirname(__FILE__) . '/Videolist/Platform';
+ foreach (scandir($path) as $filename) {
+ if (preg_match('/^(\\w+)\\.php$/', $filename, $m)) {
+ require "$path/$filename";
+ $class = 'Videolist_Platform_' . $m[1];
+ $platform = new $class();
+ if ($platform instanceof Videolist_PlatformInterface) {
+ /* @var Videolist_PlatformInterface $platform */
+ $platforms[$platform->getType()][] = $platform;
+ }
+ }
+ }
+ }
+ return $platforms;
+}
+
+/**
+ * @param string $url
+ * @return array [parsed, platform]
+ */
+function videolist_parse_url($url) {
+ $params = array(
+ 'url' => $url,
+ );
+ $platforms = videolist_get_default_platforms();
+ $platforms = elgg_trigger_plugin_hook('videolist:prepare', 'platforms', $params, $platforms);
+ foreach ($platforms as $list) {
+ foreach ($list as $platform) {
+ /* @var Videolist_PlatformInterface $platform */
+ $parsed = $platform->parseUrl($url);
+ if ($parsed) {
+ return array($parsed, $platform);
+ }
+ }
+ }
+ return false;
+}
diff --git a/mod/videolist/manifest.xml b/mod/videolist/manifest.xml
new file mode 100644
index 000000000..08539650a
--- /dev/null
+++ b/mod/videolist/manifest.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Videolist</name>
+ <author>Prateek Choudhary, Core developers, Lorea developers</author>
+ <version>1.8.1</version>
+ <category>lorea</category>
+ <category>content</category>
+ <category>multimedia</category>
+ <description>This plugin allows users to create a library of videos.</description>
+ <website>https://lorea.org/</website>
+ <copyright>(C) Prateek Choudhary 2008-09, Elgg 2010, Lorea 2011-13</copyright>
+ <license>GNU Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/videolist/pages/videolist/add.php b/mod/videolist/pages/videolist/add.php
new file mode 100644
index 000000000..6dd6a2f1f
--- /dev/null
+++ b/mod/videolist/pages/videolist/add.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Add a new video
+ *
+ * @package ElggVideolist
+ */
+
+$page_owner = elgg_get_page_owner_entity();
+
+gatekeeper();
+group_gatekeeper();
+
+$title = elgg_echo('videolist:add');
+
+// set up breadcrumbs
+elgg_push_breadcrumb(elgg_echo('videolist'), "file/all");
+if (elgg_instanceof($page_owner, 'user')) {
+ elgg_push_breadcrumb($page_owner->name, "videolist/owner/$page_owner->username");
+} else {
+ elgg_push_breadcrumb($page_owner->name, "videolist/group/$page_owner->guid/all");
+}
+elgg_push_breadcrumb($title);
+
+// create form
+$form_vars = array();
+$body_vars = array(
+ 'container_guid' => $page_owner->guid,
+ 'access_id' => elgg_instanceof($page_owner, 'user') ? ACCESS_DEFAULT : $page_owner->group_acl,
+);
+
+$content = elgg_view_form('videolist/edit', $form_vars, $body_vars);
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/videolist/pages/videolist/all.php b/mod/videolist/pages/videolist/all.php
new file mode 100644
index 000000000..6fe68f3eb
--- /dev/null
+++ b/mod/videolist/pages/videolist/all.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * All videos
+ *
+ * @package ElggVideolist
+ */
+
+elgg_push_breadcrumb(elgg_echo('videolist'));
+
+elgg_register_title_button();
+
+$limit = get_input("limit", 10);
+
+$title = elgg_echo('videolist:all');
+
+$content = elgg_list_entities(array(
+ 'types' => 'object',
+ 'subtypes' => 'videolist_item',
+ 'limit' => $limit,
+ 'full_view' => FALSE
+));
+
+$sidebar = elgg_view('videolist/sidebar');
+
+elgg_set_context('videolist');
+$body = elgg_view_layout('content', array(
+ 'filter_context' => 'all',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => $sidebar,
+));
+
+// Finally draw the page
+echo elgg_view_page($title, $body);
diff --git a/mod/videolist/pages/videolist/edit.php b/mod/videolist/pages/videolist/edit.php
new file mode 100644
index 000000000..916d9d280
--- /dev/null
+++ b/mod/videolist/pages/videolist/edit.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Edit a videolist item
+ *
+ * @package ElggVideolist
+ */
+
+gatekeeper();
+
+$guid = (int) get_input('guid');
+$videolist_item = get_entity($guid);
+if (!$videolist_item) {
+ forward();
+}
+if (!$videolist_item->canEdit()) {
+ forward();
+}
+
+$title = elgg_echo('videolist:edit');
+$container = get_entity($videolist_item->getContainerGUID());
+
+elgg_push_breadcrumb(elgg_echo('videolist'), "videolist/all");
+if(elgg_instanceof($container, 'user')){
+ elgg_push_breadcrumb($container->name, "videolist/owner/$container->username/");
+} else {
+ elgg_push_breadcrumb($container->name, "videolist/group/$container->guid/");
+}
+elgg_push_breadcrumb($videolist_item->title, $videolist_item->getURL());
+elgg_push_breadcrumb($title);
+
+elgg_set_page_owner_guid($container->guid);
+
+$form_vars = array();
+$body_vars = array('guid' => $guid);
+
+foreach(array_keys(elgg_get_config('videolist')) as $variable) {
+ $body_vars[$variable] = $videolist_item->$variable;
+}
+$body_vars['container_guid'] = $videolist_item->container_guid;
+
+$content = elgg_view_form('videolist/edit', $form_vars, $body_vars);
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/videolist/pages/videolist/friends.php b/mod/videolist/pages/videolist/friends.php
new file mode 100644
index 000000000..8bbb34698
--- /dev/null
+++ b/mod/videolist/pages/videolist/friends.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Friends Videolist
+ *
+ * @package ElggVideolist
+ */
+
+$page_owner = elgg_get_page_owner_entity();
+
+elgg_push_breadcrumb(elgg_echo('videolist'), "videolist/all");
+elgg_push_breadcrumb($page_owner->name, "videolist/owner/$page_owner->username");
+elgg_push_breadcrumb(elgg_echo('friends'));
+
+elgg_register_title_button();
+
+$title = elgg_echo("videolist:friends");
+
+// offset is grabbed in list_user_friends_objects
+$content = list_user_friends_objects($page_owner->guid, 'videolist_items', 10, false);
+if (!$content) {
+ $content = elgg_echo("videolist:none");
+}
+
+$sidebar = elgg_view('videolist/sidebar', array());
+
+$body = elgg_view_layout('content', array(
+ 'filter_context' => 'friends',
+ 'content' => $content,
+ 'title' => $title,
+ 'sidebar' => $sidebar,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/videolist/pages/videolist/owner.php b/mod/videolist/pages/videolist/owner.php
new file mode 100644
index 000000000..74917354e
--- /dev/null
+++ b/mod/videolist/pages/videolist/owner.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Individual's or group's videolist
+ *
+ * @package ElggVideolist
+ */
+
+// access check for closed groups
+group_gatekeeper();
+
+$page_owner = elgg_get_page_owner_entity();
+
+elgg_push_breadcrumb(elgg_echo('videolist'), "videolist/all");
+elgg_push_breadcrumb($page_owner->name);
+
+elgg_register_title_button();
+
+$params = array();
+
+if ($page_owner->guid == elgg_get_logged_in_user_guid()) {
+ // user looking at own videolist
+ $params['filter_context'] = 'mine';
+} else if (elgg_instanceof($page_owner, 'user')) {
+ // someone else's videolist
+ // do not show select a tab when viewing someone else's posts
+ $params['filter_context'] = 'none';
+} else {
+ // group videolist
+ $params['filter'] = '';
+}
+
+$title = elgg_echo("videolist:owner", array($page_owner->name));
+
+// List videolist
+$content = elgg_list_entities(array(
+ 'types' => 'object',
+ 'subtypes' => 'videolist_item',
+ 'container_guid' => $page_owner->guid,
+ 'limit' => 10,
+ 'full_view' => FALSE,
+));
+if (!$content) {
+ $content = elgg_echo("videolist:none");
+}
+
+$sidebar = elgg_view('videolist/sidebar');
+
+$params['content'] = $content;
+$params['title'] = $title;
+$params['sidebar'] = $sidebar;
+
+$body = elgg_view_layout('content', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/mod/videolist/pages/videolist/watch.php b/mod/videolist/pages/videolist/watch.php
new file mode 100644
index 000000000..3a740f396
--- /dev/null
+++ b/mod/videolist/pages/videolist/watch.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * View a file
+ *
+ * @package ElggFile
+ */
+
+$videolist_item = get_entity(get_input('guid'));
+
+elgg_set_page_owner_guid($videolist_item->container_guid);
+
+$page_owner = elgg_get_page_owner_entity();
+
+elgg_push_breadcrumb(elgg_echo('videolist'), 'videolist/all');
+
+$crumbs_title = $page_owner->name;
+if (elgg_instanceof($page_owner, 'group')) {
+ elgg_push_breadcrumb($crumbs_title, "videolist/group/$page_owner->guid/all");
+} else {
+ elgg_push_breadcrumb($crumbs_title, "videolist/owner/$page_owner->username");
+}
+
+$title = $videolist_item->title;
+
+elgg_push_breadcrumb($title);
+
+$content = elgg_view_entity($videolist_item, array('full_view' => true));
+$content .= elgg_view_comments($videolist_item);
+
+$sidebar = elgg_view('videolist/sidebar', array(
+ 'show_comments' => false,
+ 'show_videolist' => true,
+));
+
+$body = elgg_view_layout('content', array(
+ 'content' => $content,
+ 'title' => $title,
+ 'filter' => '',
+ 'sidebar' => $sidebar,
+));
+
+echo elgg_view_page($title, $body);
diff --git a/mod/videolist/start.php b/mod/videolist/start.php
new file mode 100644
index 000000000..6f94b97d0
--- /dev/null
+++ b/mod/videolist/start.php
@@ -0,0 +1,328 @@
+<?php
+/**
+ * Elgg Video Plugin
+ * This plugin allows users to create a library of videos
+ *
+ * @package Elgg
+ * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
+ * @author Prateek Choudhary <synapticfield@gmail.com>
+ * @copyright Prateek Choudhary
+ */
+
+elgg_register_event_handler('init', 'system', 'videolist_init');
+
+function videolist_init() {
+
+ elgg_register_library('elgg:videolist', elgg_get_plugins_path() . 'videolist/lib/videolist.php');
+
+ // add a site navigation item
+ $item = new ElggMenuItem('videolist', elgg_echo('videolist'), 'videolist/all');
+ elgg_register_menu_item('site', $item);
+
+ // Extend system CSS with our own styles
+ elgg_extend_view('css/elgg','videolist/css');
+
+ // Register a page handler, so we can have nice URLs
+ elgg_register_page_handler('videolist', 'videolist_page_handler');
+
+ // Language short codes must be of the form "videolist:key"
+ // where key is the array key below
+ elgg_set_config('videolist', array(
+ 'video_url' => 'url',
+ 'title' => 'text',
+ 'description' => 'longtext',
+ 'tags' => 'tags',
+ 'access_id' => 'access',
+ ));
+
+ // add to groups
+ add_group_tool_option('videolist', elgg_echo('groups:enablevideolist'), true);
+ elgg_extend_view('groups/tool_latest', 'videolist/group_module');
+
+ //add a widget
+ elgg_register_widget_type('videolist', elgg_echo('videolist'), elgg_echo('videolist:widget:description'));
+
+ // Register granular notification for this type
+ register_notification_object('object', 'videolist_item', elgg_echo('videolist:new'));
+
+ // Register entity type for search
+ elgg_register_entity_type('object', 'videolist_item');
+
+ // add a file link to owner blocks
+ elgg_register_plugin_hook_handler('register', 'menu:owner_block', 'videolist_owner_block_menu');
+ elgg_register_event_handler('annotate','all','videolist_object_notifications');
+
+ elgg_register_plugin_hook_handler('object:notifications','object','videolist_object_notifications_intercept');
+
+ //register entity url handler
+ elgg_register_entity_url_handler('object', 'videolist_item', 'videolist_url');
+ elgg_register_plugin_hook_handler('entity:icon:url', 'object', 'videolist_icon_url_override');
+
+ // register for embed
+ elgg_register_plugin_hook_handler('embed_get_sections', 'all', 'videolist_embed_get_sections');
+ elgg_register_plugin_hook_handler('embed_get_items', 'videolist', 'videolist_embed_get_items');
+
+ // handle URLs without scheme
+ elgg_register_plugin_hook_handler('videolist:preprocess', 'url', 'videolist_preprocess_url');
+
+ // Register actions
+ $actions_path = elgg_get_plugins_path() . "videolist/actions/videolist";
+ elgg_register_action("videolist/add", "$actions_path/add.php");
+ elgg_register_action("videolist/edit", "$actions_path/edit.php");
+ elgg_register_action("videolist/delete", "$actions_path/delete.php");
+
+ elgg_register_event_handler('upgrade', 'system', 'videolist_run_upgrades');
+}
+
+/**
+ * Dispatches blog pages.
+ * URLs take the form of
+ * All videos: videolist/all
+ * User's videos: videolist/owner/<username>
+ * Friends' videos: videolist/friends/<username>
+ * Video watch: videolist/watch/<guid>/<title>
+ * Video browse: videolist/browse
+ * New video: videolist/add/<guid>
+ * Edit video: videolist/edit/<guid>
+ * Group videos: videolist/group/<guid>/all
+ *
+ * Title is ignored
+ *
+ * @param array $page
+ * @return NULL
+ */
+function videolist_page_handler($page) {
+
+ if (!isset($page[0])) {
+ $page[0] = 'all';
+ }
+
+ $videolist_dir = elgg_get_plugins_path() . 'videolist/pages/videolist';
+
+ $page_type = $page[0];
+ switch ($page_type) {
+ case 'owner':
+ include "$videolist_dir/owner.php";
+ break;
+ case 'friends':
+ include "$videolist_dir/friends.php";
+ break;
+ case 'watch':
+ set_input('guid', $page[1]);
+ include "$videolist_dir/watch.php";
+ break;
+ case 'add':
+ include "$videolist_dir/add.php";
+ break;
+ case 'edit':
+ set_input('guid', $page[1]);
+ include "$videolist_dir/edit.php";
+ break;
+ case 'group':
+ include "$videolist_dir/owner.php";
+ break;
+ case 'all':
+ default:
+ include "$videolist_dir/all.php";
+ break;
+ }
+ return true;
+}
+
+/**
+ * Add a menu item to the user ownerblock
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $return
+ * @param array $params
+ * @return array
+ */
+function videolist_owner_block_menu($hook, $type, $return, $params) {
+ if (elgg_instanceof($params['entity'], 'user')) {
+ $url = "videolist/owner/{$params['entity']->username}";
+ $item = new ElggMenuItem('videolist', elgg_echo('videolist'), $url);
+ $return[] = $item;
+ } else {
+ if ($params['entity']->videolist_enable != "no") {
+ $url = "videolist/group/{$params['entity']->guid}/all";
+ $item = new ElggMenuItem('videolist', elgg_echo('videolist:group'), $url);
+ $return[] = $item;
+ }
+ }
+
+ return $return;
+}
+
+/**
+ * @param ElggObject $videolist_item
+ * @return string
+ */
+function videolist_url($videolist_item) {
+ $guid = $videolist_item->guid;
+ $title = elgg_get_friendly_title($videolist_item->title);
+ return elgg_get_site_url() . "videolist/watch/$guid/$title";
+}
+
+/**
+ * Event handler for videolist
+ *
+ * @param string $event
+ * @param string $object_type
+ * @param ElggObject $object
+ */
+function videolist_object_notifications($event, $object_type, $object) {
+ static $flag;
+ if (!isset($flag)) {
+ $flag = 0;
+ }
+
+ if (is_callable('object_notifications')) {
+ if ($object instanceof ElggObject) {
+ if ($object->getSubtype() == 'videolist_item') {
+ if ($flag == 0) {
+ $flag = 1;
+ object_notifications($event, $object_type, $object);
+ }
+ }
+ }
+ }
+}
+
+/**
+ * Intercepts the notification on an event of new video being created and prevents a notification from going out
+ * (because one will be sent on the annotation)
+ *
+ * @param string $hook
+ * @param string $entity_type
+ * @param array $returnvalue
+ * @param array $params
+ * @return bool
+ */
+function videolist_object_notifications_intercept($hook, $entity_type, $returnvalue, $params) {
+ if (isset($params)) {
+ if ($params['event'] == 'create' && $params['object'] instanceof ElggObject) {
+ if ($params['object']->getSubtype() == 'videolist_item') {
+ return true;
+ }
+ }
+ }
+ return null;
+}
+
+
+/**
+ * Register videolist as an embed type.
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $value
+ * @param array $params
+ * @return array
+ */
+function videolist_embed_get_sections($hook, $type, $value, $params) {
+ $value['videolist'] = array(
+ 'name' => elgg_echo('videolist'),
+ 'layout' => 'list',
+ 'icon_size' => 'medium',
+ );
+
+ return $value;
+}
+
+/**
+ * Return a list of videos for embedding
+ *
+ * @param string $hook
+ * @param string $type
+ * @param array $value
+ * @param array $params
+ * @return array
+ */
+function videolist_embed_get_items($hook, $type, $value, $params) {
+ $options = array(
+ 'owner_guid' => elgg_get_logged_in_user_guid(),
+ 'type_subtype_pair' => array('object' => 'videolist_item'),
+ 'count' => TRUE
+ );
+
+ $count = elgg_get_entities($options);
+ $value['count'] += $count;
+
+ unset($options['count']);
+ $options['offset'] = $params['offset'];
+ $options['limit'] = $params['limit'];
+
+ $items = elgg_get_entities($options);
+
+ $value['items'] = array_merge($items, $value['items']);
+
+ return $value;
+}
+
+/**
+ * Override the default entity icon for videoslist items
+ *
+ * @param string $hook
+ * @param string $type
+ * @param string $returnvalue
+ * @param array $params
+ * @return string Relative URL
+ */
+function videolist_icon_url_override($hook, $type, $returnvalue, $params) {
+
+ // if someone already set this, quit
+ if ($return_value) {
+ return null;
+ }
+
+ $videolist_item = $params['entity'];
+ $size = $params['size'];
+
+ if (!elgg_instanceof($videolist_item, 'object', 'videolist_item')) {
+ return null;
+ }
+
+ // tiny thumbnails are too small to be useful, so give a generic video icon
+ try {
+ if ($size != 'tiny' && isset($videolist_item->thumbnail)) {
+ $owner = $videolist_item->getOwnerEntity();
+ $owner_guid = $owner->getGUID();
+ $join_date = $owner->getTimeCreated();
+ return "mod/videolist/thumbnail.php?joindate=$join_date&guid={$videolist_item->guid}&owner_guid=$owner_guid&size=$size";
+ }
+ } catch (InvalidParameterException $e) {
+ elgg_log("Unable to get videolist icon for video with GUID {$videolist_item->guid}", 'ERROR');
+ return "mod/videolist/graphics/videolist_icon_{$size}.png";
+ }
+ if (in_array($size, array('tiny', 'small', 'medium'))){
+ return "mod/videolist/graphics/videolist_icon_{$size}.png";
+ }
+ return null;
+}
+
+/**
+ * Prepend HTTP scheme if missing
+ * @param string $hook
+ * @param string $type
+ * @param string $returnvalue
+ * @param array $params
+ * @return string
+ */
+function videolist_preprocess_url($hook, $type, $returnvalue, $params) {
+ $parsed = parse_url($returnvalue);
+ if (empty($parsed['host']) && ! empty($parsed['path']) && $parsed['path'][0] !== '/') {
+ // user probably forgot scheme
+ $returnvalue = 'https://' . $returnvalue;
+ }
+ return $returnvalue;
+}
+
+/**
+ * Process upgrades for the videolist plugin
+ */
+function videolist_run_upgrades($event, $type, $details) {
+ if (include_once(elgg_get_plugins_path() . 'upgrade-tools/lib/upgrade_tools.php')) {
+ upgrade_module_run('videolist');
+ }
+}
diff --git a/mod/videolist/thumbnail.php b/mod/videolist/thumbnail.php
new file mode 100644
index 000000000..7a4ca8b6c
--- /dev/null
+++ b/mod/videolist/thumbnail.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Elgg profile icon cache/bypass
+ *
+ *
+ * @package ElggProfile
+ */
+
+// Get DB settings
+require_once(dirname(dirname(dirname(__FILE__))). '/engine/settings.php');
+
+global $CONFIG;
+
+// won't be able to serve anything if no joindate or guid
+if (!isset($_GET['joindate']) || !isset($_GET['guid'])) {
+ header("HTTP/1.1 404 Not Found");
+ exit;
+}
+
+$join_date = (int)$_GET['joindate'];
+$owner_guid = (int)$_GET['owner_guid'];
+$guid = (int)$_GET['guid'];
+
+$mysql_dblink = @mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass, true);
+if ($mysql_dblink) {
+ if (@mysql_select_db($CONFIG->dbname, $mysql_dblink)) {
+ $result = mysql_query("select name, value from {$CONFIG->dbprefix}datalists where name='dataroot'", $mysql_dblink);
+ if ($result) {
+ $row = mysql_fetch_object($result);
+ while ($row) {
+ if ($row->name == 'dataroot') {
+ $data_root = $row->value;
+ }
+ $row = mysql_fetch_object($result);
+ }
+ }
+
+ @mysql_close($mysql_dblink);
+
+ if (isset($data_root)) {
+
+ // this depends on ElggDiskFilestore::makeFileMatrix()
+ $user_path = date('Y/m/d/', $join_date) . $owner_guid;
+
+ $filename = "$data_root$user_path/videolist/{$guid}.jpg";
+ $size = @filesize($filename);
+ if ($size) {
+ header("Content-type: image/jpeg");
+ header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+6 months")), true);
+ header("Pragma: public");
+ header("Cache-Control: public");
+ header("Content-Length: $size");
+ readfile($filename);
+ exit;
+ }
+ }
+ }
+
+}
+
+// something went wrong so load engine and try to forward to default icon
+require_once(dirname(dirname(dirname(__FILE__))) . "/engine/start.php");
+elgg_log("Profile icon direct failed.", "WARNING");
+forward("mod/videolist/graphics/videolist_icon_{$size}.png");
diff --git a/mod/videolist/upgrades/2012022501.php b/mod/videolist/upgrades/2012022501.php
new file mode 100644
index 000000000..f832c8033
--- /dev/null
+++ b/mod/videolist/upgrades/2012022501.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Download the video thumbnail in the server and link it to video
+ *
+ * First determine if the upgrade is needed and then if needed, batch the update
+ */
+
+$items = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'videolist',
+ 'limit' => 5,
+ 'order_by' => 'e.time_created asc',
+));
+
+// if not items, no upgrade required
+if (!$items) {
+ return;
+}
+
+/**
+ * Downloads the thumbnail and saves into data folder
+ *
+ * @param ElggObject $item
+ * @return bool
+ */
+function videolist_2012022501($item) {
+ require_once(elgg_get_plugins_path() . 'upgrade-tools/lib/upgrade_tools.php');
+
+ // get thumbnail image
+ $thumbnail = file_get_contents($item->thumbnail);
+ if (!$thumbnail) {
+ return false;
+ }
+
+ $prefix = "videolist/" . $item->guid;
+ $filehandler = new ElggFile();
+ $filehandler->owner_guid = $item->owner_guid;
+ $filehandler->setFilename($prefix . ".jpg");
+ $filehandler->open("write");
+ $filehandler->write($thumbnail);
+ $filehandler->close();
+
+ // update properties
+ if ($item->url) {
+ $item->video_url = $item->url;
+ $item->deleteMetadata('url');
+ }
+ if ($item->desc) {
+ $item->description = $item->desc;
+ $item->deleteMetadata('desc');
+ $item->save();
+ }
+ if ($item->embedurl) {
+ $item->deleteMetadata('embedurl');
+ }
+ upgrade_change_subtype($item, 'videolist_item');
+
+ // update river
+ $options = array('object_guid' => $item->guid);
+ $river_items = elgg_get_river($options);
+ foreach($river_items as $river_item) {
+ if ($river_item->action_type == 'create') {
+ upgrade_update_river($river_item->id, 'river/object/videolist_item/create', $item->guid, 0);
+ }
+ }
+
+ return true;
+}
+$previous_access = elgg_set_ignore_access(true);
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'videolist',
+ 'limit' => 0,
+);
+$batch = new ElggBatch('elgg_get_entities', $options, 'videolist_2012022501', 100);
+elgg_set_ignore_access($previous_access);
+
+if ($batch->callbackResult) {
+ error_log("Elgg videolist upgrade (2012022501) succeeded");
+} else {
+ error_log("Elgg videolist upgrade (2012022501) failed");
+}
diff --git a/mod/videolist/views/default/forms/videolist/edit.php b/mod/videolist/views/default/forms/videolist/edit.php
new file mode 100644
index 000000000..18fb6ded4
--- /dev/null
+++ b/mod/videolist/views/default/forms/videolist/edit.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Videolist edit form body
+ *
+ * @package ElggVideolist
+ */
+
+$variables = elgg_get_config('videolist');
+
+if(empty($vars['guid'])){
+ unset($variables['title']);
+ unset($variables['description']);
+} else {
+ unset($variables['video_url']);
+}
+
+foreach ($variables as $name => $type) {
+?>
+<div>
+ <label><?php echo elgg_echo("videolist:$name") ?></label>
+ <?php
+ if ($type != 'longtext') {
+ echo '<br />';
+ }
+ ?>
+ <?php echo elgg_view("input/$type", array(
+ 'name' => $name,
+ 'value' => $vars[$name],
+ ));
+ ?>
+</div>
+<?php
+}
+
+$cats = elgg_view('categories', $vars);
+if (!empty($cats)) {
+ echo $cats;
+}
+
+
+echo '<div class="elgg-foot">';
+if ($vars['guid']) {
+ echo elgg_view('input/hidden', array(
+ 'name' => 'video_guid',
+ 'value' => $vars['guid'],
+ ));
+}
+echo elgg_view('input/hidden', array(
+ 'name' => 'container_guid',
+ 'value' => $vars['container_guid'],
+));
+
+echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+
+echo '</div>';
diff --git a/mod/videolist/views/default/icon/object/videolist_item.php b/mod/videolist/views/default/icon/object/videolist_item.php
new file mode 100644
index 000000000..24a5b5fe8
--- /dev/null
+++ b/mod/videolist/views/default/icon/object/videolist_item.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Generic icon view.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['entity'] The entity the icon represents - uses getIconURL() method
+ * @uses $vars['size'] topbar, tiny, small, medium (default), large, master
+ * @uses $vars['href'] Optional override for link
+ */
+
+$entity = $vars['entity'];
+/* @var ElggObject $entity */
+
+$sizes = array('small', 'medium', 'large', 'tiny', 'master', 'topbar');
+$img_width = array('tiny' => 25, 'small' => 40, 'medium' => 100, 'large' => 200);
+
+// Get size
+if (!in_array($vars['size'], $sizes)) {
+ $size = "medium";
+} else {
+ $size = $vars['size'];
+}
+
+if (isset($entity->name)) {
+ $title = $entity->name;
+} else {
+ $title = $entity->title;
+}
+
+$url = $entity->getURL();
+if (isset($vars['href'])) {
+ $url = $vars['href'];
+}
+
+$img_src = $entity->getIconURL($vars['size']);
+$img = "<img src=\"$img_src\" alt=\"$title\" width=\"{$img_width[$size]}\" />";
+
+if ($url) {
+ echo elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => $img,
+ ));
+} else {
+ echo $img;
+}
diff --git a/mod/videolist/views/default/object/videolist_item.php b/mod/videolist/views/default/object/videolist_item.php
new file mode 100644
index 000000000..5789c8475
--- /dev/null
+++ b/mod/videolist/views/default/object/videolist_item.php
@@ -0,0 +1,108 @@
+<?php
+/**
+ * Videolist item renderer.
+ *
+ * @package ElggVideolist
+ */
+
+$full = elgg_extract('full_view', $vars, FALSE);
+$entity = elgg_extract('entity', $vars, FALSE);
+/* @var ElggObject $entity */
+
+if (!$entity) {
+ return TRUE;
+}
+
+$owner = $entity->getOwnerEntity();
+$container = $entity->getContainerEntity();
+$categories = elgg_view('output/categories', $vars);
+$excerpt = elgg_get_excerpt($entity->description);
+
+$body = elgg_view('output/longtext', array('value' => $entity->description));
+
+$owner_link = elgg_view('output/url', array(
+ 'href' => "videolist/owner/$owner->username",
+ 'text' => $owner->name,
+));
+$author_text = elgg_echo('byline', array($owner_link));
+
+$entity_icon = elgg_view_entity_icon($entity, 'medium');
+$owner_icon = elgg_view_entity_icon($owner, 'small');
+
+$tags = elgg_view('output/tags', array('tags' => $entity->tags));
+$date = elgg_view_friendly_time($entity->time_created);
+
+$comments_count = $entity->countComments();
+//only display if there are commments
+if ($comments_count != 0) {
+ $text = elgg_echo("comments") . " ($comments_count)";
+ $comments_link = elgg_view('output/url', array(
+ 'href' => $entity->getURL() . '#videolist-item-comments',
+ 'text' => $text,
+ ));
+} else {
+ $comments_link = '';
+}
+
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $vars['entity'],
+ 'handler' => 'videolist',
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+$subtitle = "$author_text $date $categories $comments_link";
+
+// do not show the metadata and controls in widget view
+if (elgg_in_context('widgets')) {
+ $metadata = '';
+ $excerpt = '';
+}
+
+if ($full && !elgg_in_context('gallery')) {
+
+ $content = elgg_view("videolist/watch", $vars);
+ $content = "<div class=\"videolist-watch\">$content</div>";
+
+ $params = array(
+ 'entity' => $entity,
+ 'title' => false,
+ 'content' => $content,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'tags' => $tags,
+ );
+ $params = $params + $vars;
+ $list_body = elgg_view('object/elements/summary', $params);
+
+ $entity_info = elgg_view_image_block($owner_icon, $list_body);
+
+ echo <<<HTML
+$entity_info
+$body
+HTML;
+
+} elseif (elgg_in_context('gallery')) {
+ echo '<div class="videolist-gallery-item">';
+ $content = elgg_view('output/url', array(
+ 'text' => elgg_get_excerpt($entity->title, 25),
+ 'href' => $entity->getURL(),
+ ));
+ $content .= "<p class='subtitle'>$owner_link $date</p>";
+ echo elgg_view_image_block($entity_icon, $content);
+ echo '</div>';
+} else {
+ // brief view
+
+ $params = array(
+ 'entity' => $entity,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'tags' => $tags,
+ 'content' => $excerpt,
+ );
+ $params = $params + $vars;
+ $list_body = elgg_view('object/elements/summary', $params);
+
+ echo elgg_view_image_block($entity_icon, $list_body);
+}
diff --git a/mod/videolist/views/default/page/elements/videolist_block.php b/mod/videolist/views/default/page/elements/videolist_block.php
new file mode 100644
index 000000000..a0653a09e
--- /dev/null
+++ b/mod/videolist/views/default/page/elements/videolist_block.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Display the latest videolist items
+ *
+ * Generally used in a sidebar.
+ *
+ * @uses $vars['container_guid'] The videolist container
+ * @uses $vars['limit'] The number of comments to display
+ */
+
+$entity_guid = get_input('guid', ELGG_ENTITIES_ANY_VALUE);
+$container_guid = elgg_extract('container_guid', $vars, ELGG_ENTITIES_ANY_VALUE);
+
+$container = get_entity($container_guid);
+
+$options = array(
+ 'container_guid' => $container_guid,
+ 'limit' => elgg_extract('limit', $vars, 6),
+ 'type' => 'object',
+ 'subtypes' => 'videolist_item',
+ 'full_view' => false,
+ 'pagination' => false,
+ 'wheres' => array('guid <> ' . $entity_guid), // exclude this item from list.
+);
+
+if($container) {
+ $title = elgg_echo('videolist:owner', array($container->name));
+} else {
+ $title = elgg_echo('videolist');
+}
+
+elgg_push_context('gallery');
+$content = elgg_list_entities($options);
+elgg_pop_context('gallery');
+
+echo elgg_view_module('aside', $title, $content);
diff --git a/mod/videolist/views/default/river/object/videolist_item/create.php b/mod/videolist/views/default/river/object/videolist_item/create.php
new file mode 100644
index 000000000..ea9f8394b
--- /dev/null
+++ b/mod/videolist/views/default/river/object/videolist_item/create.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Videolist item river view.
+ */
+
+$object = $vars['item']->getObjectEntity();
+$thumbnail = elgg_view('icon/object/videolist_item', array(
+ 'entity' => $object,
+ 'size' => 'medium',
+));
+
+echo elgg_view('river/item', array(
+ 'item' => $vars['item'],
+ 'message' => $thumbnail,
+));
diff --git a/mod/videolist/views/default/videolist/css.php b/mod/videolist/views/default/videolist/css.php
new file mode 100644
index 000000000..625935451
--- /dev/null
+++ b/mod/videolist/views/default/videolist/css.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Elgg Videolist CSS
+ */
+?>
+
+.videolist-watch {
+ margin-top: 40px;
+ position: relative;
+ padding-bottom: 56.25%;
+ padding-top: 30px;
+ height: 0;
+}
+
+.videolist-watch iframe,
+.videolist-watch object,
+.videolist-watch embed {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+} \ No newline at end of file
diff --git a/mod/videolist/views/default/videolist/group_module.php b/mod/videolist/views/default/videolist/group_module.php
new file mode 100644
index 000000000..0e0a1ab63
--- /dev/null
+++ b/mod/videolist/views/default/videolist/group_module.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Group videolist module
+ */
+
+$group = elgg_get_page_owner_entity();
+
+if ($group->videolist_enable == "no") {
+ return true;
+}
+
+$all_link = elgg_view('output/url', array(
+ 'href' => "videolist/group/$group->guid/all",
+ 'text' => elgg_echo('link:view:all'),
+));
+
+elgg_push_context('widgets');
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'videolist_item',
+ 'container_guid' => elgg_get_page_owner_guid(),
+ 'limit' => 6,
+ 'full_view' => false,
+ 'pagination' => false,
+);
+$content = elgg_list_entities($options);
+elgg_pop_context();
+
+if (!$content) {
+ $content = '<p>' . elgg_echo('videolist:none') . '</p>';
+}
+
+$new_link = elgg_view('output/url', array(
+ 'href' => "videolist/add/$group->guid",
+ 'text' => elgg_echo('videolist:add'),
+));
+
+echo elgg_view('groups/profile/module', array(
+ 'title' => elgg_echo('videolist:group'),
+ 'content' => $content,
+ 'all_link' => $all_link,
+ 'add_link' => $new_link,
+));
diff --git a/mod/videolist/views/default/videolist/sidebar.php b/mod/videolist/views/default/videolist/sidebar.php
new file mode 100644
index 000000000..4a9e1cdda
--- /dev/null
+++ b/mod/videolist/views/default/videolist/sidebar.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Videolist sidebar
+ */
+
+$show_comments = elgg_extract('show_comments', $vars, true);
+$show_tags = elgg_extract('show_tags', $vars, true);
+$show_videolist = elgg_extract('show_videolist', $vars, false);
+
+if($show_videolist){
+ echo elgg_view('page/elements/videolist_block', array(
+ 'container_guid' => elgg_get_page_owner_guid(),
+ ));
+}
+
+if($show_comments) {
+ echo elgg_view('page/elements/comments_block', array(
+ 'subtypes' => 'videolist_item',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+ ));
+}
+
+if($show_tags) {
+ echo elgg_view('page/elements/tagcloud_block', array(
+ 'subtypes' => 'videolist_item',
+ 'owner_guid' => elgg_get_page_owner_guid(),
+ ));
+}
diff --git a/mod/videolist/views/default/videolist/watch.php b/mod/videolist/views/default/videolist/watch.php
new file mode 100644
index 000000000..2e1dbacec
--- /dev/null
+++ b/mod/videolist/views/default/videolist/watch.php
@@ -0,0 +1,8 @@
+<?php
+
+$entity = elgg_extract('entity', $vars);
+if (elgg_view_exists("videolist/watch/$entity->videotype")) {
+ echo elgg_view("videolist/watch/$entity->videotype", $vars);
+} else {
+ echo elgg_view("videolist/watch/default", $vars);
+}
diff --git a/mod/videolist/views/default/videolist/watch/bliptv.php b/mod/videolist/views/default/videolist/watch/bliptv.php
new file mode 100644
index 000000000..ae3d75901
--- /dev/null
+++ b/mod/videolist/views/default/videolist/watch/bliptv.php
@@ -0,0 +1,6 @@
+<?php
+
+$embedurl = $vars['entity']->embedurl;
+$embedurl = preg_replace('/https?:/', 'https:', $embedurl);
+
+echo "<iframe src=\"$embedurl\" frameborder=\"0\" allowfullscreen></iframe>";
diff --git a/mod/videolist/views/default/videolist/watch/gisstv.php b/mod/videolist/views/default/videolist/watch/gisstv.php
new file mode 100644
index 000000000..a96894ada
--- /dev/null
+++ b/mod/videolist/views/default/videolist/watch/gisstv.php
@@ -0,0 +1,7 @@
+<?php
+
+$video_id = $vars['entity']->video_id;
+
+echo "<video controls=\"\" tabindex=\"0\">
+ <source type=\"video/ogg\" src=\"http://giss.tv/dmmdb//contents/$video_id\"></source>
+</video>";
diff --git a/mod/videolist/views/default/videolist/watch/metacafe.php b/mod/videolist/views/default/videolist/watch/metacafe.php
new file mode 100644
index 000000000..ce8e257d5
--- /dev/null
+++ b/mod/videolist/views/default/videolist/watch/metacafe.php
@@ -0,0 +1,6 @@
+<?php
+
+$embedurl = $vars['entity']->embedurl;
+$embedurl = preg_replace('/https?:/', 'https:', $embedurl);
+
+echo "<embed flashVars=\"playerVars=autoPlay=no\" src=\"$embedurl\" wmode=\"transparent\" allowFullScreen=\"true\" allowScriptAccess=\"always\" name=\"Metacafe_$video_id\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" type=\"application/x-shockwave-flash\"></embed>";
diff --git a/mod/videolist/views/default/videolist/watch/vimeo.php b/mod/videolist/views/default/videolist/watch/vimeo.php
new file mode 100644
index 000000000..cdb4b6bfb
--- /dev/null
+++ b/mod/videolist/views/default/videolist/watch/vimeo.php
@@ -0,0 +1,5 @@
+<?php
+
+$video_id = $vars['entity']->video_id;
+
+echo "<iframe src=\"https://player.vimeo.com/video/$video_id?byline=0\" frameborder=\"0\" webkitAllowFullScreen allowFullScreen></iframe>";
diff --git a/mod/videolist/views/default/videolist/watch/youtube.php b/mod/videolist/views/default/videolist/watch/youtube.php
new file mode 100644
index 000000000..b0b758718
--- /dev/null
+++ b/mod/videolist/views/default/videolist/watch/youtube.php
@@ -0,0 +1,5 @@
+<?php
+
+$video_id = $vars['entity']->video_id;
+
+echo "<iframe src=\"https://www.youtube-nocookie.com/embed/$video_id\" frameborder=\"0\" allowfullscreen></iframe>";
diff --git a/mod/videolist/views/default/widgets/videolist/content.php b/mod/videolist/views/default/widgets/videolist/content.php
new file mode 100644
index 000000000..aaf6076a3
--- /dev/null
+++ b/mod/videolist/views/default/widgets/videolist/content.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Elgg video list widget
+ *
+ * @package ElggVideolist
+ */
+
+$num = (int) $vars['entity']->videos_num;
+
+$options = array(
+ 'type' => 'object',
+ 'subtype' => 'videolist_item',
+ 'container_guid' => $vars['entity']->owner_guid,
+ 'limit' => $num,
+ 'full_view' => FALSE,
+ 'pagination' => FALSE,
+);
+$content = elgg_list_entities($options);
+
+echo $content;
+
+if ($content) {
+ $url = "pages/owner/" . elgg_get_page_owner_entity()->username;
+ $more_link = elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => elgg_echo('videolist:more'),
+ 'is_trusted' => true,
+ ));
+ echo "<span class=\"elgg-widget-more\">$more_link</span>";
+} else {
+ echo elgg_echo('videolist:none');
+}
diff --git a/mod/videolist/views/default/widgets/videolist/edit.php b/mod/videolist/views/default/widgets/videolist/edit.php
new file mode 100644
index 000000000..a2865848e
--- /dev/null
+++ b/mod/videolist/views/default/widgets/videolist/edit.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg video list widget edit
+ *
+ * @package ElggVideolist
+ */
+
+// set default value
+if (!isset($vars['entity']->videos_num)) {
+ $vars['entity']->videos_num = 4;
+}
+
+$params = array(
+ 'name' => 'params[videos_num]',
+ 'value' => $vars['entity']->videos_num,
+ 'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('videolist:num_videos'); ?>:
+ <?php echo $dropdown; ?>
+</div>
diff --git a/mod/videolist/views/rss/object/videolist_item.php b/mod/videolist/views/rss/object/videolist_item.php
new file mode 100644
index 000000000..41d89fadf
--- /dev/null
+++ b/mod/videolist/views/rss/object/videolist_item.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Elgg default object view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$title = $vars['entity']->title;
+if (empty($title)) {
+ $subtitle = strip_tags($vars['entity']->description);
+ $title = substr($subtitle, 0, 32);
+ if (strlen($subtitle) > 32) {
+ $title .= ' ...';
+ }
+}
+
+set_input('view', 'default');
+
+$description = elgg_view("videolist/watch/".$vars['entity']->videotype, array(
+ 'entity' => $vars['entity'],
+));
+
+set_input('view', 'rss');
+
+$description .= $vars['entity']->description;
+
+$permalink = htmlspecialchars($vars['entity']->getURL());
+$pubdate = date('r', $vars['entity']->time_created);
+
+$creator = elgg_view('object/creator', $vars);
+$georss = elgg_view('object/georss', $vars);
+$extension = elgg_view('extensions/item', $vars);
+
+$item = <<<__HTML
+<item>
+ <guid isPermaLink="true">$permalink</guid>
+ <pubDate>$pubdate</pubDate>
+ <link>$permalink</link>
+ <title><![CDATA[$title]]></title>
+ <description><![CDATA[$description]]></description>
+ $creator$georss$extension
+</item>
+
+__HTML;
+
+echo $item;
diff --git a/mod/zaudio/audioplayer/audio-player.js b/mod/zaudio/audioplayer/audio-player.js
new file mode 100644
index 000000000..43ea8eb54
--- /dev/null
+++ b/mod/zaudio/audioplayer/audio-player.js
@@ -0,0 +1,5 @@
+var AudioPlayer=function(){var F=[];var C;var E="";var A={};var D=-1;function B(G){return document.all?window[G]:document[G]}return{setup:function(H,G){E=H;A=G},getPlayer:function(G){return B(G)},embed:function(K,O){var I={};var M;var G;var P;var H;var N={};var J={};var L={};for(M in A){I[M]=A[M]}for(M in O){I[M]=O[M]}if(I.transparentpagebg=="yes"){N.bgcolor="#FFFFFF";N.wmode="transparent"}else{if(I.pagebg){N.bgcolor="#"+I.pagebg}N.wmode="opaque"}N.menu="false";for(M in I){if(M=="pagebg"||M=="width"||M=="transparentpagebg"){continue}J[M]=I[M]}L.name=K;L.style="outline: none";J.playerID=K;audioplayer_swfobject.embedSWF(E,K,I.width.toString(),"24","9.0.0",false,J,N,L);F.push(K)},syncVolumes:function(G,I){D=I;for(var H=0;H<F.length;H++){if(F[H]!=G){B(F[H]).setVolume(D)}}},activate:function(G){if(C&&C!=G){B(C).close()}C=G},load:function(I,G,J,H){B(I).load(G,J,H)},close:function(G){B(G).close();if(G==C){C=null}},open:function(G){B(G).open()},getVolume:function(G){return D}}}()/* SWFObject v2.1 <http://code.google.com/p/swfobject/>
+ Copyright (c) 2007-2008 Geoff Stearns, Michael Williams, and Bobby van der Sluis
+ This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
+*/
+var audioplayer_swfobject=function(){var b="undefined",Q="object",n="Shockwave Flash",p="ShockwaveFlash.ShockwaveFlash",P="application/x-shockwave-flash",m="SWFObjectExprInst",j=window,K=document,T=navigator,o=[],N=[],i=[],d=[],J,Z=null,M=null,l=null,e=false,A=false;var h=function(){var v=typeof K.getElementById!=b&&typeof K.getElementsByTagName!=b&&typeof K.createElement!=b,AC=[0,0,0],x=null;if(typeof T.plugins!=b&&typeof T.plugins[n]==Q){x=T.plugins[n].description;if(x&&!(typeof T.mimeTypes!=b&&T.mimeTypes[P]&&!T.mimeTypes[P].enabledPlugin)){x=x.replace(/^.*\s+(\S+\s+\S+$)/,"$1");AC[0]=parseInt(x.replace(/^(.*)\..*$/,"$1"),10);AC[1]=parseInt(x.replace(/^.*\.(.*)\s.*$/,"$1"),10);AC[2]=/r/.test(x)?parseInt(x.replace(/^.*r(.*)$/,"$1"),10):0}}else{if(typeof j.ActiveXObject!=b){var y=null,AB=false;try{y=new ActiveXObject(p+".7")}catch(t){try{y=new ActiveXObject(p+".6");AC=[6,0,21];y.AllowScriptAccess="always"}catch(t){if(AC[0]==6){AB=true}}if(!AB){try{y=new ActiveXObject(p)}catch(t){}}}if(!AB&&y){try{x=y.GetVariable("$version");if(x){x=x.split(" ")[1].split(",");AC=[parseInt(x[0],10),parseInt(x[1],10),parseInt(x[2],10)]}}catch(t){}}}}var AD=T.userAgent.toLowerCase(),r=T.platform.toLowerCase(),AA=/webkit/.test(AD)?parseFloat(AD.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,q=false,z=r?/win/.test(r):/win/.test(AD),w=r?/mac/.test(r):/mac/.test(AD);/*@cc_on q=true;@if(@_win32)z=true;@elif(@_mac)w=true;@end@*/return{w3cdom:v,pv:AC,webkit:AA,ie:q,win:z,mac:w}}();var L=function(){if(!h.w3cdom){return }f(H);if(h.ie&&h.win){try{K.write("<script id=__ie_ondomload defer=true src=//:><\/script>");J=C("__ie_ondomload");if(J){I(J,"onreadystatechange",S)}}catch(q){}}if(h.webkit&&typeof K.readyState!=b){Z=setInterval(function(){if(/loaded|complete/.test(K.readyState)){E()}},10)}if(typeof K.addEventListener!=b){K.addEventListener("DOMContentLoaded",E,null)}R(E)}();function S(){if(J.readyState=="complete"){J.parentNode.removeChild(J);E()}}function E(){if(e){return }if(h.ie&&h.win){var v=a("span");try{var u=K.getElementsByTagName("body")[0].appendChild(v);u.parentNode.removeChild(u)}catch(w){return }}e=true;if(Z){clearInterval(Z);Z=null}var q=o.length;for(var r=0;r<q;r++){o[r]()}}function f(q){if(e){q()}else{o[o.length]=q}}function R(r){if(typeof j.addEventListener!=b){j.addEventListener("load",r,false)}else{if(typeof K.addEventListener!=b){K.addEventListener("load",r,false)}else{if(typeof j.attachEvent!=b){I(j,"onload",r)}else{if(typeof j.onload=="function"){var q=j.onload;j.onload=function(){q();r()}}else{j.onload=r}}}}}function H(){var t=N.length;for(var q=0;q<t;q++){var u=N[q].id;if(h.pv[0]>0){var r=C(u);if(r){N[q].width=r.getAttribute("width")?r.getAttribute("width"):"0";N[q].height=r.getAttribute("height")?r.getAttribute("height"):"0";if(c(N[q].swfVersion)){if(h.webkit&&h.webkit<312){Y(r)}W(u,true)}else{if(N[q].expressInstall&&!A&&c("6.0.65")&&(h.win||h.mac)){k(N[q])}else{O(r)}}}}else{W(u,true)}}}function Y(t){var q=t.getElementsByTagName(Q)[0];if(q){var w=a("embed"),y=q.attributes;if(y){var v=y.length;for(var u=0;u<v;u++){if(y[u].nodeName=="DATA"){w.setAttribute("src",y[u].nodeValue)}else{w.setAttribute(y[u].nodeName,y[u].nodeValue)}}}var x=q.childNodes;if(x){var z=x.length;for(var r=0;r<z;r++){if(x[r].nodeType==1&&x[r].nodeName=="PARAM"){w.setAttribute(x[r].getAttribute("name"),x[r].getAttribute("value"))}}}t.parentNode.replaceChild(w,t)}}function k(w){A=true;var u=C(w.id);if(u){if(w.altContentId){var y=C(w.altContentId);if(y){M=y;l=w.altContentId}}else{M=G(u)}if(!(/%$/.test(w.width))&&parseInt(w.width,10)<310){w.width="310"}if(!(/%$/.test(w.height))&&parseInt(w.height,10)<137){w.height="137"}K.title=K.title.slice(0,47)+" - Flash Player Installation";var z=h.ie&&h.win?"ActiveX":"PlugIn",q=K.title,r="MMredirectURL="+j.location+"&MMplayerType="+z+"&MMdoctitle="+q,x=w.id;if(h.ie&&h.win&&u.readyState!=4){var t=a("div");x+="SWFObjectNew";t.setAttribute("id",x);u.parentNode.insertBefore(t,u);u.style.display="none";var v=function(){u.parentNode.removeChild(u)};I(j,"onload",v)}U({data:w.expressInstall,id:m,width:w.width,height:w.height},{flashvars:r},x)}}function O(t){if(h.ie&&h.win&&t.readyState!=4){var r=a("div");t.parentNode.insertBefore(r,t);r.parentNode.replaceChild(G(t),r);t.style.display="none";var q=function(){t.parentNode.removeChild(t)};I(j,"onload",q)}else{t.parentNode.replaceChild(G(t),t)}}function G(v){var u=a("div");if(h.win&&h.ie){u.innerHTML=v.innerHTML}else{var r=v.getElementsByTagName(Q)[0];if(r){var w=r.childNodes;if(w){var q=w.length;for(var t=0;t<q;t++){if(!(w[t].nodeType==1&&w[t].nodeName=="PARAM")&&!(w[t].nodeType==8)){u.appendChild(w[t].cloneNode(true))}}}}}return u}function U(AG,AE,t){var q,v=C(t);if(v){if(typeof AG.id==b){AG.id=t}if(h.ie&&h.win){var AF="";for(var AB in AG){if(AG[AB]!=Object.prototype[AB]){if(AB.toLowerCase()=="data"){AE.movie=AG[AB]}else{if(AB.toLowerCase()=="styleclass"){AF+=' class="'+AG[AB]+'"'}else{if(AB.toLowerCase()!="classid"){AF+=" "+AB+'="'+AG[AB]+'"'}}}}}var AD="";for(var AA in AE){if(AE[AA]!=Object.prototype[AA]){AD+='<param name="'+AA+'" value="'+AE[AA]+'" />'}}v.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+AF+">"+AD+"</object>";i[i.length]=AG.id;q=C(AG.id)}else{if(h.webkit&&h.webkit<312){var AC=a("embed");AC.setAttribute("type",P);for(var z in AG){if(AG[z]!=Object.prototype[z]){if(z.toLowerCase()=="data"){AC.setAttribute("src",AG[z])}else{if(z.toLowerCase()=="styleclass"){AC.setAttribute("class",AG[z])}else{if(z.toLowerCase()!="classid"){AC.setAttribute(z,AG[z])}}}}}for(var y in AE){if(AE[y]!=Object.prototype[y]){if(y.toLowerCase()!="movie"){AC.setAttribute(y,AE[y])}}}v.parentNode.replaceChild(AC,v);q=AC}else{var u=a(Q);u.setAttribute("type",P);for(var x in AG){if(AG[x]!=Object.prototype[x]){if(x.toLowerCase()=="styleclass"){u.setAttribute("class",AG[x])}else{if(x.toLowerCase()!="classid"){u.setAttribute(x,AG[x])}}}}for(var w in AE){if(AE[w]!=Object.prototype[w]&&w.toLowerCase()!="movie"){F(u,w,AE[w])}}v.parentNode.replaceChild(u,v);q=u}}}return q}function F(t,q,r){var u=a("param");u.setAttribute("name",q);u.setAttribute("value",r);t.appendChild(u)}function X(r){var q=C(r);if(q&&(q.nodeName=="OBJECT"||q.nodeName=="EMBED")){if(h.ie&&h.win){if(q.readyState==4){B(r)}else{j.attachEvent("onload",function(){B(r)})}}else{q.parentNode.removeChild(q)}}}function B(t){var r=C(t);if(r){for(var q in r){if(typeof r[q]=="function"){r[q]=null}}r.parentNode.removeChild(r)}}function C(t){var q=null;try{q=K.getElementById(t)}catch(r){}return q}function a(q){return K.createElement(q)}function I(t,q,r){t.attachEvent(q,r);d[d.length]=[t,q,r]}function c(t){var r=h.pv,q=t.split(".");q[0]=parseInt(q[0],10);q[1]=parseInt(q[1],10)||0;q[2]=parseInt(q[2],10)||0;return(r[0]>q[0]||(r[0]==q[0]&&r[1]>q[1])||(r[0]==q[0]&&r[1]==q[1]&&r[2]>=q[2]))?true:false}function V(v,r){if(h.ie&&h.mac){return }var u=K.getElementsByTagName("head")[0],t=a("style");t.setAttribute("type","text/css");t.setAttribute("media","screen");if(!(h.ie&&h.win)&&typeof K.createTextNode!=b){t.appendChild(K.createTextNode(v+" {"+r+"}"))}u.appendChild(t);if(h.ie&&h.win&&typeof K.styleSheets!=b&&K.styleSheets.length>0){var q=K.styleSheets[K.styleSheets.length-1];if(typeof q.addRule==Q){q.addRule(v,r)}}}function W(t,q){var r=q?"visible":"hidden";if(e&&C(t)){C(t).style.visibility=r}else{V("#"+t,"visibility:"+r)}}function g(s){var r=/[\\\"<>\.;]/;var q=r.exec(s)!=null;return q?encodeURIComponent(s):s}var D=function(){if(h.ie&&h.win){window.attachEvent("onunload",function(){var w=d.length;for(var v=0;v<w;v++){d[v][0].detachEvent(d[v][1],d[v][2])}var t=i.length;for(var u=0;u<t;u++){X(i[u])}for(var r in h){h[r]=null}h=null;for(var q in audioplayer_swfobject){audioplayer_swfobject[q]=null}audioplayer_swfobject=null})}}();return{registerObject:function(u,q,t){if(!h.w3cdom||!u||!q){return }var r={};r.id=u;r.swfVersion=q;r.expressInstall=t?t:false;N[N.length]=r;W(u,false)},getObjectById:function(v){var q=null;if(h.w3cdom){var t=C(v);if(t){var u=t.getElementsByTagName(Q)[0];if(!u||(u&&typeof t.SetVariable!=b)){q=t}else{if(typeof u.SetVariable!=b){q=u}}}}return q},embedSWF:function(x,AE,AB,AD,q,w,r,z,AC){if(!h.w3cdom||!x||!AE||!AB||!AD||!q){return }AB+="";AD+="";if(c(q)){W(AE,false);var AA={};if(AC&&typeof AC===Q){for(var v in AC){if(AC[v]!=Object.prototype[v]){AA[v]=AC[v]}}}AA.data=x;AA.width=AB;AA.height=AD;var y={};if(z&&typeof z===Q){for(var u in z){if(z[u]!=Object.prototype[u]){y[u]=z[u]}}}if(r&&typeof r===Q){for(var t in r){if(r[t]!=Object.prototype[t]){if(typeof y.flashvars!=b){y.flashvars+="&"+t+"="+r[t]}else{y.flashvars=t+"="+r[t]}}}}f(function(){U(AA,y,AE);if(AA.id==AE){W(AE,true)}})}else{if(w&&!A&&c("6.0.65")&&(h.win||h.mac)){A=true;W(AE,false);f(function(){var AF={};AF.id=AF.altContentId=AE;AF.width=AB;AF.height=AD;AF.expressInstall=w;k(AF)})}}},getFlashPlayerVersion:function(){return{major:h.pv[0],minor:h.pv[1],release:h.pv[2]}},hasFlashPlayerVersion:c,createSWF:function(t,r,q){if(h.w3cdom){return U(t,r,q)}else{return undefined}},removeSWF:function(q){if(h.w3cdom){X(q)}},createCSS:function(r,q){if(h.w3cdom){V(r,q)}},addDomLoadEvent:f,addLoadEvent:R,getQueryParamValue:function(v){var u=K.location.search||K.location.hash;if(v==null){return g(u)}if(u){var t=u.substring(1).split("&");for(var r=0;r<t.length;r++){if(t[r].substring(0,t[r].indexOf("="))==v){return g(t[r].substring((t[r].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(A&&M){var q=C(m);if(q){q.parentNode.replaceChild(M,q);if(l){W(l,true);if(h.ie&&h.win){M.style.display="block"}}M=null;l=null;A=false}}}}}(); \ No newline at end of file
diff --git a/mod/zaudio/audioplayer/license.txt b/mod/zaudio/audioplayer/license.txt
new file mode 100644
index 000000000..35f0bcd0e
--- /dev/null
+++ b/mod/zaudio/audioplayer/license.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2008 Martin Laine
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE. \ No newline at end of file
diff --git a/mod/zaudio/audioplayer/player.swf b/mod/zaudio/audioplayer/player.swf
new file mode 100644
index 000000000..04be6a9bb
--- /dev/null
+++ b/mod/zaudio/audioplayer/player.swf
Binary files differ
diff --git a/mod/zaudio/manifest.xml b/mod/zaudio/manifest.xml
new file mode 100644
index 000000000..54f819658
--- /dev/null
+++ b/mod/zaudio/manifest.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Zaudio</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>enhancement</category>
+ <category>multimedia</category>
+ <description>This simple plugin lets users play mp3's in the page.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
+</plugin_manifest>
diff --git a/mod/zaudio/readme.txt b/mod/zaudio/readme.txt
new file mode 100644
index 000000000..90279c928
--- /dev/null
+++ b/mod/zaudio/readme.txt
@@ -0,0 +1,9 @@
+Notes:
+
+* A simple plugin to play mp3 files on the page
+* http://wpaudioplayer.com/license
+* http://wpaudioplayer.com/standalone
+
+Instructions:
+
+Drop into mod, enable in the admin panel and use. \ No newline at end of file
diff --git a/mod/zaudio/start.php b/mod/zaudio/start.php
new file mode 100644
index 000000000..b353dffb9
--- /dev/null
+++ b/mod/zaudio/start.php
@@ -0,0 +1,18 @@
+<?php
+ /**
+ * ZAudio - a simple mp3 player
+ * A simple plugin to play mp3 files on the page
+ * http://wpaudioplayer.com/license
+ * http://wpaudioplayer.com/standalone
+ *
+ * @package ElggZAudio
+ */
+
+elgg_register_event_handler('init', 'system', 'zaudio_init');
+
+function zaudio_init() {
+ elgg_extend_view('css/elgg', 'zaudio/css');
+
+ $js_url = elgg_get_site_url() . 'mod/zaudio/audioplayer/audio-player.js';
+ elgg_register_js('elgg.zaudio', $js_url);
+}
diff --git a/mod/zaudio/views/default/file/specialcontent/audio/mp3.php b/mod/zaudio/views/default/file/specialcontent/audio/mp3.php
new file mode 100644
index 000000000..11d09708a
--- /dev/null
+++ b/mod/zaudio/views/default/file/specialcontent/audio/mp3.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * ZAudio file view override
+ * @package ElggZAudio
+ */
+
+echo elgg_view('zaudio/audioplayer', array('file_guid' => $vars['entity']->getGUID()));
diff --git a/mod/zaudio/views/default/file/specialcontent/audio/mpeg.php b/mod/zaudio/views/default/file/specialcontent/audio/mpeg.php
new file mode 100644
index 000000000..11d09708a
--- /dev/null
+++ b/mod/zaudio/views/default/file/specialcontent/audio/mpeg.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * ZAudio file view override
+ * @package ElggZAudio
+ */
+
+echo elgg_view('zaudio/audioplayer', array('file_guid' => $vars['entity']->getGUID()));
diff --git a/mod/zaudio/views/default/file/specialcontent/audio/mpg.php b/mod/zaudio/views/default/file/specialcontent/audio/mpg.php
new file mode 100644
index 000000000..11d09708a
--- /dev/null
+++ b/mod/zaudio/views/default/file/specialcontent/audio/mpg.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * ZAudio file view override
+ * @package ElggZAudio
+ */
+
+echo elgg_view('zaudio/audioplayer', array('file_guid' => $vars['entity']->getGUID()));
diff --git a/mod/zaudio/views/default/zaudio/audioplayer.php b/mod/zaudio/views/default/zaudio/audioplayer.php
new file mode 100644
index 000000000..bae725458
--- /dev/null
+++ b/mod/zaudio/views/default/zaudio/audioplayer.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * ZAudio audio player
+ * @package ElggZAudio
+ */
+
+elgg_load_js('elgg.zaudio');
+
+$swf_url = elgg_get_site_url() . 'mod/zaudio/audioplayer/player.swf';
+$mp3_url = elgg_get_site_url() . "mod/file/download.php?file_guid={$vars['file_guid']}";
+
+?>
+<?php //@todo JS 1.8: no ?>
+<script type="text/javascript">
+ AudioPlayer.setup("<?php echo $swf_url; ?>", {width: 290});
+</script>
+
+<div class="zaudio">
+ <p id="zaudioplayer"></p>
+ <script type="text/javascript">
+ AudioPlayer.embed("zaudioplayer", {soundFile: "<?php echo $mp3_url; ?>"});
+ </script>
+</div> \ No newline at end of file
diff --git a/mod/zaudio/views/default/zaudio/css.php b/mod/zaudio/views/default/zaudio/css.php
new file mode 100644
index 000000000..86cc4aadb
--- /dev/null
+++ b/mod/zaudio/views/default/zaudio/css.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * ZAudio CSS
+ * @package ElggZAudio
+ */
+?>
+/* ZAudio */
+.zaudio {
+ margin: 10px 0;
+}
diff --git a/pages/account/forgotten_password.php b/pages/account/forgotten_password.php
new file mode 100644
index 000000000..bf6ef87e0
--- /dev/null
+++ b/pages/account/forgotten_password.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Assembles and outputs the forgotten password page.
+ *
+ * @package Elgg.Core
+ * @subpackage Registration
+ */
+
+if (elgg_is_logged_in()) {
+ forward();
+}
+
+$title = elgg_echo("user:password:lost");
+$content = elgg_view_title($title);
+
+$content .= elgg_view_form('user/requestnewpassword', array(
+ 'class' => 'elgg-form-account',
+));
+
+$body = elgg_view_layout("one_column", array('content' => $content));
+
+echo elgg_view_page($title, $body);
diff --git a/pages/account/login.php b/pages/account/login.php
new file mode 100644
index 000000000..14f65cc3f
--- /dev/null
+++ b/pages/account/login.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Assembles and outputs a login page.
+ *
+ * This page serves as a fallback for non-JS users who click on the login
+ * drop down link.
+ *
+ * If the user is logged in, this page will forward to the front page.
+ *
+ * @package Elgg.Core
+ * @subpackage Accounts
+ */
+
+if (elgg_is_logged_in()) {
+ forward('');
+}
+
+$login_box = elgg_view('core/account/login_box');
+$content = elgg_view_layout('one_column', array('content' => $login_box));
+echo elgg_view_page(elgg_echo('login'), $content);
diff --git a/pages/account/register.php b/pages/account/register.php
new file mode 100644
index 000000000..cf18a635b
--- /dev/null
+++ b/pages/account/register.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Assembles and outputs the registration page.
+ *
+ * Since 1.8, registration can be disabled via administration. If this is
+ * the case, calls to this page will forward to the network front page.
+ *
+ * If the user is logged in, this page will forward to the network
+ * front page.
+ *
+ * @package Elgg.Core
+ * @subpackage Registration
+ */
+
+// check new registration allowed
+if (elgg_get_config('allow_registration') == false) {
+ register_error(elgg_echo('registerdisabled'));
+ forward();
+}
+
+$friend_guid = (int) get_input('friend_guid', 0);
+$invitecode = get_input('invitecode');
+
+// only logged out people need to register
+if (elgg_is_logged_in()) {
+ forward();
+}
+
+$title = elgg_echo("register");
+
+$content = elgg_view_title($title);
+
+// create the registration url - including switching to https if configured
+$register_url = elgg_get_site_url() . 'action/register';
+if (elgg_get_config('https_login')) {
+ $register_url = str_replace("http:", "https:", $register_url);
+}
+$form_params = array(
+ 'action' => $register_url,
+ 'class' => 'elgg-form-account',
+);
+
+$body_params = array(
+ 'friend_guid' => $friend_guid,
+ 'invitecode' => $invitecode
+);
+$content .= elgg_view_form('register', $form_params, $body_params);
+
+$content .= elgg_view('help/register');
+
+$body = elgg_view_layout("one_column", array('content' => $content));
+
+echo elgg_view_page($title, $body);
diff --git a/pages/account/reset_password.php b/pages/account/reset_password.php
new file mode 100644
index 000000000..6515bfc5d
--- /dev/null
+++ b/pages/account/reset_password.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Page for resetting a forgotten password
+ *
+ * @package Elgg.Core
+ * @subpackage Registration
+ */
+
+if (elgg_is_logged_in()) {
+ forward();
+}
+
+$user_guid = get_input('u');
+$code = get_input('c');
+
+$user = get_entity($user_guid);
+
+// don't check code here to avoid automated attacks
+if (!$user instanceof ElggUser) {
+ register_error(elgg_echo('user:passwordreset:unknown_user'));
+ forward();
+}
+
+$params = array(
+ 'guid' => $user_guid,
+ 'code' => $code,
+);
+$form = elgg_view_form('user/passwordreset', array('class' => 'elgg-form-account'), $params);
+
+$title = elgg_echo('resetpassword');
+$content = elgg_view_title(elgg_echo('resetpassword')) . $form;
+
+$body = elgg_view_layout('one_column', array('content' => $content));
+
+echo elgg_view_page($title, $body);
diff --git a/pages/avatar/edit.php b/pages/avatar/edit.php
new file mode 100644
index 000000000..c71633b8b
--- /dev/null
+++ b/pages/avatar/edit.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Upload and crop an avatar page
+ */
+
+// Only logged in users
+gatekeeper();
+
+elgg_set_context('profile_edit');
+
+$title = elgg_echo('avatar:edit');
+
+$entity = elgg_get_page_owner_entity();
+$content = elgg_view('core/avatar/upload', array('entity' => $entity));
+
+// only offer the crop view if an avatar has been uploaded
+if (isset($entity->icontime)) {
+ $content .= elgg_view('core/avatar/crop', array('entity' => $entity));
+}
+
+$params = array(
+ 'content' => $content,
+ 'title' => $title,
+);
+$body = elgg_view_layout('one_sidebar', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/pages/avatar/view.php b/pages/avatar/view.php
new file mode 100644
index 000000000..10d81fef1
--- /dev/null
+++ b/pages/avatar/view.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * View an avatar
+ */
+
+// page owner library sets this based on URL
+$user = elgg_get_page_owner_entity();
+
+// Get the size
+$size = strtolower(get_input('size'));
+if (!in_array($size, array('master', 'large', 'medium', 'small', 'tiny', 'topbar'))) {
+ $size = 'medium';
+}
+
+// If user doesn't exist, return default icon
+if (!$user) {
+ $url = "_graphics/icons/default/{$size}.png";
+ $url = elgg_normalize_url($url);
+ forward($url);
+}
+
+$user_guid = $user->getGUID();
+
+// Try and get the icon
+$filehandler = new ElggFile();
+$filehandler->owner_guid = $user_guid;
+$filehandler->setFilename("profile/{$user_guid}{$size}.jpg");
+
+$success = false;
+
+try {
+ if ($filehandler->open("read")) {
+ if ($contents = $filehandler->read($filehandler->size())) {
+ $success = true;
+ }
+ }
+} catch (InvalidParameterException $e) {
+ elgg_log("Unable to get avatar for user with GUID $user_guid", 'ERROR');
+}
+
+
+if (!$success) {
+ $url = "_graphics/icons/default/{$size}.png";
+ $url = elgg_normalize_url($url);
+ forward($url);
+}
+
+header("Content-type: image/jpeg", true);
+header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', strtotime("+6 months")), true);
+header("Pragma: public", true);
+header("Cache-Control: public", true);
+header("Content-Length: " . strlen($contents));
+
+echo $contents;
diff --git a/pages/entities/index.php b/pages/entities/index.php
new file mode 100644
index 000000000..e73d65db4
--- /dev/null
+++ b/pages/entities/index.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Generic entity viewer
+ * Given a GUID, this page will try and display any entity
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+
+// Get the GUID of the entity we want to view
+$guid = (int) get_input('guid');
+$shell = get_input('shell');
+if ($shell == "no") {
+ $shell = false;
+} else {
+ $shell = true;
+}
+
+$context = get_input('context');
+if ($context) {
+ elgg_set_context($context);
+}
+
+// Get the entity, if possible
+if ($entity = get_entity($guid)) {
+ if ($entity->container_guid) {
+ elgg_set_page_owner_guid($entity->container_guid);
+ } else {
+ elgg_set_page_owner_guid($entity->owner_guid);
+ }
+
+ // Set the body to be the full view of the entity, and the title to be its title
+ if ($entity instanceof ElggObject) {
+ $title = $entity->title;
+ } else if ($entity instanceof ElggEntity) {
+ $title = $entity->name;
+ }
+ $area1 = elgg_view_entity($entity, array('full_view' => true));
+ if ($shell) {
+ $body = elgg_view_layout('one_column', array('content' => $area1));
+ } else {
+ $body = $area1;
+ }
+} else {
+ $body = elgg_echo('notfound');
+}
+
+// Display the page
+if ($shell) {
+ echo elgg_view_page($title, $body);
+} else {
+ header("Content-type: text/html; charset=UTF-8");
+ echo $title;
+ echo $body;
+} \ No newline at end of file
diff --git a/pages/friends/collections/add.php b/pages/friends/collections/add.php
new file mode 100644
index 000000000..60f7586ba
--- /dev/null
+++ b/pages/friends/collections/add.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Elgg add a collection of friends
+ *
+ * @package Elgg.Core
+ * @subpackage Social.Collections
+ */
+
+// You need to be logged in for this one
+gatekeeper();
+
+$title = elgg_echo('friends:collections:add');
+
+$content = elgg_view_title($title);
+
+$content .= elgg_view_form('friends/collections/add', array(), array(
+ 'friends' => get_user_friends(elgg_get_logged_in_user_guid(), "", 9999),
+));
+
+$body = elgg_view_layout('one_sidebar', array('content' => $content));
+
+echo elgg_view_page(elgg_echo('friends:collections:add'), $body);
diff --git a/pages/friends/collections/pickercallback.php b/pages/friends/collections/pickercallback.php
new file mode 100644
index 000000000..c6ed61cf0
--- /dev/null
+++ b/pages/friends/collections/pickercallback.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Elgg friends picker callback
+ *
+ * @package Elgg.Core
+ * @subpackage Social.Collections
+ */
+
+// Load Elgg engine
+require_once(dirname(dirname(dirname(dirname(__FILE__)))) . "/engine/start.php");
+
+$site_url = elgg_get_site_url();
+
+// Get callback type (list or picker)
+$type = get_input('type', 'picker');
+
+$collection = (int) get_input('collection', 0);
+$members = get_members_of_access_collection($collection, true);
+if (!$members) {
+ $members = array();
+}
+
+$friendspicker = (int) get_input('friendspicker', 0);
+
+// Get page owner (bomb out if there isn't one)
+$pageowner = elgg_get_page_owner_entity();
+if (!$pageowner) {
+ forward();
+ exit;
+}
+
+// Depending on the view type, launch a different view
+switch($type) {
+ case 'list':
+ $js_segment = elgg_view('core/friends/tablelistcountupdate', array(
+ 'friendspicker' => $friendspicker,
+ 'count' => sizeof($members),
+ ));
+ $content = elgg_view('core/friends/tablelist', array(
+ 'entities' => $members,
+ 'content' => $js_segment,
+ ));
+ break;
+ default:
+ $friends = $pageowner->getFriends('', 9999);
+
+ $content = elgg_view('input/friendspicker', array(
+ 'entities' => $friends,
+ 'value' => $members,
+ 'callback' => true,
+ 'friendspicker' => $friendspicker,
+ 'collection_id' => $collection,
+ 'formtarget' => $site_url . 'action/friends/collections/edit',
+ ));
+ break;
+}
+
+// Output the content
+echo $content; \ No newline at end of file
diff --git a/pages/friends/collections/view.php b/pages/friends/collections/view.php
new file mode 100644
index 000000000..0d72fe788
--- /dev/null
+++ b/pages/friends/collections/view.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Elgg collections of friends
+ *
+ * @package Elgg.Core
+ * @subpackage Social.Collections
+ */
+
+$title = elgg_echo('friends:collections');
+elgg_register_title_button('collections', 'add');
+
+$content = elgg_view_access_collections(elgg_get_logged_in_user_guid());
+
+$body = elgg_view_layout('content', array(
+ 'filter' => false,
+ 'content' => $content,
+ 'title' => $title,
+ 'context' => 'collections',
+));
+
+echo elgg_view_page($title, $body);
diff --git a/pages/friends/index.php b/pages/friends/index.php
new file mode 100644
index 000000000..63518a413
--- /dev/null
+++ b/pages/friends/index.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Elgg friends page
+ *
+ * @package Elgg.Core
+ * @subpackage Social.Friends
+ */
+
+$owner = elgg_get_page_owner_entity();
+if (!$owner) {
+ // unknown user so send away (@todo some sort of 404 error)
+ forward();
+}
+
+$title = elgg_echo("friends:owned", array($owner->name));
+
+$options = array(
+ 'relationship' => 'friend',
+ 'relationship_guid' => $owner->getGUID(),
+ 'inverse_relationship' => FALSE,
+ 'type' => 'user',
+ 'full_view' => FALSE
+);
+$content = elgg_list_entities_from_relationship($options);
+if (!$content) {
+ $content = elgg_echo('friends:none');
+}
+
+$params = array(
+ 'content' => $content,
+ 'title' => $title,
+);
+$body = elgg_view_layout('one_sidebar', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/pages/friends/of.php b/pages/friends/of.php
new file mode 100644
index 000000000..aa9ee8bee
--- /dev/null
+++ b/pages/friends/of.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Elgg friends of page
+ *
+ * @package Elgg.Core
+ * @subpackage Social.Friends
+ */
+
+$owner = elgg_get_page_owner_entity();
+if (!$owner) {
+ // unknown user so send away (@todo some sort of 404 error)
+ forward();
+}
+
+$title = elgg_echo("friends:of:owned", array($owner->name));
+
+$options = array(
+ 'relationship' => 'friend',
+ 'relationship_guid' => $owner->getGUID(),
+ 'inverse_relationship' => TRUE,
+ 'type' => 'user',
+ 'full_view' => FALSE
+);
+$content = elgg_list_entities_from_relationship($options);
+if (!$content) {
+ $content = elgg_echo('friends:none');
+}
+
+$params = array(
+ 'content' => $content,
+ 'title' => $title,
+);
+$body = elgg_view_layout('one_sidebar', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/pages/profile/edit.php b/pages/profile/edit.php
new file mode 100644
index 000000000..0ffb8783f
--- /dev/null
+++ b/pages/profile/edit.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Edit profile page
+ */
+
+gatekeeper();
+
+$user = elgg_get_page_owner_entity();
+if (!$user) {
+ register_error(elgg_echo("profile:notfound"));
+ forward();
+}
+
+// check if logged in user can edit this profile
+if (!$user->canEdit()) {
+ register_error(elgg_echo("profile:noaccess"));
+ forward();
+}
+
+elgg_set_context('profile_edit');
+
+$title = elgg_echo('profile:edit');
+
+$content = elgg_view_form('profile/edit', array(), array('entity' => $user));
+
+$params = array(
+ 'content' => $content,
+ 'title' => $title,
+);
+$body = elgg_view_layout('one_sidebar', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/pages/river.php b/pages/river.php
new file mode 100644
index 000000000..0e1511334
--- /dev/null
+++ b/pages/river.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Main activity stream list page
+ */
+
+$options = array();
+
+$page_type = preg_replace('[\W]', '', get_input('page_type', 'all'));
+$type = preg_replace('[\W]', '', get_input('type', 'all'));
+$subtype = preg_replace('[\W]', '', get_input('subtype', ''));
+if ($subtype) {
+ $selector = "type=$type&subtype=$subtype";
+} else {
+ $selector = "type=$type";
+}
+
+if ($type != 'all') {
+ $options['type'] = $type;
+ if ($subtype) {
+ $options['subtype'] = $subtype;
+ }
+}
+
+switch ($page_type) {
+ case 'mine':
+ $title = elgg_echo('river:mine');
+ $page_filter = 'mine';
+ $options['subject_guid'] = elgg_get_logged_in_user_guid();
+ break;
+ case 'friends':
+ $title = elgg_echo('river:friends');
+ $page_filter = 'friends';
+ $options['relationship_guid'] = elgg_get_logged_in_user_guid();
+ $options['relationship'] = 'friend';
+ break;
+ default:
+ $title = elgg_echo('river:all');
+ $page_filter = 'all';
+ break;
+}
+
+$activity = elgg_list_river($options);
+if (!$activity) {
+ $activity = elgg_echo('river:none');
+}
+
+$content = elgg_view('core/river/filter', array('selector' => $selector));
+
+$sidebar = elgg_view('core/river/sidebar');
+
+$params = array(
+ 'content' => $content . $activity,
+ 'sidebar' => $sidebar,
+ 'filter_context' => $page_filter,
+ 'class' => 'elgg-river-layout',
+);
+
+$body = elgg_view_layout('content', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/pages/settings/account.php b/pages/settings/account.php
new file mode 100644
index 000000000..1bf71973b
--- /dev/null
+++ b/pages/settings/account.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Elgg user account settings.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// Only logged in users
+gatekeeper();
+
+// Make sure we don't open a security hole ...
+if ((!elgg_get_page_owner_entity()) || (!elgg_get_page_owner_entity()->canEdit())) {
+ elgg_set_page_owner_guid(elgg_get_logged_in_user_guid());
+}
+
+$title = elgg_echo('usersettings:user');
+
+$content = elgg_view('core/settings/account');
+
+$params = array(
+ 'content' => $content,
+ 'title' => $title,
+);
+$body = elgg_view_layout('one_sidebar', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/pages/settings/statistics.php b/pages/settings/statistics.php
new file mode 100644
index 000000000..9df71ec5e
--- /dev/null
+++ b/pages/settings/statistics.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Elgg user statistics.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// Only logged in users
+gatekeeper();
+
+// Make sure we don't open a security hole ...
+if ((!elgg_get_page_owner_entity()) || (!elgg_get_page_owner_entity()->canEdit())) {
+ elgg_set_page_owner_guid(elgg_get_logged_in_user_guid());
+}
+
+$title = elgg_echo("usersettings:statistics");
+
+$content = elgg_view("core/settings/statistics");
+
+$params = array(
+ 'content' => $content,
+ 'title' => $title,
+);
+$body = elgg_view_layout('one_sidebar', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/pages/settings/tools.php b/pages/settings/tools.php
new file mode 100644
index 000000000..daf381728
--- /dev/null
+++ b/pages/settings/tools.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Elgg user tools settings
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// Make sure only valid users can see this
+gatekeeper();
+
+// Make sure we don't open a security hole ...
+if ((!elgg_get_page_owner_entity()) || (!elgg_get_page_owner_entity()->canEdit())) {
+ elgg_set_page_owner_guid(elgg_get_logged_in_user_guid());
+}
+
+$title = elgg_echo("usersettings:plugins");
+
+$content = elgg_view("core/settings/tools",
+ array('installed_plugins' => elgg_get_plugins()));
+
+$params = array(
+ 'content' => $content,
+ 'title' => $title,
+);
+$body = elgg_view_layout('one_sidebar', $params);
+
+echo elgg_view_page($title, $body);
diff --git a/upgrade.php b/upgrade.php
new file mode 100644
index 000000000..c5f158c61
--- /dev/null
+++ b/upgrade.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Elgg upgrade script.
+ *
+ * This script triggers any necessary upgrades. If the site has been upgraded
+ * to the most recent version of the code, no upgrades are run and the caches
+ * are flushed. If you would prefer that this script is not accessible to others
+ * after an upgrade, you can delete it. Future versions of Elgg will include a
+ * new version of the script. Deleting the script is not a requirement and
+ * leaving it behind does not affect the security of the site.
+ *
+ * Upgrades use a table {db_prefix}upgrade_lock as a mutex to prevent concurrent upgrades.
+ *
+ * @package Elgg.Core
+ * @subpackage Upgrade
+ */
+
+// we want to know if an error occurs
+ini_set('display_errors', 1);
+
+define('UPGRADING', 'upgrading');
+require_once(dirname(__FILE__) . "/engine/start.php");
+
+if (get_input('upgrade') == 'upgrade') {
+ // prevent someone from running the upgrade script in parallel (see #4643)
+ if (!_elgg_upgrade_lock()) {
+ register_error(elgg_echo('upgrade:locked'));
+ forward();
+ }
+
+ // disable the system log for upgrades to avoid exceptions when the schema changes.
+ elgg_unregister_event_handler('log', 'systemlog', 'system_log_default_logger');
+ elgg_unregister_event_handler('all', 'all', 'system_log_listener');
+
+ if (elgg_get_unprocessed_upgrades()) {
+ version_upgrade();
+ }
+
+ // turn off time limit so plugins that have upgrade scripts aren't interrupted
+ set_time_limit(0);
+ elgg_trigger_event('upgrade', 'system', null);
+ elgg_invalidate_simplecache();
+ elgg_reset_system_cache();
+
+ _elgg_upgrade_unlock();
+
+} else {
+ // if upgrading from < 1.8.0, check for the core view 'welcome' and bail if it's found.
+ // see http://trac.elgg.org/ticket/3064
+ // we're not checking the view itself because it's likely themes will override this view.
+ // we're only concerned with core files.
+ $welcome = dirname(__FILE__) . '/views/default/welcome.php';
+ if (file_exists($welcome)) {
+ elgg_set_viewtype('failsafe');
+ // can't have pretty messages because we don't know the state of the views.
+ $content = elgg_echo('upgrade:unable_to_upgrade_info');
+ $title = elgg_echo('upgrade:unable_to_upgrade');
+
+ echo elgg_view_page($title, $content);
+ exit;
+ }
+
+ echo elgg_view_page(elgg_echo('upgrading'), '', 'upgrade');
+ exit;
+}
+
+forward();
diff --git a/vendors/calendarpopup/CalendarPopup.js b/vendors/calendarpopup/CalendarPopup.js
new file mode 100644
index 000000000..664c3c066
--- /dev/null
+++ b/vendors/calendarpopup/CalendarPopup.js
@@ -0,0 +1,1462 @@
+// ===================================================================
+// Author: Matt Kruse <matt@mattkruse.com>
+// WWW: http://www.mattkruse.com/
+//
+// NOTICE: You may use this code for any purpose, commercial or
+// private, without any further permission from the author. You may
+// remove this notice from your final code if you wish, however it is
+// appreciated by the author if at least my web site address is kept.
+//
+// You may *NOT* re-distribute this code in any way except through its
+// use. That means, you can include it in your product, or your web
+// site, or any other form where the code is actually being used. You
+// may not put the plain javascript up on your site for download or
+// include it in your javascript libraries for download.
+// If you wish to share this code with others, please just point them
+// to the URL instead.
+// Please DO NOT link directly to my .js files from your site. Copy
+// the files to your server and use them there. Thank you.
+// ===================================================================
+
+
+/* SOURCE FILE: AnchorPosition.js */
+
+/*
+AnchorPosition.js
+Author: Matt Kruse
+Last modified: 10/11/02
+
+DESCRIPTION: These functions find the position of an <A> tag in a document,
+so other elements can be positioned relative to it.
+
+COMPATABILITY: Netscape 4.x,6.x,Mozilla, IE 5.x,6.x on Windows. Some small
+positioning errors - usually with Window positioning - occur on the
+Macintosh platform.
+
+FUNCTIONS:
+getAnchorPosition(anchorname)
+ Returns an Object() having .x and .y properties of the pixel coordinates
+ of the upper-left corner of the anchor. Position is relative to the PAGE.
+
+getAnchorWindowPosition(anchorname)
+ Returns an Object() having .x and .y properties of the pixel coordinates
+ of the upper-left corner of the anchor, relative to the WHOLE SCREEN.
+
+NOTES:
+
+1) For popping up separate browser windows, use getAnchorWindowPosition.
+ Otherwise, use getAnchorPosition
+
+2) Your anchor tag MUST contain both NAME and ID attributes which are the
+ same. For example:
+ <A NAME="test" ID="test"> </A>
+
+3) There must be at least a space between <A> </A> for IE5.5 to see the
+ anchor tag correctly. Do not do <A></A> with no space.
+*/
+
+// getAnchorPosition(anchorname)
+// This function returns an object having .x and .y properties which are the coordinates
+// of the named anchor, relative to the page.
+function getAnchorPosition(anchorname) {
+ // This function will return an Object with x and y properties
+ var useWindow=false;
+ var coordinates=new Object();
+ var x=0,y=0;
+ // Browser capability sniffing
+ var use_gebi=false, use_css=false, use_layers=false;
+ if (document.getElementById) { use_gebi=true; }
+ else if (document.all) { use_css=true; }
+ else if (document.layers) { use_layers=true; }
+ // Logic to find position
+ if (use_gebi && document.all) {
+ x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
+ y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
+ }
+ else if (use_gebi) {
+ var o=document.getElementById(anchorname);
+ x=AnchorPosition_getPageOffsetLeft(o);
+ y=AnchorPosition_getPageOffsetTop(o);
+ }
+ else if (use_css) {
+ x=AnchorPosition_getPageOffsetLeft(document.all[anchorname]);
+ y=AnchorPosition_getPageOffsetTop(document.all[anchorname]);
+ }
+ else if (use_layers) {
+ var found=0;
+ for (var i=0; i<document.anchors.length; i++) {
+ if (document.anchors[i].name==anchorname) { found=1; break; }
+ }
+ if (found==0) {
+ coordinates.x=0; coordinates.y=0; return coordinates;
+ }
+ x=document.anchors[i].x;
+ y=document.anchors[i].y;
+ }
+ else {
+ coordinates.x=0; coordinates.y=0; return coordinates;
+ }
+ coordinates.x=x;
+ coordinates.y=y;
+ return coordinates;
+ }
+
+// getAnchorWindowPosition(anchorname)
+// This function returns an object having .x and .y properties which are the coordinates
+// of the named anchor, relative to the window
+function getAnchorWindowPosition(anchorname) {
+ var coordinates=getAnchorPosition(anchorname);
+ var x=0;
+ var y=0;
+ if (document.getElementById) {
+ if (isNaN(window.screenX)) {
+ x=coordinates.x-document.body.scrollLeft+window.screenLeft;
+ y=coordinates.y-document.body.scrollTop+window.screenTop;
+ }
+ else {
+ x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
+ y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
+ }
+ }
+ else if (document.all) {
+ x=coordinates.x-document.body.scrollLeft+window.screenLeft;
+ y=coordinates.y-document.body.scrollTop+window.screenTop;
+ }
+ else if (document.layers) {
+ x=coordinates.x+window.screenX+(window.outerWidth-window.innerWidth)-window.pageXOffset;
+ y=coordinates.y+window.screenY+(window.outerHeight-24-window.innerHeight)-window.pageYOffset;
+ }
+ coordinates.x=x;
+ coordinates.y=y;
+ return coordinates;
+ }
+
+// Functions for IE to get position of an object
+function AnchorPosition_getPageOffsetLeft (el) {
+ var ol=el.offsetLeft;
+ while ((el=el.offsetParent) != null) { ol += el.offsetLeft; }
+ return ol;
+ }
+function AnchorPosition_getWindowOffsetLeft (el) {
+ return AnchorPosition_getPageOffsetLeft(el)-document.body.scrollLeft;
+ }
+function AnchorPosition_getPageOffsetTop (el) {
+ var ot=el.offsetTop;
+ while((el=el.offsetParent) != null) { ot += el.offsetTop; }
+ return ot;
+ }
+function AnchorPosition_getWindowOffsetTop (el) {
+ return AnchorPosition_getPageOffsetTop(el)-document.body.scrollTop;
+ }
+
+/* SOURCE FILE: date.js */
+
+// HISTORY
+// ------------------------------------------------------------------
+// May 17, 2003: Fixed bug in parseDate() for dates <1970
+// March 11, 2003: Added parseDate() function
+// March 11, 2003: Added "NNN" formatting option. Doesn't match up
+// perfectly with SimpleDateFormat formats, but
+// backwards-compatability was required.
+
+// ------------------------------------------------------------------
+// These functions use the same 'format' strings as the
+// java.text.SimpleDateFormat class, with minor exceptions.
+// The format string consists of the following abbreviations:
+//
+// Field | Full Form | Short Form
+// -------------+--------------------+-----------------------
+// Year | yyyy (4 digits) | yy (2 digits), y (2 or 4 digits)
+// Month | MMM (name or abbr.)| MM (2 digits), M (1 or 2 digits)
+// | NNN (abbr.) |
+// Day of Month | dd (2 digits) | d (1 or 2 digits)
+// Day of Week | EE (name) | E (abbr)
+// Hour (1-12) | hh (2 digits) | h (1 or 2 digits)
+// Hour (0-23) | HH (2 digits) | H (1 or 2 digits)
+// Hour (0-11) | KK (2 digits) | K (1 or 2 digits)
+// Hour (1-24) | kk (2 digits) | k (1 or 2 digits)
+// Minute | mm (2 digits) | m (1 or 2 digits)
+// Second | ss (2 digits) | s (1 or 2 digits)
+// AM/PM | a |
+//
+// NOTE THE DIFFERENCE BETWEEN MM and mm! Month=MM, not mm!
+// Examples:
+// "MMM d, y" matches: January 01, 2000
+// Dec 1, 1900
+// Nov 20, 00
+// "M/d/yy" matches: 01/20/00
+// 9/2/00
+// "MMM dd, yyyy hh:mm:ssa" matches: "January 01, 2000 12:30:45AM"
+// ------------------------------------------------------------------
+
+var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
+var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
+function LZ(x) {return(x<0||x>9?"":"0")+x}
+
+// ------------------------------------------------------------------
+// isDate ( date_string, format_string )
+// Returns true if date string matches format of format string and
+// is a valid date. Else returns false.
+// It is recommended that you trim whitespace around the value before
+// passing it to this function, as whitespace is NOT ignored!
+// ------------------------------------------------------------------
+function isDate(val,format) {
+ var date=getDateFromFormat(val,format);
+ if (date==0) { return false; }
+ return true;
+ }
+
+// -------------------------------------------------------------------
+// compareDates(date1,date1format,date2,date2format)
+// Compare two date strings to see which is greater.
+// Returns:
+// 1 if date1 is greater than date2
+// 0 if date2 is greater than date1 of if they are the same
+// -1 if either of the dates is in an invalid format
+// -------------------------------------------------------------------
+function compareDates(date1,dateformat1,date2,dateformat2) {
+ var d1=getDateFromFormat(date1,dateformat1);
+ var d2=getDateFromFormat(date2,dateformat2);
+ if (d1==0 || d2==0) {
+ return -1;
+ }
+ else if (d1 > d2) {
+ return 1;
+ }
+ return 0;
+ }
+
+// ------------------------------------------------------------------
+// formatDate (date_object, format)
+// Returns a date in the output format specified.
+// The format string uses the same abbreviations as in getDateFromFormat()
+// ------------------------------------------------------------------
+function formatDate(date,format) {
+ format=format+"";
+ var result="";
+ var i_format=0;
+ var c="";
+ var token="";
+ var y=date.getYear()+"";
+ var M=date.getMonth()+1;
+ var d=date.getDate();
+ var E=date.getDay();
+ var H=date.getHours();
+ var m=date.getMinutes();
+ var s=date.getSeconds();
+ var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
+ // Convert real date parts into formatted versions
+ var value=new Object();
+ if (y.length < 4) {y=""+(y-0+1900);}
+ value["y"]=""+y;
+ value["yyyy"]=y;
+ value["yy"]=y.substring(2,4);
+ value["M"]=M;
+ value["MM"]=LZ(M);
+ value["MMM"]=MONTH_NAMES[M-1];
+ value["NNN"]=MONTH_NAMES[M+11];
+ value["d"]=d;
+ value["dd"]=LZ(d);
+ value["E"]=DAY_NAMES[E+7];
+ value["EE"]=DAY_NAMES[E];
+ value["H"]=H;
+ value["HH"]=LZ(H);
+ if (H==0){value["h"]=12;}
+ else if (H>12){value["h"]=H-12;}
+ else {value["h"]=H;}
+ value["hh"]=LZ(value["h"]);
+ if (H>11){value["K"]=H-12;} else {value["K"]=H;}
+ value["k"]=H+1;
+ value["KK"]=LZ(value["K"]);
+ value["kk"]=LZ(value["k"]);
+ if (H > 11) { value["a"]="PM"; }
+ else { value["a"]="AM"; }
+ value["m"]=m;
+ value["mm"]=LZ(m);
+ value["s"]=s;
+ value["ss"]=LZ(s);
+ while (i_format < format.length) {
+ c=format.charAt(i_format);
+ token="";
+ while ((format.charAt(i_format)==c) && (i_format < format.length)) {
+ token += format.charAt(i_format++);
+ }
+ if (value[token] != null) { result=result + value[token]; }
+ else { result=result + token; }
+ }
+ return result;
+ }
+
+// ------------------------------------------------------------------
+// Utility functions for parsing in getDateFromFormat()
+// ------------------------------------------------------------------
+function _isInteger(val) {
+ var digits="1234567890";
+ for (var i=0; i < val.length; i++) {
+ if (digits.indexOf(val.charAt(i))==-1) { return false; }
+ }
+ return true;
+ }
+function _getInt(str,i,minlength,maxlength) {
+ for (var x=maxlength; x>=minlength; x--) {
+ var token=str.substring(i,i+x);
+ if (token.length < minlength) { return null; }
+ if (_isInteger(token)) { return token; }
+ }
+ return null;
+ }
+
+// ------------------------------------------------------------------
+// getDateFromFormat( date_string , format_string )
+//
+// This function takes a date string and a format string. It matches
+// If the date string matches the format string, it returns the
+// getTime() of the date. If it does not match, it returns 0.
+// ------------------------------------------------------------------
+function getDateFromFormat(val,format) {
+ val=val+"";
+ format=format+"";
+ var i_val=0;
+ var i_format=0;
+ var c="";
+ var token="";
+ var token2="";
+ var x,y;
+ var now=new Date();
+ var year=now.getYear();
+ var month=now.getMonth()+1;
+ var date=1;
+ var hh=now.getHours();
+ var mm=now.getMinutes();
+ var ss=now.getSeconds();
+ var ampm="";
+
+ while (i_format < format.length) {
+ // Get next token from format string
+ c=format.charAt(i_format);
+ token="";
+ while ((format.charAt(i_format)==c) && (i_format < format.length)) {
+ token += format.charAt(i_format++);
+ }
+ // Extract contents of value based on format token
+ if (token=="yyyy" || token=="yy" || token=="y") {
+ if (token=="yyyy") { x=4;y=4; }
+ if (token=="yy") { x=2;y=2; }
+ if (token=="y") { x=2;y=4; }
+ year=_getInt(val,i_val,x,y);
+ if (year==null) { return 0; }
+ i_val += year.length;
+ if (year.length==2) {
+ if (year > 70) { year=1900+(year-0); }
+ else { year=2000+(year-0); }
+ }
+ }
+ else if (token=="MMM"||token=="NNN"){
+ month=0;
+ for (var i=0; i<MONTH_NAMES.length; i++) {
+ var month_name=MONTH_NAMES[i];
+ if (val.substring(i_val,i_val+month_name.length).toLowerCase()==month_name.toLowerCase()) {
+ if (token=="MMM"||(token=="NNN"&&i>11)) {
+ month=i+1;
+ if (month>12) { month -= 12; }
+ i_val += month_name.length;
+ break;
+ }
+ }
+ }
+ if ((month < 1)||(month>12)){return 0;}
+ }
+ else if (token=="EE"||token=="E"){
+ for (var i=0; i<DAY_NAMES.length; i++) {
+ var day_name=DAY_NAMES[i];
+ if (val.substring(i_val,i_val+day_name.length).toLowerCase()==day_name.toLowerCase()) {
+ i_val += day_name.length;
+ break;
+ }
+ }
+ }
+ else if (token=="MM"||token=="M") {
+ month=_getInt(val,i_val,token.length,2);
+ if(month==null||(month<1)||(month>12)){return 0;}
+ i_val+=month.length;}
+ else if (token=="dd"||token=="d") {
+ date=_getInt(val,i_val,token.length,2);
+ if(date==null||(date<1)||(date>31)){return 0;}
+ i_val+=date.length;}
+ else if (token=="hh"||token=="h") {
+ hh=_getInt(val,i_val,token.length,2);
+ if(hh==null||(hh<1)||(hh>12)){return 0;}
+ i_val+=hh.length;}
+ else if (token=="HH"||token=="H") {
+ hh=_getInt(val,i_val,token.length,2);
+ if(hh==null||(hh<0)||(hh>23)){return 0;}
+ i_val+=hh.length;}
+ else if (token=="KK"||token=="K") {
+ hh=_getInt(val,i_val,token.length,2);
+ if(hh==null||(hh<0)||(hh>11)){return 0;}
+ i_val+=hh.length;}
+ else if (token=="kk"||token=="k") {
+ hh=_getInt(val,i_val,token.length,2);
+ if(hh==null||(hh<1)||(hh>24)){return 0;}
+ i_val+=hh.length;hh--;}
+ else if (token=="mm"||token=="m") {
+ mm=_getInt(val,i_val,token.length,2);
+ if(mm==null||(mm<0)||(mm>59)){return 0;}
+ i_val+=mm.length;}
+ else if (token=="ss"||token=="s") {
+ ss=_getInt(val,i_val,token.length,2);
+ if(ss==null||(ss<0)||(ss>59)){return 0;}
+ i_val+=ss.length;}
+ else if (token=="a") {
+ if (val.substring(i_val,i_val+2).toLowerCase()=="am") {ampm="AM";}
+ else if (val.substring(i_val,i_val+2).toLowerCase()=="pm") {ampm="PM";}
+ else {return 0;}
+ i_val+=2;}
+ else {
+ if (val.substring(i_val,i_val+token.length)!=token) {return 0;}
+ else {i_val+=token.length;}
+ }
+ }
+ // If there are any trailing characters left in the value, it doesn't match
+ if (i_val != val.length) { return 0; }
+ // Is date valid for month?
+ if (month==2) {
+ // Check for leap year
+ if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { // leap year
+ if (date > 29){ return 0; }
+ }
+ else { if (date > 28) { return 0; } }
+ }
+ if ((month==4)||(month==6)||(month==9)||(month==11)) {
+ if (date > 30) { return 0; }
+ }
+ // Correct hours value
+ if (hh<12 && ampm=="PM") { hh=hh-0+12; }
+ else if (hh>11 && ampm=="AM") { hh-=12; }
+ var newdate=new Date(year,month-1,date,hh,mm,ss);
+ return newdate.getTime();
+ }
+
+// ------------------------------------------------------------------
+// parseDate( date_string [, prefer_euro_format] )
+//
+// This function takes a date string and tries to match it to a
+// number of possible date formats to get the value. It will try to
+// match against the following international formats, in this order:
+// y-M-d MMM d, y MMM d,y y-MMM-d d-MMM-y MMM d
+// M/d/y M-d-y M.d.y MMM-d M/d M-d
+// d/M/y d-M-y d.M.y d-MMM d/M d-M
+// A second argument may be passed to instruct the method to search
+// for formats like d/M/y (european format) before M/d/y (American).
+// Returns a Date object or null if no patterns match.
+// ------------------------------------------------------------------
+function parseDate(val) {
+ var preferEuro=(arguments.length==2)?arguments[1]:false;
+ generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');
+ monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');
+ dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');
+ var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');
+ var d=null;
+ for (var i=0; i<checkList.length; i++) {
+ var l=window[checkList[i]];
+ for (var j=0; j<l.length; j++) {
+ d=getDateFromFormat(val,l[j]);
+ if (d!=0) { return new Date(d); }
+ }
+ }
+ return null;
+ }
+
+/* SOURCE FILE: PopupWindow.js */
+
+/*
+PopupWindow.js
+Author: Matt Kruse
+Last modified: 02/16/04
+
+DESCRIPTION: This object allows you to easily and quickly popup a window
+in a certain place. The window can either be a DIV or a separate browser
+window.
+
+COMPATABILITY: Works with Netscape 4.x, 6.x, IE 5.x on Windows. Some small
+positioning errors - usually with Window positioning - occur on the
+Macintosh platform. Due to bugs in Netscape 4.x, populating the popup
+window with <STYLE> tags may cause errors.
+
+USAGE:
+// Create an object for a WINDOW popup
+var win = new PopupWindow();
+
+// Create an object for a DIV window using the DIV named 'mydiv'
+var win = new PopupWindow('mydiv');
+
+// Set the window to automatically hide itself when the user clicks
+// anywhere else on the page except the popup
+win.autoHide();
+
+// Show the window relative to the anchor name passed in
+win.showPopup(anchorname);
+
+// Hide the popup
+win.hidePopup();
+
+// Set the size of the popup window (only applies to WINDOW popups
+win.setSize(width,height);
+
+// Populate the contents of the popup window that will be shown. If you
+// change the contents while it is displayed, you will need to refresh()
+win.populate(string);
+
+// set the URL of the window, rather than populating its contents
+// manually
+win.setUrl("http://www.site.com/");
+
+// Refresh the contents of the popup
+win.refresh();
+
+// Specify how many pixels to the right of the anchor the popup will appear
+win.offsetX = 50;
+
+// Specify how many pixels below the anchor the popup will appear
+win.offsetY = 100;
+
+NOTES:
+1) Requires the functions in AnchorPosition.js
+
+2) Your anchor tag MUST contain both NAME and ID attributes which are the
+ same. For example:
+ <A NAME="test" ID="test"> </A>
+
+3) There must be at least a space between <A> </A> for IE5.5 to see the
+ anchor tag correctly. Do not do <A></A> with no space.
+
+4) When a PopupWindow object is created, a handler for 'onmouseup' is
+ attached to any event handler you may have already defined. Do NOT define
+ an event handler for 'onmouseup' after you define a PopupWindow object or
+ the autoHide() will not work correctly.
+*/
+
+// Set the position of the popup window based on the anchor
+function PopupWindow_getXYPosition(anchorname) {
+ var coordinates;
+ if (this.type == "WINDOW") {
+ coordinates = getAnchorWindowPosition(anchorname);
+ }
+ else {
+ coordinates = getAnchorPosition(anchorname);
+ }
+ this.x = coordinates.x;
+ this.y = coordinates.y;
+ }
+// Set width/height of DIV/popup window
+function PopupWindow_setSize(width,height) {
+ this.width = width;
+ this.height = height;
+ }
+// Fill the window with contents
+function PopupWindow_populate(contents) {
+ this.contents = contents;
+ this.populated = false;
+ }
+// Set the URL to go to
+function PopupWindow_setUrl(url) {
+ this.url = url;
+ }
+// Set the window popup properties
+function PopupWindow_setWindowProperties(props) {
+ this.windowProperties = props;
+ }
+// Refresh the displayed contents of the popup
+function PopupWindow_refresh() {
+ if (this.divName != null) {
+ // refresh the DIV object
+ if (this.use_gebi) {
+ document.getElementById(this.divName).innerHTML = this.contents;
+ }
+ else if (this.use_css) {
+ document.all[this.divName].innerHTML = this.contents;
+ }
+ else if (this.use_layers) {
+ var d = document.layers[this.divName];
+ d.document.open();
+ d.document.writeln(this.contents);
+ d.document.close();
+ }
+ }
+ else {
+ if (this.popupWindow != null && !this.popupWindow.closed) {
+ if (this.url!="") {
+ this.popupWindow.location.href=this.url;
+ }
+ else {
+ this.popupWindow.document.open();
+ this.popupWindow.document.writeln(this.contents);
+ this.popupWindow.document.close();
+ }
+ this.popupWindow.focus();
+ }
+ }
+ }
+// Position and show the popup, relative to an anchor object
+function PopupWindow_showPopup(anchorname) {
+ this.getXYPosition(anchorname);
+ this.x += this.offsetX;
+ this.y += this.offsetY;
+ if (!this.populated && (this.contents != "")) {
+ this.populated = true;
+ this.refresh();
+ }
+ if (this.divName != null) {
+ // Show the DIV object
+ if (this.use_gebi) {
+ document.getElementById(this.divName).style.left = this.x + "px";
+ document.getElementById(this.divName).style.top = this.y + "px";
+ document.getElementById(this.divName).style.visibility = "visible";
+ }
+ else if (this.use_css) {
+ document.all[this.divName].style.left = this.x;
+ document.all[this.divName].style.top = this.y;
+ document.all[this.divName].style.visibility = "visible";
+ }
+ else if (this.use_layers) {
+ document.layers[this.divName].left = this.x;
+ document.layers[this.divName].top = this.y;
+ document.layers[this.divName].visibility = "visible";
+ }
+ }
+ else {
+ if (this.popupWindow == null || this.popupWindow.closed) {
+ // If the popup window will go off-screen, move it so it doesn't
+ if (this.x<0) { this.x=0; }
+ if (this.y<0) { this.y=0; }
+ if (screen && screen.availHeight) {
+ if ((this.y + this.height) > screen.availHeight) {
+ this.y = screen.availHeight - this.height;
+ }
+ }
+ if (screen && screen.availWidth) {
+ if ((this.x + this.width) > screen.availWidth) {
+ this.x = screen.availWidth - this.width;
+ }
+ }
+ var avoidAboutBlank = window.opera || ( document.layers && !navigator.mimeTypes['*'] ) || navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled );
+ this.popupWindow = window.open(avoidAboutBlank?"":"about:blank","window_"+anchorname,this.windowProperties+",width="+this.width+",height="+this.height+",screenX="+this.x+",left="+this.x+",screenY="+this.y+",top="+this.y+"");
+ }
+ this.refresh();
+ }
+ }
+// Hide the popup
+function PopupWindow_hidePopup() {
+ if (this.divName != null) {
+ if (this.use_gebi) {
+ document.getElementById(this.divName).style.visibility = "hidden";
+ }
+ else if (this.use_css) {
+ document.all[this.divName].style.visibility = "hidden";
+ }
+ else if (this.use_layers) {
+ document.layers[this.divName].visibility = "hidden";
+ }
+ }
+ else {
+ if (this.popupWindow && !this.popupWindow.closed) {
+ this.popupWindow.close();
+ this.popupWindow = null;
+ }
+ }
+ }
+// Pass an event and return whether or not it was the popup DIV that was clicked
+function PopupWindow_isClicked(e) {
+ if (this.divName != null) {
+ if (this.use_layers) {
+ var clickX = e.pageX;
+ var clickY = e.pageY;
+ var t = document.layers[this.divName];
+ if ((clickX > t.left) && (clickX < t.left+t.clip.width) && (clickY > t.top) && (clickY < t.top+t.clip.height)) {
+ return true;
+ }
+ else { return false; }
+ }
+ else if (document.all) { // Need to hard-code this to trap IE for error-handling
+ var t = window.event.srcElement;
+ while (t.parentElement != null) {
+ if (t.id==this.divName) {
+ return true;
+ }
+ t = t.parentElement;
+ }
+ return false;
+ }
+ else if (this.use_gebi && e) {
+ var t = e.originalTarget;
+ while (t.parentNode != null) {
+ if (t.id==this.divName) {
+ return true;
+ }
+ t = t.parentNode;
+ }
+ return false;
+ }
+ return false;
+ }
+ return false;
+ }
+
+// Check an onMouseDown event to see if we should hide
+function PopupWindow_hideIfNotClicked(e) {
+ if (this.autoHideEnabled && !this.isClicked(e)) {
+ this.hidePopup();
+ }
+ }
+// Call this to make the DIV disable automatically when mouse is clicked outside it
+function PopupWindow_autoHide() {
+ this.autoHideEnabled = true;
+ }
+// This global function checks all PopupWindow objects onmouseup to see if they should be hidden
+function PopupWindow_hidePopupWindows(e) {
+ for (var i=0; i<popupWindowObjects.length; i++) {
+ if (popupWindowObjects[i] != null) {
+ var p = popupWindowObjects[i];
+ p.hideIfNotClicked(e);
+ }
+ }
+ }
+// Run this immediately to attach the event listener
+function PopupWindow_attachListener() {
+ if (document.layers) {
+ document.captureEvents(Event.MOUSEUP);
+ }
+ window.popupWindowOldEventListener = document.onmouseup;
+ if (window.popupWindowOldEventListener != null) {
+ document.onmouseup = new Function("window.popupWindowOldEventListener(); PopupWindow_hidePopupWindows();");
+ }
+ else {
+ document.onmouseup = PopupWindow_hidePopupWindows;
+ }
+ }
+// CONSTRUCTOR for the PopupWindow object
+// Pass it a DIV name to use a DHTML popup, otherwise will default to window popup
+function PopupWindow() {
+ if (!window.popupWindowIndex) { window.popupWindowIndex = 0; }
+ if (!window.popupWindowObjects) { window.popupWindowObjects = new Array(); }
+ if (!window.listenerAttached) {
+ window.listenerAttached = true;
+ PopupWindow_attachListener();
+ }
+ this.index = popupWindowIndex++;
+ popupWindowObjects[this.index] = this;
+ this.divName = null;
+ this.popupWindow = null;
+ this.width=0;
+ this.height=0;
+ this.populated = false;
+ this.visible = false;
+ this.autoHideEnabled = false;
+
+ this.contents = "";
+ this.url="";
+ this.windowProperties="toolbar=no,location=no,status=no,menubar=no,scrollbars=auto,resizable,alwaysRaised,dependent,titlebar=no";
+ if (arguments.length>0) {
+ this.type="DIV";
+ this.divName = arguments[0];
+ }
+ else {
+ this.type="WINDOW";
+ }
+ this.use_gebi = false;
+ this.use_css = false;
+ this.use_layers = false;
+ if (document.getElementById) { this.use_gebi = true; }
+ else if (document.all) { this.use_css = true; }
+ else if (document.layers) { this.use_layers = true; }
+ else { this.type = "WINDOW"; }
+ this.offsetX = 0;
+ this.offsetY = 0;
+ // Method mappings
+ this.getXYPosition = PopupWindow_getXYPosition;
+ this.populate = PopupWindow_populate;
+ this.setUrl = PopupWindow_setUrl;
+ this.setWindowProperties = PopupWindow_setWindowProperties;
+ this.refresh = PopupWindow_refresh;
+ this.showPopup = PopupWindow_showPopup;
+ this.hidePopup = PopupWindow_hidePopup;
+ this.setSize = PopupWindow_setSize;
+ this.isClicked = PopupWindow_isClicked;
+ this.autoHide = PopupWindow_autoHide;
+ this.hideIfNotClicked = PopupWindow_hideIfNotClicked;
+ }
+
+/* SOURCE FILE: CalendarPopup.js */
+
+// HISTORY
+// ------------------------------------------------------------------
+// Feb 7, 2005: Fixed a CSS styles to use px unit
+// March 29, 2004: Added check in select() method for the form field
+// being disabled. If it is, just return and don't do anything.
+// March 24, 2004: Fixed bug - when month name and abbreviations were
+// changed, date format still used original values.
+// January 26, 2004: Added support for drop-down month and year
+// navigation (Thanks to Chris Reid for the idea)
+// September 22, 2003: Fixed a minor problem in YEAR calendar with
+// CSS prefix.
+// August 19, 2003: Renamed the function to get styles, and made it
+// work correctly without an object reference
+// August 18, 2003: Changed showYearNavigation and
+// showYearNavigationInput to optionally take an argument of
+// true or false
+// July 31, 2003: Added text input option for year navigation.
+// Added a per-calendar CSS prefix option to optionally use
+// different styles for different calendars.
+// July 29, 2003: Fixed bug causing the Today link to be clickable
+// even though today falls in a disabled date range.
+// Changed formatting to use pure CSS, allowing greater control
+// over look-and-feel options.
+// June 11, 2003: Fixed bug causing the Today link to be unselectable
+// under certain cases when some days of week are disabled
+// March 14, 2003: Added ability to disable individual dates or date
+// ranges, display as light gray and strike-through
+// March 14, 2003: Removed dependency on graypixel.gif and instead
+/// use table border coloring
+// March 12, 2003: Modified showCalendar() function to allow optional
+// start-date parameter
+// March 11, 2003: Modified select() function to allow optional
+// start-date parameter
+/*
+DESCRIPTION: This object implements a popup calendar to allow the user to
+select a date, month, quarter, or year.
+
+COMPATABILITY: Works with Netscape 4.x, 6.x, IE 5.x on Windows. Some small
+positioning errors - usually with Window positioning - occur on the
+Macintosh platform.
+The calendar can be modified to work for any location in the world by
+changing which weekday is displayed as the first column, changing the month
+names, and changing the column headers for each day.
+
+USAGE:
+// Create a new CalendarPopup object of type WINDOW
+var cal = new CalendarPopup();
+
+// Create a new CalendarPopup object of type DIV using the DIV named 'mydiv'
+var cal = new CalendarPopup('mydiv');
+
+// Easy method to link the popup calendar with an input box.
+cal.select(inputObject, anchorname, dateFormat);
+// Same method, but passing a default date other than the field's current value
+cal.select(inputObject, anchorname, dateFormat, '01/02/2000');
+// This is an example call to the popup calendar from a link to populate an
+// input box. Note that to use this, date.js must also be included!!
+<A HREF="#" onClick="cal.select(document.forms[0].date,'anchorname','MM/dd/yyyy'); return false;">Select</A>
+
+// Set the type of date select to be used. By default it is 'date'.
+cal.setDisplayType(type);
+
+// When a date, month, quarter, or year is clicked, a function is called and
+// passed the details. You must write this function, and tell the calendar
+// popup what the function name is.
+// Function to be called for 'date' select receives y, m, d
+cal.setReturnFunction(functionname);
+// Function to be called for 'month' select receives y, m
+cal.setReturnMonthFunction(functionname);
+// Function to be called for 'quarter' select receives y, q
+cal.setReturnQuarterFunction(functionname);
+// Function to be called for 'year' select receives y
+cal.setReturnYearFunction(functionname);
+
+// Show the calendar relative to a given anchor
+cal.showCalendar(anchorname);
+
+// Hide the calendar. The calendar is set to autoHide automatically
+cal.hideCalendar();
+
+// Set the month names to be used. Default are English month names
+cal.setMonthNames("January","February","March",...);
+
+// Set the month abbreviations to be used. Default are English month abbreviations
+cal.setMonthAbbreviations("Jan","Feb","Mar",...);
+
+// Show navigation for changing by the year, not just one month at a time
+cal.showYearNavigation();
+
+// Show month and year dropdowns, for quicker selection of month of dates
+cal.showNavigationDropdowns();
+
+// Set the text to be used above each day column. The days start with
+// sunday regardless of the value of WeekStartDay
+cal.setDayHeaders("S","M","T",...);
+
+// Set the day for the first column in the calendar grid. By default this
+// is Sunday (0) but it may be changed to fit the conventions of other
+// countries.
+cal.setWeekStartDay(1); // week is Monday - Sunday
+
+// Set the weekdays which should be disabled in the 'date' select popup. You can
+// then allow someone to only select week end dates, or Tuedays, for example
+cal.setDisabledWeekDays(0,1); // To disable selecting the 1st or 2nd days of the week
+
+// Selectively disable individual days or date ranges. Disabled days will not
+// be clickable, and show as strike-through text on current browsers.
+// Date format is any format recognized by parseDate() in date.js
+// Pass a single date to disable:
+cal.addDisabledDates("2003-01-01");
+// Pass null as the first parameter to mean "anything up to and including" the
+// passed date:
+cal.addDisabledDates(null, "01/02/03");
+// Pass null as the second parameter to mean "including the passed date and
+// anything after it:
+cal.addDisabledDates("Jan 01, 2003", null);
+// Pass two dates to disable all dates inbetween and including the two
+cal.addDisabledDates("January 01, 2003", "Dec 31, 2003");
+
+// When the 'year' select is displayed, set the number of years back from the
+// current year to start listing years. Default is 2.
+// This is also used for year drop-down, to decide how many years +/- to display
+cal.setYearSelectStartOffset(2);
+
+// Text for the word "Today" appearing on the calendar
+cal.setTodayText("Today");
+
+// The calendar uses CSS classes for formatting. If you want your calendar to
+// have unique styles, you can set the prefix that will be added to all the
+// classes in the output.
+// For example, normal output may have this:
+// <SPAN CLASS="cpTodayTextDisabled">Today<SPAN>
+// But if you set the prefix like this:
+cal.setCssPrefix("Test");
+// The output will then look like:
+// <SPAN CLASS="TestcpTodayTextDisabled">Today<SPAN>
+// And you can define that style somewhere in your page.
+
+// When using Year navigation, you can make the year be an input box, so
+// the user can manually change it and jump to any year
+cal.showYearNavigationInput();
+
+// Set the calendar offset to be different than the default. By default it
+// will appear just below and to the right of the anchorname. So if you have
+// a text box where the date will go and and anchor immediately after the
+// text box, the calendar will display immediately under the text box.
+cal.offsetX = 20;
+cal.offsetY = 20;
+
+NOTES:
+1) Requires the functions in AnchorPosition.js and PopupWindow.js
+
+2) Your anchor tag MUST contain both NAME and ID attributes which are the
+ same. For example:
+ <A NAME="test" ID="test"> </A>
+
+3) There must be at least a space between <A> </A> for IE5.5 to see the
+ anchor tag correctly. Do not do <A></A> with no space.
+
+4) When a CalendarPopup object is created, a handler for 'onmouseup' is
+ attached to any event handler you may have already defined. Do NOT define
+ an event handler for 'onmouseup' after you define a CalendarPopup object
+ or the autoHide() will not work correctly.
+
+5) The calendar popup display uses style sheets to make it look nice.
+
+*/
+
+// CONSTRUCTOR for the CalendarPopup Object
+function CalendarPopup() {
+ var c;
+ if (arguments.length>0) {
+ c = new PopupWindow(arguments[0]);
+ }
+ else {
+ c = new PopupWindow();
+ c.setSize(150,175);
+ }
+ c.offsetX = -152;
+ c.offsetY = 25;
+ c.autoHide();
+ // Calendar-specific properties
+ c.monthNames = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
+ c.monthAbbreviations = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
+ c.dayHeaders = new Array("S","M","T","W","T","F","S");
+ c.returnFunction = "CP_tmpReturnFunction";
+ c.returnMonthFunction = "CP_tmpReturnMonthFunction";
+ c.returnQuarterFunction = "CP_tmpReturnQuarterFunction";
+ c.returnYearFunction = "CP_tmpReturnYearFunction";
+ c.weekStartDay = 0;
+ c.isShowYearNavigation = false;
+ c.displayType = "date";
+ c.disabledWeekDays = new Object();
+ c.disabledDatesExpression = "";
+ c.yearSelectStartOffset = 2;
+ c.currentDate = null;
+ c.todayText="Today";
+ c.cssPrefix="";
+ c.isShowNavigationDropdowns=false;
+ c.isShowYearNavigationInput=false;
+ window.CP_calendarObject = null;
+ window.CP_targetInput = null;
+ window.CP_dateFormat = "MM/dd/yyyy";
+ // Method mappings
+ c.copyMonthNamesToWindow = CP_copyMonthNamesToWindow;
+ c.setReturnFunction = CP_setReturnFunction;
+ c.setReturnMonthFunction = CP_setReturnMonthFunction;
+ c.setReturnQuarterFunction = CP_setReturnQuarterFunction;
+ c.setReturnYearFunction = CP_setReturnYearFunction;
+ c.setMonthNames = CP_setMonthNames;
+ c.setMonthAbbreviations = CP_setMonthAbbreviations;
+ c.setDayHeaders = CP_setDayHeaders;
+ c.setWeekStartDay = CP_setWeekStartDay;
+ c.setDisplayType = CP_setDisplayType;
+ c.setDisabledWeekDays = CP_setDisabledWeekDays;
+ c.addDisabledDates = CP_addDisabledDates;
+ c.setYearSelectStartOffset = CP_setYearSelectStartOffset;
+ c.setTodayText = CP_setTodayText;
+ c.showYearNavigation = CP_showYearNavigation;
+ c.showCalendar = CP_showCalendar;
+ c.hideCalendar = CP_hideCalendar;
+ c.getStyles = getCalendarStyles;
+ c.refreshCalendar = CP_refreshCalendar;
+ c.getCalendar = CP_getCalendar;
+ c.select = CP_select;
+ c.setCssPrefix = CP_setCssPrefix;
+ c.showNavigationDropdowns = CP_showNavigationDropdowns;
+ c.showYearNavigationInput = CP_showYearNavigationInput;
+ c.copyMonthNamesToWindow();
+ // Return the object
+ return c;
+ }
+function CP_copyMonthNamesToWindow() {
+ // Copy these values over to the date.js
+ if (typeof(window.MONTH_NAMES)!="undefined" && window.MONTH_NAMES!=null) {
+ window.MONTH_NAMES = new Array();
+ for (var i=0; i<this.monthNames.length; i++) {
+ window.MONTH_NAMES[window.MONTH_NAMES.length] = this.monthNames[i];
+ }
+ for (var i=0; i<this.monthAbbreviations.length; i++) {
+ window.MONTH_NAMES[window.MONTH_NAMES.length] = this.monthAbbreviations[i];
+ }
+ }
+}
+// Temporary default functions to be called when items clicked, so no error is thrown
+function CP_tmpReturnFunction(y,m,d) {
+ if (window.CP_targetInput!=null) {
+ var dt = new Date(y,m-1,d,0,0,0);
+ if (window.CP_calendarObject!=null) { window.CP_calendarObject.copyMonthNamesToWindow(); }
+ window.CP_targetInput.value = formatDate(dt,window.CP_dateFormat);
+ }
+ else {
+ alert('Use setReturnFunction() to define which function will get the clicked results!');
+ }
+ }
+function CP_tmpReturnMonthFunction(y,m) {
+ alert('Use setReturnMonthFunction() to define which function will get the clicked results!\nYou clicked: year='+y+' , month='+m);
+ }
+function CP_tmpReturnQuarterFunction(y,q) {
+ alert('Use setReturnQuarterFunction() to define which function will get the clicked results!\nYou clicked: year='+y+' , quarter='+q);
+ }
+function CP_tmpReturnYearFunction(y) {
+ alert('Use setReturnYearFunction() to define which function will get the clicked results!\nYou clicked: year='+y);
+ }
+
+// Set the name of the functions to call to get the clicked item
+function CP_setReturnFunction(name) { this.returnFunction = name; }
+function CP_setReturnMonthFunction(name) { this.returnMonthFunction = name; }
+function CP_setReturnQuarterFunction(name) { this.returnQuarterFunction = name; }
+function CP_setReturnYearFunction(name) { this.returnYearFunction = name; }
+
+// Over-ride the built-in month names
+function CP_setMonthNames() {
+ for (var i=0; i<arguments.length; i++) { this.monthNames[i] = arguments[i]; }
+ this.copyMonthNamesToWindow();
+ }
+
+// Over-ride the built-in month abbreviations
+function CP_setMonthAbbreviations() {
+ for (var i=0; i<arguments.length; i++) { this.monthAbbreviations[i] = arguments[i]; }
+ this.copyMonthNamesToWindow();
+ }
+
+// Over-ride the built-in column headers for each day
+function CP_setDayHeaders() {
+ for (var i=0; i<arguments.length; i++) { this.dayHeaders[i] = arguments[i]; }
+ }
+
+// Set the day of the week (0-7) that the calendar display starts on
+// This is for countries other than the US whose calendar displays start on Monday(1), for example
+function CP_setWeekStartDay(day) { this.weekStartDay = day; }
+
+// Show next/last year navigation links
+function CP_showYearNavigation() { this.isShowYearNavigation = (arguments.length>0)?arguments[0]:true; }
+
+// Which type of calendar to display
+function CP_setDisplayType(type) {
+ if (type!="date"&&type!="week-end"&&type!="month"&&type!="quarter"&&type!="year") { alert("Invalid display type! Must be one of: date,week-end,month,quarter,year"); return false; }
+ this.displayType=type;
+ }
+
+// How many years back to start by default for year display
+function CP_setYearSelectStartOffset(num) { this.yearSelectStartOffset=num; }
+
+// Set which weekdays should not be clickable
+function CP_setDisabledWeekDays() {
+ this.disabledWeekDays = new Object();
+ for (var i=0; i<arguments.length; i++) { this.disabledWeekDays[arguments[i]] = true; }
+ }
+
+// Disable individual dates or ranges
+// Builds an internal logical test which is run via eval() for efficiency
+function CP_addDisabledDates(start, end) {
+ if (arguments.length==1) { end=start; }
+ if (start==null && end==null) { return; }
+ if (this.disabledDatesExpression!="") { this.disabledDatesExpression+= "||"; }
+ if (start!=null) { start = parseDate(start); start=""+start.getFullYear()+LZ(start.getMonth()+1)+LZ(start.getDate());}
+ if (end!=null) { end=parseDate(end); end=""+end.getFullYear()+LZ(end.getMonth()+1)+LZ(end.getDate());}
+ if (start==null) { this.disabledDatesExpression+="(ds<="+end+")"; }
+ else if (end ==null) { this.disabledDatesExpression+="(ds>="+start+")"; }
+ else { this.disabledDatesExpression+="(ds>="+start+"&&ds<="+end+")"; }
+ }
+
+// Set the text to use for the "Today" link
+function CP_setTodayText(text) {
+ this.todayText = text;
+ }
+
+// Set the prefix to be added to all CSS classes when writing output
+function CP_setCssPrefix(val) {
+ this.cssPrefix = val;
+ }
+
+// Show the navigation as an dropdowns that can be manually changed
+function CP_showNavigationDropdowns() { this.isShowNavigationDropdowns = (arguments.length>0)?arguments[0]:true; }
+
+// Show the year navigation as an input box that can be manually changed
+function CP_showYearNavigationInput() { this.isShowYearNavigationInput = (arguments.length>0)?arguments[0]:true; }
+
+// Hide a calendar object
+function CP_hideCalendar() {
+ if (arguments.length > 0) { window.popupWindowObjects[arguments[0]].hidePopup(); }
+ else { this.hidePopup(); }
+ }
+
+// Refresh the contents of the calendar display
+function CP_refreshCalendar(index) {
+ var calObject = window.popupWindowObjects[index];
+ if (arguments.length>1) {
+ calObject.populate(calObject.getCalendar(arguments[1],arguments[2],arguments[3],arguments[4],arguments[5]));
+ }
+ else {
+ calObject.populate(calObject.getCalendar());
+ }
+ calObject.refresh();
+ }
+
+// Populate the calendar and display it
+function CP_showCalendar(anchorname) {
+ if (arguments.length>1) {
+ if (arguments[1]==null||arguments[1]=="") {
+ this.currentDate=new Date();
+ }
+ else {
+ this.currentDate=new Date(parseDate(arguments[1]));
+ }
+ }
+ this.populate(this.getCalendar());
+ this.showPopup(anchorname);
+ }
+
+// Simple method to interface popup calendar with a text-entry box
+function CP_select(inputobj, linkname, format) {
+ var selectedDate=(arguments.length>3)?arguments[3]:null;
+ if (!window.getDateFromFormat) {
+ alert("calendar.select: To use this method you must also include 'date.js' for date formatting");
+ return;
+ }
+ if (this.displayType!="date"&&this.displayType!="week-end") {
+ alert("calendar.select: This function can only be used with displayType 'date' or 'week-end'");
+ return;
+ }
+ if (inputobj.type!="text" && inputobj.type!="hidden" && inputobj.type!="textarea") {
+ alert("calendar.select: Input object passed is not a valid form input object");
+ window.CP_targetInput=null;
+ return;
+ }
+ if (inputobj.disabled) { return; } // Can't use calendar input on disabled form input!
+ window.CP_targetInput = inputobj;
+ window.CP_calendarObject = this;
+ this.currentDate=null;
+ var time=0;
+ if (selectedDate!=null) {
+ time = getDateFromFormat(selectedDate,format)
+ }
+ else if (inputobj.value!="") {
+ time = getDateFromFormat(inputobj.value,format);
+ }
+ if (selectedDate!=null || inputobj.value!="") {
+ if (time==0) { this.currentDate=null; }
+ else { this.currentDate=new Date(time); }
+ }
+ window.CP_dateFormat = format;
+ this.showCalendar(linkname);
+ }
+
+// Get style block needed to display the calendar correctly
+function getCalendarStyles() {
+ var result = "";
+ var p = "";
+ if (this!=null && typeof(this.cssPrefix)!="undefined" && this.cssPrefix!=null && this.cssPrefix!="") { p=this.cssPrefix; }
+ result += "<STYLE>\n";
+ result += "."+p+"cpYearNavigation,."+p+"cpMonthNavigation { background-color:#C0C0C0; text-align:center; vertical-align:center; text-decoration:none; color:#000000; font-weight:bold; }\n";
+ result += "."+p+"cpDayColumnHeader, ."+p+"cpYearNavigation,."+p+"cpMonthNavigation,."+p+"cpCurrentMonthDate,."+p+"cpCurrentMonthDateDisabled,."+p+"cpOtherMonthDate,."+p+"cpOtherMonthDateDisabled,."+p+"cpCurrentDate,."+p+"cpCurrentDateDisabled,."+p+"cpTodayText,."+p+"cpTodayTextDisabled,."+p+"cpText { font-family:arial; font-size:8pt; }\n";
+ result += "TD."+p+"cpDayColumnHeader { text-align:right; border:solid thin #C0C0C0;border-width:0px 0px 1px 0px; }\n";
+ result += "."+p+"cpCurrentMonthDate, ."+p+"cpOtherMonthDate, ."+p+"cpCurrentDate { text-align:right; text-decoration:none; }\n";
+ result += "."+p+"cpCurrentMonthDateDisabled, ."+p+"cpOtherMonthDateDisabled, ."+p+"cpCurrentDateDisabled { color:#D0D0D0; text-align:right; text-decoration:line-through; }\n";
+ result += "."+p+"cpCurrentMonthDate, .cpCurrentDate { color:#000000; }\n";
+ result += "."+p+"cpOtherMonthDate { color:#808080; }\n";
+ result += "TD."+p+"cpCurrentDate { color:white; background-color: #C0C0C0; border-width:1px; border:solid thin #800000; }\n";
+ result += "TD."+p+"cpCurrentDateDisabled { border-width:1px; border:solid thin #FFAAAA; }\n";
+ result += "TD."+p+"cpTodayText, TD."+p+"cpTodayTextDisabled { border:solid thin #C0C0C0; border-width:1px 0px 0px 0px;}\n";
+ result += "A."+p+"cpTodayText, SPAN."+p+"cpTodayTextDisabled { height:20px; }\n";
+ result += "A."+p+"cpTodayText { color:black; }\n";
+ result += "."+p+"cpTodayTextDisabled { color:#D0D0D0; }\n";
+ result += "."+p+"cpBorder { border:solid thin #808080; }\n";
+ result += "</STYLE>\n";
+ return result;
+ }
+
+// Return a string containing all the calendar code to be displayed
+function CP_getCalendar() {
+ var now = new Date();
+ // Reference to window
+ if (this.type == "WINDOW") { var windowref = "window.opener."; }
+ else { var windowref = ""; }
+ var result = "";
+ // If POPUP, write entire HTML document
+ if (this.type == "WINDOW") {
+ result += "<HTML><HEAD><TITLE>Calendar</TITLE>"+this.getStyles()+"</HEAD><BODY MARGINWIDTH=0 MARGINHEIGHT=0 TOPMARGIN=0 RIGHTMARGIN=0 LEFTMARGIN=0>\n";
+ result += '<CENTER><TABLE WIDTH=100% BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>\n';
+ }
+ else {
+ result += '<TABLE CLASS="'+this.cssPrefix+'cpBorder" WIDTH=144 BORDER=1 BORDERWIDTH=1 CELLSPACING=0 CELLPADDING=1>\n';
+ result += '<TR><TD ALIGN=CENTER>\n';
+ result += '<CENTER>\n';
+ }
+ // Code for DATE display (default)
+ // -------------------------------
+ if (this.displayType=="date" || this.displayType=="week-end") {
+ if (this.currentDate==null) { this.currentDate = now; }
+ if (arguments.length > 0) { var month = arguments[0]; }
+ else { var month = this.currentDate.getMonth()+1; }
+ if (arguments.length > 1 && arguments[1]>0 && arguments[1]-0==arguments[1]) { var year = arguments[1]; }
+ else { var year = this.currentDate.getFullYear(); }
+ var daysinmonth= new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
+ if ( ( (year%4 == 0)&&(year%100 != 0) ) || (year%400 == 0) ) {
+ daysinmonth[2] = 29;
+ }
+ var current_month = new Date(year,month-1,1);
+ var display_year = year;
+ var display_month = month;
+ var display_date = 1;
+ var weekday= current_month.getDay();
+ var offset = 0;
+
+ offset = (weekday >= this.weekStartDay) ? weekday-this.weekStartDay : 7-this.weekStartDay+weekday ;
+ if (offset > 0) {
+ display_month--;
+ if (display_month < 1) { display_month = 12; display_year--; }
+ display_date = daysinmonth[display_month]-offset+1;
+ }
+ var next_month = month+1;
+ var next_month_year = year;
+ if (next_month > 12) { next_month=1; next_month_year++; }
+ var last_month = month-1;
+ var last_month_year = year;
+ if (last_month < 1) { last_month=12; last_month_year--; }
+ var date_class;
+ if (this.type!="WINDOW") {
+ result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";
+ }
+ result += '<TR>\n';
+ var refresh = windowref+'CP_refreshCalendar';
+ var refreshLink = 'javascript:' + refresh;
+ if (this.isShowNavigationDropdowns) {
+ result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="78" COLSPAN="3"><select CLASS="'+this.cssPrefix+'cpMonthNavigation" name="cpMonth" onChange="'+refresh+'('+this.index+',this.options[this.selectedIndex].value-0,'+(year-0)+');">';
+ for( var monthCounter=1; monthCounter<=12; monthCounter++ ) {
+ var selected = (monthCounter==month) ? 'SELECTED' : '';
+ result += '<option value="'+monthCounter+'" '+selected+'>'+this.monthNames[monthCounter-1]+'</option>';
+ }
+ result += '</select></TD>';
+ result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10">&nbsp;</TD>';
+
+ result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="56" COLSPAN="3"><select CLASS="'+this.cssPrefix+'cpYearNavigation" name="cpYear" onChange="'+refresh+'('+this.index+','+month+',this.options[this.selectedIndex].value-0);">';
+ for( var yearCounter=year-this.yearSelectStartOffset; yearCounter<=year+this.yearSelectStartOffset; yearCounter++ ) {
+ var selected = (yearCounter==year) ? 'SELECTED' : '';
+ result += '<option value="'+yearCounter+'" '+selected+'>'+yearCounter+'</option>';
+ }
+ result += '</select></TD>';
+ }
+ else {
+ if (this.isShowYearNavigation) {
+ result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refreshLink+'('+this.index+','+last_month+','+last_month_year+');">&lt;</A></TD>';
+ result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="58"><SPAN CLASS="'+this.cssPrefix+'cpMonthNavigation">'+this.monthNames[month-1]+'</SPAN></TD>';
+ result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refreshLink+'('+this.index+','+next_month+','+next_month_year+');">&gt;</A></TD>';
+ result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="10">&nbsp;</TD>';
+
+ result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="'+refreshLink+'('+this.index+','+month+','+(year-1)+');">&lt;</A></TD>';
+ if (this.isShowYearNavigationInput) {
+ result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="36"><INPUT NAME="cpYear" CLASS="'+this.cssPrefix+'cpYearNavigation" SIZE="4" MAXLENGTH="4" VALUE="'+year+'" onBlur="'+refresh+'('+this.index+','+month+',this.value-0);"></TD>';
+ }
+ else {
+ result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="36"><SPAN CLASS="'+this.cssPrefix+'cpYearNavigation">'+year+'</SPAN></TD>';
+ }
+ result += '<TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="10"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="'+refreshLink+'('+this.index+','+month+','+(year+1)+');">&gt;</A></TD>';
+ }
+ else {
+ result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refreshLink+'('+this.index+','+last_month+','+last_month_year+');">&lt;&lt;</A></TD>\n';
+ result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="100"><SPAN CLASS="'+this.cssPrefix+'cpMonthNavigation">'+this.monthNames[month-1]+' '+year+'</SPAN></TD>\n';
+ result += '<TD CLASS="'+this.cssPrefix+'cpMonthNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpMonthNavigation" HREF="'+refreshLink+'('+this.index+','+next_month+','+next_month_year+');">&gt;&gt;</A></TD>\n';
+ }
+ }
+ result += '</TR></TABLE>\n';
+ result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=0 CELLPADDING=1 ALIGN=CENTER>\n';
+ result += '<TR>\n';
+ for (var j=0; j<7; j++) {
+
+ result += '<TD CLASS="'+this.cssPrefix+'cpDayColumnHeader" WIDTH="14%"><SPAN CLASS="'+this.cssPrefix+'cpDayColumnHeader">'+this.dayHeaders[(this.weekStartDay+j)%7]+'</TD>\n';
+ }
+ result += '</TR>\n';
+ for (var row=1; row<=6; row++) {
+ result += '<TR>\n';
+ for (var col=1; col<=7; col++) {
+ var disabled=false;
+ if (this.disabledDatesExpression!="") {
+ var ds=""+display_year+LZ(display_month)+LZ(display_date);
+ eval("disabled=("+this.disabledDatesExpression+")");
+ }
+ var dateClass = "";
+ if ((display_month == this.currentDate.getMonth()+1) && (display_date==this.currentDate.getDate()) && (display_year==this.currentDate.getFullYear())) {
+ dateClass = "cpCurrentDate";
+ }
+ else if (display_month == month) {
+ dateClass = "cpCurrentMonthDate";
+ }
+ else {
+ dateClass = "cpOtherMonthDate";
+ }
+ if (disabled || this.disabledWeekDays[col-1]) {
+ result += ' <TD CLASS="'+this.cssPrefix+dateClass+'"><SPAN CLASS="'+this.cssPrefix+dateClass+'Disabled">'+display_date+'</SPAN></TD>\n';
+ }
+ else {
+ var selected_date = display_date;
+ var selected_month = display_month;
+ var selected_year = display_year;
+ if (this.displayType=="week-end") {
+ var d = new Date(selected_year,selected_month-1,selected_date,0,0,0,0);
+ d.setDate(d.getDate() + (7-col));
+ selected_year = d.getYear();
+ if (selected_year < 1000) { selected_year += 1900; }
+ selected_month = d.getMonth()+1;
+ selected_date = d.getDate();
+ }
+ result += ' <TD CLASS="'+this.cssPrefix+dateClass+'"><A HREF="javascript:'+windowref+this.returnFunction+'('+selected_year+','+selected_month+','+selected_date+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+this.cssPrefix+dateClass+'">'+display_date+'</A></TD>\n';
+ }
+ display_date++;
+ if (display_date > daysinmonth[display_month]) {
+ display_date=1;
+ display_month++;
+ }
+ if (display_month > 12) {
+ display_month=1;
+ display_year++;
+ }
+ }
+ result += '</TR>';
+ }
+ var current_weekday = now.getDay() - this.weekStartDay;
+ if (current_weekday < 0) {
+ current_weekday += 7;
+ }
+ result += '<TR>\n';
+ result += ' <TD COLSPAN=7 ALIGN=CENTER CLASS="'+this.cssPrefix+'cpTodayText">\n';
+ if (this.disabledDatesExpression!="") {
+ var ds=""+now.getFullYear()+LZ(now.getMonth()+1)+LZ(now.getDate());
+ eval("disabled=("+this.disabledDatesExpression+")");
+ }
+ if (disabled || this.disabledWeekDays[current_weekday+1]) {
+ result += ' <SPAN CLASS="'+this.cssPrefix+'cpTodayTextDisabled">'+this.todayText+'</SPAN>\n';
+ }
+ else {
+ result += ' <A CLASS="'+this.cssPrefix+'cpTodayText" HREF="javascript:'+windowref+this.returnFunction+'(\''+now.getFullYear()+'\',\''+(now.getMonth()+1)+'\',\''+now.getDate()+'\');'+windowref+'CP_hideCalendar(\''+this.index+'\');">'+this.todayText+'</A>\n';
+ }
+ result += ' <BR>\n';
+ result += ' </TD></TR></TABLE></CENTER></TD></TR></TABLE>\n';
+ }
+
+ // Code common for MONTH, QUARTER, YEAR
+ // ------------------------------------
+ if (this.displayType=="month" || this.displayType=="quarter" || this.displayType=="year") {
+ if (arguments.length > 0) { var year = arguments[0]; }
+ else {
+ if (this.displayType=="year") { var year = now.getFullYear()-this.yearSelectStartOffset; }
+ else { var year = now.getFullYear(); }
+ }
+ if (this.displayType!="year" && this.isShowYearNavigation) {
+ result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";
+ result += '<TR>\n';
+ result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year-1)+');">&lt;&lt;</A></TD>\n';
+ result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="100">'+year+'</TD>\n';
+ result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="22"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year+1)+');">&gt;&gt;</A></TD>\n';
+ result += '</TR></TABLE>\n';
+ }
+ }
+
+ // Code for MONTH display
+ // ----------------------
+ if (this.displayType=="month") {
+ // If POPUP, write entire HTML document
+ result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=1 CELLPADDING=0 ALIGN=CENTER>\n';
+ for (var i=0; i<4; i++) {
+ result += '<TR>';
+ for (var j=0; j<3; j++) {
+ var monthindex = ((i*3)+j);
+ result += '<TD WIDTH=33% ALIGN=CENTER><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnMonthFunction+'('+year+','+(monthindex+1)+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">'+this.monthAbbreviations[monthindex]+'</A></TD>';
+ }
+ result += '</TR>';
+ }
+ result += '</TABLE></CENTER></TD></TR></TABLE>\n';
+ }
+
+ // Code for QUARTER display
+ // ------------------------
+ if (this.displayType=="quarter") {
+ result += '<BR><TABLE WIDTH=120 BORDER=1 CELLSPACING=0 CELLPADDING=0 ALIGN=CENTER>\n';
+ for (var i=0; i<2; i++) {
+ result += '<TR>';
+ for (var j=0; j<2; j++) {
+ var quarter = ((i*2)+j+1);
+ result += '<TD WIDTH=50% ALIGN=CENTER><BR><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnQuarterFunction+'('+year+','+quarter+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">Q'+quarter+'</A><BR><BR></TD>';
+ }
+ result += '</TR>';
+ }
+ result += '</TABLE></CENTER></TD></TR></TABLE>\n';
+ }
+
+ // Code for YEAR display
+ // ---------------------
+ if (this.displayType=="year") {
+ var yearColumnSize = 4;
+ result += "<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>";
+ result += '<TR>\n';
+ result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="50%"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year-(yearColumnSize*2))+');">&lt;&lt;</A></TD>\n';
+ result += ' <TD CLASS="'+this.cssPrefix+'cpYearNavigation" WIDTH="50%"><A CLASS="'+this.cssPrefix+'cpYearNavigation" HREF="javascript:'+windowref+'CP_refreshCalendar('+this.index+','+(year+(yearColumnSize*2))+');">&gt;&gt;</A></TD>\n';
+ result += '</TR></TABLE>\n';
+ result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=1 CELLPADDING=0 ALIGN=CENTER>\n';
+ for (var i=0; i<yearColumnSize; i++) {
+ for (var j=0; j<2; j++) {
+ var currentyear = year+(j*yearColumnSize)+i;
+ result += '<TD WIDTH=50% ALIGN=CENTER><A CLASS="'+this.cssPrefix+'cpText" HREF="javascript:'+windowref+this.returnYearFunction+'('+currentyear+');'+windowref+'CP_hideCalendar(\''+this.index+'\');" CLASS="'+date_class+'">'+currentyear+'</A></TD>';
+ }
+ result += '</TR>';
+ }
+ result += '</TABLE></CENTER></TD></TR></TABLE>\n';
+ }
+ // Common
+ if (this.type == "WINDOW") {
+ result += "</BODY></HTML>\n";
+ }
+ return result;
+ }
diff --git a/vendors/jquery/fancybox/blank.gif b/vendors/jquery/fancybox/blank.gif
new file mode 100644
index 000000000..35d42e808
--- /dev/null
+++ b/vendors/jquery/fancybox/blank.gif
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_close.png b/vendors/jquery/fancybox/fancy_close.png
new file mode 100644
index 000000000..07035307a
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_close.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_loading.png b/vendors/jquery/fancybox/fancy_loading.png
new file mode 100644
index 000000000..250301796
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_loading.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_nav_left.png b/vendors/jquery/fancybox/fancy_nav_left.png
new file mode 100644
index 000000000..ebaa6a4fd
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_nav_left.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_nav_right.png b/vendors/jquery/fancybox/fancy_nav_right.png
new file mode 100644
index 000000000..873294e96
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_nav_right.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_shadow_e.png b/vendors/jquery/fancybox/fancy_shadow_e.png
new file mode 100644
index 000000000..2eda08936
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_shadow_e.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_shadow_n.png b/vendors/jquery/fancybox/fancy_shadow_n.png
new file mode 100644
index 000000000..69aa10e23
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_shadow_n.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_shadow_ne.png b/vendors/jquery/fancybox/fancy_shadow_ne.png
new file mode 100644
index 000000000..79f6980a3
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_shadow_ne.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_shadow_nw.png b/vendors/jquery/fancybox/fancy_shadow_nw.png
new file mode 100644
index 000000000..7182cd938
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_shadow_nw.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_shadow_s.png b/vendors/jquery/fancybox/fancy_shadow_s.png
new file mode 100644
index 000000000..d8858bfb7
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_shadow_s.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_shadow_se.png b/vendors/jquery/fancybox/fancy_shadow_se.png
new file mode 100644
index 000000000..541e3ffd3
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_shadow_se.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_shadow_sw.png b/vendors/jquery/fancybox/fancy_shadow_sw.png
new file mode 100644
index 000000000..b451689fa
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_shadow_sw.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_shadow_w.png b/vendors/jquery/fancybox/fancy_shadow_w.png
new file mode 100644
index 000000000..8a4e4a887
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_shadow_w.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_title_left.png b/vendors/jquery/fancybox/fancy_title_left.png
new file mode 100644
index 000000000..6049223d1
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_title_left.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_title_main.png b/vendors/jquery/fancybox/fancy_title_main.png
new file mode 100644
index 000000000..8044271f2
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_title_main.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_title_over.png b/vendors/jquery/fancybox/fancy_title_over.png
new file mode 100644
index 000000000..d9f458f4b
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_title_over.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancy_title_right.png b/vendors/jquery/fancybox/fancy_title_right.png
new file mode 100644
index 000000000..e36d9db2a
--- /dev/null
+++ b/vendors/jquery/fancybox/fancy_title_right.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancybox-x.png b/vendors/jquery/fancybox/fancybox-x.png
new file mode 100644
index 000000000..c2130f869
--- /dev/null
+++ b/vendors/jquery/fancybox/fancybox-x.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancybox-y.png b/vendors/jquery/fancybox/fancybox-y.png
new file mode 100644
index 000000000..7ef399b99
--- /dev/null
+++ b/vendors/jquery/fancybox/fancybox-y.png
Binary files differ
diff --git a/vendors/jquery/fancybox/fancybox.png b/vendors/jquery/fancybox/fancybox.png
new file mode 100644
index 000000000..65e14f68f
--- /dev/null
+++ b/vendors/jquery/fancybox/fancybox.png
Binary files differ
diff --git a/vendors/jquery/fancybox/jquery.easing-1.3.pack.js b/vendors/jquery/fancybox/jquery.easing-1.3.pack.js
new file mode 100644
index 000000000..9028179e7
--- /dev/null
+++ b/vendors/jquery/fancybox/jquery.easing-1.3.pack.js
@@ -0,0 +1,72 @@
+/*
+ * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
+ *
+ * Uses the built in easing capabilities added In jQuery 1.1
+ * to offer multiple easing options
+ *
+ * TERMS OF USE - jQuery Easing
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright © 2008 George McGinley Smith
+ * 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 author nor the names of 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.
+ *
+*/
+
+// t: current time, b: begInnIng value, c: change In value, d: duration
+eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t<d/2)6 h.i.A(x,t*2,0,c,d)*.5+b;6 h.i.v(x,t*2-d,0,c,d)*.5+c*.5+b}});',62,74,'||||||return||Math|function|||||if|var|PI|jQuery|easing|pow|75|70158|else|sin|sqrt||5625|asin|||undefined|easeOutBounce|abs||def|swing|easeInBounce|525|cos|easeOutQuad|easeOutBack|easeInBack|easeInSine|easeOutElastic|easeInOutQuint|easeOutQuint|easeInQuint|easeInOutQuart|easeOutQuart|easeInQuart|extend|easeInElastic|easeInOutCirc|easeInOutCubic|easeOutCirc|easeInOutElastic|easeOutCubic|easeInCirc|easeInOutExpo|easeInCubic|easeOutExpo|easeInExpo||9375|easeInOutSine|easeInOutQuad|25|easeOutSine|easeInOutBack|easeInQuad|625|984375|jswing|easeInOutBounce'.split('|'),0,{}))
+
+/*
+ *
+ * TERMS OF USE - EASING EQUATIONS
+ *
+ * Open source under the BSD License.
+ *
+ * Copyright © 2001 Robert Penner
+ * 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 author nor the names of 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.
+ *
+ */
diff --git a/vendors/jquery/fancybox/jquery.fancybox-1.3.4.css b/vendors/jquery/fancybox/jquery.fancybox-1.3.4.css
new file mode 100644
index 000000000..6f53d8f4a
--- /dev/null
+++ b/vendors/jquery/fancybox/jquery.fancybox-1.3.4.css
@@ -0,0 +1,359 @@
+/*
+ * FancyBox - jQuery Plugin
+ * Simple and fancy lightbox alternative
+ *
+ * Examples and documentation at: http://fancybox.net
+ *
+ * Copyright (c) 2008 - 2010 Janis Skarnelis
+ * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
+ *
+ * Version: 1.3.4 (11/11/2010)
+ * Requires: jQuery v1.3+
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+#fancybox-loading {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 40px;
+ height: 40px;
+ margin-top: -20px;
+ margin-left: -20px;
+ cursor: pointer;
+ overflow: hidden;
+ z-index: 1104;
+ display: none;
+}
+
+#fancybox-loading div {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 40px;
+ height: 480px;
+ background-image: url('fancybox.png');
+}
+
+#fancybox-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ z-index: 1100;
+ display: none;
+}
+
+#fancybox-tmp {
+ padding: 0;
+ margin: 0;
+ border: 0;
+ overflow: auto;
+ display: none;
+}
+
+#fancybox-wrap {
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: 20px;
+ z-index: 1101;
+ outline: none;
+ display: none;
+}
+
+#fancybox-outer {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ background: #fff;
+}
+
+#fancybox-content {
+ width: 0;
+ height: 0;
+ padding: 0;
+ outline: none;
+ position: relative;
+ overflow: hidden;
+ z-index: 1102;
+ border: 0px solid #fff;
+}
+
+#fancybox-hide-sel-frame {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: transparent;
+ z-index: 1101;
+}
+
+#fancybox-close {
+ position: absolute;
+ top: -15px;
+ right: -15px;
+ width: 30px;
+ height: 30px;
+ background: transparent url('fancybox.png') -40px 0px;
+ cursor: pointer;
+ z-index: 1103;
+ display: none;
+}
+
+#fancybox-error {
+ color: #444;
+ font: normal 12px/20px Arial;
+ padding: 14px;
+ margin: 0;
+}
+
+#fancybox-img {
+ width: 100%;
+ height: 100%;
+ padding: 0;
+ margin: 0;
+ border: none;
+ outline: none;
+ line-height: 0;
+ vertical-align: top;
+}
+
+#fancybox-frame {
+ width: 100%;
+ height: 100%;
+ border: none;
+ display: block;
+}
+
+#fancybox-left, #fancybox-right {
+ position: absolute;
+ bottom: 0px;
+ height: 100%;
+ width: 35%;
+ cursor: pointer;
+ outline: none;
+ background: transparent url('blank.gif');
+ z-index: 1102;
+ display: none;
+}
+
+#fancybox-left {
+ left: 0px;
+}
+
+#fancybox-right {
+ right: 0px;
+}
+
+#fancybox-left-ico, #fancybox-right-ico {
+ position: absolute;
+ top: 50%;
+ left: -9999px;
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ cursor: pointer;
+ z-index: 1102;
+ display: block;
+}
+
+#fancybox-left-ico {
+ background-image: url('fancybox.png');
+ background-position: -40px -30px;
+}
+
+#fancybox-right-ico {
+ background-image: url('fancybox.png');
+ background-position: -40px -60px;
+}
+
+#fancybox-left:hover, #fancybox-right:hover {
+ visibility: visible; /* IE6 */
+}
+
+#fancybox-left:hover span {
+ left: 20px;
+}
+
+#fancybox-right:hover span {
+ left: auto;
+ right: 20px;
+}
+
+.fancybox-bg {
+ position: absolute;
+ padding: 0;
+ margin: 0;
+ border: 0;
+ width: 20px;
+ height: 20px;
+ z-index: 1001;
+}
+
+#fancybox-bg-n {
+ top: -20px;
+ left: 0;
+ width: 100%;
+ background-image: url('fancybox-x.png');
+}
+
+#fancybox-bg-ne {
+ top: -20px;
+ right: -20px;
+ background-image: url('fancybox.png');
+ background-position: -40px -162px;
+}
+
+#fancybox-bg-e {
+ top: 0;
+ right: -20px;
+ height: 100%;
+ background-image: url('fancybox-y.png');
+ background-position: -20px 0px;
+}
+
+#fancybox-bg-se {
+ bottom: -20px;
+ right: -20px;
+ background-image: url('fancybox.png');
+ background-position: -40px -182px;
+}
+
+#fancybox-bg-s {
+ bottom: -20px;
+ left: 0;
+ width: 100%;
+ background-image: url('fancybox-x.png');
+ background-position: 0px -20px;
+}
+
+#fancybox-bg-sw {
+ bottom: -20px;
+ left: -20px;
+ background-image: url('fancybox.png');
+ background-position: -40px -142px;
+}
+
+#fancybox-bg-w {
+ top: 0;
+ left: -20px;
+ height: 100%;
+ background-image: url('fancybox-y.png');
+}
+
+#fancybox-bg-nw {
+ top: -20px;
+ left: -20px;
+ background-image: url('fancybox.png');
+ background-position: -40px -122px;
+}
+
+#fancybox-title {
+ font-family: Helvetica;
+ font-size: 12px;
+ z-index: 1102;
+}
+
+.fancybox-title-inside {
+ padding-bottom: 10px;
+ text-align: center;
+ color: #333;
+ background: #fff;
+ position: relative;
+}
+
+.fancybox-title-outside {
+ padding-top: 10px;
+ color: #fff;
+}
+
+.fancybox-title-over {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ color: #FFF;
+ text-align: left;
+}
+
+#fancybox-title-over {
+ padding: 10px;
+ background-image: url('fancy_title_over.png');
+ display: block;
+}
+
+.fancybox-title-float {
+ position: absolute;
+ left: 0;
+ bottom: -20px;
+ height: 32px;
+}
+
+#fancybox-title-float-wrap {
+ border: none;
+ border-collapse: collapse;
+ width: auto;
+}
+
+#fancybox-title-float-wrap td {
+ border: none;
+ white-space: nowrap;
+}
+
+#fancybox-title-float-left {
+ padding: 0 0 0 15px;
+ background: url('fancybox.png') -40px -90px no-repeat;
+}
+
+#fancybox-title-float-main {
+ color: #FFF;
+ line-height: 29px;
+ font-weight: bold;
+ padding: 0 0 3px 0;
+ background: url('fancybox-x.png') 0px -40px;
+}
+
+#fancybox-title-float-right {
+ padding: 0 0 0 15px;
+ background: url('fancybox.png') -55px -90px no-repeat;
+}
+
+/* IE6 */
+
+.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
+.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame {
+ height: expression(this.parentNode.clientHeight + "px");
+}
+
+#fancybox-loading.fancybox-ie6 {
+ position: absolute; margin-top: 0;
+ top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px');
+}
+
+#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); }
+
+/* IE6, IE7, IE8 */
+
+.fancybox-ie .fancybox-bg { background: transparent !important; }
+
+.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); } \ No newline at end of file
diff --git a/vendors/jquery/fancybox/jquery.fancybox-1.3.4.js b/vendors/jquery/fancybox/jquery.fancybox-1.3.4.js
new file mode 100644
index 000000000..be7727537
--- /dev/null
+++ b/vendors/jquery/fancybox/jquery.fancybox-1.3.4.js
@@ -0,0 +1,1156 @@
+/*
+ * FancyBox - jQuery Plugin
+ * Simple and fancy lightbox alternative
+ *
+ * Examples and documentation at: http://fancybox.net
+ *
+ * Copyright (c) 2008 - 2010 Janis Skarnelis
+ * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
+ *
+ * Version: 1.3.4 (11/11/2010)
+ * Requires: jQuery v1.3+
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+;(function($) {
+ var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right,
+
+ selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [],
+
+ ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i,
+
+ loadingTimer, loadingFrame = 1,
+
+ titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('<div/>')[0], { prop: 0 }),
+
+ isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,
+
+ /*
+ * Private methods
+ */
+
+ _abort = function() {
+ loading.hide();
+
+ imgPreloader.onerror = imgPreloader.onload = null;
+
+ if (ajaxLoader) {
+ ajaxLoader.abort();
+ }
+
+ tmp.empty();
+ },
+
+ _error = function() {
+ if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) {
+ loading.hide();
+ busy = false;
+ return;
+ }
+
+ selectedOpts.titleShow = false;
+
+ selectedOpts.width = 'auto';
+ selectedOpts.height = 'auto';
+
+ tmp.html( '<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>' );
+
+ _process_inline();
+ },
+
+ _start = function() {
+ var obj = selectedArray[ selectedIndex ],
+ href,
+ type,
+ title,
+ str,
+ emb,
+ ret;
+
+ _abort();
+
+ selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox')));
+
+ ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts);
+
+ if (ret === false) {
+ busy = false;
+ return;
+ } else if (typeof ret == 'object') {
+ selectedOpts = $.extend(selectedOpts, ret);
+ }
+
+ title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || '';
+
+ if (obj.nodeName && !selectedOpts.orig) {
+ selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj);
+ }
+
+ if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) {
+ title = selectedOpts.orig.attr('alt');
+ }
+
+ href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null;
+
+ if ((/^(?:javascript)/i).test(href) || href == '#') {
+ href = null;
+ }
+
+ if (selectedOpts.type) {
+ type = selectedOpts.type;
+
+ if (!href) {
+ href = selectedOpts.content;
+ }
+
+ } else if (selectedOpts.content) {
+ type = 'html';
+
+ } else if (href) {
+ if (href.match(imgRegExp)) {
+ type = 'image';
+
+ } else if (href.match(swfRegExp)) {
+ type = 'swf';
+
+ } else if ($(obj).hasClass("iframe")) {
+ type = 'iframe';
+
+ } else if (href.indexOf("#") === 0) {
+ type = 'inline';
+
+ } else {
+ type = 'ajax';
+ }
+ }
+
+ if (!type) {
+ _error();
+ return;
+ }
+
+ if (type == 'inline') {
+ obj = href.substr(href.indexOf("#"));
+ type = $(obj).length > 0 ? 'inline' : 'ajax';
+ }
+
+ selectedOpts.type = type;
+ selectedOpts.href = href;
+ selectedOpts.title = title;
+
+ if (selectedOpts.autoDimensions) {
+ if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') {
+ selectedOpts.width = 'auto';
+ selectedOpts.height = 'auto';
+ } else {
+ selectedOpts.autoDimensions = false;
+ }
+ }
+
+ if (selectedOpts.modal) {
+ selectedOpts.overlayShow = true;
+ selectedOpts.hideOnOverlayClick = false;
+ selectedOpts.hideOnContentClick = false;
+ selectedOpts.enableEscapeButton = false;
+ selectedOpts.showCloseButton = false;
+ }
+
+ selectedOpts.padding = parseInt(selectedOpts.padding, 10);
+ selectedOpts.margin = parseInt(selectedOpts.margin, 10);
+
+ tmp.css('padding', (selectedOpts.padding + selectedOpts.margin));
+
+ $('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() {
+ $(this).replaceWith(content.children());
+ });
+
+ switch (type) {
+ case 'html' :
+ tmp.html( selectedOpts.content );
+ _process_inline();
+ break;
+
+ case 'inline' :
+ if ( $(obj).parent().is('#fancybox-content') === true) {
+ busy = false;
+ return;
+ }
+
+ $('<div class="fancybox-inline-tmp" />')
+ .hide()
+ .insertBefore( $(obj) )
+ .bind('fancybox-cleanup', function() {
+ $(this).replaceWith(content.children());
+ }).bind('fancybox-cancel', function() {
+ $(this).replaceWith(tmp.children());
+ });
+
+ $(obj).appendTo(tmp);
+
+ _process_inline();
+ break;
+
+ case 'image':
+ busy = false;
+
+ $.fancybox.showActivity();
+
+ imgPreloader = new Image();
+
+ imgPreloader.onerror = function() {
+ _error();
+ };
+
+ imgPreloader.onload = function() {
+ busy = true;
+
+ imgPreloader.onerror = imgPreloader.onload = null;
+
+ _process_image();
+ };
+
+ imgPreloader.src = href;
+ break;
+
+ case 'swf':
+ selectedOpts.scrolling = 'no';
+
+ str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"><param name="movie" value="' + href + '"></param>';
+ emb = '';
+
+ $.each(selectedOpts.swf, function(name, val) {
+ str += '<param name="' + name + '" value="' + val + '"></param>';
+ emb += ' ' + name + '="' + val + '"';
+ });
+
+ str += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"' + emb + '></embed></object>';
+
+ tmp.html(str);
+
+ _process_inline();
+ break;
+
+ case 'ajax':
+ busy = false;
+
+ $.fancybox.showActivity();
+
+ selectedOpts.ajax.win = selectedOpts.ajax.success;
+
+ ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, {
+ url : href,
+ data : selectedOpts.ajax.data || {},
+ error : function(XMLHttpRequest, textStatus, errorThrown) {
+ if ( XMLHttpRequest.status > 0 ) {
+ _error();
+ }
+ },
+ success : function(data, textStatus, XMLHttpRequest) {
+ var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader;
+ if (o.status == 200) {
+ if ( typeof selectedOpts.ajax.win == 'function' ) {
+ ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest);
+
+ if (ret === false) {
+ loading.hide();
+ return;
+ } else if (typeof ret == 'string' || typeof ret == 'object') {
+ data = ret;
+ }
+ }
+
+ tmp.html( data );
+ _process_inline();
+ }
+ }
+ }));
+
+ break;
+
+ case 'iframe':
+ _show();
+ break;
+ }
+ },
+
+ _process_inline = function() {
+ var
+ w = selectedOpts.width,
+ h = selectedOpts.height;
+
+ if (w.toString().indexOf('%') > -1) {
+ w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px';
+
+ } else {
+ w = w == 'auto' ? 'auto' : w + 'px';
+ }
+
+ if (h.toString().indexOf('%') > -1) {
+ h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px';
+
+ } else {
+ h = h == 'auto' ? 'auto' : h + 'px';
+ }
+
+ tmp.wrapInner('<div style="width:' + w + ';height:' + h + ';overflow: ' + (selectedOpts.scrolling == 'auto' ? 'auto' : (selectedOpts.scrolling == 'yes' ? 'scroll' : 'hidden')) + ';position:relative;"></div>');
+
+ selectedOpts.width = tmp.width();
+ selectedOpts.height = tmp.height();
+
+ _show();
+ },
+
+ _process_image = function() {
+ selectedOpts.width = imgPreloader.width;
+ selectedOpts.height = imgPreloader.height;
+
+ $("<img />").attr({
+ 'id' : 'fancybox-img',
+ 'src' : imgPreloader.src,
+ 'alt' : selectedOpts.title
+ }).appendTo( tmp );
+
+ _show();
+ },
+
+ _show = function() {
+ var pos, equal;
+
+ loading.hide();
+
+ if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) {
+ $.event.trigger('fancybox-cancel');
+
+ busy = false;
+ return;
+ }
+
+ busy = true;
+
+ $(content.add( overlay )).unbind();
+
+ $(window).unbind("resize.fb scroll.fb");
+ $(document).unbind('keydown.fb');
+
+ if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') {
+ wrap.css('height', wrap.height());
+ }
+
+ currentArray = selectedArray;
+ currentIndex = selectedIndex;
+ currentOpts = selectedOpts;
+
+ if (currentOpts.overlayShow) {
+ overlay.css({
+ 'background-color' : currentOpts.overlayColor,
+ 'opacity' : currentOpts.overlayOpacity,
+ 'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto',
+ 'height' : $(document).height()
+ });
+
+ if (!overlay.is(':visible')) {
+ if (isIE6) {
+ $('select:not(#fancybox-tmp select)').filter(function() {
+ return this.style.visibility !== 'hidden';
+ }).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() {
+ this.style.visibility = 'inherit';
+ });
+ }
+
+ overlay.show();
+ }
+ } else {
+ overlay.hide();
+ }
+
+ final_pos = _get_zoom_to();
+
+ _process_title();
+
+ if (wrap.is(":visible")) {
+ $( close.add( nav_left ).add( nav_right ) ).hide();
+
+ pos = wrap.position(),
+
+ start_pos = {
+ top : pos.top,
+ left : pos.left,
+ width : wrap.width(),
+ height : wrap.height()
+ };
+
+ equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height);
+
+ content.fadeTo(currentOpts.changeFade, 0.3, function() {
+ var finish_resizing = function() {
+ content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish);
+ };
+
+ $.event.trigger('fancybox-change');
+
+ content
+ .empty()
+ .removeAttr('filter')
+ .css({
+ 'border-width' : currentOpts.padding,
+ 'width' : final_pos.width - currentOpts.padding * 2,
+ 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
+ });
+
+ if (equal) {
+ finish_resizing();
+
+ } else {
+ fx.prop = 0;
+
+ $(fx).animate({prop: 1}, {
+ duration : currentOpts.changeSpeed,
+ easing : currentOpts.easingChange,
+ step : _draw,
+ complete : finish_resizing
+ });
+ }
+ });
+
+ return;
+ }
+
+ wrap.removeAttr("style");
+
+ content.css('border-width', currentOpts.padding);
+
+ if (currentOpts.transitionIn == 'elastic') {
+ start_pos = _get_zoom_from();
+
+ content.html( tmp.contents() );
+
+ wrap.show();
+
+ if (currentOpts.opacity) {
+ final_pos.opacity = 0;
+ }
+
+ fx.prop = 0;
+
+ $(fx).animate({prop: 1}, {
+ duration : currentOpts.speedIn,
+ easing : currentOpts.easingIn,
+ step : _draw,
+ complete : _finish
+ });
+
+ return;
+ }
+
+ if (currentOpts.titlePosition == 'inside' && titleHeight > 0) {
+ title.show();
+ }
+
+ content
+ .css({
+ 'width' : final_pos.width - currentOpts.padding * 2,
+ 'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
+ })
+ .html( tmp.contents() );
+
+ wrap
+ .css(final_pos)
+ .fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish );
+ },
+
+ _format_title = function(title) {
+ if (title && title.length) {
+ if (currentOpts.titlePosition == 'float') {
+ return '<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">' + title + '</td><td id="fancybox-title-float-right"></td></tr></table>';
+ }
+
+ return '<div id="fancybox-title-' + currentOpts.titlePosition + '">' + title + '</div>';
+ }
+
+ return false;
+ },
+
+ _process_title = function() {
+ titleStr = currentOpts.title || '';
+ titleHeight = 0;
+
+ title
+ .empty()
+ .removeAttr('style')
+ .removeClass();
+
+ if (currentOpts.titleShow === false) {
+ title.hide();
+ return;
+ }
+
+ titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr);
+
+ if (!titleStr || titleStr === '') {
+ title.hide();
+ return;
+ }
+
+ title
+ .addClass('fancybox-title-' + currentOpts.titlePosition)
+ .html( titleStr )
+ .appendTo( 'body' )
+ .show();
+
+ switch (currentOpts.titlePosition) {
+ case 'inside':
+ title
+ .css({
+ 'width' : final_pos.width - (currentOpts.padding * 2),
+ 'marginLeft' : currentOpts.padding,
+ 'marginRight' : currentOpts.padding
+ });
+
+ titleHeight = title.outerHeight(true);
+
+ title.appendTo( outer );
+
+ final_pos.height += titleHeight;
+ break;
+
+ case 'over':
+ title
+ .css({
+ 'marginLeft' : currentOpts.padding,
+ 'width' : final_pos.width - (currentOpts.padding * 2),
+ 'bottom' : currentOpts.padding
+ })
+ .appendTo( outer );
+ break;
+
+ case 'float':
+ title
+ .css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1)
+ .appendTo( wrap );
+ break;
+
+ default:
+ title
+ .css({
+ 'width' : final_pos.width - (currentOpts.padding * 2),
+ 'paddingLeft' : currentOpts.padding,
+ 'paddingRight' : currentOpts.padding
+ })
+ .appendTo( wrap );
+ break;
+ }
+
+ title.hide();
+ },
+
+ _set_navigation = function() {
+ if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) {
+ $(document).bind('keydown.fb', function(e) {
+ if (e.keyCode == 27 && currentOpts.enableEscapeButton) {
+ e.preventDefault();
+ $.fancybox.close();
+
+ } else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
+ e.preventDefault();
+ $.fancybox[ e.keyCode == 37 ? 'prev' : 'next']();
+ }
+ });
+ }
+
+ if (!currentOpts.showNavArrows) {
+ nav_left.hide();
+ nav_right.hide();
+ return;
+ }
+
+ if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) {
+ nav_left.show();
+ }
+
+ if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) {
+ nav_right.show();
+ }
+ },
+
+ _finish = function () {
+ if (!$.support.opacity) {
+ content.get(0).style.removeAttribute('filter');
+ wrap.get(0).style.removeAttribute('filter');
+ }
+
+ if (selectedOpts.autoDimensions) {
+ content.css('height', 'auto');
+ }
+
+ wrap.css('height', 'auto');
+
+ if (titleStr && titleStr.length) {
+ title.show();
+ }
+
+ if (currentOpts.showCloseButton) {
+ close.show();
+ }
+
+ _set_navigation();
+
+ if (currentOpts.hideOnContentClick) {
+ content.bind('click', $.fancybox.close);
+ }
+
+ if (currentOpts.hideOnOverlayClick) {
+ overlay.bind('click', $.fancybox.close);
+ }
+
+ $(window).bind("resize.fb", $.fancybox.resize);
+
+ if (currentOpts.centerOnScroll) {
+ $(window).bind("scroll.fb", $.fancybox.center);
+ }
+
+ if (currentOpts.type == 'iframe') {
+ $('<iframe id="fancybox-frame" name="fancybox-frame' + new Date().getTime() + '" frameborder="0" hspace="0" ' + ($.browser.msie ? 'allowtransparency="true""' : '') + ' scrolling="' + selectedOpts.scrolling + '" src="' + currentOpts.href + '"></iframe>').appendTo(content);
+ }
+
+ wrap.show();
+
+ busy = false;
+
+ $.fancybox.center();
+
+ currentOpts.onComplete(currentArray, currentIndex, currentOpts);
+
+ _preload_images();
+ },
+
+ _preload_images = function() {
+ var href,
+ objNext;
+
+ if ((currentArray.length -1) > currentIndex) {
+ href = currentArray[ currentIndex + 1 ].href;
+
+ if (typeof href !== 'undefined' && href.match(imgRegExp)) {
+ objNext = new Image();
+ objNext.src = href;
+ }
+ }
+
+ if (currentIndex > 0) {
+ href = currentArray[ currentIndex - 1 ].href;
+
+ if (typeof href !== 'undefined' && href.match(imgRegExp)) {
+ objNext = new Image();
+ objNext.src = href;
+ }
+ }
+ },
+
+ _draw = function(pos) {
+ var dim = {
+ width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10),
+ height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10),
+
+ top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10),
+ left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10)
+ };
+
+ if (typeof final_pos.opacity !== 'undefined') {
+ dim.opacity = pos < 0.5 ? 0.5 : pos;
+ }
+
+ wrap.css(dim);
+
+ content.css({
+ 'width' : dim.width - currentOpts.padding * 2,
+ 'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2
+ });
+ },
+
+ _get_viewport = function() {
+ return [
+ $(window).width() - (currentOpts.margin * 2),
+ $(window).height() - (currentOpts.margin * 2),
+ $(document).scrollLeft() + currentOpts.margin,
+ $(document).scrollTop() + currentOpts.margin
+ ];
+ },
+
+ _get_zoom_to = function () {
+ var view = _get_viewport(),
+ to = {},
+ resize = currentOpts.autoScale,
+ double_padding = currentOpts.padding * 2,
+ ratio;
+
+ if (currentOpts.width.toString().indexOf('%') > -1) {
+ to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10);
+ } else {
+ to.width = currentOpts.width + double_padding;
+ }
+
+ if (currentOpts.height.toString().indexOf('%') > -1) {
+ to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10);
+ } else {
+ to.height = currentOpts.height + double_padding;
+ }
+
+ if (resize && (to.width > view[0] || to.height > view[1])) {
+ if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') {
+ ratio = (currentOpts.width ) / (currentOpts.height );
+
+ if ((to.width ) > view[0]) {
+ to.width = view[0];
+ to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10);
+ }
+
+ if ((to.height) > view[1]) {
+ to.height = view[1];
+ to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10);
+ }
+
+ } else {
+ to.width = Math.min(to.width, view[0]);
+ to.height = Math.min(to.height, view[1]);
+ }
+ }
+
+ to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10);
+ to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10);
+
+ return to;
+ },
+
+ _get_obj_pos = function(obj) {
+ var pos = obj.offset();
+
+ pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0;
+ pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0;
+
+ pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0;
+ pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0;
+
+ pos.width = obj.width();
+ pos.height = obj.height();
+
+ return pos;
+ },
+
+ _get_zoom_from = function() {
+ var orig = selectedOpts.orig ? $(selectedOpts.orig) : false,
+ from = {},
+ pos,
+ view;
+
+ if (orig && orig.length) {
+ pos = _get_obj_pos(orig);
+
+ from = {
+ width : pos.width + (currentOpts.padding * 2),
+ height : pos.height + (currentOpts.padding * 2),
+ top : pos.top - currentOpts.padding - 20,
+ left : pos.left - currentOpts.padding - 20
+ };
+
+ } else {
+ view = _get_viewport();
+
+ from = {
+ width : currentOpts.padding * 2,
+ height : currentOpts.padding * 2,
+ top : parseInt(view[3] + view[1] * 0.5, 10),
+ left : parseInt(view[2] + view[0] * 0.5, 10)
+ };
+ }
+
+ return from;
+ },
+
+ _animate_loading = function() {
+ if (!loading.is(':visible')){
+ clearInterval(loadingTimer);
+ return;
+ }
+
+ $('div', loading).css('top', (loadingFrame * -40) + 'px');
+
+ loadingFrame = (loadingFrame + 1) % 12;
+ };
+
+ /*
+ * Public methods
+ */
+
+ $.fn.fancybox = function(options) {
+ if (!$(this).length) {
+ return this;
+ }
+
+ $(this)
+ .data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {})))
+ .unbind('click.fb')
+ .bind('click.fb', function(e) {
+ e.preventDefault();
+
+ if (busy) {
+ return;
+ }
+
+ busy = true;
+
+ $(this).blur();
+
+ selectedArray = [];
+ selectedIndex = 0;
+
+ var rel = $(this).attr('rel') || '';
+
+ if (!rel || rel == '' || rel === 'nofollow') {
+ selectedArray.push(this);
+
+ } else {
+ selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]");
+ selectedIndex = selectedArray.index( this );
+ }
+
+ _start();
+
+ return;
+ });
+
+ return this;
+ };
+
+ $.fancybox = function(obj) {
+ var opts;
+
+ if (busy) {
+ return;
+ }
+
+ busy = true;
+ opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {};
+
+ selectedArray = [];
+ selectedIndex = parseInt(opts.index, 10) || 0;
+
+ if ($.isArray(obj)) {
+ for (var i = 0, j = obj.length; i < j; i++) {
+ if (typeof obj[i] == 'object') {
+ $(obj[i]).data('fancybox', $.extend({}, opts, obj[i]));
+ } else {
+ obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts));
+ }
+ }
+
+ selectedArray = jQuery.merge(selectedArray, obj);
+
+ } else {
+ if (typeof obj == 'object') {
+ $(obj).data('fancybox', $.extend({}, opts, obj));
+ } else {
+ obj = $({}).data('fancybox', $.extend({content : obj}, opts));
+ }
+
+ selectedArray.push(obj);
+ }
+
+ if (selectedIndex > selectedArray.length || selectedIndex < 0) {
+ selectedIndex = 0;
+ }
+
+ _start();
+ };
+
+ $.fancybox.showActivity = function() {
+ clearInterval(loadingTimer);
+
+ loading.show();
+ loadingTimer = setInterval(_animate_loading, 66);
+ };
+
+ $.fancybox.hideActivity = function() {
+ loading.hide();
+ };
+
+ $.fancybox.next = function() {
+ return $.fancybox.pos( currentIndex + 1);
+ };
+
+ $.fancybox.prev = function() {
+ return $.fancybox.pos( currentIndex - 1);
+ };
+
+ $.fancybox.pos = function(pos) {
+ if (busy) {
+ return;
+ }
+
+ pos = parseInt(pos);
+
+ selectedArray = currentArray;
+
+ if (pos > -1 && pos < currentArray.length) {
+ selectedIndex = pos;
+ _start();
+
+ } else if (currentOpts.cyclic && currentArray.length > 1) {
+ selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1;
+ _start();
+ }
+
+ return;
+ };
+
+ $.fancybox.cancel = function() {
+ if (busy) {
+ return;
+ }
+
+ busy = true;
+
+ $.event.trigger('fancybox-cancel');
+
+ _abort();
+
+ selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts);
+
+ busy = false;
+ };
+
+ // Note: within an iframe use - parent.$.fancybox.close();
+ $.fancybox.close = function() {
+ if (busy || wrap.is(':hidden')) {
+ return;
+ }
+
+ busy = true;
+
+ if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) {
+ busy = false;
+ return;
+ }
+
+ _abort();
+
+ $(close.add( nav_left ).add( nav_right )).hide();
+
+ $(content.add( overlay )).unbind();
+
+ $(window).unbind("resize.fb scroll.fb");
+ $(document).unbind('keydown.fb');
+
+ content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank');
+
+ if (currentOpts.titlePosition !== 'inside') {
+ title.empty();
+ }
+
+ wrap.stop();
+
+ function _cleanup() {
+ overlay.fadeOut('fast');
+
+ title.empty().hide();
+ wrap.hide();
+
+ $.event.trigger('fancybox-cleanup');
+
+ content.empty();
+
+ currentOpts.onClosed(currentArray, currentIndex, currentOpts);
+
+ currentArray = selectedOpts = [];
+ currentIndex = selectedIndex = 0;
+ currentOpts = selectedOpts = {};
+
+ busy = false;
+ }
+
+ if (currentOpts.transitionOut == 'elastic') {
+ start_pos = _get_zoom_from();
+
+ var pos = wrap.position();
+
+ final_pos = {
+ top : pos.top ,
+ left : pos.left,
+ width : wrap.width(),
+ height : wrap.height()
+ };
+
+ if (currentOpts.opacity) {
+ final_pos.opacity = 1;
+ }
+
+ title.empty().hide();
+
+ fx.prop = 1;
+
+ $(fx).animate({ prop: 0 }, {
+ duration : currentOpts.speedOut,
+ easing : currentOpts.easingOut,
+ step : _draw,
+ complete : _cleanup
+ });
+
+ } else {
+ wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup);
+ }
+ };
+
+ $.fancybox.resize = function() {
+ if (overlay.is(':visible')) {
+ overlay.css('height', $(document).height());
+ }
+
+ $.fancybox.center(true);
+ };
+
+ $.fancybox.center = function() {
+ var view, align;
+
+ if (busy) {
+ return;
+ }
+
+ align = arguments[0] === true ? 1 : 0;
+ view = _get_viewport();
+
+ if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) {
+ return;
+ }
+
+ wrap
+ .stop()
+ .animate({
+ 'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)),
+ 'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding))
+ }, typeof arguments[0] == 'number' ? arguments[0] : 200);
+ };
+
+ $.fancybox.init = function() {
+ if ($("#fancybox-wrap").length) {
+ return;
+ }
+
+ $('body').append(
+ tmp = $('<div id="fancybox-tmp"></div>'),
+ loading = $('<div id="fancybox-loading"><div></div></div>'),
+ overlay = $('<div id="fancybox-overlay"></div>'),
+ wrap = $('<div id="fancybox-wrap"></div>')
+ );
+
+ outer = $('<div id="fancybox-outer"></div>')
+ .append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>')
+ .appendTo( wrap );
+
+ outer.append(
+ content = $('<div id="fancybox-content"></div>'),
+ close = $('<a id="fancybox-close"></a>'),
+ title = $('<div id="fancybox-title"></div>'),
+
+ nav_left = $('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),
+ nav_right = $('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>')
+ );
+
+ close.click($.fancybox.close);
+ loading.click($.fancybox.cancel);
+
+ nav_left.click(function(e) {
+ e.preventDefault();
+ $.fancybox.prev();
+ });
+
+ nav_right.click(function(e) {
+ e.preventDefault();
+ $.fancybox.next();
+ });
+
+ if ($.fn.mousewheel) {
+ wrap.bind('mousewheel.fb', function(e, delta) {
+ if (busy) {
+ e.preventDefault();
+
+ } else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) {
+ e.preventDefault();
+ $.fancybox[ delta > 0 ? 'prev' : 'next']();
+ }
+ });
+ }
+
+ if (!$.support.opacity) {
+ wrap.addClass('fancybox-ie');
+ }
+
+ if (isIE6) {
+ loading.addClass('fancybox-ie6');
+ wrap.addClass('fancybox-ie6');
+
+ $('<iframe id="fancybox-hide-sel-frame" src="' + (/^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank' ) + '" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(outer);
+ }
+ };
+
+ $.fn.fancybox.defaults = {
+ padding : 10,
+ margin : 40,
+ opacity : false,
+ modal : false,
+ cyclic : false,
+ scrolling : 'auto', // 'auto', 'yes' or 'no'
+
+ width : 560,
+ height : 340,
+
+ autoScale : true,
+ autoDimensions : true,
+ centerOnScroll : false,
+
+ ajax : {},
+ swf : { wmode: 'transparent' },
+
+ hideOnOverlayClick : true,
+ hideOnContentClick : false,
+
+ overlayShow : true,
+ overlayOpacity : 0.7,
+ overlayColor : '#777',
+
+ titleShow : true,
+ titlePosition : 'float', // 'float', 'outside', 'inside' or 'over'
+ titleFormat : null,
+ titleFromAlt : false,
+
+ transitionIn : 'fade', // 'elastic', 'fade' or 'none'
+ transitionOut : 'fade', // 'elastic', 'fade' or 'none'
+
+ speedIn : 300,
+ speedOut : 300,
+
+ changeSpeed : 300,
+ changeFade : 'fast',
+
+ easingIn : 'swing',
+ easingOut : 'swing',
+
+ showCloseButton : true,
+ showNavArrows : true,
+ enableEscapeButton : true,
+ enableKeyboardNav : true,
+
+ onStart : function(){},
+ onCancel : function(){},
+ onComplete : function(){},
+ onCleanup : function(){},
+ onClosed : function(){},
+ onError : function(){}
+ };
+
+ $(document).ready(function() {
+ $.fancybox.init();
+ });
+
+})(jQuery); \ No newline at end of file
diff --git a/vendors/jquery/fancybox/jquery.fancybox-1.3.4.pack.js b/vendors/jquery/fancybox/jquery.fancybox-1.3.4.pack.js
new file mode 100644
index 000000000..1373ed083
--- /dev/null
+++ b/vendors/jquery/fancybox/jquery.fancybox-1.3.4.pack.js
@@ -0,0 +1,46 @@
+/*
+ * FancyBox - jQuery Plugin
+ * Simple and fancy lightbox alternative
+ *
+ * Examples and documentation at: http://fancybox.net
+ *
+ * Copyright (c) 2008 - 2010 Janis Skarnelis
+ * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
+ *
+ * Version: 1.3.4 (11/11/2010)
+ * Requires: jQuery v1.3+
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+;(function(b){var m,t,u,f,D,j,E,n,z,A,q=0,e={},o=[],p=0,d={},l=[],G=null,v=new Image,J=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W=/[^\.]\.(swf)\s*$/i,K,L=1,y=0,s="",r,i,h=false,B=b.extend(b("<div/>")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>');
+F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)||
+c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick=
+false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('<div class="fancybox-inline-tmp" />').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel",
+function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("<img />").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+e.width+'" height="'+e.height+'"><param name="movie" value="'+c+
+'"></param>';P="";b.each(e.swf,function(x,H){C+='<param name="'+x+'" value="'+H+'"></param>';P+=" "+x+'="'+H+'"'});C+='<embed src="'+c+'" type="application/x-shockwave-flash" width="'+e.width+'" height="'+e.height+'"'+P+"></embed></object>";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win==
+"function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('<div style="width:'+a+";height:"+c+
+";overflow: "+(e.scrolling=="auto"?"auto":e.scrolling=="yes"?"scroll":"hidden")+';position:relative;"></div>');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor,
+opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length?
+d.titlePosition=="float"?'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+s+'</td><td id="fancybox-title-float-right"></td></tr></table>':'<div id="fancybox-title-'+d.titlePosition+'">'+s+"</div>":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding});
+y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height==
+i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents());
+f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode==
+37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto");
+s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('<iframe id="fancybox-frame" name="fancybox-frame'+(new Date).getTime()+'" frameborder="0" hspace="0" '+(b.browser.msie?'allowtransparency="true""':"")+' scrolling="'+e.scrolling+'" src="'+d.href+'"></iframe>').appendTo(j);
+f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c);
+j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type==
+"image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"),
+10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)};
+b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k=
+0,C=a.length;k<C;k++)if(typeof a[k]=="object")b(a[k]).data("fancybox",b.extend({},g,a[k]));else a[k]=b({}).data("fancybox",b.extend({content:a[k]},g));o=jQuery.merge(o,a)}else{if(typeof a=="object")b(a).data("fancybox",b.extend({},g,a));else a=b({}).data("fancybox",b.extend({content:a},g));o.push(a)}if(q>o.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+
+1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a<l.length){q=a;I()}else if(d.cyclic&&l.length>1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h=
+true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1;
+b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5-
+d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('<div id="fancybox-tmp"></div>'),t=b('<div id="fancybox-loading"><div></div></div>'),u=b('<div id="fancybox-overlay"></div>'),f=b('<div id="fancybox-wrap"></div>'));D=b('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(f);
+D.append(j=b('<div id="fancybox-content"></div>'),E=b('<a id="fancybox-close"></a>'),n=b('<div id="fancybox-title"></div>'),z=b('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),A=b('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()});
+b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(D)}}};
+b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",
+easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery); \ No newline at end of file
diff --git a/vendors/jquery/fancybox/jquery.mousewheel-3.0.4.pack.js b/vendors/jquery/fancybox/jquery.mousewheel-3.0.4.pack.js
new file mode 100644
index 000000000..cb66588e2
--- /dev/null
+++ b/vendors/jquery/fancybox/jquery.mousewheel-3.0.4.pack.js
@@ -0,0 +1,14 @@
+/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
+* Licensed under the MIT License (LICENSE.txt).
+*
+* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
+* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
+* Thanks to: Seamus Leahy for adding deltaX and deltaY
+*
+* Version: 3.0.4
+*
+* Requires: 1.2.2+
+*/
+
+(function(d){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0,e=0;a=d.event.fix(b);a.type="mousewheel";if(a.wheelDelta)c=a.wheelDelta/120;if(a.detail)c=-a.detail/3;e=c;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){e=0;h=-1*c}if(b.wheelDeltaY!==undefined)e=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,c,h,e);return d.event.handle.apply(this,i)}var f=["DOMMouseScroll","mousewheel"];d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=
+f.length;a;)this.addEventListener(f[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=f.length;a;)this.removeEventListener(f[--a],g,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery-ui-i18n.js b/vendors/jquery/i18n/jquery-ui-i18n.js
new file mode 100644
index 000000000..366446d9e
--- /dev/null
+++ b/vendors/jquery/i18n/jquery-ui-i18n.js
@@ -0,0 +1,1646 @@
+/*! jQuery UI - v1.8.22 - 2012-07-24
+* https://github.com/jquery/jquery-ui
+* Includes: jquery.ui.datepicker-af.js, jquery.ui.datepicker-ar-DZ.js, jquery.ui.datepicker-ar.js, jquery.ui.datepicker-az.js, jquery.ui.datepicker-bg.js, jquery.ui.datepicker-bs.js, jquery.ui.datepicker-ca.js, jquery.ui.datepicker-cs.js, jquery.ui.datepicker-cy-GB.js, jquery.ui.datepicker-da.js, jquery.ui.datepicker-de.js, jquery.ui.datepicker-el.js, jquery.ui.datepicker-en-AU.js, jquery.ui.datepicker-en-GB.js, jquery.ui.datepicker-en-NZ.js, jquery.ui.datepicker-eo.js, jquery.ui.datepicker-es.js, jquery.ui.datepicker-et.js, jquery.ui.datepicker-eu.js, jquery.ui.datepicker-fa.js, jquery.ui.datepicker-fi.js, jquery.ui.datepicker-fo.js, jquery.ui.datepicker-fr-CH.js, jquery.ui.datepicker-fr.js, jquery.ui.datepicker-gl.js, jquery.ui.datepicker-he.js, jquery.ui.datepicker-hi.js, jquery.ui.datepicker-hr.js, jquery.ui.datepicker-hu.js, jquery.ui.datepicker-hy.js, jquery.ui.datepicker-id.js, jquery.ui.datepicker-is.js, jquery.ui.datepicker-it.js, jquery.ui.datepicker-ja.js, jquery.ui.datepicker-ka.js, jquery.ui.datepicker-kk.js, jquery.ui.datepicker-km.js, jquery.ui.datepicker-ko.js, jquery.ui.datepicker-lb.js, jquery.ui.datepicker-lt.js, jquery.ui.datepicker-lv.js, jquery.ui.datepicker-mk.js, jquery.ui.datepicker-ml.js, jquery.ui.datepicker-ms.js, jquery.ui.datepicker-nl-BE.js, jquery.ui.datepicker-nl.js, jquery.ui.datepicker-no.js, jquery.ui.datepicker-pl.js, jquery.ui.datepicker-pt-BR.js, jquery.ui.datepicker-pt.js, jquery.ui.datepicker-rm.js, jquery.ui.datepicker-ro.js, jquery.ui.datepicker-ru.js, jquery.ui.datepicker-sk.js, jquery.ui.datepicker-sl.js, jquery.ui.datepicker-sq.js, jquery.ui.datepicker-sr-SR.js, jquery.ui.datepicker-sr.js, jquery.ui.datepicker-sv.js, jquery.ui.datepicker-ta.js, jquery.ui.datepicker-th.js, jquery.ui.datepicker-tj.js, jquery.ui.datepicker-tr.js, jquery.ui.datepicker-uk.js, jquery.ui.datepicker-vi.js, jquery.ui.datepicker-zh-CN.js, jquery.ui.datepicker-zh-HK.js, jquery.ui.datepicker-zh-TW.js
+* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */
+
+/* Afrikaans initialisation for the jQuery UI date picker plugin. */
+/* Written by Renier Pretorius. */
+jQuery(function($){
+ $.datepicker.regional['af'] = {
+ closeText: 'Selekteer',
+ prevText: 'Vorige',
+ nextText: 'Volgende',
+ currentText: 'Vandag',
+ monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
+ 'Julie','Augustus','September','Oktober','November','Desember'],
+ monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
+ dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
+ dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
+ dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['af']);
+});
+
+/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/
+/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
+
+jQuery(function($){
+ $.datepicker.regional['ar-DZ'] = {
+ closeText: 'إغلاق',
+ prevText: '&#x3c;السابق',
+ nextText: 'التالي&#x3e;',
+ currentText: 'اليوم',
+ monthNames: ['جانÙÙŠ', 'ÙÙŠÙري', 'مارس', 'Ø£Ùريل', 'ماي', 'جوان',
+ 'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوÙمبر', 'ديسمبر'],
+ monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+ dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ weekHeader: 'أسبوع',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 6,
+ isRTL: true,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ar-DZ']);
+});
+
+/* Arabic Translation for jQuery UI date picker plugin. */
+/* Khaled Alhourani -- me@khaledalhourani.com */
+/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name Ùبراير - يناير and there isn't any Arabic roots for these months */
+jQuery(function($){
+ $.datepicker.regional['ar'] = {
+ closeText: 'إغلاق',
+ prevText: '&#x3c;السابق',
+ nextText: 'التالي&#x3e;',
+ currentText: 'اليوم',
+ monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
+ 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+ monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+ dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+ weekHeader: 'أسبوع',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 6,
+ isRTL: true,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ar']);
+});
+/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Jamil Najafov (necefov33@gmail.com). */
+jQuery(function($) {
+ $.datepicker.regional['az'] = {
+ closeText: 'BaÄŸla',
+ prevText: '&#x3c;Geri',
+ nextText: 'İrəli&#x3e;',
+ currentText: 'Bugün',
+ monthNames: ['Yanvar','Fevral','Mart','Aprel','May','Ä°yun',
+ 'Ä°yul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
+ monthNamesShort: ['Yan','Fev','Mar','Apr','May','Ä°yun',
+ 'Ä°yul','Avq','Sen','Okt','Noy','Dek'],
+ dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
+ dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
+ dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
+ weekHeader: 'Hf',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['az']);
+});
+/* Bulgarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Stoyan Kyosev (http://svest.org). */
+jQuery(function($){
+ $.datepicker.regional['bg'] = {
+ closeText: 'затвори',
+ prevText: '&#x3c;назад',
+ nextText: 'напред&#x3e;',
+ nextBigText: '&#x3e;&#x3e;',
+ currentText: 'днеÑ',
+ monthNames: ['Януари','Февруари','Март','Ðприл','Май','Юни',
+ 'Юли','ÐвгуÑÑ‚','Септември','Октомври','Ðоември','Декември'],
+ monthNamesShort: ['Яну','Фев','Мар','Ðпр','Май','Юни',
+ 'Юли','Ðвг','Сеп','Окт','Ðов','Дек'],
+ dayNames: ['ÐеделÑ','Понеделник','Вторник','СрÑда','Четвъртък','Петък','Събота'],
+ dayNamesShort: ['Ðед','Пон','Вто','СрÑ','Чет','Пет','Съб'],
+ dayNamesMin: ['Ðе','По','Ð’Ñ‚','Ср','Че','Пе','Съ'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['bg']);
+});
+
+/* Bosnian i18n for the jQuery UI date picker plugin. */
+/* Written by Kenan Konjo. */
+jQuery(function($){
+ $.datepicker.regional['bs'] = {
+ closeText: 'Zatvori',
+ prevText: '&#x3c;',
+ nextText: '&#x3e;',
+ currentText: 'Danas',
+ monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
+ 'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','ÄŒetvrtak','Petak','Subota'],
+ dayNamesShort: ['Ned','Pon','Uto','Sri','ÄŒet','Pet','Sub'],
+ dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['bs']);
+});
+/* Inicialització en català per a l'extenció 'calendar' per jQuery. */
+/* Writers: (joan.leon@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['ca'] = {
+ closeText: 'Tancar',
+ prevText: '&#x3c;Ant',
+ nextText: 'Seg&#x3e;',
+ currentText: 'Avui',
+ monthNames: ['Gener','Febrer','Mar&ccedil;','Abril','Maig','Juny',
+ 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
+ monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun',
+ 'Jul','Ago','Set','Oct','Nov','Des'],
+ dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
+ dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'],
+ dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ca']);
+});
+/* Czech initialisation for the jQuery UI date picker plugin. */
+/* Written by Tomas Muller (tomas@tomas-muller.net). */
+jQuery(function($){
+ $.datepicker.regional['cs'] = {
+ closeText: 'Zavřít',
+ prevText: '&#x3c;Dříve',
+ nextText: 'Později&#x3e;',
+ currentText: 'Nyní',
+ monthNames: ['leden','únor','bÅ™ezen','duben','kvÄ›ten','Äerven',
+ 'Äervenec','srpen','září','říjen','listopad','prosinec'],
+ monthNamesShort: ['led','úno','bÅ™e','dub','kvÄ›','Äer',
+ 'Ävc','srp','zář','říj','lis','pro'],
+ dayNames: ['nedÄ›le', 'pondÄ›lí', 'úterý', 'stÅ™eda', 'Ätvrtek', 'pátek', 'sobota'],
+ dayNamesShort: ['ne', 'po', 'út', 'st', 'Ät', 'pá', 'so'],
+ dayNamesMin: ['ne','po','út','st','Ät','pá','so'],
+ weekHeader: 'Týd',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['cs']);
+});
+
+/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by William Griffiths. */
+jQuery(function($){
+ $.datepicker.regional['cy-GB'] = {
+ closeText: 'Done',
+ prevText: 'Prev',
+ nextText: 'Next',
+ currentText: 'Today',
+ monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin',
+ 'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'],
+ monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh',
+ 'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'],
+ dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'],
+ dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],
+ dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'],
+ weekHeader: 'Wy',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['cy-GB']);
+});
+/* Danish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jan Christensen ( deletestuff@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['da'] = {
+ closeText: 'Luk',
+ prevText: '&#x3c;Forrige',
+ nextText: 'Næste&#x3e;',
+ currentText: 'Idag',
+ monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
+ 'Juli','August','September','Oktober','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
+ dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
+ dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
+ weekHeader: 'Uge',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['da']);
+});
+
+/* German initialisation for the jQuery UI date picker plugin. */
+/* Written by Milian Wolff (mail@milianw.de). */
+jQuery(function($){
+ $.datepicker.regional['de'] = {
+ closeText: 'schließen',
+ prevText: '&#x3c;zurück',
+ nextText: 'Vor&#x3e;',
+ currentText: 'heute',
+ monthNames: ['Januar','Februar','März','April','Mai','Juni',
+ 'Juli','August','September','Oktober','November','Dezember'],
+ monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dez'],
+ dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+ dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ weekHeader: 'KW',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['de']);
+});
+
+/* Greek (el) initialisation for the jQuery UI date picker plugin. */
+/* Written by Alex Cicovic (http://www.alexcicovic.com) */
+jQuery(function($){
+ $.datepicker.regional['el'] = {
+ closeText: 'Κλείσιμο',
+ prevText: 'ΠÏοηγοÏμενος',
+ nextText: 'Επόμενος',
+ currentText: 'ΤÏέχων Μήνας',
+ monthNames: ['ΙανουάÏιος','ΦεβÏουάÏιος','ΜάÏτιος','ΑπÏίλιος','Μάιος','ΙοÏνιος',
+ 'ΙοÏλιος','ΑÏγουστος','ΣεπτέμβÏιος','ΟκτώβÏιος','ÎοέμβÏιος','ΔεκέμβÏιος'],
+ monthNamesShort: ['Ιαν','Φεβ','ΜαÏ','ΑπÏ','Μαι','Ιουν',
+ 'Ιουλ','Αυγ','Σεπ','Οκτ','Îοε','Δεκ'],
+ dayNames: ['ΚυÏιακή','ΔευτέÏα','ΤÏίτη','ΤετάÏτη','Πέμπτη','ΠαÏασκευή','Σάββατο'],
+ dayNamesShort: ['ΚυÏ','Δευ','ΤÏι','Τετ','Πεμ','ΠαÏ','Σαβ'],
+ dayNamesMin: ['Κυ','Δε','ΤÏ','Τε','Πε','Πα','Σα'],
+ weekHeader: 'Εβδ',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['el']);
+});
+/* English/Australia initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+ $.datepicker.regional['en-AU'] = {
+ closeText: 'Done',
+ prevText: 'Prev',
+ nextText: 'Next',
+ currentText: 'Today',
+ monthNames: ['January','February','March','April','May','June',
+ 'July','August','September','October','November','December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['en-AU']);
+});
+
+/* English/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by Stuart. */
+jQuery(function($){
+ $.datepicker.regional['en-GB'] = {
+ closeText: 'Done',
+ prevText: 'Prev',
+ nextText: 'Next',
+ currentText: 'Today',
+ monthNames: ['January','February','March','April','May','June',
+ 'July','August','September','October','November','December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['en-GB']);
+});
+
+/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+ $.datepicker.regional['en-NZ'] = {
+ closeText: 'Done',
+ prevText: 'Prev',
+ nextText: 'Next',
+ currentText: 'Today',
+ monthNames: ['January','February','March','April','May','June',
+ 'July','August','September','October','November','December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['en-NZ']);
+});
+
+/* Esperanto initialisation for the jQuery UI date picker plugin. */
+/* Written by Olivier M. (olivierweb@ifrance.com). */
+jQuery(function($){
+ $.datepicker.regional['eo'] = {
+ closeText: 'Fermi',
+ prevText: '&lt;Anta',
+ nextText: 'Sekv&gt;',
+ currentText: 'Nuna',
+ monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
+ 'Julio','AÅ­gusto','Septembro','Oktobro','Novembro','Decembro'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','AÅ­g','Sep','Okt','Nov','Dec'],
+ dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
+ dayNamesShort: ['Dim','Lun','Mar','Mer','Ä´aÅ­','Ven','Sab'],
+ dayNamesMin: ['Di','Lu','Ma','Me','Ä´a','Ve','Sa'],
+ weekHeader: 'Sb',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['eo']);
+});
+
+/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
+/* Traducido por Vester (xvester@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['es'] = {
+ closeText: 'Cerrar',
+ prevText: '&#x3c;Ant',
+ nextText: 'Sig&#x3e;',
+ currentText: 'Hoy',
+ monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
+ 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+ monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
+ 'Jul','Ago','Sep','Oct','Nov','Dic'],
+ dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
+ dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
+ dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['es']);
+});
+/* Estonian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
+jQuery(function($){
+ $.datepicker.regional['et'] = {
+ closeText: 'Sulge',
+ prevText: 'Eelnev',
+ nextText: 'Järgnev',
+ currentText: 'Täna',
+ monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
+ 'Juuli','August','September','Oktoober','November','Detsember'],
+ monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
+ 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
+ dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
+ dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
+ dayNamesMin: ['P','E','T','K','N','R','L'],
+ weekHeader: 'näd',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['et']);
+});
+/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */
+/* Karrikas-ek itzulia (karrikas@karrikas.com) */
+jQuery(function($){
+ $.datepicker.regional['eu'] = {
+ closeText: 'Egina',
+ prevText: '&#x3c;Aur',
+ nextText: 'Hur&#x3e;',
+ currentText: 'Gaur',
+ monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina',
+ 'uztaila','abuztua','iraila','urria','azaroa','abendua'],
+ monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.',
+ 'uzt.','abu.','ira.','urr.','aza.','abe.'],
+ dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'],
+ dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'],
+ dayNamesMin: ['ig','al','ar','az','og','ol','lr'],
+ weekHeader: 'As',
+ dateFormat: 'yy-mm-dd',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['eu']);
+});
+/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
+/* Javad Mowlanezhad -- jmowla@gmail.com */
+/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
+jQuery(function($) {
+ $.datepicker.regional['fa'] = {
+ closeText: 'بستن',
+ prevText: '&#x3C;قبلی',
+ nextText: 'بعدی&#x3E;',
+ currentText: 'امروز',
+ monthNames: [
+ 'Ùروردين',
+ 'ارديبهشت',
+ 'خرداد',
+ 'تير',
+ 'مرداد',
+ 'شهريور',
+ 'مهر',
+ 'آبان',
+ 'آذر',
+ 'دی',
+ 'بهمن',
+ 'اسÙند'
+ ],
+ monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+ dayNames: [
+ 'يکشنبه',
+ 'دوشنبه',
+ 'سه‌شنبه',
+ 'چهارشنبه',
+ 'پنجشنبه',
+ 'جمعه',
+ 'شنبه'
+ ],
+ dayNamesShort: [
+ 'ی',
+ 'د',
+ 'س',
+ 'Ú†',
+ 'Ù¾',
+ 'ج',
+ 'Ø´'
+ ],
+ dayNamesMin: [
+ 'ی',
+ 'د',
+ 'س',
+ 'Ú†',
+ 'Ù¾',
+ 'ج',
+ 'Ø´'
+ ],
+ weekHeader: 'Ù‡Ù',
+ dateFormat: 'yy/mm/dd',
+ firstDay: 6,
+ isRTL: true,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['fa']);
+});
+/* Finnish initialisation for the jQuery UI date picker plugin. */
+/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['fi'] = {
+ closeText: 'Sulje',
+ prevText: '&#xAB;Edellinen',
+ nextText: 'Seuraava&#xBB;',
+ currentText: 'T&#xE4;n&#xE4;&#xE4;n',
+ monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kes&#xE4;kuu',
+ 'Hein&#xE4;kuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
+ monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kes&#xE4;',
+ 'Hein&#xE4;','Elo','Syys','Loka','Marras','Joulu'],
+ dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'],
+ dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
+ dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
+ weekHeader: 'Vk',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['fi']);
+});
+
+/* Faroese initialisation for the jQuery UI date picker plugin */
+/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
+jQuery(function($){
+ $.datepicker.regional['fo'] = {
+ closeText: 'Lat aftur',
+ prevText: '&#x3c;Fyrra',
+ nextText: 'Næsta&#x3e;',
+ currentText: 'Ã dag',
+ monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
+ 'Juli','August','September','Oktober','November','Desember'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Des'],
+ dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
+ dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
+ dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
+ weekHeader: 'Vk',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['fo']);
+});
+
+/* Swiss-French initialisation for the jQuery UI date picker plugin. */
+/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
+jQuery(function($){
+ $.datepicker.regional['fr-CH'] = {
+ closeText: 'Fermer',
+ prevText: '&#x3c;Préc',
+ nextText: 'Suiv&#x3e;',
+ currentText: 'Courant',
+ monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+ 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+ monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+ 'Jul','Aoû','Sep','Oct','Nov','Déc'],
+ dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+ dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+ dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['fr-CH']);
+});
+/* French initialisation for the jQuery UI date picker plugin. */
+/* Written by Keith Wood (kbwood{at}iinet.com.au),
+ Stéphane Nahmani (sholby@sholby.net),
+ Stéphane Raimbault <stephane.raimbault@gmail.com> */
+jQuery(function($){
+ $.datepicker.regional['fr'] = {
+ closeText: 'Fermer',
+ prevText: 'Précédent',
+ nextText: 'Suivant',
+ currentText: 'Aujourd\'hui',
+ monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+ 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+ monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
+ 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
+ dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+ dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
+ dayNamesMin: ['D','L','M','M','J','V','S'],
+ weekHeader: 'Sem.',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['fr']);
+});
+
+/* Galician localization for 'UI date picker' jQuery extension. */
+/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
+jQuery(function($){
+ $.datepicker.regional['gl'] = {
+ closeText: 'Pechar',
+ prevText: '&#x3c;Ant',
+ nextText: 'Seg&#x3e;',
+ currentText: 'Hoxe',
+ monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
+ 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
+ monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
+ 'Xul','Ago','Set','Out','Nov','Dec'],
+ dayNames: ['Domingo','Luns','Martes','M&eacute;rcores','Xoves','Venres','S&aacute;bado'],
+ dayNamesShort: ['Dom','Lun','Mar','M&eacute;r','Xov','Ven','S&aacute;b'],
+ dayNamesMin: ['Do','Lu','Ma','M&eacute;','Xo','Ve','S&aacute;'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['gl']);
+});
+/* Hebrew initialisation for the UI Datepicker extension. */
+/* Written by Amir Hardon (ahardon at gmail dot com). */
+jQuery(function($){
+ $.datepicker.regional['he'] = {
+ closeText: 'סגור',
+ prevText: '&#x3c;הקוד×',
+ nextText: 'הב×&#x3e;',
+ currentText: 'היו×',
+ monthNames: ['ינו×ר','פברו×ר','מרץ','×פריל','מ××™','יוני',
+ 'יולי','×וגוסט','ספטמבר','×וקטובר','נובמבר','דצמבר'],
+ monthNamesShort: ['ינו','פבר','מרץ','×פר','מ××™','יוני',
+ 'יולי','×וג','ספט','×וק','נוב','דצמ'],
+ dayNames: ['ר×שון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
+ dayNamesShort: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'],
+ dayNamesMin: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: true,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['he']);
+});
+
+/* Hindi initialisation for the jQuery UI date picker plugin. */
+/* Written by Michael Dawart. */
+jQuery(function($){
+ $.datepicker.regional['hi'] = {
+ closeText: 'बंद',
+ prevText: 'पिछला',
+ nextText: 'अगला',
+ currentText: 'आज',
+ monthNames: ['जनवरी ','फरवरी','मारà¥à¤š','अपà¥à¤°à¥‡à¤²','मई','जून',
+ 'जूलाई','अगसà¥à¤¤ ','सितमà¥à¤¬à¤°','अकà¥à¤Ÿà¥‚बर','नवमà¥à¤¬à¤°','दिसमà¥à¤¬à¤°'],
+ monthNamesShort: ['जन', 'फर', 'मारà¥à¤š', 'अपà¥à¤°à¥‡à¤²', 'मई', 'जून',
+ 'जूलाई', 'अग', 'सित', 'अकà¥à¤Ÿ', 'नव', 'दि'],
+ dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बà¥à¤§à¤µà¤¾à¤°', 'गà¥à¤°à¥à¤µà¤¾à¤°', 'शà¥à¤•à¥à¤°à¤µà¤¾à¤°', 'शनिवार'],
+ dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बà¥à¤§', 'गà¥à¤°à¥', 'शà¥à¤•à¥à¤°', 'शनि'],
+ dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बà¥à¤§', 'गà¥à¤°à¥', 'शà¥à¤•à¥à¤°', 'शनि'],
+ weekHeader: 'हफà¥à¤¤à¤¾',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['hi']);
+});
+
+/* Croatian i18n for the jQuery UI date picker plugin. */
+/* Written by Vjekoslav Nesek. */
+jQuery(function($){
+ $.datepicker.regional['hr'] = {
+ closeText: 'Zatvori',
+ prevText: '&#x3c;',
+ nextText: '&#x3e;',
+ currentText: 'Danas',
+ monthNames: ['SijeÄanj','VeljaÄa','Ožujak','Travanj','Svibanj','Lipanj',
+ 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
+ monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
+ 'Srp','Kol','Ruj','Lis','Stu','Pro'],
+ dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','ÄŒetvrtak','Petak','Subota'],
+ dayNamesShort: ['Ned','Pon','Uto','Sri','ÄŒet','Pet','Sub'],
+ dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+ weekHeader: 'Tje',
+ dateFormat: 'dd.mm.yy.',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['hr']);
+});
+/* Hungarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */
+jQuery(function($){
+ $.datepicker.regional['hu'] = {
+ closeText: 'bezár',
+ prevText: 'vissza',
+ nextText: 'előre',
+ currentText: 'ma',
+ monthNames: ['Január', 'Február', 'Március', 'Ãprilis', 'Május', 'Június',
+ 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
+ monthNamesShort: ['Jan', 'Feb', 'Már', 'Ãpr', 'Máj', 'Jún',
+ 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
+ dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
+ dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
+ dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+ weekHeader: 'Hét',
+ dateFormat: 'yy.mm.dd.',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['hu']);
+});
+
+/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
+jQuery(function($){
+ $.datepicker.regional['hy'] = {
+ closeText: 'Õ“Õ¡Õ¯Õ¥Õ¬',
+ prevText: '&#x3c;Õ†Õ¡Õ­.',
+ nextText: 'Õ€Õ¡Õ».&#x3e;',
+ currentText: 'Ô±ÕµÕ½Ö…Ö€',
+ monthNames: ['Õ€Õ¸Ö‚Õ¶Õ¾Õ¡Ö€','Õ“Õ¥Õ¿Ö€Õ¾Õ¡Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€Õ«Õ¬','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½',
+ 'Õ€Õ¸Ö‚Õ¬Õ«Õ½','Õ•Õ£Õ¸Õ½Õ¿Õ¸Õ½','ÕÕ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ€Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ†Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€','Ô´Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€'],
+ monthNamesShort: ['Õ€Õ¸Ö‚Õ¶Õ¾','Õ“Õ¥Õ¿Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½',
+ 'Õ€Õ¸Ö‚Õ¬','Õ•Õ£Õ½','ÕÕ¥Õº','Õ€Õ¸Õ¯','Õ†Õ¸Õµ','Ô´Õ¥Õ¯'],
+ dayNames: ['Õ¯Õ«Ö€Õ¡Õ¯Õ«','Õ¥Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«','Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«','Õ¸Ö‚Ö€Õ¢Õ¡Õ©','Õ·Õ¡Õ¢Õ¡Õ©'],
+ dayNamesShort: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'],
+ dayNamesMin: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'],
+ weekHeader: 'Õ‡Ô²Õ',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['hy']);
+});
+/* Indonesian initialisation for the jQuery UI date picker plugin. */
+/* Written by Deden Fathurahman (dedenf@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['id'] = {
+ closeText: 'Tutup',
+ prevText: '&#x3c;mundur',
+ nextText: 'maju&#x3e;',
+ currentText: 'hari ini',
+ monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
+ 'Juli','Agustus','September','Oktober','Nopember','Desember'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+ 'Jul','Agus','Sep','Okt','Nop','Des'],
+ dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
+ dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
+ dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
+ weekHeader: 'Mg',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['id']);
+});
+/* Icelandic initialisation for the jQuery UI date picker plugin. */
+/* Written by Haukur H. Thorsson (haukur@eskill.is). */
+jQuery(function($){
+ $.datepicker.regional['is'] = {
+ closeText: 'Loka',
+ prevText: '&#x3c; Fyrri',
+ nextText: 'N&aelig;sti &#x3e;',
+ currentText: '&Iacute; dag',
+ monthNames: ['Jan&uacute;ar','Febr&uacute;ar','Mars','Apr&iacute;l','Ma&iacute','J&uacute;n&iacute;',
+ 'J&uacute;l&iacute;','&Aacute;g&uacute;st','September','Okt&oacute;ber','N&oacute;vember','Desember'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Ma&iacute;','J&uacute;n',
+ 'J&uacute;l','&Aacute;g&uacute;','Sep','Okt','N&oacute;v','Des'],
+ dayNames: ['Sunnudagur','M&aacute;nudagur','&THORN;ri&eth;judagur','Mi&eth;vikudagur','Fimmtudagur','F&ouml;studagur','Laugardagur'],
+ dayNamesShort: ['Sun','M&aacute;n','&THORN;ri','Mi&eth;','Fim','F&ouml;s','Lau'],
+ dayNamesMin: ['Su','M&aacute;','&THORN;r','Mi','Fi','F&ouml;','La'],
+ weekHeader: 'Vika',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['is']);
+});
+/* Italian initialisation for the jQuery UI date picker plugin. */
+/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['it'] = {
+ closeText: 'Chiudi',
+ prevText: '&#x3c;Prec',
+ nextText: 'Succ&#x3e;',
+ currentText: 'Oggi',
+ monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
+ 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
+ monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
+ 'Lug','Ago','Set','Ott','Nov','Dic'],
+ dayNames: ['Domenica','Luned&#236','Marted&#236','Mercoled&#236','Gioved&#236','Venerd&#236','Sabato'],
+ dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
+ dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['it']);
+});
+
+/* Japanese initialisation for the jQuery UI date picker plugin. */
+/* Written by Kentaro SATO (kentaro@ranvis.com). */
+jQuery(function($){
+ $.datepicker.regional['ja'] = {
+ closeText: 'é–‰ã˜ã‚‹',
+ prevText: '&#x3c;å‰',
+ nextText: '次&#x3e;',
+ currentText: '今日',
+ monthNames: ['1月','2月','3月','4月','5月','6月',
+ '7月','8月','9月','10月','11月','12月'],
+ monthNamesShort: ['1月','2月','3月','4月','5月','6月',
+ '7月','8月','9月','10月','11月','12月'],
+ dayNames: ['日曜日','月曜日','ç«æ›œæ—¥','水曜日','木曜日','金曜日','土曜日'],
+ dayNamesShort: ['æ—¥','月','ç«','æ°´','木','金','土'],
+ dayNamesMin: ['æ—¥','月','ç«','æ°´','木','金','土'],
+ weekHeader: '週',
+ dateFormat: 'yy/mm/dd',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: 'å¹´'};
+ $.datepicker.setDefaults($.datepicker.regional['ja']);
+});
+/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Lado Lomidze (lado.lomidze@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['ka'] = {
+ closeText: 'დáƒáƒ®áƒ£áƒ áƒ•áƒ',
+ prevText: '&#x3c; წინáƒ',
+ nextText: 'შემდეგი &#x3e;',
+ currentText: 'დღეს',
+ monthNames: ['იáƒáƒœáƒ•áƒáƒ áƒ˜','თებერვáƒáƒšáƒ˜','მáƒáƒ áƒ¢áƒ˜','áƒáƒžáƒ áƒ˜áƒšáƒ˜','მáƒáƒ˜áƒ¡áƒ˜','ივნისი', 'ივლისი','áƒáƒ’ვისტáƒ','სექტემბერი','áƒáƒ¥áƒ¢áƒáƒ›áƒ‘ერი','ნáƒáƒ”მბერი','დეკემბერი'],
+ monthNamesShort: ['იáƒáƒœ','თებ','მáƒáƒ ','áƒáƒžáƒ ','მáƒáƒ˜','ივნ', 'ივლ','áƒáƒ’ვ','სექ','áƒáƒ¥áƒ¢','ნáƒáƒ”','დეკ'],
+ dayNames: ['კვირáƒ','áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—ი','სáƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—ი','áƒáƒ—ხშáƒáƒ‘áƒáƒ—ი','ხუთშáƒáƒ‘áƒáƒ—ი','პáƒáƒ áƒáƒ¡áƒ™áƒ”ვი','შáƒáƒ‘áƒáƒ—ი'],
+ dayNamesShort: ['კვ','áƒáƒ áƒ¨','სáƒáƒ›','áƒáƒ—ხ','ხუთ','პáƒáƒ ','შáƒáƒ‘'],
+ dayNamesMin: ['კვ','áƒáƒ áƒ¨','სáƒáƒ›','áƒáƒ—ხ','ხუთ','პáƒáƒ ','შáƒáƒ‘'],
+ weekHeader: 'კვირáƒ',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ka']);
+});
+
+/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['kk'] = {
+ closeText: 'Жабу',
+ prevText: '&#x3c;Ðлдыңғы',
+ nextText: 'КелеÑÑ–&#x3e;',
+ currentText: 'Бүгін',
+ monthNames: ['Қаңтар','Ðқпан','Ðаурыз','Сәуір','Мамыр','МауÑым',
+ 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','ЖелтоқÑан'],
+ monthNamesShort: ['Қаң','Ðқп','Ðау','Сәу','Мам','Мау',
+ 'Шіл','Там','Қыр','Қаз','Қар','Жел'],
+ dayNames: ['ЖекÑенбі','ДүйÑенбі','СейÑенбі','СәрÑенбі','БейÑенбі','Жұма','Сенбі'],
+ dayNamesShort: ['жкÑ','дÑн','ÑÑн','ÑÑ€Ñ','бÑн','жма','Ñнб'],
+ dayNamesMin: ['Жк','ДÑ','СÑ','Ср','БÑ','Жм','Сн'],
+ weekHeader: 'Ðе',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['kk']);
+});
+
+/* Khmer initialisation for the jQuery calendar extension. */
+/* Written by Chandara Om (chandara.teacher@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['km'] = {
+ closeText: 'ធ្វើ​រួច',
+ prevText: 'មុន',
+ nextText: 'បន្ទាប់',
+ currentText: 'ážáŸ’ងៃ​នáŸáŸ‡',
+ monthNames: ['មករា','កុម្ភៈ','មីនា','មáŸážŸáž¶','ឧសភា','មិážáž»áž“ា',
+ 'កក្កដា','សីហា','កញ្ញា','ážáž»áž›áž¶','វិច្ឆិកា','ធ្នូ'],
+ monthNamesShort: ['មករា','កុម្ភៈ','មីនា','មáŸážŸáž¶','ឧសភា','មិážáž»áž“ា',
+ 'កក្កដា','សីហា','កញ្ញា','ážáž»áž›áž¶','វិច្ឆិកា','ធ្នូ'],
+ dayNames: ['អាទិážáŸ’áž™', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បážáž·áŸ', 'សុក្រ', 'សៅរáŸ'],
+ dayNamesShort: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+ dayNamesMin: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+ weekHeader: 'សប្ដាហáŸ',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['km']);
+});
+
+/* Korean initialisation for the jQuery calendar extension. */
+/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */
+jQuery(function($){
+ $.datepicker.regional['ko'] = {
+ closeText: '닫기',
+ prevText: 'ì´ì „달',
+ nextText: '다ìŒë‹¬',
+ currentText: '오늘',
+ monthNames: ['1ì›”','2ì›”','3ì›”','4ì›”','5ì›”','6ì›”',
+ '7ì›”','8ì›”','9ì›”','10ì›”','11ì›”','12ì›”'],
+ monthNamesShort: ['1ì›”','2ì›”','3ì›”','4ì›”','5ì›”','6ì›”',
+ '7ì›”','8ì›”','9ì›”','10ì›”','11ì›”','12ì›”'],
+ dayNames: ['ì¼ìš”ì¼','월요ì¼','화요ì¼','수요ì¼','목요ì¼','금요ì¼','토요ì¼'],
+ dayNamesShort: ['ì¼','ì›”','í™”','수','목','금','토'],
+ dayNamesMin: ['ì¼','ì›”','í™”','수','목','금','토'],
+ weekHeader: 'Wk',
+ dateFormat: 'yy-mm-dd',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: 'ë…„'};
+ $.datepicker.setDefaults($.datepicker.regional['ko']);
+});
+/* Luxembourgish initialisation for the jQuery UI date picker plugin. */
+/* Written by Michel Weimerskirch <michel@weimerskirch.net> */
+jQuery(function($){
+ $.datepicker.regional['lb'] = {
+ closeText: 'Fäerdeg',
+ prevText: 'Zréck',
+ nextText: 'Weider',
+ currentText: 'Haut',
+ monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni',
+ 'Juli','August','September','Oktober','November','Dezember'],
+ monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
+ dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'],
+ dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'],
+ dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'],
+ weekHeader: 'W',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['lb']);
+});
+
+/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas@avalon.lt> */
+jQuery(function($){
+ $.datepicker.regional['lt'] = {
+ closeText: 'Uždaryti',
+ prevText: '&#x3c;Atgal',
+ nextText: 'Pirmyn&#x3e;',
+ currentText: 'Å iandien',
+ monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
+ 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
+ monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
+ 'Lie','Rugp','Rugs','Spa','Lap','Gru'],
+ dayNames: ['sekmadienis','pirmadienis','antradienis','treÄiadienis','ketvirtadienis','penktadienis','Å¡eÅ¡tadienis'],
+ dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
+ dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Å e'],
+ weekHeader: 'Wk',
+ dateFormat: 'yy-mm-dd',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['lt']);
+});
+/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
+jQuery(function($){
+ $.datepicker.regional['lv'] = {
+ closeText: 'Aizvērt',
+ prevText: 'Iepr',
+ nextText: 'NÄka',
+ currentText: 'Å odien',
+ monthNames: ['JanvÄris','FebruÄris','Marts','AprÄ«lis','Maijs','JÅ«nijs',
+ 'JÅ«lijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','JÅ«n',
+ 'JÅ«l','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
+ dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
+ dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
+ weekHeader: 'Nav',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['lv']);
+});
+/* Macedonian i18n for the jQuery UI date picker plugin. */
+/* Written by Stojce Slavkovski. */
+jQuery(function($){
+ $.datepicker.regional['mk'] = {
+ closeText: 'Затвори',
+ prevText: '&#x3C;',
+ nextText: '&#x3E;',
+ currentText: 'ДенеÑ',
+ monthNames: ['Јануари','Февруари','Март','Ðприл','Мај','Јуни',
+ 'Јули','ÐвгуÑÑ‚','Септември','Октомври','Ðоември','Декември'],
+ monthNamesShort: ['Јан','Фев','Мар','Ðпр','Мај','Јун',
+ 'Јул','Ðвг','Сеп','Окт','Ðое','Дек'],
+ dayNames: ['Ðедела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'],
+ dayNamesShort: ['Ðед','Пон','Вто','Сре','Чет','Пет','Саб'],
+ dayNamesMin: ['Ðе','По','Ð’Ñ‚','Ср','Че','Пе','Са'],
+ weekHeader: 'Сед',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['mk']);
+});
+
+/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Saji Nediyanchath (saji89@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['ml'] = {
+ closeText: 'ശരി',
+ prevText: 'à´®àµà´¨àµà´¨à´¤àµà´¤àµ†',
+ nextText: 'à´…à´Ÿàµà´¤àµà´¤à´¤àµ ',
+ currentText: 'ഇനàµà´¨àµ',
+ monthNames: ['ജനàµà´µà´°à´¿','ഫെബàµà´°àµà´µà´°à´¿','മാരàµâ€à´šàµà´šàµ','à´à´ªàµà´°à´¿à´²àµâ€','മേയàµ','ജൂണàµâ€',
+ 'ജൂലൈ','ആഗസàµà´±àµà´±àµ','സെപàµà´±àµà´±à´‚ബരàµâ€','à´’à´•àµà´Ÿàµ‹à´¬à´°àµâ€','നവംബരàµâ€','ഡിസംബരàµâ€'],
+ monthNamesShort: ['ജനàµ', 'ഫെബàµ', 'മാരàµâ€', 'à´à´ªàµà´°à´¿', 'മേയàµ', 'ജൂണàµâ€',
+ 'ജൂലാ', 'ആഗ', 'സെപàµ', 'à´’à´•àµà´Ÿàµ‹', 'നവം', 'à´¡à´¿à´¸'],
+ dayNames: ['ഞായരàµâ€', 'തിങàµà´•à´³àµâ€', 'ചൊവàµà´µ', 'à´¬àµà´§à´¨àµâ€', 'à´µàµà´¯à´¾à´´à´‚', 'വെളàµà´³à´¿', 'ശനി'],
+ dayNamesShort: ['ഞായ', 'തിങàµà´•', 'ചൊവàµà´µ', 'à´¬àµà´§', 'à´µàµà´¯à´¾à´´à´‚', 'വെളàµà´³à´¿', 'ശനി'],
+ dayNamesMin: ['à´žà´¾','തി','ചൊ','à´¬àµ','à´µàµà´¯à´¾','വെ','à´¶'],
+ weekHeader: 'à´†',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ml']);
+});
+
+/* Malaysian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
+jQuery(function($){
+ $.datepicker.regional['ms'] = {
+ closeText: 'Tutup',
+ prevText: '&#x3c;Sebelum',
+ nextText: 'Selepas&#x3e;',
+ currentText: 'hari ini',
+ monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
+ 'Julai','Ogos','September','Oktober','November','Disember'],
+ monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
+ 'Jul','Ogo','Sep','Okt','Nov','Dis'],
+ dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
+ dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
+ dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
+ weekHeader: 'Mg',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ms']);
+});
+/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
+/* David De Sloovere @DavidDeSloovere */
+jQuery(function($){
+ $.datepicker.regional['nl-BE'] = {
+ closeText: 'Sluiten',
+ prevText: 'â†',
+ nextText: '→',
+ currentText: 'Vandaag',
+ monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+ 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+ monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+ 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+ dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+ dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+ dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['nl-BE']);
+});
+
+/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Mathias Bynens <http://mathiasbynens.be/> */
+jQuery(function($){
+ $.datepicker.regional.nl = {
+ closeText: 'Sluiten',
+ prevText: 'â†',
+ nextText: '→',
+ currentText: 'Vandaag',
+ monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+ 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+ monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+ 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+ dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+ dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+ dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional.nl);
+});
+/* Norwegian initialisation for the jQuery UI date picker plugin. */
+/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
+
+jQuery(function($){
+ $.datepicker.regional['no'] = {
+ closeText: 'Lukk',
+ prevText: '&laquo;Forrige',
+ nextText: 'Neste&raquo;',
+ currentText: 'I dag',
+ monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+ monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+ dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
+ dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
+ dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
+ weekHeader: 'Uke',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''
+ };
+ $.datepicker.setDefaults($.datepicker.regional['no']);
+});
+
+/* Polish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['pl'] = {
+ closeText: 'Zamknij',
+ prevText: '&#x3c;Poprzedni',
+ nextText: 'Następny&#x3e;',
+ currentText: 'DziÅ›',
+ monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
+ 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
+ monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
+ 'Lip','Sie','Wrz','Pa','Lis','Gru'],
+ dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
+ dayNamesShort: ['Nie','Pn','Wt','Åšr','Czw','Pt','So'],
+ dayNamesMin: ['N','Pn','Wt','Åšr','Cz','Pt','So'],
+ weekHeader: 'Tydz',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['pl']);
+});
+
+/* Brazilian initialisation for the jQuery UI date picker plugin. */
+/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['pt-BR'] = {
+ closeText: 'Fechar',
+ prevText: '&#x3c;Anterior',
+ nextText: 'Pr&oacute;ximo&#x3e;',
+ currentText: 'Hoje',
+ monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
+ 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+ monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+ 'Jul','Ago','Set','Out','Nov','Dez'],
+ dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
+ dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+ dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['pt-BR']);
+});
+/* Portuguese initialisation for the jQuery UI date picker plugin. */
+jQuery(function($){
+ $.datepicker.regional['pt'] = {
+ closeText: 'Fechar',
+ prevText: '&#x3c;Anterior',
+ nextText: 'Seguinte',
+ currentText: 'Hoje',
+ monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
+ 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+ monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+ 'Jul','Ago','Set','Out','Nov','Dez'],
+ dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
+ dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+ dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+ weekHeader: 'Sem',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['pt']);
+});
+/* Romansh initialisation for the jQuery UI date picker plugin. */
+/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */
+jQuery(function($){
+ $.datepicker.regional['rm'] = {
+ closeText: 'Serrar',
+ prevText: '&#x3c;Suandant',
+ nextText: 'Precedent&#x3e;',
+ currentText: 'Actual',
+ monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'],
+ monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'],
+ dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'],
+ dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'],
+ dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'],
+ weekHeader: 'emna',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['rm']);
+});
+
+/* Romanian initialisation for the jQuery UI date picker plugin.
+ *
+ * Written by Edmond L. (ll_edmond@walla.com)
+ * and Ionut G. Stan (ionut.g.stan@gmail.com)
+ */
+jQuery(function($){
+ $.datepicker.regional['ro'] = {
+ closeText: 'ÃŽnchide',
+ prevText: '&laquo; Luna precedentă',
+ nextText: 'Luna următoare &raquo;',
+ currentText: 'Azi',
+ monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
+ 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
+ monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
+ 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
+ dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
+ dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
+ weekHeader: 'Săpt',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ro']);
+});
+
+/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Andrew Stromnov (stromnov@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['ru'] = {
+ closeText: 'Закрыть',
+ prevText: '&#x3c;Пред',
+ nextText: 'След&#x3e;',
+ currentText: 'СегоднÑ',
+ monthNames: ['Январь','Февраль','Март','Ðпрель','Май','Июнь',
+ 'Июль','ÐвгуÑÑ‚','СентÑбрь','ОктÑбрь','ÐоÑбрь','Декабрь'],
+ monthNamesShort: ['Янв','Фев','Мар','Ðпр','Май','Июн',
+ 'Июл','Ðвг','Сен','Окт','ÐоÑ','Дек'],
+ dayNames: ['воÑкреÑенье','понедельник','вторник','Ñреда','четверг','пÑтница','Ñуббота'],
+ dayNamesShort: ['вÑк','пнд','втр','Ñрд','чтв','птн','Ñбт'],
+ dayNamesMin: ['Ð’Ñ','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'],
+ weekHeader: 'Ðед',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ru']);
+});
+/* Slovak initialisation for the jQuery UI date picker plugin. */
+/* Written by Vojtech Rinik (vojto@hmm.sk). */
+jQuery(function($){
+ $.datepicker.regional['sk'] = {
+ closeText: 'Zavrieť',
+ prevText: '&#x3c;Predchádzajúci',
+ nextText: 'Nasledujúci&#x3e;',
+ currentText: 'Dnes',
+ monthNames: ['Január','Február','Marec','Apríl','Máj','Jún',
+ 'Júl','August','September','Október','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
+ 'Júl','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'],
+ dayNamesShort: ['Ned','Pon','Uto','Str','Å tv','Pia','Sob'],
+ dayNamesMin: ['Ne','Po','Ut','St','Å t','Pia','So'],
+ weekHeader: 'Ty',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sk']);
+});
+
+/* Slovenian initialisation for the jQuery UI date picker plugin. */
+/* Written by Jaka Jancar (jaka@kubje.org). */
+/* c = &#x10D;, s = &#x161; z = &#x17E; C = &#x10C; S = &#x160; Z = &#x17D; */
+jQuery(function($){
+ $.datepicker.regional['sl'] = {
+ closeText: 'Zapri',
+ prevText: '&lt;Prej&#x161;nji',
+ nextText: 'Naslednji&gt;',
+ currentText: 'Trenutni',
+ monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
+ 'Julij','Avgust','September','Oktober','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Avg','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','&#x10C;etrtek','Petek','Sobota'],
+ dayNamesShort: ['Ned','Pon','Tor','Sre','&#x10C;et','Pet','Sob'],
+ dayNamesMin: ['Ne','Po','To','Sr','&#x10C;e','Pe','So'],
+ weekHeader: 'Teden',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sl']);
+});
+
+/* Albanian initialisation for the jQuery UI date picker plugin. */
+/* Written by Flakron Bytyqi (flakron@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['sq'] = {
+ closeText: 'mbylle',
+ prevText: '&#x3c;mbrapa',
+ nextText: 'Përpara&#x3e;',
+ currentText: 'sot',
+ monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
+ 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
+ monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
+ 'Kor','Gus','Sht','Tet','Nën','Dhj'],
+ dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
+ dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+ dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+ weekHeader: 'Ja',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sq']);
+});
+
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+ $.datepicker.regional['sr-SR'] = {
+ closeText: 'Zatvori',
+ prevText: '&#x3c;',
+ nextText: '&#x3e;',
+ currentText: 'Danas',
+ monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
+ 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Avg','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','ÄŒetvrtak','Petak','Subota'],
+ dayNamesShort: ['Ned','Pon','Uto','Sre','ÄŒet','Pet','Sub'],
+ dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+ weekHeader: 'Sed',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sr-SR']);
+});
+
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+ $.datepicker.regional['sr'] = {
+ closeText: 'Затвори',
+ prevText: '&#x3c;',
+ nextText: '&#x3e;',
+ currentText: 'ДанаÑ',
+ monthNames: ['Јануар','Фебруар','Март','Ðприл','Мај','Јун',
+ 'Јул','ÐвгуÑÑ‚','Септембар','Октобар','Ðовембар','Децембар'],
+ monthNamesShort: ['Јан','Феб','Мар','Ðпр','Мај','Јун',
+ 'Јул','Ðвг','Сеп','Окт','Ðов','Дец'],
+ dayNames: ['Ðедеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
+ dayNamesShort: ['Ðед','Пон','Уто','Сре','Чет','Пет','Суб'],
+ dayNamesMin: ['Ðе','По','Ут','Ср','Че','Пе','Су'],
+ weekHeader: 'Сед',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sr']);
+});
+
+/* Swedish initialisation for the jQuery UI date picker plugin. */
+/* Written by Anders Ekdahl ( anders@nomadiz.se). */
+jQuery(function($){
+ $.datepicker.regional['sv'] = {
+ closeText: 'Stäng',
+ prevText: '&laquo;Förra',
+ nextText: 'Nästa&raquo;',
+ currentText: 'Idag',
+ monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
+ 'Juli','Augusti','September','Oktober','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dec'],
+ dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
+ dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
+ dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
+ weekHeader: 'Ve',
+ dateFormat: 'yy-mm-dd',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sv']);
+});
+
+/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by S A Sureshkumar (saskumar@live.com). */
+jQuery(function($){
+ $.datepicker.regional['ta'] = {
+ closeText: 'மூடà¯',
+ prevText: 'à®®à¯à®©à¯à®©à¯ˆà®¯à®¤à¯',
+ nextText: 'அடà¯à®¤à¯à®¤à®¤à¯',
+ currentText: 'இனà¯à®±à¯',
+ monthNames: ['தை','மாசி','பஙà¯à®•à¯à®©à®¿','சிதà¯à®¤à®¿à®°à¯ˆ','வைகாசி','ஆனி',
+ 'ஆடி','ஆவணி','பà¯à®°à®Ÿà¯à®Ÿà®¾à®šà®¿','à®à®ªà¯à®ªà®šà®¿','காரà¯à®¤à¯à®¤à®¿à®•à¯ˆ','மாரà¯à®•à®´à®¿'],
+ monthNamesShort: ['தை','மாசி','பஙà¯','சிதà¯','வைகா','ஆனி',
+ 'ஆடி','ஆவ','பà¯à®°','à®à®ªà¯','காரà¯','மாரà¯'],
+ dayNames: ['ஞாயிறà¯à®±à¯à®•à¯à®•à®¿à®´à®®à¯ˆ','திஙà¯à®•à®Ÿà¯à®•à®¿à®´à®®à¯ˆ','செவà¯à®µà®¾à®¯à¯à®•à¯à®•à®¿à®´à®®à¯ˆ','பà¯à®¤à®©à¯à®•à®¿à®´à®®à¯ˆ','வியாழகà¯à®•à®¿à®´à®®à¯ˆ','வெளà¯à®³à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ','சனிகà¯à®•à®¿à®´à®®à¯ˆ'],
+ dayNamesShort: ['ஞாயிறà¯','திஙà¯à®•à®³à¯','செவà¯à®µà®¾à®¯à¯','பà¯à®¤à®©à¯','வியாழனà¯','வெளà¯à®³à®¿','சனி'],
+ dayNamesMin: ['ஞா','தி','செ','பà¯','வி','வெ','ச'],
+ weekHeader: 'Ðе',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ta']);
+});
+
+/* Thai initialisation for the jQuery UI date picker plugin. */
+/* Written by pipo (pipo@sixhead.com). */
+jQuery(function($){
+ $.datepicker.regional['th'] = {
+ closeText: 'ปิด',
+ prevText: '&laquo;&nbsp;ย้อน',
+ nextText: 'ถัดไป&nbsp;&raquo;',
+ currentText: 'วันนี้',
+ monthNames: ['มà¸à¸£à¸²à¸„ม','à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
+ 'à¸à¸£à¸à¸Žà¸²à¸„ม','สิงหาคม','à¸à¸±à¸™à¸¢à¸²à¸¢à¸™','ตุลาคม','พฤศจิà¸à¸²à¸¢à¸™','ธันวาคม'],
+ monthNamesShort: ['ม.ค.','à¸.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
+ 'à¸.ค.','ส.ค.','à¸.ย.','ต.ค.','พ.ย.','ธ.ค.'],
+ dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุà¸à¸£à¹Œ','เสาร์'],
+ dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+ dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['th']);
+});
+/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['tj'] = {
+ closeText: 'Идома',
+ prevText: '&#x3c;Қафо',
+ nextText: 'Пеш&#x3e;',
+ currentText: 'Имрӯз',
+ monthNames: ['Январ','Феврал','Март','Ðпрел','Май','Июн',
+ 'Июл','ÐвгуÑÑ‚','СентÑбр','ОктÑбр','ÐоÑбр','Декабр'],
+ monthNamesShort: ['Янв','Фев','Мар','Ðпр','Май','Июн',
+ 'Июл','Ðвг','Сен','Окт','ÐоÑ','Дек'],
+ dayNames: ['Ñкшанбе','душанбе','Ñешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'],
+ dayNamesShort: ['Ñкш','душ','Ñеш','чор','пан','ҷум','шан'],
+ dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'],
+ weekHeader: 'Хф',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['tj']);
+});
+/* Turkish initialisation for the jQuery UI date picker plugin. */
+/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
+jQuery(function($){
+ $.datepicker.regional['tr'] = {
+ closeText: 'kapat',
+ prevText: '&#x3c;geri',
+ nextText: 'ileri&#x3e',
+ currentText: 'bugün',
+ monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
+ 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
+ monthNamesShort: ['Oca','Åžub','Mar','Nis','May','Haz',
+ 'Tem','AÄŸu','Eyl','Eki','Kas','Ara'],
+ dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
+ dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+ dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+ weekHeader: 'Hf',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['tr']);
+});
+/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
+/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['uk'] = {
+ closeText: 'Закрити',
+ prevText: '&#x3c;',
+ nextText: '&#x3e;',
+ currentText: 'Сьогодні',
+ monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
+ 'Липень','Серпень','ВереÑень','Жовтень','ЛиÑтопад','Грудень'],
+ monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
+ 'Лип','Сер','Вер','Жов','ЛиÑ','Гру'],
+ dayNames: ['неділÑ','понеділок','вівторок','Ñереда','четвер','п’ÑтницÑ','Ñубота'],
+ dayNamesShort: ['нед','пнд','вів','Ñрд','чтв','птн','Ñбт'],
+ dayNamesMin: ['Ðд','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'],
+ weekHeader: 'Тиж',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['uk']);
+});
+/* Vietnamese initialisation for the jQuery UI date picker plugin. */
+/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
+jQuery(function($){
+ $.datepicker.regional['vi'] = {
+ closeText: 'Äóng',
+ prevText: '&#x3c;TrÆ°á»›c',
+ nextText: 'Tiếp&#x3e;',
+ currentText: 'Hôm nay',
+ monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
+ 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng MÆ°á»i', 'Tháng MÆ°á»i Má»™t', 'Tháng MÆ°á»i Hai'],
+ monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
+ 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
+ dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
+ dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+ dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+ weekHeader: 'Tu',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['vi']);
+});
+
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Cloudream (cloudream@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['zh-CN'] = {
+ closeText: '关闭',
+ prevText: '&#x3c;上月',
+ nextText: '下月&#x3e;',
+ currentText: '今天',
+ monthNames: ['一月','二月','三月','四月','五月','六月',
+ '七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+ monthNamesShort: ['一','二','三','四','五','六',
+ '七','å…«','ä¹','å','å一','å二'],
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+ dayNamesMin: ['日','一','二','三','四','五','六'],
+ weekHeader: '周',
+ dateFormat: 'yy-mm-dd',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: 'å¹´'};
+ $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
+});
+
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by SCCY (samuelcychan@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['zh-HK'] = {
+ closeText: '關閉',
+ prevText: '&#x3c;上月',
+ nextText: '下月&#x3e;',
+ currentText: '今天',
+ monthNames: ['一月','二月','三月','四月','五月','六月',
+ '七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+ monthNamesShort: ['一','二','三','四','五','六',
+ '七','å…«','ä¹','å','å一','å二'],
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+ dayNamesMin: ['日','一','二','三','四','五','六'],
+ weekHeader: '周',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: 'å¹´'};
+ $.datepicker.setDefaults($.datepicker.regional['zh-HK']);
+});
+
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Ressol (ressol@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['zh-TW'] = {
+ closeText: '關閉',
+ prevText: '&#x3c;上月',
+ nextText: '下月&#x3e;',
+ currentText: '今天',
+ monthNames: ['一月','二月','三月','四月','五月','六月',
+ '七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+ monthNamesShort: ['一','二','三','四','五','六',
+ '七','å…«','ä¹','å','å一','å二'],
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+ dayNamesMin: ['日','一','二','三','四','五','六'],
+ weekHeader: '周',
+ dateFormat: 'yy/mm/dd',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: 'å¹´'};
+ $.datepicker.setDefaults($.datepicker.regional['zh-TW']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-af.js b/vendors/jquery/i18n/jquery.ui.datepicker-af.js
new file mode 100644
index 000000000..0922ef7a1
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-af.js
@@ -0,0 +1,23 @@
+/* Afrikaans initialisation for the jQuery UI date picker plugin. */
+/* Written by Renier Pretorius. */
+jQuery(function($){
+ $.datepicker.regional['af'] = {
+ closeText: 'Selekteer',
+ prevText: 'Vorige',
+ nextText: 'Volgende',
+ currentText: 'Vandag',
+ monthNames: ['Januarie','Februarie','Maart','April','Mei','Junie',
+ 'Julie','Augustus','September','Oktober','November','Desember'],
+ monthNamesShort: ['Jan', 'Feb', 'Mrt', 'Apr', 'Mei', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'],
+ dayNames: ['Sondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrydag', 'Saterdag'],
+ dayNamesShort: ['Son', 'Maa', 'Din', 'Woe', 'Don', 'Vry', 'Sat'],
+ dayNamesMin: ['So','Ma','Di','Wo','Do','Vr','Sa'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['af']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-ar-DZ.js b/vendors/jquery/i18n/jquery.ui.datepicker-ar-DZ.js
new file mode 100644
index 000000000..e0e1685d8
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-ar-DZ.js
@@ -0,0 +1,23 @@
+/* Algerian Arabic Translation for jQuery UI date picker plugin. (can be used for Tunisia)*/
+/* Mohamed Cherif BOUCHELAGHEM -- cherifbouchelaghem@yahoo.fr */
+
+jQuery(function($){
+ $.datepicker.regional['ar-DZ'] = {
+ closeText: 'إغلاق',
+ prevText: '&#x3c;السابق',
+ nextText: 'التالي&#x3e;',
+ currentText: 'اليوم',
+ monthNames: ['جانÙÙŠ', 'ÙÙŠÙري', 'مارس', 'Ø£Ùريل', 'ماي', 'جوان',
+ 'جويلية', 'أوت', 'سبتمبر','أكتوبر', 'نوÙمبر', 'ديسمبر'],
+ monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+ dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesMin: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ weekHeader: 'أسبوع',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 6,
+ isRTL: true,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ar-DZ']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-ar.js b/vendors/jquery/i18n/jquery.ui.datepicker-ar.js
new file mode 100644
index 000000000..8a9218d8b
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-ar.js
@@ -0,0 +1,23 @@
+/* Arabic Translation for jQuery UI date picker plugin. */
+/* Khaled Alhourani -- me@khaledalhourani.com */
+/* NOTE: monthNames are the original months names and they are the Arabic names, not the new months name Ùبراير - يناير and there isn't any Arabic roots for these months */
+jQuery(function($){
+ $.datepicker.regional['ar'] = {
+ closeText: 'إغلاق',
+ prevText: '&#x3c;السابق',
+ nextText: 'التالي&#x3e;',
+ currentText: 'اليوم',
+ monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'مايو', 'حزيران',
+ 'تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
+ monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
+ dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesShort: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],
+ dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],
+ weekHeader: 'أسبوع',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 6,
+ isRTL: true,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ar']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-az.js b/vendors/jquery/i18n/jquery.ui.datepicker-az.js
new file mode 100644
index 000000000..57802a40b
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-az.js
@@ -0,0 +1,23 @@
+/* Azerbaijani (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Jamil Najafov (necefov33@gmail.com). */
+jQuery(function($) {
+ $.datepicker.regional['az'] = {
+ closeText: 'BaÄŸla',
+ prevText: '&#x3c;Geri',
+ nextText: 'İrəli&#x3e;',
+ currentText: 'Bugün',
+ monthNames: ['Yanvar','Fevral','Mart','Aprel','May','Ä°yun',
+ 'Ä°yul','Avqust','Sentyabr','Oktyabr','Noyabr','Dekabr'],
+ monthNamesShort: ['Yan','Fev','Mar','Apr','May','Ä°yun',
+ 'Ä°yul','Avq','Sen','Okt','Noy','Dek'],
+ dayNames: ['Bazar','Bazar ertəsi','Çərşənbə axşamı','Çərşənbə','Cümə axşamı','Cümə','Şənbə'],
+ dayNamesShort: ['B','Be','Ça','Ç','Ca','C','Ş'],
+ dayNamesMin: ['B','B','Ç','С','Ç','C','Ş'],
+ weekHeader: 'Hf',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['az']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-bg.js b/vendors/jquery/i18n/jquery.ui.datepicker-bg.js
new file mode 100644
index 000000000..c19d20fb1
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-bg.js
@@ -0,0 +1,24 @@
+/* Bulgarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Stoyan Kyosev (http://svest.org). */
+jQuery(function($){
+ $.datepicker.regional['bg'] = {
+ closeText: 'затвори',
+ prevText: '&#x3c;назад',
+ nextText: 'напред&#x3e;',
+ nextBigText: '&#x3e;&#x3e;',
+ currentText: 'днеÑ',
+ monthNames: ['Януари','Февруари','Март','Ðприл','Май','Юни',
+ 'Юли','ÐвгуÑÑ‚','Септември','Октомври','Ðоември','Декември'],
+ monthNamesShort: ['Яну','Фев','Мар','Ðпр','Май','Юни',
+ 'Юли','Ðвг','Сеп','Окт','Ðов','Дек'],
+ dayNames: ['ÐеделÑ','Понеделник','Вторник','СрÑда','Четвъртък','Петък','Събота'],
+ dayNamesShort: ['Ðед','Пон','Вто','СрÑ','Чет','Пет','Съб'],
+ dayNamesMin: ['Ðе','По','Ð’Ñ‚','Ср','Че','Пе','Съ'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['bg']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-bs.js b/vendors/jquery/i18n/jquery.ui.datepicker-bs.js
new file mode 100644
index 000000000..d4dc8b0ec
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-bs.js
@@ -0,0 +1,23 @@
+/* Bosnian i18n for the jQuery UI date picker plugin. */
+/* Written by Kenan Konjo. */
+jQuery(function($){
+ $.datepicker.regional['bs'] = {
+ closeText: 'Zatvori',
+ prevText: '&#x3c;',
+ nextText: '&#x3e;',
+ currentText: 'Danas',
+ monthNames: ['Januar','Februar','Mart','April','Maj','Juni',
+ 'Juli','August','Septembar','Oktobar','Novembar','Decembar'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedelja','Ponedeljak','Utorak','Srijeda','ÄŒetvrtak','Petak','Subota'],
+ dayNamesShort: ['Ned','Pon','Uto','Sri','ÄŒet','Pet','Sub'],
+ dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['bs']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-ca.js b/vendors/jquery/i18n/jquery.ui.datepicker-ca.js
new file mode 100644
index 000000000..b128e699e
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-ca.js
@@ -0,0 +1,23 @@
+/* Inicialització en català per a l'extenció 'calendar' per jQuery. */
+/* Writers: (joan.leon@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['ca'] = {
+ closeText: 'Tancar',
+ prevText: '&#x3c;Ant',
+ nextText: 'Seg&#x3e;',
+ currentText: 'Avui',
+ monthNames: ['Gener','Febrer','Mar&ccedil;','Abril','Maig','Juny',
+ 'Juliol','Agost','Setembre','Octubre','Novembre','Desembre'],
+ monthNamesShort: ['Gen','Feb','Mar','Abr','Mai','Jun',
+ 'Jul','Ago','Set','Oct','Nov','Des'],
+ dayNames: ['Diumenge','Dilluns','Dimarts','Dimecres','Dijous','Divendres','Dissabte'],
+ dayNamesShort: ['Dug','Dln','Dmt','Dmc','Djs','Dvn','Dsb'],
+ dayNamesMin: ['Dg','Dl','Dt','Dc','Dj','Dv','Ds'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ca']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-cs.js b/vendors/jquery/i18n/jquery.ui.datepicker-cs.js
new file mode 100644
index 000000000..9805bcdb8
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-cs.js
@@ -0,0 +1,23 @@
+/* Czech initialisation for the jQuery UI date picker plugin. */
+/* Written by Tomas Muller (tomas@tomas-muller.net). */
+jQuery(function($){
+ $.datepicker.regional['cs'] = {
+ closeText: 'Zavřít',
+ prevText: '&#x3c;Dříve',
+ nextText: 'Později&#x3e;',
+ currentText: 'Nyní',
+ monthNames: ['leden','únor','bÅ™ezen','duben','kvÄ›ten','Äerven',
+ 'Äervenec','srpen','září','říjen','listopad','prosinec'],
+ monthNamesShort: ['led','úno','bÅ™e','dub','kvÄ›','Äer',
+ 'Ävc','srp','zář','říj','lis','pro'],
+ dayNames: ['nedÄ›le', 'pondÄ›lí', 'úterý', 'stÅ™eda', 'Ätvrtek', 'pátek', 'sobota'],
+ dayNamesShort: ['ne', 'po', 'út', 'st', 'Ät', 'pá', 'so'],
+ dayNamesMin: ['ne','po','út','st','Ät','pá','so'],
+ weekHeader: 'Týd',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['cs']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-cy-GB.js b/vendors/jquery/i18n/jquery.ui.datepicker-cy-GB.js
new file mode 100644
index 000000000..dfee2f9d4
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-cy-GB.js
@@ -0,0 +1,23 @@
+/* Welsh/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by William Griffiths. */
+jQuery(function($){
+ $.datepicker.regional['cy-GB'] = {
+ closeText: 'Done',
+ prevText: 'Prev',
+ nextText: 'Next',
+ currentText: 'Today',
+ monthNames: ['Ionawr','Chwefror','Mawrth','Ebrill','Mai','Mehefin',
+ 'Gorffennaf','Awst','Medi','Hydref','Tachwedd','Rhagfyr'],
+ monthNamesShort: ['Ion', 'Chw', 'Maw', 'Ebr', 'Mai', 'Meh',
+ 'Gor', 'Aws', 'Med', 'Hyd', 'Tac', 'Rha'],
+ dayNames: ['Dydd Sul', 'Dydd Llun', 'Dydd Mawrth', 'Dydd Mercher', 'Dydd Iau', 'Dydd Gwener', 'Dydd Sadwrn'],
+ dayNamesShort: ['Sul', 'Llu', 'Maw', 'Mer', 'Iau', 'Gwe', 'Sad'],
+ dayNamesMin: ['Su','Ll','Ma','Me','Ia','Gw','Sa'],
+ weekHeader: 'Wy',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['cy-GB']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-da.js b/vendors/jquery/i18n/jquery.ui.datepicker-da.js
new file mode 100644
index 000000000..176044e18
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-da.js
@@ -0,0 +1,23 @@
+/* Danish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jan Christensen ( deletestuff@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['da'] = {
+ closeText: 'Luk',
+ prevText: '&#x3c;Forrige',
+ nextText: 'Næste&#x3e;',
+ currentText: 'Idag',
+ monthNames: ['Januar','Februar','Marts','April','Maj','Juni',
+ 'Juli','August','September','Oktober','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['Søndag','Mandag','Tirsdag','Onsdag','Torsdag','Fredag','Lørdag'],
+ dayNamesShort: ['Søn','Man','Tir','Ons','Tor','Fre','Lør'],
+ dayNamesMin: ['Sø','Ma','Ti','On','To','Fr','Lø'],
+ weekHeader: 'Uge',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['da']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-de.js b/vendors/jquery/i18n/jquery.ui.datepicker-de.js
new file mode 100644
index 000000000..f3ef9e82c
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-de.js
@@ -0,0 +1,23 @@
+/* German initialisation for the jQuery UI date picker plugin. */
+/* Written by Milian Wolff (mail@milianw.de). */
+jQuery(function($){
+ $.datepicker.regional['de'] = {
+ closeText: 'schließen',
+ prevText: '&#x3c;zurück',
+ nextText: 'Vor&#x3e;',
+ currentText: 'heute',
+ monthNames: ['Januar','Februar','März','April','Mai','Juni',
+ 'Juli','August','September','Oktober','November','Dezember'],
+ monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dez'],
+ dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
+ dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
+ weekHeader: 'KW',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['de']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-el.js b/vendors/jquery/i18n/jquery.ui.datepicker-el.js
new file mode 100644
index 000000000..6d775f995
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-el.js
@@ -0,0 +1,23 @@
+/* Greek (el) initialisation for the jQuery UI date picker plugin. */
+/* Written by Alex Cicovic (http://www.alexcicovic.com) */
+jQuery(function($){
+ $.datepicker.regional['el'] = {
+ closeText: 'Κλείσιμο',
+ prevText: 'ΠÏοηγοÏμενος',
+ nextText: 'Επόμενος',
+ currentText: 'ΤÏέχων Μήνας',
+ monthNames: ['ΙανουάÏιος','ΦεβÏουάÏιος','ΜάÏτιος','ΑπÏίλιος','Μάιος','ΙοÏνιος',
+ 'ΙοÏλιος','ΑÏγουστος','ΣεπτέμβÏιος','ΟκτώβÏιος','ÎοέμβÏιος','ΔεκέμβÏιος'],
+ monthNamesShort: ['Ιαν','Φεβ','ΜαÏ','ΑπÏ','Μαι','Ιουν',
+ 'Ιουλ','Αυγ','Σεπ','Οκτ','Îοε','Δεκ'],
+ dayNames: ['ΚυÏιακή','ΔευτέÏα','ΤÏίτη','ΤετάÏτη','Πέμπτη','ΠαÏασκευή','Σάββατο'],
+ dayNamesShort: ['ΚυÏ','Δευ','ΤÏι','Τετ','Πεμ','ΠαÏ','Σαβ'],
+ dayNamesMin: ['Κυ','Δε','ΤÏ','Τε','Πε','Πα','Σα'],
+ weekHeader: 'Εβδ',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['el']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-en-AU.js b/vendors/jquery/i18n/jquery.ui.datepicker-en-AU.js
new file mode 100644
index 000000000..c1a1020a1
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-en-AU.js
@@ -0,0 +1,23 @@
+/* English/Australia initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+ $.datepicker.regional['en-AU'] = {
+ closeText: 'Done',
+ prevText: 'Prev',
+ nextText: 'Next',
+ currentText: 'Today',
+ monthNames: ['January','February','March','April','May','June',
+ 'July','August','September','October','November','December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['en-AU']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-en-GB.js b/vendors/jquery/i18n/jquery.ui.datepicker-en-GB.js
new file mode 100644
index 000000000..16a096e75
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-en-GB.js
@@ -0,0 +1,23 @@
+/* English/UK initialisation for the jQuery UI date picker plugin. */
+/* Written by Stuart. */
+jQuery(function($){
+ $.datepicker.regional['en-GB'] = {
+ closeText: 'Done',
+ prevText: 'Prev',
+ nextText: 'Next',
+ currentText: 'Today',
+ monthNames: ['January','February','March','April','May','June',
+ 'July','August','September','October','November','December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['en-GB']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-en-NZ.js b/vendors/jquery/i18n/jquery.ui.datepicker-en-NZ.js
new file mode 100644
index 000000000..7819df052
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-en-NZ.js
@@ -0,0 +1,23 @@
+/* English/New Zealand initialisation for the jQuery UI date picker plugin. */
+/* Based on the en-GB initialisation. */
+jQuery(function($){
+ $.datepicker.regional['en-NZ'] = {
+ closeText: 'Done',
+ prevText: 'Prev',
+ nextText: 'Next',
+ currentText: 'Today',
+ monthNames: ['January','February','March','April','May','June',
+ 'July','August','September','October','November','December'],
+ monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
+ dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
+ dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['en-NZ']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-eo.js b/vendors/jquery/i18n/jquery.ui.datepicker-eo.js
new file mode 100644
index 000000000..6cabc2c46
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-eo.js
@@ -0,0 +1,23 @@
+/* Esperanto initialisation for the jQuery UI date picker plugin. */
+/* Written by Olivier M. (olivierweb@ifrance.com). */
+jQuery(function($){
+ $.datepicker.regional['eo'] = {
+ closeText: 'Fermi',
+ prevText: '&lt;Anta',
+ nextText: 'Sekv&gt;',
+ currentText: 'Nuna',
+ monthNames: ['Januaro','Februaro','Marto','Aprilo','Majo','Junio',
+ 'Julio','AÅ­gusto','Septembro','Oktobro','Novembro','Decembro'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','AÅ­g','Sep','Okt','Nov','Dec'],
+ dayNames: ['Dimanĉo','Lundo','Mardo','Merkredo','Ĵaŭdo','Vendredo','Sabato'],
+ dayNamesShort: ['Dim','Lun','Mar','Mer','Ä´aÅ­','Ven','Sab'],
+ dayNamesMin: ['Di','Lu','Ma','Me','Ä´a','Ve','Sa'],
+ weekHeader: 'Sb',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['eo']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-es.js b/vendors/jquery/i18n/jquery.ui.datepicker-es.js
new file mode 100644
index 000000000..a02133de3
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-es.js
@@ -0,0 +1,23 @@
+/* Inicialización en español para la extensión 'UI date picker' para jQuery. */
+/* Traducido por Vester (xvester@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['es'] = {
+ closeText: 'Cerrar',
+ prevText: '&#x3c;Ant',
+ nextText: 'Sig&#x3e;',
+ currentText: 'Hoy',
+ monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
+ 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
+ monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
+ 'Jul','Ago','Sep','Oct','Nov','Dic'],
+ dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
+ dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
+ dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&aacute;'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['es']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-et.js b/vendors/jquery/i18n/jquery.ui.datepicker-et.js
new file mode 100644
index 000000000..32702b243
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-et.js
@@ -0,0 +1,23 @@
+/* Estonian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mart Sõmermaa (mrts.pydev at gmail com). */
+jQuery(function($){
+ $.datepicker.regional['et'] = {
+ closeText: 'Sulge',
+ prevText: 'Eelnev',
+ nextText: 'Järgnev',
+ currentText: 'Täna',
+ monthNames: ['Jaanuar','Veebruar','Märts','Aprill','Mai','Juuni',
+ 'Juuli','August','September','Oktoober','November','Detsember'],
+ monthNamesShort: ['Jaan', 'Veebr', 'Märts', 'Apr', 'Mai', 'Juuni',
+ 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'],
+ dayNames: ['Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'],
+ dayNamesShort: ['Pühap', 'Esmasp', 'Teisip', 'Kolmap', 'Neljap', 'Reede', 'Laup'],
+ dayNamesMin: ['P','E','T','K','N','R','L'],
+ weekHeader: 'näd',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['et']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-eu.js b/vendors/jquery/i18n/jquery.ui.datepicker-eu.js
new file mode 100644
index 000000000..ff66e494c
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-eu.js
@@ -0,0 +1,23 @@
+/* Euskarako oinarria 'UI date picker' jquery-ko extentsioarentzat */
+/* Karrikas-ek itzulia (karrikas@karrikas.com) */
+jQuery(function($){
+ $.datepicker.regional['eu'] = {
+ closeText: 'Egina',
+ prevText: '&#x3c;Aur',
+ nextText: 'Hur&#x3e;',
+ currentText: 'Gaur',
+ monthNames: ['urtarrila','otsaila','martxoa','apirila','maiatza','ekaina',
+ 'uztaila','abuztua','iraila','urria','azaroa','abendua'],
+ monthNamesShort: ['urt.','ots.','mar.','api.','mai.','eka.',
+ 'uzt.','abu.','ira.','urr.','aza.','abe.'],
+ dayNames: ['igandea','astelehena','asteartea','asteazkena','osteguna','ostirala','larunbata'],
+ dayNamesShort: ['ig.','al.','ar.','az.','og.','ol.','lr.'],
+ dayNamesMin: ['ig','al','ar','az','og','ol','lr'],
+ weekHeader: 'As',
+ dateFormat: 'yy-mm-dd',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['eu']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-fa.js b/vendors/jquery/i18n/jquery.ui.datepicker-fa.js
new file mode 100644
index 000000000..be8acd2a5
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-fa.js
@@ -0,0 +1,59 @@
+/* Persian (Farsi) Translation for the jQuery UI date picker plugin. */
+/* Javad Mowlanezhad -- jmowla@gmail.com */
+/* Jalali calendar should supported soon! (Its implemented but I have to test it) */
+jQuery(function($) {
+ $.datepicker.regional['fa'] = {
+ closeText: 'بستن',
+ prevText: '&#x3C;قبلی',
+ nextText: 'بعدی&#x3E;',
+ currentText: 'امروز',
+ monthNames: [
+ 'Ùروردين',
+ 'ارديبهشت',
+ 'خرداد',
+ 'تير',
+ 'مرداد',
+ 'شهريور',
+ 'مهر',
+ 'آبان',
+ 'آذر',
+ 'دی',
+ 'بهمن',
+ 'اسÙند'
+ ],
+ monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
+ dayNames: [
+ 'يکشنبه',
+ 'دوشنبه',
+ 'سه‌شنبه',
+ 'چهارشنبه',
+ 'پنجشنبه',
+ 'جمعه',
+ 'شنبه'
+ ],
+ dayNamesShort: [
+ 'ی',
+ 'د',
+ 'س',
+ 'Ú†',
+ 'Ù¾',
+ 'ج',
+ 'Ø´'
+ ],
+ dayNamesMin: [
+ 'ی',
+ 'د',
+ 'س',
+ 'Ú†',
+ 'Ù¾',
+ 'ج',
+ 'Ø´'
+ ],
+ weekHeader: 'Ù‡Ù',
+ dateFormat: 'yy/mm/dd',
+ firstDay: 6,
+ isRTL: true,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['fa']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-fi.js b/vendors/jquery/i18n/jquery.ui.datepicker-fi.js
new file mode 100644
index 000000000..4c5adda35
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-fi.js
@@ -0,0 +1,23 @@
+/* Finnish initialisation for the jQuery UI date picker plugin. */
+/* Written by Harri Kilpiö (harrikilpio@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['fi'] = {
+ closeText: 'Sulje',
+ prevText: '&#xAB;Edellinen',
+ nextText: 'Seuraava&#xBB;',
+ currentText: 'T&#xE4;n&#xE4;&#xE4;n',
+ monthNames: ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kes&#xE4;kuu',
+ 'Hein&#xE4;kuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'],
+ monthNamesShort: ['Tammi','Helmi','Maalis','Huhti','Touko','Kes&#xE4;',
+ 'Hein&#xE4;','Elo','Syys','Loka','Marras','Joulu'],
+ dayNamesShort: ['Su','Ma','Ti','Ke','To','Pe','La'],
+ dayNames: ['Sunnuntai','Maanantai','Tiistai','Keskiviikko','Torstai','Perjantai','Lauantai'],
+ dayNamesMin: ['Su','Ma','Ti','Ke','To','Pe','La'],
+ weekHeader: 'Vk',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['fi']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-fo.js b/vendors/jquery/i18n/jquery.ui.datepicker-fo.js
new file mode 100644
index 000000000..8a6cb99cb
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-fo.js
@@ -0,0 +1,23 @@
+/* Faroese initialisation for the jQuery UI date picker plugin */
+/* Written by Sverri Mohr Olsen, sverrimo@gmail.com */
+jQuery(function($){
+ $.datepicker.regional['fo'] = {
+ closeText: 'Lat aftur',
+ prevText: '&#x3c;Fyrra',
+ nextText: 'Næsta&#x3e;',
+ currentText: 'Ã dag',
+ monthNames: ['Januar','Februar','Mars','Apríl','Mei','Juni',
+ 'Juli','August','September','Oktober','November','Desember'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Des'],
+ dayNames: ['Sunnudagur','Mánadagur','Týsdagur','Mikudagur','Hósdagur','Fríggjadagur','Leyardagur'],
+ dayNamesShort: ['Sun','Mán','Týs','Mik','Hós','Frí','Ley'],
+ dayNamesMin: ['Su','Má','Tý','Mi','Hó','Fr','Le'],
+ weekHeader: 'Vk',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['fo']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-fr-CH.js b/vendors/jquery/i18n/jquery.ui.datepicker-fr-CH.js
new file mode 100644
index 000000000..244eacff4
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-fr-CH.js
@@ -0,0 +1,23 @@
+/* Swiss-French initialisation for the jQuery UI date picker plugin. */
+/* Written Martin Voelkle (martin.voelkle@e-tc.ch). */
+jQuery(function($){
+ $.datepicker.regional['fr-CH'] = {
+ closeText: 'Fermer',
+ prevText: '&#x3c;Préc',
+ nextText: 'Suiv&#x3e;',
+ currentText: 'Courant',
+ monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+ 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+ monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
+ 'Jul','Aoû','Sep','Oct','Nov','Déc'],
+ dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+ dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
+ dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['fr-CH']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-fr.js b/vendors/jquery/i18n/jquery.ui.datepicker-fr.js
new file mode 100644
index 000000000..7e793639f
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-fr.js
@@ -0,0 +1,25 @@
+/* French initialisation for the jQuery UI date picker plugin. */
+/* Written by Keith Wood (kbwood{at}iinet.com.au),
+ Stéphane Nahmani (sholby@sholby.net),
+ Stéphane Raimbault <stephane.raimbault@gmail.com> */
+jQuery(function($){
+ $.datepicker.regional['fr'] = {
+ closeText: 'Fermer',
+ prevText: 'Précédent',
+ nextText: 'Suivant',
+ currentText: 'Aujourd\'hui',
+ monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
+ 'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
+ monthNamesShort: ['Janv.','Févr.','Mars','Avril','Mai','Juin',
+ 'Juil.','Août','Sept.','Oct.','Nov.','Déc.'],
+ dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
+ dayNamesShort: ['Dim.','Lun.','Mar.','Mer.','Jeu.','Ven.','Sam.'],
+ dayNamesMin: ['D','L','M','M','J','V','S'],
+ weekHeader: 'Sem.',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['fr']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-gl.js b/vendors/jquery/i18n/jquery.ui.datepicker-gl.js
new file mode 100644
index 000000000..278403e8f
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-gl.js
@@ -0,0 +1,23 @@
+/* Galician localization for 'UI date picker' jQuery extension. */
+/* Translated by Jorge Barreiro <yortx.barry@gmail.com>. */
+jQuery(function($){
+ $.datepicker.regional['gl'] = {
+ closeText: 'Pechar',
+ prevText: '&#x3c;Ant',
+ nextText: 'Seg&#x3e;',
+ currentText: 'Hoxe',
+ monthNames: ['Xaneiro','Febreiro','Marzo','Abril','Maio','Xuño',
+ 'Xullo','Agosto','Setembro','Outubro','Novembro','Decembro'],
+ monthNamesShort: ['Xan','Feb','Mar','Abr','Mai','Xuñ',
+ 'Xul','Ago','Set','Out','Nov','Dec'],
+ dayNames: ['Domingo','Luns','Martes','M&eacute;rcores','Xoves','Venres','S&aacute;bado'],
+ dayNamesShort: ['Dom','Lun','Mar','M&eacute;r','Xov','Ven','S&aacute;b'],
+ dayNamesMin: ['Do','Lu','Ma','M&eacute;','Xo','Ve','S&aacute;'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['gl']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-he.js b/vendors/jquery/i18n/jquery.ui.datepicker-he.js
new file mode 100644
index 000000000..135cdec1d
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-he.js
@@ -0,0 +1,23 @@
+/* Hebrew initialisation for the UI Datepicker extension. */
+/* Written by Amir Hardon (ahardon at gmail dot com). */
+jQuery(function($){
+ $.datepicker.regional['he'] = {
+ closeText: 'סגור',
+ prevText: '&#x3c;הקוד×',
+ nextText: 'הב×&#x3e;',
+ currentText: 'היו×',
+ monthNames: ['ינו×ר','פברו×ר','מרץ','×פריל','מ××™','יוני',
+ 'יולי','×וגוסט','ספטמבר','×וקטובר','נובמבר','דצמבר'],
+ monthNamesShort: ['ינו','פבר','מרץ','×פר','מ××™','יוני',
+ 'יולי','×וג','ספט','×וק','נוב','דצמ'],
+ dayNames: ['ר×שון','שני','שלישי','רביעי','חמישי','שישי','שבת'],
+ dayNamesShort: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'],
+ dayNamesMin: ['×\'','ב\'','×’\'','ד\'','×”\'','ו\'','שבת'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: true,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['he']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-hi.js b/vendors/jquery/i18n/jquery.ui.datepicker-hi.js
new file mode 100644
index 000000000..6c563b997
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-hi.js
@@ -0,0 +1,23 @@
+/* Hindi initialisation for the jQuery UI date picker plugin. */
+/* Written by Michael Dawart. */
+jQuery(function($){
+ $.datepicker.regional['hi'] = {
+ closeText: 'बंद',
+ prevText: 'पिछला',
+ nextText: 'अगला',
+ currentText: 'आज',
+ monthNames: ['जनवरी ','फरवरी','मारà¥à¤š','अपà¥à¤°à¥‡à¤²','मई','जून',
+ 'जूलाई','अगसà¥à¤¤ ','सितमà¥à¤¬à¤°','अकà¥à¤Ÿà¥‚बर','नवमà¥à¤¬à¤°','दिसमà¥à¤¬à¤°'],
+ monthNamesShort: ['जन', 'फर', 'मारà¥à¤š', 'अपà¥à¤°à¥‡à¤²', 'मई', 'जून',
+ 'जूलाई', 'अग', 'सित', 'अकà¥à¤Ÿ', 'नव', 'दि'],
+ dayNames: ['रविवार', 'सोमवार', 'मंगलवार', 'बà¥à¤§à¤µà¤¾à¤°', 'गà¥à¤°à¥à¤µà¤¾à¤°', 'शà¥à¤•à¥à¤°à¤µà¤¾à¤°', 'शनिवार'],
+ dayNamesShort: ['रवि', 'सोम', 'मंगल', 'बà¥à¤§', 'गà¥à¤°à¥', 'शà¥à¤•à¥à¤°', 'शनि'],
+ dayNamesMin: ['रवि', 'सोम', 'मंगल', 'बà¥à¤§', 'गà¥à¤°à¥', 'शà¥à¤•à¥à¤°', 'शनि'],
+ weekHeader: 'हफà¥à¤¤à¤¾',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['hi']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-hr.js b/vendors/jquery/i18n/jquery.ui.datepicker-hr.js
new file mode 100644
index 000000000..1eb3dd926
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-hr.js
@@ -0,0 +1,23 @@
+/* Croatian i18n for the jQuery UI date picker plugin. */
+/* Written by Vjekoslav Nesek. */
+jQuery(function($){
+ $.datepicker.regional['hr'] = {
+ closeText: 'Zatvori',
+ prevText: '&#x3c;',
+ nextText: '&#x3e;',
+ currentText: 'Danas',
+ monthNames: ['SijeÄanj','VeljaÄa','Ožujak','Travanj','Svibanj','Lipanj',
+ 'Srpanj','Kolovoz','Rujan','Listopad','Studeni','Prosinac'],
+ monthNamesShort: ['Sij','Velj','Ožu','Tra','Svi','Lip',
+ 'Srp','Kol','Ruj','Lis','Stu','Pro'],
+ dayNames: ['Nedjelja','Ponedjeljak','Utorak','Srijeda','ÄŒetvrtak','Petak','Subota'],
+ dayNamesShort: ['Ned','Pon','Uto','Sri','ÄŒet','Pet','Sub'],
+ dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+ weekHeader: 'Tje',
+ dateFormat: 'dd.mm.yy.',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['hr']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-hu.js b/vendors/jquery/i18n/jquery.ui.datepicker-hu.js
new file mode 100644
index 000000000..b28c268c1
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-hu.js
@@ -0,0 +1,23 @@
+/* Hungarian initialisation for the jQuery UI date picker plugin. */
+/* Written by Istvan Karaszi (jquery@spam.raszi.hu). */
+jQuery(function($){
+ $.datepicker.regional['hu'] = {
+ closeText: 'bezár',
+ prevText: 'vissza',
+ nextText: 'előre',
+ currentText: 'ma',
+ monthNames: ['Január', 'Február', 'Március', 'Ãprilis', 'Május', 'Június',
+ 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'],
+ monthNamesShort: ['Jan', 'Feb', 'Már', 'Ãpr', 'Máj', 'Jún',
+ 'Júl', 'Aug', 'Szep', 'Okt', 'Nov', 'Dec'],
+ dayNames: ['Vasárnap', 'Hétfő', 'Kedd', 'Szerda', 'Csütörtök', 'Péntek', 'Szombat'],
+ dayNamesShort: ['Vas', 'Hét', 'Ked', 'Sze', 'Csü', 'Pén', 'Szo'],
+ dayNamesMin: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
+ weekHeader: 'Hét',
+ dateFormat: 'yy.mm.dd.',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['hu']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-hy.js b/vendors/jquery/i18n/jquery.ui.datepicker-hy.js
new file mode 100644
index 000000000..c6cc1946c
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-hy.js
@@ -0,0 +1,23 @@
+/* Armenian(UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Levon Zakaryan (levon.zakaryan@gmail.com)*/
+jQuery(function($){
+ $.datepicker.regional['hy'] = {
+ closeText: 'Õ“Õ¡Õ¯Õ¥Õ¬',
+ prevText: '&#x3c;Õ†Õ¡Õ­.',
+ nextText: 'Õ€Õ¡Õ».&#x3e;',
+ currentText: 'Ô±ÕµÕ½Ö…Ö€',
+ monthNames: ['Õ€Õ¸Ö‚Õ¶Õ¾Õ¡Ö€','Õ“Õ¥Õ¿Ö€Õ¾Õ¡Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€Õ«Õ¬','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½',
+ 'Õ€Õ¸Ö‚Õ¬Õ«Õ½','Õ•Õ£Õ¸Õ½Õ¿Õ¸Õ½','ÕÕ¥ÕºÕ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ€Õ¸Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€','Õ†Õ¸ÕµÕ¥Õ´Õ¢Õ¥Ö€','Ô´Õ¥Õ¯Õ¿Õ¥Õ´Õ¢Õ¥Ö€'],
+ monthNamesShort: ['Õ€Õ¸Ö‚Õ¶Õ¾','Õ“Õ¥Õ¿Ö€','Õ„Õ¡Ö€Õ¿','Ô±ÕºÖ€','Õ„Õ¡ÕµÕ«Õ½','Õ€Õ¸Ö‚Õ¶Õ«Õ½',
+ 'Õ€Õ¸Ö‚Õ¬','Õ•Õ£Õ½','ÕÕ¥Õº','Õ€Õ¸Õ¯','Õ†Õ¸Õµ','Ô´Õ¥Õ¯'],
+ dayNames: ['Õ¯Õ«Ö€Õ¡Õ¯Õ«','Õ¥Õ¯Õ¸Ö‚Õ·Õ¡Õ¢Õ©Õ«','Õ¥Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ¹Õ¸Ö€Õ¥Ö„Õ·Õ¡Õ¢Õ©Õ«','Õ°Õ«Õ¶Õ£Õ·Õ¡Õ¢Õ©Õ«','Õ¸Ö‚Ö€Õ¢Õ¡Õ©','Õ·Õ¡Õ¢Õ¡Õ©'],
+ dayNamesShort: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'],
+ dayNamesMin: ['Õ¯Õ«Ö€','Õ¥Ö€Õ¯','Õ¥Ö€Ö„','Õ¹Ö€Ö„','Õ°Õ¶Õ£','Õ¸Ö‚Ö€Õ¢','Õ·Õ¢Õ©'],
+ weekHeader: 'Õ‡Ô²Õ',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['hy']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-id.js b/vendors/jquery/i18n/jquery.ui.datepicker-id.js
new file mode 100644
index 000000000..c626fbb7b
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-id.js
@@ -0,0 +1,23 @@
+/* Indonesian initialisation for the jQuery UI date picker plugin. */
+/* Written by Deden Fathurahman (dedenf@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['id'] = {
+ closeText: 'Tutup',
+ prevText: '&#x3c;mundur',
+ nextText: 'maju&#x3e;',
+ currentText: 'hari ini',
+ monthNames: ['Januari','Februari','Maret','April','Mei','Juni',
+ 'Juli','Agustus','September','Oktober','Nopember','Desember'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun',
+ 'Jul','Agus','Sep','Okt','Nop','Des'],
+ dayNames: ['Minggu','Senin','Selasa','Rabu','Kamis','Jumat','Sabtu'],
+ dayNamesShort: ['Min','Sen','Sel','Rab','kam','Jum','Sab'],
+ dayNamesMin: ['Mg','Sn','Sl','Rb','Km','jm','Sb'],
+ weekHeader: 'Mg',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['id']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-is.js b/vendors/jquery/i18n/jquery.ui.datepicker-is.js
new file mode 100644
index 000000000..c53235a49
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-is.js
@@ -0,0 +1,23 @@
+/* Icelandic initialisation for the jQuery UI date picker plugin. */
+/* Written by Haukur H. Thorsson (haukur@eskill.is). */
+jQuery(function($){
+ $.datepicker.regional['is'] = {
+ closeText: 'Loka',
+ prevText: '&#x3c; Fyrri',
+ nextText: 'N&aelig;sti &#x3e;',
+ currentText: '&Iacute; dag',
+ monthNames: ['Jan&uacute;ar','Febr&uacute;ar','Mars','Apr&iacute;l','Ma&iacute','J&uacute;n&iacute;',
+ 'J&uacute;l&iacute;','&Aacute;g&uacute;st','September','Okt&oacute;ber','N&oacute;vember','Desember'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Ma&iacute;','J&uacute;n',
+ 'J&uacute;l','&Aacute;g&uacute;','Sep','Okt','N&oacute;v','Des'],
+ dayNames: ['Sunnudagur','M&aacute;nudagur','&THORN;ri&eth;judagur','Mi&eth;vikudagur','Fimmtudagur','F&ouml;studagur','Laugardagur'],
+ dayNamesShort: ['Sun','M&aacute;n','&THORN;ri','Mi&eth;','Fim','F&ouml;s','Lau'],
+ dayNamesMin: ['Su','M&aacute;','&THORN;r','Mi','Fi','F&ouml;','La'],
+ weekHeader: 'Vika',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['is']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-it.js b/vendors/jquery/i18n/jquery.ui.datepicker-it.js
new file mode 100644
index 000000000..59da2df67
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-it.js
@@ -0,0 +1,23 @@
+/* Italian initialisation for the jQuery UI date picker plugin. */
+/* Written by Antonello Pasella (antonello.pasella@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['it'] = {
+ closeText: 'Chiudi',
+ prevText: '&#x3c;Prec',
+ nextText: 'Succ&#x3e;',
+ currentText: 'Oggi',
+ monthNames: ['Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno',
+ 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'],
+ monthNamesShort: ['Gen','Feb','Mar','Apr','Mag','Giu',
+ 'Lug','Ago','Set','Ott','Nov','Dic'],
+ dayNames: ['Domenica','Luned&#236','Marted&#236','Mercoled&#236','Gioved&#236','Venerd&#236','Sabato'],
+ dayNamesShort: ['Dom','Lun','Mar','Mer','Gio','Ven','Sab'],
+ dayNamesMin: ['Do','Lu','Ma','Me','Gi','Ve','Sa'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['it']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-ja.js b/vendors/jquery/i18n/jquery.ui.datepicker-ja.js
new file mode 100644
index 000000000..7eb4268d4
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-ja.js
@@ -0,0 +1,23 @@
+/* Japanese initialisation for the jQuery UI date picker plugin. */
+/* Written by Kentaro SATO (kentaro@ranvis.com). */
+jQuery(function($){
+ $.datepicker.regional['ja'] = {
+ closeText: 'é–‰ã˜ã‚‹',
+ prevText: '&#x3c;å‰',
+ nextText: '次&#x3e;',
+ currentText: '今日',
+ monthNames: ['1月','2月','3月','4月','5月','6月',
+ '7月','8月','9月','10月','11月','12月'],
+ monthNamesShort: ['1月','2月','3月','4月','5月','6月',
+ '7月','8月','9月','10月','11月','12月'],
+ dayNames: ['日曜日','月曜日','ç«æ›œæ—¥','水曜日','木曜日','金曜日','土曜日'],
+ dayNamesShort: ['æ—¥','月','ç«','æ°´','木','金','土'],
+ dayNamesMin: ['æ—¥','月','ç«','æ°´','木','金','土'],
+ weekHeader: '週',
+ dateFormat: 'yy/mm/dd',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: 'å¹´'};
+ $.datepicker.setDefaults($.datepicker.regional['ja']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-ka.js b/vendors/jquery/i18n/jquery.ui.datepicker-ka.js
new file mode 100644
index 000000000..c10658d79
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-ka.js
@@ -0,0 +1,21 @@
+/* Georgian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Lado Lomidze (lado.lomidze@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['ka'] = {
+ closeText: 'დáƒáƒ®áƒ£áƒ áƒ•áƒ',
+ prevText: '&#x3c; წინáƒ',
+ nextText: 'შემდეგი &#x3e;',
+ currentText: 'დღეს',
+ monthNames: ['იáƒáƒœáƒ•áƒáƒ áƒ˜','თებერვáƒáƒšáƒ˜','მáƒáƒ áƒ¢áƒ˜','áƒáƒžáƒ áƒ˜áƒšáƒ˜','მáƒáƒ˜áƒ¡áƒ˜','ივნისი', 'ივლისი','áƒáƒ’ვისტáƒ','სექტემბერი','áƒáƒ¥áƒ¢áƒáƒ›áƒ‘ერი','ნáƒáƒ”მბერი','დეკემბერი'],
+ monthNamesShort: ['იáƒáƒœ','თებ','მáƒáƒ ','áƒáƒžáƒ ','მáƒáƒ˜','ივნ', 'ივლ','áƒáƒ’ვ','სექ','áƒáƒ¥áƒ¢','ნáƒáƒ”','დეკ'],
+ dayNames: ['კვირáƒ','áƒáƒ áƒ¨áƒáƒ‘áƒáƒ—ი','სáƒáƒ›áƒ¨áƒáƒ‘áƒáƒ—ი','áƒáƒ—ხშáƒáƒ‘áƒáƒ—ი','ხუთშáƒáƒ‘áƒáƒ—ი','პáƒáƒ áƒáƒ¡áƒ™áƒ”ვი','შáƒáƒ‘áƒáƒ—ი'],
+ dayNamesShort: ['კვ','áƒáƒ áƒ¨','სáƒáƒ›','áƒáƒ—ხ','ხუთ','პáƒáƒ ','შáƒáƒ‘'],
+ dayNamesMin: ['კვ','áƒáƒ áƒ¨','სáƒáƒ›','áƒáƒ—ხ','ხუთ','პáƒáƒ ','შáƒáƒ‘'],
+ weekHeader: 'კვირáƒ',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ka']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-kk.js b/vendors/jquery/i18n/jquery.ui.datepicker-kk.js
new file mode 100644
index 000000000..79e3f2481
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-kk.js
@@ -0,0 +1,23 @@
+/* Kazakh (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Dmitriy Karasyov (dmitriy.karasyov@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['kk'] = {
+ closeText: 'Жабу',
+ prevText: '&#x3c;Ðлдыңғы',
+ nextText: 'КелеÑÑ–&#x3e;',
+ currentText: 'Бүгін',
+ monthNames: ['Қаңтар','Ðқпан','Ðаурыз','Сәуір','Мамыр','МауÑым',
+ 'Шілде','Тамыз','Қыркүйек','Қазан','Қараша','ЖелтоқÑан'],
+ monthNamesShort: ['Қаң','Ðқп','Ðау','Сәу','Мам','Мау',
+ 'Шіл','Там','Қыр','Қаз','Қар','Жел'],
+ dayNames: ['ЖекÑенбі','ДүйÑенбі','СейÑенбі','СәрÑенбі','БейÑенбі','Жұма','Сенбі'],
+ dayNamesShort: ['жкÑ','дÑн','ÑÑн','ÑÑ€Ñ','бÑн','жма','Ñнб'],
+ dayNamesMin: ['Жк','ДÑ','СÑ','Ср','БÑ','Жм','Сн'],
+ weekHeader: 'Ðе',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['kk']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-km.js b/vendors/jquery/i18n/jquery.ui.datepicker-km.js
new file mode 100644
index 000000000..f9c4e3a02
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-km.js
@@ -0,0 +1,23 @@
+/* Khmer initialisation for the jQuery calendar extension. */
+/* Written by Chandara Om (chandara.teacher@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['km'] = {
+ closeText: 'ធ្វើ​រួច',
+ prevText: 'មុន',
+ nextText: 'បន្ទាប់',
+ currentText: 'ážáŸ’ងៃ​នáŸáŸ‡',
+ monthNames: ['មករា','កុម្ភៈ','មីនា','មáŸážŸáž¶','ឧសភា','មិážáž»áž“ា',
+ 'កក្កដា','សីហា','កញ្ញា','ážáž»áž›áž¶','វិច្ឆិកា','ធ្នូ'],
+ monthNamesShort: ['មករា','កុម្ភៈ','មីនា','មáŸážŸáž¶','ឧសភា','មិážáž»áž“ា',
+ 'កក្កដា','សីហា','កញ្ញា','ážáž»áž›áž¶','វិច្ឆិកា','ធ្នូ'],
+ dayNames: ['អាទិážáŸ’áž™', 'ចន្ទ', 'អង្គារ', 'ពុធ', 'ព្រហស្បážáž·áŸ', 'សុក្រ', 'សៅរáŸ'],
+ dayNamesShort: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+ dayNamesMin: ['អា', 'ច', 'អ', 'ពុ', 'ព្រហ', 'សុ', 'សៅ'],
+ weekHeader: 'សប្ដាហáŸ',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['km']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-ko.js b/vendors/jquery/i18n/jquery.ui.datepicker-ko.js
new file mode 100644
index 000000000..04112424d
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-ko.js
@@ -0,0 +1,23 @@
+/* Korean initialisation for the jQuery calendar extension. */
+/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */
+jQuery(function($){
+ $.datepicker.regional['ko'] = {
+ closeText: '닫기',
+ prevText: 'ì´ì „달',
+ nextText: '다ìŒë‹¬',
+ currentText: '오늘',
+ monthNames: ['1ì›”','2ì›”','3ì›”','4ì›”','5ì›”','6ì›”',
+ '7ì›”','8ì›”','9ì›”','10ì›”','11ì›”','12ì›”'],
+ monthNamesShort: ['1ì›”','2ì›”','3ì›”','4ì›”','5ì›”','6ì›”',
+ '7ì›”','8ì›”','9ì›”','10ì›”','11ì›”','12ì›”'],
+ dayNames: ['ì¼ìš”ì¼','월요ì¼','화요ì¼','수요ì¼','목요ì¼','금요ì¼','토요ì¼'],
+ dayNamesShort: ['ì¼','ì›”','í™”','수','목','금','토'],
+ dayNamesMin: ['ì¼','ì›”','í™”','수','목','금','토'],
+ weekHeader: 'Wk',
+ dateFormat: 'yy-mm-dd',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: 'ë…„'};
+ $.datepicker.setDefaults($.datepicker.regional['ko']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-lb.js b/vendors/jquery/i18n/jquery.ui.datepicker-lb.js
new file mode 100644
index 000000000..87c79d594
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-lb.js
@@ -0,0 +1,23 @@
+/* Luxembourgish initialisation for the jQuery UI date picker plugin. */
+/* Written by Michel Weimerskirch <michel@weimerskirch.net> */
+jQuery(function($){
+ $.datepicker.regional['lb'] = {
+ closeText: 'Fäerdeg',
+ prevText: 'Zréck',
+ nextText: 'Weider',
+ currentText: 'Haut',
+ monthNames: ['Januar','Februar','Mäerz','Abrëll','Mee','Juni',
+ 'Juli','August','September','Oktober','November','Dezember'],
+ monthNamesShort: ['Jan', 'Feb', 'Mäe', 'Abr', 'Mee', 'Jun',
+ 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],
+ dayNames: ['Sonndeg', 'Méindeg', 'Dënschdeg', 'Mëttwoch', 'Donneschdeg', 'Freideg', 'Samschdeg'],
+ dayNamesShort: ['Son', 'Méi', 'Dën', 'Mët', 'Don', 'Fre', 'Sam'],
+ dayNamesMin: ['So','Mé','Dë','Më','Do','Fr','Sa'],
+ weekHeader: 'W',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['lb']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-lt.js b/vendors/jquery/i18n/jquery.ui.datepicker-lt.js
new file mode 100644
index 000000000..67d5119ca
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-lt.js
@@ -0,0 +1,23 @@
+/* Lithuanian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas@avalon.lt> */
+jQuery(function($){
+ $.datepicker.regional['lt'] = {
+ closeText: 'Uždaryti',
+ prevText: '&#x3c;Atgal',
+ nextText: 'Pirmyn&#x3e;',
+ currentText: 'Å iandien',
+ monthNames: ['Sausis','Vasaris','Kovas','Balandis','Gegužė','Birželis',
+ 'Liepa','Rugpjūtis','Rugsėjis','Spalis','Lapkritis','Gruodis'],
+ monthNamesShort: ['Sau','Vas','Kov','Bal','Geg','Bir',
+ 'Lie','Rugp','Rugs','Spa','Lap','Gru'],
+ dayNames: ['sekmadienis','pirmadienis','antradienis','treÄiadienis','ketvirtadienis','penktadienis','Å¡eÅ¡tadienis'],
+ dayNamesShort: ['sek','pir','ant','tre','ket','pen','šeš'],
+ dayNamesMin: ['Se','Pr','An','Tr','Ke','Pe','Å e'],
+ weekHeader: 'Wk',
+ dateFormat: 'yy-mm-dd',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['lt']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-lv.js b/vendors/jquery/i18n/jquery.ui.datepicker-lv.js
new file mode 100644
index 000000000..003934e72
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-lv.js
@@ -0,0 +1,23 @@
+/* Latvian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* @author Arturas Paleicikas <arturas.paleicikas@metasite.net> */
+jQuery(function($){
+ $.datepicker.regional['lv'] = {
+ closeText: 'Aizvērt',
+ prevText: 'Iepr',
+ nextText: 'NÄka',
+ currentText: 'Å odien',
+ monthNames: ['JanvÄris','FebruÄris','Marts','AprÄ«lis','Maijs','JÅ«nijs',
+ 'JÅ«lijs','Augusts','Septembris','Oktobris','Novembris','Decembris'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Mai','JÅ«n',
+ 'JÅ«l','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['svētdiena','pirmdiena','otrdiena','trešdiena','ceturtdiena','piektdiena','sestdiena'],
+ dayNamesShort: ['svt','prm','otr','tre','ctr','pkt','sst'],
+ dayNamesMin: ['Sv','Pr','Ot','Tr','Ct','Pk','Ss'],
+ weekHeader: 'Nav',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['lv']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-mk.js b/vendors/jquery/i18n/jquery.ui.datepicker-mk.js
new file mode 100644
index 000000000..028532551
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-mk.js
@@ -0,0 +1,23 @@
+/* Macedonian i18n for the jQuery UI date picker plugin. */
+/* Written by Stojce Slavkovski. */
+jQuery(function($){
+ $.datepicker.regional['mk'] = {
+ closeText: 'Затвори',
+ prevText: '&#x3C;',
+ nextText: '&#x3E;',
+ currentText: 'ДенеÑ',
+ monthNames: ['Јануари','Февруари','Март','Ðприл','Мај','Јуни',
+ 'Јули','ÐвгуÑÑ‚','Септември','Октомври','Ðоември','Декември'],
+ monthNamesShort: ['Јан','Фев','Мар','Ðпр','Мај','Јун',
+ 'Јул','Ðвг','Сеп','Окт','Ðое','Дек'],
+ dayNames: ['Ðедела','Понеделник','Вторник','Среда','Четврток','Петок','Сабота'],
+ dayNamesShort: ['Ðед','Пон','Вто','Сре','Чет','Пет','Саб'],
+ dayNamesMin: ['Ðе','По','Ð’Ñ‚','Ср','Че','Пе','Са'],
+ weekHeader: 'Сед',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['mk']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-ml.js b/vendors/jquery/i18n/jquery.ui.datepicker-ml.js
new file mode 100644
index 000000000..1e3432c0a
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-ml.js
@@ -0,0 +1,23 @@
+/* Malayalam (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Saji Nediyanchath (saji89@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['ml'] = {
+ closeText: 'ശരി',
+ prevText: 'à´®àµà´¨àµà´¨à´¤àµà´¤àµ†',
+ nextText: 'à´…à´Ÿàµà´¤àµà´¤à´¤àµ ',
+ currentText: 'ഇനàµà´¨àµ',
+ monthNames: ['ജനàµà´µà´°à´¿','ഫെബàµà´°àµà´µà´°à´¿','മാരàµâ€à´šàµà´šàµ','à´à´ªàµà´°à´¿à´²àµâ€','മേയàµ','ജൂണàµâ€',
+ 'ജൂലൈ','ആഗസàµà´±àµà´±àµ','സെപàµà´±àµà´±à´‚ബരàµâ€','à´’à´•àµà´Ÿàµ‹à´¬à´°àµâ€','നവംബരàµâ€','ഡിസംബരàµâ€'],
+ monthNamesShort: ['ജനàµ', 'ഫെബàµ', 'മാരàµâ€', 'à´à´ªàµà´°à´¿', 'മേയàµ', 'ജൂണàµâ€',
+ 'ജൂലാ', 'ആഗ', 'സെപàµ', 'à´’à´•àµà´Ÿàµ‹', 'നവം', 'à´¡à´¿à´¸'],
+ dayNames: ['ഞായരàµâ€', 'തിങàµà´•à´³àµâ€', 'ചൊവàµà´µ', 'à´¬àµà´§à´¨àµâ€', 'à´µàµà´¯à´¾à´´à´‚', 'വെളàµà´³à´¿', 'ശനി'],
+ dayNamesShort: ['ഞായ', 'തിങàµà´•', 'ചൊവàµà´µ', 'à´¬àµà´§', 'à´µàµà´¯à´¾à´´à´‚', 'വെളàµà´³à´¿', 'ശനി'],
+ dayNamesMin: ['à´žà´¾','തി','ചൊ','à´¬àµ','à´µàµà´¯à´¾','വെ','à´¶'],
+ weekHeader: 'à´†',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ml']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-ms.js b/vendors/jquery/i18n/jquery.ui.datepicker-ms.js
new file mode 100644
index 000000000..e953ac04f
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-ms.js
@@ -0,0 +1,23 @@
+/* Malaysian initialisation for the jQuery UI date picker plugin. */
+/* Written by Mohd Nawawi Mohamad Jamili (nawawi@ronggeng.net). */
+jQuery(function($){
+ $.datepicker.regional['ms'] = {
+ closeText: 'Tutup',
+ prevText: '&#x3c;Sebelum',
+ nextText: 'Selepas&#x3e;',
+ currentText: 'hari ini',
+ monthNames: ['Januari','Februari','Mac','April','Mei','Jun',
+ 'Julai','Ogos','September','Oktober','November','Disember'],
+ monthNamesShort: ['Jan','Feb','Mac','Apr','Mei','Jun',
+ 'Jul','Ogo','Sep','Okt','Nov','Dis'],
+ dayNames: ['Ahad','Isnin','Selasa','Rabu','Khamis','Jumaat','Sabtu'],
+ dayNamesShort: ['Aha','Isn','Sel','Rab','kha','Jum','Sab'],
+ dayNamesMin: ['Ah','Is','Se','Ra','Kh','Ju','Sa'],
+ weekHeader: 'Mg',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ms']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-nl-BE.js b/vendors/jquery/i18n/jquery.ui.datepicker-nl-BE.js
new file mode 100644
index 000000000..7b3cdf425
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-nl-BE.js
@@ -0,0 +1,23 @@
+/* Dutch (Belgium) initialisation for the jQuery UI date picker plugin. */
+/* David De Sloovere @DavidDeSloovere */
+jQuery(function($){
+ $.datepicker.regional['nl-BE'] = {
+ closeText: 'Sluiten',
+ prevText: 'â†',
+ nextText: '→',
+ currentText: 'Vandaag',
+ monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+ 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+ monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+ 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+ dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+ dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+ dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['nl-BE']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-nl.js b/vendors/jquery/i18n/jquery.ui.datepicker-nl.js
new file mode 100644
index 000000000..781fe6191
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-nl.js
@@ -0,0 +1,23 @@
+/* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Mathias Bynens <http://mathiasbynens.be/> */
+jQuery(function($){
+ $.datepicker.regional.nl = {
+ closeText: 'Sluiten',
+ prevText: 'â†',
+ nextText: '→',
+ currentText: 'Vandaag',
+ monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
+ 'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
+ monthNamesShort: ['jan', 'feb', 'mrt', 'apr', 'mei', 'jun',
+ 'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
+ dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
+ dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
+ dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional.nl);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-no.js b/vendors/jquery/i18n/jquery.ui.datepicker-no.js
new file mode 100644
index 000000000..2507043a3
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-no.js
@@ -0,0 +1,23 @@
+/* Norwegian initialisation for the jQuery UI date picker plugin. */
+/* Written by Naimdjon Takhirov (naimdjon@gmail.com). */
+
+jQuery(function($){
+ $.datepicker.regional['no'] = {
+ closeText: 'Lukk',
+ prevText: '&laquo;Forrige',
+ nextText: 'Neste&raquo;',
+ currentText: 'I dag',
+ monthNames: ['januar','februar','mars','april','mai','juni','juli','august','september','oktober','november','desember'],
+ monthNamesShort: ['jan','feb','mar','apr','mai','jun','jul','aug','sep','okt','nov','des'],
+ dayNamesShort: ['søn','man','tir','ons','tor','fre','lør'],
+ dayNames: ['søndag','mandag','tirsdag','onsdag','torsdag','fredag','lørdag'],
+ dayNamesMin: ['sø','ma','ti','on','to','fr','lø'],
+ weekHeader: 'Uke',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''
+ };
+ $.datepicker.setDefaults($.datepicker.regional['no']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-pl.js b/vendors/jquery/i18n/jquery.ui.datepicker-pl.js
new file mode 100644
index 000000000..61fa29ccd
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-pl.js
@@ -0,0 +1,23 @@
+/* Polish initialisation for the jQuery UI date picker plugin. */
+/* Written by Jacek Wysocki (jacek.wysocki@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['pl'] = {
+ closeText: 'Zamknij',
+ prevText: '&#x3c;Poprzedni',
+ nextText: 'Następny&#x3e;',
+ currentText: 'DziÅ›',
+ monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec',
+ 'Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'],
+ monthNamesShort: ['Sty','Lu','Mar','Kw','Maj','Cze',
+ 'Lip','Sie','Wrz','Pa','Lis','Gru'],
+ dayNames: ['Niedziela','Poniedziałek','Wtorek','Środa','Czwartek','Piątek','Sobota'],
+ dayNamesShort: ['Nie','Pn','Wt','Åšr','Czw','Pt','So'],
+ dayNamesMin: ['N','Pn','Wt','Åšr','Cz','Pt','So'],
+ weekHeader: 'Tydz',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['pl']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-pt-BR.js b/vendors/jquery/i18n/jquery.ui.datepicker-pt-BR.js
new file mode 100644
index 000000000..3cc8c796c
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-pt-BR.js
@@ -0,0 +1,23 @@
+/* Brazilian initialisation for the jQuery UI date picker plugin. */
+/* Written by Leonildo Costa Silva (leocsilva@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['pt-BR'] = {
+ closeText: 'Fechar',
+ prevText: '&#x3c;Anterior',
+ nextText: 'Pr&oacute;ximo&#x3e;',
+ currentText: 'Hoje',
+ monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
+ 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+ monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+ 'Jul','Ago','Set','Out','Nov','Dez'],
+ dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
+ dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+ dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+ weekHeader: 'Sm',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['pt-BR']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-pt.js b/vendors/jquery/i18n/jquery.ui.datepicker-pt.js
new file mode 100644
index 000000000..f09f5aeb0
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-pt.js
@@ -0,0 +1,22 @@
+/* Portuguese initialisation for the jQuery UI date picker plugin. */
+jQuery(function($){
+ $.datepicker.regional['pt'] = {
+ closeText: 'Fechar',
+ prevText: '&#x3c;Anterior',
+ nextText: 'Seguinte',
+ currentText: 'Hoje',
+ monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho',
+ 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
+ monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun',
+ 'Jul','Ago','Set','Out','Nov','Dez'],
+ dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
+ dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+ dayNamesMin: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
+ weekHeader: 'Sem',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['pt']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-rm.js b/vendors/jquery/i18n/jquery.ui.datepicker-rm.js
new file mode 100644
index 000000000..cf03cd4c1
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-rm.js
@@ -0,0 +1,21 @@
+/* Romansh initialisation for the jQuery UI date picker plugin. */
+/* Written by Yvonne Gienal (yvonne.gienal@educa.ch). */
+jQuery(function($){
+ $.datepicker.regional['rm'] = {
+ closeText: 'Serrar',
+ prevText: '&#x3c;Suandant',
+ nextText: 'Precedent&#x3e;',
+ currentText: 'Actual',
+ monthNames: ['Schaner','Favrer','Mars','Avrigl','Matg','Zercladur', 'Fanadur','Avust','Settember','October','November','December'],
+ monthNamesShort: ['Scha','Fev','Mar','Avr','Matg','Zer', 'Fan','Avu','Sett','Oct','Nov','Dec'],
+ dayNames: ['Dumengia','Glindesdi','Mardi','Mesemna','Gievgia','Venderdi','Sonda'],
+ dayNamesShort: ['Dum','Gli','Mar','Mes','Gie','Ven','Som'],
+ dayNamesMin: ['Du','Gl','Ma','Me','Gi','Ve','So'],
+ weekHeader: 'emna',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['rm']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-ro.js b/vendors/jquery/i18n/jquery.ui.datepicker-ro.js
new file mode 100644
index 000000000..6b140aff6
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-ro.js
@@ -0,0 +1,26 @@
+/* Romanian initialisation for the jQuery UI date picker plugin.
+ *
+ * Written by Edmond L. (ll_edmond@walla.com)
+ * and Ionut G. Stan (ionut.g.stan@gmail.com)
+ */
+jQuery(function($){
+ $.datepicker.regional['ro'] = {
+ closeText: 'ÃŽnchide',
+ prevText: '&laquo; Luna precedentă',
+ nextText: 'Luna următoare &raquo;',
+ currentText: 'Azi',
+ monthNames: ['Ianuarie','Februarie','Martie','Aprilie','Mai','Iunie',
+ 'Iulie','August','Septembrie','Octombrie','Noiembrie','Decembrie'],
+ monthNamesShort: ['Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun',
+ 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
+ dayNames: ['Duminică', 'Luni', 'Marţi', 'Miercuri', 'Joi', 'Vineri', 'Sâmbătă'],
+ dayNamesShort: ['Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sâm'],
+ dayNamesMin: ['Du','Lu','Ma','Mi','Jo','Vi','Sâ'],
+ weekHeader: 'Săpt',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ro']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-ru.js b/vendors/jquery/i18n/jquery.ui.datepicker-ru.js
new file mode 100644
index 000000000..50a461352
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-ru.js
@@ -0,0 +1,23 @@
+/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Andrew Stromnov (stromnov@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['ru'] = {
+ closeText: 'Закрыть',
+ prevText: '&#x3c;Пред',
+ nextText: 'След&#x3e;',
+ currentText: 'СегоднÑ',
+ monthNames: ['Январь','Февраль','Март','Ðпрель','Май','Июнь',
+ 'Июль','ÐвгуÑÑ‚','СентÑбрь','ОктÑбрь','ÐоÑбрь','Декабрь'],
+ monthNamesShort: ['Янв','Фев','Мар','Ðпр','Май','Июн',
+ 'Июл','Ðвг','Сен','Окт','ÐоÑ','Дек'],
+ dayNames: ['воÑкреÑенье','понедельник','вторник','Ñреда','четверг','пÑтница','Ñуббота'],
+ dayNamesShort: ['вÑк','пнд','втр','Ñрд','чтв','птн','Ñбт'],
+ dayNamesMin: ['Ð’Ñ','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'],
+ weekHeader: 'Ðед',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ru']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-sk.js b/vendors/jquery/i18n/jquery.ui.datepicker-sk.js
new file mode 100644
index 000000000..078d1b0fa
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-sk.js
@@ -0,0 +1,23 @@
+/* Slovak initialisation for the jQuery UI date picker plugin. */
+/* Written by Vojtech Rinik (vojto@hmm.sk). */
+jQuery(function($){
+ $.datepicker.regional['sk'] = {
+ closeText: 'Zavrieť',
+ prevText: '&#x3c;Predchádzajúci',
+ nextText: 'Nasledujúci&#x3e;',
+ currentText: 'Dnes',
+ monthNames: ['Január','Február','Marec','Apríl','Máj','Jún',
+ 'Júl','August','September','Október','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Máj','Jún',
+ 'Júl','Aug','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedeľa','Pondelok','Utorok','Streda','Štvrtok','Piatok','Sobota'],
+ dayNamesShort: ['Ned','Pon','Uto','Str','Å tv','Pia','Sob'],
+ dayNamesMin: ['Ne','Po','Ut','St','Å t','Pia','So'],
+ weekHeader: 'Ty',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sk']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-sl.js b/vendors/jquery/i18n/jquery.ui.datepicker-sl.js
new file mode 100644
index 000000000..516550192
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-sl.js
@@ -0,0 +1,24 @@
+/* Slovenian initialisation for the jQuery UI date picker plugin. */
+/* Written by Jaka Jancar (jaka@kubje.org). */
+/* c = &#x10D;, s = &#x161; z = &#x17E; C = &#x10C; S = &#x160; Z = &#x17D; */
+jQuery(function($){
+ $.datepicker.regional['sl'] = {
+ closeText: 'Zapri',
+ prevText: '&lt;Prej&#x161;nji',
+ nextText: 'Naslednji&gt;',
+ currentText: 'Trenutni',
+ monthNames: ['Januar','Februar','Marec','April','Maj','Junij',
+ 'Julij','Avgust','September','Oktober','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Avg','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedelja','Ponedeljek','Torek','Sreda','&#x10C;etrtek','Petek','Sobota'],
+ dayNamesShort: ['Ned','Pon','Tor','Sre','&#x10C;et','Pet','Sob'],
+ dayNamesMin: ['Ne','Po','To','Sr','&#x10C;e','Pe','So'],
+ weekHeader: 'Teden',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sl']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-sq.js b/vendors/jquery/i18n/jquery.ui.datepicker-sq.js
new file mode 100644
index 000000000..21974c56c
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-sq.js
@@ -0,0 +1,23 @@
+/* Albanian initialisation for the jQuery UI date picker plugin. */
+/* Written by Flakron Bytyqi (flakron@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['sq'] = {
+ closeText: 'mbylle',
+ prevText: '&#x3c;mbrapa',
+ nextText: 'Përpara&#x3e;',
+ currentText: 'sot',
+ monthNames: ['Janar','Shkurt','Mars','Prill','Maj','Qershor',
+ 'Korrik','Gusht','Shtator','Tetor','Nëntor','Dhjetor'],
+ monthNamesShort: ['Jan','Shk','Mar','Pri','Maj','Qer',
+ 'Kor','Gus','Sht','Tet','Nën','Dhj'],
+ dayNames: ['E Diel','E Hënë','E Martë','E Mërkurë','E Enjte','E Premte','E Shtune'],
+ dayNamesShort: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+ dayNamesMin: ['Di','Hë','Ma','Më','En','Pr','Sh'],
+ weekHeader: 'Ja',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sq']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-sr-SR.js b/vendors/jquery/i18n/jquery.ui.datepicker-sr-SR.js
new file mode 100644
index 000000000..e7a8683e4
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-sr-SR.js
@@ -0,0 +1,23 @@
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+ $.datepicker.regional['sr-SR'] = {
+ closeText: 'Zatvori',
+ prevText: '&#x3c;',
+ nextText: '&#x3e;',
+ currentText: 'Danas',
+ monthNames: ['Januar','Februar','Mart','April','Maj','Jun',
+ 'Jul','Avgust','Septembar','Oktobar','Novembar','Decembar'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Avg','Sep','Okt','Nov','Dec'],
+ dayNames: ['Nedelja','Ponedeljak','Utorak','Sreda','ÄŒetvrtak','Petak','Subota'],
+ dayNamesShort: ['Ned','Pon','Uto','Sre','ÄŒet','Pet','Sub'],
+ dayNamesMin: ['Ne','Po','Ut','Sr','ÄŒe','Pe','Su'],
+ weekHeader: 'Sed',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sr-SR']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-sr.js b/vendors/jquery/i18n/jquery.ui.datepicker-sr.js
new file mode 100644
index 000000000..0bd240e69
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-sr.js
@@ -0,0 +1,23 @@
+/* Serbian i18n for the jQuery UI date picker plugin. */
+/* Written by Dejan Dimić. */
+jQuery(function($){
+ $.datepicker.regional['sr'] = {
+ closeText: 'Затвори',
+ prevText: '&#x3c;',
+ nextText: '&#x3e;',
+ currentText: 'ДанаÑ',
+ monthNames: ['Јануар','Фебруар','Март','Ðприл','Мај','Јун',
+ 'Јул','ÐвгуÑÑ‚','Септембар','Октобар','Ðовембар','Децембар'],
+ monthNamesShort: ['Јан','Феб','Мар','Ðпр','Мај','Јун',
+ 'Јул','Ðвг','Сеп','Окт','Ðов','Дец'],
+ dayNames: ['Ðедеља','Понедељак','Уторак','Среда','Четвртак','Петак','Субота'],
+ dayNamesShort: ['Ðед','Пон','Уто','Сре','Чет','Пет','Суб'],
+ dayNamesMin: ['Ðе','По','Ут','Ср','Че','Пе','Су'],
+ weekHeader: 'Сед',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sr']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-sv.js b/vendors/jquery/i18n/jquery.ui.datepicker-sv.js
new file mode 100644
index 000000000..e5f549fbf
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-sv.js
@@ -0,0 +1,23 @@
+/* Swedish initialisation for the jQuery UI date picker plugin. */
+/* Written by Anders Ekdahl ( anders@nomadiz.se). */
+jQuery(function($){
+ $.datepicker.regional['sv'] = {
+ closeText: 'Stäng',
+ prevText: '&laquo;Förra',
+ nextText: 'Nästa&raquo;',
+ currentText: 'Idag',
+ monthNames: ['Januari','Februari','Mars','April','Maj','Juni',
+ 'Juli','Augusti','September','Oktober','November','December'],
+ monthNamesShort: ['Jan','Feb','Mar','Apr','Maj','Jun',
+ 'Jul','Aug','Sep','Okt','Nov','Dec'],
+ dayNamesShort: ['Sön','Mån','Tis','Ons','Tor','Fre','Lör'],
+ dayNames: ['Söndag','Måndag','Tisdag','Onsdag','Torsdag','Fredag','Lördag'],
+ dayNamesMin: ['Sö','Må','Ti','On','To','Fr','Lö'],
+ weekHeader: 'Ve',
+ dateFormat: 'yy-mm-dd',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['sv']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-ta.js b/vendors/jquery/i18n/jquery.ui.datepicker-ta.js
new file mode 100644
index 000000000..40431ed8e
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-ta.js
@@ -0,0 +1,23 @@
+/* Tamil (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by S A Sureshkumar (saskumar@live.com). */
+jQuery(function($){
+ $.datepicker.regional['ta'] = {
+ closeText: 'மூடà¯',
+ prevText: 'à®®à¯à®©à¯à®©à¯ˆà®¯à®¤à¯',
+ nextText: 'அடà¯à®¤à¯à®¤à®¤à¯',
+ currentText: 'இனà¯à®±à¯',
+ monthNames: ['தை','மாசி','பஙà¯à®•à¯à®©à®¿','சிதà¯à®¤à®¿à®°à¯ˆ','வைகாசி','ஆனி',
+ 'ஆடி','ஆவணி','பà¯à®°à®Ÿà¯à®Ÿà®¾à®šà®¿','à®à®ªà¯à®ªà®šà®¿','காரà¯à®¤à¯à®¤à®¿à®•à¯ˆ','மாரà¯à®•à®´à®¿'],
+ monthNamesShort: ['தை','மாசி','பஙà¯','சிதà¯','வைகா','ஆனி',
+ 'ஆடி','ஆவ','பà¯à®°','à®à®ªà¯','காரà¯','மாரà¯'],
+ dayNames: ['ஞாயிறà¯à®±à¯à®•à¯à®•à®¿à®´à®®à¯ˆ','திஙà¯à®•à®Ÿà¯à®•à®¿à®´à®®à¯ˆ','செவà¯à®µà®¾à®¯à¯à®•à¯à®•à®¿à®´à®®à¯ˆ','பà¯à®¤à®©à¯à®•à®¿à®´à®®à¯ˆ','வியாழகà¯à®•à®¿à®´à®®à¯ˆ','வெளà¯à®³à®¿à®•à¯à®•à®¿à®´à®®à¯ˆ','சனிகà¯à®•à®¿à®´à®®à¯ˆ'],
+ dayNamesShort: ['ஞாயிறà¯','திஙà¯à®•à®³à¯','செவà¯à®µà®¾à®¯à¯','பà¯à®¤à®©à¯','வியாழனà¯','வெளà¯à®³à®¿','சனி'],
+ dayNamesMin: ['ஞா','தி','செ','பà¯','வி','வெ','ச'],
+ weekHeader: 'Ðе',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['ta']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-th.js b/vendors/jquery/i18n/jquery.ui.datepicker-th.js
new file mode 100644
index 000000000..2e5300cfd
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-th.js
@@ -0,0 +1,23 @@
+/* Thai initialisation for the jQuery UI date picker plugin. */
+/* Written by pipo (pipo@sixhead.com). */
+jQuery(function($){
+ $.datepicker.regional['th'] = {
+ closeText: 'ปิด',
+ prevText: '&laquo;&nbsp;ย้อน',
+ nextText: 'ถัดไป&nbsp;&raquo;',
+ currentText: 'วันนี้',
+ monthNames: ['มà¸à¸£à¸²à¸„ม','à¸à¸¸à¸¡à¸ à¸²à¸žà¸±à¸™à¸˜à¹Œ','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน',
+ 'à¸à¸£à¸à¸Žà¸²à¸„ม','สิงหาคม','à¸à¸±à¸™à¸¢à¸²à¸¢à¸™','ตุลาคม','พฤศจิà¸à¸²à¸¢à¸™','ธันวาคม'],
+ monthNamesShort: ['ม.ค.','à¸.พ.','มี.ค.','เม.ย.','พ.ค.','มิ.ย.',
+ 'à¸.ค.','ส.ค.','à¸.ย.','ต.ค.','พ.ย.','ธ.ค.'],
+ dayNames: ['อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุà¸à¸£à¹Œ','เสาร์'],
+ dayNamesShort: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+ dayNamesMin: ['อา.','จ.','อ.','พ.','พฤ.','ศ.','ส.'],
+ weekHeader: 'Wk',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['th']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-tj.js b/vendors/jquery/i18n/jquery.ui.datepicker-tj.js
new file mode 100644
index 000000000..ed662392c
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-tj.js
@@ -0,0 +1,23 @@
+/* Tajiki (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Abdurahmon Saidov (saidovab@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['tj'] = {
+ closeText: 'Идома',
+ prevText: '&#x3c;Қафо',
+ nextText: 'Пеш&#x3e;',
+ currentText: 'Имрӯз',
+ monthNames: ['Январ','Феврал','Март','Ðпрел','Май','Июн',
+ 'Июл','ÐвгуÑÑ‚','СентÑбр','ОктÑбр','ÐоÑбр','Декабр'],
+ monthNamesShort: ['Янв','Фев','Мар','Ðпр','Май','Июн',
+ 'Июл','Ðвг','Сен','Окт','ÐоÑ','Дек'],
+ dayNames: ['Ñкшанбе','душанбе','Ñешанбе','чоршанбе','панҷшанбе','ҷумъа','шанбе'],
+ dayNamesShort: ['Ñкш','душ','Ñеш','чор','пан','ҷум','шан'],
+ dayNamesMin: ['Як','Дш','Сш','Чш','Пш','Ҷм','Шн'],
+ weekHeader: 'Хф',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['tj']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-tr.js b/vendors/jquery/i18n/jquery.ui.datepicker-tr.js
new file mode 100644
index 000000000..dedfc7ff9
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-tr.js
@@ -0,0 +1,23 @@
+/* Turkish initialisation for the jQuery UI date picker plugin. */
+/* Written by Izzet Emre Erkan (kara@karalamalar.net). */
+jQuery(function($){
+ $.datepicker.regional['tr'] = {
+ closeText: 'kapat',
+ prevText: '&#x3c;geri',
+ nextText: 'ileri&#x3e',
+ currentText: 'bugün',
+ monthNames: ['Ocak','Şubat','Mart','Nisan','Mayıs','Haziran',
+ 'Temmuz','Ağustos','Eylül','Ekim','Kasım','Aralık'],
+ monthNamesShort: ['Oca','Åžub','Mar','Nis','May','Haz',
+ 'Tem','AÄŸu','Eyl','Eki','Kas','Ara'],
+ dayNames: ['Pazar','Pazartesi','Salı','Çarşamba','Perşembe','Cuma','Cumartesi'],
+ dayNamesShort: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+ dayNamesMin: ['Pz','Pt','Sa','Ça','Pe','Cu','Ct'],
+ weekHeader: 'Hf',
+ dateFormat: 'dd.mm.yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['tr']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-uk.js b/vendors/jquery/i18n/jquery.ui.datepicker-uk.js
new file mode 100644
index 000000000..2718f5d1c
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-uk.js
@@ -0,0 +1,24 @@
+/* Ukrainian (UTF-8) initialisation for the jQuery UI date picker plugin. */
+/* Written by Maxim Drogobitskiy (maxdao@gmail.com). */
+/* Corrected by Igor Milla (igor.fsp.milla@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['uk'] = {
+ closeText: 'Закрити',
+ prevText: '&#x3c;',
+ nextText: '&#x3e;',
+ currentText: 'Сьогодні',
+ monthNames: ['Січень','Лютий','Березень','Квітень','Травень','Червень',
+ 'Липень','Серпень','ВереÑень','Жовтень','ЛиÑтопад','Грудень'],
+ monthNamesShort: ['Січ','Лют','Бер','Кві','Тра','Чер',
+ 'Лип','Сер','Вер','Жов','ЛиÑ','Гру'],
+ dayNames: ['неділÑ','понеділок','вівторок','Ñереда','четвер','п’ÑтницÑ','Ñубота'],
+ dayNamesShort: ['нед','пнд','вів','Ñрд','чтв','птн','Ñбт'],
+ dayNamesMin: ['Ðд','Пн','Ð’Ñ‚','Ср','Чт','Пт','Сб'],
+ weekHeader: 'Тиж',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['uk']);
+}); \ No newline at end of file
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-vi.js b/vendors/jquery/i18n/jquery.ui.datepicker-vi.js
new file mode 100644
index 000000000..1d8f7bbd9
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-vi.js
@@ -0,0 +1,23 @@
+/* Vietnamese initialisation for the jQuery UI date picker plugin. */
+/* Translated by Le Thanh Huy (lthanhhuy@cit.ctu.edu.vn). */
+jQuery(function($){
+ $.datepicker.regional['vi'] = {
+ closeText: 'Äóng',
+ prevText: '&#x3c;TrÆ°á»›c',
+ nextText: 'Tiếp&#x3e;',
+ currentText: 'Hôm nay',
+ monthNames: ['Tháng Một', 'Tháng Hai', 'Tháng Ba', 'Tháng Tư', 'Tháng Năm', 'Tháng Sáu',
+ 'Tháng Bảy', 'Tháng Tám', 'Tháng Chín', 'Tháng MÆ°á»i', 'Tháng MÆ°á»i Má»™t', 'Tháng MÆ°á»i Hai'],
+ monthNamesShort: ['Tháng 1', 'Tháng 2', 'Tháng 3', 'Tháng 4', 'Tháng 5', 'Tháng 6',
+ 'Tháng 7', 'Tháng 8', 'Tháng 9', 'Tháng 10', 'Tháng 11', 'Tháng 12'],
+ dayNames: ['Chủ Nhật', 'Thứ Hai', 'Thứ Ba', 'Thứ Tư', 'Thứ Năm', 'Thứ Sáu', 'Thứ Bảy'],
+ dayNamesShort: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+ dayNamesMin: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
+ weekHeader: 'Tu',
+ dateFormat: 'dd/mm/yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: false,
+ yearSuffix: ''};
+ $.datepicker.setDefaults($.datepicker.regional['vi']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-zh-CN.js b/vendors/jquery/i18n/jquery.ui.datepicker-zh-CN.js
new file mode 100644
index 000000000..6c4883f53
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-zh-CN.js
@@ -0,0 +1,23 @@
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Cloudream (cloudream@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['zh-CN'] = {
+ closeText: '关闭',
+ prevText: '&#x3c;上月',
+ nextText: '下月&#x3e;',
+ currentText: '今天',
+ monthNames: ['一月','二月','三月','四月','五月','六月',
+ '七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+ monthNamesShort: ['一','二','三','四','五','六',
+ '七','å…«','ä¹','å','å一','å二'],
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+ dayNamesMin: ['日','一','二','三','四','五','六'],
+ weekHeader: '周',
+ dateFormat: 'yy-mm-dd',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: 'å¹´'};
+ $.datepicker.setDefaults($.datepicker.regional['zh-CN']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-zh-HK.js b/vendors/jquery/i18n/jquery.ui.datepicker-zh-HK.js
new file mode 100644
index 000000000..06c4c628c
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-zh-HK.js
@@ -0,0 +1,23 @@
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by SCCY (samuelcychan@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['zh-HK'] = {
+ closeText: '關閉',
+ prevText: '&#x3c;上月',
+ nextText: '下月&#x3e;',
+ currentText: '今天',
+ monthNames: ['一月','二月','三月','四月','五月','六月',
+ '七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+ monthNamesShort: ['一','二','三','四','五','六',
+ '七','å…«','ä¹','å','å一','å二'],
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+ dayNamesMin: ['日','一','二','三','四','五','六'],
+ weekHeader: '周',
+ dateFormat: 'dd-mm-yy',
+ firstDay: 0,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: 'å¹´'};
+ $.datepicker.setDefaults($.datepicker.regional['zh-HK']);
+});
diff --git a/vendors/jquery/i18n/jquery.ui.datepicker-zh-TW.js b/vendors/jquery/i18n/jquery.ui.datepicker-zh-TW.js
new file mode 100644
index 000000000..dd51e359c
--- /dev/null
+++ b/vendors/jquery/i18n/jquery.ui.datepicker-zh-TW.js
@@ -0,0 +1,23 @@
+/* Chinese initialisation for the jQuery UI date picker plugin. */
+/* Written by Ressol (ressol@gmail.com). */
+jQuery(function($){
+ $.datepicker.regional['zh-TW'] = {
+ closeText: '關閉',
+ prevText: '&#x3c;上月',
+ nextText: '下月&#x3e;',
+ currentText: '今天',
+ monthNames: ['一月','二月','三月','四月','五月','六月',
+ '七月','八月','ä¹æœˆ','å月','å一月','å二月'],
+ monthNamesShort: ['一','二','三','四','五','六',
+ '七','å…«','ä¹','å','å一','å二'],
+ dayNames: ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'],
+ dayNamesShort: ['周日','周一','周二','周三','周四','周五','周六'],
+ dayNamesMin: ['日','一','二','三','四','五','六'],
+ weekHeader: '周',
+ dateFormat: 'yy/mm/dd',
+ firstDay: 1,
+ isRTL: false,
+ showMonthAfterYear: true,
+ yearSuffix: 'å¹´'};
+ $.datepicker.setDefaults($.datepicker.regional['zh-TW']);
+});
diff --git a/vendors/jquery/jquery-1.6.4.min.js b/vendors/jquery/jquery-1.6.4.min.js
new file mode 100644
index 000000000..3684c36b5
--- /dev/null
+++ b/vendors/jquery/jquery-1.6.4.min.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
+(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete
+t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
+(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file
diff --git a/vendors/jquery/jquery-ui-1.8.16.min.js b/vendors/jquery/jquery-ui-1.8.16.min.js
new file mode 100644
index 000000000..0202506b5
--- /dev/null
+++ b/vendors/jquery/jquery-ui-1.8.16.min.js
@@ -0,0 +1,414 @@
+/*!
+ * jQuery UI 1.8.16
+ *
+ * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI
+ */
+(function(a,d){function c(h,g){var i=h.nodeName.toLowerCase();if("area"===i){g=h.parentNode;i=g.name;if(!h.href||!i||g.nodeName.toLowerCase()!=="map")return false;h=a("img[usemap=#"+i+"]")[0];return!!h&&e(h)}return(/input|select|textarea|button|object/.test(i)?!h.disabled:"a"==i?h.href||g:g)&&e(h)}function e(h){return!a(h).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(!a.ui.version){a.extend(a.ui,{version:"1.8.16",
+keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(h,g){return typeof h==="number"?this.each(function(){var i=
+this;setTimeout(function(){a(i).focus();g&&g.call(i)},h)}):this._focus.apply(this,arguments)},scrollParent:function(){var h;h=a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,
+"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!h.length?a(document):h},zIndex:function(h){if(h!==d)return this.css("zIndex",h);if(this.length){h=a(this[0]);for(var g;h.length&&h[0]!==document;){g=h.css("position");if(g==="absolute"||g==="relative"||g==="fixed"){g=parseInt(h.css("zIndex"),10);if(!isNaN(g)&&g!==0)return g}h=h.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":
+"mousedown")+".ui-disableSelection",function(h){h.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(h,g){function i(l,o,n,k){a.each(b,function(){o-=parseFloat(a.curCSS(l,"padding"+this,true))||0;if(n)o-=parseFloat(a.curCSS(l,"border"+this+"Width",true))||0;if(k)o-=parseFloat(a.curCSS(l,"margin"+this,true))||0});return o}var b=g==="Width"?["Left","Right"]:["Top","Bottom"],f=g.toLowerCase(),j={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,
+outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+g]=function(l){if(l===d)return j["inner"+g].call(this);return this.each(function(){a(this).css(f,i(this,l)+"px")})};a.fn["outer"+g]=function(l,o){if(typeof l!=="number")return j["outer"+g].call(this,l);return this.each(function(){a(this).css(f,i(this,l,true,o)+"px")})}});a.extend(a.expr[":"],{data:function(h,g,i){return!!a.data(h,i[3])},focusable:function(h){return c(h,!isNaN(a.attr(h,"tabindex")))},tabbable:function(h){var g=a.attr(h,
+"tabindex"),i=isNaN(g);return(i||g>=0)&&c(h,!i)}});a(function(){var h=document.body,g=h.appendChild(g=document.createElement("div"));a.extend(g.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=g.offsetHeight===100;a.support.selectstart="onselectstart"in g;h.removeChild(g).style.display="none"});a.extend(a.ui,{plugin:{add:function(h,g,i){h=a.ui[h].prototype;for(var b in i){h.plugins[b]=h.plugins[b]||[];h.plugins[b].push([g,i[b]])}},call:function(h,g,i){if((g=h.plugins[g])&&
+h.element[0].parentNode)for(var b=0;b<g.length;b++)h.options[g[b][0]]&&g[b][1].apply(h.element,i)}},contains:function(h,g){return document.compareDocumentPosition?h.compareDocumentPosition(g)&16:h!==g&&h.contains(g)},hasScroll:function(h,g){if(a(h).css("overflow")==="hidden")return false;g=g&&g==="left"?"scrollLeft":"scrollTop";var i=false;if(h[g]>0)return true;h[g]=1;i=h[g]>0;h[g]=0;return i},isOverAxis:function(h,g,i){return h>g&&h<g+i},isOver:function(h,g,i,b,f,j){return a.ui.isOverAxis(h,i,f)&&
+a.ui.isOverAxis(g,b,j)}})}})(jQuery);
+(function(a,d){if(a.cleanData){var c=a.cleanData;a.cleanData=function(h){for(var g=0,i;(i=h[g])!=null;g++)try{a(i).triggerHandler("remove")}catch(b){}c(h)}}else{var e=a.fn.remove;a.fn.remove=function(h,g){return this.each(function(){if(!g)if(!h||a.filter(h,[this]).length)a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(i){}});return e.call(a(this),h,g)})}}a.widget=function(h,g,i){var b=h.split(".")[0],f;h=h.split(".")[1];f=b+"-"+h;if(!i){i=g;g=a.Widget}a.expr[":"][f]=
+function(j){return!!a.data(j,h)};a[b]=a[b]||{};a[b][h]=function(j,l){arguments.length&&this._createWidget(j,l)};g=new g;g.options=a.extend(true,{},g.options);a[b][h].prototype=a.extend(true,g,{namespace:b,widgetName:h,widgetEventPrefix:a[b][h].prototype.widgetEventPrefix||h,widgetBaseClass:f},i);a.widget.bridge(h,a[b][h])};a.widget.bridge=function(h,g){a.fn[h]=function(i){var b=typeof i==="string",f=Array.prototype.slice.call(arguments,1),j=this;i=!b&&f.length?a.extend.apply(null,[true,i].concat(f)):
+i;if(b&&i.charAt(0)==="_")return j;b?this.each(function(){var l=a.data(this,h),o=l&&a.isFunction(l[i])?l[i].apply(l,f):l;if(o!==l&&o!==d){j=o;return false}}):this.each(function(){var l=a.data(this,h);l?l.option(i||{})._init():a.data(this,h,new g(i,this))});return j}};a.Widget=function(h,g){arguments.length&&this._createWidget(h,g)};a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(h,g){a.data(g,this.widgetName,this);this.element=a(g);this.options=
+a.extend(true,{},this.options,this._getCreateOptions(),h);var i=this;this.element.bind("remove."+this.widgetName,function(){i.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+
+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(h,g){var i=h;if(arguments.length===0)return a.extend({},this.options);if(typeof h==="string"){if(g===d)return this.options[h];i={};i[h]=g}this._setOptions(i);return this},_setOptions:function(h){var g=this;a.each(h,function(i,b){g._setOption(i,b)});return this},_setOption:function(h,g){this.options[h]=g;if(h==="disabled")this.widget()[g?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",
+g);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(h,g,i){var b=this.options[h];g=a.Event(g);g.type=(h===this.widgetEventPrefix?h:this.widgetEventPrefix+h).toLowerCase();i=i||{};if(g.originalEvent){h=a.event.props.length;for(var f;h;){f=a.event.props[--h];g[f]=g.originalEvent[f]}}this.element.trigger(g,i);return!(a.isFunction(b)&&b.call(this.element[0],g,i)===false||g.isDefaultPrevented())}}})(jQuery);
+(function(a){var d=false;a(document).mouseup(function(){d=false});a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var c=this;this.element.bind("mousedown."+this.widgetName,function(e){return c._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===a.data(e.target,c.widgetName+".preventClickEvent")){a.removeData(e.target,c.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+
+this.widgetName)},_mouseDown:function(c){if(!d){this._mouseStarted&&this._mouseUp(c);this._mouseDownEvent=c;var e=this,h=c.which==1,g=typeof this.options.cancel=="string"&&c.target.nodeName?a(c.target).closest(this.options.cancel).length:false;if(!h||g||!this._mouseCapture(c))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c)){this._mouseStarted=
+this._mouseStart(c)!==false;if(!this._mouseStarted){c.preventDefault();return true}}true===a.data(c.target,this.widgetName+".preventClickEvent")&&a.removeData(c.target,this.widgetName+".preventClickEvent");this._mouseMoveDelegate=function(i){return e._mouseMove(i)};this._mouseUpDelegate=function(i){return e._mouseUp(i)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);c.preventDefault();return d=true}},_mouseMove:function(c){if(a.browser.msie&&
+!(document.documentMode>=9)&&!c.button)return this._mouseUp(c);if(this._mouseStarted){this._mouseDrag(c);return c.preventDefault()}if(this._mouseDistanceMet(c)&&this._mouseDelayMet(c))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,c)!==false)?this._mouseDrag(c):this._mouseUp(c);return!this._mouseStarted},_mouseUp:function(c){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=
+false;c.target==this._mouseDownEvent.target&&a.data(c.target,this.widgetName+".preventClickEvent",true);this._mouseStop(c)}return false},_mouseDistanceMet:function(c){return Math.max(Math.abs(this._mouseDownEvent.pageX-c.pageX),Math.abs(this._mouseDownEvent.pageY-c.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
+(function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
+"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(d){var c=
+this.options;if(this.helper||c.disabled||a(d.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(d);if(!this.handle)return false;if(c.iframeFix)a(c.iframeFix===true?"iframe":c.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(a(this).offset()).appendTo("body")});return true},_mouseStart:function(d){var c=this.options;
+this.helper=this._createHelper(d);this._cacheHelperProportions();if(a.ui.ddmanager)a.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});
+this.originalPosition=this.position=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);c.containment&&this._setContainment();if(this._trigger("start",d)===false){this._clear();return false}this._cacheHelperProportions();a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,d);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(d,true);a.ui.ddmanager&&a.ui.ddmanager.dragStart(this,d);return true},
+_mouseDrag:function(d,c){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!c){c=this._uiHash();if(this._trigger("drag",d,c)===false){this._mouseUp({});return false}this.position=c.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";a.ui.ddmanager&&a.ui.ddmanager.drag(this,d);return false},_mouseStop:function(d){var c=
+false;if(a.ui.ddmanager&&!this.options.dropBehaviour)c=a.ui.ddmanager.drop(this,d);if(this.dropped){c=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!c||this.options.revert=="valid"&&c||this.options.revert===true||a.isFunction(this.options.revert)&&this.options.revert.call(this.element,c)){var e=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,
+10),function(){e._trigger("stop",d)!==false&&e._clear()})}else this._trigger("stop",d)!==false&&this._clear();return false},_mouseUp:function(d){this.options.iframeFix===true&&a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)});a.ui.ddmanager&&a.ui.ddmanager.dragStop(this,d);return a.ui.mouse.prototype._mouseUp.call(this,d)},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(d){var c=!this.options.handle||
+!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==d.target)c=true});return c},_createHelper:function(d){var c=this.options;d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[d])):c.helper=="clone"?this.element.clone().removeAttr("id"):this.element;d.parents("body").length||d.appendTo(c.appendTo=="parent"?this.element[0].parentNode:c.appendTo);d[0]!=this.element[0]&&!/(fixed|absolute)/.test(d.css("position"))&&
+d.css("position","absolute");return d},_adjustOffsetFromHelper:function(d){if(typeof d=="string")d=d.split(" ");if(a.isArray(d))d={left:+d[0],top:+d[1]||0};if("left"in d)this.offset.click.left=d.left+this.margins.left;if("right"in d)this.offset.click.left=this.helperProportions.width-d.right+this.margins.left;if("top"in d)this.offset.click.top=d.top+this.margins.top;if("bottom"in d)this.offset.click.top=this.helperProportions.height-d.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
+this.helper.offsetParent();var d=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){d.left+=this.scrollParent.scrollLeft();d.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)d={top:0,left:0};return{top:d.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:d.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
+10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var d=this.element.position();return{top:d.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:d.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),
+10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var d=this.options;if(d.containment=="parent")d.containment=this.helper[0].parentNode;if(d.containment=="document"||d.containment=="window")this.containment=[d.containment=="document"?0:a(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,d.containment=="document"?0:a(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,
+(d.containment=="document"?0:a(window).scrollLeft())+a(d.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d.containment=="document"?0:a(window).scrollTop())+(a(d.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(d.containment)&&d.containment.constructor!=Array){d=a(d.containment);var c=d[0];if(c){d.offset();var e=a(c).css("overflow")!=
+"hidden";this.containment=[(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0),(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0),(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),
+10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom];this.relative_container=d}}else if(d.containment.constructor==Array)this.containment=d.containment},_convertPositionTo:function(d,c){if(!c)c=this.position;d=d=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:c.top+
+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*d)}},_generatePosition:function(d){var c=this.options,e=this.cssPosition=="absolute"&&
+!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName),g=d.pageX,i=d.pageY;if(this.originalPosition){var b;if(this.containment){if(this.relative_container){b=this.relative_container.offset();b=[this.containment[0]+b.left,this.containment[1]+b.top,this.containment[2]+b.left,this.containment[3]+b.top]}else b=this.containment;if(d.pageX-this.offset.click.left<b[0])g=b[0]+this.offset.click.left;
+if(d.pageY-this.offset.click.top<b[1])i=b[1]+this.offset.click.top;if(d.pageX-this.offset.click.left>b[2])g=b[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>b[3])i=b[3]+this.offset.click.top}if(c.grid){i=c.grid[1]?this.originalPageY+Math.round((i-this.originalPageY)/c.grid[1])*c.grid[1]:this.originalPageY;i=b?!(i-this.offset.click.top<b[1]||i-this.offset.click.top>b[3])?i:!(i-this.offset.click.top<b[1])?i-c.grid[1]:i+c.grid[1]:i;g=c.grid[0]?this.originalPageX+Math.round((g-this.originalPageX)/
+c.grid[0])*c.grid[0]:this.originalPageX;g=b?!(g-this.offset.click.left<b[0]||g-this.offset.click.left>b[2])?g:!(g-this.offset.click.left<b[0])?g-c.grid[0]:g+c.grid[0]:g}}return{top:i-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<
+526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(d,c,e){e=e||this._uiHash();a.ui.plugin.call(this,d,[c,e]);if(d=="drag")this.positionAbs=this._convertPositionTo("absolute");return a.Widget.prototype._trigger.call(this,d,c,
+e)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.extend(a.ui.draggable,{version:"1.8.16"});a.ui.plugin.add("draggable","connectToSortable",{start:function(d,c){var e=a(this).data("draggable"),h=e.options,g=a.extend({},c,{item:e.element});e.sortables=[];a(h.connectToSortable).each(function(){var i=a.data(this,"sortable");if(i&&!i.options.disabled){e.sortables.push({instance:i,shouldRevert:i.options.revert});
+i.refreshPositions();i._trigger("activate",d,g)}})},stop:function(d,c){var e=a(this).data("draggable"),h=a.extend({},c,{item:e.element});a.each(e.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;e.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(d);this.instance.options.helper=this.instance.options._helper;e.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=
+false;this.instance._trigger("deactivate",d,h)}})},drag:function(d,c){var e=a(this).data("draggable"),h=this;a.each(e.sortables,function(){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(h).clone().removeAttr("id").appendTo(this.instance.element).data("sortable-item",true);
+this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return c.helper[0]};d.target=this.instance.currentItem[0];this.instance._mouseCapture(d,true);this.instance._mouseStart(d,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;
+e._trigger("toSortable",d);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}this.instance.currentItem&&this.instance._mouseDrag(d)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",d,this.instance._uiHash(this.instance));this.instance._mouseStop(d,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&
+this.instance.placeholder.remove();e._trigger("fromSortable",d);e.dropped=false}})}});a.ui.plugin.add("draggable","cursor",{start:function(){var d=a("body"),c=a(this).data("draggable").options;if(d.css("cursor"))c._cursor=d.css("cursor");d.css("cursor",c.cursor)},stop:function(){var d=a(this).data("draggable").options;d._cursor&&a("body").css("cursor",d._cursor)}});a.ui.plugin.add("draggable","opacity",{start:function(d,c){d=a(c.helper);c=a(this).data("draggable").options;if(d.css("opacity"))c._opacity=
+d.css("opacity");d.css("opacity",c.opacity)},stop:function(d,c){d=a(this).data("draggable").options;d._opacity&&a(c.helper).css("opacity",d._opacity)}});a.ui.plugin.add("draggable","scroll",{start:function(){var d=a(this).data("draggable");if(d.scrollParent[0]!=document&&d.scrollParent[0].tagName!="HTML")d.overflowOffset=d.scrollParent.offset()},drag:function(d){var c=a(this).data("draggable"),e=c.options,h=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!e.axis||e.axis!=
+"x")if(c.overflowOffset.top+c.scrollParent[0].offsetHeight-d.pageY<e.scrollSensitivity)c.scrollParent[0].scrollTop=h=c.scrollParent[0].scrollTop+e.scrollSpeed;else if(d.pageY-c.overflowOffset.top<e.scrollSensitivity)c.scrollParent[0].scrollTop=h=c.scrollParent[0].scrollTop-e.scrollSpeed;if(!e.axis||e.axis!="y")if(c.overflowOffset.left+c.scrollParent[0].offsetWidth-d.pageX<e.scrollSensitivity)c.scrollParent[0].scrollLeft=h=c.scrollParent[0].scrollLeft+e.scrollSpeed;else if(d.pageX-c.overflowOffset.left<
+e.scrollSensitivity)c.scrollParent[0].scrollLeft=h=c.scrollParent[0].scrollLeft-e.scrollSpeed}else{if(!e.axis||e.axis!="x")if(d.pageY-a(document).scrollTop()<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()-e.scrollSpeed);else if(a(window).height()-(d.pageY-a(document).scrollTop())<e.scrollSensitivity)h=a(document).scrollTop(a(document).scrollTop()+e.scrollSpeed);if(!e.axis||e.axis!="y")if(d.pageX-a(document).scrollLeft()<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()-
+e.scrollSpeed);else if(a(window).width()-(d.pageX-a(document).scrollLeft())<e.scrollSensitivity)h=a(document).scrollLeft(a(document).scrollLeft()+e.scrollSpeed)}h!==false&&a.ui.ddmanager&&!e.dropBehaviour&&a.ui.ddmanager.prepareOffsets(c,d)}});a.ui.plugin.add("draggable","snap",{start:function(){var d=a(this).data("draggable"),c=d.options;d.snapElements=[];a(c.snap.constructor!=String?c.snap.items||":data(draggable)":c.snap).each(function(){var e=a(this),h=e.offset();this!=d.element[0]&&d.snapElements.push({item:this,
+width:e.outerWidth(),height:e.outerHeight(),top:h.top,left:h.left})})},drag:function(d,c){for(var e=a(this).data("draggable"),h=e.options,g=h.snapTolerance,i=c.offset.left,b=i+e.helperProportions.width,f=c.offset.top,j=f+e.helperProportions.height,l=e.snapElements.length-1;l>=0;l--){var o=e.snapElements[l].left,n=o+e.snapElements[l].width,k=e.snapElements[l].top,m=k+e.snapElements[l].height;if(o-g<i&&i<n+g&&k-g<f&&f<m+g||o-g<i&&i<n+g&&k-g<j&&j<m+g||o-g<b&&b<n+g&&k-g<f&&f<m+g||o-g<b&&b<n+g&&k-g<j&&
+j<m+g){if(h.snapMode!="inner"){var p=Math.abs(k-j)<=g,q=Math.abs(m-f)<=g,s=Math.abs(o-b)<=g,r=Math.abs(n-i)<=g;if(p)c.position.top=e._convertPositionTo("relative",{top:k-e.helperProportions.height,left:0}).top-e.margins.top;if(q)c.position.top=e._convertPositionTo("relative",{top:m,left:0}).top-e.margins.top;if(s)c.position.left=e._convertPositionTo("relative",{top:0,left:o-e.helperProportions.width}).left-e.margins.left;if(r)c.position.left=e._convertPositionTo("relative",{top:0,left:n}).left-e.margins.left}var u=
+p||q||s||r;if(h.snapMode!="outer"){p=Math.abs(k-f)<=g;q=Math.abs(m-j)<=g;s=Math.abs(o-i)<=g;r=Math.abs(n-b)<=g;if(p)c.position.top=e._convertPositionTo("relative",{top:k,left:0}).top-e.margins.top;if(q)c.position.top=e._convertPositionTo("relative",{top:m-e.helperProportions.height,left:0}).top-e.margins.top;if(s)c.position.left=e._convertPositionTo("relative",{top:0,left:o}).left-e.margins.left;if(r)c.position.left=e._convertPositionTo("relative",{top:0,left:n-e.helperProportions.width}).left-e.margins.left}if(!e.snapElements[l].snapping&&
+(p||q||s||r||u))e.options.snap.snap&&e.options.snap.snap.call(e.element,d,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=p||q||s||r||u}else{e.snapElements[l].snapping&&e.options.snap.release&&e.options.snap.release.call(e.element,d,a.extend(e._uiHash(),{snapItem:e.snapElements[l].item}));e.snapElements[l].snapping=false}}}});a.ui.plugin.add("draggable","stack",{start:function(){var d=a(this).data("draggable").options;d=a.makeArray(a(d.stack)).sort(function(e,h){return(parseInt(a(e).css("zIndex"),
+10)||0)-(parseInt(a(h).css("zIndex"),10)||0)});if(d.length){var c=parseInt(d[0].style.zIndex)||0;a(d).each(function(e){this.style.zIndex=c+e});this[0].style.zIndex=c+d.length}}});a.ui.plugin.add("draggable","zIndex",{start:function(d,c){d=a(c.helper);c=a(this).data("draggable").options;if(d.css("zIndex"))c._zIndex=d.css("zIndex");d.css("zIndex",c.zIndex)},stop:function(d,c){d=a(this).data("draggable").options;d._zIndex&&a(c.helper).css("zIndex",d._zIndex)}})})(jQuery);
+(function(a){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var d=this.options,c=d.accept;this.isover=0;this.isout=1;this.accept=a.isFunction(c)?c:function(e){return e.is(c)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[d.scope]=a.ui.ddmanager.droppables[d.scope]||[];a.ui.ddmanager.droppables[d.scope].push(this);
+d.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var d=a.ui.ddmanager.droppables[this.options.scope],c=0;c<d.length;c++)d[c]==this&&d.splice(c,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(d,c){if(d=="accept")this.accept=a.isFunction(c)?c:function(e){return e.is(c)};a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(d){var c=a.ui.ddmanager.current;this.options.activeClass&&
+this.element.addClass(this.options.activeClass);c&&this._trigger("activate",d,this.ui(c))},_deactivate:function(d){var c=a.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);c&&this._trigger("deactivate",d,this.ui(c))},_over:function(d){var c=a.ui.ddmanager.current;if(!(!c||(c.currentItem||c.element)[0]==this.element[0]))if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
+this._trigger("over",d,this.ui(c))}},_out:function(d){var c=a.ui.ddmanager.current;if(!(!c||(c.currentItem||c.element)[0]==this.element[0]))if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",d,this.ui(c))}},_drop:function(d,c){var e=c||a.ui.ddmanager.current;if(!e||(e.currentItem||e.element)[0]==this.element[0])return false;var h=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
+a.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==e.options.scope&&g.accept.call(g.element[0],e.currentItem||e.element)&&a.ui.intersect(e,a.extend(g,{offset:g.element.offset()}),g.options.tolerance)){h=true;return false}});if(h)return false;if(this.accept.call(this.element[0],e.currentItem||e.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
+d,this.ui(e));return this.element}return false},ui:function(d){return{draggable:d.currentItem||d.element,helper:d.helper,position:d.position,offset:d.positionAbs}}});a.extend(a.ui.droppable,{version:"1.8.16"});a.ui.intersect=function(d,c,e){if(!c.offset)return false;var h=(d.positionAbs||d.position.absolute).left,g=h+d.helperProportions.width,i=(d.positionAbs||d.position.absolute).top,b=i+d.helperProportions.height,f=c.offset.left,j=f+c.proportions.width,l=c.offset.top,o=l+c.proportions.height;
+switch(e){case "fit":return f<=h&&g<=j&&l<=i&&b<=o;case "intersect":return f<h+d.helperProportions.width/2&&g-d.helperProportions.width/2<j&&l<i+d.helperProportions.height/2&&b-d.helperProportions.height/2<o;case "pointer":return a.ui.isOver((d.positionAbs||d.position.absolute).top+(d.clickOffset||d.offset.click).top,(d.positionAbs||d.position.absolute).left+(d.clickOffset||d.offset.click).left,l,f,c.proportions.height,c.proportions.width);case "touch":return(i>=l&&i<=o||b>=l&&b<=o||i<l&&b>o)&&(h>=
+f&&h<=j||g>=f&&g<=j||h<f&&g>j);default:return false}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(d,c){var e=a.ui.ddmanager.droppables[d.options.scope]||[],h=c?c.type:null,g=(d.currentItem||d.element).find(":data(droppable)").andSelf(),i=0;a:for(;i<e.length;i++)if(!(e[i].options.disabled||d&&!e[i].accept.call(e[i].element[0],d.currentItem||d.element))){for(var b=0;b<g.length;b++)if(g[b]==e[i].element[0]){e[i].proportions.height=0;continue a}e[i].visible=e[i].element.css("display")!=
+"none";if(e[i].visible){h=="mousedown"&&e[i]._activate.call(e[i],c);e[i].offset=e[i].element.offset();e[i].proportions={width:e[i].element[0].offsetWidth,height:e[i].element[0].offsetHeight}}}},drop:function(d,c){var e=false;a.each(a.ui.ddmanager.droppables[d.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&a.ui.intersect(d,this,this.options.tolerance))e=e||this._drop.call(this,c);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],d.currentItem||
+d.element)){this.isout=1;this.isover=0;this._deactivate.call(this,c)}}});return e},dragStart:function(d,c){d.element.parents(":not(body,html)").bind("scroll.droppable",function(){d.options.refreshPositions||a.ui.ddmanager.prepareOffsets(d,c)})},drag:function(d,c){d.options.refreshPositions&&a.ui.ddmanager.prepareOffsets(d,c);a.each(a.ui.ddmanager.droppables[d.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var e=a.ui.intersect(d,this,this.options.tolerance);
+if(e=!e&&this.isover==1?"isout":e&&this.isover==0?"isover":null){var h;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){h=a.data(g[0],"droppable");h.greedyChild=e=="isover"?1:0}}if(h&&e=="isover"){h.isover=0;h.isout=1;h._out.call(h,c)}this[e]=1;this[e=="isout"?"isover":"isout"]=0;this[e=="isover"?"_over":"_out"].call(this,c);if(h&&e=="isout"){h.isout=0;h.isover=1;h._over.call(h,c)}}}})},dragStop:function(d,c){d.element.parents(":not(body,html)").unbind("scroll.droppable");
+d.options.refreshPositions||a.ui.ddmanager.prepareOffsets(d,c)}}})(jQuery);
+(function(a){a.widget("ui.resizable",a.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var e=this,h=this.options;this.element.addClass("ui-resizable");a.extend(this,{_aspectRatio:!!h.aspectRatio,aspectRatio:h.aspectRatio,originalElement:this.element,
+_proportionallyResizeElements:[],_helper:h.helper||h.ghost||h.animate?h.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&a.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(a('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
+top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
+this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=h.handles||(!a(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
+nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var g=this.handles.split(",");this.handles={};for(var i=0;i<g.length;i++){var b=a.trim(g[i]),f=a('<div class="ui-resizable-handle '+("ui-resizable-"+b)+'"></div>');/sw|se|ne|nw/.test(b)&&f.css({zIndex:++h.zIndex});"se"==b&&f.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[b]=".ui-resizable-"+b;this.element.append(f)}}this._renderAxis=function(j){j=j||this.element;for(var l in this.handles){if(this.handles[l].constructor==
+String)this.handles[l]=a(this.handles[l],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=a(this.handles[l],this.element),n=0;n=/sw|ne|nw|se|n|s/.test(l)?o.outerHeight():o.outerWidth();o=["padding",/ne|nw|n/.test(l)?"Top":/se|sw|s/.test(l)?"Bottom":/^e$/.test(l)?"Right":"Left"].join("");j.css(o,n);this._proportionallyResize()}a(this.handles[l])}};this._renderAxis(this.element);this._handles=a(".ui-resizable-handle",this.element).disableSelection();
+this._handles.mouseover(function(){if(!e.resizing){if(this.className)var j=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);e.axis=j&&j[1]?j[1]:"se"}});if(h.autoHide){this._handles.hide();a(this.element).addClass("ui-resizable-autohide").hover(function(){if(!h.disabled){a(this).removeClass("ui-resizable-autohide");e._handles.show()}},function(){if(!h.disabled)if(!e.resizing){a(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();
+var e=function(g){a(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var h=this.element;h.after(this.originalElement.css({position:h.css("position"),width:h.outerWidth(),height:h.outerHeight(),top:h.css("top"),left:h.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(e){var h=
+false;for(var g in this.handles)if(a(this.handles[g])[0]==e.target)h=true;return!this.options.disabled&&h},_mouseStart:function(e){var h=this.options,g=this.element.position(),i=this.element;this.resizing=true;this.documentScroll={top:a(document).scrollTop(),left:a(document).scrollLeft()};if(i.is(".ui-draggable")||/absolute/.test(i.css("position")))i.css({position:"absolute",top:g.top,left:g.left});a.browser.opera&&/relative/.test(i.css("position"))&&i.css({position:"relative",top:"auto",left:"auto"});
+this._renderProxy();g=d(this.helper.css("left"));var b=d(this.helper.css("top"));if(h.containment){g+=a(h.containment).scrollLeft()||0;b+=a(h.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:g,top:b};this.size=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalSize=this._helper?{width:i.outerWidth(),height:i.outerHeight()}:{width:i.width(),height:i.height()};this.originalPosition={left:g,top:b};this.sizeDiff=
+{width:i.outerWidth()-i.width(),height:i.outerHeight()-i.height()};this.originalMousePosition={left:e.pageX,top:e.pageY};this.aspectRatio=typeof h.aspectRatio=="number"?h.aspectRatio:this.originalSize.width/this.originalSize.height||1;h=a(".ui-resizable-"+this.axis).css("cursor");a("body").css("cursor",h=="auto"?this.axis+"-resize":h);i.addClass("ui-resizable-resizing");this._propagate("start",e);return true},_mouseDrag:function(e){var h=this.helper,g=this.originalMousePosition,i=this._change[this.axis];
+if(!i)return false;g=i.apply(this,[e,e.pageX-g.left||0,e.pageY-g.top||0]);this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey)g=this._updateRatio(g,e);g=this._respectSize(g,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(g);this._trigger("resize",e,this.ui());return false},
+_mouseStop:function(e){this.resizing=false;var h=this.options,g=this;if(this._helper){var i=this._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName);i=b&&a.ui.hasScroll(i[0],"left")?0:g.sizeDiff.height;b=b?0:g.sizeDiff.width;b={width:g.helper.width()-b,height:g.helper.height()-i};i=parseInt(g.element.css("left"),10)+(g.position.left-g.originalPosition.left)||null;var f=parseInt(g.element.css("top"),10)+(g.position.top-g.originalPosition.top)||null;h.animate||this.element.css(a.extend(b,
+{top:f,left:i}));g.helper.height(g.size.height);g.helper.width(g.size.width);this._helper&&!h.animate&&this._proportionallyResize()}a("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",e);this._helper&&this.helper.remove();return false},_updateVirtualBoundaries:function(e){var h=this.options,g,i,b;h={minWidth:c(h.minWidth)?h.minWidth:0,maxWidth:c(h.maxWidth)?h.maxWidth:Infinity,minHeight:c(h.minHeight)?h.minHeight:0,maxHeight:c(h.maxHeight)?h.maxHeight:
+Infinity};if(this._aspectRatio||e){e=h.minHeight*this.aspectRatio;i=h.minWidth/this.aspectRatio;g=h.maxHeight*this.aspectRatio;b=h.maxWidth/this.aspectRatio;if(e>h.minWidth)h.minWidth=e;if(i>h.minHeight)h.minHeight=i;if(g<h.maxWidth)h.maxWidth=g;if(b<h.maxHeight)h.maxHeight=b}this._vBoundaries=h},_updateCache:function(e){this.offset=this.helper.offset();if(c(e.left))this.position.left=e.left;if(c(e.top))this.position.top=e.top;if(c(e.height))this.size.height=e.height;if(c(e.width))this.size.width=
+e.width},_updateRatio:function(e){var h=this.position,g=this.size,i=this.axis;if(c(e.height))e.width=e.height*this.aspectRatio;else if(c(e.width))e.height=e.width/this.aspectRatio;if(i=="sw"){e.left=h.left+(g.width-e.width);e.top=null}if(i=="nw"){e.top=h.top+(g.height-e.height);e.left=h.left+(g.width-e.width)}return e},_respectSize:function(e){var h=this._vBoundaries,g=this.axis,i=c(e.width)&&h.maxWidth&&h.maxWidth<e.width,b=c(e.height)&&h.maxHeight&&h.maxHeight<e.height,f=c(e.width)&&h.minWidth&&
+h.minWidth>e.width,j=c(e.height)&&h.minHeight&&h.minHeight>e.height;if(f)e.width=h.minWidth;if(j)e.height=h.minHeight;if(i)e.width=h.maxWidth;if(b)e.height=h.maxHeight;var l=this.originalPosition.left+this.originalSize.width,o=this.position.top+this.size.height,n=/sw|nw|w/.test(g);g=/nw|ne|n/.test(g);if(f&&n)e.left=l-h.minWidth;if(i&&n)e.left=l-h.maxWidth;if(j&&g)e.top=o-h.minHeight;if(b&&g)e.top=o-h.maxHeight;if((h=!e.width&&!e.height)&&!e.left&&e.top)e.top=null;else if(h&&!e.top&&e.left)e.left=
+null;return e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var e=this.helper||this.element,h=0;h<this._proportionallyResizeElements.length;h++){var g=this._proportionallyResizeElements[h];if(!this.borderDif){var i=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],b=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=a.map(i,function(f,j){f=parseInt(f,10)||
+0;j=parseInt(b[j],10)||0;return f+j})}a.browser.msie&&(a(e).is(":hidden")||a(e).parents(":hidden").length)||g.css({height:e.height()-this.borderDif[0]-this.borderDif[2]||0,width:e.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var e=this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||a('<div style="overflow:hidden;"></div>');var h=a.browser.msie&&a.browser.version<7,g=h?1:0;h=h?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+
+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++e.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(e,h){return{width:this.originalSize.width+h}},w:function(e,h){return{left:this.originalPosition.left+h,width:this.originalSize.width-h}},n:function(e,h,g){return{top:this.originalPosition.top+g,height:this.originalSize.height-g}},s:function(e,h,g){return{height:this.originalSize.height+
+g}},se:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},sw:function(e,h,g){return a.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,h,g]))},ne:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,h,g]))},nw:function(e,h,g){return a.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,h,g]))}},_propagate:function(e,h){a.ui.plugin.call(this,e,[h,this.ui()]);
+e!="resize"&&this._trigger(e,h,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});a.extend(a.ui.resizable,{version:"1.8.16"});a.ui.plugin.add("resizable","alsoResize",{start:function(){var e=a(this).data("resizable").options,h=function(g){a(g).each(function(){var i=a(this);i.data("resizable-alsoresize",{width:parseInt(i.width(),
+10),height:parseInt(i.height(),10),left:parseInt(i.css("left"),10),top:parseInt(i.css("top"),10),position:i.css("position")})})};if(typeof e.alsoResize=="object"&&!e.alsoResize.parentNode)if(e.alsoResize.length){e.alsoResize=e.alsoResize[0];h(e.alsoResize)}else a.each(e.alsoResize,function(g){h(g)});else h(e.alsoResize)},resize:function(e,h){var g=a(this).data("resizable");e=g.options;var i=g.originalSize,b=g.originalPosition,f={height:g.size.height-i.height||0,width:g.size.width-i.width||0,top:g.position.top-
+b.top||0,left:g.position.left-b.left||0},j=function(l,o){a(l).each(function(){var n=a(this),k=a(this).data("resizable-alsoresize"),m={},p=o&&o.length?o:n.parents(h.originalElement[0]).length?["width","height"]:["width","height","top","left"];a.each(p,function(q,s){if((q=(k[s]||0)+(f[s]||0))&&q>=0)m[s]=q||null});if(a.browser.opera&&/relative/.test(n.css("position"))){g._revertToRelativePosition=true;n.css({position:"absolute",top:"auto",left:"auto"})}n.css(m)})};typeof e.alsoResize=="object"&&!e.alsoResize.nodeType?
+a.each(e.alsoResize,function(l,o){j(l,o)}):j(e.alsoResize)},stop:function(){var e=a(this).data("resizable"),h=e.options,g=function(i){a(i).each(function(){var b=a(this);b.css({position:b.data("resizable-alsoresize").position})})};if(e._revertToRelativePosition){e._revertToRelativePosition=false;typeof h.alsoResize=="object"&&!h.alsoResize.nodeType?a.each(h.alsoResize,function(i){g(i)}):g(h.alsoResize)}a(this).removeData("resizable-alsoresize")}});a.ui.plugin.add("resizable","animate",{stop:function(e){var h=
+a(this).data("resizable"),g=h.options,i=h._proportionallyResizeElements,b=i.length&&/textarea/i.test(i[0].nodeName),f=b&&a.ui.hasScroll(i[0],"left")?0:h.sizeDiff.height;b={width:h.size.width-(b?0:h.sizeDiff.width),height:h.size.height-f};f=parseInt(h.element.css("left"),10)+(h.position.left-h.originalPosition.left)||null;var j=parseInt(h.element.css("top"),10)+(h.position.top-h.originalPosition.top)||null;h.element.animate(a.extend(b,j&&f?{top:j,left:f}:{}),{duration:g.animateDuration,easing:g.animateEasing,
+step:function(){var l={width:parseInt(h.element.css("width"),10),height:parseInt(h.element.css("height"),10),top:parseInt(h.element.css("top"),10),left:parseInt(h.element.css("left"),10)};i&&i.length&&a(i[0]).css({width:l.width,height:l.height});h._updateCache(l);h._propagate("resize",e)}})}});a.ui.plugin.add("resizable","containment",{start:function(){var e=a(this).data("resizable"),h=e.element,g=e.options.containment;if(h=g instanceof a?g.get(0):/parent/.test(g)?h.parent().get(0):g){e.containerElement=
+a(h);if(/document/.test(g)||g==document){e.containerOffset={left:0,top:0};e.containerPosition={left:0,top:0};e.parentData={element:a(document),left:0,top:0,width:a(document).width(),height:a(document).height()||document.body.parentNode.scrollHeight}}else{var i=a(h),b=[];a(["Top","Right","Left","Bottom"]).each(function(l,o){b[l]=d(i.css("padding"+o))});e.containerOffset=i.offset();e.containerPosition=i.position();e.containerSize={height:i.innerHeight()-b[3],width:i.innerWidth()-b[1]};g=e.containerOffset;
+var f=e.containerSize.height,j=e.containerSize.width;j=a.ui.hasScroll(h,"left")?h.scrollWidth:j;f=a.ui.hasScroll(h)?h.scrollHeight:f;e.parentData={element:h,left:g.left,top:g.top,width:j,height:f}}}},resize:function(e){var h=a(this).data("resizable"),g=h.options,i=h.containerOffset,b=h.position;e=h._aspectRatio||e.shiftKey;var f={top:0,left:0},j=h.containerElement;if(j[0]!=document&&/static/.test(j.css("position")))f=i;if(b.left<(h._helper?i.left:0)){h.size.width+=h._helper?h.position.left-i.left:
+h.position.left-f.left;if(e)h.size.height=h.size.width/g.aspectRatio;h.position.left=g.helper?i.left:0}if(b.top<(h._helper?i.top:0)){h.size.height+=h._helper?h.position.top-i.top:h.position.top;if(e)h.size.width=h.size.height*g.aspectRatio;h.position.top=h._helper?i.top:0}h.offset.left=h.parentData.left+h.position.left;h.offset.top=h.parentData.top+h.position.top;g=Math.abs((h._helper?h.offset.left-f.left:h.offset.left-f.left)+h.sizeDiff.width);i=Math.abs((h._helper?h.offset.top-f.top:h.offset.top-
+i.top)+h.sizeDiff.height);b=h.containerElement.get(0)==h.element.parent().get(0);f=/relative|absolute/.test(h.containerElement.css("position"));if(b&&f)g-=h.parentData.left;if(g+h.size.width>=h.parentData.width){h.size.width=h.parentData.width-g;if(e)h.size.height=h.size.width/h.aspectRatio}if(i+h.size.height>=h.parentData.height){h.size.height=h.parentData.height-i;if(e)h.size.width=h.size.height*h.aspectRatio}},stop:function(){var e=a(this).data("resizable"),h=e.options,g=e.containerOffset,i=e.containerPosition,
+b=e.containerElement,f=a(e.helper),j=f.offset(),l=f.outerWidth()-e.sizeDiff.width;f=f.outerHeight()-e.sizeDiff.height;e._helper&&!h.animate&&/relative/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f});e._helper&&!h.animate&&/static/.test(b.css("position"))&&a(this).css({left:j.left-i.left-g.left,width:l,height:f})}});a.ui.plugin.add("resizable","ghost",{start:function(){var e=a(this).data("resizable"),h=e.options,g=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,
+display:"block",position:"relative",height:g.height,width:g.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");e.ghost.appendTo(e.helper)},resize:function(){var e=a(this).data("resizable");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=a(this).data("resizable");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}});a.ui.plugin.add("resizable","grid",{resize:function(){var e=
+a(this).data("resizable"),h=e.options,g=e.size,i=e.originalSize,b=e.originalPosition,f=e.axis;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var j=Math.round((g.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1);h=Math.round((g.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h}else if(/^(ne)$/.test(f)){e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}else{if(/^(sw)$/.test(f)){e.size.width=i.width+j;e.size.height=
+i.height+h}else{e.size.width=i.width+j;e.size.height=i.height+h;e.position.top=b.top-h}e.position.left=b.left-j}}});var d=function(e){return parseInt(e,10)||0},c=function(e){return!isNaN(parseInt(e,10))}})(jQuery);
+(function(a){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var d=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(d.options.filter,d.element[0]);c.each(function(){var e=a(this),h=e.offset();a.data(this,"selectable-item",{element:this,$element:e,left:h.left,top:h.top,right:h.left+e.outerWidth(),bottom:h.top+e.outerHeight(),startselected:false,selected:e.hasClass("ui-selected"),
+selecting:e.hasClass("ui-selecting"),unselecting:e.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(d){var c=this;this.opos=[d.pageX,
+d.pageY];if(!this.options.disabled){var e=this.options;this.selectees=a(e.filter,this.element[0]);this._trigger("start",d);a(e.appendTo).append(this.helper);this.helper.css({left:d.clientX,top:d.clientY,width:0,height:0});e.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var h=a.data(this,"selectable-item");h.startselected=true;if(!d.metaKey){h.$element.removeClass("ui-selected");h.selected=false;h.$element.addClass("ui-unselecting");h.unselecting=true;c._trigger("unselecting",
+d,{unselecting:h.element})}});a(d.target).parents().andSelf().each(function(){var h=a.data(this,"selectable-item");if(h){var g=!d.metaKey||!h.$element.hasClass("ui-selected");h.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");h.unselecting=!g;h.selecting=g;(h.selected=g)?c._trigger("selecting",d,{selecting:h.element}):c._trigger("unselecting",d,{unselecting:h.element});return false}})}},_mouseDrag:function(d){var c=this;this.dragged=true;if(!this.options.disabled){var e=
+this.options,h=this.opos[0],g=this.opos[1],i=d.pageX,b=d.pageY;if(h>i){var f=i;i=h;h=f}if(g>b){f=b;b=g;g=f}this.helper.css({left:h,top:g,width:i-h,height:b-g});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!(!j||j.element==c.element[0])){var l=false;if(e.tolerance=="touch")l=!(j.left>i||j.right<h||j.top>b||j.bottom<g);else if(e.tolerance=="fit")l=j.left>h&&j.right<i&&j.top>g&&j.bottom<b;if(l){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");
+j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;c._trigger("selecting",d,{selecting:j.element})}}else{if(j.selecting)if(d.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}c._trigger("unselecting",d,{unselecting:j.element})}if(j.selected)if(!d.metaKey&&
+!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;c._trigger("unselecting",d,{unselecting:j.element})}}}});return false}},_mouseStop:function(d){var c=this;this.dragged=false;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;c._trigger("unselected",d,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=
+a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;c._trigger("selected",d,{selected:e.element})});this._trigger("stop",d);this.helper.remove();return false}});a.extend(a.ui.selectable,{version:"1.8.16"})})(jQuery);
+(function(a){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){var d=this.options;this.containerCache={};this.element.addClass("ui-sortable");
+this.refresh();this.floating=this.items.length?d.axis==="x"||/left|right/.test(this.items[0].item.css("float"))||/inline|table-cell/.test(this.items[0].item.css("display")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var d=this.items.length-1;d>=0;d--)this.items[d].item.removeData("sortable-item");return this},_setOption:function(d,c){if(d===
+"disabled"){this.options[d]=c;this.widget()[c?"addClass":"removeClass"]("ui-sortable-disabled")}else a.Widget.prototype._setOption.apply(this,arguments)},_mouseCapture:function(d,c){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(d);var e=null,h=this;a(d.target).parents().each(function(){if(a.data(this,"sortable-item")==h){e=a(this);return false}});if(a.data(d.target,"sortable-item")==h)e=a(d.target);if(!e)return false;if(this.options.handle&&
+!c){var g=false;a(this.options.handle,e).find("*").andSelf().each(function(){if(this==d.target)g=true});if(!g)return false}this.currentItem=e;this._removeCurrentsFromItems();return true},_mouseStart:function(d,c,e){c=this.options;var h=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(d);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,
+left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:d.pageX-this.offset.left,top:d.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(d);this.originalPageX=d.pageX;this.originalPageY=d.pageY;c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};
+this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();c.containment&&this._setContainment();if(c.cursor){if(a("body").css("cursor"))this._storedCursor=a("body").css("cursor");a("body").css("cursor",c.cursor)}if(c.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",c.opacity)}if(c.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",c.zIndex)}if(this.scrollParent[0]!=
+document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",d,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!e)for(e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("activate",d,h._uiHash(this));if(a.ui.ddmanager)a.ui.ddmanager.current=this;a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,d);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(d);
+return true},_mouseDrag:function(d){this.position=this._generatePosition(d);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var c=this.options,e=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-d.pageY<c.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop+c.scrollSpeed;else if(d.pageY-this.overflowOffset.top<
+c.scrollSensitivity)this.scrollParent[0].scrollTop=e=this.scrollParent[0].scrollTop-c.scrollSpeed;if(this.overflowOffset.left+this.scrollParent[0].offsetWidth-d.pageX<c.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft+c.scrollSpeed;else if(d.pageX-this.overflowOffset.left<c.scrollSensitivity)this.scrollParent[0].scrollLeft=e=this.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(d.pageY-a(document).scrollTop()<c.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()-
+c.scrollSpeed);else if(a(window).height()-(d.pageY-a(document).scrollTop())<c.scrollSensitivity)e=a(document).scrollTop(a(document).scrollTop()+c.scrollSpeed);if(d.pageX-a(document).scrollLeft()<c.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()-c.scrollSpeed);else if(a(window).width()-(d.pageX-a(document).scrollLeft())<c.scrollSensitivity)e=a(document).scrollLeft(a(document).scrollLeft()+c.scrollSpeed)}e!==false&&a.ui.ddmanager&&!c.dropBehaviour&&a.ui.ddmanager.prepareOffsets(this,
+d)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(c=this.items.length-1;c>=0;c--){e=this.items[c];var h=e.item[0],g=this._intersectsWithPointer(e);if(g)if(h!=this.currentItem[0]&&this.placeholder[g==1?"next":"prev"]()[0]!=h&&!a.ui.contains(this.placeholder[0],h)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],
+h):true)){this.direction=g==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e))this._rearrange(d,e);else break;this._trigger("change",d,this._uiHash());break}}this._contactContainers(d);a.ui.ddmanager&&a.ui.ddmanager.drag(this,d);this._trigger("sort",d,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(d,c){if(d){a.ui.ddmanager&&!this.options.dropBehaviour&&a.ui.ddmanager.drop(this,d);if(this.options.revert){var e=this;c=e.placeholder.offset();
+e.reverting=true;a(this.helper).animate({left:c.left-this.offset.parent.left-e.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:c.top-this.offset.parent.top-e.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){e._clear(d)})}else this._clear(d,c);return false}},cancel:function(){var d=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):
+this.currentItem.show();for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,d._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,d._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();a.extend(this,{helper:null,
+dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?a(this.domPosition.prev).after(this.currentItem):a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(d){var c=this._getItemsAsjQuery(d&&d.connected),e=[];d=d||{};a(c).each(function(){var h=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||/(.+)[-=_](.+)/);if(h)e.push((d.key||h[1]+"[]")+"="+(d.key&&d.expression?h[1]:h[2]))});!e.length&&d.key&&e.push(d.key+"=");return e.join("&")},
+toArray:function(d){var c=this._getItemsAsjQuery(d&&d.connected),e=[];d=d||{};c.each(function(){e.push(a(d.item||this).attr(d.attribute||"id")||"")});return e},_intersectsWith:function(d){var c=this.positionAbs.left,e=c+this.helperProportions.width,h=this.positionAbs.top,g=h+this.helperProportions.height,i=d.left,b=i+d.width,f=d.top,j=f+d.height,l=this.offset.click.top,o=this.offset.click.left;l=h+l>f&&h+l<j&&c+o>i&&c+o<b;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||
+this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>d[this.floating?"width":"height"]?l:i<c+this.helperProportions.width/2&&e-this.helperProportions.width/2<b&&f<h+this.helperProportions.height/2&&g-this.helperProportions.height/2<j},_intersectsWithPointer:function(d){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height);d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width);c=c&&d;d=this._getDragVerticalDirection();
+var e=this._getDragHorizontalDirection();if(!c)return false;return this.floating?e&&e=="right"||d=="down"?2:1:d&&(d=="down"?2:1)},_intersectsWithSides:function(d){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top+d.height/2,d.height);d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left+d.width/2,d.width);var e=this._getDragVerticalDirection(),h=this._getDragHorizontalDirection();return this.floating&&h?h=="right"&&d||h=="left"&&!d:e&&(e=="down"&&c||e=="up"&&!c)},
+_getDragVerticalDirection:function(){var d=this.positionAbs.top-this.lastPositionAbs.top;return d!=0&&(d>0?"down":"up")},_getDragHorizontalDirection:function(){var d=this.positionAbs.left-this.lastPositionAbs.left;return d!=0&&(d>0?"right":"left")},refresh:function(d){this._refreshItems(d);this.refreshPositions();return this},_connectWith:function(){var d=this.options;return d.connectWith.constructor==String?[d.connectWith]:d.connectWith},_getItemsAsjQuery:function(d){var c=[],e=[],h=this._connectWith();
+if(h&&d)for(d=h.length-1;d>=0;d--)for(var g=a(h[d]),i=g.length-1;i>=0;i--){var b=a.data(g[i],"sortable");if(b&&b!=this&&!b.options.disabled)e.push([a.isFunction(b.options.items)?b.options.items.call(b.element):a(b.options.items,b.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),b])}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),
+this]);for(d=e.length-1;d>=0;d--)e[d][0].each(function(){c.push(this)});return a(c)},_removeCurrentsFromItems:function(){for(var d=this.currentItem.find(":data(sortable-item)"),c=0;c<this.items.length;c++)for(var e=0;e<d.length;e++)d[e]==this.items[c].item[0]&&this.items.splice(c,1)},_refreshItems:function(d){this.items=[];this.containers=[this];var c=this.items,e=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],d,{item:this.currentItem}):a(this.options.items,this.element),
+this]],h=this._connectWith();if(h)for(var g=h.length-1;g>=0;g--)for(var i=a(h[g]),b=i.length-1;b>=0;b--){var f=a.data(i[b],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element[0],d,{item:this.currentItem}):a(f.options.items,f.element),f]);this.containers.push(f)}}for(g=e.length-1;g>=0;g--){d=e[g][1];h=e[g][0];b=0;for(i=h.length;b<i;b++){f=a(h[b]);f.data("sortable-item",d);c.push({item:f,instance:d,width:0,height:0,left:0,top:0})}}},refreshPositions:function(d){if(this.offsetParent&&
+this.helper)this.offset.parent=this._getParentOffset();for(var c=this.items.length-1;c>=0;c--){var e=this.items[c];if(!(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0])){var h=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!d){e.width=h.outerWidth();e.height=h.outerHeight()}h=h.offset();e.left=h.left;e.top=h.top}}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(c=
+this.containers.length-1;c>=0;c--){h=this.containers[c].element.offset();this.containers[c].containerCache.left=h.left;this.containers[c].containerCache.top=h.top;this.containers[c].containerCache.width=this.containers[c].element.outerWidth();this.containers[c].containerCache.height=this.containers[c].element.outerHeight()}return this},_createPlaceholder:function(d){var c=d||this,e=c.options;if(!e.placeholder||e.placeholder.constructor==String){var h=e.placeholder;e.placeholder={element:function(){var g=
+a(document.createElement(c.currentItem[0].nodeName)).addClass(h||c.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!h)g.style.visibility="hidden";return g},update:function(g,i){if(!(h&&!e.forcePlaceholderSize)){i.height()||i.height(c.currentItem.innerHeight()-parseInt(c.currentItem.css("paddingTop")||0,10)-parseInt(c.currentItem.css("paddingBottom")||0,10));i.width()||i.width(c.currentItem.innerWidth()-parseInt(c.currentItem.css("paddingLeft")||0,10)-parseInt(c.currentItem.css("paddingRight")||
+0,10))}}}}c.placeholder=a(e.placeholder.element.call(c.element,c.currentItem));c.currentItem.after(c.placeholder);e.placeholder.update(c,c.placeholder)},_contactContainers:function(d){for(var c=null,e=null,h=this.containers.length-1;h>=0;h--)if(!a.ui.contains(this.currentItem[0],this.containers[h].element[0]))if(this._intersectsWith(this.containers[h].containerCache)){if(!(c&&a.ui.contains(this.containers[h].element[0],c.element[0]))){c=this.containers[h];e=h}}else if(this.containers[h].containerCache.over){this.containers[h]._trigger("out",
+d,this._uiHash(this));this.containers[h].containerCache.over=0}if(c)if(this.containers.length===1){this.containers[e]._trigger("over",d,this._uiHash(this));this.containers[e].containerCache.over=1}else if(this.currentContainer!=this.containers[e]){c=1E4;h=null;for(var g=this.positionAbs[this.containers[e].floating?"left":"top"],i=this.items.length-1;i>=0;i--)if(a.ui.contains(this.containers[e].element[0],this.items[i].item[0])){var b=this.items[i][this.containers[e].floating?"left":"top"];if(Math.abs(b-
+g)<c){c=Math.abs(b-g);h=this.items[i]}}if(h||this.options.dropOnEmpty){this.currentContainer=this.containers[e];h?this._rearrange(d,h,null,true):this._rearrange(d,null,this.containers[e].element,true);this._trigger("change",d,this._uiHash());this.containers[e]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[e]._trigger("over",d,this._uiHash(this));this.containers[e].containerCache.over=1}}},_createHelper:function(d){var c=
+this.options;d=a.isFunction(c.helper)?a(c.helper.apply(this.element[0],[d,this.currentItem])):c.helper=="clone"?this.currentItem.clone():this.currentItem;d.parents("body").length||a(c.appendTo!="parent"?c.appendTo:this.currentItem[0].parentNode)[0].appendChild(d[0]);if(d[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(d[0].style.width==
+""||c.forceHelperSize)d.width(this.currentItem.width());if(d[0].style.height==""||c.forceHelperSize)d.height(this.currentItem.height());return d},_adjustOffsetFromHelper:function(d){if(typeof d=="string")d=d.split(" ");if(a.isArray(d))d={left:+d[0],top:+d[1]||0};if("left"in d)this.offset.click.left=d.left+this.margins.left;if("right"in d)this.offset.click.left=this.helperProportions.width-d.right+this.margins.left;if("top"in d)this.offset.click.top=d.top+this.margins.top;if("bottom"in d)this.offset.click.top=
+this.helperProportions.height-d.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var d=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){d.left+=this.scrollParent.scrollLeft();d.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)d=
+{top:0,left:0};return{top:d.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:d.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var d=this.currentItem.position();return{top:d.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:d.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),
+10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var d=this.options;if(d.containment=="parent")d.containment=this.helper[0].parentNode;if(d.containment=="document"||d.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(d.containment=="document"?
+document:window).width()-this.helperProportions.width-this.margins.left,(a(d.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(d.containment)){var c=a(d.containment)[0];d=a(d.containment).offset();var e=a(c).css("overflow")!="hidden";this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),
+10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(e?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(e?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(d,c){if(!c)c=
+this.position;d=d=="absolute"?1:-1;var e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);return{top:c.top+this.offset.relative.top*d+this.offset.parent.top*d-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop())*d),left:c.left+this.offset.relative.left*d+this.offset.parent.left*d-(a.browser.safari&&
+this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())*d)}},_generatePosition:function(d){var c=this.options,e=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,h=/(html|body)/i.test(e[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();
+var g=d.pageX,i=d.pageY;if(this.originalPosition){if(this.containment){if(d.pageX-this.offset.click.left<this.containment[0])g=this.containment[0]+this.offset.click.left;if(d.pageY-this.offset.click.top<this.containment[1])i=this.containment[1]+this.offset.click.top;if(d.pageX-this.offset.click.left>this.containment[2])g=this.containment[2]+this.offset.click.left;if(d.pageY-this.offset.click.top>this.containment[3])i=this.containment[3]+this.offset.click.top}if(c.grid){i=this.originalPageY+Math.round((i-
+this.originalPageY)/c.grid[1])*c.grid[1];i=this.containment?!(i-this.offset.click.top<this.containment[1]||i-this.offset.click.top>this.containment[3])?i:!(i-this.offset.click.top<this.containment[1])?i-c.grid[1]:i+c.grid[1]:i;g=this.originalPageX+Math.round((g-this.originalPageX)/c.grid[0])*c.grid[0];g=this.containment?!(g-this.offset.click.left<this.containment[0]||g-this.offset.click.left>this.containment[2])?g:!(g-this.offset.click.left<this.containment[0])?g-c.grid[0]:g+c.grid[0]:g}}return{top:i-
+this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():h?0:e.scrollTop()),left:g-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():h?0:e.scrollLeft())}},_rearrange:function(d,c,e,h){e?e[0].appendChild(this.placeholder[0]):c.item[0].parentNode.insertBefore(this.placeholder[0],
+this.direction=="down"?c.item[0]:c.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var g=this,i=this.counter;window.setTimeout(function(){i==g.counter&&g.refreshPositions(!h)},0)},_clear:function(d,c){this.reverting=false;var e=[];!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var h in this._storedCSS)if(this._storedCSS[h]=="auto"||this._storedCSS[h]=="static")this._storedCSS[h]=
+"";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!c&&e.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!c)e.push(function(g){this._trigger("update",g,this._uiHash())});if(!a.ui.contains(this.element[0],this.currentItem[0])){c||e.push(function(g){this._trigger("remove",
+g,this._uiHash())});for(h=this.containers.length-1;h>=0;h--)if(a.ui.contains(this.containers[h].element[0],this.currentItem[0])&&!c){e.push(function(g){return function(i){g._trigger("receive",i,this._uiHash(this))}}.call(this,this.containers[h]));e.push(function(g){return function(i){g._trigger("update",i,this._uiHash(this))}}.call(this,this.containers[h]))}}for(h=this.containers.length-1;h>=0;h--){c||e.push(function(g){return function(i){g._trigger("deactivate",i,this._uiHash(this))}}.call(this,
+this.containers[h]));if(this.containers[h].containerCache.over){e.push(function(g){return function(i){g._trigger("out",i,this._uiHash(this))}}.call(this,this.containers[h]));this.containers[h].containerCache.over=0}}this._storedCursor&&a("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!c){this._trigger("beforeStop",
+d,this._uiHash());for(h=0;h<e.length;h++)e[h].call(this,d);this._trigger("stop",d,this._uiHash())}return false}c||this._trigger("beforeStop",d,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!c){for(h=0;h<e.length;h++)e[h].call(this,d);this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){a.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},
+_uiHash:function(d){var c=d||this;return{helper:c.helper,placeholder:c.placeholder||a([]),position:c.position,originalPosition:c.originalPosition,offset:c.positionAbs,item:c.currentItem,sender:d?d.element:null}}});a.extend(a.ui.sortable,{version:"1.8.16"})})(jQuery);
+jQuery.effects||function(a,d){function c(n){var k;if(n&&n.constructor==Array&&n.length==3)return n;if(k=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(n))return[parseInt(k[1],10),parseInt(k[2],10),parseInt(k[3],10)];if(k=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(n))return[parseFloat(k[1])*2.55,parseFloat(k[2])*2.55,parseFloat(k[3])*2.55];if(k=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(n))return[parseInt(k[1],
+16),parseInt(k[2],16),parseInt(k[3],16)];if(k=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(n))return[parseInt(k[1]+k[1],16),parseInt(k[2]+k[2],16),parseInt(k[3]+k[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(n))return j.transparent;return j[a.trim(n).toLowerCase()]}function e(n,k){var m;do{m=a.curCSS(n,k);if(m!=""&&m!="transparent"||a.nodeName(n,"body"))break;k="backgroundColor"}while(n=n.parentNode);return c(m)}function h(){var n=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
+k={},m,p;if(n&&n.length&&n[0]&&n[n[0]])for(var q=n.length;q--;){m=n[q];if(typeof n[m]=="string"){p=m.replace(/\-(\w)/g,function(s,r){return r.toUpperCase()});k[p]=n[m]}}else for(m in n)if(typeof n[m]==="string")k[m]=n[m];return k}function g(n){var k,m;for(k in n){m=n[k];if(m==null||a.isFunction(m)||k in o||/scrollbar/.test(k)||!/color/i.test(k)&&isNaN(parseFloat(m)))delete n[k]}return n}function i(n,k){var m={_:0},p;for(p in k)if(n[p]!=k[p])m[p]=k[p];return m}function b(n,k,m,p){if(typeof n=="object"){p=
+k;m=null;k=n;n=k.effect}if(a.isFunction(k)){p=k;m=null;k={}}if(typeof k=="number"||a.fx.speeds[k]){p=m;m=k;k={}}if(a.isFunction(m)){p=m;m=null}k=k||{};m=m||k.duration;m=a.fx.off?0:typeof m=="number"?m:m in a.fx.speeds?a.fx.speeds[m]:a.fx.speeds._default;p=p||k.complete;return[n,k,m,p]}function f(n){if(!n||typeof n==="number"||a.fx.speeds[n])return true;if(typeof n==="string"&&!a.effects[n])return true;return false}a.effects={};a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
+"borderTopColor","borderColor","color","outlineColor"],function(n,k){a.fx.step[k]=function(m){if(!m.colorInit){m.start=e(m.elem,k);m.end=c(m.end);m.colorInit=true}m.elem.style[k]="rgb("+Math.max(Math.min(parseInt(m.pos*(m.end[0]-m.start[0])+m.start[0],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[1]-m.start[1])+m.start[1],10),255),0)+","+Math.max(Math.min(parseInt(m.pos*(m.end[2]-m.start[2])+m.start[2],10),255),0)+")"}});var j={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
+0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
+211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},l=["add","remove","toggle"],o={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(n,k,m,
+p){if(a.isFunction(m)){p=m;m=null}return this.queue(function(){var q=a(this),s=q.attr("style")||" ",r=g(h.call(this)),u,v=q.attr("class");a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});u=g(h.call(this));q.attr("class",v);q.animate(i(r,u),{queue:false,duration:k,easing:m,complete:function(){a.each(l,function(w,x){n[x]&&q[x+"Class"](n[x])});if(typeof q.attr("style")=="object"){q.attr("style").cssText="";q.attr("style").cssText=s}else q.attr("style",s);p&&p.apply(this,arguments);a.dequeue(this)}})})};
+a.fn.extend({_addClass:a.fn.addClass,addClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{add:n},k,m,p]):this._addClass(n)},_removeClass:a.fn.removeClass,removeClass:function(n,k,m,p){return k?a.effects.animateClass.apply(this,[{remove:n},k,m,p]):this._removeClass(n)},_toggleClass:a.fn.toggleClass,toggleClass:function(n,k,m,p,q){return typeof k=="boolean"||k===d?m?a.effects.animateClass.apply(this,[k?{add:n}:{remove:n},m,p,q]):this._toggleClass(n,k):a.effects.animateClass.apply(this,
+[{toggle:n},k,m,p])},switchClass:function(n,k,m,p,q){return a.effects.animateClass.apply(this,[{add:k,remove:n},m,p,q])}});a.extend(a.effects,{version:"1.8.16",save:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.data("ec.storage."+k[m],n[0].style[k[m]])},restore:function(n,k){for(var m=0;m<k.length;m++)k[m]!==null&&n.css(k[m],n.data("ec.storage."+k[m]))},setMode:function(n,k){if(k=="toggle")k=n.is(":hidden")?"show":"hide";return k},getBaseline:function(n,k){var m;switch(n[0]){case "top":m=
+0;break;case "middle":m=0.5;break;case "bottom":m=1;break;default:m=n[0]/k.height}switch(n[1]){case "left":n=0;break;case "center":n=0.5;break;case "right":n=1;break;default:n=n[1]/k.width}return{x:n,y:m}},createWrapper:function(n){if(n.parent().is(".ui-effects-wrapper"))return n.parent();var k={width:n.outerWidth(true),height:n.outerHeight(true),"float":n.css("float")},m=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),
+p=document.activeElement;n.wrap(m);if(n[0]===p||a.contains(n[0],p))a(p).focus();m=n.parent();if(n.css("position")=="static"){m.css({position:"relative"});n.css({position:"relative"})}else{a.extend(k,{position:n.css("position"),zIndex:n.css("z-index")});a.each(["top","left","bottom","right"],function(q,s){k[s]=n.css(s);if(isNaN(parseInt(k[s],10)))k[s]="auto"});n.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return m.css(k).show()},removeWrapper:function(n){var k,m=document.activeElement;
+if(n.parent().is(".ui-effects-wrapper")){k=n.parent().replaceWith(n);if(n[0]===m||a.contains(n[0],m))a(m).focus();return k}return n},setTransition:function(n,k,m,p){p=p||{};a.each(k,function(q,s){unit=n.cssUnit(s);if(unit[0]>0)p[s]=unit[0]*m+unit[1]});return p}});a.fn.extend({effect:function(n){var k=b.apply(this,arguments),m={options:k[1],duration:k[2],callback:k[3]};k=m.options.mode;var p=a.effects[n];if(a.fx.off||!p)return k?this[k](m.duration,m.callback):this.each(function(){m.callback&&m.callback.call(this)});
+return p.call(this,m)},_show:a.fn.show,show:function(n){if(f(n))return this._show.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="show";return this.effect.apply(this,k)}},_hide:a.fn.hide,hide:function(n){if(f(n))return this._hide.apply(this,arguments);else{var k=b.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:a.fn.toggle,toggle:function(n){if(f(n)||typeof n==="boolean"||a.isFunction(n))return this.__toggle.apply(this,arguments);else{var k=b.apply(this,
+arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(n){var k=this.css(n),m=[];a.each(["em","px","%","pt"],function(p,q){if(k.indexOf(q)>0)m=[parseFloat(k),q]});return m}});a.easing.jswing=a.easing.swing;a.extend(a.easing,{def:"easeOutQuad",swing:function(n,k,m,p,q){return a.easing[a.easing.def](n,k,m,p,q)},easeInQuad:function(n,k,m,p,q){return p*(k/=q)*k+m},easeOutQuad:function(n,k,m,p,q){return-p*(k/=q)*(k-2)+m},easeInOutQuad:function(n,k,m,p,q){if((k/=q/2)<1)return p/
+2*k*k+m;return-p/2*(--k*(k-2)-1)+m},easeInCubic:function(n,k,m,p,q){return p*(k/=q)*k*k+m},easeOutCubic:function(n,k,m,p,q){return p*((k=k/q-1)*k*k+1)+m},easeInOutCubic:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k+m;return p/2*((k-=2)*k*k+2)+m},easeInQuart:function(n,k,m,p,q){return p*(k/=q)*k*k*k+m},easeOutQuart:function(n,k,m,p,q){return-p*((k=k/q-1)*k*k*k-1)+m},easeInOutQuart:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k+m;return-p/2*((k-=2)*k*k*k-2)+m},easeInQuint:function(n,k,m,
+p,q){return p*(k/=q)*k*k*k*k+m},easeOutQuint:function(n,k,m,p,q){return p*((k=k/q-1)*k*k*k*k+1)+m},easeInOutQuint:function(n,k,m,p,q){if((k/=q/2)<1)return p/2*k*k*k*k*k+m;return p/2*((k-=2)*k*k*k*k+2)+m},easeInSine:function(n,k,m,p,q){return-p*Math.cos(k/q*(Math.PI/2))+p+m},easeOutSine:function(n,k,m,p,q){return p*Math.sin(k/q*(Math.PI/2))+m},easeInOutSine:function(n,k,m,p,q){return-p/2*(Math.cos(Math.PI*k/q)-1)+m},easeInExpo:function(n,k,m,p,q){return k==0?m:p*Math.pow(2,10*(k/q-1))+m},easeOutExpo:function(n,
+k,m,p,q){return k==q?m+p:p*(-Math.pow(2,-10*k/q)+1)+m},easeInOutExpo:function(n,k,m,p,q){if(k==0)return m;if(k==q)return m+p;if((k/=q/2)<1)return p/2*Math.pow(2,10*(k-1))+m;return p/2*(-Math.pow(2,-10*--k)+2)+m},easeInCirc:function(n,k,m,p,q){return-p*(Math.sqrt(1-(k/=q)*k)-1)+m},easeOutCirc:function(n,k,m,p,q){return p*Math.sqrt(1-(k=k/q-1)*k)+m},easeInOutCirc:function(n,k,m,p,q){if((k/=q/2)<1)return-p/2*(Math.sqrt(1-k*k)-1)+m;return p/2*(Math.sqrt(1-(k-=2)*k)+1)+m},easeInElastic:function(n,k,m,
+p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);return-(r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s))+m},easeOutElastic:function(n,k,m,p,q){n=1.70158;var s=0,r=p;if(k==0)return m;if((k/=q)==1)return m+p;s||(s=q*0.3);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);return r*Math.pow(2,-10*k)*Math.sin((k*q-n)*2*Math.PI/s)+p+m},easeInOutElastic:function(n,k,m,p,q){n=1.70158;var s=
+0,r=p;if(k==0)return m;if((k/=q/2)==2)return m+p;s||(s=q*0.3*1.5);if(r<Math.abs(p)){r=p;n=s/4}else n=s/(2*Math.PI)*Math.asin(p/r);if(k<1)return-0.5*r*Math.pow(2,10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)+m;return r*Math.pow(2,-10*(k-=1))*Math.sin((k*q-n)*2*Math.PI/s)*0.5+p+m},easeInBack:function(n,k,m,p,q,s){if(s==d)s=1.70158;return p*(k/=q)*k*((s+1)*k-s)+m},easeOutBack:function(n,k,m,p,q,s){if(s==d)s=1.70158;return p*((k=k/q-1)*k*((s+1)*k+s)+1)+m},easeInOutBack:function(n,k,m,p,q,s){if(s==d)s=1.70158;
+if((k/=q/2)<1)return p/2*k*k*(((s*=1.525)+1)*k-s)+m;return p/2*((k-=2)*k*(((s*=1.525)+1)*k+s)+2)+m},easeInBounce:function(n,k,m,p,q){return p-a.easing.easeOutBounce(n,q-k,0,p,q)+m},easeOutBounce:function(n,k,m,p,q){return(k/=q)<1/2.75?p*7.5625*k*k+m:k<2/2.75?p*(7.5625*(k-=1.5/2.75)*k+0.75)+m:k<2.5/2.75?p*(7.5625*(k-=2.25/2.75)*k+0.9375)+m:p*(7.5625*(k-=2.625/2.75)*k+0.984375)+m},easeInOutBounce:function(n,k,m,p,q){if(k<q/2)return a.easing.easeInBounce(n,k*2,0,p,q)*0.5+m;return a.easing.easeOutBounce(n,
+k*2-q,0,p,q)*0.5+p*0.5+m}})}(jQuery);
+(function(a){a.effects.blind=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.direction||"vertical";a.effects.save(c,e);c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"}),b=g=="vertical"?"height":"width";g=g=="vertical"?i.height():i.width();h=="show"&&i.css(b,0);var f={};f[b]=h=="show"?g:0;i.animate(f,d.duration,d.options.easing,function(){h=="hide"&&c.hide();a.effects.restore(c,
+e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery);
+(function(a){a.effects.bounce=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"effect"),g=d.options.direction||"up",i=d.options.distance||20,b=d.options.times||5,f=d.duration||250;/show|hide/.test(h)&&e.push("opacity");a.effects.save(c,e);c.show();a.effects.createWrapper(c);var j=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";i=d.options.distance||(j=="top"?c.outerHeight({margin:true})/3:c.outerWidth({margin:true})/
+3);if(h=="show")c.css("opacity",0).css(j,g=="pos"?-i:i);if(h=="hide")i/=b*2;h!="hide"&&b--;if(h=="show"){var l={opacity:1};l[j]=(g=="pos"?"+=":"-=")+i;c.animate(l,f/2,d.options.easing);i/=2;b--}for(l=0;l<b;l++){var o={},n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;c.animate(o,f/2,d.options.easing).animate(n,f/2,d.options.easing);i=h=="hide"?i*2:i/2}if(h=="hide"){l={opacity:0};l[j]=(g=="pos"?"-=":"+=")+i;c.animate(l,f/2,d.options.easing,function(){c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);
+d.callback&&d.callback.apply(this,arguments)})}else{o={};n={};o[j]=(g=="pos"?"-=":"+=")+i;n[j]=(g=="pos"?"+=":"-=")+i;c.animate(o,f/2,d.options.easing).animate(n,f/2,d.options.easing,function(){a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments)})}c.queue("fx",function(){c.dequeue()});c.dequeue()})}})(jQuery);
+(function(a){a.effects.clip=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right","height","width"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.direction||"vertical";a.effects.save(c,e);c.show();var i=a.effects.createWrapper(c).css({overflow:"hidden"});i=c[0].tagName=="IMG"?i:c;var b={size:g=="vertical"?"height":"width",position:g=="vertical"?"top":"left"};g=g=="vertical"?i.height():i.width();if(h=="show"){i.css(b.size,0);i.css(b.position,
+g/2)}var f={};f[b.size]=h=="show"?g:0;f[b.position]=h=="show"?0:g/2;i.animate(f,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(c[0],arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.drop=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right","opacity"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.direction||"left";a.effects.save(c,e);c.show();a.effects.createWrapper(c);var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=d.options.distance||(i=="top"?c.outerHeight({margin:true})/2:c.outerWidth({margin:true})/2);if(h=="show")c.css("opacity",0).css(i,g=="pos"?-b:b);var f={opacity:h==
+"show"?1:0};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;c.animate(f,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.explode=function(d){return this.queue(function(){var c=d.options.pieces?Math.round(Math.sqrt(d.options.pieces)):3,e=d.options.pieces?Math.round(Math.sqrt(d.options.pieces)):3;d.options.mode=d.options.mode=="toggle"?a(this).is(":visible")?"hide":"show":d.options.mode;var h=a(this).show().css("visibility","hidden"),g=h.offset();g.top-=parseInt(h.css("marginTop"),10)||0;g.left-=parseInt(h.css("marginLeft"),10)||0;for(var i=h.outerWidth(true),b=h.outerHeight(true),f=0;f<c;f++)for(var j=
+0;j<e;j++)h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-j*(i/e),top:-f*(b/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:i/e,height:b/c,left:g.left+j*(i/e)+(d.options.mode=="show"?(j-Math.floor(e/2))*(i/e):0),top:g.top+f*(b/c)+(d.options.mode=="show"?(f-Math.floor(c/2))*(b/c):0),opacity:d.options.mode=="show"?0:1}).animate({left:g.left+j*(i/e)+(d.options.mode=="show"?0:(j-Math.floor(e/2))*(i/e)),top:g.top+
+f*(b/c)+(d.options.mode=="show"?0:(f-Math.floor(c/2))*(b/c)),opacity:d.options.mode=="show"?1:0},d.duration||500);setTimeout(function(){d.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();d.callback&&d.callback.apply(h[0]);h.dequeue();a("div.ui-effects-explode").remove()},d.duration||500)})}})(jQuery);
+(function(a){a.effects.fade=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"hide");c.animate({opacity:e},{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.fold=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"hide"),g=d.options.size||15,i=!!d.options.horizFirst,b=d.duration?d.duration/2:a.fx.speeds._default/2;a.effects.save(c,e);c.show();var f=a.effects.createWrapper(c).css({overflow:"hidden"}),j=h=="show"!=i,l=j?["width","height"]:["height","width"];j=j?[f.width(),f.height()]:[f.height(),f.width()];var o=/([0-9]+)%/.exec(g);if(o)g=parseInt(o[1],
+10)/100*j[h=="hide"?0:1];if(h=="show")f.css(i?{height:0,width:g}:{height:g,width:0});i={};o={};i[l[0]]=h=="show"?j[0]:g;o[l[1]]=h=="show"?j[1]:0;f.animate(i,b,d.options.easing).animate(o,b,d.options.easing,function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(c[0],arguments);c.dequeue()})})}})(jQuery);
+(function(a){a.effects.highlight=function(d){return this.queue(function(){var c=a(this),e=["backgroundImage","backgroundColor","opacity"],h=a.effects.setMode(c,d.options.mode||"show"),g={backgroundColor:c.css("backgroundColor")};if(h=="hide")g.opacity=0;a.effects.save(c,e);c.show().css({backgroundImage:"none",backgroundColor:d.options.color||"#ffff99"}).animate(g,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);h=="show"&&!a.support.opacity&&
+this.style.removeAttribute("filter");d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.pulsate=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"show");times=(d.options.times||5)*2-1;duration=d.duration?d.duration/2:a.fx.speeds._default/2;isVisible=c.is(":visible");animateTo=0;if(!isVisible){c.css("opacity",0).show();animateTo=1}if(e=="hide"&&isVisible||e=="show"&&!isVisible)times--;for(e=0;e<times;e++){c.animate({opacity:animateTo},duration,d.options.easing);animateTo=(animateTo+1)%2}c.animate({opacity:animateTo},duration,
+d.options.easing,function(){animateTo==0&&c.hide();d.callback&&d.callback.apply(this,arguments)});c.queue("fx",function(){c.dequeue()}).dequeue()})}})(jQuery);
+(function(a){a.effects.puff=function(d){return this.queue(function(){var c=a(this),e=a.effects.setMode(c,d.options.mode||"hide"),h=parseInt(d.options.percent,10)||150,g=h/100,i={height:c.height(),width:c.width()};a.extend(d.options,{fade:true,mode:e,percent:e=="hide"?h:100,from:e=="hide"?i:{height:i.height*g,width:i.width*g}});c.effect("scale",d.options,d.duration,d.callback);c.dequeue()})};a.effects.scale=function(d){return this.queue(function(){var c=a(this),e=a.extend(true,{},d.options),h=a.effects.setMode(c,
+d.options.mode||"effect"),g=parseInt(d.options.percent,10)||(parseInt(d.options.percent,10)==0?0:h=="hide"?0:100),i=d.options.direction||"both",b=d.options.origin;if(h!="effect"){e.origin=b||["middle","center"];e.restore=true}b={height:c.height(),width:c.width()};c.from=d.options.from||(h=="show"?{height:0,width:0}:b);g={y:i!="horizontal"?g/100:1,x:i!="vertical"?g/100:1};c.to={height:b.height*g.y,width:b.width*g.x};if(d.options.fade){if(h=="show"){c.from.opacity=0;c.to.opacity=1}if(h=="hide"){c.from.opacity=
+1;c.to.opacity=0}}e.from=c.from;e.to=c.to;e.mode=h;c.effect("size",e,d.duration,d.callback);c.dequeue()})};a.effects.size=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],h=["position","top","bottom","left","right","overflow","opacity"],g=["width","height","overflow"],i=["fontSize"],b=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
+j=a.effects.setMode(c,d.options.mode||"effect"),l=d.options.restore||false,o=d.options.scale||"both",n=d.options.origin,k={height:c.height(),width:c.width()};c.from=d.options.from||k;c.to=d.options.to||k;if(n){n=a.effects.getBaseline(n,k);c.from.top=(k.height-c.from.height)*n.y;c.from.left=(k.width-c.from.width)*n.x;c.to.top=(k.height-c.to.height)*n.y;c.to.left=(k.width-c.to.width)*n.x}var m={from:{y:c.from.height/k.height,x:c.from.width/k.width},to:{y:c.to.height/k.height,x:c.to.width/k.width}};
+if(o=="box"||o=="both"){if(m.from.y!=m.to.y){e=e.concat(b);c.from=a.effects.setTransition(c,b,m.from.y,c.from);c.to=a.effects.setTransition(c,b,m.to.y,c.to)}if(m.from.x!=m.to.x){e=e.concat(f);c.from=a.effects.setTransition(c,f,m.from.x,c.from);c.to=a.effects.setTransition(c,f,m.to.x,c.to)}}if(o=="content"||o=="both")if(m.from.y!=m.to.y){e=e.concat(i);c.from=a.effects.setTransition(c,i,m.from.y,c.from);c.to=a.effects.setTransition(c,i,m.to.y,c.to)}a.effects.save(c,l?e:h);c.show();a.effects.createWrapper(c);
+c.css("overflow","hidden").css(c.from);if(o=="content"||o=="both"){b=b.concat(["marginTop","marginBottom"]).concat(i);f=f.concat(["marginLeft","marginRight"]);g=e.concat(b).concat(f);c.find("*[width]").each(function(){child=a(this);l&&a.effects.save(child,g);var p={height:child.height(),width:child.width()};child.from={height:p.height*m.from.y,width:p.width*m.from.x};child.to={height:p.height*m.to.y,width:p.width*m.to.x};if(m.from.y!=m.to.y){child.from=a.effects.setTransition(child,b,m.from.y,child.from);
+child.to=a.effects.setTransition(child,b,m.to.y,child.to)}if(m.from.x!=m.to.x){child.from=a.effects.setTransition(child,f,m.from.x,child.from);child.to=a.effects.setTransition(child,f,m.to.x,child.to)}child.css(child.from);child.animate(child.to,d.duration,d.options.easing,function(){l&&a.effects.restore(child,g)})})}c.animate(c.to,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){c.to.opacity===0&&c.css("opacity",c.from.opacity);j=="hide"&&c.hide();a.effects.restore(c,
+l?e:h);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.shake=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"];a.effects.setMode(c,d.options.mode||"effect");var h=d.options.direction||"left",g=d.options.distance||20,i=d.options.times||3,b=d.duration||d.options.duration||140;a.effects.save(c,e);c.show();a.effects.createWrapper(c);var f=h=="up"||h=="down"?"top":"left",j=h=="up"||h=="left"?"pos":"neg";h={};var l={},o={};h[f]=(j=="pos"?"-=":"+=")+g;l[f]=(j=="pos"?"+=":"-=")+g*2;o[f]=
+(j=="pos"?"-=":"+=")+g*2;c.animate(h,b,d.options.easing);for(g=1;g<i;g++)c.animate(l,b,d.options.easing).animate(o,b,d.options.easing);c.animate(l,b,d.options.easing).animate(h,b/2,d.options.easing,function(){a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments)});c.queue("fx",function(){c.dequeue()});c.dequeue()})}})(jQuery);
+(function(a){a.effects.slide=function(d){return this.queue(function(){var c=a(this),e=["position","top","bottom","left","right"],h=a.effects.setMode(c,d.options.mode||"show"),g=d.options.direction||"left";a.effects.save(c,e);c.show();a.effects.createWrapper(c).css({overflow:"hidden"});var i=g=="up"||g=="down"?"top":"left";g=g=="up"||g=="left"?"pos":"neg";var b=d.options.distance||(i=="top"?c.outerHeight({margin:true}):c.outerWidth({margin:true}));if(h=="show")c.css(i,g=="pos"?isNaN(b)?"-"+b:-b:b);
+var f={};f[i]=(h=="show"?g=="pos"?"+=":"-=":g=="pos"?"-=":"+=")+b;c.animate(f,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){h=="hide"&&c.hide();a.effects.restore(c,e);a.effects.removeWrapper(c);d.callback&&d.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
+(function(a){a.effects.transfer=function(d){return this.queue(function(){var c=a(this),e=a(d.options.to),h=e.offset();e={top:h.top,left:h.left,height:e.innerHeight(),width:e.innerWidth()};h=c.offset();var g=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(d.options.className).css({top:h.top,left:h.left,height:c.innerHeight(),width:c.innerWidth(),position:"absolute"}).animate(e,d.duration,d.options.easing,function(){g.remove();d.callback&&d.callback.apply(c[0],arguments);
+c.dequeue()})})}})(jQuery);
+(function(a){a.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var d=this,c=d.options;d.running=0;d.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");d.headers=
+d.element.find(c.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){c.disabled||a(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){c.disabled||a(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){c.disabled||a(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){c.disabled||a(this).removeClass("ui-state-focus")});d.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
+if(c.navigation){var e=d.element.find("a").filter(c.navigationFilter).eq(0);if(e.length){var h=e.closest(".ui-accordion-header");d.active=h.length?h:e.closest(".ui-accordion-content").prev()}}d.active=d._findActive(d.active||c.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");d.active.next().addClass("ui-accordion-content-active");d._createIcons();d.resize();d.element.attr("role","tablist");d.headers.attr("role","tab").bind("keydown.accordion",
+function(g){return d._keydown(g)}).next().attr("role","tabpanel");d.headers.not(d.active||"").attr({"aria-expanded":"false","aria-selected":"false",tabIndex:-1}).next().hide();d.active.length?d.active.attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}):d.headers.eq(0).attr("tabIndex",0);a.browser.safari||d.headers.find("a").attr("tabIndex",-1);c.event&&d.headers.bind(c.event.split(" ").join(".accordion ")+".accordion",function(g){d._clickHandler.call(d,g,this);g.preventDefault()})},_createIcons:function(){var d=
+this.options;if(d.icons){a("<span></span>").addClass("ui-icon "+d.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(d.icons.header).toggleClass(d.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var d=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("aria-selected").removeAttr("tabIndex");
+this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var c=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(d.autoHeight||d.fillHeight)c.css("height","");return a.Widget.prototype.destroy.call(this)},_setOption:function(d,c){a.Widget.prototype._setOption.apply(this,arguments);d=="active"&&this.activate(c);if(d=="icons"){this._destroyIcons();
+c&&this._createIcons()}if(d=="disabled")this.headers.add(this.headers.next())[c?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(d){if(!(this.options.disabled||d.altKey||d.ctrlKey)){var c=a.ui.keyCode,e=this.headers.length,h=this.headers.index(d.target),g=false;switch(d.keyCode){case c.RIGHT:case c.DOWN:g=this.headers[(h+1)%e];break;case c.LEFT:case c.UP:g=this.headers[(h-1+e)%e];break;case c.SPACE:case c.ENTER:this._clickHandler({target:d.target},d.target);
+d.preventDefault()}if(g){a(d.target).attr("tabIndex",-1);a(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var d=this.options,c;if(d.fillSpace){if(a.browser.msie){var e=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}c=this.element.parent().height();a.browser.msie&&this.element.parent().css("overflow",e);this.headers.each(function(){c-=a(this).outerHeight(true)});this.headers.next().each(function(){a(this).height(Math.max(0,c-a(this).innerHeight()+
+a(this).height()))}).css("overflow","auto")}else if(d.autoHeight){c=0;this.headers.next().each(function(){c=Math.max(c,a(this).height("").height())}).height(c)}return this},activate:function(d){this.options.active=d;d=this._findActive(d)[0];this._clickHandler({target:d},d);return this},_findActive:function(d){return d?typeof d==="number"?this.headers.filter(":eq("+d+")"):this.headers.not(this.headers.not(d)):d===false?a([]):this.headers.filter(":eq(0)")},_clickHandler:function(d,c){var e=this.options;
+if(!e.disabled)if(d.target){d=a(d.currentTarget||c);c=d[0]===this.active[0];e.active=e.collapsible&&c?false:this.headers.index(d);if(!(this.running||!e.collapsible&&c)){var h=this.active;f=d.next();i=this.active.next();b={options:e,newHeader:c&&e.collapsible?a([]):d,oldHeader:this.active,newContent:c&&e.collapsible?a([]):f,oldContent:i};var g=this.headers.index(this.active[0])>this.headers.index(d[0]);this.active=c?a([]):d;this._toggle(f,i,b,c,g);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);
+if(!c){d.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(e.icons.header).addClass(e.icons.headerSelected);d.next().addClass("ui-accordion-content-active")}}}else if(e.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(e.icons.headerSelected).addClass(e.icons.header);this.active.next().addClass("ui-accordion-content-active");var i=this.active.next(),
+b={options:e,newHeader:a([]),oldHeader:e.active,newContent:a([]),oldContent:i},f=this.active=a([]);this._toggle(f,i,b)}},_toggle:function(d,c,e,h,g){var i=this,b=i.options;i.toShow=d;i.toHide=c;i.data=e;var f=function(){if(i)return i._completed.apply(i,arguments)};i._trigger("changestart",null,i.data);i.running=c.size()===0?d.size():c.size();if(b.animated){e={};e=b.collapsible&&h?{toShow:a([]),toHide:c,complete:f,down:g,autoHeight:b.autoHeight||b.fillSpace}:{toShow:d,toHide:c,complete:f,down:g,autoHeight:b.autoHeight||
+b.fillSpace};if(!b.proxied)b.proxied=b.animated;if(!b.proxiedDuration)b.proxiedDuration=b.duration;b.animated=a.isFunction(b.proxied)?b.proxied(e):b.proxied;b.duration=a.isFunction(b.proxiedDuration)?b.proxiedDuration(e):b.proxiedDuration;h=a.ui.accordion.animations;var j=b.duration,l=b.animated;if(l&&!h[l]&&!a.easing[l])l="slide";h[l]||(h[l]=function(o){this.slide(o,{easing:l,duration:j||700})});h[l](e)}else{if(b.collapsible&&h)d.toggle();else{c.hide();d.show()}f(true)}c.prev().attr({"aria-expanded":"false",
+"aria-selected":"false",tabIndex:-1}).blur();d.prev().attr({"aria-expanded":"true","aria-selected":"true",tabIndex:0}).focus()},_completed:function(d){this.running=d?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});a.extend(a.ui.accordion,{version:"1.8.16",
+animations:{slide:function(d,c){d=a.extend({easing:"swing",duration:300},d,c);if(d.toHide.size())if(d.toShow.size()){var e=d.toShow.css("overflow"),h=0,g={},i={},b;c=d.toShow;b=c[0].style.width;c.width(parseInt(c.parent().width(),10)-parseInt(c.css("paddingLeft"),10)-parseInt(c.css("paddingRight"),10)-(parseInt(c.css("borderLeftWidth"),10)||0)-(parseInt(c.css("borderRightWidth"),10)||0));a.each(["height","paddingTop","paddingBottom"],function(f,j){i[j]="hide";f=(""+a.css(d.toShow[0],j)).match(/^([\d+-.]+)(.*)$/);
+g[j]={value:f[1],unit:f[2]||"px"}});d.toShow.css({height:0,overflow:"hidden"}).show();d.toHide.filter(":hidden").each(d.complete).end().filter(":visible").animate(i,{step:function(f,j){if(j.prop=="height")h=j.end-j.start===0?0:(j.now-j.start)/(j.end-j.start);d.toShow[0].style[j.prop]=h*g[j.prop].value+g[j.prop].unit},duration:d.duration,easing:d.easing,complete:function(){d.autoHeight||d.toShow.css("height","");d.toShow.css({width:b,overflow:e});d.complete()}})}else d.toHide.animate({height:"hide",
+paddingTop:"hide",paddingBottom:"hide"},d);else d.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},d)},bounceslide:function(d){this.slide(d,{easing:d.down?"easeOutBounce":"swing",duration:d.down?1E3:200})}}})})(jQuery);
+(function(a){var d=0;a.widget("ui.autocomplete",{options:{appendTo:"body",autoFocus:false,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var c=this,e=this.element[0].ownerDocument,h;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(g){if(!(c.options.disabled||c.element.propAttr("readOnly"))){h=
+false;var i=a.ui.keyCode;switch(g.keyCode){case i.PAGE_UP:c._move("previousPage",g);break;case i.PAGE_DOWN:c._move("nextPage",g);break;case i.UP:c._move("previous",g);g.preventDefault();break;case i.DOWN:c._move("next",g);g.preventDefault();break;case i.ENTER:case i.NUMPAD_ENTER:if(c.menu.active){h=true;g.preventDefault()}case i.TAB:if(!c.menu.active)return;c.menu.select(g);break;case i.ESCAPE:c.element.val(c.term);c.close(g);break;default:clearTimeout(c.searching);c.searching=setTimeout(function(){if(c.term!=
+c.element.val()){c.selectedItem=null;c.search(null,g)}},c.options.delay);break}}}).bind("keypress.autocomplete",function(g){if(h){h=false;g.preventDefault()}}).bind("focus.autocomplete",function(){if(!c.options.disabled){c.selectedItem=null;c.previous=c.element.val()}}).bind("blur.autocomplete",function(g){if(!c.options.disabled){clearTimeout(c.searching);c.closing=setTimeout(function(){c.close(g);c._change(g)},150)}});this._initSource();this.response=function(){return c._response.apply(c,arguments)};
+this.menu=a("<ul></ul>").addClass("ui-autocomplete").appendTo(a(this.options.appendTo||"body",e)[0]).mousedown(function(g){var i=c.menu.element[0];a(g.target).closest(".ui-menu-item").length||setTimeout(function(){a(document).one("mousedown",function(b){b.target!==c.element[0]&&b.target!==i&&!a.ui.contains(i,b.target)&&c.close()})},1);setTimeout(function(){clearTimeout(c.closing)},13)}).menu({focus:function(g,i){i=i.item.data("item.autocomplete");false!==c._trigger("focus",g,{item:i})&&/^key/.test(g.originalEvent.type)&&
+c.element.val(i.value)},selected:function(g,i){var b=i.item.data("item.autocomplete"),f=c.previous;if(c.element[0]!==e.activeElement){c.element.focus();c.previous=f;setTimeout(function(){c.previous=f;c.selectedItem=b},1)}false!==c._trigger("select",g,{item:b})&&c.element.val(b.value);c.term=c.element.val();c.close(g);c.selectedItem=b},blur:function(){c.menu.element.is(":visible")&&c.element.val()!==c.term&&c.element.val(c.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");
+a.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");this.menu.element.remove();a.Widget.prototype.destroy.call(this)},_setOption:function(c,e){a.Widget.prototype._setOption.apply(this,arguments);c==="source"&&this._initSource();if(c==="appendTo")this.menu.element.appendTo(a(e||"body",this.element[0].ownerDocument)[0]);c==="disabled"&&
+e&&this.xhr&&this.xhr.abort()},_initSource:function(){var c=this,e,h;if(a.isArray(this.options.source)){e=this.options.source;this.source=function(g,i){i(a.ui.autocomplete.filter(e,g.term))}}else if(typeof this.options.source==="string"){h=this.options.source;this.source=function(g,i){c.xhr&&c.xhr.abort();c.xhr=a.ajax({url:h,data:g,dataType:"json",autocompleteRequest:++d,success:function(b){this.autocompleteRequest===d&&i(b)},error:function(){this.autocompleteRequest===d&&i([])}})}}else this.source=
+this.options.source},search:function(c,e){c=c!=null?c:this.element.val();this.term=this.element.val();if(c.length<this.options.minLength)return this.close(e);clearTimeout(this.closing);if(this._trigger("search",e)!==false)return this._search(c)},_search:function(c){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:c},this.response)},_response:function(c){if(!this.options.disabled&&c&&c.length){c=this._normalize(c);this._suggest(c);this._trigger("open")}else this.close();
+this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(c){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",c)}},_change:function(c){this.previous!==this.element.val()&&this._trigger("change",c,{item:this.selectedItem})},_normalize:function(c){if(c.length&&c[0].label&&c[0].value)return c;return a.map(c,function(e){if(typeof e==="string")return{label:e,value:e};return a.extend({label:e.label||
+e.value,value:e.value||e.label},e)})},_suggest:function(c){var e=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(e,c);this.menu.deactivate();this.menu.refresh();e.show();this._resizeMenu();e.position(a.extend({of:this.element},this.options.position));this.options.autoFocus&&this.menu.next(new a.Event("mouseover"))},_resizeMenu:function(){var c=this.menu.element;c.outerWidth(Math.max(c.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(c,e){var h=this;
+a.each(e,function(g,i){h._renderItem(c,i)})},_renderItem:function(c,e){return a("<li></li>").data("item.autocomplete",e).append(a("<a></a>").text(e.label)).appendTo(c)},_move:function(c,e){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(c)||this.menu.last()&&/^next/.test(c)){this.element.val(this.term);this.menu.deactivate()}else this.menu[c](e);else this.search(null,e)},widget:function(){return this.menu.element}});a.extend(a.ui.autocomplete,{escapeRegex:function(c){return c.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
+"\\$&")},filter:function(c,e){var h=new RegExp(a.ui.autocomplete.escapeRegex(e),"i");return a.grep(c,function(g){return h.test(g.label||g.value||g)})}})})(jQuery);
+(function(a){a.widget("ui.menu",{_create:function(){var d=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(c){if(a(c.target).closest(".ui-menu-item a").length){c.preventDefault();d.select(c)}});this.refresh()},refresh:function(){var d=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
+-1).mouseenter(function(c){d.activate(c,a(this).parent())}).mouseleave(function(){d.deactivate()})},activate:function(d,c){this.deactivate();if(this.hasScroll()){var e=c.offset().top-this.element.offset().top,h=this.element.scrollTop(),g=this.element.height();if(e<0)this.element.scrollTop(h+e);else e>=g&&this.element.scrollTop(h+e-g+c.height())}this.active=c.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",d,{item:c})},deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");
+this._trigger("blur");this.active=null}},next:function(d){this.move("next",".ui-menu-item:first",d)},previous:function(d){this.move("prev",".ui-menu-item:last",d)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(d,c,e){if(this.active){d=this.active[d+"All"](".ui-menu-item").eq(0);d.length?this.activate(e,d):this.activate(e,this.element.children(c))}else this.activate(e,
+this.element.children(c))},nextPage:function(d){if(this.hasScroll())if(!this.active||this.last())this.activate(d,this.element.children(".ui-menu-item:first"));else{var c=this.active.offset().top,e=this.element.height(),h=this.element.children(".ui-menu-item").filter(function(){var g=a(this).offset().top-c-e+a(this).height();return g<10&&g>-10});h.length||(h=this.element.children(".ui-menu-item:last"));this.activate(d,h)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active||
+this.last()?":first":":last"))},previousPage:function(d){if(this.hasScroll())if(!this.active||this.first())this.activate(d,this.element.children(".ui-menu-item:last"));else{var c=this.active.offset().top,e=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var h=a(this).offset().top-c+e-a(this).height();return h<10&&h>-10});result.length||(result=this.element.children(".ui-menu-item:first"));this.activate(d,result)}else this.activate(d,this.element.children(".ui-menu-item").filter(!this.active||
+this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element[a.fn.prop?"prop":"attr"]("scrollHeight")},select:function(d){this._trigger("selected",d,{item:this.active})}})})(jQuery);
+(function(a){var d,c,e,h,g=function(){var b=a(this).find(":ui-button");setTimeout(function(){b.button("refresh")},1)},i=function(b){var f=b.name,j=b.form,l=a([]);if(f)l=j?a(j).find("[name='"+f+"']"):a("[name='"+f+"']",b.ownerDocument).filter(function(){return!this.form});return l};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",g);if(typeof this.options.disabled!==
+"boolean")this.options.disabled=this.element.propAttr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,f=this.options,j=this.type==="checkbox"||this.type==="radio",l="ui-state-hover"+(!j?" ui-state-active":"");if(f.label===null)f.label=this.buttonElement.html();if(this.element.is(":disabled"))f.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",function(){if(!f.disabled){a(this).addClass("ui-state-hover");
+this===d&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){f.disabled||a(this).removeClass(l)}).bind("click.button",function(o){if(f.disabled){o.preventDefault();o.stopImmediatePropagation()}});this.element.bind("focus.button",function(){b.buttonElement.addClass("ui-state-focus")}).bind("blur.button",function(){b.buttonElement.removeClass("ui-state-focus")});if(j){this.element.bind("change.button",function(){h||b.refresh()});this.buttonElement.bind("mousedown.button",function(o){if(!f.disabled){h=
+false;c=o.pageX;e=o.pageY}}).bind("mouseup.button",function(o){if(!f.disabled)if(c!==o.pageX||e!==o.pageY)h=true})}if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).toggleClass("ui-state-active");b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(f.disabled||h)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed","true");
+var o=b.element[0];i(o).not(o).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed","false")});else{this.buttonElement.bind("mousedown.button",function(){if(f.disabled)return false;a(this).addClass("ui-state-active");d=this;a(document).one("mouseup",function(){d=null})}).bind("mouseup.button",function(){if(f.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(o){if(f.disabled)return false;if(o.keyCode==a.ui.keyCode.SPACE||
+o.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(o){o.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",f.disabled);this._resetButton()},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type===
+"radio"){var b=this.element.parents().filter(":last"),f="label[for='"+this.element.attr("id")+"']";this.buttonElement=b.find(f);if(!this.buttonElement.length){b=b.length?b.siblings():this.element.siblings();this.buttonElement=b.filter(f);if(!this.buttonElement.length)this.buttonElement=b.find(f)}this.element.addClass("ui-helper-hidden-accessible");(b=this.element.is(":checked"))&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=this.element},
+widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||this.buttonElement.removeAttr("title");
+a.Widget.prototype.destroy.call(this)},_setOption:function(b,f){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")f?this.element.propAttr("disabled",true):this.element.propAttr("disabled",false);else this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")i(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
+"true"):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed","false")});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed","true"):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed","false")},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
+f=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),j=this.options.icons,l=j.primary&&j.secondary,o=[];if(j.primary||j.secondary){if(this.options.text)o.push("ui-button-text-icon"+(l?"s":j.primary?"-primary":"-secondary"));j.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+j.primary+"'></span>");j.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+j.secondary+"'></span>");if(!this.options.text){o.push(l?"ui-button-icons-only":
+"ui-button-icon-only");this.hasTitle||b.attr("title",f)}}else o.push("ui-button-text-only");b.addClass(o.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,f){b==="disabled"&&this.buttons.button("option",b,f);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){var b=this.element.css("direction")===
+"ltr";this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass(b?"ui-corner-left":"ui-corner-right").end().filter(":last").addClass(b?"ui-corner-right":"ui-corner-left").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
+a.Widget.prototype.destroy.call(this)}})})(jQuery);
+(function(a,d){function c(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
+"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
+"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
+minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false,disabled:false};a.extend(this._defaults,this.regional[""]);this.dpDiv=e(a('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}function e(b){return b.bind("mouseout",
+function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");f.length&&f.removeClass("ui-state-hover ui-datepicker-prev-hover ui-datepicker-next-hover")}).bind("mouseover",function(f){f=a(f.target).closest("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a");if(!(a.datepicker._isDisabledDatepicker(i.inline?b.parent()[0]:i.input[0])||!f.length)){f.parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");
+f.addClass("ui-state-hover");f.hasClass("ui-datepicker-prev")&&f.addClass("ui-datepicker-prev-hover");f.hasClass("ui-datepicker-next")&&f.addClass("ui-datepicker-next-hover")}})}function h(b,f){a.extend(b,f);for(var j in f)if(f[j]==null||f[j]==d)b[j]=f[j];return b}a.extend(a.ui,{datepicker:{version:"1.8.16"}});var g=(new Date).getTime(),i;a.extend(c.prototype,{markerClassName:"hasDatepicker",maxRows:4,log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},
+setDefaults:function(b){h(this._defaults,b||{});return this},_attachDatepicker:function(b,f){var j=null;for(var l in this._defaults){var o=b.getAttribute("date:"+l);if(o){j=j||{};try{j[l]=eval(o)}catch(n){j[l]=o}}}l=b.nodeName.toLowerCase();o=l=="div"||l=="span";if(!b.id){this.uuid+=1;b.id="dp"+this.uuid}var k=this._newInst(a(b),o);k.settings=a.extend({},f||{},j||{});if(l=="input")this._connectDatepicker(b,k);else o&&this._inlineDatepicker(b,k)},_newInst:function(b,f){return{id:b[0].id.replace(/([^A-Za-z0-9_-])/g,
+"\\\\$1"),input:b,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:f,dpDiv:!f?this.dpDiv:e(a('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))}},_connectDatepicker:function(b,f){var j=a(b);f.append=a([]);f.trigger=a([]);if(!j.hasClass(this.markerClassName)){this._attachments(j,f);j.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",
+function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});this._autoSize(f);a.data(b,"datepicker",f);f.settings.disabled&&this._disableDatepicker(b)}},_attachments:function(b,f){var j=this._get(f,"appendText"),l=this._get(f,"isRTL");f.append&&f.append.remove();if(j){f.append=a('<span class="'+this._appendClass+'">'+j+"</span>");b[l?"before":"after"](f.append)}b.unbind("focus",this._showDatepicker);f.trigger&&f.trigger.remove();j=this._get(f,"showOn");if(j==
+"focus"||j=="both")b.focus(this._showDatepicker);if(j=="button"||j=="both"){j=this._get(f,"buttonText");var o=this._get(f,"buttonImage");f.trigger=a(this._get(f,"buttonImageOnly")?a("<img/>").addClass(this._triggerClass).attr({src:o,alt:j,title:j}):a('<button type="button"></button>').addClass(this._triggerClass).html(o==""?j:a("<img/>").attr({src:o,alt:j,title:j})));b[l?"before":"after"](f.trigger);f.trigger.click(function(){a.datepicker._datepickerShowing&&a.datepicker._lastInput==b[0]?a.datepicker._hideDatepicker():
+a.datepicker._showDatepicker(b[0]);return false})}},_autoSize:function(b){if(this._get(b,"autoSize")&&!b.inline){var f=new Date(2009,11,20),j=this._get(b,"dateFormat");if(j.match(/[DM]/)){var l=function(o){for(var n=0,k=0,m=0;m<o.length;m++)if(o[m].length>n){n=o[m].length;k=m}return k};f.setMonth(l(this._get(b,j.match(/MM/)?"monthNames":"monthNamesShort")));f.setDate(l(this._get(b,j.match(/DD/)?"dayNames":"dayNamesShort"))+20-f.getDay())}b.input.attr("size",this._formatDate(b,f).length)}},_inlineDatepicker:function(b,
+f){var j=a(b);if(!j.hasClass(this.markerClassName)){j.addClass(this.markerClassName).append(f.dpDiv).bind("setData.datepicker",function(l,o,n){f.settings[o]=n}).bind("getData.datepicker",function(l,o){return this._get(f,o)});a.data(b,"datepicker",f);this._setDate(f,this._getDefaultDate(f),true);this._updateDatepicker(f);this._updateAlternate(f);f.settings.disabled&&this._disableDatepicker(b);f.dpDiv.css("display","block")}},_dialogDatepicker:function(b,f,j,l,o){b=this._dialogInst;if(!b){this.uuid+=
+1;this._dialogInput=a('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);a("body").append(this._dialogInput);b=this._dialogInst=this._newInst(this._dialogInput,false);b.settings={};a.data(this._dialogInput[0],"datepicker",b)}h(b.settings,l||{});f=f&&f.constructor==Date?this._formatDate(b,f):f;this._dialogInput.val(f);this._pos=o?o.length?o:[o.pageX,o.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/
+2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");b.settings.onSelect=j;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);a.blockUI&&a.blockUI(this.dpDiv);a.data(this._dialogInput[0],"datepicker",b);return this},_destroyDatepicker:function(b){var f=
+a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();a.removeData(b,"datepicker");if(l=="input"){j.append.remove();j.trigger.remove();f.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(l=="div"||l=="span")f.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(b){var f=a(b),j=a.data(b,"datepicker");if(f.hasClass(this.markerClassName)){var l=
+b.nodeName.toLowerCase();if(l=="input"){b.disabled=false;j.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().removeClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").removeAttr("disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==b?null:o})}},_disableDatepicker:function(b){var f=a(b),j=a.data(b,
+"datepicker");if(f.hasClass(this.markerClassName)){var l=b.nodeName.toLowerCase();if(l=="input"){b.disabled=true;j.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(l=="div"||l=="span"){f=f.children("."+this._inlineClass);f.children().addClass("ui-state-disabled");f.find("select.ui-datepicker-month, select.ui-datepicker-year").attr("disabled","disabled")}this._disabledInputs=a.map(this._disabledInputs,function(o){return o==
+b?null:o});this._disabledInputs[this._disabledInputs.length]=b}},_isDisabledDatepicker:function(b){if(!b)return false;for(var f=0;f<this._disabledInputs.length;f++)if(this._disabledInputs[f]==b)return true;return false},_getInst:function(b){try{return a.data(b,"datepicker")}catch(f){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(b,f,j){var l=this._getInst(b);if(arguments.length==2&&typeof f=="string")return f=="defaults"?a.extend({},a.datepicker._defaults):l?f=="all"?
+a.extend({},l.settings):this._get(l,f):null;var o=f||{};if(typeof f=="string"){o={};o[f]=j}if(l){this._curInst==l&&this._hideDatepicker();var n=this._getDateDatepicker(b,true),k=this._getMinMaxDate(l,"min"),m=this._getMinMaxDate(l,"max");h(l.settings,o);if(k!==null&&o.dateFormat!==d&&o.minDate===d)l.settings.minDate=this._formatDate(l,k);if(m!==null&&o.dateFormat!==d&&o.maxDate===d)l.settings.maxDate=this._formatDate(l,m);this._attachments(a(b),l);this._autoSize(l);this._setDate(l,n);this._updateAlternate(l);
+this._updateDatepicker(l)}},_changeDatepicker:function(b,f,j){this._optionDatepicker(b,f,j)},_refreshDatepicker:function(b){(b=this._getInst(b))&&this._updateDatepicker(b)},_setDateDatepicker:function(b,f){if(b=this._getInst(b)){this._setDate(b,f);this._updateDatepicker(b);this._updateAlternate(b)}},_getDateDatepicker:function(b,f){(b=this._getInst(b))&&!b.inline&&this._setDateFromField(b,f);return b?this._getDate(b):null},_doKeyDown:function(b){var f=a.datepicker._getInst(b.target),j=true,l=f.dpDiv.is(".ui-datepicker-rtl");
+f._keyEvent=true;if(a.datepicker._datepickerShowing)switch(b.keyCode){case 9:a.datepicker._hideDatepicker();j=false;break;case 13:j=a("td."+a.datepicker._dayOverClass+":not(."+a.datepicker._currentClass+")",f.dpDiv);j[0]&&a.datepicker._selectDay(b.target,f.selectedMonth,f.selectedYear,j[0]);if(b=a.datepicker._get(f,"onSelect")){j=a.datepicker._formatDate(f);b.apply(f.input?f.input[0]:null,[j,f])}else a.datepicker._hideDatepicker();return false;case 27:a.datepicker._hideDatepicker();break;case 33:a.datepicker._adjustDate(b.target,
+b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 34:a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,"stepMonths"),"M");break;case 35:if(b.ctrlKey||b.metaKey)a.datepicker._clearDate(b.target);j=b.ctrlKey||b.metaKey;break;case 36:if(b.ctrlKey||b.metaKey)a.datepicker._gotoToday(b.target);j=b.ctrlKey||b.metaKey;break;case 37:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?+1:-1,"D");j=
+b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?-a.datepicker._get(f,"stepBigMonths"):-a.datepicker._get(f,"stepMonths"),"M");break;case 38:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,-7,"D");j=b.ctrlKey||b.metaKey;break;case 39:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,l?-1:+1,"D");j=b.ctrlKey||b.metaKey;if(b.originalEvent.altKey)a.datepicker._adjustDate(b.target,b.ctrlKey?+a.datepicker._get(f,"stepBigMonths"):+a.datepicker._get(f,
+"stepMonths"),"M");break;case 40:if(b.ctrlKey||b.metaKey)a.datepicker._adjustDate(b.target,+7,"D");j=b.ctrlKey||b.metaKey;break;default:j=false}else if(b.keyCode==36&&b.ctrlKey)a.datepicker._showDatepicker(this);else j=false;if(j){b.preventDefault();b.stopPropagation()}},_doKeyPress:function(b){var f=a.datepicker._getInst(b.target);if(a.datepicker._get(f,"constrainInput")){f=a.datepicker._possibleChars(a.datepicker._get(f,"dateFormat"));var j=String.fromCharCode(b.charCode==d?b.keyCode:b.charCode);
+return b.ctrlKey||b.metaKey||j<" "||!f||f.indexOf(j)>-1}},_doKeyUp:function(b){b=a.datepicker._getInst(b.target);if(b.input.val()!=b.lastVal)try{if(a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),b.input?b.input.val():null,a.datepicker._getFormatConfig(b))){a.datepicker._setDateFromField(b);a.datepicker._updateAlternate(b);a.datepicker._updateDatepicker(b)}}catch(f){a.datepicker.log(f)}return true},_showDatepicker:function(b){b=b.target||b;if(b.nodeName.toLowerCase()!="input")b=a("input",
+b.parentNode)[0];if(!(a.datepicker._isDisabledDatepicker(b)||a.datepicker._lastInput==b)){var f=a.datepicker._getInst(b);if(a.datepicker._curInst&&a.datepicker._curInst!=f){a.datepicker._datepickerShowing&&a.datepicker._triggerOnClose(a.datepicker._curInst);a.datepicker._curInst.dpDiv.stop(true,true)}var j=a.datepicker._get(f,"beforeShow");j=j?j.apply(b,[b,f]):{};if(j!==false){h(f.settings,j);f.lastVal=null;a.datepicker._lastInput=b;a.datepicker._setDateFromField(f);if(a.datepicker._inDialog)b.value=
+"";if(!a.datepicker._pos){a.datepicker._pos=a.datepicker._findPos(b);a.datepicker._pos[1]+=b.offsetHeight}var l=false;a(b).parents().each(function(){l|=a(this).css("position")=="fixed";return!l});if(l&&a.browser.opera){a.datepicker._pos[0]-=document.documentElement.scrollLeft;a.datepicker._pos[1]-=document.documentElement.scrollTop}j={left:a.datepicker._pos[0],top:a.datepicker._pos[1]};a.datepicker._pos=null;f.dpDiv.empty();f.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});a.datepicker._updateDatepicker(f);
+j=a.datepicker._checkOffset(f,j,l);f.dpDiv.css({position:a.datepicker._inDialog&&a.blockUI?"static":l?"fixed":"absolute",display:"none",left:j.left+"px",top:j.top+"px"});if(!f.inline){j=a.datepicker._get(f,"showAnim");var o=a.datepicker._get(f,"duration"),n=function(){var k=f.dpDiv.find("iframe.ui-datepicker-cover");if(k.length){var m=a.datepicker._getBorders(f.dpDiv);k.css({left:-m[0],top:-m[1],width:f.dpDiv.outerWidth(),height:f.dpDiv.outerHeight()})}};f.dpDiv.zIndex(a(b).zIndex()+1);a.datepicker._datepickerShowing=
+true;a.effects&&a.effects[j]?f.dpDiv.show(j,a.datepicker._get(f,"showOptions"),o,n):f.dpDiv[j||"show"](j?o:null,n);if(!j||!o)n();f.input.is(":visible")&&!f.input.is(":disabled")&&f.input.focus();a.datepicker._curInst=f}}}},_updateDatepicker:function(b){this.maxRows=4;var f=a.datepicker._getBorders(b.dpDiv);i=b;b.dpDiv.empty().append(this._generateHTML(b));var j=b.dpDiv.find("iframe.ui-datepicker-cover");j.length&&j.css({left:-f[0],top:-f[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()});
+b.dpDiv.find("."+this._dayOverClass+" a").mouseover();f=this._getNumberOfMonths(b);j=f[1];b.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");j>1&&b.dpDiv.addClass("ui-datepicker-multi-"+j).css("width",17*j+"em");b.dpDiv[(f[0]!=1||f[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");b.dpDiv[(this._get(b,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");b==a.datepicker._curInst&&a.datepicker._datepickerShowing&&b.input&&b.input.is(":visible")&&
+!b.input.is(":disabled")&&b.input[0]!=document.activeElement&&b.input.focus();if(b.yearshtml){var l=b.yearshtml;setTimeout(function(){l===b.yearshtml&&b.yearshtml&&b.dpDiv.find("select.ui-datepicker-year:first").replaceWith(b.yearshtml);l=b.yearshtml=null},0)}},_getBorders:function(b){var f=function(j){return{thin:1,medium:2,thick:3}[j]||j};return[parseFloat(f(b.css("border-left-width"))),parseFloat(f(b.css("border-top-width")))]},_checkOffset:function(b,f,j){var l=b.dpDiv.outerWidth(),o=b.dpDiv.outerHeight(),
+n=b.input?b.input.outerWidth():0,k=b.input?b.input.outerHeight():0,m=document.documentElement.clientWidth+a(document).scrollLeft(),p=document.documentElement.clientHeight+a(document).scrollTop();f.left-=this._get(b,"isRTL")?l-n:0;f.left-=j&&f.left==b.input.offset().left?a(document).scrollLeft():0;f.top-=j&&f.top==b.input.offset().top+k?a(document).scrollTop():0;f.left-=Math.min(f.left,f.left+l>m&&m>l?Math.abs(f.left+l-m):0);f.top-=Math.min(f.top,f.top+o>p&&p>o?Math.abs(o+k):0);return f},_findPos:function(b){for(var f=
+this._get(this._getInst(b),"isRTL");b&&(b.type=="hidden"||b.nodeType!=1||a.expr.filters.hidden(b));)b=b[f?"previousSibling":"nextSibling"];b=a(b).offset();return[b.left,b.top]},_triggerOnClose:function(b){var f=this._get(b,"onClose");if(f)f.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b])},_hideDatepicker:function(b){var f=this._curInst;if(!(!f||b&&f!=a.data(b,"datepicker")))if(this._datepickerShowing){b=this._get(f,"showAnim");var j=this._get(f,"duration"),l=function(){a.datepicker._tidyDialog(f);
+this._curInst=null};a.effects&&a.effects[b]?f.dpDiv.hide(b,a.datepicker._get(f,"showOptions"),j,l):f.dpDiv[b=="slideDown"?"slideUp":b=="fadeIn"?"fadeOut":"hide"](b?j:null,l);b||l();a.datepicker._triggerOnClose(f);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(a.blockUI){a.unblockUI();a("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(b){b.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
+_checkExternalClick:function(b){if(a.datepicker._curInst){b=a(b.target);b[0].id!=a.datepicker._mainDivId&&b.parents("#"+a.datepicker._mainDivId).length==0&&!b.hasClass(a.datepicker.markerClassName)&&!b.hasClass(a.datepicker._triggerClass)&&a.datepicker._datepickerShowing&&!(a.datepicker._inDialog&&a.blockUI)&&a.datepicker._hideDatepicker()}},_adjustDate:function(b,f,j){b=a(b);var l=this._getInst(b[0]);if(!this._isDisabledDatepicker(b[0])){this._adjustInstDate(l,f+(j=="M"?this._get(l,"showCurrentAtPos"):
+0),j);this._updateDatepicker(l)}},_gotoToday:function(b){b=a(b);var f=this._getInst(b[0]);if(this._get(f,"gotoCurrent")&&f.currentDay){f.selectedDay=f.currentDay;f.drawMonth=f.selectedMonth=f.currentMonth;f.drawYear=f.selectedYear=f.currentYear}else{var j=new Date;f.selectedDay=j.getDate();f.drawMonth=f.selectedMonth=j.getMonth();f.drawYear=f.selectedYear=j.getFullYear()}this._notifyChange(f);this._adjustDate(b)},_selectMonthYear:function(b,f,j){b=a(b);var l=this._getInst(b[0]);l["selected"+(j=="M"?
+"Month":"Year")]=l["draw"+(j=="M"?"Month":"Year")]=parseInt(f.options[f.selectedIndex].value,10);this._notifyChange(l);this._adjustDate(b)},_selectDay:function(b,f,j,l){var o=a(b);if(!(a(l).hasClass(this._unselectableClass)||this._isDisabledDatepicker(o[0]))){o=this._getInst(o[0]);o.selectedDay=o.currentDay=a("a",l).html();o.selectedMonth=o.currentMonth=f;o.selectedYear=o.currentYear=j;this._selectDate(b,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear))}},_clearDate:function(b){b=a(b);
+this._getInst(b[0]);this._selectDate(b,"")},_selectDate:function(b,f){b=this._getInst(a(b)[0]);f=f!=null?f:this._formatDate(b);b.input&&b.input.val(f);this._updateAlternate(b);var j=this._get(b,"onSelect");if(j)j.apply(b.input?b.input[0]:null,[f,b]);else b.input&&b.input.trigger("change");if(b.inline)this._updateDatepicker(b);else{this._hideDatepicker();this._lastInput=b.input[0];typeof b.input[0]!="object"&&b.input.focus();this._lastInput=null}},_updateAlternate:function(b){var f=this._get(b,"altField");
+if(f){var j=this._get(b,"altFormat")||this._get(b,"dateFormat"),l=this._getDate(b),o=this.formatDate(j,l,this._getFormatConfig(b));a(f).each(function(){a(this).val(o)})}},noWeekends:function(b){b=b.getDay();return[b>0&&b<6,""]},iso8601Week:function(b){b=new Date(b.getTime());b.setDate(b.getDate()+4-(b.getDay()||7));var f=b.getTime();b.setMonth(0);b.setDate(1);return Math.floor(Math.round((f-b)/864E5)/7)+1},parseDate:function(b,f,j){if(b==null||f==null)throw"Invalid arguments";f=typeof f=="object"?
+f.toString():f+"";if(f=="")return null;var l=(j?j.shortYearCutoff:null)||this._defaults.shortYearCutoff;l=typeof l!="string"?l:(new Date).getFullYear()%100+parseInt(l,10);for(var o=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,n=(j?j.dayNames:null)||this._defaults.dayNames,k=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort,m=(j?j.monthNames:null)||this._defaults.monthNames,p=j=-1,q=-1,s=-1,r=false,u=function(z){(z=H+1<b.length&&b.charAt(H+1)==z)&&H++;return z},v=function(z){var I=
+u(z);z=new RegExp("^\\d{1,"+(z=="@"?14:z=="!"?20:z=="y"&&I?4:z=="o"?3:2)+"}");z=f.substring(y).match(z);if(!z)throw"Missing number at position "+y;y+=z[0].length;return parseInt(z[0],10)},w=function(z,I,N){z=a.map(u(z)?N:I,function(D,E){return[[E,D]]}).sort(function(D,E){return-(D[1].length-E[1].length)});var J=-1;a.each(z,function(D,E){D=E[1];if(f.substr(y,D.length).toLowerCase()==D.toLowerCase()){J=E[0];y+=D.length;return false}});if(J!=-1)return J+1;else throw"Unknown name at position "+y;},x=
+function(){if(f.charAt(y)!=b.charAt(H))throw"Unexpected literal at position "+y;y++},y=0,H=0;H<b.length;H++)if(r)if(b.charAt(H)=="'"&&!u("'"))r=false;else x();else switch(b.charAt(H)){case "d":q=v("d");break;case "D":w("D",o,n);break;case "o":s=v("o");break;case "m":p=v("m");break;case "M":p=w("M",k,m);break;case "y":j=v("y");break;case "@":var C=new Date(v("@"));j=C.getFullYear();p=C.getMonth()+1;q=C.getDate();break;case "!":C=new Date((v("!")-this._ticksTo1970)/1E4);j=C.getFullYear();p=C.getMonth()+
+1;q=C.getDate();break;case "'":if(u("'"))x();else r=true;break;default:x()}if(y<f.length)throw"Extra/unparsed characters found in date: "+f.substring(y);if(j==-1)j=(new Date).getFullYear();else if(j<100)j+=(new Date).getFullYear()-(new Date).getFullYear()%100+(j<=l?0:-100);if(s>-1){p=1;q=s;do{l=this._getDaysInMonth(j,p-1);if(q<=l)break;p++;q-=l}while(1)}C=this._daylightSavingAdjust(new Date(j,p-1,q));if(C.getFullYear()!=j||C.getMonth()+1!=p||C.getDate()!=q)throw"Invalid date";return C},ATOM:"yy-mm-dd",
+COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(b,f,j){if(!f)return"";var l=(j?j.dayNamesShort:null)||this._defaults.dayNamesShort,o=(j?j.dayNames:null)||this._defaults.dayNames,n=(j?j.monthNamesShort:null)||this._defaults.monthNamesShort;j=(j?j.monthNames:
+null)||this._defaults.monthNames;var k=function(u){(u=r+1<b.length&&b.charAt(r+1)==u)&&r++;return u},m=function(u,v,w){v=""+v;if(k(u))for(;v.length<w;)v="0"+v;return v},p=function(u,v,w,x){return k(u)?x[v]:w[v]},q="",s=false;if(f)for(var r=0;r<b.length;r++)if(s)if(b.charAt(r)=="'"&&!k("'"))s=false;else q+=b.charAt(r);else switch(b.charAt(r)){case "d":q+=m("d",f.getDate(),2);break;case "D":q+=p("D",f.getDay(),l,o);break;case "o":q+=m("o",Math.round(((new Date(f.getFullYear(),f.getMonth(),f.getDate())).getTime()-
+(new Date(f.getFullYear(),0,0)).getTime())/864E5),3);break;case "m":q+=m("m",f.getMonth()+1,2);break;case "M":q+=p("M",f.getMonth(),n,j);break;case "y":q+=k("y")?f.getFullYear():(f.getYear()%100<10?"0":"")+f.getYear()%100;break;case "@":q+=f.getTime();break;case "!":q+=f.getTime()*1E4+this._ticksTo1970;break;case "'":if(k("'"))q+="'";else s=true;break;default:q+=b.charAt(r)}return q},_possibleChars:function(b){for(var f="",j=false,l=function(n){(n=o+1<b.length&&b.charAt(o+1)==n)&&o++;return n},o=
+0;o<b.length;o++)if(j)if(b.charAt(o)=="'"&&!l("'"))j=false;else f+=b.charAt(o);else switch(b.charAt(o)){case "d":case "m":case "y":case "@":f+="0123456789";break;case "D":case "M":return null;case "'":if(l("'"))f+="'";else j=true;break;default:f+=b.charAt(o)}return f},_get:function(b,f){return b.settings[f]!==d?b.settings[f]:this._defaults[f]},_setDateFromField:function(b,f){if(b.input.val()!=b.lastVal){var j=this._get(b,"dateFormat"),l=b.lastVal=b.input?b.input.val():null,o,n;o=n=this._getDefaultDate(b);
+var k=this._getFormatConfig(b);try{o=this.parseDate(j,l,k)||n}catch(m){this.log(m);l=f?"":l}b.selectedDay=o.getDate();b.drawMonth=b.selectedMonth=o.getMonth();b.drawYear=b.selectedYear=o.getFullYear();b.currentDay=l?o.getDate():0;b.currentMonth=l?o.getMonth():0;b.currentYear=l?o.getFullYear():0;this._adjustInstDate(b)}},_getDefaultDate:function(b){return this._restrictMinMax(b,this._determineDate(b,this._get(b,"defaultDate"),new Date))},_determineDate:function(b,f,j){var l=function(n){var k=new Date;
+k.setDate(k.getDate()+n);return k},o=function(n){try{return a.datepicker.parseDate(a.datepicker._get(b,"dateFormat"),n,a.datepicker._getFormatConfig(b))}catch(k){}var m=(n.toLowerCase().match(/^c/)?a.datepicker._getDate(b):null)||new Date,p=m.getFullYear(),q=m.getMonth();m=m.getDate();for(var s=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,r=s.exec(n);r;){switch(r[2]||"d"){case "d":case "D":m+=parseInt(r[1],10);break;case "w":case "W":m+=parseInt(r[1],10)*7;break;case "m":case "M":q+=parseInt(r[1],10);m=
+Math.min(m,a.datepicker._getDaysInMonth(p,q));break;case "y":case "Y":p+=parseInt(r[1],10);m=Math.min(m,a.datepicker._getDaysInMonth(p,q));break}r=s.exec(n)}return new Date(p,q,m)};if(f=(f=f==null||f===""?j:typeof f=="string"?o(f):typeof f=="number"?isNaN(f)?j:l(f):new Date(f.getTime()))&&f.toString()=="Invalid Date"?j:f){f.setHours(0);f.setMinutes(0);f.setSeconds(0);f.setMilliseconds(0)}return this._daylightSavingAdjust(f)},_daylightSavingAdjust:function(b){if(!b)return null;b.setHours(b.getHours()>
+12?b.getHours()+2:0);return b},_setDate:function(b,f,j){var l=!f,o=b.selectedMonth,n=b.selectedYear;f=this._restrictMinMax(b,this._determineDate(b,f,new Date));b.selectedDay=b.currentDay=f.getDate();b.drawMonth=b.selectedMonth=b.currentMonth=f.getMonth();b.drawYear=b.selectedYear=b.currentYear=f.getFullYear();if((o!=b.selectedMonth||n!=b.selectedYear)&&!j)this._notifyChange(b);this._adjustInstDate(b);if(b.input)b.input.val(l?"":this._formatDate(b))},_getDate:function(b){return!b.currentYear||b.input&&
+b.input.val()==""?null:this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay))},_generateHTML:function(b){var f=new Date;f=this._daylightSavingAdjust(new Date(f.getFullYear(),f.getMonth(),f.getDate()));var j=this._get(b,"isRTL"),l=this._get(b,"showButtonPanel"),o=this._get(b,"hideIfNoPrevNext"),n=this._get(b,"navigationAsDateFormat"),k=this._getNumberOfMonths(b),m=this._get(b,"showCurrentAtPos"),p=this._get(b,"stepMonths"),q=k[0]!=1||k[1]!=1,s=this._daylightSavingAdjust(!b.currentDay?
+new Date(9999,9,9):new Date(b.currentYear,b.currentMonth,b.currentDay)),r=this._getMinMaxDate(b,"min"),u=this._getMinMaxDate(b,"max");m=b.drawMonth-m;var v=b.drawYear;if(m<0){m+=12;v--}if(u){var w=this._daylightSavingAdjust(new Date(u.getFullYear(),u.getMonth()-k[0]*k[1]+1,u.getDate()));for(w=r&&w<r?r:w;this._daylightSavingAdjust(new Date(v,m,1))>w;){m--;if(m<0){m=11;v--}}}b.drawMonth=m;b.drawYear=v;w=this._get(b,"prevText");w=!n?w:this.formatDate(w,this._daylightSavingAdjust(new Date(v,m-p,1)),this._getFormatConfig(b));
+w=this._canAdjustMonth(b,-1,v,m)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', -"+p+", 'M');\" title=\""+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>":o?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+w+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"e":"w")+'">'+w+"</span></a>";var x=this._get(b,"nextText");x=!n?x:this.formatDate(x,this._daylightSavingAdjust(new Date(v,
+m+p,1)),this._getFormatConfig(b));o=this._canAdjustMonth(b,+1,v,m)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+g+".datepicker._adjustDate('#"+b.id+"', +"+p+", 'M');\" title=\""+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>":o?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+x+'"><span class="ui-icon ui-icon-circle-triangle-'+(j?"w":"e")+'">'+x+"</span></a>";p=this._get(b,"currentText");x=this._get(b,"gotoCurrent")&&
+b.currentDay?s:f;p=!n?p:this.formatDate(p,x,this._getFormatConfig(b));n=!b.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+g+'.datepicker._hideDatepicker();">'+this._get(b,"closeText")+"</button>":"";l=l?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(j?n:"")+(this._isInRange(b,x)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
+g+".datepicker._gotoToday('#"+b.id+"');\">"+p+"</button>":"")+(j?"":n)+"</div>":"";n=parseInt(this._get(b,"firstDay"),10);n=isNaN(n)?0:n;p=this._get(b,"showWeek");x=this._get(b,"dayNames");this._get(b,"dayNamesShort");var y=this._get(b,"dayNamesMin"),H=this._get(b,"monthNames"),C=this._get(b,"monthNamesShort"),z=this._get(b,"beforeShowDay"),I=this._get(b,"showOtherMonths"),N=this._get(b,"selectOtherMonths");this._get(b,"calculateWeek");for(var J=this._getDefaultDate(b),D="",E=0;E<k[0];E++){var P=
+"";this.maxRows=4;for(var L=0;L<k[1];L++){var Q=this._daylightSavingAdjust(new Date(v,m,b.selectedDay)),B=" ui-corner-all",F="";if(q){F+='<div class="ui-datepicker-group';if(k[1]>1)switch(L){case 0:F+=" ui-datepicker-group-first";B=" ui-corner-"+(j?"right":"left");break;case k[1]-1:F+=" ui-datepicker-group-last";B=" ui-corner-"+(j?"left":"right");break;default:F+=" ui-datepicker-group-middle";B="";break}F+='">'}F+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+B+'">'+(/all|left/.test(B)&&
+E==0?j?o:w:"")+(/all|right/.test(B)&&E==0?j?w:o:"")+this._generateMonthYearHeader(b,m,v,r,u,E>0||L>0,H,C)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var G=p?'<th class="ui-datepicker-week-col">'+this._get(b,"weekHeader")+"</th>":"";for(B=0;B<7;B++){var A=(B+n)%7;G+="<th"+((B+n+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+x[A]+'">'+y[A]+"</span></th>"}F+=G+"</tr></thead><tbody>";G=this._getDaysInMonth(v,m);if(v==b.selectedYear&&m==b.selectedMonth)b.selectedDay=Math.min(b.selectedDay,
+G);B=(this._getFirstDayOfMonth(v,m)-n+7)%7;G=Math.ceil((B+G)/7);this.maxRows=G=q?this.maxRows>G?this.maxRows:G:G;A=this._daylightSavingAdjust(new Date(v,m,1-B));for(var R=0;R<G;R++){F+="<tr>";var S=!p?"":'<td class="ui-datepicker-week-col">'+this._get(b,"calculateWeek")(A)+"</td>";for(B=0;B<7;B++){var M=z?z.apply(b.input?b.input[0]:null,[A]):[true,""],K=A.getMonth()!=m,O=K&&!N||!M[0]||r&&A<r||u&&A>u;S+='<td class="'+((B+n+6)%7>=5?" ui-datepicker-week-end":"")+(K?" ui-datepicker-other-month":"")+(A.getTime()==
+Q.getTime()&&m==b.selectedMonth&&b._keyEvent||J.getTime()==A.getTime()&&J.getTime()==Q.getTime()?" "+this._dayOverClass:"")+(O?" "+this._unselectableClass+" ui-state-disabled":"")+(K&&!I?"":" "+M[1]+(A.getTime()==s.getTime()?" "+this._currentClass:"")+(A.getTime()==f.getTime()?" ui-datepicker-today":""))+'"'+((!K||I)&&M[2]?' title="'+M[2]+'"':"")+(O?"":' onclick="DP_jQuery_'+g+".datepicker._selectDay('#"+b.id+"',"+A.getMonth()+","+A.getFullYear()+', this);return false;"')+">"+(K&&!I?"&#xa0;":O?'<span class="ui-state-default">'+
+A.getDate()+"</span>":'<a class="ui-state-default'+(A.getTime()==f.getTime()?" ui-state-highlight":"")+(A.getTime()==s.getTime()?" ui-state-active":"")+(K?" ui-priority-secondary":"")+'" href="#">'+A.getDate()+"</a>")+"</td>";A.setDate(A.getDate()+1);A=this._daylightSavingAdjust(A)}F+=S+"</tr>"}m++;if(m>11){m=0;v++}F+="</tbody></table>"+(q?"</div>"+(k[0]>0&&L==k[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");P+=F}D+=P}D+=l+(a.browser.msie&&parseInt(a.browser.version,10)<7&&!b.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
+"");b._keyEvent=false;return D},_generateMonthYearHeader:function(b,f,j,l,o,n,k,m){var p=this._get(b,"changeMonth"),q=this._get(b,"changeYear"),s=this._get(b,"showMonthAfterYear"),r='<div class="ui-datepicker-title">',u="";if(n||!p)u+='<span class="ui-datepicker-month">'+k[f]+"</span>";else{k=l&&l.getFullYear()==j;var v=o&&o.getFullYear()==j;u+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'M');\" >";for(var w=0;w<12;w++)if((!k||w>=l.getMonth())&&
+(!v||w<=o.getMonth()))u+='<option value="'+w+'"'+(w==f?' selected="selected"':"")+">"+m[w]+"</option>";u+="</select>"}s||(r+=u+(n||!(p&&q)?"&#xa0;":""));if(!b.yearshtml){b.yearshtml="";if(n||!q)r+='<span class="ui-datepicker-year">'+j+"</span>";else{m=this._get(b,"yearRange").split(":");var x=(new Date).getFullYear();k=function(y){y=y.match(/c[+-].*/)?j+parseInt(y.substring(1),10):y.match(/[+-].*/)?x+parseInt(y,10):parseInt(y,10);return isNaN(y)?x:y};f=k(m[0]);m=Math.max(f,k(m[1]||""));f=l?Math.max(f,
+l.getFullYear()):f;m=o?Math.min(m,o.getFullYear()):m;for(b.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+g+".datepicker._selectMonthYear('#"+b.id+"', this, 'Y');\" >";f<=m;f++)b.yearshtml+='<option value="'+f+'"'+(f==j?' selected="selected"':"")+">"+f+"</option>";b.yearshtml+="</select>";r+=b.yearshtml;b.yearshtml=null}}r+=this._get(b,"yearSuffix");if(s)r+=(n||!(p&&q)?"&#xa0;":"")+u;r+="</div>";return r},_adjustInstDate:function(b,f,j){var l=b.drawYear+(j=="Y"?f:0),o=b.drawMonth+
+(j=="M"?f:0);f=Math.min(b.selectedDay,this._getDaysInMonth(l,o))+(j=="D"?f:0);l=this._restrictMinMax(b,this._daylightSavingAdjust(new Date(l,o,f)));b.selectedDay=l.getDate();b.drawMonth=b.selectedMonth=l.getMonth();b.drawYear=b.selectedYear=l.getFullYear();if(j=="M"||j=="Y")this._notifyChange(b)},_restrictMinMax:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");f=j&&f<j?j:f;return f=b&&f>b?b:f},_notifyChange:function(b){var f=this._get(b,"onChangeMonthYear");if(f)f.apply(b.input?
+b.input[0]:null,[b.selectedYear,b.selectedMonth+1,b])},_getNumberOfMonths:function(b){b=this._get(b,"numberOfMonths");return b==null?[1,1]:typeof b=="number"?[1,b]:b},_getMinMaxDate:function(b,f){return this._determineDate(b,this._get(b,f+"Date"),null)},_getDaysInMonth:function(b,f){return 32-this._daylightSavingAdjust(new Date(b,f,32)).getDate()},_getFirstDayOfMonth:function(b,f){return(new Date(b,f,1)).getDay()},_canAdjustMonth:function(b,f,j,l){var o=this._getNumberOfMonths(b);j=this._daylightSavingAdjust(new Date(j,
+l+(f<0?f:o[0]*o[1]),1));f<0&&j.setDate(this._getDaysInMonth(j.getFullYear(),j.getMonth()));return this._isInRange(b,j)},_isInRange:function(b,f){var j=this._getMinMaxDate(b,"min");b=this._getMinMaxDate(b,"max");return(!j||f.getTime()>=j.getTime())&&(!b||f.getTime()<=b.getTime())},_getFormatConfig:function(b){var f=this._get(b,"shortYearCutoff");f=typeof f!="string"?f:(new Date).getFullYear()%100+parseInt(f,10);return{shortYearCutoff:f,dayNamesShort:this._get(b,"dayNamesShort"),dayNames:this._get(b,
+"dayNames"),monthNamesShort:this._get(b,"monthNamesShort"),monthNames:this._get(b,"monthNames")}},_formatDate:function(b,f,j,l){if(!f){b.currentDay=b.selectedDay;b.currentMonth=b.selectedMonth;b.currentYear=b.selectedYear}f=f?typeof f=="object"?f:this._daylightSavingAdjust(new Date(l,j,f)):this._daylightSavingAdjust(new Date(b.currentYear,b.currentMonth,b.currentDay));return this.formatDate(this._get(b,"dateFormat"),f,this._getFormatConfig(b))}});a.fn.datepicker=function(b){if(!this.length)return this;
+if(!a.datepicker.initialized){a(document).mousedown(a.datepicker._checkExternalClick).find("body").append(a.datepicker.dpDiv);a.datepicker.initialized=true}var f=Array.prototype.slice.call(arguments,1);if(typeof b=="string"&&(b=="isDisabled"||b=="getDate"||b=="widget"))return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));if(b=="option"&&arguments.length==2&&typeof arguments[1]=="string")return a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this[0]].concat(f));return this.each(function(){typeof b==
+"string"?a.datepicker["_"+b+"Datepicker"].apply(a.datepicker,[this].concat(f)):a.datepicker._attachDatepicker(this,b)})};a.datepicker=new c;a.datepicker.initialized=false;a.datepicker.uuid=(new Date).getTime();a.datepicker.version="1.8.16";window["DP_jQuery_"+g]=a})(jQuery);
+(function(a,d){var c={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},e={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true},h=a.attrFn||{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true,click:true};a.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,
+position:{my:"center",at:"center",collision:"fit",using:function(g){var i=a(this).css(g).offset().top;i<0&&a(this).css("top",g.top-i)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var g=this,i=g.options,b=i.title||"&#160;",f=a.ui.dialog.getTitleId(g.element),j=(g.uiDialog=a("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+
+i.dialogClass).css({zIndex:i.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){if(i.closeOnEscape&&!n.isDefaultPrevented()&&n.keyCode&&n.keyCode===a.ui.keyCode.ESCAPE){g.close(n);n.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(n){g.moveToTop(false,n)});g.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(j);var l=(g.uiDialogTitlebar=a("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(j),
+o=a('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){o.addClass("ui-state-hover")},function(){o.removeClass("ui-state-hover")}).focus(function(){o.addClass("ui-state-focus")}).blur(function(){o.removeClass("ui-state-focus")}).click(function(n){g.close(n);return false}).appendTo(l);(g.uiDialogTitlebarCloseText=a("<span></span>")).addClass("ui-icon ui-icon-closethick").text(i.closeText).appendTo(o);a("<span></span>").addClass("ui-dialog-title").attr("id",
+f).html(b).prependTo(l);if(a.isFunction(i.beforeclose)&&!a.isFunction(i.beforeClose))i.beforeClose=i.beforeclose;l.find("*").add(l).disableSelection();i.draggable&&a.fn.draggable&&g._makeDraggable();i.resizable&&a.fn.resizable&&g._makeResizable();g._createButtons(i.buttons);g._isOpen=false;a.fn.bgiframe&&j.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var g=this;g.overlay&&g.overlay.destroy();g.uiDialog.hide();g.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");
+g.uiDialog.remove();g.originalTitle&&g.element.attr("title",g.originalTitle);return g},widget:function(){return this.uiDialog},close:function(g){var i=this,b,f;if(false!==i._trigger("beforeClose",g)){i.overlay&&i.overlay.destroy();i.uiDialog.unbind("keypress.ui-dialog");i._isOpen=false;if(i.options.hide)i.uiDialog.hide(i.options.hide,function(){i._trigger("close",g)});else{i.uiDialog.hide();i._trigger("close",g)}a.ui.dialog.overlay.resize();if(i.options.modal){b=0;a(".ui-dialog").each(function(){if(this!==
+i.uiDialog[0]){f=a(this).css("z-index");isNaN(f)||(b=Math.max(b,f))}});a.ui.dialog.maxZ=b}return i}},isOpen:function(){return this._isOpen},moveToTop:function(g,i){var b=this,f=b.options;if(f.modal&&!g||!f.stack&&!f.modal)return b._trigger("focus",i);if(f.zIndex>a.ui.dialog.maxZ)a.ui.dialog.maxZ=f.zIndex;if(b.overlay){a.ui.dialog.maxZ+=1;b.overlay.$el.css("z-index",a.ui.dialog.overlay.maxZ=a.ui.dialog.maxZ)}g={scrollTop:b.element.scrollTop(),scrollLeft:b.element.scrollLeft()};a.ui.dialog.maxZ+=1;
+b.uiDialog.css("z-index",a.ui.dialog.maxZ);b.element.attr(g);b._trigger("focus",i);return b},open:function(){if(!this._isOpen){var g=this,i=g.options,b=g.uiDialog;g.overlay=i.modal?new a.ui.dialog.overlay(g):null;g._size();g._position(i.position);b.show(i.show);g.moveToTop(true);i.modal&&b.bind("keypress.ui-dialog",function(f){if(f.keyCode===a.ui.keyCode.TAB){var j=a(":tabbable",this),l=j.filter(":first");j=j.filter(":last");if(f.target===j[0]&&!f.shiftKey){l.focus(1);return false}else if(f.target===
+l[0]&&f.shiftKey){j.focus(1);return false}}});a(g.element.find(":tabbable").get().concat(b.find(".ui-dialog-buttonpane :tabbable").get().concat(b.get()))).eq(0).focus();g._isOpen=true;g._trigger("open");return g}},_createButtons:function(g){var i=this,b=false,f=a("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),j=a("<div></div>").addClass("ui-dialog-buttonset").appendTo(f);i.uiDialog.find(".ui-dialog-buttonpane").remove();typeof g==="object"&&g!==null&&a.each(g,
+function(){return!(b=true)});if(b){a.each(g,function(l,o){o=a.isFunction(o)?{click:o,text:l}:o;var n=a('<button type="button"></button>').click(function(){o.click.apply(i.element[0],arguments)}).appendTo(j);a.each(o,function(k,m){if(k!=="click")k in h?n[k](m):n.attr(k,m)});a.fn.button&&n.button()});f.appendTo(i.uiDialog)}},_makeDraggable:function(){function g(l){return{position:l.position,offset:l.offset}}var i=this,b=i.options,f=a(document),j;i.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",
+handle:".ui-dialog-titlebar",containment:"document",start:function(l,o){j=b.height==="auto"?"auto":a(this).height();a(this).height(a(this).height()).addClass("ui-dialog-dragging");i._trigger("dragStart",l,g(o))},drag:function(l,o){i._trigger("drag",l,g(o))},stop:function(l,o){b.position=[o.position.left-f.scrollLeft(),o.position.top-f.scrollTop()];a(this).removeClass("ui-dialog-dragging").height(j);i._trigger("dragStop",l,g(o));a.ui.dialog.overlay.resize()}})},_makeResizable:function(g){function i(l){return{originalPosition:l.originalPosition,
+originalSize:l.originalSize,position:l.position,size:l.size}}g=g===d?this.options.resizable:g;var b=this,f=b.options,j=b.uiDialog.css("position");g=typeof g==="string"?g:"n,e,s,w,se,sw,ne,nw";b.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:b.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:b._minHeight(),handles:g,start:function(l,o){a(this).addClass("ui-dialog-resizing");b._trigger("resizeStart",l,i(o))},resize:function(l,o){b._trigger("resize",
+l,i(o))},stop:function(l,o){a(this).removeClass("ui-dialog-resizing");f.height=a(this).height();f.width=a(this).width();b._trigger("resizeStop",l,i(o));a.ui.dialog.overlay.resize()}}).css("position",j).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var g=this.options;return g.height==="auto"?g.minHeight:Math.min(g.minHeight,g.height)},_position:function(g){var i=[],b=[0,0],f;if(g){if(typeof g==="string"||typeof g==="object"&&"0"in g){i=g.split?g.split(" "):
+[g[0],g[1]];if(i.length===1)i[1]=i[0];a.each(["left","top"],function(j,l){if(+i[j]===i[j]){b[j]=i[j];i[j]=l}});g={my:i.join(" "),at:i.join(" "),offset:b.join(" ")}}g=a.extend({},a.ui.dialog.prototype.options.position,g)}else g=a.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a.extend({of:window},g));f||this.uiDialog.hide()},_setOptions:function(g){var i=this,b={},f=false;a.each(g,function(j,l){i._setOption(j,l);
+if(j in c)f=true;if(j in e)b[j]=l});f&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",b)},_setOption:function(g,i){var b=this,f=b.uiDialog;switch(g){case "beforeclose":g="beforeClose";break;case "buttons":b._createButtons(i);break;case "closeText":b.uiDialogTitlebarCloseText.text(""+i);break;case "dialogClass":f.removeClass(b.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+i);break;case "disabled":i?f.addClass("ui-dialog-disabled"):
+f.removeClass("ui-dialog-disabled");break;case "draggable":var j=f.is(":data(draggable)");j&&!i&&f.draggable("destroy");!j&&i&&b._makeDraggable();break;case "position":b._position(i);break;case "resizable":(j=f.is(":data(resizable)"))&&!i&&f.resizable("destroy");j&&typeof i==="string"&&f.resizable("option","handles",i);!j&&i!==false&&b._makeResizable(i);break;case "title":a(".ui-dialog-title",b.uiDialogTitlebar).html(""+(i||"&#160;"));break}a.Widget.prototype._setOption.apply(b,arguments)},_size:function(){var g=
+this.options,i,b,f=this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(g.minWidth>g.width)g.width=g.minWidth;i=this.uiDialog.css({height:"auto",width:g.width}).height();b=Math.max(0,g.minHeight-i);if(g.height==="auto")if(a.support.minHeight)this.element.css({minHeight:b,height:"auto"});else{this.uiDialog.show();g=this.element.css("height","auto").height();f||this.uiDialog.hide();this.element.height(Math.max(g,b))}else this.element.height(Math.max(g.height-
+i,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});a.extend(a.ui.dialog,{version:"1.8.16",uuid:0,maxZ:0,getTitleId:function(g){g=g.attr("id");if(!g){this.uuid+=1;g=this.uuid}return"ui-dialog-title-"+g},overlay:function(g){this.$el=a.ui.dialog.overlay.create(g)}});a.extend(a.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:a.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(g){return g+".dialog-overlay"}).join(" "),
+create:function(g){if(this.instances.length===0){setTimeout(function(){a.ui.dialog.overlay.instances.length&&a(document).bind(a.ui.dialog.overlay.events,function(b){if(a(b.target).zIndex()<a.ui.dialog.overlay.maxZ)return false})},1);a(document).bind("keydown.dialog-overlay",function(b){if(g.options.closeOnEscape&&!b.isDefaultPrevented()&&b.keyCode&&b.keyCode===a.ui.keyCode.ESCAPE){g.close(b);b.preventDefault()}});a(window).bind("resize.dialog-overlay",a.ui.dialog.overlay.resize)}var i=(this.oldInstances.pop()||
+a("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});a.fn.bgiframe&&i.bgiframe();this.instances.push(i);return i},destroy:function(g){var i=a.inArray(g,this.instances);i!=-1&&this.oldInstances.push(this.instances.splice(i,1)[0]);this.instances.length===0&&a([document,window]).unbind(".dialog-overlay");g.remove();var b=0;a.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var g,i;if(a.browser.msie&&
+a.browser.version<7){g=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);i=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return g<i?a(window).height()+"px":g+"px"}else return a(document).height()+"px"},width:function(){var g,i;if(a.browser.msie){g=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);i=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return g<i?a(window).width()+"px":g+"px"}else return a(document).width()+
+"px"},resize:function(){var g=a([]);a.each(a.ui.dialog.overlay.instances,function(){g=g.add(this)});g.css({width:0,height:0}).css({width:a.ui.dialog.overlay.width(),height:a.ui.dialog.overlay.height()})}});a.extend(a.ui.dialog.overlay.prototype,{destroy:function(){a.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
+(function(a){a.ui=a.ui||{};var d=/left|center|right/,c=/top|center|bottom/,e=a.fn.position,h=a.fn.offset;a.fn.position=function(g){if(!g||!g.of)return e.apply(this,arguments);g=a.extend({},g);var i=a(g.of),b=i[0],f=(g.collision||"flip").split(" "),j=g.offset?g.offset.split(" "):[0,0],l,o,n;if(b.nodeType===9){l=i.width();o=i.height();n={top:0,left:0}}else if(b.setTimeout){l=i.width();o=i.height();n={top:i.scrollTop(),left:i.scrollLeft()}}else if(b.preventDefault){g.at="left top";l=o=0;n={top:g.of.pageY,
+left:g.of.pageX}}else{l=i.outerWidth();o=i.outerHeight();n=i.offset()}a.each(["my","at"],function(){var k=(g[this]||"").split(" ");if(k.length===1)k=d.test(k[0])?k.concat(["center"]):c.test(k[0])?["center"].concat(k):["center","center"];k[0]=d.test(k[0])?k[0]:"center";k[1]=c.test(k[1])?k[1]:"center";g[this]=k});if(f.length===1)f[1]=f[0];j[0]=parseInt(j[0],10)||0;if(j.length===1)j[1]=j[0];j[1]=parseInt(j[1],10)||0;if(g.at[0]==="right")n.left+=l;else if(g.at[0]==="center")n.left+=l/2;if(g.at[1]==="bottom")n.top+=
+o;else if(g.at[1]==="center")n.top+=o/2;n.left+=j[0];n.top+=j[1];return this.each(function(){var k=a(this),m=k.outerWidth(),p=k.outerHeight(),q=parseInt(a.curCSS(this,"marginLeft",true))||0,s=parseInt(a.curCSS(this,"marginTop",true))||0,r=m+q+(parseInt(a.curCSS(this,"marginRight",true))||0),u=p+s+(parseInt(a.curCSS(this,"marginBottom",true))||0),v=a.extend({},n),w;if(g.my[0]==="right")v.left-=m;else if(g.my[0]==="center")v.left-=m/2;if(g.my[1]==="bottom")v.top-=p;else if(g.my[1]==="center")v.top-=
+p/2;v.left=Math.round(v.left);v.top=Math.round(v.top);w={left:v.left-q,top:v.top-s};a.each(["left","top"],function(x,y){a.ui.position[f[x]]&&a.ui.position[f[x]][y](v,{targetWidth:l,targetHeight:o,elemWidth:m,elemHeight:p,collisionPosition:w,collisionWidth:r,collisionHeight:u,offset:j,my:g.my,at:g.at})});a.fn.bgiframe&&k.bgiframe();k.offset(a.extend(v,{using:g.using}))})};a.ui.position={fit:{left:function(g,i){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();g.left=
+b>0?g.left-b:Math.max(g.left-i.collisionPosition.left,g.left)},top:function(g,i){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();g.top=b>0?g.top-b:Math.max(g.top-i.collisionPosition.top,g.top)}},flip:{left:function(g,i){if(i.at[0]!=="center"){var b=a(window);b=i.collisionPosition.left+i.collisionWidth-b.width()-b.scrollLeft();var f=i.my[0]==="left"?-i.elemWidth:i.my[0]==="right"?i.elemWidth:0,j=i.at[0]==="left"?i.targetWidth:-i.targetWidth,l=-2*i.offset[0];g.left+=
+i.collisionPosition.left<0?f+j+l:b>0?f+j+l:0}},top:function(g,i){if(i.at[1]!=="center"){var b=a(window);b=i.collisionPosition.top+i.collisionHeight-b.height()-b.scrollTop();var f=i.my[1]==="top"?-i.elemHeight:i.my[1]==="bottom"?i.elemHeight:0,j=i.at[1]==="top"?i.targetHeight:-i.targetHeight,l=-2*i.offset[1];g.top+=i.collisionPosition.top<0?f+j+l:b>0?f+j+l:0}}}};if(!a.offset.setOffset){a.offset.setOffset=function(g,i){if(/static/.test(a.curCSS(g,"position")))g.style.position="relative";var b=a(g),
+f=b.offset(),j=parseInt(a.curCSS(g,"top",true),10)||0,l=parseInt(a.curCSS(g,"left",true),10)||0;f={top:i.top-f.top+j,left:i.left-f.left+l};"using"in i?i.using.call(g,f):b.css(f)};a.fn.offset=function(g){var i=this[0];if(!i||!i.ownerDocument)return null;if(g)return this.each(function(){a.offset.setOffset(this,g)});return h.call(this)}}})(jQuery);
+(function(a,d){a.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=a("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
+this.valueDiv.remove();a.Widget.prototype.destroy.apply(this,arguments)},value:function(c){if(c===d)return this._value();this._setOption("value",c);return this},_setOption:function(c,e){if(c==="value"){this.options.value=e;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}a.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var c=this.options.value;if(typeof c!=="number")c=0;return Math.min(this.options.max,Math.max(this.min,c))},_percentage:function(){return 100*
+this._value()/this.options.max},_refreshValue:function(){var c=this.value(),e=this._percentage();if(this.oldValue!==c){this.oldValue=c;this._trigger("change")}this.valueDiv.toggle(c>this.min).toggleClass("ui-corner-right",c===this.options.max).width(e.toFixed(0)+"%");this.element.attr("aria-valuenow",c)}});a.extend(a.ui.progressbar,{version:"1.8.16"})})(jQuery);
+(function(a){a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var d=this,c=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),h=c.values&&c.values.length||1,g=[];this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+
+this.orientation+" ui-widget ui-widget-content ui-corner-all"+(c.disabled?" ui-slider-disabled ui-disabled":""));this.range=a([]);if(c.range){if(c.range===true){if(!c.values)c.values=[this._valueMin(),this._valueMin()];if(c.values.length&&c.values.length!==2)c.values=[c.values[0],c.values[0]]}this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(c.range==="min"||c.range==="max"?" ui-slider-range-"+c.range:""))}for(var i=e.length;i<h;i+=1)g.push("<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>");
+this.handles=e.add(a(g.join("")).appendTo(d.element));this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(b){b.preventDefault()}).hover(function(){c.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){if(c.disabled)a(this).blur();else{a(".ui-slider .ui-state-focus").removeClass("ui-state-focus");a(this).addClass("ui-state-focus")}}).blur(function(){a(this).removeClass("ui-state-focus")});this.handles.each(function(b){a(this).data("index.ui-slider-handle",
+b)});this.handles.keydown(function(b){var f=true,j=a(this).data("index.ui-slider-handle"),l,o,n;if(!d.options.disabled){switch(b.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:f=false;if(!d._keySliding){d._keySliding=true;a(this).addClass("ui-state-active");l=d._start(b,j);if(l===false)return}break}n=d.options.step;l=d.options.values&&d.options.values.length?
+(o=d.values(j)):(o=d.value());switch(b.keyCode){case a.ui.keyCode.HOME:o=d._valueMin();break;case a.ui.keyCode.END:o=d._valueMax();break;case a.ui.keyCode.PAGE_UP:o=d._trimAlignValue(l+(d._valueMax()-d._valueMin())/5);break;case a.ui.keyCode.PAGE_DOWN:o=d._trimAlignValue(l-(d._valueMax()-d._valueMin())/5);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(l===d._valueMax())return;o=d._trimAlignValue(l+n);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(l===d._valueMin())return;o=d._trimAlignValue(l-
+n);break}d._slide(b,j,o);return f}}).keyup(function(b){var f=a(this).data("index.ui-slider-handle");if(d._keySliding){d._keySliding=false;d._stop(b,f);d._change(b,f);a(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();
+return this},_mouseCapture:function(d){var c=this.options,e,h,g,i,b;if(c.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();e=this._normValueFromMouse({x:d.pageX,y:d.pageY});h=this._valueMax()-this._valueMin()+1;i=this;this.handles.each(function(f){var j=Math.abs(e-i.values(f));if(h>j){h=j;g=a(this);b=f}});if(c.range===true&&this.values(1)===c.min){b+=1;g=a(this.handles[b])}if(this._start(d,b)===false)return false;
+this._mouseSliding=true;i._handleIndex=b;g.addClass("ui-state-active").focus();c=g.offset();this._clickOffset=!a(d.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:d.pageX-c.left-g.width()/2,top:d.pageY-c.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(d,b,e);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(d){var c=
+this._normValueFromMouse({x:d.pageX,y:d.pageY});this._slide(d,this._handleIndex,c);return false},_mouseStop:function(d){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(d,this._handleIndex);this._change(d,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(d){var c;if(this.orientation==="horizontal"){c=
+this.elementSize.width;d=d.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{c=this.elementSize.height;d=d.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}c=d/c;if(c>1)c=1;if(c<0)c=0;if(this.orientation==="vertical")c=1-c;d=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+c*d)},_start:function(d,c){var e={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(c);
+e.values=this.values()}return this._trigger("start",d,e)},_slide:function(d,c,e){var h;if(this.options.values&&this.options.values.length){h=this.values(c?0:1);if(this.options.values.length===2&&this.options.range===true&&(c===0&&e>h||c===1&&e<h))e=h;if(e!==this.values(c)){h=this.values();h[c]=e;d=this._trigger("slide",d,{handle:this.handles[c],value:e,values:h});this.values(c?0:1);d!==false&&this.values(c,e,true)}}else if(e!==this.value()){d=this._trigger("slide",d,{handle:this.handles[c],value:e});
+d!==false&&this.value(e)}},_stop:function(d,c){var e={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(c);e.values=this.values()}this._trigger("stop",d,e)},_change:function(d,c){if(!this._keySliding&&!this._mouseSliding){var e={handle:this.handles[c],value:this.value()};if(this.options.values&&this.options.values.length){e.value=this.values(c);e.values=this.values()}this._trigger("change",d,e)}},value:function(d){if(arguments.length){this.options.value=
+this._trimAlignValue(d);this._refreshValue();this._change(null,0)}else return this._value()},values:function(d,c){var e,h,g;if(arguments.length>1){this.options.values[d]=this._trimAlignValue(c);this._refreshValue();this._change(null,d)}else if(arguments.length)if(a.isArray(arguments[0])){e=this.options.values;h=arguments[0];for(g=0;g<e.length;g+=1){e[g]=this._trimAlignValue(h[g]);this._change(null,g)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(d):
+this.value();else return this._values()},_setOption:function(d,c){var e,h=0;if(a.isArray(this.options.values))h=this.options.values.length;a.Widget.prototype._setOption.apply(this,arguments);switch(d){case "disabled":if(c){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.propAttr("disabled",true);this.element.addClass("ui-disabled")}else{this.handles.propAttr("disabled",false);this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
+this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(e=0;e<h;e+=1)this._change(null,e);this._animateOff=false;break}},_value:function(){var d=this.options.value;return d=this._trimAlignValue(d)},_values:function(d){var c,e;if(arguments.length){c=this.options.values[d];
+return c=this._trimAlignValue(c)}else{c=this.options.values.slice();for(e=0;e<c.length;e+=1)c[e]=this._trimAlignValue(c[e]);return c}},_trimAlignValue:function(d){if(d<=this._valueMin())return this._valueMin();if(d>=this._valueMax())return this._valueMax();var c=this.options.step>0?this.options.step:1,e=(d-this._valueMin())%c;d=d-e;if(Math.abs(e)*2>=c)d+=e>0?c:-c;return parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var d=
+this.options.range,c=this.options,e=this,h=!this._animateOff?c.animate:false,g,i={},b,f,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(o){g=(e.values(o)-e._valueMin())/(e._valueMax()-e._valueMin())*100;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";a(this).stop(1,1)[h?"animate":"css"](i,c.animate);if(e.options.range===true)if(e.orientation==="horizontal"){if(o===0)e.range.stop(1,1)[h?"animate":"css"]({left:g+"%"},c.animate);if(o===1)e.range[h?"animate":"css"]({width:g-
+b+"%"},{queue:false,duration:c.animate})}else{if(o===0)e.range.stop(1,1)[h?"animate":"css"]({bottom:g+"%"},c.animate);if(o===1)e.range[h?"animate":"css"]({height:g-b+"%"},{queue:false,duration:c.animate})}b=g});else{f=this.value();j=this._valueMin();l=this._valueMax();g=l!==j?(f-j)/(l-j)*100:0;i[e.orientation==="horizontal"?"left":"bottom"]=g+"%";this.handle.stop(1,1)[h?"animate":"css"](i,c.animate);if(d==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[h?"animate":"css"]({width:g+"%"},
+c.animate);if(d==="max"&&this.orientation==="horizontal")this.range[h?"animate":"css"]({width:100-g+"%"},{queue:false,duration:c.animate});if(d==="min"&&this.orientation==="vertical")this.range.stop(1,1)[h?"animate":"css"]({height:g+"%"},c.animate);if(d==="max"&&this.orientation==="vertical")this.range[h?"animate":"css"]({height:100-g+"%"},{queue:false,duration:c.animate})}}});a.extend(a.ui.slider,{version:"1.8.16"})})(jQuery);
+(function(a,d){function c(){return++h}function e(){return++g}var h=0,g=0;a.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(i,b){if(i=="selected")this.options.collapsible&&
+b==this.options.selected||this.select(b);else{this.options[i]=b;this._tabify()}},_tabId:function(i){return i.title&&i.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+c()},_sanitizeSelector:function(i){return i.replace(/:/g,"\\:")},_cookie:function(){var i=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+e());return a.cookie.apply(null,[i].concat(a.makeArray(arguments)))},_ui:function(i,b){return{tab:i,panel:b,index:this.anchors.index(i)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var i=
+a(this);i.html(i.data("label.tabs")).removeData("label.tabs")})},_tabify:function(i){function b(r,u){r.css("display","");!a.support.opacity&&u.opacity&&r[0].style.removeAttribute("filter")}var f=this,j=this.options,l=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=a(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);this.anchors.each(function(r,u){var v=a(u).attr("href"),w=v.split("#")[0],x;if(w&&(w===location.toString().split("#")[0]||
+(x=a("base")[0])&&w===x.href)){v=u.hash;u.href=v}if(l.test(v))f.panels=f.panels.add(f.element.find(f._sanitizeSelector(v)));else if(v&&v!=="#"){a.data(u,"href.tabs",v);a.data(u,"load.tabs",v.replace(/#.*$/,""));v=f._tabId(u);u.href="#"+v;u=f.element.find("#"+v);if(!u.length){u=a(j.panelTemplate).attr("id",v).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(f.panels[r-1]||f.list);u.data("destroy.tabs",true)}f.panels=f.panels.add(u)}else j.disabled.push(r)});if(i){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
+this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(j.selected===d){location.hash&&this.anchors.each(function(r,u){if(u.hash==location.hash){j.selected=r;return false}});if(typeof j.selected!=="number"&&j.cookie)j.selected=parseInt(f._cookie(),10);if(typeof j.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)j.selected=
+this.lis.index(this.lis.filter(".ui-tabs-selected"));j.selected=j.selected||(this.lis.length?0:-1)}else if(j.selected===null)j.selected=-1;j.selected=j.selected>=0&&this.anchors[j.selected]||j.selected<0?j.selected:0;j.disabled=a.unique(j.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(r){return f.lis.index(r)}))).sort();a.inArray(j.selected,j.disabled)!=-1&&j.disabled.splice(a.inArray(j.selected,j.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
+if(j.selected>=0&&this.anchors.length){f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(j.selected).addClass("ui-tabs-selected ui-state-active");f.element.queue("tabs",function(){f._trigger("show",null,f._ui(f.anchors[j.selected],f.element.find(f._sanitizeSelector(f.anchors[j.selected].hash))[0]))});this.load(j.selected)}a(window).bind("unload",function(){f.lis.add(f.anchors).unbind(".tabs");f.lis=f.anchors=f.panels=null})}else j.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
+this.element[j.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");j.cookie&&this._cookie(j.selected,j.cookie);i=0;for(var o;o=this.lis[i];i++)a(o)[a.inArray(i,j.disabled)!=-1&&!a(o).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");j.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(j.event!=="mouseover"){var n=function(r,u){u.is(":not(.ui-state-disabled)")&&u.addClass("ui-state-"+r)},k=function(r,u){u.removeClass("ui-state-"+
+r)};this.lis.bind("mouseover.tabs",function(){n("hover",a(this))});this.lis.bind("mouseout.tabs",function(){k("hover",a(this))});this.anchors.bind("focus.tabs",function(){n("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){k("focus",a(this).closest("li"))})}var m,p;if(j.fx)if(a.isArray(j.fx)){m=j.fx[0];p=j.fx[1]}else m=p=j.fx;var q=p?function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.hide().removeClass("ui-tabs-hide").animate(p,p.duration||"normal",
+function(){b(u,p);f._trigger("show",null,f._ui(r,u[0]))})}:function(r,u){a(r).closest("li").addClass("ui-tabs-selected ui-state-active");u.removeClass("ui-tabs-hide");f._trigger("show",null,f._ui(r,u[0]))},s=m?function(r,u){u.animate(m,m.duration||"normal",function(){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");b(u,m);f.element.dequeue("tabs")})}:function(r,u){f.lis.removeClass("ui-tabs-selected ui-state-active");u.addClass("ui-tabs-hide");f.element.dequeue("tabs")};
+this.anchors.bind(j.event+".tabs",function(){var r=this,u=a(r).closest("li"),v=f.panels.filter(":not(.ui-tabs-hide)"),w=f.element.find(f._sanitizeSelector(r.hash));if(u.hasClass("ui-tabs-selected")&&!j.collapsible||u.hasClass("ui-state-disabled")||u.hasClass("ui-state-processing")||f.panels.filter(":animated").length||f._trigger("select",null,f._ui(this,w[0]))===false){this.blur();return false}j.selected=f.anchors.index(this);f.abort();if(j.collapsible)if(u.hasClass("ui-tabs-selected")){j.selected=
+-1;j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){s(r,v)}).dequeue("tabs");this.blur();return false}else if(!v.length){j.cookie&&f._cookie(j.selected,j.cookie);f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this));this.blur();return false}j.cookie&&f._cookie(j.selected,j.cookie);if(w.length){v.length&&f.element.queue("tabs",function(){s(r,v)});f.element.queue("tabs",function(){q(r,w)});f.load(f.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
+a.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(i){if(typeof i=="string")i=this.anchors.index(this.anchors.filter("[href$="+i+"]"));return i},destroy:function(){var i=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var b=
+a.data(this,"href.tabs");if(b)this.href=b;var f=a(this).unbind(".tabs");a.each(["href","load","cache"],function(j,l){f.removeData(l+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){a.data(this,"destroy.tabs")?a(this).remove():a(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});i.cookie&&this._cookie(null,i.cookie);return this},add:function(i,
+b,f){if(f===d)f=this.anchors.length;var j=this,l=this.options;b=a(l.tabTemplate.replace(/#\{href\}/g,i).replace(/#\{label\}/g,b));i=!i.indexOf("#")?i.replace("#",""):this._tabId(a("a",b)[0]);b.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var o=j.element.find("#"+i);o.length||(o=a(l.panelTemplate).attr("id",i).data("destroy.tabs",true));o.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(f>=this.lis.length){b.appendTo(this.list);o.appendTo(this.list[0].parentNode)}else{b.insertBefore(this.lis[f]);
+o.insertBefore(this.panels[f])}l.disabled=a.map(l.disabled,function(n){return n>=f?++n:n});this._tabify();if(this.anchors.length==1){l.selected=0;b.addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){j._trigger("show",null,j._ui(j.anchors[0],j.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[f],this.panels[f]));return this},remove:function(i){i=this._getIndex(i);var b=this.options,f=this.lis.eq(i).remove(),j=this.panels.eq(i).remove();
+if(f.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(i+(i+1<this.anchors.length?1:-1));b.disabled=a.map(a.grep(b.disabled,function(l){return l!=i}),function(l){return l>=i?--l:l});this._tabify();this._trigger("remove",null,this._ui(f.find("a")[0],j[0]));return this},enable:function(i){i=this._getIndex(i);var b=this.options;if(a.inArray(i,b.disabled)!=-1){this.lis.eq(i).removeClass("ui-state-disabled");b.disabled=a.grep(b.disabled,function(f){return f!=i});this._trigger("enable",null,
+this._ui(this.anchors[i],this.panels[i]));return this}},disable:function(i){i=this._getIndex(i);var b=this.options;if(i!=b.selected){this.lis.eq(i).addClass("ui-state-disabled");b.disabled.push(i);b.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[i],this.panels[i]))}return this},select:function(i){i=this._getIndex(i);if(i==-1)if(this.options.collapsible&&this.options.selected!=-1)i=this.options.selected;else return this;this.anchors.eq(i).trigger(this.options.event+".tabs");return this},
+load:function(i){i=this._getIndex(i);var b=this,f=this.options,j=this.anchors.eq(i)[0],l=a.data(j,"load.tabs");this.abort();if(!l||this.element.queue("tabs").length!==0&&a.data(j,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(i).addClass("ui-state-processing");if(f.spinner){var o=a("span",j);o.data("label.tabs",o.html()).html(f.spinner)}this.xhr=a.ajax(a.extend({},f.ajaxOptions,{url:l,success:function(n,k){b.element.find(b._sanitizeSelector(j.hash)).html(n);b._cleanup();f.cache&&a.data(j,
+"cache.tabs",true);b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.success(n,k)}catch(m){}},error:function(n,k){b._cleanup();b._trigger("load",null,b._ui(b.anchors[i],b.panels[i]));try{f.ajaxOptions.error(n,k,i,j)}catch(m){}}}));b.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
+url:function(i,b){this.anchors.eq(i).removeData("cache.tabs").data("load.tabs",b);return this},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.8.16"});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(i,b){var f=this,j=this.options,l=f._rotate||(f._rotate=function(o){clearTimeout(f.rotation);f.rotation=setTimeout(function(){var n=j.selected;f.select(++n<f.anchors.length?n:0)},i);o&&o.stopPropagation()});b=f._unrotate||(f._unrotate=!b?function(o){o.clientX&&
+f.rotate(null)}:function(){t=j.selected;l()});if(i){this.element.bind("tabsshow",l);this.anchors.bind(j.event+".tabs",b);l()}else{clearTimeout(f.rotation);this.element.unbind("tabsshow",l);this.anchors.unbind(j.event+".tabs",b);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
diff --git a/vendors/jquery/jquery.autocomplete.min.js b/vendors/jquery/jquery.autocomplete.min.js
new file mode 100644
index 000000000..4b021c167
--- /dev/null
+++ b/vendors/jquery/jquery.autocomplete.min.js
@@ -0,0 +1,13 @@
+/*
+ * jQuery Autocomplete plugin 1.1
+ *
+ * Copyright (c) 2009 Jörn Zaefferer
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ *
+ * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
+ */;(function($){$.fn.extend({autocomplete:function(urlOrData,options){var isUrl=typeof urlOrData=="string";options=$.extend({},$.Autocompleter.defaults,{url:isUrl?urlOrData:null,data:isUrl?null:urlOrData,delay:isUrl?$.Autocompleter.defaults.delay:10,max:options&&!options.scroll?10:150},options);options.highlight=options.highlight||function(value){return value;};options.formatMatch=options.formatMatch||options.formatItem;return this.each(function(){new $.Autocompleter(this,options);});},result:function(handler){return this.bind("result",handler);},search:function(handler){return this.trigger("search",[handler]);},flushCache:function(){return this.trigger("flushCache");},setOptions:function(options){return this.trigger("setOptions",[options]);},unautocomplete:function(){return this.trigger("unautocomplete");}});$.Autocompleter=function(input,options){var KEY={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34,BACKSPACE:8};var $input=$(input).attr("autocomplete","off").addClass(options.inputClass);var timeout;var previousValue="";var cache=$.Autocompleter.Cache(options);var hasFocus=0;var lastKeyPressCode;var config={mouseDownOnSelect:false};var select=$.Autocompleter.Select(options,input,selectCurrent,config);var blockSubmit;$.browser.opera&&$(input.form).bind("submit.autocomplete",function(){if(blockSubmit){blockSubmit=false;return false;}});$input.bind(($.browser.opera?"keypress":"keydown")+".autocomplete",function(event){hasFocus=1;lastKeyPressCode=event.keyCode;switch(event.keyCode){case KEY.UP:event.preventDefault();if(select.visible()){select.prev();}else{onChange(0,true);}break;case KEY.DOWN:event.preventDefault();if(select.visible()){select.next();}else{onChange(0,true);}break;case KEY.PAGEUP:event.preventDefault();if(select.visible()){select.pageUp();}else{onChange(0,true);}break;case KEY.PAGEDOWN:event.preventDefault();if(select.visible()){select.pageDown();}else{onChange(0,true);}break;case options.multiple&&$.trim(options.multipleSeparator)==","&&KEY.COMMA:case KEY.TAB:case KEY.RETURN:if(selectCurrent()){event.preventDefault();blockSubmit=true;return false;}break;case KEY.ESC:select.hide();break;default:clearTimeout(timeout);timeout=setTimeout(onChange,options.delay);break;}}).focus(function(){hasFocus++;}).blur(function(){hasFocus=0;if(!config.mouseDownOnSelect){hideResults();}}).click(function(){if(hasFocus++>1&&!select.visible()){onChange(0,true);}}).bind("search",function(){var fn=(arguments.length>1)?arguments[1]:null;function findValueCallback(q,data){var result;if(data&&data.length){for(var i=0;i<data.length;i++){if(data[i].result.toLowerCase()==q.toLowerCase()){result=data[i];break;}}}if(typeof fn=="function")fn(result);else $input.trigger("result",result&&[result.data,result.value]);}$.each(trimWords($input.val()),function(i,value){request(value,findValueCallback,findValueCallback);});}).bind("flushCache",function(){cache.flush();}).bind("setOptions",function(){$.extend(options,arguments[1]);if("data"in arguments[1])cache.populate();}).bind("unautocomplete",function(){select.unbind();$input.unbind();$(input.form).unbind(".autocomplete");});function selectCurrent(){var selected=select.selected();if(!selected)return false;var v=selected.result;previousValue=v;if(options.multiple){var words=trimWords($input.val());if(words.length>1){var seperator=options.multipleSeparator.length;var cursorAt=$(input).selection().start;var wordAt,progress=0;$.each(words,function(i,word){progress+=word.length;if(cursorAt<=progress){wordAt=i;return false;}progress+=seperator;});words[wordAt]=v;v=words.join(options.multipleSeparator);}v+=options.multipleSeparator;}$input.val(v);hideResultsNow();$input.trigger("result",[selected.data,selected.value]);return true;}function onChange(crap,skipPrevCheck){if(lastKeyPressCode==KEY.DEL){select.hide();return;}var currentValue=$input.val();if(!skipPrevCheck&&currentValue==previousValue)return;previousValue=currentValue;currentValue=lastWord(currentValue);if(currentValue.length>=options.minChars){$input.addClass(options.loadingClass);if(!options.matchCase)currentValue=currentValue.toLowerCase();request(currentValue,receiveData,hideResultsNow);}else{stopLoading();select.hide();}};function trimWords(value){if(!value)return[""];if(!options.multiple)return[$.trim(value)];return $.map(value.split(options.multipleSeparator),function(word){return $.trim(value).length?$.trim(word):null;});}function lastWord(value){if(!options.multiple)return value;var words=trimWords(value);if(words.length==1)return words[0];var cursorAt=$(input).selection().start;if(cursorAt==value.length){words=trimWords(value)}else{words=trimWords(value.replace(value.substring(cursorAt),""));}return words[words.length-1];}function autoFill(q,sValue){if(options.autoFill&&(lastWord($input.val()).toLowerCase()==q.toLowerCase())&&lastKeyPressCode!=KEY.BACKSPACE){$input.val($input.val()+sValue.substring(lastWord(previousValue).length));$(input).selection(previousValue.length,previousValue.length+sValue.length);}};function hideResults(){clearTimeout(timeout);timeout=setTimeout(hideResultsNow,200);};function hideResultsNow(){var wasVisible=select.visible();select.hide();clearTimeout(timeout);stopLoading();if(options.mustMatch){$input.search(function(result){if(!result){if(options.multiple){var words=trimWords($input.val()).slice(0,-1);$input.val(words.join(options.multipleSeparator)+(words.length?options.multipleSeparator:""));}else{$input.val("");$input.trigger("result",null);}}});}};function receiveData(q,data){if(data&&data.length&&hasFocus){stopLoading();select.display(data,q);autoFill(q,data[0].value);select.show();}else{hideResultsNow();}};function request(term,success,failure){if(!options.matchCase)term=term.toLowerCase();var data=cache.load(term);if(data&&data.length){success(term,data);}else if((typeof options.url=="string")&&(options.url.length>0)){var extraParams={timestamp:+new Date()};$.each(options.extraParams,function(key,param){extraParams[key]=typeof param=="function"?param():param;});$.ajax({mode:"abort",port:"autocomplete"+input.name,dataType:options.dataType,url:options.url,data:$.extend({q:lastWord(term),limit:options.max},extraParams),success:function(data){var parsed=options.parse&&options.parse(data)||parse(data);cache.add(term,parsed);success(term,parsed);}});}else{select.emptyList();failure(term);}};function parse(data){var parsed=[];var rows=data.split("\n");for(var i=0;i<rows.length;i++){var row=$.trim(rows[i]);if(row){row=row.split("|");parsed[parsed.length]={data:row,value:row[0],result:options.formatResult&&options.formatResult(row,row[0])||row[0]};}}return parsed;};function stopLoading(){$input.removeClass(options.loadingClass);};};$.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,max:100,mustMatch:false,extraParams:{},selectFirst:true,formatItem:function(row){return row[0];},formatMatch:null,autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(value,term){return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>");},scroll:true,scrollHeight:180};$.Autocompleter.Cache=function(options){var data={};var length=0;function matchSubset(s,sub){if(!options.matchCase)s=s.toLowerCase();var i=s.indexOf(sub);if(options.matchContains=="word"){i=s.toLowerCase().search("\\b"+sub.toLowerCase());}if(i==-1)return false;return i==0||options.matchContains;};function add(q,value){if(length>options.cacheLength){flush();}if(!data[q]){length++;}data[q]=value;}function populate(){if(!options.data)return false;var stMatchSets={},nullData=0;if(!options.url)options.cacheLength=1;stMatchSets[""]=[];for(var i=0,ol=options.data.length;i<ol;i++){var rawValue=options.data[i];rawValue=(typeof rawValue=="string")?[rawValue]:rawValue;var value=options.formatMatch(rawValue,i+1,options.data.length);if(value===false)continue;var firstChar=value.charAt(0).toLowerCase();if(!stMatchSets[firstChar])stMatchSets[firstChar]=[];var row={value:value,data:rawValue,result:options.formatResult&&options.formatResult(rawValue)||value};stMatchSets[firstChar].push(row);if(nullData++<options.max){stMatchSets[""].push(row);}};$.each(stMatchSets,function(i,value){options.cacheLength++;add(i,value);});}setTimeout(populate,25);function flush(){data={};length=0;}return{flush:flush,add:add,populate:populate,load:function(q){if(!options.cacheLength||!length)return null;if(!options.url&&options.matchContains){var csub=[];for(var k in data){if(k.length>0){var c=data[k];$.each(c,function(i,x){if(matchSubset(x.value,q)){csub.push(x);}});}}return csub;}else
+if(data[q]){return data[q];}else
+if(options.matchSubset){for(var i=q.length-1;i>=options.minChars;i--){var c=data[q.substr(0,i)];if(c){var csub=[];$.each(c,function(i,x){if(matchSubset(x.value,q)){csub[csub.length]=x;}});return csub;}}}return null;}};};$.Autocompleter.Select=function(options,input,select,config){var CLASSES={ACTIVE:"ac_over"};var listItems,active=-1,data,term="",needsInit=true,element,list;function init(){if(!needsInit)return;element=$("<div/>").hide().addClass(options.resultsClass).css("position","absolute").appendTo(document.body);list=$("<ul/>").appendTo(element).mouseover(function(event){if(target(event).nodeName&&target(event).nodeName.toUpperCase()=='LI'){active=$("li",list).removeClass(CLASSES.ACTIVE).index(target(event));$(target(event)).addClass(CLASSES.ACTIVE);}}).click(function(event){$(target(event)).addClass(CLASSES.ACTIVE);select();input.focus();return false;}).mousedown(function(){config.mouseDownOnSelect=true;}).mouseup(function(){config.mouseDownOnSelect=false;});if(options.width>0)element.css("width",options.width);needsInit=false;}function target(event){var element=event.target;while(element&&element.tagName!="LI")element=element.parentNode;if(!element)return[];return element;}function moveSelect(step){listItems.slice(active,active+1).removeClass(CLASSES.ACTIVE);movePosition(step);var activeItem=listItems.slice(active,active+1).addClass(CLASSES.ACTIVE);if(options.scroll){var offset=0;listItems.slice(0,active).each(function(){offset+=this.offsetHeight;});if((offset+activeItem[0].offsetHeight-list.scrollTop())>list[0].clientHeight){list.scrollTop(offset+activeItem[0].offsetHeight-list.innerHeight());}else if(offset<list.scrollTop()){list.scrollTop(offset);}}};function movePosition(step){active+=step;if(active<0){active=listItems.size()-1;}else if(active>=listItems.size()){active=0;}}function limitNumberOfItems(available){return options.max&&options.max<available?options.max:available;}function fillList(){list.empty();var max=limitNumberOfItems(data.length);for(var i=0;i<max;i++){if(!data[i])continue;var formatted=options.formatItem(data[i].data,i+1,max,data[i].value,term);if(formatted===false)continue;var li=$("<li/>").html(options.highlight(formatted,term)).addClass(i%2==0?"ac_even":"ac_odd").appendTo(list)[0];$.data(li,"ac_data",data[i]);}listItems=list.find("li");if(options.selectFirst){listItems.slice(0,1).addClass(CLASSES.ACTIVE);active=0;}if($.fn.bgiframe)list.bgiframe();}return{display:function(d,q){init();data=d;term=q;fillList();},next:function(){moveSelect(1);},prev:function(){moveSelect(-1);},pageUp:function(){if(active!=0&&active-8<0){moveSelect(-active);}else{moveSelect(-8);}},pageDown:function(){if(active!=listItems.size()-1&&active+8>listItems.size()){moveSelect(listItems.size()-1-active);}else{moveSelect(8);}},hide:function(){element&&element.hide();listItems&&listItems.removeClass(CLASSES.ACTIVE);active=-1;},visible:function(){return element&&element.is(":visible");},current:function(){return this.visible()&&(listItems.filter("."+CLASSES.ACTIVE)[0]||options.selectFirst&&listItems[0]);},show:function(){var offset=$(input).offset();element.css({width:typeof options.width=="string"||options.width>0?options.width:$(input).width(),top:offset.top+input.offsetHeight,left:offset.left}).show();if(options.scroll){list.scrollTop(0);list.css({maxHeight:options.scrollHeight,overflow:'auto'});if($.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var listHeight=0;listItems.each(function(){listHeight+=this.offsetHeight;});var scrollbarsVisible=listHeight>options.scrollHeight;list.css('height',scrollbarsVisible?options.scrollHeight:listHeight);if(!scrollbarsVisible){listItems.width(list.width()-parseInt(listItems.css("padding-left"))-parseInt(listItems.css("padding-right")));}}}},selected:function(){var selected=listItems&&listItems.filter("."+CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);return selected&&selected.length&&$.data(selected[0],"ac_data");},emptyList:function(){list&&list.empty();},unbind:function(){element&&element.remove();}};};$.fn.selection=function(start,end){if(start!==undefined){return this.each(function(){if(this.createTextRange){var selRange=this.createTextRange();if(end===undefined||start==end){selRange.move("character",start);selRange.select();}else{selRange.collapse(true);selRange.moveStart("character",start);selRange.moveEnd("character",end);selRange.select();}}else if(this.setSelectionRange){this.setSelectionRange(start,end);}else if(this.selectionStart){this.selectionStart=start;this.selectionEnd=end;}});}var field=this[0];if(field.createTextRange){var range=document.selection.createRange(),orig=field.value,teststring="<->",textLength=range.text.length;range.text=teststring;var caretAt=field.value.indexOf(teststring);field.value=orig;this.selection(caretAt,caretAt+textLength);return{start:caretAt,end:caretAt+textLength}}else if(field.selectionStart!==undefined){return{start:field.selectionStart,end:field.selectionEnd}}};})(jQuery); \ No newline at end of file
diff --git a/vendors/jquery/jquery.easing.1.3.packed.js b/vendors/jquery/jquery.easing.1.3.packed.js
new file mode 100644
index 000000000..fc335d1bf
--- /dev/null
+++ b/vendors/jquery/jquery.easing.1.3.packed.js
@@ -0,0 +1 @@
+eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'E\']=h.i[\'y\'];h.F(h.i,{z:\'A\',y:9(x,t,b,c,d){6 h.i[h.i.z](x,t,b,c,d)},G:9(x,t,b,c,d){6 c*(t/=d)*t+b},A:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},H:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},I:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},K:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},L:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},N:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},O:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},P:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},R:9(x,t,b,c,d){6-c*8.B(t/d*(8.g/2))+c+b},S:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},T:9(x,t,b,c,d){6-c/2*(8.B(8.g*t/d)-1)+b},U:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},V:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},X:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},Y:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Z:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},11:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.r(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.u(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},12:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.r(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.u(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},13:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.r(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.u(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},14:9(x,t,b,c,d,s){e(s==v)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},15:9(x,t,b,c,d,s){e(s==v)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==v)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.C))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.C))+1)*t+s)+2)+b},D:9(x,t,b,c,d){6 c-h.i.w(x,d-t,0,c,d)+b},w:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.17/2.k))*t+.18)+b}m{6 c*(7.q*(t-=(2.19/2.k))*t+.1a)+b}},1b:9(x,t,b,c,d){e(t<d/2)6 h.i.D(x,t*2,0,c,d)*.5+b;6 h.i.w(x,t*2-d,0,c,d)*.5+c*.5+b}});',62,74,'||||||return||Math|function|||||if|var|PI|jQuery|easing|pow|75|70158|else|sin|sqrt||5625|abs|||asin|undefined|easeOutBounce||swing|def|easeOutQuad|cos|525|easeInBounce|jswing|extend|easeInQuad|easeInOutQuad|easeInCubic|easeOutCubic|easeInOutCubic|easeInQuart|easeOutQuart|easeInOutQuart|easeInQuint|easeOutQuint|easeInOutQuint|easeInSine|easeOutSine|easeInOutSine|easeInExpo|easeOutExpo|easeInOutExpo|easeInCirc|easeOutCirc|easeInOutCirc||easeInElastic|easeOutElastic|easeInOutElastic|easeInBack|easeOutBack|easeInOutBack|25|9375|625|984375|easeInOutBounce'.split('|'),0,{})) \ No newline at end of file
diff --git a/vendors/jquery/jquery.form.js b/vendors/jquery/jquery.form.js
new file mode 100644
index 000000000..c0fba53cf
--- /dev/null
+++ b/vendors/jquery/jquery.form.js
@@ -0,0 +1,825 @@
+/*!
+ * jQuery Form Plugin
+ * version: 2.73 (03-MAY-2011)
+ * @requires jQuery v1.3.2 or later
+ *
+ * Examples and documentation at: http://malsup.com/jquery/form/
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+;(function($) {
+
+/*
+ Usage Note:
+ -----------
+ Do not use both ajaxSubmit and ajaxForm on the same form. These
+ functions are intended to be exclusive. Use ajaxSubmit if you want
+ to bind your own submit handler to the form. For example,
+
+ $(document).ready(function() {
+ $('#myForm').bind('submit', function(e) {
+ e.preventDefault(); // <-- important
+ $(this).ajaxSubmit({
+ target: '#output'
+ });
+ });
+ });
+
+ Use ajaxForm when you want the plugin to manage all the event binding
+ for you. For example,
+
+ $(document).ready(function() {
+ $('#myForm').ajaxForm({
+ target: '#output'
+ });
+ });
+
+ When using ajaxForm, the ajaxSubmit function will be invoked for you
+ at the appropriate time.
+*/
+
+/**
+ * ajaxSubmit() provides a mechanism for immediately submitting
+ * an HTML form using AJAX.
+ */
+$.fn.ajaxSubmit = function(options) {
+ // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
+ if (!this.length) {
+ log('ajaxSubmit: skipping submit process - no element selected');
+ return this;
+ }
+
+ if (typeof options == 'function') {
+ options = { success: options };
+ }
+
+ var action = this.attr('action');
+ var url = (typeof action === 'string') ? $.trim(action) : '';
+ if (url) {
+ // clean url (don't include hash vaue)
+ url = (url.match(/^([^#]+)/)||[])[1];
+ }
+ url = url || window.location.href || '';
+
+ options = $.extend(true, {
+ url: url,
+ success: $.ajaxSettings.success,
+ type: this[0].getAttribute('method') || 'GET', // IE7 massage (see issue 57)
+ iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
+ }, options);
+
+ // hook for manipulating the form data before it is extracted;
+ // convenient for use with rich editors like tinyMCE or FCKEditor
+ var veto = {};
+ this.trigger('form-pre-serialize', [this, options, veto]);
+ if (veto.veto) {
+ log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
+ return this;
+ }
+
+ // provide opportunity to alter form data before it is serialized
+ if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
+ log('ajaxSubmit: submit aborted via beforeSerialize callback');
+ return this;
+ }
+
+ var n,v,a = this.formToArray(options.semantic);
+ if (options.data) {
+ options.extraData = options.data;
+ for (n in options.data) {
+ if(options.data[n] instanceof Array) {
+ for (var k in options.data[n]) {
+ a.push( { name: n, value: options.data[n][k] } );
+ }
+ }
+ else {
+ v = options.data[n];
+ v = $.isFunction(v) ? v() : v; // if value is fn, invoke it
+ a.push( { name: n, value: v } );
+ }
+ }
+ }
+
+ // give pre-submit callback an opportunity to abort the submit
+ if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
+ log('ajaxSubmit: submit aborted via beforeSubmit callback');
+ return this;
+ }
+
+ // fire vetoable 'validate' event
+ this.trigger('form-submit-validate', [a, this, options, veto]);
+ if (veto.veto) {
+ log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
+ return this;
+ }
+
+ var q = $.param(a);
+
+ if (options.type.toUpperCase() == 'GET') {
+ options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
+ options.data = null; // data is null for 'get'
+ }
+ else {
+ options.data = q; // data is the query string for 'post'
+ }
+
+ var $form = this, callbacks = [];
+ if (options.resetForm) {
+ callbacks.push(function() { $form.resetForm(); });
+ }
+ if (options.clearForm) {
+ callbacks.push(function() { $form.clearForm(); });
+ }
+
+ // perform a load on the target only if dataType is not provided
+ if (!options.dataType && options.target) {
+ var oldSuccess = options.success || function(){};
+ callbacks.push(function(data) {
+ var fn = options.replaceTarget ? 'replaceWith' : 'html';
+ $(options.target)[fn](data).each(oldSuccess, arguments);
+ });
+ }
+ else if (options.success) {
+ callbacks.push(options.success);
+ }
+
+ options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
+ var context = options.context || options; // jQuery 1.4+ supports scope context
+ for (var i=0, max=callbacks.length; i < max; i++) {
+ callbacks[i].apply(context, [data, status, xhr || $form, $form]);
+ }
+ };
+
+ // are there files to upload?
+ var fileInputs = $('input:file', this).length > 0;
+ var mp = 'multipart/form-data';
+ var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
+
+ // options.iframe allows user to force iframe mode
+ // 06-NOV-09: now defaulting to iframe mode if file input is detected
+ if (options.iframe !== false && (fileInputs || options.iframe || multipart)) {
+ // hack to fix Safari hang (thanks to Tim Molendijk for this)
+ // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
+ if (options.closeKeepAlive) {
+ $.get(options.closeKeepAlive, fileUpload);
+ }
+ else {
+ fileUpload();
+ }
+ }
+ else {
+ $.ajax(options);
+ }
+
+ // fire 'notify' event
+ this.trigger('form-submit-notify', [this, options]);
+ return this;
+
+
+ // private function for handling file uploads (hat tip to YAHOO!)
+ function fileUpload() {
+ var form = $form[0];
+
+ if ($(':input[name=submit],:input[id=submit]', form).length) {
+ // if there is an input with a name or id of 'submit' then we won't be
+ // able to invoke the submit fn on the form (at least not x-browser)
+ alert('Error: Form elements must not have name or id of "submit".');
+ return;
+ }
+
+ var s = $.extend(true, {}, $.ajaxSettings, options);
+ s.context = s.context || s;
+ var id = 'jqFormIO' + (new Date().getTime()), fn = '_'+id;
+ var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ s.iframeSrc +'" />');
+ var io = $io[0];
+
+ $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
+
+ var xhr = { // mock object
+ aborted: 0,
+ responseText: null,
+ responseXML: null,
+ status: 0,
+ statusText: 'n/a',
+ getAllResponseHeaders: function() {},
+ getResponseHeader: function() {},
+ setRequestHeader: function() {},
+ abort: function(status) {
+ var e = (status === 'timeout' ? 'timeout' : 'aborted');
+ log('aborting upload... ' + e);
+ this.aborted = 1;
+ $io.attr('src', s.iframeSrc); // abort op in progress
+ xhr.error = e;
+ s.error && s.error.call(s.context, xhr, e, e);
+ g && $.event.trigger("ajaxError", [xhr, s, e]);
+ s.complete && s.complete.call(s.context, xhr, e);
+ }
+ };
+
+ var g = s.global;
+ // trigger ajax global events so that activity/block indicators work like normal
+ if (g && ! $.active++) {
+ $.event.trigger("ajaxStart");
+ }
+ if (g) {
+ $.event.trigger("ajaxSend", [xhr, s]);
+ }
+
+ if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
+ if (s.global) {
+ $.active--;
+ }
+ return;
+ }
+ if (xhr.aborted) {
+ return;
+ }
+
+ var timedOut = 0, timeoutHandle;
+
+ // add submitting element to data if we know it
+ var sub = form.clk;
+ if (sub) {
+ var n = sub.name;
+ if (n && !sub.disabled) {
+ s.extraData = s.extraData || {};
+ s.extraData[n] = sub.value;
+ if (sub.type == "image") {
+ s.extraData[n+'.x'] = form.clk_x;
+ s.extraData[n+'.y'] = form.clk_y;
+ }
+ }
+ }
+
+ // take a breath so that pending repaints get some cpu time before the upload starts
+ function doSubmit() {
+ // make sure form attrs are set
+ var t = $form.attr('target'), a = $form.attr('action');
+
+ // update form attrs in IE friendly way
+ form.setAttribute('target',id);
+ if (form.getAttribute('method') != 'POST') {
+ form.setAttribute('method', 'POST');
+ }
+ if (form.getAttribute('action') != s.url) {
+ form.setAttribute('action', s.url);
+ }
+
+ // ie borks in some cases when setting encoding
+ if (! s.skipEncodingOverride) {
+ $form.attr({
+ encoding: 'multipart/form-data',
+ enctype: 'multipart/form-data'
+ });
+ }
+
+ // support timout
+ if (s.timeout) {
+ timeoutHandle = setTimeout(function() { timedOut = true; cb(true); }, s.timeout);
+ }
+
+ // add "extra" data to form if provided in options
+ var extraInputs = [];
+ try {
+ if (s.extraData) {
+ for (var n in s.extraData) {
+ extraInputs.push(
+ $('<input type="hidden" name="'+n+'" value="'+s.extraData[n]+'" />')
+ .appendTo(form)[0]);
+ }
+ }
+
+ // add iframe to doc and submit the form
+ $io.appendTo('body');
+ io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
+ form.submit();
+ }
+ finally {
+ // reset attrs and remove "extra" input elements
+ form.setAttribute('action',a);
+ if(t) {
+ form.setAttribute('target', t);
+ } else {
+ $form.removeAttr('target');
+ }
+ $(extraInputs).remove();
+ }
+ }
+
+ if (s.forceSync) {
+ doSubmit();
+ }
+ else {
+ setTimeout(doSubmit, 10); // this lets dom updates render
+ }
+
+ var data, doc, domCheckCount = 50, callbackProcessed;
+
+ function cb(e) {
+ if (xhr.aborted || callbackProcessed) {
+ return;
+ }
+ if (e === true && xhr) {
+ xhr.abort('timeout');
+ return;
+ }
+
+ var doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
+ if (!doc || doc.location.href == s.iframeSrc) {
+ // response not received yet
+ if (!timedOut)
+ return;
+ }
+ io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
+
+ var ok = true;
+ try {
+ if (timedOut) {
+ throw 'timeout';
+ }
+
+ var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
+ log('isXml='+isXml);
+ if (!isXml && window.opera && (doc.body == null || doc.body.innerHTML == '')) {
+ if (--domCheckCount) {
+ // in some browsers (Opera) the iframe DOM is not always traversable when
+ // the onload callback fires, so we loop a bit to accommodate
+ log('requeing onLoad callback, DOM not available');
+ setTimeout(cb, 250);
+ return;
+ }
+ // let this fall through because server response could be an empty document
+ //log('Could not access iframe DOM after mutiple tries.');
+ //throw 'DOMException: not available';
+ }
+
+ //log('response detected');
+ xhr.responseText = doc.body ? doc.body.innerHTML : doc.documentElement ? doc.documentElement.innerHTML : null;
+ xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
+ if (isXml)
+ s.dataType = 'xml';
+ xhr.getResponseHeader = function(header){
+ var headers = {'content-type': s.dataType};
+ return headers[header];
+ };
+
+ var scr = /(json|script|text)/.test(s.dataType);
+ if (scr || s.textarea) {
+ // see if user embedded response in textarea
+ var ta = doc.getElementsByTagName('textarea')[0];
+ if (ta) {
+ xhr.responseText = ta.value;
+ }
+ else if (scr) {
+ // account for browsers injecting pre around json response
+ var pre = doc.getElementsByTagName('pre')[0];
+ var b = doc.getElementsByTagName('body')[0];
+ if (pre) {
+ xhr.responseText = pre.textContent;
+ }
+ else if (b) {
+ xhr.responseText = b.innerHTML;
+ }
+ }
+ }
+ else if (s.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
+ xhr.responseXML = toXml(xhr.responseText);
+ }
+
+ data = httpData(xhr, s.dataType, s);
+ }
+ catch(e){
+ log('error caught:',e);
+ ok = false;
+ xhr.error = e;
+ s.error && s.error.call(s.context, xhr, 'error', e);
+ g && $.event.trigger("ajaxError", [xhr, s, e]);
+ }
+
+ if (xhr.aborted) {
+ log('upload aborted');
+ ok = false;
+ }
+
+ // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
+ if (ok) {
+ s.success && s.success.call(s.context, data, 'success', xhr);
+ g && $.event.trigger("ajaxSuccess", [xhr, s]);
+ }
+
+ g && $.event.trigger("ajaxComplete", [xhr, s]);
+
+ if (g && ! --$.active) {
+ $.event.trigger("ajaxStop");
+ }
+
+ s.complete && s.complete.call(s.context, xhr, ok ? 'success' : 'error');
+
+ callbackProcessed = true;
+ if (s.timeout)
+ clearTimeout(timeoutHandle);
+
+ // clean up
+ setTimeout(function() {
+ $io.removeData('form-plugin-onload');
+ $io.remove();
+ xhr.responseXML = null;
+ }, 100);
+ }
+
+ var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
+ if (window.ActiveXObject) {
+ doc = new ActiveXObject('Microsoft.XMLDOM');
+ doc.async = 'false';
+ doc.loadXML(s);
+ }
+ else {
+ doc = (new DOMParser()).parseFromString(s, 'text/xml');
+ }
+ return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
+ };
+ var parseJSON = $.parseJSON || function(s) {
+ return window['eval']('(' + s + ')');
+ };
+
+ var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
+ var ct = xhr.getResponseHeader('content-type') || '',
+ xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
+ data = xml ? xhr.responseXML : xhr.responseText;
+
+ if (xml && data.documentElement.nodeName === 'parsererror') {
+ $.error && $.error('parsererror');
+ }
+ if (s && s.dataFilter) {
+ data = s.dataFilter(data, type);
+ }
+ if (typeof data === 'string') {
+ if (type === 'json' || !type && ct.indexOf('json') >= 0) {
+ data = parseJSON(data);
+ } else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
+ $.globalEval(data);
+ }
+ }
+ return data;
+ };
+ }
+};
+
+/**
+ * ajaxForm() provides a mechanism for fully automating form submission.
+ *
+ * The advantages of using this method instead of ajaxSubmit() are:
+ *
+ * 1: This method will include coordinates for <input type="image" /> elements (if the element
+ * is used to submit the form).
+ * 2. This method will include the submit element's name/value data (for the element that was
+ * used to submit the form).
+ * 3. This method binds the submit() method to the form for you.
+ *
+ * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
+ * passes the options argument along after properly binding events for submit elements and
+ * the form itself.
+ */
+$.fn.ajaxForm = function(options) {
+ // in jQuery 1.3+ we can fix mistakes with the ready state
+ if (this.length === 0) {
+ var o = { s: this.selector, c: this.context };
+ if (!$.isReady && o.s) {
+ log('DOM not ready, queuing ajaxForm');
+ $(function() {
+ $(o.s,o.c).ajaxForm(options);
+ });
+ return this;
+ }
+ // is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
+ log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
+ return this;
+ }
+
+ return this.ajaxFormUnbind().bind('submit.form-plugin', function(e) {
+ if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
+ e.preventDefault();
+ $(this).ajaxSubmit(options);
+ }
+ }).bind('click.form-plugin', function(e) {
+ var target = e.target;
+ var $el = $(target);
+ if (!($el.is(":submit,input:image"))) {
+ // is this a child element of the submit el? (ex: a span within a button)
+ var t = $el.closest(':submit');
+ if (t.length == 0) {
+ return;
+ }
+ target = t[0];
+ }
+ var form = this;
+ form.clk = target;
+ if (target.type == 'image') {
+ if (e.offsetX != undefined) {
+ form.clk_x = e.offsetX;
+ form.clk_y = e.offsetY;
+ } else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
+ var offset = $el.offset();
+ form.clk_x = e.pageX - offset.left;
+ form.clk_y = e.pageY - offset.top;
+ } else {
+ form.clk_x = e.pageX - target.offsetLeft;
+ form.clk_y = e.pageY - target.offsetTop;
+ }
+ }
+ // clear form vars
+ setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
+ });
+};
+
+// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
+$.fn.ajaxFormUnbind = function() {
+ return this.unbind('submit.form-plugin click.form-plugin');
+};
+
+/**
+ * formToArray() gathers form element data into an array of objects that can
+ * be passed to any of the following ajax functions: $.get, $.post, or load.
+ * Each object in the array has both a 'name' and 'value' property. An example of
+ * an array for a simple login form might be:
+ *
+ * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
+ *
+ * It is this array that is passed to pre-submit callback functions provided to the
+ * ajaxSubmit() and ajaxForm() methods.
+ */
+$.fn.formToArray = function(semantic) {
+ var a = [];
+ if (this.length === 0) {
+ return a;
+ }
+
+ var form = this[0];
+ var els = semantic ? form.getElementsByTagName('*') : form.elements;
+ if (!els) {
+ return a;
+ }
+
+ var i,j,n,v,el,max,jmax;
+ for(i=0, max=els.length; i < max; i++) {
+ el = els[i];
+ n = el.name;
+ if (!n) {
+ continue;
+ }
+
+ if (semantic && form.clk && el.type == "image") {
+ // handle image inputs on the fly when semantic == true
+ if(!el.disabled && form.clk == el) {
+ a.push({name: n, value: $(el).val()});
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ }
+ continue;
+ }
+
+ v = $.fieldValue(el, true);
+ if (v && v.constructor == Array) {
+ for(j=0, jmax=v.length; j < jmax; j++) {
+ a.push({name: n, value: v[j]});
+ }
+ }
+ else if (v !== null && typeof v != 'undefined') {
+ a.push({name: n, value: v});
+ }
+ }
+
+ if (!semantic && form.clk) {
+ // input type=='image' are not found in elements array! handle it here
+ var $input = $(form.clk), input = $input[0];
+ n = input.name;
+ if (n && !input.disabled && input.type == 'image') {
+ a.push({name: n, value: $input.val()});
+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
+ }
+ }
+ return a;
+};
+
+/**
+ * Serializes form data into a 'submittable' string. This method will return a string
+ * in the format: name1=value1&amp;name2=value2
+ */
+$.fn.formSerialize = function(semantic) {
+ //hand off to jQuery.param for proper encoding
+ return $.param(this.formToArray(semantic));
+};
+
+/**
+ * Serializes all field elements in the jQuery object into a query string.
+ * This method will return a string in the format: name1=value1&amp;name2=value2
+ */
+$.fn.fieldSerialize = function(successful) {
+ var a = [];
+ this.each(function() {
+ var n = this.name;
+ if (!n) {
+ return;
+ }
+ var v = $.fieldValue(this, successful);
+ if (v && v.constructor == Array) {
+ for (var i=0,max=v.length; i < max; i++) {
+ a.push({name: n, value: v[i]});
+ }
+ }
+ else if (v !== null && typeof v != 'undefined') {
+ a.push({name: this.name, value: v});
+ }
+ });
+ //hand off to jQuery.param for proper encoding
+ return $.param(a);
+};
+
+/**
+ * Returns the value(s) of the element in the matched set. For example, consider the following form:
+ *
+ * <form><fieldset>
+ * <input name="A" type="text" />
+ * <input name="A" type="text" />
+ * <input name="B" type="checkbox" value="B1" />
+ * <input name="B" type="checkbox" value="B2"/>
+ * <input name="C" type="radio" value="C1" />
+ * <input name="C" type="radio" value="C2" />
+ * </fieldset></form>
+ *
+ * var v = $(':text').fieldValue();
+ * // if no values are entered into the text inputs
+ * v == ['','']
+ * // if values entered into the text inputs are 'foo' and 'bar'
+ * v == ['foo','bar']
+ *
+ * var v = $(':checkbox').fieldValue();
+ * // if neither checkbox is checked
+ * v === undefined
+ * // if both checkboxes are checked
+ * v == ['B1', 'B2']
+ *
+ * var v = $(':radio').fieldValue();
+ * // if neither radio is checked
+ * v === undefined
+ * // if first radio is checked
+ * v == ['C1']
+ *
+ * The successful argument controls whether or not the field element must be 'successful'
+ * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
+ * The default value of the successful argument is true. If this value is false the value(s)
+ * for each element is returned.
+ *
+ * Note: This method *always* returns an array. If no valid value can be determined the
+ * array will be empty, otherwise it will contain one or more values.
+ */
+$.fn.fieldValue = function(successful) {
+ for (var val=[], i=0, max=this.length; i < max; i++) {
+ var el = this[i];
+ var v = $.fieldValue(el, successful);
+ if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
+ continue;
+ }
+ v.constructor == Array ? $.merge(val, v) : val.push(v);
+ }
+ return val;
+};
+
+/**
+ * Returns the value of the field element.
+ */
+$.fieldValue = function(el, successful) {
+ var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
+ if (successful === undefined) {
+ successful = true;
+ }
+
+ if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
+ (t == 'checkbox' || t == 'radio') && !el.checked ||
+ (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
+ tag == 'select' && el.selectedIndex == -1)) {
+ return null;
+ }
+
+ if (tag == 'select') {
+ var index = el.selectedIndex;
+ if (index < 0) {
+ return null;
+ }
+ var a = [], ops = el.options;
+ var one = (t == 'select-one');
+ var max = (one ? index+1 : ops.length);
+ for(var i=(one ? index : 0); i < max; i++) {
+ var op = ops[i];
+ if (op.selected) {
+ var v = op.value;
+ if (!v) { // extra pain for IE...
+ v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
+ }
+ if (one) {
+ return v;
+ }
+ a.push(v);
+ }
+ }
+ return a;
+ }
+ return $(el).val();
+};
+
+/**
+ * Clears the form data. Takes the following actions on the form's input fields:
+ * - input text fields will have their 'value' property set to the empty string
+ * - select elements will have their 'selectedIndex' property set to -1
+ * - checkbox and radio inputs will have their 'checked' property set to false
+ * - inputs of type submit, button, reset, and hidden will *not* be effected
+ * - button elements will *not* be effected
+ */
+$.fn.clearForm = function() {
+ return this.each(function() {
+ $('input,select,textarea', this).clearFields();
+ });
+};
+
+/**
+ * Clears the selected form elements.
+ */
+$.fn.clearFields = $.fn.clearInputs = function() {
+ return this.each(function() {
+ var t = this.type, tag = this.tagName.toLowerCase();
+ if (t == 'text' || t == 'password' || tag == 'textarea') {
+ this.value = '';
+ }
+ else if (t == 'checkbox' || t == 'radio') {
+ this.checked = false;
+ }
+ else if (tag == 'select') {
+ this.selectedIndex = -1;
+ }
+ });
+};
+
+/**
+ * Resets the form data. Causes all form elements to be reset to their original value.
+ */
+$.fn.resetForm = function() {
+ return this.each(function() {
+ // guard against an input with the name of 'reset'
+ // note that IE reports the reset function as an 'object'
+ if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
+ this.reset();
+ }
+ });
+};
+
+/**
+ * Enables or disables any matching elements.
+ */
+$.fn.enable = function(b) {
+ if (b === undefined) {
+ b = true;
+ }
+ return this.each(function() {
+ this.disabled = !b;
+ });
+};
+
+/**
+ * Checks/unchecks any matching checkboxes or radio buttons and
+ * selects/deselects and matching option elements.
+ */
+$.fn.selected = function(select) {
+ if (select === undefined) {
+ select = true;
+ }
+ return this.each(function() {
+ var t = this.type;
+ if (t == 'checkbox' || t == 'radio') {
+ this.checked = select;
+ }
+ else if (this.tagName.toLowerCase() == 'option') {
+ var $sel = $(this).parent('select');
+ if (select && $sel[0] && $sel[0].type == 'select-one') {
+ // deselect all other options
+ $sel.find('option').selected(false);
+ }
+ this.selected = select;
+ }
+ });
+};
+
+// helper fn for console logging
+// set $.fn.ajaxSubmit.debug to true to enable debug logging
+function log() {
+ if ($.fn.ajaxSubmit.debug) {
+ var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
+ if (window.console && window.console.log) {
+ window.console.log(msg);
+ }
+ else if (window.opera && window.opera.postError) {
+ window.opera.postError(msg);
+ }
+ }
+};
+
+})(jQuery);
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/GPL-LICENSE.txt b/vendors/jquery/jquery.imgareaselect-0.9.8/GPL-LICENSE.txt
new file mode 100644
index 000000000..4f3d3e82c
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/GPL-LICENSE.txt
@@ -0,0 +1,278 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/MIT-LICENSE.txt b/vendors/jquery/jquery.imgareaselect-0.9.8/MIT-LICENSE.txt
new file mode 100644
index 000000000..8bbb8d985
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/MIT-LICENSE.txt
@@ -0,0 +1,20 @@
+Copyright (c) 2008-2011 Michal Wojciechowski, http://odyniec.net/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-anim-h.gif b/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-anim-h.gif
new file mode 100644
index 000000000..ec9f5da73
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-anim-h.gif
Binary files differ
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-anim-v.gif b/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-anim-v.gif
new file mode 100644
index 000000000..331cc90b0
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-anim-v.gif
Binary files differ
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-h.gif b/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-h.gif
new file mode 100644
index 000000000..a2aa5b0d0
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-h.gif
Binary files differ
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-v.gif b/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-v.gif
new file mode 100644
index 000000000..4bfd55564
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/css/border-v.gif
Binary files differ
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-animated.css b/vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-animated.css
new file mode 100644
index 000000000..6ec6e101c
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-animated.css
@@ -0,0 +1,41 @@
+/*
+ * imgAreaSelect animated border style
+ */
+
+.imgareaselect-border1 {
+ background: url(border-anim-v.gif) repeat-y left top;
+}
+
+.imgareaselect-border2 {
+ background: url(border-anim-h.gif) repeat-x left top;
+}
+
+.imgareaselect-border3 {
+ background: url(border-anim-v.gif) repeat-y right top;
+}
+
+.imgareaselect-border4 {
+ background: url(border-anim-h.gif) repeat-x left bottom;
+}
+
+.imgareaselect-border1, .imgareaselect-border2,
+.imgareaselect-border3, .imgareaselect-border4 {
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+}
+
+.imgareaselect-handle {
+ background-color: #fff;
+ border: solid 1px #000;
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+}
+
+.imgareaselect-outer {
+ background-color: #000;
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+}
+
+.imgareaselect-selection {
+} \ No newline at end of file
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-default.css b/vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-default.css
new file mode 100644
index 000000000..f4fe34157
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-default.css
@@ -0,0 +1,41 @@
+/*
+ * imgAreaSelect default style
+ */
+
+.imgareaselect-border1 {
+ background: url(border-v.gif) repeat-y left top;
+}
+
+.imgareaselect-border2 {
+ background: url(border-h.gif) repeat-x left top;
+}
+
+.imgareaselect-border3 {
+ background: url(border-v.gif) repeat-y right top;
+}
+
+.imgareaselect-border4 {
+ background: url(border-h.gif) repeat-x left bottom;
+}
+
+.imgareaselect-border1, .imgareaselect-border2,
+.imgareaselect-border3, .imgareaselect-border4 {
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+}
+
+.imgareaselect-handle {
+ background-color: #fff;
+ border: solid 1px #000;
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+}
+
+.imgareaselect-outer {
+ background-color: #000;
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+}
+
+.imgareaselect-selection {
+} \ No newline at end of file
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-deprecated.css b/vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-deprecated.css
new file mode 100644
index 000000000..eaf0ddc17
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/css/imgareaselect-deprecated.css
@@ -0,0 +1,36 @@
+/*
+ * imgAreaSelect style to be used with deprecated options
+ */
+
+.imgareaselect-border1, .imgareaselect-border2,
+.imgareaselect-border3, .imgareaselect-border4 {
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+}
+
+.imgareaselect-border1 {
+ border: solid 1px #000;
+}
+
+.imgareaselect-border2 {
+ border: dashed 1px #fff;
+}
+
+.imgareaselect-handle {
+ background-color: #fff;
+ border: solid 1px #000;
+ filter: alpha(opacity=50);
+ opacity: 0.5;
+}
+
+.imgareaselect-outer {
+ background-color: #000;
+ filter: alpha(opacity=40);
+ opacity: 0.4;
+}
+
+.imgareaselect-selection {
+ background-color: #fff;
+ filter: alpha(opacity=0);
+ opacity: 0;
+}
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.js b/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.js
new file mode 100644
index 000000000..ed27299f6
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.js
@@ -0,0 +1,724 @@
+/*
+ * imgAreaSelect jQuery plugin
+ * version 0.9.8
+ *
+ * Copyright (c) 2008-2011 Michal Wojciechowski (odyniec.net)
+ *
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://odyniec.net/projects/imgareaselect/
+ *
+ */
+
+(function($) {
+
+var abs = Math.abs,
+ max = Math.max,
+ min = Math.min,
+ round = Math.round;
+
+function div() {
+ return $('<div/>');
+}
+
+$.imgAreaSelect = function (img, options) {
+ var
+
+ $img = $(img),
+
+ imgLoaded,
+
+ $box = div(),
+ $area = div(),
+ $border = div().add(div()).add(div()).add(div()),
+ $outer = div().add(div()).add(div()).add(div()),
+ $handles = $([]),
+
+ $areaOpera,
+
+ left, top,
+
+ imgOfs = { left: 0, top: 0 },
+
+ imgWidth, imgHeight,
+
+ $parent,
+
+ parOfs = { left: 0, top: 0 },
+
+ zIndex = 0,
+
+ position = 'absolute',
+
+ startX, startY,
+
+ scaleX, scaleY,
+
+ resize,
+
+ minWidth, minHeight, maxWidth, maxHeight,
+
+ aspectRatio,
+
+ shown,
+
+ x1, y1, x2, y2,
+
+ selection = { x1: 0, y1: 0, x2: 0, y2: 0, width: 0, height: 0 },
+
+ docElem = document.documentElement,
+
+ $p, d, i, o, w, h, adjusted;
+
+ function viewX(x) {
+ return x + imgOfs.left - parOfs.left;
+ }
+
+ function viewY(y) {
+ return y + imgOfs.top - parOfs.top;
+ }
+
+ function selX(x) {
+ return x - imgOfs.left + parOfs.left;
+ }
+
+ function selY(y) {
+ return y - imgOfs.top + parOfs.top;
+ }
+
+ function evX(event) {
+ return event.pageX - parOfs.left;
+ }
+
+ function evY(event) {
+ return event.pageY - parOfs.top;
+ }
+
+ function getSelection(noScale) {
+ var sx = noScale || scaleX, sy = noScale || scaleY;
+
+ return { x1: round(selection.x1 * sx),
+ y1: round(selection.y1 * sy),
+ x2: round(selection.x2 * sx),
+ y2: round(selection.y2 * sy),
+ width: round(selection.x2 * sx) - round(selection.x1 * sx),
+ height: round(selection.y2 * sy) - round(selection.y1 * sy) };
+ }
+
+ function setSelection(x1, y1, x2, y2, noScale) {
+ var sx = noScale || scaleX, sy = noScale || scaleY;
+
+ selection = {
+ x1: round(x1 / sx || 0),
+ y1: round(y1 / sy || 0),
+ x2: round(x2 / sx || 0),
+ y2: round(y2 / sy || 0)
+ };
+
+ selection.width = selection.x2 - selection.x1;
+ selection.height = selection.y2 - selection.y1;
+ }
+
+ function adjust() {
+ if (!$img.width())
+ return;
+
+ imgOfs = { left: round($img.offset().left), top: round($img.offset().top) };
+
+ imgWidth = $img.innerWidth();
+ imgHeight = $img.innerHeight();
+
+ imgOfs.top += ($img.outerHeight() - imgHeight) >> 1;
+ imgOfs.left += ($img.outerWidth() - imgWidth) >> 1;
+
+ minWidth = round(options.minWidth / scaleX) || 0;
+ minHeight = round(options.minHeight / scaleY) || 0;
+ maxWidth = round(min(options.maxWidth / scaleX || 1<<24, imgWidth));
+ maxHeight = round(min(options.maxHeight / scaleY || 1<<24, imgHeight));
+
+ if ($().jquery == '1.3.2' && position == 'fixed' &&
+ !docElem['getBoundingClientRect'])
+ {
+ imgOfs.top += max(document.body.scrollTop, docElem.scrollTop);
+ imgOfs.left += max(document.body.scrollLeft, docElem.scrollLeft);
+ }
+
+ parOfs = /absolute|relative/.test($parent.css('position')) ?
+ { left: round($parent.offset().left) - $parent.scrollLeft(),
+ top: round($parent.offset().top) - $parent.scrollTop() } :
+ position == 'fixed' ?
+ { left: $(document).scrollLeft(), top: $(document).scrollTop() } :
+ { left: 0, top: 0 };
+
+ left = viewX(0);
+ top = viewY(0);
+
+ if (selection.x2 > imgWidth || selection.y2 > imgHeight)
+ doResize();
+ }
+
+ function update(resetKeyPress) {
+ if (!shown) return;
+
+ $box.css({ left: viewX(selection.x1), top: viewY(selection.y1) })
+ .add($area).width(w = selection.width).height(h = selection.height);
+
+ $area.add($border).add($handles).css({ left: 0, top: 0 });
+
+ $border
+ .width(max(w - $border.outerWidth() + $border.innerWidth(), 0))
+ .height(max(h - $border.outerHeight() + $border.innerHeight(), 0));
+
+ $($outer[0]).css({ left: left, top: top,
+ width: selection.x1, height: imgHeight });
+ $($outer[1]).css({ left: left + selection.x1, top: top,
+ width: w, height: selection.y1 });
+ $($outer[2]).css({ left: left + selection.x2, top: top,
+ width: imgWidth - selection.x2, height: imgHeight });
+ $($outer[3]).css({ left: left + selection.x1, top: top + selection.y2,
+ width: w, height: imgHeight - selection.y2 });
+
+ w -= $handles.outerWidth();
+ h -= $handles.outerHeight();
+
+ switch ($handles.length) {
+ case 8:
+ $($handles[4]).css({ left: w >> 1 });
+ $($handles[5]).css({ left: w, top: h >> 1 });
+ $($handles[6]).css({ left: w >> 1, top: h });
+ $($handles[7]).css({ top: h >> 1 });
+ case 4:
+ $handles.slice(1,3).css({ left: w });
+ $handles.slice(2,4).css({ top: h });
+ }
+
+ if (resetKeyPress !== false) {
+ if ($.imgAreaSelect.keyPress != docKeyPress)
+ $(document).unbind($.imgAreaSelect.keyPress,
+ $.imgAreaSelect.onKeyPress);
+
+ if (options.keys)
+ $(document)[$.imgAreaSelect.keyPress](
+ $.imgAreaSelect.onKeyPress = docKeyPress);
+ }
+
+ if ($.browser.msie && $border.outerWidth() - $border.innerWidth() == 2) {
+ $border.css('margin', 0);
+ setTimeout(function () { $border.css('margin', 'auto'); }, 0);
+ }
+ }
+
+ function doUpdate(resetKeyPress) {
+ adjust();
+ update(resetKeyPress);
+ x1 = viewX(selection.x1); y1 = viewY(selection.y1);
+ x2 = viewX(selection.x2); y2 = viewY(selection.y2);
+ }
+
+ function hide($elem, fn) {
+ options.fadeSpeed ? $elem.fadeOut(options.fadeSpeed, fn) : $elem.hide();
+
+ }
+
+ function areaMouseMove(event) {
+ var x = selX(evX(event)) - selection.x1,
+ y = selY(evY(event)) - selection.y1;
+
+ if (!adjusted) {
+ adjust();
+ adjusted = true;
+
+ $box.one('mouseout', function () { adjusted = false; });
+ }
+
+ resize = '';
+
+ if (options.resizable) {
+ if (y <= options.resizeMargin)
+ resize = 'n';
+ else if (y >= selection.height - options.resizeMargin)
+ resize = 's';
+ if (x <= options.resizeMargin)
+ resize += 'w';
+ else if (x >= selection.width - options.resizeMargin)
+ resize += 'e';
+ }
+
+ $box.css('cursor', resize ? resize + '-resize' :
+ options.movable ? 'move' : '');
+ if ($areaOpera)
+ $areaOpera.toggle();
+ }
+
+ function docMouseUp(event) {
+ $('body').css('cursor', '');
+ if (options.autoHide || selection.width * selection.height == 0)
+ hide($box.add($outer), function () { $(this).hide(); });
+
+ $(document).unbind('mousemove', selectingMouseMove);
+ $box.mousemove(areaMouseMove);
+
+ options.onSelectEnd(img, getSelection());
+ }
+
+ function areaMouseDown(event) {
+ if (event.which != 1) return false;
+
+ adjust();
+
+ if (resize) {
+ $('body').css('cursor', resize + '-resize');
+
+ x1 = viewX(selection[/w/.test(resize) ? 'x2' : 'x1']);
+ y1 = viewY(selection[/n/.test(resize) ? 'y2' : 'y1']);
+
+ $(document).mousemove(selectingMouseMove)
+ .one('mouseup', docMouseUp);
+ $box.unbind('mousemove', areaMouseMove);
+ }
+ else if (options.movable) {
+ startX = left + selection.x1 - evX(event);
+ startY = top + selection.y1 - evY(event);
+
+ $box.unbind('mousemove', areaMouseMove);
+
+ $(document).mousemove(movingMouseMove)
+ .one('mouseup', function () {
+ options.onSelectEnd(img, getSelection());
+
+ $(document).unbind('mousemove', movingMouseMove);
+ $box.mousemove(areaMouseMove);
+ });
+ }
+ else
+ $img.mousedown(event);
+
+ return false;
+ }
+
+ function fixAspectRatio(xFirst) {
+ if (aspectRatio)
+ if (xFirst) {
+ x2 = max(left, min(left + imgWidth,
+ x1 + abs(y2 - y1) * aspectRatio * (x2 > x1 || -1)));
+
+ y2 = round(max(top, min(top + imgHeight,
+ y1 + abs(x2 - x1) / aspectRatio * (y2 > y1 || -1))));
+ x2 = round(x2);
+ }
+ else {
+ y2 = max(top, min(top + imgHeight,
+ y1 + abs(x2 - x1) / aspectRatio * (y2 > y1 || -1)));
+ x2 = round(max(left, min(left + imgWidth,
+ x1 + abs(y2 - y1) * aspectRatio * (x2 > x1 || -1))));
+ y2 = round(y2);
+ }
+ }
+
+ function doResize() {
+ x1 = min(x1, left + imgWidth);
+ y1 = min(y1, top + imgHeight);
+
+ if (abs(x2 - x1) < minWidth) {
+ x2 = x1 - minWidth * (x2 < x1 || -1);
+
+ if (x2 < left)
+ x1 = left + minWidth;
+ else if (x2 > left + imgWidth)
+ x1 = left + imgWidth - minWidth;
+ }
+
+ if (abs(y2 - y1) < minHeight) {
+ y2 = y1 - minHeight * (y2 < y1 || -1);
+
+ if (y2 < top)
+ y1 = top + minHeight;
+ else if (y2 > top + imgHeight)
+ y1 = top + imgHeight - minHeight;
+ }
+
+ x2 = max(left, min(x2, left + imgWidth));
+ y2 = max(top, min(y2, top + imgHeight));
+
+ fixAspectRatio(abs(x2 - x1) < abs(y2 - y1) * aspectRatio);
+
+ if (abs(x2 - x1) > maxWidth) {
+ x2 = x1 - maxWidth * (x2 < x1 || -1);
+ fixAspectRatio();
+ }
+
+ if (abs(y2 - y1) > maxHeight) {
+ y2 = y1 - maxHeight * (y2 < y1 || -1);
+ fixAspectRatio(true);
+ }
+
+ selection = { x1: selX(min(x1, x2)), x2: selX(max(x1, x2)),
+ y1: selY(min(y1, y2)), y2: selY(max(y1, y2)),
+ width: abs(x2 - x1), height: abs(y2 - y1) };
+
+ update();
+
+ options.onSelectChange(img, getSelection());
+ }
+
+ function selectingMouseMove(event) {
+ x2 = /w|e|^$/.test(resize) || aspectRatio ? evX(event) : viewX(selection.x2);
+ y2 = /n|s|^$/.test(resize) || aspectRatio ? evY(event) : viewY(selection.y2);
+
+ doResize();
+
+ return false;
+
+ }
+
+ function doMove(newX1, newY1) {
+ x2 = (x1 = newX1) + selection.width;
+ y2 = (y1 = newY1) + selection.height;
+
+ $.extend(selection, { x1: selX(x1), y1: selY(y1), x2: selX(x2),
+ y2: selY(y2) });
+
+ update();
+
+ options.onSelectChange(img, getSelection());
+ }
+
+ function movingMouseMove(event) {
+ x1 = max(left, min(startX + evX(event), left + imgWidth - selection.width));
+ y1 = max(top, min(startY + evY(event), top + imgHeight - selection.height));
+
+ doMove(x1, y1);
+
+ event.preventDefault();
+
+ return false;
+ }
+
+ function startSelection() {
+ $(document).unbind('mousemove', startSelection);
+ adjust();
+
+ x2 = x1;
+ y2 = y1;
+
+ doResize();
+
+ resize = '';
+
+ if (!$outer.is(':visible'))
+ $box.add($outer).hide().fadeIn(options.fadeSpeed||0);
+
+ shown = true;
+
+ $(document).unbind('mouseup', cancelSelection)
+ .mousemove(selectingMouseMove).one('mouseup', docMouseUp);
+ $box.unbind('mousemove', areaMouseMove);
+
+ options.onSelectStart(img, getSelection());
+ }
+
+ function cancelSelection() {
+ $(document).unbind('mousemove', startSelection)
+ .unbind('mouseup', cancelSelection);
+ hide($box.add($outer));
+
+ setSelection(selX(x1), selY(y1), selX(x1), selY(y1));
+
+ if (!this instanceof $.imgAreaSelect) {
+ options.onSelectChange(img, getSelection());
+ options.onSelectEnd(img, getSelection());
+ }
+ }
+
+ function imgMouseDown(event) {
+ if (event.which != 1 || $outer.is(':animated')) return false;
+
+ adjust();
+ startX = x1 = evX(event);
+ startY = y1 = evY(event);
+
+ $(document).mousemove(startSelection).mouseup(cancelSelection);
+
+ return false;
+ }
+
+ function windowResize() {
+ doUpdate(false);
+ }
+
+ function imgLoad() {
+ imgLoaded = true;
+
+ setOptions(options = $.extend({
+ classPrefix: 'imgareaselect',
+ movable: true,
+ parent: 'body',
+ resizable: true,
+ resizeMargin: 10,
+ onInit: function () {},
+ onSelectStart: function () {},
+ onSelectChange: function () {},
+ onSelectEnd: function () {}
+ }, options));
+
+ $box.add($outer).css({ visibility: '' });
+
+ if (options.show) {
+ shown = true;
+ adjust();
+ update();
+ $box.add($outer).hide().fadeIn(options.fadeSpeed||0);
+ }
+
+ setTimeout(function () { options.onInit(img, getSelection()); }, 0);
+ }
+
+ var docKeyPress = function(event) {
+ var k = options.keys, d, t, key = event.keyCode;
+
+ d = !isNaN(k.alt) && (event.altKey || event.originalEvent.altKey) ? k.alt :
+ !isNaN(k.ctrl) && event.ctrlKey ? k.ctrl :
+ !isNaN(k.shift) && event.shiftKey ? k.shift :
+ !isNaN(k.arrows) ? k.arrows : 10;
+
+ if (k.arrows == 'resize' || (k.shift == 'resize' && event.shiftKey) ||
+ (k.ctrl == 'resize' && event.ctrlKey) ||
+ (k.alt == 'resize' && (event.altKey || event.originalEvent.altKey)))
+ {
+ switch (key) {
+ case 37:
+ d = -d;
+ case 39:
+ t = max(x1, x2);
+ x1 = min(x1, x2);
+ x2 = max(t + d, x1);
+ fixAspectRatio();
+ break;
+ case 38:
+ d = -d;
+ case 40:
+ t = max(y1, y2);
+ y1 = min(y1, y2);
+ y2 = max(t + d, y1);
+ fixAspectRatio(true);
+ break;
+ default:
+ return;
+ }
+
+ doResize();
+ }
+ else {
+ x1 = min(x1, x2);
+ y1 = min(y1, y2);
+
+ switch (key) {
+ case 37:
+ doMove(max(x1 - d, left), y1);
+ break;
+ case 38:
+ doMove(x1, max(y1 - d, top));
+ break;
+ case 39:
+ doMove(x1 + min(d, imgWidth - selX(x2)), y1);
+ break;
+ case 40:
+ doMove(x1, y1 + min(d, imgHeight - selY(y2)));
+ break;
+ default:
+ return;
+ }
+ }
+
+ return false;
+ };
+
+ function styleOptions($elem, props) {
+ for (option in props)
+ if (options[option] !== undefined)
+ $elem.css(props[option], options[option]);
+ }
+
+ function setOptions(newOptions) {
+ if (newOptions.parent)
+ ($parent = $(newOptions.parent)).append($box.add($outer));
+
+ $.extend(options, newOptions);
+
+ adjust();
+
+ if (newOptions.handles != null) {
+ $handles.remove();
+ $handles = $([]);
+
+ i = newOptions.handles ? newOptions.handles == 'corners' ? 4 : 8 : 0;
+
+ while (i--)
+ $handles = $handles.add(div());
+
+ $handles.addClass(options.classPrefix + '-handle').css({
+ position: 'absolute',
+ fontSize: 0,
+ zIndex: zIndex + 1 || 1
+ });
+
+ if (!parseInt($handles.css('width')) >= 0)
+ $handles.width(5).height(5);
+
+ if (o = options.borderWidth)
+ $handles.css({ borderWidth: o, borderStyle: 'solid' });
+
+ styleOptions($handles, { borderColor1: 'border-color',
+ borderColor2: 'background-color',
+ borderOpacity: 'opacity' });
+ }
+
+ scaleX = options.imageWidth / imgWidth || 1;
+ scaleY = options.imageHeight / imgHeight || 1;
+
+ if (newOptions.x1 != null) {
+ setSelection(newOptions.x1, newOptions.y1, newOptions.x2,
+ newOptions.y2);
+ newOptions.show = !newOptions.hide;
+ }
+
+ if (newOptions.keys)
+ options.keys = $.extend({ shift: 1, ctrl: 'resize' },
+ newOptions.keys);
+
+ $outer.addClass(options.classPrefix + '-outer');
+ $area.addClass(options.classPrefix + '-selection');
+ for (i = 0; i++ < 4;)
+ $($border[i-1]).addClass(options.classPrefix + '-border' + i);
+
+ styleOptions($area, { selectionColor: 'background-color',
+ selectionOpacity: 'opacity' });
+ styleOptions($border, { borderOpacity: 'opacity',
+ borderWidth: 'border-width' });
+ styleOptions($outer, { outerColor: 'background-color',
+ outerOpacity: 'opacity' });
+ if (o = options.borderColor1)
+ $($border[0]).css({ borderStyle: 'solid', borderColor: o });
+ if (o = options.borderColor2)
+ $($border[1]).css({ borderStyle: 'dashed', borderColor: o });
+
+ $box.append($area.add($border).add($areaOpera).add($handles));
+
+ if ($.browser.msie) {
+ if (o = $outer.css('filter').match(/opacity=(\d+)/))
+ $outer.css('opacity', o[1]/100);
+ if (o = $border.css('filter').match(/opacity=(\d+)/))
+ $border.css('opacity', o[1]/100);
+ }
+
+ if (newOptions.hide)
+ hide($box.add($outer));
+ else if (newOptions.show && imgLoaded) {
+ shown = true;
+ $box.add($outer).fadeIn(options.fadeSpeed||0);
+ doUpdate();
+ }
+
+ aspectRatio = (d = (options.aspectRatio || '').split(/:/))[0] / d[1];
+
+ $img.add($outer).unbind('mousedown', imgMouseDown);
+
+ if (options.disable || options.enable === false) {
+ $box.unbind('mousemove', areaMouseMove).unbind('mousedown', areaMouseDown);
+ $(window).unbind('resize', windowResize);
+ }
+ else {
+ if (options.enable || options.disable === false) {
+ if (options.resizable || options.movable)
+ $box.mousemove(areaMouseMove).mousedown(areaMouseDown);
+
+ $(window).resize(windowResize);
+ }
+
+ if (!options.persistent)
+ $img.add($outer).mousedown(imgMouseDown);
+ }
+
+ options.enable = options.disable = undefined;
+ }
+
+ this.remove = function () {
+ setOptions({ disable: true });
+ $box.add($outer).remove();
+ };
+
+ this.getOptions = function () { return options; };
+
+ this.setOptions = setOptions;
+
+ this.getSelection = getSelection;
+
+ this.setSelection = setSelection;
+
+ this.cancelSelection = cancelSelection;
+
+ this.update = doUpdate;
+
+ $p = $img;
+
+ while ($p.length) {
+ zIndex = max(zIndex,
+ !isNaN($p.css('z-index')) ? $p.css('z-index') : zIndex);
+ if ($p.css('position') == 'fixed')
+ position = 'fixed';
+
+ $p = $p.parent(':not(body)');
+ }
+
+ zIndex = options.zIndex || zIndex;
+
+ if ($.browser.msie)
+ $img.attr('unselectable', 'on');
+
+ $.imgAreaSelect.keyPress = $.browser.msie ||
+ $.browser.safari ? 'keydown' : 'keypress';
+
+ if ($.browser.opera)
+ $areaOpera = div().css({ width: '100%', height: '100%',
+ position: 'absolute', zIndex: zIndex + 2 || 2 });
+
+ $box.add($outer).css({ visibility: 'hidden', position: position,
+ overflow: 'hidden', zIndex: zIndex || '0' });
+ $box.css({ zIndex: zIndex + 2 || 2 });
+ $area.add($border).css({ position: 'absolute', fontSize: 0 });
+
+ img.complete || img.readyState == 'complete' || !$img.is('img') ?
+ imgLoad() : $img.one('load', imgLoad);
+
+ if ($.browser.msie && $.browser.version >= 7)
+ img.src = img.src;
+};
+
+$.fn.imgAreaSelect = function (options) {
+ options = options || {};
+
+ this.each(function () {
+ if ($(this).data('imgAreaSelect')) {
+ if (options.remove) {
+ $(this).data('imgAreaSelect').remove();
+ $(this).removeData('imgAreaSelect');
+ }
+ else
+ $(this).data('imgAreaSelect').setOptions(options);
+ }
+ else if (!options.remove) {
+ if (options.enable === undefined && options.disable === undefined)
+ options.enable = true;
+
+ $(this).data('imgAreaSelect', new $.imgAreaSelect(this, options));
+ }
+ });
+
+ if (options.instance)
+ return $(this).data('imgAreaSelect');
+
+ return this;
+};
+
+})(jQuery);
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.min.js b/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.min.js
new file mode 100644
index 000000000..25c5b404c
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.min.js
@@ -0,0 +1 @@
+(function($){var abs=Math.abs,max=Math.max,min=Math.min,round=Math.round;function div(){return $('<div/>')}$.imgAreaSelect=function(img,options){var $img=$(img),imgLoaded,$box=div(),$area=div(),$border=div().add(div()).add(div()).add(div()),$outer=div().add(div()).add(div()).add(div()),$handles=$([]),$areaOpera,left,top,imgOfs={left:0,top:0},imgWidth,imgHeight,$parent,parOfs={left:0,top:0},zIndex=0,position='absolute',startX,startY,scaleX,scaleY,resize,minWidth,minHeight,maxWidth,maxHeight,aspectRatio,shown,x1,y1,x2,y2,selection={x1:0,y1:0,x2:0,y2:0,width:0,height:0},docElem=document.documentElement,$p,d,i,o,w,h,adjusted;function viewX(x){return x+imgOfs.left-parOfs.left}function viewY(y){return y+imgOfs.top-parOfs.top}function selX(x){return x-imgOfs.left+parOfs.left}function selY(y){return y-imgOfs.top+parOfs.top}function evX(event){return event.pageX-parOfs.left}function evY(event){return event.pageY-parOfs.top}function getSelection(noScale){var sx=noScale||scaleX,sy=noScale||scaleY;return{x1:round(selection.x1*sx),y1:round(selection.y1*sy),x2:round(selection.x2*sx),y2:round(selection.y2*sy),width:round(selection.x2*sx)-round(selection.x1*sx),height:round(selection.y2*sy)-round(selection.y1*sy)}}function setSelection(x1,y1,x2,y2,noScale){var sx=noScale||scaleX,sy=noScale||scaleY;selection={x1:round(x1/sx||0),y1:round(y1/sy||0),x2:round(x2/sx||0),y2:round(y2/sy||0)};selection.width=selection.x2-selection.x1;selection.height=selection.y2-selection.y1}function adjust(){if(!$img.width())return;imgOfs={left:round($img.offset().left),top:round($img.offset().top)};imgWidth=$img.innerWidth();imgHeight=$img.innerHeight();imgOfs.top+=($img.outerHeight()-imgHeight)>>1;imgOfs.left+=($img.outerWidth()-imgWidth)>>1;minWidth=round(options.minWidth/scaleX)||0;minHeight=round(options.minHeight/scaleY)||0;maxWidth=round(min(options.maxWidth/scaleX||1<<24,imgWidth));maxHeight=round(min(options.maxHeight/scaleY||1<<24,imgHeight));if($().jquery=='1.3.2'&&position=='fixed'&&!docElem['getBoundingClientRect']){imgOfs.top+=max(document.body.scrollTop,docElem.scrollTop);imgOfs.left+=max(document.body.scrollLeft,docElem.scrollLeft)}parOfs=/absolute|relative/.test($parent.css('position'))?{left:round($parent.offset().left)-$parent.scrollLeft(),top:round($parent.offset().top)-$parent.scrollTop()}:position=='fixed'?{left:$(document).scrollLeft(),top:$(document).scrollTop()}:{left:0,top:0};left=viewX(0);top=viewY(0);if(selection.x2>imgWidth||selection.y2>imgHeight)doResize()}function update(resetKeyPress){if(!shown)return;$box.css({left:viewX(selection.x1),top:viewY(selection.y1)}).add($area).width(w=selection.width).height(h=selection.height);$area.add($border).add($handles).css({left:0,top:0});$border.width(max(w-$border.outerWidth()+$border.innerWidth(),0)).height(max(h-$border.outerHeight()+$border.innerHeight(),0));$($outer[0]).css({left:left,top:top,width:selection.x1,height:imgHeight});$($outer[1]).css({left:left+selection.x1,top:top,width:w,height:selection.y1});$($outer[2]).css({left:left+selection.x2,top:top,width:imgWidth-selection.x2,height:imgHeight});$($outer[3]).css({left:left+selection.x1,top:top+selection.y2,width:w,height:imgHeight-selection.y2});w-=$handles.outerWidth();h-=$handles.outerHeight();switch($handles.length){case 8:$($handles[4]).css({left:w>>1});$($handles[5]).css({left:w,top:h>>1});$($handles[6]).css({left:w>>1,top:h});$($handles[7]).css({top:h>>1});case 4:$handles.slice(1,3).css({left:w});$handles.slice(2,4).css({top:h})}if(resetKeyPress!==false){if($.imgAreaSelect.keyPress!=docKeyPress)$(document).unbind($.imgAreaSelect.keyPress,$.imgAreaSelect.onKeyPress);if(options.keys)$(document)[$.imgAreaSelect.keyPress]($.imgAreaSelect.onKeyPress=docKeyPress)}if($.browser.msie&&$border.outerWidth()-$border.innerWidth()==2){$border.css('margin',0);setTimeout(function(){$border.css('margin','auto')},0)}}function doUpdate(resetKeyPress){adjust();update(resetKeyPress);x1=viewX(selection.x1);y1=viewY(selection.y1);x2=viewX(selection.x2);y2=viewY(selection.y2)}function hide($elem,fn){options.fadeSpeed?$elem.fadeOut(options.fadeSpeed,fn):$elem.hide()}function areaMouseMove(event){var x=selX(evX(event))-selection.x1,y=selY(evY(event))-selection.y1;if(!adjusted){adjust();adjusted=true;$box.one('mouseout',function(){adjusted=false})}resize='';if(options.resizable){if(y<=options.resizeMargin)resize='n';else if(y>=selection.height-options.resizeMargin)resize='s';if(x<=options.resizeMargin)resize+='w';else if(x>=selection.width-options.resizeMargin)resize+='e'}$box.css('cursor',resize?resize+'-resize':options.movable?'move':'');if($areaOpera)$areaOpera.toggle()}function docMouseUp(event){$('body').css('cursor','');if(options.autoHide||selection.width*selection.height==0)hide($box.add($outer),function(){$(this).hide()});$(document).unbind('mousemove',selectingMouseMove);$box.mousemove(areaMouseMove);options.onSelectEnd(img,getSelection())}function areaMouseDown(event){if(event.which!=1)return false;adjust();if(resize){$('body').css('cursor',resize+'-resize');x1=viewX(selection[/w/.test(resize)?'x2':'x1']);y1=viewY(selection[/n/.test(resize)?'y2':'y1']);$(document).mousemove(selectingMouseMove).one('mouseup',docMouseUp);$box.unbind('mousemove',areaMouseMove)}else if(options.movable){startX=left+selection.x1-evX(event);startY=top+selection.y1-evY(event);$box.unbind('mousemove',areaMouseMove);$(document).mousemove(movingMouseMove).one('mouseup',function(){options.onSelectEnd(img,getSelection());$(document).unbind('mousemove',movingMouseMove);$box.mousemove(areaMouseMove)})}else $img.mousedown(event);return false}function fixAspectRatio(xFirst){if(aspectRatio)if(xFirst){x2=max(left,min(left+imgWidth,x1+abs(y2-y1)*aspectRatio*(x2>x1||-1)));y2=round(max(top,min(top+imgHeight,y1+abs(x2-x1)/aspectRatio*(y2>y1||-1))));x2=round(x2)}else{y2=max(top,min(top+imgHeight,y1+abs(x2-x1)/aspectRatio*(y2>y1||-1)));x2=round(max(left,min(left+imgWidth,x1+abs(y2-y1)*aspectRatio*(x2>x1||-1))));y2=round(y2)}}function doResize(){x1=min(x1,left+imgWidth);y1=min(y1,top+imgHeight);if(abs(x2-x1)<minWidth){x2=x1-minWidth*(x2<x1||-1);if(x2<left)x1=left+minWidth;else if(x2>left+imgWidth)x1=left+imgWidth-minWidth}if(abs(y2-y1)<minHeight){y2=y1-minHeight*(y2<y1||-1);if(y2<top)y1=top+minHeight;else if(y2>top+imgHeight)y1=top+imgHeight-minHeight}x2=max(left,min(x2,left+imgWidth));y2=max(top,min(y2,top+imgHeight));fixAspectRatio(abs(x2-x1)<abs(y2-y1)*aspectRatio);if(abs(x2-x1)>maxWidth){x2=x1-maxWidth*(x2<x1||-1);fixAspectRatio()}if(abs(y2-y1)>maxHeight){y2=y1-maxHeight*(y2<y1||-1);fixAspectRatio(true)}selection={x1:selX(min(x1,x2)),x2:selX(max(x1,x2)),y1:selY(min(y1,y2)),y2:selY(max(y1,y2)),width:abs(x2-x1),height:abs(y2-y1)};update();options.onSelectChange(img,getSelection())}function selectingMouseMove(event){x2=/w|e|^$/.test(resize)||aspectRatio?evX(event):viewX(selection.x2);y2=/n|s|^$/.test(resize)||aspectRatio?evY(event):viewY(selection.y2);doResize();return false}function doMove(newX1,newY1){x2=(x1=newX1)+selection.width;y2=(y1=newY1)+selection.height;$.extend(selection,{x1:selX(x1),y1:selY(y1),x2:selX(x2),y2:selY(y2)});update();options.onSelectChange(img,getSelection())}function movingMouseMove(event){x1=max(left,min(startX+evX(event),left+imgWidth-selection.width));y1=max(top,min(startY+evY(event),top+imgHeight-selection.height));doMove(x1,y1);event.preventDefault();return false}function startSelection(){$(document).unbind('mousemove',startSelection);adjust();x2=x1;y2=y1;doResize();resize='';if(!$outer.is(':visible'))$box.add($outer).hide().fadeIn(options.fadeSpeed||0);shown=true;$(document).unbind('mouseup',cancelSelection).mousemove(selectingMouseMove).one('mouseup',docMouseUp);$box.unbind('mousemove',areaMouseMove);options.onSelectStart(img,getSelection())}function cancelSelection(){$(document).unbind('mousemove',startSelection).unbind('mouseup',cancelSelection);hide($box.add($outer));setSelection(selX(x1),selY(y1),selX(x1),selY(y1));if(!this instanceof $.imgAreaSelect){options.onSelectChange(img,getSelection());options.onSelectEnd(img,getSelection())}}function imgMouseDown(event){if(event.which!=1||$outer.is(':animated'))return false;adjust();startX=x1=evX(event);startY=y1=evY(event);$(document).mousemove(startSelection).mouseup(cancelSelection);return false}function windowResize(){doUpdate(false)}function imgLoad(){imgLoaded=true;setOptions(options=$.extend({classPrefix:'imgareaselect',movable:true,parent:'body',resizable:true,resizeMargin:10,onInit:function(){},onSelectStart:function(){},onSelectChange:function(){},onSelectEnd:function(){}},options));$box.add($outer).css({visibility:''});if(options.show){shown=true;adjust();update();$box.add($outer).hide().fadeIn(options.fadeSpeed||0)}setTimeout(function(){options.onInit(img,getSelection())},0)}var docKeyPress=function(event){var k=options.keys,d,t,key=event.keyCode;d=!isNaN(k.alt)&&(event.altKey||event.originalEvent.altKey)?k.alt:!isNaN(k.ctrl)&&event.ctrlKey?k.ctrl:!isNaN(k.shift)&&event.shiftKey?k.shift:!isNaN(k.arrows)?k.arrows:10;if(k.arrows=='resize'||(k.shift=='resize'&&event.shiftKey)||(k.ctrl=='resize'&&event.ctrlKey)||(k.alt=='resize'&&(event.altKey||event.originalEvent.altKey))){switch(key){case 37:d=-d;case 39:t=max(x1,x2);x1=min(x1,x2);x2=max(t+d,x1);fixAspectRatio();break;case 38:d=-d;case 40:t=max(y1,y2);y1=min(y1,y2);y2=max(t+d,y1);fixAspectRatio(true);break;default:return}doResize()}else{x1=min(x1,x2);y1=min(y1,y2);switch(key){case 37:doMove(max(x1-d,left),y1);break;case 38:doMove(x1,max(y1-d,top));break;case 39:doMove(x1+min(d,imgWidth-selX(x2)),y1);break;case 40:doMove(x1,y1+min(d,imgHeight-selY(y2)));break;default:return}}return false};function styleOptions($elem,props){for(option in props)if(options[option]!==undefined)$elem.css(props[option],options[option])}function setOptions(newOptions){if(newOptions.parent)($parent=$(newOptions.parent)).append($box.add($outer));$.extend(options,newOptions);adjust();if(newOptions.handles!=null){$handles.remove();$handles=$([]);i=newOptions.handles?newOptions.handles=='corners'?4:8:0;while(i--)$handles=$handles.add(div());$handles.addClass(options.classPrefix+'-handle').css({position:'absolute',fontSize:0,zIndex:zIndex+1||1});if(!parseInt($handles.css('width'))>=0)$handles.width(5).height(5);if(o=options.borderWidth)$handles.css({borderWidth:o,borderStyle:'solid'});styleOptions($handles,{borderColor1:'border-color',borderColor2:'background-color',borderOpacity:'opacity'})}scaleX=options.imageWidth/imgWidth||1;scaleY=options.imageHeight/imgHeight||1;if(newOptions.x1!=null){setSelection(newOptions.x1,newOptions.y1,newOptions.x2,newOptions.y2);newOptions.show=!newOptions.hide}if(newOptions.keys)options.keys=$.extend({shift:1,ctrl:'resize'},newOptions.keys);$outer.addClass(options.classPrefix+'-outer');$area.addClass(options.classPrefix+'-selection');for(i=0;i++<4;)$($border[i-1]).addClass(options.classPrefix+'-border'+i);styleOptions($area,{selectionColor:'background-color',selectionOpacity:'opacity'});styleOptions($border,{borderOpacity:'opacity',borderWidth:'border-width'});styleOptions($outer,{outerColor:'background-color',outerOpacity:'opacity'});if(o=options.borderColor1)$($border[0]).css({borderStyle:'solid',borderColor:o});if(o=options.borderColor2)$($border[1]).css({borderStyle:'dashed',borderColor:o});$box.append($area.add($border).add($areaOpera).add($handles));if($.browser.msie){if(o=$outer.css('filter').match(/opacity=(\d+)/))$outer.css('opacity',o[1]/100);if(o=$border.css('filter').match(/opacity=(\d+)/))$border.css('opacity',o[1]/100)}if(newOptions.hide)hide($box.add($outer));else if(newOptions.show&&imgLoaded){shown=true;$box.add($outer).fadeIn(options.fadeSpeed||0);doUpdate()}aspectRatio=(d=(options.aspectRatio||'').split(/:/))[0]/d[1];$img.add($outer).unbind('mousedown',imgMouseDown);if(options.disable||options.enable===false){$box.unbind('mousemove',areaMouseMove).unbind('mousedown',areaMouseDown);$(window).unbind('resize',windowResize)}else{if(options.enable||options.disable===false){if(options.resizable||options.movable)$box.mousemove(areaMouseMove).mousedown(areaMouseDown);$(window).resize(windowResize)}if(!options.persistent)$img.add($outer).mousedown(imgMouseDown)}options.enable=options.disable=undefined}this.remove=function(){setOptions({disable:true});$box.add($outer).remove()};this.getOptions=function(){return options};this.setOptions=setOptions;this.getSelection=getSelection;this.setSelection=setSelection;this.cancelSelection=cancelSelection;this.update=doUpdate;$p=$img;while($p.length){zIndex=max(zIndex,!isNaN($p.css('z-index'))?$p.css('z-index'):zIndex);if($p.css('position')=='fixed')position='fixed';$p=$p.parent(':not(body)')}zIndex=options.zIndex||zIndex;if($.browser.msie)$img.attr('unselectable','on');$.imgAreaSelect.keyPress=$.browser.msie||$.browser.safari?'keydown':'keypress';if($.browser.opera)$areaOpera=div().css({width:'100%',height:'100%',position:'absolute',zIndex:zIndex+2||2});$box.add($outer).css({visibility:'hidden',position:position,overflow:'hidden',zIndex:zIndex||'0'});$box.css({zIndex:zIndex+2||2});$area.add($border).css({position:'absolute',fontSize:0});img.complete||img.readyState=='complete'||!$img.is('img')?imgLoad():$img.one('load',imgLoad);if($.browser.msie&&$.browser.version>=7)img.src=img.src};$.fn.imgAreaSelect=function(options){options=options||{};this.each(function(){if($(this).data('imgAreaSelect')){if(options.remove){$(this).data('imgAreaSelect').remove();$(this).removeData('imgAreaSelect')}else $(this).data('imgAreaSelect').setOptions(options)}else if(!options.remove){if(options.enable===undefined&&options.disable===undefined)options.enable=true;$(this).data('imgAreaSelect',new $.imgAreaSelect(this,options))}});if(options.instance)return $(this).data('imgAreaSelect');return this}})(jQuery); \ No newline at end of file
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.pack.js b/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.pack.js
new file mode 100644
index 000000000..08f20465f
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.imgareaselect.pack.js
@@ -0,0 +1 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(m($){1k W=2v.4N,D=2v.4M,F=2v.4L,u=2v.4K;m V(){C $("<4J/>")};$.N=m(T,c){1k O=$(T),2E,A=V(),1i=V(),I=V().r(V()).r(V()).r(V()),B=V().r(V()).r(V()).r(V()),E=$([]),1J,G,l,17={v:0,l:0},Q,M,1j,1f={v:0,l:0},12=0,1I="1G",2k,2j,1s,1r,S,1A,1z,2o,2n,14,1O,a,b,j,g,f={a:0,b:0,j:0,g:0,H:0,L:0},2u=R.4I,$p,d,i,o,w,h,2p;m 1m(x){C x+17.v-1f.v};m 1l(y){C y+17.l-1f.l};m 1a(x){C x-17.v+1f.v};m 19(y){C y-17.l+1f.l};m 1y(3H){C 3H.4H-1f.v};m 1x(3G){C 3G.4G-1f.l};m 13(30){1k 1h=30||1s,1g=30||1r;C{a:u(f.a*1h),b:u(f.b*1g),j:u(f.j*1h),g:u(f.g*1g),H:u(f.j*1h)-u(f.a*1h),L:u(f.g*1g)-u(f.b*1g)}};m 23(a,b,j,g,2Z){1k 1h=2Z||1s,1g=2Z||1r;f={a:u(a/1h||0),b:u(b/1g||0),j:u(j/1h||0),g:u(g/1g||0)};f.H=f.j-f.a;f.L=f.g-f.b};m 1e(){9(!O.H()){C}17={v:u(O.2t().v),l:u(O.2t().l)};Q=O.2X();M=O.3F();17.l+=(O.2Y()-M)>>1;17.v+=(O.2q()-Q)>>1;1A=u(c.4F/1s)||0;1z=u(c.4E/1r)||0;2o=u(F(c.4D/1s||1<<24,Q));2n=u(F(c.4C/1r||1<<24,M));9($().4B=="1.3.2"&&1I=="21"&&!2u["4A"]){17.l+=D(R.1p.2r,2u.2r);17.v+=D(R.1p.2s,2u.2s)}1f=/1G|4z/.1V(1j.q("1o"))?{v:u(1j.2t().v)-1j.2s(),l:u(1j.2t().l)-1j.2r()}:1I=="21"?{v:$(R).2s(),l:$(R).2r()}:{v:0,l:0};G=1m(0);l=1l(0);9(f.j>Q||f.g>M){1S()}};m 1T(3D){9(!1O){C}A.q({v:1m(f.a),l:1l(f.b)}).r(1i).H(w=f.H).L(h=f.L);1i.r(I).r(E).q({v:0,l:0});I.H(D(w-I.2q()+I.2X(),0)).L(D(h-I.2Y()+I.3F(),0));$(B[0]).q({v:G,l:l,H:f.a,L:M});$(B[1]).q({v:G+f.a,l:l,H:w,L:f.b});$(B[2]).q({v:G+f.j,l:l,H:Q-f.j,L:M});$(B[3]).q({v:G+f.a,l:l+f.g,H:w,L:M-f.g});w-=E.2q();h-=E.2Y();2N(E.3b){15 8:$(E[4]).q({v:w>>1});$(E[5]).q({v:w,l:h>>1});$(E[6]).q({v:w>>1,l:h});$(E[7]).q({l:h>>1});15 4:E.3E(1,3).q({v:w});E.3E(2,4).q({l:h})}9(3D!==Y){9($.N.1Z!=2Q){$(R).U($.N.1Z,$.N.3C)}9(c.1R){$(R)[$.N.1Z]($.N.3C=2Q)}}9($.1b.1E&&I.2q()-I.2X()==2){I.q("3B",0);3u(m(){I.q("3B","4y")},0)}};m 22(3A){1e();1T(3A);a=1m(f.a);b=1l(f.b);j=1m(f.j);g=1l(f.g)};m 27(2W,2w){c.1N?2W.4x(c.1N,2w):2W.1q()};m 1c(2V){1k x=1a(1y(2V))-f.a,y=19(1x(2V))-f.b;9(!2p){1e();2p=11;A.1F("4w",m(){2p=Y})}S="";9(c.2C){9(y<=c.1U){S="n"}X{9(y>=f.L-c.1U){S="s"}}9(x<=c.1U){S+="w"}X{9(x>=f.H-c.1U){S+="e"}}}A.q("2U",S?S+"-18":c.26?"4v":"");9(1J){1J.4u()}};m 2R(4t){$("1p").q("2U","");9(c.4s||f.H*f.L==0){27(A.r(B),m(){$(J).1q()})}$(R).U("P",2l);A.P(1c);c.2f(T,13())};m 2B(1W){9(1W.3w!=1){C Y}1e();9(S){$("1p").q("2U",S+"-18");a=1m(f[/w/.1V(S)?"j":"a"]);b=1l(f[/n/.1V(S)?"g":"b"]);$(R).P(2l).1F("1w",2R);A.U("P",1c)}X{9(c.26){2k=G+f.a-1y(1W);2j=l+f.b-1x(1W);A.U("P",1c);$(R).P(2S).1F("1w",m(){c.2f(T,13());$(R).U("P",2S);A.P(1c)})}X{O.1M(1W)}}C Y};m 1v(3z){9(14){9(3z){j=D(G,F(G+Q,a+W(g-b)*14*(j>a||-1)));g=u(D(l,F(l+M,b+W(j-a)/14*(g>b||-1))));j=u(j)}X{g=D(l,F(l+M,b+W(j-a)/14*(g>b||-1)));j=u(D(G,F(G+Q,a+W(g-b)*14*(j>a||-1))));g=u(g)}}};m 1S(){a=F(a,G+Q);b=F(b,l+M);9(W(j-a)<1A){j=a-1A*(j<a||-1);9(j<G){a=G+1A}X{9(j>G+Q){a=G+Q-1A}}}9(W(g-b)<1z){g=b-1z*(g<b||-1);9(g<l){b=l+1z}X{9(g>l+M){b=l+M-1z}}}j=D(G,F(j,G+Q));g=D(l,F(g,l+M));1v(W(j-a)<W(g-b)*14);9(W(j-a)>2o){j=a-2o*(j<a||-1);1v()}9(W(g-b)>2n){g=b-2n*(g<b||-1);1v(11)}f={a:1a(F(a,j)),j:1a(D(a,j)),b:19(F(b,g)),g:19(D(b,g)),H:W(j-a),L:W(g-b)};1T();c.2g(T,13())};m 2l(2T){j=/w|e|^$/.1V(S)||14?1y(2T):1m(f.j);g=/n|s|^$/.1V(S)||14?1x(2T):1l(f.g);1S();C Y};m 1u(3y,3x){j=(a=3y)+f.H;g=(b=3x)+f.L;$.2c(f,{a:1a(a),b:19(b),j:1a(j),g:19(g)});1T();c.2g(T,13())};m 2S(2m){a=D(G,F(2k+1y(2m),G+Q-f.H));b=D(l,F(2j+1x(2m),l+M-f.L));1u(a,b);2m.4r();C Y};m 2h(){$(R).U("P",2h);1e();j=a;g=b;1S();S="";9(!B.2y(":4q")){A.r(B).1q().2D(c.1N||0)}1O=11;$(R).U("1w",1L).P(2l).1F("1w",2R);A.U("P",1c);c.3v(T,13())};m 1L(){$(R).U("P",2h).U("1w",1L);27(A.r(B));23(1a(a),19(b),1a(a),19(b));9(!J 4p $.N){c.2g(T,13());c.2f(T,13())}};m 2z(2i){9(2i.3w!=1||B.2y(":4o")){C Y}1e();2k=a=1y(2i);2j=b=1x(2i);$(R).P(2h).1w(1L);C Y};m 2A(){22(Y)};m 2x(){2E=11;25(c=$.2c({1Q:"4n",26:11,20:"1p",2C:11,1U:10,3t:m(){},3v:m(){},2g:m(){},2f:m(){}},c));A.r(B).q({36:""});9(c.2F){1O=11;1e();1T();A.r(B).1q().2D(c.1N||0)}3u(m(){c.3t(T,13())},0)};1k 2Q=m(16){1k k=c.1R,d,t,2M=16.4m;d=!1K(k.2O)&&(16.2e||16.3q.2e)?k.2O:!1K(k.2a)&&16.3r?k.2a:!1K(k.2b)&&16.3s?k.2b:!1K(k.2P)?k.2P:10;9(k.2P=="18"||(k.2b=="18"&&16.3s)||(k.2a=="18"&&16.3r)||(k.2O=="18"&&(16.2e||16.3q.2e))){2N(2M){15 37:d=-d;15 39:t=D(a,j);a=F(a,j);j=D(t+d,a);1v();1t;15 38:d=-d;15 40:t=D(b,g);b=F(b,g);g=D(t+d,b);1v(11);1t;3p:C}1S()}X{a=F(a,j);b=F(b,g);2N(2M){15 37:1u(D(a-d,G),b);1t;15 38:1u(a,D(b-d,l));1t;15 39:1u(a+F(d,Q-1a(j)),b);1t;15 40:1u(a,b+F(d,M-19(g)));1t;3p:C}}C Y};m 1P(3o,2L){3m(2d 4l 2L){9(c[2d]!==1X){3o.q(2L[2d],c[2d])}}};m 25(K){9(K.20){(1j=$(K.20)).3g(A.r(B))}$.2c(c,K);1e();9(K.2K!=3n){E.1n();E=$([]);i=K.2K?K.2K=="4k"?4:8:0;3c(i--){E=E.r(V())}E.29(c.1Q+"-4j").q({1o:"1G",34:0,1H:12+1||1});9(!4i(E.q("H"))>=0){E.H(5).L(5)}9(o=c.2J){E.q({2J:o,2G:"3j"})}1P(E,{3k:"2I-28",3i:"2H-28",3l:"1d"})}1s=c.4h/Q||1;1r=c.4g/M||1;9(K.a!=3n){23(K.a,K.b,K.j,K.g);K.2F=!K.1q}9(K.1R){c.1R=$.2c({2b:1,2a:"18"},K.1R)}B.29(c.1Q+"-4f");1i.29(c.1Q+"-4e");3m(i=0;i++<4;){$(I[i-1]).29(c.1Q+"-2I"+i)}1P(1i,{4d:"2H-28",4c:"1d"});1P(I,{3l:"1d",2J:"2I-H"});1P(B,{4b:"2H-28",4a:"1d"});9(o=c.3k){$(I[0]).q({2G:"3j",3h:o})}9(o=c.3i){$(I[1]).q({2G:"49",3h:o})}A.3g(1i.r(I).r(1J).r(E));9($.1b.1E){9(o=B.q("3f").3e(/1d=(\\d+)/)){B.q("1d",o[1]/1Y)}9(o=I.q("3f").3e(/1d=(\\d+)/)){I.q("1d",o[1]/1Y)}}9(K.1q){27(A.r(B))}X{9(K.2F&&2E){1O=11;A.r(B).2D(c.1N||0);22()}}14=(d=(c.48||"").47(/:/))[0]/d[1];O.r(B).U("1M",2z);9(c.1D||c.1C===Y){A.U("P",1c).U("1M",2B);$(3d).U("18",2A)}X{9(c.1C||c.1D===Y){9(c.2C||c.26){A.P(1c).1M(2B)}$(3d).18(2A)}9(!c.46){O.r(B).1M(2z)}}c.1C=c.1D=1X};J.1n=m(){25({1D:11});A.r(B).1n()};J.45=m(){C c};J.31=25;J.44=13;J.43=23;J.42=1L;J.41=22;$p=O;3c($p.3b){12=D(12,!1K($p.q("z-3a"))?$p.q("z-3a"):12);9($p.q("1o")=="21"){1I="21"}$p=$p.20(":3Z(1p)")}12=c.1H||12;9($.1b.1E){O.3Y("3X","3W")}$.N.1Z=$.1b.1E||$.1b.3V?"3U":"3T";9($.1b.3S){1J=V().q({H:"1Y%",L:"1Y%",1o:"1G",1H:12+2||2})}A.r(B).q({36:"35",1o:1I,3R:"35",1H:12||"0"});A.q({1H:12+2||2});1i.r(I).q({1o:"1G",34:0});T.33||T.3Q=="33"||!O.2y("3P")?2x():O.1F("3O",2x);9($.1b.1E&&$.1b.3N>=7){T.32=T.32}};$.2w.N=m(Z){Z=Z||{};J.3M(m(){9($(J).1B("N")){9(Z.1n){$(J).1B("N").1n();$(J).3L("N")}X{$(J).1B("N").31(Z)}}X{9(!Z.1n){9(Z.1C===1X&&Z.1D===1X){Z.1C=11}$(J).1B("N",3K $.N(J,Z))}}});9(Z.3J){C $(J).1B("N")}C J}})(3I);',62,298,'|||||||||if|x1|y1|_7|||_23|y2|||x2||top|function||||css|add|||_4|left|||||_a|_d|return|_2|_e|_3|_10|width|_c|this|_53|height|_13|imgAreaSelect|_8|mousemove|_12|document|_1c|_6|unbind|_5|_1|else|false|_54||true|_16|_2c|_21|case|_4f|_11|resize|_29|_28|browser|_39|opacity|_30|_15|sy|sx|_b|_14|var|_27|_26|remove|position|body|hide|_1b|_1a|break|_44|_41|mouseup|evY|evX|_1e|_1d|data|enable|disable|msie|one|absolute|zIndex|_17|_f|isNaN|_49|mousedown|fadeSpeed|_22|_50|classPrefix|keys|_31|_32|resizeMargin|test|_3f|undefined|100|keyPress|parent|fixed|_35|_2e||_4e|movable|_37|color|addClass|ctrl|shift|extend|option|altKey|onSelectEnd|onSelectChange|_48|_4b|_19|_18|_3d|_47|_20|_1f|_25|outerWidth|scrollTop|scrollLeft|offset|_24|Math|fn|_4d|is|_4a|_4c|_3e|resizable|fadeIn|_9|show|borderStyle|background|border|borderWidth|handles|_52|key|switch|alt|arrows|_34|_3b|_40|_43|cursor|_3a|_38|innerWidth|outerHeight|_2f|_2d|setOptions|src|complete|fontSize|hidden|visibility||||index|length|while|window|match|filter|append|borderColor|borderColor2|solid|borderColor1|borderOpacity|for|null|_51|default|originalEvent|ctrlKey|shiftKey|onInit|setTimeout|onSelectStart|which|_46|_45|_42|_36|margin|onKeyPress|_33|slice|innerHeight|_2b|_2a|jQuery|instance|new|removeData|each|version|load|img|readyState|overflow|opera|keypress|keydown|safari|on|unselectable|attr|not||update|cancelSelection|setSelection|getSelection|getOptions|persistent|split|aspectRatio|dashed|outerOpacity|outerColor|selectionOpacity|selectionColor|selection|outer|imageHeight|imageWidth|parseInt|handle|corners|in|keyCode|imgareaselect|animated|instanceof|visible|preventDefault|autoHide|_3c|toggle|move|mouseout|fadeOut|auto|relative|getBoundingClientRect|jquery|maxHeight|maxWidth|minHeight|minWidth|pageY|pageX|documentElement|div|round|min|max|abs'.split('|')))
diff --git a/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.min.js b/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.min.js
new file mode 100644
index 000000000..b2ac1747f
--- /dev/null
+++ b/vendors/jquery/jquery.imgareaselect-0.9.8/scripts/jquery.min.js
@@ -0,0 +1,18 @@
+/*!
+ * jQuery JavaScript Library v1.6.1
+ * http://jquery.com/
+ *
+ * Copyright 2011, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2011, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Thu May 12 15:04:36 2011 -0400
+ */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write("<!doctype><html><body></body></html>");b=cl.createElement(a),cl.body.appendChild(b),d=f.css(b,"display"),c.body.removeChild(ck)}cj[a]=d}return cj[a]}function cu(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function ct(){cq=b}function cs(){setTimeout(ct,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bF.test(a)?d(a,e):b_(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bU,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bQ),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bD(a,b,c){var d=b==="width"?bx:by,e=b==="width"?a.offsetWidth:a.offsetHeight;if(c==="border")return e;f.each(d,function(){c||(e-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?e+=parseFloat(f.css(a,"margin"+this))||0:e-=parseFloat(f.css(a,"border"+this+"Width"))||0});return e}function bn(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bm(a){f.nodeName(a,"input")?bl(a):a.getElementsByTagName&&f.grep(a.getElementsByTagName("input"),bl)}function bl(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bk(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bj(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bi(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bh(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function X(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(S.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function W(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function O(a,b){return(a&&a!=="*"?a+".":"")+b.replace(A,"`").replace(B,"&")}function N(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(y,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function L(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function F(){return!0}function E(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function H(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(H,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=d.userAgent,x,y,z,A=Object.prototype.toString,B=Object.prototype.hasOwnProperty,C=Array.prototype.push,D=Array.prototype.slice,E=String.prototype.trim,F=Array.prototype.indexOf,G={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.1",length:0,size:function(){return this.length},toArray:function(){return D.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?C.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),y.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(D.apply(this,arguments),"slice",D.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:C,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;y.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!y){y=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",z,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",z),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&H()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):G[A.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!B.call(a,"constructor")&&!B.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||B.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:E?function(a){return a==null?"":E.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?C.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(F)return F.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=D.call(arguments,2),g=function(){return a.apply(c,f.concat(D.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){G["[object "+b+"]"]=b.toLowerCase()}),x=e.uaMatch(w),x.browser&&(e.browser[x.browser]=!0,e.browser.version=x.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?z=function(){c.removeEventListener("DOMContentLoaded",z,!1),e.ready()}:c.attachEvent&&(z=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",z),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g](h)}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};f=c.createElement("select"),g=f.appendChild(c.createElement("option")),h=a.getElementsByTagName("input")[0],j={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},h.checked=!0,j.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,j.optDisabled=!g.disabled;try{delete a.test}catch(s){j.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function b(){j.noCloneEvent=!1,a.detachEvent("onclick",b)}),a.cloneNode(!0).fireEvent("onclick")),h=c.createElement("input"),h.value="t",h.setAttribute("type","radio"),j.radioValue=h.value==="t",h.setAttribute("checked","checked"),a.appendChild(h),k=c.createDocumentFragment(),k.appendChild(a.firstChild),j.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",l=c.createElement("body"),m={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"};for(q in m)l.style[q]=m[q];l.appendChild(a),b.insertBefore(l,b.firstChild),j.appendChecked=h.checked,j.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,j.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",j.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",n=a.getElementsByTagName("td"),r=n[0].offsetHeight===0,n[0].style.display="",n[1].style.display="none",j.reliableHiddenOffsets=r&&n[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(i=c.createElement("div"),i.style.width="0",i.style.marginRight="0",a.appendChild(i),j.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(i,null)||{marginRight:0}).marginRight,10)||0)===0),l.innerHTML="",b.removeChild(l);if(a.attachEvent)for(q in{submit:1,change:1,focusin:1})p="on"+q,r=p in a,r||(a.setAttribute(p,"return;"),r=typeof a[p]=="function"),j[q+"Bubbles"]=r;return j}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u=/\:/,v,w;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.addClass(a.call(this,b,c.attr("class")||""))});if(a&&typeof a=="string"){var b=(a||"").split(o);for(var c=0,d=this.length;c<d;c++){var e=this[c];if(e.nodeType===1)if(!e.className)e.className=a;else{var g=" "+e.className+" ",h=e.className;for(var i=0,j=b.length;i<j;i++)g.indexOf(" "+b[i]+" ")<0&&(h+=" "+b[i]);e.className=f.trim(h)}}}return this},removeClass:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.removeClass(a.call(this,b,c.attr("class")))});if(a&&typeof a=="string"||a===b){var c=(a||"").split(o);for(var d=0,e=this.length;d<e;d++){var g=this[d];if(g.nodeType===1&&g.className)if(a){var h=(" "+g.className+" ").replace(n," ");for(var i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){var d=f(this);d.toggleClass(a.call(this,c,d.attr("class"),b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if((" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;return(e.value||"").replace(p,"")}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);c=j&&f.attrFix[c]||c,i=f.attrHooks[c],i||(!t.test(c)||typeof d!="boolean"&&d!==b&&d.toLowerCase()!==c.toLowerCase()?v&&(f.nodeName(a,"form")||u.test(c))&&(i=v):i=w);if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j)return i.get(a,c);h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);c=i&&f.propFix[c]||c,h=f.propHooks[c];return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return a[f.propFix[c]||c]?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=b),a.setAttribute(c,c.toLowerCase()));return c}},f.attrHooks.value={get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return a.value},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=Object.prototype.hasOwnProperty,y=/\.(.*)$/,z=/^(?:textarea|input|select)$/i,A=/\./g,B=/ /g,C=/[^\w\s.|`]/g,D=function(a){return a.replace(C,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=E;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=E);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),D).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem
+)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,O(a.origType,a.selector),f.extend({},a,{handler:N,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,O(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?F:E):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=F;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=F;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=F,this.stopPropagation()},isDefaultPrevented:E,isPropagationStopped:E,isImmediatePropagationStopped:E};var G=function(a){var b=a.relatedTarget;a.type=a.data;try{if(b&&b!==c&&!b.parentNode)return;while(b&&b!==this)b=b.parentNode;b!==this&&f.event.handle.apply(this,arguments)}catch(d){}},H=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?H:G,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?H:G)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=b.type;(c==="submit"||c==="image")&&f(b).closest("form").length&&L("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=b.type;(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&L("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var I,J=function(a){var b=a.type,c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},K=function(c){var d=c.target,e,g;if(!!z.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=J(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:K,beforedeactivate:K,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&K.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&K.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",J(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in I)f.event.add(this,c+".specialChange",I[c]);return z.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return z.test(this.nodeName)}},I=f.event.special.change.filters,I.focus=I.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var M={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||E,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=y.exec(h),k="",j&&(k=j[0],h=h.replace(y,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,M[h]?(a.push(M[h]+k),h=h+k):h=(M[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+O(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+O(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var P=/Until$/,Q=/^(?:parents|prevUntil|prevAll)/,R=/,/,S=/^.[^:#\[\.,]*$/,T=Array.prototype.slice,U=f.expr.match.POS,V={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(X(this,a,!1),"not",a)},filter:function(a){return this.pushStack(X(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=U.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=U.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(W(c[0])||W(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=T.call(arguments);P.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!V[a]?f.unique(e):e,(this.length>1||R.test(d))&&Q.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var Y=/ jQuery\d+="(?:\d+|null)"/g,Z=/^\s+/,$=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,_=/<([\w:]+)/,ba=/<tbody/i,bb=/<|&#?\w+;/,bc=/<(?:script|object|embed|option|style)/i,bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Y,""):null;if(typeof a=="string"&&!bc.test(a)&&(f.support.leadingWhitespace||!Z.test(a))&&!bg[(_.exec(a)||["",""])[1].toLowerCase()]){a=a.replace($,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bh(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bn)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i=b&&b[0]?b[0].ownerDocument||b[0]:c;a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!bc.test(a[0])&&(f.support.checkClone||!bd.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bj(a,d),e=bk(a),g=bk(d);for(h=0;e[h];++h)bj(e[h],g[h])}if(b){bi(a,d);if(c){e=bk(a),g=bk(d);for(h=0;e[h];++h)bi(e[h],g[h])}}return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||
+b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!bb.test(k))k=b.createTextNode(k);else{k=k.replace($,"<$1></$2>");var l=(_.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=ba.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Z.test(k)&&o.insertBefore(b.createTextNode(Z.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bm(k[i]);else bm(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bo=/alpha\([^)]*\)/i,bp=/opacity=([^)]*)/,bq=/-([a-z])/ig,br=/([A-Z]|^ms)/g,bs=/^-?\d+(?:px)?$/i,bt=/^-?\d/,bu=/^[+\-]=/,bv=/[^+\-\.\de]+/g,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB,bC=function(a,b){return b.toUpperCase()};f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{zIndex:!0,fontWeight:!0,opacity:!0,zoom:!0,lineHeight:!0,widows:!0,orphans:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d;if(h==="number"&&isNaN(d)||d==null)return;h==="string"&&bu.test(d)&&(d=+d.replace(bv,"")+parseFloat(f.css(a,c))),h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]},camelCase:function(a){return a.replace(bq,bC)}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){a.offsetWidth!==0?e=bD(a,b,d):f.swap(a,bw,function(){e=bD(a,b,d)});if(e<=0){e=bz(a,b,b),e==="0px"&&bB&&(e=bB(a,b,b));if(e!=null)return e===""||e==="auto"?"0px":e}if(e<0||e==null){e=a.style[b];return e===""||e==="auto"?"0px":e}return typeof e=="string"?e:e+"px"}},set:function(a,b){if(!bs.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bp.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bo.test(g)?g.replace(bo,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,c){var d,e,g;c=c.replace(br,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bs.test(d)&&bt.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bE=/%20/g,bF=/\[\]$/,bG=/\r?\n/g,bH=/#.*$/,bI=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bJ=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bK=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bL=/^(?:GET|HEAD)$/,bM=/^\/\//,bN=/\?/,bO=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bP=/^(?:select|textarea)/i,bQ=/\s+/,bR=/([?&])_=[^&]*/,bS=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bT=f.fn.load,bU={},bV={},bW,bX;try{bW=e.href}catch(bY){bW=c.createElement("a"),bW.href="",bW=bW.href}bX=bS.exec(bW.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bT)return bT.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bO,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bP.test(this.nodeName)||bJ.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bG,"\r\n")}}):{name:b.name,value:c.replace(bG,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bW,isLocal:bK.test(bX[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bZ(bU),ajaxTransport:bZ(bV),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?ca(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=cb(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bI.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bH,"").replace(bM,bX[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bQ),d.crossDomain==null&&(r=bS.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bX[1]&&r[2]==bX[2]&&(r[3]||(r[1]==="http:"?80:443))==(bX[3]||(bX[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bU,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bL.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bN.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bR,"$1_="+x);d.url=y+(y===d.url?(bN.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bV,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bE,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq,cr=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cv(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cm.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=cn.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this),f.isFunction(d.old)&&d.old.call(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function h(a){return d.step(a)}var d=this,e=f.fx,g;this.startTime=cq||cs(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,h.elem=this.elem,h()&&f.timers.push(h)&&!co&&(cr?(co=1,g=function(){co&&(cr(g),e.tick())},cr(g)):co=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cq||cs(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){return this[0]?parseFloat(f.css(this[0],d,"padding")):null},f.fn["outer"+c]=function(a){return this[0]?parseFloat(f.css(this[0],d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file
diff --git a/vendors/jquery/jquery.jeditable.mini.js b/vendors/jquery/jquery.jeditable.mini.js
new file mode 100644
index 000000000..6c867383a
--- /dev/null
+++ b/vendors/jquery/jquery.jeditable.mini.js
@@ -0,0 +1,38 @@
+// http://www.appelsiini.net/projects/jeditable
+(function($){$.fn.editable=function(target,options){if('disable'==target){$(this).data('disabled.editable',true);return;}
+if('enable'==target){$(this).data('disabled.editable',false);return;}
+if('destroy'==target){$(this).unbind($(this).data('event.editable')).removeData('disabled.editable').removeData('event.editable');return;}
+var settings=$.extend({},$.fn.editable.defaults,{target:target},options);var plugin=$.editable.types[settings.type].plugin||function(){};var submit=$.editable.types[settings.type].submit||function(){};var buttons=$.editable.types[settings.type].buttons||$.editable.types['defaults'].buttons;var content=$.editable.types[settings.type].content||$.editable.types['defaults'].content;var element=$.editable.types[settings.type].element||$.editable.types['defaults'].element;var reset=$.editable.types[settings.type].reset||$.editable.types['defaults'].reset;var callback=settings.callback||function(){};var onedit=settings.onedit||function(){};var onsubmit=settings.onsubmit||function(){};var onreset=settings.onreset||function(){};var onerror=settings.onerror||reset;if(settings.tooltip){$(this).attr('title',settings.tooltip);}
+settings.autowidth='auto'==settings.width;settings.autoheight='auto'==settings.height;return this.each(function(){var self=this;var savedwidth=$(self).width();var savedheight=$(self).height();$(this).data('event.editable',settings.event);if(!$.trim($(this).html())){$(this).html(settings.placeholder);}
+$(this).bind(settings.event,function(e){if(true===$(this).data('disabled.editable')){return;}
+if(self.editing){return;}
+if(false===onedit.apply(this,[settings,self])){return;}
+e.preventDefault();e.stopPropagation();if(settings.tooltip){$(self).removeAttr('title');}
+if(0==$(self).width()){settings.width=savedwidth;settings.height=savedheight;}else{if(settings.width!='none'){settings.width=settings.autowidth?$(self).width():settings.width;}
+if(settings.height!='none'){settings.height=settings.autoheight?$(self).height():settings.height;}}
+if($(this).html().toLowerCase().replace(/(;|")/g,'')==settings.placeholder.toLowerCase().replace(/(;|")/g,'')){$(this).html('');}
+self.editing=true;self.revert=$(self).html();$(self).html('');var form=$('<form />');if(settings.cssclass){if('inherit'==settings.cssclass){form.attr('class',$(self).attr('class'));}else{form.attr('class',settings.cssclass);}}
+if(settings.style){if('inherit'==settings.style){form.attr('style',$(self).attr('style'));form.css('display',$(self).css('display'));}else{form.attr('style',settings.style);}}
+var input=element.apply(form,[settings,self]);var input_content;if(settings.loadurl){var t=setTimeout(function(){input.disabled=true;content.apply(form,[settings.loadtext,settings,self]);},100);var loaddata={};loaddata[settings.id]=self.id;if($.isFunction(settings.loaddata)){$.extend(loaddata,settings.loaddata.apply(self,[self.revert,settings]));}else{$.extend(loaddata,settings.loaddata);}
+$.ajax({type:settings.loadtype,url:settings.loadurl,data:loaddata,async:false,success:function(result){window.clearTimeout(t);input_content=result;input.disabled=false;}});}else if(settings.data){input_content=settings.data;if($.isFunction(settings.data)){input_content=settings.data.apply(self,[self.revert,settings]);}}else{input_content=self.revert;}
+content.apply(form,[input_content,settings,self]);input.attr('name',settings.name);buttons.apply(form,[settings,self]);$(self).append(form);plugin.apply(form,[settings,self]);$(':input:visible:enabled:first',form).focus();if(settings.select){input.select();}
+input.keydown(function(e){if(e.keyCode==27){e.preventDefault();reset.apply(form,[settings,self]);}});var t;if('cancel'==settings.onblur){input.blur(function(e){t=setTimeout(function(){reset.apply(form,[settings,self]);},500);});}else if('submit'==settings.onblur){input.blur(function(e){t=setTimeout(function(){form.submit();},200);});}else if($.isFunction(settings.onblur)){input.blur(function(e){settings.onblur.apply(self,[input.val(),settings]);});}else{input.blur(function(e){});}
+form.submit(function(e){if(t){clearTimeout(t);}
+e.preventDefault();if(false!==onsubmit.apply(form,[settings,self])){if(false!==submit.apply(form,[settings,self])){if($.isFunction(settings.target)){var str=settings.target.apply(self,[input.val(),settings]);$(self).html(str);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder);}}else{var submitdata={};submitdata[settings.name]=input.val();submitdata[settings.id]=self.id;if($.isFunction(settings.submitdata)){$.extend(submitdata,settings.submitdata.apply(self,[self.revert,settings]));}else{$.extend(submitdata,settings.submitdata);}
+if('PUT'==settings.method){submitdata['_method']='put';}
+$(self).html(settings.indicator);var ajaxoptions={type:'POST',data:submitdata,dataType:'html',url:settings.target,success:function(result,status){if(ajaxoptions.dataType=='html'){$(self).html(result);}
+self.editing=false;callback.apply(self,[result,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder);}},error:function(xhr,status,error){onerror.apply(form,[settings,self,xhr]);}};$.extend(ajaxoptions,settings.ajaxoptions);$.ajax(ajaxoptions);}}}
+$(self).attr('title',settings.tooltip);return false;});});this.reset=function(form){if(this.editing){if(false!==onreset.apply(form,[settings,self])){$(self).html(self.revert);self.editing=false;if(!$.trim($(self).html())){$(self).html(settings.placeholder);}
+if(settings.tooltip){$(self).attr('title',settings.tooltip);}}}};});};$.editable={types:{defaults:{element:function(settings,original){var input=$('<input type="hidden"></input>');$(this).append(input);return(input);},content:function(string,settings,original){$(':input:first',this).val(string);},reset:function(settings,original){original.reset(this);},buttons:function(settings,original){var form=this;if(settings.submit){if(settings.submit.match(/>$/)){var submit=$(settings.submit).click(function(){if(submit.attr("type")!="submit"){form.submit();}});}else{var submit=$('<button type="submit" />');submit.html(settings.submit);}
+$(this).append(submit);}
+if(settings.cancel){if(settings.cancel.match(/>$/)){var cancel=$(settings.cancel);}else{var cancel=$('<button type="cancel" />');cancel.html(settings.cancel);}
+$(this).append(cancel);$(cancel).click(function(event){if($.isFunction($.editable.types[settings.type].reset)){var reset=$.editable.types[settings.type].reset;}else{var reset=$.editable.types['defaults'].reset;}
+reset.apply(form,[settings,original]);return false;});}}},text:{element:function(settings,original){var input=$('<input />');if(settings.width!='none'){input.width(settings.width);}
+if(settings.height!='none'){input.height(settings.height);}
+input.attr('autocomplete','off');$(this).append(input);return(input);}},textarea:{element:function(settings,original){var textarea=$('<textarea />');if(settings.rows){textarea.attr('rows',settings.rows);}else if(settings.height!="none"){textarea.height(settings.height);}
+if(settings.cols){textarea.attr('cols',settings.cols);}else if(settings.width!="none"){textarea.width(settings.width);}
+$(this).append(textarea);return(textarea);}},select:{element:function(settings,original){var select=$('<select />');$(this).append(select);return(select);},content:function(data,settings,original){if(String==data.constructor){eval('var json = '+data);}else{var json=data;}
+for(var key in json){if(!json.hasOwnProperty(key)){continue;}
+if('selected'==key){continue;}
+var option=$('<option />').val(key).append(json[key]);$('select',this).append(option);}
+$('select',this).children().each(function(){if($(this).val()==json['selected']||$(this).text()==$.trim(original.revert)){$(this).attr('selected','selected');}});}}},addInputType:function(name,input){$.editable.types[name]=input;}};$.fn.editable.defaults={name:'value',id:'id',type:'text',width:'auto',height:'auto',event:'click.editable',onblur:'cancel',loadtype:'GET',loadtext:'Loading...',placeholder:'Click to edit',loaddata:{},submitdata:{},ajaxoptions:{}};})(jQuery);
diff --git a/vendors/jquery/jquery.ui.autocomplete.html.js b/vendors/jquery/jquery.ui.autocomplete.html.js
new file mode 100644
index 000000000..a3ed2ee4b
--- /dev/null
+++ b/vendors/jquery/jquery.ui.autocomplete.html.js
@@ -0,0 +1,40 @@
+/*
+ * jQuery UI Autocomplete HTML Extension
+ *
+ * Copyright 2010, Scott González (http://scottgonzalez.com)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ *
+ * http://github.com/scottgonzalez/jquery-ui-extensions
+ */
+(function( $ ) {
+
+var proto = $.ui.autocomplete.prototype,
+ initSource = proto._initSource;
+
+function filter( array, term ) {
+ var matcher = new RegExp( $.ui.autocomplete.escapeRegex(term), "i" );
+ return $.grep( array, function(value) {
+ return matcher.test( $( "<div>" ).html( value.label || value.value || value ).text() );
+ });
+}
+
+$.extend( proto, {
+ _initSource: function() {
+ if ( this.options.html && $.isArray(this.options.source) ) {
+ this.source = function( request, response ) {
+ response( filter( this.options.source, request.term ) );
+ };
+ } else {
+ initSource.call( this );
+ }
+ },
+
+ _renderItem: function( ul, item) {
+ return $( "<li></li>" )
+ .data( "item.autocomplete", item )
+ .append( $( "<a></a>" )[ this.options.html ? "html" : "text" ]( item.label ) )
+ .appendTo( ul );
+ }
+});
+
+})( jQuery ); \ No newline at end of file
diff --git a/vendors/markdown/License.text b/vendors/markdown/License.text
new file mode 100644
index 000000000..4d6bf8b63
--- /dev/null
+++ b/vendors/markdown/License.text
@@ -0,0 +1,36 @@
+PHP Markdown & Extra
+Copyright (c) 2004-2009 Michel Fortin
+<http://michelf.com/>
+All rights reserved.
+
+Based on Markdown
+Copyright (c) 2003-2006 John Gruber
+<http://daringfireball.net/>
+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 "Markdown" 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 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.
diff --git a/vendors/markdown/PHP Markdown Extra Readme.text b/vendors/markdown/PHP Markdown Extra Readme.text
new file mode 100644
index 000000000..b72ee998e
--- /dev/null
+++ b/vendors/markdown/PHP Markdown Extra Readme.text
@@ -0,0 +1,786 @@
+PHP Markdown Extra
+==================
+
+Version 1.2.4 - Sat 10 Oct 2009
+
+by Michel Fortin
+<http://michelf.com/>
+
+based on Markdown by John Gruber
+<http://daringfireball.net/>
+
+
+Introduction
+------------
+
+This is a special version of PHP Markdown with extra features. See
+<http://michelf.com/projects/php-markdown/extra/> for details.
+
+Markdown is a text-to-HTML conversion tool for web writers. Markdown
+allows you to write using an easy-to-read, easy-to-write plain text
+format, then convert it to structurally valid XHTML (or HTML).
+
+"Markdown" is two things: a plain text markup syntax, and a software
+tool, written in Perl, that converts the plain text markup to HTML.
+PHP Markdown is a port to PHP of the original Markdown program by
+John Gruber.
+
+PHP Markdown can work as a plug-in for WordPress and bBlog, as a
+modifier for the Smarty templating engine, or as a remplacement for
+textile formatting in any software that support textile.
+
+Full documentation of Markdown's syntax is available on John's
+Markdown page: <http://daringfireball.net/projects/markdown/>
+
+
+Installation and Requirement
+----------------------------
+
+PHP Markdown requires PHP version 4.0.5 or later.
+
+
+### WordPress ###
+
+PHP Markdown works with [WordPress][wp], version 1.2 or later.
+
+ [wp]: http://wordpress.org/
+
+1. To use PHP Markdown with WordPress, place the "makrdown.php" file
+ in the "plugins" folder. This folder is located inside
+ "wp-content" at the root of your site:
+
+ (site home)/wp-content/plugins/
+
+2. Activate the plugin with the administrative interface of
+ WordPress. In the "Plugins" section you will now find Markdown.
+ To activate the plugin, click on the "Activate" button on the
+ same line than Markdown. Your entries will now be formatted by
+ PHP Markdown.
+
+3. To post Markdown content, you'll first have to disable the
+ "visual" editor in the User section of WordPress.
+
+You can configure PHP Markdown to not apply to the comments on your
+WordPress weblog. See the "Configuration" section below.
+
+It is not possible at this time to apply a different set of
+filters to different entries. All your entries will be formated by
+PHP Markdown. This is a limitation of WordPress. If your old entries
+are written in HTML (as opposed to another formatting syntax, like
+Textile), they'll probably stay fine after installing Markdown.
+
+
+### bBlog ###
+
+PHP Markdown also works with [bBlog][bb].
+
+ [bb]: http://www.bblog.com/
+
+To use PHP Markdown with bBlog, rename "markdown.php" to
+"modifier.markdown.php" and place the file in the "bBlog_plugins"
+folder. This folder is located inside the "bblog" directory of
+your site, like this:
+
+ (site home)/bblog/bBlog_plugins/modifier.markdown.php
+
+Select "Markdown" as the "Entry Modifier" when you post a new
+entry. This setting will only apply to the entry you are editing.
+
+
+### Replacing Textile in TextPattern ###
+
+[TextPattern][tp] use [Textile][tx] to format your text. You can
+replace Textile by Markdown in TextPattern without having to change
+any code by using the *Texitle Compatibility Mode*. This may work
+with other software that expect Textile too.
+
+ [tx]: http://www.textism.com/tools/textile/
+ [tp]: http://www.textpattern.com/
+
+1. Rename the "markdown.php" file to "classTextile.php". This will
+ make PHP Markdown behave as if it was the actual Textile parser.
+
+2. Replace the "classTextile.php" file TextPattern installed in your
+ web directory. It can be found in the "lib" directory:
+
+ (site home)/textpattern/lib/
+
+Contrary to Textile, Markdown does not convert quotes to curly ones
+and does not convert multiple hyphens (`--` and `---`) into en- and
+em-dashes. If you use PHP Markdown in Textile Compatibility Mode, you
+can solve this problem by installing the "smartypants.php" file from
+[PHP SmartyPants][psp] beside the "classTextile.php" file. The Textile
+Compatibility Mode function will use SmartyPants automatically without
+further modification.
+
+ [psp]: http://michelf.com/projects/php-smartypants/
+
+
+### In Your Own Programs ###
+
+You can use PHP Markdown easily in your current PHP program. Simply
+include the file and then call the Markdown function on the text you
+want to convert:
+
+ include_once "markdown.php";
+ $my_html = Markdown($my_text);
+
+If you wish to use PHP Markdown with another text filter function
+built to parse HTML, you should filter the text *after* the Markdown
+function call. This is an example with [PHP SmartyPants][psp]:
+
+ $my_html = SmartyPants(Markdown($my_text));
+
+
+### With Smarty ###
+
+If your program use the [Smarty][sm] template engine, PHP Markdown
+can now be used as a modifier for your templates. Rename "markdown.php"
+to "modifier.markdown.php" and put it in your smarty plugins folder.
+
+ [sm]: http://smarty.php.net/
+
+If you are using MovableType 3.1 or later, the Smarty plugin folder is
+located at `(MT CGI root)/php/extlib/smarty/plugins`. This will allow
+Markdown to work on dynamic pages.
+
+
+### Updating Markdown in Other Programs ###
+
+Many web applications now ship with PHP Markdown, or have plugins to
+perform the conversion to HTML. You can update PHP Markdown -- or
+replace it with PHP Markdown Extra -- in many of these programs by
+swapping the old "markdown.php" file for the new one.
+
+Here is a short non-exhaustive list of some programs and where they
+hide the "markdown.php" file.
+
+| Program | Path to Markdown
+| ------- | ----------------
+| [Pivot][] | `(site home)/pivot/includes/markdown/`
+
+If you're unsure if you can do this with your application, ask the
+developer, or wait for the developer to update his application or
+plugin with the new version of PHP Markdown.
+
+ [Pivot]: http://pivotlog.net/
+
+
+Configuration
+-------------
+
+By default, PHP Markdown produces XHTML output for tags with empty
+elements. E.g.:
+
+ <br />
+
+Markdown can be configured to produce HTML-style tags; e.g.:
+
+ <br>
+
+To do this, you must edit the "MARKDOWN_EMPTY_ELEMENT_SUFFIX"
+definition below the "Global default settings" header at the start of
+the "markdown.php" file.
+
+
+### WordPress-Specific Settings ###
+
+By default, the Markdown plugin applies to both posts and comments on
+your WordPress weblog. To deactivate one or the other, edit the
+`MARKDOWN_WP_POSTS` or `MARKDOWN_WP_COMMENTS` definitions under the
+"WordPress settings" header at the start of the "markdown.php" file.
+
+
+Bugs
+----
+
+To file bug reports please send email to:
+<michel.fortin@michelf.com>
+
+Please include with your report: (1) the example input; (2) the output you
+expected; (3) the output PHP Markdown actually produced.
+
+
+Version History
+---------------
+
+1.0.1n (10 Oct 2009):
+
+* Enabled reference-style shortcut links. Now you can write reference-style
+ links with less brakets:
+
+ This is [my website].
+
+ [my website]: http://example.com/
+
+ This was added in the 1.0.2 betas, but commented out in the 1.0.1 branch,
+ waiting for the feature to be officialized. [But half of the other Markdown
+ implementations are supporting this syntax][half], so it makes sense for
+ compatibility's sake to allow it in PHP Markdown too.
+
+ [half]: http://babelmark.bobtfish.net/?markdown=This+is+%5Bmy+website%5D.%0D%0A%09%09%0D%0A%5Bmy+website%5D%3A+http%3A%2F%2Fexample.com%2F%0D%0A&src=1&dest=2
+
+* Now accepting many valid email addresses in autolinks that were
+ previously rejected, such as:
+
+ <abc+mailbox/department=shipping@example.com>
+ <!#$%&'*+-/=?^_`.{|}~@example.com>
+ <"abc@def"@example.com>
+ <"Fred Bloggs"@example.com>
+ <jsmith@[192.0.2.1]>
+
+* Now accepting spaces in URLs for inline and reference-style links. Such
+ URLs need to be surrounded by angle brakets. For instance:
+
+ [link text](<http://url/with space> "optional title")
+
+ [link text][ref]
+ [ref]: <http://url/with space> "optional title"
+
+ There is still a quirk which may prevent this from working correctly with
+ relative URLs in inline-style links however.
+
+* Fix for adjacent list of different kind where the second list could
+ end as a sublist of the first when not separated by an empty line.
+
+* Fixed a bug where inline-style links wouldn't be recognized when the link
+ definition contains a line break between the url and the title.
+
+* Fixed a bug where tags where the name contains an underscore aren't parsed
+ correctly.
+
+* Fixed some corner-cases mixing underscore-ephasis and asterisk-emphasis.
+
+
+Extra 1.2.4:
+
+* Fixed a problem where unterminated tags in indented code blocks could
+ prevent proper escaping of characaters in the code block.
+
+
+Extra 1.2.3 (31 Dec 2008):
+
+* In WordPress pages featuring more than one post, footnote id prefixes are
+ now automatically applied with the current post ID to avoid clashes
+ between footnotes belonging to different posts.
+
+* Fix for a bug introduced in Extra 1.2 where block-level HTML tags where
+ not detected correctly, thus the addition of erroneous `<p>` tags and
+ interpretation of their content as Markdown-formatted instead of
+ HTML-formatted.
+
+
+Extra 1.2.2 (21 Jun 2008):
+
+* Fixed a problem where abbreviation definitions, footnote
+ definitions and link references were stripped inside
+ fenced code blocks.
+
+* Fixed a bug where characters such as `"` in abbreviation
+ definitions weren't properly encoded to HTML entities.
+
+* Fixed a bug where double quotes `"` were not correctly encoded
+ as HTML entities when used inside a footnote reference id.
+
+
+1.0.1m (21 Jun 2008):
+
+* Lists can now have empty items.
+
+* Rewrote the emphasis and strong emphasis parser to fix some issues
+ with odly placed and overlong markers.
+
+
+Extra 1.2.1 (27 May 2008):
+
+* Fixed a problem where Markdown headers and horizontal rules were
+ transformed into their HTML equivalent inside fenced code blocks.
+
+
+Extra 1.2 (11 May 2008):
+
+* Added fenced code block syntax which don't require indentation
+ and can start and end with blank lines. A fenced code block
+ starts with a line of consecutive tilde (~) and ends on the
+ next line with the same number of consecutive tilde. Here's an
+ example:
+
+ ~~~~~~~~~~~~
+ Hello World!
+ ~~~~~~~~~~~~
+
+* Rewrote parts of the HTML block parser to better accomodate
+ fenced code blocks.
+
+* Footnotes may now be referenced from within another footnote.
+
+* Added programatically-settable parser property `predef_attr` for
+ predefined attribute definitions.
+
+* Fixed an issue where an indented code block preceded by a blank
+ line containing some other whitespace would confuse the HTML
+ block parser into creating an HTML block when it should have
+ been code.
+
+
+1.0.1l (11 May 2008):
+
+* Now removing the UTF-8 BOM at the start of a document, if present.
+
+* Now accepting capitalized URI schemes (such as HTTP:) in automatic
+ links, such as `<HTTP://EXAMPLE.COM/>`.
+
+* Fixed a problem where `<hr@example.com>` was seen as a horizontal
+ rule instead of an automatic link.
+
+* Fixed an issue where some characters in Markdown-generated HTML
+ attributes weren't properly escaped with entities.
+
+* Fix for code blocks as first element of a list item. Previously,
+ this didn't create any code block for item 2:
+
+ * Item 1 (regular paragraph)
+
+ * Item 2 (code block)
+
+* A code block starting on the second line of a document wasn't seen
+ as a code block. This has been fixed.
+
+* Added programatically-settable parser properties `predef_urls` and
+ `predef_titles` for predefined URLs and titles for reference-style
+ links. To use this, your PHP code must call the parser this way:
+
+ $parser = new Markdwon_Parser;
+ $parser->predef_urls = array('linkref' => 'http://example.com');
+ $html = $parser->transform($text);
+
+ You can then use the URL as a normal link reference:
+
+ [my link][linkref]
+ [my link][linkRef]
+
+ Reference names in the parser properties *must* be lowercase.
+ Reference names in the Markdown source may have any case.
+
+* Added `setup` and `teardown` methods which can be used by subclassers
+ as hook points to arrange the state of some parser variables before and
+ after parsing.
+
+
+Extra 1.1.7 (26 Sep 2007):
+
+1.0.1k (26 Sep 2007):
+
+* Fixed a problem introduced in 1.0.1i where three or more identical
+ uppercase letters, as well as a few other symbols, would trigger
+ a horizontal line.
+
+
+Extra 1.1.6 (4 Sep 2007):
+
+1.0.1j (4 Sep 2007):
+
+* Fixed a problem introduced in 1.0.1i where the closing `code` and
+ `pre` tags at the end of a code block were appearing in the wrong
+ order.
+
+* Overriding configuration settings by defining constants from an
+ external before markdown.php is included is now possible without
+ producing a PHP warning.
+
+
+Extra 1.1.5 (31 Aug 2007):
+
+1.0.1i (31 Aug 2007):
+
+* Fixed a problem where an escaped backslash before a code span
+ would prevent the code span from being created. This should now
+ work as expected:
+
+ Litteral backslash: \\`code span`
+
+* Overall speed improvements, especially with long documents.
+
+
+Extra 1.1.4 (3 Aug 2007):
+
+1.0.1h (3 Aug 2007):
+
+* Added two properties (`no_markup` and `no_entities`) to the parser
+ allowing HTML tags and entities to be disabled.
+
+* Fix for a problem introduced in 1.0.1g where posting comments in
+ WordPress would trigger PHP warnings and cause some markup to be
+ incorrectly filtered by the kses filter in WordPress.
+
+
+Extra 1.1.3 (3 Jul 2007):
+
+* Fixed a performance problem when parsing some invalid HTML as an HTML
+ block which was resulting in too much recusion and a segmentation fault
+ for long documents.
+
+* The markdown="" attribute now accepts unquoted values.
+
+* Fixed an issue where underscore-emphasis didn't work when applied on the
+ first or the last word of an element having the markdown="1" or
+ markdown="span" attribute set unless there was some surrounding whitespace.
+ This didn't work:
+
+ <p markdown="1">_Hello_ _world_</p>
+
+ Now it does produce emphasis as expected.
+
+* Fixed an issue preventing footnotes from working when the parser's
+ footnote id prefix variable (fn_id_prefix) is not empty.
+
+* Fixed a performance problem where the regular expression for strong
+ emphasis introduced in version 1.1 could sometime be long to process,
+ give slightly wrong results, and in some circumstances could remove
+ entirely the content for a whole paragraph.
+
+* Fixed an issue were abbreviations tags could be incorrectly added
+ inside URLs and title of links.
+
+* Placing footnote markers inside a link, resulting in two nested links, is
+ no longer allowed.
+
+
+1.0.1g (3 Jul 2007):
+
+* Fix for PHP 5 compiled without the mbstring module. Previous fix to
+ calculate the length of UTF-8 strings in `detab` when `mb_strlen` is
+ not available was only working with PHP 4.
+
+* Fixed a problem with WordPress 2.x where full-content posts in RSS feeds
+ were not processed correctly by Markdown.
+
+* Now supports URLs containing literal parentheses for inline links
+ and images, such as:
+
+ [WIMP](http://en.wikipedia.org/wiki/WIMP_(computing))
+
+ Such parentheses may be arbitrarily nested, but must be
+ balanced. Unbalenced parentheses are allowed however when the URL
+ when escaped or when the URL is enclosed in angle brakets `<>`.
+
+* Fixed a performance problem where the regular expression for strong
+ emphasis introduced in version 1.0.1d could sometime be long to process,
+ give slightly wrong results, and in some circumstances could remove
+ entirely the content for a whole paragraph.
+
+* Some change in version 1.0.1d made possible the incorrect nesting of
+ anchors within each other. This is now fixed.
+
+* Fixed a rare issue where certain MD5 hashes in the content could
+ be changed to their corresponding text. For instance, this:
+
+ The MD5 value for "+" is "26b17225b626fb9238849fd60eabdf60".
+
+ was incorrectly changed to this in previous versions of PHP Markdown:
+
+ <p>The MD5 value for "+" is "+".</p>
+
+* Now convert escaped characters to their numeric character
+ references equivalent.
+
+ This fix an integration issue with SmartyPants and backslash escapes.
+ Since Markdown and SmartyPants have some escapable characters in common,
+ it was sometime necessary to escape them twice. Previously, two
+ backslashes were sometime required to prevent Markdown from "eating" the
+ backslash before SmartyPants sees it:
+
+ Here are two hyphens: \\--
+
+ Now, only one backslash will do:
+
+ Here are two hyphens: \--
+
+
+Extra 1.1.2 (7 Feb 2007)
+
+* Fixed an issue where headers preceded too closely by a paragraph
+ (with no blank line separating them) where put inside the paragraph.
+
+* Added the missing TextileRestricted method that was added to regular
+ PHP Markdown since 1.0.1d but which I forgot to add to Extra.
+
+
+1.0.1f (7 Feb 2007):
+
+* Fixed an issue with WordPress where manually-entered excerpts, but
+ not the auto-generated ones, would contain nested paragraphs.
+
+* Fixed an issue introduced in 1.0.1d where headers and blockquotes
+ preceded too closely by a paragraph (not separated by a blank line)
+ where incorrectly put inside the paragraph.
+
+* Fixed an issue introduced in 1.0.1d in the tokenizeHTML method where
+ two consecutive code spans would be merged into one when together they
+ form a valid tag in a multiline paragraph.
+
+* Fixed an long-prevailing issue where blank lines in code blocks would
+ be doubled when the code block is in a list item.
+
+ This was due to the list processing functions relying on artificially
+ doubled blank lines to correctly determine when list items should
+ contain block-level content. The list item processing model was thus
+ changed to avoid the need for double blank lines.
+
+* Fixed an issue with `<% asp-style %>` instructions used as inline
+ content where the opening `<` was encoded as `&lt;`.
+
+* Fixed a parse error occuring when PHP is configured to accept
+ ASP-style delimiters as boundaries for PHP scripts.
+
+* Fixed a bug introduced in 1.0.1d where underscores in automatic links
+ got swapped with emphasis tags.
+
+
+Extra 1.1.1 (28 Dec 2006)
+
+* Fixed a problem where whitespace at the end of the line of an atx-style
+ header would cause tailing `#` to appear as part of the header's content.
+ This was caused by a small error in the regex that handles the definition
+ for the id attribute in PHP Markdown Extra.
+
+* Fixed a problem where empty abbreviations definitions would eat the
+ following line as its definition.
+
+* Fixed an issue with calling the Markdown parser repetitivly with text
+ containing footnotes. The footnote hashes were not reinitialized properly.
+
+
+1.0.1e (28 Dec 2006)
+
+* Added support for internationalized domain names for email addresses in
+ automatic link. Improved the speed at which email addresses are converted
+ to entities. Thanks to Milian Wolff for his optimisations.
+
+* Made deterministic the conversion to entities of email addresses in
+ automatic links. This means that a given email address will always be
+ encoded the same way.
+
+* PHP Markdown will now use its own function to calculate the length of an
+ UTF-8 string in `detab` when `mb_strlen` is not available instead of
+ giving a fatal error.
+
+
+Extra 1.1 (1 Dec 2006)
+
+* Added a syntax for footnotes.
+
+* Added an experimental syntax to define abbreviations.
+
+
+1.0.1d (1 Dec 2006)
+
+* Fixed a bug where inline images always had an empty title attribute. The
+ title attribute is now present only when explicitly defined.
+
+* Link references definitions can now have an empty title, previously if the
+ title was defined but left empty the link definition was ignored. This can
+ be useful if you want an empty title attribute in images to hide the
+ tooltip in Internet Explorer.
+
+* Made `detab` aware of UTF-8 characters. UTF-8 multi-byte sequences are now
+ correctly mapped to one character instead of the number of bytes.
+
+* Fixed a small bug with WordPress where WordPress' default filter `wpautop`
+ was not properly deactivated on comment text, resulting in hard line breaks
+ where Markdown do not prescribes them.
+
+* Added a `TextileRestrited` method to the textile compatibility mode. There
+ is no restriction however, as Markdown does not have a restricted mode at
+ this point. This should make PHP Markdown work again in the latest
+ versions of TextPattern.
+
+* Converted PHP Markdown to a object-oriented design.
+
+* Changed span and block gamut methods so that they loop over a
+ customizable list of methods. This makes subclassing the parser a more
+ interesting option for creating syntax extensions.
+
+* Also added a "document" gamut loop which can be used to hook document-level
+ methods (like for striping link definitions).
+
+* Changed all methods which were inserting HTML code so that they now return
+ a hashed representation of the code. New methods `hashSpan` and `hashBlock`
+ are used to hash respectivly span- and block-level generated content. This
+ has a couple of significant effects:
+
+ 1. It prevents invalid nesting of Markdown-generated elements which
+ could occur occuring with constructs like `*something [link*][1]`.
+ 2. It prevents problems occuring with deeply nested lists on which
+ paragraphs were ill-formed.
+ 3. It removes the need to call `hashHTMLBlocks` twice during the the
+ block gamut.
+
+ Hashes are turned back to HTML prior output.
+
+* Made the block-level HTML parser smarter using a specially-crafted regular
+ expression capable of handling nested tags.
+
+* Solved backtick issues in tag attributes by rewriting the HTML tokenizer to
+ be aware of code spans. All these lines should work correctly now:
+
+ <span attr='`ticks`'>bar</span>
+ <span attr='``double ticks``'>bar</span>
+ `<test a="` content of attribute `">`
+
+* Changed the parsing of HTML comments to match simply from `<!--` to `-->`
+ instead using of the more complicated SGML-style rule with paired `--`.
+ This is how most browsers parse comments and how XML defines them too.
+
+* `<address>` has been added to the list of block-level elements and is now
+ treated as an HTML block instead of being wrapped within paragraph tags.
+
+* Now only trim trailing newlines from code blocks, instead of trimming
+ all trailing whitespace characters.
+
+* Fixed bug where this:
+
+ [text](http://m.com "title" )
+
+ wasn't working as expected, because the parser wasn't allowing for spaces
+ before the closing paren.
+
+* Filthy hack to support markdown='1' in div tags.
+
+* _DoAutoLinks() now supports the 'dict://' URL scheme.
+
+* PHP- and ASP-style processor instructions are now protected as
+ raw HTML blocks.
+
+ <? ... ?>
+ <% ... %>
+
+* Fix for escaped backticks still triggering code spans:
+
+ There are two raw backticks here: \` and here: \`, not a code span
+
+
+Extra 1.0 - 5 September 2005
+
+* Added support for setting the id attributes for headers like this:
+
+ Header 1 {#header1}
+ ========
+
+ ## Header 2 ## {#header2}
+
+ This only work only for headers for now.
+
+* Tables will now work correctly as the first element of a definition
+ list. For example, this input:
+
+ Term
+
+ : Header | Header
+ ------- | -------
+ Cell | Cell
+
+ used to produce no definition list and a table where the first
+ header was named ": Header". This is now fixed.
+
+* Fix for a problem where a paragraph following a table was not
+ placed between `<p>` tags.
+
+
+Extra 1.0b4 - 1 August 2005
+
+* Fixed some issues where whitespace around HTML blocks were trigging
+ empty paragraph tags.
+
+* Fixed an HTML block parsing issue that would cause a block element
+ following a code span or block with unmatched opening bracket to be
+ placed inside a paragraph.
+
+* Removed some PHP notices that could appear when parsing definition
+ lists and tables with PHP notice reporting flag set.
+
+
+Extra 1.0b3 - 29 July 2005
+
+* Definition lists now require a blank line before each term. Solves
+ an ambiguity where the last line of lazy-indented definitions could
+ be mistaken by PHP Markdown as a new term in the list.
+
+* Definition lists now support multiple terms per definition.
+
+* Some special tags were replaced in the output by their md5 hash
+ key. Things such as this now work as expected:
+
+ ## Header <?php echo $number ?> ##
+
+
+Extra 1.0b2 - 26 July 2005
+
+* Definition lists can now take two or more definitions for one term.
+ This should have been the case before, but a bug prevented this
+ from working right.
+
+* Fixed a problem where single column table with a pipe only at the
+ end where not parsed as table. Here is such a table:
+
+ | header
+ | ------
+ | cell
+
+* Fixed problems with empty cells in the first column of a table with
+ no leading pipe, like this one:
+
+ header | header
+ ------ | ------
+ | cell
+
+* Code spans containing pipes did not within a table. This is now
+ fixed by parsing code spans before splitting rows into cells.
+
+* Added the pipe character to the backlash escape character lists.
+
+Extra 1.0b1 (25 Jun 2005)
+
+* First public release of PHP Markdown Extra.
+
+
+Copyright and License
+---------------------
+
+PHP Markdown & Extra
+Copyright (c) 2004-2009 Michel Fortin
+<http://michelf.com/>
+All rights reserved.
+
+Based on Markdown
+Copyright (c) 2003-2005 John Gruber
+<http://daringfireball.net/>
+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 "Markdown" 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 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.
diff --git a/vendors/markdown/UPSTREAM_WARNING b/vendors/markdown/UPSTREAM_WARNING
new file mode 100644
index 000000000..d0a664f2a
--- /dev/null
+++ b/vendors/markdown/UPSTREAM_WARNING
@@ -0,0 +1,5 @@
+This file has been modified from its upstream. When upgrading, be sure to check the following mods:
+
+* Headers can be created with =, ==, etc instead of just #, ##.
+* @todo Autolink (f|ht)tp(s)?://link.com.
+* @todo GFM improvement for newlines: http://github.github.com/github-flavored-markdown/ \ No newline at end of file
diff --git a/vendors/markdown/markdown.php b/vendors/markdown/markdown.php
new file mode 100644
index 000000000..3f1f3a715
--- /dev/null
+++ b/vendors/markdown/markdown.php
@@ -0,0 +1,2933 @@
+<?php
+#
+# Markdown Extra - A text-to-HTML conversion tool for web writers
+#
+# PHP Markdown & Extra
+# Copyright (c) 2004-2009 Michel Fortin
+# <http://michelf.com/projects/php-markdown/>
+#
+# Original Markdown
+# Copyright (c) 2004-2006 John Gruber
+# <http://daringfireball.net/projects/markdown/>
+#
+
+
+define( 'MARKDOWN_VERSION', "1.0.1n" ); # Sat 10 Oct 2009
+define( 'MARKDOWNEXTRA_VERSION', "1.2.4" ); # Sat 10 Oct 2009
+
+
+#
+# Global default settings:
+#
+
+# Change to ">" for HTML output
+@define( 'MARKDOWN_EMPTY_ELEMENT_SUFFIX', " />");
+
+# Define the width of a tab for code blocks.
+@define( 'MARKDOWN_TAB_WIDTH', 4 );
+
+# Optional title attribute for footnote links and backlinks.
+@define( 'MARKDOWN_FN_LINK_TITLE', "" );
+@define( 'MARKDOWN_FN_BACKLINK_TITLE', "" );
+
+# Optional class attribute for footnote links and backlinks.
+@define( 'MARKDOWN_FN_LINK_CLASS', "" );
+@define( 'MARKDOWN_FN_BACKLINK_CLASS', "" );
+
+
+#
+# WordPress settings:
+#
+
+# Change to false to remove Markdown from posts and/or comments.
+@define( 'MARKDOWN_WP_POSTS', true );
+@define( 'MARKDOWN_WP_COMMENTS', true );
+
+
+
+### Standard Function Interface ###
+
+@define( 'MARKDOWN_PARSER_CLASS', 'MarkdownExtra_Parser' );
+
+function Markdown($text) {
+#
+# Initialize the parser and return the result of its transform method.
+#
+ # Setup static parser variable.
+ static $parser;
+ if (!isset($parser)) {
+ $parser_class = MARKDOWN_PARSER_CLASS;
+ $parser = new $parser_class;
+ }
+
+ # Transform text using parser.
+ return $parser->transform($text);
+}
+
+
+### WordPress Plugin Interface ###
+
+/*
+Plugin Name: Markdown Extra
+Plugin URI: http://michelf.com/projects/php-markdown/
+Description: <a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://michelf.com/projects/php-markdown/">More...</a>
+Version: 1.2.4
+Author: Michel Fortin
+Author URI: http://michelf.com/
+*/
+
+if (isset($wp_version)) {
+ # More details about how it works here:
+ # <http://michelf.com/weblog/2005/wordpress-text-flow-vs-markdown/>
+
+ # Post content and excerpts
+ # - Remove WordPress paragraph generator.
+ # - Run Markdown on excerpt, then remove all tags.
+ # - Add paragraph tag around the excerpt, but remove it for the excerpt rss.
+ if (MARKDOWN_WP_POSTS) {
+ remove_filter('the_content', 'wpautop');
+ remove_filter('the_content_rss', 'wpautop');
+ remove_filter('the_excerpt', 'wpautop');
+ add_filter('the_content', 'mdwp_MarkdownPost', 6);
+ add_filter('the_content_rss', 'mdwp_MarkdownPost', 6);
+ add_filter('get_the_excerpt', 'mdwp_MarkdownPost', 6);
+ add_filter('get_the_excerpt', 'trim', 7);
+ add_filter('the_excerpt', 'mdwp_add_p');
+ add_filter('the_excerpt_rss', 'mdwp_strip_p');
+
+ remove_filter('content_save_pre', 'balanceTags', 50);
+ remove_filter('excerpt_save_pre', 'balanceTags', 50);
+ add_filter('the_content', 'balanceTags', 50);
+ add_filter('get_the_excerpt', 'balanceTags', 9);
+ }
+
+ # Add a footnote id prefix to posts when inside a loop.
+ function mdwp_MarkdownPost($text) {
+ static $parser;
+ if (!$parser) {
+ $parser_class = MARKDOWN_PARSER_CLASS;
+ $parser = new $parser_class;
+ }
+ if (is_single() || is_page() || is_feed()) {
+ $parser->fn_id_prefix = "";
+ } else {
+ $parser->fn_id_prefix = get_the_ID() . ".";
+ }
+ return $parser->transform($text);
+ }
+
+ # Comments
+ # - Remove WordPress paragraph generator.
+ # - Remove WordPress auto-link generator.
+ # - Scramble important tags before passing them to the kses filter.
+ # - Run Markdown on excerpt then remove paragraph tags.
+ if (MARKDOWN_WP_COMMENTS) {
+ remove_filter('comment_text', 'wpautop', 30);
+ remove_filter('comment_text', 'make_clickable');
+ add_filter('pre_comment_content', 'Markdown', 6);
+ add_filter('pre_comment_content', 'mdwp_hide_tags', 8);
+ add_filter('pre_comment_content', 'mdwp_show_tags', 12);
+ add_filter('get_comment_text', 'Markdown', 6);
+ add_filter('get_comment_excerpt', 'Markdown', 6);
+ add_filter('get_comment_excerpt', 'mdwp_strip_p', 7);
+
+ global $mdwp_hidden_tags, $mdwp_placeholders;
+ $mdwp_hidden_tags = explode(' ',
+ '<p> </p> <pre> </pre> <ol> </ol> <ul> </ul> <li> </li>');
+ $mdwp_placeholders = explode(' ', str_rot13(
+ 'pEj07ZbbBZ U1kqgh4w4p pre2zmeN6K QTi31t9pre ol0MP1jzJR '.
+ 'ML5IjmbRol ulANi1NsGY J7zRLJqPul liA8ctl16T K9nhooUHli'));
+ }
+
+ function mdwp_add_p($text) {
+ if (!preg_match('{^$|^<(p|ul|ol|dl|pre|blockquote)>}i', $text)) {
+ $text = '<p>'.$text.'</p>';
+ $text = preg_replace('{\n{2,}}', "</p>\n\n<p>", $text);
+ }
+ return $text;
+ }
+
+ function mdwp_strip_p($t) { return preg_replace('{</?p>}i', '', $t); }
+
+ function mdwp_hide_tags($text) {
+ global $mdwp_hidden_tags, $mdwp_placeholders;
+ return str_replace($mdwp_hidden_tags, $mdwp_placeholders, $text);
+ }
+ function mdwp_show_tags($text) {
+ global $mdwp_hidden_tags, $mdwp_placeholders;
+ return str_replace($mdwp_placeholders, $mdwp_hidden_tags, $text);
+ }
+}
+
+
+### bBlog Plugin Info ###
+
+function identify_modifier_markdown() {
+ return array(
+ 'name' => 'markdown',
+ 'type' => 'modifier',
+ 'nicename' => 'PHP Markdown Extra',
+ 'description' => 'A text-to-HTML conversion tool for web writers',
+ 'authors' => 'Michel Fortin and John Gruber',
+ 'licence' => 'GPL',
+ 'version' => MARKDOWNEXTRA_VERSION,
+ 'help' => '<a href="http://daringfireball.net/projects/markdown/syntax">Markdown syntax</a> allows you to write using an easy-to-read, easy-to-write plain text format. Based on the original Perl version by <a href="http://daringfireball.net/">John Gruber</a>. <a href="http://michelf.com/projects/php-markdown/">More...</a>',
+ );
+}
+
+
+### Smarty Modifier Interface ###
+
+function smarty_modifier_markdown($text) {
+ return Markdown($text);
+}
+
+
+### Textile Compatibility Mode ###
+
+# Rename this file to "classTextile.php" and it can replace Textile everywhere.
+
+if (strcasecmp(substr(__FILE__, -16), "classTextile.php") == 0) {
+ # Try to include PHP SmartyPants. Should be in the same directory.
+ @include_once 'smartypants.php';
+ # Fake Textile class. It calls Markdown instead.
+ class Textile {
+ function TextileThis($text, $lite='', $encode='') {
+ if ($lite == '' && $encode == '') $text = Markdown($text);
+ if (function_exists('SmartyPants')) $text = SmartyPants($text);
+ return $text;
+ }
+ # Fake restricted version: restrictions are not supported for now.
+ function TextileRestricted($text, $lite='', $noimage='') {
+ return $this->TextileThis($text, $lite);
+ }
+ # Workaround to ensure compatibility with TextPattern 4.0.3.
+ function blockLite($text) { return $text; }
+ }
+}
+
+
+
+#
+# Markdown Parser Class
+#
+
+class Markdown_Parser {
+
+ # Regex to match balanced [brackets].
+ # Needed to insert a maximum bracked depth while converting to PHP.
+ var $nested_brackets_depth = 6;
+ var $nested_brackets_re;
+
+ var $nested_url_parenthesis_depth = 4;
+ var $nested_url_parenthesis_re;
+
+ # Table of hash values for escaped characters:
+ var $escape_chars = '\`*_{}[]()>#+-.!';
+ var $escape_chars_re;
+
+ # Change to ">" for HTML output.
+ var $empty_element_suffix = MARKDOWN_EMPTY_ELEMENT_SUFFIX;
+ var $tab_width = MARKDOWN_TAB_WIDTH;
+
+ # Change to `true` to disallow markup or entities.
+ var $no_markup = false;
+ var $no_entities = false;
+
+ # Predefined urls and titles for reference links and images.
+ var $predef_urls = array();
+ var $predef_titles = array();
+
+
+ function Markdown_Parser() {
+ #
+ # Constructor function. Initialize appropriate member variables.
+ #
+ $this->_initDetab();
+ $this->prepareItalicsAndBold();
+
+ $this->nested_brackets_re =
+ str_repeat('(?>[^\[\]]+|\[', $this->nested_brackets_depth).
+ str_repeat('\])*', $this->nested_brackets_depth);
+
+ $this->nested_url_parenthesis_re =
+ str_repeat('(?>[^()\s]+|\(', $this->nested_url_parenthesis_depth).
+ str_repeat('(?>\)))*', $this->nested_url_parenthesis_depth);
+
+ $this->escape_chars_re = '['.preg_quote($this->escape_chars).']';
+
+ # Sort document, block, and span gamut in ascendent priority order.
+ asort($this->document_gamut);
+ asort($this->block_gamut);
+ asort($this->span_gamut);
+ }
+
+
+ # Internal hashes used during transformation.
+ var $urls = array();
+ var $titles = array();
+ var $html_hashes = array();
+
+ # Status flag to avoid invalid nesting.
+ var $in_anchor = false;
+
+
+ function setup() {
+ #
+ # Called before the transformation process starts to setup parser
+ # states.
+ #
+ # Clear global hashes.
+ $this->urls = $this->predef_urls;
+ $this->titles = $this->predef_titles;
+ $this->html_hashes = array();
+
+ $in_anchor = false;
+ }
+
+ function teardown() {
+ #
+ # Called after the transformation process to clear any variable
+ # which may be taking up memory unnecessarly.
+ #
+ $this->urls = array();
+ $this->titles = array();
+ $this->html_hashes = array();
+ }
+
+
+ function transform($text) {
+ #
+ # Main function. Performs some preprocessing on the input text
+ # and pass it through the document gamut.
+ #
+ $this->setup();
+
+ # Remove UTF-8 BOM and marker character in input, if present.
+ $text = preg_replace('{^\xEF\xBB\xBF|\x1A}', '', $text);
+
+ # Standardize line endings:
+ # DOS to Unix and Mac to Unix
+ $text = preg_replace('{\r\n?}', "\n", $text);
+
+ # Make sure $text ends with a couple of newlines:
+ $text .= "\n\n";
+
+ # Convert all tabs to spaces.
+ $text = $this->detab($text);
+
+ # Turn block-level HTML blocks into hash entries
+ $text = $this->hashHTMLBlocks($text);
+
+ # Strip any lines consisting only of spaces and tabs.
+ # This makes subsequent regexen easier to write, because we can
+ # match consecutive blank lines with /\n+/ instead of something
+ # contorted like /[ ]*\n+/ .
+ $text = preg_replace('/^[ ]+$/m', '', $text);
+
+ # Run document gamut methods.
+ foreach ($this->document_gamut as $method => $priority) {
+ $text = $this->$method($text);
+ }
+
+ $this->teardown();
+
+ return $text . "\n";
+ }
+
+ var $document_gamut = array(
+ # Strip link definitions, store in hashes.
+ "stripLinkDefinitions" => 20,
+
+ "runBasicBlockGamut" => 30,
+ );
+
+
+ function stripLinkDefinitions($text) {
+ #
+ # Strips link definitions from text, stores the URLs and titles in
+ # hash references.
+ #
+ $less_than_tab = $this->tab_width - 1;
+
+ # Link defs are in the form: ^[id]: url "optional title"
+ $text = preg_replace_callback('{
+ ^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?: # id = $1
+ [ ]*
+ \n? # maybe *one* newline
+ [ ]*
+ (?:
+ <(.+?)> # url = $2
+ |
+ (\S+?) # url = $3
+ )
+ [ ]*
+ \n? # maybe one newline
+ [ ]*
+ (?:
+ (?<=\s) # lookbehind for whitespace
+ ["(]
+ (.*?) # title = $4
+ [")]
+ [ ]*
+ )? # title is optional
+ (?:\n+|\Z)
+ }xm',
+ array(&$this, '_stripLinkDefinitions_callback'),
+ $text);
+ return $text;
+ }
+ function _stripLinkDefinitions_callback($matches) {
+ $link_id = strtolower($matches[1]);
+ $url = $matches[2] == '' ? $matches[3] : $matches[2];
+ $this->urls[$link_id] = $url;
+ $this->titles[$link_id] =& $matches[4];
+ return ''; # String that will replace the block
+ }
+
+
+ function hashHTMLBlocks($text) {
+ if ($this->no_markup) return $text;
+
+ $less_than_tab = $this->tab_width - 1;
+
+ # Hashify HTML blocks:
+ # We only want to do this for block-level HTML tags, such as headers,
+ # lists, and tables. That's because we still want to wrap <p>s around
+ # "paragraphs" that are wrapped in non-block-level tags, such as anchors,
+ # phrase emphasis, and spans. The list of tags we're looking for is
+ # hard-coded:
+ #
+ # * List "a" is made of tags which can be both inline or block-level.
+ # These will be treated block-level when the start tag is alone on
+ # its line, otherwise they're not matched here and will be taken as
+ # inline later.
+ # * List "b" is made of tags which are always block-level;
+ #
+ $block_tags_a_re = 'ins|del';
+ $block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'.
+ 'script|noscript|form|fieldset|iframe|math';
+
+ # Regular expression for the content of a block tag.
+ $nested_tags_level = 4;
+ $attr = '
+ (?> # optional tag attributes
+ \s # starts with whitespace
+ (?>
+ [^>"/]+ # text outside quotes
+ |
+ /+(?!>) # slash not followed by ">"
+ |
+ "[^"]*" # text inside double quotes (tolerate ">")
+ |
+ \'[^\']*\' # text inside single quotes (tolerate ">")
+ )*
+ )?
+ ';
+ $content =
+ str_repeat('
+ (?>
+ [^<]+ # content without tag
+ |
+ <\2 # nested opening tag
+ '.$attr.' # attributes
+ (?>
+ />
+ |
+ >', $nested_tags_level). # end of opening tag
+ '.*?'. # last level nested tag content
+ str_repeat('
+ </\2\s*> # closing nested tag
+ )
+ |
+ <(?!/\2\s*> # other tags with a different name
+ )
+ )*',
+ $nested_tags_level);
+ $content2 = str_replace('\2', '\3', $content);
+
+ # First, look for nested blocks, e.g.:
+ # <div>
+ # <div>
+ # tags for inner block must be indented.
+ # </div>
+ # </div>
+ #
+ # The outermost tags must start at the left margin for this to match, and
+ # the inner nested divs must be indented.
+ # We need to do this before the next, more liberal match, because the next
+ # match will start at the first `<div>` and stop at the first `</div>`.
+ $text = preg_replace_callback('{(?>
+ (?>
+ (?<=\n\n) # Starting after a blank line
+ | # or
+ \A\n? # the beginning of the doc
+ )
+ ( # save in $1
+
+ # Match from `\n<tag>` to `</tag>\n`, handling nested tags
+ # in between.
+
+ [ ]{0,'.$less_than_tab.'}
+ <('.$block_tags_b_re.')# start tag = $2
+ '.$attr.'> # attributes followed by > and \n
+ '.$content.' # content, support nesting
+ </\2> # the matching end tag
+ [ ]* # trailing spaces/tabs
+ (?=\n+|\Z) # followed by a newline or end of document
+
+ | # Special version for tags of group a.
+
+ [ ]{0,'.$less_than_tab.'}
+ <('.$block_tags_a_re.')# start tag = $3
+ '.$attr.'>[ ]*\n # attributes followed by >
+ '.$content2.' # content, support nesting
+ </\3> # the matching end tag
+ [ ]* # trailing spaces/tabs
+ (?=\n+|\Z) # followed by a newline or end of document
+
+ | # Special case just for <hr />. It was easier to make a special
+ # case than to make the other regex more complicated.
+
+ [ ]{0,'.$less_than_tab.'}
+ <(hr) # start tag = $2
+ '.$attr.' # attributes
+ /?> # the matching end tag
+ [ ]*
+ (?=\n{2,}|\Z) # followed by a blank line or end of document
+
+ | # Special case for standalone HTML comments:
+
+ [ ]{0,'.$less_than_tab.'}
+ (?s:
+ <!-- .*? -->
+ )
+ [ ]*
+ (?=\n{2,}|\Z) # followed by a blank line or end of document
+
+ | # PHP and ASP-style processor instructions (<? and <%)
+
+ [ ]{0,'.$less_than_tab.'}
+ (?s:
+ <([?%]) # $2
+ .*?
+ \2>
+ )
+ [ ]*
+ (?=\n{2,}|\Z) # followed by a blank line or end of document
+
+ )
+ )}Sxmi',
+ array(&$this, '_hashHTMLBlocks_callback'),
+ $text);
+
+ return $text;
+ }
+ function _hashHTMLBlocks_callback($matches) {
+ $text = $matches[1];
+ $key = $this->hashBlock($text);
+ return "\n\n$key\n\n";
+ }
+
+
+ function hashPart($text, $boundary = 'X') {
+ #
+ # Called whenever a tag must be hashed when a function insert an atomic
+ # element in the text stream. Passing $text to through this function gives
+ # a unique text-token which will be reverted back when calling unhash.
+ #
+ # The $boundary argument specify what character should be used to surround
+ # the token. By convension, "B" is used for block elements that needs not
+ # to be wrapped into paragraph tags at the end, ":" is used for elements
+ # that are word separators and "X" is used in the general case.
+ #
+ # Swap back any tag hash found in $text so we do not have to `unhash`
+ # multiple times at the end.
+ $text = $this->unhash($text);
+
+ # Then hash the block.
+ static $i = 0;
+ $key = "$boundary\x1A" . ++$i . $boundary;
+ $this->html_hashes[$key] = $text;
+ return $key; # String that will replace the tag.
+ }
+
+
+ function hashBlock($text) {
+ #
+ # Shortcut function for hashPart with block-level boundaries.
+ #
+ return $this->hashPart($text, 'B');
+ }
+
+
+ var $block_gamut = array(
+ #
+ # These are all the transformations that form block-level
+ # tags like paragraphs, headers, and list items.
+ #
+ "doHeaders" => 10,
+ "doHorizontalRules" => 20,
+
+ "doLists" => 40,
+ "doCodeBlocks" => 50,
+ "doBlockQuotes" => 60,
+ );
+
+ function runBlockGamut($text) {
+ #
+ # Run block gamut tranformations.
+ #
+ # We need to escape raw HTML in Markdown source before doing anything
+ # else. This need to be done for each block, and not only at the
+ # begining in the Markdown function since hashed blocks can be part of
+ # list items and could have been indented. Indented blocks would have
+ # been seen as a code block in a previous pass of hashHTMLBlocks.
+ $text = $this->hashHTMLBlocks($text);
+
+ return $this->runBasicBlockGamut($text);
+ }
+
+ function runBasicBlockGamut($text) {
+ #
+ # Run block gamut tranformations, without hashing HTML blocks. This is
+ # useful when HTML blocks are known to be already hashed, like in the first
+ # whole-document pass.
+ #
+ foreach ($this->block_gamut as $method => $priority) {
+ $text = $this->$method($text);
+ }
+
+ # Finally form paragraph and restore hashed blocks.
+ $text = $this->formParagraphs($text);
+
+ return $text;
+ }
+
+
+ function doHorizontalRules($text) {
+ # Do Horizontal Rules:
+ return preg_replace(
+ '{
+ ^[ ]{0,3} # Leading space
+ ([-*_]) # $1: First marker
+ (?> # Repeated marker group
+ [ ]{0,2} # Zero, one, or two spaces.
+ \1 # Marker character
+ ){2,} # Group repeated at least twice
+ [ ]* # Tailing spaces
+ $ # End of line.
+ }mx',
+ "\n".$this->hashBlock("<hr$this->empty_element_suffix")."\n",
+ $text);
+ }
+
+
+ var $span_gamut = array(
+ #
+ # These are all the transformations that occur *within* block-level
+ # tags like paragraphs, headers, and list items.
+ #
+ # Process character escapes, code spans, and inline HTML
+ # in one shot.
+ "parseSpan" => -30,
+
+ # Process anchor and image tags. Images must come first,
+ # because ![foo][f] looks like an anchor.
+ "doImages" => 10,
+ "doAnchors" => 20,
+
+ # Make links out of things like `<http://example.com/>`
+ # Must come after doAnchors, because you can use < and >
+ # delimiters in inline links like [this](<url>).
+ "doAutoLinks" => 30,
+ "encodeAmpsAndAngles" => 40,
+
+ "doItalicsAndBold" => 50,
+ "doHardBreaks" => 60,
+ );
+
+ function runSpanGamut($text) {
+ #
+ # Run span gamut tranformations.
+ #
+ foreach ($this->span_gamut as $method => $priority) {
+ $text = $this->$method($text);
+ }
+
+ return $text;
+ }
+
+
+ function doHardBreaks($text) {
+ # Do hard breaks:
+ return preg_replace_callback('/ {2,}\n/',
+ array(&$this, '_doHardBreaks_callback'), $text);
+ }
+ function _doHardBreaks_callback($matches) {
+ return $this->hashPart("<br$this->empty_element_suffix\n");
+ }
+
+
+ function doAnchors($text) {
+ #
+ # Turn Markdown link shortcuts into XHTML <a> tags.
+ #
+ if ($this->in_anchor) return $text;
+ $this->in_anchor = true;
+
+ #
+ # First, handle reference-style links: [link text] [id]
+ #
+ $text = preg_replace_callback('{
+ ( # wrap whole match in $1
+ \[
+ ('.$this->nested_brackets_re.') # link text = $2
+ \]
+
+ [ ]? # one optional space
+ (?:\n[ ]*)? # one optional newline followed by spaces
+
+ \[
+ (.*?) # id = $3
+ \]
+ )
+ }xs',
+ array(&$this, '_doAnchors_reference_callback'), $text);
+
+ #
+ # Next, inline-style links: [link text](url "optional title")
+ #
+ $text = preg_replace_callback('{
+ ( # wrap whole match in $1
+ \[
+ ('.$this->nested_brackets_re.') # link text = $2
+ \]
+ \( # literal paren
+ [ \n]*
+ (?:
+ <(.+?)> # href = $3
+ |
+ ('.$this->nested_url_parenthesis_re.') # href = $4
+ )
+ [ \n]*
+ ( # $5
+ ([\'"]) # quote char = $6
+ (.*?) # Title = $7
+ \6 # matching quote
+ [ \n]* # ignore any spaces/tabs between closing quote and )
+ )? # title is optional
+ \)
+ )
+ }xs',
+ array(&$this, '_doAnchors_inline_callback'), $text);
+
+ #
+ # Last, handle reference-style shortcuts: [link text]
+ # These must come last in case you've also got [link text][1]
+ # or [link text](/foo)
+ #
+ $text = preg_replace_callback('{
+ ( # wrap whole match in $1
+ \[
+ ([^\[\]]+) # link text = $2; can\'t contain [ or ]
+ \]
+ )
+ }xs',
+ array(&$this, '_doAnchors_reference_callback'), $text);
+
+ $this->in_anchor = false;
+ return $text;
+ }
+ function _doAnchors_reference_callback($matches) {
+ $whole_match = $matches[1];
+ $link_text = $matches[2];
+ $link_id =& $matches[3];
+
+ if ($link_id == "") {
+ # for shortcut links like [this][] or [this].
+ $link_id = $link_text;
+ }
+
+ # lower-case and turn embedded newlines into spaces
+ $link_id = strtolower($link_id);
+ $link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
+
+ if (isset($this->urls[$link_id])) {
+ $url = $this->urls[$link_id];
+ $url = $this->encodeAttribute($url);
+
+ $result = "<a href=\"$url\"";
+ if ( isset( $this->titles[$link_id] ) ) {
+ $title = $this->titles[$link_id];
+ $title = $this->encodeAttribute($title);
+ $result .= " title=\"$title\"";
+ }
+
+ $link_text = $this->runSpanGamut($link_text);
+ $result .= ">$link_text</a>";
+ $result = $this->hashPart($result);
+ }
+ else {
+ $result = $whole_match;
+ }
+ return $result;
+ }
+ function _doAnchors_inline_callback($matches) {
+ $whole_match = $matches[1];
+ $link_text = $this->runSpanGamut($matches[2]);
+ $url = $matches[3] == '' ? $matches[4] : $matches[3];
+ $title =& $matches[7];
+
+ $url = $this->encodeAttribute($url);
+
+ $result = "<a href=\"$url\"";
+ if (isset($title)) {
+ $title = $this->encodeAttribute($title);
+ $result .= " title=\"$title\"";
+ }
+
+ $link_text = $this->runSpanGamut($link_text);
+ $result .= ">$link_text</a>";
+
+ return $this->hashPart($result);
+ }
+
+
+ function doImages($text) {
+ #
+ # Turn Markdown image shortcuts into <img> tags.
+ #
+ #
+ # First, handle reference-style labeled images: ![alt text][id]
+ #
+ $text = preg_replace_callback('{
+ ( # wrap whole match in $1
+ !\[
+ ('.$this->nested_brackets_re.') # alt text = $2
+ \]
+
+ [ ]? # one optional space
+ (?:\n[ ]*)? # one optional newline followed by spaces
+
+ \[
+ (.*?) # id = $3
+ \]
+
+ )
+ }xs',
+ array(&$this, '_doImages_reference_callback'), $text);
+
+ #
+ # Next, handle inline images: ![alt text](url "optional title")
+ # Don't forget: encode * and _
+ #
+ $text = preg_replace_callback('{
+ ( # wrap whole match in $1
+ !\[
+ ('.$this->nested_brackets_re.') # alt text = $2
+ \]
+ \s? # One optional whitespace character
+ \( # literal paren
+ [ \n]*
+ (?:
+ <(\S*)> # src url = $3
+ |
+ ('.$this->nested_url_parenthesis_re.') # src url = $4
+ )
+ [ \n]*
+ ( # $5
+ ([\'"]) # quote char = $6
+ (.*?) # title = $7
+ \6 # matching quote
+ [ \n]*
+ )? # title is optional
+ \)
+ )
+ }xs',
+ array(&$this, '_doImages_inline_callback'), $text);
+
+ return $text;
+ }
+ function _doImages_reference_callback($matches) {
+ $whole_match = $matches[1];
+ $alt_text = $matches[2];
+ $link_id = strtolower($matches[3]);
+
+ if ($link_id == "") {
+ $link_id = strtolower($alt_text); # for shortcut links like ![this][].
+ }
+
+ $alt_text = $this->encodeAttribute($alt_text);
+ if (isset($this->urls[$link_id])) {
+ $url = $this->encodeAttribute($this->urls[$link_id]);
+ $result = "<img src=\"$url\" alt=\"$alt_text\"";
+ if (isset($this->titles[$link_id])) {
+ $title = $this->titles[$link_id];
+ $title = $this->encodeAttribute($title);
+ $result .= " title=\"$title\"";
+ }
+ $result .= $this->empty_element_suffix;
+ $result = $this->hashPart($result);
+ }
+ else {
+ # If there's no such link ID, leave intact:
+ $result = $whole_match;
+ }
+
+ return $result;
+ }
+ function _doImages_inline_callback($matches) {
+ $whole_match = $matches[1];
+ $alt_text = $matches[2];
+ $url = $matches[3] == '' ? $matches[4] : $matches[3];
+ $title =& $matches[7];
+
+ $alt_text = $this->encodeAttribute($alt_text);
+ $url = $this->encodeAttribute($url);
+ $result = "<img src=\"$url\" alt=\"$alt_text\"";
+ if (isset($title)) {
+ $title = $this->encodeAttribute($title);
+ $result .= " title=\"$title\""; # $title already quoted
+ }
+ $result .= $this->empty_element_suffix;
+
+ return $this->hashPart($result);
+ }
+
+
+ function doHeaders($text) {
+ # Setext-style headers:
+ # Header 1
+ # ========
+ #
+ # Header 2
+ # --------
+ #
+ $text = preg_replace_callback('{ ^(.+?)[ ]*\n(=+|-+)[ ]*\n+ }mx',
+ array(&$this, '_doHeaders_callback_setext'), $text);
+
+ # atx-style headers:
+ # # Header 1
+ # ## Header 2
+ # ## Header 2 with closing hashes ##
+ # ...
+ # ###### Header 6
+ #
+ $text = preg_replace_callback('{
+ ^(\#{1,6}) # $1 = string of #\'s
+ [ ]*
+ (.+?) # $2 = Header text
+ [ ]*
+ \#* # optional closing #\'s (not counted)
+ \n+
+ }xm',
+ array(&$this, '_doHeaders_callback_atx'), $text);
+
+ return $text;
+ }
+ function _doHeaders_callback_setext($matches) {
+ # Terrible hack to check we haven't found an empty list item.
+ if ($matches[2] == '-' && preg_match('{^-(?: |$)}', $matches[1]))
+ return $matches[0];
+
+ $level = $matches[2]{0} == '=' ? 1 : 2;
+ $block = "<h$level>".$this->runSpanGamut($matches[1])."</h$level>";
+ return "\n" . $this->hashBlock($block) . "\n\n";
+ }
+ function _doHeaders_callback_atx($matches) {
+ $level = strlen($matches[1]);
+ $block = "<h$level>".$this->runSpanGamut($matches[2])."</h$level>";
+ return "\n" . $this->hashBlock($block) . "\n\n";
+ }
+
+
+ function doLists($text) {
+ #
+ # Form HTML ordered (numbered) and unordered (bulleted) lists.
+ #
+ $less_than_tab = $this->tab_width - 1;
+
+ # Re-usable patterns to match list item bullets and number markers:
+ $marker_ul_re = '[*+-]';
+ $marker_ol_re = '\d+[.]';
+ $marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
+
+ $markers_relist = array(
+ $marker_ul_re => $marker_ol_re,
+ $marker_ol_re => $marker_ul_re,
+ );
+
+ foreach ($markers_relist as $marker_re => $other_marker_re) {
+ # Re-usable pattern to match any entirel ul or ol list:
+ $whole_list_re = '
+ ( # $1 = whole list
+ ( # $2
+ ([ ]{0,'.$less_than_tab.'}) # $3 = number of spaces
+ ('.$marker_re.') # $4 = first list item marker
+ [ ]+
+ )
+ (?s:.+?)
+ ( # $5
+ \z
+ |
+ \n{2,}
+ (?=\S)
+ (?! # Negative lookahead for another list item marker
+ [ ]*
+ '.$marker_re.'[ ]+
+ )
+ |
+ (?= # Lookahead for another kind of list
+ \n
+ \3 # Must have the same indentation
+ '.$other_marker_re.'[ ]+
+ )
+ )
+ )
+ '; // mx
+
+ # We use a different prefix before nested lists than top-level lists.
+ # See extended comment in _ProcessListItems().
+
+ if ($this->list_level) {
+ $text = preg_replace_callback('{
+ ^
+ '.$whole_list_re.'
+ }mx',
+ array(&$this, '_doLists_callback'), $text);
+ }
+ else {
+ $text = preg_replace_callback('{
+ (?:(?<=\n)\n|\A\n?) # Must eat the newline
+ '.$whole_list_re.'
+ }mx',
+ array(&$this, '_doLists_callback'), $text);
+ }
+ }
+
+ return $text;
+ }
+ function _doLists_callback($matches) {
+ # Re-usable patterns to match list item bullets and number markers:
+ $marker_ul_re = '[*+-]';
+ $marker_ol_re = '\d+[.]';
+ $marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
+
+ $list = $matches[1];
+ $list_type = preg_match("/$marker_ul_re/", $matches[4]) ? "ul" : "ol";
+
+ $marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re );
+
+ $list .= "\n";
+ $result = $this->processListItems($list, $marker_any_re);
+
+ $result = $this->hashBlock("<$list_type>\n" . $result . "</$list_type>");
+ return "\n". $result ."\n\n";
+ }
+
+ var $list_level = 0;
+
+ function processListItems($list_str, $marker_any_re) {
+ #
+ # Process the contents of a single ordered or unordered list, splitting it
+ # into individual list items.
+ #
+ # The $this->list_level global keeps track of when we're inside a list.
+ # Each time we enter a list, we increment it; when we leave a list,
+ # we decrement. If it's zero, we're not in a list anymore.
+ #
+ # We do this because when we're not inside a list, we want to treat
+ # something like this:
+ #
+ # I recommend upgrading to version
+ # 8. Oops, now this line is treated
+ # as a sub-list.
+ #
+ # As a single paragraph, despite the fact that the second line starts
+ # with a digit-period-space sequence.
+ #
+ # Whereas when we're inside a list (or sub-list), that line will be
+ # treated as the start of a sub-list. What a kludge, huh? This is
+ # an aspect of Markdown's syntax that's hard to parse perfectly
+ # without resorting to mind-reading. Perhaps the solution is to
+ # change the syntax rules such that sub-lists must start with a
+ # starting cardinal number; e.g. "1." or "a.".
+
+ $this->list_level++;
+
+ # trim trailing blank lines:
+ $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
+
+ $list_str = preg_replace_callback('{
+ (\n)? # leading line = $1
+ (^[ ]*) # leading whitespace = $2
+ ('.$marker_any_re.' # list marker and space = $3
+ (?:[ ]+|(?=\n)) # space only required if item is not empty
+ )
+ ((?s:.*?)) # list item text = $4
+ (?:(\n+(?=\n))|\n) # tailing blank line = $5
+ (?= \n* (\z | \2 ('.$marker_any_re.') (?:[ ]+|(?=\n))))
+ }xm',
+ array(&$this, '_processListItems_callback'), $list_str);
+
+ $this->list_level--;
+ return $list_str;
+ }
+ function _processListItems_callback($matches) {
+ $item = $matches[4];
+ $leading_line =& $matches[1];
+ $leading_space =& $matches[2];
+ $marker_space = $matches[3];
+ $tailing_blank_line =& $matches[5];
+
+ if ($leading_line || $tailing_blank_line ||
+ preg_match('/\n{2,}/', $item))
+ {
+ # Replace marker with the appropriate whitespace indentation
+ $item = $leading_space . str_repeat(' ', strlen($marker_space)) . $item;
+ $item = $this->runBlockGamut($this->outdent($item)."\n");
+ }
+ else {
+ # Recursion for sub-lists:
+ $item = $this->doLists($this->outdent($item));
+ $item = preg_replace('/\n+$/', '', $item);
+ $item = $this->runSpanGamut($item);
+ }
+
+ return "<li>" . $item . "</li>\n";
+ }
+
+
+ function doCodeBlocks($text) {
+ #
+ # Process Markdown `<pre><code>` blocks.
+ #
+ $text = preg_replace_callback('{
+ (?:\n\n|\A\n?)
+ ( # $1 = the code block -- one or more lines, starting with a space/tab
+ (?>
+ [ ]{'.$this->tab_width.'} # Lines must start with a tab or a tab-width of spaces
+ .*\n+
+ )+
+ )
+ ((?=^[ ]{0,'.$this->tab_width.'}\S)|\Z) # Lookahead for non-space at line-start, or end of doc
+ }xm',
+ array(&$this, '_doCodeBlocks_callback'), $text);
+
+ return $text;
+ }
+ function _doCodeBlocks_callback($matches) {
+ $codeblock = $matches[1];
+
+ $codeblock = $this->outdent($codeblock);
+ $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
+
+ # trim leading newlines and trailing newlines
+ $codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
+
+ $codeblock = "<pre><code>$codeblock\n</code></pre>";
+ return "\n\n".$this->hashBlock($codeblock)."\n\n";
+ }
+
+
+ function makeCodeSpan($code) {
+ #
+ # Create a code span markup for $code. Called from handleSpanToken.
+ #
+ $code = htmlspecialchars(trim($code), ENT_NOQUOTES);
+ return $this->hashPart("<code>$code</code>");
+ }
+
+
+ var $em_relist = array(
+ '' => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![.,:;]\s)',
+ '*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
+ '_' => '(?<=\S|^)(?<!_)_(?!_)',
+ );
+ var $strong_relist = array(
+ '' => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![.,:;]\s)',
+ '**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
+ '__' => '(?<=\S|^)(?<!_)__(?!_)',
+ );
+ var $em_strong_relist = array(
+ '' => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![.,:;]\s)',
+ '***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
+ '___' => '(?<=\S|^)(?<!_)___(?!_)',
+ );
+ var $em_strong_prepared_relist;
+
+ function prepareItalicsAndBold() {
+ #
+ # Prepare regular expressions for searching emphasis tokens in any
+ # context.
+ #
+ foreach ($this->em_relist as $em => $em_re) {
+ foreach ($this->strong_relist as $strong => $strong_re) {
+ # Construct list of allowed token expressions.
+ $token_relist = array();
+ if (isset($this->em_strong_relist["$em$strong"])) {
+ $token_relist[] = $this->em_strong_relist["$em$strong"];
+ }
+ $token_relist[] = $em_re;
+ $token_relist[] = $strong_re;
+
+ # Construct master expression from list.
+ $token_re = '{('. implode('|', $token_relist) .')}';
+ $this->em_strong_prepared_relist["$em$strong"] = $token_re;
+ }
+ }
+ }
+
+ function doItalicsAndBold($text) {
+ $token_stack = array('');
+ $text_stack = array('');
+ $em = '';
+ $strong = '';
+ $tree_char_em = false;
+
+ while (1) {
+ #
+ # Get prepared regular expression for seraching emphasis tokens
+ # in current context.
+ #
+ $token_re = $this->em_strong_prepared_relist["$em$strong"];
+
+ #
+ # Each loop iteration search for the next emphasis token.
+ # Each token is then passed to handleSpanToken.
+ #
+ $parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
+ $text_stack[0] .= $parts[0];
+ $token =& $parts[1];
+ $text =& $parts[2];
+
+ if (empty($token)) {
+ # Reached end of text span: empty stack without emitting.
+ # any more emphasis.
+ while ($token_stack[0]) {
+ $text_stack[1] .= array_shift($token_stack);
+ $text_stack[0] .= array_shift($text_stack);
+ }
+ break;
+ }
+
+ $token_len = strlen($token);
+ if ($tree_char_em) {
+ # Reached closing marker while inside a three-char emphasis.
+ if ($token_len == 3) {
+ # Three-char closing marker, close em and strong.
+ array_shift($token_stack);
+ $span = array_shift($text_stack);
+ $span = $this->runSpanGamut($span);
+ $span = "<strong><em>$span</em></strong>";
+ $text_stack[0] .= $this->hashPart($span);
+ $em = '';
+ $strong = '';
+ } else {
+ # Other closing marker: close one em or strong and
+ # change current token state to match the other
+ $token_stack[0] = str_repeat($token{0}, 3-$token_len);
+ $tag = $token_len == 2 ? "strong" : "em";
+ $span = $text_stack[0];
+ $span = $this->runSpanGamut($span);
+ $span = "<$tag>$span</$tag>";
+ $text_stack[0] = $this->hashPart($span);
+ $$tag = ''; # $$tag stands for $em or $strong
+ }
+ $tree_char_em = false;
+ } else if ($token_len == 3) {
+ if ($em) {
+ # Reached closing marker for both em and strong.
+ # Closing strong marker:
+ for ($i = 0; $i < 2; ++$i) {
+ $shifted_token = array_shift($token_stack);
+ $tag = strlen($shifted_token) == 2 ? "strong" : "em";
+ $span = array_shift($text_stack);
+ $span = $this->runSpanGamut($span);
+ $span = "<$tag>$span</$tag>";
+ $text_stack[0] .= $this->hashPart($span);
+ $$tag = ''; # $$tag stands for $em or $strong
+ }
+ } else {
+ # Reached opening three-char emphasis marker. Push on token
+ # stack; will be handled by the special condition above.
+ $em = $token{0};
+ $strong = "$em$em";
+ array_unshift($token_stack, $token);
+ array_unshift($text_stack, '');
+ $tree_char_em = true;
+ }
+ } else if ($token_len == 2) {
+ if ($strong) {
+ # Unwind any dangling emphasis marker:
+ if (strlen($token_stack[0]) == 1) {
+ $text_stack[1] .= array_shift($token_stack);
+ $text_stack[0] .= array_shift($text_stack);
+ }
+ # Closing strong marker:
+ array_shift($token_stack);
+ $span = array_shift($text_stack);
+ $span = $this->runSpanGamut($span);
+ $span = "<strong>$span</strong>";
+ $text_stack[0] .= $this->hashPart($span);
+ $strong = '';
+ } else {
+ array_unshift($token_stack, $token);
+ array_unshift($text_stack, '');
+ $strong = $token;
+ }
+ } else {
+ # Here $token_len == 1
+ if ($em) {
+ if (strlen($token_stack[0]) == 1) {
+ # Closing emphasis marker:
+ array_shift($token_stack);
+ $span = array_shift($text_stack);
+ $span = $this->runSpanGamut($span);
+ $span = "<em>$span</em>";
+ $text_stack[0] .= $this->hashPart($span);
+ $em = '';
+ } else {
+ $text_stack[0] .= $token;
+ }
+ } else {
+ array_unshift($token_stack, $token);
+ array_unshift($text_stack, '');
+ $em = $token;
+ }
+ }
+ }
+ return $text_stack[0];
+ }
+
+
+ function doBlockQuotes($text) {
+ $text = preg_replace_callback('/
+ ( # Wrap whole match in $1
+ (?>
+ ^[ ]*>[ ]? # ">" at the start of a line
+ .+\n # rest of the first line
+ (.+\n)* # subsequent consecutive lines
+ \n* # blanks
+ )+
+ )
+ /xm',
+ array(&$this, '_doBlockQuotes_callback'), $text);
+
+ return $text;
+ }
+ function _doBlockQuotes_callback($matches) {
+ $bq = $matches[1];
+ # trim one level of quoting - trim whitespace-only lines
+ $bq = preg_replace('/^[ ]*>[ ]?|^[ ]+$/m', '', $bq);
+ $bq = $this->runBlockGamut($bq); # recurse
+
+ $bq = preg_replace('/^/m', " ", $bq);
+ # These leading spaces cause problem with <pre> content,
+ # so we need to fix that:
+ $bq = preg_replace_callback('{(\s*<pre>.+?</pre>)}sx',
+ array(&$this, '_doBlockQuotes_callback2'), $bq);
+
+ return "\n". $this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\n\n";
+ }
+ function _doBlockQuotes_callback2($matches) {
+ $pre = $matches[1];
+ $pre = preg_replace('/^ /m', '', $pre);
+ return $pre;
+ }
+
+
+ function formParagraphs($text) {
+ #
+ # Params:
+ # $text - string to process with html <p> tags
+ #
+ # Strip leading and trailing lines:
+ $text = preg_replace('/\A\n+|\n+\z/', '', $text);
+
+ $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
+
+ #
+ # Wrap <p> tags and unhashify HTML blocks
+ #
+ foreach ($grafs as $key => $value) {
+ if (!preg_match('/^B\x1A[0-9]+B$/', $value)) {
+ # Is a paragraph.
+ $value = $this->runSpanGamut($value);
+ $value = preg_replace('/^([ ]*)/', "<p>", $value);
+ $value .= "</p>";
+ $grafs[$key] = $this->unhash($value);
+ }
+ else {
+ # Is a block.
+ # Modify elements of @grafs in-place...
+ $graf = $value;
+ $block = $this->html_hashes[$graf];
+ $graf = $block;
+// if (preg_match('{
+// \A
+// ( # $1 = <div> tag
+// <div \s+
+// [^>]*
+// \b
+// markdown\s*=\s* ([\'"]) # $2 = attr quote char
+// 1
+// \2
+// [^>]*
+// >
+// )
+// ( # $3 = contents
+// .*
+// )
+// (</div>) # $4 = closing tag
+// \z
+// }xs', $block, $matches))
+// {
+// list(, $div_open, , $div_content, $div_close) = $matches;
+//
+// # We can't call Markdown(), because that resets the hash;
+// # that initialization code should be pulled into its own sub, though.
+// $div_content = $this->hashHTMLBlocks($div_content);
+//
+// # Run document gamut methods on the content.
+// foreach ($this->document_gamut as $method => $priority) {
+// $div_content = $this->$method($div_content);
+// }
+//
+// $div_open = preg_replace(
+// '{\smarkdown\s*=\s*([\'"]).+?\1}', '', $div_open);
+//
+// $graf = $div_open . "\n" . $div_content . "\n" . $div_close;
+// }
+ $grafs[$key] = $graf;
+ }
+ }
+
+ return implode("\n\n", $grafs);
+ }
+
+
+ function encodeAttribute($text) {
+ #
+ # Encode text for a double-quoted HTML attribute. This function
+ # is *not* suitable for attributes enclosed in single quotes.
+ #
+ $text = $this->encodeAmpsAndAngles($text);
+ $text = str_replace('"', '&quot;', $text);
+ return $text;
+ }
+
+
+ function encodeAmpsAndAngles($text) {
+ #
+ # Smart processing for ampersands and angle brackets that need to
+ # be encoded. Valid character entities are left alone unless the
+ # no-entities mode is set.
+ #
+ if ($this->no_entities) {
+ $text = str_replace('&', '&amp;', $text);
+ } else {
+ # Ampersand-encoding based entirely on Nat Irons's Amputator
+ # MT plugin: <http://bumppo.net/projects/amputator/>
+ $text = preg_replace('/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/',
+ '&amp;', $text);;
+ }
+ # Encode remaining <'s
+ $text = str_replace('<', '&lt;', $text);
+
+ return $text;
+ }
+
+
+ function doAutoLinks($text) {
+ $text = preg_replace_callback('{<((https?|ftp|dict):[^\'">\s]+)>}i',
+ array(&$this, '_doAutoLinks_url_callback'), $text);
+
+ # Email addresses: <address@domain.foo>
+ $text = preg_replace_callback('{
+ <
+ (?:mailto:)?
+ (
+ (?:
+ [-!#$%&\'*+/=?^_`.{|}~\w\x80-\xFF]+
+ |
+ ".*?"
+ )
+ \@
+ (?:
+ [-a-z0-9\x80-\xFF]+(\.[-a-z0-9\x80-\xFF]+)*\.[a-z]+
+ |
+ \[[\d.a-fA-F:]+\] # IPv4 & IPv6
+ )
+ )
+ >
+ }xi',
+ array(&$this, '_doAutoLinks_email_callback'), $text);
+
+ return $text;
+ }
+ function _doAutoLinks_url_callback($matches) {
+ $url = $this->encodeAttribute($matches[1]);
+ $link = "<a href=\"$url\">$url</a>";
+ return $this->hashPart($link);
+ }
+ function _doAutoLinks_email_callback($matches) {
+ $address = $matches[1];
+ $link = $this->encodeEmailAddress($address);
+ return $this->hashPart($link);
+ }
+
+
+ function encodeEmailAddress($addr) {
+ #
+ # Input: an email address, e.g. "foo@example.com"
+ #
+ # Output: the email address as a mailto link, with each character
+ # of the address encoded as either a decimal or hex entity, in
+ # the hopes of foiling most address harvesting spam bots. E.g.:
+ #
+ # <p><a href="&#109;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x66;o&#111;
+ # &#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;&#101;&#46;&#x63;&#111;
+ # &#x6d;">&#x66;o&#111;&#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;
+ # &#101;&#46;&#x63;&#111;&#x6d;</a></p>
+ #
+ # Based by a filter by Matthew Wickline, posted to BBEdit-Talk.
+ # With some optimizations by Milian Wolff.
+ #
+ $addr = "mailto:" . $addr;
+ $chars = preg_split('/(?<!^)(?!$)/', $addr);
+ $seed = (int)abs(crc32($addr) / strlen($addr)); # Deterministic seed.
+
+ foreach ($chars as $key => $char) {
+ $ord = ord($char);
+ # Ignore non-ascii chars.
+ if ($ord < 128) {
+ $r = ($seed * (1 + $key)) % 100; # Pseudo-random function.
+ # roughly 10% raw, 45% hex, 45% dec
+ # '@' *must* be encoded. I insist.
+ if ($r > 90 && $char != '@') /* do nothing */;
+ else if ($r < 45) $chars[$key] = '&#x'.dechex($ord).';';
+ else $chars[$key] = '&#'.$ord.';';
+ }
+ }
+
+ $addr = implode('', $chars);
+ $text = implode('', array_slice($chars, 7)); # text without `mailto:`
+ $addr = "<a href=\"$addr\">$text</a>";
+
+ return $addr;
+ }
+
+
+ function parseSpan($str) {
+ #
+ # Take the string $str and parse it into tokens, hashing embeded HTML,
+ # escaped characters and handling code spans.
+ #
+ $output = '';
+
+ $span_re = '{
+ (
+ \\\\'.$this->escape_chars_re.'
+ |
+ (?<![`\\\\])
+ `+ # code span marker
+ '.( $this->no_markup ? '' : '
+ |
+ <!-- .*? --> # comment
+ |
+ <\?.*?\?> | <%.*?%> # processing instruction
+ |
+ <[/!$]?[-a-zA-Z0-9:_]+ # regular tags
+ (?>
+ \s
+ (?>[^"\'>]+|"[^"]*"|\'[^\']*\')*
+ )?
+ >
+ ').'
+ )
+ }xs';
+
+ while (1) {
+ #
+ # Each loop iteration seach for either the next tag, the next
+ # openning code span marker, or the next escaped character.
+ # Each token is then passed to handleSpanToken.
+ #
+ $parts = preg_split($span_re, $str, 2, PREG_SPLIT_DELIM_CAPTURE);
+
+ # Create token from text preceding tag.
+ if ($parts[0] != "") {
+ $output .= $parts[0];
+ }
+
+ # Check if we reach the end.
+ if (isset($parts[1])) {
+ $output .= $this->handleSpanToken($parts[1], $parts[2]);
+ $str = $parts[2];
+ }
+ else {
+ break;
+ }
+ }
+
+ return $output;
+ }
+
+
+ function handleSpanToken($token, &$str) {
+ #
+ # Handle $token provided by parseSpan by determining its nature and
+ # returning the corresponding value that should replace it.
+ #
+ switch ($token{0}) {
+ case "\\":
+ return $this->hashPart("&#". ord($token{1}). ";");
+ case "`":
+ # Search for end marker in remaining text.
+ if (preg_match('/^(.*?[^`])'.preg_quote($token).'(?!`)(.*)$/sm',
+ $str, $matches))
+ {
+ $str = $matches[2];
+ $codespan = $this->makeCodeSpan($matches[1]);
+ return $this->hashPart($codespan);
+ }
+ return $token; // return as text since no ending marker found.
+ default:
+ return $this->hashPart($token);
+ }
+ }
+
+
+ function outdent($text) {
+ #
+ # Remove one level of line-leading tabs or spaces
+ #
+ return preg_replace('/^(\t|[ ]{1,'.$this->tab_width.'})/m', '', $text);
+ }
+
+
+ # String length function for detab. `_initDetab` will create a function to
+ # hanlde UTF-8 if the default function does not exist.
+ var $utf8_strlen = 'mb_strlen';
+
+ function detab($text) {
+ #
+ # Replace tabs with the appropriate amount of space.
+ #
+ # For each line we separate the line in blocks delemited by
+ # tab characters. Then we reconstruct every line by adding the
+ # appropriate number of space between each blocks.
+
+ $text = preg_replace_callback('/^.*\t.*$/m',
+ array(&$this, '_detab_callback'), $text);
+
+ return $text;
+ }
+ function _detab_callback($matches) {
+ $line = $matches[0];
+ $strlen = $this->utf8_strlen; # strlen function for UTF-8.
+
+ # Split in blocks.
+ $blocks = explode("\t", $line);
+ # Add each blocks to the line.
+ $line = $blocks[0];
+ unset($blocks[0]); # Do not add first block twice.
+ foreach ($blocks as $block) {
+ # Calculate amount of space, insert spaces, insert block.
+ $amount = $this->tab_width -
+ $strlen($line, 'UTF-8') % $this->tab_width;
+ $line .= str_repeat(" ", $amount) . $block;
+ }
+ return $line;
+ }
+ function _initDetab() {
+ #
+ # Check for the availability of the function in the `utf8_strlen` property
+ # (initially `mb_strlen`). If the function is not available, create a
+ # function that will loosely count the number of UTF-8 characters with a
+ # regular expression.
+ #
+ if (function_exists($this->utf8_strlen)) return;
+ $this->utf8_strlen = create_function('$text', 'return preg_match_all(
+ "/[\\\\x00-\\\\xBF]|[\\\\xC0-\\\\xFF][\\\\x80-\\\\xBF]*/",
+ $text, $m);');
+ }
+
+
+ function unhash($text) {
+ #
+ # Swap back in all the tags hashed by _HashHTMLBlocks.
+ #
+ return preg_replace_callback('/(.)\x1A[0-9]+\1/',
+ array(&$this, '_unhash_callback'), $text);
+ }
+ function _unhash_callback($matches) {
+ return $this->html_hashes[$matches[0]];
+ }
+
+}
+
+
+#
+# Markdown Extra Parser Class
+#
+
+class MarkdownExtra_Parser extends Markdown_Parser {
+
+ # Prefix for footnote ids.
+ var $fn_id_prefix = "";
+
+ # Optional title attribute for footnote links and backlinks.
+ var $fn_link_title = MARKDOWN_FN_LINK_TITLE;
+ var $fn_backlink_title = MARKDOWN_FN_BACKLINK_TITLE;
+
+ # Optional class attribute for footnote links and backlinks.
+ var $fn_link_class = MARKDOWN_FN_LINK_CLASS;
+ var $fn_backlink_class = MARKDOWN_FN_BACKLINK_CLASS;
+
+ # Predefined abbreviations.
+ var $predef_abbr = array();
+
+
+ function MarkdownExtra_Parser() {
+ #
+ # Constructor function. Initialize the parser object.
+ #
+ # Add extra escapable characters before parent constructor
+ # initialize the table.
+ $this->escape_chars .= ':|';
+
+ # Insert extra document, block, and span transformations.
+ # Parent constructor will do the sorting.
+ $this->document_gamut += array(
+ "doFencedCodeBlocks" => 5,
+ "stripFootnotes" => 15,
+ "stripAbbreviations" => 25,
+ "appendFootnotes" => 50,
+ );
+ $this->block_gamut += array(
+ "doFencedCodeBlocks" => 5,
+ "doTables" => 15,
+ "doDefLists" => 45,
+ );
+ $this->span_gamut += array(
+ "doFootnotes" => 5,
+ "doAbbreviations" => 70,
+ );
+
+ parent::Markdown_Parser();
+ }
+
+
+ # Extra variables used during extra transformations.
+ var $footnotes = array();
+ var $footnotes_ordered = array();
+ var $abbr_desciptions = array();
+ var $abbr_word_re = '';
+
+ # Give the current footnote number.
+ var $footnote_counter = 1;
+
+
+ function setup() {
+ #
+ # Setting up Extra-specific variables.
+ #
+ parent::setup();
+
+ $this->footnotes = array();
+ $this->footnotes_ordered = array();
+ $this->abbr_desciptions = array();
+ $this->abbr_word_re = '';
+ $this->footnote_counter = 1;
+
+ foreach ($this->predef_abbr as $abbr_word => $abbr_desc) {
+ if ($this->abbr_word_re)
+ $this->abbr_word_re .= '|';
+ $this->abbr_word_re .= preg_quote($abbr_word);
+ $this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
+ }
+ }
+
+ function teardown() {
+ #
+ # Clearing Extra-specific variables.
+ #
+ $this->footnotes = array();
+ $this->footnotes_ordered = array();
+ $this->abbr_desciptions = array();
+ $this->abbr_word_re = '';
+
+ parent::teardown();
+ }
+
+
+ ### HTML Block Parser ###
+
+ # Tags that are always treated as block tags:
+ var $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend';
+
+ # Tags treated as block tags only if the opening tag is alone on it's line:
+ var $context_block_tags_re = 'script|noscript|math|ins|del';
+
+ # Tags where markdown="1" default to span mode:
+ var $contain_span_tags_re = 'p|h[1-6]|li|dd|dt|td|th|legend|address';
+
+ # Tags which must not have their contents modified, no matter where
+ # they appear:
+ var $clean_tags_re = 'script|math';
+
+ # Tags that do not need to be closed.
+ var $auto_close_tags_re = 'hr|img';
+
+
+ function hashHTMLBlocks($text) {
+ #
+ # Hashify HTML Blocks and "clean tags".
+ #
+ # We only want to do this for block-level HTML tags, such as headers,
+ # lists, and tables. That's because we still want to wrap <p>s around
+ # "paragraphs" that are wrapped in non-block-level tags, such as anchors,
+ # phrase emphasis, and spans. The list of tags we're looking for is
+ # hard-coded.
+ #
+ # This works by calling _HashHTMLBlocks_InMarkdown, which then calls
+ # _HashHTMLBlocks_InHTML when it encounter block tags. When the markdown="1"
+ # attribute is found whitin a tag, _HashHTMLBlocks_InHTML calls back
+ # _HashHTMLBlocks_InMarkdown to handle the Markdown syntax within the tag.
+ # These two functions are calling each other. It's recursive!
+ #
+ #
+ # Call the HTML-in-Markdown hasher.
+ #
+ list($text, ) = $this->_hashHTMLBlocks_inMarkdown($text);
+
+ return $text;
+ }
+ function _hashHTMLBlocks_inMarkdown($text, $indent = 0,
+ $enclosing_tag_re = '', $span = false)
+ {
+ #
+ # Parse markdown text, calling _HashHTMLBlocks_InHTML for block tags.
+ #
+ # * $indent is the number of space to be ignored when checking for code
+ # blocks. This is important because if we don't take the indent into
+ # account, something like this (which looks right) won't work as expected:
+ #
+ # <div>
+ # <div markdown="1">
+ # Hello World. <-- Is this a Markdown code block or text?
+ # </div> <-- Is this a Markdown code block or a real tag?
+ # <div>
+ #
+ # If you don't like this, just don't indent the tag on which
+ # you apply the markdown="1" attribute.
+ #
+ # * If $enclosing_tag_re is not empty, stops at the first unmatched closing
+ # tag with that name. Nested tags supported.
+ #
+ # * If $span is true, text inside must treated as span. So any double
+ # newline will be replaced by a single newline so that it does not create
+ # paragraphs.
+ #
+ # Returns an array of that form: ( processed text , remaining text )
+ #
+ if ($text === '') return array('', '');
+
+ # Regex to check for the presense of newlines around a block tag.
+ $newline_before_re = '/(?:^\n?|\n\n)*$/';
+ $newline_after_re =
+ '{
+ ^ # Start of text following the tag.
+ (?>[ ]*<!--.*?-->)? # Optional comment.
+ [ ]*\n # Must be followed by newline.
+ }xs';
+
+ # Regex to match any tag.
+ $block_tag_re =
+ '{
+ ( # $2: Capture hole tag.
+ </? # Any opening or closing tag.
+ (?> # Tag name.
+ '.$this->block_tags_re.' |
+ '.$this->context_block_tags_re.' |
+ '.$this->clean_tags_re.' |
+ (?!\s)'.$enclosing_tag_re.'
+ )
+ (?:
+ (?=[\s"\'/a-zA-Z0-9]) # Allowed characters after tag name.
+ (?>
+ ".*?" | # Double quotes (can contain `>`)
+ \'.*?\' | # Single quotes (can contain `>`)
+ .+? # Anything but quotes and `>`.
+ )*?
+ )?
+ > # End of tag.
+ |
+ <!-- .*? --> # HTML Comment
+ |
+ <\?.*?\?> | <%.*?%> # Processing instruction
+ |
+ <!\[CDATA\[.*?\]\]> # CData Block
+ |
+ # Code span marker
+ `+
+ '. ( !$span ? ' # If not in span.
+ |
+ # Indented code block
+ (?: ^[ ]*\n | ^ | \n[ ]*\n )
+ [ ]{'.($indent+4).'}[^\n]* \n
+ (?>
+ (?: [ ]{'.($indent+4).'}[^\n]* | [ ]* ) \n
+ )*
+ |
+ # Fenced code block marker
+ (?> ^ | \n )
+ [ ]{'.($indent).'}~~~+[ ]*\n
+ ' : '' ). ' # End (if not is span).
+ )
+ }xs';
+
+
+ $depth = 0; # Current depth inside the tag tree.
+ $parsed = ""; # Parsed text that will be returned.
+
+ #
+ # Loop through every tag until we find the closing tag of the parent
+ # or loop until reaching the end of text if no parent tag specified.
+ #
+ do {
+ #
+ # Split the text using the first $tag_match pattern found.
+ # Text before pattern will be first in the array, text after
+ # pattern will be at the end, and between will be any catches made
+ # by the pattern.
+ #
+ $parts = preg_split($block_tag_re, $text, 2,
+ PREG_SPLIT_DELIM_CAPTURE);
+
+ # If in Markdown span mode, add a empty-string span-level hash
+ # after each newline to prevent triggering any block element.
+ if ($span) {
+ $void = $this->hashPart("", ':');
+ $newline = "$void\n";
+ $parts[0] = $void . str_replace("\n", $newline, $parts[0]) . $void;
+ }
+
+ $parsed .= $parts[0]; # Text before current tag.
+
+ # If end of $text has been reached. Stop loop.
+ if (count($parts) < 3) {
+ $text = "";
+ break;
+ }
+
+ $tag = $parts[1]; # Tag to handle.
+ $text = $parts[2]; # Remaining text after current tag.
+ $tag_re = preg_quote($tag); # For use in a regular expression.
+
+ #
+ # Check for: Code span marker
+ #
+ if ($tag{0} == "`") {
+ # Find corresponding end marker.
+ $tag_re = preg_quote($tag);
+ if (preg_match('{^(?>.+?|\n(?!\n))*?(?<!`)'.$tag_re.'(?!`)}',
+ $text, $matches))
+ {
+ # End marker found: pass text unchanged until marker.
+ $parsed .= $tag . $matches[0];
+ $text = substr($text, strlen($matches[0]));
+ }
+ else {
+ # Unmatched marker: just skip it.
+ $parsed .= $tag;
+ }
+ }
+ #
+ # Check for: Indented code block.
+ #
+ else if ($tag{0} == "\n" || $tag{0} == " ") {
+ # Indented code block: pass it unchanged, will be handled
+ # later.
+ $parsed .= $tag;
+ }
+ #
+ # Check for: Fenced code block marker.
+ #
+ else if ($tag{0} == "~") {
+ # Fenced code block marker: find matching end marker.
+ $tag_re = preg_quote(trim($tag));
+ if (preg_match('{^(?>.*\n)+?'.$tag_re.' *\n}', $text,
+ $matches))
+ {
+ # End marker found: pass text unchanged until marker.
+ $parsed .= $tag . $matches[0];
+ $text = substr($text, strlen($matches[0]));
+ }
+ else {
+ # No end marker: just skip it.
+ $parsed .= $tag;
+ }
+ }
+ #
+ # Check for: Opening Block level tag or
+ # Opening Context Block tag (like ins and del)
+ # used as a block tag (tag is alone on it's line).
+ #
+ else if (preg_match('{^<(?:'.$this->block_tags_re.')\b}', $tag) ||
+ ( preg_match('{^<(?:'.$this->context_block_tags_re.')\b}', $tag) &&
+ preg_match($newline_before_re, $parsed) &&
+ preg_match($newline_after_re, $text) )
+ )
+ {
+ # Need to parse tag and following text using the HTML parser.
+ list($block_text, $text) =
+ $this->_hashHTMLBlocks_inHTML($tag . $text, "hashBlock", true);
+
+ # Make sure it stays outside of any paragraph by adding newlines.
+ $parsed .= "\n\n$block_text\n\n";
+ }
+ #
+ # Check for: Clean tag (like script, math)
+ # HTML Comments, processing instructions.
+ #
+ else if (preg_match('{^<(?:'.$this->clean_tags_re.')\b}', $tag) ||
+ $tag{1} == '!' || $tag{1} == '?')
+ {
+ # Need to parse tag and following text using the HTML parser.
+ # (don't check for markdown attribute)
+ list($block_text, $text) =
+ $this->_hashHTMLBlocks_inHTML($tag . $text, "hashClean", false);
+
+ $parsed .= $block_text;
+ }
+ #
+ # Check for: Tag with same name as enclosing tag.
+ #
+ else if ($enclosing_tag_re !== '' &&
+ # Same name as enclosing tag.
+ preg_match('{^</?(?:'.$enclosing_tag_re.')\b}', $tag))
+ {
+ #
+ # Increase/decrease nested tag count.
+ #
+ if ($tag{1} == '/') $depth--;
+ else if ($tag{strlen($tag)-2} != '/') $depth++;
+
+ if ($depth < 0) {
+ #
+ # Going out of parent element. Clean up and break so we
+ # return to the calling function.
+ #
+ $text = $tag . $text;
+ break;
+ }
+
+ $parsed .= $tag;
+ }
+ else {
+ $parsed .= $tag;
+ }
+ } while ($depth >= 0);
+
+ return array($parsed, $text);
+ }
+ function _hashHTMLBlocks_inHTML($text, $hash_method, $md_attr) {
+ #
+ # Parse HTML, calling _HashHTMLBlocks_InMarkdown for block tags.
+ #
+ # * Calls $hash_method to convert any blocks.
+ # * Stops when the first opening tag closes.
+ # * $md_attr indicate if the use of the `markdown="1"` attribute is allowed.
+ # (it is not inside clean tags)
+ #
+ # Returns an array of that form: ( processed text , remaining text )
+ #
+ if ($text === '') return array('', '');
+
+ # Regex to match `markdown` attribute inside of a tag.
+ $markdown_attr_re = '
+ {
+ \s* # Eat whitespace before the `markdown` attribute
+ markdown
+ \s*=\s*
+ (?>
+ (["\']) # $1: quote delimiter
+ (.*?) # $2: attribute value
+ \1 # matching delimiter
+ |
+ ([^\s>]*) # $3: unquoted attribute value
+ )
+ () # $4: make $3 always defined (avoid warnings)
+ }xs';
+
+ # Regex to match any tag.
+ $tag_re = '{
+ ( # $2: Capture hole tag.
+ </? # Any opening or closing tag.
+ [\w:$]+ # Tag name.
+ (?:
+ (?=[\s"\'/a-zA-Z0-9]) # Allowed characters after tag name.
+ (?>
+ ".*?" | # Double quotes (can contain `>`)
+ \'.*?\' | # Single quotes (can contain `>`)
+ .+? # Anything but quotes and `>`.
+ )*?
+ )?
+ > # End of tag.
+ |
+ <!-- .*? --> # HTML Comment
+ |
+ <\?.*?\?> | <%.*?%> # Processing instruction
+ |
+ <!\[CDATA\[.*?\]\]> # CData Block
+ )
+ }xs';
+
+ $original_text = $text; # Save original text in case of faliure.
+
+ $depth = 0; # Current depth inside the tag tree.
+ $block_text = ""; # Temporary text holder for current text.
+ $parsed = ""; # Parsed text that will be returned.
+
+ #
+ # Get the name of the starting tag.
+ # (This pattern makes $base_tag_name_re safe without quoting.)
+ #
+ if (preg_match('/^<([\w:$]*)\b/', $text, $matches))
+ $base_tag_name_re = $matches[1];
+
+ #
+ # Loop through every tag until we find the corresponding closing tag.
+ #
+ do {
+ #
+ # Split the text using the first $tag_match pattern found.
+ # Text before pattern will be first in the array, text after
+ # pattern will be at the end, and between will be any catches made
+ # by the pattern.
+ #
+ $parts = preg_split($tag_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
+
+ if (count($parts) < 3) {
+ #
+ # End of $text reached with unbalenced tag(s).
+ # In that case, we return original text unchanged and pass the
+ # first character as filtered to prevent an infinite loop in the
+ # parent function.
+ #
+ return array($original_text{0}, substr($original_text, 1));
+ }
+
+ $block_text .= $parts[0]; # Text before current tag.
+ $tag = $parts[1]; # Tag to handle.
+ $text = $parts[2]; # Remaining text after current tag.
+
+ #
+ # Check for: Auto-close tag (like <hr/>)
+ # Comments and Processing Instructions.
+ #
+ if (preg_match('{^</?(?:'.$this->auto_close_tags_re.')\b}', $tag) ||
+ $tag{1} == '!' || $tag{1} == '?')
+ {
+ # Just add the tag to the block as if it was text.
+ $block_text .= $tag;
+ }
+ else {
+ #
+ # Increase/decrease nested tag count. Only do so if
+ # the tag's name match base tag's.
+ #
+ if (preg_match('{^</?'.$base_tag_name_re.'\b}', $tag)) {
+ if ($tag{1} == '/') $depth--;
+ else if ($tag{strlen($tag)-2} != '/') $depth++;
+ }
+
+ #
+ # Check for `markdown="1"` attribute and handle it.
+ #
+ if ($md_attr &&
+ preg_match($markdown_attr_re, $tag, $attr_m) &&
+ preg_match('/^1|block|span$/', $attr_m[2] . $attr_m[3]))
+ {
+ # Remove `markdown` attribute from opening tag.
+ $tag = preg_replace($markdown_attr_re, '', $tag);
+
+ # Check if text inside this tag must be parsed in span mode.
+ $this->mode = $attr_m[2] . $attr_m[3];
+ $span_mode = $this->mode == 'span' || $this->mode != 'block' &&
+ preg_match('{^<(?:'.$this->contain_span_tags_re.')\b}', $tag);
+
+ # Calculate indent before tag.
+ if (preg_match('/(?:^|\n)( *?)(?! ).*?$/', $block_text, $matches)) {
+ $strlen = $this->utf8_strlen;
+ $indent = $strlen($matches[1], 'UTF-8');
+ } else {
+ $indent = 0;
+ }
+
+ # End preceding block with this tag.
+ $block_text .= $tag;
+ $parsed .= $this->$hash_method($block_text);
+
+ # Get enclosing tag name for the ParseMarkdown function.
+ # (This pattern makes $tag_name_re safe without quoting.)
+ preg_match('/^<([\w:$]*)\b/', $tag, $matches);
+ $tag_name_re = $matches[1];
+
+ # Parse the content using the HTML-in-Markdown parser.
+ list ($block_text, $text)
+ = $this->_hashHTMLBlocks_inMarkdown($text, $indent,
+ $tag_name_re, $span_mode);
+
+ # Outdent markdown text.
+ if ($indent > 0) {
+ $block_text = preg_replace("/^[ ]{1,$indent}/m", "",
+ $block_text);
+ }
+
+ # Append tag content to parsed text.
+ if (!$span_mode) $parsed .= "\n\n$block_text\n\n";
+ else $parsed .= "$block_text";
+
+ # Start over a new block.
+ $block_text = "";
+ }
+ else $block_text .= $tag;
+ }
+
+ } while ($depth > 0);
+
+ #
+ # Hash last block text that wasn't processed inside the loop.
+ #
+ $parsed .= $this->$hash_method($block_text);
+
+ return array($parsed, $text);
+ }
+
+
+ function hashClean($text) {
+ #
+ # Called whenever a tag must be hashed when a function insert a "clean" tag
+ # in $text, it pass through this function and is automaticaly escaped,
+ # blocking invalid nested overlap.
+ #
+ return $this->hashPart($text, 'C');
+ }
+
+
+ function doHeaders($text) {
+ #
+ # Redefined to add id attribute support.
+ #
+ # Setext-style headers:
+ # Header 1 {#header1}
+ # ========
+ #
+ # Header 2 {#header2}
+ # --------
+ #
+ $text = preg_replace_callback(
+ '{
+ (^.+?) # $1: Header text
+ (?:[ ]+\{\#([-_:a-zA-Z0-9]+)\})? # $2: Id attribute
+ [ ]*\n(=+|-+)[ ]*\n+ # $3: Header footer
+ }mx',
+ array(&$this, '_doHeaders_callback_setext'), $text);
+
+ # atx-style headers:
+ # # Header 1 {#header1}
+ # ## Header 2 {#header2}
+ # ## Header 2 with closing hashes ## {#header3}
+ # ...
+ # ###### Header 6 {#header2}
+ #
+ # @note Added for Elgg: You can use = in place of hashes for atx-style.
+ $text = preg_replace_callback('{
+ ^([\#=]{1,6}) # $1 = string of #\'s
+ [ ]*
+ (.+?) # $2 = Header text
+ [ ]*
+ [\#=]* # optional closing #\'s (not counted)
+ (?:[ ]+\{\#([-_:a-zA-Z0-9]+)\})? # id attribute
+ [ ]*
+ \n+
+ }xm',
+ array(&$this, '_doHeaders_callback_atx'), $text);
+
+ return $text;
+ }
+ function _doHeaders_attr($attr) {
+ if (empty($attr)) return "";
+ return " id=\"$attr\"";
+ }
+ function _doHeaders_callback_setext($matches) {
+ if ($matches[3] == '-' && preg_match('{^- }', $matches[1]))
+ return $matches[0];
+ $level = $matches[3]{0} == '=' ? 1 : 2;
+ $attr = $this->_doHeaders_attr($id =& $matches[2]);
+ $block = "<h$level$attr>".$this->runSpanGamut($matches[1])."</h$level>";
+ return "\n" . $this->hashBlock($block) . "\n\n";
+ }
+ function _doHeaders_callback_atx($matches) {
+ $level = strlen($matches[1]);
+ $attr = $this->_doHeaders_attr($id =& $matches[3]);
+ $block = "<h$level$attr>".$this->runSpanGamut($matches[2])."</h$level>";
+ return "\n" . $this->hashBlock($block) . "\n\n";
+ }
+
+
+ function doTables($text) {
+ #
+ # Form HTML tables.
+ #
+ $less_than_tab = $this->tab_width - 1;
+ #
+ # Find tables with leading pipe.
+ #
+ # | Header 1 | Header 2
+ # | -------- | --------
+ # | Cell 1 | Cell 2
+ # | Cell 3 | Cell 4
+ #
+ $text = preg_replace_callback('
+ {
+ ^ # Start of a line
+ [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
+ [|] # Optional leading pipe (present)
+ (.+) \n # $1: Header row (at least one pipe)
+
+ [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
+ [|] ([ ]*[-:]+[-| :]*) \n # $2: Header underline
+
+ ( # $3: Cells
+ (?>
+ [ ]* # Allowed whitespace.
+ [|] .* \n # Row content.
+ )*
+ )
+ (?=\n|\Z) # Stop at final double newline.
+ }xm',
+ array(&$this, '_doTable_leadingPipe_callback'), $text);
+
+ #
+ # Find tables without leading pipe.
+ #
+ # Header 1 | Header 2
+ # -------- | --------
+ # Cell 1 | Cell 2
+ # Cell 3 | Cell 4
+ #
+ $text = preg_replace_callback('
+ {
+ ^ # Start of a line
+ [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
+ (\S.*[|].*) \n # $1: Header row (at least one pipe)
+
+ [ ]{0,'.$less_than_tab.'} # Allowed whitespace.
+ ([-:]+[ ]*[|][-| :]*) \n # $2: Header underline
+
+ ( # $3: Cells
+ (?>
+ .* [|] .* \n # Row content
+ )*
+ )
+ (?=\n|\Z) # Stop at final double newline.
+ }xm',
+ array(&$this, '_DoTable_callback'), $text);
+
+ return $text;
+ }
+ function _doTable_leadingPipe_callback($matches) {
+ $head = $matches[1];
+ $underline = $matches[2];
+ $content = $matches[3];
+
+ # Remove leading pipe for each row.
+ $content = preg_replace('/^ *[|]/m', '', $content);
+
+ return $this->_doTable_callback(array($matches[0], $head, $underline, $content));
+ }
+ function _doTable_callback($matches) {
+ $head = $matches[1];
+ $underline = $matches[2];
+ $content = $matches[3];
+
+ # Remove any tailing pipes for each line.
+ $head = preg_replace('/[|] *$/m', '', $head);
+ $underline = preg_replace('/[|] *$/m', '', $underline);
+ $content = preg_replace('/[|] *$/m', '', $content);
+
+ # Reading alignement from header underline.
+ $separators = preg_split('/ *[|] */', $underline);
+ foreach ($separators as $n => $s) {
+ if (preg_match('/^ *-+: *$/', $s)) $attr[$n] = ' align="right"';
+ else if (preg_match('/^ *:-+: *$/', $s))$attr[$n] = ' align="center"';
+ else if (preg_match('/^ *:-+ *$/', $s)) $attr[$n] = ' align="left"';
+ else $attr[$n] = '';
+ }
+
+ # Parsing span elements, including code spans, character escapes,
+ # and inline HTML tags, so that pipes inside those gets ignored.
+ $head = $this->parseSpan($head);
+ $headers = preg_split('/ *[|] */', $head);
+ $col_count = count($headers);
+
+ # Write column headers.
+ $text = "<table>\n";
+ $text .= "<thead>\n";
+ $text .= "<tr>\n";
+ foreach ($headers as $n => $header)
+ $text .= " <th$attr[$n]>".$this->runSpanGamut(trim($header))."</th>\n";
+ $text .= "</tr>\n";
+ $text .= "</thead>\n";
+
+ # Split content by row.
+ $rows = explode("\n", trim($content, "\n"));
+
+ $text .= "<tbody>\n";
+ foreach ($rows as $row) {
+ # Parsing span elements, including code spans, character escapes,
+ # and inline HTML tags, so that pipes inside those gets ignored.
+ $row = $this->parseSpan($row);
+
+ # Split row by cell.
+ $row_cells = preg_split('/ *[|] */', $row, $col_count);
+ $row_cells = array_pad($row_cells, $col_count, '');
+
+ $text .= "<tr>\n";
+ foreach ($row_cells as $n => $cell)
+ $text .= " <td$attr[$n]>".$this->runSpanGamut(trim($cell))."</td>\n";
+ $text .= "</tr>\n";
+ }
+ $text .= "</tbody>\n";
+ $text .= "</table>";
+
+ return $this->hashBlock($text) . "\n";
+ }
+
+
+ function doDefLists($text) {
+ #
+ # Form HTML definition lists.
+ #
+ $less_than_tab = $this->tab_width - 1;
+
+ # Re-usable pattern to match any entire dl list:
+ $whole_list_re = '(?>
+ ( # $1 = whole list
+ ( # $2
+ [ ]{0,'.$less_than_tab.'}
+ ((?>.*\S.*\n)+) # $3 = defined term
+ \n?
+ [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
+ )
+ (?s:.+?)
+ ( # $4
+ \z
+ |
+ \n{2,}
+ (?=\S)
+ (?! # Negative lookahead for another term
+ [ ]{0,'.$less_than_tab.'}
+ (?: \S.*\n )+? # defined term
+ \n?
+ [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
+ )
+ (?! # Negative lookahead for another definition
+ [ ]{0,'.$less_than_tab.'}:[ ]+ # colon starting definition
+ )
+ )
+ )
+ )'; // mx
+
+ $text = preg_replace_callback('{
+ (?>\A\n?|(?<=\n\n))
+ '.$whole_list_re.'
+ }mx',
+ array(&$this, '_doDefLists_callback'), $text);
+
+ return $text;
+ }
+ function _doDefLists_callback($matches) {
+ # Re-usable patterns to match list item bullets and number markers:
+ $list = $matches[1];
+
+ # Turn double returns into triple returns, so that we can make a
+ # paragraph for the last item in a list, if necessary:
+ $result = trim($this->processDefListItems($list));
+ $result = "<dl>\n" . $result . "\n</dl>";
+ return $this->hashBlock($result) . "\n\n";
+ }
+
+
+ function processDefListItems($list_str) {
+ #
+ # Process the contents of a single definition list, splitting it
+ # into individual term and definition list items.
+ #
+ $less_than_tab = $this->tab_width - 1;
+
+ # trim trailing blank lines:
+ $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
+
+ # Process definition terms.
+ $list_str = preg_replace_callback('{
+ (?>\A\n?|\n\n+) # leading line
+ ( # definition terms = $1
+ [ ]{0,'.$less_than_tab.'} # leading whitespace
+ (?![:][ ]|[ ]) # negative lookahead for a definition
+ # mark (colon) or more whitespace.
+ (?> \S.* \n)+? # actual term (not whitespace).
+ )
+ (?=\n?[ ]{0,3}:[ ]) # lookahead for following line feed
+ # with a definition mark.
+ }xm',
+ array(&$this, '_processDefListItems_callback_dt'), $list_str);
+
+ # Process actual definitions.
+ $list_str = preg_replace_callback('{
+ \n(\n+)? # leading line = $1
+ ( # marker space = $2
+ [ ]{0,'.$less_than_tab.'} # whitespace before colon
+ [:][ ]+ # definition mark (colon)
+ )
+ ((?s:.+?)) # definition text = $3
+ (?= \n+ # stop at next definition mark,
+ (?: # next term or end of text
+ [ ]{0,'.$less_than_tab.'} [:][ ] |
+ <dt> | \z
+ )
+ )
+ }xm',
+ array(&$this, '_processDefListItems_callback_dd'), $list_str);
+
+ return $list_str;
+ }
+ function _processDefListItems_callback_dt($matches) {
+ $terms = explode("\n", trim($matches[1]));
+ $text = '';
+ foreach ($terms as $term) {
+ $term = $this->runSpanGamut(trim($term));
+ $text .= "\n<dt>" . $term . "</dt>";
+ }
+ return $text . "\n";
+ }
+ function _processDefListItems_callback_dd($matches) {
+ $leading_line = $matches[1];
+ $marker_space = $matches[2];
+ $def = $matches[3];
+
+ if ($leading_line || preg_match('/\n{2,}/', $def)) {
+ # Replace marker with the appropriate whitespace indentation
+ $def = str_repeat(' ', strlen($marker_space)) . $def;
+ $def = $this->runBlockGamut($this->outdent($def . "\n\n"));
+ $def = "\n". $def ."\n";
+ }
+ else {
+ $def = rtrim($def);
+ $def = $this->runSpanGamut($this->outdent($def));
+ }
+
+ return "\n<dd>" . $def . "</dd>\n";
+ }
+
+
+ function doFencedCodeBlocks($text) {
+ #
+ # Adding the fenced code block syntax to regular Markdown:
+ #
+ # ~~~
+ # Code block
+ # ~~~
+ #
+ $less_than_tab = $this->tab_width;
+
+ $text = preg_replace_callback('{
+ (?:\n|\A)
+ # 1: Opening marker
+ (
+ ~{3,} # Marker: three tilde or more.
+ )
+ [ ]* \n # Whitespace and newline following marker.
+
+ # 2: Content
+ (
+ (?>
+ (?!\1 [ ]* \n) # Not a closing marker.
+ .*\n+
+ )+
+ )
+
+ # Closing marker.
+ \1 [ ]* \n
+ }xm',
+ array(&$this, '_doFencedCodeBlocks_callback'), $text);
+
+ return $text;
+ }
+ function _doFencedCodeBlocks_callback($matches) {
+ $codeblock = $matches[2];
+ $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
+ $codeblock = preg_replace_callback('/^\n+/',
+ array(&$this, '_doFencedCodeBlocks_newlines'), $codeblock);
+ $codeblock = "<pre><code>$codeblock</code></pre>";
+ return "\n\n".$this->hashBlock($codeblock)."\n\n";
+ }
+ function _doFencedCodeBlocks_newlines($matches) {
+ return str_repeat("<br$this->empty_element_suffix",
+ strlen($matches[0]));
+ }
+
+
+ #
+ # Redefining emphasis markers so that emphasis by underscore does not
+ # work in the middle of a word.
+ #
+ var $em_relist = array(
+ '' => '(?:(?<!\*)\*(?!\*)|(?<![a-zA-Z0-9_])_(?!_))(?=\S|$)(?![.,:;]\s)',
+ '*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
+ '_' => '(?<=\S|^)(?<!_)_(?![a-zA-Z0-9_])',
+ );
+ var $strong_relist = array(
+ '' => '(?:(?<!\*)\*\*(?!\*)|(?<![a-zA-Z0-9_])__(?!_))(?=\S|$)(?![.,:;]\s)',
+ '**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
+ '__' => '(?<=\S|^)(?<!_)__(?![a-zA-Z0-9_])',
+ );
+ var $em_strong_relist = array(
+ '' => '(?:(?<!\*)\*\*\*(?!\*)|(?<![a-zA-Z0-9_])___(?!_))(?=\S|$)(?![.,:;]\s)',
+ '***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
+ '___' => '(?<=\S|^)(?<!_)___(?![a-zA-Z0-9_])',
+ );
+
+
+ function formParagraphs($text) {
+ #
+ # Params:
+ # $text - string to process with html <p> tags
+ #
+ # Strip leading and trailing lines:
+ $text = preg_replace('/\A\n+|\n+\z/', '', $text);
+
+ $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
+
+ #
+ # Wrap <p> tags and unhashify HTML blocks
+ #
+ foreach ($grafs as $key => $value) {
+ $value = trim($this->runSpanGamut($value));
+
+ # Check if this should be enclosed in a paragraph.
+ # Clean tag hashes & block tag hashes are left alone.
+ $is_p = !preg_match('/^B\x1A[0-9]+B|^C\x1A[0-9]+C$/', $value);
+
+ if ($is_p) {
+ $value = "<p>$value</p>";
+ }
+ $grafs[$key] = $value;
+ }
+
+ # Join grafs in one text, then unhash HTML tags.
+ $text = implode("\n\n", $grafs);
+
+ # Finish by removing any tag hashes still present in $text.
+ $text = $this->unhash($text);
+
+ return $text;
+ }
+
+
+ ### Footnotes
+
+ function stripFootnotes($text) {
+ #
+ # Strips link definitions from text, stores the URLs and titles in
+ # hash references.
+ #
+ $less_than_tab = $this->tab_width - 1;
+
+ # Link defs are in the form: [^id]: url "optional title"
+ $text = preg_replace_callback('{
+ ^[ ]{0,'.$less_than_tab.'}\[\^(.+?)\][ ]?: # note_id = $1
+ [ ]*
+ \n? # maybe *one* newline
+ ( # text = $2 (no blank lines allowed)
+ (?:
+ .+ # actual text
+ |
+ \n # newlines but
+ (?!\[\^.+?\]:\s)# negative lookahead for footnote marker.
+ (?!\n+[ ]{0,3}\S)# ensure line is not blank and followed
+ # by non-indented content
+ )*
+ )
+ }xm',
+ array(&$this, '_stripFootnotes_callback'),
+ $text);
+ return $text;
+ }
+ function _stripFootnotes_callback($matches) {
+ $note_id = $this->fn_id_prefix . $matches[1];
+ $this->footnotes[$note_id] = $this->outdent($matches[2]);
+ return ''; # String that will replace the block
+ }
+
+
+ function doFootnotes($text) {
+ #
+ # Replace footnote references in $text [^id] with a special text-token
+ # which will be replaced by the actual footnote marker in appendFootnotes.
+ #
+ if (!$this->in_anchor) {
+ $text = preg_replace('{\[\^(.+?)\]}', "F\x1Afn:\\1\x1A:", $text);
+ }
+ return $text;
+ }
+
+
+ function appendFootnotes($text) {
+ #
+ # Append footnote list to text.
+ #
+ $text = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}',
+ array(&$this, '_appendFootnotes_callback'), $text);
+
+ if (!empty($this->footnotes_ordered)) {
+ $text .= "\n\n";
+ $text .= "<div class=\"footnotes\">\n";
+ $text .= "<hr". $this->empty_element_suffix ."\n";
+ $text .= "<ol>\n\n";
+
+ $attr = " rev=\"footnote\"";
+ if ($this->fn_backlink_class != "") {
+ $class = $this->fn_backlink_class;
+ $class = $this->encodeAttribute($class);
+ $attr .= " class=\"$class\"";
+ }
+ if ($this->fn_backlink_title != "") {
+ $title = $this->fn_backlink_title;
+ $title = $this->encodeAttribute($title);
+ $attr .= " title=\"$title\"";
+ }
+ $num = 0;
+
+ while (!empty($this->footnotes_ordered)) {
+ $footnote = reset($this->footnotes_ordered);
+ $note_id = key($this->footnotes_ordered);
+ unset($this->footnotes_ordered[$note_id]);
+
+ $footnote .= "\n"; # Need to append newline before parsing.
+ $footnote = $this->runBlockGamut("$footnote\n");
+ $footnote = preg_replace_callback('{F\x1Afn:(.*?)\x1A:}',
+ array(&$this, '_appendFootnotes_callback'), $footnote);
+
+ $attr = str_replace("%%", ++$num, $attr);
+ $note_id = $this->encodeAttribute($note_id);
+
+ # Add backlink to last paragraph; create new paragraph if needed.
+ $backlink = "<a href=\"#fnref:$note_id\"$attr>&#8617;</a>";
+ if (preg_match('{</p>$}', $footnote)) {
+ $footnote = substr($footnote, 0, -4) . "&#160;$backlink</p>";
+ } else {
+ $footnote .= "\n\n<p>$backlink</p>";
+ }
+
+ $text .= "<li id=\"fn:$note_id\">\n";
+ $text .= $footnote . "\n";
+ $text .= "</li>\n\n";
+ }
+
+ $text .= "</ol>\n";
+ $text .= "</div>";
+ }
+ return $text;
+ }
+ function _appendFootnotes_callback($matches) {
+ $node_id = $this->fn_id_prefix . $matches[1];
+
+ # Create footnote marker only if it has a corresponding footnote *and*
+ # the footnote hasn't been used by another marker.
+ if (isset($this->footnotes[$node_id])) {
+ # Transfert footnote content to the ordered list.
+ $this->footnotes_ordered[$node_id] = $this->footnotes[$node_id];
+ unset($this->footnotes[$node_id]);
+
+ $num = $this->footnote_counter++;
+ $attr = " rel=\"footnote\"";
+ if ($this->fn_link_class != "") {
+ $class = $this->fn_link_class;
+ $class = $this->encodeAttribute($class);
+ $attr .= " class=\"$class\"";
+ }
+ if ($this->fn_link_title != "") {
+ $title = $this->fn_link_title;
+ $title = $this->encodeAttribute($title);
+ $attr .= " title=\"$title\"";
+ }
+
+ $attr = str_replace("%%", $num, $attr);
+ $node_id = $this->encodeAttribute($node_id);
+
+ return
+ "<sup id=\"fnref:$node_id\">".
+ "<a href=\"#fn:$node_id\"$attr>$num</a>".
+ "</sup>";
+ }
+
+ return "[^".$matches[1]."]";
+ }
+
+
+ ### Abbreviations ###
+
+ function stripAbbreviations($text) {
+ #
+ # Strips abbreviations from text, stores titles in hash references.
+ #
+ $less_than_tab = $this->tab_width - 1;
+
+ # Link defs are in the form: [id]*: url "optional title"
+ $text = preg_replace_callback('{
+ ^[ ]{0,'.$less_than_tab.'}\*\[(.+?)\][ ]?: # abbr_id = $1
+ (.*) # text = $2 (no blank lines allowed)
+ }xm',
+ array(&$this, '_stripAbbreviations_callback'),
+ $text);
+ return $text;
+ }
+ function _stripAbbreviations_callback($matches) {
+ $abbr_word = $matches[1];
+ $abbr_desc = $matches[2];
+ if ($this->abbr_word_re)
+ $this->abbr_word_re .= '|';
+ $this->abbr_word_re .= preg_quote($abbr_word);
+ $this->abbr_desciptions[$abbr_word] = trim($abbr_desc);
+ return ''; # String that will replace the block
+ }
+
+
+ function doAbbreviations($text) {
+ #
+ # Find defined abbreviations in text and wrap them in <abbr> elements.
+ #
+ if ($this->abbr_word_re) {
+ // cannot use the /x modifier because abbr_word_re may
+ // contain significant spaces:
+ $text = preg_replace_callback('{'.
+ '(?<![\w\x1A])'.
+ '(?:'.$this->abbr_word_re.')'.
+ '(?![\w\x1A])'.
+ '}',
+ array(&$this, '_doAbbreviations_callback'), $text);
+ }
+ return $text;
+ }
+ function _doAbbreviations_callback($matches) {
+ $abbr = $matches[0];
+ if (isset($this->abbr_desciptions[$abbr])) {
+ $desc = $this->abbr_desciptions[$abbr];
+ if (empty($desc)) {
+ return $this->hashPart("<abbr>$abbr</abbr>");
+ } else {
+ $desc = $this->encodeAttribute($desc);
+ return $this->hashPart("<abbr title=\"$desc\">$abbr</abbr>");
+ }
+ } else {
+ return $matches[0];
+ }
+ }
+
+}
+
+
+/*
+
+PHP Markdown Extra
+==================
+
+Description
+-----------
+
+This is a PHP port of the original Markdown formatter written in Perl
+by John Gruber. This special "Extra" version of PHP Markdown features
+further enhancements to the syntax for making additional constructs
+such as tables and definition list.
+
+Markdown is a text-to-HTML filter; it translates an easy-to-read /
+easy-to-write structured text format into HTML. Markdown's text format
+is most similar to that of plain text email, and supports features such
+as headers, *emphasis*, code blocks, blockquotes, and links.
+
+Markdown's syntax is designed not as a generic markup language, but
+specifically to serve as a front-end to (X)HTML. You can use span-level
+HTML tags anywhere in a Markdown document, and you can use block level
+HTML tags (like <div> and <table> as well).
+
+For more information about Markdown's syntax, see:
+
+<http://daringfireball.net/projects/markdown/>
+
+
+Bugs
+----
+
+To file bug reports please send email to:
+
+<michel.fortin@michelf.com>
+
+Please include with your report: (1) the example input; (2) the output you
+expected; (3) the output Markdown actually produced.
+
+
+Version History
+---------------
+
+See the readme file for detailed release notes for this version.
+
+
+Copyright and License
+---------------------
+
+PHP Markdown & Extra
+Copyright (c) 2004-2009 Michel Fortin
+<http://michelf.com/>
+All rights reserved.
+
+Based on Markdown
+Copyright (c) 2003-2006 John Gruber
+<http://daringfireball.net/>
+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 "Markdown" 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 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.
+
+*/
+?> \ No newline at end of file
diff --git a/vendors/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE b/vendors/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE
new file mode 100644
index 000000000..8ac9cf2aa
--- /dev/null
+++ b/vendors/simpletest/HELP_MY_TESTS_DONT_WORK_ANYMORE
@@ -0,0 +1,348 @@
+Simple Test interface changes
+=============================
+Because the SimpleTest tool set is still evolving it is likely that tests
+written with earlier versions will fail with the newest ones. The most
+dramatic changes are in the alpha releases. Here is a list of possible
+problems and their fixes...
+
+No method getRelativeUrls() or getAbsoluteUrls()
+------------------------------------------------
+These methods were always a bit weird anyway, and
+the new parsing of the base tag makes them more so.
+They have been replaced with getUrls() instead. If
+you want the old functionality then simply chop
+off the current domain from getUrl().
+
+Method setWildcard() removed in mocks
+-------------------------------------
+Even setWildcard() has been removed in 1.0.1beta now.
+If you want to test explicitely for a '*' string, then
+simply pass in new IdenticalExpectation('*') instead.
+
+No method _getTest() on mocks
+-----------------------------
+This has finally been removed. It was a pretty esoteric
+flex point anyway. It was there to allow the mocks to
+work with other test tools, but no one does this.
+
+No method assertError(), assertNoErrors(), swallowErrors()
+----------------------------------------------------------
+These have been deprecated in 1.0.1beta in favour of
+expectError() and expectException(). assertNoErrors() is
+redundant if you use expectError() as failures are now reported
+immediately.
+
+No method TestCase::signal()
+----------------------------
+This has been deprecated in favour of triggering an error or
+throwing an exception. Deprecated as of 1.0.1beta.
+
+No method TestCase::sendMessage()
+---------------------------------
+This has been deprecated as of 1.0.1beta.
+
+Failure to connect now emits failures
+-------------------------------------
+It used to be that you would have to use the
+getTransferError() call on the web tester to see if
+there was a socket level error in a fetch. This check
+is now always carried out by the WebTestCase unless
+the fetch is prefaced with WebTestCase::ignoreErrors().
+The ignore directive only lasts for test case fetching
+action such as get() and click().
+
+No method SimpleTestOptions::ignore()
+-------------------------------------
+This is deprecated in version 1.0.1beta and has been moved
+to SimpleTest::ignore() as that is more readable. In
+addition, parent classes are also ignored automatically.
+If you are using PHP5 you can skip this directive simply
+by marking your test case as abstract.
+
+No method assertCopy()
+----------------------
+This is deprecated in 1.0.1 in favour of assertClone().
+The assertClone() method is slightly different in that
+the objects must be identical, but without being a
+reference. It is thus not a strict inversion of
+assertReference().
+
+Constructor wildcard override has no effect in mocks
+----------------------------------------------------
+As of 1.0.1beta this is now set with setWildcard() instead
+of in the constructor.
+
+No methods setStubBaseClass()/getStubBaseClass()
+------------------------------------------------
+As mocks are now used instead of stubs, these methods
+stopped working and are now removed as of the 1.0.1beta
+release. The mock objects may be freely used instead.
+
+No method addPartialMockCode()
+------------------------------
+The ability to insert arbitrary partial mock code
+has been removed. This was a low value feature
+causing needless complications. It was removed
+in the 1.0.1beta release.
+
+No method setMockBaseClass()
+----------------------------
+The ability to change the mock base class has been
+scheduled for removal and is deprecated since the
+1.0.1beta version. This was a rarely used feature
+except as a workaround for PHP5 limitations. As
+these limitations are being resolved it's hoped
+that the bundled mocks can be used directly.
+
+No class Stub
+-------------
+Server stubs are deprecated from 1.0.1 as the mocks now
+have exactly the same interface. Just use mock objects
+instead.
+
+No class SimpleTestOptions
+--------------------------
+This was replced by the shorter SimpleTest in 1.0.1beta1
+and is since deprecated.
+
+No file simple_test.php
+-----------------------
+This was renamed test_case.php in 1.0.1beta to more accurately
+reflect it's purpose. This file should never be directly
+included in test suites though, as it's part of the
+underlying mechanics and has a tendency to be refactored.
+
+No class WantedPatternExpectation
+---------------------------------
+This was deprecated in 1.0.1alpha in favour of the simpler
+name PatternExpectation.
+
+No class NoUnwantedPatternExpectation
+-------------------------------------
+This was deprecated in 1.0.1alpha in favour of the simpler
+name NoPatternExpectation.
+
+No method assertNoUnwantedPattern()
+-----------------------------------
+This has been renamed to assertNoPattern() in 1.0.1alpha and
+the old form is deprecated.
+
+No method assertWantedPattern()
+-------------------------------
+This has been renamed to assertPattern() in 1.0.1alpha and
+the old form is deprecated.
+
+No method assertExpectation()
+-----------------------------
+This was renamed as assert() in 1.0.1alpha and the old form
+has been deprecated.
+
+No class WildcardExpectation
+----------------------------
+This was a mostly internal class for the mock objects. It was
+renamed AnythingExpectation to bring it closer to JMock and
+NMock in version 1.0.1alpha.
+
+Missing UnitTestCase::assertErrorPattern()
+------------------------------------------
+This method is deprecated for version 1.0.1 onwards.
+This method has been subsumed by assertError() that can now
+take an expectation. Simply pass a PatternExpectation
+into assertError() to simulate the old behaviour.
+
+No HTML when matching page elements
+-----------------------------------
+This behaviour has been switched to using plain text as if it
+were seen by the user of the browser. This means that HTML tags
+are suppressed, entities are converted and whitespace is
+normalised. This should make it easier to match items in forms.
+Also images are replaced with their "alt" text so that they
+can be matched as well.
+
+No method SimpleRunner::_getTestCase()
+--------------------------------------
+This was made public as getTestCase() in 1.0RC2.
+
+No method restartSession()
+--------------------------
+This was renamed to restart() in the WebTestCase, SimpleBrowser
+and the underlying SimpleUserAgent in 1.0RC2. Because it was
+undocumented anyway, no attempt was made at backward
+compatibility.
+
+My custom test case ignored by tally()
+--------------------------------------
+The _assertTrue method has had it's signature changed due to a bug
+in the PHP 5.0.1 release. You must now use getTest() from within
+that method to get the test case. Mock compatibility with other
+unit testers is now deprecated as of 1.0.1alpha as PEAR::PHPUnit2
+should soon have mock support of it's own.
+
+Broken code extending SimpleRunner
+----------------------------------
+This was replaced with SimpleScorer so that I could use the runner
+name in another class. This happened in RC1 development and there
+is no easy backward compatibility fix. The solution is simply to
+extend SimpleScorer instead.
+
+Missing method getBaseCookieValue()
+-----------------------------------
+This was renamed getCurrentCookieValue() in RC1.
+
+Missing files from the SimpleTest suite
+---------------------------------------
+Versions of SimpleTest prior to Beta6 required a SIMPLE_TEST constant
+to point at the SimpleTest folder location before any of the toolset
+was loaded. This is no longer documented as it is now unnecessary
+for later versions. If you are using an earlier version you may
+need this constant. Consult the documentation that was bundled with
+the release that you are using or upgrade to Beta6 or later.
+
+No method SimpleBrowser::getCurrentUrl()
+--------------------------------------
+This is replaced with the more versatile showRequest() for
+debugging. It only existed in this context for version Beta5.
+Later versions will have SimpleBrowser::getHistory() for tracking
+paths through pages. It is renamed as getUrl() since 1.0RC1.
+
+No method Stub::setStubBaseClass()
+----------------------------------
+This method has finally been removed in 1.0RC1. Use
+SimpleTestOptions::setStubBaseClass() instead.
+
+No class CommandLineReporter
+----------------------------
+This was renamed to TextReporter in Beta3 and the deprecated version
+was removed in 1.0RC1.
+
+No method requireReturn()
+-------------------------
+This was deprecated in Beta3 and is now removed.
+
+No method expectCookie()
+------------------------
+This method was abruptly removed in Beta4 so as to simplify the internals
+until another mechanism can replace it. As a workaround it is necessary
+to assert that the cookie has changed by setting it before the page
+fetch and then assert the desired value.
+
+No method clickSubmitByFormId()
+-------------------------------
+This method had an incorrect name as no button was involved. It was
+renamed to submitByFormId() in Beta4 and the old version deprecated.
+Now removed.
+
+No method paintStart() or paintEnd()
+------------------------------------
+You should only get this error if you have subclassed the lower level
+reporting and test runner machinery. These methods have been broken
+down into events for test methods, events for test cases and events
+for group tests. The new methods are...
+
+paintStart() --> paintMethodStart(), paintCaseStart(), paintGroupStart()
+paintEnd() --> paintMethodEnd(), paintCaseEnd(), paintGroupEnd()
+
+This change was made in Beta3, ironically to make it easier to subclass
+the inner machinery. Simply duplicating the code you had in the previous
+methods should provide a temporary fix.
+
+No class TestDisplay
+--------------------
+This has been folded into SimpleReporter in Beta3 and is now deprecated.
+It was removed in RC1.
+
+No method WebTestCase::fetch()
+------------------------------
+This was renamed get() in Alpha8. It is removed in Beta3.
+
+No method submit()
+------------------
+This has been renamed clickSubmit() in Beta1. The old method was
+removed in Beta2.
+
+No method clearHistory()
+------------------------
+This method is deprecated in Beta2 and removed in RC1.
+
+No method getCallCount()
+------------------------
+This method has been deprecated since Beta1 and has now been
+removed. There are now more ways to set expectations on counts
+and so this method should be unecessery. Removed in RC1.
+
+Cannot find file *
+------------------
+The following public name changes have occoured...
+
+simple_html_test.php --> reporter.php
+simple_mock.php --> mock_objects.php
+simple_unit.php --> unit_tester.php
+simple_web.php --> web_tester.php
+
+The old names were deprecated in Alpha8 and removed in Beta1.
+
+No method attachObserver()
+--------------------------
+Prior to the Alpha8 release the old internal observer pattern was
+gutted and replaced with a visitor. This is to trade flexibility of
+test case expansion against the ease of writing user interfaces.
+
+Code such as...
+
+$test = &new MyTestCase();
+$test->attachObserver(new TestHtmlDisplay());
+$test->run();
+
+...should be rewritten as...
+
+$test = &new MyTestCase();
+$test->run(new HtmlReporter());
+
+If you previously attached multiple observers then the workaround
+is to run the tests twice, once with each, until they can be combined.
+For one observer the old method is simulated in Alpha 8, but is
+removed in Beta1.
+
+No class TestHtmlDisplay
+------------------------
+This class has been renamed to HtmlReporter in Alpha8. It is supported,
+but deprecated in Beta1 and removed in Beta2. If you have subclassed
+the display for your own design, then you will have to extend this
+class (HtmlReporter) instead.
+
+If you have accessed the event queue by overriding the notify() method
+then I am afraid you are in big trouble :(. The reporter is now
+carried around the test suite by the runner classes and the methods
+called directly. In the unlikely event that this is a problem and
+you don't want to upgrade the test tool then simplest is to write your
+own runner class and invoke the tests with...
+
+$test->accept(new MyRunner(new MyReporter()));
+
+...rather than the run method. This should be easier to extend
+anyway and gives much more control. Even this method is overhauled
+in Beta3 where the runner class can be set within the test case. Really
+the best thing to do is to upgrade to this version as whatever you were
+trying to achieve before should now be very much easier.
+
+Missing set options method
+--------------------------
+All test suite options are now in one class called SimpleTestOptions.
+This means that options are set differently...
+
+GroupTest::ignore() --> SimpleTestOptions::ignore()
+Mock::setMockBaseClass() --> SimpleTestOptions::setMockBaseClass()
+
+These changed in Alpha8 and the old versions are now removed in RC1.
+
+No method setExpected*()
+------------------------
+The mock expectations changed their names in Alpha4 and the old names
+ceased to be supported in Alpha8. The changes are...
+
+setExpectedArguments() --> expectArguments()
+setExpectedArgumentsSequence() --> expectArgumentsAt()
+setExpectedCallCount() --> expectCallCount()
+setMaximumCallCount() --> expectMaximumCallCount()
+
+The parameters remained the same.
diff --git a/vendors/simpletest/LICENSE b/vendors/simpletest/LICENSE
new file mode 100644
index 000000000..09f465ab7
--- /dev/null
+++ b/vendors/simpletest/LICENSE
@@ -0,0 +1,502 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/vendors/simpletest/README b/vendors/simpletest/README
new file mode 100644
index 000000000..c52e3f7ed
--- /dev/null
+++ b/vendors/simpletest/README
@@ -0,0 +1,108 @@
+SimpleTest
+==========
+You probably got this package from...
+http://simpletest.sourceforge.net/projects/simpletest/
+
+If there is no licence agreement with this package please download
+a version from the location above. You must read and accept that
+licence to use this software. The file is titled simply LICENSE.
+
+What is it? It's a framework for unit testing, web site testing and
+mock objects for PHP 4.2.0+ (and PHP 5.0 to 5.3 without E_STRICT).
+
+If you have used JUnit, you will find this PHP unit testing version very
+similar. Also included is a mock objects and server stubs generator.
+The stubs can have return values set for different arguments, can have
+sequences set also by arguments and can return items by reference.
+The mocks inherit all of this functionality and can also have
+expectations set, again in sequences and for different arguments.
+
+A web tester similar in concept to JWebUnit is also included. There is no
+JavaScript or tables support, but forms, authentication, cookies and
+frames are handled.
+
+You can see a release schedule at http://www.lastcraft.com/overview.php
+which is also copied to the documentation folder with this release.
+A full PHPDocumenter API documentation exists at
+http://simpletest.sourceforge.net/.
+
+The user interface is minimal
+in the extreme, but a lot of information flows from the test suite.
+After version 1.0 we will release a better web UI, but we are leaving XUL
+and GTk versions to volunteers as everybody has their own opinion
+on a good GUI, and we don't want to discourage development by shipping
+one with the toolkit. YOucan download an Eclipse plug-in separately.
+
+You are looking at a second full release. The unit tests for SimpleTest
+itself can be run here...
+
+simpletest/test/unit_tests.php
+
+And tests involving live network connections as well are here...
+
+simpletest/test/all_tests.php
+
+The full tests will typically overrun the 8Mb limit often allowed
+to a PHP process. A workaround is to run the tests on the command
+with a custom php.ini file if you do not have access to your server
+version.
+
+You will have to edit the all_tests.php file if you are accesssing
+the internet through a proxy server. See the comments in all_tests.php
+for instructions.
+
+The full tests read some test data from the LastCraft site. If the site
+is down or has been modified for a later version then you will get
+spurious errors. A unit_tests.php failure on the other hand would be
+very serious. As far as we know we haven't yet managed to check in any
+unit test failures, so please correct us if you find one.
+
+Even if all of the tests run please verify that your existing test suites
+also function as expected. If they don't see the file...
+
+HELP_MY_TESTS_DONT_WORK_ANYMORE
+
+This contains information on interface changes. It also points out
+deprecated interfaces, so you should read this even if all of
+your current tests appear to run.
+
+There is a documentation folder which contains the core reference information
+in English and French, although this information is fairly basic.
+You can find a tutorial on...
+
+http://www.lastcraft.com/first_test_tutorial.php
+
+...to get you started and this material will eventually become included
+with the project documentation. A French translation exists at...
+
+http://www.onpk.net/index.php/2005/01/12/254-tutoriel-simpletest-decouvrir-les-tests-unitaires.
+
+If you download and use, and possibly even extend this tool, please let us
+know. Any feedback, even bad, is always welcome and we will work to get
+your suggestions into the next release. Ideally please send your
+comments to...
+
+simpletest-support@lists.sourceforge.net
+
+...so that others can read them too. We usually try to respond within 48
+hours.
+
+There is no change log except at Sourceforge. You can visit the
+release notes to see the completed TODO list after each cycle and also the
+status of any bugs, but if the bug is recent then it will be fixed in SVN only.
+The SVN check-ins always have all the tests passing and so SVN snapshots should
+be pretty usable, although the code may not look so good internally.
+
+Oh, yes. It is called "Simple" because it should be simple to
+use. We intend to add a complete set of tools for a test first
+and "test as you code" type of development. "Simple" does not
+mean "Lite" in this context.
+
+Thanks to everyone who has sent comments and offered suggestions. They
+really are invaluable, but sadly you are too many to mention in full.
+Thanks to all on the advanced PHP forum on SitePoint, especially Harry
+Feucks. Early adopters are always an inspiration.
+
+Marcus Baker, Jason Sweat, Travis Swicegood, Perrick Penet and Edward Z. Yang.
+--
+marcus@lastcraft.com
diff --git a/vendors/simpletest/VERSION b/vendors/simpletest/VERSION
new file mode 100644
index 000000000..7f207341d
--- /dev/null
+++ b/vendors/simpletest/VERSION
@@ -0,0 +1 @@
+1.0.1 \ No newline at end of file
diff --git a/vendors/simpletest/authentication.php b/vendors/simpletest/authentication.php
new file mode 100644
index 000000000..c56d11bbb
--- /dev/null
+++ b/vendors/simpletest/authentication.php
@@ -0,0 +1,238 @@
+<?php
+/**
+ * Base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: authentication.php 1720 2008-04-07 02:32:43Z lastcraft $
+ */
+/**
+ * include http class
+ */
+require_once(dirname(__FILE__) . '/http.php');
+
+/**
+ * Represents a single security realm's identity.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleRealm {
+ var $_type;
+ var $_root;
+ var $_username;
+ var $_password;
+
+ /**
+ * Starts with the initial entry directory.
+ * @param string $type Authentication type for this
+ * realm. Only Basic authentication
+ * is currently supported.
+ * @param SimpleUrl $url Somewhere in realm.
+ * @access public
+ */
+ function SimpleRealm($type, $url) {
+ $this->_type = $type;
+ $this->_root = $url->getBasePath();
+ $this->_username = false;
+ $this->_password = false;
+ }
+
+ /**
+ * Adds another location to the realm.
+ * @param SimpleUrl $url Somewhere in realm.
+ * @access public
+ */
+ function stretch($url) {
+ $this->_root = $this->_getCommonPath($this->_root, $url->getPath());
+ }
+
+ /**
+ * Finds the common starting path.
+ * @param string $first Path to compare.
+ * @param string $second Path to compare.
+ * @return string Common directories.
+ * @access private
+ */
+ function _getCommonPath($first, $second) {
+ $first = explode('/', $first);
+ $second = explode('/', $second);
+ for ($i = 0; $i < min(count($first), count($second)); $i++) {
+ if ($first[$i] != $second[$i]) {
+ return implode('/', array_slice($first, 0, $i)) . '/';
+ }
+ }
+ return implode('/', $first) . '/';
+ }
+
+ /**
+ * Sets the identity to try within this realm.
+ * @param string $username Username in authentication dialog.
+ * @param string $username Password in authentication dialog.
+ * @access public
+ */
+ function setIdentity($username, $password) {
+ $this->_username = $username;
+ $this->_password = $password;
+ }
+
+ /**
+ * Accessor for current identity.
+ * @return string Last succesful username.
+ * @access public
+ */
+ function getUsername() {
+ return $this->_username;
+ }
+
+ /**
+ * Accessor for current identity.
+ * @return string Last succesful password.
+ * @access public
+ */
+ function getPassword() {
+ return $this->_password;
+ }
+
+ /**
+ * Test to see if the URL is within the directory
+ * tree of the realm.
+ * @param SimpleUrl $url URL to test.
+ * @return boolean True if subpath.
+ * @access public
+ */
+ function isWithin($url) {
+ if ($this->_isIn($this->_root, $url->getBasePath())) {
+ return true;
+ }
+ if ($this->_isIn($this->_root, $url->getBasePath() . $url->getPage() . '/')) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Tests to see if one string is a substring of
+ * another.
+ * @param string $part Small bit.
+ * @param string $whole Big bit.
+ * @return boolean True if the small bit is
+ * in the big bit.
+ * @access private
+ */
+ function _isIn($part, $whole) {
+ return strpos($whole, $part) === 0;
+ }
+}
+
+/**
+ * Manages security realms.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleAuthenticator {
+ var $_realms;
+
+ /**
+ * Clears the realms.
+ * @access public
+ */
+ function SimpleAuthenticator() {
+ $this->restartSession();
+ }
+
+ /**
+ * Starts with no realms set up.
+ * @access public
+ */
+ function restartSession() {
+ $this->_realms = array();
+ }
+
+ /**
+ * Adds a new realm centered the current URL.
+ * Browsers vary wildly on their behaviour in this
+ * regard. Mozilla ignores the realm and presents
+ * only when challenged, wasting bandwidth. IE
+ * just carries on presenting until a new challenge
+ * occours. SimpleTest tries to follow the spirit of
+ * the original standards committee and treats the
+ * base URL as the root of a file tree shaped realm.
+ * @param SimpleUrl $url Base of realm.
+ * @param string $type Authentication type for this
+ * realm. Only Basic authentication
+ * is currently supported.
+ * @param string $realm Name of realm.
+ * @access public
+ */
+ function addRealm($url, $type, $realm) {
+ $this->_realms[$url->getHost()][$realm] = new SimpleRealm($type, $url);
+ }
+
+ /**
+ * Sets the current identity to be presented
+ * against that realm.
+ * @param string $host Server hosting realm.
+ * @param string $realm Name of realm.
+ * @param string $username Username for realm.
+ * @param string $password Password for realm.
+ * @access public
+ */
+ function setIdentityForRealm($host, $realm, $username, $password) {
+ if (isset($this->_realms[$host][$realm])) {
+ $this->_realms[$host][$realm]->setIdentity($username, $password);
+ }
+ }
+
+ /**
+ * Finds the name of the realm by comparing URLs.
+ * @param SimpleUrl $url URL to test.
+ * @return SimpleRealm Name of realm.
+ * @access private
+ */
+ function _findRealmFromUrl($url) {
+ if (! isset($this->_realms[$url->getHost()])) {
+ return false;
+ }
+ foreach ($this->_realms[$url->getHost()] as $name => $realm) {
+ if ($realm->isWithin($url)) {
+ return $realm;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Presents the appropriate headers for this location.
+ * @param SimpleHttpRequest $request Request to modify.
+ * @param SimpleUrl $url Base of realm.
+ * @access public
+ */
+ function addHeaders(&$request, $url) {
+ if ($url->getUsername() && $url->getPassword()) {
+ $username = $url->getUsername();
+ $password = $url->getPassword();
+ } elseif ($realm = $this->_findRealmFromUrl($url)) {
+ $username = $realm->getUsername();
+ $password = $realm->getPassword();
+ } else {
+ return;
+ }
+ $this->addBasicHeaders($request, $username, $password);
+ }
+
+ /**
+ * Presents the appropriate headers for this
+ * location for basic authentication.
+ * @param SimpleHttpRequest $request Request to modify.
+ * @param string $username Username for realm.
+ * @param string $password Password for realm.
+ * @access public
+ * @static
+ */
+ function addBasicHeaders(&$request, $username, $password) {
+ if ($username && $password) {
+ $request->addHeaderLine(
+ 'Authorization: Basic ' . base64_encode("$username:$password"));
+ }
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/autorun.php b/vendors/simpletest/autorun.php
new file mode 100644
index 000000000..7d97d2d7f
--- /dev/null
+++ b/vendors/simpletest/autorun.php
@@ -0,0 +1,87 @@
+<?php
+/**
+ * Autorunner which runs all tests cases found in a file
+ * that includes this module.
+ * @package SimpleTest
+ * @version $Id: autorun.php 1721 2008-04-07 19:27:10Z lastcraft $
+ */
+require_once dirname(__FILE__) . '/unit_tester.php';
+require_once dirname(__FILE__) . '/mock_objects.php';
+require_once dirname(__FILE__) . '/collector.php';
+require_once dirname(__FILE__) . '/default_reporter.php';
+
+$GLOBALS['SIMPLETEST_AUTORUNNER_INITIAL_CLASSES'] = get_declared_classes();
+register_shutdown_function('simpletest_autorun');
+
+/**
+ * Exit handler to run all recent test cases if no test has
+ * so far been run. Uses the DefaultReporter which can have
+ * it's output controlled with SimpleTest::prefer().
+ */
+function simpletest_autorun() {
+ if (tests_have_run()) {
+ return;
+ }
+ $candidates = array_intersect(
+ capture_new_classes(),
+ classes_defined_in_initial_file());
+ $loader = new SimpleFileLoader();
+ $suite = $loader->createSuiteFromClasses(
+ basename(initial_file()),
+ $loader->selectRunnableTests($candidates));
+ $result = $suite->run(new DefaultReporter());
+ if (SimpleReporter::inCli()) {
+ exit($result ? 0 : 1);
+ }
+}
+
+/**
+ * Checks the current test context to see if a test has
+ * ever been run.
+ * @return boolean True if tests have run.
+ */
+function tests_have_run() {
+ if ($context = SimpleTest::getContext()) {
+ return (boolean)$context->getTest();
+ }
+ return false;
+}
+
+/**
+ * The first autorun file.
+ * @return string Filename of first autorun script.
+ */
+function initial_file() {
+ static $file = false;
+ if (! $file) {
+ $file = reset(get_included_files());
+ }
+ return $file;
+}
+
+/**
+ * Just the classes from the first autorun script. May
+ * get a few false positives, as it just does a regex based
+ * on following the word "class".
+ * @return array List of all possible classes in first
+ * autorun script.
+ */
+function classes_defined_in_initial_file() {
+ if (preg_match_all('/\bclass\s+(\w+)/i', file_get_contents(initial_file()), $matches)) {
+ return array_map('strtolower', $matches[1]);
+ }
+ return array();
+}
+
+/**
+ * Every class since the first autorun include. This
+ * is safe enough if require_once() is alwyas used.
+ * @return array Class names.
+ */
+function capture_new_classes() {
+ global $SIMPLETEST_AUTORUNNER_INITIAL_CLASSES;
+ return array_map('strtolower', array_diff(get_declared_classes(),
+ $SIMPLETEST_AUTORUNNER_INITIAL_CLASSES ?
+ $SIMPLETEST_AUTORUNNER_INITIAL_CLASSES : array()));
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/browser.php b/vendors/simpletest/browser.php
new file mode 100644
index 000000000..e2a1fe1d6
--- /dev/null
+++ b/vendors/simpletest/browser.php
@@ -0,0 +1,1098 @@
+<?php
+/**
+ * Base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: browser.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/simpletest.php');
+require_once(dirname(__FILE__) . '/http.php');
+require_once(dirname(__FILE__) . '/encoding.php');
+require_once(dirname(__FILE__) . '/page.php');
+require_once(dirname(__FILE__) . '/selector.php');
+require_once(dirname(__FILE__) . '/frames.php');
+require_once(dirname(__FILE__) . '/user_agent.php');
+/**#@-*/
+
+if (!defined('DEFAULT_MAX_NESTED_FRAMES')) {
+ define('DEFAULT_MAX_NESTED_FRAMES', 3);
+}
+
+/**
+ * Browser history list.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleBrowserHistory {
+ var $_sequence;
+ var $_position;
+
+ /**
+ * Starts empty.
+ * @access public
+ */
+ function SimpleBrowserHistory() {
+ $this->_sequence = array();
+ $this->_position = -1;
+ }
+
+ /**
+ * Test for no entries yet.
+ * @return boolean True if empty.
+ * @access private
+ */
+ function _isEmpty() {
+ return ($this->_position == -1);
+ }
+
+ /**
+ * Test for being at the beginning.
+ * @return boolean True if first.
+ * @access private
+ */
+ function _atBeginning() {
+ return ($this->_position == 0) && ! $this->_isEmpty();
+ }
+
+ /**
+ * Test for being at the last entry.
+ * @return boolean True if last.
+ * @access private
+ */
+ function _atEnd() {
+ return ($this->_position + 1 >= count($this->_sequence)) && ! $this->_isEmpty();
+ }
+
+ /**
+ * Adds a successfully fetched page to the history.
+ * @param SimpleUrl $url URL of fetch.
+ * @param SimpleEncoding $parameters Any post data with the fetch.
+ * @access public
+ */
+ function recordEntry($url, $parameters) {
+ $this->_dropFuture();
+ array_push(
+ $this->_sequence,
+ array('url' => $url, 'parameters' => $parameters));
+ $this->_position++;
+ }
+
+ /**
+ * Last fully qualified URL for current history
+ * position.
+ * @return SimpleUrl URL for this position.
+ * @access public
+ */
+ function getUrl() {
+ if ($this->_isEmpty()) {
+ return false;
+ }
+ return $this->_sequence[$this->_position]['url'];
+ }
+
+ /**
+ * Parameters of last fetch from current history
+ * position.
+ * @return SimpleFormEncoding Post parameters.
+ * @access public
+ */
+ function getParameters() {
+ if ($this->_isEmpty()) {
+ return false;
+ }
+ return $this->_sequence[$this->_position]['parameters'];
+ }
+
+ /**
+ * Step back one place in the history. Stops at
+ * the first page.
+ * @return boolean True if any previous entries.
+ * @access public
+ */
+ function back() {
+ if ($this->_isEmpty() || $this->_atBeginning()) {
+ return false;
+ }
+ $this->_position--;
+ return true;
+ }
+
+ /**
+ * Step forward one place. If already at the
+ * latest entry then nothing will happen.
+ * @return boolean True if any future entries.
+ * @access public
+ */
+ function forward() {
+ if ($this->_isEmpty() || $this->_atEnd()) {
+ return false;
+ }
+ $this->_position++;
+ return true;
+ }
+
+ /**
+ * Ditches all future entries beyond the current
+ * point.
+ * @access private
+ */
+ function _dropFuture() {
+ if ($this->_isEmpty()) {
+ return;
+ }
+ while (! $this->_atEnd()) {
+ array_pop($this->_sequence);
+ }
+ }
+}
+
+/**
+ * Simulated web browser. This is an aggregate of
+ * the user agent, the HTML parsing, request history
+ * and the last header set.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleBrowser {
+ var $_user_agent;
+ var $_page;
+ var $_history;
+ var $_ignore_frames;
+ var $_maximum_nested_frames;
+
+ /**
+ * Starts with a fresh browser with no
+ * cookie or any other state information. The
+ * exception is that a default proxy will be
+ * set up if specified in the options.
+ * @access public
+ */
+ function SimpleBrowser() {
+ $this->_user_agent = &$this->_createUserAgent();
+ $this->_user_agent->useProxy(
+ SimpleTest::getDefaultProxy(),
+ SimpleTest::getDefaultProxyUsername(),
+ SimpleTest::getDefaultProxyPassword());
+ $this->_page = &new SimplePage();
+ $this->_history = &$this->_createHistory();
+ $this->_ignore_frames = false;
+ $this->_maximum_nested_frames = DEFAULT_MAX_NESTED_FRAMES;
+ }
+
+ /**
+ * Creates the underlying user agent.
+ * @return SimpleFetcher Content fetcher.
+ * @access protected
+ */
+ function &_createUserAgent() {
+ $user_agent = &new SimpleUserAgent();
+ return $user_agent;
+ }
+
+ /**
+ * Creates a new empty history list.
+ * @return SimpleBrowserHistory New list.
+ * @access protected
+ */
+ function &_createHistory() {
+ $history = &new SimpleBrowserHistory();
+ return $history;
+ }
+
+ /**
+ * Disables frames support. Frames will not be fetched
+ * and the frameset page will be used instead.
+ * @access public
+ */
+ function ignoreFrames() {
+ $this->_ignore_frames = true;
+ }
+
+ /**
+ * Enables frames support. Frames will be fetched from
+ * now on.
+ * @access public
+ */
+ function useFrames() {
+ $this->_ignore_frames = false;
+ }
+
+ /**
+ * Switches off cookie sending and recieving.
+ * @access public
+ */
+ function ignoreCookies() {
+ $this->_user_agent->ignoreCookies();
+ }
+
+ /**
+ * Switches back on the cookie sending and recieving.
+ * @access public
+ */
+ function useCookies() {
+ $this->_user_agent->useCookies();
+ }
+
+ /**
+ * Parses the raw content into a page. Will load further
+ * frame pages unless frames are disabled.
+ * @param SimpleHttpResponse $response Response from fetch.
+ * @param integer $depth Nested frameset depth.
+ * @return SimplePage Parsed HTML.
+ * @access private
+ */
+ function &_parse($response, $depth = 0) {
+ $page = &$this->_buildPage($response);
+ if ($this->_ignore_frames || ! $page->hasFrames() || ($depth > $this->_maximum_nested_frames)) {
+ return $page;
+ }
+ $frameset = &new SimpleFrameset($page);
+ foreach ($page->getFrameset() as $key => $url) {
+ $frame = &$this->_fetch($url, new SimpleGetEncoding(), $depth + 1);
+ $frameset->addFrame($frame, $key);
+ }
+ return $frameset;
+ }
+
+ /**
+ * Assembles the parsing machinery and actually parses
+ * a single page. Frees all of the builder memory and so
+ * unjams the PHP memory management.
+ * @param SimpleHttpResponse $response Response from fetch.
+ * @return SimplePage Parsed top level page.
+ * @access protected
+ */
+ function &_buildPage($response) {
+ $builder = &new SimplePageBuilder();
+ $page = &$builder->parse($response);
+ $builder->free();
+ unset($builder);
+ return $page;
+ }
+
+ /**
+ * Fetches a page. Jointly recursive with the _parse()
+ * method as it descends a frameset.
+ * @param string/SimpleUrl $url Target to fetch.
+ * @param SimpleEncoding $encoding GET/POST parameters.
+ * @param integer $depth Nested frameset depth protection.
+ * @return SimplePage Parsed page.
+ * @access private
+ */
+ function &_fetch($url, $encoding, $depth = 0) {
+ $response = &$this->_user_agent->fetchResponse($url, $encoding);
+ if ($response->isError()) {
+ $page = &new SimplePage($response);
+ } else {
+ $page = &$this->_parse($response, $depth);
+ }
+ return $page;
+ }
+
+ /**
+ * Fetches a page or a single frame if that is the current
+ * focus.
+ * @param SimpleUrl $url Target to fetch.
+ * @param SimpleEncoding $parameters GET/POST parameters.
+ * @return string Raw content of page.
+ * @access private
+ */
+ function _load($url, $parameters) {
+ $frame = $url->getTarget();
+ if (! $frame || ! $this->_page->hasFrames() || (strtolower($frame) == '_top')) {
+ return $this->_loadPage($url, $parameters);
+ }
+ return $this->_loadFrame(array($frame), $url, $parameters);
+ }
+
+ /**
+ * Fetches a page and makes it the current page/frame.
+ * @param string/SimpleUrl $url Target to fetch as string.
+ * @param SimplePostEncoding $parameters POST parameters.
+ * @return string Raw content of page.
+ * @access private
+ */
+ function _loadPage($url, $parameters) {
+ $this->_page = &$this->_fetch($url, $parameters);
+ $this->_history->recordEntry(
+ $this->_page->getUrl(),
+ $this->_page->getRequestData());
+ return $this->_page->getRaw();
+ }
+
+ /**
+ * Fetches a frame into the existing frameset replacing the
+ * original.
+ * @param array $frames List of names to drill down.
+ * @param string/SimpleUrl $url Target to fetch as string.
+ * @param SimpleFormEncoding $parameters POST parameters.
+ * @return string Raw content of page.
+ * @access private
+ */
+ function _loadFrame($frames, $url, $parameters) {
+ $page = &$this->_fetch($url, $parameters);
+ $this->_page->setFrame($frames, $page);
+ return $page->getRaw();
+ }
+
+ /**
+ * Removes expired and temporary cookies as if
+ * the browser was closed and re-opened.
+ * @param string/integer $date Time when session restarted.
+ * If omitted then all persistent
+ * cookies are kept.
+ * @access public
+ */
+ function restart($date = false) {
+ $this->_user_agent->restart($date);
+ }
+
+ /**
+ * Adds a header to every fetch.
+ * @param string $header Header line to add to every
+ * request until cleared.
+ * @access public
+ */
+ function addHeader($header) {
+ $this->_user_agent->addHeader($header);
+ }
+
+ /**
+ * Ages the cookies by the specified time.
+ * @param integer $interval Amount in seconds.
+ * @access public
+ */
+ function ageCookies($interval) {
+ $this->_user_agent->ageCookies($interval);
+ }
+
+ /**
+ * Sets an additional cookie. If a cookie has
+ * the same name and path it is replaced.
+ * @param string $name Cookie key.
+ * @param string $value Value of cookie.
+ * @param string $host Host upon which the cookie is valid.
+ * @param string $path Cookie path if not host wide.
+ * @param string $expiry Expiry date.
+ * @access public
+ */
+ function setCookie($name, $value, $host = false, $path = '/', $expiry = false) {
+ $this->_user_agent->setCookie($name, $value, $host, $path, $expiry);
+ }
+
+ /**
+ * Reads the most specific cookie value from the
+ * browser cookies.
+ * @param string $host Host to search.
+ * @param string $path Applicable path.
+ * @param string $name Name of cookie to read.
+ * @return string False if not present, else the
+ * value as a string.
+ * @access public
+ */
+ function getCookieValue($host, $path, $name) {
+ return $this->_user_agent->getCookieValue($host, $path, $name);
+ }
+
+ /**
+ * Reads the current cookies for the current URL.
+ * @param string $name Key of cookie to find.
+ * @return string Null if there is no current URL, false
+ * if the cookie is not set.
+ * @access public
+ */
+ function getCurrentCookieValue($name) {
+ return $this->_user_agent->getBaseCookieValue($name, $this->_page->getUrl());
+ }
+
+ /**
+ * Sets the maximum number of redirects before
+ * a page will be loaded anyway.
+ * @param integer $max Most hops allowed.
+ * @access public
+ */
+ function setMaximumRedirects($max) {
+ $this->_user_agent->setMaximumRedirects($max);
+ }
+
+ /**
+ * Sets the maximum number of nesting of framed pages
+ * within a framed page to prevent loops.
+ * @param integer $max Highest depth allowed.
+ * @access public
+ */
+ function setMaximumNestedFrames($max) {
+ $this->_maximum_nested_frames = $max;
+ }
+
+ /**
+ * Sets the socket timeout for opening a connection.
+ * @param integer $timeout Maximum time in seconds.
+ * @access public
+ */
+ function setConnectionTimeout($timeout) {
+ $this->_user_agent->setConnectionTimeout($timeout);
+ }
+
+ /**
+ * Sets proxy to use on all requests for when
+ * testing from behind a firewall. Set URL
+ * to false to disable.
+ * @param string $proxy Proxy URL.
+ * @param string $username Proxy username for authentication.
+ * @param string $password Proxy password for authentication.
+ * @access public
+ */
+ function useProxy($proxy, $username = false, $password = false) {
+ $this->_user_agent->useProxy($proxy, $username, $password);
+ }
+
+ /**
+ * Fetches the page content with a HEAD request.
+ * Will affect cookies, but will not change the base URL.
+ * @param string/SimpleUrl $url Target to fetch as string.
+ * @param hash/SimpleHeadEncoding $parameters Additional parameters for
+ * HEAD request.
+ * @return boolean True if successful.
+ * @access public
+ */
+ function head($url, $parameters = false) {
+ if (! is_object($url)) {
+ $url = new SimpleUrl($url);
+ }
+ if ($this->getUrl()) {
+ $url = $url->makeAbsolute($this->getUrl());
+ }
+ $response = &$this->_user_agent->fetchResponse($url, new SimpleHeadEncoding($parameters));
+ return ! $response->isError();
+ }
+
+ /**
+ * Fetches the page content with a simple GET request.
+ * @param string/SimpleUrl $url Target to fetch.
+ * @param hash/SimpleFormEncoding $parameters Additional parameters for
+ * GET request.
+ * @return string Content of page or false.
+ * @access public
+ */
+ function get($url, $parameters = false) {
+ if (! is_object($url)) {
+ $url = new SimpleUrl($url);
+ }
+ if ($this->getUrl()) {
+ $url = $url->makeAbsolute($this->getUrl());
+ }
+ return $this->_load($url, new SimpleGetEncoding($parameters));
+ }
+
+ /**
+ * Fetches the page content with a POST request.
+ * @param string/SimpleUrl $url Target to fetch as string.
+ * @param hash/SimpleFormEncoding $parameters POST parameters.
+ * @return string Content of page.
+ * @access public
+ */
+ function post($url, $parameters = false) {
+ if (! is_object($url)) {
+ $url = new SimpleUrl($url);
+ }
+ if ($this->getUrl()) {
+ $url = $url->makeAbsolute($this->getUrl());
+ }
+ return $this->_load($url, new SimplePostEncoding($parameters));
+ }
+
+ /**
+ * Equivalent to hitting the retry button on the
+ * browser. Will attempt to repeat the page fetch. If
+ * there is no history to repeat it will give false.
+ * @return string/boolean Content if fetch succeeded
+ * else false.
+ * @access public
+ */
+ function retry() {
+ $frames = $this->_page->getFrameFocus();
+ if (count($frames) > 0) {
+ $this->_loadFrame(
+ $frames,
+ $this->_page->getUrl(),
+ $this->_page->getRequestData());
+ return $this->_page->getRaw();
+ }
+ if ($url = $this->_history->getUrl()) {
+ $this->_page = &$this->_fetch($url, $this->_history->getParameters());
+ return $this->_page->getRaw();
+ }
+ return false;
+ }
+
+ /**
+ * Equivalent to hitting the back button on the
+ * browser. The browser history is unchanged on
+ * failure. The page content is refetched as there
+ * is no concept of content caching in SimpleTest.
+ * @return boolean True if history entry and
+ * fetch succeeded
+ * @access public
+ */
+ function back() {
+ if (! $this->_history->back()) {
+ return false;
+ }
+ $content = $this->retry();
+ if (! $content) {
+ $this->_history->forward();
+ }
+ return $content;
+ }
+
+ /**
+ * Equivalent to hitting the forward button on the
+ * browser. The browser history is unchanged on
+ * failure. The page content is refetched as there
+ * is no concept of content caching in SimpleTest.
+ * @return boolean True if history entry and
+ * fetch succeeded
+ * @access public
+ */
+ function forward() {
+ if (! $this->_history->forward()) {
+ return false;
+ }
+ $content = $this->retry();
+ if (! $content) {
+ $this->_history->back();
+ }
+ return $content;
+ }
+
+ /**
+ * Retries a request after setting the authentication
+ * for the current realm.
+ * @param string $username Username for realm.
+ * @param string $password Password for realm.
+ * @return boolean True if successful fetch. Note
+ * that authentication may still have
+ * failed.
+ * @access public
+ */
+ function authenticate($username, $password) {
+ if (! $this->_page->getRealm()) {
+ return false;
+ }
+ $url = $this->_page->getUrl();
+ if (! $url) {
+ return false;
+ }
+ $this->_user_agent->setIdentity(
+ $url->getHost(),
+ $this->_page->getRealm(),
+ $username,
+ $password);
+ return $this->retry();
+ }
+
+ /**
+ * Accessor for a breakdown of the frameset.
+ * @return array Hash tree of frames by name
+ * or index if no name.
+ * @access public
+ */
+ function getFrames() {
+ return $this->_page->getFrames();
+ }
+
+ /**
+ * Accessor for current frame focus. Will be
+ * false if no frame has focus.
+ * @return integer/string/boolean Label if any, otherwise
+ * the position in the frameset
+ * or false if none.
+ * @access public
+ */
+ function getFrameFocus() {
+ return $this->_page->getFrameFocus();
+ }
+
+ /**
+ * Sets the focus by index. The integer index starts from 1.
+ * @param integer $choice Chosen frame.
+ * @return boolean True if frame exists.
+ * @access public
+ */
+ function setFrameFocusByIndex($choice) {
+ return $this->_page->setFrameFocusByIndex($choice);
+ }
+
+ /**
+ * Sets the focus by name.
+ * @param string $name Chosen frame.
+ * @return boolean True if frame exists.
+ * @access public
+ */
+ function setFrameFocus($name) {
+ return $this->_page->setFrameFocus($name);
+ }
+
+ /**
+ * Clears the frame focus. All frames will be searched
+ * for content.
+ * @access public
+ */
+ function clearFrameFocus() {
+ return $this->_page->clearFrameFocus();
+ }
+
+ /**
+ * Accessor for last error.
+ * @return string Error from last response.
+ * @access public
+ */
+ function getTransportError() {
+ return $this->_page->getTransportError();
+ }
+
+ /**
+ * Accessor for current MIME type.
+ * @return string MIME type as string; e.g. 'text/html'
+ * @access public
+ */
+ function getMimeType() {
+ return $this->_page->getMimeType();
+ }
+
+ /**
+ * Accessor for last response code.
+ * @return integer Last HTTP response code received.
+ * @access public
+ */
+ function getResponseCode() {
+ return $this->_page->getResponseCode();
+ }
+
+ /**
+ * Accessor for last Authentication type. Only valid
+ * straight after a challenge (401).
+ * @return string Description of challenge type.
+ * @access public
+ */
+ function getAuthentication() {
+ return $this->_page->getAuthentication();
+ }
+
+ /**
+ * Accessor for last Authentication realm. Only valid
+ * straight after a challenge (401).
+ * @return string Name of security realm.
+ * @access public
+ */
+ function getRealm() {
+ return $this->_page->getRealm();
+ }
+
+ /**
+ * Accessor for current URL of page or frame if
+ * focused.
+ * @return string Location of current page or frame as
+ * a string.
+ */
+ function getUrl() {
+ $url = $this->_page->getUrl();
+ return $url ? $url->asString() : false;
+ }
+
+ /**
+ * Accessor for base URL of page if set via BASE tag
+ * @return string base URL
+ */
+ function getBaseUrl() {
+ $url = $this->_page->getBaseUrl();
+ return $url ? $url->asString() : false;
+ }
+
+ /**
+ * Accessor for raw bytes sent down the wire.
+ * @return string Original text sent.
+ * @access public
+ */
+ function getRequest() {
+ return $this->_page->getRequest();
+ }
+
+ /**
+ * Accessor for raw header information.
+ * @return string Header block.
+ * @access public
+ */
+ function getHeaders() {
+ return $this->_page->getHeaders();
+ }
+
+ /**
+ * Accessor for raw page information.
+ * @return string Original text content of web page.
+ * @access public
+ */
+ function getContent() {
+ return $this->_page->getRaw();
+ }
+
+ /**
+ * Accessor for plain text version of the page.
+ * @return string Normalised text representation.
+ * @access public
+ */
+ function getContentAsText() {
+ return $this->_page->getText();
+ }
+
+ /**
+ * Accessor for parsed title.
+ * @return string Title or false if no title is present.
+ * @access public
+ */
+ function getTitle() {
+ return $this->_page->getTitle();
+ }
+
+ /**
+ * Accessor for a list of all links in current page.
+ * @return array List of urls with scheme of
+ * http or https and hostname.
+ * @access public
+ */
+ function getUrls() {
+ return $this->_page->getUrls();
+ }
+
+ /**
+ * Sets all form fields with that name.
+ * @param string $label Name or label of field in forms.
+ * @param string $value New value of field.
+ * @return boolean True if field exists, otherwise false.
+ * @access public
+ */
+ function setField($label, $value, $position=false) {
+ return $this->_page->setField(new SimpleByLabelOrName($label), $value, $position);
+ }
+
+ /**
+ * Sets all form fields with that name. Will use label if
+ * one is available (not yet implemented).
+ * @param string $name Name of field in forms.
+ * @param string $value New value of field.
+ * @return boolean True if field exists, otherwise false.
+ * @access public
+ */
+ function setFieldByName($name, $value, $position=false) {
+ return $this->_page->setField(new SimpleByName($name), $value, $position);
+ }
+
+ /**
+ * Sets all form fields with that id attribute.
+ * @param string/integer $id Id of field in forms.
+ * @param string $value New value of field.
+ * @return boolean True if field exists, otherwise false.
+ * @access public
+ */
+ function setFieldById($id, $value) {
+ return $this->_page->setField(new SimpleById($id), $value);
+ }
+
+ /**
+ * Accessor for a form element value within the page.
+ * Finds the first match.
+ * @param string $label Field label.
+ * @return string/boolean A value if the field is
+ * present, false if unchecked
+ * and null if missing.
+ * @access public
+ */
+ function getField($label) {
+ return $this->_page->getField(new SimpleByLabelOrName($label));
+ }
+
+ /**
+ * Accessor for a form element value within the page.
+ * Finds the first match.
+ * @param string $name Field name.
+ * @return string/boolean A string if the field is
+ * present, false if unchecked
+ * and null if missing.
+ * @access public
+ */
+ function getFieldByName($name) {
+ return $this->_page->getField(new SimpleByName($name));
+ }
+
+ /**
+ * Accessor for a form element value within the page.
+ * @param string/integer $id Id of field in forms.
+ * @return string/boolean A string if the field is
+ * present, false if unchecked
+ * and null if missing.
+ * @access public
+ */
+ function getFieldById($id) {
+ return $this->_page->getField(new SimpleById($id));
+ }
+
+ /**
+ * Clicks the submit button by label. The owning
+ * form will be submitted by this.
+ * @param string $label Button label. An unlabeled
+ * button can be triggered by 'Submit'.
+ * @param hash $additional Additional form data.
+ * @return string/boolean Page on success.
+ * @access public
+ */
+ function clickSubmit($label = 'Submit', $additional = false) {
+ if (! ($form = &$this->_page->getFormBySubmit(new SimpleByLabel($label)))) {
+ return false;
+ }
+ $success = $this->_load(
+ $form->getAction(),
+ $form->submitButton(new SimpleByLabel($label), $additional));
+ return ($success ? $this->getContent() : $success);
+ }
+
+ /**
+ * Clicks the submit button by name attribute. The owning
+ * form will be submitted by this.
+ * @param string $name Button name.
+ * @param hash $additional Additional form data.
+ * @return string/boolean Page on success.
+ * @access public
+ */
+ function clickSubmitByName($name, $additional = false) {
+ if (! ($form = &$this->_page->getFormBySubmit(new SimpleByName($name)))) {
+ return false;
+ }
+ $success = $this->_load(
+ $form->getAction(),
+ $form->submitButton(new SimpleByName($name), $additional));
+ return ($success ? $this->getContent() : $success);
+ }
+
+ /**
+ * Clicks the submit button by ID attribute of the button
+ * itself. The owning form will be submitted by this.
+ * @param string $id Button ID.
+ * @param hash $additional Additional form data.
+ * @return string/boolean Page on success.
+ * @access public
+ */
+ function clickSubmitById($id, $additional = false) {
+ if (! ($form = &$this->_page->getFormBySubmit(new SimpleById($id)))) {
+ return false;
+ }
+ $success = $this->_load(
+ $form->getAction(),
+ $form->submitButton(new SimpleById($id), $additional));
+ return ($success ? $this->getContent() : $success);
+ }
+
+ /**
+ * Tests to see if a submit button exists with this
+ * label.
+ * @param string $label Button label.
+ * @return boolean True if present.
+ * @access public
+ */
+ function isSubmit($label) {
+ return (boolean)$this->_page->getFormBySubmit(new SimpleByLabel($label));
+ }
+
+ /**
+ * Clicks the submit image by some kind of label. Usually
+ * the alt tag or the nearest equivalent. The owning
+ * form will be submitted by this. Clicking outside of
+ * the boundary of the coordinates will result in
+ * a failure.
+ * @param string $label ID attribute of button.
+ * @param integer $x X-coordinate of imaginary click.
+ * @param integer $y Y-coordinate of imaginary click.
+ * @param hash $additional Additional form data.
+ * @return string/boolean Page on success.
+ * @access public
+ */
+ function clickImage($label, $x = 1, $y = 1, $additional = false) {
+ if (! ($form = &$this->_page->getFormByImage(new SimpleByLabel($label)))) {
+ return false;
+ }
+ $success = $this->_load(
+ $form->getAction(),
+ $form->submitImage(new SimpleByLabel($label), $x, $y, $additional));
+ return ($success ? $this->getContent() : $success);
+ }
+
+ /**
+ * Clicks the submit image by the name. Usually
+ * the alt tag or the nearest equivalent. The owning
+ * form will be submitted by this. Clicking outside of
+ * the boundary of the coordinates will result in
+ * a failure.
+ * @param string $name Name attribute of button.
+ * @param integer $x X-coordinate of imaginary click.
+ * @param integer $y Y-coordinate of imaginary click.
+ * @param hash $additional Additional form data.
+ * @return string/boolean Page on success.
+ * @access public
+ */
+ function clickImageByName($name, $x = 1, $y = 1, $additional = false) {
+ if (! ($form = &$this->_page->getFormByImage(new SimpleByName($name)))) {
+ return false;
+ }
+ $success = $this->_load(
+ $form->getAction(),
+ $form->submitImage(new SimpleByName($name), $x, $y, $additional));
+ return ($success ? $this->getContent() : $success);
+ }
+
+ /**
+ * Clicks the submit image by ID attribute. The owning
+ * form will be submitted by this. Clicking outside of
+ * the boundary of the coordinates will result in
+ * a failure.
+ * @param integer/string $id ID attribute of button.
+ * @param integer $x X-coordinate of imaginary click.
+ * @param integer $y Y-coordinate of imaginary click.
+ * @param hash $additional Additional form data.
+ * @return string/boolean Page on success.
+ * @access public
+ */
+ function clickImageById($id, $x = 1, $y = 1, $additional = false) {
+ if (! ($form = &$this->_page->getFormByImage(new SimpleById($id)))) {
+ return false;
+ }
+ $success = $this->_load(
+ $form->getAction(),
+ $form->submitImage(new SimpleById($id), $x, $y, $additional));
+ return ($success ? $this->getContent() : $success);
+ }
+
+ /**
+ * Tests to see if an image exists with this
+ * title or alt text.
+ * @param string $label Image text.
+ * @return boolean True if present.
+ * @access public
+ */
+ function isImage($label) {
+ return (boolean)$this->_page->getFormByImage(new SimpleByLabel($label));
+ }
+
+ /**
+ * Submits a form by the ID.
+ * @param string $id The form ID. No submit button value
+ * will be sent.
+ * @return string/boolean Page on success.
+ * @access public
+ */
+ function submitFormById($id) {
+ if (! ($form = &$this->_page->getFormById($id))) {
+ return false;
+ }
+ $success = $this->_load(
+ $form->getAction(),
+ $form->submit());
+ return ($success ? $this->getContent() : $success);
+ }
+
+ /**
+ * Finds a URL by label. Will find the first link
+ * found with this link text by default, or a later
+ * one if an index is given. The match ignores case and
+ * white space issues.
+ * @param string $label Text between the anchor tags.
+ * @param integer $index Link position counting from zero.
+ * @return string/boolean URL on success.
+ * @access public
+ */
+ function getLink($label, $index = 0) {
+ $urls = $this->_page->getUrlsByLabel($label);
+ if (count($urls) == 0) {
+ return false;
+ }
+ if (count($urls) < $index + 1) {
+ return false;
+ }
+ return $urls[$index];
+ }
+
+ /**
+ * Follows a link by label. Will click the first link
+ * found with this link text by default, or a later
+ * one if an index is given. The match ignores case and
+ * white space issues.
+ * @param string $label Text between the anchor tags.
+ * @param integer $index Link position counting from zero.
+ * @return string/boolean Page on success.
+ * @access public
+ */
+ function clickLink($label, $index = 0) {
+ $url = $this->getLink($label, $index);
+ if ($url === false) {
+ return false;
+ }
+ $this->_load($url, new SimpleGetEncoding());
+ return $this->getContent();
+ }
+
+ /**
+ * Finds a link by id attribute.
+ * @param string $id ID attribute value.
+ * @return string/boolean URL on success.
+ * @access public
+ */
+ function getLinkById($id) {
+ return $this->_page->getUrlById($id);
+ }
+
+ /**
+ * Follows a link by id attribute.
+ * @param string $id ID attribute value.
+ * @return string/boolean Page on success.
+ * @access public
+ */
+ function clickLinkById($id) {
+ if (! ($url = $this->getLinkById($id))) {
+ return false;
+ }
+ $this->_load($url, new SimpleGetEncoding());
+ return $this->getContent();
+ }
+
+ /**
+ * Clicks a visible text item. Will first try buttons,
+ * then links and then images.
+ * @param string $label Visible text or alt text.
+ * @return string/boolean Raw page or false.
+ * @access public
+ */
+ function click($label) {
+ $raw = $this->clickSubmit($label);
+ if (! $raw) {
+ $raw = $this->clickLink($label);
+ }
+ if (! $raw) {
+ $raw = $this->clickImage($label);
+ }
+ return $raw;
+ }
+
+ /**
+ * Tests to see if a click target exists.
+ * @param string $label Visible text or alt text.
+ * @return boolean True if target present.
+ * @access public
+ */
+ function isClickable($label) {
+ return $this->isSubmit($label) || ($this->getLink($label) !== false) || $this->isImage($label);
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/collector.php b/vendors/simpletest/collector.php
new file mode 100644
index 000000000..5b8255d39
--- /dev/null
+++ b/vendors/simpletest/collector.php
@@ -0,0 +1,122 @@
+<?php
+/**
+ * This file contains the following classes: {@link SimpleCollector},
+ * {@link SimplePatternCollector}.
+ *
+ * @author Travis Swicegood <development@domain51.com>
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: collector.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**
+ * The basic collector for {@link GroupTest}
+ *
+ * @see collect(), GroupTest::collect()
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleCollector {
+
+ /**
+ * Strips off any kind of slash at the end so as to normalise the path.
+ * @param string $path Path to normalise.
+ * @return string Path without trailing slash.
+ */
+ function _removeTrailingSlash($path) {
+ if (substr($path, -1) == DIRECTORY_SEPARATOR) {
+ return substr($path, 0, -1);
+ } elseif (substr($path, -1) == '/') {
+ return substr($path, 0, -1);
+ } else {
+ return $path;
+ }
+ }
+
+ /**
+ * Scans the directory and adds what it can.
+ * @param object $test Group test with {@link GroupTest::addTestFile()} method.
+ * @param string $path Directory to scan.
+ * @see _attemptToAdd()
+ */
+ function collect(&$test, $path) {
+ $path = $this->_removeTrailingSlash($path);
+ if ($handle = opendir($path)) {
+ while (($entry = readdir($handle)) !== false) {
+ if ($this->_isHidden($entry)) {
+ continue;
+ }
+ $this->_handle($test, $path . DIRECTORY_SEPARATOR . $entry);
+ }
+ closedir($handle);
+ }
+ }
+
+ /**
+ * This method determines what should be done with a given file and adds
+ * it via {@link GroupTest::addTestFile()} if necessary.
+ *
+ * This method should be overriden to provide custom matching criteria,
+ * such as pattern matching, recursive matching, etc. For an example, see
+ * {@link SimplePatternCollector::_handle()}.
+ *
+ * @param object $test Group test with {@link GroupTest::addTestFile()} method.
+ * @param string $filename A filename as generated by {@link collect()}
+ * @see collect()
+ * @access protected
+ */
+ function _handle(&$test, $file) {
+ if (is_dir($file)) {
+ return;
+ }
+ $test->addTestFile($file);
+ }
+
+ /**
+ * Tests for hidden files so as to skip them. Currently
+ * only tests for Unix hidden files.
+ * @param string $filename Plain filename.
+ * @return boolean True if hidden file.
+ * @access private
+ */
+ function _isHidden($filename) {
+ return strncmp($filename, '.', 1) == 0;
+ }
+}
+
+/**
+ * An extension to {@link SimpleCollector} that only adds files matching a
+ * given pattern.
+ *
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @see SimpleCollector
+ */
+class SimplePatternCollector extends SimpleCollector {
+ var $_pattern;
+
+ /**
+ *
+ * @param string $pattern Perl compatible regex to test name against
+ * See {@link http://us4.php.net/manual/en/reference.pcre.pattern.syntax.php PHP's PCRE}
+ * for full documentation of valid pattern.s
+ */
+ function SimplePatternCollector($pattern = '/php$/i') {
+ $this->_pattern = $pattern;
+ }
+
+ /**
+ * Attempts to add files that match a given pattern.
+ *
+ * @see SimpleCollector::_handle()
+ * @param object $test Group test with {@link GroupTest::addTestFile()} method.
+ * @param string $path Directory to scan.
+ * @access protected
+ */
+ function _handle(&$test, $filename) {
+ if (preg_match($this->_pattern, $filename)) {
+ parent::_handle($test, $filename);
+ }
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/compatibility.php b/vendors/simpletest/compatibility.php
new file mode 100644
index 000000000..5bf68621f
--- /dev/null
+++ b/vendors/simpletest/compatibility.php
@@ -0,0 +1,166 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @version $Id: compatibility.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**
+ * Static methods for compatibility between different
+ * PHP versions.
+ * @package SimpleTest
+ */
+class SimpleTestCompatibility {
+
+ /**
+ * Creates a copy whether in PHP5 or PHP4.
+ * @param object $object Thing to copy.
+ * @return object A copy.
+ * @access public
+ */
+ static function copy($object) {
+ if (version_compare(phpversion(), '5') >= 0) {
+ eval('$copy = clone $object;');
+ return $copy;
+ }
+ return $object;
+ }
+
+ /**
+ * Identity test. Drops back to equality + types for PHP5
+ * objects as the === operator counts as the
+ * stronger reference constraint.
+ * @param mixed $first Test subject.
+ * @param mixed $second Comparison object.
+ * @return boolean True if identical.
+ * @access public
+ */
+ static function isIdentical($first, $second) {
+ if (version_compare(phpversion(), '5') >= 0) {
+ return SimpleTestCompatibility::_isIdenticalType($first, $second);
+ }
+ if ($first != $second) {
+ return false;
+ }
+ return ($first === $second);
+ }
+
+ /**
+ * Recursive type test.
+ * @param mixed $first Test subject.
+ * @param mixed $second Comparison object.
+ * @return boolean True if same type.
+ * @access private
+ */
+ static function _isIdenticalType($first, $second) {
+ if (gettype($first) != gettype($second)) {
+ return false;
+ }
+ if (is_object($first) && is_object($second)) {
+ if (get_class($first) != get_class($second)) {
+ return false;
+ }
+ return SimpleTestCompatibility::_isArrayOfIdenticalTypes(
+ get_object_vars($first),
+ get_object_vars($second));
+ }
+ if (is_array($first) && is_array($second)) {
+ return SimpleTestCompatibility::_isArrayOfIdenticalTypes($first, $second);
+ }
+ if ($first !== $second) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Recursive type test for each element of an array.
+ * @param mixed $first Test subject.
+ * @param mixed $second Comparison object.
+ * @return boolean True if identical.
+ * @access private
+ */
+ static function _isArrayOfIdenticalTypes($first, $second) {
+ if (array_keys($first) != array_keys($second)) {
+ return false;
+ }
+ foreach (array_keys($first) as $key) {
+ $is_identical = SimpleTestCompatibility::_isIdenticalType(
+ $first[$key],
+ $second[$key]);
+ if (! $is_identical) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Test for two variables being aliases.
+ * @param mixed $first Test subject.
+ * @param mixed $second Comparison object.
+ * @return boolean True if same.
+ * @access public
+ */
+ static function isReference(&$first, &$second) {
+ if (version_compare(phpversion(), '5', '>=') && is_object($first)) {
+ return ($first === $second);
+ }
+ if (is_object($first) && is_object($second)) {
+ $id = uniqid("test");
+ $first->$id = true;
+ $is_ref = isset($second->$id);
+ unset($first->$id);
+ return $is_ref;
+ }
+ $temp = $first;
+ $first = uniqid("test");
+ $is_ref = ($first === $second);
+ $first = $temp;
+ return $is_ref;
+ }
+
+ /**
+ * Test to see if an object is a member of a
+ * class hiearchy.
+ * @param object $object Object to test.
+ * @param string $class Root name of hiearchy.
+ * @return boolean True if class in hiearchy.
+ * @access public
+ */
+ static function isA($object, $class) {
+ if (version_compare(phpversion(), '5') >= 0) {
+ if (! class_exists($class, false)) {
+ if (function_exists('interface_exists')) {
+ if (! interface_exists($class, false)) {
+ return false;
+ }
+ }
+ }
+ eval("\$is_a = \$object instanceof $class;");
+ return $is_a;
+ }
+ if (function_exists('is_a')) {
+ return is_a($object, $class);
+ }
+ return ((strtolower($class) == get_class($object))
+ or (is_subclass_of($object, $class)));
+ }
+
+ /**
+ * Sets a socket timeout for each chunk.
+ * @param resource $handle Socket handle.
+ * @param integer $timeout Limit in seconds.
+ * @access public
+ */
+ static function setTimeout($handle, $timeout) {
+ if (function_exists('stream_set_timeout')) {
+ stream_set_timeout($handle, $timeout, 0);
+ } elseif (function_exists('socket_set_timeout')) {
+ socket_set_timeout($handle, $timeout, 0);
+ } elseif (function_exists('set_socket_timeout')) {
+ set_socket_timeout($handle, $timeout, 0);
+ }
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/cookies.php b/vendors/simpletest/cookies.php
new file mode 100644
index 000000000..ed1c025d2
--- /dev/null
+++ b/vendors/simpletest/cookies.php
@@ -0,0 +1,380 @@
+<?php
+/**
+ * Base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: cookies.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/url.php');
+/**#@-*/
+
+/**
+ * Cookie data holder. Cookie rules are full of pretty
+ * arbitary stuff. I have used...
+ * http://wp.netscape.com/newsref/std/cookie_spec.html
+ * http://www.cookiecentral.com/faq/
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleCookie {
+ var $_host;
+ var $_name;
+ var $_value;
+ var $_path;
+ var $_expiry;
+ var $_is_secure;
+
+ /**
+ * Constructor. Sets the stored values.
+ * @param string $name Cookie key.
+ * @param string $value Value of cookie.
+ * @param string $path Cookie path if not host wide.
+ * @param string $expiry Expiry date as string.
+ * @param boolean $is_secure Currently ignored.
+ */
+ function SimpleCookie($name, $value = false, $path = false, $expiry = false, $is_secure = false) {
+ $this->_host = false;
+ $this->_name = $name;
+ $this->_value = $value;
+ $this->_path = ($path ? $this->_fixPath($path) : "/");
+ $this->_expiry = false;
+ if (is_string($expiry)) {
+ $this->_expiry = strtotime($expiry);
+ } elseif (is_integer($expiry)) {
+ $this->_expiry = $expiry;
+ }
+ $this->_is_secure = $is_secure;
+ }
+
+ /**
+ * Sets the host. The cookie rules determine
+ * that the first two parts are taken for
+ * certain TLDs and three for others. If the
+ * new host does not match these rules then the
+ * call will fail.
+ * @param string $host New hostname.
+ * @return boolean True if hostname is valid.
+ * @access public
+ */
+ function setHost($host) {
+ if ($host = $this->_truncateHost($host)) {
+ $this->_host = $host;
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Accessor for the truncated host to which this
+ * cookie applies.
+ * @return string Truncated hostname.
+ * @access public
+ */
+ function getHost() {
+ return $this->_host;
+ }
+
+ /**
+ * Test for a cookie being valid for a host name.
+ * @param string $host Host to test against.
+ * @return boolean True if the cookie would be valid
+ * here.
+ */
+ function isValidHost($host) {
+ return ($this->_truncateHost($host) === $this->getHost());
+ }
+
+ /**
+ * Extracts just the domain part that determines a
+ * cookie's host validity.
+ * @param string $host Host name to truncate.
+ * @return string Domain or false on a bad host.
+ * @access private
+ */
+ function _truncateHost($host) {
+ $tlds = SimpleUrl::getAllTopLevelDomains();
+ if (preg_match('/[a-z\-]+\.(' . $tlds . ')$/i', $host, $matches)) {
+ return $matches[0];
+ } elseif (preg_match('/[a-z\-]+\.[a-z\-]+\.[a-z\-]+$/i', $host, $matches)) {
+ return $matches[0];
+ }
+ return false;
+ }
+
+ /**
+ * Accessor for name.
+ * @return string Cookie key.
+ * @access public
+ */
+ function getName() {
+ return $this->_name;
+ }
+
+ /**
+ * Accessor for value. A deleted cookie will
+ * have an empty string for this.
+ * @return string Cookie value.
+ * @access public
+ */
+ function getValue() {
+ return $this->_value;
+ }
+
+ /**
+ * Accessor for path.
+ * @return string Valid cookie path.
+ * @access public
+ */
+ function getPath() {
+ return $this->_path;
+ }
+
+ /**
+ * Tests a path to see if the cookie applies
+ * there. The test path must be longer or
+ * equal to the cookie path.
+ * @param string $path Path to test against.
+ * @return boolean True if cookie valid here.
+ * @access public
+ */
+ function isValidPath($path) {
+ return (strncmp(
+ $this->_fixPath($path),
+ $this->getPath(),
+ strlen($this->getPath())) == 0);
+ }
+
+ /**
+ * Accessor for expiry.
+ * @return string Expiry string.
+ * @access public
+ */
+ function getExpiry() {
+ if (! $this->_expiry) {
+ return false;
+ }
+ return gmdate("D, d M Y H:i:s", $this->_expiry) . " GMT";
+ }
+
+ /**
+ * Test to see if cookie is expired against
+ * the cookie format time or timestamp.
+ * Will give true for a session cookie.
+ * @param integer/string $now Time to test against. Result
+ * will be false if this time
+ * is later than the cookie expiry.
+ * Can be either a timestamp integer
+ * or a cookie format date.
+ * @access public
+ */
+ function isExpired($now) {
+ if (! $this->_expiry) {
+ return true;
+ }
+ if (is_string($now)) {
+ $now = strtotime($now);
+ }
+ return ($this->_expiry < $now);
+ }
+
+ /**
+ * Ages the cookie by the specified number of
+ * seconds.
+ * @param integer $interval In seconds.
+ * @public
+ */
+ function agePrematurely($interval) {
+ if ($this->_expiry) {
+ $this->_expiry -= $interval;
+ }
+ }
+
+ /**
+ * Accessor for the secure flag.
+ * @return boolean True if cookie needs SSL.
+ * @access public
+ */
+ function isSecure() {
+ return $this->_is_secure;
+ }
+
+ /**
+ * Adds a trailing and leading slash to the path
+ * if missing.
+ * @param string $path Path to fix.
+ * @access private
+ */
+ function _fixPath($path) {
+ if (substr($path, 0, 1) != '/') {
+ $path = '/' . $path;
+ }
+ if (substr($path, -1, 1) != '/') {
+ $path .= '/';
+ }
+ return $path;
+ }
+}
+
+/**
+ * Repository for cookies. This stuff is a
+ * tiny bit browser dependent.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleCookieJar {
+ var $_cookies;
+
+ /**
+ * Constructor. Jar starts empty.
+ * @access public
+ */
+ function SimpleCookieJar() {
+ $this->_cookies = array();
+ }
+
+ /**
+ * Removes expired and temporary cookies as if
+ * the browser was closed and re-opened.
+ * @param string/integer $now Time to test expiry against.
+ * @access public
+ */
+ function restartSession($date = false) {
+ $surviving_cookies = array();
+ for ($i = 0; $i < count($this->_cookies); $i++) {
+ if (! $this->_cookies[$i]->getValue()) {
+ continue;
+ }
+ if (! $this->_cookies[$i]->getExpiry()) {
+ continue;
+ }
+ if ($date && $this->_cookies[$i]->isExpired($date)) {
+ continue;
+ }
+ $surviving_cookies[] = $this->_cookies[$i];
+ }
+ $this->_cookies = $surviving_cookies;
+ }
+
+ /**
+ * Ages all cookies in the cookie jar.
+ * @param integer $interval The old session is moved
+ * into the past by this number
+ * of seconds. Cookies now over
+ * age will be removed.
+ * @access public
+ */
+ function agePrematurely($interval) {
+ for ($i = 0; $i < count($this->_cookies); $i++) {
+ $this->_cookies[$i]->agePrematurely($interval);
+ }
+ }
+
+ /**
+ * Sets an additional cookie. If a cookie has
+ * the same name and path it is replaced.
+ * @param string $name Cookie key.
+ * @param string $value Value of cookie.
+ * @param string $host Host upon which the cookie is valid.
+ * @param string $path Cookie path if not host wide.
+ * @param string $expiry Expiry date.
+ * @access public
+ */
+ function setCookie($name, $value, $host = false, $path = '/', $expiry = false) {
+ $cookie = new SimpleCookie($name, $value, $path, $expiry);
+ if ($host) {
+ $cookie->setHost($host);
+ }
+ $this->_cookies[$this->_findFirstMatch($cookie)] = $cookie;
+ }
+
+ /**
+ * Finds a matching cookie to write over or the
+ * first empty slot if none.
+ * @param SimpleCookie $cookie Cookie to write into jar.
+ * @return integer Available slot.
+ * @access private
+ */
+ function _findFirstMatch($cookie) {
+ for ($i = 0; $i < count($this->_cookies); $i++) {
+ $is_match = $this->_isMatch(
+ $cookie,
+ $this->_cookies[$i]->getHost(),
+ $this->_cookies[$i]->getPath(),
+ $this->_cookies[$i]->getName());
+ if ($is_match) {
+ return $i;
+ }
+ }
+ return count($this->_cookies);
+ }
+
+ /**
+ * Reads the most specific cookie value from the
+ * browser cookies. Looks for the longest path that
+ * matches.
+ * @param string $host Host to search.
+ * @param string $path Applicable path.
+ * @param string $name Name of cookie to read.
+ * @return string False if not present, else the
+ * value as a string.
+ * @access public
+ */
+ function getCookieValue($host, $path, $name) {
+ $longest_path = '';
+ foreach ($this->_cookies as $cookie) {
+ if ($this->_isMatch($cookie, $host, $path, $name)) {
+ if (strlen($cookie->getPath()) > strlen($longest_path)) {
+ $value = $cookie->getValue();
+ $longest_path = $cookie->getPath();
+ }
+ }
+ }
+ return (isset($value) ? $value : false);
+ }
+
+ /**
+ * Tests cookie for matching against search
+ * criteria.
+ * @param SimpleTest $cookie Cookie to test.
+ * @param string $host Host must match.
+ * @param string $path Cookie path must be shorter than
+ * this path.
+ * @param string $name Name must match.
+ * @return boolean True if matched.
+ * @access private
+ */
+ function _isMatch($cookie, $host, $path, $name) {
+ if ($cookie->getName() != $name) {
+ return false;
+ }
+ if ($host && $cookie->getHost() && ! $cookie->isValidHost($host)) {
+ return false;
+ }
+ if (! $cookie->isValidPath($path)) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Uses a URL to sift relevant cookies by host and
+ * path. Results are list of strings of form "name=value".
+ * @param SimpleUrl $url Url to select by.
+ * @return array Valid name and value pairs.
+ * @access public
+ */
+ function selectAsPairs($url) {
+ $pairs = array();
+ foreach ($this->_cookies as $cookie) {
+ if ($this->_isMatch($cookie, $url->getHost(), $url->getPath(), $cookie->getName())) {
+ $pairs[] = $cookie->getName() . '=' . $cookie->getValue();
+ }
+ }
+ return $pairs;
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/default_reporter.php b/vendors/simpletest/default_reporter.php
new file mode 100644
index 000000000..bd4c6a190
--- /dev/null
+++ b/vendors/simpletest/default_reporter.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * Optional include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: default_reporter.php 1704 2008-03-25 00:47:04Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/simpletest.php');
+require_once(dirname(__FILE__) . '/scorer.php');
+require_once(dirname(__FILE__) . '/reporter.php');
+require_once(dirname(__FILE__) . '/xml.php');
+/**#@-*/
+
+/**
+ * Parser for command line arguments. Extracts
+ * the a specific test to run and engages XML
+ * reporting when necessary.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleCommandLineParser {
+ var $_to_property = array(
+ 'case' => '_case', 'c' => '_case',
+ 'test' => '_test', 't' => '_test',
+ 'xml' => '_xml', 'x' => '_xml');
+ var $_case = '';
+ var $_test = '';
+ var $_xml = false;
+ var $_no_skips = false;
+
+ /**
+ * Parses raw command line arguments into object properties.
+ * @param string $arguments Raw commend line arguments.
+ */
+ function SimpleCommandLineParser($arguments) {
+ if (! is_array($arguments)) {
+ return;
+ }
+ foreach ($arguments as $i => $argument) {
+ if (preg_match('/^--?(test|case|t|c)=(.+)$/', $argument, $matches)) {
+ $property = $this->_to_property[$matches[1]];
+ $this->$property = $matches[2];
+ } elseif (preg_match('/^--?(test|case|t|c)$/', $argument, $matches)) {
+ $property = $this->_to_property[$matches[1]];
+ if (isset($arguments[$i + 1])) {
+ $this->$property = $arguments[$i + 1];
+ }
+ } elseif (preg_match('/^--?(xml|x)$/', $argument)) {
+ $this->_xml = true;
+ } elseif (preg_match('/^--?(no-skip|no-skips|s)$/', $argument)) {
+ $this->_no_skips = true;
+ }
+ }
+ }
+
+ /**
+ * Run only this test.
+ * @return string Test name to run.
+ * @access public
+ */
+ function getTest() {
+ return $this->_test;
+ }
+
+ /**
+ * Run only this test suite.
+ * @return string Test class name to run.
+ * @access public
+ */
+ function getTestCase() {
+ return $this->_case;
+ }
+
+ /**
+ * Output should be XML or not.
+ * @return boolean True if XML desired.
+ * @access public
+ */
+ function isXml() {
+ return $this->_xml;
+ }
+
+ /**
+ * Output should suppress skip messages.
+ * @return boolean True for no skips.
+ * @access public
+ */
+ function noSkips() {
+ return $this->_no_skips;
+ }
+}
+
+/**
+ * The default reporter used by SimpleTest's autorun
+ * feature. The actual reporters used are dependency
+ * injected and can be overridden.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class DefaultReporter extends SimpleReporterDecorator {
+
+ /**
+ * Assembles the appopriate reporter for the environment.
+ */
+ function DefaultReporter() {
+ if (SimpleReporter::inCli()) {
+ global $argv;
+ $parser = new SimpleCommandLineParser($argv);
+ $interfaces = $parser->isXml() ? array('XmlReporter') : array('TextReporter');
+ $reporter = &new SelectiveReporter(
+ SimpleTest::preferred($interfaces),
+ $parser->getTestCase(),
+ $parser->getTest());
+ if ($parser->noSkips()) {
+ $reporter = &new NoSkipsReporter($reporter);
+ }
+ } else {
+ $reporter = &new SelectiveReporter(
+ SimpleTest::preferred('HtmlReporter'),
+ @$_GET['c'],
+ @$_GET['t']);
+ if (@$_GET['skips'] == 'no' || @$_GET['show-skips'] == 'no') {
+ $reporter = &new NoSkipsReporter($reporter);
+ }
+ }
+ $this->SimpleReporterDecorator($reporter);
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/detached.php b/vendors/simpletest/detached.php
new file mode 100644
index 000000000..e323d8cd5
--- /dev/null
+++ b/vendors/simpletest/detached.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: detached.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/xml.php');
+require_once(dirname(__FILE__) . '/shell_tester.php');
+/**#@-*/
+
+/**
+ * Runs an XML formated test in a separate process.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class DetachedTestCase {
+ var $_command;
+ var $_dry_command;
+ var $_size;
+
+ /**
+ * Sets the location of the remote test.
+ * @param string $command Test script.
+ * @param string $dry_command Script for dry run.
+ * @access public
+ */
+ function DetachedTestCase($command, $dry_command = false) {
+ $this->_command = $command;
+ $this->_dry_command = $dry_command ? $dry_command : $command;
+ $this->_size = false;
+ }
+
+ /**
+ * Accessor for the test name for subclasses.
+ * @return string Name of the test.
+ * @access public
+ */
+ function getLabel() {
+ return $this->_command;
+ }
+
+ /**
+ * Runs the top level test for this class. Currently
+ * reads the data as a single chunk. I'll fix this
+ * once I have added iteration to the browser.
+ * @param SimpleReporter $reporter Target of test results.
+ * @returns boolean True if no failures.
+ * @access public
+ */
+ function run(&$reporter) {
+ $shell = &new SimpleShell();
+ $shell->execute($this->_command);
+ $parser = &$this->_createParser($reporter);
+ if (! $parser->parse($shell->getOutput())) {
+ trigger_error('Cannot parse incoming XML from [' . $this->_command . ']');
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Accessor for the number of subtests.
+ * @return integer Number of test cases.
+ * @access public
+ */
+ function getSize() {
+ if ($this->_size === false) {
+ $shell = &new SimpleShell();
+ $shell->execute($this->_dry_command);
+ $reporter = &new SimpleReporter();
+ $parser = &$this->_createParser($reporter);
+ if (! $parser->parse($shell->getOutput())) {
+ trigger_error('Cannot parse incoming XML from [' . $this->_dry_command . ']');
+ return false;
+ }
+ $this->_size = $reporter->getTestCaseCount();
+ }
+ return $this->_size;
+ }
+
+ /**
+ * Creates the XML parser.
+ * @param SimpleReporter $reporter Target of test results.
+ * @return SimpleTestXmlListener XML reader.
+ * @access protected
+ */
+ function &_createParser(&$reporter) {
+ return new SimpleTestXmlParser($reporter);
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/docs/en/authentication_documentation.html b/vendors/simpletest/docs/en/authentication_documentation.html
new file mode 100644
index 000000000..8da2a7f9e
--- /dev/null
+++ b/vendors/simpletest/docs/en/authentication_documentation.html
@@ -0,0 +1,355 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>SimpleTest documentation for testing log-in and authentication</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <span class="chosen">Authentication</span>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Authentication documentation</h1>
+ This page...
+ <ul>
+<li>
+ Getting through <a href="#basic">Basic HTTP authentication</a>
+ </li>
+<li>
+ Testing <a href="#cookies">cookie based authentication</a>
+ </li>
+<li>
+ Managing <a href="#session">browser sessions</a> and timeouts
+ </li>
+</ul>
+<div class="content">
+
+ <p>
+ One of the trickiest, and yet most important, areas
+ of testing web sites is the security.
+ Testing these schemes is one of the core goals of
+ the SimpleTest web tester.
+ </p>
+
+ <p><a class="target" name="basic"><h2>Basic HTTP authentication</h2></a></p>
+ <p>
+ If you fetch a page protected by basic authentication then
+ rather than receiving content, you will instead get a 401
+ header.
+ We can illustrate this with this test...
+<pre>
+class AuthenticationTest extends WebTestCase {<strong>
+ function test401Header() {
+ $this-&gt;get('http://www.lastcraft.com/protected/');
+ $this-&gt;showHeaders();
+ }</strong>
+}
+</pre>
+ This allows us to see the challenge header...
+ <div class="demo">
+ <h1>File test</h1>
+<pre style="background-color: lightgray; color: black">
+HTTP/1.1 401 Authorization Required
+Date: Sat, 18 Sep 2004 19:25:18 GMT
+Server: Apache/1.3.29 (Unix) PHP/4.3.4
+WWW-Authenticate: Basic realm="SimpleTest basic authentication"
+Connection: close
+Content-Type: text/html; charset=iso-8859-1
+</pre>
+ <div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete.
+ <strong>0</strong> passes, <strong>0</strong> fails and <strong>0</strong> exceptions.</div>
+ </div>
+ We are trying to get away from visual inspection though, and so SimpleTest
+ allows to make automated assertions against the challenge.
+ Here is a thorough test of our header...
+<pre>
+class AuthenticationTest extends WebTestCase {
+ function test401Header() {
+ $this-&gt;get('http://www.lastcraft.com/protected/');<strong>
+ $this-&gt;assertAuthentication('Basic');
+ $this-&gt;assertResponse(401);
+ $this-&gt;assertRealm('SimpleTest basic authentication');</strong>
+ }
+}
+</pre>
+ Any one of these tests would normally do on it's own depending
+ on the amount of detail you want to see.
+ </p>
+ <p>
+ One theme that runs through SimpleTest is the ability to use
+ <span class="new_code">SimpleExpectation</span> objects wherever a simple
+ match is not enough.
+ If you want only an approximate match to the realm for
+ example, you can do this...
+<pre>
+class AuthenticationTest extends WebTestCase {
+ function test401Header() {
+ $this-&gt;get('http://www.lastcraft.com/protected/');
+ $this-&gt;assertRealm(<strong>new PatternExpectation('/simpletest/i')</strong>);
+ }
+}
+</pre>
+ Most of the time we are not interested in testing the
+ authentication itself, but want to get past it to test
+ the pages underneath.
+ As soon as the challenge has been issued we can reply with
+ an authentication response...
+<pre>
+class AuthenticationTest extends WebTestCase {
+ function testCanAuthenticate() {
+ $this-&gt;get('http://www.lastcraft.com/protected/');<strong>
+ $this-&gt;authenticate('Me', 'Secret');</strong>
+ $this-&gt;assertTitle(...);
+ }
+}
+</pre>
+ The username and password will now be sent with every
+ subsequent request to that directory and subdirectories.
+ You will have to authenticate again if you step outside
+ the authenticated directory, but SimpleTest is smart enough
+ to merge subdirectories into a common realm.
+ </p>
+ <p>
+ You can shortcut this step further by encoding the log in
+ details straight into the URL...
+<pre>
+class AuthenticationTest extends WebTestCase {
+ function testCanReadAuthenticatedPages() {
+ $this-&gt;get('http://<strong>Me:Secret@</strong>www.lastcraft.com/protected/');
+ $this-&gt;assertTitle(...);
+ }
+}
+</pre>
+ If your username or password has special characters, then you
+ will have to URL encode them or the request will not be parsed
+ correctly.
+ Also this header will not be sent on subsequent requests if
+ you request a page with a fully qualified URL.
+ If you navigate with relative URLs though, the authentication
+ information will be preserved.
+ </p>
+ <p>
+ Only basic authentication is currently supported and this is
+ only really secure in tandem with HTTPS connections.
+ This is usually enough to protect test server from prying eyes,
+ however.
+ Digest authentication and NTLM authentication may be added
+ in the future.
+ </p>
+
+ <p><a class="target" name="cookies"><h2>Cookies</h2></a></p>
+ <p>
+ Basic authentication doesn't give enough control over the
+ user interface for web developers.
+ More likely this functionality will be coded directly into
+ the web architecture using cookies and complicated timeouts.
+ </p>
+ <p>
+ Starting with a simple log-in form...
+<pre>
+&lt;form&gt;
+ Username:
+ &lt;input type="text" name="u" value="" /&gt;&lt;br /&gt;
+ Password:
+ &lt;input type="password" name="p" value="" /&gt;&lt;br /&gt;
+ &lt;input type="submit" value="Log in" /&gt;
+&lt;/form&gt;
+</pre>
+ Which looks like...
+ </p>
+ <p>
+ <form class="demo">
+ Username:
+ <input type="text" name="u" value=""><br>
+ Password:
+ <input type="password" name="p" value=""><br>
+ <input type="submit" value="Log in">
+ </form>
+ </p>
+ <p>
+ Let's suppose that in fetching this page a cookie has been
+ set with a session ID.
+ We are not going to fill the form in yet, just test that
+ we are tracking the user.
+ Here is the test...
+<pre>
+class LogInTest extends WebTestCase {
+ function testSessionCookieSetBeforeForm() {
+ $this-&gt;get('http://www.my-site.com/login.php');<strong>
+ $this-&gt;assertCookie('SID');</strong>
+ }
+}
+</pre>
+ All we are doing is confirming that the cookie is set.
+ As the value is likely to be rather cryptic it's not
+ really worth testing this with...
+<pre>
+class LogInTest extends WebTestCase {
+ function testSessionCookieIsCorrectPattern() {
+ $this-&gt;get('http://www.my-site.com/login.php');
+ $this-&gt;assertCookie('SID', <strong>new PatternExpectation('/[a-f0-9]{32}/i')</strong>);
+ }
+}
+</pre>
+ The rest of the test would be the same as any other form,
+ but we might want to confirm that we still have the same
+ cookie after log-in as before we entered.
+ We wouldn't want to lose track of this after all.
+ Here is a possible test for this...
+<pre>
+class LogInTest extends WebTestCase {
+ ...
+ function testSessionCookieSameAfterLogIn() {
+ $this-&gt;get('http://www.my-site.com/login.php');<strong>
+ $session = $this-&gt;getCookie('SID');
+ $this-&gt;setField('u', 'Me');
+ $this-&gt;setField('p', 'Secret');
+ $this-&gt;click('Log in');
+ $this-&gt;assertText('Welcome Me');
+ $this-&gt;assertCookie('SID', $session);</strong>
+ }
+}
+</pre>
+ This confirms that the session identifier is maintained
+ afer log-in.
+ </p>
+ <p>
+ We could even attempt to spoof our own system by setting
+ arbitrary cookies to gain access...
+<pre>
+class LogInTest extends WebTestCase {
+ ...
+ function testSessionCookieSameAfterLogIn() {
+ $this-&gt;get('http://www.my-site.com/login.php');<strong>
+ $this-&gt;setCookie('SID', 'Some other session');
+ $this-&gt;get('http://www.my-site.com/restricted.php');</strong>
+ $this-&gt;assertText('Access denied');
+ }
+}
+</pre>
+ Is your site protected from this attack?
+ </p>
+
+ <p><a class="target" name="session"><h2>Browser sessions</h2></a></p>
+ <p>
+ If you are testing an authentication system a critical piece
+ of behaviour is what happens when a user logs back in.
+ We would like to simulate closing and reopening a browser...
+<pre>
+class LogInTest extends WebTestCase {
+ ...
+ function testLoseAuthenticationAfterBrowserClose() {
+ $this-&gt;get('http://www.my-site.com/login.php');
+ $this-&gt;setField('u', 'Me');
+ $this-&gt;setField('p', 'Secret');
+ $this-&gt;click('Log in');
+ $this-&gt;assertText('Welcome Me');<strong>
+
+ $this-&gt;restart();
+ $this-&gt;get('http://www.my-site.com/restricted.php');
+ $this-&gt;assertText('Access denied');</strong>
+ }
+}
+</pre>
+ The <span class="new_code">WebTestCase::restart()</span> method will
+ preserve cookies that have unexpired timeouts, but throw away
+ those that are temporary or expired.
+ You can optionally specify the time and date that the restart
+ happened.
+ </p>
+ <p>
+ Expiring cookies can be a problem.
+ After all, if you have a cookie that expires after an hour,
+ you don't want to stall the test for an hour while the
+ cookie passes it's timeout.
+ </p>
+ <p>
+ To push the cookies over the hour limit you can age them
+ before you restart the session...
+<pre>
+class LogInTest extends WebTestCase {
+ ...
+ function testLoseAuthenticationAfterOneHour() {
+ $this-&gt;get('http://www.my-site.com/login.php');
+ $this-&gt;setField('u', 'Me');
+ $this-&gt;setField('p', 'Secret');
+ $this-&gt;click('Log in');
+ $this-&gt;assertText('Welcome Me');
+ <strong>
+ $this-&gt;ageCookies(3600);</strong>
+ $this-&gt;restart();
+ $this-&gt;get('http://www.my-site.com/restricted.php');
+ $this-&gt;assertText('Access denied');
+ }
+}
+</pre>
+ After the restart it will appear that cookies are an
+ hour older and any that pass their expiry will have
+ disappeared.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ SimpleTest project page on <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ SimpleTest download page on <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ The <a href="http://simpletest.org/api/">developer's API for SimpleTest</a>
+ gives full detail on the classes and assertions available.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <span class="chosen">Authentication</span>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/en/browser_documentation.html b/vendors/simpletest/docs/en/browser_documentation.html
new file mode 100644
index 000000000..522f3a598
--- /dev/null
+++ b/vendors/simpletest/docs/en/browser_documentation.html
@@ -0,0 +1,447 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>SimpleTest documentation for the scriptable web browser component</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <span class="chosen">Scriptable browser</span>
+</div></div>
+<h1>PHP Scriptable Web Browser</h1>
+ This page...
+ <ul>
+<li>
+ Using the bundled <a href="#scripting">web browser in scripts</a>
+ </li>
+<li>
+ <a href="#debug">Debugging</a> failed pages
+ </li>
+<li>
+ Complex <a href="#unit">tests with multiple web browsers</a>
+ </li>
+</ul>
+<div class="content">
+
+ <p>
+ SimpleTest's web browser component can be used not just
+ outside of the <span class="new_code">WebTestCase</span> class, but also
+ independently of the SimpleTest framework itself.
+ </p>
+
+ <p><a class="target" name="scripting"><h2>The Scriptable Browser</h2></a></p>
+ <p>
+ You can use the web browser in PHP scripts to confirm
+ services are up and running, or to extract information
+ from them at a regular basis.
+ For example, here is a small script to extract the current number of
+ open PHP 5 bugs from the <a href="http://www.php.net/">PHP web site</a>...
+<pre>
+<strong>&lt;?php
+require_once('simpletest/browser.php');
+
+$browser = &amp;new SimpleBrowser();
+$browser-&gt;get('http://php.net/');
+$browser-&gt;click('reporting bugs');
+$browser-&gt;click('statistics');
+$page = $browser-&gt;click('PHP 5 bugs only');
+preg_match('/status=Open.*?by=Any.*?(\d+)&lt;\/a&gt;/', $page, $matches);
+print $matches[1];
+?&gt;</strong>
+</pre>
+ There are simpler methods to do this particular example in PHP
+ of course.
+ For example you can just use the PHP <span class="new_code">file()</span>
+ command against what here is a pretty fixed page.
+ However, using the web browser for scripts allows authentication,
+ correct handling of cookies, automatic loading of frames, redirects,
+ form submission and the ability to examine the page headers.
+ Such methods are fragile against a site that is constantly
+ evolving and you would want a more direct way of accessing
+ data in a permanent set up, but for simple tasks this can provide
+ a very rapid solution.
+ </p>
+ <p>
+ All of the navigation methods used in the
+ <a href="web_tester_documentation.html">WebTestCase</a>
+ are present in the <span class="new_code">SimpleBrowser</span> class, but
+ the assertions are replaced with simpler accessors.
+ Here is a full list of the page navigation methods...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">addHeader($header)</span></td>
+<td>Adds a header to every fetch</td>
+</tr>
+ <tr>
+<td><span class="new_code">useProxy($proxy, $username, $password)</span></td>
+<td>Use this proxy from now on</td>
+</tr>
+ <tr>
+<td><span class="new_code">head($url, $parameters)</span></td>
+<td>Perform a HEAD request</td>
+</tr>
+ <tr>
+<td><span class="new_code">get($url, $parameters)</span></td>
+<td>Fetch a page with GET</td>
+</tr>
+ <tr>
+<td><span class="new_code">post($url, $parameters)</span></td>
+<td>Fetch a page with POST</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickLink($label)</span></td>
+<td>Follows a link by label</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickLinkById($id)</span></td>
+<td>Follows a link by attribute</td>
+</tr>
+ <tr>
+<td><span class="new_code">getUrl()</span></td>
+<td>Current URL of page or frame</td>
+</tr>
+ <tr>
+<td><span class="new_code">getTitle()</span></td>
+<td>Page title</td>
+</tr>
+ <tr>
+<td><span class="new_code">getContent()</span></td>
+<td>Raw page or frame</td>
+</tr>
+ <tr>
+<td><span class="new_code">getContentAsText()</span></td>
+<td>HTML removed except for alt text</td>
+</tr>
+ <tr>
+<td><span class="new_code">retry()</span></td>
+<td>Repeat the last request</td>
+</tr>
+ <tr>
+<td><span class="new_code">back()</span></td>
+<td>Use the browser back button</td>
+</tr>
+ <tr>
+<td><span class="new_code">forward()</span></td>
+<td>Use the browser forward button</td>
+</tr>
+ <tr>
+<td><span class="new_code">authenticate($username, $password)</span></td>
+<td>Retry page or frame after a 401 response</td>
+</tr>
+ <tr>
+<td><span class="new_code">restart($date)</span></td>
+<td>Restarts the browser for a new session</td>
+</tr>
+ <tr>
+<td><span class="new_code">ageCookies($interval)</span></td>
+<td>Ages the cookies by the specified time</td>
+</tr>
+ <tr>
+<td><span class="new_code">setCookie($name, $value)</span></td>
+<td>Sets an additional cookie</td>
+</tr>
+ <tr>
+<td><span class="new_code">getCookieValue($host, $path, $name)</span></td>
+<td>Reads the most specific cookie</td>
+</tr>
+ <tr>
+<td><span class="new_code">getCurrentCookieValue($name)</span></td>
+<td>Reads cookie for the current context</td>
+</tr>
+ </tbody></table>
+ The methods <span class="new_code">SimpleBrowser::useProxy()</span> and
+ <span class="new_code">SimpleBrowser::addHeader()</span> are special.
+ Once called they continue to apply to all subsequent fetches.
+ </p>
+ <p>
+ Navigating forms is similar to the
+ <a href="form_testing_documentation.html">WebTestCase form navigation</a>...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">setField($name, $value)</span></td>
+<td>Sets all form fields with that name</td>
+</tr>
+ <tr>
+<td><span class="new_code">setFieldById($id, $value)</span></td>
+<td>Sets all form fields with that id</td>
+</tr>
+ <tr>
+<td><span class="new_code">getField($name)</span></td>
+<td>Accessor for a form element value</td>
+</tr>
+ <tr>
+<td><span class="new_code">getFieldById($id)</span></td>
+<td>Accessor for a form element value</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmit($label)</span></td>
+<td>Submits form by button label</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmitByName($name)</span></td>
+<td>Submits form by button attribute</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmitById($id)</span></td>
+<td>Submits form by button attribute</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImage($label, $x, $y)</span></td>
+<td>Clicks an input tag of type image by title or alt text</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImageByName($name, $x, $y)</span></td>
+<td>Clicks an input tag of type image by name</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImageById($id, $x, $y)</span></td>
+<td>Clicks an input tag of type image by ID attribute</td>
+</tr>
+ <tr>
+<td><span class="new_code">submitFormById($id)</span></td>
+<td>Submits by the form tag attribute</td>
+</tr>
+ </tbody></table>
+ At the moment there aren't any methods to list available forms
+ and fields.
+ This will probably be added to later versions of SimpleTest.
+ </p>
+ <p>
+ Within a page, individual frames can be selected.
+ If no selection is made then all the frames are merged together
+ in one large conceptual page.
+ The content of the current page will be a concatenation of all of the
+ frames in the order that they were specified in the "frameset"
+ tags.
+ <table><tbody>
+ <tr>
+<td><span class="new_code">getFrames()</span></td>
+<td>A dump of the current frame structure</td>
+</tr>
+ <tr>
+<td><span class="new_code">getFrameFocus()</span></td>
+<td>Current frame label or index</td>
+</tr>
+ <tr>
+<td><span class="new_code">setFrameFocusByIndex($choice)</span></td>
+<td>Select a frame numbered from 1</td>
+</tr>
+ <tr>
+<td><span class="new_code">setFrameFocus($name)</span></td>
+<td>Select frame by label</td>
+</tr>
+ <tr>
+<td><span class="new_code">clearFrameFocus()</span></td>
+<td>Treat all the frames as a single page</td>
+</tr>
+ </tbody></table>
+ When focused on a single frame, the content will come from
+ that frame only.
+ This includes links to click and forms to submit.
+ </p>
+
+ <p><a class="target" name="debug"><h2>What went wrong?</h2></a></p>
+ <p>
+ All of this functionality is great when we actually manage to fetch pages,
+ but that doesn't always happen.
+ To help figure out what went wrong, the browser has some methods to
+ aid in debugging...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">setConnectionTimeout($timeout)</span></td>
+<td>Close the socket on overrun</td>
+</tr>
+ <tr>
+<td><span class="new_code">getRequest()</span></td>
+<td>Raw request header of page or frame</td>
+</tr>
+ <tr>
+<td><span class="new_code">getHeaders()</span></td>
+<td>Raw response header of page or frame</td>
+</tr>
+ <tr>
+<td><span class="new_code">getTransportError()</span></td>
+<td>Any socket level errors in the last fetch</td>
+</tr>
+ <tr>
+<td><span class="new_code">getResponseCode()</span></td>
+<td>HTTP response of page or frame</td>
+</tr>
+ <tr>
+<td><span class="new_code">getMimeType()</span></td>
+<td>Mime type of page or frame</td>
+</tr>
+ <tr>
+<td><span class="new_code">getAuthentication()</span></td>
+<td>Authentication type in 401 challenge header</td>
+</tr>
+ <tr>
+<td><span class="new_code">getRealm()</span></td>
+<td>Authentication realm in 401 challenge header</td>
+</tr>
+ <tr>
+<td><span class="new_code">setMaximumRedirects($max)</span></td>
+<td>Number of redirects before page is loaded anyway</td>
+</tr>
+ <tr>
+<td><span class="new_code">setMaximumNestedFrames($max)</span></td>
+<td>Protection against recursive framesets</td>
+</tr>
+ <tr>
+<td><span class="new_code">ignoreFrames()</span></td>
+<td>Disables frames support</td>
+</tr>
+ <tr>
+<td><span class="new_code">useFrames()</span></td>
+<td>Enables frames support</td>
+</tr>
+ <tr>
+<td><span class="new_code">ignoreCookies()</span></td>
+<td>Disables sending and receiving of cookies</td>
+</tr>
+ <tr>
+<td><span class="new_code">useCookies()</span></td>
+<td>Enables cookie support</td>
+</tr>
+ </tbody></table>
+ The methods <span class="new_code">SimpleBrowser::setConnectionTimeout()</span>
+ <span class="new_code">SimpleBrowser::setMaximumRedirects()</span>,
+ <span class="new_code">SimpleBrowser::setMaximumNestedFrames()</span>,
+ <span class="new_code">SimpleBrowser::ignoreFrames()</span>,
+ <span class="new_code">SimpleBrowser::useFrames()</span>,
+ <span class="new_code">SimpleBrowser::ignoreCookies()</span> and
+ <span class="new_code">SimpleBrowser::useCokies()</span> continue to apply
+ to every subsequent request.
+ The other methods are frames aware.
+ This means that if you have an individual frame that is not
+ loading, navigate to it using <span class="new_code">SimpleBrowser::setFrameFocus()</span>
+ and you can then use <span class="new_code">SimpleBrowser::getRequest()</span>, etc to
+ see what happened.
+ </p>
+
+ <p><a class="target" name="unit"><h2>Complex unit tests with multiple browsers</h2></a></p>
+ <p>
+ Anything that could be done in a
+ <a href="web_tester_documentation.html">WebTestCase</a> can
+ now be done in a <a href="unit_tester_documentation.html">UnitTestCase</a>.
+ This means that we can freely mix domain object testing with the
+ web interface...
+<pre>
+<strong>class TestOfRegistration extends UnitTestCase {
+ function testNewUserAddedToAuthenticator() {</strong>
+ $browser = &amp;new SimpleBrowser();
+ $browser-&gt;get('http://my-site.com/register.php');
+ $browser-&gt;setField('email', 'me@here');
+ $browser-&gt;setField('password', 'Secret');
+ $browser-&gt;click('Register');
+ <strong>
+ $authenticator = &amp;new Authenticator();
+ $member = &amp;$authenticator-&gt;findByEmail('me@here');
+ $this-&gt;assertEqual($member-&gt;getPassword(), 'Secret');
+ }
+}</strong>
+</pre>
+ While this may be a useful temporary expediency, I am not a fan
+ of this type of testing.
+ The testing has cut across application layers, make it twice as
+ likely it will need refactoring when the code changes.
+ </p>
+ <p>
+ A more useful case of where using the browser directly can be helpful
+ is where the <span class="new_code">WebTestCase</span> cannot cope.
+ An example is where two browsers are needed at the same time.
+ </p>
+ <p>
+ For example, say we want to disallow multiple simultaneous
+ usage of a site with the same username.
+ This test case will do the job...
+<pre>
+class TestOfSecurity extends UnitTestCase {
+ function testNoMultipleLoginsFromSameUser() {<strong>
+ $first = &amp;new SimpleBrowser();
+ $first-&gt;get('http://my-site.com/login.php');
+ $first-&gt;setField('name', 'Me');
+ $first-&gt;setField('password', 'Secret');
+ $first-&gt;click('Enter');
+ $this-&gt;assertEqual($first-&gt;getTitle(), 'Welcome');
+
+ $second = &amp;new SimpleBrowser();
+ $second-&gt;get('http://my-site.com/login.php');
+ $second-&gt;setField('name', 'Me');
+ $second-&gt;setField('password', 'Secret');
+ $second-&gt;click('Enter');
+ $this-&gt;assertEqual($second-&gt;getTitle(), 'Access Denied');</strong>
+ }
+}
+</pre>
+ You can also use the <span class="new_code">SimpleBrowser</span> class
+ directly when you want to write test cases using a different
+ test tool than SimpleTest.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ SimpleTest project page on <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ SimpleTest download page on <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ The <a href="http://simpletest.org/api/">developer's API for SimpleTest</a>
+ gives full detail on the classes and assertions available.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <span class="chosen">Scriptable browser</span>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/en/docs.css b/vendors/simpletest/docs/en/docs.css
new file mode 100644
index 000000000..18368a04f
--- /dev/null
+++ b/vendors/simpletest/docs/en/docs.css
@@ -0,0 +1,121 @@
+body {
+ padding-left: 3%;
+ padding-right: 3%;
+}
+h1, h2, h3 {
+ font-family: sans-serif;
+}
+h1 {
+ text-align: center;
+}
+pre {
+ font-family: "courier new", courier, typewriter, monospace;
+ font-size: 90%;
+ border: 1px solid;
+ border-color: #999966;
+ background-color: #ffffcc;
+ padding: 5px;
+ margin-left: 20px;
+ margin-right: 40px;
+}
+.code, .new_code, pre.new_code {
+ font-family: "courier new", courier, typewriter, monospace;
+ font-weight: bold;
+}
+div.copyright {
+ font-size: 80%;
+ color: gray;
+}
+div.copyright a {
+ margin-top: 1em;
+ color: gray;
+}
+ul.api {
+ border: 2px outset;
+ border-color: gray;
+ background-color: white;
+ margin: 5px;
+ margin-left: 5%;
+ margin-right: 5%;
+}
+ul.api li {
+ margin-top: 0.2em;
+ margin-bottom: 0.2em;
+ list-style: none;
+ text-indent: -3em;
+ padding-left: 1em;
+}
+div.demo {
+ border: 4px ridge;
+ border-color: gray;
+ padding: 10px;
+ margin: 5px;
+ margin-left: 20px;
+ margin-right: 40px;
+ background-color: white;
+}
+div.demo span.fail {
+ color: red;
+}
+div.demo span.pass {
+ color: green;
+}
+div.demo h1 {
+ font-size: 12pt;
+ text-align: left;
+ font-weight: bold;
+}
+div.menu {
+ text-align: center;
+}
+table {
+ border: 2px outset;
+ border-color: gray;
+ background-color: white;
+ margin: 5px;
+ margin-left: 5%;
+ margin-right: 5%;
+}
+td {
+ font-size: 90%;
+}
+.shell {
+ color: white;
+}
+pre.shell {
+ border: 4px ridge;
+ border-color: gray;
+ padding: 10px;
+ margin: 5px;
+ margin-left: 20px;
+ margin-right: 40px;
+ background-color: #000100;
+ color: #99ff99;
+ font-size: 90%;
+}
+pre.file {
+ color: black;
+ border: 1px solid;
+ border-color: black;
+ padding: 10px;
+ margin: 5px;
+ margin-left: 20px;
+ margin-right: 40px;
+ background-color: white;
+ font-size: 90%;
+}
+form.demo {
+ background-color: lightgray;
+ border: 4px outset;
+ border-color: lightgray;
+ padding: 10px;
+ margin-right: 40%;
+}
+dl, dd {
+ margin: 10px;
+ margin-left: 30px;
+}
+em {
+ font-weight: bold;
+ font-family: "courier new", courier, typewriter, monospace;
+}
diff --git a/vendors/simpletest/docs/en/expectation_documentation.html b/vendors/simpletest/docs/en/expectation_documentation.html
new file mode 100644
index 000000000..c3c959c4c
--- /dev/null
+++ b/vendors/simpletest/docs/en/expectation_documentation.html
@@ -0,0 +1,422 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>
+ Extending the SimpleTest unit tester with additional expectation classes
+ </title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <span class="chosen">Expectations</span>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Expectation documentation</h1>
+ This page...
+ <ul>
+<li>
+ Using expectations for
+ <a href="#mock">more precise testing with mock objects</a>
+ </li>
+<li>
+ <a href="#behaviour">Changing mock object behaviour</a> with expectations
+ </li>
+<li>
+ <a href="#extending">Extending the expectations</a>
+ </li>
+<li>
+ Underneath SimpleTest <a href="#unit">uses expectation classes</a>
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="mock"><h2>More control over mock objects</h2></a></p>
+ <p>
+ The default behaviour of the
+ <a href="mock_objects_documentation.html">mock objects</a>
+ in
+ <a href="http://sourceforge.net/projects/simpletest/">SimpleTest</a>
+ is either an identical match on the argument or to allow any argument at all.
+ For almost all tests this is sufficient.
+ Sometimes, though, you want to weaken a test case.
+ </p>
+ <p>
+ One place where a test can be too tightly coupled is with
+ text matching.
+ Suppose we have a component that outputs a helpful error
+ message when something goes wrong.
+ You want to test that the correct error was sent, but the actual
+ text may be rather long.
+ If you test for the text exactly, then every time the exact wording
+ of the message changes, you will have to go back and edit the test suite.
+ </p>
+ <p>
+ For example, suppose we have a news service that has failed
+ to connect to its remote source.
+<pre>
+<strong>class NewsService {
+ ...
+ function publish(&amp;$writer) {
+ if (! $this-&gt;isConnected()) {
+ $writer-&gt;write('Cannot connect to news service "' .
+ $this-&gt;_name . '" at this time. ' .
+ 'Please try again later.');
+ }
+ ...
+ }
+}</strong>
+</pre>
+ Here it is sending its content to a
+ <span class="new_code">Writer</span> class.
+ We could test this behaviour with a
+ <span class="new_code">MockWriter</span> like so...
+<pre>
+class TestOfNewsService extends UnitTestCase {
+ ...
+ function testConnectionFailure() {<strong>
+ $writer = &amp;new MockWriter();
+ $writer-&gt;expectOnce('write', array(
+ 'Cannot connect to news service ' .
+ '"BBC News" at this time. ' .
+ 'Please try again later.'));
+
+ $service = &amp;new NewsService('BBC News');
+ $service-&gt;publish($writer);</strong>
+ }
+}
+</pre>
+ This is a good example of a brittle test.
+ If we decide to add additional instructions, such as
+ suggesting an alternative news source, we will break
+ our tests even though no underlying functionality
+ has been altered.
+ </p>
+ <p>
+ To get around this, we would like to do a regular expression
+ test rather than an exact match.
+ We can actually do this with...
+<pre>
+class TestOfNewsService extends UnitTestCase {
+ ...
+ function testConnectionFailure() {
+ $writer = &amp;new MockWriter();<strong>
+ $writer-&gt;expectOnce(
+ 'write',
+ array(new PatternExpectation('/cannot connect/i')));</strong>
+
+ $service = &amp;new NewsService('BBC News');
+ $service-&gt;publish($writer);
+ }
+}
+</pre>
+ Instead of passing in the expected parameter to the
+ <span class="new_code">MockWriter</span> we pass an
+ expectation class called
+ <span class="new_code">WantedPatternExpectation</span>.
+ The mock object is smart enough to recognise this as special
+ and to treat it differently.
+ Rather than simply comparing the incoming argument to this
+ object, it uses the expectation object itself to
+ perform the test.
+ </p>
+ <p>
+ The <span class="new_code">WantedPatternExpectation</span> takes
+ the regular expression to match in its constructor.
+ Whenever a comparison is made by the <span class="new_code">MockWriter</span>
+ against this expectation class, it will do a
+ <span class="new_code">preg_match()</span> with this pattern.
+ With our test case above, as long as "cannot connect"
+ appears in the text of the string, the mock will issue a pass
+ to the unit tester.
+ The rest of the text does not matter.
+ </p>
+ <p>
+ The possible expectation classes are...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">AnythingExpectation</span></td>
+<td>Will always match</td>
+</tr>
+ <tr>
+<td><span class="new_code">EqualExpectation</span></td>
+<td>An equality, rather than the stronger identity comparison</td>
+</tr>
+ <tr>
+<td><span class="new_code">NotEqualExpectation</span></td>
+<td>An inequality comparison</td>
+</tr>
+ <tr>
+<td><span class="new_code">IndenticalExpectation</span></td>
+<td>The default mock object check which must match exactly</td>
+</tr>
+ <tr>
+<td><span class="new_code">NotIndenticalExpectation</span></td>
+<td>Inverts the mock object logic</td>
+</tr>
+ <tr>
+<td><span class="new_code">WithinMarginExpectation</span></td>
+<td>Compares a value to within a margin</td>
+</tr>
+ <tr>
+<td><span class="new_code">OutsideMarginExpectation</span></td>
+<td>Checks that a value is out side the margin</td>
+</tr>
+ <tr>
+<td><span class="new_code">PatternExpectation</span></td>
+<td>Uses a Perl Regex to match a string</td>
+</tr>
+ <tr>
+<td><span class="new_code">NoPatternExpectation</span></td>
+<td>Passes only if failing a Perl Regex</td>
+</tr>
+ <tr>
+<td><span class="new_code">IsAExpectation</span></td>
+<td>Checks the type or class name only</td>
+</tr>
+ <tr>
+<td><span class="new_code">NotAExpectation</span></td>
+<td>Opposite of the <span class="new_code">IsAExpectation</span>
+</td>
+</tr>
+ <tr>
+<td><span class="new_code">MethodExistsExpectation</span></td>
+<td>Checks a method is available on an object</td>
+</tr>
+ </tbody></table>
+ Most take the expected value in the constructor.
+ The exceptions are the pattern matchers, which take a regular expression,
+ and the <span class="new_code">IsAExpectation</span> and <span class="new_code">NotAExpectation</span> which takes a type
+ or class name as a string.
+ </p>
+ <p>
+ Some examples...
+ </p>
+ <p>
+<pre>
+$mock-&gt;expectOnce('method', array(new IdenticalExpectation(14)));
+</pre>
+ This is the same as <span class="new_code">$mock-&gt;expectOnce('method', array(14))</span>.
+<pre>
+$mock-&gt;expectOnce('method', array(new EqualExpectation(14)));
+</pre>
+ This is different from the previous version in that the string
+ <span class="new_code">"14"</span> as a parameter will also pass.
+ Sometimes the additional type checks of SimpleTest are too restrictive.
+<pre>
+$mock-&gt;expectOnce('method', array(new AnythingExpectation(14)));
+</pre>
+ This is the same as <span class="new_code">$mock-&gt;expectOnce('method', array('*'))</span>.
+<pre>
+$mock-&gt;expectOnce('method', array(new IdenticalExpectation('*')));
+</pre>
+ This is handy if you want to assert a literal <span class="new_code">"*"</span>.
+<pre>
+new NotIdenticalExpectation(14)
+</pre>
+ This matches on anything other than integer 14.
+ Even the string <span class="new_code">"14"</span> would pass.
+<pre>
+new WithinMarginExpectation(14.0, 0.001)
+</pre>
+ This will accept any value from 13.999 to 14.001 inclusive.
+ </p>
+
+ <p><a class="target" name="behaviour"><h2>Using expectations to control stubs</h2></a></p>
+ <p>
+ The expectation classes can be used not just for sending assertions
+ from mock objects, but also for selecting behaviour for the
+ <a href="mock_objects_documentation.html">mock objects</a>.
+ Anywhere a list of arguments is given, a list of expectation objects
+ can be inserted instead.
+ </p>
+ <p>
+ Suppose we want a mock authorisation server to simulate a successful login,
+ but only if it receives a valid session object.
+ We can do this as follows...
+<pre>
+Mock::generate('Authorisation');
+<strong>
+$authorisation = new MockAuthorisation();
+$authorisation-&gt;setReturnValue(
+ 'isAllowed',
+ true,
+ array(new IsAExpectation('Session', 'Must be a session')));
+$authorisation-&gt;setReturnValue('isAllowed', false);</strong>
+</pre>
+ We have set the default mock behaviour to return false when
+ <span class="new_code">isAllowed</span> is called.
+ When we call the method with a single parameter that
+ is a <span class="new_code">Session</span> object, it will return true.
+ We have also added a second parameter as a message.
+ This will be displayed as part of the mock object
+ failure message if this expectation is the cause of
+ a failure.
+ </p>
+ <p>
+ This kind of sophistication is rarely useful, but is included for
+ completeness.
+ </p>
+
+ <p><a class="target" name="extending"><h2>Creating your own expectations</h2></a></p>
+ <p>
+ The expectation classes have a very simple structure.
+ So simple that it is easy to create your own versions for
+ commonly used test logic.
+ </p>
+ <p>
+ As an example here is the creation of a class to test for
+ valid IP addresses.
+ In order to work correctly with the stubs and mocks the new
+ expectation class should extend
+ <span class="new_code">SimpleExpectation</span>...
+<pre>
+<strong>class ValidIp extends SimpleExpectation {
+
+ function test($ip) {
+ return (ip2long($ip) != -1);
+ }
+
+ function testMessage($ip) {
+ return "Address [$ip] should be a valid IP address";
+ }
+}</strong>
+</pre>
+ There are only two methods to implement.
+ The <span class="new_code">test()</span> method should
+ evaluate to true if the expectation is to pass, and
+ false otherwise.
+ The <span class="new_code">testMessage()</span> method
+ should simply return some helpful text explaining the test
+ that was carried out.
+ </p>
+ <p>
+ This class can now be used in place of the earlier expectation
+ classes.
+ </p>
+
+ <p><a class="target" name="unit"><h2>Under the bonnet of the unit tester</h2></a></p>
+ <p>
+ The <a href="http://sourceforge.net/projects/simpletest/">SimpleTest unit testing framework</a>
+ also uses the expectation classes internally for the
+ <a href="unit_test_documentation.html">UnitTestCase class</a>.
+ We can also take advantage of these mechanisms to reuse our
+ homebrew expectation classes within the test suites directly.
+ </p>
+ <p>
+ The most crude way of doing this is to use the
+ <span class="new_code">SimpleTest::assert()</span> method to
+ test against it directly...
+<pre>
+<strong>class TestOfNetworking extends UnitTestCase {
+ ...
+ function testGetValidIp() {
+ $server = &amp;new Server();
+ $this-&gt;assert(
+ new ValidIp(),
+ $server-&gt;getIp(),
+ 'Server IP address-&gt;%s');
+ }
+}</strong>
+</pre>
+ This is a little untidy compared with our usual
+ <span class="new_code">assert...()</span> syntax.
+ </p>
+ <p>
+ For such a simple case we would normally create a
+ separate assertion method on our test case rather
+ than bother using the expectation class.
+ If we pretend that our expectation is a little more
+ complicated for a moment, so that we want to reuse it,
+ we get...
+<pre>
+class TestOfNetworking extends UnitTestCase {
+ ...<strong>
+ function assertValidIp($ip, $message = '%s') {
+ $this-&gt;assert(new ValidIp(), $ip, $message);
+ }</strong>
+
+ function testGetValidIp() {
+ $server = &amp;new Server();<strong>
+ $this-&gt;assertValidIp(
+ $server-&gt;getIp(),
+ 'Server IP address-&gt;%s');</strong>
+ }
+}
+</pre>
+ It is unlikely we would ever need this degree of control
+ over the testing machinery.
+ It is rare to need the expectations for more than pattern
+ matching.
+ Also, complex expectation classes could make the tests
+ harder to read and debug.
+ These mechanisms are really of most use to authors of systems
+ that will extend the test framework to create their own tool set.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ SimpleTest project page on <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ SimpleTest download page on <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ The expectations mimic the constraints in <a href="http://www.jmock.org/">JMock</a>.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">Full API for SimpleTest</a>
+ from the PHPDoc.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <span class="chosen">Expectations</span>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/en/form_testing_documentation.html b/vendors/simpletest/docs/en/form_testing_documentation.html
new file mode 100644
index 000000000..fe0fcccf0
--- /dev/null
+++ b/vendors/simpletest/docs/en/form_testing_documentation.html
@@ -0,0 +1,342 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Simple Test documentation for testing HTML forms</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <span class="chosen">Testing forms</span>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Form testing documentation</h1>
+ This page...
+ <ul>
+<li>
+ Changing form values and successfully
+ <a href="#submit">Submitting a simple form</a>
+ </li>
+<li>
+ Handling <a href="#multiple">widgets with multiple values</a>
+ by setting lists.
+ </li>
+<li>
+ Bypassing javascript to <a href="#hidden-field">set a hidden field</a>.
+ </li>
+<li>
+ <a href="#raw">Raw posting</a> when you don't have a button
+ to click.
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="submit"><h2>Submitting a simple form</h2></a></p>
+ <p>
+ When a page is fetched by the <span class="new_code">WebTestCase</span>
+ using <span class="new_code">get()</span> or
+ <span class="new_code">post()</span> the page content is
+ automatically parsed.
+ This results in any form controls that are inside &lt;form&gt; tags
+ being available from within the test case.
+ For example, if we have this snippet of HTML...
+<pre>
+&lt;form&gt;
+ &lt;input type="text" name="a" value="A default" /&gt;
+ &lt;input type="submit" value="Go" /&gt;
+&lt;/form&gt;
+</pre>
+ Which looks like this...
+ </p>
+ <p>
+ <form class="demo">
+ <input type="text" name="a" value="A default">
+ <input type="submit" value="Go">
+ </form>
+ </p>
+ <p>
+ We can navigate to this code, via the
+ <a href="http://www.lastcraft.com/form_testing_documentation.php">LastCraft</a>
+ site, with the following test...
+<pre>
+class SimpleFormTests extends WebTestCase {
+ <strong>
+ function testDefaultValue() {
+ $this-&gt;get('http://www.lastcraft.com/form_testing_documentation.php');
+ $this-&gt;assertField('a', 'A default');
+ }</strong>
+}
+</pre>
+ Immediately after loading the page all of the HTML controls are set at
+ their default values just as they would appear in the web browser.
+ The assertion tests that a HTML widget exists in the page with the
+ name "a" and that it is currently set to the value
+ "A default".
+ As usual, we could use a pattern expectation instead if a fixed
+ string.
+ </p>
+ <p>
+ We could submit the form straight away, but first we'll change
+ the value of the text field and only then submit it...
+<pre>
+class SimpleFormTests extends WebTestCase {
+
+ function testDefaultValue() {
+ $this-&gt;get('http://www.my-site.com/');
+ $this-&gt;assertField('a', 'A default');<strong>
+ $this-&gt;setField('a', 'New value');
+ $this-&gt;click('Go');</strong>
+ }
+}
+</pre>
+ Because we didn't specify a method attribute on the form tag, and
+ didn't specify an action either, the test case will follow
+ the usual browser behaviour of submitting the form data as a <em>GET</em>
+ request back to the same location.
+ SimpleTest tries to emulate typical browser behaviour as much as possible,
+ rather than attempting to catch missing attributes on tags.
+ This is because the target of the testing framework is the PHP application
+ logic, not syntax or other errors in the HTML code.
+ For HTML errors, other tools such as
+ <a href="http://www.w3.org/People/Raggett/tidy/">HTMLTidy</a> should be used.
+ </p>
+ <p>
+ If a field is not present in any form, or if an option is unavailable,
+ then <span class="new_code">WebTestCase::setField()</span> will return
+ <span class="new_code">false</span>.
+ For example, suppose we wish to verify that a "Superuser"
+ option is not present in this form...
+<pre>
+&lt;strong&gt;Select type of user to add:&lt;/strong&gt;
+&lt;select name="type"&gt;
+ &lt;option&gt;Subscriber&lt;/option&gt;
+ &lt;option&gt;Author&lt;/option&gt;
+ &lt;option&gt;Administrator&lt;/option&gt;
+&lt;/select&gt;
+</pre>
+ Which looks like...
+ </p>
+ <p>
+ <form class="demo">
+ <strong>Select type of user to add:</strong>
+ <select name="type">
+ <option>Subscriber</option>
+ <option>Author</option>
+ <option>Administrator</option>
+ </select>
+ </form>
+ </p>
+ <p>
+ The following test will confirm it...
+<pre>
+class SimpleFormTests extends WebTestCase {
+ ...
+ function testNoSuperuserChoiceAvailable() {<strong>
+ $this-&gt;get('http://www.lastcraft.com/form_testing_documentation.php');
+ $this-&gt;assertFalse($this-&gt;setField('type', 'Superuser'));</strong>
+ }
+}
+</pre>
+ The selection will not be changed on a failure to set
+ a widget value.
+ </p>
+ <p>
+ Here is the full list of widgets currently supported...
+ <ul>
+ <li>Text fields, including hidden and password fields.</li>
+ <li>Submit buttons including the button tag, although not yet reset buttons</li>
+ <li>Text area. This includes text wrapping behaviour.</li>
+ <li>Checkboxes, including multiple checkboxes in the same form.</li>
+ <li>Drop down selections, including multiple selects.</li>
+ <li>Radio buttons.</li>
+ <li>Images.</li>
+ </ul>
+ </p>
+ <p>
+ The browser emulation offered by SimpleTest mimics
+ the actions which can be perform by a user on a
+ standard HTML page. Javascript is not supported, and
+ it's unlikely that support will be added any time
+ soon.
+ </p>
+ <p>
+ Of particular note is that the Javascript idiom of
+ passing form results by setting a hidden field cannot
+ be performed using the normal SimpleTest
+ commands. See below for a way to test such forms.
+ </p>
+
+ <p><a class="target" name="multiple"><h2>Fields with multiple values</h2></a></p>
+ <p>
+ SimpleTest can cope with two types of multivalue controls: Multiple
+ selection drop downs, and multiple checkboxes with the same name
+ within a form.
+ The multivalue nature of these means that setting and testing
+ are slightly different.
+ Using checkboxes as an example...
+<pre>
+&lt;form class="demo"&gt;
+ &lt;strong&gt;Create privileges allowed:&lt;/strong&gt;
+ &lt;input type="checkbox" name="crud" value="c" checked&gt;&lt;br&gt;
+ &lt;strong&gt;Retrieve privileges allowed:&lt;/strong&gt;
+ &lt;input type="checkbox" name="crud" value="r" checked&gt;&lt;br&gt;
+ &lt;strong&gt;Update privileges allowed:&lt;/strong&gt;
+ &lt;input type="checkbox" name="crud" value="u" checked&gt;&lt;br&gt;
+ &lt;strong&gt;Destroy privileges allowed:&lt;/strong&gt;
+ &lt;input type="checkbox" name="crud" value="d" checked&gt;&lt;br&gt;
+ &lt;input type="submit" value="Enable Privileges"&gt;
+&lt;/form&gt;
+</pre>
+ Which renders as...
+ </p>
+ <p>
+ <form class="demo">
+ <strong>Create privileges allowed:</strong>
+ <input type="checkbox" name="crud" value="c" checked><br>
+ <strong>Retrieve privileges allowed:</strong>
+ <input type="checkbox" name="crud" value="r" checked><br>
+ <strong>Update privileges allowed:</strong>
+ <input type="checkbox" name="crud" value="u" checked><br>
+ <strong>Destroy privileges allowed:</strong>
+ <input type="checkbox" name="crud" value="d" checked><br>
+ <input type="submit" value="Enable Privileges">
+ </form>
+ </p>
+ <p>
+ If we wish to disable all but the retrieval privileges and
+ submit this information we can do it like this...
+<pre>
+class SimpleFormTests extends WebTestCase {
+ ...<strong>
+ function testDisableNastyPrivileges() {
+ $this-&gt;get('http://www.lastcraft.com/form_testing_documentation.php');
+ $this-&gt;assertField('crud', array('c', 'r', 'u', 'd'));
+ $this-&gt;setField('crud', array('r'));
+ $this-&gt;click('Enable Privileges');
+ }</strong>
+}
+</pre>
+ Instead of setting the field to a single value, we give it a list
+ of values.
+ We do the same when testing expected values.
+ We can then write other test code to confirm the effect of this, perhaps
+ by logging in as that user and attempting an update.
+ </p>
+
+ <p><a class="target" name="hidden-field"><h2>Forms which use javascript to set a hidden field</h2></a></p>
+ <p>
+ If you want to test a form which relies on javascript to set a hidden
+ field, you can't just call setField().
+ The following code will <em>not</em> work:
+<pre>
+class SimpleFormTests extends WebTestCase {
+ function testMyJavascriptForm() {
+ <strong>// This does *not* work</strong>
+ $this-&gt;setField('a_hidden_field', '123');
+ $this-&gt;clickSubmit('OK');
+ }
+}
+</pre>
+ Instead, you need to pass the additional form parameters to the
+ clickSubmit() method:
+<pre>
+class SimpleFormTests extends WebTestCase {
+ function testMyJavascriptForm() {
+ // Pass the hidden field value as an additional POST variable
+ <strong>$this-&gt;clickSubmit('OK', array('a_hidden_field'=&gt;'123'));</strong>
+ }
+
+}
+</pre>
+ </p>
+ <p>
+ Bear in mind that in doing this you're effectively stubbing out a
+ part of your software (the javascript code in the form), and
+ perhaps you might be better off using something like
+ <a href="http://selenium.openqa.org/">Selenium</a> to ensure a complete
+ acceptance test.
+ </p>
+
+ <p><a class="target" name="raw"><h2>Raw posting</h2></a></p>
+ <p>
+ If you want to test a form handler, but have not yet written
+ or do not have access to the form itself, you can create a
+ form submission by hand.
+<pre>
+class SimpleFormTests extends WebTestCase {
+ ...<strong>
+ function testAttemptedHack() {
+ $this-&gt;post(
+ 'http://www.my-site.com/add_user.php',
+ array('type' =&gt; 'superuser'));
+ $this-&gt;assertNoText('user created');
+ }</strong>
+}
+</pre>
+ By adding data to the <span class="new_code">WebTestCase::post()</span>
+ method, we are attempting to fetch the page as a form submission.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ SimpleTest project page on <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ SimpleTest download page on <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ The <a href="http://simpletest.org/api/">developer's API for SimpleTest</a>
+ gives full detail on the classes and assertions available.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <span class="chosen">Testing forms</span>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/en/group_test_documentation.html b/vendors/simpletest/docs/en/group_test_documentation.html
new file mode 100644
index 000000000..a0c78843c
--- /dev/null
+++ b/vendors/simpletest/docs/en/group_test_documentation.html
@@ -0,0 +1,386 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>SimpleTest for PHP test suites</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <span class="chosen">Group tests</span>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Test suite documentation</h1>
+ This page...
+ <ul>
+<li>
+ Different ways to <a href="#group">group tests</a> together.
+ </li>
+<li>
+ Combining group tests into <a href="#higher">larger groups</a>.
+ </li>
+<li>
+ Integrating <a href="#legacy">legacy test cases</a> from other
+ types of PHPUnit.
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="group"><h2>Grouping tests into suites</h2></a></p>
+ <p>
+ To run test cases as part of a group, the test cases should really
+ be placed in files without the runner code...
+<pre>
+<strong>&lt;?php
+ require_once('../classes/io.php');
+
+ class FileTester extends UnitTestCase {
+ ...
+ }
+
+ class SocketTester extends UnitTestCase {
+ ...
+ }
+?&gt;</strong>
+</pre>
+ As many cases as needed can appear in a single file.
+ They should include any code they need, such as the library
+ being tested, but none of the simple test libraries.
+ </p>
+ <p>
+ If you have extended any test cases, you can include them
+ as well. In PHP 4...
+<pre>
+&lt;?php
+ require_once('../classes/io.php');
+<strong>
+ class MyFileTestCase extends UnitTestCase {
+ ...
+ }
+ SimpleTest::ignore('MyFileTestCase');</strong>
+
+ class FileTester extends MyFileTestCase { ... }
+
+ class SocketTester extends UnitTestCase { ... }
+?&gt;
+</pre>
+ The <span class="new_code">FileTester</span> class does
+ not contain any actual tests, but is a base class for other
+ test cases.
+ For this reason we use the
+ <span class="new_code">SimpleTestOptions::ignore()</span> directive
+ to tell the upcoming group test to ignore it.
+ This directive can appear anywhere in the file and works
+ when a whole file of test cases is loaded (see below).
+ </p>
+ <p>
+ If you are using PHP 5, you do not need this special directive at all.
+ Simply mark any test cases that should not be run as abstract...
+<pre>
+<strong>abstract</strong> class MyFileTestCase extends UnitTestCase {
+ ...
+}
+
+class FileTester extends MyFileTestCase { ... }
+
+class SocketTester extends UnitTestCase { ... }
+</pre>
+ </p>
+ <p>
+ We will call this sample <em>file_test.php</em>.
+ Next we create a group test file, called say <em>my_group_test.php</em>.
+ You will think of a better name I am sure.
+ </p>
+ <p>
+ We will add the test file using a safe method...
+<pre>
+&lt;?php
+ require_once('simpletest/unit_tester.php');
+ require_once('simpletest/reporter.php');<strong>
+ require_once('file_test.php');
+
+ $test = &amp;new TestSuite('All file tests');
+ $test-&gt;addTestCase(new FileTestCase());
+ $test-&gt;run(new HtmlReporter());</strong>
+?&gt;
+</pre>
+ This instantiates the test case before the test suite is
+ run.
+ This could get a little expensive with a large number of test
+ cases, and can be surprising behaviour.
+ </p>
+ <p>
+ The main problem is that for every test case
+ that we add we will have
+ to <span class="new_code">require_once()</span> the test code
+ file and manually instantiate each and every test case.
+ </p>
+ <p>
+ We can save a lot of typing with...
+<pre>
+&lt;?php
+ require_once('simpletest/unit_tester.php');
+ require_once('simpletest/reporter.php');
+
+ $test = &amp;new TestSuite('All file tests');<strong>
+ $test-&gt;addTestFile('file_test.php');</strong>
+ $test-&gt;run(new HtmlReporter());
+?&amp;gt;
+</pre>
+ What happens here is that the <span class="new_code">TestSuite</span>
+ class has done the <span class="new_code">require_once()</span>
+ for us.
+ It then checks to see if any new test case classes
+ have been created by the new file and automatically adds
+ them to the group test.
+ Now all we have to do is add each new file.
+ </p>
+ <p>
+ No only that, but you can guarantee that the constructor is run
+ just before the first test method and, in PHP 5, the destructor
+ is run just after the last test method.
+ </p>
+ <p>
+ There are two things that could go wrong and which require care...
+ <ol>
+ <li>
+ The file could already have been parsed by PHP, and so no
+ new classes will have been added. You should make
+ sure that the test cases are only included in this file
+ and no others (Note : with the new <cite>autorun</cite>
+ functionnality, this problem has now been solved).
+ </li>
+ <li>
+ New test case extension classes that get included will be
+ placed in the group test and run also.
+ You will need to add a <span class="new_code">SimpleTestOptions::ignore()</span>
+ directive for these classes, or make sure that they are included
+ before the <span class="new_code">TestSuite::addTestFile()</span>
+ line, or make sure that they are abstract classes.
+ </li>
+ </ol>
+ </p>
+
+ <p><a class="target" name="higher"><h2>Composite suites</h2></a></p>
+ <p>
+ The above method places all of the test cases into one large group.
+ For larger projects though this may not be flexible enough; you
+ may want to group the tests in all sorts of ways.
+ </p>
+ <p>
+ To get a more flexible group test we can subclass
+ <span class="new_code">TestSuite</span> and then instantiate it as needed...
+<pre>
+&lt;?php
+ require_once('simpletest/unit_tester.php');
+ require_once('simpletest/reporter.php');
+ <strong>
+ class FileTestSuite extends TestSuite {
+ function FileTestSuite() {
+ $this-&gt;TestSuite('All file tests');
+ $this-&gt;addTestFile('file_test.php');
+ }
+ }</strong>
+?&gt;
+</pre>
+ This effectively names the test in the constructor and then
+ adds our test cases and a single group below.
+ Of course we can add more than one group at this point.
+ We can now invoke the tests from a separate runner file...
+<pre>
+&lt;?php
+ require_once('file_test_suite.php');
+ <strong>
+ $test = &amp;new FileTestSuite();
+ $test-&gt;run(new HtmlReporter());</strong>
+?&gt;
+</pre>
+ ...or we can group them into even larger group tests.
+ We can even mix groups and test cases freely as long as
+ we are careful about double includes...
+<pre>
+&lt;?php
+ <strong>
+ $test = &amp;new BigTestSuite('Big group');
+ $test-&gt;addTestFile('file_test_suite.php');
+ $test-&gt;addTestFile('some_test_case.php');</strong>
+ $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ In the event of a double include, ony the first instance
+ of the test case will be run.
+ </p>
+ <p>
+ If we still wish to run the original group test, and we
+ don't want all of these little runner files, we can
+ put the test runner code around guard bars when we create
+ each group.
+<pre>
+&lt;?php
+ class FileTestSuite extends TestSuite {
+ function FileTestSuite() {
+ $this-&gt;TestSuite('All file tests');
+ $test-&gt;addTestFile('file_test.php');
+ }
+ }
+ <strong>
+ if (! defined('RUNNER')) {
+ define('RUNNER', true);</strong>
+ $test = &amp;new FileTestSuite();
+ $test-&gt;run(new HtmlReporter());
+ }
+?&gt;
+</pre>
+ This approach requires the guard to be set when including
+ the group test file, but this is still less hassle than
+ lots of separate runner files.
+ You include the same guard on the top level tests to make sure
+ that <span class="new_code">run()</span> will run once only
+ from the top level script that has been invoked.
+<pre>
+&lt;?php<strong>
+ define('RUNNER', true);</strong>
+ require_once('file_test_suite.php');
+
+ $test = &amp;new BigTestSuite('Big group');
+ $test-&gt;addTestCase(new FileTestSuite());
+ $test-&gt;addTestCase(...);
+ $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ As with the normal test cases, a <span class="new_code">TestSuite</span> can
+ be loaded with the <span class="new_code">TestSuite::addTestFile()</span> method.
+<pre>
+&lt;?php
+ define('RUNNER', true);
+
+ $test = &amp;new BigTestSuite('Big group');<strong>
+ $test-&gt;addTestFile('file_test_suite.php');
+ $test-&gt;addTestFile(...);</strong>
+ $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ </p>
+
+ <p><a class="target" name="legacy"><h2>Integrating legacy test cases</h2></a></p>
+ <p>
+ If you already have unit tests for your code or are extending external
+ classes that have tests, it is unlikely that all of the test cases
+ are in SimpleTest format.
+ Fortunately it is possible to incorporate test cases from other
+ unit testers directly into SimpleTest group tests.
+ </p>
+ <p>
+ Say we have the following
+ <a href="http://sourceforge.net/projects/phpunit">PhpUnit</a>
+ test case in the file <em>config_test.php</em>...
+<pre>
+<strong>class ConfigFileTest extends TestCase {
+ function ConfigFileTest() {
+ $this-&gt;TestCase('Config file test');
+ }
+
+ function testContents() {
+ $config = new ConfigFile('test.conf');
+ $this-&gt;assertRegexp('/me/', $config-&gt;getValue('username'));
+ }
+}</strong>
+</pre>
+ The group test can recognise this as long as we include
+ the appropriate adapter class before we add the test
+ file...
+<pre>
+&lt;?php
+ require_once('simpletest/unit_tester.php');
+ require_once('simpletest/reporter.php');<strong>
+ require_once('simpletest/adapters/phpunit_test_case.php');</strong>
+
+ $test = &amp;new TestSuite('All file tests');<strong>
+ $test-&gt;addTestFile('config_test.php');</strong>
+ $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ There are only two adapters, the other is for the
+ <a href="http://pear.php.net/manual/en/package.php.phpunit.php">PEAR</a>
+ 1.0 unit tester...
+<pre>
+&lt;?php
+ require_once('simpletest/unit_tester.php');
+ require_once('simpletest/reporter.php');<strong>
+ require_once('simpletest/adapters/pear_test_case.php');</strong>
+
+ $test = &amp;new TestSuite('All file tests');<strong>
+ $test-&gt;addTestFile('some_pear_test_cases.php');</strong>
+ $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ The PEAR test cases can be freely mixed with SimpleTest
+ ones even in the same test file,
+ but you cannot use SimpleTest assertions in the legacy
+ test case versions.
+ This is done as a check that you are not accidently making
+ your test cases completely dependent on SimpleTest.
+ You may want to do a PEAR release of your library for example,
+ which would mean shipping it with valid PEAR::PhpUnit test
+ cases.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ SimpleTest project page on <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ SimpleTest download page on <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <span class="chosen">Group tests</span>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/en/index.html b/vendors/simpletest/docs/en/index.html
new file mode 100644
index 000000000..03b6c5cef
--- /dev/null
+++ b/vendors/simpletest/docs/en/index.html
@@ -0,0 +1,538 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>
+ Download the Simple Test testing framework -
+ Unit tests and mock objects for PHP
+ </title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<span class="chosen">SimpleTest</span>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Simple Test for PHP</h1>
+ This page...
+ <ul>
+<li>
+ <a href="#unit">Using unit tester</a>
+ with an example.
+ </li>
+<li>
+ <a href="#group">Grouping tests</a>
+ for testing with one click.
+ </li>
+<li>
+ <a href="#mock">Using mock objects</a>
+ to ease testing and gain tighter control.
+ </li>
+<li>
+ <a href="#web">Testing web pages</a>
+ at the browser level.
+ </li>
+</ul>
+<div class="content">
+
+
+ <p>
+ The following assumes that you are familiar with the concept
+ of unit testing as well as the PHP web development language.
+ It is a guide for the impatient new user of
+ <a href="https://sourceforge.net/project/showfiles.php?group_id=76550">SimpleTest</a>.
+ For fuller documentation, especially if you are new
+ to unit testing see the ongoing
+ <a href="unit_test_documentation.html">documentation</a>, and for
+ example test cases see the
+ <a href="http://www.lastcraft.com/first_test_tutorial.php">unit testing tutorial</a>.
+ </p>
+
+ <p><a class="target" name="unit"><h2>Using the tester quickly</h2></a></p>
+ <p>
+ Amongst software testing tools, a unit tester is the one
+ closest to the developer.
+ In the context of agile development the test code sits right
+ next to the source code as both are written simultaneously.
+ In this context SimpleTest aims to be a complete PHP developer
+ test solution and is called "Simple" because it
+ should be easy to use and extend.
+ It wasn't a good choice of name really.
+ It includes all of the typical functions you would expect from
+ <a href="http://www.junit.org/">JUnit</a> and the
+ <a href="http://sourceforge.net/projects/phpunit/">PHPUnit</a>
+ ports, and includes
+ <a href="http://www.mockobjects.com">mock objects</a>.
+ </p>
+ <p>
+ What makes this tool immediately useful to the PHP developer is the internal
+ web browser.
+ This allows tests that navigate web sites, fill in forms and test pages.
+ Being able to write these test in PHP means that it is easy to write
+ integrated tests.
+ An example might be confirming that a user was written to a database
+ after a signing up through the web site.
+ </p>
+ <p>
+ The quickest way to demonstrate SimpleTest is with an example.
+ </p>
+ <p>
+ Let us suppose we are testing a simple file logging class called
+ <span class="new_code">Log</span> in <em>classes/log.php</em>.
+ We start by creating a test script which we will call
+ <em>tests/log_test.php</em> and populate it as follows...
+<pre>
+&lt;?php
+<strong>require_once('simpletest/autorun.php');</strong>
+require_once('../classes/log.php');
+
+class TestOfLogging extends <strong>UnitTestCase</strong> {
+}
+?&gt;
+</pre>
+ Here the <em>simpletest</em> folder is either local or in the path.
+ You would have to edit these locations depending on where you
+ unpacked the toolset.
+ The "autorun.php" file does more than just include the
+ SimpleTest files, it also runs our test for us.
+ </p>
+ <p>
+ The <span class="new_code">TestOfLogging</span> is our first test case and it's
+ currently empty.
+ Each test case is a class that extends one of the SimpleTet base classes
+ and we can have as many of these in the file as we want.
+ </p>
+ <p>
+ With three lines of scaffolding, and our <span class="new_code">Log</span> class
+ include, we have a test suite.
+ No tests though.
+ </p>
+ <p>
+ For our first test, we'll assume that the <span class="new_code">Log</span> class
+ takes the file name to write to in the constructor, and we have
+ a temporary folder in which to place this file...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+require_once('../classes/log.php');
+
+class TestOfLogging extends UnitTestCase {
+ function <strong>testLogCreatesNewFileOnFirstMessage()</strong> {
+ @unlink('/temp/test.log');
+ $log = new Log('/temp/test.log');
+ <strong>$this-&gt;assertFalse(file_exists('/temp/test.log'));</strong>
+ $log-&gt;message('Should write this to a file');
+ <strong>$this-&gt;assertTrue(file_exists('/temp/test.log'));</strong>
+ }
+}
+?&gt;
+</pre>
+ When a test case runs, it will search for any method that
+ starts with the string "test"
+ and execute that method.
+ If the method starts "test", it's a test.
+ Note the very long name <span class="new_code">testLogCreatesNewFileOnFirstMessage()</span>.
+ This is considered good style and makes the test output more readable.
+ </p>
+ <p>
+ We would normally have more than one test method in a test case,
+ but that's for later.
+ </p>
+ <p>
+ Assertions within the test methods trigger messages to the
+ test framework which displays the result immediately.
+ This immediate response is important, not just in the event
+ of the code causing a crash, but also so that
+ <span class="new_code">print</span> statements can display
+ their debugging content right next to the assertion concerned.
+ </p>
+ <p>
+ To see these results we have to actually run the tests.
+ No other code is necessary - we can just open the page
+ with our browser.
+ </p>
+ <p>
+ On failure the display looks like this...
+ <div class="demo">
+ <h1>TestOfLogging</h1>
+ <span class="fail">Fail</span>: testLogCreatesNewFileOnFirstMessage-&gt;True assertion failed.<br>
+ <div style="padding: 8px; margin-top: 1em; background-color: red; color: white;">1/1 test cases complete.
+ <strong>1</strong> passes and <strong>1</strong> fails.</div>
+ </div>
+ ...and if it passes like this...
+ <div class="demo">
+ <h1>TestOfLogging</h1>
+ <div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete.
+ <strong>2</strong> passes and <strong>0</strong> fails.</div>
+ </div>
+ And if you get this...
+ <div class="demo">
+ <b>Fatal error</b>: Failed opening required '../classes/log.php' (include_path='') in <b>/home/marcus/projects/lastcraft/tutorial_tests/Log/tests/log_test.php</b> on line <b>7</b>
+ </div>
+ it means you're missing the <em>classes/Log.php</em> file that could look like...
+<pre>
+&lt;?php<strong>
+class Log {
+ function Log($file_path) {
+ }
+
+ function message() {
+ }
+}</strong>
+?&gt;
+</pre>
+ It's fun to write the code after the test.
+ More than fun even -
+ this system is called "Test Driven Development".
+ </p>
+ <p>
+ For more information about <span class="new_code">UnitTestCase</span>, see
+ the <a href="unit_test_documentation.html">unit test documentation</a>.
+ </p>
+
+ <p><a class="target" name="group"><h2>Building test suites</h2></a></p>
+ <p>
+ It is unlikely in a real application that we will only ever run
+ one test case.
+ This means that we need a way of grouping cases into a test
+ script that can, if need be, run every test for the application.
+ </p>
+ <p>
+ Our first step is to create a new file called <em>tests/all_tests.php</em>
+ and insert the following code...
+<pre>
+&lt;?php
+<strong>require_once('simpletest/autorun.php');</strong>
+
+class AllTests extends <strong>TestSuite</strong> {
+ function AllTests() {
+ $this-&gt;TestSuite(<strong>'All tests'</strong>);
+ <strong>$this-&gt;addFile('log_test.php');</strong>
+ }
+}
+?&gt;
+</pre>
+ The "autorun" include allows our upcoming test suite
+ to be run just by invoking this script.
+ </p>
+ <p>
+ The <span class="new_code">TestSuite</span> subclass must chain it's constructor.
+ This limitation will be removed in future versions.
+ </p>
+ <p>
+ The method <span class="new_code">TestSuite::addFile()</span>
+ will include the test case file and read any new classes
+ that are descended from <span class="new_code">SimpleTestCase</span>.
+ <span class="new_code">UnitTestCase</span> is just one example of a class derived from
+ <span class="new_code">SimpleTestCase</span>, and you can create your own.
+ <span class="new_code">TestSuite::addFile()</span> can include other test suites.
+ </p>
+ <p>
+ The class will not be instantiated yet.
+ When the test suite runs it will construct each instance once
+ it reaches that test, then destroy it straight after.
+ This means that the constructor is run just before each run
+ of that test case, and the destructor is run before the next test case starts.
+ </p>
+ <p>
+ It is common to group test case code into superclasses which are not
+ supposed to run, but become the base classes of other tests.
+ For "autorun" to work properly the test case file should not blindly run
+ any other test case extensions that do not actually run tests.
+ This could result in extra test cases being counted during the test
+ run.
+ Hardly a major problem, but to avoid this inconvenience simply mark your
+ base class as <span class="new_code">abstract</span>.
+ SimpleTest won't run abstract classes.
+ If you are still using PHP4, then
+ a <span class="new_code">SimpleTestOptions::ignore()</span> directive
+ somewhere in the test case file will have the same effect.
+ </p>
+ <p>
+ Also, the test case file should not have been included
+ elsewhere or no cases will be added to this group test.
+ This would be a more serious error as if the test case classes are
+ already loaded by PHP the <span class="new_code">TestSuite::addFile()</span>
+ method will not detect them.
+ </p>
+ <p>
+ To display the results it is necessary only to invoke
+ <em>tests/all_tests.php</em> from the web server or the command line.
+ </p>
+ <p>
+ For more information about building test suites,
+ see the <a href="group_test_documentation.html">test suite documentation</a>.
+ </p>
+
+ <p><a class="target" name="mock"><h2>Using mock objects</h2></a></p>
+ <p>
+ Let's move further into the future and do something really complicated.
+ </p>
+ <p>
+ Assume that our logging class is tested and completed.
+ Assume also that we are testing another class that is
+ required to write log messages, say a
+ <span class="new_code">SessionPool</span>.
+ We want to test a method that will probably end up looking
+ like this...
+<pre><strong>
+class SessionPool {
+ ...
+ function logIn($username) {
+ ...
+ $this-&gt;_log-&gt;message("User $username logged in.");
+ ...
+ }
+ ...
+}
+</strong>
+</pre>
+ In the spirit of reuse, we are using our
+ <span class="new_code">Log</span> class.
+ A conventional test case might look like this...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+require_once('../classes/log.php');
+<strong>require_once('../classes/session_pool.php');</strong>
+
+class <strong>TestOfSessionLogging</strong> extends UnitTestCase {
+
+ function setUp() {
+ <strong>@unlink('/temp/test.log');</strong>
+ }
+
+ function tearDown() {
+ <strong>@unlink('/temp/test.log');</strong>
+ }
+
+ function testLoggingInIsLogged() {
+ <strong>$log = new Log('/temp/test.log');
+ $session_pool = &amp;new SessionPool($log);
+ $session_pool-&gt;logIn('fred');</strong>
+ $messages = file('/temp/test.log');
+ $this-&gt;assertEqual($messages[0], "User fred logged in.<strong>\n</strong>");
+ }
+}
+?&gt;
+</pre>
+ We'll explain the <span class="new_code">setUp()</span> and <span class="new_code">tearDown()</span>
+ methods later.
+ </p>
+ <p>
+ This test case design is not all bad, but it could be improved.
+ We are spending time fiddling with log files which are
+ not part of our test.
+ We have created close ties with the <span class="new_code">Log</span> class and
+ this test.
+ What if we don't use files any more, but use ths
+ <em>syslog</em> library instead?
+ It means that our <span class="new_code">TestOfSessionLogging</span> test will
+ fail, even thouh it's not testing Logging.
+ </p>
+ <p>
+ It's fragile in smaller ways too.
+ Did you notice the extra carriage return in the message?
+ Was that added by the logger?
+ What if it also added a time stamp or other data?
+ </p>
+ <p>
+ The only part that we really want to test is that a particular
+ message was sent to the logger.
+ We can reduce coupling if we pass in a fake logging class
+ that simply records the message calls for testing, but
+ takes no action.
+ It would have to look exactly like our original though.
+ </p>
+ <p>
+ If the fake object doesn't write to a file then we save on deleting
+ the file before and after each test. We could save even more
+ test code if the fake object would kindly run the assertion for us.
+ <p>
+ </p>
+ Too good to be true?
+ We can create such an object easily...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+require_once('../classes/log.php');
+require_once('../classes/session_pool.php');
+
+<strong>Mock::generate('Log');</strong>
+
+class TestOfSessionLogging extends UnitTestCase {
+
+ function testLoggingInIsLogged() {<strong>
+ $log = &amp;new MockLog();
+ $log-&gt;expectOnce('message', array('User fred logged in.'));</strong>
+ $session_pool = &amp;new SessionPool(<strong>$log</strong>);
+ $session_pool-&gt;logIn('fred');
+ }
+}
+?&gt;
+</pre>
+ The <span class="new_code">Mock::generate()</span> call code generated a new class
+ called <span class="new_code">MockLog</span>.
+ This looks like an identical clone, except that we can wire test code
+ to it.
+ That's what <span class="new_code">expectOnce()</span> does.
+ It says that if <span class="new_code">message()</span> is ever called on me, it had
+ better be with the parameter "User fred logged in.".
+ </p>
+ <p>
+ The test will be triggered when the call to
+ <span class="new_code">message()</span> is invoked on the
+ <span class="new_code">MockLog</span> object by <span class="new_code">SessionPool::logIn()</span> code.
+ The mock call will trigger a parameter comparison and then send the
+ resulting pass or fail event to the test display.
+ Wildcards can be included here too, so you don't have to test every parameter of
+ a call when you only want to test one.
+ </p>
+ <p>
+ If the mock reaches the end of the test case without the
+ method being called, the <span class="new_code">expectOnce()</span>
+ expectation will trigger a test failure.
+ In other words the mocks can detect the absence of
+ behaviour as well as the presence.
+ </p>
+ <p>
+ The mock objects in the SimpleTest suite can have arbitrary
+ return values set, sequences of returns, return values
+ selected according to the incoming arguments, sequences of
+ parameter expectations and limits on the number of times
+ a method is to be invoked.
+ </p>
+ <p>
+ For more information about mocking and stubbing, see the
+ <a href="mock_objects_documentation.html">mock objects documentation</a>.
+ </p>
+
+ <p><a class="target" name="web"><h2>Web page testing</h2></a></p>
+ <p>
+ One of the requirements of web sites is that they produce web
+ pages.
+ If you are building a project top-down and you want to fully
+ integrate testing along the way then you will want a way of
+ automatically navigating a site and examining output for
+ correctness.
+ This is the job of a web tester.
+ </p>
+ <p>
+ The web testing in SimpleTest is fairly primitive, as there is
+ no JavaScript.
+ Most other browser operations are simulated.
+ </p>
+ <p>
+ To give an idea here is a trivial example where a home
+ page is fetched, from which we navigate to an "about"
+ page and then test some client determined content.
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+<strong>require_once('simpletest/web_tester.php');</strong>
+
+class TestOfAbout extends <strong>WebTestCase</strong> {
+ function testOurAboutPageGivesFreeReignToOurEgo() {
+ <strong>$this-&gt;get('http://test-server/index.php');
+ $this-&gt;click('About');
+ $this-&gt;assertTitle('About why we are so great');
+ $this-&gt;assertText('We are really great');</strong>
+ }
+}
+?&gt;
+</pre>
+ With this code as an acceptance test, you can ensure that
+ the content always meets the specifications of both the
+ developers, and the other project stakeholders.
+ </p>
+ <p>
+ You can navigate forms too...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+require_once('simpletest/web_tester.php');
+
+class TestOfRankings extends WebTestCase {
+ function testWeAreTopOfGoogle() {
+ $this-&gt;get('http://google.com/');
+ $this-&gt;setField('q', 'simpletest');
+ $this-&gt;click("I'm Feeling Lucky");
+ $this-&gt;assertTitle('SimpleTest - Unit Testing for PHP');
+ }
+}
+?&gt;
+</pre>
+ ...although this could violate Google's(tm) terms and conditions.
+ </p>
+ <p>
+ For more information about web testing, see the
+ <a href="browser_documentation.html">scriptable
+ browser documentation</a> and the
+ <a href="web_tester_documentation.html">WebTestCase</a>.
+ </p>
+ <p>
+ <a href="http://sourceforge.net/projects/simpletest/"><img src="http://sourceforge.net/sflogo.php?group_id=76550&amp;type=5" width="210" height="62" border="0" alt="SourceForge.net Logo"></a>
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ <a href="https://sourceforge.net/project/showfiles.php?group_id=76550&amp;release_id=153280">Download PHP Simple Test</a>
+ from <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ The <a href="http://simpletest.org/api/">developer's API for SimpleTest</a>
+ gives full detail on the classes and assertions available.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<span class="chosen">SimpleTest</span>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/en/mock_objects_documentation.html b/vendors/simpletest/docs/en/mock_objects_documentation.html
new file mode 100644
index 000000000..c3d002277
--- /dev/null
+++ b/vendors/simpletest/docs/en/mock_objects_documentation.html
@@ -0,0 +1,757 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>SimpleTest for PHP mock objects documentation</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <span class="chosen">Mock objects</span>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Mock objects documentation</h1>
+ This page...
+ <ul>
+<li>
+ <a href="#what">What are mock objects?</a>
+ </li>
+<li>
+ <a href="#creation">Creating mock objects</a>.
+ </li>
+<li>
+ <a href="#stub">Mocks as actors</a> or stubs.
+ </li>
+<li>
+ <a href="#expectations">Mocks as critics</a> with expectations.
+ </li>
+<li>
+ <a href="#approaches">Other approaches</a> including mock libraries.
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="what"><h2>What are mock objects?</h2></a></p>
+ <p>
+ Mock objects have two roles during a test case: actor and critic.
+ </p>
+ <p>
+ The actor behaviour is to simulate objects that are difficult to
+ set up or time consuming to set up for a test.
+ The classic example is a database connection.
+ Setting up a test database at the start of each test would slow
+ testing to a crawl and would require the installation of the
+ database engine and test data on the test machine.
+ If we can simulate the connection and return data of our
+ choosing we not only win on the pragmatics of testing, but can
+ also feed our code spurious data to see how it responds.
+ We can simulate databases being down or other extremes
+ without having to create a broken database for real.
+ In other words, we get greater control of the test environment.
+ </p>
+ <p>
+ If mock objects only behaved as actors they would simply be
+ known as server stubs.
+ This was originally a pattern named by Robert Binder (Testing
+ object-oriented systems: models, patterns, and tools,
+ Addison-Wesley) in 1999.
+ </p>
+ <p>
+ A server stub is a simulation of an object or component.
+ It should exactly replace a component in a system for test
+ or prototyping purposes, but remain lightweight.
+ This allows tests to run more quickly, or if the simulated
+ class has not been written, to run at all.
+ </p>
+ <p>
+ However, the mock objects not only play a part (by supplying chosen
+ return values on demand) they are also sensitive to the
+ messages sent to them (via expectations).
+ By setting expected parameters for a method call they act
+ as a guard that the calls upon them are made correctly.
+ If expectations are not met they save us the effort of
+ writing a failed test assertion by performing that duty on our
+ behalf.
+ </p>
+ <p>
+ In the case of an imaginary database connection they can
+ test that the query, say SQL, was correctly formed by
+ the object that is using the connection.
+ Set them up with fairly tight expectations and you will
+ hardly need manual assertions at all.
+ </p>
+
+ <p><a class="target" name="creation"><h2>Creating mock objects</h2></a></p>
+ <p>
+ In the same way that we create server stubs, all we need is an
+ existing class, say a database connection that looks like this...
+<pre>
+<strong>class DatabaseConnection {
+ function DatabaseConnection() {
+ }
+
+ function query() {
+ }
+
+ function selectQuery() {
+ }
+}</strong>
+</pre>
+ The class does not need to have been implemented yet.
+ To create a mock version of the class we need to include the
+ mock object library and run the generator...
+<pre>
+<strong>require_once('simpletest/unit_tester.php');
+require_once('simpletest/mock_objects.php');
+require_once('database_connection.php');
+
+Mock::generate('DatabaseConnection');</strong>
+</pre>
+ This generates a clone class called
+ <span class="new_code">MockDatabaseConnection</span>.
+ We can now create instances of the new class within
+ our test case...
+<pre>
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/mock_objects.php');
+require_once('database_connection.php');
+
+Mock::generate('DatabaseConnection');
+<strong>
+class MyTestCase extends UnitTestCase {
+
+ function testSomething() {
+ $connection = &amp;new MockDatabaseConnection();
+ }
+}</strong>
+</pre>
+ Unlike the generated stubs the mock constructor needs a reference
+ to the test case so that it can dispatch passes and failures while
+ checking its expectations.
+ This means that mock objects can only be used within test cases.
+ Despite this their extra power means that stubs are hardly ever used
+ if mocks are available.
+ </p>
+ <p>
+ <a class="target" name="stub"><h2>Mocks as actors</h2></a>
+ </p>
+ <p>
+ The mock version of a class has all the methods of the original,
+ so that operations like
+ <span class="new_code">$connection-&gt;query()</span> are still
+ legal.
+ The return value will be <span class="new_code">null</span>,
+ but we can change that with...
+<pre>
+<strong>$connection-&gt;setReturnValue('query', 37)</strong>
+</pre>
+ Now every time we call
+ <span class="new_code">$connection-&gt;query()</span> we get
+ the result of 37.
+ We can set the return value to anything, say a hash of
+ imaginary database results or a list of persistent objects.
+ Parameters are irrelevant here, we always get the same
+ values back each time once they have been set up this way.
+ That may not sound like a convincing replica of a
+ database connection, but for the half a dozen lines of
+ a test method it is usually all you need.
+ </p>
+ <p>
+ We can also add extra methods to the mock when generating it
+ and choose our own class name...
+<pre>
+<strong>Mock::generate('DatabaseConnection', 'MyMockDatabaseConnection', array('setOptions'));</strong>
+</pre>
+ Here the mock will behave as if the <span class="new_code">setOptions()</span>
+ existed in the original class.
+ This is handy if a class has used the PHP <span class="new_code">overload()</span>
+ mechanism to add dynamic methods.
+ You can create a special mock to simulate this situation.
+ </p>
+ <p>
+ Things aren't always that simple though.
+ One common problem is iterators, where constantly returning
+ the same value could cause an endless loop in the object
+ being tested.
+ For these we need to set up sequences of values.
+ Let's say we have a simple iterator that looks like this...
+<pre>
+class Iterator {
+ function Iterator() {
+ }
+
+ function next() {
+ }
+}
+</pre>
+ This is about the simplest iterator you could have.
+ Assuming that this iterator only returns text until it
+ reaches the end, when it returns false, we can simulate it
+ with...
+<pre>
+Mock::generate('Iterator');
+
+class IteratorTest extends UnitTestCase() {
+
+ function testASequence() {<strong>
+ $iterator = &amp;new MockIterator();
+ $iterator-&gt;setReturnValue('next', false);
+ $iterator-&gt;setReturnValueAt(0, 'next', 'First string');
+ $iterator-&gt;setReturnValueAt(1, 'next', 'Second string');</strong>
+ ...
+ }
+}
+</pre>
+ When <span class="new_code">next()</span> is called on the
+ mock iterator it will first return "First string",
+ on the second call "Second string" will be returned
+ and on any other call <span class="new_code">false</span> will
+ be returned.
+ The sequenced return values take precedence over the constant
+ return value.
+ The constant one is a kind of default if you like.
+ </p>
+ <p>
+ Another tricky situation is an overloaded
+ <span class="new_code">get()</span> operation.
+ An example of this is an information holder with name/value pairs.
+ Say we have a configuration class like...
+<pre>
+class Configuration {
+ function Configuration() {
+ }
+
+ function getValue($key) {
+ }
+}
+</pre>
+ This is a classic situation for using mock objects as
+ actual configuration will vary from machine to machine,
+ hardly helping the reliability of our tests if we use it
+ directly.
+ The problem though is that all the data comes through the
+ <span class="new_code">getValue()</span> method and yet
+ we want different results for different keys.
+ Luckily the mocks have a filter system...
+<pre>
+<strong>$config = &amp;new MockConfiguration();
+$config-&gt;setReturnValue('getValue', 'primary', array('db_host'));
+$config-&gt;setReturnValue('getValue', 'admin', array('db_user'));
+$config-&gt;setReturnValue('getValue', 'secret', array('db_password'));</strong>
+</pre>
+ The extra parameter is a list of arguments to attempt
+ to match.
+ In this case we are trying to match only one argument which
+ is the look up key.
+ Now when the mock object has the
+ <span class="new_code">getValue()</span> method invoked
+ like this...
+<pre>
+$config-&gt;getValue('db_user')
+</pre>
+ ...it will return "admin".
+ It finds this by attempting to match the calling arguments
+ to its list of returns one after another until
+ a complete match is found.
+ </p>
+ <p>
+ You can set a default argument argument like so...
+<pre><strong>
+$config-&gt;setReturnValue('getValue', false, array('*'));</strong>
+</pre>
+ This is not the same as setting the return value without
+ any argument requirements like this...
+<pre><strong>
+$config-&gt;setReturnValue('getValue', false);</strong>
+</pre>
+ In the first case it will accept any single argument,
+ but exactly one is required.
+ In the second case any number of arguments will do and
+ it acts as a catchall after all other matches.
+ Note that if we add further single parameter options after
+ the wildcard in the first case, they will be ignored as the wildcard
+ will match first.
+ With complex parameter lists the ordering could be important
+ or else desired matches could be masked by earlier wildcard
+ ones.
+ Declare the most specific matches first if you are not sure.
+ </p>
+ <p>
+ There are times when you want a specific object to be
+ dished out by the mock rather than a copy.
+ The PHP4 copy semantics force us to use a different method
+ for this.
+ You might be simulating a container for example...
+<pre>
+class Thing {
+}
+
+class Vector {
+ function Vector() {
+ }
+
+ function get($index) {
+ }
+}
+</pre>
+ In this case you can set a reference into the mock's
+ return list...
+<pre>
+$thing = &amp;new Thing();<strong>
+$vector = &amp;new MockVector();
+$vector-&gt;setReturnReference('get', $thing, array(12));</strong>
+</pre>
+ With this arrangement you know that every time
+ <span class="new_code">$vector-&gt;get(12)</span> is
+ called it will return the same
+ <span class="new_code">$thing</span> each time.
+ This is compatible with PHP5 as well.
+ </p>
+ <p>
+ These three factors, timing, parameters and whether to copy,
+ can be combined orthogonally.
+ For example...
+<pre>
+$complex = &amp;new MockComplexThing();
+$stuff = &amp;new Stuff();<strong>
+$complex-&gt;setReturnReferenceAt(3, 'get', $stuff, array('*', 1));</strong>
+</pre>
+ This will return the <span class="new_code">$stuff</span> only on the third
+ call and only if two parameters were set the second of
+ which must be the integer 1.
+ That should cover most simple prototyping situations.
+ </p>
+ <p>
+ A final tricky case is one object creating another, known
+ as a factory pattern.
+ Suppose that on a successful query to our imaginary
+ database, a result set is returned as an iterator with
+ each call to <span class="new_code">next()</span> giving
+ one row until false.
+ This sounds like a simulation nightmare, but in fact it can all
+ be mocked using the mechanics above.
+ </p>
+ <p>
+ Here's how...
+<pre>
+Mock::generate('DatabaseConnection');
+Mock::generate('ResultIterator');
+
+class DatabaseTest extends UnitTestCase {
+
+ function testUserFinder() {<strong>
+ $result = &amp;new MockResultIterator();
+ $result-&gt;setReturnValue('next', false);
+ $result-&gt;setReturnValueAt(0, 'next', array(1, 'tom'));
+ $result-&gt;setReturnValueAt(1, 'next', array(3, 'dick'));
+ $result-&gt;setReturnValueAt(2, 'next', array(6, 'harry'));
+
+ $connection = &amp;new MockDatabaseConnection();
+ $connection-&gt;setReturnValue('query', false);
+ $connection-&gt;setReturnReference(
+ 'query',
+ $result,
+ array('select id, name from users'));</strong>
+
+ $finder = &amp;new UserFinder($connection);
+ $this-&gt;assertIdentical(
+ $finder-&gt;findNames(),
+ array('tom', 'dick', 'harry'));
+ }
+}
+</pre>
+ Now only if our
+ <span class="new_code">$connection</span> is called with the correct
+ <span class="new_code">query()</span> will the
+ <span class="new_code">$result</span> be returned that is
+ itself exhausted after the third call to <span class="new_code">next()</span>.
+ This should be enough
+ information for our <span class="new_code">UserFinder</span> class,
+ the class actually
+ being tested here, to come up with goods.
+ A very precise test and not a real database in sight.
+ </p>
+
+ <p><a class="target" name="expectations"><h2>Mocks as critics</h2></a></p>
+ <p>
+ Although the server stubs approach insulates your tests from
+ real world disruption, it is only half the benefit.
+ You can have the class under test receiving the required
+ messages, but is your new class sending correct ones?
+ Testing this can get messy without a mock objects library.
+ </p>
+ <p>
+ By way of example, suppose we have a
+ <span class="new_code">SessionPool</span> class that we
+ want to add logging to.
+ Rather than grow the original class into something more
+ complicated, we want to add this behaviour with a decorator (GOF).
+ The <span class="new_code">SessionPool</span> code currently looks
+ like this...
+<pre>
+<strong>class SessionPool {
+ function SessionPool() {
+ ...
+ }
+
+ function &amp;findSession($cookie) {
+ ...
+ }
+ ...
+}
+
+class Session {
+ ...
+}</strong>
+</pre>
+ While our logging code looks like this...
+<pre>
+<strong>
+class Log {
+ function Log() {
+ ...
+ }
+
+ function message() {
+ ...
+ }
+}
+
+class LoggingSessionPool {
+ function LoggingSessionPool(&amp;$session_pool, &amp;$log) {
+ ...
+ }
+
+ function &amp;findSession($cookie) {
+ ...
+ }
+ ...
+}</strong>
+</pre>
+ Out of all of this, the only class we want to test here
+ is the <span class="new_code">LoggingSessionPool</span>.
+ In particular we would like to check that the
+ <span class="new_code">findSession()</span> method is
+ called with the correct session ID in the cookie and that
+ it sent the message "Starting session $cookie"
+ to the logger.
+ </p>
+ <p>
+ Despite the fact that we are testing only a few lines of
+ production code, here is what we would have to do in a
+ conventional test case:
+ <ol>
+ <li>Create a log object.</li>
+ <li>Set a directory to place the log file.</li>
+ <li>Set the directory permissions so we can write the log.</li>
+ <li>Create a <span class="new_code">SessionPool</span> object.</li>
+ <li>Hand start a session, which probably does lot's of things.</li>
+ <li>Invoke <span class="new_code">findSession()</span>.</li>
+ <li>Read the new Session ID (hope there is an accessor!).</li>
+ <li>Raise a test assertion to confirm that the ID matches the cookie.</li>
+ <li>Read the last line of the log file.</li>
+ <li>Pattern match out the extra logging timestamps, etc.</li>
+ <li>Assert that the session message is contained in the text.</li>
+ </ol>
+ It is hardly surprising that developers hate writing tests
+ when they are this much drudgery.
+ To make things worse, every time the logging format changes or
+ the method of creating new sessions changes, we have to rewrite
+ parts of this test even though this test does not officially
+ test those parts of the system.
+ We are creating headaches for the writers of these other classes.
+ </p>
+ <p>
+ Instead, here is the complete test method using mock object magic...
+<pre>
+Mock::generate('Session');
+Mock::generate('SessionPool');
+Mock::generate('Log');
+
+class LoggingSessionPoolTest extends UnitTestCase {
+ ...
+ function testFindSessionLogging() {<strong>
+ $session = &amp;new MockSession();
+ $pool = &amp;new MockSessionPool();
+ $pool-&gt;setReturnReference('findSession', $session);
+ $pool-&gt;expectOnce('findSession', array('abc'));
+
+ $log = &amp;new MockLog();
+ $log-&gt;expectOnce('message', array('Starting session abc'));
+
+ $logging_pool = &amp;new LoggingSessionPool($pool, $log);
+ $this-&gt;assertReference($logging_pool-&gt;findSession('abc'), $session);</strong>
+ }
+}
+</pre>
+ We start by creating a dummy session.
+ We don't have to be too fussy about this as the check
+ for which session we want is done elsewhere.
+ We only need to check that it was the same one that came
+ from the session pool.
+ </p>
+ <p>
+ <span class="new_code">findSession()</span> is a factory
+ method the simulation of which is described <a href="#stub">above</a>.
+ The point of departure comes with the first
+ <span class="new_code">expectOnce()</span> call.
+ This line states that whenever
+ <span class="new_code">findSession()</span> is invoked on the
+ mock, it will test the incoming arguments.
+ If it receives the single argument of a string "abc"
+ then a test pass is sent to the unit tester, otherwise a fail is
+ generated.
+ This was the part where we checked that the right session was asked for.
+ The argument list follows the same format as the one for setting
+ return values.
+ You can have wildcards and sequences and the order of
+ evaluation is the same.
+ </p>
+ <p>
+ We use the same pattern to set up the mock logger.
+ We tell it that it should have
+ <span class="new_code">message()</span> invoked
+ once only with the argument "Starting session abc".
+ By testing the calling arguments, rather than the logger output,
+ we insulate the test from any display changes in the logger.
+ </p>
+ <p>
+ We start to run our tests when we create the new
+ <span class="new_code">LoggingSessionPool</span> and feed
+ it our preset mock objects.
+ Everything is now under our control.
+ </p>
+ <p>
+ This is still quite a bit of test code, but the code is very
+ strict.
+ If it still seems rather daunting there is a lot less of it
+ than if we tried this without mocks and this particular test,
+ interactions rather than output, is always more work to set
+ up.
+ More often you will be testing more complex situations without
+ needing this level or precision.
+ Also some of this can be refactored into a test case
+ <span class="new_code">setUp()</span> method.
+ </p>
+ <p>
+ Here is the full list of expectations you can set on a mock object
+ in <a href="http://www.lastcraft.com/simple_test.php">SimpleTest</a>...
+ <table>
+<thead>
+ <tr>
+<th>Expectation</th>
+<th>Needs <span class="new_code">tally()</span>
+</th>
+</tr>
+ </thead>
+<tbody>
+<tr>
+ <td><span class="new_code">expect($method, $args)</span></td>
+ <td style="text-align: center">No</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectAt($timing, $method, $args)</span></td>
+ <td style="text-align: center">No</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectCallCount($method, $count)</span></td>
+ <td style="text-align: center">Yes</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectMaximumCallCount($method, $count)</span></td>
+ <td style="text-align: center">No</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectMinimumCallCount($method, $count)</span></td>
+ <td style="text-align: center">Yes</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectNever($method)</span></td>
+ <td style="text-align: center">No</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectOnce($method, $args)</span></td>
+ <td style="text-align: center">Yes</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectAtLeastOnce($method, $args)</span></td>
+ <td style="text-align: center">Yes</td>
+ </tr>
+ </tbody>
+</table>
+ Where the parameters are...
+ <dl>
+ <dt class="new_code">$method</dt>
+ <dd>The method name, as a string, to apply the condition to.</dd>
+ <dt class="new_code">$args</dt>
+ <dd>
+ The arguments as a list. Wildcards can be included in the same
+ manner as for <span class="new_code">setReturn()</span>.
+ This argument is optional for <span class="new_code">expectOnce()</span>
+ and <span class="new_code">expectAtLeastOnce()</span>.
+ </dd>
+ <dt class="new_code">$timing</dt>
+ <dd>
+ The only point in time to test the condition.
+ The first call starts at zero.
+ </dd>
+ <dt class="new_code">$count</dt>
+ <dd>The number of calls expected.</dd>
+ </dl>
+ The method <span class="new_code">expectMaximumCallCount()</span>
+ is slightly different in that it will only ever generate a failure.
+ It is silent if the limit is never reached.
+ </p>
+ <p>
+ Also if you have juste one call in your test, make sure you're using
+ <span class="new_code">expectOnce</span>.<br>
+ Using <span class="new_code">$mocked-&gt;expectAt(0, 'method', 'args);</span>
+ on its own will not be catched :
+ checking the arguments and the overall call count
+ are currently independant.
+ </p>
+ <p>
+ Like the assertions within test cases, all of the expectations
+ can take a message override as an extra parameter.
+ Also the original failure message can be embedded in the output
+ as "%s".
+ </p>
+
+ <p><a class="target" name="approaches"><h2>Other approaches</h2></a></p>
+ <p>
+ There are three approaches to creating mocks including the one
+ that SimpleTest employs.
+ Coding them by hand using a base class, generating them to
+ a file and dynamically generating them on the fly.
+ </p>
+ <p>
+ Mock objects generated with <a href="simple_test.html">SimpleTest</a>
+ are dynamic.
+ They are created at run time in memory, using
+ <span class="new_code">eval()</span>, rather than written
+ out to a file.
+ This makes the mocks easy to create, a one liner,
+ especially compared with hand
+ crafting them in a parallel class hierarchy.
+ The problem is that the behaviour is usually set up in the tests
+ themselves.
+ If the original objects change the mock versions
+ that the tests rely on can get out of sync.
+ This can happen with the parallel hierarchy approach as well,
+ but is far more quickly detected.
+ </p>
+ <p>
+ The solution, of course, is to add some real integration
+ tests.
+ You don't need very many and the convenience gained
+ from the mocks more than outweighs the small amount of
+ extra testing.
+ You cannot trust code that was only tested with mocks.
+ </p>
+ <p>
+ If you are still determined to build static libraries of mocks
+ because you want to simulate very specific behaviour, you can
+ achieve the same effect using the SimpleTest class generator.
+ In your library file, say <em>mocks/connection.php</em> for a
+ database connection, create a mock and inherit to override
+ special methods or add presets...
+<pre>
+&lt;?php
+ require_once('simpletest/mock_objects.php');
+ require_once('../classes/connection.php');
+<strong>
+ Mock::generate('Connection', 'BasicMockConnection');
+ class MockConnection extends BasicMockConnection {
+ function MockConnection() {
+ $this-&gt;BasicMockConnection();
+ $this-&gt;setReturn('query', false);
+ }
+ }</strong>
+?&gt;
+</pre>
+ The generate call tells the class generator to create
+ a class called <span class="new_code">BasicMockConnection</span>
+ rather than the usual <span class="new_code">MockConnection</span>.
+ We then inherit from this to get our version of
+ <span class="new_code">MockConnection</span>.
+ By intercepting in this way we can add behaviour, here setting
+ the default value of <span class="new_code">query()</span> to be false.
+ By using the default name we make sure that the mock class
+ generator will not recreate a different one when invoked elsewhere in the
+ tests.
+ It never creates a class if it already exists.
+ As long as the above file is included first then all tests
+ that generated <span class="new_code">MockConnection</span> should
+ now be using our one instead.
+ If we don't get the order right and the mock library
+ creates one first then the class creation will simply fail.
+ </p>
+ <p>
+ Use this trick if you find you have a lot of common mock behaviour
+ or you are getting frequent integration problems at later
+ stages of testing.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ The original
+ <a href="http://www.mockobjects.com/">Mock objects</a> paper.
+ </li>
+<li>
+ SimpleTest project page on <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ SimpleTest home page on <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <span class="chosen">Mock objects</span>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/en/overview.html b/vendors/simpletest/docs/en/overview.html
new file mode 100644
index 000000000..5bed89e51
--- /dev/null
+++ b/vendors/simpletest/docs/en/overview.html
@@ -0,0 +1,486 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>
+ Overview and feature list for the SimpleTest PHP unit tester and web tester
+ </title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <span class="chosen">Overview</span>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Overview of SimpleTest</h1>
+ This page...
+ <ul>
+<li>
+ <a href="#summary">Quick summary</a>
+ of the SimpleTest tool for PHP.
+ </li>
+<li>
+ <a href="#features">List of features</a>,
+ both current ones and those planned.
+ </li>
+<li>
+ There are plenty of <a href="#resources">unit testing resources</a>
+ on the web.
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="summary"><h2>What is SimpleTest?</h2></a></p>
+ <p>
+ The heart of SimpleTest is a testing framework built around
+ test case classes.
+ These are written as extensions of base test case classes,
+ each extended with methods that actually contain test code.
+ Top level test scripts then invoke the <span class="new_code">run()</span>
+ methods on every one of these test cases in order.
+ Each test method is written to invoke various assertions that
+ the developer expects to be true such as
+ <span class="new_code">assertEqual()</span>.
+ If the expectation is correct, then a successful result is dispatched to the
+ observing test reporter, but any failure triggers an alert
+ and a description of the mismatch.
+ </p>
+ <p>
+ A <a href="unit_test_documentation.html">test case</a> looks like this...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+
+class <strong>MyTestCase</strong> extends UnitTestCase {
+ <strong>
+ function testCreatedLogFile() {
+ $log = &amp;new Log('my.log');
+ $log-&gt;message('Hello');
+ $this-&gt;assertTrue(file_exists('my.log'));
+ }</strong>
+}
+?&gt;
+</pre>
+ </p>
+ <p>
+ These tools are designed for the developer.
+ Tests are written in the PHP language itself more or less
+ as the application itself is built.
+ The advantage of using PHP itself as the testing language is that
+ there are no new languages to learn, testing can start straight away,
+ and the developer can test any part of the code.
+ Basically, all parts that can be accessed by the application code can also be
+ accessed by the test code, if they are in the same programming language.
+ </p>
+ <p>
+ The simplest type of test case is the
+ <a href="unit_tester_documentation.html">UnitTestCase</a>.
+ This class of test case includes standard tests for equality,
+ references and pattern matching.
+ All these test the typical expectations of what you would
+ expect the result of a function or method to be.
+ This is by far the most common type of test in the daily
+ routine of development, making up about 95% of test cases.
+ </p>
+ <p>
+ The top level task of a web application though is not to
+ produce correct output from its methods and objects, but
+ to generate web pages.
+ The <a href="web_tester_documentation.html">WebTestCase</a> class tests web
+ pages.
+ It simulates a web browser requesting a page, complete with
+ cookies, proxies, secure connections, authentication, forms, frames and most
+ navigation elements.
+ With this type of test case, the developer can assert that
+ information is present in the page and that forms and
+ sessions are handled correctly.
+ </p>
+ <p>
+ A <a href="web_tester_documentation.html">WebTestCase</a> looks like this...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+require_once('simpletest/web_tester.php');
+
+class <strong>MySiteTest</strong> extends WebTestCase {
+ <strong>
+ function testHomePage() {
+ $this-&gt;get('http://www.my-site.com/index.php');
+ $this-&gt;assertTitle('My Home Page');
+ $this-&gt;clickLink('Contact');
+ $this-&gt;assertTitle('Contact me');
+ $this-&gt;assertPattern('/Email me at/');
+ }</strong>
+}
+?&gt;
+</pre>
+ </p>
+
+ <p><a class="target" name="features"><h2>Feature list</h2></a></p>
+ <p>
+ The following is a very rough outline of past and future features
+ and their expected point of release.
+ I am afraid it is liable to change without warning, as meeting the
+ milestones rather depends on time available.
+ Green stuff has been coded, but not necessarily released yet.
+ If you have a pressing need for a green but unreleased feature
+ then you should check-out the code from Sourceforge SVN directly.
+ <table>
+<thead>
+ <tr>
+<th>Feature</th>
+<th>Description</th>
+<th>Release</th>
+</tr>
+ </thead>
+<tbody>
+<tr>
+ <td>Unit test case</td>
+ <td>Core test case class and assertions</td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Html display</td>
+ <td>Simplest possible display</td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Autoloading of test cases</td>
+ <td>
+ Reading a file with test cases and loading them into a
+ group test automatically
+ </td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Mock objects</td>
+ <td>
+ Objects capable of simulating other objects removing
+ test dependencies
+ </td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Web test case</td>
+ <td>Allows link following and title tag matching</td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Partial mocks</td>
+ <td>
+ Mocking parts of a class for testing less than a class
+ or for complex simulations
+ </td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Web cookie handling</td>
+ <td>Correct handling of cookies when fetching pages</td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Following redirects</td>
+ <td>Page fetching automatically follows 300 redirects</td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Form parsing</td>
+ <td>Ability to submit simple forms and read default form values</td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Command line interface</td>
+ <td>Test display without the need of a web browser</td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Exposure of expectation classes</td>
+ <td>Can create precise tests with mocks as well as test cases</td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>XML output and parsing</td>
+ <td>
+ Allows multi host testing and the integration of acceptance
+ testing extensions
+ </td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Browser component</td>
+ <td>
+ Exposure of lower level web browser interface for more
+ detailed test cases
+ </td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>HTTP authentication</td>
+ <td>
+ Fetching protected web pages with basic authentication
+ only
+ </td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>SSL support</td>
+ <td>Can connect to https: pages</td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Proxy support</td>
+ <td>Can connect via. common proxies</td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>Frames support</td>
+ <td>Handling of frames in web test cases</td>
+ <td style="color: green;">1.0</td>
+ </tr>
+ <tr>
+ <td>File upload testing</td>
+ <td>Can simulate the input type file tag</td>
+ <td style="color: green;">1.0.1</td>
+ </tr>
+ <tr>
+ <td>Mocking interfaces</td>
+ <td>
+ Can generate mock objects to interfaces as well as classes
+ and class interfaces are carried for type hints
+ </td>
+ <td style="color: green;">1.0.1</td>
+ </tr>
+ <tr>
+ <td>Testing exceptions</td>
+ <td>Similar to testing PHP errors</td>
+ <td style="color: green;">1.0.1</td>
+ </tr>
+ <tr>
+ <td>HTML label support</td>
+ <td>Can access all controls using the visual label</td>
+ <td style="color: green;">1.0.1</td>
+ </tr>
+ <tr>
+ <td>Base tag support</td>
+ <td>Respects page base tag when clicking</td>
+ <td style="color: green;">1.0.1</td>
+ </tr>
+ <tr>
+ <td>PHP 5 E_STRICT compliant</td>
+ <td>PHP 5 only version that works with the E_STRICT error level</td>
+ <td style="color: red;">1.1</td>
+ </tr>
+ <tr>
+ <td>BDD style fixtures</td>
+ <td>Can import fixtures using a mixin like given() method</td>
+ <td style="color: red;">1.5</td>
+ </tr>
+ <tr>
+ <td>Reporting machinery enhancements</td>
+ <td>Improved message passing for better cooperation with IDEs</td>
+ <td style="color: red;">1.5</td>
+ </tr>
+ <tr>
+ <td>Fluent mock interface</td>
+ <td>More flexible and concise mock objects</td>
+ <td style="color: red;">1.6</td>
+ </tr>
+ <tr>
+ <td>Localisation</td>
+ <td>Messages abstracted and code generated</td>
+ <td style="color: red;">1.6</td>
+ </tr>
+ <tr>
+ <td>CSS selectors</td>
+ <td>HTML content can be examined using CSS selectors</td>
+ <td style="color: red;">1.7</td>
+ </tr>
+ <tr>
+ <td>HTML table assertions</td>
+ <td>Can match HTML or table elements to expectations</td>
+ <td style="color: red;">1.7</td>
+ </tr>
+ <tr>
+ <td>Unified acceptance testing model</td>
+ <td>Content searchable through selectors combined with expectations</td>
+ <td style="color: red;">1.7</td>
+ </tr>
+ <tr>
+ <td>DatabaseTestCase</td>
+ <td>SQL selectors and DB drivers</td>
+ <td style="color: red;">1.7</td>
+ </tr>
+ <tr>
+ <td>IFrame support</td>
+ <td>Reads IFrame content that can be refreshed</td>
+ <td style="color: red;">1.8</td>
+ </tr>
+ <tr>
+ <td>Alternate HTML parsers</td>
+ <td>Can detect compiled parsers for performance improvements</td>
+ <td style="color: red;">1.8</td>
+ </tr>
+ <tr>
+ <td>Integrated Selenium support</td>
+ <td>Easy to use built in Selenium driver and tutorial</td>
+ <td style="color: red;">1.9</td>
+ </tr>
+ <tr>
+ <td>Code coverage</td>
+ <td>Reports using the bundled tool when using XDebug</td>
+ <td style="color: red;">1.9</td>
+ </tr>
+ <tr>
+ <td>Deprecation of old methods</td>
+ <td>Simpler interface for SimpleTest2</td>
+ <td style="color: red;">2.0</td>
+ </tr>
+ <tr>
+ <td>Javascript suport</td>
+ <td>Use of PECL module to add Javascript to the native browser</td>
+ <td style="color: red;">3.0</td>
+ </tr>
+ </tbody>
+</table>
+ PHP5 migraton will start straight after the version 1.0.1 series,
+ whereupon only PHP 5.1+ will be supported.
+ SimpleTest is currently compatible with PHP 5, but will not
+ make use of all of the new features until version 1.1.
+ </p>
+
+ <p><a class="target" name="resources"><h2>Web resources for testing</h2></a></p>
+ <p>
+ Process is at least as important as tools.
+ The type of process that makes the heaviest use of a developer's
+ testing tool is of course
+ <a href="http://www.extremeprogramming.org/">Extreme Programming</a>.
+ This is one of the
+ <a href="http://www.agilealliance.com/articles/index">Agile Methodologies</a>
+ which combine various practices to "flatten the cost curve" of software development.
+ More extreme still is <a href="http://www.testdriven.com/modules/news/">Test Driven Development</a>,
+ where you very strictly adhere to the rule of no coding until you have a test.
+ If you're more of a planner, or believe that experience trumps evolution,
+ you may prefer the
+ <a href="http://www.therationaledge.com/content/dec_01/f_spiritOfTheRUP_pk.html">RUP</a> approach.
+ I haven't tried it, but even I can see that you will need test tools (see figure 9).
+ </p>
+ <p>
+ Most unit testers clone <a href="http://www.junit.org/">JUnit</a> to some degree,
+ as far as the interface at least. There is a wealth of information on the
+ JUnit site including the
+ <a href="http://junit.sourceforge.net/doc/faq/faq.htm">FAQ</a>
+ which contains plenty of general advice on testing.
+ Once you get bitten by the bug you will certainly appreciate the phrase
+ <a href="http://junit.sourceforge.net/doc/testinfected/testing.htm">test infected</a>
+ coined by Eric Gamma.
+ If you are still reviewing which unit tester to use you can find pretty complete
+ lists from
+ <a href="http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks">Wikipedia</a>,
+ <a href="http://www.testingfaqs.org/t-unit.html">Software testing FAQ</a>,
+ and <a href="http://www.opensourcetesting.org/functional.php">Open source testing</a>.
+ </p>
+ <p>
+ There is still very little material on using mock objects, which is a shame
+ as unit testing without them is a lot more work.
+ The <a href="http://www.sidewize.com/company/mockobjects.pdf">original mock objects paper</a>
+ is very Java focused, but still worth a read.
+ The most authoritive sources are probably
+ <a href="http://mockobjects.com">the original mock objects site</a> and
+ <a href="http://jmock.org/">JMock</a>.
+ Java centric, but tucked away in PDFs they contain some deep knowledge on using mocks from the
+ extended experience of the concept inventors.
+ As a new technology there are plenty of discussions and debate on how to use mocks,
+ often on Wikis such as
+ <a href="http://xpdeveloper.com/cgi-bin/oldwiki.cgi?MockObjects">Extreme Tuesday</a>
+ or <a href="http://www.mockobjects.com/MocksObjectsPaper.html">www.mockobjects.com</a>
+ or <a href="http://c2.com/cgi/wiki?MockObject">the original C2 Wiki</a>.
+ Injecting mocks into a class is the main area of debate for which this
+ <a href="http://www-106.ibm.com/developerworks/java/library/j-mocktest.html">paper on IBM</a>
+ makes a good starting point.
+ </p>
+ <p>
+ There are plenty of web testing tools, but the scriptable ones
+ are mostly are written in Java and
+ tutorials and advice are rather thin on the ground.
+ The only hope is to look at the documentation for
+ <a href="http://httpunit.sourceforge.net/">HTTPUnit</a>,
+ <a href="http://htmlunit.sourceforge.net/">HTMLUnit</a>
+ or <a href="http://jwebunit.sourceforge.net/">JWebUnit</a> and hope for clues.
+ There are some XML driven test frameworks, but again most
+ require Java to run.
+ </p>
+ <p>
+ Most significant is a new generation of tools that run directly in the web browser
+ are now available.
+ These include
+ <a href="http://www.openqa.org/selenium/">Selenium</a> and
+ <a href="http://wtr.rubyforge.org/">Watir</a>.
+ They are non-trivial to set up and slow to run, but can essentially test anything.
+ As SimpleTest does not support JavaScript you would probably
+ have to look at these tools anyway if you have highly dynamic
+ pages.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ <a href="unit_test_documentation.html">Documentation for SimpleTest</a>.
+ </li>
+<li>
+ <a href="http://www.lastcraft.com/first_test_tutorial.php">How to write PHP test cases</a>
+ is a fairly advanced tutorial.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">SimpleTest API</a> from phpdoc.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <span class="chosen">Overview</span>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/en/partial_mocks_documentation.html b/vendors/simpletest/docs/en/partial_mocks_documentation.html
new file mode 100644
index 000000000..4cae18c9d
--- /dev/null
+++ b/vendors/simpletest/docs/en/partial_mocks_documentation.html
@@ -0,0 +1,445 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>SimpleTest for PHP partial mocks documentation</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <span class="chosen">Partial mocks</span>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Partial mock objects documentation</h1>
+ This page...
+ <ul>
+<li>
+ <a href="#inject">The mock injection problem</a>.
+ </li>
+<li>
+ Moving creation to a <a href="#creation">protected factory</a> method.
+ </li>
+<li>
+ <a href="#partial">Partial mocks</a> generate subclasses.
+ </li>
+<li>
+ Partial mocks <a href="#less">test less than a class</a>.
+ </li>
+</ul>
+<div class="content">
+
+ <p>
+ A partial mock is simply a pattern to alleviate a specific problem
+ in testing with mock objects,
+ that of getting mock objects into tight corners.
+ It's quite a limited tool and possibly not even a good idea.
+ It is included with SimpleTest because I have found it useful
+ on more than one occasion and has saved a lot of work at that point.
+ </p>
+
+ <p><a class="target" name="inject"><h2>The mock injection problem</h2></a></p>
+ <p>
+ When one object uses another it is very simple to just pass a mock
+ version in already set up with its expectations.
+ Things are rather tricker if one object creates another and the
+ creator is the one you want to test.
+ This means that the created object should be mocked, but we can
+ hardly tell our class under test to create a mock instead.
+ The tested class doesn't even know it is running inside a test
+ after all.
+ </p>
+ <p>
+ For example, suppose we are building a telnet client and it
+ needs to create a network socket to pass its messages.
+ The connection method might look something like...
+<pre>
+<strong>&lt;?php
+require_once('socket.php');
+
+class Telnet {
+ ...
+ function &amp;connect($ip, $port, $username, $password) {
+ $socket = &amp;new Socket($ip, $port);
+ $socket-&gt;read( ... );
+ ...
+ }
+}
+?&gt;</strong>
+</pre>
+ We would really like to have a mock object version of the socket
+ here, what can we do?
+ </p>
+ <p>
+ The first solution is to pass the socket in as a parameter,
+ forcing the creation up a level.
+ Having the client handle this is actually a very good approach
+ if you can manage it and should lead to factoring the creation from
+ the doing.
+ In fact, this is one way in which testing with mock objects actually
+ forces you to code more tightly focused solutions.
+ They improve your programming.
+ </p>
+ <p>
+ Here this would be...
+<pre>
+&lt;?php
+require_once('socket.php');
+
+class Telnet {
+ ...
+ <strong>function &amp;connect(&amp;$socket, $username, $password) {
+ $socket-&gt;read( ... );
+ ...
+ }</strong>
+}
+?&gt;
+</pre>
+ This means that the test code is typical for a test involving
+ mock objects.
+<pre>
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {<strong>
+ $socket = &amp;new MockSocket($this);
+ ...
+ $telnet = &amp;new Telnet();
+ $telnet-&gt;connect($socket, 'Me', 'Secret');
+ ...</strong>
+ }
+}
+</pre>
+ It is pretty obvious though that one level is all you can go.
+ You would hardly want your top level application creating
+ every low level file, socket and database connection ever
+ needed.
+ It wouldn't know the constructor parameters anyway.
+ </p>
+ <p>
+ The next simplest compromise is to have the created object passed
+ in as an optional parameter...
+<pre>
+&lt;?php
+require_once('socket.php');
+
+class Telnet {
+ ...<strong>
+ function &amp;connect($ip, $port, $username, $password, $socket = false) {
+ if (!$socket) {
+ $socket = &amp;new Socket($ip, $port);
+ }
+ $socket-&gt;read( ... );</strong>
+ ...
+ return $socket;
+ }
+}
+?&gt;
+</pre>
+ For a quick solution this is usually good enough.
+ The test now looks almost the same as if the parameter
+ was formally passed...
+<pre>
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {<strong>
+ $socket = &amp;new MockSocket($this);
+ ...
+ $telnet = &amp;new Telnet();
+ $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret', &amp;$socket);
+ ...</strong>
+ }
+}
+</pre>
+ The problem with this approach is its untidiness.
+ There is test code in the main class and parameters passed
+ in the test case that are never used.
+ This is a quick and dirty approach, but nevertheless effective
+ in most situations.
+ </p>
+ <p>
+ The next method is to pass in a factory object to do the creation...
+<pre>
+&lt;?php
+require_once('socket.php');
+
+class Telnet {<strong>
+ function Telnet(&amp;$network) {
+ $this-&gt;_network = &amp;$network;
+ }</strong>
+ ...
+ function &amp;connect($ip, $port, $username, $password) {<strong>
+ $socket = &amp;$this-&gt;_network-&gt;createSocket($ip, $port);
+ $socket-&gt;read( ... );</strong>
+ ...
+ return $socket;
+ }
+}
+?&gt;
+</pre>
+ This is probably the most highly factored answer as creation
+ is now moved into a small specialist class.
+ The networking factory can now be tested separately, but mocked
+ easily when we are testing the telnet class...
+<pre>
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {<strong>
+ $socket = &amp;new MockSocket($this);
+ ...
+ $network = &amp;new MockNetwork($this);
+ $network-&gt;setReturnReference('createSocket', $socket);
+ $telnet = &amp;new Telnet($network);
+ $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+ ...</strong>
+ }
+}
+</pre>
+ The downside is that we are adding a lot more classes to the
+ library.
+ Also we are passing a lot of factories around which will
+ make the code a little less intuitive.
+ The most flexible solution, but the most complex.
+ </p>
+ <p>
+ Is there a middle ground?
+ </p>
+
+ <p><a class="target" name="creation"><h2>Protected factory method</h2></a></p>
+ <p>
+ There is a way we can circumvent the problem without creating
+ any new application classes, but it involves creating a subclass
+ when we do the actual testing.
+ Firstly we move the socket creation into its own method...
+<pre>
+&lt;?php
+require_once('socket.php');
+
+class Telnet {
+ ...
+ function &amp;connect($ip, $port, $username, $password) {<strong>
+ $socket = &amp;$this-&gt;_createSocket($ip, $port);</strong>
+ $socket-&gt;read( ... );
+ ...
+ }<strong>
+
+ function &amp;_createSocket($ip, $port) {
+ return new Socket($ip, $port);
+ }</strong>
+}
+?&gt;
+</pre>
+ This is the only change we make to the application code.
+ </p>
+ <p>
+ For the test case we have to create a subclass so that
+ we can intercept the socket creation...
+<pre>
+<strong>class TelnetTestVersion extends Telnet {
+ var $_mock;
+
+ function TelnetTestVersion(&amp;$mock) {
+ $this-&gt;_mock = &amp;$mock;
+ $this-&gt;Telnet();
+ }
+
+ function &amp;_createSocket() {
+ return $this-&gt;_mock;
+ }
+}</strong>
+</pre>
+ Here I have passed the mock in the constructor, but a
+ setter would have done just as well.
+ Note that the mock was set into the object variable
+ before the constructor was chained.
+ This is necessary in case the constructor calls
+ <span class="new_code">connect()</span>.
+ Otherwise it could get a null value from
+ <span class="new_code">_createSocket()</span>.
+ </p>
+ <p>
+ After the completion of all of this extra work the
+ actual test case is fairly easy.
+ We just test our new class instead...
+<pre>
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {<strong>
+ $socket = &amp;new MockSocket($this);
+ ...
+ $telnet = &amp;new TelnetTestVersion($socket);
+ $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+ ...</strong>
+ }
+}
+</pre>
+ The new class is very simple of course.
+ It just sets up a return value, rather like a mock.
+ It would be nice if it also checked the incoming parameters
+ as well.
+ Just like a mock.
+ It seems we are likely to do this often, can
+ we automate the subclass creation?
+ </p>
+
+ <p><a class="target" name="partial"><h2>A partial mock</h2></a></p>
+ <p>
+ Of course the answer is "yes" or I would have stopped writing
+ this by now!
+ The previous test case was a lot of work, but we can
+ generate the subclass using a similar approach to the mock objects.
+ </p>
+ <p>
+ Here is the partial mock version of the test...
+<pre>
+<strong>Mock::generatePartial(
+ 'Telnet',
+ 'TelnetTestVersion',
+ array('_createSocket'));</strong>
+
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {<strong>
+ $socket = &amp;new MockSocket($this);
+ ...
+ $telnet = &amp;new TelnetTestVersion($this);
+ $telnet-&gt;setReturnReference('_createSocket', $socket);
+ $telnet-&gt;Telnet();
+ $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+ ...</strong>
+ }
+}
+</pre>
+ The partial mock is a subclass of the original with
+ selected methods "knocked out" with test
+ versions.
+ The <span class="new_code">generatePartial()</span> call
+ takes three parameters: the class to be subclassed,
+ the new test class name and a list of methods to mock.
+ </p>
+ <p>
+ Instantiating the resulting objects is slightly tricky.
+ The only constructor parameter of a partial mock is
+ the unit tester reference.
+ As with the normal mock objects this is needed for sending
+ test results in response to checked expectations.
+ </p>
+ <p>
+ The original constructor is not run yet.
+ This is necessary in case the constructor is going to
+ make use of the as yet unset mocked methods.
+ We set any return values at this point and then run the
+ constructor with its normal parameters.
+ This three step construction of "new", followed
+ by setting up the methods, followed by running the constructor
+ proper is what distinguishes the partial mock code.
+ </p>
+ <p>
+ Apart from construction, all of the mocked methods have
+ the same features as mock objects and all of the unmocked
+ methods behave as before.
+ We can set expectations very easily...
+<pre>
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {
+ $socket = &amp;new MockSocket($this);
+ ...
+ $telnet = &amp;new TelnetTestVersion($this);
+ $telnet-&gt;setReturnReference('_createSocket', $socket);<strong>
+ $telnet-&gt;expectOnce('_createSocket', array('127.0.0.1', 21));</strong>
+ $telnet-&gt;Telnet();
+ $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+ ...<strong>
+ $telnet-&gt;tally();</strong>
+ }
+}
+</pre>
+ </p>
+
+ <p><a class="target" name="less"><h2>Testing less than a class</h2></a></p>
+ <p>
+ The mocked out methods don't have to be factory methods,
+ they could be any sort of method.
+ In this way partial mocks allow us to take control of any part of
+ a class except the constructor.
+ We could even go as far as to mock every method
+ except one we actually want to test.
+ </p>
+ <p>
+ This last situation is all rather hypothetical, as I haven't
+ tried it.
+ I am open to the possibility, but a little worried that
+ forcing object granularity may be better for the code quality.
+ I personally use partial mocks as a way of overriding creation
+ or for occasional testing of the TemplateMethod pattern.
+ </p>
+ <p>
+ It's all going to come down to the coding standards of your
+ project to decide which mechanism you use.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ SimpleTest project page on <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">Full API for SimpleTest</a>
+ from the PHPDoc.
+ </li>
+<li>
+ The protected factory is described in
+ <a href="http://www-106.ibm.com/developerworks/java/library/j-mocktest.html">this paper from IBM</a>.
+ This is the only formal comment I have seen on this problem.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <span class="chosen">Partial mocks</span>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/en/reporter_documentation.html b/vendors/simpletest/docs/en/reporter_documentation.html
new file mode 100644
index 000000000..87c89e44b
--- /dev/null
+++ b/vendors/simpletest/docs/en/reporter_documentation.html
@@ -0,0 +1,519 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>SimpleTest for PHP test runner and display documentation</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <span class="chosen">Reporting</span>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Test reporter documentation</h1>
+ This page...
+ <ul>
+<li>
+ Displaying <a href="#html">results in HTML</a>
+ </li>
+<li>
+ Displaying and <a href="#other">reporting results</a>
+ in other formats
+ </li>
+<li>
+ Using <a href="#cli">SimpleTest from the command line</a>
+ </li>
+<li>
+ Using <a href="#xml">Using XML</a> for remote testing
+ </li>
+</ul>
+<div class="content">
+
+ <p>
+ SimpleTest pretty much follows the MVC pattern
+ (Model-View-Controller).
+ The reporter classes are the view and the model is your
+ test cases and their hiearchy.
+ The controller is mostly hidden from the user of
+ SimpleTest unless you want to change how the test cases
+ are actually run, in which case it is possible to
+ override the runner objects from within the test case.
+ As usual with MVC, the controller is mostly undefined
+ and there are other places to control the test run.
+ </p>
+
+ <p><a class="target" name="html"><h2>Reporting results in HTML</h2></a></p>
+ <p>
+ The default test display is minimal in the extreme.
+ It reports success and failure with the conventional red and
+ green bars and shows a breadcrumb trail of test groups
+ for every failed assertion.
+ Here's a fail...
+ <div class="demo">
+ <h1>File test</h1>
+ <span class="fail">Fail</span>: createnewfile-&gt;True assertion failed.<br>
+ <div style="padding: 8px; margin-top: 1em; background-color: red; color: white;">1/1 test cases complete.
+ <strong>0</strong> passes, <strong>1</strong> fails and <strong>0</strong> exceptions.</div>
+ </div>
+ And here all tests passed...
+ <div class="demo">
+ <h1>File test</h1>
+ <div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete.
+ <strong>1</strong> passes, <strong>0</strong> fails and <strong>0</strong> exceptions.</div>
+ </div>
+ The good news is that there are several points in the display
+ hiearchy for subclassing.
+ </p>
+ <p>
+ For web page based displays there is the
+ <span class="new_code">HtmlReporter</span> class with the following
+ signature...
+<pre>
+class HtmlReporter extends SimpleReporter {
+ public HtmlReporter($encoding) { ... }
+ public makeDry(boolean $is_dry) { ... }
+ public void paintHeader(string $test_name) { ... }
+ public void sendNoCacheHeaders() { ... }
+ public void paintFooter(string $test_name) { ... }
+ public void paintGroupStart(string $test_name, integer $size) { ... }
+ public void paintGroupEnd(string $test_name) { ... }
+ public void paintCaseStart(string $test_name) { ... }
+ public void paintCaseEnd(string $test_name) { ... }
+ public void paintMethodStart(string $test_name) { ... }
+ public void paintMethodEnd(string $test_name) { ... }
+ public void paintFail(string $message) { ... }
+ public void paintPass(string $message) { ... }
+ public void paintError(string $message) { ... }
+ public void paintException(string $message) { ... }
+ public void paintMessage(string $message) { ... }
+ public void paintFormattedMessage(string $message) { ... }
+ protected string _getCss() { ... }
+ public array getTestList() { ... }
+ public integer getPassCount() { ... }
+ public integer getFailCount() { ... }
+ public integer getExceptionCount() { ... }
+ public integer getTestCaseCount() { ... }
+ public integer getTestCaseProgress() { ... }
+}
+</pre>
+ Here is what some of these methods mean. First the display methods
+ that you will probably want to override...
+ <ul class="api">
+ <li>
+ <span class="new_code">HtmlReporter(string $encoding)</span><br>
+ is the constructor.
+ Note that the unit test sets up the link to the display
+ rather than the other way around.
+ The display is a mostly passive receiver of test events.
+ This allows easy adaption of the display for other test
+ systems beside unit tests, such as monitoring servers.
+ The encoding is the character encoding you wish to
+ display the test output in.
+ In order to correctly render debug output when
+ using the web tester, this should match the encoding
+ of the site you are trying to test.
+ The available character set strings are described in
+ the PHP <a href="http://www.php.net/manual/en/function.htmlentities.php">html_entities()</a>
+ function.
+ </li>
+ <li>
+ <span class="new_code">void paintHeader(string $test_name)</span><br>
+ is called once at the very start of the test when the first
+ start event arrives.
+ The first start event is usually delivered by the top level group
+ test and so this is where <span class="new_code">$test_name</span>
+ comes from.
+ It paints the page titles, CSS, body tag, etc.
+ It returns nothing (<span class="new_code">void</span>).
+ </li>
+ <li>
+ <span class="new_code">void paintFooter(string $test_name)</span><br>
+ Called at the very end of the test to close any tags opened
+ by the page header.
+ By default it also displays the red/green bar and the final
+ count of results.
+ Actually the end of the test happens when a test end event
+ comes in with the same name as the one that started it all
+ at the same level.
+ The tests nest you see.
+ Closing the last test finishes the display.
+ </li>
+ <li>
+ <span class="new_code">void paintMethodStart(string $test_name)</span><br>
+ is called at the start of each test method.
+ The name normally comes from method name.
+ The other test start events behave the same way except
+ that the group test one tells the reporter how large
+ it is in number of held test cases.
+ This is so that the reporter can display a progress bar
+ as the runner churns through the test cases.
+ </li>
+ <li>
+ <span class="new_code">void paintMethodEnd(string $test_name)</span><br>
+ backs out of the test started with the same name.
+ </li>
+ <li>
+ <span class="new_code">void paintFail(string $message)</span><br>
+ paints a failure.
+ By default it just displays the word fail, a breadcrumbs trail
+ showing the current test nesting and the message issued by
+ the assertion.
+ </li>
+ <li>
+ <span class="new_code">void paintPass(string $message)</span><br>
+ by default does nothing.
+ </li>
+ <li>
+ <span class="new_code">string _getCss()</span><br>
+ Returns the CSS styles as a string for the page header
+ method.
+ Additional styles have to be appended here if you are
+ not overriding the page header.
+ You will want to use this method in an overriden page header
+ if you want to include the original CSS.
+ </li>
+ </ul>
+ There are also some accessors to get information on the current
+ state of the test suite.
+ Use these to enrich the display...
+ <ul class="api">
+ <li>
+ <span class="new_code">array getTestList()</span><br>
+ is the first convenience method for subclasses.
+ Lists the current nesting of the tests as a list
+ of test names.
+ The first, most deeply nested test, is first in the
+ list and the current test method will be last.
+ </li>
+ <li>
+ <span class="new_code">integer getPassCount()</span><br>
+ returns the number of passes chalked up so far.
+ Needed for the display at the end.
+ </li>
+ <li>
+ <span class="new_code">integer getFailCount()</span><br>
+ is likewise the number of fails so far.
+ </li>
+ <li>
+ <span class="new_code">integer getExceptionCount()</span><br>
+ is likewise the number of errors so far.
+ </li>
+ <li>
+ <span class="new_code">integer getTestCaseCount()</span><br>
+ is the total number of test cases in the test run.
+ This includes the grouping tests themselves.
+ </li>
+ <li>
+ <span class="new_code">integer getTestCaseProgress()</span><br>
+ is the number of test cases completed so far.
+ </li>
+ </ul>
+ One simple modification is to get the HtmlReporter to display
+ the passes as well as the failures and errors...
+<pre>
+<strong>class ShowPasses extends HtmlReporter {
+
+ function paintPass($message) {
+ parent::paintPass($message);
+ print "&amp;&lt;span class=\"pass\"&gt;Pass&lt;/span&gt;: ";
+ $breadcrumb = $this-&gt;getTestList();
+ array_shift($breadcrumb);
+ print implode("-&amp;gt;", $breadcrumb);
+ print "-&amp;gt;$message&lt;br /&gt;\n";
+ }
+
+ function _getCss() {
+ return parent::_getCss() . ' .pass { color: green; }';
+ }
+}</strong>
+</pre>
+ </p>
+ <p>
+ One method that was glossed over was the <span class="new_code">makeDry()</span>
+ method.
+ If you run this method, with no parameters, on the reporter
+ before the test suite is run no actual test methods
+ will be called.
+ You will still get the events of entering and leaving the
+ test methods and test cases, but no passes or failures etc,
+ because the test code will not actually be executed.
+ </p>
+ <p>
+ The reason for this is to allow for more sophistcated
+ GUI displays that allow the selection of individual test
+ cases.
+ In order to build a list of possible tests they need a
+ report on the test structure for drawing, say a tree view
+ of the test suite.
+ With a reporter set to dry run that just sends drawing events
+ this is easily accomplished.
+ </p>
+
+ <p><a class="target" name="other"><h2>Extending the reporter</h2></a></p>
+ <p>
+ Rather than simply modifying the existing display, you might want to
+ produce a whole new HTML look, or even generate text or XML.
+ Rather than override every method in
+ <span class="new_code">HtmlReporter</span> we can take one
+ step up the class hiearchy to <span class="new_code">SimpleReporter</span>
+ in the <em>simple_test.php</em> source file.
+ </p>
+ <p>
+ A do nothing display, a blank canvas for your own creation, would
+ be...
+<pre>
+<strong>require_once('simpletest/simple_test.php');</strong>
+
+class MyDisplay extends SimpleReporter {<strong>
+ </strong>
+ function paintHeader($test_name) {
+ }
+
+ function paintFooter($test_name) {
+ }
+
+ function paintStart($test_name, $size) {<strong>
+ parent::paintStart($test_name, $size);</strong>
+ }
+
+ function paintEnd($test_name, $size) {<strong>
+ parent::paintEnd($test_name, $size);</strong>
+ }
+
+ function paintPass($message) {<strong>
+ parent::paintPass($message);</strong>
+ }
+
+ function paintFail($message) {<strong>
+ parent::paintFail($message);</strong>
+ }
+}
+</pre>
+ No output would come from this class until you add it.
+ </p>
+
+ <p><a class="target" name="cli"><h2>The command line reporter</h2></a></p>
+ <p>
+ SimpleTest also ships with a minimal command line reporter.
+ The interface mimics JUnit to some extent, but paints the
+ failure messages as they arrive.
+ To use the command line reporter simply substitute it
+ for the HTML version...
+<pre>
+&lt;?php
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/reporter.php');
+
+$test = &amp;new TestSuite('File test');
+$test-&gt;addTestFile('tests/file_test.php');
+$test-&gt;run(<strong>new TextReporter()</strong>);
+?&gt;
+</pre>
+ Then invoke the test suite from the command line...
+<pre class="shell">
+php file_test.php
+</pre>
+ You will need the command line version of PHP installed
+ of course.
+ A passing test suite looks like this...
+<pre class="shell">
+File test
+OK
+Test cases run: 1/1, Failures: 0, Exceptions: 0
+</pre>
+ A failure triggers a display like this...
+<pre class="shell">
+File test
+1) True assertion failed.
+ in createnewfile
+FAILURES!!!
+Test cases run: 1/1, Failures: 1, Exceptions: 0
+</pre>
+ </p>
+ <p>
+ One of the main reasons for using a command line driven
+ test suite is of using the tester as part of some automated
+ process.
+ To function properly in shell scripts the test script should
+ return a non-zero exit code on failure.
+ If a test suite fails the value <span class="new_code">false</span>
+ is returned from the <span class="new_code">SimpleTest::run()</span>
+ method.
+ We can use that result to exit the script with the desired return
+ code...
+<pre>
+&lt;?php
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/reporter.php');
+
+$test = &amp;new TestSuite('File test');
+$test-&gt;addTestFile('tests/file_test.php');
+<strong>exit ($test-&gt;run(new TextReporter()) ? 0 : 1);</strong>
+?&gt;
+</pre>
+ Of course we don't really want to create two test scripts,
+ a command line one and a web browser one, for each test suite.
+ The command line reporter includes a method to sniff out the
+ run time environment...
+<pre>
+&lt;?php
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/reporter.php');
+
+$test = &amp;new TestSuite('File test');
+$test-&gt;addTestFile('tests/file_test.php');
+<strong>if (TextReporter::inCli()) {</strong>
+ exit ($test-&gt;run(new TextReporter()) ? 0 : 1);
+<strong>}</strong>
+$test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ This is the form used within SimpleTest itself.
+ </p>
+
+ <p><a class="target" name="xml"><h2>Remote testing</h2></a></p>
+ <p>
+ SimpleTest ships with an <span class="new_code">XmlReporter</span> class
+ used for internal communication.
+ When run the output looks like...
+<pre class="shell">
+&lt;?xml version="1.0"?&gt;
+&lt;run&gt;
+ &lt;group size="4"&gt;
+ &lt;name&gt;Remote tests&lt;/name&gt;
+ &lt;group size="4"&gt;
+ &lt;name&gt;Visual test with 48 passes, 48 fails and 4 exceptions&lt;/name&gt;
+ &lt;case&gt;
+ &lt;name&gt;testofunittestcaseoutput&lt;/name&gt;
+ &lt;test&gt;
+ &lt;name&gt;testofresults&lt;/name&gt;
+ &lt;pass&gt;This assertion passed&lt;/pass&gt;
+ &lt;fail&gt;This assertion failed&lt;/fail&gt;
+ &lt;/test&gt;
+ &lt;test&gt;
+ ...
+ &lt;/test&gt;
+ &lt;/case&gt;
+ &lt;/group&gt;
+ &lt;/group&gt;
+&lt;/run&gt;
+</pre>
+ You can make use of this format with the parser
+ supplied as part of SimpleTest itself.
+ This is called <span class="new_code">SimpleTestXmlParser</span> and
+ resides in <em>xml.php</em> within the SimpleTest package...
+<pre>
+&lt;?php
+require_once('simpletest/xml.php');
+
+...
+$parser = &amp;new SimpleTestXmlParser(new HtmlReporter());
+$parser-&gt;parse($test_output);
+?&gt;
+</pre>
+ The <span class="new_code">$test_output</span> should be the XML format
+ from the XML reporter, and could come from say a command
+ line run of a test case.
+ The parser sends events to the reporter just like any
+ other test run.
+ There are some odd occasions where this is actually useful.
+ </p>
+ <p>
+ A problem with large test suites is thet they can exhaust
+ the default 8Mb memory limit on a PHP process.
+ By having the test groups output in XML and run in
+ separate processes, the output can be reparsed to
+ aggregate the results into a much smaller footprint top level
+ test.
+ </p>
+ <p>
+ Because the XML output can come from anywhere, this opens
+ up the possibility of aggregating test runs from remote
+ servers.
+ A test case already exists to do this within the SimpleTest
+ framework, but it is currently experimental...
+<pre>
+&lt;?php
+<strong>require_once('../remote.php');</strong>
+require_once('../reporter.php');
+
+$test_url = ...;
+$dry_url = ...;
+
+$test = &amp;new TestSuite('Remote tests');
+$test-&gt;addTestCase(<strong>new RemoteTestCase($test_url, $dry_url)</strong>);
+$test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ The <span class="new_code">RemoteTestCase</span> takes the actual location
+ of the test runner, basically a web page in XML format.
+ It also takes the URL of a reporter set to do a dry run.
+ This is so that progress can be reported upward correctly.
+ The <span class="new_code">RemoteTestCase</span> can be added to test suites
+ just like any other group test.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ SimpleTest project page on <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ SimpleTest download page on <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ The <a href="http://simpletest.org/api/">developer's API for SimpleTest</a>
+ gives full detail on the classes and assertions available.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <span class="chosen">Reporting</span>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/en/unit_test_documentation.html b/vendors/simpletest/docs/en/unit_test_documentation.html
new file mode 100644
index 000000000..bc43c82cc
--- /dev/null
+++ b/vendors/simpletest/docs/en/unit_test_documentation.html
@@ -0,0 +1,431 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>SimpleTest for PHP regression test documentation</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <span class="chosen">Unit tester</span>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>PHP Unit Test documentation</h1>
+ This page...
+ <ul>
+<li>
+ <a href="#unit">Unit test cases</a> and basic assertions.
+ </li>
+<li>
+ <a href="#extending_unit">Extending test cases</a> to
+ customise them for your own project.
+ </li>
+<li>
+ <a href="#running_unit">Running a single case</a> as
+ a single script.
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="unit"><h2>Unit test cases</h2></a></p>
+ <p>
+ The core system is a regression testing framework built around
+ test cases.
+ A sample test case looks like this...
+<pre>
+<strong>class FileTestCase extends UnitTestCase {
+}</strong>
+</pre>
+ Actual tests are added as methods in the test case whose names
+ by default start with the string "test" and
+ when the test case is invoked all such methods are run in
+ the order that PHP introspection finds them.
+ As many test methods can be added as needed.
+ </p>
+ <p>
+ For example...
+<pre>
+require_once('simpletest/autorun.php');
+require_once('../classes/writer.php');
+
+class FileTestCase extends UnitTestCase {
+ function FileTestCase() {
+ $this-&gt;UnitTestCase('File test');
+ }<strong>
+
+ function setUp() {
+ @unlink('../temp/test.txt');
+ }
+
+ function tearDown() {
+ @unlink('../temp/test.txt');
+ }
+
+ function testCreation() {
+ $writer = &amp;new FileWriter('../temp/test.txt');
+ $writer-&gt;write('Hello');
+ $this-&gt;assertTrue(file_exists('../temp/test.txt'), 'File created');
+ }</strong>
+}
+</pre>
+ The constructor is optional and usually omitted.
+ Without a name, the class name is taken as the name of the test case.
+ </p>
+ <p>
+ Our only test method at the moment is <span class="new_code">testCreation()</span>
+ where we check that a file has been created by our
+ <span class="new_code">Writer</span> object.
+ We could have put the <span class="new_code">unlink()</span>
+ code into this method as well, but by placing it in
+ <span class="new_code">setUp()</span> and
+ <span class="new_code">tearDown()</span> we can use it with
+ other test methods that we add.
+ </p>
+ <p>
+ The <span class="new_code">setUp()</span> method is run
+ just before each and every test method.
+ <span class="new_code">tearDown()</span> is run just after
+ each and every test method.
+ </p>
+ <p>
+ You can place some test case set up into the constructor to
+ be run once for all the methods in the test case, but
+ you risk test inteference that way.
+ This way is slightly slower, but it is safer.
+ Note that if you come from a JUnit background this will not
+ be the behaviour you are used to.
+ JUnit surprisingly reinstantiates the test case for each test
+ method to prevent such interference.
+ SimpleTest requires the end user to use <span class="new_code">setUp()</span>, but
+ supplies additional hooks for library writers.
+ </p>
+ <p>
+ The means of reporting test results (see below) are by a
+ visiting display class
+ that is notified by various <span class="new_code">assert...()</span>
+ methods.
+ Here is the full list for the <span class="new_code">UnitTestCase</span>
+ class, the default for SimpleTest...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">assertTrue($x)</span></td>
+<td>Fail if $x is false</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertFalse($x)</span></td>
+<td>Fail if $x is true</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNull($x)</span></td>
+<td>Fail if $x is set</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNotNull($x)</span></td>
+<td>Fail if $x not set</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertIsA($x, $t)</span></td>
+<td>Fail if $x is not the class or type $t</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNotA($x, $t)</span></td>
+<td>Fail if $x is of the class or type $t</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertEqual($x, $y)</span></td>
+<td>Fail if $x == $y is false</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNotEqual($x, $y)</span></td>
+<td>Fail if $x == $y is true</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertWithinMargin($x, $y, $m)</span></td>
+<td>Fail if abs($x - $y) &lt; $m is false</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertOutsideMargin($x, $y, $m)</span></td>
+<td>Fail if abs($x - $y) &lt; $m is true</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertIdentical($x, $y)</span></td>
+<td>Fail if $x == $y is false or a type mismatch</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNotIdentical($x, $y)</span></td>
+<td>Fail if $x == $y is true and types match</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertReference($x, $y)</span></td>
+<td>Fail unless $x and $y are the same variable</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertClone($x, $y)</span></td>
+<td>Fail unless $x and $y are identical copies</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertPattern($p, $x)</span></td>
+<td>Fail unless the regex $p matches $x</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoPattern($p, $x)</span></td>
+<td>Fail if the regex $p matches $x</td>
+</tr>
+ <tr>
+<td><span class="new_code">expectError($x)</span></td>
+<td>Swallows any upcoming matching error</td>
+</tr>
+ <tr>
+<td><span class="new_code">assert($e)</span></td>
+<td>Fail on failed <a href="expectation_documentation.html">expectation</a> object $e</td>
+</tr>
+ </tbody></table>
+ All assertion methods can take an optional description as a
+ last parameter.
+ This is to label the displayed result with.
+ If omitted a default message is sent instead, which is usually
+ sufficient.
+ This default message can still be embedded in your own message
+ if you include "%s" within the string.
+ All the assertions return true on a pass or false on failure.
+ </p>
+ <p>
+ Some examples...
+<pre>
+$variable = null;
+<strong>$this-&gt;assertNull($variable, 'Should be cleared');</strong>
+</pre>
+ ...will pass and normally show no message.
+ If you have
+ <a href="http://www.lastcraft.com/display_subclass_tutorial.php">set up the tester to display passes</a>
+ as well then the message will be displayed as is.
+<pre>
+<strong>$this-&gt;assertIdentical(0, false, 'Zero is not false [%s]');</strong>
+</pre>
+ This will fail as it performs a type
+ check, as well as a comparison, between the two values.
+ The "%s" part is replaced by the default
+ error message that would have been shown if we had not
+ supplied our own.
+<pre>
+$a = 1;
+$b = $a;
+<strong>$this-&gt;assertReference($a, $b);</strong>
+</pre>
+ Will fail as the variable <span class="new_code">$a</span> is a copy of <span class="new_code">$b</span>.
+<pre>
+<strong>$this-&gt;assertPattern('/hello/i', 'Hello world');</strong>
+</pre>
+ This will pass as using a case insensitive match the string
+ <span class="new_code">hello</span> is contained in <span class="new_code">Hello world</span>.
+<pre>
+<strong>$this-&gt;expectError();</strong>
+trigger_error('Catastrophe');
+</pre>
+ Here the check catches the "Catastrophe"
+ message without checking the text and passes.
+ This removes the error from the queue.
+<pre>
+<strong>$this-&gt;expectError('Catastrophe');</strong>
+trigger_error('Catastrophe');
+</pre>
+ The next error check tests not only the existence of the error,
+ but also the text which, here matches so another pass.
+ If any unchecked errors are left at the end of a test method then
+ an exception will be reported in the test.
+ </p>
+ <p>
+ Note that SimpleTest cannot catch compile time PHP errors.
+ </p>
+ <p>
+ The test cases also have some convenience methods for debugging
+ code or extending the suite...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">setUp()</span></td>
+<td>Runs this before each test method</td>
+</tr>
+ <tr>
+<td><span class="new_code">tearDown()</span></td>
+<td>Runs this after each test method</td>
+</tr>
+ <tr>
+<td><span class="new_code">pass()</span></td>
+<td>Sends a test pass</td>
+</tr>
+ <tr>
+<td><span class="new_code">fail()</span></td>
+<td>Sends a test failure</td>
+</tr>
+ <tr>
+<td><span class="new_code">error()</span></td>
+<td>Sends an exception event</td>
+</tr>
+ <tr>
+<td><span class="new_code">signal($type, $payload)</span></td>
+<td>Sends a user defined message to the test reporter</td>
+</tr>
+ <tr>
+<td><span class="new_code">dump($var)</span></td>
+<td>Does a formatted <span class="new_code">print_r()</span> for quick and dirty debugging</td>
+</tr>
+ </tbody></table>
+ </p>
+
+ <p><a class="target" name="extending_unit"><h2>Extending test cases</h2></a></p>
+ <p>
+ Of course additional test methods can be added to create
+ specific types of test case, so as to extend framework...
+<pre>
+require_once('simpletest/autorun.php');
+<strong>
+class FileTester extends UnitTestCase {
+ function FileTester($name = false) {
+ $this-&gt;UnitTestCase($name);
+ }
+
+ function assertFileExists($filename, $message = '%s') {
+ $this-&gt;assertTrue(
+ file_exists($filename),
+ sprintf($message, 'File [$filename] existence check'));
+ }</strong>
+}
+</pre>
+ Here the SimpleTest library is held in a folder called
+ <em>simpletest</em> that is local.
+ Substitute your own path for this.
+ </p>
+ <p>
+ To prevent this test case being run accidently, it is
+ advisable to mark it as <span class="new_code">abstract</span>.
+ </p>
+ <p>
+ Alternatively you could add a
+ <span class="new_code">SimpleTestOptions::ignore('FileTester');</span>
+ directive in your code.
+ </p>
+ <p>
+ This new case can be now be inherited just like
+ a normal test case...
+<pre>
+class FileTestCase extends <strong>FileTester</strong> {
+
+ function setUp() {
+ @unlink('../temp/test.txt');
+ }
+
+ function tearDown() {
+ @unlink('../temp/test.txt');
+ }
+
+ function testCreation() {
+ $writer = &amp;new FileWriter('../temp/test.txt');
+ $writer-&gt;write('Hello');<strong>
+ $this-&gt;assertFileExists('../temp/test.txt');</strong>
+ }
+}
+</pre>
+ </p>
+ <p>
+ If you want a test case that does not have all of the
+ <span class="new_code">UnitTestCase</span> assertions,
+ only your own and a few basics,
+ you need to extend the <span class="new_code">SimpleTestCase</span>
+ class instead.
+ It is found in <em>simple_test.php</em> rather than
+ <em>unit_tester.php</em>.
+ See <a href="group_test_documentation.html">later</a> if you
+ want to incorporate other unit tester's
+ test cases in your test suites.
+ </p>
+
+ <p><a class="target" name="running_unit"><h2>Running a single test case</h2></a></p>
+ <p>
+ You won't often run single test cases except when bashing
+ away at a module that is having difficulty, and you don't
+ want to upset the main test suite.
+ With <em>autorun</em> no particular scaffolding is needed,
+ just launch your particular test file and you're ready to go.
+ </p>
+ <p>
+ You can even decide which reporter (for example,
+ <span class="new_code">TextReporter</span> or <span class="new_code">HtmlReporter</span>)
+ you prefer for a specific file when launched on its own...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');<strong>
+SimpleTest :: prefer(new TextReporter());</strong>
+require_once('../classes/writer.php');
+
+class FileTestCase extends UnitTestCase {
+ ...
+}
+?&gt;
+</pre>
+ This script will run as is, but of course will output zero passes
+ and zero failures until test methods are added.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ SimpleTest project page on <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ SimpleTest download page on <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">Full API for SimpleTest</a>
+ from the PHPDoc.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <span class="chosen">Unit tester</span>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/en/web_tester_documentation.html b/vendors/simpletest/docs/en/web_tester_documentation.html
new file mode 100644
index 000000000..2602dd56d
--- /dev/null
+++ b/vendors/simpletest/docs/en/web_tester_documentation.html
@@ -0,0 +1,584 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Simple Test for PHP web script testing documentation</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <span class="chosen">Web tester</span>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Web tester documentation</h1>
+ This page...
+ <ul>
+<li>
+ Successfully <a href="#fetch">fetching a web page</a>
+ </li>
+<li>
+ Testing the <a href="#content">page content</a>
+ </li>
+<li>
+ <a href="#navigation">Navigating a web site</a>
+ while testing
+ </li>
+<li>
+ <a href="#request">Raw request modifications</a> and debugging methods
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="fetch"><h2>Fetching a page</h2></a></p>
+ <p>
+ Testing classes is all very well, but PHP is predominately
+ a language for creating functionality within web pages.
+ How do we test the front end presentation role of our PHP
+ applications?
+ Well the web pages are just text, so we should be able to
+ examine them just like any other test data.
+ </p>
+ <p>
+ This leads to a tricky issue.
+ If we test at too low a level, testing for matching tags
+ in the page with pattern matching for example, our tests will
+ be brittle.
+ The slightest change in layout could break a large number of
+ tests.
+ If we test at too high a level, say using mock versions of a
+ template engine, then we lose the ability to automate some classes
+ of test.
+ For example, the interaction of forms and navigation will
+ have to be tested manually.
+ These types of test are extremely repetitive and error prone.
+ </p>
+ <p>
+ SimpleTest includes a special form of test case for the testing
+ of web page actions.
+ The <span class="new_code">WebTestCase</span> includes facilities
+ for navigation, content and cookie checks and form handling.
+ Usage of these test cases is similar to the
+ <a href="unit_tester_documentation.html">UnitTestCase</a>...
+<pre>
+<strong>class TestOfLastcraft extends WebTestCase {
+}</strong>
+</pre>
+ Here we are about to test the
+ <a href="http://www.lastcraft.com/">Last Craft</a> site itself.
+ If this test case is in a file called <em>lastcraft_test.php</em>
+ then it can be loaded in a runner script just like unit tests...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');<strong>
+require_once('simpletest/web_tester.php');</strong>
+SimpleTest::prefer(new TextReporter());
+
+class WebTests extends TestSuite {
+ function WebTests() {
+ $this-&gt;TestSuite('Web site tests');<strong>
+ $this-&gt;addFile('lastcraft_test.php');</strong>
+ }
+}
+?&gt;
+</pre>
+ I am using the text reporter here to more clearly
+ distinguish the web content from the test output.
+ </p>
+ <p>
+ Nothing is being tested yet.
+ We can fetch the home page by using the
+ <span class="new_code">get()</span> method...
+<pre>
+class TestOfLastcraft extends WebTestCase {
+ <strong>
+ function testHomepage() {
+ $this-&gt;assertTrue($this-&gt;get('http://www.lastcraft.com/'));
+ }</strong>
+}
+</pre>
+ The <span class="new_code">get()</span> method will
+ return true only if page content was successfully
+ loaded.
+ It is a simple, but crude way to check that a web page
+ was actually delivered by the web server.
+ However that content may be a 404 response and yet
+ our <span class="new_code">get()</span> method will still return true.
+ </p>
+ <p>
+ Assuming that the web server for the Last Craft site is up
+ (sadly not always the case), we should see...
+<pre class="shell">
+Web site tests
+OK
+Test cases run: 1/1, Failures: 0, Exceptions: 0
+</pre>
+ All we have really checked is that any kind of page was
+ returned.
+ We don't yet know if it was the right one.
+ </p>
+
+ <p><a class="target" name="content"><h2>Testing page content</h2></a></p>
+ <p>
+ To confirm that the page we think we are on is actually the
+ page we are on, we need to verify the page content.
+<pre>
+class TestOfLastcraft extends WebTestCase {
+
+ function testHomepage() {<strong>
+ $this-&gt;get('http://www.lastcraft.com/');
+ $this-&gt;assertText('Why the last craft');</strong>
+ }
+}
+</pre>
+ The page from the last fetch is held in a buffer in
+ the test case, so there is no need to refer to it directly.
+ The pattern match is always made against the buffer.
+ </p>
+ <p>
+ Here is the list of possible content assertions...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">assertTitle($title)</span></td>
+<td>Pass if title is an exact match</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertText($text)</span></td>
+<td>Pass if matches visible and "alt" text</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoText($text)</span></td>
+<td>Pass if doesn't match visible and "alt" text</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertPattern($pattern)</span></td>
+<td>A Perl pattern match against the page content</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoPattern($pattern)</span></td>
+<td>A Perl pattern match to not find content</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertLink($label)</span></td>
+<td>Pass if a link with this text is present</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoLink($label)</span></td>
+<td>Pass if no link with this text is present</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertLinkById($id)</span></td>
+<td>Pass if a link with this id attribute is present</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoLinkById($id)</span></td>
+<td>Pass if no link with this id attribute is present</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertField($name, $value)</span></td>
+<td>Pass if an input tag with this name has this value</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertFieldById($id, $value)</span></td>
+<td>Pass if an input tag with this id has this value</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertResponse($codes)</span></td>
+<td>Pass if HTTP response matches this list</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertMime($types)</span></td>
+<td>Pass if MIME type is in this list</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertAuthentication($protocol)</span></td>
+<td>Pass if the current challenge is this protocol</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoAuthentication()</span></td>
+<td>Pass if there is no current challenge</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertRealm($name)</span></td>
+<td>Pass if the current challenge realm matches</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertHeader($header, $content)</span></td>
+<td>Pass if a header was fetched matching this value</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoHeader($header)</span></td>
+<td>Pass if a header was not fetched</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertCookie($name, $value)</span></td>
+<td>Pass if there is currently a matching cookie</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoCookie($name)</span></td>
+<td>Pass if there is currently no cookie of this name</td>
+</tr>
+ </tbody></table>
+ As usual with the SimpleTest assertions, they all return
+ false on failure and true on pass.
+ They also allow an optional test message and you can embed
+ the original test message inside using "%s" inside
+ your custom message.
+ </p>
+ <p>
+ So now we could instead test against the title tag with...
+<pre>
+<strong>$this-&gt;assertTitle('The Last Craft? Web developer tutorials on PHP, Extreme programming and Object Oriented development');</strong>
+</pre>
+ ...or, if that is too long and fragile...
+<pre>
+<strong>$this-&gt;assertTitle(new PatternExpectation('/The Last Craft/'));</strong>
+</pre>
+ As well as the simple HTML content checks we can check
+ that the MIME type is in a list of allowed types with...
+<pre>
+<strong>$this-&gt;assertMime(array('text/plain', 'text/html'));</strong>
+</pre>
+ More interesting is checking the HTTP response code.
+ Like the MIME type, we can assert that the response code
+ is in a list of allowed values...
+<pre>
+class TestOfLastcraft extends WebTestCase {
+
+ function testRedirects() {
+ $this-&gt;get('http://www.lastcraft.com/test/redirect.php');
+ $this-&gt;assertResponse(200);&lt;/strong&gt;
+ }
+}
+</pre>
+ Here we are checking that the fetch is successful by
+ allowing only a 200 HTTP response.
+ This test will pass, but it is not actually correct to do so.
+ There is no page, instead the server issues a redirect.
+ The <span class="new_code">WebTestCase</span> will
+ automatically follow up to three such redirects.
+ The tests are more robust this way and we are usually
+ interested in the interaction with the pages rather
+ than their delivery.
+ If the redirects are of interest then this ability must
+ be disabled...
+<pre>
+class TestOfLastcraft extends WebTestCase {
+
+ function testHomepage() {<strong>
+ $this-&gt;setMaximumRedirects(0);</strong>
+ $this-&gt;get('http://www.lastcraft.com/test/redirect.php');
+ $this-&gt;assertResponse(200);
+ }
+}
+</pre>
+ The assertion now fails as expected...
+<pre class="shell">
+Web site tests
+1) Expecting response in [200] got [302]
+ in testhomepage
+ in testoflastcraft
+ in lastcraft_test.php
+FAILURES!!!
+Test cases run: 1/1, Failures: 1, Exceptions: 0
+</pre>
+ We can modify the test to correctly assert redirects with...
+<pre>
+class TestOfLastcraft extends WebTestCase {
+
+ function testHomepage() {
+ $this-&gt;setMaximumRedirects(0);
+ $this-&gt;get('http://www.lastcraft.com/test/redirect.php');
+ $this-&gt;assertResponse(<strong>array(301, 302, 303, 307)</strong>);
+ }
+}
+</pre>
+ This now passes.
+ </p>
+
+ <p><a class="target" name="navigation"><h2>Navigating a web site</h2></a></p>
+ <p>
+ Users don't often navigate sites by typing in URLs, but by
+ clicking links and buttons.
+ Here we confirm that the contact details can be reached
+ from the home page...
+<pre>
+class TestOfLastcraft extends WebTestCase {
+ ...
+ function testContact() {
+ $this-&gt;get('http://www.lastcraft.com/');<strong>
+ $this-&gt;clickLink('About');
+ $this-&gt;assertTitle(new PatternExpectation('/About Last Craft/'));</strong>
+ }
+}
+</pre>
+ The parameter is the text of the link.
+ </p>
+ <p>
+ If the target is a button rather than an anchor tag, then
+ <span class="new_code">clickSubmit()</span> can be used
+ with the button title...
+<pre>
+<strong>$this-&gt;clickSubmit('Go!');</strong>
+</pre>
+ If you are not sure or don't care, the usual case, then just
+ use the <span class="new_code">click()</span> method...
+<pre>
+<strong>$this-&gt;click('Go!');</strong>
+</pre>
+ </p>
+ <p>
+ The list of navigation methods is...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">getUrl()</span></td>
+<td>The current location</td>
+</tr>
+ <tr>
+<td><span class="new_code">get($url, $parameters)</span></td>
+<td>Send a GET request with these parameters</td>
+</tr>
+ <tr>
+<td><span class="new_code">post($url, $parameters)</span></td>
+<td>Send a POST request with these parameters</td>
+</tr>
+ <tr>
+<td><span class="new_code">head($url, $parameters)</span></td>
+<td>Send a HEAD request without replacing the page content</td>
+</tr>
+ <tr>
+<td><span class="new_code">retry()</span></td>
+<td>Reload the last request</td>
+</tr>
+ <tr>
+<td><span class="new_code">back()</span></td>
+<td>Like the browser back button</td>
+</tr>
+ <tr>
+<td><span class="new_code">forward()</span></td>
+<td>Like the browser forward button</td>
+</tr>
+ <tr>
+<td><span class="new_code">authenticate($name, $password)</span></td>
+<td>Retry after a challenge</td>
+</tr>
+ <tr>
+<td><span class="new_code">restart()</span></td>
+<td>Restarts the browser as if a new session</td>
+</tr>
+ <tr>
+<td><span class="new_code">getCookie($name)</span></td>
+<td>Gets the cookie value for the current context</td>
+</tr>
+ <tr>
+<td><span class="new_code">ageCookies($interval)</span></td>
+<td>Ages current cookies prior to a restart</td>
+</tr>
+ <tr>
+<td><span class="new_code">clearFrameFocus()</span></td>
+<td>Go back to treating all frames as one page</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmit($label)</span></td>
+<td>Click the first button with this label</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmitByName($name)</span></td>
+<td>Click the button with this name attribute</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmitById($id)</span></td>
+<td>Click the button with this ID attribute</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImage($label, $x, $y)</span></td>
+<td>Click an input tag of type image by title or alt text</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImageByName($name, $x, $y)</span></td>
+<td>Click an input tag of type image by name</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImageById($id, $x, $y)</span></td>
+<td>Click an input tag of type image by ID attribute</td>
+</tr>
+ <tr>
+<td><span class="new_code">submitFormById($id)</span></td>
+<td>Submit a form without the submit value</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickLink($label, $index)</span></td>
+<td>Click an anchor by the visible label text</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickLinkById($id)</span></td>
+<td>Click an anchor by the ID attribute</td>
+</tr>
+ <tr>
+<td><span class="new_code">getFrameFocus()</span></td>
+<td>The name of the currently selected frame</td>
+</tr>
+ <tr>
+<td><span class="new_code">setFrameFocusByIndex($choice)</span></td>
+<td>Focus on a frame counting from 1</td>
+</tr>
+ <tr>
+<td><span class="new_code">setFrameFocus($name)</span></td>
+<td>Focus on a frame by name</td>
+</tr>
+ </tbody></table>
+ </p>
+ <p>
+ The parameters in the <span class="new_code">get()</span>, <span class="new_code">post()</span> or
+ <span class="new_code">head()</span> methods are optional.
+ The HTTP HEAD fetch does not change the browser context, only loads
+ cookies.
+ This can be useful for when an image or stylesheet sets a cookie
+ for crafty robot blocking.
+ </p>
+ <p>
+ The <span class="new_code">retry()</span>, <span class="new_code">back()</span> and
+ <span class="new_code">forward()</span> commands work as they would on
+ your web browser.
+ They use the history to retry pages.
+ This can be handy for checking the effect of hitting the
+ back button on your forms.
+ </p>
+ <p>
+ The frame methods need a little explanation.
+ By default a framed page is treated just like any other.
+ Content will be searced for throughout the entire frameset,
+ so clicking a link will work no matter which frame
+ the anchor tag is in.
+ You can override this behaviour by focusing on a single
+ frame.
+ If you do that, all searches and actions will apply to that
+ frame alone, such as authentication and retries.
+ If a link or button is not in a focused frame then it cannot
+ be clicked.
+ </p>
+ <p>
+ Testing navigation on fixed pages only tells you when you
+ have broken an entire script.
+ For highly dynamic pages, such as for bulletin boards, this can
+ be crucial for verifying the correctness of the application.
+ For most applications though, the really tricky logic is usually in
+ the handling of forms and sessions.
+ Fortunately SimpleTest includes
+ <a href="form_testing_documentation.html">tools for testing web forms</a>
+ as well.
+ </p>
+
+ <p><a class="target" name="request"><h2>Modifying the request</h2></a></p>
+ <p>
+ Although SimpleTest does not have the goal of testing networking
+ problems, it does include some methods to modify and debug
+ the requests it makes.
+ Here is another method list...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">getTransportError()</span></td>
+<td>The last socket error</td>
+</tr>
+ <tr>
+<td><span class="new_code">showRequest()</span></td>
+<td>Dump the outgoing request</td>
+</tr>
+ <tr>
+<td><span class="new_code">showHeaders()</span></td>
+<td>Dump the incoming headers</td>
+</tr>
+ <tr>
+<td><span class="new_code">showSource()</span></td>
+<td>Dump the raw HTML page content</td>
+</tr>
+ <tr>
+<td><span class="new_code">ignoreFrames()</span></td>
+<td>Do not load framesets</td>
+</tr>
+ <tr>
+<td><span class="new_code">setCookie($name, $value)</span></td>
+<td>Set a cookie from now on</td>
+</tr>
+ <tr>
+<td><span class="new_code">addHeader($header)</span></td>
+<td>Always add this header to the request</td>
+</tr>
+ <tr>
+<td><span class="new_code">setMaximumRedirects($max)</span></td>
+<td>Stop after this many redirects</td>
+</tr>
+ <tr>
+<td><span class="new_code">setConnectionTimeout($timeout)</span></td>
+<td>Kill the connection after this time between bytes</td>
+</tr>
+ <tr>
+<td><span class="new_code">useProxy($proxy, $name, $password)</span></td>
+<td>Make requests via this proxy URL</td>
+</tr>
+ </tbody></table>
+ These methods are principally for debugging.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ SimpleTest project page on <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ SimpleTest download page on <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ The <a href="http://simpletest.org/api/">developer's API for SimpleTest</a>
+ gives full detail on the classes and assertions available.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <span class="chosen">Web tester</span>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/authentication_documentation.html b/vendors/simpletest/docs/fr/authentication_documentation.html
new file mode 100644
index 000000000..782a46b12
--- /dev/null
+++ b/vendors/simpletest/docs/fr/authentication_documentation.html
@@ -0,0 +1,332 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Documentation Simple Test : tester l'authentification</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Documentation sur l'authentification</h1>
+ This page...
+ <ul>
+<li>
+ Passer au travers d'une <a href="#basique">authentification HTTP basique</a>
+ </li>
+<li>
+ Tester l'<a href="#cookies">authentification basée sur des cookies</a>
+ </li>
+<li>
+ Gérer les <a href="#session">sessions du navigateur</a> et les timeouts
+ </li>
+</ul>
+<div class="content">
+
+ <p>
+ Un des secteurs à la fois délicat et important lors d'un test
+ de site web reste la sécurité. Tester ces schémas est au coeur
+ des objectifs du testeur web de SimpleTest.
+ </p>
+
+ <p><a class="target" name="basique"><h2>Authentification HTTP basique</h2></a></p>
+ <p>
+ Si vous allez chercher une page web protégée
+ par une authentification basique, vous hériterez d'une entête 401.
+ Nous pouvons représenter ceci par ce test...
+<pre>
+class AuthenticationTest extends WebTestCase {<strong>
+ function test401Header() {
+ $this-&gt;get('http://www.lastcraft.com/protected/');
+ $this-&gt;showHeaders();
+ }</strong>
+}
+</pre>
+ Ce qui nous permet de voir les entêtes reçues...
+ <div class="demo">
+ <h1>File test</h1>
+<pre style="background-color: lightgray; color: black">
+HTTP/1.1 401 Authorization Required
+Date: Sat, 18 Sep 2004 19:25:18 GMT
+Server: Apache/1.3.29 (Unix) PHP/4.3.4
+WWW-Authenticate: Basic realm="SimpleTest basic authentication"
+Connection: close
+Content-Type: text/html; charset=iso-8859-1
+</pre>
+ <div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete.
+ <strong>0</strong> passes, <strong>0</strong> fails and <strong>0</strong> exceptions.</div>
+ </div>
+ Sauf que nous voulons éviter l'inspection visuelle,
+ on souhaite que SimpleTest puisse nous dire si oui ou non
+ la page est protégée. Voici un test en profondeur sur nos entêtes...
+<pre>
+class AuthenticationTest extends WebTestCase {
+ function test401Header() {
+ $this-&gt;get('http://www.lastcraft.com/protected/');<strong>
+ $this-&gt;assertAuthentication('Basic');
+ $this-&gt;assertResponse(401);
+ $this-&gt;assertRealm('SimpleTest basic authentication');</strong>
+ }
+}
+</pre>
+ N'importe laquelle de ces assertions suffirait,
+ tout dépend de la masse de détails que vous souhaitez voir.
+ </p>
+ <p>
+ La plupart du temps, nous ne souhaitons pas tester
+ l'authentification en elle-même, mais plutôt
+ les pages protégées par cette authentification.
+ Dès que la tentative d'authentification est reçue,
+ nous pouvons y répondre à l'aide d'une réponse d'authentification :
+<pre>
+class AuthenticationTest extends WebTestCase {
+ function testAuthentication() {
+ $this-&gt;get('http://www.lastcraft.com/protected/');<strong>
+ $this-&gt;authenticate('Me', 'Secret');</strong>
+ $this-&gt;assertTitle(...);
+ }
+}
+</pre>
+ Le nom d'utilisateur et le mot de passe seront désormais
+ envoyés à chaque requête vers ce répertoire
+ et ses sous-répertoires.
+ En revanche vous devrez vous authentifier à nouveau
+ si vous sortez de ce répertoire mais SimpleTest est assez
+ intelligent pour fusionner les sous-répertoires dans un même domaine.
+ </p>
+ <p>
+ Vous pouvez gagner une ligne en définissant
+ l'authentification au niveau de l'URL...
+<pre>
+class AuthenticationTest extends WebTestCase {
+ function testCanReadAuthenticatedPages() {
+ $this-&gt;get('http://<strong>Me:Secret@</strong>www.lastcraft.com/protected/');
+ $this-&gt;assertTitle(...);
+ }
+}
+</pre>
+ Si votre nom d'utilisateur ou mot de passe comporte
+ des caractères spéciaux, alors n'oubliez pas de les encoder,
+ sinon la requête ne sera pas analysée correctement.
+ De plus cette entête ne sera pas envoyée aux
+ sous requêtes si vous la définissez avec une URL absolue.
+ Par contre si vous naviguez avec des URL relatives,
+ l'information d'authentification sera préservée.
+ </p>
+ <p>
+ Pour l'instant, seule l'authentification de base est implémentée
+ et elle n'est réellement fiable qu'en tandem avec une connexion HTTPS.
+ C'est généralement suffisant pour protéger
+ le serveur testé des regards malveillants.
+ Les authentifications Digest et NTLM pourraient être ajoutées prochainement.
+ </p>
+
+ <p><a class="target" name="cookies"><h2>Cookies</h2></a></p>
+ <p>
+ L'authentification de base ne donne pas assez de contrôle
+ au développeur Web sur l'interface utilisateur.
+ Il y a de forte chance pour que cette fonctionnalité
+ soit codée directement dans l'architecture web
+ à grand renfort de cookies et de timeouts compliqués.
+ </p>
+ <p>
+ Commençons par un simple formulaire de connexion...
+<pre>
+&lt;form&gt;
+ Username:
+ &lt;input type="text" name="u" value="" /&gt;&lt;br /&gt;
+ Password:
+ &lt;input type="password" name="p" value="" /&gt;&lt;br /&gt;
+ &lt;input type="submit" value="Log in" /&gt;
+&lt;/form&gt;
+</pre>
+ Lequel doit ressembler à...
+ </p>
+ <p>
+ <form class="demo">
+ Username:
+ <input type="text" name="u" value=""><br>
+ Password:
+ <input type="password" name="p" value=""><br>
+ <input type="submit" value="Log in">
+ </form>
+ </p>
+ <p>
+ Supposons que, durant le chargement de la page,
+ un cookie ait été inscrit avec un numéro d'identifiant de session.
+ Nous n'allons pas encore remplir le formulaire,
+ juste tester que nous pistons bien l'utilisateur.
+ Voici le test...
+<pre>
+class LogInTest extends WebTestCase {
+ function testSessionCookieSetBeforeForm() {
+ $this-&gt;get('http://www.my-site.com/login.php');<strong>
+ $this-&gt;assertCookie('SID');</strong>
+ }
+}
+</pre>
+ Nous nous contentons ici de vérifier que le cookie a bien été défini.
+ Etant donné que sa valeur est plutôt énigmatique,
+ elle ne vaut pas la peine d'être testée.
+ </p>
+ <p>
+ Le reste du test est le même que dans n'importe quel autre formulaire,
+ mais nous pourrions souhaiter nous assurer
+ que le cookie n'a pas été modifié depuis la phase de connexion.
+ Voici comment cela pourrait être testé :
+<pre>
+class LogInTest extends WebTestCase {
+ ...
+ function testSessionCookieSameAfterLogIn() {
+ $this-&gt;get('http://www.my-site.com/login.php');<strong>
+ $session = $this-&gt;getCookie('SID');
+ $this-&gt;setField('u', 'Me');
+ $this-&gt;setField('p', 'Secret');
+ $this-&gt;clickSubmit('Log in');
+ $this-&gt;assertWantedPattern('/Welcome Me/');
+ $this-&gt;assertCookie('SID', $session);</strong>
+ }
+}
+</pre>
+ Ceci confirme que l'identifiant de session
+ est identique avant et après la connexion.
+ </p>
+ <p>
+ Nous pouvons même essayer de duper notre propre système
+ en créant un cookie arbitraire pour se connecter...
+<pre>
+class LogInTest extends WebTestCase {
+ ...
+ function testSessionCookieSameAfterLogIn() {
+ $this-&gt;get('http://www.my-site.com/login.php');<strong>
+ $this-&gt;setCookie('SID', 'Some other session');
+ $this-&gt;get('http://www.my-site.com/restricted.php');</strong>
+ $this-&gt;assertWantedPattern('/Access denied/');
+ }
+}
+</pre>
+ Votre site est-il protégé contre ce type d'attaque ?
+ </p>
+
+ <p><a class="target" name="session"><h2>Sessions de navigateur</h2></a></p>
+ <p>
+ Si vous testez un système d'authentification,
+ la reconnexion par un utilisateur est un point sensible.
+ Essayons de simuler ce qui se passe dans ce cas :
+<pre>
+class LogInTest extends WebTestCase {
+ ...
+ function testLoseAuthenticationAfterBrowserClose() {
+ $this-&gt;get('http://www.my-site.com/login.php');
+ $this-&gt;setField('u', 'Me');
+ $this-&gt;setField('p', 'Secret');
+ $this-&gt;clickSubmit('Log in');
+ $this-&gt;assertWantedPattern('/Welcome Me/');<strong>
+
+ $this-&gt;restart();
+ $this-&gt;get('http://www.my-site.com/restricted.php');
+ $this-&gt;assertWantedPattern('/Access denied/');</strong>
+ }
+}
+</pre>
+ La méthode <span class="new_code">WebTestCase::restart()</span> préserve les cookies
+ dont le timeout a expiré, mais conserve les cookies temporaires ou expirés.
+ Vous pouvez spécifier l'heure et la date de leur réactivation.
+ </p>
+ <p>
+ L'expiration des cookies peut être un problème.
+ Si vous avez un cookie qui doit expirer au bout d'une heure,
+ nous n'allons pas mettre le test en veille en attendant
+ que le cookie expire...
+ </p>
+ <p>
+ Afin de provoquer leur expiration,
+ vous pouvez dater manuellement les cookies,
+ avant le début de la session.
+<pre>
+class LogInTest extends WebTestCase {
+ ...
+ function testLoseAuthenticationAfterOneHour() {
+ $this-&gt;get('http://www.my-site.com/login.php');
+ $this-&gt;setField('u', 'Me');
+ $this-&gt;setField('p', 'Secret');
+ $this-&gt;clickSubmit('Log in');
+ $this-&gt;assertWantedPattern('/Welcome Me/');
+ <strong>
+ $this-&gt;ageCookies(3600);</strong>
+ $this-&gt;restart();
+ $this-&gt;get('http://www.my-site.com/restricted.php');
+ $this-&gt;assertWantedPattern('/Access denied/');
+ }
+}
+</pre>
+ Après le redémarrage, les cookies seront plus vieux
+ d'une heure et que tous ceux dont la date d'expiration
+ sera passée auront disparus.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ La page du projet SimpleTest sur <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ La page de téléchargement de SimpleTest sur <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">L'API du développeur pour SimpleTest</a> donne tous les détails sur les classes et les assertions disponibles.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/browser_documentation.html b/vendors/simpletest/docs/fr/browser_documentation.html
new file mode 100644
index 000000000..62abbbbb9
--- /dev/null
+++ b/vendors/simpletest/docs/fr/browser_documentation.html
@@ -0,0 +1,446 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Documentation SimpleTest : le composant de navigation web scriptable</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Documentation sur le navigateur scriptable</h1>
+ This page...
+ <ul>
+<li>
+ Utiliser le <a href="#scripting">navigateur web dans des scripts</a>
+ </li>
+<li>
+ <a href="#deboguer">Déboguer</a> les erreurs sur les pages
+ </li>
+<li>
+ <a href="#unit">Tests complexes avec des navigateurs web multiples</a>
+ </li>
+</ul>
+<div class="content">
+
+ <p>
+ Le composant de navigation web de SimpleTest peut être utilisé
+ non seulement à l'extérieur de la classe <span class="new_code">WebTestCase</span>,
+ mais aussi indépendamment du framework SimpleTest lui-même.
+ </p>
+
+ <p><a class="target" name="script"><h2>Le navigateur scriptable</h2></a></p>
+ <p>
+ Vous pouvez utiliser le navigateur web dans des scripts PHP
+ pour confirmer que des services marchent bien comme il faut
+ ou pour extraire des informations à partir de ceux-ci de façon régulière.
+ Par exemple, voici un petit script pour extraire
+ le nombre de bogues ouverts dans PHP 5 à partir
+ du <a href="http://www.php.net/">site web PHP</a>...
+<pre>
+&lt;?php
+ require_once('simpletest/browser.php');
+
+ $browser = &amp;new SimpleBrowser();
+ $browser-&gt;get('http://php.net/');
+ $browser-&gt;clickLink('reporting bugs');
+ $browser-&gt;clickLink('statistics');
+ $browser-&gt;clickLink('PHP 5 bugs only');
+ $page = $browser-&gt;getContent();
+ preg_match('/status=Open.*?by=Any.*?(\d+)&lt;\/a&gt;/', $page, $matches);
+ print $matches[1];
+?&gt;
+</pre>
+ Bien sûr Il y a des méthodes plus simple pour réaliser
+ cet exemple en PHP. Par exemple, vous pourriez juste
+ utiliser la commande PHP <span class="new_code">file()</span> sur ce qui est
+ ici une page fixe. Cependant, en utilisant des scripts
+ avec le navigateur web vous vous autorisez l'authentification,
+ la gestion des cookies, le chargement automatique des fenêtres,
+ les redirections, la transmission de formulaires et la capacité
+ d'examiner les entêtes. De telles méthodes sont fragiles dans
+ un site en constante évolution et vous voudrez employer une méthode
+ plus directe pour accéder aux données de façon permanente,
+ mais pour des tâches simples cette technique peut s'avérer
+ une solution très rapide.
+ </p>
+ <p>
+ Toutes les méthode de navigation utilisées dans <a href="web_tester_documentation.html">WebTestCase</a> sont présente dans la classe <span class="new_code">SimpleBrowser</span>, mais les assertions sont remplacées par de simples accesseurs. Voici une liste complète des méthodes de navigation de page à page...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">addHeader($header)</span></td>
+<td>Ajouter une entête à chaque téléchargement</td>
+</tr>
+ <tr>
+<td><span class="new_code">useProxy($proxy, $username, $password)</span></td>
+<td>Utilise ce proxy à partir de maintenant</td>
+</tr>
+ <tr>
+<td><span class="new_code">head($url, $parameters)</span></td>
+<td>Effectue une requête HEAD</td>
+</tr>
+ <tr>
+<td><span class="new_code">get($url, $parameters)</span></td>
+<td>Télécharge une page avec un GET</td>
+</tr>
+ <tr>
+<td><span class="new_code">post($url, $parameters)</span></td>
+<td>Télécharge une page avec un POST</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickLink($label)</span></td>
+<td>Suit un lien par son étiquette</td>
+</tr>
+ <tr>
+<td><span class="new_code">isLink($label)</span></td>
+<td>Vérifie l'existance d'un lien par son étiquette</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickLinkById($id)</span></td>
+<td>Suit un lien par son attribut d'identification</td>
+</tr>
+ <tr>
+<td><span class="new_code">isLinkById($id)</span></td>
+<td>Vérifie l'existance d'un lien par son attribut d'identification</td>
+</tr>
+ <tr>
+<td><span class="new_code">getUrl()</span></td>
+<td>La page ou la fenêtre URL en cours</td>
+</tr>
+ <tr>
+<td><span class="new_code">getTitle()</span></td>
+<td>Le titre de la page</td>
+</tr>
+ <tr>
+<td><span class="new_code">getContent()</span></td>
+<td>Le page ou la fenêtre brute</td>
+</tr>
+ <tr>
+<td><span class="new_code">getContentAsText()</span></td>
+<td>Sans code HTML à l'exception du text "alt"</td>
+</tr>
+ <tr>
+<td><span class="new_code">retry()</span></td>
+<td>Répète la dernière requête</td>
+</tr>
+ <tr>
+<td><span class="new_code">back()</span></td>
+<td>Utilise le bouton "précédent" du navigateur</td>
+</tr>
+ <tr>
+<td><span class="new_code">forward()</span></td>
+<td>Utilise le bouton "suivant" du navigateur</td>
+</tr>
+ <tr>
+<td><span class="new_code">authenticate($username, $password)</span></td>
+<td>Retente la page ou la fenêtre après une réponse 401</td>
+</tr>
+ <tr>
+<td><span class="new_code">restart($date)</span></td>
+<td>Relance le navigateur pour une nouvelle session</td>
+</tr>
+ <tr>
+<td><span class="new_code">ageCookies($interval)</span></td>
+<td>Change la date des cookies</td>
+</tr>
+ <tr>
+<td><span class="new_code">setCookie($name, $value)</span></td>
+<td>Lance un nouveau cookie</td>
+</tr>
+ <tr>
+<td><span class="new_code">getCookieValue($host, $path, $name)</span></td>
+<td>Lit le cookie le plus spécifique</td>
+</tr>
+ <tr>
+<td><span class="new_code">getCurrentCookieValue($name)</span></td>
+<td>Lit le contenue du cookie en cours</td>
+</tr>
+ </tbody></table>
+ Les méthode <span class="new_code">SimpleBrowser::useProxy()</span> et
+ <span class="new_code">SimpleBrowser::addHeader()</span> sont spéciales.
+ Une fois appelées, elles continuent à s'appliquer sur les téléchargements suivants.
+ </p>
+ <p>
+ Naviguer dans les formulaires est similaire à la <a href="form_testing_documentation.html">navigation des formulaires via WebTestCase</a>...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">setField($name, $value)</span></td>
+<td>Modifie tous les champs avec ce nom</td>
+</tr>
+ <tr>
+<td><span class="new_code">setFieldById($id, $value)</span></td>
+<td>Modifie tous les champs avec cet identifiant</td>
+</tr>
+ <tr>
+<td><span class="new_code">getField($name)</span></td>
+<td>Accesseur de la valeur d'un élément de formulaire</td>
+</tr>
+ <tr>
+<td><span class="new_code">getFieldById($id)</span></td>
+<td>Accesseur de la valeur de l'élément de formulaire avec cet identifiant</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmit($label)</span></td>
+<td>Transmet le formulaire avec l'étiquette de son bouton</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmitByName($name)</span></td>
+<td>Transmet le formulaire avec l'attribut de son bouton</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmitById($id)</span></td>
+<td>Transmet le formulaire avec l'identifiant de son bouton</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImage($label, $x, $y)</span></td>
+<td>Clique sur une balise input de type image par son titre (title="*") our son texte alternatif (alt="*")</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImageByName($name, $x, $y)</span></td>
+<td>Clique sur une balise input de type image par son attribut (name="*")</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImageById($id, $x, $y)</span></td>
+<td>Clique sur une balise input de type image par son identifiant (id="*")</td>
+</tr>
+ <tr>
+<td><span class="new_code">submitFormById($id)</span></td>
+<td>Transmet le formulaire par son identifiant propre</td>
+</tr>
+ </tbody></table>
+ Au jourd d'aujourd'hui il n'existe aucune méthode pour lister
+ les formulaires et les champs disponibles : ce sera probablement
+ ajouté dans des versions successives de SimpleTest.
+ </p>
+ <p>
+ A l'intérieur d'une page, les fenêtres individuelles peuvent être
+ sélectionnées. Si aucune sélection n'est réalisée alors
+ toutes les fenêtres sont fusionnées ensemble dans
+ une unique et grande page.
+ Le contenu de la page en cours sera une concaténation des
+ toutes les fenêtres dans l'ordre spécifié par les balises "frameset".
+ <table><tbody>
+ <tr>
+<td><span class="new_code">getFrames()</span></td>
+<td>Un déchargement de la structure de la fenêtre courante</td>
+</tr>
+ <tr>
+<td><span class="new_code">getFrameFocus()</span></td>
+<td>L'index ou l'étiquette de la fenêtre en courante</td>
+</tr>
+ <tr>
+<td><span class="new_code">setFrameFocusByIndex($choice)</span></td>
+<td>Sélectionne la fenêtre numérotée à partir de 1</td>
+</tr>
+ <tr>
+<td><span class="new_code">setFrameFocus($name)</span></td>
+<td>Sélectionne une fenêtre par son étiquette</td>
+</tr>
+ <tr>
+<td><span class="new_code">clearFrameFocus()</span></td>
+<td>Traite toutes les fenêtres comme une seule page</td>
+</tr>
+ </tbody></table>
+ Lorsqu'on est focalisé sur une fenêtre unique,
+ le contenu viendra de celle-ci uniquement.
+ Cela comprend les liens à cliquer et les formulaires à transmettre.
+ </p>
+
+ <p><a class="target" name="deboguer"><h2>Où sont les erreurs ?</h2></a></p>
+ <p>
+ Toute cette masse de fonctionnalités est géniale
+ lorsqu'on arrive à bien télécharger les pages,
+ mais ce n'est pas toujours évident.
+ Pour aider à découvrir les erreurs, le navigateur a aussi
+ des méthodes pour aider au débogage.
+ <table><tbody>
+ <tr>
+<td><span class="new_code">setConnectionTimeout($timeout)</span></td>
+<td>Ferme la socket avec un délai trop long</td>
+</tr>
+ <tr>
+<td><span class="new_code">getRequest()</span></td>
+<td>L'entête de la requête brute de la page ou de la fenêtre</td>
+</tr>
+ <tr>
+<td><span class="new_code">getHeaders()</span></td>
+<td>L'entête de réponse de la page ou de la fenêtre</td>
+</tr>
+ <tr>
+<td><span class="new_code">getTransportError()</span></td>
+<td>N'importe quel erreur au niveau de la socket dans le dernier téléchargement</td>
+</tr>
+ <tr>
+<td><span class="new_code">getResponseCode()</span></td>
+<td>La réponse HTTP de la page ou de la fenêtre</td>
+</tr>
+ <tr>
+<td><span class="new_code">getMimeType()</span></td>
+<td>Le type Mime de la page our de la fenêtre</td>
+</tr>
+ <tr>
+<td><span class="new_code">getAuthentication()</span></td>
+<td>Le type d'authentification dans l'entête d'une provocation 401</td>
+</tr>
+ <tr>
+<td><span class="new_code">getRealm()</span></td>
+<td>Le realm d'authentification dans l'entête d'une provocation 401</td>
+</tr>
+ <tr>
+<td><span class="new_code">setMaximumRedirects($max)</span></td>
+<td>Nombre de redirections avant que la page ne soit chargée automatiquement</td>
+</tr>
+ <tr>
+<td><span class="new_code">setMaximumNestedFrames($max)</span></td>
+<td>Protection contre des framesets récursifs</td>
+</tr>
+ <tr>
+<td><span class="new_code">ignoreFrames()</span></td>
+<td>Neutralise le support des fenêtres</td>
+</tr>
+ <tr>
+<td><span class="new_code">useFrames()</span></td>
+<td>Autorise le support des fenêtres</td>
+</tr>
+ </tbody></table>
+ Les méthodes <span class="new_code">SimpleBrowser::setConnectionTimeout()</span>,
+ <span class="new_code">SimpleBrowser::setMaximumRedirects()</span>,
+ <span class="new_code">SimpleBrowser::setMaximumNestedFrames()</span>,
+ <span class="new_code">SimpleBrowser::ignoreFrames()</span>
+ et <span class="new_code">SimpleBrowser::useFrames()</span> continuent à s'appliquer
+ sur toutes les requêtes suivantes.
+ Les autres méthodes tiennent compte des fenêtres.
+ Cela veut dire que si une fenêtre individuelle ne se charge pas,
+ il suffit de se diriger vers elle avec
+ <span class="new_code">SimpleBrowser::setFrameFocus()</span> : ensuite on utilisera
+ <span class="new_code">SimpleBrowser::getRequest()</span>, etc. pour voir ce qui se passe.
+ </p>
+
+ <p><a class="target" name="unit"><h2>Tests unitaires complexes avec des navigateurs multiples</h2></a></p>
+ <p>
+ Tout ce qui peut être fait dans
+ <a href="web_tester_documentation.html">WebTestCase</a> peut maintenant
+ être fait dans un <a href="unit_tester_documentation.html">UnitTestCase</a>.
+ Ce qui revient à dire que nous pouvons librement mélanger
+ des tests sur des objets de domaine avec l'interface web...
+<pre><strong>
+class TestOfRegistration extends UnitTestCase {
+ function testNewUserAddedToAuthenticator() {</strong>
+ $browser = &amp;new SimpleBrowser();
+ $browser-&gt;get('http://my-site.com/register.php');
+ $browser-&gt;setField('email', 'me@here');
+ $browser-&gt;setField('password', 'Secret');
+ $browser-&gt;clickSubmit('Register');
+ <strong>
+ $authenticator = &amp;new Authenticator();
+ $member = &amp;$authenticator-&gt;findByEmail('me@here');
+ $this-&gt;assertEqual($member-&gt;getPassword(), 'Secret');</strong>
+ }
+}
+</pre>
+ Bien que ça puisse être utile par convenance temporaire,
+ je ne suis pas fan de ce genre de test. Ce test s'applique
+ à plusieurs couches de l'application, ça implique qu'il est
+ plus que probable qu'il faudra le remanier lorsque le code changera.
+ </p>
+ <p>
+ Un cas plus utile d'utilisation directe du navigateur est
+ le moment où le <span class="new_code">WebTestCase</span> ne peut plus suivre.
+ Un exemple ? Quand deux navigateurs doivent être utilisés en même temps.
+ </p>
+ <p>
+ Par exemple, supposons que nous voulions interdire
+ des usages simultanés d'un site avec le même login d'identification.
+ Ce scénario de test le vérifie...
+<pre>
+class TestOfSecurity extends UnitTestCase {
+ function testNoMultipleLoginsFromSameUser() {
+ $first = &amp;new SimpleBrowser();
+ $first-&gt;get('http://my-site.com/login.php');
+ $first-&gt;setField('name', 'Me');
+ $first-&gt;setField('password', 'Secret');
+ $first-&gt;clickSubmit('Enter');
+ $this-&gt;assertEqual($first-&gt;getTitle(), 'Welcome');
+
+ $second = &amp;new SimpleBrowser();
+ $second-&gt;get('http://my-site.com/login.php');
+ $second-&gt;setField('name', 'Me');
+ $second-&gt;setField('password', 'Secret');
+ $second-&gt;clickSubmit('Enter');
+ $this-&gt;assertEqual($second-&gt;getTitle(), 'Access Denied');
+ }
+}
+</pre>
+ Vous pouvez aussi utiliser la classe <span class="new_code">SimpleBrowser</span>
+ quand vous souhaitez écrire des scénarios de test en utilisant
+ un autre outil que SimpleTest.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ La page du projet SimpleTest sur
+ <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ La page de téléchargement de SimpleTest sur
+ <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">L'API de développeur pour SimpleTest</a>
+ donne tous les détails sur les classes et les assertions disponibles.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/docs.css b/vendors/simpletest/docs/fr/docs.css
new file mode 100644
index 000000000..49170486a
--- /dev/null
+++ b/vendors/simpletest/docs/fr/docs.css
@@ -0,0 +1,84 @@
+body {
+ padding-left: 3%;
+ padding-right: 3%;
+}
+pre {
+ font-family: "courier new", courier;
+ font-size: 80%;
+ border: 1px solid;
+ background-color: #cccccc;
+ padding: 5px;
+ margin-left: 5%;
+ margin-right: 8%;
+}
+.code, .new_code, pre.new_code {
+ font-weight: bold;
+}
+div.copyright {
+ font-size: 80%;
+ color: gray;
+}
+div.copyright a {
+ color: gray;
+}
+ul.api {
+ padding-left: 0em;
+ padding-right: 25%;
+}
+ul.api li {
+ margin-top: 0.2em;
+ margin-bottom: 0.2em;
+ list-style: none;
+ text-indent: -3em;
+ padding-left: 3em;
+}
+div.demo {
+ border: 4px ridge;
+ border-color: gray;
+ padding: 10px;
+ margin: 5px;
+ margin-left: 20px;
+ margin-right: 40px;
+ background-color: white;
+}
+div.demo span.fail {
+ color: red;
+}
+div.demo span.pass {
+ color: green;
+}
+div.demo h1 {
+ font-size: 12pt;
+ text-align: left;
+ font-weight: bold;
+}
+table {
+ border: 2px outset;
+ border-color: gray;
+ background-color: white;
+ margin: 5px;
+ margin-left: 5%;
+ margin-right: 5%;
+}
+td {
+ font-size: 80%;
+}
+.shell {
+ color: white;
+}
+pre.shell {
+ border: 4px ridge;
+ border-color: gray;
+ padding: 10px;
+ margin: 5px;
+ margin-left: 20px;
+ margin-right: 40px;
+ background-color: black;
+}
+form.demo {
+ background-color: lightgray;
+ border: 4px outset;
+ border-color: lightgray;
+ padding: 10px;
+ margin-right: 40%;
+}
diff --git a/vendors/simpletest/docs/fr/expectation_documentation.html b/vendors/simpletest/docs/fr/expectation_documentation.html
new file mode 100644
index 000000000..c9408a7f3
--- /dev/null
+++ b/vendors/simpletest/docs/fr/expectation_documentation.html
@@ -0,0 +1,383 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Documentation SimpleTest : étendre le testeur unitaire avec des classes d'attentes supplémentaires</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Documentation sur les attentes</h1>
+ This page...
+ <ul>
+<li>
+ Utiliser les attentes <a href="#fantaisie">pour des tests
+ plus précis avec des objets fantaisie</a>
+ </li>
+<li>
+ <a href="#comportement">Changer le comportement d'un objet fantaisie</a>
+ avec des attentes
+ </li>
+<li>
+ <a href="#etendre">Créer des attentes</a>
+ </li>
+<li>
+ Par dessous SimpleTest <a href="#unitaire">utilise des classes d'attente</a>
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="fantaisie"><h2>Plus de contrôle sur les objets fantaisie</h2></a></p>
+ <p>
+ Le comportement par défaut des
+ <a href="mock_objects_documentation.html">objets fantaisie</a> dans
+ <a href="http://sourceforge.net/projects/simpletest/">SimpleTest</a>
+ est soit une correspondance identique sur l'argument,
+ soit l'acceptation de n'importe quel argument.
+ Pour la plupart des tests, c'est suffisant.
+ Cependant il est parfois nécessaire de ramollir un scénario de test.
+ </p>
+ <p>
+ Un des endroits où un test peut être trop serré
+ est la reconnaissance textuelle. Prenons l'exemple
+ d'un composant qui produirait un message d'erreur
+ utile lorsque quelque chose plante. Il serait utile de tester
+ que l'erreur correcte est renvoyée,
+ mais le texte proprement dit risque d'être plutôt long.
+ Si vous testez le texte dans son ensemble alors
+ à chaque modification de ce même message
+ -- même un point ou une virgule -- vous aurez
+ à revenir sur la suite de test pour la modifier.
+ </p>
+ <p>
+ Voici un cas concret, nous avons un service d'actualités
+ qui a échoué dans sa tentative de connexion à sa source distante.
+<pre>
+<strong>class NewsService {
+ ...
+ function publish(&amp;$writer) {
+ if (! $this-&gt;isConnected()) {
+ $writer-&gt;write('Cannot connect to news service "' .
+ $this-&gt;_name . '" at this time. ' .
+ 'Please try again later.');
+ }
+ ...
+ }
+}</strong>
+</pre>
+ Là il envoie son contenu vers un classe <span class="new_code">Writer</span>.
+ Nous pourrions tester ce comportement avec un <span class="new_code">MockWriter</span>...
+<pre>
+class TestOfNewsService extends UnitTestCase {
+ ...
+ function testConnectionFailure() {<strong>
+ $writer = &amp;new MockWriter($this);
+ $writer-&gt;expectOnce('write', array(
+ 'Cannot connect to news service ' .
+ '"BBC News" at this time. ' .
+ 'Please try again later.'));
+
+ $service = &amp;new NewsService('BBC News');
+ $service-&gt;publish($writer);
+
+ $writer-&gt;tally();</strong>
+ }
+}
+</pre>
+ C'est un bon exemple d'un test fragile.
+ Si nous décidons d'ajouter des instructions complémentaires,
+ par exemple proposer une source d'actualités alternative,
+ nous casserons nos tests par la même occasion sans pourtant
+ avoir modifié une seule fonctionnalité.
+ </p>
+ <p>
+ Pour contourner ce problème, nous voudrions utiliser
+ un test avec une expression rationnelle plutôt
+ qu'une correspondance exacte. Nous pouvons y parvenir avec...
+<pre>
+class TestOfNewsService extends UnitTestCase {
+ ...
+ function testConnectionFailure() {
+ $writer = &amp;new MockWriter($this);<strong>
+ $writer-&gt;expectOnce(
+ 'write',
+ array(new WantedPatternExpectation('/cannot connect/i')));</strong>
+
+ $service = &amp;new NewsService('BBC News');
+ $service-&gt;publish($writer);
+
+ $writer-&gt;tally();
+ }
+}
+</pre>
+ Plutôt que de transmettre le paramètre attendu au <span class="new_code">MockWriter</span>,
+ nous envoyons une classe d'attente appelée <span class="new_code">WantedPatternExpectation</span>.
+ L'objet fantaisie est suffisamment élégant pour reconnaître
+ qu'il s'agit d'un truc spécial et pour le traiter différemment.
+ Plutôt que de comparer l'argument entrant à cet objet,
+ il utilise l'objet attente lui-même pour exécuter le test.
+ </p>
+ <p>
+ <span class="new_code">WantedPatternExpectation</span> utilise
+ l'expression rationnelle pour la comparaison avec son constructeur.
+ A chaque fois qu'une comparaison est fait à travers
+ <span class="new_code">MockWriter</span> par rapport à cette classe attente,
+ elle fera un <span class="new_code">preg_match()</span> avec ce motif.
+ Dans notre scénario de test ci-dessus, aussi longtemps
+ que la chaîne "cannot connect" apparaît dans le texte,
+ la fantaisie transmettra un succès au testeur unitaire.
+ Peu importe le reste du texte.
+ </p>
+ <p>
+ Les classes attente possibles sont...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">EqualExpectation</span></td>
+<td>Une égalité, plutôt que la plus forte comparaison à l'identique</td>
+</tr>
+ <tr>
+<td><span class="new_code">NotEqualExpectation</span></td>
+<td>Une comparaison sur la non-égalité</td>
+</tr>
+ <tr>
+<td><span class="new_code">IndenticalExpectation</span></td>
+<td>La vérification par défaut de l'objet fantaisie qui doit correspondre exactement</td>
+</tr>
+ <tr>
+<td><span class="new_code">NotIndenticalExpectation</span></td>
+<td>Inverse la logique de l'objet fantaisie</td>
+</tr>
+ <tr>
+<td><span class="new_code">WantedPatternExpectation</span></td>
+<td>Utilise une expression rationnelle Perl pour comparer une chaîne</td>
+</tr>
+ <tr>
+<td><span class="new_code">NoUnwantedPatternExpectation</span></td>
+<td>Passe seulement si l'expression rationnelle Perl échoue</td>
+</tr>
+ <tr>
+<td><span class="new_code">IsAExpectation</span></td>
+<td>Vérifie le type ou le nom de la classe uniquement</td>
+</tr>
+ <tr>
+<td><span class="new_code">NotAExpectation</span></td>
+<td>L'opposé de <span class="new_code">IsAExpectation</span>
+</td>
+</tr>
+ <tr>
+<td><span class="new_code">MethodExistsExpectation</span></td>
+<td>Vérifie si la méthode est disponible sur un objet</td>
+</tr>
+ </tbody></table>
+ La plupart utilisent la valeur attendue dans le constructeur.
+ Les exceptions sont les vérifications sur motif,
+ qui utilisent une expression rationnelle, ainsi que
+ <span class="new_code">IsAExpectation</span> et <span class="new_code">NotAExpectation</span>,
+ qui prennent un type ou un nom de classe comme chaîne.
+ </p>
+
+ <p><a class="target" name="comportement"><h2>Utiliser les attentes pour contrôler les bouchons serveur</h2></a></p>
+ <p>
+ Les classes attente peuvent servir à autre chose
+ que l'envoi d'assertions depuis les objets fantaisie,
+ afin de choisir le comportement d'un
+ <a href="mock_objects_documentation.html">objet fantaisie</a>
+ ou celui d'un <a href="server_stubs_documentation.html">bouchon serveur</a>.
+ A chaque fois qu'une liste d'arguments est donnée,
+ une liste d'objets d'attente peut être insérée à la place.
+ </p>
+ <p>
+ Mettons que nous voulons qu'un bouchon serveur
+ d'autorisation simule une connexion réussie seulement
+ si il reçoit un objet de session valide.
+ Nous pouvons y arriver avec ce qui suit...
+<pre>
+Stub::generate('Authorisation');
+<strong>
+$authorisation = new StubAuthorisation();
+$authorisation-&gt;setReturnValue(
+ 'isAllowed',
+ true,
+ array(new IsAExpectation('Session', 'Must be a session')));
+$authorisation-&gt;setReturnValue('isAllowed', false);</strong>
+</pre>
+ Le comportement par défaut du bouchon serveur
+ est défini pour renvoyer <span class="new_code">false</span>
+ quand <span class="new_code">isAllowed</span> est appelé.
+ Lorsque nous appelons cette méthode avec un unique paramètre
+ qui est un objet <span class="new_code">Session</span>, il renverra <span class="new_code">true</span>.
+ Nous avons aussi ajouté un deuxième paramètre comme message.
+ Il sera affiché dans le message d'erreur de l'objet fantaisie
+ si l'attente est la cause de l'échec.
+ </p>
+ <p>
+ Ce niveau de sophistication est rarement utile :
+ il n'est inclut que pour être complet.
+ </p>
+
+ <p><a class="target" name="etendre"><h2>Créer vos propres attentes</h2></a></p>
+ <p>
+ Les classes d'attentes ont une structure très simple.
+ Tellement simple qu'il devient très simple de créer
+ vos propres version de logique pour des tests utilisés couramment.
+ </p>
+ <p>
+ Par exemple voici la création d'une classe pour tester
+ la validité d'adresses IP. Pour fonctionner correctement
+ avec les bouchons serveurs et les objets fantaisie,
+ cette nouvelle classe d'attente devrait étendre
+ <span class="new_code">SimpleExpectation</span>...
+<pre>
+<strong>class ValidIp extends SimpleExpectation {
+
+ function test($ip) {
+ return (ip2long($ip) != -1);
+ }
+
+ function testMessage($ip) {
+ return "Address [$ip] should be a valid IP address";
+ }
+}</strong>
+</pre>
+ Il n'y a véritablement que deux méthodes à mettre en place.
+ La méthode <span class="new_code">test()</span> devrait renvoyer un <span class="new_code">true</span>
+ si l'attente doit passer, et une erreur <span class="new_code">false</span>
+ dans le cas contraire. La méthode <span class="new_code">testMessage()</span>
+ ne devrait renvoyer que du texte utile à la compréhension du test en lui-même.
+ </p>
+ <p>
+ Cette classe peut désormais être employée à la place
+ des classes d'attente précédentes.
+ </p>
+
+ <p><a class="target" name="unitaire"><h2>Sous le capot du testeur unitaire</h2></a></p>
+ <p>
+ Le <a href="http://sourceforge.net/projects/simpletest/">framework
+ de test unitaire SimpleTest</a> utilise aussi dans son coeur
+ des classes d'attente pour
+ la <a href="unit_test_documentation.html">classe UnitTestCase</a>.
+ Nous pouvons aussi tirer parti de ces mécanismes pour réutiliser
+ nos propres classes attente à l'intérieur même des suites de test.
+ </p>
+ <p>
+ La méthode la plus directe est d'utiliser la méthode
+ <span class="new_code">SimpleTest::assertExpectation()</span> pour effectuer le test...
+<pre>
+<strong>class TestOfNetworking extends UnitTestCase {
+ ...
+ function testGetValidIp() {
+ $server = &amp;new Server();
+ $this-&gt;assertExpectation(
+ new ValidIp(),
+ $server-&gt;getIp(),
+ 'Server IP address-&gt;%s');
+ }
+}</strong>
+</pre>
+ C'est plutôt sale par rapport à notre syntaxe habituelle
+ du type <span class="new_code">assert...()</span>.
+ </p>
+ <p>
+ Pour un cas aussi simple, nous créons d'ordinaire une méthode
+ d'assertion distincte en utilisant la classe d'attente.
+ Supposons un instant que notre attente soit un peu plus
+ compliquée et que par conséquent nous souhaitions la réutiliser,
+ nous obtenons...
+<pre>
+class TestOfNetworking extends UnitTestCase {
+ ...<strong>
+ function assertValidIp($ip, $message = '%s') {
+ $this-&gt;assertExpectation(new ValidIp(), $ip, $message);
+ }</strong>
+
+ function testGetValidIp() {
+ $server = &amp;new Server();<strong>
+ $this-&gt;assertValidIp(
+ $server-&gt;getIp(),
+ 'Server IP address-&gt;%s');</strong>
+ }
+}
+</pre>
+ Il est peu probable que nous ayons besoin
+ de ce niveau de contrôle sur la machinerie de test.
+ Il est assez rare que le besoin d'une attente dépasse
+ le stade de la reconnaissance d'un motif.
+ De plus, les classes d'attente complexes peuvent rendre
+ les tests difficiles à lire et à déboguer.
+ Ces mécanismes sont véritablement là pour les auteurs
+ de système qui étendront le framework de test
+ pour leurs propres outils de test.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ La page du projet SimpleTest sur
+ <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ La page de téléchargement de SimpleTest sur
+ <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ Les attentes imitent les contraintes dans
+ <a href="http://www.jmock.org/">JMock</a>.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">L'API complète pour SimpleTest</a>
+ réalisé avec PHPDoc.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/form_testing_documentation.html b/vendors/simpletest/docs/fr/form_testing_documentation.html
new file mode 100644
index 000000000..4c30ef0cf
--- /dev/null
+++ b/vendors/simpletest/docs/fr/form_testing_documentation.html
@@ -0,0 +1,349 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Documentation SimpleTest : tester des formulaires HTML</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Documentation sur les tests de formulaire</h1>
+ This page...
+ <ul>
+<li>
+ Modifier les valeurs d'un formulaire et
+ <a href="#submit">réussir à transmettre un simple formulaire</a>
+ </li>
+<li>
+ Gérer des <a href="#multiple">objets à valeurs multiples</a>
+ en initialisant des listes.
+ </li>
+<li>
+ Le cas des formulaires utilisant Javascript pour
+ modifier <a href="#hidden-field">un champ caché</a>
+ </li>
+<li>
+ <a href="#brut">Envoi brut</a> quand il n'existe pas de bouton à cliquer.
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="submit"><h2>Valider un formulaire simple</h2></a></p>
+ <p>
+ Lorsqu'une page est téléchargée par <span class="new_code">WebTestCase</span>
+ en utilisant <span class="new_code">get()</span> ou <span class="new_code">post()</span>
+ le contenu de la page est automatiquement analysé.
+ De cette analyse découle le fait que toutes les commandes
+ à l'intérieur de la balise &lt;form&gt; sont disponibles
+ depuis l'intérieur du scénario de test.
+ Prenons par exemple cet extrait de code HTML...
+<pre>
+&lt;form&gt;
+ &lt;input type="text" name="a" value="A default" /&gt;
+ &lt;input type="submit" value="Go" /&gt;
+&lt;/form&gt;
+</pre>
+ Il ressemble à...
+ </p>
+ <p>
+ <form class="demo">
+ <input type="text" name="a" value="A default">
+ <input type="submit" value="Go">
+ </form>
+ </p>
+ <p>
+ Nous pouvons naviguer vers ce code, via le site
+ <a href="http://www.lastcraft.com/form_testing_documentation.php">LastCraft</a>,
+ avec le test suivant...
+<pre>
+class SimpleFormTests extends WebTestCase {
+ <strong>
+ function testDefaultValue() {
+ $this-&gt;get('http://www.lastcraft.com/form_testing_documentation.php');
+ $this-&gt;assertField('a', 'A default');
+ }</strong>
+}
+</pre>
+ Directement après le chargement de la page toutes les commandes HTML
+ sont initiées avec leur valeur par défaut, comme elles apparaîtraient
+ dans un navigateur web. L'assertion teste qu'un objet HTML
+ avec le nom "a" existe dans la page
+ et qu'il contient la valeur "A default".
+ </p>
+ <p>
+ Nous pourrions retourner le formulaire tout de suite,
+ mais d'abord nous allons changer la valeur du champ texte.
+ Ce n'est qu'après que nous le transmettrons...
+<pre>
+class SimpleFormTests extends WebTestCase {
+
+ function testDefaultValue() {
+ $this-&gt;get('http://www.my-site.com/');
+ $this-&gt;assertField('a', 'A default');<strong>
+ $this-&gt;setField('a', 'New value');
+ $this-&gt;clickSubmit('Go');</strong>
+ }
+}
+</pre>
+ Parce que nous n'avons spécifié ni attribut "method"
+ sur la balise form, ni attribut "action",
+ le scénario de test suivra le comportement classique d'un navigateur :
+ transmission des données avec une requête <em>GET</em>
+ vers la même page. SimpleTest essaie d'émuler
+ le comportement typique d'un navigateur autant que possible,
+ plutôt que d'essayer d'attraper des attributs manquants sur les balises.
+ La raison est simple : la cible d'un framework de test est
+ la logique d'une application PHP, pas les erreurs
+ -- de syntaxe ou autres -- du code HTML.
+ Pour les erreurs HTML, d'autres outils tel
+ <a href="http://www.w3.org/People/Raggett/tidy/">HTMLTidy</a>
+ devraient être employés.
+ </p>
+ <p>
+ Si un champ manque dans n'importe quel formulaire ou si
+ une option est indisponible alors <span class="new_code">WebTestCase::setField()</span>
+ renverra <span class="new_code">false</span>. Par exemple, supposons que
+ nous souhaitons vérifier qu'une option "Superuser"
+ n'est pas présente dans ce formulaire...
+<pre>
+&lt;strong&gt;Select type of user to add:&lt;/strong&gt;
+&lt;select name="type"&gt;
+ &lt;option&gt;Subscriber&lt;/option&gt;
+ &lt;option&gt;Author&lt;/option&gt;
+ &lt;option&gt;Administrator&lt;/option&gt;
+&lt;/select&gt;
+</pre>
+ Qui ressemble à...
+ </p>
+ <p>
+ <form class="demo">
+ <strong>Select type of user to add:</strong>
+ <select name="type">
+ <option>Subscriber</option>
+ <option>Author</option>
+ <option>Administrator</option>
+ </select>
+ </form>
+ </p>
+ <p>
+ Le test suivant le confirmera...
+<pre>
+class SimpleFormTests extends WebTestCase {
+ ...
+ function testNoSuperuserChoiceAvailable() {<strong>
+ $this-&gt;get('http://www.lastcraft.com/form_testing_documentation.php');
+ $this-&gt;assertFalse($this-&gt;setField('type', 'Superuser'));</strong>
+ }
+}
+</pre>
+ La sélection ne sera pas changée suite à un échec d'initialisation
+ d'une valeur sur un objet.
+ </p>
+ <p>
+ Voici la liste complète des objets supportés à aujourd'hui...
+ <ul>
+ <li>Champs texte, y compris les champs masqués (hidden) ou cryptés (password).</li>
+ <li>Boutons submit, en incluant aussi la balise button, mais pas encore les boutons reset</li>
+ <li>Aires texte (textarea) avec leur gestion des retours à la ligne (wrap).</li>
+ <li>Cases à cocher, y compris les cases à cocher multiples dans un même formulaire.</li>
+ <li>Listes à menu déroulant, y compris celles à sélections multiples.</li>
+ <li>Boutons radio.</li>
+ <li>Images.</li>
+ </ul>
+ </p>
+ <p>
+ Le navigateur proposé par SimpleTest émule les actions
+ qui peuvent être réalisées par un utilisateur sur
+ une page HTML standard. Javascript n'est pas supporté et
+ il y a peu de chance pour qu'il le soit prochainement.
+ </p>
+ <p>
+ Une attention particulière doit être porté aux techniques Javascript
+ qui changent la valeur d'un champ caché : elles ne peuvent pas être
+ réalisées avec les commandes classiques de SimpleTest.
+ Une méthode alternative est proposée plus loin.
+ </p>
+
+ <p><a class="target" name="multiple"><h2>Champs à valeurs multiples</h2></a></p>
+ <p>
+ SimpleTest peut gérer deux types de commandes à valeur multiple :
+ les menus déroulants à sélection multiple et les cases à cocher
+ avec le même nom à l'intérieur même d'un formulaire.
+ La nature de ceux-ci implique que leur initialisation
+ et leur test sont légèrement différents.
+ Voici un exemple avec des cases à cocher...
+<pre>
+&lt;form class="demo"&gt;
+ &lt;strong&gt;Create privileges allowed:&lt;/strong&gt;
+ &lt;input type="checkbox" name="crud" value="c" checked&gt;&lt;br&gt;
+ &lt;strong&gt;Retrieve privileges allowed:&lt;/strong&gt;
+ &lt;input type="checkbox" name="crud" value="r" checked&gt;&lt;br&gt;
+ &lt;strong&gt;Update privileges allowed:&lt;/strong&gt;
+ &lt;input type="checkbox" name="crud" value="u" checked&gt;&lt;br&gt;
+ &lt;strong&gt;Destroy privileges allowed:&lt;/strong&gt;
+ &lt;input type="checkbox" name="crud" value="d" checked&gt;&lt;br&gt;
+ &lt;input type="submit" value="Enable Privileges"&gt;
+&lt;/form&gt;
+</pre>
+ Qui se traduit par...
+ </p>
+ <p>
+ <form class="demo">
+ <strong>Create privileges allowed:</strong>
+ <input type="checkbox" name="crud" value="c" checked><br>
+ <strong>Retrieve privileges allowed:</strong>
+ <input type="checkbox" name="crud" value="r" checked><br>
+ <strong>Update privileges allowed:</strong>
+ <input type="checkbox" name="crud" value="u" checked><br>
+ <strong>Destroy privileges allowed:</strong>
+ <input type="checkbox" name="crud" value="d" checked><br>
+ <input type="submit" value="Enable Privileges">
+ </form>
+ </p>
+ <p>
+ Si nous souhaitons désactiver tous les privilèges sauf
+ ceux de téléchargement (Retrieve) et transmettre cette information,
+ nous pouvons y arriver par...
+<pre>
+class SimpleFormTests extends WebTestCase {
+ ...<strong>
+ function testDisableNastyPrivileges() {
+ $this-&gt;get('http://www.lastcraft.com/form_testing_documentation.php');
+ $this-&gt;assertField('crud', array('c', 'r', 'u', 'd'));
+ $this-&gt;setField('crud', array('r'));
+ $this-&gt;clickSubmit('Enable Privileges');
+ }</strong>
+}
+</pre>
+ Plutôt que d'initier le champ à une valeur unique,
+ nous lui donnons une liste de valeurs.
+ Nous faisons la même chose pour tester les valeurs attendues.
+ Nous pouvons écrire d'autres bouts de code de test
+ pour confirmer cet effet, peut-être en nous connectant
+ comme utilisateur et en essayant d'effectuer une mise à jour.
+ </p>
+
+ <p><a class="target" name="hidden-field"><h2>Formulaires utilisant Javascript pour changer un champ caché</h2></a></p>
+ <p>
+ Si vous souhaitez tester un formulaire dépendant de Javascript
+ pour la modification d'un champ caché, vous ne pouvez pas
+ simplement utiliser setField().
+ Le code suivant <em>ne fonctionnera pas</em> :
+<pre>
+class SimpleFormTests extends WebTestCase {
+ function testMyJavascriptForm() {
+ <strong>// Ne fonctionne *pas*</strong>
+ $this-&gt;setField('un_champ_caché', '123');
+ $this-&gt;clickSubmit('OK');
+ }
+}
+</pre>
+ A la place, vous aurez besoin d'ajouter le paramètre supplémentaire
+ du formulaire à la méthode clickSubmit() :
+<pre>
+class SimpleFormTests extends WebTestCase {
+ function testMyJavascriptForm() {
+ // Ajoute le champ caché comme variable POST supplémentaire
+ <strong>$this-&gt;clickSubmit('OK', array('un_champ_caché'=&gt;'123'));</strong>
+ }
+
+}
+</pre>
+ </p>
+ <p>
+ N'oubliez pas que de la sorte, vous êtes effectivement en train
+ de court-circuitez une partie de votre application (le code Javascript
+ dans le formulaire) et que peut-être serait-il plus prudent
+ d'utiliser un outil comme
+ <a href="http://selenium.openqa.org/">Selenium</a> pour mettre sur pied
+ un test de recette complet.
+ </p>
+
+ <p><a class="target" name="brut"><h2>Envoi brut</h2></a></p>
+ <p>
+ Si vous souhaitez tester un gestionnaire de formulaire
+ mais que vous ne l'avez pas écrit ou que vous n'y avez
+ pas encore accès, vous pouvez créer un envoi de formulaire à la main.
+<pre>
+class SimpleFormTests extends WebTestCase {
+ ...<strong>
+ function testAttemptedHack() {
+ $this-&gt;post(
+ 'http://www.my-site.com/add_user.php',
+ array('type' =&gt; 'superuser'));
+ $this-&gt;assertNoUnwantedPattern('/user created/i');
+ }</strong>
+}
+</pre>
+ En ajoutant des données à la méthode <span class="new_code">WebTestCase::post()</span>,
+ nous essayons de télécharger la page via la transmission d'un formulaire.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ La page du projet SimpleTest sur
+ <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ La page de téléchargement de SimpleTest sur
+ <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">L'API du développeur pour SimpleTest</a>
+ donne tous les détails sur les classes et les assertions disponibles.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/group_test_documentation.html b/vendors/simpletest/docs/fr/group_test_documentation.html
new file mode 100644
index 000000000..b993475ab
--- /dev/null
+++ b/vendors/simpletest/docs/fr/group_test_documentation.html
@@ -0,0 +1,398 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Documentation SimpleTest : Grouper des tests</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Documentation sur le groupement des tests</h1>
+ This page...
+ <ul>
+<li>
+ Plusieurs approches pour <a href="#group">grouper des tests</a> ensemble.
+ </li>
+<li>
+ Combiner des groupes des tests dans des
+ <a href="#plus-haut">groupes plus grands</a>.
+ </li>
+<li>
+ Intégrer des <a href="#heritage">scénarios de test hérités</a>
+ d'un autre type de PHPUnit.
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="grouper"><h2>Grouper des tests</h2></a></p>
+ <p>
+ Pour lancer les scénarios de tests en tant que groupe,
+ ils devraient être placés dans des fichiers sans le code du lanceur...
+<pre>
+<strong>&lt;?php
+ require_once('../classes/io.php');
+
+ class FileTester extends UnitTestCase {
+ ...
+ }
+
+ class SocketTester extends UnitTestCase {
+ ...
+ }
+?&gt;</strong>
+</pre>
+ Autant de scénarios que nécessaires peuvent être
+ mis dans un fichier unique. Ils doivent contenir
+ tout le code nécessaire, entre autres la bibliothèque testée,
+ mais aucune des bibliothèques de SimpleTest.
+ </p>
+ <p>
+ Si vous avez étendu l'un ou l'autre des scénarios de test,
+ vous pouvez aussi les inclure.
+<pre>
+&lt;?php
+ require_once('../classes/io.php');
+<strong>
+ class MyFileTestCase extends UnitTestCase {
+ ...
+ }
+ SimpleTestOptions::ignore('MyFileTestCase');</strong>
+
+ class FileTester extends MyFileTestCase {
+ ...
+ }
+
+ class SocketTester extends UnitTestCase {
+ ...
+ }
+?&gt;
+</pre>
+ La classe <span class="new_code">FileTester</span> ne contient aucun test véritable,
+ il s'agit d'une classe de base pour d'autres scénarios de test.
+ Pour cette raison nous utilisons la directive
+ <span class="new_code">SimpleTestOptions::ignore()</span> pour indiquer
+ au prochain groupe de tests de l'ignorer.
+ Cette directive peut se placer n'importe où dans le fichier
+ et fonctionne quand un fichier complet des scénarios de test
+ est chargé (cf. ci-dessous).
+ Nous l'appelons <em>file_test.php</em>.
+ </p>
+ <p>
+ Ensuite nous créons un fichier de groupe de tests,
+ disons <em>group_test.php</em>.
+ Vous penserez à un nom plus convaincant, j'en suis sûr.
+ Nous lui ajoutons le fichier de test avec une méthode sans risque...
+<pre>
+&lt;?php
+ require_once('simpletest/unit_tester.php');
+ require_once('simpletest/reporter.php');<strong>
+ require_once('file_test.php');
+
+ $test = &amp;new GroupTest('All file tests');
+ $test-&gt;addTestCase(new FileTestCase());
+ $test-&gt;run(new HtmlReporter());</strong>
+?&gt;
+</pre>
+ Ceci instancie le scénario de test avant que
+ la suite de test ne soit lancée.
+ Ça pourrait devenir assez onéreux avec
+ un grand nombre de scénarios de test :
+ il existe donc une autre méthode qui instancie
+ la classe uniquement quand elle devient nécessaire...
+<pre>
+&lt;?php
+ require_once('simpletest/unit_tester.php');
+ require_once('simpletest/reporter.php');
+ require_once('file_test.php');
+
+ $test = &amp;new GroupTest('All file tests');<strong>
+ $test-&gt;addTestClass('FileTestCase');</strong>
+ $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ Le problème de cette technique est que pour
+ chaque scénario de test supplémentaire nous aurons à importer
+ (via <span class="new_code">require_once()</span>) le fichier de code de test
+ et à instancier manuellement chaque scénario de test.
+ Nous pouvons nous épargner beaucoup de dactylographie avec...
+<pre>
+&lt;?php
+ require_once('simpletest/unit_tester.php');
+ require_once('simpletest/reporter.php');
+
+ $test = &amp;new GroupTest('All file tests');<strong>
+ $test-&gt;addTestFile('file_test.php');</strong>
+ $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ Voici ce qui vient de se passer :
+ la classe <span class="new_code">GroupTest</span> a réalisé le
+ <span class="new_code">require_once()</span> pour nous.
+ Ensuite elle vérifie si de nouvelles classes de scénario
+ de test ont été créées par ce nouveau fichier
+ et les ajoute automatiquement au groupe de tests.
+ Désormais tout ce qu'il nous reste à faire,
+ c'est d'ajouter chaque nouveau fichier.
+ </p>
+ <p>
+ Il y a deux choses qui peuvent planter
+ et qui demandent un minimum d'attention...
+ <ol>
+ <li>
+ Le fichier peut déjà avoir été analysé par PHP
+ et dans ce cas aucune classe ne sera ajoutée.
+ Pensez à bien vérifier que les scénarios de test
+ ne sont inclus que dans ce fichier et dans aucun autre
+ (Note : avec la nouvelle fonctionnalité <cite>autorun</cite>,
+ ce problème a maintenant été résolu).
+ </li>
+ <li>
+ Les nouvelles classes d'extension de scénario
+ de test qui sont incluses seront placées
+ dans le groupe de tests et exécutées par la même occasion.
+ Vous aurez à ajouter une directive
+ <span class="new_code">SimpleTestOptions::ignore()</span> pour ces classes
+ ou alors pensez à les ajouter avant la ligne
+ <span class="new_code">GroupTest::addTestFile()</span>.
+ </li>
+ </ol>
+ </p>
+
+ <p><a class="target" name="plus-haut"><h2>Groupements de plus haut niveau</h2></a></p>
+ <p>
+ La technique ci-dessus place tous les scénarios de test
+ dans un unique et grand groupe.
+ Sauf que pour des projets plus conséquents,
+ ce n'est probablement pas assez souple;
+ vous voudriez peut-être grouper les tests tout à fait différemment.
+ </p>
+ <p>
+ Pour obtenir un groupe de tests plus souple
+ nous pouvons sous classer <span class="new_code">GroupTest</span>
+ et ensuite l'instancier au cas par cas...
+<pre>
+&lt;?php
+ require_once('simpletest/unit_tester.php');
+ require_once('simpletest/reporter.php');
+ <strong>
+ class FileGroupTest extends GroupTest {
+ function FileGroupTest() {
+ $this-&gt;GroupTest('All file tests');
+ $this-&gt;addTestFile('file_test.php');
+ }
+ }</strong>
+?&gt;
+</pre>
+ Ceci nomme le test dans le constructeur
+ et ensuite ajoute à la fois nos scénarios
+ de test et un unique groupe en dessous.
+ Bien sûr nous pouvons ajouter plus d'un groupe à cet instant.
+ Nous pouvons maintenant invoquer les tests
+ à partir d'un autre fichier d'exécution...
+<pre>
+&lt;?php
+ require_once('file_group_test.php');
+ <strong>
+ $test = &amp;new FileGroupTest();
+ $test-&gt;run(new HtmlReporter());</strong>
+?&gt;
+</pre>
+ ...ou alors nous pouvons les grouper
+ dans un groupe de tests encore plus grand...
+<pre>
+&lt;?php
+ require_once('file_group_test.php');
+ <strong>
+ $test = &amp;new BigGroupTest('Big group');
+ $test-&gt;addTestCase(new FileGroupTest());
+ $test-&gt;addTestCase(...);
+ $test-&gt;run(new HtmlReporter());</strong>
+?&gt;
+</pre>
+ Si nous souhaitons lancer le groupe de tests original
+ sans utiliser ses petits fichiers d'exécution,
+ nous pouvons mettre le code du lanceur de test
+ derrière des barreaux quand nous créons chaque groupe.
+<pre>
+&lt;?php
+ class FileGroupTest extends GroupTest {
+ function FileGroupTest() {
+ $this-&gt;GroupTest('All file tests');
+ $test-&gt;addTestFile('file_test.php');
+ }
+ }
+ <strong>
+ if (! defined('RUNNER')) {
+ define('RUNNER', true);</strong>
+ $test = &amp;new FileGroupTest();
+ $test-&gt;run(new HtmlReporter());
+ }
+?&gt;
+</pre>
+ Cette approche exige aux barrières d'être activées
+ à l'inclusion du fichier de groupe de tests,
+ mais c'est quand même moins de tracas que beaucoup
+ de fichiers de lancement éparpillés.
+ Reste à inclure des barreaux identiques
+ au niveau supérieur afin de s'assurer que
+ le <span class="new_code">run()</span> ne sera lancé qu'une seule fois
+ à partir du script de haut niveau qui l'a invoqué.
+<pre>
+&lt;?php
+ define('RUNNER', true);
+
+ require_once('file_group_test.php');
+ $test = &amp;new BigGroupTest('Big group');
+ $test-&gt;addTestCase(new FileGroupTest());
+ $test-&gt;addTestCase(...);
+ $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ Comme les scénarios de test normaux,
+ un <span class="new_code">GroupTest</span> peut être chargé avec la méthode
+ <span class="new_code">GroupTest::addTestFile()</span>.
+<pre>
+&lt;?php
+ define('RUNNER', true);
+
+ $test = &amp;new BigGroupTest('Big group');<strong>
+ $test-&gt;addTestFile('file_group_test.php');
+ $test-&gt;addTestFile(...);</strong>
+ $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ </p>
+
+ <p><a class="target" name="heritage"><h2>Intégrer des scénarios de test hérités</h2></a></p>
+ <p>
+ Si vous avez déjà des tests unitaires pour votre code
+ ou alors si vous étendez des classes externes
+ qui ont déjà leurs propres tests, il y a peu de chances
+ pour que ceux-ci soient déjà au format SimpleTest.
+ Heureusement il est possible d'incorporer ces scénarios
+ de test en provenance d'autres testeurs unitaires
+ directement dans des groupes de test SimpleTest.
+ </p>
+ <p>
+ Par exemple, supposons que nous ayons
+ ce scénario de test prévu pour
+ <a href="http://sourceforge.net/projects/phpunit">PhpUnit</a>
+ dans le fichier <em>config_test.php</em>...
+<pre>
+<strong>class ConfigFileTest extends TestCase {
+ function ConfigFileTest() {
+ $this-&gt;TestCase('Config file test');
+ }
+
+ function testContents() {
+ $config = new ConfigFile('test.conf');
+ $this-&gt;assertRegexp('/me/', $config-&gt;getValue('username'));
+ }
+}</strong>
+</pre>
+ Le groupe de tests peut le reconnaître à partir
+ du moment où nous mettons l'adaptateur approprié
+ avant d'ajouter le fichier de test...
+<pre>
+&lt;?php
+ require_once('simpletest/unit_tester.php');
+ require_once('simpletest/reporter.php');<strong>
+ require_once('simpletest/adapters/phpunit_test_case.php');</strong>
+
+ $test = &amp;new GroupTest('All file tests');<strong>
+ $test-&gt;addTestFile('config_test.php');</strong>
+ $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ Il n'y a que deux adaptateurs,
+ l'autre est pour le paquet testeur unitaire de
+ <a href="http://pear.php.net/manual/en/package.php.phpunit.php">PEAR</a>...
+<pre>
+&lt;?php
+ require_once('simpletest/unit_tester.php');
+ require_once('simpletest/reporter.php');<strong>
+ require_once('simpletest/adapters/pear_test_case.php');</strong>
+
+ $test = &amp;new GroupTest('All file tests');<strong>
+ $test-&gt;addTestFile('some_pear_test_cases.php');</strong>
+ $test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ Les scénarios de test de PEAR peuvent être
+ librement mélangés avec ceux de SimpleTest
+ mais vous ne pouvez pas utiliser les assertions
+ de SimpleTest au sein des versions héritées
+ des scénarios de test. La raison ?
+ Une simple vérification que vous ne rendez pas
+ par accident vos scénarios de test complètement
+ dépendants de SimpleTest.
+ Peut-être que vous souhaitez publier
+ votre bibliothèque sur PEAR par exemple :
+ ça voudrait dire la livrer avec des scénarios de
+ test compatibles avec PEAR::PhpUnit.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ La page du projet SimpleTest sur
+ <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ La page de téléchargement de SimpleTest sur
+ <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/index.html b/vendors/simpletest/docs/fr/index.html
new file mode 100644
index 000000000..a13cb5787
--- /dev/null
+++ b/vendors/simpletest/docs/fr/index.html
@@ -0,0 +1,572 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>
+ Prise en main rapide de SimpleTest pour PHP -
+ Tests unitaire et objets fantaisie pour PHP
+ </title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Prise en main rapide de SimpleTest</h1>
+ This page...
+ <ul>
+<li>
+ <a href="#unit">Utiliser le testeur rapidement</a>
+ avec un exemple.
+ </li>
+<li>
+ <a href="#group">Groupes de tests</a>
+ pour tester en un seul clic.
+ </li>
+<li>
+ <a href="#mock">Utiliser les objets fantaisie</a>
+ pour faciliter les tests et gagner en contrôle.
+ </li>
+<li>
+ <a href="#web">Tester des pages web</a>
+ au niveau de l'HTML.
+ </li>
+</ul>
+<div class="content">
+
+ <p>
+ Le présent article présuppose que vous soyez familier avec
+ le concept de tests unitaires ainsi que celui de développement
+ web avec le langage PHP. Il s'agit d'un guide pour le nouvel
+ et impatient utilisateur de
+ <a href="https://sourceforge.net/project/showfiles.php?group_id=76550">SimpleTest</a>.
+ Pour une documentation plus complète, particulièrement si
+ vous découvrez les tests unitaires, consultez la
+ <a href="http://www.lastcraft.com/unit_test_documentation.php">documentation
+ en cours</a>, et pour des exemples de scénarios de test,
+ consultez le
+ <a href="http://www.lastcraft.com/first_test_tutorial.php">tutorial
+ sur les tests unitaires</a>.
+ </p>
+
+ <p><a class="target" name="unit"><h2>Utiliser le testeur rapidement</h2></a></p>
+ <p>
+ Parmi les outils de test pour logiciel, le testeur unitaire
+ est le plus proche du développeur. Dans un contexte de
+ développement agile, le code de test se place juste à côté
+ du code source étant donné que tous les deux sont écrits
+ simultanément. Dans ce contexte, SimpleTest aspire à être
+ une solution complète de test pour un développeur PHP et
+ s'appelle "Simple" parce qu'elle devrait être simple à
+ utiliser et à étendre. Ce nom n'était pas vraiment un bon
+ choix. Non seulement cette solution inclut toutes les
+ fonctions classiques qu'on est en droit d'attendre de la
+ part des portages de <a href="http://www.junit.org/">JUnit</a> et des <a href="http://sourceforge.net/projects/phpunit/">PHPUnit</a>,
+ mais elle inclut aussi les <a href="http://www.mockobjects.com/">objets fantaisie ou
+ "mock objects"</a>.
+ </p>
+ <p>
+ Ce qui rend cet outil immédiatement utile pour un développeur PHP,
+ c'est son navigateur web interne.
+ Il permet des tests qui parcourent des sites web, remplissent
+ des formulaires et testent le contenu des pages.
+ Etre capable d'écrire ces tests en PHP veut dire qu'il devient
+ facile d'écrire des tests de recette (ou d'intégration).
+ Un exemple serait de confirmer qu'un utilisateur a bien été ajouté
+ dans une base de données après s'être enregistré sur une site web.
+ </p>
+ <p>
+ La démonstration la plus rapide : l'exemple
+ </p>
+ <p>
+ Supposons que nous sommes en train de tester une simple
+ classe de log dans un fichier : elle s'appelle
+ <span class="new_code">Log</span> dans <em>classes/Log.php</em>. Commençons
+ par créer un script de test, appelé
+ <em>tests/log_test.php</em>. Son contenu est le suivant...
+<pre>
+&lt;?php
+<strong>require_once('simpletest/autorun.php');</strong>
+require_once('../classes/log.php');
+
+class TestOfLogging extends <strong>UnitTestCase</strong> {
+}
+?&gt;
+</pre>
+ Ici le répertoire <em>simpletest</em> est soit dans le
+ dossier courant, soit dans les dossiers pour fichiers
+ inclus. Vous auriez à éditer ces arborescences suivant
+ l'endroit où vous avez installé SimpleTest.
+ Le fichier "autorun.php" fait plus que juste inclure
+ les éléments de SimpleTest : il lance aussi les tests pour nous.
+ </p>
+ <p>
+ <span class="new_code">TestOfLogging</span> est notre premier scénario de test
+ et il est pour l'instant vide.
+ Chaque scénario de test est une classe qui étend une des classes
+ de base de SimpleTest. Nous pouvons avoir autant de classes de ce type
+ que nous voulons.
+ </p>
+ <p>
+ Avec ces trois lignes d'échafaudage
+ l'inclusion de notre classe <span class="new_code">Log</span>, nous avons une suite
+ de tests. Mais pas encore de test !
+ </p>
+ <p>
+ Pour notre premier test, supposons que la classe <span class="new_code">Log</span>
+ prenne le nom du fichier à écrire au sein du constructeur,
+ et que nous avons un répertoire temporaire dans lequel placer
+ ce fichier.
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+require_once('../classes/log.php');
+
+class TestOfLogging extends UnitTestCase {
+ function <strong>testLogCreatesNewFileOnFirstMessage()</strong> {
+ @unlink('/temp/test.log');
+ $log = new Log('/temp/test.log');
+ <strong>$this-&gt;assertFalse(file_exists('/temp/test.log'));</strong>
+ $log-&gt;message('Should write this to a file');
+ <strong>$this-&gt;assertTrue(file_exists('/temp/test.log'));</strong>
+ }
+}
+?&gt;
+</pre>
+ Au lancement du scénario de test, toutes les méthodes qui
+ commencent avec la chaîne <span class="new_code">test</span> sont
+ identifiées puis exécutées.
+ Si la méthode commence par <span class="new_code">test</span>, c'est un test.
+ Remarquez bien le nom très long de notre exemple :
+ <span class="new_code">testLogCreatesNewFileOnFirstMessage()</span>.
+ C'est bel et bien délibéré : ce style est considéré désirable
+ et il rend la sortie du test plus lisible.
+ </p>
+ <p>
+ D'ordinaire nous avons bien plusieurs méthodes de tests.
+ Mais ce sera pour plus tard.
+ </p>
+ <p>
+ Les assertions dans les
+ méthodes de test envoient des messages vers le framework de
+ test qui affiche immédiatement le résultat. Cette réponse
+ immédiate est importante, non seulement lors d'un crash
+ causé par le code, mais aussi de manière à rapprocher
+ l'affichage de l'erreur au plus près du scénario de test
+ concerné via un appel à <span class="new_code">print</span>code&gt;.
+ </p>
+ <p>
+ Pour voir ces résultats lançons effectivement les tests.
+ Aucun autre code n'est nécessaire, il suffit d'ouvrir
+ la page dans un navigateur.
+ </p>
+ <p>
+ En cas échec, l'affichage ressemble à...
+ <div class="demo">
+ <h1>TestOfLogging</h1>
+ <span class="fail">Fail</span>: testcreatingnewfile-&gt;True assertion failed.<br>
+ <div style="padding: 8px; margin-top: 1em; background-color: red; color: white;">1/1 test cases complete.
+ <strong>1</strong> passes and <strong>1</strong> fails.</div>
+ </div>
+ ...et si ça passe, on obtient...
+ <div class="demo">
+ <h1>TestOfLogging</h1>
+ <div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete.
+ <strong>2</strong> passes and <strong>0</strong> fails.</div>
+ </div>
+ Et si vous obtenez ça...
+ <div class="demo">
+ <b>Fatal error</b>: Failed opening required '../classes/log.php' (include_path='') in <b>/home/marcus/projects/lastcraft/tutorial_tests/Log/tests/log_test.php</b> on line <b>7</b>
+ </div>
+ c'est qu'il vous manque le fichier <em>classes/Log.php</em>
+ qui pourrait ressembler à :
+<pre>
+&lt;?php<strong>
+class Log {
+ function Log($file_path) {
+ }
+
+ function message() {
+ }
+}</strong>
+?&gt;
+</pre>
+ C'est largement plus sympathique d'écrire le code après le test.
+ Plus que sympatique même - cette technique s'appelle
+ "Développement Piloté par les Tests" ou
+ "Test Driven Development" en anglais.
+ </p>
+ <p>
+ Pour plus de renseignements sur le testeur, voyez la
+ <a href="unit_test_documentation.html">documentation pour les tests de régression</a>.
+ </p>
+
+ <p><a class="target" name="group"><h2>Construire des groupes de tests</h2></a></p>
+ <p>
+ Il est peu probable que dans une véritable application on
+ ait uniquement besoin de passer un seul scénario de test.
+ Cela veut dire que nous avons besoin de grouper les
+ scénarios dans un script de test qui peut, si nécessaire,
+ lancer tous les tests de l'application.
+ </p>
+ <p>
+ Notre première étape est de créer un nouveau fichier appelé
+ <em>tests/all_tests.php</em> et d'y inclure le code suivant...
+<pre>
+&lt;?php
+<strong>require_once('simpletest/autorun.php');</strong>
+
+class AllTests extends <strong>TestSuite</strong> {
+ function AllTests() {
+ $this-&gt;TestSuite(<strong>'All tests'</strong>);
+ <strong>$this-&gt;addFile('log_test.php');</strong>
+ }
+}
+?&gt;
+</pre>
+ L'inclusion de "autorun" permettra à notre future suite
+ de tests d'être lancée juste en invoquant ce script.
+ </p>
+ <p>
+ La sous-classe <span class="new_code">TestSuite</span> doit chaîner
+ son constructeur. Cette limitation sera supprimée dans
+ les versions à venir.
+ </p>
+ <p>
+ The method <span class="new_code">TestSuite::addFile()</span>
+ will include the test case file and read any new classes
+ that are descended from <span class="new_code">SimpleTestCase</span>.
+
+ Cette méthode <span class="new_code">TestSuite::addTestFile()</span> va
+ inclure le fichier de scénarios de test et lire parmi
+ toutes les nouvelles classes créées celles qui sont issues
+ de <span class="new_code">SimpleTestCase</span>.
+ <span class="new_code">UnitTestCase</span> est juste un exemple de classe dérivée
+ depuis <span class="new_code">SimpleTestCase</span> et vous pouvez créer les vôtres.
+ <span class="new_code">TestSuite::addFile()</span> peut aussi inclure d'autres suites.
+ </p>
+ <p>
+ La classe ne sera pas encore instanciée.
+ Quand la suite de tests est lancée, elle construira chaque instance
+ une fois le test atteint, et le détuira juste ensuite.
+ Cela veut dire que le constructeur n'est lancé qu'une fois avant
+ chaque initialisation de ce scénario de test et que le destructeur
+ est lui aussi lancé avant que le test suivant ne commence.
+ </p>
+ <p>
+ Il est commun de grouper des scénarios de test dans des super-classes
+ qui ne sont pas sensées être lancées, mais qui deviennent une classe de base
+ pour d'autres tests.
+ Pour que "autorun" fonctionne proprement les fichiers
+ des scénarios de test ne devraient pas lancer aveuglement
+ d'autres extensions de scénarios de test qui ne lanceraient pas
+ effectivement des tests.
+ Cela pourrait aboutir à un mauvais comptages des scénarios de test
+ pendant la procédure.
+ Pas vraiement un problème majeure, mais pour éviter cet inconvénient
+ il suffit de marquer vos classes de base comme <span class="new_code">abstract</span>.
+ SimpleTest ne lance pas les classes abstraites. Et si vous utilisez encore
+ PHP4 alors une directive <span class="new_code">SimpleTestOptions::ignore()</span>
+ dans votre fichier de scénario de test aura le même effet.
+ </p>
+ <p>
+ Par ailleurs, le fichier avec le scénario de test ne devrait pas
+ avoir été inclus ailleurs. Sinon aucun scénario de test
+ ne sera inclus à ce groupe.
+ Ceci pourrait se transformer en un problème plus grave :
+ si des fichiers ont déjà été inclus par PHP alors la méthode
+ <span class="new_code">TestSuite::addFile()</span> ne les détectera pas.
+ </p>
+ <p>
+ Pour afficher les résultats, il est seulement nécessaire
+ d'invoquer <em>tests/all_tests.php</em> à partir du serveur
+ web.
+ </p>
+ <p>
+ Pour plus de renseignements des groupes de tests, voyez le
+ <a href="group_test_documentation.html">documentation sur le groupement des tests</a>.
+ </p>
+
+ <p><a class="target" name="mock"><h2>Utiliser les objets fantaisie</h2></a></p>
+ <p>
+ Avançons un peu plus dans le futur.
+ </p>
+ <p>
+ Supposons que notre class logging soit testée et terminée.
+ Supposons aussi que nous testons une autre classe qui ait
+ besoin d'écrire des messages de log, disons
+ <span class="new_code">SessionPool</span>. Nous voulons tester une méthode
+ qui ressemblera probablement à quelque chose comme...
+<pre><strong>
+class SessionPool {
+ ...
+ function logIn($username) {
+ ...
+ $this-&gt;_log-&gt;message('User $username logged in.');
+ ...
+ }
+ ...
+}
+</strong>
+</pre>
+ Avec le concept de "réutilisation de code" comme fil
+ conducteur, nous utilisons notre class <span class="new_code">Log</span>. Un
+ scénario de test classique ressemblera peut-être à...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+require_once('../classes/log.php');
+<strong>require_once('../classes/session_pool.php');</strong>
+
+class <strong>TestOfSessionLogging</strong> extends UnitTestCase {
+
+ function setUp() {
+ <strong>@unlink('/temp/test.log');</strong>
+ }
+
+ function tearDown() {
+ <strong>@unlink('/temp/test.log');</strong>
+ }
+
+ function testLoggingInIsLogged() {
+ <strong>$log = new Log('/temp/test.log');
+ $session_pool = &amp;new SessionPool($log);
+ $session_pool-&gt;logIn('fred');</strong>
+ $messages = file('/temp/test.log');
+ $this-&gt;assertEqual($messages[0], "User fred logged in.<strong>\n</strong>");
+ }
+}
+?&gt;
+</pre>
+ Nous expliquerons les méthodes <span class="new_code">setUp()</span>
+ et <span class="new_code">tearDown()</span> plus tard.
+ </p>
+ <p>
+ Le design de ce scénario de test n'est pas complètement
+ mauvais, mais on peut l'améliorer. Nous passons du temps à
+ tripoter les fichiers de log qui ne font pas partie de
+ notre test.
+ Pire, nous avons créé des liens de proximité
+ entre la classe <span class="new_code">Log</span> et ce test. Que se
+ passerait-il si nous n'utilisions plus de fichiers, mais la
+ bibliothèque <em>syslog</em> à la place ?
+
+ Cela veut dire que notre test <span class="new_code">TestOfSessionLogging</span>
+ enverra un échec alors même qu'il ne teste pas Logging.
+ </p>
+ <p>
+ Il est aussi fragile sur des petites retouches. Avez-vous
+ remarqué le retour chariot supplémentaire à la fin du
+ message ? A-t-il été ajouté par le loggueur ? Et si il
+ ajoutait aussi un timestamp ou d'autres données ?
+ </p>
+ <p>
+ L'unique partie à tester réellement est l'envoi d'un
+ message précis au loggueur.
+ Nous pouvons réduire le couplage en
+ créant une fausse classe de logging : elle ne fait
+ qu'enregistrer le message pour le test, mais ne produit
+ aucun résultat. Sauf qu'elle doit ressembler exactement à
+ l'original.
+ </p>
+ <p>
+ Si l'objet fantaisie n'écrit pas dans un fichier alors nous
+ nous épargnons la suppression du fichier avant et après le
+ test. Nous pourrions même nous épargner quelques lignes de
+ code supplémentaires si l'objet fantaisie pouvait exécuter
+ l'assertion.
+ <p>
+ </p>
+ Trop beau pour être vrai ? Pas vraiement on peut créer un tel
+ objet très facilement...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+require_once('../classes/log.php');
+require_once('../classes/session_pool.php');
+
+<strong>Mock::generate('Log');</strong>
+
+class TestOfSessionLogging extends UnitTestCase {
+
+ function testLoggingInIsLogged() {<strong>
+ $log = &amp;new MockLog();
+ $log-&gt;expectOnce('message', array('User fred logged in.'));</strong>
+ $session_pool = &amp;new SessionPool(<strong>$log</strong>);
+ $session_pool-&gt;logIn('fred');
+ }
+}
+?&gt;
+</pre>
+ L'appel <span class="new_code">Mock::generate()</span> a généré
+ une nouvelle classe appelé <span class="new_code">MockLog</span>.
+ Cela ressemble à un clone identique, sauf que nous pouvons
+ y adjoindre du code de test.
+ C'est ce que fait <span class="new_code">expectOnce()</span>.
+ Cela dit que si <span class="new_code">message()</span> m'est appelé,
+ il a intérêt à l'être avec le paramètre
+ "User fred logged in.".
+ </p>
+ <p>
+ L'appel <span class="new_code">tally()</span> est nécessaire pour annoncer à
+ l'objet fantaisie qu'il n'y aura plus d'appels ultérieurs.
+ Sans ça l'objet fantaisie pourrait attendre pendant une
+ éternité l'appel de la méthode sans jamais prévenir le
+ scénario de test. Les autres tests sont déclenchés
+ automatiquement quand l'appel à <span class="new_code">message()</span> est
+ invoqué sur l'objet <span class="new_code">MockLog</span> par le code
+ <span class="new_code">SessionPool::logIn()</span>.
+ L'appel <span class="new_code">mock</span> va déclencher une comparaison des
+ paramètres et ensuite envoyer le message "pass" ou "fail"
+ au test pour l'affichage. Des jokers peuvent être inclus
+ pour ne pas avoir à tester tous les paramètres d'un appel
+ alors que vous ne souhaitez qu'en tester un.
+ </p>
+ <p>
+ Les objets fantaisie dans la suite SimpleTest peuvent avoir
+ un ensemble de valeurs de sortie arbitraires, des séquences
+ de sorties, des valeurs de sortie sélectionnées à partir
+ des arguments d'entrée, des séquences de paramètres
+ attendus et des limites sur le nombre de fois qu'une
+ méthode peut être invoquée.
+ </p>
+ <p>
+ Pour que ce test fonctionne la librairie avec les objets
+ fantaisie doit être incluse dans la suite de tests, par
+ exemple dans <em>all_tests.php</em>.
+ </p>
+ <p>
+ Pour plus de renseignements sur les objets fantaisie, voyez le
+ <a href="mock_objects_documentation.html">documentation sur les objets fantaisie</a>.
+ </p>
+
+ <p><a class="target" name="web"><h2>Tester une page web</h2></a></p>
+ <p>
+ Une des exigences des sites web, c'est qu'ils produisent
+ des pages web. Si vous construisez un projet de A à Z et
+ que vous voulez intégrer des tests au fur et à mesure alors
+ vous voulez un outil qui puisse effectuer une navigation
+ automatique et en examiner le résultat. C'est le boulot
+ d'un testeur web.
+ </p>
+ <p>
+ Effectuer un test web via SimpleTest reste assez primitif :
+ il n'y a pas de javascript par exemple.
+ La plupart des autres opérations d'un navigateur sont simulées.
+ </p>
+ <p>
+ Pour vous donner une idée, voici un exemple assez trivial :
+ aller chercher une page web,
+ à partir de là naviguer vers la page "about"
+ et finalement tester un contenu déterminé par le client.
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+<strong>require_once('simpletest/web_tester.php');</strong>
+
+class TestOfAbout extends <strong>WebTestCase</strong> {
+ function testOurAboutPageGivesFreeReignToOurEgo() {
+ <strong>$this-&gt;get('http://test-server/index.php');
+ $this-&gt;click('About');
+ $this-&gt;assertTitle('About why we are so great');
+ $this-&gt;assertText('We are really great');</strong>
+ }
+}
+?&gt;
+</pre>
+ Avec ce code comme test de recette, vous pouvez vous
+ assurer que le contenu corresponde toujours aux
+ spécifications à la fois des développeurs et des autres
+ parties prenantes au projet.
+ </p>
+ <p>
+ Vous pouvez aussi naviguer à travers des formulaires...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');
+require_once('simpletest/web_tester.php');
+
+class TestOfRankings extends WebTestCase {
+ function testWeAreTopOfGoogle() {
+ $this-&gt;get('http://google.com/');
+ $this-&gt;setField('q', 'simpletest');
+ $this-&gt;click("I'm Feeling Lucky");
+ $this-&gt;assertTitle('SimpleTest - Unit Testing for PHP');
+ }
+}
+?&gt;
+</pre>
+ ...même si cela pourrait constituer une violation
+ des documents juridiques de Google(tm).
+ </p>
+ <p>
+ Pour plus de renseignements sur comment tester une page web, voyez la
+ <a href="web_tester_documentation.html">documentation sur tester des scripts web</a>.
+ </p>
+ <p>
+ <a href="http://sourceforge.net/projects/simpletest/"><img src="http://sourceforge.net/sflogo.php?group_id=76550&amp;type=5" width="210" height="62" border="0" alt="SourceForge.net Logo"></a>
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ <a href="https://sourceforge.net/project/showfiles.php?group_id=76550&amp;release_id=153280">Télécharger PHP Simple Test</a>
+ depuis <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ L'<a href="http://simpletest.org/api/">API de SimpleTest pour développeur</a>
+ donne tous les détails sur les classes et assertions existantes.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/mock_objects_documentation.html b/vendors/simpletest/docs/fr/mock_objects_documentation.html
new file mode 100644
index 000000000..c03ac611f
--- /dev/null
+++ b/vendors/simpletest/docs/fr/mock_objects_documentation.html
@@ -0,0 +1,778 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Documentation SimpleTest : les objets fantaise</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Documentation sur les objets fantaisie</h1>
+ This page...
+ <ul>
+<li>
+ <a href="#quoi">Que sont les objets fantaisie ?</a>
+ </li>
+<li>
+ <a href="#creation">Créer des objets fantaisie</a>.
+ </li>
+<li>
+ <a href="#bouchon">L'objet fantaisie - acteur</a> ou bouchon.
+ </li>
+<li>
+ <a href="#attentes">L'objet fantaisie - critique</a> avec des attentes.
+ </li>
+<li>
+ <a href="#approches">D'autres approches</a>
+ y compris des librairies d'objets fantaisie.
+ </li>
+<li>
+ Utiliser les objets fantaisie avec
+ <a href="#autres_testeurs">d'autres testeurs unitaires</a>.
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="quoi"><h2>Que sont les objets fantaisie ?</h2></a></p>
+ <p>
+ Les objets fantaisie - ou "mock objects" en anglais -
+ ont deux rôles pendant un scénario de test : acteur et critique.
+ </p>
+ <p>
+ Le comportement d'acteur est celui de simuler
+ des objets difficiles à initialiser ou trop consommateurs
+ en temps pendant un test.
+ Le cas classique est celui de la connexion à une base de données.
+ Mettre sur pied une base de données de test au lancement
+ de chaque test ralentirait considérablement les tests
+ et en plus exigerait l'installation d'un moteur
+ de base de données ainsi que des données sur la machine de test.
+ Si nous pouvons simuler la connexion
+ et renvoyer des données à notre guise
+ alors non seulement nous gagnons en pragmatisme
+ sur les tests mais en sus nous pouvons nourrir
+ notre base avec des données falsifiées
+ et voir comment il répond. Nous pouvons
+ simuler une base de données en suspens ou
+ d'autres cas extrêmes sans avoir à créer
+ une véritable panne de base de données.
+ En d'autres termes nous pouvons gagner
+ en contrôle sur l'environnement de test.
+ </p>
+ <p>
+ Si les objets fantaisie ne se comportaient que comme
+ des acteurs alors on les connaîtrait sous le nom de
+ <a href="server_stubs_documentation.html">bouchons serveur</a>.
+ </p>
+ <p>
+ Cependant non seulement les objets fantaisie jouent
+ un rôle (en fournissant à la demande les valeurs requises)
+ mais en plus ils sont aussi sensibles aux messages qui
+ leur sont envoyés (par le biais d'attentes).
+ En posant les paramètres attendus d'une méthode
+ ils agissent comme des gardiens :
+ un appel sur eux doit être réalisé correctement.
+ Si les attentes ne sont pas atteintes ils nous épargnent
+ l'effort de l'écriture d'une assertion de test avec
+ échec en réalisant cette tâche à notre place.
+ Dans le cas d'une connexion à une base de données
+ imaginaire ils peuvent tester si la requête, disons SQL,
+ a bien été formé par l'objet qui utilise cette connexion.
+ Mettez-les sur pied avec des attentes assez précises
+ et vous verrez que vous n'aurez presque plus d'assertion à écrire manuellement.
+ </p>
+
+ <p><a class="target" name="creation"><h2>Créer des objets fantaisie</h2></a></p>
+ <p>
+ Comme pour la création des bouchons serveur, tout ce dont
+ nous avons besoin c'est d'un classe existante.
+ La fameuse connexion à une base de données qui ressemblerait à...
+<pre>
+<strong>class DatabaseConnection {
+ function DatabaseConnection() {
+ }
+
+ function query() {
+ }
+
+ function selectQuery() {
+ }
+}</strong>
+</pre>
+ Cette classe n'a pas encore besoin d'être implémentée.
+ Pour en créer sa version fantaisie nous devons juste
+ inclure la librairie d'objet fantaisie puis lancer le générateur...
+<pre>
+<strong>require_once('simpletest/unit_tester.php');
+require_once('simpletest/mock_objects.php');
+require_once('database_connection.php');
+
+Mock::generate('DatabaseConnection');</strong>
+</pre>
+ Ceci génère une classe clone appelée <span class="new_code">MockDatabaseConnection</span>.
+ Nous pouvons désormais créer des instances de
+ cette nouvelle classe à l'intérieur même de notre scénario de test...
+<pre>
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/mock_objects.php');
+require_once('database_connection.php');
+
+Mock::generate('DatabaseConnection');
+<strong>
+class MyTestCase extends UnitTestCase {
+
+ function testSomething() {
+ $connection = &amp;new MockDatabaseConnection($this);
+ }
+}</strong>
+</pre>
+ Contrairement aux bouchons, le constructeur
+ d'une classe fantaisie a besoin d'une référence au scénario
+ de test pour pouvoir transmettre les succès
+ et les échecs pendant qu'il vérifie les attentes.
+ Concrètement ça veut dire que les objets fantaisie
+ ne peuvent être utilisés qu'au sein d'un scénario de test.
+ Malgré tout, cette puissance supplémentaire implique
+ que les bouchons ne sont que rarement utilisés
+ si des objets fantaisie sont disponibles.
+ </p>
+
+ <p><a class="target" name="bouchon"><h2>Objets fantaisie en action</h2></a></p>
+ <p>
+ La version fantaisie d'une classe contient
+ toutes les méthodes de l'originale.
+ De la sorte une opération comme
+ <span class="new_code">$connection-&gt;query()</span>
+ est encore possible.
+ Tout comme avec les bouchons, nous pouvons remplacer
+ la valeur nulle renvoyée par défaut...
+<pre>
+<strong>$connection-&gt;setReturnValue('query', 37);</strong>
+</pre>
+ Désormais à chaque appel de
+ <span class="new_code">$connection-&gt;query()</span>
+ nous recevons comme résultat 37.
+ Tout comme avec les bouchons nous pouvons utiliser
+ des jokers et surcharger le paramètre joker.
+ Nous pouvons aussi ajouter des méthodes supplémentaires
+ à l'objet fantaisie lors de sa génération
+ et lui choisir un nom de classe qui lui soit propre...
+<pre>
+<strong>Mock::generate('DatabaseConnection', 'MyMockDatabaseConnection', array('setOptions'));</strong>
+</pre>
+ Ici l'objet fantaisie se comportera comme
+ si <span class="new_code">setOptions()</span> existait dans la classe originale.
+ C'est pratique si une classe a utilisé le mécanisme
+ <span class="new_code">overload()</span> de PHP pour ajouter des méthodes dynamiques.
+ Vous pouvez créer des fantaisies spéciales pour simuler cette situation.
+ </p>
+ <p>
+ Tous les modèles disponibles avec les bouchons serveur
+ le sont également avec les objets fantaisie...
+<pre>
+class Iterator {
+ function Iterator() {
+ }
+
+ function next() {
+ }
+}
+</pre>
+ Une nouvelle fois, supposons que cet itérateur
+ ne retourne que du texte jusqu'au moment où il atteint
+ son terme, quand il renvoie <span class="new_code">false</span>.
+ Nous pouvons le simuler avec...
+<pre>
+Mock::generate('Iterator');
+
+class IteratorTest extends UnitTestCase() {
+
+ function testASequence() {<strong>
+ $iterator = &amp;new MockIterator($this);
+ $iterator-&gt;setReturnValue('next', false);
+ $iterator-&gt;setReturnValueAt(0, 'next', 'First string');
+ $iterator-&gt;setReturnValueAt(1, 'next', 'Second string');</strong>
+ ...
+ }
+}
+</pre>
+ Au moment du premier appel à <span class="new_code">next()</span>
+ sur l'itérateur fantaisie il renverra tout d'abord
+ "First string", puis ce sera au tour de
+ "Second string" au deuxième appel
+ et ensuite pour tout appel suivant <span class="new_code">false</span>
+ sera renvoyé.
+ Ces valeurs renvoyées successivement sont prioritaires
+ sur la valeur constante retournée.
+ Cette dernière est un genre de valeur par défaut si vous voulez.
+ </p>
+ <p>
+ Reprenons aussi le conteneur d'information bouchonné
+ avec des pairs clef / valeur...
+<pre>
+class Configuration {
+ function Configuration() {
+ }
+
+ function getValue($key) {
+ }
+}
+</pre>
+ Il s'agit là d'une situation classique
+ d'utilisation d'objets fantaisie étant donné
+ que la configuration peut varier grandement de machine à machine :
+ ça contraint fortement la fiabilité de nos tests
+ si nous l'utilisons directement.
+ Le problème est que toutes les données nous parviennent
+ à travers la méthode <span class="new_code">getValue()</span>
+ et que nous voulons des résultats différents pour des clefs différentes.
+ Heureusement les objets fantaisie ont un système de filtrage...
+<pre>
+<strong>$config = &amp;new MockConfiguration($this);
+$config-&gt;setReturnValue('getValue', 'primary', array('db_host'));
+$config-&gt;setReturnValue('getValue', 'admin', array('db_user'));
+$config-&gt;setReturnValue('getValue', 'secret', array('db_password'));</strong>
+</pre>
+ Le paramètre en plus est une liste d'arguments
+ à faire correspondre. Dans ce cas nous essayons
+ de faire correspondre un unique argument :
+ en l'occurrence la clef recherchée.
+ Maintenant que la méthode <span class="new_code">getValue()</span>
+ est invoquée sur l'objet fantaisie...
+<pre>
+$config-&gt;getValue('db_user')
+</pre>
+ ...elle renverra "admin".
+ Elle le trouve en essayant de faire correspondre
+ les arguments entrants dans sa liste
+ d'arguments sortants les uns après les autres
+ jusqu'au moment où une correspondance exacte est atteinte.
+ </p>
+ <p>
+ Il y a des fois où vous souhaitez
+ qu'un objet spécifique soit servi par la fantaisie
+ plutôt qu'une copie.
+ De nouveau c'est identique au mécanisme des bouchons serveur...
+<pre>
+class Thing {
+}
+
+class Vector {
+ function Vector() {
+ }
+
+ function get($index) {
+ }
+}
+</pre>
+ Dans ce cas vous pouvez placer une référence
+ dans la liste renvoyée par l'objet fantaisie...
+<pre>
+$thing = new Thing();<strong>
+$vector = &amp;new MockVector($this);
+$vector-&gt;setReturnReference('get', $thing, array(12));</strong>
+</pre>
+ Avec cet arrangement vous savez qu'à chaque appel
+ de <span class="new_code">$vector-&gt;get(12)</span>
+ le même <span class="new_code">$thing</span> sera renvoyé.
+ </p>
+
+ <p><a class="target" name="attentes"><h2>Objets fantaisie en critique</h2></a></p>
+ <p>
+ Même si les bouchons serveur vous isolent
+ du désordre du monde réel, il ne s'agit là que
+ de la moitié du bénéfice potentiel.
+ Vous pouvez avoir une classe de test recevant
+ les messages ad hoc, mais est-ce que votre nouvelle classe
+ renvoie bien les bons ?
+ Le tester peut devenir cafouillis sans une librairie d'objets fantaisie.
+ </p>
+ <p>
+ Pour l'exemple, prenons une classe <span class="new_code">SessionPool</span>
+ à laquelle nous allons ajouter une fonction de log.
+ Plutôt que de complexifier la classe originale,
+ nous souhaitons ajouter ce comportement avec un décorateur (GOF).
+ Pour l'instant le code de <span class="new_code">SessionPool</span> ressemble à...
+<pre>
+<strong>class SessionPool {
+ function SessionPool() {
+ ...
+ }
+
+ function &amp;findSession($cookie) {
+ ...
+ }
+ ...
+}
+
+class Session {
+ ...
+}</strong>
+
+</pre>
+ Alors que pour notre code de log, nous avons...
+<pre><strong>
+class Log {
+ function Log() {
+ ...
+ }
+
+ function message() {
+ ...
+ }
+}
+
+class LoggingSessionPool {
+ function LoggingSessionPool(&amp;$session_pool, &amp;$log) {
+ ...
+ }
+
+ function &amp;findSession($cookie) {
+ ...
+ }
+ ...
+}</strong>
+</pre>
+ Dans tout ceci, la seule classe à tester est
+ <span class="new_code">LoggingSessionPool</span>. En particulier,
+ nous voulons vérifier que la méthode <span class="new_code">findSession()</span>
+ est appelée avec le bon identifiant de session au sein du cookie
+ et qu'elle renvoie bien le message "Starting session $cookie"
+ au loggueur.
+ </p>
+ <p>
+ Bien que nous ne testions que quelques lignes
+ de code de production, voici la liste des choses
+ à faire dans un scénario de test conventionnel :
+ <ol>
+ <li>Créer un objet de log.</li>
+ <li>Indiquer le répertoire d'écriture du fichier de log.</li>
+ <li>Modifier les droits sur le répertoire pour pouvoir y écrire le fichier.</li>
+ <li>Créer un objet <span class="new_code">SessionPool</span>.</li>
+ <li>Lancer une session, ce qui demande probablement pas mal de choses.</li>
+ <li>Invoquer <span class="new_code">findSession()</span>.</li>
+ <li>Lire le nouvel identifiant de session (en espérant qu'il existe un accesseur !).</li>
+ <li>Lever une assertion de test pour vérifier que cet identifiant correspond bien au cookie.</li>
+ <li>Lire la dernière ligne du fichier de log.</li>
+ <li>Supprimer avec une (ou plusieurs) expression rationnelle les timestamps de log en trop, etc.</li>
+ <li>Vérifier que le message de session est bien dans le texte.</li>
+ </ol>
+ Pas étonnant que les développeurs détestent
+ écrire des tests quand ils sont aussi ingrats.
+ Pour rendre les choses encore pire, à chaque fois que
+ le format de log change ou bien que la méthode de création
+ des sessions change, nous devons réécrire une partie
+ des tests alors même qu'ils ne testent pas ces parties
+ du système. Nous sommes en train de préparer
+ le cauchemar pour les développeurs de ces autres classes.
+ </p>
+ <p>
+ A la place, voici la méthode complète pour le test
+ avec un peu de magie via les objets fantaisie...
+<pre>
+Mock::generate('Session');
+Mock::generate('SessionPool');
+Mock::generate('Log');
+
+class LoggingSessionPoolTest extends UnitTestCase {
+ ...
+ function testFindSessionLogging() {<strong>
+ $session = &amp;new MockSession($this);
+ $pool = &amp;new MockSessionPool($this);
+ $pool-&gt;setReturnReference('findSession', $session);
+ $pool-&gt;expectOnce('findSession', array('abc'));
+
+ $log = &amp;new MockLog($this);
+ $log-&gt;expectOnce('message', array('Starting session abc'));
+
+ $logging_pool = &amp;new LoggingSessionPool($pool, $log);
+ $this-&gt;assertReference($logging_pool-&gt;findSession('abc'), $session);
+ $pool-&gt;tally();
+ $log-&gt;tally();</strong>
+ }
+}
+</pre>
+ Commençons par écrire une session simulacre.
+ Pas la peine d'être trop pointilleux avec
+ celle-ci puisque la vérification de la session
+ désirée est effectuée ailleurs. Nous avons
+ juste besoin de vérifier qu'il s'agit de
+ la même que celle qui vient du groupe commun des sessions.
+ </p>
+ <p>
+ <span class="new_code">findSession()</span> est un méthode fabrique
+ dont la simulation est décrite <a href="#stub">plus haut</a>.
+ Le point de départ vient avec le premier appel
+ <span class="new_code">expectOnce()</span>. Cette ligne indique
+ qu'à chaque fois que <span class="new_code">findSession()</span>
+ est invoqué sur l'objet fantaisie, il vérifiera
+ les arguments entrant. S'il ne reçoit
+ que la chaîne "abc" en tant qu'argument
+ alors un succès est envoyé au testeur unitaire,
+ sinon c'est un échec qui est généré.
+ Il s'agit là de la partie qui teste si nous avons bien
+ la bonne session. La liste des arguments suit
+ une format identique à celui qui précise les valeurs renvoyées.
+ Vous pouvez avoir des jokers et des séquences
+ et l'ordre de l'évaluation restera le même.
+ </p>
+ <p>
+ Si l'appel n'est jamais effectué alors n'est généré
+ ni le succès, ni l'échec. Pour contourner cette limitation,
+ nous devons dire à l'objet fantaisie que le test est terminé :
+ il pourra alors décider si les attentes ont été répondues.
+ L'assertion du testeur unitaire de ceci est déclenchée
+ par l'appel <span class="new_code">tally()</span> à la fin du test.
+ </p>
+ <p>
+ Nous utilisons le même modèle pour mettre sur pied
+ le loggueur fantaisie. Nous lui indiquons que <span class="new_code">message()</span>
+ devrait être invoqué une fois et une fois seulement
+ avec l'argument "Starting session abc".
+ En testant les arguments d'appel, plutôt que ceux de sortie du loggueur,
+ nous isolons le test de tout modification dans le loggueur.
+ </p>
+ <p>
+ Nous commençons le lancement nos tests à la création
+ du nouveau <span class="new_code">LoggingSessionPool</span>
+ et nous l'alimentons avec nos objets fantaisie juste créés.
+ Désormais tout est sous contrôle. Au final nous confirmons
+ que le <span class="new_code">$session</span> donné au décorateur est bien
+ celui reçu et prions les objets fantaisie de lancer leurs
+ tests de comptage d'appel interne avec les appels <span class="new_code">tally()</span>.
+ </p>
+ <p>
+ Il y a encore pas mal de code de test, mais ce code est très strict.
+ S'il vous semble encore terrifiant il l'est bien moins
+ que si nous avions essayé sans les objets fantaisie
+ et ce test en particulier, interactions plutôt que résultat,
+ est toujours plus difficile à mettre en place.
+ Le plus souvent vous aurez besoin de tester des situations
+ plus complexes sans ce niveau ni cette précision.
+ En outre une partie peut être remaniée avec la méthode
+ de scénario de test <span class="new_code">setUp()</span>.
+ </p>
+ <p>
+ Voici la liste complète des attentes que vous pouvez
+ placer sur un objet fantaisie avec
+ <a href="http://www.lastcraft.com/simple_test.php">SimpleTest</a>...
+ <table>
+<thead>
+ <tr>
+<th>Attente</th>
+<th>Nécessite <span class="new_code">tally()</span>
+</th>
+</tr>
+ </thead>
+<tbody>
+<tr>
+ <td><span class="new_code">expectArguments($method, $args)</span></td>
+ <td style="text-align: center">Non</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectArgumentsAt($timing, $method, $args)</span></td>
+ <td style="text-align: center">Non</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectCallCount($method, $count)</span></td>
+ <td style="text-align: center">Oui</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectMaximumCallCount($method, $count)</span></td>
+ <td style="text-align: center">Non</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectMinimumCallCount($method, $count)</span></td>
+ <td style="text-align: center">Oui</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectNever($method)</span></td>
+ <td style="text-align: center">Non</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectOnce($method, $args)</span></td>
+ <td style="text-align: center">Oui</td>
+ </tr>
+ <tr>
+ <td><span class="new_code">expectAtLeastOnce($method, $args)</span></td>
+ <td style="text-align: center">Oui</td>
+ </tr>
+ </tbody>
+</table>
+ Où les paramètres sont...
+ <dl>
+ <dt class="new_code">$method</dt>
+ <dd>Le nom de la méthode, sous la forme d'une chaîne,
+ à laquelle la condition doit être appliquée.</dd>
+ <dt class="new_code">$args</dt>
+ <dd>
+ Les arguments sous la forme d'une liste.
+ Les jokers peuvent être inclus de la même manière
+ qu'avec <span class="new_code">setReturn()</span>.
+ Cet argument est optionnel pour <span class="new_code">expectOnce()</span>
+ et <span class="new_code">expectAtLeastOnce()</span>.
+ </dd>
+ <dt class="new_code">$timing</dt>
+ <dd>
+ Le seul point dans le temps pour tester
+ la condition. Le premier appel commence à zéro.
+ </dd>
+ <dt class="new_code">$count</dt>
+ <dd>Le nombre d'appels attendu.</dd>
+ </dl>
+ La méthode <span class="new_code">expectMaximumCallCount()</span>
+ est légèrement différente dans le sens où elle ne pourra
+ générer qu'un échec. Elle reste silencieuse
+ si la limite n'est jamais atteinte.
+ </p>
+ <p>
+ Par ailleurs si vous avez just un appel dans votre test,
+ vérifiez bien que vous utiliser
+ <span class="new_code">expectOnce</span>.<br>
+ Utiliser <span class="new_code">$mocked-&gt;expectAt(0, 'method', 'args);</span>
+ tout seul ne sera pas pris en compte :
+ la vérification des arguments et le comptage total
+ sont pour l'instant encore indépendant.
+ </p>
+ <p>
+ Comme avec les assertions dans les scénarios de test,
+ toutes ces attentes peuvent accepter une surcharge de
+ message sous la forme d'un paramètre supplémentaire.
+ Par ailleurs le message d'échec original peut être inclus
+ dans le résultat avec "%s".
+ </p>
+
+ <p><a class="target" name="approches"><h2>D'autres approches</h2></a></p>
+ <p>
+ Il existe trois approches pour créer des objets
+ fantaisie en comprenant celle utilisée par SimpleTest.
+ Les coder à la main en utilisant une classe de base,
+ les générer dans un fichier ou les générer dynamiquement à la volée.
+ </p>
+ <p>
+ Les objets fantaisie générés avec
+ <a href="simple_test.html">SimpleTest</a> sont dynamiques.
+ Ils sont créés à l'exécution dans la mémoire,
+ grâce à <span class="new_code">eval()</span>, plutôt qu'écrits dans un fichier.
+ Cette opération les rend facile à créer,
+ en une seule ligne, surtout par rapport à leur création
+ à la main dans une hiérarchie de classe parallèle.
+ Le problème avec ce comportement tient généralement
+ dans la mise en place des tests proprement dits.
+ Si les objets originaux changent les versions fantaisie
+ sur lesquels reposent les tests, une désynchronisation peut subvenir.
+ Cela peut aussi arriver avec l'approche en hiérarchie parallèle,
+ mais c'est détecté beaucoup plus vite.
+ </p>
+ <p>
+ Bien sûr, la solution est d'ajouter de véritables tests d'intégration.
+ Vous n'en avez pas besoin de beaucoup
+ et le côté pratique des objets fantaisie fait plus
+ que compenser la petite dose de test supplémentaire.
+ Vous ne pouvez pas avoir confiance dans du code qui
+ ne serait testé que par des objets fantaisie.
+ </p>
+ <p>
+ Si vous restez déterminé de construire des librairies
+ statiques d'objets fantaisie parce que vous souhaitez
+ émuler un comportement très spécifique,
+ vous pouvez y parvenir grâce au générateur de classe de SimpleTest.
+ Dans votre fichier librairie, par exemple
+ <em>mocks/connection.php</em> pour une connexion à une base de données,
+ créer un objet fantaisie et provoquer l'héritage
+ pour hériter pour surcharger des méthodes spéciales
+ ou ajouter des préréglages...
+<pre>
+&lt;?php
+ require_once('simpletest/mock_objects.php');
+ require_once('../classes/connection.php');
+<strong>
+ Mock::generate('Connection', 'BasicMockConnection');
+ class MockConnection extends BasicMockConnection {
+ function MockConnection(&amp;$test, $wildcard = '*') {
+ $this-&gt;BasicMockConnection($test, $wildcard);
+ $this-&gt;setReturn('query', false);
+ }
+ }</strong>
+?&gt;
+</pre>
+ L'appel <span class="new_code">generate</span> dit au générateur de classe
+ d'en créer une appelée <span class="new_code">BasicMockConnection</span>
+ plutôt que la plus courante <span class="new_code">MockConnection</span>.
+ Ensuite nous héritons à partir de celle-ci pour obtenir
+ notre version de <span class="new_code">MockConnection</span>.
+ En interceptant de cette manière nous pouvons ajouter
+ un comportement, ici transformer la valeur par défaut de
+ <span class="new_code">query()</span> en "false".
+ En utilisant le nom par défaut nous garantissons
+ que le générateur de classe fantaisie n'en recréera
+ pas une autre différente si il est invoqué ailleurs
+ dans les tests. Il ne créera jamais de classe
+ si elle existe déjà. Aussi longtemps que le fichier
+ ci-dessus est inclus avant alors tous les tests qui
+ généraient <span class="new_code">MockConnection</span> devraient
+ utiliser notre version à présent. Par contre si
+ nous avons une erreur dans l'ordre et que la librairie
+ de fantaisie en crée une d'abord alors la création
+ de la classe échouera tout simplement.
+ </p>
+ <p>
+ Utiliser cette astuce si vous vous trouvez avec beaucoup
+ de comportement en commun sur les objets fantaisie
+ ou si vous avez de fréquents problèmes d'intégration
+ plus tard dans les étapes de test.
+ </p>
+
+ <p><a class="target" name="autres_testeurs"><h2>Je pense que SimpleTest pue !</h2></a></p>
+ <p>
+ Mais au moment d'écrire ces lignes c'est le seul
+ à gérer les objets fantaisie, donc vous êtes bloqué avec lui ?
+ </p>
+ <p>
+ Non, pas du tout.
+ <a href="simple_test.html">SimpleTest</a> est une boîte à outils
+ et parmi ceux-ci on trouve les objets fantaisie
+ qui peuvent être utilisés indépendamment.
+ Supposons que vous avez votre propre testeur unitaire favori
+ et que tous vos tests actuels l'utilisent.
+ Prétendez que vous avez appelé votre tester unitaire PHPUnit
+ (c'est ce que tout le monde a fait) et que la classe principale
+ de test ressemble à...
+<pre>
+class PHPUnit {
+ function PHPUnit() {
+ }
+
+ function assertion($message, $assertion) {
+ }
+ ...
+}
+</pre>
+ La seule chose que la méthode <span class="new_code">assertion()</span> réalise,
+ c'est de préparer une sortie embellie alors le paramètre boolien
+ de l'assertion sert à déterminer s'il s'agit d'une erreur ou d'un succès.
+ Supposons qu'elle est utilisée de la manière suivante...
+<pre>
+$unit_test = new PHPUnit();
+$unit_test&gt;assertion('I hope this file exists', file_exists('my_file'));
+</pre>
+ Comment utiliser les objets fantaisie avec ceci ?
+ </p>
+ <p>
+ Il y a une méthode protégée sur la classe de base
+ des objets fantaisie : elle s'appelle <span class="new_code">_assertTrue()</span>.
+ En surchargeant cette méthode nous pouvons utiliser
+ notre propre format d'assertion.
+ Nous commençons avec une sous-classe, dans <em>my_mock.php</em>...
+<pre>
+<strong>&lt;?php
+ require_once('simpletest/mock_objects.php');
+
+ class MyMock extends SimpleMock() {
+ function MyMock(&amp;$test, $wildcard) {
+ $this-&gt;SimpleMock($test, $wildcard);
+ }
+
+ function _assertTrue($assertion, $message) {
+ $test = &amp;$this-&gt;getTest();
+ $test-&gt;assertion($message, $assertion);
+ }
+ }
+?&gt;</strong>
+</pre>
+ Maintenant une instance de <span class="new_code">MyMock</span>
+ créera un objet qui parle le même langage que votre testeur.
+ Bien sûr le truc c'est que nous créons jamais un tel objet :
+ le générateur s'en chargera. Nous avons juste besoin
+ d'une ligne de code supplémentaire pour dire au générateur
+ d'utiliser vos nouveaux objets fantaisie...
+<pre>
+&lt;?php
+ require_once('simpletst/mock_objects.php');
+
+ class MyMock extends SimpleMock() {
+ function MyMock($test, $wildcard) {
+ $this-&gt;SimpleMock(&amp;$test, $wildcard);
+ }
+
+ function _assertTrue($assertion, $message , &amp;$test) {
+ $test-&gt;assertion($message, $assertion);
+ }
+ }<strong>
+ SimpleTestOptions::setMockBaseClass('MyMock');</strong>
+?&gt;
+</pre>
+ A partir de maintenant vous avez juste à inclure
+ <em>my_mock.php</em> à la place de la version par défaut
+ <em>simple_mock.php</em> et vous pouvez introduire
+ des objets fantaisie dans votre suite de tests existants.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ L'article originel sur
+ <a href="http://www.mockobjects.com/">les objets fantaisie</a>.
+ </li>
+<li>
+ La page du projet SimpleTest sur
+ <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ La page d'accueil de SimpleTest sur
+ <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/overview.html b/vendors/simpletest/docs/fr/overview.html
new file mode 100644
index 000000000..3225b969a
--- /dev/null
+++ b/vendors/simpletest/docs/fr/overview.html
@@ -0,0 +1,318 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>
+ Aperçu et liste des fonctionnalités des testeurs unitaires PHP et web de SimpleTest PHP
+ </title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Apercu de SimpleTest</h1>
+ This page...
+ <ul>
+<li>
+ <a href="#resume">Résumé rapide</a> de l'outil SimpleTest pour PHP.
+ </li>
+<li>
+ <a href="#fonctionnalites">La liste des fonctionnalites</a>, à la fois présentes et à venir.
+ </li>
+<li>
+ Il y a beaucoup de <a href="#ressources">ressources sur les tests unitaires</a> sur le web.
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="resume"><h2>Qu'est-ce que SimpleTest ?</h2></a></p>
+ <p>
+ Le coeur de SimpleTest est un framework de test construit autour de classes de scénarios de test. Celles-ci sont écrites comme des extensions des classes premières de scénarios de test, chacune élargie avec des méthodes qui contiennent le code de test effectif. Les scripts de test de haut niveau invoque la méthode <span class="new_code">run()</span> à chaque scénario de test successivement. Chaque méthode de test est écrite pour appeler des assertions diverses que le développeur suppose être vraies, <span class="new_code">assertEqual()</span> par exemple. Si l'assertion est correcte, alors un succès est expédié au rapporteur observant le test, mais toute erreur déclenche une alerte et une description de la dissension.
+ </p>
+ <p>
+ Un <a href="unit_test_documentation.html">scénario de test</a> ressemble à...
+<pre>
+class <strong>MyTestCase</strong> extends UnitTestCase {
+ <strong>
+ function testLog() {
+ $log = &amp;new Log('my.log');
+ $log-&gt;message('Hello');
+ $this-&gt;assertTrue(file_exists('my.log'));
+ }</strong>
+}
+</pre>
+ </p>
+ <p>
+ Ces outils sont conçus pour le développeur. Les tests sont écrits en PHP directement, plus ou moins simultanément avec la construction de l'application elle-même. L'avantage d'utiliser PHP lui-même comme langage de test est qu'il n'y a pas de nouveau langage à apprendre, les tests peuvent commencer directement et le développeur peut tester n'importe quelle partie du code. Plus simplement, toutes les parties qui peuvent être accédées par le code de l'application peuvent aussi être accédées par le code de test si ils sont tous les deux dans le même langage.
+ </p>
+ <p>
+ Le type de scénario de test le plus simple est le <span class="new_code">UnitTestCase</span>. Cette classe de scénario de test inclut les tests standards pour l'égalité, les références et l'appariement de motifs (via les expressions rationnelles). Ceux-ci testent ce que vous seriez en droit d'attendre du résultat d'une fonction ou d'une méthode. Il s'agit du type de test le plus commun pendant le quotidien du développeur, peut-être 95% des scénarios de test.
+ </p>
+ <p>
+ La tâche ultime d'une application web n'est cependant pas de produire une sortie correcte à partir de méthodes ou d'objets, mais plutôt de produire des pages web. La classe <span class="new_code">WebTestCase</span> teste des pages web. Elle simule un navigateur web demandant une page, de façon exhaustive : cookies, proxies, connexions sécurisées, authentification, formulaires, cadres et la plupart des éléments de navigation. Avec ce type de scénario de test, le développeur peut garantir que telle ou telle information est présente dans la page et que les formulaires ainsi que les sessions sont gérés comme il faut.
+ </p>
+ <p>
+ Un <a href="web_tester_documentation.html">scénario de test web</a> ressemble à...
+<pre>
+class <strong>MySiteTest</strong> extends WebTestCase {
+ <strong>
+ function testHomePage() {
+ $this-&gt;get('http://www.my-site.com/index.php');
+ $this-&gt;assertTitle('My Home Page');
+ $this-&gt;clickLink('Contact');
+ $this-&gt;assertTitle('Contact me');
+ $this-&gt;assertWantedPattern('/Email me at/');
+ }</strong>
+}
+</pre>
+ </p>
+
+ <p><a class="target" name="fonctionnalites"><h2>Liste des fonctionnalites</h2></a></p>
+ <p>
+ Ci-dessous vous trouverez un canevas assez brut des fonctionnalités à aujourd'hui et pour demain, sans oublier leur date approximative de publication. J'ai bien peur qu'il soit modifiable sans pré-avis étant donné que les jalons dépendent beaucoup sur le temps disponible. Les trucs en vert ont été codés, mais pas forcément déjà rendus public. Si vous avez une besoin pressant pour une fonctionnalité verte mais pas encore publique alors vous devriez retirer le code directement sur le CVS chez SourceFourge. Une fonctionnalitée publiée est indiqué par "Fini".
+ <table>
+<thead>
+ <tr>
+<th>Fonctionnalité</th>
+<th>Description</th>
+<th>Publication</th>
+</tr>
+ </thead>
+<tbody>
+<tr>
+ <td>Scénariot de test unitaire</td>
+ <td>Les classes de test et assertions de base</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Affichage HTML</td>
+ <td>L'affichage le plus simple possible</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Autochargement des scénarios de test</td>
+ <td>Lire un fichier avec des scénarios de test et les charger dans un groupe de tests automatiquement</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Générateur de code d'objets fantaisie</td>
+ <td>Des objets capable de simuler d'autres objets, supprimant les dépendances dans les tests</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Bouchons serveur</td>
+ <td>Des objets fantaisie sans résultat attendu à utiliser à l'extérieur des scénarios de test, pour le prototypage par exemple.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Intégration d'autres testeurs unitaires</td>
+ <td>
+ La capacité de lire et simuler d'autres scénarios de test en provenance de PHPUnit et de PEAR::Phpunit.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Scénario de test web</td>
+ <td>Appariement basique de motifs dans une page téléchargée.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Analyse de page HTML</td>
+ <td>Permet de suivre les liens et de trouver la balise de titre</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Simulacre partiel</td>
+ <td>Simuler des parties d'une classe pour tester moins qu'une classe ou dans des cas complexes.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Gestion des cookies Web</td>
+ <td>Gestion correcte des cookies au téléchargement d'une page.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Suivi des redirections</td>
+ <td>Le téléchargement d'une page suit automatiquement une redirection 300.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Analyse d'un formulaire</td>
+ <td>La capacité de valider un formulaire simple et d'en lire les valeurs par défaut.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Interface en ligne de commande</td>
+ <td>Affiche le résultat des tests sans navigateur web.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Mise à nu des attentes d'une classe</td>
+ <td>Peut créer des tests précis avec des simulacres ainsi que des scénarios de test.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Sortie et analyse XML</td>
+ <td>Permet de tester sur plusieurs hôtes et d'intégrer des extensions d'acceptation de test.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Scénario de test en ligne de commande</td>
+ <td>Permet de tester des outils ou scripts en ligne de commande et de manier des fichiers.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Compatibilité avec PHP Documentor</td>
+ <td>Génération automatique et complète de la documentation au niveau des classes.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Interface navigateur</td>
+ <td>Mise à nu des niveaux bas de l'interface du navigateur web pour des scénarios de test plus précis.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Authentification HTTP</td>
+ <td>Téléchargement des pages web protégées avec une authentification basique seulement.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Boutons de navigation d'un navigateur</td>
+ <td>Arrière, avant et recommencer</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Support de SSL</td>
+ <td>Peut se connecter à des pages de type https.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Support de proxy</td>
+ <td>Peut se connecter via des proxys communs</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Support des cadres</td>
+ <td>Gère les cadres dans les scénarios de test web.</td>
+ <td style="color: green;">Fini</td>
+ </tr>
+ <tr>
+ <td>Test de l'upload de fichier</td>
+ <td>Peut simuler la balise input de type file</td>
+ <td style="color: red;">1.0.1</td>
+ </tr>
+ <tr>
+ <td>Amélioration sur la machinerie des rapports</td>
+ <td>Retouche sur la transmission des messages pour une meilleur coopération avec les IDEs</td>
+ <td style="color: red;">1.1</td>
+ </tr>
+ <tr>
+ <td>Amélioration de l'affichage des tests</td>
+ <td>Une meilleure interface graphique web, avec un arbre des scénarios de test.</td>
+ <td style="color: red;">1.1</td>
+ </tr>
+ <tr>
+ <td>Localisation</td>
+ <td>Abstraction des messages et génration du code à partir de fichiers XML.</td>
+ <td style="color: red;">1.1</td>
+ </tr>
+ <tr>
+ <td>Simulation d'interface</td>
+ <td>Peut générer des objets fantaisie tant vers des interfaces que vers des classes.</td>
+ <td style="color: red;">2.0</td>
+ </tr>
+ <tr>
+ <td>Test sur es exceptions</td>
+ <td>Dans le même esprit que sur les tests des erreurs PHP.</td>
+ <td style="color: red;">2.0</td>
+ </tr>
+ <tr>
+ <td>Rercherche d'éléments avec XPath</td>
+ <td>Peut utiliser Tidy HTML pour un appariement plus rapide et plus souple.</td>
+ <td style="color: red;">2.0</td>
+ </tr>
+ </tbody>
+</table>
+ La migration vers PHP5 commencera juste après la série des 1.0, à partir de là PHP4 ne sera plus supporté. SimpleTest est actuellement compatible avec PHP5 mais n'utilisera aucune des nouvelles fonctionnalités avant la version 2.
+ </p>
+
+ <p><a class="target" name="ressources"><h2>Ressources sur le web pour les tests</h2></a></p>
+ <p>
+ Le processus est au moins aussi important que les outils. Le type de procédure que fait un usage le plus intensif des outils de test pour développeur est bien sûr l'<a href="http://www.extremeprogramming.org/">Extreme Programming</a>. Il s'agit là d'une des <a href="http://www.agilealliance.com/articles/index">méthodes agiles</a> qui combinent plusieurs pratiques pour "lisser la courbe de coût" du développement logiciel. La plus extrème reste le <a href="http://www.testdriven.com/modules/news/">développement piloté par les tests</a>, où vous devez adhérer à la règle du <cite>pas de code avant d'avoir un test</cite>. Si vous êtes plutôt du genre planninficateur ou que vous estimez que l'expérience compte plus que l'évolution, vous préférerez peut-être l'approche <a href="http://www.therationaledge.com/content/dec_01/f_spiritOfTheRUP_pk.html">RUP</a>. Je ne l'ai pas testé mais je peux voir où vous aurez besoin d'outils de test (cf. illustration 9).
+ </p>
+ <p>
+ La plupart des testeurs unitaires sont dans une certaine mesure un clone de <a href="http://www.junit.org/">JUnit</a>, au moins dans l'interface. Il y a énormément d'information sur le site de JUnit, à commencer par la <a href="http://junit.sourceforge.net/doc/faq/faq.htm">FAQ</a> quie contient pas mal de conseils généraux sur les tests. Une fois mordu par le bogue vous apprécierez sûrement la phrase <a href="http://junit.sourceforge.net/doc/testinfected/testing.htm">infecté par les tests</a> trouvée par Eric Gamma. Si vous êtes encore en train de tergiverser sur un testeur unitaire, sachez que les choix principaux sont <a href="http://phpunit.sourceforge.net/">PHPUnit</a> et <a href="http://pear.php.net/manual/en/package.php.phpunit.php">Pear PHP::PHPUnit</a>. De nombreuses fonctionnalités de SimpleTest leurs font défaut, mais la version PEAR a d'ores et déjà été mise à jour pour PHP5. Elle est aussi recommandée si vous portez des scénarios de test existant depuis <a href="http://www.junit.org/">JUnit</a>.
+ </p>
+ <p>
+ Les développeurs de bibliothèque n'ont pas l'air de livrer très souvent des tests avec leur code : c'est bien dommage. Le code d'une bibliothèque qui inclut des tests peut être remanié avec plus de sécurité et le code de test sert de documentation additionnelle dans un format assez standard. Ceci peut épargner la pêche aux indices dans le code source lorsque qu'un problème survient, en particulier lors de la mise à jour d'une telle bibliothèque. Parmi les bibliothèques utilisant SimpleTest comme testeur unitaire on retrouve <a href="http://wact.sourceforge.net/">WACT</a> et <a href="http://sourceforge.net/projects/htmlsax">PEAR::XML_HTMLSax</a>.
+ </p>
+ <p>
+ Au jour d'aujourd'hui il manque tristement beaucoup de matière sur les objets fantaisie : dommage, surtout que tester unitairement sans eux représente pas mal de travail en plus. L'<a href="http://www.sidewize.com/company/mockobjects.pdf">article original sur les objets fantaisie</a> est très orienté Java, mais reste intéressant à lire. Etant donné qu'il s'agit d'une nouvelle technologie il y a beaucoup de discussions et de débats sur comment les utiliser, souvent sur des wikis comme <a href="http://xpdeveloper.com/cgi-bin/oldwiki.cgi?MockObjects">Extreme Tuesday</a> ou <a href="http://www.mockobjects.com/MocksObjectsPaper.html">www.mockobjects.com</a>ou <a href="http://c2.com/cgi/wiki?MockObject">the original C2 Wiki</a>. Injecter des objets fantaisie dans une classe est un des champs principaux du débat : cet <a href="http://www-106.ibm.com/developerworks/java/library/j-mocktest.html">article chez IBM</a> en est un bon point de départ.
+ </p>
+ <p>
+ Il y a énormement d'outils de test web mais la plupart sont écrits en Java. De plus les tutoriels et autres conseils sont plutôt rares. Votre seul espoir est de regarder directement la documentation pour <a href="http://httpunit.sourceforge.net/">HTTPUnit</a>, <a href="http://htmlunit.sourceforge.net/">HTMLUnit</a> ou <a href="http://jwebunit.sourceforge.net/">JWebUnit</a> et d'espérer y trouver pour des indices. Il y a aussi des frameworks basés sur XML, mais de nouveau la plupart ont besoin de Java pour tourner.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ <a href="unit_test_documentation.html">Documentation pour SimpleTest</a>.
+ </li>
+<li>
+ <a href="http://www.lastcraft.com/first_test_tutorial.php">Comment écrire des scénarios de test en PHP</a> est un tutoriel plutôt avancé.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">L'API de SimpleTest</a> par phpdoc.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/partial_mocks_documentation.html b/vendors/simpletest/docs/fr/partial_mocks_documentation.html
new file mode 100644
index 000000000..32a39c760
--- /dev/null
+++ b/vendors/simpletest/docs/fr/partial_mocks_documentation.html
@@ -0,0 +1,460 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Documentation SimpleTest : les objets fantaisie partiels</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Documentation sur les objets fantaisie partiels</h1>
+ This page...
+ <ul>
+<li>
+ <a href="#injection">Le problème de l'injection d'un objet fantaisie</a>.
+ </li>
+<li>
+ Déplacer la création vers une méthode <a href="#creation">fabrique protégée</a>.
+ </li>
+<li>
+ <a href="#partiel">L'objet fantaisie partiel</a> génère une sous-classe.
+ </li>
+<li>
+ Les objets fantaisie partiels <a href="#moins">testent moins qu'une classe</a>.
+ </li>
+</ul>
+<div class="content">
+
+ <p>
+ Un objet fantaisie partiel n'est ni plus ni moins
+ qu'un modèle de conception pour soulager un problème spécifique
+ du test avec des objets fantaisie, celui de placer
+ des objets fantaisie dans des coins serrés.
+ Il s'agit d'un outil assez limité et peut-être même
+ une idée pas si bonne que ça. Elle est incluse dans SimpleTest
+ pour la simple raison que je l'ai trouvée utile
+ à plus d'une occasion et qu'elle m'a épargnée
+ pas mal de travail dans ces moments-là.
+ </p>
+
+ <p><a class="target" name="injection"><h2>Le problème de l'injection dans un objet fantaisie</h2></a></p>
+ <p>
+ Quand un objet en utilise un autre il est très simple
+ d'y faire circuler une version fantaisie déjà prête
+ avec ses attentes. Les choses deviennent un peu plus délicates
+ si un objet en crée un autre et que le créateur est celui
+ que l'on souhaite tester. Cela revient à dire que l'objet
+ créé devrait être une fantaisie, mais nous pouvons
+ difficilement dire à notre classe sous test de créer
+ un objet fantaisie plutôt qu'un "vrai" objet.
+ La classe testée ne sait même pas qu'elle travaille dans un environnement de test.
+ </p>
+ <p>
+ Par exemple, supposons que nous sommes en train
+ de construire un client telnet et qu'il a besoin
+ de créer une socket réseau pour envoyer ses messages.
+ La méthode de connexion pourrait ressemble à quelque chose comme...
+<pre>
+<strong>&lt;?php
+require_once('socket.php');
+
+class Telnet {
+ ...
+ function &amp;connect($ip, $port, $username, $password) {
+ $socket = &amp;new Socket($ip, $port);
+ $socket-&gt;read( ... );
+ ...
+ }
+}
+?&gt;</strong>
+</pre>
+ Nous voudrions vraiment avoir une version fantaisie
+ de l'objet socket, que pouvons nous faire ?
+ </p>
+ <p>
+ La première solution est de passer la socket en
+ tant que paramètre, ce qui force la création
+ au niveau inférieur. Charger le client de cette tâche
+ est effectivement une bonne approche si c'est possible
+ et devrait conduire à un remaniement -- de la création
+ à partir de l'action. En fait, c'est là une des manières
+ avec lesquels tester en s'appuyant sur des objets fantaisie
+ vous force à coder des solutions plus resserrées sur leur objectif.
+ Ils améliorent votre programmation.
+ </p>
+ <p>
+ Voici ce que ça devrait être...
+<pre>
+&lt;?php
+require_once('socket.php');
+
+class Telnet {
+ ...
+ <strong>function &amp;connect(&amp;$socket, $username, $password) {
+ $socket-&gt;read( ... );
+ ...
+ }</strong>
+}
+?&gt;
+</pre>
+ Sous-entendu, votre code de test est typique d'un cas
+ de test avec un objet fantaisie.
+<pre>
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {<strong>
+ $socket = &amp;new MockSocket($this);
+ ...
+ $telnet = &amp;new Telnet();
+ $telnet-&gt;connect($socket, 'Me', 'Secret');
+ ...</strong>
+ }
+}
+</pre>
+ C'est assez évident que vous ne pouvez descendre que d'un niveau.
+ Vous ne voudriez pas que votre application de haut niveau
+ crée tous les fichiers de bas niveau, sockets et autres connexions
+ à la base de données dont elle aurait besoin.
+ Elle ne connaîtrait pas les paramètres du constructeur de toute façon.
+ </p>
+ <p>
+ La solution suivante est de passer l'objet créé sous la forme
+ d'un paramètre optionnel...
+<pre>
+&lt;?php
+require_once('socket.php');
+
+class Telnet {
+ ...<strong>
+ function &amp;connect($ip, $port, $username, $password, $socket = false) {
+ if (!$socket) {
+ $socket = &amp;new Socket($ip, $port);
+ }
+ $socket-&gt;read( ... );</strong>
+ ...
+ return $socket;
+ }
+}
+?&gt;
+</pre>
+ Pour une solution rapide, c'est généralement suffisant.
+ Ensuite le test est très similaire : comme si le paramètre
+ était transmis formellement...
+<pre>
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {<strong>
+ $socket = &amp;new MockSocket($this);
+ ...
+ $telnet = &amp;new Telnet();
+ $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret', &amp;$socket);
+ ...</strong>
+ }
+}
+</pre>
+ Le problème de cette approche tient dans son manque de netteté.
+ Il y a du code de test dans la classe principale et aussi
+ des paramètres transmis dans le scénario de test
+ qui ne sont jamais utilisés. Il s'agit là d'une approche
+ rapide et sale, mais qui ne reste pas moins efficace
+ dans la plupart des situations.
+ </p>
+ <p>
+ Une autre solution encore est de laisser un objet fabrique
+ s'occuper de la création...
+<pre>
+&lt;?php
+require_once('socket.php');
+
+class Telnet {<strong>
+ function Telnet(&amp;$network) {
+ $this-&gt;_network = &amp;$network;
+ }</strong>
+ ...
+ function &amp;connect($ip, $port, $username, $password) {<strong>
+ $socket = &amp;$this-&gt;_network-&gt;createSocket($ip, $port);
+ $socket-&gt;read( ... );</strong>
+ ...
+ return $socket;
+ }
+}
+?&gt;
+</pre>
+ Il s'agit là probablement de la réponse la plus travaillée
+ étant donné que la création est maintenant située
+ dans une petite classe spécialisée. La fabrique réseau
+ peut être testée séparément et utilisée en tant que fantaisie
+ quand nous testons la classe telnet...
+<pre>
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {<strong>
+ $socket = &amp;new MockSocket($this);
+ ...
+ $network = &amp;new MockNetwork($this);
+ $network-&gt;setReturnReference('createSocket', $socket);
+ $telnet = &amp;new Telnet($network);
+ $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+ ...</strong>
+ }
+}
+</pre>
+ Le problème reste que nous ajoutons beaucoup de classes
+ à la bibliothèque. Et aussi que nous utilisons beaucoup
+ de fabriques ce qui rend notre code un peu moins intuitif.
+ La solution la plus flexible, mais aussi la plus complexe.
+ </p>
+ <p>
+ Peut-on trouver un juste milieu ?
+ </p>
+
+ <p><a class="target" name="creation"><h2>Méthode fabrique protégée</h2></a></p>
+ <p>
+ Il existe une technique pour palier à ce problème
+ sans créer de nouvelle classe dans l'application;
+ par contre elle induit la création d'une sous-classe au moment du test.
+ Premièrement nous déplaçons la création de la socket dans sa propre méthode...
+<pre>
+&lt;?php
+require_once('socket.php');
+
+class Telnet {
+ ...
+ function &amp;connect($ip, $port, $username, $password) {<strong>
+ $socket = &amp;$this-&gt;_createSocket($ip, $port);</strong>
+ $socket-&gt;read( ... );
+ ...
+ }<strong>
+
+ function &amp;_createSocket($ip, $port) {
+ return new Socket($ip, $port);
+ }</strong>
+}
+?&gt;
+</pre>
+ Il s'agit là de la seule modification dans le code de l'application.
+ </p>
+ <p>
+ Pour le scénario de test, nous devons créer
+ une sous-classe de manière à intercepter la création de la socket...
+<pre>
+<strong>class TelnetTestVersion extends Telnet {
+ var $_mock;
+
+ function TelnetTestVersion(&amp;$mock) {
+ $this-&gt;_mock = &amp;$mock;
+ $this-&gt;Telnet();
+ }
+
+ function &amp;_createSocket() {
+ return $this-&gt;_mock;
+ }
+}</strong>
+</pre>
+ Ici j'ai déplacé la fantaisie dans le constructeur,
+ mais un setter aurait fonctionné tout aussi bien.
+ Notez bien que la fantaisie est placée dans une variable
+ d'objet avant que le constructeur ne soit attaché.
+ C'est nécessaire dans le cas où le constructeur appelle
+ <span class="new_code">connect()</span>.
+ Autrement il pourrait donner un valeur nulle à partir de
+ <span class="new_code">_createSocket()</span>.
+ </p>
+ <p>
+ Après la réalisation de tout ce travail supplémentaire
+ le scénario de test est assez simple.
+ Nous avons juste besoin de tester notre nouvelle classe à la place...
+<pre>
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {<strong>
+ $socket = &amp;new MockSocket($this);
+ ...
+ $telnet = &amp;new TelnetTestVersion($socket);
+ $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+ ...</strong>
+ }
+}
+</pre>
+ Cette nouvelle classe est très simple bien sûr.
+ Elle ne fait qu'initier une valeur renvoyée, à la manière
+ d'une fantaisie. Ce serait pas mal non plus si elle pouvait
+ vérifier les paramètres entrants.
+ Exactement comme un objet fantaisie.
+ Il se pourrait bien que nous ayons à réaliser cette astuce régulièrement :
+ serait-il possible d'automatiser la création de cette sous-classe ?
+ </p>
+
+ <p><a class="target" name="partiel"><h2>Un objet fantaisie partiel</h2></a></p>
+ <p>
+ Bien sûr la réponse est "oui"
+ ou alors j'aurais arrêté d'écrire depuis quelques temps déjà !
+ Le test précédent a représenté beaucoup de travail,
+ mais nous pouvons générer la sous-classe en utilisant
+ une approche à celle des objets fantaisie.
+ </p>
+ <p>
+ Voici donc une version avec objet fantaisie partiel du test...
+<pre>
+<strong>Mock::generatePartial(
+ 'Telnet',
+ 'TelnetTestVersion',
+ array('_createSocket'));</strong>
+
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {<strong>
+ $socket = &amp;new MockSocket($this);
+ ...
+ $telnet = &amp;new TelnetTestVersion($this);
+ $telnet-&gt;setReturnReference('_createSocket', $socket);
+ $telnet-&gt;Telnet();
+ $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+ ...</strong>
+ }
+}
+</pre>
+ La fantaisie partielle est une sous-classe de l'original
+ dont on aurait "remplacé" les méthodes sélectionnées
+ avec des versions de test. L'appel à <span class="new_code">generatePartial()</span>
+ nécessite trois paramètres : la classe à sous classer,
+ le nom de la nouvelle classe et une liste des méthodes à simuler.
+ </p>
+ <p>
+ Instancier les objets qui en résultent est plutôt délicat.
+ L'unique paramètre du constructeur d'un objet fantaisie partiel
+ est la référence du testeur unitaire.
+ Comme avec les objets fantaisie classiques c'est nécessaire
+ pour l'envoi des résultats de test en réponse à la vérification des attentes.
+ </p>
+ <p>
+ Une nouvelle fois le constructeur original n'est pas lancé.
+ Indispensable dans le cas où le constructeur aurait besoin
+ des méthodes fantaisie : elles n'ont pas encore été initiées !
+ Nous initions les valeurs retournées à cet instant et
+ ensuite lançons le constructeur avec ses paramètres normaux.
+ Cette construction en trois étapes de "new",
+ suivie par la mise en place des méthodes et ensuite
+ par la lancement du constructeur proprement dit est
+ ce qui distingue le code d'un objet fantaisie partiel.
+ </p>
+ <p>
+ A part pour leur construction, toutes ces méthodes
+ fantaisie ont les mêmes fonctionnalités que dans
+ le cas des objets fantaisie et toutes les méthodes
+ non fantaisie se comportent comme avant.
+ Nous pouvons mettre en place des attentes très facilement...
+<pre>
+class TelnetTest extends UnitTestCase {
+ ...
+ function testConnection() {
+ $socket = &amp;new MockSocket($this);
+ ...
+ $telnet = &amp;new TelnetTestVersion($this);
+ $telnet-&gt;setReturnReference('_createSocket', $socket);<strong>
+ $telnet-&gt;expectOnce('_createSocket', array('127.0.0.1', 21));</strong>
+ $telnet-&gt;Telnet();
+ $telnet-&gt;connect('127.0.0.1', 21, 'Me', 'Secret');
+ ...<strong>
+ $telnet-&gt;tally();</strong>
+ }
+}
+</pre>
+ </p>
+
+ <p><a class="target" name="moins"><h2>Tester moins qu'une classe</h2></a></p>
+ <p>
+ Les méthodes issues d'un objet fantaisie n'ont pas
+ besoin d'être des méthodes fabrique, Il peut s'agir
+ de n'importe quelle sorte de méthode.
+ Ainsi les objets fantaisie partiels nous permettent
+ de prendre le contrôle de n'importe quelle partie d'une classe,
+ le constructeur excepté. Nous pourrions même aller jusqu'à
+ créer des fantaisies sur toutes les méthodes à part celle
+ que nous voulons effectivement tester.
+ </p>
+ <p>
+ Cette situation est assez hypothétique, étant donné
+ que je ne l'ai jamais essayée. Je suis ouvert à cette possibilité,
+ mais je crains qu'en forçant la granularité d'un objet
+ on n'obtienne pas forcément un code de meilleur qualité.
+ Personnellement j'utilise les objets fantaisie partiels
+ comme moyen de passer outre la création ou alors
+ de temps en temps pour tester le modèle de conception TemplateMethod.
+ </p>
+ <p>
+ Pour choisir le mécanisme à utiliser, on en revient
+ toujours aux standards de code de votre projet.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ La page du projet SimpleTest sur
+ <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">L'API complète pour SimpleTest</a>
+ à partir de PHPDoc.
+ </li>
+<li>
+ La méthode fabrique protégée est décrite dans
+ <a href="http://www-106.ibm.com/developerworks/java/library/j-mocktest.html">
+ cet article d'IBM</a>. Il s'agit de l'unique papier
+ formel que j'ai vu sur ce problème.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/reporter_documentation.html b/vendors/simpletest/docs/fr/reporter_documentation.html
new file mode 100644
index 000000000..0dc56edcf
--- /dev/null
+++ b/vendors/simpletest/docs/fr/reporter_documentation.html
@@ -0,0 +1,534 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Documentation SimpleTest : le rapporteur de test</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Documentation sur le rapporteur de test</h1>
+ This page...
+ <ul>
+<li>
+ Afficher <a href="#html">les résultats en HTML</a>
+ </li>
+<li>
+ Afficher et <a href="#autres">rapporter les résultats</a>
+ dans d'autres formats
+ </li>
+<li>
+ Utilisé <a href="#cli">SimpleTest depuis la ligne de commande</a>
+ </li>
+<li>
+ <a href="#xml">Utiliser XML</a> pour des tests distants
+ </li>
+</ul>
+<div class="content">
+
+ <p>
+ SimpleTest suit plutôt plus que moins le modèle MVC (Modèle-Vue-Contrôleur).
+ Les classes "reporter" sont les vues et les modèles
+ sont vos scénarios de test et leur hiérarchie.
+ Le contrôleur est le plus souvent masqué à l'utilisateur
+ de SimpleTest à moins de vouloir changer la façon
+ dont les tests sont effectivement exécutés,
+ auquel cas il est possible de surcharger les objets
+ "runner" (ceux de l'exécuteur) depuis l'intérieur
+ d'un scénario de test. Comme d'habitude avec MVC,
+ le contrôleur est plutôt indéfini et il existe d'autres endroits
+ pour contrôler l'exécution des tests.
+ </p>
+
+ <p><a class="target" name="html"><h2>Les résultats rapportés au format HTML</h2></a></p>
+ <p>
+ L'affichage par défaut est minimal à l'extrême.
+ Il renvoie le succès ou l'échec avec les barres conventionnelles
+ - rouge et verte - et affichent une trace d'arborescence
+ des groupes de test pour chaque assertion erronée. Voici un tel échec...
+ <div class="demo">
+ <h1>File test</h1>
+ <span class="fail">Fail</span>: createnewfile-&gt;True assertion failed.<br>
+ <div style="padding: 8px; margin-top: 1em; background-color: red; color: white;">1/1 test cases complete.
+ <strong>0</strong> passes, <strong>1</strong> fails and <strong>0</strong> exceptions.</div>
+ </div>
+ Alors qu'ici tous les tests passent...
+ <div class="demo">
+ <h1>File test</h1>
+ <div style="padding: 8px; margin-top: 1em; background-color: green; color: white;">1/1 test cases complete.
+ <strong>1</strong> passes, <strong>0</strong> fails and <strong>0</strong> exceptions.</div>
+ </div>
+ La bonne nouvelle, c'est qu'il existe pas mal de points
+ dans la hiérarchie de l'affichage pour créer des sous-classes.
+ </p>
+ <p>
+ Pour l'affichage basé sur des pages web,
+ il y a la classe <span class="new_code">HtmlReporter</span> avec la signature suivante...
+<pre>
+class HtmlReporter extends SimpleReporter {
+ public HtmlReporter($encoding) { ... }
+ public makeDry(boolean $is_dry) { ... }
+ public void paintHeader(string $test_name) { ... }
+ public void sendNoCacheHeaders() { ... }
+ public void paintFooter(string $test_name) { ... }
+ public void paintGroupStart(string $test_name, integer $size) { ... }
+ public void paintGroupEnd(string $test_name) { ... }
+ public void paintCaseStart(string $test_name) { ... }
+ public void paintCaseEnd(string $test_name) { ... }
+ public void paintMethodStart(string $test_name) { ... }
+ public void paintMethodEnd(string $test_name) { ... }
+ public void paintFail(string $message) { ... }
+ public void paintPass(string $message) { ... }
+ public void paintError(string $message) { ... }
+ public void paintException(string $message) { ... }
+ public void paintMessage(string $message) { ... }
+ public void paintFormattedMessage(string $message) { ... }
+ protected string _getCss() { ... }
+ public array getTestList() { ... }
+ public integer getPassCount() { ... }
+ public integer getFailCount() { ... }
+ public integer getExceptionCount() { ... }
+ public integer getTestCaseCount() { ... }
+ public integer getTestCaseProgress() { ... }
+}
+</pre>
+ Voici ce que certaines de ces méthodes veulent dire.
+ Premièrement les méthodes d'affichage que vous voudrez probablement surcharger...
+ <ul class="api">
+ <li>
+ <span class="new_code">HtmlReporter(string $encoding)</span><br>
+ est le constructeur. Notez que le test unitaire initie
+ le lien à l'affichage plutôt que l'opposé.
+ L'affichage est principalement un receveur passif
+ des évènements de tests. Cela permet d'adapter
+ facilement l'affichage pour d'autres systèmes
+ en dehors des tests unitaires, tel le suivi
+ de la charge de serveurs.
+ L'"encoding" est le type d'encodage
+ que vous souhaitez utiliser pour l'affichage du test.
+ Pour pouvoir effectuer un rendu correct de la sortie
+ de débogage quand on utilise le testeur web,
+ il doit correspondre à l'encodage du site testé.
+ Les chaînes de caractères disponibles
+ sont indiquées dans la fonction PHP
+ <a href="http://www.php.net/manual/fr/function.htmlentities.php">html_entities()</a>.
+ </li>
+ <li>
+ <span class="new_code">void paintHeader(string $test_name)</span><br>
+ est appelé une fois, au début du test quand l'évènement
+ de démarrage survient. Le premier évènement de démarrage
+ est souvent délivré par le groupe de tests du niveau
+ le plus haut et donc c'est de là que le
+ <span class="new_code">$test_name</span> arrive.
+ Il peint les titres de la page, CSS, la balise "body", etc.
+ Il ne renvoie rien du tout (<span class="new_code">void</span>).
+ </li>
+ <li>
+ <span class="new_code">void paintFooter(string $test_name)</span><br>
+ est appelé à la toute fin du test pour fermer
+ les balises ouvertes par l'entête de la page.
+ Par défaut il affiche aussi la barre rouge ou verte
+ et le décompte final des résultats.
+ En fait la fin des tests arrive quand l'évènement
+ de fin de test arrive avec le même nom
+ que celui qui l'a initié au même niveau.
+ Le nid des tests en quelque sorte.
+ Fermer le dernier test finit l'affichage.
+ </li>
+ <li>
+ <span class="new_code">void paintMethodStart(string $test_name)</span><br>
+ est appelé au début de chaque méthode de test.
+ Normalement le nom vient de celui de la méthode.
+ Les autres évènements de départ de test
+ se comportent de la même manière sauf que
+ celui du groupe de tests indique au rapporteur
+ le nombre de scénarios de test qu'il contient.
+ De la sorte le rapporteur peut afficher une barre
+ de progrès au fur et à mesure que l'exécuteur
+ passe en revue les scénarios de test.
+ </li>
+ <li>
+ <span class="new_code">void paintMethodEnd(string $test_name)</span><br>
+ clôt le test lancé avec le même nom.
+ </li>
+ <li>
+ <span class="new_code">void paintFail(string $message)</span><br>
+ peint un échec. Par défaut il ne fait qu'afficher
+ le mot "fail", une trace d'arborescence
+ affichant la position du test en cours
+ et le message transmis par l'assertion.
+ </li>
+ <li>
+ <span class="new_code">void paintPass(string $message)</span><br>
+ ne fait rien, par défaut.
+ </li>
+ <li>
+ <span class="new_code">string _getCss()</span><br>
+ renvoie les styles CSS sous la forme d'une chaîne
+ à l'attention de la méthode d'entêtes d'une page.
+ Des styles additionnels peuvent être ajoutés ici
+ si vous ne surchargez pas les entêtes de la page.
+ Vous ne voudrez pas utiliser cette méthode dans
+ des entêtes d'une page surchargée si vous souhaitez
+ inclure le feuille de style CSS d'origine.
+ </li>
+ </ul>
+ Il y a aussi des accesseurs pour aller chercher l'information
+ sur l'état courant de la suite de test. Vous les utiliserez
+ pour enrichir l'affichage...
+ <ul class="api">
+ <li>
+ <span class="new_code">array getTestList()</span><br>
+ est la première méthode très commode pour les sous-classes.
+ Elle liste l'arborescence courante des tests
+ sous la forme d'une liste de noms de tests.
+ Le premier test -- celui le plus proche du coeur --
+ sera le premier dans la liste et la méthode de test
+ en cours sera la dernière.
+ </li>
+ <li>
+ <span class="new_code">integer getPassCount()</span><br>
+ renvoie le nombre de succès atteint. Il est nécessaire
+ pour l'affichage à la fin.
+ </li>
+ <li>
+ <span class="new_code">integer getFailCount()</span><br>
+ renvoie de la même manière le nombre d'échecs.
+ </li>
+ <li>
+ <span class="new_code">integer getExceptionCount()</span><br>
+ renvoie quant à lui le nombre d'erreurs.
+ </li>
+ <li>
+ <span class="new_code">integer getTestCaseCount()</span><br>
+ est le nombre total de scénarios lors de l'exécution des tests.
+ Il comprend aussi les tests groupés.
+ </li>
+ <li>
+ <span class="new_code">integer getTestCaseProgress()</span><br>
+ est le nombre de scénarios réalisés jusqu'à présent.
+ </li>
+ </ul>
+ Une modification simple : demander à l'HtmlReporter d'afficher
+ aussi bien les succès que les échecs et les erreurs...
+<pre><strong>
+class ShowPasses extends HtmlReporter {
+
+ function paintPass($message) {
+ parent::paintPass($message);
+ print "&amp;&lt;span class=\"pass\"&gt;Pass&lt;/span&gt;: ";
+ $breadcrumb = $this-&gt;getTestList();
+ array_shift($breadcrumb);
+ print implode("-&amp;gt;", $breadcrumb);
+ print "-&amp;gt;$message&lt;br /&gt;\n";
+ }
+
+ function _getCss() {
+ return parent::_getCss() . ' .pass { color: green; }';
+ }
+}</strong>
+</pre>
+ </p>
+ <p>
+ Une méthode qui a beaucoup fait jaser reste la méthode <span class="new_code">makeDry()</span>.
+ Si vous lancez cette méthode, sans paramètre,
+ sur le rapporteur avant que la suite de test
+ ne soit exécutée alors aucune méthode de test
+ ne sera appelée. Vous continuerez à avoir
+ les évènements entrants et sortants des méthodes
+ et scénarios de test, mais aucun succès ni échec ou erreur,
+ parce que le code de test ne sera pas exécuté.
+ </p>
+ <p>
+ La raison ? Pour permettre un affichage complexe
+ d'une IHM (ou GUI) qui permettrait la sélection
+ de scénarios de test individuels.
+ Afin de construire une liste de tests possibles,
+ ils ont besoin d'un rapport sur la structure du test
+ pour l'affichage, par exemple, d'une vue en arbre
+ de la suite de test. Avec un rapporteur lancé
+ sur une exécution sèche qui ne renverrait
+ que les évènements d'affichage, cela devient
+ facilement réalisable.
+ </p>
+
+ <p><a class="target" name="autre"><h2>Etendre le rapporteur</h2></a></p>
+ <p>
+ Plutôt que de modifier l'affichage existant,
+ vous voudrez peut-être produire une présentation HTML
+ complètement différente, ou même générer une version texte ou XML.
+ Plutôt que de surcharger chaque méthode dans
+ <span class="new_code">HtmlReporter</span> nous pouvons nous rendre
+ une étape plus haut dans la hiérarchie de classe vers
+ <span class="new_code">SimpleReporter</span> dans le fichier source <em>simple_test.php</em>.
+ </p>
+ <p>
+ Un affichage sans rien, un canevas vierge
+ pour votre propre création, serait...
+<pre><strong>
+require_once('simpletest/simple_test.php');</strong>
+
+class MyDisplay extends SimpleReporter {<strong>
+ </strong>
+ function paintHeader($test_name) {
+ }
+
+ function paintFooter($test_name) {
+ }
+
+ function paintStart($test_name, $size) {<strong>
+ parent::paintStart($test_name, $size);</strong>
+ }
+
+ function paintEnd($test_name, $size) {<strong>
+ parent::paintEnd($test_name, $size);</strong>
+ }
+
+ function paintPass($message) {<strong>
+ parent::paintPass($message);</strong>
+ }
+
+ function paintFail($message) {<strong>
+ parent::paintFail($message);</strong>
+ }
+}
+</pre>
+ Aucune sortie ne viendrait de cette classe jusqu'à un ajout de votre part.
+ </p>
+
+ <p><a class="target" name="cli"><h2>Le rapporteur en ligne de commande</h2></a></p>
+ <p>
+ SimpleTest est aussi livré avec un rapporteur
+ en ligne de commande, minime lui aussi.
+ L'interface imite celle de JUnit,
+ sauf qu'elle envoie les messages d'erreur au fur
+ et à mesure de leur arrivée.
+ Pour utiliser le rapporteur en ligne de commande,
+ il suffit de l'intervertir avec celui de la version HTML...
+<pre>
+&lt;?php
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/reporter.php');
+
+$test = &amp;new GroupTest('File test');
+$test-&gt;addTestFile('tests/file_test.php');
+$test-&gt;run(<strong>new TextReporter()</strong>);
+?&gt;
+</pre>
+ Et ensuite d'invoquer la suite de test à partir d'une ligne de commande...
+<pre class="shell">
+php file_test.php
+</pre>
+ Bien sûr vous aurez besoin d'installer PHP
+ en ligne de commande. Une suite de test qui
+ passerait toutes ses assertions ressemble à...
+<pre class="shell">
+File test
+OK
+Test cases run: 1/1, Failures: 0, Exceptions: 0
+</pre>
+ Un échec déclenche un affichage comme...
+<pre class="shell">
+File test
+1) True assertion failed.
+ in createnewfile
+FAILURES!!!
+Test cases run: 1/1, Failures: 1, Exceptions: 0
+</pre>
+ </p>
+ <p>
+ Une des principales raisons pour utiliser
+ une suite de test en ligne de commande tient
+ dans l'utilisation possible du testeur avec
+ un processus automatisé. Pour fonctionner comme
+ il faut dans des scripts shell le script de test
+ devrait renvoyer un code de sortie non-nul suite à un échec.
+ Si une suite de test échoue la valeur <span class="new_code">false</span>
+ est renvoyée par la méthode <span class="new_code">SimpleTest::run()</span>.
+ Nous pouvons utiliser ce résultat pour terminer le script
+ avec la bonne valeur renvoyée...
+<pre>
+&lt;?php
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/reporter.php');
+
+$test = &amp;new GroupTest('File test');
+$test-&gt;addTestFile('tests/file_test.php');<strong>
+exit ($test-&gt;run(new TextReporter()) ? 0 : 1);</strong>
+?&gt;
+</pre>
+ Bien sûr l'objectif n'est pas de créer deux scripts de test,
+ l'un en ligne de commande et l'autre pour un navigateur web,
+ pour chaque suite de test.
+ Le rapporteur en ligne de commande inclut
+ une méthode pour déterminer l'environnement d'exécution...
+<pre>
+&lt;?php
+require_once('simpletest/unit_tester.php');
+require_once('simpletest/reporter.php');
+
+$test = &amp;new GroupTest('File test');
+$test-&gt;addTestFile('tests/file_test.php');<strong>
+if (TextReporter::inCli()) {</strong>
+ exit ($test-&gt;run(new TextReporter()) ? 0 : 1);<strong>
+}</strong>
+$test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ Il s'agit là de la forme utilisée par SimpleTest lui-même.
+ </p>
+
+ <p><a class="target" name="xml"><h2>Test distant</h2></a></p>
+ <p>
+ SimpleTest est livré avec une classe <span class="new_code">XmlReporter</span>
+ utilisée pour de la communication interne.
+ Lors de son exécution, le résultat ressemble à...
+<pre class="shell">
+&lt;?xml version="1.0"?&gt;
+&lt;run&gt;
+ &lt;group size="4"&gt;
+ &lt;name&gt;Remote tests&lt;/name&gt;
+ &lt;group size="4"&gt;
+ &lt;name&gt;Visual test with 48 passes, 48 fails and 4 exceptions&lt;/name&gt;
+ &lt;case&gt;
+ &lt;name&gt;testofunittestcaseoutput&lt;/name&gt;
+ &lt;test&gt;
+ &lt;name&gt;testofresults&lt;/name&gt;
+ &lt;pass&gt;This assertion passed&lt;/pass&gt;
+ &lt;fail&gt;This assertion failed&lt;/fail&gt;
+ &lt;/test&gt;
+ &lt;test&gt;
+ ...
+ &lt;/test&gt;
+ &lt;/case&gt;
+ &lt;/group&gt;
+ &lt;/group&gt;
+&lt;/run&gt;
+</pre>
+ Vous pouvez utiliser ce format avec le parseur
+ fourni dans SimpleTest lui-même.
+ Il s'agit de <span class="new_code">SimpleTestXmlParser</span>
+ et se trouve <em>xml.php</em> à l'intérieur du paquet SimpleTest...
+<pre>
+&lt;?php
+require_once('simpletest/xml.php');
+
+...
+$parser = &amp;new SimpleTestXmlParser(new HtmlReporter());
+$parser-&gt;parse($test_output);
+?&gt;
+</pre>
+ <span class="new_code">$test_output</span> devrait être au format XML,
+ à partir du rapporteur XML, et pourrait venir
+ d'une exécution en ligne de commande d'un scénario de test.
+ Le parseur envoie des évènements au rapporteur exactement
+ comme tout autre exécution de test.
+ Il y a des occasions bizarres dans lesquelles c'est en fait très utile.
+ </p>
+ <p>
+ Un problème des très grandes suites de test,
+ c'est qu'elles peuvent venir à bout de la limite de mémoire
+ par défaut d'un process PHP - 8Mb.
+ En plaçant la sortie des groupes de test dans du XML
+ et leur exécution dans des process différents,
+ le résultat peut être parsé à nouveau pour agréger
+ les résultats avec moins d'impact sur le test au premier niveau.
+ </p>
+ <p>
+ Parce que la sortie XML peut venir de n'importe où,
+ ça ouvre des possibilités d'agrégation d'exécutions de test
+ depuis des serveur distants.
+ Un scénario de test pour le réaliser existe déjà
+ à l'intérieur du framework SimpleTest, mais il est encore expérimental...
+<pre>
+&lt;?php<strong>
+require_once('../remote.php');</strong>
+require_once('../reporter.php');
+
+$test_url = ...;
+$dry_url = ...;
+
+$test = &amp;new GroupTest('Remote tests');
+$test-&gt;addTestCase(<strong>new RemoteTestCase($test_url, $dry_url)</strong>);
+$test-&gt;run(new HtmlReporter());
+?&gt;
+</pre>
+ <span class="new_code">RemoteTestCase</span> prend la localisation réelle
+ du lanceur de test, tout simplement un page web au format XML.
+ Il prend aussi l'URL d'un rapporteur initié
+ pour effectuer une exécution sèche.
+ Cette technique est employée pour que les progrès
+ soient correctement rapportés vers le haut.
+ <span class="new_code">RemoteTestCase</span> peut être ajouté à
+ une suite de test comme n'importe quel autre groupe de tests.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ La page du projet SimpleTest sur
+ <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ La page de téléchargement de SimpleTest sur
+ <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ L'<a href="http://simpletest.org/api/">API pour développeur de SimpleTest</a>
+ donne tous les détails sur les classes et les assertions disponibles.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/server_stubs_documentation.html b/vendors/simpletest/docs/fr/server_stubs_documentation.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendors/simpletest/docs/fr/server_stubs_documentation.html
diff --git a/vendors/simpletest/docs/fr/unit_test_documentation.html b/vendors/simpletest/docs/fr/unit_test_documentation.html
new file mode 100644
index 000000000..ff5475327
--- /dev/null
+++ b/vendors/simpletest/docs/fr/unit_test_documentation.html
@@ -0,0 +1,447 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Documentation SimpleTest pour les tests de régression en PHP</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Documentation sur les tests unitaires en PHP</h1>
+ This page...
+ <ul>
+<li>
+ <a href="#unitaire">Scénarios de test unitaire</a>
+ et opérations basiques.
+ </li>
+<li>
+ <a href="#extension_unitaire">Étendre des scénarios de test</a>
+ pour les personnaliser à votre propre projet.
+ </li>
+<li>
+ <a href="#lancement_unitaire">Lancer un scénario seul</a>
+ comme un script unique.
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="unitaire"><h2>Scénarios de tests unitaires</h2></a></p>
+ <p>
+ Le coeur du système est un framework de tests de régression
+ construit autour des scénarios de test.
+ Un exemple de scénario de test ressemble à...
+<pre>
+<strong>class FileTestCase extends UnitTestCase {
+}</strong>
+</pre>
+ Si aucun nom de test n'est fourni au moment
+ de la liaison avec le constructeur alors
+ le nom de la classe sera utilisé.
+ Il s'agit du nom qui sera affiché dans les résultats du test.
+ </p>
+ <p>
+ Les véritables tests sont ajoutés en tant que méthode
+ dans le scénario de test dont le nom par défaut
+ commence par la chaîne "test"
+ et quand le scénario de test est appelé toutes les méthodes
+ de ce type sont exécutées dans l'ordre utilisé
+ par l'introspection de PHP pour les trouver.
+ Peuvent être ajoutées autant de méthodes de test que nécessaires.
+ Par exemple...
+<pre>
+require_once('simpletest/autorun.php');
+require_once('../classes/writer.php');
+
+class FileTestCase extends UnitTestCase {
+ function FileTestCase() {
+ $this-&gt;UnitTestCase('File test');
+ }<strong>
+
+ function setUp() {
+ @unlink('../temp/test.txt');
+ }
+
+ function tearDown() {
+ @unlink('../temp/test.txt');
+ }
+
+ function testCreation() {
+ $writer = &amp;new FileWriter('../temp/test.txt');
+ $writer-&gt;write('Hello');
+ $this-&gt;assertTrue(file_exists('../temp/test.txt'), 'File created');
+ }</strong>
+}
+</pre>
+ Le constructeur est optionnel et souvent omis. Sans nom,
+ le nom de la classe est utilisé comme nom pour le scénario de test.
+ </p>
+ <p>
+ Notre unique méthode de test pour le moment est
+ <span class="new_code">testCreation()</span> où nous vérifions
+ qu'un fichier a bien été créé par notre objet
+ <span class="new_code">Writer</span>. Nous pourrions avoir mis
+ le code <span class="new_code">unlink()</span> dans cette méthode,
+ mais en la plaçant dans <span class="new_code">setUp()</span>
+ et <span class="new_code">tearDown()</span> nous pouvons l'utiliser
+ pour nos autres méthodes de test que nous ajouterons.
+ </p>
+ <p>
+ La méthode <span class="new_code">setUp()</span> est lancé
+ juste avant chaque méthode de test.
+ <span class="new_code">tearDown()</span> est lancé après chaque méthode de test.
+ </p>
+ <p>
+ Vous pouvez placer une initialisation de
+ scénario de test dans le constructeur afin qu'elle soit lancée
+ pour toutes les méthodes dans le scénario de test
+ mais dans un tel cas vous vous exposeriez à des interférences.
+ Cette façon de faire est légèrement moins rapide,
+ mais elle est plus sûre.
+ Notez que si vous arrivez avec des notions de JUnit,
+ il ne s'agit pas du comportement auquel vous êtes habitués.
+ Bizarrement JUnit re-instancie le scénario de test
+ pour chaque méthode de test pour se prévenir
+ d'une telle interférence.
+ SimpleTest demande à l'utilisateur final d'utiliser
+ <span class="new_code">setUp()</span>, mais fournit aux codeurs de bibliothèque d'autres crochets.
+ </p>
+ <p>
+ Pour rapporter les résultats de test,
+ le passage par une classe d'affichage - notifiée par
+ les différentes méthodes de type <span class="new_code">assert...()</span> -
+ est utilisée. En voici la liste complète pour
+ la classe <span class="new_code">UnitTestCase</span>,
+ celle par défaut dans SimpleTest...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">assertTrue($x)</span></td>
+<td>Echoue si $x est faux</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertFalse($x)</span></td>
+<td>Echoue si $x est vrai</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNull($x)</span></td>
+<td>Echoue si $x est initialisé</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNotNull($x)</span></td>
+<td>Echoue si $x n'est pas initialisé</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertIsA($x, $t)</span></td>
+<td>Echoue si $x n'est pas de la classe ou du type $t</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertEqual($x, $y)</span></td>
+<td>Echoue si $x == $y est faux</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNotEqual($x, $y)</span></td>
+<td>Echoue si $x == $y est vrai</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertIdentical($x, $y)</span></td>
+<td>Echoue si $x === $y est faux</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNotIdentical($x, $y)</span></td>
+<td>Echoue si $x === $y est vrai</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertReference($x, $y)</span></td>
+<td>Echoue sauf si $x et $y sont la même variable</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertCopy($x, $y)</span></td>
+<td>Echoue si $x et $y sont la même variable</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertWantedPattern($p, $x)</span></td>
+<td>Echoue sauf si l'expression rationnelle $p capture $x</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoUnwantedPattern($p, $x)</span></td>
+<td>Echoue si l'expression rationnelle $p capture $x</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoErrors()</span></td>
+<td>Echoue si une erreur PHP arrive</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertError($x)</span></td>
+<td>Echoue si aucune erreur ou message incorrect de PHP n'arrive</td>
+</tr>
+ </tbody></table>
+ Toutes les méthodes d'assertion peuvent recevoir
+ une description optionnelle :
+ cette description sert pour étiqueter le résultat.
+ Sans elle, une message par défaut est envoyée à la place :
+ il est généralement suffisant.
+ Ce message par défaut peut encore être encadré
+ dans votre propre message si vous incluez "%s"
+ dans la chaîne.
+ Toutes les assertions renvoient vrai / true en cas de succès
+ et faux / false en cas d'échec.
+ </p>
+ <p>
+ D'autres exemples...
+<pre>
+<strong>$variable = null;
+$this-&gt;assertNull($variable, 'Should be cleared');</strong>
+</pre>
+ ...passera et normalement n'affichera aucun message.
+ Si vous avez <a href="http://www.lastcraft.com/display_subclass_tutorial.php">
+ configuré le testeur pour afficher aussi les succès</a>
+ alors le message sera affiché comme tel.
+<pre>
+<strong>$this-&gt;assertIdentical(0, false, 'Zero is not false [%s]');</strong>
+</pre>
+ Ceci échouera étant donné qu'il effectue une vérification
+ sur le type en plus d'une comparaison sur les deux valeurs.
+ La partie "%s" est remplacée par le message d'erreur
+ par défaut qui aurait été affiché si nous n'avions pas fourni le nôtre.
+ Cela nous permet d'emboîter les messages de test.
+<pre>
+<strong>$a = 1;
+$b = $a;
+$this-&gt;assertReference($a, $b);</strong>
+</pre>
+ Échouera étant donné que la variable <span class="new_code">$b</span>
+ est une copie de <span class="new_code">$a</span>.
+<pre>
+<strong>$this-&gt;assertWantedPattern('/hello/i', 'Hello world');</strong>
+</pre>
+ Là, ça passe puisque la recherche est insensible
+ à la casse et que donc <span class="new_code">hello</span>
+ est bien repérable dans <span class="new_code">Hello world</span>.
+<pre>
+<strong>trigger_error('Disaster');
+trigger_error('Catastrophe');
+$this-&gt;assertError();
+$this-&gt;assertError('Catastrophe');
+$this-&gt;assertNoErrors();</strong>
+</pre>
+ Ici, il y a besoin d'une petite explication :
+ toutes passent !
+ </p>
+ <p>
+ Les erreurs PHP dans SimpleTest sont piégées et
+ placées dans une queue. Ici la première vérification
+ d'erreur attrape le message "Disaster"
+ sans vérifier le texte et passe. Résultat :
+ l'erreur est supprimée de la queue.
+ La vérification suivante teste non seulement l'existence
+ de l'erreur mais aussi le texte qui correspond :
+ un autre succès. Désormais la queue est vide
+ et le dernier test passe aussi.
+ Si une autre erreur non vérifiée est encore
+ dans la queue à la fin de notre méthode de test
+ alors une exception sera rapportée dans le test.
+ Notez que SimpleTest ne peut pas attraper les erreurs PHP à la compilation.
+ </p>
+ <p>
+ Les scénarios de test peuvent utiliser des méthodes
+ bien pratiques pour déboguer le code ou pour étendre la suite...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">setUp()</span></td>
+<td>Est lancée avant chaque méthode de test</td>
+</tr>
+ <tr>
+<td><span class="new_code">tearDown()</span></td>
+<td>Est lancée après chaque méthode de test</td>
+</tr>
+ <tr>
+<td><span class="new_code">pass()</span></td>
+<td>Envoie un succès</td>
+</tr>
+ <tr>
+<td><span class="new_code">fail()</span></td>
+<td>Envoie un échec</td>
+</tr>
+ <tr>
+<td><span class="new_code">error()</span></td>
+<td>Envoi un évènement exception</td>
+</tr>
+ <tr>
+<td><span class="new_code">sendMessage()</span></td>
+<td>Envoie un message d'état aux systèmes d'affichage qui le supporte</td>
+</tr>
+ <tr>
+<td><span class="new_code">signal($type, $payload)</span></td>
+<td>Envoie un message défini par l'utilisateur au rapporteur du test</td>
+</tr>
+ <tr>
+<td><span class="new_code">dump($var)</span></td>
+<td>Effectue un <span class="new_code">print_r()</span> formaté pour du déboguage rapide et grossier</td>
+</tr>
+ <tr>
+<td><span class="new_code">swallowErrors()</span></td>
+<td>Vide les erreurs de la queue</td>
+</tr>
+ </tbody></table>
+ </p>
+
+ <p><a class="target" name="extension_unitaire"><h2>Etendre les scénarios de test</h2></a></p>
+ <p>
+ Bien sûr des méthodes supplémentaires de test
+ peuvent être ajoutées pour créer d'autres types
+ de scénario de test afin d'étendre le framework...
+<pre>
+require_once('simpletest/autorun.php');
+<strong>
+class FileTester extends UnitTestCase {
+ function FileTester($name = false) {
+ $this-&gt;UnitTestCase($name);
+ }
+
+ function assertFileExists($filename, $message = '%s') {
+ $this-&gt;assertTrue(
+ file_exists($filename),
+ sprintf($message, 'File [$filename] existence check'));
+ }</strong>
+}
+</pre>
+ Ici la bibliothèque SimpleTest est localisée
+ dans un répertoire local appelé <em>simpletest</em>.
+ Pensez à le modifier pour votre propre environnement.
+ </p>
+ <p>
+ Alternativement vous pourriez utiliser dans votre code
+ un directive <span class="new_code">SimpleTestOptions::ignore('FileTester');</span>.
+ </p>
+ <p>
+ Ce nouveau scénario peut être hérité exactement
+ comme un scénario de test classique...
+<pre>
+class FileTestCase extends <strong>FileTester</strong> {
+
+ function setUp() {
+ @unlink('../temp/test.txt');
+ }
+
+ function tearDown() {
+ @unlink('../temp/test.txt');
+ }
+
+ function testCreation() {
+ $writer = &amp;new FileWriter('../temp/test.txt');
+ $writer-&gt;write('Hello');<strong>
+ $this-&gt;assertFileExists('../temp/test.txt');</strong>
+ }
+}
+</pre>
+ </p>
+ <p>
+ Si vous souhaitez un scénario de test sans
+ toutes les assertions de <span class="new_code">UnitTestCase</span>
+ mais uniquement avec les vôtres propres,
+ vous aurez besoin d'étendre la classe
+ <span class="new_code">SimpleTestCase</span> à la place.
+ Elle se trouve dans <em>simple_test.php</em>
+ en lieu et place de <em>unit_tester.php</em>.
+ A consulter <a href="group_test_documentation.html">plus tard</a>
+ si vous souhaitez incorporer les scénarios
+ d'autres testeurs unitaires dans votre suite de test.
+ </p>
+
+ <p><a class="target" name="lancement_unitaire"><h2>Lancer un unique scénario de test</h2></a></p>
+ <p>
+ Ce n'est pas souvent qu'il faille lancer des scénarios
+ avec un unique test. Sauf lorsqu'il s'agit de s'arracher
+ les cheveux sur un module à problème sans pour
+ autant désorganiser la suite de test principale.
+ Avec <em>autorun</em> aucun échafaudage particulier
+ n'est nécessaire, il suffit de lancer votre test et
+ vous y êtes.
+ </p>
+ <p>
+ Vous pouvez même décider quel rapporteur
+ (par exemple, <span class="new_code">TextReporter</span> ou <span class="new_code">HtmlReporter</span>)
+ vous préférez pour un fichier spécifique quand il est lancé
+ tout seul...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');<strong>
+SimpleTest :: prefer(new TextReporter());</strong>
+require_once('../classes/writer.php');
+
+class FileTestCase extends UnitTestCase {
+ ...
+}
+?&gt;
+</pre>
+ Ce script sera lancé tel que mais il n'y aura
+ aucun succès ou échec avant que des méthodes de test soient ajoutées.
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ La page de SimpleTest sur
+ <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ La page de téléchargement de SimpleTest sur
+ <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">L'API complète de SimpleTest</a>
+ à partir de PHPDoc.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/docs/fr/web_tester_documentation.html b/vendors/simpletest/docs/fr/web_tester_documentation.html
new file mode 100644
index 000000000..5bb5a9e70
--- /dev/null
+++ b/vendors/simpletest/docs/fr/web_tester_documentation.html
@@ -0,0 +1,566 @@
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Documentation SimpleTest : tester des scripts web</title>
+<link rel="stylesheet" type="text/css" href="docs.css" title="Styles">
+</head>
+<body>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<h1>Documentation sur le testeur web</h1>
+ This page...
+ <ul>
+<li>
+ Réussir à <a href="#telecharger">télécharger une page web</a>
+ </li>
+<li>
+ Tester le <a href="#contenu">contenu de la page</a>
+ </li>
+<li>
+ <a href="#navigation">Naviguer sur un site web</a> pendant le test
+ </li>
+<li>
+ Méthodes pour <a href="#requete">modifier une requête</a> et pour déboguer
+ </li>
+</ul>
+<div class="content">
+ <p><a class="target" name="telecharger"><h2>Télécharger une page</h2></a></p>
+ <p>
+ Tester des classes c'est très bien.
+ Reste que PHP est avant tout un langage
+ pour créer des fonctionnalités à l'intérieur de pages web.
+ Comment pouvons tester la partie de devant
+ -- celle de l'interface -- dans nos applications en PHP ?
+ Etant donné qu'une page web n'est constituée que de texte,
+ nous devrions pouvoir les examiner exactement
+ comme n'importe quelle autre donnée de test.
+ </p>
+ <p>
+ Cela nous amène à une situation délicate.
+ Si nous testons dans un niveau trop bas,
+ vérifier des balises avec un motif ad hoc par exemple,
+ nos tests seront trop fragiles. Le moindre changement
+ dans la présentation pourrait casser un grand nombre de test.
+ Si nos tests sont situés trop haut, en utilisant
+ une version fantaisie du moteur de template pour
+ donner un cas précis, alors nous perdons complètement
+ la capacité à automatiser certaines classes de test.
+ Par exemple, l'interaction entre des formulaires
+ et la navigation devra être testé manuellement.
+ Ces types de test sont extrêmement fastidieux
+ et plutôt sensibles aux erreurs.
+ </p>
+ <p>
+ SimpleTest comprend une forme spéciale de scénario
+ de test pour tester les actions d'une page web.
+ <span class="new_code">WebTestCase</span> inclut des facilités pour la navigation,
+ des vérifications sur le contenu
+ et les cookies ainsi que la gestion des formulaires.
+ Utiliser ces scénarios de test ressemble
+ fortement à <span class="new_code">UnitTestCase</span>...
+<pre>
+<strong>class TestOfLastcraft extends WebTestCase {
+}</strong>
+</pre>
+ Ici nous sommes sur le point de tester
+ le site de <a href="http://www.lastcraft.com/">Last Craft</a>.
+ Si ce scénario de test est situé dans un fichier appelé
+ <em>lastcraft_test.php</em> alors il peut être chargé
+ dans un script de lancement tout comme des tests unitaires...
+<pre>
+&lt;?php
+require_once('simpletest/autorun.php');<strong>
+require_once('simpletest/web_tester.php');</strong>
+SimpleTest::prefer(new TextReporter());
+
+class WebTests extends TestSuite {
+ function WebTests() {
+ $this-&gt;TestSuite('Web site tests');<strong>
+ $this-&gt;addFile('lastcraft_test.php');</strong>
+ }
+}
+?&gt;
+</pre>
+ J'utilise ici le rapporteur en mode texte
+ pour mieux distinguer le contenu au format HTML
+ du résultat du test proprement dit.
+ </p>
+ <p>
+ Rien n'est encore testé. Nous pouvons télécharger
+ la page d'accueil en utilisant la méthode <span class="new_code">get()</span>...
+<pre>
+class TestOfLastcraft extends WebTestCase {
+ <strong>
+ function testHomepage() {
+ $this-&gt;assertTrue($this-&gt;get('http://www.lastcraft.com/'));
+ }</strong>
+}
+</pre>
+ La méthode <span class="new_code">get()</span> renverra "true"
+ uniquement si le contenu de la page a bien été téléchargé.
+ C'est un moyen simple, mais efficace pour vérifier
+ qu'une page web a bien été délivré par le serveur web.
+ Cependant le contenu peut révéler être une erreur 404
+ et dans ce cas notre méthode <span class="new_code">get()</span> renverrait encore un succès.
+ </p>
+ <p>
+ En supposant que le serveur web pour le site Last Craft
+ soit opérationnel (malheureusement ce n'est pas toujours le cas),
+ nous devrions voir...
+<pre class="shell">
+Web site tests
+OK
+Test cases run: 1/1, Failures: 0, Exceptions: 0
+</pre>
+ Nous avons vérifié qu'une page, de n'importe quel type,
+ a bien été renvoyée. Nous ne savons pas encore
+ s'il s'agit de celle que nous souhaitions.
+ </p>
+
+ <p><a class="target" name="contenu"><h2>Tester le contenu d'une page</h2></a></p>
+ <p>
+ Pour obtenir la confirmation que la page téléchargée
+ est bien celle que nous attendions,
+ nous devons vérifier son contenu.
+<pre>
+class TestOfLastcraft extends WebTestCase {
+
+ function testHomepage() {<strong>
+ $this-&gt;get('http://www.lastcraft.com/');
+ $this-&gt;assertWantedPattern('/why the last craft/i');</strong>
+ }
+}
+</pre>
+ La page obtenue par le dernier téléchargement est
+ placée dans un buffer au sein même du scénario de test.
+ Il n'est donc pas nécessaire de s'y référer directement.
+ La correspondance du motif est toujours effectuée
+ par rapport à ce buffer.
+ </p>
+ <p>
+ Voici une liste possible d'assertions sur le contenu...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">assertWantedPattern($pattern)</span></td>
+<td>Vérifier une correspondance sur le contenu via une expression rationnelle Perl</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoUnwantedPattern($pattern)</span></td>
+<td>Une expression rationnelle Perl pour vérifier une absence</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertTitle($title)</span></td>
+<td>Passe si le titre de la page correspond exactement</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertLink($label)</span></td>
+<td>Passe si un lien avec ce texte est présent</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoLink($label)</span></td>
+<td>Passe si aucun lien avec ce texte est présent</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertLinkById($id)</span></td>
+<td>Passe si un lien avec cet attribut d'identification est présent</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertField($name, $value)</span></td>
+<td>Passe si une balise input avec ce nom contient cette valeur</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertFieldById($id, $value)</span></td>
+<td>Passe si une balise input avec cet identifiant contient cette valeur</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertResponse($codes)</span></td>
+<td>Passe si la réponse HTTP trouve une correspondance dans la liste</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertMime($types)</span></td>
+<td>Passe si le type MIME se retrouve dans cette liste</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertAuthentication($protocol)</span></td>
+<td>Passe si l'authentification provoquée est de ce type de protocole</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoAuthentication()</span></td>
+<td>Passe s'il n'y pas d'authentification provoquée en cours</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertRealm($name)</span></td>
+<td>Passe si le domaine provoqué correspond</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertHeader($header, $content)</span></td>
+<td>Passe si une entête téléchargée correspond à cette valeur</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoUnwantedHeader($header)</span></td>
+<td>Passe si une entête n'a pas été téléchargé</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertHeaderPattern($header, $pattern)</span></td>
+<td>Passe si une entête téléchargée correspond à cette expression rationnelle Perl</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertCookie($name, $value)</span></td>
+<td>Passe s'il existe un cookie correspondant</td>
+</tr>
+ <tr>
+<td><span class="new_code">assertNoCookie($name)</span></td>
+<td>Passe s'il n'y a pas de cookie avec un tel nom</td>
+</tr>
+ </tbody></table>
+ Comme d'habitude avec les assertions de SimpleTest,
+ elles renvoient toutes "false" en cas d'échec
+ et "true" si c'est un succès.
+ Elles renvoient aussi un message de test optionnel :
+ vous pouvez l'ajouter dans votre propre message en utilisant "%s".
+ </p>
+ <p>
+ A présent nous pourrions effectué le test sur le titre uniquement...
+<pre>
+<strong>$this-&gt;assertTitle('The Last Craft?');</strong>
+</pre>
+ En plus d'une simple vérification sur le contenu HTML,
+ nous pouvons aussi vérifier que le type MIME est bien d'un type acceptable...
+<pre>
+<strong>$this-&gt;assertMime(array('text/plain', 'text/html'));</strong>
+</pre>
+ Plus intéressant encore est la vérification sur
+ le code de la réponse HTTP. Pareillement au type MIME,
+ nous pouvons nous assurer que le code renvoyé se trouve
+ bien dans un liste de valeurs possibles...
+<pre>
+class TestOfLastcraft extends WebTestCase {
+
+ function testHomepage() {
+ $this-&gt;get('http://simpletest.sourceforge.net/');<strong>
+ $this-&gt;assertResponse(200);</strong>
+ }
+}
+</pre>
+ Ici nous vérifions que le téléchargement s'est
+ bien terminé en ne permettant qu'une réponse HTTP 200.
+ Ce test passera, mais ce n'est pas la meilleure façon de procéder.
+ Il n'existe aucune page sur <em>http://simpletest.sourceforge.net/</em>,
+ à la place le serveur renverra une redirection vers
+ <em>http://www.lastcraft.com/simple_test.php</em>.
+ <span class="new_code">WebTestCase</span> suit automatiquement trois
+ de ces redirections. Les tests sont quelque peu plus
+ robustes de la sorte. Surtout qu'on est souvent plus intéressé
+ par l'interaction entre les pages que de leur simple livraison.
+ Si les redirections se révèlent être digne d'intérêt,
+ il reste possible de les supprimer...
+<pre>
+class TestOfLastcraft extends WebTestCase {
+
+ function testHomepage() {<strong>
+ $this-&gt;setMaximumRedirects(0);</strong>
+ $this-&gt;get('http://simpletest.sourceforge.net/');
+ $this-&gt;assertResponse(200);
+ }
+}
+</pre>
+ Alors l'assertion échoue comme prévue...
+<pre class="shell">
+Web site tests
+1) Expecting response in [200] got [302]
+ in testhomepage
+ in testoflastcraft
+ in lastcraft_test.php
+FAILURES!!!
+Test cases run: 1/1, Failures: 1, Exceptions: 0
+</pre>
+ Nous pouvons modifier le test pour accepter les redirections...
+<pre>
+class TestOfLastcraft extends WebTestCase {
+
+ function testHomepage() {
+ $this-&gt;setMaximumRedirects(0);
+ $this-&gt;get('http://simpletest.sourceforge.net/');
+ $this-&gt;assertResponse(<strong>array(301, 302, 303, 307)</strong>);
+ }
+}
+</pre>
+ Maitenant ça passe.
+ </p>
+
+ <p><a class="target" name="navigation"><h2>Navigeur dans un site web</h2></a></p>
+ <p>
+ Les utilisateurs ne naviguent pas souvent en tapant les URLs,
+ mais surtout en cliquant sur des liens et des boutons.
+ Ici nous confirmons que les informations sur le contact
+ peuvent être atteintes depuis la page d'accueil...
+<pre>
+class TestOfLastcraft extends WebTestCase {
+ ...
+ function testContact() {
+ $this-&gt;get('http://www.lastcraft.com/');<strong>
+ $this-&gt;clickLink('About');
+ $this-&gt;assertTitle('About Last Craft');</strong>
+ }
+}
+</pre>
+ Le paramètre est le texte du lien.
+ </p>
+ <p>
+ Il l'objectif est un bouton plutôt qu'une balise ancre,
+ alors <span class="new_code">clickSubmit()</span> doit être utilisé avec
+ le titre du bouton...
+<pre>
+<strong>$this-&gt;clickSubmit('Go!');</strong>
+</pre>
+ </p>
+ <p>
+ La liste des méthodes de navigation est...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">get($url, $parameters)</span></td>
+<td>Envoie une requête GET avec ces paramètres</td>
+</tr>
+ <tr>
+<td><span class="new_code">post($url, $parameters)</span></td>
+<td>Envoie une requête POST avec ces paramètres</td>
+</tr>
+ <tr>
+<td><span class="new_code">head($url, $parameters)</span></td>
+<td>Envoie une requête HEAD sans remplacer le contenu de la page</td>
+</tr>
+ <tr>
+<td><span class="new_code">retry()</span></td>
+<td>Relance la dernière requête</td>
+</tr>
+ <tr>
+<td><span class="new_code">back()</span></td>
+<td>Identique au bouton "Précédent" du navigateur</td>
+</tr>
+ <tr>
+<td><span class="new_code">forward()</span></td>
+<td>Identique au bouton "Suivant" du navigateur</td>
+</tr>
+ <tr>
+<td><span class="new_code">authenticate($name, $password)</span></td>
+<td>Re-essaye avec une tentative d'authentification</td>
+</tr>
+ <tr>
+<td><span class="new_code">getFrameFocus()</span></td>
+<td>Le nom de la fenêtre en cours d'utilisation</td>
+</tr>
+ <tr>
+<td><span class="new_code">setFrameFocusByIndex($choice)</span></td>
+<td>Change le focus d'une fenêtre en commençant par 1</td>
+</tr>
+ <tr>
+<td><span class="new_code">setFrameFocus($name)</span></td>
+<td>Change le focus d'une fenêtre en utilisant son nom</td>
+</tr>
+ <tr>
+<td><span class="new_code">clearFrameFocus()</span></td>
+<td>Revient à un traitement de toutes les fenêtres comme une seule</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmit($label)</span></td>
+<td>Clique sur le premier bouton avec cette étiquette</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmitByName($name)</span></td>
+<td>Clique sur le bouton avec cet attribut de nom</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickSubmitById($id)</span></td>
+<td>Clique sur le bouton avec cet attribut d'identification</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImage($label, $x, $y)</span></td>
+<td>Clique sur une balise input de type image par son titre (title="*") our son texte alternatif (alt="*")</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImageByName($name, $x, $y)</span></td>
+<td>Clique sur une balise input de type image par son attribut (name="*")</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickImageById($id, $x, $y)</span></td>
+<td>Clique sur une balise input de type image par son identifiant (id="*")</td>
+</tr>
+ <tr>
+<td><span class="new_code">submitFormById($id)</span></td>
+<td>Soumet un formulaire sans valeur de soumission</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickLink($label, $index)</span></td>
+<td>Clique sur une ancre avec ce texte d'étiquette visible</td>
+</tr>
+ <tr>
+<td><span class="new_code">clickLinkById($id)</span></td>
+<td>Clique sur une ancre avec cet attribut d'identification</td>
+</tr>
+ </tbody></table>
+ </p>
+ <p>
+ Les paramètres dans les méthodes <span class="new_code">get()</span>,
+ <span class="new_code">post()</span> et <span class="new_code">head()</span> sont optionnels.
+ Le téléchargement via HTTP HEAD ne modifie pas
+ le contexte du navigateur, il se limite au chargement des cookies.
+ Cela peut être utilise lorsqu'une image ou une feuille de style
+ initie un cookie pour bloquer un robot trop entreprenant.
+ </p>
+ <p>
+ Les commandes <span class="new_code">retry()</span>, <span class="new_code">back()</span>
+ et <span class="new_code">forward()</span> fonctionnent exactement comme
+ dans un navigateur. Elles utilisent l'historique pour
+ relancer les pages. Une technique bien pratique pour
+ vérifier les effets d'un bouton retour sur vos formulaires.
+ </p>
+ <p>
+ Les méthodes sur les fenêtres méritent une petite explication.
+ Par défaut, une page avec des fenêtres est traitée comme toutes
+ les autres. Le contenu sera vérifié à travers l'ensemble de
+ la "frameset", par conséquent un lien fonctionnera,
+ peu importe la fenêtre qui contient la balise ancre.
+ Vous pouvez outrepassé ce comportement en exigeant
+ le focus sur une unique fenêtre. Si vous réalisez cela,
+ toutes les recherches et toutes les actions se limiteront
+ à cette unique fenêtre, y compris les demandes d'authentification.
+ Si un lien ou un bouton n'est pas dans la fenêtre en focus alors
+ il ne peut pas être cliqué.
+ </p>
+ <p>
+ Tester la navigation sur des pages fixes ne vous alerte que
+ quand vous avez cassé un script entier.
+ Pour des pages fortement dynamiques,
+ un forum de discussion par exemple,
+ ça peut être crucial pour vérifier l'état de l'application.
+ Pour la plupart des applications cependant,
+ la logique vraiment délicate se situe dans la gestion
+ des formulaires et des sessions.
+ Heureusement SimpleTest aussi inclut
+ <a href="form_testing_documentation.html">
+ des outils pour tester des formulaires web</a>.
+ </p>
+
+ <p><a class="target" name="requete"><h2>Modifier la requête</h2></a></p>
+ <p>
+ Bien que SimpleTest n'ait pas comme objectif
+ de contrôler des erreurs réseau, il contient quand même
+ des méthodes pour modifier et déboguer les requêtes qu'il lance.
+ Voici une autre liste de méthode...
+ <table><tbody>
+ <tr>
+<td><span class="new_code">getTransportError()</span></td>
+<td>La dernière erreur de socket</td>
+</tr>
+ <tr>
+<td><span class="new_code">getUrl()</span></td>
+<td>La localisation courante</td>
+</tr>
+ <tr>
+<td><span class="new_code">showRequest()</span></td>
+<td>Déverse la requête sortante</td>
+</tr>
+ <tr>
+<td><span class="new_code">showHeaders()</span></td>
+<td>Déverse les entêtes d'entrée</td>
+</tr>
+ <tr>
+<td><span class="new_code">showSource()</span></td>
+<td>Déverse le contenu brut de la page HTML</td>
+</tr>
+ <tr>
+<td><span class="new_code">ignoreFrames()</span></td>
+<td>Ne recharge pas les framesets</td>
+</tr>
+ <tr>
+<td><span class="new_code">setCookie($name, $value)</span></td>
+<td>Initie un cookie à partir de maintenant</td>
+</tr>
+ <tr>
+<td><span class="new_code">addHeader($header)</span></td>
+<td>Ajoute toujours cette entête à la requête</td>
+</tr>
+ <tr>
+<td><span class="new_code">setMaximumRedirects($max)</span></td>
+<td>S'arrête après autant de redirections</td>
+</tr>
+ <tr>
+<td><span class="new_code">setConnectionTimeout($timeout)</span></td>
+<td>Termine la connexion après autant de temps entre les bytes</td>
+</tr>
+ <tr>
+<td><span class="new_code">useProxy($proxy, $name, $password)</span></td>
+<td>Effectue les requêtes à travers ce proxy d'URL</td>
+</tr>
+ </tbody></table>
+ </p>
+
+ </div>
+ References and related information...
+ <ul>
+<li>
+ La page du projet SimpleTest sur
+ <a href="http://sourceforge.net/projects/simpletest/">SourceForge</a>.
+ </li>
+<li>
+ La page de téléchargement de SimpleTest sur
+ <a href="http://www.lastcraft.com/simple_test.php">LastCraft</a>.
+ </li>
+<li>
+ <a href="http://simpletest.org/api/">L'API du développeur pour SimpleTest</a>
+ donne tous les détails sur les classes et les assertions disponibles.
+ </li>
+</ul>
+<div class="menu_back"><div class="menu">
+<a href="index.html">SimpleTest</a>
+ |
+ <a href="overview.html">Overview</a>
+ |
+ <a href="unit_test_documentation.html">Unit tester</a>
+ |
+ <a href="group_test_documentation.html">Group tests</a>
+ |
+ <a href="mock_objects_documentation.html">Mock objects</a>
+ |
+ <a href="partial_mocks_documentation.html">Partial mocks</a>
+ |
+ <a href="reporter_documentation.html">Reporting</a>
+ |
+ <a href="expectation_documentation.html">Expectations</a>
+ |
+ <a href="web_tester_documentation.html">Web tester</a>
+ |
+ <a href="form_testing_documentation.html">Testing forms</a>
+ |
+ <a href="authentication_documentation.html">Authentication</a>
+ |
+ <a href="browser_documentation.html">Scriptable browser</a>
+</div></div>
+<div class="copyright">
+ Copyright<br>Marcus Baker 2006
+ </div>
+</body>
+</html>
diff --git a/vendors/simpletest/dumper.php b/vendors/simpletest/dumper.php
new file mode 100644
index 000000000..2d75985c0
--- /dev/null
+++ b/vendors/simpletest/dumper.php
@@ -0,0 +1,360 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: dumper.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+/**
+ * does type matter
+ */
+if (! defined('TYPE_MATTERS')) {
+ define('TYPE_MATTERS', true);
+}
+
+/**
+ * Displays variables as text and does diffs.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleDumper {
+
+ /**
+ * Renders a variable in a shorter form than print_r().
+ * @param mixed $value Variable to render as a string.
+ * @return string Human readable string form.
+ * @access public
+ */
+ function describeValue($value) {
+ $type = $this->getType($value);
+ switch($type) {
+ case "Null":
+ return "NULL";
+ case "Boolean":
+ return "Boolean: " . ($value ? "true" : "false");
+ case "Array":
+ return "Array: " . count($value) . " items";
+ case "Object":
+ return "Object: of " . get_class($value);
+ case "String":
+ return "String: " . $this->clipString($value, 200);
+ default:
+ return "$type: $value";
+ }
+ return "Unknown";
+ }
+
+ /**
+ * Gets the string representation of a type.
+ * @param mixed $value Variable to check against.
+ * @return string Type.
+ * @access public
+ */
+ function getType($value) {
+ if (! isset($value)) {
+ return "Null";
+ } elseif (is_bool($value)) {
+ return "Boolean";
+ } elseif (is_string($value)) {
+ return "String";
+ } elseif (is_integer($value)) {
+ return "Integer";
+ } elseif (is_float($value)) {
+ return "Float";
+ } elseif (is_array($value)) {
+ return "Array";
+ } elseif (is_resource($value)) {
+ return "Resource";
+ } elseif (is_object($value)) {
+ return "Object";
+ }
+ return "Unknown";
+ }
+
+ /**
+ * Creates a human readable description of the
+ * difference between two variables. Uses a
+ * dynamic call.
+ * @param mixed $first First variable.
+ * @param mixed $second Value to compare with.
+ * @param boolean $identical If true then type anomolies count.
+ * @return string Description of difference.
+ * @access public
+ */
+ function describeDifference($first, $second, $identical = false) {
+ if ($identical) {
+ if (! $this->_isTypeMatch($first, $second)) {
+ return "with type mismatch as [" . $this->describeValue($first) .
+ "] does not match [" . $this->describeValue($second) . "]";
+ }
+ }
+ $type = $this->getType($first);
+ if ($type == "Unknown") {
+ return "with unknown type";
+ }
+ $method = '_describe' . $type . 'Difference';
+ return $this->$method($first, $second, $identical);
+ }
+
+ /**
+ * Tests to see if types match.
+ * @param mixed $first First variable.
+ * @param mixed $second Value to compare with.
+ * @return boolean True if matches.
+ * @access private
+ */
+ function _isTypeMatch($first, $second) {
+ return ($this->getType($first) == $this->getType($second));
+ }
+
+ /**
+ * Clips a string to a maximum length.
+ * @param string $value String to truncate.
+ * @param integer $size Minimum string size to show.
+ * @param integer $position Centre of string section.
+ * @return string Shortened version.
+ * @access public
+ */
+ function clipString($value, $size, $position = 0) {
+ $length = strlen($value);
+ if ($length <= $size) {
+ return $value;
+ }
+ $position = min($position, $length);
+ $start = ($size/2 > $position ? 0 : $position - $size/2);
+ if ($start + $size > $length) {
+ $start = $length - $size;
+ }
+ $value = substr($value, $start, $size);
+ return ($start > 0 ? "..." : "") . $value . ($start + $size < $length ? "..." : "");
+ }
+
+ /**
+ * Creates a human readable description of the
+ * difference between two variables. The minimal
+ * version.
+ * @param null $first First value.
+ * @param mixed $second Value to compare with.
+ * @return string Human readable description.
+ * @access private
+ */
+ function _describeGenericDifference($first, $second) {
+ return "as [" . $this->describeValue($first) .
+ "] does not match [" .
+ $this->describeValue($second) . "]";
+ }
+
+ /**
+ * Creates a human readable description of the
+ * difference between a null and another variable.
+ * @param null $first First null.
+ * @param mixed $second Null to compare with.
+ * @param boolean $identical If true then type anomolies count.
+ * @return string Human readable description.
+ * @access private
+ */
+ function _describeNullDifference($first, $second, $identical) {
+ return $this->_describeGenericDifference($first, $second);
+ }
+
+ /**
+ * Creates a human readable description of the
+ * difference between a boolean and another variable.
+ * @param boolean $first First boolean.
+ * @param mixed $second Boolean to compare with.
+ * @param boolean $identical If true then type anomolies count.
+ * @return string Human readable description.
+ * @access private
+ */
+ function _describeBooleanDifference($first, $second, $identical) {
+ return $this->_describeGenericDifference($first, $second);
+ }
+
+ /**
+ * Creates a human readable description of the
+ * difference between a string and another variable.
+ * @param string $first First string.
+ * @param mixed $second String to compare with.
+ * @param boolean $identical If true then type anomolies count.
+ * @return string Human readable description.
+ * @access private
+ */
+ function _describeStringDifference($first, $second, $identical) {
+ if (is_object($second) || is_array($second)) {
+ return $this->_describeGenericDifference($first, $second);
+ }
+ $position = $this->_stringDiffersAt($first, $second);
+ $message = "at character $position";
+ $message .= " with [" .
+ $this->clipString($first, 200, $position) . "] and [" .
+ $this->clipString($second, 200, $position) . "]";
+ return $message;
+ }
+
+ /**
+ * Creates a human readable description of the
+ * difference between an integer and another variable.
+ * @param integer $first First number.
+ * @param mixed $second Number to compare with.
+ * @param boolean $identical If true then type anomolies count.
+ * @return string Human readable description.
+ * @access private
+ */
+ function _describeIntegerDifference($first, $second, $identical) {
+ if (is_object($second) || is_array($second)) {
+ return $this->_describeGenericDifference($first, $second);
+ }
+ return "because [" . $this->describeValue($first) .
+ "] differs from [" .
+ $this->describeValue($second) . "] by " .
+ abs($first - $second);
+ }
+
+ /**
+ * Creates a human readable description of the
+ * difference between two floating point numbers.
+ * @param float $first First float.
+ * @param mixed $second Float to compare with.
+ * @param boolean $identical If true then type anomolies count.
+ * @return string Human readable description.
+ * @access private
+ */
+ function _describeFloatDifference($first, $second, $identical) {
+ if (is_object($second) || is_array($second)) {
+ return $this->_describeGenericDifference($first, $second);
+ }
+ return "because [" . $this->describeValue($first) .
+ "] differs from [" .
+ $this->describeValue($second) . "] by " .
+ abs($first - $second);
+ }
+
+ /**
+ * Creates a human readable description of the
+ * difference between two arrays.
+ * @param array $first First array.
+ * @param mixed $second Array to compare with.
+ * @param boolean $identical If true then type anomolies count.
+ * @return string Human readable description.
+ * @access private
+ */
+ function _describeArrayDifference($first, $second, $identical) {
+ if (! is_array($second)) {
+ return $this->_describeGenericDifference($first, $second);
+ }
+ if (! $this->_isMatchingKeys($first, $second, $identical)) {
+ return "as key list [" .
+ implode(", ", array_keys($first)) . "] does not match key list [" .
+ implode(", ", array_keys($second)) . "]";
+ }
+ foreach (array_keys($first) as $key) {
+ if ($identical && ($first[$key] === $second[$key])) {
+ continue;
+ }
+ if (! $identical && ($first[$key] == $second[$key])) {
+ continue;
+ }
+ return "with member [$key] " . $this->describeDifference(
+ $first[$key],
+ $second[$key],
+ $identical);
+ }
+ return "";
+ }
+
+ /**
+ * Compares two arrays to see if their key lists match.
+ * For an identical match, the ordering and types of the keys
+ * is significant.
+ * @param array $first First array.
+ * @param array $second Array to compare with.
+ * @param boolean $identical If true then type anomolies count.
+ * @return boolean True if matching.
+ * @access private
+ */
+ function _isMatchingKeys($first, $second, $identical) {
+ $first_keys = array_keys($first);
+ $second_keys = array_keys($second);
+ if ($identical) {
+ return ($first_keys === $second_keys);
+ }
+ sort($first_keys);
+ sort($second_keys);
+ return ($first_keys == $second_keys);
+ }
+
+ /**
+ * Creates a human readable description of the
+ * difference between a resource and another variable.
+ * @param resource $first First resource.
+ * @param mixed $second Resource to compare with.
+ * @param boolean $identical If true then type anomolies count.
+ * @return string Human readable description.
+ * @access private
+ */
+ function _describeResourceDifference($first, $second, $identical) {
+ return $this->_describeGenericDifference($first, $second);
+ }
+
+ /**
+ * Creates a human readable description of the
+ * difference between two objects.
+ * @param object $first First object.
+ * @param mixed $second Object to compare with.
+ * @param boolean $identical If true then type anomolies count.
+ * @return string Human readable description.
+ * @access private
+ */
+ function _describeObjectDifference($first, $second, $identical) {
+ if (! is_object($second)) {
+ return $this->_describeGenericDifference($first, $second);
+ }
+ return $this->_describeArrayDifference(
+ get_object_vars($first),
+ get_object_vars($second),
+ $identical);
+ }
+
+ /**
+ * Find the first character position that differs
+ * in two strings by binary chop.
+ * @param string $first First string.
+ * @param string $second String to compare with.
+ * @return integer Position of first differing
+ * character.
+ * @access private
+ */
+ function _stringDiffersAt($first, $second) {
+ if (! $first || ! $second) {
+ return 0;
+ }
+ if (strlen($first) < strlen($second)) {
+ list($first, $second) = array($second, $first);
+ }
+ $position = 0;
+ $step = strlen($first);
+ while ($step > 1) {
+ $step = (integer)(($step + 1) / 2);
+ if (strncmp($first, $second, $position + $step) == 0) {
+ $position += $step;
+ }
+ }
+ return $position;
+ }
+
+ /**
+ * Sends a formatted dump of a variable to a string.
+ * @param mixed $variable Variable to display.
+ * @return string Output from print_r().
+ * @access public
+ * @static
+ */
+ function dump($variable) {
+ ob_start();
+ print_r($variable);
+ $formatted = ob_get_contents();
+ ob_end_clean();
+ return $formatted;
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/eclipse.php b/vendors/simpletest/eclipse.php
new file mode 100644
index 000000000..0f1a4fcb2
--- /dev/null
+++ b/vendors/simpletest/eclipse.php
@@ -0,0 +1,307 @@
+<?php
+/**
+ * base include file for eclipse plugin
+ * @package SimpleTest
+ * @subpackage Eclipse
+ * @version $Id: eclipse.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+/**#@+
+ * simpletest include files
+ */
+include_once 'unit_tester.php';
+include_once 'test_case.php';
+include_once 'invoker.php';
+include_once 'socket.php';
+include_once 'mock_objects.php';
+/**#@-*/
+
+/**
+ * base reported class for eclipse plugin
+ * @package SimpleTest
+ * @subpackage Eclipse
+ */
+class EclipseReporter extends SimpleScorer {
+
+ /**
+ * Reporter to be run inside of Eclipse interface.
+ * @param object $listener Eclipse listener (?).
+ * @param boolean $cc Whether to include test coverage.
+ */
+ function EclipseReporter(&$listener, $cc=false){
+ $this->_listener = &$listener;
+ $this->SimpleScorer();
+ $this->_case = "";
+ $this->_group = "";
+ $this->_method = "";
+ $this->_cc = $cc;
+ $this->_error = false;
+ $this->_fail = false;
+ }
+
+ /**
+ * Means to display human readable object comparisons.
+ * @return SimpleDumper Visual comparer.
+ */
+ function getDumper() {
+ return new SimpleDumper();
+ }
+
+ /**
+ * Localhost connection from Eclipse.
+ * @param integer $port Port to connect to Eclipse.
+ * @param string $host Normally localhost.
+ * @return SimpleSocket Connection to Eclipse.
+ */
+ function &createListener($port, $host="127.0.0.1"){
+ $tmplistener = &new SimpleSocket($host, $port, 5);
+ return $tmplistener;
+ }
+
+ /**
+ * Wraps the test in an output buffer.
+ * @param SimpleInvoker $invoker Current test runner.
+ * @return EclipseInvoker Decorator with output buffering.
+ * @access public
+ */
+ function &createInvoker(&$invoker){
+ $eclinvoker = &new EclipseInvoker($invoker, $this->_listener);
+ return $eclinvoker;
+ }
+
+ /**
+ * C style escaping.
+ * @param string $raw String with backslashes, quotes and whitespace.
+ * @return string Replaced with C backslashed tokens.
+ */
+ function escapeVal($raw){
+ $needle = array("\\","\"","/","\b","\f","\n","\r","\t");
+ $replace = array('\\\\','\"','\/','\b','\f','\n','\r','\t');
+ return str_replace($needle, $replace, $raw);
+ }
+
+ /**
+ * Stash the first passing item. Clicking the test
+ * item goes to first pass.
+ * @param string $message Test message, but we only wnat the first.
+ * @access public
+ */
+ function paintPass($message){
+ if (! $this->_pass){
+ $this->_message = $this->escapeVal($message);
+ }
+ $this->_pass = true;
+ }
+
+ /**
+ * Stash the first failing item. Clicking the test
+ * item goes to first fail.
+ * @param string $message Test message, but we only wnat the first.
+ * @access public
+ */
+ function paintFail($message){
+ //only get the first failure or error
+ if (! $this->_fail && ! $this->_error){
+ $this->_fail = true;
+ $this->_message = $this->escapeVal($message);
+ $this->_listener->write('{status:"fail",message:"'.$this->_message.'",group:"'.$this->_group.'",case:"'.$this->_case.'",method:"'.$this->_method.'"}');
+ }
+ }
+
+ /**
+ * Stash the first error. Clicking the test
+ * item goes to first error.
+ * @param string $message Test message, but we only wnat the first.
+ * @access public
+ */
+ function paintError($message){
+ if (! $this->_fail && ! $this->_error){
+ $this->_error = true;
+ $this->_message = $this->escapeVal($message);
+ $this->_listener->write('{status:"error",message:"'.$this->_message.'",group:"'.$this->_group.'",case:"'.$this->_case.'",method:"'.$this->_method.'"}');
+ }
+ }
+
+
+ /**
+ * Stash the first exception. Clicking the test
+ * item goes to first message.
+ * @param string $message Test message, but we only wnat the first.
+ * @access public
+ */
+ function paintException($exception){
+ if (! $this->_fail && ! $this->_error){
+ $this->_error = true;
+ $message = 'Unexpected exception of type[' . get_class($exception) .
+ '] with message [' . $exception->getMessage() . '] in [' .
+ $exception->getFile() .' line '. $exception->getLine() . ']';
+ $this->_message = $this->escapeVal($message);
+ $this->_listener->write(
+ '{status:"error",message:"' . $this->_message . '",group:"' .
+ $this->_group . '",case:"' . $this->_case . '",method:"' . $this->_method
+ . '"}');
+ }
+ }
+
+
+ /**
+ * We don't display any special header.
+ * @param string $test_name First test top level
+ * to start.
+ * @access public
+ */
+ function paintHeader($test_name) {
+ }
+
+ /**
+ * We don't display any special footer.
+ * @param string $test_name The top level test.
+ * @access public
+ */
+ function paintFooter($test_name) {
+ }
+
+ /**
+ * Paints nothing at the start of a test method, but stash
+ * the method name for later.
+ * @param string $test_name Name of test that is starting.
+ * @access public
+ */
+ function paintMethodStart($method) {
+ $this->_pass = false;
+ $this->_fail = false;
+ $this->_error = false;
+ $this->_method = $this->escapeVal($method);
+ }
+
+ /**
+ * Only send one message if the test passes, after that
+ * suppress the message.
+ * @param string $test_name Name of test that is ending.
+ * @access public
+ */
+ function paintMethodEnd($method){
+ if ($this->_fail || $this->_error || ! $this->_pass){
+ } else {
+ $this->_listener->write(
+ '{status:"pass",message:"' . $this->_message . '",group:"' .
+ $this->_group . '",case:"' . $this->_case . '",method:"' .
+ $this->_method . '"}');
+ }
+ }
+
+ /**
+ * Stashes the test case name for the later failure message.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintCaseStart($case){
+ $this->_case = $this->escapeVal($case);
+ }
+
+ /**
+ * Drops the name.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintCaseEnd($case){
+ $this->_case = "";
+ }
+
+ /**
+ * Stashes the name of the test suite. Starts test coverage
+ * if enabled.
+ * @param string $group Name of test or other label.
+ * @param integer $size Number of test cases starting.
+ * @access public
+ */
+ function paintGroupStart($group, $size){
+ $this->_group = $this->escapeVal($group);
+ if ($this->_cc){
+ if (extension_loaded('xdebug')){
+ xdebug_start_code_coverage(XDEBUG_CC_UNUSED | XDEBUG_CC_DEAD_CODE);
+ }
+ }
+ }
+
+ /**
+ * Paints coverage report if enabled.
+ * @param string $group Name of test or other label.
+ * @access public
+ */
+ function paintGroupEnd($group){
+ $this->_group = "";
+ $cc = "";
+ if ($this->_cc){
+ if (extension_loaded('xdebug')){
+ $arrfiles = xdebug_get_code_coverage();
+ xdebug_stop_code_coverage();
+ $thisdir = dirname(__FILE__);
+ $thisdirlen = strlen($thisdir);
+ foreach ($arrfiles as $index=>$file){
+ if (substr($index, 0, $thisdirlen)===$thisdir){
+ continue;
+ }
+ $lcnt = 0;
+ $ccnt = 0;
+ foreach ($file as $line){
+ if ($line == -2){
+ continue;
+ }
+ $lcnt++;
+ if ($line==1){
+ $ccnt++;
+ }
+ }
+ if ($lcnt > 0){
+ $cc .= round(($ccnt/$lcnt) * 100, 2) . '%';
+ }else{
+ $cc .= "0.00%";
+ }
+ $cc.= "\t". $index . "\n";
+ }
+ }
+ }
+ $this->_listener->write('{status:"coverage",message:"' .
+ EclipseReporter::escapeVal($cc) . '"}');
+ }
+}
+
+/**
+ * Invoker decorator for Eclipse. Captures output until
+ * the end of the test.
+ * @package SimpleTest
+ * @subpackage Eclipse
+ */
+class EclipseInvoker extends SimpleInvokerDecorator{
+ function EclipseInvoker(&$invoker, &$listener) {
+ $this->_listener = &$listener;
+ $this->SimpleInvokerDecorator($invoker);
+ }
+
+ /**
+ * Starts output buffering.
+ * @param string $method Test method to call.
+ * @access public
+ */
+ function before($method){
+ ob_start();
+ $this->_invoker->before($method);
+ }
+
+ /**
+ * Stops output buffering and send the captured output
+ * to the listener.
+ * @param string $method Test method to call.
+ * @access public
+ */
+ function after($method) {
+ $this->_invoker->after($method);
+ $output = ob_get_contents();
+ ob_end_clean();
+ if ($output !== ""){
+ $result = $this->_listener->write('{status:"info",message:"' .
+ EclipseReporter::escapeVal($output) . '"}');
+ }
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/encoding.php b/vendors/simpletest/encoding.php
new file mode 100644
index 000000000..112fe3304
--- /dev/null
+++ b/vendors/simpletest/encoding.php
@@ -0,0 +1,552 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: encoding.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/socket.php');
+/**#@-*/
+
+/**
+ * Single post parameter.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleEncodedPair {
+ var $_key;
+ var $_value;
+
+ /**
+ * Stashes the data for rendering later.
+ * @param string $key Form element name.
+ * @param string $value Data to send.
+ */
+ function SimpleEncodedPair($key, $value) {
+ $this->_key = $key;
+ $this->_value = $value;
+ }
+
+ /**
+ * The pair as a single string.
+ * @return string Encoded pair.
+ * @access public
+ */
+ function asRequest() {
+ return urlencode($this->_key) . '=' . urlencode($this->_value);
+ }
+
+ /**
+ * The MIME part as a string.
+ * @return string MIME part encoding.
+ * @access public
+ */
+ function asMime() {
+ $part = 'Content-Disposition: form-data; ';
+ $part .= "name=\"" . $this->_key . "\"\r\n";
+ $part .= "\r\n" . $this->_value;
+ return $part;
+ }
+
+ /**
+ * Is this the value we are looking for?
+ * @param string $key Identifier.
+ * @return boolean True if matched.
+ * @access public
+ */
+ function isKey($key) {
+ return $key == $this->_key;
+ }
+
+ /**
+ * Is this the value we are looking for?
+ * @return string Identifier.
+ * @access public
+ */
+ function getKey() {
+ return $this->_key;
+ }
+
+ /**
+ * Is this the value we are looking for?
+ * @return string Content.
+ * @access public
+ */
+ function getValue() {
+ return $this->_value;
+ }
+}
+
+/**
+ * Single post parameter.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleAttachment {
+ var $_key;
+ var $_content;
+ var $_filename;
+
+ /**
+ * Stashes the data for rendering later.
+ * @param string $key Key to add value to.
+ * @param string $content Raw data.
+ * @param hash $filename Original filename.
+ */
+ function SimpleAttachment($key, $content, $filename) {
+ $this->_key = $key;
+ $this->_content = $content;
+ $this->_filename = $filename;
+ }
+
+ /**
+ * The pair as a single string.
+ * @return string Encoded pair.
+ * @access public
+ */
+ function asRequest() {
+ return '';
+ }
+
+ /**
+ * The MIME part as a string.
+ * @return string MIME part encoding.
+ * @access public
+ */
+ function asMime() {
+ $part = 'Content-Disposition: form-data; ';
+ $part .= 'name="' . $this->_key . '"; ';
+ $part .= 'filename="' . $this->_filename . '"';
+ $part .= "\r\nContent-Type: " . $this->_deduceMimeType();
+ $part .= "\r\n\r\n" . $this->_content;
+ return $part;
+ }
+
+ /**
+ * Attempts to figure out the MIME type from the
+ * file extension and the content.
+ * @return string MIME type.
+ * @access private
+ */
+ function _deduceMimeType() {
+ if ($this->_isOnlyAscii($this->_content)) {
+ return 'text/plain';
+ }
+ return 'application/octet-stream';
+ }
+
+ /**
+ * Tests each character is in the range 0-127.
+ * @param string $ascii String to test.
+ * @access private
+ */
+ function _isOnlyAscii($ascii) {
+ for ($i = 0, $length = strlen($ascii); $i < $length; $i++) {
+ if (ord($ascii[$i]) > 127) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Is this the value we are looking for?
+ * @param string $key Identifier.
+ * @return boolean True if matched.
+ * @access public
+ */
+ function isKey($key) {
+ return $key == $this->_key;
+ }
+
+ /**
+ * Is this the value we are looking for?
+ * @return string Identifier.
+ * @access public
+ */
+ function getKey() {
+ return $this->_key;
+ }
+
+ /**
+ * Is this the value we are looking for?
+ * @return string Content.
+ * @access public
+ */
+ function getValue() {
+ return $this->_filename;
+ }
+}
+
+/**
+ * Bundle of GET/POST parameters. Can include
+ * repeated parameters.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleEncoding {
+ var $_request;
+
+ /**
+ * Starts empty.
+ * @param array $query Hash of parameters.
+ * Multiple values are
+ * as lists on a single key.
+ * @access public
+ */
+ function SimpleEncoding($query = false) {
+ if (! $query) {
+ $query = array();
+ }
+ $this->clear();
+ $this->merge($query);
+ }
+
+ /**
+ * Empties the request of parameters.
+ * @access public
+ */
+ function clear() {
+ $this->_request = array();
+ }
+
+ /**
+ * Adds a parameter to the query.
+ * @param string $key Key to add value to.
+ * @param string/array $value New data.
+ * @access public
+ */
+ function add($key, $value) {
+ if ($value === false) {
+ return;
+ }
+ if (is_array($value)) {
+ foreach ($value as $item) {
+ $this->_addPair($key, $item);
+ }
+ } else {
+ $this->_addPair($key, $value);
+ }
+ }
+
+ /**
+ * Adds a new value into the request.
+ * @param string $key Key to add value to.
+ * @param string/array $value New data.
+ * @access private
+ */
+ function _addPair($key, $value) {
+ $this->_request[] = new SimpleEncodedPair($key, $value);
+ }
+
+ /**
+ * Adds a MIME part to the query. Does nothing for a
+ * form encoded packet.
+ * @param string $key Key to add value to.
+ * @param string $content Raw data.
+ * @param hash $filename Original filename.
+ * @access public
+ */
+ function attach($key, $content, $filename) {
+ $this->_request[] = new SimpleAttachment($key, $content, $filename);
+ }
+
+ /**
+ * Adds a set of parameters to this query.
+ * @param array/SimpleQueryString $query Multiple values are
+ * as lists on a single key.
+ * @access public
+ */
+ function merge($query) {
+ if (is_object($query)) {
+ $this->_request = array_merge($this->_request, $query->getAll());
+ } elseif (is_array($query)) {
+ foreach ($query as $key => $value) {
+ $this->add($key, $value);
+ }
+ }
+ }
+
+ /**
+ * Accessor for single value.
+ * @return string/array False if missing, string
+ * if present and array if
+ * multiple entries.
+ * @access public
+ */
+ function getValue($key) {
+ $values = array();
+ foreach ($this->_request as $pair) {
+ if ($pair->isKey($key)) {
+ $values[] = $pair->getValue();
+ }
+ }
+ if (count($values) == 0) {
+ return false;
+ } elseif (count($values) == 1) {
+ return $values[0];
+ } else {
+ return $values;
+ }
+ }
+
+ /**
+ * Accessor for listing of pairs.
+ * @return array All pair objects.
+ * @access public
+ */
+ function getAll() {
+ return $this->_request;
+ }
+
+ /**
+ * Renders the query string as a URL encoded
+ * request part.
+ * @return string Part of URL.
+ * @access protected
+ */
+ function _encode() {
+ $statements = array();
+ foreach ($this->_request as $pair) {
+ if ($statement = $pair->asRequest()) {
+ $statements[] = $statement;
+ }
+ }
+ return implode('&', $statements);
+ }
+}
+
+/**
+ * Bundle of GET parameters. Can include
+ * repeated parameters.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleGetEncoding extends SimpleEncoding {
+
+ /**
+ * Starts empty.
+ * @param array $query Hash of parameters.
+ * Multiple values are
+ * as lists on a single key.
+ * @access public
+ */
+ function SimpleGetEncoding($query = false) {
+ $this->SimpleEncoding($query);
+ }
+
+ /**
+ * HTTP request method.
+ * @return string Always GET.
+ * @access public
+ */
+ function getMethod() {
+ return 'GET';
+ }
+
+ /**
+ * Writes no extra headers.
+ * @param SimpleSocket $socket Socket to write to.
+ * @access public
+ */
+ function writeHeadersTo(&$socket) {
+ }
+
+ /**
+ * No data is sent to the socket as the data is encoded into
+ * the URL.
+ * @param SimpleSocket $socket Socket to write to.
+ * @access public
+ */
+ function writeTo(&$socket) {
+ }
+
+ /**
+ * Renders the query string as a URL encoded
+ * request part for attaching to a URL.
+ * @return string Part of URL.
+ * @access public
+ */
+ function asUrlRequest() {
+ return $this->_encode();
+ }
+}
+
+/**
+ * Bundle of URL parameters for a HEAD request.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleHeadEncoding extends SimpleGetEncoding {
+
+ /**
+ * Starts empty.
+ * @param array $query Hash of parameters.
+ * Multiple values are
+ * as lists on a single key.
+ * @access public
+ */
+ function SimpleHeadEncoding($query = false) {
+ $this->SimpleGetEncoding($query);
+ }
+
+ /**
+ * HTTP request method.
+ * @return string Always HEAD.
+ * @access public
+ */
+ function getMethod() {
+ return 'HEAD';
+ }
+}
+
+/**
+ * Bundle of POST parameters. Can include
+ * repeated parameters.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimplePostEncoding extends SimpleEncoding {
+
+ /**
+ * Starts empty.
+ * @param array $query Hash of parameters.
+ * Multiple values are
+ * as lists on a single key.
+ * @access public
+ */
+ function SimplePostEncoding($query = false) {
+ if (is_array($query) and $this->hasMoreThanOneLevel($query)) {
+ $query = $this->rewriteArrayWithMultipleLevels($query);
+ }
+ $this->SimpleEncoding($query);
+ }
+
+ function hasMoreThanOneLevel($query) {
+ foreach ($query as $key => $value) {
+ if (is_array($value)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function rewriteArrayWithMultipleLevels($query) {
+ $query_ = array();
+ foreach ($query as $key => $value) {
+ if (is_array($value)) {
+ foreach ($value as $sub_key => $sub_value) {
+ $query_[$key."[".$sub_key."]"] = $sub_value;
+ }
+ } else {
+ $query_[$key] = $value;
+ }
+ }
+ if ($this->hasMoreThanOneLevel($query_)) {
+ $query_ = $this->rewriteArrayWithMultipleLevels($query_);
+ }
+
+ return $query_;
+ }
+
+
+ /**
+ * HTTP request method.
+ * @return string Always POST.
+ * @access public
+ */
+ function getMethod() {
+ return 'POST';
+ }
+
+ /**
+ * Dispatches the form headers down the socket.
+ * @param SimpleSocket $socket Socket to write to.
+ * @access public
+ */
+ function writeHeadersTo(&$socket) {
+ $socket->write("Content-Length: " . (integer)strlen($this->_encode()) . "\r\n");
+ $socket->write("Content-Type: application/x-www-form-urlencoded\r\n");
+ }
+
+ /**
+ * Dispatches the form data down the socket.
+ * @param SimpleSocket $socket Socket to write to.
+ * @access public
+ */
+ function writeTo(&$socket) {
+ $socket->write($this->_encode());
+ }
+
+ /**
+ * Renders the query string as a URL encoded
+ * request part for attaching to a URL.
+ * @return string Part of URL.
+ * @access public
+ */
+ function asUrlRequest() {
+ return '';
+ }
+}
+
+/**
+ * Bundle of POST parameters in the multipart
+ * format. Can include file uploads.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleMultipartEncoding extends SimplePostEncoding {
+ var $_boundary;
+
+ /**
+ * Starts empty.
+ * @param array $query Hash of parameters.
+ * Multiple values are
+ * as lists on a single key.
+ * @access public
+ */
+ function SimpleMultipartEncoding($query = false, $boundary = false) {
+ $this->SimplePostEncoding($query);
+ $this->_boundary = ($boundary === false ? uniqid('st') : $boundary);
+ }
+
+ /**
+ * Dispatches the form headers down the socket.
+ * @param SimpleSocket $socket Socket to write to.
+ * @access public
+ */
+ function writeHeadersTo(&$socket) {
+ $socket->write("Content-Length: " . (integer)strlen($this->_encode()) . "\r\n");
+ $socket->write("Content-Type: multipart/form-data, boundary=" . $this->_boundary . "\r\n");
+ }
+
+ /**
+ * Dispatches the form data down the socket.
+ * @param SimpleSocket $socket Socket to write to.
+ * @access public
+ */
+ function writeTo(&$socket) {
+ $socket->write($this->_encode());
+ }
+
+ /**
+ * Renders the query string as a URL encoded
+ * request part.
+ * @return string Part of URL.
+ * @access public
+ */
+ function _encode() {
+ $stream = '';
+ foreach ($this->_request as $pair) {
+ $stream .= "--" . $this->_boundary . "\r\n";
+ $stream .= $pair->asMime() . "\r\n";
+ }
+ $stream .= "--" . $this->_boundary . "--\r\n";
+ return $stream;
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/errors.php b/vendors/simpletest/errors.php
new file mode 100644
index 000000000..5a0788511
--- /dev/null
+++ b/vendors/simpletest/errors.php
@@ -0,0 +1,288 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: errors.php 1672 2008-03-02 04:47:34Z edwardzyang $
+ */
+
+/**
+ * @ignore - PHP5 compatibility fix.
+ */
+if (! defined('E_STRICT')) {
+ define('E_STRICT', 2048);
+}
+
+/**#@+
+ * Includes SimpleTest files.
+ */
+require_once dirname(__FILE__) . '/invoker.php';
+require_once dirname(__FILE__) . '/test_case.php';
+require_once dirname(__FILE__) . '/expectation.php';
+/**#@-*/
+
+/**
+ * Extension that traps errors into an error queue.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleErrorTrappingInvoker extends SimpleInvokerDecorator {
+
+ /**
+ * Stores the invoker to wrap.
+ * @param SimpleInvoker $invoker Test method runner.
+ */
+ function SimpleErrorTrappingInvoker(&$invoker) {
+ $this->SimpleInvokerDecorator($invoker);
+ }
+
+ /**
+ * Invokes a test method and dispatches any
+ * untrapped errors. Called back from
+ * the visiting runner.
+ * @param string $method Test method to call.
+ * @access public
+ */
+ function invoke($method) {
+ $queue = &$this->_createErrorQueue();
+ set_error_handler('SimpleTestErrorHandler');
+ parent::invoke($method);
+ restore_error_handler();
+ $queue->tally();
+ }
+
+ /**
+ * Wires up the error queue for a single test.
+ * @return SimpleErrorQueue Queue connected to the test.
+ * @access private
+ */
+ function &_createErrorQueue() {
+ $context = &SimpleTest::getContext();
+ $test = &$this->getTestCase();
+ $queue = &$context->get('SimpleErrorQueue');
+ $queue->setTestCase($test);
+ return $queue;
+ }
+}
+
+/**
+ * Error queue used to record trapped
+ * errors.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleErrorQueue {
+ var $_queue;
+ var $_expectation_queue;
+ var $_test;
+ var $_using_expect_style = false;
+
+ /**
+ * Starts with an empty queue.
+ */
+ function SimpleErrorQueue() {
+ $this->clear();
+ }
+
+ /**
+ * Discards the contents of the error queue.
+ * @access public
+ */
+ function clear() {
+ $this->_queue = array();
+ $this->_expectation_queue = array();
+ }
+
+ /**
+ * Sets the currently running test case.
+ * @param SimpleTestCase $test Test case to send messages to.
+ * @access public
+ */
+ function setTestCase(&$test) {
+ $this->_test = &$test;
+ }
+
+ /**
+ * Sets up an expectation of an error. If this is
+ * not fulfilled at the end of the test, a failure
+ * will occour. If the error does happen, then this
+ * will cancel it out and send a pass message.
+ * @param SimpleExpectation $expected Expected error match.
+ * @param string $message Message to display.
+ * @access public
+ */
+ function expectError($expected, $message) {
+ $this->_using_expect_style = true;
+ array_push($this->_expectation_queue, array($expected, $message));
+ }
+
+ /**
+ * Adds an error to the front of the queue.
+ * @param integer $severity PHP error code.
+ * @param string $content Text of error.
+ * @param string $filename File error occoured in.
+ * @param integer $line Line number of error.
+ * @access public
+ */
+ function add($severity, $content, $filename, $line) {
+ $content = str_replace('%', '%%', $content);
+ if ($this->_using_expect_style) {
+ $this->_testLatestError($severity, $content, $filename, $line);
+ } else {
+ array_push(
+ $this->_queue,
+ array($severity, $content, $filename, $line));
+ }
+ }
+
+ /**
+ * Any errors still in the queue are sent to the test
+ * case. Any unfulfilled expectations trigger failures.
+ * @access public
+ */
+ function tally() {
+ while (list($severity, $message, $file, $line) = $this->extract()) {
+ $severity = $this->getSeverityAsString($severity);
+ $this->_test->error($severity, $message, $file, $line);
+ }
+ while (list($expected, $message) = $this->_extractExpectation()) {
+ $this->_test->assert($expected, false, "%s -> Expected error not caught");
+ }
+ }
+
+ /**
+ * Tests the error against the most recent expected
+ * error.
+ * @param integer $severity PHP error code.
+ * @param string $content Text of error.
+ * @param string $filename File error occoured in.
+ * @param integer $line Line number of error.
+ * @access private
+ */
+ function _testLatestError($severity, $content, $filename, $line) {
+ if ($expectation = $this->_extractExpectation()) {
+ list($expected, $message) = $expectation;
+ $this->_test->assert($expected, $content, sprintf(
+ $message,
+ "%s -> PHP error [$content] severity [" .
+ $this->getSeverityAsString($severity) .
+ "] in [$filename] line [$line]"));
+ } else {
+ $this->_test->error($severity, $content, $filename, $line);
+ }
+ }
+
+ /**
+ * Pulls the earliest error from the queue.
+ * @return mixed False if none, or a list of error
+ * information. Elements are: severity
+ * as the PHP error code, the error message,
+ * the file with the error, the line number
+ * and a list of PHP super global arrays.
+ * @access public
+ */
+ function extract() {
+ if (count($this->_queue)) {
+ return array_shift($this->_queue);
+ }
+ return false;
+ }
+
+ /**
+ * Pulls the earliest expectation from the queue.
+ * @return SimpleExpectation False if none.
+ * @access private
+ */
+ function _extractExpectation() {
+ if (count($this->_expectation_queue)) {
+ return array_shift($this->_expectation_queue);
+ }
+ return false;
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertNoErrors($message) {
+ return $this->_test->assert(
+ new TrueExpectation(),
+ count($this->_queue) == 0,
+ sprintf($message, 'Should be no errors'));
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertError($expected, $message) {
+ if (count($this->_queue) == 0) {
+ $this->_test->fail(sprintf($message, 'Expected error not found'));
+ return false;
+ }
+ list($severity, $content, $file, $line) = $this->extract();
+ $severity = $this->getSeverityAsString($severity);
+ return $this->_test->assert(
+ $expected,
+ $content,
+ sprintf($message, "Expected PHP error [$content] severity [$severity] in [$file] line [$line]"));
+ }
+
+ /**
+ * Converts an error code into it's string
+ * representation.
+ * @param $severity PHP integer error code.
+ * @return String version of error code.
+ * @access public
+ * @static
+ */
+ function getSeverityAsString($severity) {
+ static $map = array(
+ E_STRICT => 'E_STRICT',
+ E_ERROR => 'E_ERROR',
+ E_WARNING => 'E_WARNING',
+ E_PARSE => 'E_PARSE',
+ E_NOTICE => 'E_NOTICE',
+ E_CORE_ERROR => 'E_CORE_ERROR',
+ E_CORE_WARNING => 'E_CORE_WARNING',
+ E_COMPILE_ERROR => 'E_COMPILE_ERROR',
+ E_COMPILE_WARNING => 'E_COMPILE_WARNING',
+ E_USER_ERROR => 'E_USER_ERROR',
+ E_USER_WARNING => 'E_USER_WARNING',
+ E_USER_NOTICE => 'E_USER_NOTICE');
+ if (defined('E_RECOVERABLE_ERROR')) {
+ $map[E_RECOVERABLE_ERROR] = 'E_RECOVERABLE_ERROR';
+ }
+ if (defined('E_DEPRECATED')) {
+ $map[E_DEPRECATED] = 'E_DEPRECATED';
+ }
+ return $map[$severity];
+ }
+}
+
+/**
+ * Error handler that simply stashes any errors into the global
+ * error queue. Simulates the existing behaviour with respect to
+ * logging errors, but this feature may be removed in future.
+ * @param $severity PHP error code.
+ * @param $message Text of error.
+ * @param $filename File error occoured in.
+ * @param $line Line number of error.
+ * @param $super_globals Hash of PHP super global arrays.
+ * @static
+ * @access public
+ */
+function SimpleTestErrorHandler($severity, $message, $filename = null, $line = null, $super_globals = null, $mask = null) {
+ $severity = $severity & error_reporting();
+ if ($severity) {
+ restore_error_handler();
+ if (ini_get('log_errors')) {
+ $label = SimpleErrorQueue::getSeverityAsString($severity);
+ error_log("$label: $message in $filename on line $line");
+ }
+ $context = &SimpleTest::getContext();
+ $queue = &$context->get('SimpleErrorQueue');
+ $queue->add($severity, $message, $filename, $line);
+ set_error_handler('SimpleTestErrorHandler');
+ }
+ return true;
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/exceptions.php b/vendors/simpletest/exceptions.php
new file mode 100644
index 000000000..c19a04e3a
--- /dev/null
+++ b/vendors/simpletest/exceptions.php
@@ -0,0 +1,198 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: exceptions.php 1672 2008-03-02 04:47:34Z edwardzyang $
+ */
+
+/**#@+
+ * Include required SimpleTest files
+ */
+require_once dirname(__FILE__) . '/invoker.php';
+require_once dirname(__FILE__) . '/expectation.php';
+/**#@-*/
+
+/**
+ * Extension that traps exceptions and turns them into
+ * an error message. PHP5 only.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleExceptionTrappingInvoker extends SimpleInvokerDecorator {
+
+ /**
+ * Stores the invoker to be wrapped.
+ * @param SimpleInvoker $invoker Test method runner.
+ */
+ function SimpleExceptionTrappingInvoker($invoker) {
+ $this->SimpleInvokerDecorator($invoker);
+ }
+
+ /**
+ * Invokes a test method whilst trapping expected
+ * exceptions. Any left over unthrown exceptions
+ * are then reported as failures.
+ * @param string $method Test method to call.
+ */
+ function invoke($method) {
+ $trap = SimpleTest::getContext()->get('SimpleExceptionTrap');
+ $trap->clear();
+ try {
+ $has_thrown = false;
+ parent::invoke($method);
+ } catch (Exception $exception) {
+ $has_thrown = true;
+ if (! $trap->isExpected($this->getTestCase(), $exception)) {
+ $this->getTestCase()->exception($exception);
+ }
+ $trap->clear();
+ }
+ if ($message = $trap->getOutstanding()) {
+ $this->getTestCase()->fail($message);
+ }
+ if ($has_thrown) {
+ try {
+ parent::getTestCase()->tearDown();
+ } catch (Exception $e) { }
+ }
+ }
+}
+
+/**
+ * Tests exceptions either by type or the exact
+ * exception. This could be improved to accept
+ * a pattern expectation to test the error
+ * message, but that will have to come later.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class ExceptionExpectation extends SimpleExpectation {
+ private $expected;
+
+ /**
+ * Sets up the conditions to test against.
+ * If the expected value is a string, then
+ * it will act as a test of the class name.
+ * An exception as the comparison will
+ * trigger an identical match. Writing this
+ * down now makes it look doubly dumb. I hope
+ * come up with a better scheme later.
+ * @param mixed $expected A class name or an actual
+ * exception to compare with.
+ * @param string $message Message to display.
+ */
+ function __construct($expected, $message = '%s') {
+ $this->expected = $expected;
+ parent::__construct($message);
+ }
+
+ /**
+ * Carry out the test.
+ * @param Exception $compare Value to check.
+ * @return boolean True if matched.
+ */
+ function test($compare) {
+ if (is_string($this->expected)) {
+ return ($compare instanceof $this->expected);
+ }
+ if (get_class($compare) != get_class($this->expected)) {
+ return false;
+ }
+ return $compare->getMessage() == $this->expected->getMessage();
+ }
+
+ /**
+ * Create the message to display describing the test.
+ * @param Exception $compare Exception to match.
+ * @return string Final message.
+ */
+ function testMessage($compare) {
+ if (is_string($this->expected)) {
+ return "Exception [" . $this->describeException($compare) .
+ "] should be type [" . $this->expected . "]";
+ }
+ return "Exception [" . $this->describeException($compare) .
+ "] should match [" .
+ $this->describeException($this->expected) . "]";
+ }
+
+ /**
+ * Summary of an Exception object.
+ * @param Exception $compare Exception to describe.
+ * @return string Text description.
+ */
+ protected function describeException($exception) {
+ return get_class($exception) . ": " . $exception->getMessage();
+ }
+}
+
+/**
+ * Stores expected exceptions for when they
+ * get thrown. Saves the irritating try...catch
+ * block.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleExceptionTrap {
+ private $expected;
+ private $message;
+
+ /**
+ * Clears down the queue ready for action.
+ */
+ function __construct() {
+ $this->clear();
+ }
+
+ /**
+ * Sets up an expectation of an exception.
+ * This has the effect of intercepting an
+ * exception that matches.
+ * @param SimpleExpectation $expected Expected exception to match.
+ * @param string $message Message to display.
+ * @access public
+ */
+ function expectException($expected = false, $message = '%s') {
+ if ($expected === false) {
+ $expected = new AnythingExpectation();
+ }
+ if (! SimpleExpectation::isExpectation($expected)) {
+ $expected = new ExceptionExpectation($expected);
+ }
+ $this->expected = $expected;
+ $this->message = $message;
+ }
+
+ /**
+ * Compares the expected exception with any
+ * in the queue. Issues a pass or fail and
+ * returns the state of the test.
+ * @param SimpleTestCase $test Test case to send messages to.
+ * @param Exception $exception Exception to compare.
+ * @return boolean False on no match.
+ */
+ function isExpected($test, $exception) {
+ if ($this->expected) {
+ return $test->assert($this->expected, $exception, $this->message);
+ }
+ return false;
+ }
+
+ /**
+ * Tests for any left over exception.
+ * @return string/false The failure message or false if none.
+ */
+ function getOutstanding() {
+ return sprintf($this->message, 'Failed to trap exception');
+ }
+
+ /**
+ * Discards the contents of the error queue.
+ */
+ function clear() {
+ $this->expected = false;
+ $this->message = false;
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/expectation.php b/vendors/simpletest/expectation.php
new file mode 100644
index 000000000..194afd5c7
--- /dev/null
+++ b/vendors/simpletest/expectation.php
@@ -0,0 +1,895 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: expectation.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/dumper.php');
+require_once(dirname(__FILE__) . '/compatibility.php');
+/**#@-*/
+
+/**
+ * Assertion that can display failure information.
+ * Also includes various helper methods.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @abstract
+ */
+class SimpleExpectation {
+ var $_dumper = false;
+ var $_message;
+
+ /**
+ * Creates a dumper for displaying values and sets
+ * the test message.
+ * @param string $message Customised message on failure.
+ */
+ function SimpleExpectation($message = '%s') {
+ $this->_message = $message;
+ }
+
+ /**
+ * Tests the expectation. True if correct.
+ * @param mixed $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ * @abstract
+ */
+ function test($compare) {
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ * @abstract
+ */
+ function testMessage($compare) {
+ }
+
+ /**
+ * Overlays the generated message onto the stored user
+ * message. An additional message can be interjected.
+ * @param mixed $compare Comparison value.
+ * @param SimpleDumper $dumper For formatting the results.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function overlayMessage($compare, $dumper) {
+ $this->_dumper = $dumper;
+ return sprintf($this->_message, $this->testMessage($compare));
+ }
+
+ /**
+ * Accessor for the dumper.
+ * @return SimpleDumper Current value dumper.
+ * @access protected
+ */
+ function &_getDumper() {
+ if (! $this->_dumper) {
+ $dumper = &new SimpleDumper();
+ return $dumper;
+ }
+ return $this->_dumper;
+ }
+
+ /**
+ * Test to see if a value is an expectation object.
+ * A useful utility method.
+ * @param mixed $expectation Hopefully an Epectation
+ * class.
+ * @return boolean True if descended from
+ * this class.
+ * @access public
+ * @static
+ */
+ function isExpectation($expectation) {
+ return is_object($expectation) &&
+ SimpleTestCompatibility::isA($expectation, 'SimpleExpectation');
+ }
+}
+
+/**
+ * A wildcard expectation always matches.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class AnythingExpectation extends SimpleExpectation {
+
+ /**
+ * Tests the expectation. Always true.
+ * @param mixed $compare Ignored.
+ * @return boolean True.
+ * @access public
+ */
+ function test($compare) {
+ return true;
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $dumper = &$this->_getDumper();
+ return 'Anything always matches [' . $dumper->describeValue($compare) . ']';
+ }
+}
+
+/**
+ * An expectation that never matches.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class FailedExpectation extends SimpleExpectation {
+
+ /**
+ * Tests the expectation. Always false.
+ * @param mixed $compare Ignored.
+ * @return boolean True.
+ * @access public
+ */
+ function test($compare) {
+ return false;
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $dumper = &$this->_getDumper();
+ return 'Failed expectation never matches [' . $dumper->describeValue($compare) . ']';
+ }
+}
+
+/**
+ * An expectation that passes on boolean true.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class TrueExpectation extends SimpleExpectation {
+
+ /**
+ * Tests the expectation.
+ * @param mixed $compare Should be true.
+ * @return boolean True on match.
+ * @access public
+ */
+ function test($compare) {
+ return (boolean)$compare;
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $dumper = &$this->_getDumper();
+ return 'Expected true, got [' . $dumper->describeValue($compare) . ']';
+ }
+}
+
+/**
+ * An expectation that passes on boolean false.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class FalseExpectation extends SimpleExpectation {
+
+ /**
+ * Tests the expectation.
+ * @param mixed $compare Should be false.
+ * @return boolean True on match.
+ * @access public
+ */
+ function test($compare) {
+ return ! (boolean)$compare;
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $dumper = &$this->_getDumper();
+ return 'Expected false, got [' . $dumper->describeValue($compare) . ']';
+ }
+}
+
+/**
+ * Test for equality.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class EqualExpectation extends SimpleExpectation {
+ var $_value;
+
+ /**
+ * Sets the value to compare against.
+ * @param mixed $value Test value to match.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function EqualExpectation($value, $message = '%s') {
+ $this->SimpleExpectation($message);
+ $this->_value = $value;
+ }
+
+ /**
+ * Tests the expectation. True if it matches the
+ * held value.
+ * @param mixed $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ return (($this->_value == $compare) && ($compare == $this->_value));
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ if ($this->test($compare)) {
+ return "Equal expectation [" . $this->_dumper->describeValue($this->_value) . "]";
+ } else {
+ return "Equal expectation fails " .
+ $this->_dumper->describeDifference($this->_value, $compare);
+ }
+ }
+
+ /**
+ * Accessor for comparison value.
+ * @return mixed Held value to compare with.
+ * @access protected
+ */
+ function _getValue() {
+ return $this->_value;
+ }
+}
+
+/**
+ * Test for inequality.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class NotEqualExpectation extends EqualExpectation {
+
+ /**
+ * Sets the value to compare against.
+ * @param mixed $value Test value to match.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function NotEqualExpectation($value, $message = '%s') {
+ $this->EqualExpectation($value, $message);
+ }
+
+ /**
+ * Tests the expectation. True if it differs from the
+ * held value.
+ * @param mixed $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ return ! parent::test($compare);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $dumper = &$this->_getDumper();
+ if ($this->test($compare)) {
+ return "Not equal expectation passes " .
+ $dumper->describeDifference($this->_getValue(), $compare);
+ } else {
+ return "Not equal expectation fails [" .
+ $dumper->describeValue($this->_getValue()) .
+ "] matches";
+ }
+ }
+}
+
+/**
+ * Test for being within a range.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class WithinMarginExpectation extends SimpleExpectation {
+ var $_upper;
+ var $_lower;
+
+ /**
+ * Sets the value to compare against and the fuzziness of
+ * the match. Used for comparing floating point values.
+ * @param mixed $value Test value to match.
+ * @param mixed $margin Fuzziness of match.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function WithinMarginExpectation($value, $margin, $message = '%s') {
+ $this->SimpleExpectation($message);
+ $this->_upper = $value + $margin;
+ $this->_lower = $value - $margin;
+ }
+
+ /**
+ * Tests the expectation. True if it matches the
+ * held value.
+ * @param mixed $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ return (($compare <= $this->_upper) && ($compare >= $this->_lower));
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ if ($this->test($compare)) {
+ return $this->_withinMessage($compare);
+ } else {
+ return $this->_outsideMessage($compare);
+ }
+ }
+
+ /**
+ * Creates a the message for being within the range.
+ * @param mixed $compare Value being tested.
+ * @access private
+ */
+ function _withinMessage($compare) {
+ return "Within expectation [" . $this->_dumper->describeValue($this->_lower) . "] and [" .
+ $this->_dumper->describeValue($this->_upper) . "]";
+ }
+
+ /**
+ * Creates a the message for being within the range.
+ * @param mixed $compare Value being tested.
+ * @access private
+ */
+ function _outsideMessage($compare) {
+ if ($compare > $this->_upper) {
+ return "Outside expectation " .
+ $this->_dumper->describeDifference($compare, $this->_upper);
+ } else {
+ return "Outside expectation " .
+ $this->_dumper->describeDifference($compare, $this->_lower);
+ }
+ }
+}
+
+/**
+ * Test for being outside of a range.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class OutsideMarginExpectation extends WithinMarginExpectation {
+
+ /**
+ * Sets the value to compare against and the fuzziness of
+ * the match. Used for comparing floating point values.
+ * @param mixed $value Test value to not match.
+ * @param mixed $margin Fuzziness of match.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function OutsideMarginExpectation($value, $margin, $message = '%s') {
+ $this->WithinMarginExpectation($value, $margin, $message);
+ }
+
+ /**
+ * Tests the expectation. True if it matches the
+ * held value.
+ * @param mixed $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ return ! parent::test($compare);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ if (! $this->test($compare)) {
+ return $this->_withinMessage($compare);
+ } else {
+ return $this->_outsideMessage($compare);
+ }
+ }
+}
+
+/**
+ * Test for reference.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class ReferenceExpectation extends SimpleExpectation {
+ var $_value;
+
+ /**
+ * Sets the reference value to compare against.
+ * @param mixed $value Test reference to match.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function ReferenceExpectation(&$value, $message = '%s') {
+ $this->SimpleExpectation($message);
+ $this->_value =& $value;
+ }
+
+ /**
+ * Tests the expectation. True if it exactly
+ * references the held value.
+ * @param mixed $compare Comparison reference.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test(&$compare) {
+ return SimpleTestCompatibility::isReference($this->_value, $compare);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ if ($this->test($compare)) {
+ return "Reference expectation [" . $this->_dumper->describeValue($this->_value) . "]";
+ } else {
+ return "Reference expectation fails " .
+ $this->_dumper->describeDifference($this->_value, $compare);
+ }
+ }
+
+ function _getValue() {
+ return $this->_value;
+ }
+}
+
+/**
+ * Test for identity.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class IdenticalExpectation extends EqualExpectation {
+
+ /**
+ * Sets the value to compare against.
+ * @param mixed $value Test value to match.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function IdenticalExpectation($value, $message = '%s') {
+ $this->EqualExpectation($value, $message);
+ }
+
+ /**
+ * Tests the expectation. True if it exactly
+ * matches the held value.
+ * @param mixed $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ return SimpleTestCompatibility::isIdentical($this->_getValue(), $compare);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $dumper = &$this->_getDumper();
+ if ($this->test($compare)) {
+ return "Identical expectation [" . $dumper->describeValue($this->_getValue()) . "]";
+ } else {
+ return "Identical expectation [" . $dumper->describeValue($this->_getValue()) .
+ "] fails with [" .
+ $dumper->describeValue($compare) . "] " .
+ $dumper->describeDifference($this->_getValue(), $compare, TYPE_MATTERS);
+ }
+ }
+}
+
+/**
+ * Test for non-identity.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class NotIdenticalExpectation extends IdenticalExpectation {
+
+ /**
+ * Sets the value to compare against.
+ * @param mixed $value Test value to match.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function NotIdenticalExpectation($value, $message = '%s') {
+ $this->IdenticalExpectation($value, $message);
+ }
+
+ /**
+ * Tests the expectation. True if it differs from the
+ * held value.
+ * @param mixed $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ return ! parent::test($compare);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $dumper = &$this->_getDumper();
+ if ($this->test($compare)) {
+ return "Not identical expectation passes " .
+ $dumper->describeDifference($this->_getValue(), $compare, TYPE_MATTERS);
+ } else {
+ return "Not identical expectation [" . $dumper->describeValue($this->_getValue()) . "] matches";
+ }
+ }
+}
+
+/**
+ * Test for a pattern using Perl regex rules.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class PatternExpectation extends SimpleExpectation {
+ var $_pattern;
+
+ /**
+ * Sets the value to compare against.
+ * @param string $pattern Pattern to search for.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function PatternExpectation($pattern, $message = '%s') {
+ $this->SimpleExpectation($message);
+ $this->_pattern = $pattern;
+ }
+
+ /**
+ * Accessor for the pattern.
+ * @return string Perl regex as string.
+ * @access protected
+ */
+ function _getPattern() {
+ return $this->_pattern;
+ }
+
+ /**
+ * Tests the expectation. True if the Perl regex
+ * matches the comparison value.
+ * @param string $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ return (boolean)preg_match($this->_getPattern(), $compare);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ if ($this->test($compare)) {
+ return $this->_describePatternMatch($this->_getPattern(), $compare);
+ } else {
+ $dumper = &$this->_getDumper();
+ return "Pattern [" . $this->_getPattern() .
+ "] not detected in [" .
+ $dumper->describeValue($compare) . "]";
+ }
+ }
+
+ /**
+ * Describes a pattern match including the string
+ * found and it's position.
+ * @param string $pattern Regex to match against.
+ * @param string $subject Subject to search.
+ * @access protected
+ */
+ function _describePatternMatch($pattern, $subject) {
+ preg_match($pattern, $subject, $matches);
+ $position = strpos($subject, $matches[0]);
+ $dumper = $this->_getDumper();
+ return "Pattern [$pattern] detected at character [$position] in [" .
+ $dumper->describeValue($subject) . "] as [" .
+ $matches[0] . "] in region [" .
+ $dumper->clipString($subject, 100, $position) . "]";
+ }
+}
+
+/**
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @deprecated
+ */
+class WantedPatternExpectation extends PatternExpectation {
+}
+
+/**
+ * Fail if a pattern is detected within the
+ * comparison.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class NoPatternExpectation extends PatternExpectation {
+
+ /**
+ * Sets the reject pattern
+ * @param string $pattern Pattern to search for.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function NoPatternExpectation($pattern, $message = '%s') {
+ $this->PatternExpectation($pattern, $message);
+ }
+
+ /**
+ * Tests the expectation. False if the Perl regex
+ * matches the comparison value.
+ * @param string $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ return ! parent::test($compare);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param string $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ if ($this->test($compare)) {
+ $dumper = &$this->_getDumper();
+ return "Pattern [" . $this->_getPattern() .
+ "] not detected in [" .
+ $dumper->describeValue($compare) . "]";
+ } else {
+ return $this->_describePatternMatch($this->_getPattern(), $compare);
+ }
+ }
+}
+
+/**
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @deprecated
+ */
+class UnwantedPatternExpectation extends NoPatternExpectation {
+}
+
+/**
+ * Tests either type or class name if it's an object.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class IsAExpectation extends SimpleExpectation {
+ var $_type;
+
+ /**
+ * Sets the type to compare with.
+ * @param string $type Type or class name.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function IsAExpectation($type, $message = '%s') {
+ $this->SimpleExpectation($message);
+ $this->_type = $type;
+ }
+
+ /**
+ * Accessor for type to check against.
+ * @return string Type or class name.
+ * @access protected
+ */
+ function _getType() {
+ return $this->_type;
+ }
+
+ /**
+ * Tests the expectation. True if the type or
+ * class matches the string value.
+ * @param string $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ if (is_object($compare)) {
+ return SimpleTestCompatibility::isA($compare, $this->_type);
+ } else {
+ return (strtolower(gettype($compare)) == $this->_canonicalType($this->_type));
+ }
+ }
+
+ /**
+ * Coerces type name into a gettype() match.
+ * @param string $type User type.
+ * @return string Simpler type.
+ * @access private
+ */
+ function _canonicalType($type) {
+ $type = strtolower($type);
+ $map = array(
+ 'bool' => 'boolean',
+ 'float' => 'double',
+ 'real' => 'double',
+ 'int' => 'integer');
+ if (isset($map[$type])) {
+ $type = $map[$type];
+ }
+ return $type;
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $dumper = &$this->_getDumper();
+ return "Value [" . $dumper->describeValue($compare) .
+ "] should be type [" . $this->_type . "]";
+ }
+}
+
+/**
+ * Tests either type or class name if it's an object.
+ * Will succeed if the type does not match.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class NotAExpectation extends IsAExpectation {
+ var $_type;
+
+ /**
+ * Sets the type to compare with.
+ * @param string $type Type or class name.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function NotAExpectation($type, $message = '%s') {
+ $this->IsAExpectation($type, $message);
+ }
+
+ /**
+ * Tests the expectation. False if the type or
+ * class matches the string value.
+ * @param string $compare Comparison value.
+ * @return boolean True if different.
+ * @access public
+ */
+ function test($compare) {
+ return ! parent::test($compare);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $dumper = &$this->_getDumper();
+ return "Value [" . $dumper->describeValue($compare) .
+ "] should not be type [" . $this->_getType() . "]";
+ }
+}
+
+/**
+ * Tests for existance of a method in an object
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class MethodExistsExpectation extends SimpleExpectation {
+ var $_method;
+
+ /**
+ * Sets the value to compare against.
+ * @param string $method Method to check.
+ * @param string $message Customised message on failure.
+ * @access public
+ * @return void
+ */
+ function MethodExistsExpectation($method, $message = '%s') {
+ $this->SimpleExpectation($message);
+ $this->_method = &$method;
+ }
+
+ /**
+ * Tests the expectation. True if the method exists in the test object.
+ * @param string $compare Comparison method name.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ return (boolean)(is_object($compare) && method_exists($compare, $this->_method));
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $dumper = &$this->_getDumper();
+ if (! is_object($compare)) {
+ return 'No method on non-object [' . $dumper->describeValue($compare) . ']';
+ }
+ $method = $this->_method;
+ return "Object [" . $dumper->describeValue($compare) .
+ "] should contain method [$method]";
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/extensions/pear_test_case.php b/vendors/simpletest/extensions/pear_test_case.php
new file mode 100644
index 000000000..f5e5a7b85
--- /dev/null
+++ b/vendors/simpletest/extensions/pear_test_case.php
@@ -0,0 +1,198 @@
+<?php
+ /**
+ * adapter for SimpleTest to use PEAR PHPUnit test cases
+ * @package SimpleTest
+ * @subpackage Extensions
+ * @version $Id: pear_test_case.php 1388 2006-11-10 20:59:59Z lastcraft $
+ */
+
+ /**#@+
+ * include SimpleTest files
+ */
+ require_once(dirname(__FILE__) . '/../dumper.php');
+ require_once(dirname(__FILE__) . '/../compatibility.php');
+ require_once(dirname(__FILE__) . '/../test_case.php');
+ require_once(dirname(__FILE__) . '/../expectation.php');
+ /**#@-*/
+
+ /**
+ * Adapter for PEAR PHPUnit test case to allow
+ * legacy PEAR test cases to be used with SimpleTest.
+ * @package SimpleTest
+ * @subpackage Extensions
+ */
+ class PHPUnit_TestCase extends SimpleTestCase {
+ var $_loosely_typed;
+
+ /**
+ * Constructor. Sets the test name.
+ * @param $label Test name to display.
+ * @public
+ */
+ function PHPUnit_TestCase($label = false) {
+ $this->SimpleTestCase($label);
+ $this->_loosely_typed = false;
+ }
+
+ /**
+ * Will test straight equality if set to loose
+ * typing, or identity if not.
+ * @param $first First value.
+ * @param $second Comparison value.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertEquals($first, $second, $message = "%s", $delta = 0) {
+ if ($this->_loosely_typed) {
+ $expectation = &new EqualExpectation($first);
+ } else {
+ $expectation = &new IdenticalExpectation($first);
+ }
+ $this->assert($expectation, $second, $message);
+ }
+
+ /**
+ * Passes if the value tested is not null.
+ * @param $value Value to test against.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertNotNull($value, $message = "%s") {
+ parent::assert(new TrueExpectation(), isset($value), $message);
+ }
+
+ /**
+ * Passes if the value tested is null.
+ * @param $value Value to test against.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertNull($value, $message = "%s") {
+ parent::assert(new TrueExpectation(), !isset($value), $message);
+ }
+
+ /**
+ * In PHP5 the identity test tests for the same
+ * object. This is a reference test in PHP4.
+ * @param $first First object handle.
+ * @param $second Hopefully the same handle.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertSame(&$first, &$second, $message = "%s") {
+ $dumper = &new SimpleDumper();
+ $message = sprintf(
+ $message,
+ "[" . $dumper->describeValue($first) .
+ "] and [" . $dumper->describeValue($second) .
+ "] should reference the same object");
+ return $this->assert(
+ new TrueExpectation(),
+ SimpleTestCompatibility::isReference($first, $second),
+ $message);
+ }
+
+ /**
+ * In PHP5 the identity test tests for the same
+ * object. This is a reference test in PHP4.
+ * @param $first First object handle.
+ * @param $second Hopefully a different handle.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertNotSame(&$first, &$second, $message = "%s") {
+ $dumper = &new SimpleDumper();
+ $message = sprintf(
+ $message,
+ "[" . $dumper->describeValue($first) .
+ "] and [" . $dumper->describeValue($second) .
+ "] should not be the same object");
+ return $this->assert(
+ new falseExpectation(),
+ SimpleTestCompatibility::isReference($first, $second),
+ $message);
+ }
+
+ /**
+ * Sends pass if the test condition resolves true,
+ * a fail otherwise.
+ * @param $condition Condition to test true.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertTrue($condition, $message = "%s") {
+ parent::assert(new TrueExpectation(), $condition, $message);
+ }
+
+ /**
+ * Sends pass if the test condition resolves false,
+ * a fail otherwise.
+ * @param $condition Condition to test false.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertFalse($condition, $message = "%s") {
+ parent::assert(new FalseExpectation(), $condition, $message);
+ }
+
+ /**
+ * Tests a regex match. Needs refactoring.
+ * @param $pattern Regex to match.
+ * @param $subject String to search in.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertRegExp($pattern, $subject, $message = "%s") {
+ $this->assert(new PatternExpectation($pattern), $subject, $message);
+ }
+
+ /**
+ * Tests the type of a value.
+ * @param $value Value to take type of.
+ * @param $type Hoped for type.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertType($value, $type, $message = "%s") {
+ parent::assert(new TrueExpectation(), gettype($value) == strtolower($type), $message);
+ }
+
+ /**
+ * Sets equality operation to act as a simple equal
+ * comparison only, allowing a broader range of
+ * matches.
+ * @param $loosely_typed True for broader comparison.
+ * @public
+ */
+ function setLooselyTyped($loosely_typed) {
+ $this->_loosely_typed = $loosely_typed;
+ }
+
+ /**
+ * For progress indication during
+ * a test amongst other things.
+ * @return Usually one.
+ * @public
+ */
+ function countTestCases() {
+ return $this->getSize();
+ }
+
+ /**
+ * Accessor for name, normally just the class
+ * name.
+ * @public
+ */
+ function getName() {
+ return $this->getLabel();
+ }
+
+ /**
+ * Does nothing. For compatibility only.
+ * @param $name Dummy
+ * @public
+ */
+ function setName($name) {
+ }
+ }
+?>
diff --git a/vendors/simpletest/extensions/phpunit_test_case.php b/vendors/simpletest/extensions/phpunit_test_case.php
new file mode 100644
index 000000000..e038a4967
--- /dev/null
+++ b/vendors/simpletest/extensions/phpunit_test_case.php
@@ -0,0 +1,96 @@
+<?php
+ /**
+ * adapter for SimpleTest to use PHPUnit test cases
+ * @package SimpleTest
+ * @subpackage Extensions
+ * @version $Id: phpunit_test_case.php 1530 2007-06-04 23:35:45Z lastcraft $
+ */
+
+ /**#@+
+ * include SimpleTest files
+ */
+ require_once(dirname(__FILE__) . '/../unit_tester.php');
+ require_once(dirname(__FILE__) . '/../expectation.php');
+ /**#@-*/
+
+ /**
+ * Adapter for sourceforge PHPUnit test case to allow
+ * legacy test cases to be used with SimpleTest.
+ * @package SimpleTest
+ * @subpackage Extensions
+ */
+ class TestCase extends SimpleTestCase {
+
+ /**
+ * Constructor. Sets the test name.
+ * @param $label Test name to display.
+ * @public
+ */
+ function TestCase($label = false) {
+ $this->SimpleTestCase($label);
+ }
+
+ /**
+ * Sends pass if the test condition resolves true,
+ * a fail otherwise.
+ * @param $condition Condition to test true.
+ * @param $message Message to display.
+ * @public
+ */
+ function assert($condition, $message = false) {
+ parent::assert(new TrueExpectation(), $condition, $message);
+ }
+
+ /**
+ * Will test straight equality if set to loose
+ * typing, or identity if not.
+ * @param $first First value.
+ * @param $second Comparison value.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertEquals($first, $second, $message = false) {
+ parent::assert(new EqualExpectation($first), $second, $message);
+ }
+
+ /**
+ * Simple string equality.
+ * @param $first First value.
+ * @param $second Comparison value.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertEqualsMultilineStrings($first, $second, $message = false) {
+ parent::assert(new EqualExpectation($first), $second, $message);
+ }
+
+ /**
+ * Tests a regex match.
+ * @param $pattern Regex to match.
+ * @param $subject String to search in.
+ * @param $message Message to display.
+ * @public
+ */
+ function assertRegexp($pattern, $subject, $message = false) {
+ parent::assert(new PatternExpectation($pattern), $subject, $message);
+ }
+
+ /**
+ * Sends an error which we interpret as a fail
+ * with a different message for compatibility.
+ * @param $message Message to display.
+ * @public
+ */
+ function error($message) {
+ parent::fail("Error triggered [$message]");
+ }
+
+ /**
+ * Accessor for name.
+ * @public
+ */
+ function name() {
+ return $this->getLabel();
+ }
+ }
+?>
diff --git a/vendors/simpletest/extensions/testdox.php b/vendors/simpletest/extensions/testdox.php
new file mode 100644
index 000000000..7db7c872c
--- /dev/null
+++ b/vendors/simpletest/extensions/testdox.php
@@ -0,0 +1,42 @@
+<?php
+
+class TestDoxReporter extends SimpleReporter
+{
+ var $_test_case_pattern = '/^TestOf(.*)$/';
+
+ function TestDoxReporter($test_case_pattern = '/^TestOf(.*)$/') {
+ parent::SimpleScorer();
+ $this->_test_case_pattern = empty($test_case_pattern) ? '/^(.*)$/' : $test_case_pattern;
+ }
+
+ function paintCaseStart($test_name) {
+ preg_match($this->_test_case_pattern, $test_name, $matches);
+ if (!empty($matches[1])) {
+ echo $matches[1] . "\n";
+ } else {
+ echo $test_name . "\n";
+ }
+ }
+
+ function paintCaseEnd() {
+ echo "\n";
+ }
+
+ function paintMethodStart($test_name) {
+ if (!preg_match('/^test(.*)$/i', $test_name, $matches)) {
+ return;
+ }
+ $test_name = $matches[1];
+
+ $test_name = preg_replace('/([A-Z])([A-Z])/', '$1 $2', $test_name);
+ echo '- ' . strtolower(preg_replace('/([a-zA-Z])([A-Z0-9])/', '$1 $2', $test_name));
+ }
+
+ function paintMethodEnd() {
+ echo "\n";
+ }
+
+ function paintFail() {
+ echo " [FAILED]";
+ }
+}
diff --git a/vendors/simpletest/extensions/testdox/test.php b/vendors/simpletest/extensions/testdox/test.php
new file mode 100644
index 000000000..82c5b7da8
--- /dev/null
+++ b/vendors/simpletest/extensions/testdox/test.php
@@ -0,0 +1,108 @@
+<?php
+// $Id: test.php 1641 2008-01-22 20:13:52Z pp11 $
+require_once dirname(__FILE__) . '/../../autorun.php';
+require_once dirname(__FILE__) . '/../testdox.php';
+
+// uncomment to see test dox in action
+//SimpleTest::prefer(new TestDoxReporter());
+
+class TestOfTestDoxReporter extends UnitTestCase
+{
+ function testIsAnInstanceOfSimpleScorerAndReporter() {
+ $dox = new TestDoxReporter();
+ $this->assertIsA($dox, 'SimpleScorer');
+ $this->assertIsA($dox, 'SimpleReporter');
+ }
+
+ function testOutputsNameOfTestCase() {
+ $dox = new TestDoxReporter();
+ ob_start();
+ $dox->paintCaseStart('TestOfTestDoxReporter');
+ $buffer = ob_get_clean();
+ $this->assertWantedPattern('/^TestDoxReporter/', $buffer);
+ }
+
+ function testOutputOfTestCaseNameFilteredByConstructParameter() {
+ $dox = new TestDoxReporter('/^(.*)Test$/');
+ ob_start();
+ $dox->paintCaseStart('SomeGreatWidgetTest');
+ $buffer = ob_get_clean();
+ $this->assertWantedPattern('/^SomeGreatWidget/', $buffer);
+ }
+
+ function testIfTest_case_patternIsEmptyAssumeEverythingMatches() {
+ $dox = new TestDoxReporter('');
+ ob_start();
+ $dox->paintCaseStart('TestOfTestDoxReporter');
+ $buffer = ob_get_clean();
+ $this->assertWantedPattern('/^TestOfTestDoxReporter/', $buffer);
+ }
+
+ function testEmptyLineInsertedWhenCaseEnds() {
+ $dox = new TestDoxReporter();
+ ob_start();
+ $dox->paintCaseEnd('TestOfTestDoxReporter');
+ $buffer = ob_get_clean();
+ $this->assertEqual("\n", $buffer);
+ }
+
+ function testPaintsTestMethodInTestDoxFormat() {
+ $dox = new TestDoxReporter();
+ ob_start();
+ $dox->paintMethodStart('testSomeGreatTestCase');
+ $buffer = ob_get_clean();
+ $this->assertEqual("- some great test case", $buffer);
+ unset($buffer);
+
+ $random = rand(100, 200);
+ ob_start();
+ $dox->paintMethodStart("testRandomNumberIs{$random}");
+ $buffer = ob_get_clean();
+ $this->assertEqual("- random number is {$random}", $buffer);
+ }
+
+ function testDoesNotOutputAnythingOnNoneTestMethods() {
+ $dox = new TestDoxReporter();
+ ob_start();
+ $dox->paintMethodStart('nonMatchingMethod');
+ $buffer = ob_get_clean();
+ $this->assertEqual('', $buffer);
+ }
+
+ function testPaintMethodAddLineBreak() {
+ $dox = new TestDoxReporter();
+ ob_start();
+ $dox->paintMethodEnd('someMethod');
+ $buffer = ob_get_clean();
+ $this->assertEqual("\n", $buffer);
+ $this->assertNoErrors();
+ }
+
+ function testProperlySpacesSingleLettersInMethodName() {
+ $dox = new TestDoxReporter();
+ ob_start();
+ $dox->paintMethodStart('testAVerySimpleAgainAVerySimpleMethod');
+ $buffer = ob_get_clean();
+ $this->assertEqual('- a very simple again a very simple method', $buffer);
+ }
+
+ function testOnFailureThisPrintsFailureNotice() {
+ $dox = new TestDoxReporter();
+ ob_start();
+ $dox->paintFail();
+ $buffer = ob_get_clean();
+ $this->assertEqual(' [FAILED]', $buffer);
+ }
+
+ function testWhenMatchingMethodNamesTestPrefixIsCaseInsensitive() {
+ $dox = new TestDoxReporter();
+ ob_start();
+ $dox->paintMethodStart('TESTSupportsAllUppercaseTestPrefixEvenThoughIDoNotKnowWhyYouWouldDoThat');
+ $buffer = ob_get_clean();
+ $this->assertEqual(
+ '- supports all uppercase test prefix even though i do not know why you would do that',
+ $buffer
+ );
+ }
+}
+
diff --git a/vendors/simpletest/form.php b/vendors/simpletest/form.php
new file mode 100644
index 000000000..cbef6636d
--- /dev/null
+++ b/vendors/simpletest/form.php
@@ -0,0 +1,355 @@
+<?php
+/**
+ * Base include file for SimpleTest.
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: form.php 1672 2008-03-02 04:47:34Z edwardzyang $
+ */
+
+/**#@+
+ * include SimpleTest files
+ */
+require_once(dirname(__FILE__) . '/tag.php');
+require_once(dirname(__FILE__) . '/encoding.php');
+require_once(dirname(__FILE__) . '/selector.php');
+/**#@-*/
+
+/**
+ * Form tag class to hold widget values.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleForm {
+ var $_method;
+ var $_action;
+ var $_encoding;
+ var $_default_target;
+ var $_id;
+ var $_buttons;
+ var $_images;
+ var $_widgets;
+ var $_radios;
+ var $_checkboxes;
+
+ /**
+ * Starts with no held controls/widgets.
+ * @param SimpleTag $tag Form tag to read.
+ * @param SimplePage $page Holding page.
+ */
+ function SimpleForm($tag, &$page) {
+ $this->_method = $tag->getAttribute('method');
+ $this->_action = $this->_createAction($tag->getAttribute('action'), $page);
+ $this->_encoding = $this->_setEncodingClass($tag);
+ $this->_default_target = false;
+ $this->_id = $tag->getAttribute('id');
+ $this->_buttons = array();
+ $this->_images = array();
+ $this->_widgets = array();
+ $this->_radios = array();
+ $this->_checkboxes = array();
+ }
+
+ /**
+ * Creates the request packet to be sent by the form.
+ * @param SimpleTag $tag Form tag to read.
+ * @return string Packet class.
+ * @access private
+ */
+ function _setEncodingClass($tag) {
+ if (strtolower($tag->getAttribute('method')) == 'post') {
+ if (strtolower($tag->getAttribute('enctype')) == 'multipart/form-data') {
+ return 'SimpleMultipartEncoding';
+ }
+ return 'SimplePostEncoding';
+ }
+ return 'SimpleGetEncoding';
+ }
+
+ /**
+ * Sets the frame target within a frameset.
+ * @param string $frame Name of frame.
+ * @access public
+ */
+ function setDefaultTarget($frame) {
+ $this->_default_target = $frame;
+ }
+
+ /**
+ * Accessor for method of form submission.
+ * @return string Either get or post.
+ * @access public
+ */
+ function getMethod() {
+ return ($this->_method ? strtolower($this->_method) : 'get');
+ }
+
+ /**
+ * Combined action attribute with current location
+ * to get an absolute form target.
+ * @param string $action Action attribute from form tag.
+ * @param SimpleUrl $base Page location.
+ * @return SimpleUrl Absolute form target.
+ */
+ function _createAction($action, &$page) {
+ if (($action === '') || ($action === false)) {
+ return $page->expandUrl($page->getUrl());
+ }
+ return $page->expandUrl(new SimpleUrl($action));;
+ }
+
+ /**
+ * Absolute URL of the target.
+ * @return SimpleUrl URL target.
+ * @access public
+ */
+ function getAction() {
+ $url = $this->_action;
+ if ($this->_default_target && ! $url->getTarget()) {
+ $url->setTarget($this->_default_target);
+ }
+ return $url;
+ }
+
+ /**
+ * Creates the encoding for the current values in the
+ * form.
+ * @return SimpleFormEncoding Request to submit.
+ * @access private
+ */
+ function _encode() {
+ $class = $this->_encoding;
+ $encoding = new $class();
+ for ($i = 0, $count = count($this->_widgets); $i < $count; $i++) {
+ $this->_widgets[$i]->write($encoding);
+ }
+ return $encoding;
+ }
+
+ /**
+ * ID field of form for unique identification.
+ * @return string Unique tag ID.
+ * @access public
+ */
+ function getId() {
+ return $this->_id;
+ }
+
+ /**
+ * Adds a tag contents to the form.
+ * @param SimpleWidget $tag Input tag to add.
+ * @access public
+ */
+ function addWidget(&$tag) {
+ if (strtolower($tag->getAttribute('type')) == 'submit') {
+ $this->_buttons[] = &$tag;
+ } elseif (strtolower($tag->getAttribute('type')) == 'image') {
+ $this->_images[] = &$tag;
+ } elseif ($tag->getName()) {
+ $this->_setWidget($tag);
+ }
+ }
+
+ /**
+ * Sets the widget into the form, grouping radio
+ * buttons if any.
+ * @param SimpleWidget $tag Incoming form control.
+ * @access private
+ */
+ function _setWidget(&$tag) {
+ if (strtolower($tag->getAttribute('type')) == 'radio') {
+ $this->_addRadioButton($tag);
+ } elseif (strtolower($tag->getAttribute('type')) == 'checkbox') {
+ $this->_addCheckbox($tag);
+ } else {
+ $this->_widgets[] = &$tag;
+ }
+ }
+
+ /**
+ * Adds a radio button, building a group if necessary.
+ * @param SimpleRadioButtonTag $tag Incoming form control.
+ * @access private
+ */
+ function _addRadioButton(&$tag) {
+ if (! isset($this->_radios[$tag->getName()])) {
+ $this->_widgets[] = &new SimpleRadioGroup();
+ $this->_radios[$tag->getName()] = count($this->_widgets) - 1;
+ }
+ $this->_widgets[$this->_radios[$tag->getName()]]->addWidget($tag);
+ }
+
+ /**
+ * Adds a checkbox, making it a group on a repeated name.
+ * @param SimpleCheckboxTag $tag Incoming form control.
+ * @access private
+ */
+ function _addCheckbox(&$tag) {
+ if (! isset($this->_checkboxes[$tag->getName()])) {
+ $this->_widgets[] = &$tag;
+ $this->_checkboxes[$tag->getName()] = count($this->_widgets) - 1;
+ } else {
+ $index = $this->_checkboxes[$tag->getName()];
+ if (! SimpleTestCompatibility::isA($this->_widgets[$index], 'SimpleCheckboxGroup')) {
+ $previous = &$this->_widgets[$index];
+ $this->_widgets[$index] = &new SimpleCheckboxGroup();
+ $this->_widgets[$index]->addWidget($previous);
+ }
+ $this->_widgets[$index]->addWidget($tag);
+ }
+ }
+
+ /**
+ * Extracts current value from form.
+ * @param SimpleSelector $selector Criteria to apply.
+ * @return string/array Value(s) as string or null
+ * if not set.
+ * @access public
+ */
+ function getValue($selector) {
+ for ($i = 0, $count = count($this->_widgets); $i < $count; $i++) {
+ if ($selector->isMatch($this->_widgets[$i])) {
+ return $this->_widgets[$i]->getValue();
+ }
+ }
+ foreach ($this->_buttons as $button) {
+ if ($selector->isMatch($button)) {
+ return $button->getValue();
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Sets a widget value within the form.
+ * @param SimpleSelector $selector Criteria to apply.
+ * @param string $value Value to input into the widget.
+ * @return boolean True if value is legal, false
+ * otherwise. If the field is not
+ * present, nothing will be set.
+ * @access public
+ */
+ function setField($selector, $value, $position=false) {
+ $success = false;
+ $_position = 0;
+ for ($i = 0, $count = count($this->_widgets); $i < $count; $i++) {
+ if ($selector->isMatch($this->_widgets[$i])) {
+ $_position++;
+ if ($position === false or $_position === (int)$position) {
+ if ($this->_widgets[$i]->setValue($value)) {
+ $success = true;
+ }
+ }
+ }
+ }
+ return $success;
+ }
+
+ /**
+ * Used by the page object to set widgets labels to
+ * external label tags.
+ * @param SimpleSelector $selector Criteria to apply.
+ * @access public
+ */
+ function attachLabelBySelector($selector, $label) {
+ for ($i = 0, $count = count($this->_widgets); $i < $count; $i++) {
+ if ($selector->isMatch($this->_widgets[$i])) {
+ if (method_exists($this->_widgets[$i], 'setLabel')) {
+ $this->_widgets[$i]->setLabel($label);
+ return;
+ }
+ }
+ }
+ }
+
+ /**
+ * Test to see if a form has a submit button.
+ * @param SimpleSelector $selector Criteria to apply.
+ * @return boolean True if present.
+ * @access public
+ */
+ function hasSubmit($selector) {
+ foreach ($this->_buttons as $button) {
+ if ($selector->isMatch($button)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Test to see if a form has an image control.
+ * @param SimpleSelector $selector Criteria to apply.
+ * @return boolean True if present.
+ * @access public
+ */
+ function hasImage($selector) {
+ foreach ($this->_images as $image) {
+ if ($selector->isMatch($image)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Gets the submit values for a selected button.
+ * @param SimpleSelector $selector Criteria to apply.
+ * @param hash $additional Additional data for the form.
+ * @return SimpleEncoding Submitted values or false
+ * if there is no such button
+ * in the form.
+ * @access public
+ */
+ function submitButton($selector, $additional = false) {
+ $additional = $additional ? $additional : array();
+ foreach ($this->_buttons as $button) {
+ if ($selector->isMatch($button)) {
+ $encoding = $this->_encode();
+ $button->write($encoding);
+ if ($additional) {
+ $encoding->merge($additional);
+ }
+ return $encoding;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Gets the submit values for an image.
+ * @param SimpleSelector $selector Criteria to apply.
+ * @param integer $x X-coordinate of click.
+ * @param integer $y Y-coordinate of click.
+ * @param hash $additional Additional data for the form.
+ * @return SimpleEncoding Submitted values or false
+ * if there is no such button in the
+ * form.
+ * @access public
+ */
+ function submitImage($selector, $x, $y, $additional = false) {
+ $additional = $additional ? $additional : array();
+ foreach ($this->_images as $image) {
+ if ($selector->isMatch($image)) {
+ $encoding = $this->_encode();
+ $image->write($encoding, $x, $y);
+ if ($additional) {
+ $encoding->merge($additional);
+ }
+ return $encoding;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Simply submits the form without the submit button
+ * value. Used when there is only one button or it
+ * is unimportant.
+ * @return hash Submitted values.
+ * @access public
+ */
+ function submit() {
+ return $this->_encode();
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/frames.php b/vendors/simpletest/frames.php
new file mode 100644
index 000000000..ec098df9e
--- /dev/null
+++ b/vendors/simpletest/frames.php
@@ -0,0 +1,596 @@
+<?php
+/**
+ * Base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: frames.php 1672 2008-03-02 04:47:34Z edwardzyang $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/page.php');
+require_once(dirname(__FILE__) . '/user_agent.php');
+/**#@-*/
+
+/**
+ * A composite page. Wraps a frameset page and
+ * adds subframes. The original page will be
+ * mostly ignored. Implements the SimplePage
+ * interface so as to be interchangeable.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleFrameset {
+ var $_frameset;
+ var $_frames;
+ var $_focus;
+ var $_names;
+
+ /**
+ * Stashes the frameset page. Will make use of the
+ * browser to fetch the sub frames recursively.
+ * @param SimplePage $page Frameset page.
+ */
+ function SimpleFrameset(&$page) {
+ $this->_frameset = &$page;
+ $this->_frames = array();
+ $this->_focus = false;
+ $this->_names = array();
+ }
+
+ /**
+ * Adds a parsed page to the frameset.
+ * @param SimplePage $page Frame page.
+ * @param string $name Name of frame in frameset.
+ * @access public
+ */
+ function addFrame(&$page, $name = false) {
+ $this->_frames[] = &$page;
+ if ($name) {
+ $this->_names[$name] = count($this->_frames) - 1;
+ }
+ }
+
+ /**
+ * Replaces existing frame with another. If the
+ * frame is nested, then the call is passed down
+ * one level.
+ * @param array $path Path of frame in frameset.
+ * @param SimplePage $page Frame source.
+ * @access public
+ */
+ function setFrame($path, &$page) {
+ $name = array_shift($path);
+ if (isset($this->_names[$name])) {
+ $index = $this->_names[$name];
+ } else {
+ $index = $name - 1;
+ }
+ if (count($path) == 0) {
+ $this->_frames[$index] = &$page;
+ return;
+ }
+ $this->_frames[$index]->setFrame($path, $page);
+ }
+
+ /**
+ * Accessor for current frame focus. Will be
+ * false if no frame has focus. Will have the nested
+ * frame focus if any.
+ * @return array Labels or indexes of nested frames.
+ * @access public
+ */
+ function getFrameFocus() {
+ if ($this->_focus === false) {
+ return array();
+ }
+ return array_merge(
+ array($this->_getPublicNameFromIndex($this->_focus)),
+ $this->_frames[$this->_focus]->getFrameFocus());
+ }
+
+ /**
+ * Turns an internal array index into the frames list
+ * into a public name, or if none, then a one offset
+ * index.
+ * @param integer $subject Internal index.
+ * @return integer/string Public name.
+ * @access private
+ */
+ function _getPublicNameFromIndex($subject) {
+ foreach ($this->_names as $name => $index) {
+ if ($subject == $index) {
+ return $name;
+ }
+ }
+ return $subject + 1;
+ }
+
+ /**
+ * Sets the focus by index. The integer index starts from 1.
+ * If already focused and the target frame also has frames,
+ * then the nested frame will be focused.
+ * @param integer $choice Chosen frame.
+ * @return boolean True if frame exists.
+ * @access public
+ */
+ function setFrameFocusByIndex($choice) {
+ if (is_integer($this->_focus)) {
+ if ($this->_frames[$this->_focus]->hasFrames()) {
+ return $this->_frames[$this->_focus]->setFrameFocusByIndex($choice);
+ }
+ }
+ if (($choice < 1) || ($choice > count($this->_frames))) {
+ return false;
+ }
+ $this->_focus = $choice - 1;
+ return true;
+ }
+
+ /**
+ * Sets the focus by name. If already focused and the
+ * target frame also has frames, then the nested frame
+ * will be focused.
+ * @param string $name Chosen frame.
+ * @return boolean True if frame exists.
+ * @access public
+ */
+ function setFrameFocus($name) {
+ if (is_integer($this->_focus)) {
+ if ($this->_frames[$this->_focus]->hasFrames()) {
+ return $this->_frames[$this->_focus]->setFrameFocus($name);
+ }
+ }
+ if (in_array($name, array_keys($this->_names))) {
+ $this->_focus = $this->_names[$name];
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Clears the frame focus.
+ * @access public
+ */
+ function clearFrameFocus() {
+ $this->_focus = false;
+ $this->_clearNestedFramesFocus();
+ }
+
+ /**
+ * Clears the frame focus for any nested frames.
+ * @access private
+ */
+ function _clearNestedFramesFocus() {
+ for ($i = 0; $i < count($this->_frames); $i++) {
+ $this->_frames[$i]->clearFrameFocus();
+ }
+ }
+
+ /**
+ * Test for the presence of a frameset.
+ * @return boolean Always true.
+ * @access public
+ */
+ function hasFrames() {
+ return true;
+ }
+
+ /**
+ * Accessor for frames information.
+ * @return array/string Recursive hash of frame URL strings.
+ * The key is either a numerical
+ * index or the name attribute.
+ * @access public
+ */
+ function getFrames() {
+ $report = array();
+ for ($i = 0; $i < count($this->_frames); $i++) {
+ $report[$this->_getPublicNameFromIndex($i)] =
+ $this->_frames[$i]->getFrames();
+ }
+ return $report;
+ }
+
+ /**
+ * Accessor for raw text of either all the pages or
+ * the frame in focus.
+ * @return string Raw unparsed content.
+ * @access public
+ */
+ function getRaw() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getRaw();
+ }
+ $raw = '';
+ for ($i = 0; $i < count($this->_frames); $i++) {
+ $raw .= $this->_frames[$i]->getRaw();
+ }
+ return $raw;
+ }
+
+ /**
+ * Accessor for plain text of either all the pages or
+ * the frame in focus.
+ * @return string Plain text content.
+ * @access public
+ */
+ function getText() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getText();
+ }
+ $raw = '';
+ for ($i = 0; $i < count($this->_frames); $i++) {
+ $raw .= ' ' . $this->_frames[$i]->getText();
+ }
+ return trim($raw);
+ }
+
+ /**
+ * Accessor for last error.
+ * @return string Error from last response.
+ * @access public
+ */
+ function getTransportError() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getTransportError();
+ }
+ return $this->_frameset->getTransportError();
+ }
+
+ /**
+ * Request method used to fetch this frame.
+ * @return string GET, POST or HEAD.
+ * @access public
+ */
+ function getMethod() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getMethod();
+ }
+ return $this->_frameset->getMethod();
+ }
+
+ /**
+ * Original resource name.
+ * @return SimpleUrl Current url.
+ * @access public
+ */
+ function getUrl() {
+ if (is_integer($this->_focus)) {
+ $url = $this->_frames[$this->_focus]->getUrl();
+ $url->setTarget($this->_getPublicNameFromIndex($this->_focus));
+ } else {
+ $url = $this->_frameset->getUrl();
+ }
+ return $url;
+ }
+
+ /**
+ * Page base URL.
+ * @return SimpleUrl Current url.
+ * @access public
+ */
+ function getBaseUrl() {
+ if (is_integer($this->_focus)) {
+ $url = $this->_frames[$this->_focus]->getBaseUrl();
+ } else {
+ $url = $this->_frameset->getBaseUrl();
+ }
+ return $url;
+ }
+
+ /**
+ * Expands expandomatic URLs into fully qualified
+ * URLs for the frameset page.
+ * @param SimpleUrl $url Relative URL.
+ * @return SimpleUrl Absolute URL.
+ * @access public
+ */
+ function expandUrl($url) {
+ return $this->_frameset->expandUrl($url);
+ }
+
+ /**
+ * Original request data.
+ * @return mixed Sent content.
+ * @access public
+ */
+ function getRequestData() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getRequestData();
+ }
+ return $this->_frameset->getRequestData();
+ }
+
+ /**
+ * Accessor for current MIME type.
+ * @return string MIME type as string; e.g. 'text/html'
+ * @access public
+ */
+ function getMimeType() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getMimeType();
+ }
+ return $this->_frameset->getMimeType();
+ }
+
+ /**
+ * Accessor for last response code.
+ * @return integer Last HTTP response code received.
+ * @access public
+ */
+ function getResponseCode() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getResponseCode();
+ }
+ return $this->_frameset->getResponseCode();
+ }
+
+ /**
+ * Accessor for last Authentication type. Only valid
+ * straight after a challenge (401).
+ * @return string Description of challenge type.
+ * @access public
+ */
+ function getAuthentication() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getAuthentication();
+ }
+ return $this->_frameset->getAuthentication();
+ }
+
+ /**
+ * Accessor for last Authentication realm. Only valid
+ * straight after a challenge (401).
+ * @return string Name of security realm.
+ * @access public
+ */
+ function getRealm() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getRealm();
+ }
+ return $this->_frameset->getRealm();
+ }
+
+ /**
+ * Accessor for outgoing header information.
+ * @return string Header block.
+ * @access public
+ */
+ function getRequest() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getRequest();
+ }
+ return $this->_frameset->getRequest();
+ }
+
+ /**
+ * Accessor for raw header information.
+ * @return string Header block.
+ * @access public
+ */
+ function getHeaders() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getHeaders();
+ }
+ return $this->_frameset->getHeaders();
+ }
+
+ /**
+ * Accessor for parsed title.
+ * @return string Title or false if no title is present.
+ * @access public
+ */
+ function getTitle() {
+ return $this->_frameset->getTitle();
+ }
+
+ /**
+ * Accessor for a list of all fixed links.
+ * @return array List of urls as strings.
+ * @access public
+ */
+ function getUrls() {
+ if (is_integer($this->_focus)) {
+ return $this->_frames[$this->_focus]->getUrls();
+ }
+ $urls = array();
+ foreach ($this->_frames as $frame) {
+ $urls = array_merge($urls, $frame->getUrls());
+ }
+ return array_values(array_unique($urls));
+ }
+
+ /**
+ * Accessor for URLs by the link label. Label will match
+ * regardess of whitespace issues and case.
+ * @param string $label Text of link.
+ * @return array List of links with that label.
+ * @access public
+ */
+ function getUrlsByLabel($label) {
+ if (is_integer($this->_focus)) {
+ return $this->_tagUrlsWithFrame(
+ $this->_frames[$this->_focus]->getUrlsByLabel($label),
+ $this->_focus);
+ }
+ $urls = array();
+ foreach ($this->_frames as $index => $frame) {
+ $urls = array_merge(
+ $urls,
+ $this->_tagUrlsWithFrame(
+ $frame->getUrlsByLabel($label),
+ $index));
+ }
+ return $urls;
+ }
+
+ /**
+ * Accessor for a URL by the id attribute. If in a frameset
+ * then the first link found with that ID attribute is
+ * returned only. Focus on a frame if you want one from
+ * a specific part of the frameset.
+ * @param string $id Id attribute of link.
+ * @return string URL with that id.
+ * @access public
+ */
+ function getUrlById($id) {
+ foreach ($this->_frames as $index => $frame) {
+ if ($url = $frame->getUrlById($id)) {
+ if (! $url->gettarget()) {
+ $url->setTarget($this->_getPublicNameFromIndex($index));
+ }
+ return $url;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Attaches the intended frame index to a list of URLs.
+ * @param array $urls List of SimpleUrls.
+ * @param string $frame Name of frame or index.
+ * @return array List of tagged URLs.
+ * @access private
+ */
+ function _tagUrlsWithFrame($urls, $frame) {
+ $tagged = array();
+ foreach ($urls as $url) {
+ if (! $url->getTarget()) {
+ $url->setTarget($this->_getPublicNameFromIndex($frame));
+ }
+ $tagged[] = $url;
+ }
+ return $tagged;
+ }
+
+ /**
+ * Finds a held form by button label. Will only
+ * search correctly built forms.
+ * @param SimpleSelector $selector Button finder.
+ * @return SimpleForm Form object containing
+ * the button.
+ * @access public
+ */
+ function &getFormBySubmit($selector) {
+ $form = &$this->_findForm('getFormBySubmit', $selector);
+ return $form;
+ }
+
+ /**
+ * Finds a held form by image using a selector.
+ * Will only search correctly built forms. The first
+ * form found either within the focused frame, or
+ * across frames, will be the one returned.
+ * @param SimpleSelector $selector Image finder.
+ * @return SimpleForm Form object containing
+ * the image.
+ * @access public
+ */
+ function &getFormByImage($selector) {
+ $form = &$this->_findForm('getFormByImage', $selector);
+ return $form;
+ }
+
+ /**
+ * Finds a held form by the form ID. A way of
+ * identifying a specific form when we have control
+ * of the HTML code. The first form found
+ * either within the focused frame, or across frames,
+ * will be the one returned.
+ * @param string $id Form label.
+ * @return SimpleForm Form object containing the matching ID.
+ * @access public
+ */
+ function &getFormById($id) {
+ $form = &$this->_findForm('getFormById', $id);
+ return $form;
+ }
+
+ /**
+ * General form finder. Will search all the frames or
+ * just the one in focus.
+ * @param string $method Method to use to find in a page.
+ * @param string $attribute Label, name or ID.
+ * @return SimpleForm Form object containing the matching ID.
+ * @access private
+ */
+ function &_findForm($method, $attribute) {
+ if (is_integer($this->_focus)) {
+ $form = &$this->_findFormInFrame(
+ $this->_frames[$this->_focus],
+ $this->_focus,
+ $method,
+ $attribute);
+ return $form;
+ }
+ for ($i = 0; $i < count($this->_frames); $i++) {
+ $form = &$this->_findFormInFrame(
+ $this->_frames[$i],
+ $i,
+ $method,
+ $attribute);
+ if ($form) {
+ return $form;
+ }
+ }
+ $null = null;
+ return $null;
+ }
+
+ /**
+ * Finds a form in a page using a form finding method. Will
+ * also tag the form with the frame name it belongs in.
+ * @param SimplePage $page Page content of frame.
+ * @param integer $index Internal frame representation.
+ * @param string $method Method to use to find in a page.
+ * @param string $attribute Label, name or ID.
+ * @return SimpleForm Form object containing the matching ID.
+ * @access private
+ */
+ function &_findFormInFrame(&$page, $index, $method, $attribute) {
+ $form = &$this->_frames[$index]->$method($attribute);
+ if (isset($form)) {
+ $form->setDefaultTarget($this->_getPublicNameFromIndex($index));
+ }
+ return $form;
+ }
+
+ /**
+ * Sets a field on each form in which the field is
+ * available.
+ * @param SimpleSelector $selector Field finder.
+ * @param string $value Value to set field to.
+ * @return boolean True if value is valid.
+ * @access public
+ */
+ function setField($selector, $value) {
+ if (is_integer($this->_focus)) {
+ $this->_frames[$this->_focus]->setField($selector, $value);
+ } else {
+ for ($i = 0; $i < count($this->_frames); $i++) {
+ $this->_frames[$i]->setField($selector, $value);
+ }
+ }
+ }
+
+ /**
+ * Accessor for a form element value within a page.
+ * @param SimpleSelector $selector Field finder.
+ * @return string/boolean A string if the field is
+ * present, false if unchecked
+ * and null if missing.
+ * @access public
+ */
+ function getField($selector) {
+ for ($i = 0; $i < count($this->_frames); $i++) {
+ $value = $this->_frames[$i]->getField($selector);
+ if (isset($value)) {
+ return $value;
+ }
+ }
+ return null;
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/http.php b/vendors/simpletest/http.php
new file mode 100644
index 000000000..e6c6e89da
--- /dev/null
+++ b/vendors/simpletest/http.php
@@ -0,0 +1,624 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: http.php 1722 2008-04-07 19:30:56Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/socket.php');
+require_once(dirname(__FILE__) . '/cookies.php');
+require_once(dirname(__FILE__) . '/url.php');
+/**#@-*/
+
+/**
+ * Creates HTTP headers for the end point of
+ * a HTTP request.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleRoute {
+ var $_url;
+
+ /**
+ * Sets the target URL.
+ * @param SimpleUrl $url URL as object.
+ * @access public
+ */
+ function SimpleRoute($url) {
+ $this->_url = $url;
+ }
+
+ /**
+ * Resource name.
+ * @return SimpleUrl Current url.
+ * @access protected
+ */
+ function getUrl() {
+ return $this->_url;
+ }
+
+ /**
+ * Creates the first line which is the actual request.
+ * @param string $method HTTP request method, usually GET.
+ * @return string Request line content.
+ * @access protected
+ */
+ function _getRequestLine($method) {
+ return $method . ' ' . $this->_url->getPath() .
+ $this->_url->getEncodedRequest() . ' HTTP/1.0';
+ }
+
+ /**
+ * Creates the host part of the request.
+ * @return string Host line content.
+ * @access protected
+ */
+ function _getHostLine() {
+ $line = 'Host: ' . $this->_url->getHost();
+ if ($this->_url->getPort()) {
+ $line .= ':' . $this->_url->getPort();
+ }
+ return $line;
+ }
+
+ /**
+ * Opens a socket to the route.
+ * @param string $method HTTP request method, usually GET.
+ * @param integer $timeout Connection timeout.
+ * @return SimpleSocket New socket.
+ * @access public
+ */
+ function &createConnection($method, $timeout) {
+ $default_port = ('https' == $this->_url->getScheme()) ? 443 : 80;
+ $socket = &$this->_createSocket(
+ $this->_url->getScheme() ? $this->_url->getScheme() : 'http',
+ $this->_url->getHost(),
+ $this->_url->getPort() ? $this->_url->getPort() : $default_port,
+ $timeout);
+ if (! $socket->isError()) {
+ $socket->write($this->_getRequestLine($method) . "\r\n");
+ $socket->write($this->_getHostLine() . "\r\n");
+ $socket->write("Connection: close\r\n");
+ }
+ return $socket;
+ }
+
+ /**
+ * Factory for socket.
+ * @param string $scheme Protocol to use.
+ * @param string $host Hostname to connect to.
+ * @param integer $port Remote port.
+ * @param integer $timeout Connection timeout.
+ * @return SimpleSocket/SimpleSecureSocket New socket.
+ * @access protected
+ */
+ function &_createSocket($scheme, $host, $port, $timeout) {
+ if (in_array($scheme, array('https'))) {
+ $socket = &new SimpleSecureSocket($host, $port, $timeout);
+ } else {
+ $socket = &new SimpleSocket($host, $port, $timeout);
+ }
+ return $socket;
+ }
+}
+
+/**
+ * Creates HTTP headers for the end point of
+ * a HTTP request via a proxy server.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleProxyRoute extends SimpleRoute {
+ var $_proxy;
+ var $_username;
+ var $_password;
+
+ /**
+ * Stashes the proxy address.
+ * @param SimpleUrl $url URL as object.
+ * @param string $proxy Proxy URL.
+ * @param string $username Username for autentication.
+ * @param string $password Password for autentication.
+ * @access public
+ */
+ function SimpleProxyRoute($url, $proxy, $username = false, $password = false) {
+ $this->SimpleRoute($url);
+ $this->_proxy = $proxy;
+ $this->_username = $username;
+ $this->_password = $password;
+ }
+
+ /**
+ * Creates the first line which is the actual request.
+ * @param string $method HTTP request method, usually GET.
+ * @param SimpleUrl $url URL as object.
+ * @return string Request line content.
+ * @access protected
+ */
+ function _getRequestLine($method) {
+ $url = $this->getUrl();
+ $scheme = $url->getScheme() ? $url->getScheme() : 'http';
+ $port = $url->getPort() ? ':' . $url->getPort() : '';
+ return $method . ' ' . $scheme . '://' . $url->getHost() . $port .
+ $url->getPath() . $url->getEncodedRequest() . ' HTTP/1.0';
+ }
+
+ /**
+ * Creates the host part of the request.
+ * @param SimpleUrl $url URL as object.
+ * @return string Host line content.
+ * @access protected
+ */
+ function _getHostLine() {
+ $host = 'Host: ' . $this->_proxy->getHost();
+ $port = $this->_proxy->getPort() ? $this->_proxy->getPort() : 8080;
+ return "$host:$port";
+ }
+
+ /**
+ * Opens a socket to the route.
+ * @param string $method HTTP request method, usually GET.
+ * @param integer $timeout Connection timeout.
+ * @return SimpleSocket New socket.
+ * @access public
+ */
+ function &createConnection($method, $timeout) {
+ $socket = &$this->_createSocket(
+ $this->_proxy->getScheme() ? $this->_proxy->getScheme() : 'http',
+ $this->_proxy->getHost(),
+ $this->_proxy->getPort() ? $this->_proxy->getPort() : 8080,
+ $timeout);
+ if ($socket->isError()) {
+ return $socket;
+ }
+ $socket->write($this->_getRequestLine($method) . "\r\n");
+ $socket->write($this->_getHostLine() . "\r\n");
+ if ($this->_username && $this->_password) {
+ $socket->write('Proxy-Authorization: Basic ' .
+ base64_encode($this->_username . ':' . $this->_password) .
+ "\r\n");
+ }
+ $socket->write("Connection: close\r\n");
+ return $socket;
+ }
+}
+
+/**
+ * HTTP request for a web page. Factory for
+ * HttpResponse object.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleHttpRequest {
+ var $_route;
+ var $_encoding;
+ var $_headers;
+ var $_cookies;
+
+ /**
+ * Builds the socket request from the different pieces.
+ * These include proxy information, URL, cookies, headers,
+ * request method and choice of encoding.
+ * @param SimpleRoute $route Request route.
+ * @param SimpleFormEncoding $encoding Content to send with
+ * request.
+ * @access public
+ */
+ function SimpleHttpRequest(&$route, $encoding) {
+ $this->_route = &$route;
+ $this->_encoding = $encoding;
+ $this->_headers = array();
+ $this->_cookies = array();
+ }
+
+ /**
+ * Dispatches the content to the route's socket.
+ * @param integer $timeout Connection timeout.
+ * @return SimpleHttpResponse A response which may only have
+ * an error, but hopefully has a
+ * complete web page.
+ * @access public
+ */
+ function &fetch($timeout) {
+ $socket = &$this->_route->createConnection($this->_encoding->getMethod(), $timeout);
+ if (! $socket->isError()) {
+ $this->_dispatchRequest($socket, $this->_encoding);
+ }
+ $response = &$this->_createResponse($socket);
+ return $response;
+ }
+
+ /**
+ * Sends the headers.
+ * @param SimpleSocket $socket Open socket.
+ * @param string $method HTTP request method,
+ * usually GET.
+ * @param SimpleFormEncoding $encoding Content to send with request.
+ * @access private
+ */
+ function _dispatchRequest(&$socket, $encoding) {
+ foreach ($this->_headers as $header_line) {
+ $socket->write($header_line . "\r\n");
+ }
+ if (count($this->_cookies) > 0) {
+ $socket->write("Cookie: " . implode(";", $this->_cookies) . "\r\n");
+ }
+ $encoding->writeHeadersTo($socket);
+ $socket->write("\r\n");
+ $encoding->writeTo($socket);
+ }
+
+ /**
+ * Adds a header line to the request.
+ * @param string $header_line Text of full header line.
+ * @access public
+ */
+ function addHeaderLine($header_line) {
+ $this->_headers[] = $header_line;
+ }
+
+ /**
+ * Reads all the relevant cookies from the
+ * cookie jar.
+ * @param SimpleCookieJar $jar Jar to read
+ * @param SimpleUrl $url Url to use for scope.
+ * @access public
+ */
+ function readCookiesFromJar($jar, $url) {
+ $this->_cookies = $jar->selectAsPairs($url);
+ }
+
+ /**
+ * Wraps the socket in a response parser.
+ * @param SimpleSocket $socket Responding socket.
+ * @return SimpleHttpResponse Parsed response object.
+ * @access protected
+ */
+ function &_createResponse(&$socket) {
+ $response = &new SimpleHttpResponse(
+ $socket,
+ $this->_route->getUrl(),
+ $this->_encoding);
+ return $response;
+ }
+}
+
+/**
+ * Collection of header lines in the response.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleHttpHeaders {
+ var $_raw_headers;
+ var $_response_code;
+ var $_http_version;
+ var $_mime_type;
+ var $_location;
+ var $_cookies;
+ var $_authentication;
+ var $_realm;
+
+ /**
+ * Parses the incoming header block.
+ * @param string $headers Header block.
+ * @access public
+ */
+ function SimpleHttpHeaders($headers) {
+ $this->_raw_headers = $headers;
+ $this->_response_code = false;
+ $this->_http_version = false;
+ $this->_mime_type = '';
+ $this->_location = false;
+ $this->_cookies = array();
+ $this->_authentication = false;
+ $this->_realm = false;
+ foreach (split("\r\n", $headers) as $header_line) {
+ $this->_parseHeaderLine($header_line);
+ }
+ }
+
+ /**
+ * Accessor for parsed HTTP protocol version.
+ * @return integer HTTP error code.
+ * @access public
+ */
+ function getHttpVersion() {
+ return $this->_http_version;
+ }
+
+ /**
+ * Accessor for raw header block.
+ * @return string All headers as raw string.
+ * @access public
+ */
+ function getRaw() {
+ return $this->_raw_headers;
+ }
+
+ /**
+ * Accessor for parsed HTTP error code.
+ * @return integer HTTP error code.
+ * @access public
+ */
+ function getResponseCode() {
+ return (integer)$this->_response_code;
+ }
+
+ /**
+ * Returns the redirected URL or false if
+ * no redirection.
+ * @return string URL or false for none.
+ * @access public
+ */
+ function getLocation() {
+ return $this->_location;
+ }
+
+ /**
+ * Test to see if the response is a valid redirect.
+ * @return boolean True if valid redirect.
+ * @access public
+ */
+ function isRedirect() {
+ return in_array($this->_response_code, array(301, 302, 303, 307)) &&
+ (boolean)$this->getLocation();
+ }
+
+ /**
+ * Test to see if the response is an authentication
+ * challenge.
+ * @return boolean True if challenge.
+ * @access public
+ */
+ function isChallenge() {
+ return ($this->_response_code == 401) &&
+ (boolean)$this->_authentication &&
+ (boolean)$this->_realm;
+ }
+
+ /**
+ * Accessor for MIME type header information.
+ * @return string MIME type.
+ * @access public
+ */
+ function getMimeType() {
+ return $this->_mime_type;
+ }
+
+ /**
+ * Accessor for authentication type.
+ * @return string Type.
+ * @access public
+ */
+ function getAuthentication() {
+ return $this->_authentication;
+ }
+
+ /**
+ * Accessor for security realm.
+ * @return string Realm.
+ * @access public
+ */
+ function getRealm() {
+ return $this->_realm;
+ }
+
+ /**
+ * Writes new cookies to the cookie jar.
+ * @param SimpleCookieJar $jar Jar to write to.
+ * @param SimpleUrl $url Host and path to write under.
+ * @access public
+ */
+ function writeCookiesToJar(&$jar, $url) {
+ foreach ($this->_cookies as $cookie) {
+ $jar->setCookie(
+ $cookie->getName(),
+ $cookie->getValue(),
+ $url->getHost(),
+ $cookie->getPath(),
+ $cookie->getExpiry());
+ }
+ }
+
+ /**
+ * Called on each header line to accumulate the held
+ * data within the class.
+ * @param string $header_line One line of header.
+ * @access protected
+ */
+ function _parseHeaderLine($header_line) {
+ if (preg_match('/HTTP\/(\d+\.\d+)\s+(\d+)/i', $header_line, $matches)) {
+ $this->_http_version = $matches[1];
+ $this->_response_code = $matches[2];
+ }
+ if (preg_match('/Content-type:\s*(.*)/i', $header_line, $matches)) {
+ $this->_mime_type = trim($matches[1]);
+ }
+ if (preg_match('/Location:\s*(.*)/i', $header_line, $matches)) {
+ $this->_location = trim($matches[1]);
+ }
+ if (preg_match('/Set-cookie:(.*)/i', $header_line, $matches)) {
+ $this->_cookies[] = $this->_parseCookie($matches[1]);
+ }
+ if (preg_match('/WWW-Authenticate:\s+(\S+)\s+realm=\"(.*?)\"/i', $header_line, $matches)) {
+ $this->_authentication = $matches[1];
+ $this->_realm = trim($matches[2]);
+ }
+ }
+
+ /**
+ * Parse the Set-cookie content.
+ * @param string $cookie_line Text after "Set-cookie:"
+ * @return SimpleCookie New cookie object.
+ * @access private
+ */
+ function _parseCookie($cookie_line) {
+ $parts = split(";", $cookie_line);
+ $cookie = array();
+ preg_match('/\s*(.*?)\s*=(.*)/', array_shift($parts), $cookie);
+ foreach ($parts as $part) {
+ if (preg_match('/\s*(.*?)\s*=(.*)/', $part, $matches)) {
+ $cookie[$matches[1]] = trim($matches[2]);
+ }
+ }
+ return new SimpleCookie(
+ $cookie[1],
+ trim($cookie[2]),
+ isset($cookie["path"]) ? $cookie["path"] : "",
+ isset($cookie["expires"]) ? $cookie["expires"] : false);
+ }
+}
+
+/**
+ * Basic HTTP response.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleHttpResponse extends SimpleStickyError {
+ var $_url;
+ var $_encoding;
+ var $_sent;
+ var $_content;
+ var $_headers;
+
+ /**
+ * Constructor. Reads and parses the incoming
+ * content and headers.
+ * @param SimpleSocket $socket Network connection to fetch
+ * response text from.
+ * @param SimpleUrl $url Resource name.
+ * @param mixed $encoding Record of content sent.
+ * @access public
+ */
+ function SimpleHttpResponse(&$socket, $url, $encoding) {
+ $this->SimpleStickyError();
+ $this->_url = $url;
+ $this->_encoding = $encoding;
+ $this->_sent = $socket->getSent();
+ $this->_content = false;
+ $raw = $this->_readAll($socket);
+ if ($socket->isError()) {
+ $this->_setError('Error reading socket [' . $socket->getError() . ']');
+ return;
+ }
+ $this->_parse($raw);
+ }
+
+ /**
+ * Splits up the headers and the rest of the content.
+ * @param string $raw Content to parse.
+ * @access private
+ */
+ function _parse($raw) {
+ if (! $raw) {
+ $this->_setError('Nothing fetched');
+ $this->_headers = &new SimpleHttpHeaders('');
+ } elseif (! strstr($raw, "\r\n\r\n")) {
+ $this->_setError('Could not split headers from content');
+ $this->_headers = &new SimpleHttpHeaders($raw);
+ } else {
+ list($headers, $this->_content) = split("\r\n\r\n", $raw, 2);
+ $this->_headers = &new SimpleHttpHeaders($headers);
+ }
+ }
+
+ /**
+ * Original request method.
+ * @return string GET, POST or HEAD.
+ * @access public
+ */
+ function getMethod() {
+ return $this->_encoding->getMethod();
+ }
+
+ /**
+ * Resource name.
+ * @return SimpleUrl Current url.
+ * @access public
+ */
+ function getUrl() {
+ return $this->_url;
+ }
+
+ /**
+ * Original request data.
+ * @return mixed Sent content.
+ * @access public
+ */
+ function getRequestData() {
+ return $this->_encoding;
+ }
+
+ /**
+ * Raw request that was sent down the wire.
+ * @return string Bytes actually sent.
+ * @access public
+ */
+ function getSent() {
+ return $this->_sent;
+ }
+
+ /**
+ * Accessor for the content after the last
+ * header line.
+ * @return string All content.
+ * @access public
+ */
+ function getContent() {
+ return $this->_content;
+ }
+
+ /**
+ * Accessor for header block. The response is the
+ * combination of this and the content.
+ * @return SimpleHeaders Wrapped header block.
+ * @access public
+ */
+ function getHeaders() {
+ return $this->_headers;
+ }
+
+ /**
+ * Accessor for any new cookies.
+ * @return array List of new cookies.
+ * @access public
+ */
+ function getNewCookies() {
+ return $this->_headers->getNewCookies();
+ }
+
+ /**
+ * Reads the whole of the socket output into a
+ * single string.
+ * @param SimpleSocket $socket Unread socket.
+ * @return string Raw output if successful
+ * else false.
+ * @access private
+ */
+ function _readAll(&$socket) {
+ $all = '';
+ while (! $this->_isLastPacket($next = $socket->read())) {
+ $all .= $next;
+ }
+ return $all;
+ }
+
+ /**
+ * Test to see if the packet from the socket is the
+ * last one.
+ * @param string $packet Chunk to interpret.
+ * @return boolean True if empty or EOF.
+ * @access private
+ */
+ function _isLastPacket($packet) {
+ if (is_string($packet)) {
+ return $packet === '';
+ }
+ return ! $packet;
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/invoker.php b/vendors/simpletest/invoker.php
new file mode 100644
index 000000000..e2730013e
--- /dev/null
+++ b/vendors/simpletest/invoker.php
@@ -0,0 +1,139 @@
+<?php
+/**
+ * Base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: invoker.php 1722 2008-04-07 19:30:56Z lastcraft $
+ */
+
+/**#@+
+ * Includes SimpleTest files and defined the root constant
+ * for dependent libraries.
+ */
+require_once(dirname(__FILE__) . '/errors.php');
+require_once(dirname(__FILE__) . '/compatibility.php');
+require_once(dirname(__FILE__) . '/scorer.php');
+require_once(dirname(__FILE__) . '/expectation.php');
+require_once(dirname(__FILE__) . '/dumper.php');
+if (! defined('SIMPLE_TEST')) {
+ define('SIMPLE_TEST', dirname(__FILE__) . '/');
+}
+/**#@-*/
+
+/**
+ * This is called by the class runner to run a
+ * single test method. Will also run the setUp()
+ * and tearDown() methods.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleInvoker {
+ var $_test_case;
+
+ /**
+ * Stashes the test case for later.
+ * @param SimpleTestCase $test_case Test case to run.
+ */
+ function SimpleInvoker(&$test_case) {
+ $this->_test_case = &$test_case;
+ }
+
+ /**
+ * Accessor for test case being run.
+ * @return SimpleTestCase Test case.
+ * @access public
+ */
+ function &getTestCase() {
+ return $this->_test_case;
+ }
+
+ /**
+ * Runs test level set up. Used for changing
+ * the mechanics of base test cases.
+ * @param string $method Test method to call.
+ * @access public
+ */
+ function before($method) {
+ $this->_test_case->before($method);
+ }
+
+ /**
+ * Invokes a test method and buffered with setUp()
+ * and tearDown() calls.
+ * @param string $method Test method to call.
+ * @access public
+ */
+ function invoke($method) {
+ $this->_test_case->setUp();
+ $this->_test_case->$method();
+ $this->_test_case->tearDown();
+ }
+
+ /**
+ * Runs test level clean up. Used for changing
+ * the mechanics of base test cases.
+ * @param string $method Test method to call.
+ * @access public
+ */
+ function after($method) {
+ $this->_test_case->after($method);
+ }
+}
+
+/**
+ * Do nothing decorator. Just passes the invocation
+ * straight through.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleInvokerDecorator {
+ var $_invoker;
+
+ /**
+ * Stores the invoker to wrap.
+ * @param SimpleInvoker $invoker Test method runner.
+ */
+ function SimpleInvokerDecorator(&$invoker) {
+ $this->_invoker = &$invoker;
+ }
+
+ /**
+ * Accessor for test case being run.
+ * @return SimpleTestCase Test case.
+ * @access public
+ */
+ function &getTestCase() {
+ return $this->_invoker->getTestCase();
+ }
+
+ /**
+ * Runs test level set up. Used for changing
+ * the mechanics of base test cases.
+ * @param string $method Test method to call.
+ * @access public
+ */
+ function before($method) {
+ $this->_invoker->before($method);
+ }
+
+ /**
+ * Invokes a test method and buffered with setUp()
+ * and tearDown() calls.
+ * @param string $method Test method to call.
+ * @access public
+ */
+ function invoke($method) {
+ $this->_invoker->invoke($method);
+ }
+
+ /**
+ * Runs test level clean up. Used for changing
+ * the mechanics of base test cases.
+ * @param string $method Test method to call.
+ * @access public
+ */
+ function after($method) {
+ $this->_invoker->after($method);
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/mock_objects.php b/vendors/simpletest/mock_objects.php
new file mode 100644
index 000000000..5ef15751d
--- /dev/null
+++ b/vendors/simpletest/mock_objects.php
@@ -0,0 +1,1581 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage MockObjects
+ * @version $Id: mock_objects.php 1672 2008-03-02 04:47:34Z edwardzyang $
+ */
+
+/**#@+
+ * include SimpleTest files
+ */
+require_once(dirname(__FILE__) . '/expectation.php');
+require_once(dirname(__FILE__) . '/simpletest.php');
+require_once(dirname(__FILE__) . '/dumper.php');
+if (version_compare(phpversion(), '5') >= 0) {
+ require_once(dirname(__FILE__) . '/reflection_php5.php');
+} else {
+ require_once(dirname(__FILE__) . '/reflection_php4.php');
+}
+/**#@-*/
+
+/**
+ * Default character simpletest will substitute for any value
+ */
+if (! defined('MOCK_ANYTHING')) {
+ define('MOCK_ANYTHING', '*');
+}
+
+/**
+ * Parameter comparison assertion.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class ParametersExpectation extends SimpleExpectation {
+ var $_expected;
+
+ /**
+ * Sets the expected parameter list.
+ * @param array $parameters Array of parameters including
+ * those that are wildcarded.
+ * If the value is not an array
+ * then it is considered to match any.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function ParametersExpectation($expected = false, $message = '%s') {
+ $this->SimpleExpectation($message);
+ $this->_expected = $expected;
+ }
+
+ /**
+ * Tests the assertion. True if correct.
+ * @param array $parameters Comparison values.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($parameters) {
+ if (! is_array($this->_expected)) {
+ return true;
+ }
+ if (count($this->_expected) != count($parameters)) {
+ return false;
+ }
+ for ($i = 0; $i < count($this->_expected); $i++) {
+ if (! $this->_testParameter($parameters[$i], $this->_expected[$i])) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Tests an individual parameter.
+ * @param mixed $parameter Value to test.
+ * @param mixed $expected Comparison value.
+ * @return boolean True if expectation
+ * fulfilled.
+ * @access private
+ */
+ function _testParameter($parameter, $expected) {
+ $comparison = $this->_coerceToExpectation($expected);
+ return $comparison->test($parameter);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param array $comparison Incoming parameter list.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($parameters) {
+ if ($this->test($parameters)) {
+ return "Expectation of " . count($this->_expected) .
+ " arguments of [" . $this->_renderArguments($this->_expected) .
+ "] is correct";
+ } else {
+ return $this->_describeDifference($this->_expected, $parameters);
+ }
+ }
+
+ /**
+ * Message to display if expectation differs from
+ * the parameters actually received.
+ * @param array $expected Expected parameters as list.
+ * @param array $parameters Actual parameters received.
+ * @return string Description of difference.
+ * @access private
+ */
+ function _describeDifference($expected, $parameters) {
+ if (count($expected) != count($parameters)) {
+ return "Expected " . count($expected) .
+ " arguments of [" . $this->_renderArguments($expected) .
+ "] but got " . count($parameters) .
+ " arguments of [" . $this->_renderArguments($parameters) . "]";
+ }
+ $messages = array();
+ for ($i = 0; $i < count($expected); $i++) {
+ $comparison = $this->_coerceToExpectation($expected[$i]);
+ if (! $comparison->test($parameters[$i])) {
+ $messages[] = "parameter " . ($i + 1) . " with [" .
+ $comparison->overlayMessage($parameters[$i], $this->_getDumper()) . "]";
+ }
+ }
+ return "Parameter expectation differs at " . implode(" and ", $messages);
+ }
+
+ /**
+ * Creates an identical expectation if the
+ * object/value is not already some type
+ * of expectation.
+ * @param mixed $expected Expected value.
+ * @return SimpleExpectation Expectation object.
+ * @access private
+ */
+ function _coerceToExpectation($expected) {
+ if (SimpleExpectation::isExpectation($expected)) {
+ return $expected;
+ }
+ return new IdenticalExpectation($expected);
+ }
+
+ /**
+ * Renders the argument list as a string for
+ * messages.
+ * @param array $args Incoming arguments.
+ * @return string Simple description of type and value.
+ * @access private
+ */
+ function _renderArguments($args) {
+ $descriptions = array();
+ if (is_array($args)) {
+ foreach ($args as $arg) {
+ $dumper = &new SimpleDumper();
+ $descriptions[] = $dumper->describeValue($arg);
+ }
+ }
+ return implode(', ', $descriptions);
+ }
+}
+
+/**
+ * Confirms that the number of calls on a method is as expected.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class CallCountExpectation extends SimpleExpectation {
+ var $_method;
+ var $_count;
+
+ /**
+ * Stashes the method and expected count for later
+ * reporting.
+ * @param string $method Name of method to confirm against.
+ * @param integer $count Expected number of calls.
+ * @param string $message Custom error message.
+ */
+ function CallCountExpectation($method, $count, $message = '%s') {
+ $this->_method = $method;
+ $this->_count = $count;
+ $this->SimpleExpectation($message);
+ }
+
+ /**
+ * Tests the assertion. True if correct.
+ * @param integer $compare Measured call count.
+ * @return boolean True if expected.
+ * @access public
+ */
+ function test($compare) {
+ return ($this->_count == $compare);
+ }
+
+ /**
+ * Reports the comparison.
+ * @param integer $compare Measured call count.
+ * @return string Message to show.
+ * @access public
+ */
+ function testMessage($compare) {
+ return 'Expected call count for [' . $this->_method .
+ '] was [' . $this->_count .
+ '] got [' . $compare . ']';
+ }
+}
+
+/**
+ * Confirms that the number of calls on a method is as expected.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class MinimumCallCountExpectation extends SimpleExpectation {
+ var $_method;
+ var $_count;
+
+ /**
+ * Stashes the method and expected count for later
+ * reporting.
+ * @param string $method Name of method to confirm against.
+ * @param integer $count Minimum number of calls.
+ * @param string $message Custom error message.
+ */
+ function MinimumCallCountExpectation($method, $count, $message = '%s') {
+ $this->_method = $method;
+ $this->_count = $count;
+ $this->SimpleExpectation($message);
+ }
+
+ /**
+ * Tests the assertion. True if correct.
+ * @param integer $compare Measured call count.
+ * @return boolean True if enough.
+ * @access public
+ */
+ function test($compare) {
+ return ($this->_count <= $compare);
+ }
+
+ /**
+ * Reports the comparison.
+ * @param integer $compare Measured call count.
+ * @return string Message to show.
+ * @access public
+ */
+ function testMessage($compare) {
+ return 'Minimum call count for [' . $this->_method .
+ '] was [' . $this->_count .
+ '] got [' . $compare . ']';
+ }
+}
+
+/**
+ * Confirms that the number of calls on a method is as expected.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class MaximumCallCountExpectation extends SimpleExpectation {
+ var $_method;
+ var $_count;
+
+ /**
+ * Stashes the method and expected count for later
+ * reporting.
+ * @param string $method Name of method to confirm against.
+ * @param integer $count Minimum number of calls.
+ * @param string $message Custom error message.
+ */
+ function MaximumCallCountExpectation($method, $count, $message = '%s') {
+ $this->_method = $method;
+ $this->_count = $count;
+ $this->SimpleExpectation($message);
+ }
+
+ /**
+ * Tests the assertion. True if correct.
+ * @param integer $compare Measured call count.
+ * @return boolean True if not over.
+ * @access public
+ */
+ function test($compare) {
+ return ($this->_count >= $compare);
+ }
+
+ /**
+ * Reports the comparison.
+ * @param integer $compare Measured call count.
+ * @return string Message to show.
+ * @access public
+ */
+ function testMessage($compare) {
+ return 'Maximum call count for [' . $this->_method .
+ '] was [' . $this->_count .
+ '] got [' . $compare . ']';
+ }
+}
+
+/**
+ * Retrieves method actions by searching the
+ * parameter lists until an expected match is found.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class SimpleSignatureMap {
+ var $_map;
+
+ /**
+ * Creates an empty call map.
+ * @access public
+ */
+ function SimpleSignatureMap() {
+ $this->_map = array();
+ }
+
+ /**
+ * Stashes a reference against a method call.
+ * @param array $parameters Array of arguments (including wildcards).
+ * @param mixed $action Reference placed in the map.
+ * @access public
+ */
+ function add($parameters, &$action) {
+ $place = count($this->_map);
+ $this->_map[$place] = array();
+ $this->_map[$place]['params'] = new ParametersExpectation($parameters);
+ $this->_map[$place]['content'] = &$action;
+ }
+
+ /**
+ * Searches the call list for a matching parameter
+ * set. Returned by reference.
+ * @param array $parameters Parameters to search by
+ * without wildcards.
+ * @return object Object held in the first matching
+ * slot, otherwise null.
+ * @access public
+ */
+ function &findFirstAction($parameters) {
+ $slot = $this->_findFirstSlot($parameters);
+ if (isset($slot) && isset($slot['content'])) {
+ return $slot['content'];
+ }
+ $null = null;
+ return $null;
+ }
+
+ /**
+ * Searches the call list for a matching parameter
+ * set. True if successful.
+ * @param array $parameters Parameters to search by
+ * without wildcards.
+ * @return boolean True if a match is present.
+ * @access public
+ */
+ function isMatch($parameters) {
+ return ($this->_findFirstSlot($parameters) != null);
+ }
+
+ /**
+ * Compares the incoming parameters with the
+ * internal expectation. Uses the incoming $test
+ * to dispatch the test message.
+ * @param SimpleTestCase $test Test to dispatch to.
+ * @param array $parameters The actual calling arguments.
+ * @param string $message The message to overlay.
+ * @access public
+ */
+ function test(&$test, $parameters, $message) {
+ }
+
+ /**
+ * Searches the map for a matching item.
+ * @param array $parameters Parameters to search by
+ * without wildcards.
+ * @return array Reference to slot or null.
+ * @access private
+ */
+ function &_findFirstSlot($parameters) {
+ $count = count($this->_map);
+ for ($i = 0; $i < $count; $i++) {
+ if ($this->_map[$i]["params"]->test($parameters)) {
+ return $this->_map[$i];
+ }
+ }
+ $null = null;
+ return $null;
+ }
+}
+
+/**
+ * Allows setting of actions against call signatures either
+ * at a specific time, or always. Specific time settings
+ * trump lasting ones, otherwise the most recently added
+ * will mask an earlier match.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class SimpleCallSchedule {
+ var $_wildcard = MOCK_ANYTHING;
+ var $_always;
+ var $_at;
+
+ /**
+ * Sets up an empty response schedule.
+ * Creates an empty call map.
+ */
+ function SimpleCallSchedule() {
+ $this->_always = array();
+ $this->_at = array();
+ }
+
+ /**
+ * Stores an action against a signature that
+ * will always fire unless masked by a time
+ * specific one.
+ * @param string $method Method name.
+ * @param array $args Calling parameters.
+ * @param SimpleAction $action Actually simpleByValue, etc.
+ * @access public
+ */
+ function register($method, $args, &$action) {
+ $args = $this->_replaceWildcards($args);
+ $method = strtolower($method);
+ if (! isset($this->_always[$method])) {
+ $this->_always[$method] = new SimpleSignatureMap();
+ }
+ $this->_always[$method]->add($args, $action);
+ }
+
+ /**
+ * Stores an action against a signature that
+ * will fire at a specific time in the future.
+ * @param integer $step delay of calls to this method,
+ * 0 is next.
+ * @param string $method Method name.
+ * @param array $args Calling parameters.
+ * @param SimpleAction $action Actually SimpleByValue, etc.
+ * @access public
+ */
+ function registerAt($step, $method, $args, &$action) {
+ $args = $this->_replaceWildcards($args);
+ $method = strtolower($method);
+ if (! isset($this->_at[$method])) {
+ $this->_at[$method] = array();
+ }
+ if (! isset($this->_at[$method][$step])) {
+ $this->_at[$method][$step] = new SimpleSignatureMap();
+ }
+ $this->_at[$method][$step]->add($args, $action);
+ }
+
+ function expectArguments($method, $args, $message) {
+ $args = $this->_replaceWildcards($args);
+ $message .= Mock::getExpectationLine();
+ $this->_expected_args[strtolower($method)] =
+ new ParametersExpectation($args, $message);
+
+ }
+
+ /**
+ * Actually carry out the action stored previously,
+ * if the parameters match.
+ * @param integer $step Time of call.
+ * @param string $method Method name.
+ * @param array $args The parameters making up the
+ * rest of the call.
+ * @return mixed The result of the action.
+ * @access public.
+ */
+ function &respond($step, $method, $args) {
+ $method = strtolower($method);
+ if (isset($this->_at[$method][$step])) {
+ if ($this->_at[$method][$step]->isMatch($args)) {
+ $action = &$this->_at[$method][$step]->findFirstAction($args);
+ if (isset($action)) {
+ return $action->act();
+ }
+ }
+ }
+ if (isset($this->_always[$method])) {
+ $action = &$this->_always[$method]->findFirstAction($args);
+ if (isset($action)) {
+ return $action->act();
+ }
+ }
+ $null = null;
+ return $null;
+ }
+
+ /**
+ * Replaces wildcard matches with wildcard
+ * expectations in the argument list.
+ * @param array $args Raw argument list.
+ * @return array Argument list with
+ * expectations.
+ * @access private
+ */
+ function _replaceWildcards($args) {
+ if ($args === false) {
+ return false;
+ }
+ for ($i = 0; $i < count($args); $i++) {
+ if ($args[$i] === $this->_wildcard) {
+ $args[$i] = new AnythingExpectation();
+ }
+ }
+ return $args;
+ }
+}
+
+/**
+ * A type of SimpleMethodAction.
+ * Stashes a reference for returning later.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class SimpleByReference {
+ var $_reference;
+
+ /**
+ * Stashes it for later.
+ * @param mixed $reference Actual PHP4 style reference.
+ * @access public
+ */
+ function SimpleByReference(&$reference) {
+ $this->_reference = &$reference;
+ }
+
+ /**
+ * Returns the reference stored earlier.
+ * @return mixed Whatever was stashed.
+ * @access public
+ */
+ function &act() {
+ return $this->_reference;
+ }
+}
+
+/**
+ * A type of SimpleMethodAction.
+ * Stashes a value for returning later.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class SimpleByValue {
+ var $_value;
+
+ /**
+ * Stashes it for later.
+ * @param mixed $value You need to clone objects
+ * if you want copy semantics
+ * for these.
+ * @access public
+ */
+ function SimpleByValue($value) {
+ $this->_value = $value;
+ }
+
+ /**
+ * Returns the value stored earlier.
+ * @return mixed Whatever was stashed.
+ * @access public
+ */
+ function &act() {
+ $dummy = $this->_value;
+ return $dummy;
+ }
+}
+
+/**
+ * A type of SimpleMethodAction.
+ * Stashes an exception for throwing later.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class SimpleThrower {
+ var $_exception;
+
+ /**
+ * Stashes it for later.
+ * @param Exception $exception The exception object to throw.
+ * @access public
+ */
+ function SimpleThrower($exception) {
+ $this->_exception = $exception;
+ }
+
+ /**
+ * Throws the exceptins stashed earlier.
+ * @access public
+ */
+ function act() {
+ eval('throw $this->_exception;');
+ }
+}
+
+/**
+ * A type of SimpleMethodAction.
+ * Stashes an error for emitting later.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class SimpleErrorThrower {
+ var $_error;
+ var $_severity;
+
+ /**
+ * Stashes an error to throw later.
+ * @param string $error Error message.
+ * @param integer $severity PHP error constant, e.g E_USER_ERROR.
+ * @access public
+ */
+ function SimpleErrorThrower($error, $severity) {
+ $this->_error = $error;
+ $this->_severity = $severity;
+ }
+
+ /**
+ * Triggers the stashed error.
+ * @return null The usual PHP4.4 shenanigans are needed here.
+ * @access public
+ */
+ function &act() {
+ trigger_error($this->_error, $this->_severity);
+ $null = null;
+ return $null;
+ }
+}
+
+/**
+ * A base class or delegate that extends an
+ * empty collection of methods that can have their
+ * return values set and expectations made of the
+ * calls upon them. The mock will assert the
+ * expectations against it's attached test case in
+ * addition to the server stub behaviour or returning
+ * preprogrammed responses.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class SimpleMock {
+ var $_actions;
+ var $_wildcard = MOCK_ANYTHING;
+ var $_is_strict = true;
+ var $_call_counts;
+ var $_expected_counts;
+ var $_max_counts;
+ var $_expected_args;
+ var $_expected_args_at;
+
+ /**
+ * Creates an empty action list and expectation list.
+ * All call counts are set to zero.
+ * @access public
+ */
+ function SimpleMock() {
+ $this->_actions = &new SimpleCallSchedule();
+ $this->_expectations = &new SimpleCallSchedule();
+ $this->_call_counts = array();
+ $this->_expected_counts = array();
+ $this->_max_counts = array();
+ $this->_expected_args = array();
+ $this->_expected_args_at = array();
+ $test = &$this->_getCurrentTestCase();
+ $test->tell($this);
+ }
+
+ /**
+ * Disables a name check when setting expectations.
+ * This hack is needed for the partial mocks.
+ * @access public
+ */
+ function disableExpectationNameChecks() {
+ $this->_is_strict = false;
+ }
+
+ /**
+ * Finds currently running test.
+ * @return SimpeTestCase Current test case.
+ * @access protected
+ */
+ function &_getCurrentTestCase() {
+ $context = &SimpleTest::getContext();
+ return $context->getTest();
+ }
+
+ /**
+ * Die if bad arguments array is passed.
+ * @param mixed $args The arguments value to be checked.
+ * @param string $task Description of task attempt.
+ * @return boolean Valid arguments
+ * @access private
+ */
+ function _checkArgumentsIsArray($args, $task) {
+ if (! is_array($args)) {
+ trigger_error(
+ "Cannot $task as \$args parameter is not an array",
+ E_USER_ERROR);
+ }
+ }
+
+ /**
+ * Triggers a PHP error if the method is not part
+ * of this object.
+ * @param string $method Name of method.
+ * @param string $task Description of task attempt.
+ * @access protected
+ */
+ function _dieOnNoMethod($method, $task) {
+ if ($this->_is_strict && ! method_exists($this, $method)) {
+ trigger_error(
+ "Cannot $task as no ${method}() in class " . get_class($this),
+ E_USER_ERROR);
+ }
+ }
+
+ /**
+ * Replaces wildcard matches with wildcard
+ * expectations in the argument list.
+ * @param array $args Raw argument list.
+ * @return array Argument list with
+ * expectations.
+ * @access private
+ */
+ function _replaceWildcards($args) {
+ if ($args === false) {
+ return false;
+ }
+ for ($i = 0; $i < count($args); $i++) {
+ if ($args[$i] === $this->_wildcard) {
+ $args[$i] = new AnythingExpectation();
+ }
+ }
+ return $args;
+ }
+
+ /**
+ * Adds one to the call count of a method.
+ * @param string $method Method called.
+ * @param array $args Arguments as an array.
+ * @access protected
+ */
+ function _addCall($method, $args) {
+ if (! isset($this->_call_counts[$method])) {
+ $this->_call_counts[$method] = 0;
+ }
+ $this->_call_counts[$method]++;
+ }
+
+ /**
+ * Fetches the call count of a method so far.
+ * @param string $method Method name called.
+ * @return integer Number of calls so far.
+ * @access public
+ */
+ function getCallCount($method) {
+ $this->_dieOnNoMethod($method, "get call count");
+ $method = strtolower($method);
+ if (! isset($this->_call_counts[$method])) {
+ return 0;
+ }
+ return $this->_call_counts[$method];
+ }
+
+ /**
+ * Sets a return for a parameter list that will
+ * be passed by value for all calls to this method.
+ * @param string $method Method name.
+ * @param mixed $value Result of call passed by value.
+ * @param array $args List of parameters to match
+ * including wildcards.
+ * @access public
+ */
+ function setReturnValue($method, $value, $args = false) {
+ $this->_dieOnNoMethod($method, "set return value");
+ $this->_actions->register($method, $args, new SimpleByValue($value));
+ }
+
+ /**
+ * Sets a return for a parameter list that will
+ * be passed by value only when the required call count
+ * is reached.
+ * @param integer $timing Number of calls in the future
+ * to which the result applies. If
+ * not set then all calls will return
+ * the value.
+ * @param string $method Method name.
+ * @param mixed $value Result of call passed by value.
+ * @param array $args List of parameters to match
+ * including wildcards.
+ * @access public
+ */
+ function setReturnValueAt($timing, $method, $value, $args = false) {
+ $this->_dieOnNoMethod($method, "set return value sequence");
+ $this->_actions->registerAt($timing, $method, $args, new SimpleByValue($value));
+ }
+
+ /**
+ * Sets a return for a parameter list that will
+ * be passed by reference for all calls.
+ * @param string $method Method name.
+ * @param mixed $reference Result of the call will be this object.
+ * @param array $args List of parameters to match
+ * including wildcards.
+ * @access public
+ */
+ function setReturnReference($method, &$reference, $args = false) {
+ $this->_dieOnNoMethod($method, "set return reference");
+ $this->_actions->register($method, $args, new SimpleByReference($reference));
+ }
+
+ /**
+ * Sets a return for a parameter list that will
+ * be passed by value only when the required call count
+ * is reached.
+ * @param integer $timing Number of calls in the future
+ * to which the result applies. If
+ * not set then all calls will return
+ * the value.
+ * @param string $method Method name.
+ * @param mixed $reference Result of the call will be this object.
+ * @param array $args List of parameters to match
+ * including wildcards.
+ * @access public
+ */
+ function setReturnReferenceAt($timing, $method, &$reference, $args = false) {
+ $this->_dieOnNoMethod($method, "set return reference sequence");
+ $this->_actions->registerAt($timing, $method, $args, new SimpleByReference($reference));
+ }
+
+ /**
+ * Sets up an expected call with a set of
+ * expected parameters in that call. All
+ * calls will be compared to these expectations
+ * regardless of when the call is made.
+ * @param string $method Method call to test.
+ * @param array $args Expected parameters for the call
+ * including wildcards.
+ * @param string $message Overridden message.
+ * @access public
+ */
+ function expect($method, $args, $message = '%s') {
+ $this->_dieOnNoMethod($method, 'set expected arguments');
+ $this->_checkArgumentsIsArray($args, 'set expected arguments');
+ $this->_expectations->expectArguments($method, $args, $message);
+ $args = $this->_replaceWildcards($args);
+ $message .= Mock::getExpectationLine();
+ $this->_expected_args[strtolower($method)] =
+ new ParametersExpectation($args, $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function expectArguments($method, $args, $message = '%s') {
+ return $this->expect($method, $args, $message);
+ }
+
+ /**
+ * Sets up an expected call with a set of
+ * expected parameters in that call. The
+ * expected call count will be adjusted if it
+ * is set too low to reach this call.
+ * @param integer $timing Number of calls in the future at
+ * which to test. Next call is 0.
+ * @param string $method Method call to test.
+ * @param array $args Expected parameters for the call
+ * including wildcards.
+ * @param string $message Overridden message.
+ * @access public
+ */
+ function expectAt($timing, $method, $args, $message = '%s') {
+ $this->_dieOnNoMethod($method, 'set expected arguments at time');
+ $this->_checkArgumentsIsArray($args, 'set expected arguments at time');
+ $args = $this->_replaceWildcards($args);
+ if (! isset($this->_expected_args_at[$timing])) {
+ $this->_expected_args_at[$timing] = array();
+ }
+ $method = strtolower($method);
+ $message .= Mock::getExpectationLine();
+ $this->_expected_args_at[$timing][$method] =
+ new ParametersExpectation($args, $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function expectArgumentsAt($timing, $method, $args, $message = '%s') {
+ return $this->expectAt($timing, $method, $args, $message);
+ }
+
+ /**
+ * Sets an expectation for the number of times
+ * a method will be called. The tally method
+ * is used to check this.
+ * @param string $method Method call to test.
+ * @param integer $count Number of times it should
+ * have been called at tally.
+ * @param string $message Overridden message.
+ * @access public
+ */
+ function expectCallCount($method, $count, $message = '%s') {
+ $this->_dieOnNoMethod($method, 'set expected call count');
+ $message .= Mock::getExpectationLine();
+ $this->_expected_counts[strtolower($method)] =
+ new CallCountExpectation($method, $count, $message);
+ }
+
+ /**
+ * Sets the number of times a method may be called
+ * before a test failure is triggered.
+ * @param string $method Method call to test.
+ * @param integer $count Most number of times it should
+ * have been called.
+ * @param string $message Overridden message.
+ * @access public
+ */
+ function expectMaximumCallCount($method, $count, $message = '%s') {
+ $this->_dieOnNoMethod($method, 'set maximum call count');
+ $message .= Mock::getExpectationLine();
+ $this->_max_counts[strtolower($method)] =
+ new MaximumCallCountExpectation($method, $count, $message);
+ }
+
+ /**
+ * Sets the number of times to call a method to prevent
+ * a failure on the tally.
+ * @param string $method Method call to test.
+ * @param integer $count Least number of times it should
+ * have been called.
+ * @param string $message Overridden message.
+ * @access public
+ */
+ function expectMinimumCallCount($method, $count, $message = '%s') {
+ $this->_dieOnNoMethod($method, 'set minimum call count');
+ $message .= Mock::getExpectationLine();
+ $this->_expected_counts[strtolower($method)] =
+ new MinimumCallCountExpectation($method, $count, $message);
+ }
+
+ /**
+ * Convenience method for barring a method
+ * call.
+ * @param string $method Method call to ban.
+ * @param string $message Overridden message.
+ * @access public
+ */
+ function expectNever($method, $message = '%s') {
+ $this->expectMaximumCallCount($method, 0, $message);
+ }
+
+ /**
+ * Convenience method for a single method
+ * call.
+ * @param string $method Method call to track.
+ * @param array $args Expected argument list or
+ * false for any arguments.
+ * @param string $message Overridden message.
+ * @access public
+ */
+ function expectOnce($method, $args = false, $message = '%s') {
+ $this->expectCallCount($method, 1, $message);
+ if ($args !== false) {
+ $this->expect($method, $args, $message);
+ }
+ }
+
+ /**
+ * Convenience method for requiring a method
+ * call.
+ * @param string $method Method call to track.
+ * @param array $args Expected argument list or
+ * false for any arguments.
+ * @param string $message Overridden message.
+ * @access public
+ */
+ function expectAtLeastOnce($method, $args = false, $message = '%s') {
+ $this->expectMinimumCallCount($method, 1, $message);
+ if ($args !== false) {
+ $this->expect($method, $args, $message);
+ }
+ }
+
+ /**
+ * Sets up a trigger to throw an exception upon the
+ * method call.
+ * @param string $method Method name to throw on.
+ */
+ function throwOn($method, $exception = false, $args = false) {
+ $this->_dieOnNoMethod($method, "throw on");
+ $this->_actions->register($method, $args,
+ new SimpleThrower($exception ? $exception : new Exception()));
+ }
+
+ /**
+ * Sets up a trigger to throw an exception upon the
+ * method call.
+ */
+ function throwAt($timing, $method, $exception = false, $args = false) {
+ $this->_dieOnNoMethod($method, "throw at");
+ $this->_actions->registerAt($timing, $method, $args,
+ new SimpleThrower($exception ? $exception : new Exception()));
+ }
+
+ /**
+ * Sets up a trigger to throw an error upon the
+ * method call.
+ */
+ function errorOn($method, $error = 'A mock error', $args = false, $severity = E_USER_ERROR) {
+ $this->_dieOnNoMethod($method, "error on");
+ $this->_actions->register($method, $args, new SimpleErrorThrower($error, $severity));
+ }
+
+ /**
+ * Sets up a trigger to throw an error upon the
+ * method call.
+ */
+ function errorAt($timing, $method, $error = 'A mock error', $args = false, $severity = E_USER_ERROR) {
+ $this->_dieOnNoMethod($method, "error at");
+ $this->_actions->registerAt($timing, $method, $args, new SimpleErrorThrower($error, $severity));
+ }
+
+ /**
+ * @deprecated
+ */
+ function tally() {
+ }
+
+ /**
+ * Receives event from unit test that the current
+ * test method has finished. Totals up the call
+ * counts and triggers a test assertion if a test
+ * is present for expected call counts.
+ * @param string $test_method Current method name.
+ * @param SimpleTestCase $test Test to send message to.
+ * @access public
+ */
+ function atTestEnd($test_method, &$test) {
+ foreach ($this->_expected_counts as $method => $expectation) {
+ $test->assert($expectation, $this->getCallCount($method));
+ }
+ foreach ($this->_max_counts as $method => $expectation) {
+ if ($expectation->test($this->getCallCount($method))) {
+ $test->assert($expectation, $this->getCallCount($method));
+ }
+ }
+ }
+
+ /**
+ * Returns the expected value for the method name
+ * and checks expectations. Will generate any
+ * test assertions as a result of expectations
+ * if there is a test present.
+ * @param string $method Name of method to simulate.
+ * @param array $args Arguments as an array.
+ * @return mixed Stored return.
+ * @access private
+ */
+ function &_invoke($method, $args) {
+ $method = strtolower($method);
+ $step = $this->getCallCount($method);
+ $this->_addCall($method, $args);
+ $this->_checkExpectations($method, $args, $step);
+ $result = &$this->_emulateCall($method, $args, $step);
+ return $result;
+ }
+
+ /**
+ * Finds the return value matching the incoming
+ * arguments. If there is no matching value found
+ * then an error is triggered.
+ * @param string $method Method name.
+ * @param array $args Calling arguments.
+ * @param integer $step Current position in the
+ * call history.
+ * @return mixed Stored return or other action.
+ * @access protected
+ */
+ function &_emulateCall($method, $args, $step) {
+ return $this->_actions->respond($step, $method, $args);
+ }
+
+ /**
+ * Tests the arguments against expectations.
+ * @param string $method Method to check.
+ * @param array $args Argument list to match.
+ * @param integer $timing The position of this call
+ * in the call history.
+ * @access private
+ */
+ function _checkExpectations($method, $args, $timing) {
+ $test = &$this->_getCurrentTestCase();
+ if (isset($this->_max_counts[$method])) {
+ if (! $this->_max_counts[$method]->test($timing + 1)) {
+ $test->assert($this->_max_counts[$method], $timing + 1);
+ }
+ }
+ if (isset($this->_expected_args_at[$timing][$method])) {
+ $test->assert(
+ $this->_expected_args_at[$timing][$method],
+ $args,
+ "Mock method [$method] at [$timing] -> %s");
+ } elseif (isset($this->_expected_args[$method])) {
+ $test->assert(
+ $this->_expected_args[$method],
+ $args,
+ "Mock method [$method] -> %s");
+ }
+ }
+}
+
+/**
+ * Static methods only service class for code generation of
+ * mock objects.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class Mock {
+
+ /**
+ * Factory for mock object classes.
+ * @access public
+ */
+ function Mock() {
+ trigger_error('Mock factory methods are static.');
+ }
+
+ /**
+ * Clones a class' interface and creates a mock version
+ * that can have return values and expectations set.
+ * @param string $class Class to clone.
+ * @param string $mock_class New class name. Default is
+ * the old name with "Mock"
+ * prepended.
+ * @param array $methods Additional methods to add beyond
+ * those in the cloned class. Use this
+ * to emulate the dynamic addition of
+ * methods in the cloned class or when
+ * the class hasn't been written yet.
+ * @static
+ * @access public
+ */
+ function generate($class, $mock_class = false, $methods = false) {
+ $generator = new MockGenerator($class, $mock_class);
+ return $generator->generateSubclass($methods);
+ }
+
+ /**
+ * Generates a version of a class with selected
+ * methods mocked only. Inherits the old class
+ * and chains the mock methods of an aggregated
+ * mock object.
+ * @param string $class Class to clone.
+ * @param string $mock_class New class name.
+ * @param array $methods Methods to be overridden
+ * with mock versions.
+ * @static
+ * @access public
+ */
+ function generatePartial($class, $mock_class, $methods) {
+ $generator = new MockGenerator($class, $mock_class);
+ return $generator->generatePartial($methods);
+ }
+
+ /**
+ * Uses a stack trace to find the line of an assertion.
+ * @access public
+ * @static
+ */
+ function getExpectationLine() {
+ $trace = new SimpleStackTrace(array('expect'));
+ return $trace->traceMethod();
+ }
+}
+
+/**
+ * @package SimpleTest
+ * @subpackage MockObjects
+ * @deprecated
+ */
+class Stub extends Mock {
+}
+
+/**
+ * Service class for code generation of mock objects.
+ * @package SimpleTest
+ * @subpackage MockObjects
+ */
+class MockGenerator {
+ var $_class;
+ var $_mock_class;
+ var $_mock_base;
+ var $_reflection;
+
+ /**
+ * Builds initial reflection object.
+ * @param string $class Class to be mocked.
+ * @param string $mock_class New class with identical interface,
+ * but no behaviour.
+ */
+ function MockGenerator($class, $mock_class) {
+ $this->_class = $class;
+ $this->_mock_class = $mock_class;
+ if (! $this->_mock_class) {
+ $this->_mock_class = 'Mock' . $this->_class;
+ }
+ $this->_mock_base = SimpleTest::getMockBaseClass();
+ $this->_reflection = new SimpleReflection($this->_class);
+ }
+
+ /**
+ * Clones a class' interface and creates a mock version
+ * that can have return values and expectations set.
+ * @param array $methods Additional methods to add beyond
+ * those in th cloned class. Use this
+ * to emulate the dynamic addition of
+ * methods in the cloned class or when
+ * the class hasn't been written yet.
+ * @access public
+ */
+ function generate($methods) {
+ if (! $this->_reflection->classOrInterfaceExists()) {
+ return false;
+ }
+ $mock_reflection = new SimpleReflection($this->_mock_class);
+ if ($mock_reflection->classExistsSansAutoload()) {
+ return false;
+ }
+ $code = $this->_createClassCode($methods ? $methods : array());
+ return eval("$code return \$code;");
+ }
+
+ /**
+ * Subclasses a class and overrides every method with a mock one
+ * that can have return values and expectations set. Chains
+ * to an aggregated SimpleMock.
+ * @param array $methods Additional methods to add beyond
+ * those in the cloned class. Use this
+ * to emulate the dynamic addition of
+ * methods in the cloned class or when
+ * the class hasn't been written yet.
+ * @access public
+ */
+ function generateSubclass($methods) {
+ if (! $this->_reflection->classOrInterfaceExists()) {
+ return false;
+ }
+ $mock_reflection = new SimpleReflection($this->_mock_class);
+ if ($mock_reflection->classExistsSansAutoload()) {
+ return false;
+ }
+ if ($this->_reflection->isInterface() || $this->_reflection->hasFinal()) {
+ $code = $this->_createClassCode($methods ? $methods : array());
+ return eval("$code return \$code;");
+ } else {
+ $code = $this->_createSubclassCode($methods ? $methods : array());
+ return eval("$code return \$code;");
+ }
+ }
+
+ /**
+ * Generates a version of a class with selected
+ * methods mocked only. Inherits the old class
+ * and chains the mock methods of an aggregated
+ * mock object.
+ * @param array $methods Methods to be overridden
+ * with mock versions.
+ * @access public
+ */
+ function generatePartial($methods) {
+ if (! $this->_reflection->classExists($this->_class)) {
+ return false;
+ }
+ $mock_reflection = new SimpleReflection($this->_mock_class);
+ if ($mock_reflection->classExistsSansAutoload()) {
+ trigger_error('Partial mock class [' . $this->_mock_class . '] already exists');
+ return false;
+ }
+ $code = $this->_extendClassCode($methods);
+ return eval("$code return \$code;");
+ }
+
+ /**
+ * The new mock class code as a string.
+ * @param array $methods Additional methods.
+ * @return string Code for new mock class.
+ * @access private
+ */
+ function _createClassCode($methods) {
+ $implements = '';
+ $interfaces = $this->_reflection->getInterfaces();
+ if (function_exists('spl_classes')) {
+ $interfaces = array_diff($interfaces, array('Traversable'));
+ }
+ if (count($interfaces) > 0) {
+ $implements = 'implements ' . implode(', ', $interfaces);
+ }
+ $code = "class " . $this->_mock_class . " extends " . $this->_mock_base . " $implements {\n";
+ $code .= " function " . $this->_mock_class . "() {\n";
+ $code .= " \$this->" . $this->_mock_base . "();\n";
+ $code .= " }\n";
+ if (in_array('__construct', $this->_reflection->getMethods())) {
+ $code .= " " . $this->_reflection->getSignature('__construct') . " {\n";
+ $code .= " \$this->" . $this->_mock_base . "();\n";
+ $code .= " }\n";
+ }
+ $code .= $this->_createHandlerCode($methods);
+ $code .= "}\n";
+ return $code;
+ }
+
+ /**
+ * The new mock class code as a string. The mock will
+ * be a subclass of the original mocked class.
+ * @param array $methods Additional methods.
+ * @return string Code for new mock class.
+ * @access private
+ */
+ function _createSubclassCode($methods) {
+ $code = "class " . $this->_mock_class . " extends " . $this->_class . " {\n";
+ $code .= " var \$_mock;\n";
+ $code .= $this->_addMethodList(array_merge($methods, $this->_reflection->getMethods()));
+ $code .= "\n";
+ $code .= " function " . $this->_mock_class . "() {\n";
+ $code .= " \$this->_mock = &new " . $this->_mock_base . "();\n";
+ $code .= " \$this->_mock->disableExpectationNameChecks();\n";
+ $code .= " }\n";
+ $code .= $this->_chainMockReturns();
+ $code .= $this->_chainMockExpectations();
+ $code .= $this->_chainThrowMethods();
+ $code .= $this->_overrideMethods($this->_reflection->getMethods());
+ $code .= $this->_createNewMethodCode($methods);
+ $code .= "}\n";
+ return $code;
+ }
+
+ /**
+ * The extension class code as a string. The class
+ * composites a mock object and chains mocked methods
+ * to it.
+ * @param array $methods Mocked methods.
+ * @return string Code for a new class.
+ * @access private
+ */
+ function _extendClassCode($methods) {
+ $code = "class " . $this->_mock_class . " extends " . $this->_class . " {\n";
+ $code .= " var \$_mock;\n";
+ $code .= $this->_addMethodList($methods);
+ $code .= "\n";
+ $code .= " function " . $this->_mock_class . "() {\n";
+ $code .= " \$this->_mock = &new " . $this->_mock_base . "();\n";
+ $code .= " \$this->_mock->disableExpectationNameChecks();\n";
+ $code .= " }\n";
+ $code .= $this->_chainMockReturns();
+ $code .= $this->_chainMockExpectations();
+ $code .= $this->_chainThrowMethods();
+ $code .= $this->_overrideMethods($methods);
+ $code .= "}\n";
+ return $code;
+ }
+
+ /**
+ * Creates code within a class to generate replaced
+ * methods. All methods call the _invoke() handler
+ * with the method name and the arguments in an
+ * array.
+ * @param array $methods Additional methods.
+ * @access private
+ */
+ function _createHandlerCode($methods) {
+ $code = '';
+ $methods = array_merge($methods, $this->_reflection->getMethods());
+ foreach ($methods as $method) {
+ if ($this->_isConstructor($method)) {
+ continue;
+ }
+ $mock_reflection = new SimpleReflection($this->_mock_base);
+ if (in_array($method, $mock_reflection->getMethods())) {
+ continue;
+ }
+ $code .= " " . $this->_reflection->getSignature($method) . " {\n";
+ $code .= " \$args = func_get_args();\n";
+ $code .= " \$result = &\$this->_invoke(\"$method\", \$args);\n";
+ $code .= " return \$result;\n";
+ $code .= " }\n";
+ }
+ return $code;
+ }
+
+ /**
+ * Creates code within a class to generate a new
+ * methods. All methods call the _invoke() handler
+ * on the internal mock with the method name and
+ * the arguments in an array.
+ * @param array $methods Additional methods.
+ * @access private
+ */
+ function _createNewMethodCode($methods) {
+ $code = '';
+ foreach ($methods as $method) {
+ if ($this->_isConstructor($method)) {
+ continue;
+ }
+ $mock_reflection = new SimpleReflection($this->_mock_base);
+ if (in_array($method, $mock_reflection->getMethods())) {
+ continue;
+ }
+ $code .= " " . $this->_reflection->getSignature($method) . " {\n";
+ $code .= " \$args = func_get_args();\n";
+ $code .= " \$result = &\$this->_mock->_invoke(\"$method\", \$args);\n";
+ $code .= " return \$result;\n";
+ $code .= " }\n";
+ }
+ return $code;
+ }
+
+ /**
+ * Tests to see if a special PHP method is about to
+ * be stubbed by mistake.
+ * @param string $method Method name.
+ * @return boolean True if special.
+ * @access private
+ */
+ function _isConstructor($method) {
+ return in_array(
+ strtolower($method),
+ array('__construct', '__destruct'));
+ }
+
+ /**
+ * Creates a list of mocked methods for error checking.
+ * @param array $methods Mocked methods.
+ * @return string Code for a method list.
+ * @access private
+ */
+ function _addMethodList($methods) {
+ return " var \$_mocked_methods = array('" .
+ implode("', '", array_map('strtolower', $methods)) .
+ "');\n";
+ }
+
+ /**
+ * Creates code to abandon the expectation if not mocked.
+ * @param string $alias Parameter name of method name.
+ * @return string Code for bail out.
+ * @access private
+ */
+ function _bailOutIfNotMocked($alias) {
+ $code = " if (! in_array(strtolower($alias), \$this->_mocked_methods)) {\n";
+ $code .= " trigger_error(\"Method [$alias] is not mocked\");\n";
+ $code .= " \$null = null;\n";
+ $code .= " return \$null;\n";
+ $code .= " }\n";
+ return $code;
+ }
+
+ /**
+ * Creates source code for chaining to the composited
+ * mock object.
+ * @return string Code for mock set up.
+ * @access private
+ */
+ function _chainMockReturns() {
+ $code = " function setReturnValue(\$method, \$value, \$args = false) {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->setReturnValue(\$method, \$value, \$args);\n";
+ $code .= " }\n";
+ $code .= " function setReturnValueAt(\$timing, \$method, \$value, \$args = false) {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->setReturnValueAt(\$timing, \$method, \$value, \$args);\n";
+ $code .= " }\n";
+ $code .= " function setReturnReference(\$method, &\$ref, \$args = false) {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->setReturnReference(\$method, \$ref, \$args);\n";
+ $code .= " }\n";
+ $code .= " function setReturnReferenceAt(\$timing, \$method, &\$ref, \$args = false) {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->setReturnReferenceAt(\$timing, \$method, \$ref, \$args);\n";
+ $code .= " }\n";
+ return $code;
+ }
+
+ /**
+ * Creates source code for chaining to an aggregated
+ * mock object.
+ * @return string Code for expectations.
+ * @access private
+ */
+ function _chainMockExpectations() {
+ $code = " function expect(\$method, \$args = false, \$msg = '%s') {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->expect(\$method, \$args, \$msg);\n";
+ $code .= " }\n";
+ $code .= " function expectArguments(\$method, \$args = false, \$msg = '%s') {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->expectArguments(\$method, \$args, \$msg);\n";
+ $code .= " }\n";
+ $code .= " function expectAt(\$timing, \$method, \$args = false, \$msg = '%s') {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->expectArgumentsAt(\$timing, \$method, \$args, \$msg);\n";
+ $code .= " }\n";
+ $code .= " function expectArgumentsAt(\$timing, \$method, \$args = false, \$msg = '%s') {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->expectArgumentsAt(\$timing, \$method, \$args, \$msg);\n";
+ $code .= " }\n";
+ $code .= " function expectCallCount(\$method, \$count) {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->expectCallCount(\$method, \$count, \$msg = '%s');\n";
+ $code .= " }\n";
+ $code .= " function expectMaximumCallCount(\$method, \$count, \$msg = '%s') {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->expectMaximumCallCount(\$method, \$count, \$msg = '%s');\n";
+ $code .= " }\n";
+ $code .= " function expectMinimumCallCount(\$method, \$count, \$msg = '%s') {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->expectMinimumCallCount(\$method, \$count, \$msg = '%s');\n";
+ $code .= " }\n";
+ $code .= " function expectNever(\$method) {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->expectNever(\$method);\n";
+ $code .= " }\n";
+ $code .= " function expectOnce(\$method, \$args = false, \$msg = '%s') {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->expectOnce(\$method, \$args, \$msg);\n";
+ $code .= " }\n";
+ $code .= " function expectAtLeastOnce(\$method, \$args = false, \$msg = '%s') {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->expectAtLeastOnce(\$method, \$args, \$msg);\n";
+ $code .= " }\n";
+ $code .= " function tally() {\n";
+ $code .= " }\n";
+ return $code;
+ }
+
+ /**
+ * Adds code for chaining the throw methods.
+ * @return string Code for chains.
+ * @access private
+ */
+ function _chainThrowMethods() {
+ $code = " function throwOn(\$method, \$exception = false, \$args = false) {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->throwOn(\$method, \$exception, \$args);\n";
+ $code .= " }\n";
+ $code .= " function throwAt(\$timing, \$method, \$exception = false, \$args = false) {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->throwAt(\$timing, \$method, \$exception, \$args);\n";
+ $code .= " }\n";
+ $code .= " function errorOn(\$method, \$error = 'A mock error', \$args = false, \$severity = E_USER_ERROR) {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->errorOn(\$method, \$error, \$args, \$severity);\n";
+ $code .= " }\n";
+ $code .= " function errorAt(\$timing, \$method, \$error = 'A mock error', \$args = false, \$severity = E_USER_ERROR) {\n";
+ $code .= $this->_bailOutIfNotMocked("\$method");
+ $code .= " \$this->_mock->errorAt(\$timing, \$method, \$error, \$args, \$severity);\n";
+ $code .= " }\n";
+ return $code;
+ }
+
+ /**
+ * Creates source code to override a list of methods
+ * with mock versions.
+ * @param array $methods Methods to be overridden
+ * with mock versions.
+ * @return string Code for overridden chains.
+ * @access private
+ */
+ function _overrideMethods($methods) {
+ $code = "";
+ foreach ($methods as $method) {
+ if ($this->_isConstructor($method)) {
+ continue;
+ }
+ $code .= " " . $this->_reflection->getSignature($method) . " {\n";
+ $code .= " \$args = func_get_args();\n";
+ $code .= " \$result = &\$this->_mock->_invoke(\"$method\", \$args);\n";
+ $code .= " return \$result;\n";
+ $code .= " }\n";
+ }
+ return $code;
+ }
+}
+?>
diff --git a/vendors/simpletest/page.php b/vendors/simpletest/page.php
new file mode 100644
index 000000000..08e5649dc
--- /dev/null
+++ b/vendors/simpletest/page.php
@@ -0,0 +1,983 @@
+<?php
+/**
+ * Base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: page.php 1672 2008-03-02 04:47:34Z edwardzyang $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/http.php');
+require_once(dirname(__FILE__) . '/parser.php');
+require_once(dirname(__FILE__) . '/tag.php');
+require_once(dirname(__FILE__) . '/form.php');
+require_once(dirname(__FILE__) . '/selector.php');
+/**#@-*/
+
+/**
+ * Creates tags and widgets given HTML tag
+ * attributes.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleTagBuilder {
+
+ /**
+ * Factory for the tag objects. Creates the
+ * appropriate tag object for the incoming tag name
+ * and attributes.
+ * @param string $name HTML tag name.
+ * @param hash $attributes Element attributes.
+ * @return SimpleTag Tag object.
+ * @access public
+ */
+ function createTag($name, $attributes) {
+ static $map = array(
+ 'a' => 'SimpleAnchorTag',
+ 'title' => 'SimpleTitleTag',
+ 'base' => 'SimpleBaseTag',
+ 'button' => 'SimpleButtonTag',
+ 'textarea' => 'SimpleTextAreaTag',
+ 'option' => 'SimpleOptionTag',
+ 'label' => 'SimpleLabelTag',
+ 'form' => 'SimpleFormTag',
+ 'frame' => 'SimpleFrameTag');
+ $attributes = $this->_keysToLowerCase($attributes);
+ if (array_key_exists($name, $map)) {
+ $tag_class = $map[$name];
+ return new $tag_class($attributes);
+ } elseif ($name == 'select') {
+ return $this->_createSelectionTag($attributes);
+ } elseif ($name == 'input') {
+ return $this->_createInputTag($attributes);
+ }
+ return new SimpleTag($name, $attributes);
+ }
+
+ /**
+ * Factory for selection fields.
+ * @param hash $attributes Element attributes.
+ * @return SimpleTag Tag object.
+ * @access protected
+ */
+ function _createSelectionTag($attributes) {
+ if (isset($attributes['multiple'])) {
+ return new MultipleSelectionTag($attributes);
+ }
+ return new SimpleSelectionTag($attributes);
+ }
+
+ /**
+ * Factory for input tags.
+ * @param hash $attributes Element attributes.
+ * @return SimpleTag Tag object.
+ * @access protected
+ */
+ function _createInputTag($attributes) {
+ if (! isset($attributes['type'])) {
+ return new SimpleTextTag($attributes);
+ }
+ $type = strtolower(trim($attributes['type']));
+ $map = array(
+ 'submit' => 'SimpleSubmitTag',
+ 'image' => 'SimpleImageSubmitTag',
+ 'checkbox' => 'SimpleCheckboxTag',
+ 'radio' => 'SimpleRadioButtonTag',
+ 'text' => 'SimpleTextTag',
+ 'hidden' => 'SimpleTextTag',
+ 'password' => 'SimpleTextTag',
+ 'file' => 'SimpleUploadTag');
+ if (array_key_exists($type, $map)) {
+ $tag_class = $map[$type];
+ return new $tag_class($attributes);
+ }
+ return false;
+ }
+
+ /**
+ * Make the keys lower case for case insensitive look-ups.
+ * @param hash $map Hash to convert.
+ * @return hash Unchanged values, but keys lower case.
+ * @access private
+ */
+ function _keysToLowerCase($map) {
+ $lower = array();
+ foreach ($map as $key => $value) {
+ $lower[strtolower($key)] = $value;
+ }
+ return $lower;
+ }
+}
+
+/**
+ * SAX event handler. Maintains a list of
+ * open tags and dispatches them as they close.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimplePageBuilder extends SimpleSaxListener {
+ var $_tags;
+ var $_page;
+ var $_private_content_tag;
+
+ /**
+ * Sets the builder up empty.
+ * @access public
+ */
+ function SimplePageBuilder() {
+ $this->SimpleSaxListener();
+ }
+
+ /**
+ * Frees up any references so as to allow the PHP garbage
+ * collection from unset() to work.
+ * @access public
+ */
+ function free() {
+ unset($this->_tags);
+ unset($this->_page);
+ unset($this->_private_content_tags);
+ }
+
+ /**
+ * Reads the raw content and send events
+ * into the page to be built.
+ * @param $response SimpleHttpResponse Fetched response.
+ * @return SimplePage Newly parsed page.
+ * @access public
+ */
+ function &parse($response) {
+ $this->_tags = array();
+ $this->_page = &$this->_createPage($response);
+ $parser = &$this->_createParser($this);
+ $parser->parse($response->getContent());
+ $this->_page->acceptPageEnd();
+ return $this->_page;
+ }
+
+ /**
+ * Creates an empty page.
+ * @return SimplePage New unparsed page.
+ * @access protected
+ */
+ function &_createPage($response) {
+ $page = &new SimplePage($response);
+ return $page;
+ }
+
+ /**
+ * Creates the parser used with the builder.
+ * @param $listener SimpleSaxListener Target of parser.
+ * @return SimpleSaxParser Parser to generate
+ * events for the builder.
+ * @access protected
+ */
+ function &_createParser(&$listener) {
+ $parser = &new SimpleHtmlSaxParser($listener);
+ return $parser;
+ }
+
+ /**
+ * Start of element event. Opens a new tag.
+ * @param string $name Element name.
+ * @param hash $attributes Attributes without content
+ * are marked as true.
+ * @return boolean False on parse error.
+ * @access public
+ */
+ function startElement($name, $attributes) {
+ $factory = &new SimpleTagBuilder();
+ $tag = $factory->createTag($name, $attributes);
+ if (! $tag) {
+ return true;
+ }
+ if ($tag->getTagName() == 'label') {
+ $this->_page->acceptLabelStart($tag);
+ $this->_openTag($tag);
+ return true;
+ }
+ if ($tag->getTagName() == 'form') {
+ $this->_page->acceptFormStart($tag);
+ return true;
+ }
+ if ($tag->getTagName() == 'frameset') {
+ $this->_page->acceptFramesetStart($tag);
+ return true;
+ }
+ if ($tag->getTagName() == 'frame') {
+ $this->_page->acceptFrame($tag);
+ return true;
+ }
+ if ($tag->isPrivateContent() && ! isset($this->_private_content_tag)) {
+ $this->_private_content_tag = &$tag;
+ }
+ if ($tag->expectEndTag()) {
+ $this->_openTag($tag);
+ return true;
+ }
+ $this->_page->acceptTag($tag);
+ return true;
+ }
+
+ /**
+ * End of element event.
+ * @param string $name Element name.
+ * @return boolean False on parse error.
+ * @access public
+ */
+ function endElement($name) {
+ if ($name == 'label') {
+ $this->_page->acceptLabelEnd();
+ return true;
+ }
+ if ($name == 'form') {
+ $this->_page->acceptFormEnd();
+ return true;
+ }
+ if ($name == 'frameset') {
+ $this->_page->acceptFramesetEnd();
+ return true;
+ }
+ if ($this->_hasNamedTagOnOpenTagStack($name)) {
+ $tag = array_pop($this->_tags[$name]);
+ if ($tag->isPrivateContent() && $this->_private_content_tag->getTagName() == $name) {
+ unset($this->_private_content_tag);
+ }
+ $this->_addContentTagToOpenTags($tag);
+ $this->_page->acceptTag($tag);
+ return true;
+ }
+ return true;
+ }
+
+ /**
+ * Test to see if there are any open tags awaiting
+ * closure that match the tag name.
+ * @param string $name Element name.
+ * @return boolean True if any are still open.
+ * @access private
+ */
+ function _hasNamedTagOnOpenTagStack($name) {
+ return isset($this->_tags[$name]) && (count($this->_tags[$name]) > 0);
+ }
+
+ /**
+ * Unparsed, but relevant data. The data is added
+ * to every open tag.
+ * @param string $text May include unparsed tags.
+ * @return boolean False on parse error.
+ * @access public
+ */
+ function addContent($text) {
+ if (isset($this->_private_content_tag)) {
+ $this->_private_content_tag->addContent($text);
+ } else {
+ $this->_addContentToAllOpenTags($text);
+ }
+ return true;
+ }
+
+ /**
+ * Any content fills all currently open tags unless it
+ * is part of an option tag.
+ * @param string $text May include unparsed tags.
+ * @access private
+ */
+ function _addContentToAllOpenTags($text) {
+ foreach (array_keys($this->_tags) as $name) {
+ for ($i = 0, $count = count($this->_tags[$name]); $i < $count; $i++) {
+ $this->_tags[$name][$i]->addContent($text);
+ }
+ }
+ }
+
+ /**
+ * Parsed data in tag form. The parsed tag is added
+ * to every open tag. Used for adding options to select
+ * fields only.
+ * @param SimpleTag $tag Option tags only.
+ * @access private
+ */
+ function _addContentTagToOpenTags(&$tag) {
+ if ($tag->getTagName() != 'option') {
+ return;
+ }
+ foreach (array_keys($this->_tags) as $name) {
+ for ($i = 0, $count = count($this->_tags[$name]); $i < $count; $i++) {
+ $this->_tags[$name][$i]->addTag($tag);
+ }
+ }
+ }
+
+ /**
+ * Opens a tag for receiving content. Multiple tags
+ * will be receiving input at the same time.
+ * @param SimpleTag $tag New content tag.
+ * @access private
+ */
+ function _openTag(&$tag) {
+ $name = $tag->getTagName();
+ if (! in_array($name, array_keys($this->_tags))) {
+ $this->_tags[$name] = array();
+ }
+ $this->_tags[$name][] = &$tag;
+ }
+}
+
+/**
+ * A wrapper for a web page.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimplePage {
+ var $_links;
+ var $_title;
+ var $_last_widget;
+ var $_label;
+ var $_left_over_labels;
+ var $_open_forms;
+ var $_complete_forms;
+ var $_frameset;
+ var $_frames;
+ var $_frameset_nesting_level;
+ var $_transport_error;
+ var $_raw;
+ var $_text;
+ var $_sent;
+ var $_headers;
+ var $_method;
+ var $_url;
+ var $_base = false;
+ var $_request_data;
+
+ /**
+ * Parses a page ready to access it's contents.
+ * @param SimpleHttpResponse $response Result of HTTP fetch.
+ * @access public
+ */
+ function SimplePage($response = false) {
+ $this->_links = array();
+ $this->_title = false;
+ $this->_left_over_labels = array();
+ $this->_open_forms = array();
+ $this->_complete_forms = array();
+ $this->_frameset = false;
+ $this->_frames = array();
+ $this->_frameset_nesting_level = 0;
+ $this->_text = false;
+ if ($response) {
+ $this->_extractResponse($response);
+ } else {
+ $this->_noResponse();
+ }
+ }
+
+ /**
+ * Extracts all of the response information.
+ * @param SimpleHttpResponse $response Response being parsed.
+ * @access private
+ */
+ function _extractResponse($response) {
+ $this->_transport_error = $response->getError();
+ $this->_raw = $response->getContent();
+ $this->_sent = $response->getSent();
+ $this->_headers = $response->getHeaders();
+ $this->_method = $response->getMethod();
+ $this->_url = $response->getUrl();
+ $this->_request_data = $response->getRequestData();
+ }
+
+ /**
+ * Sets up a missing response.
+ * @access private
+ */
+ function _noResponse() {
+ $this->_transport_error = 'No page fetched yet';
+ $this->_raw = false;
+ $this->_sent = false;
+ $this->_headers = false;
+ $this->_method = 'GET';
+ $this->_url = false;
+ $this->_request_data = false;
+ }
+
+ /**
+ * Original request as bytes sent down the wire.
+ * @return mixed Sent content.
+ * @access public
+ */
+ function getRequest() {
+ return $this->_sent;
+ }
+
+ /**
+ * Accessor for raw text of page.
+ * @return string Raw unparsed content.
+ * @access public
+ */
+ function getRaw() {
+ return $this->_raw;
+ }
+
+ /**
+ * Accessor for plain text of page as a text browser
+ * would see it.
+ * @return string Plain text of page.
+ * @access public
+ */
+ function getText() {
+ if (! $this->_text) {
+ $this->_text = SimpleHtmlSaxParser::normalise($this->_raw);
+ }
+ return $this->_text;
+ }
+
+ /**
+ * Accessor for raw headers of page.
+ * @return string Header block as text.
+ * @access public
+ */
+ function getHeaders() {
+ if ($this->_headers) {
+ return $this->_headers->getRaw();
+ }
+ return false;
+ }
+
+ /**
+ * Original request method.
+ * @return string GET, POST or HEAD.
+ * @access public
+ */
+ function getMethod() {
+ return $this->_method;
+ }
+
+ /**
+ * Original resource name.
+ * @return SimpleUrl Current url.
+ * @access public
+ */
+ function getUrl() {
+ return $this->_url;
+ }
+
+ /**
+ * Base URL if set via BASE tag page url otherwise
+ * @return SimpleUrl Base url.
+ * @access public
+ */
+ function getBaseUrl() {
+ return $this->_base;
+ }
+
+ /**
+ * Original request data.
+ * @return mixed Sent content.
+ * @access public
+ */
+ function getRequestData() {
+ return $this->_request_data;
+ }
+
+ /**
+ * Accessor for last error.
+ * @return string Error from last response.
+ * @access public
+ */
+ function getTransportError() {
+ return $this->_transport_error;
+ }
+
+ /**
+ * Accessor for current MIME type.
+ * @return string MIME type as string; e.g. 'text/html'
+ * @access public
+ */
+ function getMimeType() {
+ if ($this->_headers) {
+ return $this->_headers->getMimeType();
+ }
+ return false;
+ }
+
+ /**
+ * Accessor for HTTP response code.
+ * @return integer HTTP response code received.
+ * @access public
+ */
+ function getResponseCode() {
+ if ($this->_headers) {
+ return $this->_headers->getResponseCode();
+ }
+ return false;
+ }
+
+ /**
+ * Accessor for last Authentication type. Only valid
+ * straight after a challenge (401).
+ * @return string Description of challenge type.
+ * @access public
+ */
+ function getAuthentication() {
+ if ($this->_headers) {
+ return $this->_headers->getAuthentication();
+ }
+ return false;
+ }
+
+ /**
+ * Accessor for last Authentication realm. Only valid
+ * straight after a challenge (401).
+ * @return string Name of security realm.
+ * @access public
+ */
+ function getRealm() {
+ if ($this->_headers) {
+ return $this->_headers->getRealm();
+ }
+ return false;
+ }
+
+ /**
+ * Accessor for current frame focus. Will be
+ * false as no frames.
+ * @return array Always empty.
+ * @access public
+ */
+ function getFrameFocus() {
+ return array();
+ }
+
+ /**
+ * Sets the focus by index. The integer index starts from 1.
+ * @param integer $choice Chosen frame.
+ * @return boolean Always false.
+ * @access public
+ */
+ function setFrameFocusByIndex($choice) {
+ return false;
+ }
+
+ /**
+ * Sets the focus by name. Always fails for a leaf page.
+ * @param string $name Chosen frame.
+ * @return boolean False as no frames.
+ * @access public
+ */
+ function setFrameFocus($name) {
+ return false;
+ }
+
+ /**
+ * Clears the frame focus. Does nothing for a leaf page.
+ * @access public
+ */
+ function clearFrameFocus() {
+ }
+
+ /**
+ * Adds a tag to the page.
+ * @param SimpleTag $tag Tag to accept.
+ * @access public
+ */
+ function acceptTag(&$tag) {
+ if ($tag->getTagName() == "a") {
+ $this->_addLink($tag);
+ } elseif ($tag->getTagName() == "base") {
+ $this->_setBase($tag);
+ } elseif ($tag->getTagName() == "title") {
+ $this->_setTitle($tag);
+ } elseif ($this->_isFormElement($tag->getTagName())) {
+ for ($i = 0; $i < count($this->_open_forms); $i++) {
+ $this->_open_forms[$i]->addWidget($tag);
+ }
+ $this->_last_widget = &$tag;
+ }
+ }
+
+ /**
+ * Opens a label for a described widget.
+ * @param SimpleFormTag $tag Tag to accept.
+ * @access public
+ */
+ function acceptLabelStart(&$tag) {
+ $this->_label = &$tag;
+ unset($this->_last_widget);
+ }
+
+ /**
+ * Closes the most recently opened label.
+ * @access public
+ */
+ function acceptLabelEnd() {
+ if (isset($this->_label)) {
+ if (isset($this->_last_widget)) {
+ $this->_last_widget->setLabel($this->_label->getText());
+ unset($this->_last_widget);
+ } else {
+ $this->_left_over_labels[] = SimpleTestCompatibility::copy($this->_label);
+ }
+ unset($this->_label);
+ }
+ }
+
+ /**
+ * Tests to see if a tag is a possible form
+ * element.
+ * @param string $name HTML element name.
+ * @return boolean True if form element.
+ * @access private
+ */
+ function _isFormElement($name) {
+ return in_array($name, array('input', 'button', 'textarea', 'select'));
+ }
+
+ /**
+ * Opens a form. New widgets go here.
+ * @param SimpleFormTag $tag Tag to accept.
+ * @access public
+ */
+ function acceptFormStart(&$tag) {
+ $this->_open_forms[] = &new SimpleForm($tag, $this);
+ }
+
+ /**
+ * Closes the most recently opened form.
+ * @access public
+ */
+ function acceptFormEnd() {
+ if (count($this->_open_forms)) {
+ $this->_complete_forms[] = array_pop($this->_open_forms);
+ }
+ }
+
+ /**
+ * Opens a frameset. A frameset may contain nested
+ * frameset tags.
+ * @param SimpleFramesetTag $tag Tag to accept.
+ * @access public
+ */
+ function acceptFramesetStart(&$tag) {
+ if (! $this->_isLoadingFrames()) {
+ $this->_frameset = &$tag;
+ }
+ $this->_frameset_nesting_level++;
+ }
+
+ /**
+ * Closes the most recently opened frameset.
+ * @access public
+ */
+ function acceptFramesetEnd() {
+ if ($this->_isLoadingFrames()) {
+ $this->_frameset_nesting_level--;
+ }
+ }
+
+ /**
+ * Takes a single frame tag and stashes it in
+ * the current frame set.
+ * @param SimpleFrameTag $tag Tag to accept.
+ * @access public
+ */
+ function acceptFrame(&$tag) {
+ if ($this->_isLoadingFrames()) {
+ if ($tag->getAttribute('src')) {
+ $this->_frames[] = &$tag;
+ }
+ }
+ }
+
+ /**
+ * Test to see if in the middle of reading
+ * a frameset.
+ * @return boolean True if inframeset.
+ * @access private
+ */
+ function _isLoadingFrames() {
+ if (! $this->_frameset) {
+ return false;
+ }
+ return ($this->_frameset_nesting_level > 0);
+ }
+
+ /**
+ * Test to see if link is an absolute one.
+ * @param string $url Url to test.
+ * @return boolean True if absolute.
+ * @access protected
+ */
+ function _linkIsAbsolute($url) {
+ $parsed = new SimpleUrl($url);
+ return (boolean)($parsed->getScheme() && $parsed->getHost());
+ }
+
+ /**
+ * Adds a link to the page.
+ * @param SimpleAnchorTag $tag Link to accept.
+ * @access protected
+ */
+ function _addLink($tag) {
+ $this->_links[] = $tag;
+ }
+
+ /**
+ * Marker for end of complete page. Any work in
+ * progress can now be closed.
+ * @access public
+ */
+ function acceptPageEnd() {
+ while (count($this->_open_forms)) {
+ $this->_complete_forms[] = array_pop($this->_open_forms);
+ }
+ foreach ($this->_left_over_labels as $label) {
+ for ($i = 0, $count = count($this->_complete_forms); $i < $count; $i++) {
+ $this->_complete_forms[$i]->attachLabelBySelector(
+ new SimpleById($label->getFor()),
+ $label->getText());
+ }
+ }
+ }
+
+ /**
+ * Test for the presence of a frameset.
+ * @return boolean True if frameset.
+ * @access public
+ */
+ function hasFrames() {
+ return (boolean)$this->_frameset;
+ }
+
+ /**
+ * Accessor for frame name and source URL for every frame that
+ * will need to be loaded. Immediate children only.
+ * @return boolean/array False if no frameset or
+ * otherwise a hash of frame URLs.
+ * The key is either a numerical
+ * base one index or the name attribute.
+ * @access public
+ */
+ function getFrameset() {
+ if (! $this->_frameset) {
+ return false;
+ }
+ $urls = array();
+ for ($i = 0; $i < count($this->_frames); $i++) {
+ $name = $this->_frames[$i]->getAttribute('name');
+ $url = new SimpleUrl($this->_frames[$i]->getAttribute('src'));
+ $urls[$name ? $name : $i + 1] = $this->expandUrl($url);
+ }
+ return $urls;
+ }
+
+ /**
+ * Fetches a list of loaded frames.
+ * @return array/string Just the URL for a single page.
+ * @access public
+ */
+ function getFrames() {
+ $url = $this->expandUrl($this->getUrl());
+ return $url->asString();
+ }
+
+ /**
+ * Accessor for a list of all links.
+ * @return array List of urls with scheme of
+ * http or https and hostname.
+ * @access public
+ */
+ function getUrls() {
+ $all = array();
+ foreach ($this->_links as $link) {
+ $url = $this->_getUrlFromLink($link);
+ $all[] = $url->asString();
+ }
+ return $all;
+ }
+
+ /**
+ * Accessor for URLs by the link label. Label will match
+ * regardess of whitespace issues and case.
+ * @param string $label Text of link.
+ * @return array List of links with that label.
+ * @access public
+ */
+ function getUrlsByLabel($label) {
+ $matches = array();
+ foreach ($this->_links as $link) {
+ if ($link->getText() == $label) {
+ $matches[] = $this->_getUrlFromLink($link);
+ }
+ }
+ return $matches;
+ }
+
+ /**
+ * Accessor for a URL by the id attribute.
+ * @param string $id Id attribute of link.
+ * @return SimpleUrl URL with that id of false if none.
+ * @access public
+ */
+ function getUrlById($id) {
+ foreach ($this->_links as $link) {
+ if ($link->getAttribute('id') === (string)$id) {
+ return $this->_getUrlFromLink($link);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Converts a link tag into a target URL.
+ * @param SimpleAnchor $link Parsed link.
+ * @return SimpleUrl URL with frame target if any.
+ * @access private
+ */
+ function _getUrlFromLink($link) {
+ $url = $this->expandUrl($link->getHref());
+ if ($link->getAttribute('target')) {
+ $url->setTarget($link->getAttribute('target'));
+ }
+ return $url;
+ }
+
+ /**
+ * Expands expandomatic URLs into fully qualified
+ * URLs.
+ * @param SimpleUrl $url Relative URL.
+ * @return SimpleUrl Absolute URL.
+ * @access public
+ */
+ function expandUrl($url) {
+ if (! is_object($url)) {
+ $url = new SimpleUrl($url);
+ }
+ $location = $this->getBaseUrl() ? $this->getBaseUrl() : new SimpleUrl();
+ return $url->makeAbsolute($location->makeAbsolute($this->getUrl()));
+ }
+
+ /**
+ * Sets the base url for the page.
+ * @param SimpleTag $tag Base URL for page.
+ * @access protected
+ */
+ function _setBase(&$tag) {
+ $url = $tag->getAttribute('href');
+ $this->_base = new SimpleUrl($url);
+ }
+
+ /**
+ * Sets the title tag contents.
+ * @param SimpleTitleTag $tag Title of page.
+ * @access protected
+ */
+ function _setTitle(&$tag) {
+ $this->_title = &$tag;
+ }
+
+ /**
+ * Accessor for parsed title.
+ * @return string Title or false if no title is present.
+ * @access public
+ */
+ function getTitle() {
+ if ($this->_title) {
+ return $this->_title->getText();
+ }
+ return false;
+ }
+
+ /**
+ * Finds a held form by button label. Will only
+ * search correctly built forms.
+ * @param SimpleSelector $selector Button finder.
+ * @return SimpleForm Form object containing
+ * the button.
+ * @access public
+ */
+ function &getFormBySubmit($selector) {
+ for ($i = 0; $i < count($this->_complete_forms); $i++) {
+ if ($this->_complete_forms[$i]->hasSubmit($selector)) {
+ return $this->_complete_forms[$i];
+ }
+ }
+ $null = null;
+ return $null;
+ }
+
+ /**
+ * Finds a held form by image using a selector.
+ * Will only search correctly built forms.
+ * @param SimpleSelector $selector Image finder.
+ * @return SimpleForm Form object containing
+ * the image.
+ * @access public
+ */
+ function &getFormByImage($selector) {
+ for ($i = 0; $i < count($this->_complete_forms); $i++) {
+ if ($this->_complete_forms[$i]->hasImage($selector)) {
+ return $this->_complete_forms[$i];
+ }
+ }
+ $null = null;
+ return $null;
+ }
+
+ /**
+ * Finds a held form by the form ID. A way of
+ * identifying a specific form when we have control
+ * of the HTML code.
+ * @param string $id Form label.
+ * @return SimpleForm Form object containing the matching ID.
+ * @access public
+ */
+ function &getFormById($id) {
+ for ($i = 0; $i < count($this->_complete_forms); $i++) {
+ if ($this->_complete_forms[$i]->getId() == $id) {
+ return $this->_complete_forms[$i];
+ }
+ }
+ $null = null;
+ return $null;
+ }
+
+ /**
+ * Sets a field on each form in which the field is
+ * available.
+ * @param SimpleSelector $selector Field finder.
+ * @param string $value Value to set field to.
+ * @return boolean True if value is valid.
+ * @access public
+ */
+ function setField($selector, $value, $position=false) {
+ $is_set = false;
+ for ($i = 0; $i < count($this->_complete_forms); $i++) {
+ if ($this->_complete_forms[$i]->setField($selector, $value, $position)) {
+ $is_set = true;
+ }
+ }
+ return $is_set;
+ }
+
+ /**
+ * Accessor for a form element value within a page.
+ * @param SimpleSelector $selector Field finder.
+ * @return string/boolean A string if the field is
+ * present, false if unchecked
+ * and null if missing.
+ * @access public
+ */
+ function getField($selector) {
+ for ($i = 0; $i < count($this->_complete_forms); $i++) {
+ $value = $this->_complete_forms[$i]->getValue($selector);
+ if (isset($value)) {
+ return $value;
+ }
+ }
+ return null;
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/parser.php b/vendors/simpletest/parser.php
new file mode 100644
index 000000000..3f3b37b83
--- /dev/null
+++ b/vendors/simpletest/parser.php
@@ -0,0 +1,764 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage MockObjects
+ * @version $Id: parser.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * Lexer mode stack constants
+ */
+foreach (array('LEXER_ENTER', 'LEXER_MATCHED',
+ 'LEXER_UNMATCHED', 'LEXER_EXIT',
+ 'LEXER_SPECIAL') as $i => $constant) {
+ if (! defined($constant)) {
+ define($constant, $i + 1);
+ }
+}
+/**#@-*/
+
+/**
+ * Compounded regular expression. Any of
+ * the contained patterns could match and
+ * when one does, it's label is returned.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class ParallelRegex {
+ var $_patterns;
+ var $_labels;
+ var $_regex;
+ var $_case;
+
+ /**
+ * Constructor. Starts with no patterns.
+ * @param boolean $case True for case sensitive, false
+ * for insensitive.
+ * @access public
+ */
+ function ParallelRegex($case) {
+ $this->_case = $case;
+ $this->_patterns = array();
+ $this->_labels = array();
+ $this->_regex = null;
+ }
+
+ /**
+ * Adds a pattern with an optional label.
+ * @param string $pattern Perl style regex, but ( and )
+ * lose the usual meaning.
+ * @param string $label Label of regex to be returned
+ * on a match.
+ * @access public
+ */
+ function addPattern($pattern, $label = true) {
+ $count = count($this->_patterns);
+ $this->_patterns[$count] = $pattern;
+ $this->_labels[$count] = $label;
+ $this->_regex = null;
+ }
+
+ /**
+ * Attempts to match all patterns at once against
+ * a string.
+ * @param string $subject String to match against.
+ * @param string $match First matched portion of
+ * subject.
+ * @return boolean True on success.
+ * @access public
+ */
+ function match($subject, &$match) {
+ if (count($this->_patterns) == 0) {
+ return false;
+ }
+ if (! preg_match($this->_getCompoundedRegex(), $subject, $matches)) {
+ $match = '';
+ return false;
+ }
+ $match = $matches[0];
+ for ($i = 1; $i < count($matches); $i++) {
+ if ($matches[$i]) {
+ return $this->_labels[$i - 1];
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Compounds the patterns into a single
+ * regular expression separated with the
+ * "or" operator. Caches the regex.
+ * Will automatically escape (, ) and / tokens.
+ * @param array $patterns List of patterns in order.
+ * @access private
+ */
+ function _getCompoundedRegex() {
+ if ($this->_regex == null) {
+ for ($i = 0, $count = count($this->_patterns); $i < $count; $i++) {
+ $this->_patterns[$i] = '(' . str_replace(
+ array('/', '(', ')'),
+ array('\/', '\(', '\)'),
+ $this->_patterns[$i]) . ')';
+ }
+ $this->_regex = "/" . implode("|", $this->_patterns) . "/" . $this->_getPerlMatchingFlags();
+ }
+ return $this->_regex;
+ }
+
+ /**
+ * Accessor for perl regex mode flags to use.
+ * @return string Perl regex flags.
+ * @access private
+ */
+ function _getPerlMatchingFlags() {
+ return ($this->_case ? "msS" : "msSi");
+ }
+}
+
+/**
+ * States for a stack machine.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleStateStack {
+ var $_stack;
+
+ /**
+ * Constructor. Starts in named state.
+ * @param string $start Starting state name.
+ * @access public
+ */
+ function SimpleStateStack($start) {
+ $this->_stack = array($start);
+ }
+
+ /**
+ * Accessor for current state.
+ * @return string State.
+ * @access public
+ */
+ function getCurrent() {
+ return $this->_stack[count($this->_stack) - 1];
+ }
+
+ /**
+ * Adds a state to the stack and sets it
+ * to be the current state.
+ * @param string $state New state.
+ * @access public
+ */
+ function enter($state) {
+ array_push($this->_stack, $state);
+ }
+
+ /**
+ * Leaves the current state and reverts
+ * to the previous one.
+ * @return boolean False if we drop off
+ * the bottom of the list.
+ * @access public
+ */
+ function leave() {
+ if (count($this->_stack) == 1) {
+ return false;
+ }
+ array_pop($this->_stack);
+ return true;
+ }
+}
+
+/**
+ * Accepts text and breaks it into tokens.
+ * Some optimisation to make the sure the
+ * content is only scanned by the PHP regex
+ * parser once. Lexer modes must not start
+ * with leading underscores.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleLexer {
+ var $_regexes;
+ var $_parser;
+ var $_mode;
+ var $_mode_handlers;
+ var $_case;
+
+ /**
+ * Sets up the lexer in case insensitive matching
+ * by default.
+ * @param SimpleSaxParser $parser Handling strategy by
+ * reference.
+ * @param string $start Starting handler.
+ * @param boolean $case True for case sensitive.
+ * @access public
+ */
+ function SimpleLexer(&$parser, $start = "accept", $case = false) {
+ $this->_case = $case;
+ $this->_regexes = array();
+ $this->_parser = &$parser;
+ $this->_mode = &new SimpleStateStack($start);
+ $this->_mode_handlers = array($start => $start);
+ }
+
+ /**
+ * Adds a token search pattern for a particular
+ * parsing mode. The pattern does not change the
+ * current mode.
+ * @param string $pattern Perl style regex, but ( and )
+ * lose the usual meaning.
+ * @param string $mode Should only apply this
+ * pattern when dealing with
+ * this type of input.
+ * @access public
+ */
+ function addPattern($pattern, $mode = "accept") {
+ if (! isset($this->_regexes[$mode])) {
+ $this->_regexes[$mode] = new ParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern);
+ if (! isset($this->_mode_handlers[$mode])) {
+ $this->_mode_handlers[$mode] = $mode;
+ }
+ }
+
+ /**
+ * Adds a pattern that will enter a new parsing
+ * mode. Useful for entering parenthesis, strings,
+ * tags, etc.
+ * @param string $pattern Perl style regex, but ( and )
+ * lose the usual meaning.
+ * @param string $mode Should only apply this
+ * pattern when dealing with
+ * this type of input.
+ * @param string $new_mode Change parsing to this new
+ * nested mode.
+ * @access public
+ */
+ function addEntryPattern($pattern, $mode, $new_mode) {
+ if (! isset($this->_regexes[$mode])) {
+ $this->_regexes[$mode] = new ParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern, $new_mode);
+ if (! isset($this->_mode_handlers[$new_mode])) {
+ $this->_mode_handlers[$new_mode] = $new_mode;
+ }
+ }
+
+ /**
+ * Adds a pattern that will exit the current mode
+ * and re-enter the previous one.
+ * @param string $pattern Perl style regex, but ( and )
+ * lose the usual meaning.
+ * @param string $mode Mode to leave.
+ * @access public
+ */
+ function addExitPattern($pattern, $mode) {
+ if (! isset($this->_regexes[$mode])) {
+ $this->_regexes[$mode] = new ParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern, "__exit");
+ if (! isset($this->_mode_handlers[$mode])) {
+ $this->_mode_handlers[$mode] = $mode;
+ }
+ }
+
+ /**
+ * Adds a pattern that has a special mode. Acts as an entry
+ * and exit pattern in one go, effectively calling a special
+ * parser handler for this token only.
+ * @param string $pattern Perl style regex, but ( and )
+ * lose the usual meaning.
+ * @param string $mode Should only apply this
+ * pattern when dealing with
+ * this type of input.
+ * @param string $special Use this mode for this one token.
+ * @access public
+ */
+ function addSpecialPattern($pattern, $mode, $special) {
+ if (! isset($this->_regexes[$mode])) {
+ $this->_regexes[$mode] = new ParallelRegex($this->_case);
+ }
+ $this->_regexes[$mode]->addPattern($pattern, "_$special");
+ if (! isset($this->_mode_handlers[$special])) {
+ $this->_mode_handlers[$special] = $special;
+ }
+ }
+
+ /**
+ * Adds a mapping from a mode to another handler.
+ * @param string $mode Mode to be remapped.
+ * @param string $handler New target handler.
+ * @access public
+ */
+ function mapHandler($mode, $handler) {
+ $this->_mode_handlers[$mode] = $handler;
+ }
+
+ /**
+ * Splits the page text into tokens. Will fail
+ * if the handlers report an error or if no
+ * content is consumed. If successful then each
+ * unparsed and parsed token invokes a call to the
+ * held listener.
+ * @param string $raw Raw HTML text.
+ * @return boolean True on success, else false.
+ * @access public
+ */
+ function parse($raw) {
+ if (! isset($this->_parser)) {
+ return false;
+ }
+ $length = strlen($raw);
+ while (is_array($parsed = $this->_reduce($raw))) {
+ list($raw, $unmatched, $matched, $mode) = $parsed;
+ if (! $this->_dispatchTokens($unmatched, $matched, $mode)) {
+ return false;
+ }
+ if ($raw === '') {
+ return true;
+ }
+ if (strlen($raw) == $length) {
+ return false;
+ }
+ $length = strlen($raw);
+ }
+ if (! $parsed) {
+ return false;
+ }
+ return $this->_invokeParser($raw, LEXER_UNMATCHED);
+ }
+
+ /**
+ * Sends the matched token and any leading unmatched
+ * text to the parser changing the lexer to a new
+ * mode if one is listed.
+ * @param string $unmatched Unmatched leading portion.
+ * @param string $matched Actual token match.
+ * @param string $mode Mode after match. A boolean
+ * false mode causes no change.
+ * @return boolean False if there was any error
+ * from the parser.
+ * @access private
+ */
+ function _dispatchTokens($unmatched, $matched, $mode = false) {
+ if (! $this->_invokeParser($unmatched, LEXER_UNMATCHED)) {
+ return false;
+ }
+ if (is_bool($mode)) {
+ return $this->_invokeParser($matched, LEXER_MATCHED);
+ }
+ if ($this->_isModeEnd($mode)) {
+ if (! $this->_invokeParser($matched, LEXER_EXIT)) {
+ return false;
+ }
+ return $this->_mode->leave();
+ }
+ if ($this->_isSpecialMode($mode)) {
+ $this->_mode->enter($this->_decodeSpecial($mode));
+ if (! $this->_invokeParser($matched, LEXER_SPECIAL)) {
+ return false;
+ }
+ return $this->_mode->leave();
+ }
+ $this->_mode->enter($mode);
+ return $this->_invokeParser($matched, LEXER_ENTER);
+ }
+
+ /**
+ * Tests to see if the new mode is actually to leave
+ * the current mode and pop an item from the matching
+ * mode stack.
+ * @param string $mode Mode to test.
+ * @return boolean True if this is the exit mode.
+ * @access private
+ */
+ function _isModeEnd($mode) {
+ return ($mode === "__exit");
+ }
+
+ /**
+ * Test to see if the mode is one where this mode
+ * is entered for this token only and automatically
+ * leaves immediately afterwoods.
+ * @param string $mode Mode to test.
+ * @return boolean True if this is the exit mode.
+ * @access private
+ */
+ function _isSpecialMode($mode) {
+ return (strncmp($mode, "_", 1) == 0);
+ }
+
+ /**
+ * Strips the magic underscore marking single token
+ * modes.
+ * @param string $mode Mode to decode.
+ * @return string Underlying mode name.
+ * @access private
+ */
+ function _decodeSpecial($mode) {
+ return substr($mode, 1);
+ }
+
+ /**
+ * Calls the parser method named after the current
+ * mode. Empty content will be ignored. The lexer
+ * has a parser handler for each mode in the lexer.
+ * @param string $content Text parsed.
+ * @param boolean $is_match Token is recognised rather
+ * than unparsed data.
+ * @access private
+ */
+ function _invokeParser($content, $is_match) {
+ if (($content === '') || ($content === false)) {
+ return true;
+ }
+ $handler = $this->_mode_handlers[$this->_mode->getCurrent()];
+ return $this->_parser->$handler($content, $is_match);
+ }
+
+ /**
+ * Tries to match a chunk of text and if successful
+ * removes the recognised chunk and any leading
+ * unparsed data. Empty strings will not be matched.
+ * @param string $raw The subject to parse. This is the
+ * content that will be eaten.
+ * @return array/boolean Three item list of unparsed
+ * content followed by the
+ * recognised token and finally the
+ * action the parser is to take.
+ * True if no match, false if there
+ * is a parsing error.
+ * @access private
+ */
+ function _reduce($raw) {
+ if ($action = $this->_regexes[$this->_mode->getCurrent()]->match($raw, $match)) {
+ $unparsed_character_count = strpos($raw, $match);
+ $unparsed = substr($raw, 0, $unparsed_character_count);
+ $raw = substr($raw, $unparsed_character_count + strlen($match));
+ return array($raw, $unparsed, $match, $action);
+ }
+ return true;
+ }
+}
+
+/**
+ * Breaks HTML into SAX events.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleHtmlLexer extends SimpleLexer {
+
+ /**
+ * Sets up the lexer with case insensitive matching
+ * and adds the HTML handlers.
+ * @param SimpleSaxParser $parser Handling strategy by
+ * reference.
+ * @access public
+ */
+ function SimpleHtmlLexer(&$parser) {
+ $this->SimpleLexer($parser, 'text');
+ $this->mapHandler('text', 'acceptTextToken');
+ $this->_addSkipping();
+ foreach ($this->_getParsedTags() as $tag) {
+ $this->_addTag($tag);
+ }
+ $this->_addInTagTokens();
+ }
+
+ /**
+ * List of parsed tags. Others are ignored.
+ * @return array List of searched for tags.
+ * @access private
+ */
+ function _getParsedTags() {
+ return array('a', 'base', 'title', 'form', 'input', 'button', 'textarea', 'select',
+ 'option', 'frameset', 'frame', 'label');
+ }
+
+ /**
+ * The lexer has to skip certain sections such
+ * as server code, client code and styles.
+ * @access private
+ */
+ function _addSkipping() {
+ $this->mapHandler('css', 'ignore');
+ $this->addEntryPattern('<style', 'text', 'css');
+ $this->addExitPattern('</style>', 'css');
+ $this->mapHandler('js', 'ignore');
+ $this->addEntryPattern('<script', 'text', 'js');
+ $this->addExitPattern('</script>', 'js');
+ $this->mapHandler('comment', 'ignore');
+ $this->addEntryPattern('<!--', 'text', 'comment');
+ $this->addExitPattern('-->', 'comment');
+ }
+
+ /**
+ * Pattern matches to start and end a tag.
+ * @param string $tag Name of tag to scan for.
+ * @access private
+ */
+ function _addTag($tag) {
+ $this->addSpecialPattern("</$tag>", 'text', 'acceptEndToken');
+ $this->addEntryPattern("<$tag", 'text', 'tag');
+ }
+
+ /**
+ * Pattern matches to parse the inside of a tag
+ * including the attributes and their quoting.
+ * @access private
+ */
+ function _addInTagTokens() {
+ $this->mapHandler('tag', 'acceptStartToken');
+ $this->addSpecialPattern('\s+', 'tag', 'ignore');
+ $this->_addAttributeTokens();
+ $this->addExitPattern('/>', 'tag');
+ $this->addExitPattern('>', 'tag');
+ }
+
+ /**
+ * Matches attributes that are either single quoted,
+ * double quoted or unquoted.
+ * @access private
+ */
+ function _addAttributeTokens() {
+ $this->mapHandler('dq_attribute', 'acceptAttributeToken');
+ $this->addEntryPattern('=\s*"', 'tag', 'dq_attribute');
+ $this->addPattern("\\\\\"", 'dq_attribute');
+ $this->addExitPattern('"', 'dq_attribute');
+ $this->mapHandler('sq_attribute', 'acceptAttributeToken');
+ $this->addEntryPattern("=\s*'", 'tag', 'sq_attribute');
+ $this->addPattern("\\\\'", 'sq_attribute');
+ $this->addExitPattern("'", 'sq_attribute');
+ $this->mapHandler('uq_attribute', 'acceptAttributeToken');
+ $this->addSpecialPattern('=\s*[^>\s]*', 'tag', 'uq_attribute');
+ }
+}
+
+/**
+ * Converts HTML tokens into selected SAX events.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleHtmlSaxParser {
+ var $_lexer;
+ var $_listener;
+ var $_tag;
+ var $_attributes;
+ var $_current_attribute;
+
+ /**
+ * Sets the listener.
+ * @param SimpleSaxListener $listener SAX event handler.
+ * @access public
+ */
+ function SimpleHtmlSaxParser(&$listener) {
+ $this->_listener = &$listener;
+ $this->_lexer = &$this->createLexer($this);
+ $this->_tag = '';
+ $this->_attributes = array();
+ $this->_current_attribute = '';
+ }
+
+ /**
+ * Runs the content through the lexer which
+ * should call back to the acceptors.
+ * @param string $raw Page text to parse.
+ * @return boolean False if parse error.
+ * @access public
+ */
+ function parse($raw) {
+ return $this->_lexer->parse($raw);
+ }
+
+ /**
+ * Sets up the matching lexer. Starts in 'text' mode.
+ * @param SimpleSaxParser $parser Event generator, usually $self.
+ * @return SimpleLexer Lexer suitable for this parser.
+ * @access public
+ * @static
+ */
+ function &createLexer(&$parser) {
+ $lexer = &new SimpleHtmlLexer($parser);
+ return $lexer;
+ }
+
+ /**
+ * Accepts a token from the tag mode. If the
+ * starting element completes then the element
+ * is dispatched and the current attributes
+ * set back to empty. The element or attribute
+ * name is converted to lower case.
+ * @param string $token Incoming characters.
+ * @param integer $event Lexer event type.
+ * @return boolean False if parse error.
+ * @access public
+ */
+ function acceptStartToken($token, $event) {
+ if ($event == LEXER_ENTER) {
+ $this->_tag = strtolower(substr($token, 1));
+ return true;
+ }
+ if ($event == LEXER_EXIT) {
+ $success = $this->_listener->startElement(
+ $this->_tag,
+ $this->_attributes);
+ $this->_tag = '';
+ $this->_attributes = array();
+ return $success;
+ }
+ if ($token != '=') {
+ $this->_current_attribute = strtolower(SimpleHtmlSaxParser::decodeHtml($token));
+ $this->_attributes[$this->_current_attribute] = '';
+ }
+ return true;
+ }
+
+ /**
+ * Accepts a token from the end tag mode.
+ * The element name is converted to lower case.
+ * @param string $token Incoming characters.
+ * @param integer $event Lexer event type.
+ * @return boolean False if parse error.
+ * @access public
+ */
+ function acceptEndToken($token, $event) {
+ if (! preg_match('/<\/(.*)>/', $token, $matches)) {
+ return false;
+ }
+ return $this->_listener->endElement(strtolower($matches[1]));
+ }
+
+ /**
+ * Part of the tag data.
+ * @param string $token Incoming characters.
+ * @param integer $event Lexer event type.
+ * @return boolean False if parse error.
+ * @access public
+ */
+ function acceptAttributeToken($token, $event) {
+ if ($this->_current_attribute) {
+ if ($event == LEXER_UNMATCHED) {
+ $this->_attributes[$this->_current_attribute] .=
+ SimpleHtmlSaxParser::decodeHtml($token);
+ }
+ if ($event == LEXER_SPECIAL) {
+ $this->_attributes[$this->_current_attribute] .=
+ preg_replace('/^=\s*/' , '', SimpleHtmlSaxParser::decodeHtml($token));
+ }
+ }
+ return true;
+ }
+
+ /**
+ * A character entity.
+ * @param string $token Incoming characters.
+ * @param integer $event Lexer event type.
+ * @return boolean False if parse error.
+ * @access public
+ */
+ function acceptEntityToken($token, $event) {
+ }
+
+ /**
+ * Character data between tags regarded as
+ * important.
+ * @param string $token Incoming characters.
+ * @param integer $event Lexer event type.
+ * @return boolean False if parse error.
+ * @access public
+ */
+ function acceptTextToken($token, $event) {
+ return $this->_listener->addContent($token);
+ }
+
+ /**
+ * Incoming data to be ignored.
+ * @param string $token Incoming characters.
+ * @param integer $event Lexer event type.
+ * @return boolean False if parse error.
+ * @access public
+ */
+ function ignore($token, $event) {
+ return true;
+ }
+
+ /**
+ * Decodes any HTML entities.
+ * @param string $html Incoming HTML.
+ * @return string Outgoing plain text.
+ * @access public
+ * @static
+ */
+ function decodeHtml($html) {
+ return html_entity_decode($html, ENT_QUOTES);
+ }
+
+ /**
+ * Turns HTML into text browser visible text. Images
+ * are converted to their alt text and tags are supressed.
+ * Entities are converted to their visible representation.
+ * @param string $html HTML to convert.
+ * @return string Plain text.
+ * @access public
+ * @static
+ */
+ function normalise($html) {
+ $text = preg_replace('|<!--.*?-->|', '', $html);
+ $text = preg_replace('|<script[^>]*>.*?</script>|', '', $text);
+ $text = preg_replace('|<img[^>]*alt\s*=\s*"([^"]*)"[^>]*>|', ' \1 ', $text);
+ $text = preg_replace('|<img[^>]*alt\s*=\s*\'([^\']*)\'[^>]*>|', ' \1 ', $text);
+ $text = preg_replace('|<img[^>]*alt\s*=\s*([a-zA-Z_]+)[^>]*>|', ' \1 ', $text);
+ $text = preg_replace('|<[^>]*>|', '', $text);
+ $text = SimpleHtmlSaxParser::decodeHtml($text);
+ $text = preg_replace('|\s+|', ' ', $text);
+ return trim(trim($text), "\xA0"); // TODO: The \xAO is a &nbsp;. Add a test for this.
+ }
+}
+
+/**
+ * SAX event handler.
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @abstract
+ */
+class SimpleSaxListener {
+
+ /**
+ * Sets the document to write to.
+ * @access public
+ */
+ function SimpleSaxListener() {
+ }
+
+ /**
+ * Start of element event.
+ * @param string $name Element name.
+ * @param hash $attributes Name value pairs.
+ * Attributes without content
+ * are marked as true.
+ * @return boolean False on parse error.
+ * @access public
+ */
+ function startElement($name, $attributes) {
+ }
+
+ /**
+ * End of element event.
+ * @param string $name Element name.
+ * @return boolean False on parse error.
+ * @access public
+ */
+ function endElement($name) {
+ }
+
+ /**
+ * Unparsed, but relevant data.
+ * @param string $text May include unparsed tags.
+ * @return boolean False on parse error.
+ * @access public
+ */
+ function addContent($text) {
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/reflection_php4.php b/vendors/simpletest/reflection_php4.php
new file mode 100644
index 000000000..6c93915af
--- /dev/null
+++ b/vendors/simpletest/reflection_php4.php
@@ -0,0 +1,136 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: reflection_php4.php 1672 2008-03-02 04:47:34Z edwardzyang $
+ */
+
+/**
+ * Version specific reflection API.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @ignore duplicate with reflection_php5.php
+ */
+class SimpleReflection {
+ var $_interface;
+
+ /**
+ * Stashes the class/interface.
+ * @param string $interface Class or interface
+ * to inspect.
+ */
+ function SimpleReflection($interface) {
+ $this->_interface = $interface;
+ }
+
+ /**
+ * Checks that a class has been declared.
+ * @return boolean True if defined.
+ * @access public
+ */
+ function classExists() {
+ return class_exists($this->_interface);
+ }
+
+ /**
+ * Needed to kill the autoload feature in PHP5
+ * for classes created dynamically.
+ * @return boolean True if defined.
+ * @access public
+ */
+ function classExistsSansAutoload() {
+ return class_exists($this->_interface);
+ }
+
+ /**
+ * Checks that a class or interface has been
+ * declared.
+ * @return boolean True if defined.
+ * @access public
+ */
+ function classOrInterfaceExists() {
+ return class_exists($this->_interface);
+ }
+
+ /**
+ * Needed to kill the autoload feature in PHP5
+ * for classes created dynamically.
+ * @return boolean True if defined.
+ * @access public
+ */
+ function classOrInterfaceExistsSansAutoload() {
+ return class_exists($this->_interface);
+ }
+
+ /**
+ * Gets the list of methods on a class or
+ * interface.
+ * @returns array List of method names.
+ * @access public
+ */
+ function getMethods() {
+ return get_class_methods($this->_interface);
+ }
+
+ /**
+ * Gets the list of interfaces from a class. If the
+ * class name is actually an interface then just that
+ * interface is returned.
+ * @returns array List of interfaces.
+ * @access public
+ */
+ function getInterfaces() {
+ return array();
+ }
+
+ /**
+ * Finds the parent class name.
+ * @returns string Parent class name.
+ * @access public
+ */
+ function getParent() {
+ return strtolower(get_parent_class($this->_interface));
+ }
+
+ /**
+ * Determines if the class is abstract, which for PHP 4
+ * will never be the case.
+ * @returns boolean True if abstract.
+ * @access public
+ */
+ function isAbstract() {
+ return false;
+ }
+
+ /**
+ * Determines if the the entity is an interface, which for PHP 4
+ * will never be the case.
+ * @returns boolean True if interface.
+ * @access public
+ */
+ function isInterface() {
+ return false;
+ }
+
+ /**
+ * Scans for final methods, but as it's PHP 4 there
+ * aren't any.
+ * @returns boolean True if the class has a final method.
+ * @access public
+ */
+ function hasFinal() {
+ return false;
+ }
+
+ /**
+ * Gets the source code matching the declaration
+ * of a method.
+ * @param string $method Method name.
+ * @access public
+ */
+ function getSignature($method) {
+ return "function &$method()";
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/reflection_php5.php b/vendors/simpletest/reflection_php5.php
new file mode 100644
index 000000000..8383bccd3
--- /dev/null
+++ b/vendors/simpletest/reflection_php5.php
@@ -0,0 +1,380 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: reflection_php5.php 1683 2008-03-05 21:57:08Z lastcraft $
+ */
+
+/**
+ * Version specific reflection API.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleReflection {
+ var $_interface;
+
+ /**
+ * Stashes the class/interface.
+ * @param string $interface Class or interface
+ * to inspect.
+ */
+ function SimpleReflection($interface) {
+ $this->_interface = $interface;
+ }
+
+ /**
+ * Checks that a class has been declared. Versions
+ * before PHP5.0.2 need a check that it's not really
+ * an interface.
+ * @return boolean True if defined.
+ * @access public
+ */
+ function classExists() {
+ if (! class_exists($this->_interface)) {
+ return false;
+ }
+ $reflection = new ReflectionClass($this->_interface);
+ return ! $reflection->isInterface();
+ }
+
+ /**
+ * Needed to kill the autoload feature in PHP5
+ * for classes created dynamically.
+ * @return boolean True if defined.
+ * @access public
+ */
+ function classExistsSansAutoload() {
+ return class_exists($this->_interface, false);
+ }
+
+ /**
+ * Checks that a class or interface has been
+ * declared.
+ * @return boolean True if defined.
+ * @access public
+ */
+ function classOrInterfaceExists() {
+ return $this->_classOrInterfaceExistsWithAutoload($this->_interface, true);
+ }
+
+ /**
+ * Needed to kill the autoload feature in PHP5
+ * for classes created dynamically.
+ * @return boolean True if defined.
+ * @access public
+ */
+ function classOrInterfaceExistsSansAutoload() {
+ return $this->_classOrInterfaceExistsWithAutoload($this->_interface, false);
+ }
+
+ /**
+ * Needed to select the autoload feature in PHP5
+ * for classes created dynamically.
+ * @param string $interface Class or interface name.
+ * @param boolean $autoload True totriggerautoload.
+ * @return boolean True if interface defined.
+ * @access private
+ */
+ function _classOrInterfaceExistsWithAutoload($interface, $autoload) {
+ if (function_exists('interface_exists')) {
+ if (interface_exists($this->_interface, $autoload)) {
+ return true;
+ }
+ }
+ return class_exists($this->_interface, $autoload);
+ }
+
+ /**
+ * Gets the list of methods on a class or
+ * interface.
+ * @returns array List of method names.
+ * @access public
+ */
+ function getMethods() {
+ return array_unique(get_class_methods($this->_interface));
+ }
+
+ /**
+ * Gets the list of interfaces from a class. If the
+ * class name is actually an interface then just that
+ * interface is returned.
+ * @returns array List of interfaces.
+ * @access public
+ */
+ function getInterfaces() {
+ $reflection = new ReflectionClass($this->_interface);
+ if ($reflection->isInterface()) {
+ return array($this->_interface);
+ }
+ return $this->_onlyParents($reflection->getInterfaces());
+ }
+
+ /**
+ * Gets the list of methods for the implemented
+ * interfaces only.
+ * @returns array List of enforced method signatures.
+ * @access public
+ */
+ function getInterfaceMethods() {
+ $methods = array();
+ foreach ($this->getInterfaces() as $interface) {
+ $methods = array_merge($methods, get_class_methods($interface));
+ }
+ return array_unique($methods);
+ }
+
+ /**
+ * Checks to see if the method signature has to be tightly
+ * specified.
+ * @param string $method Method name.
+ * @returns boolean True if enforced.
+ * @access private
+ */
+ function _isInterfaceMethod($method) {
+ return in_array($method, $this->getInterfaceMethods());
+ }
+
+ /**
+ * Finds the parent class name.
+ * @returns string Parent class name.
+ * @access public
+ */
+ function getParent() {
+ $reflection = new ReflectionClass($this->_interface);
+ $parent = $reflection->getParentClass();
+ if ($parent) {
+ return $parent->getName();
+ }
+ return false;
+ }
+
+ /**
+ * Trivially determines if the class is abstract.
+ * @returns boolean True if abstract.
+ * @access public
+ */
+ function isAbstract() {
+ $reflection = new ReflectionClass($this->_interface);
+ return $reflection->isAbstract();
+ }
+
+ /**
+ * Trivially determines if the class is an interface.
+ * @returns boolean True if interface.
+ * @access public
+ */
+ function isInterface() {
+ $reflection = new ReflectionClass($this->_interface);
+ return $reflection->isInterface();
+ }
+
+ /**
+ * Scans for final methods, as they screw up inherited
+ * mocks by not allowing you to override them.
+ * @returns boolean True if the class has a final method.
+ * @access public
+ */
+ function hasFinal() {
+ $reflection = new ReflectionClass($this->_interface);
+ foreach ($reflection->getMethods() as $method) {
+ if ($method->isFinal()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Whittles a list of interfaces down to only the
+ * necessary top level parents.
+ * @param array $interfaces Reflection API interfaces
+ * to reduce.
+ * @returns array List of parent interface names.
+ * @access private
+ */
+ function _onlyParents($interfaces) {
+ $parents = array();
+ $blacklist = array();
+ foreach ($interfaces as $interface) {
+ foreach($interfaces as $possible_parent) {
+ if ($interface->getName() == $possible_parent->getName()) {
+ continue;
+ }
+ if ($interface->isSubClassOf($possible_parent)) {
+ $blacklist[$possible_parent->getName()] = true;
+ }
+ }
+ if (!isset($blacklist[$interface->getName()])) {
+ $parents[] = $interface->getName();
+ }
+ }
+ return $parents;
+ }
+
+ /**
+ * Checks whether a method is abstract or not.
+ * @param string $name Method name.
+ * @return bool true if method is abstract, else false
+ * @access private
+ */
+ function _isAbstractMethod($name) {
+ $interface = new ReflectionClass($this->_interface);
+ if (! $interface->hasMethod($name)) {
+ return false;
+ }
+ return $interface->getMethod($name)->isAbstract();
+ }
+
+ /**
+ * Checks whether a method is the constructor.
+ * @param string $name Method name.
+ * @return bool true if method is the constructor
+ * @access private
+ */
+ function _isConstructor($name) {
+ return ($name == '__construct') || ($name == $this->_interface);
+ }
+
+ /**
+ * Checks whether a method is abstract in all parents or not.
+ * @param string $name Method name.
+ * @return bool true if method is abstract in parent, else false
+ * @access private
+ */
+ function _isAbstractMethodInParents($name) {
+ $interface = new ReflectionClass($this->_interface);
+ $parent = $interface->getParentClass();
+ while($parent) {
+ if (! $parent->hasMethod($name)) {
+ return false;
+ }
+ if ($parent->getMethod($name)->isAbstract()) {
+ return true;
+ }
+ $parent = $parent->getParentClass();
+ }
+ return false;
+ }
+
+ /**
+ * Checks whether a method is static or not.
+ * @param string $name Method name
+ * @return bool true if method is static, else false
+ * @access private
+ */
+ function _isStaticMethod($name) {
+ $interface = new ReflectionClass($this->_interface);
+ if (! $interface->hasMethod($name)) {
+ return false;
+ }
+ return $interface->getMethod($name)->isStatic();
+ }
+
+ /**
+ * Writes the source code matching the declaration
+ * of a method.
+ * @param string $name Method name.
+ * @return string Method signature up to last
+ * bracket.
+ * @access public
+ */
+ function getSignature($name) {
+ if ($name == '__set') {
+ return 'function __set($key, $value)';
+ }
+ if ($name == '__call') {
+ return 'function __call($method, $arguments)';
+ }
+ if (version_compare(phpversion(), '5.1.0', '>=')) {
+ if (in_array($name, array('__get', '__isset', $name == '__unset'))) {
+ return "function {$name}(\$key)";
+ }
+ }
+ if ($name == '__toString') {
+ return "function $name()";
+ }
+ if ($this->_isInterfaceMethod($name) ||
+ $this->_isAbstractMethod($name) ||
+ $this->_isAbstractMethodInParents($name) ||
+ $this->_isStaticMethod($name)) {
+ return $this->_getFullSignature($name);
+ }
+ return "function $name()";
+ }
+
+ /**
+ * For a signature specified in an interface, full
+ * details must be replicated to be a valid implementation.
+ * @param string $name Method name.
+ * @return string Method signature up to last
+ * bracket.
+ * @access private
+ */
+ function _getFullSignature($name) {
+ $interface = new ReflectionClass($this->_interface);
+ $method = $interface->getMethod($name);
+ $reference = $method->returnsReference() ? '&' : '';
+ $static = $method->isStatic() ? 'static ' : '';
+ return "{$static}function $reference$name(" .
+ implode(', ', $this->_getParameterSignatures($method)) .
+ ")";
+ }
+
+ /**
+ * Gets the source code for each parameter.
+ * @param ReflectionMethod $method Method object from
+ * reflection API
+ * @return array List of strings, each
+ * a snippet of code.
+ * @access private
+ */
+ function _getParameterSignatures($method) {
+ $signatures = array();
+ foreach ($method->getParameters() as $parameter) {
+ $signature = '';
+ $type = $parameter->getClass();
+ if (is_null($type) && version_compare(phpversion(), '5.1.0', '>=') && $parameter->isArray()) {
+ $signature .= 'array ';
+ } elseif (!is_null($type)) {
+ $signature .= $type->getName() . ' ';
+ }
+ if ($parameter->isPassedByReference()) {
+ $signature .= '&';
+ }
+ $signature .= '$' . $this->_suppressSpurious($parameter->getName());
+ if ($this->_isOptional($parameter)) {
+ $signature .= ' = null';
+ }
+ $signatures[] = $signature;
+ }
+ return $signatures;
+ }
+
+ /**
+ * The SPL library has problems with the
+ * Reflection library. In particular, you can
+ * get extra characters in parameter names :(.
+ * @param string $name Parameter name.
+ * @return string Cleaner name.
+ * @access private
+ */
+ function _suppressSpurious($name) {
+ return str_replace(array('[', ']', ' '), '', $name);
+ }
+
+ /**
+ * Test of a reflection parameter being optional
+ * that works with early versions of PHP5.
+ * @param reflectionParameter $parameter Is this optional.
+ * @return boolean True if optional.
+ * @access private
+ */
+ function _isOptional($parameter) {
+ if (method_exists($parameter, 'isOptional')) {
+ return $parameter->isOptional();
+ }
+ return false;
+ }
+}
+?>
diff --git a/vendors/simpletest/remote.php b/vendors/simpletest/remote.php
new file mode 100644
index 000000000..8889ed7bf
--- /dev/null
+++ b/vendors/simpletest/remote.php
@@ -0,0 +1,117 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: remote.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/browser.php');
+require_once(dirname(__FILE__) . '/xml.php');
+require_once(dirname(__FILE__) . '/test_case.php');
+/**#@-*/
+
+/**
+ * Runs an XML formated test on a remote server.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class RemoteTestCase {
+ var $_url;
+ var $_dry_url;
+ var $_size;
+
+ /**
+ * Sets the location of the remote test.
+ * @param string $url Test location.
+ * @param string $dry_url Location for dry run.
+ * @access public
+ */
+ function RemoteTestCase($url, $dry_url = false) {
+ $this->_url = $url;
+ $this->_dry_url = $dry_url ? $dry_url : $url;
+ $this->_size = false;
+ }
+
+ /**
+ * Accessor for the test name for subclasses.
+ * @return string Name of the test.
+ * @access public
+ */
+ function getLabel() {
+ return $this->_url;
+ }
+
+ /**
+ * Runs the top level test for this class. Currently
+ * reads the data as a single chunk. I'll fix this
+ * once I have added iteration to the browser.
+ * @param SimpleReporter $reporter Target of test results.
+ * @returns boolean True if no failures.
+ * @access public
+ */
+ function run(&$reporter) {
+ $browser = &$this->_createBrowser();
+ $xml = $browser->get($this->_url);
+ if (! $xml) {
+ trigger_error('Cannot read remote test URL [' . $this->_url . ']');
+ return false;
+ }
+ $parser = &$this->_createParser($reporter);
+ if (! $parser->parse($xml)) {
+ trigger_error('Cannot parse incoming XML from [' . $this->_url . ']');
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Creates a new web browser object for fetching
+ * the XML report.
+ * @return SimpleBrowser New browser.
+ * @access protected
+ */
+ function &_createBrowser() {
+ $browser = &new SimpleBrowser();
+ return $browser;
+ }
+
+ /**
+ * Creates the XML parser.
+ * @param SimpleReporter $reporter Target of test results.
+ * @return SimpleTestXmlListener XML reader.
+ * @access protected
+ */
+ function &_createParser(&$reporter) {
+ $parser = &new SimpleTestXmlParser($reporter);
+ return $parser;
+ }
+
+ /**
+ * Accessor for the number of subtests.
+ * @return integer Number of test cases.
+ * @access public
+ */
+ function getSize() {
+ if ($this->_size === false) {
+ $browser = &$this->_createBrowser();
+ $xml = $browser->get($this->_dry_url);
+ if (! $xml) {
+ trigger_error('Cannot read remote test URL [' . $this->_dry_url . ']');
+ return false;
+ }
+ $reporter = &new SimpleReporter();
+ $parser = &$this->_createParser($reporter);
+ if (! $parser->parse($xml)) {
+ trigger_error('Cannot parse incoming XML from [' . $this->_dry_url . ']');
+ return false;
+ }
+ $this->_size = $reporter->getTestCaseCount();
+ }
+ return $this->_size;
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/reporter.php b/vendors/simpletest/reporter.php
new file mode 100644
index 000000000..a13eff8cf
--- /dev/null
+++ b/vendors/simpletest/reporter.php
@@ -0,0 +1,447 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: reporter.php 1702 2008-03-25 00:08:04Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/scorer.php');
+/**#@-*/
+
+/**
+ * Sample minimal test displayer. Generates only
+ * failure messages and a pass count.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class HtmlReporter extends SimpleReporter {
+ var $_character_set;
+
+ /**
+ * Does nothing yet. The first output will
+ * be sent on the first test start. For use
+ * by a web browser.
+ * @access public
+ */
+ function HtmlReporter($character_set = 'ISO-8859-1') {
+ $this->SimpleReporter();
+ $this->_character_set = $character_set;
+ }
+
+ /**
+ * Paints the top of the web page setting the
+ * title to the name of the starting test.
+ * @param string $test_name Name class of test.
+ * @access public
+ */
+ function paintHeader($test_name) {
+ $this->sendNoCacheHeaders();
+ print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">";
+ print "<html>\n<head>\n<title>$test_name</title>\n";
+ print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" .
+ $this->_character_set . "\">\n";
+ print "<style type=\"text/css\">\n";
+ print $this->_getCss() . "\n";
+ print "</style>\n";
+ print "</head>\n<body>\n";
+ print "<h1>$test_name</h1>\n";
+ flush();
+ }
+
+ /**
+ * Send the headers necessary to ensure the page is
+ * reloaded on every request. Otherwise you could be
+ * scratching your head over out of date test data.
+ * @access public
+ * @static
+ */
+ function sendNoCacheHeaders() {
+ if (! headers_sent()) {
+ header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+ header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
+ header("Cache-Control: no-store, no-cache, must-revalidate");
+ header("Cache-Control: post-check=0, pre-check=0", false);
+ header("Pragma: no-cache");
+ }
+ }
+
+ /**
+ * Paints the CSS. Add additional styles here.
+ * @return string CSS code as text.
+ * @access protected
+ */
+ function _getCss() {
+ return ".fail { background-color: inherit; color: red; }" .
+ ".pass { background-color: inherit; color: green; }" .
+ " pre { background-color: lightgray; color: inherit; }";
+ }
+
+ /**
+ * Paints the end of the test with a summary of
+ * the passes and failures.
+ * @param string $test_name Name class of test.
+ * @access public
+ */
+ function paintFooter($test_name) {
+ $colour = ($this->getFailCount() + $this->getExceptionCount() > 0 ? "red" : "green");
+ print "<div style=\"";
+ print "padding: 8px; margin-top: 1em; background-color: $colour; color: white;";
+ print "\">";
+ print $this->getTestCaseProgress() . "/" . $this->getTestCaseCount();
+ print " test cases complete:\n";
+ print "<strong>" . $this->getPassCount() . "</strong> passes, ";
+ print "<strong>" . $this->getFailCount() . "</strong> fails and ";
+ print "<strong>" . $this->getExceptionCount() . "</strong> exceptions.";
+ print "</div>\n";
+ print "</body>\n</html>\n";
+ }
+
+ /**
+ * Paints the test failure with a breadcrumbs
+ * trail of the nesting test suites below the
+ * top level test.
+ * @param string $message Failure message displayed in
+ * the context of the other tests.
+ * @access public
+ */
+ function paintFail($message) {
+ parent::paintFail($message);
+ print "<span class=\"fail\">Fail</span>: ";
+ $breadcrumb = $this->getTestList();
+ array_shift($breadcrumb);
+ print implode(" -&gt; ", $breadcrumb);
+ print " -&gt; " . $this->_htmlEntities($message) . "<br />\n";
+ }
+
+ /**
+ * Paints a PHP error.
+ * @param string $message Message is ignored.
+ * @access public
+ */
+ function paintError($message) {
+ parent::paintError($message);
+ print "<span class=\"fail\">Exception</span>: ";
+ $breadcrumb = $this->getTestList();
+ array_shift($breadcrumb);
+ print implode(" -&gt; ", $breadcrumb);
+ print " -&gt; <strong>" . $this->_htmlEntities($message) . "</strong><br />\n";
+ }
+
+ /**
+ * Paints a PHP exception.
+ * @param Exception $exception Exception to display.
+ * @access public
+ */
+ function paintException($exception) {
+ parent::paintException($exception);
+ print "<span class=\"fail\">Exception</span>: ";
+ $breadcrumb = $this->getTestList();
+ array_shift($breadcrumb);
+ print implode(" -&gt; ", $breadcrumb);
+ $message = 'Unexpected exception of type [' . get_class($exception) .
+ '] with message ['. $exception->getMessage() .
+ '] in ['. $exception->getFile() .
+ ' line ' . $exception->getLine() . ']';
+ print " -&gt; <strong>" . $this->_htmlEntities($message) . "</strong><br />\n";
+ }
+
+ /**
+ * Prints the message for skipping tests.
+ * @param string $message Text of skip condition.
+ * @access public
+ */
+ function paintSkip($message) {
+ parent::paintSkip($message);
+ print "<span class=\"pass\">Skipped</span>: ";
+ $breadcrumb = $this->getTestList();
+ array_shift($breadcrumb);
+ print implode(" -&gt; ", $breadcrumb);
+ print " -&gt; " . $this->_htmlEntities($message) . "<br />\n";
+ }
+
+ /**
+ * Paints formatted text such as dumped variables.
+ * @param string $message Text to show.
+ * @access public
+ */
+ function paintFormattedMessage($message) {
+ print '<pre>' . $this->_htmlEntities($message) . '</pre>';
+ }
+
+ /**
+ * Character set adjusted entity conversion.
+ * @param string $message Plain text or Unicode message.
+ * @return string Browser readable message.
+ * @access protected
+ */
+ function _htmlEntities($message) {
+ return htmlentities($message, ENT_COMPAT, $this->_character_set);
+ }
+}
+
+/**
+ * Sample minimal test displayer. Generates only
+ * failure messages and a pass count. For command
+ * line use. I've tried to make it look like JUnit,
+ * but I wanted to output the errors as they arrived
+ * which meant dropping the dots.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class TextReporter extends SimpleReporter {
+
+ /**
+ * Does nothing yet. The first output will
+ * be sent on the first test start.
+ * @access public
+ */
+ function TextReporter() {
+ $this->SimpleReporter();
+ }
+
+ /**
+ * Paints the title only.
+ * @param string $test_name Name class of test.
+ * @access public
+ */
+ function paintHeader($test_name) {
+ if (! SimpleReporter::inCli()) {
+ header('Content-type: text/plain');
+ }
+ print "$test_name\n";
+ flush();
+ }
+
+ /**
+ * Paints the end of the test with a summary of
+ * the passes and failures.
+ * @param string $test_name Name class of test.
+ * @access public
+ */
+ function paintFooter($test_name) {
+ if ($this->getFailCount() + $this->getExceptionCount() == 0) {
+ print "OK\n";
+ } else {
+ print "FAILURES!!!\n";
+ }
+ print "Test cases run: " . $this->getTestCaseProgress() .
+ "/" . $this->getTestCaseCount() .
+ ", Passes: " . $this->getPassCount() .
+ ", Failures: " . $this->getFailCount() .
+ ", Exceptions: " . $this->getExceptionCount() . "\n";
+ }
+
+ /**
+ * Paints the test failure as a stack trace.
+ * @param string $message Failure message displayed in
+ * the context of the other tests.
+ * @access public
+ */
+ function paintFail($message) {
+ parent::paintFail($message);
+ print $this->getFailCount() . ") $message\n";
+ $breadcrumb = $this->getTestList();
+ array_shift($breadcrumb);
+ print "\tin " . implode("\n\tin ", array_reverse($breadcrumb));
+ print "\n";
+ }
+
+ /**
+ * Paints a PHP error or exception.
+ * @param string $message Message to be shown.
+ * @access public
+ * @abstract
+ */
+ function paintError($message) {
+ parent::paintError($message);
+ print "Exception " . $this->getExceptionCount() . "!\n$message\n";
+ $breadcrumb = $this->getTestList();
+ array_shift($breadcrumb);
+ print "\tin " . implode("\n\tin ", array_reverse($breadcrumb));
+ print "\n";
+ }
+
+ /**
+ * Paints a PHP error or exception.
+ * @param Exception $exception Exception to describe.
+ * @access public
+ * @abstract
+ */
+ function paintException($exception) {
+ parent::paintException($exception);
+ $message = 'Unexpected exception of type [' . get_class($exception) .
+ '] with message ['. $exception->getMessage() .
+ '] in ['. $exception->getFile() .
+ ' line ' . $exception->getLine() . ']';
+ print "Exception " . $this->getExceptionCount() . "!\n$message\n";
+ $breadcrumb = $this->getTestList();
+ array_shift($breadcrumb);
+ print "\tin " . implode("\n\tin ", array_reverse($breadcrumb));
+ print "\n";
+ }
+
+ /**
+ * Prints the message for skipping tests.
+ * @param string $message Text of skip condition.
+ * @access public
+ */
+ function paintSkip($message) {
+ parent::paintSkip($message);
+ print "Skip: $message\n";
+ }
+
+ /**
+ * Paints formatted text such as dumped variables.
+ * @param string $message Text to show.
+ * @access public
+ */
+ function paintFormattedMessage($message) {
+ print "$message\n";
+ flush();
+ }
+}
+
+/**
+ * Runs just a single test group, a single case or
+ * even a single test within that case.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SelectiveReporter extends SimpleReporterDecorator {
+ var $_just_this_case = false;
+ var $_just_this_test = false;
+ var $_on;
+
+ /**
+ * Selects the test case or group to be run,
+ * and optionally a specific test.
+ * @param SimpleScorer $reporter Reporter to receive events.
+ * @param string $just_this_case Only this case or group will run.
+ * @param string $just_this_test Only this test method will run.
+ */
+ function SelectiveReporter(&$reporter, $just_this_case = false, $just_this_test = false) {
+ if (isset($just_this_case) && $just_this_case) {
+ $this->_just_this_case = strtolower($just_this_case);
+ $this->_off();
+ } else {
+ $this->_on();
+ }
+ if (isset($just_this_test) && $just_this_test) {
+ $this->_just_this_test = strtolower($just_this_test);
+ }
+ $this->SimpleReporterDecorator($reporter);
+ }
+
+ /**
+ * Compares criteria to actual the case/group name.
+ * @param string $test_case The incoming test.
+ * @return boolean True if matched.
+ * @access protected
+ */
+ function _matchesTestCase($test_case) {
+ return $this->_just_this_case == strtolower($test_case);
+ }
+
+ /**
+ * Compares criteria to actual the test name. If no
+ * name was specified at the beginning, then all tests
+ * can run.
+ * @param string $method The incoming test method.
+ * @return boolean True if matched.
+ * @access protected
+ */
+ function _shouldRunTest($test_case, $method) {
+ if ($this->_isOn() || $this->_matchesTestCase($test_case)) {
+ if ($this->_just_this_test) {
+ return $this->_just_this_test == strtolower($method);
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Switch on testing for the group or subgroup.
+ * @access private
+ */
+ function _on() {
+ $this->_on = true;
+ }
+
+ /**
+ * Switch off testing for the group or subgroup.
+ * @access private
+ */
+ function _off() {
+ $this->_on = false;
+ }
+
+ /**
+ * Is this group actually being tested?
+ * @return boolean True if the current test group is active.
+ * @access private
+ */
+ function _isOn() {
+ return $this->_on;
+ }
+
+ /**
+ * Veto everything that doesn't match the method wanted.
+ * @param string $test_case Name of test case.
+ * @param string $method Name of test method.
+ * @return boolean True if test should be run.
+ * @access public
+ */
+ function shouldInvoke($test_case, $method) {
+ if ($this->_shouldRunTest($test_case, $method)) {
+ return $this->_reporter->shouldInvoke($test_case, $method);
+ }
+ return false;
+ }
+
+ /**
+ * Paints the start of a group test.
+ * @param string $test_case Name of test or other label.
+ * @param integer $size Number of test cases starting.
+ * @access public
+ */
+ function paintGroupStart($test_case, $size) {
+ if ($this->_just_this_case && $this->_matchesTestCase($test_case)) {
+ $this->_on();
+ }
+ $this->_reporter->paintGroupStart($test_case, $size);
+ }
+
+ /**
+ * Paints the end of a group test.
+ * @param string $test_case Name of test or other label.
+ * @access public
+ */
+ function paintGroupEnd($test_case) {
+ $this->_reporter->paintGroupEnd($test_case);
+ if ($this->_just_this_case && $this->_matchesTestCase($test_case)) {
+ $this->_off();
+ }
+ }
+}
+
+/**
+ * Suppresses skip messages.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class NoSkipsReporter extends SimpleReporterDecorator {
+
+ /**
+ * Does nothing.
+ * @param string $message Text of skip condition.
+ * @access public
+ */
+ function paintSkip($message) { }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/scorer.php b/vendors/simpletest/scorer.php
new file mode 100644
index 000000000..cc1331b89
--- /dev/null
+++ b/vendors/simpletest/scorer.php
@@ -0,0 +1,863 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: scorer.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+*/
+require_once(dirname(__FILE__) . '/invoker.php');
+/**#@-*/
+
+/**
+ * Can receive test events and display them. Display
+ * is achieved by making display methods available
+ * and visiting the incoming event.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @abstract
+ */
+class SimpleScorer {
+ var $_passes;
+ var $_fails;
+ var $_exceptions;
+ var $_is_dry_run;
+
+ /**
+ * Starts the test run with no results.
+ * @access public
+ */
+ function SimpleScorer() {
+ $this->_passes = 0;
+ $this->_fails = 0;
+ $this->_exceptions = 0;
+ $this->_is_dry_run = false;
+ }
+
+ /**
+ * Signals that the next evaluation will be a dry
+ * run. That is, the structure events will be
+ * recorded, but no tests will be run.
+ * @param boolean $is_dry Dry run if true.
+ * @access public
+ */
+ function makeDry($is_dry = true) {
+ $this->_is_dry_run = $is_dry;
+ }
+
+ /**
+ * The reporter has a veto on what should be run.
+ * @param string $test_case_name name of test case.
+ * @param string $method Name of test method.
+ * @access public
+ */
+ function shouldInvoke($test_case_name, $method) {
+ return ! $this->_is_dry_run;
+ }
+
+ /**
+ * Can wrap the invoker in preperation for running
+ * a test.
+ * @param SimpleInvoker $invoker Individual test runner.
+ * @return SimpleInvoker Wrapped test runner.
+ * @access public
+ */
+ function &createInvoker(&$invoker) {
+ return $invoker;
+ }
+
+ /**
+ * Accessor for current status. Will be false
+ * if there have been any failures or exceptions.
+ * Used for command line tools.
+ * @return boolean True if no failures.
+ * @access public
+ */
+ function getStatus() {
+ if ($this->_exceptions + $this->_fails > 0) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Paints the start of a group test.
+ * @param string $test_name Name of test or other label.
+ * @param integer $size Number of test cases starting.
+ * @access public
+ */
+ function paintGroupStart($test_name, $size) {
+ }
+
+ /**
+ * Paints the end of a group test.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintGroupEnd($test_name) {
+ }
+
+ /**
+ * Paints the start of a test case.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintCaseStart($test_name) {
+ }
+
+ /**
+ * Paints the end of a test case.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintCaseEnd($test_name) {
+ }
+
+ /**
+ * Paints the start of a test method.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintMethodStart($test_name) {
+ }
+
+ /**
+ * Paints the end of a test method.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintMethodEnd($test_name) {
+ }
+
+ /**
+ * Increments the pass count.
+ * @param string $message Message is ignored.
+ * @access public
+ */
+ function paintPass($message) {
+ $this->_passes++;
+ }
+
+ /**
+ * Increments the fail count.
+ * @param string $message Message is ignored.
+ * @access public
+ */
+ function paintFail($message) {
+ $this->_fails++;
+ }
+
+ /**
+ * Deals with PHP 4 throwing an error.
+ * @param string $message Text of error formatted by
+ * the test case.
+ * @access public
+ */
+ function paintError($message) {
+ $this->_exceptions++;
+ }
+
+ /**
+ * Deals with PHP 5 throwing an exception.
+ * @param Exception $exception The actual exception thrown.
+ * @access public
+ */
+ function paintException($exception) {
+ $this->_exceptions++;
+ }
+
+ /**
+ * Prints the message for skipping tests.
+ * @param string $message Text of skip condition.
+ * @access public
+ */
+ function paintSkip($message) {
+ }
+
+ /**
+ * Accessor for the number of passes so far.
+ * @return integer Number of passes.
+ * @access public
+ */
+ function getPassCount() {
+ return $this->_passes;
+ }
+
+ /**
+ * Accessor for the number of fails so far.
+ * @return integer Number of fails.
+ * @access public
+ */
+ function getFailCount() {
+ return $this->_fails;
+ }
+
+ /**
+ * Accessor for the number of untrapped errors
+ * so far.
+ * @return integer Number of exceptions.
+ * @access public
+ */
+ function getExceptionCount() {
+ return $this->_exceptions;
+ }
+
+ /**
+ * Paints a simple supplementary message.
+ * @param string $message Text to display.
+ * @access public
+ */
+ function paintMessage($message) {
+ }
+
+ /**
+ * Paints a formatted ASCII message such as a
+ * variable dump.
+ * @param string $message Text to display.
+ * @access public
+ */
+ function paintFormattedMessage($message) {
+ }
+
+ /**
+ * By default just ignores user generated events.
+ * @param string $type Event type as text.
+ * @param mixed $payload Message or object.
+ * @access public
+ */
+ function paintSignal($type, $payload) {
+ }
+}
+
+/**
+ * Recipient of generated test messages that can display
+ * page footers and headers. Also keeps track of the
+ * test nesting. This is the main base class on which
+ * to build the finished test (page based) displays.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleReporter extends SimpleScorer {
+ var $_test_stack;
+ var $_size;
+ var $_progress;
+
+ /**
+ * Starts the display with no results in.
+ * @access public
+ */
+ function SimpleReporter() {
+ $this->SimpleScorer();
+ $this->_test_stack = array();
+ $this->_size = null;
+ $this->_progress = 0;
+ }
+
+ /**
+ * Gets the formatter for variables and other small
+ * generic data items.
+ * @return SimpleDumper Formatter.
+ * @access public
+ */
+ function getDumper() {
+ return new SimpleDumper();
+ }
+
+ /**
+ * Paints the start of a group test. Will also paint
+ * the page header and footer if this is the
+ * first test. Will stash the size if the first
+ * start.
+ * @param string $test_name Name of test that is starting.
+ * @param integer $size Number of test cases starting.
+ * @access public
+ */
+ function paintGroupStart($test_name, $size) {
+ if (! isset($this->_size)) {
+ $this->_size = $size;
+ }
+ if (count($this->_test_stack) == 0) {
+ $this->paintHeader($test_name);
+ }
+ $this->_test_stack[] = $test_name;
+ }
+
+ /**
+ * Paints the end of a group test. Will paint the page
+ * footer if the stack of tests has unwound.
+ * @param string $test_name Name of test that is ending.
+ * @param integer $progress Number of test cases ending.
+ * @access public
+ */
+ function paintGroupEnd($test_name) {
+ array_pop($this->_test_stack);
+ if (count($this->_test_stack) == 0) {
+ $this->paintFooter($test_name);
+ }
+ }
+
+ /**
+ * Paints the start of a test case. Will also paint
+ * the page header and footer if this is the
+ * first test. Will stash the size if the first
+ * start.
+ * @param string $test_name Name of test that is starting.
+ * @access public
+ */
+ function paintCaseStart($test_name) {
+ if (! isset($this->_size)) {
+ $this->_size = 1;
+ }
+ if (count($this->_test_stack) == 0) {
+ $this->paintHeader($test_name);
+ }
+ $this->_test_stack[] = $test_name;
+ }
+
+ /**
+ * Paints the end of a test case. Will paint the page
+ * footer if the stack of tests has unwound.
+ * @param string $test_name Name of test that is ending.
+ * @access public
+ */
+ function paintCaseEnd($test_name) {
+ $this->_progress++;
+ array_pop($this->_test_stack);
+ if (count($this->_test_stack) == 0) {
+ $this->paintFooter($test_name);
+ }
+ }
+
+ /**
+ * Paints the start of a test method.
+ * @param string $test_name Name of test that is starting.
+ * @access public
+ */
+ function paintMethodStart($test_name) {
+ $this->_test_stack[] = $test_name;
+ }
+
+ /**
+ * Paints the end of a test method. Will paint the page
+ * footer if the stack of tests has unwound.
+ * @param string $test_name Name of test that is ending.
+ * @access public
+ */
+ function paintMethodEnd($test_name) {
+ array_pop($this->_test_stack);
+ }
+
+ /**
+ * Paints the test document header.
+ * @param string $test_name First test top level
+ * to start.
+ * @access public
+ * @abstract
+ */
+ function paintHeader($test_name) {
+ }
+
+ /**
+ * Paints the test document footer.
+ * @param string $test_name The top level test.
+ * @access public
+ * @abstract
+ */
+ function paintFooter($test_name) {
+ }
+
+ /**
+ * Accessor for internal test stack. For
+ * subclasses that need to see the whole test
+ * history for display purposes.
+ * @return array List of methods in nesting order.
+ * @access public
+ */
+ function getTestList() {
+ return $this->_test_stack;
+ }
+
+ /**
+ * Accessor for total test size in number
+ * of test cases. Null until the first
+ * test is started.
+ * @return integer Total number of cases at start.
+ * @access public
+ */
+ function getTestCaseCount() {
+ return $this->_size;
+ }
+
+ /**
+ * Accessor for the number of test cases
+ * completed so far.
+ * @return integer Number of ended cases.
+ * @access public
+ */
+ function getTestCaseProgress() {
+ return $this->_progress;
+ }
+
+ /**
+ * Static check for running in the comand line.
+ * @return boolean True if CLI.
+ * @access public
+ * @static
+ */
+ function inCli() {
+ return php_sapi_name() == 'cli';
+ }
+}
+
+/**
+ * For modifying the behaviour of the visual reporters.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleReporterDecorator {
+ var $_reporter;
+
+ /**
+ * Mediates between the reporter and the test case.
+ * @param SimpleScorer $reporter Reporter to receive events.
+ */
+ function SimpleReporterDecorator(&$reporter) {
+ $this->_reporter = &$reporter;
+ }
+
+ /**
+ * Signals that the next evaluation will be a dry
+ * run. That is, the structure events will be
+ * recorded, but no tests will be run.
+ * @param boolean $is_dry Dry run if true.
+ * @access public
+ */
+ function makeDry($is_dry = true) {
+ $this->_reporter->makeDry($is_dry);
+ }
+
+ /**
+ * Accessor for current status. Will be false
+ * if there have been any failures or exceptions.
+ * Used for command line tools.
+ * @return boolean True if no failures.
+ * @access public
+ */
+ function getStatus() {
+ return $this->_reporter->getStatus();
+ }
+
+ /**
+ * The reporter has a veto on what should be run.
+ * @param string $test_case_name name of test case.
+ * @param string $method Name of test method.
+ * @return boolean True if test should be run.
+ * @access public
+ */
+ function shouldInvoke($test_case_name, $method) {
+ return $this->_reporter->shouldInvoke($test_case_name, $method);
+ }
+
+ /**
+ * Can wrap the invoker in preperation for running
+ * a test.
+ * @param SimpleInvoker $invoker Individual test runner.
+ * @return SimpleInvoker Wrapped test runner.
+ * @access public
+ */
+ function &createInvoker(&$invoker) {
+ return $this->_reporter->createInvoker($invoker);
+ }
+
+ /**
+ * Gets the formatter for variables and other small
+ * generic data items.
+ * @return SimpleDumper Formatter.
+ * @access public
+ */
+ function getDumper() {
+ return $this->_reporter->getDumper();
+ }
+
+ /**
+ * Paints the start of a group test.
+ * @param string $test_name Name of test or other label.
+ * @param integer $size Number of test cases starting.
+ * @access public
+ */
+ function paintGroupStart($test_name, $size) {
+ $this->_reporter->paintGroupStart($test_name, $size);
+ }
+
+ /**
+ * Paints the end of a group test.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintGroupEnd($test_name) {
+ $this->_reporter->paintGroupEnd($test_name);
+ }
+
+ /**
+ * Paints the start of a test case.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintCaseStart($test_name) {
+ $this->_reporter->paintCaseStart($test_name);
+ }
+
+ /**
+ * Paints the end of a test case.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintCaseEnd($test_name) {
+ $this->_reporter->paintCaseEnd($test_name);
+ }
+
+ /**
+ * Paints the start of a test method.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintMethodStart($test_name) {
+ $this->_reporter->paintMethodStart($test_name);
+ }
+
+ /**
+ * Paints the end of a test method.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintMethodEnd($test_name) {
+ $this->_reporter->paintMethodEnd($test_name);
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $message Message is ignored.
+ * @access public
+ */
+ function paintPass($message) {
+ $this->_reporter->paintPass($message);
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $message Message is ignored.
+ * @access public
+ */
+ function paintFail($message) {
+ $this->_reporter->paintFail($message);
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $message Text of error formatted by
+ * the test case.
+ * @access public
+ */
+ function paintError($message) {
+ $this->_reporter->paintError($message);
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param Exception $exception Exception to show.
+ * @access public
+ */
+ function paintException($exception) {
+ $this->_reporter->paintException($exception);
+ }
+
+ /**
+ * Prints the message for skipping tests.
+ * @param string $message Text of skip condition.
+ * @access public
+ */
+ function paintSkip($message) {
+ $this->_reporter->paintSkip($message);
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $message Text to display.
+ * @access public
+ */
+ function paintMessage($message) {
+ $this->_reporter->paintMessage($message);
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $message Text to display.
+ * @access public
+ */
+ function paintFormattedMessage($message) {
+ $this->_reporter->paintFormattedMessage($message);
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $type Event type as text.
+ * @param mixed $payload Message or object.
+ * @return boolean Should return false if this
+ * type of signal should fail the
+ * test suite.
+ * @access public
+ */
+ function paintSignal($type, &$payload) {
+ $this->_reporter->paintSignal($type, $payload);
+ }
+}
+
+/**
+ * For sending messages to multiple reporters at
+ * the same time.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class MultipleReporter {
+ var $_reporters = array();
+
+ /**
+ * Adds a reporter to the subscriber list.
+ * @param SimpleScorer $reporter Reporter to receive events.
+ * @access public
+ */
+ function attachReporter(&$reporter) {
+ $this->_reporters[] = &$reporter;
+ }
+
+ /**
+ * Signals that the next evaluation will be a dry
+ * run. That is, the structure events will be
+ * recorded, but no tests will be run.
+ * @param boolean $is_dry Dry run if true.
+ * @access public
+ */
+ function makeDry($is_dry = true) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->makeDry($is_dry);
+ }
+ }
+
+ /**
+ * Accessor for current status. Will be false
+ * if there have been any failures or exceptions.
+ * If any reporter reports a failure, the whole
+ * suite fails.
+ * @return boolean True if no failures.
+ * @access public
+ */
+ function getStatus() {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ if (! $this->_reporters[$i]->getStatus()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * The reporter has a veto on what should be run.
+ * It requires all reporters to want to run the method.
+ * @param string $test_case_name name of test case.
+ * @param string $method Name of test method.
+ * @access public
+ */
+ function shouldInvoke($test_case_name, $method) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ if (! $this->_reporters[$i]->shouldInvoke($test_case_name, $method)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Every reporter gets a chance to wrap the invoker.
+ * @param SimpleInvoker $invoker Individual test runner.
+ * @return SimpleInvoker Wrapped test runner.
+ * @access public
+ */
+ function &createInvoker(&$invoker) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $invoker = &$this->_reporters[$i]->createInvoker($invoker);
+ }
+ return $invoker;
+ }
+
+ /**
+ * Gets the formatter for variables and other small
+ * generic data items.
+ * @return SimpleDumper Formatter.
+ * @access public
+ */
+ function getDumper() {
+ return new SimpleDumper();
+ }
+
+ /**
+ * Paints the start of a group test.
+ * @param string $test_name Name of test or other label.
+ * @param integer $size Number of test cases starting.
+ * @access public
+ */
+ function paintGroupStart($test_name, $size) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintGroupStart($test_name, $size);
+ }
+ }
+
+ /**
+ * Paints the end of a group test.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintGroupEnd($test_name) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintGroupEnd($test_name);
+ }
+ }
+
+ /**
+ * Paints the start of a test case.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintCaseStart($test_name) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintCaseStart($test_name);
+ }
+ }
+
+ /**
+ * Paints the end of a test case.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintCaseEnd($test_name) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintCaseEnd($test_name);
+ }
+ }
+
+ /**
+ * Paints the start of a test method.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintMethodStart($test_name) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintMethodStart($test_name);
+ }
+ }
+
+ /**
+ * Paints the end of a test method.
+ * @param string $test_name Name of test or other label.
+ * @access public
+ */
+ function paintMethodEnd($test_name) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintMethodEnd($test_name);
+ }
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $message Message is ignored.
+ * @access public
+ */
+ function paintPass($message) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintPass($message);
+ }
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $message Message is ignored.
+ * @access public
+ */
+ function paintFail($message) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintFail($message);
+ }
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $message Text of error formatted by
+ * the test case.
+ * @access public
+ */
+ function paintError($message) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintError($message);
+ }
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param Exception $exception Exception to display.
+ * @access public
+ */
+ function paintException($exception) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintException($exception);
+ }
+ }
+
+ /**
+ * Prints the message for skipping tests.
+ * @param string $message Text of skip condition.
+ * @access public
+ */
+ function paintSkip($message) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintSkip($message);
+ }
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $message Text to display.
+ * @access public
+ */
+ function paintMessage($message) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintMessage($message);
+ }
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $message Text to display.
+ * @access public
+ */
+ function paintFormattedMessage($message) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintFormattedMessage($message);
+ }
+ }
+
+ /**
+ * Chains to the wrapped reporter.
+ * @param string $type Event type as text.
+ * @param mixed $payload Message or object.
+ * @return boolean Should return false if this
+ * type of signal should fail the
+ * test suite.
+ * @access public
+ */
+ function paintSignal($type, &$payload) {
+ for ($i = 0; $i < count($this->_reporters); $i++) {
+ $this->_reporters[$i]->paintSignal($type, $payload);
+ }
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/selector.php b/vendors/simpletest/selector.php
new file mode 100644
index 000000000..de044b85a
--- /dev/null
+++ b/vendors/simpletest/selector.php
@@ -0,0 +1,137 @@
+<?php
+/**
+ * Base include file for SimpleTest.
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: selector.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include SimpleTest files
+ */
+require_once(dirname(__FILE__) . '/tag.php');
+require_once(dirname(__FILE__) . '/encoding.php');
+/**#@-*/
+
+/**
+ * Used to extract form elements for testing against.
+ * Searches by name attribute.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleByName {
+ var $_name;
+
+ /**
+ * Stashes the name for later comparison.
+ * @param string $name Name attribute to match.
+ */
+ function SimpleByName($name) {
+ $this->_name = $name;
+ }
+
+ function getName() {
+ return $this->_name;
+ }
+
+ /**
+ * Compares with name attribute of widget.
+ * @param SimpleWidget $widget Control to compare.
+ * @access public
+ */
+ function isMatch($widget) {
+ return ($widget->getName() == $this->_name);
+ }
+}
+
+/**
+ * Used to extract form elements for testing against.
+ * Searches by visible label or alt text.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleByLabel {
+ var $_label;
+
+ /**
+ * Stashes the name for later comparison.
+ * @param string $label Visible text to match.
+ */
+ function SimpleByLabel($label) {
+ $this->_label = $label;
+ }
+
+ /**
+ * Comparison. Compares visible text of widget or
+ * related label.
+ * @param SimpleWidget $widget Control to compare.
+ * @access public
+ */
+ function isMatch($widget) {
+ if (! method_exists($widget, 'isLabel')) {
+ return false;
+ }
+ return $widget->isLabel($this->_label);
+ }
+}
+
+/**
+ * Used to extract form elements for testing against.
+ * Searches dy id attribute.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleById {
+ var $_id;
+
+ /**
+ * Stashes the name for later comparison.
+ * @param string $id ID atribute to match.
+ */
+ function SimpleById($id) {
+ $this->_id = $id;
+ }
+
+ /**
+ * Comparison. Compares id attribute of widget.
+ * @param SimpleWidget $widget Control to compare.
+ * @access public
+ */
+ function isMatch($widget) {
+ return $widget->isId($this->_id);
+ }
+}
+
+/**
+ * Used to extract form elements for testing against.
+ * Searches by visible label, name or alt text.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleByLabelOrName {
+ var $_label;
+
+ /**
+ * Stashes the name/label for later comparison.
+ * @param string $label Visible text to match.
+ */
+ function SimpleByLabelOrName($label) {
+ $this->_label = $label;
+ }
+
+ /**
+ * Comparison. Compares visible text of widget or
+ * related label or name.
+ * @param SimpleWidget $widget Control to compare.
+ * @access public
+ */
+ function isMatch($widget) {
+ if (method_exists($widget, 'isLabel')) {
+ if ($widget->isLabel($this->_label)) {
+ return true;
+ }
+ }
+ return ($widget->getName() == $this->_label);
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/shell_tester.php b/vendors/simpletest/shell_tester.php
new file mode 100644
index 000000000..7b98869ec
--- /dev/null
+++ b/vendors/simpletest/shell_tester.php
@@ -0,0 +1,333 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: shell_tester.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/test_case.php');
+/**#@-*/
+
+/**
+ * Wrapper for exec() functionality.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleShell {
+ var $_output;
+
+ /**
+ * Executes the shell comand and stashes the output.
+ * @access public
+ */
+ function SimpleShell() {
+ $this->_output = false;
+ }
+
+ /**
+ * Actually runs the command. Does not trap the
+ * error stream output as this need PHP 4.3+.
+ * @param string $command The actual command line
+ * to run.
+ * @return integer Exit code.
+ * @access public
+ */
+ function execute($command) {
+ $this->_output = false;
+ exec($command, $this->_output, $ret);
+ return $ret;
+ }
+
+ /**
+ * Accessor for the last output.
+ * @return string Output as text.
+ * @access public
+ */
+ function getOutput() {
+ return implode("\n", $this->_output);
+ }
+
+ /**
+ * Accessor for the last output.
+ * @return array Output as array of lines.
+ * @access public
+ */
+ function getOutputAsList() {
+ return $this->_output;
+ }
+}
+
+/**
+ * Test case for testing of command line scripts and
+ * utilities. Usually scripts that are external to the
+ * PHP code, but support it in some way.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class ShellTestCase extends SimpleTestCase {
+ var $_current_shell;
+ var $_last_status;
+ var $_last_command;
+
+ /**
+ * Creates an empty test case. Should be subclassed
+ * with test methods for a functional test case.
+ * @param string $label Name of test case. Will use
+ * the class name if none specified.
+ * @access public
+ */
+ function ShellTestCase($label = false) {
+ $this->SimpleTestCase($label);
+ $this->_current_shell = &$this->_createShell();
+ $this->_last_status = false;
+ $this->_last_command = '';
+ }
+
+ /**
+ * Executes a command and buffers the results.
+ * @param string $command Command to run.
+ * @return boolean True if zero exit code.
+ * @access public
+ */
+ function execute($command) {
+ $shell = &$this->_getShell();
+ $this->_last_status = $shell->execute($command);
+ $this->_last_command = $command;
+ return ($this->_last_status === 0);
+ }
+
+ /**
+ * Dumps the output of the last command.
+ * @access public
+ */
+ function dumpOutput() {
+ $this->dump($this->getOutput());
+ }
+
+ /**
+ * Accessor for the last output.
+ * @return string Output as text.
+ * @access public
+ */
+ function getOutput() {
+ $shell = &$this->_getShell();
+ return $shell->getOutput();
+ }
+
+ /**
+ * Accessor for the last output.
+ * @return array Output as array of lines.
+ * @access public
+ */
+ function getOutputAsList() {
+ $shell = &$this->_getShell();
+ return $shell->getOutputAsList();
+ }
+
+ /**
+ * Called from within the test methods to register
+ * passes and failures.
+ * @param boolean $result Pass on true.
+ * @param string $message Message to display describing
+ * the test state.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertTrue($result, $message = false) {
+ return $this->assert(new TrueExpectation(), $result, $message);
+ }
+
+ /**
+ * Will be true on false and vice versa. False
+ * is the PHP definition of false, so that null,
+ * empty strings, zero and an empty array all count
+ * as false.
+ * @param boolean $result Pass on false.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertFalse($result, $message = '%s') {
+ return $this->assert(new FalseExpectation(), $result, $message);
+ }
+
+ /**
+ * Will trigger a pass if the two parameters have
+ * the same value only. Otherwise a fail. This
+ * is for testing hand extracted text, etc.
+ * @param mixed $first Value to compare.
+ * @param mixed $second Value to compare.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertEqual($first, $second, $message = "%s") {
+ return $this->assert(
+ new EqualExpectation($first),
+ $second,
+ $message);
+ }
+
+ /**
+ * Will trigger a pass if the two parameters have
+ * a different value. Otherwise a fail. This
+ * is for testing hand extracted text, etc.
+ * @param mixed $first Value to compare.
+ * @param mixed $second Value to compare.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertNotEqual($first, $second, $message = "%s") {
+ return $this->assert(
+ new NotEqualExpectation($first),
+ $second,
+ $message);
+ }
+
+ /**
+ * Tests the last status code from the shell.
+ * @param integer $status Expected status of last
+ * command.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertExitCode($status, $message = "%s") {
+ $message = sprintf($message, "Expected status code of [$status] from [" .
+ $this->_last_command . "], but got [" .
+ $this->_last_status . "]");
+ return $this->assertTrue($status === $this->_last_status, $message);
+ }
+
+ /**
+ * Attempt to exactly match the combined STDERR and
+ * STDOUT output.
+ * @param string $expected Expected output.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertOutput($expected, $message = "%s") {
+ $shell = &$this->_getShell();
+ return $this->assert(
+ new EqualExpectation($expected),
+ $shell->getOutput(),
+ $message);
+ }
+
+ /**
+ * Scans the output for a Perl regex. If found
+ * anywhere it passes, else it fails.
+ * @param string $pattern Regex to search for.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertOutputPattern($pattern, $message = "%s") {
+ $shell = &$this->_getShell();
+ return $this->assert(
+ new PatternExpectation($pattern),
+ $shell->getOutput(),
+ $message);
+ }
+
+ /**
+ * If a Perl regex is found anywhere in the current
+ * output then a failure is generated, else a pass.
+ * @param string $pattern Regex to search for.
+ * @param $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertNoOutputPattern($pattern, $message = "%s") {
+ $shell = &$this->_getShell();
+ return $this->assert(
+ new NoPatternExpectation($pattern),
+ $shell->getOutput(),
+ $message);
+ }
+
+ /**
+ * File existence check.
+ * @param string $path Full filename and path.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertFileExists($path, $message = "%s") {
+ $message = sprintf($message, "File [$path] should exist");
+ return $this->assertTrue(file_exists($path), $message);
+ }
+
+ /**
+ * File non-existence check.
+ * @param string $path Full filename and path.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertFileNotExists($path, $message = "%s") {
+ $message = sprintf($message, "File [$path] should not exist");
+ return $this->assertFalse(file_exists($path), $message);
+ }
+
+ /**
+ * Scans a file for a Perl regex. If found
+ * anywhere it passes, else it fails.
+ * @param string $pattern Regex to search for.
+ * @param string $path Full filename and path.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertFilePattern($pattern, $path, $message = "%s") {
+ $shell = &$this->_getShell();
+ return $this->assert(
+ new PatternExpectation($pattern),
+ implode('', file($path)),
+ $message);
+ }
+
+ /**
+ * If a Perl regex is found anywhere in the named
+ * file then a failure is generated, else a pass.
+ * @param string $pattern Regex to search for.
+ * @param string $path Full filename and path.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertNoFilePattern($pattern, $path, $message = "%s") {
+ $shell = &$this->_getShell();
+ return $this->assert(
+ new NoPatternExpectation($pattern),
+ implode('', file($path)),
+ $message);
+ }
+
+ /**
+ * Accessor for current shell. Used for testing the
+ * the tester itself.
+ * @return Shell Current shell.
+ * @access protected
+ */
+ function &_getShell() {
+ return $this->_current_shell;
+ }
+
+ /**
+ * Factory for the shell to run the command on.
+ * @return Shell New shell object.
+ * @access protected
+ */
+ function &_createShell() {
+ $shell = &new SimpleShell();
+ return $shell;
+ }
+}
+?>
diff --git a/vendors/simpletest/simpletest.php b/vendors/simpletest/simpletest.php
new file mode 100644
index 000000000..bab2c1a6a
--- /dev/null
+++ b/vendors/simpletest/simpletest.php
@@ -0,0 +1,478 @@
+<?php
+/**
+ * Global state for SimpleTest and kicker script in future versions.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: simpletest.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include SimpleTest files
+ */
+if (version_compare(phpversion(), '5') >= 0) {
+ require_once(dirname(__FILE__) . '/reflection_php5.php');
+} else {
+ require_once(dirname(__FILE__) . '/reflection_php4.php');
+}
+require_once(dirname(__FILE__) . '/default_reporter.php');
+require_once(dirname(__FILE__) . '/compatibility.php');
+/**#@-*/
+
+/**
+ * Registry and test context. Includes a few
+ * global options that I'm slowly getting rid of.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleTest {
+
+ /**
+ * Reads the SimpleTest version from the release file.
+ * @return string Version string.
+ * @static
+ * @access public
+ */
+ function getVersion() {
+ $content = file(dirname(__FILE__) . '/VERSION');
+ return trim($content[0]);
+ }
+
+ /**
+ * Sets the name of a test case to ignore, usually
+ * because the class is an abstract case that should
+ * not be run. Once PHP4 is dropped this will disappear
+ * as a public method and "abstract" will rule.
+ * @param string $class Add a class to ignore.
+ * @static
+ * @access public
+ */
+ function ignore($class) {
+ $registry = &SimpleTest::_getRegistry();
+ $registry['IgnoreList'][strtolower($class)] = true;
+ }
+
+ /**
+ * Scans the now complete ignore list, and adds
+ * all parent classes to the list. If a class
+ * is not a runnable test case, then it's parents
+ * wouldn't be either. This is syntactic sugar
+ * to cut down on ommissions of ignore()'s or
+ * missing abstract declarations. This cannot
+ * be done whilst loading classes wiithout forcing
+ * a particular order on the class declarations and
+ * the ignore() calls. It's just nice to have the ignore()
+ * calls at the top of the file before the actual declarations.
+ * @param array $classes Class names of interest.
+ * @static
+ * @access public
+ */
+ function ignoreParentsIfIgnored($classes) {
+ $registry = &SimpleTest::_getRegistry();
+ foreach ($classes as $class) {
+ if (SimpleTest::isIgnored($class)) {
+ $reflection = new SimpleReflection($class);
+ if ($parent = $reflection->getParent()) {
+ SimpleTest::ignore($parent);
+ }
+ }
+ }
+ }
+
+ /**
+ * Puts the object to the global pool of 'preferred' objects
+ * which can be retrieved with SimpleTest :: preferred() method.
+ * Instances of the same class are overwritten.
+ * @param object $object Preferred object
+ * @static
+ * @access public
+ * @see preferred()
+ */
+ function prefer(&$object) {
+ $registry = &SimpleTest::_getRegistry();
+ $registry['Preferred'][] = &$object;
+ }
+
+ /**
+ * Retrieves 'preferred' objects from global pool. Class filter
+ * can be applied in order to retrieve the object of the specific
+ * class
+ * @param array|string $classes Allowed classes or interfaces.
+ * @static
+ * @access public
+ * @return array|object|null
+ * @see prefer()
+ */
+ function &preferred($classes) {
+ if (! is_array($classes)) {
+ $classes = array($classes);
+ }
+ $registry = &SimpleTest::_getRegistry();
+ for ($i = count($registry['Preferred']) - 1; $i >= 0; $i--) {
+ foreach ($classes as $class) {
+ if (SimpleTestCompatibility::isA($registry['Preferred'][$i], $class)) {
+ return $registry['Preferred'][$i];
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Test to see if a test case is in the ignore
+ * list. Quite obviously the ignore list should
+ * be a separate object and will be one day.
+ * This method is internal to SimpleTest. Don't
+ * use it.
+ * @param string $class Class name to test.
+ * @return boolean True if should not be run.
+ * @access public
+ * @static
+ */
+ function isIgnored($class) {
+ $registry = &SimpleTest::_getRegistry();
+ return isset($registry['IgnoreList'][strtolower($class)]);
+ }
+
+ /**
+ * @deprecated
+ */
+ function setMockBaseClass($mock_base) {
+ $registry = &SimpleTest::_getRegistry();
+ $registry['MockBaseClass'] = $mock_base;
+ }
+
+ /**
+ * @deprecated
+ */
+ function getMockBaseClass() {
+ $registry = &SimpleTest::_getRegistry();
+ return $registry['MockBaseClass'];
+ }
+
+ /**
+ * Sets proxy to use on all requests for when
+ * testing from behind a firewall. Set host
+ * to false to disable. This will take effect
+ * if there are no other proxy settings.
+ * @param string $proxy Proxy host as URL.
+ * @param string $username Proxy username for authentication.
+ * @param string $password Proxy password for authentication.
+ * @access public
+ */
+ function useProxy($proxy, $username = false, $password = false) {
+ $registry = &SimpleTest::_getRegistry();
+ $registry['DefaultProxy'] = $proxy;
+ $registry['DefaultProxyUsername'] = $username;
+ $registry['DefaultProxyPassword'] = $password;
+ }
+
+ /**
+ * Accessor for default proxy host.
+ * @return string Proxy URL.
+ * @access public
+ */
+ function getDefaultProxy() {
+ $registry = &SimpleTest::_getRegistry();
+ return $registry['DefaultProxy'];
+ }
+
+ /**
+ * Accessor for default proxy username.
+ * @return string Proxy username for authentication.
+ * @access public
+ */
+ function getDefaultProxyUsername() {
+ $registry = &SimpleTest::_getRegistry();
+ return $registry['DefaultProxyUsername'];
+ }
+
+ /**
+ * Accessor for default proxy password.
+ * @return string Proxy password for authentication.
+ * @access public
+ */
+ function getDefaultProxyPassword() {
+ $registry = &SimpleTest::_getRegistry();
+ return $registry['DefaultProxyPassword'];
+ }
+
+ /**
+ * Accessor for global registry of options.
+ * @return hash All stored values.
+ * @access private
+ * @static
+ */
+ function &_getRegistry() {
+ static $registry = false;
+ if (! $registry) {
+ $registry = SimpleTest::_getDefaults();
+ }
+ return $registry;
+ }
+
+ /**
+ * Accessor for the context of the current
+ * test run.
+ * @return SimpleTestContext Current test run.
+ * @access public
+ * @static
+ */
+ function &getContext() {
+ static $context = false;
+ if (! $context) {
+ $context = new SimpleTestContext();
+ }
+ return $context;
+ }
+
+ /**
+ * Constant default values.
+ * @return hash All registry defaults.
+ * @access private
+ * @static
+ */
+ function _getDefaults() {
+ return array(
+ 'StubBaseClass' => 'SimpleStub',
+ 'MockBaseClass' => 'SimpleMock',
+ 'IgnoreList' => array(),
+ 'DefaultProxy' => false,
+ 'DefaultProxyUsername' => false,
+ 'DefaultProxyPassword' => false,
+ 'Preferred' => array(new HtmlReporter(), new TextReporter(), new XmlReporter()));
+ }
+}
+
+/**
+ * Container for all components for a specific
+ * test run. Makes things like error queues
+ * available to PHP event handlers, and also
+ * gets around some nasty reference issues in
+ * the mocks.
+ * @package SimpleTest
+ */
+class SimpleTestContext {
+ var $_test;
+ var $_reporter;
+ var $_resources;
+
+ /**
+ * Clears down the current context.
+ * @access public
+ */
+ function clear() {
+ $this->_resources = array();
+ }
+
+ /**
+ * Sets the current test case instance. This
+ * global instance can be used by the mock objects
+ * to send message to the test cases.
+ * @param SimpleTestCase $test Test case to register.
+ * @access public
+ */
+ function setTest(&$test) {
+ $this->clear();
+ $this->_test = &$test;
+ }
+
+ /**
+ * Accessor for currently running test case.
+ * @return SimpleTestCase Current test.
+ * @access public
+ */
+ function &getTest() {
+ return $this->_test;
+ }
+
+ /**
+ * Sets the current reporter. This
+ * global instance can be used by the mock objects
+ * to send messages.
+ * @param SimpleReporter $reporter Reporter to register.
+ * @access public
+ */
+ function setReporter(&$reporter) {
+ $this->clear();
+ $this->_reporter = &$reporter;
+ }
+
+ /**
+ * Accessor for current reporter.
+ * @return SimpleReporter Current reporter.
+ * @access public
+ */
+ function &getReporter() {
+ return $this->_reporter;
+ }
+
+ /**
+ * Accessor for the Singleton resource.
+ * @return object Global resource.
+ * @access public
+ * @static
+ */
+ function &get($resource) {
+ if (! isset($this->_resources[$resource])) {
+ $this->_resources[$resource] = &new $resource();
+ }
+ return $this->_resources[$resource];
+ }
+}
+
+/**
+ * Interrogates the stack trace to recover the
+ * failure point.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleStackTrace {
+ var $_prefixes;
+
+ /**
+ * Stashes the list of target prefixes.
+ * @param array $prefixes List of method prefixes
+ * to search for.
+ */
+ function SimpleStackTrace($prefixes) {
+ $this->_prefixes = $prefixes;
+ }
+
+ /**
+ * Extracts the last method name that was not within
+ * Simpletest itself. Captures a stack trace if none given.
+ * @param array $stack List of stack frames.
+ * @return string Snippet of test report with line
+ * number and file.
+ * @access public
+ */
+ function traceMethod($stack = false) {
+ $stack = $stack ? $stack : $this->_captureTrace();
+ foreach ($stack as $frame) {
+ if ($this->_frameLiesWithinSimpleTestFolder($frame)) {
+ continue;
+ }
+ if ($this->_frameMatchesPrefix($frame)) {
+ return ' at [' . $frame['file'] . ' line ' . $frame['line'] . ']';
+ }
+ }
+ return '';
+ }
+
+ /**
+ * Test to see if error is generated by SimpleTest itself.
+ * @param array $frame PHP stack frame.
+ * @return boolean True if a SimpleTest file.
+ * @access private
+ */
+ function _frameLiesWithinSimpleTestFolder($frame) {
+ if (isset($frame['file'])) {
+ $path = substr(SIMPLE_TEST, 0, -1);
+ if (strpos($frame['file'], $path) === 0) {
+ if (dirname($frame['file']) == $path) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Tries to determine if the method call is an assert, etc.
+ * @param array $frame PHP stack frame.
+ * @return boolean True if matches a target.
+ * @access private
+ */
+ function _frameMatchesPrefix($frame) {
+ foreach ($this->_prefixes as $prefix) {
+ if (strncmp($frame['function'], $prefix, strlen($prefix)) == 0) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Grabs a current stack trace.
+ * @return array Fulle trace.
+ * @access private
+ */
+ function _captureTrace() {
+ if (function_exists('debug_backtrace')) {
+ return array_reverse(debug_backtrace());
+ }
+ return array();
+ }
+}
+
+/**
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @deprecated
+ */
+class SimpleTestOptions extends SimpleTest {
+
+ /**
+ * @deprecated
+ */
+ function getVersion() {
+ return Simpletest::getVersion();
+ }
+
+ /**
+ * @deprecated
+ */
+ function ignore($class) {
+ return Simpletest::ignore($class);
+ }
+
+ /**
+ * @deprecated
+ */
+ function isIgnored($class) {
+ return Simpletest::isIgnored($class);
+ }
+
+ /**
+ * @deprecated
+ */
+ function setMockBaseClass($mock_base) {
+ return Simpletest::setMockBaseClass($mock_base);
+ }
+
+ /**
+ * @deprecated
+ */
+ function getMockBaseClass() {
+ return Simpletest::getMockBaseClass();
+ }
+
+ /**
+ * @deprecated
+ */
+ function useProxy($proxy, $username = false, $password = false) {
+ return Simpletest::useProxy($proxy, $username, $password);
+ }
+
+ /**
+ * @deprecated
+ */
+ function getDefaultProxy() {
+ return Simpletest::getDefaultProxy();
+ }
+
+ /**
+ * @deprecated
+ */
+ function getDefaultProxyUsername() {
+ return Simpletest::getDefaultProxyUsername();
+ }
+
+ /**
+ * @deprecated
+ */
+ function getDefaultProxyPassword() {
+ return Simpletest::getDefaultProxyPassword();
+ }
+}
+?>
diff --git a/vendors/simpletest/socket.php b/vendors/simpletest/socket.php
new file mode 100644
index 000000000..3ad5a9ff4
--- /dev/null
+++ b/vendors/simpletest/socket.php
@@ -0,0 +1,216 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage MockObjects
+ * @version $Id: socket.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include SimpleTest files
+ */
+require_once(dirname(__FILE__) . '/compatibility.php');
+/**#@-*/
+
+/**
+ * Stashes an error for later. Useful for constructors
+ * until PHP gets exceptions.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleStickyError {
+ var $_error = 'Constructor not chained';
+
+ /**
+ * Sets the error to empty.
+ * @access public
+ */
+ function SimpleStickyError() {
+ $this->_clearError();
+ }
+
+ /**
+ * Test for an outstanding error.
+ * @return boolean True if there is an error.
+ * @access public
+ */
+ function isError() {
+ return ($this->_error != '');
+ }
+
+ /**
+ * Accessor for an outstanding error.
+ * @return string Empty string if no error otherwise
+ * the error message.
+ * @access public
+ */
+ function getError() {
+ return $this->_error;
+ }
+
+ /**
+ * Sets the internal error.
+ * @param string Error message to stash.
+ * @access protected
+ */
+ function _setError($error) {
+ $this->_error = $error;
+ }
+
+ /**
+ * Resets the error state to no error.
+ * @access protected
+ */
+ function _clearError() {
+ $this->_setError('');
+ }
+}
+
+/**
+ * Wrapper for TCP/IP socket.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleSocket extends SimpleStickyError {
+ var $_handle;
+ var $_is_open = false;
+ var $_sent = '';
+ var $lock_size;
+
+ /**
+ * Opens a socket for reading and writing.
+ * @param string $host Hostname to send request to.
+ * @param integer $port Port on remote machine to open.
+ * @param integer $timeout Connection timeout in seconds.
+ * @param integer $block_size Size of chunk to read.
+ * @access public
+ */
+ function SimpleSocket($host, $port, $timeout, $block_size = 255) {
+ $this->SimpleStickyError();
+ if (! ($this->_handle = $this->_openSocket($host, $port, $error_number, $error, $timeout))) {
+ $this->_setError("Cannot open [$host:$port] with [$error] within [$timeout] seconds");
+ return;
+ }
+ $this->_is_open = true;
+ $this->_block_size = $block_size;
+ SimpleTestCompatibility::setTimeout($this->_handle, $timeout);
+ }
+
+ /**
+ * Writes some data to the socket and saves alocal copy.
+ * @param string $message String to send to socket.
+ * @return boolean True if successful.
+ * @access public
+ */
+ function write($message) {
+ if ($this->isError() || ! $this->isOpen()) {
+ return false;
+ }
+ $count = fwrite($this->_handle, $message);
+ if (! $count) {
+ if ($count === false) {
+ $this->_setError('Cannot write to socket');
+ $this->close();
+ }
+ return false;
+ }
+ fflush($this->_handle);
+ $this->_sent .= $message;
+ return true;
+ }
+
+ /**
+ * Reads data from the socket. The error suppresion
+ * is a workaround for PHP4 always throwing a warning
+ * with a secure socket.
+ * @return integer/boolean Incoming bytes. False
+ * on error.
+ * @access public
+ */
+ function read() {
+ if ($this->isError() || ! $this->isOpen()) {
+ return false;
+ }
+ $raw = @fread($this->_handle, $this->_block_size);
+ if ($raw === false) {
+ $this->_setError('Cannot read from socket');
+ $this->close();
+ }
+ return $raw;
+ }
+
+ /**
+ * Accessor for socket open state.
+ * @return boolean True if open.
+ * @access public
+ */
+ function isOpen() {
+ return $this->_is_open;
+ }
+
+ /**
+ * Closes the socket preventing further reads.
+ * Cannot be reopened once closed.
+ * @return boolean True if successful.
+ * @access public
+ */
+ function close() {
+ $this->_is_open = false;
+ return fclose($this->_handle);
+ }
+
+ /**
+ * Accessor for content so far.
+ * @return string Bytes sent only.
+ * @access public
+ */
+ function getSent() {
+ return $this->_sent;
+ }
+
+ /**
+ * Actually opens the low level socket.
+ * @param string $host Host to connect to.
+ * @param integer $port Port on host.
+ * @param integer $error_number Recipient of error code.
+ * @param string $error Recipoent of error message.
+ * @param integer $timeout Maximum time to wait for connection.
+ * @access protected
+ */
+ function _openSocket($host, $port, &$error_number, &$error, $timeout) {
+ return @fsockopen($host, $port, $error_number, $error, $timeout);
+ }
+}
+
+/**
+ * Wrapper for TCP/IP socket over TLS.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleSecureSocket extends SimpleSocket {
+
+ /**
+ * Opens a secure socket for reading and writing.
+ * @param string $host Hostname to send request to.
+ * @param integer $port Port on remote machine to open.
+ * @param integer $timeout Connection timeout in seconds.
+ * @access public
+ */
+ function SimpleSecureSocket($host, $port, $timeout) {
+ $this->SimpleSocket($host, $port, $timeout);
+ }
+
+ /**
+ * Actually opens the low level socket.
+ * @param string $host Host to connect to.
+ * @param integer $port Port on host.
+ * @param integer $error_number Recipient of error code.
+ * @param string $error Recipient of error message.
+ * @param integer $timeout Maximum time to wait for connection.
+ * @access protected
+ */
+ function _openSocket($host, $port, &$error_number, &$error, $timeout) {
+ return parent::_openSocket("tls://$host", $port, $error_number, $error, $timeout);
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/tag.php b/vendors/simpletest/tag.php
new file mode 100644
index 000000000..7bccae205
--- /dev/null
+++ b/vendors/simpletest/tag.php
@@ -0,0 +1,1418 @@
+<?php
+/**
+ * Base include file for SimpleTest.
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: tag.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include SimpleTest files
+ */
+require_once(dirname(__FILE__) . '/parser.php');
+require_once(dirname(__FILE__) . '/encoding.php');
+/**#@-*/
+
+/**
+ * HTML or XML tag.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleTag {
+ var $_name;
+ var $_attributes;
+ var $_content;
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param string $name Tag name.
+ * @param hash $attributes Attribute names and
+ * string values. Note that
+ * the keys must have been
+ * converted to lower case.
+ */
+ function SimpleTag($name, $attributes) {
+ $this->_name = strtolower(trim($name));
+ $this->_attributes = $attributes;
+ $this->_content = '';
+ }
+
+ /**
+ * Check to see if the tag can have both start and
+ * end tags with content in between.
+ * @return boolean True if content allowed.
+ * @access public
+ */
+ function expectEndTag() {
+ return true;
+ }
+
+ /**
+ * The current tag should not swallow all content for
+ * itself as it's searchable page content. Private
+ * content tags are usually widgets that contain default
+ * values.
+ * @return boolean False as content is available
+ * to other tags by default.
+ * @access public
+ */
+ function isPrivateContent() {
+ return false;
+ }
+
+ /**
+ * Appends string content to the current content.
+ * @param string $content Additional text.
+ * @access public
+ */
+ function addContent($content) {
+ $this->_content .= (string)$content;
+ }
+
+ /**
+ * Adds an enclosed tag to the content.
+ * @param SimpleTag $tag New tag.
+ * @access public
+ */
+ function addTag(&$tag) {
+ }
+
+ /**
+ * Accessor for tag name.
+ * @return string Name of tag.
+ * @access public
+ */
+ function getTagName() {
+ return $this->_name;
+ }
+
+ /**
+ * List of legal child elements.
+ * @return array List of element names.
+ * @access public
+ */
+ function getChildElements() {
+ return array();
+ }
+
+ /**
+ * Accessor for an attribute.
+ * @param string $label Attribute name.
+ * @return string Attribute value.
+ * @access public
+ */
+ function getAttribute($label) {
+ $label = strtolower($label);
+ if (! isset($this->_attributes[$label])) {
+ return false;
+ }
+ return (string)$this->_attributes[$label];
+ }
+
+ /**
+ * Sets an attribute.
+ * @param string $label Attribute name.
+ * @return string $value New attribute value.
+ * @access protected
+ */
+ function _setAttribute($label, $value) {
+ $this->_attributes[strtolower($label)] = $value;
+ }
+
+ /**
+ * Accessor for the whole content so far.
+ * @return string Content as big raw string.
+ * @access public
+ */
+ function getContent() {
+ return $this->_content;
+ }
+
+ /**
+ * Accessor for content reduced to visible text. Acts
+ * like a text mode browser, normalising space and
+ * reducing images to their alt text.
+ * @return string Content as plain text.
+ * @access public
+ */
+ function getText() {
+ return SimpleHtmlSaxParser::normalise($this->_content);
+ }
+
+ /**
+ * Test to see if id attribute matches.
+ * @param string $id ID to test against.
+ * @return boolean True on match.
+ * @access public
+ */
+ function isId($id) {
+ return ($this->getAttribute('id') == $id);
+ }
+}
+
+/**
+ * Base url.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleBaseTag extends SimpleTag {
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleBaseTag($attributes) {
+ $this->SimpleTag('base', $attributes);
+ }
+
+ /**
+ * Base tag is not a block tag.
+ * @return boolean false
+ * @access public
+ */
+ function expectEndTag() {
+ return false;
+ }
+}
+
+/**
+ * Page title.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleTitleTag extends SimpleTag {
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleTitleTag($attributes) {
+ $this->SimpleTag('title', $attributes);
+ }
+}
+
+/**
+ * Link.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleAnchorTag extends SimpleTag {
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleAnchorTag($attributes) {
+ $this->SimpleTag('a', $attributes);
+ }
+
+ /**
+ * Accessor for URL as string.
+ * @return string Coerced as string.
+ * @access public
+ */
+ function getHref() {
+ $url = $this->getAttribute('href');
+ if (is_bool($url)) {
+ $url = '';
+ }
+ return $url;
+ }
+}
+
+/**
+ * Form element.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleWidget extends SimpleTag {
+ var $_value;
+ var $_label;
+ var $_is_set;
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param string $name Tag name.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleWidget($name, $attributes) {
+ $this->SimpleTag($name, $attributes);
+ $this->_value = false;
+ $this->_label = false;
+ $this->_is_set = false;
+ }
+
+ /**
+ * Accessor for name submitted as the key in
+ * GET/POST variables hash.
+ * @return string Parsed value.
+ * @access public
+ */
+ function getName() {
+ return $this->getAttribute('name');
+ }
+
+ /**
+ * Accessor for default value parsed with the tag.
+ * @return string Parsed value.
+ * @access public
+ */
+ function getDefault() {
+ return $this->getAttribute('value');
+ }
+
+ /**
+ * Accessor for currently set value or default if
+ * none.
+ * @return string Value set by form or default
+ * if none.
+ * @access public
+ */
+ function getValue() {
+ if (! $this->_is_set) {
+ return $this->getDefault();
+ }
+ return $this->_value;
+ }
+
+ /**
+ * Sets the current form element value.
+ * @param string $value New value.
+ * @return boolean True if allowed.
+ * @access public
+ */
+ function setValue($value) {
+ $this->_value = $value;
+ $this->_is_set = true;
+ return true;
+ }
+
+ /**
+ * Resets the form element value back to the
+ * default.
+ * @access public
+ */
+ function resetValue() {
+ $this->_is_set = false;
+ }
+
+ /**
+ * Allows setting of a label externally, say by a
+ * label tag.
+ * @param string $label Label to attach.
+ * @access public
+ */
+ function setLabel($label) {
+ $this->_label = trim($label);
+ }
+
+ /**
+ * Reads external or internal label.
+ * @param string $label Label to test.
+ * @return boolean True is match.
+ * @access public
+ */
+ function isLabel($label) {
+ return $this->_label == trim($label);
+ }
+
+ /**
+ * Dispatches the value into the form encoded packet.
+ * @param SimpleEncoding $encoding Form packet.
+ * @access public
+ */
+ function write(&$encoding) {
+ if ($this->getName()) {
+ $encoding->add($this->getName(), $this->getValue());
+ }
+ }
+}
+
+/**
+ * Text, password and hidden field.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleTextTag extends SimpleWidget {
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleTextTag($attributes) {
+ $this->SimpleWidget('input', $attributes);
+ if ($this->getAttribute('value') === false) {
+ $this->_setAttribute('value', '');
+ }
+ }
+
+ /**
+ * Tag contains no content.
+ * @return boolean False.
+ * @access public
+ */
+ function expectEndTag() {
+ return false;
+ }
+
+ /**
+ * Sets the current form element value. Cannot
+ * change the value of a hidden field.
+ * @param string $value New value.
+ * @return boolean True if allowed.
+ * @access public
+ */
+ function setValue($value) {
+ if ($this->getAttribute('type') == 'hidden') {
+ return false;
+ }
+ return parent::setValue($value);
+ }
+}
+
+/**
+ * Submit button as input tag.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleSubmitTag extends SimpleWidget {
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleSubmitTag($attributes) {
+ $this->SimpleWidget('input', $attributes);
+ if ($this->getAttribute('value') === false) {
+ $this->_setAttribute('value', 'Submit');
+ }
+ }
+
+ /**
+ * Tag contains no end element.
+ * @return boolean False.
+ * @access public
+ */
+ function expectEndTag() {
+ return false;
+ }
+
+ /**
+ * Disables the setting of the button value.
+ * @param string $value Ignored.
+ * @return boolean True if allowed.
+ * @access public
+ */
+ function setValue($value) {
+ return false;
+ }
+
+ /**
+ * Value of browser visible text.
+ * @return string Visible label.
+ * @access public
+ */
+ function getLabel() {
+ return $this->getValue();
+ }
+
+ /**
+ * Test for a label match when searching.
+ * @param string $label Label to test.
+ * @return boolean True on match.
+ * @access public
+ */
+ function isLabel($label) {
+ return trim($label) == trim($this->getLabel());
+ }
+}
+
+/**
+ * Image button as input tag.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleImageSubmitTag extends SimpleWidget {
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleImageSubmitTag($attributes) {
+ $this->SimpleWidget('input', $attributes);
+ }
+
+ /**
+ * Tag contains no end element.
+ * @return boolean False.
+ * @access public
+ */
+ function expectEndTag() {
+ return false;
+ }
+
+ /**
+ * Disables the setting of the button value.
+ * @param string $value Ignored.
+ * @return boolean True if allowed.
+ * @access public
+ */
+ function setValue($value) {
+ return false;
+ }
+
+ /**
+ * Value of browser visible text.
+ * @return string Visible label.
+ * @access public
+ */
+ function getLabel() {
+ if ($this->getAttribute('title')) {
+ return $this->getAttribute('title');
+ }
+ return $this->getAttribute('alt');
+ }
+
+ /**
+ * Test for a label match when searching.
+ * @param string $label Label to test.
+ * @return boolean True on match.
+ * @access public
+ */
+ function isLabel($label) {
+ return trim($label) == trim($this->getLabel());
+ }
+
+ /**
+ * Dispatches the value into the form encoded packet.
+ * @param SimpleEncoding $encoding Form packet.
+ * @param integer $x X coordinate of click.
+ * @param integer $y Y coordinate of click.
+ * @access public
+ */
+ function write(&$encoding, $x, $y) {
+ if ($this->getName()) {
+ $encoding->add($this->getName() . '.x', $x);
+ $encoding->add($this->getName() . '.y', $y);
+ } else {
+ $encoding->add('x', $x);
+ $encoding->add('y', $y);
+ }
+ }
+}
+
+/**
+ * Submit button as button tag.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleButtonTag extends SimpleWidget {
+
+ /**
+ * Starts with a named tag with attributes only.
+ * Defaults are very browser dependent.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleButtonTag($attributes) {
+ $this->SimpleWidget('button', $attributes);
+ }
+
+ /**
+ * Check to see if the tag can have both start and
+ * end tags with content in between.
+ * @return boolean True if content allowed.
+ * @access public
+ */
+ function expectEndTag() {
+ return true;
+ }
+
+ /**
+ * Disables the setting of the button value.
+ * @param string $value Ignored.
+ * @return boolean True if allowed.
+ * @access public
+ */
+ function setValue($value) {
+ return false;
+ }
+
+ /**
+ * Value of browser visible text.
+ * @return string Visible label.
+ * @access public
+ */
+ function getLabel() {
+ return $this->getContent();
+ }
+
+ /**
+ * Test for a label match when searching.
+ * @param string $label Label to test.
+ * @return boolean True on match.
+ * @access public
+ */
+ function isLabel($label) {
+ return trim($label) == trim($this->getLabel());
+ }
+}
+
+/**
+ * Content tag for text area.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleTextAreaTag extends SimpleWidget {
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleTextAreaTag($attributes) {
+ $this->SimpleWidget('textarea', $attributes);
+ }
+
+ /**
+ * Accessor for starting value.
+ * @return string Parsed value.
+ * @access public
+ */
+ function getDefault() {
+ return $this->_wrap(SimpleHtmlSaxParser::decodeHtml($this->getContent()));
+ }
+
+ /**
+ * Applies word wrapping if needed.
+ * @param string $value New value.
+ * @return boolean True if allowed.
+ * @access public
+ */
+ function setValue($value) {
+ return parent::setValue($this->_wrap($value));
+ }
+
+ /**
+ * Test to see if text should be wrapped.
+ * @return boolean True if wrapping on.
+ * @access private
+ */
+ function _wrapIsEnabled() {
+ if ($this->getAttribute('cols')) {
+ $wrap = $this->getAttribute('wrap');
+ if (($wrap == 'physical') || ($wrap == 'hard')) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Performs the formatting that is peculiar to
+ * this tag. There is strange behaviour in this
+ * one, including stripping a leading new line.
+ * Go figure. I am using Firefox as a guide.
+ * @param string $text Text to wrap.
+ * @return string Text wrapped with carriage
+ * returns and line feeds
+ * @access private
+ */
+ function _wrap($text) {
+ $text = str_replace("\r\r\n", "\r\n", str_replace("\n", "\r\n", $text));
+ $text = str_replace("\r\n\n", "\r\n", str_replace("\r", "\r\n", $text));
+ if (strncmp($text, "\r\n", strlen("\r\n")) == 0) {
+ $text = substr($text, strlen("\r\n"));
+ }
+ if ($this->_wrapIsEnabled()) {
+ return wordwrap(
+ $text,
+ (integer)$this->getAttribute('cols'),
+ "\r\n");
+ }
+ return $text;
+ }
+
+ /**
+ * The content of textarea is not part of the page.
+ * @return boolean True.
+ * @access public
+ */
+ function isPrivateContent() {
+ return true;
+ }
+}
+
+/**
+ * File upload widget.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleUploadTag extends SimpleWidget {
+
+ /**
+ * Starts with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleUploadTag($attributes) {
+ $this->SimpleWidget('input', $attributes);
+ }
+
+ /**
+ * Tag contains no content.
+ * @return boolean False.
+ * @access public
+ */
+ function expectEndTag() {
+ return false;
+ }
+
+ /**
+ * Dispatches the value into the form encoded packet.
+ * @param SimpleEncoding $encoding Form packet.
+ * @access public
+ */
+ function write(&$encoding) {
+ if (! file_exists($this->getValue())) {
+ return;
+ }
+ $encoding->attach(
+ $this->getName(),
+ implode('', file($this->getValue())),
+ basename($this->getValue()));
+ }
+}
+
+/**
+ * Drop down widget.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleSelectionTag extends SimpleWidget {
+ var $_options;
+ var $_choice;
+
+ /**
+ * Starts with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleSelectionTag($attributes) {
+ $this->SimpleWidget('select', $attributes);
+ $this->_options = array();
+ $this->_choice = false;
+ }
+
+ /**
+ * Adds an option tag to a selection field.
+ * @param SimpleOptionTag $tag New option.
+ * @access public
+ */
+ function addTag(&$tag) {
+ if ($tag->getTagName() == 'option') {
+ $this->_options[] = &$tag;
+ }
+ }
+
+ /**
+ * Text within the selection element is ignored.
+ * @param string $content Ignored.
+ * @access public
+ */
+ function addContent($content) {
+ }
+
+ /**
+ * Scans options for defaults. If none, then
+ * the first option is selected.
+ * @return string Selected field.
+ * @access public
+ */
+ function getDefault() {
+ for ($i = 0, $count = count($this->_options); $i < $count; $i++) {
+ if ($this->_options[$i]->getAttribute('selected') !== false) {
+ return $this->_options[$i]->getDefault();
+ }
+ }
+ if ($count > 0) {
+ return $this->_options[0]->getDefault();
+ }
+ return '';
+ }
+
+ /**
+ * Can only set allowed values.
+ * @param string $value New choice.
+ * @return boolean True if allowed.
+ * @access public
+ */
+ function setValue($value) {
+ for ($i = 0, $count = count($this->_options); $i < $count; $i++) {
+ if ($this->_options[$i]->isValue($value)) {
+ $this->_choice = $i;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Accessor for current selection value.
+ * @return string Value attribute or
+ * content of opton.
+ * @access public
+ */
+ function getValue() {
+ if ($this->_choice === false) {
+ return $this->getDefault();
+ }
+ return $this->_options[$this->_choice]->getValue();
+ }
+}
+
+/**
+ * Drop down widget.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class MultipleSelectionTag extends SimpleWidget {
+ var $_options;
+ var $_values;
+
+ /**
+ * Starts with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function MultipleSelectionTag($attributes) {
+ $this->SimpleWidget('select', $attributes);
+ $this->_options = array();
+ $this->_values = false;
+ }
+
+ /**
+ * Adds an option tag to a selection field.
+ * @param SimpleOptionTag $tag New option.
+ * @access public
+ */
+ function addTag(&$tag) {
+ if ($tag->getTagName() == 'option') {
+ $this->_options[] = &$tag;
+ }
+ }
+
+ /**
+ * Text within the selection element is ignored.
+ * @param string $content Ignored.
+ * @access public
+ */
+ function addContent($content) {
+ }
+
+ /**
+ * Scans options for defaults to populate the
+ * value array().
+ * @return array Selected fields.
+ * @access public
+ */
+ function getDefault() {
+ $default = array();
+ for ($i = 0, $count = count($this->_options); $i < $count; $i++) {
+ if ($this->_options[$i]->getAttribute('selected') !== false) {
+ $default[] = $this->_options[$i]->getDefault();
+ }
+ }
+ return $default;
+ }
+
+ /**
+ * Can only set allowed values. Any illegal value
+ * will result in a failure, but all correct values
+ * will be set.
+ * @param array $desired New choices.
+ * @return boolean True if all allowed.
+ * @access public
+ */
+ function setValue($desired) {
+ $achieved = array();
+ foreach ($desired as $value) {
+ $success = false;
+ for ($i = 0, $count = count($this->_options); $i < $count; $i++) {
+ if ($this->_options[$i]->isValue($value)) {
+ $achieved[] = $this->_options[$i]->getValue();
+ $success = true;
+ break;
+ }
+ }
+ if (! $success) {
+ return false;
+ }
+ }
+ $this->_values = $achieved;
+ return true;
+ }
+
+ /**
+ * Accessor for current selection value.
+ * @return array List of currently set options.
+ * @access public
+ */
+ function getValue() {
+ if ($this->_values === false) {
+ return $this->getDefault();
+ }
+ return $this->_values;
+ }
+}
+
+/**
+ * Option for selection field.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleOptionTag extends SimpleWidget {
+
+ /**
+ * Stashes the attributes.
+ */
+ function SimpleOptionTag($attributes) {
+ $this->SimpleWidget('option', $attributes);
+ }
+
+ /**
+ * Does nothing.
+ * @param string $value Ignored.
+ * @return boolean Not allowed.
+ * @access public
+ */
+ function setValue($value) {
+ return false;
+ }
+
+ /**
+ * Test to see if a value matches the option.
+ * @param string $compare Value to compare with.
+ * @return boolean True if possible match.
+ * @access public
+ */
+ function isValue($compare) {
+ $compare = trim($compare);
+ if (trim($this->getValue()) == $compare) {
+ return true;
+ }
+ return trim($this->getContent()) == $compare;
+ }
+
+ /**
+ * Accessor for starting value. Will be set to
+ * the option label if no value exists.
+ * @return string Parsed value.
+ * @access public
+ */
+ function getDefault() {
+ if ($this->getAttribute('value') === false) {
+ return $this->getContent();
+ }
+ return $this->getAttribute('value');
+ }
+
+ /**
+ * The content of options is not part of the page.
+ * @return boolean True.
+ * @access public
+ */
+ function isPrivateContent() {
+ return true;
+ }
+}
+
+/**
+ * Radio button.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleRadioButtonTag extends SimpleWidget {
+
+ /**
+ * Stashes the attributes.
+ * @param array $attributes Hash of attributes.
+ */
+ function SimpleRadioButtonTag($attributes) {
+ $this->SimpleWidget('input', $attributes);
+ if ($this->getAttribute('value') === false) {
+ $this->_setAttribute('value', 'on');
+ }
+ }
+
+ /**
+ * Tag contains no content.
+ * @return boolean False.
+ * @access public
+ */
+ function expectEndTag() {
+ return false;
+ }
+
+ /**
+ * The only allowed value sn the one in the
+ * "value" attribute.
+ * @param string $value New value.
+ * @return boolean True if allowed.
+ * @access public
+ */
+ function setValue($value) {
+ if ($value === false) {
+ return parent::setValue($value);
+ }
+ if ($value != $this->getAttribute('value')) {
+ return false;
+ }
+ return parent::setValue($value);
+ }
+
+ /**
+ * Accessor for starting value.
+ * @return string Parsed value.
+ * @access public
+ */
+ function getDefault() {
+ if ($this->getAttribute('checked') !== false) {
+ return $this->getAttribute('value');
+ }
+ return false;
+ }
+}
+
+/**
+ * Checkbox widget.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleCheckboxTag extends SimpleWidget {
+
+ /**
+ * Starts with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleCheckboxTag($attributes) {
+ $this->SimpleWidget('input', $attributes);
+ if ($this->getAttribute('value') === false) {
+ $this->_setAttribute('value', 'on');
+ }
+ }
+
+ /**
+ * Tag contains no content.
+ * @return boolean False.
+ * @access public
+ */
+ function expectEndTag() {
+ return false;
+ }
+
+ /**
+ * The only allowed value in the one in the
+ * "value" attribute. The default for this
+ * attribute is "on". If this widget is set to
+ * true, then the usual value will be taken.
+ * @param string $value New value.
+ * @return boolean True if allowed.
+ * @access public
+ */
+ function setValue($value) {
+ if ($value === false) {
+ return parent::setValue($value);
+ }
+ if ($value === true) {
+ return parent::setValue($this->getAttribute('value'));
+ }
+ if ($value != $this->getAttribute('value')) {
+ return false;
+ }
+ return parent::setValue($value);
+ }
+
+ /**
+ * Accessor for starting value. The default
+ * value is "on".
+ * @return string Parsed value.
+ * @access public
+ */
+ function getDefault() {
+ if ($this->getAttribute('checked') !== false) {
+ return $this->getAttribute('value');
+ }
+ return false;
+ }
+}
+
+/**
+ * A group of multiple widgets with some shared behaviour.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleTagGroup {
+ var $_widgets = array();
+
+ /**
+ * Adds a tag to the group.
+ * @param SimpleWidget $widget
+ * @access public
+ */
+ function addWidget(&$widget) {
+ $this->_widgets[] = &$widget;
+ }
+
+ /**
+ * Accessor to widget set.
+ * @return array All widgets.
+ * @access protected
+ */
+ function &_getWidgets() {
+ return $this->_widgets;
+ }
+
+ /**
+ * Accessor for an attribute.
+ * @param string $label Attribute name.
+ * @return boolean Always false.
+ * @access public
+ */
+ function getAttribute($label) {
+ return false;
+ }
+
+ /**
+ * Fetches the name for the widget from the first
+ * member.
+ * @return string Name of widget.
+ * @access public
+ */
+ function getName() {
+ if (count($this->_widgets) > 0) {
+ return $this->_widgets[0]->getName();
+ }
+ }
+
+ /**
+ * Scans the widgets for one with the appropriate
+ * ID field.
+ * @param string $id ID value to try.
+ * @return boolean True if matched.
+ * @access public
+ */
+ function isId($id) {
+ for ($i = 0, $count = count($this->_widgets); $i < $count; $i++) {
+ if ($this->_widgets[$i]->isId($id)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Scans the widgets for one with the appropriate
+ * attached label.
+ * @param string $label Attached label to try.
+ * @return boolean True if matched.
+ * @access public
+ */
+ function isLabel($label) {
+ for ($i = 0, $count = count($this->_widgets); $i < $count; $i++) {
+ if ($this->_widgets[$i]->isLabel($label)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Dispatches the value into the form encoded packet.
+ * @param SimpleEncoding $encoding Form packet.
+ * @access public
+ */
+ function write(&$encoding) {
+ $encoding->add($this->getName(), $this->getValue());
+ }
+}
+
+/**
+ * A group of tags with the same name within a form.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleCheckboxGroup extends SimpleTagGroup {
+
+ /**
+ * Accessor for current selected widget or false
+ * if none.
+ * @return string/array Widget values or false if none.
+ * @access public
+ */
+ function getValue() {
+ $values = array();
+ $widgets = &$this->_getWidgets();
+ for ($i = 0, $count = count($widgets); $i < $count; $i++) {
+ if ($widgets[$i]->getValue() !== false) {
+ $values[] = $widgets[$i]->getValue();
+ }
+ }
+ return $this->_coerceValues($values);
+ }
+
+ /**
+ * Accessor for starting value that is active.
+ * @return string/array Widget values or false if none.
+ * @access public
+ */
+ function getDefault() {
+ $values = array();
+ $widgets = &$this->_getWidgets();
+ for ($i = 0, $count = count($widgets); $i < $count; $i++) {
+ if ($widgets[$i]->getDefault() !== false) {
+ $values[] = $widgets[$i]->getDefault();
+ }
+ }
+ return $this->_coerceValues($values);
+ }
+
+ /**
+ * Accessor for current set values.
+ * @param string/array/boolean $values Either a single string, a
+ * hash or false for nothing set.
+ * @return boolean True if all values can be set.
+ * @access public
+ */
+ function setValue($values) {
+ $values = $this->_makeArray($values);
+ if (! $this->_valuesArePossible($values)) {
+ return false;
+ }
+ $widgets = &$this->_getWidgets();
+ for ($i = 0, $count = count($widgets); $i < $count; $i++) {
+ $possible = $widgets[$i]->getAttribute('value');
+ if (in_array($widgets[$i]->getAttribute('value'), $values)) {
+ $widgets[$i]->setValue($possible);
+ } else {
+ $widgets[$i]->setValue(false);
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Tests to see if a possible value set is legal.
+ * @param string/array/boolean $values Either a single string, a
+ * hash or false for nothing set.
+ * @return boolean False if trying to set a
+ * missing value.
+ * @access private
+ */
+ function _valuesArePossible($values) {
+ $matches = array();
+ $widgets = &$this->_getWidgets();
+ for ($i = 0, $count = count($widgets); $i < $count; $i++) {
+ $possible = $widgets[$i]->getAttribute('value');
+ if (in_array($possible, $values)) {
+ $matches[] = $possible;
+ }
+ }
+ return ($values == $matches);
+ }
+
+ /**
+ * Converts the output to an appropriate format. This means
+ * that no values is false, a single value is just that
+ * value and only two or more are contained in an array.
+ * @param array $values List of values of widgets.
+ * @return string/array/boolean Expected format for a tag.
+ * @access private
+ */
+ function _coerceValues($values) {
+ if (count($values) == 0) {
+ return false;
+ } elseif (count($values) == 1) {
+ return $values[0];
+ } else {
+ return $values;
+ }
+ }
+
+ /**
+ * Converts false or string into array. The opposite of
+ * the coercian method.
+ * @param string/array/boolean $value A single item is converted
+ * to a one item list. False
+ * gives an empty list.
+ * @return array List of values, possibly empty.
+ * @access private
+ */
+ function _makeArray($value) {
+ if ($value === false) {
+ return array();
+ }
+ if (is_string($value)) {
+ return array($value);
+ }
+ return $value;
+ }
+}
+
+/**
+ * A group of tags with the same name within a form.
+ * Used for radio buttons.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleRadioGroup extends SimpleTagGroup {
+
+ /**
+ * Each tag is tried in turn until one is
+ * successfully set. The others will be
+ * unchecked if successful.
+ * @param string $value New value.
+ * @return boolean True if any allowed.
+ * @access public
+ */
+ function setValue($value) {
+ if (! $this->_valueIsPossible($value)) {
+ return false;
+ }
+ $index = false;
+ $widgets = &$this->_getWidgets();
+ for ($i = 0, $count = count($widgets); $i < $count; $i++) {
+ if (! $widgets[$i]->setValue($value)) {
+ $widgets[$i]->setValue(false);
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Tests to see if a value is allowed.
+ * @param string Attempted value.
+ * @return boolean True if a valid value.
+ * @access private
+ */
+ function _valueIsPossible($value) {
+ $widgets = &$this->_getWidgets();
+ for ($i = 0, $count = count($widgets); $i < $count; $i++) {
+ if ($widgets[$i]->getAttribute('value') == $value) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Accessor for current selected widget or false
+ * if none.
+ * @return string/boolean Value attribute or
+ * content of opton.
+ * @access public
+ */
+ function getValue() {
+ $widgets = &$this->_getWidgets();
+ for ($i = 0, $count = count($widgets); $i < $count; $i++) {
+ if ($widgets[$i]->getValue() !== false) {
+ return $widgets[$i]->getValue();
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Accessor for starting value that is active.
+ * @return string/boolean Value of first checked
+ * widget or false if none.
+ * @access public
+ */
+ function getDefault() {
+ $widgets = &$this->_getWidgets();
+ for ($i = 0, $count = count($widgets); $i < $count; $i++) {
+ if ($widgets[$i]->getDefault() !== false) {
+ return $widgets[$i]->getDefault();
+ }
+ }
+ return false;
+ }
+}
+
+/**
+ * Tag to keep track of labels.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleLabelTag extends SimpleTag {
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleLabelTag($attributes) {
+ $this->SimpleTag('label', $attributes);
+ }
+
+ /**
+ * Access for the ID to attach the label to.
+ * @return string For attribute.
+ * @access public
+ */
+ function getFor() {
+ return $this->getAttribute('for');
+ }
+}
+
+/**
+ * Tag to aid parsing the form.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleFormTag extends SimpleTag {
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleFormTag($attributes) {
+ $this->SimpleTag('form', $attributes);
+ }
+}
+
+/**
+ * Tag to aid parsing the frames in a page.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleFrameTag extends SimpleTag {
+
+ /**
+ * Starts with a named tag with attributes only.
+ * @param hash $attributes Attribute names and
+ * string values.
+ */
+ function SimpleFrameTag($attributes) {
+ $this->SimpleTag('frame', $attributes);
+ }
+
+ /**
+ * Tag contains no content.
+ * @return boolean False.
+ * @access public
+ */
+ function expectEndTag() {
+ return false;
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/acceptance_test.php b/vendors/simpletest/test/acceptance_test.php
new file mode 100644
index 000000000..9dbb5a35a
--- /dev/null
+++ b/vendors/simpletest/test/acceptance_test.php
@@ -0,0 +1,1633 @@
+<?php
+// $Id: acceptance_test.php 1700 2008-03-24 16:17:48Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../compatibility.php');
+require_once(dirname(__FILE__) . '/../browser.php');
+require_once(dirname(__FILE__) . '/../web_tester.php');
+require_once(dirname(__FILE__) . '/../unit_tester.php');
+
+class SimpleTestAcceptanceTest extends WebTestCase {
+ function samples() {
+ return 'http://www.lastcraft.com/test/';
+ }
+}
+
+class TestOfLiveBrowser extends UnitTestCase {
+ function samples() {
+ return SimpleTestAcceptanceTest::samples();
+ }
+
+ function testGet() {
+ $browser = &new SimpleBrowser();
+ $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ $this->assertTrue($browser->get($this->samples() . 'network_confirm.php'));
+ $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
+ $this->assertPattern('/Request method.*?<dd>GET<\/dd>/', $browser->getContent());
+ $this->assertEqual($browser->getTitle(), 'Simple test target file');
+ $this->assertEqual($browser->getResponseCode(), 200);
+ $this->assertEqual($browser->getMimeType(), 'text/html');
+ }
+
+ function testPost() {
+ $browser = &new SimpleBrowser();
+ $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ $this->assertTrue($browser->post($this->samples() . 'network_confirm.php'));
+ $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/', $browser->getContent());
+ }
+
+ function testAbsoluteLinkFollowing() {
+ $browser = &new SimpleBrowser();
+ $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ $browser->get($this->samples() . 'link_confirm.php');
+ $this->assertTrue($browser->clickLink('Absolute'));
+ $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
+ }
+
+ function testRelativeEncodedeLinkFollowing() {
+ $browser = &new SimpleBrowser();
+ $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ $browser->get($this->samples() . 'link_confirm.php');
+ $this->assertTrue($browser->clickLink("märcêl kiek'eboe"));
+ $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
+ }
+
+ function testRelativeLinkFollowing() {
+ $browser = &new SimpleBrowser();
+ $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ $browser->get($this->samples() . 'link_confirm.php');
+ $this->assertTrue($browser->clickLink('Relative'));
+ $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
+ }
+
+ function testUnifiedClickLinkClicking() {
+ $browser = &new SimpleBrowser();
+ $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ $browser->get($this->samples() . 'link_confirm.php');
+ $this->assertTrue($browser->click('Relative'));
+ $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
+ }
+
+ function testIdLinkFollowing() {
+ $browser = &new SimpleBrowser();
+ $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ $browser->get($this->samples() . 'link_confirm.php');
+ $this->assertTrue($browser->clickLinkById(1));
+ $this->assertPattern('/target for the SimpleTest/', $browser->getContent());
+ }
+
+ function testCookieReading() {
+ $browser = &new SimpleBrowser();
+ $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ $browser->get($this->samples() . 'set_cookies.php');
+ $this->assertEqual($browser->getCurrentCookieValue('session_cookie'), 'A');
+ $this->assertEqual($browser->getCurrentCookieValue('short_cookie'), 'B');
+ $this->assertEqual($browser->getCurrentCookieValue('day_cookie'), 'C');
+ }
+
+ function testSimpleSubmit() {
+ $browser = &new SimpleBrowser();
+ $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ $browser->get($this->samples() . 'form.html');
+ $this->assertTrue($browser->clickSubmit('Go!'));
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/', $browser->getContent());
+ $this->assertPattern('/go=\[Go!\]/', $browser->getContent());
+ }
+
+ function testUnifiedClickCanSubmit() {
+ $browser = &new SimpleBrowser();
+ $browser->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ $browser->get($this->samples() . 'form.html');
+ $this->assertTrue($browser->click('Go!'));
+ $this->assertPattern('/go=\[Go!\]/', $browser->getContent());
+ }
+}
+
+class TestRadioFields extends SimpleTestAcceptanceTest {
+ function testSetFieldAsInteger() {
+ $this->get($this->samples() . 'form_with_radio_buttons.html');
+ $this->assertTrue($this->setField('tested_field', 2));
+ $this->clickSubmitByName('send');
+ $this->assertEqual($this->getUrl(), $this->samples() . 'form_with_radio_buttons.html?tested_field=2&send=click+me');
+ }
+
+ function testSetFieldAsString() {
+ $this->get($this->samples() . 'form_with_radio_buttons.html');
+ $this->assertTrue($this->setField('tested_field', '2'));
+ $this->clickSubmitByName('send');
+ $this->assertEqual($this->getUrl(), $this->samples() . 'form_with_radio_buttons.html?tested_field=2&send=click+me');
+ }
+}
+
+class TestOfLiveFetching extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testFormWithArrayBasedInputs() {
+ $this->get($this->samples() . 'form_with_array_based_inputs.php');
+ $this->setField('value[]', '3', '1');
+ $this->setField('value[]', '4', '2');
+ $this->clickSubmit('Go');
+ $this->assertPattern('/QUERY_STRING : value%5B%5D=3&value%5B%5D=4&submit=Go/');
+ }
+
+ function testFormWithQuotedValues() {
+ $this->get($this->samples() . 'form_with_quoted_values.php');
+ $this->assertField('a', 'default');
+ $this->assertFieldById('text_field', 'default');
+ $this->clickSubmit('Go');
+ $this->assertPattern('/a=default&submit=Go/');
+ }
+
+ function testGet() {
+ $this->assertTrue($this->get($this->samples() . 'network_confirm.php'));
+ $this->assertEqual($this->getUrl(), $this->samples() . 'network_confirm.php');
+ $this->assertText('target for the SimpleTest');
+ $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
+ $this->assertTitle('Simple test target file');
+ $this->assertTitle(new PatternExpectation('/target file/'));
+ $this->assertResponse(200);
+ $this->assertMime('text/html');
+ $this->assertHeader('connection', 'close');
+ $this->assertHeader('connection', new PatternExpectation('/los/'));
+ }
+
+ function testSlowGet() {
+ $this->assertTrue($this->get($this->samples() . 'slow_page.php'));
+ }
+
+ function testTimedOutGet() {
+ $this->setConnectionTimeout(1);
+ $this->ignoreErrors();
+ $this->assertFalse($this->get($this->samples() . 'slow_page.php'));
+ }
+
+ function testPost() {
+ $this->assertTrue($this->post($this->samples() . 'network_confirm.php'));
+ $this->assertText('target for the SimpleTest');
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
+ }
+
+ function testGetWithData() {
+ $this->get($this->samples() . 'network_confirm.php', array("a" => "aaa"));
+ $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
+ $this->assertText('a=[aaa]');
+ }
+
+ function testPostWithData() {
+ $this->post($this->samples() . 'network_confirm.php', array("a" => "aaa"));
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
+ $this->assertText('a=[aaa]');
+ }
+
+ function testPostWithRecursiveData() {
+ $this->post($this->samples() . 'network_confirm.php', array("a" => "aaa"));
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
+ $this->assertText('a=[aaa]');
+
+ $this->post($this->samples() . 'network_confirm.php', array("a[aa]" => "aaa"));
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
+ $this->assertText('a=[aa=[aaa]]');
+
+ $this->post($this->samples() . 'network_confirm.php', array("a[aa][aaa]" => "aaaa"));
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
+ $this->assertText('a=[aa=[aaa=[aaaa]]]');
+
+ $this->post($this->samples() . 'network_confirm.php', array("a" => array("aa" => "aaa")));
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
+ $this->assertText('a=[aa=[aaa]]');
+
+ $this->post($this->samples() . 'network_confirm.php', array("a" => array("aa" => array("aaa" => "aaaa"))));
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
+ $this->assertText('a=[aa=[aaa=[aaaa]]]');
+ }
+
+ function testRelativeGet() {
+ $this->get($this->samples() . 'link_confirm.php');
+ $this->assertTrue($this->get('network_confirm.php'));
+ $this->assertText('target for the SimpleTest');
+ }
+
+ function testRelativePost() {
+ $this->post($this->samples() . 'link_confirm.php');
+ $this->assertTrue($this->post('network_confirm.php'));
+ $this->assertText('target for the SimpleTest');
+ }
+}
+
+class TestOfLinkFollowing extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testLinkAssertions() {
+ $this->get($this->samples() . 'link_confirm.php');
+ $this->assertLink('Absolute', $this->samples() . 'network_confirm.php');
+ $this->assertLink('Absolute', new PatternExpectation('/confirm/'));
+ $this->assertClickable('Absolute');
+ }
+
+ function testAbsoluteLinkFollowing() {
+ $this->get($this->samples() . 'link_confirm.php');
+ $this->assertTrue($this->clickLink('Absolute'));
+ $this->assertText('target for the SimpleTest');
+ }
+
+ function testRelativeLinkFollowing() {
+ $this->get($this->samples() . 'link_confirm.php');
+ $this->assertTrue($this->clickLink('Relative'));
+ $this->assertText('target for the SimpleTest');
+ }
+
+ function testLinkIdFollowing() {
+ $this->get($this->samples() . 'link_confirm.php');
+ $this->assertLinkById(1);
+ $this->assertTrue($this->clickLinkById(1));
+ $this->assertText('target for the SimpleTest');
+ }
+
+ function testAbsoluteUrlBehavesAbsolutely() {
+ $this->get($this->samples() . 'link_confirm.php');
+ $this->get('http://www.lastcraft.com');
+ $this->assertText('No guarantee of quality is given or even intended');
+ }
+
+ function testRelativeUrlRespectsBaseTag() {
+ $this->get($this->samples() . 'base_tag/base_link.html');
+ $this->click('Back to test pages');
+ $this->assertTitle('Simple test target file');
+ }
+}
+
+class TestOfLivePageLinkingWithMinimalLinks extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testClickToExplicitelyNamedSelfReturns() {
+ $this->get($this->samples() . 'front_controller_style/a_page.php');
+ $this->assertEqual($this->getUrl(), $this->samples() . 'front_controller_style/a_page.php');
+ $this->assertTitle('Simple test page with links');
+ $this->assertLink('Self');
+ $this->clickLink('Self');
+ $this->assertTitle('Simple test page with links');
+ }
+
+ function testClickToMissingPageReturnsToSamePage() {
+ $this->get($this->samples() . 'front_controller_style/a_page.php');
+ $this->clickLink('No page');
+ $this->assertTitle('Simple test page with links');
+ $this->assertText('[action=no_page]');
+ }
+
+ function testClickToBareActionReturnsToSamePage() {
+ $this->get($this->samples() . 'front_controller_style/a_page.php');
+ $this->clickLink('Bare action');
+ $this->assertTitle('Simple test page with links');
+ $this->assertText('[action=]');
+ }
+
+ function testClickToSingleQuestionMarkReturnsToSamePage() {
+ $this->get($this->samples() . 'front_controller_style/a_page.php');
+ $this->clickLink('Empty query');
+ $this->assertTitle('Simple test page with links');
+ }
+
+ function testClickToEmptyStringReturnsToSamePage() {
+ $this->get($this->samples() . 'front_controller_style/a_page.php');
+ $this->clickLink('Empty link');
+ $this->assertTitle('Simple test page with links');
+ }
+
+ function testClickToSingleDotGoesToCurrentDirectory() {
+ $this->get($this->samples() . 'front_controller_style/a_page.php');
+ $this->clickLink('Current directory');
+ $this->assertTitle(
+ 'Simple test front controller',
+ '%s -> index.php needs to be set as a default web server home page');
+ }
+
+ function testClickBackADirectoryLevel() {
+ $this->get($this->samples() . 'front_controller_style/');
+ $this->clickLink('Down one');
+ $this->assertPattern('|Index of .*?/test|i');
+ }
+}
+
+class TestOfLiveFrontControllerEmulation extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testJumpToNamedPage() {
+ $this->get($this->samples() . 'front_controller_style/');
+ $this->assertText('Simple test front controller');
+ $this->clickLink('Index');
+ $this->assertResponse(200);
+ $this->assertText('[action=index]');
+ }
+
+ function testJumpToUnnamedPage() {
+ $this->get($this->samples() . 'front_controller_style/');
+ $this->clickLink('No page');
+ $this->assertResponse(200);
+ $this->assertText('Simple test front controller');
+ $this->assertText('[action=no_page]');
+ }
+
+ function testJumpToUnnamedPageWithBareParameter() {
+ $this->get($this->samples() . 'front_controller_style/');
+ $this->clickLink('Bare action');
+ $this->assertResponse(200);
+ $this->assertText('Simple test front controller');
+ $this->assertText('[action=]');
+ }
+
+ function testJumpToUnnamedPageWithEmptyQuery() {
+ $this->get($this->samples() . 'front_controller_style/');
+ $this->clickLink('Empty query');
+ $this->assertResponse(200);
+ $this->assertPattern('/Simple test front controller/');
+ $this->assertPattern('/raw get data.*?\[\].*?get data/si');
+ }
+
+ function testJumpToUnnamedPageWithEmptyLink() {
+ $this->get($this->samples() . 'front_controller_style/');
+ $this->clickLink('Empty link');
+ $this->assertResponse(200);
+ $this->assertPattern('/Simple test front controller/');
+ $this->assertPattern('/raw get data.*?\[\].*?get data/si');
+ }
+
+ function testJumpBackADirectoryLevel() {
+ $this->get($this->samples() . 'front_controller_style/');
+ $this->clickLink('Down one');
+ $this->assertPattern('|Index of .*?/test|');
+ }
+
+ function testSubmitToNamedPage() {
+ $this->get($this->samples() . 'front_controller_style/');
+ $this->assertText('Simple test front controller');
+ $this->clickSubmit('Index');
+ $this->assertResponse(200);
+ $this->assertText('[action=Index]');
+ }
+
+ function testSubmitToSameDirectory() {
+ $this->get($this->samples() . 'front_controller_style/index.php');
+ $this->clickSubmit('Same directory');
+ $this->assertResponse(200);
+ $this->assertText('[action=Same+directory]');
+ }
+
+ function testSubmitToEmptyAction() {
+ $this->get($this->samples() . 'front_controller_style/index.php');
+ $this->clickSubmit('Empty action');
+ $this->assertResponse(200);
+ $this->assertText('[action=Empty+action]');
+ }
+
+ function testSubmitToNoAction() {
+ $this->get($this->samples() . 'front_controller_style/index.php');
+ $this->clickSubmit('No action');
+ $this->assertResponse(200);
+ $this->assertText('[action=No+action]');
+ }
+
+ function testSubmitBackADirectoryLevel() {
+ $this->get($this->samples() . 'front_controller_style/');
+ $this->clickSubmit('Down one');
+ $this->assertPattern('|Index of .*?/test|');
+ }
+
+ function testSubmitToNamedPageWithMixedPostAndGet() {
+ $this->get($this->samples() . 'front_controller_style/?a=A');
+ $this->assertText('Simple test front controller');
+ $this->clickSubmit('Index post');
+ $this->assertText('action=[Index post]');
+ $this->assertNoText('[a=A]');
+ }
+
+ function testSubmitToSameDirectoryMixedPostAndGet() {
+ $this->get($this->samples() . 'front_controller_style/index.php?a=A');
+ $this->clickSubmit('Same directory post');
+ $this->assertText('action=[Same directory post]');
+ $this->assertNoText('[a=A]');
+ }
+
+ function testSubmitToEmptyActionMixedPostAndGet() {
+ $this->get($this->samples() . 'front_controller_style/index.php?a=A');
+ $this->clickSubmit('Empty action post');
+ $this->assertText('action=[Empty action post]');
+ $this->assertText('[a=A]');
+ }
+
+ function testSubmitToNoActionMixedPostAndGet() {
+ $this->get($this->samples() . 'front_controller_style/index.php?a=A');
+ $this->clickSubmit('No action post');
+ $this->assertText('action=[No action post]');
+ $this->assertText('[a=A]');
+ }
+}
+
+class TestOfLiveHeaders extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testConfirmingHeaderExistence() {
+ $this->get('http://www.lastcraft.com/');
+ $this->assertHeader('content-type');
+ $this->assertHeader('content-type', 'text/html');
+ $this->assertHeaderPattern('content-type', '/HTML/i');
+ $this->assertNoHeader('WWW-Authenticate');
+ }
+}
+
+class TestOfLiveRedirects extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testNoRedirects() {
+ $this->setMaximumRedirects(0);
+ $this->get($this->samples() . 'redirect.php');
+ $this->assertTitle('Redirection test');
+ }
+
+ function testRedirects() {
+ $this->setMaximumRedirects(1);
+ $this->get($this->samples() . 'redirect.php');
+ $this->assertTitle('Simple test target file');
+ }
+
+ function testRedirectLosesGetData() {
+ $this->get($this->samples() . 'redirect.php', array('a' => 'aaa'));
+ $this->assertNoText('a=[aaa]');
+ }
+
+ function testRedirectKeepsExtraRequestDataOfItsOwn() {
+ $this->get($this->samples() . 'redirect.php');
+ $this->assertText('r=[rrr]');
+ }
+
+ function testRedirectLosesPostData() {
+ $this->post($this->samples() . 'redirect.php', array('a' => 'aaa'));
+ $this->assertTitle('Simple test target file');
+ $this->assertNoText('a=[aaa]');
+ }
+
+ function testRedirectWithBaseUrlChange() {
+ $this->get($this->samples() . 'base_change_redirect.php');
+ $this->assertTitle('Simple test target file in folder');
+ $this->get($this->samples() . 'path/base_change_redirect.php');
+ $this->assertTitle('Simple test target file');
+ }
+
+ function testRedirectWithDoubleBaseUrlChange() {
+ $this->get($this->samples() . 'double_base_change_redirect.php');
+ $this->assertTitle('Simple test target file');
+ }
+}
+
+class TestOfLiveCookies extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function here() {
+ return new SimpleUrl($this->samples());
+ }
+
+ function thisHost() {
+ $here = $this->here();
+ return $here->getHost();
+ }
+
+ function thisPath() {
+ $here = $this->here();
+ return $here->getPath();
+ }
+
+ function testCookieSettingAndAssertions() {
+ $this->setCookie('a', 'Test cookie a');
+ $this->setCookie('b', 'Test cookie b', $this->thisHost());
+ $this->setCookie('c', 'Test cookie c', $this->thisHost(), $this->thisPath());
+ $this->get($this->samples() . 'network_confirm.php');
+ $this->assertText('Test cookie a');
+ $this->assertText('Test cookie b');
+ $this->assertText('Test cookie c');
+ $this->assertCookie('a');
+ $this->assertCookie('b', 'Test cookie b');
+ $this->assertTrue($this->getCookie('c') == 'Test cookie c');
+ }
+
+ function testNoCookieSetWhenCookiesDisabled() {
+ $this->setCookie('a', 'Test cookie a');
+ $this->ignoreCookies();
+ $this->get($this->samples() . 'network_confirm.php');
+ $this->assertNoText('Test cookie a');
+ }
+
+ function testCookieReading() {
+ $this->get($this->samples() . 'set_cookies.php');
+ $this->assertCookie('session_cookie', 'A');
+ $this->assertCookie('short_cookie', 'B');
+ $this->assertCookie('day_cookie', 'C');
+ }
+
+ function testNoCookieReadingWhenCookiesDisabled() {
+ $this->ignoreCookies();
+ $this->get($this->samples() . 'set_cookies.php');
+ $this->assertNoCookie('session_cookie');
+ $this->assertNoCookie('short_cookie');
+ $this->assertNoCookie('day_cookie');
+ }
+
+ function testCookiePatternAssertions() {
+ $this->get($this->samples() . 'set_cookies.php');
+ $this->assertCookie('session_cookie', new PatternExpectation('/a/i'));
+ }
+
+ function testTemporaryCookieExpiry() {
+ $this->get($this->samples() . 'set_cookies.php');
+ $this->restart();
+ $this->assertNoCookie('session_cookie');
+ $this->assertCookie('day_cookie', 'C');
+ }
+
+ function testTimedCookieExpiryWith100SecondMargin() {
+ $this->get($this->samples() . 'set_cookies.php');
+ $this->ageCookies(3600);
+ $this->restart(time() + 100);
+ $this->assertNoCookie('session_cookie');
+ $this->assertNoCookie('hour_cookie');
+ $this->assertCookie('day_cookie', 'C');
+ }
+
+ function testNoClockOverDriftBy100Seconds() {
+ $this->get($this->samples() . 'set_cookies.php');
+ $this->restart(time() + 200);
+ $this->assertNoCookie(
+ 'short_cookie',
+ '%s -> Please check your computer clock setting if you are not using NTP');
+ }
+
+ function testNoClockUnderDriftBy100Seconds() {
+ $this->get($this->samples() . 'set_cookies.php');
+ $this->restart(time() + 0);
+ $this->assertCookie(
+ 'short_cookie',
+ 'B',
+ '%s -> Please check your computer clock setting if you are not using NTP');
+ }
+
+ function testCookiePath() {
+ $this->get($this->samples() . 'set_cookies.php');
+ $this->assertNoCookie('path_cookie', 'D');
+ $this->get('./path/show_cookies.php');
+ $this->assertPattern('/path_cookie/');
+ $this->assertCookie('path_cookie', 'D');
+ }
+}
+
+class LiveTestOfForms extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testSimpleSubmit() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
+ $this->assertText('go=[Go!]');
+ }
+
+ function testDefaultFormValues() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertFieldByName('a', '');
+ $this->assertFieldByName('b', 'Default text');
+ $this->assertFieldByName('c', '');
+ $this->assertFieldByName('d', 'd1');
+ $this->assertFieldByName('e', false);
+ $this->assertFieldByName('f', 'on');
+ $this->assertFieldByName('g', 'g3');
+ $this->assertFieldByName('h', 2);
+ $this->assertFieldByName('go', 'Go!');
+ $this->assertClickable('Go!');
+ $this->assertSubmit('Go!');
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertText('go=[Go!]');
+ $this->assertText('a=[]');
+ $this->assertText('b=[Default text]');
+ $this->assertText('c=[]');
+ $this->assertText('d=[d1]');
+ $this->assertNoText('e=[');
+ $this->assertText('f=[on]');
+ $this->assertText('g=[g3]');
+ }
+
+ function testFormSubmissionByButtonLabel() {
+ $this->get($this->samples() . 'form.html');
+ $this->setFieldByName('a', 'aaa');
+ $this->setFieldByName('b', 'bbb');
+ $this->setFieldByName('c', 'ccc');
+ $this->setFieldByName('d', 'D2');
+ $this->setFieldByName('e', 'on');
+ $this->setFieldByName('f', false);
+ $this->setFieldByName('g', 'g2');
+ $this->setFieldByName('h', 1);
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertText('a=[aaa]');
+ $this->assertText('b=[bbb]');
+ $this->assertText('c=[ccc]');
+ $this->assertText('d=[d2]');
+ $this->assertText('e=[on]');
+ $this->assertNoText('f=[');
+ $this->assertText('g=[g2]');
+ }
+
+ function testAdditionalFormValues() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertTrue($this->clickSubmit('Go!', array('add' => 'A')));
+ $this->assertText('go=[Go!]');
+ $this->assertText('add=[A]');
+ }
+
+ function testFormSubmissionByName() {
+ $this->get($this->samples() . 'form.html');
+ $this->setFieldByName('a', 'A');
+ $this->assertTrue($this->clickSubmitByName('go'));
+ $this->assertText('a=[A]');
+ }
+
+ function testFormSubmissionByNameAndAdditionalParameters() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertTrue($this->clickSubmitByName('go', array('add' => 'A')));
+ $this->assertText('go=[Go!]');
+ $this->assertText('add=[A]');
+ }
+
+ function testFormSubmissionBySubmitButtonLabeledSubmit() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertTrue($this->clickSubmitByName('test'));
+ $this->assertText('test=[Submit]');
+ }
+
+ function testFormSubmissionWithIds() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertFieldById(1, '');
+ $this->assertFieldById(2, 'Default text');
+ $this->assertFieldById(3, '');
+ $this->assertFieldById(4, 'd1');
+ $this->assertFieldById(5, false);
+ $this->assertFieldById(6, 'on');
+ $this->assertFieldById(8, 'g3');
+ $this->assertFieldById(11, 2);
+ $this->setFieldById(1, 'aaa');
+ $this->setFieldById(2, 'bbb');
+ $this->setFieldById(3, 'ccc');
+ $this->setFieldById(4, 'D2');
+ $this->setFieldById(5, 'on');
+ $this->setFieldById(6, false);
+ $this->setFieldById(8, 'g2');
+ $this->setFieldById(11, 'H1');
+ $this->assertTrue($this->clickSubmitById(99));
+ $this->assertText('a=[aaa]');
+ $this->assertText('b=[bbb]');
+ $this->assertText('c=[ccc]');
+ $this->assertText('d=[d2]');
+ $this->assertText('e=[on]');
+ $this->assertNoText('f=[');
+ $this->assertText('g=[g2]');
+ $this->assertText('h=[1]');
+ $this->assertText('go=[Go!]');
+ }
+
+ function testFormSubmissionWithLabels() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertField('Text A', '');
+ $this->assertField('Text B', 'Default text');
+ $this->assertField('Text area C', '');
+ $this->assertField('Selection D', 'd1');
+ $this->assertField('Checkbox E', false);
+ $this->assertField('Checkbox F', 'on');
+ $this->assertField('3', 'g3');
+ $this->assertField('Selection H', 2);
+ $this->setField('Text A', 'aaa');
+ $this->setField('Text B', 'bbb');
+ $this->setField('Text area C', 'ccc');
+ $this->setField('Selection D', 'D2');
+ $this->setField('Checkbox E', 'on');
+ $this->setField('Checkbox F', false);
+ $this->setField('2', 'g2');
+ $this->setField('Selection H', 'H1');
+ $this->clickSubmit('Go!');
+ $this->assertText('a=[aaa]');
+ $this->assertText('b=[bbb]');
+ $this->assertText('c=[ccc]');
+ $this->assertText('d=[d2]');
+ $this->assertText('e=[on]');
+ $this->assertNoText('f=[');
+ $this->assertText('g=[g2]');
+ $this->assertText('h=[1]');
+ $this->assertText('go=[Go!]');
+ }
+
+ function testSettingCheckboxWithBooleanTrueSetsUnderlyingValue() {
+ $this->get($this->samples() . 'form.html');
+ $this->setField('Checkbox E', true);
+ $this->assertField('Checkbox E', 'on');
+ $this->clickSubmit('Go!');
+ $this->assertText('e=[on]');
+ }
+
+ function testFormSubmissionWithMixedPostAndGet() {
+ $this->get($this->samples() . 'form_with_mixed_post_and_get.html');
+ $this->setField('Text A', 'Hello');
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertText('a=[Hello]');
+ $this->assertText('x=[X]');
+ $this->assertText('y=[Y]');
+ }
+
+ function testFormSubmissionWithMixedPostAndEncodedGet() {
+ $this->get($this->samples() . 'form_with_mixed_post_and_get.html');
+ $this->setField('Text B', 'Hello');
+ $this->assertTrue($this->clickSubmit('Go encoded!'));
+ $this->assertText('b=[Hello]');
+ $this->assertText('x=[X]');
+ $this->assertText('y=[Y]');
+ }
+
+ function testFormSubmissionWithoutAction() {
+ $this->get($this->samples() . 'form_without_action.php?test=test');
+ $this->assertText('_GET : [test]');
+ $this->assertTrue($this->clickSubmit('Submit Post With Empty Action'));
+ $this->assertText('_GET : [test]');
+ $this->assertText('_POST : [test]');
+ }
+
+ function testImageSubmissionByLabel() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertImage('Image go!');
+ $this->assertTrue($this->clickImage('Image go!', 10, 12));
+ $this->assertText('go_x=[10]');
+ $this->assertText('go_y=[12]');
+ }
+
+ function testImageSubmissionByLabelWithAdditionalParameters() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertTrue($this->clickImage('Image go!', 10, 12, array('add' => 'A')));
+ $this->assertText('add=[A]');
+ }
+
+ function testImageSubmissionByName() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertTrue($this->clickImageByName('go', 10, 12));
+ $this->assertText('go_x=[10]');
+ $this->assertText('go_y=[12]');
+ }
+
+ function testImageSubmissionById() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertTrue($this->clickImageById(97, 10, 12));
+ $this->assertText('go_x=[10]');
+ $this->assertText('go_y=[12]');
+ }
+
+ function testButtonSubmissionByLabel() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertTrue($this->clickSubmit('Button go!', 10, 12));
+ $this->assertPattern('/go=\[ButtonGo\]/s');
+ }
+
+ function testNamelessSubmitSendsNoValue() {
+ $this->get($this->samples() . 'form_with_unnamed_submit.html');
+ $this->click('Go!');
+ $this->assertNoText('Go!');
+ $this->assertNoText('submit');
+ }
+
+ function testNamelessImageSendsXAndYValues() {
+ $this->get($this->samples() . 'form_with_unnamed_submit.html');
+ $this->clickImage('Image go!', 4, 5);
+ $this->assertNoText('ImageGo');
+ $this->assertText('x=[4]');
+ $this->assertText('y=[5]');
+ }
+
+ function testNamelessButtonSendsNoValue() {
+ $this->get($this->samples() . 'form_with_unnamed_submit.html');
+ $this->click('Button Go!');
+ $this->assertNoText('ButtonGo');
+ }
+
+ function testSelfSubmit() {
+ $this->get($this->samples() . 'self_form.php');
+ $this->assertNoText('[Submitted]');
+ $this->assertNoText('[Wrong form]');
+ $this->assertTrue($this->clickSubmit());
+ $this->assertText('[Submitted]');
+ $this->assertNoText('[Wrong form]');
+ $this->assertTitle('Test of form self submission');
+ }
+
+ function testSelfSubmitWithParameters() {
+ $this->get($this->samples() . 'self_form.php');
+ $this->setFieldByName('visible', 'Resent');
+ $this->assertTrue($this->clickSubmit());
+ $this->assertText('[Resent]');
+ }
+
+ function testSettingOfBlankOption() {
+ $this->get($this->samples() . 'form.html');
+ $this->assertTrue($this->setFieldByName('d', ''));
+ $this->clickSubmit('Go!');
+ $this->assertText('d=[]');
+ }
+
+ function testAssertingFieldValueWithPattern() {
+ $this->get($this->samples() . 'form.html');
+ $this->setField('c', 'A very long string');
+ $this->assertField('c', new PatternExpectation('/very long/'));
+ }
+
+ function testSendingMultipartFormDataEncodedForm() {
+ $this->get($this->samples() . 'form_data_encoded_form.html');
+ $this->assertField('Text A', '');
+ $this->assertField('Text B', 'Default text');
+ $this->assertField('Text area C', '');
+ $this->assertField('Selection D', 'd1');
+ $this->assertField('Checkbox E', false);
+ $this->assertField('Checkbox F', 'on');
+ $this->assertField('3', 'g3');
+ $this->assertField('Selection H', 2);
+ $this->setField('Text A', 'aaa');
+ $this->setField('Text B', 'bbb');
+ $this->setField('Text area C', 'ccc');
+ $this->setField('Selection D', 'D2');
+ $this->setField('Checkbox E', 'on');
+ $this->setField('Checkbox F', false);
+ $this->setField('2', 'g2');
+ $this->setField('Selection H', 'H1');
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertText('a=[aaa]');
+ $this->assertText('b=[bbb]');
+ $this->assertText('c=[ccc]');
+ $this->assertText('d=[d2]');
+ $this->assertText('e=[on]');
+ $this->assertNoText('f=[');
+ $this->assertText('g=[g2]');
+ $this->assertText('h=[1]');
+ $this->assertText('go=[Go!]');
+ }
+
+ function testSettingVariousBlanksInFields() {
+ $this->get($this->samples() . 'form_with_false_defaults.html');
+ $this->assertField('Text A', '');
+ $this->setField('Text A', '0');
+ $this->assertField('Text A', '0');
+ $this->assertField('Text area B', '');
+ $this->setField('Text area B', '0');
+ $this->assertField('Text area B', '0');
+ $this->assertField('Text area C', " ");
+ $this->assertField('Selection D', '');
+ $this->setField('Selection D', 'D2');
+ $this->assertField('Selection D', 'D2');
+ $this->setField('Selection D', 'D3');
+ $this->assertField('Selection D', '0');
+ $this->setField('Selection D', 'D4');
+ $this->assertField('Selection D', '?');
+ $this->assertField('Checkbox E', '');
+ $this->assertField('Checkbox F', 'on');
+ $this->assertField('Checkbox G', '0');
+ $this->assertField('Checkbox H', '?');
+ $this->assertFieldByName('i', 'on');
+ $this->setFieldByName('i', '');
+ $this->assertFieldByName('i', '');
+ $this->setFieldByName('i', '0');
+ $this->assertFieldByName('i', '0');
+ $this->setFieldByName('i', '?');
+ $this->assertFieldByName('i', '?');
+ }
+
+ function testSubmissionOfBlankFields() {
+ $this->get($this->samples() . 'form_with_false_defaults.html');
+ $this->setField('Text A', '');
+ $this->setField('Text area B', '');
+ $this->setFieldByName('i', '');
+ $this->click('Go!');
+ $this->assertText('a=[]');
+ $this->assertText('b=[]');
+ $this->assertPattern('/c=\[ \]/');
+ $this->assertText('d=[]');
+ $this->assertText('e=[]');
+ $this->assertText('i=[]');
+ }
+
+ function testSubmissionOfEmptyValues() {
+ $this->get($this->samples() . 'form_with_false_defaults.html');
+ $this->setField('Selection D', 'D2');
+ $this->click('Go!');
+ $this->assertText('a=[]');
+ $this->assertText('b=[]');
+ $this->assertText('d=[D2]');
+ $this->assertText('f=[on]');
+ $this->assertText('i=[on]');
+ }
+
+ function testSubmissionOfZeroes() {
+ $this->get($this->samples() . 'form_with_false_defaults.html');
+ $this->setField('Text A', '0');
+ $this->setField('Text area B', '0');
+ $this->setField('Selection D', 'D3');
+ $this->setFieldByName('i', '0');
+ $this->click('Go!');
+ $this->assertText('a=[0]');
+ $this->assertText('b=[0]');
+ $this->assertText('d=[0]');
+ $this->assertText('g=[0]');
+ $this->assertText('i=[0]');
+ }
+
+ function testSubmissionOfQuestionMarks() {
+ $this->get($this->samples() . 'form_with_false_defaults.html');
+ $this->setField('Text A', '?');
+ $this->setField('Text area B', '?');
+ $this->setField('Selection D', 'D4');
+ $this->setFieldByName('i', '?');
+ $this->click('Go!');
+ $this->assertText('a=[?]');
+ $this->assertText('b=[?]');
+ $this->assertText('d=[?]');
+ $this->assertText('h=[?]');
+ $this->assertText('i=[?]');
+ }
+
+ function testSubmissionOfHtmlEncodedValues() {
+ $this->get($this->samples() . 'form_with_tricky_defaults.html');
+ $this->assertField('Text A', '&\'"<>');
+ $this->assertField('Text B', '"');
+ $this->assertField('Text area C', '&\'"<>');
+ $this->assertField('Selection D', "'");
+ $this->assertField('Checkbox E', '&\'"<>');
+ $this->assertField('Checkbox F', false);
+ $this->assertFieldByname('i', "'");
+ $this->click('Go!');
+ $this->assertText('a=[&\'"<>, "]');
+ $this->assertText('c=[&\'"<>]');
+ $this->assertText("d=[']");
+ $this->assertText('e=[&\'"<>]');
+ $this->assertText("i=[']");
+ }
+
+ function testFormActionRespectsBaseTag() {
+ $this->get($this->samples() . 'base_tag/form.html');
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertText('go=[Go!]');
+ $this->assertText('a=[]');
+ }
+}
+
+class TestOfLiveMultiValueWidgets extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testDefaultFormValueSubmission() {
+ $this->get($this->samples() . 'multiple_widget_form.html');
+ $this->assertFieldByName('a', array('a2', 'a3'));
+ $this->assertFieldByName('b', array('b2', 'b3'));
+ $this->assertFieldByName('c[]', array('c2', 'c3'));
+ $this->assertFieldByName('d', array('2', '3'));
+ $this->assertFieldByName('e', array('2', '3'));
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertText('a=[a2, a3]');
+ $this->assertText('b=[b2, b3]');
+ $this->assertText('c=[c2, c3]');
+ $this->assertText('d=[2, 3]');
+ $this->assertText('e=[2, 3]');
+ }
+
+ function testSubmittingMultipleValues() {
+ $this->get($this->samples() . 'multiple_widget_form.html');
+ $this->setFieldByName('a', array('a1', 'a4'));
+ $this->assertFieldByName('a', array('a1', 'a4'));
+ $this->assertFieldByName('a', array('a4', 'a1'));
+ $this->setFieldByName('b', array('b1', 'b4'));
+ $this->assertFieldByName('b', array('b1', 'b4'));
+ $this->setFieldByName('c[]', array('c1', 'c4'));
+ $this->assertField('c[]', array('c1', 'c4'));
+ $this->setFieldByName('d', array('1', '4'));
+ $this->assertField('d', array('1', '4'));
+ $this->setFieldByName('e', array('e1', 'e4'));
+ $this->assertField('e', array('1', '4'));
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertText('a=[a1, a4]');
+ $this->assertText('b=[b1, b4]');
+ $this->assertText('c=[c1, c4]');
+ $this->assertText('d=[1, 4]');
+ $this->assertText('e=[1, 4]');
+ }
+
+ function testSettingByOptionValue() {
+ $this->get($this->samples() . 'multiple_widget_form.html');
+ $this->setFieldByName('d', array('1', '4'));
+ $this->assertField('d', array('1', '4'));
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertText('d=[1, 4]');
+ }
+
+ function testSubmittingMultipleValuesByLabel() {
+ $this->get($this->samples() . 'multiple_widget_form.html');
+ $this->setField('Multiple selection A', array('a1', 'a4'));
+ $this->assertField('Multiple selection A', array('a1', 'a4'));
+ $this->assertField('Multiple selection A', array('a4', 'a1'));
+ $this->setField('multiple selection C', array('c1', 'c4'));
+ $this->assertField('multiple selection C', array('c1', 'c4'));
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertText('a=[a1, a4]');
+ $this->assertText('c=[c1, c4]');
+ }
+
+ function testSavantStyleHiddenFieldDefaults() {
+ $this->get($this->samples() . 'savant_style_form.html');
+ $this->assertFieldByName('a', array('a0'));
+ $this->assertFieldByName('b', array('b0'));
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertText('a=[a0]');
+ $this->assertText('b=[b0]');
+ }
+
+ function testSavantStyleHiddenDefaultsAreOverridden() {
+ $this->get($this->samples() . 'savant_style_form.html');
+ $this->assertTrue($this->setFieldByName('a', array('a1')));
+ $this->assertTrue($this->setFieldByName('b', 'b1'));
+ $this->assertTrue($this->clickSubmit('Go!'));
+ $this->assertText('a=[a1]');
+ $this->assertText('b=[b1]');
+ }
+
+ function testSavantStyleFormSettingById() {
+ $this->get($this->samples() . 'savant_style_form.html');
+ $this->assertFieldById(1, array('a0'));
+ $this->assertFieldById(4, array('b0'));
+ $this->assertTrue($this->setFieldById(2, 'a1'));
+ $this->assertTrue($this->setFieldById(5, 'b1'));
+ $this->assertTrue($this->clickSubmitById(99));
+ $this->assertText('a=[a1]');
+ $this->assertText('b=[b1]');
+ }
+}
+
+class TestOfFileUploads extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testSingleFileUpload() {
+ $this->get($this->samples() . 'upload_form.html');
+ $this->assertTrue($this->setField('Content:',
+ dirname(__FILE__) . '/support/upload_sample.txt'));
+ $this->assertField('Content:', dirname(__FILE__) . '/support/upload_sample.txt');
+ $this->click('Go!');
+ $this->assertText('Sample for testing file upload');
+ }
+
+ function testMultipleFileUpload() {
+ $this->get($this->samples() . 'upload_form.html');
+ $this->assertTrue($this->setField('Content:',
+ dirname(__FILE__) . '/support/upload_sample.txt'));
+ $this->assertTrue($this->setField('Supplemental:',
+ dirname(__FILE__) . '/support/supplementary_upload_sample.txt'));
+ $this->assertField('Supplemental:',
+ dirname(__FILE__) . '/support/supplementary_upload_sample.txt');
+ $this->click('Go!');
+ $this->assertText('Sample for testing file upload');
+ $this->assertText('Some more text content');
+ }
+
+ function testBinaryFileUpload() {
+ $this->get($this->samples() . 'upload_form.html');
+ $this->assertTrue($this->setField('Content:',
+ dirname(__FILE__) . '/support/latin1_sample'));
+ $this->click('Go!');
+ $this->assertText(
+ implode('', file(dirname(__FILE__) . '/support/latin1_sample')));
+ }
+}
+
+class TestOfLiveHistoryNavigation extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testRetry() {
+ $this->get($this->samples() . 'cookie_based_counter.php');
+ $this->assertPattern('/count: 1/i');
+ $this->retry();
+ $this->assertPattern('/count: 2/i');
+ $this->retry();
+ $this->assertPattern('/count: 3/i');
+ }
+
+ function testOfBackButton() {
+ $this->get($this->samples() . '1.html');
+ $this->clickLink('2');
+ $this->assertTitle('2');
+ $this->assertTrue($this->back());
+ $this->assertTitle('1');
+ $this->assertTrue($this->forward());
+ $this->assertTitle('2');
+ $this->assertFalse($this->forward());
+ }
+
+ function testGetRetryResubmitsData() {
+ $this->assertTrue($this->get(
+ $this->samples() . 'network_confirm.php?a=aaa'));
+ $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
+ $this->assertText('a=[aaa]');
+ $this->retry();
+ $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
+ $this->assertText('a=[aaa]');
+ }
+
+ function testGetRetryResubmitsExtraData() {
+ $this->assertTrue($this->get(
+ $this->samples() . 'network_confirm.php',
+ array('a' => 'aaa')));
+ $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
+ $this->assertText('a=[aaa]');
+ $this->retry();
+ $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
+ $this->assertText('a=[aaa]');
+ }
+
+ function testPostRetryResubmitsData() {
+ $this->assertTrue($this->post(
+ $this->samples() . 'network_confirm.php',
+ array('a' => 'aaa')));
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
+ $this->assertText('a=[aaa]');
+ $this->retry();
+ $this->assertPattern('/Request method.*?<dd>POST<\/dd>/');
+ $this->assertText('a=[aaa]');
+ }
+
+ function testGetRetryResubmitsRepeatedData() {
+ $this->assertTrue($this->get(
+ $this->samples() . 'network_confirm.php?a=1&a=2'));
+ $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
+ $this->assertText('a=[1, 2]');
+ $this->retry();
+ $this->assertPattern('/Request method.*?<dd>GET<\/dd>/');
+ $this->assertText('a=[1, 2]');
+ }
+}
+
+class TestOfLiveAuthentication extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testChallengeFromProtectedPage() {
+ $this->get($this->samples() . 'protected/');
+ $this->assertResponse(401);
+ $this->assertAuthentication('Basic');
+ $this->assertRealm('SimpleTest basic authentication');
+ $this->assertRealm(new PatternExpectation('/simpletest/i'));
+ $this->authenticate('test', 'secret');
+ $this->assertResponse(200);
+ $this->retry();
+ $this->assertResponse(200);
+ }
+
+ function testTrailingSlashImpliedWithinRealm() {
+ $this->get($this->samples() . 'protected/');
+ $this->authenticate('test', 'secret');
+ $this->assertResponse(200);
+ $this->get($this->samples() . 'protected');
+ $this->assertResponse(200);
+ }
+
+ function testTrailingSlashImpliedSettingRealm() {
+ $this->get($this->samples() . 'protected');
+ $this->authenticate('test', 'secret');
+ $this->assertResponse(200);
+ $this->get($this->samples() . 'protected/');
+ $this->assertResponse(200);
+ }
+
+ function testEncodedAuthenticationFetchesPage() {
+ $this->get('http://test:secret@www.lastcraft.com/test/protected/');
+ $this->assertResponse(200);
+ }
+
+ function testEncodedAuthenticationFetchesPageAfterTrailingSlashRedirect() {
+ $this->get('http://test:secret@www.lastcraft.com/test/protected');
+ $this->assertResponse(200);
+ }
+
+ function testRealmExtendsToWholeDirectory() {
+ $this->get($this->samples() . 'protected/1.html');
+ $this->authenticate('test', 'secret');
+ $this->clickLink('2');
+ $this->assertResponse(200);
+ $this->clickLink('3');
+ $this->assertResponse(200);
+ }
+
+ function testRedirectKeepsAuthentication() {
+ $this->get($this->samples() . 'protected/local_redirect.php');
+ $this->authenticate('test', 'secret');
+ $this->assertTitle('Simple test target file');
+ }
+
+ function testRedirectKeepsEncodedAuthentication() {
+ $this->get('http://test:secret@www.lastcraft.com/test/protected/local_redirect.php');
+ $this->assertResponse(200);
+ $this->assertTitle('Simple test target file');
+ }
+
+ function testSessionRestartLosesAuthentication() {
+ $this->get($this->samples() . 'protected/');
+ $this->authenticate('test', 'secret');
+ $this->assertResponse(200);
+ $this->restart();
+ $this->get($this->samples() . 'protected/');
+ $this->assertResponse(401);
+ }
+}
+
+class TestOfLoadingFrames extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testNoFramesContentWhenFramesDisabled() {
+ $this->ignoreFrames();
+ $this->get($this->samples() . 'one_page_frameset.html');
+ $this->assertTitle('Frameset for testing of SimpleTest');
+ $this->assertText('This content is for no frames only');
+ }
+
+ function testPatternMatchCanReadTheOnlyFrame() {
+ $this->get($this->samples() . 'one_page_frameset.html');
+ $this->assertText('A target for the SimpleTest test suite');
+ $this->assertNoText('This content is for no frames only');
+ }
+
+ function testMessyFramesetResponsesByName() {
+ $this->assertTrue($this->get(
+ $this->samples() . 'messy_frameset.html'));
+ $this->assertTitle('Frameset for testing of SimpleTest');
+
+ $this->assertTrue($this->setFrameFocus('Front controller'));
+ $this->assertResponse(200);
+ $this->assertText('Simple test front controller');
+
+ $this->assertTrue($this->setFrameFocus('One'));
+ $this->assertResponse(200);
+ $this->assertLink('2');
+
+ $this->assertTrue($this->setFrameFocus('Frame links'));
+ $this->assertResponse(200);
+ $this->assertLink('Set one to 2');
+
+ $this->assertTrue($this->setFrameFocus('Counter'));
+ $this->assertResponse(200);
+ $this->assertText('Count: 1');
+
+ $this->assertTrue($this->setFrameFocus('Redirected'));
+ $this->assertResponse(200);
+ $this->assertText('r=rrr');
+
+ $this->assertTrue($this->setFrameFocus('Protected'));
+ $this->assertResponse(401);
+
+ $this->assertTrue($this->setFrameFocus('Protected redirect'));
+ $this->assertResponse(401);
+
+ $this->assertTrue($this->setFrameFocusByIndex(1));
+ $this->assertResponse(200);
+ $this->assertText('Simple test front controller');
+
+ $this->assertTrue($this->setFrameFocusByIndex(2));
+ $this->assertResponse(200);
+ $this->assertLink('2');
+
+ $this->assertTrue($this->setFrameFocusByIndex(3));
+ $this->assertResponse(200);
+ $this->assertLink('Set one to 2');
+
+ $this->assertTrue($this->setFrameFocusByIndex(4));
+ $this->assertResponse(200);
+ $this->assertText('Count: 1');
+
+ $this->assertTrue($this->setFrameFocusByIndex(5));
+ $this->assertResponse(200);
+ $this->assertText('r=rrr');
+
+ $this->assertTrue($this->setFrameFocusByIndex(6));
+ $this->assertResponse(401);
+
+ $this->assertTrue($this->setFrameFocusByIndex(7));
+ }
+
+ function testReloadingFramesetPage() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->assertText('Count: 1');
+ $this->retry();
+ $this->assertText('Count: 2');
+ $this->retry();
+ $this->assertText('Count: 3');
+ }
+
+ function testReloadingSingleFrameWithCookieCounter() {
+ $this->get($this->samples() . 'counting_frameset.html');
+ $this->setFrameFocus('a');
+ $this->assertText('Count: 1');
+ $this->setFrameFocus('b');
+ $this->assertText('Count: 2');
+
+ $this->setFrameFocus('a');
+ $this->retry();
+ $this->assertText('Count: 3');
+ $this->retry();
+ $this->assertText('Count: 4');
+ $this->setFrameFocus('b');
+ $this->assertText('Count: 2');
+ }
+
+ function testReloadingFrameWhenUnfocusedReloadsWholeFrameset() {
+ $this->get($this->samples() . 'counting_frameset.html');
+ $this->setFrameFocus('a');
+ $this->assertText('Count: 1');
+ $this->setFrameFocus('b');
+ $this->assertText('Count: 2');
+
+ $this->clearFrameFocus('a');
+ $this->retry();
+
+ $this->assertTitle('Frameset for testing of SimpleTest');
+ $this->setFrameFocus('a');
+ $this->assertText('Count: 3');
+ $this->setFrameFocus('b');
+ $this->assertText('Count: 4');
+ }
+
+ function testClickingNormalLinkReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->clickLink('2');
+ $this->assertLink('3');
+ $this->assertText('Simple test front controller');
+ }
+
+ function testJumpToNamedPageReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->assertPattern('/Simple test front controller/');
+ $this->clickLink('Index');
+ $this->assertResponse(200);
+ $this->assertText('[action=index]');
+ $this->assertText('Count: 1');
+ }
+
+ function testJumpToUnnamedPageReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->clickLink('No page');
+ $this->assertResponse(200);
+ $this->assertText('Simple test front controller');
+ $this->assertText('[action=no_page]');
+ $this->assertText('Count: 1');
+ }
+
+ function testJumpToUnnamedPageWithBareParameterReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->clickLink('Bare action');
+ $this->assertResponse(200);
+ $this->assertText('Simple test front controller');
+ $this->assertText('[action=]');
+ $this->assertText('Count: 1');
+ }
+
+ function testJumpToUnnamedPageWithEmptyQueryReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->clickLink('Empty query');
+ $this->assertResponse(200);
+ $this->assertPattern('/Simple test front controller/');
+ $this->assertPattern('/raw get data.*?\[\].*?get data/si');
+ $this->assertPattern('/Count: 1/');
+ }
+
+ function testJumpToUnnamedPageWithEmptyLinkReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->clickLink('Empty link');
+ $this->assertResponse(200);
+ $this->assertPattern('/Simple test front controller/');
+ $this->assertPattern('/raw get data.*?\[\].*?get data/si');
+ $this->assertPattern('/Count: 1/');
+ }
+
+ function testJumpBackADirectoryLevelReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->clickLink('Down one');
+ $this->assertPattern('/index of .*\/test/i');
+ $this->assertPattern('/Count: 1/');
+ }
+
+ function testSubmitToNamedPageReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->assertPattern('/Simple test front controller/');
+ $this->clickSubmit('Index');
+ $this->assertResponse(200);
+ $this->assertText('[action=Index]');
+ $this->assertText('Count: 1');
+ }
+
+ function testSubmitToSameDirectoryReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->clickSubmit('Same directory');
+ $this->assertResponse(200);
+ $this->assertText('[action=Same+directory]');
+ $this->assertText('Count: 1');
+ }
+
+ function testSubmitToEmptyActionReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->clickSubmit('Empty action');
+ $this->assertResponse(200);
+ $this->assertText('[action=Empty+action]');
+ $this->assertText('Count: 1');
+ }
+
+ function testSubmitToNoActionReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->clickSubmit('No action');
+ $this->assertResponse(200);
+ $this->assertText('[action=No+action]');
+ $this->assertText('Count: 1');
+ }
+
+ function testSubmitBackADirectoryLevelReplacesJustThatFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->clickSubmit('Down one');
+ $this->assertPattern('/index of .*\/test/i');
+ $this->assertPattern('/Count: 1/');
+ }
+
+ function testTopLinkExitsFrameset() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->clickLink('Exit the frameset');
+ $this->assertTitle('Simple test target file');
+ }
+
+ function testLinkInOnePageCanLoadAnother() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->assertNoLink('3');
+ $this->clickLink('Set one to 2');
+ $this->assertLink('3');
+ $this->assertNoLink('2');
+ $this->assertTitle('Frameset for testing of SimpleTest');
+ }
+
+ function testFrameWithRelativeLinksRespectsBaseTagForThatPage() {
+ $this->get($this->samples() . 'base_tag/frameset.html');
+ $this->click('Back to test pages');
+ $this->assertTitle('Frameset for testing of SimpleTest');
+ $this->assertText('A target for the SimpleTest test suite');
+ }
+
+ function testRelativeLinkInFrameIsNotAffectedByFramesetBaseTag() {
+ $this->get($this->samples() . 'base_tag/frameset_with_base_tag.html');
+ $this->assertText('This is page 1');
+ $this->click('To page 2');
+ $this->assertTitle('Frameset for testing of SimpleTest');
+ $this->assertText('This is page 2');
+ }
+}
+
+class TestOfFrameAuthentication extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testUnauthenticatedFrameSendsChallenge() {
+ $this->get($this->samples() . 'protected/');
+ $this->setFrameFocus('Protected');
+ $this->assertAuthentication('Basic');
+ $this->assertRealm('SimpleTest basic authentication');
+ $this->assertResponse(401);
+ }
+
+ function testCanReadFrameFromAlreadyAuthenticatedRealm() {
+ $this->get($this->samples() . 'protected/');
+ $this->authenticate('test', 'secret');
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->setFrameFocus('Protected');
+ $this->assertResponse(200);
+ $this->assertText('A target for the SimpleTest test suite');
+ }
+
+ function testCanAuthenticateFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->setFrameFocus('Protected');
+ $this->authenticate('test', 'secret');
+ $this->assertResponse(200);
+ $this->assertText('A target for the SimpleTest test suite');
+ $this->clearFrameFocus();
+ $this->assertText('Count: 1');
+ }
+
+ function testCanAuthenticateRedirectedFrame() {
+ $this->get($this->samples() . 'messy_frameset.html');
+ $this->setFrameFocus('Protected redirect');
+ $this->assertResponse(401);
+ $this->authenticate('test', 'secret');
+ $this->assertResponse(200);
+ $this->assertText('A target for the SimpleTest test suite');
+ $this->clearFrameFocus();
+ $this->assertText('Count: 1');
+ }
+}
+
+class TestOfNestedFrames extends SimpleTestAcceptanceTest {
+ function setUp() {
+ $this->addHeader('User-Agent: SimpleTest ' . SimpleTest::getVersion());
+ }
+
+ function testCanNavigateToSpecificContent() {
+ $this->get($this->samples() . 'nested_frameset.html');
+ $this->assertTitle('Nested frameset for testing of SimpleTest');
+
+ $this->assertPattern('/This is frame A/');
+ $this->assertPattern('/This is frame B/');
+ $this->assertPattern('/Simple test front controller/');
+ $this->assertLink('2');
+ $this->assertLink('Set one to 2');
+ $this->assertPattern('/Count: 1/');
+ $this->assertPattern('/r=rrr/');
+
+ $this->setFrameFocus('pair');
+ $this->assertPattern('/This is frame A/');
+ $this->assertPattern('/This is frame B/');
+ $this->assertNoPattern('/Simple test front controller/');
+ $this->assertNoLink('2');
+
+ $this->setFrameFocus('aaa');
+ $this->assertPattern('/This is frame A/');
+ $this->assertNoPattern('/This is frame B/');
+
+ $this->clearFrameFocus();
+ $this->assertResponse(200);
+ $this->setFrameFocus('messy');
+ $this->assertResponse(200);
+ $this->setFrameFocus('Front controller');
+ $this->assertResponse(200);
+ $this->assertPattern('/Simple test front controller/');
+ $this->assertNoLink('2');
+ }
+
+ function testReloadingFramesetPage() {
+ $this->get($this->samples() . 'nested_frameset.html');
+ $this->assertPattern('/Count: 1/');
+ $this->retry();
+ $this->assertPattern('/Count: 2/');
+ $this->retry();
+ $this->assertPattern('/Count: 3/');
+ }
+
+ function testRetryingNestedPageOnlyRetriesThatSet() {
+ $this->get($this->samples() . 'nested_frameset.html');
+ $this->assertPattern('/Count: 1/');
+ $this->setFrameFocus('messy');
+ $this->retry();
+ $this->assertPattern('/Count: 2/');
+ $this->setFrameFocus('Counter');
+ $this->retry();
+ $this->assertPattern('/Count: 3/');
+
+ $this->clearFrameFocus();
+ $this->setFrameFocus('messy');
+ $this->setFrameFocus('Front controller');
+ $this->retry();
+
+ $this->clearFrameFocus();
+ $this->assertPattern('/Count: 3/');
+ }
+
+ function testAuthenticatingNestedPage() {
+ $this->get($this->samples() . 'nested_frameset.html');
+ $this->setFrameFocus('messy');
+ $this->setFrameFocus('Protected');
+ $this->assertAuthentication('Basic');
+ $this->assertRealm('SimpleTest basic authentication');
+ $this->assertResponse(401);
+
+ $this->authenticate('test', 'secret');
+ $this->assertResponse(200);
+ $this->assertPattern('/A target for the SimpleTest test suite/');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/adapter_test.php b/vendors/simpletest/test/adapter_test.php
new file mode 100644
index 000000000..f4564ea87
--- /dev/null
+++ b/vendors/simpletest/test/adapter_test.php
@@ -0,0 +1,77 @@
+<?php
+// $Id: adapter_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../extensions/pear_test_case.php');
+require_once(dirname(__FILE__) . '/../extensions/phpunit_test_case.php');
+
+class SameTestClass {
+}
+
+class TestOfPearAdapter extends PHPUnit_TestCase {
+
+ function testBoolean() {
+ $this->assertTrue(true, "PEAR true");
+ $this->assertFalse(false, "PEAR false");
+ }
+
+ function testName() {
+ $this->assertTrue($this->getName() == get_class($this));
+ }
+
+ function testPass() {
+ $this->pass("PEAR pass");
+ }
+
+ function testNulls() {
+ $value = null;
+ $this->assertNull($value, "PEAR null");
+ $value = 0;
+ $this->assertNotNull($value, "PEAR not null");
+ }
+
+ function testType() {
+ $this->assertType("Hello", "string", "PEAR type");
+ }
+
+ function testEquals() {
+ $this->assertEquals(12, 12, "PEAR identity");
+ $this->setLooselyTyped(true);
+ $this->assertEquals("12", 12, "PEAR equality");
+ }
+
+ function testSame() {
+ $same = &new SameTestClass();
+ $this->assertSame($same, $same, "PEAR same");
+ }
+
+ function testRegExp() {
+ $this->assertRegExp('/hello/', "A big hello from me", "PEAR regex");
+ }
+}
+
+class TestOfPhpUnitAdapter extends TestCase {
+ function TestOfPhpUnitAdapter() {
+ $this->TestCase('TestOfPhpUnitAdapter');
+ }
+
+ function testBoolean() {
+ $this->assert(true, 'PHP Unit true');
+ }
+
+ function testName() {
+ $this->assert($this->name() == 'TestOfPhpUnitAdapter');
+ }
+
+ function testEquals() {
+ $this->assertEquals(12, 12, 'PHP Unit equality');
+ }
+
+ function testMultilineEquals() {
+ $this->assertEquals("a\nb\n", "a\nb\n", 'PHP Unit equality');
+ }
+
+ function testRegExp() {
+ $this->assertRegexp('/hello/', 'A big hello from me', 'PHPUnit regex');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/all_tests.php b/vendors/simpletest/test/all_tests.php
new file mode 100644
index 000000000..99ce9451e
--- /dev/null
+++ b/vendors/simpletest/test/all_tests.php
@@ -0,0 +1,13 @@
+<?php
+require_once(dirname(__FILE__) . '/../autorun.php');
+
+class AllTests extends TestSuite {
+ function AllTests() {
+ $this->TestSuite('All tests for SimpleTest ' . SimpleTest::getVersion());
+ $this->addFile(dirname(__FILE__) . '/unit_tests.php');
+ $this->addFile(dirname(__FILE__) . '/shell_test.php');
+ $this->addFile(dirname(__FILE__) . '/live_test.php');
+ $this->addFile(dirname(__FILE__) . '/acceptance_test.php');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/authentication_test.php b/vendors/simpletest/test/authentication_test.php
new file mode 100644
index 000000000..8573eddc8
--- /dev/null
+++ b/vendors/simpletest/test/authentication_test.php
@@ -0,0 +1,145 @@
+<?php
+// $Id: authentication_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../authentication.php');
+require_once(dirname(__FILE__) . '/../http.php');
+Mock::generate('SimpleHttpRequest');
+
+class TestOfRealm extends UnitTestCase {
+
+ function testWithinSameUrl() {
+ $realm = &new SimpleRealm(
+ 'Basic',
+ new SimpleUrl('http://www.here.com/path/hello.html'));
+ $this->assertTrue($realm->isWithin(
+ new SimpleUrl('http://www.here.com/path/hello.html')));
+ }
+
+ function testInsideWithLongerUrl() {
+ $realm = &new SimpleRealm(
+ 'Basic',
+ new SimpleUrl('http://www.here.com/path/'));
+ $this->assertTrue($realm->isWithin(
+ new SimpleUrl('http://www.here.com/path/hello.html')));
+ }
+
+ function testBelowRootIsOutside() {
+ $realm = &new SimpleRealm(
+ 'Basic',
+ new SimpleUrl('http://www.here.com/path/'));
+ $this->assertTrue($realm->isWithin(
+ new SimpleUrl('http://www.here.com/path/more/hello.html')));
+ }
+
+ function testOldNetscapeDefinitionIsOutside() {
+ $realm = &new SimpleRealm(
+ 'Basic',
+ new SimpleUrl('http://www.here.com/path/'));
+ $this->assertFalse($realm->isWithin(
+ new SimpleUrl('http://www.here.com/pathmore/hello.html')));
+ }
+
+ function testInsideWithMissingTrailingSlash() {
+ $realm = &new SimpleRealm(
+ 'Basic',
+ new SimpleUrl('http://www.here.com/path/'));
+ $this->assertTrue($realm->isWithin(
+ new SimpleUrl('http://www.here.com/path')));
+ }
+
+ function testDifferentPageNameStillInside() {
+ $realm = &new SimpleRealm(
+ 'Basic',
+ new SimpleUrl('http://www.here.com/path/hello.html'));
+ $this->assertTrue($realm->isWithin(
+ new SimpleUrl('http://www.here.com/path/goodbye.html')));
+ }
+
+ function testNewUrlInSameDirectoryDoesNotChangeRealm() {
+ $realm = &new SimpleRealm(
+ 'Basic',
+ new SimpleUrl('http://www.here.com/path/hello.html'));
+ $realm->stretch(new SimpleUrl('http://www.here.com/path/goodbye.html'));
+ $this->assertTrue($realm->isWithin(
+ new SimpleUrl('http://www.here.com/path/index.html')));
+ $this->assertFalse($realm->isWithin(
+ new SimpleUrl('http://www.here.com/index.html')));
+ }
+
+ function testNewUrlMakesRealmTheCommonPath() {
+ $realm = &new SimpleRealm(
+ 'Basic',
+ new SimpleUrl('http://www.here.com/path/here/hello.html'));
+ $realm->stretch(new SimpleUrl('http://www.here.com/path/there/goodbye.html'));
+ $this->assertTrue($realm->isWithin(
+ new SimpleUrl('http://www.here.com/path/here/index.html')));
+ $this->assertTrue($realm->isWithin(
+ new SimpleUrl('http://www.here.com/path/there/index.html')));
+ $this->assertTrue($realm->isWithin(
+ new SimpleUrl('http://www.here.com/path/index.html')));
+ $this->assertFalse($realm->isWithin(
+ new SimpleUrl('http://www.here.com/index.html')));
+ $this->assertFalse($realm->isWithin(
+ new SimpleUrl('http://www.here.com/paths/index.html')));
+ $this->assertFalse($realm->isWithin(
+ new SimpleUrl('http://www.here.com/pathindex.html')));
+ }
+}
+
+class TestOfAuthenticator extends UnitTestCase {
+
+ function testNoRealms() {
+ $request = &new MockSimpleHttpRequest();
+ $request->expectNever('addHeaderLine');
+ $authenticator = &new SimpleAuthenticator();
+ $authenticator->addHeaders($request, new SimpleUrl('http://here.com/'));
+ }
+
+ function &createSingleRealm() {
+ $authenticator = &new SimpleAuthenticator();
+ $authenticator->addRealm(
+ new SimpleUrl('http://www.here.com/path/hello.html'),
+ 'Basic',
+ 'Sanctuary');
+ $authenticator->setIdentityForRealm('www.here.com', 'Sanctuary', 'test', 'secret');
+ return $authenticator;
+ }
+
+ function testOutsideRealm() {
+ $request = &new MockSimpleHttpRequest();
+ $request->expectNever('addHeaderLine');
+ $authenticator = &$this->createSingleRealm();
+ $authenticator->addHeaders(
+ $request,
+ new SimpleUrl('http://www.here.com/hello.html'));
+ }
+
+ function testWithinRealm() {
+ $request = &new MockSimpleHttpRequest();
+ $request->expectOnce('addHeaderLine');
+ $authenticator = &$this->createSingleRealm();
+ $authenticator->addHeaders(
+ $request,
+ new SimpleUrl('http://www.here.com/path/more/hello.html'));
+ }
+
+ function testRestartingClearsRealm() {
+ $request = &new MockSimpleHttpRequest();
+ $request->expectNever('addHeaderLine');
+ $authenticator = &$this->createSingleRealm();
+ $authenticator->restartSession();
+ $authenticator->addHeaders(
+ $request,
+ new SimpleUrl('http://www.here.com/hello.html'));
+ }
+
+ function testDifferentHostIsOutsideRealm() {
+ $request = &new MockSimpleHttpRequest();
+ $request->expectNever('addHeaderLine');
+ $authenticator = &$this->createSingleRealm();
+ $authenticator->addHeaders(
+ $request,
+ new SimpleUrl('http://here.com/path/hello.html'));
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/autorun_test.php b/vendors/simpletest/test/autorun_test.php
new file mode 100644
index 000000000..76c919d6c
--- /dev/null
+++ b/vendors/simpletest/test/autorun_test.php
@@ -0,0 +1,13 @@
+<?php
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/support/test1.php');
+
+class LoadIfIncludedTestCase extends UnitTestCase {
+ function test_load_if_included() {
+ $tests = new GroupTest();
+ $tests->addFile(dirname(__FILE__) . '/support/test1.php');
+ $this->assertEqual($tests->getSize(), 1);
+ }
+}
+
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/bad_test_suite.php b/vendors/simpletest/test/bad_test_suite.php
new file mode 100644
index 000000000..b426013be
--- /dev/null
+++ b/vendors/simpletest/test/bad_test_suite.php
@@ -0,0 +1,10 @@
+<?php
+require_once(dirname(__FILE__) . '/../autorun.php');
+
+class BadTestCases extends TestSuite {
+ function BadTestCases() {
+ $this->TestSuite('Two bad test cases');
+ $this->addFile(dirname(__FILE__) . '/support/empty_test_file.php');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/browser_test.php b/vendors/simpletest/test/browser_test.php
new file mode 100644
index 000000000..18faee8f2
--- /dev/null
+++ b/vendors/simpletest/test/browser_test.php
@@ -0,0 +1,779 @@
+<?php
+// $Id: browser_test.php 1624 2008-01-01 15:00:43Z pp11 $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../browser.php');
+require_once(dirname(__FILE__) . '/../user_agent.php');
+require_once(dirname(__FILE__) . '/../http.php');
+require_once(dirname(__FILE__) . '/../page.php');
+require_once(dirname(__FILE__) . '/../encoding.php');
+
+Mock::generate('SimpleHttpResponse');
+Mock::generate('SimplePage');
+Mock::generate('SimpleForm');
+Mock::generate('SimpleUserAgent');
+Mock::generatePartial(
+ 'SimpleBrowser',
+ 'MockParseSimpleBrowser',
+ array('_createUserAgent', '_parse'));
+Mock::generatePartial(
+ 'SimpleBrowser',
+ 'MockUserAgentSimpleBrowser',
+ array('_createUserAgent'));
+
+class TestOfHistory extends UnitTestCase {
+
+ function testEmptyHistoryHasFalseContents() {
+ $history = &new SimpleBrowserHistory();
+ $this->assertIdentical($history->getUrl(), false);
+ $this->assertIdentical($history->getParameters(), false);
+ }
+
+ function testCannotMoveInEmptyHistory() {
+ $history = &new SimpleBrowserHistory();
+ $this->assertFalse($history->back());
+ $this->assertFalse($history->forward());
+ }
+
+ function testCurrentTargetAccessors() {
+ $history = &new SimpleBrowserHistory();
+ $history->recordEntry(
+ new SimpleUrl('http://www.here.com/'),
+ new SimpleGetEncoding());
+ $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.here.com/'));
+ $this->assertIdentical($history->getParameters(), new SimpleGetEncoding());
+ }
+
+ function testSecondEntryAccessors() {
+ $history = &new SimpleBrowserHistory();
+ $history->recordEntry(
+ new SimpleUrl('http://www.first.com/'),
+ new SimpleGetEncoding());
+ $history->recordEntry(
+ new SimpleUrl('http://www.second.com/'),
+ new SimplePostEncoding(array('a' => 1)));
+ $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.second.com/'));
+ $this->assertIdentical(
+ $history->getParameters(),
+ new SimplePostEncoding(array('a' => 1)));
+ }
+
+ function testGoingBackwards() {
+ $history = &new SimpleBrowserHistory();
+ $history->recordEntry(
+ new SimpleUrl('http://www.first.com/'),
+ new SimpleGetEncoding());
+ $history->recordEntry(
+ new SimpleUrl('http://www.second.com/'),
+ new SimplePostEncoding(array('a' => 1)));
+ $this->assertTrue($history->back());
+ $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.first.com/'));
+ $this->assertIdentical($history->getParameters(), new SimpleGetEncoding());
+ }
+
+ function testGoingBackwardsOffBeginning() {
+ $history = &new SimpleBrowserHistory();
+ $history->recordEntry(
+ new SimpleUrl('http://www.first.com/'),
+ new SimpleGetEncoding());
+ $this->assertFalse($history->back());
+ $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.first.com/'));
+ $this->assertIdentical($history->getParameters(), new SimpleGetEncoding());
+ }
+
+ function testGoingForwardsOffEnd() {
+ $history = &new SimpleBrowserHistory();
+ $history->recordEntry(
+ new SimpleUrl('http://www.first.com/'),
+ new SimpleGetEncoding());
+ $this->assertFalse($history->forward());
+ $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.first.com/'));
+ $this->assertIdentical($history->getParameters(), new SimpleGetEncoding());
+ }
+
+ function testGoingBackwardsAndForwards() {
+ $history = &new SimpleBrowserHistory();
+ $history->recordEntry(
+ new SimpleUrl('http://www.first.com/'),
+ new SimpleGetEncoding());
+ $history->recordEntry(
+ new SimpleUrl('http://www.second.com/'),
+ new SimplePostEncoding(array('a' => 1)));
+ $this->assertTrue($history->back());
+ $this->assertTrue($history->forward());
+ $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.second.com/'));
+ $this->assertIdentical(
+ $history->getParameters(),
+ new SimplePostEncoding(array('a' => 1)));
+ }
+
+ function testNewEntryReplacesNextOne() {
+ $history = &new SimpleBrowserHistory();
+ $history->recordEntry(
+ new SimpleUrl('http://www.first.com/'),
+ new SimpleGetEncoding());
+ $history->recordEntry(
+ new SimpleUrl('http://www.second.com/'),
+ new SimplePostEncoding(array('a' => 1)));
+ $history->back();
+ $history->recordEntry(
+ new SimpleUrl('http://www.third.com/'),
+ new SimpleGetEncoding());
+ $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.third.com/'));
+ $this->assertIdentical($history->getParameters(), new SimpleGetEncoding());
+ }
+
+ function testNewEntryDropsFutureEntries() {
+ $history = &new SimpleBrowserHistory();
+ $history->recordEntry(
+ new SimpleUrl('http://www.first.com/'),
+ new SimpleGetEncoding());
+ $history->recordEntry(
+ new SimpleUrl('http://www.second.com/'),
+ new SimpleGetEncoding());
+ $history->recordEntry(
+ new SimpleUrl('http://www.third.com/'),
+ new SimpleGetEncoding());
+ $history->back();
+ $history->back();
+ $history->recordEntry(
+ new SimpleUrl('http://www.fourth.com/'),
+ new SimpleGetEncoding());
+ $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.fourth.com/'));
+ $this->assertFalse($history->forward());
+ $history->back();
+ $this->assertIdentical($history->getUrl(), new SimpleUrl('http://www.first.com/'));
+ $this->assertFalse($history->back());
+ }
+}
+
+class TestOfParsedPageAccess extends UnitTestCase {
+
+ function &loadPage(&$page) {
+ $response = &new MockSimpleHttpResponse($this);
+
+ $agent = &new MockSimpleUserAgent($this);
+ $agent->setReturnReference('fetchResponse', $response);
+
+ $browser = &new MockParseSimpleBrowser($this);
+ $browser->setReturnReference('_createUserAgent', $agent);
+ $browser->setReturnReference('_parse', $page);
+ $browser->SimpleBrowser();
+
+ $browser->get('http://this.com/page.html');
+ return $browser;
+ }
+
+ function testAccessorsWhenNoPage() {
+ $agent = &new MockSimpleUserAgent($this);
+
+ $browser = &new MockParseSimpleBrowser($this);
+ $browser->setReturnReference('_createUserAgent', $agent);
+ $browser->SimpleBrowser();
+
+ $this->assertEqual($browser->getContent(), '');
+ }
+
+ function testParse() {
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getRequest', "GET here.html\r\n\r\n");
+ $page->setReturnValue('getRaw', 'Raw HTML');
+ $page->setReturnValue('getTitle', 'Here');
+ $page->setReturnValue('getFrameFocus', 'Frame');
+ $page->setReturnValue('getMimeType', 'text/html');
+ $page->setReturnValue('getResponseCode', 200);
+ $page->setReturnValue('getAuthentication', 'Basic');
+ $page->setReturnValue('getRealm', 'Somewhere');
+ $page->setReturnValue('getTransportError', 'Ouch!');
+
+ $browser = &$this->loadPage($page);
+
+ $this->assertEqual($browser->getRequest(), "GET here.html\r\n\r\n");
+ $this->assertEqual($browser->getContent(), 'Raw HTML');
+ $this->assertEqual($browser->getTitle(), 'Here');
+ $this->assertEqual($browser->getFrameFocus(), 'Frame');
+ $this->assertIdentical($browser->getResponseCode(), 200);
+ $this->assertEqual($browser->getMimeType(), 'text/html');
+ $this->assertEqual($browser->getAuthentication(), 'Basic');
+ $this->assertEqual($browser->getRealm(), 'Somewhere');
+ $this->assertEqual($browser->getTransportError(), 'Ouch!');
+ }
+
+ function testLinkAffirmationWhenPresent() {
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getUrlsByLabel', array('http://www.nowhere.com'));
+ $page->expectOnce('getUrlsByLabel', array('a link label'));
+ $browser = &$this->loadPage($page);
+ $this->assertIdentical($browser->getLink('a link label'), 'http://www.nowhere.com');
+ }
+
+ function testLinkAffirmationByIdWhenPresent() {
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getUrlById', 'a_page.com', array(99));
+ $page->setReturnValue('getUrlById', false, array('*'));
+ $browser = &$this->loadPage($page);
+ $this->assertIdentical($browser->getLinkById(99), 'a_page.com');
+ $this->assertFalse($browser->getLinkById(98));
+ }
+
+ function testSettingFieldIsPassedToPage() {
+ $page = &new MockSimplePage();
+ $page->expectOnce('setField', array(new SimpleByLabelOrName('key'), 'Value', false));
+ $page->setReturnValue('getField', 'Value');
+ $browser = &$this->loadPage($page);
+ $this->assertEqual($browser->getField('key'), 'Value');
+ $browser->setField('key', 'Value');
+ }
+}
+
+class TestOfBrowserNavigation extends UnitTestCase {
+
+ function &createBrowser(&$agent, &$page) {
+ $browser = &new MockParseSimpleBrowser();
+ $browser->setReturnReference('_createUserAgent', $agent);
+ $browser->setReturnReference('_parse', $page);
+ $browser->SimpleBrowser();
+ return $browser;
+ }
+
+ function testClickLinkRequestsPage() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+ $agent->expectArgumentsAt(
+ 0,
+ 'fetchResponse',
+ array(new SimpleUrl('http://this.com/page.html'), new SimpleGetEncoding()));
+ $agent->expectArgumentsAt(
+ 1,
+ 'fetchResponse',
+ array(new SimpleUrl('http://this.com/new.html'), new SimpleGetEncoding()));
+ $agent->expectCallCount('fetchResponse', 2);
+
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getUrlsByLabel', array(new SimpleUrl('http://this.com/new.html')));
+ $page->expectOnce('getUrlsByLabel', array('New'));
+ $page->setReturnValue('getRaw', 'A page');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->clickLink('New'));
+ }
+
+ function testClickLinkWithUnknownFrameStillRequestsWholePage() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+ $agent->expectArgumentsAt(
+ 0,
+ 'fetchResponse',
+ array(new SimpleUrl('http://this.com/page.html'), new SimpleGetEncoding()));
+ $target = new SimpleUrl('http://this.com/new.html');
+ $target->setTarget('missing');
+ $agent->expectArgumentsAt(
+ 1,
+ 'fetchResponse',
+ array($target, new SimpleGetEncoding()));
+ $agent->expectCallCount('fetchResponse', 2);
+
+ $parsed_url = new SimpleUrl('http://this.com/new.html');
+ $parsed_url->setTarget('missing');
+
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getUrlsByLabel', array($parsed_url));
+ $page->setReturnValue('hasFrames', false);
+ $page->expectOnce('getUrlsByLabel', array('New'));
+ $page->setReturnValue('getRaw', 'A page');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->clickLink('New'));
+ }
+
+ function testClickingMissingLinkFails() {
+ $agent = &new MockSimpleUserAgent($this);
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getUrlsByLabel', array());
+ $page->setReturnValue('getRaw', 'stuff');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $this->assertTrue($browser->get('http://this.com/page.html'));
+ $this->assertFalse($browser->clickLink('New'));
+ }
+
+ function testClickIndexedLink() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+ $agent->expectArgumentsAt(
+ 1,
+ 'fetchResponse',
+ array(new SimpleUrl('1.html'), new SimpleGetEncoding()));
+ $agent->expectCallCount('fetchResponse', 2);
+
+ $page = &new MockSimplePage();
+ $page->setReturnValue(
+ 'getUrlsByLabel',
+ array(new SimpleUrl('0.html'), new SimpleUrl('1.html')));
+ $page->setReturnValue('getRaw', 'A page');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->clickLink('New', 1));
+ }
+
+ function testClinkLinkById() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+ $agent->expectArgumentsAt(1, 'fetchResponse', array(
+ new SimpleUrl('http://this.com/link.html'),
+ new SimpleGetEncoding()));
+ $agent->expectCallCount('fetchResponse', 2);
+
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getUrlById', new SimpleUrl('http://this.com/link.html'));
+ $page->expectOnce('getUrlById', array(2));
+ $page->setReturnValue('getRaw', 'A page');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->clickLinkById(2));
+ }
+
+ function testClickingMissingLinkIdFails() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getUrlById', false);
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertFalse($browser->clickLink(0));
+ }
+
+ function testSubmitFormByLabel() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+ $agent->expectArgumentsAt(1, 'fetchResponse', array(
+ new SimpleUrl('http://this.com/handler.html'),
+ new SimplePostEncoding(array('a' => 'A'))));
+ $agent->expectCallCount('fetchResponse', 2);
+
+ $form = &new MockSimpleForm();
+ $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
+ $form->setReturnValue('getMethod', 'post');
+ $form->setReturnValue('submitButton', new SimplePostEncoding(array('a' => 'A')));
+ $form->expectOnce('submitButton', array(new SimpleByLabel('Go'), false));
+
+ $page = &new MockSimplePage();
+ $page->setReturnReference('getFormBySubmit', $form);
+ $page->expectOnce('getFormBySubmit', array(new SimpleByLabel('Go')));
+ $page->setReturnValue('getRaw', 'stuff');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->clickSubmit('Go'));
+ }
+
+ function testDefaultSubmitFormByLabel() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+ $agent->expectArgumentsAt(1, 'fetchResponse', array(
+ new SimpleUrl('http://this.com/page.html'),
+ new SimpleGetEncoding(array('a' => 'A'))));
+ $agent->expectCallCount('fetchResponse', 2);
+
+ $form = &new MockSimpleForm();
+ $form->setReturnValue('getAction', new SimpleUrl('http://this.com/page.html'));
+ $form->setReturnValue('getMethod', 'get');
+ $form->setReturnValue('submitButton', new SimpleGetEncoding(array('a' => 'A')));
+
+ $page = &new MockSimplePage();
+ $page->setReturnReference('getFormBySubmit', $form);
+ $page->expectOnce('getFormBySubmit', array(new SimpleByLabel('Submit')));
+ $page->setReturnValue('getRaw', 'stuff');
+ $page->setReturnValue('getUrl', new SimpleUrl('http://this.com/page.html'));
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->clickSubmit());
+ }
+
+ function testSubmitFormByName() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+
+ $form = &new MockSimpleForm();
+ $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
+ $form->setReturnValue('getMethod', 'post');
+ $form->setReturnValue('submitButton', new SimplePostEncoding(array('a' => 'A')));
+
+ $page = &new MockSimplePage();
+ $page->setReturnReference('getFormBySubmit', $form);
+ $page->expectOnce('getFormBySubmit', array(new SimpleByName('me')));
+ $page->setReturnValue('getRaw', 'stuff');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->clickSubmitByName('me'));
+ }
+
+ function testSubmitFormById() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+
+ $form = &new MockSimpleForm();
+ $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
+ $form->setReturnValue('getMethod', 'post');
+ $form->setReturnValue('submitButton', new SimplePostEncoding(array('a' => 'A')));
+ $form->expectOnce('submitButton', array(new SimpleById(99), false));
+
+ $page = &new MockSimplePage();
+ $page->setReturnReference('getFormBySubmit', $form);
+ $page->expectOnce('getFormBySubmit', array(new SimpleById(99)));
+ $page->setReturnValue('getRaw', 'stuff');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->clickSubmitById(99));
+ }
+
+ function testSubmitFormByImageLabel() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+
+ $form = &new MockSimpleForm();
+ $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
+ $form->setReturnValue('getMethod', 'post');
+ $form->setReturnValue('submitImage', new SimplePostEncoding(array('a' => 'A')));
+ $form->expectOnce('submitImage', array(new SimpleByLabel('Go!'), 10, 11, false));
+
+ $page = &new MockSimplePage();
+ $page->setReturnReference('getFormByImage', $form);
+ $page->expectOnce('getFormByImage', array(new SimpleByLabel('Go!')));
+ $page->setReturnValue('getRaw', 'stuff');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->clickImage('Go!', 10, 11));
+ }
+
+ function testSubmitFormByImageName() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+
+ $form = &new MockSimpleForm();
+ $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
+ $form->setReturnValue('getMethod', 'post');
+ $form->setReturnValue('submitImage', new SimplePostEncoding(array('a' => 'A')));
+ $form->expectOnce('submitImage', array(new SimpleByName('a'), 10, 11, false));
+
+ $page = &new MockSimplePage();
+ $page->setReturnReference('getFormByImage', $form);
+ $page->expectOnce('getFormByImage', array(new SimpleByName('a')));
+ $page->setReturnValue('getRaw', 'stuff');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->clickImageByName('a', 10, 11));
+ }
+
+ function testSubmitFormByImageId() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+
+ $form = &new MockSimpleForm();
+ $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
+ $form->setReturnValue('getMethod', 'post');
+ $form->setReturnValue('submitImage', new SimplePostEncoding(array('a' => 'A')));
+ $form->expectOnce('submitImage', array(new SimpleById(99), 10, 11, false));
+
+ $page = &new MockSimplePage();
+ $page->setReturnReference('getFormByImage', $form);
+ $page->expectOnce('getFormByImage', array(new SimpleById(99)));
+ $page->setReturnValue('getRaw', 'stuff');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->clickImageById(99, 10, 11));
+ }
+
+ function testSubmitFormByFormId() {
+ $agent = &new MockSimpleUserAgent();
+ $agent->setReturnReference('fetchResponse', new MockSimpleHttpResponse());
+ $agent->expectArgumentsAt(1, 'fetchResponse', array(
+ new SimpleUrl('http://this.com/handler.html'),
+ new SimplePostEncoding(array('a' => 'A'))));
+ $agent->expectCallCount('fetchResponse', 2);
+
+ $form = &new MockSimpleForm();
+ $form->setReturnValue('getAction', new SimpleUrl('http://this.com/handler.html'));
+ $form->setReturnValue('getMethod', 'post');
+ $form->setReturnValue('submit', new SimplePostEncoding(array('a' => 'A')));
+
+ $page = &new MockSimplePage();
+ $page->setReturnReference('getFormById', $form);
+ $page->expectOnce('getFormById', array(33));
+ $page->setReturnValue('getRaw', 'stuff');
+
+ $browser = &$this->createBrowser($agent, $page);
+ $browser->get('http://this.com/page.html');
+ $this->assertTrue($browser->submitFormById(33));
+ }
+}
+
+class TestOfBrowserFrames extends UnitTestCase {
+
+ function &createBrowser(&$agent) {
+ $browser = &new MockUserAgentSimpleBrowser();
+ $browser->setReturnReference('_createUserAgent', $agent);
+ $browser->SimpleBrowser();
+ return $browser;
+ }
+
+ function &createUserAgent($pages) {
+ $agent = &new MockSimpleUserAgent();
+ foreach ($pages as $url => $raw) {
+ $url = new SimpleUrl($url);
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', $url);
+ $response->setReturnValue('getContent', $raw);
+ $agent->setReturnReference('fetchResponse', $response, array($url, '*'));
+ }
+ return $agent;
+ }
+
+ function testSimplePageHasNoFrames() {
+ $browser = &$this->createBrowser($this->createUserAgent(
+ array('http://site.with.no.frames/' => 'A non-framed page')));
+ $this->assertEqual(
+ $browser->get('http://site.with.no.frames/'),
+ 'A non-framed page');
+ $this->assertIdentical($browser->getFrames(), 'http://site.with.no.frames/');
+ }
+
+ function testFramesetWithNoFrames() {
+ $browser = &$this->createBrowser($this->createUserAgent(
+ array('http://site.with.no.frames/' => '<frameset></frameset>')));
+ $this->assertEqual($browser->get('http://site.with.no.frames/'), '');
+ $this->assertIdentical($browser->getFrames(), array());
+ }
+
+ function testFramesetWithSingleFrame() {
+ $frameset = '<frameset><frame name="a" src="frame.html"></frameset>';
+ $browser = &$this->createBrowser($this->createUserAgent(array(
+ 'http://site.with.one.frame/' => $frameset,
+ 'http://site.with.one.frame/frame.html' => 'A frame')));
+ $this->assertEqual($browser->get('http://site.with.one.frame/'), 'A frame');
+ $this->assertIdentical(
+ $browser->getFrames(),
+ array('a' => 'http://site.with.one.frame/frame.html'));
+ }
+
+ function testTitleTakenFromFramesetPage() {
+ $frameset = '<title>Frameset title</title>' .
+ '<frameset><frame name="a" src="frame.html"></frameset>';
+ $browser = &$this->createBrowser($this->createUserAgent(array(
+ 'http://site.with.one.frame/' => $frameset,
+ 'http://site.with.one.frame/frame.html' => '<title>Page title</title>')));
+ $browser->get('http://site.with.one.frame/');
+ $this->assertEqual($browser->getTitle(), 'Frameset title');
+ }
+
+ function testFramesetWithSingleUnnamedFrame() {
+ $frameset = '<frameset><frame src="frame.html"></frameset>';
+ $browser = &$this->createBrowser($this->createUserAgent(array(
+ 'http://site.with.one.frame/' => $frameset,
+ 'http://site.with.one.frame/frame.html' => 'One frame')));
+ $this->assertEqual(
+ $browser->get('http://site.with.one.frame/'),
+ 'One frame');
+ $this->assertIdentical(
+ $browser->getFrames(),
+ array(1 => 'http://site.with.one.frame/frame.html'));
+ }
+
+ function testFramesetWithMultipleFrames() {
+ $frameset = '<frameset>' .
+ '<frame name="a" src="frame_a.html">' .
+ '<frame name="b" src="frame_b.html">' .
+ '<frame name="c" src="frame_c.html">' .
+ '</frameset>';
+ $browser = &$this->createBrowser($this->createUserAgent(array(
+ 'http://site.with.frames/' => $frameset,
+ 'http://site.with.frames/frame_a.html' => 'A frame',
+ 'http://site.with.frames/frame_b.html' => 'B frame',
+ 'http://site.with.frames/frame_c.html' => 'C frame')));
+ $this->assertEqual(
+ $browser->get('http://site.with.frames/'),
+ 'A frameB frameC frame');
+ $this->assertIdentical($browser->getFrames(), array(
+ 'a' => 'http://site.with.frames/frame_a.html',
+ 'b' => 'http://site.with.frames/frame_b.html',
+ 'c' => 'http://site.with.frames/frame_c.html'));
+ }
+
+ function testFrameFocusByName() {
+ $frameset = '<frameset>' .
+ '<frame name="a" src="frame_a.html">' .
+ '<frame name="b" src="frame_b.html">' .
+ '<frame name="c" src="frame_c.html">' .
+ '</frameset>';
+ $browser = &$this->createBrowser($this->createUserAgent(array(
+ 'http://site.with.frames/' => $frameset,
+ 'http://site.with.frames/frame_a.html' => 'A frame',
+ 'http://site.with.frames/frame_b.html' => 'B frame',
+ 'http://site.with.frames/frame_c.html' => 'C frame')));
+ $browser->get('http://site.with.frames/');
+ $browser->setFrameFocus('a');
+ $this->assertEqual($browser->getContent(), 'A frame');
+ $browser->setFrameFocus('b');
+ $this->assertEqual($browser->getContent(), 'B frame');
+ $browser->setFrameFocus('c');
+ $this->assertEqual($browser->getContent(), 'C frame');
+ }
+
+ function testFramesetWithSomeNamedFrames() {
+ $frameset = '<frameset>' .
+ '<frame name="a" src="frame_a.html">' .
+ '<frame src="frame_b.html">' .
+ '<frame name="c" src="frame_c.html">' .
+ '<frame src="frame_d.html">' .
+ '</frameset>';
+ $browser = &$this->createBrowser($this->createUserAgent(array(
+ 'http://site.with.frames/' => $frameset,
+ 'http://site.with.frames/frame_a.html' => 'A frame',
+ 'http://site.with.frames/frame_b.html' => 'B frame',
+ 'http://site.with.frames/frame_c.html' => 'C frame',
+ 'http://site.with.frames/frame_d.html' => 'D frame')));
+ $this->assertEqual(
+ $browser->get('http://site.with.frames/'),
+ 'A frameB frameC frameD frame');
+ $this->assertIdentical($browser->getFrames(), array(
+ 'a' => 'http://site.with.frames/frame_a.html',
+ 2 => 'http://site.with.frames/frame_b.html',
+ 'c' => 'http://site.with.frames/frame_c.html',
+ 4 => 'http://site.with.frames/frame_d.html'));
+ }
+
+ function testFrameFocusWithMixedNamesAndIndexes() {
+ $frameset = '<frameset>' .
+ '<frame name="a" src="frame_a.html">' .
+ '<frame src="frame_b.html">' .
+ '<frame name="c" src="frame_c.html">' .
+ '<frame src="frame_d.html">' .
+ '</frameset>';
+ $browser = &$this->createBrowser($this->createUserAgent(array(
+ 'http://site.with.frames/' => $frameset,
+ 'http://site.with.frames/frame_a.html' => 'A frame',
+ 'http://site.with.frames/frame_b.html' => 'B frame',
+ 'http://site.with.frames/frame_c.html' => 'C frame',
+ 'http://site.with.frames/frame_d.html' => 'D frame')));
+ $browser->get('http://site.with.frames/');
+ $browser->setFrameFocus('a');
+ $this->assertEqual($browser->getContent(), 'A frame');
+ $browser->setFrameFocus(2);
+ $this->assertEqual($browser->getContent(), 'B frame');
+ $browser->setFrameFocus('c');
+ $this->assertEqual($browser->getContent(), 'C frame');
+ $browser->setFrameFocus(4);
+ $this->assertEqual($browser->getContent(), 'D frame');
+ $browser->clearFrameFocus();
+ $this->assertEqual($browser->getContent(), 'A frameB frameC frameD frame');
+ }
+
+ function testNestedFrameset() {
+ $inner = '<frameset>' .
+ '<frame name="page" src="page.html">' .
+ '</frameset>';
+ $outer = '<frameset>' .
+ '<frame name="inner" src="inner.html">' .
+ '</frameset>';
+ $browser = &$this->createBrowser($this->createUserAgent(array(
+ 'http://site.with.nested.frame/' => $outer,
+ 'http://site.with.nested.frame/inner.html' => $inner,
+ 'http://site.with.nested.frame/page.html' => 'The page')));
+ $this->assertEqual(
+ $browser->get('http://site.with.nested.frame/'),
+ 'The page');
+ $this->assertIdentical($browser->getFrames(), array(
+ 'inner' => array(
+ 'page' => 'http://site.with.nested.frame/page.html')));
+ }
+
+ function testCanNavigateToNestedFrame() {
+ $inner = '<frameset>' .
+ '<frame name="one" src="one.html">' .
+ '<frame name="two" src="two.html">' .
+ '</frameset>';
+ $outer = '<frameset>' .
+ '<frame name="inner" src="inner.html">' .
+ '<frame name="three" src="three.html">' .
+ '</frameset>';
+ $browser = &$this->createBrowser($this->createUserAgent(array(
+ 'http://site.with.nested.frames/' => $outer,
+ 'http://site.with.nested.frames/inner.html' => $inner,
+ 'http://site.with.nested.frames/one.html' => 'Page one',
+ 'http://site.with.nested.frames/two.html' => 'Page two',
+ 'http://site.with.nested.frames/three.html' => 'Page three')));
+
+ $browser->get('http://site.with.nested.frames/');
+ $this->assertEqual($browser->getContent(), 'Page onePage twoPage three');
+
+ $this->assertTrue($browser->setFrameFocus('inner'));
+ $this->assertEqual($browser->getFrameFocus(), array('inner'));
+ $this->assertTrue($browser->setFrameFocus('one'));
+ $this->assertEqual($browser->getFrameFocus(), array('inner', 'one'));
+ $this->assertEqual($browser->getContent(), 'Page one');
+
+ $this->assertTrue($browser->setFrameFocus('two'));
+ $this->assertEqual($browser->getFrameFocus(), array('inner', 'two'));
+ $this->assertEqual($browser->getContent(), 'Page two');
+
+ $browser->clearFrameFocus();
+ $this->assertTrue($browser->setFrameFocus('three'));
+ $this->assertEqual($browser->getFrameFocus(), array('three'));
+ $this->assertEqual($browser->getContent(), 'Page three');
+
+ $this->assertTrue($browser->setFrameFocus('inner'));
+ $this->assertEqual($browser->getContent(), 'Page onePage two');
+ }
+
+ function testCanNavigateToNestedFrameByIndex() {
+ $inner = '<frameset>' .
+ '<frame src="one.html">' .
+ '<frame src="two.html">' .
+ '</frameset>';
+ $outer = '<frameset>' .
+ '<frame src="inner.html">' .
+ '<frame src="three.html">' .
+ '</frameset>';
+ $browser = &$this->createBrowser($this->createUserAgent(array(
+ 'http://site.with.nested.frames/' => $outer,
+ 'http://site.with.nested.frames/inner.html' => $inner,
+ 'http://site.with.nested.frames/one.html' => 'Page one',
+ 'http://site.with.nested.frames/two.html' => 'Page two',
+ 'http://site.with.nested.frames/three.html' => 'Page three')));
+
+ $browser->get('http://site.with.nested.frames/');
+ $this->assertEqual($browser->getContent(), 'Page onePage twoPage three');
+
+ $this->assertTrue($browser->setFrameFocusByIndex(1));
+ $this->assertEqual($browser->getFrameFocus(), array(1));
+ $this->assertTrue($browser->setFrameFocusByIndex(1));
+ $this->assertEqual($browser->getFrameFocus(), array(1, 1));
+ $this->assertEqual($browser->getContent(), 'Page one');
+
+ $this->assertTrue($browser->setFrameFocusByIndex(2));
+ $this->assertEqual($browser->getFrameFocus(), array(1, 2));
+ $this->assertEqual($browser->getContent(), 'Page two');
+
+ $browser->clearFrameFocus();
+ $this->assertTrue($browser->setFrameFocusByIndex(2));
+ $this->assertEqual($browser->getFrameFocus(), array(2));
+ $this->assertEqual($browser->getContent(), 'Page three');
+
+ $this->assertTrue($browser->setFrameFocusByIndex(1));
+ $this->assertEqual($browser->getContent(), 'Page onePage two');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/collector_test.php b/vendors/simpletest/test/collector_test.php
new file mode 100644
index 000000000..803974c73
--- /dev/null
+++ b/vendors/simpletest/test/collector_test.php
@@ -0,0 +1,51 @@
+<?php
+// $Id: collector_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../collector.php');
+SimpleTest::ignore('MockTestSuite');
+Mock::generate('TestSuite');
+
+class PathEqualExpectation extends EqualExpectation {
+ function PathEqualExpectation($value, $message = '%s') {
+ $this->EqualExpectation(str_replace("\\", '/', $value), $message);
+ }
+
+ function test($compare) {
+ return parent::test(str_replace("\\", '/', $compare));
+ }
+}
+
+class TestOfCollector extends UnitTestCase {
+
+ function testCollectionIsAddedToGroup() {
+ $suite = &new MockTestSuite();
+ $suite->expectMinimumCallCount('addTestFile', 2);
+ $suite->expectArguments(
+ 'addTestFile',
+ array(new PatternExpectation('/collectable\\.(1|2)$/')));
+ $collector = &new SimpleCollector();
+ $collector->collect($suite, dirname(__FILE__) . '/support/collector/');
+ }
+}
+
+class TestOfPatternCollector extends UnitTestCase {
+
+ function testAddingEverythingToGroup() {
+ $suite = &new MockTestSuite();
+ $suite->expectCallCount('addTestFile', 2);
+ $suite->expectArguments(
+ 'addTestFile',
+ array(new PatternExpectation('/collectable\\.(1|2)$/')));
+ $collector = &new SimplePatternCollector('/.*/');
+ $collector->collect($suite, dirname(__FILE__) . '/support/collector/');
+ }
+
+ function testOnlyMatchedFilesAreAddedToGroup() {
+ $suite = &new MockTestSuite();
+ $suite->expectOnce('addTestFile', array(new PathEqualExpectation(
+ dirname(__FILE__) . '/support/collector/collectable.1')));
+ $collector = &new SimplePatternCollector('/1$/');
+ $collector->collect($suite, dirname(__FILE__) . '/support/collector/');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/command_line_test.php b/vendors/simpletest/test/command_line_test.php
new file mode 100644
index 000000000..5baabff33
--- /dev/null
+++ b/vendors/simpletest/test/command_line_test.php
@@ -0,0 +1,40 @@
+<?php
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../default_reporter.php');
+
+class TestOfCommandLineParsing extends UnitTestCase {
+
+ function testDefaultsToEmptyStringToMeanNullToTheSelectiveReporter() {
+ $parser = new SimpleCommandLineParser(array());
+ $this->assertIdentical($parser->getTest(), '');
+ $this->assertIdentical($parser->getTestCase(), '');
+ }
+
+ function testNotXmlByDefault() {
+ $parser = new SimpleCommandLineParser(array());
+ $this->assertFalse($parser->isXml());
+ }
+
+ function testCanDetectRequestForXml() {
+ $parser = new SimpleCommandLineParser(array('--xml'));
+ $this->assertTrue($parser->isXml());
+ }
+
+ function testCanReadAssignmentSyntax() {
+ $parser = new SimpleCommandLineParser(array('--test=myTest'));
+ $this->assertEqual($parser->getTest(), 'myTest');
+ }
+
+ function testCanReadFollowOnSyntax() {
+ $parser = new SimpleCommandLineParser(array('--test', 'myTest'));
+ $this->assertEqual($parser->getTest(), 'myTest');
+ }
+
+ function testCanReadShortForms() {
+ $parser = new SimpleCommandLineParser(array('-t', 'myTest', '-c', 'MyClass', '-x'));
+ $this->assertEqual($parser->getTest(), 'myTest');
+ $this->assertEqual($parser->getTestCase(), 'MyClass');
+ $this->assertTrue($parser->isXml());
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/compatibility_test.php b/vendors/simpletest/test/compatibility_test.php
new file mode 100644
index 000000000..ea48f8396
--- /dev/null
+++ b/vendors/simpletest/test/compatibility_test.php
@@ -0,0 +1,97 @@
+<?php
+// $Id: compatibility_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../compatibility.php');
+
+class ComparisonClass {
+}
+
+class ComparisonSubclass extends ComparisonClass {
+}
+
+if (version_compare(phpversion(), '5') >= 0) {
+ eval('interface ComparisonInterface { }');
+ eval('class ComparisonClassWithInterface implements ComparisonInterface { }');
+}
+
+class TestOfCompatibility extends UnitTestCase {
+
+ function testIsA() {
+ $this->assertTrue(SimpleTestCompatibility::isA(
+ new ComparisonClass(),
+ 'ComparisonClass'));
+ $this->assertFalse(SimpleTestCompatibility::isA(
+ new ComparisonClass(),
+ 'ComparisonSubclass'));
+ $this->assertTrue(SimpleTestCompatibility::isA(
+ new ComparisonSubclass(),
+ 'ComparisonClass'));
+ }
+
+ function testIdentityOfNumericStrings() {
+ $numericString1 = "123";
+ $numericString2 = "00123";
+ $this->assertNotIdentical($numericString1, $numericString2);
+ }
+
+ function testIdentityOfObjects() {
+ $object1 = new ComparisonClass();
+ $object2 = new ComparisonClass();
+ $this->assertIdentical($object1, $object2);
+ }
+
+ function testReferences () {
+ $thing = "Hello";
+ $thing_reference = &$thing;
+ $thing_copy = $thing;
+ $this->assertTrue(SimpleTestCompatibility::isReference(
+ $thing,
+ $thing));
+ $this->assertTrue(SimpleTestCompatibility::isReference(
+ $thing,
+ $thing_reference));
+ $this->assertFalse(SimpleTestCompatibility::isReference(
+ $thing,
+ $thing_copy));
+ }
+
+ function testObjectReferences () {
+ $object = &new ComparisonClass();
+ $object_reference = &$object;
+ $object_copy = new ComparisonClass();
+ $object_assignment = $object;
+ $this->assertTrue(SimpleTestCompatibility::isReference(
+ $object,
+ $object));
+ $this->assertTrue(SimpleTestCompatibility::isReference(
+ $object,
+ $object_reference));
+ $this->assertFalse(SimpleTestCompatibility::isReference(
+ $object,
+ $object_copy));
+ if (version_compare(phpversion(), '5', '>=')) {
+ $this->assertTrue(SimpleTestCompatibility::isReference(
+ $object,
+ $object_assignment));
+ } else {
+ $this->assertFalse(SimpleTestCompatibility::isReference(
+ $object,
+ $object_assignment));
+ }
+ }
+
+ function testInteraceComparison() {
+ if (version_compare(phpversion(), '5', '<')) {
+ return;
+ }
+
+ $object = new ComparisonClassWithInterface();
+ $this->assertFalse(SimpleTestCompatibility::isA(
+ new ComparisonClass(),
+ 'ComparisonInterface'));
+ $this->assertTrue(SimpleTestCompatibility::isA(
+ new ComparisonClassWithInterface(),
+ 'ComparisonInterface'));
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/cookies_test.php b/vendors/simpletest/test/cookies_test.php
new file mode 100644
index 000000000..0b49e43bf
--- /dev/null
+++ b/vendors/simpletest/test/cookies_test.php
@@ -0,0 +1,227 @@
+<?php
+// $Id: cookies_test.php 1506 2007-05-07 00:58:03Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../cookies.php');
+
+class TestOfCookie extends UnitTestCase {
+
+ function testCookieDefaults() {
+ $cookie = new SimpleCookie("name");
+ $this->assertFalse($cookie->getValue());
+ $this->assertEqual($cookie->getPath(), "/");
+ $this->assertIdentical($cookie->getHost(), false);
+ $this->assertFalse($cookie->getExpiry());
+ $this->assertFalse($cookie->isSecure());
+ }
+
+ function testCookieAccessors() {
+ $cookie = new SimpleCookie(
+ "name",
+ "value",
+ "/path",
+ "Mon, 18 Nov 2002 15:50:29 GMT",
+ true);
+ $this->assertEqual($cookie->getName(), "name");
+ $this->assertEqual($cookie->getValue(), "value");
+ $this->assertEqual($cookie->getPath(), "/path/");
+ $this->assertEqual($cookie->getExpiry(), "Mon, 18 Nov 2002 15:50:29 GMT");
+ $this->assertTrue($cookie->isSecure());
+ }
+
+ function testFullHostname() {
+ $cookie = new SimpleCookie("name");
+ $this->assertTrue($cookie->setHost("host.name.here"));
+ $this->assertEqual($cookie->getHost(), "host.name.here");
+ $this->assertTrue($cookie->setHost("host.com"));
+ $this->assertEqual($cookie->getHost(), "host.com");
+ }
+
+ function testHostTruncation() {
+ $cookie = new SimpleCookie("name");
+ $cookie->setHost("this.host.name.here");
+ $this->assertEqual($cookie->getHost(), "host.name.here");
+ $cookie->setHost("this.host.com");
+ $this->assertEqual($cookie->getHost(), "host.com");
+ $this->assertTrue($cookie->setHost("dashes.in-host.com"));
+ $this->assertEqual($cookie->getHost(), "in-host.com");
+ }
+
+ function testBadHosts() {
+ $cookie = new SimpleCookie("name");
+ $this->assertFalse($cookie->setHost("gibberish"));
+ $this->assertFalse($cookie->setHost("host.here"));
+ $this->assertFalse($cookie->setHost("host..com"));
+ $this->assertFalse($cookie->setHost("..."));
+ $this->assertFalse($cookie->setHost("host.com."));
+ }
+
+ function testHostValidity() {
+ $cookie = new SimpleCookie("name");
+ $cookie->setHost("this.host.name.here");
+ $this->assertTrue($cookie->isValidHost("host.name.here"));
+ $this->assertTrue($cookie->isValidHost("that.host.name.here"));
+ $this->assertFalse($cookie->isValidHost("bad.host"));
+ $this->assertFalse($cookie->isValidHost("nearly.name.here"));
+ }
+
+ function testPathValidity() {
+ $cookie = new SimpleCookie("name", "value", "/path");
+ $this->assertFalse($cookie->isValidPath("/"));
+ $this->assertTrue($cookie->isValidPath("/path/"));
+ $this->assertTrue($cookie->isValidPath("/path/more"));
+ }
+
+ function testSessionExpiring() {
+ $cookie = new SimpleCookie("name", "value", "/path");
+ $this->assertTrue($cookie->isExpired(0));
+ }
+
+ function testTimestampExpiry() {
+ $cookie = new SimpleCookie("name", "value", "/path", 456);
+ $this->assertFalse($cookie->isExpired(0));
+ $this->assertTrue($cookie->isExpired(457));
+ $this->assertFalse($cookie->isExpired(455));
+ }
+
+ function testDateExpiry() {
+ $cookie = new SimpleCookie(
+ "name",
+ "value",
+ "/path",
+ "Mon, 18 Nov 2002 15:50:29 GMT");
+ $this->assertTrue($cookie->isExpired("Mon, 18 Nov 2002 15:50:30 GMT"));
+ $this->assertFalse($cookie->isExpired("Mon, 18 Nov 2002 15:50:28 GMT"));
+ }
+
+ function testAging() {
+ $cookie = new SimpleCookie("name", "value", "/path", 200);
+ $cookie->agePrematurely(199);
+ $this->assertFalse($cookie->isExpired(0));
+ $cookie->agePrematurely(2);
+ $this->assertTrue($cookie->isExpired(0));
+ }
+}
+
+class TestOfCookieJar extends UnitTestCase {
+
+ function testAddCookie() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie("a", "A");
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/')), array('a=A'));
+ }
+
+ function testHostFilter() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'A', 'my-host.com');
+ $jar->setCookie('b', 'B', 'another-host.com');
+ $jar->setCookie('c', 'C');
+ $this->assertEqual(
+ $jar->selectAsPairs(new SimpleUrl('my-host.com')),
+ array('a=A', 'c=C'));
+ $this->assertEqual(
+ $jar->selectAsPairs(new SimpleUrl('another-host.com')),
+ array('b=B', 'c=C'));
+ $this->assertEqual(
+ $jar->selectAsPairs(new SimpleUrl('www.another-host.com')),
+ array('b=B', 'c=C'));
+ $this->assertEqual(
+ $jar->selectAsPairs(new SimpleUrl('new-host.org')),
+ array('c=C'));
+ $this->assertEqual(
+ $jar->selectAsPairs(new SimpleUrl('/')),
+ array('a=A', 'b=B', 'c=C'));
+ }
+
+ function testPathFilter() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'A', false, '/path/');
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/')), array());
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/elsewhere')), array());
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/path/')), array('a=A'));
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/path')), array('a=A'));
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/pa')), array());
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/path/here')), array('a=A'));
+ }
+
+ function testPathFilterDeeply() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'A', false, '/path/more_path/');
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/path/')), array());
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/path')), array());
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/pa')), array());
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/path/more_path/')), array('a=A'));
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/path/more_path/and_more')), array('a=A'));
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/path/not_here/')), array());
+ }
+
+ function testMultipleCookieWithDifferentPathsButSameName() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'abc', false, '/');
+ $jar->setCookie('a', '123', false, '/path/here/');
+ $this->assertEqual(
+ $jar->selectAsPairs(new SimpleUrl('/')),
+ array('a=abc'));
+ $this->assertEqual(
+ $jar->selectAsPairs(new SimpleUrl('my-host.com/')),
+ array('a=abc'));
+ $this->assertEqual(
+ $jar->selectAsPairs(new SimpleUrl('my-host.com/path/')),
+ array('a=abc'));
+ $this->assertEqual(
+ $jar->selectAsPairs(new SimpleUrl('my-host.com/path/here')),
+ array('a=abc', 'a=123'));
+ $this->assertEqual(
+ $jar->selectAsPairs(new SimpleUrl('my-host.com/path/here/there')),
+ array('a=abc', 'a=123'));
+ }
+
+ function testOverwrite() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'abc', false, '/');
+ $jar->setCookie('a', 'cde', false, '/');
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/')), array('a=cde'));
+ }
+
+ function testClearSessionCookies() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'A', false, '/');
+ $jar->restartSession();
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/')), array());
+ }
+
+ function testExpiryFilterByDate() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'A', false, '/', 'Wed, 25-Dec-02 04:24:20 GMT');
+ $jar->restartSession("Wed, 25-Dec-02 04:24:19 GMT");
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/')), array('a=A'));
+ $jar->restartSession("Wed, 25-Dec-02 04:24:21 GMT");
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/')), array());
+ }
+
+ function testExpiryFilterByAgeing() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'A', false, '/', 'Wed, 25-Dec-02 04:24:20 GMT');
+ $jar->restartSession("Wed, 25-Dec-02 04:24:19 GMT");
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/')), array('a=A'));
+ $jar->agePrematurely(2);
+ $jar->restartSession("Wed, 25-Dec-02 04:24:19 GMT");
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/')), array());
+ }
+
+ function testCookieClearing() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'abc', false, '/');
+ $jar->setCookie('a', '', false, '/');
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/')), array('a='));
+ }
+
+ function testCookieClearByLoweringDate() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'abc', false, '/', 'Wed, 25-Dec-02 04:24:21 GMT');
+ $jar->setCookie('a', 'def', false, '/', 'Wed, 25-Dec-02 04:24:19 GMT');
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/')), array('a=def'));
+ $jar->restartSession('Wed, 25-Dec-02 04:24:20 GMT');
+ $this->assertEqual($jar->selectAsPairs(new SimpleUrl('/')), array());
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/detached_test.php b/vendors/simpletest/test/detached_test.php
new file mode 100644
index 000000000..06db8280b
--- /dev/null
+++ b/vendors/simpletest/test/detached_test.php
@@ -0,0 +1,15 @@
+<?php
+// $Id: detached_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once('../detached.php');
+require_once('../reporter.php');
+
+// The following URL will depend on your own installation.
+$command = 'php ' . dirname(__FILE__) . '/visual_test.php xml';
+
+$test = &new TestSuite('Remote tests');
+$test->addTestCase(new DetachedTestCase($command));
+if (SimpleReporter::inCli()) {
+ exit ($test->run(new TextReporter()) ? 0 : 1);
+}
+$test->run(new HtmlReporter());
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/dumper_test.php b/vendors/simpletest/test/dumper_test.php
new file mode 100644
index 000000000..789047de9
--- /dev/null
+++ b/vendors/simpletest/test/dumper_test.php
@@ -0,0 +1,88 @@
+<?php
+// $Id: dumper_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+
+class DumperDummy {
+}
+
+class TestOfTextFormatting extends UnitTestCase {
+
+ function testClipping() {
+ $dumper = new SimpleDumper();
+ $this->assertEqual(
+ $dumper->clipString("Hello", 6),
+ "Hello",
+ "Hello, 6->%s");
+ $this->assertEqual(
+ $dumper->clipString("Hello", 5),
+ "Hello",
+ "Hello, 5->%s");
+ $this->assertEqual(
+ $dumper->clipString("Hello world", 3),
+ "Hel...",
+ "Hello world, 3->%s");
+ $this->assertEqual(
+ $dumper->clipString("Hello world", 6, 3),
+ "Hello ...",
+ "Hello world, 6, 3->%s");
+ $this->assertEqual(
+ $dumper->clipString("Hello world", 3, 6),
+ "...o w...",
+ "Hello world, 3, 6->%s");
+ $this->assertEqual(
+ $dumper->clipString("Hello world", 4, 11),
+ "...orld",
+ "Hello world, 4, 11->%s");
+ $this->assertEqual(
+ $dumper->clipString("Hello world", 4, 12),
+ "...orld",
+ "Hello world, 4, 12->%s");
+ }
+
+ function testDescribeNull() {
+ $dumper = new SimpleDumper();
+ $this->assertPattern('/null/i', $dumper->describeValue(null));
+ }
+
+ function testDescribeBoolean() {
+ $dumper = new SimpleDumper();
+ $this->assertPattern('/boolean/i', $dumper->describeValue(true));
+ $this->assertPattern('/true/i', $dumper->describeValue(true));
+ $this->assertPattern('/false/i', $dumper->describeValue(false));
+ }
+
+ function testDescribeString() {
+ $dumper = new SimpleDumper();
+ $this->assertPattern('/string/i', $dumper->describeValue('Hello'));
+ $this->assertPattern('/Hello/', $dumper->describeValue('Hello'));
+ }
+
+ function testDescribeInteger() {
+ $dumper = new SimpleDumper();
+ $this->assertPattern('/integer/i', $dumper->describeValue(35));
+ $this->assertPattern('/35/', $dumper->describeValue(35));
+ }
+
+ function testDescribeFloat() {
+ $dumper = new SimpleDumper();
+ $this->assertPattern('/float/i', $dumper->describeValue(0.99));
+ $this->assertPattern('/0\.99/', $dumper->describeValue(0.99));
+ }
+
+ function testDescribeArray() {
+ $dumper = new SimpleDumper();
+ $this->assertPattern('/array/i', $dumper->describeValue(array(1, 4)));
+ $this->assertPattern('/2/i', $dumper->describeValue(array(1, 4)));
+ }
+
+ function testDescribeObject() {
+ $dumper = new SimpleDumper();
+ $this->assertPattern(
+ '/object/i',
+ $dumper->describeValue(new DumperDummy()));
+ $this->assertPattern(
+ '/DumperDummy/i',
+ $dumper->describeValue(new DumperDummy()));
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/eclipse_test.php b/vendors/simpletest/test/eclipse_test.php
new file mode 100644
index 000000000..0f1bf4bd4
--- /dev/null
+++ b/vendors/simpletest/test/eclipse_test.php
@@ -0,0 +1,32 @@
+<?php
+// $Id: eclipse_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+
+//To run this from the eclipse plugin...you need to make sure that the
+//SimpleTest path in the preferences is the same as the location of the
+//eclipse.php file below otherwise you end up with two "different" eclipse.php
+//files included and that does not work...
+
+include_once(dirname(__FILE__) . '/../eclipse.php');
+Mock::generate('SimpleSocket');
+
+class TestOfEclipse extends UnitTestCase {
+
+ function testPass() {
+ $listener = &new MockSimpleSocket();
+
+ $fullpath = realpath(dirname(__FILE__).'/support/test1.php');
+ $testpath = EclipseReporter::escapeVal($fullpath);
+ $expected = "{status:\"pass\",message:\"pass1 at [$testpath line 4]\",group:\"$testpath\",case:\"test1\",method:\"test_pass\"}";
+ //this should work...but it doesn't so the next line and the last line are the hacks
+ //$listener->expectOnce('write',array($expected));
+ $listener->setReturnValue('write',-1);
+
+ $pathparts = pathinfo($fullpath);
+ $filename = $pathparts['basename'];
+ $test= &new TestSuite($filename);
+ $test->addTestFile($fullpath);
+ $test->run(new EclipseReporter(&$listener));
+ $this->assertEqual($expected,$listener->output);
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/encoding_test.php b/vendors/simpletest/test/encoding_test.php
new file mode 100644
index 000000000..95031fb0f
--- /dev/null
+++ b/vendors/simpletest/test/encoding_test.php
@@ -0,0 +1,213 @@
+<?php
+// $Id: encoding_test.php 1571 2007-09-07 17:14:32Z pp11 $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../url.php');
+require_once(dirname(__FILE__) . '/../socket.php');
+
+Mock::generate('SimpleSocket');
+
+class TestOfEncodedParts extends UnitTestCase {
+
+ function testFormEncodedAsKeyEqualsValue() {
+ $pair = new SimpleEncodedPair('a', 'A');
+ $this->assertEqual($pair->asRequest(), 'a=A');
+ }
+
+ function testMimeEncodedAsHeadersAndContent() {
+ $pair = new SimpleEncodedPair('a', 'A');
+ $this->assertEqual(
+ $pair->asMime(),
+ "Content-Disposition: form-data; name=\"a\"\r\n\r\nA");
+ }
+
+ function testAttachmentEncodedAsHeadersWithDispositionAndContent() {
+ $part = new SimpleAttachment('a', 'A', 'aaa.txt');
+ $this->assertEqual(
+ $part->asMime(),
+ "Content-Disposition: form-data; name=\"a\"; filename=\"aaa.txt\"\r\n" .
+ "Content-Type: text/plain\r\n\r\nA");
+ }
+}
+
+class TestOfEncoding extends UnitTestCase {
+ var $_content_so_far;
+
+ function write($content) {
+ $this->_content_so_far .= $content;
+ }
+
+ function clear() {
+ $this->_content_so_far = '';
+ }
+
+ function assertWritten($encoding, $content, $message = '%s') {
+ $this->clear();
+ $encoding->writeTo($this);
+ $this->assertIdentical($this->_content_so_far, $content, $message);
+ }
+
+ function testGetEmpty() {
+ $encoding = &new SimpleGetEncoding();
+ $this->assertIdentical($encoding->getValue('a'), false);
+ $this->assertIdentical($encoding->asUrlRequest(), '');
+ }
+
+ function testPostEmpty() {
+ $encoding = &new SimplePostEncoding();
+ $this->assertIdentical($encoding->getValue('a'), false);
+ $this->assertWritten($encoding, '');
+ }
+
+ function testPrefilled() {
+ $encoding = &new SimplePostEncoding(array('a' => 'aaa'));
+ $this->assertIdentical($encoding->getValue('a'), 'aaa');
+ $this->assertWritten($encoding, 'a=aaa');
+ }
+
+ function testPrefilledWithTwoLevels() {
+ $query = array('a' => array('aa' => 'aaa'));
+ $encoding = &new SimplePostEncoding($query);
+ $this->assertTrue($encoding->hasMoreThanOneLevel($query));
+ $this->assertEqual($encoding->rewriteArrayWithMultipleLevels($query), array('a[aa]' => 'aaa'));
+ $this->assertIdentical($encoding->getValue('a[aa]'), 'aaa');
+ $this->assertWritten($encoding, 'a%5Baa%5D=aaa');
+ }
+
+ function testPrefilledWithThreeLevels() {
+ $query = array('a' => array('aa' => array('aaa' => 'aaaa')));
+ $encoding = &new SimplePostEncoding($query);
+ $this->assertTrue($encoding->hasMoreThanOneLevel($query));
+ $this->assertEqual($encoding->rewriteArrayWithMultipleLevels($query), array('a[aa][aaa]' => 'aaaa'));
+ $this->assertIdentical($encoding->getValue('a[aa][aaa]'), 'aaaa');
+ $this->assertWritten($encoding, 'a%5Baa%5D%5Baaa%5D=aaaa');
+ }
+
+ function testPrefilledWithObject() {
+ $encoding = &new SimplePostEncoding(new SimpleEncoding(array('a' => 'aaa')));
+ $this->assertIdentical($encoding->getValue('a'), 'aaa');
+ $this->assertWritten($encoding, 'a=aaa');
+ }
+
+ function testMultiplePrefilled() {
+ $query = array('a' => array('a1', 'a2'));
+ $encoding = &new SimplePostEncoding($query);
+ $this->assertTrue($encoding->hasMoreThanOneLevel($query));
+ $this->assertEqual($encoding->rewriteArrayWithMultipleLevels($query), array('a[0]' => 'a1', 'a[1]' => 'a2'));
+ $this->assertIdentical($encoding->getValue('a[0]'), 'a1');
+ $this->assertIdentical($encoding->getValue('a[1]'), 'a2');
+ $this->assertWritten($encoding, 'a%5B0%5D=a1&a%5B1%5D=a2');
+ }
+
+ function testSingleParameter() {
+ $encoding = &new SimplePostEncoding();
+ $encoding->add('a', 'Hello');
+ $this->assertEqual($encoding->getValue('a'), 'Hello');
+ $this->assertWritten($encoding, 'a=Hello');
+ }
+
+ function testFalseParameter() {
+ $encoding = &new SimplePostEncoding();
+ $encoding->add('a', false);
+ $this->assertEqual($encoding->getValue('a'), false);
+ $this->assertWritten($encoding, '');
+ }
+
+ function testUrlEncoding() {
+ $encoding = &new SimplePostEncoding();
+ $encoding->add('a', 'Hello there!');
+ $this->assertWritten($encoding, 'a=Hello+there%21');
+ }
+
+ function testUrlEncodingOfKey() {
+ $encoding = &new SimplePostEncoding();
+ $encoding->add('a!', 'Hello');
+ $this->assertWritten($encoding, 'a%21=Hello');
+ }
+
+ function testMultipleParameter() {
+ $encoding = &new SimplePostEncoding();
+ $encoding->add('a', 'Hello');
+ $encoding->add('b', 'Goodbye');
+ $this->assertWritten($encoding, 'a=Hello&b=Goodbye');
+ }
+
+ function testEmptyParameters() {
+ $encoding = &new SimplePostEncoding();
+ $encoding->add('a', '');
+ $encoding->add('b', '');
+ $this->assertWritten($encoding, 'a=&b=');
+ }
+
+ function testRepeatedParameter() {
+ $encoding = &new SimplePostEncoding();
+ $encoding->add('a', 'Hello');
+ $encoding->add('a', 'Goodbye');
+ $this->assertIdentical($encoding->getValue('a'), array('Hello', 'Goodbye'));
+ $this->assertWritten($encoding, 'a=Hello&a=Goodbye');
+ }
+
+ function testAddingLists() {
+ $encoding = &new SimplePostEncoding();
+ $encoding->add('a', array('Hello', 'Goodbye'));
+ $this->assertIdentical($encoding->getValue('a'), array('Hello', 'Goodbye'));
+ $this->assertWritten($encoding, 'a=Hello&a=Goodbye');
+ }
+
+ function testMergeInHash() {
+ $encoding = &new SimpleGetEncoding(array('a' => 'A1', 'b' => 'B'));
+ $encoding->merge(array('a' => 'A2'));
+ $this->assertIdentical($encoding->getValue('a'), array('A1', 'A2'));
+ $this->assertIdentical($encoding->getValue('b'), 'B');
+ }
+
+ function testMergeInObject() {
+ $encoding = &new SimpleGetEncoding(array('a' => 'A1', 'b' => 'B'));
+ $encoding->merge(new SimpleEncoding(array('a' => 'A2')));
+ $this->assertIdentical($encoding->getValue('a'), array('A1', 'A2'));
+ $this->assertIdentical($encoding->getValue('b'), 'B');
+ }
+
+ function testPrefilledMultipart() {
+ $encoding = &new SimpleMultipartEncoding(array('a' => 'aaa'), 'boundary');
+ $this->assertIdentical($encoding->getValue('a'), 'aaa');
+ $this->assertwritten($encoding,
+ "--boundary\r\n" .
+ "Content-Disposition: form-data; name=\"a\"\r\n" .
+ "\r\n" .
+ "aaa\r\n" .
+ "--boundary--\r\n");
+ }
+
+ function testAttachment() {
+ $encoding = &new SimpleMultipartEncoding(array(), 'boundary');
+ $encoding->attach('a', 'aaa', 'aaa.txt');
+ $this->assertIdentical($encoding->getValue('a'), 'aaa.txt');
+ $this->assertwritten($encoding,
+ "--boundary\r\n" .
+ "Content-Disposition: form-data; name=\"a\"; filename=\"aaa.txt\"\r\n" .
+ "Content-Type: text/plain\r\n" .
+ "\r\n" .
+ "aaa\r\n" .
+ "--boundary--\r\n");
+ }
+}
+
+class TestOfFormHeaders extends UnitTestCase {
+
+ function testEmptyEncodingWritesZeroContentLength() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("Content-Length: 0\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Content-Type: application/x-www-form-urlencoded\r\n"));
+ $encoding = &new SimplePostEncoding();
+ $encoding->writeHeadersTo($socket);
+ }
+
+ function testEmptyMultipartEncodingWritesEndBoundaryContentLength() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("Content-Length: 14\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Content-Type: multipart/form-data, boundary=boundary\r\n"));
+ $encoding = &new SimpleMultipartEncoding(array(), 'boundary');
+ $encoding->writeHeadersTo($socket);
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/errors_test.php b/vendors/simpletest/test/errors_test.php
new file mode 100644
index 000000000..7db8769a2
--- /dev/null
+++ b/vendors/simpletest/test/errors_test.php
@@ -0,0 +1,300 @@
+<?php
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../errors.php');
+require_once(dirname(__FILE__) . '/../expectation.php');
+require_once(dirname(__FILE__) . '/../test_case.php');
+Mock::generate('SimpleTestCase');
+Mock::generate('SimpleExpectation');
+SimpleTest::ignore('MockSimpleTestCase');
+
+class TestOfErrorQueue extends UnitTestCase {
+
+ function setUp() {
+ $context = &SimpleTest::getContext();
+ $queue = &$context->get('SimpleErrorQueue');
+ $queue->clear();
+ }
+
+ function tearDown() {
+ $context = &SimpleTest::getContext();
+ $queue = &$context->get('SimpleErrorQueue');
+ $queue->clear();
+ }
+
+ function testOrder() {
+ $context = &SimpleTest::getContext();
+ $queue = &$context->get('SimpleErrorQueue');
+ $queue->add(1024, 'Ouch', 'here.php', 100);
+ $queue->add(512, 'Yuk', 'there.php', 101);
+ $this->assertEqual(
+ $queue->extract(),
+ array(1024, 'Ouch', 'here.php', 100));
+ $this->assertEqual(
+ $queue->extract(),
+ array(512, 'Yuk', 'there.php', 101));
+ $this->assertFalse($queue->extract());
+ }
+
+ function testAssertNoErrorsGivesTrueWhenNoErrors() {
+ $test = &new MockSimpleTestCase();
+ $test->expectOnce('assert', array(
+ new IdenticalExpectation(new TrueExpectation()),
+ true,
+ 'Should be no errors'));
+ $test->setReturnValue('assert', true);
+ $queue = &new SimpleErrorQueue();
+ $queue->setTestCase($test);
+ $this->assertTrue($queue->assertNoErrors('%s'));
+ }
+
+ function testAssertNoErrorsIssuesFailWhenErrors() {
+ $test = &new MockSimpleTestCase();
+ $test->expectOnce('assert', array(
+ new IdenticalExpectation(new TrueExpectation()),
+ false,
+ 'Should be no errors'));
+ $test->setReturnValue('assert', false);
+ $queue = &new SimpleErrorQueue();
+ $queue->setTestCase($test);
+ $queue->add(1024, 'Ouch', 'here.php', 100);
+ $this->assertFalse($queue->assertNoErrors('%s'));
+ }
+
+ function testAssertErrorFailsWhenNoError() {
+ $test = &new MockSimpleTestCase();
+ $test->expectOnce('fail', array('Expected error not found'));
+ $test->setReturnValue('assert', false);
+ $queue = &new SimpleErrorQueue();
+ $queue->setTestCase($test);
+ $this->assertFalse($queue->assertError(false, '%s'));
+ }
+
+ function testAssertErrorFailsWhenErrorDoesntMatchTheExpectation() {
+ $test = &new MockSimpleTestCase();
+ $test->expectOnce('assert', array(
+ new IdenticalExpectation(new FailedExpectation()),
+ 'B',
+ 'Expected PHP error [B] severity [E_USER_NOTICE] in [b.php] line [100]'));
+ $test->setReturnValue('assert', false);
+ $queue = &new SimpleErrorQueue();
+ $queue->setTestCase($test);
+ $queue->add(1024, 'B', 'b.php', 100);
+ $this->assertFalse($queue->assertError(new FailedExpectation(), '%s'));
+ }
+
+ function testExpectationMatchCancelsIncomingError() {
+ $test = &new MockSimpleTestCase();
+ $test->expectOnce('assert', array(
+ new IdenticalExpectation(new AnythingExpectation()),
+ 'B',
+ 'a message'));
+ $test->setReturnValue('assert', true);
+ $test->expectNever('error');
+ $queue = &new SimpleErrorQueue();
+ $queue->setTestCase($test);
+ $queue->expectError(new AnythingExpectation(), 'a message');
+ $queue->add(1024, 'B', 'b.php', 100);
+ }
+}
+
+class TestOfErrorTrap extends UnitTestCase {
+ var $_old;
+
+ function setUp() {
+ $this->_old = error_reporting(E_ALL);
+ set_error_handler('SimpleTestErrorHandler');
+ }
+
+ function tearDown() {
+ restore_error_handler();
+ error_reporting($this->_old);
+ }
+
+ function testQueueStartsEmpty() {
+ $context = &SimpleTest::getContext();
+ $queue = &$context->get('SimpleErrorQueue');
+ $this->assertFalse($queue->extract());
+ }
+
+ function testTrappedErrorPlacedInQueue() {
+ trigger_error('Ouch!');
+ $context = &SimpleTest::getContext();
+ $queue = &$context->get('SimpleErrorQueue');
+ list($severity, $message, $file, $line) = $queue->extract();
+ $this->assertEqual($message, 'Ouch!');
+ $this->assertEqual($file, __FILE__);
+ $this->assertFalse($queue->extract());
+ }
+
+ function testErrorsAreSwallowedByMatchingExpectation() {
+ $this->expectError('Ouch!');
+ trigger_error('Ouch!');
+ }
+
+ function testErrorsAreSwallowedInOrder() {
+ $this->expectError('a');
+ $this->expectError('b');
+ trigger_error('a');
+ trigger_error('b');
+ }
+
+ function testAnyErrorCanBeSwallowed() {
+ $this->expectError();
+ trigger_error('Ouch!');
+ }
+
+ function testErrorCanBeSwallowedByPatternMatching() {
+ $this->expectError(new PatternExpectation('/ouch/i'));
+ trigger_error('Ouch!');
+ }
+
+ function testErrorWithPercentsPassesWithNoSprintfError() {
+ $this->expectError("%");
+ trigger_error('%');
+ }
+}
+
+class TestOfErrors extends UnitTestCase {
+ var $_old;
+
+ function setUp() {
+ $this->_old = error_reporting(E_ALL);
+ }
+
+ function tearDown() {
+ error_reporting($this->_old);
+ }
+
+ function testDefaultWhenAllReported() {
+ error_reporting(E_ALL);
+ trigger_error('Ouch!');
+ $this->assertError('Ouch!');
+ }
+
+ function testNoticeWhenReported() {
+ error_reporting(E_ALL);
+ trigger_error('Ouch!', E_USER_NOTICE);
+ $this->assertError('Ouch!');
+ }
+
+ function testWarningWhenReported() {
+ error_reporting(E_ALL);
+ trigger_error('Ouch!', E_USER_WARNING);
+ $this->assertError('Ouch!');
+ }
+
+ function testErrorWhenReported() {
+ error_reporting(E_ALL);
+ trigger_error('Ouch!', E_USER_ERROR);
+ $this->assertError('Ouch!');
+ }
+
+ function testNoNoticeWhenNotReported() {
+ error_reporting(0);
+ trigger_error('Ouch!', E_USER_NOTICE);
+ }
+
+ function testNoWarningWhenNotReported() {
+ error_reporting(0);
+ trigger_error('Ouch!', E_USER_WARNING);
+ }
+
+ function testNoticeSuppressedWhenReported() {
+ error_reporting(E_ALL);
+ @trigger_error('Ouch!', E_USER_NOTICE);
+ }
+
+ function testWarningSuppressedWhenReported() {
+ error_reporting(E_ALL);
+ @trigger_error('Ouch!', E_USER_WARNING);
+ }
+
+ function testErrorWithPercentsReportedWithNoSprintfError() {
+ trigger_error('%');
+ $this->assertError('%');
+ }
+}
+
+class TestOfPHP52RecoverableErrors extends UnitTestCase {
+ function skip() {
+ $this->skipIf(
+ version_compare(phpversion(), '5.2', '<'),
+ 'E_RECOVERABLE_ERROR not tested for PHP below 5.2');
+ }
+
+ function testError() {
+ eval('
+ class RecoverableErrorTestingStub {
+ function ouch(RecoverableErrorTestingStub $obj) {
+ }
+ }
+ ');
+
+ $stub = new RecoverableErrorTestingStub();
+ $this->expectError(new PatternExpectation('/must be an instance of RecoverableErrorTestingStub/i'));
+ $stub->ouch(new stdClass());
+ }
+}
+
+class TestOfErrorsExcludingPHP52AndAbove extends UnitTestCase {
+ function skip() {
+ $this->skipIf(
+ version_compare(phpversion(), '5.2', '>='),
+ 'E_USER_ERROR not tested for PHP 5.2 and above');
+ }
+
+ function testNoErrorWhenNotReported() {
+ error_reporting(0);
+ trigger_error('Ouch!', E_USER_ERROR);
+ }
+
+ function testErrorSuppressedWhenReported() {
+ error_reporting(E_ALL);
+ @trigger_error('Ouch!', E_USER_ERROR);
+ }
+}
+
+SimpleTest::ignore('TestOfNotEnoughErrors');
+/**
+ * This test is ignored as it is used by {@link TestRunnerForLeftOverAndNotEnoughErrors}
+ * to verify that it fails as expected.
+ *
+ * @ignore
+ */
+class TestOfNotEnoughErrors extends UnitTestCase {
+ function testExpectTwoErrorsThrowOne() {
+ $this->expectError('Error 1');
+ trigger_error('Error 1');
+ $this->expectError('Error 2');
+ }
+}
+
+SimpleTest::ignore('TestOfLeftOverErrors');
+/**
+ * This test is ignored as it is used by {@link TestRunnerForLeftOverAndNotEnoughErrors}
+ * to verify that it fails as expected.
+ *
+ * @ignore
+ */
+class TestOfLeftOverErrors extends UnitTestCase {
+ function testExpectOneErrorGetTwo() {
+ $this->expectError('Error 1');
+ trigger_error('Error 1');
+ trigger_error('Error 2');
+ }
+}
+
+class TestRunnerForLeftOverAndNotEnoughErrors extends UnitTestCase {
+ function testRunLeftOverErrorsTestCase() {
+ $test = new TestOfLeftOverErrors();
+ $this->assertFalse($test->run(new SimpleReporter()));
+ }
+
+ function testRunNotEnoughErrors() {
+ $test = new TestOfNotEnoughErrors();
+ $this->assertFalse($test->run(new SimpleReporter()));
+ }
+}
+
+// TODO: Add stacked error handler test
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/exceptions_test.php b/vendors/simpletest/test/exceptions_test.php
new file mode 100644
index 000000000..9cc35c590
--- /dev/null
+++ b/vendors/simpletest/test/exceptions_test.php
@@ -0,0 +1,153 @@
+<?php
+// $Id: exceptions_test.php 1618 2007-12-29 22:52:30Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../exceptions.php');
+require_once(dirname(__FILE__) . '/../expectation.php');
+require_once(dirname(__FILE__) . '/../test_case.php');
+Mock::generate('SimpleTestCase');
+Mock::generate('SimpleExpectation');
+
+class MyTestException extends Exception {}
+class HigherTestException extends MyTestException {}
+class OtherTestException extends Exception {}
+
+class TestOfExceptionExpectation extends UnitTestCase {
+
+ function testExceptionClassAsStringWillMatchExceptionsRootedOnThatClass() {
+ $expectation = new ExceptionExpectation('MyTestException');
+ $this->assertTrue($expectation->test(new MyTestException()));
+ $this->assertTrue($expectation->test(new HigherTestException()));
+ $this->assertFalse($expectation->test(new OtherTestException()));
+ }
+
+ function testMatchesClassAndMessageWhenExceptionExpected() {
+ $expectation = new ExceptionExpectation(new MyTestException('Hello'));
+ $this->assertTrue($expectation->test(new MyTestException('Hello')));
+ $this->assertFalse($expectation->test(new HigherTestException('Hello')));
+ $this->assertFalse($expectation->test(new OtherTestException('Hello')));
+ $this->assertFalse($expectation->test(new MyTestException('Goodbye')));
+ $this->assertFalse($expectation->test(new MyTestException()));
+ }
+
+ function testMessagelessExceptionMatchesOnlyOnClass() {
+ $expectation = new ExceptionExpectation(new MyTestException());
+ $this->assertTrue($expectation->test(new MyTestException()));
+ $this->assertFalse($expectation->test(new HigherTestException()));
+ }
+}
+
+class TestOfExceptionTrap extends UnitTestCase {
+
+ function testNoExceptionsInQueueMeansNoTestMessages() {
+ $test = new MockSimpleTestCase();
+ $test->expectNever('assert');
+ $queue = new SimpleExceptionTrap();
+ $this->assertFalse($queue->isExpected($test, new Exception()));
+ }
+
+ function testMatchingExceptionGivesTrue() {
+ $expectation = new MockSimpleExpectation();
+ $expectation->setReturnValue('test', true);
+ $test = new MockSimpleTestCase();
+ $test->setReturnValue('assert', true);
+ $queue = new SimpleExceptionTrap();
+ $queue->expectException($expectation, 'message');
+ $this->assertTrue($queue->isExpected($test, new Exception()));
+ }
+
+ function testMatchingExceptionTriggersAssertion() {
+ $test = new MockSimpleTestCase();
+ $test->expectOnce('assert', array(
+ '*',
+ new ExceptionExpectation(new Exception()),
+ 'message'));
+ $queue = new SimpleExceptionTrap();
+ $queue->expectException(new ExceptionExpectation(new Exception()), 'message');
+ $queue->isExpected($test, new Exception());
+ }
+}
+
+class TestOfCatchingExceptions extends UnitTestCase {
+
+ function testCanCatchAnyExpectedException() {
+ $this->expectException();
+ throw new Exception();
+ }
+
+ function testCanMatchExceptionByClass() {
+ $this->expectException('MyTestException');
+ throw new HigherTestException();
+ }
+
+ function testCanMatchExceptionExactly() {
+ $this->expectException(new Exception('Ouch'));
+ throw new Exception('Ouch');
+ }
+
+ function testLastListedExceptionIsTheOneThatCounts() {
+ $this->expectException('OtherTestException');
+ $this->expectException('MyTestException');
+ throw new HigherTestException();
+ }
+}
+
+class TestOfCallingTearDownAfterExceptions extends UnitTestCase {
+ private $debri = 0;
+
+ function tearDown() {
+ $this->debri--;
+ }
+
+ function testLeaveSomeDebri() {
+ $this->debri++;
+ $this->expectException();
+ throw new Exception(__FUNCTION__);
+ }
+
+ function testDebriWasRemovedOnce() {
+ $this->assertEqual($this->debri, 0);
+ }
+}
+
+class TestOfExceptionThrownInSetUpDoesNotRunTestBody extends UnitTestCase {
+
+ function setUp() {
+ $this->expectException();
+ throw new Exception();
+ }
+
+ function testShouldNotBeRun() {
+ $this->fail('This test body should not be run');
+ }
+
+ function testShouldNotBeRunEither() {
+ $this->fail('This test body should not be run either');
+ }
+}
+
+class TestOfExpectExceptionWithSetUp extends UnitTestCase {
+
+ function setUp() {
+ $this->expectException();
+ }
+
+ function testThisExceptionShouldBeCaught() {
+ throw new Exception();
+ }
+
+ function testJustThrowingMyTestException() {
+ throw new MyTestException();
+ }
+}
+
+class TestOfThrowingExceptionsInTearDown extends UnitTestCase {
+
+ function tearDown() {
+ throw new Exception();
+ }
+
+ function testDoesntFatal() {
+ $this->expectException();
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/expectation_test.php b/vendors/simpletest/test/expectation_test.php
new file mode 100644
index 000000000..8f4fc3878
--- /dev/null
+++ b/vendors/simpletest/test/expectation_test.php
@@ -0,0 +1,245 @@
+<?php
+// $Id: expectation_test.php 1539 2007-06-09 08:35:54Z pachanga $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../expectation.php');
+
+class TestOfEquality extends UnitTestCase {
+
+ function testBoolean() {
+ $is_true = &new EqualExpectation(true);
+ $this->assertTrue($is_true->test(true));
+ $this->assertFalse($is_true->test(false));
+ }
+
+ function testStringMatch() {
+ $hello = &new EqualExpectation("Hello");
+ $this->assertTrue($hello->test("Hello"));
+ $this->assertFalse($hello->test("Goodbye"));
+ }
+
+ function testInteger() {
+ $fifteen = &new EqualExpectation(15);
+ $this->assertTrue($fifteen->test(15));
+ $this->assertFalse($fifteen->test(14));
+ }
+
+ function testFloat() {
+ $pi = &new EqualExpectation(3.14);
+ $this->assertTrue($pi->test(3.14));
+ $this->assertFalse($pi->test(3.15));
+ }
+
+ function testArray() {
+ $colours = &new EqualExpectation(array("r", "g", "b"));
+ $this->assertTrue($colours->test(array("r", "g", "b")));
+ $this->assertFalse($colours->test(array("g", "b", "r")));
+ }
+
+ function testHash() {
+ $is_blue = &new EqualExpectation(array("r" => 0, "g" => 0, "b" => 255));
+ $this->assertTrue($is_blue->test(array("r" => 0, "g" => 0, "b" => 255)));
+ $this->assertFalse($is_blue->test(array("r" => 0, "g" => 255, "b" => 0)));
+ }
+
+ function testHashWithOutOfOrderKeysShouldStillMatch() {
+ $any_order = &new EqualExpectation(array('a' => 1, 'b' => 2));
+ $this->assertTrue($any_order->test(array('b' => 2, 'a' => 1)));
+ }
+}
+
+class TestOfWithin extends UnitTestCase {
+
+ function testWithinFloatingPointMargin() {
+ $within = new WithinMarginExpectation(1.0, 0.2);
+ $this->assertFalse($within->test(0.7));
+ $this->assertTrue($within->test(0.8));
+ $this->assertTrue($within->test(0.9));
+ $this->assertTrue($within->test(1.1));
+ $this->assertTrue($within->test(1.2));
+ $this->assertFalse($within->test(1.3));
+ }
+
+ function testOutsideFloatingPointMargin() {
+ $within = new OutsideMarginExpectation(1.0, 0.2);
+ $this->assertTrue($within->test(0.7));
+ $this->assertFalse($within->test(0.8));
+ $this->assertFalse($within->test(1.2));
+ $this->assertTrue($within->test(1.3));
+ }
+}
+
+class TestOfInequality extends UnitTestCase {
+
+ function testStringMismatch() {
+ $not_hello = &new NotEqualExpectation("Hello");
+ $this->assertTrue($not_hello->test("Goodbye"));
+ $this->assertFalse($not_hello->test("Hello"));
+ }
+}
+
+class RecursiveNasty {
+ var $_me;
+
+ function RecursiveNasty() {
+ $this->_me = $this;
+ }
+}
+
+class TestOfIdentity extends UnitTestCase {
+
+ function testType() {
+ $string = &new IdenticalExpectation("37");
+ $this->assertTrue($string->test("37"));
+ $this->assertFalse($string->test(37));
+ $this->assertFalse($string->test("38"));
+ }
+
+ function _testNastyPhp5Bug() {
+ $this->assertFalse(new RecursiveNasty() != new RecursiveNasty());
+ }
+
+ function _testReallyHorribleRecursiveStructure() {
+ $hopeful = &new IdenticalExpectation(new RecursiveNasty());
+ $this->assertTrue($hopeful->test(new RecursiveNasty()));
+ }
+}
+
+class DummyReferencedObject{}
+
+class TestOfReference extends UnitTestCase {
+
+ function testReference() {
+ $foo = "foo";
+ $ref =& $foo;
+ $not_ref = $foo;
+ $bar = "bar";
+
+ $expect = &new ReferenceExpectation($foo);
+ $this->assertTrue($expect->test($ref));
+ $this->assertFalse($expect->test($not_ref));
+ $this->assertFalse($expect->test($bar));
+ }
+
+ function testObjectsReferencesDualityForPhp5AndPhp4() {
+ $dummy = new DummyReferencedObject();
+ $ref =& $dummy;
+ $not_ref = $dummy;
+
+ $hopeful = &new ReferenceExpectation($dummy);
+ $this->assertTrue($hopeful->test($ref));
+
+ if (version_compare(phpversion(), '5') >= 0) {
+ $this->assertTrue($hopeful->test($not_ref));
+ } else {
+ $this->assertFalse($hopeful->test($not_ref));
+ }
+ }
+
+ function testReallyHorribleRecursiveStructure() {
+ $nasty = new RecursiveNasty();
+ $ref =& $nasty;
+ $hopeful = &new ReferenceExpectation($nasty);
+ $this->assertTrue($hopeful->test($ref));
+ }
+}
+
+class TestOfNonIdentity extends UnitTestCase {
+
+ function testType() {
+ $string = &new NotIdenticalExpectation("37");
+ $this->assertTrue($string->test("38"));
+ $this->assertTrue($string->test(37));
+ $this->assertFalse($string->test("37"));
+ }
+}
+
+class TestOfPatterns extends UnitTestCase {
+
+ function testWanted() {
+ $pattern = &new PatternExpectation('/hello/i');
+ $this->assertTrue($pattern->test("Hello world"));
+ $this->assertFalse($pattern->test("Goodbye world"));
+ }
+
+ function testUnwanted() {
+ $pattern = &new NoPatternExpectation('/hello/i');
+ $this->assertFalse($pattern->test("Hello world"));
+ $this->assertTrue($pattern->test("Goodbye world"));
+ }
+}
+
+class ExpectedMethodTarget {
+ function hasThisMethod() {}
+}
+
+class TestOfMethodExistence extends UnitTestCase {
+
+ function testHasMethod() {
+ $instance = &new ExpectedMethodTarget();
+ $expectation = &new MethodExistsExpectation('hasThisMethod');
+ $this->assertTrue($expectation->test($instance));
+ $expectation = &new MethodExistsExpectation('doesNotHaveThisMethod');
+ $this->assertFalse($expectation->test($instance));
+ }
+}
+
+class TestOfIsA extends UnitTestCase {
+
+ function testString() {
+ $expectation = &new IsAExpectation('string');
+ $this->assertTrue($expectation->test('Hello'));
+ $this->assertFalse($expectation->test(5));
+ }
+
+ function testBoolean() {
+ $expectation = &new IsAExpectation('boolean');
+ $this->assertTrue($expectation->test(true));
+ $this->assertFalse($expectation->test(1));
+ }
+
+ function testBool() {
+ $expectation = &new IsAExpectation('bool');
+ $this->assertTrue($expectation->test(true));
+ $this->assertFalse($expectation->test(1));
+ }
+
+ function testDouble() {
+ $expectation = &new IsAExpectation('double');
+ $this->assertTrue($expectation->test(5.0));
+ $this->assertFalse($expectation->test(5));
+ }
+
+ function testFloat() {
+ $expectation = &new IsAExpectation('float');
+ $this->assertTrue($expectation->test(5.0));
+ $this->assertFalse($expectation->test(5));
+ }
+
+ function testReal() {
+ $expectation = &new IsAExpectation('real');
+ $this->assertTrue($expectation->test(5.0));
+ $this->assertFalse($expectation->test(5));
+ }
+
+ function testInteger() {
+ $expectation = &new IsAExpectation('integer');
+ $this->assertTrue($expectation->test(5));
+ $this->assertFalse($expectation->test(5.0));
+ }
+
+ function testInt() {
+ $expectation = &new IsAExpectation('int');
+ $this->assertTrue($expectation->test(5));
+ $this->assertFalse($expectation->test(5.0));
+ }
+}
+
+class TestOfNotA extends UnitTestCase {
+
+ function testString() {
+ $expectation = &new NotAExpectation('string');
+ $this->assertFalse($expectation->test('Hello'));
+ $this->assertTrue($expectation->test(5));
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/form_test.php b/vendors/simpletest/test/form_test.php
new file mode 100644
index 000000000..bdc6f67d2
--- /dev/null
+++ b/vendors/simpletest/test/form_test.php
@@ -0,0 +1,323 @@
+<?php
+// $Id: form_test.php 1624 2008-01-01 15:00:43Z pp11 $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../url.php');
+require_once(dirname(__FILE__) . '/../form.php');
+require_once(dirname(__FILE__) . '/../page.php');
+require_once(dirname(__FILE__) . '/../encoding.php');
+Mock::generate('SimplePage');
+
+class TestOfForm extends UnitTestCase {
+
+ function &page($url, $action = false) {
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getUrl', new SimpleUrl($url));
+ $page->setReturnValue('expandUrl', new SimpleUrl($url));
+ return $page;
+ }
+
+ function testFormAttributes() {
+ $tag = &new SimpleFormTag(array('method' => 'GET', 'action' => 'here.php', 'id' => '33'));
+ $form = &new SimpleForm($tag, $this->page('http://host/a/index.html'));
+ $this->assertEqual($form->getMethod(), 'get');
+ $this->assertIdentical($form->getId(), '33');
+ $this->assertNull($form->getValue(new SimpleByName('a')));
+ }
+
+ function testAction() {
+ $page = &new MockSimplePage();
+ $page->expectOnce('expandUrl', array(new SimpleUrl('here.php')));
+ $page->setReturnValue('expandUrl', new SimpleUrl('http://host/here.php'));
+ $tag = &new SimpleFormTag(array('method' => 'GET', 'action' => 'here.php'));
+ $form = &new SimpleForm($tag, $page);
+ $this->assertEqual($form->getAction(), new SimpleUrl('http://host/here.php'));
+ }
+
+ function testEmptyAction() {
+ $tag = &new SimpleFormTag(array('method' => 'GET', 'action' => '', 'id' => '33'));
+ $form = &new SimpleForm($tag, $this->page('http://host/a/index.html'));
+ $this->assertEqual(
+ $form->getAction(),
+ new SimpleUrl('http://host/a/index.html'));
+ }
+
+ function testMissingAction() {
+ $tag = &new SimpleFormTag(array('method' => 'GET'));
+ $form = &new SimpleForm($tag, $this->page('http://host/a/index.html'));
+ $this->assertEqual(
+ $form->getAction(),
+ new SimpleUrl('http://host/a/index.html'));
+ }
+
+ function testRootAction() {
+ $page = &new MockSimplePage();
+ $page->expectOnce('expandUrl', array(new SimpleUrl('/')));
+ $page->setReturnValue('expandUrl', new SimpleUrl('http://host/'));
+ $tag = &new SimpleFormTag(array('method' => 'GET', 'action' => '/'));
+ $form = &new SimpleForm($tag, $page);
+ $this->assertEqual(
+ $form->getAction(),
+ new SimpleUrl('http://host/'));
+ }
+
+ function testDefaultFrameTargetOnForm() {
+ $page = &new MockSimplePage();
+ $page->expectOnce('expandUrl', array(new SimpleUrl('here.php')));
+ $page->setReturnValue('expandUrl', new SimpleUrl('http://host/here.php'));
+ $tag = &new SimpleFormTag(array('method' => 'GET', 'action' => 'here.php'));
+ $form = &new SimpleForm($tag, $page);
+ $form->setDefaultTarget('frame');
+ $expected = new SimpleUrl('http://host/here.php');
+ $expected->setTarget('frame');
+ $this->assertEqual($form->getAction(), $expected);
+ }
+
+ function testTextWidget() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $form->addWidget(new SimpleTextTag(
+ array('name' => 'me', 'type' => 'text', 'value' => 'Myself')));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), 'Myself');
+ $this->assertTrue($form->setField(new SimpleByName('me'), 'Not me'));
+ $this->assertFalse($form->setField(new SimpleByName('not_present'), 'Not me'));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), 'Not me');
+ $this->assertNull($form->getValue(new SimpleByName('not_present')));
+ }
+
+ function testTextWidgetById() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $form->addWidget(new SimpleTextTag(
+ array('name' => 'me', 'type' => 'text', 'value' => 'Myself', 'id' => 50)));
+ $this->assertIdentical($form->getValue(new SimpleById(50)), 'Myself');
+ $this->assertTrue($form->setField(new SimpleById(50), 'Not me'));
+ $this->assertIdentical($form->getValue(new SimpleById(50)), 'Not me');
+ }
+
+ function testTextWidgetByLabel() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $widget = &new SimpleTextTag(array('name' => 'me', 'type' => 'text', 'value' => 'a'));
+ $form->addWidget($widget);
+ $widget->setLabel('thing');
+ $this->assertIdentical($form->getValue(new SimpleByLabel('thing')), 'a');
+ $this->assertTrue($form->setField(new SimpleByLabel('thing'), 'b'));
+ $this->assertIdentical($form->getValue(new SimpleByLabel('thing')), 'b');
+ }
+
+ function testSubmitEmpty() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $this->assertIdentical($form->submit(), new SimpleGetEncoding());
+ }
+
+ function testSubmitButton() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('http://host'));
+ $form->addWidget(new SimpleSubmitTag(
+ array('type' => 'submit', 'name' => 'go', 'value' => 'Go!', 'id' => '9')));
+ $this->assertTrue($form->hasSubmit(new SimpleByName('go')));
+ $this->assertEqual($form->getValue(new SimpleByName('go')), 'Go!');
+ $this->assertEqual($form->getValue(new SimpleById(9)), 'Go!');
+ $this->assertEqual(
+ $form->submitButton(new SimpleByName('go')),
+ new SimpleGetEncoding(array('go' => 'Go!')));
+ $this->assertEqual(
+ $form->submitButton(new SimpleByLabel('Go!')),
+ new SimpleGetEncoding(array('go' => 'Go!')));
+ $this->assertEqual(
+ $form->submitButton(new SimpleById(9)),
+ new SimpleGetEncoding(array('go' => 'Go!')));
+ }
+
+ function testSubmitWithAdditionalParameters() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('http://host'));
+ $form->addWidget(new SimpleSubmitTag(
+ array('type' => 'submit', 'name' => 'go', 'value' => 'Go!')));
+ $this->assertEqual(
+ $form->submitButton(new SimpleByLabel('Go!'), array('a' => 'A')),
+ new SimpleGetEncoding(array('go' => 'Go!', 'a' => 'A')));
+ }
+
+ function testSubmitButtonWithLabelOfSubmit() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('http://host'));
+ $form->addWidget(new SimpleSubmitTag(
+ array('type' => 'submit', 'name' => 'test', 'value' => 'Submit')));
+ $this->assertEqual(
+ $form->submitButton(new SimpleByName('test')),
+ new SimpleGetEncoding(array('test' => 'Submit')));
+ $this->assertEqual(
+ $form->submitButton(new SimpleByLabel('Submit')),
+ new SimpleGetEncoding(array('test' => 'Submit')));
+ }
+
+ function testSubmitButtonWithWhitespacePaddedLabelOfSubmit() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('http://host'));
+ $form->addWidget(new SimpleSubmitTag(
+ array('type' => 'submit', 'name' => 'test', 'value' => ' Submit ')));
+ $this->assertEqual(
+ $form->submitButton(new SimpleByLabel('Submit')),
+ new SimpleGetEncoding(array('test' => ' Submit ')));
+ }
+
+ function testImageSubmitButton() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $form->addWidget(new SimpleImageSubmitTag(array(
+ 'type' => 'image',
+ 'src' => 'source.jpg',
+ 'name' => 'go',
+ 'alt' => 'Go!',
+ 'id' => '9')));
+ $this->assertTrue($form->hasImage(new SimpleByLabel('Go!')));
+ $this->assertEqual(
+ $form->submitImage(new SimpleByLabel('Go!'), 100, 101),
+ new SimpleGetEncoding(array('go.x' => 100, 'go.y' => 101)));
+ $this->assertTrue($form->hasImage(new SimpleByName('go')));
+ $this->assertEqual(
+ $form->submitImage(new SimpleByName('go'), 100, 101),
+ new SimpleGetEncoding(array('go.x' => 100, 'go.y' => 101)));
+ $this->assertTrue($form->hasImage(new SimpleById(9)));
+ $this->assertEqual(
+ $form->submitImage(new SimpleById(9), 100, 101),
+ new SimpleGetEncoding(array('go.x' => 100, 'go.y' => 101)));
+ }
+
+ function testImageSubmitButtonWithAdditionalData() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $form->addWidget(new SimpleImageSubmitTag(array(
+ 'type' => 'image',
+ 'src' => 'source.jpg',
+ 'name' => 'go',
+ 'alt' => 'Go!')));
+ $this->assertEqual(
+ $form->submitImage(new SimpleByLabel('Go!'), 100, 101, array('a' => 'A')),
+ new SimpleGetEncoding(array('go.x' => 100, 'go.y' => 101, 'a' => 'A')));
+ }
+
+ function testButtonTag() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('http://host'));
+ $widget = &new SimpleButtonTag(
+ array('type' => 'submit', 'name' => 'go', 'value' => 'Go', 'id' => '9'));
+ $widget->addContent('Go!');
+ $form->addWidget($widget);
+ $this->assertTrue($form->hasSubmit(new SimpleByName('go')));
+ $this->assertTrue($form->hasSubmit(new SimpleByLabel('Go!')));
+ $this->assertEqual(
+ $form->submitButton(new SimpleByName('go')),
+ new SimpleGetEncoding(array('go' => 'Go')));
+ $this->assertEqual(
+ $form->submitButton(new SimpleByLabel('Go!')),
+ new SimpleGetEncoding(array('go' => 'Go')));
+ $this->assertEqual(
+ $form->submitButton(new SimpleById(9)),
+ new SimpleGetEncoding(array('go' => 'Go')));
+ }
+
+ function testMultipleFieldsWithSameNameSubmitted() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $input = &new SimpleTextTag(array('name' => 'elements[]', 'value' => '1'));
+ $form->addWidget($input);
+ $input = &new SimpleTextTag(array('name' => 'elements[]', 'value' => '2'));
+ $form->addWidget($input);
+ $form->setField(new SimpleByLabelOrName('elements[]'), '3', 1);
+ $form->setField(new SimpleByLabelOrName('elements[]'), '4', 2);
+ $submit = $form->submit();
+ $this->assertEqual(count($submit->_request), 2);
+ $this->assertIdentical($submit->_request[0], new SimpleEncodedPair('elements[]', '3'));
+ $this->assertIdentical($submit->_request[1], new SimpleEncodedPair('elements[]', '4'));
+ }
+
+ function testSingleSelectFieldSubmitted() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $select = &new SimpleSelectionTag(array('name' => 'a'));
+ $select->addTag(new SimpleOptionTag(
+ array('value' => 'aaa', 'selected' => '')));
+ $form->addWidget($select);
+ $this->assertIdentical(
+ $form->submit(),
+ new SimpleGetEncoding(array('a' => 'aaa')));
+ }
+
+ function testSingleSelectFieldSubmittedWithPost() {
+ $form = &new SimpleForm(new SimpleFormTag(array('method' => 'post')), $this->page('htp://host'));
+ $select = &new SimpleSelectionTag(array('name' => 'a'));
+ $select->addTag(new SimpleOptionTag(
+ array('value' => 'aaa', 'selected' => '')));
+ $form->addWidget($select);
+ $this->assertIdentical(
+ $form->submit(),
+ new SimplePostEncoding(array('a' => 'aaa')));
+ }
+
+ function testUnchecked() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $form->addWidget(new SimpleCheckboxTag(
+ array('name' => 'me', 'type' => 'checkbox')));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), false);
+ $this->assertTrue($form->setField(new SimpleByName('me'), 'on'));
+ $this->assertEqual($form->getValue(new SimpleByName('me')), 'on');
+ $this->assertFalse($form->setField(new SimpleByName('me'), 'other'));
+ $this->assertEqual($form->getValue(new SimpleByName('me')), 'on');
+ }
+
+ function testChecked() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $form->addWidget(new SimpleCheckboxTag(
+ array('name' => 'me', 'value' => 'a', 'type' => 'checkbox', 'checked' => '')));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), 'a');
+ $this->assertTrue($form->setField(new SimpleByName('me'), 'a'));
+ $this->assertEqual($form->getValue(new SimpleByName('me')), 'a');
+ $this->assertTrue($form->setField(new SimpleByName('me'), false));
+ $this->assertEqual($form->getValue(new SimpleByName('me')), false);
+ }
+
+ function testSingleUncheckedRadioButton() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $form->addWidget(new SimpleRadioButtonTag(
+ array('name' => 'me', 'value' => 'a', 'type' => 'radio')));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), false);
+ $this->assertTrue($form->setField(new SimpleByName('me'), 'a'));
+ $this->assertEqual($form->getValue(new SimpleByName('me')), 'a');
+ }
+
+ function testSingleCheckedRadioButton() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $form->addWidget(new SimpleRadioButtonTag(
+ array('name' => 'me', 'value' => 'a', 'type' => 'radio', 'checked' => '')));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), 'a');
+ $this->assertFalse($form->setField(new SimpleByName('me'), 'other'));
+ }
+
+ function testUncheckedRadioButtons() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $form->addWidget(new SimpleRadioButtonTag(
+ array('name' => 'me', 'value' => 'a', 'type' => 'radio')));
+ $form->addWidget(new SimpleRadioButtonTag(
+ array('name' => 'me', 'value' => 'b', 'type' => 'radio')));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), false);
+ $this->assertTrue($form->setField(new SimpleByName('me'), 'a'));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), 'a');
+ $this->assertTrue($form->setField(new SimpleByName('me'), 'b'));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), 'b');
+ $this->assertFalse($form->setField(new SimpleByName('me'), 'c'));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), 'b');
+ }
+
+ function testCheckedRadioButtons() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $form->addWidget(new SimpleRadioButtonTag(
+ array('name' => 'me', 'value' => 'a', 'type' => 'radio')));
+ $form->addWidget(new SimpleRadioButtonTag(
+ array('name' => 'me', 'value' => 'b', 'type' => 'radio', 'checked' => '')));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), 'b');
+ $this->assertTrue($form->setField(new SimpleByName('me'), 'a'));
+ $this->assertIdentical($form->getValue(new SimpleByName('me')), 'a');
+ }
+
+ function testMultipleFieldsWithSameKey() {
+ $form = &new SimpleForm(new SimpleFormTag(array()), $this->page('htp://host'));
+ $form->addWidget(new SimpleCheckboxTag(
+ array('name' => 'a', 'type' => 'checkbox', 'value' => 'me')));
+ $form->addWidget(new SimpleCheckboxTag(
+ array('name' => 'a', 'type' => 'checkbox', 'value' => 'you')));
+ $this->assertIdentical($form->getValue(new SimpleByName('a')), false);
+ $this->assertTrue($form->setField(new SimpleByName('a'), 'me'));
+ $this->assertIdentical($form->getValue(new SimpleByName('a')), 'me');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/frames_test.php b/vendors/simpletest/test/frames_test.php
new file mode 100644
index 000000000..160eebc1b
--- /dev/null
+++ b/vendors/simpletest/test/frames_test.php
@@ -0,0 +1,549 @@
+<?php
+// $Id: frames_test.php 1555 2007-07-14 02:04:34Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../tag.php');
+require_once(dirname(__FILE__) . '/../page.php');
+require_once(dirname(__FILE__) . '/../frames.php');
+Mock::generate('SimplePage');
+Mock::generate('SimpleForm');
+
+class TestOfFrameset extends UnitTestCase {
+
+ function testTitleReadFromFramesetPage() {
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getTitle', 'This page');
+ $frameset = &new SimpleFrameset($page);
+ $this->assertEqual($frameset->getTitle(), 'This page');
+ }
+
+ function TestHeadersReadFromFramesetByDefault() {
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getHeaders', 'Header: content');
+ $page->setReturnValue('getMimeType', 'text/xml');
+ $page->setReturnValue('getResponseCode', 401);
+ $page->setReturnValue('getTransportError', 'Could not parse headers');
+ $page->setReturnValue('getAuthentication', 'Basic');
+ $page->setReturnValue('getRealm', 'Safe place');
+
+ $frameset = &new SimpleFrameset($page);
+
+ $this->assertIdentical($frameset->getHeaders(), 'Header: content');
+ $this->assertIdentical($frameset->getMimeType(), 'text/xml');
+ $this->assertIdentical($frameset->getResponseCode(), 401);
+ $this->assertIdentical($frameset->getTransportError(), 'Could not parse headers');
+ $this->assertIdentical($frameset->getAuthentication(), 'Basic');
+ $this->assertIdentical($frameset->getRealm(), 'Safe place');
+ }
+
+ function testEmptyFramesetHasNoContent() {
+ $page = &new MockSimplePage();
+ $page->setReturnValue('getRaw', 'This content');
+ $frameset = &new SimpleFrameset($page);
+ $this->assertEqual($frameset->getRaw(), '');
+ }
+
+ function testRawContentIsFromOnlyFrame() {
+ $page = &new MockSimplePage();
+ $page->expectNever('getRaw');
+
+ $frame = &new MockSimplePage();
+ $frame->setReturnValue('getRaw', 'Stuff');
+
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame);
+ $this->assertEqual($frameset->getRaw(), 'Stuff');
+ }
+
+ function testRawContentIsFromAllFrames() {
+ $page = &new MockSimplePage();
+ $page->expectNever('getRaw');
+
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue('getRaw', 'Stuff1');
+
+ $frame2 = &new MockSimplePage();
+ $frame2->setReturnValue('getRaw', 'Stuff2');
+
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame1);
+ $frameset->addFrame($frame2);
+ $this->assertEqual($frameset->getRaw(), 'Stuff1Stuff2');
+ }
+
+ function testTextContentIsFromOnlyFrame() {
+ $page = &new MockSimplePage();
+ $page->expectNever('getText');
+
+ $frame = &new MockSimplePage();
+ $frame->setReturnValue('getText', 'Stuff');
+
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame);
+ $this->assertEqual($frameset->getText(), 'Stuff');
+ }
+
+ function testTextContentIsFromAllFrames() {
+ $page = &new MockSimplePage();
+ $page->expectNever('getText');
+
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue('getText', 'Stuff1');
+
+ $frame2 = &new MockSimplePage();
+ $frame2->setReturnValue('getText', 'Stuff2');
+
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame1);
+ $frameset->addFrame($frame2);
+ $this->assertEqual($frameset->getText(), 'Stuff1 Stuff2');
+ }
+
+ function testFieldFoundIsFirstInFramelist() {
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue('getField', null);
+ $frame1->expectOnce('getField', array(new SimpleByName('a')));
+
+ $frame2 = &new MockSimplePage();
+ $frame2->setReturnValue('getField', 'A');
+ $frame2->expectOnce('getField', array(new SimpleByName('a')));
+
+ $frame3 = &new MockSimplePage();
+ $frame3->expectNever('getField');
+
+ $page = &new MockSimplePage();
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame1);
+ $frameset->addFrame($frame2);
+ $frameset->addFrame($frame3);
+ $this->assertIdentical($frameset->getField(new SimpleByName('a')), 'A');
+ }
+
+ function testFrameReplacementByIndex() {
+ $page = &new MockSimplePage();
+ $page->expectNever('getRaw');
+
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue('getRaw', 'Stuff1');
+
+ $frame2 = &new MockSimplePage();
+ $frame2->setReturnValue('getRaw', 'Stuff2');
+
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame1);
+ $frameset->setFrame(array(1), $frame2);
+ $this->assertEqual($frameset->getRaw(), 'Stuff2');
+ }
+
+ function testFrameReplacementByName() {
+ $page = &new MockSimplePage();
+ $page->expectNever('getRaw');
+
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue('getRaw', 'Stuff1');
+
+ $frame2 = &new MockSimplePage();
+ $frame2->setReturnValue('getRaw', 'Stuff2');
+
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame1, 'a');
+ $frameset->setFrame(array('a'), $frame2);
+ $this->assertEqual($frameset->getRaw(), 'Stuff2');
+ }
+}
+
+class TestOfFrameNavigation extends UnitTestCase {
+
+ function testStartsWithoutFrameFocus() {
+ $page = &new MockSimplePage();
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame);
+ $this->assertFalse($frameset->getFrameFocus());
+ }
+
+ function testCanFocusOnSingleFrame() {
+ $page = &new MockSimplePage();
+ $page->expectNever('getRaw');
+
+ $frame = &new MockSimplePage();
+ $frame->setReturnValue('getFrameFocus', array());
+ $frame->setReturnValue('getRaw', 'Stuff');
+
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame);
+
+ $this->assertFalse($frameset->setFrameFocusByIndex(0));
+ $this->assertTrue($frameset->setFrameFocusByIndex(1));
+ $this->assertEqual($frameset->getRaw(), 'Stuff');
+ $this->assertFalse($frameset->setFrameFocusByIndex(2));
+ $this->assertIdentical($frameset->getFrameFocus(), array(1));
+ }
+
+ function testContentComesFromFrameInFocus() {
+ $page = &new MockSimplePage();
+
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue('getRaw', 'Stuff1');
+ $frame1->setReturnValue('getFrameFocus', array());
+
+ $frame2 = &new MockSimplePage();
+ $frame2->setReturnValue('getRaw', 'Stuff2');
+ $frame2->setReturnValue('getFrameFocus', array());
+
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame1);
+ $frameset->addFrame($frame2);
+
+ $this->assertTrue($frameset->setFrameFocusByIndex(1));
+ $this->assertEqual($frameset->getFrameFocus(), array(1));
+ $this->assertEqual($frameset->getRaw(), 'Stuff1');
+
+ $this->assertTrue($frameset->setFrameFocusByIndex(2));
+ $this->assertEqual($frameset->getFrameFocus(), array(2));
+ $this->assertEqual($frameset->getRaw(), 'Stuff2');
+
+ $this->assertFalse($frameset->setFrameFocusByIndex(3));
+ $this->assertEqual($frameset->getFrameFocus(), array(2));
+
+ $frameset->clearFrameFocus();
+ $this->assertEqual($frameset->getRaw(), 'Stuff1Stuff2');
+ }
+
+ function testCanFocusByName() {
+ $page = &new MockSimplePage();
+
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue('getRaw', 'Stuff1');
+ $frame1->setReturnValue('getFrameFocus', array());
+
+ $frame2 = &new MockSimplePage();
+ $frame2->setReturnValue('getRaw', 'Stuff2');
+ $frame2->setReturnValue('getFrameFocus', array());
+
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame1, 'A');
+ $frameset->addFrame($frame2, 'B');
+
+ $this->assertTrue($frameset->setFrameFocus('A'));
+ $this->assertEqual($frameset->getFrameFocus(), array('A'));
+ $this->assertEqual($frameset->getRaw(), 'Stuff1');
+
+ $this->assertTrue($frameset->setFrameFocusByIndex(2));
+ $this->assertEqual($frameset->getFrameFocus(), array('B'));
+ $this->assertEqual($frameset->getRaw(), 'Stuff2');
+
+ $this->assertFalse($frameset->setFrameFocus('z'));
+
+ $frameset->clearFrameFocus();
+ $this->assertEqual($frameset->getRaw(), 'Stuff1Stuff2');
+ }
+}
+
+class TestOfFramesetPageInterface extends UnitTestCase {
+ var $_page_interface;
+ var $_frameset_interface;
+
+ function TestOfFramesetPageInterface() {
+ $this->UnitTestCase();
+ $this->_page_interface = $this->_getPageMethods();
+ $this->_frameset_interface = $this->_getFramesetMethods();
+ }
+
+ function assertListInAnyOrder($list, $expected) {
+ sort($list);
+ sort($expected);
+ $this->assertEqual($list, $expected);
+ }
+
+ function _getPageMethods() {
+ $methods = array();
+ foreach (get_class_methods('SimplePage') as $method) {
+ if (strtolower($method) == strtolower('SimplePage')) {
+ continue;
+ }
+ if (strtolower($method) == strtolower('getFrameset')) {
+ continue;
+ }
+ if (strncmp($method, '_', 1) == 0) {
+ continue;
+ }
+ if (strncmp($method, 'accept', 6) == 0) {
+ continue;
+ }
+ $methods[] = $method;
+ }
+ return $methods;
+ }
+
+ function _getFramesetMethods() {
+ $methods = array();
+ foreach (get_class_methods('SimpleFrameset') as $method) {
+ if (strtolower($method) == strtolower('SimpleFrameset')) {
+ continue;
+ }
+ if (strncmp($method, '_', 1) == 0) {
+ continue;
+ }
+ if (strncmp($method, 'add', 3) == 0) {
+ continue;
+ }
+ $methods[] = $method;
+ }
+ return $methods;
+ }
+
+ function testFramsetHasPageInterface() {
+ $difference = array();
+ foreach ($this->_page_interface as $method) {
+ if (! in_array($method, $this->_frameset_interface)) {
+ $this->fail("No [$method] in Frameset class");
+ return;
+ }
+ }
+ $this->pass('Frameset covers Page interface');
+ }
+
+ function testHeadersReadFromFrameIfInFocus() {
+ $frame = &new MockSimplePage();
+ $frame->setReturnValue('getUrl', new SimpleUrl('http://localhost/stuff'));
+
+ $frame->setReturnValue('getRequest', 'POST stuff');
+ $frame->setReturnValue('getMethod', 'POST');
+ $frame->setReturnValue('getRequestData', array('a' => 'A'));
+ $frame->setReturnValue('getHeaders', 'Header: content');
+ $frame->setReturnValue('getMimeType', 'text/xml');
+ $frame->setReturnValue('getResponseCode', 401);
+ $frame->setReturnValue('getTransportError', 'Could not parse headers');
+ $frame->setReturnValue('getAuthentication', 'Basic');
+ $frame->setReturnValue('getRealm', 'Safe place');
+
+ $frameset = &new SimpleFrameset(new MockSimplePage());
+ $frameset->addFrame($frame);
+ $frameset->setFrameFocusByIndex(1);
+
+ $url = new SimpleUrl('http://localhost/stuff');
+ $url->setTarget(1);
+ $this->assertIdentical($frameset->getUrl(), $url);
+
+ $this->assertIdentical($frameset->getRequest(), 'POST stuff');
+ $this->assertIdentical($frameset->getMethod(), 'POST');
+ $this->assertIdentical($frameset->getRequestData(), array('a' => 'A'));
+ $this->assertIdentical($frameset->getHeaders(), 'Header: content');
+ $this->assertIdentical($frameset->getMimeType(), 'text/xml');
+ $this->assertIdentical($frameset->getResponseCode(), 401);
+ $this->assertIdentical($frameset->getTransportError(), 'Could not parse headers');
+ $this->assertIdentical($frameset->getAuthentication(), 'Basic');
+ $this->assertIdentical($frameset->getRealm(), 'Safe place');
+ }
+
+ function testUrlsComeFromBothFrames() {
+ $page = &new MockSimplePage();
+ $page->expectNever('getUrls');
+
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue(
+ 'getUrls',
+ array('http://www.lastcraft.com/', 'http://myserver/'));
+
+ $frame2 = &new MockSimplePage();
+ $frame2->setReturnValue(
+ 'getUrls',
+ array('http://www.lastcraft.com/', 'http://test/'));
+
+ $frameset = &new SimpleFrameset($page);
+ $frameset->addFrame($frame1);
+ $frameset->addFrame($frame2);
+ $this->assertListInAnyOrder(
+ $frameset->getUrls(),
+ array('http://www.lastcraft.com/', 'http://myserver/', 'http://test/'));
+ }
+
+ function testLabelledUrlsComeFromBothFrames() {
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue(
+ 'getUrlsByLabel',
+ array(new SimpleUrl('goodbye.php')),
+ array('a'));
+
+ $frame2 = &new MockSimplePage();
+ $frame2->setReturnValue(
+ 'getUrlsByLabel',
+ array(new SimpleUrl('hello.php')),
+ array('a'));
+
+ $frameset = &new SimpleFrameset(new MockSimplePage());
+ $frameset->addFrame($frame1);
+ $frameset->addFrame($frame2, 'Two');
+
+ $expected1 = new SimpleUrl('goodbye.php');
+ $expected1->setTarget(1);
+ $expected2 = new SimpleUrl('hello.php');
+ $expected2->setTarget('Two');
+ $this->assertEqual(
+ $frameset->getUrlsByLabel('a'),
+ array($expected1, $expected2));
+ }
+
+ function testUrlByIdComesFromFirstFrameToRespond() {
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue('getUrlById', new SimpleUrl('four.php'), array(4));
+ $frame1->setReturnValue('getUrlById', false, array(5));
+
+ $frame2 = &new MockSimplePage();
+ $frame2->setReturnValue('getUrlById', false, array(4));
+ $frame2->setReturnValue('getUrlById', new SimpleUrl('five.php'), array(5));
+
+ $frameset = &new SimpleFrameset(new MockSimplePage());
+ $frameset->addFrame($frame1);
+ $frameset->addFrame($frame2);
+
+ $four = new SimpleUrl('four.php');
+ $four->setTarget(1);
+ $this->assertEqual($frameset->getUrlById(4), $four);
+ $five = new SimpleUrl('five.php');
+ $five->setTarget(2);
+ $this->assertEqual($frameset->getUrlById(5), $five);
+ }
+
+ function testReadUrlsFromFrameInFocus() {
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue('getUrls', array('a'));
+ $frame1->setReturnValue('getUrlsByLabel', array(new SimpleUrl('l')));
+ $frame1->setReturnValue('getUrlById', new SimpleUrl('i'));
+
+ $frame2 = &new MockSimplePage();
+ $frame2->expectNever('getUrls');
+ $frame2->expectNever('getUrlsByLabel');
+ $frame2->expectNever('getUrlById');
+
+ $frameset = &new SimpleFrameset(new MockSimplePage());
+ $frameset->addFrame($frame1, 'A');
+ $frameset->addFrame($frame2, 'B');
+ $frameset->setFrameFocus('A');
+
+ $this->assertIdentical($frameset->getUrls(), array('a'));
+ $expected = new SimpleUrl('l');
+ $expected->setTarget('A');
+ $this->assertIdentical($frameset->getUrlsByLabel('label'), array($expected));
+ $expected = new SimpleUrl('i');
+ $expected->setTarget('A');
+ $this->assertIdentical($frameset->getUrlById(99), $expected);
+ }
+
+ function testReadFrameTaggedUrlsFromFrameInFocus() {
+ $frame = &new MockSimplePage();
+
+ $by_label = new SimpleUrl('l');
+ $by_label->setTarget('L');
+ $frame->setReturnValue('getUrlsByLabel', array($by_label));
+
+ $by_id = new SimpleUrl('i');
+ $by_id->setTarget('I');
+ $frame->setReturnValue('getUrlById', $by_id);
+
+ $frameset = &new SimpleFrameset(new MockSimplePage());
+ $frameset->addFrame($frame, 'A');
+ $frameset->setFrameFocus('A');
+
+ $this->assertIdentical($frameset->getUrlsByLabel('label'), array($by_label));
+ $this->assertIdentical($frameset->getUrlById(99), $by_id);
+ }
+
+ function testFindingFormsById() {
+ $frame = &new MockSimplePage();
+ $form = &new MockSimpleForm();
+ $frame->setReturnReference('getFormById', $form, array('a'));
+
+ $frameset = &new SimpleFrameset(new MockSimplePage());
+ $frameset->addFrame(new MockSimplePage(), 'A');
+ $frameset->addFrame($frame, 'B');
+ $this->assertReference($frameset->getFormById('a'), $form);
+
+ $frameset->setFrameFocus('A');
+ $this->assertNull($frameset->getFormById('a'));
+
+ $frameset->setFrameFocus('B');
+ $this->assertReference($frameset->getFormById('a'), $form);
+ }
+
+ function testFindingFormsBySubmit() {
+ $frame = &new MockSimplePage();
+ $form = &new MockSimpleForm();
+ $frame->setReturnReference(
+ 'getFormBySubmit',
+ $form,
+ array(new SimpleByLabel('a')));
+
+ $frameset = &new SimpleFrameset(new MockSimplePage());
+ $frameset->addFrame(new MockSimplePage(), 'A');
+ $frameset->addFrame($frame, 'B');
+ $this->assertReference($frameset->getFormBySubmit(new SimpleByLabel('a')), $form);
+
+ $frameset->setFrameFocus('A');
+ $this->assertNull($frameset->getFormBySubmit(new SimpleByLabel('a')));
+
+ $frameset->setFrameFocus('B');
+ $this->assertReference($frameset->getFormBySubmit(new SimpleByLabel('a')), $form);
+ }
+
+ function testFindingFormsByImage() {
+ $frame = &new MockSimplePage();
+ $form = &new MockSimpleForm();
+ $frame->setReturnReference(
+ 'getFormByImage',
+ $form,
+ array(new SimpleByLabel('a')));
+
+ $frameset = &new SimpleFrameset(new MockSimplePage());
+ $frameset->addFrame(new MockSimplePage(), 'A');
+ $frameset->addFrame($frame, 'B');
+ $this->assertReference($frameset->getFormByImage(new SimpleByLabel('a')), $form);
+
+ $frameset->setFrameFocus('A');
+ $this->assertNull($frameset->getFormByImage(new SimpleByLabel('a')));
+
+ $frameset->setFrameFocus('B');
+ $this->assertReference($frameset->getFormByImage(new SimpleByLabel('a')), $form);
+ }
+
+ function testSettingAllFrameFieldsWhenNoFrameFocus() {
+ $frame1 = &new MockSimplePage();
+ $frame1->expectOnce('setField', array(new SimpleById(22), 'A'));
+
+ $frame2 = &new MockSimplePage();
+ $frame2->expectOnce('setField', array(new SimpleById(22), 'A'));
+
+ $frameset = &new SimpleFrameset(new MockSimplePage());
+ $frameset->addFrame($frame1, 'A');
+ $frameset->addFrame($frame2, 'B');
+ $frameset->setField(new SimpleById(22), 'A');
+ }
+
+ function testOnlySettingFieldFromFocusedFrame() {
+ $frame1 = &new MockSimplePage();
+ $frame1->expectOnce('setField', array(new SimpleByLabelOrName('a'), 'A'));
+
+ $frame2 = &new MockSimplePage();
+ $frame2->expectNever('setField');
+
+ $frameset = &new SimpleFrameset(new MockSimplePage());
+ $frameset->addFrame($frame1, 'A');
+ $frameset->addFrame($frame2, 'B');
+ $frameset->setFrameFocus('A');
+ $frameset->setField(new SimpleByLabelOrName('a'), 'A');
+ }
+
+ function testOnlyGettingFieldFromFocusedFrame() {
+ $frame1 = &new MockSimplePage();
+ $frame1->setReturnValue('getField', 'f', array(new SimpleByName('a')));
+
+ $frame2 = &new MockSimplePage();
+ $frame2->expectNever('getField');
+
+ $frameset = &new SimpleFrameset(new MockSimplePage());
+ $frameset->addFrame($frame1, 'A');
+ $frameset->addFrame($frame2, 'B');
+ $frameset->setFrameFocus('A');
+ $this->assertIdentical($frameset->getField(new SimpleByName('a')), 'f');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/http_test.php b/vendors/simpletest/test/http_test.php
new file mode 100644
index 000000000..d249850c8
--- /dev/null
+++ b/vendors/simpletest/test/http_test.php
@@ -0,0 +1,427 @@
+<?php
+// $Id: http_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../encoding.php');
+require_once(dirname(__FILE__) . '/../http.php');
+require_once(dirname(__FILE__) . '/../socket.php');
+require_once(dirname(__FILE__) . '/../cookies.php');
+Mock::generate('SimpleSocket');
+Mock::generate('SimpleCookieJar');
+Mock::generate('SimpleRoute');
+Mock::generatePartial('SimpleRoute', 'PartialSimpleRoute', array('_createSocket'));
+Mock::generatePartial(
+ 'SimpleProxyRoute',
+ 'PartialSimpleProxyRoute',
+ array('_createSocket'));
+
+class TestOfDirectRoute extends UnitTestCase {
+
+ function testDefaultGetRequest() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("GET /here.html HTTP/1.0\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Host: a.valid.host\r\n"));
+ $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n"));
+ $socket->expectCallCount('write', 3);
+
+ $route = &new PartialSimpleRoute();
+ $route->setReturnReference('_createSocket', $socket);
+ $route->SimpleRoute(new SimpleUrl('http://a.valid.host/here.html'));
+
+ $this->assertReference($route->createConnection('GET', 15), $socket);
+ }
+
+ function testDefaultPostRequest() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("POST /here.html HTTP/1.0\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Host: a.valid.host\r\n"));
+ $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n"));
+ $socket->expectCallCount('write', 3);
+
+ $route = &new PartialSimpleRoute();
+ $route->setReturnReference('_createSocket', $socket);
+ $route->SimpleRoute(new SimpleUrl('http://a.valid.host/here.html'));
+
+ $route->createConnection('POST', 15);
+ }
+
+ function testGetWithPort() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("GET /here.html HTTP/1.0\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Host: a.valid.host:81\r\n"));
+ $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n"));
+ $socket->expectCallCount('write', 3);
+
+ $route = &new PartialSimpleRoute();
+ $route->setReturnReference('_createSocket', $socket);
+ $route->SimpleRoute(new SimpleUrl('http://a.valid.host:81/here.html'));
+
+ $route->createConnection('GET', 15);
+ }
+
+ function testGetWithParameters() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("GET /here.html?a=1&b=2 HTTP/1.0\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Host: a.valid.host\r\n"));
+ $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n"));
+ $socket->expectCallCount('write', 3);
+
+ $route = &new PartialSimpleRoute();
+ $route->setReturnReference('_createSocket', $socket);
+ $route->SimpleRoute(new SimpleUrl('http://a.valid.host/here.html?a=1&b=2'));
+
+ $route->createConnection('GET', 15);
+ }
+}
+
+class TestOfProxyRoute extends UnitTestCase {
+
+ function testDefaultGet() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("GET http://a.valid.host/here.html HTTP/1.0\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Host: my-proxy:8080\r\n"));
+ $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n"));
+ $socket->expectCallCount('write', 3);
+
+ $route = &new PartialSimpleProxyRoute();
+ $route->setReturnReference('_createSocket', $socket);
+ $route->SimpleProxyRoute(
+ new SimpleUrl('http://a.valid.host/here.html'),
+ new SimpleUrl('http://my-proxy'));
+ $route->createConnection('GET', 15);
+ }
+
+ function testDefaultPost() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("POST http://a.valid.host/here.html HTTP/1.0\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Host: my-proxy:8080\r\n"));
+ $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n"));
+ $socket->expectCallCount('write', 3);
+
+ $route = &new PartialSimpleProxyRoute();
+ $route->setReturnReference('_createSocket', $socket);
+ $route->SimpleProxyRoute(
+ new SimpleUrl('http://a.valid.host/here.html'),
+ new SimpleUrl('http://my-proxy'));
+ $route->createConnection('POST', 15);
+ }
+
+ function testGetWithPort() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("GET http://a.valid.host:81/here.html HTTP/1.0\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Host: my-proxy:8081\r\n"));
+ $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n"));
+ $socket->expectCallCount('write', 3);
+
+ $route = &new PartialSimpleProxyRoute();
+ $route->setReturnReference('_createSocket', $socket);
+ $route->SimpleProxyRoute(
+ new SimpleUrl('http://a.valid.host:81/here.html'),
+ new SimpleUrl('http://my-proxy:8081'));
+ $route->createConnection('GET', 15);
+ }
+
+ function testGetWithParameters() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("GET http://a.valid.host/here.html?a=1&b=2 HTTP/1.0\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Host: my-proxy:8080\r\n"));
+ $socket->expectArgumentsAt(2, 'write', array("Connection: close\r\n"));
+ $socket->expectCallCount('write', 3);
+
+ $route = &new PartialSimpleProxyRoute();
+ $route->setReturnReference('_createSocket', $socket);
+ $route->SimpleProxyRoute(
+ new SimpleUrl('http://a.valid.host/here.html?a=1&b=2'),
+ new SimpleUrl('http://my-proxy'));
+ $route->createConnection('GET', 15);
+ }
+
+ function testGetWithAuthentication() {
+ $encoded = base64_encode('Me:Secret');
+
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("GET http://a.valid.host/here.html HTTP/1.0\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Host: my-proxy:8080\r\n"));
+ $socket->expectArgumentsAt(2, 'write', array("Proxy-Authorization: Basic $encoded\r\n"));
+ $socket->expectArgumentsAt(3, 'write', array("Connection: close\r\n"));
+ $socket->expectCallCount('write', 4);
+
+ $route = &new PartialSimpleProxyRoute();
+ $route->setReturnReference('_createSocket', $socket);
+ $route->SimpleProxyRoute(
+ new SimpleUrl('http://a.valid.host/here.html'),
+ new SimpleUrl('http://my-proxy'),
+ 'Me',
+ 'Secret');
+ $route->createConnection('GET', 15);
+ }
+}
+
+class TestOfHttpRequest extends UnitTestCase {
+
+ function testReadingBadConnection() {
+ $socket = &new MockSimpleSocket();
+
+ $route = &new MockSimpleRoute();
+ $route->setReturnReference('createConnection', $socket);
+
+ $request = &new SimpleHttpRequest($route, new SimpleGetEncoding());
+ $reponse = &$request->fetch(15);
+ $this->assertTrue($reponse->isError());
+ }
+
+ function testReadingGoodConnection() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectOnce('write', array("\r\n"));
+
+ $route = &new MockSimpleRoute();
+ $route->setReturnReference('createConnection', $socket);
+ $route->expectArguments('createConnection', array('GET', 15));
+
+ $request = &new SimpleHttpRequest($route, new SimpleGetEncoding());
+ $this->assertIsA($request->fetch(15), 'SimpleHttpResponse');
+ }
+
+ function testWritingAdditionalHeaders() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("My: stuff\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("\r\n"));
+ $socket->expectCallCount('write', 2);
+
+ $route = &new MockSimpleRoute();
+ $route->setReturnReference('createConnection', $socket);
+
+ $request = &new SimpleHttpRequest($route, new SimpleGetEncoding());
+ $request->addHeaderLine('My: stuff');
+ $request->fetch(15);
+ }
+
+ function testCookieWriting() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("Cookie: a=A\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("\r\n"));
+ $socket->expectCallCount('write', 2);
+
+ $route = &new MockSimpleRoute();
+ $route->setReturnReference('createConnection', $socket);
+
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'A');
+
+ $request = &new SimpleHttpRequest($route, new SimpleGetEncoding());
+ $request->readCookiesFromJar($jar, new SimpleUrl('/'));
+ $this->assertIsA($request->fetch(15), 'SimpleHttpResponse');
+ }
+
+ function testMultipleCookieWriting() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("Cookie: a=A;b=B\r\n"));
+
+ $route = &new MockSimpleRoute();
+ $route->setReturnReference('createConnection', $socket);
+
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'A');
+ $jar->setCookie('b', 'B');
+
+ $request = &new SimpleHttpRequest($route, new SimpleGetEncoding());
+ $request->readCookiesFromJar($jar, new SimpleUrl('/'));
+ $request->fetch(15);
+ }
+}
+
+class TestOfHttpPostRequest extends UnitTestCase {
+
+ function testReadingBadConnectionCausesErrorBecauseOfDeadSocket() {
+ $socket = &new MockSimpleSocket();
+
+ $route = &new MockSimpleRoute();
+ $route->setReturnReference('createConnection', $socket);
+
+ $request = &new SimpleHttpRequest($route, new SimplePostEncoding());
+ $reponse = &$request->fetch(15);
+ $this->assertTrue($reponse->isError());
+ }
+
+ function testReadingGoodConnection() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("Content-Length: 0\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Content-Type: application/x-www-form-urlencoded\r\n"));
+ $socket->expectArgumentsAt(2, 'write', array("\r\n"));
+ $socket->expectArgumentsAt(3, 'write', array(""));
+
+ $route = &new MockSimpleRoute();
+ $route->setReturnReference('createConnection', $socket);
+ $route->expectArguments('createConnection', array('POST', 15));
+
+ $request = &new SimpleHttpRequest($route, new SimplePostEncoding());
+ $this->assertIsA($request->fetch(15), 'SimpleHttpResponse');
+ }
+
+ function testContentHeadersCalculated() {
+ $socket = &new MockSimpleSocket();
+ $socket->expectArgumentsAt(0, 'write', array("Content-Length: 3\r\n"));
+ $socket->expectArgumentsAt(1, 'write', array("Content-Type: application/x-www-form-urlencoded\r\n"));
+ $socket->expectArgumentsAt(2, 'write', array("\r\n"));
+ $socket->expectArgumentsAt(3, 'write', array("a=A"));
+
+ $route = &new MockSimpleRoute();
+ $route->setReturnReference('createConnection', $socket);
+ $route->expectArguments('createConnection', array('POST', 15));
+
+ $request = &new SimpleHttpRequest(
+ $route,
+ new SimplePostEncoding(array('a' => 'A')));
+ $this->assertIsA($request->fetch(15), 'SimpleHttpResponse');
+ }
+}
+
+class TestOfHttpHeaders extends UnitTestCase {
+
+ function testParseBasicHeaders() {
+ $headers = new SimpleHttpHeaders(
+ "HTTP/1.1 200 OK\r\n" .
+ "Date: Mon, 18 Nov 2002 15:50:29 GMT\r\n" .
+ "Content-Type: text/plain\r\n" .
+ "Server: Apache/1.3.24 (Win32) PHP/4.2.3\r\n" .
+ "Connection: close");
+ $this->assertIdentical($headers->getHttpVersion(), "1.1");
+ $this->assertIdentical($headers->getResponseCode(), 200);
+ $this->assertEqual($headers->getMimeType(), "text/plain");
+ }
+
+ function testNonStandardResponseHeader() {
+ $headers = new SimpleHttpHeaders(
+ "HTTP/1.1 302 (HTTP-Version SP Status-Code CRLF)\r\n" .
+ "Connection: close");
+ $this->assertIdentical($headers->getResponseCode(), 302);
+ }
+
+ function testCanParseMultipleCookies() {
+ $jar = &new MockSimpleCookieJar();
+ $jar->expectAt(0, 'setCookie', array('a', 'aaa', 'host', '/here/', 'Wed, 25 Dec 2002 04:24:20 GMT'));
+ $jar->expectAt(1, 'setCookie', array('b', 'bbb', 'host', '/', false));
+
+ $headers = new SimpleHttpHeaders(
+ "HTTP/1.1 200 OK\r\n" .
+ "Date: Mon, 18 Nov 2002 15:50:29 GMT\r\n" .
+ "Content-Type: text/plain\r\n" .
+ "Server: Apache/1.3.24 (Win32) PHP/4.2.3\r\n" .
+ "Set-Cookie: a=aaa; expires=Wed, 25-Dec-02 04:24:20 GMT; path=/here/\r\n" .
+ "Set-Cookie: b=bbb\r\n" .
+ "Connection: close");
+ $headers->writeCookiesToJar($jar, new SimpleUrl('http://host'));
+ }
+
+ function testCanRecogniseRedirect() {
+ $headers = new SimpleHttpHeaders("HTTP/1.1 301 OK\r\n" .
+ "Content-Type: text/plain\r\n" .
+ "Content-Length: 0\r\n" .
+ "Location: http://www.somewhere-else.com/\r\n" .
+ "Connection: close");
+ $this->assertIdentical($headers->getResponseCode(), 301);
+ $this->assertEqual($headers->getLocation(), "http://www.somewhere-else.com/");
+ $this->assertTrue($headers->isRedirect());
+ }
+
+ function testCanParseChallenge() {
+ $headers = new SimpleHttpHeaders("HTTP/1.1 401 Authorization required\r\n" .
+ "Content-Type: text/plain\r\n" .
+ "Connection: close\r\n" .
+ "WWW-Authenticate: Basic realm=\"Somewhere\"");
+ $this->assertEqual($headers->getAuthentication(), 'Basic');
+ $this->assertEqual($headers->getRealm(), 'Somewhere');
+ $this->assertTrue($headers->isChallenge());
+ }
+}
+
+class TestOfHttpResponse extends UnitTestCase {
+
+ function testBadRequest() {
+ $socket = &new MockSimpleSocket();
+ $socket->setReturnValue('getSent', '');
+
+ $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding());
+ $this->assertTrue($response->isError());
+ $this->assertPattern('/Nothing fetched/', $response->getError());
+ $this->assertIdentical($response->getContent(), false);
+ $this->assertIdentical($response->getSent(), '');
+ }
+
+ function testBadSocketDuringResponse() {
+ $socket = &new MockSimpleSocket();
+ $socket->setReturnValueAt(0, "read", "HTTP/1.1 200 OK\r\n");
+ $socket->setReturnValueAt(1, "read", "Date: Mon, 18 Nov 2002 15:50:29 GMT\r\n");
+ $socket->setReturnValue("read", "");
+ $socket->setReturnValue('getSent', 'HTTP/1.1 ...');
+
+ $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding());
+ $this->assertTrue($response->isError());
+ $this->assertEqual($response->getContent(), '');
+ $this->assertEqual($response->getSent(), 'HTTP/1.1 ...');
+ }
+
+ function testIncompleteHeader() {
+ $socket = &new MockSimpleSocket();
+ $socket->setReturnValueAt(0, "read", "HTTP/1.1 200 OK\r\n");
+ $socket->setReturnValueAt(1, "read", "Date: Mon, 18 Nov 2002 15:50:29 GMT\r\n");
+ $socket->setReturnValueAt(2, "read", "Content-Type: text/plain\r\n");
+ $socket->setReturnValue("read", "");
+
+ $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding());
+ $this->assertTrue($response->isError());
+ $this->assertEqual($response->getContent(), "");
+ }
+
+ function testParseOfResponseHeadersWhenChunked() {
+ $socket = &new MockSimpleSocket();
+ $socket->setReturnValueAt(0, "read", "HTTP/1.1 200 OK\r\nDate: Mon, 18 Nov 2002 15:50:29 GMT\r\n");
+ $socket->setReturnValueAt(1, "read", "Content-Type: text/plain\r\n");
+ $socket->setReturnValueAt(2, "read", "Server: Apache/1.3.24 (Win32) PHP/4.2.3\r\nConne");
+ $socket->setReturnValueAt(3, "read", "ction: close\r\n\r\nthis is a test file\n");
+ $socket->setReturnValueAt(4, "read", "with two lines in it\n");
+ $socket->setReturnValue("read", "");
+
+ $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding());
+ $this->assertFalse($response->isError());
+ $this->assertEqual(
+ $response->getContent(),
+ "this is a test file\nwith two lines in it\n");
+ $headers = $response->getHeaders();
+ $this->assertIdentical($headers->getHttpVersion(), "1.1");
+ $this->assertIdentical($headers->getResponseCode(), 200);
+ $this->assertEqual($headers->getMimeType(), "text/plain");
+ $this->assertFalse($headers->isRedirect());
+ $this->assertFalse($headers->getLocation());
+ }
+
+ function testRedirect() {
+ $socket = &new MockSimpleSocket();
+ $socket->setReturnValueAt(0, "read", "HTTP/1.1 301 OK\r\n");
+ $socket->setReturnValueAt(1, "read", "Content-Type: text/plain\r\n");
+ $socket->setReturnValueAt(2, "read", "Location: http://www.somewhere-else.com/\r\n");
+ $socket->setReturnValueAt(3, "read", "Connection: close\r\n");
+ $socket->setReturnValueAt(4, "read", "\r\n");
+ $socket->setReturnValue("read", "");
+
+ $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding());
+ $headers = $response->getHeaders();
+ $this->assertTrue($headers->isRedirect());
+ $this->assertEqual($headers->getLocation(), "http://www.somewhere-else.com/");
+ }
+
+ function testRedirectWithPort() {
+ $socket = &new MockSimpleSocket();
+ $socket->setReturnValueAt(0, "read", "HTTP/1.1 301 OK\r\n");
+ $socket->setReturnValueAt(1, "read", "Content-Type: text/plain\r\n");
+ $socket->setReturnValueAt(2, "read", "Location: http://www.somewhere-else.com:80/\r\n");
+ $socket->setReturnValueAt(3, "read", "Connection: close\r\n");
+ $socket->setReturnValueAt(4, "read", "\r\n");
+ $socket->setReturnValue("read", "");
+
+ $response = &new SimpleHttpResponse($socket, new SimpleUrl('here'), new SimpleGetEncoding());
+ $headers = $response->getHeaders();
+ $this->assertTrue($headers->isRedirect());
+ $this->assertEqual($headers->getLocation(), "http://www.somewhere-else.com:80/");
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/interfaces_test.php b/vendors/simpletest/test/interfaces_test.php
new file mode 100644
index 000000000..b6980edb1
--- /dev/null
+++ b/vendors/simpletest/test/interfaces_test.php
@@ -0,0 +1,137 @@
+<?php
+// $Id: interfaces_test.php 1699 2008-03-24 16:01:29Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+if (function_exists('spl_classes')) {
+ include(dirname(__FILE__) . '/support/spl_examples.php');
+}
+
+interface DummyInterface {
+ function aMethod();
+ function anotherMethod($a);
+ function &referenceMethod(&$a);
+}
+
+Mock::generate('DummyInterface');
+Mock::generatePartial('DummyInterface', 'PartialDummyInterface', array());
+
+class TestOfMockInterfaces extends UnitTestCase {
+
+ function testCanMockAnInterface() {
+ $mock = new MockDummyInterface();
+ $this->assertIsA($mock, 'SimpleMock');
+ $this->assertIsA($mock, 'MockDummyInterface');
+ $this->assertTrue(method_exists($mock, 'aMethod'));
+ $this->assertTrue(method_exists($mock, 'anotherMethod'));
+ $this->assertNull($mock->aMethod());
+ }
+
+ function testMockedInterfaceExpectsParameters() {
+ $mock = new MockDummyInterface();
+ $mock->anotherMethod();
+ $this->assertError();
+ }
+
+ function testCannotPartiallyMockAnInterface() {
+ $this->assertFalse(class_exists('PartialDummyInterface'));
+ }
+}
+
+class TestOfSpl extends UnitTestCase {
+
+ function skip() {
+ $this->skipUnless(function_exists('spl_classes'), 'No SPL module loaded');
+ }
+
+ function testCanMockAllSplClasses() {
+ if (! function_exists('spl_classes')) {
+ return;
+ }
+ foreach(spl_classes() as $class) {
+ if ($class == 'SplHeap') {
+ continue;
+ }
+ $mock_class = "Mock$class";
+ Mock::generate($class);
+ $this->assertIsA(new $mock_class(), $mock_class);
+ }
+ }
+
+ function testExtensionOfCommonSplClasses() {
+ Mock::generate('IteratorImplementation');
+ $this->assertIsA(
+ new IteratorImplementation(),
+ 'IteratorImplementation');
+ Mock::generate('IteratorAggregateImplementation');
+ $this->assertIsA(
+ new IteratorAggregateImplementation(),
+ 'IteratorAggregateImplementation');
+ }
+}
+
+class WithHint {
+ function hinted(DummyInterface $object) { }
+}
+
+class ImplementsDummy implements DummyInterface {
+ function aMethod() { }
+ function anotherMethod($a) { }
+ function &referenceMethod(&$a) { }
+ function extraMethod($a = false) { }
+}
+Mock::generate('ImplementsDummy');
+
+class TestOfImplementations extends UnitTestCase {
+
+ function testMockedInterfaceCanPassThroughTypeHint() {
+ $mock = new MockDummyInterface();
+ $hinter = new WithHint();
+ $hinter->hinted($mock);
+ }
+
+ function testImplementedInterfacesAreCarried() {
+ $mock = new MockImplementsDummy();
+ $hinter = new WithHint();
+ $hinter->hinted($mock);
+ }
+
+ function testNoSpuriousWarningsWhenSkippingDefaultedParameter() {
+ $mock = new MockImplementsDummy();
+ $mock->extraMethod();
+ }
+}
+
+interface SampleClassWithConstruct {
+ function __construct($something);
+}
+
+class TestOfInterfaceMocksWithConstruct extends UnitTestCase {
+ function testBasicConstructOfAnInterface() {
+ Mock::generate('SampleClassWithConstruct');
+ $this->assertNoErrors();
+ }
+}
+
+interface SampleInterfaceWithHintInSignature {
+ function method(array $hinted);
+}
+
+class TestOfInterfaceMocksWithHintInSignature extends UnitTestCase {
+ function testBasicConstructOfAnInterfaceWithHintInSignature() {
+ Mock::generate('SampleInterfaceWithHintInSignature');
+ $this->assertNoErrors();
+ $mock = new MockSampleInterfaceWithHintInSignature();
+ $this->assertIsA($mock, 'SampleInterfaceWithHintInSignature');
+ }
+}
+
+interface SampleInterfaceWithClone {
+ function __clone();
+}
+
+class TestOfSampleInterfaceWithClone extends UnitTestCase {
+ function testCanMockWithoutErrors() {
+ Mock::generate('SampleInterfaceWithClone');
+ $this->assertNoErrors();
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/live_test.php b/vendors/simpletest/test/live_test.php
new file mode 100644
index 000000000..b294030e1
--- /dev/null
+++ b/vendors/simpletest/test/live_test.php
@@ -0,0 +1,47 @@
+<?php
+// $Id: live_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../socket.php');
+require_once(dirname(__FILE__) . '/../http.php');
+require_once(dirname(__FILE__) . '/../compatibility.php');
+
+if (SimpleTest::getDefaultProxy()) {
+ SimpleTest::ignore('LiveHttpTestCase');
+}
+
+class LiveHttpTestCase extends UnitTestCase {
+
+ function testBadSocket() {
+ $socket = &new SimpleSocket('bad_url', 111, 5);
+ $this->assertTrue($socket->isError());
+ $this->assertPattern(
+ '/Cannot open \\[bad_url:111\\] with \\[/',
+ $socket->getError());
+ $this->assertFalse($socket->isOpen());
+ $this->assertFalse($socket->write('A message'));
+ }
+
+ function testSocketClosure() {
+ $socket = &new SimpleSocket('www.lastcraft.com', 80, 15, 8);
+ $this->assertTrue($socket->isOpen());
+ $this->assertTrue($socket->write("GET /test/network_confirm.php HTTP/1.0\r\n"));
+ $socket->write("Host: www.lastcraft.com\r\n");
+ $socket->write("Connection: close\r\n\r\n");
+ $this->assertEqual($socket->read(), "HTTP/1.1");
+ $socket->close();
+ $this->assertIdentical($socket->read(), false);
+ }
+
+ function testRecordOfSentCharacters() {
+ $socket = &new SimpleSocket('www.lastcraft.com', 80, 15);
+ $this->assertTrue($socket->write("GET /test/network_confirm.php HTTP/1.0\r\n"));
+ $socket->write("Host: www.lastcraft.com\r\n");
+ $socket->write("Connection: close\r\n\r\n");
+ $socket->close();
+ $this->assertEqual($socket->getSent(),
+ "GET /test/network_confirm.php HTTP/1.0\r\n" .
+ "Host: www.lastcraft.com\r\n" .
+ "Connection: close\r\n\r\n");
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/mock_objects_test.php b/vendors/simpletest/test/mock_objects_test.php
new file mode 100644
index 000000000..a208ff727
--- /dev/null
+++ b/vendors/simpletest/test/mock_objects_test.php
@@ -0,0 +1,994 @@
+<?php
+// $Id: mock_objects_test.php 1700 2008-03-24 16:17:48Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../expectation.php');
+require_once(dirname(__FILE__) . '/../mock_objects.php');
+
+class TestOfAnythingExpectation extends UnitTestCase {
+
+ function testSimpleInteger() {
+ $expectation = new AnythingExpectation();
+ $this->assertTrue($expectation->test(33));
+ $this->assertTrue($expectation->test(false));
+ $this->assertTrue($expectation->test(null));
+ }
+}
+
+class TestOfParametersExpectation extends UnitTestCase {
+
+ function testEmptyMatch() {
+ $expectation = new ParametersExpectation(array());
+ $this->assertTrue($expectation->test(array()));
+ $this->assertFalse($expectation->test(array(33)));
+ }
+
+ function testSingleMatch() {
+ $expectation = new ParametersExpectation(array(0));
+ $this->assertFalse($expectation->test(array(1)));
+ $this->assertTrue($expectation->test(array(0)));
+ }
+
+ function testAnyMatch() {
+ $expectation = new ParametersExpectation(false);
+ $this->assertTrue($expectation->test(array()));
+ $this->assertTrue($expectation->test(array(1, 2)));
+ }
+
+ function testMissingParameter() {
+ $expectation = new ParametersExpectation(array(0));
+ $this->assertFalse($expectation->test(array()));
+ }
+
+ function testNullParameter() {
+ $expectation = new ParametersExpectation(array(null));
+ $this->assertTrue($expectation->test(array(null)));
+ $this->assertFalse($expectation->test(array()));
+ }
+
+ function testAnythingExpectations() {
+ $expectation = new ParametersExpectation(array(new AnythingExpectation()));
+ $this->assertFalse($expectation->test(array()));
+ $this->assertIdentical($expectation->test(array(null)), true);
+ $this->assertIdentical($expectation->test(array(13)), true);
+ }
+
+ function testOtherExpectations() {
+ $expectation = new ParametersExpectation(
+ array(new PatternExpectation('/hello/i')));
+ $this->assertFalse($expectation->test(array('Goodbye')));
+ $this->assertTrue($expectation->test(array('hello')));
+ $this->assertTrue($expectation->test(array('Hello')));
+ }
+
+ function testIdentityOnly() {
+ $expectation = new ParametersExpectation(array("0"));
+ $this->assertFalse($expectation->test(array(0)));
+ $this->assertTrue($expectation->test(array("0")));
+ }
+
+ function testLongList() {
+ $expectation = new ParametersExpectation(
+ array("0", 0, new AnythingExpectation(), false));
+ $this->assertTrue($expectation->test(array("0", 0, 37, false)));
+ $this->assertFalse($expectation->test(array("0", 0, 37, true)));
+ $this->assertFalse($expectation->test(array("0", 0, 37)));
+ }
+}
+
+class TestOfSimpleSignatureMap extends UnitTestCase {
+
+ function testEmpty() {
+ $map = new SimpleSignatureMap();
+ $this->assertFalse($map->isMatch("any", array()));
+ $this->assertNull($map->findFirstAction("any", array()));
+ }
+
+ function testExactReference() {
+ $map = new SimpleSignatureMap();
+ $ref = "Fred";
+ $map->add(array(0), $ref);
+ $this->assertEqual($map->findFirstAction(array(0)), "Fred");
+ $ref2 = &$map->findFirstAction(array(0));
+ $this->assertReference($ref2, $ref);
+ }
+
+ function testDifferentCallSignaturesCanHaveDifferentReferences() {
+ $map = new SimpleSignatureMap();
+ $fred = 'Fred';
+ $jim = 'jim';
+ $map->add(array(0), $fred);
+ $map->add(array('0'), $jim);
+ $this->assertReference($fred, $map->findFirstAction(array(0)));
+ $this->assertReference($jim, $map->findFirstAction(array('0')));
+ }
+
+ function testWildcard() {
+ $fred = 'Fred';
+ $map = new SimpleSignatureMap();
+ $map->add(array(new AnythingExpectation(), 1, 3), $fred);
+ $this->assertTrue($map->isMatch(array(2, 1, 3)));
+ $this->assertReference($map->findFirstAction(array(2, 1, 3)), $fred);
+ }
+
+ function testAllWildcard() {
+ $fred = 'Fred';
+ $map = new SimpleSignatureMap();
+ $this->assertFalse($map->isMatch(array(2, 1, 3)));
+ $map->add('', $fred);
+ $this->assertTrue($map->isMatch(array(2, 1, 3)));
+ $this->assertReference($map->findFirstAction(array(2, 1, 3)), $fred);
+ }
+
+ function testOrdering() {
+ $map = new SimpleSignatureMap();
+ $map->add(array(1, 2), new SimpleByValue("1, 2"));
+ $map->add(array(1, 3), new SimpleByValue("1, 3"));
+ $map->add(array(1), new SimpleByValue("1"));
+ $map->add(array(1, 4), new SimpleByValue("1, 4"));
+ $map->add(array(new AnythingExpectation()), new SimpleByValue("Any"));
+ $map->add(array(2), new SimpleByValue("2"));
+ $map->add("", new SimpleByValue("Default"));
+ $map->add(array(), new SimpleByValue("None"));
+ $this->assertEqual($map->findFirstAction(array(1, 2)), new SimpleByValue("1, 2"));
+ $this->assertEqual($map->findFirstAction(array(1, 3)), new SimpleByValue("1, 3"));
+ $this->assertEqual($map->findFirstAction(array(1, 4)), new SimpleByValue("1, 4"));
+ $this->assertEqual($map->findFirstAction(array(1)), new SimpleByValue("1"));
+ $this->assertEqual($map->findFirstAction(array(2)), new SimpleByValue("Any"));
+ $this->assertEqual($map->findFirstAction(array(3)), new SimpleByValue("Any"));
+ $this->assertEqual($map->findFirstAction(array()), new SimpleByValue("Default"));
+ }
+}
+
+class TestOfCallSchedule extends UnitTestCase {
+ function testCanBeSetToAlwaysReturnTheSameReference() {
+ $a = 5;
+ $schedule = &new SimpleCallSchedule();
+ $schedule->register('aMethod', false, new SimpleByReference($a));
+ $this->assertReference($schedule->respond(0, 'aMethod', array()), $a);
+ $this->assertReference($schedule->respond(1, 'aMethod', array()), $a);
+ }
+
+ function testSpecificSignaturesOverrideTheAlwaysCase() {
+ $any = 'any';
+ $one = 'two';
+ $schedule = &new SimpleCallSchedule();
+ $schedule->register('aMethod', array(1), new SimpleByReference($one));
+ $schedule->register('aMethod', false, new SimpleByReference($any));
+ $this->assertReference($schedule->respond(0, 'aMethod', array(2)), $any);
+ $this->assertReference($schedule->respond(0, 'aMethod', array(1)), $one);
+ }
+
+ function testReturnsCanBeSetOverTime() {
+ $one = 'one';
+ $two = 'two';
+ $schedule = &new SimpleCallSchedule();
+ $schedule->registerAt(0, 'aMethod', false, new SimpleByReference($one));
+ $schedule->registerAt(1, 'aMethod', false, new SimpleByReference($two));
+ $this->assertReference($schedule->respond(0, 'aMethod', array()), $one);
+ $this->assertReference($schedule->respond(1, 'aMethod', array()), $two);
+ }
+
+ function testReturnsOverTimecanBeAlteredByTheArguments() {
+ $one = '1';
+ $two = '2';
+ $two_a = '2a';
+ $schedule = &new SimpleCallSchedule();
+ $schedule->registerAt(0, 'aMethod', false, new SimpleByReference($one));
+ $schedule->registerAt(1, 'aMethod', array('a'), new SimpleByReference($two_a));
+ $schedule->registerAt(1, 'aMethod', false, new SimpleByReference($two));
+ $this->assertReference($schedule->respond(0, 'aMethod', array()), $one);
+ $this->assertReference($schedule->respond(1, 'aMethod', array()), $two);
+ $this->assertReference($schedule->respond(1, 'aMethod', array('a')), $two_a);
+ }
+
+ function testCanReturnByValue() {
+ $a = 5;
+ $schedule = &new SimpleCallSchedule();
+ $schedule->register('aMethod', false, new SimpleByValue($a));
+ $this->assertClone($schedule->respond(0, 'aMethod', array()), $a);
+ }
+
+ function testCanThrowException() {
+ if (version_compare(phpversion(), '5', '>=')) {
+ $schedule = &new SimpleCallSchedule();
+ $schedule->register('aMethod', false, new SimpleThrower(new Exception('Ouch')));
+ $this->expectException(new Exception('Ouch'));
+ $schedule->respond(0, 'aMethod', array());
+ }
+ }
+
+ function testCanEmitError() {
+ $schedule = &new SimpleCallSchedule();
+ $schedule->register('aMethod', false, new SimpleErrorThrower('Ouch', E_USER_WARNING));
+ $this->expectError('Ouch');
+ $schedule->respond(0, 'aMethod', array());
+ }
+}
+
+class Dummy {
+ function Dummy() {
+ }
+
+ function aMethod() {
+ return true;
+ }
+
+ function anotherMethod() {
+ return true;
+ }
+}
+Mock::generate('Dummy');
+Mock::generate('Dummy', 'AnotherMockDummy');
+Mock::generate('Dummy', 'MockDummyWithExtraMethods', array('extraMethod'));
+
+class TestOfMockGeneration extends UnitTestCase {
+
+ function testCloning() {
+ $mock = &new MockDummy();
+ $this->assertTrue(method_exists($mock, "aMethod"));
+ $this->assertNull($mock->aMethod());
+ }
+
+ function testCloningWithExtraMethod() {
+ $mock = &new MockDummyWithExtraMethods();
+ $this->assertTrue(method_exists($mock, "extraMethod"));
+ }
+
+ function testCloningWithChosenClassName() {
+ $mock = &new AnotherMockDummy();
+ $this->assertTrue(method_exists($mock, "aMethod"));
+ }
+}
+
+class TestOfMockReturns extends UnitTestCase {
+
+ function testDefaultReturn() {
+ $mock = &new MockDummy();
+ $mock->setReturnValue("aMethod", "aaa");
+ $this->assertIdentical($mock->aMethod(), "aaa");
+ $this->assertIdentical($mock->aMethod(), "aaa");
+ }
+
+ function testParameteredReturn() {
+ $mock = &new MockDummy();
+ $mock->setReturnValue('aMethod', 'aaa', array(1, 2, 3));
+ $this->assertNull($mock->aMethod());
+ $this->assertIdentical($mock->aMethod(1, 2, 3), 'aaa');
+ }
+
+ function testReferenceReturned() {
+ $mock = &new MockDummy();
+ $object = new Dummy();
+ $mock->setReturnReference('aMethod', $object, array(1, 2, 3));
+ $this->assertReference($zref = &$mock->aMethod(1, 2, 3), $object);
+ }
+
+ function testPatternMatchReturn() {
+ $mock = &new MockDummy();
+ $mock->setReturnValue(
+ "aMethod",
+ "aaa",
+ array(new PatternExpectation('/hello/i')));
+ $this->assertIdentical($mock->aMethod('Hello'), "aaa");
+ $this->assertNull($mock->aMethod('Goodbye'));
+ }
+
+ function testMultipleMethods() {
+ $mock = &new MockDummy();
+ $mock->setReturnValue("aMethod", 100, array(1));
+ $mock->setReturnValue("aMethod", 200, array(2));
+ $mock->setReturnValue("anotherMethod", 10, array(1));
+ $mock->setReturnValue("anotherMethod", 20, array(2));
+ $this->assertIdentical($mock->aMethod(1), 100);
+ $this->assertIdentical($mock->anotherMethod(1), 10);
+ $this->assertIdentical($mock->aMethod(2), 200);
+ $this->assertIdentical($mock->anotherMethod(2), 20);
+ }
+
+ function testReturnSequence() {
+ $mock = &new MockDummy();
+ $mock->setReturnValueAt(0, "aMethod", "aaa");
+ $mock->setReturnValueAt(1, "aMethod", "bbb");
+ $mock->setReturnValueAt(3, "aMethod", "ddd");
+ $this->assertIdentical($mock->aMethod(), "aaa");
+ $this->assertIdentical($mock->aMethod(), "bbb");
+ $this->assertNull($mock->aMethod());
+ $this->assertIdentical($mock->aMethod(), "ddd");
+ }
+
+ function testReturnReferenceSequence() {
+ $mock = &new MockDummy();
+ $object = new Dummy();
+ $mock->setReturnReferenceAt(1, "aMethod", $object);
+ $this->assertNull($mock->aMethod());
+ $this->assertReference($zref =& $mock->aMethod(), $object);
+ $this->assertNull($mock->aMethod());
+ }
+
+ function testComplicatedReturnSequence() {
+ $mock = &new MockDummy();
+ $object = new Dummy();
+ $mock->setReturnValueAt(1, "aMethod", "aaa", array("a"));
+ $mock->setReturnValueAt(1, "aMethod", "bbb");
+ $mock->setReturnReferenceAt(2, "aMethod", $object, array('*', 2));
+ $mock->setReturnValueAt(2, "aMethod", "value", array('*', 3));
+ $mock->setReturnValue("aMethod", 3, array(3));
+ $this->assertNull($mock->aMethod());
+ $this->assertEqual($mock->aMethod("a"), "aaa");
+ $this->assertReference($zref =& $mock->aMethod(1, 2), $object);
+ $this->assertEqual($mock->aMethod(3), 3);
+ $this->assertNull($mock->aMethod());
+ }
+
+ function testMultipleMethodSequences() {
+ $mock = &new MockDummy();
+ $mock->setReturnValueAt(0, "aMethod", "aaa");
+ $mock->setReturnValueAt(1, "aMethod", "bbb");
+ $mock->setReturnValueAt(0, "anotherMethod", "ccc");
+ $mock->setReturnValueAt(1, "anotherMethod", "ddd");
+ $this->assertIdentical($mock->aMethod(), "aaa");
+ $this->assertIdentical($mock->anotherMethod(), "ccc");
+ $this->assertIdentical($mock->aMethod(), "bbb");
+ $this->assertIdentical($mock->anotherMethod(), "ddd");
+ }
+
+ function testSequenceFallback() {
+ $mock = &new MockDummy();
+ $mock->setReturnValueAt(0, "aMethod", "aaa", array('a'));
+ $mock->setReturnValueAt(1, "aMethod", "bbb", array('a'));
+ $mock->setReturnValue("aMethod", "AAA");
+ $this->assertIdentical($mock->aMethod('a'), "aaa");
+ $this->assertIdentical($mock->aMethod('b'), "AAA");
+ }
+
+ function testMethodInterference() {
+ $mock = &new MockDummy();
+ $mock->setReturnValueAt(0, "anotherMethod", "aaa");
+ $mock->setReturnValue("aMethod", "AAA");
+ $this->assertIdentical($mock->aMethod(), "AAA");
+ $this->assertIdentical($mock->anotherMethod(), "aaa");
+ }
+}
+
+class TestOfMockExpectationsThatPass extends UnitTestCase {
+
+ function testAnyArgument() {
+ $mock = &new MockDummy();
+ $mock->expect('aMethod', array('*'));
+ $mock->aMethod(1);
+ $mock->aMethod('hello');
+ }
+
+ function testAnyTwoArguments() {
+ $mock = &new MockDummy();
+ $mock->expect('aMethod', array('*', '*'));
+ $mock->aMethod(1, 2);
+ }
+
+ function testSpecificArgument() {
+ $mock = &new MockDummy();
+ $mock->expect('aMethod', array(1));
+ $mock->aMethod(1);
+ }
+
+ function testExpectation() {
+ $mock = &new MockDummy();
+ $mock->expect('aMethod', array(new IsAExpectation('Dummy')));
+ $mock->aMethod(new Dummy());
+ }
+
+ function testArgumentsInSequence() {
+ $mock = &new MockDummy();
+ $mock->expectAt(0, 'aMethod', array(1, 2));
+ $mock->expectAt(1, 'aMethod', array(3, 4));
+ $mock->aMethod(1, 2);
+ $mock->aMethod(3, 4);
+ }
+
+ function testAtLeastOnceSatisfiedByOneCall() {
+ $mock = &new MockDummy();
+ $mock->expectAtLeastOnce('aMethod');
+ $mock->aMethod();
+ }
+
+ function testAtLeastOnceSatisfiedByTwoCalls() {
+ $mock = &new MockDummy();
+ $mock->expectAtLeastOnce('aMethod');
+ $mock->aMethod();
+ $mock->aMethod();
+ }
+
+ function testOnceSatisfiedByOneCall() {
+ $mock = &new MockDummy();
+ $mock->expectOnce('aMethod');
+ $mock->aMethod();
+ }
+
+ function testMinimumCallsSatisfiedByEnoughCalls() {
+ $mock = &new MockDummy();
+ $mock->expectMinimumCallCount('aMethod', 1);
+ $mock->aMethod();
+ }
+
+ function testMinimumCallsSatisfiedByTooManyCalls() {
+ $mock = &new MockDummy();
+ $mock->expectMinimumCallCount('aMethod', 3);
+ $mock->aMethod();
+ $mock->aMethod();
+ $mock->aMethod();
+ $mock->aMethod();
+ }
+
+ function testMaximumCallsSatisfiedByEnoughCalls() {
+ $mock = &new MockDummy();
+ $mock->expectMaximumCallCount('aMethod', 1);
+ $mock->aMethod();
+ }
+
+ function testMaximumCallsSatisfiedByNoCalls() {
+ $mock = &new MockDummy();
+ $mock->expectMaximumCallCount('aMethod', 1);
+ }
+}
+
+class MockWithInjectedTestCase extends SimpleMock {
+ function &_getCurrentTestCase() {
+ $context = &SimpleTest::getContext();
+ $test = &$context->getTest();
+ return $test->getMockedTest();
+ }
+}
+SimpleTest::setMockBaseClass('MockWithInjectedTestCase');
+Mock::generate('Dummy', 'MockDummyWithInjectedTestCase');
+SimpleTest::setMockBaseClass('SimpleMock');
+Mock::generate('SimpleTestCase');
+
+class LikeExpectation extends IdenticalExpectation {
+ function LikeExpectation($expectation) {
+ $expectation->_message = '';
+ $this->IdenticalExpectation($expectation);
+ }
+
+ function test($compare) {
+ $compare->_message = '';
+ return parent::test($compare);
+ }
+
+ function testMessage($compare) {
+ $compare->_message = '';
+ return parent::testMessage($compare);
+ }
+}
+
+class TestOfMockExpectations extends UnitTestCase {
+ var $test;
+
+ function setUp() {
+ $this->test = &new MockSimpleTestCase();
+ }
+
+ function &getMockedTest() {
+ return $this->test;
+ }
+
+ function testSettingExpectationOnNonMethodThrowsError() {
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expectMaximumCallCount('aMissingMethod', 2);
+ $this->assertError();
+ }
+
+ function testMaxCallsDetectsOverrun() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new MaximumCallCountExpectation('aMethod', 2)),
+ 3));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expectMaximumCallCount('aMethod', 2);
+ $mock->aMethod();
+ $mock->aMethod();
+ $mock->aMethod();
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testTallyOnMaxCallsSendsPassOnUnderrun() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new MaximumCallCountExpectation('aMethod', 2)),
+ 2));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expectMaximumCallCount("aMethod", 2);
+ $mock->aMethod();
+ $mock->aMethod();
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testExpectNeverDetectsOverrun() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new MaximumCallCountExpectation('aMethod', 0)),
+ 1));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expectNever('aMethod');
+ $mock->aMethod();
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testTallyOnExpectNeverStillSendsPassOnUnderrun() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new MaximumCallCountExpectation('aMethod', 0)),
+ 0));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expectNever('aMethod');
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testMinCalls() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new MinimumCallCountExpectation('aMethod', 2)),
+ 2));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expectMinimumCallCount('aMethod', 2);
+ $mock->aMethod();
+ $mock->aMethod();
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testFailedNever() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new MaximumCallCountExpectation('aMethod', 0)),
+ 1));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expectNever('aMethod');
+ $mock->aMethod();
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testUnderOnce() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new CallCountExpectation('aMethod', 1)),
+ 0));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expectOnce('aMethod');
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testOverOnce() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new CallCountExpectation('aMethod', 1)),
+ 2));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expectOnce('aMethod');
+ $mock->aMethod();
+ $mock->aMethod();
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testUnderAtLeastOnce() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new MinimumCallCountExpectation('aMethod', 1)),
+ 0));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expectAtLeastOnce("aMethod");
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testZeroArguments() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new ParametersExpectation(array())),
+ array(),
+ '*'));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expect("aMethod", array());
+ $mock->aMethod();
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testExpectedArguments() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new ParametersExpectation(array(1, 2, 3))),
+ array(1, 2, 3),
+ '*'));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expect('aMethod', array(1, 2, 3));
+ $mock->aMethod(1, 2, 3);
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testFailedArguments() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new ParametersExpectation(array('this'))),
+ array('that'),
+ '*'));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expect('aMethod', array('this'));
+ $mock->aMethod('that');
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testWildcardsAreTranslatedToAnythingExpectations() {
+ $this->test->expectOnce('assert', array(
+ new LikeExpectation(new ParametersExpectation(array(
+ new AnythingExpectation(), 123, new AnythingExpectation()))),
+ array(100, 123, 101),
+ '*'));
+ $mock = &new MockDummyWithInjectedTestCase($this);
+ $mock->expect("aMethod", array('*', 123, '*'));
+ $mock->aMethod(100, 123, 101);
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testSpecificPassingSequence() {
+ $this->test->expectAt(0, 'assert', array(
+ new LikeExpectation(new ParametersExpectation(array(1, 2, 3))),
+ array(1, 2, 3),
+ '*'));
+ $this->test->expectAt(1, 'assert', array(
+ new LikeExpectation(new ParametersExpectation(array('Hello'))),
+ array('Hello'),
+ '*'));
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expectAt(1, 'aMethod', array(1, 2, 3));
+ $mock->expectAt(2, 'aMethod', array('Hello'));
+ $mock->aMethod();
+ $mock->aMethod(1, 2, 3);
+ $mock->aMethod('Hello');
+ $mock->aMethod();
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+
+ function testNonArrayForExpectedParametersGivesError() {
+ $mock = &new MockDummyWithInjectedTestCase();
+ $mock->expect("aMethod", "foo");
+ $this->assertErrorPattern('/\$args.*not an array/i');
+ $mock->aMethod();
+ $mock->tally();
+ $mock->_mock->atTestEnd('testSomething', $this->test);
+ }
+}
+
+class TestOfMockComparisons extends UnitTestCase {
+
+ function testEqualComparisonOfMocksDoesNotCrash() {
+ $expectation = &new EqualExpectation(new MockDummy());
+ $this->assertTrue($expectation->test(new MockDummy(), true));
+ }
+
+ function testIdenticalComparisonOfMocksDoesNotCrash() {
+ $expectation = &new IdenticalExpectation(new MockDummy());
+ $this->assertTrue($expectation->test(new MockDummy()));
+ }
+}
+
+class ClassWithSpecialMethods {
+ function __get($name) { }
+ function __set($name, $value) { }
+ function __isset($name) { }
+ function __unset($name) { }
+ function __call($method, $arguments) { }
+ function __toString() { }
+}
+Mock::generate('ClassWithSpecialMethods');
+
+class TestOfSpecialMethods extends UnitTestCase {
+ function skip() {
+ $this->skipIf(version_compare(phpversion(), '5', '<='), 'Overloading not tested unless PHP 5+');
+ }
+
+ function testCanMockTheThingAtAll() {
+ $mock = new MockClassWithSpecialMethods();
+ }
+
+ function testReturnFromSpecialAccessor() {
+ $mock = &new MockClassWithSpecialMethods();
+ $mock->setReturnValue('__get', '1st Return', array('first'));
+ $mock->setReturnValue('__get', '2nd Return', array('second'));
+ $this->assertEqual($mock->first, '1st Return');
+ $this->assertEqual($mock->second, '2nd Return');
+ }
+
+ function testcanExpectTheSettingOfValue() {
+ $mock = &new MockClassWithSpecialMethods();
+ $mock->expectOnce('__set', array('a', 'A'));
+ $mock->a = 'A';
+ }
+
+ function testCanSimulateAnOverloadmethod() {
+ $mock = &new MockClassWithSpecialMethods();
+ $mock->expectOnce('__call', array('amOverloaded', array('A')));
+ $mock->setReturnValue('__call', 'aaa');
+ $this->assertIdentical($mock->amOverloaded('A'), 'aaa');
+ }
+
+ function testCanEmulateIsset() {
+ $mock = &new MockClassWithSpecialMethods();
+ $mock->setReturnValue('__isset', true);
+ $this->assertIdentical(isset($mock->a), true);
+ }
+
+ function testCanExpectUnset() {
+ $mock = &new MockClassWithSpecialMethods();
+ $mock->expectOnce('__unset', array('a'));
+ unset($mock->a);
+ }
+
+ function testToStringMagic() {
+ $mock = &new MockClassWithSpecialMethods();
+ $mock->expectOnce('__toString');
+ $mock->setReturnValue('__toString', 'AAA');
+ ob_start();
+ print $mock;
+ $output = ob_get_contents();
+ ob_end_clean();
+ $this->assertEqual($output, 'AAA');
+ }
+}
+
+if (version_compare(phpversion(), '5', '>=')) {
+ $class = 'class WithStaticMethod { ';
+ $class .= ' static function aStaticMethod() { } ';
+ $class .= '}';
+ eval($class);
+}
+Mock::generate('WithStaticMethod');
+
+class TestOfMockingClassesWithStaticMethods extends UnitTestCase {
+ function skip() {
+ $this->skipUnless(version_compare(phpversion(), '5', '>='), 'Static methods not tested unless PHP 5+');
+ }
+
+ function testStaticMethodIsMockedAsStatic() {
+ $mock = new WithStaticMethod();
+ $reflection = new ReflectionClass($mock);
+ $method = $reflection->getMethod('aStaticMethod');
+ $this->assertTrue($method->isStatic());
+ }
+}
+
+if (version_compare(phpversion(), '5', '>=')) {
+ class MockTestException extends Exception { }
+}
+
+class TestOfThrowingExceptionsFromMocks extends UnitTestCase {
+ function skip() {
+ $this->skipUnless(version_compare(phpversion(), '5', '>='), 'Exception throwing not tested unless PHP 5+');
+ }
+
+ function testCanThrowOnMethodCall() {
+ $mock = new MockDummy();
+ $mock->throwOn('aMethod');
+ $this->expectException();
+ $mock->aMethod();
+ }
+
+ function testCanThrowSpecificExceptionOnMethodCall() {
+ $mock = new MockDummy();
+ $mock->throwOn('aMethod', new MockTestException());
+ $this->expectException();
+ $mock->aMethod();
+ }
+
+ function testThrowsOnlyWhenCallSignatureMatches() {
+ $mock = new MockDummy();
+ $mock->throwOn('aMethod', new MockTestException(), array(3));
+ $mock->aMethod(1);
+ $mock->aMethod(2);
+ $this->expectException();
+ $mock->aMethod(3);
+ }
+
+ function testCanThrowOnParticularInvocation() {
+ $mock = new MockDummy();
+ $mock->throwAt(2, 'aMethod', new MockTestException());
+ $mock->aMethod();
+ $mock->aMethod();
+ $this->expectException();
+ $mock->aMethod();
+ }
+}
+
+class TestOfThrowingErrorsFromMocks extends UnitTestCase {
+
+ function testCanGenerateErrorFromMethodCall() {
+ $mock = new MockDummy();
+ $mock->errorOn('aMethod', 'Ouch!');
+ $this->expectError('Ouch!');
+ $mock->aMethod();
+ }
+
+ function testGeneratesErrorOnlyWhenCallSignatureMatches() {
+ $mock = new MockDummy();
+ $mock->errorOn('aMethod', 'Ouch!', array(3));
+ $mock->aMethod(1);
+ $mock->aMethod(2);
+ $this->expectError();
+ $mock->aMethod(3);
+ }
+
+ function testCanGenerateErrorOnParticularInvocation() {
+ $mock = new MockDummy();
+ $mock->errorAt(2, 'aMethod', 'Ouch!');
+ $mock->aMethod();
+ $mock->aMethod();
+ $this->expectError();
+ $mock->aMethod();
+ }
+}
+
+Mock::generatePartial('Dummy', 'TestDummy', array('anotherMethod'));
+
+class TestOfPartialMocks extends UnitTestCase {
+
+ function testMethodReplacementWithNoBehaviourReturnsNull() {
+ $mock = &new TestDummy();
+ $this->assertEqual($mock->aMethod(99), 99);
+ $this->assertNull($mock->anotherMethod());
+ }
+
+ function testSettingReturns() {
+ $mock = &new TestDummy();
+ $mock->setReturnValue('anotherMethod', 33, array(3));
+ $mock->setReturnValue('anotherMethod', 22);
+ $mock->setReturnValueAt(2, 'anotherMethod', 44, array(3));
+ $this->assertEqual($mock->anotherMethod(), 22);
+ $this->assertEqual($mock->anotherMethod(3), 33);
+ $this->assertEqual($mock->anotherMethod(3), 44);
+ }
+
+ function testReferences() {
+ $mock = &new TestDummy();
+ $object = new Dummy();
+ $mock->setReturnReferenceAt(0, 'anotherMethod', $object, array(3));
+ $this->assertReference($zref =& $mock->anotherMethod(3), $object);
+ }
+
+ function testExpectations() {
+ $mock = &new TestDummy();
+ $mock->expectCallCount('anotherMethod', 2);
+ $mock->expect('anotherMethod', array(77));
+ $mock->expectAt(1, 'anotherMethod', array(66));
+ $mock->anotherMethod(77);
+ $mock->anotherMethod(66);
+ }
+
+ function testSettingExpectationOnMissingMethodThrowsError() {
+ $mock = &new TestDummy();
+ $mock->expectCallCount('aMissingMethod', 2);
+ $this->assertError();
+ }
+}
+
+class ConstructorSuperClass {
+ function ConstructorSuperClass() { }
+}
+
+class ConstructorSubClass extends ConstructorSuperClass {
+}
+
+class TestOfPHP4StyleSuperClassConstruct extends UnitTestCase {
+ /*
+ * This addresses issue #1231401. Without the fix in place, this will
+ * generate a fatal PHP error.
+ */
+ function testBasicConstruct() {
+ Mock::generate('ConstructorSubClass');
+ $mock = &new MockConstructorSubClass();
+ $this->assertIsA($mock, 'ConstructorSubClass');
+ $this->assertTrue(method_exists($mock, 'ConstructorSuperClass'));
+ }
+}
+
+class TestOfPHP5StaticMethodMocking extends UnitTestCase {
+ function skip() {
+ $this->skipIf(version_compare(phpversion(), '5', '<='), 'Static methods not tested unless PHP 5+');
+ }
+
+ function testCanCreateAMockObjectWithStaticMethodsWithoutError() {
+ eval('
+ class SimpleObjectContainingStaticMethod {
+ static function someStatic() { }
+ }
+ ');
+
+ Mock::generate('SimpleObjectContainingStaticMethod');
+ $this->assertNoErrors();
+ }
+}
+
+class TestOfPHP5AbstractMethodMocking extends UnitTestCase {
+ function skip() {
+ $this->skipIf(version_compare(phpversion(), '5', '<='), 'Abstract class/methods not tested unless PHP 5+');
+ }
+
+ function testCanCreateAMockObjectFromAnAbstractWithProperFunctionDeclarations() {
+ eval('
+ abstract class SimpleAbstractClassContainingAbstractMethods {
+ abstract function anAbstract();
+ abstract function anAbstractWithParameter($foo);
+ abstract function anAbstractWithMultipleParameters($foo, $bar);
+ }
+ ');
+
+ Mock::generate('SimpleAbstractClassContainingAbstractMethods');
+ $this->assertNoErrors();
+
+ $this->assertTrue(
+ method_exists(
+ 'MockSimpleAbstractClassContainingAbstractMethods',
+ 'anAbstract'
+ )
+ );
+ $this->assertTrue(
+ method_exists(
+ 'MockSimpleAbstractClassContainingAbstractMethods',
+ 'anAbstractWithParameter'
+ )
+ );
+ $this->assertTrue(
+ method_exists(
+ 'MockSimpleAbstractClassContainingAbstractMethods',
+ 'anAbstractWithMultipleParameters'
+ )
+ );
+ }
+
+ function testMethodsDefinedAsAbstractInParentShouldHaveFullSignature() {
+ eval('
+ abstract class SimpleParentAbstractClassContainingAbstractMethods {
+ abstract function anAbstract();
+ abstract function anAbstractWithParameter($foo);
+ abstract function anAbstractWithMultipleParameters($foo, $bar);
+ }
+
+ class SimpleChildAbstractClassContainingAbstractMethods extends SimpleParentAbstractClassContainingAbstractMethods {
+ function anAbstract(){}
+ function anAbstractWithParameter($foo){}
+ function anAbstractWithMultipleParameters($foo, $bar){}
+ }
+
+ class EvenDeeperEmptyChildClass extends SimpleChildAbstractClassContainingAbstractMethods {}
+ ');
+
+ Mock::generate('SimpleChildAbstractClassContainingAbstractMethods');
+ $this->assertNoErrors();
+
+ $this->assertTrue(
+ method_exists(
+ 'MockSimpleChildAbstractClassContainingAbstractMethods',
+ 'anAbstract'
+ )
+ );
+ $this->assertTrue(
+ method_exists(
+ 'MockSimpleChildAbstractClassContainingAbstractMethods',
+ 'anAbstractWithParameter'
+ )
+ );
+ $this->assertTrue(
+ method_exists(
+ 'MockSimpleChildAbstractClassContainingAbstractMethods',
+ 'anAbstractWithMultipleParameters'
+ )
+ );
+
+ Mock::generate('EvenDeeperEmptyChildClass');
+ $this->assertNoErrors();
+
+ $this->assertTrue(
+ method_exists(
+ 'MockEvenDeeperEmptyChildClass',
+ 'anAbstract'
+ )
+ );
+ $this->assertTrue(
+ method_exists(
+ 'MockEvenDeeperEmptyChildClass',
+ 'anAbstractWithParameter'
+ )
+ );
+ $this->assertTrue(
+ method_exists(
+ 'MockEvenDeeperEmptyChildClass',
+ 'anAbstractWithMultipleParameters'
+ )
+ );
+ }
+}
+
+?>
diff --git a/vendors/simpletest/test/page_test.php b/vendors/simpletest/test/page_test.php
new file mode 100644
index 000000000..76e6a515b
--- /dev/null
+++ b/vendors/simpletest/test/page_test.php
@@ -0,0 +1,903 @@
+<?php
+// $Id: page_test.php 1559 2007-07-16 18:13:24Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../expectation.php');
+require_once(dirname(__FILE__) . '/../http.php');
+require_once(dirname(__FILE__) . '/../page.php');
+require_once(dirname(__FILE__) . '/../parser.php');
+Mock::generate('SimpleHtmlSaxParser');
+Mock::generate('SimplePage');
+Mock::generate('SimpleHttpResponse');
+Mock::generate('SimpleHttpHeaders');
+Mock::generate('SimplePageBuilder');
+Mock::generatePartial(
+ 'SimplePageBuilder',
+ 'PartialSimplePageBuilder',
+ array('_createPage', '_createParser'));
+
+class TestOfPageBuilder extends UnitTestCase {
+
+ function testLink() {
+ $tag = &new SimpleAnchorTag(array('href' => 'http://somewhere'));
+ $tag->addContent('Label');
+
+ $page = &new MockSimplePage();
+ $page->expectArguments('acceptTag', array($tag));
+ $page->expectCallCount('acceptTag', 1);
+
+ $builder = &new PartialSimplePageBuilder();
+ $builder->setReturnReference('_createPage', $page);
+ $builder->setReturnReference('_createParser', new MockSimpleHtmlSaxParser());
+ $builder->SimplePageBuilder();
+
+ $builder->parse(new MockSimpleHttpResponse());
+ $this->assertTrue($builder->startElement(
+ 'a',
+ array('href' => 'http://somewhere')));
+ $this->assertTrue($builder->addContent('Label'));
+ $this->assertTrue($builder->endElement('a'));
+ }
+
+ function testLinkWithId() {
+ $tag = &new SimpleAnchorTag(array("href" => "http://somewhere", "id" => "44"));
+ $tag->addContent("Label");
+
+ $page = &new MockSimplePage();
+ $page->expectArguments("acceptTag", array($tag));
+ $page->expectCallCount("acceptTag", 1);
+
+ $builder = &new PartialSimplePageBuilder();
+ $builder->setReturnReference('_createPage', $page);
+ $builder->setReturnReference('_createParser', new MockSimpleHtmlSaxParser());
+ $builder->SimplePageBuilder();
+
+ $builder->parse(new MockSimpleHttpResponse());
+ $this->assertTrue($builder->startElement(
+ "a",
+ array("href" => "http://somewhere", "id" => "44")));
+ $this->assertTrue($builder->addContent("Label"));
+ $this->assertTrue($builder->endElement("a"));
+ }
+
+ function testLinkExtraction() {
+ $tag = &new SimpleAnchorTag(array("href" => "http://somewhere"));
+ $tag->addContent("Label");
+
+ $page = &new MockSimplePage();
+ $page->expectArguments("acceptTag", array($tag));
+ $page->expectCallCount("acceptTag", 1);
+
+ $builder = &new PartialSimplePageBuilder();
+ $builder->setReturnReference('_createPage', $page);
+ $builder->setReturnReference('_createParser', new MockSimpleHtmlSaxParser());
+ $builder->SimplePageBuilder();
+
+ $builder->parse(new MockSimpleHttpResponse());
+ $this->assertTrue($builder->addContent("Starting stuff"));
+ $this->assertTrue($builder->startElement(
+ "a",
+ array("href" => "http://somewhere")));
+ $this->assertTrue($builder->addContent("Label"));
+ $this->assertTrue($builder->endElement("a"));
+ $this->assertTrue($builder->addContent("Trailing stuff"));
+ }
+
+ function testMultipleLinks() {
+ $a1 = new SimpleAnchorTag(array("href" => "http://somewhere"));
+ $a1->addContent("1");
+
+ $a2 = new SimpleAnchorTag(array("href" => "http://elsewhere"));
+ $a2->addContent("2");
+
+ $page = &new MockSimplePage();
+ $page->expectArgumentsAt(0, "acceptTag", array($a1));
+ $page->expectArgumentsAt(1, "acceptTag", array($a2));
+ $page->expectCallCount("acceptTag", 2);
+
+ $builder = &new PartialSimplePageBuilder();
+ $builder->setReturnReference('_createPage', $page);
+ $builder->setReturnReference('_createParser', new MockSimpleHtmlSaxParser());
+ $builder->SimplePageBuilder();
+
+ $builder->parse(new MockSimpleHttpResponse());
+ $builder->startElement("a", array("href" => "http://somewhere"));
+ $builder->addContent("1");
+ $builder->endElement("a");
+ $builder->addContent("Padding");
+ $builder->startElement("a", array("href" => "http://elsewhere"));
+ $builder->addContent("2");
+ $builder->endElement("a");
+ }
+
+ function testTitle() {
+ $tag = &new SimpleTitleTag(array());
+ $tag->addContent("HereThere");
+
+ $page = &new MockSimplePage();
+ $page->expectArguments("acceptTag", array($tag));
+ $page->expectCallCount("acceptTag", 1);
+
+ $builder = &new PartialSimplePageBuilder();
+ $builder->setReturnReference('_createPage', $page);
+ $builder->setReturnReference('_createParser', new MockSimpleHtmlSaxParser());
+ $builder->SimplePageBuilder();
+
+ $builder->parse(new MockSimpleHttpResponse());
+ $builder->startElement("title", array());
+ $builder->addContent("Here");
+ $builder->addContent("There");
+ $builder->endElement("title");
+ }
+
+ function testForm() {
+ $page = &new MockSimplePage();
+ $page->expectOnce("acceptFormStart", array(new SimpleFormTag(array())));
+ $page->expectOnce("acceptFormEnd", array());
+
+ $builder = &new PartialSimplePageBuilder();
+ $builder->setReturnReference('_createPage', $page);
+ $builder->setReturnReference('_createParser', new MockSimpleHtmlSaxParser());
+ $builder->SimplePageBuilder();
+
+ $builder->parse(new MockSimpleHttpResponse());
+ $builder->startElement("form", array());
+ $builder->addContent("Stuff");
+ $builder->endElement("form");
+ }
+}
+
+class TestOfPageParsing extends UnitTestCase {
+
+ function testParseMechanics() {
+ $parser = &new MockSimpleHtmlSaxParser();
+ $parser->expectOnce('parse', array('stuff'));
+
+ $page = &new MockSimplePage();
+ $page->expectOnce('acceptPageEnd');
+
+ $builder = &new PartialSimplePageBuilder();
+ $builder->setReturnReference('_createPage', $page);
+ $builder->setReturnReference('_createParser', $parser);
+ $builder->SimplePageBuilder();
+
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent', 'stuff');
+ $builder->parse($response);
+ }
+}
+
+class TestOfPageInterface extends UnitTestCase {
+
+ function testInterfaceOnEmptyPage() {
+ $page = &new SimplePage();
+ $this->assertEqual($page->getTransportError(), 'No page fetched yet');
+ $this->assertIdentical($page->getRaw(), false);
+ $this->assertIdentical($page->getHeaders(), false);
+ $this->assertIdentical($page->getMimeType(), false);
+ $this->assertIdentical($page->getResponseCode(), false);
+ $this->assertIdentical($page->getAuthentication(), false);
+ $this->assertIdentical($page->getRealm(), false);
+ $this->assertFalse($page->hasFrames());
+ $this->assertIdentical($page->getUrls(), array());
+ $this->assertIdentical($page->getTitle(), false);
+ }
+}
+
+class TestOfPageHeaders extends UnitTestCase {
+
+ function testUrlAccessor() {
+ $headers = &new MockSimpleHttpHeaders();
+
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getHeaders', $headers);
+ $response->setReturnValue('getMethod', 'POST');
+ $response->setReturnValue('getUrl', new SimpleUrl('here'));
+ $response->setReturnValue('getRequestData', array('a' => 'A'));
+
+ $page = &new SimplePage($response);
+ $this->assertEqual($page->getMethod(), 'POST');
+ $this->assertEqual($page->getUrl(), new SimpleUrl('here'));
+ $this->assertEqual($page->getRequestData(), array('a' => 'A'));
+ }
+
+ function testTransportError() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getError', 'Ouch');
+
+ $page = &new SimplePage($response);
+ $this->assertEqual($page->getTransportError(), 'Ouch');
+ }
+
+ function testHeadersAccessor() {
+ $headers = &new MockSimpleHttpHeaders();
+ $headers->setReturnValue('getRaw', 'My: Headers');
+
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getHeaders', $headers);
+
+ $page = &new SimplePage($response);
+ $this->assertEqual($page->getHeaders(), 'My: Headers');
+ }
+
+ function testMimeAccessor() {
+ $headers = &new MockSimpleHttpHeaders();
+ $headers->setReturnValue('getMimeType', 'text/html');
+
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getHeaders', $headers);
+
+ $page = &new SimplePage($response);
+ $this->assertEqual($page->getMimeType(), 'text/html');
+ }
+
+ function testResponseAccessor() {
+ $headers = &new MockSimpleHttpHeaders();
+ $headers->setReturnValue('getResponseCode', 301);
+
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getHeaders', $headers);
+
+ $page = &new SimplePage($response);
+ $this->assertIdentical($page->getResponseCode(), 301);
+ }
+
+ function testAuthenticationAccessors() {
+ $headers = &new MockSimpleHttpHeaders();
+ $headers->setReturnValue('getAuthentication', 'Basic');
+ $headers->setReturnValue('getRealm', 'Secret stuff');
+
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getHeaders', $headers);
+
+ $page = &new SimplePage($response);
+ $this->assertEqual($page->getAuthentication(), 'Basic');
+ $this->assertEqual($page->getRealm(), 'Secret stuff');
+ }
+}
+
+class TestOfHtmlPage extends UnitTestCase {
+
+ function testRawAccessor() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent', 'Raw HTML');
+
+ $page = &new SimplePage($response);
+ $this->assertEqual($page->getRaw(), 'Raw HTML');
+ }
+
+ function testTextAccessor() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent', '<b>Some</b> &quot;messy&quot; HTML');
+
+ $page = &new SimplePage($response);
+ $this->assertEqual($page->getText(), 'Some "messy" HTML');
+ }
+
+ function testNoLinks() {
+ $page = &new SimplePage(new MockSimpleHttpResponse());
+ $this->assertIdentical($page->getUrls(), array());
+ $this->assertIdentical($page->getUrlsByLabel('Label'), array());
+ }
+
+ function testAddAbsoluteLink() {
+ $link = &new SimpleAnchorTag(array('href' => 'http://somewhere.com'));
+ $link->addContent('Label');
+ $page = &new SimplePage(new MockSimpleHttpResponse());
+ $page->AcceptTag($link);
+ $this->assertEqual(
+ $page->getUrlsByLabel('Label'),
+ array(new SimpleUrl('http://somewhere.com')));
+ }
+
+ function testAddStrictRelativeLink() {
+ $link = &new SimpleAnchorTag(array('href' => './somewhere.php'));
+ $link->addContent('Label');
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', new SimpleUrl('http://host/'));
+ $page = &new SimplePage($response);
+ $page->AcceptTag($link);
+ $this->assertEqual(
+ $page->getUrlsByLabel('Label'),
+ array(new SimpleUrl('http://host/somewhere.php')));
+ }
+
+ function testAddBareRelativeLink() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', new SimpleUrl('http://host/'));
+ $page = &new SimplePage($response);
+ $page->AcceptTag(new SimpleAnchorTag(array('href' => 'somewhere.php')));
+ $this->assertIdentical($page->getUrls(), array('http://host/somewhere.php'));
+ }
+
+ function testAddRelativeLinkWithBaseTag() {
+ $link = &new SimpleAnchorTag(array('href' => 'somewhere.php'));
+ $link->addContent('Label');
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', new SimpleUrl('http://host/'));
+ $page = &new SimplePage($response);
+ $page->AcceptTag($link);
+ $base = &new SimpleBaseTag(array('href' => 'www.lastcraft.com/stuff/'));
+ $page->AcceptTag($base);
+ $this->assertEqual(
+ $page->getUrlsByLabel('Label'),
+ array(new SimpleUrl('www.lastcraft.com/stuff/somewhere.php')));
+ }
+
+ function testAddAbsoluteLinkWithBaseTag() {
+ $link = &new SimpleAnchorTag(array('href' => 'http://here.com/somewhere.php'));
+ $link->addContent('Label');
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', new SimpleUrl('http://host/'));
+ $page = &new SimplePage($response);
+ $page->AcceptTag($link);
+ $base = &new SimpleBaseTag(array('href' => 'www.lastcraft.com/stuff/'));
+ $page->AcceptTag($base);
+ $this->assertEqual(
+ $page->getUrlsByLabel('Label'),
+ array(new SimpleUrl('http://here.com/somewhere.php')));
+ }
+
+ function testLinkIds() {
+ $link = &new SimpleAnchorTag(array('href' => './somewhere.php', 'id' => 33));
+ $link->addContent('Label');
+
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', new SimpleUrl('http://host/'));
+
+ $page = &new SimplePage($response);
+ $page->AcceptTag($link);
+
+ $this->assertEqual(
+ $page->getUrlsByLabel('Label'),
+ array(new SimpleUrl('http://host/somewhere.php')));
+ $this->assertFalse($page->getUrlById(0));
+ $this->assertEqual(
+ $page->getUrlById(33),
+ new SimpleUrl('http://host/somewhere.php'));
+ }
+
+ function testFindLinkWithNormalisation() {
+ $link = &new SimpleAnchorTag(array('href' => './somewhere.php', 'id' => 33));
+ $link->addContent(' <em>Long &amp; thin</em> ');
+
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', new SimpleUrl('http://host/'));
+
+ $page = &new SimplePage($response);
+ $page->AcceptTag($link);
+
+ $this->assertEqual(
+ $page->getUrlsByLabel('Long & thin'),
+ array(new SimpleUrl('http://host/somewhere.php')));
+ }
+
+ function testFindLinkWithImage() {
+ $link = &new SimpleAnchorTag(array('href' => './somewhere.php', 'id' => 33));
+ $link->addContent('<img src="pic.jpg" alt="&lt;A picture&gt;">');
+
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', new SimpleUrl('http://host/'));
+
+ $page = &new SimplePage($response);
+ $page->AcceptTag($link);
+
+ $this->assertEqual(
+ $page->getUrlsByLabel('<A picture>'),
+ array(new SimpleUrl('http://host/somewhere.php')));
+ }
+
+ function testTitleSetting() {
+ $title = &new SimpleTitleTag(array());
+ $title->addContent('Title');
+ $page = &new SimplePage(new MockSimpleHttpResponse());
+ $page->AcceptTag($title);
+ $this->assertEqual($page->getTitle(), 'Title');
+ }
+
+ function testFramesetAbsence() {
+ $url = new SimpleUrl('here');
+ $response = new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', $url);
+ $page = &new SimplePage($response);
+ $this->assertFalse($page->hasFrames());
+ $this->assertIdentical($page->getFrameset(), false);
+ }
+
+ function testHasEmptyFrameset() {
+ $page = &new SimplePage(new MockSimpleHttpResponse());
+ $page->acceptFramesetStart(new SimpleTag('frameset', array()));
+ $page->acceptFramesetEnd();
+ $this->assertTrue($page->hasFrames());
+ $this->assertIdentical($page->getFrameset(), array());
+ }
+
+ function testFramesInPage() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', new SimpleUrl('http://here'));
+
+ $page = &new SimplePage($response);
+ $page->acceptFrame(new SimpleFrameTag(array('src' => '1.html')));
+ $page->acceptFramesetStart(new SimpleTag('frameset', array()));
+ $page->acceptFrame(new SimpleFrameTag(array('src' => '2.html')));
+ $page->acceptFrame(new SimpleFrameTag(array('src' => '3.html')));
+ $page->acceptFramesetEnd();
+ $page->acceptFrame(new SimpleFrameTag(array('src' => '4.html')));
+
+ $this->assertTrue($page->hasFrames());
+ $this->assertIdentical($page->getFrameset(), array(
+ 1 => new SimpleUrl('http://here/2.html'),
+ 2 => new SimpleUrl('http://here/3.html')));
+ }
+
+ function testNamedFramesInPage() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', new SimpleUrl('http://here'));
+
+ $page = &new SimplePage($response);
+ $page->acceptFramesetStart(new SimpleTag('frameset', array()));
+ $page->acceptFrame(new SimpleFrameTag(array('src' => '1.html')));
+ $page->acceptFrame(new SimpleFrameTag(array('src' => '2.html', 'name' => 'A')));
+ $page->acceptFrame(new SimpleFrameTag(array('src' => '3.html', 'name' => 'B')));
+ $page->acceptFrame(new SimpleFrameTag(array('src' => '4.html')));
+ $page->acceptFramesetEnd();
+
+ $this->assertTrue($page->hasFrames());
+ $this->assertIdentical($page->getFrameset(), array(
+ 1 => new SimpleUrl('http://here/1.html'),
+ 'A' => new SimpleUrl('http://here/2.html'),
+ 'B' => new SimpleUrl('http://here/3.html'),
+ 4 => new SimpleUrl('http://here/4.html')));
+ }
+
+ function testRelativeFramesRespectBaseTag() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getUrl', new SimpleUrl('http://here.com/'));
+ $page = &new SimplePage($response);
+
+ $base = &new SimpleBaseTag(array('href' => 'https://there.com/stuff/'));
+ $page->AcceptTag($base);
+
+ $page->acceptFramesetStart(new SimpleTag('frameset', array()));
+ $page->acceptFrame(new SimpleFrameTag(array('src' => '1.html')));
+ $page->acceptFramesetEnd();
+ $this->assertIdentical(
+ $page->getFrameset(),
+ array(1 => new SimpleUrl('https://there.com/stuff/1.html')));
+ }
+}
+
+class TestOfFormsCreatedFromEventStream extends UnitTestCase {
+
+ function testFormCanBeSubmitted() {
+ $page = &new SimplePage(new MockSimpleHttpResponse());
+ $page->acceptFormStart(
+ new SimpleFormTag(array('method' => 'GET', 'action' => 'here.php')));
+ $page->AcceptTag(
+ new SimpleSubmitTag(array('type' => 'submit', 'name' => 's')));
+ $page->acceptFormEnd();
+ $form = &$page->getFormBySubmit(new SimpleByLabel('Submit'));
+ $this->assertEqual(
+ $form->submitButton(new SimpleByLabel('Submit')),
+ new SimpleGetEncoding(array('s' => 'Submit')));
+ }
+
+ function testInputFieldCanBeReadBack() {
+ $page = &new SimplePage(new MockSimpleHttpResponse());
+ $page->acceptFormStart(
+ new SimpleFormTag(array("method" => "GET", "action" => "here.php")));
+ $page->AcceptTag(
+ new SimpleTextTag(array("type" => "text", "name" => "a", "value" => "A")));
+ $page->AcceptTag(
+ new SimpleSubmitTag(array("type" => "submit", "name" => "s")));
+ $page->acceptFormEnd();
+ $this->assertEqual($page->getField(new SimpleByName('a')), 'A');
+ }
+
+ function testInputFieldCanBeReadBackByLabel() {
+ $label = &new SimpleLabelTag(array());
+ $page = &new SimplePage(new MockSimpleHttpResponse());
+ $page->acceptFormStart(
+ new SimpleFormTag(array("method" => "GET", "action" => "here.php")));
+ $page->acceptLabelStart($label);
+ $label->addContent('l');
+ $page->AcceptTag(
+ new SimpleTextTag(array("type" => "text", "name" => "a", "value" => "A")));
+ $page->acceptLabelEnd();
+ $page->AcceptTag(
+ new SimpleSubmitTag(array("type" => "submit", "name" => "s")));
+ $page->acceptFormEnd();
+ $this->assertEqual($page->getField(new SimpleByLabel('l')), 'A');
+ }
+}
+
+class TestOfPageScraping extends UnitTestCase {
+
+ function &parse($response) {
+ $builder = &new SimplePageBuilder();
+ $page = &$builder->parse($response);
+ return $page;
+ }
+
+ function testEmptyPage() {
+ $page = &new SimplePage(new MockSimpleHttpResponse());
+ $this->assertIdentical($page->getUrls(), array());
+ $this->assertIdentical($page->getTitle(), false);
+ }
+
+ function testUninterestingPage() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent', '<html><body><p>Stuff</p></body></html>');
+ $page = &$this->parse($response);
+ $this->assertIdentical($page->getUrls(), array());
+ }
+
+ function testLinksPage() {
+ $raw = '<html>';
+ $raw .= '<a href="there.html">There</a>';
+ $raw .= '<a href="http://there.com/that.html" id="0">That page</a>';
+ $raw .= '</html>';
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent', $raw);
+ $response->setReturnValue('getUrl', new SimpleUrl('http://www.here.com/a/index.html'));
+
+ $page = &$this->parse($response);
+ $this->assertIdentical(
+ $page->getUrls(),
+ array('http://www.here.com/a/there.html', 'http://there.com/that.html'));
+ $this->assertIdentical(
+ $page->getUrlsByLabel('There'),
+ array(new SimpleUrl('http://www.here.com/a/there.html')));
+ $this->assertEqual(
+ $page->getUrlById('0'),
+ new SimpleUrl('http://there.com/that.html'));
+ }
+
+ function testTitle() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent', '<html><head><title>Me</title></head></html>');
+ $page = &$this->parse($response);
+ $this->assertEqual($page->getTitle(), 'Me');
+ }
+
+ function testNastyTitle() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue(
+ 'getContent',
+ '<html><head><Title> <b>Me&amp;Me </TITLE></b></head></html>');
+ $page = &$this->parse($response);
+ $this->assertEqual($page->getTitle(), "Me&Me");
+ }
+
+ function testCompleteForm() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<input type="text" name="here" value="Hello">' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertEqual($page->getField(new SimpleByName('here')), "Hello");
+ }
+
+ function testUnclosedForm() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<input type="text" name="here" value="Hello">' .
+ '</head></html>');
+ $page = &$this->parse($response);
+ $this->assertEqual($page->getField(new SimpleByName('here')), "Hello");
+ }
+
+ function testEmptyFrameset() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue(
+ 'getContent',
+ '<html><frameset></frameset></html>');
+ $page = &$this->parse($response);
+ $this->assertTrue($page->hasFrames());
+ $this->assertIdentical($page->getFrameset(), array());
+ }
+
+ function testSingleFrame() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue(
+ 'getContent',
+ '<html><frameset><frame src="a.html"></frameset></html>');
+ $response->setReturnValue('getUrl', new SimpleUrl('http://host/'));
+
+ $page = &$this->parse($response);
+ $this->assertTrue($page->hasFrames());
+ $this->assertIdentical(
+ $page->getFrameset(),
+ array(1 => new SimpleUrl('http://host/a.html')));
+ }
+
+ function testSingleFrameInNestedFrameset() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><frameset><frameset>' .
+ '<frame src="a.html">' .
+ '</frameset></frameset></html>');
+ $response->setReturnValue('getUrl', new SimpleUrl('http://host/'));
+
+ $page = &$this->parse($response);
+ $this->assertTrue($page->hasFrames());
+ $this->assertIdentical(
+ $page->getFrameset(),
+ array(1 => new SimpleUrl('http://host/a.html')));
+ }
+
+ function testFrameWithNoSource() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue(
+ 'getContent',
+ '<html><frameset><frame></frameset></html>');
+ $page = &$this->parse($response);
+ $this->assertTrue($page->hasFrames());
+ $this->assertIdentical($page->getFrameset(), array());
+ }
+
+ function testFramesCollectedWithNestedFramesetTags() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><frameset>' .
+ '<frame src="a.html">' .
+ '<frameset><frame src="b.html"></frameset>' .
+ '<frame src="c.html">' .
+ '</frameset></html>');
+ $response->setReturnValue('getUrl', new SimpleUrl('http://host/'));
+
+ $page = &$this->parse($response);
+ $this->assertTrue($page->hasFrames());
+ $this->assertIdentical($page->getFrameset(), array(
+ 1 => new SimpleUrl('http://host/a.html'),
+ 2 => new SimpleUrl('http://host/b.html'),
+ 3 => new SimpleUrl('http://host/c.html')));
+ }
+
+ function testNamedFrames() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><frameset>' .
+ '<frame src="a.html">' .
+ '<frame name="_one" src="b.html">' .
+ '<frame src="c.html">' .
+ '<frame src="d.html" name="_two">' .
+ '</frameset></html>');
+ $response->setReturnValue('getUrl', new SimpleUrl('http://host/'));
+
+ $page = &$this->parse($response);
+ $this->assertTrue($page->hasFrames());
+ $this->assertIdentical($page->getFrameset(), array(
+ 1 => new SimpleUrl('http://host/a.html'),
+ '_one' => new SimpleUrl('http://host/b.html'),
+ 3 => new SimpleUrl('http://host/c.html'),
+ '_two' => new SimpleUrl('http://host/d.html')));
+ }
+
+ function testFindFormByLabel() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue(
+ 'getContent',
+ '<html><head><form><input type="submit"></form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertNull($page->getFormBySubmit(new SimpleByLabel('submit')));
+ $this->assertNull($page->getFormBySubmit(new SimpleByName('submit')));
+ $this->assertIsA(
+ $page->getFormBySubmit(new SimpleByLabel('Submit')),
+ 'SimpleForm');
+ }
+
+ function testConfirmSubmitAttributesAreCaseSensitive() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue(
+ 'getContent',
+ '<html><head><FORM><INPUT TYPE="SUBMIT" NAME="S" VALUE="S"></FORM></head></html>');
+ $page = &$this->parse($response);
+ $this->assertIsA(
+ $page->getFormBySubmit(new SimpleByName('S')),
+ 'SimpleForm');
+ $this->assertIsA(
+ $page->getFormBySubmit(new SimpleByLabel('S')),
+ 'SimpleForm');
+ }
+
+ function testFindFormByImage() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<input type="image" id=100 alt="Label" name="me">' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertIsA(
+ $page->getFormByImage(new SimpleByLabel('Label')),
+ 'SimpleForm');
+ $this->assertIsA(
+ $page->getFormByImage(new SimpleByName('me')),
+ 'SimpleForm');
+ $this->assertIsA(
+ $page->getFormByImage(new SimpleById(100)),
+ 'SimpleForm');
+ }
+
+ function testFindFormByButtonTag() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<button type="submit" name="b" value="B">BBB</button>' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertNull($page->getFormBySubmit(new SimpleByLabel('b')));
+ $this->assertNull($page->getFormBySubmit(new SimpleByLabel('B')));
+ $this->assertIsA(
+ $page->getFormBySubmit(new SimpleByName('b')),
+ 'SimpleForm');
+ $this->assertIsA(
+ $page->getFormBySubmit(new SimpleByLabel('BBB')),
+ 'SimpleForm');
+ }
+
+ function testFindFormById() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue(
+ 'getContent',
+ '<html><head><form id="55"><input type="submit"></form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertNull($page->getFormById(54));
+ $this->assertIsA($page->getFormById(55), 'SimpleForm');
+ }
+
+ function testReadingTextField() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<input type="text" name="a">' .
+ '<input type="text" name="b" value="bbb" id=3>' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertNull($page->getField(new SimpleByName('missing')));
+ $this->assertIdentical($page->getField(new SimpleByName('a')), '');
+ $this->assertIdentical($page->getField(new SimpleByName('b')), 'bbb');
+ }
+
+ function testReadingTextFieldIsCaseInsensitive() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><FORM>' .
+ '<INPUT TYPE="TEXT" NAME="a">' .
+ '<INPUT TYPE="TEXT" NAME="b" VALUE="bbb" id=3>' .
+ '</FORM></head></html>');
+ $page = &$this->parse($response);
+ $this->assertNull($page->getField(new SimpleByName('missing')));
+ $this->assertIdentical($page->getField(new SimpleByName('a')), '');
+ $this->assertIdentical($page->getField(new SimpleByName('b')), 'bbb');
+ }
+
+ function testSettingTextField() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<input type="text" name="a">' .
+ '<input type="text" name="b" id=3>' .
+ '<input type="submit">' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertTrue($page->setField(new SimpleByName('a'), 'aaa'));
+ $this->assertEqual($page->getField(new SimpleByName('a')), 'aaa');
+ $this->assertTrue($page->setField(new SimpleById(3), 'bbb'));
+ $this->assertEqual($page->getField(new SimpleBYId(3)), 'bbb');
+ $this->assertFalse($page->setField(new SimpleByName('z'), 'zzz'));
+ $this->assertNull($page->getField(new SimpleByName('z')));
+ }
+
+ function testSettingTextFieldByEnclosingLabel() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<label>Stuff' .
+ '<input type="text" name="a" value="A">' .
+ '</label>' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertEqual($page->getField(new SimpleByName('a')), 'A');
+ $this->assertEqual($page->getField(new SimpleByLabel('Stuff')), 'A');
+ $this->assertTrue($page->setField(new SimpleByLabel('Stuff'), 'aaa'));
+ $this->assertEqual($page->getField(new SimpleByLabel('Stuff')), 'aaa');
+ }
+
+ function testGettingTextFieldByEnclosingLabelWithConflictingOtherFields() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<label>Stuff' .
+ '<input type="text" name="a" value="A">' .
+ '</label>' .
+ '<input type="text" name="b" value="B">' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertEqual($page->getField(new SimpleByName('a')), 'A');
+ $this->assertEqual($page->getField(new SimpleByName('b')), 'B');
+ $this->assertEqual($page->getField(new SimpleByLabel('Stuff')), 'A');
+ }
+
+ function testSettingTextFieldByExternalLabel() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<label for="aaa">Stuff</label>' .
+ '<input id="aaa" type="text" name="a" value="A">' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertEqual($page->getField(new SimpleByLabel('Stuff')), 'A');
+ $this->assertTrue($page->setField(new SimpleByLabel('Stuff'), 'aaa'));
+ $this->assertEqual($page->getField(new SimpleByLabel('Stuff')), 'aaa');
+ }
+
+ function testReadingTextArea() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<textarea name="a">aaa</textarea>' .
+ '<input type="submit">' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertEqual($page->getField(new SimpleByName('a')), 'aaa');
+ }
+
+ function testSettingTextArea() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<textarea name="a">aaa</textarea>' .
+ '<input type="submit">' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertTrue($page->setField(new SimpleByName('a'), 'AAA'));
+ $this->assertEqual($page->getField(new SimpleByName('a')), 'AAA');
+ }
+
+ function testSettingSelectionField() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<select name="a">' .
+ '<option>aaa</option>' .
+ '<option selected>bbb</option>' .
+ '</select>' .
+ '<input type="submit">' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertEqual($page->getField(new SimpleByName('a')), 'bbb');
+ $this->assertFalse($page->setField(new SimpleByName('a'), 'ccc'));
+ $this->assertTrue($page->setField(new SimpleByName('a'), 'aaa'));
+ $this->assertEqual($page->getField(new SimpleByName('a')), 'aaa');
+ }
+
+ function testSettingSelectionFieldByEnclosingLabel() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<label>Stuff' .
+ '<select name="a"><option selected>A</option><option>B</option></select>' .
+ '</label>' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertEqual($page->getField(new SimpleByLabel('Stuff')), 'A');
+ $this->assertTrue($page->setField(new SimpleByLabel('Stuff'), 'B'));
+ $this->assertEqual($page->getField(new SimpleByLabel('Stuff')), 'B');
+ }
+
+ function testSettingRadioButtonByEnclosingLabel() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent',
+ '<html><head><form>' .
+ '<label>A<input type="radio" name="r" value="a" checked></label>' .
+ '<label>B<input type="radio" name="r" value="b"></label>' .
+ '</form></head></html>');
+ $page = &$this->parse($response);
+ $this->assertEqual($page->getField(new SimpleByLabel('A')), 'a');
+ $this->assertTrue($page->setField(new SimpleBylabel('B'), 'b'));
+ $this->assertEqual($page->getField(new SimpleByLabel('B')), 'b');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/parse_error_test.php b/vendors/simpletest/test/parse_error_test.php
new file mode 100644
index 000000000..c3ffb3d42
--- /dev/null
+++ b/vendors/simpletest/test/parse_error_test.php
@@ -0,0 +1,9 @@
+<?php
+// $Id: parse_error_test.php 1509 2007-05-08 22:11:49Z lastcraft $
+require_once('../unit_tester.php');
+require_once('../reporter.php');
+
+$test = &new TestSuite('This should fail');
+$test->addFile('test_with_parse_error.php');
+$test->run(new HtmlReporter());
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/parser_test.php b/vendors/simpletest/test/parser_test.php
new file mode 100644
index 000000000..83268d9e1
--- /dev/null
+++ b/vendors/simpletest/test/parser_test.php
@@ -0,0 +1,551 @@
+<?php
+// $Id: parser_test.php 1608 2007-12-27 09:03:07Z pp11 $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../parser.php');
+Mock::generate('SimpleHtmlSaxParser');
+Mock::generate('SimpleSaxListener');
+
+class TestOfParallelRegex extends UnitTestCase {
+
+ function testNoPatterns() {
+ $regex = &new ParallelRegex(false);
+ $this->assertFalse($regex->match("Hello", $match));
+ $this->assertEqual($match, "");
+ }
+
+ function testNoSubject() {
+ $regex = &new ParallelRegex(false);
+ $regex->addPattern(".*");
+ $this->assertTrue($regex->match("", $match));
+ $this->assertEqual($match, "");
+ }
+
+ function testMatchAll() {
+ $regex = &new ParallelRegex(false);
+ $regex->addPattern(".*");
+ $this->assertTrue($regex->match("Hello", $match));
+ $this->assertEqual($match, "Hello");
+ }
+
+ function testCaseSensitive() {
+ $regex = &new ParallelRegex(true);
+ $regex->addPattern("abc");
+ $this->assertTrue($regex->match("abcdef", $match));
+ $this->assertEqual($match, "abc");
+ $this->assertTrue($regex->match("AAABCabcdef", $match));
+ $this->assertEqual($match, "abc");
+ }
+
+ function testCaseInsensitive() {
+ $regex = &new ParallelRegex(false);
+ $regex->addPattern("abc");
+ $this->assertTrue($regex->match("abcdef", $match));
+ $this->assertEqual($match, "abc");
+ $this->assertTrue($regex->match("AAABCabcdef", $match));
+ $this->assertEqual($match, "ABC");
+ }
+
+ function testMatchMultiple() {
+ $regex = &new ParallelRegex(true);
+ $regex->addPattern("abc");
+ $regex->addPattern("ABC");
+ $this->assertTrue($regex->match("abcdef", $match));
+ $this->assertEqual($match, "abc");
+ $this->assertTrue($regex->match("AAABCabcdef", $match));
+ $this->assertEqual($match, "ABC");
+ $this->assertFalse($regex->match("Hello", $match));
+ }
+
+ function testPatternLabels() {
+ $regex = &new ParallelRegex(false);
+ $regex->addPattern("abc", "letter");
+ $regex->addPattern("123", "number");
+ $this->assertIdentical($regex->match("abcdef", $match), "letter");
+ $this->assertEqual($match, "abc");
+ $this->assertIdentical($regex->match("0123456789", $match), "number");
+ $this->assertEqual($match, "123");
+ }
+}
+
+class TestOfStateStack extends UnitTestCase {
+
+ function testStartState() {
+ $stack = &new SimpleStateStack("one");
+ $this->assertEqual($stack->getCurrent(), "one");
+ }
+
+ function testExhaustion() {
+ $stack = &new SimpleStateStack("one");
+ $this->assertFalse($stack->leave());
+ }
+
+ function testStateMoves() {
+ $stack = &new SimpleStateStack("one");
+ $stack->enter("two");
+ $this->assertEqual($stack->getCurrent(), "two");
+ $stack->enter("three");
+ $this->assertEqual($stack->getCurrent(), "three");
+ $this->assertTrue($stack->leave());
+ $this->assertEqual($stack->getCurrent(), "two");
+ $stack->enter("third");
+ $this->assertEqual($stack->getCurrent(), "third");
+ $this->assertTrue($stack->leave());
+ $this->assertTrue($stack->leave());
+ $this->assertEqual($stack->getCurrent(), "one");
+ }
+}
+
+class TestParser {
+
+ function accept() {
+ }
+
+ function a() {
+ }
+
+ function b() {
+ }
+}
+Mock::generate('TestParser');
+
+class TestOfLexer extends UnitTestCase {
+
+ function testEmptyPage() {
+ $handler = &new MockTestParser();
+ $handler->expectNever("accept");
+ $handler->setReturnValue("accept", true);
+ $handler->expectNever("accept");
+ $handler->setReturnValue("accept", true);
+ $lexer = &new SimpleLexer($handler);
+ $lexer->addPattern("a+");
+ $this->assertTrue($lexer->parse(""));
+ }
+
+ function testSinglePattern() {
+ $handler = &new MockTestParser();
+ $handler->expectArgumentsAt(0, "accept", array("aaa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(1, "accept", array("x", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(2, "accept", array("a", LEXER_MATCHED));
+ $handler->expectArgumentsAt(3, "accept", array("yyy", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(4, "accept", array("a", LEXER_MATCHED));
+ $handler->expectArgumentsAt(5, "accept", array("x", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(6, "accept", array("aaa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(7, "accept", array("z", LEXER_UNMATCHED));
+ $handler->expectCallCount("accept", 8);
+ $handler->setReturnValue("accept", true);
+ $lexer = &new SimpleLexer($handler);
+ $lexer->addPattern("a+");
+ $this->assertTrue($lexer->parse("aaaxayyyaxaaaz"));
+ }
+
+ function testMultiplePattern() {
+ $handler = &new MockTestParser();
+ $target = array("a", "b", "a", "bb", "x", "b", "a", "xxxxxx", "a", "x");
+ for ($i = 0; $i < count($target); $i++) {
+ $handler->expectArgumentsAt($i, "accept", array($target[$i], '*'));
+ }
+ $handler->expectCallCount("accept", count($target));
+ $handler->setReturnValue("accept", true);
+ $lexer = &new SimpleLexer($handler);
+ $lexer->addPattern("a+");
+ $lexer->addPattern("b+");
+ $this->assertTrue($lexer->parse("ababbxbaxxxxxxax"));
+ }
+}
+
+class TestOfLexerModes extends UnitTestCase {
+
+ function testIsolatedPattern() {
+ $handler = &new MockTestParser();
+ $handler->expectArgumentsAt(0, "a", array("a", LEXER_MATCHED));
+ $handler->expectArgumentsAt(1, "a", array("b", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(2, "a", array("aa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(3, "a", array("bxb", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(4, "a", array("aaa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(5, "a", array("x", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(6, "a", array("aaaa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(7, "a", array("x", LEXER_UNMATCHED));
+ $handler->expectCallCount("a", 8);
+ $handler->setReturnValue("a", true);
+ $lexer = &new SimpleLexer($handler, "a");
+ $lexer->addPattern("a+", "a");
+ $lexer->addPattern("b+", "b");
+ $this->assertTrue($lexer->parse("abaabxbaaaxaaaax"));
+ }
+
+ function testModeChange() {
+ $handler = &new MockTestParser();
+ $handler->expectArgumentsAt(0, "a", array("a", LEXER_MATCHED));
+ $handler->expectArgumentsAt(1, "a", array("b", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(2, "a", array("aa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(3, "a", array("b", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(4, "a", array("aaa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(0, "b", array(":", LEXER_ENTER));
+ $handler->expectArgumentsAt(1, "b", array("a", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(2, "b", array("b", LEXER_MATCHED));
+ $handler->expectArgumentsAt(3, "b", array("a", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(4, "b", array("bb", LEXER_MATCHED));
+ $handler->expectArgumentsAt(5, "b", array("a", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(6, "b", array("bbb", LEXER_MATCHED));
+ $handler->expectArgumentsAt(7, "b", array("a", LEXER_UNMATCHED));
+ $handler->expectCallCount("a", 5);
+ $handler->expectCallCount("b", 8);
+ $handler->setReturnValue("a", true);
+ $handler->setReturnValue("b", true);
+ $lexer = &new SimpleLexer($handler, "a");
+ $lexer->addPattern("a+", "a");
+ $lexer->addEntryPattern(":", "a", "b");
+ $lexer->addPattern("b+", "b");
+ $this->assertTrue($lexer->parse("abaabaaa:ababbabbba"));
+ }
+
+ function testNesting() {
+ $handler = &new MockTestParser();
+ $handler->setReturnValue("a", true);
+ $handler->setReturnValue("b", true);
+ $handler->expectArgumentsAt(0, "a", array("aa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(1, "a", array("b", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(2, "a", array("aa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(3, "a", array("b", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(0, "b", array("(", LEXER_ENTER));
+ $handler->expectArgumentsAt(1, "b", array("bb", LEXER_MATCHED));
+ $handler->expectArgumentsAt(2, "b", array("a", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(3, "b", array("bb", LEXER_MATCHED));
+ $handler->expectArgumentsAt(4, "b", array(")", LEXER_EXIT));
+ $handler->expectArgumentsAt(4, "a", array("aa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(5, "a", array("b", LEXER_UNMATCHED));
+ $handler->expectCallCount("a", 6);
+ $handler->expectCallCount("b", 5);
+ $lexer = &new SimpleLexer($handler, "a");
+ $lexer->addPattern("a+", "a");
+ $lexer->addEntryPattern("(", "a", "b");
+ $lexer->addPattern("b+", "b");
+ $lexer->addExitPattern(")", "b");
+ $this->assertTrue($lexer->parse("aabaab(bbabb)aab"));
+ }
+
+ function testSingular() {
+ $handler = &new MockTestParser();
+ $handler->setReturnValue("a", true);
+ $handler->setReturnValue("b", true);
+ $handler->expectArgumentsAt(0, "a", array("aa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(1, "a", array("aa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(2, "a", array("xx", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(3, "a", array("xx", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(0, "b", array("b", LEXER_SPECIAL));
+ $handler->expectArgumentsAt(1, "b", array("bbb", LEXER_SPECIAL));
+ $handler->expectCallCount("a", 4);
+ $handler->expectCallCount("b", 2);
+ $lexer = &new SimpleLexer($handler, "a");
+ $lexer->addPattern("a+", "a");
+ $lexer->addSpecialPattern("b+", "a", "b");
+ $this->assertTrue($lexer->parse("aabaaxxbbbxx"));
+ }
+
+ function testUnwindTooFar() {
+ $handler = &new MockTestParser();
+ $handler->setReturnValue("a", true);
+ $handler->expectArgumentsAt(0, "a", array("aa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(1, "a", array(")", LEXER_EXIT));
+ $handler->expectCallCount("a", 2);
+ $lexer = &new SimpleLexer($handler, "a");
+ $lexer->addPattern("a+", "a");
+ $lexer->addExitPattern(")", "a");
+ $this->assertFalse($lexer->parse("aa)aa"));
+ }
+}
+
+class TestOfLexerHandlers extends UnitTestCase {
+
+ function testModeMapping() {
+ $handler = &new MockTestParser();
+ $handler->setReturnValue("a", true);
+ $handler->expectArgumentsAt(0, "a", array("aa", LEXER_MATCHED));
+ $handler->expectArgumentsAt(1, "a", array("(", LEXER_ENTER));
+ $handler->expectArgumentsAt(2, "a", array("bb", LEXER_MATCHED));
+ $handler->expectArgumentsAt(3, "a", array("a", LEXER_UNMATCHED));
+ $handler->expectArgumentsAt(4, "a", array("bb", LEXER_MATCHED));
+ $handler->expectArgumentsAt(5, "a", array(")", LEXER_EXIT));
+ $handler->expectArgumentsAt(6, "a", array("b", LEXER_UNMATCHED));
+ $handler->expectCallCount("a", 7);
+ $lexer = &new SimpleLexer($handler, "mode_a");
+ $lexer->addPattern("a+", "mode_a");
+ $lexer->addEntryPattern("(", "mode_a", "mode_b");
+ $lexer->addPattern("b+", "mode_b");
+ $lexer->addExitPattern(")", "mode_b");
+ $lexer->mapHandler("mode_a", "a");
+ $lexer->mapHandler("mode_b", "a");
+ $this->assertTrue($lexer->parse("aa(bbabb)b"));
+ }
+}
+
+class TestOfSimpleHtmlLexer extends UnitTestCase {
+
+ function &createParser() {
+ $parser = &new MockSimpleHtmlSaxParser();
+ $parser->setReturnValue('acceptStartToken', true);
+ $parser->setReturnValue('acceptEndToken', true);
+ $parser->setReturnValue('acceptAttributeToken', true);
+ $parser->setReturnValue('acceptEntityToken', true);
+ $parser->setReturnValue('acceptTextToken', true);
+ $parser->setReturnValue('ignore', true);
+ return $parser;
+ }
+
+ function testNoContent() {
+ $parser = &$this->createParser();
+ $parser->expectNever('acceptStartToken');
+ $parser->expectNever('acceptEndToken');
+ $parser->expectNever('acceptAttributeToken');
+ $parser->expectNever('acceptEntityToken');
+ $parser->expectNever('acceptTextToken');
+ $lexer = &new SimpleHtmlLexer($parser);
+ $this->assertTrue($lexer->parse(''));
+ }
+
+ function testUninteresting() {
+ $parser = &$this->createParser();
+ $parser->expectOnce('acceptTextToken', array('<html></html>', '*'));
+ $lexer = &new SimpleHtmlLexer($parser);
+ $this->assertTrue($lexer->parse('<html></html>'));
+ }
+
+ function testSkipCss() {
+ $parser = &$this->createParser();
+ $parser->expectNever('acceptTextToken');
+ $parser->expectAtLeastOnce('ignore');
+ $lexer = &new SimpleHtmlLexer($parser);
+ $this->assertTrue($lexer->parse("<style>Lot's of styles</style>"));
+ }
+
+ function testSkipJavaScript() {
+ $parser = &$this->createParser();
+ $parser->expectNever('acceptTextToken');
+ $parser->expectAtLeastOnce('ignore');
+ $lexer = &new SimpleHtmlLexer($parser);
+ $this->assertTrue($lexer->parse("<SCRIPT>Javascript code {';:^%^%£$'@\"*(}</SCRIPT>"));
+ }
+
+ function testSkipHtmlComments() {
+ $parser = &$this->createParser();
+ $parser->expectNever('acceptTextToken');
+ $parser->expectAtLeastOnce('ignore');
+ $lexer = &new SimpleHtmlLexer($parser);
+ $this->assertTrue($lexer->parse("<!-- <title>title</title><style>styles</style> -->"));
+ }
+
+ function testTagWithNoAttributes() {
+ $parser = &$this->createParser();
+ $parser->expectAt(0, 'acceptStartToken', array('<title', '*'));
+ $parser->expectAt(1, 'acceptStartToken', array('>', '*'));
+ $parser->expectCallCount('acceptStartToken', 2);
+ $parser->expectOnce('acceptTextToken', array('Hello', '*'));
+ $parser->expectOnce('acceptEndToken', array('</title>', '*'));
+ $lexer = &new SimpleHtmlLexer($parser);
+ $this->assertTrue($lexer->parse('<title>Hello</title>'));
+ }
+
+ function testTagWithAttributes() {
+ $parser = &$this->createParser();
+ $parser->expectOnce('acceptTextToken', array('label', '*'));
+ $parser->expectAt(0, 'acceptStartToken', array('<a', '*'));
+ $parser->expectAt(1, 'acceptStartToken', array('href', '*'));
+ $parser->expectAt(2, 'acceptStartToken', array('>', '*'));
+ $parser->expectCallCount('acceptStartToken', 3);
+ $parser->expectAt(0, 'acceptAttributeToken', array('= "', '*'));
+ $parser->expectAt(1, 'acceptAttributeToken', array('here.html', '*'));
+ $parser->expectAt(2, 'acceptAttributeToken', array('"', '*'));
+ $parser->expectCallCount('acceptAttributeToken', 3);
+ $parser->expectOnce('acceptEndToken', array('</a>', '*'));
+ $lexer = &new SimpleHtmlLexer($parser);
+ $this->assertTrue($lexer->parse('<a href = "here.html">label</a>'));
+ }
+}
+
+class TestOfHtmlSaxParser extends UnitTestCase {
+
+ function &createListener() {
+ $listener = &new MockSimpleSaxListener();
+ $listener->setReturnValue('startElement', true);
+ $listener->setReturnValue('addContent', true);
+ $listener->setReturnValue('endElement', true);
+ return $listener;
+ }
+
+ function testFramesetTag() {
+ $listener = &$this->createListener();
+ $listener->expectOnce('startElement', array('frameset', array()));
+ $listener->expectOnce('addContent', array('Frames'));
+ $listener->expectOnce('endElement', array('frameset'));
+ $parser = &new SimpleHtmlSaxParser($listener);
+ $this->assertTrue($parser->parse('<frameset>Frames</frameset>'));
+ }
+
+ function testTagWithUnquotedAttributes() {
+ $listener = &$this->createListener();
+ $listener->expectOnce(
+ 'startElement',
+ array('input', array('name' => 'a.b.c', 'value' => 'd')));
+ $parser = &new SimpleHtmlSaxParser($listener);
+ $this->assertTrue($parser->parse('<input name=a.b.c value = d>'));
+ }
+
+ function testTagInsideContent() {
+ $listener = &$this->createListener();
+ $listener->expectOnce('startElement', array('a', array()));
+ $listener->expectAt(0, 'addContent', array('<html>'));
+ $listener->expectAt(1, 'addContent', array('</html>'));
+ $parser = &new SimpleHtmlSaxParser($listener);
+ $this->assertTrue($parser->parse('<html><a></a></html>'));
+ }
+
+ function testTagWithInternalContent() {
+ $listener = &$this->createListener();
+ $listener->expectOnce('startElement', array('a', array()));
+ $listener->expectOnce('addContent', array('label'));
+ $listener->expectOnce('endElement', array('a'));
+ $parser = &new SimpleHtmlSaxParser($listener);
+ $this->assertTrue($parser->parse('<a>label</a>'));
+ }
+
+ function testLinkAddress() {
+ $listener = &$this->createListener();
+ $listener->expectOnce('startElement', array('a', array('href' => 'here.html')));
+ $listener->expectOnce('addContent', array('label'));
+ $listener->expectOnce('endElement', array('a'));
+ $parser = &new SimpleHtmlSaxParser($listener);
+ $this->assertTrue($parser->parse("<a href = 'here.html'>label</a>"));
+ }
+
+ function testEncodedAttribute() {
+ $listener = &$this->createListener();
+ $listener->expectOnce('startElement', array('a', array('href' => 'here&there.html')));
+ $listener->expectOnce('addContent', array('label'));
+ $listener->expectOnce('endElement', array('a'));
+ $parser = &new SimpleHtmlSaxParser($listener);
+ $this->assertTrue($parser->parse("<a href = 'here&amp;there.html'>label</a>"));
+ }
+
+ function testTagWithId() {
+ $listener = &$this->createListener();
+ $listener->expectOnce('startElement', array('a', array('id' => '0')));
+ $listener->expectOnce('addContent', array('label'));
+ $listener->expectOnce('endElement', array('a'));
+ $parser = &new SimpleHtmlSaxParser($listener);
+ $this->assertTrue($parser->parse('<a id="0">label</a>'));
+ }
+
+ function testTagWithEmptyAttributes() {
+ $listener = &$this->createListener();
+ $listener->expectOnce(
+ 'startElement',
+ array('option', array('value' => '', 'selected' => '')));
+ $listener->expectOnce('addContent', array('label'));
+ $listener->expectOnce('endElement', array('option'));
+ $parser = &new SimpleHtmlSaxParser($listener);
+ $this->assertTrue($parser->parse('<option value="" selected>label</option>'));
+ }
+
+ function testComplexTagWithLotsOfCaseVariations() {
+ $listener = &$this->createListener();
+ $listener->expectOnce(
+ 'startElement',
+ array('a', array('href' => 'here.html', 'style' => "'cool'")));
+ $listener->expectOnce('addContent', array('label'));
+ $listener->expectOnce('endElement', array('a'));
+ $parser = &new SimpleHtmlSaxParser($listener);
+ $this->assertTrue($parser->parse('<A HREF = \'here.html\' Style="\'cool\'">label</A>'));
+ }
+
+ function testXhtmlSelfClosingTag() {
+ $listener = &$this->createListener();
+ $listener->expectOnce(
+ 'startElement',
+ array('input', array('type' => 'submit', 'name' => 'N', 'value' => 'V')));
+ $parser = &new SimpleHtmlSaxParser($listener);
+ $this->assertTrue($parser->parse('<input type="submit" name="N" value="V" />'));
+ }
+
+ function testNestedFrameInFrameset() {
+ $listener = &$this->createListener();
+ $listener->expectAt(0, 'startElement', array('frameset', array()));
+ $listener->expectAt(1, 'startElement', array('frame', array('src' => 'frame.html')));
+ $listener->expectCallCount('startElement', 2);
+ $listener->expectOnce('addContent', array('<noframes>Hello</noframes>'));
+ $listener->expectOnce('endElement', array('frameset'));
+ $parser = &new SimpleHtmlSaxParser($listener);
+ $this->assertTrue($parser->parse(
+ '<frameset><frame src="frame.html"><noframes>Hello</noframes></frameset>'));
+ }
+}
+
+class TestOfTextExtraction extends UnitTestCase {
+
+ function testImageSuppressionWhileKeepingParagraphsAndAltText() {
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise('<img src="foo.png" /><p>some text</p><img src="bar.png" alt="bar" />'),
+ 'some text bar');
+
+ }
+
+ function testSpaceNormalisation() {
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise("\nOne\tTwo \nThree\t"),
+ 'One Two Three');
+ }
+
+ function testMultilinesCommentSuppression() {
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise('<!--\n Hello \n-->'),
+ '');
+ }
+
+ function testCommentSuppression() {
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise('<!--Hello-->'),
+ '');
+ }
+
+ function testJavascriptSuppression() {
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise('<script attribute="test">\nHello\n</script>'),
+ '');
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise('<script attribute="test">Hello</script>'),
+ '');
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise('<script>Hello</script>'),
+ '');
+ }
+
+ function testTagSuppression() {
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise('<b>Hello</b>'),
+ 'Hello');
+ }
+
+ function testAdjoiningTagSuppression() {
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise('<b>Hello</b><em>Goodbye</em>'),
+ 'HelloGoodbye');
+ }
+
+ function testExtractImageAltTextWithDifferentQuotes() {
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise('<img alt="One"><img alt=\'Two\'><img alt=Three>'),
+ 'One Two Three');
+ }
+
+ function testExtractImageAltTextMultipleTimes() {
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise('<img alt="One"><img alt="Two"><img alt="Three">'),
+ 'One Two Three');
+ }
+
+ function testHtmlEntityTranslation() {
+ $this->assertEqual(
+ SimpleHtmlSaxParser::normalise('&lt;&gt;&quot;&amp;&#039;'),
+ '<>"&\'');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/reflection_php4_test.php b/vendors/simpletest/test/reflection_php4_test.php
new file mode 100644
index 000000000..8ee211b96
--- /dev/null
+++ b/vendors/simpletest/test/reflection_php4_test.php
@@ -0,0 +1,61 @@
+<?php
+// $Id: reflection_php4_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+
+class AnyOldThing {
+ function aMethod() {
+ }
+}
+
+class AnyOldChildThing extends AnyOldThing { }
+
+class TestOfReflection extends UnitTestCase {
+
+ function testClassExistence() {
+ $reflection = new SimpleReflection('AnyOldThing');
+ $this->assertTrue($reflection->classOrInterfaceExists());
+ $this->assertTrue($reflection->classOrInterfaceExistsSansAutoload());
+ }
+
+ function testClassNonExistence() {
+ $reflection = new SimpleReflection('UnknownThing');
+ $this->assertFalse($reflection->classOrInterfaceExists());
+ $this->assertFalse($reflection->classOrInterfaceExistsSansAutoload());
+ }
+
+ function testDetectionOfInterfacesAlwaysFalse() {
+ $reflection = new SimpleReflection('AnyOldThing');
+ $this->assertFalse($reflection->isAbstract());
+ $this->assertFalse($reflection->isInterface());
+ }
+
+ function testFindingParentClass() {
+ $reflection = new SimpleReflection('AnyOldChildThing');
+ $this->assertEqual(strtolower($reflection->getParent()), 'anyoldthing');
+ }
+
+ function testMethodsListFromClass() {
+ $reflection = new SimpleReflection('AnyOldThing');
+ $methods = $reflection->getMethods();
+ $this->assertEqualIgnoringCase($methods[0], 'aMethod');
+ }
+
+ function testNoInterfacesForPHP4() {
+ $reflection = new SimpleReflection('AnyOldThing');
+ $this->assertEqual(
+ $reflection->getInterfaces(),
+ array());
+ }
+
+ function testMostGeneralPossibleSignature() {
+ $reflection = new SimpleReflection('AnyOldThing');
+ $this->assertEqualIgnoringCase(
+ $reflection->getSignature('aMethod'),
+ 'function &aMethod()');
+ }
+
+ function assertEqualIgnoringCase($a, $b) {
+ return $this->assertEqual(strtolower($a), strtolower($b));
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/reflection_php5_test.php b/vendors/simpletest/test/reflection_php5_test.php
new file mode 100644
index 000000000..3bfc6e85b
--- /dev/null
+++ b/vendors/simpletest/test/reflection_php5_test.php
@@ -0,0 +1,271 @@
+<?php
+// $Id: reflection_php5_test.php 1541 2007-06-10 02:27:59Z tswicegood $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../reflection_php5.php');
+
+class AnyOldLeafClass {
+ function aMethod() { }
+}
+
+abstract class AnyOldClass {
+ function aMethod() { }
+}
+
+class AnyOldLeafClassWithAFinal {
+ final function aMethod() { }
+}
+
+interface AnyOldInterface {
+ function aMethod();
+}
+
+interface AnyOldArgumentInterface {
+ function aMethod(AnyOldInterface $argument);
+}
+
+interface AnyDescendentInterface extends AnyOldInterface {
+}
+
+class AnyOldImplementation implements AnyOldInterface {
+ function aMethod() { }
+ function extraMethod() { }
+}
+
+abstract class AnyAbstractImplementation implements AnyOldInterface {
+}
+
+abstract class AnotherOldAbstractClass {
+ protected abstract function aMethod(AnyOldInterface $argument);
+}
+
+class AnyOldSubclass extends AnyOldImplementation { }
+
+class AnyOldArgumentClass {
+ function aMethod($argument) { }
+}
+
+class AnyOldArgumentImplementation implements AnyOldArgumentInterface {
+ function aMethod(AnyOldInterface $argument) { }
+}
+
+class AnyOldTypeHintedClass implements AnyOldArgumentInterface {
+ function aMethod(AnyOldInterface $argument) { }
+}
+
+class AnyDescendentImplementation implements AnyDescendentInterface {
+ function aMethod() { }
+}
+
+class AnyOldOverloadedClass {
+ function __isset($key) { }
+ function __unset($key) { }
+}
+
+class AnyOldClassWithStaticMethods {
+ static function aStatic() { }
+ static function aStaticWithParameters($arg1, $arg2) { }
+}
+
+abstract class AnyOldAbstractClassWithAbstractMethods {
+ abstract function anAbstract();
+ abstract function anAbstractWithParameter($foo);
+ abstract function anAbstractWithMultipleParameters($foo, $bar);
+}
+
+class TestOfReflection extends UnitTestCase {
+
+ function testClassExistence() {
+ $reflection = new SimpleReflection('AnyOldLeafClass');
+ $this->assertTrue($reflection->classOrInterfaceExists());
+ $this->assertTrue($reflection->classOrInterfaceExistsSansAutoload());
+ $this->assertFalse($reflection->isAbstract());
+ $this->assertFalse($reflection->isInterface());
+ }
+
+ function testClassNonExistence() {
+ $reflection = new SimpleReflection('UnknownThing');
+ $this->assertFalse($reflection->classOrInterfaceExists());
+ $this->assertFalse($reflection->classOrInterfaceExistsSansAutoload());
+ }
+
+ function testDetectionOfAbstractClass() {
+ $reflection = new SimpleReflection('AnyOldClass');
+ $this->assertTrue($reflection->isAbstract());
+ }
+
+ function testDetectionOfFinalMethods() {
+ $reflection = new SimpleReflection('AnyOldClass');
+ $this->assertFalse($reflection->hasFinal());
+ $reflection = new SimpleReflection('AnyOldLeafClassWithAFinal');
+ $this->assertTrue($reflection->hasFinal());
+ }
+
+ function testFindingParentClass() {
+ $reflection = new SimpleReflection('AnyOldSubclass');
+ $this->assertEqual($reflection->getParent(), 'AnyOldImplementation');
+ }
+
+ function testInterfaceExistence() {
+ $reflection = new SimpleReflection('AnyOldInterface');
+ $this->assertTrue($reflection->classOrInterfaceExists());
+ $this->assertTrue($reflection->classOrInterfaceExistsSansAutoload());
+ $this->assertTrue($reflection->isInterface());
+ }
+
+ function testMethodsListFromClass() {
+ $reflection = new SimpleReflection('AnyOldClass');
+ $this->assertIdentical($reflection->getMethods(), array('aMethod'));
+ }
+
+ function testMethodsListFromInterface() {
+ $reflection = new SimpleReflection('AnyOldInterface');
+ $this->assertIdentical($reflection->getMethods(), array('aMethod'));
+ $this->assertIdentical($reflection->getInterfaceMethods(), array('aMethod'));
+ }
+
+ function testMethodsComeFromDescendentInterfacesASWell() {
+ $reflection = new SimpleReflection('AnyDescendentInterface');
+ $this->assertIdentical($reflection->getMethods(), array('aMethod'));
+ }
+
+ function testCanSeparateInterfaceMethodsFromOthers() {
+ $reflection = new SimpleReflection('AnyOldImplementation');
+ $this->assertIdentical($reflection->getMethods(), array('aMethod', 'extraMethod'));
+ $this->assertIdentical($reflection->getInterfaceMethods(), array('aMethod'));
+ }
+
+ function testMethodsComeFromDescendentInterfacesInAbstractClass() {
+ $reflection = new SimpleReflection('AnyAbstractImplementation');
+ $this->assertIdentical($reflection->getMethods(), array('aMethod'));
+ }
+
+ function testInterfaceHasOnlyItselfToImplement() {
+ $reflection = new SimpleReflection('AnyOldInterface');
+ $this->assertEqual(
+ $reflection->getInterfaces(),
+ array('AnyOldInterface'));
+ }
+
+ function testInterfacesListedForClass() {
+ $reflection = new SimpleReflection('AnyOldImplementation');
+ $this->assertEqual(
+ $reflection->getInterfaces(),
+ array('AnyOldInterface'));
+ }
+
+ function testInterfacesListedForSubclass() {
+ $reflection = new SimpleReflection('AnyOldSubclass');
+ $this->assertEqual(
+ $reflection->getInterfaces(),
+ array('AnyOldInterface'));
+ }
+
+ function testNoParameterCreationWhenNoInterface() {
+ $reflection = new SimpleReflection('AnyOldArgumentClass');
+ $function = $reflection->getSignature('aMethod');
+ if (version_compare(phpversion(), '5.0.2', '<=')) {
+ $this->assertEqual('function amethod()', strtolower($function));
+ } else {
+ $this->assertEqual('function aMethod()', $function);
+ }
+ }
+
+ function testParameterCreationWithoutTypeHinting() {
+ $reflection = new SimpleReflection('AnyOldArgumentImplementation');
+ $function = $reflection->getSignature('aMethod');
+ if (version_compare(phpversion(), '5.0.2', '<=')) {
+ $this->assertEqual('function amethod(AnyOldInterface $argument)', $function);
+ } else {
+ $this->assertEqual('function aMethod(AnyOldInterface $argument)', $function);
+ }
+ }
+
+ function testParameterCreationForTypeHinting() {
+ $reflection = new SimpleReflection('AnyOldTypeHintedClass');
+ $function = $reflection->getSignature('aMethod');
+ if (version_compare(phpversion(), '5.0.2', '<=')) {
+ $this->assertEqual('function amethod(AnyOldInterface $argument)', $function);
+ } else {
+ $this->assertEqual('function aMethod(AnyOldInterface $argument)', $function);
+ }
+ }
+
+ function testIssetFunctionSignature() {
+ $reflection = new SimpleReflection('AnyOldOverloadedClass');
+ $function = $reflection->getSignature('__isset');
+ if (version_compare(phpversion(), '5.1.0', '>=')) {
+ $this->assertEqual('function __isset($key)', $function);
+ } else {
+ $this->assertEqual('function __isset()', $function);
+ }
+ }
+
+ function testUnsetFunctionSignature() {
+ $reflection = new SimpleReflection('AnyOldOverloadedClass');
+ $function = $reflection->getSignature('__unset');
+ if (version_compare(phpversion(), '5.1.0', '>=')) {
+ $this->assertEqual('function __unset($key)', $function);
+ } else {
+ $this->assertEqual('function __unset()', $function);
+ }
+ }
+
+ function testProperlyReflectsTheFinalInterfaceWhenObjectImplementsAnExtendedInterface() {
+ $reflection = new SimpleReflection('AnyDescendentImplementation');
+ $interfaces = $reflection->getInterfaces();
+ $this->assertEqual(1, count($interfaces));
+ $this->assertEqual('AnyDescendentInterface', array_shift($interfaces));
+ }
+
+ function testCreatingSignatureForAbstractMethod() {
+ $reflection = new SimpleReflection('AnotherOldAbstractClass');
+ $this->assertEqual($reflection->getSignature('aMethod'), 'function aMethod(AnyOldInterface $argument)');
+ }
+
+ function testCanProperlyGenerateStaticMethodSignatures() {
+ $reflection = new SimpleReflection('AnyOldClassWithStaticMethods');
+ $this->assertEqual('static function aStatic()', $reflection->getSignature('aStatic'));
+ $this->assertEqual(
+ 'static function aStaticWithParameters($arg1, $arg2)',
+ $reflection->getSignature('aStaticWithParameters')
+ );
+ }
+}
+
+class TestOfReflectionWithTypeHints extends UnitTestCase {
+ function skip() {
+ $this->skipIf(version_compare(phpversion(), '5.1.0', '<'), 'Reflection with type hints only tested for PHP 5.1.0 and above');
+ }
+
+ function testParameterCreationForTypeHintingWithArray() {
+ eval('interface AnyOldArrayTypeHintedInterface {
+ function amethod(array $argument);
+ }
+ class AnyOldArrayTypeHintedClass implements AnyOldArrayTypeHintedInterface {
+ function amethod(array $argument) {}
+ }');
+ $reflection = new SimpleReflection('AnyOldArrayTypeHintedClass');
+ $function = $reflection->getSignature('amethod');
+ $this->assertEqual('function amethod(array $argument)', $function);
+ }
+}
+
+class TestOfAbstractsWithAbstractMethods extends UnitTestCase {
+ function testCanProperlyGenerateAbstractMethods() {
+ $reflection = new SimpleReflection('AnyOldAbstractClassWithAbstractMethods');
+ $this->assertEqual(
+ 'function anAbstract()',
+ $reflection->getSignature('anAbstract')
+ );
+ $this->assertEqual(
+ 'function anAbstractWithParameter($foo)',
+ $reflection->getSignature('anAbstractWithParameter')
+ );
+ $this->assertEqual(
+ 'function anAbstractWithMultipleParameters($foo, $bar)',
+ $reflection->getSignature('anAbstractWithMultipleParameters')
+ );
+ }
+}
+
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/remote_test.php b/vendors/simpletest/test/remote_test.php
new file mode 100644
index 000000000..efcccaf05
--- /dev/null
+++ b/vendors/simpletest/test/remote_test.php
@@ -0,0 +1,20 @@
+<?php
+// $Id: remote_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once('../remote.php');
+require_once('../reporter.php');
+
+// The following URL will depend on your own installation.
+if (isset($_SERVER['SCRIPT_URI'])) {
+ $base_uri = $_SERVER['SCRIPT_URI'];
+} elseif (isset($_SERVER['HTTP_HOST']) && isset($_SERVER['PHP_SELF'])) {
+ $base_uri = 'http://'. $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
+};
+$test_url = str_replace('remote_test.php', 'visual_test.php', $base_uri);
+
+$test = &new TestSuite('Remote tests');
+$test->addTestCase(new RemoteTestCase($test_url . '?xml=yes', $test_url . '?xml=yes&dry=yes'));
+if (SimpleReporter::inCli()) {
+ exit ($test->run(new TextReporter()) ? 0 : 1);
+}
+$test->run(new HtmlReporter());
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/shell_test.php b/vendors/simpletest/test/shell_test.php
new file mode 100644
index 000000000..6199272a1
--- /dev/null
+++ b/vendors/simpletest/test/shell_test.php
@@ -0,0 +1,38 @@
+<?php
+// $Id: shell_test.php 1529 2007-06-04 18:33:09Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../shell_tester.php');
+
+class TestOfShell extends UnitTestCase {
+
+ function testEcho() {
+ $shell = &new SimpleShell();
+ $this->assertIdentical($shell->execute('echo Hello'), 0);
+ $this->assertPattern('/Hello/', $shell->getOutput());
+ }
+
+ function testBadCommand() {
+ $shell = &new SimpleShell();
+ $this->assertNotEqual($ret = $shell->execute('blurgh! 2>&1'), 0);
+ }
+}
+
+class TestOfShellTesterAndShell extends ShellTestCase {
+
+ function testEcho() {
+ $this->assertTrue($this->execute('echo Hello'));
+ $this->assertExitCode(0);
+ $this->assertoutput('Hello');
+ }
+
+ function testFileExistence() {
+ $this->assertFileExists(dirname(__FILE__) . '/all_tests.php');
+ $this->assertFileNotExists('wibble');
+ }
+
+ function testFilePatterns() {
+ $this->assertFilePattern('/all[_ ]tests/i', dirname(__FILE__) . '/all_tests.php');
+ $this->assertNoFilePattern('/sputnik/i', dirname(__FILE__) . '/all_tests.php');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/shell_tester_test.php b/vendors/simpletest/test/shell_tester_test.php
new file mode 100644
index 000000000..e536dcebd
--- /dev/null
+++ b/vendors/simpletest/test/shell_tester_test.php
@@ -0,0 +1,42 @@
+<?php
+// $Id: shell_tester_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../shell_tester.php');
+Mock::generate('SimpleShell');
+
+class TestOfShellTestCase extends ShellTestCase {
+ var $_mock_shell = false;
+
+ function &_getShell() {
+ return $this->_mock_shell;
+ }
+
+ function testGenericEquality() {
+ $this->assertEqual('a', 'a');
+ $this->assertNotEqual('a', 'A');
+ }
+
+ function testExitCode() {
+ $this->_mock_shell = &new MockSimpleShell();
+ $this->_mock_shell->setReturnValue('execute', 0);
+ $this->_mock_shell->expectOnce('execute', array('ls'));
+ $this->assertTrue($this->execute('ls'));
+ $this->assertExitCode(0);
+ }
+
+ function testOutput() {
+ $this->_mock_shell = &new MockSimpleShell();
+ $this->_mock_shell->setReturnValue('execute', 0);
+ $this->_mock_shell->setReturnValue('getOutput', "Line 1\nLine 2\n");
+ $this->assertOutput("Line 1\nLine 2\n");
+ }
+
+ function testOutputPatterns() {
+ $this->_mock_shell = &new MockSimpleShell();
+ $this->_mock_shell->setReturnValue('execute', 0);
+ $this->_mock_shell->setReturnValue('getOutput', "Line 1\nLine 2\n");
+ $this->assertOutputPattern('/line/i');
+ $this->assertNoOutputPattern('/line 2/');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/simpletest_test.php b/vendors/simpletest/test/simpletest_test.php
new file mode 100644
index 000000000..bf98d9748
--- /dev/null
+++ b/vendors/simpletest/test/simpletest_test.php
@@ -0,0 +1,58 @@
+<?php
+// $Id: simpletest_test.php 1505 2007-04-30 23:39:59Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../simpletest.php');
+
+SimpleTest::ignore('ShouldNeverBeRunEither');
+
+class ShouldNeverBeRun extends UnitTestCase {
+ function testWithNoChanceOfSuccess() {
+ $this->fail('Should be ignored');
+ }
+}
+
+class ShouldNeverBeRunEither extends ShouldNeverBeRun { }
+
+class TestOfStackTrace extends UnitTestCase {
+
+ function testCanFindAssertInTrace() {
+ $trace = new SimpleStackTrace(array('assert'));
+ $this->assertEqual(
+ $trace->traceMethod(array(array(
+ 'file' => '/my_test.php',
+ 'line' => 24,
+ 'function' => 'assertSomething'))),
+ ' at [/my_test.php line 24]');
+ }
+}
+
+class DummyResource { }
+
+class TestOfContext extends UnitTestCase {
+
+ function testCurrentContextIsUnique() {
+ $this->assertReference(
+ SimpleTest::getContext(),
+ SimpleTest::getContext());
+ }
+
+ function testContextHoldsCurrentTestCase() {
+ $context = &SimpleTest::getContext();
+ $this->assertReference($this, $context->getTest());
+ }
+
+ function testResourceIsSingleInstanceWithContext() {
+ $context = &new SimpleTestContext();
+ $this->assertReference(
+ $context->get('DummyResource'),
+ $context->get('DummyResource'));
+ }
+
+ function testClearingContextResetsResources() {
+ $context = &new SimpleTestContext();
+ $resource = &$context->get('DummyResource');
+ $context->clear();
+ $this->assertClone($resource, $context->get('DummyResource'));
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/socket_test.php b/vendors/simpletest/test/socket_test.php
new file mode 100644
index 000000000..ce25be7d3
--- /dev/null
+++ b/vendors/simpletest/test/socket_test.php
@@ -0,0 +1,25 @@
+<?php
+// $Id: socket_test.php 1509 2007-05-08 22:11:49Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../socket.php');
+Mock::generate('SimpleSocket');
+
+class TestOfSimpleStickyError extends UnitTestCase {
+
+ function testSettingError() {
+ $error = new SimpleStickyError();
+ $this->assertFalse($error->isError());
+ $error->_setError('Ouch');
+ $this->assertTrue($error->isError());
+ $this->assertEqual($error->getError(), 'Ouch');
+ }
+
+ function testClearingError() {
+ $error = new SimpleStickyError();
+ $error->_setError('Ouch');
+ $this->assertTrue($error->isError());
+ $error->_clearError();
+ $this->assertFalse($error->isError());
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/support/collector/collectable.1 b/vendors/simpletest/test/support/collector/collectable.1
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendors/simpletest/test/support/collector/collectable.1
diff --git a/vendors/simpletest/test/support/collector/collectable.2 b/vendors/simpletest/test/support/collector/collectable.2
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/vendors/simpletest/test/support/collector/collectable.2
diff --git a/vendors/simpletest/test/support/empty_test_file.php b/vendors/simpletest/test/support/empty_test_file.php
new file mode 100644
index 000000000..31e3f7bed
--- /dev/null
+++ b/vendors/simpletest/test/support/empty_test_file.php
@@ -0,0 +1,3 @@
+<?php
+require_once(dirname(__FILE__) . '/../../autorun.php');
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/support/latin1_sample b/vendors/simpletest/test/support/latin1_sample
new file mode 100644
index 000000000..190352577
--- /dev/null
+++ b/vendors/simpletest/test/support/latin1_sample
@@ -0,0 +1 @@
+£¹²³¼½¾@¶øþðßæ«»¢µ \ No newline at end of file
diff --git a/vendors/simpletest/test/support/spl_examples.php b/vendors/simpletest/test/support/spl_examples.php
new file mode 100644
index 000000000..45add356c
--- /dev/null
+++ b/vendors/simpletest/test/support/spl_examples.php
@@ -0,0 +1,15 @@
+<?php
+ // $Id: spl_examples.php 1262 2006-02-05 19:35:31Z lastcraft $
+
+ class IteratorImplementation implements Iterator {
+ function current() { }
+ function next() { }
+ function key() { }
+ function valid() { }
+ function rewind() { }
+ }
+
+ class IteratorAggregateImplementation implements IteratorAggregate {
+ function getIterator() { }
+ }
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/support/supplementary_upload_sample.txt b/vendors/simpletest/test/support/supplementary_upload_sample.txt
new file mode 100644
index 000000000..d8aa9e810
--- /dev/null
+++ b/vendors/simpletest/test/support/supplementary_upload_sample.txt
@@ -0,0 +1 @@
+Some more text content \ No newline at end of file
diff --git a/vendors/simpletest/test/support/test1.php b/vendors/simpletest/test/support/test1.php
new file mode 100644
index 000000000..b414586d6
--- /dev/null
+++ b/vendors/simpletest/test/support/test1.php
@@ -0,0 +1,7 @@
+<?php
+class test1 extends UnitTestCase {
+ function test_pass(){
+ $this->assertEqual(3,1+2, "pass1");
+ }
+}
+?>
diff --git a/vendors/simpletest/test/support/upload_sample.txt b/vendors/simpletest/test/support/upload_sample.txt
new file mode 100644
index 000000000..ec98d7c5e
--- /dev/null
+++ b/vendors/simpletest/test/support/upload_sample.txt
@@ -0,0 +1 @@
+Sample for testing file upload \ No newline at end of file
diff --git a/vendors/simpletest/test/tag_test.php b/vendors/simpletest/test/tag_test.php
new file mode 100644
index 000000000..f81df64ea
--- /dev/null
+++ b/vendors/simpletest/test/tag_test.php
@@ -0,0 +1,554 @@
+<?php
+// $Id: tag_test.php 1509 2007-05-08 22:11:49Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../tag.php');
+require_once(dirname(__FILE__) . '/../encoding.php');
+Mock::generate('SimpleMultipartEncoding');
+
+class TestOfTag extends UnitTestCase {
+
+ function testStartValuesWithoutAdditionalContent() {
+ $tag = new SimpleTitleTag(array('a' => '1', 'b' => ''));
+ $this->assertEqual($tag->getTagName(), 'title');
+ $this->assertIdentical($tag->getAttribute('a'), '1');
+ $this->assertIdentical($tag->getAttribute('b'), '');
+ $this->assertIdentical($tag->getAttribute('c'), false);
+ $this->assertIdentical($tag->getContent(), '');
+ }
+
+ function testTitleContent() {
+ $tag = &new SimpleTitleTag(array());
+ $this->assertTrue($tag->expectEndTag());
+ $tag->addContent('Hello');
+ $tag->addContent('World');
+ $this->assertEqual($tag->getText(), 'HelloWorld');
+ }
+
+ function testMessyTitleContent() {
+ $tag = &new SimpleTitleTag(array());
+ $this->assertTrue($tag->expectEndTag());
+ $tag->addContent('<b>Hello</b>');
+ $tag->addContent('<em>World</em>');
+ $this->assertEqual($tag->getText(), 'HelloWorld');
+ }
+
+ function testTagWithNoEnd() {
+ $tag = &new SimpleTextTag(array());
+ $this->assertFalse($tag->expectEndTag());
+ }
+
+ function testAnchorHref() {
+ $tag = &new SimpleAnchorTag(array('href' => 'http://here/'));
+ $this->assertEqual($tag->getHref(), 'http://here/');
+
+ $tag = &new SimpleAnchorTag(array('href' => ''));
+ $this->assertIdentical($tag->getAttribute('href'), '');
+ $this->assertIdentical($tag->getHref(), '');
+
+ $tag = &new SimpleAnchorTag(array());
+ $this->assertIdentical($tag->getAttribute('href'), false);
+ $this->assertIdentical($tag->getHref(), '');
+ }
+
+ function testIsIdMatchesIdAttribute() {
+ $tag = &new SimpleAnchorTag(array('href' => 'http://here/', 'id' => 7));
+ $this->assertIdentical($tag->getAttribute('id'), '7');
+ $this->assertTrue($tag->isId(7));
+ }
+}
+
+class TestOfWidget extends UnitTestCase {
+
+ function testTextEmptyDefault() {
+ $tag = &new SimpleTextTag(array('type' => 'text'));
+ $this->assertIdentical($tag->getDefault(), '');
+ $this->assertIdentical($tag->getValue(), '');
+ }
+
+ function testSettingOfExternalLabel() {
+ $tag = &new SimpleTextTag(array('type' => 'text'));
+ $tag->setLabel('it');
+ $this->assertTrue($tag->isLabel('it'));
+ }
+
+ function testTextDefault() {
+ $tag = &new SimpleTextTag(array('value' => 'aaa'));
+ $this->assertEqual($tag->getDefault(), 'aaa');
+ $this->assertEqual($tag->getValue(), 'aaa');
+ }
+
+ function testSettingTextValue() {
+ $tag = &new SimpleTextTag(array('value' => 'aaa'));
+ $tag->setValue('bbb');
+ $this->assertEqual($tag->getValue(), 'bbb');
+ $tag->resetValue();
+ $this->assertEqual($tag->getValue(), 'aaa');
+ }
+
+ function testFailToSetHiddenValue() {
+ $tag = &new SimpleTextTag(array('value' => 'aaa', 'type' => 'hidden'));
+ $this->assertFalse($tag->setValue('bbb'));
+ $this->assertEqual($tag->getValue(), 'aaa');
+ }
+
+ function testSubmitDefaults() {
+ $tag = &new SimpleSubmitTag(array('type' => 'submit'));
+ $this->assertIdentical($tag->getName(), false);
+ $this->assertEqual($tag->getValue(), 'Submit');
+ $this->assertFalse($tag->setValue('Cannot set this'));
+ $this->assertEqual($tag->getValue(), 'Submit');
+ $this->assertEqual($tag->getLabel(), 'Submit');
+
+ $encoding = &new MockSimpleMultipartEncoding();
+ $encoding->expectNever('add');
+ $tag->write($encoding);
+ }
+
+ function testPopulatedSubmit() {
+ $tag = &new SimpleSubmitTag(
+ array('type' => 'submit', 'name' => 's', 'value' => 'Ok!'));
+ $this->assertEqual($tag->getName(), 's');
+ $this->assertEqual($tag->getValue(), 'Ok!');
+ $this->assertEqual($tag->getLabel(), 'Ok!');
+
+ $encoding = &new MockSimpleMultipartEncoding();
+ $encoding->expectOnce('add', array('s', 'Ok!'));
+ $tag->write($encoding);
+ }
+
+ function testImageSubmit() {
+ $tag = &new SimpleImageSubmitTag(
+ array('type' => 'image', 'name' => 's', 'alt' => 'Label'));
+ $this->assertEqual($tag->getName(), 's');
+ $this->assertEqual($tag->getLabel(), 'Label');
+
+ $encoding = &new MockSimpleMultipartEncoding();
+ $encoding->expectAt(0, 'add', array('s.x', 20));
+ $encoding->expectAt(1, 'add', array('s.y', 30));
+ $tag->write($encoding, 20, 30);
+ }
+
+ function testImageSubmitTitlePreferredOverAltForLabel() {
+ $tag = &new SimpleImageSubmitTag(
+ array('type' => 'image', 'name' => 's', 'alt' => 'Label', 'title' => 'Title'));
+ $this->assertEqual($tag->getLabel(), 'Title');
+ }
+
+ function testButton() {
+ $tag = &new SimpleButtonTag(
+ array('type' => 'submit', 'name' => 's', 'value' => 'do'));
+ $tag->addContent('I am a button');
+ $this->assertEqual($tag->getName(), 's');
+ $this->assertEqual($tag->getValue(), 'do');
+ $this->assertEqual($tag->getLabel(), 'I am a button');
+
+ $encoding = &new MockSimpleMultipartEncoding();
+ $encoding->expectOnce('add', array('s', 'do'));
+ $tag->write($encoding);
+ }
+}
+
+class TestOfTextArea extends UnitTestCase {
+
+ function testDefault() {
+ $tag = &new SimpleTextAreaTag(array('name' => 'a'));
+ $tag->addContent('Some text');
+ $this->assertEqual($tag->getName(), 'a');
+ $this->assertEqual($tag->getDefault(), 'Some text');
+ }
+
+ function testWrapping() {
+ $tag = &new SimpleTextAreaTag(array('cols' => '10', 'wrap' => 'physical'));
+ $tag->addContent("Lot's of text that should be wrapped");
+ $this->assertEqual(
+ $tag->getDefault(),
+ "Lot's of\r\ntext that\r\nshould be\r\nwrapped");
+ $tag->setValue("New long text\r\nwith two lines");
+ $this->assertEqual(
+ $tag->getValue(),
+ "New long\r\ntext\r\nwith two\r\nlines");
+ }
+
+ function testWrappingRemovesLeadingcariageReturn() {
+ $tag = &new SimpleTextAreaTag(array('cols' => '20', 'wrap' => 'physical'));
+ $tag->addContent("\rStuff");
+ $this->assertEqual($tag->getDefault(), 'Stuff');
+ $tag->setValue("\nNew stuff\n");
+ $this->assertEqual($tag->getValue(), "New stuff\r\n");
+ }
+
+ function testBreaksAreNewlineAndCarriageReturn() {
+ $tag = &new SimpleTextAreaTag(array('cols' => '10'));
+ $tag->addContent("Some\nText\rwith\r\nbreaks");
+ $this->assertEqual($tag->getValue(), "Some\r\nText\r\nwith\r\nbreaks");
+ }
+}
+
+class TestOfCheckbox extends UnitTestCase {
+
+ function testCanSetCheckboxToNamedValueWithBooleanTrue() {
+ $tag = &new SimpleCheckboxTag(array('name' => 'a', 'value' => 'A'));
+ $this->assertEqual($tag->getValue(), false);
+ $tag->setValue(true);
+ $this->assertIdentical($tag->getValue(), 'A');
+ }
+}
+
+class TestOfSelection extends UnitTestCase {
+
+ function testEmpty() {
+ $tag = &new SimpleSelectionTag(array('name' => 'a'));
+ $this->assertIdentical($tag->getValue(), '');
+ }
+
+ function testSingle() {
+ $tag = &new SimpleSelectionTag(array('name' => 'a'));
+ $option = &new SimpleOptionTag(array());
+ $option->addContent('AAA');
+ $tag->addTag($option);
+ $this->assertEqual($tag->getValue(), 'AAA');
+ }
+
+ function testSingleDefault() {
+ $tag = &new SimpleSelectionTag(array('name' => 'a'));
+ $option = &new SimpleOptionTag(array('selected' => ''));
+ $option->addContent('AAA');
+ $tag->addTag($option);
+ $this->assertEqual($tag->getValue(), 'AAA');
+ }
+
+ function testSingleMappedDefault() {
+ $tag = &new SimpleSelectionTag(array('name' => 'a'));
+ $option = &new SimpleOptionTag(array('selected' => '', 'value' => 'aaa'));
+ $option->addContent('AAA');
+ $tag->addTag($option);
+ $this->assertEqual($tag->getValue(), 'aaa');
+ }
+
+ function testStartsWithDefault() {
+ $tag = &new SimpleSelectionTag(array('name' => 'a'));
+ $a = &new SimpleOptionTag(array());
+ $a->addContent('AAA');
+ $tag->addTag($a);
+ $b = &new SimpleOptionTag(array('selected' => ''));
+ $b->addContent('BBB');
+ $tag->addTag($b);
+ $c = &new SimpleOptionTag(array());
+ $c->addContent('CCC');
+ $tag->addTag($c);
+ $this->assertEqual($tag->getValue(), 'BBB');
+ }
+
+ function testSettingOption() {
+ $tag = &new SimpleSelectionTag(array('name' => 'a'));
+ $a = &new SimpleOptionTag(array());
+ $a->addContent('AAA');
+ $tag->addTag($a);
+ $b = &new SimpleOptionTag(array('selected' => ''));
+ $b->addContent('BBB');
+ $tag->addTag($b);
+ $c = &new SimpleOptionTag(array());
+ $c->addContent('CCC');
+ $tag->setValue('AAA');
+ $this->assertEqual($tag->getValue(), 'AAA');
+ }
+
+ function testSettingMappedOption() {
+ $tag = &new SimpleSelectionTag(array('name' => 'a'));
+ $a = &new SimpleOptionTag(array('value' => 'aaa'));
+ $a->addContent('AAA');
+ $tag->addTag($a);
+ $b = &new SimpleOptionTag(array('value' => 'bbb', 'selected' => ''));
+ $b->addContent('BBB');
+ $tag->addTag($b);
+ $c = &new SimpleOptionTag(array('value' => 'ccc'));
+ $c->addContent('CCC');
+ $tag->addTag($c);
+ $tag->setValue('AAA');
+ $this->assertEqual($tag->getValue(), 'aaa');
+ $tag->setValue('ccc');
+ $this->assertEqual($tag->getValue(), 'ccc');
+ }
+
+ function testSelectionDespiteSpuriousWhitespace() {
+ $tag = &new SimpleSelectionTag(array('name' => 'a'));
+ $a = &new SimpleOptionTag(array());
+ $a->addContent(' AAA ');
+ $tag->addTag($a);
+ $b = &new SimpleOptionTag(array('selected' => ''));
+ $b->addContent(' BBB ');
+ $tag->addTag($b);
+ $c = &new SimpleOptionTag(array());
+ $c->addContent(' CCC ');
+ $tag->addTag($c);
+ $this->assertEqual($tag->getValue(), ' BBB ');
+ $tag->setValue('AAA');
+ $this->assertEqual($tag->getValue(), ' AAA ');
+ }
+
+ function testFailToSetIllegalOption() {
+ $tag = &new SimpleSelectionTag(array('name' => 'a'));
+ $a = &new SimpleOptionTag(array());
+ $a->addContent('AAA');
+ $tag->addTag($a);
+ $b = &new SimpleOptionTag(array('selected' => ''));
+ $b->addContent('BBB');
+ $tag->addTag($b);
+ $c = &new SimpleOptionTag(array());
+ $c->addContent('CCC');
+ $tag->addTag($c);
+ $this->assertFalse($tag->setValue('Not present'));
+ $this->assertEqual($tag->getValue(), 'BBB');
+ }
+
+ function testNastyOptionValuesThatLookLikeFalse() {
+ $tag = &new SimpleSelectionTag(array('name' => 'a'));
+ $a = &new SimpleOptionTag(array('value' => '1'));
+ $a->addContent('One');
+ $tag->addTag($a);
+ $b = &new SimpleOptionTag(array('value' => '0'));
+ $b->addContent('Zero');
+ $tag->addTag($b);
+ $this->assertIdentical($tag->getValue(), '1');
+ $tag->setValue('Zero');
+ $this->assertIdentical($tag->getValue(), '0');
+ }
+
+ function testBlankOption() {
+ $tag = &new SimpleSelectionTag(array('name' => 'A'));
+ $a = &new SimpleOptionTag(array());
+ $tag->addTag($a);
+ $b = &new SimpleOptionTag(array());
+ $b->addContent('b');
+ $tag->addTag($b);
+ $this->assertIdentical($tag->getValue(), '');
+ $tag->setValue('b');
+ $this->assertIdentical($tag->getValue(), 'b');
+ $tag->setValue('');
+ $this->assertIdentical($tag->getValue(), '');
+ }
+
+ function testMultipleDefaultWithNoSelections() {
+ $tag = &new MultipleSelectionTag(array('name' => 'a', 'multiple' => ''));
+ $a = &new SimpleOptionTag(array());
+ $a->addContent('AAA');
+ $tag->addTag($a);
+ $b = &new SimpleOptionTag(array());
+ $b->addContent('BBB');
+ $tag->addTag($b);
+ $this->assertIdentical($tag->getDefault(), array());
+ $this->assertIdentical($tag->getValue(), array());
+ }
+
+ function testMultipleDefaultWithSelections() {
+ $tag = &new MultipleSelectionTag(array('name' => 'a', 'multiple' => ''));
+ $a = &new SimpleOptionTag(array('selected' => ''));
+ $a->addContent('AAA');
+ $tag->addTag($a);
+ $b = &new SimpleOptionTag(array('selected' => ''));
+ $b->addContent('BBB');
+ $tag->addTag($b);
+ $this->assertIdentical($tag->getDefault(), array('AAA', 'BBB'));
+ $this->assertIdentical($tag->getValue(), array('AAA', 'BBB'));
+ }
+
+ function testSettingMultiple() {
+ $tag = &new MultipleSelectionTag(array('name' => 'a', 'multiple' => ''));
+ $a = &new SimpleOptionTag(array('selected' => ''));
+ $a->addContent('AAA');
+ $tag->addTag($a);
+ $b = &new SimpleOptionTag(array());
+ $b->addContent('BBB');
+ $tag->addTag($b);
+ $c = &new SimpleOptionTag(array('selected' => '', 'value' => 'ccc'));
+ $c->addContent('CCC');
+ $tag->addTag($c);
+ $this->assertIdentical($tag->getDefault(), array('AAA', 'ccc'));
+ $this->assertTrue($tag->setValue(array('BBB', 'ccc')));
+ $this->assertIdentical($tag->getValue(), array('BBB', 'ccc'));
+ $this->assertTrue($tag->setValue(array()));
+ $this->assertIdentical($tag->getValue(), array());
+ }
+
+ function testFailToSetIllegalOptionsInMultiple() {
+ $tag = &new MultipleSelectionTag(array('name' => 'a', 'multiple' => ''));
+ $a = &new SimpleOptionTag(array('selected' => ''));
+ $a->addContent('AAA');
+ $tag->addTag($a);
+ $b = &new SimpleOptionTag(array());
+ $b->addContent('BBB');
+ $tag->addTag($b);
+ $this->assertFalse($tag->setValue(array('CCC')));
+ $this->assertTrue($tag->setValue(array('AAA', 'BBB')));
+ $this->assertFalse($tag->setValue(array('AAA', 'CCC')));
+ }
+}
+
+class TestOfRadioGroup extends UnitTestCase {
+
+ function testEmptyGroup() {
+ $group = &new SimpleRadioGroup();
+ $this->assertIdentical($group->getDefault(), false);
+ $this->assertIdentical($group->getValue(), false);
+ $this->assertFalse($group->setValue('a'));
+ }
+
+ function testReadingSingleButtonGroup() {
+ $group = &new SimpleRadioGroup();
+ $group->addWidget(new SimpleRadioButtonTag(
+ array('value' => 'A', 'checked' => '')));
+ $this->assertIdentical($group->getDefault(), 'A');
+ $this->assertIdentical($group->getValue(), 'A');
+ }
+
+ function testReadingMultipleButtonGroup() {
+ $group = &new SimpleRadioGroup();
+ $group->addWidget(new SimpleRadioButtonTag(
+ array('value' => 'A')));
+ $group->addWidget(new SimpleRadioButtonTag(
+ array('value' => 'B', 'checked' => '')));
+ $this->assertIdentical($group->getDefault(), 'B');
+ $this->assertIdentical($group->getValue(), 'B');
+ }
+
+ function testFailToSetUnlistedValue() {
+ $group = &new SimpleRadioGroup();
+ $group->addWidget(new SimpleRadioButtonTag(array('value' => 'z')));
+ $this->assertFalse($group->setValue('a'));
+ $this->assertIdentical($group->getValue(), false);
+ }
+
+ function testSettingNewValueClearsTheOldOne() {
+ $group = &new SimpleRadioGroup();
+ $group->addWidget(new SimpleRadioButtonTag(
+ array('value' => 'A')));
+ $group->addWidget(new SimpleRadioButtonTag(
+ array('value' => 'B', 'checked' => '')));
+ $this->assertTrue($group->setValue('A'));
+ $this->assertIdentical($group->getValue(), 'A');
+ }
+
+ function testIsIdMatchesAnyWidgetInSet() {
+ $group = &new SimpleRadioGroup();
+ $group->addWidget(new SimpleRadioButtonTag(
+ array('value' => 'A', 'id' => 'i1')));
+ $group->addWidget(new SimpleRadioButtonTag(
+ array('value' => 'B', 'id' => 'i2')));
+ $this->assertFalse($group->isId('i0'));
+ $this->assertTrue($group->isId('i1'));
+ $this->assertTrue($group->isId('i2'));
+ }
+
+ function testIsLabelMatchesAnyWidgetInSet() {
+ $group = &new SimpleRadioGroup();
+ $button1 = &new SimpleRadioButtonTag(array('value' => 'A'));
+ $button1->setLabel('one');
+ $group->addWidget($button1);
+ $button2 = &new SimpleRadioButtonTag(array('value' => 'B'));
+ $button2->setLabel('two');
+ $group->addWidget($button2);
+ $this->assertFalse($group->isLabel('three'));
+ $this->assertTrue($group->isLabel('one'));
+ $this->assertTrue($group->isLabel('two'));
+ }
+}
+
+class TestOfTagGroup extends UnitTestCase {
+
+ function testReadingMultipleCheckboxGroup() {
+ $group = &new SimpleCheckboxGroup();
+ $group->addWidget(new SimpleCheckboxTag(array('value' => 'A')));
+ $group->addWidget(new SimpleCheckboxTag(
+ array('value' => 'B', 'checked' => '')));
+ $this->assertIdentical($group->getDefault(), 'B');
+ $this->assertIdentical($group->getValue(), 'B');
+ }
+
+ function testReadingMultipleUncheckedItems() {
+ $group = &new SimpleCheckboxGroup();
+ $group->addWidget(new SimpleCheckboxTag(array('value' => 'A')));
+ $group->addWidget(new SimpleCheckboxTag(array('value' => 'B')));
+ $this->assertIdentical($group->getDefault(), false);
+ $this->assertIdentical($group->getValue(), false);
+ }
+
+ function testReadingMultipleCheckedItems() {
+ $group = &new SimpleCheckboxGroup();
+ $group->addWidget(new SimpleCheckboxTag(
+ array('value' => 'A', 'checked' => '')));
+ $group->addWidget(new SimpleCheckboxTag(
+ array('value' => 'B', 'checked' => '')));
+ $this->assertIdentical($group->getDefault(), array('A', 'B'));
+ $this->assertIdentical($group->getValue(), array('A', 'B'));
+ }
+
+ function testSettingSingleValue() {
+ $group = &new SimpleCheckboxGroup();
+ $group->addWidget(new SimpleCheckboxTag(array('value' => 'A')));
+ $group->addWidget(new SimpleCheckboxTag(array('value' => 'B')));
+ $this->assertTrue($group->setValue('A'));
+ $this->assertIdentical($group->getValue(), 'A');
+ $this->assertTrue($group->setValue('B'));
+ $this->assertIdentical($group->getValue(), 'B');
+ }
+
+ function testSettingMultipleValues() {
+ $group = &new SimpleCheckboxGroup();
+ $group->addWidget(new SimpleCheckboxTag(array('value' => 'A')));
+ $group->addWidget(new SimpleCheckboxTag(array('value' => 'B')));
+ $this->assertTrue($group->setValue(array('A', 'B')));
+ $this->assertIdentical($group->getValue(), array('A', 'B'));
+ }
+
+ function testSettingNoValue() {
+ $group = &new SimpleCheckboxGroup();
+ $group->addWidget(new SimpleCheckboxTag(array('value' => 'A')));
+ $group->addWidget(new SimpleCheckboxTag(array('value' => 'B')));
+ $this->assertTrue($group->setValue(false));
+ $this->assertIdentical($group->getValue(), false);
+ }
+
+ function testIsIdMatchesAnyIdInSet() {
+ $group = &new SimpleCheckboxGroup();
+ $group->addWidget(new SimpleCheckboxTag(array('id' => 1, 'value' => 'A')));
+ $group->addWidget(new SimpleCheckboxTag(array('id' => 2, 'value' => 'B')));
+ $this->assertFalse($group->isId(0));
+ $this->assertTrue($group->isId(1));
+ $this->assertTrue($group->isId(2));
+ }
+}
+
+class TestOfUploadWidget extends UnitTestCase {
+
+ function testValueIsFilePath() {
+ $upload = &new SimpleUploadTag(array('name' => 'a'));
+ $upload->setValue(dirname(__FILE__) . '/support/upload_sample.txt');
+ $this->assertEqual($upload->getValue(), dirname(__FILE__) . '/support/upload_sample.txt');
+ }
+
+ function testSubmitsFileContents() {
+ $encoding = &new MockSimpleMultipartEncoding();
+ $encoding->expectOnce('attach', array(
+ 'a',
+ 'Sample for testing file upload',
+ 'upload_sample.txt'));
+ $upload = &new SimpleUploadTag(array('name' => 'a'));
+ $upload->setValue(dirname(__FILE__) . '/support/upload_sample.txt');
+ $upload->write($encoding);
+ }
+}
+
+class TestOfLabelTag extends UnitTestCase {
+
+ function testLabelShouldHaveAnEndTag() {
+ $label = &new SimpleLabelTag(array());
+ $this->assertTrue($label->expectEndTag());
+ }
+
+ function testContentIsTextOnly() {
+ $label = &new SimpleLabelTag(array());
+ $label->addContent('Here <tag>are</tag> words');
+ $this->assertEqual($label->getText(), 'Here are words');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/test_with_parse_error.php b/vendors/simpletest/test/test_with_parse_error.php
new file mode 100644
index 000000000..41a5832a5
--- /dev/null
+++ b/vendors/simpletest/test/test_with_parse_error.php
@@ -0,0 +1,8 @@
+<?php
+ // $Id: test_with_parse_error.php 901 2005-01-24 00:32:14Z lastcraft $
+
+ class TestCaseWithParseError extends UnitTestCase {
+ wibble
+ }
+
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/unit_tester_test.php b/vendors/simpletest/test/unit_tester_test.php
new file mode 100644
index 000000000..5fe78fe91
--- /dev/null
+++ b/vendors/simpletest/test/unit_tester_test.php
@@ -0,0 +1,55 @@
+<?php
+// $Id: unit_tester_test.php 1509 2007-05-08 22:11:49Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+
+class ReferenceForTesting {
+}
+
+class TestOfUnitTester extends UnitTestCase {
+
+ function testAssertTrueReturnsAssertionAsBoolean() {
+ $this->assertTrue($this->assertTrue(true));
+ }
+
+ function testAssertFalseReturnsAssertionAsBoolean() {
+ $this->assertTrue($this->assertFalse(false));
+ }
+
+ function testAssertEqualReturnsAssertionAsBoolean() {
+ $this->assertTrue($this->assertEqual(5, 5));
+ }
+
+ function testAssertIdenticalReturnsAssertionAsBoolean() {
+ $this->assertTrue($this->assertIdentical(5, 5));
+ }
+
+ function testCoreAssertionsDoNotThrowErrors() {
+ $this->assertIsA($this, 'UnitTestCase');
+ $this->assertNotA($this, 'WebTestCase');
+ }
+
+ function testReferenceAssertionOnObjects() {
+ $a = &new ReferenceForTesting();
+ $b = &$a;
+ $this->assertReference($a, $b);
+ }
+
+ function testReferenceAssertionOnScalars() {
+ $a = 25;
+ $b = &$a;
+ $this->assertReference($a, $b);
+ }
+
+ function testCloneOnObjects() {
+ $a = &new ReferenceForTesting();
+ $b = &new ReferenceForTesting();
+ $this->assertClone($a, $b);
+ }
+
+ function testCloneOnScalars() {
+ $a = 25;
+ $b = 25;
+ $this->assertClone($a, $b);
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/unit_tests.php b/vendors/simpletest/test/unit_tests.php
new file mode 100644
index 000000000..04dbc46ca
--- /dev/null
+++ b/vendors/simpletest/test/unit_tests.php
@@ -0,0 +1,55 @@
+<?php
+// $Id: unit_tests.php 1661 2008-02-26 21:04:31Z pp11 $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../unit_tester.php');
+require_once(dirname(__FILE__) . '/../shell_tester.php');
+require_once(dirname(__FILE__) . '/../mock_objects.php');
+require_once(dirname(__FILE__) . '/../web_tester.php');
+require_once(dirname(__FILE__) . '/../extensions/pear_test_case.php');
+require_once(dirname(__FILE__) . '/../extensions/phpunit_test_case.php');
+
+class UnitTests extends TestSuite {
+ function UnitTests() {
+ $this->TestSuite('Unit tests');
+ $path = dirname(__FILE__);
+ $this->addFile($path . '/errors_test.php');
+ if (version_compare(phpversion(), '5') >= 0) {
+ $this->addFile($path . '/exceptions_test.php');
+ }
+ $this->addFile($path . '/autorun_test.php');
+ $this->addFile($path . '/compatibility_test.php');
+ $this->addFile($path . '/simpletest_test.php');
+ $this->addFile($path . '/dumper_test.php');
+ $this->addFile($path . '/expectation_test.php');
+ $this->addFile($path . '/unit_tester_test.php');
+ if (version_compare(phpversion(), '5', '>=')) {
+ $this->addFile($path . '/reflection_php5_test.php');
+ } else {
+ $this->addFile($path . '/reflection_php4_test.php');
+ }
+ $this->addFile($path . '/mock_objects_test.php');
+ if (version_compare(phpversion(), '5', '>=')) {
+ $this->addFile($path . '/interfaces_test.php');
+ }
+ $this->addFile($path . '/collector_test.php');
+ $this->addFile($path . '/adapter_test.php');
+ $this->addFile($path . '/socket_test.php');
+ $this->addFile($path . '/encoding_test.php');
+ $this->addFile($path . '/url_test.php');
+ $this->addFile($path . '/cookies_test.php');
+ $this->addFile($path . '/http_test.php');
+ $this->addFile($path . '/authentication_test.php');
+ $this->addFile($path . '/user_agent_test.php');
+ $this->addFile($path . '/parser_test.php');
+ $this->addFile($path . '/tag_test.php');
+ $this->addFile($path . '/form_test.php');
+ $this->addFile($path . '/page_test.php');
+ $this->addFile($path . '/frames_test.php');
+ $this->addFile($path . '/browser_test.php');
+ $this->addFile($path . '/web_tester_test.php');
+ $this->addFile($path . '/shell_tester_test.php');
+ $this->addFile($path . '/xml_test.php');
+ $this->addFile($path . '/../extensions/testdox/test.php');
+ }
+}
+?>
diff --git a/vendors/simpletest/test/url_test.php b/vendors/simpletest/test/url_test.php
new file mode 100644
index 000000000..550717038
--- /dev/null
+++ b/vendors/simpletest/test/url_test.php
@@ -0,0 +1,443 @@
+<?php
+// $Id: url_test.php 1598 2007-12-24 10:44:09Z pp11 $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../url.php');
+
+class TestOfUrl extends UnitTestCase {
+
+ function testDefaultUrl() {
+ $url = new SimpleUrl('');
+ $this->assertEqual($url->getScheme(), '');
+ $this->assertEqual($url->getHost(), '');
+ $this->assertEqual($url->getScheme('http'), 'http');
+ $this->assertEqual($url->getHost('localhost'), 'localhost');
+ $this->assertEqual($url->getPath(), '');
+ }
+
+ function testBasicParsing() {
+ $url = new SimpleUrl('https://www.lastcraft.com/test/');
+ $this->assertEqual($url->getScheme(), 'https');
+ $this->assertEqual($url->getHost(), 'www.lastcraft.com');
+ $this->assertEqual($url->getPath(), '/test/');
+ }
+
+ function testRelativeUrls() {
+ $url = new SimpleUrl('../somewhere.php');
+ $this->assertEqual($url->getScheme(), false);
+ $this->assertEqual($url->getHost(), false);
+ $this->assertEqual($url->getPath(), '../somewhere.php');
+ }
+
+ function testParseBareParameter() {
+ $url = new SimpleUrl('?a');
+ $this->assertEqual($url->getPath(), '');
+ $this->assertEqual($url->getEncodedRequest(), '?a');
+ $url->addRequestParameter('x', 'X');
+ $this->assertEqual($url->getEncodedRequest(), '?a=&x=X');
+ }
+
+ function testParseEmptyParameter() {
+ $url = new SimpleUrl('?a=');
+ $this->assertEqual($url->getPath(), '');
+ $this->assertEqual($url->getEncodedRequest(), '?a=');
+ $url->addRequestParameter('x', 'X');
+ $this->assertEqual($url->getEncodedRequest(), '?a=&x=X');
+ }
+
+ function testParseParameterPair() {
+ $url = new SimpleUrl('?a=A');
+ $this->assertEqual($url->getPath(), '');
+ $this->assertEqual($url->getEncodedRequest(), '?a=A');
+ $url->addRequestParameter('x', 'X');
+ $this->assertEqual($url->getEncodedRequest(), '?a=A&x=X');
+ }
+
+ function testParseMultipleParameters() {
+ $url = new SimpleUrl('?a=A&b=B');
+ $this->assertEqual($url->getEncodedRequest(), '?a=A&b=B');
+ $url->addRequestParameter('x', 'X');
+ $this->assertEqual($url->getEncodedRequest(), '?a=A&b=B&x=X');
+ }
+
+ function testParsingParameterMixture() {
+ $url = new SimpleUrl('?a=A&b=&c');
+ $this->assertEqual($url->getEncodedRequest(), '?a=A&b=&c');
+ $url->addRequestParameter('x', 'X');
+ $this->assertEqual($url->getEncodedRequest(), '?a=A&b=&c=&x=X');
+ }
+
+ function testAddParametersFromScratch() {
+ $url = new SimpleUrl('');
+ $url->addRequestParameter('a', 'A');
+ $this->assertEqual($url->getEncodedRequest(), '?a=A');
+ $url->addRequestParameter('b', 'B');
+ $this->assertEqual($url->getEncodedRequest(), '?a=A&b=B');
+ $url->addRequestParameter('a', 'aaa');
+ $this->assertEqual($url->getEncodedRequest(), '?a=A&b=B&a=aaa');
+ }
+
+ function testClearingParameters() {
+ $url = new SimpleUrl('');
+ $url->addRequestParameter('a', 'A');
+ $url->clearRequest();
+ $this->assertIdentical($url->getEncodedRequest(), '');
+ }
+
+ function testEncodingParameters() {
+ $url = new SimpleUrl('');
+ $url->addRequestParameter('a', '?!"\'#~@[]{}:;<>,./|£$%^&*()_+-=');
+ $this->assertIdentical(
+ $request = $url->getEncodedRequest(),
+ '?a=%3F%21%22%27%23%7E%40%5B%5D%7B%7D%3A%3B%3C%3E%2C.%2F%7C%A3%24%25%5E%26%2A%28%29_%2B-%3D');
+ }
+
+ function testDecodingParameters() {
+ $url = new SimpleUrl('?a=%3F%21%22%27%23%7E%40%5B%5D%7B%7D%3A%3B%3C%3E%2C.%2F%7C%A3%24%25%5E%26%2A%28%29_%2B-%3D');
+ $this->assertEqual(
+ $url->getEncodedRequest(),
+ '?a=' . urlencode('?!"\'#~@[]{}:;<>,./|£$%^&*()_+-='));
+ }
+
+ function testUrlInQueryDoesNotConfuseParsing() {
+ $url = new SimpleUrl('wibble/login.php?url=http://www.google.com/moo/');
+ $this->assertFalse($url->getScheme());
+ $this->assertFalse($url->getHost());
+ $this->assertEqual($url->getPath(), 'wibble/login.php');
+ $this->assertEqual($url->getEncodedRequest(), '?url=http://www.google.com/moo/');
+ }
+
+ function testSettingCordinates() {
+ $url = new SimpleUrl('');
+ $url->setCoordinates('32', '45');
+ $this->assertIdentical($url->getX(), 32);
+ $this->assertIdentical($url->getY(), 45);
+ $this->assertEqual($url->getEncodedRequest(), '');
+ }
+
+ function testParseCordinates() {
+ $url = new SimpleUrl('?32,45');
+ $this->assertIdentical($url->getX(), 32);
+ $this->assertIdentical($url->getY(), 45);
+ }
+
+ function testClearingCordinates() {
+ $url = new SimpleUrl('?32,45');
+ $url->setCoordinates();
+ $this->assertIdentical($url->getX(), false);
+ $this->assertIdentical($url->getY(), false);
+ }
+
+ function testParsingParameterCordinateMixture() {
+ $url = new SimpleUrl('?a=A&b=&c?32,45');
+ $this->assertIdentical($url->getX(), 32);
+ $this->assertIdentical($url->getY(), 45);
+ $this->assertEqual($url->getEncodedRequest(), '?a=A&b=&c');
+ }
+
+ function testParsingParameterWithBadCordinates() {
+ $url = new SimpleUrl('?a=A&b=&c?32');
+ $this->assertIdentical($url->getX(), false);
+ $this->assertIdentical($url->getY(), false);
+ $this->assertEqual($url->getEncodedRequest(), '?a=A&b=&c?32');
+ }
+
+ function testPageSplitting() {
+ $url = new SimpleUrl('./here/../there/somewhere.php');
+ $this->assertEqual($url->getPath(), './here/../there/somewhere.php');
+ $this->assertEqual($url->getPage(), 'somewhere.php');
+ $this->assertEqual($url->getBasePath(), './here/../there/');
+ }
+
+ function testAbsolutePathPageSplitting() {
+ $url = new SimpleUrl("http://host.com/here/there/somewhere.php");
+ $this->assertEqual($url->getPath(), "/here/there/somewhere.php");
+ $this->assertEqual($url->getPage(), "somewhere.php");
+ $this->assertEqual($url->getBasePath(), "/here/there/");
+ }
+
+ function testSplittingUrlWithNoPageGivesEmptyPage() {
+ $url = new SimpleUrl('/here/there/');
+ $this->assertEqual($url->getPath(), '/here/there/');
+ $this->assertEqual($url->getPage(), '');
+ $this->assertEqual($url->getBasePath(), '/here/there/');
+ }
+
+ function testPathNormalisation() {
+ $this->assertEqual(
+ SimpleUrl::normalisePath('https://host.com/I/am/here/../there/somewhere.php'),
+ 'https://host.com/I/am/there/somewhere.php');
+ }
+
+ // regression test for #1535407
+ function testPathNormalisationWithSinglePeriod() {
+ $this->assertEqual(
+ SimpleUrl::normalisePath('https://host.com/I/am/here/./../there/somewhere.php'),
+ 'https://host.com/I/am/there/somewhere.php');
+ }
+
+ // regression test for #1852413
+ function testHostnameExtractedFromUContainingAtSign() {
+ $url = new SimpleUrl("http://localhost/name@example.com");
+ $this->assertEqual($url->getScheme(), "http");
+ $this->assertEqual($url->getUsername(), "");
+ $this->assertEqual($url->getPassword(), "");
+ $this->assertEqual($url->getHost(), "localhost");
+ $this->assertEqual($url->getPath(), "/name@example.com");
+ }
+
+ function testHostnameInLocalhost() {
+ $url = new SimpleUrl("http://localhost/name/example.com");
+ $this->assertEqual($url->getScheme(), "http");
+ $this->assertEqual($url->getUsername(), "");
+ $this->assertEqual($url->getPassword(), "");
+ $this->assertEqual($url->getHost(), "localhost");
+ $this->assertEqual($url->getPath(), "/name/example.com");
+ }
+
+ function testUsernameAndPasswordAreUrlDecoded() {
+ $url = new SimpleUrl('http://' . urlencode('test@test') .
+ ':' . urlencode('$!£@*&%') . '@www.lastcraft.com');
+ $this->assertEqual($url->getUsername(), 'test@test');
+ $this->assertEqual($url->getPassword(), '$!£@*&%');
+ }
+
+ function testBlitz() {
+ $this->assertUrl(
+ "https://username:password@www.somewhere.com:243/this/that/here.php?a=1&b=2#anchor",
+ array("https", "username", "password", "www.somewhere.com", 243, "/this/that/here.php", "com", "?a=1&b=2", "anchor"),
+ array("a" => "1", "b" => "2"));
+ $this->assertUrl(
+ "username:password@www.somewhere.com/this/that/here.php?a=1",
+ array(false, "username", "password", "www.somewhere.com", false, "/this/that/here.php", "com", "?a=1", false),
+ array("a" => "1"));
+ $this->assertUrl(
+ "username:password@somewhere.com:243?1,2",
+ array(false, "username", "password", "somewhere.com", 243, "/", "com", "", false),
+ array(),
+ array(1, 2));
+ $this->assertUrl(
+ "https://www.somewhere.com",
+ array("https", false, false, "www.somewhere.com", false, "/", "com", "", false));
+ $this->assertUrl(
+ "username@www.somewhere.com:243#anchor",
+ array(false, "username", false, "www.somewhere.com", 243, "/", "com", "", "anchor"));
+ $this->assertUrl(
+ "/this/that/here.php?a=1&b=2?3,4",
+ array(false, false, false, false, false, "/this/that/here.php", false, "?a=1&b=2", false),
+ array("a" => "1", "b" => "2"),
+ array(3, 4));
+ $this->assertUrl(
+ "username@/here.php?a=1&b=2",
+ array(false, "username", false, false, false, "/here.php", false, "?a=1&b=2", false),
+ array("a" => "1", "b" => "2"));
+ }
+
+ function testAmbiguousHosts() {
+ $this->assertUrl(
+ "tigger",
+ array(false, false, false, false, false, "tigger", false, "", false));
+ $this->assertUrl(
+ "/tigger",
+ array(false, false, false, false, false, "/tigger", false, "", false));
+ $this->assertUrl(
+ "//tigger",
+ array(false, false, false, "tigger", false, "/", false, "", false));
+ $this->assertUrl(
+ "//tigger/",
+ array(false, false, false, "tigger", false, "/", false, "", false));
+ $this->assertUrl(
+ "tigger.com",
+ array(false, false, false, "tigger.com", false, "/", "com", "", false));
+ $this->assertUrl(
+ "me.net/tigger",
+ array(false, false, false, "me.net", false, "/tigger", "net", "", false));
+ }
+
+ function testAsString() {
+ $this->assertPreserved('https://www.here.com');
+ $this->assertPreserved('http://me:secret@www.here.com');
+ $this->assertPreserved('http://here/there');
+ $this->assertPreserved('http://here/there?a=A&b=B');
+ $this->assertPreserved('http://here/there?a=1&a=2');
+ $this->assertPreserved('http://here/there?a=1&a=2?9,8');
+ $this->assertPreserved('http://host?a=1&a=2');
+ $this->assertPreserved('http://host#stuff');
+ $this->assertPreserved('http://me:secret@www.here.com/a/b/c/here.html?a=A?7,6');
+ $this->assertPreserved('http://www.here.com/?a=A__b=B');
+ }
+
+ function assertUrl($raw, $parts, $params = false, $coords = false) {
+ if (! is_array($params)) {
+ $params = array();
+ }
+ $url = new SimpleUrl($raw);
+ $this->assertIdentical($url->getScheme(), $parts[0], "[$raw] scheme -> %s");
+ $this->assertIdentical($url->getUsername(), $parts[1], "[$raw] username -> %s");
+ $this->assertIdentical($url->getPassword(), $parts[2], "[$raw] password -> %s");
+ $this->assertIdentical($url->getHost(), $parts[3], "[$raw] host -> %s");
+ $this->assertIdentical($url->getPort(), $parts[4], "[$raw] port -> %s");
+ $this->assertIdentical($url->getPath(), $parts[5], "[$raw] path -> %s");
+ $this->assertIdentical($url->getTld(), $parts[6], "[$raw] tld -> %s");
+ $this->assertIdentical($url->getEncodedRequest(), $parts[7], "[$raw] encoded -> %s");
+ $this->assertIdentical($url->getFragment(), $parts[8], "[$raw] fragment -> %s");
+ if ($coords) {
+ $this->assertIdentical($url->getX(), $coords[0], "[$raw] x -> %s");
+ $this->assertIdentical($url->getY(), $coords[1], "[$raw] y -> %s");
+ }
+ }
+
+ function testUrlWithTwoSlashesInPath() {
+ $url = new SimpleUrl('/article/categoryedit/insert//');
+ $this->assertEqual($url->getPath(), '/article/categoryedit/insert//');
+ }
+
+ function assertPreserved($string) {
+ $url = new SimpleUrl($string);
+ $this->assertEqual($url->asString(), $string);
+ }
+}
+
+class TestOfAbsoluteUrls extends UnitTestCase {
+
+ function testDirectoriesAfterFilename() {
+ $string = '../../index.php/foo/bar';
+ $url = new SimpleUrl($string);
+ $this->assertEqual($url->asString(), $string);
+
+ $absolute = $url->makeAbsolute('http://www.domain.com/some/path/');
+ $this->assertEqual($absolute->asString(), 'http://www.domain.com/index.php/foo/bar');
+ }
+
+ function testMakingAbsolute() {
+ $url = new SimpleUrl('../there/somewhere.php');
+ $this->assertEqual($url->getPath(), '../there/somewhere.php');
+ $absolute = $url->makeAbsolute('https://host.com:1234/I/am/here/');
+ $this->assertEqual($absolute->getScheme(), 'https');
+ $this->assertEqual($absolute->getHost(), 'host.com');
+ $this->assertEqual($absolute->getPort(), 1234);
+ $this->assertEqual($absolute->getPath(), '/I/am/there/somewhere.php');
+ }
+
+ function testMakingAnEmptyUrlAbsolute() {
+ $url = new SimpleUrl('');
+ $this->assertEqual($url->getPath(), '');
+ $absolute = $url->makeAbsolute('http://host.com/I/am/here/page.html');
+ $this->assertEqual($absolute->getScheme(), 'http');
+ $this->assertEqual($absolute->getHost(), 'host.com');
+ $this->assertEqual($absolute->getPath(), '/I/am/here/page.html');
+ }
+
+ function testMakingAnEmptyUrlAbsoluteWithMissingPageName() {
+ $url = new SimpleUrl('');
+ $this->assertEqual($url->getPath(), '');
+ $absolute = $url->makeAbsolute('http://host.com/I/am/here/');
+ $this->assertEqual($absolute->getScheme(), 'http');
+ $this->assertEqual($absolute->getHost(), 'host.com');
+ $this->assertEqual($absolute->getPath(), '/I/am/here/');
+ }
+
+ function testMakingAShortQueryUrlAbsolute() {
+ $url = new SimpleUrl('?a#b');
+ $this->assertEqual($url->getPath(), '');
+ $absolute = $url->makeAbsolute('http://host.com/I/am/here/');
+ $this->assertEqual($absolute->getScheme(), 'http');
+ $this->assertEqual($absolute->getHost(), 'host.com');
+ $this->assertEqual($absolute->getPath(), '/I/am/here/');
+ $this->assertEqual($absolute->getEncodedRequest(), '?a');
+ $this->assertEqual($absolute->getFragment(), 'b');
+ }
+
+ function testMakingADirectoryUrlAbsolute() {
+ $url = new SimpleUrl('hello/');
+ $this->assertEqual($url->getPath(), 'hello/');
+ $this->assertEqual($url->getBasePath(), 'hello/');
+ $this->assertEqual($url->getPage(), '');
+ $absolute = $url->makeAbsolute('http://host.com/I/am/here/page.html');
+ $this->assertEqual($absolute->getPath(), '/I/am/here/hello/');
+ }
+
+ function testMakingARootUrlAbsolute() {
+ $url = new SimpleUrl('/');
+ $this->assertEqual($url->getPath(), '/');
+ $absolute = $url->makeAbsolute('http://host.com/I/am/here/page.html');
+ $this->assertEqual($absolute->getPath(), '/');
+ }
+
+ function testMakingARootPageUrlAbsolute() {
+ $url = new SimpleUrl('/here.html');
+ $absolute = $url->makeAbsolute('http://host.com/I/am/here/page.html');
+ $this->assertEqual($absolute->getPath(), '/here.html');
+ }
+
+ function testCarryAuthenticationFromRootPage() {
+ $url = new SimpleUrl('here.html');
+ $absolute = $url->makeAbsolute('http://test:secret@host.com/');
+ $this->assertEqual($absolute->getPath(), '/here.html');
+ $this->assertEqual($absolute->getUsername(), 'test');
+ $this->assertEqual($absolute->getPassword(), 'secret');
+ }
+
+ function testMakingCoordinateUrlAbsolute() {
+ $url = new SimpleUrl('?1,2');
+ $this->assertEqual($url->getPath(), '');
+ $absolute = $url->makeAbsolute('http://host.com/I/am/here/');
+ $this->assertEqual($absolute->getScheme(), 'http');
+ $this->assertEqual($absolute->getHost(), 'host.com');
+ $this->assertEqual($absolute->getPath(), '/I/am/here/');
+ $this->assertEqual($absolute->getX(), 1);
+ $this->assertEqual($absolute->getY(), 2);
+ }
+
+ function testMakingAbsoluteAppendedPath() {
+ $url = new SimpleUrl('./there/somewhere.php');
+ $absolute = $url->makeAbsolute('https://host.com/here/');
+ $this->assertEqual($absolute->getPath(), '/here/there/somewhere.php');
+ }
+
+ function testMakingAbsoluteBadlyFormedAppendedPath() {
+ $url = new SimpleUrl('there/somewhere.php');
+ $absolute = $url->makeAbsolute('https://host.com/here/');
+ $this->assertEqual($absolute->getPath(), '/here/there/somewhere.php');
+ }
+
+ function testMakingAbsoluteHasNoEffectWhenAlreadyAbsolute() {
+ $url = new SimpleUrl('https://test:secret@www.lastcraft.com:321/stuff/?a=1#f');
+ $absolute = $url->makeAbsolute('http://host.com/here/');
+ $this->assertEqual($absolute->getScheme(), 'https');
+ $this->assertEqual($absolute->getUsername(), 'test');
+ $this->assertEqual($absolute->getPassword(), 'secret');
+ $this->assertEqual($absolute->getHost(), 'www.lastcraft.com');
+ $this->assertEqual($absolute->getPort(), 321);
+ $this->assertEqual($absolute->getPath(), '/stuff/');
+ $this->assertEqual($absolute->getEncodedRequest(), '?a=1');
+ $this->assertEqual($absolute->getFragment(), 'f');
+ }
+
+ function testMakingAbsoluteCarriesAuthenticationWhenAlreadyAbsolute() {
+ $url = new SimpleUrl('https://www.lastcraft.com');
+ $absolute = $url->makeAbsolute('http://test:secret@host.com/here/');
+ $this->assertEqual($absolute->getHost(), 'www.lastcraft.com');
+ $this->assertEqual($absolute->getUsername(), 'test');
+ $this->assertEqual($absolute->getPassword(), 'secret');
+ }
+
+ function testMakingHostOnlyAbsoluteDoesNotCarryAnyOtherInformation() {
+ $url = new SimpleUrl('http://www.lastcraft.com');
+ $absolute = $url->makeAbsolute('https://host.com:81/here/');
+ $this->assertEqual($absolute->getScheme(), 'http');
+ $this->assertEqual($absolute->getHost(), 'www.lastcraft.com');
+ $this->assertIdentical($absolute->getPort(), false);
+ $this->assertEqual($absolute->getPath(), '/');
+ }
+}
+
+class TestOfFrameUrl extends UnitTestCase {
+
+ function testTargetAttachment() {
+ $url = new SimpleUrl('http://www.site.com/home.html');
+ $this->assertIdentical($url->getTarget(), false);
+ $url->setTarget('A frame');
+ $this->assertIdentical($url->getTarget(), 'A frame');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/user_agent_test.php b/vendors/simpletest/test/user_agent_test.php
new file mode 100644
index 000000000..657c7e155
--- /dev/null
+++ b/vendors/simpletest/test/user_agent_test.php
@@ -0,0 +1,358 @@
+<?php
+// $Id: user_agent_test.php 1509 2007-05-08 22:11:49Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../user_agent.php');
+require_once(dirname(__FILE__) . '/../authentication.php');
+require_once(dirname(__FILE__) . '/../http.php');
+require_once(dirname(__FILE__) . '/../encoding.php');
+Mock::generate('SimpleHttpRequest');
+Mock::generate('SimpleHttpResponse');
+Mock::generate('SimpleHttpHeaders');
+Mock::generatePartial('SimpleUserAgent', 'MockRequestUserAgent', array('_createHttpRequest'));
+
+class TestOfFetchingUrlParameters extends UnitTestCase {
+
+ function setUp() {
+ $this->_headers = &new MockSimpleHttpHeaders();
+
+ $this->_response = &new MockSimpleHttpResponse();
+ $this->_response->setReturnValue('isError', false);
+ $this->_response->setReturnReference('getHeaders', new MockSimpleHttpHeaders());
+
+ $this->_request = &new MockSimpleHttpRequest();
+ $this->_request->setReturnReference('fetch', $this->_response);
+ }
+
+ function testGetRequestWithoutIncidentGivesNoErrors() {
+ $url = new SimpleUrl('http://test:secret@this.com/page.html');
+ $url->addRequestParameters(array('a' => 'A', 'b' => 'B'));
+
+ $agent = &new MockRequestUserAgent();
+ $agent->setReturnReference('_createHttpRequest', $this->_request);
+ $agent->SimpleUserAgent();
+
+ $response = &$agent->fetchResponse(
+ new SimpleUrl('http://test:secret@this.com/page.html'),
+ new SimpleGetEncoding(array('a' => 'A', 'b' => 'B')));
+ $this->assertFalse($response->isError());
+ }
+}
+
+class TestOfAdditionalHeaders extends UnitTestCase {
+
+ function testAdditionalHeaderAddedToRequest() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnReference('getHeaders', new MockSimpleHttpHeaders());
+
+ $request = &new MockSimpleHttpRequest();
+ $request->setReturnReference('fetch', $response);
+ $request->expectOnce(
+ 'addHeaderLine',
+ array('User-Agent: SimpleTest'));
+
+ $agent = &new MockRequestUserAgent();
+ $agent->setReturnReference('_createHttpRequest', $request);
+ $agent->SimpleUserAgent();
+ $agent->addHeader('User-Agent: SimpleTest');
+ $response = &$agent->fetchResponse(new SimpleUrl('http://this.host/'), new SimpleGetEncoding());
+ }
+}
+
+class TestOfBrowserCookies extends UnitTestCase {
+
+ function &_createStandardResponse() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue("isError", false);
+ $response->setReturnValue("getContent", "stuff");
+ $response->setReturnReference("getHeaders", new MockSimpleHttpHeaders());
+ return $response;
+ }
+
+ function &_createCookieSite($header_lines) {
+ $headers = &new SimpleHttpHeaders($header_lines);
+
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue("isError", false);
+ $response->setReturnReference("getHeaders", $headers);
+ $response->setReturnValue("getContent", "stuff");
+
+ $request = &new MockSimpleHttpRequest();
+ $request->setReturnReference("fetch", $response);
+ return $request;
+ }
+
+ function &_createMockedRequestUserAgent(&$request) {
+ $agent = &new MockRequestUserAgent();
+ $agent->setReturnReference('_createHttpRequest', $request);
+ $agent->SimpleUserAgent();
+ return $agent;
+ }
+
+ function testCookieJarIsSentToRequest() {
+ $jar = new SimpleCookieJar();
+ $jar->setCookie('a', 'A');
+
+ $request = &new MockSimpleHttpRequest();
+ $request->setReturnReference('fetch', $this->_createStandardResponse());
+ $request->expectOnce('readCookiesFromJar', array($jar, '*'));
+
+ $agent = &$this->_createMockedRequestUserAgent($request);
+ $agent->setCookie('a', 'A');
+ $agent->fetchResponse(
+ new SimpleUrl('http://this.com/this/path/page.html'),
+ new SimpleGetEncoding());
+ }
+
+ function testNoCookieJarIsSentToRequestWhenCookiesAreDisabled() {
+ $request = &new MockSimpleHttpRequest();
+ $request->setReturnReference('fetch', $this->_createStandardResponse());
+ $request->expectNever('readCookiesFromJar');
+
+ $agent = &$this->_createMockedRequestUserAgent($request);
+ $agent->setCookie('a', 'A');
+ $agent->ignoreCookies();
+ $agent->fetchResponse(
+ new SimpleUrl('http://this.com/this/path/page.html'),
+ new SimpleGetEncoding());
+ }
+
+ function testReadingNewCookie() {
+ $request = &$this->_createCookieSite('Set-cookie: a=AAAA');
+ $agent = &$this->_createMockedRequestUserAgent($request);
+ $agent->fetchResponse(
+ new SimpleUrl('http://this.com/this/path/page.html'),
+ new SimpleGetEncoding());
+ $this->assertEqual($agent->getCookieValue("this.com", "this/path/", "a"), "AAAA");
+ }
+
+ function testIgnoringNewCookieWhenCookiesDisabled() {
+ $request = &$this->_createCookieSite('Set-cookie: a=AAAA');
+ $agent = &$this->_createMockedRequestUserAgent($request);
+ $agent->ignoreCookies();
+ $agent->fetchResponse(
+ new SimpleUrl('http://this.com/this/path/page.html'),
+ new SimpleGetEncoding());
+ $this->assertIdentical($agent->getCookieValue("this.com", "this/path/", "a"), false);
+ }
+
+ function testOverwriteCookieThatAlreadyExists() {
+ $request = &$this->_createCookieSite('Set-cookie: a=AAAA');
+ $agent = &$this->_createMockedRequestUserAgent($request);
+ $agent->setCookie('a', 'A');
+ $agent->fetchResponse(
+ new SimpleUrl('http://this.com/this/path/page.html'),
+ new SimpleGetEncoding());
+ $this->assertEqual($agent->getCookieValue("this.com", "this/path/", "a"), "AAAA");
+ }
+
+ function testClearCookieBySettingExpiry() {
+ $request = &$this->_createCookieSite('Set-cookie: a=b');
+ $agent = &$this->_createMockedRequestUserAgent($request);
+
+ $agent->setCookie("a", "A", "this/path/", "Wed, 25-Dec-02 04:24:21 GMT");
+ $agent->fetchResponse(
+ new SimpleUrl('http://this.com/this/path/page.html'),
+ new SimpleGetEncoding());
+ $this->assertIdentical(
+ $agent->getCookieValue("this.com", "this/path/", "a"),
+ "b");
+ $agent->restart("Wed, 25-Dec-02 04:24:20 GMT");
+ $this->assertIdentical(
+ $agent->getCookieValue("this.com", "this/path/", "a"),
+ false);
+ }
+
+ function testAgeingAndClearing() {
+ $request = &$this->_createCookieSite('Set-cookie: a=A; expires=Wed, 25-Dec-02 04:24:21 GMT; path=/this/path');
+ $agent = &$this->_createMockedRequestUserAgent($request);
+
+ $agent->fetchResponse(
+ new SimpleUrl('http://this.com/this/path/page.html'),
+ new SimpleGetEncoding());
+ $agent->restart("Wed, 25-Dec-02 04:24:20 GMT");
+ $this->assertIdentical(
+ $agent->getCookieValue("this.com", "this/path/", "a"),
+ "A");
+ $agent->ageCookies(2);
+ $agent->restart("Wed, 25-Dec-02 04:24:20 GMT");
+ $this->assertIdentical(
+ $agent->getCookieValue("this.com", "this/path/", "a"),
+ false);
+ }
+
+ function testReadingIncomingAndSettingNewCookies() {
+ $request = &$this->_createCookieSite('Set-cookie: a=AAA');
+ $agent = &$this->_createMockedRequestUserAgent($request);
+
+ $this->assertNull($agent->getBaseCookieValue("a", false));
+ $agent->fetchResponse(
+ new SimpleUrl('http://this.com/this/path/page.html'),
+ new SimpleGetEncoding());
+ $agent->setCookie("b", "BBB", "this.com", "this/path/");
+ $this->assertEqual(
+ $agent->getBaseCookieValue("a", new SimpleUrl('http://this.com/this/path/page.html')),
+ "AAA");
+ $this->assertEqual(
+ $agent->getBaseCookieValue("b", new SimpleUrl('http://this.com/this/path/page.html')),
+ "BBB");
+ }
+}
+
+class TestOfHttpRedirects extends UnitTestCase {
+
+ function &createRedirect($content, $redirect) {
+ $headers = &new MockSimpleHttpHeaders();
+ $headers->setReturnValue('isRedirect', (boolean)$redirect);
+ $headers->setReturnValue('getLocation', $redirect);
+
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('getContent', $content);
+ $response->setReturnReference('getHeaders', $headers);
+
+ $request = &new MockSimpleHttpRequest();
+ $request->setReturnReference('fetch', $response);
+ return $request;
+ }
+
+ function testDisabledRedirects() {
+ $agent = &new MockRequestUserAgent();
+ $agent->setReturnReference(
+ '_createHttpRequest',
+ $this->createRedirect('stuff', 'there.html'));
+ $agent->expectOnce('_createHttpRequest');
+ $agent->SimpleUserAgent();
+
+ $agent->setMaximumRedirects(0);
+ $response = &$agent->fetchResponse(new SimpleUrl('here.html'), new SimpleGetEncoding());
+ $this->assertEqual($response->getContent(), 'stuff');
+ }
+
+ function testSingleRedirect() {
+ $agent = &new MockRequestUserAgent();
+ $agent->setReturnReferenceAt(
+ 0,
+ '_createHttpRequest',
+ $this->createRedirect('first', 'two.html'));
+ $agent->setReturnReferenceAt(
+ 1,
+ '_createHttpRequest',
+ $this->createRedirect('second', 'three.html'));
+ $agent->expectCallCount('_createHttpRequest', 2);
+ $agent->SimpleUserAgent();
+
+ $agent->setMaximumRedirects(1);
+ $response = &$agent->fetchResponse(new SimpleUrl('one.html'), new SimpleGetEncoding());
+ $this->assertEqual($response->getContent(), 'second');
+ }
+
+ function testDoubleRedirect() {
+ $agent = &new MockRequestUserAgent();
+ $agent->setReturnReferenceAt(
+ 0,
+ '_createHttpRequest',
+ $this->createRedirect('first', 'two.html'));
+ $agent->setReturnReferenceAt(
+ 1,
+ '_createHttpRequest',
+ $this->createRedirect('second', 'three.html'));
+ $agent->setReturnReferenceAt(
+ 2,
+ '_createHttpRequest',
+ $this->createRedirect('third', 'four.html'));
+ $agent->expectCallCount('_createHttpRequest', 3);
+ $agent->SimpleUserAgent();
+
+ $agent->setMaximumRedirects(2);
+ $response = &$agent->fetchResponse(new SimpleUrl('one.html'), new SimpleGetEncoding());
+ $this->assertEqual($response->getContent(), 'third');
+ }
+
+ function testSuccessAfterRedirect() {
+ $agent = &new MockRequestUserAgent();
+ $agent->setReturnReferenceAt(
+ 0,
+ '_createHttpRequest',
+ $this->createRedirect('first', 'two.html'));
+ $agent->setReturnReferenceAt(
+ 1,
+ '_createHttpRequest',
+ $this->createRedirect('second', false));
+ $agent->setReturnReferenceAt(
+ 2,
+ '_createHttpRequest',
+ $this->createRedirect('third', 'four.html'));
+ $agent->expectCallCount('_createHttpRequest', 2);
+ $agent->SimpleUserAgent();
+
+ $agent->setMaximumRedirects(2);
+ $response = &$agent->fetchResponse(new SimpleUrl('one.html'), new SimpleGetEncoding());
+ $this->assertEqual($response->getContent(), 'second');
+ }
+
+ function testRedirectChangesPostToGet() {
+ $agent = &new MockRequestUserAgent();
+ $agent->setReturnReferenceAt(
+ 0,
+ '_createHttpRequest',
+ $this->createRedirect('first', 'two.html'));
+ $agent->expectArgumentsAt(0, '_createHttpRequest', array('*', new IsAExpectation('SimplePostEncoding')));
+ $agent->setReturnReferenceAt(
+ 1,
+ '_createHttpRequest',
+ $this->createRedirect('second', 'three.html'));
+ $agent->expectArgumentsAt(1, '_createHttpRequest', array('*', new IsAExpectation('SimpleGetEncoding')));
+ $agent->expectCallCount('_createHttpRequest', 2);
+ $agent->SimpleUserAgent();
+ $agent->setMaximumRedirects(1);
+ $response = &$agent->fetchResponse(new SimpleUrl('one.html'), new SimplePostEncoding());
+ }
+}
+
+class TestOfBadHosts extends UnitTestCase {
+
+ function &_createSimulatedBadHost() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnValue('isError', true);
+ $response->setReturnValue('getError', 'Bad socket');
+ $response->setReturnValue('getContent', false);
+
+ $request = &new MockSimpleHttpRequest();
+ $request->setReturnReference('fetch', $response);
+ return $request;
+ }
+
+ function testUntestedHost() {
+ $request = &$this->_createSimulatedBadHost();
+
+ $agent = &new MockRequestUserAgent();
+ $agent->setReturnReference('_createHttpRequest', $request);
+ $agent->SimpleUserAgent();
+
+ $response = &$agent->fetchResponse(
+ new SimpleUrl('http://this.host/this/path/page.html'),
+ new SimpleGetEncoding());
+ $this->assertTrue($response->isError());
+ }
+}
+
+class TestOfAuthorisation extends UnitTestCase {
+
+ function testAuthenticateHeaderAdded() {
+ $response = &new MockSimpleHttpResponse();
+ $response->setReturnReference('getHeaders', new MockSimpleHttpHeaders());
+
+ $request = &new MockSimpleHttpRequest();
+ $request->setReturnReference('fetch', $response);
+ $request->expectOnce(
+ 'addHeaderLine',
+ array('Authorization: Basic ' . base64_encode('test:secret')));
+
+ $agent = &new MockRequestUserAgent();
+ $agent->setReturnReference('_createHttpRequest', $request);
+ $agent->SimpleUserAgent();
+ $response = &$agent->fetchResponse(
+ new SimpleUrl('http://test:secret@this.host'),
+ new SimpleGetEncoding());
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/visual_test.php b/vendors/simpletest/test/visual_test.php
new file mode 100644
index 000000000..13781bb65
--- /dev/null
+++ b/vendors/simpletest/test/visual_test.php
@@ -0,0 +1,495 @@
+<?php
+ // $Id: visual_test.php 1547 2007-07-04 00:42:05Z lastcraft $
+
+ // NOTE:
+ // Some of these tests are designed to fail! Do not be alarmed.
+ // ----------------
+
+ // The following tests are a bit hacky. Whilst Kent Beck tried to
+ // build a unit tester with a unit tester, I am not that brave.
+ // Instead I have just hacked together odd test scripts until
+ // I have enough of a tester to procede more formally.
+ //
+ // The proper tests start in all_tests.php
+ require_once('../unit_tester.php');
+ require_once('../shell_tester.php');
+ require_once('../mock_objects.php');
+ require_once('../reporter.php');
+ require_once('../xml.php');
+
+ class TestDisplayClass {
+ var $_a;
+
+ function TestDisplayClass($a) {
+ $this->_a = $a;
+ }
+ }
+
+ class PassingUnitTestCaseOutput extends UnitTestCase {
+
+ function testOfResults() {
+ $this->pass('Pass');
+ }
+
+ function testTrue() {
+ $this->assertTrue(true);
+ }
+
+ function testFalse() {
+ $this->assertFalse(false);
+ }
+
+ function testExpectation() {
+ $expectation = &new EqualExpectation(25, 'My expectation message: %s');
+ $this->assert($expectation, 25, 'My assert message : %s');
+ }
+
+ function testNull() {
+ $this->assertNull(null, "%s -> Pass");
+ $this->assertNotNull(false, "%s -> Pass");
+ }
+
+ function testType() {
+ $this->assertIsA("hello", "string", "%s -> Pass");
+ $this->assertIsA($this, "PassingUnitTestCaseOutput", "%s -> Pass");
+ $this->assertIsA($this, "UnitTestCase", "%s -> Pass");
+ }
+
+ function testTypeEquality() {
+ $this->assertEqual("0", 0, "%s -> Pass");
+ }
+
+ function testNullEquality() {
+ $this->assertNotEqual(null, 1, "%s -> Pass");
+ $this->assertNotEqual(1, null, "%s -> Pass");
+ }
+
+ function testIntegerEquality() {
+ $this->assertNotEqual(1, 2, "%s -> Pass");
+ }
+
+ function testStringEquality() {
+ $this->assertEqual("a", "a", "%s -> Pass");
+ $this->assertNotEqual("aa", "ab", "%s -> Pass");
+ }
+
+ function testHashEquality() {
+ $this->assertEqual(array("a" => "A", "b" => "B"), array("b" => "B", "a" => "A"), "%s -> Pass");
+ }
+
+ function testWithin() {
+ $this->assertWithinMargin(5, 5.4, 0.5, "%s -> Pass");
+ }
+
+ function testOutside() {
+ $this->assertOutsideMargin(5, 5.6, 0.5, "%s -> Pass");
+ }
+
+ function testStringIdentity() {
+ $a = "fred";
+ $b = $a;
+ $this->assertIdentical($a, $b, "%s -> Pass");
+ }
+
+ function testTypeIdentity() {
+ $a = "0";
+ $b = 0;
+ $this->assertNotIdentical($a, $b, "%s -> Pass");
+ }
+
+ function testNullIdentity() {
+ $this->assertNotIdentical(null, 1, "%s -> Pass");
+ $this->assertNotIdentical(1, null, "%s -> Pass");
+ }
+
+ function testHashIdentity() {
+ }
+
+ function testObjectEquality() {
+ $this->assertEqual(new TestDisplayClass(4), new TestDisplayClass(4), "%s -> Pass");
+ $this->assertNotEqual(new TestDisplayClass(4), new TestDisplayClass(5), "%s -> Pass");
+ }
+
+ function testObjectIndentity() {
+ $this->assertIdentical(new TestDisplayClass(false), new TestDisplayClass(false), "%s -> Pass");
+ $this->assertNotIdentical(new TestDisplayClass(false), new TestDisplayClass(0), "%s -> Pass");
+ }
+
+ function testReference() {
+ $a = "fred";
+ $b = &$a;
+ $this->assertReference($a, $b, "%s -> Pass");
+ }
+
+ function testCloneOnDifferentObjects() {
+ $a = "fred";
+ $b = $a;
+ $c = "Hello";
+ $this->assertClone($a, $b, "%s -> Pass");
+ }
+
+ function testPatterns() {
+ $this->assertPattern('/hello/i', "Hello there", "%s -> Pass");
+ $this->assertNoPattern('/hello/', "Hello there", "%s -> Pass");
+ }
+
+ function testLongStrings() {
+ $text = "";
+ for ($i = 0; $i < 10; $i++) {
+ $text .= "0123456789";
+ }
+ $this->assertEqual($text, $text);
+ }
+ }
+
+ class FailingUnitTestCaseOutput extends UnitTestCase {
+
+ function testOfResults() {
+ $this->fail('Fail'); // Fail.
+ }
+
+ function testTrue() {
+ $this->assertTrue(false); // Fail.
+ }
+
+ function testFalse() {
+ $this->assertFalse(true); // Fail.
+ }
+
+ function testExpectation() {
+ $expectation = &new EqualExpectation(25, 'My expectation message: %s');
+ $this->assert($expectation, 24, 'My assert message : %s'); // Fail.
+ }
+
+ function testNull() {
+ $this->assertNull(false, "%s -> Fail"); // Fail.
+ $this->assertNotNull(null, "%s -> Fail"); // Fail.
+ }
+
+ function testType() {
+ $this->assertIsA(14, "string", "%s -> Fail"); // Fail.
+ $this->assertIsA(14, "TestOfUnitTestCaseOutput", "%s -> Fail"); // Fail.
+ $this->assertIsA($this, "TestReporter", "%s -> Fail"); // Fail.
+ }
+
+ function testTypeEquality() {
+ $this->assertNotEqual("0", 0, "%s -> Fail"); // Fail.
+ }
+
+ function testNullEquality() {
+ $this->assertEqual(null, 1, "%s -> Fail"); // Fail.
+ $this->assertEqual(1, null, "%s -> Fail"); // Fail.
+ }
+
+ function testIntegerEquality() {
+ $this->assertEqual(1, 2, "%s -> Fail"); // Fail.
+ }
+
+ function testStringEquality() {
+ $this->assertNotEqual("a", "a", "%s -> Fail"); // Fail.
+ $this->assertEqual("aa", "ab", "%s -> Fail"); // Fail.
+ }
+
+ function testHashEquality() {
+ $this->assertEqual(array("a" => "A", "b" => "B"), array("b" => "B", "a" => "Z"), "%s -> Fail");
+ }
+
+ function testWithin() {
+ $this->assertWithinMargin(5, 5.6, 0.5, "%s -> Fail"); // Fail.
+ }
+
+ function testOutside() {
+ $this->assertOutsideMargin(5, 5.4, 0.5, "%s -> Fail"); // Fail.
+ }
+
+ function testStringIdentity() {
+ $a = "fred";
+ $b = $a;
+ $this->assertNotIdentical($a, $b, "%s -> Fail"); // Fail.
+ }
+
+ function testTypeIdentity() {
+ $a = "0";
+ $b = 0;
+ $this->assertIdentical($a, $b, "%s -> Fail"); // Fail.
+ }
+
+ function testNullIdentity() {
+ $this->assertIdentical(null, 1, "%s -> Fail"); // Fail.
+ $this->assertIdentical(1, null, "%s -> Fail"); // Fail.
+ }
+
+ function testHashIdentity() {
+ $this->assertIdentical(array("a" => "A", "b" => "B"), array("b" => "B", "a" => "A"), "%s -> fail"); // Fail.
+ }
+
+ function testObjectEquality() {
+ $this->assertNotEqual(new TestDisplayClass(4), new TestDisplayClass(4), "%s -> Fail"); // Fail.
+ $this->assertEqual(new TestDisplayClass(4), new TestDisplayClass(5), "%s -> Fail"); // Fail.
+ }
+
+ function testObjectIndentity() {
+ $this->assertNotIdentical(new TestDisplayClass(false), new TestDisplayClass(false), "%s -> Fail"); // Fail.
+ $this->assertIdentical(new TestDisplayClass(false), new TestDisplayClass(0), "%s -> Fail"); // Fail.
+ }
+
+ function testReference() {
+ $a = "fred";
+ $b = &$a;
+ $this->assertClone($a, $b, "%s -> Fail"); // Fail.
+ }
+
+ function testCloneOnDifferentObjects() {
+ $a = "fred";
+ $b = $a;
+ $c = "Hello";
+ $this->assertClone($a, $c, "%s -> Fail"); // Fail.
+ }
+
+ function testPatterns() {
+ $this->assertPattern('/hello/', "Hello there", "%s -> Fail"); // Fail.
+ $this->assertNoPattern('/hello/i', "Hello there", "%s -> Fail"); // Fail.
+ }
+
+ function testLongStrings() {
+ $text = "";
+ for ($i = 0; $i < 10; $i++) {
+ $text .= "0123456789";
+ }
+ $this->assertEqual($text . $text, $text . "a" . $text); // Fail.
+ }
+ }
+
+ class Dummy {
+ function Dummy() {
+ }
+
+ function a() {
+ }
+ }
+ Mock::generate('Dummy');
+
+ class TestOfMockObjectsOutput extends UnitTestCase {
+
+ function testCallCounts() {
+ $dummy = &new MockDummy();
+ $dummy->expectCallCount('a', 1, 'My message: %s');
+ $dummy->a();
+ $dummy->a();
+ }
+
+ function testMinimumCallCounts() {
+ $dummy = &new MockDummy();
+ $dummy->expectMinimumCallCount('a', 2, 'My message: %s');
+ $dummy->a();
+ $dummy->a();
+ }
+
+ function testEmptyMatching() {
+ $dummy = &new MockDummy();
+ $dummy->expectArguments('a', array());
+ $dummy->a();
+ $dummy->a(null); // Fail.
+ }
+
+ function testEmptyMatchingWithCustomMessage() {
+ $dummy = &new MockDummy();
+ $dummy->expectArguments('a', array(), 'My expectation message: %s');
+ $dummy->a();
+ $dummy->a(null); // Fail.
+ }
+
+ function testNullMatching() {
+ $dummy = &new MockDummy();
+ $dummy->expectArguments('a', array(null));
+ $dummy->a(null);
+ $dummy->a(); // Fail.
+ }
+
+ function testBooleanMatching() {
+ $dummy = &new MockDummy();
+ $dummy->expectArguments('a', array(true, false));
+ $dummy->a(true, false);
+ $dummy->a(true, true); // Fail.
+ }
+
+ function testIntegerMatching() {
+ $dummy = &new MockDummy();
+ $dummy->expectArguments('a', array(32, 33));
+ $dummy->a(32, 33);
+ $dummy->a(32, 34); // Fail.
+ }
+
+ function testFloatMatching() {
+ $dummy = &new MockDummy();
+ $dummy->expectArguments('a', array(3.2, 3.3));
+ $dummy->a(3.2, 3.3);
+ $dummy->a(3.2, 3.4); // Fail.
+ }
+
+ function testStringMatching() {
+ $dummy = &new MockDummy();
+ $dummy->expectArguments('a', array('32', '33'));
+ $dummy->a('32', '33');
+ $dummy->a('32', '34'); // Fail.
+ }
+
+ function testEmptyMatchingWithCustomExpectationMessage() {
+ $dummy = &new MockDummy();
+ $dummy->expectArguments(
+ 'a',
+ array(new EqualExpectation('A', 'My part expectation message: %s')),
+ 'My expectation message: %s');
+ $dummy->a('A');
+ $dummy->a('B'); // Fail.
+ }
+
+ function testArrayMatching() {
+ $dummy = &new MockDummy();
+ $dummy->expectArguments('a', array(array(32), array(33)));
+ $dummy->a(array(32), array(33));
+ $dummy->a(array(32), array('33')); // Fail.
+ }
+
+ function testObjectMatching() {
+ $a = new Dummy();
+ $a->a = 'a';
+ $b = new Dummy();
+ $b->b = 'b';
+ $dummy = &new MockDummy();
+ $dummy->expectArguments('a', array($a, $b));
+ $dummy->a($a, $b);
+ $dummy->a($a, $a); // Fail.
+ }
+
+ function testBigList() {
+ $dummy = &new MockDummy();
+ $dummy->expectArguments('a', array(false, 0, 1, 1.0));
+ $dummy->a(false, 0, 1, 1.0);
+ $dummy->a(true, false, 2, 2.0); // Fail.
+ }
+ }
+
+ class TestOfPastBugs extends UnitTestCase {
+
+ function testMixedTypes() {
+ $this->assertEqual(array(), null, "%s -> Pass");
+ $this->assertIdentical(array(), null, "%s -> Fail"); // Fail.
+ }
+
+ function testMockWildcards() {
+ $dummy = &new MockDummy();
+ $dummy->expectArguments('a', array('*', array(33)));
+ $dummy->a(array(32), array(33));
+ $dummy->a(array(32), array('33')); // Fail.
+ }
+ }
+
+ class TestOfVisualShell extends ShellTestCase {
+
+ function testDump() {
+ $this->execute('ls');
+ $this->dumpOutput();
+ $this->execute('dir');
+ $this->dumpOutput();
+ }
+
+ function testDumpOfList() {
+ $this->execute('ls');
+ $this->dump($this->getOutputAsList());
+ }
+ }
+
+ class PassesAsWellReporter extends HtmlReporter {
+
+ function _getCss() {
+ return parent::_getCss() . ' .pass { color: darkgreen; }';
+ }
+
+ function paintPass($message) {
+ parent::paintPass($message);
+ print "<span class=\"pass\">Pass</span>: ";
+ $breadcrumb = $this->getTestList();
+ array_shift($breadcrumb);
+ print implode(" -&gt; ", $breadcrumb);
+ print " -&gt; " . htmlentities($message) . "<br />\n";
+ }
+
+ function paintSignal($type, &$payload) {
+ print "<span class=\"fail\">$type</span>: ";
+ $breadcrumb = $this->getTestList();
+ array_shift($breadcrumb);
+ print implode(" -&gt; ", $breadcrumb);
+ print " -&gt; " . htmlentities(serialize($payload)) . "<br />\n";
+ }
+ }
+
+ class TestOfSkippingNoMatterWhat extends UnitTestCase {
+ function skip() {
+ $this->skipIf(true, 'Always skipped -> %s');
+ }
+
+ function testFail() {
+ $this->fail('This really shouldn\'t have happened');
+ }
+ }
+
+ class TestOfSkippingOrElse extends UnitTestCase {
+ function skip() {
+ $this->skipUnless(false, 'Always skipped -> %s');
+ }
+
+ function testFail() {
+ $this->fail('This really shouldn\'t have happened');
+ }
+ }
+
+ class TestOfSkippingTwiceOver extends UnitTestCase {
+ function skip() {
+ $this->skipIf(true, 'First reason -> %s');
+ $this->skipIf(true, 'Second reason -> %s');
+ }
+
+ function testFail() {
+ $this->fail('This really shouldn\'t have happened');
+ }
+ }
+
+ class TestThatShouldNotBeSkipped extends UnitTestCase {
+ function skip() {
+ $this->skipIf(false);
+ $this->skipUnless(true);
+ }
+
+ function testFail() {
+ $this->fail('We should see this message');
+ }
+
+ function testPass() {
+ $this->pass('We should see this message');
+ }
+ }
+
+ $test = &new TestSuite('Visual test with 46 passes, 47 fails and 0 exceptions');
+ $test->addTestCase(new PassingUnitTestCaseOutput());
+ $test->addTestCase(new FailingUnitTestCaseOutput());
+ $test->addTestCase(new TestOfMockObjectsOutput());
+ $test->addTestCase(new TestOfPastBugs());
+ $test->addTestCase(new TestOfVisualShell());
+ $test->addTestCase(new TestOfSkippingNoMatterWhat());
+ $test->addTestCase(new TestOfSkippingOrElse());
+ $test->addTestCase(new TestOfSkippingTwiceOver());
+ $test->addTestCase(new TestThatShouldNotBeSkipped());
+
+ if (isset($_GET['xml']) || in_array('xml', (isset($argv) ? $argv : array()))) {
+ $reporter = &new XmlReporter();
+ } elseif (TextReporter::inCli()) {
+ $reporter = &new TextReporter();
+ } else {
+ $reporter = &new PassesAsWellReporter();
+ }
+ if (isset($_GET['dry']) || in_array('dry', (isset($argv) ? $argv : array()))) {
+ $reporter->makeDry();
+ }
+ exit ($test->run($reporter) ? 0 : 1);
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/web_tester_test.php b/vendors/simpletest/test/web_tester_test.php
new file mode 100644
index 000000000..01f7d3c8c
--- /dev/null
+++ b/vendors/simpletest/test/web_tester_test.php
@@ -0,0 +1,156 @@
+<?php
+// $Id: web_tester_test.php 1509 2007-05-08 22:11:49Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../web_tester.php');
+
+class TestOfFieldExpectation extends UnitTestCase {
+
+ function testStringMatchingIsCaseSensitive() {
+ $expectation = new FieldExpectation('a');
+ $this->assertTrue($expectation->test('a'));
+ $this->assertTrue($expectation->test(array('a')));
+ $this->assertFalse($expectation->test('A'));
+ }
+
+ function testMatchesInteger() {
+ $expectation = new FieldExpectation('1');
+ $this->assertTrue($expectation->test('1'));
+ $this->assertTrue($expectation->test(1));
+ $this->assertTrue($expectation->test(array('1')));
+ $this->assertTrue($expectation->test(array(1)));
+ }
+
+ function testNonStringFailsExpectation() {
+ $expectation = new FieldExpectation('a');
+ $this->assertFalse($expectation->test(null));
+ }
+
+ function testUnsetFieldCanBeTestedFor() {
+ $expectation = new FieldExpectation(false);
+ $this->assertTrue($expectation->test(false));
+ }
+
+ function testMultipleValuesCanBeInAnyOrder() {
+ $expectation = new FieldExpectation(array('a', 'b'));
+ $this->assertTrue($expectation->test(array('a', 'b')));
+ $this->assertTrue($expectation->test(array('b', 'a')));
+ $this->assertFalse($expectation->test(array('a', 'a')));
+ $this->assertFalse($expectation->test('a'));
+ }
+
+ function testSingleItemCanBeArrayOrString() {
+ $expectation = new FieldExpectation(array('a'));
+ $this->assertTrue($expectation->test(array('a')));
+ $this->assertTrue($expectation->test('a'));
+ }
+}
+
+class TestOfHeaderExpectations extends UnitTestCase {
+
+ function testExpectingOnlyTheHeaderName() {
+ $expectation = new HttpHeaderExpectation('a');
+ $this->assertIdentical($expectation->test(false), false);
+ $this->assertIdentical($expectation->test('a: A'), true);
+ $this->assertIdentical($expectation->test('A: A'), true);
+ $this->assertIdentical($expectation->test('a: B'), true);
+ $this->assertIdentical($expectation->test(' a : A '), true);
+ }
+
+ function testHeaderValueAsWell() {
+ $expectation = new HttpHeaderExpectation('a', 'A');
+ $this->assertIdentical($expectation->test(false), false);
+ $this->assertIdentical($expectation->test('a: A'), true);
+ $this->assertIdentical($expectation->test('A: A'), true);
+ $this->assertIdentical($expectation->test('A: a'), false);
+ $this->assertIdentical($expectation->test('a: B'), false);
+ $this->assertIdentical($expectation->test(' a : A '), true);
+ $this->assertIdentical($expectation->test(' a : AB '), false);
+ }
+
+ function testHeaderValueWithColons() {
+ $expectation = new HttpHeaderExpectation('a', 'A:B:C');
+ $this->assertIdentical($expectation->test('a: A'), false);
+ $this->assertIdentical($expectation->test('a: A:B'), false);
+ $this->assertIdentical($expectation->test('a: A:B:C'), true);
+ $this->assertIdentical($expectation->test('a: A:B:C:D'), false);
+ }
+
+ function testMultilineSearch() {
+ $expectation = new HttpHeaderExpectation('a', 'A');
+ $this->assertIdentical($expectation->test("aa: A\r\nb: B\r\nc: C"), false);
+ $this->assertIdentical($expectation->test("aa: A\r\na: A\r\nb: B"), true);
+ }
+
+ function testMultilineSearchWithPadding() {
+ $expectation = new HttpHeaderExpectation('a', ' A ');
+ $this->assertIdentical($expectation->test("aa:A\r\nb:B\r\nc:C"), false);
+ $this->assertIdentical($expectation->test("aa:A\r\na:A\r\nb:B"), true);
+ }
+
+ function testPatternMatching() {
+ $expectation = new HttpHeaderExpectation('a', new PatternExpectation('/A/'));
+ $this->assertIdentical($expectation->test('a: A'), true);
+ $this->assertIdentical($expectation->test('A: A'), true);
+ $this->assertIdentical($expectation->test('A: a'), false);
+ $this->assertIdentical($expectation->test('a: B'), false);
+ $this->assertIdentical($expectation->test(' a : A '), true);
+ $this->assertIdentical($expectation->test(' a : AB '), true);
+ }
+
+ function testCaseInsensitivePatternMatching() {
+ $expectation = new HttpHeaderExpectation('a', new PatternExpectation('/A/i'));
+ $this->assertIdentical($expectation->test('a: a'), true);
+ $this->assertIdentical($expectation->test('a: B'), false);
+ $this->assertIdentical($expectation->test(' a : A '), true);
+ $this->assertIdentical($expectation->test(' a : BAB '), true);
+ $this->assertIdentical($expectation->test(' a : bab '), true);
+ }
+
+ function testUnwantedHeader() {
+ $expectation = new NoHttpHeaderExpectation('a');
+ $this->assertIdentical($expectation->test(''), true);
+ $this->assertIdentical($expectation->test('stuff'), true);
+ $this->assertIdentical($expectation->test('b: B'), true);
+ $this->assertIdentical($expectation->test('a: A'), false);
+ $this->assertIdentical($expectation->test('A: A'), false);
+ }
+
+ function testMultilineUnwantedSearch() {
+ $expectation = new NoHttpHeaderExpectation('a');
+ $this->assertIdentical($expectation->test("aa:A\r\nb:B\r\nc:C"), true);
+ $this->assertIdentical($expectation->test("aa:A\r\na:A\r\nb:B"), false);
+ }
+
+ function testLocationHeaderSplitsCorrectly() {
+ $expectation = new HttpHeaderExpectation('Location', 'http://here/');
+ $this->assertIdentical($expectation->test('Location: http://here/'), true);
+ }
+}
+
+class TestOfTextExpectations extends UnitTestCase {
+
+ function testMatchingSubString() {
+ $expectation = new TextExpectation('wanted');
+ $this->assertIdentical($expectation->test(''), false);
+ $this->assertIdentical($expectation->test('Wanted'), false);
+ $this->assertIdentical($expectation->test('wanted'), true);
+ $this->assertIdentical($expectation->test('the wanted text is here'), true);
+ }
+
+ function testNotMatchingSubString() {
+ $expectation = new NoTextExpectation('wanted');
+ $this->assertIdentical($expectation->test(''), true);
+ $this->assertIdentical($expectation->test('Wanted'), true);
+ $this->assertIdentical($expectation->test('wanted'), false);
+ $this->assertIdentical($expectation->test('the wanted text is here'), false);
+ }
+}
+
+class TestOfGenericAssertionsInWebTester extends WebTestCase {
+
+ function testEquality() {
+ $this->assertEqual('a', 'a');
+ $this->assertNotEqual('a', 'A');
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test/xml_test.php b/vendors/simpletest/test/xml_test.php
new file mode 100644
index 000000000..91985b5d5
--- /dev/null
+++ b/vendors/simpletest/test/xml_test.php
@@ -0,0 +1,187 @@
+<?php
+// $Id: xml_test.php 1509 2007-05-08 22:11:49Z lastcraft $
+require_once(dirname(__FILE__) . '/../autorun.php');
+require_once(dirname(__FILE__) . '/../xml.php');
+Mock::generate('SimpleScorer');
+
+if (! function_exists('xml_parser_create')) {
+ SimpleTest::ignore('TestOfXmlStructureParsing');
+ SimpleTest::ignore('TestOfXmlResultsParsing');
+}
+
+class TestOfNestingTags extends UnitTestCase {
+ function testGroupSize() {
+ $nesting = new NestingGroupTag(array('SIZE' => 2));
+ $this->assertEqual($nesting->getSize(), 2);
+ }
+}
+
+class TestOfXmlStructureParsing extends UnitTestCase {
+ function testValidXml() {
+ $listener = &new MockSimpleScorer();
+ $listener->expectNever('paintGroupStart');
+ $listener->expectNever('paintGroupEnd');
+ $listener->expectNever('paintCaseStart');
+ $listener->expectNever('paintCaseEnd');
+ $parser = &new SimpleTestXmlParser($listener);
+ $this->assertTrue($parser->parse("<?xml version=\"1.0\"?>\n"));
+ $this->assertTrue($parser->parse("<run>\n"));
+ $this->assertTrue($parser->parse("</run>\n"));
+ }
+
+ function testEmptyGroup() {
+ $listener = &new MockSimpleScorer();
+ $listener->expectOnce('paintGroupStart', array('a_group', 7));
+ $listener->expectOnce('paintGroupEnd', array('a_group'));
+ $parser = &new SimpleTestXmlParser($listener);
+ $parser->parse("<?xml version=\"1.0\"?>\n");
+ $parser->parse("<run>\n");
+ $this->assertTrue($parser->parse("<group size=\"7\">\n"));
+ $this->assertTrue($parser->parse("<name>a_group</name>\n"));
+ $this->assertTrue($parser->parse("</group>\n"));
+ $parser->parse("</run>\n");
+ }
+
+ function testEmptyCase() {
+ $listener = &new MockSimpleScorer();
+ $listener->expectOnce('paintCaseStart', array('a_case'));
+ $listener->expectOnce('paintCaseEnd', array('a_case'));
+ $parser = &new SimpleTestXmlParser($listener);
+ $parser->parse("<?xml version=\"1.0\"?>\n");
+ $parser->parse("<run>\n");
+ $this->assertTrue($parser->parse("<case>\n"));
+ $this->assertTrue($parser->parse("<name>a_case</name>\n"));
+ $this->assertTrue($parser->parse("</case>\n"));
+ $parser->parse("</run>\n");
+ }
+
+ function testEmptyMethod() {
+ $listener = &new MockSimpleScorer();
+ $listener->expectOnce('paintCaseStart', array('a_case'));
+ $listener->expectOnce('paintCaseEnd', array('a_case'));
+ $listener->expectOnce('paintMethodStart', array('a_method'));
+ $listener->expectOnce('paintMethodEnd', array('a_method'));
+ $parser = &new SimpleTestXmlParser($listener);
+ $parser->parse("<?xml version=\"1.0\"?>\n");
+ $parser->parse("<run>\n");
+ $parser->parse("<case>\n");
+ $parser->parse("<name>a_case</name>\n");
+ $this->assertTrue($parser->parse("<test>\n"));
+ $this->assertTrue($parser->parse("<name>a_method</name>\n"));
+ $this->assertTrue($parser->parse("</test>\n"));
+ $parser->parse("</case>\n");
+ $parser->parse("</run>\n");
+ }
+
+ function testNestedGroup() {
+ $listener = &new MockSimpleScorer();
+ $listener->expectArgumentsAt(0, 'paintGroupStart', array('a_group', 7));
+ $listener->expectArgumentsAt(1, 'paintGroupStart', array('b_group', 3));
+ $listener->expectCallCount('paintGroupStart', 2);
+ $listener->expectArgumentsAt(0, 'paintGroupEnd', array('b_group'));
+ $listener->expectArgumentsAt(1, 'paintGroupEnd', array('a_group'));
+ $listener->expectCallCount('paintGroupEnd', 2);
+
+ $parser = &new SimpleTestXmlParser($listener);
+ $parser->parse("<?xml version=\"1.0\"?>\n");
+ $parser->parse("<run>\n");
+
+ $this->assertTrue($parser->parse("<group size=\"7\">\n"));
+ $this->assertTrue($parser->parse("<name>a_group</name>\n"));
+ $this->assertTrue($parser->parse("<group size=\"3\">\n"));
+ $this->assertTrue($parser->parse("<name>b_group</name>\n"));
+ $this->assertTrue($parser->parse("</group>\n"));
+ $this->assertTrue($parser->parse("</group>\n"));
+ $parser->parse("</run>\n");
+ }
+}
+
+class AnyOldSignal {
+ var $stuff = true;
+}
+
+class TestOfXmlResultsParsing extends UnitTestCase {
+
+ function sendValidStart(&$parser) {
+ $parser->parse("<?xml version=\"1.0\"?>\n");
+ $parser->parse("<run>\n");
+ $parser->parse("<case>\n");
+ $parser->parse("<name>a_case</name>\n");
+ $parser->parse("<test>\n");
+ $parser->parse("<name>a_method</name>\n");
+ }
+
+ function sendValidEnd(&$parser) {
+ $parser->parse("</test>\n");
+ $parser->parse("</case>\n");
+ $parser->parse("</run>\n");
+ }
+
+ function testPass() {
+ $listener = &new MockSimpleScorer();
+ $listener->expectOnce('paintPass', array('a_message'));
+ $parser = &new SimpleTestXmlParser($listener);
+ $this->sendValidStart($parser);
+ $this->assertTrue($parser->parse("<pass>a_message</pass>\n"));
+ $this->sendValidEnd($parser);
+ }
+
+ function testFail() {
+ $listener = &new MockSimpleScorer();
+ $listener->expectOnce('paintFail', array('a_message'));
+ $parser = &new SimpleTestXmlParser($listener);
+ $this->sendValidStart($parser);
+ $this->assertTrue($parser->parse("<fail>a_message</fail>\n"));
+ $this->sendValidEnd($parser);
+ }
+
+ function testException() {
+ $listener = &new MockSimpleScorer();
+ $listener->expectOnce('paintError', array('a_message'));
+ $parser = &new SimpleTestXmlParser($listener);
+ $this->sendValidStart($parser);
+ $this->assertTrue($parser->parse("<exception>a_message</exception>\n"));
+ $this->sendValidEnd($parser);
+ }
+
+ function testSkip() {
+ $listener = &new MockSimpleScorer();
+ $listener->expectOnce('paintSkip', array('a_message'));
+ $parser = &new SimpleTestXmlParser($listener);
+ $this->sendValidStart($parser);
+ $this->assertTrue($parser->parse("<skip>a_message</skip>\n"));
+ $this->sendValidEnd($parser);
+ }
+
+ function testSignal() {
+ $signal = new AnyOldSignal();
+ $signal->stuff = "Hello";
+ $listener = &new MockSimpleScorer();
+ $listener->expectOnce('paintSignal', array('a_signal', $signal));
+ $parser = &new SimpleTestXmlParser($listener);
+ $this->sendValidStart($parser);
+ $this->assertTrue($parser->parse(
+ "<signal type=\"a_signal\"><![CDATA[" .
+ serialize($signal) . "]]></signal>\n"));
+ $this->sendValidEnd($parser);
+ }
+
+ function testMessage() {
+ $listener = &new MockSimpleScorer();
+ $listener->expectOnce('paintMessage', array('a_message'));
+ $parser = &new SimpleTestXmlParser($listener);
+ $this->sendValidStart($parser);
+ $this->assertTrue($parser->parse("<message>a_message</message>\n"));
+ $this->sendValidEnd($parser);
+ }
+
+ function testFormattedMessage() {
+ $listener = &new MockSimpleScorer();
+ $listener->expectOnce('paintFormattedMessage', array("\na\tmessage\n"));
+ $parser = &new SimpleTestXmlParser($listener);
+ $this->sendValidStart($parser);
+ $this->assertTrue($parser->parse("<formatted><![CDATA[\na\tmessage\n]]></formatted>\n"));
+ $this->sendValidEnd($parser);
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/test_case.php b/vendors/simpletest/test_case.php
new file mode 100644
index 000000000..e5b229833
--- /dev/null
+++ b/vendors/simpletest/test_case.php
@@ -0,0 +1,708 @@
+<?php
+/**
+ * Base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: test_case.php 1726 2008-04-08 01:20:10Z lastcraft $
+ */
+
+/**#@+
+ * Includes SimpleTest files and defined the root constant
+ * for dependent libraries.
+ */
+require_once(dirname(__FILE__) . '/invoker.php');
+require_once(dirname(__FILE__) . '/errors.php');
+require_once(dirname(__FILE__) . '/compatibility.php');
+require_once(dirname(__FILE__) . '/scorer.php');
+require_once(dirname(__FILE__) . '/expectation.php');
+require_once(dirname(__FILE__) . '/dumper.php');
+require_once(dirname(__FILE__) . '/simpletest.php');
+if (version_compare(phpversion(), '5') >= 0) {
+ require_once(dirname(__FILE__) . '/exceptions.php');
+ require_once(dirname(__FILE__) . '/reflection_php5.php');
+} else {
+ require_once(dirname(__FILE__) . '/reflection_php4.php');
+}
+if (! defined('SIMPLE_TEST')) {
+ /**
+ * @ignore
+ */
+ define('SIMPLE_TEST', dirname(__FILE__) . DIRECTORY_SEPARATOR);
+}
+/**#@-*/
+
+/**
+ * Basic test case. This is the smallest unit of a test
+ * suite. It searches for
+ * all methods that start with the the string "test" and
+ * runs them. Working test cases extend this class.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleTestCase {
+ var $_label = false;
+ var $_reporter;
+ var $_observers;
+ var $_should_skip = false;
+
+ /**
+ * Sets up the test with no display.
+ * @param string $label If no test name is given then
+ * the class name is used.
+ * @access public
+ */
+ function SimpleTestCase($label = false) {
+ if ($label) {
+ $this->_label = $label;
+ }
+ }
+
+ /**
+ * Accessor for the test name for subclasses.
+ * @return string Name of the test.
+ * @access public
+ */
+ function getLabel() {
+ return $this->_label ? $this->_label : get_class($this);
+ }
+
+ /**
+ * This is a placeholder for skipping tests. In this
+ * method you place skipIf() and skipUnless() calls to
+ * set the skipping state.
+ * @access public
+ */
+ function skip() {
+ }
+
+ /**
+ * Will issue a message to the reporter and tell the test
+ * case to skip if the incoming flag is true.
+ * @param string $should_skip Condition causing the tests to be skipped.
+ * @param string $message Text of skip condition.
+ * @access public
+ */
+ function skipIf($should_skip, $message = '%s') {
+ if ($should_skip && ! $this->_should_skip) {
+ $this->_should_skip = true;
+ $message = sprintf($message, 'Skipping [' . get_class($this) . ']');
+ $this->_reporter->paintSkip($message . $this->getAssertionLine());
+ }
+ }
+
+ /**
+ * Will issue a message to the reporter and tell the test
+ * case to skip if the incoming flag is false.
+ * @param string $shouldnt_skip Condition causing the tests to be run.
+ * @param string $message Text of skip condition.
+ * @access public
+ */
+ function skipUnless($shouldnt_skip, $message = false) {
+ $this->skipIf(! $shouldnt_skip, $message);
+ }
+
+ /**
+ * Used to invoke the single tests.
+ * @return SimpleInvoker Individual test runner.
+ * @access public
+ */
+ function &createInvoker() {
+ $invoker = &new SimpleErrorTrappingInvoker(new SimpleInvoker($this));
+ if (version_compare(phpversion(), '5') >= 0) {
+ $invoker = &new SimpleExceptionTrappingInvoker($invoker);
+ }
+ return $invoker;
+ }
+
+ /**
+ * Uses reflection to run every method within itself
+ * starting with the string "test" unless a method
+ * is specified.
+ * @param SimpleReporter $reporter Current test reporter.
+ * @return boolean True if all tests passed.
+ * @access public
+ */
+ function run(&$reporter) {
+ $context = &SimpleTest::getContext();
+ $context->setTest($this);
+ $context->setReporter($reporter);
+ $this->_reporter = &$reporter;
+ $started = false;
+ foreach ($this->getTests() as $method) {
+ if ($reporter->shouldInvoke($this->getLabel(), $method)) {
+ $this->skip();
+ if ($this->_should_skip) {
+ break;
+ }
+ if (! $started) {
+ $reporter->paintCaseStart($this->getLabel());
+ $started = true;
+ }
+ $invoker = &$this->_reporter->createInvoker($this->createInvoker());
+ $invoker->before($method);
+ $invoker->invoke($method);
+ $invoker->after($method);
+ }
+ }
+ if ($started) {
+ $reporter->paintCaseEnd($this->getLabel());
+ }
+ unset($this->_reporter);
+ return $reporter->getStatus();
+ }
+
+ /**
+ * Gets a list of test names. Normally that will
+ * be all internal methods that start with the
+ * name "test". This method should be overridden
+ * if you want a different rule.
+ * @return array List of test names.
+ * @access public
+ */
+ function getTests() {
+ $methods = array();
+ foreach (get_class_methods(get_class($this)) as $method) {
+ if ($this->_isTest($method)) {
+ $methods[] = $method;
+ }
+ }
+ return $methods;
+ }
+
+ /**
+ * Tests to see if the method is a test that should
+ * be run. Currently any method that starts with 'test'
+ * is a candidate unless it is the constructor.
+ * @param string $method Method name to try.
+ * @return boolean True if test method.
+ * @access protected
+ */
+ function _isTest($method) {
+ if (strtolower(substr($method, 0, 4)) == 'test') {
+ return ! SimpleTestCompatibility::isA($this, strtolower($method));
+ }
+ return false;
+ }
+
+ /**
+ * Announces the start of the test.
+ * @param string $method Test method just started.
+ * @access public
+ */
+ function before($method) {
+ $this->_reporter->paintMethodStart($method);
+ $this->_observers = array();
+ }
+
+ /**
+ * Sets up unit test wide variables at the start
+ * of each test method. To be overridden in
+ * actual user test cases.
+ * @access public
+ */
+ function setUp() {
+ }
+
+ /**
+ * Clears the data set in the setUp() method call.
+ * To be overridden by the user in actual user test cases.
+ * @access public
+ */
+ function tearDown() {
+ }
+
+ /**
+ * Announces the end of the test. Includes private clean up.
+ * @param string $method Test method just finished.
+ * @access public
+ */
+ function after($method) {
+ for ($i = 0; $i < count($this->_observers); $i++) {
+ $this->_observers[$i]->atTestEnd($method, $this);
+ }
+ $this->_reporter->paintMethodEnd($method);
+ }
+
+ /**
+ * Sets up an observer for the test end.
+ * @param object $observer Must have atTestEnd()
+ * method.
+ * @access public
+ */
+ function tell(&$observer) {
+ $this->_observers[] = &$observer;
+ }
+
+ /**
+ * @deprecated
+ */
+ function pass($message = "Pass") {
+ if (! isset($this->_reporter)) {
+ trigger_error('Can only make assertions within test methods');
+ }
+ $this->_reporter->paintPass(
+ $message . $this->getAssertionLine());
+ return true;
+ }
+
+ /**
+ * Sends a fail event with a message.
+ * @param string $message Message to send.
+ * @access public
+ */
+ function fail($message = "Fail") {
+ if (! isset($this->_reporter)) {
+ trigger_error('Can only make assertions within test methods');
+ }
+ $this->_reporter->paintFail(
+ $message . $this->getAssertionLine());
+ return false;
+ }
+
+ /**
+ * Formats a PHP error and dispatches it to the
+ * reporter.
+ * @param integer $severity PHP error code.
+ * @param string $message Text of error.
+ * @param string $file File error occoured in.
+ * @param integer $line Line number of error.
+ * @access public
+ */
+ function error($severity, $message, $file, $line) {
+ if (! isset($this->_reporter)) {
+ trigger_error('Can only make assertions within test methods');
+ }
+ $this->_reporter->paintError(
+ "Unexpected PHP error [$message] severity [$severity] in [$file line $line]");
+ }
+
+ /**
+ * Formats an exception and dispatches it to the
+ * reporter.
+ * @param Exception $exception Object thrown.
+ * @access public
+ */
+ function exception($exception) {
+ $this->_reporter->paintException($exception);
+ }
+
+ /**
+ * @deprecated
+ */
+ function signal($type, &$payload) {
+ if (! isset($this->_reporter)) {
+ trigger_error('Can only make assertions within test methods');
+ }
+ $this->_reporter->paintSignal($type, $payload);
+ }
+
+ /**
+ * Runs an expectation directly, for extending the
+ * tests with new expectation classes.
+ * @param SimpleExpectation $expectation Expectation subclass.
+ * @param mixed $compare Value to compare.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assert(&$expectation, $compare, $message = '%s') {
+ if ($expectation->test($compare)) {
+ return $this->pass(sprintf(
+ $message,
+ $expectation->overlayMessage($compare, $this->_reporter->getDumper())));
+ } else {
+ return $this->fail(sprintf(
+ $message,
+ $expectation->overlayMessage($compare, $this->_reporter->getDumper())));
+ }
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertExpectation(&$expectation, $compare, $message = '%s') {
+ return $this->assert($expectation, $compare, $message);
+ }
+
+ /**
+ * Uses a stack trace to find the line of an assertion.
+ * @return string Line number of first assert*
+ * method embedded in format string.
+ * @access public
+ */
+ function getAssertionLine() {
+ $trace = new SimpleStackTrace(array('assert', 'expect', 'pass', 'fail', 'skip'));
+ return $trace->traceMethod();
+ }
+
+ /**
+ * Sends a formatted dump of a variable to the
+ * test suite for those emergency debugging
+ * situations.
+ * @param mixed $variable Variable to display.
+ * @param string $message Message to display.
+ * @return mixed The original variable.
+ * @access public
+ */
+ function dump($variable, $message = false) {
+ $dumper = $this->_reporter->getDumper();
+ $formatted = $dumper->dump($variable);
+ if ($message) {
+ $formatted = $message . "\n" . $formatted;
+ }
+ $this->_reporter->paintFormattedMessage($formatted);
+ return $variable;
+ }
+
+ /**
+ * @deprecated
+ */
+ function sendMessage($message) {
+ $this->_reporter->PaintMessage($message);
+ }
+
+ /**
+ * Accessor for the number of subtests including myelf.
+ * @return integer Number of test cases.
+ * @access public
+ * @static
+ */
+ function getSize() {
+ return 1;
+ }
+}
+
+/**
+ * Helps to extract test cases automatically from a file.
+ */
+class SimpleFileLoader {
+
+ /**
+ * Builds a test suite from a library of test cases.
+ * The new suite is composed into this one.
+ * @param string $test_file File name of library with
+ * test case classes.
+ * @return TestSuite The new test suite.
+ * @access public
+ */
+ function &load($test_file) {
+ $existing_classes = get_declared_classes();
+ $existing_globals = get_defined_vars();
+ include_once($test_file);
+ $new_globals = get_defined_vars();
+ $this->_makeFileVariablesGlobal($existing_globals, $new_globals);
+ $new_classes = array_diff(get_declared_classes(), $existing_classes);
+ if (empty($new_classes)) {
+ $new_classes = $this->_scrapeClassesFromFile($test_file);
+ }
+ $classes = $this->selectRunnableTests($new_classes);
+ $suite = &$this->createSuiteFromClasses($test_file, $classes);
+ return $suite;
+ }
+
+ /**
+ * Imports new variables into the global namespace.
+ * @param hash $existing Variables before the file was loaded.
+ * @param hash $new Variables after the file was loaded.
+ * @access private
+ */
+ function _makeFileVariablesGlobal($existing, $new) {
+ $globals = array_diff(array_keys($new), array_keys($existing));
+ foreach ($globals as $global) {
+ $_GLOBALS[$global] = $new[$global];
+ }
+ }
+
+ /**
+ * Lookup classnames from file contents, in case the
+ * file may have been included before.
+ * Note: This is probably too clever by half. Figuring this
+ * out after a failed test case is going to be tricky for us,
+ * never mind the user. A test case should not be included
+ * twice anyway.
+ * @param string $test_file File name with classes.
+ * @access private
+ */
+ function _scrapeClassesFromFile($test_file) {
+ preg_match_all('~^\s*class\s+(\w+)(\s+(extends|implements)\s+\w+)*\s*\{~mi',
+ file_get_contents($test_file),
+ $matches );
+ return $matches[1];
+ }
+
+ /**
+ * Calculates the incoming test cases. Skips abstract
+ * and ignored classes.
+ * @param array $candidates Candidate classes.
+ * @return array New classes which are test
+ * cases that shouldn't be ignored.
+ * @access public
+ */
+ function selectRunnableTests($candidates) {
+ $classes = array();
+ foreach ($candidates as $class) {
+ if (TestSuite::getBaseTestCase($class)) {
+ $reflection = new SimpleReflection($class);
+ if ($reflection->isAbstract()) {
+ SimpleTest::ignore($class);
+ } else {
+ $classes[] = $class;
+ }
+ }
+ }
+ return $classes;
+ }
+
+ /**
+ * Builds a test suite from a class list.
+ * @param string $title Title of new group.
+ * @param array $classes Test classes.
+ * @return TestSuite Group loaded with the new
+ * test cases.
+ * @access public
+ */
+ function &createSuiteFromClasses($title, $classes) {
+ if (count($classes) == 0) {
+ $suite = &new BadTestSuite($title, "No runnable test cases in [$title]");
+ return $suite;
+ }
+ SimpleTest::ignoreParentsIfIgnored($classes);
+ $suite = &new TestSuite($title);
+ foreach ($classes as $class) {
+ if (! SimpleTest::isIgnored($class)) {
+ $suite->addTestClass($class);
+ }
+ }
+ return $suite;
+ }
+}
+
+/**
+ * This is a composite test class for combining
+ * test cases and other RunnableTest classes into
+ * a group test.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class TestSuite {
+ var $_label;
+ var $_test_cases;
+
+ /**
+ * Sets the name of the test suite.
+ * @param string $label Name sent at the start and end
+ * of the test.
+ * @access public
+ */
+ function TestSuite($label = false) {
+ $this->_label = $label;
+ $this->_test_cases = array();
+ }
+
+ /**
+ * Accessor for the test name for subclasses. If the suite
+ * wraps a single test case the label defaults to the name of that test.
+ * @return string Name of the test.
+ * @access public
+ */
+ function getLabel() {
+ if (! $this->_label) {
+ return ($this->getSize() == 1) ?
+ get_class($this->_test_cases[0]) : get_class($this);
+ } else {
+ return $this->_label;
+ }
+ }
+
+ /**
+ * @deprecated
+ */
+ function addTestCase(&$test_case) {
+ $this->_test_cases[] = &$test_case;
+ }
+
+ /**
+ * @deprecated
+ */
+ function addTestClass($class) {
+ if (TestSuite::getBaseTestCase($class) == 'testsuite') {
+ $this->_test_cases[] = &new $class();
+ } else {
+ $this->_test_cases[] = $class;
+ }
+ }
+
+ /**
+ * Adds a test into the suite by instance or class. The class will
+ * be instantiated if it's a test suite.
+ * @param SimpleTestCase $test_case Suite or individual test
+ * case implementing the
+ * runnable test interface.
+ * @access public
+ */
+ function add(&$test_case) {
+ if (! is_string($test_case)) {
+ $this->_test_cases[] = &$test_case;
+ } elseif (TestSuite::getBaseTestCase($class) == 'testsuite') {
+ $this->_test_cases[] = &new $class();
+ } else {
+ $this->_test_cases[] = $class;
+ }
+ }
+
+ /**
+ * @deprecated
+ */
+ function addTestFile($test_file) {
+ $this->addFile($test_file);
+ }
+
+ /**
+ * Builds a test suite from a library of test cases.
+ * The new suite is composed into this one.
+ * @param string $test_file File name of library with
+ * test case classes.
+ * @access public
+ */
+ function addFile($test_file) {
+ $extractor = new SimpleFileLoader();
+ $this->add($extractor->load($test_file));
+ }
+
+ /**
+ * Delegates to a visiting collector to add test
+ * files.
+ * @param string $path Path to scan from.
+ * @param SimpleCollector $collector Directory scanner.
+ * @access public
+ */
+ function collect($path, &$collector) {
+ $collector->collect($this, $path);
+ }
+
+ /**
+ * Invokes run() on all of the held test cases, instantiating
+ * them if necessary.
+ * @param SimpleReporter $reporter Current test reporter.
+ * @access public
+ */
+ function run(&$reporter) {
+ $reporter->paintGroupStart($this->getLabel(), $this->getSize());
+ for ($i = 0, $count = count($this->_test_cases); $i < $count; $i++) {
+ if (is_string($this->_test_cases[$i])) {
+ $class = $this->_test_cases[$i];
+ $test = &new $class();
+ $test->run($reporter);
+ unset($test);
+ } else {
+ $this->_test_cases[$i]->run($reporter);
+ }
+ }
+ $reporter->paintGroupEnd($this->getLabel());
+ return $reporter->getStatus();
+ }
+
+ /**
+ * Number of contained test cases.
+ * @return integer Total count of cases in the group.
+ * @access public
+ */
+ function getSize() {
+ $count = 0;
+ foreach ($this->_test_cases as $case) {
+ if (is_string($case)) {
+ if (! SimpleTest::isIgnored($case)) {
+ $count++;
+ }
+ } else {
+ $count += $case->getSize();
+ }
+ }
+ return $count;
+ }
+
+ /**
+ * Test to see if a class is derived from the
+ * SimpleTestCase class.
+ * @param string $class Class name.
+ * @access public
+ * @static
+ */
+ function getBaseTestCase($class) {
+ while ($class = get_parent_class($class)) {
+ $class = strtolower($class);
+ if ($class == 'simpletestcase' || $class == 'testsuite') {
+ return $class;
+ }
+ }
+ return false;
+ }
+}
+
+/**
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @deprecated
+ */
+class GroupTest extends TestSuite { }
+
+/**
+ * This is a failing group test for when a test suite hasn't
+ * loaded properly.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class BadTestSuite {
+ var $_label;
+ var $_error;
+
+ /**
+ * Sets the name of the test suite and error message.
+ * @param string $label Name sent at the start and end
+ * of the test.
+ * @access public
+ */
+ function BadTestSuite($label, $error) {
+ $this->_label = $label;
+ $this->_error = $error;
+ }
+
+ /**
+ * Accessor for the test name for subclasses.
+ * @return string Name of the test.
+ * @access public
+ */
+ function getLabel() {
+ return $this->_label;
+ }
+
+ /**
+ * Sends a single error to the reporter.
+ * @param SimpleReporter $reporter Current test reporter.
+ * @access public
+ */
+ function run(&$reporter) {
+ $reporter->paintGroupStart($this->getLabel(), $this->getSize());
+ $reporter->paintFail('Bad TestSuite [' . $this->getLabel() .
+ '] with error [' . $this->_error . ']');
+ $reporter->paintGroupEnd($this->getLabel());
+ return $reporter->getStatus();
+ }
+
+ /**
+ * Number of contained test cases. Always zero.
+ * @return integer Total count of cases in the group.
+ * @access public
+ */
+ function getSize() {
+ return 0;
+ }
+}
+
+/**
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @deprecated
+ */
+class BadGroupTest extends BadTestSuite { }
+?>
diff --git a/vendors/simpletest/unit_tester.php b/vendors/simpletest/unit_tester.php
new file mode 100644
index 000000000..8bb757d4e
--- /dev/null
+++ b/vendors/simpletest/unit_tester.php
@@ -0,0 +1,420 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: unit_tester.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/test_case.php');
+require_once(dirname(__FILE__) . '/dumper.php');
+/**#@-*/
+
+/**
+ * Standard unit test class for day to day testing
+ * of PHP code XP style. Adds some useful standard
+ * assertions.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class UnitTestCase extends SimpleTestCase {
+
+ /**
+ * Creates an empty test case. Should be subclassed
+ * with test methods for a functional test case.
+ * @param string $label Name of test case. Will use
+ * the class name if none specified.
+ * @access public
+ */
+ function UnitTestCase($label = false) {
+ if (! $label) {
+ $label = get_class($this);
+ }
+ $this->SimpleTestCase($label);
+ }
+
+ /**
+ * Called from within the test methods to register
+ * passes and failures.
+ * @param boolean $result Pass on true.
+ * @param string $message Message to display describing
+ * the test state.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertTrue($result, $message = false) {
+ return $this->assert(new TrueExpectation(), $result, $message);
+ }
+
+ /**
+ * Will be true on false and vice versa. False
+ * is the PHP definition of false, so that null,
+ * empty strings, zero and an empty array all count
+ * as false.
+ * @param boolean $result Pass on false.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertFalse($result, $message = '%s') {
+ return $this->assert(new FalseExpectation(), $result, $message);
+ }
+
+ /**
+ * Will be true if the value is null.
+ * @param null $value Supposedly null value.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertNull($value, $message = '%s') {
+ $dumper = &new SimpleDumper();
+ $message = sprintf(
+ $message,
+ '[' . $dumper->describeValue($value) . '] should be null');
+ return $this->assertTrue(! isset($value), $message);
+ }
+
+ /**
+ * Will be true if the value is set.
+ * @param mixed $value Supposedly set value.
+ * @param string $message Message to display.
+ * @return boolean True on pass.
+ * @access public
+ */
+ function assertNotNull($value, $message = '%s') {
+ $dumper = &new SimpleDumper();
+ $message = sprintf(
+ $message,
+ '[' . $dumper->describeValue($value) . '] should not be null');
+ return $this->assertTrue(isset($value), $message);
+ }
+
+ /**
+ * Type and class test. Will pass if class
+ * matches the type name or is a subclass or
+ * if not an object, but the type is correct.
+ * @param mixed $object Object to test.
+ * @param string $type Type name as string.
+ * @param string $message Message to display.
+ * @return boolean True on pass.
+ * @access public
+ */
+ function assertIsA($object, $type, $message = '%s') {
+ return $this->assert(
+ new IsAExpectation($type),
+ $object,
+ $message);
+ }
+
+ /**
+ * Type and class mismatch test. Will pass if class
+ * name or underling type does not match the one
+ * specified.
+ * @param mixed $object Object to test.
+ * @param string $type Type name as string.
+ * @param string $message Message to display.
+ * @return boolean True on pass.
+ * @access public
+ */
+ function assertNotA($object, $type, $message = '%s') {
+ return $this->assert(
+ new NotAExpectation($type),
+ $object,
+ $message);
+ }
+
+ /**
+ * Will trigger a pass if the two parameters have
+ * the same value only. Otherwise a fail.
+ * @param mixed $first Value to compare.
+ * @param mixed $second Value to compare.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertEqual($first, $second, $message = '%s') {
+ return $this->assert(
+ new EqualExpectation($first),
+ $second,
+ $message);
+ }
+
+ /**
+ * Will trigger a pass if the two parameters have
+ * a different value. Otherwise a fail.
+ * @param mixed $first Value to compare.
+ * @param mixed $second Value to compare.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertNotEqual($first, $second, $message = '%s') {
+ return $this->assert(
+ new NotEqualExpectation($first),
+ $second,
+ $message);
+ }
+
+ /**
+ * Will trigger a pass if the if the first parameter
+ * is near enough to the second by the margin.
+ * @param mixed $first Value to compare.
+ * @param mixed $second Value to compare.
+ * @param mixed $margin Fuzziness of match.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertWithinMargin($first, $second, $margin, $message = '%s') {
+ return $this->assert(
+ new WithinMarginExpectation($first, $margin),
+ $second,
+ $message);
+ }
+
+ /**
+ * Will trigger a pass if the two parameters differ
+ * by more than the margin.
+ * @param mixed $first Value to compare.
+ * @param mixed $second Value to compare.
+ * @param mixed $margin Fuzziness of match.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertOutsideMargin($first, $second, $margin, $message = '%s') {
+ return $this->assert(
+ new OutsideMarginExpectation($first, $margin),
+ $second,
+ $message);
+ }
+
+ /**
+ * Will trigger a pass if the two parameters have
+ * the same value and same type. Otherwise a fail.
+ * @param mixed $first Value to compare.
+ * @param mixed $second Value to compare.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertIdentical($first, $second, $message = '%s') {
+ return $this->assert(
+ new IdenticalExpectation($first),
+ $second,
+ $message);
+ }
+
+ /**
+ * Will trigger a pass if the two parameters have
+ * the different value or different type.
+ * @param mixed $first Value to compare.
+ * @param mixed $second Value to compare.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertNotIdentical($first, $second, $message = '%s') {
+ return $this->assert(
+ new NotIdenticalExpectation($first),
+ $second,
+ $message);
+ }
+
+ /**
+ * Will trigger a pass if both parameters refer
+ * to the same object. Fail otherwise.
+ * @param mixed $first Object reference to check.
+ * @param mixed $second Hopefully the same object.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertReference(&$first, &$second, $message = '%s') {
+ $dumper = &new SimpleDumper();
+ $message = sprintf(
+ $message,
+ '[' . $dumper->describeValue($first) .
+ '] and [' . $dumper->describeValue($second) .
+ '] should reference the same object');
+ return $this->assertTrue(
+ SimpleTestCompatibility::isReference($first, $second),
+ $message);
+ }
+
+ /**
+ * Will trigger a pass if both parameters refer
+ * to different objects. Fail otherwise. The objects
+ * have to be identical though.
+ * @param mixed $first Object reference to check.
+ * @param mixed $second Hopefully not the same object.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertClone(&$first, &$second, $message = '%s') {
+ $dumper = &new SimpleDumper();
+ $message = sprintf(
+ $message,
+ '[' . $dumper->describeValue($first) .
+ '] and [' . $dumper->describeValue($second) .
+ '] should not be the same object');
+ $identical = &new IdenticalExpectation($first);
+ return $this->assertTrue(
+ $identical->test($second) &&
+ ! SimpleTestCompatibility::isReference($first, $second),
+ $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertCopy(&$first, &$second, $message = "%s") {
+ $dumper = &new SimpleDumper();
+ $message = sprintf(
+ $message,
+ "[" . $dumper->describeValue($first) .
+ "] and [" . $dumper->describeValue($second) .
+ "] should not be the same object");
+ return $this->assertFalse(
+ SimpleTestCompatibility::isReference($first, $second),
+ $message);
+ }
+
+ /**
+ * Will trigger a pass if the Perl regex pattern
+ * is found in the subject. Fail otherwise.
+ * @param string $pattern Perl regex to look for including
+ * the regex delimiters.
+ * @param string $subject String to search in.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertPattern($pattern, $subject, $message = '%s') {
+ return $this->assert(
+ new PatternExpectation($pattern),
+ $subject,
+ $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertWantedPattern($pattern, $subject, $message = '%s') {
+ return $this->assertPattern($pattern, $subject, $message);
+ }
+
+ /**
+ * Will trigger a pass if the perl regex pattern
+ * is not present in subject. Fail if found.
+ * @param string $pattern Perl regex to look for including
+ * the regex delimiters.
+ * @param string $subject String to search in.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertNoPattern($pattern, $subject, $message = '%s') {
+ return $this->assert(
+ new NoPatternExpectation($pattern),
+ $subject,
+ $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertNoUnwantedPattern($pattern, $subject, $message = '%s') {
+ return $this->assertNoPattern($pattern, $subject, $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function swallowErrors() {
+ $context = &SimpleTest::getContext();
+ $queue = &$context->get('SimpleErrorQueue');
+ $queue->clear();
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertNoErrors($message = '%s') {
+ $context = &SimpleTest::getContext();
+ $queue = &$context->get('SimpleErrorQueue');
+ return $queue->assertNoErrors($message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertError($expected = false, $message = '%s') {
+ $context = &SimpleTest::getContext();
+ $queue = &$context->get('SimpleErrorQueue');
+ return $queue->assertError($this->_coerceExpectation($expected), $message);
+ }
+
+ /**
+ * Prepares for an error. If the error mismatches it
+ * passes through, otherwise it is swallowed. Any
+ * left over errors trigger failures.
+ * @param SimpleExpectation/string $expected The error to match.
+ * @param string $message Message on failure.
+ * @access public
+ */
+ function expectError($expected = false, $message = '%s') {
+ $context = &SimpleTest::getContext();
+ $queue = &$context->get('SimpleErrorQueue');
+ $queue->expectError($this->_coerceExpectation($expected), $message);
+ }
+
+ /**
+ * Prepares for an exception. If the error mismatches it
+ * passes through, otherwise it is swallowed. Any
+ * left over errors trigger failures.
+ * @param SimpleExpectation/Exception $expected The error to match.
+ * @param string $message Message on failure.
+ * @access public
+ */
+ function expectException($expected = false, $message = '%s') {
+ $context = &SimpleTest::getContext();
+ $queue = &$context->get('SimpleExceptionTrap');
+ // :HACK: Directly substituting in seems to cause a segfault with
+ // Zend Optimizer on some systems
+ $line = $this->getAssertionLine();
+ $queue->expectException($expected, $message . $line);
+ }
+
+ /**
+ * Creates an equality expectation if the
+ * object/value is not already some type
+ * of expectation.
+ * @param mixed $expected Expected value.
+ * @return SimpleExpectation Expectation object.
+ * @access private
+ */
+ function _coerceExpectation($expected) {
+ if ($expected == false) {
+ return new TrueExpectation();
+ }
+ if (SimpleTestCompatibility::isA($expected, 'SimpleExpectation')) {
+ return $expected;
+ }
+ return new EqualExpectation(
+ is_string($expected) ? str_replace('%', '%%', $expected) : $expected);
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertErrorPattern($pattern, $message = '%s') {
+ return $this->assertError(new PatternExpectation($pattern), $message);
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/url.php b/vendors/simpletest/url.php
new file mode 100644
index 000000000..0ea220409
--- /dev/null
+++ b/vendors/simpletest/url.php
@@ -0,0 +1,528 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: url.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/encoding.php');
+/**#@-*/
+
+/**
+ * URL parser to replace parse_url() PHP function which
+ * got broken in PHP 4.3.0. Adds some browser specific
+ * functionality such as expandomatics.
+ * Guesses a bit trying to separate the host from
+ * the path and tries to keep a raw, possibly unparsable,
+ * request string as long as possible.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleUrl {
+ var $_scheme;
+ var $_username;
+ var $_password;
+ var $_host;
+ var $_port;
+ var $_path;
+ var $_request;
+ var $_fragment;
+ var $_x;
+ var $_y;
+ var $_target;
+ var $_raw = false;
+
+ /**
+ * Constructor. Parses URL into sections.
+ * @param string $url Incoming URL.
+ * @access public
+ */
+ function SimpleUrl($url = '') {
+ list($x, $y) = $this->_chompCoordinates($url);
+ $this->setCoordinates($x, $y);
+ $this->_scheme = $this->_chompScheme($url);
+ list($this->_username, $this->_password) = $this->_chompLogin($url);
+ $this->_host = $this->_chompHost($url);
+ $this->_port = false;
+ if (preg_match('/(.*?):(.*)/', $this->_host, $host_parts)) {
+ $this->_host = $host_parts[1];
+ $this->_port = (integer)$host_parts[2];
+ }
+ $this->_path = $this->_chompPath($url);
+ $this->_request = $this->_parseRequest($this->_chompRequest($url));
+ $this->_fragment = (strncmp($url, "#", 1) == 0 ? substr($url, 1) : false);
+ $this->_target = false;
+ }
+
+ /**
+ * Extracts the X, Y coordinate pair from an image map.
+ * @param string $url URL so far. The coordinates will be
+ * removed.
+ * @return array X, Y as a pair of integers.
+ * @access private
+ */
+ function _chompCoordinates(&$url) {
+ if (preg_match('/(.*)\?(\d+),(\d+)$/', $url, $matches)) {
+ $url = $matches[1];
+ return array((integer)$matches[2], (integer)$matches[3]);
+ }
+ return array(false, false);
+ }
+
+ /**
+ * Extracts the scheme part of an incoming URL.
+ * @param string $url URL so far. The scheme will be
+ * removed.
+ * @return string Scheme part or false.
+ * @access private
+ */
+ function _chompScheme(&$url) {
+ if (preg_match('/^([^\/:]*):(\/\/)(.*)/', $url, $matches)) {
+ $url = $matches[2] . $matches[3];
+ return $matches[1];
+ }
+ return false;
+ }
+
+ /**
+ * Extracts the username and password from the
+ * incoming URL. The // prefix will be reattached
+ * to the URL after the doublet is extracted.
+ * @param string $url URL so far. The username and
+ * password are removed.
+ * @return array Two item list of username and
+ * password. Will urldecode() them.
+ * @access private
+ */
+ function _chompLogin(&$url) {
+ $prefix = '';
+ if (preg_match('/^(\/\/)(.*)/', $url, $matches)) {
+ $prefix = $matches[1];
+ $url = $matches[2];
+ }
+ if (preg_match('/^([^\/]*)@(.*)/', $url, $matches)) {
+ $url = $prefix . $matches[2];
+ $parts = split(":", $matches[1]);
+ return array(
+ urldecode($parts[0]),
+ isset($parts[1]) ? urldecode($parts[1]) : false);
+ }
+ $url = $prefix . $url;
+ return array(false, false);
+ }
+
+ /**
+ * Extracts the host part of an incoming URL.
+ * Includes the port number part. Will extract
+ * the host if it starts with // or it has
+ * a top level domain or it has at least two
+ * dots.
+ * @param string $url URL so far. The host will be
+ * removed.
+ * @return string Host part guess or false.
+ * @access private
+ */
+ function _chompHost(&$url) {
+ if (preg_match('/^(\/\/)(.*?)(\/.*|\?.*|#.*|$)/', $url, $matches)) {
+ $url = $matches[3];
+ return $matches[2];
+ }
+ if (preg_match('/(.*?)(\.\.\/|\.\/|\/|\?|#|$)(.*)/', $url, $matches)) {
+ $tlds = SimpleUrl::getAllTopLevelDomains();
+ if (preg_match('/[a-z0-9\-]+\.(' . $tlds . ')/i', $matches[1])) {
+ $url = $matches[2] . $matches[3];
+ return $matches[1];
+ } elseif (preg_match('/[a-z0-9\-]+\.[a-z0-9\-]+\.[a-z0-9\-]+/i', $matches[1])) {
+ $url = $matches[2] . $matches[3];
+ return $matches[1];
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Extracts the path information from the incoming
+ * URL. Strips this path from the URL.
+ * @param string $url URL so far. The host will be
+ * removed.
+ * @return string Path part or '/'.
+ * @access private
+ */
+ function _chompPath(&$url) {
+ if (preg_match('/(.*?)(\?|#|$)(.*)/', $url, $matches)) {
+ $url = $matches[2] . $matches[3];
+ return ($matches[1] ? $matches[1] : '');
+ }
+ return '';
+ }
+
+ /**
+ * Strips off the request data.
+ * @param string $url URL so far. The request will be
+ * removed.
+ * @return string Raw request part.
+ * @access private
+ */
+ function _chompRequest(&$url) {
+ if (preg_match('/\?(.*?)(#|$)(.*)/', $url, $matches)) {
+ $url = $matches[2] . $matches[3];
+ return $matches[1];
+ }
+ return '';
+ }
+
+ /**
+ * Breaks the request down into an object.
+ * @param string $raw Raw request.
+ * @return SimpleFormEncoding Parsed data.
+ * @access private
+ */
+ function _parseRequest($raw) {
+ $this->_raw = $raw;
+ $request = new SimpleGetEncoding();
+ foreach (split("&", $raw) as $pair) {
+ if (preg_match('/(.*?)=(.*)/', $pair, $matches)) {
+ $request->add($matches[1], urldecode($matches[2]));
+ } elseif ($pair) {
+ $request->add($pair, '');
+ }
+ }
+ return $request;
+ }
+
+ /**
+ * Accessor for protocol part.
+ * @param string $default Value to use if not present.
+ * @return string Scheme name, e.g "http".
+ * @access public
+ */
+ function getScheme($default = false) {
+ return $this->_scheme ? $this->_scheme : $default;
+ }
+
+ /**
+ * Accessor for user name.
+ * @return string Username preceding host.
+ * @access public
+ */
+ function getUsername() {
+ return $this->_username;
+ }
+
+ /**
+ * Accessor for password.
+ * @return string Password preceding host.
+ * @access public
+ */
+ function getPassword() {
+ return $this->_password;
+ }
+
+ /**
+ * Accessor for hostname and port.
+ * @param string $default Value to use if not present.
+ * @return string Hostname only.
+ * @access public
+ */
+ function getHost($default = false) {
+ return $this->_host ? $this->_host : $default;
+ }
+
+ /**
+ * Accessor for top level domain.
+ * @return string Last part of host.
+ * @access public
+ */
+ function getTld() {
+ $path_parts = pathinfo($this->getHost());
+ return (isset($path_parts['extension']) ? $path_parts['extension'] : false);
+ }
+
+ /**
+ * Accessor for port number.
+ * @return integer TCP/IP port number.
+ * @access public
+ */
+ function getPort() {
+ return $this->_port;
+ }
+
+ /**
+ * Accessor for path.
+ * @return string Full path including leading slash if implied.
+ * @access public
+ */
+ function getPath() {
+ if (! $this->_path && $this->_host) {
+ return '/';
+ }
+ return $this->_path;
+ }
+
+ /**
+ * Accessor for page if any. This may be a
+ * directory name if ambiguious.
+ * @return Page name.
+ * @access public
+ */
+ function getPage() {
+ if (! preg_match('/([^\/]*?)$/', $this->getPath(), $matches)) {
+ return false;
+ }
+ return $matches[1];
+ }
+
+ /**
+ * Gets the path to the page.
+ * @return string Path less the page.
+ * @access public
+ */
+ function getBasePath() {
+ if (! preg_match('/(.*\/)[^\/]*?$/', $this->getPath(), $matches)) {
+ return false;
+ }
+ return $matches[1];
+ }
+
+ /**
+ * Accessor for fragment at end of URL after the "#".
+ * @return string Part after "#".
+ * @access public
+ */
+ function getFragment() {
+ return $this->_fragment;
+ }
+
+ /**
+ * Sets image coordinates. Set to false to clear
+ * them.
+ * @param integer $x Horizontal position.
+ * @param integer $y Vertical position.
+ * @access public
+ */
+ function setCoordinates($x = false, $y = false) {
+ if (($x === false) || ($y === false)) {
+ $this->_x = $this->_y = false;
+ return;
+ }
+ $this->_x = (integer)$x;
+ $this->_y = (integer)$y;
+ }
+
+ /**
+ * Accessor for horizontal image coordinate.
+ * @return integer X value.
+ * @access public
+ */
+ function getX() {
+ return $this->_x;
+ }
+
+ /**
+ * Accessor for vertical image coordinate.
+ * @return integer Y value.
+ * @access public
+ */
+ function getY() {
+ return $this->_y;
+ }
+
+ /**
+ * Accessor for current request parameters
+ * in URL string form. Will return teh original request
+ * if at all possible even if it doesn't make much
+ * sense.
+ * @return string Form is string "?a=1&b=2", etc.
+ * @access public
+ */
+ function getEncodedRequest() {
+ if ($this->_raw) {
+ $encoded = $this->_raw;
+ } else {
+ $encoded = $this->_request->asUrlRequest();
+ }
+ if ($encoded) {
+ return '?' . preg_replace('/^\?/', '', $encoded);
+ }
+ return '';
+ }
+
+ /**
+ * Adds an additional parameter to the request.
+ * @param string $key Name of parameter.
+ * @param string $value Value as string.
+ * @access public
+ */
+ function addRequestParameter($key, $value) {
+ $this->_raw = false;
+ $this->_request->add($key, $value);
+ }
+
+ /**
+ * Adds additional parameters to the request.
+ * @param hash/SimpleFormEncoding $parameters Additional
+ * parameters.
+ * @access public
+ */
+ function addRequestParameters($parameters) {
+ $this->_raw = false;
+ $this->_request->merge($parameters);
+ }
+
+ /**
+ * Clears down all parameters.
+ * @access public
+ */
+ function clearRequest() {
+ $this->_raw = false;
+ $this->_request = &new SimpleGetEncoding();
+ }
+
+ /**
+ * Gets the frame target if present. Although
+ * not strictly part of the URL specification it
+ * acts as similarily to the browser.
+ * @return boolean/string Frame name or false if none.
+ * @access public
+ */
+ function getTarget() {
+ return $this->_target;
+ }
+
+ /**
+ * Attaches a frame target.
+ * @param string $frame Name of frame.
+ * @access public
+ */
+ function setTarget($frame) {
+ $this->_raw = false;
+ $this->_target = $frame;
+ }
+
+ /**
+ * Renders the URL back into a string.
+ * @return string URL in canonical form.
+ * @access public
+ */
+ function asString() {
+ $path = $this->_path;
+ $scheme = $identity = $host = $encoded = $fragment = '';
+ if ($this->_username && $this->_password) {
+ $identity = $this->_username . ':' . $this->_password . '@';
+ }
+ if ($this->getHost()) {
+ $scheme = $this->getScheme() ? $this->getScheme() : 'http';
+ $scheme .= "://";
+ $host = $this->getHost();
+ }
+ if (substr($this->_path, 0, 1) == '/') {
+ $path = $this->normalisePath($this->_path);
+ }
+ $encoded = $this->getEncodedRequest();
+ $fragment = $this->getFragment() ? '#'. $this->getFragment() : '';
+ $coords = $this->getX() === false ? '' : '?' . $this->getX() . ',' . $this->getY();
+ return "$scheme$identity$host$path$encoded$fragment$coords";
+ }
+
+ /**
+ * Replaces unknown sections to turn a relative
+ * URL into an absolute one. The base URL can
+ * be either a string or a SimpleUrl object.
+ * @param string/SimpleUrl $base Base URL.
+ * @access public
+ */
+ function makeAbsolute($base) {
+ if (! is_object($base)) {
+ $base = new SimpleUrl($base);
+ }
+ if ($this->getHost()) {
+ $scheme = $this->getScheme();
+ $host = $this->getHost();
+ $port = $this->getPort() ? ':' . $this->getPort() : '';
+ $identity = $this->getIdentity() ? $this->getIdentity() . '@' : '';
+ if (! $identity) {
+ $identity = $base->getIdentity() ? $base->getIdentity() . '@' : '';
+ }
+ } else {
+ $scheme = $base->getScheme();
+ $host = $base->getHost();
+ $port = $base->getPort() ? ':' . $base->getPort() : '';
+ $identity = $base->getIdentity() ? $base->getIdentity() . '@' : '';
+ }
+ $path = $this->normalisePath($this->_extractAbsolutePath($base));
+ $encoded = $this->getEncodedRequest();
+ $fragment = $this->getFragment() ? '#'. $this->getFragment() : '';
+ $coords = $this->getX() === false ? '' : '?' . $this->getX() . ',' . $this->getY();
+ return new SimpleUrl("$scheme://$identity$host$port$path$encoded$fragment$coords");
+ }
+
+ /**
+ * Replaces unknown sections of the path with base parts
+ * to return a complete absolute one.
+ * @param string/SimpleUrl $base Base URL.
+ * @param string Absolute path.
+ * @access private
+ */
+ function _extractAbsolutePath($base) {
+ if ($this->getHost()) {
+ return $this->_path;
+ }
+ if (! $this->_isRelativePath($this->_path)) {
+ return $this->_path;
+ }
+ if ($this->_path) {
+ return $base->getBasePath() . $this->_path;
+ }
+ return $base->getPath();
+ }
+
+ /**
+ * Simple test to see if a path part is relative.
+ * @param string $path Path to test.
+ * @return boolean True if starts with a "/".
+ * @access private
+ */
+ function _isRelativePath($path) {
+ return (substr($path, 0, 1) != '/');
+ }
+
+ /**
+ * Extracts the username and password for use in rendering
+ * a URL.
+ * @return string/boolean Form of username:password or false.
+ * @access public
+ */
+ function getIdentity() {
+ if ($this->_username && $this->_password) {
+ return $this->_username . ':' . $this->_password;
+ }
+ return false;
+ }
+
+ /**
+ * Replaces . and .. sections of the path.
+ * @param string $path Unoptimised path.
+ * @return string Path with dots removed if possible.
+ * @access public
+ */
+ function normalisePath($path) {
+ $path = preg_replace('|/\./|', '/', $path);
+ return preg_replace('|/[^/]+/\.\./|', '/', $path);
+ }
+
+ /**
+ * A pipe seperated list of all TLDs that result in two part
+ * domain names.
+ * @return string Pipe separated list.
+ * @access public
+ * @static
+ */
+ function getAllTopLevelDomains() {
+ return 'com|edu|net|org|gov|mil|int|biz|info|name|pro|aero|coop|museum';
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/user_agent.php b/vendors/simpletest/user_agent.php
new file mode 100644
index 000000000..b3f6f057e
--- /dev/null
+++ b/vendors/simpletest/user_agent.php
@@ -0,0 +1,332 @@
+<?php
+/**
+ * Base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: user_agent.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/cookies.php');
+require_once(dirname(__FILE__) . '/http.php');
+require_once(dirname(__FILE__) . '/encoding.php');
+require_once(dirname(__FILE__) . '/authentication.php');
+/**#@-*/
+
+if (! defined('DEFAULT_MAX_REDIRECTS')) {
+ define('DEFAULT_MAX_REDIRECTS', 3);
+}
+if (! defined('DEFAULT_CONNECTION_TIMEOUT')) {
+ define('DEFAULT_CONNECTION_TIMEOUT', 15);
+}
+
+/**
+ * Fetches web pages whilst keeping track of
+ * cookies and authentication.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class SimpleUserAgent {
+ var $_cookie_jar;
+ var $_cookies_enabled = true;
+ var $_authenticator;
+ var $_max_redirects = DEFAULT_MAX_REDIRECTS;
+ var $_proxy = false;
+ var $_proxy_username = false;
+ var $_proxy_password = false;
+ var $_connection_timeout = DEFAULT_CONNECTION_TIMEOUT;
+ var $_additional_headers = array();
+
+ /**
+ * Starts with no cookies, realms or proxies.
+ * @access public
+ */
+ function SimpleUserAgent() {
+ $this->_cookie_jar = &new SimpleCookieJar();
+ $this->_authenticator = &new SimpleAuthenticator();
+ }
+
+ /**
+ * Removes expired and temporary cookies as if
+ * the browser was closed and re-opened. Authorisation
+ * has to be obtained again as well.
+ * @param string/integer $date Time when session restarted.
+ * If omitted then all persistent
+ * cookies are kept.
+ * @access public
+ */
+ function restart($date = false) {
+ $this->_cookie_jar->restartSession($date);
+ $this->_authenticator->restartSession();
+ }
+
+ /**
+ * Adds a header to every fetch.
+ * @param string $header Header line to add to every
+ * request until cleared.
+ * @access public
+ */
+ function addHeader($header) {
+ $this->_additional_headers[] = $header;
+ }
+
+ /**
+ * Ages the cookies by the specified time.
+ * @param integer $interval Amount in seconds.
+ * @access public
+ */
+ function ageCookies($interval) {
+ $this->_cookie_jar->agePrematurely($interval);
+ }
+
+ /**
+ * Sets an additional cookie. If a cookie has
+ * the same name and path it is replaced.
+ * @param string $name Cookie key.
+ * @param string $value Value of cookie.
+ * @param string $host Host upon which the cookie is valid.
+ * @param string $path Cookie path if not host wide.
+ * @param string $expiry Expiry date.
+ * @access public
+ */
+ function setCookie($name, $value, $host = false, $path = '/', $expiry = false) {
+ $this->_cookie_jar->setCookie($name, $value, $host, $path, $expiry);
+ }
+
+ /**
+ * Reads the most specific cookie value from the
+ * browser cookies.
+ * @param string $host Host to search.
+ * @param string $path Applicable path.
+ * @param string $name Name of cookie to read.
+ * @return string False if not present, else the
+ * value as a string.
+ * @access public
+ */
+ function getCookieValue($host, $path, $name) {
+ return $this->_cookie_jar->getCookieValue($host, $path, $name);
+ }
+
+ /**
+ * Reads the current cookies within the base URL.
+ * @param string $name Key of cookie to find.
+ * @param SimpleUrl $base Base URL to search from.
+ * @return string/boolean Null if there is no base URL, false
+ * if the cookie is not set.
+ * @access public
+ */
+ function getBaseCookieValue($name, $base) {
+ if (! $base) {
+ return null;
+ }
+ return $this->getCookieValue($base->getHost(), $base->getPath(), $name);
+ }
+
+ /**
+ * Switches off cookie sending and recieving.
+ * @access public
+ */
+ function ignoreCookies() {
+ $this->_cookies_enabled = false;
+ }
+
+ /**
+ * Switches back on the cookie sending and recieving.
+ * @access public
+ */
+ function useCookies() {
+ $this->_cookies_enabled = true;
+ }
+
+ /**
+ * Sets the socket timeout for opening a connection.
+ * @param integer $timeout Maximum time in seconds.
+ * @access public
+ */
+ function setConnectionTimeout($timeout) {
+ $this->_connection_timeout = $timeout;
+ }
+
+ /**
+ * Sets the maximum number of redirects before
+ * a page will be loaded anyway.
+ * @param integer $max Most hops allowed.
+ * @access public
+ */
+ function setMaximumRedirects($max) {
+ $this->_max_redirects = $max;
+ }
+
+ /**
+ * Sets proxy to use on all requests for when
+ * testing from behind a firewall. Set URL
+ * to false to disable.
+ * @param string $proxy Proxy URL.
+ * @param string $username Proxy username for authentication.
+ * @param string $password Proxy password for authentication.
+ * @access public
+ */
+ function useProxy($proxy, $username, $password) {
+ if (! $proxy) {
+ $this->_proxy = false;
+ return;
+ }
+ if ((strncmp($proxy, 'http://', 7) != 0) && (strncmp($proxy, 'https://', 8) != 0)) {
+ $proxy = 'http://'. $proxy;
+ }
+ $this->_proxy = &new SimpleUrl($proxy);
+ $this->_proxy_username = $username;
+ $this->_proxy_password = $password;
+ }
+
+ /**
+ * Test to see if the redirect limit is passed.
+ * @param integer $redirects Count so far.
+ * @return boolean True if over.
+ * @access private
+ */
+ function _isTooManyRedirects($redirects) {
+ return ($redirects > $this->_max_redirects);
+ }
+
+ /**
+ * Sets the identity for the current realm.
+ * @param string $host Host to which realm applies.
+ * @param string $realm Full name of realm.
+ * @param string $username Username for realm.
+ * @param string $password Password for realm.
+ * @access public
+ */
+ function setIdentity($host, $realm, $username, $password) {
+ $this->_authenticator->setIdentityForRealm($host, $realm, $username, $password);
+ }
+
+ /**
+ * Fetches a URL as a response object. Will keep trying if redirected.
+ * It will also collect authentication realm information.
+ * @param string/SimpleUrl $url Target to fetch.
+ * @param SimpleEncoding $encoding Additional parameters for request.
+ * @return SimpleHttpResponse Hopefully the target page.
+ * @access public
+ */
+ function &fetchResponse($url, $encoding) {
+ if ($encoding->getMethod() != 'POST') {
+ $url->addRequestParameters($encoding);
+ $encoding->clear();
+ }
+ $response = &$this->_fetchWhileRedirected($url, $encoding);
+ if ($headers = $response->getHeaders()) {
+ if ($headers->isChallenge()) {
+ $this->_authenticator->addRealm(
+ $url,
+ $headers->getAuthentication(),
+ $headers->getRealm());
+ }
+ }
+ return $response;
+ }
+
+ /**
+ * Fetches the page until no longer redirected or
+ * until the redirect limit runs out.
+ * @param SimpleUrl $url Target to fetch.
+ * @param SimpelFormEncoding $encoding Additional parameters for request.
+ * @return SimpleHttpResponse Hopefully the target page.
+ * @access private
+ */
+ function &_fetchWhileRedirected($url, $encoding) {
+ $redirects = 0;
+ do {
+ $response = &$this->_fetch($url, $encoding);
+ if ($response->isError()) {
+ return $response;
+ }
+ $headers = $response->getHeaders();
+ $location = new SimpleUrl($headers->getLocation());
+ $url = $location->makeAbsolute($url);
+ if ($this->_cookies_enabled) {
+ $headers->writeCookiesToJar($this->_cookie_jar, $url);
+ }
+ if (! $headers->isRedirect()) {
+ break;
+ }
+ $encoding = new SimpleGetEncoding();
+ } while (! $this->_isTooManyRedirects(++$redirects));
+ return $response;
+ }
+
+ /**
+ * Actually make the web request.
+ * @param SimpleUrl $url Target to fetch.
+ * @param SimpleFormEncoding $encoding Additional parameters for request.
+ * @return SimpleHttpResponse Headers and hopefully content.
+ * @access protected
+ */
+ function &_fetch($url, $encoding) {
+ $request = &$this->_createRequest($url, $encoding);
+ $response = &$request->fetch($this->_connection_timeout);
+ return $response;
+ }
+
+ /**
+ * Creates a full page request.
+ * @param SimpleUrl $url Target to fetch as url object.
+ * @param SimpleFormEncoding $encoding POST/GET parameters.
+ * @return SimpleHttpRequest New request.
+ * @access private
+ */
+ function &_createRequest($url, $encoding) {
+ $request = &$this->_createHttpRequest($url, $encoding);
+ $this->_addAdditionalHeaders($request);
+ if ($this->_cookies_enabled) {
+ $request->readCookiesFromJar($this->_cookie_jar, $url);
+ }
+ $this->_authenticator->addHeaders($request, $url);
+ return $request;
+ }
+
+ /**
+ * Builds the appropriate HTTP request object.
+ * @param SimpleUrl $url Target to fetch as url object.
+ * @param SimpleFormEncoding $parameters POST/GET parameters.
+ * @return SimpleHttpRequest New request object.
+ * @access protected
+ */
+ function &_createHttpRequest($url, $encoding) {
+ $request = &new SimpleHttpRequest($this->_createRoute($url), $encoding);
+ return $request;
+ }
+
+ /**
+ * Sets up either a direct route or via a proxy.
+ * @param SimpleUrl $url Target to fetch as url object.
+ * @return SimpleRoute Route to take to fetch URL.
+ * @access protected
+ */
+ function &_createRoute($url) {
+ if ($this->_proxy) {
+ $route = &new SimpleProxyRoute(
+ $url,
+ $this->_proxy,
+ $this->_proxy_username,
+ $this->_proxy_password);
+ } else {
+ $route = &new SimpleRoute($url);
+ }
+ return $route;
+ }
+
+ /**
+ * Adds additional manual headers.
+ * @param SimpleHttpRequest $request Outgoing request.
+ * @access private
+ */
+ function _addAdditionalHeaders(&$request) {
+ foreach ($this->_additional_headers as $header) {
+ $request->addHeaderLine($header);
+ }
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/web_tester.php b/vendors/simpletest/web_tester.php
new file mode 100644
index 000000000..40b161291
--- /dev/null
+++ b/vendors/simpletest/web_tester.php
@@ -0,0 +1,1541 @@
+<?php
+/**
+ * Base include file for SimpleTest.
+ * @package SimpleTest
+ * @subpackage WebTester
+ * @version $Id: web_tester.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/test_case.php');
+require_once(dirname(__FILE__) . '/browser.php');
+require_once(dirname(__FILE__) . '/page.php');
+require_once(dirname(__FILE__) . '/expectation.php');
+/**#@-*/
+
+/**
+ * Test for an HTML widget value match.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class FieldExpectation extends SimpleExpectation {
+ var $_value;
+
+ /**
+ * Sets the field value to compare against.
+ * @param mixed $value Test value to match. Can be an
+ * expectation for say pattern matching.
+ * @param string $message Optiona message override. Can use %s as
+ * a placeholder for the original message.
+ * @access public
+ */
+ function FieldExpectation($value, $message = '%s') {
+ $this->SimpleExpectation($message);
+ if (is_array($value)) {
+ sort($value);
+ }
+ $this->_value = $value;
+ }
+
+ /**
+ * Tests the expectation. True if it matches
+ * a string value or an array value in any order.
+ * @param mixed $compare Comparison value. False for
+ * an unset field.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ if ($this->_value === false) {
+ return ($compare === false);
+ }
+ if ($this->_isSingle($this->_value)) {
+ return $this->_testSingle($compare);
+ }
+ if (is_array($this->_value)) {
+ return $this->_testMultiple($compare);
+ }
+ return false;
+ }
+
+ /**
+ * Tests for valid field comparisons with a single option.
+ * @param mixed $value Value to type check.
+ * @return boolean True if integer, string or float.
+ * @access private
+ */
+ function _isSingle($value) {
+ return is_string($value) || is_integer($value) || is_float($value);
+ }
+
+ /**
+ * String comparison for simple field with a single option.
+ * @param mixed $compare String to test against.
+ * @returns boolean True if matching.
+ * @access private
+ */
+ function _testSingle($compare) {
+ if (is_array($compare) && count($compare) == 1) {
+ $compare = $compare[0];
+ }
+ if (! $this->_isSingle($compare)) {
+ return false;
+ }
+ return ($this->_value == $compare);
+ }
+
+ /**
+ * List comparison for multivalue field.
+ * @param mixed $compare List in any order to test against.
+ * @returns boolean True if matching.
+ * @access private
+ */
+ function _testMultiple($compare) {
+ if (is_string($compare)) {
+ $compare = array($compare);
+ }
+ if (! is_array($compare)) {
+ return false;
+ }
+ sort($compare);
+ return ($this->_value === $compare);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $dumper = &$this->_getDumper();
+ if (is_array($compare)) {
+ sort($compare);
+ }
+ if ($this->test($compare)) {
+ return "Field expectation [" . $dumper->describeValue($this->_value) . "]";
+ } else {
+ return "Field expectation [" . $dumper->describeValue($this->_value) .
+ "] fails with [" .
+ $dumper->describeValue($compare) . "] " .
+ $dumper->describeDifference($this->_value, $compare);
+ }
+ }
+}
+
+/**
+ * Test for a specific HTTP header within a header block.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class HttpHeaderExpectation extends SimpleExpectation {
+ var $_expected_header;
+ var $_expected_value;
+
+ /**
+ * Sets the field and value to compare against.
+ * @param string $header Case insenstive trimmed header name.
+ * @param mixed $value Optional value to compare. If not
+ * given then any value will match. If
+ * an expectation object then that will
+ * be used instead.
+ * @param string $message Optiona message override. Can use %s as
+ * a placeholder for the original message.
+ */
+ function HttpHeaderExpectation($header, $value = false, $message = '%s') {
+ $this->SimpleExpectation($message);
+ $this->_expected_header = $this->_normaliseHeader($header);
+ $this->_expected_value = $value;
+ }
+
+ /**
+ * Accessor for aggregated object.
+ * @return mixed Expectation set in constructor.
+ * @access protected
+ */
+ function _getExpectation() {
+ return $this->_expected_value;
+ }
+
+ /**
+ * Removes whitespace at ends and case variations.
+ * @param string $header Name of header.
+ * @param string Trimmed and lowecased header
+ * name.
+ * @access private
+ */
+ function _normaliseHeader($header) {
+ return strtolower(trim($header));
+ }
+
+ /**
+ * Tests the expectation. True if it matches
+ * a string value or an array value in any order.
+ * @param mixed $compare Raw header block to search.
+ * @return boolean True if header present.
+ * @access public
+ */
+ function test($compare) {
+ return is_string($this->_findHeader($compare));
+ }
+
+ /**
+ * Searches the incoming result. Will extract the matching
+ * line as text.
+ * @param mixed $compare Raw header block to search.
+ * @return string Matching header line.
+ * @access protected
+ */
+ function _findHeader($compare) {
+ $lines = split("\r\n", $compare);
+ foreach ($lines as $line) {
+ if ($this->_testHeaderLine($line)) {
+ return $line;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Compares a single header line against the expectation.
+ * @param string $line A single line to compare.
+ * @return boolean True if matched.
+ * @access private
+ */
+ function _testHeaderLine($line) {
+ if (count($parsed = split(':', $line, 2)) < 2) {
+ return false;
+ }
+ list($header, $value) = $parsed;
+ if ($this->_normaliseHeader($header) != $this->_expected_header) {
+ return false;
+ }
+ return $this->_testHeaderValue($value, $this->_expected_value);
+ }
+
+ /**
+ * Tests the value part of the header.
+ * @param string $value Value to test.
+ * @param mixed $expected Value to test against.
+ * @return boolean True if matched.
+ * @access protected
+ */
+ function _testHeaderValue($value, $expected) {
+ if ($expected === false) {
+ return true;
+ }
+ if (SimpleExpectation::isExpectation($expected)) {
+ return $expected->test(trim($value));
+ }
+ return (trim($value) == trim($expected));
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Raw header block to search.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ if (SimpleExpectation::isExpectation($this->_expected_value)) {
+ $message = $this->_expected_value->overlayMessage($compare, $this->_getDumper());
+ } else {
+ $message = $this->_expected_header .
+ ($this->_expected_value ? ': ' . $this->_expected_value : '');
+ }
+ if (is_string($line = $this->_findHeader($compare))) {
+ return "Searching for header [$message] found [$line]";
+ } else {
+ return "Failed to find header [$message]";
+ }
+ }
+}
+
+/**
+ * Test for a specific HTTP header within a header block that
+ * should not be found.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class NoHttpHeaderExpectation extends HttpHeaderExpectation {
+ var $_expected_header;
+ var $_expected_value;
+
+ /**
+ * Sets the field and value to compare against.
+ * @param string $unwanted Case insenstive trimmed header name.
+ * @param string $message Optiona message override. Can use %s as
+ * a placeholder for the original message.
+ */
+ function NoHttpHeaderExpectation($unwanted, $message = '%s') {
+ $this->HttpHeaderExpectation($unwanted, false, $message);
+ }
+
+ /**
+ * Tests that the unwanted header is not found.
+ * @param mixed $compare Raw header block to search.
+ * @return boolean True if header present.
+ * @access public
+ */
+ function test($compare) {
+ return ($this->_findHeader($compare) === false);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Raw header block to search.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ $expectation = $this->_getExpectation();
+ if (is_string($line = $this->_findHeader($compare))) {
+ return "Found unwanted header [$expectation] with [$line]";
+ } else {
+ return "Did not find unwanted header [$expectation]";
+ }
+ }
+}
+
+/**
+ * Test for a text substring.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class TextExpectation extends SimpleExpectation {
+ var $_substring;
+
+ /**
+ * Sets the value to compare against.
+ * @param string $substring Text to search for.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function TextExpectation($substring, $message = '%s') {
+ $this->SimpleExpectation($message);
+ $this->_substring = $substring;
+ }
+
+ /**
+ * Accessor for the substring.
+ * @return string Text to match.
+ * @access protected
+ */
+ function _getSubstring() {
+ return $this->_substring;
+ }
+
+ /**
+ * Tests the expectation. True if the text contains the
+ * substring.
+ * @param string $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ return (strpos($compare, $this->_substring) !== false);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param mixed $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ if ($this->test($compare)) {
+ return $this->_describeTextMatch($this->_getSubstring(), $compare);
+ } else {
+ $dumper = &$this->_getDumper();
+ return "Text [" . $this->_getSubstring() .
+ "] not detected in [" .
+ $dumper->describeValue($compare) . "]";
+ }
+ }
+
+ /**
+ * Describes a pattern match including the string
+ * found and it's position.
+ * @param string $substring Text to search for.
+ * @param string $subject Subject to search.
+ * @access protected
+ */
+ function _describeTextMatch($substring, $subject) {
+ $position = strpos($subject, $substring);
+ $dumper = &$this->_getDumper();
+ return "Text [$substring] detected at character [$position] in [" .
+ $dumper->describeValue($subject) . "] in region [" .
+ $dumper->clipString($subject, 100, $position) . "]";
+ }
+}
+
+/**
+ * Fail if a substring is detected within the
+ * comparison text.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class NoTextExpectation extends TextExpectation {
+
+ /**
+ * Sets the reject pattern
+ * @param string $substring Text to search for.
+ * @param string $message Customised message on failure.
+ * @access public
+ */
+ function NoTextExpectation($substring, $message = '%s') {
+ $this->TextExpectation($substring, $message);
+ }
+
+ /**
+ * Tests the expectation. False if the substring appears
+ * in the text.
+ * @param string $compare Comparison value.
+ * @return boolean True if correct.
+ * @access public
+ */
+ function test($compare) {
+ return ! parent::test($compare);
+ }
+
+ /**
+ * Returns a human readable test message.
+ * @param string $compare Comparison value.
+ * @return string Description of success
+ * or failure.
+ * @access public
+ */
+ function testMessage($compare) {
+ if ($this->test($compare)) {
+ $dumper = &$this->_getDumper();
+ return "Text [" . $this->_getSubstring() .
+ "] not detected in [" .
+ $dumper->describeValue($compare) . "]";
+ } else {
+ return $this->_describeTextMatch($this->_getSubstring(), $compare);
+ }
+ }
+}
+
+/**
+ * Test case for testing of web pages. Allows
+ * fetching of pages, parsing of HTML and
+ * submitting forms.
+ * @package SimpleTest
+ * @subpackage WebTester
+ */
+class WebTestCase extends SimpleTestCase {
+ var $_browser;
+ var $_ignore_errors = false;
+
+ /**
+ * Creates an empty test case. Should be subclassed
+ * with test methods for a functional test case.
+ * @param string $label Name of test case. Will use
+ * the class name if none specified.
+ * @access public
+ */
+ function WebTestCase($label = false) {
+ $this->SimpleTestCase($label);
+ }
+
+ /**
+ * Announces the start of the test.
+ * @param string $method Test method just started.
+ * @access public
+ */
+ function before($method) {
+ parent::before($method);
+ $this->setBrowser($this->createBrowser());
+ }
+
+ /**
+ * Announces the end of the test. Includes private clean up.
+ * @param string $method Test method just finished.
+ * @access public
+ */
+ function after($method) {
+ $this->unsetBrowser();
+ parent::after($method);
+ }
+
+ /**
+ * Gets a current browser reference for setting
+ * special expectations or for detailed
+ * examination of page fetches.
+ * @return SimpleBrowser Current test browser object.
+ * @access public
+ */
+ function &getBrowser() {
+ return $this->_browser;
+ }
+
+ /**
+ * Gets a current browser reference for setting
+ * special expectations or for detailed
+ * examination of page fetches.
+ * @param SimpleBrowser $browser New test browser object.
+ * @access public
+ */
+ function setBrowser(&$browser) {
+ return $this->_browser = &$browser;
+ }
+
+ /**
+ * Clears the current browser reference to help the
+ * PHP garbage collector.
+ * @access public
+ */
+ function unsetBrowser() {
+ unset($this->_browser);
+ }
+
+ /**
+ * Creates a new default web browser object.
+ * Will be cleared at the end of the test method.
+ * @return TestBrowser New browser.
+ * @access public
+ */
+ function &createBrowser() {
+ $browser = &new SimpleBrowser();
+ return $browser;
+ }
+
+ /**
+ * Gets the last response error.
+ * @return string Last low level HTTP error.
+ * @access public
+ */
+ function getTransportError() {
+ return $this->_browser->getTransportError();
+ }
+
+ /**
+ * Accessor for the currently selected URL.
+ * @return string Current location or false if
+ * no page yet fetched.
+ * @access public
+ */
+ function getUrl() {
+ return $this->_browser->getUrl();
+ }
+
+ /**
+ * Dumps the current request for debugging.
+ * @access public
+ */
+ function showRequest() {
+ $this->dump($this->_browser->getRequest());
+ }
+
+ /**
+ * Dumps the current HTTP headers for debugging.
+ * @access public
+ */
+ function showHeaders() {
+ $this->dump($this->_browser->getHeaders());
+ }
+
+ /**
+ * Dumps the current HTML source for debugging.
+ * @access public
+ */
+ function showSource() {
+ $this->dump($this->_browser->getContent());
+ }
+
+ /**
+ * Dumps the visible text only for debugging.
+ * @access public
+ */
+ function showText() {
+ $this->dump(wordwrap($this->_browser->getContentAsText(), 80));
+ }
+
+ /**
+ * Simulates the closing and reopening of the browser.
+ * Temporary cookies will be discarded and timed
+ * cookies will be expired if later than the
+ * specified time.
+ * @param string/integer $date Time when session restarted.
+ * If ommitted then all persistent
+ * cookies are kept. Time is either
+ * Cookie format string or timestamp.
+ * @access public
+ */
+ function restart($date = false) {
+ if ($date === false) {
+ $date = time();
+ }
+ $this->_browser->restart($date);
+ }
+
+ /**
+ * Moves cookie expiry times back into the past.
+ * Useful for testing timeouts and expiries.
+ * @param integer $interval Amount to age in seconds.
+ * @access public
+ */
+ function ageCookies($interval) {
+ $this->_browser->ageCookies($interval);
+ }
+
+ /**
+ * Disables frames support. Frames will not be fetched
+ * and the frameset page will be used instead.
+ * @access public
+ */
+ function ignoreFrames() {
+ $this->_browser->ignoreFrames();
+ }
+
+ /**
+ * Switches off cookie sending and recieving.
+ * @access public
+ */
+ function ignoreCookies() {
+ $this->_browser->ignoreCookies();
+ }
+
+ /**
+ * Skips errors for the next request only. You might
+ * want to confirm that a page is unreachable for
+ * example.
+ * @access public
+ */
+ function ignoreErrors() {
+ $this->_ignore_errors = true;
+ }
+
+ /**
+ * Issues a fail if there is a transport error anywhere
+ * in the current frameset. Only one such error is
+ * reported.
+ * @param string/boolean $result HTML or failure.
+ * @return string/boolean $result Passes through result.
+ * @access private
+ */
+ function _failOnError($result) {
+ if (! $this->_ignore_errors) {
+ if ($error = $this->_browser->getTransportError()) {
+ $this->fail($error);
+ }
+ }
+ $this->_ignore_errors = false;
+ return $result;
+ }
+
+ /**
+ * Adds a header to every fetch.
+ * @param string $header Header line to add to every
+ * request until cleared.
+ * @access public
+ */
+ function addHeader($header) {
+ $this->_browser->addHeader($header);
+ }
+
+ /**
+ * Sets the maximum number of redirects before
+ * the web page is loaded regardless.
+ * @param integer $max Maximum hops.
+ * @access public
+ */
+ function setMaximumRedirects($max) {
+ if (! $this->_browser) {
+ trigger_error(
+ 'Can only set maximum redirects in a test method, setUp() or tearDown()');
+ }
+ $this->_browser->setMaximumRedirects($max);
+ }
+
+ /**
+ * Sets the socket timeout for opening a connection and
+ * receiving at least one byte of information.
+ * @param integer $timeout Maximum time in seconds.
+ * @access public
+ */
+ function setConnectionTimeout($timeout) {
+ $this->_browser->setConnectionTimeout($timeout);
+ }
+
+ /**
+ * Sets proxy to use on all requests for when
+ * testing from behind a firewall. Set URL
+ * to false to disable.
+ * @param string $proxy Proxy URL.
+ * @param string $username Proxy username for authentication.
+ * @param string $password Proxy password for authentication.
+ * @access public
+ */
+ function useProxy($proxy, $username = false, $password = false) {
+ $this->_browser->useProxy($proxy, $username, $password);
+ }
+
+ /**
+ * Fetches a page into the page buffer. If
+ * there is no base for the URL then the
+ * current base URL is used. After the fetch
+ * the base URL reflects the new location.
+ * @param string $url URL to fetch.
+ * @param hash $parameters Optional additional GET data.
+ * @return boolean/string Raw page on success.
+ * @access public
+ */
+ function get($url, $parameters = false) {
+ return $this->_failOnError($this->_browser->get($url, $parameters));
+ }
+
+ /**
+ * Fetches a page by POST into the page buffer.
+ * If there is no base for the URL then the
+ * current base URL is used. After the fetch
+ * the base URL reflects the new location.
+ * @param string $url URL to fetch.
+ * @param hash $parameters Optional additional GET data.
+ * @return boolean/string Raw page on success.
+ * @access public
+ */
+ function post($url, $parameters = false) {
+ return $this->_failOnError($this->_browser->post($url, $parameters));
+ }
+
+ /**
+ * Does a HTTP HEAD fetch, fetching only the page
+ * headers. The current base URL is unchanged by this.
+ * @param string $url URL to fetch.
+ * @param hash $parameters Optional additional GET data.
+ * @return boolean True on success.
+ * @access public
+ */
+ function head($url, $parameters = false) {
+ return $this->_failOnError($this->_browser->head($url, $parameters));
+ }
+
+ /**
+ * Equivalent to hitting the retry button on the
+ * browser. Will attempt to repeat the page fetch.
+ * @return boolean True if fetch succeeded.
+ * @access public
+ */
+ function retry() {
+ return $this->_failOnError($this->_browser->retry());
+ }
+
+ /**
+ * Equivalent to hitting the back button on the
+ * browser.
+ * @return boolean True if history entry and
+ * fetch succeeded.
+ * @access public
+ */
+ function back() {
+ return $this->_failOnError($this->_browser->back());
+ }
+
+ /**
+ * Equivalent to hitting the forward button on the
+ * browser.
+ * @return boolean True if history entry and
+ * fetch succeeded.
+ * @access public
+ */
+ function forward() {
+ return $this->_failOnError($this->_browser->forward());
+ }
+
+ /**
+ * Retries a request after setting the authentication
+ * for the current realm.
+ * @param string $username Username for realm.
+ * @param string $password Password for realm.
+ * @return boolean/string HTML on successful fetch. Note
+ * that authentication may still have
+ * failed.
+ * @access public
+ */
+ function authenticate($username, $password) {
+ return $this->_failOnError(
+ $this->_browser->authenticate($username, $password));
+ }
+
+ /**
+ * Gets the cookie value for the current browser context.
+ * @param string $name Name of cookie.
+ * @return string Value of cookie or false if unset.
+ * @access public
+ */
+ function getCookie($name) {
+ return $this->_browser->getCurrentCookieValue($name);
+ }
+
+ /**
+ * Sets a cookie in the current browser.
+ * @param string $name Name of cookie.
+ * @param string $value Cookie value.
+ * @param string $host Host upon which the cookie is valid.
+ * @param string $path Cookie path if not host wide.
+ * @param string $expiry Expiry date.
+ * @access public
+ */
+ function setCookie($name, $value, $host = false, $path = '/', $expiry = false) {
+ $this->_browser->setCookie($name, $value, $host, $path, $expiry);
+ }
+
+ /**
+ * Accessor for current frame focus. Will be
+ * false if no frame has focus.
+ * @return integer/string/boolean Label if any, otherwise
+ * the position in the frameset
+ * or false if none.
+ * @access public
+ */
+ function getFrameFocus() {
+ return $this->_browser->getFrameFocus();
+ }
+
+ /**
+ * Sets the focus by index. The integer index starts from 1.
+ * @param integer $choice Chosen frame.
+ * @return boolean True if frame exists.
+ * @access public
+ */
+ function setFrameFocusByIndex($choice) {
+ return $this->_browser->setFrameFocusByIndex($choice);
+ }
+
+ /**
+ * Sets the focus by name.
+ * @param string $name Chosen frame.
+ * @return boolean True if frame exists.
+ * @access public
+ */
+ function setFrameFocus($name) {
+ return $this->_browser->setFrameFocus($name);
+ }
+
+ /**
+ * Clears the frame focus. All frames will be searched
+ * for content.
+ * @access public
+ */
+ function clearFrameFocus() {
+ return $this->_browser->clearFrameFocus();
+ }
+
+ /**
+ * Clicks a visible text item. Will first try buttons,
+ * then links and then images.
+ * @param string $label Visible text or alt text.
+ * @return string/boolean Raw page or false.
+ * @access public
+ */
+ function click($label) {
+ return $this->_failOnError($this->_browser->click($label));
+ }
+
+ /**
+ * Checks for a click target.
+ * @param string $label Visible text or alt text.
+ * @return boolean True if click target.
+ * @access public
+ */
+ function assertClickable($label, $message = '%s') {
+ return $this->assertTrue(
+ $this->_browser->isClickable($label),
+ sprintf($message, "Click target [$label] should exist"));
+ }
+
+ /**
+ * Clicks the submit button by label. The owning
+ * form will be submitted by this.
+ * @param string $label Button label. An unlabeled
+ * button can be triggered by 'Submit'.
+ * @param hash $additional Additional form values.
+ * @return boolean/string Page on success, else false.
+ * @access public
+ */
+ function clickSubmit($label = 'Submit', $additional = false) {
+ return $this->_failOnError(
+ $this->_browser->clickSubmit($label, $additional));
+ }
+
+ /**
+ * Clicks the submit button by name attribute. The owning
+ * form will be submitted by this.
+ * @param string $name Name attribute of button.
+ * @param hash $additional Additional form values.
+ * @return boolean/string Page on success.
+ * @access public
+ */
+ function clickSubmitByName($name, $additional = false) {
+ return $this->_failOnError(
+ $this->_browser->clickSubmitByName($name, $additional));
+ }
+
+ /**
+ * Clicks the submit button by ID attribute. The owning
+ * form will be submitted by this.
+ * @param string $id ID attribute of button.
+ * @param hash $additional Additional form values.
+ * @return boolean/string Page on success.
+ * @access public
+ */
+ function clickSubmitById($id, $additional = false) {
+ return $this->_failOnError(
+ $this->_browser->clickSubmitById($id, $additional));
+ }
+
+ /**
+ * Checks for a valid button label.
+ * @param string $label Visible text.
+ * @return boolean True if click target.
+ * @access public
+ */
+ function assertSubmit($label, $message = '%s') {
+ return $this->assertTrue(
+ $this->_browser->isSubmit($label),
+ sprintf($message, "Submit button [$label] should exist"));
+ }
+
+ /**
+ * Clicks the submit image by some kind of label. Usually
+ * the alt tag or the nearest equivalent. The owning
+ * form will be submitted by this. Clicking outside of
+ * the boundary of the coordinates will result in
+ * a failure.
+ * @param string $label Alt attribute of button.
+ * @param integer $x X-coordinate of imaginary click.
+ * @param integer $y Y-coordinate of imaginary click.
+ * @param hash $additional Additional form values.
+ * @return boolean/string Page on success.
+ * @access public
+ */
+ function clickImage($label, $x = 1, $y = 1, $additional = false) {
+ return $this->_failOnError(
+ $this->_browser->clickImage($label, $x, $y, $additional));
+ }
+
+ /**
+ * Clicks the submit image by the name. Usually
+ * the alt tag or the nearest equivalent. The owning
+ * form will be submitted by this. Clicking outside of
+ * the boundary of the coordinates will result in
+ * a failure.
+ * @param string $name Name attribute of button.
+ * @param integer $x X-coordinate of imaginary click.
+ * @param integer $y Y-coordinate of imaginary click.
+ * @param hash $additional Additional form values.
+ * @return boolean/string Page on success.
+ * @access public
+ */
+ function clickImageByName($name, $x = 1, $y = 1, $additional = false) {
+ return $this->_failOnError(
+ $this->_browser->clickImageByName($name, $x, $y, $additional));
+ }
+
+ /**
+ * Clicks the submit image by ID attribute. The owning
+ * form will be submitted by this. Clicking outside of
+ * the boundary of the coordinates will result in
+ * a failure.
+ * @param integer/string $id ID attribute of button.
+ * @param integer $x X-coordinate of imaginary click.
+ * @param integer $y Y-coordinate of imaginary click.
+ * @param hash $additional Additional form values.
+ * @return boolean/string Page on success.
+ * @access public
+ */
+ function clickImageById($id, $x = 1, $y = 1, $additional = false) {
+ return $this->_failOnError(
+ $this->_browser->clickImageById($id, $x, $y, $additional));
+ }
+
+ /**
+ * Checks for a valid image with atht alt text or title.
+ * @param string $label Visible text.
+ * @return boolean True if click target.
+ * @access public
+ */
+ function assertImage($label, $message = '%s') {
+ return $this->assertTrue(
+ $this->_browser->isImage($label),
+ sprintf($message, "Image with text [$label] should exist"));
+ }
+
+ /**
+ * Submits a form by the ID.
+ * @param string $id Form ID. No button information
+ * is submitted this way.
+ * @return boolean/string Page on success.
+ * @access public
+ */
+ function submitFormById($id) {
+ return $this->_failOnError($this->_browser->submitFormById($id));
+ }
+
+ /**
+ * Follows a link by name. Will click the first link
+ * found with this link text by default, or a later
+ * one if an index is given. Match is case insensitive
+ * with normalised space.
+ * @param string $label Text between the anchor tags.
+ * @param integer $index Link position counting from zero.
+ * @return boolean/string Page on success.
+ * @access public
+ */
+ function clickLink($label, $index = 0) {
+ return $this->_failOnError($this->_browser->clickLink($label, $index));
+ }
+
+ /**
+ * Follows a link by id attribute.
+ * @param string $id ID attribute value.
+ * @return boolean/string Page on success.
+ * @access public
+ */
+ function clickLinkById($id) {
+ return $this->_failOnError($this->_browser->clickLinkById($id));
+ }
+
+ /**
+ * Tests for the presence of a link label. Match is
+ * case insensitive with normalised space.
+ * @param string $label Text between the anchor tags.
+ * @param mixed $expected Expected URL or expectation object.
+ * @param string $message Message to display. Default
+ * can be embedded with %s.
+ * @return boolean True if link present.
+ * @access public
+ */
+ function assertLink($label, $expected = true, $message = '%s') {
+ $url = $this->_browser->getLink($label);
+ if ($expected === true || ($expected !== true && $url === false)) {
+ return $this->assertTrue($url !== false, sprintf($message, "Link [$label] should exist"));
+ }
+ if (! SimpleExpectation::isExpectation($expected)) {
+ $expected = new IdenticalExpectation($expected);
+ }
+ return $this->assert($expected, $url->asString(), sprintf($message, "Link [$label] should match"));
+ }
+
+ /**
+ * Tests for the non-presence of a link label. Match is
+ * case insensitive with normalised space.
+ * @param string/integer $label Text between the anchor tags
+ * or ID attribute.
+ * @param string $message Message to display. Default
+ * can be embedded with %s.
+ * @return boolean True if link missing.
+ * @access public
+ */
+ function assertNoLink($label, $message = '%s') {
+ return $this->assertTrue(
+ $this->_browser->getLink($label) === false,
+ sprintf($message, "Link [$label] should not exist"));
+ }
+
+ /**
+ * Tests for the presence of a link id attribute.
+ * @param string $id Id attribute value.
+ * @param mixed $expected Expected URL or expectation object.
+ * @param string $message Message to display. Default
+ * can be embedded with %s.
+ * @return boolean True if link present.
+ * @access public
+ */
+ function assertLinkById($id, $expected = true, $message = '%s') {
+ $url = $this->_browser->getLinkById($id);
+ if ($expected === true) {
+ return $this->assertTrue($url !== false, sprintf($message, "Link ID [$id] should exist"));
+ }
+ if (! SimpleExpectation::isExpectation($expected)) {
+ $expected = new IdenticalExpectation($expected);
+ }
+ return $this->assert($expected, $url->asString(), sprintf($message, "Link ID [$id] should match"));
+ }
+
+ /**
+ * Tests for the non-presence of a link label. Match is
+ * case insensitive with normalised space.
+ * @param string $id Id attribute value.
+ * @param string $message Message to display. Default
+ * can be embedded with %s.
+ * @return boolean True if link missing.
+ * @access public
+ */
+ function assertNoLinkById($id, $message = '%s') {
+ return $this->assertTrue(
+ $this->_browser->getLinkById($id) === false,
+ sprintf($message, "Link ID [$id] should not exist"));
+ }
+
+ /**
+ * Sets all form fields with that label, or name if there
+ * is no label attached.
+ * @param string $name Name of field in forms.
+ * @param string $value New value of field.
+ * @return boolean True if field exists, otherwise false.
+ * @access public
+ */
+ function setField($label, $value, $position=false) {
+ return $this->_browser->setField($label, $value, $position);
+ }
+
+ /**
+ * Sets all form fields with that name.
+ * @param string $name Name of field in forms.
+ * @param string $value New value of field.
+ * @return boolean True if field exists, otherwise false.
+ * @access public
+ */
+ function setFieldByName($name, $value, $position=false) {
+ return $this->_browser->setFieldByName($name, $value, $position);
+ }
+
+ /**
+ * Sets all form fields with that id.
+ * @param string/integer $id Id of field in forms.
+ * @param string $value New value of field.
+ * @return boolean True if field exists, otherwise false.
+ * @access public
+ */
+ function setFieldById($id, $value) {
+ return $this->_browser->setFieldById($id, $value);
+ }
+
+ /**
+ * Confirms that the form element is currently set
+ * to the expected value. A missing form will always
+ * fail. If no value is given then only the existence
+ * of the field is checked.
+ * @param string $name Name of field in forms.
+ * @param mixed $expected Expected string/array value or
+ * false for unset fields.
+ * @param string $message Message to display. Default
+ * can be embedded with %s.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertField($label, $expected = true, $message = '%s') {
+ $value = $this->_browser->getField($label);
+ return $this->_assertFieldValue($label, $value, $expected, $message);
+ }
+
+ /**
+ * Confirms that the form element is currently set
+ * to the expected value. A missing form element will always
+ * fail. If no value is given then only the existence
+ * of the field is checked.
+ * @param string $name Name of field in forms.
+ * @param mixed $expected Expected string/array value or
+ * false for unset fields.
+ * @param string $message Message to display. Default
+ * can be embedded with %s.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertFieldByName($name, $expected = true, $message = '%s') {
+ $value = $this->_browser->getFieldByName($name);
+ return $this->_assertFieldValue($name, $value, $expected, $message);
+ }
+
+ /**
+ * Confirms that the form element is currently set
+ * to the expected value. A missing form will always
+ * fail. If no ID is given then only the existence
+ * of the field is checked.
+ * @param string/integer $id Name of field in forms.
+ * @param mixed $expected Expected string/array value or
+ * false for unset fields.
+ * @param string $message Message to display. Default
+ * can be embedded with %s.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertFieldById($id, $expected = true, $message = '%s') {
+ $value = $this->_browser->getFieldById($id);
+ return $this->_assertFieldValue($id, $value, $expected, $message);
+ }
+
+ /**
+ * Tests the field value against the expectation.
+ * @param string $identifier Name, ID or label.
+ * @param mixed $value Current field value.
+ * @param mixed $expected Expected value to match.
+ * @param string $message Failure message.
+ * @return boolean True if pass
+ * @access protected
+ */
+ function _assertFieldValue($identifier, $value, $expected, $message) {
+ if ($expected === true) {
+ return $this->assertTrue(
+ isset($value),
+ sprintf($message, "Field [$identifier] should exist"));
+ }
+ if (! SimpleExpectation::isExpectation($expected)) {
+ $identifier = str_replace('%', '%%', $identifier);
+ $expected = new FieldExpectation(
+ $expected,
+ "Field [$identifier] should match with [%s]");
+ }
+ return $this->assert($expected, $value, $message);
+ }
+
+ /**
+ * Checks the response code against a list
+ * of possible values.
+ * @param array $responses Possible responses for a pass.
+ * @param string $message Message to display. Default
+ * can be embedded with %s.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertResponse($responses, $message = '%s') {
+ $responses = (is_array($responses) ? $responses : array($responses));
+ $code = $this->_browser->getResponseCode();
+ $message = sprintf($message, "Expecting response in [" .
+ implode(", ", $responses) . "] got [$code]");
+ return $this->assertTrue(in_array($code, $responses), $message);
+ }
+
+ /**
+ * Checks the mime type against a list
+ * of possible values.
+ * @param array $types Possible mime types for a pass.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertMime($types, $message = '%s') {
+ $types = (is_array($types) ? $types : array($types));
+ $type = $this->_browser->getMimeType();
+ $message = sprintf($message, "Expecting mime type in [" .
+ implode(", ", $types) . "] got [$type]");
+ return $this->assertTrue(in_array($type, $types), $message);
+ }
+
+ /**
+ * Attempt to match the authentication type within
+ * the security realm we are currently matching.
+ * @param string $authentication Usually basic.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertAuthentication($authentication = false, $message = '%s') {
+ if (! $authentication) {
+ $message = sprintf($message, "Expected any authentication type, got [" .
+ $this->_browser->getAuthentication() . "]");
+ return $this->assertTrue(
+ $this->_browser->getAuthentication(),
+ $message);
+ } else {
+ $message = sprintf($message, "Expected authentication [$authentication] got [" .
+ $this->_browser->getAuthentication() . "]");
+ return $this->assertTrue(
+ strtolower($this->_browser->getAuthentication()) == strtolower($authentication),
+ $message);
+ }
+ }
+
+ /**
+ * Checks that no authentication is necessary to view
+ * the desired page.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertNoAuthentication($message = '%s') {
+ $message = sprintf($message, "Expected no authentication type, got [" .
+ $this->_browser->getAuthentication() . "]");
+ return $this->assertFalse($this->_browser->getAuthentication(), $message);
+ }
+
+ /**
+ * Attempts to match the current security realm.
+ * @param string $realm Name of security realm.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertRealm($realm, $message = '%s') {
+ if (! SimpleExpectation::isExpectation($realm)) {
+ $realm = new EqualExpectation($realm);
+ }
+ return $this->assert(
+ $realm,
+ $this->_browser->getRealm(),
+ "Expected realm -> $message");
+ }
+
+ /**
+ * Checks each header line for the required value. If no
+ * value is given then only an existence check is made.
+ * @param string $header Case insensitive header name.
+ * @param mixed $value Case sensitive trimmed string to
+ * match against. An expectation object
+ * can be used for pattern matching.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertHeader($header, $value = false, $message = '%s') {
+ return $this->assert(
+ new HttpHeaderExpectation($header, $value),
+ $this->_browser->getHeaders(),
+ $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertHeaderPattern($header, $pattern, $message = '%s') {
+ return $this->assert(
+ new HttpHeaderExpectation($header, new PatternExpectation($pattern)),
+ $this->_browser->getHeaders(),
+ $message);
+ }
+
+ /**
+ * Confirms that the header type has not been received.
+ * Only the landing page is checked. If you want to check
+ * redirect pages, then you should limit redirects so
+ * as to capture the page you want.
+ * @param string $header Case insensitive header name.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertNoHeader($header, $message = '%s') {
+ return $this->assert(
+ new NoHttpHeaderExpectation($header),
+ $this->_browser->getHeaders(),
+ $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertNoUnwantedHeader($header, $message = '%s') {
+ return $this->assertNoHeader($header, $message);
+ }
+
+ /**
+ * Tests the text between the title tags.
+ * @param string/SimpleExpectation $title Expected title.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertTitle($title = false, $message = '%s') {
+ if (! SimpleExpectation::isExpectation($title)) {
+ $title = new EqualExpectation($title);
+ }
+ return $this->assert($title, $this->_browser->getTitle(), $message);
+ }
+
+ /**
+ * Will trigger a pass if the text is found in the plain
+ * text form of the page.
+ * @param string $text Text to look for.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertText($text, $message = '%s') {
+ return $this->assert(
+ new TextExpectation($text),
+ $this->_browser->getContentAsText(),
+ $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertWantedText($text, $message = '%s') {
+ return $this->assertText($text, $message);
+ }
+
+ /**
+ * Will trigger a pass if the text is not found in the plain
+ * text form of the page.
+ * @param string $text Text to look for.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertNoText($text, $message = '%s') {
+ return $this->assert(
+ new NoTextExpectation($text),
+ $this->_browser->getContentAsText(),
+ $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertNoUnwantedText($text, $message = '%s') {
+ return $this->assertNoText($text, $message);
+ }
+
+ /**
+ * Will trigger a pass if the Perl regex pattern
+ * is found in the raw content.
+ * @param string $pattern Perl regex to look for including
+ * the regex delimiters.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertPattern($pattern, $message = '%s') {
+ return $this->assert(
+ new PatternExpectation($pattern),
+ $this->_browser->getContent(),
+ $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertWantedPattern($pattern, $message = '%s') {
+ return $this->assertPattern($pattern, $message);
+ }
+
+ /**
+ * Will trigger a pass if the perl regex pattern
+ * is not present in raw content.
+ * @param string $pattern Perl regex to look for including
+ * the regex delimiters.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertNoPattern($pattern, $message = '%s') {
+ return $this->assert(
+ new NoPatternExpectation($pattern),
+ $this->_browser->getContent(),
+ $message);
+ }
+
+ /**
+ * @deprecated
+ */
+ function assertNoUnwantedPattern($pattern, $message = '%s') {
+ return $this->assertNoPattern($pattern, $message);
+ }
+
+ /**
+ * Checks that a cookie is set for the current page
+ * and optionally checks the value.
+ * @param string $name Name of cookie to test.
+ * @param string $expected Expected value as a string or
+ * false if any value will do.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertCookie($name, $expected = false, $message = '%s') {
+ $value = $this->getCookie($name);
+ if (! $expected) {
+ return $this->assertTrue(
+ $value,
+ sprintf($message, "Expecting cookie [$name]"));
+ }
+ if (! SimpleExpectation::isExpectation($expected)) {
+ $expected = new EqualExpectation($expected);
+ }
+ return $this->assert($expected, $value, "Expecting cookie [$name] -> $message");
+ }
+
+ /**
+ * Checks that no cookie is present or that it has
+ * been successfully cleared.
+ * @param string $name Name of cookie to test.
+ * @param string $message Message to display.
+ * @return boolean True if pass.
+ * @access public
+ */
+ function assertNoCookie($name, $message = '%s') {
+ return $this->assertTrue(
+ $this->getCookie($name) === false,
+ sprintf($message, "Not expecting cookie [$name]"));
+ }
+
+ /**
+ * Called from within the test methods to register
+ * passes and failures.
+ * @param boolean $result Pass on true.
+ * @param string $message Message to display describing
+ * the test state.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertTrue($result, $message = false) {
+ return $this->assert(new TrueExpectation(), $result, $message);
+ }
+
+ /**
+ * Will be true on false and vice versa. False
+ * is the PHP definition of false, so that null,
+ * empty strings, zero and an empty array all count
+ * as false.
+ * @param boolean $result Pass on false.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertFalse($result, $message = '%s') {
+ return $this->assert(new FalseExpectation(), $result, $message);
+ }
+
+ /**
+ * Will trigger a pass if the two parameters have
+ * the same value only. Otherwise a fail. This
+ * is for testing hand extracted text, etc.
+ * @param mixed $first Value to compare.
+ * @param mixed $second Value to compare.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertEqual($first, $second, $message = '%s') {
+ return $this->assert(
+ new EqualExpectation($first),
+ $second,
+ $message);
+ }
+
+ /**
+ * Will trigger a pass if the two parameters have
+ * a different value. Otherwise a fail. This
+ * is for testing hand extracted text, etc.
+ * @param mixed $first Value to compare.
+ * @param mixed $second Value to compare.
+ * @param string $message Message to display.
+ * @return boolean True on pass
+ * @access public
+ */
+ function assertNotEqual($first, $second, $message = '%s') {
+ return $this->assert(
+ new NotEqualExpectation($first),
+ $second,
+ $message);
+ }
+
+ /**
+ * Uses a stack trace to find the line of an assertion.
+ * @return string Line number of first assert*
+ * method embedded in format string.
+ * @access public
+ */
+ function getAssertionLine() {
+ $trace = new SimpleStackTrace(array('assert', 'click', 'pass', 'fail'));
+ return $trace->traceMethod();
+ }
+}
+?> \ No newline at end of file
diff --git a/vendors/simpletest/xml.php b/vendors/simpletest/xml.php
new file mode 100644
index 000000000..1666cb930
--- /dev/null
+++ b/vendors/simpletest/xml.php
@@ -0,0 +1,647 @@
+<?php
+/**
+ * base include file for SimpleTest
+ * @package SimpleTest
+ * @subpackage UnitTester
+ * @version $Id: xml.php 1723 2008-04-08 00:34:10Z lastcraft $
+ */
+
+/**#@+
+ * include other SimpleTest class files
+ */
+require_once(dirname(__FILE__) . '/scorer.php');
+/**#@-*/
+
+/**
+ * Creates the XML needed for remote communication
+ * by SimpleTest.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class XmlReporter extends SimpleReporter {
+ var $_indent;
+ var $_namespace;
+
+ /**
+ * Sets up indentation and namespace.
+ * @param string $namespace Namespace to add to each tag.
+ * @param string $indent Indenting to add on each nesting.
+ * @access public
+ */
+ function XmlReporter($namespace = false, $indent = ' ') {
+ $this->SimpleReporter();
+ $this->_namespace = ($namespace ? $namespace . ':' : '');
+ $this->_indent = $indent;
+ }
+
+ /**
+ * Calculates the pretty printing indent level
+ * from the current level of nesting.
+ * @param integer $offset Extra indenting level.
+ * @return string Leading space.
+ * @access protected
+ */
+ function _getIndent($offset = 0) {
+ return str_repeat(
+ $this->_indent,
+ count($this->getTestList()) + $offset);
+ }
+
+ /**
+ * Converts character string to parsed XML
+ * entities string.
+ * @param string text Unparsed character data.
+ * @return string Parsed character data.
+ * @access public
+ */
+ function toParsedXml($text) {
+ return str_replace(
+ array('&', '<', '>', '"', '\''),
+ array('&amp;', '&lt;', '&gt;', '&quot;', '&apos;'),
+ $text);
+ }
+
+ /**
+ * Paints the start of a group test.
+ * @param string $test_name Name of test that is starting.
+ * @param integer $size Number of test cases starting.
+ * @access public
+ */
+ function paintGroupStart($test_name, $size) {
+ parent::paintGroupStart($test_name, $size);
+ print $this->_getIndent();
+ print "<" . $this->_namespace . "group size=\"$size\">\n";
+ print $this->_getIndent(1);
+ print "<" . $this->_namespace . "name>" .
+ $this->toParsedXml($test_name) .
+ "</" . $this->_namespace . "name>\n";
+ }
+
+ /**
+ * Paints the end of a group test.
+ * @param string $test_name Name of test that is ending.
+ * @access public
+ */
+ function paintGroupEnd($test_name) {
+ print $this->_getIndent();
+ print "</" . $this->_namespace . "group>\n";
+ parent::paintGroupEnd($test_name);
+ }
+
+ /**
+ * Paints the start of a test case.
+ * @param string $test_name Name of test that is starting.
+ * @access public
+ */
+ function paintCaseStart($test_name) {
+ parent::paintCaseStart($test_name);
+ print $this->_getIndent();
+ print "<" . $this->_namespace . "case>\n";
+ print $this->_getIndent(1);
+ print "<" . $this->_namespace . "name>" .
+ $this->toParsedXml($test_name) .
+ "</" . $this->_namespace . "name>\n";
+ }
+
+ /**
+ * Paints the end of a test case.
+ * @param string $test_name Name of test that is ending.
+ * @access public
+ */
+ function paintCaseEnd($test_name) {
+ print $this->_getIndent();
+ print "</" . $this->_namespace . "case>\n";
+ parent::paintCaseEnd($test_name);
+ }
+
+ /**
+ * Paints the start of a test method.
+ * @param string $test_name Name of test that is starting.
+ * @access public
+ */
+ function paintMethodStart($test_name) {
+ parent::paintMethodStart($test_name);
+ print $this->_getIndent();
+ print "<" . $this->_namespace . "test>\n";
+ print $this->_getIndent(1);
+ print "<" . $this->_namespace . "name>" .
+ $this->toParsedXml($test_name) .
+ "</" . $this->_namespace . "name>\n";
+ }
+
+ /**
+ * Paints the end of a test method.
+ * @param string $test_name Name of test that is ending.
+ * @param integer $progress Number of test cases ending.
+ * @access public
+ */
+ function paintMethodEnd($test_name) {
+ print $this->_getIndent();
+ print "</" . $this->_namespace . "test>\n";
+ parent::paintMethodEnd($test_name);
+ }
+
+ /**
+ * Paints pass as XML.
+ * @param string $message Message to encode.
+ * @access public
+ */
+ function paintPass($message) {
+ parent::paintPass($message);
+ print $this->_getIndent(1);
+ print "<" . $this->_namespace . "pass>";
+ print $this->toParsedXml($message);
+ print "</" . $this->_namespace . "pass>\n";
+ }
+
+ /**
+ * Paints failure as XML.
+ * @param string $message Message to encode.
+ * @access public
+ */
+ function paintFail($message) {
+ parent::paintFail($message);
+ print $this->_getIndent(1);
+ print "<" . $this->_namespace . "fail>";
+ print $this->toParsedXml($message);
+ print "</" . $this->_namespace . "fail>\n";
+ }
+
+ /**
+ * Paints error as XML.
+ * @param string $message Message to encode.
+ * @access public
+ */
+ function paintError($message) {
+ parent::paintError($message);
+ print $this->_getIndent(1);
+ print "<" . $this->_namespace . "exception>";
+ print $this->toParsedXml($message);
+ print "</" . $this->_namespace . "exception>\n";
+ }
+
+ /**
+ * Paints exception as XML.
+ * @param Exception $exception Exception to encode.
+ * @access public
+ */
+ function paintException($exception) {
+ parent::paintException($exception);
+ print $this->_getIndent(1);
+ print "<" . $this->_namespace . "exception>";
+ $message = 'Unexpected exception of type [' . get_class($exception) .
+ '] with message ['. $exception->getMessage() .
+ '] in ['. $exception->getFile() .
+ ' line ' . $exception->getLine() . ']';
+ print $this->toParsedXml($message);
+ print "</" . $this->_namespace . "exception>\n";
+ }
+
+ /**
+ * Paints the skipping message and tag.
+ * @param string $message Text to display in skip tag.
+ * @access public
+ */
+ function paintSkip($message) {
+ parent::paintSkip($message);
+ print $this->_getIndent(1);
+ print "<" . $this->_namespace . "skip>";
+ print $this->toParsedXml($message);
+ print "</" . $this->_namespace . "skip>\n";
+ }
+
+ /**
+ * Paints a simple supplementary message.
+ * @param string $message Text to display.
+ * @access public
+ */
+ function paintMessage($message) {
+ parent::paintMessage($message);
+ print $this->_getIndent(1);
+ print "<" . $this->_namespace . "message>";
+ print $this->toParsedXml($message);
+ print "</" . $this->_namespace . "message>\n";
+ }
+
+ /**
+ * Paints a formatted ASCII message such as a
+ * variable dump.
+ * @param string $message Text to display.
+ * @access public
+ */
+ function paintFormattedMessage($message) {
+ parent::paintFormattedMessage($message);
+ print $this->_getIndent(1);
+ print "<" . $this->_namespace . "formatted>";
+ print "<![CDATA[$message]]>";
+ print "</" . $this->_namespace . "formatted>\n";
+ }
+
+ /**
+ * Serialises the event object.
+ * @param string $type Event type as text.
+ * @param mixed $payload Message or object.
+ * @access public
+ */
+ function paintSignal($type, $payload) {
+ parent::paintSignal($type, $payload);
+ print $this->_getIndent(1);
+ print "<" . $this->_namespace . "signal type=\"$type\">";
+ print "<![CDATA[" . serialize($payload) . "]]>";
+ print "</" . $this->_namespace . "signal>\n";
+ }
+
+ /**
+ * Paints the test document header.
+ * @param string $test_name First test top level
+ * to start.
+ * @access public
+ * @abstract
+ */
+ function paintHeader($test_name) {
+ if (! SimpleReporter::inCli()) {
+ header('Content-type: text/xml');
+ }
+ print "<?xml version=\"1.0\"";
+ if ($this->_namespace) {
+ print " xmlns:" . $this->_namespace .
+ "=\"www.lastcraft.com/SimpleTest/Beta3/Report\"";
+ }
+ print "?>\n";
+ print "<" . $this->_namespace . "run>\n";
+ }
+
+ /**
+ * Paints the test document footer.
+ * @param string $test_name The top level test.
+ * @access public
+ * @abstract
+ */
+ function paintFooter($test_name) {
+ print "</" . $this->_namespace . "run>\n";
+ }
+}
+
+/**
+ * Accumulator for incoming tag. Holds the
+ * incoming test structure information for
+ * later dispatch to the reporter.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class NestingXmlTag {
+ var $_name;
+ var $_attributes;
+
+ /**
+ * Sets the basic test information except
+ * the name.
+ * @param hash $attributes Name value pairs.
+ * @access public
+ */
+ function NestingXmlTag($attributes) {
+ $this->_name = false;
+ $this->_attributes = $attributes;
+ }
+
+ /**
+ * Sets the test case/method name.
+ * @param string $name Name of test.
+ * @access public
+ */
+ function setName($name) {
+ $this->_name = $name;
+ }
+
+ /**
+ * Accessor for name.
+ * @return string Name of test.
+ * @access public
+ */
+ function getName() {
+ return $this->_name;
+ }
+
+ /**
+ * Accessor for attributes.
+ * @return hash All attributes.
+ * @access protected
+ */
+ function _getAttributes() {
+ return $this->_attributes;
+ }
+}
+
+/**
+ * Accumulator for incoming method tag. Holds the
+ * incoming test structure information for
+ * later dispatch to the reporter.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class NestingMethodTag extends NestingXmlTag {
+
+ /**
+ * Sets the basic test information except
+ * the name.
+ * @param hash $attributes Name value pairs.
+ * @access public
+ */
+ function NestingMethodTag($attributes) {
+ $this->NestingXmlTag($attributes);
+ }
+
+ /**
+ * Signals the appropriate start event on the
+ * listener.
+ * @param SimpleReporter $listener Target for events.
+ * @access public
+ */
+ function paintStart(&$listener) {
+ $listener->paintMethodStart($this->getName());
+ }
+
+ /**
+ * Signals the appropriate end event on the
+ * listener.
+ * @param SimpleReporter $listener Target for events.
+ * @access public
+ */
+ function paintEnd(&$listener) {
+ $listener->paintMethodEnd($this->getName());
+ }
+}
+
+/**
+ * Accumulator for incoming case tag. Holds the
+ * incoming test structure information for
+ * later dispatch to the reporter.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class NestingCaseTag extends NestingXmlTag {
+
+ /**
+ * Sets the basic test information except
+ * the name.
+ * @param hash $attributes Name value pairs.
+ * @access public
+ */
+ function NestingCaseTag($attributes) {
+ $this->NestingXmlTag($attributes);
+ }
+
+ /**
+ * Signals the appropriate start event on the
+ * listener.
+ * @param SimpleReporter $listener Target for events.
+ * @access public
+ */
+ function paintStart(&$listener) {
+ $listener->paintCaseStart($this->getName());
+ }
+
+ /**
+ * Signals the appropriate end event on the
+ * listener.
+ * @param SimpleReporter $listener Target for events.
+ * @access public
+ */
+ function paintEnd(&$listener) {
+ $listener->paintCaseEnd($this->getName());
+ }
+}
+
+/**
+ * Accumulator for incoming group tag. Holds the
+ * incoming test structure information for
+ * later dispatch to the reporter.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class NestingGroupTag extends NestingXmlTag {
+
+ /**
+ * Sets the basic test information except
+ * the name.
+ * @param hash $attributes Name value pairs.
+ * @access public
+ */
+ function NestingGroupTag($attributes) {
+ $this->NestingXmlTag($attributes);
+ }
+
+ /**
+ * Signals the appropriate start event on the
+ * listener.
+ * @param SimpleReporter $listener Target for events.
+ * @access public
+ */
+ function paintStart(&$listener) {
+ $listener->paintGroupStart($this->getName(), $this->getSize());
+ }
+
+ /**
+ * Signals the appropriate end event on the
+ * listener.
+ * @param SimpleReporter $listener Target for events.
+ * @access public
+ */
+ function paintEnd(&$listener) {
+ $listener->paintGroupEnd($this->getName());
+ }
+
+ /**
+ * The size in the attributes.
+ * @return integer Value of size attribute or zero.
+ * @access public
+ */
+ function getSize() {
+ $attributes = $this->_getAttributes();
+ if (isset($attributes['SIZE'])) {
+ return (integer)$attributes['SIZE'];
+ }
+ return 0;
+ }
+}
+
+/**
+ * Parser for importing the output of the XmlReporter.
+ * Dispatches that output to another reporter.
+ * @package SimpleTest
+ * @subpackage UnitTester
+ */
+class SimpleTestXmlParser {
+ var $_listener;
+ var $_expat;
+ var $_tag_stack;
+ var $_in_content_tag;
+ var $_content;
+ var $_attributes;
+
+ /**
+ * Loads a listener with the SimpleReporter
+ * interface.
+ * @param SimpleReporter $listener Listener of tag events.
+ * @access public
+ */
+ function SimpleTestXmlParser(&$listener) {
+ $this->_listener = &$listener;
+ $this->_expat = &$this->_createParser();
+ $this->_tag_stack = array();
+ $this->_in_content_tag = false;
+ $this->_content = '';
+ $this->_attributes = array();
+ }
+
+ /**
+ * Parses a block of XML sending the results to
+ * the listener.
+ * @param string $chunk Block of text to read.
+ * @return boolean True if valid XML.
+ * @access public
+ */
+ function parse($chunk) {
+ if (! xml_parse($this->_expat, $chunk)) {
+ trigger_error('XML parse error with ' .
+ xml_error_string(xml_get_error_code($this->_expat)));
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Sets up expat as the XML parser.
+ * @return resource Expat handle.
+ * @access protected
+ */
+ function &_createParser() {
+ $expat = xml_parser_create();
+ xml_set_object($expat, $this);
+ xml_set_element_handler($expat, '_startElement', '_endElement');
+ xml_set_character_data_handler($expat, '_addContent');
+ xml_set_default_handler($expat, '_default');
+ return $expat;
+ }
+
+ /**
+ * Opens a new test nesting level.
+ * @return NestedXmlTag The group, case or method tag
+ * to start.
+ * @access private
+ */
+ function _pushNestingTag($nested) {
+ array_unshift($this->_tag_stack, $nested);
+ }
+
+ /**
+ * Accessor for current test structure tag.
+ * @return NestedXmlTag The group, case or method tag
+ * being parsed.
+ * @access private
+ */
+ function &_getCurrentNestingTag() {
+ return $this->_tag_stack[0];
+ }
+
+ /**
+ * Ends a nesting tag.
+ * @return NestedXmlTag The group, case or method tag
+ * just finished.
+ * @access private
+ */
+ function _popNestingTag() {
+ return array_shift($this->_tag_stack);
+ }
+
+ /**
+ * Test if tag is a leaf node with only text content.
+ * @param string $tag XML tag name.
+ * @return @boolean True if leaf, false if nesting.
+ * @private
+ */
+ function _isLeaf($tag) {
+ return in_array($tag, array(
+ 'NAME', 'PASS', 'FAIL', 'EXCEPTION', 'SKIP', 'MESSAGE', 'FORMATTED', 'SIGNAL'));
+ }
+
+ /**
+ * Handler for start of event element.
+ * @param resource $expat Parser handle.
+ * @param string $tag Element name.
+ * @param hash $attributes Name value pairs.
+ * Attributes without content
+ * are marked as true.
+ * @access protected
+ */
+ function _startElement($expat, $tag, $attributes) {
+ $this->_attributes = $attributes;
+ if ($tag == 'GROUP') {
+ $this->_pushNestingTag(new NestingGroupTag($attributes));
+ } elseif ($tag == 'CASE') {
+ $this->_pushNestingTag(new NestingCaseTag($attributes));
+ } elseif ($tag == 'TEST') {
+ $this->_pushNestingTag(new NestingMethodTag($attributes));
+ } elseif ($this->_isLeaf($tag)) {
+ $this->_in_content_tag = true;
+ $this->_content = '';
+ }
+ }
+
+ /**
+ * End of element event.
+ * @param resource $expat Parser handle.
+ * @param string $tag Element name.
+ * @access protected
+ */
+ function _endElement($expat, $tag) {
+ $this->_in_content_tag = false;
+ if (in_array($tag, array('GROUP', 'CASE', 'TEST'))) {
+ $nesting_tag = $this->_popNestingTag();
+ $nesting_tag->paintEnd($this->_listener);
+ } elseif ($tag == 'NAME') {
+ $nesting_tag = &$this->_getCurrentNestingTag();
+ $nesting_tag->setName($this->_content);
+ $nesting_tag->paintStart($this->_listener);
+ } elseif ($tag == 'PASS') {
+ $this->_listener->paintPass($this->_content);
+ } elseif ($tag == 'FAIL') {
+ $this->_listener->paintFail($this->_content);
+ } elseif ($tag == 'EXCEPTION') {
+ $this->_listener->paintError($this->_content);
+ } elseif ($tag == 'SKIP') {
+ $this->_listener->paintSkip($this->_content);
+ } elseif ($tag == 'SIGNAL') {
+ $this->_listener->paintSignal(
+ $this->_attributes['TYPE'],
+ unserialize($this->_content));
+ } elseif ($tag == 'MESSAGE') {
+ $this->_listener->paintMessage($this->_content);
+ } elseif ($tag == 'FORMATTED') {
+ $this->_listener->paintFormattedMessage($this->_content);
+ }
+ }
+
+ /**
+ * Content between start and end elements.
+ * @param resource $expat Parser handle.
+ * @param string $text Usually output messages.
+ * @access protected
+ */
+ function _addContent($expat, $text) {
+ if ($this->_in_content_tag) {
+ $this->_content .= $text;
+ }
+ return true;
+ }
+
+ /**
+ * XML and Doctype handler. Discards all such content.
+ * @param resource $expat Parser handle.
+ * @param string $default Text of default content.
+ * @access protected
+ */
+ function _default($expat, $default) {
+ }
+}
+?>
diff --git a/vendors/sprintf.js b/vendors/sprintf.js
new file mode 100644
index 000000000..0e8d02c98
--- /dev/null
+++ b/vendors/sprintf.js
@@ -0,0 +1,183 @@
+/**
+sprintf() for JavaScript 0.7-beta1
+http://www.diveintojavascript.com/projects/javascript-sprintf
+
+Copyright (c) Alexandru Marasteanu <alexaholic [at) gmail (dot] com>
+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 sprintf() for JavaScript 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 Alexandru Marasteanu 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.
+
+
+Changelog:
+2010.09.06 - 0.7-beta1
+ - features: vsprintf, support for named placeholders
+ - enhancements: format cache, reduced global namespace pollution
+
+2010.05.22 - 0.6:
+ - reverted to 0.4 and fixed the bug regarding the sign of the number 0
+ Note:
+ Thanks to Raphael Pigulla <raph (at] n3rd [dot) org> (http://www.n3rd.org/)
+ who warned me about a bug in 0.5, I discovered that the last update was
+ a regress. I appologize for that.
+
+2010.05.09 - 0.5:
+ - bug fix: 0 is now preceeded with a + sign
+ - bug fix: the sign was not at the right position on padded results (Kamal Abdali)
+ - switched from GPL to BSD license
+
+2007.10.21 - 0.4:
+ - unit test and patch (David Baird)
+
+2007.09.17 - 0.3:
+ - bug fix: no longer throws exception on empty paramenters (Hans Pufal)
+
+2007.09.11 - 0.2:
+ - feature: added argument swapping
+
+2007.04.03 - 0.1:
+ - initial release
+**/
+
+var sprintf = (function() {
+ function get_type(variable) {
+ return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();
+ }
+ function str_repeat(input, multiplier) {
+ for (var output = []; multiplier > 0; output[--multiplier] = input) {/* do nothing */}
+ return output.join('');
+ }
+
+ var str_format = function() {
+ if (!str_format.cache.hasOwnProperty(arguments[0])) {
+ str_format.cache[arguments[0]] = str_format.parse(arguments[0]);
+ }
+ return str_format.format.call(null, str_format.cache[arguments[0]], arguments);
+ };
+
+ str_format.format = function(parse_tree, argv) {
+ var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length;
+ for (i = 0; i < tree_length; i++) {
+ node_type = get_type(parse_tree[i]);
+ if (node_type === 'string') {
+ output.push(parse_tree[i]);
+ }
+ else if (node_type === 'array') {
+ match = parse_tree[i]; // convenience purposes only
+ if (match[2]) { // keyword argument
+ arg = argv[cursor];
+ for (k = 0; k < match[2].length; k++) {
+ if (!arg.hasOwnProperty(match[2][k])) {
+ throw(sprintf('[sprintf] property "%s" does not exist', match[2][k]));
+ }
+ arg = arg[match[2][k]];
+ }
+ }
+ else if (match[1]) { // positional argument (explicit)
+ arg = argv[match[1]];
+ }
+ else { // positional argument (implicit)
+ arg = argv[cursor++];
+ }
+
+ if (/[^s]/.test(match[8]) && (get_type(arg) != 'number')) {
+ throw(sprintf('[sprintf] expecting number but found %s', get_type(arg)));
+ }
+ switch (match[8]) {
+ case 'b': arg = arg.toString(2); break;
+ case 'c': arg = String.fromCharCode(arg); break;
+ case 'd': arg = parseInt(arg, 10); break;
+ case 'e': arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential(); break;
+ case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg); break;
+ case 'o': arg = arg.toString(8); break;
+ case 's': arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg); break;
+ case 'u': arg = Math.abs(arg); break;
+ case 'x': arg = arg.toString(16); break;
+ case 'X': arg = arg.toString(16).toUpperCase(); break;
+ }
+ arg = (/[def]/.test(match[8]) && match[3] && arg >= 0 ? '+'+ arg : arg);
+ pad_character = match[4] ? match[4] == '0' ? '0' : match[4].charAt(1) : ' ';
+ pad_length = match[6] - String(arg).length;
+ pad = match[6] ? str_repeat(pad_character, pad_length) : '';
+ output.push(match[5] ? arg + pad : pad + arg);
+ }
+ }
+ return output.join('');
+ };
+
+ str_format.cache = {};
+
+ str_format.parse = function(fmt) {
+ var _fmt = fmt, match = [], parse_tree = [], arg_names = 0;
+ while (_fmt) {
+ if ((match = /^[^\x25]+/.exec(_fmt)) !== null) {
+ parse_tree.push(match[0]);
+ }
+ else if ((match = /^\x25{2}/.exec(_fmt)) !== null) {
+ parse_tree.push('%');
+ }
+ else if ((match = /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(_fmt)) !== null) {
+ if (match[2]) {
+ arg_names |= 1;
+ var field_list = [], replacement_field = match[2], field_match = [];
+ if ((field_match = /^([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
+ field_list.push(field_match[1]);
+ while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
+ if ((field_match = /^\.([a-z_][a-z_\d]*)/i.exec(replacement_field)) !== null) {
+ field_list.push(field_match[1]);
+ }
+ else if ((field_match = /^\[(\d+)\]/.exec(replacement_field)) !== null) {
+ field_list.push(field_match[1]);
+ }
+ else {
+ throw('[sprintf] huh?');
+ }
+ }
+ }
+ else {
+ throw('[sprintf] huh?');
+ }
+ match[2] = field_list;
+ }
+ else {
+ arg_names |= 2;
+ }
+ if (arg_names === 3) {
+ throw('[sprintf] mixing positional and named placeholders is not (yet) supported');
+ }
+ parse_tree.push(match);
+ }
+ else {
+ throw('[sprintf] huh?');
+ }
+ _fmt = _fmt.substring(match[0].length);
+ }
+ return parse_tree;
+ };
+
+ return str_format;
+})();
+
+var vsprintf = function(fmt, argv) {
+ argv.unshift(fmt);
+ return sprintf.apply(null, argv);
+};
diff --git a/version.php b/version.php
new file mode 100644
index 000000000..07a08ab4a
--- /dev/null
+++ b/version.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg version number.
+ * This file defines the current version of the core Elgg code being used.
+ * This is compared against the values stored in the database to determine
+ * whether upgrades should be performed.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// YYYYMMDD = Elgg Date
+// XX = Interim incrementer
+$version = 2013012900;
+
+// Human-friendly version name
+$release = '1.8.13';
diff --git a/views/default/admin/appearance/default_widgets.php b/views/default/admin/appearance/default_widgets.php
new file mode 100644
index 000000000..1bf5791ac
--- /dev/null
+++ b/views/default/admin/appearance/default_widgets.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Default widgets landing page.
+ *
+ * @package Elgg.Core
+ * @subpackage Administration.DefaultWidgets
+ */
+
+$object = elgg_get_entities(array(
+ 'type' => 'object',
+ 'subtype' => 'moddefaultwidgets',
+ 'limit' => 1,
+));
+
+if ($object) {
+ echo elgg_view('output/url', array(
+ 'text' => elgg_echo('upgrade'),
+ 'href' => 'action/widgets/upgrade',
+ 'is_action' => true,
+ 'is_trusted' => true,
+ 'class' => 'elgg_button elgg-button-submit',
+ 'title' => 'Upgrade your default widgets to work on Elgg 1.8',
+ ));
+}
+
+elgg_push_context('default_widgets');
+$widget_context = get_input('widget_context');
+$list = elgg_trigger_plugin_hook('get_list', 'default_widgets', null, array());
+
+// default to something if we can
+if (!$widget_context && $list) {
+ $widget_context = $list[0]['widget_context'];
+}
+
+$current_info = null;
+$tabs = array();
+foreach ($list as $info) {
+ $url = "admin/appearance/default_widgets?widget_context={$info['widget_context']}";
+ $selected = false;
+ if ($widget_context == $info['widget_context']) {
+ $selected = true;
+ $current_info = $info;
+ }
+
+ $tabs[] = array(
+ 'title' => $info['name'],
+ 'url' => $url,
+ 'selected' => $selected
+ );
+}
+
+$tabs_vars = array(
+ 'tabs' => $tabs
+);
+
+echo elgg_view('navigation/tabs', $tabs_vars);
+
+echo elgg_view('output/longtext', array('value' => elgg_echo('admin:default_widgets:instructions')));
+
+if (!$current_info) {
+ $content = elgg_echo('admin:default_widgets:unknown_type');
+} else {
+ // default widgets are owned and saved to the site.
+ elgg_set_page_owner_guid(elgg_get_config('site_guid'));
+ elgg_push_context($current_info['widget_context']);
+
+ $default_widgets_input = elgg_view('input/hidden', array(
+ 'name' => 'default_widgets',
+ 'value' => 1
+ ));
+
+ $params = array(
+ 'content' => $default_widgets_input,
+ 'num_columns' => $current_info['widget_columns'],
+ );
+
+ $content = elgg_view_layout('widgets', $params);
+ elgg_pop_context();
+}
+elgg_pop_context();
+
+echo $content;
diff --git a/views/default/admin/appearance/menu_items.php b/views/default/admin/appearance/menu_items.php
new file mode 100644
index 000000000..1d5c95cf9
--- /dev/null
+++ b/views/default/admin/appearance/menu_items.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Elgg administration menu items
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+
+echo elgg_view_form('admin/menu/save', array('class' => 'elgg-form-settings'));
diff --git a/views/default/admin/appearance/profile_fields.php b/views/default/admin/appearance/profile_fields.php
new file mode 100644
index 000000000..f1d78c19f
--- /dev/null
+++ b/views/default/admin/appearance/profile_fields.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Admin area: edit default profile fields
+ */
+
+$add = elgg_view_form('profile/fields/add', array('class' => 'elgg-form-settings'), array());
+$list = elgg_view('admin/appearance/profile_fields/list');
+
+$reset = elgg_view('output/confirmlink', array(
+ 'text' => elgg_echo('reset'),
+ 'href' => 'action/profile/fields/reset',
+ 'title' => elgg_echo('profile:resetdefault'),
+ 'confirm' => elgg_echo('profile:resetdefault:confirm'),
+ 'class' => 'elgg-button elgg-button-cancel',
+ 'is_trusted' => 'true',
+));
+
+$body = <<<__HTML
+$add
+$list
+<div class="mtl">$reset</div>
+__HTML;
+
+echo $body;
diff --git a/views/default/admin/appearance/profile_fields/list.php b/views/default/admin/appearance/profile_fields/list.php
new file mode 100644
index 000000000..b9440a95d
--- /dev/null
+++ b/views/default/admin/appearance/profile_fields/list.php
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Profile fields.
+ *
+ * @todo Needs some review
+ */
+
+// List form elements
+$n = 0;
+$loaded_defaults = array();
+$items = array();
+$fieldlist = elgg_get_config('profile_custom_fields');
+if ($fieldlist) {
+ $fieldlistarray = explode(',', $fieldlist);
+ foreach ($fieldlistarray as $listitem) {
+ $translation = elgg_get_config("admin_defined_profile_$listitem");
+ $type = elgg_get_config("admin_defined_profile_type_$listitem");
+ if ($translation && $type) {
+ $item = new stdClass;
+ $item->translation = $translation;
+ $item->shortname = $listitem;
+ $item->name = "admin_defined_profile_$listitem";
+ $item->type = elgg_echo("profile:field:$type");
+ $items[] = $item;
+ }
+ }
+}
+?>
+<ul id="elgg-profile-fields" class="mvm">
+<?php
+
+$save = elgg_echo('save');
+$cancel = elgg_echo('cancel');
+
+foreach ($items as $item) {
+ echo elgg_view("profile/", array('value' => $item->translation));
+
+ //$even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even';
+ $url = elgg_view('output/url', array(
+ 'href' => "action/profile/fields/delete?id={$item->shortname}",
+ 'text' => elgg_view_icon('delete-alt'),
+ 'is_action' => true,
+ 'is_trusted' => true,
+ ));
+ $type = elgg_echo($item->type);
+ echo <<<HTML
+<li id="$item->shortname" class="clearfix">
+ <span class="elgg-icon elgg-icon-drag-arrow elgg-state-draggable"></span>
+ <b><span id="elgg-profile-field-{$item->shortname}" class="elgg-state-editable">$item->translation</span></b> [$type] $url
+</li>
+HTML;
+}
+
+?>
+</ul> \ No newline at end of file
diff --git a/views/default/admin/dashboard.php b/views/default/admin/dashboard.php
new file mode 100644
index 000000000..d3976ca38
--- /dev/null
+++ b/views/default/admin/dashboard.php
@@ -0,0 +1,12 @@
+<?php
+
+elgg_set_page_owner_guid(elgg_get_logged_in_user_guid());
+
+$params = array(
+ 'num_columns' => 2,
+ 'exact_match' => true,
+ 'show_access' => false,
+);
+$widgets = elgg_view_layout('widgets', $params);
+
+echo $widgets; \ No newline at end of file
diff --git a/views/default/admin/footer.php b/views/default/admin/footer.php
new file mode 100644
index 000000000..ce420e99a
--- /dev/null
+++ b/views/default/admin/footer.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Elgg admin footer. Extend this view to add content to the admin footer
+ */
+
+$options = array(
+ 'class' => 'elgg-menu-hz'
+);
+echo elgg_view_menu('admin_footer', $options); \ No newline at end of file
diff --git a/views/default/admin/header.php b/views/default/admin/header.php
new file mode 100644
index 000000000..331190a88
--- /dev/null
+++ b/views/default/admin/header.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Elgg admin header
+ */
+$admin_title = elgg_get_site_entity()->name . ' ' . elgg_echo('admin');
+
+$view_site = elgg_view('output/url', array(
+ 'href' => elgg_get_site_url(),
+ 'text' => elgg_echo('admin:view_site'),
+ 'is_trusted' => true,
+));
+$logout = elgg_view('output/url', array(
+ 'href' => 'action/logout',
+ 'text' => elgg_echo('logout'),
+ 'is_trusted' => true,
+));
+?>
+<h1 class="elgg-heading-site">
+ <a href="<?php echo elgg_get_site_url(); ?>admin">
+ <?php echo $admin_title; ?>
+ </a>
+</h1>
+<ul class="elgg-menu-user">
+ <li><?php echo elgg_echo('admin:loggedin', array(elgg_get_logged_in_user_entity()->name)); ?></li>
+ <li><?php echo $view_site; ?></li>
+ <li><?php echo $logout; ?></li>
+</ul> \ No newline at end of file
diff --git a/views/default/admin/plugin_settings.php b/views/default/admin/plugin_settings.php
new file mode 100644
index 000000000..1c6e9e206
--- /dev/null
+++ b/views/default/admin/plugin_settings.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Elgg plugin settings
+ *
+ * @uses ElggPlugin $vars['plugin'] The plugin object to display settings for.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
+ */
+
+$plugin = $vars['plugin'];
+$plugin_id = $plugin->getID();
+
+// required for plugin settings backward compatibility
+$vars['entity'] = $plugin;
+
+$settings = false;
+
+if (elgg_view_exists("settings/$plugin_id/edit") || elgg_view_exists("plugins/$plugin_id/settings")) {
+ $title = $plugin->getManifest()->getName();
+
+ $params = array('id' => "$plugin_id-settings", 'class' => 'elgg-form-settings');
+ $body = elgg_view_form("plugins/settings/save", $params, $vars);
+
+ echo elgg_view_module('info', $title, $body);
+} \ No newline at end of file
diff --git a/views/default/admin/plugins.php b/views/default/admin/plugins.php
new file mode 100644
index 000000000..42f153d0f
--- /dev/null
+++ b/views/default/admin/plugins.php
@@ -0,0 +1,197 @@
+<?php
+/**
+ * Elgg administration plugin screen
+ *
+ * Shows a list of plugins that can be sorted and filtered.
+ *
+ * @package Elgg.Core
+ * @subpackage Admin.Plugins
+ */
+
+elgg_load_js('lightbox');
+elgg_load_css('lightbox');
+
+elgg_generate_plugin_entities();
+$installed_plugins = elgg_get_plugins('any');
+$show_category = get_input('category', 'all');
+$sort = get_input('sort', 'priority');
+
+// Get a list of the all categories
+// and trim down the plugin list if we're not viewing all categories.
+// @todo this could be cached somewhere after have the manifest loaded
+$categories = array();
+
+foreach ($installed_plugins as $id => $plugin) {
+ if (!$plugin->isValid()) {
+ if ($plugin->isActive()) {
+ // force disable and warn
+ elgg_add_admin_notice('invalid_and_deactivated_' . $plugin->getID(),
+ elgg_echo('ElggPlugin:InvalidAndDeactivated', array($plugin->getId())));
+ $plugin->deactivate();
+ }
+ continue;
+ }
+
+ $plugin_categories = $plugin->getManifest()->getCategories();
+
+ // handle plugins that don't declare categories
+ // unset them here because this is the list we foreach
+ switch ($show_category) {
+ case 'all':
+ break;
+ case 'active':
+ if (!$plugin->isActive()) {
+ unset($installed_plugins[$id]);
+ }
+ break;
+ case 'inactive':
+ if ($plugin->isActive()) {
+ unset($installed_plugins[$id]);
+ }
+ break;
+ case 'nonbundled':
+ if (in_array('bundled', $plugin_categories)) {
+ unset($installed_plugins[$id]);
+ }
+ break;
+ default:
+ if (!in_array($show_category, $plugin_categories)) {
+ unset($installed_plugins[$id]);
+ }
+ break;
+ }
+
+ if (isset($plugin_categories)) {
+ foreach ($plugin_categories as $category) {
+ if (!array_key_exists($category, $categories)) {
+ $categories[$category] = ElggPluginManifest::getFriendlyCategory($category);
+ }
+ }
+ }
+}
+
+$guids = array();
+foreach ($installed_plugins as $plugin) {
+ $guids[] = $plugin->getGUID();
+}
+
+// sort plugins
+switch ($sort) {
+ case 'date':
+ $plugin_list = array();
+ foreach ($installed_plugins as $plugin) {
+ $create_date = $plugin->getTimeCreated();
+ while (isset($plugin_list[$create_date])) {
+ $create_date++;
+ }
+ $plugin_list[$create_date] = $plugin;
+ }
+ krsort($plugin_list);
+ break;
+ case 'alpha':
+ $plugin_list = array();
+ foreach ($installed_plugins as $plugin) {
+ $plugin_list[$plugin->getFriendlyName()] = $plugin;
+ }
+ ksort($plugin_list);
+ break;
+ case 'priority':
+ default:
+ $plugin_list = $installed_plugins;
+ break;
+}
+
+
+
+asort($categories);
+
+// we want bundled/nonbundled pulled to be at the top of the list
+unset($categories['bundled']);
+unset($categories['nonbundled']);
+
+$common_categories = array(
+ 'all' => elgg_echo('admin:plugins:category:all'),
+ 'active' => elgg_echo('admin:plugins:category:active'),
+ 'inactive' => elgg_echo('admin:plugins:category:inactive'),
+ 'bundled' => elgg_echo('admin:plugins:category:bundled'),
+ 'nonbundled' => elgg_echo('admin:plugins:category:nonbundled'),
+);
+
+$categories = array_merge($common_categories, $categories);
+// security - only want a defined option
+if (!array_key_exists($show_category, $categories)) {
+ $show_category = reset($categories);
+}
+
+$category_form = elgg_view_form('admin/plugins/filter', array(
+ 'action' => 'admin/plugins',
+ 'method' => 'get',
+ 'disable_security' => true,
+), array(
+ 'category' => $show_category,
+ 'category_options' => $categories,
+ 'sort' => $sort,
+));
+
+
+$sort_options = array(
+ 'priority' => elgg_echo('admin:plugins:sort:priority'),
+ 'alpha' => elgg_echo('admin:plugins:sort:alpha'),
+ 'date' => elgg_echo('admin:plugins:sort:date'),
+);
+// security - only want a defined option
+if (!array_key_exists($sort, $sort_options)) {
+ $sort = reset($sort_options);
+}
+
+$sort_form = elgg_view_form('admin/plugins/sort', array(
+ 'action' => 'admin/plugins',
+ 'method' => 'get',
+ 'disable_security' => true,
+), array(
+ 'sort' => $sort,
+ 'sort_options' => $sort_options,
+ 'category' => $show_category,
+));
+
+$buttons = "<div class=\"clearfix mbm\">";
+$buttons .= elgg_view_form('admin/plugins/change_state', array(
+ 'action' => 'action/admin/plugins/activate_all',
+ 'class' => 'float',
+), array(
+ 'guids' => $guids,
+ 'action' => 'activate',
+));
+$buttons .= elgg_view_form('admin/plugins/change_state', array(
+ 'action' => 'action/admin/plugins/deactivate_all',
+ 'class' => 'float',
+), array(
+ 'guids' => $guids,
+ 'action' => 'deactivate',
+));
+$buttons .= "</div>";
+
+$buttons .= $category_form . $sort_form;
+
+// construct page header
+?>
+<div id="content_header" class="mbm clearfix">
+ <div class="content-header-options"><?php echo $buttons ?></div>
+</div>
+
+<div id="elgg-plugin-list">
+<?php
+
+$options = array(
+ 'limit' => 0,
+ 'full_view' => true,
+ 'list_type_toggle' => false,
+ 'pagination' => false,
+);
+if ($show_category == 'all' && $sort == 'priority') {
+ $options['display_reordering'] = true;
+}
+echo elgg_view_entity_list($plugin_list, $options);
+
+?>
+</div> \ No newline at end of file
diff --git a/views/default/admin/settings/advanced.php b/views/default/admin/settings/advanced.php
new file mode 100644
index 000000000..a262740f2
--- /dev/null
+++ b/views/default/admin/settings/advanced.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Elgg administration site advanced settings
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view_form('admin/site/update_advanced', array('class' => 'elgg-form-settings'));
diff --git a/views/default/admin/settings/basic.php b/views/default/admin/settings/basic.php
new file mode 100644
index 000000000..9334ba81b
--- /dev/null
+++ b/views/default/admin/settings/basic.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Elgg administration site basic settings
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view_form('admin/site/update_basic', array('class' => 'elgg-form-settings'));
diff --git a/views/default/admin/sidebar.php b/views/default/admin/sidebar.php
new file mode 100644
index 000000000..100ce2af8
--- /dev/null
+++ b/views/default/admin/sidebar.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Admin sidebar -- just outputs the page menus
+ */
+
+$content = elgg_view_menu('page', array('sort_by' => 'priority', 'show_section_headers' => true));
+
+echo elgg_view_module('main', '', $content, array('class' => 'elgg-admin-sidebar-menu')); \ No newline at end of file
diff --git a/views/default/admin/statistics/overview.php b/views/default/admin/statistics/overview.php
new file mode 100644
index 000000000..ac5aaac36
--- /dev/null
+++ b/views/default/admin/statistics/overview.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg statistics screen
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view('admin/statistics/extend');
+
+echo elgg_view_module('inline', elgg_echo('admin:statistics:label:basic'), elgg_view('admin/statistics/overview/basic'));
+
+echo elgg_view_module('inline', elgg_echo('admin:statistics:label:numentities'), elgg_view('admin/statistics/overview/numentities'));
diff --git a/views/default/admin/statistics/overview/basic.php b/views/default/admin/statistics/overview/basic.php
new file mode 100644
index 000000000..2c9b3b88e
--- /dev/null
+++ b/views/default/admin/statistics/overview/basic.php
@@ -0,0 +1,19 @@
+<?php
+// Work out number of users
+$users_stats = get_number_users();
+$total_users = get_number_users(true);
+
+// Get version information
+$version = get_version();
+$release = get_version(true);
+?>
+<table class="elgg-table-alt">
+ <tr class="odd">
+ <td><b><?php echo elgg_echo('admin:statistics:label:version'); ?> :</b></td>
+ <td><?php echo elgg_echo('admin:statistics:label:version:release'); ?> - <?php echo $release; ?>, <?php echo elgg_echo('admin:statistics:label:version:version'); ?> - <?php echo $version; ?></td>
+ </tr>
+ <tr class="even">
+ <td><b><?php echo elgg_echo('admin:statistics:label:numusers'); ?> :</b></td>
+ <td><?php echo $users_stats; ?> <?php echo elgg_echo('active'); ?> / <?php echo $total_users; ?> <?php echo elgg_echo('total') ?></td>
+ </tr>
+</table> \ No newline at end of file
diff --git a/views/default/admin/statistics/overview/numentities.php b/views/default/admin/statistics/overview/numentities.php
new file mode 100644
index 000000000..af4ae2773
--- /dev/null
+++ b/views/default/admin/statistics/overview/numentities.php
@@ -0,0 +1,40 @@
+<?php
+// Get entity statistics
+$entity_stats = get_entity_statistics();
+$even_odd = "";
+?>
+<table class="elgg-table-alt">
+<?php
+foreach ($entity_stats as $k => $entry) {
+ arsort($entry);
+ foreach ($entry as $a => $b) {
+
+ //This function controls the alternating class
+ $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even';
+
+ if ($a == "__base__") {
+ $a = elgg_echo("item:{$k}");
+ if (empty($a))
+ $a = $k;
+ } else {
+ if (empty($a)) {
+ $a = elgg_echo("item:{$k}");
+ } else {
+ $a = elgg_echo("item:{$k}:{$a}");
+ }
+
+ if (empty($a)) {
+ $a = "$k $a";
+ }
+ }
+
+ echo <<< END
+ <tr class="{$even_odd}">
+ <td>{$a}:</td>
+ <td>{$b}</td>
+ </tr>
+END;
+ }
+ }
+?>
+</table>
diff --git a/views/default/admin/statistics/server.php b/views/default/admin/statistics/server.php
new file mode 100644
index 000000000..9d21addc1
--- /dev/null
+++ b/views/default/admin/statistics/server.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Server information
+ */
+
+echo elgg_view_module('inline', elgg_echo('admin:server:label:web_server'), elgg_view('admin/statistics/server/web_server'));
+
+echo elgg_view_module('inline', elgg_echo('admin:server:label:php'), elgg_view('admin/statistics/server/php'));
diff --git a/views/default/admin/statistics/server/php.php b/views/default/admin/statistics/server/php.php
new file mode 100644
index 000000000..7c6a51383
--- /dev/null
+++ b/views/default/admin/statistics/server/php.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Server PHP info
+ */
+
+$php_log = ini_get('error_log');
+if (!$php_log) {
+ $php_log = elgg_echo('admin:server:error_log');
+}
+
+$post_max_size = elgg_get_ini_setting_in_bytes('post_max_size');
+$upload_max_filesize = elgg_get_ini_setting_in_bytes('upload_max_filesize');
+
+$post_max_size_warning = '';
+if ($upload_max_filesize > $post_max_size) {
+ // @todo show a link to something like http://nigel.mcnie.name/blog/uploadmaxfilesizepostmaxsize-experimentation ?
+ $post_max_size_warning = elgg_echo('admin:server:warning:post_max_too_small');
+}
+
+?>
+<table class="elgg-table-alt">
+ <tr class="odd">
+ <td><b><?php echo elgg_echo('admin:server:label:php_version'); ?> :</b></td>
+ <td><?php echo phpversion(); ?></td>
+ </tr>
+ <tr class="even">
+ <td><b><?php echo elgg_echo('admin:server:label:php_ini'); ?> :</b></td>
+ <td><?php echo php_ini_loaded_file(); ?></td>
+ </tr>
+ <tr class="odd">
+ <td><b><?php echo elgg_echo('admin:server:label:php_log'); ?> :</b></td>
+ <td><?php echo $php_log; ?></td>
+ </tr>
+ <tr class="even">
+ <td><b><?php echo elgg_echo('admin:server:label:mem_avail'); ?> :</b></td>
+ <td><?php echo number_format(elgg_get_ini_setting_in_bytes('memory_limit')); ?></td>
+ </tr>
+ <tr class="odd">
+ <td><b><?php echo elgg_echo('admin:server:label:mem_used'); ?> :</b></td>
+ <td><?php echo number_format(memory_get_peak_usage()); ?></td>
+ </tr>
+ <tr class="even">
+ <td><b><?php echo elgg_echo('admin:server:label:post_max_size'); ?> :</b></td>
+ <td><?php echo number_format($post_max_size); ?></td>
+ </tr>
+ <tr class="odd">
+ <td><b><?php echo elgg_echo('admin:server:label:upload_max_filesize'); ?> :</b></td>
+ <td><?php echo number_format($upload_max_filesize) . '&nbsp; ' . $post_max_size_warning; ?></td>
+ </tr>
+</table>
diff --git a/views/default/admin/statistics/server/web_server.php b/views/default/admin/statistics/server/web_server.php
new file mode 100644
index 000000000..904a54f4b
--- /dev/null
+++ b/views/default/admin/statistics/server/web_server.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Web server info
+ */
+
+?>
+<table class="elgg-table-alt">
+ <tr class="odd">
+ <td><b><?php echo elgg_echo('admin:server:label:server'); ?> :</b></td>
+ <td><?php echo $_SERVER['SERVER_SOFTWARE']; ?></td>
+ </tr>
+ <tr class="even">
+ <td><b><?php echo elgg_echo('admin:server:label:log_location'); ?> :</b></td>
+ <td><?php echo getenv('APACHE_LOG_DIR'); ?></td>
+ </tr>
+</table>
diff --git a/views/default/admin/users/add.php b/views/default/admin/users/add.php
new file mode 100644
index 000000000..6d22b9c29
--- /dev/null
+++ b/views/default/admin/users/add.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Display an add user form.
+ */
+
+$title = elgg_echo('adduser');
+$body = elgg_view_form('useradd', array(), array('show_admin' => true));
+
+echo elgg_view_module('inline', $title, $body); \ No newline at end of file
diff --git a/views/default/admin/users/admins.php b/views/default/admin/users/admins.php
new file mode 100644
index 000000000..9b175d437
--- /dev/null
+++ b/views/default/admin/users/admins.php
@@ -0,0 +1,12 @@
+<?php
+$admins = elgg_list_entities(array(), 'elgg_get_admins');
+
+?>
+<div class="elgg-module elgg-module-inline">
+ <div class="elgg-head">
+ <h3><?php echo elgg_echo('admin:statistics:label:admins'); ?></h3>
+ </div>
+ <div class="elgg-body">
+ <?php echo $admins; ?>
+ </div>
+</div>
diff --git a/views/default/admin/users/newest.php b/views/default/admin/users/newest.php
new file mode 100644
index 000000000..91a6fa338
--- /dev/null
+++ b/views/default/admin/users/newest.php
@@ -0,0 +1,18 @@
+<?php
+// newest users
+$users = elgg_list_entities(array(
+ 'type' => 'user',
+ 'subtype'=> null,
+ 'full_view' => FALSE
+));
+
+?>
+
+<div class="elgg-module elgg-module-inline">
+ <div class="elgg-head">
+ <h3><?php echo elgg_echo('admin:users:newest'); ?></h3>
+ </div>
+ <div class="elgg-body">
+ <?php echo $users; ?>
+ </div>
+</div>
diff --git a/views/default/admin/users/online.php b/views/default/admin/users/online.php
new file mode 100644
index 000000000..dbda06066
--- /dev/null
+++ b/views/default/admin/users/online.php
@@ -0,0 +1,13 @@
+<?php
+
+$users_online = get_online_users();
+
+?>
+<div class="elgg-module elgg-module-inline">
+ <div class="elgg-head">
+ <h3><?php echo elgg_echo('admin:statistics:label:onlineusers'); ?></h3>
+ </div>
+ <div class="elgg-body">
+ <?php echo $users_online; ?>
+ </div>
+</div>
diff --git a/views/default/annotation/default.php b/views/default/annotation/default.php
new file mode 100644
index 000000000..5d29a53e2
--- /dev/null
+++ b/views/default/annotation/default.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Elgg default annotation view
+ *
+ * @note To add or remove from the annotation menu, register handlers for the menu:annotation hook.
+ *
+ * @uses $vars['annotation']
+ */
+
+$annotation = $vars['annotation'];
+
+$owner = get_entity($annotation->owner_guid);
+if (!$owner) {
+ return true;
+}
+$icon = elgg_view_entity_icon($owner, 'tiny');
+$owner_link = "<a href=\"{$owner->getURL()}\">$owner->name</a>";
+
+$menu = elgg_view_menu('annotation', array(
+ 'annotation' => $annotation,
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz float-alt',
+));
+
+$text = elgg_view("output/longtext", array("value" => $annotation->value));
+
+$friendlytime = elgg_view_friendly_time($annotation->time_created);
+
+$body = <<<HTML
+<div class="mbn">
+ $menu
+ $owner_link
+ <span class="elgg-subtext">
+ $friendlytime
+ </span>
+ $text
+</div>
+HTML;
+
+echo elgg_view_image_block($icon, $body);
diff --git a/views/default/annotation/generic_comment.php b/views/default/annotation/generic_comment.php
new file mode 100644
index 000000000..22a8d9211
--- /dev/null
+++ b/views/default/annotation/generic_comment.php
@@ -0,0 +1,69 @@
+<?php
+/**
+ * Elgg generic comment view
+ *
+ * @uses $vars['annotation'] ElggAnnotation object
+ * @uses $vars['full_view'] Display fill view or brief view
+ */
+
+if (!isset($vars['annotation'])) {
+ return true;
+}
+
+$full_view = elgg_extract('full_view', $vars, true);
+
+$comment = $vars['annotation'];
+
+$entity = get_entity($comment->entity_guid);
+$commenter = get_user($comment->owner_guid);
+if (!$entity || !$commenter) {
+ return true;
+}
+
+$friendlytime = elgg_view_friendly_time($comment->time_created);
+
+$commenter_icon = elgg_view_entity_icon($commenter, 'tiny');
+$commenter_link = "<a href=\"{$commenter->getURL()}\">$commenter->name</a>";
+
+$entity_title = $entity->title ? $entity->title : elgg_echo('untitled');
+$entity_link = "<a href=\"{$entity->getURL()}\">$entity_title</a>";
+
+if ($full_view) {
+ $menu = elgg_view_menu('annotation', array(
+ 'annotation' => $comment,
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz float-alt',
+ ));
+
+ $comment_text = elgg_view("output/longtext", array("value" => $comment->value));
+
+ $body = <<<HTML
+<div class="mbn">
+ $menu
+ $commenter_link
+ <span class="elgg-subtext">
+ $friendlytime
+ </span>
+ $comment_text
+</div>
+HTML;
+
+ echo elgg_view_image_block($commenter_icon, $body);
+
+} else {
+ // brief view
+
+ //@todo need link to actual comment!
+
+ $commented_on = elgg_echo('generic_comment:on', array($commenter_link, $entity_link));
+
+ $excerpt = elgg_get_excerpt($comment->value, 80);
+
+ $body = <<<HTML
+<span class="elgg-subtext">
+ $commented_on ($friendlytime): $excerpt
+</span>
+HTML;
+
+ echo elgg_view_image_block($commenter_icon, $body);
+}
diff --git a/views/default/api/output.php b/views/default/api/output.php
new file mode 100644
index 000000000..a7041c0f4
--- /dev/null
+++ b/views/default/api/output.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Elgg API default output
+ * This outputs the api in a human readable way.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+$result = $vars['result'];
+$export = $result->export();
+
+?>
+<div id="api_result">
+ <table width="100%">
+ <tr><td width="100" valign="top"><b>Status:</b></td> <td>
+ <?php
+ if ($result instanceof SuccessResult)
+ echo "OK";
+ else
+ echo "**** ERROR ({$export->status}) ****";
+ ?>
+ </td></tr>
+
+ <?php if ($export->message!="") { ?>
+ <tr><td width="100" valign="top"><b>Message:</b></td> <td><?php echo $export->message; ?></td></tr>
+ <?php } ?>
+ <?php if ($export->result) { ?>
+ <tr><td width="100" valign="top"><b>Result:</b></td> <td><pre><?php print_r($export->result); ?></pre></td></tr>
+ <?php } ?>
+
+
+ <?php if ($export->pam) { ?>
+ <tr><td width="100" valign="top"><b>PAM:</b></td> <td><pre><?php print_r($export->pam); ?></pre></td></tr>
+ <?php } ?>
+
+ <?php if ($export->runtime_errors) { ?>
+ <tr><td width="100" valign="top"><b>Runtime:</b></td> <td><pre><?php print_r($export->runtime_errors); ?></pre></td></tr>
+ <?php } ?>
+ </table>
+</div> \ No newline at end of file
diff --git a/views/default/core/account/login_box.php b/views/default/core/account/login_box.php
new file mode 100644
index 000000000..f39113653
--- /dev/null
+++ b/views/default/core/account/login_box.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Elgg login box
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['module'] The module name. Default: aside
+ */
+
+$module = elgg_extract('module', $vars, 'aside');
+
+$login_url = elgg_get_site_url();
+if (elgg_get_config('https_login')) {
+ $login_url = str_replace("http:", "https:", $login_url);
+}
+
+$title = elgg_echo('login');
+$body = elgg_view_form('login', array('action' => "{$login_url}action/login"));
+
+echo elgg_view_module($module, $title, $body);
diff --git a/views/default/core/account/login_dropdown.php b/views/default/core/account/login_dropdown.php
new file mode 100644
index 000000000..e90cbf106
--- /dev/null
+++ b/views/default/core/account/login_dropdown.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Elgg drop-down login form
+ */
+
+if (elgg_is_logged_in()) {
+ return true;
+}
+
+$login_url = elgg_get_site_url();
+if (elgg_get_config('https_login')) {
+ $login_url = str_replace("http:", "https:", elgg_get_site_url());
+}
+
+$body = elgg_view_form('login', array('action' => "{$login_url}action/login"), array('returntoreferer' => TRUE));
+?>
+<div id="login-dropdown">
+ <?php
+ echo elgg_view('output/url', array(
+ 'href' => 'login#login-dropdown-box',
+ 'rel' => 'popup',
+ 'class' => 'elgg-button elgg-button-dropdown',
+ 'text' => elgg_echo('login'),
+ ));
+ echo elgg_view_module('dropdown', '', $body, array('id' => 'login-dropdown-box'));
+ ?>
+</div>
diff --git a/views/default/core/avatar/crop.php b/views/default/core/avatar/crop.php
new file mode 100644
index 000000000..1c59842c8
--- /dev/null
+++ b/views/default/core/avatar/crop.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Avatar cropping view
+ *
+ * @uses vars['entity']
+ */
+
+?>
+<div id="avatar-croppingtool" class="mtl ptm">
+ <label><?php echo elgg_echo('avatar:crop:title'); ?></label>
+ <br />
+ <p>
+ <?php echo elgg_echo("avatar:create:instructions"); ?>
+ </p>
+ <?php echo elgg_view_form('avatar/crop', array(), $vars); ?>
+</div>
diff --git a/views/default/core/avatar/upload.php b/views/default/core/avatar/upload.php
new file mode 100644
index 000000000..6f9124192
--- /dev/null
+++ b/views/default/core/avatar/upload.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Avatar upload view
+ *
+ * @uses $vars['entity']
+ */
+
+$user_avatar = elgg_view('output/img', array(
+ 'src' => $vars['entity']->getIconUrl('medium'),
+ 'alt' => elgg_echo('avatar'),
+));
+
+$current_label = elgg_echo('avatar:current');
+
+$remove_button = '';
+if ($vars['entity']->icontime) {
+ $remove_button = elgg_view('output/url', array(
+ 'text' => elgg_echo('remove'),
+ 'title' => elgg_echo('avatar:remove'),
+ 'href' => 'action/avatar/remove?guid=' . elgg_get_page_owner_guid(),
+ 'is_action' => true,
+ 'class' => 'elgg-button elgg-button-cancel mll',
+ ));
+}
+
+$form_params = array('enctype' => 'multipart/form-data');
+$upload_form = elgg_view_form('avatar/upload', $form_params, $vars);
+
+?>
+
+<p class="mtm">
+ <?php echo elgg_echo('avatar:upload:instructions'); ?>
+</p>
+
+<?php
+
+$image = <<<HTML
+<div id="current-user-avatar" class="mrl prl">
+ <label>$current_label</label><br />
+ $user_avatar
+</div>
+$remove_button
+HTML;
+
+$body = <<<HTML
+<div id="avatar-upload">
+ $upload_form
+</div>
+HTML;
+
+echo elgg_view_image_block($image, $upload_form);
diff --git a/views/default/core/friends/collection.php b/views/default/core/friends/collection.php
new file mode 100644
index 000000000..1a330af01
--- /dev/null
+++ b/views/default/core/friends/collection.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * View a friends collection
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['collection'] The individual friends collection
+ */
+
+$coll = $vars['collection'];
+
+if (is_array($vars['collection']->members)) {
+ $count = sizeof($vars['collection']->members);
+} else {
+ $count = 0;
+}
+
+echo "<li><h2>";
+
+//as collections are private, check that the logged in user is the owner
+if ($coll->owner_guid == elgg_get_logged_in_user_guid()) {
+ echo "<div class=\"friends_collections_controls\">";
+ echo elgg_view('output/confirmlink', array(
+ 'href' => 'action/friends/collections/delete?collection=' . $coll->id,
+ 'class' => 'delete_collection',
+ 'text' => elgg_view_icon('delete'),
+ 'encode_text' => false,
+ ));
+ echo "</div>";
+}
+echo $coll->name;
+echo " (<span id=\"friends_membership_count{$vars['friendspicker']}\">{$count}</span>) </h2>";
+
+// individual collection panels
+$friends = $vars['collection']->entities;
+if ($friends) {
+ $content = elgg_view('core/friends/collectiontabs', array(
+ 'owner' => elgg_get_logged_in_user_entity(),
+ 'collection' => $vars['collection'],
+ 'friendspicker' => $vars['friendspicker'],
+ ));
+
+ echo elgg_view('input/friendspicker', array(
+ 'entities' => $friends,
+ 'value' => $vars['collection']->members,
+ 'content' => $content,
+ 'replacement' => '',
+ 'friendspicker' => $vars['friendspicker'],
+ ));
+?>
+<?php //@todo JS 1.8: no ?>
+ <script type="text/javascript">
+ $(function () {
+
+ $('#friends-picker_placeholder<?php echo $vars['friendspicker']; ?>').load(elgg.config.wwwroot + 'pages/friends/collections/pickercallback.php?username=<?php echo elgg_get_logged_in_user_entity()->username; ?>&type=list&collection=<?php echo $vars['collection']->id; ?>');
+
+ });
+ </script>
+ <?php
+}
+
+// close friends-picker div and the accordian list item
+echo "</li>";
diff --git a/views/default/core/friends/collections.php b/views/default/core/friends/collections.php
new file mode 100644
index 000000000..c6ee082c8
--- /dev/null
+++ b/views/default/core/friends/collections.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Elgg friends collections
+ * Lists a user's friends collections
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['collections'] The array of friends collections
+ */
+
+if (is_array($vars['collections']) && sizeof($vars['collections'])) {
+ echo "<ul id=\"friends_collections_accordian\">";
+
+ $friendspicker = 0;
+ foreach ($vars['collections'] as $collection) {
+ $friendspicker++;
+ echo elgg_view('core/friends/collection', array(
+ 'collection' => $collection,
+ 'friendspicker' => $friendspicker,
+ ));
+ }
+
+ echo "</ul>";
+
+} else {
+ echo elgg_echo("friends:nocollections");
+}
+
+?>
+<?php //@todo JS 1.8: no ?>
+<script>
+$(function(){
+ $('#friends_collections_accordian h2').click(function () {
+ $(this.parentNode).children("[class=friends-picker-main-wrapper]").slideToggle("fast");
+ //return false;
+ });
+});
+</script>
diff --git a/views/default/core/friends/collectiontabs.php b/views/default/core/friends/collectiontabs.php
new file mode 100644
index 000000000..bf12e0edb
--- /dev/null
+++ b/views/default/core/friends/collectiontabs.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Elgg friends collections
+ * Lists a user's friends collections
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['collections'] The array of friends collections
+ */
+
+$friendspicker = $vars['friendspicker'];
+
+$collectionid = $vars['collection']->id;
+$ownerid = $vars['owner']->getGUID();
+
+?>
+
+<ul class="elgg-tabs">
+ <li class="elgg-state-selected">
+ <a href="#" class="collectionmembers<?php echo $friendspicker; ?>">
+ <?php echo elgg_echo('friends:collections:members'); ?>
+ </a>
+ </li>
+ <li>
+ <a href="#" class="editmembers<?php echo $friendspicker; ?>">
+ <?php echo elgg_echo('friends:collections:edit'); ?>
+ </a>
+ </li>
+</ul>
+
+<?php //@todo JS 1.8: no ?>
+<script type="text/javascript">
+$(function () {
+
+ $('a.collectionmembers<?php echo $friendspicker; ?>').click(function () {
+ // load collection members pane
+ $('#friends-picker_placeholder<?php echo $friendspicker; ?>').load('<?php echo elgg_get_site_url(); ?>pages/friends/collections/pickercallback.php?username=<?php echo elgg_get_logged_in_user_entity()->username; ?>&type=list&collection=<?php echo $collectionid; ?>&friendspicker=<?php echo $friendspicker; ?>');
+
+ // remove selected state from previous tab
+ $(this).parent().parent().find("li.elgg-state-selected").removeClass("elgg-state-selected");
+ // add selected class to current tab
+ $(this).parent().addClass("elgg-state-selected");
+
+ return false;
+ });
+
+ $('a.editmembers<?php echo $friendspicker; ?>').click(function () {
+ // load friends picker pane
+ $('#friends-picker_placeholder<?php echo $friendspicker; ?>').load('<?php echo elgg_get_site_url(); ?>pages/friends/collections/pickercallback.php?username=<?php echo elgg_get_logged_in_user_entity()->username; ?>&type=picker&collection=<?php echo $collectionid; ?>&friendspicker=<?php echo $friendspicker; ?>');
+
+ // remove selected state from previous tab
+ $(this).parent().parent().find("li.elgg-state-selected").removeClass("elgg-state-selected");
+ // add selected class to current tab
+ $(this).parent().addClass("elgg-state-selected");
+
+ return false;
+ });
+
+
+});
+</script>
diff --git a/views/default/core/friends/tablelist.php b/views/default/core/friends/tablelist.php
new file mode 100644
index 000000000..339b9ab1b
--- /dev/null
+++ b/views/default/core/friends/tablelist.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Elgg friends picker
+ * Lists the friends picker
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['entities'] The array of ElggUser objects
+ */
+
+if (is_array($vars['entities'])) {
+
+?>
+
+<table cellspacing="0" id="friendspicker-members-table">
+ <tr>
+ <?php
+ $column = 0;
+ foreach($vars['entities'] as $entity) {
+ if (!($entity instanceof ElggEntity)) {
+ $entity = get_entity($entity);
+ }
+
+ if ($entity instanceof ElggEntity) {
+ ?>
+ <td style="width:25px;">
+ <div style="width: 25px;" class="mbl">
+ <?php echo elgg_view_entity_icon($entity, 'tiny'); ?>
+ </div>
+ </td>
+ <td style="width: 200px;" class="pas">
+ <?php echo $entity->name; ?>
+ </td>
+ <?php
+ $column++;
+ if ($column == 3) {
+ echo "</tr><tr>";
+ $column = 0;
+ }
+ }
+ }
+
+if ($column < 3 && $column != 0) echo "</tr>";
+ echo "</table>";
+}
+
+if (isset($vars['content'])) {
+ echo $vars['content'];
+} \ No newline at end of file
diff --git a/views/default/core/friends/tablelistcountupdate.php b/views/default/core/friends/tablelistcountupdate.php
new file mode 100644
index 000000000..7a0da1caa
--- /dev/null
+++ b/views/default/core/friends/tablelistcountupdate.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg friends picker count updater
+ * Updates the friends count on a collection
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['count'] The count
+ * @uses $vars['friendspicker'] The friendspicker counter number
+ */
+
+?>
+<?php //@todo JS 1.8: no ?>
+<script language="text/javascript">
+ $("#friends_membership_count<?php echo $vars['friendspicker']; ?>").html("<?php echo $vars['count']; ?>");
+</script> \ No newline at end of file
diff --git a/views/default/core/river/filter.php b/views/default/core/river/filter.php
new file mode 100644
index 000000000..9b7fadaa8
--- /dev/null
+++ b/views/default/core/river/filter.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Content filter for river
+ *
+ * @uses $vars[]
+ */
+
+// create selection array
+$options = array();
+$options['type=all'] = elgg_echo('river:select', array(elgg_echo('all')));
+$registered_entities = elgg_get_config('registered_entities');
+
+if (!empty($registered_entities)) {
+ foreach ($registered_entities as $type => $subtypes) {
+ // subtype will always be an array.
+ if (!count($subtypes)) {
+ $label = elgg_echo('river:select', array(elgg_echo("item:$type")));
+ $options["type=$type"] = $label;
+ } else {
+ foreach ($subtypes as $subtype) {
+ $label = elgg_echo('river:select', array(elgg_echo("item:$type:$subtype")));
+ $options["type=$type&subtype=$subtype"] = $label;
+ }
+ }
+ }
+}
+
+$params = array(
+ 'id' => 'elgg-river-selector',
+ 'options_values' => $options,
+);
+$selector = $vars['selector'];
+if ($selector) {
+ $params['value'] = $selector;
+}
+echo elgg_view('input/dropdown', $params);
+
+elgg_load_js('elgg.ui.river');
diff --git a/views/default/core/settings/account.php b/views/default/core/settings/account.php
new file mode 100644
index 000000000..0c3792ece
--- /dev/null
+++ b/views/default/core/settings/account.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Account settings form wrapper
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view_form('usersettings/save', array('class' => 'elgg-form-alt')); \ No newline at end of file
diff --git a/views/default/core/settings/account/default_access.php b/views/default/core/settings/account/default_access.php
new file mode 100644
index 000000000..690f2714a
--- /dev/null
+++ b/views/default/core/settings/account/default_access.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Provide a way of setting your default access
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+if (elgg_get_config('allow_user_default_access')) {
+ $user = elgg_get_page_owner_entity();
+
+ if ($user) {
+ if (false === ($default_access = $user->getPrivateSetting('elgg_default_access'))) {
+ $default_access = elgg_get_config('default_access');
+ }
+
+ $title = elgg_echo('default_access:settings');
+ $content = elgg_echo('default_access:label') . ': ';
+ $content .= elgg_view('input/access', array(
+ 'name' => 'default_access',
+ 'value' => $default_access,
+ ));
+
+ echo elgg_view_module('info', $title, $content);
+ }
+}
diff --git a/views/default/core/settings/account/email.php b/views/default/core/settings/account/email.php
new file mode 100644
index 000000000..4bcdbb100
--- /dev/null
+++ b/views/default/core/settings/account/email.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Provide a way of setting your email
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$user = elgg_get_page_owner_entity();
+
+if ($user) {
+ $title = elgg_echo('email:settings');
+ $content = elgg_echo('email:address:label') . ': ';
+ $content .= elgg_view('input/email', array(
+ 'name' => 'email',
+ 'value' => $user->email,
+ ));
+ echo elgg_view_module('info', $title, $content);
+}
diff --git a/views/default/core/settings/account/language.php b/views/default/core/settings/account/language.php
new file mode 100644
index 000000000..b36057422
--- /dev/null
+++ b/views/default/core/settings/account/language.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Provide a way of setting your language prefs
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$user = elgg_get_page_owner_entity();
+
+if ($user) {
+ $title = elgg_echo('user:set:language');
+ $content = elgg_echo('user:language:label') . ': ';
+ $content .= elgg_view("input/dropdown", array(
+ 'name' => 'language',
+ 'value' => $user->language,
+ 'options_values' => get_installed_translations()
+ ));
+ echo elgg_view_module('info', $title, $content);
+}
diff --git a/views/default/core/settings/account/name.php b/views/default/core/settings/account/name.php
new file mode 100644
index 000000000..e356146a3
--- /dev/null
+++ b/views/default/core/settings/account/name.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Provide a way of setting your full name.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$user = elgg_get_page_owner_entity();
+if ($user) {
+ $title = elgg_echo('user:name:label');
+ $content = elgg_echo('name') . ': ';
+ $content .= elgg_view('input/text', array(
+ 'name' => 'name',
+ 'value' => $user->name,
+ ));
+ echo elgg_view_module('info', $title, $content);
+
+ // need the user's guid to make sure the correct user gets updated
+ echo elgg_view('input/hidden', array('name' => 'guid', 'value' => $user->guid));
+}
diff --git a/views/default/core/settings/account/notifications.php b/views/default/core/settings/account/notifications.php
new file mode 100644
index 000000000..c212b3886
--- /dev/null
+++ b/views/default/core/settings/account/notifications.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * User settings for notifications.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+global $NOTIFICATION_HANDLERS;
+$notification_settings = get_user_notification_settings(elgg_get_page_owner_guid());
+
+$title = elgg_echo('notifications:usersettings');
+
+$rows = '';
+
+// Loop through options
+foreach ($NOTIFICATION_HANDLERS as $k => $v) {
+
+ if ($notification_settings->$k) {
+ $val = "yes";
+ } else {
+ $val = "no";
+ }
+
+ $radio = elgg_view('input/radio', array(
+ 'name' => "method[$k]",
+ 'value' => $val,
+ 'options' => array(
+ elgg_echo('option:yes') => 'yes',
+ elgg_echo('option:no') => 'no'
+ ),
+ ));
+
+ $cells = '<td class="prm pbl">' . elgg_echo("notification:method:$k") . ': </td>';
+ $cells .= "<td>$radio</td>";
+
+ $rows .= "<tr>$cells</tr>";
+}
+
+
+$content = elgg_echo('notifications:methods');
+$content .= "<table>$rows</table>";
+
+echo elgg_view_module('info', $title, $content);
diff --git a/views/default/core/settings/account/password.php b/views/default/core/settings/account/password.php
new file mode 100644
index 000000000..4857034b2
--- /dev/null
+++ b/views/default/core/settings/account/password.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * Provide a way of setting your password
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+$user = elgg_get_page_owner_entity();
+
+if ($user) {
+ $title = elgg_echo('user:set:password');
+
+ // only make the admin user enter current password for changing his own password.
+ $admin = '';
+ if (!elgg_is_admin_logged_in() || elgg_is_admin_logged_in() && $user->guid == elgg_get_logged_in_user_guid()) {
+ $admin .= elgg_echo('user:current_password:label') . ': ';
+ $admin .= elgg_view('input/password', array('name' => 'current_password'));
+ $admin = "<p>$admin</p>";
+ }
+
+ $password = elgg_echo('user:password:label') . ': ';
+ $password .= elgg_view('input/password', array('name' => 'password'));
+ $password = "<p>$password</p>";
+
+ $password2 = elgg_echo('user:password2:label') . ': ';
+ $password2 .= elgg_view('input/password', array('name' => 'password2'));
+ $password2 = "<p>$password2</p>";
+
+ $content = $admin . $password . $password2;
+
+ echo elgg_view_module('info', $title, $content);
+}
diff --git a/views/default/core/settings/statistics.php b/views/default/core/settings/statistics.php
new file mode 100644
index 000000000..1d7a5b052
--- /dev/null
+++ b/views/default/core/settings/statistics.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * User statitsics
+ *
+ * Blank view that can be extended
+ */
diff --git a/views/default/core/settings/statistics/numentities.php b/views/default/core/settings/statistics/numentities.php
new file mode 100644
index 000000000..3782fd8bc
--- /dev/null
+++ b/views/default/core/settings/statistics/numentities.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Elgg statistics screen
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// Get entity statistics
+$entity_stats = get_entity_statistics(elgg_get_page_owner_guid());
+
+if ($entity_stats) {
+ $rows = '';
+ foreach ($entity_stats as $k => $entry) {
+ foreach ($entry as $a => $b) {
+
+ // This function controls the alternating class
+ $even_odd = ( 'odd' != $even_odd ) ? 'odd' : 'even';
+
+ if ($a == "__base__") {
+ $a = elgg_echo("item:{$k}");
+ if (empty($a)) {
+ $a = $k;
+ }
+ } else {
+ $a = elgg_echo("item:{$k}:{$a}");
+ if (empty($a)) {
+ $a = "$k $a";
+ }
+ }
+ $rows .= <<< END
+ <tr class="{$even_odd}">
+ <td class="column-one"><b>{$a}:</b></td>
+ <td>{$b}</td>
+ </tr>
+END;
+ }
+ }
+
+ $title = elgg_echo('usersettings:statistics:label:numentities');
+ $content = "<table class=\"elgg-table-alt\">$rows</table>";
+
+ echo elgg_view_module('info', $title, $content);
+}
diff --git a/views/default/core/settings/statistics/online.php b/views/default/core/settings/statistics/online.php
new file mode 100644
index 000000000..1385ff60f
--- /dev/null
+++ b/views/default/core/settings/statistics/online.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Statistics about this user.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$user = elgg_get_page_owner_entity();
+
+$label_name = elgg_echo('usersettings:statistics:label:name');
+$label_email = elgg_echo('usersettings:statistics:label:email');
+$label_member_since = elgg_echo('usersettings:statistics:label:membersince');
+$label_last_login = elgg_echo('usersettings:statistics:label:lastlogin');
+
+$time_created = date("r", $user->time_created);
+$last_login = date("r", $user->last_login);
+
+$title = elgg_echo('usersettings:statistics:yourdetails');
+
+$content = <<<__HTML
+<table class="elgg-table-alt">
+ <tr class="odd">
+ <td class="column-one">$label_name</td>
+ <td>$user->name</td>
+ </tr>
+ <tr class="even">
+ <td class="column-one">$label_email</td>
+ <td>$user->email</td>
+ </tr>
+ <tr class="odd">
+ <td class="column-one">$label_member_since</td>
+ <td>$time_created</td>
+ </tr>
+ <tr class="even">
+ <td class="column-one">$label_last_login</td>
+ <td>$last_login</td>
+ </tr>
+</table>
+__HTML;
+
+echo elgg_view_module('info', $title, $content);
diff --git a/views/default/core/settings/tools.php b/views/default/core/settings/tools.php
new file mode 100644
index 000000000..195db1d61
--- /dev/null
+++ b/views/default/core/settings/tools.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Elgg plugin specific user settings.
+ *
+ * @uses array $vars['installed_plugins'] An array of plugins as returned by elgg_get_plugins()
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins.Settings
+ */
+
+// Description of what's going on
+echo elgg_view('output/longtext', array(
+ 'value' => elgg_echo("usersettings:plugins:description"),
+ 'class' => 'user-settings mtn mbm',
+));
+
+// Get the installed plugins
+$installed_plugins = $vars['installed_plugins'];
+$count = count($installed_plugins);
+
+
+// Display all plugins' usersettings forms
+foreach ($installed_plugins as $plugin) {
+ $plugin_id = $plugin->getID();
+ if ($plugin->isActive()) {
+ if (elgg_view_exists("usersettings/$plugin_id/edit")
+ || elgg_view_exists("plugins/$plugin_id/usersettings")) {
+
+ $title = $plugin->getManifest()->getName();
+ $body = elgg_view_form('plugins/usersettings/save', array(), array('entity' => $plugin));
+ echo elgg_view_module('info', $title, $body);
+ }
+ }
+} \ No newline at end of file
diff --git a/views/default/core/walled_garden/login.php b/views/default/core/walled_garden/login.php
new file mode 100644
index 000000000..42b79607d
--- /dev/null
+++ b/views/default/core/walled_garden/login.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Walled garden login
+ */
+
+$title = elgg_get_site_entity()->name;
+$welcome = elgg_echo('walled_garden:welcome');
+$welcome .= ': <br/>' . $title;
+
+$menu = elgg_view_menu('walled_garden', array(
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-general elgg-menu-hz',
+));
+
+$login_box = elgg_view('core/account/login_box', array('module' => 'walledgarden-login'));
+
+echo <<<HTML
+<div class="elgg-col elgg-col-1of2">
+ <div class="elgg-inner">
+ <h1 class="elgg-heading-walledgarden">
+ $welcome
+ </h1>
+ $menu
+ </div>
+</div>
+<div class="elgg-col elgg-col-1of2">
+ <div class="elgg-inner">
+ $login_box
+ </div>
+</div>
+HTML;
diff --git a/views/default/core/walled_garden/lost_password.php b/views/default/core/walled_garden/lost_password.php
new file mode 100644
index 000000000..82f8caf50
--- /dev/null
+++ b/views/default/core/walled_garden/lost_password.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Walled garden lost password
+ */
+
+$title = elgg_echo('user:password:lost');
+$body = elgg_view_form('user/requestnewpassword');
+echo <<<HTML
+<div class="elgg-inner">
+ <h3>$title</h3>
+ $body
+</div>
+HTML;
diff --git a/views/default/core/walled_garden/register.php b/views/default/core/walled_garden/register.php
new file mode 100644
index 000000000..1ce2f8716
--- /dev/null
+++ b/views/default/core/walled_garden/register.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Walled garden registration
+ */
+
+$title = elgg_echo('register');
+$body = elgg_view_form('register', array(), array(
+ 'friend_guid' => (int) get_input('friend_guid', 0),
+ 'invitecode' => get_input('invitecode'),
+));
+
+echo <<<__HTML
+<div class="elgg-inner">
+ <h2>$title</h2>
+ $body
+</div>
+__HTML;
diff --git a/views/default/css.php b/views/default/css.php
new file mode 100644
index 000000000..e67c79c36
--- /dev/null
+++ b/views/default/css.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ *
+ * This is a deprecated CSS view used in Elgg 1.0-1.7.
+ * Please use the view 'css/elgg' now.
+ *
+ */
diff --git a/views/default/css/admin.php b/views/default/css/admin.php
new file mode 100644
index 000000000..059e51dd6
--- /dev/null
+++ b/views/default/css/admin.php
@@ -0,0 +1,1652 @@
+<?php
+/**
+ * Elgg Admin CSS
+ *
+ * This is a distinct theme from the theme of the site. There are dependencies
+ * on the HTML created by the views in Elgg core.
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+
+?>
+
+/* ***************************************
+ RESET CSS
+*************************************** */
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+}
+<?php // force vertical scroll bar ?>
+html, body {
+ height: 100%;
+ margin-bottom: 1px;
+}
+img {
+ border-width: 0;
+ border-color: transparent;
+}
+ol, ul {
+ list-style: none;
+}
+em, i {
+ font-style: italic;
+}
+ins {
+ text-decoration: none;
+}
+del {
+ text-decoration:line-through;
+}
+strong, b {
+ font-weight: bold;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+caption, th, td {
+ text-align: left;
+ font-weight: normal;
+ vertical-align: top;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: "";
+}
+blockquote, q {
+ quotes: "" "";
+}
+
+/* ***************************************
+ BASICS
+*************************************** */
+body {
+ background-color: #eee;
+ font-size: 80%;
+ line-height: 1.4em;
+ font-family: "Lucida Grande",Arial,Tahoma,Verdana,sans-serif;
+}
+h1, h2, h3, h4, h5, h6 {
+ font-weight: bold;
+ line-height: auto;
+ color: #666;
+}
+h1 { font-size: 1.8em; }
+h2 { font-size: 1.5em; line-height: 1.1em; }
+h3 { font-size: 1.2em; }
+h4 { font-size: 1.0em; }
+h5 { font-size: 0.9em; }
+h6 { font-size: 0.8em; }
+
+a {
+ color: #333;
+ text-decoration: none;
+}
+a:hover {
+ color: black;
+ text-decoration: underline;
+}
+pre, code {
+ background-color: #EEE;
+ border: 1px solid #DDD;
+ color: #444;
+ font-family: Monaco, "Courier New", Courier, monospace;
+ font-size: 13px;
+ overflow: auto;
+ margin: 15px 0;
+ padding: 5px;
+}
+blockquote {
+ background: #EBF5FF;
+}
+p {
+ margin-bottom: 15px;
+}
+
+.clearfloat {
+ clear: both;
+}
+
+/* Clearfix! */
+.clearfix:after,
+.elgg-grid:after,
+.elgg-layout:after,
+.elgg-inner:after,
+.elgg-page-header:after,
+.elgg-page-footer:after,
+.elgg-head:after,
+.elgg-foot:after,
+.elgg-col:after,
+.elgg-image-block:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+.elgg-body {
+ width: auto;
+ word-wrap: break-word;
+ overflow: hidden;
+}
+.elgg-body:after {
+ display: block;
+ visibility: hidden;
+ height: 0 !important;
+ line-height: 0;
+ overflow: hidden;
+ font-size: xx-large;
+ content: " x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x ";
+}
+
+/* ***************************************
+ PAGE WRAPPER
+*************************************** */
+.elgg-page > .elgg-inner {
+ margin: 0 auto;
+ padding: 20px 40px 0;
+ min-width: 800px;
+ max-width: 1600px;
+}
+
+/* ***************************************
+ HEADER
+*************************************** */
+.elgg-page-header {
+ background-color: #111;
+ border: 1px solid #999;
+ padding: 20px 20px;
+}
+.elgg-heading-site {
+ font-size: 1.8em;
+ float: left;
+}
+.elgg-heading-site a {
+ color: #ffffff;
+ text-decoration: none;
+}
+.elgg-heading-site a:hover {
+ color: white;
+ text-decoration: none;
+}
+.elgg-menu-user {
+ float: right;
+ margin-top: 5px;
+}
+.elgg-menu-user, .elgg-menu-user a {
+ color: #999999;
+}
+.elgg-menu-user a {
+ text-decoration: underline;
+}
+.elgg-menu-user a:hover {
+ color: white;
+}
+.elgg-menu-user li {
+ display: inline;
+}
+.elgg-menu-user li:after {
+ content: "|";
+ display: inline-block;
+ font-weight: normal;
+ margin-left: 8px;
+ margin-right: 4px;
+}
+.elgg-menu-user li:last-child:after {
+ content: "";
+}
+
+/* ***************************************
+ MESSAGES
+*************************************** */
+.elgg-page-messages {
+ padding: 20px 0 0;
+ width: 500px;
+ margin-bottom: -10px;
+}
+.elgg-system-messages p {
+ margin: 0;
+}
+.elgg-message {
+ padding: 10px;
+ margin-bottom: 10px;
+ border: 2px solid #ddd;
+ cursor: pointer;
+}
+.elgg-message.elgg-state-error {
+ background: #fbe3e4;
+ color: #8a1f11;
+ border-color: #fbc2c4;
+ font-weight: bold;
+}
+.elgg-message.elgg-state-success {
+ background: #e6efc2;
+ color: #264409;
+ border-color: #c6d880;
+}
+
+.elgg-admin-notices {
+ padding-bottom: 15px;
+}
+.elgg-admin-notices p {
+ background-color: #BDE5F8;
+ color: black;
+ border: 1px solid blue;
+ font-weight: bold;
+ padding: 3px 0px 3px 10px;
+
+ -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45);
+ -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45);
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45);
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.elgg-admin-notices a.elgg-admin-notice {
+ float: right;
+ text-decoration: none;
+}
+
+.elgg-admin-notices a {
+ text-decoration: underline;
+}
+
+/* ***************************************
+ BODY
+*************************************** */
+.elgg-page-body {
+ padding: 20px 0;
+}
+.elgg-main {
+ background-color: #fff;
+ border: 1px solid #ccc;
+ padding: 20px;
+ position: relative;
+ min-height: 400px;
+}
+.elgg-sidebar {
+ width: 210px;
+ float: right;
+ margin-left: 30px;
+}
+.elgg-main > .elgg-head {
+ margin-bottom: 10px;
+}
+.elgg-main h2 {
+ color: #333333;
+}
+
+/* ***************************************
+ FOOTER
+*************************************** */
+.elgg-page-footer {
+ background-color: #111;
+ border: 1px solid #999;
+ padding: 10px 20px;
+ margin-bottom: 10px;
+}
+.elgg-page-footer a {
+ color: #ddd;
+ font-weight: bold;
+ text-decoration: none;
+}
+.elgg-page-footer a:hover {
+ text-decoration: underline;
+}
+
+/* ***************************************
+ MODULES
+*************************************** */
+.elgg-module {
+ overflow: hidden;
+}
+.elgg-module-main {
+ background-color: #fff;
+ border: 1px solid #ccc;
+ padding: 10px;
+}
+.elgg-module-main > .elgg-head {
+ margin-bottom: 5px;
+}
+.elgg-module-info > .elgg-head {
+ margin-bottom: 10px;
+}
+.elgg-module-inline {
+ margin: 20px 0;
+}
+.elgg-module-inline > .elgg-head {
+ background-color: #999;
+ color: white;
+ padding: 5px;
+ margin-bottom: 10px;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.elgg-module-inline > .elgg-head h3 {
+ color: white;
+}
+
+/* ***************************************
+ TABLE
+*************************************** */
+.elgg-table {
+ width: 100%;
+ border-top: 1px solid #ccc;
+}
+.elgg-table td, .elgg-table th {
+ background: white;
+ border: 1px solid #ccc;
+ padding: 4px 8px;
+ vertical-align: middle;
+}
+.elgg-table th {
+ background-color: #ddd;
+}
+.elgg-table .alt td {
+ background: #eee;
+}
+.elgg-table input[type=checkbox] {
+ margin-top: 3px;
+}
+
+.elgg-table-alt {
+ width: 100%;
+ border-top: 1px solid #ccc;
+}
+.elgg-table-alt th {
+ background-color: #eee;
+ font-weight: bold;
+}
+.elgg-table-alt td, th {
+ padding: 2px 4px;
+ border-bottom: 1px solid #ccc;
+}
+.elgg-table-alt td:first-child {
+ width: 200px;
+}
+.elgg-table-alt tr:hover {
+ background: #E4E4E4;
+}
+
+/* ***************************************
+ LISTS AND IMAGE BLOCK
+*************************************** */
+.elgg-image-block {
+ padding: 3px 0;
+}
+.elgg-image-block .elgg-image {
+ float: left;
+ margin-right: 5px;
+}
+.elgg-image-block .elgg-image-alt {
+ float: right;
+ margin-left: 5px;
+}
+.elgg-item {
+ margin: 3px;
+}
+.elgg-list-simple li {
+ margin-bottom: 5px;
+}
+.elgg-list-distinct {
+ border-top: 1px dotted #CCCCCC;
+ margin: 5px 0;
+ clear: both;
+}
+.elgg-list-distinct > li {
+ border-bottom: 1px dotted #CCCCCC;
+}
+
+/* ***************************************
+ FORMS AND INPUT
+*************************************** */
+label {
+ font-weight: bold;
+ color: #333333;
+ font-size: 110%;
+}
+fieldset > div {
+ margin-bottom: 15px;
+}
+fieldset > div:last-child {
+ margin-bottom: 0;
+}
+input {
+ font: 120% Arial, Helvetica, sans-serif;
+ padding: 5px;
+ border: 1px solid #ccc;
+ color: #666;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ margin: 0;
+}
+
+/* default elgg core input field classes */
+.elgg-input-text,
+.elgg-input-tags,
+.elgg-input-url,
+.elgg-input-plaintext {
+ width: 98%;
+}
+textarea {
+ height: 100px;
+}
+.elgg-input-thin {
+ width: 400px;
+}
+.elgg-input-natural {
+ width: auto;
+}
+
+.elgg-button {
+ font-size: 14px;
+ font-weight: bold;
+ text-decoration: none;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+ width: auto;
+ padding: 2px 4px;
+ cursor: pointer;
+}
+a.elgg-button {
+ padding: 3px 6px;
+}
+
+.elgg-button + .elgg-button {
+ margin-left: 5px;
+}
+
+.elgg-button-submit,
+.elgg-button-action {
+ color: white;
+ border: 1px solid #333;
+ background-color: #333;
+ text-shadow: 1px 1px 0px black;
+}
+.elgg-button-submit:hover,
+.elgg-button-action:hover {
+ color: white;
+ background-color: #000;
+ text-decoration: none;
+}
+.elgg-button-submit.elgg-state-disabled,
+.elgg-button-action.elgg-state-disabled {
+ color: #999;
+ cursor: default;
+}
+
+.elgg-button-cancel {
+ color: #333;
+ background-color: #999;
+ border: 1px solid #999;
+}
+.elgg-button-cancel:hover {
+ color: #222;
+ background-color: #666;
+ text-decoration: none;
+}
+
+.elgg-form-useradd input[type=text],
+.elgg-form-useradd input[type=password] {
+ width: 300px;
+}
+
+.elgg-form-settings {
+ max-width: 800px;
+}
+
+/* **************************************
+ DATE PICKER
+*************************************** */
+.ui-datepicker {
+ margin-top: 3px;
+ padding: 3px 3px 0;
+ border: 1px solid #ccc;
+ background-color: white;
+}
+.ui-datepicker-header {
+ padding: 2px 0;
+ border: 1px solid #ccc;
+ background-color: #eee;
+ border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
+.ui-datepicker-prev, .ui-datepicker-next {
+ position: absolute;
+ top: 9px;
+ cursor: pointer;
+}
+.ui-datepicker-prev {
+ left: 6px;
+}
+.ui-datepicker-next {
+ right: 6px;
+}
+.ui-datepicker-title {
+ line-height: 1.8em;
+ margin: 0 30px;
+ text-align: center;
+ font-weight: bold;
+}
+.ui-datepicker-calendar {
+ margin-bottom: 2px;
+}
+.ui-datepicker th {
+ border: none;
+ font-weight: bold;
+ padding: 5px 6px;
+ text-align: center;
+}
+.ui-datepicker td {
+ padding: 1px;
+}
+.ui-datepicker td span, .ui-datepicker td a {
+ display: block;
+ padding: 2px;
+ line-height: 1.2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker-calendar .ui-state-default {
+ border: 1px solid #ccc;
+ color: #555;
+ background: #fafafa;
+}
+.ui-datepicker-calendar .ui-state-hover {
+ border: 1px solid #aaa;
+ color: #333;
+ background: #ccc;
+}
+.ui-datepicker-calendar .ui-state-active,
+.ui-datepicker-calendar .ui-state-active.ui-state-hover {
+ font-weight: bold;
+ border: 1px solid #999;
+ color: #333;
+ background: #ddd;
+}
+
+/* ***************************************
+ AUTOCOMPLETE
+*************************************** */
+<?php //autocomplete will expand to fullscreen without max-width ?>
+.ui-autocomplete {
+ position: absolute;
+ cursor: default;
+}
+.elgg-autocomplete-item .elgg-body {
+ max-width: 600px;
+}
+.ui-autocomplete {
+ background-color: white;
+ border: 1px solid #ccc;
+ overflow: hidden;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.ui-autocomplete .ui-menu-item {
+ padding: 0px 4px;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.ui-autocomplete .ui-menu-item:hover {
+ background-color: #eee;
+}
+.ui-autocomplete a:hover {
+ text-decoration: none;
+ color: #4690D6;
+}
+
+/* ***************************************
+ USER PICKER
+*************************************** */
+.elgg-user-picker-list li:first-child {
+ border-top: 1px dotted #ccc;
+ margin-top: 5px;
+}
+.elgg-user-picker-list > li {
+ border-bottom: 1px dotted #ccc;
+}
+
+/* ***************************************
+ FRIENDS PICKER
+*************************************** */
+.friends-picker-main-wrapper {
+ margin-bottom: 15px;
+}
+.friends-picker-container h3 {
+ font-size:4em !important;
+ text-align: left;
+ margin:10px 0 20px !important;
+ color:#999 !important;
+ background: none !important;
+ padding:0 !important;
+}
+.friends-picker .friends-picker-container .panel ul {
+ text-align: left;
+ margin: 0;
+ padding:0;
+}
+.friends-picker-wrapper {
+ margin: 0;
+ padding:0;
+ position: relative;
+ width: 730px;
+}
+.friends-picker {
+ position: relative;
+ overflow: hidden;
+ margin: 0;
+ padding:0;
+ width: 730px;
+ height: auto;
+ background-color: #dedede;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+}
+.friendspicker-savebuttons {
+ background: white;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ margin:0 10px 10px;
+}
+.friends-picker .friends-picker-container { /* long container used to house end-to-end panels. Width is calculated in JS */
+ position: relative;
+ left: 0;
+ top: 0;
+ width: 100%;
+ list-style-type: none;
+}
+.friends-picker .friends-picker-container .panel {
+ float:left;
+ height: 100%;
+ position: relative;
+ width: 730px;
+ margin: 0;
+ padding:0;
+}
+.friends-picker .friends-picker-container .panel .wrapper {
+ margin: 0;
+ padding:4px 10px 10px 10px;
+ min-height: 230px;
+}
+.friends-picker-navigation {
+ margin: 0 0 10px;
+ padding:0 0 10px;
+ border-bottom:1px solid #ccc;
+}
+.friends-picker-navigation ul {
+ list-style: none;
+ padding-left: 0;
+}
+.friends-picker-navigation ul li {
+ float: left;
+ margin:0;
+ background:white;
+}
+.friends-picker-navigation a {
+ font-weight: bold;
+ text-align: center;
+ background: white;
+ color: #999;
+ text-decoration: none;
+ display: block;
+ padding: 0;
+ width:20px;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.tabHasContent {
+ background: white;
+ color:#333 !important;
+}
+.friends-picker-navigation li a:hover {
+ background: #333;
+ color:white !important;
+}
+.friends-picker-navigation li a.current {
+ background: #4690D6;
+ color:white !important;
+}
+.friends-picker-navigation-l, .friends-picker-navigation-r {
+ position: absolute;
+ top: 46px;
+ text-indent: -9000em;
+}
+.friends-picker-navigation-l a, .friends-picker-navigation-r a {
+ display: block;
+ height: 40px;
+ width: 40px;
+}
+.friends-picker-navigation-l {
+ right: 48px;
+ z-index:1;
+}
+.friends-picker-navigation-r {
+ right: 0;
+ z-index:1;
+}
+.friends-picker-navigation-l {
+ background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat left top;
+}
+.friends-picker-navigation-r {
+ background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat -60px top;
+}
+.friends-picker-navigation-l:hover {
+ background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat left -44px;
+}
+.friends-picker-navigation-r:hover {
+ background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat -60px -44px;
+}
+.friendspicker-savebuttons .elgg-button-submit,
+.friendspicker-savebuttons .elgg-button-cancel {
+ margin:5px 20px 5px 5px;
+}
+.friendspicker-members-table {
+ background: #dedede;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ margin:10px 0 0;
+ padding:10px 10px 0;
+}
+
+/* ***************************************
+ PAGINATION
+*************************************** */
+.elgg-pagination {
+ margin: 10px 0;
+ display: block;
+ text-align: center;
+}
+.elgg-pagination li {
+ display: inline;
+ margin: 0 6px 0 0;
+ text-align: center;
+}
+.elgg-pagination a, .elgg-pagination span {
+ padding: 2px 6px;
+ color: #333;
+ border: 1px solid #333;
+ font-size: 12px;
+ text-decoration: none;
+}
+.elgg-pagination a:hover {
+ background: #333;
+ color: white;
+ text-decoration: none;
+}
+.elgg-pagination .elgg-state-disabled span {
+ color: #CCC;
+ border-color: #CCC;
+}
+.elgg-pagination .elgg-state-selected span {
+ color: #000;
+ border-color: #ccc;
+}
+
+/* ***************************************
+ TABS
+*************************************** */
+.elgg-tabs {
+ margin-bottom: 5px;
+ border-bottom: 1px solid #ccc;
+ display: table;
+ width: 100%;
+}
+.elgg-tabs li {
+ float: left;
+ border: 1px solid #ccc;
+ border-bottom-width: 0;
+ background: #eee;
+ margin: 0 0 0 10px;
+}
+.elgg-tabs a {
+ text-decoration: none;
+ display: block;
+ padding: 3px 10px 0 10px;
+ text-align: center;
+ height: 21px;
+ color: #999;
+}
+.elgg-tabs a:hover {
+ background: #dedede;
+ color:#333;
+}
+.elgg-tabs .elgg-state-selected {
+ border-color: #ccc;
+ background: white;
+}
+.elgg-tabs .elgg-state-selected a {
+ position: relative;
+ top: 2px;
+ background: white;
+}
+
+/* ***************************************
+ SIDEBAR MENU
+*************************************** */
+.elgg-admin-sidebar-menu a {
+ border: 1px solid red;
+ display: block;
+ padding: 5px;
+ color: #333;
+ cursor: pointer;
+ text-decoration: none;
+ margin-bottom: 2px;
+ border: 1px solid #CCC;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.elgg-admin-sidebar-menu a:hover {
+ text-decoration: none;
+ background: black;
+ color: white;
+ border: 1px solid black;
+}
+.elgg-admin-sidebar-menu li.elgg-state-selected > a {
+ background-color: #BBB;
+}
+.elgg-admin-sidebar-menu .elgg-menu-closed:before {
+ content: "\25B8";
+ padding-right: 4px;
+}
+.elgg-admin-sidebar-menu .elgg-menu-opened:before {
+ content: "\25BE";
+ padding-right: 4px;
+}
+.elgg-admin-sidebar-menu .elgg-child-menu {
+ display: none;
+ padding-left: 30px;
+}
+.elgg-admin-sidebar-menu li.elgg-state-selected > ul {
+ display: block;
+}
+.elgg-admin-sidebar-menu h2 {
+ padding-bottom: 5px;
+}
+.elgg-admin-sidebar-menu ul.elgg-menu-page {
+ padding-bottom: 15px;
+}
+
+/* ***************************************
+ TITLE MENU
+*************************************** */
+.elgg-menu-title {
+ float: right;
+}
+.elgg-menu-title > li {
+ display: inline-block;
+ margin-left: 4px;
+}
+
+/* ***************************************
+ FOOTER MENU
+*************************************** */
+.elgg-menu-footer {
+ color: gray;
+}
+.elgg-menu-footer li {
+ float: left;
+}
+.elgg-menu-footer li:after {
+ content: "\007C";
+ display: inline-block;
+ padding: 0 4px 0 4px;
+ font-weight: normal;
+}
+.elgg-menu-footer li:last-child:after {
+ content: "";
+}
+
+/* ***************************************
+ GENERAL MENU
+*************************************** */
+.elgg-menu-general > li,
+.elgg-menu-general > li > a {
+ display: inline-block;
+ color: #999;
+}
+
+.elgg-menu-general > li:after {
+ content: "\007C";
+ padding: 0 4px;
+}
+
+/* ***************************************
+ HOVER MENU
+*************************************** */
+.elgg-menu-hover {
+ display: none;
+ position: absolute;
+ z-index: 10000;
+
+ width: 165px;
+ border: solid 1px #E5E5E5;
+ border-color: #E5E5E5 #999 #999 #E5E5E5;
+ background-color: #FFF;
+
+ -webkit-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50);
+ -moz-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50);
+ box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50);
+}
+.elgg-menu-hover > li {
+ border-bottom: 1px solid #ddd;
+}
+.elgg-menu-hover > li:last-child {
+ border-bottom: none;
+}
+.elgg-menu-hover .elgg-heading-basic {
+ display: block;
+}
+.elgg-menu-hover a {
+ display: block;
+ padding: 2px 8px;
+ font-size: 92%;
+}
+.elgg-menu-hover a:hover {
+ background: #ccc;
+ text-decoration: none;
+}
+.elgg-menu-hover-admin a {
+ color: red;
+}
+.elgg-menu-hover-admin a:hover {
+ color: white;
+ background-color: red;
+}
+
+/* ***************************************
+ ENTITY MENU
+*************************************** */
+<?php // height depends on line height/font size ?>
+.elgg-menu-entity, elgg-menu-annotation {
+ float: right;
+ margin-left: 15px;
+ font-size: 90%;
+ color: #666;
+ line-height: 16px;
+ height: 16px;
+}
+.elgg-menu-entity > li, .elgg-menu-annotation > li {
+ margin-left: 15px;
+}
+.elgg-menu-entity > li > a, .elgg-menu-annotation > li > a {
+ color: #aaa;
+}
+<?php // need to override .elgg-menu-hz ?>
+.elgg-menu-entity > li > a, .elgg-menu-annotation > li > a {
+ display: block;
+}
+.elgg-menu-entity > li > span, .elgg-menu-annotation > li > span {
+ vertical-align: baseline;
+}
+
+/* ***************************************
+ WIDGET MENU
+*************************************** */
+.elgg-menu-widget > li {
+ position: absolute;
+ top: 4px;
+ display: inline-block;
+ width: 18px;
+ height: 18px;
+ padding: 2px 2px 0 0;
+}
+.elgg-menu-widget > .elgg-menu-item-collapse {
+ left: 5px;
+}
+.elgg-menu-widget > .elgg-menu-item-delete {
+ right: 5px;
+}
+.elgg-menu-widget > .elgg-menu-item-settings {
+ right: 25px;
+}
+
+/* ***************************************
+ MORE MENUS
+*************************************** */
+/* Horizontal menus w/ separator support */
+.elgg-menu-hz > li,
+.elgg-menu-hz > li:after,
+.elgg-menu-hz > li > a {
+ display: inline-block;
+ vertical-align: middle;
+}
+/* Allow inline image blocks in horizontal menus */
+.elgg-menu-hz .elgg-body:after {
+ content: '.';
+}
+.elgg-menu > li:last-child::after {
+ display: none;
+}
+.elgg-menu-admin-footer a {
+ color: #eee;
+}
+.elgg-menu-admin-footer > li {
+ padding-right: 25px;
+}
+.elgg-menu-longtext {
+ float: right;
+}
+.elgg-menu-metadata {
+ list-style-type: none;
+ float: right;
+ margin-left: 15px;
+ font-size: 90%;
+}
+.elgg-menu-metadata > li {
+ float: left;
+ margin-left: 15px;
+}
+.elgg-menu-metadata, .elgg-menu-metadata a {
+ color: #aaa;
+}
+
+/* ***************************************
+ WIDGETS
+*************************************** */
+.elgg-widgets {
+ float: right;
+ min-height: 30px;
+}
+.elgg-widget-add-control {
+ text-align: right;
+ margin: 5px 5px 15px;
+}
+.elgg-widgets-add-panel {
+ padding: 10px;
+ margin: 0 5px 15px;
+ background: #eee;
+ border: 1px solid #ccc;
+}
+.elgg-widgets-add-panel ul {
+ padding: 0;
+ margin: 0;
+}
+.elgg-widgets-add-panel li {
+ float: left;
+ margin: 2px 10px;
+ list-style: none;
+ width: 200px;
+ padding: 4px;
+ background-color: #eee;
+ border: 1px solid #ccc;
+ font-weight: bold;
+}
+.elgg-widgets-add-panel li a {
+ display: block;
+}
+.elgg-widget-single.elgg-state-available {
+ color: #333;
+ cursor: pointer;
+}
+.elgg-widget-single.elgg-state-available:hover {
+ border-color: #aaa;
+}
+.elgg-widget-single.elgg-state-unavailable {
+ color: #888;
+}
+
+.elgg-module-widget {
+ background-color: #dedede;
+ padding: 1px;
+ margin: 0 5px 15px;
+ position: relative;
+}
+.elgg-module-widget:hover {
+ background-color: #ccc;
+}
+.elgg-module-widget > .elgg-head {
+ background-color: #f5f5f5;
+ height: 26px;
+ overflow: hidden;
+}
+.elgg-module-widget.elgg-state-draggable .elgg-widget-handle {
+ cursor: move;
+}
+.elgg-module-widget > .elgg-head h3 {
+ float: left;
+ padding: 4px 45px 0 20px;
+ color: #333;
+}
+
+.elgg-widget-collapse-button {
+ color: #c5c5c5;
+ text-decoration: none;
+}
+a.elgg-widget-collapse-button:hover,
+a.elgg-widget-collapsed:hover {
+ color: #9d9d9d;
+ text-decoration: none;
+}
+a.elgg-widget-collapse-button:before {
+ content: "\25BC";
+}
+a.elgg-widget-collapsed:before {
+ content: "\25BA";
+}
+.elgg-module-widget > .elgg-body {
+ border-top: 1px solid #dedede;
+ background-color: white;
+ width: 100%;
+ overflow: hidden;
+}
+.elgg-widget-edit {
+ display: none;
+ width: 96%;
+ padding: 2%;
+ border-bottom: 1px solid #dedede;
+}
+.elgg-widget-content {
+ padding: 10px;
+}
+.elgg-widget-placeholder {
+ border: 2px dashed #dedede;
+ margin-bottom: 15px;
+}
+
+/* ***************************************
+ GRID
+*************************************** */
+.elgg-grid {}
+.elgg-col {
+ float: left;
+}
+.elgg-col-1of1 {
+ float: none;
+}
+.elgg-col-1of2 {
+ width: 50%;
+}
+.elgg-col-1of3 {
+ width: 33.33%;
+}
+.elgg-col-2of3 {
+ width: 66.66%;
+}
+.elgg-col-1of4 {
+ width: 25%;
+}
+.elgg-col-3of4 {
+ width: 75%;
+}
+.elgg-col-1of5 {
+ width: 20%;
+}
+.elgg-col-2of5 {
+ width: 40%;
+}
+.elgg-col-3of5 {
+ width: 60%;
+}
+.elgg-col-4of5 {
+ width: 80%;
+}
+.elgg-col-1of6 {
+ width: 16.66%;
+}
+.elgg-col-5of6 {
+ width: 83.33%;
+}
+
+/* ***************************************
+ ICONS
+*************************************** */
+.elgg-icon {
+ background: transparent url(<?php echo elgg_get_site_url(); ?>_graphics/admin_sprites.png) no-repeat left;
+ width: 16px;
+ height: 16px;
+ display: inline-block;
+ margin: 0 2px;
+ vertical-align: text-bottom;
+}
+.elgg-module .elgg-head .elgg-icon {
+ vertical-align: baseline;
+}
+.elgg-icon-delete:hover,
+.elgg-icon-delete-alt:hover {
+ background-position: 0 -0px;
+}
+.elgg-icon-delete,
+.elgg-icon-delete-alt {
+ background-position: 0 -18px;
+}
+.elgg-icon-drag-arrow:hover {
+ background-position: 0 -36px;
+}
+.elgg-icon-drag-arrow {
+ background-position: 0 -54px;
+}
+.elgg-icon-hover-menu:hover {
+ background-position: 0 -72px;
+}
+.elgg-icon-hover-menu {
+ background-position: 0 -90px;
+}
+.elgg-icon-settings-alt:hover {
+ background-position: 0 -108px;
+}
+.elgg-icon-settings-alt {
+ background-position: 0 -126px;
+}
+
+.elgg-ajax-loader {
+ background: white url(<?php echo elgg_get_site_url(); ?>_graphics/ajax_loader_bw.gif) no-repeat center center;
+ min-height: 33px;
+ min-width: 33px;
+}
+
+/* ***************************************
+ AVATAR ICONS
+*************************************** */
+.elgg-avatar {
+ position: relative;
+ display: inline-block;
+}
+.elgg-avatar > a > img {
+ display: block;
+}
+.elgg-avatar-tiny > a > img {
+ width: 25px;
+ height: 25px;
+
+ /* remove the border-radius if you don't want rounded avatars in supported browsers */
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+
+ -moz-background-clip: border;
+ background-clip: border;
+
+ -webkit-background-size: 25px;
+ -khtml-background-size: 25px;
+ -moz-background-size: 25px;
+ -o-background-size: 25px;
+ background-size: 25px;
+}
+.elgg-avatar-small > a > img {
+ width: 40px;
+ height: 40px;
+
+ /* remove the border-radius if you don't want rounded avatars in supported browsers */
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+ -moz-background-clip: border;
+ background-clip: border;
+
+ -webkit-background-size: 40px;
+ -khtml-background-size: 40px;
+ -moz-background-size: 40px;
+ -o-background-size: 40px;
+ background-size: 40px;
+}
+.elgg-avatar-medium > a > img {
+ width: 100px;
+ height: 100px;
+}
+.elgg-avatar-large > a > img {
+ width: 200px;
+ height: 200px;
+}
+.elgg-avatar > .elgg-icon-hover-menu {
+ display: none;
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ margin: 0;
+ cursor: pointer;
+}
+.elgg-avatar {
+ position: relative;
+}
+.elgg-avatar > a > img {
+ display: block;
+}
+.elgg-avatar-tiny > a > img {
+ width: 25px;
+ height: 25px;
+
+ /* remove the border-radius if you don't want rounded avatars in supported browsers */
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+
+ -moz-background-clip: border;
+ background-clip: border;
+
+ -webkit-background-size: 25px;
+ -khtml-background-size: 25px;
+ -moz-background-size: 25px;
+ -o-background-size: 25px;
+ background-size: 25px;
+}
+.elgg-avatar-small > a > img {
+ width: 40px;
+ height: 40px;
+
+ /* remove the border-radius if you don't want rounded avatars in supported browsers */
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+ -moz-background-clip: border;
+ background-clip: border;
+
+ -webkit-background-size: 40px;
+ -khtml-background-size: 40px;
+ -moz-background-size: 40px;
+ -o-background-size: 40px;
+ background-size: 40px;
+}
+.elgg-avatar-medium > a > img {
+ width: 100px;
+ height: 100px;
+}
+.elgg-avatar-large > a > img {
+ width: 200px;
+ height: 200px;
+}
+
+/* ***************************************
+ PLUGINS
+**************************************** */
+.elgg-plugin {
+ border: 1px solid #999;
+ margin: 0 0 5px;
+ padding: 0 7px 4px 10px;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.elgg-plugin.elgg-state-draggable > .elgg-image-block .elgg-head {
+ cursor: move;
+}
+.elgg-plugin p {
+ margin: 0;
+}
+.elgg-plugin h3 {
+ color: black;
+ padding-bottom: 10px;
+}
+.elgg-plugin-settings {
+ font-weight: normal;
+ font-size: 0.9em;
+}
+.elgg-plugin-screenshot {
+ display: inline;
+}
+.elgg-plugin-screenshot img {
+ border: 1px solid #999;
+}
+.elgg-plugin-screenshot-lightbox {
+ display: block;
+ position: absolute;
+ width: 99%;
+ text-align: center;
+ background-color: white;
+ border: 1px solid #999;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+}
+.elgg-plugin-screenshot-lightbox h2 {
+ color: black;
+}
+.elgg-plugin.elgg-state-active {
+ background: white;
+}
+.elgg-plugin.elgg-state-inactive {
+ background: #dedede;
+}
+.elgg-plugin .elgg-state-error {
+ background: #fbe3e4;
+ color: #8a1f11;
+ border-color: #fbc2c4;
+ font-weight: bold;
+}
+.elgg-plugin .elgg-state-warning {
+ background: #fbedb5;
+ color: #000000;
+ border-color: #fbe58b;
+ font-weight: bold;
+}
+.elgg-plugin-more {
+ background-color: #eee;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ padding: 5px 10px;
+ margin: 4px 0;
+}
+ul.elgg-plugin-categories, ul.elgg-plugin-categories > li,
+ul.elgg-plugin-resources, ul.elgg-plugin-resources > li {
+ display: inline;
+}
+.elgg-plugin-category-bundled {
+ border-width: 2px;
+ border-color: #0054A7;
+}
+
+/****************************************
+ MARKDOWN
+****************************************/
+.elgg-markdown {
+ margin: 15px;
+}
+.elgg-markdown h1,
+.elgg-markdown h2,
+.elgg-markdown h3,
+.elgg-markdown h4,
+.elgg-markdown h5,
+.elgg-markdown h6 {
+ margin: 1em 0 1em -15px;
+ color: #333;
+}
+.elgg-markdown ol {
+ list-style: decimal;
+ padding-left: 2em;
+}
+.elgg-markdown ul {
+ list-style: disc;
+ padding-left: 2em;
+}
+.elgg-markdown p {
+ margin: 15px 0;
+}
+
+/* ***************************************
+ MISC
+*************************************** */
+.elgg-content-thin {
+ max-width: 600px;
+}
+
+.elgg-subtext {
+ color: #666;
+ font-size: 85%;
+ line-height: 1.2em;
+ font-style: italic;
+ margin-bottom: 5px;
+}
+
+.elgg-text-help {
+ display: block;
+ font-size: 85%;
+ font-style: italic;
+}
+
+.elgg-longtext-control {
+ margin-left: 14px;
+ font-size: 80%;
+ cursor: pointer;
+}
+
+table.mceLayout {
+ width:100% !important;
+}
+
+.elgg-output dt {
+ font-weight: bold;
+}
+.elgg-output dd {
+ margin: 0 0 1em 2em;
+}
+
+/* ***************************************
+ HELPERS
+*************************************** */
+.hidden {
+ display: none;
+}
+.centered {
+ margin: 0 auto;
+}
+.center {
+ text-align: center;
+}
+.float {
+ float: left;
+}
+.float-alt {
+ float: right;
+}
+.elgg-toggle {
+ cursor: pointer;
+}
+.elgg-discover .elgg-discoverable {
+ display: none;
+}
+.elgg-discover:hover .elgg-discoverable {
+ display: block;
+}
+.elgg-transition:hover {
+ opacity: .7;
+}
+
+/* ***************************************
+ BORDERS AND SEPARATORS
+*************************************** */
+.elgg-border-plain {
+ border: 1px solid #eeeeee;
+}
+.elgg-border-transition {
+ border: 1px solid #eeeeee;
+}
+.elgg-divide-top {
+ border-top: 1px solid #CCCCCC;
+}
+.elgg-divide-bottom {
+ border-bottom: 1px solid #CCCCCC;
+}
+.elgg-divide-left {
+ border-left: 1px solid #CCCCCC;
+}
+.elgg-divide-right {
+ border-right: 1px solid #CCCCCC;
+}
+
+/* ***************************************
+ SPACING (from OOCSS)
+*************************************** */
+.pan{padding:0}
+.pas{padding:5px}
+.pam{padding:10px}
+.pal{padding:20px}
+.ptn{padding-top:0}
+.pts{padding-top:5px}
+.ptm{padding-top:10px}
+.ptl{padding-top:20px}
+.prn{padding-right:0}
+.prs{padding-right:5px}
+.prm{padding-right:10px}
+.prl{padding-right:20px}
+.pbn{padding-bottom:0}
+.pbs{padding-bottom:5px}
+.pbm{padding-bottom:10px}
+.pbl{padding-bottom:20px}
+.pln{padding-left:0}
+.pls{padding-left:5px}
+.plm{padding-left:10px}
+.pll{padding-left:20px}
+.phn{padding-left:0;padding-right:0}
+.phs{padding-left:5px;padding-right:5px}
+.phm{padding-left:10px;padding-right:10px}
+.phl{padding-left:20px;padding-right:20px}
+.pvn{padding-top:0;padding-bottom:0}
+.pvs{padding-top:5px;padding-bottom:5px}
+.pvm{padding-top:10px;padding-bottom:10px}
+.pvl{padding-top:20px;padding-bottom:20px}
+.man{margin:0}
+.mas{margin:5px}
+.mam{margin:10px}
+.mal{margin:20px}
+.mtn{margin-top:0}
+.mts{margin-top:5px}
+.mtm{margin-top:10px}
+.mtl{margin-top:20px}
+.mrn{margin-right:0}
+.mrs{margin-right:5px}
+.mrm{margin-right:10px}
+.mrl{margin-right:20px}
+.mbn{margin-bottom:0}
+.mbs{margin-bottom:5px}
+.mbm{margin-bottom:10px}
+.mbl{margin-bottom:20px}
+.mln{margin-left:0}
+.mls{margin-left:5px}
+.mlm{margin-left:10px}
+.mll{margin-left:20px}
+.mhn{margin-left:0;margin-right:0}
+.mhs{margin-left:5px;margin-right:5px}
+.mhm{margin-left:10px;margin-right:10px}
+.mhl{margin-left:20px;margin-right:20px}
+.mvn{margin-top:0;margin-bottom:0}
+.mvs{margin-top:5px;margin-bottom:5px}
+.mvm{margin-top:10px;margin-bottom:10px}
+.mvl{margin-top:20px;margin-bottom:20px}
diff --git a/views/default/css/elements/OOCSS_LICENSE b/views/default/css/elements/OOCSS_LICENSE
new file mode 100644
index 000000000..c09c45873
--- /dev/null
+++ b/views/default/css/elements/OOCSS_LICENSE
@@ -0,0 +1,30 @@
+Software License Agreement (BSD License)
+
+Copyright (c) 2009, Nicole Sullivan.
+All rights reserved.
+
+Redistribution and use of this software 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 Nicole Sullivan nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior
+ written permission of Nicole Sullivan.
+
+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. \ No newline at end of file
diff --git a/views/default/css/elements/buttons.php b/views/default/css/elements/buttons.php
new file mode 100644
index 000000000..e9c99cf96
--- /dev/null
+++ b/views/default/css/elements/buttons.php
@@ -0,0 +1,156 @@
+<?php
+/**
+ * CSS buttons
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+/* **************************
+ BUTTONS
+************************** */
+
+/* Base */
+.elgg-button {
+ font-size: 14px;
+ font-weight: bold;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+ width: auto;
+ padding: 2px 4px;
+ cursor: pointer;
+ outline: none;
+
+ -webkit-box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.40);
+ -moz-box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.40);
+ box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.40);
+}
+a.elgg-button {
+ padding: 3px 6px;
+}
+
+/* Submit: This button should convey, "you're about to take some definitive action" */
+.elgg-button-submit {
+ color: white;
+ text-shadow: 1px 1px 0px black;
+ text-decoration: none;
+ border: 1px solid #4690d6;
+ background: #4690d6 url(<?php echo elgg_get_site_url(); ?>_graphics/button_graduation.png) repeat-x left 10px;
+}
+
+.elgg-button-submit:hover {
+ border-color: #0054a7;
+ text-decoration: none;
+ color: white;
+ background: #0054a7 url(<?php echo elgg_get_site_url(); ?>_graphics/button_graduation.png) repeat-x left 10px;
+}
+
+.elgg-button-submit.elgg-state-disabled {
+ background: #999;
+ border-color: #999;
+ cursor: default;
+}
+
+/* Cancel: This button should convey a negative but easily reversible action (e.g., turning off a plugin) */
+.elgg-button-cancel {
+ color: #333;
+ background: #ddd url(<?php echo elgg_get_site_url(); ?>_graphics/button_graduation.png) repeat-x left 10px;
+ border: 1px solid #999;
+}
+.elgg-button-cancel:hover {
+ color: #444;
+ background-color: #999;
+ background-position: left 10px;
+ text-decoration: none;
+}
+
+/* Action: This button should convey a normal, inconsequential action, such as clicking a link */
+.elgg-button-action {
+ background: #ccc url(<?php echo elgg_get_site_url(); ?>_graphics/button_background.gif) repeat-x 0 0;
+ border:1px solid #999;
+ color: #333;
+ padding: 2px 15px;
+ text-align: center;
+ font-weight: bold;
+ text-decoration: none;
+ text-shadow: 0 1px 0 white;
+ cursor: pointer;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.elgg-button-action:hover,
+.elgg-button-action:focus {
+ background: #ccc url(<?php echo elgg_get_site_url(); ?>_graphics/button_background.gif) repeat-x 0 -15px;
+ color: #111;
+ text-decoration: none;
+ border: 1px solid #999;
+}
+
+/* Delete: This button should convey "be careful before you click me" */
+.elgg-button-delete {
+ color: #bbb;
+ text-decoration: none;
+ border: 1px solid #333;
+ background: #555 url(<?php echo elgg_get_site_url(); ?>_graphics/button_graduation.png) repeat-x left 10px;
+ text-shadow: 1px 1px 0px black;
+}
+.elgg-button-delete:hover {
+ color: #999;
+ background-color: #333;
+ background-position: left 10px;
+ text-decoration: none;
+}
+
+.elgg-button-dropdown {
+ padding:3px 6px;
+ text-decoration:none;
+ display:block;
+ font-weight:bold;
+ position:relative;
+ margin-left:0;
+ color: white;
+ border:1px solid #71B9F7;
+
+ -webkit-border-radius:4px;
+ -moz-border-radius:4px;
+ border-radius:4px;
+
+ -webkit-box-shadow: 0 0 0;
+ -moz-box-shadow: 0 0 0;
+ box-shadow: 0 0 0;
+
+ /*background-image:url(<?php echo elgg_get_site_url(); ?>_graphics/elgg_sprites.png);
+ background-position:-150px -51px;
+ background-repeat:no-repeat;*/
+}
+
+.elgg-button-dropdown:after {
+ content: " \25BC ";
+ font-size:smaller;
+}
+
+.elgg-button-dropdown:hover {
+ background-color:#71B9F7;
+ text-decoration:none;
+}
+
+.elgg-button-dropdown.elgg-state-active {
+ background: #ccc;
+ outline: none;
+ color: #333;
+ border:1px solid #ccc;
+
+ -webkit-border-radius:4px 4px 0 0;
+ -moz-border-radius:4px 4px 0 0;
+ border-radius:4px 4px 0 0;
+}
diff --git a/views/default/css/elements/components.php b/views/default/css/elements/components.php
new file mode 100644
index 000000000..7fe535d57
--- /dev/null
+++ b/views/default/css/elements/components.php
@@ -0,0 +1,286 @@
+<?php
+/**
+ * Layout Object CSS
+ *
+ * Image blocks, lists, tables, gallery, messages
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+
+/* ***************************************
+ Image Block
+*************************************** */
+.elgg-image-block {
+ padding: 3px 0;
+}
+.elgg-image-block .elgg-image {
+ float: left;
+ margin-right: 5px;
+}
+.elgg-image-block .elgg-image-alt {
+ float: right;
+ margin-left: 5px;
+}
+
+/* ***************************************
+ List
+*************************************** */
+.elgg-list {
+ border-top: 1px dotted #CCCCCC;
+ margin: 5px 0;
+ clear: both;
+}
+.elgg-list > li {
+ border-bottom: 1px dotted #CCCCCC;
+}
+
+.elgg-item .elgg-subtext {
+ margin-bottom: 5px;
+}
+.elgg-item .elgg-content {
+ margin: 10px 5px;
+}
+
+/* ***************************************
+ Gallery
+*************************************** */
+.elgg-gallery {
+ border: none;
+ margin-right: auto;
+ margin-left: auto;
+}
+.elgg-gallery td {
+ padding: 5px;
+}
+.elgg-gallery-fluid > li {
+ float: left;
+}
+.elgg-gallery-users > li {
+ margin: 0 2px;
+}
+
+/* ***************************************
+ Tables
+*************************************** */
+.elgg-table {
+ width: 100%;
+ border-top: 1px solid #ccc;
+}
+.elgg-table td, .elgg-table th {
+ padding: 4px 8px;
+ border: 1px solid #ccc;
+}
+.elgg-table th {
+ background-color: #ddd;
+}
+.elgg-table tr:nth-child(odd), .elgg-table tr.odd {
+ background-color: #fff;
+}
+.elgg-table tr:nth-child(even), .elgg-table tr.even {
+ background-color: #f0f0f0;
+}
+.elgg-table-alt {
+ width: 100%;
+ border-top: 1px solid #ccc;
+}
+.elgg-table-alt th {
+ background-color: #eee;
+ font-weight: bold;
+}
+.elgg-table-alt td, .elgg-table-alt th {
+ padding: 2px 4px 2px 4px;
+ border-bottom: 1px solid #ccc;
+}
+.elgg-table-alt td:first-child {
+ width: 200px;
+}
+.elgg-table-alt tr:hover {
+ background: #E4E4E4;
+}
+
+/* ***************************************
+ Owner Block
+*************************************** */
+.elgg-owner-block {
+ margin-bottom: 20px;
+}
+
+/* ***************************************
+ Messages
+*************************************** */
+.elgg-message {
+ color: white;
+ font-weight: bold;
+ display: block;
+ padding: 3px 10px;
+ cursor: pointer;
+ opacity: 0.9;
+
+ -webkit-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45);
+ -moz-box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45);
+ box-shadow: 0 2px 5px rgba(0, 0, 0, 0.45);
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+}
+.elgg-state-success {
+ background-color: black;
+}
+.elgg-state-error {
+ background-color: red;
+}
+.elgg-state-notice {
+ background-color: #4690D6;
+}
+
+/* ***************************************
+ River
+*************************************** */
+.elgg-list-river {
+ border-top: 1px solid #CCC;
+}
+.elgg-list-river > li {
+ border-bottom: 1px solid #CCC;
+}
+.elgg-river-item {
+ padding: 7px 0;
+}
+.elgg-river-item .elgg-pict {
+ margin-right: 20px;
+}
+.elgg-river-timestamp {
+ color: #666;
+ font-size: 85%;
+ font-style: italic;
+ line-height: 1.2em;
+}
+
+.elgg-river-attachments,
+.elgg-river-message,
+.elgg-river-content {
+ border-left: 1px solid #CCC;
+ font-size: 85%;
+ line-height: 1.5em;
+ margin: 8px 0 5px 0;
+ padding-left: 5px;
+}
+.elgg-river-attachments .elgg-avatar,
+.elgg-river-attachments .elgg-icon {
+ float: left;
+}
+.elgg-river-layout .elgg-input-dropdown {
+ float: right;
+ margin: 10px 0;
+}
+
+.elgg-river-comments-tab {
+ display: block;
+ background-color: #EEE;
+ color: #4690D6;
+ margin-top: 5px;
+ width: auto;
+ float: right;
+ font-size: 85%;
+ padding: 1px 7px;
+
+ -webkit-border-radius: 5px 5px 0 0;
+ -moz-border-radius: 5px 5px 0 0;
+ border-radius: 5px 5px 0 0;
+}
+
+<?php //@todo components.php ?>
+.elgg-river-comments {
+ margin: 0;
+ border-top: none;
+}
+.elgg-river-comments li:first-child {
+ -webkit-border-radius: 5px 0 0;
+ -moz-border-radius: 5px 0 0;
+ border-radius: 5px 0 0;
+}
+.elgg-river-comments li:last-child {
+ -webkit-border-radius: 0 0 5px 5px;
+ -moz-border-radius-bottomleft: 0 0 5px 5px;
+ border-radius-bottomleft: 0 0 5px 5px;
+}
+.elgg-river-comments li {
+ background-color: #EEE;
+ border-bottom: none;
+ padding: 4px;
+ margin-bottom: 2px;
+}
+.elgg-river-comments .elgg-media {
+ padding: 0;
+}
+.elgg-river-more {
+ background-color: #EEE;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+ padding: 2px 4px;
+ font-size: 85%;
+ margin-bottom: 2px;
+}
+
+<?php //@todo location-dependent styles ?>
+.elgg-river-item form {
+ background-color: #EEE;
+ padding: 4px;
+
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+
+ height: 30px;
+}
+.elgg-river-item input[type=text] {
+ width: 80%;
+}
+.elgg-river-item input[type=submit] {
+ margin: 0 0 0 10px;
+}
+
+
+/* **************************************
+ Comments (from elgg_view_comments)
+************************************** */
+.elgg-comments {
+ margin-top: 25px;
+}
+.elgg-comments > form {
+ margin-top: 15px;
+}
+
+/* ***************************************
+ Image-related
+*************************************** */
+.elgg-photo {
+ border: 1px solid #ccc;
+ padding: 3px;
+ background-color: white;
+}
+
+/* ***************************************
+ Tags
+*************************************** */
+.elgg-tags {
+ font-size: 85%;
+}
+.elgg-tags > li {
+ float:left;
+ margin-right: 5px;
+}
+.elgg-tags li.elgg-tag:after {
+ content: ",";
+}
+.elgg-tags li.elgg-tag:last-child:after {
+ content: "";
+}
+.elgg-tagcloud {
+ text-align: justify;
+}
diff --git a/views/default/css/elements/core.php b/views/default/css/elements/core.php
new file mode 100644
index 000000000..74f21ee59
--- /dev/null
+++ b/views/default/css/elements/core.php
@@ -0,0 +1,117 @@
+<?php
+/**
+ * Core CSS
+ *
+ * This file holds all the complicated/hacky stuff that you really
+ * shouldn't touch or override unless you're sure you know what you're doing.
+ *
+ * Provides classes that implement cross-browser support for the following features:
+ * * clearfix
+ * * fluid-width content area that doesn't wrap around floats
+ * * menu's with separators
+ * * inline-block
+ * * horizontal menus
+ * * fluid gallery without using tables
+ */
+?>
+
+/* Clearfix */
+.clearfix:after,
+.elgg-grid:after,
+.elgg-layout:after,
+.elgg-inner:after,
+.elgg-page-header:after,
+.elgg-page-footer:after,
+.elgg-head:after,
+.elgg-foot:after,
+.elgg-col:after,
+.elgg-image-block:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+/* Fluid width container that does not wrap floats */
+.elgg-body,
+.elgg-col-last {
+ display: block;
+ width: auto;
+ word-wrap: break-word;
+ overflow: hidden;
+
+ /* IE 6, 7 */
+ zoom:1;
+ *overflow:visible;
+}
+
+<?php
+/**
+ * elgg-body fills the space available to it.
+ * It uses hidden text to expand itself. The combination of auto width, overflow
+ * hidden, and the hidden text creates this effect.
+ *
+ * This allows us to float fixed width divs to either side of an .elgg-body div
+ * without having to specify the body div's width.
+ *
+ * @todo check what happens with long <pre> tags or large images
+ * @todo Move this to its own file -- it is very complicated and should not have to be overridden.
+ */
+
+//@todo isn't this only needed if we use display:table-cell?
+?>
+.elgg-body:after,
+.elgg-col-last:after {
+ display: block;
+ visibility: hidden;
+ height: 0 !important;
+ line-height: 0;
+ overflow: hidden;
+
+ /* Stretch to fill up available space */
+ font-size: xx-large;
+ content: " x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x ";
+}
+
+/* ***************************************
+ * MENUS
+ *
+ * To add separators to a menu:
+ * .elgg-menu-$menu > li:after {content: '|'; background: ...;}
+ *************************************** */
+/* Enabled nesting of dropdown/flyout menus */
+.elgg-menu > li { position: relative; }
+
+.elgg-menu > li:last-child::after {
+ display: none;
+}
+
+/* Maximize click target */
+.elgg-menu > li > a { display: block }
+
+/* Horizontal menus w/ separator support */
+.elgg-menu-hz > li,
+.elgg-menu-hz > li:after,
+.elgg-menu-hz > li > a,
+.elgg-menu-hz > li > span {
+ vertical-align: middle;
+}
+
+/* Allow inline image blocks in horizontal menus */
+.elgg-menu-hz .elgg-body:after { content: '.'; }
+
+<?php //@todo This isn't going to work as-is. Needs testing ?>
+/* Inline block */
+.elgg-gallery > li,
+.elgg-button,
+.elgg-icon,
+.elgg-menu-hz > li,
+.elgg-menu-hz > li:after,
+.elgg-menu-hz > li > a,
+.elgg-menu-hz > li > span {
+ /* Google says do this, but why? */
+ position: relative;
+
+ display: inline-block;
+}
diff --git a/views/default/css/elements/forms.php b/views/default/css/elements/forms.php
new file mode 100644
index 000000000..2fc156447
--- /dev/null
+++ b/views/default/css/elements/forms.php
@@ -0,0 +1,370 @@
+<?php
+/**
+ * CSS form/input elements
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+
+/* ***************************************
+ Form Elements
+*************************************** */
+fieldset > div {
+ margin-bottom: 15px;
+}
+fieldset > div:last-child {
+ margin-bottom: 0;
+}
+.elgg-form-alt > fieldset > .elgg-foot {
+ border-top: 1px solid #CCC;
+ padding: 10px 0;
+}
+
+label {
+ font-weight: bold;
+ color: #333;
+ font-size: 110%;
+}
+
+input, textarea {
+ border: 1px solid #ccc;
+ color: #666;
+ font: 120% Arial, Helvetica, sans-serif;
+ padding: 5px;
+ width: 100%;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+input[type=text]:focus, textarea:focus {
+ border: solid 1px #4690d6;
+ background: #e4ecf5;
+ color:#333;
+}
+
+textarea {
+ height: 200px;
+}
+
+
+.elgg-longtext-control {
+ float: right;
+ margin-left: 14px;
+ font-size: 80%;
+ cursor: pointer;
+}
+
+
+.elgg-input-access {
+ margin:5px 0 0 0;
+}
+
+input[type="checkbox"],
+input[type="radio"] {
+ margin:0 3px 0 0;
+ padding:0;
+ border:none;
+ width:auto;
+}
+.elgg-input-checkboxes.elgg-horizontal li,
+.elgg-input-radios.elgg-horizontal li {
+ display: inline;
+ padding-right: 10px;
+}
+
+.elgg-form-login, .elgg-form-account {
+ max-width: 450px;
+}
+
+/* ***************************************
+ FRIENDS PICKER
+*************************************** */
+.friends-picker-main-wrapper {
+ margin-bottom: 15px;
+}
+.friends-picker-container h3 {
+ font-size:4em !important;
+ text-align: left;
+ margin:10px 0 20px !important;
+ color:#999 !important;
+ background: none !important;
+ padding:0 !important;
+}
+.friends-picker .friends-picker-container .panel ul {
+ text-align: left;
+ margin: 0;
+ padding:0;
+}
+.friends-picker-wrapper {
+ margin: 0;
+ padding:0;
+ position: relative;
+ width: 730px;
+}
+.friends-picker {
+ position: relative;
+ overflow: hidden;
+ margin: 0;
+ padding:0;
+ width: 730px;
+ height: auto;
+ background-color: #dedede;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+}
+.friendspicker-savebuttons {
+ background: white;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ margin:0 10px 10px;
+}
+.friends-picker .friends-picker-container { /* long container used to house end-to-end panels. Width is calculated in JS */
+ position: relative;
+ left: 0;
+ top: 0;
+ width: 100%;
+ list-style-type: none;
+}
+.friends-picker .friends-picker-container .panel {
+ float:left;
+ height: 100%;
+ position: relative;
+ width: 730px;
+ margin: 0;
+ padding:0;
+}
+.friends-picker .friends-picker-container .panel .wrapper {
+ margin: 0;
+ padding:4px 10px 10px 10px;
+ min-height: 230px;
+}
+.friends-picker-navigation {
+ margin: 0 0 10px;
+ padding:0 0 10px;
+ border-bottom:1px solid #ccc;
+}
+.friends-picker-navigation ul {
+ list-style: none;
+ padding-left: 0;
+}
+.friends-picker-navigation ul li {
+ float: left;
+ margin:0;
+ background:white;
+}
+.friends-picker-navigation a {
+ font-weight: bold;
+ text-align: center;
+ background: white;
+ color: #999;
+ text-decoration: none;
+ display: block;
+ padding: 0;
+ width:20px;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+.tabHasContent {
+ background: white;
+ color:#333 !important;
+}
+.friends-picker-navigation li a:hover {
+ background: #333;
+ color:white !important;
+}
+.friends-picker-navigation li a.current {
+ background: #4690D6;
+ color:white !important;
+}
+.friends-picker-navigation-l, .friends-picker-navigation-r {
+ position: absolute;
+ top: 46px;
+ text-indent: -9000em;
+}
+.friends-picker-navigation-l a, .friends-picker-navigation-r a {
+ display: block;
+ height: 40px;
+ width: 40px;
+}
+.friends-picker-navigation-l {
+ right: 48px;
+ z-index:1;
+}
+.friends-picker-navigation-r {
+ right: 0;
+ z-index:1;
+}
+.friends-picker-navigation-l {
+ background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat left top;
+}
+.friends-picker-navigation-r {
+ background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat -60px top;
+}
+.friends-picker-navigation-l:hover {
+ background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat left -44px;
+}
+.friends-picker-navigation-r:hover {
+ background: url("<?php echo elgg_get_site_url(); ?>_graphics/friendspicker.png") no-repeat -60px -44px;
+}
+.friendspicker-savebuttons .elgg-button-submit,
+.friendspicker-savebuttons .elgg-button-cancel {
+ margin:5px 20px 5px 5px;
+}
+.friendspicker-members-table {
+ background: #dedede;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ margin:10px 0 0;
+ padding:10px 10px 0;
+}
+
+/* ***************************************
+ AUTOCOMPLETE
+*************************************** */
+<?php //autocomplete will expand to fullscreen without max-width ?>
+.ui-autocomplete {
+ position: absolute;
+ cursor: default;
+}
+.elgg-autocomplete-item .elgg-body {
+ max-width: 600px;
+}
+.ui-autocomplete {
+ background-color: white;
+ border: 1px solid #ccc;
+ overflow: hidden;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.ui-autocomplete .ui-menu-item {
+ padding: 0px 4px;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+.ui-autocomplete .ui-menu-item:hover {
+ background-color: #eee;
+}
+.ui-autocomplete a:hover {
+ text-decoration: none;
+ color: #4690D6;
+}
+
+/* ***************************************
+ USER PICKER
+*************************************** */
+.elgg-user-picker-list li:first-child {
+ border-top: 1px dotted #ccc;
+ margin-top: 5px;
+}
+.elgg-user-picker-list > li {
+ border-bottom: 1px dotted #ccc;
+}
+
+/* ***************************************
+ DATE PICKER
+**************************************** */
+.ui-datepicker {
+ display: none;
+
+ margin-top: 3px;
+ width: 208px;
+ background-color: white;
+ border: 1px solid #0054A7;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ overflow: hidden;
+
+ -webkit-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5);
+ -moz-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5);
+ box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5);
+}
+.ui-datepicker-inline {
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.ui-datepicker-header {
+ position: relative;
+ background: #4690D6;
+ color: white;
+ padding: 2px 0;
+ border-bottom: 1px solid #0054A7;
+}
+.ui-datepicker-header a {
+ color: white;
+}
+.ui-datepicker-prev, .ui-datepicker-next {
+ position: absolute;
+ top: 5px;
+ cursor: pointer;
+}
+.ui-datepicker-prev {
+ left: 6px;
+}
+.ui-datepicker-next {
+ right: 6px;
+}
+.ui-datepicker-title {
+ line-height: 1.8em;
+ margin: 0 30px;
+ text-align: center;
+ font-weight: bold;
+}
+.ui-datepicker-calendar {
+ margin: 4px;
+}
+.ui-datepicker th {
+ color: #0054A7;
+ border: none;
+ font-weight: bold;
+ padding: 5px 6px;
+ text-align: center;
+}
+.ui-datepicker td {
+ padding: 1px;
+}
+.ui-datepicker td span, .ui-datepicker td a {
+ display: block;
+ padding: 2px;
+ line-height: 1.2em;
+ text-align: right;
+ text-decoration: none;
+}
+.ui-datepicker-calendar .ui-state-default {
+ border: 1px solid #ccc;
+ color: #4690D6;;
+ background: #fafafa;
+}
+.ui-datepicker-calendar .ui-state-hover {
+ border: 1px solid #aaa;
+ color: #0054A7;
+ background: #eee;
+}
+.ui-datepicker-calendar .ui-state-active,
+.ui-datepicker-calendar .ui-state-active.ui-state-hover {
+ font-weight: bold;
+ border: 1px solid #0054A7;
+ color: #0054A7;
+ background: #E4ECF5;
+}
diff --git a/views/default/css/elements/grid.php b/views/default/css/elements/grid.php
new file mode 100644
index 000000000..fdbaf4aca
--- /dev/null
+++ b/views/default/css/elements/grid.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * CSS grid
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ *
+ * To work around subpixel rounding discrepancies, apply .elgg-col-last to
+ * the last column (@todo we need broswer-specific test cases for this).
+ */
+?>
+
+/* ***************************************
+ GRID
+*************************************** */
+.elgg-col {
+ float: left;
+}
+.elgg-col-1of1 {
+ float: none;
+}
+.elgg-col-1of2 {
+ width: 50%;
+}
+.elgg-col-1of3 {
+ width: 33.33%;
+}
+.elgg-col-2of3 {
+ width: 66.66%;
+}
+.elgg-col-1of4 {
+ width: 25%;
+}
+.elgg-col-3of4 {
+ width: 75%;
+}
+.elgg-col-1of5 {
+ width: 20%;
+}
+.elgg-col-2of5 {
+ width: 40%;
+}
+.elgg-col-3of5 {
+ width: 60%;
+}
+.elgg-col-4of5 {
+ width: 80%;
+}
+.elgg-col-1of6 {
+ width: 16.66%;
+}
+.elgg-col-5of6 {
+ width: 83.33%;
+}
diff --git a/views/default/css/elements/helpers.php b/views/default/css/elements/helpers.php
new file mode 100644
index 000000000..e9a9e0a30
--- /dev/null
+++ b/views/default/css/elements/helpers.php
@@ -0,0 +1,144 @@
+<?php
+/**
+ * Helpers CSS
+ *
+ * Contains generic elements that can be used throughout the site.
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+
+.clearfloat {
+ clear: both;
+}
+
+.hidden {
+ display: none;
+}
+
+.centered {
+ margin: 0 auto;
+}
+
+.center {
+ text-align: center;
+}
+
+.float {
+ float: left;
+}
+
+.float-alt {
+ float: right;
+}
+
+.link {
+ cursor: pointer;
+}
+
+.elgg-discover .elgg-discoverable {
+ display: none;
+}
+
+.elgg-discover:hover .elgg-discoverable {
+ display: block;
+}
+
+.elgg-transition:hover {
+ opacity: .7;
+}
+
+/* ***************************************
+ BORDERS AND SEPARATORS
+*************************************** */
+.elgg-border-plain {
+ border: 1px solid #eeeeee;
+}
+.elgg-border-transition {
+ border: 1px solid #eeeeee;
+}
+.elgg-divide-top {
+ border-top: 1px solid #CCCCCC;
+}
+.elgg-divide-bottom {
+ border-bottom: 1px solid #CCCCCC;
+}
+.elgg-divide-left {
+ border-left: 1px solid #CCCCCC;
+}
+.elgg-divide-right {
+ border-right: 1px solid #CCCCCC;
+}
+
+/* ***************************************
+ Spacing (from OOCSS)
+*************************************** */
+<?php
+/**
+ * Spacing classes
+ * Should be used to modify the default spacing between objects (not between nodes of the same object)
+ * Please use judiciously. You want to be using defaults most of the time, these are exceptions!
+ * <type><location><size>
+ * <type>: m = margin, p = padding
+ * <location>: a = all, t = top, r = right, b = bottom, l = left, h = horizontal, v = vertical
+ * <size>: n = none, s = small, m = medium, l = large
+ */
+
+$none = '0';
+$small = '5px';
+$medium = '10px';
+$large = '20px';
+
+echo <<<CSS
+/* Padding */
+.pan{padding:$none}
+.prn, .phn{padding-right:$none}
+.pln, .phn{padding-left:$none}
+.ptn, .pvn{padding-top:$none}
+.pbn, .pvn{padding-bottom:$none}
+
+.pas{padding:$small}
+.prs, .phs{padding-right:$small}
+.pls, .phs{padding-left:$small}
+.pts, .pvs{padding-top:$small}
+.pbs, .pvs{padding-bottom:$small}
+
+.pam{padding:$medium}
+.prm, .phm{padding-right:$medium}
+.plm, .phm{padding-left:$medium}
+.ptm, .pvm{padding-top:$medium}
+.pbm, .pvm{padding-bottom:$medium}
+
+.pal{padding:$large}
+.prl, .phl{padding-right:$large}
+.pll, .phl{padding-left:$large}
+.ptl, .pvl{padding-top:$large}
+.pbl, .pvl{padding-bottom:$large}
+
+/* Margin */
+.man{margin:$none}
+.mrn, .mhn{margin-right:$none}
+.mln, .mhn{margin-left:$none}
+.mtn, .mvn{margin-top:$none}
+.mbn, .mvn{margin-bottom:$none}
+
+.mas{margin:$small}
+.mrs, .mhs{margin-right:$small}
+.mls, .mhs{margin-left:$small}
+.mts, .mvs{margin-top:$small}
+.mbs, .mvs{margin-bottom:$small}
+
+.mam{margin:$medium}
+.mrm, .mhm{margin-right:$medium}
+.mlm, .mhm{margin-left:$medium}
+.mtm, .mvm{margin-top:$medium}
+.mbm, .mvm{margin-bottom:$medium}
+
+.mal{margin:$large}
+.mrl, .mhl{margin-right:$large}
+.mll, .mhl{margin-left:$large}
+.mtl, .mvl{margin-top:$large}
+.mbl, .mvl{margin-bottom:$large}
+CSS;
+?> \ No newline at end of file
diff --git a/views/default/css/elements/icons.php b/views/default/css/elements/icons.php
new file mode 100644
index 000000000..9b12e0a57
--- /dev/null
+++ b/views/default/css/elements/icons.php
@@ -0,0 +1,348 @@
+<?php
+/**
+ * Elgg icons
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+
+?>
+
+/* ***************************************
+ ICONS
+*************************************** */
+
+.elgg-icon {
+ background: transparent url(<?php echo elgg_get_site_url(); ?>_graphics/elgg_sprites.png) no-repeat left;
+ width: 16px;
+ height: 16px;
+ margin: 0 2px;
+}
+.elgg-icon-arrow-left {
+ background-position: 0 -0px;
+}
+.elgg-icon-arrow-right {
+ background-position: 0 -18px;
+}
+.elgg-icon-arrow-two-head {
+ background-position: 0 -36px;
+}
+.elgg-icon-attention:hover {
+ background-position: 0 -54px;
+}
+.elgg-icon-attention {
+ background-position: 0 -72px;
+}
+.elgg-icon-calendar {
+ background-position: 0 -90px;
+}
+.elgg-icon-cell-phone {
+ background-position: 0 -108px;
+}
+.elgg-icon-checkmark:hover {
+ background-position: 0 -126px;
+}
+.elgg-icon-checkmark {
+ background-position: 0 -144px;
+}
+.elgg-icon-clip:hover {
+ background-position: 0 -162px;
+}
+.elgg-icon-clip {
+ background-position: 0 -180px;
+}
+.elgg-icon-cursor-drag-arrow {
+ background-position: 0 -198px;
+}
+.elgg-icon-delete-alt:hover {
+ background-position: 0 -216px;
+}
+.elgg-icon-delete-alt {
+ background-position: 0 -234px;
+}
+.elgg-icon-delete:hover {
+ background-position: 0 -252px;
+}
+.elgg-icon-delete {
+ background-position: 0 -270px;
+}
+.elgg-icon-download:hover {
+ background-position: 0 -288px;
+}
+.elgg-icon-download {
+ background-position: 0 -306px;
+}
+.elgg-icon-eye {
+ background-position: 0 -324px;
+}
+.elgg-icon-facebook {
+ background-position: 0 -342px;
+}
+.elgg-icon-grid:hover {
+ background-position: 0 -360px;
+}
+.elgg-icon-grid {
+ background-position: 0 -378px;
+}
+.elgg-icon-home:hover {
+ background-position: 0 -396px;
+}
+.elgg-icon-home {
+ background-position: 0 -414px;
+}
+.elgg-icon-hover-menu:hover {
+ background-position: 0 -432px;
+}
+.elgg-icon-hover-menu {
+ background-position: 0 -450px;
+}
+.elgg-icon-info:hover {
+ background-position: 0 -468px;
+}
+.elgg-icon-info {
+ background-position: 0 -486px;
+}
+.elgg-icon-link:hover {
+ background-position: 0 -504px;
+}
+.elgg-icon-link {
+ background-position: 0 -522px;
+}
+.elgg-icon-list {
+ background-position: 0 -540px;
+}
+.elgg-icon-lock-closed {
+ background-position: 0 -558px;
+}
+.elgg-icon-lock-open {
+ background-position: 0 -576px;
+}
+.elgg-icon-mail-alt:hover {
+ background-position: 0 -594px;
+}
+.elgg-icon-mail-alt {
+ background-position: 0 -612px;
+}
+.elgg-icon-mail:hover {
+ background-position: 0 -630px;
+}
+.elgg-icon-mail {
+ background-position: 0 -648px;
+}
+.elgg-icon-photo {
+ background-position: 0 -666px;
+}
+.elgg-icon-print-alt {
+ background-position: 0 -684px;
+}
+.elgg-icon-print {
+ background-position: 0 -702px;
+}
+.elgg-icon-push-pin-alt {
+ background-position: 0 -720px;
+}
+.elgg-icon-push-pin {
+ background-position: 0 -738px;
+}
+.elgg-icon-redo {
+ background-position: 0 -756px;
+}
+.elgg-icon-refresh:hover {
+ background-position: 0 -774px;
+}
+.elgg-icon-refresh {
+ background-position: 0 -792px;
+}
+.elgg-icon-round-arrow-left {
+ background-position: 0 -810px;
+}
+.elgg-icon-round-arrow-right {
+ background-position: 0 -828px;
+}
+.elgg-icon-round-checkmark {
+ background-position: 0 -846px;
+}
+.elgg-icon-round-minus {
+ background-position: 0 -864px;
+}
+.elgg-icon-round-plus {
+ background-position: 0 -882px;
+}
+.elgg-icon-rss {
+ background-position: 0 -900px;
+}
+.elgg-icon-search-focus {
+ background-position: 0 -918px;
+}
+.elgg-icon-search {
+ background-position: 0 -936px;
+}
+.elgg-icon-settings-alt:hover {
+ background-position: 0 -954px;
+}
+.elgg-icon-settings-alt {
+ background-position: 0 -972px;
+}
+.elgg-icon-settings {
+ background-position: 0 -990px;
+}
+.elgg-icon-share:hover {
+ background-position: 0 -1008px;
+}
+.elgg-icon-share {
+ background-position: 0 -1026px;
+}
+.elgg-icon-shop-cart:hover {
+ background-position: 0 -1044px;
+}
+.elgg-icon-shop-cart {
+ background-position: 0 -1062px;
+}
+.elgg-icon-speech-bubble-alt:hover {
+ background-position: 0 -1080px;
+}
+.elgg-icon-speech-bubble-alt {
+ background-position: 0 -1098px;
+}
+.elgg-icon-speech-bubble:hover {
+ background-position: 0 -1116px;
+}
+.elgg-icon-speech-bubble {
+ background-position: 0 -1134px;
+}
+.elgg-icon-star-alt {
+ background-position: 0 -1152px;
+}
+.elgg-icon-star-empty:hover {
+ background-position: 0 -1170px;
+}
+.elgg-icon-star-empty {
+ background-position: 0 -1188px;
+}
+.elgg-icon-star:hover {
+ background-position: 0 -1206px;
+}
+.elgg-icon-star {
+ background-position: 0 -1224px;
+}
+.elgg-icon-tag:hover {
+ background-position: 0 -1242px;
+}
+.elgg-icon-tag {
+ background-position: 0 -1260px;
+}
+.elgg-icon-thumbs-down-alt:hover {
+ background-position: 0 -1278px;
+}
+.elgg-icon-thumbs-down:hover,
+.elgg-icon-thumbs-down-alt {
+ background-position: 0 -1296px;
+}
+.elgg-icon-thumbs-down {
+ background-position: 0 -1314px;
+}
+.elgg-icon-thumbs-up-alt:hover {
+ background-position: 0 -1332px;
+}
+.elgg-icon-thumbs-up:hover,
+.elgg-icon-thumbs-up-alt {
+ background-position: 0 -1350px;
+}
+.elgg-icon-thumbs-up {
+ background-position: 0 -1368px;
+}
+.elgg-icon-trash {
+ background-position: 0 -1386px;
+}
+.elgg-icon-twitter {
+ background-position: 0 -1404px;
+}
+.elgg-icon-undo {
+ background-position: 0 -1422px;
+}
+.elgg-icon-user:hover {
+ background-position: 0 -1440px;
+}
+.elgg-icon-user {
+ background-position: 0 -1458px;
+}
+.elgg-icon-users:hover {
+ background-position: 0 -1476px;
+}
+.elgg-icon-users {
+ background-position: 0 -1494px;
+}
+.elgg-icon-video {
+ background-position: 0 -1512px;
+}
+
+
+.elgg-avatar > .elgg-icon-hover-menu {
+ display: none;
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ margin: 0;
+ cursor: pointer;
+}
+
+.elgg-ajax-loader {
+ background: white url(<?php echo elgg_get_site_url(); ?>_graphics/ajax_loader_bw.gif) no-repeat center center;
+ min-height: 31px;
+ min-width: 31px;
+}
+
+/* ***************************************
+ AVATAR ICONS
+*************************************** */
+.elgg-avatar {
+ position: relative;
+ display: inline-block;
+}
+.elgg-avatar > a > img {
+ display: block;
+}
+.elgg-avatar-tiny > a > img {
+ width: 25px;
+ height: 25px;
+
+ /* remove the border-radius if you don't want rounded avatars in supported browsers */
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+
+ -moz-background-clip: border;
+ background-clip: border;
+
+ -webkit-background-size: 25px;
+ -khtml-background-size: 25px;
+ -moz-background-size: 25px;
+ -o-background-size: 25px;
+ background-size: 25px;
+}
+.elgg-avatar-small > a > img {
+ width: 40px;
+ height: 40px;
+
+ /* remove the border-radius if you don't want rounded avatars in supported browsers */
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+
+ -moz-background-clip: border;
+ background-clip: border;
+
+ -webkit-background-size: 40px;
+ -khtml-background-size: 40px;
+ -moz-background-size: 40px;
+ -o-background-size: 40px;
+ background-size: 40px;
+}
+.elgg-avatar-medium > a > img {
+ width: 100px;
+ height: 100px;
+}
+.elgg-avatar-large > a > img {
+ width: 200px;
+ height: 200px;
+}
diff --git a/views/default/css/elements/layout.php b/views/default/css/elements/layout.php
new file mode 100644
index 000000000..9d92752b4
--- /dev/null
+++ b/views/default/css/elements/layout.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Page Layout
+ *
+ * Contains CSS for the page shell and page layout
+ *
+ * Default layout: 990px wide, centered. Used in default page shell
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+
+/* ***************************************
+ PAGE LAYOUT
+*************************************** */
+/***** DEFAULT LAYOUT ******/
+<?php // the width is on the page rather than topbar to handle small viewports ?>
+.elgg-page-default {
+ min-width: 998px;
+}
+.elgg-page-default .elgg-page-header > .elgg-inner {
+ width: 990px;
+ margin: 0 auto;
+ height: 90px;
+}
+.elgg-page-default .elgg-page-body > .elgg-inner {
+ width: 990px;
+ margin: 0 auto;
+}
+.elgg-page-default .elgg-page-footer > .elgg-inner {
+ width: 990px;
+ margin: 0 auto;
+ padding: 5px 0;
+ border-top: 1px solid #DEDEDE;
+}
+
+/***** TOPBAR ******/
+.elgg-page-topbar {
+ background: #333333 url(<?php echo elgg_get_site_url(); ?>_graphics/toptoolbar_background.gif) repeat-x top left;
+ border-bottom: 1px solid #000000;
+ position: relative;
+ height: 24px;
+ z-index: 9000;
+}
+.elgg-page-topbar > .elgg-inner {
+ padding: 0 10px;
+}
+
+/***** PAGE MESSAGES ******/
+.elgg-system-messages {
+ position: fixed;
+ top: 24px;
+ right: 20px;
+ max-width: 500px;
+ z-index: 2000;
+}
+.elgg-system-messages li {
+ margin-top: 10px;
+}
+.elgg-system-messages li p {
+ margin: 0;
+}
+
+/***** PAGE HEADER ******/
+.elgg-page-header {
+ position: relative;
+ background: #4690D6 url(<?php echo elgg_get_site_url(); ?>_graphics/header_shadow.png) repeat-x bottom left;
+}
+.elgg-page-header > .elgg-inner {
+ position: relative;
+}
+
+/***** PAGE BODY LAYOUT ******/
+.elgg-layout {
+ min-height: 360px;
+}
+.elgg-layout-one-sidebar {
+ background: transparent url(<?php echo elgg_get_site_url(); ?>_graphics/sidebar_background.gif) repeat-y right top;
+}
+.elgg-layout-two-sidebar {
+ background: transparent url(<?php echo elgg_get_site_url(); ?>_graphics/two_sidebar_background.gif) repeat-y right top;
+}
+.elgg-layout-error {
+ margin-top: 20px;
+}
+.elgg-sidebar {
+ position: relative;
+ padding: 20px 10px;
+ float: right;
+ width: 210px;
+ margin: 0 0 0 10px;
+}
+.elgg-sidebar-alt {
+ position: relative;
+ padding: 20px 10px;
+ float: left;
+ width: 160px;
+ margin: 0 10px 0 0;
+}
+.elgg-main {
+ position: relative;
+ min-height: 360px;
+ padding: 10px;
+}
+.elgg-main > .elgg-head {
+ padding-bottom: 3px;
+ border-bottom: 1px solid #CCCCCC;
+ margin-bottom: 10px;
+}
+
+/***** PAGE FOOTER ******/
+.elgg-page-footer {
+ position: relative;
+}
+.elgg-page-footer {
+ color: #999;
+}
+.elgg-page-footer a:hover {
+ color: #666;
+}
diff --git a/views/default/css/elements/misc.php b/views/default/css/elements/misc.php
new file mode 100644
index 000000000..d9622d34a
--- /dev/null
+++ b/views/default/css/elements/misc.php
@@ -0,0 +1,62 @@
+/* ***************************************
+ MISC
+*************************************** */
+#login-dropdown {
+ position: absolute;
+ top:10px;
+ right:0;
+ z-index: 100;
+}
+
+/* ***************************************
+ AVATAR UPLOADING & CROPPING
+*************************************** */
+
+#current-user-avatar {
+ border-right:1px solid #ccc;
+}
+#avatar-croppingtool {
+ border-top: 1px solid #ccc;
+}
+#user-avatar-cropper {
+ float: left;
+}
+#user-avatar-preview {
+ float: left;
+ position: relative;
+ overflow: hidden;
+ width: 100px;
+ height: 100px;
+}
+
+/* ***************************************
+ FRIENDS COLLECTIONS
+*************************************** */
+
+#friends_collections_accordian li {
+ color: #666;
+}
+#friends_collections_accordian li h2 {
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ background: none repeat scroll 0 0 #4690D6;
+ color: white;
+ cursor: pointer;
+ font-size: 1.2em;
+ margin: 10px 0;
+ padding: 4px 2px 4px 6px;
+}
+#friends_collections_accordian li h2:hover {
+ background-color: #333;
+}
+#friends_collections_accordian .friends_collections_controls {
+ float: right;
+ font-size: 70%;
+}
+#friends_collections_accordian .friends-picker-main-wrapper {
+ background: none repeat scroll 0 0 white;
+ display: none;
+ padding: 0;
+}
diff --git a/views/default/css/elements/modules.php b/views/default/css/elements/modules.php
new file mode 100644
index 000000000..a37ae094b
--- /dev/null
+++ b/views/default/css/elements/modules.php
@@ -0,0 +1,194 @@
+/* ***************************************
+ Modules
+*************************************** */
+.elgg-module {
+ overflow: hidden;
+ margin-bottom: 20px;
+}
+
+/* Aside */
+.elgg-module-aside .elgg-head {
+ border-bottom: 1px solid #CCC;
+
+ margin-bottom: 5px;
+ padding-bottom: 5px;
+}
+
+/* Info */
+.elgg-module-info > .elgg-head {
+ background: #e4e4e4;
+ padding: 5px;
+ margin-bottom: 10px;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ border-radius: 3px;
+}
+.elgg-module-info > .elgg-head * {
+ color: #333;
+}
+
+/* Popup */
+.elgg-module-popup {
+ background-color: white;
+ border: 1px solid #ccc;
+
+ z-index: 9999;
+ margin-bottom: 0;
+ padding: 5px;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+
+ -webkit-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5);
+ -moz-box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5);
+ box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.5);
+}
+.elgg-module-popup > .elgg-head {
+ margin-bottom: 5px;
+}
+.elgg-module-popup > .elgg-head * {
+ color: #0054A7;
+}
+
+/* Dropdown */
+.elgg-module-dropdown {
+ background-color:white;
+ border:5px solid #CCC;
+
+ -webkit-border-radius: 5px 0 5px 5px;
+ -moz-border-radius: 5px 0 5px 5px;
+ border-radius: 5px 0 5px 5px;
+
+ display:none;
+
+ width: 210px;
+ padding: 12px;
+ margin-right: 0px;
+ z-index:100;
+
+ -webkit-box-shadow: 0 3px 3px rgba(0, 0, 0, 0.45);
+ -moz-box-shadow: 0 3px 3px rgba(0, 0, 0, 0.45);
+ box-shadow: 0 3px 3px rgba(0, 0, 0, 0.45);
+
+ position:absolute;
+ right: 0px;
+ top: 100%;
+}
+
+/* Featured */
+.elgg-module-featured {
+ border: 1px solid #4690D6;
+
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+}
+.elgg-module-featured > .elgg-head {
+ padding: 5px;
+ background-color: #4690D6;
+}
+.elgg-module-featured > .elgg-head * {
+ color: white;
+}
+.elgg-module-featured > .elgg-body {
+ padding: 10px;
+}
+
+/* ***************************************
+ Widgets
+*************************************** */
+.elgg-widgets {
+ float: right;
+ min-height: 30px;
+}
+.elgg-widget-add-control {
+ text-align: right;
+ margin: 5px 5px 15px;
+}
+.elgg-widgets-add-panel {
+ padding: 10px;
+ margin: 0 5px 15px;
+ background: #dedede;
+ border: 2px solid #ccc;
+}
+<?php //@todo location-dependent style: make an extension of elgg-gallery ?>
+.elgg-widgets-add-panel li {
+ float: left;
+ margin: 2px 10px;
+ width: 200px;
+ padding: 4px;
+ background-color: #ccc;
+ border: 2px solid #b0b0b0;
+ font-weight: bold;
+}
+.elgg-widgets-add-panel li a {
+ display: block;
+}
+.elgg-widgets-add-panel .elgg-state-available {
+ color: #333;
+ cursor: pointer;
+}
+.elgg-widgets-add-panel .elgg-state-available:hover {
+ background-color: #bcbcbc;
+}
+.elgg-widgets-add-panel .elgg-state-unavailable {
+ color: #888;
+}
+
+.elgg-module-widget {
+ background-color: #dedede;
+ padding: 2px;
+ margin: 0 5px 15px;
+ position: relative;
+}
+.elgg-module-widget:hover {
+ background-color: #ccc;
+}
+.elgg-module-widget > .elgg-head {
+ background-color: #eeeeee;
+ height: 26px;
+ overflow: hidden;
+}
+.elgg-module-widget > .elgg-head h3 {
+ float: left;
+ padding: 4px 45px 0 20px;
+ color: #666;
+}
+.elgg-module-widget.elgg-state-draggable .elgg-widget-handle {
+ cursor: move;
+}
+a.elgg-widget-collapse-button {
+ color: #c5c5c5;
+}
+a.elgg-widget-collapse-button:hover,
+a.elgg-widget-collapsed:hover {
+ color: #9d9d9d;
+ text-decoration: none;
+}
+a.elgg-widget-collapse-button:before {
+ content: "\25BC";
+}
+a.elgg-widget-collapsed:before {
+ content: "\25BA";
+}
+.elgg-module-widget > .elgg-body {
+ background-color: white;
+ width: 100%;
+ overflow: hidden;
+ border-top: 2px solid #dedede;
+}
+.elgg-widget-edit {
+ display: none;
+ width: 96%;
+ padding: 2%;
+ border-bottom: 2px solid #dedede;
+ background-color: #f9f9f9;
+}
+.elgg-widget-content {
+ padding: 10px;
+}
+.elgg-widget-placeholder {
+ border: 2px dashed #dedede;
+ margin-bottom: 15px;
+}
diff --git a/views/default/css/elements/navigation.php b/views/default/css/elements/navigation.php
new file mode 100644
index 000000000..62f370069
--- /dev/null
+++ b/views/default/css/elements/navigation.php
@@ -0,0 +1,559 @@
+<?php
+/**
+ * Navigation
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+
+/* ***************************************
+ PAGINATION
+*************************************** */
+.elgg-pagination {
+ margin: 10px 0;
+ display: block;
+ text-align: center;
+}
+.elgg-pagination li {
+ display: inline;
+ margin: 0 6px 0 0;
+ text-align: center;
+}
+.elgg-pagination a, .elgg-pagination span {
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+
+ padding: 2px 6px;
+ color: #4690d6;
+ border: 1px solid #4690d6;
+ font-size: 12px;
+}
+.elgg-pagination a:hover {
+ background: #4690d6;
+ color: white;
+ text-decoration: none;
+}
+.elgg-pagination .elgg-state-disabled span {
+ color: #CCCCCC;
+ border-color: #CCCCCC;
+}
+.elgg-pagination .elgg-state-selected span {
+ color: #555555;
+ border-color: #555555;
+}
+
+/* ***************************************
+ TABS
+*************************************** */
+.elgg-tabs {
+ margin-bottom: 5px;
+ border-bottom: 2px solid #cccccc;
+ display: table;
+ width: 100%;
+}
+.elgg-tabs li {
+ float: left;
+ border: 2px solid #ccc;
+ border-bottom: 0;
+ background: #eee;
+ margin: 0 0 0 10px;
+
+ -webkit-border-radius: 5px 5px 0 0;
+ -moz-border-radius: 5px 5px 0 0;
+ border-radius: 5px 5px 0 0;
+}
+.elgg-tabs a {
+ text-decoration: none;
+ display: block;
+ padding: 3px 10px 0 10px;
+ text-align: center;
+ height: 21px;
+ color: #999;
+}
+.elgg-tabs a:hover {
+ background: #dedede;
+ color: #4690D6;
+}
+.elgg-tabs .elgg-state-selected {
+ border-color: #ccc;
+ background: white;
+}
+.elgg-tabs .elgg-state-selected a {
+ position: relative;
+ top: 2px;
+ background: white;
+}
+
+/* ***************************************
+ BREADCRUMBS
+*************************************** */
+.elgg-breadcrumbs {
+ font-size: 80%;
+ font-weight: bold;
+ line-height: 1.2em;
+ color: #bababa;
+}
+.elgg-breadcrumbs > li {
+ display: inline-block;
+}
+.elgg-breadcrumbs > li:after {
+ content: "\003E";
+ padding: 0 4px;
+ font-weight: normal;
+}
+.elgg-breadcrumbs > li > a {
+ display: inline-block;
+ color: #999;
+}
+.elgg-breadcrumbs > li > a:hover {
+ color: #0054a7;
+ text-decoration: underline;
+}
+
+.elgg-main .elgg-breadcrumbs {
+ position: relative;
+ top: -6px;
+ left: 0;
+}
+
+/* ***************************************
+ TOPBAR MENU
+*************************************** */
+.elgg-menu-topbar {
+ float: left;
+}
+
+.elgg-menu-topbar > li {
+ float: left;
+}
+
+.elgg-menu-topbar > li > a {
+ padding-top: 2px;
+ color: #eee;
+ margin: 1px 15px 0;
+}
+
+.elgg-menu-topbar > li > a:hover {
+ color: #4690D6;
+ text-decoration: none;
+}
+
+.elgg-menu-topbar-alt {
+ float: right;
+}
+
+.elgg-menu-topbar .elgg-icon {
+ vertical-align: middle;
+ margin-top: -1px;
+}
+
+.elgg-menu-topbar > li > a.elgg-topbar-logo {
+ margin-top: 0;
+ padding-left: 5px;
+ width: 38px;
+ height: 20px;
+}
+
+.elgg-menu-topbar > li > a.elgg-topbar-avatar {
+ width: 18px;
+ height: 18px;
+}
+
+/* ***************************************
+ SITE MENU
+*************************************** */
+.elgg-menu-site {
+ z-index: 1;
+}
+
+.elgg-menu-site > li > a {
+ font-weight: bold;
+ padding: 3px 13px 0px 13px;
+ height: 20px;
+}
+
+.elgg-menu-site > li > a:hover {
+ text-decoration: none;
+}
+
+.elgg-menu-site-default {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ height: 23px;
+}
+
+.elgg-menu-site-default > li {
+ float: left;
+ margin-right: 1px;
+}
+
+.elgg-menu-site-default > li > a {
+ color: white;
+}
+
+.elgg-menu-site > li > ul {
+ display: none;
+ background-color: white;
+}
+
+.elgg-menu-site > li:hover > ul {
+ display: block;
+}
+
+.elgg-menu-site-default > .elgg-state-selected > a,
+.elgg-menu-site-default > li:hover > a {
+ background: white;
+ color: #555;
+
+ -webkit-box-shadow: 2px -1px 1px rgba(0, 0, 0, 0.25);
+ -moz-box-shadow: 2px -1px 1px rgba(0, 0, 0, 0.25);
+ box-shadow: 2px -1px 1px rgba(0, 0, 0, 0.25);
+
+ -webkit-border-radius: 4px 4px 0 0;
+ -moz-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+.elgg-menu-site-more {
+ position: relative;
+ left: -1px;
+ width: 100%;
+ min-width: 150px;
+ border: 1px solid #999;
+ border-top: 0;
+
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+
+ -webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.25);
+ -moz-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.25);
+ box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.25);
+}
+
+.elgg-menu-site-more > li > a {
+ background-color: white;
+ color: #555;
+
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ border-radius: 0;
+
+ -webkit-box-shadow: none;
+ -moz-box-shadow: none;
+ box-shadow: none;
+}
+
+.elgg-menu-site-more > li > a:hover {
+ background: #4690D6;
+ color: white;
+}
+
+.elgg-menu-site-more > li:last-child > a,
+.elgg-menu-site-more > li:last-child > a:hover {
+ -webkit-border-radius: 0 0 4px 4px;
+ -moz-border-radius: 0 0 4px 4px;
+ border-radius: 0 0 4px 4px;
+}
+
+.elgg-more > a:before {
+ content: "\25BC";
+ font-size: smaller;
+ margin-right: 4px;
+}
+
+/* ***************************************
+ TITLE
+*************************************** */
+.elgg-menu-title {
+ float: right;
+}
+
+.elgg-menu-title > li {
+ display: inline-block;
+ margin-left: 4px;
+}
+
+/* ***************************************
+ FILTER MENU
+*************************************** */
+.elgg-menu-filter {
+ margin-bottom: 5px;
+ border-bottom: 2px solid #ccc;
+ display: table;
+ width: 100%;
+}
+.elgg-menu-filter > li {
+ float: left;
+ border: 2px solid #ccc;
+ border-bottom: 0;
+ background: #eee;
+ margin: 0 0 0 10px;
+
+ -webkit-border-radius: 5px 5px 0 0;
+ -moz-border-radius: 5px 5px 0 0;
+ border-radius: 5px 5px 0 0;
+}
+.elgg-menu-filter > li:hover {
+ background: #dedede;
+}
+.elgg-menu-filter > li > a {
+ text-decoration: none;
+ display: block;
+ padding: 3px 10px 0;
+ text-align: center;
+ height: 21px;
+ color: #999;
+}
+.elgg-menu-filter > li > a:hover {
+ background: #dedede;
+ color: #4690D6;
+}
+.elgg-menu-filter > .elgg-state-selected {
+ border-color: #ccc;
+ background: white;
+}
+.elgg-menu-filter > .elgg-state-selected > a {
+ position: relative;
+ top: 2px;
+ background: white;
+}
+
+/* ***************************************
+ PAGE MENU
+*************************************** */
+.elgg-menu-page {
+ margin-bottom: 15px;
+}
+
+.elgg-menu-page a {
+ display: block;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ background-color: white;
+ margin: 0 0 3px;
+ padding: 2px 4px 2px 8px;
+}
+.elgg-menu-page a:hover {
+ background-color: #0054A7;
+ color: white;
+ text-decoration: none;
+}
+.elgg-menu-page li.elgg-state-selected > a {
+ background-color: #4690D6;
+ color: white;
+}
+.elgg-menu-page .elgg-child-menu {
+ display: none;
+ margin-left: 15px;
+}
+.elgg-menu-page .elgg-menu-closed:before, .elgg-menu-opened:before {
+ display: inline-block;
+ padding-right: 4px;
+}
+.elgg-menu-page .elgg-menu-closed:before {
+ content: "\002B";
+}
+.elgg-menu-page .elgg-menu-opened:before {
+ content: "\002D";
+}
+
+/* ***************************************
+ HOVER MENU
+*************************************** */
+.elgg-menu-hover {
+ display: none;
+ position: absolute;
+ z-index: 10000;
+
+ overflow: hidden;
+
+ min-width: 165px;
+ max-width: 250px;
+ border: solid 1px;
+ border-color: #E5E5E5 #999 #999 #E5E5E5;
+ background-color: #FFF;
+
+ -webkit-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50);
+ -moz-box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50);
+ box-shadow: 2px 2px 6px rgba(0, 0, 0, 0.50);
+}
+.elgg-menu-hover > li {
+ border-bottom: 1px solid #ddd;
+}
+.elgg-menu-hover > li:last-child {
+ border-bottom: none;
+}
+.elgg-menu-hover .elgg-heading-basic {
+ display: block;
+}
+.elgg-menu-hover a {
+ padding: 2px 8px;
+ font-size: 92%;
+}
+.elgg-menu-hover a:hover {
+ background: #ccc;
+ text-decoration: none;
+}
+.elgg-menu-hover-admin a {
+ color: red;
+}
+.elgg-menu-hover-admin a:hover {
+ color: white;
+ background-color: red;
+}
+
+/* ***************************************
+ SITE FOOTER
+*************************************** */
+.elgg-menu-footer > li,
+.elgg-menu-footer > li > a {
+ display: inline-block;
+ color: #999;
+}
+
+.elgg-menu-footer > li:after {
+ content: "\007C";
+ padding: 0 4px;
+}
+
+.elgg-menu-footer-default {
+ float: right;
+}
+
+.elgg-menu-footer-alt {
+ float: left;
+}
+
+/* ***************************************
+ GENERAL MENU
+*************************************** */
+.elgg-menu-general > li,
+.elgg-menu-general > li > a {
+ display: inline-block;
+ color: #999;
+}
+
+.elgg-menu-general > li:after {
+ content: "\007C";
+ padding: 0 4px;
+}
+
+/* ***************************************
+ ENTITY AND ANNOTATION
+*************************************** */
+<?php // height depends on line height/font size ?>
+.elgg-menu-entity, elgg-menu-annotation {
+ float: right;
+ margin-left: 15px;
+ font-size: 90%;
+ color: #aaa;
+ line-height: 16px;
+ height: 16px;
+}
+.elgg-menu-entity > li, .elgg-menu-annotation > li {
+ margin-left: 15px;
+}
+.elgg-menu-entity > li > a, .elgg-menu-annotation > li > a {
+ color: #aaa;
+}
+<?php // need to override .elgg-menu-hz ?>
+.elgg-menu-entity > li > a, .elgg-menu-annotation > li > a {
+ display: block;
+}
+.elgg-menu-entity > li > span, .elgg-menu-annotation > li > span {
+ vertical-align: baseline;
+}
+
+/* ***************************************
+ OWNER BLOCK
+*************************************** */
+.elgg-menu-owner-block li a {
+ display: block;
+
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+
+ background-color: white;
+ margin: 3px 0 5px 0;
+ padding: 2px 4px 2px 8px;
+}
+.elgg-menu-owner-block li a:hover {
+ background-color: #0054A7;
+ color: white;
+ text-decoration: none;
+}
+.elgg-menu-owner-block li.elgg-state-selected > a {
+ background-color: #4690D6;
+ color: white;
+}
+
+/* ***************************************
+ LONGTEXT
+*************************************** */
+.elgg-menu-longtext {
+ float: right;
+}
+
+/* ***************************************
+ RIVER
+*************************************** */
+.elgg-menu-river {
+ float: right;
+ margin-left: 15px;
+ font-size: 90%;
+ color: #aaa;
+ line-height: 16px;
+ height: 16px;
+}
+.elgg-menu-river > li {
+ display: inline-block;
+ margin-left: 5px;
+}
+.elgg-menu-river > li > a {
+ color: #aaa;
+ height: 16px;
+}
+<?php // need to override .elgg-menu-hz ?>
+.elgg-menu-river > li > a {
+ display: block;
+}
+.elgg-menu-river > li > span {
+ vertical-align: baseline;
+}
+
+/* ***************************************
+ SIDEBAR EXTRAS (rss, bookmark, etc)
+*************************************** */
+.elgg-menu-extras {
+ margin-bottom: 15px;
+}
+
+/* ***************************************
+ WIDGET MENU
+*************************************** */
+.elgg-menu-widget > li {
+ position: absolute;
+ top: 4px;
+ display: inline-block;
+ width: 18px;
+ height: 18px;
+ padding: 2px 2px 0 0;
+}
+
+.elgg-menu-widget > .elgg-menu-item-collapse {
+ left: 5px;
+}
+.elgg-menu-widget > .elgg-menu-item-delete {
+ right: 5px;
+}
+.elgg-menu-widget > .elgg-menu-item-settings {
+ right: 25px;
+}
diff --git a/views/default/css/elements/reset.php b/views/default/css/elements/reset.php
new file mode 100644
index 000000000..44bf2fac9
--- /dev/null
+++ b/views/default/css/elements/reset.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * CSS reset
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+
+/* ***************************************
+ RESET CSS
+*************************************** */
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+}
+body {
+ background-color: white;
+}
+<?php // force vertical scroll bar ?>
+html, body {
+ height: 100%;
+ margin-bottom: 1px;
+}
+img {
+ border-width:0;
+ border-color:transparent;
+}
+:focus {
+ outline: 0 none;
+}
+ol, ul {
+ list-style: none;
+}
+em, i {
+ font-style:italic;
+}
+ins {
+ text-decoration:none;
+}
+del {
+ text-decoration:line-through;
+}
+strong, b {
+ font-weight:bold;
+}
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+caption, th, td {
+ text-align: left;
+ font-weight: normal;
+ vertical-align: top;
+}
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: "";
+}
+blockquote, q {
+ quotes: "" "";
+}
+a {
+ text-decoration: none;
+}
diff --git a/views/default/css/elements/typography.php b/views/default/css/elements/typography.php
new file mode 100644
index 000000000..c044cb1cc
--- /dev/null
+++ b/views/default/css/elements/typography.php
@@ -0,0 +1,162 @@
+<?php
+/**
+ * CSS typography
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+?>
+
+/* ***************************************
+ Typography
+*************************************** */
+body {
+ font-size: 80%;
+ line-height: 1.4em;
+ font-family: "Lucida Grande", Arial, Tahoma, Verdana, sans-serif;
+}
+
+a {
+ color: #4690D6;
+}
+
+a:hover,
+a.selected { <?php //@todo remove .selected ?>
+ color: #555555;
+ text-decoration: underline;
+}
+
+p {
+ margin-bottom: 15px;
+}
+
+p:last-child {
+ margin-bottom: 0;
+}
+
+pre, code {
+ font-family: Monaco, "Courier New", Courier, monospace;
+ font-size: 12px;
+
+ background:#EBF5FF;
+ color:#000000;
+ overflow:auto;
+
+ overflow-x: auto; /* Use horizontal scroller if needed; for Firefox 2, not needed in Firefox 3 */
+
+ white-space: pre-wrap;
+ word-wrap: break-word; /* IE 5.5-7 */
+
+}
+
+pre {
+ padding:3px 15px;
+ margin:0px 0 15px 0;
+ line-height:1.3em;
+}
+
+code {
+ padding:2px 3px;
+}
+
+.elgg-monospace {
+ font-family: Monaco, "Courier New", Courier, monospace;
+}
+
+blockquote {
+ line-height: 1.3em;
+ padding:3px 15px;
+ margin:0px 0 15px 0;
+ background:#EBF5FF;
+ border:none;
+
+ -webkit-border-radius: 4px;
+ -moz-border-radius: 4px;
+ border-radius: 4px;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: bold;
+ color: #0054A7;
+}
+
+h1 { font-size: 1.8em; }
+h2 { font-size: 1.5em; line-height: 1.1em; padding-bottom:5px}
+h3 { font-size: 1.2em; }
+h4 { font-size: 1.0em; }
+h5 { font-size: 0.9em; }
+h6 { font-size: 0.8em; }
+
+.elgg-heading-site, .elgg-heading-site:hover {
+ font-size: 2em;
+ line-height: 1.4em;
+ color: white;
+ font-style: italic;
+ font-family: Georgia, times, serif;
+ text-shadow: 1px 2px 4px #333333;
+ text-decoration: none;
+}
+
+.elgg-heading-main {
+ float: left;
+ max-width: 530px;
+ margin-right: 10px;
+}
+.elgg-heading-basic {
+ color: #0054A7;
+ font-size: 1.2em;
+ font-weight: bold;
+}
+
+.elgg-subtext {
+ color: #666666;
+ font-size: 85%;
+ line-height: 1.2em;
+ font-style: italic;
+}
+
+.elgg-text-help {
+ display: block;
+ font-size: 85%;
+ font-style: italic;
+}
+
+.elgg-quiet {
+ color: #666;
+}
+
+.elgg-loud {
+ color: #0054A7;
+}
+
+/* ***************************************
+ USER INPUT DISPLAY RESET
+*************************************** */
+.elgg-output {
+ margin-top: 10px;
+}
+
+.elgg-output dt { font-weight: bold }
+.elgg-output dd { margin: 0 0 1em 1em }
+
+.elgg-output ul, .elgg-output ol {
+ margin: 0 1.5em 1.5em 0;
+ padding-left: 1.5em;
+}
+.elgg-output ul {
+ list-style-type: disc;
+}
+.elgg-output ol {
+ list-style-type: decimal;
+}
+.elgg-output table {
+ border: 1px solid #ccc;
+}
+.elgg-output table td {
+ border: 1px solid #ccc;
+ padding: 3px 5px;
+}
+.elgg-output img {
+ max-width: 100%;
+ height: auto;
+}
diff --git a/views/default/css/elgg.php b/views/default/css/elgg.php
new file mode 100644
index 000000000..4960e6ade
--- /dev/null
+++ b/views/default/css/elgg.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Elgg primary CSS view
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+
+/*
+ * Colors:
+ * #4690D6 - elgg light blue
+ * #0054A7 - elgg dark blue
+ * #e4ecf5 - elgg very light blue
+ */
+
+// check if there is a theme overriding the old css view and use it, if it exists
+$old_css_view = elgg_get_view_location('css');
+if ($old_css_view != elgg_get_config('viewpath')) {
+ echo elgg_view('css', $vars);
+ return true;
+}
+
+
+/*******************************************************************************
+
+Base CSS
+ * CSS reset
+ * core
+ * helpers (moved to end to have a higher priority)
+ * grid
+
+*******************************************************************************/
+echo elgg_view('css/elements/reset', $vars);
+echo elgg_view('css/elements/core', $vars);
+echo elgg_view('css/elements/grid', $vars);
+
+
+/*******************************************************************************
+
+Skin CSS
+ * typography - fonts, line spacing
+ * forms - forms, inputs
+ * buttons - action, cancel, delete, submit, dropdown, special
+ * navigation - menus, breadcrumbs, pagination
+ * icons - icons, sprites, graphics
+ * modules - modules, widgets
+ * layout_objects - lists, content blocks, notifications, avatars
+ * layout - page layout
+ * misc - to be removed/redone
+
+*******************************************************************************/
+echo elgg_view('css/elements/typography', $vars);
+echo elgg_view('css/elements/forms', $vars);
+echo elgg_view('css/elements/buttons', $vars);
+echo elgg_view('css/elements/icons', $vars);
+echo elgg_view('css/elements/navigation', $vars);
+echo elgg_view('css/elements/modules', $vars);
+echo elgg_view('css/elements/components', $vars);
+echo elgg_view('css/elements/layout', $vars);
+echo elgg_view('css/elements/misc', $vars);
+
+
+// included last to have higher priority
+echo elgg_view('css/elements/helpers', $vars);
+
+
+// in case plugins are still extending the old 'css' view, display it
+echo elgg_view('css', $vars);
diff --git a/views/default/css/ie.php b/views/default/css/ie.php
new file mode 100644
index 000000000..4bddd4d55
--- /dev/null
+++ b/views/default/css/ie.php
@@ -0,0 +1,8 @@
+/**
+ * CSS for IE8 and above
+ */
+
+/* ie8 does not like shrink wrapping this div with inline-block */
+.elgg-avatar {
+ display: block;
+}
diff --git a/views/default/css/ie6.php b/views/default/css/ie6.php
new file mode 100644
index 000000000..cf49d33f2
--- /dev/null
+++ b/views/default/css/ie6.php
@@ -0,0 +1,12 @@
+/**
+ * CSS for IE6
+ */
+
+* {zoom: 1;} /* trigger hasLayout in IE */
+
+/* main nav drop-down */
+#elgg-header {z-index:1;}
+
+/* @todo check this one */
+.elgg-button-delete a { background-position-y: 2px; }
+.elgg-button-delete a:hover { background-position-y: -14px; } \ No newline at end of file
diff --git a/views/default/css/ie7.php b/views/default/css/ie7.php
new file mode 100644
index 000000000..db0125b4b
--- /dev/null
+++ b/views/default/css/ie7.php
@@ -0,0 +1,65 @@
+/**
+ * CSS for IE7
+ */
+
+/* trigger hasLayout in IE */
+* {
+ zoom: 1;
+}
+
+/* site menu drop-down z-index fix for IE7 */
+.elgg-page-header {
+ z-index: 1;
+}
+
+/* inline-block fixes */
+.elgg-gallery > li,
+.elgg-button,
+.elgg-icon,
+.elgg-menu-hz > li,
+.elgg-menu-hz > li:after,
+.elgg-menu-hz > li > a,
+.elgg-menu-hz > li > span,
+.elgg-breadcrumbs > li,
+.elgg-menu-footer > li > a,
+.elgg-menu-footer li,
+.elgg-menu-general > li > a,
+.elgg-menu-general li {
+ display: inline;
+}
+
+/* IE7 does not support :after */
+.elgg-breadcrumbs > li > a {
+ display: inline;
+ padding-right: 4px;
+ margin-right: 4px;
+ border-right: 1px solid #bababa;
+}
+.elgg-menu-footer li,
+.elgg-menu-user li,
+.elgg-menu-general li {
+ padding-left: 4px;
+ padding-right: 4px;
+}
+
+/* longtext menu would not display horizontally without this */
+.elgg-menu-longtext {
+ width: 100%;
+}
+.elgg-menu-longtext li {
+ width: 100px;
+ float: right;
+}
+
+.elgg-avatar {
+ display: inline;
+}
+
+.elgg-body-walledgarden .elgg-col-1of2 {
+ width: 255px;
+}
+
+.elgg-module-walledgarden > .elgg-head,
+.elgg-module-walledgarden > .elgg-foot {
+ width: 530px;
+} \ No newline at end of file
diff --git a/views/default/css/lightbox.php b/views/default/css/lightbox.php
new file mode 100644
index 000000000..7d5917cc3
--- /dev/null
+++ b/views/default/css/lightbox.php
@@ -0,0 +1,371 @@
+<?php
+/**
+ * Fancybox lightbox CSS.
+ *
+ * Used as a view because we need to pass a full URL to AlphaImageLoader.
+ *
+ * @package Elgg.Core
+ * @subpackage UI
+ */
+
+$jquery_path = elgg_get_site_url() . 'vendors/jquery/';
+?>
+
+/*
+ * FancyBox - jQuery Plugin
+ * Simple and fancy lightbox alternative
+ *
+ * Examples and documentation at: http://fancybox.net
+ *
+ * Copyright (c) 2008 - 2010 Janis Skarnelis
+ * That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
+ *
+ * Version: 1.3.4 (11/11/2010)
+ * Requires: jQuery v1.3+
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+#fancybox-loading {
+ position: fixed;
+ top: 50%;
+ left: 50%;
+ width: 40px;
+ height: 40px;
+ margin-top: -20px;
+ margin-left: -20px;
+ cursor: pointer;
+ overflow: hidden;
+ z-index: 1104;
+ display: none;
+}
+
+#fancybox-loading div {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 40px;
+ height: 480px;
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png');
+}
+
+#fancybox-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ z-index: 1100;
+ display: none;
+}
+
+#fancybox-tmp {
+ padding: 0;
+ margin: 0;
+ border: 0;
+ overflow: auto;
+ display: none;
+}
+
+#fancybox-wrap {
+ position: absolute;
+ top: 0;
+ left: 0;
+ padding: 20px;
+ z-index: 1101;
+ outline: none;
+ display: none;
+}
+
+#fancybox-outer {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ background: #fff;
+}
+
+#fancybox-content {
+ width: 0;
+ height: 0;
+ padding: 0;
+ outline: none;
+ position: relative;
+ overflow: hidden;
+ z-index: 1102;
+ border: 0px solid #fff;
+}
+
+#fancybox-hide-sel-frame {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: transparent;
+ z-index: 1101;
+}
+
+#fancybox-close {
+ position: absolute;
+ top: -15px;
+ right: -15px;
+ width: 30px;
+ height: 30px;
+ background: transparent url('<?php echo $jquery_path; ?>fancybox/fancybox.png') -40px 0px;
+ cursor: pointer;
+ z-index: 1103;
+ display: none;
+}
+
+#fancybox-error {
+ color: #444;
+ font: normal 12px/20px Arial;
+ padding: 14px;
+ margin: 0;
+}
+
+#fancybox-img {
+ width: 100%;
+ height: 100%;
+ padding: 0;
+ margin: 0;
+ border: none;
+ outline: none;
+ line-height: 0;
+ vertical-align: top;
+}
+
+#fancybox-frame {
+ width: 100%;
+ height: 100%;
+ border: none;
+ display: block;
+}
+
+#fancybox-left, #fancybox-right {
+ position: absolute;
+ bottom: 0px;
+ height: 100%;
+ width: 35%;
+ cursor: pointer;
+ outline: none;
+ background: transparent url('<?php echo $jquery_path; ?>fancybox/blank.gif');
+ z-index: 1102;
+ display: none;
+}
+
+#fancybox-left {
+ left: 0px;
+}
+
+#fancybox-right {
+ right: 0px;
+}
+
+#fancybox-left-ico, #fancybox-right-ico {
+ position: absolute;
+ top: 50%;
+ left: -9999px;
+ width: 30px;
+ height: 30px;
+ margin-top: -15px;
+ cursor: pointer;
+ z-index: 1102;
+ display: block;
+}
+
+#fancybox-left-ico {
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png');
+ background-position: -40px -30px;
+}
+
+#fancybox-right-ico {
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png');
+ background-position: -40px -60px;
+}
+
+#fancybox-left:hover, #fancybox-right:hover {
+ visibility: visible; /* IE6 */
+}
+
+#fancybox-left:hover span {
+ left: 20px;
+}
+
+#fancybox-right:hover span {
+ left: auto;
+ right: 20px;
+}
+
+.fancybox-bg {
+ position: absolute;
+ padding: 0;
+ margin: 0;
+ border: 0;
+ width: 20px;
+ height: 20px;
+ z-index: 1001;
+}
+
+#fancybox-bg-n {
+ top: -20px;
+ left: 0;
+ width: 100%;
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox-x.png');
+}
+
+#fancybox-bg-ne {
+ top: -20px;
+ right: -20px;
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png');
+ background-position: -40px -162px;
+}
+
+#fancybox-bg-e {
+ top: 0;
+ right: -20px;
+ height: 100%;
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox-y.png');
+ background-position: -20px 0px;
+}
+
+#fancybox-bg-se {
+ bottom: -20px;
+ right: -20px;
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png');
+ background-position: -40px -182px;
+}
+
+#fancybox-bg-s {
+ bottom: -20px;
+ left: 0;
+ width: 100%;
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox-x.png');
+ background-position: 0px -20px;
+}
+
+#fancybox-bg-sw {
+ bottom: -20px;
+ left: -20px;
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png');
+ background-position: -40px -142px;
+}
+
+#fancybox-bg-w {
+ top: 0;
+ left: -20px;
+ height: 100%;
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox-y.png');
+}
+
+#fancybox-bg-nw {
+ top: -20px;
+ left: -20px;
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancybox.png');
+ background-position: -40px -122px;
+}
+
+#fancybox-title {
+ font-family: Helvetica;
+ font-size: 12px;
+ z-index: 1102;
+}
+
+.fancybox-title-inside {
+ padding-bottom: 10px;
+ text-align: center;
+ color: #333;
+ background: #fff;
+ position: relative;
+}
+
+.fancybox-title-outside {
+ padding-top: 10px;
+ color: #fff;
+}
+
+.fancybox-title-over {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ color: #FFF;
+ text-align: left;
+}
+
+#fancybox-title-over {
+ padding: 10px;
+ background-image: url('<?php echo $jquery_path; ?>fancybox/fancy_title_over.png');
+ display: block;
+}
+
+.fancybox-title-float {
+ position: absolute;
+ left: 0;
+ bottom: -20px;
+ height: 32px;
+}
+
+#fancybox-title-float-wrap {
+ border: none;
+ border-collapse: collapse;
+ width: auto;
+}
+
+#fancybox-title-float-wrap td {
+ border: none;
+ white-space: nowrap;
+}
+
+#fancybox-title-float-left {
+ padding: 0 0 0 15px;
+ background: url('<?php echo $jquery_path; ?>fancybox/fancybox.png') -40px -90px no-repeat;
+}
+
+#fancybox-title-float-main {
+ color: #FFF;
+ line-height: 29px;
+ font-weight: bold;
+ padding: 0 0 3px 0;
+ background: url('<?php echo $jquery_path; ?>fancybox/fancybox-x.png') 0px -40px;
+}
+
+#fancybox-title-float-right {
+ padding: 0 0 0 15px;
+ background: url('<?php echo $jquery_path; ?>fancybox/fancybox.png') -55px -90px no-repeat;
+}
+
+/* IE6 */
+
+.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_close.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_nav_left.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_nav_right.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
+.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_title_left.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_title_main.png', sizingMethod='scale'); }
+.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_title_right.png', sizingMethod='scale'); }
+
+.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame {
+ height: expression(this.parentNode.clientHeight + "px");
+}
+
+#fancybox-loading.fancybox-ie6 {
+ position: absolute; margin-top: 0;
+ top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px');
+}
+
+#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_loading.png', sizingMethod='scale'); }
+
+/* IE6, IE7, IE8 */
+.fancybox-ie .fancybox-bg { background: transparent !important; }
+
+.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
+.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='<?php echo $jquery_path; ?>fancybox/fancy_shadow_nw.png', sizingMethod='scale'); } \ No newline at end of file
diff --git a/views/default/css/walled_garden.php b/views/default/css/walled_garden.php
new file mode 100644
index 000000000..f6f7f97dc
--- /dev/null
+++ b/views/default/css/walled_garden.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Walled garden CSS
+ */
+
+$url = elgg_get_site_url();
+
+?>
+.elgg-body-walledgarden {
+ margin: 100px auto 0 auto;
+ position: relative;
+ width: 530px;
+}
+.elgg-module-walledgarden {
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+.elgg-module-walledgarden > .elgg-head {
+ height: 17px;
+}
+.elgg-module-walledgarden > .elgg-body {
+ padding: 0 10px;
+}
+.elgg-module-walledgarden > .elgg-foot {
+ height: 17px;
+}
+.elgg-walledgarden-double > .elgg-head {
+ background: url(<?php echo $url; ?>_graphics/walled_garden/two_column_top.png) no-repeat left top;
+}
+.elgg-walledgarden-double > .elgg-body {
+ background: url(<?php echo $url; ?>_graphics/walled_garden/two_column_middle.png) repeat-y left top;
+}
+.elgg-walledgarden-double > .elgg-foot {
+ background: url(<?php echo $url; ?>_graphics/walled_garden/two_column_bottom.png) no-repeat left top;
+}
+.elgg-walledgarden-single > .elgg-head {
+ background: url(<?php echo $url; ?>_graphics/walled_garden/one_column_top.png) no-repeat left top;
+}
+.elgg-walledgarden-single > .elgg-body {
+ background: url(<?php echo $url; ?>_graphics/walled_garden/one_column_middle.png) repeat-y left top;
+}
+.elgg-walledgarden-single > .elgg-foot {
+ background: url(<?php echo $url; ?>_graphics/walled_garden/one_column_bottom.png) no-repeat left top;
+}
+
+.elgg-col > .elgg-inner {
+ margin: 0 0 0 5px;
+}
+.elgg-col:first-child > .elgg-inner {
+ margin: 0 5px 0 0;
+}
+.elgg-col > .elgg-inner {
+ padding: 0 8px;
+}
+
+.elgg-walledgarden-single > .elgg-body {
+ padding: 0 18px;
+}
+
+.elgg-module-walledgarden-login {
+ margin: 0;
+}
+.elgg-body-walledgarden h3 {
+ font-size: 1.5em;
+ line-height: 1.1em;
+ padding-bottom: 5px;
+}
+
+.elgg-heading-walledgarden {
+ margin-top: 60px;
+ line-height: 1.1em;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: #666;
+}
+
+a {
+ color: #999;
+} \ No newline at end of file
diff --git a/views/default/errors/404.php b/views/default/errors/404.php
new file mode 100644
index 000000000..8bc35acdd
--- /dev/null
+++ b/views/default/errors/404.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Page not found error
+ */
+
+$message = elgg_echo('error:404');
+
+echo "<h2>$message</h2>";
diff --git a/views/default/errors/default.php b/views/default/errors/default.php
new file mode 100644
index 000000000..a0582eba2
--- /dev/null
+++ b/views/default/errors/default.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * General error
+ */
+
+$message = elgg_echo('error:default');
+
+echo "<h2>$message</h2>";
diff --git a/views/default/export/entity.php b/views/default/export/entity.php
new file mode 100644
index 000000000..3064f1288
--- /dev/null
+++ b/views/default/export/entity.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Elgg Entity export.
+ * Displays an entity using the current view.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$entity = $vars['entity'];
+if (!$entity) {
+ throw new InvalidParameterException(elgg_echo('InvalidParameterException:NoEntityFound'));
+}
+$options = array(
+ 'guid' => $entity->guid,
+ 'limit' => 0
+);
+$metadata = elgg_get_metadata($options);
+$annotations = elgg_get_annotations($options);
+$relationships = get_entity_relationships($entity->guid);
+
+$exportable_values = $entity->getExportableValues();
+?>
+<div>
+<h2><?php echo elgg_echo('Entity'); ?></h2>
+ <?php
+ foreach ($entity as $k => $v) {
+ if ((in_array($k, $exportable_values)) || (elgg_is_admin_logged_in())) {
+?>
+ <p class="margin-none"><b><?php echo $k; ?>: </b><?php echo strip_tags($v); ?></p>
+<?php
+ }
+ }
+ ?>
+</div>
+
+<?php if ($metadata) { ?>
+<div id="metadata" class="mtm">
+<h2><?php echo elgg_echo('metadata'); ?></h2>
+ <?php
+ foreach ($metadata as $m) {
+?>
+ <p class="margin-none"><b><?php echo $m->name; ?>: </b><?php echo $m->value; ?></p>
+<?php
+ }
+ ?>
+
+</div>
+<?php } ?>
+
+<?php if ($annotations) { ?>
+<div id="annotations" class="mtm">
+<h2><?php echo elgg_echo('annotations'); ?></h2>
+ <?php
+ foreach ($annotations as $a) {
+?>
+ <table>
+ <p class="margin-none"><b><?php echo $a->name; ?>: </b><?php echo $a->value; ?></p>
+ </table>
+<?php
+ }
+ ?>
+</div>
+<?php } ?>
+
+<?php if ($relationships) { ?>
+<div id="relationship" class="mtm">
+<h2><?php echo elgg_echo('relationships'); ?></h2>
+ <?php
+ foreach ($relationships as $r) {
+?>
+ <table>
+ <p class="margin-none"><b><?php echo $r->relationship; ?>: </b><?php echo $r->guid_two; ?></p>
+ </table>
+<?php
+ }
+ ?>
+</div>
+<?php } ?>
diff --git a/views/default/export/metadata.php b/views/default/export/metadata.php
new file mode 100644
index 000000000..1dd7f2054
--- /dev/null
+++ b/views/default/export/metadata.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Elgg metadata export.
+ * Displays a metadata item using the current view.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$m = $vars['metadata'];
+$e = get_entity($m->entity_guid);
+?>
+<p class="margin-none"><?php if ($e) echo "<a href=\"" . $e->getURL() . "\">GUID:{$m->entity_guid}</a>"; else echo "GUID:".$m->entity_guid;
+?>: <b><?php echo $m->name; ?></b> <?php echo $m->value; ?></p> \ No newline at end of file
diff --git a/views/default/export/relationship.php b/views/default/export/relationship.php
new file mode 100644
index 000000000..d8cb3e4f4
--- /dev/null
+++ b/views/default/export/relationship.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Elgg relationship export.
+ * Displays a relationship using the current view.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$r = $vars['relationship'];
+
+$e1 = get_entity($r->guid_one);
+$e2 = get_entity($r->guid_two);
+?>
+<p class="margin-none"><?php
+ if ($e1) echo "<a href=\"" . $e1->getURL() . "\">GUID:" . $r->guid_one . "</a>"; else echo "GUID:".$r->guid_one;
+?>
+<b><?php echo $r->relationship; ?></b>
+<?php
+ if ($e2) echo "<a href=\"" . $e2->getURL() . "\">GUID:" . $r->guid_two . "</a>"; else echo "GUID:".$r->guid_two;
+?></p>
diff --git a/views/default/forms/account/settings.php b/views/default/forms/account/settings.php
new file mode 100644
index 000000000..3967207ce
--- /dev/null
+++ b/views/default/forms/account/settings.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Account settings form used for user settings
+ *
+ * This form is extended by Elgg with the views in core/settings/account.
+ * Plugins can additionally extend it and then register for the
+ * 'usersettings:save', 'user' plugin hook.
+ *
+ * This view is included by "forms/usersettings/save"
+ */
diff --git a/views/default/forms/admin/menu/save.php b/views/default/forms/admin/menu/save.php
new file mode 100644
index 000000000..1a67ffcc4
--- /dev/null
+++ b/views/default/forms/admin/menu/save.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Form body for setting up site menu
+ */
+
+// @todo Could probably make this number configurable
+$num_featured_items = 6;
+
+// get site menu items
+$menu = elgg_get_config('menus');
+$menu = $menu['site'];
+$builder = new ElggMenuBuilder($menu);
+$menu = $builder->getMenu('name');
+$menu_items = $menu['default'];
+
+$featured_menu_names = elgg_get_config('site_featured_menu_names');
+
+$dropdown_values = array();
+foreach ($menu_items as $item) {
+ $dropdown_values[$item->getName()] = $item->getText();
+}
+$dropdown_values[' '] = elgg_echo('none');
+
+?>
+<div class="elgg-module elgg-module-inline">
+ <div class="elgg-head">
+ <h3><?php echo elgg_echo('admin:menu_items:configure'); ?></h3>
+ </div>
+ <div class="elgg-body">
+<?php
+echo elgg_view('output/longtext', array(
+ 'value' => elgg_echo("admin:menu_items:description")
+));
+
+for ($i=0; $i<$num_featured_items; $i++) {
+ if ($featured_menu_names && array_key_exists($i, $featured_menu_names)) {
+ $current_value = $featured_menu_names[$i];
+ } else {
+ $current_value = ' ';
+ }
+
+ echo elgg_view('input/dropdown', array(
+ 'options_values' => $dropdown_values,
+ 'name' => 'featured_menu_names[]',
+ 'value' => $current_value
+ ));
+}
+?>
+ </div>
+</div>
+
+<div class="elgg-module elgg-module-inline">
+ <div class="elgg-head">
+ <h3><?php echo elgg_echo('admin:add_menu_item'); ?></h3>
+ </div>
+ <div class="elgg-body">
+<?php
+echo elgg_view('output/longtext', array(
+ 'value' => elgg_echo("admin:add_menu_item:description")
+));
+
+$custom_items = elgg_get_config('site_custom_menu_items');
+
+$name_str = elgg_echo('name');
+$url_str = elgg_echo('admin:plugins:label:website');
+
+echo '<ul class="elgg-list elgg-list-simple">';
+
+if (is_array($custom_items)) {
+ foreach ($custom_items as $title => $url) {
+ $name_input = elgg_view('input/text', array(
+ 'name' => 'custom_menu_titles[]',
+ 'value' => $title
+ ));
+
+ $url_input = elgg_view('input/text', array(
+ 'name' => 'custom_menu_urls[]',
+ 'value' => $url
+ ));
+
+ echo "<li>$name_str: $name_input $url_str: $url_input $delete</li>";
+ }
+}
+
+$new = elgg_echo('new');
+$name_input = elgg_view('input/text', array(
+ 'name' => 'custom_menu_titles[]',
+));
+
+$url_input = elgg_view('input/text', array(
+ 'name' => 'custom_menu_urls[]',
+));
+
+echo "<li class='custom_menuitem'>$name_str: $name_input $url_str: $url_input</li>
+</ul>";
+
+?>
+ </div>
+</div>
+<?php
+
+echo elgg_view('input/submit', array('value' => elgg_echo('save')));
diff --git a/views/default/forms/admin/plugins/change_state.php b/views/default/forms/admin/plugins/change_state.php
new file mode 100644
index 000000000..730c8ff32
--- /dev/null
+++ b/views/default/forms/admin/plugins/change_state.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Activate/deactive all plugins specified by guids array
+ *
+ * @uses $vars['guids'] Array of GUIDs
+ * @uses $vars['action'] 'activate' or 'deactivate'
+ */
+
+$guids = elgg_extract('guids', $vars, array());
+$guids = implode(',', $guids);
+
+echo '<div>';
+echo elgg_view('input/hidden', array(
+ 'name' => 'guids',
+ 'value' => $guids,
+));
+
+echo elgg_view('input/submit', array(
+ 'value' => elgg_echo("admin:plugins:{$vars['action']}_all"),
+ 'class' => 'elgg-button elgg-button-action mrm'
+));
+echo '</div>';
diff --git a/views/default/forms/admin/plugins/filter.php b/views/default/forms/admin/plugins/filter.php
new file mode 100644
index 000000000..fd1b618bc
--- /dev/null
+++ b/views/default/forms/admin/plugins/filter.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Category filter for plugins
+ *
+ * @uses $vars['category']
+ * @uses $vars['category_options']
+ * @uses $vvars['sort']
+ */
+
+echo '<div>';
+echo elgg_view('input/dropdown', array(
+ 'name' => 'category',
+ 'options_values' => $vars['category_options'],
+ 'value' => $vars['category'],
+));
+
+echo elgg_view('input/hidden', array(
+ 'name' => 'sort',
+ 'value' => $vars['sort'],
+));
+
+echo elgg_view('input/submit', array(
+ 'value' => elgg_echo('filter'),
+ 'class' => 'elgg-button elgg-button-action',
+));
+echo '</div>';
diff --git a/views/default/forms/admin/plugins/sort.php b/views/default/forms/admin/plugins/sort.php
new file mode 100644
index 000000000..7f2246bad
--- /dev/null
+++ b/views/default/forms/admin/plugins/sort.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Sort plugins form body
+ *
+ * @uses $vars['sort']
+ * @uses $vars['sort_options']
+ * @uses $vars['category']
+ */
+
+echo '<div class="mtm">';
+echo elgg_view('input/dropdown', array(
+ 'name' => 'sort',
+ 'options_values' => $vars['sort_options'],
+ 'value' => $vars['sort'],
+));
+
+echo elgg_view('input/hidden', array(
+ 'name' => 'category',
+ 'value' => $vars['category'],
+));
+
+echo elgg_view('input/submit', array(
+ 'value' => elgg_echo('sort'),
+ 'class' => 'elgg-button elgg-button-action'
+));
+echo '</div>';
diff --git a/views/default/forms/admin/site/update_advanced.php b/views/default/forms/admin/site/update_advanced.php
new file mode 100644
index 000000000..14b74e4f9
--- /dev/null
+++ b/views/default/forms/admin/site/update_advanced.php
@@ -0,0 +1,101 @@
+<?php
+/**
+ * @todo cleanup
+ */
+$form_body = "";
+
+foreach (array('wwwroot', 'path', 'dataroot') as $field) {
+ $form_body .= "<div>";
+ $form_body .= elgg_echo('installation:' . $field) . "<br />";
+ $warning = elgg_echo('installation:warning:' . $field);
+ if ($warning != 'installation:warning:' . $field) {
+ echo "<b>" . $warning . "</b><br />";
+ }
+ $value = elgg_get_config($field);
+ $form_body .= elgg_view("input/text",array('name' => $field, 'value' => $value));
+ $form_body .= "</div>";
+}
+
+$form_body .= "<div>" . elgg_echo('admin:site:access:warning') . "<br />";
+$form_body .= "<label>" . elgg_echo('installation:sitepermissions') . "</label>";
+$form_body .= elgg_view('input/access', array(
+ 'options_values' => array(
+ ACCESS_PRIVATE => elgg_echo("PRIVATE"),
+ ACCESS_FRIENDS => elgg_echo("access:friends:label"),
+ ACCESS_LOGGED_IN => elgg_echo("LOGGED_IN"),
+ ACCESS_PUBLIC => elgg_echo("PUBLIC")
+ ),
+ 'name' => 'default_access',
+ 'value' => elgg_get_config('default_access'),
+)) . "</div>";
+$form_body .= "<div>" . elgg_echo('installation:allow_user_default_access:description') . "<br />";
+$form_body .= elgg_view("input/checkboxes", array(
+ 'options' => array(elgg_echo('installation:allow_user_default_access:label') => 1),
+ 'name' => 'allow_user_default_access',
+ 'value' => (elgg_get_config('allow_user_default_access') ? 1 : 0),
+)) . "</div>";
+$form_body .= "<div>" . elgg_echo('installation:simplecache:description') . "<br />";
+$form_body .= elgg_view("input/checkboxes", array(
+ 'options' => array(elgg_echo('installation:simplecache:label') => 1),
+ 'name' => 'simplecache_enabled',
+ 'value' => (elgg_get_config('simplecache_enabled') ? 1 : 0),
+)) . "</div>";
+$form_body .= "<div>" . elgg_echo('installation:systemcache:description') . "<br />";
+$form_body .= elgg_view("input/checkboxes", array(
+ 'options' => array(elgg_echo('installation:systemcache:label') => 1),
+ 'name' => 'system_cache_enabled',
+ 'value' => (elgg_get_config('system_cache_enabled') ? 1 : 0),
+)) . "</div>";
+
+$debug_options = array('0' => elgg_echo('installation:debug:none'), 'ERROR' => elgg_echo('installation:debug:error'), 'WARNING' => elgg_echo('installation:debug:warning'), 'NOTICE' => elgg_echo('installation:debug:notice'));
+$form_body .= "<div>" . elgg_echo('installation:debug');
+$form_body .= elgg_view('input/dropdown', array(
+ 'options_values' => $debug_options,
+ 'name' => 'debug',
+ 'value' => elgg_get_config('debug'),
+));
+$form_body .= '</div>';
+
+// control new user registration
+$options = array(
+ 'options' => array(elgg_echo('installation:registration:label') => 1),
+ 'name' => 'allow_registration',
+ 'value' => elgg_get_config('allow_registration') ? 1 : 0,
+);
+$form_body .= '<div>' . elgg_echo('installation:registration:description');
+$form_body .= '<br />' .elgg_view('input/checkboxes', $options) . '</div>';
+
+// control walled garden
+$walled_garden = elgg_get_config(walled_garden);
+$options = array(
+ 'options' => array(elgg_echo('installation:walled_garden:label') => 1),
+ 'name' => 'walled_garden',
+ 'value' => $walled_garden ? 1 : 0,
+);
+$form_body .= '<div>' . elgg_echo('installation:walled_garden:description');
+$form_body .= '<br />' . elgg_view('input/checkboxes', $options) . '</div>';
+
+$form_body .= "<div>" . elgg_echo('installation:httpslogin') . "<br />";
+$form_body .= elgg_view("input/checkboxes", array(
+ 'options' => array(elgg_echo('installation:httpslogin:label') => 1),
+ 'name' => 'https_login',
+ 'value' => (elgg_get_config('https_login') ? 1 : 0)
+)) . "</div>";
+
+$form_body .= "<div>" . elgg_echo('installation:disableapi') . "<br />";
+$disable_api = elgg_get_config('disable_api');
+$on = $disable_api ? 0 : 1;
+$form_body .= elgg_view("input/checkboxes", array(
+ 'options' => array(elgg_echo('installation:disableapi:label') => 1),
+ 'name' => 'api',
+ 'value' => $on,
+));
+$form_body .= "</div>";
+
+$form_body .= elgg_view('input/hidden', array('name' => 'settings', 'value' => 'go'));
+
+$form_body .= '<div class="elgg-foot">';
+$form_body .= elgg_view('input/submit', array('value' => elgg_echo("save")));
+$form_body .= '</div>';
+
+echo $form_body;
diff --git a/views/default/forms/admin/site/update_basic.php b/views/default/forms/admin/site/update_basic.php
new file mode 100644
index 000000000..88870bc60
--- /dev/null
+++ b/views/default/forms/admin/site/update_basic.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * @todo cleanup
+ */
+$form_body = "";
+
+foreach (array('sitename','sitedescription', 'siteemail') as $field) {
+ $form_body .= "<div>";
+ $form_body .= elgg_echo('installation:' . $field) . "<br />";
+ $warning = elgg_echo('installation:warning:' . $field);
+ if ($warning != 'installation:warning:' . $field) {
+ echo "<b>" . $warning . "</b><br />";
+ }
+ $value = elgg_get_config($field);
+ $form_body .= elgg_view("input/text",array('name' => $field, 'value' => $value));
+ $form_body .= "</div>";
+}
+
+$languages = get_installed_translations();
+$form_body .= "<div>" . elgg_echo('installation:language');
+$form_body .= elgg_view("input/dropdown", array(
+ 'name' => 'language',
+ 'value' => elgg_get_config('language'),
+ 'options_values' => $languages,
+)) . "</div>";
+
+$form_body .= '<div class="elgg-foot">';
+$form_body .= elgg_view('input/submit', array('value' => elgg_echo("save")));
+$form_body .= '</div>';
+
+echo $form_body; \ No newline at end of file
diff --git a/views/default/forms/avatar/crop.php b/views/default/forms/avatar/crop.php
new file mode 100644
index 000000000..3e798cb27
--- /dev/null
+++ b/views/default/forms/avatar/crop.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Avatar crop form
+ *
+ * @uses $vars['entity']
+ */
+
+elgg_load_js('jquery.imgareaselect');
+elgg_load_js('elgg.avatar_cropper');
+elgg_load_css('jquery.imgareaselect');
+
+$master_img = elgg_view('output/img', array(
+ 'src' => $vars['entity']->getIconUrl('master'),
+ 'alt' => elgg_echo('avatar'),
+ 'class' => 'mrl',
+ 'id' => 'user-avatar-cropper',
+));
+
+$preview_img = elgg_view('output/img', array(
+ 'src' => $vars['entity']->getIconUrl('master'),
+ 'alt' => elgg_echo('avatar'),
+));
+
+?>
+<div class="clearfix">
+ <?php echo $master_img; ?>
+ <div id="user-avatar-preview-title"><label><?php echo elgg_echo('avatar:preview'); ?></label></div>
+ <div id="user-avatar-preview"><?php echo $preview_img; ?></div>
+</div>
+<div class="elgg-foot">
+<?php
+$coords = array('x1', 'x2', 'y1', 'y2');
+foreach ($coords as $coord) {
+ echo elgg_view('input/hidden', array('name' => $coord, 'value' => $vars['entity']->$coord));
+}
+
+echo elgg_view('input/hidden', array('name' => 'guid', 'value' => $vars['entity']->guid));
+
+echo elgg_view('input/submit', array('value' => elgg_echo('avatar:create')));
+
+?>
+</div>
diff --git a/views/default/forms/avatar/upload.php b/views/default/forms/avatar/upload.php
new file mode 100644
index 000000000..d91e8575e
--- /dev/null
+++ b/views/default/forms/avatar/upload.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Avatar upload form
+ *
+ * @uses $vars['entity']
+ */
+
+?>
+<div>
+ <label><?php echo elgg_echo("avatar:upload"); ?></label><br />
+ <?php echo elgg_view("input/file",array('name' => 'avatar')); ?>
+</div>
+<div class="elgg-foot">
+ <?php echo elgg_view('input/hidden', array('name' => 'guid', 'value' => $vars['entity']->guid)); ?>
+ <?php echo elgg_view('input/submit', array('value' => elgg_echo('upload'))); ?>
+</div>
diff --git a/views/default/forms/comments/add.php b/views/default/forms/comments/add.php
new file mode 100644
index 000000000..9acabf3ea
--- /dev/null
+++ b/views/default/forms/comments/add.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Elgg comments add form
+ *
+ * @package Elgg
+ *
+ * @uses ElggEntity $vars['entity'] The entity to comment on
+ * @uses bool $vars['inline'] Show a single line version of the form?
+ */
+
+
+if (isset($vars['entity']) && elgg_is_logged_in()) {
+
+ $inline = elgg_extract('inline', $vars, false);
+
+ if ($inline) {
+ echo elgg_view('input/text', array('name' => 'generic_comment'));
+ echo elgg_view('input/submit', array('value' => elgg_echo('comment')));
+ } else {
+?>
+ <div>
+ <label><?php echo elgg_echo("generic_comments:add"); ?></label>
+ <?php echo elgg_view('input/longtext', array('name' => 'generic_comment')); ?>
+ </div>
+ <div class="elgg-foot">
+<?php
+ echo elgg_view('input/submit', array('value' => elgg_echo("generic_comments:post")));
+?>
+ </div>
+<?php
+ }
+
+ echo elgg_view('input/hidden', array(
+ 'name' => 'entity_guid',
+ 'value' => $vars['entity']->getGUID()
+ ));
+}
diff --git a/views/default/forms/friends/collections/add.php b/views/default/forms/friends/collections/add.php
new file mode 100644
index 000000000..04c87346b
--- /dev/null
+++ b/views/default/forms/friends/collections/add.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Form body for editing or adding a friend collection
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['collection'] Optionally, the collection to edit
+ */
+
+// Set title, form destination
+if (isset($vars['collection'])) {
+ $title = $vars['collection']->name;
+ $highlight = 'default';
+} else {
+ $title = "";
+ $highlight = 'all';
+}
+
+echo "<div class=\"mtm\"><label>" . elgg_echo("friends:collectionname") . "<br/>";
+echo elgg_view("input/text", array(
+ "name" => "collection_name",
+ "value" => $title,
+ ));
+echo "</label></div>";
+
+echo "<div>";
+if ($vars['collection_members']) {
+ echo elgg_echo("friends:collectionfriends") . "<br />";
+ foreach ($vars['collection_members'] as $mem) {
+ echo elgg_view_entity_icon($mem, 'tiny');
+ echo $mem->name;
+ }
+}
+echo "</div>";
+
+echo "<div><label>" . elgg_echo("friends:addfriends") . "</label>";
+echo elgg_view('input/friendspicker', array(
+ 'entities' => $vars['friends'],
+ 'name' => 'friends_collection',
+ 'highlight' => $highlight,
+));
+echo "</div>";
+
+echo '<div class="elgg-foot">';
+if (isset($vars['collection'])) {
+ echo elgg_view('input/hidden', array(
+ 'name' => 'collection_id',
+ 'value' => $vars['collection']->id,
+ ));
+}
+echo elgg_view('input/submit', array('name' => 'submit', 'value' => elgg_echo('save')));
+echo '</div>';
diff --git a/views/default/forms/login.php b/views/default/forms/login.php
new file mode 100644
index 000000000..d2c6e6221
--- /dev/null
+++ b/views/default/forms/login.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Elgg login form
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+?>
+
+<div>
+ <label><?php echo elgg_echo('loginusername'); ?></label>
+ <?php echo elgg_view('input/text', array(
+ 'name' => 'username',
+ 'class' => 'elgg-autofocus',
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('password'); ?></label>
+ <?php echo elgg_view('input/password', array('name' => 'password')); ?>
+</div>
+
+<?php echo elgg_view('login/extend', $vars); ?>
+
+<div class="elgg-foot">
+ <label class="mtm float-alt">
+ <input type="checkbox" name="persistent" value="true" />
+ <?php echo elgg_echo('user:persistent'); ?>
+ </label>
+
+ <?php echo elgg_view('input/submit', array('value' => elgg_echo('login'))); ?>
+
+ <?php
+ if (isset($vars['returntoreferer'])) {
+ echo elgg_view('input/hidden', array('name' => 'returntoreferer', 'value' => 'true'));
+ }
+ ?>
+
+ <ul class="elgg-menu elgg-menu-general mtm">
+ <?php
+ if (elgg_get_config('allow_registration')) {
+ echo '<li><a class="registration_link" href="' . elgg_get_site_url() . 'register">' . elgg_echo('register') . '</a></li>';
+ }
+ ?>
+ <li><a class="forgot_link" href="<?php echo elgg_get_site_url(); ?>forgotpassword">
+ <?php echo elgg_echo('user:password:lost'); ?>
+ </a></li>
+ </ul>
+</div>
diff --git a/views/default/forms/members/name_search.php b/views/default/forms/members/name_search.php
new file mode 100644
index 000000000..5f6b9a4b6
--- /dev/null
+++ b/views/default/forms/members/name_search.php
@@ -0,0 +1,9 @@
+<?php
+
+$params = array(
+ 'name' => 'name',
+ 'class' => 'mbm',
+);
+echo elgg_view('input/text', $params);
+
+echo elgg_view('input/submit', array('value' => elgg_echo('search')));
diff --git a/views/default/forms/members/tag_search.php b/views/default/forms/members/tag_search.php
new file mode 100644
index 000000000..4fe9bb32a
--- /dev/null
+++ b/views/default/forms/members/tag_search.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Simple members search by tag form
+ */
+
+$params = array(
+ 'name' => 'tag',
+ 'class' => 'mbm',
+);
+echo elgg_view('input/text', $params);
+
+echo elgg_view('input/submit', array('value' => elgg_echo('search')));
diff --git a/views/default/forms/plugins/settings/save.php b/views/default/forms/plugins/settings/save.php
new file mode 100644
index 000000000..dc7b2fef7
--- /dev/null
+++ b/views/default/forms/plugins/settings/save.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Used to show plugin settings for both users and admins.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ */
+
+$plugin = $vars['entity'];
+$plugin_id = $plugin->getID();
+$user_guid = elgg_extract('user_guid', $vars, elgg_get_logged_in_user_guid());
+
+// Do we want to show admin settings or user settings
+$type = elgg_extract('type', $vars, '');
+
+if ($type != 'user') {
+ $type = '';
+}
+
+if (elgg_view_exists("{$type}settings/$plugin_id/edit")) {
+ elgg_deprecated_notice("{$type}settings/$plugin_id/edit was deprecated in favor of plugins/$plugin_id/{$type}settings", 1.8);
+ echo elgg_view("{$type}settings/$plugin_id/edit", $vars);
+} else {
+ echo elgg_view("plugins/$plugin_id/{$type}settings", $vars);
+}
+
+echo '<div class="elgg-foot">';
+echo elgg_view('input/hidden', array('name' => 'plugin_id', 'value' => $plugin_id));
+echo elgg_view('input/hidden', array('name' => 'user_guid', 'value' => $user_guid));
+echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+echo '</div>';
diff --git a/views/default/forms/plugins/usersettings/save.php b/views/default/forms/plugins/usersettings/save.php
new file mode 100644
index 000000000..ced88f818
--- /dev/null
+++ b/views/default/forms/plugins/usersettings/save.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Plugin user settings
+ *
+ * Calls the plugin admin settings form body with type set to 'user'
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ */
+
+$vars['type'] = 'user';
+
+// Can't use elgg_view_form() because it overrides the $vars['action'] parameter
+echo elgg_view('forms/plugins/settings/save', $vars); \ No newline at end of file
diff --git a/views/default/forms/profile/edit.php b/views/default/forms/profile/edit.php
new file mode 100644
index 000000000..9538b779e
--- /dev/null
+++ b/views/default/forms/profile/edit.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Edit profile form
+ *
+ * @uses vars['entity']
+ */
+
+?>
+
+<div>
+ <label><?php echo elgg_echo('user:name:label'); ?></label>
+ <?php echo elgg_view('input/text', array('name' => 'name', 'value' => $vars['entity']->name)); ?>
+</div>
+<?php
+
+$profile_fields = elgg_get_config('profile_fields');
+if (is_array($profile_fields) && count($profile_fields) > 0) {
+ foreach ($profile_fields as $shortname => $valtype) {
+ $metadata = elgg_get_metadata(array(
+ 'guid' => $vars['entity']->guid,
+ 'metadata_name' => $shortname,
+ 'limit' => false
+ ));
+ if ($metadata) {
+ if (is_array($metadata)) {
+ $value = '';
+ foreach ($metadata as $md) {
+ if (!empty($value)) {
+ $value .= ', ';
+ }
+ $value .= $md->value;
+ $access_id = $md->access_id;
+ }
+ } else {
+ $value = $metadata->value;
+ $access_id = $metadata->access_id;
+ }
+ } else {
+ $value = '';
+ $access_id = ACCESS_DEFAULT;
+ }
+
+?>
+<div>
+ <label><?php echo elgg_echo("profile:{$shortname}") ?></label>
+ <?php
+ $params = array(
+ 'name' => $shortname,
+ 'value' => $value,
+ );
+ echo elgg_view("input/{$valtype}", $params);
+ $params = array(
+ 'name' => "accesslevel[$shortname]",
+ 'value' => $access_id,
+ );
+ echo elgg_view('input/access', $params);
+ ?>
+</div>
+<?php
+ }
+}
+?>
+<div class="elgg-foot">
+<?php
+ echo elgg_view('input/hidden', array('name' => 'guid', 'value' => $vars['entity']->guid));
+ echo elgg_view('input/submit', array('value' => elgg_echo('save')));
+?>
+</div>
diff --git a/views/default/forms/profile/fields/add.php b/views/default/forms/profile/fields/add.php
new file mode 100644
index 000000000..2087ec299
--- /dev/null
+++ b/views/default/forms/profile/fields/add.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Add a new field to the set of custom profile fields
+ */
+
+$label_text = elgg_echo('profile:label');
+$type_text = elgg_echo('profile:type');
+
+$label_control = elgg_view('input/text', array('name' => 'label'));
+$type_control = elgg_view('input/dropdown', array('name' => 'type', 'options_values' => array(
+ 'text' => elgg_echo('profile:field:text'),
+ 'longtext' => elgg_echo('profile:field:longtext'),
+ 'tags' => elgg_echo('profile:field:tags'),
+ 'url' => elgg_echo('profile:field:url'),
+ 'email' => elgg_echo('profile:field:email'),
+ 'location' => elgg_echo('profile:field:location'),
+ 'date' => elgg_echo('profile:field:date'),
+)));
+
+$submit_control = elgg_view('input/submit', array('name' => elgg_echo('add'), 'value' => elgg_echo('add')));
+
+$formbody = <<< END
+ <div>$label_text: $label_control</div>
+ <div class="elgg-foot">$type_text: $type_control
+ $submit_control</div>
+END;
+
+echo elgg_autop(elgg_echo('profile:explainchangefields'));
+echo $formbody;
diff --git a/views/default/forms/register.php b/views/default/forms/register.php
new file mode 100644
index 000000000..c0ee66f76
--- /dev/null
+++ b/views/default/forms/register.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Elgg register form
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+elgg_load_js('elgg.register');
+
+$password = $password2 = '';
+$username = get_input('u');
+$email = get_input('e');
+$name = get_input('n');
+
+if (elgg_is_sticky_form('register')) {
+ extract(elgg_get_sticky_values('register'));
+ elgg_clear_sticky_form('register');
+}
+
+?>
+<div class="mtm">
+ <label><?php echo elgg_echo('name'); ?></label><br />
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'name',
+ 'value' => $name,
+ 'class' => 'elgg-autofocus',
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('email'); ?></label><br />
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'email',
+ 'value' => $email,
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('username'); ?></label><br />
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'username',
+ 'value' => $username,
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('password'); ?></label><br />
+ <?php
+ echo elgg_view('input/password', array(
+ 'name' => 'password',
+ 'value' => $password,
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('passwordagain'); ?></label><br />
+ <?php
+ echo elgg_view('input/password', array(
+ 'name' => 'password2',
+ 'value' => $password2,
+ ));
+ ?>
+</div>
+
+<?php
+// view to extend to add more fields to the registration form
+echo elgg_view('register/extend', $vars);
+
+// Add captcha hook
+echo elgg_view('input/captcha', $vars);
+
+echo '<div class="elgg-foot">';
+echo elgg_view('input/hidden', array('name' => 'friend_guid', 'value' => $vars['friend_guid']));
+echo elgg_view('input/hidden', array('name' => 'invitecode', 'value' => $vars['invitecode']));
+echo elgg_view('input/submit', array('name' => 'submit', 'value' => elgg_echo('register')));
+echo '</div>';
diff --git a/views/default/forms/user/passwordreset.php b/views/default/forms/user/passwordreset.php
new file mode 100644
index 000000000..5946fa7c0
--- /dev/null
+++ b/views/default/forms/user/passwordreset.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Reset user password form
+ */
+
+echo elgg_autop(elgg_echo('user:resetpassword:reset_password_confirm'));
+
+echo elgg_view('input/hidden', array(
+ 'name' => 'u',
+ 'value' => $vars['guid'],
+));
+
+echo elgg_view('input/hidden', array(
+ 'name' => 'c',
+ 'value' => $vars['code'],
+));
+
+echo elgg_view('input/submit', array(
+ 'value' => elgg_echo('resetpassword')
+));
diff --git a/views/default/forms/user/requestnewpassword.php b/views/default/forms/user/requestnewpassword.php
new file mode 100644
index 000000000..c90971eaf
--- /dev/null
+++ b/views/default/forms/user/requestnewpassword.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg forgotten password.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+?>
+
+<div class="mtm">
+ <?php echo elgg_echo('user:password:text'); ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('loginusername'); ?></label><br />
+ <?php echo elgg_view('input/text', array(
+ 'name' => 'username',
+ 'class' => 'elgg-autofocus',
+ ));
+ ?>
+</div>
+<?php echo elgg_view('input/captcha'); ?>
+<div class="elgg-foot">
+ <?php echo elgg_view('input/submit', array('value' => elgg_echo('request'))); ?>
+</div>
diff --git a/views/default/forms/useradd.php b/views/default/forms/useradd.php
new file mode 100644
index 000000000..4f337e4e4
--- /dev/null
+++ b/views/default/forms/useradd.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Elgg add user form.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+$name = $username = $email = $password = $password2 = $admin = '';
+
+if (elgg_is_sticky_form('useradd')) {
+ extract(elgg_get_sticky_values('useradd'));
+ elgg_clear_sticky_form('useradd');
+ if (is_array($admin)) {
+ $admin = $admin[0];
+ }
+}
+
+?>
+<div>
+ <label><?php echo elgg_echo('name');?></label><br />
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'name',
+ 'value' => $name,
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('username'); ?></label><br />
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'username',
+ 'value' => $username,
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('email'); ?></label><br />
+ <?php
+ echo elgg_view('input/text', array(
+ 'name' => 'email',
+ 'value' => $email,
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('password'); ?></label><br />
+ <?php
+ echo elgg_view('input/password', array(
+ 'name' => 'password',
+ 'value' => $password,
+ ));
+ ?>
+</div>
+<div>
+ <label><?php echo elgg_echo('passwordagain'); ?></label><br />
+ <?php
+ echo elgg_view('input/password', array(
+ 'name' => 'password2',
+ 'value' => $password2,
+ ));
+ ?>
+</div>
+<div>
+<?php
+ echo elgg_view('input/checkboxes', array(
+ 'name' => "admin",
+ 'options' => array(elgg_echo('admin_option') => 1),
+ 'value' => $admin,
+ ));
+?>
+</div>
+
+<div class="elgg-foot">
+ <?php echo elgg_view('input/submit', array('value' => elgg_echo('register'))); ?>
+</div> \ No newline at end of file
diff --git a/views/default/forms/usersettings/save.php b/views/default/forms/usersettings/save.php
new file mode 100644
index 000000000..71323083f
--- /dev/null
+++ b/views/default/forms/usersettings/save.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * User account settings.
+ *
+ * Plugins should extend "forms/account/settings" to add to the settings.
+ */
+
+$form_body = elgg_view("forms/account/settings", $vars);
+
+$form_body .= '<div class="elgg-foot">';
+$form_body .= elgg_view('input/submit', array('value' => elgg_echo('save')));
+$form_body .= '</div>';
+
+echo $form_body; \ No newline at end of file
diff --git a/views/default/forms/widgets/save.php b/views/default/forms/widgets/save.php
new file mode 100644
index 000000000..6959b2a82
--- /dev/null
+++ b/views/default/forms/widgets/save.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Elgg widget edit settings
+ *
+ * @uses $vars['widget']
+ * @uses $vars['show_access']
+ */
+
+$widget = $vars['widget'];
+$show_access = elgg_extract('show_access', $vars, true);
+
+$edit_view = "widgets/$widget->handler/edit";
+$custom_form_section = elgg_view($edit_view, array('entity' => $widget));
+
+$access = '';
+if ($show_access) {
+ $access = elgg_echo('access') . ': ' . elgg_view('input/access', array(
+ 'name' => 'params[access_id]',
+ 'value' => $widget->access_id,
+ ));
+}
+
+if (!$custom_form_section && !$access) {
+ return true;
+}
+
+$hidden = elgg_view('input/hidden', array('name' => 'guid', 'value' => $widget->guid));
+$submit = elgg_view('input/submit', array('value' => elgg_echo('save')));
+
+$body = <<<___END
+ $custom_form_section
+ <div>
+ $access
+ </div>
+ <div class="elgg-foot">
+ $hidden
+ $submit
+ </div>
+___END;
+
+echo $body;
diff --git a/views/default/graphics/ajax_loader.php b/views/default/graphics/ajax_loader.php
new file mode 100644
index 000000000..d5ce87ea9
--- /dev/null
+++ b/views/default/graphics/ajax_loader.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Elgg AJAX loader
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['id'] CSS id
+ * @uses $vars['class'] Optional additional CSS class
+ * @uses $vars['hidden'] Begin hidden? (true)
+ */
+
+if (isset($vars['id'])) {
+ $id = "id=\"{$vars['id']}\"";
+}
+
+$class = 'elgg-ajax-loader';
+if (isset($vars['class'])) {
+ $class = "$class {$vars['class']}";
+}
+
+if (elgg_extract('hidden', $vars, true)) {
+ $class = "$class hidden";
+}
+
+$loader = <<< END
+
+<div class="$class" $id></div>
+
+END;
+
+echo $loader; \ No newline at end of file
diff --git a/views/default/group/default.php b/views/default/group/default.php
new file mode 100644
index 000000000..383a25c49
--- /dev/null
+++ b/views/default/group/default.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * ElggGroup default view.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view('object/default', $vars);
diff --git a/views/default/group/elements/summary.php b/views/default/group/elements/summary.php
new file mode 100644
index 000000000..395ed5292
--- /dev/null
+++ b/views/default/group/elements/summary.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Group summary
+ *
+ * @uses $vars['entity'] ElggEntity
+ * @uses $vars['title'] Title link (optional) false = no title, '' = default
+ * @uses $vars['metadata'] HTML for entity metadata and actions (optional)
+ * @uses $vars['subtitle'] HTML for the subtitle (optional)
+ * @uses $vars['tags'] HTML for the tags (optional)
+ * @uses $vars['content'] HTML for the entity content (optional)
+ */
+
+echo elgg_view('object/elements/summary', $vars);
diff --git a/views/default/group/search/finishblurb.php b/views/default/group/search/finishblurb.php
new file mode 100644
index 000000000..ceaeb0ff0
--- /dev/null
+++ b/views/default/group/search/finishblurb.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * @package Elgg
+ * @subpackage Core
+ * @deprecated 1.7
+ */
+elgg_deprecated_notice('view groups/search/finishblurb was deprecated.', 1.7);
+
+if ($vars['count'] > $vars['threshold']) {
+
+?>
+<div class="contentWrapper"><a href="<?php echo elgg_get_site_url(); ?>search/groups?tag=<?php echo urlencode($vars['tag']); ?>">
+ <?php
+ echo elgg_echo("group:search:finishblurb");
+ ?></a>
+</div>
+<?php
+}
diff --git a/views/default/group/search/startblurb.php b/views/default/group/search/startblurb.php
new file mode 100644
index 000000000..92256d1db
--- /dev/null
+++ b/views/default/group/search/startblurb.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * @package Elgg
+ * @subpackage Core
+ * @deprecated 1.7
+ */
+elgg_deprecated_notice('view groups/search/startblurb was deprecated.', 1.7);
+?>
+
+<div class="contentWrapper">
+ <?php
+ echo elgg_echo("group:search:startblurb", array($vars['tag']));
+ ?>
+</div>
diff --git a/views/default/icon/default.php b/views/default/icon/default.php
new file mode 100644
index 000000000..087c7eae9
--- /dev/null
+++ b/views/default/icon/default.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Generic icon view.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['entity'] The entity the icon represents - uses getIconURL() method
+ * @uses $vars['size'] topbar, tiny, small, medium (default), large, master
+ * @uses $vars['href'] Optional override for link
+ * @uses $vars['img_class'] Optional CSS class added to img
+ * @uses $vars['link_class'] Optional CSS class for the link
+ */
+
+$entity = $vars['entity'];
+
+$sizes = array('small', 'medium', 'large', 'tiny', 'master', 'topbar');
+// Get size
+if (!in_array($vars['size'], $sizes)) {
+ $vars['size'] = "medium";
+}
+
+$class = elgg_extract('img_class', $vars, '');
+
+if (isset($entity->name)) {
+ $title = $entity->name;
+} else {
+ $title = $entity->title;
+}
+$title = htmlspecialchars($title, ENT_QUOTES, 'UTF-8', false);
+
+$url = $entity->getURL();
+if (isset($vars['href'])) {
+ $url = $vars['href'];
+}
+
+$icon_sizes = elgg_get_config('icon_sizes');
+$size = $vars['size'];
+
+$img = elgg_view('output/img', array(
+ 'src' => $entity->getIconURL($vars['size']),
+ 'alt' => $title,
+ 'class' => $class,
+ 'width' => $size != 'master' ? $icon_sizes[$size]['w'] : NULL,
+ 'height' => $size != 'master' ? $icon_sizes[$size]['h'] : NULL,
+));
+
+if ($url) {
+ $params = array(
+ 'href' => $url,
+ 'text' => $img,
+ 'is_trusted' => true,
+ );
+ $class = elgg_extract('link_class', $vars, '');
+ if ($class) {
+ $params['class'] = $class;
+ }
+
+ echo elgg_view('output/url', $params);
+} else {
+ echo $img;
+}
diff --git a/views/default/icon/user/default.php b/views/default/icon/user/default.php
new file mode 100644
index 000000000..c0b0e7483
--- /dev/null
+++ b/views/default/icon/user/default.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * Elgg user icon
+ *
+ * Rounded avatar corners - CSS3 method
+ * uses avatar as background image so we can clip it with border-radius in supported browsers
+ *
+ * @uses $vars['entity'] The user entity. If none specified, the current user is assumed.
+ * @uses $vars['size'] The size - tiny, small, medium or large. (medium)
+ * @uses $vars['use_hover'] Display the hover menu? (true)
+ * @uses $vars['use_link'] Wrap a link around image? (true)
+ * @uses $vars['class'] Optional class added to the .elgg-avatar div
+ * @uses $vars['img_class'] Optional CSS class added to img
+ * @uses $vars['link_class'] Optional CSS class for the link
+ * @uses $vars['href'] Optional override of the link href
+ */
+
+$user = elgg_extract('entity', $vars, elgg_get_logged_in_user_entity());
+$size = elgg_extract('size', $vars, 'medium');
+if (!in_array($size, array('topbar', 'tiny', 'small', 'medium', 'large', 'master'))) {
+ $size = 'medium';
+}
+
+$class = "elgg-avatar elgg-avatar-$size";
+if (isset($vars['class'])) {
+ $class = "$class {$vars['class']}";
+}
+
+$use_link = elgg_extract('use_link', $vars, true);
+
+if (!($user instanceof ElggUser)) {
+ return true;
+}
+
+$name = htmlspecialchars($user->name, ENT_QUOTES, 'UTF-8', false);
+$username = $user->username;
+
+$icontime = $user->icontime;
+if (!$icontime) {
+ $icontime = "default";
+}
+
+$js = elgg_extract('js', $vars, '');
+if ($js) {
+ elgg_deprecated_notice("Passing 'js' to icon views is deprecated.", 1.8, 5);
+}
+
+$img_class = '';
+if (isset($vars['img_class'])) {
+ $img_class = $vars['img_class'];
+}
+
+$use_hover = elgg_extract('use_hover', $vars, true);
+if (isset($vars['override'])) {
+ elgg_deprecated_notice("Use 'use_hover' rather than 'override' with user avatars", 1.8, 5);
+ $use_hover = false;
+}
+if (isset($vars['hover'])) {
+ // only 1.8.0 was released with 'hover' as the key
+ $use_hover = $vars['hover'];
+}
+
+$spacer_url = elgg_get_site_url() . '_graphics/spacer.gif';
+
+$icon_url = elgg_format_url($user->getIconURL($size));
+$icon = elgg_view('output/img', array(
+ 'src' => $spacer_url,
+ 'alt' => $name,
+ 'title' => $name,
+ 'class' => $img_class,
+ 'style' => "background: url($icon_url) no-repeat;",
+));
+
+$show_menu = $use_hover && (elgg_is_admin_logged_in() || !$user->isBanned());
+
+?>
+<div class="<?php echo $class; ?>">
+<?php
+
+if ($show_menu) {
+ $params = array(
+ 'entity' => $user,
+ 'username' => $username,
+ 'name' => $name,
+ );
+ echo elgg_view_icon('hover-menu');
+ echo elgg_view_menu('user_hover', $params);
+}
+
+if ($use_link) {
+ $class = elgg_extract('link_class', $vars, '');
+ $url = elgg_extract('href', $vars, $user->getURL());
+ echo elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => $icon,
+ 'is_trusted' => true,
+ 'class' => $class,
+ ));
+} else {
+ echo "<a>$icon</a>";
+}
+?>
+</div>
diff --git a/views/default/input/access.php b/views/default/input/access.php
new file mode 100644
index 000000000..137eea288
--- /dev/null
+++ b/views/default/input/access.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Elgg access level input
+ * Displays a dropdown input field
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['options_values'] Array of value => label pairs (overrides default)
+ * @uses $vars['name'] The name of the input field
+ * @uses $vars['entity'] Optional. The entity for this access control (uses access_id)
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-access {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-access";
+}
+
+$defaults = array(
+ 'disabled' => false,
+ 'value' => get_default_access(),
+ 'options_values' => get_write_access_array(),
+);
+
+if (isset($vars['entity'])) {
+ $defaults['value'] = $vars['entity']->access_id;
+ unset($vars['entity']);
+}
+
+$vars = array_merge($defaults, $vars);
+
+if ($vars['value'] == ACCESS_DEFAULT) {
+ $vars['value'] = get_default_access();
+}
+
+if (is_array($vars['options_values']) && sizeof($vars['options_values']) > 0) {
+ echo elgg_view('input/dropdown', $vars);
+}
diff --git a/views/default/input/autocomplete.php b/views/default/input/autocomplete.php
new file mode 100644
index 000000000..e58eb1ae8
--- /dev/null
+++ b/views/default/input/autocomplete.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Displays an autocomplete text input.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @todo This currently only works for ONE AUTOCOMPLETE TEXT FIELD on a page.
+ *
+ * @uses $vars['value'] Current value for the text input
+ * @uses $vars['match_on'] Array | str What to match on. all|array(groups|users|friends)
+ * @uses $vars['match_owner'] Bool. Match only entities that are owned by logged in user.
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-autocomplete {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-autocomplete";
+}
+
+$defaults = array(
+ 'value' => '',
+ 'disabled' => false,
+);
+
+$vars = array_merge($defaults, $vars);
+
+$params = array();
+if (isset($vars['match_on'])) {
+ $params['match_on'] = $vars['match_on'];
+ unset($vars['match_on']);
+}
+if (isset($vars['match_owner'])) {
+ $params['match_owner'] = $vars['match_owner'];
+ unset($vars['match_owner']);
+}
+$ac_url_params = http_build_query($params);
+
+elgg_load_js('elgg.autocomplete');
+elgg_load_js('jquery.ui.autocomplete.html');
+
+?>
+
+<script type="text/javascript">
+elgg.provide('elgg.autocomplete');
+elgg.autocomplete.url = "<?php echo elgg_get_site_url() . 'livesearch?' . $ac_url_params; ?>";
+</script>
+<input type="text" <?php echo elgg_format_attributes($vars); ?> />
diff --git a/views/default/input/button.php b/views/default/input/button.php
new file mode 100644
index 000000000..9957fdc54
--- /dev/null
+++ b/views/default/input/button.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Create a input button
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['src'] Src of an image
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-button {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-button";
+}
+
+$defaults = array(
+ 'type' => 'button',
+);
+
+$vars = array_merge($defaults, $vars);
+
+switch ($vars['type']) {
+ case 'button':
+ case 'reset':
+ case 'submit':
+ case 'image':
+ break;
+ default:
+ $vars['type'] = 'button';
+ break;
+}
+
+// blank src if trying to access an offsite image. @todo why?
+if (isset($vars['src']) && strpos($vars['src'], elgg_get_site_url()) === false) {
+ $vars['src'] = "";
+}
+?>
+<input <?php echo elgg_format_attributes($vars); ?> />
diff --git a/views/default/input/calendar.php b/views/default/input/calendar.php
new file mode 100644
index 000000000..52c84ff82
--- /dev/null
+++ b/views/default/input/calendar.php
@@ -0,0 +1,6 @@
+<?php
+// @deprecated Use input/date instead.
+
+elgg_deprecated_notice('view: input/calendar is deprecated by input/date', 1.8);
+
+echo elgg_view('input/datepicker', $vars); \ No newline at end of file
diff --git a/views/default/input/captcha.php b/views/default/input/captcha.php
new file mode 100644
index 000000000..1c2e22aaa
--- /dev/null
+++ b/views/default/input/captcha.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * This view provides a hook for third parties to provide a CAPTCHA.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+?> \ No newline at end of file
diff --git a/views/default/input/checkbox.php b/views/default/input/checkbox.php
new file mode 100644
index 000000000..3dc75c6c3
--- /dev/null
+++ b/views/default/input/checkbox.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Elgg checkbox input
+ * Displays a checkbox input tag
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ *
+ * Pass input tag attributes as key value pairs. For a list of allowable
+ * attributes, see http://www.w3schools.com/tags/tag_input.asp
+ *
+ * @uses $vars['default'] The default value to submit if not checked.
+ * Optional, defaults to 0. Set to false for no default.
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-checkbox {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-checkbox";
+}
+
+$defaults = array(
+ 'default' => 0,
+ 'disabled' => false,
+);
+
+$vars = array_merge($defaults, $vars);
+
+$default = $vars['default'];
+unset($vars['default']);
+
+if (isset($vars['name']) && $default !== false) {
+ echo "<input type=\"hidden\" name=\"{$vars['name']}\" value=\"$default\"/>";
+}
+
+?>
+<input type="checkbox" <?php echo elgg_format_attributes($vars); ?> />
diff --git a/views/default/input/checkboxes.php b/views/default/input/checkboxes.php
new file mode 100644
index 000000000..db4b06949
--- /dev/null
+++ b/views/default/input/checkboxes.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * Elgg checkbox input
+ * Displays a checkbox input field
+ *
+ * @note This also includes a hidden input with the same name as the checkboxes
+ * to make sure something is sent to the server. The default value is 0.
+ * If using JS, be specific to avoid selecting the hidden default value:
+ * $('input[type=checkbox][name=name]')
+ *
+ * @warning Passing integers as labels does not currently work due to a
+ * deprecated hack that will be removed in Elgg 1.9. To use integer labels,
+ * the labels must be character codes: 1 would be &#0049;
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses string $vars['name'] The name of the input fields
+ * (Forced to an array by appending [])
+ * @uses array $vars['options'] An array of strings representing the
+ * label => option for the each checkbox field
+ * @uses string $vars['default'] The default value to send if nothing is checked.
+ * Optional, defaults to 0. Set to FALSE for no default.
+ * @uses bool $vars['disabled'] Make all input elements disabled. Optional.
+ * @uses string $vars['value'] The current value. Single value or array. Optional.
+ * @uses string $vars['class'] Additional class of the list. Optional.
+ * @uses string $vars['align'] 'horizontal' or 'vertical' Default: 'vertical'
+ *
+ */
+
+$defaults = array(
+ 'align' => 'vertical',
+ 'value' => array(),
+ 'default' => 0,
+ 'disabled' => false,
+ 'options' => array(),
+ 'name' => '',
+);
+
+$vars = array_merge($defaults, $vars);
+
+$class = "elgg-input-checkboxes elgg-{$vars['align']}";
+if (isset($vars['class'])) {
+ $class .= " {$vars['class']}";
+ unset($vars['class']);
+}
+
+$id = '';
+if (isset($vars['id'])) {
+ $id = "id=\"{$vars['id']}\"";
+ unset($vars['id']);
+}
+
+if (is_array($vars['value'])) {
+ $values = array_map('elgg_strtolower', $vars['value']);
+} else {
+ $values = array(elgg_strtolower($vars['value']));
+}
+
+$input_vars = $vars;
+$input_vars['default'] = false;
+if ($vars['name']) {
+ $input_vars['name'] = "{$vars['name']}[]";
+}
+unset($input_vars['align']);
+unset($input_vars['options']);
+
+if (count($vars['options']) > 0) {
+ // include a default value so if nothing is checked 0 will be passed.
+ if ($vars['name'] && $vars['default'] !== false) {
+ echo "<input type=\"hidden\" name=\"{$vars['name']}\" value=\"{$vars['default']}\" />";
+ }
+
+ echo "<ul class=\"$class\" $id>";
+ foreach ($vars['options'] as $label => $value) {
+ // @deprecated 1.8 Remove in 1.9
+ if (is_integer($label)) {
+ elgg_deprecated_notice('$vars[\'options\'] must be an associative array in input/checkboxes', 1.8);
+ $label = $value;
+ }
+
+ $input_vars['checked'] = in_array(elgg_strtolower($value), $values);
+ $input_vars['value'] = $value;
+
+ $input = elgg_view('input/checkbox', $input_vars);
+
+ echo "<li><label>$input$label</label></li>";
+ }
+ echo '</ul>';
+}
diff --git a/views/default/input/date.php b/views/default/input/date.php
new file mode 100644
index 000000000..828ce5520
--- /dev/null
+++ b/views/default/input/date.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Elgg date input
+ * Displays a text field with a popup date picker.
+ *
+ * The elgg.ui JavaScript library initializes the jQueryUI datepicker based
+ * on the CSS class .elgg-input-date. It uses the ISO 8601 standard for date
+ * representation: yyyy-mm-dd.
+ *
+ * Unix timestamps are supported by setting the 'timestamp' parameter to true.
+ * The date is still displayed to the user in a text format but is submitted as
+ * a unix timestamp in seconds.
+ *
+ * @uses $vars['value'] The current value, if any (as a unix timestamp)
+ * @uses $vars['class'] Additional CSS class
+ * @uses $vars['timestamp'] Store as a Unix timestamp in seconds. Default = false
+ * Note: you cannot use an id with the timestamp option.
+ */
+
+//@todo popup_calendar deprecated in 1.8. Remove in 2.0
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-date popup_calendar {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-date popup_calendar";
+}
+
+$defaults = array(
+ 'value' => '',
+ 'disabled' => false,
+ 'timestamp' => false,
+);
+
+$vars = array_merge($defaults, $vars);
+
+$timestamp = $vars['timestamp'];
+unset($vars['timestamp']);
+
+if ($timestamp) {
+ echo elgg_view('input/hidden', array(
+ 'name' => $vars['name'],
+ 'value' => $vars['value'],
+ ));
+
+ $vars['class'] = "{$vars['class']} elgg-input-timestamp";
+ $vars['id'] = $vars['name'];
+ unset($vars['name']);
+ unset($vars['internalname']);
+}
+
+// convert timestamps to text for display
+if (is_numeric($vars['value'])) {
+ $vars['value'] = gmdate('Y-m-d', $vars['value']);
+}
+
+$attributes = elgg_format_attributes($vars);
+echo "<input type=\"text\" $attributes />";
diff --git a/views/default/input/datepicker.php b/views/default/input/datepicker.php
new file mode 100644
index 000000000..8955e6e53
--- /dev/null
+++ b/views/default/input/datepicker.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * @deprecated use input/date instead
+ */
+elgg_deprecated_notice('input/datepicker was deprecated in favor of input/date', 1.8);
+echo elgg_view('input/date', $vars); \ No newline at end of file
diff --git a/views/default/input/dropdown.php b/views/default/input/dropdown.php
new file mode 100644
index 000000000..9f07874f1
--- /dev/null
+++ b/views/default/input/dropdown.php
@@ -0,0 +1,71 @@
+<?php
+/**
+ * Elgg dropdown input
+ * Displays a dropdown (select) input field
+ *
+ * @warning Default values of FALSE or NULL will match '' (empty string) but not 0.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['options'] An array of strings representing the options for the dropdown field
+ * @uses $vars['options_values'] An associative array of "value" => "option"
+ * where "value" is the name and "option" is
+ * the value displayed on the button. Replaces
+ * $vars['options'] when defined.
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-dropdown {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-dropdown";
+}
+
+$defaults = array(
+ 'disabled' => false,
+ 'value' => '',
+ 'options_values' => array(),
+ 'options' => array(),
+);
+
+$vars = array_merge($defaults, $vars);
+
+$options_values = $vars['options_values'];
+unset($vars['options_values']);
+
+$options = $vars['options'];
+unset($vars['options']);
+
+$value = $vars['value'];
+unset($vars['value']);
+
+?>
+<select <?php echo elgg_format_attributes($vars); ?>>
+<?php
+
+if ($options_values) {
+ foreach ($options_values as $opt_value => $option) {
+
+ $option_attrs = elgg_format_attributes(array(
+ 'value' => $opt_value,
+ 'selected' => (string)$opt_value == (string)$value,
+ ));
+
+ echo "<option $option_attrs>$option</option>";
+ }
+} else {
+ if (is_array($options)) {
+ foreach ($options as $option) {
+
+ $option_attrs = elgg_format_attributes(array(
+ 'selected' => (string)$option == (string)$value
+ ));
+
+ echo "<option $option_attrs>$option</option>";
+ }
+ }
+}
+?>
+</select>
diff --git a/views/default/input/email.php b/views/default/input/email.php
new file mode 100644
index 000000000..190fb88c6
--- /dev/null
+++ b/views/default/input/email.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Elgg email input
+ * Displays an email input field
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-email {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-email";
+}
+
+$defaults = array(
+ 'disabled' => false,
+);
+
+$vars = array_merge($defaults, $vars);
+
+?>
+
+<input type="text" <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/views/default/input/file.php b/views/default/input/file.php
new file mode 100644
index 000000000..452fe72b9
--- /dev/null
+++ b/views/default/input/file.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Elgg file input
+ * Displays a file input field
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] The current value if any
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (!empty($vars['value'])) {
+ echo elgg_echo('fileexists') . "<br />";
+}
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-file {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-file";
+}
+
+$defaults = array(
+ 'disabled' => false,
+ 'size' => 30,
+);
+
+$attrs = array_merge($defaults, $vars);
+
+?>
+<input type="file" <?php echo elgg_format_attributes($attrs); ?> />
diff --git a/views/default/input/form.php b/views/default/input/form.php
new file mode 100644
index 000000000..df30133b3
--- /dev/null
+++ b/views/default/input/form.php
@@ -0,0 +1,44 @@
+<?php
+/**
+ * Create a form for data submission.
+ * Use this view for forms as it provides protection against CSRF attacks.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['body'] The body of the form (made up of other input/xxx views and html
+ * @uses $vars['action'] The action URL of the form
+ * @uses $vars['method'] The submit method: post (default) or get
+ * @uses $vars['enctype'] Set to 'multipart/form-data' if uploading a file
+ * @uses $vars['disable_security'] turn off CSRF security by setting to true
+ * @uses $vars['class'] Additional class for the form
+ */
+
+$defaults = array(
+ 'method' => "post",
+ 'disable_security' => FALSE,
+);
+
+$vars = array_merge($defaults, $vars);
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-form {$vars['class']}";
+} else {
+ $vars['class'] = 'elgg-form';
+}
+
+$vars['action'] = elgg_normalize_url($vars['action']);
+$vars['method'] = strtolower($vars['method']);
+
+$body = $vars['body'];
+unset($vars['body']);
+
+// Generate a security header
+if (!$vars['disable_security']) {
+ $body = elgg_view('input/securitytoken') . $body;
+}
+unset($vars['disable_security']);
+
+$attributes = elgg_format_attributes($vars);
+
+echo "<form $attributes><fieldset>$body</fieldset></form>";
diff --git a/views/default/input/friendspicker.php b/views/default/input/friendspicker.php
new file mode 100644
index 000000000..40708c890
--- /dev/null
+++ b/views/default/input/friendspicker.php
@@ -0,0 +1,319 @@
+<?php
+/**
+ * Elgg friends picker
+ * Lists the friends picker
+ *
+ * @warning Below is the ugliest code in Elgg. It needs to be rewritten or removed
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['entities'] The array of ElggUser objects
+ * @uses $vars['name']
+ * @uses $vars['value']
+ * @uses $vars['highlight']
+ * @uses $vars['callback']
+ */
+
+elgg_load_js('elgg.friendspicker');
+elgg_load_js('jquery.easing');
+
+
+$chararray = elgg_echo('friendspicker:chararray');
+
+// Initialise name
+if (!isset($vars['name'])) {
+ $name = "friend";
+} else {
+ $name = $vars['name'];
+}
+
+// Are we highlighting default or all?
+if (empty($vars['highlight'])) {
+ $vars['highlight'] = 'default';
+}
+if ($vars['highlight'] != 'all') {
+ $vars['highlight'] = 'default';
+}
+
+// Initialise values
+if (!isset($vars['value'])) {
+ $vars['value'] = array();
+} else {
+ if (!is_array($vars['value'])) {
+ $vars['value'] = (int) $vars['value'];
+ $vars['value'] = array($vars['value']);
+ }
+}
+
+// Initialise whether we're calling back or not
+if (isset($vars['callback'])) {
+ $callback = $vars['callback'];
+} else {
+ $callback = false;
+}
+
+// We need to count the number of friends pickers on the page.
+if (!isset($vars['friendspicker'])) {
+ global $friendspicker;
+ if (!isset($friendspicker)) {
+ $friendspicker = 0;
+ }
+ $friendspicker++;
+} else {
+ $friendspicker = $vars['friendspicker'];
+}
+
+$users = array();
+$activeletters = array();
+
+// Are we displaying form tags and submit buttons?
+// (If we've been given a target, then yes! Otherwise, no.)
+if (isset($vars['formtarget'])) {
+ $formtarget = $vars['formtarget'];
+} else {
+ $formtarget = false;
+}
+
+// Sort users by letter
+if (is_array($vars['entities']) && sizeof($vars['entities'])) {
+ foreach($vars['entities'] as $user) {
+ $letter = elgg_strtoupper(elgg_substr($user->name, 0, 1));
+
+ if (!elgg_substr_count($chararray, $letter)) {
+ $letter = "*";
+ }
+ if (!isset($users[$letter])) {
+ $users[$letter] = array();
+ }
+ $users[$letter][$user->guid] = $user;
+ }
+}
+
+// sort users in letters alphabetically
+foreach ($users as $letter => $letter_users) {
+ usort($letter_users, create_function('$a, $b', '
+ return strcasecmp($a->name, $b->name);
+ '));
+ $users[$letter] = $letter_users;
+}
+
+if (!$callback) {
+ ?>
+
+ <div class="friends-picker-main-wrapper">
+
+ <?php
+
+ if (isset($vars['content'])) {
+ echo $vars['content'];
+ }
+ ?>
+
+ <div id="friends-picker_placeholder<?php echo $friendspicker; ?>">
+
+ <?php
+}
+
+if (!isset($vars['replacement'])) {
+ if ($formtarget) {
+?>
+<?php //@todo JS 1.8: no ?>
+<script language="text/javascript">
+ $(function() { // onload...do
+ $('#collectionMembersForm<?php echo $friendspicker; ?>').submit(function() {
+ var inputs = [];
+ $(':input', this).each(function() {
+ if (this.type != 'checkbox' || (this.type == 'checkbox' && this.checked != false)) {
+ inputs.push(this.name + '=' + escape(this.value));
+ }
+ });
+ jQuery.ajax({
+ type: "POST",
+ data: inputs.join('&'),
+ url: this.action,
+ success: function(){
+ $('a.collectionmembers<?php echo $friendspicker; ?>').click();
+ }
+
+ });
+ return false;
+ })
+ })
+
+ </script>
+
+<!-- Collection members form -->
+<form id="collectionMembersForm<?php echo $friendspicker; ?>" action="<?php echo $formtarget; ?>" method="post"> <!-- action="" method=""> -->
+
+<?php
+ echo elgg_view('input/securitytoken');
+ echo elgg_view('input/hidden', array(
+ 'name' => 'collection_id',
+ 'value' => $vars['collection_id'],
+ ));
+ }
+?>
+
+<div class="friends-picker-wrapper">
+<div id="friends-picker<?php echo $friendspicker; ?>">
+ <div class="friends-picker-container">
+<?php
+
+// Initialise letters
+ $chararray .= "*";
+ $letter = elgg_substr($chararray, 0, 1);
+ $letpos = 0;
+ while (1 == 1) {
+ ?>
+ <div class="panel" title="<?php echo $letter; ?>">
+ <div class="wrapper">
+ <h3><?php echo $letter; ?></h3>
+ <?php
+
+ if (isset($users[$letter])) {
+ ksort($users[$letter]);
+
+ echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">";
+ $col = 0;
+
+ foreach($users[$letter] as $friend) {
+ if ($col == 0) {
+ echo "<tr>";
+ }
+
+ //echo "<p>" . $user->name . "</p>";
+ $label = elgg_view_entity_icon($friend, 'tiny', array('use_hover' => false));
+ $options[$label] = $friend->getGUID();
+
+ if ($vars['highlight'] == 'all' && !in_array($letter,$activeletters)) {
+ $activeletters[] = $letter;
+ }
+
+
+ if (in_array($friend->getGUID(),$vars['value'])) {
+ $checked = "checked = \"checked\"";
+ if (!in_array($letter,$activeletters) && $vars['highlight'] == 'default') {
+ $activeletters[] = $letter;
+ }
+ } else {
+ $checked = "";
+ }
+ ?>
+
+ <td>
+
+ <input type="checkbox" <?php echo $checked; ?> name="<?php echo $name; ?>[]" value="<?php echo $options[$label]; ?>" />
+
+ </td>
+
+ <td>
+
+ <div style="width: 25px; margin-bottom: 15px;">
+ <?php
+ echo $label;
+ ?>
+ </div>
+ </td>
+ <td style="width: 200px; padding: 5px;">
+ <?php echo $friend->name; ?>
+ </td>
+ <?php
+ $col++;
+ if ($col == 3){
+ echo "</tr>";
+ $col = 0;
+ }
+ }
+ if ($col < 3) {
+ echo "</tr>";
+ }
+
+ echo "</table>";
+ }
+
+?>
+
+ </div>
+ </div>
+<?php
+
+ $substr = elgg_substr($chararray, elgg_strlen($chararray) - 1, 1);
+ if ($letter == $substr) {
+ break;
+ }
+ //$letter++;
+ $letpos++;
+ $letter = elgg_substr($chararray, $letpos, 1);
+ }
+
+?>
+ </div>
+
+<?php
+
+if ($formtarget) {
+
+ if (isset($vars['formcontents']))
+ echo $vars['formcontents'];
+
+?>
+ <div class="clearfix"></div>
+ <div class="friendspicker-savebuttons">
+ <input type="submit" class="elgg-button elgg-button-submit" value="<?php echo elgg_echo('save'); ?>" />
+ <input type="button" class="elgg-button elgg-button-cancel" value="<?php echo elgg_echo('cancel'); ?>" onclick="$('a.collectionmembers<?php echo $friendspicker; ?>').click();" />
+ <br /></div>
+ </form>
+
+<?php
+
+}
+
+?>
+
+</div>
+</div>
+
+<?php
+} else {
+ echo $vars['replacement'];
+}
+if (!$callback) {
+
+?>
+
+</div>
+</div>
+
+
+<?php
+
+}
+
+if (!isset($vars['replacement'])) {
+?>
+<?php //@todo JS 1.8: no ?>
+<script type="text/javascript">
+ // initialise picker
+ $("div#friends-picker<?php echo $friendspicker; ?>").friendsPicker(<?php echo $friendspicker; ?>);
+</script>
+<script type="text/javascript">
+$(document).ready(function () {
+// manually add class to corresponding tab for panels that have content
+<?php
+if (sizeof($activeletters) > 0)
+ //$chararray = elgg_echo('friendspicker:chararray');
+ foreach($activeletters as $letter) {
+ $tab = elgg_strpos($chararray, $letter) + 1;
+?>
+$("div#friends-picker-navigation<?php echo $friendspicker; ?> li.tab<?php echo $tab; ?> a").addClass("tabHasContent");
+<?php
+ }
+
+?>
+});
+</script>
+
+<?php
+
+} \ No newline at end of file
diff --git a/views/default/input/hidden.php b/views/default/input/hidden.php
new file mode 100644
index 000000000..9c2fc6c08
--- /dev/null
+++ b/views/default/input/hidden.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Create a hidden data field
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] The current value, if any
+ */
+
+?>
+<input type="hidden" <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/views/default/input/location.php b/views/default/input/location.php
new file mode 100644
index 000000000..4cf05c72a
--- /dev/null
+++ b/views/default/input/location.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Location input field
+ *
+ * @uses $vars['entity'] The ElggEntity that has a location
+ * @uses $vars['value'] The default value for the location
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-location {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-location";
+}
+
+$defaults = array(
+ 'disabled' => false,
+);
+
+if (isset($vars['entity'])) {
+ $defaults['value'] = $vars['entity']->location;
+ unset($vars['entity']);
+}
+
+$vars = array_merge($defaults, $vars);
+
+echo elgg_view('input/tag', $vars);
diff --git a/views/default/input/longtext.php b/views/default/input/longtext.php
new file mode 100644
index 000000000..61dc7ca19
--- /dev/null
+++ b/views/default/input/longtext.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Elgg long text input
+ * Displays a long text input field that can use WYSIWYG editor
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] The current value, if any - will be html encoded
+ * @uses $vars['disabled'] Is the input field disabled?
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-longtext {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-longtext";
+}
+
+$defaults = array(
+ 'value' => '',
+ 'rows' => '10',
+ 'cols' => '50',
+ 'id' => 'elgg-input-' . rand(), //@todo make this more robust
+);
+
+$vars = array_merge($defaults, $vars);
+
+$value = $vars['value'];
+unset($vars['value']);
+
+echo elgg_view_menu('longtext', array(
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+ 'id' => $vars['id'],
+));
+
+?>
+
+<textarea <?php echo elgg_format_attributes($vars); ?>>
+<?php echo htmlspecialchars($value, ENT_QUOTES, 'UTF-8', false); ?>
+</textarea>
diff --git a/views/default/input/password.php b/views/default/input/password.php
new file mode 100644
index 000000000..45f2b20a6
--- /dev/null
+++ b/views/default/input/password.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Elgg password input
+ * Displays a password input field
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['name'] The name of the input field
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-password {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-password";
+}
+
+$defaults = array(
+ 'disabled' => false,
+ 'value' => '',
+);
+
+$attrs = array_merge($defaults, $vars);
+?>
+
+<input type="password" <?php echo elgg_format_attributes($attrs); ?> />
diff --git a/views/default/input/plaintext.php b/views/default/input/plaintext.php
new file mode 100644
index 000000000..e92c61ced
--- /dev/null
+++ b/views/default/input/plaintext.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Elgg long text input (plaintext)
+ * Displays a long text input field that should not be overridden by wysiwyg editors.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['name'] The name of the input field
+ * @uses $vars['class'] Additional CSS class
+ * @uses $vars['disabled']
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-plaintext {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-plaintext";
+}
+
+$defaults = array(
+ 'value' => '',
+ 'rows' => '10',
+ 'cols' => '50',
+ 'disabled' => false,
+);
+
+$vars = array_merge($defaults, $vars);
+
+$value = $vars['value'];
+unset($vars['value']);
+
+?>
+
+<textarea <?php echo elgg_format_attributes($vars); ?>>
+<?php echo htmlspecialchars($value, ENT_QUOTES, 'UTF-8', false); ?>
+</textarea>
diff --git a/views/default/input/pulldown.php b/views/default/input/pulldown.php
new file mode 100644
index 000000000..705329691
--- /dev/null
+++ b/views/default/input/pulldown.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Deprecated pulldown input view - use 'input/dropdown' instead.
+ *
+ * @deprecated 1.8
+ */
+
+elgg_deprecated_notice("input/pulldown was deprecated by input/dropdown", 1.8);
+echo elgg_view('input/dropdown', $vars);
diff --git a/views/default/input/radio.php b/views/default/input/radio.php
new file mode 100644
index 000000000..ef860a773
--- /dev/null
+++ b/views/default/input/radio.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Elgg radio input
+ * Displays a radio input field
+ *
+ * @warning Passing integers as labels does not currently work due to a
+ * deprecated hack that will be removed in Elgg 1.9. To use integer labels,
+ * the labels must be character codes: 1 would be &#0049;
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['name'] The name of the input field
+ * @uses $vars['options'] An array of strings representing the options for the
+ * radio field as "label" => option
+ * @uses $vars['class'] Additional class of the list. Optional.
+ * @uses $vars['align'] 'horizontal' or 'vertical' Default: 'vertical'
+ */
+
+$defaults = array(
+ 'align' => 'vertical',
+ 'value' => array(),
+ 'disabled' => false,
+ 'options' => array(),
+ 'name' => '',
+);
+
+$vars = array_merge($defaults, $vars);
+
+$id = '';
+if (isset($vars['id'])) {
+ $id = "id=\"{$vars['id']}\"";
+ unset($vars['id']);
+}
+
+$class = "elgg-input-radios elgg-{$vars['align']}";
+if (isset($vars['class'])) {
+ $class .= " {$vars['class']}";
+ unset($vars['class']);
+}
+unset($vars['align']);
+$vars['class'] = 'elgg-input-radio';
+
+if (is_array($vars['value'])) {
+ $vars['value'] = array_map('elgg_strtolower', $vars['value']);
+} else {
+ $vars['value'] = array(elgg_strtolower($vars['value']));
+}
+
+$options = $vars['options'];
+unset($vars['options']);
+
+$value = $vars['value'];
+unset($vars['value']);
+
+if ($options && count($options) > 0) {
+ echo "<ul class=\"$class\" $id>";
+ foreach ($options as $label => $option) {
+
+ $vars['checked'] = in_array(elgg_strtolower($option), $value);
+ $vars['value'] = $option;
+
+ $attributes = elgg_format_attributes($vars);
+
+ // handle indexed array where label is not specified
+ // @deprecated 1.8 Remove in 1.9
+ if (is_integer($label)) {
+ elgg_deprecated_notice('$vars[\'options\'] must be an associative array in input/radio', 1.8);
+ $label = $option;
+ }
+
+ echo "<li><label><input type=\"radio\" $attributes />$label</label></li>";
+ }
+ echo '</ul>';
+}
diff --git a/views/default/input/reset.php b/views/default/input/reset.php
new file mode 100644
index 000000000..082da8669
--- /dev/null
+++ b/views/default/input/reset.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Create a reset input button
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['class'] CSS class that replaces elgg-button-cancel
+ */
+
+$vars['type'] = 'reset';
+$vars['class'] = elgg_extract('class', $vars, 'elgg-button-cancel');
+
+echo elgg_view('input/button', $vars); \ No newline at end of file
diff --git a/views/default/input/securitytoken.php b/views/default/input/securitytoken.php
new file mode 100644
index 000000000..75410848a
--- /dev/null
+++ b/views/default/input/securitytoken.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * CSRF security token view for use with secure forms.
+ *
+ * It is still recommended that you use input/form.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$ts = time();
+$token = generate_action_token($ts);
+
+echo elgg_view('input/hidden', array('name' => '__elgg_token', 'value' => $token));
+echo elgg_view('input/hidden', array('name' => '__elgg_ts', 'value' => $ts));
diff --git a/views/default/input/submit.php b/views/default/input/submit.php
new file mode 100644
index 000000000..df369b3b4
--- /dev/null
+++ b/views/default/input/submit.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Create a submit input button
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['class'] CSS class that replaces elgg-button-submit
+ */
+
+$vars['type'] = 'submit';
+$vars['class'] = elgg_extract('class', $vars, 'elgg-button-submit');
+
+echo elgg_view('input/button', $vars); \ No newline at end of file
diff --git a/views/default/input/tag.php b/views/default/input/tag.php
new file mode 100644
index 000000000..8893a18ff
--- /dev/null
+++ b/views/default/input/tag.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Elgg tag input
+ *
+ * Accepts a single tag value
+ *
+ * @uses $vars['value'] The default value for the tag
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-tag {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-tag";
+}
+
+$defaults = array(
+ 'value' => '',
+ 'disabled' => false,
+);
+
+$vars = array_merge($defaults, $vars);
+?>
+
+<input type="text" <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/views/default/input/tags.php b/views/default/input/tags.php
new file mode 100644
index 000000000..261cf9f97
--- /dev/null
+++ b/views/default/input/tags.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Elgg tag input
+ * Displays a tag input field
+ *
+ * @uses $vars['disabled']
+ * @uses $vars['class'] Additional CSS class
+ * @uses $vars['value'] Array of tags or a string
+ * @uses $vars['entity'] Optional. Entity whose tags are being displayed (metadata ->tags)
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-tags {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-tags";
+}
+
+$defaults = array(
+ 'value' => '',
+ 'disabled' => false,
+);
+
+if (isset($vars['entity'])) {
+ $defaults['value'] = $vars['entity']->tags;
+ unset($vars['entity']);
+}
+
+$vars = array_merge($defaults, $vars);
+
+if (is_array($vars['value'])) {
+ $tags = array();
+
+ foreach ($vars['value'] as $tag) {
+ if (is_string($tag)) {
+ $tags[] = $tag;
+ } else {
+ $tags[] = $tag->value;
+ }
+ }
+
+ $vars['value'] = implode(", ", $tags);
+}
+
+?>
+<input type="text" <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/views/default/input/text.php b/views/default/input/text.php
new file mode 100644
index 000000000..07ce5c710
--- /dev/null
+++ b/views/default/input/text.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Elgg text input
+ * Displays a text input field
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-text {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-text";
+}
+
+$defaults = array(
+ 'value' => '',
+ 'disabled' => false,
+);
+
+$vars = array_merge($defaults, $vars);
+
+?>
+<input type="text" <?php echo elgg_format_attributes($vars); ?> /> \ No newline at end of file
diff --git a/views/default/input/url.php b/views/default/input/url.php
new file mode 100644
index 000000000..e97a316d8
--- /dev/null
+++ b/views/default/input/url.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Elgg URL input
+ * Displays a URL input field
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['class'] Additional CSS class
+ */
+
+if (isset($vars['class'])) {
+ $vars['class'] = "elgg-input-url {$vars['class']}";
+} else {
+ $vars['class'] = "elgg-input-url";
+}
+
+$defaults = array(
+ 'value' => '',
+ 'disabled' => false,
+);
+
+$vars = array_merge($defaults, $vars);
+
+?>
+
+<input type="text" <?php echo elgg_format_attributes($vars); ?> />
diff --git a/views/default/input/urlshortener.php b/views/default/input/urlshortener.php
new file mode 100644
index 000000000..ecfb02efa
--- /dev/null
+++ b/views/default/input/urlshortener.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * This view provides a hook for third parties to provide a URL shortener.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+?> \ No newline at end of file
diff --git a/views/default/input/userpicker.php b/views/default/input/userpicker.php
new file mode 100644
index 000000000..91a397e37
--- /dev/null
+++ b/views/default/input/userpicker.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * User Picker. Sends an array of user guids.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] Array of user guids for already selected users or null
+ *
+ * The name of the hidden fields is members[]
+ *
+ * @warning Only a single input/userpicker is supported per web page.
+ *
+ * Defaults to lazy load user lists in alphabetical order. User needs
+ * to type two characters before seeing the user popup list.
+ *
+ * As users are selected they move down to a "users" box.
+ * When this happens, a hidden input is created with the
+ * name of members[] and a value of the GUID.
+ */
+
+elgg_load_js('elgg.userpicker');
+elgg_load_js('jquery.ui.autocomplete.html');
+
+function user_picker_add_user($user_id) {
+ $user = get_entity($user_id);
+ if (!$user || !($user instanceof ElggUser)) {
+ return false;
+ }
+
+ $icon = elgg_view_entity_icon($user, 'tiny', array('use_hover' => false));
+
+ // this html must be synced with the userpicker.js library
+ $code = '<li><div class="elgg-image-block">';
+ $code .= "<div class='elgg-image'>$icon</div>";
+ $code .= "<div class='elgg-image-alt'><a href='#' class='elgg-userpicker-remove'>X</a></div>";
+ $code .= "<div class='elgg-body'>" . $user->name . "</div>";
+ $code .= "</div>";
+ $code .= "<input type=\"hidden\" name=\"members[]\" value=\"$user_id\">";
+ $code .= '</li>';
+
+ return $code;
+}
+
+// loop over all values and prepare them so that "in" will work in javascript
+$values = array();
+if (!is_array($vars['value'])) {
+ $vars['value'] = array($vars['value']);
+}
+foreach ($vars['value'] as $value) {
+ $values[$value] = TRUE;
+}
+
+// convert the values to a json-encoded list
+$json_values = json_encode($values);
+
+// create an HTML list of users
+$user_list = '';
+foreach ($vars['value'] as $user_id) {
+ $user_list .= user_picker_add_user($user_id);
+}
+
+?>
+<div class="elgg-user-picker">
+ <input type="text" class="elgg-input-user-picker" size="30"/>
+ <input type="checkbox" name="match_on" value="true" />
+ <label><?php echo elgg_echo('userpicker:only_friends'); ?></label>
+ <ul class="elgg-user-picker-list"><?php echo $user_list; ?></ul>
+</div>
+<script type="text/javascript">
+ // @todo grab the values in the init function rather than using inline JS
+ elgg.userpicker.userList = <?php echo $json_values ?>;
+</script> \ No newline at end of file
diff --git a/views/default/js/admin.php b/views/default/js/admin.php
new file mode 100644
index 000000000..e8aa0d2ed
--- /dev/null
+++ b/views/default/js/admin.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Admin-area specific javascript functions.
+ *
+ * @since 1.8
+ */
+
+if (0) { ?><script><?php }
+?>
+elgg.provide('elgg.admin');
+
+elgg.admin.init = function () {
+
+ // system messages do not fade in admin area, instead slide up when clicked
+ $('.elgg-system-messages li').stop(true);
+ $('.elgg-system-messages li').die('click');
+ $('.elgg-system-messages li').live('click', function() {
+ $(this).stop().slideUp('medium');
+ });
+
+ // draggable plugin reordering
+ $('#elgg-plugin-list > ul').sortable({
+ items: 'li:has(> .elgg-state-draggable)',
+ handle: '.elgg-head',
+ forcePlaceholderSize: true,
+ placeholder: 'elgg-widget-placeholder',
+ opacity: 0.8,
+ revert: 500,
+ stop: elgg.admin.movePlugin
+ });
+
+ // in-line editing for custom profile fields.
+ // @note this requires jquery.jeditable plugin
+ $(".elgg-state-editable").editable(elgg.admin.editProfileField, {
+ type: 'text',
+ onblur: 'submit',
+ width: '300px',
+ height: 'none',
+ style: 'display:inline;'
+ });
+
+ // draggable profile field reordering.
+ $('#elgg-profile-fields').sortable({
+ items: 'li',
+ handle: 'span.elgg-state-draggable',
+ stop: elgg.admin.moveProfileField
+ });
+
+ // admin notices delete ajax
+ $('a.elgg-admin-notice').click(elgg.admin.deleteNotice);
+};
+
+/**
+ * Save the plugin order after a move event.
+ *
+ * @param {Object} e Event object.
+ * @param {Object} ui jQueryUI object
+ * @return void
+ */
+elgg.admin.movePlugin = function(e, ui) {
+ // get guid from id like elgg-object-<guid>
+ var pluginGuid = ui.item.attr('id');
+ pluginGuid = pluginGuid.replace('elgg-object-', '');
+
+ elgg.action('admin/plugins/set_priority', {
+ data: {
+ plugin_guid: pluginGuid,
+ // we start at priority 1
+ priority: ui.item.index() + 1
+ }
+ });
+};
+
+/**
+ * In-line editing for custom profile fields
+ *
+ * @param string value The new value
+ * @param {Object} settings The settings used for editable
+ * @return void
+ */
+elgg.admin.editProfileField = function(value, settings) {
+ var id = $(this).attr('id');
+ id = id.replace('elgg-profile-field-', '');
+
+ var data = {
+ id: id,
+ label: value
+ };
+
+ elgg.action('profile/fields/edit', data);
+ return value;
+};
+
+/**
+ * Save the plugin profile order after a move event.
+ *
+ * @param {Object} e Event object.
+ * @param {Object} ui jQueryUI object
+ * @return void
+ */
+elgg.admin.moveProfileField = function(e, ui) {
+ var orderArr = $('#elgg-profile-fields').sortable('toArray');
+ var orderStr = orderArr.join(',');
+
+ elgg.action('profile/fields/reorder', {
+ fieldorder: orderStr
+ });
+};
+
+/**
+ * Fires the ajax action to delete the admin notice then hides the notice.
+ *
+ * @return void
+ */
+elgg.admin.deleteNotice = function(e) {
+ e.preventDefault();
+ var $container = $(this).closest('p');
+
+ elgg.action($(this).attr('href'), {
+ success: function(json) {
+ $container.slideUp('medium');
+ }
+ });
+};
+
+elgg.register_hook_handler('init', 'system', elgg.admin.init, 1000); \ No newline at end of file
diff --git a/views/default/js/elgg.php b/views/default/js/elgg.php
new file mode 100644
index 000000000..6fe03484d
--- /dev/null
+++ b/views/default/js/elgg.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Core Elgg javascript loader
+ */
+global $CONFIG;
+
+$prereq_files = array(
+ "vendors/sprintf.js",
+ "js/lib/elgglib.js",
+);
+
+foreach ($prereq_files as $file) {
+ include("{$CONFIG->path}$file");
+}
+
+//No such thing as autoloading classes in javascript
+$model_files = array(
+ 'ElggEntity',
+ 'ElggUser',
+ 'ElggPriorityList',
+);
+
+foreach ($model_files as $file) {
+ include("{$CONFIG->path}js/classes/$file.js");
+}
+
+//Include library files
+$libs = array(
+ //libraries
+ 'prototypes',
+ 'hooks',
+ 'security',
+ 'languages',
+ 'ajax',
+ 'session',
+ 'pageowner',
+ 'configuration',
+
+ //ui
+ 'ui',
+ 'ui.widgets',
+);
+
+foreach ($libs as $file) {
+ include("{$CONFIG->path}js/lib/$file.js");
+ // putting a new line between the files to address http://trac.elgg.org/ticket/3081
+ echo "\n";
+}
+
+/**
+ * Set some values that are cacheable
+ */
+if (0) { ?><script><?php }
+?>
+
+elgg.version = '<?php echo get_version(); ?>';
+elgg.release = '<?php echo get_version(true); ?>';
+elgg.config.wwwroot = '<?php echo elgg_get_site_url(); ?>';
+<?php //@todo make this configurable ?>
+elgg.security.interval = 5 * 60 * 1000;
+elgg.config.domReady = false;
+elgg.config.language = '<?php echo isset($CONFIG->language) ? $CONFIG->language : 'en'; ?>';
+elgg.config.languageReady = false;
+
+//After the DOM is ready
+$(function() {
+ elgg.config.domReady = true;
+ elgg.initWhenReady();
+});
+
+<?php
+
+$previous_content = elgg_view('js/initialise_elgg');
+if ($previous_content) {
+ elgg_deprecated_notice("The view 'js/initialise_elgg' has been deprecated for js/elgg", 1.8);
+ echo $previous_content;
+}
diff --git a/views/default/js/initialise_elgg.php b/views/default/js/initialise_elgg.php
new file mode 100644
index 000000000..3d617953a
--- /dev/null
+++ b/views/default/js/initialise_elgg.php
@@ -0,0 +1,4 @@
+<?php
+/**
+ * This has been deprecated in 1.8 - see elgg.php in this directory.
+ */ \ No newline at end of file
diff --git a/views/default/js/initialize_elgg.php b/views/default/js/initialize_elgg.php
new file mode 100644
index 000000000..b45c33463
--- /dev/null
+++ b/views/default/js/initialize_elgg.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Initialize Elgg's js lib with the uncacheable data
+ */
+
+if (0) { ?><script><?php }
+?>
+/**
+ * Don't want to cache these -- they could change for every request
+ */
+elgg.config.lastcache = <?php echo (int)elgg_get_config('lastcache'); ?>;
+elgg.config.viewtype = '<?php echo elgg_get_viewtype(); ?>';
+elgg.config.simplecache_enabled = <?php echo (int)elgg_is_simplecache_enabled(); ?>;
+
+elgg.security.token.__elgg_ts = <?php echo $ts = time(); ?>;
+elgg.security.token.__elgg_token = '<?php echo generate_action_token($ts); ?>';
+
+<?php
+// @todo json export should be smoother than this...
+// @todo Might also be nice to make url exportable. $entity->url? yes please!
+$page_owner = elgg_get_page_owner_entity();
+
+if ($page_owner instanceof ElggEntity) {
+ $page_owner_json = array();
+ foreach ($page_owner->getExportableValues() as $v) {
+ $page_owner_json[$v] = $page_owner->$v;
+ }
+
+ $page_owner_json['subtype'] = $page_owner->getSubtype();
+ $page_owner_json['url'] = $page_owner->getURL();
+
+ echo 'elgg.page_owner = ' . json_encode($page_owner_json) . ';';
+}
+
+$user = elgg_get_logged_in_user_entity();
+
+if ($user instanceof ElggUser) {
+ $user_json = array();
+ foreach ($user->getExportableValues() as $v) {
+ $user_json[$v] = $user->$v;
+ }
+
+ $user_json['subtype'] = $user->getSubtype();
+ $user_json['url'] = $user->getURL();
+ $user_json['admin'] = $user->isAdmin();
+
+ echo 'elgg.session.user = new elgg.ElggUser(' . json_encode($user_json) . ');';
+}
+?>
+
+//Before the DOM is ready, but elgg's js framework is fully initalized
+elgg.trigger_hook('boot', 'system'); \ No newline at end of file
diff --git a/views/default/js/languages.php b/views/default/js/languages.php
new file mode 100644
index 000000000..c51d7bcb2
--- /dev/null
+++ b/views/default/js/languages.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * @uses $vars['language']
+ */
+global $CONFIG;
+
+$language = $vars['language'];
+
+$translations = $CONFIG->translations['en'];
+
+if ($language != 'en') {
+ $translations = array_merge($translations, $CONFIG->translations[$language]);
+}
+
+echo json_encode($translations); \ No newline at end of file
diff --git a/views/default/js/languages/en.php b/views/default/js/languages/en.php
new file mode 100644
index 000000000..8a604cc12
--- /dev/null
+++ b/views/default/js/languages/en.php
@@ -0,0 +1,2 @@
+<?php
+echo elgg_view('js/languages', array('language' => 'en')); \ No newline at end of file
diff --git a/views/default/js/lightbox.php b/views/default/js/lightbox.php
new file mode 100644
index 000000000..a1f018eea
--- /dev/null
+++ b/views/default/js/lightbox.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Elgg lightbox
+ *
+ * Usage
+ * Call elgg_load_js('lightbox') and elgg_load_css('lightbox') then
+ * apply the class elgg-lightbox to links.
+ *
+ * Advanced Usage
+ * Elgg is distributed with the Fancybox jQuery library. Please go to
+ * http://fancybox.net for more information on the options of this lightbox.
+ *
+ * Overriding
+ * In a plugin, override this view and override the registration for the
+ * lightbox JavaScript and CSS (@see elgg_views_boot()).
+ *
+ * @todo add support for passing options: $('#myplugin-lightbox').elgg.ui.lightbox(options);
+ */
+
+if (0) { ?><script><?php }
+?>
+
+/**
+ * Lightbox initialization
+ */
+elgg.ui.lightbox_init = function() {
+ $(".elgg-lightbox").fancybox();
+}
+
+elgg.register_hook_handler('init', 'system', elgg.ui.lightbox_init);
+
+<?php
+
+$js_path = elgg_get_config('path');
+$js_path = "{$js_path}vendors/jquery/fancybox/jquery.fancybox-1.3.4.pack.js";
+include $js_path;
diff --git a/views/default/js/walled_garden.php b/views/default/js/walled_garden.php
new file mode 100644
index 000000000..7a482fe23
--- /dev/null
+++ b/views/default/js/walled_garden.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Walled garden JavaScript
+ *
+ * @since 1.8
+ */
+
+// note that this assumes the button view is not using single quotes
+$cancel_button = elgg_view('input/button', array(
+ 'value' => elgg_echo('cancel'),
+ 'class' => 'elgg-button-cancel mlm',
+));
+$cancel_button = trim($cancel_button);
+
+if (0) { ?><script><?php }
+?>
+
+elgg.provide('elgg.walled_garden');
+
+elgg.walled_garden.init = function () {
+
+ $('.forgot_link').click(elgg.walled_garden.load('lost_password'));
+ $('.registration_link').click(elgg.walled_garden.load('register'));
+
+ $('input.elgg-button-cancel').live('click', function(event) {
+ if ($('.elgg-walledgarden-single').is(':visible')) {
+ $('.elgg-walledgarden-double').fadeToggle();
+ $('.elgg-walledgarden-single').fadeToggle();
+ $('.elgg-walledgarden-single').remove();
+ }
+ event.preventDefault();
+ });
+};
+
+/**
+ * Creates a closure for loading walled garden content through ajax
+ *
+ * @param {String} view Name of the walled garden view
+ * @return {Object}
+ */
+elgg.walled_garden.load = function(view) {
+ return function(event) {
+ var id = '#elgg-walledgarden-' + view;
+ id = id.replace('_', '-');
+ elgg.get('walled_garden/' + view, {
+ 'success' : function(data) {
+ $('.elgg-body-walledgarden').append(data);
+ $(id).find('input.elgg-button-submit').after('<?php echo $cancel_button; ?>');
+ $('#elgg-walledgarden-login').fadeToggle();
+ $(id).fadeToggle();
+ }
+ });
+ event.preventDefault();
+ };
+};
+
+elgg.register_hook_handler('init', 'system', elgg.walled_garden.init); \ No newline at end of file
diff --git a/views/default/navigation/breadcrumbs.php b/views/default/navigation/breadcrumbs.php
new file mode 100644
index 000000000..88577a8ff
--- /dev/null
+++ b/views/default/navigation/breadcrumbs.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Displays breadcrumbs.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['breadcrumbs'] (Optional) Array of arrays with keys 'title' and 'link'
+ * @uses $vars['class']
+ *
+ * @see elgg_push_breadcrumb
+ */
+
+if (isset($vars['breadcrumbs'])) {
+ $breadcrumbs = $vars['breadcrumbs'];
+} else {
+ $breadcrumbs = elgg_get_breadcrumbs();
+}
+
+$class = 'elgg-menu elgg-breadcrumbs';
+$additional_class = elgg_extract('class', $vars, '');
+if ($additional_class) {
+ $class = "$class $additional_class";
+}
+
+if (is_array($breadcrumbs) && count($breadcrumbs) > 0) {
+ echo "<ul class=\"$class\">";
+ foreach ($breadcrumbs as $breadcrumb) {
+ if (!empty($breadcrumb['link'])) {
+ $crumb = elgg_view('output/url', array(
+ 'href' => $breadcrumb['link'],
+ 'text' => $breadcrumb['title'],
+ 'is_trusted' => true,
+ ));
+ } else {
+ $crumb = $breadcrumb['title'];
+ }
+ echo "<li>$crumb</li>";
+ }
+ echo '</ul>';
+}
diff --git a/views/default/navigation/menu/default.php b/views/default/navigation/menu/default.php
new file mode 100644
index 000000000..006deb3ea
--- /dev/null
+++ b/views/default/navigation/menu/default.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Default menu
+ *
+ * @uses $vars['name'] Name of the menu
+ * @uses $vars['menu'] Array of menu items
+ * @uses $vars['class'] Additional CSS class for the menu
+ * @uses $vars['item_class'] Additional CSS class for each menu item
+ * @uses $vars['show_section_headers'] Do we show headers for each section?
+ */
+
+// we want css classes to use dashes
+$vars['name'] = preg_replace('/[^a-z0-9\-]/i', '-', $vars['name']);
+$headers = elgg_extract('show_section_headers', $vars, false);
+$item_class = elgg_extract('item_class', $vars, '');
+
+$class = "elgg-menu elgg-menu-{$vars['name']}";
+if (isset($vars['class'])) {
+ $class .= " {$vars['class']}";
+}
+
+foreach ($vars['menu'] as $section => $menu_items) {
+ echo elgg_view('navigation/menu/elements/section', array(
+ 'items' => $menu_items,
+ 'class' => "$class elgg-menu-{$vars['name']}-$section",
+ 'section' => $section,
+ 'name' => $vars['name'],
+ 'show_section_headers' => $headers,
+ 'item_class' => $item_class,
+ ));
+}
diff --git a/views/default/navigation/menu/elements/item.php b/views/default/navigation/menu/elements/item.php
new file mode 100644
index 000000000..fd9738826
--- /dev/null
+++ b/views/default/navigation/menu/elements/item.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * A single element of a menu.
+ *
+ * @package Elgg.Core
+ * @subpackage Navigation
+ *
+ * @uses $vars['item'] ElggMenuItem
+ * @uses $vars['item_class'] Additional CSS class for the menu item
+ */
+
+$item = $vars['item'];
+
+$link_class = 'elgg-menu-closed';
+if ($item->getSelected()) {
+ // @todo switch to addItemClass when that is implemented
+ //$item->setItemClass('elgg-state-selected');
+ $link_class = 'elgg-menu-opened';
+}
+
+$children = $item->getChildren();
+if ($children) {
+ $item->addLinkClass($link_class);
+ $item->addLinkClass('elgg-menu-parent');
+}
+
+$item_class = $item->getItemClass();
+if ($item->getSelected()) {
+ $item_class = "$item_class elgg-state-selected";
+}
+if (isset($vars['item_class']) && $vars['item_class']) {
+ $item_class .= ' ' . $vars['item_class'];
+}
+
+echo "<li class=\"$item_class\">";
+echo $item->getContent();
+if ($children) {
+ echo elgg_view('navigation/menu/elements/section', array(
+ 'items' => $children,
+ 'class' => 'elgg-menu elgg-child-menu',
+ ));
+}
+echo '</li>';
diff --git a/views/default/navigation/menu/elements/section.php b/views/default/navigation/menu/elements/section.php
new file mode 100644
index 000000000..c0e9ba750
--- /dev/null
+++ b/views/default/navigation/menu/elements/section.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Menu group
+ *
+ * @uses $vars['items'] Array of menu items
+ * @uses $vars['class'] Additional CSS class for the section
+ * @uses $vars['name'] Name of the menu
+ * @uses $vars['section'] The section name
+ * @uses $vars['item_class'] Additional CSS class for each menu item
+ * @uses $vars['show_section_headers'] Do we show headers for each section
+ */
+
+$headers = elgg_extract('show_section_headers', $vars, false);
+$class = elgg_extract('class', $vars, '');
+$item_class = elgg_extract('item_class', $vars, '');
+
+if ($headers) {
+ $name = elgg_extract('name', $vars);
+ $section = elgg_extract('section', $vars);
+ echo '<h2>' . elgg_echo("menu:$name:header:$section") . '</h2>';
+}
+
+echo "<ul class=\"$class\">";
+foreach ($vars['items'] as $menu_item) {
+ echo elgg_view('navigation/menu/elements/item', array(
+ 'item' => $menu_item,
+ 'item_class' => $item_class,
+ ));
+}
+echo '</ul>';
diff --git a/views/default/navigation/menu/page.php b/views/default/navigation/menu/page.php
new file mode 100644
index 000000000..56a288234
--- /dev/null
+++ b/views/default/navigation/menu/page.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Page menu
+ *
+ * @uses $vars['menu']
+ * @uses $vars['selected_item']
+ * @uses $vars['class']
+ * @uses $vars['name']
+ * @uses $vars['show_section_headers']
+ */
+
+$headers = elgg_extract('show_section_headers', $vars, false);
+
+$class = 'elgg-menu elgg-menu-page';
+if (isset($vars['class'])) {
+ $class = "$class {$vars['class']}";
+}
+
+if (isset($vars['selected_item'])) {
+ $parent = $vars['selected_item']->getParent();
+
+ while ($parent) {
+ $parent->setSelected();
+ $parent = $parent->getParent();
+ }
+}
+
+foreach ($vars['menu'] as $section => $menu_items) {
+ echo elgg_view('navigation/menu/elements/section', array(
+ 'items' => $menu_items,
+ 'class' => "$class elgg-menu-page-$section",
+ 'section' => $section,
+ 'name' => $vars['name'],
+ 'show_section_headers' => $headers
+ ));
+}
diff --git a/views/default/navigation/menu/site.php b/views/default/navigation/menu/site.php
new file mode 100644
index 000000000..24c21dd57
--- /dev/null
+++ b/views/default/navigation/menu/site.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Site navigation menu
+ *
+ * @uses $vars['menu']['default']
+ * @uses $vars['menu']['more']
+ */
+
+$default_items = elgg_extract('default', $vars['menu'], array());
+$more_items = elgg_extract('more', $vars['menu'], array());
+
+echo '<ul class="elgg-menu elgg-menu-site elgg-menu-site-default clearfix">';
+foreach ($default_items as $menu_item) {
+ echo elgg_view('navigation/menu/elements/item', array('item' => $menu_item));
+}
+
+if ($more_items) {
+ echo '<li class="elgg-more">';
+
+ $more = elgg_echo('more');
+ echo "<a href=\"#\">$more</a>";
+
+ echo elgg_view('navigation/menu/elements/section', array(
+ 'class' => 'elgg-menu elgg-menu-site elgg-menu-site-more',
+ 'items' => $more_items,
+ ));
+
+ echo '</li>';
+}
+echo '</ul>';
diff --git a/views/default/navigation/menu/user_hover.php b/views/default/navigation/menu/user_hover.php
new file mode 100644
index 000000000..5c89e585c
--- /dev/null
+++ b/views/default/navigation/menu/user_hover.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * User hover menu
+ *
+ * Register for the 'register', 'menu:user_hover' plugin hook to add to the user
+ * hover menu. There are three sections: action, default, and admin.
+ *
+ * @uses $vars['menu'] Menu array provided by elgg_view_menu()
+ */
+
+$user = $vars['entity'];
+$actions = elgg_extract('action', $vars['menu'], null);
+$main = elgg_extract('default', $vars['menu'], null);
+$admin = elgg_extract('admin', $vars['menu'], null);
+
+echo '<ul class="elgg-menu elgg-menu-hover">';
+
+// name and username
+$name_link = elgg_view('output/url', array(
+ 'href' => $user->getURL(),
+ 'text' => "<span class=\"elgg-heading-basic\">$user->name</span>&#64;$user->username",
+ 'is_trusted' => true,
+));
+echo "<li>$name_link</li>";
+
+// actions
+if (elgg_is_logged_in() && $actions) {
+ echo '<li>';
+ echo elgg_view('navigation/menu/elements/section', array(
+ 'class' => "elgg-menu elgg-menu-hover-actions",
+ 'items' => $actions,
+ ));
+ echo '</li>';
+}
+
+// main
+if ($main) {
+ echo '<li>';
+
+ echo elgg_view('navigation/menu/elements/section', array(
+ 'class' => 'elgg-menu elgg-menu-hover-default',
+ 'items' => $main,
+ ));
+
+ echo '</li>';
+}
+
+// admin
+if (elgg_is_admin_logged_in() && $admin) {
+ echo '<li>';
+
+ echo elgg_view('navigation/menu/elements/section', array(
+ 'class' => 'elgg-menu elgg-menu-hover-admin',
+ 'items' => $admin,
+ ));
+
+ echo '</li>';
+}
+
+echo '</ul>';
diff --git a/views/default/navigation/pagination.php b/views/default/navigation/pagination.php
new file mode 100644
index 000000000..04044c51c
--- /dev/null
+++ b/views/default/navigation/pagination.php
@@ -0,0 +1,132 @@
+<?php
+/**
+ * Elgg pagination
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses int $vars['offset'] The offset in the list
+ * @uses int $vars['limit'] Number of items per page
+ * @uses int $vars['count'] Number of items in list
+ * @uses string $vars['base_url'] Base URL to use in links
+ * @uses string $vars['offset_key'] The string to use for offet in the URL
+ */
+
+if (elgg_in_context('widget')) {
+ // widgets do not show pagination
+ return true;
+}
+
+$offset = abs((int) elgg_extract('offset', $vars, 0));
+// because you can say $vars['limit'] = 0
+if (!$limit = (int) elgg_extract('limit', $vars, 10)) {
+ $limit = 10;
+}
+
+$count = (int) elgg_extract('count', $vars, 0);
+$offset_key = elgg_extract('offset_key', $vars, 'offset');
+// some views pass an empty string for base_url
+if (isset($vars['base_url']) && $vars['base_url']) {
+ $base_url = $vars['base_url'];
+} else if (isset($vars['baseurl']) && $vars['baseurl']) {
+ elgg_deprecated_notice("Use 'base_url' instead of 'baseurl' for the navigation/pagination view", 1.8);
+ $base_url = $vars['baseurl'];
+} else {
+ $base_url = current_page_url();
+}
+
+$num_pages = elgg_extract('num_pages', $vars, 10);
+$delta = ceil($num_pages / 2);
+
+if ($count <= $limit && $offset == 0) {
+ // no need for pagination
+ return true;
+}
+
+$total_pages = ceil($count / $limit);
+$current_page = ceil($offset / $limit) + 1;
+
+$pages = new stdClass();
+$pages->prev = array(
+ 'text' => '&laquo; ' . elgg_echo('previous'),
+ 'href' => '',
+ 'is_trusted' => true,
+);
+$pages->next = array(
+ 'text' => elgg_echo('next') . ' &raquo;',
+ 'href' => '',
+ 'is_trusted' => true,
+);
+$pages->items = array();
+
+// Add pages before the current page
+if ($current_page > 1) {
+ $prev_offset = $offset - $limit;
+ if ($prev_offset < 0) {
+ $prev_offset = 0;
+ }
+
+ $pages->prev['href'] = elgg_http_add_url_query_elements($base_url, array($offset_key => $prev_offset));
+
+ $first_page = $current_page - $delta;
+ if ($first_page < 1) {
+ $first_page = 1;
+ }
+
+ $pages->items = range($first_page, $current_page - 1);
+}
+
+
+$pages->items[] = $current_page;
+
+
+// add pages after the current one
+if ($current_page < $total_pages) {
+ $next_offset = $offset + $limit;
+ if ($next_offset >= $count) {
+ $next_offset--;
+ }
+
+ $pages->next['href'] = elgg_http_add_url_query_elements($base_url, array($offset_key => $next_offset));
+
+ $last_page = $current_page + $delta;
+ if ($last_page > $total_pages) {
+ $last_page = $total_pages;
+ }
+
+ $pages->items = array_merge($pages->items, range($current_page + 1, $last_page));
+}
+
+
+echo '<ul class="elgg-pagination">';
+
+if ($pages->prev['href']) {
+ $link = elgg_view('output/url', $pages->prev);
+ echo "<li>$link</li>";
+} else {
+ echo "<li class=\"elgg-state-disabled\"><span>{$pages->prev['text']}</span></li>";
+}
+
+foreach ($pages->items as $page) {
+ if ($page == $current_page) {
+ echo "<li class=\"elgg-state-selected\"><span>$page</span></li>";
+ } else {
+ $page_offset = (($page - 1) * $limit);
+ $url = elgg_http_add_url_query_elements($base_url, array($offset_key => $page_offset));
+ $link = elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => $page,
+ 'is_trusted' => true,
+ ));
+ echo "<li>$link</li>";
+ }
+}
+
+if ($pages->next['href']) {
+ $link = elgg_view('output/url', $pages->next);
+ echo "<li>$link</li>";
+} else {
+ echo "<li class=\"elgg-state-disabled\"><span>{$pages->next['text']}</span></li>";
+}
+
+echo '</ul>';
diff --git a/views/default/navigation/tabs.php b/views/default/navigation/tabs.php
new file mode 100644
index 000000000..95e3f2669
--- /dev/null
+++ b/views/default/navigation/tabs.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Tab navigation
+ *
+ * @uses string $vars['type'] horizontal || vertical - Defaults to horizontal
+ * @uses string $vars['class'] Additional class to add to ul
+ * @uses array $vars['tabs'] A multi-dimensional array of tab entries in the format array(
+ * 'text' => string, // The string between the <a></a> tags
+ * 'href' => string, // URL for the link
+ * 'class' => string // Class of the li element
+ * 'id' => string, // ID of the li element
+ * 'selected' => bool // if this tab is currently selected (applied to li element)
+ * 'link_class' => string, // Class to pass to the link
+ * 'link_id' => string, // ID to pass to the link
+ * )
+ */
+$options = elgg_clean_vars($vars);
+
+$type = elgg_extract('type', $vars, 'horizontal');
+
+if ($type == 'horizontal') {
+ $options['class'] = "elgg-tabs elgg-htabs";
+} else {
+ $options['class'] = "elgg-tabs elgg-vtabs";
+}
+if (isset($vars['class'])) {
+ $options['class'] = "{$options['class']} {$vars['class']}";
+}
+
+unset($options['tabs']);
+unset($options['type']);
+
+$attributes = elgg_format_attributes($options);
+
+if (isset($vars['tabs']) && is_array($vars['tabs']) && !empty($vars['tabs'])) {
+ ?>
+ <ul <?php echo $attributes; ?>>
+ <?php
+ foreach ($vars['tabs'] as $info) {
+ $class = elgg_extract('class', $info, '');
+ $id = elgg_extract('id', $info, '');
+
+ $selected = elgg_extract('selected', $info, FALSE);
+ if ($selected) {
+ $class .= ' elgg-state-selected';
+ }
+
+ $class_str = ($class) ? "class=\"$class\"" : '';
+ $id_str = ($id) ? "id=\"$id\"" : '';
+
+ $options = $info;
+ unset($options['class']);
+ unset($options['id']);
+ unset($options['selected']);
+
+ if (!isset($info['href']) && isset($info['url'])) {
+ $options['href'] = $info['url'];
+ unset($options['url']);
+ }
+ if (!isset($info['text']) && isset($info['title'])) {
+ $options['text'] = $options['title'];
+ unset($options['title']);
+ }
+ if (isset($info['link_class'])) {
+ $options['class'] = $options['link_class'];
+ unset($options['link_class']);
+ }
+
+ if (isset($info['link_id'])) {
+ $options['id'] = $options['link_id'];
+ unset($options['link_id']);
+ }
+
+ $link = elgg_view('output/url', $options);
+
+ echo "<li $id_str $class_str>$link</li>";
+ }
+ ?>
+ </ul>
+ <?php
+}
diff --git a/views/default/navigation/topbar_tools.php b/views/default/navigation/topbar_tools.php
new file mode 100644
index 000000000..307f03fc6
--- /dev/null
+++ b/views/default/navigation/topbar_tools.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Empty view for backward compatibility.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @deprecated 1.8 Extend the topbar menus or the page/elements/topbar view directly
+ */
diff --git a/views/default/navigation/viewtype.php b/views/default/navigation/viewtype.php
new file mode 100644
index 000000000..6dfa4ebc7
--- /dev/null
+++ b/views/default/navigation/viewtype.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Elgg list view switcher
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @deprecated 1.8 See how file plugin adds a toggle in function file_register_toggle()
+ */
+
+elgg_deprecated_notice('navigation/viewtype was deprecated', 1.8);
diff --git a/views/default/object/admin_notice.php b/views/default/object/admin_notice.php
new file mode 100644
index 000000000..11524567e
--- /dev/null
+++ b/views/default/object/admin_notice.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * A persistent admin notice to be displayed on all admin pages until cleared.
+ */
+
+if (isset($vars['entity']) && elgg_instanceof($vars['entity'], 'object', 'admin_notice')) {
+ $notice = $vars['entity'];
+ $message = $notice->description;
+
+ $delete = elgg_view('output/url', array(
+ 'href' => "action/admin/delete_admin_notice?guid=$notice->guid",
+ 'text' => '<span class="elgg-icon elgg-icon-delete"></span>',
+ 'is_action' => true,
+ 'class' => 'elgg-admin-notice',
+ 'is_trusted' => true,
+ ));
+
+ echo "<p>$delete$message</p>";
+}
+
diff --git a/views/default/object/default.php b/views/default/object/default.php
new file mode 100644
index 000000000..110648304
--- /dev/null
+++ b/views/default/object/default.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * ElggObject default view.
+ *
+ * @warning This view may be used for other ElggEntity objects
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$icon = elgg_view_entity_icon($vars['entity'], 'small');
+
+$title = $vars['entity']->title;
+if (!$title) {
+ $title = $vars['entity']->name;
+}
+if (!$title) {
+ $title = get_class($vars['entity']);
+}
+
+if (elgg_instanceof($vars['entity'], 'object')) {
+ $metadata = elgg_view('navigation/menu/metadata', $vars);
+}
+
+$owner_link = '';
+$owner = $vars['entity']->getOwnerEntity();
+if ($owner) {
+ $owner_link = elgg_view('output/url', array(
+ 'href' => $owner->getURL(),
+ 'text' => $owner->name,
+ 'is_trusted' => true,
+ ));
+}
+
+$date = elgg_view_friendly_time($vars['entity']->time_created);
+
+$subtitle = "$owner_link $date";
+
+$params = array(
+ 'entity' => $vars['entity'],
+ 'title' => $title,
+ 'metadata' => $metadata,
+ 'subtitle' => $subtitle,
+ 'tags' => $vars['entity']->tags,
+);
+$params = $params + $vars;
+$body = elgg_view('object/elements/summary', $params);
+
+echo elgg_view_image_block($icon, $body, $vars);
diff --git a/views/default/object/elements/full.php b/views/default/object/elements/full.php
new file mode 100644
index 000000000..9b89f9706
--- /dev/null
+++ b/views/default/object/elements/full.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Object full rendering
+ *
+ * Sample output:
+ * <div class="elgg-content">
+ * <div class="elgg-image-block">
+ * </div>
+ * <div class="elgg-output">
+ * </div>
+ * </div>
+ *
+ * @uses $vars['entity'] ElggEntity
+ * @uses $vars['icon'] HTML for the content icon
+ * @uses $vars['summary'] HTML for the content summary
+ * @uses $vars['body'] HTML for the content body
+ * @uses $vars['class'] Optional additional class for the content wrapper
+ */
+
+$icon = elgg_extract('icon', $vars);
+$summary = elgg_extract('summary', $vars);
+$body = elgg_extract('body', $vars);
+$class = elgg_extract('class', $vars);
+if ($class) {
+ $class = "elgg-content $class";
+} else {
+ $class = "elgg-content";
+}
+
+$header = elgg_view_image_block($icon, $summary);
+
+echo <<<HTML
+<div class="$class">
+$header
+$body
+</div>
+HTML;
diff --git a/views/default/object/elements/summary.php b/views/default/object/elements/summary.php
new file mode 100644
index 000000000..c0f3ad340
--- /dev/null
+++ b/views/default/object/elements/summary.php
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Object summary
+ *
+ * Sample output
+ * <ul class="elgg-menu elgg-menu-entity"><li>Public</li><li>Like this</li></ul>
+ * <h3><a href="">Title</a></h3>
+ * <p class="elgg-subtext">Posted 3 hours ago by George</p>
+ * <p class="elgg-tags"><a href="">one</a>, <a href="">two</a></p>
+ * <div class="elgg-content">Excerpt text</div>
+ *
+ * @uses $vars['entity'] ElggEntity
+ * @uses $vars['title'] Title link (optional) false = no title, '' = default
+ * @uses $vars['metadata'] HTML for entity menu and metadata (optional)
+ * @uses $vars['subtitle'] HTML for the subtitle (optional)
+ * @uses $vars['tags'] HTML for the tags (default is tags on entity, pass false for no tags)
+ * @uses $vars['content'] HTML for the entity content (optional)
+ */
+
+$entity = $vars['entity'];
+
+$title_link = elgg_extract('title', $vars, '');
+if ($title_link === '') {
+ if (isset($entity->title)) {
+ $text = $entity->title;
+ } else {
+ $text = $entity->name;
+ }
+ $params = array(
+ 'text' => $text,
+ 'href' => $entity->getURL(),
+ 'is_trusted' => true,
+ );
+ $title_link = elgg_view('output/url', $params);
+}
+
+$metadata = elgg_extract('metadata', $vars, '');
+$subtitle = elgg_extract('subtitle', $vars, '');
+$content = elgg_extract('content', $vars, '');
+
+$tags = elgg_extract('tags', $vars, '');
+if ($tags === '') {
+ $tags = elgg_view('output/tags', array('tags' => $entity->tags));
+}
+
+if ($metadata) {
+ echo $metadata;
+}
+if ($title_link) {
+ echo "<h3>$title_link</h3>";
+}
+echo "<div class=\"elgg-subtext\">$subtitle</div>";
+echo $tags;
+
+echo elgg_view('object/summary/extend', $vars);
+
+if ($content) {
+ echo "<div class=\"elgg-content\">$content</div>";
+}
diff --git a/views/default/object/plugin.php b/views/default/object/plugin.php
new file mode 100644
index 000000000..5c7138e96
--- /dev/null
+++ b/views/default/object/plugin.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Used to show plugin user settings.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ *
+ */
+
+if (!elgg_in_context('admin')) {
+ forward('/', 403);
+}
+
+$plugin = $vars['entity'];
+
+if (!$plugin->isValid()) {
+ echo elgg_view('object/plugin/invalid', $vars);
+} else {
+ echo elgg_view('object/plugin/full', $vars);
+}
diff --git a/views/default/object/plugin/elements/dependencies.php b/views/default/object/plugin/elements/dependencies.php
new file mode 100644
index 000000000..d8daedd33
--- /dev/null
+++ b/views/default/object/plugin/elements/dependencies.php
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Shows a table of plugin dependecies for ElggPlugin in $vars['plugin'].
+ *
+ * This uses a table because it's a table of data.
+ *
+ * @package Elgg.Core
+ * @subpackage Admin.Plugins
+ */
+
+$plugin = elgg_extract('plugin', $vars, false);
+$deps = $plugin->getPackage()->checkDependencies(true);
+
+$columns = array('type', 'name', 'expected_value', 'local_value', 'comment');
+
+echo '<table class="elgg-plugin-dependencies styled"><tr>';
+
+foreach ($columns as $column) {
+ $column = elgg_echo("admin:plugins:dependencies:$column");
+ echo "<th class=\"pas\">$column</th>";
+}
+
+echo '</tr>';
+
+$row = 'odd';
+foreach ($deps as $dep) {
+ $fields = elgg_get_plugin_dependency_strings($dep);
+ $type = $dep['type'];
+
+ if ($dep['status']) {
+ $class = "elgg-state-success elgg-dependency elgg-dependency-$type";
+ } elseif ($dep['type'] == 'suggests') {
+ $class = "elgg-state-warning elgg-dependency elgg-dependency-$type";
+ } else {
+ $class = "elgg-state-error elgg-dependency elgg-dependency-$type";
+ }
+
+ echo "<tr class=\"$row\">";
+
+ foreach ($columns as $column) {
+ echo "<td class=\"pas $class\">{$fields[$column]}</td>";
+ }
+
+ echo '</tr>';
+
+ $row = ($row == 'odd') ? 'even' : 'odd';
+}
+
+echo '</table>'; \ No newline at end of file
diff --git a/views/default/object/plugin/full.php b/views/default/object/plugin/full.php
new file mode 100644
index 000000000..2de65b555
--- /dev/null
+++ b/views/default/object/plugin/full.php
@@ -0,0 +1,308 @@
+<?php
+/**
+ * Displays a plugin on the admin screen.
+ *
+ * This file renders a plugin for the admin screen, including active/deactive,
+ * manifest details & display plugin settings.
+ *
+ * @uses $vars['entity']
+ * @uses $vars['display_reordering'] Do we display the priority reordering links?
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ */
+
+$plugin = $vars['entity'];
+$reordering = elgg_extract('display_reordering', $vars, false);
+$priority = $plugin->getPriority();
+$active = $plugin->isActive();
+
+$can_activate = $plugin->canActivate();
+$max_priority = elgg_get_max_plugin_priority();
+$actions_base = '/action/admin/plugins/';
+$css_id = preg_replace('/[^a-z0-9-]/i', '-', $plugin->getID());
+
+// build reordering links
+$links = '';
+$classes = array('elgg-plugin');
+
+if ($reordering) {
+ $classes[] = 'elgg-state-draggable';
+
+ // top and up link only if not at top
+ if ($priority > 1) {
+ $top_url = elgg_http_add_url_query_elements($actions_base . 'set_priority', array(
+ 'plugin_guid' => $plugin->guid,
+ 'priority' => 'first',
+ 'is_action' => true
+ ));
+
+ $links .= "<li>" . elgg_view('output/url', array(
+ 'href' => $top_url,
+ 'text' => elgg_echo('top'),
+ 'is_action' => true,
+ 'is_trusted' => true,
+ )) . "</li>";
+
+ $up_url = elgg_http_add_url_query_elements($actions_base . 'set_priority', array(
+ 'plugin_guid' => $plugin->guid,
+ 'priority' => '-1',
+ 'is_action' => true
+ ));
+
+ $links .= "<li>" . elgg_view('output/url', array(
+ 'href' => $up_url,
+ 'text' => elgg_echo('up'),
+ 'is_action' => true,
+ 'is_trusted' => true,
+ )) . "</li>";
+ }
+
+ // down and bottom links only if not at bottom
+ if ($priority < $max_priority) {
+ $down_url = elgg_http_add_url_query_elements($actions_base . 'set_priority', array(
+ 'plugin_guid' => $plugin->guid,
+ 'priority' => '+1',
+ 'is_action' => true
+ ));
+
+ $links .= "<li>" . elgg_view('output/url', array(
+ 'href' => $down_url,
+ 'text' => elgg_echo('down'),
+ 'is_action' => true,
+ 'is_trusted' => true,
+ )) . "</li>";
+
+ $bottom_url = elgg_http_add_url_query_elements($actions_base . 'set_priority', array(
+ 'plugin_guid' => $plugin->guid,
+ 'priority' => 'last',
+ 'is_action' => true
+ ));
+
+ $links .= "<li>" . elgg_view('output/url', array(
+ 'href' => $bottom_url,
+ 'text' => elgg_echo('bottom'),
+ 'is_action' => true,
+ 'is_trusted' => true,
+ )) . "</li>";
+ }
+} else {
+ $classes[] = 'elgg-state-undraggable';
+}
+
+
+// activate / deactivate links
+
+// always let them deactivate
+$options = array(
+ 'is_action' => true,
+ 'is_trusted' => true,
+);
+if ($active) {
+ $classes[] = 'elgg-state-active';
+ $action = 'deactivate';
+ $options['text'] = elgg_echo('admin:plugins:deactivate');
+ $options['class'] = "elgg-button elgg-button-cancel";
+
+ if (!$can_activate) {
+ $classes[] = 'elgg-state-active';
+ $options['class'] = 'elgg-button elgg-state-warning';
+ }
+} else if ($can_activate) {
+ $classes[] = 'elgg-state-inactive';
+ $action = 'activate';
+ $options['text'] = elgg_echo('admin:plugins:activate');
+ $options['class'] = "elgg-button elgg-button-submit";
+} else {
+ $classes[] = 'elgg-state-inactive';
+ $action = '';
+ $options['text'] = elgg_echo('admin:plugins:cannot_activate');
+ $options['class'] = "elgg-button elgg-button-disabled";
+ $options['disabled'] = 'disabled';
+}
+
+if ($action) {
+ $url = elgg_http_add_url_query_elements($actions_base . $action, array(
+ 'plugin_guids[]' => $plugin->guid
+ ));
+
+ $options['href'] = $url;
+}
+$action_button = elgg_view('output/url', $options);
+
+// Display categories and make category classes
+$categories = $plugin->getManifest()->getCategories();
+$categories_html = '';
+if ($categories) {
+ $base_url = elgg_get_site_url() . "admin/plugins?category=";
+
+ foreach ($categories as $category) {
+ $css_class = preg_replace('/[^a-z0-9-]/i', '-', $category);
+ $classes[] = "elgg-plugin-category-$css_class";
+
+ $url = $base_url . urlencode($category);
+ $friendly_category = htmlspecialchars(ElggPluginManifest::getFriendlyCategory($category));
+ $categories_html .= "<li class=\"elgg-plugin-category prm\"><a href=\"$url\">$friendly_category</a></li>";
+ }
+}
+
+$screenshots_html = '';
+$screenshots = $plugin->getManifest()->getScreenshots();
+if ($screenshots) {
+ $base_url = elgg_get_plugins_path() . $plugin->getID() . '/';
+ foreach ($screenshots as $screenshot) {
+ $desc = elgg_echo($screenshot['description']);
+ $alt = htmlentities($desc, ENT_QUOTES, 'UTF-8');
+ $screenshot_full = "{$vars['url']}admin_plugin_screenshot/{$plugin->getID()}/full/{$screenshot['path']}";
+ $screenshot_src = "{$vars['url']}admin_plugin_screenshot/{$plugin->getID()}/thumbnail/{$screenshot['path']}";
+
+ $screenshots_html .= "<li class=\"elgg-plugin-screenshot prm ptm\"><a class=\"elgg-lightbox\" href=\"$screenshot_full\">"
+ . "<img src=\"$screenshot_src\" alt=\"$alt\"></a></li>";
+ }
+}
+
+// metadata
+$description = elgg_view('output/longtext', array('value' => $plugin->getManifest()->getDescription()));
+$author = '<span>' . elgg_echo('admin:plugins:label:author') . '</span>: '
+ . elgg_view('output/text', array('value' => $plugin->getManifest()->getAuthor()));
+$version = htmlspecialchars($plugin->getManifest()->getVersion());
+$website = elgg_view('output/url', array(
+ 'href' => $plugin->getManifest()->getWebsite(),
+ 'text' => $plugin->getManifest()->getWebsite(),
+ 'is_trusted' => true,
+));
+
+$resources = array(
+ 'repository' => $plugin->getManifest()->getRepositoryURL(),
+ 'bugtracker' => $plugin->getManifest()->getBugTrackerURL(),
+ 'donate' => $plugin->getManifest()->getDonationsPageURL(),
+);
+
+$resources_html = "<ul class=\"elgg-plugin-resources\">";
+foreach ($resources as $id => $href) {
+ if ($href) {
+ $resources_html .= "<li class=\"prm\">";
+ $resources_html .= elgg_view('output/url', array(
+ 'href' => $href,
+ 'text' => elgg_echo("admin:plugins:label:$id"),
+ 'is_trusted' => true,
+ ));
+ $resources_html .= "</li>";
+ }
+}
+$resources_html .= "</ul>";
+
+$copyright = elgg_view('output/text', array('value' => $plugin->getManifest()->getCopyright()));
+$license = elgg_view('output/text', array('value' => $plugin->getManifest()->getLicense()));
+
+// show links to text files
+$files = $plugin->getAvailableTextFiles();
+
+$docs = '';
+if ($files) {
+ $docs = '<ul>';
+ foreach ($files as $file => $path) {
+ $url = 'admin_plugin_text_file/' . $plugin->getID() . "/$file";
+ $link = elgg_view('output/url', array(
+ 'text' => $file,
+ 'href' => $url,
+ 'is_trusted' => true,
+ ));
+ $docs .= "<li>$link</li>";
+
+ }
+ $docs .= '</ul>';
+}
+
+?>
+
+<div class="<?php echo implode(' ', $classes); ?>" id="<?php echo $css_id; ?>">
+ <div class="elgg-image-block">
+ <div class="elgg-image-alt">
+ <?php if ($links) : ?>
+ <ul class="elgg-menu elgg-menu-metadata">
+ <?php echo $links; ?>
+ </ul>
+ <?php endif; ?>
+ <div class="clearfloat float-alt mtm">
+ <?php echo $action_button; ?>
+ </div>
+ </div>
+ <div class="elgg-body">
+<?php
+$settings_view_old = 'settings/' . $plugin->getID() . '/edit';
+$settings_view_new = 'plugins/' . $plugin->getID() . '/settings';
+if (elgg_view_exists($settings_view_old) || elgg_view_exists($settings_view_new)) {
+ $link = elgg_get_site_url() . "admin/plugin_settings/" . $plugin->getID();
+ $settings_link = "<a class='elgg-plugin-settings' href='$link'>[" . elgg_echo('settings') . "]</a>";
+}
+?>
+ <div class="elgg-head">
+ <h3><?php echo $plugin->getManifest()->getName() . " $version $settings_link"; ?></h3>
+ </div>
+ <?php
+ if ($plugin->getManifest()->getApiVersion() < 1.8) {
+ $reqs = $plugin->getManifest()->getRequires();
+ if (!$reqs) {
+ $message = elgg_echo('admin:plugins:warning:elgg_version_unknown');
+ echo "<p class=\"elgg-state-error\">$message</p>";
+ }
+ }
+
+ if (!$can_activate) {
+ if ($active) {
+ $message = elgg_echo('admin:plugins:warning:unmet_dependencies_active');
+ echo "<p class=\"elgg-state-warning\">$message</p>";
+ } else {
+ $message = elgg_echo('admin:plugins:warning:unmet_dependencies');
+ echo "<p class=\"elgg-state-error\">$message</p>";
+ }
+ }
+ ?>
+
+ <div><?php echo $description; ?></div>
+ <p><?php echo $author . ' - ' . $website; ?></p>
+
+ <?php
+ echo $resources_html;
+ echo $docs;
+ ?>
+
+ <div class="pts">
+ <?php
+ echo elgg_view('output/url', array(
+ 'href' => "#elgg-plugin-manifest-$css_id",
+ 'text' => elgg_echo("admin:plugins:label:moreinfo"),
+ 'rel' => 'toggle',
+ ));
+ ?>
+ </div>
+ </div>
+ </div>
+ <div class="elgg-plugin-more hidden" id="elgg-plugin-manifest-<?php echo $css_id; ?>">
+
+ <?php
+ if ($screenshots_html) {
+ ?>
+ <div><ul><?php echo $screenshots_html; ?></ul></div>
+ <?php
+ }
+
+ if ($categories_html) {
+ ?>
+ <div><?php echo elgg_echo('admin:plugins:label:categories') . ": <ul class=\"elgg-plugin-categories\">$categories_html</ul>"; ?></div>
+ <?php
+ }
+
+ ?>
+ <div><?php echo elgg_echo('admin:plugins:label:copyright') . ": " . $copyright; ?></div>
+ <div><?php echo elgg_echo('admin:plugins:label:licence') . ": " . $license; ?></div>
+ <div><?php echo elgg_echo('admin:plugins:label:location') . ": " . htmlspecialchars($plugin->getPath()) ?></div>
+
+ <div><?php echo elgg_echo('admin:plugins:label:dependencies'); ?>:
+ <?php
+ echo elgg_view('object/plugin/elements/dependencies', array('plugin' => $plugin));
+ ?>
+ </div>
+ </div>
+</div>
diff --git a/views/default/object/plugin/invalid.php b/views/default/object/plugin/invalid.php
new file mode 100644
index 000000000..828bceaba
--- /dev/null
+++ b/views/default/object/plugin/invalid.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Displays an invalid plugin on the admin screen.
+ *
+ * An invalid plugin is a plugin whose isValid() method returns false.
+ * This usually means there are required files missing, unreadable or in the
+ * wrong format.
+ *
+ * @package Elgg.Core
+ * @subpackage Plugins
+ */
+
+$plugin = $vars['entity'];
+
+$id = $plugin->getID();
+$path = htmlspecialchars($plugin->getPath());
+$message = elgg_echo('admin:plugins:warning:invalid', array($plugin->getError()));
+$css_id = preg_replace('/[^a-z0-9-]/i', '-', $plugin->getID());
+
+?>
+
+<div class="elgg-state-draggable elgg-plugin elgg-state-inactive elgg-state-error" id="elgg-plugin-<?php echo $plugin->guid; ?>">
+ <div class="elgg-head"><h3><?php echo $id; ?></h3></div>
+ <div class="elgg-body">
+ <p class="elgg-state-error"><?php echo $message; ?></p>
+ <p><?php echo elgg_echo('admin:plugins:warning:invalid:check_docs'); ?></p>
+
+ <div class="pts">
+ <?php
+ echo elgg_view('output/url', array(
+ 'href' => "#elgg-plugin-manifest-$css_id",
+ 'text' => elgg_echo("admin:plugins:label:moreinfo"),
+ 'rel' => 'toggle',
+ ));
+ ?>
+ </div>
+
+ <div class="hidden elgg-plugin-more" id="elgg-plugin-manifest-<?php echo $css_id; ?>">
+ <p><?php echo elgg_echo('admin:plugins:label:location') . ": " . $path; ?></p>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/views/default/object/widget.php b/views/default/object/widget.php
new file mode 100644
index 000000000..0c7994f2b
--- /dev/null
+++ b/views/default/object/widget.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Widget object
+ *
+ * @uses $vars['entity'] ElggWidget
+ * @uses $vars['show_access'] Show the access control in edit area? (true)
+ */
+
+$widget = $vars['entity'];
+if (!elgg_instanceof($widget, 'object', 'widget')) {
+ return true;
+}
+
+$show_access = elgg_extract('show_access', $vars, true);
+
+// @todo catch for disabled plugins
+$widget_types = elgg_get_widget_types('all');
+
+$handler = $widget->handler;
+
+$title = $widget->getTitle();
+
+$edit_area = '';
+$can_edit = $widget->canEdit();
+if ($can_edit) {
+ $edit_area = elgg_view('object/widget/elements/settings', array(
+ 'widget' => $widget,
+ 'show_access' => $show_access,
+ ));
+}
+$controls = elgg_view('object/widget/elements/controls', array(
+ 'widget' => $widget,
+ 'show_edit' => $edit_area != '',
+));
+
+// don't show content for default widgets
+if (elgg_in_context('default_widgets')) {
+ $content = '';
+} else {
+ if (elgg_view_exists("widgets/$handler/content")) {
+ $content = elgg_view("widgets/$handler/content", $vars);
+ } else {
+ elgg_deprecated_notice("widgets use content as the display view", 1.8);
+ $content = elgg_view("widgets/$handler/view", $vars);
+ }
+}
+
+$widget_id = "elgg-widget-$widget->guid";
+$widget_instance = "elgg-widget-instance-$handler";
+$widget_class = "elgg-module elgg-module-widget";
+if ($can_edit) {
+ $widget_class .= " elgg-state-draggable $widget_instance";
+} else {
+ $widget_class .= " elgg-state-fixed $widget_instance";
+}
+
+$widget_header = <<<HEADER
+ <div class="elgg-widget-handle clearfix"><h3>$title</h3>
+ $controls
+ </div>
+HEADER;
+
+$widget_body = <<<BODY
+ $edit_area
+ <div class="elgg-widget-content" id="elgg-widget-content-$widget->guid">
+ $content
+ </div>
+BODY;
+
+echo elgg_view('page/components/module', array(
+ 'class' => $widget_class,
+ 'id' => $widget_id,
+ 'body' => $widget_body,
+ 'header' => $widget_header,
+));
diff --git a/views/default/object/widget/elements/controls.php b/views/default/object/widget/elements/controls.php
new file mode 100644
index 000000000..57a935f62
--- /dev/null
+++ b/views/default/object/widget/elements/controls.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Elgg widget controls
+ *
+ * @uses $vars['widget']
+ * @uses $vars['show_edit'] Whether to show the edit button (true)
+ */
+
+echo elgg_view_menu('widget', array(
+ 'entity' => elgg_extract('widget', $vars),
+ 'show_edit' => elgg_extract('show_edit', $vars, true),
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
diff --git a/views/default/object/widget/elements/settings.php b/views/default/object/widget/elements/settings.php
new file mode 100644
index 000000000..25cda58c9
--- /dev/null
+++ b/views/default/object/widget/elements/settings.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Elgg widget edit settings
+ *
+ * @uses $vars['widget']
+ */
+
+$widget = elgg_extract('widget', $vars);
+
+// not using elgg_view_form() so that we can detect if the form is empty
+$form_body = elgg_view('forms/widgets/save', $vars);
+if (!$form_body) {
+ return true;
+}
+
+$form = elgg_view('input/form', array(
+ 'action' => 'action/widgets/save',
+ 'body' => $form_body,
+ 'class' => 'elgg-form-widgets-save',
+));
+?>
+
+<div class="elgg-widget-edit" id="widget-edit-<?php echo $widget->guid; ?>">
+ <?php echo $form; ?>
+</div>
diff --git a/views/default/output/access.php b/views/default/output/access.php
new file mode 100644
index 000000000..91c5c721e
--- /dev/null
+++ b/views/default/output/access.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Displays HTML for entity access levels.
+ * Requires an entity because some special logic for containers is used.
+ *
+ * @uses int $vars['entity'] - The entity whose access ID to display.
+ */
+
+//sort out the access level for display
+if (isset($vars['entity']) && elgg_instanceof($vars['entity'])) {
+ $access_id = $vars['entity']->access_id;
+ $access_class = 'elgg-access';
+ $access_id_string = get_readable_access_level($access_id);
+ $access_id_string = htmlentities($access_id_string, ENT_QUOTES, 'UTF-8');
+
+ // if within a group or shared access collection display group name and open/closed membership status
+ // @todo have a better way to do this instead of checking against subtype / class.
+ $container = $vars['entity']->getContainerEntity();
+
+ if ($container && $container instanceof ElggGroup) {
+ // we decided to show that the item is in a group, rather than its actual access level
+ // not required. Group ACLs are prepended with "Group: " when written.
+ //$access_id_string = elgg_echo('groups:group') . $container->name;
+ $membership = $container->membership;
+
+ if ($membership == ACCESS_PUBLIC) {
+ $access_class .= ' elgg-access-group-open';
+ } else {
+ $access_class .= ' elgg-access-group-closed';
+ }
+
+ // @todo this is plugin specific code in core. Should be removed.
+ } elseif ($container && $container->getSubtype() == 'shared_access') {
+ $access_class .= ' shared_collection';
+ } elseif ($access_id == ACCESS_PRIVATE) {
+ $access_class .= ' elgg-access-private';
+ }
+
+ $help_text = elgg_echo('access:help');
+
+ echo "<span title=\"$help_text\" class=\"$access_class\">$access_id_string</span>";
+}
diff --git a/views/default/output/calendar.php b/views/default/output/calendar.php
new file mode 100644
index 000000000..fa0bd0c04
--- /dev/null
+++ b/views/default/output/calendar.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg calendar output
+ * Displays a calendar output field
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] The current value, if any
+ *
+ */
+elgg_deprecated_notice('output/calendar was deprecated in favor of output/date', 1.8);
+echo elgg_view('output/date', $vars); \ No newline at end of file
diff --git a/views/default/output/checkboxes.php b/views/default/output/checkboxes.php
new file mode 100644
index 000000000..56d2588ac
--- /dev/null
+++ b/views/default/output/checkboxes.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg text output
+ * Displays some text that was input using a standard text field
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['text'] The text to display
+ *
+ */
+
+echo elgg_view('output/tags',$vars); \ No newline at end of file
diff --git a/views/default/output/confirmlink.php b/views/default/output/confirmlink.php
new file mode 100644
index 000000000..532790a38
--- /dev/null
+++ b/views/default/output/confirmlink.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Elgg confirmation link
+ * A link that displays a confirmation dialog before it executes
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['text'] The text of the link
+ * @uses $vars['href'] The address
+ * @uses $vars['title'] The title text (defaults to confirm text)
+ * @uses $vars['confirm'] The dialog text
+ * @uses $vars['encode_text'] Run $vars['text'] through htmlspecialchars() (false)
+ */
+
+$vars['rel'] = elgg_extract('confirm', $vars, elgg_echo('question:areyousure'));
+$vars['rel'] = addslashes($vars['rel']);
+$encode = elgg_extract('encode_text', $vars, false);
+
+// always generate missing action tokens
+$vars['href'] = elgg_add_action_tokens_to_url(elgg_normalize_url($vars['href']), true);
+
+$text = elgg_extract('text', $vars, '');
+if ($encode) {
+ $text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8', false);
+}
+
+if (!isset($vars['title']) && isset($vars['confirm'])) {
+ $vars['title'] = $vars['rel'];
+}
+
+if (isset($vars['class'])) {
+ if (!is_array($vars['class'])) {
+ $vars['class'] = array($vars['class']);
+ }
+ $vars['class'][] = 'elgg-requires-confirmation';
+} else {
+ $vars['class'] = 'elgg-requires-confirmation';
+}
+
+unset($vars['encode_text']);
+unset($vars['text']);
+unset($vars['confirm']);
+unset($vars['is_trusted']);
+
+$attributes = elgg_format_attributes($vars);
+echo "<a $attributes>$text</a>";
diff --git a/views/default/output/date.php b/views/default/output/date.php
new file mode 100644
index 000000000..1644a3480
--- /dev/null
+++ b/views/default/output/date.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Date
+ * Displays a properly formatted date
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] Date as text or a Unix timestamp in seconds
+ */
+
+// convert timestamps to text for display
+if (is_numeric($vars['value'])) {
+ $vars['value'] = gmdate('Y-m-d', $vars['value']);
+}
+
+echo $vars['value'];
diff --git a/views/default/output/dropdown.php b/views/default/output/dropdown.php
new file mode 100644
index 000000000..8d68508ca
--- /dev/null
+++ b/views/default/output/dropdown.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg dropdown display
+ * Displays a value that was entered into the system via a dropdown
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['text'] The text to display
+ *
+ */
+
+echo htmlspecialchars($vars['value'], ENT_QUOTES, 'UTF-8', false);
diff --git a/views/default/output/email.php b/views/default/output/email.php
new file mode 100644
index 000000000..f5a8bc4b8
--- /dev/null
+++ b/views/default/output/email.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg email output
+ * Displays an email address that was entered using an email input field
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] The email address to display
+ *
+ */
+
+$encoded_value = htmlspecialchars($vars['value'], ENT_QUOTES, 'UTF-8');
+
+if (!empty($vars['value'])) {
+ echo "<a href=\"mailto:$encoded_value\">$encoded_value</a>";
+} \ No newline at end of file
diff --git a/views/default/output/friendlytime.php b/views/default/output/friendlytime.php
new file mode 100644
index 000000000..22f60d517
--- /dev/null
+++ b/views/default/output/friendlytime.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Friendly time
+ * Translates an epoch time into a human-readable time.
+ *
+ * @uses string $vars['time'] Unix-style epoch timestamp
+ */
+
+$friendly_time = elgg_get_friendly_time($vars['time']);
+$timestamp = htmlspecialchars(date(elgg_echo('friendlytime:date_format'), $vars['time']));
+
+echo "<acronym title=\"$timestamp\">$friendly_time</acronym>";
diff --git a/views/default/output/friendlytitle.php b/views/default/output/friendlytitle.php
new file mode 100644
index 000000000..fbc4f39de
--- /dev/null
+++ b/views/default/output/friendlytitle.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Friendly title
+ * Makes a URL-friendly title.
+ *
+ * @uses string $vars['title'] Title to create from.
+ */
+
+
+$title = $vars['title'];
+
+//$title = iconv('UTF-8', 'ASCII//TRANSLIT', $title);
+$title = preg_replace("/[^\w ]/","",$title);
+$title = str_replace(" ","-",$title);
+$title = str_replace("--","-",$title);
+$title = trim($title);
+$title = strtolower($title);
+
+echo $title;
diff --git a/views/default/output/iframe.php b/views/default/output/iframe.php
new file mode 100644
index 000000000..7df9332f1
--- /dev/null
+++ b/views/default/output/iframe.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Display a page in an embedded window
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] Source of the page
+ *
+ */
+?>
+<iframe src="<?php echo $vars['value']; ?>">
+</iframe> \ No newline at end of file
diff --git a/views/default/output/img.php b/views/default/output/img.php
new file mode 100644
index 000000000..d3f596801
--- /dev/null
+++ b/views/default/output/img.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg image view
+ *
+ * @uses string $vars['src'] The image src url.
+ */
+
+$vars['src'] = elgg_normalize_url($vars['src']);
+$vars['src'] = elgg_format_url($vars['src']);
+
+$attributes = elgg_format_attributes($vars);
+echo "<img $attributes/>";
diff --git a/views/default/output/location.php b/views/default/output/location.php
new file mode 100644
index 000000000..e1009f17d
--- /dev/null
+++ b/views/default/output/location.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Display a location
+ *
+ * @uses $vars['entity'] The ElggEntity that has a location
+ * @uses $vars['value'] The location string if the entity is not passed
+ */
+
+if (isset($vars['entity'])) {
+ $vars['value'] = $vars['entity']->location;
+ unset($vars['entity']);
+}
+
+// Fixes #4566 we used to allow arrays of strings for location
+if (is_array($vars['value'])) {
+ $vars['value'] = implode(', ', $vars['value']);
+}
+
+echo elgg_view('output/tag', $vars);
diff --git a/views/default/output/longtext.php b/views/default/output/longtext.php
new file mode 100644
index 000000000..589100c4f
--- /dev/null
+++ b/views/default/output/longtext.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Elgg display long text
+ * Displays a large amount of text, with new lines converted to line breaks
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] The text to display
+ * @uses $vars['parse_urls'] Whether to turn urls into links. Default is true.
+ * @uses $vars['class']
+ */
+
+$class = 'elgg-output';
+$additional_class = elgg_extract('class', $vars, '');
+if ($additional_class) {
+ $vars['class'] = "$class $additional_class";
+} else {
+ $vars['class'] = $class;
+}
+
+$parse_urls = elgg_extract('parse_urls', $vars, true);
+unset($vars['parse_urls']);
+
+$text = $vars['value'];
+unset($vars['value']);
+
+if ($parse_urls) {
+ $text = parse_urls($text);
+}
+
+$text = filter_tags($text);
+
+$text = elgg_autop($text);
+
+$attributes = elgg_format_attributes($vars);
+
+echo "<div $attributes>$text</div>";
diff --git a/views/default/output/pulldown.php b/views/default/output/pulldown.php
new file mode 100644
index 000000000..7097a9a8d
--- /dev/null
+++ b/views/default/output/pulldown.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Elgg pulldown display
+ * Displays a value that was entered into the system via a pulldown
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['text'] The text to display
+ *
+ * @deprecated 1.8 Use output/dropdown
+ */
+
+echo elgg_view('output/dropdown', $vars); \ No newline at end of file
diff --git a/views/default/output/radio.php b/views/default/output/radio.php
new file mode 100644
index 000000000..0fae9977b
--- /dev/null
+++ b/views/default/output/radio.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg text output
+ * Displays some text that was input using a standard text field
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['text'] The text to display
+ *
+ */
+
+echo elgg_view('output/text', $vars); \ No newline at end of file
diff --git a/views/default/output/tag.php b/views/default/output/tag.php
new file mode 100644
index 000000000..3c002a31b
--- /dev/null
+++ b/views/default/output/tag.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Elgg single tag output
+ *
+ * @uses $vars['value'] String
+ * @uses $vars['type'] The entity type, optional
+ * @uses $vars['subtype'] The entity subtype, optional
+ *
+ */
+
+if (!empty($vars['subtype'])) {
+ $subtype = "&subtype=" . urlencode($vars['subtype']);
+} else {
+ $subtype = "";
+}
+if (!empty($vars['object'])) {
+ $object = "&object=" . urlencode($vars['object']);
+} else {
+ $object = "";
+}
+
+if (isset($vars['value'])) {
+ if (!empty($vars['type'])) {
+ $type = "&type={$vars['type']}";
+ } else {
+ $type = "";
+ }
+ $url = elgg_get_site_url() . 'search?q=' . urlencode($vars['value']) . "&search_type=tags{$type}{$subtype}{$object}";
+ echo elgg_view('output/url', array(
+ 'href' => $url,
+ 'text' => $vars['value'],
+ 'rel' => 'tag',
+ ));
+}
diff --git a/views/default/output/tagcloud.php b/views/default/output/tagcloud.php
new file mode 100644
index 000000000..a212becd8
--- /dev/null
+++ b/views/default/output/tagcloud.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * Elgg tagcloud
+ * Displays a tagcloud
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['tagcloud'] An array of stdClass objects with two elements: 'tag' (the text of the tag) and 'total' (the number of elements with this tag)
+ * @uses $vars['value'] Sames as tagcloud
+ * @uses $vars['type'] Entity type
+ * @uses $vars['subtype'] Entity subtype
+ */
+
+if (!empty($vars['subtype'])) {
+ $subtype = "&entity_subtype=" . urlencode($vars['subtype']);
+} else {
+ $subtype = "";
+}
+if (!empty($vars['type'])) {
+ $type = "&entity_type=" . urlencode($vars['type']);
+} else {
+ $type = "";
+}
+
+if (empty($vars['tagcloud']) && !empty($vars['value'])) {
+ $vars['tagcloud'] = $vars['value'];
+}
+
+if (!empty($vars['tagcloud']) && is_array($vars['tagcloud'])) {
+ $counter = 0;
+ $max = 0;
+
+ foreach ($vars['tagcloud'] as $tag) {
+ if ($tag->total > $max) {
+ $max = $tag->total;
+ }
+ }
+
+ $cloud = '';
+ foreach ($vars['tagcloud'] as $tag) {
+ if ($cloud != '') {
+ $cloud .= ', ';
+ }
+ // protecting against division by zero warnings
+ $size = round((log($tag->total) / log($max + .0001)) * 100) + 30;
+ if ($size < 100) {
+ $size = 100;
+ }
+ $url = "search?q=". urlencode($tag->tag) . "&search_type=tags$type$subtype";
+
+ $cloud .= elgg_view('output/url', array(
+ 'text' => $tag->tag,
+ 'href' => $url,
+ 'style' => "font-size: $size%;",
+ 'title' => "$tag->tag ($tag->total)",
+ 'rel' => 'tag'
+ ));
+ }
+
+ $cloud .= elgg_view('tagcloud/extend');
+
+ echo "<div class=\"elgg-tagcloud\">$cloud</div>";
+}
diff --git a/views/default/output/tags.php b/views/default/output/tags.php
new file mode 100644
index 000000000..3082dd41e
--- /dev/null
+++ b/views/default/output/tags.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * Elgg tags
+ * Tags can be a single string (for one tag) or an array of strings
+ *
+ * @uses $vars['value'] Array of tags or a string
+ * @uses $vars['type'] The entity type, optional
+ * @uses $vars['subtype'] The entity subtype, optional
+ * @uses $vars['entity'] Optional. Entity whose tags are being displayed (metadata ->tags)
+ * @uses $vars['list_class'] Optional. Additional classes to be passed to <ul> element
+ * @uses $vars['item_class'] Optional. Additional classes to be passed to <li> elements
+ * @uses $vars['icon_class'] Optional. Additional classes to be passed to tags icon image
+ */
+
+if (isset($vars['entity'])) {
+ $vars['tags'] = $vars['entity']->tags;
+ unset($vars['entity']);
+}
+
+if (!empty($vars['subtype'])) {
+ $subtype = "&subtype=" . urlencode($vars['subtype']);
+} else {
+ $subtype = "";
+}
+if (!empty($vars['object'])) {
+ $object = "&object=" . urlencode($vars['object']);
+} else {
+ $object = "";
+}
+
+if (empty($vars['tags']) && !empty($vars['value'])) {
+ $vars['tags'] = $vars['value'];
+}
+
+if (empty($vars['tags']) && isset($vars['entity'])) {
+ $vars['tags'] = $vars['entity']->tags;
+}
+
+if (!empty($vars['tags'])) {
+ if (!is_array($vars['tags'])) {
+ $vars['tags'] = array($vars['tags']);
+ }
+
+ $list_class = "elgg-tags";
+ if (isset($vars['list_class'])) {
+ $list_class = "$list_class {$vars['list_class']}";
+ }
+
+ $item_class = "elgg-tag";
+ if (isset($vars['item_class'])) {
+ $item_class = "$item_class {$vars['item_class']}";
+ }
+
+ $icon_class = elgg_extract('icon_class', $vars);
+ $list_items = '<li>' . elgg_view_icon('tag', $icon_class) . '</li>';
+
+ foreach($vars['tags'] as $tag) {
+ if (!empty($vars['type'])) {
+ $type = "&type={$vars['type']}";
+ } else {
+ $type = "";
+ }
+ $url = elgg_get_site_url() . 'search?q=' . urlencode($tag) . "&search_type=tags{$type}{$subtype}{$object}";
+ if (is_string($tag)) {
+ $list_items .= "<li class=\"$item_class\">";
+ $list_items .= elgg_view('output/url', array('href' => $url, 'text' => $tag, 'rel' => 'tag'));
+ $list_items .= '</li>';
+ }
+ }
+
+ $list = <<<___HTML
+ <div class="clearfix">
+ <ul class="$list_class">
+ $list_items
+ </ul>
+ </div>
+___HTML;
+
+ echo $list;
+}
+
diff --git a/views/default/output/text.php b/views/default/output/text.php
new file mode 100644
index 000000000..5cbfc35b0
--- /dev/null
+++ b/views/default/output/text.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg text output
+ * Displays some text that was input using a standard text field
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['value'] The text to display
+ */
+
+echo htmlspecialchars($vars['value'], ENT_QUOTES, 'UTF-8', false); \ No newline at end of file
diff --git a/views/default/output/url.php b/views/default/output/url.php
new file mode 100644
index 000000000..81b02087d
--- /dev/null
+++ b/views/default/output/url.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Elgg URL display
+ * Displays a URL as a link
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses string $vars['text'] The string between the <a></a> tags.
+ * @uses string $vars['href'] The unencoded url string
+ * @uses bool $vars['encode_text'] Run $vars['text'] through htmlspecialchars() (false)
+ * @uses bool $vars['is_action'] Is this a link to an action (false)
+ * @uses bool $vars['is_trusted'] Is this link trusted (false)
+ */
+
+$url = elgg_extract('href', $vars, null);
+if (!$url and isset($vars['value'])) {
+ $url = trim($vars['value']);
+ unset($vars['value']);
+}
+
+if (isset($vars['text'])) {
+ if (elgg_extract('encode_text', $vars, false)) {
+ $text = htmlspecialchars($vars['text'], ENT_QUOTES, 'UTF-8', false);
+ } else {
+ $text = $vars['text'];
+ }
+ unset($vars['text']);
+} else {
+ $text = htmlspecialchars($url, ENT_QUOTES, 'UTF-8', false);
+}
+
+unset($vars['encode_text']);
+
+if ($url) {
+ $url = elgg_normalize_url($url);
+
+ if (elgg_extract('is_action', $vars, false)) {
+ $url = elgg_add_action_tokens_to_url($url, false);
+ }
+
+ if (!elgg_extract('is_trusted', $vars, false)) {
+ if (!isset($vars['rel'])) {
+ $vars['rel'] = 'nofollow';
+ $url = strip_tags($url);
+ }
+ }
+
+ $vars['href'] = $url;
+}
+
+unset($vars['is_action']);
+unset($vars['is_trusted']);
+
+$attributes = elgg_format_attributes($vars);
+echo "<a $attributes>$text</a>";
diff --git a/views/default/page/admin.php b/views/default/page/admin.php
new file mode 100644
index 000000000..7045edd91
--- /dev/null
+++ b/views/default/page/admin.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Elgg pageshell for the admin area
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['title'] The page title
+ * @uses $vars['body'] The main content of the page
+ * @uses $vars['sysmessages'] A 2d array of various message registers, passed from system_messages()
+ */
+
+$notices_html = '';
+$notices = elgg_get_admin_notices();
+if ($notices) {
+ foreach ($notices as $notice) {
+ $notices_html .= elgg_view_entity($notice);
+ }
+
+ $notices_html = "<div class=\"elgg-admin-notices\">$notices_html</div>";
+}
+
+// render content before head so that JavaScript and CSS can be loaded. See #4032
+$messages = elgg_view('page/elements/messages', array('object' => $vars['sysmessages']));
+$header = elgg_view('admin/header', $vars);
+$body = $vars['body'];
+$footer = elgg_view('admin/footer', $vars);
+
+
+// Set the content type
+header("Content-type: text/html; charset=UTF-8");
+
+?>
+<!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" xml:lang="en" lang="en">
+<head>
+<?php echo elgg_view('page/elements/head', $vars); ?>
+</head>
+<body>
+ <div class="elgg-page elgg-page-admin">
+ <div class="elgg-inner">
+ <div class="elgg-page-header">
+ <div class="elgg-inner clearfix">
+ <?php echo $header; ?>
+ </div>
+ </div>
+ <div class="elgg-page-messages">
+ <?php echo $messages; ?>
+ <?php echo $notices_html; ?>
+ </div>
+ <div class="elgg-page-body">
+ <div class="elgg-inner">
+ <?php echo $body; ?>
+ </div>
+ </div>
+ <div class="elgg-page-footer">
+ <div class="elgg-inner">
+ <?php echo $footer; ?>
+ </div>
+ </div>
+ </div>
+ </div>
+ <?php echo elgg_view('page/elements/foot'); ?>
+</body>
+
+</html> \ No newline at end of file
diff --git a/views/default/page/components/gallery.php b/views/default/page/components/gallery.php
new file mode 100644
index 000000000..e8b3f477e
--- /dev/null
+++ b/views/default/page/components/gallery.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * Gallery view
+ *
+ * Implemented as an unorder list
+ *
+ * @uses $vars['items'] Array of ElggEntity or ElggAnnotation objects
+ * @uses $vars['offset'] Index of the first list item in complete list
+ * @uses $vars['limit'] Number of items per page
+ * @uses $vars['count'] Number of items in the complete list
+ * @uses $vars['pagination'] Show pagination? (default: true)
+ * @uses $vars['position'] Position of the pagination: before, after, or both
+ * @uses $vars['full_view'] Show the full view of the items (default: false)
+ * @uses $vars['gallery_class'] Additional CSS class for the <ul> element
+ * @uses $vars['item_class'] Additional CSS class for the <li> elements
+ */
+
+$items = $vars['items'];
+if (!is_array($items) || sizeof($items) == 0) {
+ return true;
+}
+
+elgg_push_context('gallery');
+
+$offset = $vars['offset'];
+$limit = $vars['limit'];
+$count = $vars['count'];
+$pagination = elgg_extract('pagination', $vars, true);
+$offset_key = elgg_extract('offset_key', $vars, 'offset');
+$position = elgg_extract('position', $vars, 'after');
+
+$gallery_class = 'elgg-gallery';
+if (isset($vars['gallery_class'])) {
+ $gallery_class = "$gallery_class {$vars['gallery_class']}";
+}
+
+$item_class = 'elgg-item';
+if (isset($vars['item_class'])) {
+ $item_class = "$item_class {$vars['item_class']}";
+}
+
+$nav = '';
+if ($pagination && $count) {
+ $nav .= elgg_view('navigation/pagination', array(
+ 'offset' => $offset,
+ 'count' => $count,
+ 'limit' => $limit,
+ 'offset_key' => $offset_key,
+ ));
+}
+
+if ($position == 'before' || $position == 'both') {
+ echo $nav;
+}
+
+?>
+<ul class="<?php echo $gallery_class; ?>">
+ <?php
+ foreach ($items as $item) {
+ if (elgg_instanceof($item)) {
+ $id = "elgg-{$item->getType()}-{$item->getGUID()}";
+ } else {
+ $id = "item-{$item->getType()}-{$item->id}";
+ }
+ echo "<li id=\"$id\" class=\"$item_class\">";
+ echo elgg_view_list_item($item, $vars);
+ echo "</li>";
+ }
+ ?>
+</ul>
+
+<?php
+if ($position == 'after' || $position == 'both') {
+ echo $nav;
+}
+
+elgg_pop_context();
diff --git a/views/default/page/components/image_block.php b/views/default/page/components/image_block.php
new file mode 100644
index 000000000..a7f480aef
--- /dev/null
+++ b/views/default/page/components/image_block.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Elgg image block pattern
+ *
+ * Common pattern where there is an image, icon, media object to the left
+ * and a descriptive block of text to the right.
+ *
+ * ---------------------------------------------------------------
+ * | | | alt |
+ * | image | body | image |
+ * | block | block | block |
+ * | | | (optional)|
+ * ---------------------------------------------------------------
+ *
+ * @uses $vars['body'] HTML content of the body block
+ * @uses $vars['image'] HTML content of the image block
+ * @uses $vars['image_alt'] HTML content of the alternate image block
+ * @uses $vars['class'] Optional additional class for media element
+ * @uses $vars['id'] Optional id for the media element
+ */
+
+$body = elgg_extract('body', $vars, '');
+$image = elgg_extract('image', $vars, '');
+$alt_image = elgg_extract('image_alt', $vars, '');
+
+$class = 'elgg-image-block';
+$additional_class = elgg_extract('class', $vars, '');
+if ($additional_class) {
+ $class = "$class $additional_class";
+}
+
+$id = '';
+if (isset($vars['id'])) {
+ $id = "id=\"{$vars['id']}\"";
+}
+
+
+$body = "<div class=\"elgg-body\">$body</div>";
+
+if ($image) {
+ $image = "<div class=\"elgg-image\">$image</div>";
+}
+
+if ($alt_image) {
+ $alt_image = "<div class=\"elgg-image-alt\">$alt_image</div>";
+}
+
+echo <<<HTML
+<div class="$class clearfix" $id>
+ $image$alt_image$body
+</div>
+HTML;
diff --git a/views/default/page/components/list.php b/views/default/page/components/list.php
new file mode 100644
index 000000000..28ed58ddf
--- /dev/null
+++ b/views/default/page/components/list.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * View a list of items
+ *
+ * @package Elgg
+ *
+ * @uses $vars['items'] Array of ElggEntity or ElggAnnotation objects
+ * @uses $vars['offset'] Index of the first list item in complete list
+ * @uses $vars['limit'] Number of items per page. Only used as input to pagination.
+ * @uses $vars['count'] Number of items in the complete list
+ * @uses $vars['base_url'] Base URL of list (optional)
+ * @uses $vars['pagination'] Show pagination? (default: true)
+ * @uses $vars['position'] Position of the pagination: before, after, or both
+ * @uses $vars['full_view'] Show the full view of the items (default: false)
+ * @uses $vars['list_class'] Additional CSS class for the <ul> element
+ * @uses $vars['item_class'] Additional CSS class for the <li> elements
+ */
+
+$items = $vars['items'];
+$offset = elgg_extract('offset', $vars);
+$limit = elgg_extract('limit', $vars);
+$count = elgg_extract('count', $vars);
+$base_url = elgg_extract('base_url', $vars, '');
+$pagination = elgg_extract('pagination', $vars, true);
+$offset_key = elgg_extract('offset_key', $vars, 'offset');
+$position = elgg_extract('position', $vars, 'after');
+
+$list_class = 'elgg-list';
+if (isset($vars['list_class'])) {
+ $list_class = "$list_class {$vars['list_class']}";
+}
+
+$item_class = 'elgg-item';
+if (isset($vars['item_class'])) {
+ $item_class = "$item_class {$vars['item_class']}";
+}
+
+$html = "";
+$nav = "";
+
+if ($pagination && $count) {
+ $nav .= elgg_view('navigation/pagination', array(
+ 'base_url' => $base_url,
+ 'offset' => $offset,
+ 'count' => $count,
+ 'limit' => $limit,
+ 'offset_key' => $offset_key,
+ ));
+}
+
+if (is_array($items) && count($items) > 0) {
+ $html .= "<ul class=\"$list_class\">";
+ foreach ($items as $item) {
+ $li = elgg_view_list_item($item, $vars);
+ if ($li) {
+ if (elgg_instanceof($item)) {
+ $id = "elgg-{$item->getType()}-{$item->getGUID()}";
+ } else {
+ $id = "item-{$item->getType()}-{$item->id}";
+ }
+ $html .= "<li id=\"$id\" class=\"$item_class\">$li</li>";
+ }
+ }
+ $html .= '</ul>';
+}
+
+if ($position == 'before' || $position == 'both') {
+ $html = $nav . $html;
+}
+
+if ($position == 'after' || $position == 'both') {
+ $html .= $nav;
+}
+
+echo $html;
diff --git a/views/default/page/components/module.php b/views/default/page/components/module.php
new file mode 100644
index 000000000..7e1eaff20
--- /dev/null
+++ b/views/default/page/components/module.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Elgg module element
+ *
+ * @uses $vars['title'] Optional title text (do not pass header with this option)
+ * @uses $vars['header'] Optional HTML content of the header
+ * @uses $vars['body'] HTML content of the body
+ * @uses $vars['footer'] Optional HTML content of the footer
+ * @uses $vars['class'] Optional additional class for module
+ * @uses $vars['id'] Optional id for module
+ * @uses $vars['show_inner'] Optional flag to leave out inner div (default: false)
+ */
+
+$title = elgg_extract('title', $vars, '');
+$header = elgg_extract('header', $vars, '');
+$body = elgg_extract('body', $vars, '');
+$footer = elgg_extract('footer', $vars, '');
+$show_inner = elgg_extract('show_inner', $vars, false);
+
+$class = 'elgg-module';
+$additional_class = elgg_extract('class', $vars, '');
+if ($additional_class) {
+ $class = "$class $additional_class";
+}
+
+$id = '';
+if (isset($vars['id'])) {
+ $id = "id=\"{$vars['id']}\"";
+}
+
+if (isset($vars['header'])) {
+ $header = "<div class=\"elgg-head\">$header</div>";
+} elseif ($title) {
+ $header = "<div class=\"elgg-head\"><h3>$title</h3></div>";
+}
+
+$body = "<div class=\"elgg-body\">$body</div>";
+
+if ($footer) {
+ $footer = "<div class=\"elgg-foot\">$footer</div>";
+}
+
+$contents = $header . $body . $footer;
+if ($show_inner) {
+ $contents = "<div class=\"elgg-inner\">$contents</div>";
+}
+
+echo "<div class=\"$class\" $id>$contents</div>";
diff --git a/views/default/page/components/summary.php b/views/default/page/components/summary.php
new file mode 100644
index 000000000..ea61a6e4b
--- /dev/null
+++ b/views/default/page/components/summary.php
@@ -0,0 +1,4 @@
+<?php
+
+// Deprecated in favor of type/elements/summary
+echo elgg_view('object/elements/summary', $vars);
diff --git a/views/default/page/default.php b/views/default/page/default.php
new file mode 100644
index 000000000..567494d0c
--- /dev/null
+++ b/views/default/page/default.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Elgg pageshell
+ * The standard HTML page shell that everything else fits into
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['title'] The page title
+ * @uses $vars['body'] The main content of the page
+ * @uses $vars['sysmessages'] A 2d array of various message registers, passed from system_messages()
+ */
+
+// backward compatability support for plugins that are not using the new approach
+// of routing through admin. See reportedcontent plugin for a simple example.
+if (elgg_get_context() == 'admin') {
+ if (get_input('handler') != 'admin') {
+ elgg_deprecated_notice("admin plugins should route through 'admin'.", 1.8);
+ }
+ elgg_admin_add_plugin_settings_menu();
+ elgg_unregister_css('elgg');
+ echo elgg_view('page/admin', $vars);
+ return true;
+}
+
+// render content before head so that JavaScript and CSS can be loaded. See #4032
+$topbar = elgg_view('page/elements/topbar', $vars);
+$messages = elgg_view('page/elements/messages', array('object' => $vars['sysmessages']));
+$header = elgg_view('page/elements/header', $vars);
+$body = elgg_view('page/elements/body', $vars);
+$footer = elgg_view('page/elements/footer', $vars);
+
+// Set the content type
+header("Content-type: text/html; charset=UTF-8");
+
+$lang = get_current_language();
+
+?>
+<!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" xml:lang="<?php echo $lang; ?>" lang="<?php echo $lang; ?>">
+<head>
+<?php echo elgg_view('page/elements/head', $vars); ?>
+</head>
+<body>
+<div class="elgg-page elgg-page-default">
+ <div class="elgg-page-messages">
+ <?php echo $messages; ?>
+ </div>
+
+ <?php if (elgg_is_logged_in()){ ?>
+ <div class="elgg-page-topbar">
+ <div class="elgg-inner">
+ <?php echo $topbar; ?>
+ </div>
+ </div>
+ <?php } ?>
+
+ <div class="elgg-page-header">
+ <div class="elgg-inner">
+ <?php echo $header; ?>
+ </div>
+ </div>
+ <div class="elgg-page-body">
+ <div class="elgg-inner">
+ <?php echo $body; ?>
+ </div>
+ </div>
+ <div class="elgg-page-footer">
+ <div class="elgg-inner">
+ <?php echo $footer; ?>
+ </div>
+ </div>
+</div>
+<?php echo elgg_view('page/elements/foot'); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/views/default/page/elements/body.php b/views/default/page/elements/body.php
new file mode 100644
index 000000000..14c3978d3
--- /dev/null
+++ b/views/default/page/elements/body.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Elgg page body wrapper
+ *
+ * @uses $vars['body'] The HTML of the page body
+ */
+
+echo elgg_extract('body', $vars, ''); \ No newline at end of file
diff --git a/views/default/page/elements/comments.php b/views/default/page/elements/comments.php
new file mode 100644
index 000000000..97cb9574e
--- /dev/null
+++ b/views/default/page/elements/comments.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * List comments with optional add form
+ *
+ * @uses $vars['entity'] ElggEntity
+ * @uses $vars['show_add_form'] Display add form or not
+ * @uses $vars['id'] Optional id for the div
+ * @uses $vars['class'] Optional additional class for the div
+ */
+
+$show_add_form = elgg_extract('show_add_form', $vars, true);
+
+$id = '';
+if (isset($vars['id'])) {
+ $id = "id=\"{$vars['id']}\"";
+}
+
+$class = 'elgg-comments';
+if (isset($vars['class'])) {
+ $class = "$class {$vars['class']}";
+}
+
+// work around for deprecation code in elgg_view()
+unset($vars['internalid']);
+
+echo "<div $id class=\"$class\">";
+
+$options = array(
+ 'guid' => $vars['entity']->getGUID(),
+ 'annotation_name' => 'generic_comment'
+);
+$html = elgg_list_annotations($options);
+if ($html) {
+ echo '<h3>' . elgg_echo('comments') . '</h3>';
+ echo $html;
+}
+
+if ($show_add_form) {
+ echo elgg_view_form('comments/add', array(), $vars);
+}
+
+echo '</div>';
diff --git a/views/default/page/elements/comments_block.php b/views/default/page/elements/comments_block.php
new file mode 100644
index 000000000..d0f8ab809
--- /dev/null
+++ b/views/default/page/elements/comments_block.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Display the latest related comments
+ *
+ * Generally used in a sidebar. Does not work with groups currently.
+ *
+ * @uses $vars['subtypes'] Object subtype string or array of subtypes
+ * @uses $vars['owner_guid'] The owner of the content being commented on
+ * @uses $vars['limit'] The number of comments to display
+ */
+
+$owner_guid = elgg_extract('owner_guid', $vars, ELGG_ENTITIES_ANY_VALUE);
+if (!$owner_guid) {
+ $owner_guid = ELGG_ENTITIES_ANY_VALUE;
+}
+
+$owner_entity = get_entity($owner_guid);
+if ($owner_entity && elgg_instanceof($owner_entity, 'group')) {
+ // not supporting groups so return
+ return true;
+}
+
+$options = array(
+ 'annotation_name' => 'generic_comment',
+ 'owner_guid' => $owner_guid,
+ 'reverse_order_by' => true,
+ 'limit' => elgg_extract('limit', $vars, 4),
+ 'type' => 'object',
+ 'subtypes' => elgg_extract('subtypes', $vars, ELGG_ENTITIES_ANY_VALUE),
+);
+
+$title = elgg_echo('generic_comments:latest');
+$comments = elgg_get_annotations($options);
+if ($comments) {
+ $body = elgg_view('page/components/list', array(
+ 'items' => $comments,
+ 'pagination' => false,
+ 'list_class' => 'elgg-latest-comments',
+ 'full_view' => false,
+ ));
+} else {
+ $body = '<p>' . elgg_echo('generic_comment:none') . '</p>';
+}
+
+echo elgg_view_module('aside', $title, $body);
diff --git a/views/default/page/elements/foot.php b/views/default/page/elements/foot.php
new file mode 100644
index 000000000..a56b373b4
--- /dev/null
+++ b/views/default/page/elements/foot.php
@@ -0,0 +1,11 @@
+<?php
+
+echo elgg_view('footer/analytics');
+
+$js = elgg_get_loaded_js('footer');
+foreach ($js as $script) { ?>
+ <script type="text/javascript" src="<?php echo $script; ?>"></script>
+<?php
+}
+
+?> \ No newline at end of file
diff --git a/views/default/page/elements/footer.php b/views/default/page/elements/footer.php
new file mode 100644
index 000000000..ded2cea9a
--- /dev/null
+++ b/views/default/page/elements/footer.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Elgg footer
+ * The standard HTML footer that displays across the site
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+echo elgg_view_menu('footer', array('sort_by' => 'priority', 'class' => 'elgg-menu-hz'));
+
+$powered_url = elgg_get_site_url() . "_graphics/powered_by_elgg_badge_drk_bckgnd.gif";
+
+echo '<div class="mts clearfloat float-alt">';
+echo elgg_view('output/url', array(
+ 'href' => 'http://elgg.org',
+ 'text' => "<img src=\"$powered_url\" alt=\"Powered by Elgg\" width=\"106\" height=\"15\" />",
+ 'class' => '',
+ 'is_trusted' => true,
+));
+echo '</div>';
diff --git a/views/default/page/elements/head.php b/views/default/page/elements/head.php
new file mode 100644
index 000000000..d4a95b4d0
--- /dev/null
+++ b/views/default/page/elements/head.php
@@ -0,0 +1,81 @@
+<?php
+/**
+ * The standard HTML head
+ *
+ * @uses $vars['title'] The page title
+ */
+
+// Set title
+if (empty($vars['title'])) {
+ $title = elgg_get_config('sitename');
+} else {
+ $title = elgg_get_config('sitename') . ": " . $vars['title'];
+}
+
+global $autofeed;
+if (isset($autofeed) && $autofeed == true) {
+ $url = current_page_url();
+ if (substr_count($url,'?')) {
+ $url .= "&view=rss";
+ } else {
+ $url .= "?view=rss";
+ }
+ $url = elgg_format_url($url);
+ $feedref = <<<END
+
+ <link rel="alternate" type="application/rss+xml" title="RSS" href="{$url}" />
+
+END;
+} else {
+ $feedref = "";
+}
+
+$js = elgg_get_loaded_js('head');
+$css = elgg_get_loaded_css();
+
+$version = get_version();
+$release = get_version(true);
+?>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="ElggRelease" content="<?php echo $release; ?>" />
+ <meta name="ElggVersion" content="<?php echo $version; ?>" />
+ <title><?php echo $title; ?></title>
+ <?php echo elgg_view('page/elements/shortcut_icon', $vars); ?>
+
+<?php foreach ($css as $link) { ?>
+ <link rel="stylesheet" href="<?php echo $link; ?>" type="text/css" />
+<?php } ?>
+
+<?php
+ $ie_url = elgg_get_simplecache_url('css', 'ie');
+ $ie7_url = elgg_get_simplecache_url('css', 'ie7');
+ $ie6_url = elgg_get_simplecache_url('css', 'ie6');
+?>
+ <!--[if gt IE 7]>
+ <link rel="stylesheet" type="text/css" href="<?php echo $ie_url; ?>" />
+ <![endif]-->
+ <!--[if IE 7]>
+ <link rel="stylesheet" type="text/css" href="<?php echo $ie7_url; ?>" />
+ <![endif]-->
+ <!--[if IE 6]>
+ <link rel="stylesheet" type="text/css" href="<?php echo $ie6_url; ?>" />
+ <![endif]-->
+
+<?php foreach ($js as $script) { ?>
+ <script type="text/javascript" src="<?php echo $script; ?>"></script>
+<?php } ?>
+
+<script type="text/javascript">
+// <![CDATA[
+ <?php echo elgg_view('js/initialize_elgg'); ?>
+// ]]>
+</script>
+
+<?php
+echo $feedref;
+
+$metatags = elgg_view('metatags', $vars);
+if ($metatags) {
+ elgg_deprecated_notice("The metatags view has been deprecated. Extend page/elements/head instead", 1.8);
+ echo $metatags;
+}
diff --git a/views/default/page/elements/header.php b/views/default/page/elements/header.php
new file mode 100644
index 000000000..1a1f5d211
--- /dev/null
+++ b/views/default/page/elements/header.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Elgg page header
+ * In the default theme, the header lives between the topbar and main content area.
+ */
+
+// link back to main site.
+echo elgg_view('page/elements/header_logo', $vars);
+
+// drop-down login
+echo elgg_view('core/account/login_dropdown');
+
+// insert site-wide navigation
+echo elgg_view_menu('site'); \ No newline at end of file
diff --git a/views/default/page/elements/header_logo.php b/views/default/page/elements/header_logo.php
new file mode 100644
index 000000000..7fe721c40
--- /dev/null
+++ b/views/default/page/elements/header_logo.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Elgg header logo
+ */
+
+$site = elgg_get_site_entity();
+$site_name = $site->name;
+$site_url = elgg_get_site_url();
+?>
+
+<h1>
+ <a class="elgg-heading-site" href="<?php echo $site_url; ?>">
+ <?php echo $site_name; ?>
+ </a>
+</h1>
diff --git a/views/default/page/elements/messages.php b/views/default/page/elements/messages.php
new file mode 100644
index 000000000..edd40d71e
--- /dev/null
+++ b/views/default/page/elements/messages.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Elgg global system message list
+ * Lists all system messages
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['object'] The array of message registers
+ */
+
+echo '<ul class="elgg-system-messages">';
+
+// hidden li so we validate
+echo '<li class="hidden"></li>';
+
+if (isset($vars['object']) && is_array($vars['object']) && sizeof($vars['object']) > 0) {
+ foreach ($vars['object'] as $type => $list ) {
+ foreach ($list as $message) {
+ echo "<li class=\"elgg-message elgg-state-$type\">";
+ echo elgg_autop($message);
+ echo '</li>';
+ }
+ }
+}
+
+echo '</ul>';
diff --git a/views/default/page/elements/owner_block.php b/views/default/page/elements/owner_block.php
new file mode 100644
index 000000000..fc7f0f6d2
--- /dev/null
+++ b/views/default/page/elements/owner_block.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Elgg owner block
+ * Displays page ownership information
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+elgg_push_context('owner_block');
+
+// groups and other users get owner block
+$owner = elgg_get_page_owner_entity();
+if ($owner instanceof ElggGroup ||
+ ($owner instanceof ElggUser && $owner->getGUID() != elgg_get_logged_in_user_guid())) {
+
+ $header = elgg_view_entity($owner, array('full_view' => false));
+
+ $body = elgg_view_menu('owner_block', array('entity' => $owner));
+
+ $body .= elgg_view('page/elements/owner_block/extend', $vars);
+
+ echo elgg_view('page/components/module', array(
+ 'header' => $header,
+ 'body' => $body,
+ 'class' => 'elgg-owner-block',
+ ));
+}
+
+elgg_pop_context(); \ No newline at end of file
diff --git a/views/default/page/elements/shortcut_icon.php b/views/default/page/elements/shortcut_icon.php
new file mode 100644
index 000000000..12fe9c1f8
--- /dev/null
+++ b/views/default/page/elements/shortcut_icon.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * Displays the default shortcut icon
+ */
+?>
+<link rel="SHORTCUT ICON" href="<?php echo elgg_get_site_url(); ?>_graphics/favicon.ico" /> \ No newline at end of file
diff --git a/views/default/page/elements/sidebar.php b/views/default/page/elements/sidebar.php
new file mode 100644
index 000000000..fe6bb450e
--- /dev/null
+++ b/views/default/page/elements/sidebar.php
@@ -0,0 +1,32 @@
+<?php
+/**
+ * Elgg sidebar contents
+ *
+ * @uses $vars['sidebar'] Optional content that is displayed at the bottom of sidebar
+ */
+
+echo elgg_view_menu('extras', array(
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+echo elgg_view('page/elements/owner_block', $vars);
+
+echo elgg_view_menu('page', array('sort_by' => 'name'));
+
+// optional 'sidebar' parameter
+if (isset($vars['sidebar'])) {
+ echo $vars['sidebar'];
+}
+
+// @todo deprecated so remove in Elgg 2.0
+// optional second parameter of elgg_view_layout
+if (isset($vars['area2'])) {
+ echo $vars['area2'];
+}
+
+// @todo deprecated so remove in Elgg 2.0
+// optional third parameter of elgg_view_layout
+if (isset($vars['area3'])) {
+ echo $vars['area3'];
+} \ No newline at end of file
diff --git a/views/default/page/elements/sidebar_alt.php b/views/default/page/elements/sidebar_alt.php
new file mode 100644
index 000000000..6d91ca58b
--- /dev/null
+++ b/views/default/page/elements/sidebar_alt.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg secondary sidebar contents
+ *
+ * You can override, extend, or pass content to it
+ *
+ * @uses $vars['sidebar_alt] HTML content for the alternate sidebar
+ */
+
+$sidebar = elgg_extract('sidebar_alt', $vars, '');
+
+echo $sidebar;
diff --git a/views/default/page/elements/tagcloud_block.php b/views/default/page/elements/tagcloud_block.php
new file mode 100644
index 000000000..258951c41
--- /dev/null
+++ b/views/default/page/elements/tagcloud_block.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Display content-based tags
+ *
+ * Generally used in a sidebar. Does not work with groups currently.
+ *
+ * @uses $vars['subtypes'] Object subtype string or array of subtypes
+ * @uses $vars['owner_guid'] The owner of the content being tagged
+ * @uses $vars['limit'] The maxinum number of tags to display
+ */
+
+$owner_guid = elgg_extract('owner_guid', $vars, ELGG_ENTITIES_ANY_VALUE);
+if (!$owner_guid) {
+ $owner_guid = ELGG_ENTITIES_ANY_VALUE;
+}
+
+$owner_entity = get_entity($owner_guid);
+if ($owner_entity && elgg_instanceof($owner_entity, 'group')) {
+ // not supporting groups so return
+ return true;
+}
+
+$options = array(
+ 'type' => 'object',
+ 'subtype' => elgg_extract('subtypes', $vars, ELGG_ENTITIES_ANY_VALUE),
+ 'owner_guid' => $owner_guid,
+ 'threshold' => 0,
+ 'limit' => elgg_extract('limit', $vars, 50),
+ 'tag_name' => 'tags',
+);
+
+$title = elgg_echo('tagcloud');
+if (is_array($options['subtype']) && count($options['subtype']) > 1) {
+ // we cannot provide links to tagged objects with multiple types
+ $tag_data = elgg_get_tags($options);
+ $cloud = elgg_view("output/tagcloud", array(
+ 'value' => $tag_data,
+ 'type' => $type,
+ ));
+} else {
+ $cloud = elgg_view_tagcloud($options);
+}
+if (!$cloud) {
+ return true;
+}
+
+// add a link to all site tags
+$cloud .= '<p class="small">';
+$cloud .= elgg_view_icon('tag');
+$cloud .= elgg_view('output/url', array(
+ 'href' => 'tags',
+ 'text' => elgg_echo('tagcloud:allsitetags'),
+ 'is_trusted' => true,
+));
+$cloud .= '</p>';
+
+
+echo elgg_view_module('aside', $title, $cloud);
diff --git a/views/default/page/elements/title.php b/views/default/page/elements/title.php
new file mode 100644
index 000000000..19f47f4e6
--- /dev/null
+++ b/views/default/page/elements/title.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Elgg title element
+ *
+ * @uses $vars['title'] The page title
+ * @uses $vars['class'] Optional class for heading
+ */
+
+$class= '';
+if (isset($vars['class'])) {
+ $class = " class=\"{$vars['class']}\"";
+}
+
+echo "<h2{$class}>{$vars['title']}</h2>";
diff --git a/views/default/page/elements/topbar.php b/views/default/page/elements/topbar.php
new file mode 100644
index 000000000..e4c6c86bb
--- /dev/null
+++ b/views/default/page/elements/topbar.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Elgg topbar
+ * The standard elgg top toolbar
+ */
+
+// Elgg logo
+echo elgg_view_menu('topbar', array('sort_by' => 'priority', array('elgg-menu-hz')));
+
+// elgg tools menu
+// need to echo this empty view for backward compatibility.
+$content = elgg_view("navigation/topbar_tools");
+if ($content) {
+ elgg_deprecated_notice('navigation/topbar_tools was deprecated. Extend the topbar menus or the page/elements/topbar view directly', 1.8);
+ echo $content;
+}
diff --git a/views/default/page/elements/wrapper.php b/views/default/page/elements/wrapper.php
new file mode 100644
index 000000000..61828832d
--- /dev/null
+++ b/views/default/page/elements/wrapper.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Deprecated content wrapper view from Elgg 1.5 through 1.7
+ *
+ * @uses $vars['body'] The content to display inside content wrapper
+ * @uses $vars['subclass'] Additional css class
+ */
+
+elgg_deprecated_notice("The 'page_elements/contentwrapper' has been deprecated", 1.8);
+?>
+
+<div class="contentWrapper<?php
+
+ if (isset($vars['subclass'])) {
+ echo ' ' . $vars['subclass'];
+ }
+
+?>">
+<?php
+ echo $vars['body'];
+?>
+</div>
diff --git a/views/default/page/error.php b/views/default/page/error.php
new file mode 100644
index 000000000..b7ba3ae9b
--- /dev/null
+++ b/views/default/page/error.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Page shell for errors
+ *
+ * This is for errors that are not unhandled exceptions. Those are handled
+ * through the failsafe viewtype to guarantee that no further exceptions occur.
+ * An example error would be 404 (page not found).
+ *
+ * @uses $vars['title'] The page title
+ * @uses $vars['body'] The main content of the page
+ * @uses $vars['sysmessages'] A 2d array of various message registers, passed from system_messages()
+ */
+
+echo elgg_view('page/default', $vars);
diff --git a/views/default/page/layouts/admin.php b/views/default/page/layouts/admin.php
new file mode 100644
index 000000000..8dbdc27e6
--- /dev/null
+++ b/views/default/page/layouts/admin.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Elgg Admin Area Canvas
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['content'] Content string
+ * @uses $vars['sidebar'] Optional sidebar content
+ * @uses $vars['title'] Title string
+ */
+
+?>
+
+<div class="elgg-layout elgg-layout-one-sidebar">
+ <div class="elgg-sidebar clearfix">
+ <?php
+ echo elgg_view('admin/sidebar', $vars);
+ ?>
+ </div>
+ <div class="elgg-main elgg-body">
+ <div class="elgg-head">
+ <?php
+ echo elgg_view_menu('title', array(
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+ ));
+
+ if (isset($vars['title'])) {
+ echo elgg_view_title($vars['title']);
+ }
+ ?>
+ </div>
+ <?php
+ if (isset($vars['content'])) {
+ echo $vars['content'];
+ }
+ ?>
+ </div>
+</div> \ No newline at end of file
diff --git a/views/default/page/layouts/content.php b/views/default/page/layouts/content.php
new file mode 100644
index 000000000..c406c9faf
--- /dev/null
+++ b/views/default/page/layouts/content.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Main content area layout
+ *
+ * @uses $vars['content'] HTML of main content area
+ * @uses $vars['sidebar'] HTML of the sidebar
+ * @uses $vars['header'] HTML of the content area header (override)
+ * @uses $vars['nav'] HTML of the content area nav (override)
+ * @uses $vars['footer'] HTML of the content area footer
+ * @uses $vars['filter'] HTML of the content area filter (override)
+ * @uses $vars['title'] Title text (override)
+ * @uses $vars['context'] Page context (override)
+ * @uses $vars['filter_context'] Filter context: everyone, friends, mine
+ * @uses $vars['class'] Additional class to apply to layout
+ */
+
+// give plugins an opportunity to add to content sidebars
+$sidebar_content = elgg_extract('sidebar', $vars, '');
+$params = $vars;
+$params['content'] = $sidebar_content;
+$sidebar = elgg_view('page/layouts/content/sidebar', $params);
+
+// allow page handlers to override the default header
+if (isset($vars['header'])) {
+ $vars['header_override'] = $vars['header'];
+}
+$header = elgg_view('page/layouts/content/header', $vars);
+
+// allow page handlers to override the default filter
+if (isset($vars['filter'])) {
+ $vars['filter_override'] = $vars['filter'];
+}
+$filter = elgg_view('page/layouts/content/filter', $vars);
+
+// the all important content
+$content = elgg_extract('content', $vars, '');
+
+// optional footer for main content area
+$footer_content = elgg_extract('footer', $vars, '');
+$params = $vars;
+$params['content'] = $footer_content;
+$footer = elgg_view('page/layouts/content/footer', $params);
+
+$body = $header . $filter . $content . $footer;
+
+$params = array(
+ 'content' => $body,
+ 'sidebar' => $sidebar,
+);
+if (isset($vars['class'])) {
+ $params['class'] = $vars['class'];
+}
+echo elgg_view_layout('one_sidebar', $params);
diff --git a/views/default/page/layouts/content/filter.php b/views/default/page/layouts/content/filter.php
new file mode 100644
index 000000000..701c6418a
--- /dev/null
+++ b/views/default/page/layouts/content/filter.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Main content filter
+ *
+ * Select between user, friends, and all content
+ *
+ * @uses $vars['filter_context'] Filter context: all, friends, mine
+ * @uses $vars['filter_override'] HTML for overriding the default filter (override)
+ * @uses $vars['context'] Page context (override)
+ */
+
+if (isset($vars['filter_override'])) {
+ echo $vars['filter_override'];
+ return true;
+}
+
+$context = elgg_extract('context', $vars, elgg_get_context());
+
+if (elgg_is_logged_in() && $context) {
+ $username = elgg_get_logged_in_user_entity()->username;
+ $filter_context = elgg_extract('filter_context', $vars, 'all');
+
+ // generate a list of default tabs
+ $tabs = array(
+ 'all' => array(
+ 'text' => elgg_echo('all'),
+ 'href' => (isset($vars['all_link'])) ? $vars['all_link'] : "$context/all",
+ 'selected' => ($filter_context == 'all'),
+ 'priority' => 200,
+ ),
+ 'mine' => array(
+ 'text' => elgg_echo('mine'),
+ 'href' => (isset($vars['mine_link'])) ? $vars['mine_link'] : "$context/owner/$username",
+ 'selected' => ($filter_context == 'mine'),
+ 'priority' => 300,
+ ),
+ 'friend' => array(
+ 'text' => elgg_echo('friends'),
+ 'href' => (isset($vars['friend_link'])) ? $vars['friend_link'] : "$context/friends/$username",
+ 'selected' => ($filter_context == 'friends'),
+ 'priority' => 400,
+ ),
+ );
+
+ foreach ($tabs as $name => $tab) {
+ $tab['name'] = $name;
+
+ elgg_register_menu_item('filter', $tab);
+ }
+
+ echo elgg_view_menu('filter', array('sort_by' => 'priority', 'class' => 'elgg-menu-hz'));
+}
diff --git a/views/default/page/layouts/content/footer.php b/views/default/page/layouts/content/footer.php
new file mode 100644
index 000000000..66f5d3ff8
--- /dev/null
+++ b/views/default/page/layouts/content/footer.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Main content footer
+ *
+ * @uses $vars['content'] The content for the footer
+ */
+
+echo $vars['content'];
diff --git a/views/default/page/layouts/content/header.php b/views/default/page/layouts/content/header.php
new file mode 100644
index 000000000..1e66e52db
--- /dev/null
+++ b/views/default/page/layouts/content/header.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Main content header
+ *
+ * Title and title menu
+ *
+ * @uses $vars['header_override'] HTML for overriding the default header (override)
+ * @uses $vars['title'] Title text (override)
+ * @uses $vars['context'] Page context (override)
+ */
+
+if (isset($vars['buttons'])) {
+ // it was a bad idea to implement buttons with a pass through
+ elgg_deprecated_notice("Use elgg_register_menu_item() to register for the title menu", 1.0);
+}
+
+if (isset($vars['header_override'])) {
+ echo $vars['header_override'];
+ return true;
+}
+
+$context = elgg_extract('context', $vars, elgg_get_context());
+
+$title = elgg_extract('title', $vars, '');
+if (!$title) {
+ $title = elgg_echo($context);
+}
+$title = elgg_view_title($title, array('class' => 'elgg-heading-main'));
+
+if (isset($vars['buttons']) && $vars['buttons']) {
+ $buttons = $vars['buttons'];
+} else {
+ $buttons = elgg_view_menu('title', array(
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+ ));
+}
+
+echo <<<HTML
+<div class="elgg-head clearfix">
+ $title$buttons
+</div>
+HTML;
diff --git a/views/default/page/layouts/content/sidebar.php b/views/default/page/layouts/content/sidebar.php
new file mode 100644
index 000000000..86ca8435f
--- /dev/null
+++ b/views/default/page/layouts/content/sidebar.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Main content sidebar
+ *
+ * @uses $vars['content] The content for the sidebar
+ */
+
+echo $vars['content'];
diff --git a/views/default/page/layouts/default.php b/views/default/page/layouts/default.php
new file mode 100644
index 000000000..60dc90b0d
--- /dev/null
+++ b/views/default/page/layouts/default.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Elgg default layout
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['content'] Content string
+ */
+
+// @todo deprecated so remove in Elgg 2.0
+if (isset($vars['area1'])) {
+ echo $vars['area1'];
+}
+
+if (isset($vars['content'])) {
+ echo $vars['content'];
+}
diff --git a/views/default/page/layouts/error.php b/views/default/page/layouts/error.php
new file mode 100644
index 000000000..cdce28a8e
--- /dev/null
+++ b/views/default/page/layouts/error.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Error layout
+ */
+
+$class = 'elgg-layout-error';
+if (isset($vars['class'])) {
+ $class = "$class {$vars['class']}";
+}
+$vars['class'] = $class;
+
+echo elgg_view('page/layouts/one_column', $vars);
diff --git a/views/default/page/layouts/one_column.php b/views/default/page/layouts/one_column.php
new file mode 100644
index 000000000..491d5b459
--- /dev/null
+++ b/views/default/page/layouts/one_column.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Elgg one-column layout
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['content'] Content string
+ * @uses $vars['class'] Additional class to apply to layout
+ */
+
+$class = 'elgg-layout elgg-layout-one-column clearfix';
+if (isset($vars['class'])) {
+ $class = "$class {$vars['class']}";
+}
+
+// navigation defaults to breadcrumbs
+$nav = elgg_extract('nav', $vars, elgg_view('navigation/breadcrumbs'));
+
+?>
+<div class="<?php echo $class; ?>">
+ <div class="elgg-body elgg-main">
+ <?php
+ echo $nav;
+
+ if (isset($vars['title'])) {
+ echo elgg_view_title($vars['title']);
+ }
+
+ echo $vars['content'];
+
+ // @deprecated 1.8
+ if (isset($vars['area1'])) {
+ echo $vars['area1'];
+ }
+ ?>
+ </div>
+</div> \ No newline at end of file
diff --git a/views/default/page/layouts/one_sidebar.php b/views/default/page/layouts/one_sidebar.php
new file mode 100644
index 000000000..d74dad53d
--- /dev/null
+++ b/views/default/page/layouts/one_sidebar.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Layout for main column with one sidebar
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['content'] Content HTML for the main column
+ * @uses $vars['sidebar'] Optional content that is displayed in the sidebar
+ * @uses $vars['title'] Optional title for main content area
+ * @uses $vars['class'] Additional class to apply to layout
+ * @uses $vars['nav'] HTML of the page nav (override) (default: breadcrumbs)
+ */
+
+$class = 'elgg-layout elgg-layout-one-sidebar clearfix';
+if (isset($vars['class'])) {
+ $class = "$class {$vars['class']}";
+}
+
+// navigation defaults to breadcrumbs
+$nav = elgg_extract('nav', $vars, elgg_view('navigation/breadcrumbs'));
+
+?>
+
+<div class="<?php echo $class; ?>">
+ <div class="elgg-sidebar">
+ <?php
+ echo elgg_view('page/elements/sidebar', $vars);
+ ?>
+ </div>
+
+ <div class="elgg-main elgg-body">
+ <?php
+ echo $nav;
+
+ if (isset($vars['title'])) {
+ echo elgg_view_title($vars['title']);
+ }
+ // @todo deprecated so remove in Elgg 2.0
+ if (isset($vars['area1'])) {
+ echo $vars['area1'];
+ }
+ if (isset($vars['content'])) {
+ echo $vars['content'];
+ }
+ ?>
+ </div>
+</div>
diff --git a/views/default/page/layouts/two_column_left_sidebar.php b/views/default/page/layouts/two_column_left_sidebar.php
new file mode 100644
index 000000000..e395a5053
--- /dev/null
+++ b/views/default/page/layouts/two_column_left_sidebar.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Deprecated layout from 1.0-1.7
+ *
+ * Use one_sidebar instead
+ */
+
+if (!isset($vars['content'])) {
+ $vars['content'] = $vars['area2'];
+}
+if (!isset($vars['content'])) {
+ $vars['sidebar'] = $vars['area1'] . $vars['area3'];
+}
+
+unset($vars['area1']);
+unset($vars['area2']);
+unset($vars['area3']);
+
+// backward compatability support for plugins that are not using the new approach
+// of routing through 'admin'
+if (elgg_get_context() == 'admin') {
+ echo elgg_view('page/layouts/admin', $vars);
+ return true;
+}
+
+echo elgg_view('page/layouts/one_sidebar', $vars);
diff --git a/views/default/page/layouts/two_sidebar.php b/views/default/page/layouts/two_sidebar.php
new file mode 100644
index 000000000..7521dd44f
--- /dev/null
+++ b/views/default/page/layouts/two_sidebar.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * Elgg 2 sidebar layout
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['content'] The content string for the main column
+ * @uses $vars['sidebar'] Optional content that is displayed in the sidebar
+ * @uses $vars['sidebar_alt'] Optional content that is displayed in the alternate sidebar
+ * @uses $vars['class'] Additional class to apply to layout
+ */
+
+$class = 'elgg-layout elgg-layout-two-sidebar clearfix';
+if (isset($vars['class'])) {
+ $class = "$class {$vars['class']}";
+}
+?>
+
+<div class="<?php echo $class; ?>">
+ <div class="elgg-sidebar">
+ <?php
+ echo elgg_view('page/elements/sidebar', $vars);
+ ?>
+ </div>
+ <div class="elgg-sidebar-alt">
+ <?php
+ echo elgg_view('page/elements/sidebar_alt', $vars);
+ ?>
+ </div>
+
+ <div class="elgg-main elgg-body">
+ <?php
+ // @todo deprecated so remove in Elgg 2.0
+ if (isset($vars['area1'])) {
+ echo $vars['area1'];
+ }
+ if (isset($vars['content'])) {
+ echo $vars['content'];
+ }
+ ?>
+ </div>
+</div>
diff --git a/views/default/page/layouts/walled_garden.php b/views/default/page/layouts/walled_garden.php
new file mode 100644
index 000000000..6ecd941ef
--- /dev/null
+++ b/views/default/page/layouts/walled_garden.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Walled Garden layout
+ *
+ * @uses $vars['content'] Main content
+ * @uses $vars['class'] CSS classes
+ * @uses $vars['id'] CSS id
+ */
+
+$class = elgg_extract('class', $vars, 'elgg-walledgarden-single');
+echo elgg_view_module('walledgarden', '', $vars['content'], array(
+ 'class' => $class,
+ 'id' => elgg_extract('id', $vars, ''),
+ 'header' => ' ',
+ 'footer' => ' ',
+));
diff --git a/views/default/page/layouts/widgets.php b/views/default/page/layouts/widgets.php
new file mode 100644
index 000000000..c6b162516
--- /dev/null
+++ b/views/default/page/layouts/widgets.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Elgg widgets layout
+ *
+ * @uses $vars['content'] Optional display box at the top of layout
+ * @uses $vars['num_columns'] Number of widget columns for this layout (3)
+ * @uses $vars['show_add_widgets'] Display the add widgets button and panel (true)
+ * @uses $vars['exact_match'] Widgets must match the current context (false)
+ * @uses $vars['show_access'] Show the access control (true)
+ */
+
+$num_columns = elgg_extract('num_columns', $vars, 3);
+$show_add_widgets = elgg_extract('show_add_widgets', $vars, true);
+$exact_match = elgg_extract('exact_match', $vars, false);
+$show_access = elgg_extract('show_access', $vars, true);
+
+$owner = elgg_get_page_owner_entity();
+
+$widget_types = elgg_get_widget_types();
+
+$context = elgg_get_context();
+elgg_push_context('widgets');
+
+$widgets = elgg_get_widgets($owner->guid, $context);
+
+if (elgg_can_edit_widget_layout($context)) {
+ if ($show_add_widgets) {
+ echo elgg_view('page/layouts/widgets/add_button');
+ }
+ $params = array(
+ 'widgets' => $widgets,
+ 'context' => $context,
+ 'exact_match' => $exact_match,
+ 'show_access' => $show_access,
+ );
+ echo elgg_view('page/layouts/widgets/add_panel', $params);
+}
+
+echo $vars['content'];
+
+$widget_class = "elgg-col-1of{$num_columns}";
+for ($column_index = 1; $column_index <= $num_columns; $column_index++) {
+ if (isset($widgets[$column_index])) {
+ $column_widgets = $widgets[$column_index];
+ } else {
+ $column_widgets = array();
+ }
+
+ echo "<div class=\"$widget_class elgg-widgets\" id=\"elgg-widget-col-$column_index\">";
+ if (sizeof($column_widgets) > 0) {
+ foreach ($column_widgets as $widget) {
+ if (array_key_exists($widget->handler, $widget_types)) {
+ echo elgg_view_entity($widget, array('show_access' => $show_access));
+ }
+ }
+ }
+ echo '</div>';
+}
+
+elgg_pop_context();
+
+echo elgg_view('graphics/ajax_loader', array('id' => 'elgg-widget-loader'));
diff --git a/views/default/page/layouts/widgets/add_button.php b/views/default/page/layouts/widgets/add_button.php
new file mode 100644
index 000000000..c33a45f99
--- /dev/null
+++ b/views/default/page/layouts/widgets/add_button.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Button area for showing the add widgets panel
+ */
+?>
+<div class="elgg-widget-add-control">
+<?php
+ echo elgg_view('output/url', array(
+ 'href' => '#widgets-add-panel',
+ 'text' => elgg_echo('widgets:add'),
+ 'class' => 'elgg-button elgg-button-action',
+ 'rel' => 'toggle',
+ 'is_trusted' => true,
+ ));
+?>
+</div>
diff --git a/views/default/page/layouts/widgets/add_panel.php b/views/default/page/layouts/widgets/add_panel.php
new file mode 100644
index 000000000..d9b11342a
--- /dev/null
+++ b/views/default/page/layouts/widgets/add_panel.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Widget add panel
+ *
+ * @uses $vars['widgets'] Array of current widgets
+ * @uses $vars['context'] The context for this widget layout
+ * @uses $vars['exact_match'] Only use widgets that match the context
+ */
+
+$widgets = $vars['widgets'];
+$context = $vars['context'];
+$exact = elgg_extract('exact_match', $vars, false);
+
+$widget_types = elgg_get_widget_types($context, $exact);
+uasort($widget_types, create_function('$a,$b', 'return strcmp($a->name,$b->name);'));
+
+$current_handlers = array();
+foreach ($widgets as $column_widgets) {
+ foreach ($column_widgets as $widget) {
+ $current_handlers[] = $widget->handler;
+ }
+}
+
+?>
+<div class="elgg-widgets-add-panel hidden clearfix" id="widgets-add-panel">
+ <p>
+ <?php echo elgg_echo('widgets:add:description'); ?>
+ </p>
+ <ul>
+<?php
+ foreach ($widget_types as $handler => $widget_type) {
+ $id = "elgg-widget-type-$handler";
+ // check if widget added and only one instance allowed
+ if ($widget_type->multiple == false && in_array($handler, $current_handlers)) {
+ $class = 'elgg-state-unavailable';
+ $tooltip = elgg_echo('widget:unavailable');
+ } else {
+ $class = 'elgg-state-available';
+ $tooltip = $widget_type->description;
+ }
+
+ if ($widget_type->multiple) {
+ $class .= ' elgg-widget-multiple';
+ } else {
+ $class .= ' elgg-widget-single';
+ }
+
+ echo "<li title=\"$tooltip\" id=\"$id\" class=\"$class\">$widget_type->name</li>";
+ }
+?>
+ </ul>
+<?php
+ echo elgg_view('input/hidden', array(
+ 'name' => 'widget_context',
+ 'value' => $context
+ ));
+ echo elgg_view('input/hidden', array(
+ 'name' => 'show_access',
+ 'value' => (int)$vars['show_access']
+ ));
+?>
+</div>
diff --git a/views/default/page/upgrade.php b/views/default/page/upgrade.php
new file mode 100644
index 000000000..1a92042be
--- /dev/null
+++ b/views/default/page/upgrade.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Page shell for upgrade script
+ *
+ * Displays an ajax loader until upgrade is complete
+ */
+?>
+<html>
+ <head>
+ <?php echo elgg_view('page/elements/head', $vars); ?>
+ <meta http-equiv="refresh" content="1;url=<?php echo elgg_get_site_url(); ?>upgrade.php?upgrade=upgrade"/>
+ </head>
+ <body>
+ <div style="margin-top:200px">
+ <?php echo elgg_view('graphics/ajax_loader', array('hidden' => false)); ?>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/views/default/page/walled_garden.php b/views/default/page/walled_garden.php
new file mode 100644
index 000000000..ff8e317c7
--- /dev/null
+++ b/views/default/page/walled_garden.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Walled garden page shell
+ *
+ * Used for the walled garden index page
+ */
+
+// Set the content type
+header("Content-type: text/html; charset=UTF-8");
+?>
+<!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" xml:lang="en" lang="en">
+<head>
+<?php echo elgg_view('page/elements/head', $vars); ?>
+</head>
+<body>
+<div class="elgg-page elgg-page-walledgarden">
+ <div class="elgg-page-messages">
+ <?php echo elgg_view('page/elements/messages', array('object' => $vars['sysmessages'])); ?>
+ </div>
+ <div class="elgg-body-walledgarden">
+ <?php echo $vars['body']; ?>
+ </div>
+</div>
+<?php echo elgg_view('page/elements/foot'); ?>
+</body>
+</html> \ No newline at end of file
diff --git a/views/default/profile/icon.php b/views/default/profile/icon.php
new file mode 100644
index 000000000..5f06cfd54
--- /dev/null
+++ b/views/default/profile/icon.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg profile icon
+ *
+ * @deprecated 1.8 use elgg_view_entity_icon()
+ *
+ * @uses $vars['entity'] The user entity. If none specified, the current user is assumed.
+ * @uses $vars['size'] The size - small, medium or large. If none specified, medium is assumed.
+ * @uses $vars['override']
+ * @uses $vars['js']
+ */
+elgg_deprecated_notice('The profile/icon view was deprecated. Use elgg_view_entity_icon()', 1.8);
+
+$override = elgg_extract('override', $vars, false);
+$vars['use_hover'] = !$override;
+
+echo elgg_view('icon/user/default', $vars);
diff --git a/views/default/river/annotation/generic_comment/create.php b/views/default/river/annotation/generic_comment/create.php
new file mode 100644
index 000000000..7d586450d
--- /dev/null
+++ b/views/default/river/annotation/generic_comment/create.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Post comment river view
+ */
+$object = $vars['item']->getObjectEntity();
+$comment = $vars['item']->getAnnotation();
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'message' => elgg_get_excerpt($comment->value),
+));
diff --git a/views/default/river/elements/body.php b/views/default/river/elements/body.php
new file mode 100644
index 000000000..2cd7f2289
--- /dev/null
+++ b/views/default/river/elements/body.php
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Body of river item
+ *
+ * @uses $vars['item'] ElggRiverItem
+ * @uses $vars['summary'] Alternate summary (the short text summary of action)
+ * @uses $vars['message'] Optional message (usually excerpt of text)
+ * @uses $vars['attachments'] Optional attachments (displaying icons or other non-text data)
+ * @uses $vars['responses'] Alternate respones (comments, replies, etc.)
+ */
+
+$item = $vars['item'];
+
+$menu = elgg_view_menu('river', array(
+ 'item' => $item,
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+// river item header
+$timestamp = elgg_view_friendly_time($item->getPostedTime());
+
+$summary = elgg_extract('summary', $vars, elgg_view('river/elements/summary', array('item' => $vars['item'])));
+if ($summary === false) {
+ $subject = $item->getSubjectEntity();
+ $summary = elgg_view('output/url', array(
+ 'href' => $subject->getURL(),
+ 'text' => $subject->name,
+ 'class' => 'elgg-river-subject',
+ 'is_trusted' => true,
+ ));
+}
+
+$message = elgg_extract('message', $vars, false);
+if ($message !== false) {
+ $message = "<div class=\"elgg-river-message\">$message</div>";
+}
+
+$attachments = elgg_extract('attachments', $vars, false);
+if ($attachments !== false) {
+ $attachments = "<div class=\"elgg-river-attachments clearfix\">$attachments</div>";
+}
+
+$responses = elgg_view('river/elements/responses', $vars);
+if ($responses) {
+ $responses = "<div class=\"elgg-river-responses\">$responses</div>";
+}
+
+$group_string = '';
+$object = $item->getObjectEntity();
+$container = $object->getContainerEntity();
+if ($container instanceof ElggGroup && $container->guid != elgg_get_page_owner_guid()) {
+ $group_link = elgg_view('output/url', array(
+ 'href' => $container->getURL(),
+ 'text' => $container->name,
+ 'is_trusted' => true,
+ ));
+ $group_string = elgg_echo('river:ingroup', array($group_link));
+}
+
+echo <<<RIVER
+$menu
+<div class="elgg-river-summary">$summary $group_string <span class="elgg-river-timestamp">$timestamp</span></div>
+$message
+$attachments
+$responses
+RIVER;
diff --git a/views/default/river/elements/image.php b/views/default/river/elements/image.php
new file mode 100644
index 000000000..6f6aeae65
--- /dev/null
+++ b/views/default/river/elements/image.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Elgg river image
+ *
+ * Displayed next to the body of each river item
+ *
+ * @uses $vars['item']
+ */
+
+$subject = $vars['item']->getSubjectEntity();
+
+if (elgg_in_context('widgets')) {
+ echo elgg_view_entity_icon($subject, 'tiny');
+} else {
+ echo elgg_view_entity_icon($subject, 'small');
+}
diff --git a/views/default/river/elements/layout.php b/views/default/river/elements/layout.php
new file mode 100644
index 000000000..94622e272
--- /dev/null
+++ b/views/default/river/elements/layout.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Layout of a river item
+ *
+ * @uses $vars['item'] ElggRiverItem
+ */
+
+$item = $vars['item'];
+
+echo elgg_view('page/components/image_block', array(
+ 'image' => elgg_view('river/elements/image', $vars),
+ 'body' => elgg_view('river/elements/body', $vars),
+ 'class' => 'elgg-river-item',
+));
diff --git a/views/default/river/elements/responses.php b/views/default/river/elements/responses.php
new file mode 100644
index 000000000..f6c32e142
--- /dev/null
+++ b/views/default/river/elements/responses.php
@@ -0,0 +1,63 @@
+<?php
+/**
+ * River item footer
+ *
+ * @uses $vars['item'] ElggRiverItem
+ * @uses $vars['responses'] Alternate override for this item
+ */
+
+// allow river views to override the response content
+$responses = elgg_extract('responses', $vars, false);
+if ($responses) {
+ echo $responses;
+ return true;
+}
+
+$item = $vars['item'];
+$object = $item->getObjectEntity();
+
+// annotations do not have comments
+if ($item->annotation_id != 0 || !$object) {
+ return true;
+}
+
+$comment_count = $object->countComments();
+
+$options = array(
+ 'guid' => $object->getGUID(),
+ 'annotation_name' => 'generic_comment',
+ 'limit' => 3,
+ 'order_by' => 'n_table.time_created desc'
+);
+$comments = elgg_get_annotations($options);
+
+if ($comments) {
+ // why is this reversing it? because we're asking for the 3 latest
+ // comments by sorting desc and limiting by 3, but we want to display
+ // these comments with the latest at the bottom.
+ $comments = array_reverse($comments);
+
+?>
+ <span class="elgg-river-comments-tab"><?php echo elgg_echo('comments'); ?></span>
+
+<?php
+
+ echo elgg_view_annotation_list($comments, array('list_class' => 'elgg-river-comments'));
+
+ if ($comment_count > count($comments)) {
+ $num_more_comments = $comment_count - count($comments);
+ $url = $object->getURL();
+ $params = array(
+ 'href' => $url,
+ 'text' => elgg_echo('river:comments:more', array($num_more_comments)),
+ 'is_trusted' => true,
+ );
+ $link = elgg_view('output/url', $params);
+ echo "<div class=\"elgg-river-more\">$link</div>";
+ }
+}
+
+// inline comment form
+$form_vars = array('id' => "comments-add-{$object->getGUID()}", 'class' => 'hidden');
+$body_vars = array('entity' => $object, 'inline' => true);
+echo elgg_view_form('comments/add', $form_vars, $body_vars);
diff --git a/views/default/river/elements/summary.php b/views/default/river/elements/summary.php
new file mode 100644
index 000000000..416bc708b
--- /dev/null
+++ b/views/default/river/elements/summary.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Short summary of the action that occurred
+ *
+ * @vars['item'] ElggRiverItem
+ */
+
+$item = $vars['item'];
+
+$subject = $item->getSubjectEntity();
+$object = $item->getObjectEntity();
+$target = $object->getContainerEntity();
+
+$subject_link = elgg_view('output/url', array(
+ 'href' => $subject->getURL(),
+ 'text' => $subject->name,
+ 'class' => 'elgg-river-subject',
+ 'is_trusted' => true,
+));
+
+$object_link = elgg_view('output/url', array(
+ 'href' => $object->getURL(),
+ 'text' => $object->title ? $object->title : $object->name,
+ 'class' => 'elgg-river-object',
+ 'is_trusted' => true,
+));
+
+$action = $item->action_type;
+$type = $item->type;
+$subtype = $item->subtype ? $item->subtype : 'default';
+
+$container = $object->getContainerEntity();
+if ($container instanceof ElggGroup) {
+ $params = array(
+ 'href' => $container->getURL(),
+ 'text' => $container->name,
+ 'is_trusted' => true,
+ );
+ $group_link = elgg_view('output/url', $params);
+ $group_string = elgg_echo('river:ingroup', array($group_link));
+}
+
+// check summary translation keys.
+// will use the $type:$subtype if that's defined, otherwise just uses $type:default
+$key = "river:$action:$type:$subtype";
+$summary = elgg_echo($key, array($subject_link, $object_link));
+
+if ($summary == $key) {
+ $key = "river:$action:$type:default";
+ $summary = elgg_echo($key, array($subject_link, $object_link));
+}
+
+echo $summary; \ No newline at end of file
diff --git a/views/default/river/item.php b/views/default/river/item.php
new file mode 100644
index 000000000..75767e08d
--- /dev/null
+++ b/views/default/river/item.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Primary river item view
+ *
+ * Calls the individual view saved for that river item. Most of these
+ * individual river views then use the views in river/elements.
+ *
+ * @uses $vars['item'] ElggRiverItem
+ */
+
+// @todo remove this in Elgg 1.9
+global $_elgg_special_river_catch;
+if (!isset($_elgg_special_river_catch)) {
+ $_elgg_special_river_catch = false;
+}
+if ($_elgg_special_river_catch) {
+ // we changed the views a little in 1.8.1 so this catches the plugins that
+ // were updated in 1.8.0 and redirects to the layout view
+ echo elgg_view('river/elements/layout', $vars);
+ return true;
+}
+$_elgg_special_river_catch = true;
+
+
+$item = $vars['item'];
+
+echo elgg_view($item->getView(), $vars);
+
+
+$_elgg_special_river_catch = false;
diff --git a/views/default/river/relationship/friend/create.php b/views/default/river/relationship/friend/create.php
new file mode 100644
index 000000000..0408d79e1
--- /dev/null
+++ b/views/default/river/relationship/friend/create.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Create friend river view
+ */
+$subject = $vars['item']->getSubjectEntity();
+$object = $vars['item']->getObjectEntity();
+
+$subject_icon = elgg_view_entity_icon($subject, 'tiny');
+$object_icon = elgg_view_entity_icon($object, 'tiny');
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'attachments' => $subject_icon . elgg_view_icon('arrow-right') . $object_icon,
+));
diff --git a/views/default/river/user/default/profileiconupdate.php b/views/default/river/user/default/profileiconupdate.php
new file mode 100644
index 000000000..271064a06
--- /dev/null
+++ b/views/default/river/user/default/profileiconupdate.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Update avatar river view
+ */
+
+$subject = $vars['item']->getSubjectEntity();
+
+$subject_link = elgg_view('output/url', array(
+ 'href' => $subject->getURL(),
+ 'text' => $subject->name,
+ 'class' => 'elgg-river-subject',
+ 'is_trusted' => true,
+));
+
+$string = elgg_echo('river:update:user:avatar', array($subject_link));
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'summary' => $string,
+ 'attachments' => elgg_view_entity_icon($subject, 'tiny', array(
+ 'use_hover' => false,
+ 'use_link' => false,
+ )),
+));
diff --git a/views/default/river/user/default/profileupdate.php b/views/default/river/user/default/profileupdate.php
new file mode 100644
index 000000000..ce72970d6
--- /dev/null
+++ b/views/default/river/user/default/profileupdate.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Update profile river view
+ */
+
+$subject = $vars['item']->getSubjectEntity();
+
+$subject_link = elgg_view('output/url', array(
+ 'href' => $subject->getURL(),
+ 'text' => $subject->name,
+ 'class' => 'elgg-river-subject',
+ 'is_trusted' => true,
+));
+
+$string = elgg_echo('river:update:user:profile', array($subject_link));
+
+echo elgg_view('river/elements/layout', array(
+ 'item' => $vars['item'],
+ 'summary' => $string,
+));
diff --git a/views/default/site/default.php b/views/default/site/default.php
new file mode 100644
index 000000000..5dacb4019
--- /dev/null
+++ b/views/default/site/default.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * ElggSite default view.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// sites information (including plugin settings) shouldn't be shown.
+// this view is required for pinging home during install.
+if (!defined('INSTALLING')) {
+ if ($site = $vars['entity']->url) {
+ forward($site);
+ } else {
+ forward();
+ }
+}
diff --git a/views/default/user/default.php b/views/default/user/default.php
new file mode 100644
index 000000000..6c84e84ad
--- /dev/null
+++ b/views/default/user/default.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Elgg user display
+ *
+ * @uses $vars['entity'] ElggUser entity
+ * @uses $vars['size'] Size of the icon
+ */
+
+$entity = $vars['entity'];
+$size = elgg_extract('size', $vars, 'tiny');
+
+$icon = elgg_view_entity_icon($entity, $size, $vars);
+
+// Simple XFN
+$rel = '';
+if (elgg_get_logged_in_user_guid() == $entity->guid) {
+ $rel = 'rel="me"';
+} elseif (check_entity_relationship(elgg_get_logged_in_user_guid(), 'friend', $entity->guid)) {
+ $rel = 'rel="friend"';
+}
+
+$title = "<a href=\"" . $entity->getUrl() . "\" $rel>" . $entity->name . "</a>";
+
+$metadata = elgg_view_menu('entity', array(
+ 'entity' => $entity,
+ 'sort_by' => 'priority',
+ 'class' => 'elgg-menu-hz',
+));
+
+if (elgg_in_context('owner_block') || elgg_in_context('widgets')) {
+ $metadata = '';
+}
+
+if (elgg_get_context() == 'gallery') {
+ echo $icon;
+} else {
+ if ($entity->isBanned()) {
+ $banned = elgg_echo('banned');
+ $params = array(
+ 'entity' => $entity,
+ 'title' => $title,
+ 'metadata' => $metadata,
+ );
+ } else {
+ $params = array(
+ 'entity' => $entity,
+ 'title' => $title,
+ 'metadata' => $metadata,
+ 'subtitle' => $entity->briefdescription,
+ 'content' => elgg_view('user/status', array('entity' => $entity)),
+ );
+ }
+
+ $list_body = elgg_view('user/elements/summary', $params);
+
+ echo elgg_view_image_block($icon, $list_body, $vars);
+}
diff --git a/views/default/user/elements/summary.php b/views/default/user/elements/summary.php
new file mode 100644
index 000000000..46d11c14c
--- /dev/null
+++ b/views/default/user/elements/summary.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * User summary
+ *
+ * @uses $vars['entity'] ElggEntity
+ * @uses $vars['title'] Title link (optional) false = no title, '' = default
+ * @uses $vars['metadata'] HTML for entity metadata and actions (optional)
+ * @uses $vars['subtitle'] HTML for the subtitle (optional)
+ * @uses $vars['tags'] HTML for the tags (optional)
+ * @uses $vars['content'] HTML for the entity content (optional)
+ */
+
+echo elgg_view('object/elements/summary', $vars);
diff --git a/views/default/user/search/finishblurb.php b/views/default/user/search/finishblurb.php
new file mode 100644
index 000000000..a3878a803
--- /dev/null
+++ b/views/default/user/search/finishblurb.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * @package Elgg
+ * @subpackage Core
+ * @deprecated 1.7
+ */
+
+elgg_deprecated_notice('view user/search/finishblurb was deprecated.', 1.7);
+
+if ($vars['count'] > $vars['threshold']) {
+
+?>
+<a href="<?php echo elgg_get_site_url(); ?>search/users?tag=<?php echo urlencode($vars['tag']); ?>"><?php
+ echo elgg_echo("user:search:finishblurb");
+ ?></a>
+<?php
+
+}
diff --git a/views/default/user/search/startblurb.php b/views/default/user/search/startblurb.php
new file mode 100644
index 000000000..806157609
--- /dev/null
+++ b/views/default/user/search/startblurb.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * @package Elgg
+ * @subpackage Core
+ * @deprecated 1.7
+ */
+
+elgg_deprecated_notice('view user/search/startblurb was deprecated.', 1.7);
+
+echo elgg_echo("user:search:startblurb", array($vars['tag'])); \ No newline at end of file
diff --git a/views/default/widgets/admin_welcome/content.php b/views/default/widgets/admin_welcome/content.php
new file mode 100644
index 000000000..f4b92ea66
--- /dev/null
+++ b/views/default/widgets/admin_welcome/content.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Welcome widget for admins
+ */
+
+// section => string replacements.
+$sections = array(
+ 'intro' => array(),
+ 'admin_overview' => array(),
+ 'outro' => array()
+);
+
+// don't use longtext because it filters output.
+// that's annoying.
+echo '<div class="elgg-output">';
+foreach ($sections as $section => $strings) {
+ echo '<p>' . elgg_echo("admin:widget:admin_welcome:$section", $strings) . '</p>';
+}
+echo '</div>'; \ No newline at end of file
diff --git a/views/default/widgets/content_stats/content.php b/views/default/widgets/content_stats/content.php
new file mode 100644
index 000000000..56772047d
--- /dev/null
+++ b/views/default/widgets/content_stats/content.php
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Content stats widget
+ */
+
+$max = $vars['entity']->num_display;
+
+$entity_stats = get_entity_statistics();
+$object_stats = $entity_stats['object'];
+arsort($object_stats);
+$object_stats = array_slice($object_stats, 0, $max);
+
+echo '<table class="elgg-table-alt">';
+echo '<tr><th>' . elgg_echo('widget:content_stats:type') . '</th>';
+echo '<th>' . elgg_echo('widget:content_stats:number') . '</th></tr>';
+foreach ($object_stats as $subtype => $num) {
+ $name = elgg_echo("item:object:$subtype");
+ echo "<tr><td>$name</td><td>$num</td></tr>";
+}
+echo '</table>';
+
+echo '<div class="mtm">';
+echo elgg_view('output/url', array(
+ 'href' => 'admin/statistics/overview',
+ 'text' => elgg_echo('more'),
+ 'is_trusted' => true,
+));
+echo '</div>';
diff --git a/views/default/widgets/content_stats/edit.php b/views/default/widgets/content_stats/edit.php
new file mode 100644
index 000000000..f1a050df8
--- /dev/null
+++ b/views/default/widgets/content_stats/edit.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Content statistics widget edit view
+ */
+
+
+// set default value
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 8;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(5, 8, 10, 12, 15, 20),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<p>
+ <?php echo elgg_echo('widget:numbertodisplay'); ?>:
+ <?php echo $dropdown; ?>
+</p>
diff --git a/views/default/widgets/control_panel/content.php b/views/default/widgets/control_panel/content.php
new file mode 100644
index 000000000..a348d612f
--- /dev/null
+++ b/views/default/widgets/control_panel/content.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Admin control panel widget
+ */
+
+elgg_register_menu_item('admin_control_panel', array(
+ 'name' => 'flush',
+ 'text' => elgg_echo('admin:cache:flush'),
+ 'href' => 'action/admin/site/flush_cache',
+ 'is_action' => true,
+ 'link_class' => 'elgg-button elgg-button-action',
+));
+
+// @todo Move in this in ElggUpgradeManager::isLocked() when #4682 fixed
+$is_locked = _elgg_upgrade_is_locked();
+
+if (!$is_locked) {
+ elgg_register_menu_item('admin_control_panel', array(
+ 'name' => 'upgrade',
+ 'text' => elgg_echo('upgrade'),
+ 'href' => 'upgrade.php',
+ 'link_class' => 'elgg-button elgg-button-action',
+ ));
+} else {
+ elgg_register_menu_item('admin_control_panel', array(
+ 'name' => 'unlock_upgrade',
+ 'text' => elgg_echo('upgrade:unlock'),
+ 'href' => 'action/admin/site/unlock_upgrade',
+ 'is_action' => true,
+ 'link_class' => 'elgg-button elgg-button-action',
+ 'confirm' => elgg_echo('upgrade:unlock:confirm'),
+ ));
+}
+
+echo elgg_view_menu('admin_control_panel', array(
+ 'class' => 'elgg-menu-hz',
+ 'item_class' => 'mrm',
+));
diff --git a/views/default/widgets/friends/content.php b/views/default/widgets/friends/content.php
new file mode 100644
index 000000000..98814c244
--- /dev/null
+++ b/views/default/widgets/friends/content.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Friend widget display view
+ *
+ */
+
+// owner of the widget
+$owner = $vars['entity']->getOwnerEntity();
+
+// the number of friends to display
+$num = (int) $vars['entity']->num_display;
+
+// get the correct size
+$size = $vars['entity']->icon_size;
+
+if (elgg_instanceof($owner, 'user')) {
+ $html = $owner->listFriends('', $num, array(
+ 'size' => $size,
+ 'list_type' => 'gallery',
+ 'pagination' => false
+ ));
+ if ($html) {
+ echo $html;
+ }
+}
diff --git a/views/default/widgets/friends/edit.php b/views/default/widgets/friends/edit.php
new file mode 100644
index 000000000..c7e6b06ff
--- /dev/null
+++ b/views/default/widgets/friends/edit.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Friend widget options
+ *
+ */
+
+// set default value for display number
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 12;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20, 30, 50, 100),
+);
+$display_dropdown = elgg_view('input/dropdown', $params);
+
+
+// handle upgrade to 1.7.2 from previous versions
+if ($vars['entity']->icon_size == 1) {
+ $vars['entity']->icon_size = 'small';
+} elseif ($vars['entity']->icon_size == 2) {
+ $vars['entity']->icon_size = 'tiny';
+}
+
+// set default value for icon size
+if (!isset($vars['entity']->icon_size)) {
+ $vars['entity']->icon_size = 'small';
+}
+
+$params = array(
+ 'name' => 'params[icon_size]',
+ 'value' => $vars['entity']->icon_size,
+ 'options_values' => array(
+ 'small' => elgg_echo('friends:small'),
+ 'tiny' => elgg_echo('friends:tiny'),
+ ),
+);
+$size_dropdown = elgg_view('input/dropdown', $params);
+
+
+?>
+<p>
+ <?php echo elgg_echo('friends:num_display'); ?>:
+ <?php echo $display_dropdown; ?>
+</p>
+
+<p>
+ <?php echo elgg_echo('friends:icon_size'); ?>:
+ <?php echo $size_dropdown; ?>
+</p>
diff --git a/views/default/widgets/new_users/content.php b/views/default/widgets/new_users/content.php
new file mode 100644
index 000000000..ba85e7421
--- /dev/null
+++ b/views/default/widgets/new_users/content.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * New users admin widget
+ */
+
+echo elgg_list_entities(array(
+ 'type' => 'user',
+ 'subtype'=> null,
+ 'full_view' => false,
+ 'pagination' => false,
+)); \ No newline at end of file
diff --git a/views/default/widgets/new_users/edit.php b/views/default/widgets/new_users/edit.php
new file mode 100644
index 000000000..ed07213cb
--- /dev/null
+++ b/views/default/widgets/new_users/edit.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * New users widget edit view
+ */
+
+
+// set default value
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 5;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(5, 8, 10, 12, 15, 20),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<p>
+ <?php echo elgg_echo('widget:numbertodisplay'); ?>:
+ <?php echo $dropdown; ?>
+</p>
diff --git a/views/default/widgets/online_users/content.php b/views/default/widgets/online_users/content.php
new file mode 100644
index 000000000..6e0cc7abb
--- /dev/null
+++ b/views/default/widgets/online_users/content.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Online users widget
+ */
+
+$count = find_active_users(600, 10, 0, true);
+$objects = find_active_users(600, 10);
+
+if ($objects) {
+ echo elgg_view_entity_list($objects, array(
+ 'count' => $count,
+ 'limit' => 10,
+ 'pagination' => false,
+ ));
+}
diff --git a/views/default/widgets/online_users/edit.php b/views/default/widgets/online_users/edit.php
new file mode 100644
index 000000000..66f03a745
--- /dev/null
+++ b/views/default/widgets/online_users/edit.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Online users widget edit view
+ */
+
+// set default value
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 8;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(5, 8, 10, 12, 15, 20),
+);
+$dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<p>
+ <?php echo elgg_echo('widget:numbertodisplay'); ?>:
+ <?php echo $dropdown; ?>
+</p>
diff --git a/views/default/widgets/river_widget/content.php b/views/default/widgets/river_widget/content.php
new file mode 100644
index 000000000..867fc9db6
--- /dev/null
+++ b/views/default/widgets/river_widget/content.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Activity widget content view
+ */
+
+$num = (int) $vars['entity']->num_display;
+
+$options = array(
+ 'limit' => $num,
+ 'pagination' => false,
+);
+
+if (elgg_in_context('dashboard')) {
+ if ($vars['entity']->content_type == 'friends') {
+ $options['relationship_guid'] = elgg_get_page_owner_guid();
+ $options['relationship'] = 'friend';
+ }
+} else {
+ $options['subject_guid'] = elgg_get_page_owner_guid();
+}
+
+$content = elgg_list_river($options);
+if (!$content) {
+ $content = elgg_echo('river:none');
+}
+
+echo $content;
diff --git a/views/default/widgets/river_widget/edit.php b/views/default/widgets/river_widget/edit.php
new file mode 100644
index 000000000..228212e47
--- /dev/null
+++ b/views/default/widgets/river_widget/edit.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Edit settings for river widget
+ */
+
+// dashboard widget has type parameter
+if (elgg_in_context('dashboard')) {
+ if (!isset($vars['entity']->content_type)) {
+ $vars['entity']->content_type = 'friends';
+ }
+ $params = array(
+ 'name' => 'params[content_type]',
+ 'value' => $vars['entity']->content_type,
+ 'options_values' => array(
+ 'friends' => elgg_echo('river:widgets:friends'),
+ 'all' => elgg_echo('river:widgets:all'),
+ ),
+ );
+ $type_dropdown = elgg_view('input/dropdown', $params);
+ ?>
+ <div>
+ <?php echo elgg_echo('river:widget:type'); ?>:
+ <?php echo $type_dropdown; ?>
+ </div>
+ <?php
+}
+
+
+// set default value for number to display
+if (!isset($vars['entity']->num_display)) {
+ $vars['entity']->num_display = 8;
+}
+
+$params = array(
+ 'name' => 'params[num_display]',
+ 'value' => $vars['entity']->num_display,
+ 'options' => array(5, 8, 10, 12, 15, 20),
+);
+$num_dropdown = elgg_view('input/dropdown', $params);
+
+?>
+<div>
+ <?php echo elgg_echo('widget:numbertodisplay'); ?>:
+ <?php echo $num_dropdown; ?>
+</div>
+
+<?php
+// pass the context so we have the correct output upon save.
+if (elgg_in_context('dashboard')) {
+ $context = 'dashboard';
+} else {
+ $context = 'profile';
+}
+
+echo elgg_view('input/hidden', array(
+ 'name' => 'context',
+ 'value' => $context
+)); \ No newline at end of file
diff --git a/views/failsafe/messages/exceptions/admin_exception.php b/views/failsafe/messages/exceptions/admin_exception.php
new file mode 100644
index 000000000..57665d9c0
--- /dev/null
+++ b/views/failsafe/messages/exceptions/admin_exception.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Elgg exception (failsafe mode)
+ * Displays a single exception
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['object'] An exception
+ */
+
+?>
+
+<p class="elgg-messages-exception">
+ <span title="<?php echo get_class($vars['object']); ?>">
+ <?php
+
+ echo nl2br($vars['object']->getMessage());
+
+ ?>
+ </span>
+</p>
+
+<p class="elgg-messages-exception">
+ <?php
+
+ echo nl2br(htmlentities(print_r($vars['object'], true), ENT_QUOTES, 'UTF-8'));
+
+ ?>
+</p> \ No newline at end of file
diff --git a/views/failsafe/messages/exceptions/exception.php b/views/failsafe/messages/exceptions/exception.php
new file mode 100644
index 000000000..1873ca0d9
--- /dev/null
+++ b/views/failsafe/messages/exceptions/exception.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Elgg exception (failsafe mode)
+ * Displays a single exception
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['object'] An exception
+ */
+
+?>
+
+<p class="elgg-messages-exception">
+ <span title="Unrecoverable Error">
+ <?php echo elgg_echo('exception:contact_admin'); ?>
+ <br /><br />
+ Exception #<?php echo $vars['ts']; ?>.
+ </span>
+</p>
diff --git a/views/failsafe/page/default.php b/views/failsafe/page/default.php
new file mode 100644
index 000000000..6d628ebbb
--- /dev/null
+++ b/views/failsafe/page/default.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Elgg failsafe pageshell
+ * Special viewtype for rendering exceptions. Includes minimal code so as not to
+ * create a "Exception thrown without a stack frame in Unknown on line 0" error
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['title'] The page title
+ * @uses $vars['body'] The main content of the page
+ */
+
+// we won't trust server configuration but specify utf-8
+header('Content-type: text/html; charset=utf-8');
+
+?>
+<html>
+ <head>
+ <title><?php echo $vars['title']; ?></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+
+ <style type="text/css">
+
+ body {
+ text-align:left;
+ margin:0;
+ padding:0;
+ background: #4690d6;
+ font: 80%/1.5 "Lucida Grande", Verdana, sans-serif;
+ color: #333333;
+ }
+ p {
+ margin: 0px 0px 15px 0;
+ }
+ #elgg-wrapper {
+ background:white;
+ width:570px;
+ margin:auto;
+ padding:10px 40px;
+ margin-bottom:40px;
+ margin-top:20px;
+ border-right: 1px solid #666666;
+ border-bottom: 1px solid #666666;
+ }
+ .elgg-messages-exception {
+ background:#FDFFC3;
+ display:block;
+ padding:10px;
+ }
+ </style>
+
+ </head>
+ <body>
+ <div id="elgg-wrapper">
+ <h1><?php echo $vars['title']; ?></h1>
+ <?php echo $vars['body']; ?>
+ </div>
+ </body>
+</html>
diff --git a/views/foaf/page/default.php b/views/foaf/page/default.php
new file mode 100644
index 000000000..fad46ed35
--- /dev/null
+++ b/views/foaf/page/default.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * FOAF pageshell
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * // @todo removed below because blog is a plugin
+ * <foaf:weblog rdf:resource="<?php echo elgg_get_site_url(); ?>blog/<?php echo $owner->username; ?>" />
+ */
+
+header("Content-Type: text/xml");
+// echo $vars['body'];
+
+echo "<?xml version='1.0'?>\n";
+
+if (!$owner = elgg_get_page_owner_entity()) {
+ if (!elgg_is_logged_in()) {
+ exit;
+ } else {
+ $owner = elgg_get_logged_in_user_entity();
+ }
+}
+
+?>
+<rdf:RDF
+ xml:lang="en"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:foaf="http://xmlns.com/foaf/0.1/"
+ xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+
+ <rdf:Description rdf:about="">
+ <rdf:type rdf:resource="http://xmlns.com/foaf/0.1/PersonalProfileDocument"/>
+ <foaf:maker rdf:resource="#me"/>
+ <foaf:primaryTopic rdf:resource="#me"/>
+ </rdf:Description>
+
+ <foaf:Person rdf:about="#me">
+ <foaf:nick><?php echo $owner->username; ?></foaf:nick>
+ <foaf:name><?php echo $owner->name; ?></foaf:name>
+ <foaf:homepage rdf:resource="<?php echo $owner->getURL(); ?>" />
+ <foaf:depiction rdf:resource="<?php echo elgg_format_url($owner->getIconURL('large')); ?>" />
+<?php echo $vars['body']; ?>
+ </foaf:Person>
+</rdf:RDF>
diff --git a/views/foaf/user/default.php b/views/foaf/user/default.php
new file mode 100644
index 000000000..dcba55562
--- /dev/null
+++ b/views/foaf/user/default.php
@@ -0,0 +1,23 @@
+<?php
+/**
+ * Elgg default user view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+// @todo update when get_user_friends is deprecated in 1.9
+$friends = get_user_friends(elgg_get_page_owner_guid(), $subtype = "", $limit = 10000, $offset = 0);
+
+foreach ($friends as $friend) {
+?>
+
+<foaf:knows>
+<foaf:Person>
+ <foaf:nick><?php echo $friend->username; ?></foaf:nick>
+ <foaf:name><?php echo $friend->name; ?></foaf:name>
+ <rdfs:seeAlso rdf:resource="<?php echo $friend->getURL() . "?view=foaf" ?>" />
+</foaf:Person>
+</foaf:knows>
+
+<?php } ?>
diff --git a/views/ical/export/entity.php b/views/ical/export/entity.php
new file mode 100644
index 000000000..eaa3b56d8
--- /dev/null
+++ b/views/ical/export/entity.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Elgg ICAL output of default object.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+$entity = $vars['entity'];
+
+if ($entity instanceof Notable &&
+ $entity->getCalendarStartTime() &&
+ $entity->getCalendarEndTime()) {
+
+ $timestamp = date("Ymd\THis\Z", $entity->getTimeCreated());
+ $start = date("Ymd\THis\Z", $entity->getCalendarStartTime());
+ $end = date("Ymd\THis\Z", $entity->getCalendarEndTime());
+ $summary = $entity->title;
+ $modified = date("Ymd\THis\Z", $entity->getTimeUpdated());
+
+ echo <<< ICAL
+BEGIN:VEVENT
+DTSTAMP:$timestamp
+DTSTART:$start
+DTEND:$end
+SUMMARY:$summary
+LAST-MODIFIED:$modified
+END:VEVENT
+
+ICAL;
+
+}
diff --git a/views/ical/object/default.php b/views/ical/object/default.php
new file mode 100644
index 000000000..77183bb8a
--- /dev/null
+++ b/views/ical/object/default.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Elgg ICAL output of default object.
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+echo elgg_view('export/entity', $vars); \ No newline at end of file
diff --git a/views/ical/page/default.php b/views/ical/page/default.php
new file mode 100644
index 000000000..01bd9e86e
--- /dev/null
+++ b/views/ical/page/default.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Elgg ICAL output pageshell
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+$site = elgg_get_site_entity();
+
+header("Content-Type: text/calendar");
+
+?>
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//Elgg//NONSGML <?php echo $site->name; ?>//EN
+<?php echo $vars['body']; ?>
+END:VCALENDAR
diff --git a/views/installation/forms/install/template.php b/views/installation/forms/install/template.php
new file mode 100644
index 000000000..a01914f12
--- /dev/null
+++ b/views/installation/forms/install/template.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Generic form template for install forms
+ *
+ * @uses $vars['variables']
+ * @uses $vars['type'] Type of form: admin, database, settings
+ */
+
+$variables = $vars['variables'];
+$type = $vars['type'];
+
+$form_body = '';
+foreach ($variables as $field => $params) {
+ $label = elgg_echo("install:$type:label:$field");
+ $help = elgg_echo("install:$type:help:$field");
+ $params['name'] = $field;
+
+ $form_body .= '<div>';
+ $form_body .= "<label>$label</label>";
+ $form_body .= elgg_view("input/{$params['type']}", $params);
+ $form_body .= "<span class=\"install-help\">$help</span>";
+ $form_body .= '</div>';
+}
+
+$submit_params = array(
+ 'value' => elgg_echo('install:next'),
+);
+$form_body .= elgg_view('input/submit', $submit_params);
+
+echo $form_body;
diff --git a/views/installation/input/access.php b/views/installation/input/access.php
new file mode 100644
index 000000000..c3d4713bc
--- /dev/null
+++ b/views/installation/input/access.php
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Elgg access level input
+ * Displays a dropdown input field
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['name'] The name of the input field
+ *
+ */
+
+$class = "elgg-input-access";
+
+if ((!isset($vars['options'])) || (!is_array($vars['options']))) {
+ $vars['options'] = array();
+ $vars['options'] = get_write_access_array();
+}
+
+if (is_array($vars['options']) && sizeof($vars['options']) > 0) {
+
+ ?>
+
+ <select name="<?php echo $vars['name']; ?>" class="<?php echo $class; ?>">
+ <?php
+
+ foreach($vars['options'] as $key => $option) {
+ if ($key != $vars['value']) {
+ echo "<option value=\"{$key}\">{$option}</option>";
+ } else {
+ echo "<option value=\"{$key}\" selected=\"selected\">{$option}</option>";
+ }
+ }
+
+ ?>
+ </select>
+
+ <?php
+
+}
diff --git a/views/installation/input/button.php b/views/installation/input/button.php
new file mode 100644
index 000000000..ec90fed9d
--- /dev/null
+++ b/views/installation/input/button.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Create a input button
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['name'] The name of the input field
+ * @uses $vars['type'] submit or button.
+ */
+
+if (isset($vars['class'])) {
+ $class = $vars['class'];
+} else {
+ $class = "elgg-button-submit";
+}
+
+if (isset($vars['name'])) {
+ $name = $vars['name'];
+} else {
+ $name = '';
+}
+
+if (isset($vars['type'])) {
+ $type = strtolower($vars['type']);
+} else {
+ $type = 'submit';
+}
+
+switch ($type) {
+ case 'button' :
+ $type='button';
+ break;
+ case 'submit':
+ default:
+ $type = 'submit';
+}
+
+$value = htmlentities($vars['value'], ENT_QUOTES, 'UTF-8');
+
+?>
+<input type="<?php echo $type; ?>" value="<?php echo $value; ?>" class="<?php echo $class; ?>" /> \ No newline at end of file
diff --git a/views/installation/input/checkbox.php b/views/installation/input/checkbox.php
new file mode 100644
index 000000000..6fbe25169
--- /dev/null
+++ b/views/installation/input/checkbox.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Elgg checkbox input
+ * Displays a checkbox input tag
+ *
+ * @uses $var['name']
+ * @uses $vars['value']
+ * @uses $vars['class']
+ */
+
+
+if (isset($vars['class'])) {
+ $id = "class=\"{$vars['class']}\"";
+} else {
+ $id = '';
+}
+
+if (!isset($vars['value'])) {
+ $vars['value'] = $vars['name'];
+}
+
+?>
+
+<input type="checkbox" <?php echo $class; ?> name="<?php echo $vars['name']; ?>" value="<?php echo $vars['value']; ?>" /> \ No newline at end of file
diff --git a/views/installation/input/combo.php b/views/installation/input/combo.php
new file mode 100644
index 000000000..508dbcd01
--- /dev/null
+++ b/views/installation/input/combo.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Combination of text box and check box. When the checkbox is checked, the
+ * text field is cleared and disabled.
+ *
+ */
+
+$label = elgg_echo('install:label:combo:' . $vars['name']);
+
+$vars['class'] = "elgg-combo-text";
+echo elgg_view('input/text', $vars);
+
+$vars['class'] = "elgg-combo-checkbox";
+$vars['value'] = "{$vars['name']}-checkbox";
+echo elgg_view('input/checkbox', $vars);
+
+echo "<label class=\"elgg-combo-label\">$label</label>";
+
+echo '<div class="clearfloat"></div>'; \ No newline at end of file
diff --git a/views/installation/input/dropdown.php b/views/installation/input/dropdown.php
new file mode 100644
index 000000000..cf875492e
--- /dev/null
+++ b/views/installation/input/dropdown.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Elgg dropdown input
+ * Displays a dropdown input field
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['name'] The name of the input field
+ * @uses $vars['options'] An array of strings representing the options for the dropdown field
+ * @uses $vars['options_values'] An associative array of "value" => "option" where "value" is an internal name and "option" is
+ * the value displayed on the button. Replaces $vars['options'] when defined.
+ */
+
+$class = "elgg-input-dropdown";
+
+?>
+<select name="<?php echo $vars['name']; ?>" class="<?php echo $class; ?>">
+<?php
+if (isset($vars['options_values'])) {
+ foreach ($vars['options_values'] as $value => $option) {
+ if ($value != $vars['value']) {
+ echo "<option value=\"$value\">{$option}</option>";
+ } else {
+ echo "<option value=\"$value\" selected=\"selected\">{$option}</option>";
+ }
+ }
+} else {
+ foreach ($vars['options'] as $option) {
+ if ($option != $vars['value']) {
+ echo "<option>{$option}</option>";
+ } else {
+ echo "<option selected=\"selected\">{$option}</option>";
+ }
+ }
+}
+?>
+</select>
diff --git a/views/installation/input/form.php b/views/installation/input/form.php
new file mode 100644
index 000000000..3556413a8
--- /dev/null
+++ b/views/installation/input/form.php
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Create a form for data submission.
+ *
+ * @uses $vars['body'] The body of the form (made up of other input/xxx views and html
+ * @uses $vars['action'] URL of the action being called
+ * @uses $vars['method'] Method (default POST)
+ * @uses $vars['name'] Form name
+ */
+
+if (isset($vars['name'])) {
+ $name = "name=\"{$vars['name']}\"";
+} else {
+ $name = '';
+}
+
+$body = $vars['body'];
+$action = $vars['action'];
+if (isset($vars['method'])) {
+ $method = $vars['method'];
+} else {
+ $method = 'POST';
+}
+
+$method = strtolower($method);
+
+?>
+<form <?php echo $name; ?> action="<?php echo $action; ?>" method="<?php echo $method; ?>">
+<?php echo $body; ?>
+</form> \ No newline at end of file
diff --git a/views/installation/input/password.php b/views/installation/input/password.php
new file mode 100644
index 000000000..2265ab117
--- /dev/null
+++ b/views/installation/input/password.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg password input
+ * Displays a password input field
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['name'] The name of the input field
+ *
+ */
+
+$class = "input-password";
+
+$value = htmlentities($vars['value'], ENT_QUOTES, 'UTF-8');
+
+?>
+
+<input type="password" name="<?php echo $vars['name']; ?>" value="<?php echo $value; ?>" class="<?php echo $class; ?>" />
diff --git a/views/installation/input/submit.php b/views/installation/input/submit.php
new file mode 100644
index 000000000..5d891c380
--- /dev/null
+++ b/views/installation/input/submit.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Create a submit input button
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['name'] The name of the input field
+ */
+
+$vars['type'] = 'submit';
+
+echo elgg_view('input/button', $vars); \ No newline at end of file
diff --git a/views/installation/input/text.php b/views/installation/input/text.php
new file mode 100644
index 000000000..375b91c44
--- /dev/null
+++ b/views/installation/input/text.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Elgg text input
+ * Displays a text input field
+ *
+ * @uses $vars['value'] The current value, if any
+ * @uses $vars['name'] The name of the input field
+ * @uses $vars['class'] CSS class
+ */
+
+if (isset($vars['class'])) {
+ $class = "class=\"{$vars['class']}\"";
+} else {
+ $class = "elgg-input-text";
+}
+
+$value = htmlentities($vars['value'], ENT_QUOTES, 'UTF-8');
+
+?>
+<input type="text" name="<?php echo $vars['name']; ?>" value="<?php echo $value; ?>" <?php echo $class; ?> /> \ No newline at end of file
diff --git a/views/installation/install/js_rewrite_check.php b/views/installation/install/js_rewrite_check.php
new file mode 100644
index 000000000..04d81171d
--- /dev/null
+++ b/views/installation/install/js_rewrite_check.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Some servers don't allow PHP to check the rewrite, so try via AJAX
+ */
+?>
+<script type="text/javascript">
+ elgg.installer.rewriteTest(
+ '<?php echo $vars['url'];?>',
+ '<?php echo elgg_echo('install:check:rewrite:success'); ?>',
+ '<?php echo $vars['config']->wwwroot; ?>install.php?step=database'
+ );
+</script> \ No newline at end of file
diff --git a/views/installation/install/nav.php b/views/installation/install/nav.php
new file mode 100644
index 000000000..c150cb2cb
--- /dev/null
+++ b/views/installation/install/nav.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Navigation for installation pages
+ *
+ * @uses $vars['url'] base url of site
+ * @uses $vars['next_step'] next step as string
+ * @uses $vars['refresh'] should refresh button be shown?
+ * @uses $vars['advance'] should the next button be active?
+ */
+
+
+// has a refresh button been requested
+$refresh = '';
+if (isset($vars['refresh']) && $vars['refresh']) {
+ $refresh_text = elgg_echo('install:refresh');
+ $refresh = "<a href=\"\">$refresh_text</a>";
+}
+
+// create next button and selectively disable
+$next_text = elgg_echo('install:next');
+$next_link = elgg_get_site_url()."install.php?step={$vars['next_step']}";
+$next = "<a href=\"$next_link\">$next_text</a>";
+if (isset($vars['advance']) && !$vars['advance']) {
+ // disable the next button
+ $next = "<a class=\"elgg-state-disabled\">$next_text</a>";
+}
+
+
+echo <<<___END
+<div class="elgg-install-nav">
+ $next
+ $refresh
+</div>
+
+___END;
diff --git a/views/installation/install/pages/admin.php b/views/installation/install/pages/admin.php
new file mode 100644
index 000000000..e810aa701
--- /dev/null
+++ b/views/installation/install/pages/admin.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Install create admin account page
+ */
+
+echo elgg_autop(elgg_echo('install:admin:instructions'));
+
+$vars['type'] = 'admin';
+
+$url = current_page_url();
+
+$form_vars = array(
+ 'action' => $url,
+ 'disable_security' => TRUE,
+);
+
+echo elgg_view_form('install/template', $form_vars, $vars);
diff --git a/views/installation/install/pages/complete.php b/views/installation/install/pages/complete.php
new file mode 100644
index 000000000..80f8e7434
--- /dev/null
+++ b/views/installation/install/pages/complete.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Install completion page
+ */
+
+echo elgg_autop(elgg_echo('install:complete:instructions'));
+
+?>
+
+<div class="elgg-install-nav">
+<?php
+ $url = elgg_get_site_url() . $vars['destination'];
+ $text = elgg_echo('install:complete:gotosite');
+ echo "<a href=\"$url\">$text</a>";
+?>
+</div>
diff --git a/views/installation/install/pages/database.php b/views/installation/install/pages/database.php
new file mode 100644
index 000000000..d24b4f57b
--- /dev/null
+++ b/views/installation/install/pages/database.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Install database page
+ *
+ * @uses $vars['failure'] Settings file exists but something went wrong
+ */
+
+if (isset($vars['failure']) && $vars['failure']) {
+ echo elgg_autop(elgg_echo('install:database:error'));
+ $vars['refresh'] = TRUE;
+ $vars['advance'] = FALSE;
+ echo elgg_view('install/nav', $vars);
+} else {
+ echo elgg_autop(elgg_echo('install:database:instructions'));
+
+ $vars['type'] = 'database';
+
+ $url = current_page_url();
+
+ $form_vars = array(
+ 'action' => $url,
+ 'disable_security' => TRUE,
+ );
+
+ echo elgg_view_form('install/template', $form_vars, $vars);
+} \ No newline at end of file
diff --git a/views/installation/install/pages/requirements.php b/views/installation/install/pages/requirements.php
new file mode 100644
index 000000000..3f0941c95
--- /dev/null
+++ b/views/installation/install/pages/requirements.php
@@ -0,0 +1,39 @@
+<?php
+/**
+ * Install requirements checking page
+ *
+ * @uses $vars['num_failures] Number of requirements failures
+ * @uses $vars['num_warnings] Number of recommendation warnings
+ */
+
+if ($vars['num_failures'] != 0) {
+ $instruct_text = elgg_echo('install:requirements:instructions:failure');
+} elseif ($vars['num_warnings'] != 0) {
+ $instruct_text = elgg_echo('install:requirements:instructions:warning');
+} else {
+ $instruct_text = elgg_echo('install:requirements:instructions:success');
+}
+
+echo elgg_autop($instruct_text);
+
+$report = $vars['report'];
+foreach ($report as $category => $checks) {
+ $title = elgg_echo("install:require:$category");
+ echo "<h3>$title</h3>";
+ echo "<ul class=\"elgg-require-$category\">";
+ foreach ($checks as $check) {
+ echo "<li class=\"{$check['severity']}\">";
+ echo elgg_autop($check['message']);
+ echo "</li>";
+ }
+ echo "</ul>";
+}
+
+$vars['refresh'] = true;
+
+// cannot advance to next step with a failure
+if ($vars['num_failures'] != 0) {
+ $vars['advance'] = false;
+}
+
+echo elgg_view('install/nav', $vars);
diff --git a/views/installation/install/pages/settings.php b/views/installation/install/pages/settings.php
new file mode 100644
index 000000000..04f23c0ea
--- /dev/null
+++ b/views/installation/install/pages/settings.php
@@ -0,0 +1,14 @@
+<?php
+
+echo elgg_autop(elgg_echo('install:settings:instructions'));
+
+$vars['type'] = 'settings';
+
+$url = current_page_url();
+
+$form_vars = array(
+ 'action' => $url,
+ 'disable_security' => TRUE,
+);
+
+echo elgg_view_form('install/template', $form_vars, $vars);
diff --git a/views/installation/install/pages/welcome.php b/views/installation/install/pages/welcome.php
new file mode 100644
index 000000000..f370c15f3
--- /dev/null
+++ b/views/installation/install/pages/welcome.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Install welcome page
+ */
+
+echo elgg_autop(elgg_echo('install:welcome:instructions'));
+
+echo elgg_view('install/nav', $vars);
diff --git a/views/installation/page/default.php b/views/installation/page/default.php
new file mode 100644
index 000000000..662e8206e
--- /dev/null
+++ b/views/installation/page/default.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Elgg install pageshell
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['title'] The page title
+ * @uses $vars['body'] The main content of the page
+ * @uses $vars['sysmessages'] Array of system status messages
+ */
+
+$title = elgg_echo('install:title');
+$title .= " : {$vars['title']}";
+
+// we won't trust server configuration but specify utf-8
+header('Content-type: text/html; charset=utf-8');
+
+// turn off browser caching
+header('Pragma: public', TRUE);
+header("Cache-Control: no-cache, must-revalidate", TRUE);
+header('Expires: Fri, 05 Feb 1982 00:00:00 -0500', TRUE);
+
+?>
+<!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" xml:lang="en" lang="en">
+ <head>
+ <title><?php echo $title; ?></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <link rel="SHORTCUT ICON" href="<?php echo elgg_get_site_url(); ?>_graphics/favicon.ico" />
+ <link rel="stylesheet" href="<?php echo elgg_get_site_url(); ?>install/css/install.css" type="text/css" />
+ <script type="text/javascript" src="<?php echo elgg_get_site_url(); ?>vendors/jquery/jquery-1.6.4.min.js"></script>
+ <script type="text/javascript" src="<?php echo elgg_get_site_url(); ?>install/js/install.js"></script>
+ </head>
+ <body>
+ <div class="elgg-page">
+ <div class="elgg-page-header">
+ <?php echo elgg_view('page/elements/header', $vars); ?>
+ </div>
+ <div class="elgg-page-body">
+ <div class="elgg-layout">
+ <div class="elgg-sidebar">
+ <?php echo elgg_view('page/elements/sidebar', $vars); ?>
+ </div>
+ <div class="elgg-body">
+ <h2><?php echo $vars['title']; ?></h2>
+ <?php echo elgg_view('page/elements/messages', array('object' => $vars['sysmessages'])); ?>
+ <?php echo $vars['body']; ?>
+ </div>
+ </div>
+ </div>
+ <div class="elgg-page-footer">
+ <?php echo elgg_view('page/elements/footer'); ?>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/views/installation/page/elements/footer.php b/views/installation/page/elements/footer.php
new file mode 100644
index 000000000..d6a755fba
--- /dev/null
+++ b/views/installation/page/elements/footer.php
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Install footer - offers help links
+ */
+?>
+<ul>
+ <li><a href="http://docs.elgg.org/wiki/Installation" target="_blank">Install instructions</a></li>
+ <li><a href="http://docs.elgg.org/wiki/Install_Troubleshooting" target="_blank">Install troubleshooting</a></li>
+ <li><a href="http://community.elgg.org/pg/groups/world" target="_blank">Elgg community forums</a></li>
+</ul> \ No newline at end of file
diff --git a/views/installation/page/elements/header.php b/views/installation/page/elements/header.php
new file mode 100644
index 000000000..8c18dbffd
--- /dev/null
+++ b/views/installation/page/elements/header.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Install header
+ */
+
+$url = elgg_get_site_url()."_graphics/elgg_logo.png";
+?>
+<img src="<?php echo $url; ?>" alt="Elgg" />
diff --git a/views/installation/page/elements/messages.php b/views/installation/page/elements/messages.php
new file mode 100644
index 000000000..46261dca4
--- /dev/null
+++ b/views/installation/page/elements/messages.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Lists all system messages
+ *
+ * @uses $vars['object'] The array of message registers
+ */
+
+if (isset($vars['object']) && is_array($vars['object']) && sizeof($vars['object']) > 0) {
+
+ echo '<ul class="elgg-system-messages">';
+
+ foreach ($vars['object'] as $type => $list ) {
+ foreach ($list as $message) {
+ echo "<li class=\"elgg-state-$type\">";
+ echo elgg_autop($message);
+ echo '</li>';
+ }
+ }
+
+ echo '</ul>';
+}
diff --git a/views/installation/page/elements/sidebar.php b/views/installation/page/elements/sidebar.php
new file mode 100644
index 000000000..8136cd898
--- /dev/null
+++ b/views/installation/page/elements/sidebar.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Install sidebar
+ *
+ * @uses $vars['step'] Current step
+ * @uses $vars['steps'] Array of steps
+ */
+
+$current_step = $vars['step'];
+$steps = $vars['steps'];
+
+$current_step_index = array_search($current_step, $steps);
+
+echo '<ol>';
+foreach ($steps as $index => $step) {
+ if ($index < $current_step_index) {
+ $class = 'past';
+ } elseif ($index == $current_step_index) {
+ $class = 'present';
+ } else {
+ $class = 'future';
+ }
+ $text = elgg_echo("install:$step");
+ echo "<li class=\"$class\">$text</li>";
+}
+echo '</ol>';
diff --git a/views/json/api/output.php b/views/json/api/output.php
new file mode 100644
index 000000000..adeb7cc75
--- /dev/null
+++ b/views/json/api/output.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg JSON output
+ * This outputs the api results as JSON
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$result = $vars['result'];
+$export = $result->export();
+
+global $jsonexport;
+
+// with api calls, we don't want extra baggage found in other json views
+// so we skip the associative array
+$jsonexport = $export; \ No newline at end of file
diff --git a/views/json/export/entity.php b/views/json/export/entity.php
new file mode 100644
index 000000000..36af5eaef
--- /dev/null
+++ b/views/json/export/entity.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Elgg Entity export.
+ * Displays an entity as JSON
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$entity = $vars['entity'];
+
+$export = new stdClass;
+$exportable_values = $entity->getExportableValues();
+
+foreach ($exportable_values as $v) {
+ $export->$v = $entity->$v;
+}
+
+$export->url = $entity->getURL();
+
+global $jsonexport;
+$jsonexport[$entity->getType()][$entity->getSubtype()][] = $export;
+
+// @todo hack to fix #4504
+echo "Fix for bug #4504";
diff --git a/views/json/export/metadata.php b/views/json/export/metadata.php
new file mode 100644
index 000000000..e1e6ceb26
--- /dev/null
+++ b/views/json/export/metadata.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Elgg metadata export.
+ * Displays a metadata item using json
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$m = $vars['metadata'];
+
+$export = new stdClass;
+$exportable_values = $entity->getExportableValues();
+
+foreach ($exportable_values as $v) {
+ $export->$v = $m->$v;
+}
+
+global $jsonexport;
+$jsonexport['metadata'][] = $entity;
+// echo json_encode($export); \ No newline at end of file
diff --git a/views/json/export/relationship.php b/views/json/export/relationship.php
new file mode 100644
index 000000000..47b3a390d
--- /dev/null
+++ b/views/json/export/relationship.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Elgg relationship export.
+ * Displays a relationship using JSON.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$r = $vars['relationship'];
+
+$export = new stdClass;
+
+$exportable_values = $entity->getExportableValues();
+
+foreach ($exportable_values as $v) {
+ $export->$v = $r->$v;
+}
+
+global $jsonexport;
+$jsonexport['relationships'][] = $export; \ No newline at end of file
diff --git a/views/json/group/default.php b/views/json/group/default.php
new file mode 100644
index 000000000..dd190d402
--- /dev/null
+++ b/views/json/group/default.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * JSON group view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view('export/entity', $vars);
diff --git a/views/json/messages/exceptions/exception.php b/views/json/messages/exceptions/exception.php
new file mode 100644
index 000000000..4f73212bc
--- /dev/null
+++ b/views/json/messages/exceptions/exception.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Elgg exception
+ * Displays a single exception
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['object'] An exception
+ */
+
+$export = $vars['object'];
+
+global $jsonexport;
+$jsonexport['exceptions'][] = $export; \ No newline at end of file
diff --git a/views/json/object/default.php b/views/json/object/default.php
new file mode 100644
index 000000000..8b88b3010
--- /dev/null
+++ b/views/json/object/default.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * JSON object view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view('export/entity', $vars);
diff --git a/views/json/page/components/list.php b/views/json/page/components/list.php
new file mode 100644
index 000000000..5de4f1f59
--- /dev/null
+++ b/views/json/page/components/list.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * JSON list view
+ *
+ * @uses $vars['items']
+ */
+
+$items = $vars['items'];
+
+if (is_array($items) && sizeof($items) > 0) {
+ foreach ($items as $item) {
+ elgg_view_list_item($item, $vars);
+ }
+} \ No newline at end of file
diff --git a/views/json/page/default.php b/views/json/page/default.php
new file mode 100644
index 000000000..2d0403e11
--- /dev/null
+++ b/views/json/page/default.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg JSON output pageshell
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+header("Content-Type: application/json");
+
+global $jsonexport;
+echo json_encode($jsonexport); \ No newline at end of file
diff --git a/views/json/river/item.php b/views/json/river/item.php
new file mode 100644
index 000000000..64677817f
--- /dev/null
+++ b/views/json/river/item.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * JSON river item view
+ *
+ * @uses $vars['item']
+ */
+
+global $jsonexport;
+
+if (!isset($jsonexport['activity'])) {
+ $jsonexport['activity'] = array();
+}
+
+$item = $vars['item'];
+if (elgg_view_exists($item->view, 'default')) {
+ $item->string = elgg_view('river/elements/summary', array('item' => $item), FALSE, FALSE, 'default');
+}
+
+$jsonexport['activity'][] = $vars['item'];
diff --git a/views/json/site/default.php b/views/json/site/default.php
new file mode 100644
index 000000000..ee4eda489
--- /dev/null
+++ b/views/json/site/default.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * JSON site view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view('export/entity', $vars);
diff --git a/views/json/user/default.php b/views/json/user/default.php
new file mode 100644
index 000000000..4d44692c9
--- /dev/null
+++ b/views/json/user/default.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * JSON user view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view('export/entity', $vars);
diff --git a/views/opendd/export/entity.php b/views/opendd/export/entity.php
new file mode 100644
index 000000000..aaaf6bb8d
--- /dev/null
+++ b/views/opendd/export/entity.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Elgg Entity export.
+ * Displays an entity as ODD
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$entity = $vars['entity'];
+$serialised = exportAsArray($vars['entity']->guid);
+foreach ($serialised as $s) {
+ echo $s;
+} \ No newline at end of file
diff --git a/views/opendd/export/metadata.php b/views/opendd/export/metadata.php
new file mode 100644
index 000000000..03a8e2b42
--- /dev/null
+++ b/views/opendd/export/metadata.php
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Elgg metadata export.
+ * Displays a metadata item using the current view.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$m = $vars['metadata'];
+$uuid = $vars['uuid'];
+
+//$odd = new ODDDocument();
+//$odd->addElement($m->export());
+
+//echo $odd;
+
+echo $m->export(); \ No newline at end of file
diff --git a/views/opendd/export/relationship.php b/views/opendd/export/relationship.php
new file mode 100644
index 000000000..f4ab779c4
--- /dev/null
+++ b/views/opendd/export/relationship.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Elgg relationship export.
+ * Displays a relationship using ODD.
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$r = $vars['relationship'];
+
+//$odd = new ODDDocument();
+//$odd->addElement($r->export());
+
+//echo $odd;
+
+echo $r->export();
diff --git a/views/opendd/group/default.php b/views/opendd/group/default.php
new file mode 100644
index 000000000..6f6fc2b37
--- /dev/null
+++ b/views/opendd/group/default.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg default object view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$serialised = exportAsArray($vars['entity']->guid);
+foreach ($serialised as $s) {
+ echo $s;
+} \ No newline at end of file
diff --git a/views/opendd/messages/exceptions/exception.php b/views/opendd/messages/exceptions/exception.php
new file mode 100644
index 000000000..dc0f48a8d
--- /dev/null
+++ b/views/opendd/messages/exceptions/exception.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Elgg exception
+ * Displays a single exception
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['object'] An exception
+ */
+
+?>
+<!--
+<?php echo get_class($vars['object']); ?>: <?php echo elgg_autop($vars['object']->getMessage()); ?>
+<?php if (elgg_get_config('debug')) { ?>
+<?php
+ echo print_r($vars['object'], true);
+?>
+<?php } ?>
+
+--> \ No newline at end of file
diff --git a/views/opendd/object/default.php b/views/opendd/object/default.php
new file mode 100644
index 000000000..6f6fc2b37
--- /dev/null
+++ b/views/opendd/object/default.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg default object view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$serialised = exportAsArray($vars['entity']->guid);
+foreach ($serialised as $s) {
+ echo $s;
+} \ No newline at end of file
diff --git a/views/opendd/page/default.php b/views/opendd/page/default.php
new file mode 100644
index 000000000..bdd59d45e
--- /dev/null
+++ b/views/opendd/page/default.php
@@ -0,0 +1,16 @@
+<?php
+/**
+ * Elgg XML output pageshell for ODD
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+header("Content-Type: text/xml");
+?>
+<odd>
+<?php
+echo $vars['body'];
+?>
+</odd> \ No newline at end of file
diff --git a/views/opendd/search/entity_list.php b/views/opendd/search/entity_list.php
new file mode 100644
index 000000000..6b33cefde
--- /dev/null
+++ b/views/opendd/search/entity_list.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * @package Elgg
+ * @subpackage Core
+ */
+$entities = $vars['entities'];
+if (is_array($entities) && sizeof($entities) > 0) {
+ foreach($entities as $entity) {
+ echo elgg_view_entity($entity);
+ }
+} \ No newline at end of file
diff --git a/views/opendd/site/default.php b/views/opendd/site/default.php
new file mode 100644
index 000000000..83f39eb67
--- /dev/null
+++ b/views/opendd/site/default.php
@@ -0,0 +1,13 @@
+<?php
+
+/**
+ * Elgg default object view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$serialised = exportAsArray($vars['entity']->guid);
+foreach ($serialised as $s) {
+ echo $s;
+} \ No newline at end of file
diff --git a/views/opendd/user/default.php b/views/opendd/user/default.php
new file mode 100644
index 000000000..6f6fc2b37
--- /dev/null
+++ b/views/opendd/user/default.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg default object view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$serialised = exportAsArray($vars['entity']->guid);
+foreach ($serialised as $s) {
+ echo $s;
+} \ No newline at end of file
diff --git a/views/php/api/output.php b/views/php/api/output.php
new file mode 100644
index 000000000..14259564c
--- /dev/null
+++ b/views/php/api/output.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * Elgg PHP output
+ * This outputs the api results as serialized PHP
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$result = $vars['result'];
+$export = $result->export();
+
+echo serialize($export); \ No newline at end of file
diff --git a/views/php/export/entity.php b/views/php/export/entity.php
new file mode 100644
index 000000000..d2bcc0d58
--- /dev/null
+++ b/views/php/export/entity.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Elgg Entity export.
+ * Displays an entity as PHP serialised data
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$entity = $vars['entity'];
+
+$export = new stdClass;
+$exportable_values = $entity->getExportableValues();
+
+foreach ($exportable_values as $v) {
+ $export->$v = $entity->$v;
+}
+
+echo serialize($export);
diff --git a/views/php/export/metadata.php b/views/php/export/metadata.php
new file mode 100644
index 000000000..90f1daeb5
--- /dev/null
+++ b/views/php/export/metadata.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Elgg metadata export.
+ * Displays a metadata item using PHP serialised data
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$m = $vars['metadata'];
+
+$export = new stdClass;
+$exportable_values = $m->getExportableValues();
+
+foreach ($exportable_values as $v) {
+ $export->$v = $m->$v;
+}
+
+echo serialize($export); \ No newline at end of file
diff --git a/views/php/export/relationship.php b/views/php/export/relationship.php
new file mode 100644
index 000000000..691e63067
--- /dev/null
+++ b/views/php/export/relationship.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Elgg relationship export.
+ * Displays a relationship using PHP serialised data
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$r = $vars['relationship'];
+
+$export = new stdClass;
+$exportable_values = $r->getExportableValues();
+
+foreach ($exportable_values as $v) {
+ $export->$v = $r->$v;
+}
+
+echo serialize($export); \ No newline at end of file
diff --git a/views/php/group/default.php b/views/php/group/default.php
new file mode 100644
index 000000000..968d68bcd
--- /dev/null
+++ b/views/php/group/default.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * PHP group view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view('export/entity', $vars); \ No newline at end of file
diff --git a/views/php/messages/exceptions/exception.php b/views/php/messages/exceptions/exception.php
new file mode 100644
index 000000000..195e9dfd4
--- /dev/null
+++ b/views/php/messages/exceptions/exception.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * Elgg exception
+ * Displays a single exception
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['object'] An exception
+ */
+
+echo serialize($vars['object']); \ No newline at end of file
diff --git a/views/php/object/default.php b/views/php/object/default.php
new file mode 100644
index 000000000..8cf4eb8c6
--- /dev/null
+++ b/views/php/object/default.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * PHP object view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view('export/entity', $vars); \ No newline at end of file
diff --git a/views/php/page/default.php b/views/php/page/default.php
new file mode 100644
index 000000000..87211a462
--- /dev/null
+++ b/views/php/page/default.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * PHP output pageshell
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo $vars['body']; \ No newline at end of file
diff --git a/views/php/site/default.php b/views/php/site/default.php
new file mode 100644
index 000000000..102ac7ec7
--- /dev/null
+++ b/views/php/site/default.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * PHP site view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+elgg_view('export/entity', $vars); \ No newline at end of file
diff --git a/views/php/user/default.php b/views/php/user/default.php
new file mode 100644
index 000000000..1bb0f8fa9
--- /dev/null
+++ b/views/php/user/default.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * PHP user view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+echo elgg_view('export/entity', $vars); \ No newline at end of file
diff --git a/views/rss/annotation/generic_comment.php b/views/rss/annotation/generic_comment.php
new file mode 100644
index 000000000..de652fc8e
--- /dev/null
+++ b/views/rss/annotation/generic_comment.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * Elgg RSS view for a generic_comment annotation
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$annotation = $vars['annotation'];
+
+$poster = $annotation->getOwnerEntity();
+$poster_name = htmlspecialchars($poster->name, ENT_NOQUOTES, 'UTF-8');
+$pubdate = date('r', $annotation->getTimeCreated());
+$permalink = $annotation->getURL();
+
+$title = elgg_echo('generic_comment:title', array($poster_name));
+
+$creator = elgg_view('page/components/creator', array('entity' => $annotation));
+$extensions = elgg_view('extensions/item', $vars);
+
+$item = <<<__HTML
+<item>
+ <guid isPermaLink='true'>$permalink</guid>
+ <pubDate>$pubdate</pubDate>
+ <link>$permalink</link>
+ <title><![CDATA[$title]]></title>
+ <description><![CDATA[{$vars['annotation']->value}]]></description>
+ $creator$extensions
+</item>
+
+__HTML;
+
+echo $item;
diff --git a/views/rss/group/default.php b/views/rss/group/default.php
new file mode 100644
index 000000000..7fef4d434
--- /dev/null
+++ b/views/rss/group/default.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * RSS group view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$permalink = htmlspecialchars($vars['entity']->getURL(), ENT_NOQUOTES, 'UTF-8');
+$pubdate = date('r', $vars['entity']->getTimeCreated());
+$title = htmlspecialchars($vars['entity']->name, ENT_NOQUOTES, 'UTF-8');
+
+if ($vars['entity']->description) {
+ $description = elgg_autop($vars['entity']->description);
+} elseif ($vars['entity']->briefdescription) {
+ $description = elgg_autop($vars['entity']->briefdescription);
+} else {
+ $description = '';
+}
+
+$creator = elgg_view('page/components/creator', $vars);
+$georss = elgg_view('page/components/georss', $vars);
+$extension = elgg_view('extensions/item', $vars);
+
+$item = <<<__HTML
+<item>
+ <guid isPermaLink="true">$permalink</guid>
+ <pubDate>$pubdate</pubDate>
+ <link>$permalink</link>
+ <title><![CDATA[$title]]></title>
+ <description><![CDATA[$description]]></description>
+ $creator$georss$extension
+</item>
+
+__HTML;
+
+echo $item;
diff --git a/views/rss/object/default.php b/views/rss/object/default.php
new file mode 100644
index 000000000..8c7d5d8e0
--- /dev/null
+++ b/views/rss/object/default.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * RSS object view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$title = $vars['entity']->title;
+if (empty($title)) {
+ $title = strip_tags($vars['entity']->description);
+ $title = elgg_get_excerpt($title, 32);
+}
+
+$permalink = htmlspecialchars($vars['entity']->getURL(), ENT_NOQUOTES, 'UTF-8');
+$pubdate = date('r', $vars['entity']->getTimeCreated());
+
+$description = elgg_autop($vars['entity']->description);
+
+$creator = elgg_view('page/components/creator', $vars);
+$georss = elgg_view('page/components/georss', $vars);
+$extension = elgg_view('extensions/item', $vars);
+
+$item = <<<__HTML
+<item>
+ <guid isPermaLink="true">$permalink</guid>
+ <pubDate>$pubdate</pubDate>
+ <link>$permalink</link>
+ <title><![CDATA[$title]]></title>
+ <description><![CDATA[$description]]></description>
+ $creator$georss$extension
+</item>
+
+__HTML;
+
+echo $item;
diff --git a/views/rss/output/url.php b/views/rss/output/url.php
new file mode 100644
index 000000000..b0f4d9792
--- /dev/null
+++ b/views/rss/output/url.php
@@ -0,0 +1,6 @@
+<?php
+/**
+ * RSS url output view
+ *
+ */
+echo elgg_view('output/url', $vars, false, false, 'default');
diff --git a/views/rss/page/components/creator.php b/views/rss/page/components/creator.php
new file mode 100644
index 000000000..a14f1dbca
--- /dev/null
+++ b/views/rss/page/components/creator.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Creator view
+ *
+ * Implements Dublin Core creator
+ *
+ * @uses $vars['entity']
+ */
+
+$owner = $vars['entity']->getOwnerEntity();
+if ($owner) {
+ $owner_name = htmlspecialchars($owner->name, ENT_NOQUOTES, 'UTF-8');
+ echo "<dc:creator>$owner_name</dc:creator>";
+}
diff --git a/views/rss/page/components/gallery.php b/views/rss/page/components/gallery.php
new file mode 100644
index 000000000..690416e5b
--- /dev/null
+++ b/views/rss/page/components/gallery.php
@@ -0,0 +1,8 @@
+<?php
+/*
+ * RSS gallery view
+ *
+ * @uses $vars['items']
+ */
+
+echo elgg_view('page/components/list', $vars);
diff --git a/views/rss/page/components/georss.php b/views/rss/page/components/georss.php
new file mode 100644
index 000000000..d176b8cac
--- /dev/null
+++ b/views/rss/page/components/georss.php
@@ -0,0 +1,15 @@
+<?php
+/**
+ * GeoRSS view
+ *
+ * This implements GeoRSS-Simple
+ *
+ * @uses $vars['entity']
+ */
+
+$longitude = $vars['entity']->getLongitude();
+$latitude = $vars['entity']->getLatitude();
+
+if ($vars['entity'] instanceof Locatable && $longitude && $latitude) {
+ echo "<georss:point>$latitude $longitude</georss:point>";
+}
diff --git a/views/rss/page/components/image_block.php b/views/rss/page/components/image_block.php
new file mode 100644
index 000000000..ff94bcff2
--- /dev/null
+++ b/views/rss/page/components/image_block.php
@@ -0,0 +1,7 @@
+<?php
+/**
+ * RSS image block view
+ *
+ * Only display the body
+ */
+echo $vars['body']; \ No newline at end of file
diff --git a/views/rss/page/components/list.php b/views/rss/page/components/list.php
new file mode 100644
index 000000000..2650fc006
--- /dev/null
+++ b/views/rss/page/components/list.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * RSS list view
+ *
+ * @uses $vars['items']
+ */
+
+$items = $vars['items'];
+
+if (is_array($items) && sizeof($items) > 0) {
+ foreach ($items as $item) {
+ echo elgg_view_list_item($item, $vars);
+ }
+} \ No newline at end of file
diff --git a/views/rss/page/default.php b/views/rss/page/default.php
new file mode 100644
index 000000000..a7b757760
--- /dev/null
+++ b/views/rss/page/default.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Elgg RSS output pageshell
+ *
+ * @package Elgg.Core
+ *
+ * @uses $vars['title'] The title of the RSS feed
+ * @uses $vars['body'] The items for the RSS feed as a string
+ * @uses $vars['descrption'] The description for the RSS feed
+ */
+
+// Set title
+if (empty($vars['title'])) {
+ $title = elgg_get_config('sitename');
+} else {
+ $title = elgg_get_config('sitename') . ": " . $vars['title'];
+}
+
+// Remove RSS from URL
+$url = str_replace('?view=rss', '', current_page_url());
+$url = str_replace('&view=rss', '', $url);
+$url = htmlspecialchars($url, ENT_NOQUOTES, 'UTF-8');
+
+$body = elgg_extract('body', $vars, '');
+$description = elgg_extract('description', $vars, '');
+
+$namespaces = elgg_view('extensions/xmlns');
+$extensions = elgg_view('extensions/channel');
+
+
+// allow caching as required by stupid MS products for https feeds.
+header('Pragma: public', true);
+header("Content-Type: text/xml");
+
+echo "<?xml version='1.0'?>";
+echo <<<END
+<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:georss="http://www.georss.org/georss" $namespaces>
+<channel>
+ <title><![CDATA[$title]]></title>
+ <link>$url</link>
+ <description><![CDATA[$description]]></description>
+ $extensions
+ $body
+</channel>
+</rss>
+END;
diff --git a/views/rss/page/elements/comments.php b/views/rss/page/elements/comments.php
new file mode 100644
index 000000000..9c655ffef
--- /dev/null
+++ b/views/rss/page/elements/comments.php
@@ -0,0 +1,13 @@
+<?php
+/**
+ * RSS comments view
+ *
+ * @uses $vars['entity']
+ */
+
+$options = array(
+ 'guid' => $vars['entity']->getGUID(),
+ 'annotation_name' => 'generic_comment',
+ 'order_by' => 'n_table.time_created desc',
+);
+echo elgg_list_annotations($options);
diff --git a/views/rss/page/layouts/default.php b/views/rss/page/layouts/default.php
new file mode 100644
index 000000000..7f3ddebbd
--- /dev/null
+++ b/views/rss/page/layouts/default.php
@@ -0,0 +1,5 @@
+<?php
+/**
+ * RSS layout shell
+ */
+echo $vars['content']; \ No newline at end of file
diff --git a/views/rss/river/item.php b/views/rss/river/item.php
new file mode 100644
index 000000000..fa2914eff
--- /dev/null
+++ b/views/rss/river/item.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * RSS river view
+ *
+ * @uses $vars['item']
+ */
+$item = $vars['item'];
+
+$name = $item->getSubjectEntity()->name;
+$name = htmlspecialchars($name, ENT_NOQUOTES, 'UTF-8');
+$title = elgg_echo('river:update', array($name));
+
+$timestamp = date('r', $item->getPostedTime());
+$body = elgg_view('river/elements/summary', $vars, false, false, 'default');
+
+
+$object = $item->getObjectEntity();
+if ($object) {
+ $url = htmlspecialchars($object->getURL());
+} else {
+ $url = elgg_normalize_url('activity');
+}
+
+$html = <<<__HTML
+<item>
+ <guid>$item->id</guid>
+ <pubDate>$timestamp</pubDate>
+ <link>$url</link>
+ <title><![CDATA[$title]]></title>
+ <description><![CDATA[$body]]></description>
+</item>
+
+__HTML;
+
+echo $html;
diff --git a/views/rss/user/default.php b/views/rss/user/default.php
new file mode 100644
index 000000000..92c9427b2
--- /dev/null
+++ b/views/rss/user/default.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * RSS user view
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$permalink = htmlspecialchars($vars['entity']->getURL(), ENT_NOQUOTES, 'UTF-8');
+$pubdate = date('r', $vars['entity']->getTimeCreated());
+$title = htmlspecialchars($vars['entity']->name, ENT_NOQUOTES, 'UTF-8');
+
+if ($vars['entity']->description) {
+ $description = elgg_autop($vars['entity']->description);
+} else {
+ $description = '';
+}
+
+$georss = elgg_view('page/components/georss', $vars);
+$extension = elgg_view('extensions/item', $vars);
+
+$item = <<<__HTML
+<item>
+ <guid isPermaLink="true">$permalink</guid>
+ <pubDate>$pubdate</pubDate>
+ <link>$permalink</link>
+ <title><![CDATA[$title]]></title>
+ <description><![CDATA[$description]]></description>
+ $georss$extension
+</item>
+
+__HTML;
+
+echo $item;
diff --git a/views/xml/api/output.php b/views/xml/api/output.php
new file mode 100644
index 000000000..42afd44bb
--- /dev/null
+++ b/views/xml/api/output.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Elgg XML output
+ * This outputs the api as XML
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+$result = $vars['result'];
+$export = $result->export();
+
+echo serialise_object_to_xml($export, "elgg"); \ No newline at end of file
diff --git a/views/xml/messages/exceptions/exception.php b/views/xml/messages/exceptions/exception.php
new file mode 100644
index 000000000..66a0f2b96
--- /dev/null
+++ b/views/xml/messages/exceptions/exception.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Elgg exception
+ * Displays a single exception
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ * @uses $vars['object'] An exception
+ */
+
+?>
+<!--
+<?php echo get_class($vars['object']); ?>: <?php echo elgg_autop($vars['object']->getMessage()); ?>
+
+
+<?php if (elgg_get_config('debug')) { ?>
+<?php
+
+ echo print_r($vars['object'], true);
+
+ ?>
+<?php } ?>
+
+--> \ No newline at end of file
diff --git a/views/xml/page/default.php b/views/xml/page/default.php
new file mode 100644
index 000000000..0f0aecbe4
--- /dev/null
+++ b/views/xml/page/default.php
@@ -0,0 +1,14 @@
+<?php
+/**
+ * Elgg XML output pageshell
+ *
+ * @package Elgg
+ * @subpackage Core
+ *
+ */
+
+header("Content-Type: text/xml");
+// web server will handle setting the content length
+//header("Content-Length: " . strlen($vars['body']));
+echo "<?xml version='1.0' encoding='UTF-8'?>\n";
+echo $vars['body']; \ No newline at end of file
diff --git a/views/xml/xml-rpc/output.php b/views/xml/xml-rpc/output.php
new file mode 100644
index 000000000..4276029d1
--- /dev/null
+++ b/views/xml/xml-rpc/output.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Elgg XML output for XML-RPC
+ *
+ * @package Elgg
+ * @subpackage Core
+ */
+
+$result = $vars['result'];
+
+echo "$result"; \ No newline at end of file